Version 1.13.0-dev.5.0

Merge commit '3e5214ab2ecb5a40a9762df0ec1637aaeca4b4b1' into dev
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d7daf24..e6e2695 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -16,6 +16,11 @@
     callback now forward stack traces along with errors to the resulting
     streams.
 
+### Tool changes
+
+* `docgen` and 'dartdocgen' no longer ship in the sdk. The `docgen` sources have
+   been removed from the repository.
+
 ## 1.12.0
 
 ### Language changes
diff --git a/DEPS b/DEPS
index 3c294e4..9cb65e6 100644
--- a/DEPS
+++ b/DEPS
@@ -32,7 +32,7 @@
       "https://chromium.googlesource.com/external/github.com/dart-lang/%s.git",
 
   "gyp_rev": "@6ee91ad8659871916f9aa840d42e1513befdf638",
-  "co19_rev": "@fad777939a2b891c0a79b69a4d79c914049c69b0",
+  "co19_rev": "@ead3698f33d2cd41e75b6ce5d4a1203767cedd50",
   "chromium_url": "http://src.chromium.org/svn",
   "chromium_git": "https://chromium.googlesource.com",
 
@@ -77,7 +77,7 @@
   "mustache4dart_rev" : "@5724cfd85151e5b6b53ddcd3380daf188fe47f92",
   "oauth2_rev": "@1bff41f4d54505c36f2d1a001b83b8b745c452f5",
   "observe_rev": "@eee2b8ec34236fa46982575fbccff84f61202ac6",
-  "observatory_pub_packages_rev": "@cdc4b3d4c15b9c0c8e7702dff127b440afbb7485",
+  "observatory_pub_packages_rev": "@a731d3b1caf27b45aecdce9378b87a510240264d",
   "package_config_rev": "@0.1.3",
   "path_tag": "@1.3.6",
   "petitparser_rev" : "@37878",
diff --git a/WATCHLISTS b/WATCHLISTS
index 762e901..9b4f4dc 100644
--- a/WATCHLISTS
+++ b/WATCHLISTS
@@ -8,7 +8,7 @@
 {
   'WATCHLIST_DEFINITIONS': {
     'runtime': {
-      'filepath': 'runtime/',
+      'filepath': '^runtime/',
     },
     'tools': {
       'filepath': 'tools/',
diff --git a/pkg/analysis_server/benchmark/perf/analysis_timing_tests.dart b/pkg/analysis_server/benchmark/perf/analysis_timing_tests.dart
new file mode 100644
index 0000000..fd50e13
--- /dev/null
+++ b/pkg/analysis_server/benchmark/perf/analysis_timing_tests.dart
@@ -0,0 +1,59 @@
+// Copyright (c) 2015, 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 server.performance.analysis.timing;
+
+import 'dart:async';
+import 'dart:io';
+
+import 'package:args/args.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../test/utils.dart';
+import 'performance_tests.dart';
+
+const String SOURCE_OPTION = 'source';
+
+/**
+ * Pass in the directory of the source to be analyzed as option --source
+ */
+main(List<String> arguements) {
+  initializeTestEnvironment();
+  ArgParser parser = _createArgParser();
+  var args = parser.parse(arguements);
+  if (args[SOURCE_OPTION] == null) {
+    print('path to source directory must be specified');
+    exit(1);
+  }
+  source = args[SOURCE_OPTION];
+  defineReflectiveTests(AnalysisTimingIntegrationTest);
+}
+
+String source;
+
+@reflectiveTest
+class AnalysisTimingIntegrationTest
+    extends AbstractAnalysisServerPerformanceTest {
+  test_detect_analysis_done() {
+    sourceDirectory = new Directory(source);
+    subscribeToStatusNotifications();
+    return _runAndTimeAnalysis();
+  }
+
+  Future _runAndTimeAnalysis() {
+    stopwatch.start();
+    setAnalysisRoot();
+    return analysisFinished.then((_) {
+      print('analysis completed in ${stopwatch.elapsed}');
+      stopwatch.reset();
+    });
+  }
+}
+
+ArgParser _createArgParser() {
+  ArgParser parser = new ArgParser();
+  parser.addOption('source',
+      help: 'full path to source directory for analysis');
+  return parser;
+}
diff --git a/pkg/analysis_server/benchmark/perf/performance_tests.dart b/pkg/analysis_server/benchmark/perf/performance_tests.dart
new file mode 100644
index 0000000..a926e33
--- /dev/null
+++ b/pkg/analysis_server/benchmark/perf/performance_tests.dart
@@ -0,0 +1,75 @@
+// Copyright (c) 2015, 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 server.performance;
+
+import 'dart:async';
+
+import 'package:analysis_server/src/protocol.dart';
+import 'package:unittest/unittest.dart';
+
+import '../../test/integration/integration_tests.dart';
+
+/**
+ * Base class for analysis server performance tests.
+ */
+abstract class AbstractAnalysisServerPerformanceTest
+    extends AbstractAnalysisServerIntegrationTest {
+  /**
+   * Stopwatch for timing results;
+   */
+  Stopwatch stopwatch = new Stopwatch();
+
+  /**
+   * Send the server an 'analysis.setAnalysisRoots' command directing it to
+   * analyze [sourceDirectory].
+   */
+  Future setAnalysisRoot() {
+    return sendAnalysisSetAnalysisRoots([sourceDirectory.path], []);
+  }
+
+  /**
+   * Enable [SERVER_STATUS] notifications so that [analysisFinished]
+   * can be used.
+   */
+  Future subscribeToStatusNotifications() {
+    List<Future> futures = <Future>[];
+    futures.add(sendServerSetSubscriptions([ServerService.STATUS]));
+    return Future.wait(futures);
+  }
+
+  /**
+   * The server is automatically started before every test.
+   */
+  @override
+  Future setUp() {
+    onAnalysisErrors.listen((AnalysisErrorsParams params) {
+      currentAnalysisErrors[params.file] = params.errors;
+    });
+    onServerError.listen((ServerErrorParams params) {
+      // A server error should never happen during an integration test.
+      fail('${params.message}\n${params.stackTrace}');
+    });
+    Completer serverConnected = new Completer();
+    onServerConnected.listen((_) {
+      expect(serverConnected.isCompleted, isFalse);
+      serverConnected.complete();
+    });
+    return startServer().then((_) {
+      server.listenToOutput(dispatchNotification);
+      server.exitCode.then((_) {
+        skipShutdown = true;
+      });
+      return serverConnected.future;
+    });
+  }
+
+  /**
+   * After every test, the server is stopped.
+   */
+  @override
+  Future tearDown() {
+    return shutdownIfNeeded();
+  }
+}
diff --git a/pkg/analysis_server/doc/api.html b/pkg/analysis_server/doc/api.html
index 8fcb597..52b4419 100644
--- a/pkg/analysis_server/doc/api.html
+++ b/pkg/analysis_server/doc/api.html
@@ -420,6 +420,7 @@
       
       
       
+      
     <h3>Requests</h3><dl><dt class="request"><a name="request_analysis.getErrors">analysis.getErrors</a> (<a href="#request_analysis.getErrors">#</a>)</dt><dd><div class="box"><pre>request: {
   "id": String
   "method": "analysis.getErrors"
@@ -1039,6 +1040,40 @@
               other highlight regions if there is more than one
               meaning associated with a particular region.
             </p>
+          </dd></dl></dd><dt class="notification"><a name="notification_analysis.implemented">analysis.implemented</a> (<a href="#notification_analysis.implemented">#</a>)</dt><dd><div class="box"><pre>notification: {
+  "event": "analysis.implemented"
+  "params": {
+    "<b>file</b>": <a href="#type_FilePath">FilePath</a>
+    "<b>classes</b>": List&lt;<a href="#type_ImplementedClass">ImplementedClass</a>&gt;
+    "<b>members</b>": List&lt;<a href="#type_ImplementedMember">ImplementedMember</a>&gt;
+  }
+}</pre></div>
+        <p>
+          Reports the classes that are implemented or extended and
+          class members that are implemented or overridden in a file.
+        </p>
+        <p>
+          This notification is not subscribed to by default. Clients
+          can subscribe by including the value <tt>"IMPLEMENTED"</tt> in
+          the list of services passed in an analysis.setSubscriptions
+          request.
+        </p>
+        
+      <h4>Parameters</h4><dl><dt class="field"><b><i>file ( <a href="#type_FilePath">FilePath</a> )</i></b></dt><dd>
+            
+            <p>
+              The file with which the implementations are associated.
+            </p>
+          </dd><dt class="field"><b><i>classes ( List&lt;<a href="#type_ImplementedClass">ImplementedClass</a>&gt; )</i></b></dt><dd>
+            
+            <p>
+              The classes defined in the file that are implemented or extended.
+            </p>
+          </dd><dt class="field"><b><i>members ( List&lt;<a href="#type_ImplementedMember">ImplementedMember</a>&gt; )</i></b></dt><dd>
+            
+            <p>
+              The member defined in the file that are implemented or overridden.
+            </p>
           </dd></dl></dd><dt class="notification"><a name="notification_analysis.invalidate">analysis.invalidate</a> (<a href="#notification_analysis.invalidate">#</a>)</dt><dd><div class="box"><pre>notification: {
   "event": "analysis.invalidate"
   "params": {
@@ -2272,6 +2307,8 @@
       
       
       
+      
+      
     <dl><dt class="typeDefinition"><a name="type_AddContentOverlay">AddContentOverlay: object</a></dt><dd>
         <p>
           A directive to begin overlaying the contents of a file.  The
@@ -2416,7 +2453,7 @@
           are related to a specific list of files.
         </p>
         
-      <dl><dt class="value">FOLDING</dt><dt class="value">HIGHLIGHTS</dt><dt class="value">INVALIDATE</dt><dd>
+      <dl><dt class="value">FOLDING</dt><dt class="value">HIGHLIGHTS</dt><dt class="value">IMPLEMENTED</dt><dt class="value">INVALIDATE</dt><dd>
             
             <p>
               This service is not currently implemented and will become a
@@ -3037,6 +3074,36 @@
               is omitted if the location does not correspond to an
               expression.
             </p>
+          </dd></dl></dd><dt class="typeDefinition"><a name="type_ImplementedClass">ImplementedClass: object</a></dt><dd>
+        <p>
+          A description of a class that is implemented or extended.
+        </p>
+        
+      <dl><dt class="field"><b><i>offset ( int )</i></b></dt><dd>
+            
+            <p>
+              The offset of the name of the implemented class.
+            </p>
+          </dd><dt class="field"><b><i>length ( int )</i></b></dt><dd>
+            
+            <p>
+              The length of the name of the implemented class.
+            </p>
+          </dd></dl></dd><dt class="typeDefinition"><a name="type_ImplementedMember">ImplementedMember: object</a></dt><dd>
+        <p>
+          A description of a class member that is implemented or overridden.
+        </p>
+        
+      <dl><dt class="field"><b><i>offset ( int )</i></b></dt><dd>
+            
+            <p>
+              The offset of the name of the implemented member.
+            </p>
+          </dd><dt class="field"><b><i>length ( int )</i></b></dt><dd>
+            
+            <p>
+              The length of the name of the implemented member.
+            </p>
           </dd></dl></dd><dt class="typeDefinition"><a name="type_LinkedEditGroup">LinkedEditGroup: object</a></dt><dd>
         <p>
           A collection of positions that should be linked (edited
@@ -4135,7 +4202,7 @@
       TBD
     </p>
     <h2 class="domain"><a name="index">Index</a></h2>
-    <h3>Domains</h3><h4>server (<a href="#domain_server">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_server.getVersion">getVersion</a></li><li><a href="#request_server.shutdown">shutdown</a></li><li><a href="#request_server.setSubscriptions">setSubscriptions</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_server.connected">connected</a></li><li><a href="#notification_server.error">error</a></li><li><a href="#notification_server.status">status</a></li></ul></div></div><h4>analysis (<a href="#domain_analysis">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_analysis.getErrors">getErrors</a></li><li><a href="#request_analysis.getHover">getHover</a></li><li><a href="#request_analysis.getLibraryDependencies">getLibraryDependencies</a></li><li><a href="#request_analysis.getNavigation">getNavigation</a></li><li><a href="#request_analysis.reanalyze">reanalyze</a></li><li><a href="#request_analysis.setAnalysisRoots">setAnalysisRoots</a></li><li><a href="#request_analysis.setGeneralSubscriptions">setGeneralSubscriptions</a></li><li><a href="#request_analysis.setPriorityFiles">setPriorityFiles</a></li><li><a href="#request_analysis.setSubscriptions">setSubscriptions</a></li><li><a href="#request_analysis.updateContent">updateContent</a></li><li><a href="#request_analysis.updateOptions">updateOptions</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_analysis.analyzedFiles">analyzedFiles</a></li><li><a href="#notification_analysis.errors">errors</a></li><li><a href="#notification_analysis.flushResults">flushResults</a></li><li><a href="#notification_analysis.folding">folding</a></li><li><a href="#notification_analysis.highlights">highlights</a></li><li><a href="#notification_analysis.invalidate">invalidate</a></li><li><a href="#notification_analysis.navigation">navigation</a></li><li><a href="#notification_analysis.occurrences">occurrences</a></li><li><a href="#notification_analysis.outline">outline</a></li><li><a href="#notification_analysis.overrides">overrides</a></li></ul></div></div><h4>completion (<a href="#domain_completion">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_completion.getSuggestions">getSuggestions</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_completion.results">results</a></li></ul></div></div><h4>search (<a href="#domain_search">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_search.findElementReferences">findElementReferences</a></li><li><a href="#request_search.findMemberDeclarations">findMemberDeclarations</a></li><li><a href="#request_search.findMemberReferences">findMemberReferences</a></li><li><a href="#request_search.findTopLevelDeclarations">findTopLevelDeclarations</a></li><li><a href="#request_search.getTypeHierarchy">getTypeHierarchy</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_search.results">results</a></li></ul></div></div><h4>edit (<a href="#domain_edit">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_edit.format">format</a></li><li><a href="#request_edit.getAssists">getAssists</a></li><li><a href="#request_edit.getAvailableRefactorings">getAvailableRefactorings</a></li><li><a href="#request_edit.getFixes">getFixes</a></li><li><a href="#request_edit.getRefactoring">getRefactoring</a></li><li><a href="#request_edit.sortMembers">sortMembers</a></li><li><a href="#request_edit.organizeDirectives">organizeDirectives</a></li></ul></div><h4>execution (<a href="#domain_execution">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_execution.createContext">createContext</a></li><li><a href="#request_execution.deleteContext">deleteContext</a></li><li><a href="#request_execution.mapUri">mapUri</a></li><li><a href="#request_execution.setSubscriptions">setSubscriptions</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_execution.launchData">launchData</a></li></ul></div></div><h3>Types (<a href="#types">↑</a>)</h3><div class="subindex"><ul><li><a href="#type_AddContentOverlay">AddContentOverlay</a></li><li><a href="#type_AnalysisError">AnalysisError</a></li><li><a href="#type_AnalysisErrorFixes">AnalysisErrorFixes</a></li><li><a href="#type_AnalysisErrorSeverity">AnalysisErrorSeverity</a></li><li><a href="#type_AnalysisErrorType">AnalysisErrorType</a></li><li><a href="#type_AnalysisOptions">AnalysisOptions</a></li><li><a href="#type_AnalysisService">AnalysisService</a></li><li><a href="#type_AnalysisStatus">AnalysisStatus</a></li><li><a href="#type_ChangeContentOverlay">ChangeContentOverlay</a></li><li><a href="#type_CompletionId">CompletionId</a></li><li><a href="#type_CompletionSuggestion">CompletionSuggestion</a></li><li><a href="#type_CompletionSuggestionKind">CompletionSuggestionKind</a></li><li><a href="#type_Element">Element</a></li><li><a href="#type_ElementKind">ElementKind</a></li><li><a href="#type_ExecutableFile">ExecutableFile</a></li><li><a href="#type_ExecutableKind">ExecutableKind</a></li><li><a href="#type_ExecutionContextId">ExecutionContextId</a></li><li><a href="#type_ExecutionService">ExecutionService</a></li><li><a href="#type_FilePath">FilePath</a></li><li><a href="#type_FoldingKind">FoldingKind</a></li><li><a href="#type_FoldingRegion">FoldingRegion</a></li><li><a href="#type_GeneralAnalysisService">GeneralAnalysisService</a></li><li><a href="#type_HighlightRegion">HighlightRegion</a></li><li><a href="#type_HighlightRegionType">HighlightRegionType</a></li><li><a href="#type_HoverInformation">HoverInformation</a></li><li><a href="#type_LinkedEditGroup">LinkedEditGroup</a></li><li><a href="#type_LinkedEditSuggestion">LinkedEditSuggestion</a></li><li><a href="#type_LinkedEditSuggestionKind">LinkedEditSuggestionKind</a></li><li><a href="#type_Location">Location</a></li><li><a href="#type_NavigationRegion">NavigationRegion</a></li><li><a href="#type_NavigationTarget">NavigationTarget</a></li><li><a href="#type_Occurrences">Occurrences</a></li><li><a href="#type_Outline">Outline</a></li><li><a href="#type_Override">Override</a></li><li><a href="#type_OverriddenMember">OverriddenMember</a></li><li><a href="#type_Position">Position</a></li><li><a href="#type_PubStatus">PubStatus</a></li><li><a href="#type_RefactoringKind">RefactoringKind</a></li><li><a href="#type_RefactoringMethodParameter">RefactoringMethodParameter</a></li><li><a href="#type_RefactoringFeedback">RefactoringFeedback</a></li><li><a href="#type_RefactoringOptions">RefactoringOptions</a></li><li><a href="#type_RefactoringMethodParameterKind">RefactoringMethodParameterKind</a></li><li><a href="#type_RefactoringProblem">RefactoringProblem</a></li><li><a href="#type_RefactoringProblemSeverity">RefactoringProblemSeverity</a></li><li><a href="#type_RemoveContentOverlay">RemoveContentOverlay</a></li><li><a href="#type_RequestError">RequestError</a></li><li><a href="#type_RequestErrorCode">RequestErrorCode</a></li><li><a href="#type_SearchId">SearchId</a></li><li><a href="#type_SearchResult">SearchResult</a></li><li><a href="#type_SearchResultKind">SearchResultKind</a></li><li><a href="#type_ServerService">ServerService</a></li><li><a href="#type_SourceChange">SourceChange</a></li><li><a href="#type_SourceEdit">SourceEdit</a></li><li><a href="#type_SourceFileEdit">SourceFileEdit</a></li><li><a href="#type_TypeHierarchyItem">TypeHierarchyItem</a></li></ul></div><h3>Refactorings (<a href="#refactorings">↑</a>)</h3><div class="subindex"><ul><li><a href="#refactoring_CONVERT_GETTER_TO_METHOD">CONVERT_GETTER_TO_METHOD</a></li><li><a href="#refactoring_CONVERT_METHOD_TO_GETTER">CONVERT_METHOD_TO_GETTER</a></li><li><a href="#refactoring_EXTRACT_LOCAL_VARIABLE">EXTRACT_LOCAL_VARIABLE</a></li><li><a href="#refactoring_EXTRACT_METHOD">EXTRACT_METHOD</a></li><li><a href="#refactoring_INLINE_LOCAL_VARIABLE">INLINE_LOCAL_VARIABLE</a></li><li><a href="#refactoring_INLINE_METHOD">INLINE_METHOD</a></li><li><a href="#refactoring_MOVE_FILE">MOVE_FILE</a></li><li><a href="#refactoring_RENAME">RENAME</a></li></ul></div>
+    <h3>Domains</h3><h4>server (<a href="#domain_server">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_server.getVersion">getVersion</a></li><li><a href="#request_server.shutdown">shutdown</a></li><li><a href="#request_server.setSubscriptions">setSubscriptions</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_server.connected">connected</a></li><li><a href="#notification_server.error">error</a></li><li><a href="#notification_server.status">status</a></li></ul></div></div><h4>analysis (<a href="#domain_analysis">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_analysis.getErrors">getErrors</a></li><li><a href="#request_analysis.getHover">getHover</a></li><li><a href="#request_analysis.getLibraryDependencies">getLibraryDependencies</a></li><li><a href="#request_analysis.getNavigation">getNavigation</a></li><li><a href="#request_analysis.reanalyze">reanalyze</a></li><li><a href="#request_analysis.setAnalysisRoots">setAnalysisRoots</a></li><li><a href="#request_analysis.setGeneralSubscriptions">setGeneralSubscriptions</a></li><li><a href="#request_analysis.setPriorityFiles">setPriorityFiles</a></li><li><a href="#request_analysis.setSubscriptions">setSubscriptions</a></li><li><a href="#request_analysis.updateContent">updateContent</a></li><li><a href="#request_analysis.updateOptions">updateOptions</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_analysis.analyzedFiles">analyzedFiles</a></li><li><a href="#notification_analysis.errors">errors</a></li><li><a href="#notification_analysis.flushResults">flushResults</a></li><li><a href="#notification_analysis.folding">folding</a></li><li><a href="#notification_analysis.highlights">highlights</a></li><li><a href="#notification_analysis.implemented">implemented</a></li><li><a href="#notification_analysis.invalidate">invalidate</a></li><li><a href="#notification_analysis.navigation">navigation</a></li><li><a href="#notification_analysis.occurrences">occurrences</a></li><li><a href="#notification_analysis.outline">outline</a></li><li><a href="#notification_analysis.overrides">overrides</a></li></ul></div></div><h4>completion (<a href="#domain_completion">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_completion.getSuggestions">getSuggestions</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_completion.results">results</a></li></ul></div></div><h4>search (<a href="#domain_search">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_search.findElementReferences">findElementReferences</a></li><li><a href="#request_search.findMemberDeclarations">findMemberDeclarations</a></li><li><a href="#request_search.findMemberReferences">findMemberReferences</a></li><li><a href="#request_search.findTopLevelDeclarations">findTopLevelDeclarations</a></li><li><a href="#request_search.getTypeHierarchy">getTypeHierarchy</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_search.results">results</a></li></ul></div></div><h4>edit (<a href="#domain_edit">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_edit.format">format</a></li><li><a href="#request_edit.getAssists">getAssists</a></li><li><a href="#request_edit.getAvailableRefactorings">getAvailableRefactorings</a></li><li><a href="#request_edit.getFixes">getFixes</a></li><li><a href="#request_edit.getRefactoring">getRefactoring</a></li><li><a href="#request_edit.sortMembers">sortMembers</a></li><li><a href="#request_edit.organizeDirectives">organizeDirectives</a></li></ul></div><h4>execution (<a href="#domain_execution">↑</a>)</h4><div class="subindex"><h5>Requests</h5><ul><li><a href="#request_execution.createContext">createContext</a></li><li><a href="#request_execution.deleteContext">deleteContext</a></li><li><a href="#request_execution.mapUri">mapUri</a></li><li><a href="#request_execution.setSubscriptions">setSubscriptions</a></li></ul><h5>Notifications</h5><div class="subindex"><ul><li><a href="#notification_execution.launchData">launchData</a></li></ul></div></div><h3>Types (<a href="#types">↑</a>)</h3><div class="subindex"><ul><li><a href="#type_AddContentOverlay">AddContentOverlay</a></li><li><a href="#type_AnalysisError">AnalysisError</a></li><li><a href="#type_AnalysisErrorFixes">AnalysisErrorFixes</a></li><li><a href="#type_AnalysisErrorSeverity">AnalysisErrorSeverity</a></li><li><a href="#type_AnalysisErrorType">AnalysisErrorType</a></li><li><a href="#type_AnalysisOptions">AnalysisOptions</a></li><li><a href="#type_AnalysisService">AnalysisService</a></li><li><a href="#type_AnalysisStatus">AnalysisStatus</a></li><li><a href="#type_ChangeContentOverlay">ChangeContentOverlay</a></li><li><a href="#type_CompletionId">CompletionId</a></li><li><a href="#type_CompletionSuggestion">CompletionSuggestion</a></li><li><a href="#type_CompletionSuggestionKind">CompletionSuggestionKind</a></li><li><a href="#type_Element">Element</a></li><li><a href="#type_ElementKind">ElementKind</a></li><li><a href="#type_ExecutableFile">ExecutableFile</a></li><li><a href="#type_ExecutableKind">ExecutableKind</a></li><li><a href="#type_ExecutionContextId">ExecutionContextId</a></li><li><a href="#type_ExecutionService">ExecutionService</a></li><li><a href="#type_FilePath">FilePath</a></li><li><a href="#type_FoldingKind">FoldingKind</a></li><li><a href="#type_FoldingRegion">FoldingRegion</a></li><li><a href="#type_GeneralAnalysisService">GeneralAnalysisService</a></li><li><a href="#type_HighlightRegion">HighlightRegion</a></li><li><a href="#type_HighlightRegionType">HighlightRegionType</a></li><li><a href="#type_HoverInformation">HoverInformation</a></li><li><a href="#type_ImplementedClass">ImplementedClass</a></li><li><a href="#type_ImplementedMember">ImplementedMember</a></li><li><a href="#type_LinkedEditGroup">LinkedEditGroup</a></li><li><a href="#type_LinkedEditSuggestion">LinkedEditSuggestion</a></li><li><a href="#type_LinkedEditSuggestionKind">LinkedEditSuggestionKind</a></li><li><a href="#type_Location">Location</a></li><li><a href="#type_NavigationRegion">NavigationRegion</a></li><li><a href="#type_NavigationTarget">NavigationTarget</a></li><li><a href="#type_Occurrences">Occurrences</a></li><li><a href="#type_Outline">Outline</a></li><li><a href="#type_Override">Override</a></li><li><a href="#type_OverriddenMember">OverriddenMember</a></li><li><a href="#type_Position">Position</a></li><li><a href="#type_PubStatus">PubStatus</a></li><li><a href="#type_RefactoringKind">RefactoringKind</a></li><li><a href="#type_RefactoringMethodParameter">RefactoringMethodParameter</a></li><li><a href="#type_RefactoringFeedback">RefactoringFeedback</a></li><li><a href="#type_RefactoringOptions">RefactoringOptions</a></li><li><a href="#type_RefactoringMethodParameterKind">RefactoringMethodParameterKind</a></li><li><a href="#type_RefactoringProblem">RefactoringProblem</a></li><li><a href="#type_RefactoringProblemSeverity">RefactoringProblemSeverity</a></li><li><a href="#type_RemoveContentOverlay">RemoveContentOverlay</a></li><li><a href="#type_RequestError">RequestError</a></li><li><a href="#type_RequestErrorCode">RequestErrorCode</a></li><li><a href="#type_SearchId">SearchId</a></li><li><a href="#type_SearchResult">SearchResult</a></li><li><a href="#type_SearchResultKind">SearchResultKind</a></li><li><a href="#type_ServerService">ServerService</a></li><li><a href="#type_SourceChange">SourceChange</a></li><li><a href="#type_SourceEdit">SourceEdit</a></li><li><a href="#type_SourceFileEdit">SourceFileEdit</a></li><li><a href="#type_TypeHierarchyItem">TypeHierarchyItem</a></li></ul></div><h3>Refactorings (<a href="#refactorings">↑</a>)</h3><div class="subindex"><ul><li><a href="#refactoring_CONVERT_GETTER_TO_METHOD">CONVERT_GETTER_TO_METHOD</a></li><li><a href="#refactoring_CONVERT_METHOD_TO_GETTER">CONVERT_METHOD_TO_GETTER</a></li><li><a href="#refactoring_EXTRACT_LOCAL_VARIABLE">EXTRACT_LOCAL_VARIABLE</a></li><li><a href="#refactoring_EXTRACT_METHOD">EXTRACT_METHOD</a></li><li><a href="#refactoring_INLINE_LOCAL_VARIABLE">INLINE_LOCAL_VARIABLE</a></li><li><a href="#refactoring_INLINE_METHOD">INLINE_METHOD</a></li><li><a href="#refactoring_MOVE_FILE">MOVE_FILE</a></li><li><a href="#refactoring_RENAME">RENAME</a></li></ul></div>
   
 
 </body></html>
\ No newline at end of file
diff --git a/pkg/analysis_server/lib/analysis/index/index_dart.dart b/pkg/analysis_server/lib/analysis/index/index_dart.dart
deleted file mode 100644
index ed1869f..0000000
--- a/pkg/analysis_server/lib/analysis/index/index_dart.dart
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (c) 2015, 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 analysis_server.analysis.index.index_dart;
-
-import 'package:analysis_server/analysis/index/index_core.dart';
-import 'package:analyzer/src/generated/ast.dart';
-import 'package:analyzer/src/generated/engine.dart';
-import 'package:analyzer/src/generated/source.dart';
-
-/**
- * An [IndexContributor] that can be used to contribute relationships for Dart
- * files.
- *
- * Clients are expected to subtype this class when implementing plugins.
- */
-abstract class DartIndexContributor extends IndexContributor {
-  @override
-  void contributeTo(IndexStore store, AnalysisContext context, Source source) {
-    if (!AnalysisEngine.isDartFileName(source.fullName)) {
-      return;
-    }
-    List<Source> libraries = context.getLibrariesContaining(source);
-    if (libraries.isEmpty) {
-      return;
-    }
-    libraries.forEach((Source library) {
-      CompilationUnit unit = context.resolveCompilationUnit2(source, library);
-      if (unit != null) {
-        internalContributeTo(store, unit);
-      }
-    });
-  }
-
-  /**
-   * Contribute relationships to the given index [store] based on the given
-   * fully resolved compilation[unit].
-   */
-  void internalContributeTo(IndexStore store, CompilationUnit unit);
-}
diff --git a/pkg/analysis_server/lib/analysis/index/index_core.dart b/pkg/analysis_server/lib/analysis/index_core.dart
similarity index 97%
rename from pkg/analysis_server/lib/analysis/index/index_core.dart
rename to pkg/analysis_server/lib/analysis/index_core.dart
index 81d232d..aac9d8a 100644
--- a/pkg/analysis_server/lib/analysis/index/index_core.dart
+++ b/pkg/analysis_server/lib/analysis/index_core.dart
@@ -115,10 +115,10 @@
  */
 abstract class IndexContributor {
   /**
-   * Contribute relationships to the given index [store] as a result of
-   * analyzing the given [source] in the given [context].
+   * Contribute relationships existing in the given [object] to the given
+   * index [store] in the given [context].
    */
-  void contributeTo(IndexStore store, AnalysisContext context, Source source);
+  void contributeTo(IndexStore store, AnalysisContext context, Object object);
 }
 
 // A sketch of what the driver routine might look like:
diff --git a/pkg/analysis_server/lib/plugin/index.dart b/pkg/analysis_server/lib/plugin/index.dart
index 088ae52..1e5b05c 100644
--- a/pkg/analysis_server/lib/plugin/index.dart
+++ b/pkg/analysis_server/lib/plugin/index.dart
@@ -30,7 +30,7 @@
  */
 library analysis_server.plugin.index;
 
-import 'package:analysis_server/analysis/index/index_core.dart';
+import 'package:analysis_server/analysis/index_core.dart';
 import 'package:analysis_server/src/plugin/server_plugin.dart';
 import 'package:plugin/plugin.dart';
 
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index c8108b8..cee3508 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -450,6 +450,26 @@
     return folderMap.values;
   }
 
+  CompilationUnitElement getCompilationUnitElement(String file) {
+    ContextSourcePair pair = getContextSourcePair(file);
+    if (pair == null) {
+      return null;
+    }
+    // prepare AnalysisContext and Source
+    AnalysisContext context = pair.context;
+    Source unitSource = pair.source;
+    if (context == null || unitSource == null) {
+      return null;
+    }
+    // get element in the first library
+    List<Source> librarySources = context.getLibrariesContaining(unitSource);
+    if (!librarySources.isNotEmpty) {
+      return null;
+    }
+    Source librarySource = librarySources.first;
+    return context.getCompilationUnitElement(unitSource, librarySource);
+  }
+
   /**
    * Return the [AnalysisContext] that contains the given [path].
    * Return `null` if no context contains the [path].
@@ -536,7 +556,7 @@
    */
   List<Element> getElementsAtOffset(String file, int offset) {
     List<AstNode> nodes = getNodesAtOffset(file, offset);
-    return getElementsOfNodes(nodes, offset);
+    return getElementsOfNodes(nodes);
   }
 
   /**
@@ -544,7 +564,7 @@
    *
    * May be empty if not resolved, but not `null`.
    */
-  List<Element> getElementsOfNodes(List<AstNode> nodes, int offset) {
+  List<Element> getElementsOfNodes(List<AstNode> nodes) {
     List<Element> elements = <Element>[];
     for (AstNode node in nodes) {
       if (node is SimpleIdentifier && node.parent is LibraryIdentifier) {
@@ -553,7 +573,7 @@
       if (node is LibraryIdentifier) {
         node = node.parent;
       }
-      Element element = ElementLocator.locateWithOffset(node, offset);
+      Element element = ElementLocator.locate(node);
       if (node is SimpleIdentifier && element is PrefixElement) {
         element = getImportElement(node);
       }
@@ -564,6 +584,23 @@
     return elements;
   }
 
+// TODO(brianwilkerson) Add the following method after 'prioritySources' has
+// been added to InternalAnalysisContext.
+//  /**
+//   * Return a list containing the full names of all of the sources that are
+//   * priority sources.
+//   */
+//  List<String> getPriorityFiles() {
+//    List<String> priorityFiles = new List<String>();
+//    folderMap.values.forEach((ContextDirectory directory) {
+//      InternalAnalysisContext context = directory.context;
+//      context.prioritySources.forEach((Source source) {
+//        priorityFiles.add(source.fullName);
+//      });
+//    });
+//    return priorityFiles;
+//  }
+
   /**
    * Return an analysis error info containing the array of all of the errors and
    * the line info associated with [file].
@@ -590,23 +627,6 @@
     return context.getErrors(source);
   }
 
-// TODO(brianwilkerson) Add the following method after 'prioritySources' has
-// been added to InternalAnalysisContext.
-//  /**
-//   * Return a list containing the full names of all of the sources that are
-//   * priority sources.
-//   */
-//  List<String> getPriorityFiles() {
-//    List<String> priorityFiles = new List<String>();
-//    folderMap.values.forEach((ContextDirectory directory) {
-//      InternalAnalysisContext context = directory.context;
-//      context.prioritySources.forEach((Source source) {
-//        priorityFiles.add(source.fullName);
-//      });
-//    });
-//    return priorityFiles;
-//  }
-
   /**
    * Returns resolved [AstNode]s at the given [offset] of the given [file].
    *
@@ -790,6 +810,7 @@
           sendAnalysisNotificationAnalyzedFiles(this);
         }
         sendStatusNotification(null);
+        _scheduleAnalysisImplementedNotification();
         if (_onAnalysisCompleteCompleter != null) {
           _onAnalysisCompleteCompleter.complete();
           _onAnalysisCompleteCompleter = null;
@@ -993,6 +1014,11 @@
     });
     // remember new subscriptions
     this.analysisServices = subscriptions;
+    // special case for implemented elements
+    if (analysisServices.containsKey(AnalysisService.IMPLEMENTED) &&
+        isAnalysisComplete()) {
+      _scheduleAnalysisImplementedNotification();
+    }
   }
 
   /**
@@ -1282,6 +1308,13 @@
     });
   }
 
+  _scheduleAnalysisImplementedNotification() async {
+    Set<String> files = analysisServices[AnalysisService.IMPLEMENTED];
+    if (files != null) {
+      scheduleImplementedNotification(this, files);
+    }
+  }
+
   /**
    * Schedules [performOperation] exection.
    */
diff --git a/pkg/analysis_server/lib/src/computer/computer_hover.dart b/pkg/analysis_server/lib/src/computer/computer_hover.dart
index e80a243..c09668b 100644
--- a/pkg/analysis_server/lib/src/computer/computer_hover.dart
+++ b/pkg/analysis_server/lib/src/computer/computer_hover.dart
@@ -83,7 +83,7 @@
       HoverInformation hover =
           new HoverInformation(expression.offset, expression.length);
       // element
-      Element element = ElementLocator.locateWithOffset(expression, _offset);
+      Element element = ElementLocator.locate(expression);
       if (element != null) {
         // variable, if synthetic accessor
         if (element is PropertyAccessorElement) {
diff --git a/pkg/analysis_server/lib/src/constants.dart b/pkg/analysis_server/lib/src/constants.dart
index f37446b..391e41c 100644
--- a/pkg/analysis_server/lib/src/constants.dart
+++ b/pkg/analysis_server/lib/src/constants.dart
@@ -41,6 +41,7 @@
 const String ANALYSIS_ANALYZED_FILES = 'analysis.analyzedFiles';
 const String ANALYSIS_ERRORS = 'analysis.errors';
 const String ANALYSIS_HIGHLIGHTS = 'analysis.highlights';
+const String ANALYSIS_IMPLEMENTED = 'analysis.implemented';
 const String ANALYSIS_NAVIGATION = 'analysis.navigation';
 const String ANALYSIS_OCCURRENCES = 'analysis.occurrences';
 const String ANALYSIS_OUTLINE = 'analysis.outline';
diff --git a/pkg/analysis_server/lib/src/context_manager.dart b/pkg/analysis_server/lib/src/context_manager.dart
index 153461a..f81f5b8 100644
--- a/pkg/analysis_server/lib/src/context_manager.dart
+++ b/pkg/analysis_server/lib/src/context_manager.dart
@@ -14,6 +14,7 @@
 import 'package:analysis_server/uri/resolver_provider.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/instrumentation/instrumentation.dart';
+import 'package:analyzer/plugin/options.dart';
 import 'package:analyzer/source/analysis_options_provider.dart';
 import 'package:analyzer/source/package_map_provider.dart';
 import 'package:analyzer/source/package_map_resolver.dart';
@@ -466,6 +467,12 @@
    */
   void processOptionsForContext(
       ContextInfo info, Map<String, YamlNode> options) {
+    //TODO(pquitslund): push handling into an options processor plugin contributed to engine.
+    //AnalysisEngine.instance.optionsPlugin.optionsProcessors
+    //    .forEach((OptionsProcessor p) => p.optionsProcessed(options));
+    if (options == null) {
+      return;
+    }
     YamlMap analyzer = options['analyzer'];
     if (analyzer == null) {
       // No options for analyzer.
@@ -808,8 +815,18 @@
       ContextInfo parent, Folder folder, File packagespecFile) {
     ContextInfo info = new ContextInfo(this, parent, folder, packagespecFile,
         normalizedPackageRoots[folder.path]);
-    Map<String, YamlNode> options = analysisOptionsProvider.getOptions(folder);
-    processOptionsForContext(info, options);
+
+    try {
+      Map<String, YamlNode> options =
+          analysisOptionsProvider.getOptions(folder);
+      processOptionsForContext(info, options);
+    } on Exception catch (e) {
+      // TODO(pquitslund): contribute plugin that sends error notification on options file.
+      // Related test: context_manager_test.test_analysis_options_parse_failure()
+      // AnalysisEngine.instance.optionsPlugin.optionsProcessors
+      //      .forEach((OptionsProcessor p) => p.onError(e));
+    }
+
     FolderDisposition disposition;
     List<String> dependencies = <String>[];
 
@@ -993,7 +1010,7 @@
       _recomputeFolderDisposition(info);
     }
     // maybe excluded globally
-    if (_isExcluded(path)) {
+    if (_isExcluded(path) || _isContainedInDotFolder(info.folder.path, path)) {
       return;
     }
     // maybe excluded from the context, so other context will handle it
@@ -1129,6 +1146,23 @@
   }
 
   /**
+   * Determine whether the given [path], when interpreted relative to the
+   * context root [root], contains a folder whose name starts with '.'.
+   */
+  bool _isContainedInDotFolder(String root, String path) {
+    String relativePath =
+        pathContext.relative(pathContext.dirname(path), from: root);
+    for (String pathComponent in pathContext.split(relativePath)) {
+      if (pathComponent.startsWith('.') &&
+          pathComponent != '.' &&
+          pathComponent != '..') {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
    * Returns `true` if the given [path] is excluded by [excludedPaths].
    */
   bool _isExcluded(String path) => _isExcludedBy(excludedPaths, path);
diff --git a/pkg/analysis_server/lib/src/domains/analysis/implemented_dart.dart b/pkg/analysis_server/lib/src/domains/analysis/implemented_dart.dart
new file mode 100644
index 0000000..0891156
--- /dev/null
+++ b/pkg/analysis_server/lib/src/domains/analysis/implemented_dart.dart
@@ -0,0 +1,67 @@
+// Copyright (c) 2015, 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 domains.analysis.implemented_dart;
+
+import 'package:analysis_server/src/protocol_server.dart' as protocol;
+import 'package:analysis_server/src/services/search/hierarchy.dart';
+import 'package:analysis_server/src/services/search/search_engine.dart';
+import 'package:analyzer/src/generated/element.dart';
+
+class ImplementedComputer {
+  final SearchEngine searchEngine;
+  final CompilationUnitElement unitElement;
+
+  List<protocol.ImplementedClass> classes = <protocol.ImplementedClass>[];
+  List<protocol.ImplementedMember> members = <protocol.ImplementedMember>[];
+
+  Set<ClassElement> subtypes;
+
+  ImplementedComputer(this.searchEngine, this.unitElement);
+
+  compute() async {
+    for (ClassElement type in unitElement.types) {
+      subtypes = await getSubClasses(searchEngine, type);
+      if (subtypes.isNotEmpty) {
+        _addImplementedClass(type);
+      }
+      type.accessors.forEach(_addMemberIfImplemented);
+      type.fields.forEach(_addMemberIfImplemented);
+      type.methods.forEach(_addMemberIfImplemented);
+    }
+  }
+
+  void _addImplementedClass(ClassElement type) {
+    int offset = type.nameOffset;
+    int length = type.nameLength;
+    classes.add(new protocol.ImplementedClass(offset, length));
+  }
+
+  void _addImplementedMember(Element member) {
+    int offset = member.nameOffset;
+    int length = member.nameLength;
+    members.add(new protocol.ImplementedMember(offset, length));
+  }
+
+  void _addMemberIfImplemented(Element element) {
+    if (!element.isSynthetic) {
+      String name = element.displayName;
+      if (name != null && _hasOverride(name)) {
+        _addImplementedMember(element);
+      }
+    }
+  }
+
+  bool _hasOverride(String name) {
+    for (ClassElement subtype in subtypes) {
+      if (subtype.getMethod(name) != null) {
+        return true;
+      }
+      if (subtype.getField(name) != null) {
+        return true;
+      }
+    }
+    return false;
+  }
+}
diff --git a/pkg/analysis_server/lib/src/domains/analysis/navigation_dart.dart b/pkg/analysis_server/lib/src/domains/analysis/navigation_dart.dart
index 182f762..8b87629 100644
--- a/pkg/analysis_server/lib/src/domains/analysis/navigation_dart.dart
+++ b/pkg/analysis_server/lib/src/domains/analysis/navigation_dart.dart
@@ -40,6 +40,52 @@
   }
 }
 
+/**
+ * A Dart specific wrapper around [NavigationCollector].
+ */
+class _DartNavigationCollector {
+  final NavigationCollector collector;
+
+  _DartNavigationCollector(this.collector);
+
+  void _addRegion(int offset, int length, Element element) {
+    if (element is FieldFormalParameterElement) {
+      element = (element as FieldFormalParameterElement).field;
+    }
+    if (element == null || element == DynamicElementImpl.instance) {
+      return;
+    }
+    if (element.location == null) {
+      return;
+    }
+    protocol.ElementKind kind =
+        protocol.newElementKind_fromEngine(element.kind);
+    protocol.Location location = protocol.newLocation_fromElement(element);
+    if (location == null) {
+      return;
+    }
+    collector.addRegion(offset, length, kind, location);
+  }
+
+  void _addRegion_nodeStart_nodeEnd(AstNode a, AstNode b, Element element) {
+    int offset = a.offset;
+    int length = b.end - offset;
+    _addRegion(offset, length, element);
+  }
+
+  void _addRegionForNode(AstNode node, Element element) {
+    int offset = node.offset;
+    int length = node.length;
+    _addRegion(offset, length, element);
+  }
+
+  void _addRegionForToken(Token token, Element element) {
+    int offset = token.offset;
+    int length = token.length;
+    _addRegion(offset, length, element);
+  }
+}
+
 class _DartNavigationComputerVisitor extends RecursiveAstVisitor {
   final _DartNavigationCollector computer;
 
@@ -130,6 +176,11 @@
   }
 
   @override
+  visitLibraryDirective(LibraryDirective node) {
+    computer._addRegionForNode(node.name, node.element);
+  }
+
+  @override
   visitPartDirective(PartDirective node) {
     _addUriDirectiveRegion(node, node.element);
     super.visitPartDirective(node);
@@ -137,8 +188,7 @@
 
   @override
   visitPartOfDirective(PartOfDirective node) {
-    computer._addRegion_tokenStart_nodeEnd(
-        node.keyword, node.libraryName, node.element);
+    computer._addRegionForNode(node.libraryName, node.element);
     super.visitPartOfDirective(node);
   }
 
@@ -224,58 +274,6 @@
 }
 
 /**
- * A Dart specific wrapper around [NavigationCollector].
- */
-class _DartNavigationCollector {
-  final NavigationCollector collector;
-
-  _DartNavigationCollector(this.collector);
-
-  void _addRegion(int offset, int length, Element element) {
-    if (element is FieldFormalParameterElement) {
-      element = (element as FieldFormalParameterElement).field;
-    }
-    if (element == null || element == DynamicElementImpl.instance) {
-      return;
-    }
-    if (element.location == null) {
-      return;
-    }
-    protocol.ElementKind kind =
-        protocol.newElementKind_fromEngine(element.kind);
-    protocol.Location location = protocol.newLocation_fromElement(element);
-    if (location == null) {
-      return;
-    }
-    collector.addRegion(offset, length, kind, location);
-  }
-
-  void _addRegion_nodeStart_nodeEnd(AstNode a, AstNode b, Element element) {
-    int offset = a.offset;
-    int length = b.end - offset;
-    _addRegion(offset, length, element);
-  }
-
-  void _addRegion_tokenStart_nodeEnd(Token a, AstNode b, Element element) {
-    int offset = a.offset;
-    int length = b.end - offset;
-    _addRegion(offset, length, element);
-  }
-
-  void _addRegionForNode(AstNode node, Element element) {
-    int offset = node.offset;
-    int length = node.length;
-    _addRegion(offset, length, element);
-  }
-
-  void _addRegionForToken(Token token, Element element) {
-    int offset = token.offset;
-    int length = token.length;
-    _addRegion(offset, length, element);
-  }
-}
-
-/**
  * An AST visitor that forwards nodes intersecting with the range from
  * [start] to [end] to the given [visitor].
  */
diff --git a/pkg/analysis_server/lib/src/domains/analysis/occurrences_dart.dart b/pkg/analysis_server/lib/src/domains/analysis/occurrences_dart.dart
index ebefbfb..2ede6f1 100644
--- a/pkg/analysis_server/lib/src/domains/analysis/occurrences_dart.dart
+++ b/pkg/analysis_server/lib/src/domains/analysis/occurrences_dart.dart
@@ -27,7 +27,7 @@
             new _DartUnitOccurrencesComputerVisitor();
         unit.accept(visitor);
         visitor.elementsOffsets.forEach((engineElement, offsets) {
-          int length = engineElement.displayName.length;
+          int length = engineElement.nameLength;
           protocol.Element serverElement =
               protocol.newElement_fromEngine(engineElement);
           protocol.Occurrences occurrences =
diff --git a/pkg/analysis_server/lib/src/edit/edit_domain.dart b/pkg/analysis_server/lib/src/edit/edit_domain.dart
index fa0f849..cb7b513 100644
--- a/pkg/analysis_server/lib/src/edit/edit_domain.dart
+++ b/pkg/analysis_server/lib/src/edit/edit_domain.dart
@@ -592,7 +592,7 @@
     }
     if (kind == RefactoringKind.RENAME) {
       List<AstNode> nodes = server.getNodesAtOffset(file, offset);
-      List<Element> elements = server.getElementsOfNodes(nodes, offset);
+      List<Element> elements = server.getElementsOfNodes(nodes);
       if (nodes.isNotEmpty && elements.isNotEmpty) {
         AstNode node = nodes[0];
         Element element = elements[0];
diff --git a/pkg/analysis_server/lib/src/generated_protocol.dart b/pkg/analysis_server/lib/src/generated_protocol.dart
index 672e029..c396864 100644
--- a/pkg/analysis_server/lib/src/generated_protocol.dart
+++ b/pkg/analysis_server/lib/src/generated_protocol.dart
@@ -2588,6 +2588,136 @@
 }
 
 /**
+ * analysis.implemented params
+ *
+ * {
+ *   "file": FilePath
+ *   "classes": List<ImplementedClass>
+ *   "members": List<ImplementedMember>
+ * }
+ */
+class AnalysisImplementedParams implements HasToJson {
+  String _file;
+
+  List<ImplementedClass> _classes;
+
+  List<ImplementedMember> _members;
+
+  /**
+   * The file with which the implementations are associated.
+   */
+  String get file => _file;
+
+  /**
+   * The file with which the implementations are associated.
+   */
+  void set file(String value) {
+    assert(value != null);
+    this._file = value;
+  }
+
+  /**
+   * The classes defined in the file that are implemented or extended.
+   */
+  List<ImplementedClass> get classes => _classes;
+
+  /**
+   * The classes defined in the file that are implemented or extended.
+   */
+  void set classes(List<ImplementedClass> value) {
+    assert(value != null);
+    this._classes = value;
+  }
+
+  /**
+   * The member defined in the file that are implemented or overridden.
+   */
+  List<ImplementedMember> get members => _members;
+
+  /**
+   * The member defined in the file that are implemented or overridden.
+   */
+  void set members(List<ImplementedMember> value) {
+    assert(value != null);
+    this._members = value;
+  }
+
+  AnalysisImplementedParams(String file, List<ImplementedClass> classes, List<ImplementedMember> members) {
+    this.file = file;
+    this.classes = classes;
+    this.members = members;
+  }
+
+  factory AnalysisImplementedParams.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
+    if (json == null) {
+      json = {};
+    }
+    if (json is Map) {
+      String file;
+      if (json.containsKey("file")) {
+        file = jsonDecoder._decodeString(jsonPath + ".file", json["file"]);
+      } else {
+        throw jsonDecoder.missingKey(jsonPath, "file");
+      }
+      List<ImplementedClass> classes;
+      if (json.containsKey("classes")) {
+        classes = jsonDecoder._decodeList(jsonPath + ".classes", json["classes"], (String jsonPath, Object json) => new ImplementedClass.fromJson(jsonDecoder, jsonPath, json));
+      } else {
+        throw jsonDecoder.missingKey(jsonPath, "classes");
+      }
+      List<ImplementedMember> members;
+      if (json.containsKey("members")) {
+        members = jsonDecoder._decodeList(jsonPath + ".members", json["members"], (String jsonPath, Object json) => new ImplementedMember.fromJson(jsonDecoder, jsonPath, json));
+      } else {
+        throw jsonDecoder.missingKey(jsonPath, "members");
+      }
+      return new AnalysisImplementedParams(file, classes, members);
+    } else {
+      throw jsonDecoder.mismatch(jsonPath, "analysis.implemented params", json);
+    }
+  }
+
+  factory AnalysisImplementedParams.fromNotification(Notification notification) {
+    return new AnalysisImplementedParams.fromJson(
+        new ResponseDecoder(null), "params", notification._params);
+  }
+
+  Map<String, dynamic> toJson() {
+    Map<String, dynamic> result = {};
+    result["file"] = file;
+    result["classes"] = classes.map((ImplementedClass value) => value.toJson()).toList();
+    result["members"] = members.map((ImplementedMember value) => value.toJson()).toList();
+    return result;
+  }
+
+  Notification toNotification() {
+    return new Notification("analysis.implemented", toJson());
+  }
+
+  @override
+  String toString() => JSON.encode(toJson());
+
+  @override
+  bool operator==(other) {
+    if (other is AnalysisImplementedParams) {
+      return file == other.file &&
+          _listEqual(classes, other.classes, (ImplementedClass a, ImplementedClass b) => a == b) &&
+          _listEqual(members, other.members, (ImplementedMember a, ImplementedMember b) => a == b);
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode {
+    int hash = 0;
+    hash = _JenkinsSmiHash.combine(hash, file.hashCode);
+    hash = _JenkinsSmiHash.combine(hash, classes.hashCode);
+    hash = _JenkinsSmiHash.combine(hash, members.hashCode);
+    return _JenkinsSmiHash.finish(hash);
+  }
+}
+
+/**
  * analysis.invalidate params
  *
  * {
@@ -7836,6 +7966,7 @@
  * enum {
  *   FOLDING
  *   HIGHLIGHTS
+ *   IMPLEMENTED
  *   INVALIDATE
  *   NAVIGATION
  *   OCCURRENCES
@@ -7848,6 +7979,8 @@
 
   static const HIGHLIGHTS = const AnalysisService._("HIGHLIGHTS");
 
+  static const IMPLEMENTED = const AnalysisService._("IMPLEMENTED");
+
   /**
    * This service is not currently implemented and will become a
    * GeneralAnalysisService in a future release.
@@ -7865,7 +7998,7 @@
   /**
    * A list containing all of the enum values that are defined.
    */
-  static const List<AnalysisService> VALUES = const <AnalysisService>[FOLDING, HIGHLIGHTS, INVALIDATE, NAVIGATION, OCCURRENCES, OUTLINE, OVERRIDES];
+  static const List<AnalysisService> VALUES = const <AnalysisService>[FOLDING, HIGHLIGHTS, IMPLEMENTED, INVALIDATE, NAVIGATION, OCCURRENCES, OUTLINE, OVERRIDES];
 
   final String name;
 
@@ -7877,6 +8010,8 @@
         return FOLDING;
       case "HIGHLIGHTS":
         return HIGHLIGHTS;
+      case "IMPLEMENTED":
+        return IMPLEMENTED;
       case "INVALIDATE":
         return INVALIDATE;
       case "NAVIGATION":
@@ -10635,6 +10770,196 @@
 }
 
 /**
+ * ImplementedClass
+ *
+ * {
+ *   "offset": int
+ *   "length": int
+ * }
+ */
+class ImplementedClass implements HasToJson {
+  int _offset;
+
+  int _length;
+
+  /**
+   * The offset of the name of the implemented class.
+   */
+  int get offset => _offset;
+
+  /**
+   * The offset of the name of the implemented class.
+   */
+  void set offset(int value) {
+    assert(value != null);
+    this._offset = value;
+  }
+
+  /**
+   * The length of the name of the implemented class.
+   */
+  int get length => _length;
+
+  /**
+   * The length of the name of the implemented class.
+   */
+  void set length(int value) {
+    assert(value != null);
+    this._length = value;
+  }
+
+  ImplementedClass(int offset, int length) {
+    this.offset = offset;
+    this.length = length;
+  }
+
+  factory ImplementedClass.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
+    if (json == null) {
+      json = {};
+    }
+    if (json is Map) {
+      int offset;
+      if (json.containsKey("offset")) {
+        offset = jsonDecoder._decodeInt(jsonPath + ".offset", json["offset"]);
+      } else {
+        throw jsonDecoder.missingKey(jsonPath, "offset");
+      }
+      int length;
+      if (json.containsKey("length")) {
+        length = jsonDecoder._decodeInt(jsonPath + ".length", json["length"]);
+      } else {
+        throw jsonDecoder.missingKey(jsonPath, "length");
+      }
+      return new ImplementedClass(offset, length);
+    } else {
+      throw jsonDecoder.mismatch(jsonPath, "ImplementedClass", json);
+    }
+  }
+
+  Map<String, dynamic> toJson() {
+    Map<String, dynamic> result = {};
+    result["offset"] = offset;
+    result["length"] = length;
+    return result;
+  }
+
+  @override
+  String toString() => JSON.encode(toJson());
+
+  @override
+  bool operator==(other) {
+    if (other is ImplementedClass) {
+      return offset == other.offset &&
+          length == other.length;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode {
+    int hash = 0;
+    hash = _JenkinsSmiHash.combine(hash, offset.hashCode);
+    hash = _JenkinsSmiHash.combine(hash, length.hashCode);
+    return _JenkinsSmiHash.finish(hash);
+  }
+}
+
+/**
+ * ImplementedMember
+ *
+ * {
+ *   "offset": int
+ *   "length": int
+ * }
+ */
+class ImplementedMember implements HasToJson {
+  int _offset;
+
+  int _length;
+
+  /**
+   * The offset of the name of the implemented member.
+   */
+  int get offset => _offset;
+
+  /**
+   * The offset of the name of the implemented member.
+   */
+  void set offset(int value) {
+    assert(value != null);
+    this._offset = value;
+  }
+
+  /**
+   * The length of the name of the implemented member.
+   */
+  int get length => _length;
+
+  /**
+   * The length of the name of the implemented member.
+   */
+  void set length(int value) {
+    assert(value != null);
+    this._length = value;
+  }
+
+  ImplementedMember(int offset, int length) {
+    this.offset = offset;
+    this.length = length;
+  }
+
+  factory ImplementedMember.fromJson(JsonDecoder jsonDecoder, String jsonPath, Object json) {
+    if (json == null) {
+      json = {};
+    }
+    if (json is Map) {
+      int offset;
+      if (json.containsKey("offset")) {
+        offset = jsonDecoder._decodeInt(jsonPath + ".offset", json["offset"]);
+      } else {
+        throw jsonDecoder.missingKey(jsonPath, "offset");
+      }
+      int length;
+      if (json.containsKey("length")) {
+        length = jsonDecoder._decodeInt(jsonPath + ".length", json["length"]);
+      } else {
+        throw jsonDecoder.missingKey(jsonPath, "length");
+      }
+      return new ImplementedMember(offset, length);
+    } else {
+      throw jsonDecoder.mismatch(jsonPath, "ImplementedMember", json);
+    }
+  }
+
+  Map<String, dynamic> toJson() {
+    Map<String, dynamic> result = {};
+    result["offset"] = offset;
+    result["length"] = length;
+    return result;
+  }
+
+  @override
+  String toString() => JSON.encode(toJson());
+
+  @override
+  bool operator==(other) {
+    if (other is ImplementedMember) {
+      return offset == other.offset &&
+          length == other.length;
+    }
+    return false;
+  }
+
+  @override
+  int get hashCode {
+    int hash = 0;
+    hash = _JenkinsSmiHash.combine(hash, offset.hashCode);
+    hash = _JenkinsSmiHash.combine(hash, length.hashCode);
+    return _JenkinsSmiHash.finish(hash);
+  }
+}
+
+/**
  * LinkedEditGroup
  *
  * {
diff --git a/pkg/analysis_server/lib/src/operation/operation_analysis.dart b/pkg/analysis_server/lib/src/operation/operation_analysis.dart
index 0270b27..198955c 100644
--- a/pkg/analysis_server/lib/src/operation/operation_analysis.dart
+++ b/pkg/analysis_server/lib/src/operation/operation_analysis.dart
@@ -9,13 +9,16 @@
 import 'package:analysis_server/src/computer/computer_highlights2.dart';
 import 'package:analysis_server/src/computer/computer_outline.dart';
 import 'package:analysis_server/src/computer/computer_overrides.dart';
+import 'package:analysis_server/src/domains/analysis/implemented_dart.dart';
 import 'package:analysis_server/src/domains/analysis/navigation.dart';
 import 'package:analysis_server/src/domains/analysis/occurrences.dart';
 import 'package:analysis_server/src/operation/operation.dart';
 import 'package:analysis_server/src/protocol_server.dart' as protocol;
 import 'package:analysis_server/src/services/dependencies/library_dependencies.dart';
 import 'package:analysis_server/src/services/index/index.dart';
+import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analyzer/src/generated/ast.dart';
+import 'package:analyzer/src/generated/element.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/error.dart';
 import 'package:analyzer/src/generated/html.dart';
@@ -39,6 +42,25 @@
   }
 }
 
+scheduleImplementedNotification(
+    AnalysisServer server, Iterable<String> files) async {
+  SearchEngine searchEngine = server.searchEngine;
+  if (searchEngine == null) {
+    return;
+  }
+  for (String file in files) {
+    CompilationUnitElement unitElement = server.getCompilationUnitElement(file);
+    if (unitElement != null) {
+      ImplementedComputer computer =
+          new ImplementedComputer(searchEngine, unitElement);
+      await computer.compute();
+      var params = new protocol.AnalysisImplementedParams(
+          file, computer.classes, computer.members);
+      server.sendNotification(params.toNotification());
+    }
+  }
+}
+
 /**
  * Schedules indexing of the given [file] using the resolved [dartUnit].
  */
@@ -411,7 +433,7 @@
     ServerPerformanceStatistics.indexOperation.makeCurrentWhile(() {
       try {
         Index index = server.index;
-        index.indexUnit(context, unit);
+        index.index(context, unit);
       } catch (exception, stackTrace) {
         server.sendServerErrorNotification(exception, stackTrace);
       }
@@ -469,7 +491,7 @@
   @override
   void perform(AnalysisServer server) {
     Index index = server.index;
-    index.indexHtmlUnit(context, unit);
+    index.index(context, unit);
   }
 }
 
diff --git a/pkg/analysis_server/lib/src/plugin/server_plugin.dart b/pkg/analysis_server/lib/src/plugin/server_plugin.dart
index 14b8c33..b88d009 100644
--- a/pkg/analysis_server/lib/src/plugin/server_plugin.dart
+++ b/pkg/analysis_server/lib/src/plugin/server_plugin.dart
@@ -5,7 +5,7 @@
 library analysis_server.src.plugin.server_plugin;
 
 import 'package:analysis_server/analysis/analysis_domain.dart';
-import 'package:analysis_server/analysis/index/index_core.dart';
+import 'package:analysis_server/analysis/index_core.dart';
 import 'package:analysis_server/analysis/navigation_core.dart';
 import 'package:analysis_server/analysis/occurrences_core.dart';
 import 'package:analysis_server/completion/completion_core.dart';
@@ -14,6 +14,7 @@
 import 'package:analysis_server/plugin/analyzed_files.dart';
 import 'package:analysis_server/plugin/assist.dart';
 import 'package:analysis_server/plugin/fix.dart';
+import 'package:analysis_server/plugin/index.dart';
 import 'package:analysis_server/plugin/navigation.dart';
 import 'package:analysis_server/plugin/occurrences.dart';
 import 'package:analysis_server/src/analysis_server.dart';
@@ -28,6 +29,7 @@
 import 'package:analysis_server/src/search/search_domain.dart';
 import 'package:analysis_server/src/services/correction/assist_internal.dart';
 import 'package:analysis_server/src/services/correction/fix_internal.dart';
+import 'package:analysis_server/src/services/index/index_contributor.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:plugin/plugin.dart';
@@ -310,8 +312,8 @@
     //
     // Register index contributors.
     //
-    // TODO(brianwilkerson) Register the index contributors.
-//    registerExtension(INDEX_CONTRIBUTOR_EXTENSION_POINT, ???);
+    registerExtension(
+        INDEX_CONTRIBUTOR_EXTENSION_POINT_ID, new DartIndexContributor());
   }
 
   /**
diff --git a/pkg/analysis_server/lib/src/protocol_server.dart b/pkg/analysis_server/lib/src/protocol_server.dart
index ff98970..a9dd5dd 100644
--- a/pkg/analysis_server/lib/src/protocol_server.dart
+++ b/pkg/analysis_server/lib/src/protocol_server.dart
@@ -213,9 +213,8 @@
   if (context == null || source == null) {
     return null;
   }
-  String name = element.displayName;
   int offset = element.nameOffset;
-  int length = name != null ? name.length : 0;
+  int length = element.nameLength;
   if (element is engine.CompilationUnitElement) {
     offset = 0;
     length = 0;
diff --git a/pkg/analysis_server/lib/src/search/element_references.dart b/pkg/analysis_server/lib/src/search/element_references.dart
index 3f54327..d470afe 100644
--- a/pkg/analysis_server/lib/src/search/element_references.dart
+++ b/pkg/analysis_server/lib/src/search/element_references.dart
@@ -90,7 +90,7 @@
 
   SearchResult _newDeclarationResult(Element refElement) {
     int nameOffset = refElement.nameOffset;
-    int nameLength = refElement.name.length;
+    int nameLength = refElement.nameLength;
     SearchMatch searchMatch = new SearchMatch(MatchKind.DECLARATION, refElement,
         new SourceRange(nameOffset, nameLength), true, false);
     return newSearchResult_fromMatch(searchMatch);
diff --git a/pkg/analysis_server/lib/src/services/completion/prefixed_element_contributor.dart b/pkg/analysis_server/lib/src/services/completion/prefixed_element_contributor.dart
index 1df4993..5a52da8 100644
--- a/pkg/analysis_server/lib/src/services/completion/prefixed_element_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/prefixed_element_contributor.dart
@@ -127,7 +127,7 @@
         ClassDeclaration classDecl =
             constructorDecl.getAncestor((p) => p is ClassDeclaration);
         for (ClassMember member in classDecl.members) {
-          if (member is FieldDeclaration) {
+          if (member is FieldDeclaration && !member.isStatic) {
             for (VariableDeclaration varDecl in member.fields.variables) {
               SimpleIdentifier fieldId = varDecl.name;
               if (fieldId != null) {
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index a2dd729..ba774a9 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -1869,6 +1869,11 @@
           sourcePrefix = eol;
         }
         sourceSuffix = eol;
+        // use different utils
+        CompilationUnitElement targetUnitElement =
+            getCompilationUnitElement(targetClassElement);
+        CompilationUnit targetUnit = getParsedUnit(targetUnitElement);
+        utils = new CorrectionUtils(targetUnit);
       }
       String targetFile = targetElement.source.fullName;
       // build method source
diff --git a/pkg/analysis_server/lib/src/services/correction/source_range.dart b/pkg/analysis_server/lib/src/services/correction/source_range.dart
index 9ee7078..779dde7 100644
--- a/pkg/analysis_server/lib/src/services/correction/source_range.dart
+++ b/pkg/analysis_server/lib/src/services/correction/source_range.dart
@@ -11,7 +11,7 @@
 import 'package:analyzer/src/generated/source.dart';
 
 SourceRange rangeElementName(Element element) {
-  return new SourceRange(element.nameOffset, element.displayName.length);
+  return new SourceRange(element.nameOffset, element.nameLength);
 }
 
 SourceRange rangeEndEnd(a, b) {
diff --git a/pkg/analysis_server/lib/src/services/correction/util.dart b/pkg/analysis_server/lib/src/services/correction/util.dart
index 1af70b0..b4f9938 100644
--- a/pkg/analysis_server/lib/src/services/correction/util.dart
+++ b/pkg/analysis_server/lib/src/services/correction/util.dart
@@ -143,6 +143,18 @@
   return ranges;
 }
 
+/**
+ * Return the given [element] if it is a [CompilationUnitElement].
+ * Return the enclosing [CompilationUnitElement] of the given [element],
+ * maybe `null`.
+ */
+CompilationUnitElement getCompilationUnitElement(Element element) {
+  if (element is CompilationUnitElement) {
+    return element;
+  }
+  return element.getAncestor((e) => e is CompilationUnitElement);
+}
+
 String getDefaultValueCode(DartType type) {
   if (type != null) {
     String typeName = type.displayName;
@@ -175,7 +187,9 @@
  */
 String getElementQualifiedName(Element element) {
   ElementKind kind = element.kind;
-  if (kind == ElementKind.FIELD || kind == ElementKind.METHOD) {
+  if (kind == ElementKind.CONSTRUCTOR ||
+      kind == ElementKind.FIELD ||
+      kind == ElementKind.METHOD) {
     return '${element.enclosingElement.displayName}.${element.displayName}';
   } else {
     return element.displayName;
@@ -439,8 +453,7 @@
  * The resulting AST structure may or may not be resolved.
  */
 AstNode getParsedClassElementNode(ClassElement classElement) {
-  CompilationUnitElement unitElement =
-      classElement.getAncestor((e) => e is CompilationUnitElement);
+  CompilationUnitElement unitElement = getCompilationUnitElement(classElement);
   CompilationUnit unit = getParsedUnit(unitElement);
   int offset = classElement.nameOffset;
   AstNode classNameNode = new NodeLocator(offset).searchWithin(unit);
diff --git a/pkg/analysis_server/lib/src/services/index/index.dart b/pkg/analysis_server/lib/src/services/index/index.dart
index 41b5a0a..3a44b4f 100644
--- a/pkg/analysis_server/lib/src/services/index/index.dart
+++ b/pkg/analysis_server/lib/src/services/index/index.dart
@@ -6,12 +6,10 @@
 
 import 'dart:async';
 
-import 'package:analysis_server/analysis/index/index_core.dart';
+import 'package:analysis_server/analysis/index_core.dart';
 import 'package:analysis_server/src/services/index/indexable_element.dart';
-import 'package:analyzer/src/generated/ast.dart';
 import 'package:analyzer/src/generated/element.dart';
 import 'package:analyzer/src/generated/engine.dart';
-import 'package:analyzer/src/generated/html.dart';
 import 'package:analyzer/src/generated/source.dart';
 
 /**
@@ -45,20 +43,12 @@
   List<Element> getTopLevelDeclarations(ElementNameFilter nameFilter);
 
   /**
-   * Processes the given [HtmlUnit] in order to record the relationships.
+   * Processes the given [object] in order to record the relationships.
    *
-   * [context] - the [AnalysisContext] in which [HtmlUnit] was resolved.
-   * [unit] - the [HtmlUnit] being indexed.
+   * [context] - the [AnalysisContext] in which the [object] being indexed.
+   * [object] - the object being indexed.
    */
-  void indexHtmlUnit(AnalysisContext context, HtmlUnit unit);
-
-  /**
-   * Processes the given [CompilationUnit] in order to record the relationships.
-   *
-   * [context] - the [AnalysisContext] in which [CompilationUnit] was resolved.
-   * [unit] - the [CompilationUnit] being indexed.
-   */
-  void indexUnit(AnalysisContext context, CompilationUnit unit);
+  void index(AnalysisContext context, Object object);
 
   /**
    * Starts the index.
@@ -153,6 +143,14 @@
 
   /**
    * Left: class.
+   *   Has ancestor (extended or implemented, directly or indirectly).
+   * Right: other class declaration.
+   */
+  static final RelationshipImpl HAS_ANCESTOR =
+      RelationshipImpl.getRelationship("has-ancestor");
+
+  /**
+   * Left: class.
    *   Is extended by.
    * Right: other class declaration.
    */
diff --git a/pkg/analysis_server/lib/src/services/index/index_contributor.dart b/pkg/analysis_server/lib/src/services/index/index_contributor.dart
index 26397fb..ae1ec69 100644
--- a/pkg/analysis_server/lib/src/services/index/index_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/index/index_contributor.dart
@@ -6,8 +6,7 @@
 
 import 'dart:collection' show Queue;
 
-import 'package:analysis_server/analysis/index/index_core.dart';
-import 'package:analysis_server/analysis/index/index_dart.dart';
+import 'package:analysis_server/analysis/index_core.dart';
 import 'package:analysis_server/src/services/correction/namespace.dart';
 import 'package:analysis_server/src/services/index/index.dart';
 import 'package:analysis_server/src/services/index/index_store.dart';
@@ -15,74 +14,20 @@
 import 'package:analyzer/src/generated/ast.dart';
 import 'package:analyzer/src/generated/element.dart';
 import 'package:analyzer/src/generated/engine.dart';
-import 'package:analyzer/src/generated/html.dart' as ht;
 import 'package:analyzer/src/generated/java_engine.dart';
 import 'package:analyzer/src/generated/scanner.dart';
 import 'package:analyzer/src/generated/source.dart';
 
 /**
- * Adds data to [store] based on the resolved Dart [unit].
+ * An [IndexContributor] that contributes relationships for Dart files.
  */
-void indexDartUnit(
-    InternalIndexStore store, AnalysisContext context, CompilationUnit unit) {
-  // check unit
-  if (unit == null) {
-    return;
-  }
-  // prepare unit element
-  CompilationUnitElement unitElement = unit.element;
-  if (unitElement == null) {
-    return;
-  }
-  // about to index
-  bool mayIndex = store.aboutToIndex(context, unitElement);
-  if (!mayIndex) {
-    return;
-  }
-  // do index
-  try {
-    unit.accept(new _IndexContributor(store));
-    store.doneIndex();
-  } catch (e) {
-    store.cancelIndex();
-    rethrow;
-  }
-}
-
-/**
- * Adds data to [store] based on the resolved HTML [unit].
- */
-void indexHtmlUnit(
-    InternalIndexStore store, AnalysisContext context, ht.HtmlUnit unit) {
-  // TODO(scheglov) remove or implement
-//  // check unit
-//  if (unit == null) {
-//    return;
-//  }
-//  // prepare unit element
-//  HtmlElement unitElement = unit.element;
-//  if (unitElement == null) {
-//    return;
-//  }
-//  // about to index
-//  bool mayIndex = store.aboutToIndexHtml(context, unitElement);
-//  if (!mayIndex) {
-//    return;
-//  }
-//  // do index
-//  store.doneIndex();
-}
-
-/**
- * An [IndexContributor] that can be used to contribute relationships for Dart
- * files.
- */
-class DefaultDartIndexContributor extends DartIndexContributor {
+class DartIndexContributor extends IndexContributor {
   @override
-  void internalContributeTo(IndexStore store, CompilationUnit unit) {
-    _IndexContributor contributor =
-        new _IndexContributor(store as InternalIndexStore);
-    unit.accept(contributor);
+  void contributeTo(IndexStore store, AnalysisContext context, Object object) {
+    if (store is InternalIndexStore && object is CompilationUnit) {
+      _IndexContributor contributor = new _IndexContributor(store);
+      object.accept(contributor);
+    }
   }
 }
 
@@ -165,6 +110,7 @@
     enterScope(element);
     try {
       _recordTopLevelElementDefinition(element);
+      _recordHasAncestor(element);
       {
         ExtendsClause extendsClause = node.extendsClause;
         if (extendsClause != null) {
@@ -209,6 +155,7 @@
     enterScope(element);
     try {
       _recordTopLevelElementDefinition(element);
+      _recordHasAncestor(element);
       {
         TypeName superclassNode = node.superclass;
         if (superclassNode != null) {
@@ -700,6 +647,40 @@
     return false;
   }
 
+  void _recordHasAncestor(ClassElement element) {
+    int offset = element.nameOffset;
+    int length = element.nameLength;
+    LocationImpl location = _createLocationForOffset(offset, length);
+    _recordHasAncestor0(location, element, false, <ClassElement>[]);
+  }
+
+  void _recordHasAncestor0(LocationImpl location, ClassElement element,
+      bool includeThis, List<ClassElement> visitedElements) {
+    if (element == null) {
+      return;
+    }
+    if (visitedElements.contains(element)) {
+      return;
+    }
+    visitedElements.add(element);
+    if (includeThis) {
+      recordRelationshipElement(element, IndexConstants.HAS_ANCESTOR, location);
+    }
+    {
+      InterfaceType superType = element.supertype;
+      if (superType != null) {
+        _recordHasAncestor0(location, superType.element, true, visitedElements);
+      }
+    }
+    for (InterfaceType mixinType in element.mixins) {
+      _recordHasAncestor0(location, mixinType.element, true, visitedElements);
+    }
+    for (InterfaceType implementedType in element.interfaces) {
+      _recordHasAncestor0(
+          location, implementedType.element, true, visitedElements);
+    }
+  }
+
   /**
    * Records [ImportElement] reference if given [SimpleIdentifier] references some
    * top-level element and not qualified with import prefix.
diff --git a/pkg/analysis_server/lib/src/services/index/index_store.dart b/pkg/analysis_server/lib/src/services/index/index_store.dart
index 2b8dc22..3f27f53 100644
--- a/pkg/analysis_server/lib/src/services/index/index_store.dart
+++ b/pkg/analysis_server/lib/src/services/index/index_store.dart
@@ -4,7 +4,7 @@
 
 library services.index_store;
 
-import 'package:analysis_server/analysis/index/index_core.dart';
+import 'package:analysis_server/analysis/index_core.dart';
 import 'package:analysis_server/src/services/index/index.dart';
 import 'package:analyzer/src/generated/element.dart';
 import 'package:analyzer/src/generated/engine.dart';
@@ -22,7 +22,7 @@
   /**
    * Notifies the index store that we are going to index the given [object].
    *
-   * [context] - the [AnalysisContext] in which unit being indexed.
+   * [context] - the [AnalysisContext] in which the [object] being indexed.
    * [object] - the object being indexed.
    *
    * Returns `true` if the given [object] may be indexed, or `false` if
diff --git a/pkg/analysis_server/lib/src/services/index/indexable_element.dart b/pkg/analysis_server/lib/src/services/index/indexable_element.dart
index c0a30e7..8df94c0 100644
--- a/pkg/analysis_server/lib/src/services/index/indexable_element.dart
+++ b/pkg/analysis_server/lib/src/services/index/indexable_element.dart
@@ -6,7 +6,7 @@
 
 import 'dart:collection';
 
-import 'package:analysis_server/analysis/index/index_core.dart';
+import 'package:analysis_server/analysis/index_core.dart';
 import 'package:analyzer/src/generated/element.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
@@ -36,7 +36,7 @@
   IndexableObjectKind get kind => IndexableElementKind.forElement(element);
 
   @override
-  int get length => element.displayName.length;
+  int get length => element.nameLength;
 
   @override
   String get name => element.displayName;
diff --git a/pkg/analysis_server/lib/src/services/index/local_index.dart b/pkg/analysis_server/lib/src/services/index/local_index.dart
index 80f3b18..3feae11 100644
--- a/pkg/analysis_server/lib/src/services/index/local_index.dart
+++ b/pkg/analysis_server/lib/src/services/index/local_index.dart
@@ -6,15 +6,11 @@
 
 import 'dart:async';
 
-import 'package:analysis_server/analysis/index/index_core.dart';
+import 'package:analysis_server/analysis/index_core.dart';
 import 'package:analysis_server/src/services/index/index.dart';
-import 'package:analysis_server/src/services/index/index_contributor.dart'
-    as oldContributors;
 import 'package:analysis_server/src/services/index/store/split_store.dart';
-import 'package:analyzer/src/generated/ast.dart';
 import 'package:analyzer/src/generated/element.dart';
 import 'package:analyzer/src/generated/engine.dart';
-import 'package:analyzer/src/generated/html.dart';
 import 'package:analyzer/src/generated/source.dart';
 
 /**
@@ -24,14 +20,14 @@
   /**
    * The index contributors used by this index.
    */
-  List<IndexContributor> contributors;
+  List<IndexContributor> contributors = <IndexContributor>[];
 
   SplitIndexStore _store;
 
   LocalIndex(NodeManager nodeManager) {
     // TODO(scheglov) get IndexObjectManager(s) as a parameter
-    _store = new SplitIndexStore(nodeManager,
-        <IndexObjectManager>[new DartUnitIndexObjectManager()]);
+    _store = new SplitIndexStore(
+        nodeManager, <IndexObjectManager>[new DartUnitIndexObjectManager()]);
   }
 
   @override
@@ -52,11 +48,11 @@
 
   /**
    * Returns a `Future<List<Location>>` that completes with the list of
-   * [LocationImpl]s of the given [relationship] with the given [element].
+   * [LocationImpl]s of the given [relationship] with the given [indexable].
    *
-   * For example, if the [element] represents a function and the [relationship]
-   * is the `is-invoked-by` relationship, then the locations will be all of the
-   * places where the function is invoked.
+   * For example, if the [indexable] represents a function element and the
+   * [relationship] is the `is-invoked-by` relationship, then the locations
+   * will be all of the places where the function is invoked.
    */
   @override
   Future<List<LocationImpl>> getRelationships(
@@ -70,13 +66,22 @@
   }
 
   @override
-  void indexHtmlUnit(AnalysisContext context, HtmlUnit unit) {
-    oldContributors.indexHtmlUnit(_store, context, unit);
-  }
-
-  @override
-  void indexUnit(AnalysisContext context, CompilationUnit unit) {
-    oldContributors.indexDartUnit(_store, context, unit);
+  void index(AnalysisContext context, Object object) {
+    // about to index
+    bool mayIndex = _store.aboutToIndex(context, object);
+    if (!mayIndex) {
+      return;
+    }
+    // do index
+    try {
+      for (IndexContributor contributor in contributors) {
+        contributor.contributeTo(_store, context, object);
+      }
+      _store.doneIndex();
+    } catch (e) {
+      _store.cancelIndex();
+      rethrow;
+    }
   }
 
   @override
diff --git a/pkg/analysis_server/lib/src/services/index/local_memory_index.dart b/pkg/analysis_server/lib/src/services/index/local_memory_index.dart
index 7e2c8fc..0aab0c3 100644
--- a/pkg/analysis_server/lib/src/services/index/local_memory_index.dart
+++ b/pkg/analysis_server/lib/src/services/index/local_memory_index.dart
@@ -4,10 +4,15 @@
 
 library services.index.memory_file_index;
 
+import 'package:analysis_server/analysis/index_core.dart';
 import 'package:analysis_server/src/services/index/index.dart';
+import 'package:analysis_server/src/services/index/index_contributor.dart';
 import 'package:analysis_server/src/services/index/local_index.dart';
 import 'package:analysis_server/src/services/index/store/memory_node_manager.dart';
 
 Index createLocalMemoryIndex() {
-  return new LocalIndex(new MemoryNodeManager());
+  MemoryNodeManager nodeManager = new MemoryNodeManager();
+  LocalIndex index = new LocalIndex(nodeManager);
+  index.contributors = <IndexContributor>[new DartIndexContributor()];
+  return index;
 }
diff --git a/pkg/analysis_server/lib/src/services/index/store/codec.dart b/pkg/analysis_server/lib/src/services/index/store/codec.dart
index 36220aa..07925f3 100644
--- a/pkg/analysis_server/lib/src/services/index/store/codec.dart
+++ b/pkg/analysis_server/lib/src/services/index/store/codec.dart
@@ -6,7 +6,7 @@
 
 import 'dart:collection';
 
-import 'package:analysis_server/analysis/index/index_core.dart';
+import 'package:analysis_server/analysis/index_core.dart';
 import 'package:analysis_server/src/services/index/index.dart';
 import 'package:analysis_server/src/services/index/indexable_element.dart';
 import 'package:analyzer/src/generated/element.dart';
diff --git a/pkg/analysis_server/lib/src/services/index/store/split_store.dart b/pkg/analysis_server/lib/src/services/index/store/split_store.dart
index 6e3956c..9c51d6a 100644
--- a/pkg/analysis_server/lib/src/services/index/store/split_store.dart
+++ b/pkg/analysis_server/lib/src/services/index/store/split_store.dart
@@ -8,7 +8,7 @@
 import 'dart:collection';
 import 'dart:typed_data';
 
-import 'package:analysis_server/analysis/index/index_core.dart';
+import 'package:analysis_server/analysis/index_core.dart';
 import 'package:analysis_server/src/analysis_server.dart';
 import 'package:analysis_server/src/services/index/index.dart';
 import 'package:analysis_server/src/services/index/index_store.dart';
@@ -20,6 +20,7 @@
 import 'package:analyzer/src/generated/java_engine.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/utilities_general.dart';
+import 'package:analyzer/src/generated/ast.dart' show CompilationUnit;
 
 /**
  * The implementation of [IndexObjectManager] for indexing
@@ -40,10 +41,12 @@
 
   @override
   String aboutToIndex(AnalysisContext context, Object object) {
-    if (object is! CompilationUnitElement) {
-      return null;
+    CompilationUnitElement unitElement;
+    if (object is CompilationUnit) {
+      unitElement = object.element;
+    } else if (object is CompilationUnitElement) {
+      unitElement = object;
     }
-    CompilationUnitElement unitElement = object;
     // validate unit
     if (unitElement == null) {
       return null;
diff --git a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
index da79930..e83082b 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/extract_method.dart
@@ -594,7 +594,7 @@
     }
     // maybe ends with "return" statement
     if (_selectionStatements != null) {
-      _ReturnTypeComputer returnTypeComputer = new _ReturnTypeComputer();
+      _ReturnTypeComputer returnTypeComputer = new _ReturnTypeComputer(context);
       _selectionStatements.forEach((statement) {
         statement.accept(returnTypeComputer);
       });
@@ -1158,8 +1158,12 @@
 }
 
 class _ReturnTypeComputer extends RecursiveAstVisitor {
+  final AnalysisContext context;
+
   DartType returnType;
 
+  _ReturnTypeComputer(this.context);
+
   @override
   visitBlockFunctionBody(BlockFunctionBody node) {}
 
@@ -1182,7 +1186,8 @@
       if (returnType is InterfaceType && type is InterfaceType) {
         returnType = InterfaceType.getSmartLeastUpperBound(returnType, type);
       } else {
-        returnType = returnType.getLeastUpperBound(type);
+        returnType = context.typeSystem
+            .getLeastUpperBound(context.typeProvider, returnType, type);
       }
     }
   }
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename.dart b/pkg/analysis_server/lib/src/services/refactoring/rename.dart
index b22d74d..bd97527 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename.dart
@@ -9,11 +9,13 @@
 import 'package:analysis_server/src/protocol_server.dart' hide Element;
 import 'package:analysis_server/src/services/correction/source_range.dart';
 import 'package:analysis_server/src/services/correction/status.dart';
+import 'package:analysis_server/src/services/correction/util.dart';
 import 'package:analysis_server/src/services/refactoring/refactoring.dart';
 import 'package:analysis_server/src/services/refactoring/refactoring_internal.dart';
 import 'package:analysis_server/src/services/search/search_engine.dart';
 import 'package:analyzer/src/generated/element.dart';
 import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/java_core.dart';
 import 'package:analyzer/src/generated/source.dart';
 
 /**
@@ -136,6 +138,13 @@
   @override
   Future<RefactoringStatus> checkInitialConditions() {
     RefactoringStatus result = new RefactoringStatus();
+    if (element.source.isInSystemLibrary) {
+      String message = format(
+          "The {0} '{1}' is defined in the SDK, so cannot be renamed.",
+          getElementKindName(element),
+          getElementQualifiedName(element));
+      result.addFatalError(message);
+    }
     return new Future.value(result);
   }
 
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart
index 6799486..e0f9a77 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_class_member.dart
@@ -58,8 +58,8 @@
   }
 
   @override
-  Future<RefactoringStatus> checkInitialConditions() {
-    RefactoringStatus result = new RefactoringStatus();
+  Future<RefactoringStatus> checkInitialConditions() async {
+    RefactoringStatus result = await super.checkInitialConditions();
     if (element is MethodElement && (element as MethodElement).isOperator) {
       result.addFatalError('Cannot rename operator.');
     }
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart
index 6b73dd9..4dcd752 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart
@@ -54,7 +54,7 @@
       SourceEdit edit = null;
       if (newName.isEmpty) {
         int uriEnd = element.uriEnd;
-        int prefixEnd = element.prefixOffset + prefix.displayName.length;
+        int prefixEnd = element.prefixOffset + prefix.nameLength;
         SourceRange range = rangeStartEnd(uriEnd, prefixEnd);
         edit = newSourceEdit_range(range, "");
       } else {
@@ -63,7 +63,7 @@
           edit = newSourceEdit_range(range, " as ${newName}");
         } else {
           int offset = element.prefixOffset;
-          int length = prefix.displayName.length;
+          int length = prefix.nameLength;
           SourceRange range = rangeStartLength(offset, length);
           edit = newSourceEdit_range(range, newName);
         }
diff --git a/pkg/analysis_server/lib/src/services/search/hierarchy.dart b/pkg/analysis_server/lib/src/services/search/hierarchy.dart
index 0f8d76ce..496a4c0 100644
--- a/pkg/analysis_server/lib/src/services/search/hierarchy.dart
+++ b/pkg/analysis_server/lib/src/services/search/hierarchy.dart
@@ -132,27 +132,14 @@
  */
 Future<Set<ClassElement>> getSubClasses(
     SearchEngine searchEngine, ClassElement seed) {
-  Set<ClassElement> subs = new HashSet<ClassElement>();
-  // prepare queue
-  List<ClassElement> queue = new List<ClassElement>();
-  queue.add(seed);
-  // schedule subclasss search
-  addSubClasses() {
-    // add direct subclasses of the next class
-    while (queue.isNotEmpty) {
-      ClassElement clazz = queue.removeLast();
-      if (subs.add(clazz)) {
-        return getDirectSubClasses(searchEngine, clazz).then((directSubs) {
-          queue.addAll(directSubs);
-          return new Future(addSubClasses);
-        });
-      }
+  return searchEngine.searchAllSubtypes(seed).then((List<SearchMatch> matches) {
+    Set<ClassElement> ancestors = new HashSet<ClassElement>();
+    for (SearchMatch match in matches) {
+      ClassElement ancestor = match.element;
+      ancestors.add(ancestor);
     }
-    // done
-    subs.remove(seed);
-    return subs;
-  }
-  return new Future(addSubClasses);
+    return ancestors;
+  });
 }
 
 /**
diff --git a/pkg/analysis_server/lib/src/services/search/search_engine.dart b/pkg/analysis_server/lib/src/services/search/search_engine.dart
index 60391ff..4e294bd 100644
--- a/pkg/analysis_server/lib/src/services/search/search_engine.dart
+++ b/pkg/analysis_server/lib/src/services/search/search_engine.dart
@@ -68,6 +68,13 @@
  */
 abstract class SearchEngine {
   /**
+   * Returns all subtypes of the given [type].
+   *
+   * [type] - the [ClassElement] being subtyped by the found matches.
+   */
+  Future<List<SearchMatch>> searchAllSubtypes(ClassElement type);
+
+  /**
    * Returns declarations of elements with the given name.
    *
    * [name] - the name being declared by the found matches.
@@ -97,7 +104,7 @@
   Future<List<SearchMatch>> searchReferences(Element element);
 
   /**
-   * Returns subtypes of the given [type].
+   * Returns direct subtypes of the given [type].
    *
    * [type] - the [ClassElement] being subtyped by the found matches.
    */
diff --git a/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart b/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart
index 6efd7d0..edcbc84 100644
--- a/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart
+++ b/pkg/analysis_server/lib/src/services/search/search_engine_internal.dart
@@ -6,7 +6,7 @@
 
 import 'dart:async';
 
-import 'package:analysis_server/analysis/index/index_core.dart';
+import 'package:analysis_server/analysis/index_core.dart';
 import 'package:analysis_server/src/services/correction/source_range.dart';
 import 'package:analysis_server/src/services/index/index.dart';
 import 'package:analysis_server/src/services/index/indexable_element.dart';
@@ -23,6 +23,14 @@
   SearchEngineImpl(this._index);
 
   @override
+  Future<List<SearchMatch>> searchAllSubtypes(ClassElement type) {
+    _Requestor requestor = new _Requestor(_index);
+    requestor.addElement(
+        type, IndexConstants.HAS_ANCESTOR, MatchKind.DECLARATION);
+    return requestor.merge();
+  }
+
+  @override
   Future<List<SearchMatch>> searchElementDeclarations(String name) {
     IndexableName indexableName = new IndexableName(name);
     _Requestor requestor = new _Requestor(_index);
diff --git a/pkg/analysis_server/lib/src/status/get_handler.dart b/pkg/analysis_server/lib/src/status/get_handler.dart
index 9f9dda4..abf8f00 100644
--- a/pkg/analysis_server/lib/src/status/get_handler.dart
+++ b/pkg/analysis_server/lib/src/status/get_handler.dart
@@ -28,13 +28,16 @@
 import 'package:analyzer/src/generated/ast.dart';
 import 'package:analyzer/src/generated/element.dart';
 import 'package:analyzer/src/generated/engine.dart'
-    hide AnalysisContextImpl, AnalysisTask;
+    hide AnalysisCache, AnalysisContextImpl, AnalysisTask;
 import 'package:analyzer/src/generated/java_engine.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/utilities_collection.dart';
 import 'package:analyzer/src/generated/utilities_general.dart';
 import 'package:analyzer/src/task/dart.dart';
+import 'package:analyzer/src/task/html.dart';
 import 'package:analyzer/task/dart.dart';
+import 'package:analyzer/task/general.dart';
+import 'package:analyzer/task/html.dart';
 import 'package:analyzer/task/model.dart';
 import 'package:plugin/plugin.dart';
 
@@ -271,6 +274,89 @@
   }
 
   /**
+   * Return a list of the result descriptors whose state should be displayed for
+   * the given cache [entry].
+   */
+  List<ResultDescriptor> _getExpectedResults(CacheEntry entry) {
+    AnalysisTarget target = entry.target;
+    Set<ResultDescriptor> results = entry.nonInvalidResults.toSet();
+    if (target is Source) {
+      String name = target.shortName;
+      results.add(CONTENT);
+      results.add(LINE_INFO);
+      results.add(MODIFICATION_TIME);
+      if (AnalysisEngine.isDartFileName(name)) {
+        results.add(BUILD_DIRECTIVES_ERRORS);
+        results.add(BUILD_LIBRARY_ERRORS);
+        results.add(CONTAINING_LIBRARIES);
+        results.add(DART_ERRORS);
+        results.add(EXPLICITLY_IMPORTED_LIBRARIES);
+        results.add(EXPORT_SOURCE_CLOSURE);
+        results.add(EXPORTED_LIBRARIES);
+        results.add(IMPORT_EXPORT_SOURCE_CLOSURE);
+        results.add(IMPORTED_LIBRARIES);
+        results.add(INCLUDED_PARTS);
+        results.add(IS_CLIENT);
+        results.add(IS_LAUNCHABLE);
+        results.add(LIBRARY_ELEMENT1);
+        results.add(LIBRARY_ELEMENT2);
+        results.add(LIBRARY_ELEMENT3);
+        results.add(LIBRARY_ELEMENT4);
+        results.add(LIBRARY_ELEMENT5);
+        results.add(LIBRARY_ELEMENT);
+        results.add(LIBRARY_ERRORS_READY);
+        results.add(PARSE_ERRORS);
+        results.add(PARSED_UNIT);
+        results.add(REFERENCED_NAMES);
+        results.add(SCAN_ERRORS);
+        results.add(SOURCE_KIND);
+        results.add(TOKEN_STREAM);
+        results.add(UNITS);
+      } else if (AnalysisEngine.isHtmlFileName(name)) {
+        results.add(DART_SCRIPTS);
+        results.add(HTML_DOCUMENT);
+        results.add(HTML_DOCUMENT_ERRORS);
+        results.add(HTML_ERRORS);
+        results.add(REFERENCED_LIBRARIES);
+      }
+    } else if (target is LibrarySpecificUnit) {
+      results.add(COMPILATION_UNIT_CONSTANTS);
+      results.add(COMPILATION_UNIT_ELEMENT);
+      results.add(HINTS);
+      results.add(INFER_STATIC_VARIABLE_TYPES_ERRORS);
+      results.add(INFERABLE_STATIC_VARIABLES_IN_UNIT);
+      results.add(LIBRARY_UNIT_ERRORS);
+      results.add(PARTIALLY_RESOLVE_REFERENCES_ERRORS);
+      results.add(RESOLVE_FUNCTION_BODIES_ERRORS);
+      results.add(RESOLVE_TYPE_NAMES_ERRORS);
+      results.add(RESOLVED_UNIT1);
+      results.add(RESOLVED_UNIT2);
+      results.add(RESOLVED_UNIT3);
+      results.add(RESOLVED_UNIT4);
+      results.add(RESOLVED_UNIT5);
+      results.add(RESOLVED_UNIT6);
+      results.add(RESOLVED_UNIT7);
+      results.add(RESOLVED_UNIT8);
+      results.add(RESOLVED_UNIT);
+      results.add(USED_IMPORTED_ELEMENTS);
+      results.add(USED_LOCAL_ELEMENTS);
+      results.add(VARIABLE_REFERENCE_ERRORS);
+      results.add(VERIFY_ERRORS);
+    } else if (target is ConstantEvaluationTarget) {
+      results.add(CONSTANT_DEPENDENCIES);
+      results.add(CONSTANT_VALUE);
+      if (target is VariableElement) {
+        results.add(INFER_STATIC_VARIABLE_ERRORS);
+        results.add(INFERABLE_STATIC_VARIABLE_DEPENDENCIES);
+        results.add(INFERRED_STATIC_VARIABLE);
+      }
+    } else if (target is AnalysisContextTarget) {
+      results.add(TYPE_PROVIDER);
+    }
+    return results.toList();
+  }
+
+  /**
    * Return `true` if the given analysis [context] has at least one entry with
    * an exception.
    */
@@ -311,76 +397,152 @@
       _writePage(buffer, 'Analysis Server - Analysis Performance', [],
           (StringBuffer buffer) {
         buffer.write('<h3>Analysis Performance</h3>');
-        //
-        // Write performance tags.
-        //
-        buffer.write('<p><b>Performance tag data</b></p>');
-        buffer.write(
-            '<table style="border-collapse: separate; border-spacing: 10px 5px;">');
-        _writeRow(buffer, ['Time (in ms)', 'Percent', 'Tag name'],
-            header: true);
-        // prepare sorted tags
-        List<PerformanceTag> tags = PerformanceTag.all.toList();
-        tags.remove(ServerPerformanceStatistics.idle);
-        tags.sort((a, b) => b.elapsedMs - a.elapsedMs);
-        // prepare total time
-        int totalTagTime = 0;
-        tags.forEach((PerformanceTag tag) {
-          totalTagTime += tag.elapsedMs;
-        });
-        // write rows
-        void writeRow(PerformanceTag tag) {
-          double percent = (tag.elapsedMs * 100) / totalTagTime;
-          String percentStr = '${percent.toStringAsFixed(2)}%';
-          _writeRow(buffer, [tag.elapsedMs, percentStr, tag.label],
-              classes: ["right", "right", null]);
-        }
-        tags.forEach(writeRow);
-        buffer.write('</table>');
-        //
-        // Write task model timing information.
-        //
-        buffer.write('<p><b>Task performace data</b></p>');
-        buffer.write(
-            '<table style="border-collapse: separate; border-spacing: 10px 5px;">');
-        _writeRow(
-            buffer,
-            [
-              'Task Name',
-              'Count',
-              'Total Time (in ms)',
-              'Average Time (in ms)'
-            ],
-            header: true);
-
-        Map<Type, int> countMap = AnalysisTask.countMap;
-        Map<Type, Stopwatch> stopwatchMap = AnalysisTask.stopwatchMap;
-        List<Type> taskClasses = stopwatchMap.keys.toList();
-        taskClasses.sort((Type first, Type second) =>
-            first.toString().compareTo(second.toString()));
-        int totalTaskTime = 0;
-        taskClasses.forEach((Type taskClass) {
-          int count = countMap[taskClass];
-          if (count == null) {
-            count = 0;
+        _writeTwoColumns(buffer, (StringBuffer buffer) {
+          //
+          // Write performance tags.
+          //
+          buffer.write('<p><b>Performance tag data</b></p>');
+          buffer.write(
+              '<table style="border-collapse: separate; border-spacing: 10px 5px;">');
+          _writeRow(buffer, ['Time (in ms)', 'Percent', 'Tag name'],
+              header: true);
+          // prepare sorted tags
+          List<PerformanceTag> tags = PerformanceTag.all.toList();
+          tags.remove(ServerPerformanceStatistics.idle);
+          tags.sort((a, b) => b.elapsedMs - a.elapsedMs);
+          // prepare total time
+          int totalTagTime = 0;
+          tags.forEach((PerformanceTag tag) {
+            totalTagTime += tag.elapsedMs;
+          });
+          // write rows
+          void writeRow(PerformanceTag tag) {
+            double percent = (tag.elapsedMs * 100) / totalTagTime;
+            String percentStr = '${percent.toStringAsFixed(2)}%';
+            _writeRow(buffer, [tag.elapsedMs, percentStr, tag.label],
+                classes: ["right", "right", null]);
           }
-          int taskTime = stopwatchMap[taskClass].elapsedMilliseconds;
-          totalTaskTime += taskTime;
-          _writeRow(buffer, [
-            taskClass.toString(),
-            count,
-            taskTime,
-            count <= 0 ? '-' : (taskTime / count).toStringAsFixed(3)
-          ], classes: [
-            null,
-            "right",
-            "right",
-            "right"
-          ]);
+          tags.forEach(writeRow);
+          buffer.write('</table>');
+          //
+          // Write target counts.
+          //
+          void incrementCount(Map<String, int> counts, String key) {
+            int count = counts[key];
+            if (count == null) {
+              count = 1;
+            } else {
+              count++;
+            }
+            counts[key] = count;
+          }
+          Set<AnalysisTarget> countedTargets = new HashSet<AnalysisTarget>();
+          Map<String, int> sourceTypeCounts = new HashMap<String, int>();
+          Map<String, int> typeCounts = new HashMap<String, int>();
+          analysisServer.folderMap
+              .forEach((Folder folder, InternalAnalysisContext context) {
+            AnalysisCache cache = context.analysisCache;
+            MapIterator<AnalysisTarget, CacheEntry> iterator = cache.iterator();
+            while (iterator.moveNext()) {
+              AnalysisTarget target = iterator.key;
+              if (countedTargets.add(target)) {
+                if (target is Source) {
+                  String name = target.fullName;
+                  String sourceName;
+                  if (AnalysisEngine.isDartFileName(name)) {
+                    if (iterator.value.explicitlyAdded) {
+                      sourceName = 'Dart file (explicit)';
+                    } else {
+                      sourceName = 'Dart file (implicit)';
+                    }
+                  } else if (AnalysisEngine.isHtmlFileName(name)) {
+                    if (iterator.value.explicitlyAdded) {
+                      sourceName = 'Html file (explicit)';
+                    } else {
+                      sourceName = 'Html file (implicit)';
+                    }
+                  } else {
+                    if (iterator.value.explicitlyAdded) {
+                      sourceName = 'Unknown file (explicit)';
+                    } else {
+                      sourceName = 'Unknown file (implicit)';
+                    }
+                  }
+                  incrementCount(sourceTypeCounts, sourceName);
+                } else if (target is ConstantEvaluationTarget) {
+                  incrementCount(typeCounts, 'ConstantEvaluationTarget');
+                } else {
+                  String typeName = target.runtimeType.toString();
+                  incrementCount(typeCounts, typeName);
+                }
+              }
+            }
+          });
+          List<String> sourceTypeNames = sourceTypeCounts.keys.toList();
+          sourceTypeNames.sort();
+          List<String> typeNames = typeCounts.keys.toList();
+          typeNames.sort();
+
+          buffer.write('<p><b>Target counts</b></p>');
+          buffer.write(
+              '<table style="border-collapse: separate; border-spacing: 10px 5px;">');
+          _writeRow(buffer, ['Target', 'Count'], header: true);
+          for (String sourceTypeName in sourceTypeNames) {
+            _writeRow(
+                buffer, [sourceTypeName, sourceTypeCounts[sourceTypeName]],
+                classes: [null, "right"]);
+          }
+          for (String typeName in typeNames) {
+            _writeRow(buffer, [typeName, typeCounts[typeName]],
+                classes: [null, "right"]);
+          }
+          buffer.write('</table>');
+        }, (StringBuffer buffer) {
+          //
+          // Write task model timing information.
+          //
+          buffer.write('<p><b>Task performace data</b></p>');
+          buffer.write(
+              '<table style="border-collapse: separate; border-spacing: 10px 5px;">');
+          _writeRow(
+              buffer,
+              [
+                'Task Name',
+                'Count',
+                'Total Time (in ms)',
+                'Average Time (in ms)'
+              ],
+              header: true);
+
+          Map<Type, int> countMap = AnalysisTask.countMap;
+          Map<Type, Stopwatch> stopwatchMap = AnalysisTask.stopwatchMap;
+          List<Type> taskClasses = stopwatchMap.keys.toList();
+          taskClasses.sort((Type first, Type second) =>
+              first.toString().compareTo(second.toString()));
+          int totalTaskTime = 0;
+          taskClasses.forEach((Type taskClass) {
+            int count = countMap[taskClass];
+            if (count == null) {
+              count = 0;
+            }
+            int taskTime = stopwatchMap[taskClass].elapsedMilliseconds;
+            totalTaskTime += taskTime;
+            _writeRow(buffer, [
+              taskClass.toString(),
+              count,
+              taskTime,
+              count <= 0 ? '-' : (taskTime / count).toStringAsFixed(3)
+            ], classes: [
+              null,
+              "right",
+              "right",
+              "right"
+            ]);
+          });
+          _writeRow(buffer, ['Total', '-', totalTaskTime, '-'],
+              classes: [null, "right", "right", "right"]);
+          buffer.write('</table>');
         });
-        _writeRow(buffer, ['Total', '-', totalTaskTime, '-'],
-            classes: [null, "right", "right", "right"]);
-        buffer.write('</table>');
       });
     });
   }
@@ -517,14 +679,18 @@
                 },
                 HTML_ESCAPE.convert(folder.path)));
           }
-          CacheEntry sourceEntry =
-              entries.firstWhere((CacheEntry entry) => entry.target is Source);
-          if (sourceEntry == null) {
-            buffer.write(' (missing source entry)');
-          } else if (sourceEntry.explicitlyAdded) {
-            buffer.write(' (explicit)');
+          if (entries == null) {
+            buffer.write(' (file does not exist)');
           } else {
-            buffer.write(' (implicit)');
+            CacheEntry sourceEntry = entries
+                .firstWhere((CacheEntry entry) => entry.target is Source);
+            if (sourceEntry == null) {
+              buffer.write(' (missing source entry)');
+            } else if (sourceEntry.explicitlyAdded) {
+              buffer.write(' (explicit)');
+            } else {
+              buffer.write(' (implicit)');
+            }
           }
         });
         buffer.write('</p>');
@@ -538,7 +704,7 @@
             CONTEXT_QUERY_PARAM: folder.path,
             SOURCE_QUERY_PARAM: sourceUri
           };
-          List<ResultDescriptor> results = entry.nonInvalidResults;
+          List<ResultDescriptor> results = _getExpectedResults(entry);
           results.sort((ResultDescriptor first, ResultDescriptor second) =>
               first.toString().compareTo(second.toString()));
 
@@ -550,14 +716,16 @@
           buffer.write(entry.modificationTime);
           buffer.write('</dd>');
           for (ResultDescriptor result in results) {
-            ResultData data = entry.getResultData(result);
+            CacheState state = entry.getState(result);
             String descriptorName = HTML_ESCAPE.convert(result.toString());
-            String descriptorState = HTML_ESCAPE.convert(data.state.toString());
+            String descriptorState = HTML_ESCAPE.convert(state.toString());
             buffer.write('<dt>$descriptorName ($descriptorState)</dt><dd>');
-            try {
-              _writeValueAsHtml(buffer, data.value, linkParameters);
-            } catch (exception) {
-              buffer.write('(${HTML_ESCAPE.convert(exception.toString())})');
+            if (state == CacheState.VALID) {
+              try {
+                _writeValueAsHtml(buffer, entry.getValue(result), linkParameters);
+              } catch (exception) {
+                buffer.write('(${HTML_ESCAPE.convert(exception.toString())})');
+              }
             }
             buffer.write('</dd>');
           }
diff --git a/pkg/analysis_server/test/analysis/notification_implemented_test.dart b/pkg/analysis_server/test/analysis/notification_implemented_test.dart
new file mode 100644
index 0000000..a26ff56
--- /dev/null
+++ b/pkg/analysis_server/test/analysis/notification_implemented_test.dart
@@ -0,0 +1,289 @@
+// Copyright (c) 2014, 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 test.analysis.notification.implemented;
+
+import 'dart:async';
+
+import 'package:analysis_server/src/constants.dart';
+import 'package:analysis_server/src/protocol.dart';
+import 'package:analysis_server/src/services/index/index.dart';
+import 'package:analysis_server/src/services/index/local_memory_index.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+import 'package:unittest/unittest.dart';
+
+import '../analysis_abstract.dart';
+import '../utils.dart';
+
+main() {
+  initializeTestEnvironment();
+  defineReflectiveTests(AnalysisNotificationImplementedTest);
+}
+
+@reflectiveTest
+class AnalysisNotificationImplementedTest extends AbstractAnalysisTest {
+  List<ImplementedClass> implementedClasses;
+  List<ImplementedMember> implementedMembers;
+
+  /**
+   * Validates that there is an [ImplementedClass] at the offset of [search].
+   *
+   * If [length] is not specified explicitly, then length of an identifier
+   * from [search] is used.
+   */
+  void assertHasImplementedClass(String search, [int length = -1]) {
+    int offset = findOffset(search);
+    if (length == -1) {
+      length = findIdentifierLength(search);
+    }
+    for (ImplementedClass clazz in implementedClasses) {
+      if (clazz.offset == offset && clazz.length == length) {
+        return;
+      }
+    }
+    fail('Expect to find an implemented class at $offset'
+        ' in $implementedClasses');
+  }
+
+  /**
+   * Validates that there is an [ImplementedClass] at the offset of [search].
+   *
+   * If [length] is not specified explicitly, then length of an identifier
+   * from [search] is used.
+   */
+  void assertHasImplementedMember(String search, [int length = -1]) {
+    int offset = findOffset(search);
+    if (length == -1) {
+      length = findIdentifierLength(search);
+    }
+    for (ImplementedMember member in implementedMembers) {
+      if (member.offset == offset && member.length == length) {
+        return;
+      }
+    }
+    fail('Expect to find an implemented member at $offset'
+        ' in $implementedMembers');
+  }
+
+  /**
+   * Validates that there is no an [ImplementedClass] at the offset of [search].
+   *
+   * If [length] is not specified explicitly, then length of an identifier
+   * from [search] is used.
+   */
+  void assertNoImplementedMember(String search, [int length = -1]) {
+    int offset = findOffset(search);
+    if (length == -1) {
+      length = findIdentifierLength(search);
+    }
+    for (ImplementedMember member in implementedMembers) {
+      if (member.offset == offset) {
+        fail('Unexpected implemented member at $offset'
+            ' in $implementedMembers');
+      }
+    }
+  }
+
+  @override
+  Index createIndex() {
+    return createLocalMemoryIndex();
+  }
+
+  Future prepareImplementedElements() {
+    addAnalysisSubscription(AnalysisService.IMPLEMENTED, testFile);
+    Future waitForNotification(int times) {
+      if (times == 0 || implementedClasses != null) {
+        return new Future.value();
+      }
+      return new Future.delayed(
+          Duration.ZERO, () => waitForNotification(times - 1));
+    }
+    return waitForNotification(100);
+  }
+
+  void processNotification(Notification notification) {
+    if (notification.event == ANALYSIS_IMPLEMENTED) {
+      var params = new AnalysisImplementedParams.fromNotification(notification);
+      if (params.file == testFile) {
+        implementedClasses = params.classes;
+        implementedMembers = params.members;
+      }
+    }
+  }
+
+  void setUp() {
+    super.setUp();
+    createProject();
+  }
+
+  test_afterAnalysis() async {
+    addTestFile('''
+class A {}
+class B extends A {}
+''');
+    await waitForTasksFinished();
+    await prepareImplementedElements();
+    assertHasImplementedClass('A {');
+  }
+
+  test_class_extended() async {
+    addTestFile('''
+class A {}
+class B extends A {}
+''');
+    await prepareImplementedElements();
+    assertHasImplementedClass('A {');
+  }
+
+  test_class_implemented() async {
+    addTestFile('''
+class A {}
+class B implements A {}
+''');
+    await prepareImplementedElements();
+    assertHasImplementedClass('A {');
+  }
+
+  test_class_mixed() async {
+    addTestFile('''
+class A {}
+class B = Object with A;
+''');
+    await prepareImplementedElements();
+    assertHasImplementedClass('A {');
+  }
+
+  test_field_withField() async {
+    addTestFile('''
+class A {
+  int f; // A
+}
+class B extends A {
+  int f;
+}
+''');
+    await prepareImplementedElements();
+    assertHasImplementedMember('f; // A');
+  }
+
+  test_field_withGetter() async {
+    addTestFile('''
+class A {
+  int f; // A
+}
+class B extends A {
+  get f => null;
+}
+''');
+    await prepareImplementedElements();
+    assertHasImplementedMember('f; // A');
+  }
+
+  test_field_withSetter() async {
+    addTestFile('''
+class A {
+  int f; // A
+}
+class B extends A {
+  void set f(_) {}
+}
+''');
+    await prepareImplementedElements();
+    assertHasImplementedMember('f; // A');
+  }
+
+  test_getter_withField() async {
+    addTestFile('''
+class A {
+  get f => null; // A
+}
+class B extends A {
+  int f;
+}
+''');
+    await prepareImplementedElements();
+    assertHasImplementedMember('f => null; // A');
+  }
+
+  test_getter_withGetter() async {
+    addTestFile('''
+class A {
+  get f => null; // A
+}
+class B extends A {
+  get f => null;
+}
+''');
+    await prepareImplementedElements();
+    assertHasImplementedMember('f => null; // A');
+  }
+
+  test_method_withMethod() async {
+    addTestFile('''
+class A {
+  m() {} // A
+}
+class B extends A {
+  m() {} // B
+}
+''');
+    await prepareImplementedElements();
+    assertHasImplementedMember('m() {} // A');
+    assertNoImplementedMember('m() {} // B');
+  }
+
+  test_method_withMethod_indirectSubclass() async {
+    addTestFile('''
+class A {
+  m() {} // A
+}
+class B extends A {
+}
+class C extends A {
+  m() {}
+}
+''');
+    await prepareImplementedElements();
+    assertHasImplementedMember('m() {} // A');
+  }
+
+  test_method_withMethod_wasAbstract() async {
+    addTestFile('''
+abstract class A {
+  m(); // A
+}
+class B extends A {
+  m() {}
+}
+''');
+    await prepareImplementedElements();
+    assertHasImplementedMember('m(); // A');
+  }
+
+  test_setter_withField() async {
+    addTestFile('''
+class A {
+  set f(_) {} // A
+}
+class B extends A {
+  int f;
+}
+''');
+    await prepareImplementedElements();
+    assertHasImplementedMember('f(_) {} // A');
+  }
+
+  test_setter_withSetter() async {
+    addTestFile('''
+class A {
+  set f(_) {} // A
+}
+class B extends A {
+  set f(_) {} // B
+}
+''');
+    await prepareImplementedElements();
+    assertHasImplementedMember('f(_) {} // A');
+  }
+}
diff --git a/pkg/analysis_server/test/analysis/notification_navigation_test.dart b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
index f518910..fee0d6f 100644
--- a/pkg/analysis_server/test/analysis/notification_navigation_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
@@ -103,6 +103,14 @@
   }
 
   /**
+   * Validates that there is a target in [testTargets]  with [testFile], at the
+   * offset of [str] in [testFile], and with the length of  [str].
+   */
+  void assertHasTargetString(String str) {
+    assertHasTarget(str, str.length);
+  }
+
+  /**
    * Validates that there is no a region at [search] and with the given
    * [length].
    */
@@ -581,6 +589,16 @@
     });
   }
 
+  test_library() {
+    addTestFile('''
+library my.lib;
+''');
+    return prepareNavigation().then((_) {
+      assertHasRegionString('my.lib');
+      assertHasTargetString('my.lib');
+    });
+  }
+
   test_multiplyDefinedElement() {
     addFile('$projectPath/bin/libA.dart', 'library A; int TEST = 1;');
     addFile('$projectPath/bin/libB.dart', 'library B; int TEST = 2;');
@@ -664,7 +682,7 @@
     var libFile = addFile('$projectPath/bin/lib.dart', libCode);
     addTestFile('part of lib;');
     return prepareNavigation().then((_) {
-      assertHasRegionString('part of lib');
+      assertHasRegionString('lib');
       assertHasFileTarget(libFile, libCode.indexOf('lib;'), 'lib'.length);
     });
   }
diff --git a/pkg/analysis_server/test/analysis/test_all.dart b/pkg/analysis_server/test/analysis/test_all.dart
index 67d28c2..a14781f 100644
--- a/pkg/analysis_server/test/analysis/test_all.dart
+++ b/pkg/analysis_server/test/analysis/test_all.dart
@@ -14,6 +14,7 @@
 import 'notification_errors_test.dart' as notification_errors_test;
 import 'notification_highlights_test.dart' as notification_highlights_test;
 import 'notification_highlights_test2.dart' as notification_highlights_test2;
+import 'notification_implemented_test.dart' as notification_implemented_test;
 import 'notification_navigation_test.dart' as notification_navigation_test;
 import 'notification_occurrences_test.dart' as notification_occurrences_test;
 import 'notification_outline_test.dart' as notification_outline_test;
@@ -34,6 +35,7 @@
     notification_errors_test.main();
     notification_highlights_test.main();
     notification_highlights_test2.main();
+    notification_implemented_test.main();
     notification_navigation_test.main();
     notification_occurrences_test.main();
     notification_outline_test.main();
diff --git a/pkg/analysis_server/test/analysis/update_content_test.dart b/pkg/analysis_server/test/analysis/update_content_test.dart
index 9681c47..5dbdaa5 100644
--- a/pkg/analysis_server/test/analysis/update_content_test.dart
+++ b/pkg/analysis_server/test/analysis/update_content_test.dart
@@ -95,7 +95,7 @@
     createProject();
     addTestFile('main() { print(1); }');
     await server.onAnalysisComplete;
-    verify(server.index.indexUnit(anyObject, testUnitMatcher)).times(1);
+    verify(server.index.index(anyObject, testUnitMatcher)).times(1);
     // add an overlay
     server.updateContent(
         '1', {testFile: new AddContentOverlay('main() { print(2); }')});
@@ -107,7 +107,7 @@
     server.updateContent('2', {testFile: new RemoveContentOverlay()});
     // Validate that at the end the unit was indexed.
     await server.onAnalysisComplete;
-    verify(server.index.indexUnit(anyObject, testUnitMatcher)).times(2);
+    verify(server.index.index(anyObject, testUnitMatcher)).times(2);
   }
 
   test_multiple_contexts() async {
diff --git a/pkg/analysis_server/test/context_manager_test.dart b/pkg/analysis_server/test/context_manager_test.dart
index 20327de..2742fcf 100644
--- a/pkg/analysis_server/test/context_manager_test.dart
+++ b/pkg/analysis_server/test/context_manager_test.dart
@@ -96,6 +96,26 @@
     ContextManagerImpl.ENABLE_PACKAGESPEC_SUPPORT = false;
   }
 
+  test_analysis_options_parse_failure() async {
+    // Create files.
+    String libPath = newFolder([projPath, LIB_NAME]);
+    newFile([libPath, 'main.dart']);
+    String sdkExtPath = newFolder([projPath, 'sdk_ext']);
+    newFile([sdkExtPath, 'entry.dart']);
+    String sdkExtSrcPath = newFolder([projPath, 'sdk_ext', 'src']);
+    newFile([sdkExtSrcPath, 'part.dart']);
+    // Setup analysis options file with ignore list.
+    newFile(
+        [projPath, '.analysis_options'],
+        r'''
+;
+''');
+    // Setup context.
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
+
+    // No error means success.
+  }
+
   void test_contextsInAnalysisRoot_nestedContext() {
     String subProjPath = posix.join(projPath, 'subproj');
     Folder subProjFolder = resourceProvider.newFolder(subProjPath);
@@ -347,41 +367,6 @@
   // TODO(paulberry): This test only tests PackagesFileDisposition.
   // Once http://dartbug.com/23909 is fixed, add a test for sdk extensions
   // and PackageMapDisposition.
-  test_sdk_ext_packagespec() async {
-    // Create files.
-    String libPath = newFolder([projPath, LIB_NAME]);
-    newFile([libPath, 'main.dart']);
-    newFile([libPath, 'nope.dart']);
-    String sdkExtPath = newFolder([projPath, 'sdk_ext']);
-    newFile([sdkExtPath, 'entry.dart']);
-    String sdkExtSrcPath = newFolder([projPath, 'sdk_ext', 'src']);
-    newFile([sdkExtSrcPath, 'part.dart']);
-    // Setup sdk extension mapping.
-    newFile(
-        [libPath, '_sdkext'],
-        r'''
-{
-  "dart:foobar": "../sdk_ext/entry.dart"
-}
-''');
-    // Setup .packages file
-    newFile(
-        [projPath, '.packages'],
-        r'''
-test_pack:lib/
-''');
-    // Setup context.
-    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
-    // Confirm that one context was created.
-    var contexts =
-        manager.contextsInAnalysisRoot(resourceProvider.newFolder(projPath));
-    expect(contexts, isNotNull);
-    expect(contexts.length, equals(1));
-    var context = contexts[0];
-    var source = context.sourceFactory.forUri('dart:foobar');
-    expect(source.fullName, equals('/my/proj/sdk_ext/entry.dart'));
-  }
-
   test_refresh_folder_with_packagespec() {
     // create a context with a .packages file
     String packagespecFile = posix.join(projPath, '.packages');
@@ -489,6 +474,41 @@
     });
   }
 
+  test_sdk_ext_packagespec() async {
+    // Create files.
+    String libPath = newFolder([projPath, LIB_NAME]);
+    newFile([libPath, 'main.dart']);
+    newFile([libPath, 'nope.dart']);
+    String sdkExtPath = newFolder([projPath, 'sdk_ext']);
+    newFile([sdkExtPath, 'entry.dart']);
+    String sdkExtSrcPath = newFolder([projPath, 'sdk_ext', 'src']);
+    newFile([sdkExtSrcPath, 'part.dart']);
+    // Setup sdk extension mapping.
+    newFile(
+        [libPath, '_sdkext'],
+        r'''
+{
+  "dart:foobar": "../sdk_ext/entry.dart"
+}
+''');
+    // Setup .packages file
+    newFile(
+        [projPath, '.packages'],
+        r'''
+test_pack:lib/
+''');
+    // Setup context.
+    manager.setRoots(<String>[projPath], <String>[], <String, String>{});
+    // Confirm that one context was created.
+    var contexts =
+        manager.contextsInAnalysisRoot(resourceProvider.newFolder(projPath));
+    expect(contexts, isNotNull);
+    expect(contexts.length, equals(1));
+    var context = contexts[0];
+    var source = context.sourceFactory.forUri('dart:foobar');
+    expect(source.fullName, equals('/my/proj/sdk_ext/entry.dart'));
+  }
+
   void test_setRoots_addFolderWithDartFile() {
     String filePath = posix.join(projPath, 'foo.dart');
     resourceProvider.newFile(filePath, 'contents');
@@ -934,6 +954,19 @@
     expect(result, same(source));
   }
 
+  void test_setRoots_pathContainsDotFile() {
+    // If the path to a file (relative to the context root) contains a folder
+    // whose name begins with '.', then the file is ignored.
+    String project = '/project';
+    String fileA = '$project/foo.dart';
+    String fileB = '$project/.pub/bar.dart';
+    resourceProvider.newFile(fileA, '');
+    resourceProvider.newFile(fileB, '');
+    manager.setRoots(<String>[project], <String>[], <String, String>{});
+    callbacks.assertContextPaths([project]);
+    callbacks.assertContextFiles(project, [fileA]);
+  }
+
   void test_setRoots_removeFolderWithoutPubspec() {
     packageMapProvider.packageMap = null;
     // add one root - there is a context
@@ -1057,6 +1090,18 @@
     _checkPackageMap(projPath, equals(packageMapProvider.packageMap));
   }
 
+  void test_setRoots_rootPathContainsDotFile() {
+    // If the path to the context root itself contains a folder whose name
+    // begins with '.', then that is not sufficient to cause any files in the
+    // context to be ignored.
+    String project = '/.pub/project';
+    String fileA = '$project/foo.dart';
+    resourceProvider.newFile(fileA, '');
+    manager.setRoots(<String>[project], <String>[], <String, String>{});
+    callbacks.assertContextPaths([project]);
+    callbacks.assertContextFiles(project, [fileA]);
+  }
+
   test_watch_addDummyLink() {
     manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     // empty folder initially
@@ -1107,6 +1152,38 @@
     });
   }
 
+  test_watch_addFile_pathContainsDotFile() async {
+    // If a file is added and the path to it (relative to the context root)
+    // contains a folder whose name begins with '.', then the file is ignored.
+    String project = '/project';
+    String fileA = '$project/foo.dart';
+    String fileB = '$project/.pub/bar.dart';
+    resourceProvider.newFile(fileA, '');
+    manager.setRoots(<String>[project], <String>[], <String, String>{});
+    callbacks.assertContextPaths([project]);
+    callbacks.assertContextFiles(project, [fileA]);
+    resourceProvider.newFile(fileB, '');
+    await pumpEventQueue();
+    callbacks.assertContextPaths([project]);
+    callbacks.assertContextFiles(project, [fileA]);
+  }
+
+  test_watch_addFile_rootPathContainsDotFile() async {
+    // If a file is added and the path to the context contains a folder whose
+    // name begins with '.', then the file is not ignored.
+    String project = '/.pub/project';
+    String fileA = '$project/foo.dart';
+    String fileB = '$project/bar/baz.dart';
+    resourceProvider.newFile(fileA, '');
+    manager.setRoots(<String>[project], <String>[], <String, String>{});
+    callbacks.assertContextPaths([project]);
+    callbacks.assertContextFiles(project, [fileA]);
+    resourceProvider.newFile(fileB, '');
+    await pumpEventQueue();
+    callbacks.assertContextPaths([project]);
+    callbacks.assertContextFiles(project, [fileA, fileB]);
+  }
+
   test_watch_addFileInSubfolder() {
     manager.setRoots(<String>[projPath], <String>[], <String, String>{});
     // empty folder initially
diff --git a/pkg/analysis_server/test/edit/refactoring_test.dart b/pkg/analysis_server/test/edit/refactoring_test.dart
index c5d6156..8ffc387 100644
--- a/pkg/analysis_server/test/edit/refactoring_test.dart
+++ b/pkg/analysis_server/test/edit/refactoring_test.dart
@@ -1648,6 +1648,24 @@
 ''');
   }
 
+  test_library_partOfDirective() {
+    addFile(
+        '$testFolder/my_lib.dart',
+        '''
+library aaa.bbb.ccc;
+part 'test.dart';
+''');
+    addTestFile('''
+part of aaa.bbb.ccc;
+''');
+    return assertSuccessfulRefactoring(() {
+      return sendRenameRequest('aaa.bb', 'my.new_name');
+    },
+        '''
+part of my.new_name;
+''');
+  }
+
   test_localVariable() {
     addTestFile('''
 main() {
diff --git a/pkg/analysis_server/test/integration/integration_test_methods.dart b/pkg/analysis_server/test/integration/integration_test_methods.dart
index f6aa68d..836f884 100644
--- a/pkg/analysis_server/test/integration/integration_test_methods.dart
+++ b/pkg/analysis_server/test/integration/integration_test_methods.dart
@@ -689,6 +689,35 @@
   StreamController<AnalysisHighlightsParams> _onAnalysisHighlights;
 
   /**
+   * Reports the classes that are implemented or extended and class members
+   * that are implemented or overridden in a file.
+   *
+   * This notification is not subscribed to by default. Clients can subscribe
+   * by including the value "IMPLEMENTED" in the list of services passed in an
+   * analysis.setSubscriptions request.
+   *
+   * Parameters
+   *
+   * file ( FilePath )
+   *
+   *   The file with which the implementations are associated.
+   *
+   * classes ( List<ImplementedClass> )
+   *
+   *   The classes defined in the file that are implemented or extended.
+   *
+   * members ( List<ImplementedMember> )
+   *
+   *   The member defined in the file that are implemented or overridden.
+   */
+  Stream<AnalysisImplementedParams> onAnalysisImplemented;
+
+  /**
+   * Stream controller for [onAnalysisImplemented].
+   */
+  StreamController<AnalysisImplementedParams> _onAnalysisImplemented;
+
+  /**
    * Reports that the navigation information associated with a region of a
    * single file has become invalid and should be re-requested.
    *
@@ -1607,6 +1636,8 @@
     onAnalysisFolding = _onAnalysisFolding.stream.asBroadcastStream();
     _onAnalysisHighlights = new StreamController<AnalysisHighlightsParams>(sync: true);
     onAnalysisHighlights = _onAnalysisHighlights.stream.asBroadcastStream();
+    _onAnalysisImplemented = new StreamController<AnalysisImplementedParams>(sync: true);
+    onAnalysisImplemented = _onAnalysisImplemented.stream.asBroadcastStream();
     _onAnalysisInvalidate = new StreamController<AnalysisInvalidateParams>(sync: true);
     onAnalysisInvalidate = _onAnalysisInvalidate.stream.asBroadcastStream();
     _onAnalysisNavigation = new StreamController<AnalysisNavigationParams>(sync: true);
@@ -1664,6 +1695,10 @@
         expect(params, isAnalysisHighlightsParams);
         _onAnalysisHighlights.add(new AnalysisHighlightsParams.fromJson(decoder, 'params', params));
         break;
+      case "analysis.implemented":
+        expect(params, isAnalysisImplementedParams);
+        _onAnalysisImplemented.add(new AnalysisImplementedParams.fromJson(decoder, 'params', params));
+        break;
       case "analysis.invalidate":
         expect(params, isAnalysisInvalidateParams);
         _onAnalysisInvalidate.add(new AnalysisInvalidateParams.fromJson(decoder, 'params', params));
diff --git a/pkg/analysis_server/test/integration/integration_tests.dart b/pkg/analysis_server/test/integration/integration_tests.dart
index 08fb56d..ed2d62a 100644
--- a/pkg/analysis_server/test/integration/integration_tests.dart
+++ b/pkg/analysis_server/test/integration/integration_tests.dart
@@ -197,7 +197,7 @@
    * After every test, the server is stopped and [sourceDirectory] is deleted.
    */
   Future tearDown() {
-    return _shutdownIfNeeded().then((_) {
+    return shutdownIfNeeded().then((_) {
       sourceDirectory.deleteSync(recursive: true);
     });
   }
@@ -222,7 +222,7 @@
   /**
    * If [skipShutdown] is not set, shut down the server.
    */
-  Future _shutdownIfNeeded() {
+  Future shutdownIfNeeded() {
     if (skipShutdown) {
       return new Future.value();
     }
diff --git a/pkg/analysis_server/test/integration/protocol_matchers.dart b/pkg/analysis_server/test/integration/protocol_matchers.dart
index dfef91e..4d2bc54 100644
--- a/pkg/analysis_server/test/integration/protocol_matchers.dart
+++ b/pkg/analysis_server/test/integration/protocol_matchers.dart
@@ -398,6 +398,22 @@
   }));
 
 /**
+ * analysis.implemented params
+ *
+ * {
+ *   "file": FilePath
+ *   "classes": List<ImplementedClass>
+ *   "members": List<ImplementedMember>
+ * }
+ */
+final Matcher isAnalysisImplementedParams = new LazyMatcher(() => new MatchesJsonObject(
+  "analysis.implemented params", {
+    "file": isFilePath,
+    "classes": isListOf(isImplementedClass),
+    "members": isListOf(isImplementedMember)
+  }));
+
+/**
  * analysis.invalidate params
  *
  * {
@@ -1106,6 +1122,7 @@
  * enum {
  *   FOLDING
  *   HIGHLIGHTS
+ *   IMPLEMENTED
  *   INVALIDATE
  *   NAVIGATION
  *   OCCURRENCES
@@ -1116,6 +1133,7 @@
 final Matcher isAnalysisService = new MatchesEnum("AnalysisService", [
   "FOLDING",
   "HIGHLIGHTS",
+  "IMPLEMENTED",
   "INVALIDATE",
   "NAVIGATION",
   "OCCURRENCES",
@@ -1618,6 +1636,34 @@
   }));
 
 /**
+ * ImplementedClass
+ *
+ * {
+ *   "offset": int
+ *   "length": int
+ * }
+ */
+final Matcher isImplementedClass = new LazyMatcher(() => new MatchesJsonObject(
+  "ImplementedClass", {
+    "offset": isInt,
+    "length": isInt
+  }));
+
+/**
+ * ImplementedMember
+ *
+ * {
+ *   "offset": int
+ *   "length": int
+ * }
+ */
+final Matcher isImplementedMember = new LazyMatcher(() => new MatchesJsonObject(
+  "ImplementedMember", {
+    "offset": isInt,
+    "length": isInt
+  }));
+
+/**
  * LinkedEditGroup
  *
  * {
diff --git a/pkg/analysis_server/test/services/completion/completion_test_util.dart b/pkg/analysis_server/test/services/completion/completion_test_util.dart
index 7cfdffd..94d9058 100644
--- a/pkg/analysis_server/test/services/completion/completion_test_util.dart
+++ b/pkg/analysis_server/test/services/completion/completion_test_util.dart
@@ -52,7 +52,7 @@
   void addResolvedUnit(String file, String code) {
     Source source = addSource(file, code);
     CompilationUnit unit = resolveLibraryUnit(source);
-    index.indexUnit(context, unit);
+    index.index(context, unit);
   }
 
   void addTestSource(String content) {
@@ -518,7 +518,7 @@
       CompilationUnit unit =
           context.getResolvedCompilationUnit2(librarySource, librarySource);
       if (unit != null) {
-        index.indexUnit(context, unit);
+        index.index(context, unit);
       }
     }
 
@@ -529,7 +529,7 @@
       result.changeNotices.forEach((ChangeNotice notice) {
         CompilationUnit unit = notice.resolvedDartUnit;
         if (unit != null) {
-          index.indexUnit(context, unit);
+          index.index(context, unit);
         }
       });
 
@@ -4392,7 +4392,7 @@
       class A implements I {
         A(this.^) {}
         A.z() {}
-        var b; X _c;
+        var b; X _c; static sb;
         X get d => new A();get _e => new A();
         // no semicolon between completion point and next statement
         set s1(I x) {} set _s2(I x) {m(null);}
@@ -4406,6 +4406,7 @@
           relevance: DART_RELEVANCE_LOCAL_FIELD);
       assertSuggestInvocationField('_c', 'X',
           relevance: DART_RELEVANCE_LOCAL_FIELD);
+      assertNotSuggested('sb');
       assertNotSuggested('d');
       assertNotSuggested('_e');
       assertNotSuggested('f');
diff --git a/pkg/analysis_server/test/services/completion/imported_reference_contributor_test.dart b/pkg/analysis_server/test/services/completion/imported_reference_contributor_test.dart
index a539532..36525d2 100644
--- a/pkg/analysis_server/test/services/completion/imported_reference_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/imported_reference_contributor_test.dart
@@ -759,7 +759,7 @@
       result.changeNotices.forEach((ChangeNotice notice) {
         CompilationUnit unit = notice.resolvedDartUnit;
         if (unit != null) {
-          index.indexUnit(context2, unit);
+          index.index(context2, unit);
         }
       });
       result = context2.performAnalysisTask();
diff --git a/pkg/analysis_server/test/services/correction/fix_test.dart b/pkg/analysis_server/test/services/correction/fix_test.dart
index 393c2f3..e501b42 100644
--- a/pkg/analysis_server/test/services/correction/fix_test.dart
+++ b/pkg/analysis_server/test/services/correction/fix_test.dart
@@ -4173,6 +4173,84 @@
 ''');
   }
 
+  void test_undefinedMethod_parameterType_differentPrefixInTargetUnit() {
+    String code2 = r'''
+library test2;
+import 'test3.dart' as bbb;
+export 'test3.dart';
+class D {
+}
+''';
+    addSource('/test2.dart', code2);
+    addSource(
+        '/test3.dart',
+        r'''
+library test3;
+class E {}
+''');
+    resolveTestUnit('''
+library test;
+import 'test2.dart' as aaa;
+main(aaa.D d, aaa.E e) {
+  d.foo(e);
+}
+''');
+    AnalysisError error = _findErrorToFix();
+    fix = _assertHasFix(DartFixKind.CREATE_METHOD, error);
+    change = fix.change;
+    // apply to "test2.dart"
+    List<SourceFileEdit> fileEdits = change.edits;
+    expect(fileEdits, hasLength(1));
+    SourceFileEdit fileEdit = change.edits[0];
+    expect(fileEdit.file, '/test2.dart');
+    expect(
+        SourceEdit.applySequence(code2, fileEdit.edits),
+        r'''
+library test2;
+import 'test3.dart' as bbb;
+export 'test3.dart';
+class D {
+  void foo(bbb.E e) {
+  }
+}
+''');
+  }
+
+  void test_undefinedMethod_parameterType_inTargetUnit() {
+    String code2 = r'''
+library test2;
+class D {
+}
+class E {}
+''';
+    addSource('/test2.dart', code2);
+    resolveTestUnit('''
+library test;
+import 'test2.dart' as test2;
+main(test2.D d, test2.E e) {
+  d.foo(e);
+}
+''');
+    AnalysisError error = _findErrorToFix();
+    fix = _assertHasFix(DartFixKind.CREATE_METHOD, error);
+    change = fix.change;
+    // apply to "test2.dart"
+    List<SourceFileEdit> fileEdits = change.edits;
+    expect(fileEdits, hasLength(1));
+    SourceFileEdit fileEdit = change.edits[0];
+    expect(fileEdit.file, '/test2.dart');
+    expect(
+        SourceEdit.applySequence(code2, fileEdit.edits),
+        r'''
+library test2;
+class D {
+  void foo(E e) {
+  }
+}
+class E {}
+''');
+  }
+
   void test_undefinedMethod_useSimilar_ignoreOperators() {
     resolveTestUnit('''
 main(Object object) {
diff --git a/pkg/analysis_server/test/services/index/dart_index_contributor_test.dart b/pkg/analysis_server/test/services/index/dart_index_contributor_test.dart
index 022a7c9..bc9538b 100644
--- a/pkg/analysis_server/test/services/index/dart_index_contributor_test.dart
+++ b/pkg/analysis_server/test/services/index/dart_index_contributor_test.dart
@@ -4,13 +4,14 @@
 
 library test.services.src.index.dart_index_contributor;
 
-import 'package:analysis_server/analysis/index/index_core.dart';
+import 'package:analysis_server/analysis/index_core.dart';
 import 'package:analysis_server/src/services/index/index.dart';
 import 'package:analysis_server/src/services/index/index_contributor.dart';
 import 'package:analysis_server/src/services/index/index_store.dart';
 import 'package:analysis_server/src/services/index/indexable_element.dart';
 import 'package:analyzer/src/generated/ast.dart';
 import 'package:analyzer/src/generated/element.dart';
+import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 import 'package:typed_mock/typed_mock.dart';
@@ -24,6 +25,11 @@
   defineReflectiveTests(DartUnitContributorTest);
 }
 
+void indexDartUnit(
+    InternalIndexStore store, AnalysisContext context, CompilationUnit unit) {
+  new DartIndexContributor().contributeTo(store, context, unit);
+}
+
 /**
  * Returns `true` if the [actual] location the same properties as [expected].
  */
@@ -155,6 +161,84 @@
         IndexConstants.IS_READ_BY, _expectedLocation(mainElement, 'v in []'));
   }
 
+  void test_hasAncestor_ClassDeclaration() {
+    _indexTestUnit('''
+class A {}
+class B1 extends A {}
+class B2 implements A {}
+class C1 extends B1 {}
+class C2 extends B2 {}
+class C3 implements B1 {}
+class C4 implements B2 {}
+class M extends Object with A {}
+''');
+    // prepare elements
+    ClassElement classElementA = findElement("A");
+    ClassElement classElementB1 = findElement("B1");
+    ClassElement classElementB2 = findElement("B2");
+    ClassElement classElementC1 = findElement("C1");
+    ClassElement classElementC2 = findElement("C2");
+    ClassElement classElementC3 = findElement("C3");
+    ClassElement classElementC4 = findElement("C4");
+    ClassElement classElementM = findElement("M");
+    // verify
+    _assertRecordedRelationForElement(
+        classElementA,
+        IndexConstants.HAS_ANCESTOR,
+        _expectedLocation(classElementB1, 'B1 extends A'));
+    _assertRecordedRelationForElement(
+        classElementA,
+        IndexConstants.HAS_ANCESTOR,
+        _expectedLocation(classElementB2, 'B2 implements A'));
+    _assertRecordedRelationForElement(
+        classElementA,
+        IndexConstants.HAS_ANCESTOR,
+        _expectedLocation(classElementC1, 'C1 extends B1'));
+    _assertRecordedRelationForElement(
+        classElementA,
+        IndexConstants.HAS_ANCESTOR,
+        _expectedLocation(classElementC2, 'C2 extends B2'));
+    _assertRecordedRelationForElement(
+        classElementA,
+        IndexConstants.HAS_ANCESTOR,
+        _expectedLocation(classElementC3, 'C3 implements B1'));
+    _assertRecordedRelationForElement(
+        classElementA,
+        IndexConstants.HAS_ANCESTOR,
+        _expectedLocation(classElementC4, 'C4 implements B2'));
+    _assertRecordedRelationForElement(
+        classElementA,
+        IndexConstants.HAS_ANCESTOR,
+        _expectedLocation(classElementM, 'M extends Object with A'));
+  }
+
+  void test_hasAncestor_ClassTypeAlias() {
+    _indexTestUnit('''
+class A {}
+class B extends A {}
+class C1 = Object with A;
+class C2 = Object with B;
+''');
+    // prepare elements
+    ClassElement classElementA = findElement("A");
+    ClassElement classElementB = findElement("B");
+    ClassElement classElementC1 = findElement("C1");
+    ClassElement classElementC2 = findElement("C2");
+    // verify
+    _assertRecordedRelationForElement(
+        classElementA,
+        IndexConstants.HAS_ANCESTOR,
+        _expectedLocation(classElementC1, 'C1 = Object with A'));
+    _assertRecordedRelationForElement(
+        classElementA,
+        IndexConstants.HAS_ANCESTOR,
+        _expectedLocation(classElementC2, 'C2 = Object with B'));
+    _assertRecordedRelationForElement(
+        classElementB,
+        IndexConstants.HAS_ANCESTOR,
+        _expectedLocation(classElementC2, 'C2 = Object with B'));
+  }
+
   void test_IndexableName_field() {
     _indexTestUnit('''
 class A {
@@ -1496,7 +1580,7 @@
 
   void _assertDefinesTopLevelElement(Element element) {
     ExpectedLocation location = new ExpectedLocation(
-        element, element.nameOffset, element.name.length, false, true);
+        element, element.nameOffset, element.nameLength, false, true);
     _assertRecordedRelationForElement(
         testLibraryElement, IndexConstants.DEFINES, location);
     expect(recordedTopElements, contains(element));
diff --git a/pkg/analysis_server/test/services/index/local_index_test.dart b/pkg/analysis_server/test/services/index/local_index_test.dart
index 3435e63..dc2e92a 100644
--- a/pkg/analysis_server/test/services/index/local_index_test.dart
+++ b/pkg/analysis_server/test/services/index/local_index_test.dart
@@ -4,11 +4,11 @@
 
 library test.services.src.index.local_index;
 
+import 'package:analysis_server/src/services/index/index_contributor.dart';
 import 'package:analysis_server/src/services/index/local_index.dart';
 import 'package:analysis_server/src/services/index/local_memory_index.dart';
 import 'package:analyzer/src/generated/ast.dart';
 import 'package:analyzer/src/generated/element.dart';
-import 'package:analyzer/src/generated/html.dart';
 import 'package:analyzer/src/generated/source_io.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 import 'package:unittest/unittest.dart';
@@ -37,6 +37,7 @@
   void setUp() {
     super.setUp();
     index = createLocalMemoryIndex();
+    index.contributors = [new DartIndexContributor()];
   }
 
   void tearDown() {
@@ -52,27 +53,18 @@
     expect(_getTopElements(), isEmpty);
   }
 
-  void test_indexHtmlUnit_nullUnit() {
-    index.indexHtmlUnit(context, null);
-  }
-
-  void test_indexHtmlUnit_nullUnitElement() {
-    HtmlUnit unit = new HtmlUnit(null, [], null);
-    index.indexHtmlUnit(context, unit);
-  }
-
-  void test_indexUnit() {
+  void test_index() {
     _indexTest('main() {}');
     _assertElementNames(_getTopElements(), ['main']);
   }
 
-  void test_indexUnit_nullUnit() {
-    index.indexUnit(context, null);
+  void test_index_nullObject() {
+    index.index(context, null);
   }
 
-  void test_indexUnit_nullUnitElement() {
+  void test_index_nullUnitElement() {
     CompilationUnit unit = new CompilationUnit(null, null, [], [], null);
-    index.indexUnit(context, unit);
+    index.index(context, unit);
   }
 
   void test_removeContext() {
@@ -115,7 +107,7 @@
   Source _indexLibraryUnit(String path, String content) {
     Source source = addSource(path, content);
     CompilationUnit dartUnit = resolveLibraryUnit(source);
-    index.indexUnit(context, dartUnit);
+    index.index(context, dartUnit);
     return source;
   }
 
diff --git a/pkg/analysis_server/test/services/index/store/codec_test.dart b/pkg/analysis_server/test/services/index/store/codec_test.dart
index 62e86d5..43dbe33 100644
--- a/pkg/analysis_server/test/services/index/store/codec_test.dart
+++ b/pkg/analysis_server/test/services/index/store/codec_test.dart
@@ -4,7 +4,7 @@
 
 library test.services.src.index.store.codec;
 
-import 'package:analysis_server/analysis/index/index_core.dart';
+import 'package:analysis_server/analysis/index_core.dart';
 import 'package:analysis_server/src/services/index/index.dart';
 import 'package:analysis_server/src/services/index/indexable_element.dart';
 import 'package:analysis_server/src/services/index/store/codec.dart';
diff --git a/pkg/analysis_server/test/services/index/store/split_store_test.dart b/pkg/analysis_server/test/services/index/store/split_store_test.dart
index f52556c..dc4a262 100644
--- a/pkg/analysis_server/test/services/index/store/split_store_test.dart
+++ b/pkg/analysis_server/test/services/index/store/split_store_test.dart
@@ -6,7 +6,7 @@
 
 import 'dart:async';
 
-import 'package:analysis_server/analysis/index/index_core.dart';
+import 'package:analysis_server/analysis/index_core.dart';
 import 'package:analysis_server/src/services/index/index.dart';
 import 'package:analysis_server/src/services/index/indexable_element.dart';
 import 'package:analysis_server/src/services/index/store/codec.dart';
@@ -521,8 +521,8 @@
     indexableD = new IndexableElement(elementD);
 
     nodeManager.elementCodec = elementCodec;
-    store = new SplitIndexStore(nodeManager,
-        <IndexObjectManager>[new DartUnitIndexObjectManager()]);
+    store = new SplitIndexStore(
+        nodeManager, <IndexObjectManager>[new DartUnitIndexObjectManager()]);
     when(elementCodec.encode1(indexableA)).thenReturn(11);
     when(elementCodec.encode2(indexableA)).thenReturn(12);
     when(elementCodec.encode3(indexableA)).thenReturn(13);
diff --git a/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart b/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart
index 81d13c0..2def79c 100644
--- a/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart
+++ b/pkg/analysis_server/test/services/refactoring/abstract_refactoring.dart
@@ -148,13 +148,13 @@
 
   void indexTestUnit(String code) {
     resolveTestUnit(code);
-    index.indexUnit(context, testUnit);
+    index.index(context, testUnit);
   }
 
   void indexUnit(String file, String code) {
     Source source = addSource(file, code);
     CompilationUnit unit = resolveLibraryUnit(source);
-    index.indexUnit(context, unit);
+    index.index(context, unit);
   }
 
   void setUp() {
diff --git a/pkg/analysis_server/test/services/refactoring/extract_method_test.dart b/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
index dfa2b23..b257699 100644
--- a/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/extract_method_test.dart
@@ -1068,6 +1068,24 @@
     expect(refactoring.returnType, 'int');
   }
 
+  test_returnType_mixInterfaceFunction() async {
+    indexTestUnit('''
+main() {
+// start
+  if (true) {
+    return 1;
+  } else {
+    return () {};
+  }
+// end
+}
+''');
+    _createRefactoringForStartEndComments();
+    // do check
+    await refactoring.checkInitialConditions();
+    expect(refactoring.returnType, 'Object');
+  }
+
   test_returnType_statements() async {
     indexTestUnit('''
 main() {
@@ -2581,6 +2599,35 @@
 ''');
   }
 
+  test_statements_return_multiple_interfaceFunction() {
+    indexTestUnit('''
+main(bool b) {
+// start
+  if (b) {
+    return 1;
+  }
+  return () {};
+// end
+}
+''');
+    _createRefactoringForStartEndComments();
+    // apply refactoring
+    return _assertSuccessfulRefactoring('''
+main(bool b) {
+// start
+  return res(b);
+// end
+}
+
+Object res(bool b) {
+  if (b) {
+    return 1;
+  }
+  return () {};
+}
+''');
+  }
+
   test_statements_return_multiple_sameElementDifferentTypeArgs() {
     indexTestUnit('''
 main(bool b) {
diff --git a/pkg/analysis_server/test/services/refactoring/move_file_test.dart b/pkg/analysis_server/test/services/refactoring/move_file_test.dart
index 859b8fa..2de53d8 100644
--- a/pkg/analysis_server/test/services/refactoring/move_file_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/move_file_test.dart
@@ -291,7 +291,7 @@
       }
       for (ChangeNotice notice in result.changeNotices) {
         if (notice.source.fullName.startsWith('/project/')) {
-          index.indexUnit(context, notice.resolvedDartUnit);
+          index.index(context, notice.resolvedDartUnit);
         }
       }
     }
diff --git a/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart b/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart
index 51b7402..3f0ee70 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart
@@ -241,6 +241,21 @@
         expectedContextSearch: 'newName() {} // marker');
   }
 
+  test_checkInitialConditions_inSDK() async {
+    indexTestUnit('''
+main() {
+  'abc'.toUpperCase();
+}
+''');
+    createRenameRefactoringAtString('toUpperCase()');
+    // check status
+    refactoring.newName = 'NewName';
+    RefactoringStatus status = await refactoring.checkInitialConditions();
+    assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
+        expectedMessage:
+            "The method 'String.toUpperCase' is defined in the SDK, so cannot be renamed.");
+  }
+
   test_checkInitialConditions_operator() async {
     indexTestUnit('''
 class A {
diff --git a/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart b/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
index 03b1693..2bc8dc0 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_constructor_test.dart
@@ -55,6 +55,21 @@
         expectedContextSearch: 'newName() {} // existing');
   }
 
+  test_checkInitialConditions_inSDK() async {
+    indexTestUnit('''
+main() {
+  new String.fromCharCodes([]);
+}
+''');
+    createRenameRefactoringAtString('fromCharCodes(');
+    // check status
+    refactoring.newName = 'newName';
+    RefactoringStatus status = await refactoring.checkInitialConditions();
+    assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
+        expectedMessage:
+            "The constructor 'String.fromCharCodes' is defined in the SDK, so cannot be renamed.");
+  }
+
   test_checkNewName() {
     indexTestUnit('''
 class A {
diff --git a/pkg/analysis_server/test/services/refactoring/rename_library_test.dart b/pkg/analysis_server/test/services/refactoring/rename_library_test.dart
index 3a16a14..b08132d 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_library_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_library_test.dart
@@ -52,7 +52,36 @@
 library my.app;
 part 'part.dart';
 ''');
-    index.indexUnit(
+    index.index(
+        context, context.resolveCompilationUnit2(unitSource, testSource));
+    // configure refactoring
+    _createRenameRefactoring();
+    expect(refactoring.refactoringName, 'Rename Library');
+    expect(refactoring.elementKindName, 'library');
+    refactoring.newName = 'the.new.name';
+    // validate change
+    await assertSuccessfulRefactoring('''
+library the.new.name;
+part 'part.dart';
+''');
+    assertFileChangeResult(
+        '/part.dart',
+        '''
+part of the.new.name;
+''');
+  }
+
+  test_createChange_hasWhitespaces() async {
+    Source unitSource = addSource(
+        '/part.dart',
+        '''
+part of my .  app;
+''');
+    indexTestUnit('''
+library my    . app;
+part 'part.dart';
+''');
+    index.index(
         context, context.resolveCompilationUnit2(unitSource, testSource));
     // configure refactoring
     _createRenameRefactoring();
diff --git a/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart b/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
index 82df4e8..4c799d1 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
@@ -224,6 +224,21 @@
     assertRefactoringStatusOK(status);
   }
 
+  test_checkInitialConditions_inSDK() async {
+    indexTestUnit('''
+main() {
+  String s;
+}
+''');
+    createRenameRefactoringAtString('String s');
+    // check status
+    refactoring.newName = 'NewName';
+    RefactoringStatus status = await refactoring.checkInitialConditions();
+    assertRefactoringStatus(status, RefactoringProblemSeverity.FATAL,
+        expectedMessage:
+            "The class 'String' is defined in the SDK, so cannot be renamed.");
+  }
+
   test_checkNewName_ClassElement() {
     indexTestUnit('''
 class Test {}
diff --git a/pkg/analysis_server/test/services/search/hierarchy_test.dart b/pkg/analysis_server/test/services/search/hierarchy_test.dart
index e1d0bfb..720dc9a 100644
--- a/pkg/analysis_server/test/services/search/hierarchy_test.dart
+++ b/pkg/analysis_server/test/services/search/hierarchy_test.dart
@@ -316,6 +316,6 @@
 
   void _indexTestUnit(String code) {
     resolveTestUnit(code);
-    index.indexUnit(context, testUnit);
+    index.index(context, testUnit);
   }
 }
diff --git a/pkg/analysis_server/test/services/search/search_engine_test.dart b/pkg/analysis_server/test/services/search/search_engine_test.dart
index 5e1c0e6..1453d46 100644
--- a/pkg/analysis_server/test/services/search/search_engine_test.dart
+++ b/pkg/analysis_server/test/services/search/search_engine_test.dart
@@ -77,6 +77,27 @@
     searchEngine = new SearchEngineImpl(index);
   }
 
+  Future test_searchAllSubtypes() {
+    _indexTestUnit('''
+class T {}
+class A extends T {}
+class B extends A {}
+class C implements B {}
+''');
+    ClassElement element = findElement('T');
+    ClassElement elementA = findElement('A');
+    ClassElement elementB = findElement('B');
+    ClassElement elementC = findElement('C');
+    var expected = [
+      _expectId(elementA, MatchKind.DECLARATION, 'A extends T'),
+      _expectId(elementB, MatchKind.DECLARATION, 'B extends A'),
+      _expectId(elementC, MatchKind.DECLARATION, 'C implements B')
+    ];
+    return searchEngine.searchAllSubtypes(element).then((matches) {
+      _assertMatches(matches, expected);
+    });
+  }
+
   Future test_searchElementDeclarations() {
     _indexTestUnit('''
 class A {
@@ -357,8 +378,8 @@
     LibraryElement element = testLibraryElement;
     CompilationUnitElement elementA = element.parts[0];
     CompilationUnitElement elementB = element.parts[1];
-    index.indexUnit(context, elementA.computeNode());
-    index.indexUnit(context, elementB.computeNode());
+    index.index(context, elementA.computeNode());
+    index.index(context, elementB.computeNode());
     var expected = [
       new ExpectedMatch(elementA, MatchKind.REFERENCE,
           codeA.indexOf('lib; // A'), 'lib'.length),
@@ -628,7 +649,7 @@
 
   void _indexTestUnit(String code) {
     resolveTestUnit(code);
-    index.indexUnit(context, testUnit);
+    index.index(context, testUnit);
   }
 
   Future _verifyReferences(
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/AnalysisService.java b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisService.java
index ca3b8e9..02bd9f6 100644
--- a/pkg/analysis_server/tool/spec/generated/java/types/AnalysisService.java
+++ b/pkg/analysis_server/tool/spec/generated/java/types/AnalysisService.java
@@ -28,6 +28,8 @@
 
   public static final String HIGHLIGHTS = "HIGHLIGHTS";
 
+  public static final String IMPLEMENTED = "IMPLEMENTED";
+
   /**
    * This service is not currently implemented and will become a GeneralAnalysisService in a future
    * release.
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ImplementedClass.java b/pkg/analysis_server/tool/spec/generated/java/types/ImplementedClass.java
new file mode 100644
index 0000000..dbe7096
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ImplementedClass.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.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.eclipse.org/legal/epl-v10.html
+ *
+ * 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.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package org.dartlang.analysis.server.protocol;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * A description of a class that is implemented or extended.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class ImplementedClass {
+
+  public static final ImplementedClass[] EMPTY_ARRAY = new ImplementedClass[0];
+
+  public static final List<ImplementedClass> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The offset of the name of the implemented class.
+   */
+  private final int offset;
+
+  /**
+   * The length of the name of the implemented class.
+   */
+  private final int length;
+
+  /**
+   * Constructor for {@link ImplementedClass}.
+   */
+  public ImplementedClass(int offset, int length) {
+    this.offset = offset;
+    this.length = length;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof ImplementedClass) {
+      ImplementedClass other = (ImplementedClass) obj;
+      return
+        other.offset == offset &&
+        other.length == length;
+    }
+    return false;
+  }
+
+  public static ImplementedClass fromJson(JsonObject jsonObject) {
+    int offset = jsonObject.get("offset").getAsInt();
+    int length = jsonObject.get("length").getAsInt();
+    return new ImplementedClass(offset, length);
+  }
+
+  public static List<ImplementedClass> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<ImplementedClass> list = new ArrayList<ImplementedClass>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * The length of the name of the implemented class.
+   */
+  public int getLength() {
+    return length;
+  }
+
+  /**
+   * The offset of the name of the implemented class.
+   */
+  public int getOffset() {
+    return offset;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(offset);
+    builder.append(length);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("offset", offset);
+    jsonObject.addProperty("length", length);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("offset=");
+    builder.append(offset + ", ");
+    builder.append("length=");
+    builder.append(length);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/generated/java/types/ImplementedMember.java b/pkg/analysis_server/tool/spec/generated/java/types/ImplementedMember.java
new file mode 100644
index 0000000..941d1a8
--- /dev/null
+++ b/pkg/analysis_server/tool/spec/generated/java/types/ImplementedMember.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (c) 2014, the Dart project authors.
+ *
+ * Licensed under the Eclipse Public License v1.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.eclipse.org/legal/epl-v10.html
+ *
+ * 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.
+ *
+ * This file has been automatically generated.  Please do not edit it manually.
+ * To regenerate the file, use the script "pkg/analysis_server/tool/spec/generate_files".
+ */
+package org.dartlang.analysis.server.protocol;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import com.google.common.collect.Lists;
+import com.google.dart.server.utilities.general.JsonUtilities;
+import com.google.dart.server.utilities.general.ObjectUtilities;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonPrimitive;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+import java.util.ArrayList;
+import java.util.Iterator;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * A description of a class member that is implemented or overridden.
+ *
+ * @coverage dart.server.generated.types
+ */
+@SuppressWarnings("unused")
+public class ImplementedMember {
+
+  public static final ImplementedMember[] EMPTY_ARRAY = new ImplementedMember[0];
+
+  public static final List<ImplementedMember> EMPTY_LIST = Lists.newArrayList();
+
+  /**
+   * The offset of the name of the implemented member.
+   */
+  private final int offset;
+
+  /**
+   * The length of the name of the implemented member.
+   */
+  private final int length;
+
+  /**
+   * Constructor for {@link ImplementedMember}.
+   */
+  public ImplementedMember(int offset, int length) {
+    this.offset = offset;
+    this.length = length;
+  }
+
+  @Override
+  public boolean equals(Object obj) {
+    if (obj instanceof ImplementedMember) {
+      ImplementedMember other = (ImplementedMember) obj;
+      return
+        other.offset == offset &&
+        other.length == length;
+    }
+    return false;
+  }
+
+  public static ImplementedMember fromJson(JsonObject jsonObject) {
+    int offset = jsonObject.get("offset").getAsInt();
+    int length = jsonObject.get("length").getAsInt();
+    return new ImplementedMember(offset, length);
+  }
+
+  public static List<ImplementedMember> fromJsonArray(JsonArray jsonArray) {
+    if (jsonArray == null) {
+      return EMPTY_LIST;
+    }
+    ArrayList<ImplementedMember> list = new ArrayList<ImplementedMember>(jsonArray.size());
+    Iterator<JsonElement> iterator = jsonArray.iterator();
+    while (iterator.hasNext()) {
+      list.add(fromJson(iterator.next().getAsJsonObject()));
+    }
+    return list;
+  }
+
+  /**
+   * The length of the name of the implemented member.
+   */
+  public int getLength() {
+    return length;
+  }
+
+  /**
+   * The offset of the name of the implemented member.
+   */
+  public int getOffset() {
+    return offset;
+  }
+
+  @Override
+  public int hashCode() {
+    HashCodeBuilder builder = new HashCodeBuilder();
+    builder.append(offset);
+    builder.append(length);
+    return builder.toHashCode();
+  }
+
+  public JsonObject toJson() {
+    JsonObject jsonObject = new JsonObject();
+    jsonObject.addProperty("offset", offset);
+    jsonObject.addProperty("length", length);
+    return jsonObject;
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder builder = new StringBuilder();
+    builder.append("[");
+    builder.append("offset=");
+    builder.append(offset + ", ");
+    builder.append("length=");
+    builder.append(length);
+    builder.append("]");
+    return builder.toString();
+  }
+
+}
diff --git a/pkg/analysis_server/tool/spec/spec_input.html b/pkg/analysis_server/tool/spec/spec_input.html
index 7795bdc..c913011 100644
--- a/pkg/analysis_server/tool/spec/spec_input.html
+++ b/pkg/analysis_server/tool/spec/spec_input.html
@@ -879,6 +879,38 @@
           </field>
         </params>
       </notification>
+      <notification event="implemented">
+        <p>
+          Reports the classes that are implemented or extended and
+          class members that are implemented or overridden in a file.
+        </p>
+        <p>
+          This notification is not subscribed to by default. Clients
+          can subscribe by including the value <tt>"IMPLEMENTED"</tt> in
+          the list of services passed in an analysis.setSubscriptions
+          request.
+        </p>
+        <params>
+          <field name="file">
+            <ref>FilePath</ref>
+            <p>
+              The file with which the implementations are associated.
+            </p>
+          </field>
+          <field name="classes">
+            <list><ref>ImplementedClass</ref></list>
+            <p>
+              The classes defined in the file that are implemented or extended.
+            </p>
+          </field>
+          <field name="members">
+            <list><ref>ImplementedMember</ref></list>
+            <p>
+              The member defined in the file that are implemented or overridden.
+            </p>
+          </field>
+        </params>
+      </notification>
       <notification event="invalidate">
         <p>
           Reports that the navigation information associated with a region of a
@@ -2102,6 +2134,7 @@
         <enum>
           <value><code>FOLDING</code></value>
           <value><code>HIGHLIGHTS</code></value>
+          <value><code>IMPLEMENTED</code></value>
           <value>
             <code>INVALIDATE</code>
             <p>
@@ -2926,6 +2959,44 @@
           </field>
         </object>
       </type>
+      <type name="ImplementedClass">
+        <p>
+          A description of a class that is implemented or extended.
+        </p>
+        <object>
+          <field name="offset">
+            <ref>int</ref>
+            <p>
+              The offset of the name of the implemented class.
+            </p>
+          </field>
+          <field name="length">
+            <ref>int</ref>
+            <p>
+              The length of the name of the implemented class.
+            </p>
+          </field>
+        </object>
+      </type>
+      <type name="ImplementedMember">
+        <p>
+          A description of a class member that is implemented or overridden.
+        </p>
+        <object>
+          <field name="offset">
+            <ref>int</ref>
+            <p>
+              The offset of the name of the implemented member.
+            </p>
+          </field>
+          <field name="length">
+            <ref>int</ref>
+            <p>
+              The length of the name of the implemented member.
+            </p>
+          </field>
+        </object>
+      </type>
       <type name="LinkedEditGroup">
         <p>
           A collection of positions that should be linked (edited
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index 2f46b64..ec9687e 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -1,3 +1,12 @@
+## 0.26.1+6
+* Provisional (internal) plugin manifest parsing.
+
+## 0.26.1+5
+* Plugin configuration `ErrorHandler` typedef API fix.
+
+## 0.26.1+4
+* Provisional (internal) support for plugin configuration via `.analysis_options`.
+
 ## 0.26.1+2
 
 * Extension point for WorkManagerFactory(s).
diff --git a/pkg/analyzer/lib/source/analysis_options_provider.dart b/pkg/analyzer/lib/source/analysis_options_provider.dart
index a3ac86b..1c05375 100644
--- a/pkg/analyzer/lib/source/analysis_options_provider.dart
+++ b/pkg/analyzer/lib/source/analysis_options_provider.dart
@@ -35,9 +35,11 @@
       return options;
     }
     var doc = loadYaml(optionsSource);
-    if (doc is! YamlMap) {
+    if ((doc != null) && (doc is! YamlMap)) {
       throw new Exception(
-          'Bad options file format (expected map, got ${doc.runtimeType})');
+          'Bad options file format (expected map, got ${doc.runtimeType})\n'
+          'contents of options file:\n'
+          '$optionsSource\n');
     }
     if (doc is YamlMap) {
       doc.forEach((k, v) {
diff --git a/pkg/analyzer/lib/src/context/context.dart b/pkg/analyzer/lib/src/context/context.dart
index 9b8081e..b39f429 100644
--- a/pkg/analyzer/lib/src/context/context.dart
+++ b/pkg/analyzer/lib/src/context/context.dart
@@ -1199,10 +1199,6 @@
   @override
   CompilationUnit resolveCompilationUnit2(
       Source unitSource, Source librarySource) {
-    if (!AnalysisEngine.isDartFileName(unitSource.shortName) ||
-        !AnalysisEngine.isDartFileName(librarySource.shortName)) {
-      return null;
-    }
     return computeResult(
         new LibrarySpecificUnit(librarySource, unitSource), RESOLVED_UNIT);
   }
@@ -1772,7 +1768,9 @@
           }
           return;
         }
-      } catch (e) {}
+      } catch (e) {
+        entry.modificationTime = -1;
+      }
     }
     // We need to invalidate the cache.
     {
diff --git a/pkg/analyzer/lib/src/generated/ast.dart b/pkg/analyzer/lib/src/generated/ast.dart
index 0e879a8..4b83206 100644
--- a/pkg/analyzer/lib/src/generated/ast.dart
+++ b/pkg/analyzer/lib/src/generated/ast.dart
@@ -5117,47 +5117,81 @@
   }
 }
 
-/**
- * An object that can be used to evaluate constant expressions to produce their
- * compile-time value. According to the Dart Language Specification:
- * <blockquote>
- * A constant expression is one of the following:
- * * A literal number.
- * * A literal boolean.
- * * A literal string where any interpolated expression is a compile-time
- *   constant that evaluates to a numeric, string or boolean value or to `null`.
- * * `null`.
- * * A reference to a static constant variable.
- * * An identifier expression that denotes a constant variable, a class or a
- *   type parameter.
- * * A constant constructor invocation.
- * * A constant list literal.
- * * A constant map literal.
- * * A simple or qualified identifier denoting a top-level function or a static
- *   method.
- * * A parenthesized expression `(e)` where `e` is a constant expression.
- * * An expression of one of the forms `identical(e1, e2)`, `e1 == e2`,
- *   `e1 != e2` where `e1` and `e2` are constant expressions that evaluate to a
- *   numeric, string or boolean value or to `null`.
- * * An expression of one of the forms `!e`, `e1 && e2` or `e1 || e2`, where
- *   `e`, `e1` and `e2` are constant expressions that evaluate to a boolean
- *   value or to `null`.
- * * An expression of one of the forms `~e`, `e1 ^ e2`, `e1 & e2`, `e1 | e2`,
- *   `e1 >> e2` or `e1 << e2`, where `e`, `e1` and `e2` are constant expressions
- *   that evaluate to an integer value or to `null`.
- * * An expression of one of the forms `-e`, `e1 + e2`, `e1 - e2`, `e1 * e2`,
- *   `e1 / e2`, `e1 ~/ e2`, `e1 > e2`, `e1 < e2`, `e1 >= e2`, `e1 <= e2` or
- *   `e1 % e2`, where `e`, `e1` and `e2` are constant expressions that evaluate
- *   to a numeric value or to `null`.
- * </blockquote>
- * The values returned by instances of this class are therefore `null` and
- * instances of the classes `Boolean`, `BigInteger`, `Double`, `String`, and
- * `DartObject`.
- *
- * In addition, this class defines several values that can be returned to
- * indicate various conditions encountered during evaluation. These are
- * documented with the static fields that define those values.
- */
+/// Instances of the class [ConstantEvaluator] evaluate constant expressions to
+/// produce their compile-time value.
+///
+/// According to the Dart Language Specification:
+///
+/// > A constant expression is one of the following:
+/// >
+/// > * A literal number.
+/// > * A literal boolean.
+/// > * A literal string where any interpolated expression is a compile-time
+/// >   constant that evaluates to a numeric, string or boolean value or to
+/// >   **null**.
+/// > * A literal symbol.
+/// > * **null**.
+/// > * A qualified reference to a static constant variable.
+/// > * An identifier expression that denotes a constant variable, class or type
+/// >   alias.
+/// > * A constant constructor invocation.
+/// > * A constant list literal.
+/// > * A constant map literal.
+/// > * A simple or qualified identifier denoting a top-level function or a
+/// >   static method.
+/// > * A parenthesized expression _(e)_ where _e_ is a constant expression.
+/// > * <span>
+/// >   An expression of the form <i>identical(e<sub>1</sub>, e<sub>2</sub>)</i>
+/// >   where <i>e<sub>1</sub></i> and <i>e<sub>2</sub></i> are constant
+/// >   expressions and <i>identical()</i> is statically bound to the predefined
+/// >   dart function <i>identical()</i> discussed above.
+/// >   </span>
+/// > * <span>
+/// >   An expression of one of the forms <i>e<sub>1</sub> == e<sub>2</sub></i>
+/// >   or <i>e<sub>1</sub> != e<sub>2</sub></i> where <i>e<sub>1</sub></i> and
+/// >   <i>e<sub>2</sub></i> are constant expressions that evaluate to a
+/// >   numeric, string or boolean value.
+/// >   </span>
+/// > * <span>
+/// >   An expression of one of the forms <i>!e</i>, <i>e<sub>1</sub> &amp;&amp;
+/// >   e<sub>2</sub></i> or <i>e<sub>1</sub> || e<sub>2</sub></i>, where
+/// >   <i>e</i>, <i>e<sub>1</sub></i> and <i>e<sub>2</sub></i> are constant
+/// >   expressions that evaluate to a boolean value.
+/// >   </span>
+/// > * <span>
+/// >   An expression of one of the forms <i>~e</i>, <i>e<sub>1</sub> ^
+/// >   e<sub>2</sub></i>, <i>e<sub>1</sub> &amp; e<sub>2</sub></i>,
+/// >   <i>e<sub>1</sub> | e<sub>2</sub></i>, <i>e<sub>1</sub> &gt;&gt;
+/// >   e<sub>2</sub></i> or <i>e<sub>1</sub> &lt;&lt; e<sub>2</sub></i>, where
+/// >   <i>e</i>, <i>e<sub>1</sub></i> and <i>e<sub>2</sub></i> are constant
+/// >   expressions that evaluate to an integer value or to <b>null</b>.
+/// >   </span>
+/// > * <span>
+/// >   An expression of one of the forms <i>-e</i>, <i>e<sub>1</sub> +
+/// >   e<sub>2</sub></i>, <i>e<sub>1</sub> -e<sub>2</sub></i>,
+/// >   <i>e<sub>1</sub> * e<sub>2</sub></i>, <i>e<sub>1</sub> /
+/// >   e<sub>2</sub></i>, <i>e<sub>1</sub> ~/ e<sub>2</sub></i>,
+/// >   <i>e<sub>1</sub> &gt; e<sub>2</sub></i>, <i>e<sub>1</sub> &lt;
+/// >   e<sub>2</sub></i>, <i>e<sub>1</sub> &gt;= e<sub>2</sub></i>,
+/// >   <i>e<sub>1</sub> &lt;= e<sub>2</sub></i> or <i>e<sub>1</sub> %
+/// >   e<sub>2</sub></i>, where <i>e</i>, <i>e<sub>1</sub></i> and
+/// >   <i>e<sub>2</sub></i> are constant expressions that evaluate to a numeric
+/// >   value or to <b>null</b>.
+/// >   </span>
+/// > * <span>
+/// >   An expression of the form <i>e<sub>1</sub> ? e<sub>2</sub> :
+/// >   e<sub>3</sub></i> where <i>e<sub>1</sub></i>, <i>e<sub>2</sub></i> and
+/// >   <i>e<sub>3</sub></i> are constant expressions, and <i>e<sub>1</sub></i>
+/// >   evaluates to a boolean value.
+/// >   </span>
+///
+/// The values returned by instances of this class are therefore `null` and
+/// instances of the classes `Boolean`, `BigInteger`, `Double`, `String`, and
+/// `DartObject`.
+///
+/// In addition, this class defines several values that can be returned to
+/// indicate various conditions encountered during evaluation. These are
+/// documented with the static fields that define those values.
 class ConstantEvaluator extends GeneralizingAstVisitor<Object> {
   /**
    * The value returned for expressions (or non-expression nodes) that are not
@@ -6475,25 +6509,6 @@
     ElementLocator_ElementMapper mapper = new ElementLocator_ElementMapper();
     return node.accept(mapper);
   }
-
-  /**
-   * Return the element associated with the given [node], or `null` if there is
-   * no element associated with the node.
-   */
-  static Element locateWithOffset(AstNode node, int offset) {
-    // TODO(brianwilkerson) 'offset' is not used. Figure out what's going on:
-    // whether there's a bug or whether this method is unnecessary.
-    if (node == null) {
-      return null;
-    }
-    // try to get Element from node
-    Element nodeElement = locate(node);
-    if (nodeElement != null) {
-      return nodeElement;
-    }
-    // no Element
-    return null;
-  }
 }
 
 /**
@@ -6583,6 +6598,9 @@
       node.methodName.bestElement;
 
   @override
+  Element visitPartOfDirective(PartOfDirective node) => node.element;
+
+  @override
   Element visitPostfixExpression(PostfixExpression node) => node.bestElement;
 
   @override
diff --git a/pkg/analyzer/lib/src/generated/constant.dart b/pkg/analyzer/lib/src/generated/constant.dart
index 117b263..0f4c0f6 100644
--- a/pkg/analyzer/lib/src/generated/constant.dart
+++ b/pkg/analyzer/lib/src/generated/constant.dart
@@ -1085,62 +1085,81 @@
   void beforeGetParameterDefault(ParameterElement parameter) {}
 }
 
-/**
- * Instances of the class `ConstantEvaluator` evaluate constant expressions to
- * produce their compile-time value. According to the Dart Language
- * Specification:
- * <blockquote>
- * A constant expression is one of the following:
- * * A literal number.
- * * A literal boolean.
- * * A literal string where any interpolated expression is a compile-time
- *   constant that evaluates to a numeric, string or boolean value or to
- *   <b>null</b>.
- * * A literal symbol.
- * * <b>null</b>.
- * * A qualified reference to a static constant variable.
- * * An identifier expression that denotes a constant variable, class or type
- *   alias.
- * * A constant constructor invocation.
- * * A constant list literal.
- * * A constant map literal.
- * * A simple or qualified identifier denoting a top-level function or a static
- *   method.
- * * A parenthesized expression <i>(e)</i> where <i>e</i> is a constant
- *   expression.
- * * An expression of the form <i>identical(e<sub>1</sub>, e<sub>2</sub>)</i>
- *   where <i>e<sub>1</sub></i> and <i>e<sub>2</sub></i> are constant
- *   expressions and <i>identical()</i> is statically bound to the predefined
- *   dart function <i>identical()</i> discussed above.
- * * An expression of one of the forms <i>e<sub>1</sub> == e<sub>2</sub></i> or
- *   <i>e<sub>1</sub> != e<sub>2</sub></i> where <i>e<sub>1</sub></i> and
- *   <i>e<sub>2</sub></i> are constant expressions that evaluate to a numeric,
- *   string or boolean value.
- * * An expression of one of the forms <i>!e</i>, <i>e<sub>1</sub> &amp;&amp;
- *   e<sub>2</sub></i> or <i>e<sub>1</sub> || e<sub>2</sub></i>, where <i>e</i>,
- *   <i>e1</sub></i> and <i>e2</sub></i> are constant expressions that evaluate
- *   to a boolean value.
- * * An expression of one of the forms <i>~e</i>, <i>e<sub>1</sub> ^
- *   e<sub>2</sub></i>, <i>e<sub>1</sub> &amp; e<sub>2</sub></i>,
- *   <i>e<sub>1</sub> | e<sub>2</sub></i>, <i>e<sub>1</sub> &gt;&gt;
- *   e<sub>2</sub></i> or <i>e<sub>1</sub> &lt;&lt; e<sub>2</sub></i>, where
- *   <i>e</i>, <i>e<sub>1</sub></i> and <i>e<sub>2</sub></i> are constant
- *   expressions that evaluate to an integer value or to <b>null</b>.
- * * An expression of one of the forms <i>-e</i>, <i>e<sub>1</sub> +
- *   e<sub>2</sub></i>, <i>e<sub>1</sub> -e<sub>2</sub></i>, <i>e<sub>1</sub> *
- *   e<sub>2</sub></i>, <i>e<sub>1</sub> / e<sub>2</sub></i>, <i>e<sub>1</sub>
- *   ~/ e<sub>2</sub></i>, <i>e<sub>1</sub> &gt; e<sub>2</sub></i>,
- *   <i>e<sub>1</sub> &lt; e<sub>2</sub></i>, <i>e<sub>1</sub> &gt;=
- *   e<sub>2</sub></i>, <i>e<sub>1</sub> &lt;= e<sub>2</sub></i> or
- *   <i>e<sub>1</sub> % e<sub>2</sub></i>, where <i>e</i>, <i>e<sub>1</sub></i>
- *   and <i>e<sub>2</sub></i> are constant expressions that evaluate to a
- *   numeric value or to <b>null</b>.
- * * An expression of the form <i>e<sub>1</sub> ? e<sub>2</sub> :
- *   e<sub>3</sub></i> where <i>e<sub>1</sub></i>, <i>e<sub>2</sub></i> and
- *   <i>e<sub>3</sub></i> are constant expressions, and <i>e<sub>1</sub></i>
- *   evaluates to a boolean value.
- * </blockquote>
- */
+/// Instances of the class [ConstantEvaluator] evaluate constant expressions to
+/// produce their compile-time value.
+///
+/// According to the Dart Language Specification:
+///
+/// > A constant expression is one of the following:
+/// >
+/// > * A literal number.
+/// > * A literal boolean.
+/// > * A literal string where any interpolated expression is a compile-time
+/// >   constant that evaluates to a numeric, string or boolean value or to
+/// >   **null**.
+/// > * A literal symbol.
+/// > * **null**.
+/// > * A qualified reference to a static constant variable.
+/// > * An identifier expression that denotes a constant variable, class or type
+/// >   alias.
+/// > * A constant constructor invocation.
+/// > * A constant list literal.
+/// > * A constant map literal.
+/// > * A simple or qualified identifier denoting a top-level function or a
+/// >   static method.
+/// > * A parenthesized expression _(e)_ where _e_ is a constant expression.
+/// > * <span>
+/// >   An expression of the form <i>identical(e<sub>1</sub>, e<sub>2</sub>)</i>
+/// >   where <i>e<sub>1</sub></i> and <i>e<sub>2</sub></i> are constant
+/// >   expressions and <i>identical()</i> is statically bound to the predefined
+/// >   dart function <i>identical()</i> discussed above.
+/// >   </span>
+/// > * <span>
+/// >   An expression of one of the forms <i>e<sub>1</sub> == e<sub>2</sub></i>
+/// >   or <i>e<sub>1</sub> != e<sub>2</sub></i> where <i>e<sub>1</sub></i> and
+/// >   <i>e<sub>2</sub></i> are constant expressions that evaluate to a
+/// >   numeric, string or boolean value.
+/// >   </span>
+/// > * <span>
+/// >   An expression of one of the forms <i>!e</i>, <i>e<sub>1</sub> &amp;&amp;
+/// >   e<sub>2</sub></i> or <i>e<sub>1</sub> || e<sub>2</sub></i>, where
+/// >   <i>e</i>, <i>e<sub>1</sub></i> and <i>e<sub>2</sub></i> are constant
+/// >   expressions that evaluate to a boolean value.
+/// >   </span>
+/// > * <span>
+/// >   An expression of one of the forms <i>~e</i>, <i>e<sub>1</sub> ^
+/// >   e<sub>2</sub></i>, <i>e<sub>1</sub> &amp; e<sub>2</sub></i>,
+/// >   <i>e<sub>1</sub> | e<sub>2</sub></i>, <i>e<sub>1</sub> &gt;&gt;
+/// >   e<sub>2</sub></i> or <i>e<sub>1</sub> &lt;&lt; e<sub>2</sub></i>, where
+/// >   <i>e</i>, <i>e<sub>1</sub></i> and <i>e<sub>2</sub></i> are constant
+/// >   expressions that evaluate to an integer value or to <b>null</b>.
+/// >   </span>
+/// > * <span>
+/// >   An expression of one of the forms <i>-e</i>, <i>e<sub>1</sub> +
+/// >   e<sub>2</sub></i>, <i>e<sub>1</sub> -e<sub>2</sub></i>,
+/// >   <i>e<sub>1</sub> * e<sub>2</sub></i>, <i>e<sub>1</sub> /
+/// >   e<sub>2</sub></i>, <i>e<sub>1</sub> ~/ e<sub>2</sub></i>,
+/// >   <i>e<sub>1</sub> &gt; e<sub>2</sub></i>, <i>e<sub>1</sub> &lt;
+/// >   e<sub>2</sub></i>, <i>e<sub>1</sub> &gt;= e<sub>2</sub></i>,
+/// >   <i>e<sub>1</sub> &lt;= e<sub>2</sub></i> or <i>e<sub>1</sub> %
+/// >   e<sub>2</sub></i>, where <i>e</i>, <i>e<sub>1</sub></i> and
+/// >   <i>e<sub>2</sub></i> are constant expressions that evaluate to a numeric
+/// >   value or to <b>null</b>.
+/// >   </span>
+/// > * <span>
+/// >   An expression of the form <i>e<sub>1</sub> ? e<sub>2</sub> :
+/// >   e<sub>3</sub></i> where <i>e<sub>1</sub></i>, <i>e<sub>2</sub></i> and
+/// >   <i>e<sub>3</sub></i> are constant expressions, and <i>e<sub>1</sub></i>
+/// >   evaluates to a boolean value.
+/// >   </span>
+///
+/// The values returned by instances of this class are therefore `null` and
+/// instances of the classes `Boolean`, `BigInteger`, `Double`, `String`, and
+/// `DartObject`.
+///
+/// In addition, this class defines several values that can be returned to
+/// indicate various conditions encountered during evaluation. These are
+/// documented with the static fields that define those values.
 class ConstantEvaluator {
   /**
    * The source containing the expression(s) that will be evaluated.
diff --git a/pkg/analyzer/lib/src/generated/element.dart b/pkg/analyzer/lib/src/generated/element.dart
index 45f52bf..bff8b4e 100644
--- a/pkg/analyzer/lib/src/generated/element.dart
+++ b/pkg/analyzer/lib/src/generated/element.dart
@@ -2536,6 +2536,12 @@
   String get name;
 
   /**
+   * Return the length of the name of this element in the file that contains the
+   * declaration of this element, or `0` if this element does not have a name.
+   */
+  int get nameLength;
+
+  /**
    * Return the offset of the name of this element in the file that contains the
    * declaration of this element, or `-1` if this element is synthetic, does not
    * have a name, or otherwise does not have an offset.
@@ -2936,10 +2942,10 @@
     _cachedHashCode = null;
   }
 
-  /**
-   * The offset of the name of this element in the file that contains the
-   * declaration of this element.
-   */
+  @override
+  int get nameLength => displayName != null ? displayName.length : 0;
+
+  @override
   int get nameOffset => _nameOffset;
 
   /**
@@ -7312,6 +7318,9 @@
    */
   FunctionElement _loadLibraryFunction;
 
+  @override
+  final int nameLength;
+
   /**
    * The export [Namespace] of this library, `null` if it has not been
    * computed yet.
@@ -7330,7 +7339,7 @@
    * Initialize a newly created library element in the given [context] to have
    * the given [name] and [offset].
    */
-  LibraryElementImpl(this.context, String name, int offset)
+  LibraryElementImpl(this.context, String name, int offset, this.nameLength)
       : super(name, offset);
 
   /**
@@ -7338,7 +7347,8 @@
    * the given [name].
    */
   LibraryElementImpl.forNode(this.context, LibraryIdentifier name)
-      : super.forNode(name);
+      : super.forNode(name),
+        nameLength = name != null ? name.length : 0;
 
   @override
   CompilationUnitElement get definingCompilationUnit =>
@@ -7940,6 +7950,9 @@
   String get name => _baseElement.name;
 
   @override
+  int get nameLength => _baseElement.nameLength;
+
+  @override
   int get nameOffset => _baseElement.nameOffset;
 
   @deprecated
@@ -8453,6 +8466,9 @@
   String get name => _name;
 
   @override
+  int get nameLength => displayName != null ? displayName.length : 0;
+
+  @override
   int get nameOffset => -1;
 
   @deprecated
diff --git a/pkg/analyzer/lib/src/generated/element_handle.dart b/pkg/analyzer/lib/src/generated/element_handle.dart
index 94bb7a4..35af627 100644
--- a/pkg/analyzer/lib/src/generated/element_handle.dart
+++ b/pkg/analyzer/lib/src/generated/element_handle.dart
@@ -371,6 +371,9 @@
   String get name => actualElement.name;
 
   @override
+  int get nameLength => actualElement.nameLength;
+
+  @override
   int get nameOffset => actualElement.nameOffset;
 
   @deprecated
diff --git a/pkg/analyzer/lib/src/generated/error.dart b/pkg/analyzer/lib/src/generated/error.dart
index b8ea0bf..4e56e10 100644
--- a/pkg/analyzer/lib/src/generated/error.dart
+++ b/pkg/analyzer/lib/src/generated/error.dart
@@ -602,7 +602,7 @@
    */
   static const CompileTimeErrorCode CONFLICTING_TYPE_VARIABLE_AND_CLASS =
       const CompileTimeErrorCode('CONFLICTING_TYPE_VARIABLE_AND_CLASS',
-          "'{0}' cannot be used to name a type varaible in a class with the same name");
+          "'{0}' cannot be used to name a type variable in a class with the same name");
 
   /**
    * 7. Classes: It is a compile time error if a generic class declares a type
@@ -611,7 +611,7 @@
    */
   static const CompileTimeErrorCode CONFLICTING_TYPE_VARIABLE_AND_MEMBER =
       const CompileTimeErrorCode('CONFLICTING_TYPE_VARIABLE_AND_MEMBER',
-          "'{0}' cannot be used to name a type varaible and member in this class");
+          "'{0}' cannot be used to name a type variable and member in this class");
 
   /**
    * 12.11.2 Const: It is a compile-time error if evaluation of a constant
@@ -2569,16 +2569,15 @@
    * Report an error with the given [errorCode] and [arguments]. The [element]
    * is used to compute the location of the error.
    */
-  void reportErrorForElement(
-      ErrorCode errorCode, Element element, List<Object> arguments) {
-    String displayName = element.displayName;
+  void reportErrorForElement(ErrorCode errorCode, Element element,
+      [List<Object> arguments]) {
     int length = 0;
-    if (displayName != null) {
-      length = displayName.length;
-    } else if (element is ImportElement) {
+    if (element is ImportElement) {
       length = 6; // 'import'.length
     } else if (element is ExportElement) {
       length = 6; // 'export'.length
+    } else {
+      length = element.nameLength;
     }
     reportErrorForOffset(errorCode, element.nameOffset, length, arguments);
   }
@@ -3097,7 +3096,7 @@
       "The stack trace variable '{0}' is not used and can be removed");
 
   /**
-   * Unused local variables are local varaibles which are never read.
+   * Unused local variables are local variables which are never read.
    */
   static const HintCode UNUSED_LOCAL_VARIABLE = const HintCode(
       'UNUSED_LOCAL_VARIABLE',
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index 912f364..832bb00 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -2253,10 +2253,8 @@
       }
       // report problem
       hasProblem = true;
-      _errorReporter.reportErrorForOffset(
-          CompileTimeErrorCode.CONFLICTING_GETTER_AND_METHOD,
-          method.nameOffset,
-          name.length, [
+      _errorReporter.reportErrorForElement(
+          CompileTimeErrorCode.CONFLICTING_GETTER_AND_METHOD, method, [
         _enclosingClass.displayName,
         inherited.enclosingElement.displayName,
         name
@@ -2276,10 +2274,8 @@
       }
       // report problem
       hasProblem = true;
-      _errorReporter.reportErrorForOffset(
-          CompileTimeErrorCode.CONFLICTING_METHOD_AND_GETTER,
-          accessor.nameOffset,
-          name.length, [
+      _errorReporter.reportErrorForElement(
+          CompileTimeErrorCode.CONFLICTING_METHOD_AND_GETTER, accessor, [
         _enclosingClass.displayName,
         inherited.enclosingElement.displayName,
         name
@@ -2559,10 +2555,9 @@
       String name = typeParameter.name;
       // name is same as the name of the enclosing class
       if (_enclosingClass.name == name) {
-        _errorReporter.reportErrorForOffset(
+        _errorReporter.reportErrorForElement(
             CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_CLASS,
-            typeParameter.nameOffset,
-            name.length,
+            typeParameter,
             [name]);
         problemReported = true;
       }
@@ -2570,10 +2565,9 @@
       if (_enclosingClass.getMethod(name) != null ||
           _enclosingClass.getGetter(name) != null ||
           _enclosingClass.getSetter(name) != null) {
-        _errorReporter.reportErrorForOffset(
+        _errorReporter.reportErrorForElement(
             CompileTimeErrorCode.CONFLICTING_TYPE_VARIABLE_AND_MEMBER,
-            typeParameter.nameOffset,
-            name.length,
+            typeParameter,
             [name]);
         problemReported = true;
       }
@@ -3008,10 +3002,9 @@
       displayName = enclosingElement.getExtendedDisplayName(null);
     }
     // report problem
-    _errorReporter.reportErrorForOffset(
+    _errorReporter.reportErrorForElement(
         CompileTimeErrorCode.DUPLICATE_DEFINITION_INHERITANCE,
-        staticMember.nameOffset,
-        name.length,
+        staticMember,
         [name, displayName]);
     return true;
   }
@@ -4026,10 +4019,8 @@
     // check accessors
     for (PropertyAccessorElement accessor in _enclosingClass.accessors) {
       if (className == accessor.name) {
-        _errorReporter.reportErrorForOffset(
-            CompileTimeErrorCode.MEMBER_WITH_CLASS_NAME,
-            accessor.nameOffset,
-            className.length);
+        _errorReporter.reportErrorForElement(
+            CompileTimeErrorCode.MEMBER_WITH_CLASS_NAME, accessor);
         problemReported = true;
       }
     }
@@ -5965,21 +5956,17 @@
           buffer.write(separator);
         }
         buffer.write(element.displayName);
-        _errorReporter.reportErrorForOffset(
+        _errorReporter.reportErrorForElement(
             CompileTimeErrorCode.RECURSIVE_INTERFACE_INHERITANCE,
-            _enclosingClass.nameOffset,
-            enclosingClassName.length,
+            _enclosingClass,
             [enclosingClassName, buffer.toString()]);
         return true;
       } else {
         // RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_EXTENDS or
         // RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_IMPLEMENTS or
         // RECURSIVE_INTERFACE_INHERITANCE_BASE_CASE_WITH
-        _errorReporter.reportErrorForOffset(
-            _getBaseCaseErrorCode(element),
-            _enclosingClass.nameOffset,
-            enclosingClassName.length,
-            [enclosingClassName]);
+        _errorReporter.reportErrorForElement(_getBaseCaseErrorCode(element),
+            _enclosingClass, [enclosingClassName]);
         return true;
       }
     }
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 6061588..0a197f5 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -763,14 +763,14 @@
         return new AnalysisError(
             duplicate.source,
             duplicate.nameOffset,
-            duplicate.displayName.length,
+            duplicate.nameLength,
             CompileTimeErrorCode.METHOD_AND_GETTER_WITH_SAME_NAME,
             [existing.displayName]);
       } else {
         return new AnalysisError(
             existing.source,
             existing.nameOffset,
-            existing.displayName.length,
+            existing.nameLength,
             CompileTimeErrorCode.GETTER_AND_METHOD_WITH_SAME_NAME,
             [existing.displayName]);
       }
@@ -6355,7 +6355,7 @@
                 _reportError(
                     classElt,
                     classElt.nameOffset,
-                    classElt.displayName.length,
+                    classElt.nameLength,
                     StaticTypeWarningCode.INCONSISTENT_METHOD_INHERITANCE,
                     [key, firstTwoFuntionTypesStr]);
               }
@@ -6384,7 +6384,7 @@
           _reportError(
               classElt,
               classElt.nameOffset,
-              classElt.displayName.length,
+              classElt.nameLength,
               StaticWarningCode.INCONSISTENT_METHOD_INHERITANCE_GETTER_AND_METHOD,
               [key]);
         }
@@ -8999,7 +8999,7 @@
       return new AnalysisError(
           duplicate.source,
           offset,
-          duplicate.displayName.length,
+          duplicate.nameLength,
           CompileTimeErrorCode.PREFIX_COLLIDES_WITH_TOP_LEVEL_MEMBER,
           [existing.displayName]);
     }
@@ -9613,12 +9613,13 @@
   final bool strongMode;
 
   /**
-   * The static variables that have an initializer. These are the variables that
-   * need to be re-resolved after static variables have their types inferred. A
-   * subset of these variables are those whose types should be inferred. The
-   * list will be empty unless the resolver is being run in strong mode.
+   * The static variables and fields that have an initializer. These are the
+   * variables that need to be re-resolved after static variables have their
+   * types inferred. A subset of these variables are those whose types should
+   * be inferred. The list will be empty unless the resolver is being run in
+   * strong mode.
    */
-  final List<VariableElement> staticVariables = <VariableElement>[];
+  final List<VariableElement> variablesAndFields = <VariableElement>[];
 
   /**
    * A flag indicating whether we should discard errors while resolving the
@@ -9671,8 +9672,8 @@
 
   @override
   Object visitFieldDeclaration(FieldDeclaration node) {
-    if (strongMode && node.isStatic) {
-      _addStaticVariables(node.fields.variables);
+    if (strongMode) {
+      _addVariables(node.fields.variables);
       bool wasDiscarding = discardErrorsInInitializer;
       discardErrorsInInitializer = true;
       try {
@@ -9699,7 +9700,7 @@
   @override
   Object visitTopLevelVariableDeclaration(TopLevelVariableDeclaration node) {
     if (strongMode) {
-      _addStaticVariables(node.variables.variables);
+      _addVariables(node.variables.variables);
       bool wasDiscarding = discardErrorsInInitializer;
       discardErrorsInInitializer = true;
       try {
@@ -9718,10 +9719,10 @@
    * potentially need to be re-resolved after inference because they might
    * refer to a field whose type was inferred.
    */
-  void _addStaticVariables(NodeList<VariableDeclaration> variables) {
+  void _addVariables(NodeList<VariableDeclaration> variables) {
     for (VariableDeclaration variable in variables) {
       if (variable.initializer != null) {
-        staticVariables.add(variable.element);
+        variablesAndFields.add(variable.element);
       }
     }
   }
@@ -11943,12 +11944,8 @@
     // TODO(jwren) There are 4 error codes for duplicate, but only 1 is being
     // generated.
     Source source = duplicate.source;
-    return new AnalysisError(
-        source,
-        duplicate.nameOffset,
-        duplicate.displayName.length,
-        CompileTimeErrorCode.DUPLICATE_DEFINITION,
-        [existing.displayName]);
+    return new AnalysisError(source, duplicate.nameOffset, duplicate.nameLength,
+        CompileTimeErrorCode.DUPLICATE_DEFINITION, [existing.displayName]);
   }
 
   /**
@@ -14015,6 +14012,7 @@
         DartType type;
         TypeName typeName = node.type;
         if (typeName == null) {
+          element.hasImplicitType = true;
           type = _dynamicType;
           if (parameter is FieldFormalParameterElement) {
             FieldElement fieldElement =
@@ -15155,7 +15153,7 @@
   }
 
   /**
-   * Check that [f1] is a subtype of [f2]. 
+   * Check that [f1] is a subtype of [f2].
    * [fuzzyArrows] indicates whether or not the f1 and f2 should be
    * treated as fuzzy arrow types (and hence dynamic parameters to f2 treated
    * as bottom).
@@ -15534,12 +15532,8 @@
   void _reportErrorForElement(
       ErrorCode errorCode, Element element, List<Object> arguments) {
     if (element != null) {
-      _errorListener.onError(new AnalysisError(
-          element.source,
-          element.nameOffset,
-          element.displayName.length,
-          errorCode,
-          arguments));
+      _errorListener.onError(new AnalysisError(element.source,
+          element.nameOffset, element.nameLength, errorCode, arguments));
     }
   }
 }
diff --git a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
index 0dcd014..7362c4d 100644
--- a/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
+++ b/pkg/analyzer/lib/src/generated/static_type_analyzer.dart
@@ -1740,8 +1740,14 @@
     if (e is FunctionElement &&
         e.library.source.uri.toString() == 'dart:_foreign_helper' &&
         e.name == 'JS') {
-      DartType returnType = _getFirstArgumentAsType(
-          _typeProvider.objectType.element.library, node.argumentList);
+      String typeStr = _getFirstArgumentAsString(node.argumentList);
+      DartType returnType = null;
+      if (typeStr == '-dynamic') {
+        returnType = _typeProvider.bottomType;
+      } else {
+        returnType = _getElementNameAsType(
+            _typeProvider.objectType.element.library, typeStr, null);
+      }
       if (returnType != null) {
         _recordStaticType(node, returnType);
         return true;
@@ -1756,12 +1762,22 @@
    * being called is one of the object methods.
    */
   bool _inferMethodInvocationObject(MethodInvocation node) {
+    // If we have a call like `toString()` or `libraryPrefix.toString()` don't
+    // infer it.
+    Expression target = node.realTarget;
+    if (target == null ||
+        target is SimpleIdentifier && target.staticElement is PrefixElement) {
+      return false;
+    }
+
     // Object methods called on dynamic targets can have their types improved.
     String name = node.methodName.name;
     MethodElement inferredElement =
         _typeProvider.objectType.element.getMethod(name);
-    DartType inferredType = (inferredElement != null &&
-        !inferredElement.isStatic) ? inferredElement.type : null;
+    if (inferredElement == null || inferredElement.isStatic) {
+      return false;
+    }
+    DartType inferredType = inferredElement.type;
     DartType nodeType = node.staticType;
     if (nodeType != null &&
         nodeType.isDynamic &&
@@ -1769,8 +1785,6 @@
         inferredType.parameters.isEmpty &&
         node.argumentList.arguments.isEmpty &&
         _typeProvider.nonSubtypableTypes.contains(inferredType.returnType)) {
-      //TODO(leafp): When we start marking dynamic calls for the backend, be
-      // sure that this does not get marked as dynamic.
       _recordStaticType(node.methodName, inferredType);
       _recordStaticType(node, inferredType.returnType);
       return true;
@@ -1798,7 +1812,7 @@
   }
 
   /**
-   * Given a property access [node], where [target] is the target of the access
+   * Given a property access [node] with static type [nodeType],
    * and [id] is the property name being accessed, infer a type for the
    * access itself and its constituent components if the access is to one of the
    * methods or getters of the built in 'Object' type, and if the result type is
@@ -1806,19 +1820,23 @@
    */
   bool _inferObjectAccess(
       Expression node, DartType nodeType, SimpleIdentifier id) {
+    // If we have an access like `libraryPrefix.hashCode` don't infer it.
+    if (node is PrefixedIdentifier &&
+        node.prefix.staticElement is PrefixElement) {
+      return false;
+    }
     // Search for Object accesses.
     String name = id.name;
     PropertyAccessorElement inferredElement =
         _typeProvider.objectType.element.getGetter(name);
-    DartType inferredType = (inferredElement != null &&
-        !inferredElement.isStatic) ? inferredElement.type.returnType : null;
+    if (inferredElement == null || inferredElement.isStatic) {
+      return false;
+    }
+    DartType inferredType = inferredElement.type.returnType;
     if (nodeType != null &&
         nodeType.isDynamic &&
         inferredType != null &&
         _typeProvider.nonSubtypableTypes.contains(inferredType)) {
-      // TODO(leafp): Eliminate the dynamic call here once we start
-      // annotating dynamic calls from this code.  Even if the type is not
-      // sealed we can eliminate the dynamic call.
       _recordStaticType(id, inferredType);
       _recordStaticType(node, inferredType);
       return true;
@@ -1872,7 +1890,7 @@
 
   /**
    * Return a more specialized type for a method invocation based on
-   * an ad-hoc list of pseudo-generic methids.
+   * an ad-hoc list of pseudo-generic methods.
    */
   DartType _matchGeneric(MethodInvocation node) {
     Element e = node.methodName.staticElement;
@@ -1897,8 +1915,8 @@
             arguments.length == 2) {
           DartType tx = arguments[0];
           DartType ty = arguments[1];
-          if (tx == ty && tx == _typeProvider.intType ||
-              tx == _typeProvider.doubleType) {
+          if (tx == ty &&
+              (tx == _typeProvider.intType || tx == _typeProvider.doubleType)) {
             return tx;
           }
         }
diff --git a/pkg/analyzer/lib/src/generated/testing/element_factory.dart b/pkg/analyzer/lib/src/generated/testing/element_factory.dart
index 9539d41..736fa0d 100644
--- a/pkg/analyzer/lib/src/generated/testing/element_factory.dart
+++ b/pkg/analyzer/lib/src/generated/testing/element_factory.dart
@@ -442,7 +442,7 @@
     String fileName = "/$libraryName.dart";
     CompilationUnitElementImpl unit = compilationUnit(fileName);
     LibraryElementImpl library =
-        new LibraryElementImpl(context, libraryName, 0);
+        new LibraryElementImpl(context, libraryName, 0, libraryName.length);
     library.definingCompilationUnit = unit;
     return library;
   }
diff --git a/pkg/analyzer/lib/src/plugin/plugin_configuration.dart b/pkg/analyzer/lib/src/plugin/plugin_configuration.dart
index b3a1d90..9bd0da3 100644
--- a/pkg/analyzer/lib/src/plugin/plugin_configuration.dart
+++ b/pkg/analyzer/lib/src/plugin/plugin_configuration.dart
@@ -11,41 +11,75 @@
 
 const _pluginOptionScope = 'plugins';
 
+/// Parse the given string into a plugin manifest.
+PluginManifest parsePluginManifestString(String manifestSource) {
+  var yaml = loadYaml(manifestSource);
+  if (yaml == null) {
+    return null;
+  }
+  _verifyMap(yaml, 'plugin manifest');
+  Iterable<String> pluginHost = _parseHosts(yaml['contributes_to']);
+  PluginInfo plugin = _parsePlugin(yaml);
+  return new PluginManifest(contributesTo: pluginHost, plugin: plugin);
+}
+
+String _asString(dynamic yaml) {
+  if (yaml != null && yaml is! String) {
+    throw new PluginConfigFormatException(
+        'Unable to parse pugin manifest, '
+        'expected `String`, got `${yaml.runtimeType}`',
+        yaml);
+  }
+  return yaml;
+}
+
+Iterable<String> _parseHosts(dynamic yaml) {
+  List<String> hosts = <String>[];
+  if (yaml is String) {
+    hosts.add(yaml);
+  } else if (yaml is YamlList) {
+    yaml.forEach((h) {
+      hosts.add(_asString(h));
+    });
+  }
+  return hosts;
+}
+
+PluginInfo _parsePlugin(dynamic yaml) {
+  if (yaml != null) {
+    _verifyMap(yaml, 'plugin manifest');
+    return new PluginInfo._fromYaml(details: yaml);
+  }
+  return null;
+}
+
 PluginInfo _processPluginMapping(dynamic name, dynamic details) {
   if (name is String) {
     if (details is String) {
       return new PluginInfo(name: name, version: details);
     }
     if (details is YamlMap) {
-      return new PluginInfo(
-          name: name,
-          version: details['version'],
-          className: details['class_name'],
-          libraryUri: details['library_uri'],
-          packageName: details['package_name'],
-          path: details['path']);
+      return new PluginInfo._fromYaml(name: name, details: details);
     }
   }
 
   return null;
 }
 
-PluginInfo _processPluginNode(dynamic node) {
-  if (node is String) {
-    return new PluginInfo(name: node);
+_verifyMap(dynamic yaml, String context) {
+  if (yaml is! YamlMap) {
+    throw new PluginConfigFormatException(
+        'Unable to parse $context, '
+        'expected `YamlMap`, got `${yaml.runtimeType}`',
+        yaml);
   }
-  if (node is YamlMap) {
-    if (node.length == 1) {
-      return new PluginInfo(name: node.keys.first, version: node.values.first);
-    }
-  }
-  return null;
 }
 
-typedef ErrorHandler(Exception);
+/// A callback for error handling.
+typedef ErrorHandler(Exception e);
 
 /// Describes plugin configuration information as extracted from an
-/// analysis options map.
+/// analysis options map or plugin manifest.
 class PluginConfig {
   final Iterable<PluginInfo> plugins;
   PluginConfig(this.plugins);
@@ -65,9 +99,11 @@
             }
           });
         } else {
-          var plugin = _processPluginNode(pluginConfig);
-          if (plugin != null) {
-            plugins.add(plugin);
+          // Anything but an empty list of plugins is treated as a format error.
+          if (pluginConfig != null) {
+            throw new PluginConfigFormatException(
+                'Unrecognized plugin config format, expected `YamlMap`, got `${pluginConfig.runtimeType}`',
+                pluginConfig);
           }
         }
       }
@@ -77,6 +113,16 @@
   }
 }
 
+/// Thrown on bad plugin config format.
+class PluginConfigFormatException implements Exception {
+  /// Descriptive message.
+  final message;
+
+  /// The `plugin:` yaml node for generating detailed error feedback.
+  final yamlNode;
+  PluginConfigFormatException(this.message, this.yamlNode);
+}
+
 /// Extracts plugin config details from analysis options.
 class PluginConfigOptionsProcessor extends OptionsProcessor {
   final ErrorHandler _errorHandler;
@@ -116,4 +162,36 @@
       this.libraryUri,
       this.packageName,
       this.path});
+
+  factory PluginInfo._fromYaml({String name, YamlMap details}) =>
+      new PluginInfo(
+          name: name,
+          version: _asString(details['version']),
+          className: _asString(details['class_name']),
+          libraryUri: _asString(details['library_uri']),
+          packageName: _asString(details['package_name']),
+          path: _asString(details['path']));
+}
+
+/// Plugin manifests accompany plugin packages, providing
+/// configuration information for published plugins.
+///
+/// Provisionally, plugin manifests live in a file `plugin.yaml`
+/// at the root of the plugin package.
+///
+///     my_plugin/
+///       bin/
+///       lib/
+///       plugin.yaml
+///       pubspec.yaml
+///
+/// Provisional manifest file format:
+///
+///     class_name: MyAnalyzerPlugin
+///     library_uri: 'my_plugin/my_analyzer_plugin.dart'
+///     contributes_to: analyzer
+class PluginManifest {
+  PluginInfo plugin;
+  Iterable<String> contributesTo;
+  PluginManifest({this.plugin, this.contributesTo});
 }
diff --git a/pkg/analyzer/lib/src/task/dart.dart b/pkg/analyzer/lib/src/task/dart.dart
index a21d94b..8ce9084 100644
--- a/pkg/analyzer/lib/src/task/dart.dart
+++ b/pkg/analyzer/lib/src/task/dart.dart
@@ -2667,35 +2667,32 @@
     // have types inferred before inferring the type of this variable.
     //
     VariableElementImpl variable = target;
+
     CompilationUnit unit = getRequiredInput(UNIT_INPUT);
     TypeProvider typeProvider = getRequiredInput(TYPE_PROVIDER_INPUT);
     RecordingErrorListener errorListener = new RecordingErrorListener();
-    if (dependencyCycle == null) {
-      //
-      // Re-resolve the variable's initializer so that the inferred types of other
-      // variables will be propagated.
-      //
-      NodeLocator locator = new NodeLocator(variable.nameOffset);
-      AstNode node = locator.searchWithin(unit);
-      VariableDeclaration declaration = node
-          .getAncestor((AstNode ancestor) => ancestor is VariableDeclaration);
-      if (declaration == null || declaration.name != node) {
-        throw new AnalysisException(
-            "NodeLocator failed to find a variable's declaration");
-      }
-      Expression initializer = declaration.initializer;
-      ResolutionEraser.erase(initializer, eraseDeclarations: false);
-      ResolutionContext resolutionContext =
-          ResolutionContextBuilder.contextFor(initializer, errorListener);
-      ResolverVisitor visitor = new ResolverVisitor(
-          variable.library, variable.source, typeProvider, errorListener,
-          nameScope: resolutionContext.scope);
-      if (resolutionContext.enclosingClassDeclaration != null) {
-        visitor.prepareToResolveMembersInClass(
-            resolutionContext.enclosingClassDeclaration);
-      }
-      visitor.initForIncrementalResolution();
-      initializer.accept(visitor);
+    VariableDeclaration declaration = getDeclaration(unit);
+    //
+    // Re-resolve the variable's initializer so that the inferred types of other
+    // variables will be propagated.
+    //
+    Expression initializer = declaration.initializer;
+    ResolutionEraser.erase(initializer, eraseDeclarations: false);
+    ResolutionContext resolutionContext =
+        ResolutionContextBuilder.contextFor(initializer, errorListener);
+    ResolverVisitor visitor = new ResolverVisitor(
+        variable.library, variable.source, typeProvider, errorListener,
+        nameScope: resolutionContext.scope);
+    if (resolutionContext.enclosingClassDeclaration != null) {
+      visitor.prepareToResolveMembersInClass(
+          resolutionContext.enclosingClassDeclaration);
+    }
+    visitor.initForIncrementalResolution();
+    initializer.accept(visitor);
+
+    // If we're not in a dependency cycle, and we have no type annotation,
+    // do inference.
+    if (dependencyCycle == null && variable.hasImplicitType) {
       //
       // Record the type of the variable.
       //
@@ -3159,7 +3156,7 @@
     //
     // Record outputs.
     //
-    outputs[INFERABLE_STATIC_VARIABLES_IN_UNIT] = visitor.staticVariables;
+    outputs[INFERABLE_STATIC_VARIABLES_IN_UNIT] = visitor.variablesAndFields;
     outputs[PARTIALLY_RESOLVE_REFERENCES_ERRORS] =
         removeDuplicateErrors(errorListener.errors);
     outputs[RESOLVED_UNIT5] = unit;
diff --git a/pkg/analyzer/lib/src/task/dart_work_manager.dart b/pkg/analyzer/lib/src/task/dart_work_manager.dart
index 5b66e0b..77c4a0a 100644
--- a/pkg/analyzer/lib/src/task/dart_work_manager.dart
+++ b/pkg/analyzer/lib/src/task/dart_work_manager.dart
@@ -265,13 +265,16 @@
   @override
   void resultsComputed(
       AnalysisTarget target, Map<ResultDescriptor, dynamic> outputs) {
+    bool isDartSource = _isDartSource(target);
     // Organize sources.
-    if (_isDartSource(target)) {
+    bool isDartLibrarySource = false;
+    if (isDartSource) {
       Source source = target;
       SourceKind kind = outputs[SOURCE_KIND];
       if (kind != null) {
         unknownSourceQueue.remove(source);
         if (kind == SourceKind.LIBRARY) {
+          isDartLibrarySource = true;
           if (context.prioritySources.contains(source)) {
             _schedulePriorityLibrarySourceAnalysis(source);
           } else {
@@ -284,7 +287,7 @@
       }
     }
     // Update parts in libraries.
-    if (_isDartSource(target)) {
+    if (isDartLibrarySource) {
       Source library = target;
       List<Source> includedParts = outputs[INCLUDED_PARTS];
       if (includedParts != null) {
@@ -300,7 +303,7 @@
       }
     }
     // Update notice.
-    if (_isDartSource(target)) {
+    if (isDartSource) {
       bool shouldSetErrors = false;
       outputs.forEach((ResultDescriptor descriptor, value) {
         if (descriptor == PARSED_UNIT && value != null) {
diff --git a/pkg/analyzer/lib/src/task/strong_mode.dart b/pkg/analyzer/lib/src/task/strong_mode.dart
index 2db9914..ea3559d 100644
--- a/pkg/analyzer/lib/src/task/strong_mode.dart
+++ b/pkg/analyzer/lib/src/task/strong_mode.dart
@@ -28,7 +28,8 @@
       FunctionType functionType = element.type;
       if (functionType is FunctionTypeImpl) {
         element.type =
-            new FunctionTypeImpl(element, functionType.prunedTypedefs);
+            new FunctionTypeImpl(element, functionType.prunedTypedefs)
+              ..typeArguments = functionType.typeArguments;
       } else {
         assert(false);
       }
@@ -53,7 +54,8 @@
     element.returnType = type;
     FunctionType functionType = element.type;
     if (functionType is FunctionTypeImpl) {
-      element.type = new FunctionTypeImpl(element, functionType.prunedTypedefs);
+      element.type = new FunctionTypeImpl(element, functionType.prunedTypedefs)
+        ..typeArguments = functionType.typeArguments;
     } else {
       assert(false);
     }
@@ -231,37 +233,6 @@
   }
 
   /**
-   * If the given [accessorElement] represents a non-synthetic instance getter
-   * for which no return type was provided, infer the return type of the getter.
-   */
-  void _inferAccessor(PropertyAccessorElement accessorElement) {
-    if (!accessorElement.isSynthetic &&
-        accessorElement.isGetter &&
-        !accessorElement.isStatic &&
-        accessorElement.hasImplicitReturnType) {
-      List<ExecutableElement> overriddenGetters = inheritanceManager
-          .lookupOverrides(
-              accessorElement.enclosingElement, accessorElement.name);
-      if (overriddenGetters.isNotEmpty && _onlyGetters(overriddenGetters)) {
-        DartType newType = _computeReturnType(overriddenGetters);
-        List<ExecutableElement> overriddenSetters = inheritanceManager
-            .lookupOverrides(
-                accessorElement.enclosingElement, accessorElement.name + '=');
-        PropertyAccessorElement setter = (accessorElement.enclosingElement
-            as ClassElement).getSetter(accessorElement.name);
-        if (setter != null) {
-          overriddenSetters.add(setter);
-        }
-        if (!_isCompatible(newType, overriddenSetters)) {
-          newType = typeProvider.dynamicType;
-        }
-        setReturnType(accessorElement, newType);
-        (accessorElement.variable as FieldElementImpl).type = newType;
-      }
-    }
-  }
-
-  /**
    * Infer type information for all of the instance members in the given
    * [classElement].
    */
@@ -290,8 +261,13 @@
         // Then infer the types for the members.
         //
         classElement.fields.forEach(_inferField);
-        classElement.accessors.forEach(_inferAccessor);
-        classElement.methods.forEach(_inferMethod);
+        classElement.accessors.forEach(_inferExecutable);
+        classElement.methods.forEach(_inferExecutable);
+        //
+        // Infer initializing formal parameter types. This must happen after
+        // field types are inferred.
+        //
+        classElement.constructors.forEach(_inferConstructorFieldFormals);
         classElement.hasBeenInferred = true;
       } finally {
         elementsBeingInferred.remove(classElement);
@@ -323,10 +299,15 @@
         }
       }
       //
-      // Then, if none was found, infer the type from the initialization
-      // expression.
+      // If there is no overridden getter or if the overridden getter's type is
+      // dynamic, then we can infer the type from the initialization expression
+      // without breaking subtype rules. We could potentially infer a consistent
+      // return type even if the overridden getter's type was not dynamic, but
+      // choose not to for simplicity. The field is required to be final to
+      // prevent choosing a type that is inconsistent with assignments we cannot
+      // analyze.
       //
-      if (newType == null) {
+      if (newType == null || newType.isDynamic) {
         if (fieldElement.initializer != null &&
             (fieldElement.isFinal || overriddenGetters.isEmpty)) {
           newType = fieldElement.initializer.returnType;
@@ -344,47 +325,82 @@
   }
 
   /**
-   * If the given [methodElement] represents a non-synthetic instance method
-   * for which no return type was provided, infer the return type of the method.
+   * If the given [element] represents a non-synthetic instance method,
+   * getter or setter, infer the return type and any parameter type(s) where
+   * they were not provided.
    */
-  void _inferMethod(MethodElement methodElement) {
-    if (methodElement.isSynthetic || methodElement.isStatic) {
+  void _inferExecutable(ExecutableElement element) {
+    if (element.isSynthetic || element.isStatic) {
       return;
     }
     List<ExecutableElement> overriddenMethods = null;
     //
     // Infer the return type.
     //
-    if (methodElement.hasImplicitReturnType) {
+    if (element.hasImplicitReturnType) {
       overriddenMethods = inheritanceManager.lookupOverrides(
-          methodElement.enclosingElement, methodElement.name);
-      if (overriddenMethods.isEmpty || !_onlyMethods(overriddenMethods)) {
+          element.enclosingElement, element.name);
+      if (overriddenMethods.isEmpty ||
+          !_allSameElementKind(element, overriddenMethods)) {
         return;
       }
-      MethodElementImpl element = methodElement as MethodElementImpl;
       setReturnType(element, _computeReturnType(overriddenMethods));
+      if (element is PropertyAccessorElement) {
+        _updateSyntheticVariableType(element);
+      }
     }
     //
     // Infer the parameter types.
     //
-    List<ParameterElement> parameters = methodElement.parameters;
+    List<ParameterElement> parameters = element.parameters;
     int length = parameters.length;
     for (int i = 0; i < length; ++i) {
       ParameterElement parameter = parameters[i];
       if (parameter is ParameterElementImpl && parameter.hasImplicitType) {
         if (overriddenMethods == null) {
           overriddenMethods = inheritanceManager.lookupOverrides(
-              methodElement.enclosingElement, methodElement.name);
+              element.enclosingElement, element.name);
         }
-        if (overriddenMethods.isEmpty || !_onlyMethods(overriddenMethods)) {
+        if (overriddenMethods.isEmpty ||
+            !_allSameElementKind(element, overriddenMethods)) {
           return;
         }
         parameter.type = _computeParameterType(parameter, i, overriddenMethods);
+        if (element is PropertyAccessorElement) {
+          _updateSyntheticVariableType(element);
+        }
       }
     }
   }
 
   /**
+   * If the given [element] is a non-synthetic getter or setter, update its
+   * synthetic variable's type to match the getter's return type, or if no
+   * corresponding getter exists, use the setter's parameter type.
+   *
+   * In general, the type of the synthetic variable should not be used, because
+   * getters and setters are independent methods. But this logic matches what
+   * `TypeResolverVisitor.visitMethodDeclaration` would fill in there.
+   */
+  void _updateSyntheticVariableType(PropertyAccessorElement element) {
+    assert(!element.isSynthetic);
+    PropertyAccessorElement getter = element;
+    if (element.isSetter) {
+      // See if we can find any getter.
+      getter = element.correspondingGetter;
+    }
+    DartType newType;
+    if (getter != null) {
+      newType = getter.returnType;
+    } else if (element.isSetter && element.parameters.isNotEmpty) {
+      newType = element.parameters[0].type;
+    }
+    if (newType != null) {
+      (element.variable as VariableElementImpl).type = newType;
+    }
+  }
+
+  /**
    * Infer type information for all of the instance members in the given
    * interface [type].
    */
@@ -426,13 +442,24 @@
   /**
    * Return `true` if the list of [elements] contains only methods.
    */
-  bool _onlyMethods(List<ExecutableElement> elements) {
-    for (ExecutableElement element in elements) {
-      if (element is! MethodElement) {
-        return false;
+  bool _allSameElementKind(
+      ExecutableElement element, List<ExecutableElement> elements) {
+    return elements.every((e) => e.kind == element.kind);
+  }
+
+  void _inferConstructorFieldFormals(ConstructorElement element) {
+    for (ParameterElement p in element.parameters) {
+      if (p is FieldFormalParameterElement) {
+        _inferFieldFormalParameter(p);
       }
     }
-    return true;
+  }
+
+  void _inferFieldFormalParameter(FieldFormalParameterElement element) {
+    FieldElement field = element.field;
+    if (field != null && element.hasImplicitType) {
+      (element as FieldFormalParameterElementImpl).type = field.type;
+    }
   }
 }
 
diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml
index 27dd8fe..056ec55 100644
--- a/pkg/analyzer/pubspec.yaml
+++ b/pkg/analyzer/pubspec.yaml
@@ -1,5 +1,5 @@
 name: analyzer
-version: 0.26.1+3
+version: 0.26.1+6
 author: Dart Team <misc@dartlang.org>
 description: Static analyzer for Dart.
 homepage: http://www.dartlang.org
diff --git a/pkg/analyzer/test/generated/all_the_rest_test.dart b/pkg/analyzer/test/generated/all_the_rest_test.dart
index e3edac3..0b878f5 100644
--- a/pkg/analyzer/test/generated/all_the_rest_test.dart
+++ b/pkg/analyzer/test/generated/all_the_rest_test.dart
@@ -6968,6 +6968,26 @@
         (obj) => obj is FunctionElement, FunctionElement, element);
   }
 
+  void test_locate_PartOfDirective() {
+    Source librarySource = addNamedSource(
+        '/lib.dart',
+        '''
+library my.lib;
+part 'part.dart';
+''');
+    Source unitSource = addNamedSource(
+        '/part.dart',
+        '''
+part of my.lib;
+''');
+    CompilationUnit unit =
+        analysisContext.resolveCompilationUnit2(unitSource, librarySource);
+    PartOfDirective partOf = unit.directives.first;
+    Element element = ElementLocator.locate(partOf);
+    EngineTestCase.assertInstanceOf(
+        (obj) => obj is LibraryElement, LibraryElement, element);
+  }
+
   void test_locate_PostfixExpression() {
     AstNode id = _findNodeIn("++", "int addOne(int x) => x++;");
     Element element = ElementLocator.locate(id);
@@ -7035,19 +7055,6 @@
         TopLevelVariableElement, element);
   }
 
-  void test_locateWithOffset_BinaryExpression() {
-    AstNode id = _findNodeIn("+", "var x = 3 + 4;");
-    Element element = ElementLocator.locateWithOffset(id, 0);
-    EngineTestCase.assertInstanceOf(
-        (obj) => obj is MethodElement, MethodElement, element);
-  }
-
-  void test_locateWithOffset_StringLiteral() {
-    AstNode id = _findNodeIn("abc", "var x = 'abc';");
-    Element element = ElementLocator.locateWithOffset(id, 1);
-    expect(element, isNull);
-  }
-
   /**
    * Find the first AST node matching a pattern in the resolved AST for the given source.
    *
diff --git a/pkg/analyzer/test/generated/resolver_test.dart b/pkg/analyzer/test/generated/resolver_test.dart
index 9027440..307c41c 100644
--- a/pkg/analyzer/test/generated/resolver_test.dart
+++ b/pkg/analyzer/test/generated/resolver_test.dart
@@ -12025,6 +12025,22 @@
     expect(declaration.initializer.propagatedType, isNull);
   }
 
+  void test_pseudoGeneric_max_doubleInt() {
+    String code = r'''
+import 'dart:math';
+main() {
+  var foo = max(1.0, 2);
+}
+''';
+    _resolveTestUnit(code);
+
+    SimpleIdentifier identifier = _findIdentifier('foo');
+    VariableDeclaration declaration =
+        identifier.getAncestor((node) => node is VariableDeclaration);
+    expect(declaration.initializer.staticType.name, 'num');
+    expect(declaration.initializer.propagatedType, isNull);
+  }
+
   void test_pseudoGeneric_then() {
     String code = r'''
 import 'dart:async';
@@ -13890,6 +13906,96 @@
         typeProvider.stringType);
   }
 
+  void test_objectMethodInference_disabled_for_local_function() {
+    String name = 'toString';
+    String code = '''
+main() {
+  dynamic $name = () => null;
+  $name(); // marker
+}''';
+    SimpleIdentifier identifier = _findMarkedIdentifier(code, "$name = ");
+    expect(identifier.staticType, typeProvider.dynamicType);
+
+    SimpleIdentifier methodName = _findMarkedIdentifier(code, "(); // marker");
+    MethodInvocation methodInvoke = methodName.parent;
+    expect(methodName.staticType, typeProvider.dynamicType);
+    expect(methodInvoke.staticType, typeProvider.dynamicType);
+  }
+
+  void test_objectMethodInference_disabled_for_library_prefix() {
+    String name = 'toString';
+    addNamedSource('/helper.dart', '''
+library helper;
+dynamic $name = (int x) => x + 42');
+''');
+    String code = '''
+import 'helper.dart' as helper;
+main() {
+  helper.$name(); // marker
+}''';
+    SimpleIdentifier methodName = _findMarkedIdentifier(code, "(); // marker");
+    MethodInvocation methodInvoke = methodName.parent;
+    expect(methodName.staticType, null, reason: 'library prefix has no type');
+    expect(methodInvoke.staticType, typeProvider.dynamicType);
+  }
+
+  void test_objectMethodInference_enabled_for_cascades() {
+    String name = 'toString';
+    String code = '''
+main() {
+  dynamic obj;
+  obj..$name()..$name(); // marker
+}''';
+    SimpleIdentifier methodName = _findMarkedIdentifier(code, "(); // marker");
+    MethodInvocation methodInvoke = methodName.parent;
+
+    expect(methodInvoke.staticType, typeProvider.dynamicType);
+    expect(methodInvoke.realTarget.staticType, typeProvider.dynamicType);
+  }
+
+
+  void test_objectAccessInference_disabled_for_local_getter() {
+    String name = 'hashCode';
+    String code = '''
+dynamic get $name => null;
+main() {
+  $name; // marker
+}''';
+
+    SimpleIdentifier getter = _findMarkedIdentifier(code, "; // marker");
+    expect(getter.staticType, typeProvider.dynamicType);
+  }
+
+  void test_objectAccessInference_disabled_for_library_prefix() {
+    String name = 'hashCode';
+    addNamedSource('/helper.dart', '''
+library helper;
+dynamic get $name => 42;
+''');
+    String code = '''
+import 'helper.dart' as helper;
+main() {
+  helper.$name; // marker
+}''';
+
+    SimpleIdentifier id = _findMarkedIdentifier(code, "; // marker");
+    PrefixedIdentifier prefixedId = id.parent;
+    expect(id.staticType, typeProvider.dynamicType);
+    expect(prefixedId.staticType, typeProvider.dynamicType);
+  }
+
+  void test_objectAccessInference_enabled_for_cascades() {
+    String name = 'hashCode';
+    String code = '''
+main() {
+  dynamic obj;
+  obj..$name..$name; // marker
+}''';
+    PropertyAccess access = _findMarkedIdentifier(code, "; // marker").parent;
+    expect(access.staticType, typeProvider.dynamicType);
+    expect(access.realTarget.staticType, typeProvider.dynamicType);
+  }
+
   void test_propagatedReturnType_localFunction() {
     String code = r'''
 main() {
diff --git a/pkg/analyzer/test/source/analysis_options_provider_test.dart b/pkg/analyzer/test/source/analysis_options_provider_test.dart
index b200278..80bf2ad 100644
--- a/pkg/analyzer/test/source/analysis_options_provider_test.dart
+++ b/pkg/analyzer/test/source/analysis_options_provider_test.dart
@@ -41,15 +41,53 @@
       expect(options.length, equals(0));
     });
   });
+  group('AnalysisOptionsProvider', () {
+    setUp(() {
+      buildResourceProvider(true);
+    });
+    tearDown(() {
+      clearResourceProvider();
+    });
+    test('test_empty', () {
+      var optionsProvider = new AnalysisOptionsProvider();
+      Map<String, YamlNode> options =
+          optionsProvider.getOptions(resourceProvider.getFolder('/'));
+    });
+  });
+  group('AnalysisOptionsProvider', () {
+    setUp(() {
+      buildResourceProvider(false, true);
+    });
+    tearDown(() {
+      clearResourceProvider();
+    });
+    test('test_invalid', () {
+      var optionsProvider = new AnalysisOptionsProvider();
+      bool exceptionCaught = false;
+      try {
+        Map<String, YamlNode> options =
+            optionsProvider.getOptions(resourceProvider.getFolder('/'));
+      } catch (e, st) {
+        exceptionCaught = true;
+      }
+      expect(exceptionCaught, isTrue);
+    });
+  });
 }
 
 MemoryResourceProvider resourceProvider;
 
-buildResourceProvider() {
+buildResourceProvider([bool emptyAnalysisOptions = false,
+                       bool badAnalysisOptions = false]) {
   resourceProvider = new MemoryResourceProvider();
   resourceProvider.newFolder('/empty');
   resourceProvider.newFolder('/tmp');
-  resourceProvider.newFile(
+  if (badAnalysisOptions) {
+    resourceProvider.newFile('/.analysis_options', r''':''');
+  } else if (emptyAnalysisOptions) {
+    resourceProvider.newFile('/.analysis_options', r'''''');
+  } else {
+    resourceProvider.newFile(
       '/.analysis_options',
       r'''
 analyzer:
@@ -57,6 +95,7 @@
     - ignoreme.dart
     - 'sdk_ext/**'
 ''');
+  }
 }
 
 clearResourceProvider() {
diff --git a/pkg/analyzer/test/src/context/context_test.dart b/pkg/analyzer/test/src/context/context_test.dart
index ab4df64..734c1b2 100644
--- a/pkg/analyzer/test/src/context/context_test.dart
+++ b/pkg/analyzer/test/src/context/context_test.dart
@@ -1254,13 +1254,6 @@
     expect(context.getResolvedCompilationUnit2(source, source), isNotNull);
   }
 
-  void test_getResolvedCompilationUnit_source_html() {
-    Source source = addSource("/test.html", "<html></html>");
-    expect(context.getResolvedCompilationUnit2(source, source), isNull);
-    expect(context.resolveCompilationUnit2(source, source), isNull);
-    expect(context.getResolvedCompilationUnit2(source, source), isNull);
-  }
-
   void test_getSourceFactory() {
     expect(context.sourceFactory, same(sourceFactory));
   }
@@ -1772,14 +1765,14 @@
     TestSource source = _addSourceWithException2("/test.dart", "library test;");
     source.generateExceptionOnRead = false;
     _analyzeAll_assertFinished();
-    expect(source.readCount, 1);
+    expect(source.readCount, 2);
     _changeSource(source, "");
     source.generateExceptionOnRead = true;
     _analyzeAll_assertFinished();
     if (AnalysisEngine.instance.limitInvalidationInTaskModel) {
-      expect(source.readCount, 5);
+      expect(source.readCount, 7);
     } else {
-      expect(source.readCount, 3);
+      expect(source.readCount, 5);
     }
   }
 
@@ -1869,6 +1862,15 @@
         ["dart.core", "dart.async", "dart.math", "libA", "libB"]);
   }
 
+  void test_resolveCompilationUnit_library() {
+    Source source = addSource("/lib.dart", "library lib;");
+    LibraryElement library = context.computeLibraryElement(source);
+    CompilationUnit compilationUnit =
+        context.resolveCompilationUnit(source, library);
+    expect(compilationUnit, isNotNull);
+    expect(compilationUnit.element, isNotNull);
+  }
+
 //  void test_resolveCompilationUnit_sourceChangeDuringResolution() {
 //    _context = new _AnalysisContext_sourceChangeDuringResolution();
 //    AnalysisContextFactory.initContextWithCore(_context);
@@ -1880,15 +1882,6 @@
 //    expect(_context.getLineInfo(source), isNotNull);
 //  }
 
-  void test_resolveCompilationUnit_library() {
-    Source source = addSource("/lib.dart", "library lib;");
-    LibraryElement library = context.computeLibraryElement(source);
-    CompilationUnit compilationUnit =
-        context.resolveCompilationUnit(source, library);
-    expect(compilationUnit, isNotNull);
-    expect(compilationUnit.element, isNotNull);
-  }
-
   void test_resolveCompilationUnit_source() {
     Source source = addSource("/lib.dart", "library lib;");
     CompilationUnit compilationUnit =
@@ -2073,6 +2066,22 @@
     expect(context.sourcesNeedingProcessing.contains(source), isFalse);
   }
 
+  void test_validateCacheConsistency_deletedSource() {
+    MemoryResourceProvider resourceProvider = new MemoryResourceProvider();
+    var fileA = resourceProvider.newFile('/a.dart', "");
+    var fileB = resourceProvider.newFile('/b.dart', "import 'a.dart';");
+    Source sourceA = fileA.createSource();
+    Source sourceB = fileB.createSource();
+    context.applyChanges(
+        new ChangeSet()..addedSource(sourceA)..addedSource(sourceB));
+    // analyze everything
+    _analyzeAll_assertFinished();
+    // delete a.dart
+    resourceProvider.deleteFile('/a.dart');
+    // analysis should eventually stop
+    _analyzeAll_assertFinished();
+  }
+
   void xtest_performAnalysisTask_stress() {
     int maxCacheSize = 4;
     AnalysisOptionsImpl options =
@@ -2123,7 +2132,10 @@
     for (int i = 0; i < maxIterations; i++) {
       List<ChangeNotice> notice = context.performAnalysisTask().changeNotices;
       if (notice == null) {
-        return;
+        bool inconsistent = context.validateCacheConsistency();
+        if (!inconsistent) {
+          return;
+        }
       }
     }
     fail("performAnalysisTask failed to terminate after analyzing all sources");
diff --git a/pkg/analyzer/test/src/plugin/plugin_config_test.dart b/pkg/analyzer/test/src/plugin/plugin_config_test.dart
index 809a1ec..cc06b96 100644
--- a/pkg/analyzer/test/src/plugin/plugin_config_test.dart
+++ b/pkg/analyzer/test/src/plugin/plugin_config_test.dart
@@ -7,9 +7,10 @@
 import 'package:analyzer/source/analysis_options_provider.dart';
 import 'package:analyzer/src/plugin/plugin_configuration.dart';
 import 'package:unittest/unittest.dart';
+import 'package:yaml/yaml.dart';
 
 main() {
-  group('PluginConfig', () {
+  group('plugin config tests', () {
     group('parsing', () {
       test('plugin map', () {
         const optionsSrc = '''
@@ -24,7 +25,7 @@
       path: '/u/disk/src/'
 ''';
         var config = parseConfig(optionsSrc);
-        var plugins = pluginsSortedByName(config);
+        var plugins = pluginsSortedByName(config.plugins);
         expect(plugins, hasLength(3));
         expect(plugins[0].name, equals('my_plugin1'));
         expect(plugins[0].version, equals('^0.1.0'));
@@ -36,6 +37,83 @@
         expect(plugins[2].libraryUri, equals('myplugin/myplugin.dart'));
         expect(plugins[2].className, equals('MyPlugin'));
       });
+
+      test('plugin map (empty)', () {
+        const optionsSrc = '''
+analyzer:
+  plugins:
+    # my_plugin1: ^0.1.0 #shorthand 
+''';
+        var config = parseConfig(optionsSrc);
+        // Commented out plugins shouldn't cause a parse failure.
+        expect(config.plugins, hasLength(0));
+      });
+
+      test('plugin manifest', () {
+        const manifestSrc = '''
+class_name: AnalyzerPlugin
+library_uri: myplugin/analyzer_plugin.dart
+contributes_to: analyzer  
+''';
+        var manifest = parsePluginManifestString(manifestSrc);
+        var plugin = manifest.plugin;
+        expect(plugin.libraryUri, equals('myplugin/analyzer_plugin.dart'));
+        expect(plugin.className, equals('AnalyzerPlugin'));
+        expect(manifest.contributesTo, unorderedEquals(['analyzer']));
+      });
+
+      test('plugin manifest (contributes_to list)', () {
+        const manifestSrc = '''
+class_name: AnalyzerPlugin
+library_uri: myplugin/analyzer_plugin.dart
+contributes_to: 
+  - analyzer
+  - analysis_server  
+''';
+        var manifest = parsePluginManifestString(manifestSrc);
+        var plugin = manifest.plugin;
+        expect(plugin.libraryUri, equals('myplugin/analyzer_plugin.dart'));
+        expect(plugin.className, equals('AnalyzerPlugin'));
+        expect(manifest.contributesTo,
+            unorderedEquals(['analyzer', 'analysis_server']));
+      });
+
+      group('errors', () {
+        test('bad config format', () {
+          const optionsSrc = '''
+analyzer:
+  plugins:
+    - my_plugin1
+    - my_plugin2
+''';
+          try {
+            parseConfig(optionsSrc);
+            fail('expected PluginConfigFormatException');
+          } on PluginConfigFormatException catch (e) {
+            expect(
+                e.message,
+                equals(
+                    'Unrecognized plugin config format, expected `YamlMap`, got `YamlList`'));
+            expect(e.yamlNode, new isInstanceOf<YamlList>());
+          }
+        });
+        test('bad manifest format', () {
+          const manifestSource = '''
+library_uri:
+ - should be a scalar uri
+''';
+          try {
+            parsePluginManifestString(manifestSource);
+            fail('expected PluginConfigFormatException');
+          } on PluginConfigFormatException catch (e) {
+            expect(
+                e.message,
+                equals(
+                    'Unable to parse pugin manifest, expected `String`, got `YamlList`'));
+            expect(e.yamlNode, new isInstanceOf<YamlList>());
+          }
+        });
+      });
     });
   });
 }
@@ -45,5 +123,5 @@
   return new PluginConfig.fromOptions(options);
 }
 
-List<PluginInfo> pluginsSortedByName(PluginConfig config) =>
-    config.plugins.toList()..sort((p1, p2) => p1.name.compareTo(p2.name));
+List<PluginInfo> pluginsSortedByName(Iterable<PluginInfo> plugins) =>
+    plugins.toList()..sort((p1, p2) => p1.name.compareTo(p2.name));
diff --git a/pkg/analyzer/test/src/task/dart_test.dart b/pkg/analyzer/test/src/task/dart_test.dart
index 3667038..51a86fb 100644
--- a/pkg/analyzer/test/src/task/dart_test.dart
+++ b/pkg/analyzer/test/src/task/dart_test.dart
@@ -60,6 +60,7 @@
   runReflectiveTests(ResolveUnitTypeNamesTaskTest);
   runReflectiveTests(ResolveVariableReferencesTaskTest);
   runReflectiveTests(ScanDartTaskTest);
+  runReflectiveTests(StrongModeInferenceTest);
   runReflectiveTests(VerifyUnitTaskTest);
 }
 
@@ -1906,6 +1907,68 @@
     expect(method.element.returnType, typeY);
     expect(method.element.parameters[0].type, typeZ);
   }
+
+  void test_perform_cross_library_const() {
+    enableStrongMode();
+    AnalysisTarget firstSource = newSource(
+        '/first.dart',
+        '''
+library first;
+
+const a = 'hello';
+''');
+    AnalysisTarget secondSource = newSource(
+        '/second.dart',
+        '''
+import 'first.dart';
+
+const b = a;
+class M {
+   String c = a;
+}
+''');
+    computeResult(
+        new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT7,
+        matcher: isInferInstanceMembersInUnitTask);
+    CompilationUnit firstUnit = outputs[RESOLVED_UNIT7];
+    computeResult(
+        new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT7);
+    CompilationUnit secondUnit = outputs[RESOLVED_UNIT7];
+
+    VariableDeclaration variableA = getTopLevelVariable(firstUnit, 'a');
+    VariableDeclaration variableB = getTopLevelVariable(secondUnit, 'b');
+    VariableDeclaration variableC = getFieldInClass(secondUnit, 'M', 'c');
+    InterfaceType stringType = context.typeProvider.stringType;
+
+    expect(variableA.element.type, stringType);
+    expect(variableB.element.type, stringType);
+    expect(variableB.initializer.staticType, stringType);
+    expect(variableC.element.type, stringType);
+    expect(variableC.initializer.staticType, stringType);
+  }
+
+  void test_perform_reresolution() {
+    enableStrongMode();
+    AnalysisTarget source = newSource(
+        '/test.dart',
+        '''
+const topLevel = '';
+class C {
+  String field = topLevel;
+}
+''');
+    computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT7);
+    CompilationUnit unit = outputs[RESOLVED_UNIT7];
+    VariableDeclaration topLevelDecl = getTopLevelVariable(unit, 'topLevel');
+    VariableDeclaration fieldDecl = getFieldInClass(unit, 'C', 'field');
+    VariableElement topLevel = topLevelDecl.name.staticElement;
+    VariableElement field = fieldDecl.name.staticElement;
+
+    InterfaceType stringType = context.typeProvider.stringType;
+    expect(topLevel.type, stringType);
+    expect(field.type, stringType);
+    expect(fieldDecl.initializer.staticType, stringType);
+  }
 }
 
 @reflectiveTest
@@ -1987,6 +2050,23 @@
     InterfaceType intType = context.typeProvider.intType;
     expect(expression.staticType, intType);
   }
+
+  void test_perform_const_field() {
+    enableStrongMode();
+    AnalysisTarget source = newSource(
+        '/test.dart',
+        '''
+class M {
+  static const X = "";
+}
+''');
+    computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT6,
+        matcher: isInferStaticVariableTypesInUnitTask);
+    CompilationUnit unit = outputs[RESOLVED_UNIT6];
+    VariableDeclaration declaration = getFieldInClass(unit, 'M', 'X');
+    InterfaceType stringType = context.typeProvider.stringType;
+    expect(declaration.element.type, stringType);
+  }
 }
 
 @reflectiveTest
@@ -2025,9 +2105,59 @@
 
   void test_perform() {
     AnalysisTarget source = newSource(
+        '/test3.dart',
+        '''
+var topLevel3 = '';
+class C {
+  var field3 = topLevel3;
+}
+''');
+    computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5);
+    CompilationUnit unit = outputs[RESOLVED_UNIT5];
+    VariableDeclaration topLevelDecl = getTopLevelVariable(unit, 'topLevel3');
+    VariableDeclaration fieldDecl = getFieldInClass(unit, 'C', 'field3');
+    VariableElement topLevel = topLevelDecl.name.staticElement;
+    VariableElement field = fieldDecl.name.staticElement;
+
+    computeResult(field, INFERRED_STATIC_VARIABLE,
+        matcher: isInferStaticVariableTypeTask);
+    InterfaceType stringType = context.typeProvider.stringType;
+    expect(topLevel.type, stringType);
+    expect(field.type, stringType);
+    expect(fieldDecl.initializer.staticType, stringType);
+    expect(outputs[INFER_STATIC_VARIABLE_ERRORS], hasLength(0));
+  }
+
+  void test_perform_reresolution() {
+    AnalysisTarget source = newSource(
         '/test.dart',
         '''
-var topLevel = '';
+const topLevel = '';
+class C {
+  String field = topLevel;
+}
+''');
+    computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT5);
+    CompilationUnit unit = outputs[RESOLVED_UNIT5];
+    VariableDeclaration topLevelDecl = getTopLevelVariable(unit, 'topLevel');
+    VariableDeclaration fieldDecl = getFieldInClass(unit, 'C', 'field');
+    VariableElement topLevel = topLevelDecl.name.staticElement;
+    VariableElement field = fieldDecl.name.staticElement;
+
+    computeResult(field, INFERRED_STATIC_VARIABLE,
+        matcher: isInferStaticVariableTypeTask);
+    InterfaceType stringType = context.typeProvider.stringType;
+    expect(topLevel.type, stringType);
+    expect(field.type, stringType);
+    expect(fieldDecl.initializer.staticType, stringType);
+    expect(outputs[INFER_STATIC_VARIABLE_ERRORS], hasLength(0));
+  }
+
+  void test_perform_const() {
+    AnalysisTarget source = newSource(
+        '/test.dart',
+        '''
+const topLevel = "hello";
 class C {
   var field = topLevel;
 }
@@ -2307,7 +2437,7 @@
     computeResult(target, RESOLVED_UNIT5,
         matcher: isPartiallyResolveUnitReferencesTask);
     // Test the outputs
-    expect(outputs[INFERABLE_STATIC_VARIABLES_IN_UNIT], hasLength(4));
+    expect(outputs[INFERABLE_STATIC_VARIABLES_IN_UNIT], hasLength(5));
     CompilationUnit unit = outputs[RESOLVED_UNIT5];
     expect(unit, same(outputs[RESOLVED_UNIT5]));
     // Test the state of the AST
@@ -2464,6 +2594,472 @@
 }
 
 @reflectiveTest
+class StrongModeInferenceTest extends _AbstractDartTaskTest {
+
+  @override
+  void setUp() {
+    super.setUp();
+    enableStrongMode();
+  }
+
+  // Check that even within a static variable cycle, inferred
+  // types get propagated to the members of the cycle.
+  void test_perform_cycle() {
+    AnalysisTarget source = newSource(
+        '/test.dart',
+        '''
+var piFirst = true;
+var pi = piFirst ? 3.14 : tau / 2;
+var tau = piFirst ? pi * 2 : 6.28;
+''');
+    computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8);
+    CompilationUnit unit = outputs[RESOLVED_UNIT8];
+    VariableElement piFirst =
+        getTopLevelVariable(unit, 'piFirst').name.staticElement;
+    VariableElement pi = getTopLevelVariable(unit, 'pi').name.staticElement;
+    VariableElement tau = getTopLevelVariable(unit, 'tau').name.staticElement;
+    Expression piFirstUse = (getTopLevelVariable(unit, 'tau').initializer
+        as ConditionalExpression).condition;
+
+    expect(piFirstUse.staticType, context.typeProvider.boolType);
+    expect(piFirst.type, context.typeProvider.boolType);
+    expect(pi.type.isDynamic, isTrue);
+    expect(tau.type.isDynamic, isTrue);
+  }
+
+  void test_perform_local_explicit_disabled() {
+    AnalysisTarget source = newSource(
+        '/test.dart',
+        '''
+      test() {
+        int x = 3;
+        x = "hi";
+      }
+''');
+    computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8);
+    CompilationUnit unit = outputs[RESOLVED_UNIT8];
+
+    InterfaceType intType = context.typeProvider.intType;
+    InterfaceType stringType = context.typeProvider.stringType;
+
+    List<Statement> statements = getStatementsInTopLevelFunction(unit, "test");
+    VariableDeclaration decl =
+        (statements[0] as VariableDeclarationStatement).variables.variables[0];
+    expect(decl.element.type, intType);
+    expect(decl.initializer.staticType, intType);
+
+    ExpressionStatement statement = statements[1];
+    AssignmentExpression assgn = statement.expression;
+    expect(assgn.leftHandSide.staticType, intType);
+    expect(assgn.rightHandSide.staticType, stringType);
+  }
+
+  void assertVariableDeclarationTypes(
+      VariableDeclaration decl, DartType varType, DartType initializerType) {
+    expect(decl.element.type, varType);
+    expect(decl.initializer.staticType, initializerType);
+  }
+
+  void assertVariableDeclarationStatementTypes(
+      Statement stmt, DartType varType, DartType initializerType) {
+    VariableDeclaration decl =
+        (stmt as VariableDeclarationStatement).variables.variables[0];
+    assertVariableDeclarationTypes(decl, varType, initializerType);
+  }
+
+  void assertAssignmentStatementTypes(
+      Statement stmt, DartType leftType, DartType rightType) {
+    AssignmentExpression assgn = (stmt as ExpressionStatement).expression;
+    expect(assgn.leftHandSide.staticType, leftType);
+    expect(assgn.rightHandSide.staticType, rightType);
+  }
+
+  // Test that local variables in method bodies are inferred appropriately
+  void test_perform_inference_local_variables() {
+    AnalysisTarget source = newSource(
+        '/test.dart',
+        '''
+      test() {
+        int x = 3;
+        x = "hi";
+        var y = 3;
+        y = "hi";
+      }
+''');
+    computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8);
+    CompilationUnit unit = outputs[RESOLVED_UNIT8];
+
+    InterfaceType intType = context.typeProvider.intType;
+    InterfaceType stringType = context.typeProvider.stringType;
+
+    List<Statement> statements = getStatementsInTopLevelFunction(unit, "test");
+
+    assertVariableDeclarationStatementTypes(statements[0], intType, intType);
+    assertAssignmentStatementTypes(statements[1], intType, stringType);
+    assertVariableDeclarationStatementTypes(statements[2], intType, intType);
+    assertAssignmentStatementTypes(statements[3], intType, stringType);
+  }
+
+  // Test inference interactions between local variables and fields
+  void test_perform_inference_local_variables_fields() {
+    AnalysisTarget source = newSource(
+        '/test.dart',
+        '''
+      class A {
+        int x = 0;
+
+        test1() {
+          var a = x;
+          a = "hi";
+          a = 3;
+          var b = y;
+          b = "hi";
+          b = 4;
+          var c = z;
+          c = "hi";
+          c = 4;
+        }
+
+        int y; // field def after use
+        final z = 42; // should infer `int`
+      }
+''');
+    computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8);
+    CompilationUnit unit = outputs[RESOLVED_UNIT8];
+
+    InterfaceType intType = context.typeProvider.intType;
+    InterfaceType stringType = context.typeProvider.stringType;
+
+    List<Statement> statements = getStatementsInMethod(unit, "A", "test1");
+
+    assertVariableDeclarationStatementTypes(statements[0], intType, intType);
+    assertAssignmentStatementTypes(statements[1], intType, stringType);
+    assertAssignmentStatementTypes(statements[2], intType, intType);
+
+    assertVariableDeclarationStatementTypes(statements[3], intType, intType);
+    assertAssignmentStatementTypes(statements[4], intType, stringType);
+    assertAssignmentStatementTypes(statements[5], intType, intType);
+
+    assertVariableDeclarationStatementTypes(statements[6], intType, intType);
+    assertAssignmentStatementTypes(statements[7], intType, stringType);
+    assertAssignmentStatementTypes(statements[8], intType, intType);
+
+    assertVariableDeclarationTypes(
+        getFieldInClass(unit, "A", "x"), intType, intType);
+    assertVariableDeclarationTypes(
+        getFieldInClass(unit, "A", "z"), intType, intType);
+  }
+
+  // Test inference interactions between local variables and top level
+  // variables
+  void test_perform_inference_local_variables_topLevel() {
+    AnalysisTarget source = newSource(
+        '/test.dart',
+        '''
+      int x = 0;
+
+      test1() {
+        var a = x;
+        a = /*severe:StaticTypeError*/"hi";
+        a = 3;
+        var b = y;
+        b = /*severe:StaticTypeError*/"hi";
+        b = 4;
+        var c = z;
+        c = /*severe:StaticTypeError*/"hi";
+        c = 4;
+      }
+
+      int y = 0; // field def after use
+      final z = 42; // should infer `int`
+''');
+    computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8);
+    CompilationUnit unit = outputs[RESOLVED_UNIT8];
+
+    InterfaceType intType = context.typeProvider.intType;
+    InterfaceType stringType = context.typeProvider.stringType;
+
+    List<Statement> statements = getStatementsInTopLevelFunction(unit, "test1");
+
+    assertVariableDeclarationStatementTypes(statements[0], intType, intType);
+    assertAssignmentStatementTypes(statements[1], intType, stringType);
+    assertAssignmentStatementTypes(statements[2], intType, intType);
+
+    assertVariableDeclarationStatementTypes(statements[3], intType, intType);
+    assertAssignmentStatementTypes(statements[4], intType, stringType);
+    assertAssignmentStatementTypes(statements[5], intType, intType);
+
+    assertVariableDeclarationStatementTypes(statements[6], intType, intType);
+    assertAssignmentStatementTypes(statements[7], intType, stringType);
+    assertAssignmentStatementTypes(statements[8], intType, intType);
+
+    assertVariableDeclarationTypes(
+        getTopLevelVariable(unit, "x"), intType, intType);
+    assertVariableDeclarationTypes(
+        getTopLevelVariable(unit, "y"), intType, intType);
+    assertVariableDeclarationTypes(
+        getTopLevelVariable(unit, "z"), intType, intType);
+  }
+
+  // Test that inference does not propagate from null
+  void test_perform_inference_null() {
+    AnalysisTarget source = newSource(
+        '/test.dart',
+        '''
+      var x = null;
+      var y = 3;
+      class A {
+        static var x = null;
+        static var y = 3;
+
+        var x2 = null;
+        var y2 = 3;
+      }
+
+      test() {
+        x = "hi";
+        y = /*severe:StaticTypeError*/"hi";
+        A.x = "hi";
+        A.y = /*severe:StaticTypeError*/"hi";
+        new A().x2 = "hi";
+        new A().y2 = /*severe:StaticTypeError*/"hi";
+      }
+''');
+    computeResult(new LibrarySpecificUnit(source, source), RESOLVED_UNIT8);
+    CompilationUnit unit = outputs[RESOLVED_UNIT8];
+
+    InterfaceType intType = context.typeProvider.intType;
+    InterfaceType stringType = context.typeProvider.stringType;
+    DartType bottomType = context.typeProvider.bottomType;
+    DartType dynamicType = context.typeProvider.dynamicType;
+
+    assertVariableDeclarationTypes(
+        getTopLevelVariable(unit, "x"), dynamicType, bottomType);
+    assertVariableDeclarationTypes(
+        getTopLevelVariable(unit, "y"), intType, intType);
+    assertVariableDeclarationTypes(
+        getFieldInClass(unit, "A", "x"), dynamicType, bottomType);
+    assertVariableDeclarationTypes(
+        getFieldInClass(unit, "A", "y"), intType, intType);
+    assertVariableDeclarationTypes(
+        getFieldInClass(unit, "A", "x2"), dynamicType, bottomType);
+    assertVariableDeclarationTypes(
+        getFieldInClass(unit, "A", "y2"), intType, intType);
+
+    List<Statement> statements = getStatementsInTopLevelFunction(unit, "test");
+
+    assertAssignmentStatementTypes(statements[0], dynamicType, stringType);
+    assertAssignmentStatementTypes(statements[1], intType, stringType);
+    assertAssignmentStatementTypes(statements[2], dynamicType, stringType);
+    assertAssignmentStatementTypes(statements[3], intType, stringType);
+    assertAssignmentStatementTypes(statements[4], dynamicType, stringType);
+    assertAssignmentStatementTypes(statements[5], intType, stringType);
+  }
+
+  // Test inference across units (non-cyclic)
+  void test_perform_inference_cross_unit_non_cyclic() {
+    AnalysisTarget firstSource = newSource(
+        '/a.dart',
+        '''
+          var x = 2;
+          class A { static var x = 2; }
+''');
+    AnalysisTarget secondSource = newSource(
+        '/test.dart',
+        '''
+          import 'a.dart';
+          var y = x;
+          class B { static var y = A.x; }
+
+          test1() {
+            x = /*severe:StaticTypeError*/"hi";
+            y = /*severe:StaticTypeError*/"hi";
+            A.x = /*severe:StaticTypeError*/"hi";
+            B.y = /*severe:StaticTypeError*/"hi";
+          }
+''');
+    computeResult(
+        new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT8);
+    CompilationUnit unit1 = outputs[RESOLVED_UNIT8];
+    computeResult(
+        new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT8);
+    CompilationUnit unit2 = outputs[RESOLVED_UNIT8];
+
+    InterfaceType intType = context.typeProvider.intType;
+    InterfaceType stringType = context.typeProvider.stringType;
+    DartType dynamicType = context.typeProvider.dynamicType;
+
+    assertVariableDeclarationTypes(
+        getTopLevelVariable(unit1, "x"), intType, intType);
+    assertVariableDeclarationTypes(
+        getFieldInClass(unit1, "A", "x"), intType, intType);
+
+    assertVariableDeclarationTypes(
+        getTopLevelVariable(unit2, "y"), intType, intType);
+    assertVariableDeclarationTypes(
+        getFieldInClass(unit2, "B", "y"), intType, intType);
+
+    List<Statement> statements =
+        getStatementsInTopLevelFunction(unit2, "test1");
+
+    assertAssignmentStatementTypes(statements[0], intType, stringType);
+    assertAssignmentStatementTypes(statements[1], intType, stringType);
+  }
+
+  // Test inference across units (cyclic)
+  void test_perform_inference_cross_unit_cyclic() {
+    AnalysisTarget firstSource = newSource(
+        '/a.dart',
+        '''
+          import 'test.dart';
+          var x = 2;
+          class A { static var x = 2; }
+''');
+    AnalysisTarget secondSource = newSource(
+        '/test.dart',
+        '''
+          import 'a.dart';
+          var y = x;
+          class B { static var y = A.x; }
+
+          test1() {
+            int t = 3;
+            t = x;
+            t = y;
+            t = A.x;
+            t = B.y;
+          }
+''');
+    computeResult(
+        new LibrarySpecificUnit(firstSource, firstSource), RESOLVED_UNIT8);
+    CompilationUnit unit1 = outputs[RESOLVED_UNIT8];
+    computeResult(
+        new LibrarySpecificUnit(secondSource, secondSource), RESOLVED_UNIT8);
+    CompilationUnit unit2 = outputs[RESOLVED_UNIT8];
+
+    InterfaceType intType = context.typeProvider.intType;
+    InterfaceType stringType = context.typeProvider.stringType;
+
+    assertVariableDeclarationTypes(
+        getTopLevelVariable(unit1, "x"), intType, intType);
+    assertVariableDeclarationTypes(
+        getFieldInClass(unit1, "A", "x"), intType, intType);
+
+    assertVariableDeclarationTypes(
+        getTopLevelVariable(unit2, "y"), intType, intType);
+    assertVariableDeclarationTypes(
+        getFieldInClass(unit2, "B", "y"), intType, intType);
+
+    List<Statement> statements =
+        getStatementsInTopLevelFunction(unit2, "test1");
+
+    assertAssignmentStatementTypes(statements[1], intType, intType);
+    assertAssignmentStatementTypes(statements[2], intType, intType);
+    assertAssignmentStatementTypes(statements[3], intType, intType);
+    assertAssignmentStatementTypes(statements[4], intType, intType);
+  }
+
+  // Test inference of instance fields across units
+  // TODO(leafp): Fix this
+  // https://github.com/dart-lang/dev_compiler/issues/354
+  void fail_perform_inference_cross_unit_instance() {
+    List<Source> sources = newSources({
+      '/a7.dart': '''
+          import 'b7.dart';
+          class A {
+            final a2 = new B().b2;
+          }
+      ''',
+      '/b7.dart': '''
+          class B {
+            final b2 = 1;
+          }
+      ''',
+      '/main7.dart': '''
+          import "a7.dart";
+
+          test1() {
+            int x = 0;
+            x = new A().a2;
+          }
+    '''
+    });
+    List<dynamic> units =
+        computeLibraryResults(sources, RESOLVED_UNIT8).toList();
+    CompilationUnit unit0 = units[0];
+    CompilationUnit unit1 = units[1];
+    CompilationUnit unit2 = units[2];
+
+    InterfaceType intType = context.typeProvider.intType;
+
+    assertVariableDeclarationTypes(
+        getFieldInClass(unit0, "A", "a2"), intType, intType);
+
+    assertVariableDeclarationTypes(
+        getFieldInClass(unit1, "B", "b2"), intType, intType);
+
+    List<Statement> statements =
+        getStatementsInTopLevelFunction(unit2, "test1");
+
+    assertAssignmentStatementTypes(statements[1], intType, intType);
+  }
+
+  // Test inference between static and instance fields
+  // TODO(leafp): Fix this
+  // https://github.com/dart-lang/dev_compiler/issues/354
+  void fail_perform_inference_cross_unit_static_instance() {
+    List<Source> sources = newSources({
+      '/a.dart': '''
+          import 'b.dart';
+          class A {
+            static final a1 = B.b1;
+            final a2 = new B().b2;
+          }
+      ''',
+      '/b.dart': '''
+          class B {
+            static final b1 = 1;
+            final b2 = 1;
+          }
+      ''',
+      '/main.dart': '''
+          import "a.dart";
+
+          test1() {
+            int x = 0;
+            // inference in A now works.
+            x = A.a1;
+            x = new A().a2;
+          }
+    '''
+    });
+    List<dynamic> units =
+        computeLibraryResults(sources, RESOLVED_UNIT8).toList();
+    CompilationUnit unit0 = units[0];
+    CompilationUnit unit1 = units[1];
+    CompilationUnit unit2 = units[2];
+
+    InterfaceType intType = context.typeProvider.intType;
+
+    assertVariableDeclarationTypes(
+        getFieldInClass(unit0, "A", "a1"), intType, intType);
+    assertVariableDeclarationTypes(
+        getFieldInClass(unit0, "A", "a2"), intType, intType);
+
+    assertVariableDeclarationTypes(
+        getFieldInClass(unit1, "B", "b1"), intType, intType);
+    assertVariableDeclarationTypes(
+        getFieldInClass(unit1, "B", "b2"), intType, intType);
+
+    List<Statement> statements =
+        getStatementsInTopLevelFunction(unit2, "test1");
+
+    assertAssignmentStatementTypes(statements[1], intType, intType);
+    assertAssignmentStatementTypes(statements[2], intType, intType);
+  }
+}
+
+@reflectiveTest
 class ResolveLibraryTypeNamesTaskTest extends _AbstractDartTaskTest {
   test_perform() {
     Source sourceLib = newSource(
@@ -2791,6 +3387,23 @@
     errorListener.assertErrorsWithCodes(
         <ErrorCode>[StaticTypeWarningCode.NON_BOOL_CONDITION]);
   }
+
+  void test_perform_reresolution() {
+    enableStrongMode();
+    AnalysisTarget source = newSource(
+        '/test.dart',
+        '''
+const topLevel = 3;
+class C {
+  String field = topLevel;
+}
+''');
+    computeResult(new LibrarySpecificUnit(source, source), VERIFY_ERRORS);
+    // validate
+    _fillErrorListener(VERIFY_ERRORS);
+    errorListener.assertErrorsWithCodes(
+        <ErrorCode>[StaticTypeWarningCode.INVALID_ASSIGNMENT]);
+  }
 }
 
 class _AbstractDartTaskTest extends AbstractContextTest {
@@ -2816,6 +3429,17 @@
     });
   }
 
+  List<dynamic> computeLibraryResults(
+      List<Source> sources, ResultDescriptor result,
+      {isInstanceOf matcher: null}) {
+    dynamic compute(Source source) {
+      computeResult(new LibrarySpecificUnit(source, source), result,
+          matcher: matcher);
+      return outputs[result];
+    }
+    return sources.map(compute).toList();
+  }
+
   /**
    * Create a script object with a single fragment containing the given
    * [scriptContent].
@@ -2901,6 +3525,20 @@
     return null;
   }
 
+  List<Statement> getStatementsInMethod(
+      CompilationUnit unit, String className, String methodName) {
+    MethodDeclaration method = getMethodInClass(unit, className, methodName);
+    BlockFunctionBody body = method.body;
+    return body.block.statements;
+  }
+
+  List<Statement> getStatementsInTopLevelFunction(
+      CompilationUnit unit, String functionName) {
+    FunctionDeclaration function = getTopLevelFunction(unit, functionName);
+    BlockFunctionBody body = function.functionExpression.body;
+    return body.block.statements;
+  }
+
   /**
    * Return the declaration of the top-level variable with the given
    * [variableName] in the given compilation [unit].
@@ -2922,6 +3560,23 @@
     return null;
   }
 
+  /**
+   * Return the declaration of the top-level function with the given
+   * [functionName] in the given compilation [unit].
+   */
+  FunctionDeclaration getTopLevelFunction(
+      CompilationUnit unit, String functionName) {
+    NodeList<CompilationUnitMember> unitMembers = unit.declarations;
+    for (CompilationUnitMember unitMember in unitMembers) {
+      if (unitMember is FunctionDeclaration) {
+        if (unitMember.name.name == functionName) {
+          return unitMember;
+        }
+      }
+    }
+    return null;
+  }
+
   void setUp() {
     super.setUp();
     emptySource = newSource('/test.dart');
diff --git a/pkg/analyzer/test/src/task/dart_work_manager_test.dart b/pkg/analyzer/test/src/task/dart_work_manager_test.dart
index d8b9cae..e15aa7b 100644
--- a/pkg/analyzer/test/src/task/dart_work_manager_test.dart
+++ b/pkg/analyzer/test/src/task/dart_work_manager_test.dart
@@ -576,9 +576,14 @@
     Source library2 = new TestSource('library2.dart');
     _getOrCreateEntry(part1).setValue(CONTAINING_LIBRARIES, [], []);
     expect(cache.getState(part1, CONTAINING_LIBRARIES), CacheState.VALID);
+    // configure AnalysisContext mock
+    when(context.prioritySources).thenReturn(<Source>[]);
+    when(context.shouldErrorsBeAnalyzed(anyObject, anyObject))
+        .thenReturn(false);
     // library1 parts
     manager.resultsComputed(library1, {
-      INCLUDED_PARTS: [part1, part2]
+      INCLUDED_PARTS: [part1, part2],
+      SOURCE_KIND: SourceKind.LIBRARY
     });
     expect(manager.partLibrariesMap[part1], [library1]);
     expect(manager.partLibrariesMap[part2], [library1]);
@@ -587,7 +592,8 @@
     expect(manager.libraryPartsMap[library2], isNull);
     // library2 parts
     manager.resultsComputed(library2, {
-      INCLUDED_PARTS: [part2, part3]
+      INCLUDED_PARTS: [part2, part3],
+      SOURCE_KIND: SourceKind.LIBRARY
     });
     expect(manager.partLibrariesMap[part1], [library1]);
     expect(manager.partLibrariesMap[part2], [library1, library2]);
@@ -681,6 +687,15 @@
     expect_unknownSourceQueue([source1, source3]);
   }
 
+  void test_resultsComputed_updatePartsLibraries_partParsed() {
+    Source part = new TestSource('part.dart');
+    expect(manager.libraryPartsMap, isEmpty);
+    // part.dart parsed, no changes is the map of libraries
+    manager.resultsComputed(
+        part, {SOURCE_KIND: SourceKind.PART, INCLUDED_PARTS: <Source>[]});
+    expect(manager.libraryPartsMap, isEmpty);
+  }
+
   CacheEntry _getOrCreateEntry(Source source) {
     CacheEntry entry = cache.get(source);
     if (entry == null) {
diff --git a/pkg/analyzer/test/src/task/strong_mode_test.dart b/pkg/analyzer/test/src/task/strong_mode_test.dart
index ccc274f..fbbbae6 100644
--- a/pkg/analyzer/test/src/task/strong_mode_test.dart
+++ b/pkg/analyzer/test/src/task/strong_mode_test.dart
@@ -241,6 +241,32 @@
     expect(getterB.returnType, getterA.returnType);
   }
 
+  void test_inferCompilationUnit_field_single_final_narrowType() {
+    InstanceMemberInferrer inferrer = createInferrer;
+    String fieldName = 'f';
+    CompilationUnitElement unit = resolve('''
+class A {
+  final $fieldName;
+}
+class B extends A {
+  final $fieldName = 0;
+}
+''');
+    ClassElement classA = unit.getType('A');
+    FieldElement fieldA = classA.getField(fieldName);
+    PropertyAccessorElement getterA = classA.getGetter(fieldName);
+    ClassElement classB = unit.getType('B');
+    FieldElement fieldB = classB.getField(fieldName);
+    PropertyAccessorElement getterB = classB.getGetter(fieldName);
+    expect(fieldB.type.isDynamic, isTrue);
+    expect(getterB.returnType.isDynamic, isTrue);
+
+    inferrer.inferCompilationUnit(unit);
+
+    expect(fieldB.type, inferrer.typeProvider.intType);
+    expect(getterB.returnType, fieldB.type);
+  }
+
   void test_inferCompilationUnit_field_single_generic() {
     InstanceMemberInferrer inferrer = createInferrer;
     String fieldName = 'f';
@@ -458,6 +484,9 @@
   var get $getterName => 1;
 }
 ''');
+    ClassElement classA = unit.getType('A');
+    FieldElement fieldA = classA.getField(getterName);
+    PropertyAccessorElement getterA = classA.getGetter(getterName);
     ClassElement classB = unit.getType('B');
     FieldElement fieldB = classB.getField(getterName);
     PropertyAccessorElement getterB = classB.getGetter(getterName);
@@ -466,8 +495,92 @@
 
     inferrer.inferCompilationUnit(unit);
 
+    // Expected behavior is that the getter is inferred: getters and setters
+    // are treated as independent methods.
+    expect(fieldB.type, fieldA.type);
+    expect(getterB.returnType, getterA.returnType);
+  }
+
+  void test_inferCompilationUnit_setter_single() {
+    InstanceMemberInferrer inferrer = createInferrer;
+    String setterName = 'g';
+    CompilationUnitElement unit = resolve('''
+class A {
+  set $setterName(int x) {}
+}
+class B extends A {
+  set $setterName(x) {}
+}
+''');
+    ClassElement classA = unit.getType('A');
+    FieldElement fieldA = classA.getField(setterName);
+    PropertyAccessorElement setterA = classA.getSetter(setterName);
+    ClassElement classB = unit.getType('B');
+    FieldElement fieldB = classB.getField(setterName);
+    PropertyAccessorElement setterB = classB.getSetter(setterName);
     expect(fieldB.type.isDynamic, isTrue);
-    expect(getterB.returnType.isDynamic, isTrue);
+    expect(setterB.parameters[0].type.isDynamic, isTrue);
+
+    inferrer.inferCompilationUnit(unit);
+
+    expect(fieldB.type, fieldA.type);
+    expect(setterB.parameters[0].type, setterA.parameters[0].type);
+  }
+
+  void test_inferCompilationUnit_setter_single_generic() {
+    InstanceMemberInferrer inferrer = createInferrer;
+    String setterName = 'g';
+    CompilationUnitElement unit = resolve('''
+class A<E> {
+  set $setterName(E x) {}
+}
+class B<E> extends A<E> {
+  set $setterName(x) {}
+}
+''');
+    ClassElement classB = unit.getType('B');
+    DartType typeBE = classB.typeParameters[0].type;
+    FieldElement fieldB = classB.getField(setterName);
+    PropertyAccessorElement setterB = classB.getSetter(setterName);
+    expect(fieldB.type.isDynamic, isTrue);
+    expect(setterB.parameters[0].type.isDynamic, isTrue);
+
+    inferrer.inferCompilationUnit(unit);
+
+    expect(fieldB.type, typeBE);
+    expect(setterB.parameters[0].type, typeBE);
+  }
+
+  void test_inferCompilationUnit_setter_single_inconsistentAccessors() {
+    InstanceMemberInferrer inferrer = createInferrer;
+    String getterName = 'g';
+    CompilationUnitElement unit = resolve('''
+class A {
+  int get $getterName => 0;
+  set $getterName(String value) {}
+}
+class B extends A {
+  set $getterName(x) {}
+}
+''');
+    ClassElement classA = unit.getType('A');
+    FieldElement fieldA = classA.getField(getterName);
+    PropertyAccessorElement setterA = classA.getSetter(getterName);
+    ClassElement classB = unit.getType('B');
+    FieldElement fieldB = classB.getField(getterName);
+    PropertyAccessorElement setterB = classB.getSetter(getterName);
+    expect(fieldB.type.isDynamic, isTrue);
+    expect(setterB.parameters[0].type.isDynamic, isTrue);
+
+    inferrer.inferCompilationUnit(unit);
+
+    // Expected behavior is that the getter is inferred: getters and setters
+    // are treated as independent methods.
+    expect(setterB.parameters[0].type, setterA.parameters[0].type);
+
+    // Note that B's synthetic field type will be String. This matches what
+    // resolver would do if we explicitly typed the parameter as 'String'
+    expect(fieldB.type, setterB.parameters[0].type);
   }
 
   void test_inferCompilationUnit_invalid_inheritanceCycle() {
@@ -620,13 +733,17 @@
 }
 ''');
     ClassElement classC = unit.getType('C');
+    DartType typeCE = classC.typeParameters[0].type;
     MethodElement methodC = classC.getMethod(methodName);
     ParameterElement parameterC = methodC.parameters[0];
     expect(parameterC.type.isDynamic, isTrue);
+    expect(methodC.type.typeArguments, [typeCE]);
 
     inferrer.inferCompilationUnit(unit);
 
     expect(parameterC.type, classC.typeParameters[0].type);
+    expect(methodC.type.typeArguments, [typeCE],
+        reason: 'function type should still have type arguments');
   }
 
   void test_inferCompilationUnit_method_return_multiple_different() {
@@ -830,12 +947,39 @@
 }
 ''');
     ClassElement classB = unit.getType('B');
+    DartType typeBE = classB.typeParameters[0].type;
     MethodElement methodB = classB.getMethod(methodName);
     expect(methodB.returnType.isDynamic, isTrue);
+    expect(methodB.type.typeArguments, [typeBE]);
 
     inferrer.inferCompilationUnit(unit);
 
     expect(methodB.returnType, classB.typeParameters[0].type);
+    expect(methodB.type.typeArguments, [typeBE],
+        reason: 'function type should still have type arguments');
+  }
+
+  void test_inferCompilationUnit_fieldFormal() {
+    InstanceMemberInferrer inferrer = createInferrer;
+    String fieldName = 'f';
+    CompilationUnitElement unit = resolve('''
+class A {
+  final $fieldName = 0;
+  A([this.$fieldName = 'hello']);
+}
+''');
+    ClassElement classA = unit.getType('A');
+    FieldElement fieldA = classA.getField(fieldName);
+    FieldFormalParameterElement paramA =
+        classA.unnamedConstructor.parameters[0];
+    expect(fieldA.type.isDynamic, isTrue);
+    expect(paramA.type.isDynamic, isTrue);
+
+    inferrer.inferCompilationUnit(unit);
+
+    DartType intType = inferrer.typeProvider.intType;
+    expect(fieldA.type, intType);
+    expect(paramA.type, intType);
   }
 }
 
diff --git a/pkg/analyzer/test/src/test_all.dart b/pkg/analyzer/test/src/test_all.dart
index 5aefb66..f9ad08a 100644
--- a/pkg/analyzer/test/src/test_all.dart
+++ b/pkg/analyzer/test/src/test_all.dart
@@ -8,6 +8,7 @@
 
 import '../utils.dart';
 import 'context/test_all.dart' as context;
+import 'plugin/plugin_config_test.dart' as plugin;
 import 'task/test_all.dart' as task;
 import 'util/test_all.dart' as util;
 
@@ -16,6 +17,7 @@
   initializeTestEnvironment();
   group('src tests', () {
     context.main();
+    plugin.main();
     task.main();
     util.main();
   });
diff --git a/pkg/compiler/lib/src/apiimpl.dart b/pkg/compiler/lib/src/apiimpl.dart
index 357404f..7f5ce65 100644
--- a/pkg/compiler/lib/src/apiimpl.dart
+++ b/pkg/compiler/lib/src/apiimpl.dart
@@ -23,6 +23,8 @@
 import 'common/tasks.dart' show
     GenericTask;
 import 'compiler.dart' as leg;
+import 'diagnostics/diagnostic_listener.dart' show
+    DiagnosticMessage;
 import 'diagnostics/messages.dart';
 import 'diagnostics/source_span.dart' show
     SourceSpan;
@@ -32,7 +34,6 @@
 import 'elements/elements.dart' as elements;
 import 'io/source_file.dart';
 import 'script.dart';
-import 'tree/tree.dart' as tree;
 
 const bool forceIncrementalSupport =
     const bool.fromEnvironment('DART2JS_EXPERIMENTAL_INCREMENTAL_SUPPORT');
@@ -246,13 +247,13 @@
     elements.Element element = currentElement;
     void reportReadError(exception) {
       if (element == null || node == null) {
-        reportError(
+        reportErrorMessage(
             new SourceSpan(readableUri, 0, 0),
             MessageKind.READ_SELF_ERROR,
             {'uri': readableUri, 'exception': exception});
       } else {
         withCurrentElement(element, () {
-          reportError(
+          reportErrorMessage(
               node,
               MessageKind.READ_SCRIPT_ERROR,
               {'uri': readableUri, 'exception': exception});
@@ -265,7 +266,8 @@
     if (resourceUri.scheme == 'dart-ext') {
       if (!allowNativeExtensions) {
         withCurrentElement(element, () {
-          reportError(node, MessageKind.DART_EXT_NOT_SUPPORTED);
+          reportErrorMessage(
+              node, MessageKind.DART_EXT_NOT_SUPPORTED);
         });
       }
       return synthesizeScript(node, readableUri);
@@ -335,13 +337,13 @@
       }
       if (!allowInternalLibraryAccess) {
         if (importingLibrary != null) {
-          reportError(
+          reportErrorMessage(
               spannable,
               MessageKind.INTERNAL_LIBRARY_FROM,
               {'resolvedUri': resolvedUri,
                'importingUri': importingLibrary.canonicalUri});
         } else {
-          reportError(
+          reportErrorMessage(
               spannable,
               MessageKind.INTERNAL_LIBRARY,
               {'resolvedUri': resolvedUri});
@@ -350,11 +352,15 @@
     }
     if (path == null) {
       if (libraryInfo == null) {
-        reportError(spannable, MessageKind.LIBRARY_NOT_FOUND,
-                    {'resolvedUri': resolvedUri});
+        reportErrorMessage(
+            spannable,
+            MessageKind.LIBRARY_NOT_FOUND,
+            {'resolvedUri': resolvedUri});
       } else {
-        reportError(spannable, MessageKind.LIBRARY_NOT_SUPPORTED,
-                    {'resolvedUri': resolvedUri});
+        reportErrorMessage(
+            spannable,
+            MessageKind.LIBRARY_NOT_SUPPORTED,
+            {'resolvedUri': resolvedUri});
       }
       // TODO(johnniwinther): Support signaling the error through the returned
       // value.
@@ -379,7 +385,7 @@
     try {
       checkValidPackageUri(uri);
     } on ArgumentError catch (e) {
-      reportError(
+      reportErrorMessage(
           node,
           MessageKind.INVALID_PACKAGE_URI,
           {'uri': uri, 'exception': e.message});
@@ -387,11 +393,10 @@
     }
     return packages.resolve(uri,
         notFound: (Uri notFound) {
-          reportError(
+          reportErrorMessage(
               node,
               MessageKind.LIBRARY_NOT_FOUND,
-              {'resolvedUri': uri}
-          );
+              {'resolvedUri': uri});
           return null;
         });
   }
@@ -426,7 +431,9 @@
         packages =
             new MapPackages(pkgs.parse(packageConfigContents, packageConfig));
       }).catchError((error) {
-        reportError(NO_LOCATION_SPANNABLE, MessageKind.INVALID_PACKAGE_CONFIG,
+        reportErrorMessage(
+            NO_LOCATION_SPANNABLE,
+            MessageKind.INVALID_PACKAGE_CONFIG,
             {'uri': packageConfig, 'exception': error});
         packages = Packages.noPackages;
       });
@@ -455,6 +462,10 @@
           if (elapsed != 0) {
             cumulated += elapsed;
             log('${task.name} took ${elapsed}msec');
+            for (String subtask in task.subtasks) {
+              int subtime = task.getSubtaskTime(subtask);
+              log('${task.name} > $subtask took ${subtime}msec');
+            }
           }
         }
         int total = totalCompileTime.elapsedMilliseconds;
@@ -465,17 +476,26 @@
     });
   }
 
-  void reportDiagnostic(Spannable node,
-                        Message message,
+  void reportDiagnostic(DiagnosticMessage message,
+                        List<DiagnosticMessage> infos,
                         api.Diagnostic kind) {
-    SourceSpan span = spanFromSpannable(node);
-    if (identical(kind, api.Diagnostic.ERROR)
-        || identical(kind, api.Diagnostic.CRASH)
-        || (fatalWarnings && identical(kind, api.Diagnostic.WARNING))) {
+    if (kind == api.Diagnostic.ERROR ||
+        kind == api.Diagnostic.CRASH ||
+        (fatalWarnings && kind == api.Diagnostic.WARNING)) {
       compilationFailed = true;
     }
+    _reportDiagnosticMessage(message, kind);
+    for (DiagnosticMessage info in infos) {
+      _reportDiagnosticMessage(info, api.Diagnostic.INFO);
+    }
+  }
+
+  void _reportDiagnosticMessage(DiagnosticMessage diagnosticMessage,
+                                api.Diagnostic kind) {
     // [:span.uri:] might be [:null:] in case of a [Script] with no [uri]. For
     // instance in the [Types] constructor in typechecker.dart.
+    SourceSpan span = diagnosticMessage.sourceSpan;
+    Message message = diagnosticMessage.message;
     if (span == null || span.uri == null) {
       callUserHandler(message, null, null, null, '$message', kind);
     } else {
diff --git a/pkg/compiler/lib/src/common/backend_api.dart b/pkg/compiler/lib/src/common/backend_api.dart
index 71c8616..487f01d 100644
--- a/pkg/compiler/lib/src/common/backend_api.dart
+++ b/pkg/compiler/lib/src/common/backend_api.dart
@@ -153,9 +153,21 @@
                                  Enqueuer enqueuer,
                                  Registry registry) {}
 
-  /// Called to notify to the backend that an interface type has been
-  /// instantiated.
-  void registerInstantiatedType(InterfaceType type, Registry registry) {}
+  /// Called to notify to the backend that a class is implemented by an
+  /// instantiated class.
+  void registerImplementedClass(ClassElement cls,
+                                Enqueuer enqueuer,
+                                Registry registry) {}
+
+  /// Called to instruct to the backend register [type] as instantiated on
+  /// [enqueuer].
+  void registerInstantiatedType(InterfaceType type,
+                                Enqueuer enqueuer,
+                                Registry registry,
+                                {bool mirrorUsage: false}) {
+    registry.registerDependency(type.element);
+    enqueuer.registerInstantiatedType(type, mirrorUsage: mirrorUsage);
+  }
 
   /// Register an is check to the backend.
   void registerIsCheckForCodegen(DartType type,
@@ -176,14 +188,14 @@
       Enqueuer enqueuer,
       Registry registry) {}
 
-  /**
-   * Call this to register that a getter exists for a function on an
-   * instantiated generic class.
-   */
+  /// Called to instruct the backend to register that a closure exists for a
+  /// function on an instantiated generic class.
   void registerClosureWithFreeTypeVariables(
       Element closure,
       Enqueuer enqueuer,
-      Registry registry) {}
+      Registry registry) {
+    enqueuer.universe.closuresWithFreeTypeVariables.add(closure);
+  }
 
   /// Call this to register that a member has been closurized.
   void registerBoundClosure(Enqueuer enqueuer) {}
diff --git a/pkg/compiler/lib/src/common/codegen.dart b/pkg/compiler/lib/src/common/codegen.dart
index 9a95982..e220aab 100644
--- a/pkg/compiler/lib/src/common/codegen.dart
+++ b/pkg/compiler/lib/src/common/codegen.dart
@@ -50,6 +50,8 @@
 
   Element get currentElement => treeElements.analyzedElement;
 
+  String toString() => 'CodegenRegistry for $currentElement';
+
   // TODO(johnniwinther): Remove this getter when [Registry] creates a
   // dependency node.
   Setlet<Element> get otherDependencies => treeElements.otherDependencies;
@@ -73,11 +75,11 @@
   }
 
   void registerInstantiatedClass(ClassElement element) {
-    world.registerInstantiatedType(element.rawType, this);
+    backend.registerInstantiatedType(element.rawType, world, this);
   }
 
   void registerInstantiatedType(InterfaceType type) {
-    world.registerInstantiatedType(type, this);
+    backend.registerInstantiatedType(type, world, this);
   }
 
   void registerStaticUse(Element element) {
@@ -167,7 +169,7 @@
   }
 
   void registerInstantiation(InterfaceType type) {
-    world.registerInstantiatedType(type, this);
+    backend.registerInstantiatedType(type, world, this);
   }
 
   void registerAsyncMarker(FunctionElement element) {
diff --git a/pkg/compiler/lib/src/common/tasks.dart b/pkg/compiler/lib/src/common/tasks.dart
index 1cc3902..32966df 100644
--- a/pkg/compiler/lib/src/common/tasks.dart
+++ b/pkg/compiler/lib/src/common/tasks.dart
@@ -24,15 +24,22 @@
   final Compiler compiler;
   final Stopwatch watch;
   UserTag profilerTag;
+  final Map<String, GenericTask> _subtasks = <String, GenericTask>{};
 
   CompilerTask(Compiler compiler)
       : this.compiler = compiler,
         watch = (compiler.verbose) ? new Stopwatch() : null;
 
   String get name => "Unknown task '${this.runtimeType}'";
-  int get timing => (watch != null) ? watch.elapsedMilliseconds : 0;
 
-  int get timingMicroseconds => (watch != null) ? watch.elapsedMicroseconds : 0;
+  int get timing {
+    if (watch == null) return 0;
+    int total = watch.elapsedMilliseconds;
+    for (GenericTask subtask in _subtasks.values) {
+      total += subtask.timing;
+    }
+    return total;
+  }
 
   UserTag getProfilerTag() {
     if (profilerTag == null) profilerTag = new UserTag(name);
@@ -61,6 +68,22 @@
   measureElement(Element element, action()) {
     compiler.withCurrentElement(element, () => measure(action));
   }
+
+  /// Measure the time spent in [action] (if in verbose mode) and accumulate it
+  /// under a subtask with the given name.
+  measureSubtask(String name, action()) {
+    if (watch == null) return action();
+    // Use a nested CompilerTask for the measurement to ensure nested [measure]
+    // calls work correctly. The subtasks will never themselves have nested
+    // subtasks because they are not accessible outside.
+    GenericTask subtask = _subtasks.putIfAbsent(name,
+        () => new GenericTask(name, compiler));
+    return subtask.measure(action);
+  }
+
+  Iterable<String> get subtasks => _subtasks.keys;
+
+  int getSubtaskTime(String subtask) => _subtasks[subtask].timing;
 }
 
 class GenericTask extends CompilerTask {
diff --git a/pkg/compiler/lib/src/compile_time_constants.dart b/pkg/compiler/lib/src/compile_time_constants.dart
index 2f95b7b..dba9976 100644
--- a/pkg/compiler/lib/src/compile_time_constants.dart
+++ b/pkg/compiler/lib/src/compile_time_constants.dart
@@ -221,7 +221,8 @@
     Node node = element.node;
     if (pendingVariables.contains(element)) {
       if (isConst) {
-        compiler.reportError(node, MessageKind.CYCLIC_COMPILE_TIME_CONSTANTS);
+        compiler.reportErrorMessage(
+            node, MessageKind.CYCLIC_COMPILE_TIME_CONSTANTS);
         ConstantExpression expression = new ErroneousConstantExpression();
         constantValueMap[expression] = constantSystem.createNull();
         return expression;
@@ -248,7 +249,7 @@
         if (elementType.isMalformed && !value.isNull) {
           if (isConst) {
             ErroneousElement element = elementType.element;
-            compiler.reportError(
+            compiler.reportErrorMessage(
                 node, element.messageKind, element.messageArguments);
           } else {
             // We need to throw an exception at runtime.
@@ -259,10 +260,11 @@
           if (!constantSystem.isSubtype(
               compiler.types, constantType, elementType)) {
             if (isConst) {
-              compiler.reportError(node, MessageKind.NOT_ASSIGNABLE, {
-                'fromType': constantType,
-                'toType': elementType
-              });
+              compiler.reportErrorMessage(
+                  node,
+                  MessageKind.NOT_ASSIGNABLE,
+                  {'fromType': constantType,
+                   'toType': elementType});
             } else {
               // If the field cannot be lazily initialized, we will throw
               // the exception at runtime.
@@ -446,7 +448,8 @@
       if (!map.containsKey(key.value)) {
         keyValues.add(key.value);
       } else {
-        compiler.reportWarning(entry.key, MessageKind.EQUAL_MAP_ENTRY_KEY);
+        compiler.reportWarningMessage(
+            entry.key, MessageKind.EQUAL_MAP_ENTRY_KEY);
       }
       keyExpressions.add(key.expression);
       valueExpressions.add(value.expression);
@@ -620,7 +623,8 @@
       }
       if (isDeferredUse(send)) {
         if (isEvaluatingConstant) {
-          error(send, MessageKind.DEFERRED_COMPILE_TIME_CONSTANT);
+          compiler.reportErrorMessage(
+              send, MessageKind.DEFERRED_COMPILE_TIME_CONSTANT);
         }
         PrefixElement prefix =
             compiler.deferredLoadTask.deferredPrefixElement(send, elements);
@@ -719,10 +723,11 @@
     } else if (!condition.value.isBool) {
       DartType conditionType = condition.value.getType(compiler.coreTypes);
       if (isEvaluatingConstant) {
-        compiler.reportError(node.condition, MessageKind.NOT_ASSIGNABLE, {
-          'fromType': conditionType,
-          'toType': compiler.boolClass.rawType
-        });
+        compiler.reportErrorMessage(
+            node.condition,
+            MessageKind.NOT_ASSIGNABLE,
+            {'fromType': conditionType,
+             'toType': compiler.boolClass.rawType});
         return new ErroneousAstConstant(context, node);
       }
       return null;
@@ -767,9 +772,9 @@
     if (!callStructure.signatureApplies(signature)) {
       String name = Elements.constructorNameForDiagnostics(
           target.enclosingClass.name, target.name);
-      compiler.reportError(node, MessageKind.INVALID_CONSTRUCTOR_ARGUMENTS, {
-        'constructorName': name
-      });
+      compiler.reportErrorMessage(
+          node, MessageKind.INVALID_CONSTRUCTOR_ARGUMENTS,
+          {'constructorName': name});
 
       return new List<AstConstant>.filled(
           target.functionSignature.parameterCount,
@@ -871,51 +876,51 @@
     ConstantValue defaultValue = normalizedArguments[1].value;
 
     if (firstArgument.isNull) {
-      compiler.reportError(
+      compiler.reportErrorMessage(
           normalizedArguments[0].node, MessageKind.NULL_NOT_ALLOWED);
       return null;
     }
 
     if (!firstArgument.isString) {
       DartType type = defaultValue.getType(compiler.coreTypes);
-      compiler.reportError(normalizedArguments[0].node,
-          MessageKind.NOT_ASSIGNABLE, {
-        'fromType': type,
-        'toType': compiler.stringClass.rawType
-      });
+      compiler.reportErrorMessage(
+          normalizedArguments[0].node,
+          MessageKind.NOT_ASSIGNABLE,
+          {'fromType': type,
+           'toType': compiler.stringClass.rawType});
       return null;
     }
 
     if (constructor == compiler.intEnvironment &&
         !(defaultValue.isNull || defaultValue.isInt)) {
       DartType type = defaultValue.getType(compiler.coreTypes);
-      compiler.reportError(normalizedArguments[1].node,
-          MessageKind.NOT_ASSIGNABLE, {
-        'fromType': type,
-        'toType': compiler.intClass.rawType
-      });
+      compiler.reportErrorMessage(
+          normalizedArguments[1].node,
+          MessageKind.NOT_ASSIGNABLE,
+          {'fromType': type,
+           'toType': compiler.intClass.rawType});
       return null;
     }
 
     if (constructor == compiler.boolEnvironment &&
         !(defaultValue.isNull || defaultValue.isBool)) {
       DartType type = defaultValue.getType(compiler.coreTypes);
-      compiler.reportError(normalizedArguments[1].node,
-          MessageKind.NOT_ASSIGNABLE, {
-        'fromType': type,
-        'toType': compiler.boolClass.rawType
-      });
+      compiler.reportErrorMessage(
+          normalizedArguments[1].node,
+          MessageKind.NOT_ASSIGNABLE,
+          {'fromType': type,
+           'toType': compiler.boolClass.rawType});
       return null;
     }
 
     if (constructor == compiler.stringEnvironment &&
         !(defaultValue.isNull || defaultValue.isString)) {
       DartType type = defaultValue.getType(compiler.coreTypes);
-      compiler.reportError(normalizedArguments[1].node,
-          MessageKind.NOT_ASSIGNABLE, {
-        'fromType': type,
-        'toType': compiler.stringClass.rawType
-      });
+      compiler.reportErrorMessage(
+          normalizedArguments[1].node,
+          MessageKind.NOT_ASSIGNABLE,
+          {'fromType': type,
+           'toType': compiler.stringClass.rawType});
       return null;
     }
 
@@ -1002,16 +1007,10 @@
     return node.expression.accept(this);
   }
 
-  error(Node node, MessageKind message) {
-    // TODO(floitsch): get the list of constants that are currently compiled
-    // and present some kind of stack-trace.
-    compiler.reportError(node, message);
-  }
-
   AstConstant signalNotCompileTimeConstant(Node node,
       {MessageKind message: MessageKind.NOT_A_COMPILE_TIME_CONSTANT}) {
     if (isEvaluatingConstant) {
-      error(node, message);
+      compiler.reportErrorMessage(node, message);
 
       return new AstConstant(context, node, new ErroneousConstantExpression(),
           new NullConstantValue());
@@ -1065,10 +1064,11 @@
       if (!constantSystem.isSubtype(
           compiler.types, constantType, elementType)) {
         compiler.withCurrentElement(constant.element, () {
-          compiler.reportError(constant.node, MessageKind.NOT_ASSIGNABLE, {
-            'fromType': constantType,
-            'toType': elementType
-          });
+          compiler.reportErrorMessage(
+              constant.node,
+              MessageKind.NOT_ASSIGNABLE,
+              {'fromType': constantType,
+               'toType': elementType});
         });
       }
     }
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
index 0ccc51a..86a87f3 100644
--- a/pkg/compiler/lib/src/compiler.dart
+++ b/pkg/compiler/lib/src/compiler.dart
@@ -34,8 +34,6 @@
 import 'constants/values.dart';
 import 'core_types.dart' show
     CoreTypes;
-import 'cps_ir/cps_ir_builder_task.dart' show
-    IrBuilderTask;
 import 'dart_backend/dart_backend.dart' as dart_backend;
 import 'dart_types.dart' show
     DartType,
@@ -138,7 +136,7 @@
 import 'world.dart' show
     World;
 
-abstract class Compiler implements DiagnosticListener {
+abstract class Compiler extends DiagnosticListener {
 
   final Stopwatch totalCompileTime = new Stopwatch();
   int nextFreeClassId = 0;
@@ -428,7 +426,6 @@
   ResolverTask resolver;
   closureMapping.ClosureTask closureToClassMapper;
   TypeCheckerTask checker;
-  IrBuilderTask irBuilder;
   ti.TypesTask typesTask;
   Backend backend;
 
@@ -584,7 +581,6 @@
       resolver = new ResolverTask(this, backend.constantCompilerTask),
       closureToClassMapper = new closureMapping.ClosureTask(this),
       checker = new TypeCheckerTask(this),
-      irBuilder = new IrBuilderTask(this, backend.sourceInformationStrategy),
       typesTask = new ti.TypesTask(this),
       constants = backend.constantCompilerTask,
       deferredLoadTask = new DeferredLoadTask(this),
@@ -616,10 +612,12 @@
     internalError(spannable, "$methodName not implemented.");
   }
 
-  void internalError(Spannable node, reason) {
+  internalError(Spannable node, reason) {
     String message = tryToString(reason);
     reportDiagnosticInternal(
-        node, MessageKind.GENERIC, {'text': message}, api.Diagnostic.CRASH);
+        createMessage(node, MessageKind.GENERIC, {'text': message}),
+        const <DiagnosticMessage>[],
+        api.Diagnostic.CRASH);
     throw 'Internal Error: $message';
   }
 
@@ -627,8 +625,8 @@
     if (hasCrashed) return;
     hasCrashed = true;
     reportDiagnostic(
-        element,
-        MessageTemplate.TEMPLATES[MessageKind.COMPILER_CRASHED].message(),
+        createMessage(element, MessageKind.COMPILER_CRASHED),
+        const <DiagnosticMessage>[],
         api.Diagnostic.CRASH);
     pleaseReportCrash();
   }
@@ -691,9 +689,11 @@
   }
 
   void log(message) {
-    reportDiagnostic(null,
-        MessageTemplate.TEMPLATES[MessageKind.GENERIC]
-            .message({'text': '$message'}),
+    Message msg = MessageTemplate.TEMPLATES[MessageKind.GENERIC]
+        .message({'text': '$message'});
+    reportDiagnostic(
+        new DiagnosticMessage(null, null, msg),
+        const <DiagnosticMessage>[],
         api.Diagnostic.VERBOSE_INFO);
   }
 
@@ -708,9 +708,10 @@
             reportAssertionFailure(error);
           } else {
             reportDiagnostic(
-                new SourceSpan(uri, 0, 0),
-                MessageTemplate.TEMPLATES[MessageKind.COMPILER_CRASHED]
-                    .message(),
+                createMessage(
+                    new SourceSpan(uri, 0, 0),
+                    MessageKind.COMPILER_CRASHED),
+                const <DiagnosticMessage>[],
                 api.Diagnostic.CRASH);
           }
           pleaseReportCrash();
@@ -875,11 +876,13 @@
         Set<String> importChains =
             computeImportChainsFor(loadedLibraries, Uris.dart_mirrors);
         if (!backend.supportsReflection) {
-          reportError(NO_LOCATION_SPANNABLE,
-                      MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_BY_BACKEND);
+          reportErrorMessage(
+              NO_LOCATION_SPANNABLE,
+              MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_BY_BACKEND);
         } else {
-          reportWarning(NO_LOCATION_SPANNABLE,
-             MessageKind.IMPORT_EXPERIMENTAL_MIRRORS,
+          reportWarningMessage(
+              NO_LOCATION_SPANNABLE,
+              MessageKind.IMPORT_EXPERIMENTAL_MIRRORS,
               {'importChain': importChains.join(
                    MessageTemplate.IMPORT_EXPERIMENTAL_MIRRORS_PADDING)});
         }
@@ -1086,7 +1089,7 @@
     if (errorElement != null &&
         errorElement.isSynthesized &&
         !mainApp.isSynthesized) {
-      reportWarning(
+      reportWarningMessage(
           errorElement, errorElement.messageKind,
           errorElement.messageArguments);
     }
@@ -1154,12 +1157,14 @@
           kind = MessageKind.HIDDEN_WARNINGS;
         }
         MessageTemplate template = MessageTemplate.TEMPLATES[kind];
-        reportDiagnostic(null,
-            template.message(
-                {'warnings': info.warnings,
-                 'hints': info.hints,
-                 'uri': uri},
-                terseDiagnostics),
+        Message message = template.message(
+            {'warnings': info.warnings,
+             'hints': info.hints,
+             'uri': uri},
+            terseDiagnostics);
+        reportDiagnostic(
+            new DiagnosticMessage(null, null, message),
+            const <DiagnosticMessage>[],
             api.Diagnostic.HINT);
       });
     }
@@ -1177,7 +1182,9 @@
         // code is artificially used.
         // If compilation failed, it is possible that the error prevents the
         // compiler from analyzing all the code.
-        reportUnusedCode();
+        // TODO(johnniwinther): Reenable this when the reporting is more
+        // precise.
+        //reportUnusedCode();
       }
       return;
     }
@@ -1235,7 +1242,8 @@
       ClassElement cls = element;
       cls.ensureResolved(this);
       cls.forEachLocalMember(enqueuer.resolution.addToWorkList);
-      world.registerInstantiatedType(cls.rawType, globalDependencies);
+      backend.registerInstantiatedType(
+          cls.rawType, world, globalDependencies);
     } else {
       world.addToWorkList(element);
     }
@@ -1273,11 +1281,11 @@
       if (mainMethod.functionSignature.parameterCount != 0) {
         // The first argument could be a list of strings.
         backend.listImplementation.ensureResolved(this);
-        world.registerInstantiatedType(
-            backend.listImplementation.rawType, globalDependencies);
+        backend.registerInstantiatedType(
+            backend.listImplementation.rawType, world, globalDependencies);
         backend.stringImplementation.ensureResolved(this);
-        world.registerInstantiatedType(
-            backend.stringImplementation.rawType, globalDependencies);
+        backend.registerInstantiatedType(
+            backend.stringImplementation.rawType, world, globalDependencies);
 
         backend.registerMainHasArguments(world);
       }
@@ -1326,7 +1334,7 @@
     }
     log('Excess resolution work: ${resolved.length}.');
     for (Element e in resolved) {
-      reportWarning(e,
+      reportWarningMessage(e,
           MessageKind.GENERIC,
           {'text': 'Warning: $e resolved but not compiled.'});
     }
@@ -1393,38 +1401,51 @@
     return backend.codegen(work);
   }
 
-  void reportError(Spannable node,
-                   MessageKind messageKind,
-                   [Map arguments = const {}]) {
-    reportDiagnosticInternal(
-        node, messageKind, arguments, api.Diagnostic.ERROR);
+  DiagnosticMessage createMessage(
+      Spannable spannable,
+      MessageKind messageKind,
+      [Map arguments = const {}]) {
+    SourceSpan span = spanFromSpannable(spannable);
+    MessageTemplate template = MessageTemplate.TEMPLATES[messageKind];
+    Message message = template.message(arguments, terseDiagnostics);
+    return new DiagnosticMessage(span, spannable, message);
   }
 
-  void reportWarning(Spannable node, MessageKind messageKind,
-                     [Map arguments = const {}]) {
-    reportDiagnosticInternal(
-        node, messageKind, arguments, api.Diagnostic.WARNING);
+  void reportError(
+      DiagnosticMessage message,
+      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
+    reportDiagnosticInternal(message, infos, api.Diagnostic.ERROR);
   }
 
+  void reportWarning(
+      DiagnosticMessage message,
+      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
+    reportDiagnosticInternal(message, infos, api.Diagnostic.WARNING);
+  }
+
+  void reportHint(
+      DiagnosticMessage message,
+      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
+    reportDiagnosticInternal(message, infos, api.Diagnostic.HINT);
+  }
+
+  @deprecated
   void reportInfo(Spannable node, MessageKind messageKind,
                   [Map arguments = const {}]) {
-    reportDiagnosticInternal(node, messageKind, arguments, api.Diagnostic.INFO);
+    reportDiagnosticInternal(
+        createMessage(node, messageKind, arguments),
+        const <DiagnosticMessage>[],
+        api.Diagnostic.INFO);
   }
 
-  void reportHint(Spannable node, MessageKind messageKind,
-                  [Map arguments = const {}]) {
-    reportDiagnosticInternal(node, messageKind, arguments, api.Diagnostic.HINT);
-  }
-
-  void reportDiagnosticInternal(Spannable node,
-                                MessageKind messageKind,
-                                Map arguments,
+  void reportDiagnosticInternal(DiagnosticMessage message,
+                                List<DiagnosticMessage> infos,
                                 api.Diagnostic kind) {
-    if (!showPackageWarnings && node != NO_LOCATION_SPANNABLE) {
+    if (!showPackageWarnings && message.spannable != NO_LOCATION_SPANNABLE) {
       switch (kind) {
       case api.Diagnostic.WARNING:
       case api.Diagnostic.HINT:
-        Element element = elementFromSpannable(node);
+        Element element = elementFromSpannable(message.spannable);
         if (!inUserCode(element, assumeInUserCode: true)) {
           Uri uri = getCanonicalUri(element);
           SuppressionInfo info =
@@ -1446,22 +1467,20 @@
       }
     }
     lastDiagnosticWasFiltered = false;
-    MessageTemplate template = MessageTemplate.TEMPLATES[messageKind];
-    reportDiagnostic(
-        node,
-        template.message(arguments, terseDiagnostics),
-        kind);
+    reportDiagnostic(message, infos, kind);
   }
 
-  void reportDiagnostic(Spannable span,
-                        Message message,
+  void reportDiagnostic(DiagnosticMessage message,
+                        List<DiagnosticMessage> infos,
                         api.Diagnostic kind);
 
   void reportAssertionFailure(SpannableAssertionFailure ex) {
     String message = (ex.message != null) ? tryToString(ex.message)
                                           : tryToString(ex);
     reportDiagnosticInternal(
-        ex.node, MessageKind.GENERIC, {'text': message}, api.Diagnostic.CRASH);
+        createMessage(ex.node, MessageKind.GENERIC, {'text': message}),
+        const <DiagnosticMessage>[],
+        api.Diagnostic.CRASH);
   }
 
   SourceSpan spanFromTokens(Token begin, Token end, [Uri uri]) {
@@ -1598,20 +1617,20 @@
       if (member.isErroneous) return;
       if (member.isFunction) {
         if (!enqueuer.resolution.hasBeenResolved(member)) {
-          reportHint(member, MessageKind.UNUSED_METHOD,
-                     {'name': member.name});
+          reportHintMessage(
+              member, MessageKind.UNUSED_METHOD, {'name': member.name});
         }
       } else if (member.isClass) {
         if (!member.isResolved) {
-          reportHint(member, MessageKind.UNUSED_CLASS,
-                     {'name': member.name});
+          reportHintMessage(
+              member, MessageKind.UNUSED_CLASS, {'name': member.name});
         } else {
           member.forEachLocalMember(checkLive);
         }
       } else if (member.isTypedef) {
         if (!member.isResolved) {
-          reportHint(member, MessageKind.UNUSED_TYPEDEF,
-                     {'name': member.name});
+          reportHintMessage(
+              member, MessageKind.UNUSED_TYPEDEF, {'name': member.name});
         }
       }
     }
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
index 6faf8d1..09c6b0d 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
@@ -75,7 +75,7 @@
       [this.builderCallback])
       : super(compiler);
 
-  String get name => 'IR builder';
+  String get name => 'CPS builder';
 
   ir.FunctionDefinition buildNode(AstElement element) {
     return measure(() {
diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart
index 4415214..19b0543 100644
--- a/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart
+++ b/pkg/compiler/lib/src/cps_ir/cps_ir_nodes.dart
@@ -76,6 +76,42 @@
 /// [LetMutable].
 abstract class InteriorExpression extends Expression implements InteriorNode {
   Expression get next => body;
+
+  /// Removes this expression from its current position in the IR.
+  ///
+  /// The node can be re-inserted elsewhere or remain orphaned.
+  ///
+  /// If orphaned, the caller is responsible for unlinking all references in
+  /// the orphaned node. Use [Reference.unlink] or [Primitive.destroy] for this.
+  void remove() {
+    assert(parent != null);
+    assert(parent.body == this);
+    assert(body.parent == this);
+    parent.body = body;
+    body.parent = parent;
+    parent = null;
+    body = null;
+  }
+
+  /// Inserts this above [node].
+  ///
+  /// This node must be orphaned first.
+  void insertAbove(Expression node) {
+    insertBelow(node.parent);
+  }
+
+  /// Inserts this below [node].
+  ///
+  /// This node must be orphaned first.
+  void insertBelow(InteriorNode newParent) {
+    assert(parent == null);
+    assert(body == null);
+    Expression child = newParent.body;
+    newParent.body = this;
+    this.body = child;
+    child.parent = this;
+    this.parent = newParent;
+  }
 }
 
 /// An expression that passes a continuation to a call.
@@ -217,6 +253,12 @@
   bool get hasNoEffectiveUses {
     return effectiveUses.isEmpty;
   }
+
+  /// Unlinks all references contained in this node.
+  void destroy() {
+    assert(hasNoUses);
+    RemovalVisitor.remove(this);
+  }
 }
 
 /// Operands to invocations and primitives are always variables.  They point to
diff --git a/pkg/compiler/lib/src/cps_ir/insert_refinements.dart b/pkg/compiler/lib/src/cps_ir/insert_refinements.dart
index ec12543..afea3976 100644
--- a/pkg/compiler/lib/src/cps_ir/insert_refinements.dart
+++ b/pkg/compiler/lib/src/cps_ir/insert_refinements.dart
@@ -68,17 +68,9 @@
       let = new LetCont(cont, null);
       cont.parent = let;
     } else {
-      // Remove LetCont from current position.
-      InteriorNode letParent = let.parent;
-      letParent.body = let.body;
-      let.body.parent = letParent;
+      let.remove(); // Reuse the existing LetCont.
     }
-
-    // Insert LetCont before use.
-    useParent.body = let;
-    let.body = use;
-    use.parent = let;
-    let.parent = useParent;
+    let.insertAbove(use);
   }
 
   Primitive unfoldInterceptor(Primitive prim) {
@@ -94,11 +86,11 @@
       refinementFor[value] = currentRefinement;
       if (refined.hasNoUses) {
         // Clean up refinements that are not used.
-        refined.value.unlink();
+        refined.destroy();
       } else {
-        cont.body = new LetPrim(refined, cont.body);
-        refined.parent = cont.body;
-        refined.value.parent = refined;
+        LetPrim let = new LetPrim(refined);
+        refined.parent = let;
+        let.insertBelow(cont);
       }
     });
     push(cont);
diff --git a/pkg/compiler/lib/src/cps_ir/loop_invariant_code_motion.dart b/pkg/compiler/lib/src/cps_ir/loop_invariant_code_motion.dart
deleted file mode 100644
index 877f4ac..0000000
--- a/pkg/compiler/lib/src/cps_ir/loop_invariant_code_motion.dart
+++ /dev/null
@@ -1,140 +0,0 @@
-// Copyright (c) 2015, 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 dart2js.cps_ir.loop_invariant_code_motion;
-
-import 'optimizers.dart';
-import 'cps_ir_nodes.dart';
-import 'loop_hierarchy.dart';
-
-/// Lifts primitives out of loops when it is safe and profitable.
-/// 
-/// Currently we only do this for interceptors.
-class LoopInvariantCodeMotion extends RecursiveVisitor implements Pass {
-  String get passName => 'Loop-invariant code motion';
-
-  final Map<Primitive, Continuation> primitiveLoop = 
-      <Primitive, Continuation>{};
-
-  LoopHierarchy loopHierarchy;
-  Continuation currentLoopHeader;
-
-  /// When processing the dependencies of a primitive, [referencedLoop]
-  /// refers to the innermost loop that contains one of the dependencies
-  /// seen so far (or `null` if none of the dependencies are bound in a loop).
-  ///
-  /// This is used to determine how far the primitive can be lifted without
-  /// falling out of scope of its dependencies.
-  Continuation referencedLoop;
-
-  void rewrite(FunctionDefinition node) {
-    loopHierarchy = new LoopHierarchy(node);
-    visit(node.body);
-  }
-
-  @override
-  Expression traverseContinuation(Continuation cont) {
-    Continuation oldLoopHeader = currentLoopHeader;
-    pushAction(() {
-      currentLoopHeader = oldLoopHeader;
-    });
-    currentLoopHeader = loopHierarchy.getLoopHeader(cont);
-    for (Parameter param in cont.parameters) {
-      primitiveLoop[param] = currentLoopHeader;
-    }
-    return cont.body;
-  }
-
-  @override
-  Expression traverseLetPrim(LetPrim node) {
-    primitiveLoop[node.primitive] = currentLoopHeader;
-    if (!shouldLift(node.primitive)) {
-      return node.body;
-    }
-    referencedLoop = null;
-    visit(node.primitive); // Sets referencedLoop.
-    Expression next = node.body;
-    if (referencedLoop != currentLoopHeader) {
-      // Bind the primitive inside [referencedLoop] (possibly null),
-      // immediately before the binding of the inner loop.
-
-      // Find the inner loop.
-      Continuation loop = currentLoopHeader;
-      Continuation enclosing = loopHierarchy.getEnclosingLoop(loop);
-      while (enclosing != referencedLoop) {
-        assert(loop != null);
-        loop = enclosing;
-        enclosing = loopHierarchy.getEnclosingLoop(loop);
-      }
-      assert(loop != null);
-
-      // Remove LetPrim from its current position.
-      node.parent.body = node.body;
-      node.body.parent = node.parent;
-
-      // Insert the LetPrim immediately before the loop.
-      LetCont loopBinding = loop.parent;
-      InteriorNode newParent = loopBinding.parent;
-      newParent.body = node;
-      node.body = loopBinding;
-      loopBinding.parent = node;
-      node.parent = newParent;
-
-      // A different loop now contains the primitive.
-      primitiveLoop[node.primitive] = enclosing;
-    }
-    return next;
-  }
-
-  /// Returns the the innermost loop that effectively encloses both
-  /// c1 and c2 (or `null` if there is no such loop).
-  Continuation leastCommonAncestor(Continuation c1, Continuation c2) {
-    int d1 = getDepth(c1), d2 = getDepth(c2);
-    while (c1 != c2) {
-      if (d1 <= d2) {
-        c2 = loopHierarchy.getEnclosingLoop(c2);
-        d2 = getDepth(c2);
-      } else {
-        c1 = loopHierarchy.getEnclosingLoop(c1);
-        d1 = getDepth(c1);
-      }
-    }
-    return c1;
-  }
-
-  @override
-  void processReference(Reference ref) {
-    Continuation loop = 
-        leastCommonAncestor(currentLoopHeader, primitiveLoop[ref.definition]);
-    referencedLoop = getInnerLoop(loop, referencedLoop);
-  }
-
-  int getDepth(Continuation loop) {
-    if (loop == null) return -1;
-    return loopHierarchy.loopDepth[loop];
-  }
-
-  Continuation getInnerLoop(Continuation loop1, Continuation loop2) {
-    if (loop1 == null) return loop2;
-    if (loop2 == null) return loop1;
-    if (loopHierarchy.loopDepth[loop1] > loopHierarchy.loopDepth[loop2]) {
-      return loop1;
-    } else {
-      return loop2;
-    }
-  }
-
-  bool shouldLift(Primitive prim) {
-    // Interceptors are generally safe and almost always profitable for lifting
-    // out of loops. Several other primitive could be lifted too, but it's not
-    // always profitable to do so.
-
-    // Note that the type of the interceptor is technically not sound after
-    // lifting because its current type might have been computed based on a
-    // refinement node (which has since been removed). As a whole, it still
-    // works out because all uses of the interceptor must occur in a context
-    // where it indeed has the type it claims to have.
-    return prim is Interceptor;
-  }
-}
diff --git a/pkg/compiler/lib/src/cps_ir/mutable_ssa.dart b/pkg/compiler/lib/src/cps_ir/mutable_ssa.dart
index 3dea17c..e2252c4 100644
--- a/pkg/compiler/lib/src/cps_ir/mutable_ssa.dart
+++ b/pkg/compiler/lib/src/cps_ir/mutable_ssa.dart
@@ -114,12 +114,6 @@
            cont.firstRef.parent is InvokeContinuation;
   }
 
-  void removeNode(InteriorNode node) {
-    InteriorNode parent = node.parent;
-    parent.body = node.body;
-    node.body.parent = parent;
-  }
-
   /// If some useful source information is attached to exactly one of the
   /// two definitions, the information is copied onto the other.
   void mergeHints(MutableVariable variable, Primitive value) {
@@ -139,7 +133,8 @@
   /// Continuations to be processed are put on the stack for later processing.
   void processBlock(Expression node,
                     Map<MutableVariable, Primitive> environment) {
-    for (; node is! TailExpression; node = node.next) {
+    Expression next = node.next;
+    for (; node is! TailExpression; node = next, next = node.next) {
       if (node is LetMutable && shouldRewrite(node.variable)) {
         // Put the new mutable variable on the stack while processing the body,
         // and pop it off again when done with the body.
@@ -155,7 +150,7 @@
 
         // Remove the mutable variable binding.
         node.value.unlink();
-        removeNode(node);
+        node.remove();
       } else if (node is LetPrim && node.primitive is SetMutable) {
         SetMutable setter = node.primitive;
         MutableVariable variable = setter.variable.definition;
@@ -165,7 +160,7 @@
           environment[variable] = setter.value.definition;
           mergeHints(variable, setter.value.definition);
           setter.value.unlink();
-          removeNode(node);
+          node.remove();
         }
       } else if (node is LetPrim && node.primitive is GetMutable) {
         GetMutable getter = node.primitive;
@@ -175,7 +170,7 @@
           Primitive value = environment[variable];
           value.substituteFor(getter);
           mergeHints(variable, value);
-          removeNode(node);
+          node.remove();
         }
       } else if (node is LetCont) {
         // Create phi parameters for each join continuation bound here, and put
diff --git a/pkg/compiler/lib/src/cps_ir/optimizers.dart b/pkg/compiler/lib/src/cps_ir/optimizers.dart
index 1ffe526..1f7f02e 100644
--- a/pkg/compiler/lib/src/cps_ir/optimizers.dart
+++ b/pkg/compiler/lib/src/cps_ir/optimizers.dart
@@ -15,7 +15,6 @@
 export 'mutable_ssa.dart' show MutableVariableEliminator;
 export 'insert_refinements.dart' show InsertRefinements;
 export 'remove_refinements.dart' show RemoveRefinements;
-export 'loop_invariant_code_motion.dart' show LoopInvariantCodeMotion;
 export 'share_interceptors.dart' show ShareInterceptors;
 
 /// An optimization pass over the CPS IR.
diff --git a/pkg/compiler/lib/src/cps_ir/redundant_join.dart b/pkg/compiler/lib/src/cps_ir/redundant_join.dart
index 747e701..d07d519 100644
--- a/pkg/compiler/lib/src/cps_ir/redundant_join.dart
+++ b/pkg/compiler/lib/src/cps_ir/redundant_join.dart
@@ -64,20 +64,6 @@
     }
   }
 
-  /// Removes [movedNode] from its current position and inserts it
-  /// before [target].
-  void moveToBefore(Expression target, LetCont movedNode) {
-    if (movedNode.parent != null) {
-      movedNode.parent.body = movedNode.body;
-      movedNode.body.parent = movedNode.parent;
-    }
-    InteriorNode parent = target.parent;
-    parent.body = movedNode;
-    movedNode.body = target;
-    target.parent = movedNode;
-    movedNode.parent = parent;
-  }
-
   void rewriteBranch(Branch branch) {
     InteriorNode parent = getEffectiveParent(branch);
     if (parent is! Continuation) return;
@@ -161,7 +147,8 @@
           }
         }
       }
-      moveToBefore(outerLetCont, innerLetCont);
+      innerLetCont.remove();
+      innerLetCont.insertAbove(outerLetCont);
     }
 
     assert(branchCont.body == branch);
@@ -196,9 +183,7 @@
     branch.falseContinuation.unlink();
     outerLetCont.continuations.remove(branchCont);
     if (outerLetCont.continuations.isEmpty) {
-      InteriorNode parent = outerLetCont.parent;
-      parent.body = outerLetCont.body;
-      outerLetCont.body.parent = parent;
+      outerLetCont.remove();
     }
 
     // We may have created new redundant join points in the two branches.
diff --git a/pkg/compiler/lib/src/cps_ir/redundant_phi.dart b/pkg/compiler/lib/src/cps_ir/redundant_phi.dart
index e678a96..693b612 100644
--- a/pkg/compiler/lib/src/cps_ir/redundant_phi.dart
+++ b/pkg/compiler/lib/src/cps_ir/redundant_phi.dart
@@ -187,19 +187,9 @@
 void _moveIntoScopeOf(LetCont letCont, Definition definition) {
   if (_isInScopeOf(letCont, definition)) return;
 
-  // Remove the continuation binding from its current spot.
-  InteriorNode parent = letCont.parent;
-  parent.body = letCont.body;
-  letCont.body.parent = parent;
-
-  // Insert it just below the binding of definition.
   InteriorNode binding = definition.parent;
-
-  letCont.body = binding.body;
-  binding.body.parent = letCont;
-
-  binding.body = letCont;
-  letCont.parent = binding;
+  letCont.remove();
+  letCont.insertBelow(binding);
 }
 
 /// Ensures [continuation] has its own LetCont binding by creating
@@ -210,10 +200,8 @@
   LetCont letCont = continuation.parent;
   if (letCont.continuations.length == 1) return letCont;
   letCont.continuations.remove(continuation);
-  LetCont newBinding = new LetCont(continuation, letCont.body);
-  newBinding.body.parent = newBinding;
-  newBinding.parent = letCont;
-  letCont.body = newBinding;
+  LetCont newBinding = new LetCont(continuation, null);
   continuation.parent = newBinding;
+  newBinding.insertBelow(letCont);
   return newBinding;
 }
diff --git a/pkg/compiler/lib/src/cps_ir/remove_refinements.dart b/pkg/compiler/lib/src/cps_ir/remove_refinements.dart
index f5088ae2..4d7aae3 100644
--- a/pkg/compiler/lib/src/cps_ir/remove_refinements.dart
+++ b/pkg/compiler/lib/src/cps_ir/remove_refinements.dart
@@ -22,14 +22,13 @@
 
   @override
   Expression traverseLetPrim(LetPrim node) {
+    Expression next = node.body;
     if (node.primitive is Refinement) {
       Refinement refinement = node.primitive;
       refinement.value.definition.substituteFor(refinement);
-      refinement.value.unlink();
-      InteriorNode parent = node.parent;
-      parent.body = node.body;
-      node.body.parent = parent;
+      refinement.destroy();
+      node.remove();
     }
-    return node.body;
+    return next;
   }
 }
diff --git a/pkg/compiler/lib/src/cps_ir/scalar_replacement.dart b/pkg/compiler/lib/src/cps_ir/scalar_replacement.dart
index 18bb14d..b9b6b09 100644
--- a/pkg/compiler/lib/src/cps_ir/scalar_replacement.dart
+++ b/pkg/compiler/lib/src/cps_ir/scalar_replacement.dart
@@ -141,11 +141,11 @@
         initialValue = new Constant(new NullConstantValue());
         LetPrim let = new LetPrim(initialValue);
         let.primitive.parent = let;
-        insertionPoint = insertAtBody(insertionPoint, let);
+        insertionPoint = let..insertBelow(insertionPoint);
       }
       LetMutable let = new LetMutable(variable, initialValue);
       let.value.parent = let;
-      insertionPoint = insertAtBody(insertionPoint, let);
+      insertionPoint = let..insertBelow(insertionPoint);
     }
 
     // Replace references with MutableVariable operations or references to the
@@ -188,15 +188,6 @@
     deleteLetPrimOf(allocation);
   }
 
-  InteriorNode insertAtBody(
-      InteriorNode insertionPoint, InteriorExpression let) {
-    let.parent = insertionPoint;
-    let.body = insertionPoint.body;
-    let.body.parent = let;
-    insertionPoint.body = let;
-    return let;
-  }
-
   /// Replaces [old] with [primitive] in [old]'s parent [LetPrim].
   void replacePrimitive(Primitive old, Primitive primitive) {
     LetPrim letPrim = old.parent;
@@ -206,11 +197,7 @@
   void deleteLetPrimOf(Primitive primitive) {
     assert(primitive.hasNoUses);
     LetPrim letPrim = primitive.parent;
-    Node child = letPrim.body;
-    InteriorNode parent = letPrim.parent;
-    child.parent = parent;
-    parent.body  = child;
-
+    letPrim.remove();
     deletePrimitive(primitive);
   }
 
diff --git a/pkg/compiler/lib/src/cps_ir/share_interceptors.dart b/pkg/compiler/lib/src/cps_ir/share_interceptors.dart
index 67aa417..5ae912e 100644
--- a/pkg/compiler/lib/src/cps_ir/share_interceptors.dart
+++ b/pkg/compiler/lib/src/cps_ir/share_interceptors.dart
@@ -4,95 +4,192 @@
 
 library dart2js.cps_ir.share_interceptors;
 
-import 'cps_ir_nodes.dart';
 import 'optimizers.dart';
-import 'type_mask_system.dart';
-import '../elements/elements.dart';
+import 'cps_ir_nodes.dart';
+import 'loop_hierarchy.dart';
 import '../constants/values.dart';
 
-/// Merges calls to `getInterceptor` when one call is in scope of the other.
-///
-/// Also replaces `getInterceptor` calls with an interceptor constant when
-/// the result is known statically, and there is no interceptor already in
-/// scope.
+/// Removes redundant `getInterceptor` calls.
 /// 
-/// Should run after [LoopInvariantCodeMotion] so interceptors lifted out from
-/// loops can be merged.
+/// The pass performs three optimizations for interceptors:
+///- pull interceptors out of loops
+///- replace interceptors with constants
+///- share interceptors when one is in scope of the other
 class ShareInterceptors extends RecursiveVisitor implements Pass {
   String get passName => 'Share interceptors';
 
+  /// The innermost loop containing a given primitive.
+  final Map<Primitive, Continuation> loopHeaderFor =
+      <Primitive, Continuation>{};
+
+  /// An interceptor currently in scope for a given primitive.
   final Map<Primitive, Primitive> interceptorFor =
       <Primitive, Primitive>{};
 
+  /// A primitive currently in scope holding a given interceptor constant.
   final Map<ConstantValue, Primitive> sharedConstantFor =
       <ConstantValue, Primitive>{};
 
+  /// Interceptors to be hoisted out of the given loop.
+  final Map<Continuation, List<Primitive>> loopHoistedInterceptors =
+      <Continuation, List<Primitive>>{};
+
+  LoopHierarchy loopHierarchy;
+  Continuation currentLoopHeader;
+
   void rewrite(FunctionDefinition node) {
+    loopHierarchy = new LoopHierarchy(node);
     visit(node.body);
   }
 
   @override
-  Expression traverseLetPrim(LetPrim node) {
-    if (node.primitive is Interceptor) {
-      Interceptor interceptor = node.primitive;
-      Primitive input = interceptor.input.definition;
-      Primitive existing = interceptorFor[input];
-      if (existing != null) {
-        if (existing is Interceptor) {
-          existing.interceptedClasses.addAll(interceptor.interceptedClasses);
-        }
-        existing.substituteFor(interceptor);
-      } else if (interceptor.constantValue != null) {
-        InterceptorConstantValue value = interceptor.constantValue;
-        // There is no interceptor obtained from this particular input, but
-        // there might one obtained from another input that is known to
-        // have the same result, so try to reuse that.
-        Primitive shared = sharedConstantFor[value];
-        if (shared != null) {
-          shared.substituteFor(interceptor);
-        } else {
-          Constant constant = new Constant(value);
-          constant.hint = interceptor.hint;
-          node.primitive = constant;
-          constant.parent = node;
-          interceptor.input.unlink();
-          constant.substituteFor(interceptor);
-          interceptorFor[input] = constant;
-          sharedConstantFor[value] = constant;
-          pushAction(() {
-            interceptorFor.remove(input);
-            sharedConstantFor.remove(value);
-
-            if (constant.hasExactlyOneUse) {
-              // As a heuristic, always sink single-use interceptor constants
-              // to their use, even if it is inside a loop.
-              Expression use = getEnclosingExpression(constant.firstRef.parent);
-              InteriorNode parent = node.parent;
-              parent.body = node.body;
-              node.body.parent = parent;
-
-              InteriorNode useParent = use.parent;
-              useParent.body = node;
-              node.body = use;
-              use.parent = node;
-              node.parent = useParent;
-            }
-          });
-        }
-      } else {
-        interceptorFor[input] = interceptor;
-        pushAction(() {
-          interceptorFor.remove(input);
-        });
-      }
+  Expression traverseContinuation(Continuation cont) {
+    Continuation oldLoopHeader = currentLoopHeader;
+    pushAction(() {
+      currentLoopHeader = oldLoopHeader;
+    });
+    currentLoopHeader = loopHierarchy.getLoopHeader(cont);
+    for (Parameter param in cont.parameters) {
+      loopHeaderFor[param] = currentLoopHeader;
     }
-    return node.body;
+    if (cont.isRecursive) {
+      pushAction(() {
+        // After the loop body has been processed, all interceptors hoisted
+        // to this loop fall out of scope and should be removed from the
+        // environment.
+        List<Primitive> hoisted = loopHoistedInterceptors[cont];
+        if (hoisted != null) {
+          for (Primitive interceptor in hoisted) {
+            if (interceptor is Interceptor) {
+              Primitive input = interceptor.input.definition;
+              assert(interceptorFor[input] == interceptor);
+              interceptorFor.remove(input);
+            } else if (interceptor is Constant) {
+              assert(sharedConstantFor[interceptor.value] == interceptor);
+              sharedConstantFor.remove(interceptor.value);
+            } else {
+              throw "Unexpected interceptor: $interceptor";
+            }
+          }
+        }
+      });
+    }
+    return cont.body;
   }
 
-  Expression getEnclosingExpression(Node node) {
-    while (node is! Expression) {
-      node = node.parent;
+  @override
+  Expression traverseLetPrim(LetPrim node) {
+    loopHeaderFor[node.primitive] = currentLoopHeader;
+    Expression next = node.body;
+    if (node.primitive is! Interceptor) {
+      return next;
     }
-    return node;
+    Interceptor interceptor = node.primitive;
+    Primitive input = interceptor.input.definition;
+
+    // Try to reuse an existing interceptor for the same input.
+    Primitive existing = interceptorFor[input];
+    if (existing != null) {
+      if (existing is Interceptor) {
+        existing.interceptedClasses.addAll(interceptor.interceptedClasses);
+      }
+      existing.substituteFor(interceptor);
+      interceptor.destroy();
+      node.remove();
+      return next;
+    }
+
+    // There is no interceptor obtained from this particular input, but
+    // there might one obtained from another input that is known to
+    // have the same result, so try to reuse that.
+    InterceptorConstantValue constant = interceptor.constantValue;
+    if (constant != null) {
+      existing = sharedConstantFor[constant];
+      if (existing != null) {
+        existing.substituteFor(interceptor);
+        interceptor.destroy();
+        node.remove();
+        return next;
+      }
+
+      // The interceptor could not be shared. Replace it with a constant.
+      Constant constantPrim = new Constant(constant);
+      node.primitive = constantPrim;
+      constantPrim.hint = interceptor.hint;
+      constantPrim.type = interceptor.type;
+      constantPrim.substituteFor(interceptor);
+      interceptor.destroy();
+      sharedConstantFor[constant] = constantPrim;
+    } else {
+      interceptorFor[input] = interceptor;
+    }
+
+    // Determine the outermost loop where the input to the interceptor call
+    // is available.  Constant interceptors take no input and can thus be
+    // hoisted all way to the top-level.
+    Continuation referencedLoop = constant != null
+        ? null
+        : lowestCommonAncestor(loopHeaderFor[input], currentLoopHeader);
+    if (referencedLoop != currentLoopHeader) {
+      // [referencedLoop] contains the binding for [input], so we cannot hoist
+      // the interceptor outside that loop.  Find the loop nested one level
+      // inside referencedLoop, and hoist the interceptor just outside that one.
+      Continuation loop = currentLoopHeader;
+      Continuation enclosing = loopHierarchy.getEnclosingLoop(loop);
+      while (enclosing != referencedLoop) {
+        assert(loop != null);
+        loop = enclosing;
+        enclosing = loopHierarchy.getEnclosingLoop(loop);
+      }
+      assert(loop != null);
+
+      // Move the LetPrim above the loop binding.
+      LetCont loopBinding = loop.parent;
+      node.remove();
+      node.insertAbove(loopBinding);
+
+      // A different loop now contains the interceptor.
+      loopHeaderFor[node.primitive] = enclosing;
+
+      // Register the interceptor as hoisted to that loop, so it will be
+      // removed from the environment when it falls out of scope.
+      loopHoistedInterceptors
+          .putIfAbsent(loop, () => <Primitive>[])
+          .add(node.primitive);
+    } else if (constant != null) {
+      // The LetPrim was not hoisted. Remove the bound interceptor from the
+      // environment when leaving the LetPrim body.
+      pushAction(() {
+        assert(sharedConstantFor[constant] == node.primitive);
+        sharedConstantFor.remove(constant);
+      });
+    } else {
+      pushAction(() {
+        assert(interceptorFor[input] == node.primitive);
+        interceptorFor.remove(input);
+      });
+    }
+    return next;
+  }
+
+  /// Returns the the innermost loop that effectively encloses both
+  /// c1 and c2 (or `null` if there is no such loop).
+  Continuation lowestCommonAncestor(Continuation c1, Continuation c2) {
+    int d1 = getDepth(c1), d2 = getDepth(c2);
+    while (c1 != c2) {
+      if (d1 <= d2) {
+        c2 = loopHierarchy.getEnclosingLoop(c2);
+        d2 = getDepth(c2);
+      } else {
+        c1 = loopHierarchy.getEnclosingLoop(c1);
+        d1 = getDepth(c1);
+      }
+    }
+    return c1;
+  }
+
+  int getDepth(Continuation loop) {
+    if (loop == null) return -1;
+    return loopHierarchy.loopDepth[loop];
   }
 }
diff --git a/pkg/compiler/lib/src/cps_ir/type_mask_system.dart b/pkg/compiler/lib/src/cps_ir/type_mask_system.dart
index c911b5f..893113f 100644
--- a/pkg/compiler/lib/src/cps_ir/type_mask_system.dart
+++ b/pkg/compiler/lib/src/cps_ir/type_mask_system.dart
@@ -127,6 +127,20 @@
     return computeTypeMask(inferrer.compiler, constant);
   }
 
+  // Returns the constant value if a TypeMask represents a single value.
+  // Returns `null` if [mask] is not a constant.
+  ConstantValue getConstantOf(TypeMask mask) {
+    if (!mask.isValue) return null;
+    if (mask.isNullable) return null;  // e.g. 'true or null'.
+    ValueTypeMask valueMask = mask;
+    var value = valueMask.value;
+    // TODO(sra): Why is ValueTypeMask.value not a ConstantValue?
+    if (value == false) return new FalseConstantValue();
+    if (value == true) return new TrueConstantValue();
+    // TODO(sra): Consider other values. Be careful with large strings.
+    return null;
+  }
+
   TypeMask nonNullExact(ClassElement element) {
     // The class world does not know about classes created by
     // closure conversion, so just treat those as a subtypes of Function.
diff --git a/pkg/compiler/lib/src/cps_ir/type_propagation.dart b/pkg/compiler/lib/src/cps_ir/type_propagation.dart
index 8c37b3a..383b39f 100644
--- a/pkg/compiler/lib/src/cps_ir/type_propagation.dart
+++ b/pkg/compiler/lib/src/cps_ir/type_propagation.dart
@@ -321,7 +321,13 @@
   /// [typedSelector]. If the given selector is not a [TypedSelector], any
   /// reachable method matching the selector may be targeted.
   AbstractValue getInvokeReturnType(Selector selector, TypeMask mask) {
-    return nonConstant(typeSystem.getInvokeReturnType(selector, mask));
+    return fromMask(typeSystem.getInvokeReturnType(selector, mask));
+  }
+
+  AbstractValue fromMask(TypeMask mask) {
+    ConstantValue constantValue = typeSystem.getConstantOf(mask);
+    if (constantValue != null) return constant(constantValue, mask);
+    return nonConstant(mask);
   }
 }
 
@@ -2066,7 +2072,7 @@
       TypeMask type = param.hint is ParameterElement
           ? typeSystem.getParameterType(param.hint)
           : typeSystem.dynamicType;
-      setValue(param, nonConstant(type));
+      setValue(param, lattice.fromMask(type));
     }
     push(node.body);
   }
@@ -2113,7 +2119,7 @@
     }
 
     TypeMask returnType = typeSystem.getReturnType(node.target);
-    setResult(node, nonConstant(returnType));
+    setResult(node, lattice.fromMask(returnType));
   }
 
   void visitInvokeContinuation(InvokeContinuation node) {
diff --git a/pkg/compiler/lib/src/dart_backend/backend.dart b/pkg/compiler/lib/src/dart_backend/backend.dart
index 20695ce..c29ae0e 100644
--- a/pkg/compiler/lib/src/dart_backend/backend.dart
+++ b/pkg/compiler/lib/src/dart_backend/backend.dart
@@ -52,7 +52,8 @@
       new Set<ClassElement>();
 
   bool enableCodegenWithErrorsIfSupported(Spannable node) {
-    compiler.reportHint(node,
+    compiler.reportHintMessage(
+        node,
         MessageKind.GENERIC,
         {'text': "Generation of code with compile time errors is not "
                  "supported for dart2dart."});
@@ -253,7 +254,10 @@
   }
 
   @override
-  void registerInstantiatedType(InterfaceType type, Registry registry) {
+  void registerInstantiatedType(InterfaceType type,
+                                Enqueuer enqueuer,
+                                Registry registry,
+                                {bool mirrorUsage: false}) {
     // Without patching, dart2dart has no way of performing sound tree-shaking
     // in face external functions. Therefore we employ another scheme:
     //
@@ -319,13 +323,15 @@
         }
       }
     }
-
+    super.registerInstantiatedType(
+        type, enqueuer, registry, mirrorUsage: mirrorUsage);
   }
 
   @override
   bool enableDeferredLoadingIfSupported(Spannable node, Registry registry) {
     // TODO(sigurdm): Implement deferred loading for dart2dart.
-    compiler.reportWarning(node, MessageKind.DEFERRED_LIBRARY_DART_2_DART);
+    compiler.reportWarningMessage(
+        node, MessageKind.DEFERRED_LIBRARY_DART_2_DART);
     return false;
   }
 }
diff --git a/pkg/compiler/lib/src/dart_backend/outputter.dart b/pkg/compiler/lib/src/dart_backend/outputter.dart
index 82e5170..a8240ad 100644
--- a/pkg/compiler/lib/src/dart_backend/outputter.dart
+++ b/pkg/compiler/lib/src/dart_backend/outputter.dart
@@ -299,10 +299,18 @@
         ClassElement existingEnumClass =
             enumClassMap.putIfAbsent(cls.name, () => cls);
         if (existingEnumClass != cls) {
-          listener.reportError(cls, MessageKind.GENERIC,
-              {'text': "Duplicate enum names are not supported in dart2dart."});
-          listener.reportInfo(existingEnumClass, MessageKind.GENERIC,
-              {'text': "This is the other declaration of '${cls.name}'."});
+          listener.reportError(
+              listener.createMessage(
+                  cls,
+                  MessageKind.GENERIC,
+                  {'text': "Duplicate enum names are not supported "
+                           "in dart2dart."}),
+          <DiagnosticMessage>[
+              listener.createMessage(
+                  existingEnumClass,
+                  MessageKind.GENERIC,
+                  {'text': "This is the other declaration of '${cls.name}'."}),
+          ]);
         }
       }
     }
diff --git a/pkg/compiler/lib/src/deferred_load.dart b/pkg/compiler/lib/src/deferred_load.dart
index bd9c01a..9615406 100644
--- a/pkg/compiler/lib/src/deferred_load.dart
+++ b/pkg/compiler/lib/src/deferred_load.dart
@@ -729,7 +729,7 @@
                   compiler.constants.getConstantValue(metadata.constant);
               Element element = value.getType(compiler.coreTypes).element;
               if (element == deferredLibraryClass) {
-                 compiler.reportError(
+                 compiler.reportErrorMessage(
                      import, MessageKind.DEFERRED_OLD_SYNTAX);
               }
             }
@@ -746,7 +746,8 @@
             _allDeferredImports[key] = importedLibrary;
 
             if (prefix == null) {
-              compiler.reportError(import,
+              compiler.reportErrorMessage(
+                  import,
                   MessageKind.DEFERRED_LIBRARY_WITHOUT_PREFIX);
             } else {
               prefixDeferredImport[prefix] = import;
@@ -762,7 +763,8 @@
               ImportElement failingImport = (previousDeferredImport != null)
                   ? previousDeferredImport
                   : import;
-              compiler.reportError(failingImport.prefix,
+              compiler.reportErrorMessage(
+                  failingImport.prefix,
                   MessageKind.DEFERRED_LIBRARY_DUPLICATE_PREFIX);
             }
             usedPrefixes.add(prefix);
diff --git a/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart b/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart
index c6bb9f5..e2e4d1a 100644
--- a/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart
+++ b/pkg/compiler/lib/src/diagnostics/diagnostic_listener.dart
@@ -12,23 +12,50 @@
     Element;
 import 'messages.dart';
 
+// TODO(johnniwinther): Rename and cleanup this interface. Add severity enum.
 abstract class DiagnosticListener {
   // TODO(karlklose): rename log to something like reportInfo.
   void log(message);
 
-  void internalError(Spannable spannable, message);
+  internalError(Spannable spannable, message);
 
   SourceSpan spanFromSpannable(Spannable node);
 
-  void reportError(Spannable node, MessageKind errorCode,
-                   [Map arguments = const {}]);
+  void reportErrorMessage(
+      Spannable spannable,
+      MessageKind messageKind,
+      [Map arguments = const {}]) {
+    reportError(createMessage(spannable, messageKind, arguments));
+  }
 
-  void reportWarning(Spannable node, MessageKind errorCode,
-                     [Map arguments = const {}]);
+  void reportError(
+      DiagnosticMessage message,
+      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]);
 
-  void reportHint(Spannable node, MessageKind errorCode,
-                  [Map arguments = const {}]);
+  void reportWarningMessage(
+      Spannable spannable,
+      MessageKind messageKind,
+      [Map arguments = const {}]) {
+    reportWarning(createMessage(spannable, messageKind, arguments));
+  }
 
+  void reportWarning(
+      DiagnosticMessage message,
+      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]);
+
+  void reportHintMessage(
+      Spannable spannable,
+      MessageKind messageKind,
+      [Map arguments = const {}]) {
+    reportHint(createMessage(spannable, messageKind, arguments));
+  }
+
+  void reportHint(
+      DiagnosticMessage message,
+      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]);
+
+
+  @deprecated
   void reportInfo(Spannable node, MessageKind errorCode,
                   [Map arguments = const {}]);
 
@@ -37,4 +64,17 @@
   // way to construct a [SourceSpan] from a [Spannable] and an
   // [Element].
   withCurrentElement(Element element, f());
+
+  DiagnosticMessage createMessage(
+      Spannable spannable,
+      MessageKind messageKind,
+      [Map arguments = const {}]);
 }
+
+class DiagnosticMessage {
+  final SourceSpan sourceSpan;
+  final Spannable spannable;
+  final Message message;
+
+  DiagnosticMessage(this.sourceSpan, this.spannable, this.message);
+}
\ No newline at end of file
diff --git a/pkg/compiler/lib/src/elements/common.dart b/pkg/compiler/lib/src/elements/common.dart
index 6c4352a..9d04582 100644
--- a/pkg/compiler/lib/src/elements/common.dart
+++ b/pkg/compiler/lib/src/elements/common.dart
@@ -415,13 +415,7 @@
     return false;
   }
 
-  /**
-   * Returns true if [this] is a subclass of [cls].
-   *
-   * This method is not to be used for checking type hierarchy and
-   * assignments, because it does not take parameterized types into
-   * account.
-   */
+  @override
   bool isSubclassOf(ClassElement cls) {
     // Use [declaration] for both [this] and [cls], because
     // declaration classes hold the superclass hierarchy.
@@ -436,6 +430,11 @@
     MemberSignature member = lookupInterfaceMember(Names.call);
     return member != null && member.isMethod ? member.type : null;
   }
+
+  @override
+  bool get isNamedMixinApplication {
+    return isMixinApplication && !isUnnamedMixinApplication;
+  }
 }
 
 abstract class FunctionSignatureCommon implements FunctionSignature {
diff --git a/pkg/compiler/lib/src/elements/elements.dart b/pkg/compiler/lib/src/elements/elements.dart
index 7c538b5..d3e5d5d 100644
--- a/pkg/compiler/lib/src/elements/elements.dart
+++ b/pkg/compiler/lib/src/elements/elements.dart
@@ -410,8 +410,6 @@
 
   Scope buildScope();
 
-  void diagnose(Element context, DiagnosticListener listener);
-
   // TODO(johnniwinther): Move this to [AstElement].
   /// Returns the [Element] that holds the [TreeElements] for this element.
   AnalyzableElement get analyzableElement;
@@ -820,6 +818,10 @@
   Map get messageArguments;
   Element get existingElement;
   Element get newElement;
+
+  /// Compute the info messages associated with an error/warning on [context].
+  List<DiagnosticMessage> computeInfos(
+      Element context, DiagnosticListener listener);
 }
 
 // TODO(kasperl): This probably shouldn't be called an element. It's
@@ -1392,8 +1394,23 @@
 
   /// `true` if this class is an enum declaration.
   bool get isEnumClass;
+
+  /// `true` if this class is a mixin application, either named or unnamed.
   bool get isMixinApplication;
+
+  /// `true` if this class is a named mixin application, e.g.
+  ///
+  ///     class NamedMixinApplication = SuperClass with MixinClass;
+  ///
+  bool get isNamedMixinApplication;
+
+  /// `true` if this class is an unnamed mixin application, e.g. the synthesized
+  /// `SuperClass+MixinClass` mixin application class in:
+  ///
+  ///     class Class extends SuperClass with MixinClass {}
+  ///
   bool get isUnnamedMixinApplication;
+
   bool get hasBackendMembers;
   bool get hasLocalScopeMembers;
 
@@ -1404,13 +1421,19 @@
   /// implementing the interface or by providing a [call] method.
   bool implementsFunction(Compiler compiler);
 
+  /// Returns `true` if this class extends [cls] directly or indirectly.
+  ///
+  /// This method is not to be used for checking type hierarchy and assignments,
+  /// because it does not take parameterized types into account.
   bool isSubclassOf(ClassElement cls);
-  /// Returns true if `this` explicitly/nominally implements [intrface].
+
+  /// Returns `true` if this class explicitly implements [intrface].
   ///
   /// Note that, if [intrface] is the `Function` class, this method returns
   /// false for a class that has a `call` method but does not explicitly
   /// implement `Function`.
   bool implementsInterface(ClassElement intrface);
+
   bool hasFieldShadowedBy(Element fieldMember);
 
   /// Returns `true` if this class has a @proxy annotation.
diff --git a/pkg/compiler/lib/src/elements/modelx.dart b/pkg/compiler/lib/src/elements/modelx.dart
index 8c20320..c576f8d 100644
--- a/pkg/compiler/lib/src/elements/modelx.dart
+++ b/pkg/compiler/lib/src/elements/modelx.dart
@@ -251,8 +251,6 @@
 
   bool get isAbstract => modifiers.isAbstract;
 
-  void diagnose(Element context, DiagnosticListener listener) {}
-
   bool get hasTreeElements => analyzableElement.hasTreeElements;
 
   TreeElements get treeElements => analyzableElement.treeElements;
@@ -475,14 +473,16 @@
     if (warning != null) {
       Spannable spannable = warning.spannable;
       if (spannable == null) spannable = usageSpannable;
-      listener.reportWarning(
+      DiagnosticMessage warningMessage = listener.createMessage(
           spannable, warning.messageKind, warning.messageArguments);
-    }
-    if (info != null) {
-      Spannable spannable = info.spannable;
-      if (spannable == null) spannable = usageSpannable;
-      listener.reportInfo(
-          spannable, info.messageKind, info.messageArguments);
+      List<DiagnosticMessage> infos = <DiagnosticMessage>[];
+      if (info != null) {
+        Spannable spannable = info.spannable;
+        if (spannable == null) spannable = usageSpannable;
+        infos.add(listener.createMessage(
+            spannable, info.messageKind, info.messageArguments));
+      }
+      listener.reportWarning(warningMessage, infos);
     }
     if (unwrapped.isWarnOnUse) {
       unwrapped = unwrapped.unwrap(listener, usageSpannable);
@@ -534,6 +534,11 @@
     return set;
   }
 
+  List<DiagnosticMessage> computeInfos(Element context,
+                                   DiagnosticListener listener) {
+    return const <DiagnosticMessage>[];
+  }
+
   accept(ElementVisitor visitor, arg) {
     return visitor.visitAmbiguousElement(this, arg);
   }
@@ -552,21 +557,25 @@
       : super(messageKind, messageArguments, enclosingElement, existingElement,
               newElement);
 
-  void diagnose(Element context, DiagnosticListener listener) {
+  List<DiagnosticMessage> computeInfos(
+      Element context,
+      DiagnosticListener listener) {
+    List<DiagnosticMessage> infos = <DiagnosticMessage>[];
     Setlet ambiguousElements = flatten();
     MessageKind code = (ambiguousElements.length == 1)
         ? MessageKind.AMBIGUOUS_REEXPORT : MessageKind.AMBIGUOUS_LOCATION;
     LibraryElementX importer = context.library;
     for (Element element in ambiguousElements) {
-      var arguments = {'name': element.name};
-      listener.reportInfo(element, code, arguments);
+      Map arguments = {'name': element.name};
+      infos.add(listener.createMessage(element, code, arguments));
       listener.withCurrentElement(importer, () {
         for (ImportElement import in importer.importers.getImports(element)) {
-          listener.reportInfo(
-              import, MessageKind.IMPORTED_HERE, arguments);
+          infos.add(listener.createMessage(
+              import, MessageKind.IMPORTED_HERE, arguments));
         }
       });
     }
+    return infos;
   }
 }
 
@@ -600,9 +609,16 @@
       Element existing = contents.putIfAbsent(name, () => element);
       if (!identical(existing, element)) {
         listener.reportError(
-            element, MessageKind.DUPLICATE_DEFINITION, {'name': name});
-        listener.reportInfo(existing,
-            MessageKind.EXISTING_DEFINITION, {'name': name});
+            listener.createMessage(
+                element,
+                MessageKind.DUPLICATE_DEFINITION,
+                {'name': name}),
+            <DiagnosticMessage>[
+                listener.createMessage(
+                    existing,
+                    MessageKind.EXISTING_DEFINITION,
+                    {'name': name}),
+            ]);
       }
     }
   }
@@ -624,11 +640,17 @@
                    Element existing,
                    DiagnosticListener listener) {
     void reportError(Element other) {
-      listener.reportError(accessor,
-                           MessageKind.DUPLICATE_DEFINITION,
-                           {'name': accessor.name});
-      listener.reportInfo(
-          other, MessageKind.EXISTING_DEFINITION, {'name': accessor.name});
+      listener.reportError(
+          listener.createMessage(
+              accessor,
+              MessageKind.DUPLICATE_DEFINITION,
+              {'name': accessor.name}),
+          <DiagnosticMessage>[
+              listener.createMessage(
+                  other,
+                  MessageKind.EXISTING_DEFINITION,
+                  {'name': accessor.name}),
+          ]);
 
       contents[accessor.name] = new DuplicatedElementX(
           MessageKind.DUPLICATE_DEFINITION, {'name': accessor.name},
@@ -722,15 +744,17 @@
     LibraryElementX library = enclosingElement;
     if (library.entryCompilationUnit == this) {
       partTag = tag;
-      listener.reportError(tag, MessageKind.IMPORT_PART_OF);
+      listener.reportErrorMessage(
+          tag, MessageKind.IMPORT_PART_OF);
       return;
     }
     if (!localMembers.isEmpty) {
-      listener.reportError(tag, MessageKind.BEFORE_TOP_LEVEL);
+      listener.reportErrorMessage(
+          tag, MessageKind.BEFORE_TOP_LEVEL);
       return;
     }
     if (partTag != null) {
-      listener.reportWarning(tag, MessageKind.DUPLICATED_PART_OF);
+      listener.reportWarningMessage(tag, MessageKind.DUPLICATED_PART_OF);
       return;
     }
     partTag = tag;
@@ -739,16 +763,22 @@
     if (libraryTag != null) {
       String expectedName = libraryTag.name.toString();
       if (expectedName != actualName) {
-        listener.reportWarning(tag.name,
+        listener.reportWarningMessage(
+            tag.name,
             MessageKind.LIBRARY_NAME_MISMATCH,
             {'libraryName': expectedName});
       }
     } else {
-      listener.reportWarning(library,
-          MessageKind.MISSING_LIBRARY_NAME,
-          {'libraryName': actualName});
-      listener.reportInfo(tag.name,
-          MessageKind.THIS_IS_THE_PART_OF_TAG);
+      listener.reportWarning(
+          listener.createMessage(
+              library,
+              MessageKind.MISSING_LIBRARY_NAME,
+              {'libraryName': actualName}),
+          <DiagnosticMessage>[
+              listener.createMessage(
+                  tag.name,
+                  MessageKind.THIS_IS_THE_PART_OF_TAG),
+          ]);
     }
   }
 
@@ -2623,7 +2653,8 @@
 
   void addToScope(Element element, DiagnosticListener listener) {
     if (element.isField && element.name == name) {
-      listener.reportError(element, MessageKind.MEMBER_USES_CLASS_NAME);
+      listener.reportErrorMessage(
+          element, MessageKind.MEMBER_USES_CLASS_NAME);
     }
     localScope.add(element, listener);
   }
diff --git a/pkg/compiler/lib/src/enqueue.dart b/pkg/compiler/lib/src/enqueue.dart
index 35b5640..b6ecbad 100644
--- a/pkg/compiler/lib/src/enqueue.dart
+++ b/pkg/compiler/lib/src/enqueue.dart
@@ -16,8 +16,6 @@
     CompilerTask,
     DeferredAction,
     DeferredTask;
-import 'common/registry.dart' show
-    Registry;
 import 'common/codegen.dart' show
     CodegenWorkItem;
 import 'common/resolution.dart' show
@@ -190,15 +188,19 @@
   }
 
   // TODO(johnniwinther): Remove the need for passing the [registry].
-  void registerInstantiatedType(InterfaceType type, Registry registry,
+  void registerInstantiatedType(InterfaceType type,
                                 {bool mirrorUsage: false}) {
     task.measure(() {
       ClassElement cls = type.element;
-      registry.registerDependency(cls);
       cls.ensureResolved(compiler);
-      universe.registerTypeInstantiation(type, byMirrors: mirrorUsage);
+      universe.registerTypeInstantiation(
+          type,
+          byMirrors: mirrorUsage,
+          onImplemented: (ClassElement cls) {
+        compiler.backend.registerImplementedClass(
+                    cls, this, compiler.globalDependencies);
+      });
       processInstantiatedClass(cls);
-      compiler.backend.registerInstantiatedType(type, registry);
     });
   }
 
@@ -265,13 +267,12 @@
       }
       if (function.name == Identifiers.call &&
           !cls.typeVariables.isEmpty) {
-        registerCallMethodWithFreeTypeVariables(
-            function, compiler.globalDependencies);
+        registerCallMethodWithFreeTypeVariables(function);
       }
       // If there is a property access with the same name as a method we
       // need to emit the method.
       if (universe.hasInvokedGetter(function, compiler.world)) {
-        registerClosurizedMember(function, compiler.globalDependencies);
+        registerClosurizedMember(function);
         addToWorkList(function);
         return;
       }
@@ -322,26 +323,26 @@
       // supertypes.
       cls.ensureResolved(compiler);
 
-      void processClass(ClassElement cls) {
-        if (_processedClasses.contains(cls)) return;
+      void processClass(ClassElement superclass) {
+        if (_processedClasses.contains(superclass)) return;
 
-        _processedClasses.add(cls);
-        recentClasses.add(cls);
-        cls.ensureResolved(compiler);
-        cls.implementation.forEachMember(processInstantiatedClassMember);
-        if (isResolutionQueue && !cls.isSynthesized) {
-          compiler.resolver.checkClass(cls);
+        _processedClasses.add(superclass);
+        recentClasses.add(superclass);
+        superclass.ensureResolved(compiler);
+        superclass.implementation.forEachMember(processInstantiatedClassMember);
+        if (isResolutionQueue && !superclass.isSynthesized) {
+          compiler.resolver.checkClass(superclass);
         }
-        // We only tell the backend once that [cls] was instantiated, so
+        // We only tell the backend once that [superclass] was instantiated, so
         // any additional dependencies must be treated as global
         // dependencies.
         compiler.backend.registerInstantiatedClass(
-            cls, this, compiler.globalDependencies);
+            superclass, this, compiler.globalDependencies);
       }
-      processClass(cls);
-      for (Link<DartType> supertypes = cls.allSupertypes;
-           !supertypes.isEmpty; supertypes = supertypes.tail) {
-        processClass(supertypes.head.element);
+
+      while (cls != null) {
+        processClass(cls);
+        cls = cls.superclass;
       }
     });
   }
@@ -396,7 +397,10 @@
         includedEnclosing: enclosingWasIncluded)) {
       logEnqueueReflectiveAction(ctor);
       ClassElement cls = ctor.declaration.enclosingClass;
-      registerInstantiatedType(cls.rawType, compiler.mirrorDependencies,
+      compiler.backend.registerInstantiatedType(
+          cls.rawType,
+          this,
+          compiler.mirrorDependencies,
           mirrorUsage: true);
       registerStaticUse(ctor.declaration);
     }
@@ -447,7 +451,10 @@
       logEnqueueReflectiveAction(cls, "register");
       ClassElement decl = cls.declaration;
       decl.ensureResolved(compiler);
-      registerInstantiatedType(decl.rawType, compiler.mirrorDependencies,
+      compiler.backend.registerInstantiatedType(
+          decl.rawType,
+          this,
+          compiler.mirrorDependencies,
           mirrorUsage: true);
     }
     // If the class is never instantiated, we know nothing of it can possibly
@@ -478,7 +485,10 @@
       if (compiler.backend.referencedFromMirrorSystem(cls)) {
         logEnqueueReflectiveAction(cls);
         cls.ensureResolved(compiler);
-        registerInstantiatedType(cls.rawType, compiler.mirrorDependencies,
+        compiler.backend.registerInstantiatedType(
+            cls.rawType,
+            this,
+            compiler.mirrorDependencies,
             mirrorUsage: true);
       }
     }
@@ -576,7 +586,7 @@
     processInstanceMembers(methodName, (Element member) {
       if (universeSelector.appliesUnnamed(member, compiler.world)) {
         if (member.isFunction && selector.isGetter) {
-          registerClosurizedMember(member, compiler.globalDependencies);
+          registerClosurizedMember(member);
         }
         if (member.isField && member.enclosingClass.isNative) {
           if (selector.isGetter || selector.isCall) {
@@ -604,7 +614,7 @@
     if (selector.isGetter) {
       processInstanceFunctions(methodName, (Element member) {
         if (universeSelector.appliesUnnamed(member, compiler.world)) {
-          registerClosurizedMember(member, compiler.globalDependencies);
+          registerClosurizedMember(member);
           return true;
         }
         return false;
@@ -682,33 +692,24 @@
            !type.element.enclosingElement.isTypedef);
   }
 
-  void registerCallMethodWithFreeTypeVariables(
-      Element element,
-      Registry registry) {
+  void registerCallMethodWithFreeTypeVariables(Element element) {
     compiler.backend.registerCallMethodWithFreeTypeVariables(
-        element, this, registry);
+        element, this, compiler.globalDependencies);
     universe.callMethodsWithFreeTypeVariables.add(element);
   }
 
-  void registerClosurizedMember(TypedElement element, Registry registry) {
+  void registerClosurizedMember(TypedElement element) {
     assert(element.isInstanceMember);
-    registerClosureIfFreeTypeVariables(element, registry);
+    if (element.computeType(compiler).containsTypeVariables) {
+      compiler.backend.registerClosureWithFreeTypeVariables(
+          element, this, compiler.globalDependencies);
+    }
     compiler.backend.registerBoundClosure(this);
     universe.closurizedMembers.add(element);
   }
 
-  void registerClosureIfFreeTypeVariables(TypedElement element,
-                                          Registry registry) {
-    if (element.computeType(compiler).containsTypeVariables) {
-      compiler.backend.registerClosureWithFreeTypeVariables(
-          element, this, registry);
-      universe.closuresWithFreeTypeVariables.add(element);
-    }
-  }
-
-  void registerClosure(LocalFunctionElement element, Registry registry) {
+  void registerClosure(LocalFunctionElement element) {
     universe.allClosures.add(element);
-    registerClosureIfFreeTypeVariables(element, registry);
   }
 
   void forEach(void f(WorkItem work)) {
diff --git a/pkg/compiler/lib/src/inferrer/concrete_types_inferrer.dart b/pkg/compiler/lib/src/inferrer/concrete_types_inferrer.dart
index 4bb654a..7b0cf06 100644
--- a/pkg/compiler/lib/src/inferrer/concrete_types_inferrer.dart
+++ b/pkg/compiler/lib/src/inferrer/concrete_types_inferrer.dart
@@ -436,6 +436,12 @@
     return _stringType;
   }
 
+  @override
+  ConcreteType boolLiteralType(_) {
+    inferrer.augmentSeenClasses(compiler.backend.boolImplementation);
+    return _boolType;
+  }
+
   /**
    * Returns the [TypeMask] representation of [baseType].
    */
@@ -454,6 +460,8 @@
       } else if (element == compiler.backend.intImplementation) {
         return new TypeMask.nonNullSubclass(compiler.backend.intImplementation,
                                             compiler.world);
+      } else if (!compiler.world.isInstantiated(element.declaration)) {
+        return new TypeMask.nonNullSubtype(element.declaration, compiler.world);
       } else {
         return new TypeMask.nonNullExact(element.declaration, compiler.world);
       }
diff --git a/pkg/compiler/lib/src/inferrer/inferrer_visitor.dart b/pkg/compiler/lib/src/inferrer/inferrer_visitor.dart
index 08fa945..bfd3360 100644
--- a/pkg/compiler/lib/src/inferrer/inferrer_visitor.dart
+++ b/pkg/compiler/lib/src/inferrer/inferrer_visitor.dart
@@ -58,6 +58,7 @@
   T get typeType;
 
   T stringLiteralType(DartString value);
+  T boolLiteralType(LiteralBool value);
 
   T nonNullSubtype(ClassElement type);
   T nonNullSubclass(ClassElement type);
@@ -832,7 +833,7 @@
   }
 
   T visitLiteralBool(LiteralBool node) {
-    return types.boolType;
+    return types.boolLiteralType(node);
   }
 
   T visitLiteralDouble(LiteralDouble node) {
diff --git a/pkg/compiler/lib/src/inferrer/node_tracer.dart b/pkg/compiler/lib/src/inferrer/node_tracer.dart
index 1dda7d4..371adb5 100644
--- a/pkg/compiler/lib/src/inferrer/node_tracer.dart
+++ b/pkg/compiler/lib/src/inferrer/node_tracer.dart
@@ -179,6 +179,8 @@
 
   void visitStringLiteralTypeInformation(StringLiteralTypeInformation info) {}
 
+  void visitBoolLiteralTypeInformation(BoolLiteralTypeInformation info) {}
+
   void visitClosureTypeInformation(ClosureTypeInformation info) {}
 
   void visitClosureCallSiteTypeInformation(
diff --git a/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart b/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart
index ec61e4b..30c9c8c 100644
--- a/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart
+++ b/pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart
@@ -121,6 +121,7 @@
   bool isNull(TypeMask mask) => mask.isEmpty && mask.isNullable;
 
   TypeMask stringLiteralType(ast.DartString value) => stringType;
+  TypeMask boolLiteralType(ast.LiteralBool value) => boolType;
 
   TypeMask nonNullSubtype(ClassElement type)
       => new TypeMask.nonNullSubtype(type.declaration, classWorld);
diff --git a/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart b/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart
index efaae28..1bcb5d5 100644
--- a/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart
+++ b/pkg/compiler/lib/src/inferrer/type_graph_inferrer.dart
@@ -35,6 +35,7 @@
 import '../tree/tree.dart' as ast show
     DartString,
     Node,
+    LiteralBool,
     Send,
     SendSet,
     TryStatement;
@@ -242,6 +243,10 @@
         value, compiler.typesTask.stringType);
   }
 
+  TypeInformation boolLiteralType(ast.LiteralBool value) {
+    return new BoolLiteralTypeInformation(value, compiler.typesTask.boolType);
+  }
+
   TypeInformation computeLUB(TypeInformation firstType,
                              TypeInformation secondType) {
     if (firstType == null) return secondType;
diff --git a/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart b/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
index 9b2123e..df00807 100644
--- a/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
+++ b/pkg/compiler/lib/src/inferrer/type_graph_nodes.dart
@@ -1127,6 +1127,20 @@
   }
 }
 
+class BoolLiteralTypeInformation extends ConcreteTypeInformation {
+  final ast.LiteralBool value;
+
+  BoolLiteralTypeInformation(value, TypeMask mask)
+      : super(new ValueTypeMask(mask, value.value)),
+        this.value = value;
+
+  String toString() => 'Type $type value ${value.value}';
+
+  accept(TypeInformationVisitor visitor) {
+    return visitor.visitBoolLiteralTypeInformation(this);
+  }
+}
+
 /**
  * A [NarrowTypeInformation] narrows a [TypeInformation] to a type,
  * represented in [typeAnnotation].
@@ -1585,6 +1599,7 @@
   T visitMapTypeInformation(MapTypeInformation info);
   T visitConcreteTypeInformation(ConcreteTypeInformation info);
   T visitStringLiteralTypeInformation(StringLiteralTypeInformation info);
+  T visitBoolLiteralTypeInformation(BoolLiteralTypeInformation info);
   T visitClosureCallSiteTypeInformation(ClosureCallSiteTypeInformation info);
   T visitStaticCallSiteTypeInformation(StaticCallSiteTypeInformation info);
   T visitDynamicCallSiteTypeInformation(DynamicCallSiteTypeInformation info);
diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart
index a8d66e0..ff254c9d 100644
--- a/pkg/compiler/lib/src/js_backend/backend.dart
+++ b/pkg/compiler/lib/src/js_backend/backend.dart
@@ -215,7 +215,7 @@
 enum SyntheticConstantKind {
   DUMMY_INTERCEPTOR,
   EMPTY_VALUE,
-  TYPEVARIABLE_REFERENCE,
+  TYPEVARIABLE_REFERENCE,  // Reference to a type in reflection data.
   NAME
 }
 
@@ -902,7 +902,7 @@
       cls.ensureResolved(compiler);
       cls.forEachMember((ClassElement classElement, Element member) {
         if (member.name == Identifiers.call) {
-          compiler.reportError(
+          compiler.reportErrorMessage(
               member,
               MessageKind.CALL_NOT_SUPPORTED_ON_NATIVE_CLASS);
           return;
@@ -1028,6 +1028,18 @@
   void registerInstantiatedClass(ClassElement cls,
                                  Enqueuer enqueuer,
                                  Registry registry) {
+    _processClass(cls, enqueuer, registry);
+  }
+
+  void registerImplementedClass(ClassElement cls,
+                                Enqueuer enqueuer,
+                                Registry registry) {
+    _processClass(cls, enqueuer, registry);
+  }
+
+  void _processClass(ClassElement cls,
+                     Enqueuer enqueuer,
+                     Registry registry) {
     if (!cls.typeVariables.isEmpty) {
       typeVariableHandler.registerClassWithTypeVariables(cls, enqueuer,
                                                          registry);
@@ -1159,8 +1171,13 @@
     }
   }
 
-  void registerInstantiatedType(InterfaceType type, Registry registry) {
+  void registerInstantiatedType(InterfaceType type,
+                                Enqueuer enqueuer,
+                                Registry registry,
+                                {bool mirrorUsage: false}) {
     lookupMapAnalysis.registerInstantiatedType(type, registry);
+    super.registerInstantiatedType(
+        type, enqueuer, registry, mirrorUsage: mirrorUsage);
   }
 
   void registerUseInterceptor(Enqueuer enqueuer) {
@@ -1235,6 +1252,7 @@
     if (enqueuer.isResolutionQueue || methodNeedsRti(closure)) {
       registerComputeSignature(enqueuer, registry);
     }
+    super.registerClosureWithFreeTypeVariables(closure, enqueuer, registry);
   }
 
   /// Call during codegen if an instance of [closure] is being created.
@@ -1247,16 +1265,19 @@
 
   void registerBoundClosure(Enqueuer enqueuer) {
     boundClosureClass.ensureResolved(compiler);
-    enqueuer.registerInstantiatedType(
+    registerInstantiatedType(
         boundClosureClass.rawType,
+        enqueuer,
         // Precise dependency is not important here.
         compiler.globalDependencies);
   }
 
   void registerGetOfStaticFunction(Enqueuer enqueuer) {
     closureClass.ensureResolved(compiler);
-    enqueuer.registerInstantiatedType(
-        closureClass.rawType, compiler.globalDependencies);
+    registerInstantiatedType(
+        closureClass.rawType,
+        enqueuer,
+        compiler.globalDependencies);
   }
 
   void registerComputeSignature(Enqueuer enqueuer, Registry registry) {
@@ -1442,7 +1463,7 @@
       helpersUsed.add(cls.implementation);
     }
     cls.ensureResolved(compiler);
-    enqueuer.registerInstantiatedType(cls.rawType, registry);
+    registerInstantiatedType(cls.rawType, enqueuer, registry);
   }
 
   WorldImpact codegen(CodegenWorkItem work) {
@@ -1514,11 +1535,13 @@
     if (totalMethodCount != preMirrorsMethodCount) {
       int mirrorCount = totalMethodCount - preMirrorsMethodCount;
       double percentage = (mirrorCount / totalMethodCount) * 100;
-      compiler.reportHint(
+      DiagnosticMessage hint = compiler.createMessage(
           compiler.mainApp, MessageKind.MIRROR_BLOAT,
           {'count': mirrorCount,
            'total': totalMethodCount,
            'percentage': percentage.round()});
+
+      List<DiagnosticMessage> infos = <DiagnosticMessage>[];
       for (LibraryElement library in compiler.libraryLoader.libraries) {
         if (library.isInternalLibrary) continue;
         for (ImportElement import in library.imports) {
@@ -1529,10 +1552,11 @@
               ? MessageKind.MIRROR_IMPORT
               : MessageKind.MIRROR_IMPORT_NO_USAGE;
           compiler.withCurrentElement(library, () {
-            compiler.reportInfo(import, kind);
+            infos.add(compiler.createMessage(import, kind));
           });
         }
       }
+      compiler.reportHint(hint, infos);
     }
     return programSize;
   }
@@ -2634,7 +2658,8 @@
       if (cls == forceInlineClass) {
         hasForceInline = true;
         if (VERBOSE_OPTIMIZER_HINTS) {
-          compiler.reportHint(element,
+          compiler.reportHintMessage(
+              element,
               MessageKind.GENERIC,
               {'text': "Must inline"});
         }
@@ -2642,7 +2667,8 @@
       } else if (cls == noInlineClass) {
         hasNoInline = true;
         if (VERBOSE_OPTIMIZER_HINTS) {
-          compiler.reportHint(element,
+          compiler.reportHintMessage(
+              element,
               MessageKind.GENERIC,
               {'text': "Cannot inline"});
         }
@@ -2655,7 +2681,8 @@
               " or static functions");
         }
         if (VERBOSE_OPTIMIZER_HINTS) {
-          compiler.reportHint(element,
+          compiler.reportHintMessage(
+              element,
               MessageKind.GENERIC,
               {'text': "Cannot throw"});
         }
@@ -2663,7 +2690,8 @@
       } else if (cls == noSideEffectsClass) {
         hasNoSideEffects = true;
         if (VERBOSE_OPTIMIZER_HINTS) {
-          compiler.reportHint(element,
+          compiler.reportHintMessage(
+              element,
               MessageKind.GENERIC,
               {'text': "Has no side effects"});
         }
@@ -2740,7 +2768,7 @@
     } else if (element.asyncMarker == AsyncMarker.SYNC_STAR) {
       ClassElement clsSyncStarIterable = getSyncStarIterable();
       clsSyncStarIterable.ensureResolved(compiler);
-      enqueuer.registerInstantiatedType(clsSyncStarIterable.rawType, registry);
+      registerInstantiatedType(clsSyncStarIterable.rawType, enqueuer, registry);
       enqueue(enqueuer, getSyncStarIterableConstructor(), registry);
       enqueue(enqueuer, getEndOfIteration(), registry);
       enqueue(enqueuer, getYieldStar(), registry);
@@ -2748,8 +2776,8 @@
     } else if (element.asyncMarker == AsyncMarker.ASYNC_STAR) {
       ClassElement clsASyncStarController = getASyncStarController();
       clsASyncStarController.ensureResolved(compiler);
-      enqueuer.registerInstantiatedType(
-          clsASyncStarController.rawType, registry);
+      registerInstantiatedType(
+          clsASyncStarController.rawType, enqueuer, registry);
       enqueue(enqueuer, getAsyncStarHelper(), registry);
       enqueue(enqueuer, getStreamOfController(), registry);
       enqueue(enqueuer, getYieldSingle(), registry);
@@ -2769,7 +2797,7 @@
   @override
   bool enableCodegenWithErrorsIfSupported(Spannable node) {
     if (compiler.useCpsIr) {
-      compiler.reportHint(
+      compiler.reportHintMessage(
           node,
           MessageKind.GENERIC,
           {'text': "Generation of code with compile time errors is currently "
diff --git a/pkg/compiler/lib/src/js_backend/codegen/task.dart b/pkg/compiler/lib/src/js_backend/codegen/task.dart
index 4bae7de..92cd2c0 100644
--- a/pkg/compiler/lib/src/js_backend/codegen/task.dart
+++ b/pkg/compiler/lib/src/js_backend/codegen/task.dart
@@ -39,6 +39,7 @@
 import '../../tree_ir/tree_ir_integrity.dart';
 import '../../cps_ir/cps_ir_nodes_sexpr.dart';
 import '../../cps_ir/type_mask_system.dart';
+import '../../common/tasks.dart';
 
 class CpsFunctionCompiler implements FunctionCompiler {
   final ConstantSystem constantSystem;
@@ -53,16 +54,23 @@
 
   Tracer get tracer => compiler.tracer;
 
-  IrBuilderTask get irBuilderTask => compiler.irBuilder;
+  final IrBuilderTask cpsBuilderTask;
+  final GenericTask cpsOptimizationTask;
+  final GenericTask treeBuilderTask;
+  final GenericTask treeOptimizationTask;
 
   CpsFunctionCompiler(Compiler compiler, JavaScriptBackend backend,
                       SourceInformationStrategy sourceInformationFactory)
       : fallbackCompiler =
             new ssa.SsaFunctionCompiler(backend, sourceInformationFactory),
+        cpsBuilderTask = new IrBuilderTask(compiler, sourceInformationFactory),
         this.sourceInformationFactory = sourceInformationFactory,
         constantSystem = backend.constantSystem,
         compiler = compiler,
-        glue = new Glue(compiler);
+        glue = new Glue(compiler),
+        cpsOptimizationTask = new GenericTask('CPS optimization', compiler),
+        treeBuilderTask = new GenericTask('Tree builder', compiler),
+        treeOptimizationTask = new GenericTask('Tree optimization', compiler);
 
   String get name => 'CPS Ir pipeline';
 
@@ -108,19 +116,21 @@
   }
 
   void applyCpsPass(cps_opt.Pass pass, cps.FunctionDefinition cpsFunction) {
-    pass.rewrite(cpsFunction);
+    cpsOptimizationTask.measureSubtask(pass.passName, () {
+      pass.rewrite(cpsFunction);
+    });
     traceGraph(pass.passName, cpsFunction);
     dumpTypedIr(pass.passName, cpsFunction);
     assert(checkCpsIntegrity(cpsFunction));
   }
 
   cps.FunctionDefinition compileToCpsIr(AstElement element) {
-    cps.FunctionDefinition cpsFunction = irBuilderTask.buildNode(element);
+    cps.FunctionDefinition cpsFunction = cpsBuilderTask.buildNode(element);
     if (cpsFunction == null) {
-      if (irBuilderTask.bailoutMessage == null) {
+      if (cpsBuilderTask.bailoutMessage == null) {
         giveUp('unable to build cps definition of $element');
       } else {
-        giveUp(irBuilderTask.bailoutMessage);
+        giveUp(cpsBuilderTask.bailoutMessage);
       }
     }
     traceGraph('IR Builder', cpsFunction);
@@ -185,7 +195,6 @@
     applyCpsPass(new RedundantJoinEliminator(), cpsFunction);
     applyCpsPass(new RedundantPhiEliminator(), cpsFunction);
     applyCpsPass(new ShrinkingReducer(), cpsFunction);
-    applyCpsPass(new LoopInvariantCodeMotion(), cpsFunction);
     applyCpsPass(new ShareInterceptors(), cpsFunction);
     applyCpsPass(new ShrinkingReducer(), cpsFunction);
 
@@ -195,7 +204,8 @@
   tree_ir.FunctionDefinition compileToTreeIr(cps.FunctionDefinition cpsNode) {
     tree_builder.Builder builder = new tree_builder.Builder(
         compiler.internalError);
-    tree_ir.FunctionDefinition treeNode = builder.buildFunction(cpsNode);
+    tree_ir.FunctionDefinition treeNode =
+        treeBuilderTask.measure(() => builder.buildFunction(cpsNode));
     assert(treeNode != null);
     traceGraph('Tree builder', treeNode);
     assert(checkTreeIntegrity(treeNode));
@@ -209,7 +219,9 @@
 
   tree_ir.FunctionDefinition optimizeTreeIr(tree_ir.FunctionDefinition node) {
     void applyTreePass(tree_opt.Pass pass) {
-      pass.rewrite(node);
+      treeOptimizationTask.measureSubtask(pass.passName, () {
+        pass.rewrite(node);
+      });
       traceGraph(pass.passName, node);
       assert(checkTreeIntegrity(node));
     }
@@ -236,8 +248,12 @@
   }
 
   Iterable<CompilerTask> get tasks {
-    // TODO(sigurdm): Make a better list of tasks.
-    return <CompilerTask>[irBuilderTask]..addAll(fallbackCompiler.tasks);
+    return <CompilerTask>[
+        cpsBuilderTask,
+        cpsOptimizationTask,
+        treeBuilderTask,
+        treeOptimizationTask]
+      ..addAll(fallbackCompiler.tasks);
   }
 
   js.Node attachPosition(js.Node node, AstElement element) {
diff --git a/pkg/compiler/lib/src/js_backend/js_backend.dart b/pkg/compiler/lib/src/js_backend/js_backend.dart
index d616728..5cf86f4 100644
--- a/pkg/compiler/lib/src/js_backend/js_backend.dart
+++ b/pkg/compiler/lib/src/js_backend/js_backend.dart
@@ -35,6 +35,8 @@
 import '../constants/expressions.dart';
 import '../constants/values.dart';
 import '../dart_types.dart';
+import '../diagnostics/diagnostic_listener.dart' show
+    DiagnosticMessage;
 import '../diagnostics/invariant.dart' show
     invariant;
 import '../diagnostics/messages.dart' show MessageKind;
diff --git a/pkg/compiler/lib/src/js_backend/namer.dart b/pkg/compiler/lib/src/js_backend/namer.dart
index 541aa7b..14a399c 100644
--- a/pkg/compiler/lib/src/js_backend/namer.dart
+++ b/pkg/compiler/lib/src/js_backend/namer.dart
@@ -513,8 +513,9 @@
       case JsGetName.FUNCTION_CLASS_TYPE_NAME:
         return runtimeTypeName(compiler.functionClass);
       default:
-        compiler.reportError(
-          node, MessageKind.GENERIC,
+        compiler.reportErrorMessage(
+          node,
+          MessageKind.GENERIC,
           {'text': 'Error: Namer has no name for "$name".'});
         return asName('BROKEN');
     }
@@ -1710,11 +1711,17 @@
 
   @override
   void visitType(TypeConstantValue constant, [_]) {
+    // Generates something like 'Type_String_k8F', using the simple name of the
+    // type and a hash to disambiguate the same name in different libraries.
     addRoot('Type');
     DartType type = constant.representedType;
-    JavaScriptBackend backend = compiler.backend;
-    String name = backend.rti.getTypeRepresentationForTypeConstant(type);
+    String name = type.element?.name;
+    if (name == null) {  // e.g. DartType 'dynamic' has no element.
+      JavaScriptBackend backend = compiler.backend;
+      name = backend.rti.getTypeRepresentationForTypeConstant(type);
+    }
     addIdentifier(name);
+    add(getHashTag(constant, 3));
   }
 
   @override
@@ -1730,7 +1737,7 @@
         add('dummy_receiver');
         break;
       case SyntheticConstantKind.TYPEVARIABLE_REFERENCE:
-        add('type_variable_reference');
+        // Omit. These are opaque deferred indexes with nothing helpful to add.
         break;
       case SyntheticConstantKind.NAME:
         add('name');
@@ -1829,6 +1836,7 @@
   int visitType(TypeConstantValue constant, [_]) {
     DartType type = constant.representedType;
     JavaScriptBackend backend = compiler.backend;
+    // This name includes the library name and type parameters.
     String name = backend.rti.getTypeRepresentationForTypeConstant(type);
     return _hashString(4, name);
   }
@@ -1840,15 +1848,18 @@
   }
 
   @override
-  visitSynthetic(SyntheticConstantValue constant, [_]) {
+  int visitSynthetic(SyntheticConstantValue constant, [_]) {
     switch (constant.kind) {
       case SyntheticConstantKind.TYPEVARIABLE_REFERENCE:
-        return constant.payload.hashCode;
+        // These contain a deferred opaque index into metadata. There is nothing
+        // we can access that is stable between compiles.  Luckily, since they
+        // resolve to integer indexes, they're always part of a larger constant.
+        return 0;
       default:
         compiler.internalError(NO_LOCATION_SPANNABLE,
                                'SyntheticConstantValue should never be named and '
                                'never be subconstant');
-        return null;
+        return 0;
     }
   }
 
diff --git a/pkg/compiler/lib/src/js_backend/no_such_method_registry.dart b/pkg/compiler/lib/src/js_backend/no_such_method_registry.dart
index eb4f42c5..0a322bd 100644
--- a/pkg/compiler/lib/src/js_backend/no_such_method_registry.dart
+++ b/pkg/compiler/lib/src/js_backend/no_such_method_registry.dart
@@ -82,20 +82,20 @@
   void emitDiagnostic() {
     throwingImpls.forEach((e) {
         if (!_hasForwardingSyntax(e)) {
-          _compiler.reportHint(e,
-                               MessageKind.DIRECTLY_THROWING_NSM);
+          _compiler.reportHintMessage(
+              e, MessageKind.DIRECTLY_THROWING_NSM);
         }
       });
     complexNoReturnImpls.forEach((e) {
         if (!_hasForwardingSyntax(e)) {
-          _compiler.reportHint(e,
-                               MessageKind.COMPLEX_THROWING_NSM);
+          _compiler.reportHintMessage(
+              e, MessageKind.COMPLEX_THROWING_NSM);
         }
       });
     complexReturningImpls.forEach((e) {
         if (!_hasForwardingSyntax(e)) {
-          _compiler.reportHint(e,
-                               MessageKind.COMPLEX_RETURNING_NSM);
+          _compiler.reportHintMessage(
+              e, MessageKind.COMPLEX_RETURNING_NSM);
         }
       });
   }
diff --git a/pkg/compiler/lib/src/js_backend/patch_resolver.dart b/pkg/compiler/lib/src/js_backend/patch_resolver.dart
index aea3cbf..36dfd07 100644
--- a/pkg/compiler/lib/src/js_backend/patch_resolver.dart
+++ b/pkg/compiler/lib/src/js_backend/patch_resolver.dart
@@ -9,9 +9,12 @@
 import '../compiler.dart' show
     Compiler;
 import '../dart_types.dart';
+import '../diagnostics/diagnostic_listener.dart' show
+    DiagnosticMessage;
 import '../diagnostics/invariant.dart' show
     invariant;
-import '../diagnostics/messages.dart' show MessageKind;
+import '../diagnostics/messages.dart' show
+    MessageKind;
 import '../elements/elements.dart';
 import '../elements/modelx.dart';
 import '../tree/tree.dart';
@@ -31,7 +34,7 @@
       checkMatchingPatchSignatures(element, patch);
       element = patch;
     } else {
-      compiler.reportError(
+      compiler.reportErrorMessage(
          element, MessageKind.PATCH_EXTERNAL_WITHOUT_IMPLEMENTATION);
     }
     return element;
@@ -57,15 +60,19 @@
       DartType patchParameterType = patchParameter.computeType(compiler);
       if (originParameterType != patchParameterType) {
         compiler.reportError(
-            originParameter.parseNode(compiler),
-            MessageKind.PATCH_PARAMETER_TYPE_MISMATCH,
-            {'methodName': origin.name,
-             'parameterName': originParameter.name,
-             'originParameterType': originParameterType,
-             'patchParameterType': patchParameterType});
-        compiler.reportInfo(patchParameter,
-            MessageKind.PATCH_POINT_TO_PARAMETER,
-            {'parameterName': patchParameter.name});
+            compiler.createMessage(
+                originParameter.parseNode(compiler),
+                MessageKind.PATCH_PARAMETER_TYPE_MISMATCH,
+                {'methodName': origin.name,
+                 'parameterName': originParameter.name,
+                 'originParameterType': originParameterType,
+                 'patchParameterType': patchParameterType}),
+            <DiagnosticMessage>[
+              compiler.createMessage(
+                  patchParameter,
+                  MessageKind.PATCH_POINT_TO_PARAMETER,
+                  {'parameterName': patchParameter.name}),
+            ]);
       } else {
         // Hack: Use unparser to test parameter equality. This only works
         // because we are restricting patch uses and the approach cannot be used
@@ -82,14 +89,19 @@
             // optional parameter.
             && origin != compiler.unnamedListConstructor) {
           compiler.reportError(
-              originParameter.parseNode(compiler),
-              MessageKind.PATCH_PARAMETER_MISMATCH,
-              {'methodName': origin.name,
-               'originParameter': originParameterText,
-               'patchParameter': patchParameterText});
-          compiler.reportInfo(patchParameter,
-              MessageKind.PATCH_POINT_TO_PARAMETER,
-              {'parameterName': patchParameter.name});
+              compiler.createMessage(
+                  originParameter.parseNode(compiler),
+                  MessageKind.PATCH_PARAMETER_MISMATCH,
+                  {'methodName': origin.name,
+                   'originParameter': originParameterText,
+                   'patchParameter': patchParameterText}),
+              <DiagnosticMessage>[
+                  compiler.createMessage(
+                      patchParameter,
+                      MessageKind.PATCH_POINT_TO_PARAMETER,
+                      {'parameterName': patchParameter.name}),
+              ]);
+
         }
       }
     }
@@ -106,7 +118,7 @@
       compiler.withCurrentElement(patch, () {
         Node errorNode =
             patchTree.returnType != null ? patchTree.returnType : patchTree;
-        compiler.reportError(
+        compiler.reportErrorMessage(
             errorNode, MessageKind.PATCH_RETURN_TYPE_MISMATCH,
             {'methodName': origin.name,
              'originReturnType': originSignature.type.returnType,
@@ -116,7 +128,7 @@
     if (originSignature.requiredParameterCount !=
         patchSignature.requiredParameterCount) {
       compiler.withCurrentElement(patch, () {
-        compiler.reportError(
+        compiler.reportErrorMessage(
             patchTree,
             MessageKind.PATCH_REQUIRED_PARAMETER_COUNT_MISMATCH,
             {'methodName': origin.name,
@@ -133,7 +145,7 @@
       if (originSignature.optionalParametersAreNamed !=
           patchSignature.optionalParametersAreNamed) {
         compiler.withCurrentElement(patch, () {
-          compiler.reportError(
+          compiler.reportErrorMessage(
               patchTree,
               MessageKind.PATCH_OPTIONAL_PARAMETER_NAMED_MISMATCH,
               {'methodName': origin.name});
@@ -143,7 +155,7 @@
     if (originSignature.optionalParameterCount !=
         patchSignature.optionalParameterCount) {
       compiler.withCurrentElement(patch, () {
-        compiler.reportError(
+        compiler.reportErrorMessage(
             patchTree,
             MessageKind.PATCH_OPTIONAL_PARAMETER_COUNT_MISMATCH,
             {'methodName': origin.name,
diff --git a/pkg/compiler/lib/src/js_backend/type_variable_handler.dart b/pkg/compiler/lib/src/js_backend/type_variable_handler.dart
index 82b4fe5..6832d33 100644
--- a/pkg/compiler/lib/src/js_backend/type_variable_handler.dart
+++ b/pkg/compiler/lib/src/js_backend/type_variable_handler.dart
@@ -52,7 +52,8 @@
         }
         _typeVariableConstructor = _typeVariableClass.constructors.head;
         _backend.enqueueInResolution(_typeVariableConstructor, registry);
-        enqueuer.registerInstantiatedType(_typeVariableClass.rawType, registry);
+        _backend.registerInstantiatedType(
+            _typeVariableClass.rawType, enqueuer, registry);
         enqueuer.registerStaticUse(
             _backend.registerBackendUse(_backend.getCreateRuntimeType()));
         _seenClassesWithTypeVariables = true;
diff --git a/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
index d6748b9..c71eaa2 100644
--- a/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart
@@ -1812,7 +1812,8 @@
 
     if (backend.requiresPreamble &&
         !backend.htmlLibraryIsLoaded) {
-      compiler.reportHint(NO_LOCATION_SPANNABLE, MessageKind.PREAMBLE);
+      compiler.reportHintMessage(
+          NO_LOCATION_SPANNABLE, MessageKind.PREAMBLE);
     }
     // Return the total program size.
     return outputBuffers.values.fold(0, (a, b) => a + b.length);
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
index aa2de77..c01ab90 100644
--- a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
@@ -777,14 +777,27 @@
     List<js.Expression> inheritCalls = <js.Expression>[];
     List<js.Expression> mixinCalls = <js.Expression>[];
 
+    Set<Class> emittedClasses = new Set<Class>();
+
+    void emitInheritanceForClass(cls) {
+      if (cls == null || emittedClasses.contains(cls)) return;
+
+      Class superclass = cls.superclass;
+      emitInheritanceForClass(superclass);
+
+      js.Expression superclassReference = (superclass == null)
+          ? new js.LiteralNull()
+          : classReference(superclass);
+
+      inheritCalls.add(js.js('inherit(#, #)',
+          [classReference(cls), superclassReference]));
+
+      emittedClasses.add(cls);
+    }
+
     for (Library library in fragment.libraries) {
       for (Class cls in library.classes) {
-        js.Expression superclassReference = (cls.superclass == null)
-            ? new js.LiteralNull()
-            : classReference(cls.superclass);
-
-        inheritCalls.add(js.js('inherit(#, #)',
-            [classReference(cls), superclassReference]));
+        emitInheritanceForClass(cls);
 
         if (cls.isMixinApplication) {
           MixinApplication mixin = cls;
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
index 7885940..8c9f247 100644
--- a/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
@@ -211,7 +211,8 @@
 
     if (backend.requiresPreamble &&
         !backend.htmlLibraryIsLoaded) {
-      compiler.reportHint(NO_LOCATION_SPANNABLE, MessageKind.PREAMBLE);
+      compiler.reportHintMessage(
+          NO_LOCATION_SPANNABLE, MessageKind.PREAMBLE);
     }
 
     if (compiler.deferredMapUri != null) {
diff --git a/pkg/compiler/lib/src/library_loader.dart b/pkg/compiler/lib/src/library_loader.dart
index dbdd3a0..08aaf90 100644
--- a/pkg/compiler/lib/src/library_loader.dart
+++ b/pkg/compiler/lib/src/library_loader.dart
@@ -395,7 +395,7 @@
           try {
             return Uri.parse(tagUriString);
           } on FormatException {
-            compiler.reportError(
+            compiler.reportErrorMessage(
                 node.uri,
                 MessageKind.INVALID_URI, {'uri': tagUriString});
             return null;
@@ -482,7 +482,8 @@
     if (!identical(existing, library)) {
       if (library.hasLibraryName) {
         compiler.withCurrentElement(library, () {
-          compiler.reportWarning(library,
+          compiler.reportWarningMessage(
+              library,
               MessageKind.DUPLICATED_LIBRARY_RESOURCE,
               {'libraryName': library.libraryName,
                'resourceUri': resourceUri,
@@ -490,7 +491,8 @@
                'canonicalUri2': existing.canonicalUri});
         });
       } else {
-        compiler.reportHint(library,
+        compiler.reportHintMessage(
+            library,
             MessageKind.DUPLICATED_RESOURCE,
             {'resourceUri': resourceUri,
              'canonicalUri1': library.canonicalUri,
@@ -501,12 +503,14 @@
       existing = libraryNames.putIfAbsent(name, () => library);
       if (!identical(existing, library)) {
         compiler.withCurrentElement(library, () {
-          compiler.reportWarning(library,
+          compiler.reportWarningMessage(
+              library,
               MessageKind.DUPLICATED_LIBRARY_NAME,
               {'libraryName': name});
         });
         compiler.withCurrentElement(existing, () {
-          compiler.reportWarning(existing,
+          compiler.reportWarningMessage(
+              existing,
               MessageKind.DUPLICATED_LIBRARY_NAME,
               {'libraryName': name});
         });
@@ -532,7 +536,8 @@
             compiler.withCurrentElement(unit, () {
               compiler.scanner.scan(unit);
               if (unit.partTag == null && !sourceScript.isSynthesized) {
-                compiler.reportError(unit, MessageKind.MISSING_PART_OF_TAG);
+                compiler.reportErrorMessage(
+                    unit, MessageKind.MISSING_PART_OF_TAG);
               }
             });
           });
@@ -699,7 +704,7 @@
         default:
           listener.internalError(tag, "Unexpected order of library tags.");
       }
-      listener.reportError(tag, kind);
+      listener.reportErrorMessage(tag, kind);
     }
     tagState = NEXT[value];
     if (value == LIBRARY) {
@@ -931,41 +936,49 @@
   Element addElementToExportScope(Compiler compiler, Element element,
                                   Link<ExportElement> exports) {
     String name = element.name;
+    DiagnosticMessage error;
+    List<DiagnosticMessage> infos = <DiagnosticMessage>[];
 
-    void reportDuplicateExport(Element duplicate,
-                               Link<ExportElement> duplicateExports,
-                               {bool reportError: true}) {
+    void createDuplicateExportMessage(
+        Element duplicate,
+        Link<ExportElement> duplicateExports) {
       assert(invariant(library, !duplicateExports.isEmpty,
           message: "No export for $duplicate from ${duplicate.library} "
                    "in $library."));
       compiler.withCurrentElement(library, () {
         for (ExportElement export in duplicateExports) {
-          if (reportError) {
-            compiler.reportError(export,
-                MessageKind.DUPLICATE_EXPORT, {'name': name});
-            reportError = false;
+          if (error == null) {
+            error = compiler.createMessage(
+                export,
+                MessageKind.DUPLICATE_EXPORT,
+                {'name': name});
           } else {
-            compiler.reportInfo(export,
-                MessageKind.DUPLICATE_EXPORT_CONT, {'name': name});
+            infos.add(compiler.createMessage(
+                export,
+                MessageKind.DUPLICATE_EXPORT_CONT,
+                {'name': name}));
           }
         }
       });
     }
 
-    void reportDuplicateExportDecl(Element duplicate,
-                                   Link<ExportElement> duplicateExports) {
+    void createDuplicateExportDeclMessage(
+        Element duplicate,
+        Link<ExportElement> duplicateExports) {
       assert(invariant(library, !duplicateExports.isEmpty,
           message: "No export for $duplicate from ${duplicate.library} "
                    "in $library."));
-      compiler.reportInfo(duplicate, MessageKind.DUPLICATE_EXPORT_DECL,
-          {'name': name, 'uriString': duplicateExports.head.uri});
+      infos.add(compiler.createMessage(
+          duplicate,
+              MessageKind.DUPLICATE_EXPORT_DECL,
+          {'name': name, 'uriString': duplicateExports.head.uri}));
     }
 
     Element existingElement = exportScope[name];
     if (existingElement != null && existingElement != element) {
       if (existingElement.isErroneous) {
-        reportDuplicateExport(element, exports);
-        reportDuplicateExportDecl(element, exports);
+        createDuplicateExportMessage(element, exports);
+        createDuplicateExportDeclMessage(element, exports);
         element = existingElement;
       } else if (existingElement.library == library) {
         // Do nothing. [existingElement] hides [element].
@@ -976,10 +989,10 @@
       } else {
         // Declared elements hide exported elements.
         Link<ExportElement> existingExports = exporters[existingElement];
-        reportDuplicateExport(existingElement, existingExports);
-        reportDuplicateExport(element, exports, reportError: false);
-        reportDuplicateExportDecl(existingElement, existingExports);
-        reportDuplicateExportDecl(element, exports);
+        createDuplicateExportMessage(existingElement, existingExports);
+        createDuplicateExportMessage(element, exports);
+        createDuplicateExportDeclMessage(existingElement, existingExports);
+        createDuplicateExportDeclMessage(element, exports);
         element = exportScope[name] = new ErroneousElementX(
             MessageKind.DUPLICATE_EXPORT, {'name': name}, name, library);
       }
@@ -987,6 +1000,9 @@
       exportScope[name] = element;
       exporters[element] = exports;
     }
+    if (error != null) {
+      compiler.reportError(error, infos);
+    }
     return element;
   }
 
@@ -1049,7 +1065,7 @@
         String name = identifier.source;
         Element element = library.findExported(name);
         if (element == null) {
-          listener.reportHint(
+          listener.reportHintMessage(
               identifier,
               combinator.isHide
                   ? MessageKind.EMPTY_HIDE : MessageKind.EMPTY_SHOW,
diff --git a/pkg/compiler/lib/src/mirrors_used.dart b/pkg/compiler/lib/src/mirrors_used.dart
index 553f9cc..2110d75 100644
--- a/pkg/compiler/lib/src/mirrors_used.dart
+++ b/pkg/compiler/lib/src/mirrors_used.dart
@@ -409,9 +409,8 @@
           MessageKind kind = onlyStrings
               ? MessageKind.MIRRORS_EXPECTED_STRING
               : MessageKind.MIRRORS_EXPECTED_STRING_OR_TYPE;
-          compiler.reportHint(
-              node,
-              kind, {'name': node, 'type': apiTypeOf(entry)});
+          compiler.reportHintMessage(
+              node, kind, {'name': node, 'type': apiTypeOf(entry)});
         }
       }
       return result;
@@ -428,9 +427,8 @@
       MessageKind kind = onlyStrings
           ? MessageKind.MIRRORS_EXPECTED_STRING_OR_LIST
           : MessageKind.MIRRORS_EXPECTED_STRING_TYPE_OR_LIST;
-      compiler.reportHint(
-          node,
-          kind, {'name': node, 'type': apiTypeOf(constant)});
+      compiler.reportHintMessage(
+          node, kind, {'name': node, 'type': apiTypeOf(constant)});
       return null;
     }
   }
@@ -513,8 +511,9 @@
     List<String> identifiers = expression.split('.');
     Element element = enclosingLibrary.find(identifiers[0]);
     if (element == null) {
-      compiler.reportHint(
-          spannable, MessageKind.MIRRORS_CANNOT_RESOLVE_IN_CURRENT_LIBRARY,
+      compiler.reportHintMessage(
+          spannable,
+          MessageKind.MIRRORS_CANNOT_RESOLVE_IN_CURRENT_LIBRARY,
           {'name': expression});
       return null;
     } else {
@@ -531,12 +530,12 @@
       if (e == null) {
         if (current.isLibrary) {
           LibraryElement library = current;
-          compiler.reportHint(
+          compiler.reportHintMessage(
               spannable, MessageKind.MIRRORS_CANNOT_RESOLVE_IN_LIBRARY,
               {'name': identifiers[0],
                'library': library.libraryOrScriptName});
         } else {
-          compiler.reportHint(
+          compiler.reportHintMessage(
               spannable, MessageKind.MIRRORS_CANNOT_FIND_IN_ELEMENT,
               {'name': identifier, 'element': current.name});
         }
diff --git a/pkg/compiler/lib/src/native/behavior.dart b/pkg/compiler/lib/src/native/behavior.dart
index 23bf702..dfb2c60 100644
--- a/pkg/compiler/lib/src/native/behavior.dart
+++ b/pkg/compiler/lib/src/native/behavior.dart
@@ -214,7 +214,8 @@
 
     void reportError(String message) {
       seenError = true;
-      listener.reportError(spannable, MessageKind.GENERIC, {'text': message});
+      listener.reportErrorMessage(
+          spannable, MessageKind.GENERIC, {'text': message});
     }
 
     const List<String> knownTags = const [
@@ -434,21 +435,25 @@
 
     var argNodes = jsCall.arguments;
     if (argNodes.isEmpty || argNodes.tail.isEmpty) {
-      compiler.reportError(jsCall, MessageKind.GENERIC,
+      compiler.reportErrorMessage(
+          jsCall,
+          MessageKind.GENERIC,
           {'text': "JS expression takes two or more arguments."});
       return behavior;
     }
 
     var specArgument = argNodes.head;
     if (specArgument is !StringNode || specArgument.isInterpolation) {
-      compiler.reportError(specArgument, MessageKind.GENERIC,
+      compiler.reportErrorMessage(
+          specArgument, MessageKind.GENERIC,
           {'text': "JS first argument must be a string literal."});
       return behavior;
     }
 
     var codeArgument = argNodes.tail.head;
     if (codeArgument is !StringNode || codeArgument.isInterpolation) {
-      compiler.reportError(codeArgument, MessageKind.GENERIC,
+      compiler.reportErrorMessage(
+          codeArgument, MessageKind.GENERIC,
           {'text': "JS second argument must be a string literal."});
       return behavior;
     }
@@ -753,7 +758,7 @@
 
     int index = typeString.indexOf('<');
     if (index < 1) {
-      compiler.reportError(
+      compiler.reportErrorMessage(
           _errorNode(locationNodeOrElement, compiler),
           MessageKind.GENERIC,
           {'text': "Type '$typeString' not found."});
@@ -764,7 +769,7 @@
       // TODO(sra): Parse type parameters.
       return type;
     }
-    compiler.reportError(
+    compiler.reportErrorMessage(
         _errorNode(locationNodeOrElement, compiler),
         MessageKind.GENERIC,
         {'text': "Type '$typeString' not found."});
diff --git a/pkg/compiler/lib/src/native/enqueue.dart b/pkg/compiler/lib/src/native/enqueue.dart
index 3de82e0..25a4b26 100644
--- a/pkg/compiler/lib/src/native/enqueue.dart
+++ b/pkg/compiler/lib/src/native/enqueue.dart
@@ -11,6 +11,10 @@
   /// Initial entry point to native enqueuer.
   void processNativeClasses(Iterable<LibraryElement> libraries) {}
 
+  /// Registers the [nativeBehavior]. Adds the liveness of its instantiated
+  /// types to the world.
+  void registerNativeBehavior(NativeBehavior nativeBehavior, cause) {}
+
   /// Notification of a main Enqueuer worklist element.  For methods, adds
   /// information from metadata attributes, and computes types instantiated due
   /// to calling the method.
@@ -369,8 +373,8 @@
 
     // TODO(ahe): Is this really a global dependency?
     classElement.ensureResolved(compiler);
-    world.registerInstantiatedType(
-        classElement.rawType, compiler.globalDependencies);
+    compiler.backend.registerInstantiatedType(
+        classElement.rawType, world, compiler.globalDependencies);
 
     // Also parse the node to know all its methods because otherwise it will
     // only be parsed if there is a call to one of its constructors.
@@ -468,48 +472,41 @@
     });
   }
 
+  void registerNativeBehavior(NativeBehavior nativeBehavior, cause) {
+    processNativeBehavior(nativeBehavior, cause);
+    flushQueue();
+  }
+
   void registerMethodUsed(Element method) {
-    processNativeBehavior(
-        NativeBehavior.ofMethod(method, compiler),
-        method);
-      flushQueue();
+    registerNativeBehavior(NativeBehavior.ofMethod(method, compiler), method);
   }
 
   void registerFieldLoad(Element field) {
-    processNativeBehavior(
-        NativeBehavior.ofFieldLoad(field, compiler),
-        field);
-    flushQueue();
+    registerNativeBehavior(NativeBehavior.ofFieldLoad(field, compiler), field);
   }
 
   void registerFieldStore(Element field) {
-    processNativeBehavior(
-        NativeBehavior.ofFieldStore(field, compiler),
-        field);
-    flushQueue();
+    registerNativeBehavior(NativeBehavior.ofFieldStore(field, compiler), field);
   }
 
   void registerJsCall(Send node, ResolverVisitor resolver) {
     NativeBehavior behavior = NativeBehavior.ofJsCall(node, compiler, resolver);
-    processNativeBehavior(behavior, node);
+    registerNativeBehavior(behavior, node);
     nativeBehaviors[node] = behavior;
-    flushQueue();
   }
 
   void registerJsEmbeddedGlobalCall(Send node, ResolverVisitor resolver) {
     NativeBehavior behavior =
         NativeBehavior.ofJsEmbeddedGlobalCall(node, compiler, resolver);
-    processNativeBehavior(behavior, node);
+    registerNativeBehavior(behavior, node);
     nativeBehaviors[node] = behavior;
-    flushQueue();
   }
 
   void registerJsBuiltinCall(Send node, ResolverVisitor resolver) {
     NativeBehavior behavior =
         NativeBehavior.ofJsBuiltinCall(node, compiler, resolver);
-    processNativeBehavior(behavior, node);
+    registerNativeBehavior(behavior, node);
     nativeBehaviors[node] = behavior;
-    flushQueue();
   }
 
   NativeBehavior getNativeBehaviorOf(Send node) => nativeBehaviors[node];
@@ -523,30 +520,30 @@
       matchedTypeConstraints.add(type);
       if (type is SpecialType) {
         if (type == SpecialType.JsObject) {
-          world.registerInstantiatedType(
-              compiler.coreTypes.objectType, registry);
+          backend.registerInstantiatedType(
+              compiler.coreTypes.objectType, world, registry);
         }
         continue;
       }
       if (type is InterfaceType) {
         if (type.element == compiler.intClass) {
-          world.registerInstantiatedType(type, registry);
+          backend.registerInstantiatedType(type, world, registry);
         } else if (type.element == compiler.doubleClass) {
-          world.registerInstantiatedType(type, registry);
+          backend.registerInstantiatedType(type, world, registry);
         } else if (type.element == compiler.numClass) {
-          world.registerInstantiatedType(
-              compiler.coreTypes.doubleType, registry);
-          world.registerInstantiatedType(
-              compiler.coreTypes.intType, registry);
+          backend.registerInstantiatedType(
+              compiler.coreTypes.doubleType, world, registry);
+          backend.registerInstantiatedType(
+              compiler.coreTypes.intType, world, registry);
         } else if (type.element == compiler.stringClass) {
-          world.registerInstantiatedType(type, registry);
+          backend.registerInstantiatedType(type, world, registry);
         } else if (type.element == compiler.nullClass) {
-          world.registerInstantiatedType(type, registry);
+          backend.registerInstantiatedType(type, world, registry);
         } else if (type.element == compiler.boolClass) {
-          world.registerInstantiatedType(type, registry);
+          backend.registerInstantiatedType(type, world, registry);
         } else if (compiler.types.isSubtype(
                       type, backend.listImplementation.rawType)) {
-          world.registerInstantiatedType(type, registry);
+          backend.registerInstantiatedType(type, world, registry);
         }
       }
       assert(type is DartType);
diff --git a/pkg/compiler/lib/src/ordered_typeset.dart b/pkg/compiler/lib/src/ordered_typeset.dart
index 52d0c62..48f3228 100644
--- a/pkg/compiler/lib/src/ordered_typeset.dart
+++ b/pkg/compiler/lib/src/ordered_typeset.dart
@@ -179,7 +179,8 @@
       DartType existingType = link.head;
       if (existingType == type) return;
       if (existingType.element == type.element) {
-        compiler.reportError(cls,
+        compiler.reportErrorMessage(
+            cls,
             MessageKind.MULTI_INHERITANCE,
             {'thisType': cls.thisType,
              'firstType': existingType,
diff --git a/pkg/compiler/lib/src/parser/element_listener.dart b/pkg/compiler/lib/src/parser/element_listener.dart
index 8473d03..95af9a4 100644
--- a/pkg/compiler/lib/src/parser/element_listener.dart
+++ b/pkg/compiler/lib/src/parser/element_listener.dart
@@ -748,6 +748,6 @@
     if (!memberErrors.isEmpty) {
       memberErrors = memberErrors.tail.prepend(true);
     }
-    listener.reportError(spannable, errorCode, arguments);
+    listener.reportErrorMessage(spannable, errorCode, arguments);
   }
 }
diff --git a/pkg/compiler/lib/src/parser/member_listener.dart b/pkg/compiler/lib/src/parser/member_listener.dart
index c9cbd48..cd6de0e 100644
--- a/pkg/compiler/lib/src/parser/member_listener.dart
+++ b/pkg/compiler/lib/src/parser/member_listener.dart
@@ -72,9 +72,10 @@
       return Elements.constructOperatorName(operator.source, isUnary);
     } else {
       if (receiver == null || receiver.source != enclosingClass.name) {
-        listener.reportError(send.receiver,
-                                 MessageKind.INVALID_CONSTRUCTOR_NAME,
-                                 {'name': enclosingClass.name});
+        listener.reportErrorMessage(
+            send.receiver,
+            MessageKind.INVALID_CONSTRUCTOR_NAME,
+            {'name': enclosingClass.name});
       }
       return selector.source;
     }
@@ -112,9 +113,10 @@
     Identifier singleIdentifierName = method.name.asIdentifier();
     if (singleIdentifierName != null && singleIdentifierName.source == name) {
       if (name != enclosingClass.name) {
-        listener.reportError(singleIdentifierName,
-                                 MessageKind.INVALID_UNNAMED_CONSTRUCTOR_NAME,
-                                 {'name': enclosingClass.name});
+        listener.reportErrorMessage(
+            singleIdentifierName,
+            MessageKind.INVALID_UNNAMED_CONSTRUCTOR_NAME,
+            {'name': enclosingClass.name});
       }
     }
     Element memberElement = new PartialConstructorElement(
diff --git a/pkg/compiler/lib/src/parser/node_listener.dart b/pkg/compiler/lib/src/parser/node_listener.dart
index d8383f3..d079b70 100644
--- a/pkg/compiler/lib/src/parser/node_listener.dart
+++ b/pkg/compiler/lib/src/parser/node_listener.dart
@@ -270,12 +270,16 @@
       pushNode(new Send(receiver, new Operator(token), arguments));
     }
     if (identical(tokenString, '===')) {
-      listener.reportError(token, MessageKind.UNSUPPORTED_EQ_EQ_EQ,
-                           {'lhs': receiver, 'rhs': argument});
+      listener.reportErrorMessage(
+          token,
+          MessageKind.UNSUPPORTED_EQ_EQ_EQ,
+          {'lhs': receiver, 'rhs': argument});
     }
     if (identical(tokenString, '!==')) {
-      listener.reportError(token, MessageKind.UNSUPPORTED_BANG_EQ_EQ,
-                           {'lhs': receiver, 'rhs': argument});
+      listener.reportErrorMessage(
+          token,
+          MessageKind.UNSUPPORTED_BANG_EQ_EQ,
+          {'lhs': receiver, 'rhs': argument});
     }
   }
 
@@ -447,8 +451,8 @@
   void endRethrowStatement(Token throwToken, Token endToken) {
     pushNode(new Rethrow(throwToken, endToken));
     if (identical(throwToken.stringValue, 'throw')) {
-      listener.reportError(throwToken,
-                           MessageKind.UNSUPPORTED_THROW_WITHOUT_EXP);
+      listener.reportErrorMessage(
+          throwToken, MessageKind.UNSUPPORTED_THROW_WITHOUT_EXP);
     }
   }
 
diff --git a/pkg/compiler/lib/src/parser/partial_elements.dart b/pkg/compiler/lib/src/parser/partial_elements.dart
index 0b489a1..17412f7 100644
--- a/pkg/compiler/lib/src/parser/partial_elements.dart
+++ b/pkg/compiler/lib/src/parser/partial_elements.dart
@@ -281,7 +281,7 @@
           !definitions.modifiers.isConst &&
           definitions.type == null &&
           !definitions.isErroneous) {
-        listener.reportError(
+        listener.reportErrorMessage(
             definitions,
             MessageKind.GENERIC,
             { 'text': 'A field declaration must start with var, final, '
diff --git a/pkg/compiler/lib/src/patch_parser.dart b/pkg/compiler/lib/src/patch_parser.dart
index ee2995f..8eb9f85 100644
--- a/pkg/compiler/lib/src/patch_parser.dart
+++ b/pkg/compiler/lib/src/patch_parser.dart
@@ -300,7 +300,7 @@
                   Element origin,
                   Element patch) {
   if (origin == null) {
-    compiler.reportError(
+    compiler.reportErrorMessage(
         patch, MessageKind.PATCH_NON_EXISTING, {'name': patch.name});
     return;
   }
@@ -309,7 +309,7 @@
         origin.isFunction ||
         origin.isAbstractField)) {
     // TODO(ahe): Remove this error when the parser rejects all bad modifiers.
-    compiler.reportError(origin, MessageKind.PATCH_NONPATCHABLE);
+    compiler.reportErrorMessage(origin, MessageKind.PATCH_NONPATCHABLE);
     return;
   }
   if (patch.isClass) {
@@ -324,7 +324,7 @@
     tryPatchFunction(compiler, origin, patch);
   } else {
     // TODO(ahe): Remove this error when the parser rejects all bad modifiers.
-    compiler.reportError(patch, MessageKind.PATCH_NONPATCHABLE);
+    compiler.reportErrorMessage(patch, MessageKind.PATCH_NONPATCHABLE);
   }
 }
 
@@ -333,9 +333,16 @@
                    ClassElement patch) {
   if (!origin.isClass) {
     compiler.reportError(
-        origin, MessageKind.PATCH_NON_CLASS, {'className': patch.name});
-    compiler.reportInfo(
-        patch, MessageKind.PATCH_POINT_TO_CLASS, {'className': patch.name});
+        compiler.createMessage(
+            origin,
+            MessageKind.PATCH_NON_CLASS,
+            {'className': patch.name}),
+        <DiagnosticMessage>[
+            compiler.createMessage(
+                patch,
+                MessageKind.PATCH_POINT_TO_CLASS,
+                {'className': patch.name}),
+        ]);
     return;
   }
   patchClass(compiler, origin, patch);
@@ -490,19 +497,31 @@
                     FunctionElement patch) {
   if (!origin.isAbstractField) {
     listener.reportError(
-        origin, MessageKind.PATCH_NON_GETTER, {'name': origin.name});
-    listener.reportInfo(
-        patch,
-        MessageKind.PATCH_POINT_TO_GETTER, {'getterName': patch.name});
+        listener.createMessage(
+            origin,
+            MessageKind.PATCH_NON_GETTER,
+            {'name': origin.name}),
+        <DiagnosticMessage>[
+            listener.createMessage(
+                patch,
+                MessageKind.PATCH_POINT_TO_GETTER,
+                {'getterName': patch.name}),
+        ]);
     return;
   }
   AbstractFieldElement originField = origin;
   if (originField.getter == null) {
     listener.reportError(
-        origin, MessageKind.PATCH_NO_GETTER, {'getterName': patch.name});
-    listener.reportInfo(
-        patch,
-        MessageKind.PATCH_POINT_TO_GETTER, {'getterName': patch.name});
+        listener.createMessage(
+            origin,
+            MessageKind.PATCH_NO_GETTER,
+            {'getterName': patch.name}),
+        <DiagnosticMessage>[
+            listener.createMessage(
+                patch,
+                MessageKind.PATCH_POINT_TO_GETTER,
+                {'getterName': patch.name}),
+        ]);
     return;
   }
   GetterElementX getter = originField.getter;
@@ -514,19 +533,31 @@
                     FunctionElement patch) {
   if (!origin.isAbstractField) {
     listener.reportError(
-        origin, MessageKind.PATCH_NON_SETTER, {'name': origin.name});
-    listener.reportInfo(
-        patch,
-        MessageKind.PATCH_POINT_TO_SETTER, {'setterName': patch.name});
+        listener.createMessage(
+            origin,
+            MessageKind.PATCH_NON_SETTER,
+            {'name': origin.name}),
+        <DiagnosticMessage>[
+            listener.createMessage(
+                patch,
+                MessageKind.PATCH_POINT_TO_SETTER,
+                {'setterName': patch.name}),
+        ]);
     return;
   }
   AbstractFieldElement originField = origin;
   if (originField.setter == null) {
     listener.reportError(
-        origin, MessageKind.PATCH_NO_SETTER, {'setterName': patch.name});
-    listener.reportInfo(
-        patch,
-        MessageKind.PATCH_POINT_TO_SETTER, {'setterName': patch.name});
+        listener.createMessage(
+            origin,
+            MessageKind.PATCH_NO_SETTER,
+            {'setterName': patch.name}),
+        <DiagnosticMessage>[
+              listener.createMessage(
+                  patch,
+                  MessageKind.PATCH_POINT_TO_SETTER,
+                  {'setterName': patch.name}),
+        ]);
     return;
   }
   SetterElementX setter = originField.setter;
@@ -538,12 +569,16 @@
                          FunctionElement patch) {
   if (!origin.isConstructor) {
     listener.reportError(
-        origin,
-        MessageKind.PATCH_NON_CONSTRUCTOR, {'constructorName': patch.name});
-    listener.reportInfo(
-        patch,
-        MessageKind.PATCH_POINT_TO_CONSTRUCTOR,
-        {'constructorName': patch.name});
+        listener.createMessage(
+            origin,
+            MessageKind.PATCH_NON_CONSTRUCTOR,
+            {'constructorName': patch.name}),
+        <DiagnosticMessage>[
+            listener.createMessage(
+                patch,
+                MessageKind.PATCH_POINT_TO_CONSTRUCTOR,
+                {'constructorName': patch.name}),
+        ]);
     return;
   }
   patchFunction(listener, origin, patch);
@@ -554,11 +589,16 @@
                       FunctionElement patch) {
   if (!origin.isFunction) {
     listener.reportError(
-        origin,
-        MessageKind.PATCH_NON_FUNCTION, {'functionName': patch.name});
-    listener.reportInfo(
-        patch,
-        MessageKind.PATCH_POINT_TO_FUNCTION, {'functionName': patch.name});
+        listener.createMessage(
+            origin,
+            MessageKind.PATCH_NON_FUNCTION,
+            {'functionName': patch.name}),
+        <DiagnosticMessage>[
+            listener.createMessage(
+                patch,
+                MessageKind.PATCH_POINT_TO_FUNCTION,
+                {'functionName': patch.name}),
+        ]);
     return;
   }
   patchFunction(listener, origin, patch);
@@ -568,10 +608,14 @@
                    BaseFunctionElementX origin,
                    BaseFunctionElementX patch) {
   if (!origin.modifiers.isExternal) {
-    listener.reportError(origin, MessageKind.PATCH_NON_EXTERNAL);
-    listener.reportInfo(
-        patch,
-        MessageKind.PATCH_POINT_TO_FUNCTION, {'functionName': patch.name});
+    listener.reportError(
+        listener.createMessage(origin, MessageKind.PATCH_NON_EXTERNAL),
+        <DiagnosticMessage>[
+              listener.createMessage(
+                  patch,
+                  MessageKind.PATCH_POINT_TO_FUNCTION,
+                  {'functionName': patch.name}),
+        ]);
     return;
   }
   if (origin.isPatched) {
diff --git a/pkg/compiler/lib/src/resolution/class_hierarchy.dart b/pkg/compiler/lib/src/resolution/class_hierarchy.dart
index 738761d..383c671 100644
--- a/pkg/compiler/lib/src/resolution/class_hierarchy.dart
+++ b/pkg/compiler/lib/src/resolution/class_hierarchy.dart
@@ -68,8 +68,10 @@
       TypeVariable typeNode = nodeLink.head;
       registry.useType(typeNode, typeVariable);
       if (nameSet.contains(typeName)) {
-        error(typeNode, MessageKind.DUPLICATE_TYPE_VARIABLE_NAME,
-              {'typeVariableName': typeName});
+        compiler.reportErrorMessage(
+            typeNode,
+            MessageKind.DUPLICATE_TYPE_VARIABLE_NAME,
+            {'typeVariableName': typeName});
       }
       nameSet.add(typeName);
 
@@ -90,7 +92,9 @@
               if (identical(element, variableElement)) {
                 // Only report an error on the checked type variable to avoid
                 // generating multiple errors for the same cyclicity.
-                warning(typeNode.name, MessageKind.CYCLIC_TYPE_VARIABLE,
+                compiler.reportWarningMessage(
+                    typeNode.name,
+                    MessageKind.CYCLIC_TYPE_VARIABLE,
                     {'typeVariableName': variableElement.name});
               }
               break;
@@ -194,7 +198,7 @@
         Map arguments = {'constructorName': ''};
         // TODO(ahe): Why is this a compile-time error? Or if it is an error,
         // why do we bother to registerThrowNoSuchMethod below?
-        compiler.reportError(node, kind, arguments);
+        compiler.reportErrorMessage(node, kind, arguments);
         superMember = new ErroneousElementX(
             kind, arguments, '', element);
         registry.registerThrowNoSuchMethod();
@@ -204,7 +208,7 @@
         if (!CallStructure.NO_ARGS.signatureApplies(
                 superConstructor.functionSignature)) {
           MessageKind kind = MessageKind.NO_MATCHING_CONSTRUCTOR_FOR_IMPLICIT;
-          compiler.reportError(node, kind);
+          compiler.reportErrorMessage(node, kind);
           superMember = new ErroneousElementX(kind, {}, '', element);
         }
       }
@@ -234,9 +238,10 @@
     calculateAllSupertypes(element);
 
     if (node.names.nodes.isEmpty) {
-      compiler.reportError(node,
-                           MessageKind.EMPTY_ENUM_DECLARATION,
-                           {'enumName': element.name});
+      compiler.reportErrorMessage(
+          node,
+          MessageKind.EMPTY_ENUM_DECLARATION,
+          {'enumName': element.name});
     }
 
     EnumCreator creator = new EnumCreator(compiler, element);
@@ -249,15 +254,23 @@
   DartType checkMixinType(TypeAnnotation mixinNode) {
     DartType mixinType = resolveType(mixinNode);
     if (isBlackListed(mixinType)) {
-      compiler.reportError(mixinNode,
-          MessageKind.CANNOT_MIXIN, {'type': mixinType});
+      compiler.reportErrorMessage(
+          mixinNode,
+          MessageKind.CANNOT_MIXIN,
+          {'type': mixinType});
     } else if (mixinType.isTypeVariable) {
-      compiler.reportError(mixinNode, MessageKind.CLASS_NAME_EXPECTED);
+      compiler.reportErrorMessage(
+          mixinNode,
+          MessageKind.CLASS_NAME_EXPECTED);
     } else if (mixinType.isMalformed) {
-      compiler.reportError(mixinNode, MessageKind.CANNOT_MIXIN_MALFORMED,
+      compiler.reportErrorMessage(
+          mixinNode,
+          MessageKind.CANNOT_MIXIN_MALFORMED,
           {'className': element.name, 'malformedType': mixinType});
     } else if (mixinType.isEnumType) {
-      compiler.reportError(mixinNode, MessageKind.CANNOT_MIXIN_ENUM,
+      compiler.reportErrorMessage(
+          mixinNode,
+          MessageKind.CANNOT_MIXIN_ENUM,
           {'className': element.name, 'enumType': mixinType});
     }
     return mixinType;
@@ -275,7 +288,8 @@
     if (identical(node.classKeyword.stringValue, 'typedef')) {
       // TODO(aprelev@gmail.com): Remove this deprecation diagnostic
       // together with corresponding TODO in parser.dart.
-      compiler.reportWarning(node.classKeyword,
+      compiler.reportWarningMessage(
+          node.classKeyword,
           MessageKind.DEPRECATED_TYPEDEF_MIXIN_SYNTAX);
     }
 
@@ -429,8 +443,9 @@
     while (current != null && current.isMixinApplication) {
       MixinApplicationElement currentMixinApplication = current;
       if (currentMixinApplication == mixinApplication) {
-        compiler.reportError(
-            mixinApplication, MessageKind.ILLEGAL_MIXIN_CYCLE,
+        compiler.reportErrorMessage(
+            mixinApplication,
+            MessageKind.ILLEGAL_MIXIN_CYCLE,
             {'mixinName1': current.name, 'mixinName2': previous.name});
         // We have found a cycle in the mixin chain. Return null as
         // the mixin for this application to avoid getting into
@@ -452,19 +467,26 @@
     DartType supertype = resolveType(superclass);
     if (supertype != null) {
       if (supertype.isMalformed) {
-        compiler.reportError(superclass, MessageKind.CANNOT_EXTEND_MALFORMED,
+        compiler.reportErrorMessage(
+            superclass,
+            MessageKind.CANNOT_EXTEND_MALFORMED,
             {'className': element.name, 'malformedType': supertype});
         return objectType;
       } else if (supertype.isEnumType) {
-        compiler.reportError(superclass, MessageKind.CANNOT_EXTEND_ENUM,
+        compiler.reportErrorMessage(
+            superclass,
+            MessageKind.CANNOT_EXTEND_ENUM,
             {'className': element.name, 'enumType': supertype});
         return objectType;
       } else if (!supertype.isInterfaceType) {
-        compiler.reportError(superclass.typeName,
+        compiler.reportErrorMessage(
+            superclass.typeName,
             MessageKind.CLASS_NAME_EXPECTED);
         return objectType;
       } else if (isBlackListed(supertype)) {
-        compiler.reportError(superclass, MessageKind.CANNOT_EXTEND,
+        compiler.reportErrorMessage(
+            superclass,
+            MessageKind.CANNOT_EXTEND,
             {'type': supertype});
         return objectType;
       }
@@ -479,38 +501,43 @@
       DartType interfaceType = resolveType(link.head);
       if (interfaceType != null) {
         if (interfaceType.isMalformed) {
-          compiler.reportError(superclass,
+          compiler.reportErrorMessage(
+              superclass,
               MessageKind.CANNOT_IMPLEMENT_MALFORMED,
               {'className': element.name, 'malformedType': interfaceType});
         } else if (interfaceType.isEnumType) {
-          compiler.reportError(superclass,
+          compiler.reportErrorMessage(
+              superclass,
               MessageKind.CANNOT_IMPLEMENT_ENUM,
               {'className': element.name, 'enumType': interfaceType});
         } else if (!interfaceType.isInterfaceType) {
           // TODO(johnniwinther): Handle dynamic.
           TypeAnnotation typeAnnotation = link.head;
-          error(typeAnnotation.typeName, MessageKind.CLASS_NAME_EXPECTED);
+          compiler.reportErrorMessage(
+              typeAnnotation.typeName, MessageKind.CLASS_NAME_EXPECTED);
         } else {
           if (interfaceType == element.supertype) {
-            compiler.reportError(
+            compiler.reportErrorMessage(
                 superclass,
                 MessageKind.DUPLICATE_EXTENDS_IMPLEMENTS,
                 {'type': interfaceType});
-            compiler.reportError(
+            compiler.reportErrorMessage(
                 link.head,
                 MessageKind.DUPLICATE_EXTENDS_IMPLEMENTS,
                 {'type': interfaceType});
           }
           if (result.contains(interfaceType)) {
-            compiler.reportError(
+            compiler.reportErrorMessage(
                 link.head,
                 MessageKind.DUPLICATE_IMPLEMENTS,
                 {'type': interfaceType});
           }
           result = result.prepend(interfaceType);
           if (isBlackListed(interfaceType)) {
-            error(link.head, MessageKind.CANNOT_IMPLEMENT,
-                  {'type': interfaceType});
+            compiler.reportErrorMessage(
+                link.head,
+                MessageKind.CANNOT_IMPLEMENT,
+                {'type': interfaceType});
           }
         }
       }
@@ -660,20 +687,24 @@
   void visitSend(Send node) {
     Identifier prefix = node.receiver.asIdentifier();
     if (prefix == null) {
-      error(node.receiver, MessageKind.NOT_A_PREFIX, {'node': node.receiver});
+      compiler.reportErrorMessage(
+          node.receiver, MessageKind.NOT_A_PREFIX, {'node': node.receiver});
       return;
     }
     Element element = lookupInScope(compiler, prefix, context, prefix.source);
     if (element == null || !identical(element.kind, ElementKind.PREFIX)) {
-      error(node.receiver, MessageKind.NOT_A_PREFIX, {'node': node.receiver});
+      compiler.reportErrorMessage(
+          node.receiver, MessageKind.NOT_A_PREFIX, {'node': node.receiver});
       return;
     }
     PrefixElement prefixElement = element;
     Identifier selector = node.selector.asIdentifier();
     var e = prefixElement.lookupLocalMember(selector.source);
     if (e == null || !e.impliesType) {
-      error(node.selector, MessageKind.CANNOT_RESOLVE_TYPE,
-            {'typeName': node.selector});
+      compiler.reportErrorMessage(
+          node.selector,
+          MessageKind.CANNOT_RESOLVE_TYPE,
+          {'typeName': node.selector});
       return;
     }
     loadSupertype(e, node);
diff --git a/pkg/compiler/lib/src/resolution/class_members.dart b/pkg/compiler/lib/src/resolution/class_members.dart
index e049206..2bcf2dd 100644
--- a/pkg/compiler/lib/src/resolution/class_members.dart
+++ b/pkg/compiler/lib/src/resolution/class_members.dart
@@ -9,6 +9,8 @@
 import '../compiler.dart' show
     Compiler;
 import '../dart_types.dart';
+import '../diagnostics/diagnostic_listener.dart' show
+    DiagnosticMessage;
 import '../diagnostics/invariant.dart' show
     invariant;
 import '../diagnostics/messages.dart' show
@@ -254,7 +256,7 @@
       }
       reportMessage(
           interfaceMember.element, MessageKind.ABSTRACT_METHOD, () {
-        compiler.reportWarning(
+        compiler.reportWarningMessage(
             interfaceMember.element, kind,
             {'class': cls.name, 'name': name.text});
       });
@@ -266,20 +268,24 @@
         Member inherited = interfaceMember.declarations.first;
         reportMessage(
             interfaceMember, MessageKind.UNIMPLEMENTED_METHOD, () {
-          compiler.reportWarning(cls,
+          DiagnosticMessage warning = compiler.createMessage(
+              cls,
               interfaceMember.declarations.length == 1
                   ? singleKind : multipleKind,
               {'class': cls.name,
                'name': name.text,
                'method': interfaceMember,
                'declarer': inherited.declarer});
+          List<DiagnosticMessage> infos = <DiagnosticMessage>[];
           for (Member inherited in interfaceMember.declarations) {
-            compiler.reportInfo(inherited.element,
+            infos.add(compiler.createMessage(
+                inherited.element,
                 inherited.isDeclaredByField ?
                     implicitlyDeclaredKind : explicitlyDeclaredKind,
                 {'class': inherited.declarer.name,
-                 'name': name.text});
+                 'name': name.text}));
           }
+          compiler.reportWarning(warning, infos);
         });
       }
       if (interfaceMember.isSetter) {
@@ -314,7 +320,9 @@
     if (compiler.backend.isBackendLibrary(cls.library)) return;
 
     reportMessage(compiler.functionClass, MessageKind.UNIMPLEMENTED_METHOD, () {
-      compiler.reportWarning(cls, MessageKind.UNIMPLEMENTED_METHOD_ONE,
+      compiler.reportWarningMessage(
+          cls,
+          MessageKind.UNIMPLEMENTED_METHOD_ONE,
           {'class': cls.name,
            'name': Identifiers.call,
            'method': Identifiers.call,
@@ -338,12 +346,17 @@
             reportMessage(superMember, MessageKind.INSTANCE_STATIC_SAME_NAME,
                 () {
               compiler.reportWarning(
-                  declared.element,
-                  MessageKind.INSTANCE_STATIC_SAME_NAME,
-                  {'memberName': declared.name,
-                    'className': superclass.name});
-              compiler.reportInfo(superMember.element,
-                  MessageKind.INSTANCE_STATIC_SAME_NAME_CONT);
+                  compiler.createMessage(
+                      declared.element,
+                      MessageKind.INSTANCE_STATIC_SAME_NAME,
+                      {'memberName': declared.name,
+                       'className': superclass.name}),
+                  <DiagnosticMessage>[
+                      compiler.createMessage(
+                          superMember.element,
+                          MessageKind.INSTANCE_STATIC_SAME_NAME_CONT),
+                  ]);
+
             });
             break;
           }
@@ -386,22 +399,29 @@
         void reportError(MessageKind errorKind, MessageKind infoKind) {
           reportMessage(
               inherited.element, MessageKind.INVALID_OVERRIDE_METHOD, () {
-            compiler.reportError(declared.element, errorKind,
-                {'name': declared.name.text,
-                 'class': cls.thisType,
-                 'inheritedClass': inherited.declarer});
-            compiler.reportInfo(inherited.element, infoKind,
-                {'name': declared.name.text,
-                 'class': inherited.declarer});
+            compiler.reportError(
+                compiler.createMessage(
+                    declared.element,
+                    errorKind,
+                    {'name': declared.name.text,
+                     'class': cls.thisType,
+                     'inheritedClass': inherited.declarer}),
+                <DiagnosticMessage>[
+                    compiler.createMessage(
+                        inherited.element,
+                        infoKind,
+                        {'name': declared.name.text,
+                         'class': inherited.declarer}),
+                ]);
           });
         }
 
         if (declared.isDeclaredByField && inherited.isMethod) {
           reportError(MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD,
-              MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD_CONT);
+                      MessageKind.CANNOT_OVERRIDE_METHOD_WITH_FIELD_CONT);
         } else if (declared.isMethod && inherited.isDeclaredByField) {
           reportError(MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD,
-              MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD_CONT);
+                      MessageKind.CANNOT_OVERRIDE_FIELD_WITH_METHOD_CONT);
         } else if (declared.isGetter && inherited.isMethod) {
           reportError(MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER,
                       MessageKind.CANNOT_OVERRIDE_METHOD_WITH_GETTER_CONT);
@@ -415,15 +435,22 @@
                                MessageKind warningKind,
                                MessageKind infoKind) {
               reportMessage(marker, MessageKind.INVALID_OVERRIDE_METHOD, () {
-                compiler.reportWarning(declared.element, warningKind,
-                    {'declaredType': declared.type,
-                     'name': declared.name.text,
-                     'class': cls.thisType,
-                     'inheritedType': inherited.type,
-                     'inheritedClass': inherited.declarer});
-                compiler.reportInfo(inherited.element, infoKind,
-                    {'name': declared.name.text,
-                     'class': inherited.declarer});
+                compiler.reportWarning(
+                    compiler.createMessage(
+                        declared.element,
+                        warningKind,
+                        {'declaredType': declared.type,
+                         'name': declared.name.text,
+                         'class': cls.thisType,
+                         'inheritedType': inherited.type,
+                         'inheritedClass': inherited.declarer}),
+                    <DiagnosticMessage>[
+                        compiler.createMessage(
+                            inherited.element,
+                            infoKind,
+                            {'name': declared.name.text,
+                             'class': inherited.declarer}),
+                    ]);
               });
             }
             if (declared.isDeclaredByField) {
@@ -476,11 +503,14 @@
                               Element contextElement,
                               MessageKind contextMessage) {
     compiler.reportError(
-        errorneousElement,
-        errorMessage,
-        {'memberName': contextElement.name,
-         'className': contextElement.enclosingClass.name});
-    compiler.reportInfo(contextElement, contextMessage);
+        compiler.createMessage(
+            errorneousElement,
+            errorMessage,
+            {'memberName': contextElement.name,
+             'className': contextElement.enclosingClass.name}),
+        <DiagnosticMessage>[
+            compiler.createMessage(contextElement, contextMessage),
+        ]);
   }
 
   /// Compute all class and interface names by the [name] in [cls].
@@ -683,9 +713,11 @@
               () => new Setlet<Member>()).add(inherited);
         }
         if (someAreGetters && !allAreGetters) {
-          compiler.reportWarning(cls,
-                                 MessageKind.INHERIT_GETTER_AND_METHOD,
-                                 {'class': thisType, 'name': name.text });
+          DiagnosticMessage warning = compiler.createMessage(
+              cls,
+              MessageKind.INHERIT_GETTER_AND_METHOD,
+              {'class': thisType, 'name': name.text });
+          List<DiagnosticMessage> infos = <DiagnosticMessage>[];
           for (Member inherited in inheritedMembers) {
             MessageKind kind;
             if (inherited.isMethod) {
@@ -700,9 +732,12 @@
                 kind = MessageKind.INHERITED_EXPLICIT_GETTER;
               }
             }
-            compiler.reportInfo(inherited.element, kind,
-                {'class': inherited.declarer, 'name': name.text });
+            infos.add(compiler.createMessage(
+                inherited.element,
+                kind,
+                {'class': inherited.declarer, 'name': name.text}));
           }
+          compiler.reportWarning(warning, infos);
           interfaceMembers[name] = new ErroneousMember(inheritedMembers);
         } else if (subtypesOfAllInherited.length == 1) {
           // All signatures have the same type.
diff --git a/pkg/compiler/lib/src/resolution/constructors.dart b/pkg/compiler/lib/src/resolution/constructors.dart
index 8528ca0..94dcc525 100644
--- a/pkg/compiler/lib/src/resolution/constructors.dart
+++ b/pkg/compiler/lib/src/resolution/constructors.dart
@@ -10,6 +10,9 @@
     RedirectingGenerativeConstantConstructor;
 import '../constants/expressions.dart';
 import '../dart_types.dart';
+import '../diagnostics/diagnostic_listener.dart' show
+    DiagnosticListener,
+    DiagnosticMessage;
 import '../diagnostics/invariant.dart' show
     invariant;
 import '../diagnostics/messages.dart' show
@@ -59,13 +62,7 @@
 
   ResolutionRegistry get registry => visitor.registry;
 
-  error(Node node, MessageKind kind, [arguments = const {}]) {
-    visitor.error(node, kind, arguments);
-  }
-
-  warning(Node node, MessageKind kind, [arguments = const {}]) {
-    visitor.warning(node, kind, arguments);
-  }
+  DiagnosticListener get listener => visitor.compiler;
 
   bool isFieldInitializer(SendSet node) {
     if (node.selector.asIdentifier() == null) return false;
@@ -75,12 +72,17 @@
   }
 
   reportDuplicateInitializerError(Element field, Node init, Node existing) {
-    visitor.compiler.reportError(
-        init,
-        MessageKind.DUPLICATE_INITIALIZER, {'fieldName': field.name});
-    visitor.compiler.reportInfo(
-        existing,
-        MessageKind.ALREADY_INITIALIZED, {'fieldName': field.name});
+    listener.reportError(
+        listener.createMessage(
+            init,
+            MessageKind.DUPLICATE_INITIALIZER,
+            {'fieldName': field.name}),
+        <DiagnosticMessage>[
+            listener.createMessage(
+                existing,
+                MessageKind.ALREADY_INITIALIZED,
+                {'fieldName': field.name}),
+        ]);
     isValidAsConstant = false;
   }
 
@@ -109,20 +111,24 @@
     if (isFieldInitializer(init)) {
       target = constructor.enclosingClass.lookupLocalMember(name);
       if (target == null) {
-        error(selector, MessageKind.CANNOT_RESOLVE, {'name': name});
+        listener.reportErrorMessage(
+            selector, MessageKind.CANNOT_RESOLVE, {'name': name});
         target = new ErroneousFieldElementX(
             selector.asIdentifier(), constructor.enclosingClass);
       } else if (target.kind != ElementKind.FIELD) {
-        error(selector, MessageKind.NOT_A_FIELD, {'fieldName': name});
+        listener.reportErrorMessage(
+            selector, MessageKind.NOT_A_FIELD, {'fieldName': name});
         target = new ErroneousFieldElementX(
             selector.asIdentifier(), constructor.enclosingClass);
       } else if (!target.isInstanceMember) {
-        error(selector, MessageKind.INIT_STATIC_FIELD, {'fieldName': name});
+        listener.reportErrorMessage(
+            selector, MessageKind.INIT_STATIC_FIELD, {'fieldName': name});
       } else {
         field = target;
       }
     } else {
-      error(init, MessageKind.INVALID_RECEIVER_IN_INITIALIZER);
+      listener.reportErrorMessage(
+          init, MessageKind.INVALID_RECEIVER_IN_INITIALIZER);
     }
     registry.useElement(init, target);
     registry.registerStaticUse(target);
@@ -146,7 +152,8 @@
     if (isSuperCall) {
       // Calculate correct lookup target and constructor name.
       if (identical(constructor.enclosingClass, visitor.compiler.objectClass)) {
-        error(diagnosticNode, MessageKind.SUPER_INITIALIZER_IN_OBJECT);
+        listener.reportErrorMessage(
+            diagnosticNode, MessageKind.SUPER_INITIALIZER_IN_OBJECT);
         isValidAsConstant = false;
       } else {
         return constructor.enclosingClass.supertype;
@@ -168,8 +175,8 @@
     ClassElement lookupTarget = targetType.element;
     Selector constructorSelector =
         visitor.getRedirectingThisOrSuperConstructorSelector(call);
-    FunctionElement calledConstructor =
-        lookupTarget.lookupConstructor(constructorSelector.name);
+    ConstructorElement calledConstructor = findConstructor(
+        constructor.library, lookupTarget, constructorSelector.name);
 
     final bool isImplicitSuperCall = false;
     final String className = lookupTarget.name;
@@ -215,7 +222,9 @@
           getSuperOrThisLookupTarget(functionNode, isSuperCall: true);
       ClassElement lookupTarget = targetType.element;
       Selector constructorSelector = new Selector.callDefaultConstructor();
-      Element calledConstructor = lookupTarget.lookupConstructor(
+      ConstructorElement calledConstructor = findConstructor(
+          constructor.library,
+          lookupTarget,
           constructorSelector.name);
 
       final String className = lookupTarget.name;
@@ -255,7 +264,7 @@
       MessageKind kind = isImplicitSuperCall
           ? MessageKind.CANNOT_RESOLVE_CONSTRUCTOR_FOR_IMPLICIT
           : MessageKind.CANNOT_RESOLVE_CONSTRUCTOR;
-      visitor.compiler.reportError(
+      listener.reportErrorMessage(
           diagnosticNode, kind, {'constructorName': fullConstructorName});
       isValidAsConstant = false;
     } else {
@@ -264,14 +273,14 @@
         MessageKind kind = isImplicitSuperCall
                            ? MessageKind.NO_MATCHING_CONSTRUCTOR_FOR_IMPLICIT
                            : MessageKind.NO_MATCHING_CONSTRUCTOR;
-        visitor.compiler.reportError(diagnosticNode, kind);
+        listener.reportErrorMessage(diagnosticNode, kind);
         isValidAsConstant = false;
       } else if (constructor.isConst
                  && !lookedupConstructor.isConst) {
         MessageKind kind = isImplicitSuperCall
                            ? MessageKind.CONST_CALLS_NON_CONST_FOR_IMPLICIT
                            : MessageKind.CONST_CALLS_NON_CONST;
-        visitor.compiler.reportError(diagnosticNode, kind);
+        listener.reportErrorMessage(diagnosticNode, kind);
         isValidAsConstant = false;
       }
     }
@@ -341,12 +350,14 @@
       } else if (link.head.asSend() != null) {
         final Send call = link.head.asSend();
         if (call.argumentsNode == null) {
-          error(link.head, MessageKind.INVALID_INITIALIZER);
+          listener.reportErrorMessage(
+              link.head, MessageKind.INVALID_INITIALIZER);
           continue;
         }
         if (Initializers.isSuperConstructorCall(call)) {
           if (resolvedSuper) {
-            error(call, MessageKind.DUPLICATE_SUPER_INITIALIZER);
+            listener.reportErrorMessage(
+                call, MessageKind.DUPLICATE_SUPER_INITIALIZER);
           }
           ResolutionResult result = resolveSuperOrThisForSend(call);
           if (isConst) {
@@ -362,11 +373,13 @@
           // constructor is also const, we already reported an error in
           // [resolveMethodElement].
           if (functionNode.hasBody() && !constructor.isConst) {
-            error(functionNode, MessageKind.REDIRECTING_CONSTRUCTOR_HAS_BODY);
+            listener.reportErrorMessage(
+                functionNode, MessageKind.REDIRECTING_CONSTRUCTOR_HAS_BODY);
           }
           // Check that there are no other initializers.
           if (!initializers.tail.isEmpty) {
-            error(call, MessageKind.REDIRECTING_CONSTRUCTOR_HAS_INITIALIZER);
+            listener.reportErrorMessage(
+                call, MessageKind.REDIRECTING_CONSTRUCTOR_HAS_INITIALIZER);
           } else {
             constructor.isRedirectingGenerative = true;
           }
@@ -375,7 +388,8 @@
           signature.forEachParameter((ParameterElement parameter) {
             if (parameter.isInitializingFormal) {
               Node node = parameter.node;
-              error(node, MessageKind.INITIALIZING_FORMAL_NOT_ALLOWED);
+              listener.reportErrorMessage(
+                  node, MessageKind.INITIALIZING_FORMAL_NOT_ALLOWED);
               isValidAsConstant = false;
             }
           });
@@ -395,11 +409,13 @@
           }
           return result.element;
         } else {
-          visitor.error(call, MessageKind.CONSTRUCTOR_CALL_EXPECTED);
+          listener.reportErrorMessage(
+              call, MessageKind.CONSTRUCTOR_CALL_EXPECTED);
           return null;
         }
       } else {
-        error(link.head, MessageKind.INVALID_INITIALIZER);
+        listener.reportErrorMessage(
+            link.head, MessageKind.INVALID_INITIALIZER);
       }
     }
     if (!resolvedSuper) {
@@ -446,9 +462,11 @@
       registry.registerThrowRuntimeError();
     }
     if (isError || inConstContext) {
-      compiler.reportError(diagnosticNode, kind, arguments);
+      compiler.reportErrorMessage(
+          diagnosticNode, kind, arguments);
     } else {
-      compiler.reportWarning(diagnosticNode, kind, arguments);
+      compiler.reportWarningMessage(
+          diagnosticNode, kind, arguments);
     }
     ErroneousElement error = new ErroneousConstructorElementX(
         kind, arguments, name, enclosing);
@@ -464,12 +482,8 @@
       String constructorName) {
     ClassElement cls = type.element;
     cls.ensureResolved(compiler);
-    ConstructorElement constructor = cls.lookupConstructor(constructorName);
-    // TODO(johnniwinther): Use [Name] for lookup.
-    if (Name.isPrivateName(constructorName) &&
-        resolver.enclosingElement.library != cls.library) {
-      constructor = null;
-    }
+    ConstructorElement constructor = findConstructor(
+        resolver.enclosingElement.library, cls, constructorName);
     if (constructor == null) {
       String fullConstructorName =
           Elements.constructorNameForDiagnostics(cls.name, constructorName);
@@ -481,14 +495,14 @@
           {'constructorName': fullConstructorName},
           missingConstructor: true);
     } else if (inConstContext && !constructor.isConst) {
-      compiler.reportError(
+      compiler.reportErrorMessage(
           diagnosticNode, MessageKind.CONSTRUCTOR_IS_NOT_CONST);
       return new ConstructorResult(
           ConstructorResultKind.NON_CONSTANT, constructor, type);
     } else {
       if (constructor.isGenerativeConstructor) {
         if (cls.isAbstract) {
-          compiler.reportWarning(
+          compiler.reportWarningMessage(
               diagnosticNode, MessageKind.ABSTRACT_CLASS_INSTANTIATION);
           registry.registerAbstractClassInstantiation();
           return new ConstructorResult(
@@ -572,7 +586,9 @@
     }
 
     Identifier name = node.selector.asIdentifier();
-    if (name == null) internalError(node.selector, 'unexpected node');
+    if (name == null) {
+      compiler.internalError(node.selector, 'unexpected node');
+    }
 
     if (receiver.type != null) {
       if (receiver.type.isInterfaceType) {
@@ -590,7 +606,8 @@
       Element member = prefix.lookupLocalMember(name.source);
       return constructorResultForElement(node, name.source, member);
     } else {
-      return internalError(node.receiver, 'unexpected receiver $receiver');
+      return compiler.internalError(
+          node.receiver, 'unexpected receiver $receiver');
     }
   }
 
@@ -682,8 +699,7 @@
           MessageKind.CANNOT_INSTANTIATE_TYPE_VARIABLE,
           {'typeVariableName': name});
     }
-    internalError(node, "Unexpected constructor type $type");
-    return null;
+    return compiler.internalError(node, "Unexpected constructor type $type");
   }
 
 }
@@ -728,3 +744,23 @@
     return sb.toString();
   }
 }
+
+/// Lookup the [constructorName] constructor in [cls] and normalize the result
+/// with respect to privacy and patching.
+ConstructorElement findConstructor(
+    LibraryElement currentLibrary,
+    ClassElement cls,
+    String constructorName) {
+  if (Name.isPrivateName(constructorName) &&
+      currentLibrary.library != cls.library) {
+    // TODO(johnniwinther): Report a special error on unaccessible private
+    // constructors.
+    return null;
+  }
+  // TODO(johnniwinther): Use [Name] for lookup.
+  ConstructorElement constructor = cls.lookupConstructor(constructorName);
+  if (constructor != null) {
+    constructor = constructor.declaration;
+  }
+  return constructor;
+}
diff --git a/pkg/compiler/lib/src/resolution/members.dart b/pkg/compiler/lib/src/resolution/members.dart
index 168013c..8546700 100644
--- a/pkg/compiler/lib/src/resolution/members.dart
+++ b/pkg/compiler/lib/src/resolution/members.dart
@@ -14,6 +14,8 @@
 import '../constants/values.dart';
 import '../core_types.dart';
 import '../dart_types.dart';
+import '../diagnostics/diagnostic_listener.dart' show
+    DiagnosticMessage;
 import '../diagnostics/invariant.dart' show
     invariant;
 import '../diagnostics/messages.dart' show
@@ -208,19 +210,20 @@
   Element reportLookupErrorIfAny(Element result, Node node, String name) {
     if (!Elements.isUnresolved(result)) {
       if (!inInstanceContext && result.isInstanceMember) {
-        compiler.reportError(
+        compiler.reportErrorMessage(
             node, MessageKind.NO_INSTANCE_AVAILABLE, {'name': name});
         return new ErroneousElementX(MessageKind.NO_INSTANCE_AVAILABLE,
                                      {'name': name},
                                      name, enclosingElement);
       } else if (result.isAmbiguous) {
         AmbiguousElement ambiguous = result;
-        compiler.reportError(
-            node, ambiguous.messageKind, ambiguous.messageArguments);
-        ambiguous.diagnose(enclosingElement, compiler);
-        return new ErroneousElementX(ambiguous.messageKind,
-                                     ambiguous.messageArguments,
-                                     name, enclosingElement);
+        return reportAndCreateErroneousElement(
+              node,
+              name,
+              ambiguous.messageKind,
+              ambiguous.messageArguments,
+              infos: ambiguous.computeInfos(enclosingElement, compiler),
+              isError: true);
       }
     }
     return result;
@@ -301,11 +304,14 @@
       String name,
       MessageKind kind,
       Map arguments,
-      {bool isError: false}) {
+      {List<DiagnosticMessage> infos: const <DiagnosticMessage>[],
+       bool isError: false}) {
     if (isError) {
-      compiler.reportError(node, kind, arguments);
+      compiler.reportError(
+          compiler.createMessage(node, kind, arguments), infos);
     } else {
-      compiler.reportWarning(node, kind, arguments);
+      compiler.reportWarning(
+          compiler.createMessage(node, kind, arguments), infos);
     }
     // TODO(ahe): Use [allowedCategory] to synthesize a more precise subclass
     // of [ErroneousElementX]. For example, [ErroneousFieldElementX],
@@ -354,15 +360,18 @@
   ResolutionResult visitIdentifier(Identifier node) {
     if (node.isThis()) {
       if (!inInstanceContext) {
-        error(node, MessageKind.NO_INSTANCE_AVAILABLE, {'name': node});
+        compiler.reportErrorMessage(
+            node, MessageKind.NO_INSTANCE_AVAILABLE, {'name': node});
       }
       return const NoneResult();
     } else if (node.isSuper()) {
       if (!inInstanceContext) {
-        error(node, MessageKind.NO_SUPER_IN_STATIC);
+        compiler.reportErrorMessage(
+            node, MessageKind.NO_SUPER_IN_STATIC);
       }
       if ((ElementCategory.SUPER & allowedCategory) == 0) {
-        error(node, MessageKind.INVALID_USE_OF_SUPER);
+        compiler.reportErrorMessage(
+            node, MessageKind.INVALID_USE_OF_SUPER);
       }
       return const NoneResult();
     } else {
@@ -448,7 +457,7 @@
     Element enclosingElement = function.enclosingElement;
     if (node.modifiers.isStatic &&
         enclosingElement.kind != ElementKind.CLASS) {
-      compiler.reportError(node, MessageKind.ILLEGAL_STATIC);
+      compiler.reportErrorMessage(node, MessageKind.ILLEGAL_STATIC);
     }
 
     scope = new MethodScope(scope, function);
@@ -504,7 +513,8 @@
   ResolutionResult visitAssert(Assert node) {
     if (!compiler.enableAssertMessage) {
       if (node.hasMessage) {
-        compiler.reportError(node, MessageKind.EXPERIMENTAL_ASSERT_MESSAGE);
+        compiler.reportErrorMessage(
+            node, MessageKind.EXPERIMENTAL_ASSERT_MESSAGE);
       }
     }
     // TODO(sra): We could completely ignore the assert in production mode if we
@@ -598,7 +608,7 @@
       {bool inFunctionDeclaration: false}) {
     bool doAddToScope = inFunctionDeclaration;
     if (!inFunctionDeclaration && node.name != null) {
-      compiler.reportError(
+      compiler.reportErrorMessage(
           node.name,
           MessageKind.NAMED_FUNCTION_EXPRESSION,
           {'name': node.name});
@@ -763,7 +773,8 @@
           seenNamedArguments[source] = namedArgument;
         }
       } else if (!seenNamedArguments.isEmpty) {
-        error(argument, MessageKind.INVALID_ARGUMENT_AFTER_NAMED);
+        compiler.reportErrorMessage(
+            argument, MessageKind.INVALID_ARGUMENT_AFTER_NAMED);
         isValidAsConstant = false;
       }
       argumentCount++;
@@ -1248,7 +1259,7 @@
                 knownExpressionType == coreTypes.doubleType;
             break;
           case UnaryOperatorKind.NOT:
-            internalError(node,
+            compiler.internalError(node,
                 "Unexpected user definable unary operator: $operator");
         }
         if (isValidConstant) {
@@ -1466,7 +1477,8 @@
           case BinaryOperatorKind.LOGICAL_AND:
           case BinaryOperatorKind.LOGICAL_OR:
           case BinaryOperatorKind.IF_NULL:
-            internalError(node, "Unexpected binary operator '${operator}'.");
+            compiler.internalError(
+                node, "Unexpected binary operator '${operator}'.");
             break;
         }
         if (isValidConstant) {
@@ -1516,7 +1528,8 @@
         case BinaryOperatorKind.LOGICAL_AND:
         case BinaryOperatorKind.LOGICAL_OR:
         case BinaryOperatorKind.IF_NULL:
-          internalError(node, "Unexpected binary operator '${operator}'.");
+          compiler.internalError(
+              node, "Unexpected binary operator '${operator}'.");
           break;
       }
       registry.registerSendStructure(node, sendStructure);
@@ -1580,7 +1593,8 @@
       return const NoneResult();
     } else {
       // TODO(johnniwinther): Handle get of `this` when it is a [Send] node.
-      internalError(node, "Unexpected node '$node'.");
+      compiler.internalError(
+          node, "Unexpected node '$node'.");
     }
     return const NoneResult();
   }
@@ -1634,7 +1648,8 @@
           // 'super' is not allowed.
           break;
         default:
-          internalError(node, "Unexpected super property access $semantics.");
+          compiler.internalError(
+              node, "Unexpected super property access $semantics.");
           break;
       }
       registry.registerSendStructure(node,
@@ -1661,7 +1676,8 @@
           // 'super' is not allowed.
           break;
         default:
-          internalError(node, "Unexpected super property access $semantics.");
+          compiler.internalError(
+              node, "Unexpected super property access $semantics.");
           break;
       }
       registry.registerSendStructure(node, new GetStructure(semantics));
@@ -2507,8 +2523,8 @@
         node,
         name.text,
         element.messageKind,
-        element.messageArguments);
-    element.diagnose(enclosingElement, compiler);
+        element.messageArguments,
+        infos: element.computeInfos(enclosingElement, compiler));
     registry.registerThrowNoSuchMethod();
 
     // TODO(johnniwinther): Support ambiguous access as an [AccessSemantics].
@@ -2526,8 +2542,8 @@
         node,
         name.text,
         element.messageKind,
-        element.messageArguments);
-    element.diagnose(enclosingElement, compiler);
+        element.messageArguments,
+        infos: element.computeInfos(enclosingElement, compiler));
     registry.registerThrowNoSuchMethod();
 
     // TODO(johnniwinther): Support ambiguous access as an [AccessSemantics].
@@ -2577,7 +2593,7 @@
               new UniverseSelector(selector, null));
           break;
         default:
-          internalError(node,
+          compiler.internalError(node,
               "Unexpected local access $semantics.");
           break;
       }
@@ -2623,7 +2639,7 @@
           }
           break;
         default:
-          internalError(node,
+          compiler.internalError(node,
               "Unexpected local access $semantics.");
           break;
       }
@@ -2713,7 +2729,7 @@
 
     if (member == compiler.mirrorSystemGetNameFunction &&
         !compiler.mirrorUsageAnalyzerTask.hasMirrorUsage(enclosingElement)) {
-      compiler.reportHint(
+      compiler.reportHintMessage(
           node.selector, MessageKind.STATIC_FUNCTION_BLOAT,
           {'class': compiler.mirrorSystemClass.name,
            'name': compiler.mirrorSystemGetNameFunction.name});
@@ -2771,7 +2787,7 @@
               MessageKind.CANNOT_RESOLVE_GETTER, const {});
           break;
         default:
-          internalError(node,
+          compiler.internalError(node,
               "Unexpected statically resolved access $semantics.");
           break;
       }
@@ -2806,7 +2822,7 @@
               MessageKind.CANNOT_RESOLVE_GETTER, const {});
           break;
         default:
-          internalError(node,
+          compiler.internalError(node,
               "Unexpected statically resolved access $semantics.");
           break;
       }
@@ -2969,7 +2985,7 @@
     } else if (element.isStatic || element.isTopLevel) {
       return handleStaticOrTopLevelAccess(node, name, element);
     }
-    return internalError(node, "Unexpected resolved send: $element");
+    return compiler.internalError(node, "Unexpected resolved send: $element");
   }
 
   /// Handle update to resolved [element].
@@ -3007,7 +3023,7 @@
     } else if (element.isStatic || element.isTopLevel) {
       return handleStaticOrTopLevelUpdate(node, name, element);
     }
-    return internalError(node, "Unexpected resolved send: $element");
+    return compiler.internalError(node, "Unexpected resolved send: $element");
   }
 
   /// Handle an unqualified [Send], that is where the `node.receiver` is null,
@@ -3338,7 +3354,7 @@
           registry.registerStaticInvocation(semantics.setter);
           switch (semantics.kind) {
             case AccessKind.SUPER_FINAL_FIELD:
-              compiler.reportWarning(
+              compiler.reportWarningMessage(
                   node,
                   MessageKind.ASSIGNING_FINAL_FIELD_IN_SUPER,
                   {'name': name,
@@ -3349,7 +3365,7 @@
               registry.registerSuperNoSuchMethod();
               break;
             case AccessKind.SUPER_METHOD:
-              compiler.reportWarning(
+              compiler.reportWarningMessage(
                   node, MessageKind.ASSIGNING_METHOD_IN_SUPER,
                   {'name': name,
                    'superclassName': semantics.setter.enclosingClass.name});
@@ -3551,7 +3567,8 @@
     String name = node.slowNameString;
     registry.registerConstSymbol(name);
     if (!validateSymbol(node, name, reportError: false)) {
-      compiler.reportError(node,
+      compiler.reportErrorMessage(
+          node,
           MessageKind.UNSUPPORTED_LITERAL_SYMBOL,
           {'value': name});
     }
@@ -3583,7 +3600,8 @@
 
   ResolutionResult visitRethrow(Rethrow node) {
     if (!inCatchBlock) {
-      error(node, MessageKind.THROW_WITHOUT_EXPRESSION);
+      compiler.reportErrorMessage(
+          node, MessageKind.THROW_WITHOUT_EXPRESSION);
     }
     return const NoneResult();
   }
@@ -3595,10 +3613,11 @@
         // It is a compile-time error if a return statement of the form
         // `return e;` appears in a generative constructor.  (Dart Language
         // Specification 13.12.)
-        compiler.reportError(expression,
-                             MessageKind.CANNOT_RETURN_FROM_CONSTRUCTOR);
+        compiler.reportErrorMessage(
+            expression,
+            MessageKind.CANNOT_RETURN_FROM_CONSTRUCTOR);
       } else if (!node.isArrowBody && currentAsyncMarker.isYielding) {
-        compiler.reportError(
+        compiler.reportErrorMessage(
             node,
             MessageKind.RETURN_IN_GENERATOR,
             {'modifier': currentAsyncMarker});
@@ -3618,9 +3637,9 @@
   ResolutionResult visitRedirectingFactoryBody(RedirectingFactoryBody node) {
     final isSymbolConstructor = enclosingElement == compiler.symbolConstructor;
     if (!enclosingElement.isFactoryConstructor) {
-      compiler.reportError(
+      compiler.reportErrorMessage(
           node, MessageKind.FACTORY_REDIRECTION_IN_NON_FACTORY);
-      compiler.reportHint(
+      compiler.reportHintMessage(
           enclosingElement, MessageKind.MISSING_FACTORY_KEYWORD);
     }
     ConstructorElementX constructor = enclosingElement;
@@ -3644,11 +3663,13 @@
     } else {
       if (isConstConstructor &&
           !redirectionTarget.isConst) {
-        compiler.reportError(node, MessageKind.CONSTRUCTOR_IS_NOT_CONST);
+        compiler.reportErrorMessage(
+            node, MessageKind.CONSTRUCTOR_IS_NOT_CONST);
         isValidAsConstant = false;
       }
       if (redirectionTarget == constructor) {
-        compiler.reportError(node, MessageKind.CYCLIC_REDIRECTING_FACTORY);
+        compiler.reportErrorMessage(
+            node, MessageKind.CYCLIC_REDIRECTING_FACTORY);
         // TODO(johnniwinther): Create constant constructor for this case and
         // let evaluation detect the cyclicity.
         isValidAsConstant = false;
@@ -3664,8 +3685,10 @@
     FunctionType constructorType = constructor.computeType(compiler);
     bool isSubtype = compiler.types.isSubtype(targetType, constructorType);
     if (!isSubtype) {
-      warning(node, MessageKind.NOT_ASSIGNABLE,
-              {'fromType': targetType, 'toType': constructorType});
+      compiler.reportWarningMessage(
+          node,
+          MessageKind.NOT_ASSIGNABLE,
+          {'fromType': targetType, 'toType': constructorType});
       // TODO(johnniwinther): Handle this (potentially) erroneous case.
       isValidAsConstant = false;
     }
@@ -3755,7 +3778,8 @@
         }
       }
       assert(modifierNode != null);
-      compiler.reportError(modifierNode, MessageKind.EXTRANEOUS_MODIFIER,
+      compiler.reportErrorMessage(
+          modifierNode, MessageKind.EXTRANEOUS_MODIFIER,
           {'modifier': modifier});
     }
     if (modifiers.isFinal && (modifiers.isConst || modifiers.isVar)) {
@@ -3831,16 +3855,18 @@
     registry.registerStaticUse(constructor.declaration);
     ClassElement cls = constructor.enclosingClass;
     if (cls.isEnumClass && currentClass != cls) {
-      compiler.reportError(node,
-                           MessageKind.CANNOT_INSTANTIATE_ENUM,
-                           {'enumName': cls.name});
+      compiler.reportErrorMessage(
+          node,
+          MessageKind.CANNOT_INSTANTIATE_ENUM,
+          {'enumName': cls.name});
       isValidAsConstant = false;
     }
 
     InterfaceType type = registry.getType(node);
     if (node.isConst && type.containsTypeVariables) {
-      compiler.reportError(node.send.selector,
-                           MessageKind.TYPE_VARIABLE_IN_CONSTANT);
+      compiler.reportErrorMessage(
+          node.send.selector,
+          MessageKind.TYPE_VARIABLE_IN_CONSTANT);
       isValidAsConstant = false;
     }
     // TODO(johniwinther): Avoid registration of `type` in face of redirecting
@@ -3859,8 +3885,10 @@
         ConstantValue name = compiler.constants.getConstantValue(constant);
         if (!name.isString) {
           DartType type = name.getType(coreTypes);
-          compiler.reportError(argumentNode, MessageKind.STRING_EXPECTED,
-                                   {'type': type});
+          compiler.reportErrorMessage(
+              argumentNode,
+              MessageKind.STRING_EXPECTED,
+              {'type': type});
         } else {
           StringConstantValue stringConstant = name;
           String nameString = stringConstant.toDartString().slowToString();
@@ -3871,7 +3899,7 @@
       } else {
         if (!compiler.mirrorUsageAnalyzerTask.hasMirrorUsage(
                 enclosingElement)) {
-          compiler.reportHint(
+          compiler.reportHintMessage(
               node.newToken, MessageKind.NON_CONST_BLOAT,
               {'name': compiler.symbolClass.name});
         }
@@ -3925,9 +3953,10 @@
       if (cls == compiler.stringClass) continue;
       Element equals = cls.lookupMember('==');
       if (equals.enclosingClass != compiler.objectClass) {
-        compiler.reportError(spannable,
-                             MessageKind.CONST_MAP_KEY_OVERRIDES_EQUALS,
-                             {'type': keyType});
+        compiler.reportErrorMessage(
+            spannable,
+            MessageKind.CONST_MAP_KEY_OVERRIDES_EQUALS,
+            {'type': keyType});
       }
     }
   }
@@ -3957,11 +3986,13 @@
         if (typeConstant.representedType is InterfaceType) {
           registry.registerInstantiatedType(typeConstant.representedType);
         } else {
-          compiler.reportError(node,
+          compiler.reportErrorMessage(
+              node,
               MessageKind.WRONG_ARGUMENT_FOR_JS_INTERCEPTOR_CONSTANT);
         }
       } else {
-        compiler.reportError(node,
+        compiler.reportErrorMessage(
+            node,
             MessageKind.WRONG_ARGUMENT_FOR_JS_INTERCEPTOR_CONSTANT);
       }
     }
@@ -3977,15 +4008,15 @@
     if (name.isEmpty) return true;
     if (name.startsWith('_')) {
       if (reportError) {
-        compiler.reportError(node, MessageKind.PRIVATE_IDENTIFIER,
-                             {'value': name});
+        compiler.reportErrorMessage(
+            node, MessageKind.PRIVATE_IDENTIFIER, {'value': name});
       }
       return false;
     }
     if (!symbolValidationPattern.hasMatch(name)) {
       if (reportError) {
-        compiler.reportError(node, MessageKind.INVALID_SYMBOL,
-                             {'value': name});
+        compiler.reportErrorMessage(
+            node, MessageKind.INVALID_SYMBOL, {'value': name});
       }
       return false;
     }
@@ -4031,12 +4062,14 @@
       Link<Node> nodes = arguments.nodes;
       if (nodes.isEmpty) {
         // The syntax [: <>[] :] is not allowed.
-        error(arguments, MessageKind.MISSING_TYPE_ARGUMENT);
+        compiler.reportErrorMessage(
+            arguments, MessageKind.MISSING_TYPE_ARGUMENT);
         isValidAsConstant = false;
       } else {
         typeArgument = resolveTypeAnnotation(nodes.head);
         for (nodes = nodes.tail; !nodes.isEmpty; nodes = nodes.tail) {
-          warning(nodes.head, MessageKind.ADDITIONAL_TYPE_ARGUMENT);
+          compiler.reportWarningMessage(
+              nodes.head, MessageKind.ADDITIONAL_TYPE_ARGUMENT);
           resolveTypeAnnotation(nodes.head);
         }
       }
@@ -4044,7 +4077,8 @@
     DartType listType;
     if (typeArgument != null) {
       if (node.isConst && typeArgument.containsTypeVariables) {
-        compiler.reportError(arguments.nodes.head,
+        compiler.reportErrorMessage(
+            arguments.nodes.head,
             MessageKind.TYPE_VARIABLE_IN_CONSTANT);
         isValidAsConstant = false;
       }
@@ -4138,7 +4172,8 @@
     if (node.target == null) {
       target = statementScope.currentBreakTarget();
       if (target == null) {
-        error(node, MessageKind.NO_BREAK_TARGET);
+        compiler.reportErrorMessage(
+            node, MessageKind.NO_BREAK_TARGET);
         return const NoneResult();
       }
       target.isBreakTarget = true;
@@ -4146,12 +4181,14 @@
       String labelName = node.target.source;
       LabelDefinition label = statementScope.lookupLabel(labelName);
       if (label == null) {
-        error(node.target, MessageKind.UNBOUND_LABEL, {'labelName': labelName});
+        compiler.reportErrorMessage(
+            node.target, MessageKind.UNBOUND_LABEL, {'labelName': labelName});
         return const NoneResult();
       }
       target = label.target;
       if (!target.statement.isValidBreakTarget()) {
-        error(node.target, MessageKind.INVALID_BREAK);
+        compiler.reportErrorMessage(
+            node.target, MessageKind.INVALID_BREAK);
         return const NoneResult();
       }
       label.setBreakTarget();
@@ -4166,7 +4203,8 @@
     if (node.target == null) {
       target = statementScope.currentContinueTarget();
       if (target == null) {
-        error(node, MessageKind.NO_CONTINUE_TARGET);
+        compiler.reportErrorMessage(
+            node, MessageKind.NO_CONTINUE_TARGET);
         return const NoneResult();
       }
       target.isContinueTarget = true;
@@ -4174,12 +4212,14 @@
       String labelName = node.target.source;
       LabelDefinition label = statementScope.lookupLabel(labelName);
       if (label == null) {
-        error(node.target, MessageKind.UNBOUND_LABEL, {'labelName': labelName});
+        compiler.reportErrorMessage(
+            node.target, MessageKind.UNBOUND_LABEL, {'labelName': labelName});
         return const NoneResult();
       }
       target = label.target;
       if (!target.statement.isValidContinueTarget()) {
-        error(node.target, MessageKind.INVALID_CONTINUE);
+        compiler.reportErrorMessage(
+            node.target, MessageKind.INVALID_CONTINUE);
       }
       label.setContinueTarget();
       registry.useLabel(node, label);
@@ -4249,30 +4289,35 @@
       loopVariable = registry.getDefinition(send);
       Identifier identifier = send.selector.asIdentifier();
       if (identifier == null) {
-        compiler.reportError(send.selector, MessageKind.INVALID_FOR_IN);
+        compiler.reportErrorMessage(
+            send.selector, MessageKind.INVALID_FOR_IN);
       } else {
         loopVariableSelector = new Selector.setter(
             new Name(identifier.source, library));
       }
       if (send.receiver != null) {
-        compiler.reportError(send.receiver, MessageKind.INVALID_FOR_IN);
+        compiler.reportErrorMessage(
+            send.receiver, MessageKind.INVALID_FOR_IN);
       }
     } else if (variableDefinitions != null) {
       Link<Node> nodes = variableDefinitions.definitions.nodes;
       if (!nodes.tail.isEmpty) {
-        compiler.reportError(nodes.tail.head, MessageKind.INVALID_FOR_IN);
+        compiler.reportErrorMessage(
+            nodes.tail.head, MessageKind.INVALID_FOR_IN);
       }
       Node first = nodes.head;
       Identifier identifier = first.asIdentifier();
       if (identifier == null) {
-        compiler.reportError(first, MessageKind.INVALID_FOR_IN);
+        compiler.reportErrorMessage(
+            first, MessageKind.INVALID_FOR_IN);
       } else {
         loopVariableSelector = new Selector.setter(
             new Name(identifier.source, library));
         loopVariable = registry.getDefinition(identifier);
       }
     } else {
-      compiler.reportError(declaration, MessageKind.INVALID_FOR_IN);
+      compiler.reportErrorMessage(
+          declaration, MessageKind.INVALID_FOR_IN);
     }
     if (loopVariableSelector != null) {
       registry.setSelector(declaration, loopVariableSelector);
@@ -4308,8 +4353,10 @@
       if (element.isTarget) {
         registry.defineLabel(element.label, element);
       } else {
-        warning(element.label, MessageKind.UNUSED_LABEL,
-                {'labelName': labelName});
+        compiler.reportWarningMessage(
+            element.label,
+            MessageKind.UNUSED_LABEL,
+            {'labelName': labelName});
       }
     });
     if (!targetElement.isTarget) {
@@ -4329,17 +4376,20 @@
       Link<Node> nodes = arguments.nodes;
       if (nodes.isEmpty) {
         // The syntax [: <>{} :] is not allowed.
-        error(arguments, MessageKind.MISSING_TYPE_ARGUMENT);
+        compiler.reportErrorMessage(
+            arguments, MessageKind.MISSING_TYPE_ARGUMENT);
         isValidAsConstant = false;
       } else {
         keyTypeArgument = resolveTypeAnnotation(nodes.head);
         nodes = nodes.tail;
         if (nodes.isEmpty) {
-          warning(arguments, MessageKind.MISSING_TYPE_ARGUMENT);
+          compiler.reportWarningMessage(
+              arguments, MessageKind.MISSING_TYPE_ARGUMENT);
         } else {
           valueTypeArgument = resolveTypeAnnotation(nodes.head);
           for (nodes = nodes.tail; !nodes.isEmpty; nodes = nodes.tail) {
-            warning(nodes.head, MessageKind.ADDITIONAL_TYPE_ARGUMENT);
+            compiler.reportWarningMessage(
+                nodes.head, MessageKind.ADDITIONAL_TYPE_ARGUMENT);
             resolveTypeAnnotation(nodes.head);
           }
         }
@@ -4352,7 +4402,8 @@
       mapType = coreTypes.mapType();
     }
     if (node.isConst && mapType.containsTypeVariables) {
-      compiler.reportError(arguments,
+      compiler.reportErrorMessage(
+          arguments,
           MessageKind.TYPE_VARIABLE_IN_CONSTANT);
       isValidAsConstant = false;
     }
@@ -4421,7 +4472,8 @@
   void checkCaseExpressions(SwitchStatement node) {
     CaseMatch firstCase = null;
     DartType firstCaseType = null;
-    bool hasReportedProblem = false;
+    DiagnosticMessage error;
+    List<DiagnosticMessage> infos = <DiagnosticMessage>[];
 
     for (Link<Node> cases = node.cases.nodes;
          !cases.isEmpty;
@@ -4448,38 +4500,43 @@
           // We only report the bad type on the first class element. All others
           // get a "type differs" error.
           if (caseType.element == compiler.doubleClass) {
-            compiler.reportError(node,
-                                 MessageKind.SWITCH_CASE_VALUE_OVERRIDES_EQUALS,
-                                 {'type': "double"});
+            compiler.reportErrorMessage(
+                node,
+                MessageKind.SWITCH_CASE_VALUE_OVERRIDES_EQUALS,
+                {'type': "double"});
           } else if (caseType.element == compiler.functionClass) {
-            compiler.reportError(node, MessageKind.SWITCH_CASE_FORBIDDEN,
-                                 {'type': "Function"});
+            compiler.reportErrorMessage(
+                node, MessageKind.SWITCH_CASE_FORBIDDEN,
+                {'type': "Function"});
           } else if (value.isObject && overridesEquals(caseType)) {
-            compiler.reportError(firstCase.expression,
+            compiler.reportErrorMessage(
+                firstCase.expression,
                 MessageKind.SWITCH_CASE_VALUE_OVERRIDES_EQUALS,
                 {'type': caseType});
           }
         } else {
           if (caseType != firstCaseType) {
-            if (!hasReportedProblem) {
-              compiler.reportError(
+            if (error == null) {
+              error = compiler.createMessage(
                   node,
                   MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL,
                   {'type': firstCaseType});
-              compiler.reportInfo(
+              infos.add(compiler.createMessage(
                   firstCase.expression,
                   MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL_CASE,
-                  {'type': firstCaseType});
-              hasReportedProblem = true;
+                  {'type': firstCaseType}));
             }
-            compiler.reportInfo(
+            infos.add(compiler.createMessage(
                 caseMatch.expression,
                 MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL_CASE,
-                {'type': caseType});
+                {'type': caseType}));
           }
         }
       }
     }
+    if (error != null) {
+      compiler.reportError(error, infos);
+    }
   }
 
   ResolutionResult visitSwitchStatement(SwitchStatement node) {
@@ -4503,21 +4560,31 @@
         if (existingElement != null) {
           // It's an error if the same label occurs twice in the same switch.
           compiler.reportError(
-              label,
-              MessageKind.DUPLICATE_LABEL, {'labelName': labelName});
-          compiler.reportInfo(
-              existingElement.label,
-              MessageKind.EXISTING_LABEL, {'labelName': labelName});
+              compiler.createMessage(
+                  label,
+                  MessageKind.DUPLICATE_LABEL,
+                  {'labelName': labelName}),
+              <DiagnosticMessage>[
+                  compiler.createMessage(
+                    existingElement.label,
+                    MessageKind.EXISTING_LABEL,
+                    {'labelName': labelName}),
+              ]);
         } else {
           // It's only a warning if it shadows another label.
           existingElement = statementScope.lookupLabel(labelName);
           if (existingElement != null) {
             compiler.reportWarning(
-                label,
-                MessageKind.DUPLICATE_LABEL, {'labelName': labelName});
-            compiler.reportInfo(
-                existingElement.label,
-                MessageKind.EXISTING_LABEL, {'labelName': labelName});
+                compiler.createMessage(
+                    label,
+                    MessageKind.DUPLICATE_LABEL,
+                    {'labelName': labelName}),
+                <DiagnosticMessage>[
+                    compiler.createMessage(
+                        existingElement.label,
+                        MessageKind.EXISTING_LABEL,
+                        {'labelName': labelName}),
+                ]);
           }
         }
 
@@ -4529,7 +4596,8 @@
       cases = cases.tail;
       // Test that only the last case, if any, is a default case.
       if (switchCase.defaultKeyword != null && !cases.isEmpty) {
-        error(switchCase, MessageKind.INVALID_CASE_DEFAULT);
+        compiler.reportErrorMessage(
+            switchCase, MessageKind.INVALID_CASE_DEFAULT);
       }
     }
 
@@ -4574,7 +4642,8 @@
 
     visit(node.tryBlock);
     if (node.catchBlocks.isEmpty && node.finallyBlock == null) {
-      error(node.getEndToken().next, MessageKind.NO_CATCH_NOR_FINALLY);
+      compiler.reportErrorMessage(
+          node.getEndToken().next, MessageKind.NO_CATCH_NOR_FINALLY);
     }
     visit(node.catchBlocks);
     visit(node.finallyBlock);
@@ -4590,7 +4659,8 @@
     if (node.formals != null) {
       Link<Node> formalsToProcess = node.formals.nodes;
       if (formalsToProcess.isEmpty) {
-        error(node, MessageKind.EMPTY_CATCH_DECLARATION);
+        compiler.reportErrorMessage(
+            node, MessageKind.EMPTY_CATCH_DECLARATION);
       } else {
         exceptionDefinition = formalsToProcess.head.asVariableDefinitions();
         formalsToProcess = formalsToProcess.tail;
@@ -4599,7 +4669,8 @@
           formalsToProcess = formalsToProcess.tail;
           if (!formalsToProcess.isEmpty) {
             for (Node extra in formalsToProcess) {
-              error(extra, MessageKind.EXTRA_CATCH_DECLARATION);
+              compiler.reportErrorMessage(
+                  extra, MessageKind.EXTRA_CATCH_DECLARATION);
             }
           }
           registry.registerStackTraceInCatch();
@@ -4615,15 +4686,18 @@
         // sequence of optional parameters.
         NodeList nodeList = link.head.asNodeList();
         if (nodeList != null) {
-          error(nodeList, MessageKind.OPTIONAL_PARAMETER_IN_CATCH);
+          compiler.reportErrorMessage(
+              nodeList, MessageKind.OPTIONAL_PARAMETER_IN_CATCH);
         } else {
           VariableDefinitions declaration = link.head;
           for (Node modifier in declaration.modifiers.nodes) {
-            error(modifier, MessageKind.PARAMETER_WITH_MODIFIER_IN_CATCH);
+            compiler.reportErrorMessage(
+                modifier, MessageKind.PARAMETER_WITH_MODIFIER_IN_CATCH);
           }
           TypeAnnotation type = declaration.type;
           if (type != null) {
-            error(type, MessageKind.PARAMETER_WITH_TYPE_IN_CATCH);
+            compiler.reportErrorMessage(
+                type, MessageKind.PARAMETER_WITH_TYPE_IN_CATCH);
           }
         }
       }
diff --git a/pkg/compiler/lib/src/resolution/registry.dart b/pkg/compiler/lib/src/resolution/registry.dart
index 64089c0..de12ef0 100644
--- a/pkg/compiler/lib/src/resolution/registry.dart
+++ b/pkg/compiler/lib/src/resolution/registry.dart
@@ -85,8 +85,7 @@
 
   @override
   void registerInstantiation(InterfaceType type) {
-    // TODO(johnniwinther): Remove the need for passing `this`.
-    world.registerInstantiatedType(type, this);
+    world.registerInstantiatedType(type);
   }
 
   @override
@@ -94,6 +93,8 @@
     registerDependency(element);
     world.registerStaticUse(element);
   }
+
+  String toString() => 'EagerRegistry for ${mapping.analyzedElement}';
 }
 
 class ResolutionWorldImpact implements WorldImpact {
@@ -222,6 +223,8 @@
 
   Backend get backend => compiler.backend;
 
+  String toString() => 'ResolutionRegistry for ${mapping.analyzedElement}';
+
   //////////////////////////////////////////////////////////////////////////////
   //  Node-to-Element mapping functionality.
   //////////////////////////////////////////////////////////////////////////////
@@ -444,7 +447,10 @@
   }
 
   void registerClosure(LocalFunctionElement element) {
-    world.registerClosure(element, this);
+    if (element.computeType(compiler).containsTypeVariables) {
+      backend.registerClosureWithFreeTypeVariables(element, world, this);
+    }
+    world.registerClosure(element);
   }
 
   void registerSuperUse(Node node) {
@@ -466,7 +472,7 @@
   void registerTypeLiteral(Send node, DartType type) {
     mapping.setType(node, type);
     backend.resolutionCallbacks.onTypeLiteral(type, this);
-    world.registerInstantiatedType(compiler.coreTypes.typeType, this);
+    backend.registerInstantiatedType(compiler.coreTypes.typeType, world, this);
   }
 
   void registerMapLiteral(Node node, DartType type, bool isConstant) {
@@ -515,7 +521,7 @@
   }
 
   void registerInstantiatedType(InterfaceType type) {
-    world.registerInstantiatedType(type, this);
+    backend.registerInstantiatedType(type, world, this);
     mapping.addRequiredType(type);
   }
 
@@ -580,7 +586,7 @@
   }
 
   void registerInstantiation(InterfaceType type) {
-    world.registerInstantiatedType(type, this);
+    backend.registerInstantiatedType(type, world, this);
   }
 
   void registerAssert(bool hasMessage) {
diff --git a/pkg/compiler/lib/src/resolution/resolution.dart b/pkg/compiler/lib/src/resolution/resolution.dart
index a137493..7256536 100644
--- a/pkg/compiler/lib/src/resolution/resolution.dart
+++ b/pkg/compiler/lib/src/resolution/resolution.dart
@@ -18,6 +18,8 @@
 import '../constants/values.dart' show
     ConstantValue;
 import '../dart_types.dart';
+import '../diagnostics/diagnostic_listener.dart' show
+    DiagnosticMessage;
 import '../diagnostics/invariant.dart' show
     invariant;
 import '../diagnostics/messages.dart' show
@@ -121,7 +123,8 @@
       // Ensure that we follow redirections through implementation elements.
       redirection = redirection.implementation;
       if (seen.contains(redirection)) {
-        resolver.visitor.error(node, MessageKind.REDIRECTING_CONSTRUCTOR_CYCLE);
+        compiler.reportErrorMessage(
+            node, MessageKind.REDIRECTING_CONSTRUCTOR_CYCLE);
         return;
       }
       seen.add(redirection);
@@ -143,23 +146,27 @@
         element.asyncMarker = AsyncMarker.SYNC_STAR;
       }
       if (element.isAbstract) {
-        compiler.reportError(asyncModifier,
+        compiler.reportErrorMessage(
+            asyncModifier,
             MessageKind.ASYNC_MODIFIER_ON_ABSTRACT_METHOD,
             {'modifier': element.asyncMarker});
       } else if (element.isConstructor) {
-        compiler.reportError(asyncModifier,
+        compiler.reportErrorMessage(
+            asyncModifier,
             MessageKind.ASYNC_MODIFIER_ON_CONSTRUCTOR,
             {'modifier': element.asyncMarker});
       } else {
         if (element.isSetter) {
-          compiler.reportError(asyncModifier,
+          compiler.reportErrorMessage(
+              asyncModifier,
               MessageKind.ASYNC_MODIFIER_ON_SETTER,
               {'modifier': element.asyncMarker});
 
         }
         if (functionExpression.body.asReturn() != null &&
             element.asyncMarker.isYielding) {
-          compiler.reportError(asyncModifier,
+          compiler.reportErrorMessage(
+              asyncModifier,
               MessageKind.YIELDING_MODIFIER_ON_ARROW_BODY,
               {'modifier': element.asyncMarker});
         }
@@ -192,18 +199,21 @@
       FunctionElement element, FunctionExpression tree) {
     return compiler.withCurrentElement(element, () {
       if (element.isExternal && tree.hasBody()) {
-        error(element,
+        compiler.reportErrorMessage(
+            element,
             MessageKind.EXTERNAL_WITH_BODY,
             {'functionName': element.name});
       }
       if (element.isConstructor) {
         if (tree.returnType != null) {
-          error(tree, MessageKind.CONSTRUCTOR_WITH_RETURN_TYPE);
+          compiler.reportErrorMessage(
+              tree, MessageKind.CONSTRUCTOR_WITH_RETURN_TYPE);
         }
         if (element.isConst &&
             tree.hasBody() &&
             !tree.isRedirectingFactory) {
-          error(tree, MessageKind.CONST_CONSTRUCTOR_HAS_BODY);
+          compiler.reportErrorMessage(
+              tree, MessageKind.CONST_CONSTRUCTOR_HAS_BODY);
         }
       }
 
@@ -223,7 +233,8 @@
           resolveRedirectingConstructor(resolver, tree, element, redirection);
         }
       } else if (tree.initializers != null) {
-        error(tree, MessageKind.FUNCTION_WITH_INITIALIZER);
+        compiler.reportErrorMessage(
+            tree, MessageKind.FUNCTION_WITH_INITIALIZER);
       }
 
       if (!compiler.analyzeSignaturesOnly || tree.isRedirectingFactory) {
@@ -253,7 +264,8 @@
       if (Elements.isInstanceMethod(element) &&
           element.name == Identifiers.noSuchMethod_ &&
           _isNativeClassOrExtendsNativeClass(enclosingClass)) {
-        error(tree, MessageKind.NO_SUCH_METHOD_IN_NATIVE);
+        compiler.reportErrorMessage(
+            tree, MessageKind.NO_SUCH_METHOD_IN_NATIVE);
       }
 
       return registry.worldImpact;
@@ -320,8 +332,9 @@
   WorldImpact resolveField(FieldElementX element) {
     VariableDefinitions tree = element.parseNode(compiler);
     if(element.modifiers.isStatic && element.isTopLevel) {
-      error(element.modifiers.getStatic(),
-            MessageKind.TOP_LEVEL_VARIABLE_DECLARED_STATIC);
+      compiler.reportErrorMessage(
+          element.modifiers.getStatic(),
+          MessageKind.TOP_LEVEL_VARIABLE_DECLARED_STATIC);
     }
     ResolverVisitor visitor = visitorFor(element);
     ResolutionRegistry registry = visitor.registry;
@@ -343,9 +356,11 @@
       // [Compiler.analyzeSignaturesOnly] is set.
       visitor.visit(initializer);
     } else if (modifiers.isConst) {
-      compiler.reportError(element, MessageKind.CONST_WITHOUT_INITIALIZER);
+      compiler.reportErrorMessage(
+          element, MessageKind.CONST_WITHOUT_INITIALIZER);
     } else if (modifiers.isFinal && !element.isInstanceMember) {
-      compiler.reportError(element, MessageKind.FINAL_WITHOUT_INITIALIZER);
+      compiler.reportErrorMessage(
+          element, MessageKind.FINAL_WITHOUT_INITIALIZER);
     } else {
       registry.registerInstantiatedClass(compiler.nullClass);
     }
@@ -376,7 +391,8 @@
   DartType resolveTypeAnnotation(Element element, TypeAnnotation annotation) {
     DartType type = resolveReturnType(element, annotation);
     if (type.isVoid) {
-      error(annotation, MessageKind.VOID_NOT_ALLOWED);
+      compiler.reportErrorMessage(
+          annotation, MessageKind.VOID_NOT_ALLOWED);
     }
     return type;
   }
@@ -410,7 +426,8 @@
 
       Element nextTarget = target.immediateRedirectionTarget;
       if (seen.contains(nextTarget)) {
-        error(node, MessageKind.CYCLIC_REDIRECTING_FACTORY);
+        compiler.reportErrorMessage(
+            node, MessageKind.CYCLIC_REDIRECTING_FACTORY);
         targetType = target.enclosingClass.thisType;
         break;
       }
@@ -459,8 +476,10 @@
     compiler.withCurrentElement(cls, () => measure(() {
       if (cls.supertypeLoadState == STATE_DONE) return;
       if (cls.supertypeLoadState == STATE_STARTED) {
-        compiler.reportError(from, MessageKind.CYCLIC_CLASS_HIERARCHY,
-                                 {'className': cls.name});
+        compiler.reportErrorMessage(
+            from,
+            MessageKind.CYCLIC_CLASS_HIERARCHY,
+            {'className': cls.name});
         cls.supertypeLoadState = STATE_DONE;
         cls.hasIncompleteHierarchy = true;
         cls.allSupertypesAndSelf =
@@ -643,7 +662,7 @@
     int illegalFlags = modifiers.flags & ~Modifiers.FLAG_ABSTRACT;
     if (illegalFlags != 0) {
       Modifiers illegalModifiers = new Modifiers.withFlags(null, illegalFlags);
-      compiler.reportError(
+      compiler.reportErrorMessage(
           modifiers,
           MessageKind.ILLEGAL_MIXIN_APPLICATION_MODIFIERS,
           {'modifiers': illegalModifiers});
@@ -657,8 +676,9 @@
 
     // Check that we're not trying to use Object as a mixin.
     if (mixin.superclass == null) {
-      compiler.reportError(mixinApplication,
-                               MessageKind.ILLEGAL_MIXIN_OBJECT);
+      compiler.reportErrorMessage(
+          mixinApplication,
+          MessageKind.ILLEGAL_MIXIN_OBJECT);
       // Avoid reporting additional errors for the Object class.
       return;
     }
@@ -670,14 +690,16 @@
 
     // Check that the mixed in class has Object as its superclass.
     if (!mixin.superclass.isObject) {
-      compiler.reportError(mixin, MessageKind.ILLEGAL_MIXIN_SUPERCLASS);
+      compiler.reportErrorMessage(
+          mixin, MessageKind.ILLEGAL_MIXIN_SUPERCLASS);
     }
 
     // Check that the mixed in class doesn't have any constructors and
     // make sure we aren't mixing in methods that use 'super'.
     mixin.forEachLocalMember((AstElement member) {
       if (member.isGenerativeConstructor && !member.isSynthesized) {
-        compiler.reportError(member, MessageKind.ILLEGAL_MIXIN_CONSTRUCTOR);
+        compiler.reportErrorMessage(
+            member, MessageKind.ILLEGAL_MIXIN_CONSTRUCTOR);
       } else {
         // Get the resolution tree and check that the resolved member
         // doesn't use 'super'. This is the part of the 'super' mixin
@@ -702,15 +724,18 @@
     if (resolutionTree == null) return;
     Iterable<Node> superUses = resolutionTree.superUses;
     if (superUses.isEmpty) return;
-    compiler.reportError(mixinApplication,
-                         MessageKind.ILLEGAL_MIXIN_WITH_SUPER,
-                         {'className': mixin.name});
+    DiagnosticMessage error = compiler.createMessage(
+        mixinApplication,
+        MessageKind.ILLEGAL_MIXIN_WITH_SUPER,
+        {'className': mixin.name});
     // Show the user the problematic uses of 'super' in the mixin.
+    List<DiagnosticMessage> infos = <DiagnosticMessage>[];
     for (Node use in superUses) {
-      compiler.reportInfo(
+      infos.add(compiler.createMessage(
           use,
-          MessageKind.ILLEGAL_MIXIN_SUPER_USE);
+          MessageKind.ILLEGAL_MIXIN_SUPER_USE));
     }
+    compiler.reportError(error, infos);
   }
 
   void checkClassMembers(ClassElement cls) {
@@ -727,7 +752,7 @@
 
         // Check modifiers.
         if (member.isFunction && member.modifiers.isFinal) {
-          compiler.reportError(
+          compiler.reportErrorMessage(
               member, MessageKind.ILLEGAL_FINAL_METHOD_MODIFIER);
         }
         if (member.isConstructor) {
@@ -737,7 +762,7 @@
           if (mismatchedFlagsBits != 0) {
             final mismatchedFlags =
                 new Modifiers.withFlags(null, mismatchedFlagsBits);
-            compiler.reportError(
+            compiler.reportErrorMessage(
                 member,
                 MessageKind.ILLEGAL_CONSTRUCTOR_MODIFIERS,
                 {'modifiers': mismatchedFlags});
@@ -748,7 +773,7 @@
         }
         if (member.isField) {
           if (member.modifiers.isConst && !member.modifiers.isStatic) {
-            compiler.reportError(
+            compiler.reportErrorMessage(
                 member, MessageKind.ILLEGAL_CONST_FIELD_MODIFIER);
           }
           if (!member.modifiers.isStatic && !member.modifiers.isFinal) {
@@ -762,19 +787,24 @@
     if (!constConstructors.isEmpty && !nonFinalInstanceFields.isEmpty) {
       Spannable span = constConstructors.length > 1
           ? cls : constConstructors[0];
-      compiler.reportError(span,
+      DiagnosticMessage error = compiler.createMessage(
+          span,
           MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS,
           {'className': cls.name});
+      List<DiagnosticMessage> infos = <DiagnosticMessage>[];
       if (constConstructors.length > 1) {
         for (Element constructor in constConstructors) {
-          compiler.reportInfo(constructor,
-              MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_CONSTRUCTOR);
+          infos.add(compiler.createMessage(
+              constructor,
+              MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_CONSTRUCTOR));
         }
       }
       for (Element field in nonFinalInstanceFields) {
-        compiler.reportInfo(field,
-            MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_FIELD);
+        infos.add(compiler.createMessage(
+            field,
+            MessageKind.CONST_CONSTRUCTOR_WITH_NONFINAL_FIELDS_FIELD));
       }
+      compiler.reportError(error, infos);
     }
   }
 
@@ -806,11 +836,11 @@
     if (!identical(getterFlags, setterFlags)) {
       final mismatchedFlags =
         new Modifiers.withFlags(null, getterFlags ^ setterFlags);
-      compiler.reportError(
+      compiler.reportErrorMessage(
           field.getter,
           MessageKind.GETTER_MISMATCH,
           {'modifiers': mismatchedFlags});
-      compiler.reportError(
+      compiler.reportErrorMessage(
           field.setter,
           MessageKind.SETTER_MISMATCH,
           {'modifiers': mismatchedFlags});
@@ -858,7 +888,7 @@
     Element hashCodeImplementation =
         cls.lookupLocalMember('hashCode');
     if (hashCodeImplementation != null) return;
-    compiler.reportHint(
+    compiler.reportHintMessage(
         operatorEquals, MessageKind.OVERRIDE_EQUALS_NOT_HASH_CODE,
         {'class': cls.name});
   }
@@ -899,19 +929,19 @@
           errorNode = node.parameters.nodes.skip(requiredParameterCount).head;
         }
       }
-      compiler.reportError(
+      compiler.reportErrorMessage(
           errorNode, messageKind, {'operatorName': function.name});
     }
     if (signature.optionalParameterCount != 0) {
       Node errorNode =
           node.parameters.nodes.skip(signature.requiredParameterCount).head;
       if (signature.optionalParametersAreNamed) {
-        compiler.reportError(
+        compiler.reportErrorMessage(
             errorNode,
             MessageKind.OPERATOR_NAMED_PARAMETERS,
             {'operatorName': function.name});
       } else {
-        compiler.reportError(
+        compiler.reportErrorMessage(
             errorNode,
             MessageKind.OPERATOR_OPTIONAL_PARAMETERS,
             {'operatorName': function.name});
@@ -924,11 +954,14 @@
                          Element contextElement,
                          MessageKind contextMessage) {
     compiler.reportError(
-        errorneousElement,
-        errorMessage,
-        {'memberName': contextElement.name,
-         'className': contextElement.enclosingClass.name});
-    compiler.reportInfo(contextElement, contextMessage);
+        compiler.createMessage(
+            errorneousElement,
+            errorMessage,
+            {'memberName': contextElement.name,
+             'className': contextElement.enclosingClass.name}),
+        <DiagnosticMessage>[
+            compiler.createMessage(contextElement, contextMessage),
+        ]);
   }
 
 
@@ -1006,10 +1039,6 @@
     }));
   }
 
-  error(Spannable node, MessageKind kind, [arguments = const {}]) {
-    compiler.reportError(node, kind, arguments);
-  }
-
   List<MetadataAnnotation> resolveMetadata(Element element,
                                            VariableDefinitions node) {
     List<MetadataAnnotation> metadata = <MetadataAnnotation>[];
diff --git a/pkg/compiler/lib/src/resolution/resolution_common.dart b/pkg/compiler/lib/src/resolution/resolution_common.dart
index 6797433..eb7b80b 100644
--- a/pkg/compiler/lib/src/resolution/resolution_common.dart
+++ b/pkg/compiler/lib/src/resolution/resolution_common.dart
@@ -8,6 +8,8 @@
     DeferredAction;
 import '../compiler.dart' show
     Compiler;
+import '../diagnostics/diagnostic_listener.dart' show
+    DiagnosticMessage;
 import '../diagnostics/messages.dart' show
     MessageKind;
 import '../diagnostics/spannable.dart' show
@@ -28,9 +30,8 @@
   CommonResolverVisitor(Compiler this.compiler);
 
   R visitNode(Node node) {
-    internalError(node,
+    return compiler.internalError(node,
         'internal error: Unhandled node: ${node.getObjectDescription()}');
-    return null;
   }
 
   R visitEmptyStatement(Node node) => null;
@@ -38,18 +39,6 @@
   /** Convenience method for visiting nodes that may be null. */
   R visit(Node node) => (node == null) ? null : node.accept(this);
 
-  void error(Spannable node, MessageKind kind, [Map arguments = const {}]) {
-    compiler.reportError(node, kind, arguments);
-  }
-
-  void warning(Spannable node, MessageKind kind, [Map arguments = const {}]) {
-    compiler.reportWarning(node, kind, arguments);
-  }
-
-  internalError(Spannable node, message) {
-    compiler.internalError(node, message);
-  }
-
   void addDeferredAction(Element element, DeferredAction action) {
     compiler.enqueuer.resolution.addDeferredAction(element, action);
   }
@@ -86,7 +75,7 @@
       if (element.name == 'yield' ||
           element.name == 'async' ||
           element.name == 'await') {
-        compiler.reportError(
+        compiler.reportErrorMessage(
             node, MessageKind.ASYNC_KEYWORD_AS_IDENTIFIER,
             {'keyword': element.name,
              'modifier': currentAsyncMarker});
@@ -106,9 +95,16 @@
   void reportDuplicateDefinition(String name,
                                  Spannable definition,
                                  Spannable existing) {
-    compiler.reportError(definition,
-        MessageKind.DUPLICATE_DEFINITION, {'name': name});
-    compiler.reportInfo(existing,
-        MessageKind.EXISTING_DEFINITION, {'name': name});
+    compiler.reportError(
+        compiler.createMessage(
+            definition,
+            MessageKind.DUPLICATE_DEFINITION,
+            {'name': name}),
+        <DiagnosticMessage>[
+            compiler.createMessage(
+                existing,
+                MessageKind.EXISTING_DEFINITION,
+                {'name': name}),
+        ]);
   }
 }
diff --git a/pkg/compiler/lib/src/resolution/signatures.dart b/pkg/compiler/lib/src/resolution/signatures.dart
index 2a6aa6d..858f9b5 100644
--- a/pkg/compiler/lib/src/resolution/signatures.dart
+++ b/pkg/compiler/lib/src/resolution/signatures.dart
@@ -66,7 +66,7 @@
     // This must be a list of optional arguments.
     String value = node.beginToken.stringValue;
     if ((!identical(value, '[')) && (!identical(value, '{'))) {
-      internalError(node, "expected optional parameters");
+      compiler.internalError(node, "expected optional parameters");
     }
     optionalParametersAreNamed = (identical(value, '{'));
     isOptionalParameter = true;
@@ -78,26 +78,26 @@
   FormalElementX visitVariableDefinitions(VariableDefinitions node) {
     Link<Node> definitions = node.definitions.nodes;
     if (definitions.isEmpty) {
-      internalError(node, 'no parameter definition');
+      compiler.internalError(node, 'no parameter definition');
       return null;
     }
     if (!definitions.tail.isEmpty) {
-      internalError(definitions.tail.head, 'extra definition');
+      compiler.internalError(definitions.tail.head, 'extra definition');
       return null;
     }
     Node definition = definitions.head;
     if (definition is NodeList) {
-      internalError(node, 'optional parameters are not implemented');
+      compiler.internalError(node, 'optional parameters are not implemented');
     }
     if (node.modifiers.isConst) {
-      compiler.reportError(node, MessageKind.FORMAL_DECLARED_CONST);
+      compiler.reportErrorMessage(node, MessageKind.FORMAL_DECLARED_CONST);
     }
     if (node.modifiers.isStatic) {
-      compiler.reportError(node, MessageKind.FORMAL_DECLARED_STATIC);
+      compiler.reportErrorMessage(node, MessageKind.FORMAL_DECLARED_STATIC);
     }
 
     if (currentDefinitions != null) {
-      internalError(node, 'function type parameters not supported');
+      compiler.internalError(node, 'function type parameters not supported');
     }
     currentDefinitions = node;
     FormalElementX element = definition.accept(this);
@@ -113,7 +113,7 @@
     if (isOptionalParameter &&
         optionalParametersAreNamed &&
         Name.isPrivateName(node.source)) {
-      compiler.reportError(node, MessageKind.PRIVATE_NAMED_PARAMETER);
+      compiler.reportErrorMessage(node, MessageKind.PRIVATE_NAMED_PARAMETER);
     }
   }
 
@@ -172,7 +172,7 @@
           functionExpression.name.asIdentifier() != null) {
         return functionExpression.name.asIdentifier();
       } else {
-        internalError(node,
+        compiler.internalError(node,
             'internal error: unimplemented receiver on parameter send');
         return null;
       }
@@ -205,12 +205,13 @@
     InitializingFormalElementX element;
     Identifier receiver = node.receiver.asIdentifier();
     if (receiver == null || !receiver.isThis()) {
-      error(node, MessageKind.INVALID_PARAMETER);
+      compiler.reportErrorMessage(node, MessageKind.INVALID_PARAMETER);
       return new ErroneousInitializingFormalElementX(
           getParameterName(node), enclosingElement);
     } else {
       if (!enclosingElement.isGenerativeConstructor) {
-        error(node, MessageKind.INITIALIZING_FORMAL_NOT_ALLOWED);
+        compiler.reportErrorMessage(
+            node, MessageKind.INITIALIZING_FORMAL_NOT_ALLOWED);
         return new ErroneousInitializingFormalElementX(
             getParameterName(node), enclosingElement);
       }
@@ -220,11 +221,13 @@
           enclosingElement.enclosingClass.lookupLocalMember(name.source);
       if (fieldElement == null ||
           !identical(fieldElement.kind, ElementKind.FIELD)) {
-        error(node, MessageKind.NOT_A_FIELD, {'fieldName': name});
+        compiler.reportErrorMessage(
+            node, MessageKind.NOT_A_FIELD, {'fieldName': name});
         fieldElement = new ErroneousFieldElementX(
             name, enclosingElement.enclosingClass);
       } else if (!fieldElement.isInstanceMember) {
-        error(node, MessageKind.NOT_INSTANCE_FIELD, {'fieldName': name});
+        compiler.reportErrorMessage(
+            node, MessageKind.NOT_INSTANCE_FIELD, {'fieldName': name});
         fieldElement = new ErroneousFieldElementX(
             name, enclosingElement.enclosingClass);
       }
@@ -247,7 +250,7 @@
     }
     Node defaultValue = node.arguments.head;
     if (!defaultValuesAllowed) {
-      compiler.reportError(defaultValue, defaultValuesError);
+      compiler.reportErrorMessage(defaultValue, defaultValuesError);
     }
     return element;
   }
@@ -256,11 +259,13 @@
     // This is a function typed parameter.
     Modifiers modifiers = currentDefinitions.modifiers;
     if (modifiers.isFinal) {
-      compiler.reportError(modifiers,
+      compiler.reportErrorMessage(
+          modifiers,
           MessageKind.FINAL_FUNCTION_TYPE_PARAMETER);
     }
     if (modifiers.isVar) {
-      compiler.reportError(modifiers, MessageKind.VAR_FUNCTION_TYPE_PARAMETER);
+      compiler.reportErrorMessage(
+          modifiers, MessageKind.VAR_FUNCTION_TYPE_PARAMETER);
     }
 
     return createParameter(node.name, null);
@@ -276,7 +281,7 @@
         // If parameter is null, the current node should be the last,
         // and a list of optional named parameters.
         if (!link.tail.isEmpty || (link.head is !NodeList)) {
-          internalError(link.head, "expected optional parameters");
+          compiler.internalError(link.head, "expected optional parameters");
         }
       }
     }
@@ -315,7 +320,7 @@
           // parse. So we suppress the message about missing formals.
           assert(invariant(element, compiler.compilationFailed));
         } else {
-          compiler.reportError(element, MessageKind.MISSING_FORMALS);
+          compiler.reportErrorMessage(element, MessageKind.MISSING_FORMALS);
         }
       }
     } else {
@@ -323,8 +328,9 @@
         if (!identical(formalParameters.endToken.next.stringValue,
                        // TODO(ahe): Remove the check for native keyword.
                        'native')) {
-          compiler.reportError(formalParameters,
-                               MessageKind.EXTRA_FORMALS);
+          compiler.reportErrorMessage(
+              formalParameters,
+              MessageKind.EXTRA_FORMALS);
         }
       }
       LinkBuilder<Element> parametersBuilder =
@@ -368,8 +374,9 @@
                                visitor.optionalParameterCount != 0)) {
       // If there are no formal parameters, we already reported an error above.
       if (formalParameters != null) {
-        compiler.reportError(formalParameters,
-                                 MessageKind.ILLEGAL_SETTER_FORMALS);
+        compiler.reportErrorMessage(
+            formalParameters,
+            MessageKind.ILLEGAL_SETTER_FORMALS);
       }
     }
     LinkBuilder<DartType> parameterTypes = new LinkBuilder<DartType>();
@@ -426,7 +433,7 @@
   DartType resolveTypeAnnotation(TypeAnnotation annotation) {
     DartType type = resolveReturnType(annotation);
     if (type.isVoid) {
-      compiler.reportError(annotation, MessageKind.VOID_NOT_ALLOWED);
+      compiler.reportErrorMessage(annotation, MessageKind.VOID_NOT_ALLOWED);
     }
     return type;
   }
diff --git a/pkg/compiler/lib/src/resolution/type_resolver.dart b/pkg/compiler/lib/src/resolution/type_resolver.dart
index 4e9fa48..a4335c8 100644
--- a/pkg/compiler/lib/src/resolution/type_resolver.dart
+++ b/pkg/compiler/lib/src/resolution/type_resolver.dart
@@ -8,6 +8,9 @@
 import '../dart_backend/dart_backend.dart' show
     DartBackend;
 import '../dart_types.dart';
+import '../diagnostics/diagnostic_listener.dart' show
+    DiagnosticListener,
+    DiagnosticMessage;
 import '../diagnostics/messages.dart' show
     MessageKind;
 import '../elements/elements.dart' show
@@ -39,6 +42,8 @@
 
   TypeResolver(this.compiler);
 
+  DiagnosticListener get listener => compiler;
+
   /// Tries to resolve the type name as an element.
   Element resolveTypeName(Identifier prefixName,
                           Identifier typeName,
@@ -119,15 +124,21 @@
     Element element = resolveTypeName(prefixName, typeName, visitor.scope,
                                       deferredIsMalformed: deferredIsMalformed);
 
-    DartType reportFailureAndCreateType(MessageKind messageKind,
-                                        Map messageArguments,
-                                        {DartType userProvidedBadType,
-                                         Element erroneousElement}) {
+    DartType reportFailureAndCreateType(
+        MessageKind messageKind,
+        Map messageArguments,
+        {DartType userProvidedBadType,
+         Element erroneousElement,
+         List<DiagnosticMessage> infos: const <DiagnosticMessage>[]}) {
       if (malformedIsError) {
-        visitor.error(node, messageKind, messageArguments);
+        listener.reportError(
+            listener.createMessage(node, messageKind, messageArguments),
+            infos);
       } else {
         registry.registerThrowRuntimeError();
-        visitor.warning(node, messageKind, messageArguments);
+        listener.reportWarning(
+            listener.createMessage(node, messageKind, messageArguments),
+            infos);
       }
       if (erroneousElement == null) {
         registry.registerThrowRuntimeError();
@@ -148,8 +159,11 @@
     } else if (element.isAmbiguous) {
       AmbiguousElement ambiguous = element;
       type = reportFailureAndCreateType(
-          ambiguous.messageKind, ambiguous.messageArguments);
-      ambiguous.diagnose(registry.mapping.analyzedElement, compiler);
+          ambiguous.messageKind,
+          ambiguous.messageArguments,
+          infos: ambiguous.computeInfos(
+              registry.mapping.analyzedElement, compiler));
+      ;
     } else if (element.isErroneous) {
       if (element is ErroneousElement) {
         type = reportFailureAndCreateType(
@@ -241,7 +255,8 @@
                                    TypeVariableType typeVariable,
                                    DartType bound) {
       if (!compiler.types.isSubtype(typeArgument, bound)) {
-        compiler.reportWarning(node,
+        compiler.reportWarningMessage(
+            node,
             MessageKind.INVALID_TYPE_VARIABLE_BOUND,
             {'typeVariable': typeVariable,
              'bound': bound,
@@ -273,7 +288,7 @@
          !typeArguments.isEmpty;
          typeArguments = typeArguments.tail, index++) {
       if (index > expectedVariables - 1) {
-        visitor.warning(
+        compiler.reportWarningMessage(
             typeArguments.head, MessageKind.ADDITIONAL_TYPE_ARGUMENT);
         typeArgumentCountMismatch = true;
       }
@@ -282,8 +297,8 @@
       arguments.add(argType);
     }
     if (index < expectedVariables) {
-      visitor.warning(node.typeArguments,
-                      MessageKind.MISSING_TYPE_ARGUMENT);
+      compiler.reportWarningMessage(
+          node.typeArguments, MessageKind.MISSING_TYPE_ARGUMENT);
       typeArgumentCountMismatch = true;
     }
     return typeArgumentCountMismatch;
diff --git a/pkg/compiler/lib/src/resolution/typedefs.dart b/pkg/compiler/lib/src/resolution/typedefs.dart
index f0939cb..b86593c 100644
--- a/pkg/compiler/lib/src/resolution/typedefs.dart
+++ b/pkg/compiler/lib/src/resolution/typedefs.dart
@@ -89,12 +89,14 @@
         hasCyclicReference = true;
         if (seenTypedefsCount == 1) {
           // Direct cyclicity.
-          compiler.reportError(element,
+          compiler.reportErrorMessage(
+              element,
               MessageKind.CYCLIC_TYPEDEF,
               {'typedefName': element.name});
         } else if (seenTypedefsCount == 2) {
           // Cyclicity through one other typedef.
-          compiler.reportError(element,
+          compiler.reportErrorMessage(
+              element,
               MessageKind.CYCLIC_TYPEDEF_ONE,
               {'typedefName': element.name,
                'otherTypedefName': seenTypedefs.head.name});
@@ -102,7 +104,8 @@
           // Cyclicity through more than one other typedef.
           for (TypedefElement cycle in seenTypedefs) {
             if (!identical(typedefElement, cycle)) {
-              compiler.reportError(element,
+              compiler.reportErrorMessage(
+                  element,
                   MessageKind.CYCLIC_TYPEDEF_ONE,
                   {'typedefName': element.name,
                    'otherTypedefName': cycle.name});
diff --git a/pkg/compiler/lib/src/resolution/variables.dart b/pkg/compiler/lib/src/resolution/variables.dart
index 04bb178..5fe7193 100644
--- a/pkg/compiler/lib/src/resolution/variables.dart
+++ b/pkg/compiler/lib/src/resolution/variables.dart
@@ -46,7 +46,7 @@
         new VariableDefinitionScope(resolver.scope, name);
     resolver.visitIn(node.arguments.head, scope);
     if (scope.variableReferencedInInitializer) {
-      compiler.reportError(
+      compiler.reportErrorMessage(
           identifier, MessageKind.REFERENCE_IN_INITIALIZATION,
           {'variableName': name});
     }
@@ -57,11 +57,13 @@
     // The variable is initialized to null.
     registry.registerInstantiatedClass(compiler.nullClass);
     if (definitions.modifiers.isConst) {
-      compiler.reportError(node, MessageKind.CONST_WITHOUT_INITIALIZER);
+      compiler.reportErrorMessage(
+          node, MessageKind.CONST_WITHOUT_INITIALIZER);
     }
     if (definitions.modifiers.isFinal &&
         !resolver.allowFinalWithoutInitializer) {
-      compiler.reportError(node, MessageKind.FINAL_WITHOUT_INITIALIZER);
+      compiler.reportErrorMessage(
+          node, MessageKind.FINAL_WITHOUT_INITIALIZER);
     }
     return node;
   }
diff --git a/pkg/compiler/lib/src/serialization/modelz.dart b/pkg/compiler/lib/src/serialization/modelz.dart
index f246736..83b8f5b 100644
--- a/pkg/compiler/lib/src/serialization/modelz.dart
+++ b/pkg/compiler/lib/src/serialization/modelz.dart
@@ -86,11 +86,6 @@
   ClassElement get contextClass => _unsupported('contextClass');
 
   @override
-  void diagnose(Element context, DiagnosticListener listener) {
-    _unsupported('diagnose');
-  }
-
-  @override
   ClassElement get enclosingClass => null;
 
   @override
diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart
index a853635..0273c96 100644
--- a/pkg/compiler/lib/src/ssa/builder.dart
+++ b/pkg/compiler/lib/src/ssa/builder.dart
@@ -4085,7 +4085,7 @@
     addGenericSendArgumentsToList(link.tail.tail, inputs);
 
     if (nativeBehavior.codeTemplate.positionalArgumentCount != inputs.length) {
-      compiler.reportError(
+      compiler.reportErrorMessage(
           node, MessageKind.GENERIC,
           {'text':
             'Mismatch between number of placeholders'
@@ -4155,7 +4155,7 @@
      ast.Node argument;
      switch (arguments.length) {
      case 0:
-       compiler.reportError(
+       compiler.reportErrorMessage(
            node, MessageKind.GENERIC,
            {'text': 'Error: Expected one argument to JS_GET_FLAG.'});
        return;
@@ -4164,7 +4164,7 @@
        break;
      default:
        for (int i = 1; i < arguments.length; i++) {
-         compiler.reportError(
+         compiler.reportErrorMessage(
              arguments[i], MessageKind.GENERIC,
              {'text': 'Error: Extra argument to JS_GET_FLAG.'});
        }
@@ -4172,7 +4172,7 @@
      }
      ast.LiteralString string = argument.asLiteralString();
      if (string == null) {
-       compiler.reportError(
+       compiler.reportErrorMessage(
            argument, MessageKind.GENERIC,
            {'text': 'Error: Expected a literal string.'});
      }
@@ -4186,7 +4186,7 @@
          value = compiler.useContentSecurityPolicy;
          break;
        default:
-         compiler.reportError(
+         compiler.reportErrorMessage(
              node, MessageKind.GENERIC,
              {'text': 'Error: Unknown internal flag "$name".'});
      }
@@ -4198,7 +4198,7 @@
     ast.Node argument;
     switch (arguments.length) {
     case 0:
-      compiler.reportError(
+      compiler.reportErrorMessage(
           node, MessageKind.GENERIC,
           {'text': 'Error: Expected one argument to JS_GET_NAME.'});
       return;
@@ -4207,8 +4207,8 @@
       break;
     default:
       for (int i = 1; i < arguments.length; i++) {
-        compiler.reportError(
-           arguments[i], MessageKind.GENERIC,
+        compiler.reportErrorMessage(
+            arguments[i], MessageKind.GENERIC,
             {'text': 'Error: Extra argument to JS_GET_NAME.'});
       }
       return;
@@ -4217,7 +4217,7 @@
     if (element == null ||
         element is! FieldElement ||
         element.enclosingClass != backend.jsGetNameEnum) {
-      compiler.reportError(
+      compiler.reportErrorMessage(
           argument, MessageKind.GENERIC,
           {'text': 'Error: Expected a JsGetName enum value.'});
     }
@@ -4233,7 +4233,7 @@
     List<ast.Node> arguments = node.arguments.toList();
     ast.Node argument;
     if (arguments.length < 2) {
-      compiler.reportError(
+      compiler.reportErrorMessage(
           node, MessageKind.GENERIC,
           {'text': 'Error: Expected at least two arguments to JS_BUILTIN.'});
     }
@@ -4242,7 +4242,7 @@
     if (builtinElement == null ||
         (builtinElement is! FieldElement) ||
         builtinElement.enclosingClass != backend.jsBuiltinEnum) {
-      compiler.reportError(
+      compiler.reportErrorMessage(
           argument, MessageKind.GENERIC,
           {'text': 'Error: Expected a JsBuiltin enum value.'});
     }
@@ -4276,7 +4276,7 @@
     switch (arguments.length) {
     case 0:
     case 1:
-      compiler.reportError(
+      compiler.reportErrorMessage(
           node, MessageKind.GENERIC,
           {'text': 'Error: Expected two arguments to JS_EMBEDDED_GLOBAL.'});
       return;
@@ -4287,7 +4287,7 @@
       break;
     default:
       for (int i = 2; i < arguments.length; i++) {
-        compiler.reportError(
+        compiler.reportErrorMessage(
             arguments[i], MessageKind.GENERIC,
             {'text': 'Error: Extra argument to JS_EMBEDDED_GLOBAL.'});
       }
@@ -4296,7 +4296,7 @@
     visit(globalNameNode);
     HInstruction globalNameHNode = pop();
     if (!globalNameHNode.isConstantString()) {
-      compiler.reportError(
+      compiler.reportErrorMessage(
           arguments[1], MessageKind.GENERIC,
           {'text': 'Error: Expected String as second argument '
                    'to JS_EMBEDDED_GLOBAL.'});
@@ -4333,7 +4333,8 @@
         }
       }
     }
-    compiler.reportError(node,
+    compiler.reportErrorMessage(
+        node,
         MessageKind.WRONG_ARGUMENT_FOR_JS_INTERCEPTOR_CONSTANT);
     stack.add(graph.addConstantNull(compiler));
   }
@@ -6890,8 +6891,10 @@
   visitNodeList(ast.NodeList node) {
     for (Link<ast.Node> link = node.nodes; !link.isEmpty; link = link.tail) {
       if (isAborted()) {
-        compiler.reportWarning(link.head,
-            MessageKind.GENERIC, {'text': 'dead code'});
+        compiler.reportHintMessage(
+            link.head,
+            MessageKind.GENERIC,
+            {'text': 'dead code'});
       } else {
         visit(link.head);
       }
diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
index 3e25aa9..4ac5881 100644
--- a/pkg/compiler/lib/src/ssa/codegen.dart
+++ b/pkg/compiler/lib/src/ssa/codegen.dart
@@ -154,6 +154,9 @@
   Compiler get compiler => backend.compiler;
   NativeEmitter get nativeEmitter => backend.emitter.nativeEmitter;
   CodegenRegistry get registry => work.registry;
+  native.NativeEnqueuer get nativeEnqueuer {
+    return compiler.enqueuer.codegen.nativeEnqueuer;
+  }
 
   bool isGenerateAtUseSite(HInstruction instruction) {
     return generateAtUseSite.contains(instruction);
@@ -1598,8 +1601,18 @@
       // type because our optimizations might end up in a state where the
       // invoke dynamic knows more than the receiver.
       ClassElement enclosing = node.element.enclosingClass;
-      return
-          new TypeMask.nonNullExact(enclosing.declaration, compiler.world);
+      if (compiler.world.isInstantiated(enclosing)) {
+        return new TypeMask.nonNullExact(
+            enclosing.declaration, compiler.world);
+      } else {
+        // The element is mixed in so a non-null subtype mask is the most
+        // precise we have.
+        assert(invariant(node, compiler.world.isUsedAsMixin(enclosing),
+            message: "Element ${node.element} from $enclosing expected "
+                     "to be mixed in."));
+        return new TypeMask.nonNullSubtype(
+            enclosing.declaration, compiler.world);
+      }
     }
     // If [JSInvocationMirror._invokeOn] is enabled, and this call
     // might hit a `noSuchMethod`, we register an untyped selector.
@@ -1832,11 +1845,7 @@
   void registerForeignTypes(HForeign node) {
     native.NativeBehavior nativeBehavior = node.nativeBehavior;
     if (nativeBehavior == null) return;
-    nativeBehavior.typesReturned.forEach((type) {
-      if (type is InterfaceType) {
-        registry.registerInstantiatedType(type);
-      }
-    });
+    nativeEnqueuer.registerNativeBehavior(nativeBehavior, node);
   }
 
   visitForeignCode(HForeignCode node) {
diff --git a/pkg/compiler/lib/src/ssa/nodes.dart b/pkg/compiler/lib/src/ssa/nodes.dart
index 8943e70..4fa2735 100644
--- a/pkg/compiler/lib/src/ssa/nodes.dart
+++ b/pkg/compiler/lib/src/ssa/nodes.dart
@@ -876,6 +876,8 @@
 
   bool isExact() => instructionType.isExact || isNull();
 
+  bool isValue() => instructionType.isValue;
+
   bool canBeNull() => instructionType.isNullable;
 
   bool isNull() => instructionType.isEmpty && instructionType.isNullable;
@@ -905,7 +907,7 @@
       TypeMask typeMask,
       ClassElement cls,
       ClassWorld classWorld) {
-    return classWorld.isInstantiated(cls) &&
+    return classWorld.isImplemented(cls) &&
         typeMask.satisfies(cls, classWorld);
   }
 
diff --git a/pkg/compiler/lib/src/ssa/optimize.dart b/pkg/compiler/lib/src/ssa/optimize.dart
index cb03183..07611f6 100644
--- a/pkg/compiler/lib/src/ssa/optimize.dart
+++ b/pkg/compiler/lib/src/ssa/optimize.dart
@@ -20,7 +20,7 @@
 
   void optimize(CodegenWorkItem work, HGraph graph) {
     void runPhase(OptimizationPhase phase) {
-      phase.visitGraph(graph);
+      measureSubtask(phase.name, () => phase.visitGraph(graph));
       compiler.tracer.traceGraph(phase.name, graph);
       assert(graph.isValid());
     }
@@ -1306,6 +1306,13 @@
       } else {
         markBlockLive(instruction.elseBlock);
       }
+    } else if (condition.isValue()) {
+      ValueTypeMask valueType = condition.instructionType;
+      if (valueType.value == true) {
+        markBlockLive(instruction.thenBlock);
+      } else {
+        markBlockLive(instruction.elseBlock);
+      }
     } else {
       visitControlFlow(instruction);
     }
diff --git a/pkg/compiler/lib/src/string_validator.dart b/pkg/compiler/lib/src/string_validator.dart
index 7171368..f953ec0 100644
--- a/pkg/compiler/lib/src/string_validator.dart
+++ b/pkg/compiler/lib/src/string_validator.dart
@@ -102,7 +102,7 @@
   }
 
   void stringParseError(String message, Token token, int offset) {
-    listener.reportError(
+    listener.reportErrorMessage(
         token, MessageKind.GENERIC, {'text': "$message @ $offset"});
   }
 
diff --git a/pkg/compiler/lib/src/tree_ir/optimization/logical_rewriter.dart b/pkg/compiler/lib/src/tree_ir/optimization/logical_rewriter.dart
index e4483f2..bc49dc7 100644
--- a/pkg/compiler/lib/src/tree_ir/optimization/logical_rewriter.dart
+++ b/pkg/compiler/lib/src/tree_ir/optimization/logical_rewriter.dart
@@ -95,7 +95,8 @@
 
   bool isTerminator(Statement node) {
     return (node is Jump || node is Return) && !isFallthrough(node) ||
-           (node is ExpressionStatement && node.next is Unreachable);
+           (node is ExpressionStatement && node.next is Unreachable) ||
+           node is Throw;
   }
 
   Statement visitIf(If node) {
diff --git a/pkg/compiler/lib/src/typechecker.dart b/pkg/compiler/lib/src/typechecker.dart
index 323c19d..ec44ea0 100644
--- a/pkg/compiler/lib/src/typechecker.dart
+++ b/pkg/compiler/lib/src/typechecker.dart
@@ -14,6 +14,8 @@
 import 'constants/values.dart';
 import 'core_types.dart';
 import 'dart_types.dart';
+import 'diagnostics/diagnostic_listener.dart' show
+    DiagnosticMessage;
 import 'diagnostics/invariant.dart' show
     invariant;
 import 'diagnostics/messages.dart';
@@ -269,14 +271,9 @@
     return new TypePromotion(node, variable, type)..messages.addAll(messages);
   }
 
-  void addHint(Spannable spannable, MessageKind kind, [Map arguments]) {
-    messages.add(new TypePromotionMessage(api.Diagnostic.HINT,
-        spannable, kind, arguments));
-  }
-
-  void addInfo(Spannable spannable, MessageKind kind, [Map arguments]) {
-    messages.add(new TypePromotionMessage(api.Diagnostic.INFO,
-        spannable, kind, arguments));
+  void addHint(DiagnosticMessage hint,
+               [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
+    messages.add(new TypePromotionMessage(hint, infos));
   }
 
   String toString() {
@@ -286,13 +283,10 @@
 
 /// A hint or info message attached to a type promotion.
 class TypePromotionMessage {
-  api.Diagnostic diagnostic;
-  Spannable spannable;
-  MessageKind messageKind;
-  Map messageArguments;
+  DiagnosticMessage hint;
+  List<DiagnosticMessage> infos;
 
-  TypePromotionMessage(this.diagnostic, this.spannable, this.messageKind,
-                       [this.messageArguments]);
+  TypePromotionMessage(this.hint, this.infos);
 }
 
 class TypeCheckerVisitor extends Visitor<DartType> {
@@ -400,40 +394,24 @@
 
   reportTypeWarning(Spannable spannable, MessageKind kind,
                     [Map arguments = const {}]) {
-    compiler.reportWarning(spannable, kind, arguments);
+    compiler.reportWarningMessage(spannable, kind, arguments);
   }
 
   reportMessage(Spannable spannable, MessageKind kind,
                 Map arguments,
                 {bool isHint: false}) {
     if (isHint) {
-      compiler.reportHint(spannable, kind, arguments);
+      compiler.reportHintMessage(spannable, kind, arguments);
     } else {
-      compiler.reportWarning(spannable, kind, arguments);
+      compiler.reportWarningMessage(spannable, kind, arguments);
     }
   }
 
-  reportTypeInfo(Spannable spannable, MessageKind kind,
-                 [Map arguments = const {}]) {
-    compiler.reportInfo(spannable, kind, arguments);
-  }
-
   reportTypePromotionHint(TypePromotion typePromotion) {
     if (!reportedTypePromotions.contains(typePromotion)) {
       reportedTypePromotions.add(typePromotion);
       for (TypePromotionMessage message in typePromotion.messages) {
-        switch (message.diagnostic) {
-          case api.Diagnostic.HINT:
-            compiler.reportHint(message.spannable,
-                                message.messageKind,
-                                message.messageArguments);
-            break;
-          case api.Diagnostic.INFO:
-            compiler.reportInfo(message.spannable,
-                                message.messageKind,
-                                message.messageArguments);
-            break;
-        }
+        compiler.reportHint(message.hint, message.infos);
       }
     }
   }
@@ -483,44 +461,56 @@
     List<Node> potentialMutationsIn =
         elements.getPotentialMutationsIn(node, variable);
     if (!potentialMutationsIn.isEmpty) {
-      typePromotion.addHint(typePromotion.node,
+      DiagnosticMessage hint = compiler.createMessage(
+          typePromotion.node,
           MessageKind.POTENTIAL_MUTATION,
           {'variableName': variableName, 'shownType': typePromotion.type});
+      List<DiagnosticMessage> infos = <DiagnosticMessage>[];
       for (Node mutation in potentialMutationsIn) {
-        typePromotion.addInfo(mutation,
+        infos.add(compiler.createMessage(mutation,
             MessageKind.POTENTIAL_MUTATION_HERE,
-            {'variableName': variableName});
+            {'variableName': variableName}));
       }
+      typePromotion.addHint(hint, infos);
     }
     List<Node> potentialMutationsInClosures =
         elements.getPotentialMutationsInClosure(variable);
     if (!potentialMutationsInClosures.isEmpty) {
-      typePromotion.addHint(typePromotion.node,
+      DiagnosticMessage hint = compiler.createMessage(
+          typePromotion.node,
           MessageKind.POTENTIAL_MUTATION_IN_CLOSURE,
           {'variableName': variableName, 'shownType': typePromotion.type});
+      List<DiagnosticMessage> infos = <DiagnosticMessage>[];
       for (Node mutation in potentialMutationsInClosures) {
-        typePromotion.addInfo(mutation,
+        infos.add(compiler.createMessage(
+            mutation,
             MessageKind.POTENTIAL_MUTATION_IN_CLOSURE_HERE,
-            {'variableName': variableName});
+            {'variableName': variableName}));
       }
+      typePromotion.addHint(hint, infos);
     }
     if (checkAccesses) {
       List<Node> accesses = elements.getAccessesByClosureIn(node, variable);
       List<Node> mutations = elements.getPotentialMutations(variable);
       if (!accesses.isEmpty && !mutations.isEmpty) {
-        typePromotion.addHint(typePromotion.node,
+        DiagnosticMessage hint = compiler.createMessage(
+            typePromotion.node,
             MessageKind.ACCESSED_IN_CLOSURE,
             {'variableName': variableName, 'shownType': typePromotion.type});
+        List<DiagnosticMessage> infos = <DiagnosticMessage>[];
         for (Node access in accesses) {
-          typePromotion.addInfo(access,
+          infos.add(compiler.createMessage(
+              access,
               MessageKind.ACCESSED_IN_CLOSURE_HERE,
-              {'variableName': variableName});
+              {'variableName': variableName}));
         }
         for (Node mutation in mutations) {
-          typePromotion.addInfo(mutation,
+          infos.add(compiler.createMessage(
+              mutation,
               MessageKind.POTENTIAL_MUTATION_HERE,
-              {'variableName': variableName});
+              {'variableName': variableName}));
         }
+        typePromotion.addHint(hint, infos);
       }
     }
   }
@@ -570,11 +560,15 @@
                        {bool isConst: false}) {
     if (!types.isAssignable(from, to)) {
       if (compiler.enableTypeAssertions && isConst) {
-        compiler.reportError(spannable, MessageKind.NOT_ASSIGNABLE,
-                             {'fromType': from, 'toType': to});
+        compiler.reportErrorMessage(
+            spannable,
+            MessageKind.NOT_ASSIGNABLE,
+            {'fromType': from, 'toType': to});
       } else {
-        reportTypeWarning(spannable, MessageKind.NOT_ASSIGNABLE,
-                          {'fromType': from, 'toType': to});
+        compiler.reportWarningMessage(
+            spannable,
+            MessageKind.NOT_ASSIGNABLE,
+            {'fromType': from, 'toType': to});
       }
       return false;
     }
@@ -892,7 +886,43 @@
     Link<Node> arguments = send.arguments;
     DartType unaliasedType = type.unalias(compiler);
     if (identical(unaliasedType.kind, TypeKind.FUNCTION)) {
-      bool error = false;
+
+      /// Report [warning] including info(s) about the declaration of [element]
+      /// or [type].
+      void reportWarning(DiagnosticMessage warning) {
+        // TODO(johnniwinther): Support pointing to individual parameters on
+        // assignability warnings.
+        List<DiagnosticMessage> infos = <DiagnosticMessage>[];
+        Element declaration = element;
+        if (declaration == null) {
+          declaration = type.element;
+        } else if (type.isTypedef) {
+          infos.add(compiler.createMessage(
+              declaration,
+              MessageKind.THIS_IS_THE_DECLARATION,
+              {'name': element.name}));
+          declaration = type.element;
+        }
+        if (declaration != null) {
+          infos.add(compiler.createMessage(
+              declaration, MessageKind.THIS_IS_THE_METHOD));
+        }
+        compiler.reportWarning(warning, infos);
+      }
+
+      /// Report a warning on [node] if [argumentType] is not assignable to
+      /// [parameterType].
+      void checkAssignable(Spannable node,
+                           DartType argumentType,
+                           DartType parameterType) {
+        if (!types.isAssignable(argumentType, parameterType)) {
+          reportWarning(compiler.createMessage(
+              node,
+              MessageKind.NOT_ASSIGNABLE,
+              {'fromType': argumentType, 'toType': parameterType}));
+        }
+      }
+
       FunctionType funType = unaliasedType;
       Iterator<DartType> parameterTypes = funType.parameterTypes.iterator;
       Iterator<DartType> optionalParameterTypes =
@@ -906,73 +936,51 @@
           DartType namedParameterType =
               funType.getNamedParameterType(argumentName);
           if (namedParameterType == null) {
-            error = true;
             // TODO(johnniwinther): Provide better information on the called
             // function.
-            reportTypeWarning(argument, MessageKind.NAMED_ARGUMENT_NOT_FOUND,
-                {'argumentName': argumentName});
+            reportWarning(compiler.createMessage(
+                argument,
+                MessageKind.NAMED_ARGUMENT_NOT_FOUND,
+                {'argumentName': argumentName}));
 
             DartType argumentType = analyze(argument);
             if (argumentTypes != null) argumentTypes.addLast(argumentType);
           } else {
             DartType argumentType = analyze(argument);
             if (argumentTypes != null) argumentTypes.addLast(argumentType);
-            if (!checkAssignable(argument, argumentType, namedParameterType)) {
-              error = true;
-            }
+            checkAssignable(argument, argumentType, namedParameterType);
           }
         } else {
           if (!parameterTypes.moveNext()) {
             if (!optionalParameterTypes.moveNext()) {
-              error = true;
+
               // TODO(johnniwinther): Provide better information on the
               // called function.
-              reportTypeWarning(argument, MessageKind.ADDITIONAL_ARGUMENT);
+              reportWarning(compiler.createMessage(
+                  argument, MessageKind.ADDITIONAL_ARGUMENT));
 
               DartType argumentType = analyze(argument);
               if (argumentTypes != null) argumentTypes.addLast(argumentType);
             } else {
               DartType argumentType = analyze(argument);
               if (argumentTypes != null) argumentTypes.addLast(argumentType);
-              if (!checkAssignable(argument,
-                                   argumentType,
-                                   optionalParameterTypes.current)) {
-                error = true;
-              }
+              checkAssignable(
+                  argument, argumentType, optionalParameterTypes.current);
             }
           } else {
             DartType argumentType = analyze(argument);
             if (argumentTypes != null) argumentTypes.addLast(argumentType);
-            if (!checkAssignable(argument, argumentType,
-                                 parameterTypes.current)) {
-              error = true;
-            }
+            checkAssignable(argument, argumentType, parameterTypes.current);
           }
         }
         arguments = arguments.tail;
       }
       if (parameterTypes.moveNext()) {
-        error = true;
         // TODO(johnniwinther): Provide better information on the called
         // function.
-        reportTypeWarning(send, MessageKind.MISSING_ARGUMENT,
-            {'argumentType': parameterTypes.current});
-      }
-      if (error) {
-        // TODO(johnniwinther): Improve access to declaring element and handle
-        // synthesized member signatures. Currently function typed instance
-        // members provide no access to their own name.
-        if (element == null) {
-          element = type.element;
-        } else if (type.isTypedef) {
-          reportTypeInfo(element,
-              MessageKind.THIS_IS_THE_DECLARATION,
-              {'name': element.name});
-          element = type.element;
-        }
-        if (element != null) {
-          reportTypeInfo(element, MessageKind.THIS_IS_THE_METHOD);
-        }
+        reportWarning(compiler.createMessage(
+            send, MessageKind.MISSING_ARGUMENT,
+            {'argumentType': parameterTypes.current}));
       }
     } else {
       while(!arguments.isEmpty) {
@@ -1213,27 +1221,30 @@
             if (!types.isMoreSpecific(shownType, knownType)) {
               String variableName = variable.name;
               if (!types.isSubtype(shownType, knownType)) {
-                typePromotion.addHint(node,
+                typePromotion.addHint(compiler.createMessage(
+                    node,
                     MessageKind.NOT_MORE_SPECIFIC_SUBTYPE,
                     {'variableName': variableName,
                      'shownType': shownType,
-                     'knownType': knownType});
+                     'knownType': knownType}));
               } else {
                 DartType shownTypeSuggestion =
                     computeMoreSpecificType(shownType, knownType);
                 if (shownTypeSuggestion != null) {
-                  typePromotion.addHint(node,
+                  typePromotion.addHint(compiler.createMessage(
+                      node,
                       MessageKind.NOT_MORE_SPECIFIC_SUGGESTION,
                       {'variableName': variableName,
                        'shownType': shownType,
                        'shownTypeSuggestion': shownTypeSuggestion,
-                       'knownType': knownType});
+                       'knownType': knownType}));
                 } else {
-                  typePromotion.addHint(node,
+                  typePromotion.addHint(compiler.createMessage(
+                      node,
                       MessageKind.NOT_MORE_SPECIFIC,
                       {'variableName': variableName,
                        'shownType': shownType,
-                       'knownType': knownType});
+                       'knownType': knownType}));
                 }
               }
             }
@@ -1655,7 +1666,7 @@
           checkAssignable(expression, expressionType, expectedReturnType);
         }
       }
-    } else if (currentAsyncMarker == AsyncMarker.ASYNC) {
+    } else if (currentAsyncMarker != AsyncMarker.SYNC) {
       // `return;` is allowed.
     } else if (!types.isAssignable(expectedReturnType, const VoidType())) {
       // Let f be the function immediately enclosing a return statement of the
@@ -1925,9 +1936,11 @@
         }
         unreferencedFields.addAll(enumValues.values);
         if (!unreferencedFields.isEmpty) {
-          compiler.reportWarning(node, MessageKind.MISSING_ENUM_CASES,
+          compiler.reportWarningMessage(
+              node, MessageKind.MISSING_ENUM_CASES,
               {'enumType': expressionType,
-               'enumValues': unreferencedFields.map((e) => e.name).join(', ')});
+               'enumValues': unreferencedFields.map(
+                   (e) => e.name).join(', ')});
         }
       });
     }
diff --git a/pkg/compiler/lib/src/types/type_mask.dart b/pkg/compiler/lib/src/types/type_mask.dart
index 7cbecc5..a290aa2 100644
--- a/pkg/compiler/lib/src/types/type_mask.dart
+++ b/pkg/compiler/lib/src/types/type_mask.dart
@@ -88,8 +88,8 @@
 
   factory TypeMask.exact(ClassElement base, ClassWorld classWorld) {
     assert(invariant(base, classWorld.isInstantiated(base),
-        message: "Cannot create exact type mask for uninstantiated class "
-          "${base.name}"));
+        message: () => "Cannot create exact type mask for uninstantiated "
+                       "class $base.\n${classWorld.dump()}"));
     return new FlatTypeMask.exact(base);
   }
 
@@ -121,8 +121,8 @@
 
   factory TypeMask.nonNullExact(ClassElement base, ClassWorld classWorld) {
     assert(invariant(base, classWorld.isInstantiated(base),
-        message: "Cannot create exact type mask for "
-                 "uninstantiated class $base."));
+        message: () => "Cannot create exact type mask for "
+                 "uninstantiated class $base.\n${classWorld.dump()}"));
     return new FlatTypeMask.nonNullExact(base);
   }
 
diff --git a/pkg/compiler/lib/src/types/types.dart b/pkg/compiler/lib/src/types/types.dart
index b99a368..9858a6e 100644
--- a/pkg/compiler/lib/src/types/types.dart
+++ b/pkg/compiler/lib/src/types/types.dart
@@ -266,7 +266,7 @@
     return result;
   }
 
-  /** Returns true if [type1] is strictly bettern than [type2]. */
+  /** Returns true if [type1] is strictly better than [type2]. */
   bool better(TypeMask type1, TypeMask type2) {
     if (type1 == null) return false;
     if (type2 == null) {
diff --git a/pkg/compiler/lib/src/universe/class_set.dart b/pkg/compiler/lib/src/universe/class_set.dart
index d19b2c1..6cafa09 100644
--- a/pkg/compiler/lib/src/universe/class_set.dart
+++ b/pkg/compiler/lib/src/universe/class_set.dart
@@ -101,27 +101,50 @@
         includeUninstantiated: includeUninstantiated);
   }
 
-  void dump(StringBuffer sb, String indentation) {
-    sb.write('$indentation$cls:[');
+  void printOn(StringBuffer sb, String indentation,
+               {bool instantiatedOnly: false}) {
+    sb.write('$indentation$cls');
+    if (isDirectlyInstantiated) {
+      sb.write(' directly');
+    }
+    if (isIndirectlyInstantiated) {
+      sb.write(' indirectly');
+    }
+    sb.write(' [');
     if (_directSubclasses.isEmpty) {
       sb.write(']');
     } else {
-      sb.write('\n');
       bool needsComma = false;
       for (Link<ClassHierarchyNode> link = _directSubclasses;
            !link.isEmpty;
            link = link.tail) {
+        if (instantiatedOnly && !link.head.isInstantiated) {
+          continue;
+        }
         if (needsComma) {
           sb.write(',\n');
+        } else {
+          sb.write('\n');
         }
-        link.head.dump(sb, '$indentation  ');
+        link.head.printOn(
+            sb, '$indentation  ', instantiatedOnly: instantiatedOnly);
         needsComma = true;
       }
-      sb.write('\n');
-      sb.write('$indentation]');
+      if (needsComma) {
+        sb.write('\n');
+        sb.write('$indentation]');
+      } else {
+        sb.write(']');
+      }
     }
   }
 
+  String dump({String indentation: '', bool instantiatedOnly: false}) {
+    StringBuffer sb = new StringBuffer();
+    printOn(sb, indentation, instantiatedOnly: instantiatedOnly);
+    return sb.toString();
+  }
+
   String toString() => cls.toString();
 }
 
@@ -274,11 +297,11 @@
   String toString() {
     StringBuffer sb = new StringBuffer();
     sb.write('[\n');
-    node.dump(sb, '  ');
+    node.printOn(sb, '  ');
     sb.write('\n');
     if (_directSubtypes != null) {
       for (ClassHierarchyNode node in _directSubtypes) {
-        node.dump(sb, '  ');
+        node.printOn(sb, '  ');
         sb.write('\n');
       }
     }
diff --git a/pkg/compiler/lib/src/universe/universe.dart b/pkg/compiler/lib/src/universe/universe.dart
index e7d15be..ccb402b 100644
--- a/pkg/compiler/lib/src/universe/universe.dart
+++ b/pkg/compiler/lib/src/universe/universe.dart
@@ -42,6 +42,14 @@
         (mask == null || mask.canHit(element, selector, world));
   }
 
+  int get hashCode => selector.hashCode * 13 + mask.hashCode * 17;
+
+  bool operator ==(other) {
+    if (identical(this, other)) return true;
+    if (other is! UniverseSelector) return false;
+    return selector == other.selector && mask == other.mask;
+  }
+
   String toString() => '$selector,$mask';
 }
 
@@ -151,6 +159,9 @@
   /// Invariant: Elements are declaration elements.
   final Set<ClassElement> _allInstantiatedClasses = new Set<ClassElement>();
 
+  /// Classes implemented by directly instantiated classes.
+  final Set<ClassElement> _implementedClasses = new Set<ClassElement>();
+
   /// The set of all referenced static fields.
   ///
   /// Invariant: Elements are declaration elements.
@@ -239,12 +250,19 @@
   Iterable<DartType> get instantiatedTypes => _instantiatedTypes;
 
   /// Returns `true` if [cls] is considered to be instantiated, either directly,
-  /// through subclasses or through subtypes. The latter case only contains
-  /// spurious information from instatiations through factory constructors and
-  /// mixins.
+  /// through subclasses.
   // TODO(johnniwinther): Improve semantic precision.
   bool isInstantiated(ClassElement cls) {
-    return _allInstantiatedClasses.contains(cls);
+    return _allInstantiatedClasses.contains(cls.declaration);
+  }
+
+  /// Returns `true` if [cls] is considered to be implemented by an
+  /// instantiated class, either directly, through subclasses or through
+  /// subtypes. The latter case only contains spurious information from
+  /// instantiations through factory constructors and mixins.
+  // TODO(johnniwinther): Improve semantic precision.
+  bool isImplemented(ClassElement cls) {
+    return _implementedClasses.contains(cls.declaration);
   }
 
   /// Register [type] as (directly) instantiated.
@@ -254,7 +272,8 @@
   // subclass and through subtype instantiated types/classes.
   // TODO(johnniwinther): Support unknown type arguments for generic types.
   void registerTypeInstantiation(InterfaceType type,
-                                 {bool byMirrors: false}) {
+                                 {bool byMirrors: false,
+                                  void onImplemented(ClassElement cls)}) {
     _instantiatedTypes.add(type);
     ClassElement cls = type.element;
     if (!cls.isAbstract
@@ -270,11 +289,22 @@
       _directlyInstantiatedClasses.add(cls);
     }
 
-    // TODO(johnniwinther): Replace this by separate more specific mappings.
-    if (!_allInstantiatedClasses.add(cls)) return;
-    cls.allSupertypes.forEach((InterfaceType supertype) {
-      _allInstantiatedClasses.add(supertype.element);
-    });
+    // TODO(johnniwinther): Replace this by separate more specific mappings that
+    // include the type arguments.
+    if (_implementedClasses.add(cls)) {
+      onImplemented(cls);
+      cls.allSupertypes.forEach((InterfaceType supertype) {
+        if (_implementedClasses.add(supertype.element)) {
+          onImplemented(supertype.element);
+        }
+      });
+    }
+    while (cls != null) {
+      if (!_allInstantiatedClasses.add(cls)) {
+        return;
+      }
+      cls = cls.superclass;
+    }
   }
 
   bool _hasMatchingSelector(Map<Selector, SelectorConstraints> selectors,
diff --git a/pkg/compiler/lib/src/world.dart b/pkg/compiler/lib/src/world.dart
index 12bb5dc..502ea8e 100644
--- a/pkg/compiler/lib/src/world.dart
+++ b/pkg/compiler/lib/src/world.dart
@@ -66,6 +66,9 @@
   /// Returns `true` if [cls] is instantiated.
   bool isInstantiated(ClassElement cls);
 
+  /// Returns `true` if [cls] is implemented by an instantiated class.
+  bool isImplemented(ClassElement cls);
+
   /// Returns `true` if the class world is closed.
   bool get isClosed;
 
@@ -123,6 +126,9 @@
   /// Returns `true` if closed-world assumptions can be made, that is,
   /// incremental compilation isn't enabled.
   bool get hasClosedWorldAssumption;
+
+  /// Returns a string representation of the closed world.
+  String dump();
 }
 
 class World implements ClassWorld {
@@ -145,10 +151,11 @@
       invariant(cls, cls.isDeclaration,
                 message: '$cls must be the declaration.') &&
       invariant(cls, cls.isResolved,
-                message: '$cls must be resolved.') &&
+                message: '$cls must be resolved.')/* &&
+      // TODO(johnniwinther): Reinsert this or similar invariant.
       (!mustBeInstantiated ||
        invariant(cls, isInstantiated(cls),
-                 message: '$cls is not instantiated.'));
+                 message: '$cls is not instantiated.'))*/;
  }
 
   /// Returns `true` if [x] is a subtype of [y], that is, if [x] implements an
@@ -178,11 +185,17 @@
     return false;
   }
 
-  /// Returns `true` if [cls] is instantiated.
+  /// Returns `true` if [cls] is instantiated either directly or through a
+  /// subclass.
   bool isInstantiated(ClassElement cls) {
     return compiler.resolverWorld.isInstantiated(cls);
   }
 
+  /// Returns `true` if [cls] is implemented by an instantiated class.
+  bool isImplemented(ClassElement cls) {
+    return compiler.resolverWorld.isImplemented(cls);
+  }
+
   /// Returns an iterable over the directly instantiated classes that extend
   /// [cls] possibly including [cls] itself, if it is live.
   Iterable<ClassElement> subclassesOf(ClassElement cls) {
@@ -308,9 +321,23 @@
     if (_liveMixinUses == null) {
       _liveMixinUses = new Map<ClassElement, List<MixinApplicationElement>>();
       for (ClassElement mixin in _mixinUses.keys) {
-        Iterable<MixinApplicationElement> uses =
-            _mixinUses[mixin].where(isInstantiated);
-        if (uses.isNotEmpty) _liveMixinUses[mixin] = uses.toList();
+        List<MixinApplicationElement> uses = <MixinApplicationElement>[];
+
+        void addLiveUse(MixinApplicationElement mixinApplication) {
+          if (isInstantiated(mixinApplication)) {
+            uses.add(mixinApplication);
+          } else if (mixinApplication.isNamedMixinApplication) {
+            List<MixinApplicationElement> next = _mixinUses[mixinApplication];
+            if (next != null) {
+              next.forEach(addLiveUse);
+            }
+          }
+        }
+
+        _mixinUses[mixin].forEach(addLiveUse);
+        if (uses.isNotEmpty) {
+          _liveMixinUses[mixin] = uses;
+        }
       }
     }
     Iterable<MixinApplicationElement> uses = _liveMixinUses[cls];
@@ -499,6 +526,15 @@
     compiler.resolverWorld.directlyInstantiatedClasses.forEach(addSubtypes);
   }
 
+  @override
+  String dump() {
+    StringBuffer sb = new StringBuffer();
+    sb.write("Instantiated classes in the closed world:\n");
+    getClassHierarchyNode(compiler.objectClass)
+        .printOn(sb, ' ', instantiatedOnly: true);
+    return sb.toString();
+  }
+
   void registerMixinUse(MixinApplicationElement mixinApplication,
                         ClassElement mixin) {
     // TODO(johnniwinther): Add map restricted to live classes.
diff --git a/pkg/expect/lib/expect.dart b/pkg/expect/lib/expect.dart
index e7eb892..616920b 100644
--- a/pkg/expect/lib/expect.dart
+++ b/pkg/expect/lib/expect.dart
@@ -357,7 +357,7 @@
    *     Expect.throws(myThrowingFunction, (e) => e is MyException);
    */
   static void throws(void f(),
-                     [_CheckExceptionFn check = null,
+                     [bool check(exception) = null,
                       String reason = null]) {
     String msg = reason == null ? "" : "($reason)";
     if (f is! _Nullary) {
@@ -388,7 +388,6 @@
 
 bool _identical(a, b) => identical(a, b);
 
-typedef bool _CheckExceptionFn(exception);
 typedef _Nullary();  // Expect.throws argument must be this type.
 
 class ExpectException implements Exception {
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 71af314..bd76884 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -14,9 +14,6 @@
 # Analyzer2dart is not maintained anymore.
 analyzer2dart/test/*: Skip
 
-[ $compiler != dartanalyzer && $compiler != dart2analyzer ]
-docgen/test/inherited_comments_test: Fail # issue 22233
-
 [ $compiler == none && ($runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ]
 mutation_observer: Skip # Issue 21149
 unittest/*: Skip # Issue 21949
@@ -31,7 +28,6 @@
 analysis_server/tool/spec/check_all_test: SkipSlow # Times out
 analyzer/test/generated/element_test: SkipSlow  # Times out
 analyzer/test/generated/parser_test: SkipSlow  # Times out
-docgen/test/*: SkipSlow
 
 [ $runtime == vm && $system == windows]
 analysis_server/test/analysis/get_errors_test: Skip # runtime error, Issue 22180
@@ -43,7 +39,6 @@
 collection/test/equality_test/04: Fail # Issue 1533
 collection/test/equality_test/05: Fail # Issue 1533
 collection/test/equality_test/none: Pass, Fail # Issue 14348
-docgen/test/*: SkipSlow # Far too slow
 typed_data/test/typed_buffers_test/01: Fail # Not supporting Int64List, Uint64List.
 analyzer/test/generated/engine_test: SkipSlow
 analyzer/test/generated/static_type_warning_code_test: Pass, Slow
@@ -149,7 +144,6 @@
 analysis_server/tool/spec/check_all_test: SkipByDesign # Uses dart:io.
 analyzer/test/*: SkipByDesign # Uses dart:io.
 analyzer2dart/*: SkipByDesign # Uses dart:io.
-docgen/test/*: SkipByDesign # Uses dart:io.
 http_server/test/*: Fail, OK # Uses dart:io.
 observe/test/transformer_test: Fail, OK # Uses dart:io.
 observe/test/unique_message_test: SkipByDesign  # Uses dart:io.
diff --git a/pkg/pkgbuild.status b/pkg/pkgbuild.status
index 3cf95f1..2404f3e 100644
--- a/pkg/pkgbuild.status
+++ b/pkg/pkgbuild.status
@@ -4,7 +4,6 @@
 
 samples/third_party/dromaeo: Pass, Slow
 samples/searchable_list: Pass, Slow
-pkg/docgen: Pass, Slow
 
 [ $use_repository_packages ]
 pkg/analyzer: PubGetError
diff --git a/runtime/BUILD.gn b/runtime/BUILD.gn
index e9c339a..cbc0643 100644
--- a/runtime/BUILD.gn
+++ b/runtime/BUILD.gn
@@ -13,6 +13,12 @@
   dart_debug = false
 }
 
+config("dart_public_config") {
+  include_dirs = [
+    ".",
+  ]
+}
+
 config("dart_config") {
   defines = []
   if (dart_debug) {
@@ -66,6 +72,7 @@
   include_dirs = [
     ".",
   ]
+  public_configs = [":dart_public_config"]
   sources = [
     "include/dart_api.h",
     "include/dart_mirrors_api.h",
diff --git a/runtime/bin/dartutils.cc b/runtime/bin/dartutils.cc
index a4fc2e2..83ffcd3 100644
--- a/runtime/bin/dartutils.cc
+++ b/runtime/bin/dartutils.cc
@@ -464,6 +464,10 @@
                                               intptr_t* buffer_len,
                                               bool* is_snapshot) {
   intptr_t len = sizeof(magic_number);
+  if (*buffer_len <= len) {
+    *is_snapshot = false;
+    return text_buffer;
+  }
   for (intptr_t i = 0; i < len; i++) {
     if (text_buffer[i] != magic_number[i]) {
       *is_snapshot = false;
diff --git a/runtime/bin/dbg_message.cc b/runtime/bin/dbg_message.cc
index 0a3038a..d0f13d7 100644
--- a/runtime/bin/dbg_message.cc
+++ b/runtime/bin/dbg_message.cc
@@ -1409,20 +1409,19 @@
     msg_queue->SendIsolateEvent(isolate_id, kind);
     Dart_ExitScope();
   } else {
+    DebuggerConnectionHandler::WaitForConnection();
     DbgMsgQueue* msg_queue = GetIsolateMsgQueue(isolate_id);
-    if (msg_queue != NULL) {
-      DebuggerConnectionHandler::WaitForConnection();
-      Dart_EnterScope();
-      msg_queue->SendQueuedMsgs();
-      msg_queue->SendIsolateEvent(isolate_id, kind);
-      if (kind == kInterrupted) {
-        msg_queue->MessageLoop();
-      } else {
-        ASSERT(kind == kShutdown);
-        RemoveIsolateMsgQueue(isolate_id);
-      }
-      Dart_ExitScope();
+    ASSERT(msg_queue != NULL);
+    Dart_EnterScope();
+    msg_queue->SendQueuedMsgs();
+    msg_queue->SendIsolateEvent(isolate_id, kind);
+    if (kind == kInterrupted) {
+      msg_queue->MessageLoop();
+    } else {
+      ASSERT(kind == kShutdown);
+      RemoveIsolateMsgQueue(isolate_id);
     }
+    Dart_ExitScope();
     // If there is no receive message queue, do not wait for a connection, and
     // ignore the message.
   }
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index 7e11163..09dfbf0 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -96,7 +96,6 @@
 static const char* DEFAULT_VM_SERVICE_SERVER_IP = "127.0.0.1";
 static const int DEFAULT_VM_SERVICE_SERVER_PORT = 8181;
 // VM Service options.
-static bool start_vm_service = false;
 static const char* vm_service_server_ip = DEFAULT_VM_SERVICE_SERVER_IP;
 // The 0 port is a magic value which results in the first available port
 // being allocated.
@@ -323,7 +322,7 @@
   // Ensure that we are not already running using a full snapshot.
   if (isolate_snapshot_buffer != NULL) {
     Log::PrintErr("Precompiled snapshots must be generated with"
-                  " dart_no_snapshot.");
+                  " dart_no_snapshot.\n");
     return false;
   }
   has_gen_precompiled_snapshot = true;
@@ -392,7 +391,6 @@
     return false;
   }
 
-  start_vm_service = true;
   return true;
 }
 
@@ -411,8 +409,6 @@
     return false;
   }
 
-  start_vm_service = true;
-
   vm_options->AddArgument("--pause-isolates-on-exit");
   return true;
 }
@@ -1069,13 +1065,13 @@
 static void* LoadLibrarySymbol(const char* libname, const char* symname) {
   void* library = Extensions::LoadExtensionLibrary(libname);
   if (library == NULL) {
-    ErrorExit(kErrorExitCode,
-              "Error: Failed to load library '%s'\n", libname);
+    Log::PrintErr("Error: Failed to load library '%s'\n", libname);
+    exit(kErrorExitCode);
   }
   void* symbol = Extensions::ResolveSymbol(library, symname);
   if (symbol == NULL) {
-    ErrorExit(kErrorExitCode,
-              "Error: Failed to load symbol '%s'\n", symname);
+    Log::PrintErr("Error: Failed to load symbol '%s'\n", symname);
+    exit(kErrorExitCode);
   }
   return symbol;
 }
@@ -1259,7 +1255,32 @@
     result = Dart_LibraryImportLibrary(builtin_lib, root_lib, Dart_Null());
 
     if (has_gen_precompiled_snapshot) {
-      result = Dart_Precompile();
+      Dart_QualifiedFunctionName standalone_entry_points[] = {
+        { "dart:_builtin", "::", "_getMainClosure" },
+        { "dart:_builtin", "::", "_getPrintClosure" },
+        { "dart:_builtin", "::", "_getUriBaseClosure" },
+        { "dart:_builtin", "::", "_resolveUri" },
+        { "dart:_builtin", "::", "_setWorkingDirectory" },
+        { "dart:_builtin", "::", "_loadDataAsync" },
+        { "dart:io", "::", "_makeUint8ListView" },
+        { "dart:io", "::", "_makeDatagram" },
+        { "dart:io", "::", "_setupHooks" },
+        { "dart:io", "CertificateException", "CertificateException." },
+        { "dart:io", "HandshakeException", "HandshakeException." },
+        { "dart:io", "TlsException", "TlsException." },
+        { "dart:io", "X509Certificate", "X509Certificate." },
+        { "dart:io", "_ExternalBuffer", "set:data" },
+        { "dart:io", "_Platform", "set:_nativeScript" },
+        { "dart:io", "_ProcessStartStatus", "set:_errorCode" },
+        { "dart:io", "_ProcessStartStatus", "set:_errorMessage" },
+        { "dart:io", "_SecureFilterImpl", "get:ENCRYPTED_SIZE" },
+        { "dart:io", "_SecureFilterImpl", "get:SIZE" },
+        { "dart:vmservice_io", "::", "_addResource" },
+        { "dart:vmservice_io", "::", "main" },
+        { NULL, NULL, NULL }  // Must be terminated with NULL entries.
+      };
+
+      result = Dart_Precompile(standalone_entry_points);
       DartExitOnError(result);
 
       uint8_t* vm_isolate_buffer = NULL;
diff --git a/runtime/bin/secure_socket.cc b/runtime/bin/secure_socket.cc
index 0670683..af90fab 100644
--- a/runtime/bin/secure_socket.cc
+++ b/runtime/bin/secure_socket.cc
@@ -895,6 +895,9 @@
     // against the certificate presented by the server.
     X509_VERIFY_PARAM* certificate_checking_parameters = SSL_get0_param(ssl_);
     hostname_ = strdup(hostname);
+    X509_VERIFY_PARAM_set_flags(certificate_checking_parameters,
+                                X509_V_FLAG_PARTIAL_CHAIN |
+                                X509_V_FLAG_TRUSTED_FIRST);
     X509_VERIFY_PARAM_set_hostflags(certificate_checking_parameters, 0);
     X509_VERIFY_PARAM_set1_host(certificate_checking_parameters,
                                 hostname_, strlen(hostname_));
@@ -957,8 +960,10 @@
   if (SSL_LOG_STATUS) Log::Print("SSL_handshake status: %d\n", status);
   if (status != 1) {
     error = SSL_get_error(ssl_, status);
-    if (SSL_LOG_STATUS) Log::Print("ERROR: %d\n", error);
-    ERR_print_errors_cb(printErrorCallback, NULL);
+    if (SSL_LOG_STATUS) {
+      Log::Print("ERROR: %d\n", error);
+      ERR_print_errors_cb(printErrorCallback, NULL);
+    }
   }
   if (status == 1) {
     if (in_handshake_) {
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index 9042eff..031b8c5 100755
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -2870,7 +2870,17 @@
  */
 
 
-DART_EXPORT Dart_Handle Dart_Precompile();
+typedef struct {
+  const char* library_uri;
+  const char* class_name;
+  const char* function_name;
+} Dart_QualifiedFunctionName;
+
+
+DART_EXPORT Dart_Handle Dart_Precompile(
+    Dart_QualifiedFunctionName entry_points[]);
+
+
 DART_EXPORT Dart_Handle Dart_CreatePrecompiledSnapshot(
     uint8_t** vm_isolate_snapshot_buffer,
     intptr_t* vm_isolate_snapshot_size,
diff --git a/runtime/include/dart_tools_api.h b/runtime/include/dart_tools_api.h
index 0ed7cd2..0e279e0 100644
--- a/runtime/include/dart_tools_api.h
+++ b/runtime/include/dart_tools_api.h
@@ -879,6 +879,14 @@
  * ========
  */
 
+/**
+ * Returns a timestamp in microseconds. This timestamp is suitable for
+ * passing into the timeline system.
+ *
+ * \return A timestamp that can be passed to the timeline system.
+ */
+DART_EXPORT int64_t Dart_TimelineGetMicros();
+
 /** Timeline stream for Dart API calls */
 #define DART_TIMELINE_STREAM_API (1 << 0)
 /** Timeline stream for compiler events */
@@ -976,7 +984,6 @@
 DART_EXPORT bool Dart_TimelineGetTrace(Dart_StreamConsumer consumer,
                                        void* user_data);
 
-
 /**
  * Get the timeline for entire VM (including all isolates).
  *
@@ -1000,8 +1007,7 @@
  * \param start_micros The start of the duration (in microseconds)
  * \param end_micros The end of the duration (in microseconds)
  *
- * NOTE: On Posix platforms you should use gettimeofday and on Windows platforms
- * you should use GetSystemTimeAsFileTime to get the time values.
+ * NOTE: All timestamps should be acquired from Dart_TimelineGetMicros.
  */
 DART_EXPORT Dart_Handle Dart_TimelineDuration(const char* label,
                                               int64_t start_micros,
@@ -1013,8 +1019,7 @@
  *
  * \param label The name of event.
  *
- * NOTE: On Posix platforms this call uses gettimeofday and on Windows platforms
- * this call uses GetSystemTimeAsFileTime to get the current time.
+ * NOTE: All timestamps should be acquired from Dart_TimelineGetMicros.
  */
 DART_EXPORT Dart_Handle Dart_TimelineInstant(const char* label);
 
@@ -1031,8 +1036,7 @@
  * calls to Dart_TimelineAsyncInstant and Dart_TimelineAsyncEnd will become
  * no-ops.
  *
- * NOTE: On Posix platforms this call uses gettimeofday and on Windows platforms
- * this call uses GetSystemTimeAsFileTime to get the current time.
+ * NOTE: All timestamps should be acquired from Dart_TimelineGetMicros.
  */
 DART_EXPORT Dart_Handle Dart_TimelineAsyncBegin(const char* label,
                                                 int64_t* async_id);
@@ -1047,8 +1051,7 @@
  * \return Returns an asynchronous id that must be passed to
  * Dart_TimelineAsyncInstant and Dart_TimelineAsyncEnd.
  *
- * NOTE: On Posix platforms this call uses gettimeofday and on Windows platforms
- * this call uses GetSystemTimeAsFileTime to get the current time.
+ * NOTE: All timestamps should be acquired from Dart_TimelineGetMicros.
  */
 DART_EXPORT Dart_Handle Dart_TimelineAsyncInstant(const char* label,
                                                   int64_t async_id);
@@ -1063,8 +1066,7 @@
  * \return Returns an asynchronous id that must be passed to
  * Dart_TimelineAsyncInstant and Dart_TimelineAsyncEnd.
  *
- * NOTE: On Posix platforms this call uses gettimeofday and on Windows platforms
- * this call uses GetSystemTimeAsFileTime to get the current time.
+ * NOTE: All timestamps should be acquired from Dart_TimelineGetMicros.
  */
 DART_EXPORT Dart_Handle Dart_TimelineAsyncEnd(const char* label,
                                               int64_t async_id);
diff --git a/runtime/observatory/lib/app.dart b/runtime/observatory/lib/app.dart
index 9bb2df8..a0e52bb 100644
--- a/runtime/observatory/lib/app.dart
+++ b/runtime/observatory/lib/app.dart
@@ -7,7 +7,6 @@
 import 'dart:async';
 import 'dart:convert';
 import 'dart:html';
-import 'dart:js';
 
 import 'package:logging/logging.dart';
 import 'package:observatory/service_html.dart';
@@ -20,7 +19,6 @@
 export 'package:observatory/utils.dart';
 
 part 'src/app/application.dart';
-part 'src/app/chart.dart';
 part 'src/app/location_manager.dart';
 part 'src/app/page.dart';
 part 'src/app/settings.dart';
diff --git a/runtime/observatory/lib/src/app/chart.dart b/runtime/observatory/lib/src/app/chart.dart
deleted file mode 100644
index c2d10b4..0000000
--- a/runtime/observatory/lib/src/app/chart.dart
+++ /dev/null
@@ -1,128 +0,0 @@
-// Copyright (c) 2014, 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.
-
-part of app;
-
-class GoogleChart {
-  static var _api;
-
-  /// Get access to the JsObject containing the Google Chart API:
-  /// https://developers.google.com/chart/interactive/docs/reference
-  static get api {
-    return _api;
-  }
-
-  static Completer _completer = new Completer();
-
-  static Future get onReady => _completer.future;
-
-  static bool get ready => _completer.isCompleted;
-
-  /// Load the Google Chart API. Returns a [Future] which completes
-  /// when the API is loaded.
-  static Future initOnce() {
-    Logger.root.info('Loading Google Charts API');
-    context['google'].callMethod('load',
-        ['visualization', '1', new JsObject.jsify({
-          'packages': ['corechart', 'table'],
-          'callback': new JsFunction.withThis(_completer.complete)
-    })]);
-    return _completer.future.then(_initOnceOnComplete);
-  }
-
-  static _initOnceOnComplete(_) {
-    Logger.root.info('Google Charts API loaded');
-    _api = context['google']['visualization'];
-    assert(_api != null);
-    return _api;
-  }
-}
-
-class DataTable {
-  final _table = new JsObject(GoogleChart.api['DataTable']);
-  /// Construct a Google Chart DataTable.
-  DataTable();
-
-  /// Number of columns.
-  int get columns => _table.callMethod('getNumberOfColumns');
-  /// Number of rows.
-  int get rows => _table.callMethod('getNumberOfRows');
-
-  /// Add a new column with [type] and [label].
-  /// type must be: 'string', 'number', or 'boolean'.
-  void addColumn(String type, String label) {
-    _table.callMethod('addColumn', [type, label]);
-  }
-
-  /// Add a new column with [type], [label] and [role].
-  /// Roles are used for metadata such as 'interval', 'annotation', or 'domain'.
-  /// type must be: 'string', 'number', or 'boolean'.
-  void addRoleColumn(String type, String label, String role) {
-    _table.callMethod('addColumn', [new JsObject.jsify({
-      'type': type,
-      'label': label,
-      'role': role,
-    })]);
-  }
-
-  /// Remove [count] columns starting with [start].
-  void removeColumns(int start, int count) {
-    _table.callMethod('removeColumns', [start, count]);
-  }
-
-  /// Remove all columns in the table.
-  void clearColumns() {
-    removeColumns(0, columns);
-  }
-
-  /// Remove [count] rows starting with [start].
-  void removeRows(int start, int count) {
-    _table.callMethod('removeRows', [start, count]);
-  }
-
-  /// Remove all rows in the table.
-  void clearRows() {
-    removeRows(0, rows);
-  }
-
-  /// Adds a new row to the table. [row] must have an entry for each
-  /// column in the table.
-  void addRow(List row) {
-    _table.callMethod('addRow', [new JsArray.from(row)]);
-  }
-
-  void addTimeOfDayValue(DateTime dt, value) {
-    var array = new JsArray.from([dt.hour, dt.minute, dt.second]);
-    addRow([array, value]);
-  }
-}
-
-class Chart {
-  var _chart;
-  final Map options = new Map();
-
-  /// Create a Google Chart of [chartType]. e.g. 'Table', 'AreaChart',
-  /// 'BarChart', the chart is rendered inside [element].
-  Chart(String chartType, Element element) {
-    _chart = new JsObject(GoogleChart.api[chartType], [element]);
-  }
-
-  /// When the user interacts with the table by clicking on columns,
-  /// you must call this function before [draw] so that we draw
-  /// with the current sort settings.
-  void refreshOptionsSortInfo() {
-    var props = _chart.callMethod('getSortInfo');
-    if ((props != null) && (props['column'] != -1)) {
-      // Preserve current sort settings.
-      options['sortColumn'] = props['column'];
-      options['sortAscending'] = props['ascending'];
-    }
-  }
-
-  /// Draw this chart using [table] and the current [options].
-  void draw(DataTable table) {
-    var jsOptions = new JsObject.jsify(options);
-    _chart.callMethod('draw', [table._table, jsOptions]);
-  }
-}
diff --git a/runtime/observatory/lib/src/elements/debugger.dart b/runtime/observatory/lib/src/elements/debugger.dart
index 66c9609..8c1a2ed 100644
--- a/runtime/observatory/lib/src/elements/debugger.dart
+++ b/runtime/observatory/lib/src/elements/debugger.dart
@@ -1358,10 +1358,12 @@
   void _reportPause(ServiceEvent event) {
     if (event.kind == ServiceEvent.kPauseStart) {
       console.print(
-          "Paused at isolate start (type 'continue' [F7] or 'step' [F10] to start the isolate')");
+          "Paused at isolate start "
+          "(type 'continue' [F7] or 'step' [F10] to start the isolate')");
     } else if (event.kind == ServiceEvent.kPauseExit) {
       console.print(
-          "Paused at isolate exit (type 'continue' or [F7] to exit the isolate')");
+          "Paused at isolate exit "
+          "(type 'continue' or [F7] to exit the isolate')");
     }
     if (stack['frames'].length > 0) {
       Frame frame = stack['frames'][0];
@@ -1384,6 +1386,9 @@
           console.print('Paused at ${script.name}:${line}:${col}');
         }
       });
+    } else {
+      console.print("Paused in message loop (type 'continue' or [F7] "
+                    "to resume processing messages)");
     }
   }
 
diff --git a/runtime/observatory/lib/src/elements/heap_profile.dart b/runtime/observatory/lib/src/elements/heap_profile.dart
index 25b5d54..731ff48 100644
--- a/runtime/observatory/lib/src/elements/heap_profile.dart
+++ b/runtime/observatory/lib/src/elements/heap_profile.dart
@@ -7,6 +7,7 @@
 import 'dart:async';
 import 'dart:html';
 import 'observatory_element.dart';
+import 'package:charted/charted.dart';
 import 'package:observatory/app.dart';
 import 'package:observatory/service.dart';
 import 'package:observatory/elements.dart';
@@ -32,12 +33,11 @@
   @observable String lastAccumulatorReset = '---';
 
   // Pie chart of new space usage.
-  var _newPieDataTable;
   var _newPieChart;
-
+  final _newPieChartRows = [];
   // Pie chart of old space usage.
-  var _oldPieDataTable;
   var _oldPieChart;
+  final _oldPieChartRows = [];
 
   @observable ClassSortedTable classTable;
   var _classTableBody;
@@ -48,14 +48,14 @@
   @published Isolate isolate;
   @observable ServiceMap profile;
 
+  final _pieChartColumns = [
+      new ChartColumnSpec(label: 'Type', type: ChartColumnSpec.TYPE_STRING),
+      new ChartColumnSpec(label: 'Size', formatter: (v) => v.toString())
+  ];
+
   HeapProfileElement.created() : super.created() {
-    // Create pie chart models.
-    _newPieDataTable = new DataTable();
-    _newPieDataTable.addColumn('string', 'Type');
-    _newPieDataTable.addColumn('number', 'Size');
-    _oldPieDataTable = new DataTable();
-    _oldPieDataTable.addColumn('string', 'Type');
-    _oldPieDataTable.addColumn('number', 'Size');
+    _initPieChartData(_newPieChartRows);
+    _initPieChartData(_oldPieChartRows);
 
     // Create class table model.
     var columns = [
@@ -84,14 +84,34 @@
     classTable.sortColumnIndex = 2;
   }
 
+  LayoutArea _makePieChart(String id, List rows) {
+    var wrapper = shadowRoot.querySelector(id);
+    var areaHost = wrapper.querySelector('.chart-host');
+    assert(areaHost != null);
+    var legendHost = wrapper.querySelector('.chart-legend-host');
+    assert(legendHost != null);
+    var series = new ChartSeries(id, [1], new PieChartRenderer(
+      sortDataByValue: false
+    ));
+    var config = new ChartConfig([series], [0]);
+    config.minimumSize = new Rect(300, 300);
+    config.legend = new ChartLegend(legendHost, showValues: true);
+    var data = new ChartData(_pieChartColumns, rows);
+    var area = new LayoutArea(areaHost,
+                              data,
+                              config,
+                              state: new ChartState(),
+                              autoUpdate: false);
+    area.addChartBehavior(new Hovercard());
+    area.addChartBehavior(new AxisLabelTooltip());
+    return area;
+  }
+
   @override
   void attached() {
     super.attached();
-    // Grab the pie chart divs.
-    _newPieChart = new Chart('PieChart',
-        shadowRoot.querySelector('#newPieChart'));
-    _oldPieChart = new Chart('PieChart',
-        shadowRoot.querySelector('#oldPieChart'));
+    _newPieChart = _makePieChart('#new-pie-chart', _newPieChartRows);
+    _oldPieChart = _makePieChart('#old-pie-chart', _oldPieChartRows);
     _classTableBody = shadowRoot.querySelector('#classTableBody');
     _subscriptionFuture =
         app.vm.listenEventStream(VM.kGCStream, _onEvent);
@@ -132,18 +152,29 @@
     }).catchError(app.handleException);
   }
 
+  static const _USED_INDEX = 0;
+  static const _FREE_INDEX = 1;
+  static const _EXTERNAL_INDEX = 2;
+
+  static const _LABEL_INDEX = 0;
+  static const _VALUE_INDEX = 1;
+
+  void _initPieChartData(List rows) {
+    rows.add(['Used', 0]);
+    rows.add(['Free', 0]);
+    rows.add(['External', 0]);
+  }
+
+  void _updatePieChartData(List rows, HeapSpace space) {
+    rows[_USED_INDEX][_VALUE_INDEX] = space.used;
+    rows[_FREE_INDEX][_VALUE_INDEX] = space.capacity - space.used;
+    rows[_EXTERNAL_INDEX][_VALUE_INDEX] = space.external;
+  }
+
   void _updatePieCharts() {
     assert(profile != null);
-    _newPieDataTable.clearRows();
-    _newPieDataTable.addRow(['Used', isolate.newSpace.used]);
-    _newPieDataTable.addRow(['Free',
-        isolate.newSpace.capacity - isolate.newSpace.used]);
-    _newPieDataTable.addRow(['External', isolate.newSpace.external]);
-    _oldPieDataTable.clearRows();
-    _oldPieDataTable.addRow(['Used', isolate.oldSpace.used]);
-    _oldPieDataTable.addRow(['Free',
-        isolate.oldSpace.capacity - isolate.oldSpace.used]);
-    _oldPieDataTable.addRow(['External', isolate.oldSpace.external]);
+    _updatePieChartData(_newPieChartRows, isolate.newSpace);
+    _updatePieChartData(_oldPieChartRows, isolate.oldSpace);
   }
 
   void _updateClasses() {
@@ -268,8 +299,8 @@
   }
 
   void _drawCharts() {
-    _newPieChart.draw(_newPieDataTable);
-    _oldPieChart.draw(_oldPieDataTable);
+    _newPieChart.draw();
+    _oldPieChart.draw();
   }
 
   @observable void changeSort(Event e, var detail, Element target) {
diff --git a/runtime/observatory/lib/src/elements/heap_profile.html b/runtime/observatory/lib/src/elements/heap_profile.html
index 6cece87..362a8cb 100644
--- a/runtime/observatory/lib/src/elements/heap_profile.html
+++ b/runtime/observatory/lib/src/elements/heap_profile.html
@@ -51,6 +51,20 @@
       padding: 8px;
     }
   </style>
+  <link rel="stylesheet" href="../../../../packages/charted/charts/themes/quantum_theme.css">
+  <style>
+.chart-wrapper {
+}
+
+.chart-host-wrapper {
+height: 300px;
+}
+.chart-legend-host {
+max-height: 300px;
+overflow-x: auto;
+overflow-y: auto;
+}
+  </style>
   <nav-bar>
     <top-nav-menu></top-nav-menu>
     <vm-nav-menu vm="{{ profile.isolate.vm }}"></vm-nav-menu>
@@ -115,7 +129,12 @@
             <div class="memberValue">{{ isolate.newSpace.averageCollectionPeriodInMillis.toStringAsFixed(2) }} ms</div>
           </div>
         </div>
-        <div id="newPieChart" style="height: 300px"></div>
+        <div class="chart-wrapper" id="new-pie-chart">
+          <div class="chart-host-wrapper">
+              <div class="chart-host"></div>
+              <div class="chart-legend-host"></div>
+          </div>
+        </div>
       </div>
       <div id="oldSpace" class="flex-item-50-percent">
         <h2>Old Generation</h2>
@@ -152,7 +171,12 @@
             <div class="memberValue">{{ isolate.oldSpace.averageCollectionPeriodInMillis.toStringAsFixed(2) }} ms</div>
           </div>
         </div>
-        <div id="oldPieChart" style="height: 300px"></div>
+        <div class="chart-wrapper" id="old-pie-chart">
+          <div class="chart-host-wrapper">
+              <div class="chart-host"></div>
+              <div class="chart-legend-host"></div>
+          </div>
+        </div>
       </div>
     </div>
   </div>
diff --git a/runtime/observatory/lib/src/elements/isolate_summary.dart b/runtime/observatory/lib/src/elements/isolate_summary.dart
index 288a21e..12ebe81 100644
--- a/runtime/observatory/lib/src/elements/isolate_summary.dart
+++ b/runtime/observatory/lib/src/elements/isolate_summary.dart
@@ -4,8 +4,10 @@
 
 library isolate_summary_element;
 
+import 'dart:html';
 import 'observatory_element.dart';
-import 'package:observatory/app.dart';
+import 'package:charted/charted.dart';
+import "package:charted/charts/charts.dart";
 import 'package:observatory/service.dart';
 import 'package:polymer/polymer.dart';
 
@@ -38,28 +40,47 @@
 }
 
 class CounterChart {
-  var _table = new DataTable();
-  var _chart;
+  final HtmlElement _wrapper;
+  HtmlElement _areaHost;
+  HtmlElement _legendHost;
+  LayoutArea _area;
+  ChartData _data;
+  final _columns = [
+      new ChartColumnSpec(label: 'Type', type: ChartColumnSpec.TYPE_STRING),
+      new ChartColumnSpec(label: 'Percent', formatter: (v) => v.toString())
+  ];
 
-  void update(Map counters) {
-    if (_table.columns == 0) {
-      // Initialize.
-      _table.addColumn('string', 'Name');
-      _table.addColumn('number', 'Value');
-    }
-    _table.clearRows();
-    for (var key in counters.keys) {
-      var value = double.parse(counters[key].split('%')[0]);
-      _table.addRow([key, value]);
-    }
+  CounterChart(this._wrapper) {
+    assert(_wrapper != null);
+    _areaHost = _wrapper.querySelector('.chart-host');
+    assert(_areaHost != null);
+    _areaHost.clientWidth;
+    _legendHost = _wrapper.querySelector('.chart-legend-host');
+    assert(_legendHost != null);
+    var series = new ChartSeries("Work", [1], new PieChartRenderer(
+      sortDataByValue: false
+    ));
+    var config = new ChartConfig([series], [0]);
+    config.minimumSize = new Rect(200, 200);
+    config.legend = new ChartLegend(_legendHost, showValues: true);
+    _data = new ChartData(_columns, []);
+    _area = new LayoutArea(_areaHost,
+                           _data,
+                           config,
+                           state: new ChartState(),
+                           autoUpdate: false);
+    _area.addChartBehavior(new Hovercard());
+    _area.addChartBehavior(new AxisLabelTooltip());
   }
 
-  void draw(var element) {
-    if (_chart == null) {
-      assert(element != null);
-      _chart = new Chart('PieChart', element);
+  void update(Map counters) {
+    var rows = [];
+    for (var key in counters.keys) {
+      var value = double.parse(counters[key].split('%')[0]);
+      rows.add([key, value]);
     }
-    _chart.draw(_table);
+    _area.data = new ChartData(_columns, rows);
+    _area.draw();
   }
 }
 
@@ -70,24 +91,19 @@
   @published ObservableMap counters;
   CounterChart chart;
 
+  attached() {
+    super.attached();
+    chart =
+        new CounterChart(shadowRoot.querySelector('#isolate-counter-chart'));
+  }
+
   void countersChanged(oldValue) {
     if (counters == null) {
       return;
     }
-    // Lazily create the chart.
-    if (GoogleChart.ready && chart == null) {
-      chart = new CounterChart();
-    }
     if (chart == null) {
       return;
     }
     chart.update(counters);
-    var element = shadowRoot.querySelector('#counterPieChart');
-    if (element != null) {
-      chart.draw(element);
-    }
   }
 }
-
-
-
diff --git a/runtime/observatory/lib/src/elements/isolate_summary.html b/runtime/observatory/lib/src/elements/isolate_summary.html
index 40b9eb2..6f63472 100644
--- a/runtime/observatory/lib/src/elements/isolate_summary.html
+++ b/runtime/observatory/lib/src/elements/isolate_summary.html
@@ -121,9 +121,7 @@
       </div>
     </template>
     <div class="flex-row">
-      <div class="flex-item-10-percent">
-      </div>
-      <div class="flex-item-40-percent">
+      <div class="flex-item-50-percent">
         <isolate-counter-chart counters="{{ isolate.counters }}"></isolate-counter-chart>
       </div>
       <div class="flex-item-40-percent">
@@ -214,7 +212,26 @@
 
 <polymer-element name="isolate-counter-chart" extends="observatory-element">
   <template>
-    <div id="counterPieChart" style="height: 200px"></div>
+    <link rel="stylesheet" href="../../../../packages/charted/charts/themes/quantum_theme.css">
+    <style>
+.chart-wrapper {
+}
+
+.chart-host-wrapper {
+  height: 200px;
+}
+.chart-legend-host {
+  max-height: 200px;
+  overflow-x: auto;
+  overflow-y: auto;
+}
+    </style>
+    <div class="chart-wrapper" id="isolate-counter-chart">
+      <div class="chart-host-wrapper">
+          <div class="chart-host"></div>
+          <div class="chart-legend-host"></div>
+      </div>
+  </div>
   </template>
 </polymer-element>
 
diff --git a/runtime/observatory/lib/src/elements/metrics.dart b/runtime/observatory/lib/src/elements/metrics.dart
index 73343c5..cb5282b 100644
--- a/runtime/observatory/lib/src/elements/metrics.dart
+++ b/runtime/observatory/lib/src/elements/metrics.dart
@@ -7,6 +7,7 @@
 import 'dart:async';
 import 'dart:html';
 import 'observatory_element.dart';
+import 'package:charted/charted.dart';
 import 'package:observatory/app.dart';
 import 'package:observatory/service.dart';
 import 'package:polymer/polymer.dart';
@@ -152,57 +153,70 @@
 class MetricsGraphElement extends ObservatoryElement {
   MetricsGraphElement.created() : super.created();
 
-  final DataTable _table = new DataTable();
-  Chart _chart;
+  HtmlElement _wrapper;
+  HtmlElement _areaHost;
+  CartesianArea _area;
+  ChartData _data;
+  final _columns = [
+      new ChartColumnSpec(label: 'Time', type: ChartColumnSpec.TYPE_TIMESTAMP),
+      new ChartColumnSpec(label: 'Value', formatter: (v) => v.toString())
+  ];
+  final _rows = [[0, 1000000.0]];
 
   @published ServiceMetric metric;
   @observable Isolate isolate;
 
   void attached() {
+    super.attached();
     // Redraw once a second.
     pollPeriod = new Duration(seconds: 1);
-    super.attached();
+    _reset();
   }
 
   void onPoll() {
-    draw();
-  }
-
-  void draw() {
-    if (_chart == null) {
-      // Construct chart.
-      var element = shadowRoot.querySelector('#graph');
-      if (element == null) {
-        // Bail.
-        return;
-      }
-      _chart = new Chart('LineChart', element);
-    }
     if (metric == null) {
       return;
     }
     _update();
-    _chart.draw(_table);
+    _draw();
   }
 
-  void _setupInitialDataTable() {
-    _table.clearColumns();
-    // Only one metric right now.
-    _table.addColumn('timeofday', 'time');
-    _table.addColumn('number', metric.name);
+  void _reset() {
+    _rows.clear();
+    _wrapper = shadowRoot.querySelector('#metric-chart');
+    assert(_wrapper != null);
+    _areaHost = _wrapper.querySelector('.chart-host');
+    assert(_areaHost != null);
+    _areaHost.children.clear();
+    var series = new ChartSeries("one", [1], new LineChartRenderer());
+    var config = new ChartConfig([series], [0]);
+    config.minimumSize = new Rect(800, 600);
+    _data = new ChartData(_columns, _rows);
+    _area = new CartesianArea(_areaHost,
+                              _data,
+                              config,
+                              state: new ChartState());
   }
 
   void _update() {
-    _table.clearRows();
+    _rows.clear();
     for (var i = 0; i < metric.samples.length; i++) {
       var sample = metric.samples[i];
-      _table.addTimeOfDayValue(sample.time, sample.value);
+      _rows.add([sample.time.millisecondsSinceEpoch, sample.value]);
     }
   }
 
+  void _draw() {
+    if (_rows.length < 2) {
+      return;
+    }
+    _area.data = new ChartData(_columns, _rows);
+    _area.draw();
+  }
+
   metricChanged(oldValue) {
     if (oldValue != metric) {
-      _setupInitialDataTable();
+      _reset();
     }
   }
 }
diff --git a/runtime/observatory/lib/src/elements/metrics.html b/runtime/observatory/lib/src/elements/metrics.html
index 899292a..a6a0411 100644
--- a/runtime/observatory/lib/src/elements/metrics.html
+++ b/runtime/observatory/lib/src/elements/metrics.html
@@ -127,12 +127,20 @@
 <polymer-element name="metrics-graph" extends="observatory-element">
   <template>
     <link rel="stylesheet" href="css/shared.css">
+    <link rel="stylesheet" href="../../../../packages/charted/charts/themes/quantum_theme.css">
     <style>
-      .graph {
-        min-height: 600px;
-      }
+.chart-wrapper {
+  padding: 40px;
+  width: 800px;
+}
+.chart-host-wrapper {
+  height: 300px;
+}
     </style>
-    <div id="graph" class="graph">
+    <div class="chart-wrapper" id="metric-chart">
+        <div class="chart-host-wrapper">
+            <div class="chart-host" dir="ltr"></div>
+        </div>
     </div>
   </template>
 </polymer-element>
diff --git a/runtime/observatory/maintainers/pubspec.template b/runtime/observatory/maintainers/pubspec.template
index daed864..87154f3 100644
--- a/runtime/observatory/maintainers/pubspec.template
+++ b/runtime/observatory/maintainers/pubspec.template
@@ -7,12 +7,14 @@
     inline_stylesheets:
       lib/src/elements/css/shared.css: false
 - $dart2js:
+    $include: "**/*.polymer.bootstrap.dart"
     suppressWarnings: false
-    $exclude: web/main.dart
     commandLineOptions: [--show-package-warnings]
 dependencies:
   args: any
-  charted: any
+  charted: ^0.2.9
   polymer: any
   unittest: < 0.12.0
   usage: any
+  code_transformers: 0.2.9
+
diff --git a/runtime/observatory/observatory_sources.gypi b/runtime/observatory/observatory_sources.gypi
index e02a5e7..87b546f 100644
--- a/runtime/observatory/observatory_sources.gypi
+++ b/runtime/observatory/observatory_sources.gypi
@@ -19,7 +19,6 @@
     'lib/service_html.dart',
     'lib/src/app/analytics.dart',
     'lib/src/app/application.dart',
-    'lib/src/app/chart.dart',
     'lib/src/app/location_manager.dart',
     'lib/src/app/page.dart',
     'lib/src/app/settings.dart',
diff --git a/runtime/observatory/pubspec.yaml b/runtime/observatory/pubspec.yaml
index 294aa1d..dd23a9c 100644
--- a/runtime/observatory/pubspec.yaml
+++ b/runtime/observatory/pubspec.yaml
@@ -6,16 +6,18 @@
     - web/index.html
     inline_stylesheets:
       lib/src/elements/css/shared.css: false
+      packages/charted/charts/themes/quantum_theme.css: false
 - $dart2js:
     $include: "**/*.polymer.bootstrap.dart"
     suppressWarnings: false
     commandLineOptions: [--show-package-warnings]
 dependencies:
   args: any
-  charted: any
+  charted: ^0.2.9
   polymer: any
   unittest: < 0.12.0
   usage: any
+  code_transformers: 0.2.9
 dependency_overrides:
   analyzer:
     path: ../../third_party/observatory_pub_packages/analyzer
@@ -25,6 +27,8 @@
     path: ../../third_party/observatory_pub_packages/barback
   browser:
     path: ../../third_party/observatory_pub_packages/browser
+  charcode:
+    path: ../../third_party/observatory_pub_packages/charcode
   charted:
     path: ../../third_party/observatory_pub_packages/charted
   cli_util:
@@ -51,10 +55,14 @@
     path: ../../third_party/observatory_pub_packages/matcher
   observe:
     path: ../../third_party/observatory_pub_packages/observe
+  package_config:
+    path: ../../third_party/observatory_pub_packages/package_config
   path:
     path: ../../third_party/observatory_pub_packages/path
   petitparser:
     path: ../../third_party/observatory_pub_packages/petitparser
+  plugin:
+    path: ../../third_party/observatory_pub_packages/plugin
   polymer:
     path: ../../third_party/observatory_pub_packages/polymer
   polymer_expressions:
@@ -93,3 +101,4 @@
     path: ../../third_party/observatory_pub_packages/which
   yaml:
     path: ../../third_party/observatory_pub_packages/yaml
+
diff --git a/runtime/observatory/tests/service/pause_idle_isolate_test.dart b/runtime/observatory/tests/service/pause_idle_isolate_test.dart
new file mode 100644
index 0000000..cfd418c
--- /dev/null
+++ b/runtime/observatory/tests/service/pause_idle_isolate_test.dart
@@ -0,0 +1,80 @@
+// Copyright (c) 2015, 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.
+// VMOptions=--error_on_bad_type --error_on_bad_override
+
+import 'package:observatory/service_io.dart';
+import 'package:unittest/unittest.dart';
+import 'test_helper.dart';
+import 'dart:async';
+import 'dart:io';
+import 'dart:isolate' show ReceivePort;
+
+var receivePort;
+
+void testMain() {
+  receivePort = new ReceivePort();
+}
+
+var tests = [
+
+(Isolate isolate) async {
+  Completer completer = new Completer();
+  var stream = await isolate.vm.getEventStream(VM.kDebugStream);
+  var subscription;
+  subscription = stream.listen((ServiceEvent event) {
+    if (event.kind == ServiceEvent.kPauseStart) {
+      print('Received $event');
+      subscription.cancel();
+      completer.complete();
+    }
+  });
+
+  if (isolate.pauseEvent != null &&
+      isolate.pauseEvent.kind == ServiceEvent.kPauseStart) {
+    // Wait for the isolate to hit PauseStart.
+    subscription.cancel();
+  } else {
+    await completer.future;
+  }
+  print('Done waiting for pause event.');
+
+  // Wait for the isolate to pause due to interruption.
+  completer = new Completer();
+  stream = await isolate.vm.getEventStream(VM.kDebugStream);
+  bool receivedInterrupt = false;
+  subscription = stream.listen((ServiceEvent event) {
+    print('Received $event');
+    if (event.kind == ServiceEvent.kPauseInterrupted) {
+      receivedInterrupt = true;
+      subscription.cancel();
+      completer.complete();
+    }
+  });
+
+  await isolate.resume();
+
+  // Wait for the isolate to become idle.  We detect this by querying
+  // the stack until it becomes empty.
+  var frameCount;
+  do {
+    var stack = await isolate.getStack();
+    frameCount = stack['frames'].length;
+    print('frames: $frameCount');
+    sleep(const Duration(milliseconds:10));
+  } while (frameCount > 0);
+
+  // Make sure that the isolate receives an interrupt even when it is
+  // idle. (https://github.com/dart-lang/sdk/issues/24349)
+  await isolate.pause();
+  await completer.future;
+  expect(receivedInterrupt, isTrue);
+},
+
+];
+
+main(args) => runIsolateTests(args, tests,
+                              testeeConcurrent: testMain,
+                              pause_on_start: true,
+                              trace_service: true,
+                              verbose_vm: true);
diff --git a/runtime/observatory/tests/service/service.status b/runtime/observatory/tests/service/service.status
index 088c36a..1aeac65 100644
--- a/runtime/observatory/tests/service/service.status
+++ b/runtime/observatory/tests/service/service.status
@@ -19,4 +19,4 @@
 developer_extension_test: SkipByDesign
 
 [ $arch == arm ]
-process_service_test: Fail # Issue 24344
+process_service_test: Pass, Fail # Issue 24344
diff --git a/runtime/observatory/tests/service/step_into_async_no_await_test.dart b/runtime/observatory/tests/service/step_into_async_no_await_test.dart
new file mode 100644
index 0000000..f2a8a23
--- /dev/null
+++ b/runtime/observatory/tests/service/step_into_async_no_await_test.dart
@@ -0,0 +1,33 @@
+// Copyright (c) 2015, 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.
+// VMOptions=--error_on_bad_type --error_on_bad_override  --verbose_debug
+
+import 'package:observatory/service_io.dart';
+import 'test_helper.dart';
+import 'dart:developer';
+
+// :async_op will not be captured in this function because it never needs to
+// reschedule it.
+asyncWithoutAwait() async {
+  print("asyncWithoutAwait");
+}
+
+testMain() {
+  debugger();
+  asyncWithoutAwait();
+}
+
+var tests = [
+  hasStoppedAtBreakpoint,
+  stoppedAtLine(18),
+  (isolate) => isolate.stepInto(),
+  hasStoppedAtBreakpoint,
+  (isolate) => isolate.getStack(),  // Should not crash.
+  // TODO(rmacnak): stoppedAtLine(12)
+  // This doesn't happen because asyncWithoutAwait is marked undebuggable.
+  // Probably needs to change to support async-step-into.
+  resumeIsolate,
+];
+
+main(args) => runIsolateTests(args, tests, testeeConcurrent: testMain);
diff --git a/runtime/observatory/tests/service/test_helper.dart b/runtime/observatory/tests/service/test_helper.dart
index fa453df..6248b43 100644
--- a/runtime/observatory/tests/service/test_helper.dart
+++ b/runtime/observatory/tests/service/test_helper.dart
@@ -249,12 +249,20 @@
 
     ServiceMap stack = await isolate.getStack();
     expect(stack.type, equals('Stack'));
-    expect(stack['frames'].length, greaterThanOrEqualTo(1));
 
-    Frame top = stack['frames'][0];
-    print("We are at $top");
+    List<Frame> frames = stack['frames'];
+    expect(frames.length, greaterThanOrEqualTo(1));
+
+    Frame top = frames[0];
     Script script = await top.location.script.load();
-    expect(script.tokenToLine(top.location.tokenPos), equals(line));
+    if (script.tokenToLine(top.location.tokenPos) != line) {
+      var sb = new StringBuffer();
+      sb.write("Expected to be at line $line, but got stack trace:\n");
+      for (Frame f in stack['frames']) {
+        sb.write(" $f\n");
+      }
+      throw sb.toString();
+    }
   };
 }
 
diff --git a/runtime/observatory/web/index.html b/runtime/observatory/web/index.html
index 9353a41..d318cf7 100644
--- a/runtime/observatory/web/index.html
+++ b/runtime/observatory/web/index.html
@@ -4,7 +4,6 @@
   <meta charset="utf-8">
   <title>Dart VM Observatory</title>
   <link rel="import" href="packages/polymer/polymer.html">
-  <script type="text/javascript" src="https://www.google.com/jsapi"></script>
   <link rel="stylesheet" href="packages/observatory/src/elements/css/shared.css">
   <link rel="import" href="packages/observatory/elements.html">
   <script type="application/dart" src="main.dart"></script>
diff --git a/runtime/observatory/web/main.dart b/runtime/observatory/web/main.dart
index 928bd61..238bf97 100644
--- a/runtime/observatory/web/main.dart
+++ b/runtime/observatory/web/main.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:logging/logging.dart';
-import 'package:observatory/app.dart';
 import 'package:polymer/polymer.dart';
 
 main() {
@@ -19,16 +18,12 @@
       print('${rec.level.name}: ${rec.time}: ${rec.message}');
   });
   Logger.root.info('Starting Observatory');
-  var chartsLoaded = GoogleChart.initOnce();
-  chartsLoaded.then((_) {
-    // Charts loaded, initialize polymer.
-    initPolymer().then((zone) {
-      Logger.root.info('Polymer initialized');
-      // Code here is in the polymer Zone, which ensures that
-      // @observable properties work correctly.
-      Polymer.onReady.then((_) {
-        Logger.root.info('Polymer elements have been upgraded');
-      });
+  initPolymer().then((zone) {
+    Logger.root.info('Polymer initialized');
+    // Code here is in the polymer Zone, which ensures that
+    // @observable properties work correctly.
+    Polymer.onReady.then((_) {
+      Logger.root.info('Polymer elements have been upgraded');
     });
   });
 }
diff --git a/runtime/vm/assembler_arm.cc b/runtime/vm/assembler_arm.cc
index 0334d76..815b796 100644
--- a/runtime/vm/assembler_arm.cc
+++ b/runtime/vm/assembler_arm.cc
@@ -24,48 +24,6 @@
 DEFINE_FLAG(bool, print_stop_message, true, "Print stop message.");
 DECLARE_FLAG(bool, inline_alloc);
 
-// Instruction encoding bits.
-enum {
-  H   = 1 << 5,   // halfword (or byte)
-  L   = 1 << 20,  // load (or store)
-  S   = 1 << 20,  // set condition code (or leave unchanged)
-  W   = 1 << 21,  // writeback base register (or leave unchanged)
-  A   = 1 << 21,  // accumulate in multiply instruction (or not)
-  B   = 1 << 22,  // unsigned byte (or word)
-  D   = 1 << 22,  // high/lo bit of start of s/d register range
-  N   = 1 << 22,  // long (or short)
-  U   = 1 << 23,  // positive (or negative) offset/index
-  P   = 1 << 24,  // offset/pre-indexed addressing (or post-indexed addressing)
-  I   = 1 << 25,  // immediate shifter operand (or not)
-
-  B0 = 1,
-  B1 = 1 << 1,
-  B2 = 1 << 2,
-  B3 = 1 << 3,
-  B4 = 1 << 4,
-  B5 = 1 << 5,
-  B6 = 1 << 6,
-  B7 = 1 << 7,
-  B8 = 1 << 8,
-  B9 = 1 << 9,
-  B10 = 1 << 10,
-  B11 = 1 << 11,
-  B12 = 1 << 12,
-  B16 = 1 << 16,
-  B17 = 1 << 17,
-  B18 = 1 << 18,
-  B19 = 1 << 19,
-  B20 = 1 << 20,
-  B21 = 1 << 21,
-  B22 = 1 << 22,
-  B23 = 1 << 23,
-  B24 = 1 << 24,
-  B25 = 1 << 25,
-  B26 = 1 << 26,
-  B27 = 1 << 27,
-};
-
-
 uint32_t Address::encoding3() const {
   if (kind_ == Immediate) {
     uint32_t offset = encoding_ & kOffset12Mask;
@@ -1472,10 +1430,7 @@
 
 
 void Assembler::bkpt(uint16_t imm16) {
-  // bkpt requires that the cond field is AL.
-  int32_t encoding = (AL << kConditionShift) | B24 | B21 |
-                     ((imm16 >> 4) << 8) | B6 | B5 | B4 | (imm16 & 0xf);
-  Emit(encoding);
+  Emit(BkptEncoding(imm16));
 }
 
 
diff --git a/runtime/vm/assembler_arm.h b/runtime/vm/assembler_arm.h
index 38dcedc..9ba279c 100644
--- a/runtime/vm/assembler_arm.h
+++ b/runtime/vm/assembler_arm.h
@@ -23,6 +23,49 @@
 class RuntimeEntry;
 class StubEntry;
 
+
+// Instruction encoding bits.
+enum {
+  H   = 1 << 5,   // halfword (or byte)
+  L   = 1 << 20,  // load (or store)
+  S   = 1 << 20,  // set condition code (or leave unchanged)
+  W   = 1 << 21,  // writeback base register (or leave unchanged)
+  A   = 1 << 21,  // accumulate in multiply instruction (or not)
+  B   = 1 << 22,  // unsigned byte (or word)
+  D   = 1 << 22,  // high/lo bit of start of s/d register range
+  N   = 1 << 22,  // long (or short)
+  U   = 1 << 23,  // positive (or negative) offset/index
+  P   = 1 << 24,  // offset/pre-indexed addressing (or post-indexed addressing)
+  I   = 1 << 25,  // immediate shifter operand (or not)
+
+  B0 = 1,
+  B1 = 1 << 1,
+  B2 = 1 << 2,
+  B3 = 1 << 3,
+  B4 = 1 << 4,
+  B5 = 1 << 5,
+  B6 = 1 << 6,
+  B7 = 1 << 7,
+  B8 = 1 << 8,
+  B9 = 1 << 9,
+  B10 = 1 << 10,
+  B11 = 1 << 11,
+  B12 = 1 << 12,
+  B16 = 1 << 16,
+  B17 = 1 << 17,
+  B18 = 1 << 18,
+  B19 = 1 << 19,
+  B20 = 1 << 20,
+  B21 = 1 << 21,
+  B22 = 1 << 22,
+  B23 = 1 << 23,
+  B24 = 1 << 24,
+  B25 = 1 << 25,
+  B26 = 1 << 26,
+  B27 = 1 << 27,
+};
+
+
 class Label : public ValueObject {
  public:
   Label() : position_(0) { }
@@ -488,6 +531,16 @@
   // Note that gdb sets breakpoints using the undefined instruction 0xe7f001f0.
   void bkpt(uint16_t imm16);
 
+  static int32_t BkptEncoding(uint16_t imm16) {
+    // bkpt requires that the cond field is AL.
+    return (AL << kConditionShift) | B24 | B21 |
+           ((imm16 >> 4) << 8) | B6 | B5 | B4 | (imm16 & 0xf);
+  }
+
+  static uword GetBreakInstructionFiller() {
+    return BkptEncoding(0);
+  }
+
   // Floating point instructions (VFPv3-D16 and VFPv3-D32 profiles).
   void vmovsr(SRegister sn, Register rt, Condition cond = AL);
   void vmovrs(Register rt, SRegister sn, Condition cond = AL);
diff --git a/runtime/vm/assembler_arm64.h b/runtime/vm/assembler_arm64.h
index ff7f93f..ffb6b768 100644
--- a/runtime/vm/assembler_arm64.h
+++ b/runtime/vm/assembler_arm64.h
@@ -838,6 +838,11 @@
     EmitExceptionGenOp(BRK, imm);
   }
 
+  static uword GetBreakInstructionFiller() {
+    const intptr_t encoding = ExceptionGenOpEncoding(BRK, 0);
+    return encoding << 32 | encoding;
+  }
+
   // Double floating point.
   bool fmovdi(VRegister vd, double immd) {
     int64_t imm64 = bit_cast<int64_t, double>(immd);
@@ -1688,10 +1693,12 @@
     Emit(encoding);
   }
 
+  static int32_t ExceptionGenOpEncoding(ExceptionGenOp op, uint16_t imm) {
+    return op | (static_cast<int32_t>(imm) << kImm16Shift);
+  }
+
   void EmitExceptionGenOp(ExceptionGenOp op, uint16_t imm) {
-    const int32_t encoding =
-        op | (static_cast<int32_t>(imm) << kImm16Shift);
-    Emit(encoding);
+    Emit(ExceptionGenOpEncoding(op, imm));
   }
 
   void EmitMoveWideOp(MoveWideOp op, Register rd, const Immediate& imm,
diff --git a/runtime/vm/assembler_ia32.h b/runtime/vm/assembler_ia32.h
index 44ba10e..c391612 100644
--- a/runtime/vm/assembler_ia32.h
+++ b/runtime/vm/assembler_ia32.h
@@ -632,6 +632,10 @@
   void int3();
   void hlt();
 
+  static uword GetBreakInstructionFiller() {
+    return 0xCCCCCCCC;
+  }
+
   // Note: verified_mem mode forces far jumps.
   void j(Condition condition, Label* label, bool near = kFarJump);
   void j(Condition condition, const ExternalLabel* label);
diff --git a/runtime/vm/assembler_mips.h b/runtime/vm/assembler_mips.h
index 4368707..714e2d8 100644
--- a/runtime/vm/assembler_mips.h
+++ b/runtime/vm/assembler_mips.h
@@ -504,11 +504,20 @@
     EmitBranchDelayNop();
   }
 
-  void break_(int32_t code) {
+  static int32_t BreakEncoding(int32_t code) {
     ASSERT(Utils::IsUint(20, code));
-    Emit(SPECIAL << kOpcodeShift |
-         code << kBreakCodeShift |
-         BREAK << kFunctionShift);
+    return SPECIAL << kOpcodeShift |
+           code << kBreakCodeShift |
+           BREAK << kFunctionShift;
+  }
+
+
+  void break_(int32_t code) {
+    Emit(BreakEncoding(code));
+  }
+
+  static uword GetBreakInstructionFiller() {
+    return BreakEncoding(0);
   }
 
   // FPU compare, always false.
diff --git a/runtime/vm/assembler_x64.h b/runtime/vm/assembler_x64.h
index e0ac23f..89b2944 100644
--- a/runtime/vm/assembler_x64.h
+++ b/runtime/vm/assembler_x64.h
@@ -684,6 +684,10 @@
   void int3();
   void hlt();
 
+  static uword GetBreakInstructionFiller() {
+    return 0xCCCCCCCCCCCCCCCC;
+  }
+
   // Note: verified_mem mode forces far jumps.
   void j(Condition condition, Label* label, bool near = kFarJump);
 
diff --git a/runtime/vm/block_scheduler.cc b/runtime/vm/block_scheduler.cc
index 7d6cfc5..a84a5d9 100644
--- a/runtime/vm/block_scheduler.cc
+++ b/runtime/vm/block_scheduler.cc
@@ -12,63 +12,37 @@
 
 DEFINE_FLAG(bool, emit_edge_counters, true, "Emit edge counters at targets.");
 
-// Compute the edge count at the deopt id of a TargetEntry or Goto.
-static intptr_t ComputeEdgeCount(
-    const Code& unoptimized_code,
-    const ZoneGrowableArray<uword>& deopt_id_pc_pairs,
-    intptr_t deopt_id) {
-  ASSERT(deopt_id != Isolate::kNoDeoptId);
-
+static intptr_t GetEdgeCount(const Array& edge_counters, intptr_t edge_id) {
   if (!FLAG_emit_edge_counters) {
     // Assume everything was visited once.
     return 1;
   }
-
-  for (intptr_t i = 0; i < deopt_id_pc_pairs.length(); i += 2) {
-    intptr_t deopt_id_entry = static_cast<intptr_t>(deopt_id_pc_pairs[i]);
-    uword pc = deopt_id_pc_pairs[i + 1];
-    if (deopt_id_entry == deopt_id) {
-      Array& array = Array::Handle();
-      array ^= CodePatcher::GetEdgeCounterAt(pc, unoptimized_code);
-      ASSERT(!array.IsNull());
-      return Smi::Value(Smi::RawCast(array.At(0)));
-    }
-  }
-
-  UNREACHABLE();
-  return 1;
+  return Smi::Value(Smi::RawCast(edge_counters.At(edge_id)));
 }
 
 
 // There is an edge from instruction->successor.  Set its weight (edge count
 // per function entry).
-static void SetEdgeWeight(Instruction* instruction,
+static void SetEdgeWeight(BlockEntryInstr* block,
                           BlockEntryInstr* successor,
-                          const Code& unoptimized_code,
-                          const ZoneGrowableArray<uword>& deopt_id_pc_pairs,
+                          const Array& edge_counters,
                           intptr_t entry_count) {
   TargetEntryInstr* target = successor->AsTargetEntry();
   if (target != NULL) {
     // If this block ends in a goto, the edge count of this edge is the same
     // as the count on the single outgoing edge. This is true as long as the
     // block does not throw an exception.
-    GotoInstr* jump = target->last_instruction()->AsGoto();
-    const intptr_t deopt_id =
-        (jump != NULL)  ? jump->deopt_id() : target->deopt_id();
-    intptr_t count = ComputeEdgeCount(unoptimized_code,
-                                      deopt_id_pc_pairs,
-                                      deopt_id);
+    intptr_t count = GetEdgeCount(edge_counters, target->preorder_number());
     if ((count >= 0) && (entry_count != 0)) {
       double weight =
           static_cast<double>(count) / static_cast<double>(entry_count);
       target->set_edge_weight(weight);
     }
   } else {
-    GotoInstr* jump = instruction->AsGoto();
+    GotoInstr* jump = block->last_instruction()->AsGoto();
     if (jump != NULL) {
-      intptr_t count = ComputeEdgeCount(unoptimized_code,
-                                        deopt_id_pc_pairs,
-                                        jump->deopt_id());
+      intptr_t count =
+          GetEdgeCount(edge_counters, block->preorder_number());
       if ((count >= 0) && (entry_count != 0)) {
         double weight =
             static_cast<double>(count) / static_cast<double>(entry_count);
@@ -83,27 +57,15 @@
   if (!FLAG_emit_edge_counters) {
     return;
   }
-  const Code& unoptimized_code = flow_graph()->parsed_function().code();
-  ASSERT(!unoptimized_code.IsNull());
 
-  ZoneGrowableArray<uword>* deopt_id_pc_pairs = new ZoneGrowableArray<uword>();
-  const PcDescriptors& descriptors =
-      PcDescriptors::Handle(unoptimized_code.pc_descriptors());
-  PcDescriptors::Iterator iter(descriptors, RawPcDescriptors::kDeopt);
-  uword entry =
-      Instructions::Handle(unoptimized_code.instructions()).EntryPoint();
-  while (iter.MoveNext()) {
-    intptr_t deopt_id = iter.DeoptId();
-    ASSERT(deopt_id != Isolate::kNoDeoptId);
-    uint32_t pc_offset = iter.PcOffset();
-    deopt_id_pc_pairs->Add(static_cast<uword>(deopt_id));
-    deopt_id_pc_pairs->Add(entry + pc_offset);
-  }
+  const Array& ic_data_array = Array::Handle(flow_graph()->zone(),
+      flow_graph()->parsed_function().function().ic_data_array());
+  Array& edge_counters = Array::Handle();
+  edge_counters ^= ic_data_array.At(0);
 
-  intptr_t entry_count =
-      ComputeEdgeCount(unoptimized_code,
-                       *deopt_id_pc_pairs,
-                       flow_graph()->graph_entry()->normal_entry()->deopt_id());
+  intptr_t entry_count = GetEdgeCount(
+      edge_counters,
+      flow_graph()->graph_entry()->normal_entry()->preorder_number());
   flow_graph()->graph_entry()->set_entry_count(entry_count);
 
   for (BlockIterator it = flow_graph()->reverse_postorder_iterator();
@@ -113,8 +75,7 @@
     Instruction* last = block->last_instruction();
     for (intptr_t i = 0; i < last->SuccessorCount(); ++i) {
       BlockEntryInstr* succ = last->SuccessorAt(i);
-      SetEdgeWeight(last, succ,
-                    unoptimized_code, *deopt_id_pc_pairs, entry_count);
+      SetEdgeWeight(block, succ, edge_counters, entry_count);
     }
   }
 }
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index 83df7a9..e6d61bc 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -845,8 +845,10 @@
               TypeParameter::Cast(type_arg).bound());
           ResolveType(type_arg_cls, bound);
         }
-        if (!type_param.CheckBound(type_arg, instantiated_bound, &error) &&
-            error.IsNull()) {
+        // This may be called only if type needs to be finalized, therefore
+        // seems OK to allocate finalized types in old space.
+        if (!type_param.CheckBound(type_arg, instantiated_bound,
+                &error, Heap::kOld) && error.IsNull()) {
           // The bound cannot be checked at compile time; postpone to run time.
           type_arg = BoundedType::New(type_arg, instantiated_bound, type_param);
           arguments.SetTypeAt(offset + i, type_arg);
diff --git a/runtime/vm/code_generator.cc b/runtime/vm/code_generator.cc
index e8b1f6f..f844cea 100644
--- a/runtime/vm/code_generator.cc
+++ b/runtime/vm/code_generator.cc
@@ -709,13 +709,22 @@
   ASSERT(caller_frame != NULL);
   const Code& orig_stub = Code::Handle(
       isolate->debugger()->GetPatchedStubAddress(caller_frame->pc()));
-  isolate->debugger()->SignalBpReached();
+  const Error& error = Error::Handle(isolate->debugger()->SignalBpReached());
+  if (!error.IsNull()) {
+    Exceptions::PropagateError(error);
+    UNREACHABLE();
+  }
   arguments.SetReturn(orig_stub);
 }
 
 
 DEFINE_RUNTIME_ENTRY(SingleStepHandler, 0) {
-  isolate->debugger()->DebuggerStepCallback();
+  const Error& error =
+      Error::Handle(isolate->debugger()->DebuggerStepCallback());
+  if (!error.IsNull()) {
+    Exceptions::PropagateError(error);
+    UNREACHABLE();
+  }
 }
 
 
@@ -728,7 +737,6 @@
                                      const String& target_name,
                                      const Array& arguments_descriptor,
                                      Function* result) {
-  ASSERT(FLAG_lazy_dispatchers);
   // 1. Check if there is a getter with the same name.
   const String& getter_name = String::Handle(Field::GetterName(target_name));
   const int kNumArguments = 1;
@@ -752,13 +760,14 @@
       Function::Handle(cache_class.GetInvocationDispatcher(
           target_name,
           arguments_descriptor,
-          RawFunction::kInvokeFieldDispatcher));
-  ASSERT(!target_function.IsNull());
+          RawFunction::kInvokeFieldDispatcher,
+          FLAG_lazy_dispatchers));
+  ASSERT(!target_function.IsNull() || !FLAG_lazy_dispatchers);
   if (FLAG_trace_ic) {
     OS::PrintErr("InvokeField IC miss: adding <%s> id:%" Pd " -> <%s>\n",
         Class::Handle(receiver.clazz()).ToCString(),
         receiver.GetClassId(),
-        target_function.ToCString());
+        target_function.IsNull() ? "null" : target_function.ToCString());
   }
   *result = target_function.raw();
   return true;
@@ -769,10 +778,6 @@
 RawFunction* InlineCacheMissHelper(
     const Instance& receiver,
     const ICData& ic_data) {
-  if (!FLAG_lazy_dispatchers) {
-    return Function::null();  // We'll handle it in the runtime.
-  }
-
   const Array& args_descriptor = Array::Handle(ic_data.arguments_descriptor());
 
   const Class& receiver_class = Class::Handle(receiver.clazz());
@@ -789,15 +794,19 @@
         Function::Handle(receiver_class.GetInvocationDispatcher(
             target_name,
             args_descriptor,
-            RawFunction::kNoSuchMethodDispatcher));
+            RawFunction::kNoSuchMethodDispatcher,
+            FLAG_lazy_dispatchers));
     if (FLAG_trace_ic) {
       OS::PrintErr("NoSuchMethod IC miss: adding <%s> id:%" Pd " -> <%s>\n",
           Class::Handle(receiver.clazz()).ToCString(),
           receiver.GetClassId(),
-          target_function.ToCString());
+          target_function.IsNull() ? "null" : target_function.ToCString());
     }
     result = target_function.raw();
   }
+  // May be null if --no-lazy-dispatchers, in which case dispatch will be
+  // handled by InvokeNoSuchMethodDispatcher.
+  ASSERT(!result.IsNull() || !FLAG_lazy_dispatchers);
   return result.raw();
 }
 
@@ -1347,40 +1356,10 @@
     }
   }
 
-  uword interrupt_bits = isolate->GetAndClearInterrupts();
-  if ((interrupt_bits & Isolate::kVMInterrupt) != 0) {
-    isolate->thread_registry()->CheckSafepoint();
-    if (isolate->store_buffer()->Overflowed()) {
-      if (FLAG_verbose_gc) {
-        OS::PrintErr("Scavenge scheduled by store buffer overflow.\n");
-      }
-      isolate->heap()->CollectGarbage(Heap::kNew);
-    }
-  }
-  if ((interrupt_bits & Isolate::kMessageInterrupt) != 0) {
-    bool ok = isolate->message_handler()->HandleOOBMessages();
-    if (!ok) {
-      // False result from HandleOOBMessages signals that the isolate should
-      // be terminating.
-      const String& msg = String::Handle(String::New("isolate terminated"));
-      const UnwindError& error = UnwindError::Handle(UnwindError::New(msg));
-      Exceptions::PropagateError(error);
-      UNREACHABLE();
-    }
-  }
-  if ((interrupt_bits & Isolate::kApiInterrupt) != 0) {
-    // Signal isolate interrupt event.
-    Debugger::SignalIsolateInterrupted();
-
-    Dart_IsolateInterruptCallback callback = isolate->InterruptCallback();
-    if (callback != NULL) {
-      if ((*callback)()) {
-        return;
-      } else {
-        // TODO(turnidge): Unwind the stack.
-        UNIMPLEMENTED();
-      }
-    }
+  const Error& error = Error::Handle(isolate->HandleInterrupts());
+  if (!error.IsNull()) {
+    Exceptions::PropagateError(error);
+    UNREACHABLE();
   }
 
   if ((stack_overflow_flags & Isolate::kOsrRequest) != 0) {
diff --git a/runtime/vm/code_patcher.h b/runtime/vm/code_patcher.h
index 3c0236d..2f747f2 100644
--- a/runtime/vm/code_patcher.h
+++ b/runtime/vm/code_patcher.h
@@ -79,8 +79,6 @@
 
   static void InsertDeoptimizationCallAt(uword start, uword target);
 
-  static RawObject* GetEdgeCounterAt(uword pc, const Code& code);
-
   static void PatchPoolPointerCallAt(uword return_address,
                                      const Code& code,
                                      const Code& new_target);
diff --git a/runtime/vm/code_patcher_arm.cc b/runtime/vm/code_patcher_arm.cc
index 6c31af9..a9d5a10 100644
--- a/runtime/vm/code_patcher_arm.cc
+++ b/runtime/vm/code_patcher_arm.cc
@@ -89,48 +89,6 @@
   return call.target();
 }
 
-
-// This class pattern matches on a load from the object pool.  Loading on
-// ARM is complicated because it can take four possible different forms.  We
-// match backwards from the end of the sequence so we can reuse the code for
-// matching object pool loads at calls.
-class EdgeCounter : public ValueObject {
- public:
-  EdgeCounter(uword pc, const Code& code)
-      : end_(pc - FlowGraphCompiler::EdgeCounterIncrementSizeInBytes()),
-        object_pool_(ObjectPool::Handle(code.GetObjectPool())) {
-    // An IsValid predicate is complicated and duplicates the code in the
-    // decoding function.  Instead we rely on decoding the pattern which
-    // will assert partial validity.
-  }
-
-  RawObject* edge_counter() const {
-    Register ignored;
-    intptr_t index;
-    InstructionPattern::DecodeLoadWordFromPool(end_, &ignored, &index);
-    ASSERT(ignored == R0);
-    return object_pool_.ObjectAt(index);
-  }
-
- private:
-  // The object pool load is followed by the fixed-size edge counter
-  // incrementing code:
-  //     ldr ip, [r0, #+11]
-  //     adds ip, ip, #2
-  //     str ip, [r0, #+11]
-  static const intptr_t kAdjust = 3 * Instr::kInstrSize;
-
-  uword end_;
-  const ObjectPool& object_pool_;
-};
-
-
-RawObject* CodePatcher::GetEdgeCounterAt(uword pc, const Code& code) {
-  ASSERT(code.ContainsInstructionAt(pc));
-  EdgeCounter counter(pc, code);
-  return counter.edge_counter();
-}
-
 }  // namespace dart
 
 #endif  // defined TARGET_ARCH_ARM
diff --git a/runtime/vm/code_patcher_arm64.cc b/runtime/vm/code_patcher_arm64.cc
index 3aa2982..4e0bbee 100644
--- a/runtime/vm/code_patcher_arm64.cc
+++ b/runtime/vm/code_patcher_arm64.cc
@@ -129,48 +129,6 @@
   return call.target();
 }
 
-
-// This class pattern matches on a load from the object pool.  Loading on
-// ARM64 is complicated because it can take more than one form.  We
-// match backwards from the end of the sequence so we can reuse the code for
-// matching object pool loads at calls.
-class EdgeCounter : public ValueObject {
- public:
-  EdgeCounter(uword pc, const Code& code)
-      : end_(pc - kAdjust),
-        object_pool_(ObjectPool::Handle(code.GetObjectPool())) {
-    // An IsValid predicate is complicated and duplicates the code in the
-    // decoding function.  Instead we rely on decoding the pattern which
-    // will assert partial validity.
-  }
-
-  RawObject* edge_counter() const {
-    Register ignored;
-    intptr_t index;
-    InstructionPattern::DecodeLoadWordFromPool(end_, &ignored, &index);
-    ASSERT(ignored == R0);
-    return object_pool_.ObjectAt(index);
-  }
-
- private:
-  // The object pool load is followed by the fixed-size edge counter
-  // incrementing code:
-  //     ldr ip, [r0, #+11]
-  //     adds ip, ip, #2
-  //     str ip, [r0, #+11]
-  static const intptr_t kAdjust = 3 * Instr::kInstrSize;
-
-  uword end_;
-  const ObjectPool& object_pool_;
-};
-
-
-RawObject* CodePatcher::GetEdgeCounterAt(uword pc, const Code& code) {
-  ASSERT(code.ContainsInstructionAt(pc));
-  EdgeCounter counter(pc, code);
-  return counter.edge_counter();
-}
-
 }  // namespace dart
 
 #endif  // defined TARGET_ARCH_ARM64
diff --git a/runtime/vm/code_patcher_ia32.cc b/runtime/vm/code_patcher_ia32.cc
index e1f5483..d0a4f07 100644
--- a/runtime/vm/code_patcher_ia32.cc
+++ b/runtime/vm/code_patcher_ia32.cc
@@ -232,35 +232,6 @@
   return InstanceCall::kPatternSize;
 }
 
-
-// The expected code pattern of an edge counter in unoptimized code:
-//  b8 imm32    mov EAX, immediate
-class EdgeCounter : public ValueObject {
- public:
-  EdgeCounter(uword pc, const Code& ignored)
-      : end_(pc - FlowGraphCompiler::EdgeCounterIncrementSizeInBytes()) {
-    ASSERT(IsValid(end_));
-  }
-
-  static bool IsValid(uword end) {
-    return (*reinterpret_cast<uint8_t*>(end - 5) == 0xb8);
-  }
-
-  RawObject* edge_counter() const {
-    return *reinterpret_cast<RawObject**>(end_ - 4);
-  }
-
- private:
-  uword end_;
-};
-
-
-RawObject* CodePatcher::GetEdgeCounterAt(uword pc, const Code& code) {
-  ASSERT(code.ContainsInstructionAt(pc));
-  EdgeCounter counter(pc, code);
-  return counter.edge_counter();
-}
-
 }  // namespace dart
 
 #endif  // defined TARGET_ARCH_IA32
diff --git a/runtime/vm/code_patcher_mips.cc b/runtime/vm/code_patcher_mips.cc
index aad4413..09b06a2 100644
--- a/runtime/vm/code_patcher_mips.cc
+++ b/runtime/vm/code_patcher_mips.cc
@@ -88,48 +88,6 @@
   return call.target();
 }
 
-
-// This class pattern matches on a load from the object pool.  Loading on
-// MIPS is complicated because it can take four possible different forms.
-// We match backwards from the end of the sequence so we can reuse the code
-// for matching object pool loads at calls.
-class EdgeCounter : public ValueObject {
- public:
-  EdgeCounter(uword pc, const Code& code)
-      : end_(pc - kAdjust),
-        object_pool_(ObjectPool::Handle(code.GetObjectPool())) {
-    // An IsValid predicate is complicated and duplicates the code in the
-    // decoding function.  Instead we rely on decoding the pattern which
-    // will assert partial validity.
-  }
-
-  RawObject* edge_counter() const {
-    Register ignored;
-    intptr_t index;
-    InstructionPattern::DecodeLoadWordFromPool(end_, &ignored, &index);
-    ASSERT(ignored == T0);
-    return object_pool_.ObjectAt(index);
-  }
-
- private:
-  // The object pool load is followed by the fixed-size edge counter
-  // incrementing code:
-  //     lw r9, 11(r8)
-  //     addiu r9, r9, 2
-  //     sw r9, 11(r8)
-  static const intptr_t kAdjust = 3 * Instr::kInstrSize;
-
-  uword end_;
-  const ObjectPool& object_pool_;
-};
-
-
-RawObject* CodePatcher::GetEdgeCounterAt(uword pc, const Code& code) {
-  ASSERT(code.ContainsInstructionAt(pc));
-  EdgeCounter counter(pc, code);
-  return counter.edge_counter();
-}
-
 }  // namespace dart
 
 #endif  // defined TARGET_ARCH_MIPS
diff --git a/runtime/vm/code_patcher_x64.cc b/runtime/vm/code_patcher_x64.cc
index 416e150..d0ac739 100644
--- a/runtime/vm/code_patcher_x64.cc
+++ b/runtime/vm/code_patcher_x64.cc
@@ -268,38 +268,6 @@
   return call.target();
 }
 
-
-// The expected code pattern of an edge counter in unoptimized code:
-//  49 8b 87 imm32    mov RAX, [PP + offset]
-class EdgeCounter : public ValueObject {
- public:
-  EdgeCounter(uword pc, const Code& code)
-      : end_(pc - FlowGraphCompiler::EdgeCounterIncrementSizeInBytes()),
-        object_pool_(ObjectPool::Handle(code.GetObjectPool())) {
-    ASSERT(IsValid(end_));
-  }
-
-  static bool IsValid(uword end) {
-    uint8_t* bytes = reinterpret_cast<uint8_t*>(end - 7);
-    return (bytes[0] == 0x49) && (bytes[1] == 0x8b) && (bytes[2] == 0x87);
-  }
-
-  RawObject* edge_counter() const {
-    return object_pool_.ObjectAt(IndexFromPPLoad(end_ - 4));
-  }
-
- private:
-  uword end_;
-  const ObjectPool& object_pool_;
-};
-
-
-RawObject* CodePatcher::GetEdgeCounterAt(uword pc, const Code& code) {
-  ASSERT(code.ContainsInstructionAt(pc));
-  EdgeCounter counter(pc, code);
-  return counter.edge_counter();
-}
-
 }  // namespace dart
 
 #endif  // defined TARGET_ARCH_X64
diff --git a/runtime/vm/compiler.cc b/runtime/vm/compiler.cc
index 85568b8..fb57537 100644
--- a/runtime/vm/compiler.cc
+++ b/runtime/vm/compiler.cc
@@ -788,7 +788,9 @@
         } else {  // not optimized.
           if (!Compiler::always_optimize() &&
               (function.ic_data_array() == Array::null())) {
-            function.SaveICDataMap(graph_compiler.deopt_id_to_ic_data());
+            function.SaveICDataMap(
+                graph_compiler.deopt_id_to_ic_data(),
+                Array::Handle(zone, graph_compiler.edge_counters_array()));
           }
           function.set_unoptimized_code(code);
           function.AttachCode(code);
@@ -927,12 +929,9 @@
       } else if (kind == RawLocalVarDescriptors::kStackVar) {
         THR_Print("  stack var '%s' offset %d",
           var_name.ToCString(), var_info.index());
-      } else if (kind == RawLocalVarDescriptors::kContextVar) {
-        THR_Print("  context var '%s' level %d offset %d",
-            var_name.ToCString(), var_info.scope_id, var_info.index());
       } else {
-        ASSERT(kind == RawLocalVarDescriptors::kAsyncOperation);
-        THR_Print("  async operation '%s' level %d offset %d",
+        ASSERT(kind == RawLocalVarDescriptors::kContextVar);
+        THR_Print("  context var '%s' level %d offset %d",
             var_name.ToCString(), var_info.scope_id, var_info.index());
       }
       THR_Print(" (valid %d-%d)\n", var_info.begin_pos, var_info.end_pos);
@@ -1026,17 +1025,6 @@
     Timer per_compile_timer(FLAG_trace_compiler, "Compilation time");
     per_compile_timer.Start();
 
-    // Restore unoptimized code if needed.
-    if (optimized) {
-      if (!Compiler::always_optimize()) {
-        const Error& error = Error::Handle(
-            zone, Compiler::EnsureUnoptimizedCode(Thread::Current(), function));
-        if (!error.IsNull()) {
-          return error.raw();
-        }
-      }
-    }
-
     ParsedFunction* parsed_function = new(zone) ParsedFunction(
         thread, Function::ZoneHandle(zone, function.raw()));
     if (FLAG_trace_compiler) {
diff --git a/runtime/vm/constant_propagator.cc b/runtime/vm/constant_propagator.cc
index 5cf2018..37e81b6 100644
--- a/runtime/vm/constant_propagator.cc
+++ b/runtime/vm/constant_propagator.cc
@@ -761,7 +761,7 @@
       const Instance& instance = Instance::Cast(value);
       const AbstractType& checked_type = instr->type();
       if (instr->instantiator()->BindsToConstantNull() &&
-        instr->instantiator_type_arguments()->BindsToConstantNull()) {
+          instr->instantiator_type_arguments()->BindsToConstantNull()) {
         const TypeArguments& checked_type_arguments = TypeArguments::Handle();
         Error& bound_error = Error::Handle();
         bool is_instance = instance.IsInstanceOf(checked_type,
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index e47d14e..b55cdb0 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -26,6 +26,7 @@
 #include "vm/object.h"
 #include "vm/object_store.h"
 #include "vm/os_thread.h"
+#include "vm/os.h"
 #include "vm/port.h"
 #include "vm/precompiler.h"
 #include "vm/profiler.h"
@@ -1596,16 +1597,7 @@
   }
   // TODO(16615): Validate isolate parameter.
   Isolate* iso = reinterpret_cast<Isolate*>(isolate);
-  // Schedule the interrupt. The isolate will notice this bit being set if it
-  // is currently executing in Dart code.
-  iso->ScheduleInterrupts(Isolate::kApiInterrupt);
-  // If the isolate is blocked on the message queue, we post a dummy message
-  // to the isolate's main port. The message will be ultimately ignored, but as
-  // part of handling the message the interrupt bit which was set above will be
-  // honored.
-  // Can't use Dart_Post() since there isn't a current isolate.
-  Dart_CObject api_null = { Dart_CObject_kNull , { 0 } };
-  Dart_PostCObject(iso->main_port(), &api_null);
+  iso->SendInternalLibMessage(Isolate::kInterruptMsg, iso->pause_capability());
 }
 
 
@@ -5676,6 +5668,11 @@
 }
 
 
+DART_EXPORT int64_t Dart_TimelineGetMicros() {
+  return OS::GetCurrentTraceMicros();
+}
+
+
 DART_EXPORT void Dart_TimelineSetRecordedStreams(int64_t stream_mask) {
   Isolate* isolate = Isolate::Current();
   CHECK_ISOLATE(isolate);
@@ -5714,10 +5711,23 @@
 }
 
 
+// '[' + ']' + '\0'.
+#define MINIMUM_OUTPUT_LENGTH 3
+
 static void StreamToConsumer(Dart_StreamConsumer consumer,
                              void* user_data,
                              char* output,
                              intptr_t output_length) {
+  if (output == NULL) {
+    return;
+  }
+  if (output_length <= MINIMUM_OUTPUT_LENGTH) {
+    return;
+  }
+  // We expect the first character to be the opening of an array.
+  ASSERT(output[0] == '[');
+  // We expect the last character to be the closing of an array.
+  ASSERT(output[output_length - 2] == ']');
   // Start stream.
   const char* kStreamName = "timeline";
   const intptr_t kDataSize = 64 * KB;
@@ -5727,9 +5737,13 @@
            0,
            user_data);
 
-  // Stream out data.
-  intptr_t cursor = 0;
-  intptr_t remaining = output_length;
+  // Stream out data. Skipping the array characters.
+  // Replace array close with '\0'.
+  output[output_length - 2] = '\0';
+  intptr_t cursor = 1;
+  output_length -= 1;
+  intptr_t remaining = output_length - 1;
+
   while (remaining >= kDataSize) {
     consumer(Dart_StreamConsumer_kData,
              kStreamName,
@@ -5773,15 +5787,11 @@
     // Nothing has been recorded.
     return false;
   }
-  // Suspend execution of other threads while serializing to JSON.
-  isolate->thread_registry()->SafepointThreads();
-  // TODO(johnmccutchan): Reclaim open blocks from isolate so we have a complete
-  // timeline.
+  // Reclaim all blocks cached by isolate.
+  Timeline::ReclaimIsolateBlocks();
   JSONStream js;
   IsolateTimelineEventFilter filter(isolate);
-  timeline_recorder->PrintJSON(&js, &filter);
-  // Resume execution of other threads.
-  isolate->thread_registry()->ResumeAllThreads();
+  timeline_recorder->PrintTraceEvent(&js, &filter);
 
   // Copy output.
   char* output = NULL;
@@ -5790,12 +5800,12 @@
   if (output != NULL) {
     // Add one for the '\0' character.
     output_length++;
+    StreamToConsumer(consumer, user_data, output, output_length);
+    // We stole the JSONStream's output buffer, free it.
+    free(output);
+    return output_length > MINIMUM_OUTPUT_LENGTH;
   }
-  StreamToConsumer(consumer, user_data, output, output_length);
-
-  // We stole the JSONStream's output buffer, free it.
-  free(output);
-  return true;
+  return false;
 }
 
 
@@ -5810,11 +5820,11 @@
     return false;
   }
 
-  // TODO(johnmccutchan): Reclaim all open blocks from the system so we have
-  // a complete timeline.
+  // Reclaim all blocks cached in the system.
+  Timeline::ReclaimAllBlocks();
   JSONStream js;
   TimelineEventFilter filter;
-  timeline_recorder->PrintJSON(&js, &filter);
+  timeline_recorder->PrintTraceEvent(&js, &filter);
 
   // Copy output.
   char* output = NULL;
@@ -5823,12 +5833,12 @@
   if (output != NULL) {
     // Add one for the '\0' character.
     output_length++;
+    StreamToConsumer(consumer, user_data, output, output_length);
+    // We stole the JSONStream's output buffer, free it.
+    free(output);
+    return output_length > MINIMUM_OUTPUT_LENGTH;
   }
-  StreamToConsumer(consumer, user_data, output, output_length);
-
-  // We stole the JSONStream's output buffer, free it.
-  free(output);
-  return true;
+  return false;
 }
 
 
@@ -5939,26 +5949,19 @@
 }
 
 
-static void Precompile(Isolate* isolate, Dart_Handle* result) {
-  ASSERT(isolate != NULL);
-  const Error& error = Error::Handle(isolate, Precompiler::CompileAll());
-  if (error.IsNull()) {
-    *result = Api::Success();
-  } else {
-    *result = Api::NewHandle(isolate, error.raw());
-  }
-}
-
-
-DART_EXPORT Dart_Handle Dart_Precompile() {
+DART_EXPORT Dart_Handle Dart_Precompile(
+    Dart_QualifiedFunctionName entry_points[]) {
   DARTSCOPE(Thread::Current());
   Dart_Handle result = Api::CheckAndFinalizePendingClasses(I);
   if (::Dart_IsError(result)) {
     return result;
   }
   CHECK_CALLBACK_STATE(I);
-  Precompile(I, &result);
-  return result;
+  const Error& error = Error::Handle(Precompiler::CompileAll(entry_points));
+  if (!error.IsNull()) {
+    return Api::NewHandle(I, error.raw());
+  }
+  return Api::Success();
 }
 
 
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index 39a7f3e..1d111e8 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -9300,6 +9300,7 @@
   Dart_TimelineDuration("testDurationEvent", 0, 1);
   // Check that it is in the output.
   TimelineEventRecorder* recorder = Timeline::recorder();
+  Timeline::ReclaimIsolateBlocks();
   JSONStream js;
   IsolateTimelineEventFilter filter(isolate);
   recorder->PrintJSON(&js, &filter);
@@ -9316,6 +9317,7 @@
   Dart_TimelineInstant("testInstantEvent");
   // Check that it is in the output.
   TimelineEventRecorder* recorder = Timeline::recorder();
+  Timeline::ReclaimIsolateBlocks();
   JSONStream js;
   IsolateTimelineEventFilter filter(isolate);
   recorder->PrintJSON(&js, &filter);
@@ -9337,6 +9339,7 @@
   Dart_TimelineAsyncEnd("testAsyncEvent", async_id);
   // Check that testAsync is not in the output.
   TimelineEventRecorder* recorder = Timeline::recorder();
+  Timeline::ReclaimIsolateBlocks();
   JSONStream js;
   TimelineEventFilter filter;
   recorder->PrintJSON(&js, &filter);
@@ -9359,6 +9362,7 @@
 
   // Check that it is in the output.
   TimelineEventRecorder* recorder = Timeline::recorder();
+  Timeline::ReclaimIsolateBlocks();
   JSONStream js;
   IsolateTimelineEventFilter filter(isolate);
   recorder->PrintJSON(&js, &filter);
@@ -9484,40 +9488,35 @@
 }
 
 
-UNIT_TEST_CASE(Timeline_Dart_GlobalTimelineGetTrace) {
-  const char* buffer = NULL;
-  intptr_t buffer_length = 0;
-  bool success = false;
+TEST_CASE(Timeline_Dart_GlobalTimelineGetTrace) {
+  const char* kScriptChars =
+    "bar() => 'z';\n"
+    "foo() => 'a';\n"
+    "main() => foo();\n";
 
   // Enable all streams.
   Dart_GlobalTimelineSetRecordedStreams(DART_TIMELINE_STREAM_ALL |
                                         DART_TIMELINE_STREAM_VM);
+  Dart_Handle lib;
   {
-    // Create isolate.
-    TestIsolateScope __test_isolate__;
-    Thread* __thread__ = Thread::Current();
-    ASSERT(__thread__->isolate() == __test_isolate__.isolate());
-    StackZone __zone__(__thread__);
-    HandleScope __hs__(__thread__);
-
-    // Load test script.
-    const char* kScriptChars =
-      "foo() => 'a';\n"
-      "main() => foo();\n";
-
-    Dart_Handle lib =
-        TestCase::LoadTestScript(kScriptChars, NULL);
-
-    // Invoke main, which will be compiled resulting in a compiler event in
-    // the timeline.
-    Dart_Handle result = Dart_Invoke(lib,
-                                     NewString("main"),
-                                     0,
-                                     NULL);
-    EXPECT_VALID(result);
+    // Add something to the VM stream.
+    TimelineDurationScope tds(Timeline::GetVMStream(),
+                              "TestVMDuration");
+    lib = TestCase::LoadTestScript(kScriptChars, NULL);
   }
 
-  // Isolate is shutdown now.
+  // Invoke main, which will be compiled resulting in a compiler event in
+  // the timeline.
+  Dart_Handle result = Dart_Invoke(lib,
+                                   NewString("main"),
+                                   0,
+                                   NULL);
+  EXPECT_VALID(result);
+
+  const char* buffer = NULL;
+  intptr_t buffer_length = 0;
+  bool success = false;
+
   // Grab the global trace.
   AppendData data;
   success = Dart_GlobalTimelineGetTrace(AppendStreamConsumer, &data);
@@ -9528,10 +9527,49 @@
   EXPECT(buffer != NULL);
 
   // Heartbeat test.
-  EXPECT_SUBSTRING("\"name\":\"InitializeIsolate\"", buffer);
+  EXPECT_SUBSTRING("\"name\":\"TestVMDuration\"", buffer);
   EXPECT_SUBSTRING("\"cat\":\"Compiler\"", buffer);
   EXPECT_SUBSTRING("\"name\":\"CompileFunction\"", buffer);
   EXPECT_SUBSTRING("\"function\":\"::_main\"", buffer);
+  EXPECT_NOTSUBSTRING("\"function\":\"::_bar\"", buffer);
+
+  // Free buffer allocated by AppendStreamConsumer
+  free(data.buffer);
+  data.buffer = NULL;
+  data.buffer_length = 0;
+
+  // Retrieving the global trace resulted in all open blocks being reclaimed.
+  // Add some new events and verify that both sets of events are present
+  // in the resulting trace.
+  {
+    // Add something to the VM stream.
+    TimelineDurationScope tds(Timeline::GetVMStream(),
+                              "TestVMDuration2");
+    // Invoke bar, which will be compiled resulting in a compiler event in
+    // the timeline.
+    result = Dart_Invoke(lib,
+                         NewString("bar"),
+                         0,
+                         NULL);
+  }
+
+  // Grab the global trace.
+  success = Dart_GlobalTimelineGetTrace(AppendStreamConsumer, &data);
+  EXPECT(success);
+  buffer = reinterpret_cast<char*>(data.buffer);
+  buffer_length = data.buffer_length;
+  EXPECT(buffer_length > 0);
+  EXPECT(buffer != NULL);
+
+  // Heartbeat test for old events.
+  EXPECT_SUBSTRING("\"name\":\"TestVMDuration\"", buffer);
+  EXPECT_SUBSTRING("\"cat\":\"Compiler\"", buffer);
+  EXPECT_SUBSTRING("\"name\":\"CompileFunction\"", buffer);
+  EXPECT_SUBSTRING("\"function\":\"::_main\"", buffer);
+
+  // Heartbeat test for new events.
+  EXPECT_SUBSTRING("\"name\":\"TestVMDuration2\"", buffer);
+  EXPECT_SUBSTRING("\"function\":\"::_bar\"", buffer);
 
   // Free buffer allocated by AppendStreamConsumer
   free(data.buffer);
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
index ca49376..0b61458 100644
--- a/runtime/vm/debugger.cc
+++ b/runtime/vm/debugger.cc
@@ -15,6 +15,7 @@
 #include "vm/globals.h"
 #include "vm/longjump.h"
 #include "vm/json_stream.h"
+#include "vm/message_handler.h"
 #include "vm/object.h"
 #include "vm/object_store.h"
 #include "vm/os.h"
@@ -42,6 +43,8 @@
             "handler instead.  This handler dispatches breakpoints to "
             "the VM service.");
 
+DECLARE_FLAG(bool, trace_isolates);
+
 
 Debugger::EventHandler* Debugger::event_handler_ = NULL;
 
@@ -320,8 +323,9 @@
     ASSERT(event.isolate_id() != ILLEGAL_ISOLATE_ID);
     if (type == DebuggerEvent::kIsolateInterrupted) {
       DebuggerStackTrace* trace = CollectStackTrace();
-      ASSERT(trace->Length() > 0);
-      event.set_top_frame(trace->FrameAt(0));
+      if (trace->Length() > 0) {
+        event.set_top_frame(trace->FrameAt(0));
+      }
       ASSERT(stack_trace_ == NULL);
       stack_trace_ = trace;
       resume_action_ = kContinue;
@@ -335,11 +339,31 @@
 }
 
 
-void Debugger::SignalIsolateInterrupted() {
+RawError* Debugger::SignalIsolateInterrupted() {
   if (HasEventHandler()) {
-    Debugger* debugger = Isolate::Current()->debugger();
-    debugger->SignalIsolateEvent(DebuggerEvent::kIsolateInterrupted);
+    SignalIsolateEvent(DebuggerEvent::kIsolateInterrupted);
   }
+  Dart_IsolateInterruptCallback callback = isolate_->InterruptCallback();
+  if (callback != NULL) {
+    if (!(*callback)()) {
+      if (FLAG_trace_isolates) {
+        OS::Print("[!] Embedder api: terminating isolate:\n"
+                  "\tisolate:    %s\n", isolate_->name());
+      }
+      // TODO(turnidge): We should give the message handler a way to
+      // detect when an isolate is unwinding.
+      isolate_->message_handler()->set_pause_on_exit(false);
+      const String& msg =
+          String::Handle(String::New("isolate terminated by embedder"));
+      return UnwindError::New(msg);
+    }
+  }
+
+  // If any error occurred while in the debug message loop, return it here.
+  const Error& error =
+      Error::Handle(isolate_, isolate_->object_store()->sticky_error());
+  isolate_->object_store()->clear_sticky_error();
+  return error.raw();
 }
 
 
@@ -685,9 +709,14 @@
   for (intptr_t i = 0; i < var_desc_len; i++) {
     RawLocalVarDescriptors::VarInfo var_info;
     var_descriptors_.GetInfo(i, &var_info);
-    const int8_t kind = var_info.kind();
-    if (kind == RawLocalVarDescriptors::kAsyncOperation) {
-      return GetContextVar(var_info.scope_id, var_info.index());
+    if (var_descriptors_.GetName(i) == Symbols::AsyncOperation().raw()) {
+      const int8_t kind = var_info.kind();
+      if (kind == RawLocalVarDescriptors::kStackVar) {
+        return GetStackVar(var_info.index());
+      } else {
+        ASSERT(kind == RawLocalVarDescriptors::kContextVar);
+        return GetContextVar(var_info.scope_id, var_info.index());
+      }
     }
   }
   return Object::null();
@@ -908,8 +937,7 @@
   intptr_t desc_index = desc_indices_[i];
   ASSERT(name != NULL);
 
-  const String& tmp = String::Handle(var_descriptors_.GetName(desc_index));
-  *name ^= String::IdentifierPrettyName(tmp);
+  *name = var_descriptors_.GetName(desc_index);
 
   RawLocalVarDescriptors::VarInfo var_info;
   var_descriptors_.GetInfo(desc_index, &var_info);
@@ -1071,19 +1099,21 @@
     JSONArray jsvars(jsobj, "vars");
     const int num_vars = NumLocalVariables();
     for (intptr_t v = 0; v < num_vars; v++) {
-      JSONObject jsvar(&jsvars);
       String& var_name = String::Handle();
       Instance& var_value = Instance::Handle();
       intptr_t token_pos;
       intptr_t end_token_pos;
       VariableAt(v, &var_name, &token_pos, &end_token_pos, &var_value);
-      jsvar.AddProperty("name", var_name.ToCString());
-      jsvar.AddProperty("value", var_value, !full);
-      // TODO(turnidge): Do we really want to provide this on every
-      // stack dump?  Should be associated with the function object, I
-      // think, and not the stack frame.
-      jsvar.AddProperty("_tokenPos", token_pos);
-      jsvar.AddProperty("_endTokenPos", end_token_pos);
+      if (var_name.raw() != Symbols::AsyncOperation().raw()) {
+        JSONObject jsvar(&jsvars);
+        jsvar.AddProperty("name", var_name.ToCString());
+        jsvar.AddProperty("value", var_value, !full);
+        // TODO(turnidge): Do we really want to provide this on every
+        // stack dump?  Should be associated with the function object, I
+        // think, and not the stack frame.
+        jsvar.AddProperty("_tokenPos", token_pos);
+        jsvar.AddProperty("_endTokenPos", end_token_pos);
+      }
     }
   }
 }
@@ -2539,6 +2569,8 @@
   event.set_breakpoint(bpt);
   Object& closure_or_null = Object::Handle(top_frame->GetAsyncOperation());
   if (!closure_or_null.IsNull()) {
+    ASSERT(closure_or_null.IsInstance());
+    ASSERT(Instance::Cast(closure_or_null).IsClosure());
     event.set_async_continuation(&closure_or_null);
     const Script& script = Script::Handle(top_frame->SourceScript());
     const TokenStream& tokens = TokenStream::Handle(script.tokens());
@@ -2553,13 +2585,15 @@
 }
 
 
-void Debugger::DebuggerStepCallback() {
+RawError* Debugger::DebuggerStepCallback() {
   ASSERT(isolate_->single_step());
   // We can't get here unless the debugger event handler enabled
   // single stepping.
   ASSERT(HasEventHandler());
   // Don't pause recursively.
-  if (IsPaused()) return;
+  if (IsPaused()) {
+    return Error::null();
+  }
 
   // Check whether we are in a Dart function that the user is
   // interested in. If we saved the frame pointer of a stack frame
@@ -2575,7 +2609,7 @@
     if (stepping_fp_ > frame->fp()) {
       // We are in a callee of the frame we're interested in.
       // Ignore this stepping break.
-      return;
+      return Error::null();
     } else if (frame->fp() > stepping_fp_) {
       // We returned from the "interesting frame", there can be no more
       // stepping breaks for it. Pause at the next appropriate location
@@ -2585,16 +2619,16 @@
   }
 
   if (!frame->IsDebuggable()) {
-    return;
+    return Error::null();
   }
   if (frame->TokenPos() == Scanner::kNoSourcePos) {
-    return;
+    return Error::null();
   }
 
   // Don't pause for a single step if there is a breakpoint set
   // at this location.
   if (HasActiveBreakpoint(frame->pc())) {
-    return;
+    return Error::null();
   }
 
   if (FLAG_verbose_debug) {
@@ -2610,15 +2644,21 @@
   SignalPausedEvent(frame, NULL);
   HandleSteppingRequest(stack_trace_);
   stack_trace_ = NULL;
+
+  // If any error occurred while in the debug message loop, return it here.
+  const Error& error =
+      Error::Handle(isolate_, isolate_->object_store()->sticky_error());
+  isolate_->object_store()->clear_sticky_error();
+  return error.raw();
 }
 
 
-void Debugger::SignalBpReached() {
+RawError* Debugger::SignalBpReached() {
   // We ignore this breakpoint when the VM is executing code invoked
   // by the debugger to evaluate variables values, or when we see a nested
   // breakpoint or exception event.
   if (ignore_breakpoints_ || IsPaused() || !HasEventHandler()) {
-    return;
+    return Error::null();
   }
   DebuggerStackTrace* stack_trace = CollectStackTrace();
   ASSERT(stack_trace->Length() > 0);
@@ -2672,7 +2712,7 @@
   }
 
   if (bpt_hit == NULL) {
-    return;
+    return Error::null();
   }
 
   if (FLAG_verbose_debug) {
@@ -2693,6 +2733,12 @@
   if (cbpt->IsInternal()) {
     RemoveInternalBreakpoints();
   }
+
+  // If any error occurred while in the debug message loop, return it here.
+  const Error& error =
+      Error::Handle(isolate_, isolate_->object_store()->sticky_error());
+  isolate_->object_store()->clear_sticky_error();
+  return error.raw();
 }
 
 
diff --git a/runtime/vm/debugger.h b/runtime/vm/debugger.h
index cf6562a..7c4cb8a 100644
--- a/runtime/vm/debugger.h
+++ b/runtime/vm/debugger.h
@@ -556,14 +556,14 @@
   RawObject* GetStaticField(const Class& cls,
                             const String& field_name);
 
-  void SignalBpReached();
-  void DebuggerStepCallback();
+  RawError* SignalBpReached();
+  RawError* DebuggerStepCallback();
+  RawError* SignalIsolateInterrupted();
 
   void BreakHere(const String& msg);
 
   void SignalExceptionThrown(const Instance& exc);
   void SignalIsolateEvent(DebuggerEvent::EventType type);
-  static void SignalIsolateInterrupted();
 
   RawCode* GetPatchedStubAddress(uword breakpoint_address);
 
diff --git a/runtime/vm/flow_graph_builder.cc b/runtime/vm/flow_graph_builder.cc
index d9188c7..9bbd9e0 100644
--- a/runtime/vm/flow_graph_builder.cc
+++ b/runtime/vm/flow_graph_builder.cc
@@ -1660,7 +1660,8 @@
   const bool negate_result = (node->kind() == Token::kISNOT);
   // All objects are instances of type T if Object type is a subtype of type T.
   const Type& object_type = Type::Handle(Z, Type::ObjectType());
-  if (type.IsInstantiated() && object_type.IsSubtypeOf(type, NULL)) {
+  if (type.IsInstantiated() &&
+      object_type.IsSubtypeOf(type, NULL, Heap::kOld)) {
     // Must evaluate left side.
     EffectGraphVisitor for_left_value(owner());
     node->left()->Visit(&for_left_value);
diff --git a/runtime/vm/flow_graph_compiler.cc b/runtime/vm/flow_graph_compiler.cc
index 9616d63..2884abf 100644
--- a/runtime/vm/flow_graph_compiler.cc
+++ b/runtime/vm/flow_graph_compiler.cc
@@ -117,6 +117,10 @@
 
 static void PrecompileModeHandler(bool value) {
   if (value) {
+#if defined(TARGET_ARCH_IA32)
+    FATAL("Precompilation not supported on IA32");
+#endif
+
     NooptModeHandler(true);
     FLAG_lazy_dispatchers = false;
     FLAG_interpret_irregexp = true;
@@ -204,6 +208,7 @@
         pending_deoptimization_env_(NULL),
         lazy_deopt_pc_offset_(Code::kInvalidPc),
         deopt_id_to_ic_data_(NULL),
+        edge_counters_array_(Array::ZoneHandle()),
         inlined_code_intervals_(Array::ZoneHandle(Object::empty_array().raw())),
         inline_id_to_function_(inline_id_to_function),
         caller_inline_id_(caller_inline_id) {
@@ -216,14 +221,15 @@
     for (intptr_t i = 0; i < len; i++) {
       (*deopt_id_to_ic_data_)[i] = NULL;
     }
-    const Array& old_saved_icdata = Array::Handle(zone(),
+    // TODO(fschneider): Abstract iteration into ICDataArrayIterator.
+    const Array& old_saved_ic_data = Array::Handle(zone(),
         flow_graph->function().ic_data_array());
     const intptr_t saved_len =
-        old_saved_icdata.IsNull() ? 0 : old_saved_icdata.Length();
-    for (intptr_t i = 0; i < saved_len; i++) {
-      ICData& icd = ICData::ZoneHandle(zone());
-      icd ^= old_saved_icdata.At(i);
-      (*deopt_id_to_ic_data_)[icd.deopt_id()] = &icd;
+        old_saved_ic_data.IsNull() ? 0 : old_saved_ic_data.Length();
+    for (intptr_t i = 1; i < saved_len; i++) {
+      ICData& ic_data = ICData::ZoneHandle(zone());
+      ic_data ^= old_saved_ic_data.At(i);
+      (*deopt_id_to_ic_data_)[ic_data.deopt_id()] = &ic_data;
     }
   }
   ASSERT(assembler != NULL);
@@ -278,6 +284,17 @@
     Instruction* first = flow_graph_.graph_entry()->normal_entry()->next();
     if (first->IsCheckStackOverflow()) first->RemoveFromGraph();
   }
+  if (!is_optimizing()) {
+    // Initialize edge counter array.
+    const intptr_t num_counters = flow_graph_.preorder().length();
+    const Array& edge_counters =
+        Array::Handle(Array::New(num_counters, Heap::kOld));
+    const Smi& zero_smi = Smi::Handle(Smi::New(0));
+    for (intptr_t i = 0; i < num_counters; ++i) {
+      edge_counters.SetAt(i, zero_smi);
+    }
+    edge_counters_array_ = edge_counters.raw();
+  }
 }
 
 
diff --git a/runtime/vm/flow_graph_compiler.h b/runtime/vm/flow_graph_compiler.h
index 783c851..3151009 100644
--- a/runtime/vm/flow_graph_compiler.h
+++ b/runtime/vm/flow_graph_compiler.h
@@ -387,11 +387,7 @@
 
   bool NeedsEdgeCounter(TargetEntryInstr* block);
 
-  void EmitEdgeCounter();
-
-#if !defined(TARGET_ARCH_ARM64) && !defined(TARGET_ARCH_MIPS)
-  static int32_t EdgeCounterIncrementSizeInBytes();
-#endif  // !TARGET_ARCH_ARM64 && !TARGET_ARCH_MIPS
+  void EmitEdgeCounter(intptr_t edge_id);
 
   void EmitOptimizedInstanceCall(const StubEntry& stub_entry,
                                  const ICData& ic_data,
@@ -537,6 +533,10 @@
     return inlined_code_intervals_;
   }
 
+  RawArray* edge_counters_array() const {
+    return edge_counters_array_.raw();
+  }
+
   RawArray* InliningIdToFunction() const;
 
   RawArray* CallerInliningIdMap() const;
@@ -731,6 +731,8 @@
 
   ZoneGrowableArray<const ICData*>* deopt_id_to_ic_data_;
 
+  Array& edge_counters_array_;
+
   Array& inlined_code_intervals_;
   const GrowableArray<const Function*>& inline_id_to_function_;
   const GrowableArray<intptr_t>& caller_inline_id_;
diff --git a/runtime/vm/flow_graph_compiler_arm.cc b/runtime/vm/flow_graph_compiler_arm.cc
index 3c3b1ea..e8b2cde 100644
--- a/runtime/vm/flow_graph_compiler_arm.cc
+++ b/runtime/vm/flow_graph_compiler_arm.cc
@@ -265,7 +265,8 @@
   const Register kInstanceReg = R0;
   Error& malformed_error = Error::Handle(zone());
   const Type& int_type = Type::Handle(zone(), Type::IntType());
-  const bool smi_is_ok = int_type.IsSubtypeOf(type, &malformed_error);
+  const bool smi_is_ok =
+      int_type.IsSubtypeOf(type, &malformed_error, Heap::kOld);
   // Malformed type should have been handled at graph construction time.
   ASSERT(smi_is_ok || malformed_error.IsNull());
   __ tst(kInstanceReg, Operand(kSmiTagMask));
@@ -305,7 +306,7 @@
         ASSERT(tp_argument.HasResolvedTypeClass());
         // Check if type argument is dynamic or Object.
         const Type& object_type = Type::Handle(zone(), Type::ObjectType());
-        if (object_type.IsSubtypeOf(tp_argument, NULL)) {
+        if (object_type.IsSubtypeOf(tp_argument, NULL, Heap::kOld)) {
           // Instance class test only necessary.
           return GenerateSubtype1TestCacheLookup(
               token_pos, type_class, is_instance_lbl, is_not_instance_lbl);
@@ -360,7 +361,8 @@
   if (smi_class.IsSubtypeOf(TypeArguments::Handle(zone()),
                             type_class,
                             TypeArguments::Handle(zone()),
-                            NULL)) {
+                            NULL,
+                            Heap::kOld)) {
     __ b(is_instance_lbl, EQ);
   } else {
     __ b(is_not_instance_lbl, EQ);
@@ -388,7 +390,8 @@
   }
   // Custom checking for numbers (Smi, Mint, Bigint and Double).
   // Note that instance is not Smi (checked above).
-  if (type.IsSubtypeOf(Type::Handle(zone(), Type::Number()), NULL)) {
+  if (type.IsSubtypeOf(
+        Type::Handle(zone(), Type::Number()), NULL, Heap::kOld)) {
     GenerateNumberTypeCheck(
         kClassIdReg, type, is_instance_lbl, is_not_instance_lbl);
     return false;
@@ -1109,7 +1112,7 @@
   ASSERT(assembler()->constant_pool_allowed());
   GenerateDeferredCode();
 
-  if (is_optimizing()) {
+  if (is_optimizing() && Compiler::allow_recompilation()) {
     // Leave enough space for patching in case of lazy deoptimization from
     // deferred code.
     for (intptr_t i = 0;
@@ -1180,44 +1183,30 @@
 }
 
 
-void FlowGraphCompiler::EmitEdgeCounter() {
+void FlowGraphCompiler::EmitEdgeCounter(intptr_t edge_id) {
   // We do not check for overflow when incrementing the edge counter.  The
   // function should normally be optimized long before the counter can
   // overflow; and though we do not reset the counters when we optimize or
   // deoptimize, there is a bound on the number of
   // optimization/deoptimization cycles we will attempt.
+  ASSERT(!edge_counters_array_.IsNull());
   ASSERT(assembler_->constant_pool_allowed());
-  const Array& counter = Array::ZoneHandle(zone(), Array::New(1, Heap::kOld));
-  counter.SetAt(0, Smi::Handle(zone(), Smi::New(0)));
   __ Comment("Edge counter");
-  __ LoadUniqueObject(R0, counter);
-  intptr_t increment_start = assembler_->CodeSize();
+  __ LoadObject(R0, edge_counters_array_);
 #if defined(DEBUG)
   bool old_use_far_branches = assembler_->use_far_branches();
   assembler_->set_use_far_branches(true);
 #endif  // DEBUG
-  __ ldr(IP, FieldAddress(R0, Array::element_offset(0)));
-  __ add(IP, IP, Operand(Smi::RawValue(1)));
-  __ StoreIntoSmiField(FieldAddress(R0, Array::element_offset(0)), IP);
-  int32_t size = assembler_->CodeSize() - increment_start;
-  if (isolate()->edge_counter_increment_size() == -1) {
-    isolate()->set_edge_counter_increment_size(size);
-  } else {
-    ASSERT(size == isolate()->edge_counter_increment_size());
-  }
+  __ LoadFieldFromOffset(kWord, R1, R0, Array::element_offset(edge_id));
+  __ add(R1, R1, Operand(Smi::RawValue(1)));
+  __ StoreIntoObjectNoBarrierOffset(
+      R0, Array::element_offset(edge_id), R1, Assembler::kOnlySmi);
 #if defined(DEBUG)
   assembler_->set_use_far_branches(old_use_far_branches);
 #endif  // DEBUG
 }
 
 
-int32_t FlowGraphCompiler::EdgeCounterIncrementSizeInBytes() {
-  const int32_t size = Isolate::Current()->edge_counter_increment_size();
-  ASSERT(size != -1);
-  return size;
-}
-
-
 void FlowGraphCompiler::EmitOptimizedInstanceCall(
     const StubEntry& stub_entry,
     const ICData& ic_data,
diff --git a/runtime/vm/flow_graph_compiler_arm64.cc b/runtime/vm/flow_graph_compiler_arm64.cc
index d1e5a71..76da180 100644
--- a/runtime/vm/flow_graph_compiler_arm64.cc
+++ b/runtime/vm/flow_graph_compiler_arm64.cc
@@ -257,7 +257,8 @@
   const Register kInstanceReg = R0;
   Error& malformed_error = Error::Handle(zone());
   const Type& int_type = Type::Handle(zone(), Type::IntType());
-  const bool smi_is_ok = int_type.IsSubtypeOf(type, &malformed_error);
+  const bool smi_is_ok =
+      int_type.IsSubtypeOf(type, &malformed_error, Heap::kOld);
   // Malformed type should have been handled at graph construction time.
   ASSERT(smi_is_ok || malformed_error.IsNull());
   __ tsti(kInstanceReg, Immediate(kSmiTagMask));
@@ -297,7 +298,7 @@
         ASSERT(tp_argument.HasResolvedTypeClass());
         // Check if type argument is dynamic or Object.
         const Type& object_type = Type::Handle(zone(), Type::ObjectType());
-        if (object_type.IsSubtypeOf(tp_argument, NULL)) {
+        if (object_type.IsSubtypeOf(tp_argument, NULL, Heap::kOld)) {
           // Instance class test only necessary.
           return GenerateSubtype1TestCacheLookup(
               token_pos, type_class, is_instance_lbl, is_not_instance_lbl);
@@ -352,7 +353,8 @@
   if (smi_class.IsSubtypeOf(TypeArguments::Handle(zone()),
                             type_class,
                             TypeArguments::Handle(zone()),
-                            NULL)) {
+                            NULL,
+                            Heap::kOld)) {
     __ b(is_instance_lbl, EQ);
   } else {
     __ b(is_not_instance_lbl, EQ);
@@ -380,7 +382,8 @@
   }
   // Custom checking for numbers (Smi, Mint, Bigint and Double).
   // Note that instance is not Smi (checked above).
-  if (type.IsSubtypeOf(Type::Handle(zone(), Type::Number()), NULL)) {
+  if (type.IsSubtypeOf(
+          Type::Handle(zone(), Type::Number()), NULL, Heap::kOld)) {
     GenerateNumberTypeCheck(
         kClassIdReg, type, is_instance_lbl, is_not_instance_lbl);
     return false;
@@ -1110,7 +1113,7 @@
   ASSERT(assembler()->constant_pool_allowed());
   GenerateDeferredCode();
 
-  if (is_optimizing()) {
+  if (is_optimizing() && Compiler::allow_recompilation()) {
     // Leave enough space for patching in case of lazy deoptimization from
     // deferred code.
     for (intptr_t i = 0;
@@ -1178,20 +1181,19 @@
 }
 
 
-void FlowGraphCompiler::EmitEdgeCounter() {
+void FlowGraphCompiler::EmitEdgeCounter(intptr_t edge_id) {
   // We do not check for overflow when incrementing the edge counter.  The
   // function should normally be optimized long before the counter can
   // overflow; and though we do not reset the counters when we optimize or
   // deoptimize, there is a bound on the number of
   // optimization/deoptimization cycles we will attempt.
+  ASSERT(!edge_counters_array_.IsNull());
   ASSERT(assembler_->constant_pool_allowed());
-  const Array& counter = Array::ZoneHandle(zone(), Array::New(1, Heap::kOld));
-  counter.SetAt(0, Smi::Handle(zone(), Smi::New(0)));
   __ Comment("Edge counter");
-  __ LoadUniqueObject(R0, counter);
-  __ LoadFieldFromOffset(TMP, R0, Array::element_offset(0));
+  __ LoadObject(R0, edge_counters_array_);
+  __ LoadFieldFromOffset(TMP, R0, Array::element_offset(edge_id));
   __ add(TMP, TMP, Operand(Smi::RawValue(1)));
-  __ StoreFieldToOffset(TMP, R0, Array::element_offset(0));
+  __ StoreFieldToOffset(TMP, R0, Array::element_offset(edge_id));
 }
 
 
diff --git a/runtime/vm/flow_graph_compiler_ia32.cc b/runtime/vm/flow_graph_compiler_ia32.cc
index a8e9da5..385a30c 100644
--- a/runtime/vm/flow_graph_compiler_ia32.cc
+++ b/runtime/vm/flow_graph_compiler_ia32.cc
@@ -269,7 +269,8 @@
   const Register kInstanceReg = EAX;
   Error& malformed_error = Error::Handle(zone());
   const Type& int_type = Type::Handle(zone(), Type::IntType());
-  const bool smi_is_ok = int_type.IsSubtypeOf(type, &malformed_error);
+  const bool smi_is_ok =
+      int_type.IsSubtypeOf(type, &malformed_error, Heap::kOld);
   // Malformed type should have been handled at graph construction time.
   ASSERT(smi_is_ok || malformed_error.IsNull());
   __ testl(kInstanceReg, Immediate(kSmiTagMask));
@@ -309,7 +310,7 @@
         ASSERT(tp_argument.HasResolvedTypeClass());
         // Check if type argument is dynamic or Object.
         const Type& object_type = Type::Handle(zone(), Type::ObjectType());
-        if (object_type.IsSubtypeOf(tp_argument, NULL)) {
+        if (object_type.IsSubtypeOf(tp_argument, NULL, Heap::kOld)) {
           // Instance class test only necessary.
           return GenerateSubtype1TestCacheLookup(
               token_pos, type_class, is_instance_lbl, is_not_instance_lbl);
@@ -363,7 +364,8 @@
   if (smi_class.IsSubtypeOf(TypeArguments::Handle(zone()),
                             type_class,
                             TypeArguments::Handle(zone()),
-                            NULL)) {
+                            NULL,
+                            Heap::kOld)) {
     __ j(ZERO, is_instance_lbl);
   } else {
     __ j(ZERO, is_not_instance_lbl);
@@ -393,7 +395,8 @@
   }
   // Custom checking for numbers (Smi, Mint, Bigint and Double).
   // Note that instance is not Smi (checked above).
-  if (type.IsSubtypeOf(Type::Handle(zone(), Type::Number()), NULL)) {
+  if (type.IsSubtypeOf(
+          Type::Handle(zone(), Type::Number()), NULL, Heap::kOld)) {
     GenerateNumberTypeCheck(
         kClassIdReg, type, is_instance_lbl, is_not_instance_lbl);
     return false;
@@ -1128,7 +1131,7 @@
   __ int3();
   GenerateDeferredCode();
 
-  if (is_optimizing()) {
+  if (is_optimizing() && Compiler::allow_recompilation()) {
     // Leave enough space for patching in case of lazy deoptimization from
     // deferred code.
     __ nop(CallPattern::pattern_length_in_bytes());
@@ -1210,31 +1213,16 @@
 }
 
 
-void FlowGraphCompiler::EmitEdgeCounter() {
+void FlowGraphCompiler::EmitEdgeCounter(intptr_t edge_id) {
   // We do not check for overflow when incrementing the edge counter.  The
   // function should normally be optimized long before the counter can
   // overflow; and though we do not reset the counters when we optimize or
   // deoptimize, there is a bound on the number of
   // optimization/deoptimization cycles we will attempt.
-  const Array& counter = Array::ZoneHandle(zone(), Array::New(1, Heap::kOld));
-  counter.SetAt(0, Smi::Handle(zone(), Smi::New(0)));
+  ASSERT(!edge_counters_array_.IsNull());
   __ Comment("Edge counter");
-  __ LoadObject(EAX, counter);
-  intptr_t increment_start = assembler_->CodeSize();
-  __ IncrementSmiField(FieldAddress(EAX, Array::element_offset(0)), 1);
-  int32_t size = assembler_->CodeSize() - increment_start;
-  if (isolate()->edge_counter_increment_size() == -1) {
-    isolate()->set_edge_counter_increment_size(size);
-  } else {
-    ASSERT(size == isolate()->edge_counter_increment_size());
-  }
-}
-
-
-int32_t FlowGraphCompiler::EdgeCounterIncrementSizeInBytes() {
-  const int32_t size = Isolate::Current()->edge_counter_increment_size();
-  ASSERT(size != -1);
-  return size;
+  __ LoadObject(EAX, edge_counters_array_);
+  __ IncrementSmiField(FieldAddress(EAX, Array::element_offset(edge_id)), 1);
 }
 
 
diff --git a/runtime/vm/flow_graph_compiler_mips.cc b/runtime/vm/flow_graph_compiler_mips.cc
index 120795c..0cc605c 100644
--- a/runtime/vm/flow_graph_compiler_mips.cc
+++ b/runtime/vm/flow_graph_compiler_mips.cc
@@ -257,7 +257,8 @@
   const Register kInstanceReg = A0;
   Error& malformed_error = Error::Handle(zone());
   const Type& int_type = Type::Handle(zone(), Type::IntType());
-  const bool smi_is_ok = int_type.IsSubtypeOf(type, &malformed_error);
+  const bool smi_is_ok =
+      int_type.IsSubtypeOf(type, &malformed_error, Heap::kOld);
   // Malformed type should have been handled at graph construction time.
   ASSERT(smi_is_ok || malformed_error.IsNull());
   __ andi(CMPRES1, kInstanceReg, Immediate(kSmiTagMask));
@@ -296,7 +297,7 @@
         ASSERT(tp_argument.HasResolvedTypeClass());
         // Check if type argument is dynamic or Object.
         const Type& object_type = Type::Handle(zone(), Type::ObjectType());
-        if (object_type.IsSubtypeOf(tp_argument, NULL)) {
+        if (object_type.IsSubtypeOf(tp_argument, NULL, Heap::kOld)) {
           // Instance class test only necessary.
           return GenerateSubtype1TestCacheLookup(
               token_pos, type_class, is_instance_lbl, is_not_instance_lbl);
@@ -351,7 +352,8 @@
   if (smi_class.IsSubtypeOf(TypeArguments::Handle(zone()),
                             type_class,
                             TypeArguments::Handle(zone()),
-                            NULL)) {
+                            NULL,
+                            Heap::kOld)) {
     __ beq(T0, ZR, is_instance_lbl);
   } else {
     __ beq(T0, ZR, is_not_instance_lbl);
@@ -377,7 +379,8 @@
   }
   // Custom checking for numbers (Smi, Mint, Bigint and Double).
   // Note that instance is not Smi (checked above).
-  if (type.IsSubtypeOf(Type::Handle(zone(), Type::Number()), NULL)) {
+  if (type.IsSubtypeOf(
+          Type::Handle(zone(), Type::Number()), NULL, Heap::kOld)) {
     GenerateNumberTypeCheck(
         kClassIdReg, type, is_instance_lbl, is_not_instance_lbl);
     return false;
@@ -1126,7 +1129,7 @@
   __ break_(0);
   GenerateDeferredCode();
 
-  if (is_optimizing()) {
+  if (is_optimizing() && Compiler::allow_recompilation()) {
     // Leave enough space for patching in case of lazy deoptimization from
     // deferred code.
     for (intptr_t i = 0;
@@ -1198,19 +1201,18 @@
 }
 
 
-void FlowGraphCompiler::EmitEdgeCounter() {
+void FlowGraphCompiler::EmitEdgeCounter(intptr_t edge_id) {
   // We do not check for overflow when incrementing the edge counter.  The
   // function should normally be optimized long before the counter can
   // overflow; and though we do not reset the counters when we optimize or
   // deoptimize, there is a bound on the number of
   // optimization/deoptimization cycles we will attempt.
-  const Array& counter = Array::ZoneHandle(zone(), Array::New(1, Heap::kOld));
-  counter.SetAt(0, Smi::Handle(zone(), Smi::New(0)));
+  ASSERT(!edge_counters_array_.IsNull());
   __ Comment("Edge counter");
-  __ LoadUniqueObject(T0, counter);
-  __ lw(T1, FieldAddress(T0, Array::element_offset(0)));
+  __ LoadObject(T0, edge_counters_array_);
+  __ LoadFieldFromOffset(T1, T0, Array::element_offset(edge_id));
   __ AddImmediate(T1, T1, Smi::RawValue(1));
-  __ sw(T1, FieldAddress(T0, Array::element_offset(0)));
+  __ StoreFieldToOffset(T1, T0, Array::element_offset(edge_id));
 }
 
 
diff --git a/runtime/vm/flow_graph_compiler_x64.cc b/runtime/vm/flow_graph_compiler_x64.cc
index de1b944..7d407f0 100644
--- a/runtime/vm/flow_graph_compiler_x64.cc
+++ b/runtime/vm/flow_graph_compiler_x64.cc
@@ -266,7 +266,8 @@
   const Register kInstanceReg = RAX;
   Error& malformed_error = Error::Handle(zone());
   const Type& int_type = Type::Handle(zone(), Type::IntType());
-  const bool smi_is_ok = int_type.IsSubtypeOf(type, &malformed_error);
+  const bool smi_is_ok =
+      int_type.IsSubtypeOf(type, &malformed_error, Heap::kOld);
   // Malformed type should have been handled at graph construction time.
   ASSERT(smi_is_ok || malformed_error.IsNull());
   __ testq(kInstanceReg, Immediate(kSmiTagMask));
@@ -306,7 +307,7 @@
         ASSERT(tp_argument.HasResolvedTypeClass());
         // Check if type argument is dynamic or Object.
         const Type& object_type = Type::Handle(zone(), Type::ObjectType());
-        if (object_type.IsSubtypeOf(tp_argument, NULL)) {
+        if (object_type.IsSubtypeOf(tp_argument, NULL, Heap::kOld)) {
           // Instance class test only necessary.
           return GenerateSubtype1TestCacheLookup(
               token_pos, type_class, is_instance_lbl, is_not_instance_lbl);
@@ -360,7 +361,8 @@
   if (smi_class.IsSubtypeOf(TypeArguments::Handle(zone()),
                             type_class,
                             TypeArguments::Handle(zone()),
-                            NULL)) {
+                            NULL,
+                            Heap::kOld)) {
     __ j(ZERO, is_instance_lbl);
   } else {
     __ j(ZERO, is_not_instance_lbl);
@@ -388,7 +390,8 @@
   }
   // Custom checking for numbers (Smi, Mint, Bigint and Double).
   // Note that instance is not Smi (checked above).
-  if (type.IsSubtypeOf(Type::Handle(zone(), Type::Number()), NULL)) {
+  if (type.IsSubtypeOf(
+      Type::Handle(zone(), Type::Number()), NULL, Heap::kOld)) {
     GenerateNumberTypeCheck(
         kClassIdReg, type, is_instance_lbl, is_not_instance_lbl);
     return false;
@@ -1128,7 +1131,7 @@
   // Emit function patching code. This will be swapped with the first 13 bytes
   // at entry point.
 
-  if (is_optimizing()) {
+  if (is_optimizing() && Compiler::allow_recompilation()) {
     // Leave enough space for patching in case of lazy deoptimization from
     // deferred code.
     __ nop(ShortCallPattern::pattern_length_in_bytes());
@@ -1210,32 +1213,17 @@
 }
 
 
-void FlowGraphCompiler::EmitEdgeCounter() {
+void FlowGraphCompiler::EmitEdgeCounter(intptr_t edge_id) {
   // We do not check for overflow when incrementing the edge counter.  The
   // function should normally be optimized long before the counter can
   // overflow; and though we do not reset the counters when we optimize or
   // deoptimize, there is a bound on the number of
   // optimization/deoptimization cycles we will attempt.
+  ASSERT(!edge_counters_array_.IsNull());
   ASSERT(assembler_->constant_pool_allowed());
-  const Array& counter = Array::ZoneHandle(zone(), Array::New(1, Heap::kOld));
-  counter.SetAt(0, Smi::Handle(zone(), Smi::New(0)));
   __ Comment("Edge counter");
-  __ LoadUniqueObject(RAX, counter);
-  intptr_t increment_start = assembler_->CodeSize();
-  __ IncrementSmiField(FieldAddress(RAX, Array::element_offset(0)), 1);
-  int32_t size = assembler_->CodeSize() - increment_start;
-  if (isolate()->edge_counter_increment_size() == -1) {
-    isolate()->set_edge_counter_increment_size(size);
-  } else {
-    ASSERT(size == isolate()->edge_counter_increment_size());
-  }
-}
-
-
-int32_t FlowGraphCompiler::EdgeCounterIncrementSizeInBytes() {
-  const int32_t size = Isolate::Current()->edge_counter_increment_size();
-  ASSERT(size != -1);
-  return size;
+  __ LoadObject(RAX, edge_counters_array_);
+  __ IncrementSmiField(FieldAddress(RAX, Array::element_offset(edge_id)), 1);
 }
 
 
diff --git a/runtime/vm/flow_graph_inliner.cc b/runtime/vm/flow_graph_inliner.cc
index 09cc2c7..5cda51f 100644
--- a/runtime/vm/flow_graph_inliner.cc
+++ b/runtime/vm/flow_graph_inliner.cc
@@ -687,13 +687,6 @@
       ParsedFunction* parsed_function;
       {
         CSTAT_TIMER_SCOPE(thread(), graphinliner_parse_timer);
-        if (!Compiler::always_optimize()) {
-          const Error& error = Error::Handle(Z,
-              Compiler::EnsureUnoptimizedCode(Thread::Current(), function));
-          if (!error.IsNull()) {
-            Exceptions::PropagateError(error);
-          }
-        }
         parsed_function = GetParsedFunction(function, &in_cache);
       }
 
diff --git a/runtime/vm/flow_graph_optimizer.cc b/runtime/vm/flow_graph_optimizer.cc
index 54a571a..888017e 100644
--- a/runtime/vm/flow_graph_optimizer.cc
+++ b/runtime/vm/flow_graph_optimizer.cc
@@ -224,6 +224,12 @@
     ArgumentsDescriptor args_desc(args_desc_array);
     const Class& receiver_class = Class::Handle(Z,
         isolate()->class_table()->At(class_ids[0]));
+    if (!receiver_class.is_finalized()) {
+      // Do not eagerly finalize classes. ResolveDynamicForReceiverClass can
+      // cause class finalization, since callee's receiver class may not be
+      // finalized yet.
+      return false;
+    }
     const Function& function = Function::Handle(Z,
         Resolver::ResolveDynamicForReceiverClass(
             receiver_class,
@@ -4002,7 +4008,8 @@
         TypeArguments::Handle(Z),
         type_class,
         TypeArguments::Handle(Z),
-        NULL);
+        NULL,
+        Heap::kOld);
     results->Add(cls.id());
     results->Add(is_subtype);
     if (prev.IsNull()) {
@@ -4093,7 +4100,8 @@
     const bool smi_is_subtype = cls.IsSubtypeOf(TypeArguments::Handle(),
                                                 type_class,
                                                 TypeArguments::Handle(),
-                                                NULL);
+                                                NULL,
+                                                Heap::kOld);
     results->Add((*results)[results->length() - 2]);
     results->Add((*results)[results->length() - 2]);
     for (intptr_t i = results->length() - 3; i > 1; --i) {
diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc
index a40af6f..e2d1ad8 100644
--- a/runtime/vm/intermediate_language.cc
+++ b/runtime/vm/intermediate_language.cc
@@ -974,6 +974,7 @@
     last = it.Current();
   }
   set_last_instruction(last);
+  if (last->IsGoto()) last->AsGoto()->set_block(this);
 
   return true;
 }
@@ -2032,7 +2033,8 @@
         TypeArguments::Cast(constant_type_args->value());
     Error& bound_error = Error::Handle();
     const AbstractType& new_dst_type = AbstractType::Handle(
-        dst_type().InstantiateFrom(instantiator_type_args, &bound_error));
+        dst_type().InstantiateFrom(
+            instantiator_type_args, &bound_error, NULL, Heap::kOld));
     // If dst_type is instantiated to dynamic or Object, skip the test.
     if (!new_dst_type.IsMalformedOrMalbounded() && bound_error.IsNull() &&
         (new_dst_type.IsDynamicType() || new_dst_type.IsObjectType())) {
@@ -2317,7 +2319,7 @@
 
 static bool MaybeNumber(CompileType* type) {
   ASSERT(Type::Handle(Type::Number()).IsMoreSpecificThan(
-         Type::Handle(Type::Number()), NULL));
+         Type::Handle(Type::Number()), NULL, Heap::kOld));
   return type->ToAbstractType()->IsDynamicType()
       || type->ToAbstractType()->IsObjectType()
       || type->ToAbstractType()->IsTypeParameter()
@@ -2725,7 +2727,7 @@
   __ Bind(compiler->GetJumpLabel(this));
   if (!compiler->is_optimizing()) {
     if (compiler->NeedsEdgeCounter(this)) {
-      compiler->EmitEdgeCounter();
+      compiler->EmitEdgeCounter(preorder_number());
     }
     // The deoptimization descriptor points after the edge counter code for
     // uniformity with ARM and MIPS, where we can reuse pattern matching
diff --git a/runtime/vm/intermediate_language.h b/runtime/vm/intermediate_language.h
index 60f2db9..68a8800 100644
--- a/runtime/vm/intermediate_language.h
+++ b/runtime/vm/intermediate_language.h
@@ -610,13 +610,12 @@
 
   explicit Instruction(intptr_t deopt_id = Isolate::kNoDeoptId)
       : deopt_id_(deopt_id),
-        lifetime_position_(-1),
+        lifetime_position_(kNoPlaceId),
         previous_(NULL),
         next_(NULL),
         env_(NULL),
         locs_(NULL),
-        inlining_id_(-1),
-        place_id_(kNoPlaceId) { }
+        inlining_id_(-1) { }
 
   virtual ~Instruction() { }
 
@@ -889,13 +888,15 @@
   };
 
   intptr_t deopt_id_;
-  intptr_t lifetime_position_;  // Position used by register allocator.
+  union {
+    intptr_t lifetime_position_;  // Position used by register allocator.
+    intptr_t place_id_;
+  };
   Instruction* previous_;
   Instruction* next_;
   Environment* env_;
   LocationSummary* locs_;
   intptr_t inlining_id_;
-  intptr_t place_id_;
 
   DISALLOW_COPY_AND_ASSIGN(Instruction);
 };
@@ -2158,6 +2159,7 @@
  public:
   explicit GotoInstr(JoinEntryInstr* entry)
     : TemplateInstruction(Isolate::Current()->GetNextDeoptId()),
+      block_(NULL),
       successor_(entry),
       edge_weight_(0.0),
       parallel_move_(NULL) {
@@ -2165,6 +2167,9 @@
 
   DECLARE_INSTRUCTION(Goto)
 
+  BlockEntryInstr* block() const { return block_; }
+  void set_block(BlockEntryInstr* block) { block_ = block; }
+
   JoinEntryInstr* successor() const { return successor_; }
   void set_successor(JoinEntryInstr* successor) { successor_ = successor; }
   virtual intptr_t SuccessorCount() const;
@@ -2206,6 +2211,7 @@
   virtual void PrintTo(BufferFormatter* f) const;
 
  private:
+  BlockEntryInstr* block_;
   JoinEntryInstr* successor_;
   double edge_weight_;
 
diff --git a/runtime/vm/intermediate_language_arm.cc b/runtime/vm/intermediate_language_arm.cc
index 8fb50b4..026d0ed 100644
--- a/runtime/vm/intermediate_language_arm.cc
+++ b/runtime/vm/intermediate_language_arm.cc
@@ -6642,13 +6642,10 @@
 void GotoInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   if (!compiler->is_optimizing()) {
     if (FLAG_emit_edge_counters) {
-      compiler->EmitEdgeCounter();
+      compiler->EmitEdgeCounter(block()->preorder_number());
     }
     // Add a deoptimization descriptor for deoptimizing instructions that
-    // may be inserted before this instruction.  On ARM this descriptor
-    // points after the edge counter code so that we can reuse the same
-    // pattern matching code as at call sites, which matches backwards from
-    // the end of the pattern.
+    // may be inserted before this instruction.
     compiler->AddCurrentDescriptor(RawPcDescriptors::kDeopt,
                                    GetDeoptId(),
                                    Scanner::kNoSourcePos);
diff --git a/runtime/vm/intermediate_language_arm64.cc b/runtime/vm/intermediate_language_arm64.cc
index 345757c..16ce91f 100644
--- a/runtime/vm/intermediate_language_arm64.cc
+++ b/runtime/vm/intermediate_language_arm64.cc
@@ -5408,13 +5408,10 @@
 void GotoInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   if (!compiler->is_optimizing()) {
     if (FLAG_emit_edge_counters) {
-      compiler->EmitEdgeCounter();
+      compiler->EmitEdgeCounter(block()->preorder_number());
     }
     // Add a deoptimization descriptor for deoptimizing instructions that
-    // may be inserted before this instruction.  On ARM64 this descriptor
-    // points after the edge counter code so that we can reuse the same
-    // pattern matching code as at call sites, which matches backwards from
-    // the end of the pattern.
+    // may be inserted before this instruction.
     compiler->AddCurrentDescriptor(RawPcDescriptors::kDeopt,
                                    GetDeoptId(),
                                    Scanner::kNoSourcePos);
diff --git a/runtime/vm/intermediate_language_ia32.cc b/runtime/vm/intermediate_language_ia32.cc
index 23c3f21..62d8bef 100644
--- a/runtime/vm/intermediate_language_ia32.cc
+++ b/runtime/vm/intermediate_language_ia32.cc
@@ -6542,13 +6542,10 @@
 void GotoInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   if (!compiler->is_optimizing()) {
     if (FLAG_emit_edge_counters) {
-      compiler->EmitEdgeCounter();
+      compiler->EmitEdgeCounter(block()->preorder_number());
     }
     // Add a deoptimization descriptor for deoptimizing instructions that
-    // may be inserted before this instruction.  This descriptor points
-    // after the edge counter for uniformity with ARM and MIPS, where we can
-    // reuse pattern matching that matches backwards from the end of the
-    // pattern.
+    // may be inserted before this instruction.
     compiler->AddCurrentDescriptor(RawPcDescriptors::kDeopt,
                                    GetDeoptId(),
                                    Scanner::kNoSourcePos);
diff --git a/runtime/vm/intermediate_language_mips.cc b/runtime/vm/intermediate_language_mips.cc
index 1cd334d..15fc876 100644
--- a/runtime/vm/intermediate_language_mips.cc
+++ b/runtime/vm/intermediate_language_mips.cc
@@ -5382,13 +5382,10 @@
   __ Comment("GotoInstr");
   if (!compiler->is_optimizing()) {
     if (FLAG_emit_edge_counters) {
-      compiler->EmitEdgeCounter();
+      compiler->EmitEdgeCounter(block()->preorder_number());
     }
     // Add a deoptimization descriptor for deoptimizing instructions that
-    // may be inserted before this instruction.  On MIPS this descriptor
-    // points after the edge counter code so that we can reuse the same
-    // pattern matching code as at call sites, which matches backwards from
-    // the end of the pattern.
+    // may be inserted before this instruction.
     compiler->AddCurrentDescriptor(RawPcDescriptors::kDeopt,
                                    GetDeoptId(),
                                    Scanner::kNoSourcePos);
diff --git a/runtime/vm/intermediate_language_x64.cc b/runtime/vm/intermediate_language_x64.cc
index 31476e1..b58e4d1 100644
--- a/runtime/vm/intermediate_language_x64.cc
+++ b/runtime/vm/intermediate_language_x64.cc
@@ -6182,13 +6182,10 @@
 void GotoInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   if (!compiler->is_optimizing()) {
     if (FLAG_emit_edge_counters) {
-      compiler->EmitEdgeCounter();
+      compiler->EmitEdgeCounter(block()->preorder_number());
     }
     // Add a deoptimization descriptor for deoptimizing instructions that
-    // may be inserted before this instruction.  This descriptor points
-    // after the edge counter for uniformity with ARM and MIPS, where we can
-    // reuse pattern matching that matches backwards from the end of the
-    // pattern.
+    // may be inserted before this instruction.
     compiler->AddCurrentDescriptor(RawPcDescriptors::kDeopt,
                                    GetDeoptId(),
                                    Scanner::kNoSourcePos);
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 685e457..9229d81 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -149,6 +149,27 @@
 }
 
 
+void Isolate::SendInternalLibMessage(LibMsgId msg_id, uint64_t capability) {
+  const Array& msg = Array::Handle(Array::New(3));
+  Object& element = Object::Handle();
+
+  element = Smi::New(Message::kIsolateLibOOBMsg);
+  msg.SetAt(0, element);
+  element = Smi::New(msg_id);
+  msg.SetAt(1, element);
+  element = Capability::New(capability);
+  msg.SetAt(2, element);
+
+  uint8_t* data = NULL;
+  MessageWriter writer(&data, &allocator, false);
+  writer.WriteMessage(msg);
+
+  PortMap::PostMessage(new Message(main_port(),
+                                   data, writer.BytesWritten(),
+                                   Message::kOOBPriority));
+}
+
+
 class IsolateMessageHandler : public MessageHandler {
  public:
   explicit IsolateMessageHandler(Isolate* isolate);
@@ -167,30 +188,10 @@
   bool IsCurrentIsolate() const;
   virtual Isolate* isolate() const { return isolate_; }
 
-  // Keep both these enums in sync with isolate_patch.dart.
-  // The different Isolate API message types.
-  enum {
-    kPauseMsg = 1,
-    kResumeMsg = 2,
-    kPingMsg = 3,
-    kKillMsg = 4,
-    kAddExitMsg = 5,
-    kDelExitMsg = 6,
-    kAddErrorMsg = 7,
-    kDelErrorMsg = 8,
-    kErrorFatalMsg = 9,
-  };
-  // The different Isolate API message priorities for ping and kill messages.
-  enum {
-    kImmediateAction = 0,
-    kBeforeNextEventAction = 1,
-    kAsEventAction = 2
-  };
-
  private:
   // A result of false indicates that the isolate should terminate the
   // processing of further events.
-  bool HandleLibMessage(const Array& message);
+  RawError* HandleLibMessage(const Array& message);
 
   bool ProcessUnhandledException(const Error& result);
   Isolate* isolate_;
@@ -213,50 +214,50 @@
 // Isolate library OOB messages are fixed sized arrays which have the
 // following format:
 // [ OOB dispatch, Isolate library dispatch, <message specific data> ]
-bool IsolateMessageHandler::HandleLibMessage(const Array& message) {
-  if (message.Length() < 2) return true;
+RawError* IsolateMessageHandler::HandleLibMessage(const Array& message) {
+  if (message.Length() < 2) return Error::null();
   const Object& type = Object::Handle(I, message.At(1));
-  if (!type.IsSmi()) return true;
+  if (!type.IsSmi()) return Error::null();
   const intptr_t msg_type = Smi::Cast(type).Value();
   switch (msg_type) {
-    case kPauseMsg: {
+    case Isolate::kPauseMsg: {
       // [ OOB, kPauseMsg, pause capability, resume capability ]
-      if (message.Length() != 4) return true;
+      if (message.Length() != 4) return Error::null();
       Object& obj = Object::Handle(I, message.At(2));
-      if (!I->VerifyPauseCapability(obj)) return true;
+      if (!I->VerifyPauseCapability(obj)) return Error::null();
       obj = message.At(3);
-      if (!obj.IsCapability()) return true;
+      if (!obj.IsCapability()) return Error::null();
       if (I->AddResumeCapability(Capability::Cast(obj))) {
         increment_paused();
       }
       break;
     }
-    case kResumeMsg: {
+    case Isolate::kResumeMsg: {
       // [ OOB, kResumeMsg, pause capability, resume capability ]
-      if (message.Length() != 4) return true;
+      if (message.Length() != 4) return Error::null();
       Object& obj = Object::Handle(I, message.At(2));
-      if (!I->VerifyPauseCapability(obj)) return true;
+      if (!I->VerifyPauseCapability(obj)) return Error::null();
       obj = message.At(3);
-      if (!obj.IsCapability()) return true;
+      if (!obj.IsCapability()) return Error::null();
       if (I->RemoveResumeCapability(Capability::Cast(obj))) {
         decrement_paused();
       }
       break;
     }
-    case kPingMsg: {
+    case Isolate::kPingMsg: {
       // [ OOB, kPingMsg, responsePort, priority, response ]
-      if (message.Length() != 5) return true;
+      if (message.Length() != 5) return Error::null();
       const Object& obj2 = Object::Handle(I, message.At(2));
-      if (!obj2.IsSendPort()) return true;
+      if (!obj2.IsSendPort()) return Error::null();
       const SendPort& send_port = SendPort::Cast(obj2);
       const Object& obj3 = Object::Handle(I, message.At(3));
-      if (!obj3.IsSmi()) return true;
+      if (!obj3.IsSmi()) return Error::null();
       const intptr_t priority = Smi::Cast(obj3).Value();
       const Object& obj4 = Object::Handle(I, message.At(4));
-      if (!obj4.IsInstance() && !obj4.IsNull()) return true;
+      if (!obj4.IsInstance() && !obj4.IsNull()) return Error::null();
       const Instance& response =
           obj4.IsNull() ? Instance::null_instance() : Instance::Cast(obj4);
-      if (priority == kImmediateAction) {
+      if (priority == Isolate::kImmediateAction) {
         uint8_t* data = NULL;
         intptr_t len = 0;
         SerializeObject(response, &data, &len, false);
@@ -264,81 +265,118 @@
                                          data, len,
                                          Message::kNormalPriority));
       } else {
-        ASSERT((priority == kBeforeNextEventAction) ||
-               (priority == kAsEventAction));
+        ASSERT((priority == Isolate::kBeforeNextEventAction) ||
+               (priority == Isolate::kAsEventAction));
         // Update the message so that it will be handled immediately when it
         // is picked up from the message queue the next time.
         message.SetAt(
             0, Smi::Handle(I, Smi::New(Message::kDelayedIsolateLibOOBMsg)));
-        message.SetAt(3, Smi::Handle(I, Smi::New(kImmediateAction)));
+        message.SetAt(3, Smi::Handle(I, Smi::New(Isolate::kImmediateAction)));
         uint8_t* data = NULL;
         intptr_t len = 0;
         SerializeObject(message, &data, &len, false);
-        this->PostMessage(new Message(Message::kIllegalPort,
-                                      data, len,
-                                      Message::kNormalPriority),
-                          priority == kBeforeNextEventAction /* at_head */);
+        this->PostMessage(
+            new Message(Message::kIllegalPort,
+                        data, len,
+                        Message::kNormalPriority),
+            priority == Isolate::kBeforeNextEventAction /* at_head */);
       }
       break;
     }
-    case kKillMsg: {
+    case Isolate::kKillMsg:
+    case Isolate::kInternalKillMsg: {
       // [ OOB, kKillMsg, terminate capability, priority ]
-      if (message.Length() != 4) return true;
+      if (message.Length() != 4) return Error::null();
       Object& obj = Object::Handle(I, message.At(3));
-      if (!obj.IsSmi()) return true;
+      if (!obj.IsSmi()) return Error::null();
       const intptr_t priority = Smi::Cast(obj).Value();
-      if (priority == kImmediateAction) {
+      if (priority == Isolate::kImmediateAction) {
         obj = message.At(2);
         // Signal that the isolate should stop execution.
-        return !I->VerifyTerminateCapability(obj);
+        if (I->VerifyTerminateCapability(obj)) {
+          if (msg_type == Isolate::kKillMsg) {
+            const String& msg = String::Handle(String::New(
+                "isolate terminated by Isolate.kill"));
+            const UnwindError& error =
+                UnwindError::Handle(UnwindError::New(msg));
+            error.set_is_user_initiated(true);
+            return error.raw();
+          } else {
+            // TODO(turnidge): We should give the message handler a way
+            // to detect when an isolate is unwinding.
+            I->message_handler()->set_pause_on_start(false);
+            I->message_handler()->set_pause_on_exit(false);
+            const String& msg = String::Handle(String::New(
+                "isolate terminated by vm"));
+            return UnwindError::New(msg);
+          }
+        } else {
+          return Error::null();
+        }
       } else {
-        ASSERT((priority == kBeforeNextEventAction) ||
-               (priority == kAsEventAction));
+        ASSERT((priority == Isolate::kBeforeNextEventAction) ||
+               (priority == Isolate::kAsEventAction));
         // Update the message so that it will be handled immediately when it
         // is picked up from the message queue the next time.
         message.SetAt(
             0, Smi::Handle(I, Smi::New(Message::kDelayedIsolateLibOOBMsg)));
-        message.SetAt(3, Smi::Handle(I, Smi::New(kImmediateAction)));
+        message.SetAt(3, Smi::Handle(I, Smi::New(Isolate::kImmediateAction)));
         uint8_t* data = NULL;
         intptr_t len = 0;
         SerializeObject(message, &data, &len, false);
-        this->PostMessage(new Message(Message::kIllegalPort,
-                                      data, len,
-                                      Message::kNormalPriority),
-                          priority == kBeforeNextEventAction /* at_head */);
+        this->PostMessage(
+            new Message(Message::kIllegalPort,
+                        data, len,
+                        Message::kNormalPriority),
+            priority == Isolate::kBeforeNextEventAction /* at_head */);
       }
       break;
     }
-    case kAddExitMsg:
-    case kDelExitMsg:
-    case kAddErrorMsg:
-    case kDelErrorMsg: {
+    case Isolate::kInterruptMsg: {
+      // [ OOB, kInterruptMsg, pause capability ]
+      if (message.Length() != 3) return Error::null();
+      Object& obj = Object::Handle(I, message.At(2));
+      if (!I->VerifyPauseCapability(obj)) return Error::null();
+
+      // If we are already paused, don't pause again.
+      if (I->debugger()->PauseEvent() == NULL) {
+        return I->debugger()->SignalIsolateInterrupted();
+      }
+      break;
+    }
+
+    case Isolate::kAddExitMsg:
+    case Isolate::kDelExitMsg:
+    case Isolate::kAddErrorMsg:
+    case Isolate::kDelErrorMsg: {
       // [ OOB, msg, listener port ]
-      if (message.Length() < 3) return true;
+      if (message.Length() < 3) return Error::null();
       const Object& obj = Object::Handle(I, message.At(2));
-      if (!obj.IsSendPort()) return true;
+      if (!obj.IsSendPort()) return Error::null();
       const SendPort& listener = SendPort::Cast(obj);
       switch (msg_type) {
-        case kAddExitMsg: {
-          if (message.Length() != 4) return true;
+        case Isolate::kAddExitMsg: {
+          if (message.Length() != 4) return Error::null();
           // [ OOB, msg, listener port, response object ]
           const Object& response = Object::Handle(I, message.At(3));
-          if (!response.IsInstance() && !response.IsNull()) return true;
+          if (!response.IsInstance() && !response.IsNull()) {
+            return Error::null();
+          }
           I->AddExitListener(listener,
                              response.IsNull() ? Instance::null_instance()
                                                : Instance::Cast(response));
           break;
         }
-        case kDelExitMsg:
-          if (message.Length() != 3) return true;
+        case Isolate::kDelExitMsg:
+          if (message.Length() != 3) return Error::null();
           I->RemoveExitListener(listener);
           break;
-        case kAddErrorMsg:
-          if (message.Length() != 3) return true;
+        case Isolate::kAddErrorMsg:
+          if (message.Length() != 3) return Error::null();
           I->AddErrorListener(listener);
           break;
-        case kDelErrorMsg:
-          if (message.Length() != 3) return true;
+        case Isolate::kDelErrorMsg:
+          if (message.Length() != 3) return Error::null();
           I->RemoveErrorListener(listener);
           break;
         default:
@@ -346,15 +384,15 @@
       }
       break;
     }
-    case kErrorFatalMsg: {
+    case Isolate::kErrorFatalMsg: {
       // [ OOB, kErrorFatalMsg, terminate capability, val ]
-      if (message.Length() != 4) return true;
+      if (message.Length() != 4) return Error::null();
       // Check that the terminate capability has been passed correctly.
       Object& obj = Object::Handle(I, message.At(2));
-      if (!I->VerifyTerminateCapability(obj)) return true;
+      if (!I->VerifyTerminateCapability(obj)) return Error::null();
       // Get the value to be set.
       obj = message.At(3);
-      if (!obj.IsBool()) return true;
+      if (!obj.IsBool()) return Error::null();
       I->SetErrorsFatal(Bool::Cast(obj).value());
       break;
     }
@@ -365,7 +403,7 @@
       break;
 #endif  // defined(DEBUG)
   }
-  return true;
+  return Error::null();
 }
 
 
@@ -455,7 +493,10 @@
               break;
             }
             case Message::kIsolateLibOOBMsg: {
-              success = HandleLibMessage(oob_msg);
+              const Error& error = Error::Handle(HandleLibMessage(oob_msg));
+              if (!error.IsNull()) {
+                success = ProcessUnhandledException(error);
+              }
               break;
             }
 #if defined(DEBUG)
@@ -479,7 +520,10 @@
         const Object& oob_tag = Object::Handle(zone, msg_arr.At(0));
         if (oob_tag.IsSmi() &&
             (Smi::Cast(oob_tag).Value() == Message::kDelayedIsolateLibOOBMsg)) {
-          success = HandleLibMessage(Array::Cast(msg_arr));
+          const Error& error = Error::Handle(HandleLibMessage(msg_arr));
+          if (!error.IsNull()) {
+            success = ProcessUnhandledException(error);
+          }
         }
       }
     }
@@ -589,15 +633,20 @@
   } else {
     exc_str = String::New(result.ToErrorCString());
   }
-  bool has_listener = I->NotifyErrorListeners(exc_str, stacktrace_str);
-
-  if (I->ErrorsFatal()) {
-    if (has_listener) {
-      I->object_store()->clear_sticky_error();
-    } else {
-      I->object_store()->set_sticky_error(result);
-    }
+  if (result.IsUnwindError()) {
+    // Unwind errors are always fatal and don't notify listeners.
+    I->object_store()->set_sticky_error(result);
     return false;
+  } else {
+    bool has_listener = I->NotifyErrorListeners(exc_str, stacktrace_str);
+    if (I->ErrorsFatal()) {
+      if (has_listener) {
+        I->object_store()->clear_sticky_error();
+      } else {
+        I->object_store()->set_sticky_error(result);
+      }
+      return false;
+    }
   }
   return true;
 }
@@ -697,7 +746,6 @@
       gc_epilogue_callback_(NULL),
       defer_finalization_count_(0),
       deopt_context_(NULL),
-      edge_counter_increment_size_(-1),
       compiler_stats_(NULL),
       is_service_isolate_(false),
       stacktrace_(NULL),
@@ -897,10 +945,12 @@
     const uint8_t* instructions_snapshot_buffer) {
   InstructionsSnapshot snapshot(instructions_snapshot_buffer);
 #if defined(DEBUG)
-  OS::Print("Precompiled instructions are at [0x%" Px ", 0x%" Px ")\n",
-            reinterpret_cast<uword>(snapshot.instructions_start()),
-            reinterpret_cast<uword>(snapshot.instructions_start()) +
-            snapshot.instructions_size());
+  if (FLAG_trace_isolates) {
+    OS::Print("Precompiled instructions are at [0x%" Px ", 0x%" Px ")\n",
+              reinterpret_cast<uword>(snapshot.instructions_start()),
+              reinterpret_cast<uword>(snapshot.instructions_start()) +
+              snapshot.instructions_size());
+  }
 #endif
   heap_->SetupInstructionsSnapshotPage(snapshot.instructions_start(),
                                        snapshot.instructions_size());
@@ -1379,8 +1429,7 @@
     ASSERT(thread->isolate() == isolate);
     StackZone zone(thread);
     HandleScope handle_scope(thread);
-    Error& error = Error::Handle();
-    error = isolate->object_store()->sticky_error();
+    const Error& error = Error::Handle(isolate->object_store()->sticky_error());
     if (!error.IsNull() && !error.IsUnwindError()) {
       OS::PrintErr("in ShutdownIsolate: %s\n", error.ToErrorCString());
     }
@@ -1413,6 +1462,36 @@
 }
 
 
+RawError* Isolate::HandleInterrupts() {
+  uword interrupt_bits = GetAndClearInterrupts();
+  if ((interrupt_bits & kVMInterrupt) != 0) {
+    thread_registry()->CheckSafepoint();
+    if (store_buffer()->Overflowed()) {
+      if (FLAG_verbose_gc) {
+        OS::PrintErr("Scavenge scheduled by store buffer overflow.\n");
+      }
+      heap()->CollectGarbage(Heap::kNew);
+    }
+  }
+  if ((interrupt_bits & kMessageInterrupt) != 0) {
+    bool ok = message_handler()->HandleOOBMessages();
+    if (!ok) {
+      // False result from HandleOOBMessages signals that the isolate should
+      // be terminating.
+      if (FLAG_trace_isolates) {
+        OS::Print("[!] Terminating isolate due to OOB message:\n"
+                  "\tisolate:    %s\n", name());
+      }
+      const Error& error = Error::Handle(object_store()->sticky_error());
+      object_store()->clear_sticky_error();
+      ASSERT(!error.IsNull());
+      return error.raw();
+    }
+  }
+  return Error::null();
+}
+
+
 uword Isolate::GetAndClearStackOverflowFlags() {
   uword stack_overflow_flags = stack_overflow_flags_;
   stack_overflow_flags_ = 0;
@@ -1499,7 +1578,12 @@
 
   // Notify exit listeners that this isolate is shutting down.
   if (object_store() != NULL) {
-    NotifyExitListeners();
+    const Error& error = Error::Handle(object_store()->sticky_error());
+    if (error.IsNull() ||
+        !error.IsUnwindError() ||
+        UnwindError::Cast(error).is_user_initiated()) {
+      NotifyExitListeners();
+    }
   }
 
   // Clean up debugger resources.
@@ -1515,8 +1599,8 @@
   // Dump all accumulated timer data for the isolate.
   timer_list_.ReportTimers();
 
-  // Before analyzing the isolate's timeline blocks- close all of them.
-  CloseAllTimelineBlocks();
+  // Before analyzing the isolate's timeline blocks- reclaim all cached blocks.
+  ReclaimTimelineBlocks();
 
   // Dump all timing data for the isolate.
   if (FLAG_timing) {
@@ -1616,14 +1700,12 @@
 }
 
 
-void Isolate::CloseAllTimelineBlocks() {
-  // Close all blocks
-  thread_registry_->CloseAllTimelineBlocks();
+void Isolate::ReclaimTimelineBlocks() {
   TimelineEventRecorder* recorder = Timeline::recorder();
-  if (recorder != NULL) {
-    MutexLocker ml(&recorder->lock_);
-    Thread::Current()->CloseTimelineBlock();
+  if (recorder == NULL) {
+    return;
   }
+  thread_registry_->ReclaimTimelineBlocks();
 }
 
 
@@ -2224,10 +2306,10 @@
   oob.value.as_int32 = Message::kIsolateLibOOBMsg;
   list_values[0] = &oob;
 
-  Dart_CObject kill;
-  kill.type = Dart_CObject_kInt32;
-  kill.value.as_int32 = IsolateMessageHandler::kKillMsg;
-  list_values[1] = &kill;
+  Dart_CObject msg_type;
+  msg_type.type = Dart_CObject_kInt32;
+  msg_type.value.as_int32 = Isolate::kInternalKillMsg;
+  list_values[1] = &msg_type;
 
   Dart_CObject cap;
   cap.type = Dart_CObject_kCapability;
@@ -2236,7 +2318,7 @@
 
   Dart_CObject imm;
   imm.type = Dart_CObject_kInt32;
-  imm.value.as_int32 = IsolateMessageHandler::kImmediateAction;
+  imm.value.as_int32 = Isolate::kImmediateAction;
   list_values[3] = &imm;
 
   {
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index fd30317..265960c 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -113,6 +113,30 @@
 
 class Isolate : public BaseIsolate {
  public:
+  // Keep both these enums in sync with isolate_patch.dart.
+  // The different Isolate API message types.
+  enum LibMsgId {
+    kPauseMsg = 1,
+    kResumeMsg = 2,
+    kPingMsg = 3,
+    kKillMsg = 4,
+    kAddExitMsg = 5,
+    kDelExitMsg = 6,
+    kAddErrorMsg = 7,
+    kDelErrorMsg = 8,
+    kErrorFatalMsg = 9,
+
+    // Internal message ids.
+    kInterruptMsg = 10,     // Break in the debugger.
+    kInternalKillMsg = 11,  // Like kill, but does not run exit listeners, etc.
+  };
+  // The different Isolate API message priorities for ping and kill messages.
+  enum LibMsgPriority {
+    kImmediateAction = 0,
+    kBeforeNextEventAction = 1,
+    kAsEventAction = 2
+  };
+
   ~Isolate();
 
   static inline Isolate* Current() {
@@ -185,6 +209,8 @@
   }
   uint64_t terminate_capability() const { return terminate_capability_; }
 
+  void SendInternalLibMessage(LibMsgId msg_id, uint64_t capability);
+
   Heap* heap() const { return heap_; }
   void set_heap(Heap* value) { heap_ = value; }
   static intptr_t heap_offset() { return OFFSET_OF(Isolate, heap_); }
@@ -319,17 +345,14 @@
 
   // Interrupt bits.
   enum {
-    kApiInterrupt = 0x1,      // An interrupt from Dart_InterruptIsolate.
+    kVMInterrupt = 0x1,  // Internal VM checks: safepoints, store buffers, etc.
     kMessageInterrupt = 0x2,  // An interrupt to process an out of band message.
-    kVMInterrupt = 0x4,  // Internal VM checks: safepoints, store buffers, etc.
 
-    kInterruptsMask =
-        kApiInterrupt |
-        kMessageInterrupt |
-        kVMInterrupt,
+    kInterruptsMask = (kVMInterrupt | kMessageInterrupt),
   };
 
   void ScheduleInterrupts(uword interrupt_bits);
+  RawError* HandleInterrupts();
   uword GetAndClearInterrupts();
 
   // Marks all libraries as loaded.
@@ -582,15 +605,6 @@
     deopt_context_ = value;
   }
 
-  int32_t edge_counter_increment_size() const {
-    return edge_counter_increment_size_;
-  }
-  void set_edge_counter_increment_size(int32_t size) {
-    ASSERT(edge_counter_increment_size_ == -1);
-    ASSERT(size >= 0);
-    edge_counter_increment_size_ = size;
-  }
-
   void UpdateLastAllocationProfileAccumulatorResetTimestamp() {
     last_allocationprofile_accumulator_reset_timestamp_ =
         OS::GetCurrentTimeMillis();
@@ -776,8 +790,7 @@
 
   void LowLevelShutdown();
   void Shutdown();
-  // Assumes mutator is the only thread still in the isolate.
-  void CloseAllTimelineBlocks();
+  void ReclaimTimelineBlocks();
 
   void BuildName(const char* name_prefix);
   void PrintInvokedFunctions();
@@ -862,7 +875,6 @@
   Dart_GcEpilogueCallback gc_epilogue_callback_;
   intptr_t defer_finalization_count_;
   DeoptContext* deopt_context_;
-  int32_t edge_counter_increment_size_;
 
   CompilerStats* compiler_stats_;
 
@@ -983,6 +995,7 @@
   friend class Scavenger;  // VisitObjectPointers
   friend class ServiceIsolate;
   friend class Thread;
+  friend class Timeline;
 
   DISALLOW_COPY_AND_ASSIGN(Isolate);
 };
diff --git a/runtime/vm/json_stream.cc b/runtime/vm/json_stream.cc
index f6a255d..f25add7 100644
--- a/runtime/vm/json_stream.cc
+++ b/runtime/vm/json_stream.cc
@@ -308,6 +308,11 @@
 }
 
 
+void JSONStream::PrintValueTimeMicros(int64_t micros) {
+  PrintValue64(micros);
+}
+
+
 void JSONStream::PrintValue(double d) {
   PrintCommaIfNeeded();
   buffer_.Printf("%f", d);
@@ -465,6 +470,11 @@
 }
 
 
+void JSONStream::PrintPropertyTimeMicros(const char* name, int64_t micros) {
+  PrintProperty64(name, micros);
+}
+
+
 void JSONStream::PrintProperty(const char* name, double d) {
   PrintPropertyName(name);
   PrintValue(d);
diff --git a/runtime/vm/json_stream.h b/runtime/vm/json_stream.h
index f835edc..a6ae55f 100644
--- a/runtime/vm/json_stream.h
+++ b/runtime/vm/json_stream.h
@@ -123,6 +123,7 @@
   void PrintValue(intptr_t i);
   void PrintValue64(int64_t i);
   void PrintValueTimeMillis(int64_t millis);
+  void PrintValueTimeMicros(int64_t micros);
   void PrintValue(double d);
   void PrintValueBase64(const uint8_t* bytes, intptr_t length);
   void PrintValue(const char* s);
@@ -143,6 +144,7 @@
   void PrintProperty(const char* name, intptr_t i);
   void PrintProperty64(const char* name, int64_t i);
   void PrintPropertyTimeMillis(const char* name, int64_t millis);
+  void PrintPropertyTimeMicros(const char* name, int64_t micros);
   void PrintProperty(const char* name, double d);
   void PrintPropertyBase64(const char* name,
                            const uint8_t* bytes,
@@ -228,6 +230,9 @@
   void AddPropertyTimeMillis(const char* name, int64_t millis) const {
     stream_->PrintPropertyTimeMillis(name, millis);
   }
+  void AddPropertyTimeMicros(const char* name, int64_t micros) const {
+    stream_->PrintPropertyTimeMicros(name, micros);
+  }
   void AddProperty(const char* name, double d) const {
     stream_->PrintProperty(name, d);
   }
@@ -302,6 +307,9 @@
   void AddValueTimeMillis(int64_t millis) const {
     stream_->PrintValueTimeMillis(millis);
   }
+  void AddValueTimeMicros(int64_t micros) const {
+    stream_->PrintValueTimeMicros(micros);
+  }
   void AddValue(double d) const { stream_->PrintValue(d); }
   void AddValue(const char* s) const { stream_->PrintValue(s); }
   void AddValue(const Object& obj, bool ref = true) const {
diff --git a/runtime/vm/megamorphic_cache_table.cc b/runtime/vm/megamorphic_cache_table.cc
index 154d0e0..7f98d3b 100644
--- a/runtime/vm/megamorphic_cache_table.cc
+++ b/runtime/vm/megamorphic_cache_table.cc
@@ -22,7 +22,7 @@
   GrowableObjectArray& table = GrowableObjectArray::Handle(
       isolate->object_store()->megamorphic_cache_table());
   if (table.IsNull()) {
-    table = GrowableObjectArray::New();
+    table = GrowableObjectArray::New(Heap::kOld);
     ASSERT((table.Length() % kEntrySize) == 0);
     isolate->object_store()->set_megamorphic_cache_table(table);
   } else {
@@ -36,9 +36,9 @@
 
   const MegamorphicCache& cache =
       MegamorphicCache::Handle(MegamorphicCache::New());
-  table.Add(name);
-  table.Add(descriptor);
-  table.Add(cache);
+  table.Add(name, Heap::kOld);
+  table.Add(descriptor, Heap::kOld);
+  table.Add(cache, Heap::kOld);
   ASSERT((table.Length() % kEntrySize) == 0);
   return cache.raw();
 }
@@ -88,6 +88,7 @@
   Array& buckets = Array::Handle();
   const GrowableObjectArray& table = GrowableObjectArray::Handle(
       isolate->object_store()->megamorphic_cache_table());
+  if (table.IsNull()) return;
   for (intptr_t i = 0; i < table.Length(); i += kEntrySize) {
     cache ^= table.At(i + kEntryCacheOffset);
     buckets = cache.buckets();
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 2366142..11cd82b 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -162,6 +162,34 @@
 const double MegamorphicCache::kLoadFactor = 0.75;
 
 
+static void AppendSubString(Zone* zone,
+                            GrowableArray<const char*>* segments,
+                            const char* name,
+                            intptr_t start_pos, intptr_t len) {
+  char* segment = zone->Alloc<char>(len + 1);  // '\0'-terminated.
+  memmove(segment, name + start_pos, len);
+  segment[len] = '\0';
+  segments->Add(segment);
+}
+
+
+static const char* MergeSubStrings(Zone* zone,
+                                   const GrowableArray<const char*>& segments,
+                                   intptr_t alloc_len) {
+  char* result = zone->Alloc<char>(alloc_len + 1);  // '\0'-terminated
+  intptr_t pos = 0;
+  for (intptr_t k = 0; k < segments.length(); k++) {
+    const char* piece = segments[k];
+    const intptr_t piece_len = strlen(segments[k]);
+    memmove(result + pos, piece, piece_len);
+    pos += piece_len;
+    ASSERT(pos <= alloc_len);
+  }
+  result[pos] = '\0';
+  return result;
+}
+
+
 // Takes a vm internal name and makes it suitable for external user.
 //
 // Examples:
@@ -173,9 +201,10 @@
 //
 // Private name mangling is removed, possibly multiple times:
 //
-//   _ReceivePortImpl@6be832b -> _ReceivePortImpl
-//   _ReceivePortImpl@6be832b._internal@6be832b -> _ReceivePortImpl._internal
-//   _C@0x2b4ab9cc&_E@0x2b4ab9cc&_F@0x2b4ab9cc -> _C&_E&_F
+//   _ReceivePortImpl@709387912 -> _ReceivePortImpl
+//   _ReceivePortImpl@709387912._internal@709387912 ->
+//      _ReceivePortImpl._internal
+//   _C@6328321&_E@6328321&_F@6328321 -> _C&_E&_F
 //
 // The trailing . on the default constructor name is dropped:
 //
@@ -183,29 +212,31 @@
 //
 // And so forth:
 //
-//   get:foo@6be832b -> foo
-//   _MyClass@6b3832b. -> _MyClass
-//   _MyClass@6b3832b.named -> _MyClass.named
+//   get:foo@6328321 -> foo
+//   _MyClass@6328321. -> _MyClass
+//   _MyClass@6328321.named -> _MyClass.named
 //
 RawString* String::IdentifierPrettyName(const String& name) {
+  Zone* zone = Thread::Current()->zone();
   if (name.Equals(Symbols::TopLevel())) {
     // Name of invisible top-level class.
     return Symbols::Empty().raw();
   }
 
+  const char* cname = name.ToCString();
+  ASSERT(strlen(cname) == static_cast<size_t>(name.Length()));
+  const intptr_t name_len = name.Length();
   // First remove all private name mangling.
-  String& unmangled_name = String::Handle(Symbols::Empty().raw());
-  String& segment = String::Handle();
   intptr_t start_pos = 0;
-  for (intptr_t i = 0; i < name.Length(); i++) {
-    if (name.CharAt(i) == '@' &&
-        (i+1) < name.Length() &&
-        (name.CharAt(i+1) >= '0') &&
-        (name.CharAt(i+1) <= '9')) {
+  GrowableArray<const char*> unmangled_segments;
+  intptr_t sum_segment_len = 0;
+  for (intptr_t i = 0; i < name_len; i++) {
+    if ((cname[i] == '@') && ((i + 1) < name_len) &&
+        (cname[i + 1] >= '0') && (cname[i + 1] <= '9')) {
       // Append the current segment to the unmangled name.
-      segment = String::SubString(name, start_pos, (i - start_pos));
-      unmangled_name = String::Concat(unmangled_name, segment);
-
+      const intptr_t segment_len = i - start_pos;
+      sum_segment_len += segment_len;
+      AppendSubString(zone, &unmangled_segments, cname, start_pos, segment_len);
       // Advance until past the name mangling. The private keys are only
       // numbers so we skip until the first non-number.
       i++;  // Skip the '@'.
@@ -218,21 +249,29 @@
       i--;  // Account for for-loop increment.
     }
   }
+
+  const char* unmangled_name = NULL;
   if (start_pos == 0) {
     // No name unmangling needed, reuse the name that was passed in.
-    unmangled_name = name.raw();
+    unmangled_name = cname;
+    sum_segment_len = name_len;
   } else if (name.Length() != start_pos) {
     // Append the last segment.
-    segment = String::SubString(name, start_pos, (name.Length() - start_pos));
-    unmangled_name = String::Concat(unmangled_name, segment);
+    const intptr_t segment_len = name.Length() - start_pos;
+    sum_segment_len += segment_len;
+    AppendSubString(zone, &unmangled_segments, cname, start_pos, segment_len);
+  }
+  if (unmangled_name == NULL) {
+    // Merge unmangled_segments.
+    unmangled_name = MergeSubStrings(zone, unmangled_segments, sum_segment_len);
   }
 
-  intptr_t len = unmangled_name.Length();
+  intptr_t len = sum_segment_len;
   intptr_t start = 0;
   intptr_t dot_pos = -1;  // Position of '.' in the name, if any.
   bool is_setter = false;
   for (intptr_t i = start; i < len; i++) {
-    if (unmangled_name.CharAt(i) == ':') {
+    if (unmangled_name[i] == ':') {
       if (start != 0) {
         // Reset and break.
         start = 0;
@@ -240,11 +279,11 @@
         break;
       }
       ASSERT(start == 0);  // Only one : is possible in getters or setters.
-      if (unmangled_name.CharAt(0) == 's') {
+      if (unmangled_name[0] == 's') {
         is_setter = true;
       }
       start = i + 1;
-    } else if (unmangled_name.CharAt(i) == '.') {
+    } else if (unmangled_name[i] == '.') {
       if (dot_pos != -1) {
         // Reset and break.
         start = 0;
@@ -258,21 +297,25 @@
 
   if ((start == 0) && (dot_pos == -1)) {
     // This unmangled_name is fine as it is.
-    return unmangled_name.raw();
+    return Symbols::New(unmangled_name, sum_segment_len);
   }
 
   // Drop the trailing dot if needed.
   intptr_t end = ((dot_pos + 1) == len) ? dot_pos : len;
 
-  const String& result =
-      String::Handle(String::SubString(unmangled_name, start, (end - start)));
-
+  unmangled_segments.Clear();
+  intptr_t final_len = end - start;
+  AppendSubString(zone, &unmangled_segments, unmangled_name, start, final_len);
   if (is_setter) {
-    // Setters need to end with '='.
-    return String::Concat(result, Symbols::Equals());
+    const char* equals = Symbols::Equals().ToCString();
+    const intptr_t equals_len = strlen(equals);
+    AppendSubString(zone, &unmangled_segments, equals, 0, equals_len);
+    final_len += equals_len;
   }
 
-  return result.raw();
+  unmangled_name = MergeSubStrings(zone, unmangled_segments, final_len);
+
+  return Symbols::New(unmangled_name);
 }
 
 
@@ -1718,9 +1761,8 @@
                               intptr_t class_id,
                               intptr_t size,
                               bool is_vm_object) {
-  // TODO(iposva): Get a proper halt instruction from the assembler which
-  // would be needed here for code objects.
-  uword initial_value = reinterpret_cast<uword>(null_);
+  uword initial_value = (class_id == kInstructionsCid)
+      ? Assembler::GetBreakInstructionFiller() : reinterpret_cast<uword>(null_);
   uword cur = address;
   uword end = address + size;
   while (cur < end) {
@@ -2602,7 +2644,8 @@
 
 RawFunction* Class::GetInvocationDispatcher(const String& target_name,
                                             const Array& args_desc,
-                                            RawFunction::Kind kind) const {
+                                            RawFunction::Kind kind,
+                                            bool create_if_absent) const {
   enum {
     kNameIndex = 0,
     kArgsDescIndex,
@@ -2632,7 +2675,7 @@
     }
   }
 
-  if (dispatcher.IsNull()) {
+  if (dispatcher.IsNull() && create_if_absent) {
     if (i == cache.Length()) {
       // Allocate new larger cache.
       intptr_t new_len = (cache.Length() == 0)
@@ -4406,10 +4449,12 @@
     const LibraryPrefix& lib_prefix = LibraryPrefix::Handle(library_prefix());
     String& name = String::Handle();
     name = lib_prefix.name();  // Qualifier.
-    name = String::Concat(name, Symbols::Dot());
-    const String& str = String::Handle(ident());
-    name = String::Concat(name, str);
-    return name.raw();
+    Zone* zone = Thread::Current()->zone();
+    GrowableHandlePtrArray<const String> strs(zone, 3);
+    strs.Add(name);
+    strs.Add(Symbols::Dot());
+    strs.Add(String::Handle(zone, ident()));
+    return Symbols::FromConcatAll(strs);
   } else {
     return ident();
   }
@@ -6875,49 +6920,51 @@
 
 
 void Function::SaveICDataMap(
-    const ZoneGrowableArray<const ICData*>& deopt_id_to_ic_data) const {
-  // Compute number of ICData objectsto save.
-  intptr_t count = 0;
+    const ZoneGrowableArray<const ICData*>& deopt_id_to_ic_data,
+    const Array& edge_counters_array) const {
+  // Compute number of ICData objects to save.
+  // Store edge counter array in the first slot.
+  intptr_t count = 1;
   for (intptr_t i = 0; i < deopt_id_to_ic_data.length(); i++) {
     if (deopt_id_to_ic_data[i] != NULL) {
       count++;
     }
   }
-  if (count == 0) {
-    set_ic_data_array(Object::empty_array());
-  } else {
-    const Array& a = Array::Handle(Array::New(count, Heap::kOld));
-    INC_STAT(Thread::Current(), total_code_size, count * sizeof(uword));
-    count = 0;
-    for (intptr_t i = 0; i < deopt_id_to_ic_data.length(); i++) {
-      if (deopt_id_to_ic_data[i] != NULL) {
-        a.SetAt(count++, *deopt_id_to_ic_data[i]);
-      }
+  const Array& array = Array::Handle(Array::New(count, Heap::kOld));
+  INC_STAT(Thread::Current(), total_code_size, count * sizeof(uword));
+  count = 1;
+  for (intptr_t i = 0; i < deopt_id_to_ic_data.length(); i++) {
+    if (deopt_id_to_ic_data[i] != NULL) {
+      array.SetAt(count++, *deopt_id_to_ic_data[i]);
     }
-    set_ic_data_array(a);
   }
+  array.SetAt(0, edge_counters_array);
+  set_ic_data_array(array);
 }
 
 
 void Function::RestoreICDataMap(
     ZoneGrowableArray<const ICData*>* deopt_id_to_ic_data) const {
+  ASSERT(deopt_id_to_ic_data->is_empty());
   Zone* zone = Thread::Current()->zone();
-  const Array& saved_icd = Array::Handle(zone, ic_data_array());
-  if (saved_icd.IsNull() || (saved_icd.Length() == 0)) {
-    deopt_id_to_ic_data->Clear();
+  const Array& saved_ic_data = Array::Handle(zone, ic_data_array());
+  if (saved_ic_data.IsNull()) {
     return;
   }
-  ICData& icd = ICData::Handle();
-  icd ^= saved_icd.At(saved_icd.Length() - 1);
-  const intptr_t len = icd.deopt_id() + 1;
-  deopt_id_to_ic_data->SetLength(len);
-  for (intptr_t i = 0; i < len; i++) {
-    (*deopt_id_to_ic_data)[i] = NULL;
-  }
-  for (intptr_t i = 0; i < saved_icd.Length(); i++) {
-    ICData& icd = ICData::ZoneHandle(zone);
-    icd ^= saved_icd.At(i);
-    (*deopt_id_to_ic_data)[icd.deopt_id()] = &icd;
+  const intptr_t saved_length = saved_ic_data.Length();
+  ASSERT(saved_length > 0);
+  if (saved_length > 1) {
+    const intptr_t restored_length = ICData::Cast(Object::Handle(
+        zone, saved_ic_data.At(saved_length - 1))).deopt_id() + 1;
+    deopt_id_to_ic_data->SetLength(restored_length);
+    for (intptr_t i = 0; i < restored_length; i++) {
+      (*deopt_id_to_ic_data)[i] = NULL;
+    }
+    for (intptr_t i = 1; i < saved_length; i++) {
+      ICData& ic_data = ICData::ZoneHandle(zone);
+      ic_data ^= saved_ic_data.At(i);
+      (*deopt_id_to_ic_data)[ic_data.deopt_id()] = &ic_data;
+    }
   }
 }
 
@@ -6939,12 +6986,12 @@
 
 void Function::SetDeoptReasonForAll(intptr_t deopt_id,
                                     ICData::DeoptReasonId reason) {
-  const Array& icd_array = Array::Handle(ic_data_array());
-  ICData& icd = ICData::Handle();
-  for (intptr_t i = 0; i < icd_array.Length(); i++) {
-    icd ^= icd_array.At(i);
-    if (icd.deopt_id() == deopt_id) {
-      icd.AddDeoptReason(reason);
+  const Array& array = Array::Handle(ic_data_array());
+  ICData& ic_data = ICData::Handle();
+  for (intptr_t i = 1; i < array.Length(); i++) {
+    ic_data ^= array.At(i);
+    if (ic_data.deopt_id() == deopt_id) {
+      ic_data.AddDeoptReason(reason);
     }
   }
 }
@@ -8693,7 +8740,7 @@
 }
 
 
-RawString* Script::GetLine(intptr_t line_number) const {
+RawString* Script::GetLine(intptr_t line_number, Heap::Space space) const {
   const String& src = String::Handle(Source());
   intptr_t relative_line_number = line_number - line_offset();
   intptr_t current_line = 1;
@@ -8720,7 +8767,8 @@
   if (line_start_idx >= 0) {
     return String::SubString(src,
                              line_start_idx,
-                             last_char_idx - line_start_idx + 1);
+                             last_char_idx - line_start_idx + 1,
+                             space);
   } else {
     return Symbols::Empty().raw();
   }
@@ -11413,42 +11461,18 @@
 }
 
 
-static const char* VarKindString(int kind) {
-  switch (kind) {
-    case RawLocalVarDescriptors::kStackVar:
-      return "StackVar";
-      break;
-    case RawLocalVarDescriptors::kContextVar:
-      return "ContextVar";
-      break;
-    case RawLocalVarDescriptors::kContextLevel:
-      return "ContextLevel";
-      break;
-    case RawLocalVarDescriptors::kSavedCurrentContext:
-      return "CurrentCtx";
-      break;
-    case RawLocalVarDescriptors::kAsyncOperation:
-      return "AsyncOperation";
-      break;
-    default:
-      UNREACHABLE();
-      return "Unknown";
-  }
-}
-
-
 static int PrintVarInfo(char* buffer, int len,
                         intptr_t i,
                         const String& var_name,
                         const RawLocalVarDescriptors::VarInfo& info) {
-  const int8_t kind = info.kind();
+  const RawLocalVarDescriptors::VarInfoKind kind = info.kind();
   const int32_t index = info.index();
   if (kind == RawLocalVarDescriptors::kContextLevel) {
     return OS::SNPrint(buffer, len,
                        "%2" Pd " %-13s level=%-3d scope=%-3d"
                        " begin=%-3d end=%d\n",
                        i,
-                       VarKindString(kind),
+                       LocalVarDescriptors::KindToCString(kind),
                        index,
                        info.scope_id,
                        info.begin_pos,
@@ -11458,7 +11482,7 @@
                        "%2" Pd " %-13s level=%-3d index=%-3d"
                        " begin=%-3d end=%-3d name=%s\n",
                        i,
-                       VarKindString(kind),
+                       LocalVarDescriptors::KindToCString(kind),
                        info.scope_id,
                        index,
                        info.begin_pos,
@@ -11469,7 +11493,7 @@
                        "%2" Pd " %-13s scope=%-3d index=%-3d"
                        " begin=%-3d end=%-3d name=%s\n",
                        i,
-                       VarKindString(kind),
+                       LocalVarDescriptors::KindToCString(kind),
                        info.scope_id,
                        index,
                        info.begin_pos,
@@ -11531,12 +11555,13 @@
     var.AddProperty("beginPos", static_cast<intptr_t>(info.begin_pos));
     var.AddProperty("endPos", static_cast<intptr_t>(info.end_pos));
     var.AddProperty("scopeId", static_cast<intptr_t>(info.scope_id));
-    var.AddProperty("kind", KindToStr(info.kind()));
+    var.AddProperty("kind", KindToCString(info.kind()));
   }
 }
 
 
-const char* LocalVarDescriptors::KindToStr(intptr_t kind) {
+const char* LocalVarDescriptors::KindToCString(
+    RawLocalVarDescriptors::VarInfoKind kind) {
   switch (kind) {
     case RawLocalVarDescriptors::kStackVar:
       return "StackVar";
@@ -11545,9 +11570,7 @@
     case RawLocalVarDescriptors::kContextLevel:
       return "ContextLevel";
     case RawLocalVarDescriptors::kSavedCurrentContext:
-      return "SavedCurrentContext";
-    case RawLocalVarDescriptors::kAsyncOperation:
-      return "AsyncOperation";
+      return "CurrentCtx";
     default:
       UNIMPLEMENTED();
       return NULL;
@@ -13006,6 +13029,7 @@
   INC_STAT(Thread::Current(), total_instr_size, assembler->CodeSize());
   INC_STAT(Thread::Current(), total_code_size, assembler->CodeSize());
 
+  instrs.set_code(code.raw());
   // Copy the instructions into the instruction area and apply all fixups.
   // Embedded pointers are still in handles at this point.
   MemoryRegion region(reinterpret_cast<void*>(instrs.EntryPoint()),
@@ -13087,8 +13111,13 @@
 
 
 // Check if object matches find condition.
-bool Code::FindRawCodeVisitor::FindObject(RawObject* obj) const {
-  return RawCode::ContainsPC(obj, pc_);
+bool Code::FindRawCodeVisitor::FindObject(RawObject* raw_obj) const {
+  uword tags = raw_obj->ptr()->tags_;
+  if (RawObject::ClassIdTag::decode(tags) == kInstructionsCid) {
+    RawInstructions* raw_insts = reinterpret_cast<RawInstructions*>(raw_obj);
+    return RawInstructions::ContainsPC(raw_insts, pc_);
+  }
+  return false;
 }
 
 
@@ -13096,13 +13125,18 @@
   ASSERT((isolate == Isolate::Current()) || (isolate == Dart::vm_isolate()));
   NoSafepointScope no_safepoint;
   FindRawCodeVisitor visitor(pc);
-  RawObject* instr;
+  RawInstructions* instr;
+  if (Dart::IsRunningPrecompiledCode()) {
+    // TODO(johnmccutchan): Make code lookup work when running precompiled.
+    UNIMPLEMENTED();
+    return Code::null();
+  }
   if (isolate->heap() == NULL) {
     return Code::null();
   }
-  instr = isolate->heap()->FindOldObject(&visitor);
-  if (instr != Code::null()) {
-    return static_cast<RawCode*>(instr);
+  instr = isolate->heap()->FindObjectInCodeSpace(&visitor);
+  if (instr != Instructions::null()) {
+    return Instructions::Handle(instr).code();
   }
   return Code::null();
 }
@@ -14008,7 +14042,8 @@
   result.set_script(script);
   result.set_token_pos(token_pos);
   result.set_kind(kind);
-  result.set_message(String::Handle(String::NewFormattedV(format, args)));
+  result.set_message(String::Handle(
+      String::NewFormattedV(format, args, space)));
   return result.raw();
 }
 
@@ -14226,6 +14261,7 @@
                                       space);
     NoSafepointScope no_safepoint;
     result ^= raw;
+    result.StoreNonPointer(&result.raw_ptr()->is_user_initiated_, false);
   }
   result.set_message(message);
   return result.raw();
@@ -14237,6 +14273,11 @@
 }
 
 
+void UnwindError::set_is_user_initiated(bool value) const {
+  StoreNonPointer(&raw_ptr()->is_user_initiated_, value);
+}
+
+
 const char* UnwindError::ToErrorCString() const {
   const String& msg_str = String::Handle(message());
   return msg_str.ToCString();
@@ -16151,12 +16192,13 @@
 
 bool TypeParameter::CheckBound(const AbstractType& bounded_type,
                                const AbstractType& upper_bound,
-                               Error* bound_error) const {
+                               Error* bound_error,
+                               Heap::Space space) const {
   ASSERT((bound_error != NULL) && bound_error->IsNull());
   ASSERT(bounded_type.IsFinalized());
   ASSERT(upper_bound.IsFinalized());
   ASSERT(!bounded_type.IsMalformed());
-  if (bounded_type.IsSubtypeOf(upper_bound, bound_error)) {
+  if (bounded_type.IsSubtypeOf(upper_bound, bound_error, space)) {
     return true;
   }
   // Set bound_error if the caller is interested and if this is the first error.
@@ -18741,7 +18783,18 @@
 }
 
 
-RawString* String::NewFormattedV(const char* format, va_list args) {
+RawString* String::NewFormatted(Heap::Space space, const char* format, ...) {
+  va_list args;
+  va_start(args, format);
+  RawString* result = NewFormattedV(format, args, space);
+  NoSafepointScope no_safepoint;
+  va_end(args);
+  return result;
+}
+
+
+RawString* String::NewFormattedV(const char* format, va_list args,
+                                 Heap::Space space) {
   va_list args_copy;
   va_copy(args_copy, args);
   intptr_t len = OS::VSNPrint(NULL, 0, format, args_copy);
@@ -18751,7 +18804,7 @@
   char* buffer = zone->Alloc<char>(len + 1);
   OS::VSNPrint(buffer, (len + 1), format, args);
 
-  return String::New(buffer);
+  return String::New(buffer, space);
 }
 
 
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 1b398dd..934697e 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -1313,7 +1313,8 @@
 
   RawFunction* GetInvocationDispatcher(const String& target_name,
                                        const Array& args_desc,
-                                       RawFunction::Kind kind) const;
+                                       RawFunction::Kind kind,
+                                       bool create_if_absent) const;
 
   void Finalize() const;
 
@@ -2603,7 +2604,8 @@
 
   // Works with map [deopt-id] -> ICData.
   void SaveICDataMap(
-      const ZoneGrowableArray<const ICData*>& deopt_id_to_ic_data) const;
+      const ZoneGrowableArray<const ICData*>& deopt_id_to_ic_data,
+      const Array& edge_counters_array) const;
   void RestoreICDataMap(
       ZoneGrowableArray<const ICData*>* deopt_id_to_ic_data) const;
 
@@ -3214,7 +3216,8 @@
   void Tokenize(const String& private_key) const;
 
   RawLibrary* FindLibrary() const;
-  RawString* GetLine(intptr_t line_number) const;
+  RawString* GetLine(intptr_t line_number,
+                     Heap::Space space = Heap::kNew) const;
   RawString* GetSnippet(intptr_t from_line,
                         intptr_t from_column,
                         intptr_t to_line,
@@ -3711,6 +3714,13 @@
  public:
   intptr_t size() const { return raw_ptr()->size_; }  // Excludes HeaderSize().
 
+  RawCode* code() const {
+    // This should only be accessed when jitting.
+    // TODO(johnmccutchan): Remove code back pointer.
+    ASSERT(!Dart::IsRunningPrecompiledCode());
+    return raw_ptr()->code_;
+  }
+
   uword EntryPoint() const {
     return reinterpret_cast<uword>(raw_ptr()) + HeaderSize();
   }
@@ -3749,6 +3759,10 @@
     StoreNonPointer(&raw_ptr()->size_, size);
   }
 
+  void set_code(RawCode* code) const {
+    StorePointer(&raw_ptr()->code_, code);
+  }
+
   // New is a private method as RawInstruction and RawCode objects should
   // only be created using the Code::FinalizeCode method. This method creates
   // the RawInstruction and RawCode objects, sets up the pointer offsets
@@ -3792,7 +3806,7 @@
 
   static RawLocalVarDescriptors* New(intptr_t num_variables);
 
-  static const char* KindToStr(intptr_t kind);
+  static const char* KindToCString(RawLocalVarDescriptors::VarInfoKind kind);
 
  private:
   FINAL_HEAP_OBJECT_IMPLEMENTATION(LocalVarDescriptors, Object);
@@ -4796,6 +4810,9 @@
 
 class UnwindError : public Error {
  public:
+  bool is_user_initiated() const { return raw_ptr()->is_user_initiated_; }
+  void set_is_user_initiated(bool value) const;
+
   RawString* message() const { return raw_ptr()->message_; }
 
   static intptr_t InstanceSize() {
@@ -5404,7 +5421,8 @@
   // bound cannot be checked yet and this is not an error.
   bool CheckBound(const AbstractType& bounded_type,
                   const AbstractType& upper_bound,
-                  Error* bound_error) const;
+                  Error* bound_error,
+                  Heap::Space space = Heap::kNew) const;
   virtual intptr_t token_pos() const { return raw_ptr()->token_pos_; }
   virtual bool IsInstantiated(TrailPtr trail = NULL) const {
     return false;
@@ -6182,7 +6200,10 @@
 
   static RawString* NewFormatted(const char* format, ...)
       PRINTF_ATTRIBUTE(1, 2);
-  static RawString* NewFormattedV(const char* format, va_list args);
+  static RawString* NewFormatted(Heap::Space space, const char* format, ...)
+      PRINTF_ATTRIBUTE(2, 3);
+  static RawString* NewFormattedV(const char* format, va_list args,
+                                  Heap::Space space = Heap::kNew);
 
   static bool ParseDouble(const String& str,
                           intptr_t start,
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index c7ddd97..e186ea0 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -3932,7 +3932,8 @@
   Function& invocation_dispatcher = Function::Handle();
   invocation_dispatcher ^=
       cls.GetInvocationDispatcher(invocation_dispatcher_name, args_desc,
-                                  RawFunction::kNoSuchMethodDispatcher);
+                                  RawFunction::kNoSuchMethodDispatcher,
+                                  true /* create_if_absent */);
   EXPECT(!invocation_dispatcher.IsNull());
   // Get index to function.
   intptr_t invocation_dispatcher_index =
@@ -4758,4 +4759,36 @@
   }
 }
 
+
+struct TestResult {
+  const char* in;
+  const char* out;
+};
+
+
+TEST_CASE(String_IdentifierPrettyName) {
+  TestResult tests[] = {
+    {"(dynamic, dynamic) => void", "(dynamic, dynamic) => void"},
+    {"_List@915557746", "_List"},
+    {"_HashMap@600006304<K, V>(dynamic) => V", "_HashMap<K, V>(dynamic) => V"},
+    {"set:foo", "foo="},
+    {"get:foo", "foo"},
+    {"_ReceivePortImpl@709387912", "_ReceivePortImpl"},
+    {"_ReceivePortImpl@709387912._internal@709387912",
+        "_ReceivePortImpl._internal"},
+    {"_C@6328321&_E@6328321&_F@6328321", "_C&_E&_F"},
+    {"List.", "List"},
+    {"get:foo@6328321", "foo"},
+    {"_MyClass@6328321.", "_MyClass"},
+    {"_MyClass@6328321.named", "_MyClass.named"},
+  };
+  String& test = String::Handle();
+  String& result = String::Handle();
+  for (size_t i = 0; i < ARRAY_SIZE(tests); i++) {
+    test = String::New(tests[i].in);
+    result = String::IdentifierPrettyName(test);
+    EXPECT_STREQ(tests[i].out, result.ToCString());
+  }
+}
+
 }  // namespace dart
diff --git a/runtime/vm/os.h b/runtime/vm/os.h
index 871b23e..5285ec8 100644
--- a/runtime/vm/os.h
+++ b/runtime/vm/os.h
@@ -47,6 +47,9 @@
   // from midnight January 1, 1970 UTC.
   static int64_t GetCurrentTimeMicros();
 
+  // Returns the current time used by the tracing infrastructure.
+  static int64_t GetCurrentTraceMicros();
+
   // Returns a cleared aligned array of type T with n entries.
   // Alignment must be >= 16 and a power of two.
   template<typename T>
diff --git a/runtime/vm/os_android.cc b/runtime/vm/os_android.cc
index 0966a52..1d448d0 100644
--- a/runtime/vm/os_android.cc
+++ b/runtime/vm/os_android.cc
@@ -179,6 +179,20 @@
 }
 
 
+int64_t OS::GetCurrentTraceMicros() {
+  struct timespec ts;
+  if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0) {
+    UNREACHABLE();
+    return 0;
+  }
+  // Convert to microseconds.
+  int64_t result = ts.tv_sec;
+  result *= kMicrosecondsPerSecond;
+  result += (ts.tv_nsec / kNanosecondsPerMicrosecond);
+  return result;
+}
+
+
 void* OS::AlignedAllocate(intptr_t size, intptr_t alignment) {
   const int kMinimumAlignment = 16;
   ASSERT(Utils::IsPowerOfTwo(alignment));
diff --git a/runtime/vm/os_linux.cc b/runtime/vm/os_linux.cc
index 73fc0ea..25c64b7 100644
--- a/runtime/vm/os_linux.cc
+++ b/runtime/vm/os_linux.cc
@@ -396,6 +396,20 @@
 }
 
 
+int64_t OS::GetCurrentTraceMicros() {
+  struct timespec ts;
+  if (clock_gettime(CLOCK_MONOTONIC, &ts) != 0) {
+    UNREACHABLE();
+    return 0;
+  }
+  // Convert to microseconds.
+  int64_t result = ts.tv_sec;
+  result *= kMicrosecondsPerSecond;
+  result += (ts.tv_nsec / kNanosecondsPerMicrosecond);
+  return result;
+}
+
+
 void* OS::AlignedAllocate(intptr_t size, intptr_t alignment) {
   const int kMinimumAlignment = 16;
   ASSERT(Utils::IsPowerOfTwo(alignment));
diff --git a/runtime/vm/os_macos.cc b/runtime/vm/os_macos.cc
index ce4003e..9821221 100644
--- a/runtime/vm/os_macos.cc
+++ b/runtime/vm/os_macos.cc
@@ -82,6 +82,43 @@
 }
 
 
+int64_t OS::GetCurrentTraceMicros() {
+#if defined(TARGET_OS_IOS)
+  // On iOS mach_absolute_time stops while the device is sleeping. Instead use
+  // now - KERN_BOOTTIME to get a time difference that is not impacted by clock
+  // changes. KERN_BOOTTIME will be updated by the system whenever the system
+  // clock change.
+  struct timeval boottime;
+  int mib[2] = {CTL_KERN, KERN_BOOTTIME};
+  size_t size = sizeof(boottime);
+  int kr = sysctl(mib, arraysize(mib), &boottime, &size, NULL, 0);
+  ASSERT(KERN_SUCCESS == kr);
+  int64_t now = GetCurrentTimeMicros();
+  int64_t origin = boottime.tv_sec * kMicrosecondsPerSecond;
+  origin += boottime.tv_usec;
+  return now - origin;
+#else
+  static mach_timebase_info_data_t timebase_info;
+  if (timebase_info.denom == 0) {
+    // Zero-initialization of statics guarantees that denom will be 0 before
+    // calling mach_timebase_info.  mach_timebase_info will never set denom to
+    // 0 as that would be invalid, so the zero-check can be used to determine
+    // whether mach_timebase_info has already been called.  This is
+    // recommended by Apple's QA1398.
+    kern_return_t kr = mach_timebase_info(&timebase_info);
+    ASSERT(KERN_SUCCESS == kr);
+  }
+
+  // timebase_info converts absolute time tick units into nanoseconds.  Convert
+  // to microseconds.
+  int64_t result = mach_absolute_time() / kNanosecondsPerMicrosecond;
+  result *= timebase_info.numer;
+  result /= timebase_info.denom;
+  return result;
+#endif  // defined(TARGET_OS_IOS)
+}
+
+
 void* OS::AlignedAllocate(intptr_t size, intptr_t alignment) {
   const int kMinimumAlignment = 16;
   ASSERT(Utils::IsPowerOfTwo(alignment));
diff --git a/runtime/vm/os_thread.h b/runtime/vm/os_thread.h
index 5d6a21e..78580ec 100644
--- a/runtime/vm/os_thread.h
+++ b/runtime/vm/os_thread.h
@@ -48,6 +48,7 @@
   static void SetThreadLocal(ThreadLocalKey key, uword value);
   static intptr_t GetMaxStackSize();
   static ThreadId GetCurrentThreadId();
+  static ThreadId GetCurrentThreadTraceId();
   static intptr_t CurrentCurrentThreadIdAsIntPtr() {
     return ThreadIdToIntPtr(GetCurrentThreadId());
   }
diff --git a/runtime/vm/os_thread_android.cc b/runtime/vm/os_thread_android.cc
index 1f8de35..8cbb03e 100644
--- a/runtime/vm/os_thread_android.cc
+++ b/runtime/vm/os_thread_android.cc
@@ -156,6 +156,11 @@
 }
 
 
+ThreadId OSThread::GetCurrentThreadTraceId() {
+  return GetCurrentThreadId();
+}
+
+
 ThreadJoinId OSThread::GetCurrentThreadJoinId() {
   return pthread_self();
 }
diff --git a/runtime/vm/os_thread_linux.cc b/runtime/vm/os_thread_linux.cc
index f9bb9b5..4955cb4 100644
--- a/runtime/vm/os_thread_linux.cc
+++ b/runtime/vm/os_thread_linux.cc
@@ -9,6 +9,7 @@
 
 #include <errno.h>  // NOLINT
 #include <sys/resource.h>  // NOLINT
+#include <sys/syscall.h>  // NOLINT
 #include <sys/time.h>  // NOLINT
 
 #include "platform/assert.h"
@@ -157,6 +158,11 @@
 }
 
 
+ThreadId OSThread::GetCurrentThreadTraceId() {
+  return syscall(__NR_gettid);
+}
+
+
 ThreadJoinId OSThread::GetCurrentThreadJoinId() {
   return pthread_self();
 }
diff --git a/runtime/vm/os_thread_macos.cc b/runtime/vm/os_thread_macos.cc
index ffb94e9..827f749 100644
--- a/runtime/vm/os_thread_macos.cc
+++ b/runtime/vm/os_thread_macos.cc
@@ -150,6 +150,11 @@
 }
 
 
+ThreadId OSThread::GetCurrentThreadTraceId() {
+  return ThreadIdFromIntPtr(pthread_mach_thread_np(pthread_self()));
+}
+
+
 ThreadJoinId OSThread::GetCurrentThreadJoinId() {
   return pthread_self();
 }
diff --git a/runtime/vm/os_thread_win.cc b/runtime/vm/os_thread_win.cc
index 8fd13c9..a71d4b6 100644
--- a/runtime/vm/os_thread_win.cc
+++ b/runtime/vm/os_thread_win.cc
@@ -102,6 +102,11 @@
 }
 
 
+ThreadId OSThread::GetCurrentThreadTraceId() {
+  return ::GetCurrentThreadId();
+}
+
+
 ThreadJoinId OSThread::GetCurrentThreadJoinId() {
   return ::GetCurrentThreadId();
 }
diff --git a/runtime/vm/os_win.cc b/runtime/vm/os_win.cc
index 8513341..0e07cdf 100644
--- a/runtime/vm/os_win.cc
+++ b/runtime/vm/os_win.cc
@@ -121,6 +121,26 @@
 }
 
 
+static int64_t qpc_ticks_per_second = 0;
+
+int64_t OS::GetCurrentTraceMicros() {
+  if (qpc_ticks_per_second == 0) {
+    // QueryPerformanceCounter not supported, fallback.
+    return GetCurrentTimeMicros();
+  }
+  // Grab performance counter value.
+  LARGE_INTEGER now;
+  QueryPerformanceCounter(&now);
+  int64_t qpc_value = static_cast<int64_t>(now.QuadPart);
+  // Convert to microseconds.
+  int64_t seconds = qpc_value / qpc_ticks_per_second;
+  int64_t leftover_ticks = qpc_value - (seconds * qpc_ticks_per_second);
+  int64_t result = seconds * kMicrosecondsPerSecond;
+  result += ((leftover_ticks * kMicrosecondsPerSecond) / qpc_ticks_per_second);
+  return result;
+}
+
+
 void* OS::AlignedAllocate(intptr_t size, intptr_t alignment) {
   const int kMinimumAlignment = 16;
   ASSERT(Utils::IsPowerOfTwo(alignment));
@@ -350,6 +370,12 @@
   _set_abort_behavior(0, _WRITE_ABORT_MSG);
   MonitorWaitData::monitor_wait_data_key_ = OSThread::CreateThreadLocal();
   MonitorData::GetMonitorWaitDataForThread();
+  LARGE_INTEGER ticks_per_sec;
+  if (!QueryPerformanceFrequency(&ticks_per_sec)) {
+    qpc_ticks_per_second = 0;
+  } else {
+    qpc_ticks_per_second = static_cast<int64_t>(ticks_per_sec.QuadPart);
+  }
 }
 
 
diff --git a/runtime/vm/pages.cc b/runtime/vm/pages.cc
index 40b6c05..b8341e4 100644
--- a/runtime/vm/pages.cc
+++ b/runtime/vm/pages.cc
@@ -1045,11 +1045,6 @@
   page->object_end_ = memory->end();
   page->executable_ = true;
 
-#if defined(DEBUG)
-  OS::Print("Precompiled instructions page at [0x%" Px ", 0x%" Px ")\n",
-            page->object_start(), page->object_end());
-#endif
-
   MutexLocker ml(pages_lock_);
   if (exec_pages_ == NULL) {
     exec_pages_ = page;
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index 23c45fd..a84b79e 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -1576,7 +1576,6 @@
 
 SequenceNode* Parser::ParseInvokeFieldDispatcher(const Function& func) {
   TRACE_PARSER("ParseInvokeFieldDispatcher");
-  ASSERT(FLAG_lazy_dispatchers);
   ASSERT(func.IsInvokeFieldDispatcher());
   intptr_t token_pos = func.token_pos();
   ASSERT(func.token_pos() == 0);
@@ -13168,7 +13167,7 @@
       ASSERT(!type.IsMalformedOrMalbounded());
       if (!type.IsInstantiated()) {
         Error& error = Error::Handle(Z);
-        type ^= type.InstantiateFrom(*type_arguments, &error);
+        type ^= type.InstantiateFrom(*type_arguments, &error, NULL, Heap::kOld);
         ASSERT(error.IsNull());
       }
       *type_arguments = type.arguments();
@@ -13372,7 +13371,8 @@
         }
         return ThrowTypeError(redirect_type.token_pos(), redirect_type);
       }
-      if (I->flags().type_checks() && !redirect_type.IsSubtypeOf(type, NULL)) {
+      if (I->flags().type_checks() &&
+              !redirect_type.IsSubtypeOf(type, NULL, Heap::kOld)) {
         // Additional type checking of the result is necessary.
         type_bound = type.raw();
       }
diff --git a/runtime/vm/precompiler.cc b/runtime/vm/precompiler.cc
index 6fb4247..b40f5fa 100644
--- a/runtime/vm/precompiler.cc
+++ b/runtime/vm/precompiler.cc
@@ -28,11 +28,12 @@
 }
 
 
-RawError* Precompiler::CompileAll() {
+RawError* Precompiler::CompileAll(
+    Dart_QualifiedFunctionName embedder_entry_points[]) {
   LongJumpScope jump;
   if (setjmp(*jump.Set()) == 0) {
     Precompiler precompiler(Thread::Current());
-    precompiler.DoCompileAll();
+    precompiler.DoCompileAll(embedder_entry_points);
     return Error::null();
   } else {
     Isolate* isolate = Isolate::Current();
@@ -61,15 +62,14 @@
 }
 
 
-void Precompiler::DoCompileAll() {
-  LogBlock lb;
-
+void Precompiler::DoCompileAll(
+    Dart_QualifiedFunctionName embedder_entry_points[]) {
   // Drop all existing code so we can use the presence of code as an indicator
   // that we have already looked for the function's callees.
   ClearAllCode();
 
   // Start with the allocations and invocations that happen from C++.
-  AddRoots();
+  AddRoots(embedder_entry_points);
 
   // TODO(rmacnak): Eagerly add field-invocation functions to all signature
   // classes so closure calls don't go through the runtime.
@@ -126,7 +126,7 @@
 }
 
 
-void Precompiler::AddRoots() {
+void Precompiler::AddRoots(Dart_QualifiedFunctionName embedder_entry_points[]) {
   // Note that <rootlibrary>.main is not a root. The appropriate main will be
   // discovered through _getMainClosure.
 
@@ -201,85 +201,66 @@
     AddClass(cls);
   }
 
-  static const struct {
-    const char* library_;
-    const char* class_;
-    const char* function_;
-  } kExternallyCalled[] = {
-    { "dart:_builtin", "::", "_getMainClosure" },
-    { "dart:_builtin", "::", "_getPrintClosure" },
-    { "dart:_builtin", "::", "_getUriBaseClosure" },
-    { "dart:_builtin", "::", "_resolveUri" },
-    { "dart:_builtin", "::", "_setWorkingDirectory" },
-    { "dart:_builtin", "::", "_loadDataAsync" },
+  Dart_QualifiedFunctionName vm_entry_points[] = {
     { "dart:async", "::", "_setScheduleImmediateClosure" },
+    { "dart:core", "AbstractClassInstantiationError",
+                   "AbstractClassInstantiationError._create" },
+    { "dart:core", "ArgumentError", "ArgumentError." },
+    { "dart:core", "AssertionError", "AssertionError." },
+    { "dart:core", "CyclicInitializationError",
+                   "CyclicInitializationError." },
+    { "dart:core", "FallThroughError", "FallThroughError._create" },
+    { "dart:core", "FormatException", "FormatException." },
+    { "dart:core", "NoSuchMethodError", "NoSuchMethodError._withType" },
+    { "dart:core", "NullThrownError", "NullThrownError." },
+    { "dart:core", "OutOfMemoryError", "OutOfMemoryError." },
+    { "dart:core", "RangeError", "RangeError." },
+    { "dart:core", "RangeError", "RangeError.range" },
+    { "dart:core", "StackOverflowError", "StackOverflowError." },
+    { "dart:core", "UnsupportedError", "UnsupportedError." },
+    { "dart:core", "_CastError", "_CastError._create" },
     { "dart:core", "_InternalError", "_InternalError." },
     { "dart:core", "_InvocationMirror", "_allocateInvocationMirror" },
-    { "dart:io", "::", "_makeUint8ListView" },
-    { "dart:io", "::", "_makeDatagram" },
-    { "dart:io", "::", "_setupHooks" },
-    { "dart:io", "CertificateException", "CertificateException." },
-    { "dart:io", "HandshakeException", "HandshakeException." },
-    { "dart:io", "TlsException", "TlsException." },
-    { "dart:io", "X509Certificate", "X509Certificate." },
-    { "dart:io", "_ExternalBuffer", "set:data" },
-    { "dart:io", "_Platform", "set:_nativeScript" },
-    { "dart:io", "_ProcessStartStatus", "set:_errorCode" },
-    { "dart:io", "_ProcessStartStatus", "set:_errorMessage" },
-    { "dart:io", "_SecureFilterImpl", "get:ENCRYPTED_SIZE" },
-    { "dart:io", "_SecureFilterImpl", "get:SIZE" },
+    { "dart:core", "_JavascriptCompatibilityError",
+                   "_JavascriptCompatibilityError." },
+    { "dart:core", "_JavascriptIntegerOverflowError",
+                   "_JavascriptIntegerOverflowError." },
+    { "dart:core", "_TypeError", "_TypeError._create" },
+    { "dart:isolate", "IsolateSpawnException", "IsolateSpawnException." },
+    { "dart:isolate", "_IsolateUnhandledException",
+                      "_IsolateUnhandledException." },
     { "dart:isolate", "::", "_getIsolateScheduleImmediateClosure" },
-    { "dart:isolate", "::", "_startMainIsolate" },
     { "dart:isolate", "::", "_setupHooks" },
+    { "dart:isolate", "::", "_startMainIsolate" },
     { "dart:isolate", "_RawReceivePortImpl", "_handleMessage" },
     { "dart:isolate", "_RawReceivePortImpl", "_lookupHandler" },
     { "dart:vmservice", "::", "_registerIsolate" },
     { "dart:vmservice", "::", "boot" },
-    { "dart:vmservice_io", "::", "_addResource" },
-    { "dart:vmservice_io", "::", "main" },
-
-    // Cf. Exceptions::Create
-    { "dart:core", "RangeError", "RangeError." },
-    { "dart:core", "RangeError", "RangeError.range" },
-    { "dart:core", "ArgumentError", "ArgumentError." },
-    { "dart:core", "NoSuchMethodError", "NoSuchMethodError._withType" },
-    { "dart:core", "FormatException", "FormatException." },
-    { "dart:core", "UnsupportedError", "UnsupportedError." },
-    { "dart:core", "NullThrownError", "NullThrownError." },
-    { "dart:isolate", "IsolateSpawnException", "IsolateSpawnException." },
-    { "dart:isolate", "_IsolateUnhandledException",
-                      "_IsolateUnhandledException." },
-    { "dart:core", "_JavascriptIntegerOverflowError",
-                   "_JavascriptIntegerOverflowError." },
-    { "dart:core", "_JavascriptCompatibilityError",
-                   "_JavascriptCompatibilityError." },
-    { "dart:core", "AssertionError", "AssertionError." },
-    { "dart:core", "_CastError", "_CastError._create" },
-    { "dart:core", "_TypeError", "_TypeError._create" },
-    { "dart:core", "FallThroughError", "FallThroughError._create" },
-    { "dart:core", "AbstractClassInstantiationError",
-                   "AbstractClassInstantiationError._create" },
-    { "dart:core", "CyclicInitializationError",
-                   "CyclicInitializationError." },
-    { "dart:core", "StackOverflowError", "StackOverflowError." },
-    { "dart:core", "OutOfMemoryError", "OutOfMemoryError." },
-    { NULL, NULL, NULL }
+    { NULL, NULL, NULL }  // Must be terminated with NULL entries.
   };
 
+  AddEntryPoints(vm_entry_points);
+  AddEntryPoints(embedder_entry_points);
+}
+
+
+void Precompiler::AddEntryPoints(Dart_QualifiedFunctionName entry_points[]) {
   Library& lib = Library::Handle(Z);
+  Class& cls = Class::Handle(Z);
   Function& func = Function::Handle(Z);
-  String& library_name = String::Handle(Z);
+  String& library_uri = String::Handle(Z);
   String& class_name = String::Handle(Z);
   String& function_name = String::Handle(Z);
-  for (intptr_t i = 0; kExternallyCalled[i].library_ != NULL; i++) {
-    library_name = Symbols::New(kExternallyCalled[i].library_);
-    class_name = Symbols::New(kExternallyCalled[i].class_);
-    function_name = Symbols::New(kExternallyCalled[i].function_);
 
-    lib = Library::LookupLibrary(library_name);
+  for (intptr_t i = 0; entry_points[i].library_uri != NULL; i++) {
+    library_uri = Symbols::New(entry_points[i].library_uri);
+    class_name = Symbols::New(entry_points[i].class_name);
+    function_name = Symbols::New(entry_points[i].function_name);
+
+    lib = Library::LookupLibrary(library_uri);
     if (lib.IsNull()) {
       if (FLAG_trace_precompiler) {
-        THR_Print("WARNING: Missing %s\n", kExternallyCalled[i].library_);
+        THR_Print("WARNING: Missing %s\n", entry_points[i].library_uri);
       }
       continue;
     }
@@ -291,8 +272,8 @@
       if (cls.IsNull()) {
         if (FLAG_trace_precompiler) {
           THR_Print("WARNING: Missing %s %s\n",
-                    kExternallyCalled[i].library_,
-                    kExternallyCalled[i].class_);
+                    entry_points[i].library_uri,
+                    entry_points[i].class_name);
         }
         continue;
       }
@@ -304,9 +285,9 @@
     if (func.IsNull()) {
       if (FLAG_trace_precompiler) {
         THR_Print("WARNING: Missing %s %s %s\n",
-                  kExternallyCalled[i].library_,
-                  kExternallyCalled[i].class_,
-                  kExternallyCalled[i].function_);
+                  entry_points[i].library_uri,
+                  entry_points[i].class_name,
+                  entry_points[i].function_name);
       }
       continue;
     }
@@ -418,6 +399,10 @@
           // A dynamic call.
           selector = call_site.target_name();
           AddSelector(selector);
+          if (selector.raw() == Symbols::Call().raw()) {
+            // Potential closure call.
+            AddClosureCall(call_site);
+          }
         }
       } else if (entry.IsField()) {
         // Potential need for field initializer.
@@ -433,6 +418,22 @@
 }
 
 
+void Precompiler::AddClosureCall(const ICData& call_site) {
+  const Array& arguments_descriptor =
+      Array::Handle(Z, call_site.arguments_descriptor());
+  const Type& function_impl =
+      Type::Handle(Z, I->object_store()->function_impl_type());
+  const Class& cache_class =
+      Class::Handle(Z, function_impl.type_class());
+  const Function& dispatcher = Function::Handle(Z,
+      cache_class.GetInvocationDispatcher(Symbols::Call(),
+                                          arguments_descriptor,
+                                          RawFunction::kInvokeFieldDispatcher,
+                                          true /* create_if_absent */));
+  AddFunction(dispatcher);
+}
+
+
 void Precompiler::AddField(const Field& field) {
   if (field.is_static()) {
     // Potential const object. Uninitialized field will harmlessly do a
@@ -468,11 +469,16 @@
 
 
 bool Precompiler::IsSent(const String& selector) {
+  if (selector.IsNull()) {
+    return false;
+  }
   return sent_selectors_.Includes(selector);
 }
 
 
 void Precompiler::AddSelector(const String& selector) {
+  ASSERT(!selector.IsNull());
+
   if (!IsSent(selector)) {
     sent_selectors_.Add(selector);
     selector_count_++;
@@ -483,13 +489,6 @@
                 selector_count_,
                 selector.ToCString());
     }
-
-    if (!Field::IsGetterName(selector) &&
-        !Field::IsSetterName(selector)) {
-      // Regular method may be call-through-getter.
-      const String& getter = String::Handle(Field::GetterSymbol(selector));
-      AddSelector(getter);
-    }
   }
 }
 
@@ -517,7 +516,10 @@
   Class& cls = Class::Handle(Z);
   Array& functions = Array::Handle(Z);
   Function& function = Function::Handle(Z);
+  Function& function2 = Function::Handle(Z);
   String& selector = String::Handle(Z);
+  String& selector2 = String::Handle(Z);
+  String& selector3 = String::Handle(Z);
 
   for (intptr_t i = 0; i < libraries_.Length(); i++) {
     lib ^= libraries_.At(i);
@@ -578,14 +580,52 @@
           AddFunction(function);
         }
 
-        if (function.kind() == RawFunction::kRegularFunction &&
-            !Field::IsGetterName(selector) &&
-            !Field::IsSetterName(selector)) {
-          selector = Field::GetterSymbol(selector);
-          if (IsSent(selector)) {
-            function = function.ImplicitClosureFunction();
+        // Handle the implicit call type conversions.
+        if (Field::IsGetterName(selector)) {
+          selector2 = Field::NameFromGetter(selector);
+          selector3 = Symbols::Lookup(selector2);
+          if (IsSent(selector2)) {
+            // Call-through-getter.
+            // Function is get:foo and somewhere foo is called.
             AddFunction(function);
           }
+          selector3 = Symbols::LookupFromConcat(Symbols::ClosurizePrefix(),
+                                                selector2);
+          if (IsSent(selector3)) {
+            // Hash-closurization.
+            // Function is get:foo and somewhere get:#foo is called.
+            AddFunction(function);
+
+            function2 = function.ImplicitClosureFunction();
+            AddFunction(function2);
+          }
+        } else if (Field::IsSetterName(selector)) {
+          selector2 = Symbols::LookupFromConcat(Symbols::ClosurizePrefix(),
+                                                selector);
+          if (IsSent(selector2)) {
+            // Hash-closurization.
+            // Function is set:foo and somewhere get:#set:foo is called.
+            AddFunction(function);
+
+            function2 = function.ImplicitClosureFunction();
+            AddFunction(function2);
+          }
+        } else if (function.kind() == RawFunction::kRegularFunction) {
+          selector2 = Field::LookupGetterSymbol(selector);
+          if (IsSent(selector2)) {
+            // Closurization.
+            // Function is foo and somewhere get:foo is called.
+            function2 = function.ImplicitClosureFunction();
+            AddFunction(function2);
+          }
+          selector2 = Symbols::LookupFromConcat(Symbols::ClosurizePrefix(),
+                                                selector);
+          if (IsSent(selector2)) {
+            // Hash-closurization.
+            // Function is foo and somewhere get:#foo is called.
+            function2 = function.ImplicitClosureFunction();
+            AddFunction(function2);
+          }
         }
       }
     }
diff --git a/runtime/vm/precompiler.h b/runtime/vm/precompiler.h
index 1d98aeb..1692eda 100644
--- a/runtime/vm/precompiler.h
+++ b/runtime/vm/precompiler.h
@@ -78,18 +78,21 @@
 
 class Precompiler : public ValueObject {
  public:
-  static RawError* CompileAll();
+  static RawError* CompileAll(
+      Dart_QualifiedFunctionName embedder_entry_points[]);
 
  private:
   explicit Precompiler(Thread* thread);
 
-  void DoCompileAll();
+  void DoCompileAll(Dart_QualifiedFunctionName embedder_entry_points[]);
   void ClearAllCode();
-  void AddRoots();
+  void AddRoots(Dart_QualifiedFunctionName embedder_entry_points[]);
+  void AddEntryPoints(Dart_QualifiedFunctionName entry_points[]);
   void Iterate();
   void CleanUp();
 
   void AddCalleesOf(const Function& function);
+  void AddClosureCall(const ICData& call_site);
   void AddField(const Field& field);
   void AddFunction(const Function& function);
   void AddClass(const Class& cls);
diff --git a/runtime/vm/raw_object.cc b/runtime/vm/raw_object.cc
index 74013a6..47fa009 100644
--- a/runtime/vm/raw_object.cc
+++ b/runtime/vm/raw_object.cc
@@ -556,6 +556,9 @@
 intptr_t RawInstructions::VisitInstructionsPointers(
     RawInstructions* raw_obj, ObjectPointerVisitor* visitor) {
   RawInstructions* obj = raw_obj->ptr();
+  if (!Dart::IsRunningPrecompiledCode()) {
+    visitor->VisitPointers(raw_obj->from(), raw_obj->to());
+  }
   return Instructions::InstanceSize(obj->size_);
 }
 
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index 73bbfbc..b6f14f0 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -773,9 +773,6 @@
     return reinterpret_cast<RawObject**>(&ptr()->data_);
   }
   RawArray* ic_data_array_;  // ICData of unoptimized code.
-  RawObject** to_optimized_snapshot() {
-    return reinterpret_cast<RawObject**>(&ptr()->ic_data_array_);
-  }
   RawObject** to_no_code() {
     return reinterpret_cast<RawObject**>(&ptr()->ic_data_array_);
   }
@@ -1087,6 +1084,14 @@
 class RawInstructions : public RawObject {
   RAW_HEAP_OBJECT_IMPLEMENTATION(Instructions);
 
+  RawObject** from() {
+    return reinterpret_cast<RawObject**>(&ptr()->code_);
+  }
+  RawCode* code_;
+  RawObject** to() {
+    return reinterpret_cast<RawObject**>(&ptr()->code_);
+  }
+
   int32_t size_;
 
   // Variable length data follows here.
@@ -1202,7 +1207,6 @@
     kContextVar,
     kContextLevel,
     kSavedCurrentContext,
-    kAsyncOperation
   };
 
   enum {
@@ -1466,6 +1470,7 @@
   RawObject** to() {
     return reinterpret_cast<RawObject**>(&ptr()->message_);
   }
+  bool is_user_initiated_;
 };
 
 
diff --git a/runtime/vm/raw_object_snapshot.cc b/runtime/vm/raw_object_snapshot.cc
index 7f20153..d3ec50e 100644
--- a/runtime/vm/raw_object_snapshot.cc
+++ b/runtime/vm/raw_object_snapshot.cc
@@ -129,7 +129,7 @@
     writer->Write<uint16_t>(ptr()->state_bits_);
 
     // Write out all the object pointer fields.
-    SnapshotWriterVisitor visitor(writer);
+    SnapshotWriterVisitor visitor(writer, kAsReference);
     visitor.VisitPointers(from(), to());
   } else {
     if (writer->can_send_any_object() ||
@@ -185,7 +185,7 @@
   writer->Write<int32_t>(ptr()->token_pos_);
 
   // Write out all the object pointer fields.
-  SnapshotWriterVisitor visitor(writer);
+  SnapshotWriterVisitor visitor(writer, kAsReference);
   visitor.VisitPointers(from(), to());
 }
 
@@ -271,7 +271,7 @@
   // the type object when reading it back we should write out all the fields
   // inline and not as references.
   ASSERT(ptr()->type_class_ != Object::null());
-  SnapshotWriterVisitor visitor(writer);
+  SnapshotWriterVisitor visitor(writer, kAsReference);
   visitor.VisitPointers(from(), to());
 }
 
@@ -309,7 +309,7 @@
   writer->WriteTags(writer->GetObjectTags(this));
 
   // Write out all the object pointer fields.
-  SnapshotWriterVisitor visitor(writer);
+  SnapshotWriterVisitor visitor(writer, kAsReference);
   visitor.VisitPointers(from(), to());
 }
 
@@ -360,7 +360,7 @@
   writer->Write<int8_t>(ptr()->type_state_);
 
   // Write out all the object pointer fields.
-  SnapshotWriterVisitor visitor(writer);
+  SnapshotWriterVisitor visitor(writer, kAsReference);
   visitor.VisitPointers(from(), to());
 }
 
@@ -398,7 +398,7 @@
   writer->WriteTags(writer->GetObjectTags(this));
 
   // Write out all the object pointer fields.
-  SnapshotWriterVisitor visitor(writer);
+  SnapshotWriterVisitor visitor(writer, kAsReference);
   visitor.VisitPointers(from(), to());
 }
 
@@ -523,7 +523,7 @@
   writer->WriteVMIsolateObject(kPatchClassCid);
   writer->WriteTags(writer->GetObjectTags(this));
   // Write out all the object pointer fields.
-  SnapshotWriterVisitor visitor(writer);
+  SnapshotWriterVisitor visitor(writer, kAsReference);
   visitor.VisitPointers(from(), to());
 }
 
@@ -541,7 +541,9 @@
   reader->AddBackRef(object_id, &data, kIsDeserialized);
 
   // Set all the object fields.
-  READ_OBJECT_FIELDS(data, data.raw()->from(), data.raw()->to(), kAsReference);
+  READ_OBJECT_FIELDS(data,
+                     data.raw()->from(), data.raw()->to(),
+                     kAsInlinedObject);
 
   return data.raw();
 }
@@ -597,7 +599,9 @@
   reader->AddBackRef(object_id, &data, kIsDeserialized);
 
   // Set all the object fields.
-  READ_OBJECT_FIELDS(data, data.raw()->from(), data.raw()->to(), kAsReference);
+  READ_OBJECT_FIELDS(data,
+                     data.raw()->from(), data.raw()->to(),
+                     kAsReference);
 
   return data.raw();
 }
@@ -617,7 +621,7 @@
   writer->WriteTags(writer->GetObjectTags(this));
 
   // Write out all the object pointer fields.
-  SnapshotWriterVisitor visitor(writer);
+  SnapshotWriterVisitor visitor(writer, kAsReference);
   visitor.VisitPointers(from(), to());
 }
 
@@ -648,25 +652,26 @@
     func.set_optimized_call_site_count(reader->Read<uint16_t>());
 
     // Set all the object fields.
-    bool is_optimized = func.usage_counter() != 0;
-    RawObject** toobj = reader->snapshot_code() ? func.raw()->to() :
-        (is_optimized ? func.raw()->to_optimized_snapshot() :
-         func.raw()->to_snapshot());
     READ_OBJECT_FIELDS(func,
-                       func.raw()->from(), toobj,
-                       kAsInlinedObject);
-    if (!reader->snapshot_code()) {
-      // Initialize all fields that are not part of the snapshot.
-      if (!is_optimized) {
+                       func.raw()->from(), func.raw()->to_snapshot(),
+                       kAsReference);
+    // Initialize all fields that are not part of the snapshot.
+    if (reader->snapshot_code()) {
+      func.ClearICDataArray();
+      func.ClearCode();
+      // Read the code object and fixup entry point.
+      (*reader->CodeHandle()) ^= reader->ReadObjectImpl(kAsInlinedObject);
+      func.SetInstructions(*reader->CodeHandle());
+    } else {
+      bool is_optimized = func.usage_counter() != 0;
+      if (is_optimized) {
+        // Read the ic data array as the function is an optimized one.
+        (*reader->ArrayHandle()) ^= reader->ReadObjectImpl(kAsReference);
+        func.set_ic_data_array(*reader->ArrayHandle());
+      } else {
         func.ClearICDataArray();
       }
       func.ClearCode();
-    } else {
-      // Fix entry point.
-      (*reader->CodeHandle()) = func.CurrentCode();
-      uword new_entry = (*reader->CodeHandle()).EntryPoint();
-      ASSERT(Dart::vm_isolate()->heap()->CodeContains(new_entry));
-      func.StoreNonPointer(&func.raw_ptr()->entry_point_, new_entry);
     }
     return func.raw();
   } else {
@@ -723,11 +728,19 @@
     writer->Write<uint16_t>(ptr()->optimized_call_site_count_);
 
     // Write out all the object pointer fields.
-    RawObject** toobj =
-        writer->snapshot_code() ? to() :
-        (is_optimized ? to_optimized_snapshot() : to_snapshot());
-    SnapshotWriterVisitor visitor(writer, kAsInlinedObject);
-    visitor.VisitPointers(from(), toobj);
+    SnapshotWriterVisitor visitor(writer, kAsReference);
+    visitor.VisitPointers(from(), to_snapshot());
+    if (writer->snapshot_code()) {
+      ASSERT(ptr()->ic_data_array_ == Array::null());
+      ASSERT((ptr()->code_ == ptr()->unoptimized_code_) ||
+             (ptr()->unoptimized_code_ == Code::null()));
+      // Write out the code object as we are generating a precompiled snapshot.
+      writer->WriteObjectImpl(ptr()->code_, kAsInlinedObject);
+    } else if (is_optimized) {
+      // Write out the ic data array as the function is optimized or
+      // we are generating a precompiled snapshot.
+      writer->WriteObjectImpl(ptr()->ic_data_array_, kAsReference);
+    }
   } else {
     writer->WriteFunctionId(this, owner_is_class);
   }
@@ -855,7 +868,7 @@
   writer->Write<int32_t>(ptr()->kind_);
 
   // Write out all the object pointer fields.
-  SnapshotWriterVisitor visitor(writer);
+  SnapshotWriterVisitor visitor(writer, kAsReference);
   visitor.VisitPointers(from(), to());
 }
 
@@ -975,7 +988,7 @@
   writer->Write<int8_t>(ptr()->kind_);
 
   // Write out all the object pointer fields.
-  SnapshotWriterVisitor visitor(writer);
+  SnapshotWriterVisitor visitor(writer, kAsReference);
   visitor.VisitPointers(from(), to_snapshot());
 }
 
@@ -1087,7 +1100,7 @@
 
     // Write out all the object pointer fields.
     RawObject** toobj = (kind == Snapshot::kFull) ? to() : to_snapshot();
-    SnapshotWriterVisitor visitor(writer);
+    SnapshotWriterVisitor visitor(writer, kAsReference);
     visitor.VisitPointers(from(), toobj);
   }
 }
@@ -1140,7 +1153,7 @@
   writer->Write<bool>(ptr()->is_loaded_);
 
   // Write out all the object pointer fields.
-  SnapshotWriterVisitor visitor(writer);
+  SnapshotWriterVisitor visitor(writer, kAsReference);
   visitor.VisitPointers(from(), to());
 }
 
@@ -1178,7 +1191,7 @@
   writer->WriteTags(writer->GetObjectTags(this));
 
   // Write out all the object pointer fields.
-  SnapshotWriterVisitor visitor(writer);
+  SnapshotWriterVisitor visitor(writer, kAsReference);
   visitor.VisitPointers(from(), to());
 }
 
@@ -1200,7 +1213,7 @@
   // Set all the object fields.
   READ_OBJECT_FIELDS(result,
                      result.raw()->from(), result.raw()->to(),
-                     kAsInlinedObject);
+                     kAsReference);
 
   // Fix entry point.
   uword new_entry = result.EntryPoint();
@@ -1237,7 +1250,7 @@
   writer->Write<int32_t>(ptr()->lazy_deopt_pc_offset_);
 
   // Write out all the object pointer fields.
-  SnapshotWriterVisitor visitor(writer, kAsInlinedObject);
+  SnapshotWriterVisitor visitor(writer, kAsReference);
   visitor.VisitPointers(from(), to());
 
   writer->SetInstructionsCode(ptr()->instructions_, this);
@@ -1309,7 +1322,8 @@
     *reinterpret_cast<int8_t*>(info_array.DataAddr(i)) = entry_type;
     switch (entry_type) {
       case ObjectPool::kTaggedObject: {
-        (*reader->PassiveObjectHandle()) = reader->ReadObjectImpl(kAsReference);
+        (*reader->PassiveObjectHandle()) =
+            reader->ReadObjectImpl(kAsInlinedObject);
         result.SetObjectAt(i, *(reader->PassiveObjectHandle()));
         break;
       }
@@ -1358,7 +1372,7 @@
     Entry& entry = ptr()->data()[i];
     switch (entry_type) {
       case ObjectPool::kTaggedObject: {
-        writer->WriteObjectImpl(entry.raw_obj_, kAsReference);
+        writer->WriteObjectImpl(entry.raw_obj_, kAsInlinedObject);
         break;
       }
       case ObjectPool::kImmediate: {
@@ -1622,7 +1636,7 @@
   writer->Write<int32_t>(num_variables);
   if (num_variables != 0) {
     // Write out all the object pointer fields.
-    SnapshotWriterVisitor visitor(writer);
+    SnapshotWriterVisitor visitor(writer, kAsReference);
     visitor.VisitPointers(from(), to(num_variables));
   }
 }
@@ -1706,7 +1720,7 @@
   // Set all the object fields.
   READ_OBJECT_FIELDS(result,
                      result.raw()->from(), result.raw()->to(),
-                     kAsReference);
+                     kAsInlinedObject);
 
   return result.raw();
 }
@@ -1729,7 +1743,7 @@
   writer->Write<uint32_t>(ptr()->state_bits_);
 
   // Write out all the object pointer fields.
-  SnapshotWriterVisitor visitor(writer);
+  SnapshotWriterVisitor visitor(writer, kAsInlinedObject);
   visitor.VisitPointers(from(), to());
 }
 
@@ -1774,7 +1788,7 @@
   writer->Write<int32_t>(ptr()->filled_entry_count_);
 
   // Write out all the object pointer fields.
-  SnapshotWriterVisitor visitor(writer);
+  SnapshotWriterVisitor visitor(writer, kAsReference);
   visitor.VisitPointers(from(), to());
 }
 
@@ -1869,7 +1883,7 @@
   writer->WriteTags(writer->GetObjectTags(this));
 
   // Write out all the object pointer fields.
-  SnapshotWriterVisitor visitor(writer);
+  SnapshotWriterVisitor visitor(writer, kAsReference);
   visitor.VisitPointers(from(), to());
 }
 
@@ -1915,7 +1929,7 @@
   writer->Write<uint8_t>(ptr()->kind_);
 
   // Write out all the object pointer fields.
-  SnapshotWriterVisitor visitor(writer);
+  SnapshotWriterVisitor visitor(writer, kAsReference);
   visitor.VisitPointers(from(), to());
 }
 
@@ -1947,7 +1961,7 @@
   writer->WriteVMIsolateObject(kUnhandledExceptionCid);
   writer->WriteTags(writer->GetObjectTags(this));
   // Write out all the object pointer fields.
-  SnapshotWriterVisitor visitor(writer);
+  SnapshotWriterVisitor visitor(writer, kAsReference);
   visitor.VisitPointers(from(), to());
 }
 
@@ -2117,7 +2131,7 @@
   writer->WriteTags(writer->GetObjectTags(this));
 
   // Write out all the object pointer fields.
-  SnapshotWriterVisitor visitor(writer, false);
+  SnapshotWriterVisitor visitor(writer, kAsInlinedObject);
   visitor.VisitPointers(from(), to());
 }
 
@@ -2230,7 +2244,7 @@
   ASSERT(reader != NULL);
   intptr_t len = reader->ReadSmiValue();
   intptr_t hash = reader->ReadSmiValue();
-  String& str_obj = String::Handle(reader->zone(), String::null());
+  String& str_obj = String::ZoneHandle(reader->zone(), String::null());
 
   if (kind == Snapshot::kFull) {
     // We currently only expect the Dart mutator to read snapshots.
@@ -2264,7 +2278,7 @@
   ASSERT(reader != NULL);
   intptr_t len = reader->ReadSmiValue();
   intptr_t hash = reader->ReadSmiValue();
-  String& str_obj = String::Handle(reader->zone(), String::null());
+  String& str_obj = String::ZoneHandle(reader->zone(), String::null());
 
   if (kind == Snapshot::kFull) {
     RawTwoByteString* obj = reader->NewTwoByteString(len);
@@ -2867,7 +2881,7 @@
   intptr_t cid = RawObject::ClassIdTag::decode(tags);
   intptr_t length = reader->ReadSmiValue();
   uint8_t* data = reinterpret_cast<uint8_t*>(reader->ReadRawPointerValue());
-  ExternalTypedData& obj = ExternalTypedData::Handle(
+  ExternalTypedData& obj = ExternalTypedData::ZoneHandle(
       ExternalTypedData::New(cid, data, length));
   reader->AddBackRef(object_id, &obj, kIsDeserialized);
   void* peer = reinterpret_cast<void*>(reader->ReadRawPointerValue());
@@ -3142,7 +3156,7 @@
     writer->Write(ptr()->expand_inlined_);
 
     // Write out all the object pointer fields.
-    SnapshotWriterVisitor visitor(writer);
+    SnapshotWriterVisitor visitor(writer, kAsReference);
     visitor.VisitPointers(from(), to());
   } else {
     // Stacktraces are not allowed in other snapshot forms.
@@ -3234,7 +3248,7 @@
   writer->WriteTags(writer->GetObjectTags(this));
 
   // Write out all the object pointer fields.
-  SnapshotWriterVisitor visitor(writer);
+  SnapshotWriterVisitor visitor(writer, kAsReference);
   visitor.VisitPointers(from(), to());
 }
 
diff --git a/runtime/vm/report.cc b/runtime/vm/report.cc
index 5637adc..f1cf495 100644
--- a/runtime/vm/report.cc
+++ b/runtime/vm/report.cc
@@ -46,42 +46,54 @@
       // Only report the line position if we have the original source. We still
       // need to get a valid column so that we can report the ^ mark below the
       // snippet.
+      // Allocate formatted strings in old sapce as they may be created during
+      // optimizing compilation. Those strings are created rarely and should not
+      // polute old space.
       if (script.HasSource()) {
-        result = String::NewFormatted("'%s': %s: line %" Pd " pos %" Pd ": ",
+        result = String::NewFormatted(Heap::kOld,
+                                      "'%s': %s: line %" Pd " pos %" Pd ": ",
                                       script_url.ToCString(),
                                       message_header,
                                       line,
                                       column);
       } else {
-        result = String::NewFormatted("'%s': %s: line %" Pd ": ",
+        result = String::NewFormatted(Heap::kOld,
+                                      "'%s': %s: line %" Pd ": ",
                                       script_url.ToCString(),
                                       message_header,
                                       line);
       }
       // Append the formatted error or warning message.
-      result = String::Concat(result, message);
+      GrowableHandlePtrArray<const String> strs(Thread::Current()->zone(), 5);
+      strs.Add(result);
+      strs.Add(message);
       // Append the source line.
-      const String& script_line = String::Handle(script.GetLine(line));
+      const String& script_line = String::Handle(
+          script.GetLine(line, Heap::kOld));
       ASSERT(!script_line.IsNull());
-      result = String::Concat(result, Symbols::NewLine());
-      result = String::Concat(result, script_line);
-      result = String::Concat(result, Symbols::NewLine());
+      strs.Add(Symbols::NewLine());
+      strs.Add(script_line);
+      strs.Add(Symbols::NewLine());
       // Append the column marker.
       const String& column_line = String::Handle(
-          String::NewFormatted("%*s\n", static_cast<int>(column), "^"));
-      result = String::Concat(result, column_line);
+          String::NewFormatted(Heap::kOld,
+                               "%*s\n", static_cast<int>(column), "^"));
+      strs.Add(column_line);
+      // TODO(srdjan): Use Strings::FromConcatAll in old space, once
+      // implemented.
+      result = Symbols::FromConcatAll(strs);
     } else {
       // Token position is unknown.
-      result = String::NewFormatted("'%s': %s: ",
+      result = String::NewFormatted(Heap::kOld, "'%s': %s: ",
                                     script_url.ToCString(),
                                     message_header);
-      result = String::Concat(result, message);
+      result = String::Concat(result, message, Heap::kOld);
     }
   } else {
     // Script is unknown.
     // Append the formatted error or warning message.
-    result = String::NewFormatted("%s: ", message_header);
-    result = String::Concat(result, message);
+    result = String::NewFormatted(Heap::kOld, "%s: ", message_header);
+    result = String::Concat(result, message, Heap::kOld);
   }
   return result.raw();
 }
diff --git a/runtime/vm/scopes.cc b/runtime/vm/scopes.cc
index 139705a..0881b87 100644
--- a/runtime/vm/scopes.cc
+++ b/runtime/vm/scopes.cc
@@ -250,8 +250,12 @@
 
 
 // The parser creates internal variables that start with ":"
-static bool IsInternalIdentifier(const String& str) {
+static bool IsFilteredIdentifier(const String& str) {
   ASSERT(str.Length() > 0);
+  if (str.raw() == Symbols::AsyncOperation().raw()) {
+    // Keep :async_op for asynchronous debugging.
+    return false;
+  }
   return str.CharAt(0) == ':';
 }
 
@@ -266,10 +270,8 @@
     for (int i = 0; i < context_scope.num_variables(); i++) {
       String& name = String::Handle(context_scope.NameAt(i));
       RawLocalVarDescriptors::VarInfoKind kind;
-      if (!IsInternalIdentifier(name)) {
+      if (!IsFilteredIdentifier(name)) {
         kind = RawLocalVarDescriptors::kContextVar;
-      } else if (name.raw() == Symbols::AsyncOperation().raw()) {
-        kind = RawLocalVarDescriptors::kAsyncOperation;
       } else {
         continue;
       }
@@ -319,7 +321,18 @@
   for (int i = 0; i < this->variables_.length(); i++) {
     LocalVariable* var = variables_[i];
     if ((var->owner() == this) && !var->is_invisible()) {
-      if (!IsInternalIdentifier(var->name())) {
+      if (var->name().raw() == Symbols::CurrentContextVar().raw()) {
+        // This is the local variable in which the function saves its
+        // own context before calling a closure function.
+        VarDesc desc;
+        desc.name = &var->name();
+        desc.info.set_kind(RawLocalVarDescriptors::kSavedCurrentContext);
+        desc.info.scope_id = 0;
+        desc.info.begin_pos = 0;
+        desc.info.end_pos = 0;
+        desc.info.set_index(var->index());
+        vars->Add(desc);
+      } else if (!IsFilteredIdentifier(var->name())) {
         // This is a regular Dart variable, either stack-based or captured.
         VarDesc desc;
         desc.name = &var->name();
@@ -336,34 +349,6 @@
         desc.info.end_pos = var->owner()->end_token_pos();
         desc.info.set_index(var->index());
         vars->Add(desc);
-      } else if (var->name().raw() == Symbols::CurrentContextVar().raw()) {
-        // This is the local variable in which the function saves its
-        // own context before calling a closure function.
-        VarDesc desc;
-        desc.name = &var->name();
-        desc.info.set_kind(RawLocalVarDescriptors::kSavedCurrentContext);
-        desc.info.scope_id = 0;
-        desc.info.begin_pos = 0;
-        desc.info.end_pos = 0;
-        desc.info.set_index(var->index());
-        vars->Add(desc);
-      } else if (var->name().raw() == Symbols::AsyncOperation().raw()) {
-        // The async continuation.
-        ASSERT(var->is_captured());
-        VarDesc desc;
-        desc.name = &var->name();
-        desc.info.set_kind(RawLocalVarDescriptors::kAsyncOperation);
-        if (var->is_captured()) {
-          ASSERT(var->owner() != NULL);
-          ASSERT(var->owner()->context_level() >= 0);
-          desc.info.scope_id = var->owner()->context_level();
-        } else {
-          desc.info.scope_id = *scope_id;
-        }
-        desc.info.begin_pos = 0;
-        desc.info.end_pos = 0;
-        desc.info.set_index(var->index());
-        vars->Add(desc);
       }
     }
   }
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index 4cb379e..1dc403b 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -2423,8 +2423,12 @@
 
 
 static bool Pause(Isolate* isolate, JSONStream* js) {
-  // TODO(turnidge): Don't double-interrupt the isolate here.
-  isolate->ScheduleInterrupts(Isolate::kApiInterrupt);
+  // TODO(turnidge): This interrupt message could have been sent from
+  // the service isolate directly, but would require some special case
+  // code.  That would prevent this isolate getting double-interrupted
+  // with OOB messages.
+  isolate->SendInternalLibMessage(Isolate::kInterruptMsg,
+                                  isolate->pause_capability());
   PrintSuccess(js);
   return true;
 }
diff --git a/runtime/vm/service/service.md b/runtime/vm/service/service.md
index 5aeab86..69beec686 100644
--- a/runtime/vm/service/service.md
+++ b/runtime/vm/service/service.md
@@ -1030,6 +1030,9 @@
   //   PauseInterrupted
   //   PauseException
   //
+  // For PauseInterrupted events, there will be no top frame if the
+  // isolate is idle (waiting in the message loop).
+  //
   // For the Resume event, the top frame is provided at
   // all times except for the initial resume event that is delivered
   // when an isolate begins execution.
diff --git a/runtime/vm/service_isolate.cc b/runtime/vm/service_isolate.cc
index 39e457c..c07638f 100644
--- a/runtime/vm/service_isolate.cc
+++ b/runtime/vm/service_isolate.cc
@@ -520,8 +520,6 @@
   if (isolate_ != NULL) {
     isolate_->is_service_isolate_ = true;
     origin_ = isolate_->origin_id();
-  } else {
-    origin_ = ILLEGAL_PORT;
   }
 }
 
@@ -689,7 +687,7 @@
       HandleScope handle_scope(T);
       Error& error = Error::Handle(Z);
       error = I->object_store()->sticky_error();
-      if (!error.IsNull()) {
+      if (!error.IsNull() && !error.IsUnwindError()) {
         OS::PrintErr("vm-service: Error: %s\n", error.ToErrorCString());
       }
       Dart::RunShutdownCallback();
diff --git a/runtime/vm/snapshot.cc b/runtime/vm/snapshot.cc
index 515d5a5..5875720 100644
--- a/runtime/vm/snapshot.cc
+++ b/runtime/vm/snapshot.cc
@@ -2226,15 +2226,18 @@
     return;
   }
 
-  if (as_reference && !raw->IsCanonical()) {
-    WriteObjectRef(raw);
-  } else {
+  // Objects are usually writen as references to avoid deep recursion, but in
+  // some places we know we are dealing with leaf or shallow objects and write
+  // them inline.
+  if (!as_reference || raw->IsCanonical()) {
     // Object is being serialized, add it to the forward ref list and mark
     // it so that future references to this object in the snapshot will use
     // an object id, instead of trying to serialize it again.
     forward_list_->MarkAndAddObject(raw, kIsSerialized);
 
     WriteInlinedObject(raw);
+  } else {
+    WriteObjectRef(raw);
   }
 }
 
diff --git a/runtime/vm/snapshot.h b/runtime/vm/snapshot.h
index 4623e9d..29671b4 100644
--- a/runtime/vm/snapshot.h
+++ b/runtime/vm/snapshot.h
@@ -989,6 +989,7 @@
   friend class RawContextScope;
   friend class RawExceptionHandlers;
   friend class RawField;
+  friend class RawFunction;
   friend class RawGrowableObjectArray;
   friend class RawImmutableArray;
   friend class RawInstructions;
@@ -1115,11 +1116,6 @@
 // objects to a snap shot.
 class SnapshotWriterVisitor : public ObjectPointerVisitor {
  public:
-  explicit SnapshotWriterVisitor(SnapshotWriter* writer)
-      : ObjectPointerVisitor(Isolate::Current()),
-        writer_(writer),
-        as_references_(true) {}
-
   SnapshotWriterVisitor(SnapshotWriter* writer, bool as_references)
       : ObjectPointerVisitor(Isolate::Current()),
         writer_(writer),
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index 8a91de7..c9fdbd4 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -327,6 +327,7 @@
   V(_instanceOfString, "_instanceOfString")                                    \
   V(_as, "_as")                                                                \
   V(GetterPrefix, "get:")                                                      \
+  V(ClosurizePrefix, "get:#")                                                  \
   V(SetterPrefix, "set:")                                                      \
   V(InitPrefix, "init:")                                                       \
   V(_New, "_new")                                                              \
diff --git a/runtime/vm/thread.cc b/runtime/vm/thread.cc
index 79ccec8..eff0922 100644
--- a/runtime/vm/thread.cc
+++ b/runtime/vm/thread.cc
@@ -343,14 +343,6 @@
 }
 
 
-void Thread::CloseTimelineBlock() {
-  if (timeline_block() != NULL) {
-    timeline_block()->Finish();
-    set_timeline_block(NULL);
-  }
-}
-
-
 bool Thread::CanLoadFromThread(const Object& object) {
 #define CHECK_OBJECT(type_name, member_name, expr, default_init_value)         \
   if (object.raw() == expr) return true;
diff --git a/runtime/vm/thread.h b/runtime/vm/thread.h
index 1847f5b..00f601f 100644
--- a/runtime/vm/thread.h
+++ b/runtime/vm/thread.h
@@ -261,15 +261,20 @@
   static intptr_t OffsetFromThread(const Object& object);
   static intptr_t OffsetFromThread(const RuntimeEntry* runtime_entry);
 
+  Mutex* timeline_block_lock() {
+    return &timeline_block_lock_;
+  }
+
+  // Only safe to access when holding |timeline_block_lock_|.
   TimelineEventBlock* timeline_block() const {
     return state_.timeline_block;
   }
 
+  // Only safe to access when holding |timeline_block_lock_|.
   void set_timeline_block(TimelineEventBlock* block) {
     state_.timeline_block = block;
   }
 
-  void CloseTimelineBlock();
   class Log* log() const;
 
   LongJumpScope* long_jump_base() const { return state_.long_jump_base; }
@@ -296,6 +301,7 @@
   Isolate* isolate_;
   Heap* heap_;
   State state_;
+  Mutex timeline_block_lock_;
   StoreBufferBlock* store_buffer_block_;
   class Log* log_;
 #define DECLARE_MEMBERS(type_name, member_name, expr, default_init_value)      \
diff --git a/runtime/vm/thread_registry.cc b/runtime/vm/thread_registry.cc
index 3648bff..44c0d13 100644
--- a/runtime/vm/thread_registry.cc
+++ b/runtime/vm/thread_registry.cc
@@ -10,7 +10,7 @@
 namespace dart {
 
 ThreadRegistry::~ThreadRegistry() {
-  CloseAllTimelineBlocks();
+  ReclaimTimelineBlocks();
   // Delete monitor.
   delete monitor_;
 }
@@ -70,10 +70,9 @@
   {
     TimelineEventRecorder* recorder = Timeline::recorder();
     if (recorder != NULL) {
-      MutexLocker recorder_lock(&recorder->lock_);
       // Cleanup entry.
       Entry& entry_to_remove = entries_[found_index];
-      CloseTimelineBlockLocked(&entry_to_remove);
+      ReclaimTimelineBlockLocked(&entry_to_remove);
     }
   }
   if (found_index != (length - 1)) {
@@ -84,27 +83,37 @@
 }
 
 
-void ThreadRegistry::CloseAllTimelineBlocks() {
+void ThreadRegistry::ReclaimTimelineBlocks() {
   // Each thread that is scheduled in this isolate may have a cached timeline
   // block. Mark these timeline blocks as finished.
   MonitorLocker ml(monitor_);
   TimelineEventRecorder* recorder = Timeline::recorder();
   if (recorder != NULL) {
-    MutexLocker recorder_lock(&recorder->lock_);
     for (intptr_t i = 0; i < entries_.length(); i++) {
       // NOTE: It is only safe to access |entry.state| here.
       Entry& entry = entries_[i];
-      CloseTimelineBlockLocked(&entry);
+      ReclaimTimelineBlockLocked(&entry);
     }
   }
 }
 
 
-void ThreadRegistry::CloseTimelineBlockLocked(Entry* entry) {
-  if ((entry != NULL) && !entry->scheduled &&
-      (entry->state.timeline_block != NULL)) {
-    entry->state.timeline_block->Finish();
+void ThreadRegistry::ReclaimTimelineBlockLocked(Entry* entry) {
+  if (entry == NULL) {
+    return;
+  }
+  TimelineEventRecorder* recorder = Timeline::recorder();
+  if (!entry->scheduled && (entry->state.timeline_block != NULL)) {
+    // Currently unscheduled thread.
+    recorder->FinishBlock(entry->state.timeline_block);
     entry->state.timeline_block = NULL;
+  } else if (entry->scheduled) {
+    // Currently scheduled thread.
+    Thread* thread = entry->thread;
+    // Take |Thread| lock.
+    MutexLocker thread_lock(thread->timeline_block_lock());
+    recorder->FinishBlock(thread->timeline_block());
+    thread->set_timeline_block(NULL);
   }
 }
 
diff --git a/runtime/vm/thread_registry.h b/runtime/vm/thread_registry.h
index 01f52a3..cf32f24 100644
--- a/runtime/vm/thread_registry.h
+++ b/runtime/vm/thread_registry.h
@@ -142,7 +142,7 @@
 
   void PruneThread(Thread* thread);
 
-  void CloseAllTimelineBlocks();
+  void ReclaimTimelineBlocks();
 
   struct Entry {
     // NOTE: |thread| is deleted automatically when the thread exits.
@@ -184,10 +184,8 @@
     return NULL;
   }
 
-  // Close the timeline block cache inside entry.
   // NOTE: Lock should be taken before this function is called.
-  // NOTE: Recorder lock should be taken before this function is called.
-  void CloseTimelineBlockLocked(Entry* entry);
+  void ReclaimTimelineBlockLocked(Entry* entry);
 
   // Note: Lock should be taken before this function is called.
   void CheckSafepointLocked();
diff --git a/runtime/vm/timeline.cc b/runtime/vm/timeline.cc
index 6b03d99..d55a8dc 100644
--- a/runtime/vm/timeline.cc
+++ b/runtime/vm/timeline.cc
@@ -26,6 +26,64 @@
             "Enable all timeline trace streams and output VM global trace "
             "into specified directory.");
 
+// Implementation notes:
+//
+// Writing events:
+// |TimelineEvent|s are written into |TimelineEventBlock|s. Each |Thread| caches
+// a |TimelineEventBlock| in TLS so that it can write events without
+// synchronizing with other threads in the system. Even though the |Thread| owns
+// the |TimelineEventBlock| the block may need to be reclaimed by the reporting
+// system. To support that, a |Thread| must hold its |timeline_block_lock_|
+// when operating on the |TimelineEventBlock|. This lock will only ever be
+// busy if blocks are being reclaimed by the reporting system.
+//
+// Reporting:
+// When requested, the timeline is serialized in the trace-event format
+// (https://goo.gl/hDZw5M). The request can be for a VM-wide timeline or an
+// isolate specific timeline. In both cases it may be that a thread has
+// a |TimelineEventBlock| cached in TLS. In order to report a complete timeline
+// the cached |TimelineEventBlock|s need to be reclaimed.
+//
+// Reclaiming open |TimelineEventBlock|s for an isolate:
+//
+// Cached |TimelineEventBlock|s can be in two places:
+// 1) In a |Thread| (Thread currently in an |Isolate|)
+// 2) In a |Thread::State| (Thread not currently in an |Isolate|).
+//
+// As a |Thread| enters and exits an |Isolate|, a |TimelineEventBlock|
+// will move between (1) and (2).
+//
+// The first case occurs for |Thread|s that are currently running inside an
+// isolate. The second case occurs for |Thread|s that are not currently
+// running inside an isolate.
+//
+// To reclaim the first case, we take the |Thread|'s |timeline_block_lock_|
+// and reclaim the cached block.
+//
+// To reclaim the second case, we can take the |ThreadRegistry| lock and
+// reclaim these blocks.
+//
+// |Timeline::ReclaimIsolateBlocks| and |Timeline::ReclaimAllBlocks| are
+// the two utility methods used to reclaim blocks before reporting.
+//
+// Locking notes:
+// The following locks are used by the timeline system:
+// - |TimelineEventRecorder::lock_| This lock is held whenever a
+// |TimelineEventBlock| is being requested or reclaimed.
+// - |Thread::timeline_block_lock_| This lock is held whenever a |Thread|'s
+// cached block is being operated on.
+// - |ThreadRegistry::monitor_| This lock protects the cached block for
+// unscheduled threads of an isolate.
+// - |Isolate::isolates_list_monitor_| This lock protects the list of
+// isolates in the system.
+//
+// Locks must always be taken in the following order:
+// |Isolate::isolates_list_monitor_|
+//   |ThreadRegistry::monitor_|
+//     |Thread::timeline_block_lock_|
+//       |TimelineEventRecorder::lock_|
+//
+
 void Timeline::InitOnce() {
   ASSERT(recorder_ == NULL);
   // Default to ring recorder being enabled.
@@ -77,6 +135,44 @@
 }
 
 
+void Timeline::ReclaimIsolateBlocks() {
+  ReclaimBlocksForIsolate(Isolate::Current());
+}
+
+
+class ReclaimBlocksIsolateVisitor : public IsolateVisitor {
+ public:
+  ReclaimBlocksIsolateVisitor() {}
+
+  virtual void VisitIsolate(Isolate* isolate) {
+    Timeline::ReclaimBlocksForIsolate(isolate);
+  }
+
+ private:
+};
+
+
+void Timeline::ReclaimAllBlocks() {
+  if (recorder() == NULL) {
+    return;
+  }
+  // Reclaim all blocks cached for all isolates.
+  ReclaimBlocksIsolateVisitor visitor;
+  Isolate::VisitIsolates(&visitor);
+  // Reclaim the global VM block.
+  recorder()->ReclaimGlobalBlock();
+}
+
+
+void Timeline::ReclaimBlocksForIsolate(Isolate* isolate) {
+  if (recorder() == NULL) {
+    return;
+  }
+  ASSERT(isolate != NULL);
+  isolate->ReclaimTimelineBlocks();
+}
+
+
 TimelineEventRecorder* Timeline::recorder_ = NULL;
 TimelineStream* Timeline::vm_stream_ = NULL;
 
@@ -114,7 +210,7 @@
 
 void TimelineEvent::AsyncBegin(const char* label, int64_t async_id) {
   Init(kAsyncBegin, label);
-  timestamp0_ = OS::GetCurrentTimeMicros();
+  timestamp0_ = OS::GetCurrentTraceMicros();
   // Overload timestamp1_ with the async_id.
   timestamp1_ = async_id;
 }
@@ -123,7 +219,7 @@
 void TimelineEvent::AsyncInstant(const char* label,
                                  int64_t async_id) {
   Init(kAsyncInstant, label);
-  timestamp0_ = OS::GetCurrentTimeMicros();
+  timestamp0_ = OS::GetCurrentTraceMicros();
   // Overload timestamp1_ with the async_id.
   timestamp1_ = async_id;
 }
@@ -132,7 +228,7 @@
 void TimelineEvent::AsyncEnd(const char* label,
                              int64_t async_id) {
   Init(kAsyncEnd, label);
-  timestamp0_ = OS::GetCurrentTimeMicros();
+  timestamp0_ = OS::GetCurrentTraceMicros();
   // Overload timestamp1_ with the async_id.
   timestamp1_ = async_id;
 }
@@ -140,18 +236,18 @@
 
 void TimelineEvent::DurationBegin(const char* label) {
   Init(kDuration, label);
-  timestamp0_ = OS::GetCurrentTimeMicros();
+  timestamp0_ = OS::GetCurrentTraceMicros();
 }
 
 
 void TimelineEvent::DurationEnd() {
-  timestamp1_ = OS::GetCurrentTimeMicros();
+  timestamp1_ = OS::GetCurrentTraceMicros();
 }
 
 
 void TimelineEvent::Instant(const char* label) {
   Init(kInstant, label);
-  timestamp0_ = OS::GetCurrentTimeMicros();
+  timestamp0_ = OS::GetCurrentTraceMicros();
 }
 
 
@@ -244,7 +340,7 @@
   set_event_type(event_type);
   timestamp0_ = 0;
   timestamp1_ = 0;
-  thread_ = OSThread::GetCurrentThreadId();
+  thread_ = OSThread::GetCurrentThreadTraceId();
   isolate_ = Isolate::Current();
   label_ = label;
   FreeArguments();
@@ -259,12 +355,12 @@
   obj.AddProperty("cat", category_);
   obj.AddProperty64("tid", tid);
   obj.AddProperty64("pid", pid);
-  obj.AddPropertyTimeMillis("ts", TimeOrigin());
+  obj.AddPropertyTimeMicros("ts", TimeOrigin());
 
   switch (event_type()) {
     case kDuration: {
       obj.AddProperty("ph", "X");
-      obj.AddPropertyTimeMillis("dur", TimeDuration());
+      obj.AddPropertyTimeMicros("dur", TimeDuration());
     }
     break;
     case kInstant: {
@@ -313,7 +409,7 @@
 int64_t TimelineEvent::TimeDuration() const {
   if (timestamp1_ == 0) {
     // This duration is still open, use current time as end.
-    return OS::GetCurrentTimeMicros() - timestamp0_;
+    return OS::GetCurrentTraceMicros() - timestamp0_;
   }
   return timestamp1_ - timestamp0_;
 }
@@ -394,9 +490,11 @@
 
 
 TimelineEvent* TimelineEventRecorder::ThreadBlockStartEvent() {
-  // Grab the thread's timeline event block.
+  // Grab the current thread.
   Thread* thread = Thread::Current();
   ASSERT(thread != NULL);
+  // We are accessing the thread's timeline block- so take the lock.
+  MutexLocker ml(thread->timeline_block_lock());
 
   if (thread->isolate() == NULL) {
     // Non-isolate thread case. This should be infrequent.
@@ -460,7 +558,7 @@
     return;
   }
 
-  FinishGlobalBlock();
+  Timeline::ReclaimAllBlocks();
 
   JSONStream js;
   TimelineEventFilter filter;
@@ -481,7 +579,7 @@
 }
 
 
-void TimelineEventRecorder::FinishGlobalBlock() {
+void TimelineEventRecorder::ReclaimGlobalBlock() {
   MutexLocker ml(&lock_);
   if (global_block_ != NULL) {
     global_block_->Finish();
@@ -498,6 +596,15 @@
 }
 
 
+void TimelineEventRecorder::FinishBlock(TimelineEventBlock* block) {
+  if (block == NULL) {
+    return;
+  }
+  MutexLocker ml(&lock_);
+  block->Finish();
+}
+
+
 TimelineEventBlock* TimelineEventRecorder::GetNewBlock() {
   MutexLocker ml(&lock_);
   return GetNewBlockLocked(Isolate::Current());
@@ -574,6 +681,13 @@
 }
 
 
+void TimelineEventRingRecorder::PrintTraceEvent(JSONStream* js,
+                                                TimelineEventFilter* filter) {
+  JSONArray events(js);
+  PrintJSONEvents(&events, filter);
+}
+
+
 TimelineEventBlock* TimelineEventRingRecorder::GetHeadBlockLocked() {
   return blocks_[0];
 }
@@ -640,6 +754,13 @@
 }
 
 
+void TimelineEventStreamingRecorder::PrintTraceEvent(
+    JSONStream* js,
+    TimelineEventFilter* filter) {
+  JSONArray events(js);
+}
+
+
 TimelineEvent* TimelineEventStreamingRecorder::StartEvent() {
   TimelineEvent* event = new TimelineEvent();
   return event;
@@ -671,6 +792,14 @@
 }
 
 
+void TimelineEventEndlessRecorder::PrintTraceEvent(
+    JSONStream* js,
+    TimelineEventFilter* filter) {
+  JSONArray events(js);
+  PrintJSONEvents(&events, filter);
+}
+
+
 TimelineEventBlock* TimelineEventEndlessRecorder::GetHeadBlockLocked() {
   return head_;
 }
@@ -744,7 +873,9 @@
 TimelineEventBlock::TimelineEventBlock(intptr_t block_index)
     : next_(NULL),
       length_(0),
-      block_index_(block_index) {
+      block_index_(block_index),
+      isolate_(NULL),
+      in_use_(false) {
 }
 
 
@@ -808,13 +939,13 @@
   }
   length_ = 0;
   isolate_ = NULL;
-  open_ = false;
+  in_use_ = false;
 }
 
 
 void TimelineEventBlock::Open(Isolate* isolate) {
   isolate_ = isolate;
-  open_ = true;
+  in_use_ = true;
 }
 
 
@@ -822,7 +953,7 @@
   if (FLAG_trace_timeline) {
     OS::Print("Finish block %p\n", this);
   }
-  open_ = false;
+  in_use_ = false;
 }
 
 
diff --git a/runtime/vm/timeline.h b/runtime/vm/timeline.h
index 335ff14..669652b 100644
--- a/runtime/vm/timeline.h
+++ b/runtime/vm/timeline.h
@@ -45,6 +45,13 @@
 
   static TimelineStream* GetVMStream();
 
+  // Reclaim all |TimelineEventBlock|s that are owned by the current isolate.
+  static void ReclaimIsolateBlocks();
+
+  // Reclaim all |TimelineEventBlocks|s that are owned by all isolates and
+  // the global block owned by the VM.
+  static void ReclaimAllBlocks();
+
 #define ISOLATE_TIMELINE_STREAM_FLAGS(name, not_used)                          \
   static const bool* Stream##name##EnabledFlag() {                             \
     return &stream_##name##_enabled_;                                          \
@@ -56,6 +63,8 @@
 #undef ISOLATE_TIMELINE_STREAM_FLAGS
 
  private:
+  static void ReclaimBlocksForIsolate(Isolate* isolate);
+
   static TimelineEventRecorder* recorder_;
   static TimelineStream* vm_stream_;
 
@@ -65,6 +74,7 @@
 #undef ISOLATE_TIMELINE_STREAM_DECLARE_FLAG
 
   friend class TimelineRecorderOverride;
+  friend class ReclaimBlocksIsolateVisitor;
 };
 
 
@@ -392,8 +402,8 @@
   void Reset();
 
   // Only safe to access under the recorder's lock.
-  bool open() const {
-    return open_;
+  bool in_use() const {
+    return in_use_;
   }
 
   // Only safe to access under the recorder's lock.
@@ -411,7 +421,7 @@
 
   // Only accessed under the recorder's lock.
   Isolate* isolate_;
-  bool open_;
+  bool in_use_;
 
   void Open(Isolate* isolate);
   void Finish();
@@ -437,8 +447,8 @@
     if (block == NULL) {
       return false;
     }
-    // Not empty and not open.
-    return !block->IsEmpty() && !block->open();
+    // Not empty and not in use.
+    return !block->IsEmpty() && !block->in_use();
   }
 
   virtual bool IncludeEvent(TimelineEvent* event) {
@@ -460,8 +470,8 @@
     if (block == NULL) {
       return false;
     }
-    // Not empty, not open, and isolate match.
-    return !block->IsEmpty() &&
+    // Not empty, not in use, and isolate match.
+    return !block->IsEmpty() && !block->in_use() &&
            (block->isolate() == isolate_);
   }
 
@@ -480,9 +490,12 @@
 
   // Interface method(s) which must be implemented.
   virtual void PrintJSON(JSONStream* js, TimelineEventFilter* filter) = 0;
+  virtual void PrintTraceEvent(JSONStream* js, TimelineEventFilter* filter) = 0;
 
   int64_t GetNextAsyncId();
 
+  void FinishBlock(TimelineEventBlock* block);
+
  protected:
   void WriteTo(const char* directory);
 
@@ -500,17 +513,15 @@
   Mutex lock_;
   // Only accessed under |lock_|.
   TimelineEventBlock* global_block_;
-  void FinishGlobalBlock();
+  void ReclaimGlobalBlock();
 
   uintptr_t async_id_;
 
-  friend class ThreadRegistry;
   friend class TimelineEvent;
   friend class TimelineEventBlockIterator;
   friend class TimelineStream;
   friend class TimelineTestHelper;
   friend class Timeline;
-  friend class Isolate;
 
  private:
   DISALLOW_COPY_AND_ASSIGN(TimelineEventRecorder);
@@ -526,6 +537,7 @@
   ~TimelineEventRingRecorder();
 
   void PrintJSON(JSONStream* js, TimelineEventFilter* filter);
+  void PrintTraceEvent(JSONStream* js, TimelineEventFilter* filter);
 
  protected:
   TimelineEvent* StartEvent();
@@ -550,6 +562,7 @@
   ~TimelineEventStreamingRecorder();
 
   void PrintJSON(JSONStream* js, TimelineEventFilter* filter);
+  void PrintTraceEvent(JSONStream* js, TimelineEventFilter* filter);
 
   // Called when |event| is ready to be streamed. It is unsafe to keep a
   // reference to |event| as it may be freed as soon as this function returns.
@@ -574,10 +587,8 @@
  public:
   TimelineEventEndlessRecorder();
 
-  // NOTE: Calling this while threads are filling in their blocks is not safe
-  // and there are no checks in place to ensure that doesn't happen.
-  // TODO(koda): Add isolate count to |ThreadRegistry| and verify that it is 1.
   void PrintJSON(JSONStream* js, TimelineEventFilter* filter);
+  void PrintTraceEvent(JSONStream* js, TimelineEventFilter* filter);
 
  protected:
   TimelineEvent* StartEvent();
diff --git a/runtime/vm/timeline_test.cc b/runtime/vm/timeline_test.cc
index 8cb358f..e023e28 100644
--- a/runtime/vm/timeline_test.cc
+++ b/runtime/vm/timeline_test.cc
@@ -441,7 +441,7 @@
   ASSERT(recorder != NULL);
   Zone* zone = thread->zone();
   Isolate* isolate = thread->isolate();
-  ThreadId tid = OSThread::GetCurrentThreadId();
+  ThreadId tid = OSThread::GetCurrentThreadTraceId();
 
   // Test case.
   TimelineTestHelper::FakeDuration(recorder, "a", 0, 10);
diff --git a/sdk/bin/docgen b/sdk/bin/docgen
deleted file mode 100755
index c6c5455..0000000
--- a/sdk/bin/docgen
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-# Copyright (c) 2014, 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.
-
-echo "The 'docgen' name is deprecated. Prefer 'dartdocgen' instead."
-dartdocgen "$@"
diff --git a/sdk/bin/docgen.bat b/sdk/bin/docgen.bat
deleted file mode 100644
index 63a214f..0000000
--- a/sdk/bin/docgen.bat
+++ /dev/null
@@ -1,7 +0,0 @@
-@echo off
-REM Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-REM for details. All rights reserved. Use of this source code is governed by a
-REM BSD-style license that can be found in the LICENSE file.
-
-echo "The 'docgen.bat' name is deprecated. Prefer 'dartdocgen.bat' instead."
-dartdocgen %*
diff --git a/sdk/lib/_internal/js_runtime/lib/constant_map.dart b/sdk/lib/_internal/js_runtime/lib/constant_map.dart
index 8f813fc..8a6a5c9 100644
--- a/sdk/lib/_internal/js_runtime/lib/constant_map.dart
+++ b/sdk/lib/_internal/js_runtime/lib/constant_map.dart
@@ -75,7 +75,7 @@
   final _jsObject;
   final List<K> _keys;
 
-  bool containsValue(V needle) {
+  bool containsValue(Object needle) {
     return values.any((V value) => value == needle);
   }
 
@@ -160,7 +160,7 @@
     return backingMap;
   }
 
-  bool containsValue(V needle) {
+  bool containsValue(Object needle) {
     return _getMap().containsValue(needle);
   }
 
diff --git a/sdk/lib/_internal/js_runtime/lib/interceptors.dart b/sdk/lib/_internal/js_runtime/lib/interceptors.dart
index 262213b..b13d79a 100644
--- a/sdk/lib/_internal/js_runtime/lib/interceptors.dart
+++ b/sdk/lib/_internal/js_runtime/lib/interceptors.dart
@@ -34,6 +34,7 @@
                               stringReplaceFirstUnchecked,
                               stringReplaceFirstMappedUnchecked,
                               stringReplaceRangeUnchecked,
+                              throwConcurrentModificationError,
                               lookupAndCacheInterceptor,
                               StringMatch,
                               firstMatchAfter,
diff --git a/sdk/lib/_internal/js_runtime/lib/js_array.dart b/sdk/lib/_internal/js_runtime/lib/js_array.dart
index ad369ab..78e53b1 100644
--- a/sdk/lib/_internal/js_runtime/lib/js_array.dart
+++ b/sdk/lib/_internal/js_runtime/lib/js_array.dart
@@ -650,7 +650,7 @@
     // inline moveNext() we might be able to GVN the length and eliminate this
     // check on known fixed length JSArray.
     if (_length != length) {
-      throw new ConcurrentModificationError(_iterable);
+      throw throwConcurrentModificationError(_iterable);
     }
 
     if (_index >= length) {
diff --git a/sdk/lib/_internal/js_runtime/lib/js_helper.dart b/sdk/lib/_internal/js_runtime/lib/js_helper.dart
index 0007532..e8b0a6b 100644
--- a/sdk/lib/_internal/js_runtime/lib/js_helper.dart
+++ b/sdk/lib/_internal/js_runtime/lib/js_helper.dart
@@ -845,6 +845,7 @@
   /// Returns the type of [object] as a string (including type arguments).
   ///
   /// In minified mode, uses the unminified names if available.
+  @NoInline()
   static String objectTypeName(Object object) {
     return formatType(_objectRawTypeName(object), getRuntimeTypeInfo(object));
   }
@@ -867,9 +868,8 @@
     }
 
     if (name == null ||
-        identical(interceptor,
-            JS_INTERCEPTOR_CONSTANT(UnknownJavaScriptObject)) ||
-        identical(interceptor, JS_INTERCEPTOR_CONSTANT(Interceptor))) {
+        identical(interceptor, JS_INTERCEPTOR_CONSTANT(Interceptor)) ||
+        object is UnknownJavaScriptObject) {
       // Try to do better.  If we do not find something better, leave the name
       // as 'UnknownJavaScriptObject' or 'Interceptor' (or the minified name).
       //
@@ -885,7 +885,6 @@
       // Try the [constructorNameFallback]. This gets the constructor name for
       // any browser (used by [getNativeInterceptor]).
       String dispatchName = constructorNameFallback(object);
-      if (name == null) name = dispatchName;
       if (dispatchName == 'Object') {
         // Try to decompile the constructor by turning it into a string and get
         // the name out of that. If the decompiled name is a string containing
@@ -900,11 +899,16 @@
             name = decompiledName;
           }
         }
+        if (name == null) name = dispatchName;
       } else {
         name = dispatchName;
       }
     }
 
+    // Type inference does not understand that [name] is now always a non-null
+    // String. (There is some imprecision in the negation of the disjunction.)
+    name = JS('String', '#', name);
+
     // TODO(kasperl): If the namer gave us a fresh global name, we may
     // want to remove the numeric suffix that makes it unique too.
     if (name.length > 1 && identical(name.codeUnitAt(0), DOLLAR_CHAR_VALUE)) {
diff --git a/sdk/lib/collection/maps.dart b/sdk/lib/collection/maps.dart
index 7945e7e..2f80388 100644
--- a/sdk/lib/collection/maps.dart
+++ b/sdk/lib/collection/maps.dart
@@ -60,7 +60,7 @@
     }
   }
 
-  bool containsValue(V value) {
+  bool containsValue(Object value) {
     for (K key in keys) {
       if (this[key] == value) return true;
     }
@@ -218,18 +218,18 @@
  * necessary to implement each particular operation.
  */
 class Maps {
-  static bool containsValue(Map map, value) {
+  static bool containsValue(Map map, Object value) {
     for (final v in map.values) {
-      if (value == v) {
+      if (v == value) {
         return true;
       }
     }
     return false;
   }
 
-  static bool containsKey(Map map, key) {
+  static bool containsKey(Map map, Object key) {
     for (final k in map.keys) {
-      if (key == k) {
+      if (k == key) {
         return true;
       }
     }
diff --git a/sdk/lib/collection/splay_tree.dart b/sdk/lib/collection/splay_tree.dart
index fea7d34..223e58c 100644
--- a/sdk/lib/collection/splay_tree.dart
+++ b/sdk/lib/collection/splay_tree.dart
@@ -325,7 +325,6 @@
   SplayTreeMap._internal();
 
   V operator [](Object key) {
-    if (key == null) throw new ArgumentError(key);
     if (!_validKey(key)) return null;
     if (_root != null) {
       int comp = _splay(key);
diff --git a/sdk/lib/convert/base64.dart b/sdk/lib/convert/base64.dart
new file mode 100644
index 0000000..64a63e6
--- /dev/null
+++ b/sdk/lib/convert/base64.dart
@@ -0,0 +1,619 @@
+// Copyright (c) 2015, 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.
+
+part of dart.convert;
+
+/**
+ * An instance of [Base64Codec].
+ *
+ * This instance provides a convenient access to
+ * [base64](https://tools.ietf.org/html/rfc4648) encoding and decoding.
+ *
+ * It encodes and decodes using the default base64 alphabet, does not allow
+ * any invalid characters when decoding, and requires padding.
+ *
+ * Examples:
+ *
+ *     var encoded = BASE64.encode([0x62, 0x6c, 0xc3, 0xa5, 0x62, 0xc3, 0xa6,
+ *                                  0x72, 0x67, 0x72, 0xc3, 0xb8, 0x64]);
+ *     var decoded = BASE64.decode("YmzDpWLDpnJncsO4ZAo=");
+ */
+const Base64Codec BASE64 = const Base64Codec();
+
+// Constants used in more than one class.
+const int _paddingChar = 0x3d;  // '='.
+
+/**
+ * A [base64](https://tools.ietf.org/html/rfc4648) encoder and decoder.
+ *
+ * A [Base64Codec] allows base64 encoding bytes into ASCII strings and
+ * decoding valid encodings back to bytes.
+ *
+ * This implementation only handles the simplest RFC 4648 base-64 encoding.
+ * It does not allow invalid characters when decoding and it requires,
+ * and generates, padding so that the input is always a multiple of four
+ * characters.
+ */
+class Base64Codec extends Codec<List<int>, String> {
+  const Base64Codec();
+
+  Base64Encoder get encoder => const Base64Encoder();
+
+  Base64Decoder get decoder => const Base64Decoder();
+}
+
+// ------------------------------------------------------------------------
+// Encoder
+// ------------------------------------------------------------------------
+
+/**
+ * Base-64 encoding converter.
+ *
+ * Encodes lists of bytes using base64 encoding.
+ * The result are ASCII strings using a restricted alphabet.
+ */
+class Base64Encoder extends Converter<List<int>, String> {
+  const Base64Encoder();
+
+  String convert(List<int> input) {
+    if (input.isEmpty) return "";
+    var encoder = new _Base64Encoder();
+    Uint8List buffer = encoder.encode(input, 0, input.length, true);
+    return new String.fromCharCodes(buffer);
+  }
+
+  ByteConversionSink startChunkedConversion(Sink<String> sink) {
+    if (sink is StringConversionSink) {
+      return new _Utf8Base64EncoderSink(sink.asUtf8Sink(false));
+    }
+    return new _AsciiBase64EncoderSink(sink);
+  }
+
+  Stream<String> bind(Stream<List<int>> stream) {
+    return new Stream<String>.eventTransformed(
+        stream,
+        (EventSink sink) =>
+            new _ConverterStreamEventSink<List<int>, String>(this, sink));
+  }
+}
+
+/**
+ * Helper class for encoding bytes to BASE-64.
+ */
+class _Base64Encoder {
+  /** The RFC 4648 base64 encoding alphabet. */
+  static const String _base64Alphabet =
+      "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
+  /** Shift-count to extract the values stored in [_state]. */
+  static const int _valueShift = 2;
+
+  /** Mask to extract the count value stored in [_state]. */
+  static const int _countMask = 3;
+
+  static const int _sixBitMask = 0x3F;
+
+  /**
+   * Intermediate state between chunks.
+   *
+   * Encoding handles three bytes at a time.
+   * If fewer than three bytes has been seen, this value encodes
+   * the number of bytes seen (0, 1 or 2) and their values.
+   */
+  int _state = 0;
+
+  /** Encode count and bits into a value to be stored in [_state]. */
+  static int _encodeState(int count, int bits) {
+    assert(count <= _countMask);
+    return bits << _valueShift | count;
+  }
+
+  /** Extract bits from encoded state. */
+  static int _stateBits(int state) => state >> _valueShift;
+
+  /** Extract count from encoded state. */
+  static int _stateCount(int state) => state & _countMask;
+
+  /**
+   * Create a [Uint8List] with the provided length.
+   */
+  Uint8List createBuffer(int bufferLength) => new Uint8List(bufferLength);
+
+  /**
+   * Encode [bytes] from [start] to [end] and the bits in [_state].
+   *
+   * Returns a [Uint8List] of the ASCII codes of the encoded data.
+   *
+   * If the input, including left over [_state] from earlier encodings,
+   * are not a multiple of three bytes, then the partial state is stored
+   * back into [_state].
+   * If [isLast] is true, partial state is encoded in the output instead,
+   * with the necessary padding.
+   *
+   * Returns `null` if there is no output.
+   */
+  Uint8List encode(List<int> bytes, int start, int end, bool isLast) {
+    assert(0 <= start);
+    assert(start <= end);
+    assert(bytes == null || end <= bytes.length);
+    int length = end - start;
+
+    int count = _stateCount(_state);
+    int byteCount = (count + length);
+    int fullChunks = byteCount ~/ 3;
+    int partialChunkLength = byteCount - fullChunks * 3;
+    int bufferLength = fullChunks * 4;
+    if (isLast && partialChunkLength > 0) {
+      bufferLength += 4;  // Room for padding.
+    }
+    var output = createBuffer(bufferLength);
+    _state = encodeChunk(bytes, start, end, isLast, output, 0, _state);
+    if (bufferLength > 0) return output;
+    // If the input plus the data in state is still less than three bytes,
+    // there may not be any output.
+    return null;
+  }
+
+  static int encodeChunk(List<int> bytes, int start, int end, bool isLast,
+                          Uint8List output, int outputIndex, int state) {
+    int bits = _stateBits(state);
+    // Count number of missing bytes in three-byte chunk.
+    int expectedChars = 3 - _stateCount(state);
+
+    // The input must be a list of bytes (integers in the range 0..255).
+    // The value of `byteOr` will be the bitwise or of all the values in
+    // `bytes` and a later check will validate that they were all valid bytes.
+    int byteOr = 0;
+    for (int i = start; i < end; i++) {
+      int byte = bytes[i];
+      byteOr |= byte;
+      bits = ((bits << 8) | byte) & 0xFFFFFF;  // Never store more than 24 bits.
+      expectedChars--;
+      if (expectedChars == 0) {
+        output[outputIndex++] =
+            _base64Alphabet.codeUnitAt((bits >> 18) & _sixBitMask);
+        output[outputIndex++] =
+            _base64Alphabet.codeUnitAt((bits >> 12) & _sixBitMask);
+        output[outputIndex++] =
+            _base64Alphabet.codeUnitAt((bits >> 6) & _sixBitMask);
+        output[outputIndex++] =
+            _base64Alphabet.codeUnitAt(bits & _sixBitMask);
+        expectedChars = 3;
+        bits = 0;
+      }
+    }
+    if (byteOr >= 0 && byteOr <= 255) {
+      if (isLast && expectedChars < 3) {
+        writeFinalChunk(output, outputIndex, 3 - expectedChars, bits);
+        return 0;
+      }
+      return _encodeState(3 - expectedChars, bits);
+    }
+
+    // There was an invalid byte value somewhere in the input - find it!
+    int i = start;
+    while (i < end) {
+      int byte = bytes[i];
+      if (byte < 0 || byte > 255) break;
+      i++;
+    }
+    throw new ArgumentError.value(bytes,
+        "Not a byte value at index $i: 0x${bytes[i].toRadixString(16)}");
+  }
+
+  /**
+   * Writes a final encoded four-character chunk.
+   *
+   * Only used when the [_state] contains a partial (1 or 2 byte)
+   * input.
+   */
+  static void writeFinalChunk(Uint8List output, int outputIndex,
+                              int count, int bits) {
+    assert(count > 0);
+    if (count == 1) {
+      output[outputIndex++] =
+          _base64Alphabet.codeUnitAt((bits >> 2) & _sixBitMask);
+      output[outputIndex++] =
+          _base64Alphabet.codeUnitAt((bits << 4) & _sixBitMask);
+      output[outputIndex++] = _paddingChar;
+      output[outputIndex++] = _paddingChar;
+    } else {
+      assert(count == 2);
+      output[outputIndex++] =
+          _base64Alphabet.codeUnitAt((bits >> 10) & _sixBitMask);
+      output[outputIndex++] =
+          _base64Alphabet.codeUnitAt((bits >> 4) & _sixBitMask);
+      output[outputIndex++] =
+          _base64Alphabet.codeUnitAt((bits << 2) & _sixBitMask);
+      output[outputIndex++] = _paddingChar;
+    }
+  }
+}
+
+class _BufferCachingBase64Encoder extends _Base64Encoder {
+  /**
+   * Reused buffer.
+   *
+   * When the buffer isn't released to the sink, only used to create another
+   * value (a string), the buffer can be reused between chunks.
+   */
+  Uint8List bufferCache;
+
+  Uint8List createBuffer(int bufferLength) {
+    if (bufferCache == null || bufferCache.length < bufferLength) {
+      bufferCache = new Uint8List(bufferLength);
+    }
+    // Return a view of the buffer, so it has the reuested length.
+    return new Uint8List.view(bufferCache.buffer, 0, bufferLength);
+  }
+}
+
+abstract class _Base64EncoderSink extends ByteConversionSinkBase {
+  void add(List<int> source) {
+    _add(source, 0, source.length, false);
+  }
+
+  void close() {
+    _add(null, 0, 0, true);
+  }
+
+  void addSlice(List<int> source, int start, int end, bool isLast) {
+    if (end == null) throw new ArgumentError.notNull("end");
+    RangeError.checkValidRange(start, end, source.length);
+    _add(source, start, end, isLast);
+  }
+
+  void _add(List<int> source, int start, int end, bool isLast);
+}
+
+class _AsciiBase64EncoderSink extends _Base64EncoderSink {
+  final _Base64Encoder _encoder = new _BufferCachingBase64Encoder();
+
+  final ChunkedConversionSink<String> _sink;
+
+  _AsciiBase64EncoderSink(this._sink);
+
+  void _add(List<int> source, int start, int end, bool isLast) {
+    Uint8List buffer = _encoder.encode(source, start, end, isLast);
+    if (buffer != null) {
+      String string = new String.fromCharCodes(buffer);
+      _sink.add(string);
+    }
+    if (isLast) {
+      _sink.close();
+    }
+  }
+}
+
+class _Utf8Base64EncoderSink extends _Base64EncoderSink {
+  final ByteConversionSink _sink;
+  final _Base64Encoder _encoder = new _Base64Encoder();
+
+  _Utf8Base64EncoderSink(this._sink);
+
+  void _add(List<int> source, int start, int end, bool isLast) {
+    Uint8List buffer = _encoder.encode(source, start, end, isLast);
+    if (buffer != null) {
+      _sink.addSlice(buffer, 0, buffer.length, isLast);
+    }
+  }
+}
+
+// ------------------------------------------------------------------------
+// Decoder
+// ------------------------------------------------------------------------
+
+class Base64Decoder extends Converter<String, List<int>> {
+  const Base64Decoder();
+
+  List<int> convert(String input) {
+    if (input.isEmpty) return new Uint8List(0);
+    int length = input.length;
+    if (length % 4 != 0) {
+      throw new FormatException("Invalid length, must be multiple of four",
+                                input, length);
+    }
+    var decoder = new _Base64Decoder();
+    Uint8List buffer = decoder.decode(input, 0, input.length);
+    decoder.close(input, input.length);
+    return buffer;
+  }
+
+  StringConversionSink startChunkedConversion(Sink<List<int>> sink) {
+    return new _Base64DecoderSink(sink);
+  }
+}
+
+/**
+ * Helper class implementing base64 decoding with intermediate state.
+ */
+class _Base64Decoder {
+  /** Shift-count to extract the values stored in [_state]. */
+  static const int _valueShift = 2;
+
+  /** Mask to extract the count value stored in [_state]. */
+  static const int _countMask = 3;
+
+  /** Invalid character in decoding table. */
+  static const int _invalid = -2;
+
+  /** Padding character in decoding table. */
+  static const int _padding = -1;
+
+  // Shorthands to make the table more readable.
+  static const int __ = _invalid;
+  static const int _p = _padding;
+
+  /**
+   * Mapping from ASCII characters to their index in the base64 alphabet.
+   *
+   * Uses [_invalid] for invalid indices and [_padding] for the padding
+   * character.
+   */
+  static final List<int> _inverseAlphabet = new Int8List.fromList([
+    __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __,
+    __, __, __, __, __, __, __, __, __, __, __, __, __, __, __, __,
+    __, __, __, __, __, __, __, __, __, __, __, 62, __, __, __, 63,
+    52, 53, 54, 55, 56, 57, 58, 59, 60, 61, __, __, __, _p, __, __,
+    __,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
+    15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, __, __, __, __, __,
+    __, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+    41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, __, __, __, __, __,
+  ]);
+
+  /**
+   * Maintains the intermediate state of a partly-decoded input.
+   *
+   * BASE-64 is decoded in chunks of four characters. If a chunk does not
+   * contain a full block, the decoded bits (six per character) of the
+   * available characters are stored in [_state] until the next call to
+   * [_decode] or [_close].
+   *
+   * If no padding has been seen, the value is
+   *   `numberOfCharactersSeen | (decodedBits << 2)`
+   * where `numberOfCharactersSeen` is between 0 and 3 and decoded bits
+   * contains six bits per seen character.
+   *
+   * If padding has been seen the value is negative. It's the bitwise negation
+   * of the number of remanining allowed padding characters (always ~0 or ~1).
+   *
+   * A state of `0` or `~0` are valid places to end decoding, all other values
+   * mean that a four-character block has not been completed.
+   */
+  int _state = 0;
+
+  /**
+   * Encodes [count] and [bits] as a value to be stored in [_state].
+   */
+  static int _encodeCharacterState(int count, int bits) {
+    assert(count == (count & _countMask));
+    return (bits << _valueShift | count);
+  }
+
+  /**
+   * Extracts count from a [_state] value.
+   */
+  static int _stateCount(int state) {
+    assert(state >= 0);
+    return state & _countMask;
+  }
+
+  /**
+   * Extracts value bits from a [_state] value.
+   */
+  static int _stateBits(int state) {
+    assert(state >= 0);
+    return state >> _valueShift;
+  }
+
+  /**
+   * Encodes a number of expected padding characters to be stored in [_state].
+   */
+  static int _encodePaddingState(int expectedPadding) {
+    assert(expectedPadding >= 0);
+    assert(expectedPadding <= 1);
+    return -expectedPadding - 1;  // ~expectedPadding adapted to dart2js.
+  }
+
+  /**
+   * Extracts expected padding character count from a [_state] value.
+   */
+  static int _statePadding(int state) {
+    assert(state < 0);
+    return -state - 1;  // ~state adapted to dart2js.
+  }
+
+  static bool _hasSeenPadding(int state) => state < 0;
+
+  /**
+   * Decodes [input] from [start] to [end].
+   *
+   * Returns a [Uint8List] with the decoded bytes.
+   * If a previous call had an incomplete four-character block, the bits from
+   * those are included in decoding
+   */
+  Uint8List decode(String input, int start, int end) {
+    assert(0 <= start);
+    assert(start <= end);
+    assert(end <= input.length);
+    if (_hasSeenPadding(_state)) {
+      _state = _checkPadding(input, start, end, _state);
+      return null;
+    }
+    if (start == end) return new Uint8List(0);
+    Uint8List buffer = _allocateBuffer(input, start, end, _state);
+    _state = decodeChunk(input, start, end, buffer, 0, _state);
+    return buffer;
+  }
+
+  /** Checks that [_state] represents a valid decoding. */
+  void close(String input, int end) {
+    if (_state < _encodePaddingState(0)) {
+      throw new FormatException("Missing padding character", input, end);
+    }
+    if (_state > 0) {
+      throw new FormatException("Invalid length, must be multiple of four",
+                                input, end);
+    }
+    _state = _encodePaddingState(0);
+  }
+
+  /**
+   * Decodes [input] from [start] to [end].
+   *
+   * Includes the state returned by a previous call in the decoding.
+   * Writes the decoding to [output] at [outIndex], and there must
+   * be room in the output.
+   */
+  static int decodeChunk(String input, int start, int end,
+                          Uint8List output, int outIndex,
+                          int state) {
+    assert(!_hasSeenPadding(state));
+    const int asciiMask = 127;
+    const int asciiMax = 127;
+    const int eightBitMask = 0xFF;
+    const int bitsPerCharacter = 6;
+
+    int bits = _stateBits(state);
+    int count = _stateCount(state);
+    // String contents should be all ASCII.
+    // Instead of checking for each character, we collect the bitwise-or of
+    // all the characters in `charOr` and later validate that all characters
+    // were ASCII.
+    int charOr = 0;
+    for (int i = start; i < end; i++) {
+      var char = input.codeUnitAt(i);
+      charOr |= char;
+      int code = _inverseAlphabet[char & asciiMask];
+      if (code >= 0) {
+        bits = ((bits << bitsPerCharacter) | code) & 0xFFFFFF;
+        count = (count + 1) & 3;
+        if (count == 0) {
+          assert(outIndex + 3 <= output.length);
+          output[outIndex++] = (bits >> 16) & eightBitMask;
+          output[outIndex++] = (bits >> 8) & eightBitMask;
+          output[outIndex++] = bits & eightBitMask;
+          bits = 0;
+        }
+        continue;
+      } else if (code == _padding && count > 1) {
+        if (count == 3) {
+          if ((bits & 0x03) != 0) {
+            throw new FormatException(
+                "Invalid encoding before padding", input, i);
+          }
+          output[outIndex++] = bits >> 10;
+          output[outIndex++] = bits >> 2;
+        } else {
+          if ((bits & 0x0F) != 0) {
+            throw new FormatException(
+                "Invalid encoding before padding", input, i);
+          }
+          output[outIndex++] = bits >> 4;
+        }
+        int expectedPadding = 3 - count;
+        state = _encodePaddingState(expectedPadding);
+        return _checkPadding(input, i + 1, end, state);
+      }
+      throw new FormatException("Invalid character", input, i);
+    }
+    if (charOr >= 0 && charOr <= asciiMax) {
+      return _encodeCharacterState(count, bits);
+    }
+    // There is an invalid (non-ASCII) character in the input.
+    int i;
+    for (i = start; i < end; i++) {
+      int char = input.codeUnitAt(i);
+      if (char < 0 || char > asciiMax) break;
+    }
+    throw new FormatException("Invalid character", input, i);
+  }
+
+  /**
+   * Allocates a buffer with room for the decoding of a substring of [input].
+   *
+   * Includes room for the characters in [state], and handles padding correctly.
+   */
+  static Uint8List _allocateBuffer(String input, int start, int end,
+                                   int state) {
+    assert(state >= 0);
+    int padding = 0;
+    int length = _stateCount(state) + (end - start);
+    if (end > start && input.codeUnitAt(end - 1) == _paddingChar) {
+      padding++;
+      if (end - 1 > start && input.codeUnitAt(end - 2) == _paddingChar) {
+        padding++;
+      }
+    }
+    // Three bytes per full four bytes in the input.
+    int bufferLength = (length >> 2) * 3;
+    // If padding was seen, then remove the padding if it was counter, or
+    // add the last partial chunk it it wasn't counted.
+    int remainderLength = length & 3;
+    if (remainderLength == 0) {
+      bufferLength -= padding;
+    } else if (padding != 0 && remainderLength - padding > 1) {
+      bufferLength += remainderLength - 1 - padding;
+    }
+    if (bufferLength > 0) return new Uint8List(bufferLength);
+    // If the input plus state is less than four characters, no buffer
+    // is needed.
+    return null;
+  }
+
+  /**
+   * Check that the remainder of the string is valid padding.
+   *
+   * That means zero or one padding character (depending on [_state])
+   * and nothing else.
+   */
+  static int _checkPadding(String input, int start, int end, int state) {
+    assert(_hasSeenPadding(state));
+    if (start == end) return state;
+    int expectedPadding = _statePadding(state);
+    if (expectedPadding > 0) {
+      int firstChar = input.codeUnitAt(start);
+      if (firstChar != _paddingChar) {
+        throw new FormatException("Missing padding character", input, start);
+      }
+      state = _encodePaddingState(0);
+      start++;
+    }
+    if (start != end) {
+      throw new FormatException("Invalid character after padding",
+                                input, start);
+    }
+    return state;
+  }
+}
+
+class _Base64DecoderSink extends StringConversionSinkBase {
+  /** Output sink */
+  final ChunkedConversionSink<List<int>> _sink;
+  final _Base64Decoder _decoder = new _Base64Decoder();
+
+  _Base64DecoderSink(this._sink);
+
+  void add(String string) {
+    if (string.isEmpty) return;
+    Uint8List buffer = _decoder.decode(string, 0, string.length);
+    if (buffer != null) _sink.add(buffer);
+  }
+
+  void close() {
+    _decoder.close(null, null);
+    _sink.close();
+  }
+
+  void addSlice(String string, int start, int end, bool isLast) {
+    end = RangeError.checkValidRange(start, end, string.length);
+    if (start == end) return;
+    Uint8List buffer = _decoder.decode(string, start, end);
+    if (buffer != null) _sink.add(buffer);
+    if (isLast) {
+      _decoder.close(string, end);
+      _sink.close();
+    }
+  }
+}
diff --git a/sdk/lib/convert/convert.dart b/sdk/lib/convert/convert.dart
index a047cc0..da0c87c 100644
--- a/sdk/lib/convert/convert.dart
+++ b/sdk/lib/convert/convert.dart
@@ -58,6 +58,7 @@
 import 'dart:typed_data';
 
 part 'ascii.dart';
+part 'base64.dart';
 part 'byte_conversion.dart';
 part 'chunked_conversion.dart';
 part 'codec.dart';
diff --git a/sdk/lib/convert/convert_sources.gypi b/sdk/lib/convert/convert_sources.gypi
index 6c5267f..d8d40cb 100644
--- a/sdk/lib/convert/convert_sources.gypi
+++ b/sdk/lib/convert/convert_sources.gypi
@@ -8,6 +8,7 @@
     'convert.dart',
     # The above file needs to be first as it lists the parts below.
     'ascii.dart',
+    'base64.dart',
     'byte_conversion.dart',
     'chunked_conversion.dart',
     'codec.dart',
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index ece22d3..b581f65 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -13328,15 +13328,38 @@
 	     return true;
 	   }
 	 }
+         var length = 0;
+         if (element.children) {
+           length = element.children.length;
+         }
+         for (var i = 0; i < length; i++) {
+           var child = element.children[i];
+           // On IE it seems like we sometimes don't see the clobbered attribute,
+           // perhaps as a result of an over-optimization. Also use another route
+           // to check of attributes, children, or lastChild are clobbered. It may
+           // seem silly to check children as we rely on children to do this iteration,
+           // but it seems possible that the access to children might see the real thing,
+           // allowing us to check for clobbering that may show up in other accesses.
+           if (child["id"] == 'attributes' || child["name"] == 'attributes' ||
+               child["id"] == 'lastChild'  || child["name"] == 'lastChild' ||
+               child["id"] == 'children' || child["name"] == 'children') {
+             return true;
+           }
+         }
 	 return false;
           })(#)''', element);
   }
 
-  String get _safeTagName {
+  /// A secondary check for corruption, needed on IE
+  static bool _hasCorruptedAttributesAdditionalCheck(Element element) {
+    return JS('bool', r'!(#.attributes instanceof NamedNodeMap)', element);
+  }
+
+  static String _safeTagName(element) {
     String result = 'element tag unavailable';
     try {
-      if (tagName is String) {
-        result = tagName;
+      if (element.tagName is String) {
+        result = element.tagName;
       }
     } catch (e) {}
     return result;
@@ -37931,11 +37954,11 @@
   }
 
   bool allowsElement(Element element) {
-    return _allowedElements.contains(element._safeTagName);
+    return _allowedElements.contains(Element._safeTagName(element));
   }
 
   bool allowsAttribute(Element element, String attributeName, String value) {
-    var tagName = element._safeTagName;
+    var tagName = Element._safeTagName(element);
     var validator = _attributeValidators['$tagName::$attributeName'];
     if (validator == null) {
       validator = _attributeValidators['*::$attributeName'];
@@ -39597,11 +39620,11 @@
   }
 
   bool allowsElement(Element element) {
-    return allowedElements.contains(element._safeTagName);
+    return allowedElements.contains(Element._safeTagName(element));
   }
 
   bool allowsAttribute(Element element, String attributeName, String value) {
-    var tagName = element._safeTagName;
+    var tagName = Element._safeTagName(element);
     if (allowedUriAttributes.contains('$tagName::$attributeName')) {
       return uriPolicy.allowsUri(value);
     } else if (allowedUriAttributes.contains('*::$attributeName')) {
@@ -39642,10 +39665,10 @@
       var isAttr = element.attributes['is'];
       if (isAttr != null) {
         return allowedElements.contains(isAttr.toUpperCase()) &&
-          allowedElements.contains(element._safeTagName);
+            allowedElements.contains(Element._safeTagName(element));
       }
     }
-    return allowCustomTag && allowedElements.contains(element._safeTagName);
+    return allowCustomTag && allowedElements.contains(Element._safeTagName(element));
   }
 
   bool allowsAttribute(Element element, String attributeName, String value) {
@@ -39701,7 +39724,7 @@
     // foreignobject tag as SvgElement. We don't want foreignobject contents
     // anyway, so just remove the whole tree outright. And we can't rely
     // on IE recognizing the SvgForeignObject type, so go by tagName. Bug 23144
-    if (element is svg.SvgElement && element._safeTagName == 'foreignObject') {
+    if (element is svg.SvgElement && Element._safeTagName(element) == 'foreignObject') {
       return false;
     }
     if (element is svg.SvgElement) {
@@ -40828,14 +40851,14 @@
 
   bool allowsElement(Element element) {
     if (!validator.allowsElement(element)) {
-      throw new ArgumentError(element._safeTagName);
+      throw new ArgumentError(Element._safeTagName(element));
     }
     return true;
   }
 
   bool allowsAttribute(Element element, String attributeName, String value) {
     if (!validator.allowsAttribute(element, attributeName, value)) {
-      throw new ArgumentError('${element._safeTagName}[$attributeName="$value"]');
+      throw new ArgumentError('${Element._safeTagName(element)}[$attributeName="$value"]');
     }
   }
 }
@@ -40877,7 +40900,7 @@
   }
 
   /// Sanitize the element, assuming we can't trust anything about it.
-  void _sanitizeUntrustedElement(Element element, Node parent) {
+  void _sanitizeUntrustedElement(/* Element */ element, Node parent) {
     // If the _hasCorruptedAttributes does not successfully return false,
     // then we consider it corrupted and remove.
     // TODO(alanknight): This is a workaround because on Firefox
@@ -40886,7 +40909,9 @@
     // can't call methods. This does mean that you can't explicitly allow an
     // embed tag. The only thing that will let it through is a null
     // sanitizer that doesn't traverse the tree at all. But sanitizing while
-    // allowing embeds seems quite unlikely.
+    // allowing embeds seems quite unlikely. This is also the reason that we
+    // can't declare the type of element, as an embed won't pass any type
+    // check in dart2js.
     var corrupted = true;
     var attrs;
     var isAttr;
@@ -40894,15 +40919,27 @@
       // If getting/indexing attributes throws, count that as corrupt.
       attrs = element.attributes;
       isAttr = attrs['is'];
-      corrupted = Element._hasCorruptedAttributes(element);
+      var corruptedTest1 = Element._hasCorruptedAttributes(element);
+
+      // On IE, erratically, the hasCorruptedAttributes test can return false,
+      // even though it clearly is corrupted. A separate copy of the test
+      // inlining just the basic check seems to help.
+      corrupted = corruptedTest1 ? true : Element._hasCorruptedAttributesAdditionalCheck(element);
     } catch(e) {}
-     var elementText = 'element unprintable';
+    var elementText = 'element unprintable';
     try {
       elementText = element.toString();
     } catch(e) {}
-    var elementTagName = element._safeTagName;
-    _sanitizeElement(element, parent, corrupted, elementText, elementTagName,
-        attrs, isAttr);
+    try {
+      var elementTagName = Element._safeTagName(element);
+      _sanitizeElement(element, parent, corrupted, elementText, elementTagName,
+          attrs, isAttr);
+    } on ArgumentError { // Thrown by _ThrowsNodeValidator
+      rethrow;
+    } catch(e) {  // Unexpected exception sanitizing -> remove
+      _removeNode(element, parent);
+      window.console.warn('Removing corrupted element $elementText');
+    }
   }
 
   /// Having done basic sanity checking on the element, and computed the
@@ -40911,23 +40948,23 @@
   void _sanitizeElement(Element element, Node parent, bool corrupted,
       String text, String tag, Map attrs, String isAttr) {
     if (false != corrupted) {
+       _removeNode(element, parent);
       window.console.warn(
           'Removing element due to corrupted attributes on <$text>');
-       _removeNode(element, parent);
        return;
     }
     if (!validator.allowsElement(element)) {
-      window.console.warn(
-          'Removing disallowed element <$tag>');
       _removeNode(element, parent);
+      window.console.warn(
+          'Removing disallowed element <$tag> from $parent');
       return;
     }
 
     if (isAttr != null) {
       if (!validator.allowsAttribute(element, 'is', isAttr)) {
+        _removeNode(element, parent);
         window.console.warn('Removing disallowed type extension '
             '<$tag is="$isAttr">');
-        _removeNode(element, parent);
         return;
       }
     }
diff --git a/sdk/lib/html/dartium/html_dartium.dart b/sdk/lib/html/dartium/html_dartium.dart
index 9925893..95c43f6 100644
--- a/sdk/lib/html/dartium/html_dartium.dart
+++ b/sdk/lib/html/dartium/html_dartium.dart
@@ -14778,11 +14778,14 @@
     return false;
   }
 
-  String get _safeTagName {
+  /// A secondary check for corruption, needed on IE
+  static bool _hasCorruptedAttributesAdditionalCheck(Element element) => false;
+
+  static String _safeTagName(element) {
     String result = 'element tag unavailable';
     try {
-      if (tagName is String) {
-        result = tagName;
+      if (element.tagName is String) {
+        result = element.tagName;
       }
     } catch (e) {}
     return result;
@@ -20145,7 +20148,8 @@
 
     while (classMirror.superclass != null) {
       var fullName = classMirror.superclass.qualifiedName;
-      isElement = isElement || (fullName == #dart.dom.html.Element);
+      isElement = isElement ||
+          (fullName == #dart.dom.html.Element || fullName == #dart.dom.svg.Element);
 
       var domLibrary = MirrorSystem.getName(fullName).startsWith('dart.dom.');
       if (jsClassName == null && domLibrary) {
@@ -20155,7 +20159,7 @@
           var metaDataMirror = metadata.reflectee;
           var metaType = reflectClass(metaDataMirror.runtimeType);
           if (MirrorSystem.getName(metaType.simpleName) == 'DomName' &&
-              metaDataMirror.name.startsWith('HTML')) {
+              (metaDataMirror.name.startsWith('HTML') || metaDataMirror.name.startsWith('SVG'))) {
             jsClassName = metadata.reflectee.name;
           }
         }
@@ -20168,6 +20172,87 @@
     return isElement ? jsClassName : null;
   }
 
+  /**
+   * Get the class that immediately derived from a class in dart:html or
+   * dart:svg (has an attribute DomName of either HTML* or SVG*).
+   */
+  ClassMirror _getDomSuperClass(ClassMirror classMirror) {
+    var isElement = false;
+
+    while (classMirror.superclass != null) {
+      var fullName = classMirror.superclass.qualifiedName;
+      isElement = isElement || (fullName == #dart.dom.html.Element || fullName == #dart.dom.svg.Element);
+
+      var domLibrary = MirrorSystem.getName(fullName).startsWith('dart.dom.');
+      if (domLibrary) {
+        // Lookup JS class (if not found).
+        var metadatas = classMirror.metadata;
+        for (var metadata in metadatas) {
+          var metaDataMirror = metadata.reflectee;
+          var metaType = reflectClass(metaDataMirror.runtimeType);
+          if (MirrorSystem.getName(metaType.simpleName) == 'DomName' &&
+              (metaDataMirror.name.startsWith('HTML') || metaDataMirror.name.startsWith('SVG'))) {
+            if (isElement) return classMirror;
+          }
+        }
+      }
+
+      classMirror = classMirror.superclass;
+    }
+
+    return null;
+  }
+
+  /**
+   * Does this CustomElement class have:
+   *
+   *   - a created constructor with no arguments?
+   *   - a created constructor with a super.created() initializer?
+   *
+   * e.g.,    MyCustomClass.created() : super.created();
+   */
+  bool _hasCreatedConstructor(ClassMirror classToRegister) {
+    var htmlClassMirror = _getDomSuperClass(classToRegister);
+
+    var classMirror = classToRegister;
+    while (classMirror != null && classMirror != htmlClassMirror) {
+      var createdParametersValid = false;
+      var superCreatedCalled = false;
+      var className = MirrorSystem.getName(classMirror.simpleName);
+      var methodMirror = classMirror.declarations[new Symbol("$className.created")];
+      if (methodMirror != null && methodMirror.isConstructor) {
+        createdParametersValid = true;                // Assume no parameters.
+        if (methodMirror.parameters.length != 0) {
+          // If any parameters each one must be optional.
+          methodMirror.parameters.forEach((parameter) {
+            createdParametersValid = createdParametersValid && parameter.isOptional;
+          });
+        }
+
+        // Get the created constructor source and look at the initializer;
+        // Must call super.created() if not its as an error.
+        var createdSource = methodMirror.source?.replaceAll('\n', ' ');
+        RegExp regExp = new RegExp(r":(.*?)(;|}|\n)");
+        var match = regExp.firstMatch(createdSource);
+        superCreatedCalled = match.input.substring(match.start,match.end).contains("super.created(");
+      }
+
+      if (!superCreatedCalled) {
+        throw new DomException.jsInterop('created constructor initializer must call super.created()');
+      } else if (!createdParametersValid) {
+        throw new DomException.jsInterop('created constructor must have no parameters');
+      }
+
+      classMirror = classMirror.superclass;
+      while (classMirror != classMirror.mixin) {
+        // Skip the mixins.
+        classMirror = classMirror.superclass;
+      }
+    }
+
+    return true;
+  }
+
   @Experimental()
   /**
    * Register a custom subclass of Element to be instantiatable by the DOM.
@@ -20222,63 +20307,71 @@
       throw new DomException.jsInterop("HierarchyRequestError: Only HTML elements can be customized.");
     }
 
-    // Start the hookup the JS way create an <x-foo> element that extends the
-    // <x-base> custom element. Inherit its prototype and signal what tag is
-    // inherited:
-    //
-    //     var myProto = Object.create(HTMLElement.prototype);
-    //     var myElement = document.registerElement('x-foo', {prototype: myProto});
-    var baseElement = js.context[jsClassName];
-    if (baseElement == null) {
-      // Couldn't find the HTML element so use a generic one.
-      baseElement = js.context['HTMLElement'];
+    if (_hasCreatedConstructor(classMirror)) {
+      // Start the hookup the JS way create an <x-foo> element that extends the
+      // <x-base> custom element. Inherit its prototype and signal what tag is
+      // inherited:
+      //
+      //     var myProto = Object.create(HTMLElement.prototype);
+      //     var myElement = document.registerElement('x-foo', {prototype: myProto});
+      var baseElement = js.context[jsClassName];
+      if (baseElement == null) {
+        // Couldn't find the HTML element so use a generic one.
+        baseElement = js.context['HTMLElement'];
+      }
+      var elemProto = js.context['Object'].callMethod("create", [baseElement['prototype']]);
+
+      // TODO(terry): Hack to stop recursion re-creating custom element when the
+      //              created() constructor of the custom element does e.g.,
+      //
+      //                  MyElement.created() : super.created() {
+      //                    this.innerHtml = "<b>I'm an x-foo-with-markup!</b>";
+      //                  }
+      //
+      //              sanitizing causes custom element to created recursively
+      //              until stack overflow.
+      //
+      //              See https://github.com/dart-lang/sdk/issues/23666
+      int creating = 0;
+      elemProto['createdCallback'] = new js.JsFunction.withThis(($this) {
+        if (_getJSClassName(reflectClass(customElementClass).superclass) != null && creating < 2) {
+          creating++;
+
+          var dartClass;
+          try {
+            dartClass = _blink.Blink_Utils.constructElement(customElementClass, $this);
+          } catch (e) {
+            dartClass = HtmlElement.internalCreateHtmlElement();
+            throw e;
+          } finally {
+            // Need to remember the Dart class that was created for this custom so
+            // return it and setup the blink_jsObject to the $this that we'll be working
+            // with as we talk to blink. 
+            $this['dart_class'] = dartClass;
+
+            creating--;
+          }
+        }
+      });
+      elemProto['attributeChangedCallback'] = new js.JsFunction.withThis(($this, attrName, oldVal, newVal) {
+        if ($this["dart_class"] != null && $this['dart_class'].attributeChanged != null) {
+          $this['dart_class'].attributeChanged(attrName, oldVal, newVal);
+        }
+      });
+      elemProto['attachedCallback'] = new js.JsFunction.withThis(($this) {
+        if ($this["dart_class"] != null && $this['dart_class'].attached != null) {
+          $this['dart_class'].attached();
+        }
+      });
+      elemProto['detachedCallback'] = new js.JsFunction.withThis(($this) {
+        if ($this["dart_class"] != null && $this['dart_class'].detached != null) {
+          $this['dart_class'].detached();
+        }
+      });
+      // document.registerElement('x-foo', {prototype: elemProto, extends: extendsTag});
+      var jsMap = new js.JsObject.jsify({'prototype': elemProto, 'extends': extendsTag});
+      js.context['document'].callMethod('registerElement', [tag, jsMap]);
     }
-    var elemProto = js.context['Object'].callMethod("create", [baseElement['prototype']]);
-
-    // TODO(terry): Hack to stop recursion re-creating custom element when the
-    //              created() constructor of the custom element does e.g.,
-    //
-    //                  MyElement.created() : super.created() {
-    //                    this.innerHtml = "<b>I'm an x-foo-with-markup!</b>";
-    //                  }
-    //
-    //              sanitizing causes custom element to created recursively
-    //              until stack overflow.
-    //
-    //              See https://github.com/dart-lang/sdk/issues/23666
-    int creating = 0;
-    elemProto['createdCallback'] = new js.JsFunction.withThis(($this) {
-      if (_getJSClassName(reflectClass(customElementClass).superclass) != null && creating < 2) {
-        creating++;
-
-        var dartClass = _blink.Blink_Utils.constructElement(customElementClass, $this);
-
-        // Need to remember the Dart class that was created for this custom so
-        // return it and setup the blink_jsObject to the $this that we'll be working
-        // with as we talk to blink. 
-        $this['dart_class'] = dartClass;
-
-        creating--;
-      }
-    });
-    elemProto['attributeChangedCallback'] = new js.JsFunction.withThis(($this, attrName, oldVal, newVal) {
-      if ($this["dart_class"] != null && $this['dart_class'].attributeChanged != null) {
-        $this['dart_class'].attributeChanged(attrName, oldVal, newVal);
-      }
-    });
-    elemProto['attachedCallback'] = new js.JsFunction.withThis(($this) {
-      if ($this["dart_class"] != null && $this['dart_class'].attached != null) {
-        $this['dart_class'].attached();
-      }
-    });
-    elemProto['detachedCallback'] = new js.JsFunction.withThis(($this) {
-      if ($this["dart_class"] != null && $this['dart_class'].detached != null) {
-        $this['dart_class'].detached();
-      }
-    });
-    // document.registerElement('x-foo', {prototype: elemProto, extends: extendsTag});
-    var jsMap = new js.JsObject.jsify({'prototype': elemProto, 'extends': extendsTag});
-    js.context['document'].callMethod('registerElement', [tag, jsMap]);
   }
 
   /** *Deprecated*: use [registerElement] instead. */
@@ -27920,7 +28013,14 @@
 class Node extends EventTarget {
 
   // Custom element created callback.
-  Node._created() : super._created();
+  Node._created() : super._created() {
+    // By this point blink_jsObject should be setup if it's not then we weren't
+    // called by the registerElement createdCallback - probably created() was
+    // called directly which is verboten.
+    if (this.blink_jsObject == null) {
+      throw new DomException.jsInterop("the created constructor cannot be called directly");
+    }
+  }
 
   /**
    * A modifiable list of this node's children.
@@ -37068,10 +37168,10 @@
     if ((blob_OR_source_OR_stream is Blob || blob_OR_source_OR_stream == null)) {
       return _blink.BlinkURL.instance.createObjectURL_Callback_1_(unwrap_jso(blob_OR_source_OR_stream));
     }
-    if ((blob_OR_source_OR_stream is MediaSource)) {
+    if ((blob_OR_source_OR_stream is MediaStream)) {
       return _blink.BlinkURL.instance.createObjectURL_Callback_1_(unwrap_jso(blob_OR_source_OR_stream));
     }
-    if ((blob_OR_source_OR_stream is MediaStream)) {
+    if ((blob_OR_source_OR_stream is MediaSource)) {
       return _blink.BlinkURL.instance.createObjectURL_Callback_1_(unwrap_jso(blob_OR_source_OR_stream));
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -44823,11 +44923,11 @@
   }
 
   bool allowsElement(Element element) {
-    return _allowedElements.contains(element._safeTagName);
+    return _allowedElements.contains(Element._safeTagName(element));
   }
 
   bool allowsAttribute(Element element, String attributeName, String value) {
-    var tagName = element._safeTagName;
+    var tagName = Element._safeTagName(element);
     var validator = _attributeValidators['$tagName::$attributeName'];
     if (validator == null) {
       validator = _attributeValidators['*::$attributeName'];
@@ -46489,11 +46589,11 @@
   }
 
   bool allowsElement(Element element) {
-    return allowedElements.contains(element._safeTagName);
+    return allowedElements.contains(Element._safeTagName(element));
   }
 
   bool allowsAttribute(Element element, String attributeName, String value) {
-    var tagName = element._safeTagName;
+    var tagName = Element._safeTagName(element);
     if (allowedUriAttributes.contains('$tagName::$attributeName')) {
       return uriPolicy.allowsUri(value);
     } else if (allowedUriAttributes.contains('*::$attributeName')) {
@@ -46534,10 +46634,10 @@
       var isAttr = element.attributes['is'];
       if (isAttr != null) {
         return allowedElements.contains(isAttr.toUpperCase()) &&
-          allowedElements.contains(element._safeTagName);
+            allowedElements.contains(Element._safeTagName(element));
       }
     }
-    return allowCustomTag && allowedElements.contains(element._safeTagName);
+    return allowCustomTag && allowedElements.contains(Element._safeTagName(element));
   }
 
   bool allowsAttribute(Element element, String attributeName, String value) {
@@ -46593,7 +46693,7 @@
     // foreignobject tag as SvgElement. We don't want foreignobject contents
     // anyway, so just remove the whole tree outright. And we can't rely
     // on IE recognizing the SvgForeignObject type, so go by tagName. Bug 23144
-    if (element is svg.SvgElement && element._safeTagName == 'foreignObject') {
+    if (element is svg.SvgElement && Element._safeTagName(element) == 'foreignObject') {
       return false;
     }
     if (element is svg.SvgElement) {
@@ -46776,14 +46876,14 @@
 
   bool allowsElement(Element element) {
     if (!validator.allowsElement(element)) {
-      throw new ArgumentError(element._safeTagName);
+      throw new ArgumentError(Element._safeTagName(element));
     }
     return true;
   }
 
   bool allowsAttribute(Element element, String attributeName, String value) {
     if (!validator.allowsAttribute(element, attributeName, value)) {
-      throw new ArgumentError('${element._safeTagName}[$attributeName="$value"]');
+      throw new ArgumentError('${Element._safeTagName(element)}[$attributeName="$value"]');
     }
   }
 }
@@ -46825,7 +46925,7 @@
   }
 
   /// Sanitize the element, assuming we can't trust anything about it.
-  void _sanitizeUntrustedElement(Element element, Node parent) {
+  void _sanitizeUntrustedElement(/* Element */ element, Node parent) {
     // If the _hasCorruptedAttributes does not successfully return false,
     // then we consider it corrupted and remove.
     // TODO(alanknight): This is a workaround because on Firefox
@@ -46834,7 +46934,9 @@
     // can't call methods. This does mean that you can't explicitly allow an
     // embed tag. The only thing that will let it through is a null
     // sanitizer that doesn't traverse the tree at all. But sanitizing while
-    // allowing embeds seems quite unlikely.
+    // allowing embeds seems quite unlikely. This is also the reason that we
+    // can't declare the type of element, as an embed won't pass any type
+    // check in dart2js.
     var corrupted = true;
     var attrs;
     var isAttr;
@@ -46842,15 +46944,27 @@
       // If getting/indexing attributes throws, count that as corrupt.
       attrs = element.attributes;
       isAttr = attrs['is'];
-      corrupted = Element._hasCorruptedAttributes(element);
+      var corruptedTest1 = Element._hasCorruptedAttributes(element);
+
+      // On IE, erratically, the hasCorruptedAttributes test can return false,
+      // even though it clearly is corrupted. A separate copy of the test
+      // inlining just the basic check seems to help.
+      corrupted = corruptedTest1 ? true : Element._hasCorruptedAttributesAdditionalCheck(element);
     } catch(e) {}
-     var elementText = 'element unprintable';
+    var elementText = 'element unprintable';
     try {
       elementText = element.toString();
     } catch(e) {}
-    var elementTagName = element._safeTagName;
-    _sanitizeElement(element, parent, corrupted, elementText, elementTagName,
-        attrs, isAttr);
+    try {
+      var elementTagName = Element._safeTagName(element);
+      _sanitizeElement(element, parent, corrupted, elementText, elementTagName,
+          attrs, isAttr);
+    } on ArgumentError { // Thrown by _ThrowsNodeValidator
+      rethrow;
+    } catch(e) {  // Unexpected exception sanitizing -> remove
+      _removeNode(element, parent);
+      window.console.warn('Removing corrupted element $elementText');
+    }
   }
 
   /// Having done basic sanity checking on the element, and computed the
@@ -46859,23 +46973,23 @@
   void _sanitizeElement(Element element, Node parent, bool corrupted,
       String text, String tag, Map attrs, String isAttr) {
     if (false != corrupted) {
+       _removeNode(element, parent);
       window.console.warn(
           'Removing element due to corrupted attributes on <$text>');
-       _removeNode(element, parent);
        return;
     }
     if (!validator.allowsElement(element)) {
-      window.console.warn(
-          'Removing disallowed element <$tag>');
       _removeNode(element, parent);
+      window.console.warn(
+          'Removing disallowed element <$tag> from $parent');
       return;
     }
 
     if (isAttr != null) {
       if (!validator.allowsAttribute(element, 'is', isAttr)) {
+        _removeNode(element, parent);
         window.console.warn('Removing disallowed type extension '
             '<$tag is="$isAttr">');
-        _removeNode(element, parent);
         return;
       }
     }
diff --git a/sdk/lib/html/html_common/conversions_dartium.dart b/sdk/lib/html/html_common/conversions_dartium.dart
index ae7429a..c66ce17 100644
--- a/sdk/lib/html/html_common/conversions_dartium.dart
+++ b/sdk/lib/html/html_common/conversions_dartium.dart
@@ -9,7 +9,8 @@
 class _StructuredCloneDartium extends _StructuredClone {
   newJsMap() => new js.JsObject(js.context["Object"]);
   putIntoMap(map, key, value) => map[key] = value;
-  newJsList(length) => new js.JsArray();
+  // TODO(alanknight): Don't create two extra lists to get a fixed-length JS list.
+  newJsList(length) => new js.JsArray.from(new List(length));
   cloneNotRequired(e) => e is js.JsObject;
 }
 
diff --git a/sdk/lib/js/dart2js/js_dart2js.dart b/sdk/lib/js/dart2js/js_dart2js.dart
index 1d2c9e0..8c5eb30 100644
--- a/sdk/lib/js/dart2js/js_dart2js.dart
+++ b/sdk/lib/js/dart2js/js_dart2js.dart
@@ -511,17 +511,18 @@
 const _JS_FUNCTION_PROPERTY_NAME = r'$dart_jsFunction';
 
 bool _defineProperty(o, String name, value) {
-  if (_isExtensible(o) &&
-      // TODO(ahe): Calling _hasOwnProperty to work around
-      // https://code.google.com/p/dart/issues/detail?id=21331.
-      !_hasOwnProperty(o, name)) {
-    try {
+  try {
+    if (_isExtensible(o) &&
+        // TODO(ahe): Calling _hasOwnProperty to work around
+        // https://code.google.com/p/dart/issues/detail?id=21331.
+        !_hasOwnProperty(o, name)) {
       JS('void', 'Object.defineProperty(#, #, { value: #})', o, name, value);
       return true;
-    } catch (e) {
+    }
+  } catch (e) {
       // object is native and lies about being extensible
       // see https://bugzilla.mozilla.org/show_bug.cgi?id=775185
-    }
+      // Or, isExtensible throws for this object.
   }
   return false;
 }
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index 403ee76..63280a7 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -1858,15 +1858,12 @@
 LayoutTests/fast/css/font-face-unicode-range-load_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/font-face-unicode-range-monospace_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/font-face-unicode-range-overlap-load_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/font-face-used-after-retired_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/font-family-trailing-bracket-gunk_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/font-property-priority_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/font-shorthand-from-longhands_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/font-shorthand-mix-inherit_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/fontface-properties_t01: RuntimeError # Uses FontFace class, not defined for this browser.
 LayoutTests/fast/css/fontfaceset-download-error_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/fontfaceset-events_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/fontfaceset-loadingdone_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/getComputedStyle/computed-style-border-image_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/getComputedStyle/computed-style-cross-fade_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/getComputedStyle/computed-style-font_t01: RuntimeError # Please triage this failure
@@ -1945,7 +1942,6 @@
 LayoutTests/fast/css/pseudo-target-indirect-sibling-002_t01: Skip # Times out. Please triage this failure
 LayoutTests/fast/css/pseudo-valid-dynamic_t01: Pass, RuntimeError # Passes on ff 35. Please triage this failure
 LayoutTests/fast/css/pseudo-valid-unapplied_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/pseudostyle-anonymous-text_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/readonly-pseudoclass-opera-001_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/readonly-pseudoclass-opera-002_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/readonly-pseudoclass-opera-003_t01: RuntimeError # Please triage this failure
@@ -1953,7 +1949,6 @@
 LayoutTests/fast/css/readonly-pseudoclass-opera-005_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/readwrite-contenteditable-recalc_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/recalc-optgroup-inherit_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/css/relative-positioned-block-crash_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/remove-attribute-style_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/remove-class-name_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/selector-text-escape_t01: RuntimeError # Please triage this failure
@@ -2293,7 +2288,6 @@
 LayoutTests/fast/events/add-event-without-document_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/events/change-overflow-on-overflow-change_t01: Skip # Times out. Please triage this failure
 LayoutTests/fast/events/clipboard-clearData_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/events/clipboard-dataTransferItemList-remove_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/events/clipboard-dataTransferItemList_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/events/div-focus_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/events/document-elementFromPoint_t01: RuntimeError # Please triage this failure
@@ -2658,7 +2652,6 @@
 LayoutTests/fast/text/sub-pixel/text-scaling-vertical_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text/sub-pixel/text-scaling-webfont_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text/text-combine-shrink-to-fit_t01: RuntimeError # Please triage this failure
-LayoutTests/fast/text/text-fragment-first-letter-update-crash_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text/window-find_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text/zero-width-characters-complex-script_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text/zero-width-characters_t01: RuntimeError # Please triage this failure
@@ -3073,22 +3066,32 @@
 WebPlatformTest/webstorage/storage_session_setitem_quotaexceedederr_t01: Skip # Times out. Please triage this failure
 
 [ $compiler == dart2js && $runtime == ff && $system == windows ]
+LayoutTests/fast/dom/HTMLObjectElement/beforeload-set-text-crash_t01: Skip # Times out. Issue 24455
 LayoutTests/fast/dom/Window/window-scroll-arguments_t01: RuntimeError # Issue 22564
-WebPlatformTest/html/syntax/parsing/math-parse_t03: RuntimeError # Issue 22564
 LayoutTests/fast/encoding/css-charset-dom_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/clipboard-clearData_t01: Skip # Times out. Issue 24455
+LayoutTests/fast/events/clipboard-dataTransferItemList_t01: Skip # Times out. Issue 24455
 LayoutTests/fast/forms/change-form-element-document-crash_t01: RuntimeError # Dartium JSInterop failure, or else Firefox roll error. Issue 24409
+WebPlatformTest/html/syntax/parsing/math-parse_t03: RuntimeError # Issue 22564
 
 [ $compiler == dart2js && $runtime == ff && $system != windows ]
 LayoutTests/fast/canvas/canvas-resetTransform_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/canvas/canvas-setTransform_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/fontfaceset-events_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/fontfaceset-loadingdone_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/font-face-used-after-retired_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/list-item-text-align_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/parsing-object-fit_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/pseudostyle-anonymous-text_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/relative-positioned-block-crash_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css3-text/css3-text-decoration/getComputedStyle/getComputedStyle-text-decoration-style_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dom/css-mediarule-functions_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dom/MutationObserver/observe-options-attributes_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dom/MutationObserver/observe-options-character-data_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/events/clipboard-dataTransferItemList-remove_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/forms/textarea-rows-cols_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/table/incorrect-colgroup-span-values_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/text-fragment-first-letter-update-crash_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/xmlhttprequest/xmlhttprequest-responsetype-before-open_t01: RuntimeError # Please triage this failure
 LibTest/html/HttpRequest/responseType_A01_t02: RuntimeError # Please triage this failure
 
diff --git a/tests/co19/co19-runtime.status b/tests/co19/co19-runtime.status
index b5c5bc4c..e4edb77 100644
--- a/tests/co19/co19-runtime.status
+++ b/tests/co19/co19-runtime.status
@@ -84,3 +84,6 @@
 
 [ $runtime == vm && $mode == debug && $builder_tag == asan ]
 Language/15_Types/4_Interface_Types_A11_t01: Skip  # Issue 21174.
+
+[ $runtime == vm && $arch == arm ]
+LibTest/typed_data/Float32x4/operator_multiplication_A01_t01: Fail # Dart issue 24416
diff --git a/tests/compiler/dart2js/analyze_unused_dart2js_test.dart b/tests/compiler/dart2js/analyze_unused_dart2js_test.dart
index 10fc5a5..0c4870b 100644
--- a/tests/compiler/dart2js/analyze_unused_dart2js_test.dart
+++ b/tests/compiler/dart2js/analyze_unused_dart2js_test.dart
@@ -71,8 +71,13 @@
 void main() {
   var uri = currentDirectory.resolve(
       'pkg/compiler/lib/src/use_unused_api.dart');
-  asyncTest(() => analyze([uri], WHITE_LIST,
-      analyzeAll: false, checkResults: checkResults));
+  asyncTest(() => analyze(
+      [uri],
+      // TODO(johnniwinther): Use [WHITE_LIST] again when
+      // [Compiler.reportUnusedCode] is reenabled.
+      const {}, // WHITE_LIST
+      analyzeAll: false,
+      checkResults: checkResults));
 }
 
 bool checkResults(Compiler compiler, CollectingDiagnosticHandler handler) {
@@ -81,20 +86,23 @@
   void checkLive(member) {
     if (member.isFunction) {
       if (compiler.enqueuer.resolution.hasBeenResolved(member)) {
-        compiler.reportHint(member, MessageKind.GENERIC,
-            {'text': "Helper function in production code '$member'."});
+        compiler.reportHint(compiler.createMessage(
+            member, MessageKind.GENERIC,
+            {'text': "Helper function in production code '$member'."}));
       }
     } else if (member.isClass) {
       if (member.isResolved) {
-        compiler.reportHint(member, MessageKind.GENERIC,
-            {'text': "Helper class in production code '$member'."});
+        compiler.reportHint(compiler.createMessage(
+            member, MessageKind.GENERIC,
+            {'text': "Helper class in production code '$member'."}));
       } else {
         member.forEachLocalMember(checkLive);
       }
     } else if (member.isTypedef) {
       if (member.isResolved) {
-        compiler.reportHint(member, MessageKind.GENERIC,
-            {'text': "Helper typedef in production code '$member'."});
+        compiler.reportHint(compiler.createMessage(
+            member, MessageKind.GENERIC,
+            {'text': "Helper typedef in production code '$member'."}));
       }
     }
   }
diff --git a/tests/compiler/dart2js/array_static_intercept_test.dart b/tests/compiler/dart2js/array_static_intercept_test.dart
index d53e10b1..bd0a02f 100644
--- a/tests/compiler/dart2js/array_static_intercept_test.dart
+++ b/tests/compiler/dart2js/array_static_intercept_test.dart
@@ -18,6 +18,7 @@
   asyncTest(() => compile(TEST_ONE, entry: 'foo', check: (String generated) {
     Expect.isTrue(generated.contains(r'.add$1('));
     Expect.isTrue(generated.contains(r'.removeLast$0('));
-    Expect.isTrue(generated.contains(r'.length'));
+    Expect.isTrue(generated.contains(r'.length'),
+        "Unexpected code to contain '.length':\n$generated");
   }));
 }
diff --git a/tests/compiler/dart2js/compiler_test.dart b/tests/compiler/dart2js/compiler_test.dart
index d96f695..3b1f425 100644
--- a/tests/compiler/dart2js/compiler_test.dart
+++ b/tests/compiler/dart2js/compiler_test.dart
@@ -8,7 +8,7 @@
 import "package:compiler/src/diagnostics/messages.dart";
 import "package:compiler/src/elements/elements.dart";
 import "package:compiler/src/resolution/members.dart";
-import "package:compiler/src/diagnostics/spannable.dart";
+import "package:compiler/src/diagnostics/diagnostic_listener.dart";
 import "mock_compiler.dart";
 
 
@@ -21,24 +21,22 @@
   setOnError(var f) => onError = f;
   setOnWarning(var f) => onWarning = f;
 
-  void reportWarning(Spannable node,
-                     MessageKind messageKind,
-                     [Map arguments = const {}]) {
+  void reportWarning(
+      DiagnosticMessage message,
+      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
     if (onWarning != null) {
-      MessageTemplate template = MessageTemplate.TEMPLATES[messageKind];
-      onWarning(this, node, template.message(arguments));
+      onWarning(this, message.spannable, message.message);
     }
-    super.reportWarning(node, messageKind, arguments);
+    super.reportWarning(message, infos);
   }
 
-  void reportError(Spannable node,
-                   MessageKind messageKind,
-                   [Map arguments = const {}]) {
+  void reportError(
+      DiagnosticMessage message,
+      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
     if (onError != null) {
-      MessageTemplate template = MessageTemplate.TEMPLATES[messageKind];
-      onError(this, node, template.message(arguments));
+      onError(this, message.spannable, message.message);
     }
-    super.reportError(node, messageKind, arguments);
+    super.reportError(message, infos);
   }
 }
 
diff --git a/tests/compiler/dart2js/concrete_type_inference_test.dart b/tests/compiler/dart2js/concrete_type_inference_test.dart
index 6c8cb9f..5e154c4 100644
--- a/tests/compiler/dart2js/concrete_type_inference_test.dart
+++ b/tests/compiler/dart2js/concrete_type_inference_test.dart
@@ -51,28 +51,23 @@
 
 void testBasicTypes() {
   checkPrintType('true', (compiler, type) {
-    var inferrer = compiler.typesTask.typesInferrer;
+    if (type.isForwarding) type = type.forwardTo;
     Expect.identical(compiler.typesTask.boolType, type);
   });
   checkPrintType('1.5', (compiler, type) {
-    var inferrer = compiler.typesTask.typesInferrer;
     Expect.identical(compiler.typesTask.doubleType, type);
   });
   checkPrintType('1', (compiler, type) {
-    var inferrer = compiler.typesTask.typesInferrer;
     Expect.identical(compiler.typesTask.uint31Type, type);
   });
   checkPrintType('[]', (compiler, type) {
-    var inferrer = compiler.typesTask.typesInferrer;
     if (type.isForwarding) type = type.forwardTo;
     Expect.identical(compiler.typesTask.growableListType, type);
   });
   checkPrintType('null', (compiler, type) {
-    var inferrer = compiler.typesTask.typesInferrer;
     Expect.identical(compiler.typesTask.nullType, type);
   });
   checkPrintType('"foo"', (compiler, type) {
-    var inferrer = compiler.typesTask.typesInferrer;
     Expect.isTrue(
         compiler.typesTask.stringType.containsOnlyString(compiler.world));
   });
@@ -90,7 +85,6 @@
         var thirdParameter =
           fiskElement.computeSignature(compiler).optionalParameters[1];
         var typesTask = compiler.typesTask;
-        var inferrer = typesTask.typesInferrer;
         Expect.identical(
             typesTask.uint31Type,
             typesTask.getGuaranteedTypeOfElement(firstParameter));
diff --git a/tests/compiler/dart2js/exit_code_test.dart b/tests/compiler/dart2js/exit_code_test.dart
index 70b8172..acb111b 100644
--- a/tests/compiler/dart2js/exit_code_test.dart
+++ b/tests/compiler/dart2js/exit_code_test.dart
@@ -98,13 +98,15 @@
         break;
       case 'warning':
         onTest(testMarker, testType);
-        reportWarning(NO_LOCATION_SPANNABLE,
-                      MessageKind.GENERIC, {'text': marker});
+        reportWarning(createMessage(
+            NO_LOCATION_SPANNABLE,
+            MessageKind.GENERIC, {'text': marker}));
         break;
       case 'error':
         onTest(testMarker, testType);
-        reportError(NO_LOCATION_SPANNABLE,
-                    MessageKind.GENERIC, {'text': marker});
+        reportError(createMessage(
+            NO_LOCATION_SPANNABLE,
+            MessageKind.GENERIC, {'text': marker}));
         break;
       case 'internalError':
         onTest(testMarker, testType);
diff --git a/tests/compiler/dart2js/js_backend_cps_ir_control_flow_test.dart b/tests/compiler/dart2js/js_backend_cps_ir_control_flow_test.dart
index cc37c08..d3340b4 100644
--- a/tests/compiler/dart2js/js_backend_cps_ir_control_flow_test.dart
+++ b/tests/compiler/dart2js/js_backend_cps_ir_control_flow_test.dart
@@ -68,6 +68,7 @@
 foo(a) { print(a); return a; }
 
 main() {
+ foo(false);
  if (foo(true)) {
    print(1);
  } else {
@@ -76,6 +77,7 @@
  print(3);
 }""", """
 function() {
+  V.foo(false);
   V.foo(true) ? P.print(1) : P.print(2);
   P.print(3);
 }"""),
@@ -83,6 +85,7 @@
 foo(a) { print(a); return a; }
 
 main() {
+ foo(false);
  if (foo(true)) {
    print(1);
    print(1);
@@ -93,6 +96,7 @@
  print(3);
 }""", """
 function() {
+  V.foo(false);
   if (V.foo(true)) {
     P.print(1);
     P.print(1);
diff --git a/tests/compiler/dart2js/js_backend_cps_ir_source_information_test.dart b/tests/compiler/dart2js/js_backend_cps_ir_source_information_test.dart
index ac16a08..5a2a9e1 100644
--- a/tests/compiler/dart2js/js_backend_cps_ir_source_information_test.dart
+++ b/tests/compiler/dart2js/js_backend_cps_ir_source_information_test.dart
@@ -78,7 +78,8 @@
       }
 
       Uri uri = Uri.parse('memory:$TEST_MAIN_FILE');
-      compiler.irBuilder.builderCallback = cacheIrNodeForMain;
+      compiler.backend.functionCompiler.cpsBuilderTask.builderCallback =
+          cacheIrNodeForMain;
 
       return compiler.run(uri).then((bool success) {
         Expect.isTrue(success);
diff --git a/tests/compiler/dart2js/js_spec_string_test.dart b/tests/compiler/dart2js/js_spec_string_test.dart
index d86a4c7..a169bca 100644
--- a/tests/compiler/dart2js/js_spec_string_test.dart
+++ b/tests/compiler/dart2js/js_spec_string_test.dart
@@ -7,23 +7,32 @@
 import 'package:expect/expect.dart';
 import 'package:compiler/src/native/native.dart';
 import 'package:compiler/src/diagnostics/diagnostic_listener.dart';
+import 'package:compiler/src/diagnostics/messages.dart';
 import 'package:compiler/src/universe/side_effects.dart'
     show SideEffects;
 
 const OBJECT = 'Object';
 const NULL = 'Null';
 
-class Listener implements DiagnosticListener {
+class Listener extends DiagnosticListener {
   String errorMessage;
   internalError(spannable, message) {
     errorMessage = message;
     throw "error";
   }
-  reportError(spannable, kind, [arguments]) {
-    errorMessage = '$arguments';  // E.g.  "{text: Duplicate tag 'new'.}"
+  reportError(message, [infos]) {
+
+    errorMessage =
+        '${message.message.arguments}'; // E.g.  "{text: Duplicate tag 'new'.}"
     throw "error";
   }
 
+  @override
+  DiagnosticMessage createMessage(spannable, messageKind, [arguments]) {
+    return new DiagnosticMessage(null, spannable,
+        MessageTemplate.TEMPLATES[messageKind].message(arguments));
+  }
+
   noSuchMethod(_) => null;
 }
 
diff --git a/tests/compiler/dart2js/memory_compiler.dart b/tests/compiler/dart2js/memory_compiler.dart
index 49664b7..c23b809 100644
--- a/tests/compiler/dart2js/memory_compiler.dart
+++ b/tests/compiler/dart2js/memory_compiler.dart
@@ -263,7 +263,6 @@
     cachedCompiler.resolver = null;
     cachedCompiler.closureToClassMapper = null;
     cachedCompiler.checker = null;
-    cachedCompiler.irBuilder = null;
     cachedCompiler.typesTask = null;
     cachedCompiler.backend = null;
     // Don't null out the enqueuer as it prevents us from using cachedCompiler
diff --git a/tests/compiler/dart2js/message_kind_test.dart b/tests/compiler/dart2js/message_kind_test.dart
index 3ed7010..c3954f0 100644
--- a/tests/compiler/dart2js/message_kind_test.dart
+++ b/tests/compiler/dart2js/message_kind_test.dart
@@ -27,7 +27,12 @@
         || name == 'PLEASE_REPORT_THE_CRASH'
         // We cannot provide examples for patch errors.
         || name.startsWith('PATCH_')
-        || name == 'LIBRARY_NOT_SUPPORTED') continue;
+        || name == 'LIBRARY_NOT_SUPPORTED'
+        // TODO(johnniwinther): Remove these when [Compiler.reportUnusedCode] is
+        // reenabled.
+        || name == 'UNUSED_METHOD'
+        || name == 'UNUSED_CLASS'
+        || name == 'UNUSED_TYPEDEF') continue;
     if (template.examples != null) {
       examples.add(template);
     } else {
diff --git a/tests/compiler/dart2js/mock_compiler.dart b/tests/compiler/dart2js/mock_compiler.dart
index 06265f4..9f67d12 100644
--- a/tests/compiler/dart2js/mock_compiler.dart
+++ b/tests/compiler/dart2js/mock_compiler.dart
@@ -194,37 +194,41 @@
 
   // TODO(johnniwinther): Remove this when we don't filter certain type checker
   // warnings.
-  void reportWarning(Spannable node, MessageKind messageKind,
-                     [Map arguments = const {}]) {
-    MessageTemplate template = MessageTemplate.TEMPLATES[messageKind];
-    reportDiagnostic(node,
-                     template.message(arguments, terseDiagnostics),
-                     api.Diagnostic.WARNING);
+  void reportWarning(
+      DiagnosticMessage message,
+      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
+    reportDiagnostic(message, infos, api.Diagnostic.WARNING);
   }
 
-  void reportDiagnostic(Spannable node,
-                        Message message,
+  void reportDiagnostic(DiagnosticMessage message,
+                        List<DiagnosticMessage> infoMessages,
                         api.Diagnostic kind) {
-    var diagnostic = new WarningMessage(node, message);
-    if (kind == api.Diagnostic.CRASH) {
-      crashes.add(diagnostic);
-    } else if (kind == api.Diagnostic.ERROR) {
-      errors.add(diagnostic);
-    } else if (kind == api.Diagnostic.WARNING) {
-      warnings.add(diagnostic);
-    } else if (kind == api.Diagnostic.INFO) {
-      infos.add(diagnostic);
-    } else if (kind == api.Diagnostic.HINT) {
-      hints.add(diagnostic);
-    }
-    if (diagnosticHandler != null) {
-      SourceSpan span = spanFromSpannable(node);
-      if (span != null) {
-        diagnosticHandler(span.uri, span.begin, span.end, '$message', kind);
-      } else {
-        diagnosticHandler(null, null, null, '$message', kind);
+
+    void processMessage(DiagnosticMessage message, api.Diagnostic kind) {
+      var diagnostic = new WarningMessage(message.spannable, message.message);
+      if (kind == api.Diagnostic.CRASH) {
+        crashes.add(diagnostic);
+      } else if (kind == api.Diagnostic.ERROR) {
+        errors.add(diagnostic);
+      } else if (kind == api.Diagnostic.WARNING) {
+        warnings.add(diagnostic);
+      } else if (kind == api.Diagnostic.INFO) {
+        infos.add(diagnostic);
+      } else if (kind == api.Diagnostic.HINT) {
+        hints.add(diagnostic);
+      }
+      if (diagnosticHandler != null) {
+        SourceSpan span = message.sourceSpan;
+        if (span != null) {
+          diagnosticHandler(span.uri, span.begin, span.end, '$message', kind);
+        } else {
+          diagnosticHandler(null, null, null, '$message', kind);
+        }
       }
     }
+
+    processMessage(message, kind);
+    infoMessages.forEach((i) => processMessage(i, api.Diagnostic.INFO));
   }
 
   bool get compilationFailed => !crashes.isEmpty || !errors.isEmpty;
diff --git a/tests/compiler/dart2js/mock_libraries.dart b/tests/compiler/dart2js/mock_libraries.dart
index 9a87e5f..957cb56 100644
--- a/tests/compiler/dart2js/mock_libraries.dart
+++ b/tests/compiler/dart2js/mock_libraries.dart
@@ -410,6 +410,11 @@
 const Map<String, String> ASYNC_AWAIT_LIBRARY = const <String, String>{
   '_wrapJsFunctionForAsync': '_wrapJsFunctionForAsync(f) {}',
   '_asyncHelper': '_asyncHelper(o, f, c) {}',
+  '_SyncStarIterable': 'class _SyncStarIterable {}',
+  '_IterationMarker': 'class _IterationMarker {}',
+  '_AsyncStarStreamController': 'class _AsyncStarStreamController {}',
+  '_asyncStarHelper': '_asyncStarHelper(x, y, z) {}',
+  '_streamOfController': '_streamOfController(x) {}',
 };
 
 const String DEFAULT_MIRRORS_SOURCE = r'''
diff --git a/tests/compiler/dart2js/parser_helper.dart b/tests/compiler/dart2js/parser_helper.dart
index da04e38..ea49b68 100644
--- a/tests/compiler/dart2js/parser_helper.dart
+++ b/tests/compiler/dart2js/parser_helper.dart
@@ -37,7 +37,7 @@
 export "package:compiler/src/tokens/token.dart";
 export "package:compiler/src/tokens/token_constants.dart";
 
-class LoggerCanceler implements DiagnosticListener {
+class LoggerCanceler extends DiagnosticListener {
   void log(message) {
     print(message);
   }
@@ -50,33 +50,42 @@
     throw 'unsupported operation';
   }
 
-  void reportMessage(SourceSpan span, Message message, kind) {
+  void reportError(
+      DiagnosticMessage message,
+      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
     log(message);
+    infos.forEach(log);
   }
 
-  void reportFatalError(Spannable node,
-                        MessageKind errorCode,
-                        [Map arguments]) {
-    log(new Message(MessageTemplate.TEMPLATES[errorCode], arguments, false));
-  }
-
-  void reportError(Spannable node, MessageKind errorCode, [Map arguments]) {
-    log(new Message(MessageTemplate.TEMPLATES[errorCode], arguments, false));
-  }
-
-  void reportWarning(Spannable node, MessageKind errorCode, [Map arguments]) {
-    log(new Message(MessageTemplate.TEMPLATES[errorCode], arguments, false));
+  void reportWarning(
+      DiagnosticMessage message,
+      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
+    log(message);
+    infos.forEach(log);
   }
 
   void reportInfo(Spannable node, MessageKind errorCode, [Map arguments]) {
     log(new Message(MessageTemplate.TEMPLATES[errorCode], arguments, false));
   }
 
-  void reportHint(Spannable node, MessageKind errorCode, [Map arguments]) {
-    log(new Message(MessageTemplate.TEMPLATES[errorCode], arguments, false));
+  void reportHint(
+      DiagnosticMessage message,
+      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
+    log(message);
+    infos.forEach(log);
   }
 
   withCurrentElement(Element element, f()) => f();
+
+  @override
+  DiagnosticMessage createMessage(
+      Spannable spannable,
+      MessageKind messageKind,
+      [Map arguments = const {}]) {
+    return new DiagnosticMessage(
+        null, spannable,
+        new Message(MessageTemplate.TEMPLATES[messageKind], arguments, false));
+  }
 }
 
 Token scan(String text) =>
diff --git a/tests/compiler/dart2js/parser_test.dart b/tests/compiler/dart2js/parser_test.dart
index 1f4cae9..17584fb 100644
--- a/tests/compiler/dart2js/parser_test.dart
+++ b/tests/compiler/dart2js/parser_test.dart
@@ -292,27 +292,32 @@
   Expect.isNull(function.getOrSet);
 }
 
-class Collector implements DiagnosticListener {
+class Collector extends DiagnosticListener {
   int token = -1;
 
-  void reportFatalError(Token token,
-                        messageKind,
-                        [Map arguments = const {}]) {
+  void reportFatalError(Token token) {
     this.token = token.kind;
     throw this;
   }
 
-  void reportError(Token token,
-                   messageKind,
-                   [Map arguments = const {}]) {
-    reportFatalError(token, messageKind, arguments);
+  void reportError(
+      DiagnosticMessage message,
+      [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
+    reportFatalError(message.spannable);
   }
 
   void log(message) {
     print(message);
   }
 
-  noSuchMethod(Invocation invocation) => throw 'unsupported operation';
+  noSuchMethod(Invocation invocation) {
+    throw 'unsupported operation';
+  }
+
+  @override
+  DiagnosticMessage createMessage(spannable, messageKind, [arguments]) {
+    return new DiagnosticMessage(null, spannable, null);
+  }
 }
 
 void testMissingCloseParen() {
diff --git a/tests/compiler/dart2js/related_types.dart b/tests/compiler/dart2js/related_types.dart
index 9a20d0b..54d9ab8 100644
--- a/tests/compiler/dart2js/related_types.dart
+++ b/tests/compiler/dart2js/related_types.dart
@@ -97,8 +97,10 @@
   /// a hint otherwise.
   void checkRelated(Node node, DartType left, DartType right) {
     if (hasEmptyIntersection(left, right)) {
-      compiler.reportHint(
-          node, MessageKind.NO_COMMON_SUBTYPES, {'left': left, 'right': right});
+      compiler.reportHint(compiler.createMessage(
+          node,
+          MessageKind.NO_COMMON_SUBTYPES,
+          {'left': left, 'right': right}));
     }
   }
 
diff --git a/tests/compiler/dart2js/type_checker_test.dart b/tests/compiler/dart2js/type_checker_test.dart
index 0e6a54e..fc7b601 100644
--- a/tests/compiler/dart2js/type_checker_test.dart
+++ b/tests/compiler/dart2js/type_checker_test.dart
@@ -2385,6 +2385,8 @@
     check("int foo() async => 0;", NOT_ASSIGNABLE),
     check("int foo() async => new Future<int>.value();",
           NOT_ASSIGNABLE),
+    check("Iterable<int> foo() sync* { return; }"),
+    check("Stream<int> foo() async* { return; }"),
   ]);
 }
 
diff --git a/tests/compiler/dart2js/type_combination_test.dart b/tests/compiler/dart2js/type_combination_test.dart
index 834f900..2dc9f61 100644
--- a/tests/compiler/dart2js/type_combination_test.dart
+++ b/tests/compiler/dart2js/type_combination_test.dart
@@ -735,12 +735,20 @@
     backend.interceptorsLibrary.forEachLocalMember((element) {
       if (element.isClass) {
         element.ensureResolved(compiler);
-        compiler.enqueuer.resolution.registerInstantiatedType(
-            element.rawType, compiler.globalDependencies);
+        backend.registerInstantiatedType(
+            element.rawType,
+            compiler.enqueuer.resolution,
+            compiler.globalDependencies);
       }
     });
-    compiler.enqueuer.resolution.registerInstantiatedType(
-        compiler.coreTypes.mapType(), compiler.globalDependencies);
+    backend.registerInstantiatedType(
+        compiler.coreTypes.mapType(),
+        compiler.enqueuer.resolution,
+        compiler.globalDependencies);
+    backend.registerInstantiatedType(
+        compiler.coreTypes.functionType,
+        compiler.enqueuer.resolution,
+        compiler.globalDependencies);
     compiler.world.populate();
 
     // Grab hold of a supertype for String so we can produce potential
diff --git a/tests/compiler/dart2js/type_inference8_test.dart b/tests/compiler/dart2js/type_inference8_test.dart
new file mode 100644
index 0000000..fc2d578
--- /dev/null
+++ b/tests/compiler/dart2js/type_inference8_test.dart
@@ -0,0 +1,101 @@
+// Copyright (c) 2015, 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 "package:async_helper/async_helper.dart";
+import "package:compiler/src/types/types.dart";
+import "package:expect/expect.dart";
+import 'compiler_helper.dart';
+import 'type_mask_test_helper.dart';
+
+import 'dart:async';
+
+const String TEST1 = r"""
+foo(x) {
+  return x;
+}
+
+bar(x) {
+  if (x) {
+    print("aaa");
+  } else {
+    print("bbb");
+  }
+}
+
+main() {
+  bar(foo(false));
+  bar(foo(foo(false)));
+}
+""";
+
+Future runTest1() {
+  Uri uri = new Uri(scheme: 'source');
+  var compiler = compilerFor(TEST1, uri);
+  return compiler.runCompiler(uri).then((_) {
+    var typesTask = compiler.typesTask;
+    var typesInferrer = typesTask.typesInferrer;
+    var element = findElement(compiler, "foo");
+    var mask = typesInferrer.getReturnTypeOfElement(element);
+    var falseType = new ValueTypeMask(typesTask.boolType, false);
+    // 'foo' should always return false
+    Expect.equals(falseType, mask);
+    // the argument to 'bar' is always false
+    var bar = findElement(compiler, "bar");
+    var barArg = bar.parameters.first;
+    var barArgMask = typesInferrer.getTypeOfElement(barArg);
+    Expect.equals(falseType, barArgMask);
+    var barCode = compiler.backend.getGeneratedCode(bar);
+    Expect.isTrue(barCode.contains('"bbb"'));
+    Expect.isFalse(barCode.contains('"aaa"'));
+  });
+}
+
+const String TEST2 = r"""
+foo(x) {
+  if (x > 3) return true;
+  return false;
+}
+
+bar(x) {
+  if (x) {
+    print("aaa");
+  } else {
+    print("bbb");
+  }
+}
+
+main() {
+  bar(foo(5));
+  bar(foo(6));
+}
+""";
+
+Future runTest2() {
+  Uri uri = new Uri(scheme: 'source');
+  var compiler = compilerFor(TEST2, uri);
+  return compiler.runCompiler(uri).then((_) {
+    var typesTask = compiler.typesTask;
+    var typesInferrer = typesTask.typesInferrer;
+    var element = findElement(compiler, "foo");
+    var mask = typesInferrer.getReturnTypeOfElement(element);
+    // Can't infer value for foo's return type, it could be either true or false
+    Expect.identical(typesTask.boolType, mask);
+    var bar = findElement(compiler, "bar");
+    var barArg = bar.parameters.first;
+    var barArgMask = typesInferrer.getTypeOfElement(barArg);
+    // The argument to bar should have the same type as the return type of foo
+    Expect.identical(typesTask.boolType, barArgMask);
+    var barCode = compiler.backend.getGeneratedCode(bar);
+    Expect.isTrue(barCode.contains('"bbb"'));
+    // Still must output the print for "aaa"
+    Expect.isTrue(barCode.contains('"aaa"'));
+  });
+}
+
+main() {
+  asyncStart();
+  runTest1().then((_) {
+    return runTest2();
+  }).whenComplete(asyncEnd);
+}
diff --git a/tests/compiler/dart2js/unparser2_test.dart b/tests/compiler/dart2js/unparser2_test.dart
index a4a8aed..09c713d 100644
--- a/tests/compiler/dart2js/unparser2_test.dart
+++ b/tests/compiler/dart2js/unparser2_test.dart
@@ -99,7 +99,7 @@
   return unparse(node);
 }
 
-class MessageCollector implements DiagnosticListener {
+class MessageCollector extends DiagnosticListener {
   List<String> messages;
   MessageCollector() {
     messages = [];
diff --git a/tests/compiler/dart2js_native/dart2js_native.status b/tests/compiler/dart2js_native/dart2js_native.status
index c125da1..2066a92 100644
--- a/tests/compiler/dart2js_native/dart2js_native.status
+++ b/tests/compiler/dart2js_native/dart2js_native.status
@@ -21,6 +21,7 @@
 compute_this_script_test: Skip # Issue 17458
 
 [ $compiler == dart2js && $cps_ir ]
+native_exception_test: RuntimeError # Issue 24421
 native_method_inlining_test: RuntimeError # Please triage this failure.
 native_no_such_method_exception3_frog_test: RuntimeError # Please triage this failure.
 optimization_hints_test: RuntimeError # Please triage this failure.
diff --git a/tests/corelib/map_test.dart b/tests/corelib/map_test.dart
index 79d1ace..dff5e61 100644
--- a/tests/corelib/map_test.dart
+++ b/tests/corelib/map_test.dart
@@ -392,13 +392,27 @@
 }
 
 void testTypes() {
-  Map<int, dynamic> map;
-  testMap(Map map) {
-    map[42] = "text";
-    map[43] = "text";
-    map[42] = "text";
-    map.remove(42);
-    map[42] = "text";
+  testMap(Map<num, String> map) {
+    Expect.isTrue(map is Map<num, String>);
+    Expect.isTrue(map is! Map<String, dynamic>);
+    Expect.isTrue(map is! Map<dynamic, int>);
+
+    // Use with properly typed keys and values.
+    map[42] = "text1";
+    map[43] = "text2";
+    map[42] = "text3";
+    Expect.equals("text3", map.remove(42));
+    Expect.equals(null, map[42]);
+    map[42] = "text4";
+
+    // Ensure that "containsKey", "containsValue" and "remove"
+    // accepts any object.
+    for (var object in [true, null, new Object()]) {
+      Expect.isFalse(map.containsKey(object));
+      Expect.isFalse(map.containsValue(object));
+      Expect.isNull(map.remove(object));
+      Expect.isNull(map[object]);
+    }
   }
   testMap(new HashMap<int, String>());
   testMap(new LinkedHashMap<int, String>());
diff --git a/tests/html/html.status b/tests/html/html.status
index 835f48d..ff918be 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -9,10 +9,9 @@
 js_array_test: Skip # Issue 23676, 23677
 js_typed_interop_test: Skip # Issue 23676, 23677
 
-[ $compiler == none && $runtime == dartium ]
+[ $compiler == none && ($runtime == dartium || $runtime == drt) ]
 cross_domain_iframe_test: RuntimeError # Dartium JSInterop failure
 crypto_test/functional: RuntimeError # Dartium JSInterop failure
-custom/created_callback_test: Skip # Dartium JSInterop failure
 custom/document_register_basic_test: RuntimeError # Dartium JSInterop failure
 custom/document_register_type_extensions_test/registration: RuntimeError # Dartium JSInterop failure
 custom/element_upgrade_test: RuntimeError # Dartium JSInterop failure
@@ -60,6 +59,7 @@
 [ $compiler == none && ($runtime == drt || $runtime == dartium || $runtime == ContentShellOnAndroid) ]
 # postMessage in dartium always transfers the typed array buffer, never a view
 postmessage_structured_test/typed_arrays: Fail
+postmessage_structured_test/primitives: RuntimeError # Bug 24432
 # Dartium seems to lose the data from the dispatchEvent.
 async_test: Fail # Uses spawn, not implemented from a DOM isolate in Dartium
 keyboard_event_test: Fail # Issue 13902
@@ -208,7 +208,6 @@
 css_test/functional: Fail # Issues 21710
 
 [ $runtime == ie11 ]
-node_validator_important_if_you_suppress_make_the_bug_critical_test/dom_clobbering: RuntimeError # Issue 24387
 custom/document_register_type_extensions_test/single-parameter: Fail # Issue 13193.
 canvasrenderingcontext2d_test/arc: Pass, Fail # Pixel unexpected value. Please triage this failure.
 worker_test/functional: Pass, Fail # Issues 20659.
@@ -351,7 +350,6 @@
 websql_test/supported: Fail
 
 [  $compiler == dart2js && $runtime == ff ]
-node_validator_important_if_you_suppress_make_the_bug_critical_test/DOM_sanitization: RuntimeError # Issue 24384
 history_test/history: Skip # Issue 22050
 xhr_test/xhr: Pass, Fail # Issue 11602
 dart_object_local_storage_test: Skip  # sessionStorage NS_ERROR_DOM_NOT_SUPPORTED_ERR
diff --git a/tests/html/node_validator_important_if_you_suppress_make_the_bug_critical_test.dart b/tests/html/node_validator_important_if_you_suppress_make_the_bug_critical_test.dart
index e5c5622..4d7d338 100644
--- a/tests/html/node_validator_important_if_you_suppress_make_the_bug_critical_test.dart
+++ b/tests/html/node_validator_important_if_you_suppress_make_the_bug_critical_test.dart
@@ -298,7 +298,7 @@
       ..allowElement(
           'a',
           attributes: ['href']);
-  
+
     testHtml('reject different-origin link',
       validator,
         '<a href="http://www.google.com/foo">Google-Foo</a>',
@@ -511,7 +511,7 @@
 
     testHtml('DOM clobbering of attributes with single node',
     validator,
-    "<form onmouseover='alert(1)'><input name='attributes'>",
+    "<form id='single_node_clobbering' onmouseover='alert(1)'><input name='attributes'>",
     "");
 
     testHtml('DOM clobbering of attributes with multiple nodes',
diff --git a/tests/language/async_return_types_test.dart b/tests/language/async_return_types_test.dart
index 83eb9a8..1134e25 100644
--- a/tests/language/async_return_types_test.dart
+++ b/tests/language/async_return_types_test.dart
@@ -40,6 +40,23 @@
   return new Future<int>.value(3);
 }
 
+
+Iterable<int> foo8() sync* {
+  yield 1;
+  // Can only have valueless return in sync* functions.
+  return
+      8 /// return_value_sync_star: compile-time error
+       ;
+}
+
+Stream<int> foo9() async* {
+  yield 1;
+  // Can only have valueless return in async* functions.
+  return
+      8 /// return_value_sync_star: compile-time error
+       ;
+}
+
 test() async {
   Expect.equals(3, await foo1());
   Expect.equals(3, await foo2());
@@ -48,6 +65,8 @@
   Expect.equals(3, await foo5());
   Expect.equals(3, await await foo6());
   Expect.equals(3, await await foo7());
+  Expect.listEquals([1], foo8().toList());
+  Expect.listEquals([1], await foo9().toList());
 }
 
 main() {
diff --git a/tests/language/inheritance_chain_lib.dart b/tests/language/inheritance_chain_lib.dart
new file mode 100644
index 0000000..1a8ef51
--- /dev/null
+++ b/tests/language/inheritance_chain_lib.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2015, 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 "inheritance_chain_test.dart";
+
+class B extends C {
+  get id => "B";
+  get length => 2;
+}
+
+class D extends Z {
+  get id => "D";
+  get length => 4;
+}
+
+class W {
+  get id => "W";
+  get length => -4;
+}
+
+class Y extends X {
+  get id => "Y";
+  get length => -2;
+}
\ No newline at end of file
diff --git a/tests/language/inheritance_chain_test.dart b/tests/language/inheritance_chain_test.dart
new file mode 100644
index 0000000..ef60152
--- /dev/null
+++ b/tests/language/inheritance_chain_test.dart
@@ -0,0 +1,103 @@
+// Copyright (c) 2015, 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 "package:expect/expect.dart";
+import "inheritance_chain_lib.dart";
+
+class A extends B {
+  get id => "A";
+  get length => 1;
+}
+
+class C extends  D {
+  get id => "C";
+  get length => 3;
+}
+
+class X extends W {
+  get id => "X";
+  get length => -3;
+}
+
+class Z extends Y {
+  get id => "Z";
+  get length => -1;
+}
+
+main() {
+  var instances = [
+    new A(),
+    new B(),
+    new C(),
+    new D(),
+    new W(),
+    new X(),
+    new Y(),
+    new Z(),
+    [],
+  ];
+
+  var o = instances[0];
+  Expect.equals("A", o.id);
+  Expect.equals(1, o.length);
+  Expect.isTrue(o is A);
+  Expect.isTrue(o is B);
+  Expect.isTrue(o is C);
+  Expect.isTrue(o is D);
+  Expect.isTrue(o is W);
+  Expect.isTrue(o is X);
+  Expect.isTrue(o is Y);
+  Expect.isTrue(o is Z);
+  o = instances[1];
+  Expect.equals("B", o.id);
+  Expect.equals(2, o.length);
+  Expect.isTrue(o is B);
+  Expect.isTrue(o is C);
+  Expect.isTrue(o is D);
+  Expect.isTrue(o is W);
+  Expect.isTrue(o is X);
+  Expect.isTrue(o is Y);
+  Expect.isTrue(o is Z);
+  o = instances[2];
+  Expect.equals("C", o.id);
+  Expect.equals(3, o.length);
+  Expect.isTrue(o is C);
+  Expect.isTrue(o is D);
+  Expect.isTrue(o is W);
+  Expect.isTrue(o is X);
+  Expect.isTrue(o is Y);
+  Expect.isTrue(o is Z);
+  o = instances[3];
+  Expect.equals("D", o.id);
+  Expect.equals(4, o.length);
+  Expect.isTrue(o is D);
+  Expect.isTrue(o is W);
+  Expect.isTrue(o is X);
+  Expect.isTrue(o is Y);
+  Expect.isTrue(o is Z);
+  o = instances[4];
+  Expect.equals("W", o.id);
+  Expect.equals(-4, o.length);
+  Expect.isTrue(o is W);
+  o = instances[5];
+  Expect.equals("X", o.id);
+  Expect.equals(-3, o.length);
+  Expect.isTrue(o is X);
+  Expect.isTrue(o is W);
+  o = instances[6];
+  Expect.equals("Y", o.id);
+  Expect.equals(-2, o.length);
+  Expect.isTrue(o is Y);
+  Expect.isTrue(o is X);
+  Expect.isTrue(o is W);
+  o = instances[7];
+  Expect.equals("Z", o.id);
+  Expect.equals(-1, o.length);
+  Expect.isTrue(o is Z);
+  Expect.isTrue(o is Y);
+  Expect.isTrue(o is X);
+  Expect.isTrue(o is W);
+  o = instances[8];
+  Expect.equals(0, o.length);
+}
\ No newline at end of file
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index 49f028d..99ceb15 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -253,6 +253,11 @@
 async_await_test/03: Crash # (switch (v){label:ca...  continue to a labeled switch case
 async_await_test/none: Crash # (switch (v){label:ca...  continue to a labeled switch case
 async_or_generator_return_type_stacktrace_test/02: Crash # (void badReturnTypeAsyncStar()async*{}): cannot handle sync*/async* functions
+async_return_types_test/nestedFuture: Crash #  cannot handle sync*/async* functions
+async_return_types_test/none: Crash # cannot handle sync*/async* functions
+async_return_types_test/tooManyTypeParameters: Crash # cannot handle sync*/async* functions
+async_return_types_test/wrongReturnType: Crash # cannot handle sync*/async* functions
+async_return_types_test/wrongTypeParameter: Crash # cannot handle sync*/async* functions
 async_star_await_pauses_test: Crash # (await for(var i in ...  await for
 async_star_cancel_and_throw_in_finally_test: Crash # (foo()async*{try {in...  cannot handle sync*/async* functions
 async_star_cancel_while_paused_test: Crash # (f()async*{list.add(...  cannot handle sync*/async* functions
diff --git a/tests/language/private_super_constructor_lib.dart b/tests/language/private_super_constructor_lib.dart
new file mode 100644
index 0000000..8a34b6d
--- /dev/null
+++ b/tests/language/private_super_constructor_lib.dart
@@ -0,0 +1,10 @@
+// Copyright (c) 2015, 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 private_super_constructor_lib;
+
+class B {
+  B();
+  B._foo();
+}
\ No newline at end of file
diff --git a/tests/language/private_super_constructor_test.dart b/tests/language/private_super_constructor_test.dart
new file mode 100644
index 0000000..a203f4a
--- /dev/null
+++ b/tests/language/private_super_constructor_test.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2015, 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 private_super_constructor_test;
+
+import 'private_super_constructor_lib.dart';
+
+class C extends B {
+  C() : super._foo(); /// 01: compile-time error
+}
+
+main() => new C();
\ No newline at end of file
diff --git a/tests/lib/convert/base64_test.dart b/tests/lib/convert/base64_test.dart
new file mode 100644
index 0000000..016dc91
--- /dev/null
+++ b/tests/lib/convert/base64_test.dart
@@ -0,0 +1,217 @@
+// 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 'dart:convert';
+import "dart:typed_data";
+import "package:expect/expect.dart";
+
+main() {
+  for (var list in [[],
+                    [0x00],
+                    [0xff, 0x00],
+                    [0xff, 0xaa, 0x55],
+                    [0x00, 0x01, 0x02, 0x03],
+                    new Iterable.generate(13).toList(),
+                    new Iterable.generate(254).toList(),
+                    new Iterable.generate(255).toList(),
+                    new Iterable.generate(256).toList()]) {
+    testRoundtrip(list, "List#${list.length}");
+    testRoundtrip(new Uint8List.fromList(list), "Uint8List#${list.length}");
+  }
+  testErrors();
+}
+
+void testRoundtrip(list, name) {
+  // Direct.
+  String encoded = BASE64.encode(list);
+  List result = BASE64.decode(encoded);
+  Expect.listEquals(list, result, name);
+
+  int increment = list.length ~/ 7 + 1;
+  // Chunked.
+  for (int i = 0; i < list.length; i += increment) {
+    for (int j = i; j < list.length; j += increment) {
+      {
+        // Using add/close
+        var results;
+        var sink = new ChunkedConversionSink.withCallback((v) { results = v; });
+        var encoder = BASE64.encoder.startChunkedConversion(sink);
+        encoder.add(list.sublist(0, i));
+        encoder.add(list.sublist(i, j));
+        encoder.add(list.sublist(j, list.length));
+        encoder.close();
+        var name = "0-$i-$j-${list.length}: list";
+        Expect.equals(encoded, results.join(""), name);
+      }
+      {
+        // Using addSlice
+        var results;
+        var sink = new ChunkedConversionSink.withCallback((v) { results = v; });
+        var encoder = BASE64.encoder.startChunkedConversion(sink);
+        encoder.addSlice(list, 0, i, false);
+        encoder.addSlice(list, i, j, false);
+        encoder.addSlice(list, j, list.length, true);
+        var name = "0-$i-$j-${list.length}: $list";
+        Expect.equals(encoded, results.join(""), name);
+      }
+    }
+  }
+
+  increment = encoded.length ~/ 7 + 1;
+  for (int i = 0; i < encoded.length; i += increment) {
+    for (int j = i; j < encoded.length; j += increment) {
+      {
+        // Using add/close
+        var results;
+        var sink = new ChunkedConversionSink.withCallback((v) { results = v; });
+        var decoder = BASE64.decoder.startChunkedConversion(sink);
+        decoder.add(encoded.substring(0, i));
+        decoder.add(encoded.substring(i, j));
+        decoder.add(encoded.substring(j, encoded.length));
+        decoder.close();
+        var name = "0-$i-$j-${encoded.length}: $encoded";
+        Expect.listEquals(list, results.expand((x)=>x).toList(), name);
+      }
+      {
+        // Using addSlice
+        var results;
+        var sink = new ChunkedConversionSink.withCallback((v) { results = v; });
+        var decoder = BASE64.decoder.startChunkedConversion(sink);
+        decoder.addSlice(encoded, 0, i, false);
+        decoder.addSlice(encoded, i, j, false);
+        decoder.addSlice(encoded, j, encoded.length, true);
+        var name = "0-$i-$j-${encoded.length}: $encoded";
+        Expect.listEquals(list, results.expand((x)=>x).toList(), name);
+      }
+    }
+  }
+}
+
+bool isFormatException(e) => e is FormatException;
+bool isArgumentError(e) => e is ArgumentError;
+
+void testErrors() {
+  void badChunkDecode(List<String> list) {
+    Expect.throws(() {
+      var sink = new ChunkedConversionSink.withCallback((v) {
+        Expect.fail("Should have thrown: chunk $list");
+      });
+      var c = BASE64.decoder.startChunkedConversion(sink);
+      for (String string in list) {
+        c.add(string);
+      }
+      c.close();
+    }, isFormatException, "chunk $list");
+  }
+  void badDecode(String string) {
+    Expect.throws(() => BASE64.decode(string), isFormatException, string);
+    badChunkDecode([string]);
+    badChunkDecode(["", string]);
+    badChunkDecode([string, ""]);
+    badChunkDecode([string, "", ""]);
+    badChunkDecode(["", string, ""]);
+  }
+
+  badDecode("A");
+  badDecode("AA");
+  badDecode("AAA");
+  badDecode("AAAAA");
+  badDecode("AAAAAA");
+  badDecode("AAAAAAA");
+  badDecode("AAAA=");
+  badDecode("AAAA==");
+  badDecode("AAAA===");
+  badDecode("AAAA====");
+  badDecode("A=");
+  badDecode("A=A");
+  badDecode("A==");
+  badDecode("A==A");
+  badDecode("A===");
+  badDecode("====");
+  badDecode("AA=");
+  badDecode("AA===");
+  badDecode("AAA==");
+  badDecode("AAA=AAAA");
+  badDecode("AAA-");
+  badDecode("AAA_");
+  badDecode("AAA\x00");
+  badDecode("AAA=\x00");
+  badDecode("AAA\x80");
+  badDecode("AAA\xFF");
+  badDecode("AAA\u{141}");
+  badDecode("AAA\u{1041}");
+  badDecode("AAA\u{10041}");
+
+  var alphabet =
+    "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/";
+  var units = alphabet.codeUnits;
+  for (int i = 0; i < 128; i++) {
+    if (!units.contains(i)) {
+      badDecode(new String.fromCharCode(i) * 4);
+    }
+  }
+
+  badChunkDecode(["A", "A"]);
+  badChunkDecode(["A", "A", "A"]);
+  badChunkDecode(["A", "A", "="]);
+  badChunkDecode(["A", "A", "=", ""]);
+  badChunkDecode(["A", "A", "=", "=", "="]);
+  badChunkDecode(["AAA", "=="]);
+  badChunkDecode(["A", "A", "A"]);
+  badChunkDecode(["AAA", ""]);
+  badChunkDecode(["AA=", ""]);
+  badChunkDecode(["AB==", ""]);
+
+
+  badChunkEncode(list) {
+    for (int i = 0; i < list.length; i++) {
+      for (int j = 0; j < list.length; j++) {
+        Expect.throws(() {
+          var sink = new ChunkedConversionSink.withCallback((v) {
+            Expect.fail("Should have thrown: chunked $list");
+          });
+          var c = BASE64.encoder.startChunkedConversion(sink);
+          c.add(list.sublist(0, i));
+          c.add(list.sublist(i, j));
+          c.add(list.sublist(j, list.length));
+          c.close();
+        }, isArgumentError, "chunk $list");
+      }
+    }
+    for (int i = 0; i < list.length; i++) {
+      for (int j = 0; j < list.length; j++) {
+        Expect.throws(() {
+          var sink = new ChunkedConversionSink.withCallback((v) {
+            Expect.fail("Should have thrown: chunked $list");
+          });
+          var c = BASE64.encoder.startChunkedConversion(sink);
+          c.addSlice(list, 0, i, false);
+          c.addSlice(list, i, j, false);
+          c.addSlice(list, j, list.length, true);
+        }, isArgumentError, "chunk $list");
+      }
+    }
+  }
+
+  void badEncode(int invalid) {
+    Expect.throws(() {
+      BASE64.encode([invalid]);
+    }, isArgumentError, "$invalid");
+    Expect.throws(() {
+      BASE64.encode([0, invalid, 0]);
+    }, isArgumentError, "$invalid");
+    badChunkEncode([invalid]);
+    badChunkEncode([0, invalid]);
+    badChunkEncode([0, 0, invalid]);
+    badChunkEncode([0, invalid, 0]);
+    badChunkEncode([invalid, 0, 0]);
+  }
+
+  badEncode(-1);
+  badEncode(0x100);
+  badEncode(0x1000);
+  badEncode(0x10000);
+  badEncode(0x100000000);          /// 01: ok
+  badEncode(0x10000000000000000);  /// 01: continued
+}
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index c35ec1d..c667970 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -180,6 +180,7 @@
 [ $compiler == dart2js ]
 convert/chunked_conversion_utf88_test: Slow, Pass
 convert/utf85_test: Slow, Pass
+convert/base64_test/01: Fail, OK # Uses bit-wise operations to detect invalid values. Some large invalid values accepted by dart2js.
 mirrors/globalized_closures_test/00: RuntimeError # Issue 17118. Please remove the multi-test comments when this test starts succeeding.
 mirrors/globalized_closures2_test/00: RuntimeError # Issue 17118. Please remove the multi-test comments when this test starts succeeding.
 
@@ -256,6 +257,9 @@
 async/multiple_timer_test: Fail, Pass # See Issue 10982
 async/timer_test: Fail, Pass # See Issue 10982
 
+[ $compiler == none && $runtime == drt && $checked ]
+async/slow_consumer_test: Fail, Pass # Dartium JsInterop failure, dartbug.com/24460
+
 [$compiler == none && $runtime == ContentShellOnAndroid ]
 async/stream_timeout_test: RuntimeError, Pass # Issue 19127
 async/slow_consumer3_test: SkipSlow # Times out flakily. Issue 20956
diff --git a/tests/standalone/precompilation_test.dart b/tests/standalone/precompilation_test.dart
new file mode 100644
index 0000000..047ac0d
--- /dev/null
+++ b/tests/standalone/precompilation_test.dart
@@ -0,0 +1,105 @@
+// Copyright (c) 2015, 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.
+
+// Test generating and running a simple precompiled snapshot of this script.
+
+import 'dart:io';
+
+main(List args) {
+  if (args.length > 0 && args[0] == "--hello") {
+    print("Hello");
+    return;
+  }
+
+  var cc, cc_flags, shared, libname;
+  if (Platform.isLinux) {
+    cc = 'gcc';
+    shared = '-shared';
+    libname = 'libprecompiled.so';
+  } else if (Platform.isMacOS) {
+    cc = 'clang';
+    shared = '-dynamiclib';
+    libname = 'libprecompiled.dylib';
+  } else {
+    print("Test only supports Linux and Mac");
+    return;
+  }
+
+  if (Platform.version.contains("x64")) {
+    cc_flags = "-m64";
+  } else if (Platform.version.contains("simarm64")) {
+    cc_flags = "-m64";
+  } else if (Platform.version.contains("simarm")) {
+    cc_flags = "-m32";
+  } else if (Platform.version.contains("simmips")) {
+    cc_flags = "-m32";
+  } else if (Platform.version.contains("arm")) {
+    cc_flags = "";
+  } else if (Platform.version.contains("mips")) {
+    cc_flags = "-EL";
+  } else {
+    print("Architecture not supported: ${Platform.version}");
+    return;
+  }
+
+  var dart_executable =
+      Directory.current.path + Platform.pathSeparator + Platform.executable;
+  Directory tmp;
+  try {
+    tmp = Directory.current.createTempSync("temp_precompilation_test");
+    var result = Process.runSync(
+       "${dart_executable}_no_snapshot",
+       ["--gen-precompiled-snapshot", Platform.script.path],
+       workingDirectory: tmp.path);
+    if (result.exitCode != 0) {
+      print(result.stdout);
+      print(result.stderr);
+      throw "Snapshot generation failed.";
+    }
+
+    // Check if gcc is present, and skip test if it is not.
+    try {
+      result = Process.runSync(
+          cc,
+          ["--version"],
+          workingDirectory: tmp.path);
+      if (result.exitCode != 0) {
+        throw "$cc --version failed.";
+      }
+    } catch(e) {
+      print("Skipping test because $cc is not present: $e");
+      return;
+    }
+
+    result = Process.runSync(
+        cc,
+        [shared, cc_flags, "-o", libname, "precompiled.S"],
+        workingDirectory: tmp.path);
+    if (result.exitCode != 0) {
+      print(result.stdout);
+      print(result.stderr);
+      throw "Shared library creation failed!";
+    }
+
+    var ld_library_path = new String.fromEnvironment("LD_LIBRARY_PATH");
+    ld_library_path = "${ld_library_path}:${tmp.path}";
+
+    result = Process.runSync(
+       "${dart_executable}",
+       ["--run-precompiled-snapshot", "ignored_script", "--hello"],
+       workingDirectory: tmp.path,
+       environment: {"LD_LIBRARY_PATH": ld_library_path});
+    if (result.exitCode != 0) {
+      print(result.stdout);
+      print(result.stderr);
+      throw "Precompiled binary failed.";
+    }
+    print(result.stdout);
+    if (result.stdout != "Hello\n") {
+      throw "Precompiled binary output mismatch.";
+    }
+  } finally {
+    tmp?.deleteSync(recursive: true);
+  }
+}
diff --git a/tests/standalone/standalone.status b/tests/standalone/standalone.status
index 827482f..f552859 100644
--- a/tests/standalone/standalone.status
+++ b/tests/standalone/standalone.status
@@ -61,6 +61,7 @@
 oom_error_stacktrace_test: Skip
 out_of_memory_test: Skip
 verbose_gc_to_bmu_test: Skip
+precompilation_test: Skip # Standalone only test.
 
 [ $compiler == dartanalyzer || $compiler == dart2analyzer ]
 javascript_int_overflow_literal_test/01: Fail, OK
@@ -103,6 +104,13 @@
 javascript_compatibility_warnings_test: Skip
 unboxed_int_converter_test: Skip
 pair_location_remapping_test: Skip
+precompilation_test: Skip # Standalone only test.
+
+[ $runtime == vm && $arch == ia32]
+precompilation_test: Skip # Not expected to pass on ia32.
+
+[ $runtime == vm && $arch == arm]
+precompilation_test: Skip # Issue 24427
 
 [ $compiler == dart2js && $jscl ]
 assert_test: RuntimeError, OK # Assumes unspecified fields on the AssertionError.
diff --git a/tests/utils/utils.status b/tests/utils/utils.status
index 77594d3..43fb007 100644
--- a/tests/utils/utils.status
+++ b/tests/utils/utils.status
@@ -8,6 +8,7 @@
 [ $compiler == dart2js ]
 dummy_compiler_test: Slow, Pass
 recursive_import_test: Slow, Pass
+source_mirrors_test: Slow, Pass
 
 [ $compiler == none && $runtime == drt ]
 dummy_compiler_test: Skip # Issue 7233
@@ -20,7 +21,6 @@
 
 
 [ $compiler == dart2js && $mode == debug ]
-source_mirrors_test: Slow, Pass
 dummy_compiler_test: Slow, Pass
 
 [ $compiler == none && $runtime == ContentShellOnAndroid ]
diff --git a/tools/VERSION b/tools/VERSION
index fd55717..774c773 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 1
 MINOR 13
 PATCH 0
-PRERELEASE 4
+PRERELEASE 5
 PRERELEASE_PATCH 0
diff --git a/tools/apps/update_homebrew/bin/update_homebrew.dart b/tools/apps/update_homebrew/bin/update_homebrew.dart
index dbf10ab..50474c93 100644
--- a/tools/apps/update_homebrew/bin/update_homebrew.dart
+++ b/tools/apps/update_homebrew/bin/update_homebrew.dart
@@ -169,7 +169,7 @@
   def install
     libexec.install Dir['*']
     bin.install_symlink "#{libexec}/bin/dart"
-    bin.write_exec_script Dir["#{libexec}/bin/{pub,docgen,dart?*}"]
+    bin.write_exec_script Dir["#{libexec}/bin/{pub,dart?*}"]
 
     if build.with? 'dartium'
       dartium_binary = 'Chromium.app/Contents/MacOS/Chromium'
diff --git a/tools/deps/dartium.deps/DEPS b/tools/deps/dartium.deps/DEPS
index 7425710..3c6dd66 100644
--- a/tools/deps/dartium.deps/DEPS
+++ b/tools/deps/dartium.deps/DEPS
@@ -14,7 +14,7 @@
   "dartium_chromium_commit": "62a7524d4f71c9e0858d24b0aa1bbff3a2d09bff",
   "chromium_base_revision": "297060",
   "dartium_webkit_branch": "/blink/branches/dart/dartium",
-  "dartium_webkit_revision": "202538",
+  "dartium_webkit_revision": "202671",
 
   # We use mirrors of all github repos to guarantee reproducibility and
   # consistency between what users see and what the bots see.
@@ -49,7 +49,7 @@
   "mime_rev": "@75890811d4af5af080351ba8a2853ad4c8df98dd",
   "metatest_rev": "@e5aa8e4e19fc4188ac2f6d38368a47d8f07c3df1",
   "oauth2_rev": "@1bff41f4d54505c36f2d1a001b83b8b745c452f5",
-  "observatory_pub_packages_rev": "@cdc4b3d4c15b9c0c8e7702dff127b440afbb7485",
+  "observatory_pub_packages_rev": "@a731d3b1caf27b45aecdce9378b87a510240264d",
   "package_config_rev": "@0.1.3",
   "path_rev": "@b657c0854d1cf41c014986fa9d2321f1173df805",
   "plugin_tag": "@0.1.0",
@@ -69,7 +69,7 @@
   "zlib_rev": "@c3d0a6190f2f8c924a05ab6cc97b8f975bddd33f",
   "web_components_rev": "@0e636b534d9b12c9e96f841e6679398e91a986ec",
 
-  "co19_rev": "@fad777939a2b891c0a79b69a4d79c914049c69b0",
+  "co19_rev": "@ead3698f33d2cd41e75b6ce5d4a1203767cedd50",
   "fake_async_rev": "@38614",
 })
 
diff --git a/tools/dom/src/Html5NodeValidator.dart b/tools/dom/src/Html5NodeValidator.dart
index c935d07..2bbaf41 100644
--- a/tools/dom/src/Html5NodeValidator.dart
+++ b/tools/dom/src/Html5NodeValidator.dart
@@ -423,11 +423,11 @@
   }
 
   bool allowsElement(Element element) {
-    return _allowedElements.contains(element._safeTagName);
+    return _allowedElements.contains(Element._safeTagName(element));
   }
 
   bool allowsAttribute(Element element, String attributeName, String value) {
-    var tagName = element._safeTagName;
+    var tagName = Element._safeTagName(element);
     var validator = _attributeValidators['$tagName::$attributeName'];
     if (validator == null) {
       validator = _attributeValidators['*::$attributeName'];
diff --git a/tools/dom/src/NodeValidatorBuilder.dart b/tools/dom/src/NodeValidatorBuilder.dart
index f884cae..24f079b 100644
--- a/tools/dom/src/NodeValidatorBuilder.dart
+++ b/tools/dom/src/NodeValidatorBuilder.dart
@@ -358,11 +358,11 @@
   }
 
   bool allowsElement(Element element) {
-    return allowedElements.contains(element._safeTagName);
+    return allowedElements.contains(Element._safeTagName(element));
   }
 
   bool allowsAttribute(Element element, String attributeName, String value) {
-    var tagName = element._safeTagName;
+    var tagName = Element._safeTagName(element);
     if (allowedUriAttributes.contains('$tagName::$attributeName')) {
       return uriPolicy.allowsUri(value);
     } else if (allowedUriAttributes.contains('*::$attributeName')) {
@@ -403,10 +403,10 @@
       var isAttr = element.attributes['is'];
       if (isAttr != null) {
         return allowedElements.contains(isAttr.toUpperCase()) &&
-          allowedElements.contains(element._safeTagName);
+            allowedElements.contains(Element._safeTagName(element));
       }
     }
-    return allowCustomTag && allowedElements.contains(element._safeTagName);
+    return allowCustomTag && allowedElements.contains(Element._safeTagName(element));
   }
 
   bool allowsAttribute(Element element, String attributeName, String value) {
@@ -462,7 +462,7 @@
     // foreignobject tag as SvgElement. We don't want foreignobject contents
     // anyway, so just remove the whole tree outright. And we can't rely
     // on IE recognizing the SvgForeignObject type, so go by tagName. Bug 23144
-    if (element is svg.SvgElement && element._safeTagName == 'foreignObject') {
+    if (element is svg.SvgElement && Element._safeTagName(element) == 'foreignObject') {
       return false;
     }
     if (element is svg.SvgElement) {
diff --git a/tools/dom/src/Validators.dart b/tools/dom/src/Validators.dart
index 11cb3d0..4dbe32c 100644
--- a/tools/dom/src/Validators.dart
+++ b/tools/dom/src/Validators.dart
@@ -141,14 +141,14 @@
 
   bool allowsElement(Element element) {
     if (!validator.allowsElement(element)) {
-      throw new ArgumentError(element._safeTagName);
+      throw new ArgumentError(Element._safeTagName(element));
     }
     return true;
   }
 
   bool allowsAttribute(Element element, String attributeName, String value) {
     if (!validator.allowsAttribute(element, attributeName, value)) {
-      throw new ArgumentError('${element._safeTagName}[$attributeName="$value"]');
+      throw new ArgumentError('${Element._safeTagName(element)}[$attributeName="$value"]');
     }
   }
 }
@@ -190,7 +190,7 @@
   }
 
   /// Sanitize the element, assuming we can't trust anything about it.
-  void _sanitizeUntrustedElement(Element element, Node parent) {
+  void _sanitizeUntrustedElement(/* Element */ element, Node parent) {
     // If the _hasCorruptedAttributes does not successfully return false,
     // then we consider it corrupted and remove.
     // TODO(alanknight): This is a workaround because on Firefox
@@ -199,7 +199,9 @@
     // can't call methods. This does mean that you can't explicitly allow an
     // embed tag. The only thing that will let it through is a null
     // sanitizer that doesn't traverse the tree at all. But sanitizing while
-    // allowing embeds seems quite unlikely.
+    // allowing embeds seems quite unlikely. This is also the reason that we
+    // can't declare the type of element, as an embed won't pass any type
+    // check in dart2js.
     var corrupted = true;
     var attrs;
     var isAttr;
@@ -207,15 +209,27 @@
       // If getting/indexing attributes throws, count that as corrupt.
       attrs = element.attributes;
       isAttr = attrs['is'];
-      corrupted = Element._hasCorruptedAttributes(element);
+      var corruptedTest1 = Element._hasCorruptedAttributes(element);
+
+      // On IE, erratically, the hasCorruptedAttributes test can return false,
+      // even though it clearly is corrupted. A separate copy of the test
+      // inlining just the basic check seems to help.
+      corrupted = corruptedTest1 ? true : Element._hasCorruptedAttributesAdditionalCheck(element);
     } catch(e) {}
-     var elementText = 'element unprintable';
+    var elementText = 'element unprintable';
     try {
       elementText = element.toString();
     } catch(e) {}
-    var elementTagName = element._safeTagName;
-    _sanitizeElement(element, parent, corrupted, elementText, elementTagName,
-        attrs, isAttr);
+    try {
+      var elementTagName = Element._safeTagName(element);
+      _sanitizeElement(element, parent, corrupted, elementText, elementTagName,
+          attrs, isAttr);
+    } on ArgumentError { // Thrown by _ThrowsNodeValidator
+      rethrow;
+    } catch(e) {  // Unexpected exception sanitizing -> remove
+      _removeNode(element, parent);
+      window.console.warn('Removing corrupted element $elementText');
+    }
   }
 
   /// Having done basic sanity checking on the element, and computed the
@@ -224,23 +238,23 @@
   void _sanitizeElement(Element element, Node parent, bool corrupted,
       String text, String tag, Map attrs, String isAttr) {
     if (false != corrupted) {
+       _removeNode(element, parent);
       window.console.warn(
           'Removing element due to corrupted attributes on <$text>');
-       _removeNode(element, parent);
        return;
     }
     if (!validator.allowsElement(element)) {
-      window.console.warn(
-          'Removing disallowed element <$tag>');
       _removeNode(element, parent);
+      window.console.warn(
+          'Removing disallowed element <$tag> from $parent');
       return;
     }
 
     if (isAttr != null) {
       if (!validator.allowsAttribute(element, 'is', isAttr)) {
+        _removeNode(element, parent);
         window.console.warn('Removing disallowed type extension '
             '<$tag is="$isAttr">');
-        _removeNode(element, parent);
         return;
       }
     }
diff --git a/tools/dom/templates/html/impl/impl_Element.darttemplate b/tools/dom/templates/html/impl/impl_Element.darttemplate
index 180a0b9..25608df 100644
--- a/tools/dom/templates/html/impl/impl_Element.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Element.darttemplate
@@ -1453,9 +1453,32 @@
 	     return true;
 	   }
 	 }
+         var length = 0;
+         if (element.children) {
+           length = element.children.length;
+         }
+         for (var i = 0; i < length; i++) {
+           var child = element.children[i];
+           // On IE it seems like we sometimes don't see the clobbered attribute,
+           // perhaps as a result of an over-optimization. Also use another route
+           // to check of attributes, children, or lastChild are clobbered. It may
+           // seem silly to check children as we rely on children to do this iteration,
+           // but it seems possible that the access to children might see the real thing,
+           // allowing us to check for clobbering that may show up in other accesses.
+           if (child["id"] == 'attributes' || child["name"] == 'attributes' ||
+               child["id"] == 'lastChild'  || child["name"] == 'lastChild' ||
+               child["id"] == 'children' || child["name"] == 'children') {
+             return true;
+           }
+         }
 	 return false;
           })(#)''', element);
   }
+
+  /// A secondary check for corruption, needed on IE
+  static bool _hasCorruptedAttributesAdditionalCheck(Element element) {
+    return JS('bool', r'!(#.attributes instanceof NamedNodeMap)', element);
+  }
 $else
 
   static var _namedNodeMap = js.context["NamedNodeMap"];
@@ -1483,13 +1506,16 @@
     }
     return false;
   }
+
+  /// A secondary check for corruption, needed on IE
+  static bool _hasCorruptedAttributesAdditionalCheck(Element element) => false;
 $endif
 
-  String get _safeTagName {
+  static String _safeTagName(element) {
     String result = 'element tag unavailable';
     try {
-      if (tagName is String) {
-        result = tagName;
+      if (element.tagName is String) {
+        result = element.tagName;
       }
     } catch (e) {}
     return result;
diff --git a/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate b/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate
index bf8f0ff..0a0ff4c 100644
--- a/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate
@@ -199,7 +199,8 @@
 
     while (classMirror.superclass != null) {
       var fullName = classMirror.superclass.qualifiedName;
-      isElement = isElement || (fullName == #dart.dom.html.Element);
+      isElement = isElement ||
+          (fullName == #dart.dom.html.Element || fullName == #dart.dom.svg.Element);
 
       var domLibrary = MirrorSystem.getName(fullName).startsWith('dart.dom.');
       if (jsClassName == null && domLibrary) {
@@ -209,7 +210,7 @@
           var metaDataMirror = metadata.reflectee;
           var metaType = reflectClass(metaDataMirror.runtimeType);
           if (MirrorSystem.getName(metaType.simpleName) == 'DomName' &&
-              metaDataMirror.name.startsWith('HTML')) {
+              (metaDataMirror.name.startsWith('HTML') || metaDataMirror.name.startsWith('SVG'))) {
             jsClassName = metadata.reflectee.name;
           }
         }
@@ -221,6 +222,87 @@
     // If we're an element then everything is okay.
     return isElement ? jsClassName : null;
   }
+
+  /**
+   * Get the class that immediately derived from a class in dart:html or
+   * dart:svg (has an attribute DomName of either HTML* or SVG*).
+   */
+  ClassMirror _getDomSuperClass(ClassMirror classMirror) {
+    var isElement = false;
+
+    while (classMirror.superclass != null) {
+      var fullName = classMirror.superclass.qualifiedName;
+      isElement = isElement || (fullName == #dart.dom.html.Element || fullName == #dart.dom.svg.Element);
+
+      var domLibrary = MirrorSystem.getName(fullName).startsWith('dart.dom.');
+      if (domLibrary) {
+        // Lookup JS class (if not found).
+        var metadatas = classMirror.metadata;
+        for (var metadata in metadatas) {
+          var metaDataMirror = metadata.reflectee;
+          var metaType = reflectClass(metaDataMirror.runtimeType);
+          if (MirrorSystem.getName(metaType.simpleName) == 'DomName' &&
+              (metaDataMirror.name.startsWith('HTML') || metaDataMirror.name.startsWith('SVG'))) {
+            if (isElement) return classMirror;
+          }
+        }
+      }
+
+      classMirror = classMirror.superclass;
+    }
+
+    return null;
+  }
+
+  /**
+   * Does this CustomElement class have:
+   *
+   *   - a created constructor with no arguments?
+   *   - a created constructor with a super.created() initializer?
+   *
+   * e.g.,    MyCustomClass.created() : super.created();
+   */
+  bool _hasCreatedConstructor(ClassMirror classToRegister) {
+    var htmlClassMirror = _getDomSuperClass(classToRegister);
+
+    var classMirror = classToRegister;
+    while (classMirror != null && classMirror != htmlClassMirror) {
+      var createdParametersValid = false;
+      var superCreatedCalled = false;
+      var className = MirrorSystem.getName(classMirror.simpleName);
+      var methodMirror = classMirror.declarations[new Symbol("$className.created")];
+      if (methodMirror != null && methodMirror.isConstructor) {
+        createdParametersValid = true;                // Assume no parameters.
+        if (methodMirror.parameters.length != 0) {
+          // If any parameters each one must be optional.
+          methodMirror.parameters.forEach((parameter) {
+            createdParametersValid = createdParametersValid && parameter.isOptional;
+          });
+        }
+
+        // Get the created constructor source and look at the initializer;
+        // Must call super.created() if not its as an error.
+        var createdSource = methodMirror.source?.replaceAll('\n', ' ');
+        RegExp regExp = new RegExp(r":(.*?)(;|}|\n)");
+        var match = regExp.firstMatch(createdSource);
+        superCreatedCalled = match.input.substring(match.start,match.end).contains("super.created(");
+      }
+
+      if (!superCreatedCalled) {
+        throw new DomException.jsInterop('created constructor initializer must call super.created()');
+      } else if (!createdParametersValid) {
+        throw new DomException.jsInterop('created constructor must have no parameters');
+      }
+
+      classMirror = classMirror.superclass;
+      while (classMirror != classMirror.mixin) {
+        // Skip the mixins.
+        classMirror = classMirror.superclass;
+      }
+    }
+
+    return true;
+  }
 $endif
 
   @Experimental()
@@ -281,63 +363,71 @@
       throw new DomException.jsInterop("HierarchyRequestError: Only HTML elements can be customized.");
     }
 
-    // Start the hookup the JS way create an <x-foo> element that extends the
-    // <x-base> custom element. Inherit its prototype and signal what tag is
-    // inherited:
-    //
-    //     var myProto = Object.create(HTMLElement.prototype);
-    //     var myElement = document.registerElement('x-foo', {prototype: myProto});
-    var baseElement = js.context[jsClassName];
-    if (baseElement == null) {
-      // Couldn't find the HTML element so use a generic one.
-      baseElement = js.context['HTMLElement'];
+    if (_hasCreatedConstructor(classMirror)) {
+      // Start the hookup the JS way create an <x-foo> element that extends the
+      // <x-base> custom element. Inherit its prototype and signal what tag is
+      // inherited:
+      //
+      //     var myProto = Object.create(HTMLElement.prototype);
+      //     var myElement = document.registerElement('x-foo', {prototype: myProto});
+      var baseElement = js.context[jsClassName];
+      if (baseElement == null) {
+        // Couldn't find the HTML element so use a generic one.
+        baseElement = js.context['HTMLElement'];
+      }
+      var elemProto = js.context['Object'].callMethod("create", [baseElement['prototype']]);
+
+      // TODO(terry): Hack to stop recursion re-creating custom element when the
+      //              created() constructor of the custom element does e.g.,
+      //
+      //                  MyElement.created() : super.created() {
+      //                    this.innerHtml = "<b>I'm an x-foo-with-markup!</b>";
+      //                  }
+      //
+      //              sanitizing causes custom element to created recursively
+      //              until stack overflow.
+      //
+      //              See https://github.com/dart-lang/sdk/issues/23666
+      int creating = 0;
+      elemProto['createdCallback'] = new js.JsFunction.withThis(($this) {
+        if (_getJSClassName(reflectClass(customElementClass).superclass) != null && creating < 2) {
+          creating++;
+
+          var dartClass;
+          try {
+            dartClass = _blink.Blink_Utils.constructElement(customElementClass, $this);
+          } catch (e) {
+            dartClass = HtmlElement.internalCreateHtmlElement();
+            throw e;
+          } finally {
+            // Need to remember the Dart class that was created for this custom so
+            // return it and setup the blink_jsObject to the $this that we'll be working
+            // with as we talk to blink. 
+            $this['dart_class'] = dartClass;
+
+            creating--;
+          }
+        }
+      });
+      elemProto['attributeChangedCallback'] = new js.JsFunction.withThis(($this, attrName, oldVal, newVal) {
+        if ($this["dart_class"] != null && $this['dart_class'].attributeChanged != null) {
+          $this['dart_class'].attributeChanged(attrName, oldVal, newVal);
+        }
+      });
+      elemProto['attachedCallback'] = new js.JsFunction.withThis(($this) {
+        if ($this["dart_class"] != null && $this['dart_class'].attached != null) {
+          $this['dart_class'].attached();
+        }
+      });
+      elemProto['detachedCallback'] = new js.JsFunction.withThis(($this) {
+        if ($this["dart_class"] != null && $this['dart_class'].detached != null) {
+          $this['dart_class'].detached();
+        }
+      });
+      // document.registerElement('x-foo', {prototype: elemProto, extends: extendsTag});
+      var jsMap = new js.JsObject.jsify({'prototype': elemProto, 'extends': extendsTag});
+      js.context['document'].callMethod('registerElement', [tag, jsMap]);
     }
-    var elemProto = js.context['Object'].callMethod("create", [baseElement['prototype']]);
-
-    // TODO(terry): Hack to stop recursion re-creating custom element when the
-    //              created() constructor of the custom element does e.g.,
-    //
-    //                  MyElement.created() : super.created() {
-    //                    this.innerHtml = "<b>I'm an x-foo-with-markup!</b>";
-    //                  }
-    //
-    //              sanitizing causes custom element to created recursively
-    //              until stack overflow.
-    //
-    //              See https://github.com/dart-lang/sdk/issues/23666
-    int creating = 0;
-    elemProto['createdCallback'] = new js.JsFunction.withThis(($this) {
-      if (_getJSClassName(reflectClass(customElementClass).superclass) != null && creating < 2) {
-        creating++;
-
-        var dartClass = _blink.Blink_Utils.constructElement(customElementClass, $this);
-
-        // Need to remember the Dart class that was created for this custom so
-        // return it and setup the blink_jsObject to the $this that we'll be working
-        // with as we talk to blink. 
-        $this['dart_class'] = dartClass;
-
-        creating--;
-      }
-    });
-    elemProto['attributeChangedCallback'] = new js.JsFunction.withThis(($this, attrName, oldVal, newVal) {
-      if ($this["dart_class"] != null && $this['dart_class'].attributeChanged != null) {
-        $this['dart_class'].attributeChanged(attrName, oldVal, newVal);
-      }
-    });
-    elemProto['attachedCallback'] = new js.JsFunction.withThis(($this) {
-      if ($this["dart_class"] != null && $this['dart_class'].attached != null) {
-        $this['dart_class'].attached();
-      }
-    });
-    elemProto['detachedCallback'] = new js.JsFunction.withThis(($this) {
-      if ($this["dart_class"] != null && $this['dart_class'].detached != null) {
-        $this['dart_class'].detached();
-      }
-    });
-    // document.registerElement('x-foo', {prototype: elemProto, extends: extendsTag});
-    var jsMap = new js.JsObject.jsify({'prototype': elemProto, 'extends': extendsTag});
-    js.context['document'].callMethod('registerElement', [tag, jsMap]);
 $endif
   }
 
diff --git a/tools/dom/templates/html/impl/impl_Node.darttemplate b/tools/dom/templates/html/impl/impl_Node.darttemplate
index 38fdab1..23b4afe 100644
--- a/tools/dom/templates/html/impl/impl_Node.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Node.darttemplate
@@ -197,7 +197,18 @@
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
 
   // Custom element created callback.
+$if DART2JS
   Node._created() : super._created();
+$else
+  Node._created() : super._created() {
+    // By this point blink_jsObject should be setup if it's not then we weren't
+    // called by the registerElement createdCallback - probably created() was
+    // called directly which is verboten.
+    if (this.blink_jsObject == null) {
+      throw new DomException.jsInterop("the created constructor cannot be called directly");
+    }
+  }
+$endif
 
   /**
    * A modifiable list of this node's children.
diff --git a/tools/observatory_tool.py b/tools/observatory_tool.py
index 062ad1c..5b1c7c5 100755
--- a/tools/observatory_tool.py
+++ b/tools/observatory_tool.py
@@ -41,37 +41,46 @@
   return result
 
 def ProcessOptions(options, args):
-  # Required options.
-  if options.command is None or options.directory is None:
-    return False
-  # If we have a working pub executable, try and use that.
-  # TODO(whesse): Drop the pub-executable option if it isn't used.
-  if options.pub_executable is not None:
-    try:
-      if 0 == subprocess.call([options.pub_executable, '--version']):
-        return True
-    except OSError as e:
-      pass
-  options.pub_executable = None
+  with open(os.devnull, 'wb') as silent_sink:
+    # Required options.
+    if options.command is None or options.directory is None:
+      return False
 
-  if options.sdk is not None and utils.CheckedInSdkCheckExecutable():
-    # Use the checked in pub executable.
-    options.pub_snapshot = os.path.join(utils.CheckedInSdkPath(),
-                                        'bin',
-                                        'snapshots',
-                                        'pub.dart.snapshot');
-    try:
-      if 0 == subprocess.call([utils.CheckedInSdkExecutable(),
-                               options.pub_snapshot,
-                               '--version']):
-        return True
-    except OSError as e:
-      pass
-  options.pub_snapshot = None
+    # Set a default value for pub_snapshot.
+    options.pub_snapshot = None
 
-  # We need a dart executable and a package root.
-  return (options.package_root is not None and
-          options.dart_executable is not None)
+    # If we have a working pub executable, try and use that.
+    # TODO(whesse): Drop the pub-executable option if it isn't used.
+    if options.pub_executable is not None:
+      try:
+        if 0 == subprocess.call([options.pub_executable, '--version'],
+                                stdout=silent_sink,
+                                stderr=silent_sink):
+          return True
+      except OSError as e:
+        pass
+    options.pub_executable = None
+
+    if options.sdk is not None and utils.CheckedInSdkCheckExecutable():
+      # Use the checked in pub executable.
+      options.pub_snapshot = os.path.join(utils.CheckedInSdkPath(),
+                                          'bin',
+                                          'snapshots',
+                                          'pub.dart.snapshot');
+      try:
+        if 0 == subprocess.call([utils.CheckedInSdkExecutable(),
+                                 options.pub_snapshot,
+                                 '--version'],
+                                 stdout=silent_sink,
+                                 stderr=silent_sink):
+          return True
+      except OSError as e:
+        pass
+    options.pub_snapshot = None
+
+    # We need a dart executable and a package root.
+    return (options.package_root is not None and
+            options.dart_executable is not None)
 
 def ChangeDirectory(directory):
   os.chdir(directory);
diff --git a/utils/apidoc/.gitignore b/utils/apidoc/.gitignore
deleted file mode 100644
index adaa849..0000000
--- a/utils/apidoc/.gitignore
+++ /dev/null
@@ -1,22 +0,0 @@
-/Makefile
-/out
-/runtime
-/xcodebuild
-/*.Makefile
-/*.sln
-/*.target.mk
-/*.vcproj
-/*.vcxproj
-/*.vcxproj.filters
-/*.vcxproj.user
-/*.xcodeproj
-/Debug
-/DebugARM
-/DebugIA32
-/DebugSIMARM
-/DebugX64
-/Release
-/ReleaseARM
-/ReleaseIA32
-/ReleaseSIMARM
-/ReleaseX64
diff --git a/utils/apidoc/README.txt b/utils/apidoc/README.txt
deleted file mode 100644
index f1d7b8a..0000000
--- a/utils/apidoc/README.txt
+++ /dev/null
@@ -1,86 +0,0 @@
-Apidoc is a specialization of Dartdoc.
-Dartdoc generates static HTML documentation from Dart code.
-Apidoc wraps the dartdoc output with official dartlang.org skin, comments, etc.
-
-To use it, from the top level dart directory, run:
-
-    $ dart utils/apidoc/apidoc.dart [--out=<output directory>]
-
-This will create a "docs" directory with the docs for your libraries.
-
-
-How docs are generated
-----------------------
-
-To make beautiful docs from your library, dartdoc parses it and every library it
-imports (recursively). From each library, it parses all classes and members,
-finds the associated doc comments and builds crosslinked docs from them.
-
-"Doc comments" can be in one of a few forms:
-
-    /**
-     * JavaDoc style block comments.
-     */
-
-    /** Which can also be single line. */
-
-    /// Triple-slash line comments.
-    /// Which can be multiple lines.
-
-The body of a doc comment will be parsed as markdown which means you can apply
-most of the formatting and structuring you want while still having docs that
-look nice in plain text. For example:
-
-    /// This is a doc comment. This is the first paragraph in the comment. It
-    /// can span multiple lines.
-    ///
-    /// A blank line starts a new paragraph like this one.
-    ///
-    /// *   Unordered lists start with `*` or `-` or `+`.
-    /// *   And can have multiple items.
-    ///     1. You can nest lists.
-    ///     2. Like this numbered one.
-    ///
-    /// ---
-    ///
-    /// Three dashes, underscores, or tildes on a line by themselves create a
-    /// horizontal rule.
-    ///
-    ///     to.get(a.block + of.code) {
-    ///       indent(it, 4.lines);
-    ///       like(this);
-    ///     }
-    ///
-    /// There are a few inline styles you can apply: *emphasis*, **strong**,
-    /// and `inline code`. You can also use underscores for _emphasis_ and
-    /// __strong__.
-    ///
-    /// An H1 header using equals on the next line
-    /// ==========================================
-    ///
-    /// And an H2 in that style using hyphens
-    /// -------------------------------------
-    ///
-    /// # Or an H1 - H6 using leading hashes
-    /// ## H2
-    /// ### H3
-    /// #### H4 you can also have hashes at then end: ###
-    /// ##### H5
-    /// ###### H6
-
-There is also an extension to markdown specific to dartdoc: A name inside
-square brackets that is not a markdown link (i.e. doesn't have square brackets
-or parentheses following it) like:
-
-    Calls [someMethod], passing in [arg].
-
-is understood to be the name of some member or type that's in the scope of the
-member where that comment appears. Dartdoc will automatically figure out what
-the name refers to and generate an approriate link to that member or type.
-
-
-Attribution
------------
-
-dartdoc uses the delightful Silk icon set by Mark James.
-http://www.famfamfam.com/lab/icons/silk/
diff --git a/utils/apidoc/apidoc.dart b/utils/apidoc/apidoc.dart
deleted file mode 100644
index db74d32..0000000
--- a/utils/apidoc/apidoc.dart
+++ /dev/null
@@ -1,477 +0,0 @@
-// 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 generates the reference documentation for the core libraries that come
- * with dart. It is built on top of dartdoc, which is a general-purpose library
- * for generating docs from any Dart code. This library extends that to include
- * additional information and styling specific to our standard library.
- *
- * Usage:
- *
- *     $ dart apidoc.dart [--out=<output directory>]
- */
-library apidoc;
-
-import 'dart:async';
-import 'dart:convert';
-import 'dart:io';
-
-import 'html_diff.dart';
-
-import 'package:compiler/src/mirrors/source_mirrors.dart';
-import 'package:compiler/src/mirrors/mirrors_util.dart';
-import 'package:compiler/src/filenames.dart';
-import 'package:dartdoc/dartdoc.dart';
-import 'package:sdk_library_metadata/libraries.dart';
-import 'package:path/path.dart' as path;
-
-HtmlDiff _diff;
-
-void main(List<String> args) {
-  int mode = MODE_STATIC;
-  String outputDir = 'docs';
-  bool generateAppCache = false;
-
-  List<String> excludedLibraries = <String>[];
-
-  // For libraries that have names matching the package name,
-  // such as library unittest in package unittest, we just give
-  // the package name with a --include-lib argument, such as:
-  // --include-lib=unittest. These arguments are collected in
-  // includedLibraries.
-  List<String> includedLibraries = <String>[];
-
-  // For libraries that lie within packages but have a different name,
-  // such as the matcher library in package unittest, we can use
-  // --extra-lib with a full relative path under pkg, such as
-  // --extra-lib=unittest/lib/matcher.dart. These arguments are
-  // collected in extraLibraries.
-  List<String> extraLibraries = <String>[];
-
-  String packageRoot;
-  String version;
-
-  // Parse the command-line arguments.
-  for (int i = 0; i < args.length; i++) {
-    final arg = args[i];
-
-    switch (arg) {
-      case '--mode=static':
-        mode = MODE_STATIC;
-        break;
-
-      case '--mode=live-nav':
-        mode = MODE_LIVE_NAV;
-        break;
-
-      case '--generate-app-cache=true':
-        generateAppCache = true;
-        break;
-
-      default:
-        if (arg.startsWith('--exclude-lib=')) {
-          excludedLibraries.add(arg.substring('--exclude-lib='.length));
-        } else if (arg.startsWith('--include-lib=')) {
-          includedLibraries.add(arg.substring('--include-lib='.length));
-        } else if (arg.startsWith('--extra-lib=')) {
-          extraLibraries.add(arg.substring('--extra-lib='.length));
-        } else if (arg.startsWith('--out=')) {
-          outputDir = arg.substring('--out='.length);
-        } else if (arg.startsWith('--package-root=')) {
-          packageRoot = arg.substring('--package-root='.length);
-        } else if (arg.startsWith('--version=')) {
-          version = arg.substring('--version='.length);
-        } else {
-          print('Unknown option: $arg');
-          return;
-        }
-        break;
-    }
-  }
-
-  final libPath = path.join(scriptDir, '..', '..', 'sdk/');
-
-  cleanOutputDirectory(outputDir);
-
-  print('Copying static files...');
-  // The basic dartdoc-provided static content.
-  final copiedStatic = copyDirectory(
-      path.join(scriptDir,
-          '..', '..', 'sdk', 'lib', '_internal', 'dartdoc', 'static'),
-      outputDir);
-
-  // The apidoc-specific static content.
-  final copiedApiDocStatic = copyDirectory(
-      path.join(scriptDir, 'static'),
-      outputDir);
-
-  print('Parsing MDN data...');
-  final mdnFile = new File(path.join(scriptDir, 'mdn', 'database.json'));
-  final mdn = JSON.decode(mdnFile.readAsStringSync());
-
-  print('Cross-referencing dart:html...');
-  // TODO(amouravski): move HtmlDiff inside of the future chain below to re-use
-  // the MirrorSystem already analyzed.
-  _diff = new HtmlDiff(printWarnings:false);
-  Future htmlDiff = _diff.run(currentDirectory.resolveUri(path.toUri(libPath)));
-
-  // TODO(johnniwinther): Libraries for the compilation seem to be more like
-  // URIs. Perhaps Path should have a toURI() method.
-  // Add all of the core libraries.
-  final apidocLibraries = <Uri>[];
-  LIBRARIES.forEach((String name, LibraryInfo info) {
-    if (info.documented) {
-      apidocLibraries.add(Uri.parse('dart:$name'));
-    }
-  });
-
-  // TODO(amouravski): This code is really wonky.
-  var lister = new Directory(path.join(scriptDir, '..', '..', 'pkg')).list();
-  lister.listen((entity) {
-    if (entity is Directory) {
-      var libName = path.basename(entity.path);
-      var libPath = path.join(entity.path, 'lib', '${libName}.dart');
-
-      // Ignore some libraries.
-      if (excludedLibraries.contains(libName)) {
-        return;
-      }
-
-      // Ignore hidden directories (like .svn) as well as pkg.xcodeproj.
-      if (libName.startsWith('.') || libName.endsWith('.xcodeproj')) {
-        return;
-      }
-
-      if (new File(libPath).existsSync()) {
-        apidocLibraries.add(path.toUri(libPath));
-        includedLibraries.add(libName);
-      } else {
-        print('Warning: could not find package at ${entity.path}');
-      }
-    }
-  }, onDone: () {
-    // Add any --extra libraries that had full pkg paths.
-    // TODO(gram): if the handling of --include-lib libraries in the
-    // listen() block above is cleaned up, then this will need to be
-    // too, as it is a special case of the above.
-    for (var lib in extraLibraries) {
-      var libPath = '../../$lib';
-      if (new File(libPath).existsSync()) {
-        apidocLibraries.add(path.toUri(libPath));
-        var libName = path.basename(libPath).replaceAll('.dart', '');
-        includedLibraries.add(libName);
-      }
-    }
-
-    final apidoc = new Apidoc(mdn, outputDir, mode, generateAppCache,
-                              excludedLibraries, version);
-    apidoc.dartdocPath =
-        path.join(scriptDir, '..', '..', 'sdk', 'lib', '_internal', 'dartdoc');
-    // Select the libraries to include in the produced documentation:
-    apidoc.includeApi = true;
-    apidoc.includedLibraries = includedLibraries;
-
-    // TODO(amouravski): make apidoc use roughly the same flow as bin/dartdoc.
-    Future.wait([copiedStatic, copiedApiDocStatic, htmlDiff])
-      .then((_) => apidoc.documentLibraries(apidocLibraries, libPath,
-            packageRoot))
-      .then((_) => compileScript(mode, outputDir, libPath, apidoc.tmpPath))
-      .then((_) => print(apidoc.status))
-      .catchError((e, trace) {
-        print('Error: generation failed: ${e}');
-        if (trace != null) print("StackTrace: $trace");
-        apidoc.cleanup();
-        exit(1);
-      })
-      .whenComplete(() => apidoc.cleanup());
-  });
-}
-
-class Apidoc extends Dartdoc {
-  /** Big ball of JSON containing the scraped MDN documentation. */
-  final Map mdn;
-
-
-  // A set of type names (TypeMirror.simpleName values) to ignore while
-  // looking up information from MDN data.  TODO(eub, jacobr): fix up the MDN
-  // import scripts so they run correctly and generate data that doesn't have
-  // any entries that need to be ignored.
-  static Set<String> _mdnTypeNamesToSkip = null;
-
-  /**
-   * The URL to the page on MDN that content was pulled from for the current
-   * type being documented. Will be `null` if the type doesn't use any MDN
-   * content.
-   */
-  String mdnUrl = null;
-
-  Apidoc(this.mdn, String outputDir, int mode, bool generateAppCache,
-      [List<String> excludedLibraries, String version]) {
-    if (excludedLibraries != null) this.excludedLibraries = excludedLibraries;
-    this.version = version;
-    this.outputDir = outputDir;
-    this.mode = mode;
-    this.generateAppCache = generateAppCache;
-
-    // Skip bad entries in the checked-in mdn/database.json:
-    //  * UnknownElement has a top-level Gecko DOM page in German.
-    if (_mdnTypeNamesToSkip == null)
-      _mdnTypeNamesToSkip = new Set.from(['UnknownElement']);
-
-    mainTitle = 'Dart API Reference';
-    mainUrl = 'http://dartlang.org';
-
-    final note    = 'http://code.google.com/policies.html#restrictions';
-    final cca     = 'http://creativecommons.org/licenses/by/3.0/';
-    final bsd     = 'http://code.google.com/google_bsd_license.html';
-    final tos     = 'http://www.dartlang.org/tos.html';
-    final privacy = 'http://www.google.com/intl/en/privacy/privacy-policy.html';
-
-    footerText =
-        '''
-        <p>Except as otherwise <a href="$note">noted</a>, the content of this
-        page is licensed under the <a href="$cca">Creative Commons Attribution
-        3.0 License</a>, and code samples are licensed under the
-        <a href="$bsd">BSD License</a>.</p>
-        <p><a href="$tos">Terms of Service</a> |
-        <a href="$privacy">Privacy Policy</a></p>
-        ''';
-
-    searchEngineId = '011220921317074318178:i4mscbaxtru';
-    searchResultsUrl = 'http://www.dartlang.org/search.html';
-  }
-
-  void writeHeadContents(String title) {
-    super.writeHeadContents(title);
-
-    // Include the apidoc-specific CSS.
-    // TODO(rnystrom): Use our CSS pre-processor to combine these.
-    writeln(
-        '''
-        <link rel="stylesheet" type="text/css"
-            href="${relativePath('apidoc-styles.css')}" />
-        ''');
-
-    // Add the analytics code.
-    writeln(
-        '''
-        <script type="text/javascript">
-          var _gaq = _gaq || [];
-          _gaq.push(["_setAccount", "UA-26406144-9"]);
-          _gaq.push(["_trackPageview"]);
-
-          (function() {
-            var ga = document.createElement("script");
-            ga.type = "text/javascript"; ga.async = true;
-            ga.src = ("https:" == document.location.protocol ?
-              "https://ssl" : "http://www") + ".google-analytics.com/ga.js";
-            var s = document.getElementsByTagName("script")[0];
-            s.parentNode.insertBefore(ga, s);
-          })();
-        </script>
-        ''');
-  }
-
-  void docIndexLibrary(LibraryMirror library) {
-    // TODO(rnystrom): Hackish. The IO libraries reference this but we don't
-    // want it in the docs.
-    if (displayName(library) == 'dart:nativewrappers') return;
-    super.docIndexLibrary(library);
-  }
-
-  void docLibraryNavigationJson(LibraryMirror library, List libraryList) {
-    // TODO(rnystrom): Hackish. The IO libraries reference this but we don't
-    // want it in the docs.
-    if (displayName(library) == 'dart:nativewrappers') return;
-    super.docLibraryNavigationJson(library, libraryList);
-  }
-
-  void docLibrary(LibraryMirror library) {
-    // TODO(rnystrom): Hackish. The IO libraries reference this but we don't
-    // want it in the docs.
-    if (displayName(library) == 'dart:nativewrappers') return;
-    super.docLibrary(library);
-  }
-
-  DocComment getLibraryComment(LibraryMirror library) {
-    return super.getLibraryComment(library);
-  }
-
-  DocComment getTypeComment(TypeMirror type) {
-    return _mergeDocs(
-        includeMdnTypeComment(type), super.getTypeComment(type));
-  }
-
-  DocComment getMemberComment(DeclarationMirror member) {
-    return _mergeDocs(
-        includeMdnMemberComment(member), super.getMemberComment(member));
-  }
-
-  DocComment _mergeDocs(MdnComment mdnComment,
-                            DocComment fileComment) {
-    // Otherwise, prefer comment from the (possibly generated) Dart file.
-    if (fileComment != null) return fileComment;
-
-    // Finally, fallback on MDN if available.
-    if (mdnComment != null) {
-      mdnUrl = mdnComment.mdnUrl;
-      return mdnComment;
-    }
-
-    // We got nothing!
-    return null;
-  }
-
-  void docType(TypeMirror type) {
-    // Track whether we've inserted MDN content into this page.
-    mdnUrl = null;
-
-    super.docType(type);
-  }
-
-  void writeTypeFooter() {
-    if (mdnUrl != null) {
-      final MOZ = 'http://www.mozilla.org/';
-      final MDN = 'https://developer.mozilla.org';
-      final CCA = 'http://creativecommons.org/licenses/by-sa/2.5/';
-      final CONTRIB = 'https://developer.mozilla.org/Project:en/How_to_Help';
-      writeln(
-          '''
-          <p class="mdn-attribution">
-          <a href="$MDN">
-            <img src="${relativePath('mdn-logo-tiny.png')}" class="mdn-logo" />
-          </a>
-          This page includes <a href="$mdnUrl">content</a> from the
-          <a href="$MOZ">Mozilla Foundation</a> that is graciously
-          <a href="$MDN/Project:Copyrights">licensed</a> under a
-          <a href="$CCA">Creative Commons: Attribution-Sharealike license</a>.
-          Mozilla has no other association with Dart or dartlang.org. We
-          encourage you to improve the web by
-          <a href="$CONTRIB">contributing</a> to
-          <a href="$MDN">The Mozilla Developer Network</a>.
-          </p>
-          ''');
-    }
-  }
-
-  MdnComment lookupMdnComment(Mirror mirror) {
-    if (mirror is TypeMirror) {
-      return includeMdnTypeComment(mirror);
-    } else if (mirror is MethodMirror || mirror is VariableMirror) {
-      return includeMdnMemberComment(mirror);
-    } else {
-      return null;
-    }
-  }
-
-  /**
-   * Gets the MDN-scraped docs for [type], or `null` if this type isn't
-   * scraped from MDN.
-   */
-  MdnComment includeMdnTypeComment(TypeMirror type) {
-    if (_mdnTypeNamesToSkip.contains(type.simpleName)) {
-      return null;
-    }
-
-    var typeString = '';
-    if (HTML_LIBRARY_URIS.contains(getLibrary(type).uri)) {
-      // If it's an HTML type, try to map it to a base DOM type so we can find
-      // the MDN docs.
-      final domTypes = _diff.htmlTypesToDom[type.qualifiedName];
-
-      // Couldn't find a DOM type.
-      if ((domTypes == null) || (domTypes.length != 1)) return null;
-
-      // Use the corresponding DOM type when searching MDN.
-      // TODO(rnystrom): Shame there isn't a simpler way to get the one item
-      // out of a singleton Set.
-      // TODO(floitsch): switch to domTypes.first, once that's implemented.
-      var iter = domTypes.iterator;
-      iter.moveNext();
-      typeString = iter.current;
-    } else {
-      // Not a DOM type.
-      return null;
-    }
-
-    final mdnType = mdn[typeString];
-    if (mdnType == null) return null;
-    if (mdnType['skipped'] != null) return null;
-    if (mdnType['summary'] == null) return null;
-    if (mdnType['summary'].trim().isEmpty) return null;
-
-    // Remember which MDN page we're using so we can attribute it.
-    return new MdnComment(mdnType['summary'], mdnType['srcUrl']);
-  }
-
-  /**
-   * Gets the MDN-scraped docs for [member], or `null` if this type isn't
-   * scraped from MDN.
-   */
-  MdnComment includeMdnMemberComment(DeclarationMirror member) {
-    var library = getLibrary(member);
-    var memberString = '';
-    if (HTML_LIBRARY_URIS.contains(library.uri)) {
-      // If it's an HTML type, try to map it to a DOM type name so we can find
-      // the MDN docs.
-      final domMembers = _diff.htmlToDom[member.qualifiedName];
-
-      // Couldn't find a DOM type.
-      if ((domMembers == null) || (domMembers.length != 1)) return null;
-
-      // Use the corresponding DOM member when searching MDN.
-      // TODO(rnystrom): Shame there isn't a simpler way to get the one item
-      // out of a singleton Set.
-      // TODO(floitsch): switch to domTypes.first, once that's implemented.
-      var iter = domMembers.iterator;
-      iter.moveNext();
-      memberString = iter.current;
-    } else {
-      // Not a DOM type.
-      return null;
-    }
-
-    // Ignore top-level functions.
-    if (member.isTopLevel) return null;
-
-    var mdnMember = null;
-    var mdnType =  null;
-    var pieces = memberString.split('.');
-    if (pieces.length == 2) {
-      mdnType = mdn[pieces[0]];
-      if (mdnType == null) return null;
-      var nameToFind = pieces[1];
-      for (final candidateMember in mdnType['members']) {
-        if (candidateMember['name'] == nameToFind) {
-          mdnMember = candidateMember;
-          break;
-        }
-      }
-    }
-
-    if (mdnMember == null) return null;
-    if (mdnMember['help'] == null) return null;
-    if (mdnMember['help'].trim().isEmpty) return null;
-
-    // Remember which MDN page we're using so we can attribute it.
-    return new MdnComment(mdnMember['help'], mdnType['srcUrl']);
-  }
-
-  /**
-   * Returns a link to [member], relative to a type page that may be in a
-   * different library than [member].
-   */
-  String _linkMember(DeclarationMirror member) {
-    final typeName = member.owner.simpleName;
-    var memberName = '$typeName.${member.simpleName}';
-    if (member is MethodMirror && member.isConstructor) {
-      final separator = member.constructorName == '' ? '' : '.';
-      memberName = 'new $typeName$separator${member.constructorName}';
-    }
-
-    return a(memberUrl(member), memberName);
-  }
-}
-
diff --git a/utils/apidoc/docgen.gyp b/utils/apidoc/docgen.gyp
deleted file mode 100644
index 126e549..0000000
--- a/utils/apidoc/docgen.gyp
+++ /dev/null
@@ -1,102 +0,0 @@
-# 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.
-
-{
-  'variables' : {
-    'script_suffix%': '',
-  },
-  'conditions' : [
-    ['OS=="win"', {
-      'variables' : {
-        'script_suffix': '.bat',
-      },
-    }],
-  ],
-  'targets': [
-    {
-      'target_name': 'dartdocgen',
-      'type': 'none',
-      'dependencies': [
-        '../../create_sdk.gyp:create_sdk_internal',
-        '../../pkg/pkg.gyp:pkg_packages',
-        '../../pkg/pkg_files.gyp:pkg_files_stamp',
-      ],
-      'includes': [
-        '../../sdk/lib/core/core_sources.gypi',
-      ],
-      'actions': [
-        {
-          'action_name': 'run_docgen',
-          # The 'inputs' list records the files whose timestamps are
-          # compared to the files listed in 'outputs'.  If a file
-          # 'outputs' doesn't exist or if a file in 'inputs' is newer
-          # than a file in 'outputs', this action is executed.  Notice
-          # that the dependencies listed above has nothing to do with
-          # when this action is executed.  You must list a file in
-          # 'inputs' to make sure that it exists before the action is
-          # executed, or to make sure this action is re-run.
-          #
-          # We want to build the platform documentation whenever
-          # dartdoc, apidoc, or its dependency changes.  This prevents
-          # people from accidentally breaking apidoc when making
-          # changes to the platform libraries and or when modifying
-          # dart2js or the VM.
-          #
-          # In addition, we want to make sure that the platform
-          # documentation is regenerated when the platform sources
-          # changes.
-          #
-          # So we want this action to be re-run when a dart file
-          # changes in this directory, or in the SDK library (we may
-          # no longer need to list the files in ../../runtime/lib and
-          # ../../runtime/bin, as most of them has moved to
-          # ../../sdk/lib).
-          #
-          'inputs': [
-            '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)dart<(EXECUTABLE_SUFFIX)',
-            '<(SHARED_INTERMEDIATE_DIR)/utils_wrapper.dart.snapshot',
-            '<!@(["python", "../../tools/list_files.py", "\\.(css|ico|js|json|png|sh|txt|yaml|py)$", ".", "../../sdk/lib/_internal/dartdoc"])',
-	    # We implicitly depend on the sdk/lib and vm runtime files by depending on the dart binary above.
-            '<!@(["python", "../../tools/list_files.py", "\\.dart$", "."])',
-            '../../sdk/bin/dart',
-            '../../sdk/bin/dart.bat',
-            '../../sdk/bin/dart2js',
-            '../../sdk/bin/dart2js.bat',
-            # TODO(alanknight): The docgen name is deprecated in favour of
-            # dartdocgen, and should be removed eventually.
-            '../../sdk/bin/docgen',
-            '../../sdk/bin/dartdocgen',
-            '../../sdk/bin/docgen.bat',
-            '../../sdk/bin/dartdocgen.bat',
-            '../../tools/only_in_release_mode.py',
-            '<(PRODUCT_DIR)/dart-sdk/README',
-            '<(SHARED_INTERMEDIATE_DIR)/pkg_files.stamp',
-          ],
-          'outputs': [
-            '<(PRODUCT_DIR)/api_docs/docgen/index.json',
-          ],
-          'action': [
-            'python',
-            '../../tools/only_in_release_mode.py',
-            '<@(_outputs)',
-            '--',
-            '<(PRODUCT_DIR)/dart-sdk/bin/dartdocgen<(script_suffix)',
-            '--out=<(PRODUCT_DIR)/api_docs/docgen',
-            '--include-sdk',
-            '--no-include-dependent-packages',
-            '--package-root=<(PRODUCT_DIR)/packages',
-            '--exclude-lib=async_helper',
-            '--exclude-lib=compiler',
-            '--exclude-lib=dart2js_incremental',
-            '--exclude-lib=docgen',
-            '--exclude-lib=expect',
-            '--exclude-lib=try',
-            '../../pkg'
-          ],
-          'message': 'Running dartdocgen: <(_action)',
-        },
-      ],
-    }
-  ],
-}
diff --git a/utils/apidoc/html_diff.dart b/utils/apidoc/html_diff.dart
deleted file mode 100644
index 06adfca..0000000
--- a/utils/apidoc/html_diff.dart
+++ /dev/null
@@ -1,231 +0,0 @@
-// 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.
-
-/**
- * A script to assist in documenting the difference between the dart:html API
- * and the old DOM API.
- */
-library html_diff;
-
-import 'dart:async';
-
-import 'lib/metadata.dart';
-
-// TODO(rnystrom): Use "package:" URL (#4968).
-import '../../pkg/compiler/lib/src/mirrors/analyze.dart';
-import '../../pkg/compiler/lib/src/mirrors/source_mirrors.dart';
-import '../../pkg/compiler/lib/src/mirrors/mirrors_util.dart';
-import '../../pkg/compiler/lib/src/source_file_provider.dart';
-
-// TODO(amouravski): There is currently magic that looks at dart:* libraries
-// rather than the declared library names. This changed due to recent syntax
-// changes. We should only need to look at the library 'html'.
-final List<Uri> HTML_LIBRARY_URIS = [
-    new Uri(scheme: 'dart', path: 'html'),
-    new Uri(scheme: 'dart', path: 'indexed_db'),
-    new Uri(scheme: 'dart', path: 'svg'),
-    new Uri(scheme: 'dart', path: 'web_audio')];
-
-/**
- * A class for computing a many-to-many mapping between the types and
- * members in `dart:html` and the MDN DOM types. This mapping is
- * based on two indicators:
- *
- *   1. Auto-detected wrappers. Most `dart:html` types correspond
- *      straightforwardly to a single `@DomName` type, and
- *      have the same name.  In addition, most `dart:html` methods
- *      just call a single `@DomName` method. This class
- *      detects these simple correspondences automatically.
- *
- *   2. Manual annotations. When it's not clear which
- *      `@DomName` items a given `dart:html` item
- *      corresponds to, the `dart:html` item can be annotated in the
- *      documentation comments using the `@DomName` annotation.
- *
- * The `@DomName` annotations for types and members are of the form
- * `@DomName NAME(, NAME)*`, where the `NAME`s refer to the
- * `@DomName` types/members that correspond to the
- * annotated `dart:html` type/member. `NAME`s on member annotations
- * can refer to either fully-qualified member names (e.g.
- * `Document.createElement`) or unqualified member names
- * (e.g. `createElement`).  Unqualified member names are assumed to
- * refer to members of one of the corresponding `@DomName`
- * types.
- */
-class HtmlDiff {
-  /**
-   * A map from `dart:html` members to the corresponding fully qualified
-   * `@DomName` member(s).
-   */
-  final Map<String, Set<String>> htmlToDom;
-
-  /** A map from `dart:html` types to corresponding `@DomName` types. */
-  final Map<String, Set<String>> htmlTypesToDom;
-
-  /** If true, then print warning messages. */
-  final bool _printWarnings;
-
-  static LibraryMirror dom;
-
-  HtmlDiff({bool printWarnings: false}) :
-    _printWarnings = printWarnings,
-    htmlToDom = new Map<String, Set<String>>(),
-    htmlTypesToDom = new Map<String, Set<String>>();
-
-  void warn(String s) {
-    if (_printWarnings) {
-      print('Warning: $s');
-    }
-  }
-
-  /**
-   * Computes the `@DomName` to `dart:html` mapping, and
-   * places it in [htmlToDom] and [htmlTypesToDom]. Before this is run, dart2js
-   * should be initialized (via [parseOptions] and [initializeWorld]) and
-   * [HtmlDiff.initialize] should be called.
-   */
-  Future run(Uri libraryRoot) {
-    var result = new Completer();
-    var provider = new CompilerSourceFileProvider();
-    var handler = new FormattingDiagnosticHandler(provider);
-    Future<MirrorSystem> analysis = analyze(
-        HTML_LIBRARY_URIS, libraryRoot, null,
-        provider.readStringFromUri,
-        handler.diagnosticHandler);
-    analysis.then((MirrorSystem mirrors) {
-      for (var libraryUri in HTML_LIBRARY_URIS) {
-        var library = mirrors.libraries[libraryUri];
-        if (library == null) {
-          warn('Could not find $libraryUri');
-          result.complete(false);
-        }
-        for (ClassMirror type in classesOf(library.declarations)) {
-          final domTypes = htmlToDomTypes(type);
-          if (domTypes.isEmpty) continue;
-
-          htmlTypesToDom.putIfAbsent(qualifiedNameOf(type),
-              () => new Set()).addAll(domTypes);
-
-          membersOf(type.declarations).forEach(
-              (m) => _addMemberDiff(m, domTypes, nameOf(library)));
-        }
-      }
-      result.complete(true);
-    });
-    return result.future;
-  }
-
-  /**
-   * Records the `@DomName` to `dart:html` mapping for
-   * [htmlMember] (from `dart:html`). [domTypes] are the
-   * `@DomName` type values that correspond to [htmlMember]'s
-   * defining type.
-   */
-  void _addMemberDiff(DeclarationMirror htmlMember, List<String> domTypes,
-      String libraryName) {
-    var domMembers = htmlToDomMembers(htmlMember, domTypes);
-    if (htmlMember == null && !domMembers.isEmpty) {
-      warn('$libraryName member '
-           '${htmlMember.owner.simpleName}.'
-           '${htmlMember.simpleName} has no corresponding '
-           '$libraryName member.');
-    }
-
-    if (htmlMember == null) return;
-    if (!domMembers.isEmpty) {
-      htmlToDom[qualifiedNameOf(htmlMember)] = domMembers;
-    }
-  }
-
-  /**
-   * Returns the `@DomName` type values that correspond to
-   * [htmlType] from `dart:html`. This can be the empty list if no
-   * correspondence is found.
-   */
-  List<String> htmlToDomTypes(ClassMirror htmlType) {
-    if (htmlType.simpleName == null) return <String>[];
-
-    final domNameMetadata = findMetadata(htmlType.metadata, 'DomName');
-    if (domNameMetadata != null) {
-      var domNames = <String>[];
-      var names = domNameMetadata.getField(symbolOf('name'));
-      for (var s in names.reflectee.split(',')) {
-        domNames.add(s.trim());
-      }
-
-      if (domNames.length == 1 && domNames[0] == 'none') return <String>[];
-      return domNames;
-    }
-    return <String>[];
-  }
-
-  /**
-   * Returns the `@DomName` member values that correspond to
-   * [htmlMember] from `dart:html`. This can be the empty set if no
-   * correspondence is found.  [domTypes] are the
-   * `@DomName` type values that correspond to [htmlMember]'s
-   * defining type.
-   */
-  Set<String> htmlToDomMembers(DeclarationMirror htmlMember,
-                               List<String> domTypes) {
-    if (htmlMember.isPrivate) return new Set();
-
-    final domNameMetadata = findMetadata(htmlMember.metadata, 'DomName');
-    if (domNameMetadata != null) {
-      var domNames = <String>[];
-      var names = domNameMetadata.getField(symbolOf('name'));
-      for (var s in names.reflectee.split(',')) {
-        domNames.add(s.trim());
-      }
-
-      if (domNames.length == 1 && domNames[0] == 'none') return new Set();
-      final members = new Set();
-      domNames.forEach((name) {
-        var nameMembers = _membersFromName(name, domTypes);
-        if (nameMembers.isEmpty) {
-          if (name.contains('.')) {
-            warn('no member $name');
-          } else {
-            final options = <String>[];
-            for (var t in domTypes) {
-              options.add('$t.$name');
-            }
-            options.join(' or ');
-            warn('no member $options');
-          }
-        }
-        members.addAll(nameMembers);
-      });
-      return members;
-    }
-
-    return new Set();
-  }
-
-  /**
-   * Returns the `@DomName` strings that are indicated by
-   * [name]. [name] can be either an unqualified member name
-   * (e.g. `createElement`), in which case it's treated as the name of
-   * a member of one of [defaultTypes], or a fully-qualified member
-   * name (e.g. `Document.createElement`), in which case it's treated as a
-   * member of the @DomName element (`Document` in this case).
-   */
-  Set<String> _membersFromName(String name, List<String> defaultTypes) {
-    if (!name.contains('.', 0)) {
-      if (defaultTypes.isEmpty) {
-        warn('no default type for $name');
-        return new Set();
-      }
-      final members = new Set<String>();
-      defaultTypes.forEach((t) { members.add('$t.$name'); });
-      return members;
-    }
-
-    if (name.split('.').length != 2) {
-      warn('invalid member name ${name}');
-      return new Set();
-    }
-    return new Set.from([name]);
-  }
-}
diff --git a/utils/apidoc/lib/metadata.dart b/utils/apidoc/lib/metadata.dart
deleted file mode 100644
index c56b0b6..0000000
--- a/utils/apidoc/lib/metadata.dart
+++ /dev/null
@@ -1,15 +0,0 @@
-library metadata;
-
-import '../../../pkg/compiler/lib/src/mirrors/source_mirrors.dart';
-import '../../../pkg/compiler/lib/src/mirrors/mirrors_util.dart';
-
-/// Returns the metadata for the given string or null if not found.
-InstanceMirror findMetadata(List<InstanceMirror> metadataList, String find) {
-  return metadataList.firstWhere(
-      (metadata) {
-        if (metadata is TypeInstanceMirror) {
-          return nameOf(metadata.representedType) == find;
-        }
-        return nameOf(metadata.type) == find;
-      }, orElse: () => null);
-}
diff --git a/utils/apidoc/mdn/README.txt b/utils/apidoc/mdn/README.txt
deleted file mode 100644
index 1666752..0000000
--- a/utils/apidoc/mdn/README.txt
+++ /dev/null
@@ -1,76 +0,0 @@
-***** Current status
-
-Currently it runs all the way through, but the database.json has all
-members[] lists empty.  Most entries are skipped for "Suspect title";
-some have ".pageText not found".
-
-Currently only works on Linux; OS X (or other) will need minor path changes.
-
-You will need a reasonably modern node.js installed.
-0.5.9 is too old; 0.8.8 is not too old.
-
-I needed to add my own "DumpRenderTree_resources/missingImage.gif",
-for some reason.
-
-For the reasons above, we're currently just using the checked-in
-database.json from Feb 2012, but it has some bogus entries.  In
-particular, the one for UnknownElement would inject irrelevant German
-text into our docs.  So a hack in apidoc.dart (_mdnTypeNamesToSkip)
-works around this.
-
-***** Overview
-
-Here's a rough walkthrough of how this works. The ultimate output file is
-database.filtered.json.
-
-full_run.sh executes all of the scripts in the correct order.
-
-search.js
-- read data/domTypes.json
-- for each dom type:
-  - search for page on www.googleapis.com
-  - write search results to output/search/<type>.json
-    . this is a list of search results and urls to pages
-
-crawl.js
-- read data/domTypes.json
-- for each dom type:
-  - for each output/search/<type>.json:
-    - for each result in the file:
-      - try to scrape that cached MDN page from webcache.googleusercontent.com
-      - write mdn page to output/crawl/<type><index of result>.html
-- write output/crawl/cache.json
-  . it maps types -> search result page urls and titles
-
-extract.sh
-- compile extract.dart to js
-- run extractRunner.js
-  - read data/domTypes.json
-  - read output/crawl/cache.json
-  - read data/dartIdl.json
-  - for each scraped search result page:
-    - create a cleaned up html page in output/extract/<type><index>.html that
-      contains the scraped content + a script tag that includes extract.dart.js.
-    - create an args file in output/extract/<type><index>.html.json with some
-      data on how that file should be processed
-    - invoke dump render tree on that file
-    - when that returns, parse the console output and add it to database.json
-    - add any errors to output/errors.json
-  - save output/database.json
-
-extract.dart
-- xhr output/extract/<type><index>.html.json
-- all sorts of shenanigans to actually pull the content out of the html
-- build a JSON object with the results
-- do a postmessage with that object so extractRunner.js can pull it out
-
-- run postProcess.dart
-  - go through the results for each type looking for the best match
-  - write output/database.html
-  - write output/examples.html
-  - write output/obsolete.html
-  - write output/database.filtered.json which is the best matches
-
-***** Process for updating database.json using these scripts.
-
-TODO(eub) when I get the scripts to work all the way through.
diff --git a/utils/apidoc/mdn/crawl.js b/utils/apidoc/mdn/crawl.js
deleted file mode 100644
index 4a45fd4..0000000
--- a/utils/apidoc/mdn/crawl.js
+++ /dev/null
@@ -1,120 +0,0 @@
-// TODO(jacobr): convert this file to Dart once Dart supports all of the
-// nodejs functionality used here.  For example, search for all occurences of
-// "http." and "fs."
-var http = require('http');
-var fs = require('fs');
-
-try {
-  fs.mkdirSync('output/crawl');
-} catch (e) {
-  // It doesn't matter if the directories already exist.
-}
-
-var domTypes = JSON.parse(fs.readFileSync('data/domTypes.json', 'utf8'));
-
-var cacheData = {};
-
-function scrape(filename, link) {
-  console.log(link);
-  var httpsPrefix = "https://";
-  var prefix = 'https://developer.mozilla.org/';
-  var notFoundPrefix = 'https://developer.mozilla.org/Article_not_found?uri=';
-  if (link.indexOf(prefix) != 0 ) {
-    throw "Unexpected url: " + link;
-  }
-  var scrapePath = "/search?q=cache:" + link;
-  // We crawl content from googleusercontent.com so we don't have to worry about
-  // crawler politeness like we would have to if scraping developer.mozilla.org
-  // directly.
-  var options = {
-    host: 'webcache.googleusercontent.com',
-    path: scrapePath,
-    port: 80,
-    method: 'GET'
-  };
-
-  var req = http.request(options, function(res) {
-    res.setEncoding('utf8');
-    var data='';
-
-    res.on('data', function(d) {
-      data += d;
-    });
-    var onClose = function(e) {
-      console.log("Writing crawl result for " + link);
-      fs.writeFileSync("output/crawl/" + filename + ".html", data, 'utf8');
-    }
-    res.on('close', onClose);
-    res.on('end', onClose);
-  });
-  req.end();
-
-  req.on('error', function(e) {
-    throw "Error " + e + " scraping " + link;
-  });
-}
-
-for (var i = 0; i < domTypes.length; i++) {
-  var type = domTypes[i];
-
-  // Json containing the search results for the current type.
-  var data = fs.readFileSync("output/search/" + type + ".json");
-  json = JSON.parse(data);
-  if (!('items' in json)) {
-    console.warn("No search results for " + type);
-    continue;
-  }
-  var items = json['items'];
-
-  var entry = [];
-  cacheData[type] = entry;
-
-  // Hardcode the correct matching url for a few types where the search engine
-  // gets the wrong answer.
-  var link = null;
-  if (type == 'Screen') {
-    link = 'https://developer.mozilla.org/en/DOM/window.screen';
-  } else if (type == 'Text') {
-    link = 'https://developer.mozilla.org/en/DOM/Text';
-  } else if (type == 'Touch') {
-    link = 'https://developer.mozilla.org/en/DOM/Touch';
-  } else if (type == 'TouchEvent' || type == 'webkitTouchEvent' || type == 'WebkitTouchEvent' || type == 'WebKitTouchEvent') {
-    link = 'https://developer.mozilla.org/en/DOM/TouchEvent';
-  } else if (type == 'HTMLSpanElement') {
-    link = 'https://developer.mozilla.org/en/HTML/Element/span';
-  } else if (type == 'HTMLPreElement') {
-    link = 'https://developer.mozilla.org/en/HTML/Element/pre';
-  } else if (type == 'HTMLFrameElement') {
-    link = 'https://developer.mozilla.org/en/HTML/Element/frame';
-  } else if (type == 'HTMLFrameSetElement') {
-    link = 'https://developer.mozilla.org/en/HTML/Element/frameset';
-  } else if (type == 'Geolocation') {
-    link = 'https://developer.mozilla.org/en/nsIDOMGeolocation;'
-  } else if (type == 'Notification') {
-    link = 'https://developer.mozilla.org/en/DOM/notification';
-  } else if (type == 'IDBDatabase') {
-    link = 'https://developer.mozilla.org/en/IndexedDB/IDBDatabase'
-  }
-  if (link != null) {
-    entry.push({index: 0, link: link, title: type});
-    scrape(type + 0, link);
-    continue;
-  }
-
-  for (j = 0; j < items.length; j++) {
-    var item = items[j];
-    var prefix = 'https://developer.mozilla.org/';
-    var notFoundPrefix = 'https://developer.mozilla.org/Article_not_found?uri=';
-    // Be optimistic and replace article not found links with links to where the
-    // article should be.
-    link = item['link'];
-    if (link.indexOf(notFoundPrefix) == 0) {
-      link = prefix + link.substr(notFoundPrefix.length);
-    }
-
-    entry.push({index: j, link: link, title: item['title']});
-    scrape(type + j, link);
-  }
-}
-
-fs.writeFileSync('output/crawl/cache.json', JSON.stringify(cacheData, null, ' '), 'utf8');
diff --git a/utils/apidoc/mdn/data/dartIdl.json b/utils/apidoc/mdn/data/dartIdl.json
deleted file mode 100644
index fdb9b9e..0000000
--- a/utils/apidoc/mdn/data/dartIdl.json
+++ /dev/null
@@ -1 +0,0 @@
-{"KeyboardEvent": {"constructors": {}, "properties": {"keyIdentifier": true, "metaKey": true, "shiftKey": true, "altKey": true, "keyLocation": true, "ctrlKey": true, "altGraphKey": true}, "constants": {}, "methods": {"initKeyboardEvent": true}}, "SVGZoomEvent": {"constructors": {}, "properties": {"newTranslate": true, "newScale": true, "previousTranslate": true, "previousScale": true, "zoomRectScreen": true}, "constants": {}, "methods": {}}, "CDATASection": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "TextTrackCueList": {"constructors": {}, "properties": {"length": true}, "constants": {}, "methods": {"item": true, "getCueById": true}}, "HTMLFrameSetElement": {"constructors": {}, "properties": {"onload": true, "onblur": true, "onhashchange": true, "onoffline": true, "onerror": true, "ononline": true, "cols": true, "onresize": true, "onbeforeunload": true, "rows": true, "onpopstate": true, "onmessage": true, "onfocus": true, "onorientationchange": true, "onunload": true, "onstorage": true}, "constants": {}, "methods": {}}, "SVGFEDropShadowElement": {"constructors": {}, "properties": {"stdDeviationX": true, "stdDeviationY": true, "in1": true, "dx": true, "dy": true}, "constants": {}, "methods": {"setStdDeviation": true}}, "DelayNode": {"constructors": {}, "properties": {"delayTime": true}, "constants": {}, "methods": {}}, "Metadata": {"constructors": {}, "properties": {"modificationTime": true}, "constants": {}, "methods": {}}, "SVGFEMorphologyElement": {"constructors": {}, "properties": {"radiusY": true, "radiusX": true, "SVG_MORPHOLOGY_OPERATOR_UNKNOWN": true, "in1": true, "operator": true, "SVG_MORPHOLOGY_OPERATOR_DILATE": true, "SVG_MORPHOLOGY_OPERATOR_ERODE": true}, "constants": {}, "methods": {"setRadius": true}}, "SVGPathSegClosePath": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "SVGFETileElement": {"constructors": {}, "properties": {"in1": true}, "constants": {}, "methods": {}}, "WebGLShader": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "WebKitBlobBuilder": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"getBlob": true, "append": true}}, "SVGLengthList": {"constructors": {}, "properties": {"numberOfItems": true}, "constants": {}, "methods": {"replaceItem": true, "appendItem": true, "clear": true, "getItem": true, "removeItem": true, "initialize": true, "insertItemBefore": true}}, "MutationCallback": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "SVGTSpanElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "WebGLBuffer": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "EventException": {"constructors": {}, "properties": {"DISPATCH_REQUEST_ERR": true, "UNSPECIFIED_EVENT_TYPE_ERR": true, "message": true, "code": true, "name": true}, "constants": {}, "methods": {"toString": true}}, "OESVertexArrayObject": {"constructors": {}, "properties": {"VERTEX_ARRAY_BINDING_OES": true}, "constants": {}, "methods": {"isVertexArrayOES": true, "createVertexArrayOES": true, "deleteVertexArrayOES": true, "bindVertexArrayOES": true}}, "MetadataCallback": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "WebKitAnimationList": {"constructors": {}, "properties": {"length": true}, "constants": {}, "methods": {"item": true}}, "HTMLSpanElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "SVGRect": {"constructors": {}, "properties": {"y": true, "width": true, "x": true, "height": true}, "constants": {}, "methods": {}}, "ErrorCallback": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "SVGAnimatedString": {"constructors": {}, "properties": {"animVal": true, "baseVal": true}, "constants": {}, "methods": {}}, "SVGPointList": {"constructors": {}, "properties": {"numberOfItems": true}, "constants": {}, "methods": {"replaceItem": true, "appendItem": true, "clear": true, "getItem": true, "removeItem": true, "initialize": true, "insertItemBefore": true}}, "HTMLOptionElement": {"constructors": {}, "properties": {"index": true, "selected": true, "form": true, "text": true, "defaultSelected": true, "value": true, "label": true, "disabled": true}, "constants": {}, "methods": {}}, "XPathException": {"constructors": {}, "properties": {"TYPE_ERR": true, "message": true, "code": true, "INVALID_EXPRESSION_ERR": true, "name": true}, "constants": {}, "methods": {"toString": true}}, "SVGAnimatedNumber": {"constructors": {}, "properties": {"animVal": true, "baseVal": true}, "constants": {}, "methods": {}}, "Entity": {"constructors": {}, "properties": {"systemId": true, "publicId": true, "notationName": true}, "constants": {}, "methods": {}}, "EntryArray": {"constructors": {}, "properties": {"length": true}, "constants": {}, "methods": {"item": true}}, "MediaError": {"constructors": {}, "properties": {"MEDIA_ERR_ABORTED": true, "code": true, "MEDIA_ERR_DECODE": true, "MEDIA_ERR_NETWORK": true, "MEDIA_ERR_SRC_NOT_SUPPORTED": true}, "constants": {}, "methods": {}}, "HTMLDocument": {"constructors": {}, "properties": {"all": true, "width": true, "embeds": true, "scripts": true, "height": true, "bgColor": true, "linkColor": true, "designMode": true, "plugins": true, "alinkColor": true, "compatMode": true, "activeElement": true, "fgColor": true, "dir": true, "vlinkColor": true}, "constants": {}, "methods": {"write": true, "hasFocus": true, "clear": true, "captureEvents": true, "releaseEvents": true, "close": true, "open": true, "writeln": true}}, "WebKitAnimation": {"constructors": {}, "properties": {"elapsedTime": true, "direction": true, "name": true, "DIRECTION_ALTERNATE": true, "FILL_FORWARDS": true, "FILL_BACKWARDS": true, "iterationCount": true, "fillMode": true, "delay": true, "ended": true, "FILL_BOTH": true, "DIRECTION_NORMAL": true, "paused": true, "duration": true, "FILL_NONE": true}, "constants": {}, "methods": {"play": true, "pause": true}}, "HTMLButtonElement": {"constructors": {}, "properties": {"labels": true, "value": true, "formMethod": true, "name": true, "form": true, "accessKey": true, "formTarget": true, "formEnctype": true, "formAction": true, "disabled": true, "willValidate": true, "validity": true, "formNoValidate": true, "autofocus": true, "type": true, "validationMessage": true}, "constants": {}, "methods": {"setCustomValidity": true, "checkValidity": true, "click": true}}, "SVGFECompositeElement": {"constructors": {}, "properties": {"SVG_FECOMPOSITE_OPERATOR_UNKNOWN": true, "SVG_FECOMPOSITE_OPERATOR_ATOP": true, "SVG_FECOMPOSITE_OPERATOR_IN": true, "in1": true, "in2": true, "k3": true, "k2": true, "k1": true, "SVG_FECOMPOSITE_OPERATOR_XOR": true, "SVG_FECOMPOSITE_OPERATOR_OVER": true, "k4": true, "operator": true, "SVG_FECOMPOSITE_OPERATOR_OUT": true, "SVG_FECOMPOSITE_OPERATOR_ARITHMETIC": true}, "constants": {}, "methods": {}}, "AbstractWorker": {"constructors": {}, "properties": {"onerror": true}, "constants": {}, "methods": {"removeEventListener": true, "dispatchEvent": true, "addEventListener": true}}, "WebKitMutationObserver": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"disconnect": true}}, "SVGStopElement": {"constructors": {}, "properties": {"offset": true}, "constants": {}, "methods": {}}, "HTMLCollection": {"constructors": {}, "properties": {"length": true}, "constants": {}, "methods": {"item": true, "namedItem": true}}, "Worker": {"constructors": {}, "properties": {"onmessage": true}, "constants": {}, "methods": {"postMessage": true, "webkitPostMessage": true, "terminate": true}}, "SVGPatternElement": {"constructors": {}, "properties": {"height": true, "width": true, "patternUnits": true, "patternTransform": true, "x": true, "y": true, "patternContentUnits": true}, "constants": {}, "methods": {}}, "Float64Array": {"constructors": {}, "properties": {"length": true, "BYTES_PER_ELEMENT": true}, "constants": {}, "methods": {"subarray": true}}, "CSSStyleSheet": {"constructors": {}, "properties": {"rules": true, "cssRules": true, "ownerRule": true}, "constants": {}, "methods": {"addRule": true, "removeRule": true, "insertRule": true, "deleteRule": true}}, "SVGPathSegCurvetoQuadraticSmoothRel": {"constructors": {}, "properties": {"y": true, "x": true}, "constants": {}, "methods": {}}, "WorkerLocation": {"constructors": {}, "properties": {"search": true, "hash": true, "hostname": true, "host": true, "href": true, "pathname": true, "protocol": true, "port": true}, "constants": {}, "methods": {"toString": true}}, "ErrorEvent": {"constructors": {}, "properties": {"message": true, "lineno": true, "filename": true}, "constants": {}, "methods": {"initErrorEvent": true}}, "SVGException": {"constructors": {}, "properties": {"code": true, "name": true, "message": true, "SVG_WRONG_TYPE_ERR": true, "SVG_MATRIX_NOT_INVERTABLE": true, "SVG_INVALID_VALUE_ERR": true}, "constants": {}, "methods": {"toString": true}}, "HTMLAreaElement": {"constructors": {}, "properties": {"search": true, "hash": true, "target": true, "accessKey": true, "hostname": true, "ping": true, "shape": true, "protocol": true, "noHref": true, "host": true, "href": true, "coords": true, "pathname": true, "alt": true, "port": true}, "constants": {}, "methods": {}}, "HTMLFormElement": {"constructors": {}, "properties": {"elements": true, "name": true, "encoding": true, "autocomplete": true, "noValidate": true, "length": true, "target": true, "action": true, "acceptCharset": true, "method": true, "enctype": true}, "constants": {}, "methods": {"reset": true, "checkValidity": true, "submit": true}}, "SVGLength": {"constructors": {}, "properties": {"value": true, "SVG_LENGTHTYPE_NUMBER": true, "SVG_LENGTHTYPE_UNKNOWN": true, "SVG_LENGTHTYPE_PERCENTAGE": true, "SVG_LENGTHTYPE_MM": true, "SVG_LENGTHTYPE_CM": true, "SVG_LENGTHTYPE_EMS": true, "valueInSpecifiedUnits": true, "SVG_LENGTHTYPE_PC": true, "SVG_LENGTHTYPE_EXS": true, "valueAsString": true, "unitType": true, "SVG_LENGTHTYPE_PX": true, "SVG_LENGTHTYPE_IN": true, "SVG_LENGTHTYPE_PT": true}, "constants": {}, "methods": {"newValueSpecifiedUnits": true, "convertToSpecifiedUnits": true}}, "DataTransferItemList": {"constructors": {}, "properties": {"length": true}, "constants": {}, "methods": {"item": true, "add": true, "clear": true}}, "HTMLInputElement": {"constructors": {}, "properties": {"defaultChecked": true, "valueAsDate": true, "labels": true, "onwebkitspeechchange": true, "formEnctype": true, "accept": true, "disabled": true, "incremental": true, "selectionStart": true, "selectionEnd": true, "selectedOption": true, "formTarget": true, "alt": true, "webkitSpeech": true, "size": true, "checked": true, "min": true, "pattern": true, "accessKey": true, "indeterminate": true, "formAction": true, "valueAsNumber": true, "formNoValidate": true, "autofocus": true, "type": true, "validationMessage": true, "files": true, "multiple": true, "form": true, "max": true, "useMap": true, "webkitdirectory": true, "validity": true, "readOnly": true, "selectionDirection": true, "maxLength": true, "placeholder": true, "willValidate": true, "src": true, "formMethod": true, "webkitGrammar": true, "name": true, "align": true, "required": true, "list": true, "step": true, "value": true, "autocomplete": true, "defaultValue": true}, "constants": {}, "methods": {"setCustomValidity": true, "stepDown": true, "checkValidity": true, "stepUp": true, "setSelectionRange": true, "click": true, "select": true}}, "AudioBufferSourceNode": {"constructors": {}, "properties": {"buffer": true, "looping": true, "gain": true, "loop": true, "playbackRate": true}, "constants": {}, "methods": {"noteOn": true, "noteOff": true, "noteGrainOn": true}}, "CompositionEvent": {"constructors": {}, "properties": {"data": true}, "constants": {}, "methods": {"initCompositionEvent": true}}, "InjectedScriptHost": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"databaseId": true, "isHTMLAllCollection": true, "evaluate": true, "inspect": true, "clearConsoleMessages": true, "internalConstructorName": true, "inspectedNode": true, "storageId": true, "copyText": true, "type": true}}, "DOMException": {"constructors": {}, "properties": {"NO_DATA_ALLOWED_ERR": true, "SYNTAX_ERR": true, "INVALID_CHARACTER_ERR": true, "SECURITY_ERR": true, "INUSE_ATTRIBUTE_ERR": true, "NOT_SUPPORTED_ERR": true, "INVALID_STATE_ERR": true, "WRONG_DOCUMENT_ERR": true, "ABORT_ERR": true, "message": true, "TYPE_MISMATCH_ERR": true, "code": true, "HIERARCHY_REQUEST_ERR": true, "NOT_FOUND_ERR": true, "DATA_CLONE_ERR": true, "NETWORK_ERR": true, "INVALID_MODIFICATION_ERR": true, "NAMESPACE_ERR": true, "URL_MISMATCH_ERR": true, "INVALID_NODE_TYPE_ERR": true, "INDEX_SIZE_ERR": true, "NO_MODIFICATION_ALLOWED_ERR": true, "VALIDATION_ERR": true, "INVALID_ACCESS_ERR": true, "name": true, "TIMEOUT_ERR": true, "DOMSTRING_SIZE_ERR": true, "QUOTA_EXCEEDED_ERR": true}, "constants": {}, "methods": {"toString": true}}, "SVGPathSegLinetoAbs": {"constructors": {}, "properties": {"y": true, "x": true}, "constants": {}, "methods": {}}, "SVGVKernElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "SVGAElement": {"constructors": {}, "properties": {"target": true}, "constants": {}, "methods": {}}, "SVGURIReference": {"constructors": {}, "properties": {"href": true}, "constants": {}, "methods": {}}, "TextMetrics": {"constructors": {}, "properties": {"width": true}, "constants": {}, "methods": {}}, "SVGAnimateTransformElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "HTMLHeadElement": {"constructors": {}, "properties": {"profile": true}, "constants": {}, "methods": {}}, "Int8Array": {"constructors": {}, "properties": {"length": true, "BYTES_PER_ELEMENT": true}, "constants": {}, "methods": {"subarray": true}}, "DeviceOrientationEvent": {"constructors": {}, "properties": {"alpha": true, "beta": true, "gamma": true}, "constants": {}, "methods": {"initDeviceOrientationEvent": true}}, "Node": {"constructors": {}, "properties": {"COMMENT_NODE": true, "DOCUMENT_POSITION_CONTAINED_BY": true, "parentNode": true, "nextSibling": true, "DOCUMENT_TYPE_NODE": true, "prefix": true, "nodeValue": true, "ATTRIBUTE_NODE": true, "childNodes": true, "DOCUMENT_POSITION_FOLLOWING": true, "parentElement": true, "DOCUMENT_POSITION_PRECEDING": true, "lastChild": true, "nodeName": true, "CDATA_SECTION_NODE": true, "ENTITY_REFERENCE_NODE": true, "localName": true, "DOCUMENT_FRAGMENT_NODE": true, "previousSibling": true, "nodeType": true, "DOCUMENT_NODE": true, "ENTITY_NODE": true, "TEXT_NODE": true, "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC": true, "NOTATION_NODE": true, "DOCUMENT_POSITION_CONTAINS": true, "ownerDocument": true, "baseURI": true, "textContent": true, "DOCUMENT_POSITION_DISCONNECTED": true, "firstChild": true, "PROCESSING_INSTRUCTION_NODE": true, "namespaceURI": true, "ELEMENT_NODE": true, "attributes": true}, "constants": {}, "methods": {"compareDocumentPosition": true, "appendChild": true, "isDefaultNamespace": true, "removeEventListener": true, "replaceChild": true, "insertBefore": true, "isSupported": true, "contains": true, "isSameNode": true, "lookupNamespaceURI": true, "cloneNode": true, "removeChild": true, "lookupPrefix": true, "normalize": true, "hasChildNodes": true, "addEventListener": true, "hasAttributes": true, "dispatchEvent": true, "isEqualNode": true}}, "WebGLTexture": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "PositionErrorCallback": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "WebKitCSSKeyframesRule": {"constructors": {}, "properties": {"cssRules": true, "name": true}, "constants": {}, "methods": {"insertRule": true, "deleteRule": true, "findRule": true}}, "SVGTextPositioningElement": {"constructors": {}, "properties": {"y": true, "x": true, "rotate": true, "dx": true, "dy": true}, "constants": {}, "methods": {}}, "IDBDatabaseException": {"constructors": {}, "properties": {"code": true, "SERIAL_ERR": true, "CONSTRAINT_ERR": true, "READ_ONLY_ERR": true, "NOT_ALLOWED_ERR": true, "RECOVERABLE_ERR": true, "NOT_FOUND_ERR": true, "name": true, "TIMEOUT_ERR": true, "DATA_ERR": true, "UNKNOWN_ERR": true, "TRANSIENT_ERR": true, "NO_ERR": true, "ABORT_ERR": true, "message": true, "DEADLOCK_ERR": true, "NON_TRANSIENT_ERR": true}, "constants": {}, "methods": {"toString": true}}, "IDBCursor": {"constructors": {}, "properties": {"NEXT_NO_DUPLICATE": true, "direction": true, "NEXT": true, "source": true, "PREV_NO_DUPLICATE": true, "key": true, "PREV": true, "primaryKey": true}, "constants": {}, "methods": {"continue": true, "update": true, "delete": true}}, "SVGSwitchElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "SVGAnimateElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "SVGPathSegLinetoHorizontalRel": {"constructors": {}, "properties": {"x": true}, "constants": {}, "methods": {}}, "HTMLSourceElement": {"constructors": {}, "properties": {"media": true, "type": true, "src": true}, "constants": {}, "methods": {}}, "HTMLTableRowElement": {"constructors": {}, "properties": {"ch": true, "chOff": true, "sectionRowIndex": true, "rowIndex": true, "align": true, "bgColor": true, "vAlign": true, "cells": true}, "constants": {}, "methods": {"insertCell": true, "deleteCell": true}}, "FileException": {"constructors": {}, "properties": {"SYNTAX_ERR": true, "name": true, "SECURITY_ERR": true, "NOT_FOUND_ERR": true, "NOT_READABLE_ERR": true, "INVALID_STATE_ERR": true, "code": true, "INVALID_MODIFICATION_ERR": true, "NO_MODIFICATION_ALLOWED_ERR": true, "ABORT_ERR": true, "QUOTA_EXCEEDED_ERR": true, "PATH_EXISTS_ERR": true, "message": true, "TYPE_MISMATCH_ERR": true, "ENCODING_ERR": true}, "constants": {}, "methods": {"toString": true}}, "SVGFontFaceSrcElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "MutationRecord": {"constructors": {}, "properties": {"type": true, "target": true, "attributeName": true, "addedNodes": true, "nextSibling": true, "removedNodes": true, "oldValue": true, "attributeNamespace": true, "previousSibling": true}, "constants": {}, "methods": {}}, "CSSUnknownRule": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "IDBVersionChangeEvent": {"constructors": {}, "properties": {"version": true}, "constants": {}, "methods": {}}, "SVGSetElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "FileReader": {"constructors": {}, "properties": {"onabort": true, "onload": true, "readyState": true, "LOADING": true, "onerror": true, "onloadend": true, "onprogress": true, "DONE": true, "onloadstart": true, "error": true, "EMPTY": true, "result": true}, "constants": {}, "methods": {"readAsDataURL": true, "abort": true, "readAsArrayBuffer": true, "readAsText": true, "readAsBinaryString": true}}, "RGBColor": {"constructors": {}, "properties": {"blue": true, "green": true, "red": true}, "constants": {}, "methods": {}}, "StyleSheet": {"constructors": {}, "properties": {"title": true, "parentStyleSheet": true, "media": true, "disabled": true, "href": true, "ownerNode": true, "type": true}, "constants": {}, "methods": {}}, "VoidCallback": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"handleEvent": true}}, "HTMLDirectoryElement": {"constructors": {}, "properties": {"compact": true}, "constants": {}, "methods": {}}, "DocumentFragment": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"querySelectorAll": true, "querySelector": true}}, "SVGFESpotLightElement": {"constructors": {}, "properties": {"z": true, "limitingConeAngle": true, "specularExponent": true, "x": true, "y": true, "pointsAtZ": true, "pointsAtY": true, "pointsAtX": true}, "constants": {}, "methods": {}}, "SVGPreserveAspectRatio": {"constructors": {}, "properties": {"SVG_PRESERVEASPECTRATIO_XMINYMAX": true, "SVG_MEETORSLICE_UNKNOWN": true, "SVG_PRESERVEASPECTRATIO_XMINYMID": true, "SVG_PRESERVEASPECTRATIO_XMIDYMID": true, "SVG_MEETORSLICE_SLICE": true, "align": true, "SVG_PRESERVEASPECTRATIO_XMINYMIN": true, "meetOrSlice": true, "SVG_PRESERVEASPECTRATIO_XMAXYMIN": true, "SVG_PRESERVEASPECTRATIO_XMIDYMAX": true, "SVG_PRESERVEASPECTRATIO_NONE": true, "SVG_PRESERVEASPECTRATIO_UNKNOWN": true, "SVG_PRESERVEASPECTRATIO_XMAXYMID": true, "SVG_MEETORSLICE_MEET": true, "SVG_PRESERVEASPECTRATIO_XMIDYMIN": true, "SVG_PRESERVEASPECTRATIO_XMAXYMAX": true}, "constants": {}, "methods": {}}, "StorageInfo": {"constructors": {}, "properties": {"TEMPORARY": true, "PERSISTENT": true}, "constants": {}, "methods": {"requestQuota": true, "queryUsageAndQuota": true}}, "IDBIndex": {"constructors": {}, "properties": {"unique": true, "objectStore": true, "name": true, "keyPath": true}, "constants": {}, "methods": {"openKeyCursor": true, "getKey": true, "openCursor": true, "get": true}}, "DirectoryReader": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"readEntries": true}}, "SVGAnimatedTransformList": {"constructors": {}, "properties": {"animVal": true, "baseVal": true}, "constants": {}, "methods": {}}, "DOMImplementation": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"hasFeature": true, "createDocument": true, "createHTMLDocument": true, "createDocumentType": true, "createCSSStyleSheet": true}}, "HTMLDivElement": {"constructors": {}, "properties": {"align": true}, "constants": {}, "methods": {}}, "HTMLEmbedElement": {"constructors": {}, "properties": {"src": true, "name": true, "align": true, "height": true, "width": true, "type": true}, "constants": {}, "methods": {}}, "CSSRule": {"constructors": {}, "properties": {"WEBKIT_KEYFRAMES_RULE": true, "CHARSET_RULE": true, "MEDIA_RULE": true, "WEBKIT_REGION_STYLE_RULE": true, "IMPORT_RULE": true, "cssText": true, "parentRule": true, "UNKNOWN_RULE": true, "parentStyleSheet": true, "STYLE_RULE": true, "FONT_FACE_RULE": true, "WEBKIT_KEYFRAME_RULE": true, "type": true, "PAGE_RULE": true}, "constants": {}, "methods": {}}, "Notation": {"constructors": {}, "properties": {"systemId": true, "publicId": true}, "constants": {}, "methods": {}}, "DataView": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"getUint16": true, "setUint8": true, "getInt16": true, "getFloat64": true, "setFloat64": true, "setInt32": true, "setInt16": true, "setUint32": true, "setFloat32": true, "getUint8": true, "setInt8": true, "getInt32": true, "getInt8": true, "setUint16": true, "getUint32": true, "getFloat32": true}}, "WorkerContext": {"constructors": {}, "properties": {"onerror": true, "self": true, "location": true, "webkitURL": true, "webkitNotifications": true, "navigator": true}, "constants": {}, "methods": {"removeEventListener": true, "setInterval": true, "importScripts": true, "addEventListener": true, "clearTimeout": true, "clearInterval": true, "dispatchEvent": true, "close": true, "setTimeout": true}}, "MutationEvent": {"constructors": {}, "properties": {"ADDITION": true, "REMOVAL": true, "attrName": true, "relatedNode": true, "attrChange": true, "MODIFICATION": true, "newValue": true, "prevValue": true}, "constants": {}, "methods": {"initMutationEvent": true}}, "SVGTextContentElement": {"constructors": {}, "properties": {"LENGTHADJUST_SPACINGANDGLYPHS": true, "LENGTHADJUST_SPACING": true, "lengthAdjust": true, "LENGTHADJUST_UNKNOWN": true, "textLength": true}, "constants": {}, "methods": {"getRotationOfChar": true, "getStartPositionOfChar": true, "selectSubString": true, "getExtentOfChar": true, "getEndPositionOfChar": true, "getCharNumAtPosition": true, "getSubStringLength": true, "getComputedTextLength": true, "getNumberOfChars": true}}, "Attr": {"constructors": {}, "properties": {"isId": true, "specified": true, "name": true, "value": true, "ownerElement": true}, "constants": {}, "methods": {}}, "OfflineAudioCompletionEvent": {"constructors": {}, "properties": {"renderedBuffer": true}, "constants": {}, "methods": {}}, "ImageData": {"constructors": {}, "properties": {"width": true, "data": true, "height": true}, "constants": {}, "methods": {}}, "TreeWalker": {"constructors": {}, "properties": {"filter": true, "root": true, "currentNode": true, "expandEntityReferences": true, "whatToShow": true}, "constants": {}, "methods": {"previousNode": true, "nextNode": true, "nextSibling": true, "parentNode": true, "firstChild": true, "lastChild": true, "previousSibling": true}}, "SVGFEImageElement": {"constructors": {}, "properties": {"preserveAspectRatio": true}, "constants": {}, "methods": {}}, "NodeSelector": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"querySelectorAll": true, "querySelector": true}}, "EventTarget": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"removeEventListener": true, "dispatchEvent": true, "addEventListener": true}}, "WebGLRenderbuffer": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "WebKitAnimationEvent": {"constructors": {}, "properties": {"elapsedTime": true, "animationName": true}, "constants": {}, "methods": {"initWebKitAnimationEvent": true}}, "AudioContext": {"constructors": {}, "properties": {"listener": true, "oncomplete": true, "sampleRate": true, "destination": true, "currentTime": true}, "constants": {}, "methods": {"createPanner": true, "createChannelSplitter": true, "createJavaScriptNode": true, "createHighPass2Filter": true, "createWaveShaper": true, "createDynamicsCompressor": true, "createGainNode": true, "createBufferSource": true, "decodeAudioData": true, "createDelayNode": true, "createBuffer": true, "createLowPass2Filter": true, "createAnalyser": true, "startRendering": true, "createChannelMerger": true, "createConvolver": true, "createBiquadFilter": true}}, "WebGLProgram": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "Geolocation": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"getCurrentPosition": true, "clearWatch": true, "watchPosition": true}}, "HTMLQuoteElement": {"constructors": {}, "properties": {"cite": true}, "constants": {}, "methods": {}}, "SVGAnimatedLengthList": {"constructors": {}, "properties": {"animVal": true, "baseVal": true}, "constants": {}, "methods": {}}, "JavaScriptAudioNode": {"constructors": {}, "properties": {"onaudioprocess": true, "bufferSize": true}, "constants": {}, "methods": {}}, "OESStandardDerivatives": {"constructors": {}, "properties": {"FRAGMENT_SHADER_DERIVATIVE_HINT_OES": true}, "constants": {}, "methods": {}}, "File": {"constructors": {}, "properties": {"lastModifiedDate": true, "fileSize": true, "name": true, "fileName": true}, "constants": {}, "methods": {}}, "Navigator": {"constructors": {}, "properties": {"mimeTypes": true, "productSub": true, "vendor": true, "language": true, "appName": true, "appCodeName": true, "plugins": true, "cookieEnabled": true, "appVersion": true, "product": true, "platform": true, "vendorSub": true, "onLine": true, "userAgent": true}, "constants": {}, "methods": {"javaEnabled": true, "getStorageUpdates": true}}, "SVGFEFuncGElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "SVGFESpecularLightingElement": {"constructors": {}, "properties": {"specularConstant": true, "in1": true, "specularExponent": true, "surfaceScale": true}, "constants": {}, "methods": {}}, "XMLHttpRequestUpload": {"constructors": {}, "properties": {"onabort": true, "onerror": true, "onprogress": true, "onloadstart": true, "onload": true}, "constants": {}, "methods": {"removeEventListener": true, "dispatchEvent": true, "addEventListener": true}}, "SVGMatrix": {"constructors": {}, "properties": {"a": true, "c": true, "b": true, "e": true, "d": true, "f": true}, "constants": {}, "methods": {"inverse": true, "skewY": true, "flipX": true, "flipY": true, "rotateFromVector": true, "rotate": true, "scale": true, "scaleNonUniform": true, "skewX": true, "multiply": true, "translate": true}}, "XPathEvaluator": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"evaluate": true, "createExpression": true, "createNSResolver": true}}, "NodeList": {"constructors": {}, "properties": {"length": true}, "constants": {}, "methods": {"item": true}}, "Uint32Array": {"constructors": {}, "properties": {"length": true, "BYTES_PER_ELEMENT": true}, "constants": {}, "methods": {"subarray": true}}, "DatabaseCallback": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "SVGFEFuncAElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "WebGLContextAttributes": {"constructors": {}, "properties": {"stencil": true, "preserveDrawingBuffer": true, "antialias": true, "depth": true, "premultipliedAlpha": true, "alpha": true}, "constants": {}, "methods": {}}, "FileSystemCallback": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "HTMLLinkElement": {"constructors": {}, "properties": {"sheet": true, "target": true, "sizes": true, "media": true, "charset": true, "rev": true, "hreflang": true, "disabled": true, "href": true, "rel": true, "type": true}, "constants": {}, "methods": {}}, "SQLStatementCallback": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "HTMLTextAreaElement": {"constructors": {}, "properties": {"labels": true, "cols": true, "disabled": true, "selectionStart": true, "selectionEnd": true, "wrap": true, "rows": true, "accessKey": true, "autofocus": true, "type": true, "validationMessage": true, "form": true, "validity": true, "willValidate": true, "selectionDirection": true, "maxLength": true, "placeholder": true, "name": true, "textLength": true, "required": true, "readOnly": true, "value": true, "defaultValue": true}, "constants": {}, "methods": {"setSelectionRange": true, "setCustomValidity": true, "checkValidity": true, "select": true}}, "HTMLBaseFontElement": {"constructors": {}, "properties": {"color": true, "size": true, "face": true}, "constants": {}, "methods": {}}, "HTMLDetailsElement": {"constructors": {}, "properties": {"open": true}, "constants": {}, "methods": {}}, "SVGPathSegLinetoVerticalAbs": {"constructors": {}, "properties": {"y": true}, "constants": {}, "methods": {}}, "EventSource": {"constructors": {}, "properties": {"onopen": true, "readyState": true, "URL": true, "onerror": true, "CONNECTING": true, "CLOSED": true, "onmessage": true, "OPEN": true}, "constants": {}, "methods": {"close": true, "removeEventListener": true, "dispatchEvent": true, "addEventListener": true}}, "SVGPathSegCurvetoCubicAbs": {"constructors": {}, "properties": {"y2": true, "y1": true, "y": true, "x2": true, "x": true, "x1": true}, "constants": {}, "methods": {}}, "SVGPathSegMovetoAbs": {"constructors": {}, "properties": {"y": true, "x": true}, "constants": {}, "methods": {}}, "HTMLMetaElement": {"constructors": {}, "properties": {"content": true, "scheme": true, "httpEquiv": true, "name": true}, "constants": {}, "methods": {}}, "StorageInfoErrorCallback": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "SVGLocatable": {"constructors": {}, "properties": {"farthestViewportElement": true, "nearestViewportElement": true}, "constants": {}, "methods": {"getCTM": true, "getBBox": true, "getTransformToElement": true, "getScreenCTM": true}}, "HTMLLegendElement": {"constructors": {}, "properties": {"accessKey": true, "align": true, "form": true}, "constants": {}, "methods": {}}, "DOMTokenList": {"constructors": {}, "properties": {"length": true}, "constants": {}, "methods": {"contains": true, "toggle": true, "remove": true, "item": true, "add": true, "toString": true}}, "DOMFileSystem": {"constructors": {}, "properties": {"root": true, "name": true}, "constants": {}, "methods": {}}, "SVGPathSegLinetoVerticalRel": {"constructors": {}, "properties": {"y": true}, "constants": {}, "methods": {}}, "SVGFEColorMatrixElement": {"constructors": {}, "properties": {"SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA": true, "SVG_FECOLORMATRIX_TYPE_SATURATE": true, "SVG_FECOLORMATRIX_TYPE_MATRIX": true, "SVG_FECOLORMATRIX_TYPE_HUEROTATE": true, "in1": true, "values": true, "type": true, "SVG_FECOLORMATRIX_TYPE_UNKNOWN": true}, "constants": {}, "methods": {}}, "SVGFontFaceFormatElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "HTMLMenuElement": {"constructors": {}, "properties": {"compact": true}, "constants": {}, "methods": {}}, "MessageEvent": {"constructors": {}, "properties": {"origin": true, "lastEventId": true, "data": true, "ports": true, "source": true}, "constants": {}, "methods": {"initMessageEvent": true, "webkitInitMessageEvent": true}}, "SQLTransactionErrorCallback": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "SVGCircleElement": {"constructors": {}, "properties": {"cy": true, "cx": true, "r": true}, "constants": {}, "methods": {}}, "NodeFilter": {"constructors": {}, "properties": {"SHOW_ENTITY": true, "FILTER_REJECT": true, "SHOW_ELEMENT": true, "SHOW_ALL": true, "FILTER_ACCEPT": true, "SHOW_DOCUMENT_FRAGMENT": true, "SHOW_PROCESSING_INSTRUCTION": true, "SHOW_DOCUMENT": true, "SHOW_COMMENT": true, "SHOW_CDATA_SECTION": true, "FILTER_SKIP": true, "SHOW_NOTATION": true, "SHOW_ATTRIBUTE": true, "SHOW_DOCUMENT_TYPE": true, "SHOW_ENTITY_REFERENCE": true, "SHOW_TEXT": true}, "constants": {}, "methods": {"acceptNode": true}}, "SVGSymbolElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "SVGPathSegCurvetoQuadraticAbs": {"constructors": {}, "properties": {"y": true, "x": true, "x1": true, "y1": true}, "constants": {}, "methods": {}}, "FileWriterCallback": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "TextEvent": {"constructors": {}, "properties": {"data": true}, "constants": {}, "methods": {"initTextEvent": true}}, "ClientRect": {"constructors": {}, "properties": {"right": true, "bottom": true, "top": true, "height": true, "width": true, "left": true}, "constants": {}, "methods": {}}, "HTMLTitleElement": {"constructors": {}, "properties": {"text": true}, "constants": {}, "methods": {}}, "SVGFEMergeNodeElement": {"constructors": {}, "properties": {"in1": true}, "constants": {}, "methods": {}}, "HTMLTableElement": {"constructors": {}, "properties": {"rows": true, "caption": true, "rules": true, "cellSpacing": true, "align": true, "width": true, "summary": true, "bgColor": true, "tBodies": true, "tFoot": true, "cellPadding": true, "border": true, "frame": true, "tHead": true}, "constants": {}, "methods": {"deleteTFoot": true, "deleteTHead": true, "createTFoot": true, "createCaption": true, "insertRow": true, "deleteRow": true, "deleteCaption": true, "createTHead": true}}, "Event": {"constructors": {}, "properties": {"CAPTURING_PHASE": true, "KEYUP": true, "FOCUS": true, "cancelable": true, "returnValue": true, "MOUSEOVER": true, "SELECT": true, "defaultPrevented": true, "KEYPRESS": true, "BUBBLING_PHASE": true, "KEYDOWN": true, "CHANGE": true, "MOUSEOUT": true, "type": true, "CLICK": true, "currentTarget": true, "srcElement": true, "clipboardData": true, "cancelBubble": true, "bubbles": true, "AT_TARGET": true, "timeStamp": true, "target": true, "MOUSEDRAG": true, "MOUSEUP": true, "MOUSEMOVE": true, "MOUSEDOWN": true, "DRAGDROP": true, "BLUR": true, "DBLCLICK": true, "eventPhase": true}, "constants": {}, "methods": {"initEvent": true, "stopImmediatePropagation": true, "stopPropagation": true, "preventDefault": true}}, "FileEntrySync": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"createWriter": true, "file": true}}, "SVGStyleElement": {"constructors": {}, "properties": {"media": true, "type": true, "title": true}, "constants": {}, "methods": {}}, "SVGPolygonElement": {"constructors": {}, "properties": {"animatedPoints": true, "points": true}, "constants": {}, "methods": {}}, "CSSFontFaceRule": {"constructors": {}, "properties": {"style": true}, "constants": {}, "methods": {}}, "SQLTransactionSync": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "HTMLObjectElement": {"constructors": {}, "properties": {"willValidate": true, "code": true, "type": true, "name": true, "form": true, "standby": true, "data": true, "align": true, "useMap": true, "vspace": true, "validity": true, "declare": true, "codeBase": true, "width": true, "hspace": true, "contentDocument": true, "codeType": true, "height": true, "border": true, "archive": true, "validationMessage": true}, "constants": {}, "methods": {"setCustomValidity": true, "checkValidity": true}}, "CustomEvent": {"constructors": {}, "properties": {"detail": true}, "constants": {}, "methods": {"initCustomEvent": true}}, "DOMPluginArray": {"constructors": {}, "properties": {"length": true}, "constants": {}, "methods": {"item": true, "namedItem": true, "refresh": true}}, "HTMLMeterElement": {"constructors": {}, "properties": {"form": true, "min": true, "max": true, "labels": true, "value": true, "high": true, "low": true, "optimum": true}, "constants": {}, "methods": {}}, "SVGFEPointLightElement": {"constructors": {}, "properties": {"y": true, "x": true, "z": true}, "constants": {}, "methods": {}}, "WebGLUniformLocation": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "HTMLBodyElement": {"constructors": {}, "properties": {"onload": true, "onblur": true, "onhashchange": true, "onoffline": true, "onbeforeunload": true, "aLink": true, "text": true, "ononline": true, "onunload": true, "onresize": true, "bgColor": true, "onerror": true, "link": true, "background": true, "onpopstate": true, "onmessage": true, "onfocus": true, "vLink": true, "onorientationchange": true, "onstorage": true}, "constants": {}, "methods": {}}, "HTMLLabelElement": {"constructors": {}, "properties": {"control": true, "accessKey": true, "form": true, "htmlFor": true}, "constants": {}, "methods": {}}, "EntryCallback": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "CSSCharsetRule": {"constructors": {}, "properties": {"encoding": true}, "constants": {}, "methods": {}}, "WebGLRenderingContext": {"constructors": {}, "properties": {"RENDERBUFFER_INTERNAL_FORMAT": true, "LINE_WIDTH": true, "CONSTANT_ALPHA": true, "BLEND_SRC_ALPHA": true, "LESS": true, "DST_COLOR": true, "INCR_WRAP": true, "CCW": true, "STENCIL_BACK_PASS_DEPTH_FAIL": true, "BACK": true, "UNSIGNED_BYTE": true, "STENCIL_REF": true, "ACTIVE_ATTRIBUTES": true, "TEXTURE_CUBE_MAP_POSITIVE_X": true, "STENCIL_BACK_VALUE_MASK": true, "TEXTURE_CUBE_MAP_POSITIVE_Z": true, "NUM_COMPRESSED_TEXTURE_FORMATS": true, "TEXTURE12": true, "TEXTURE_MIN_FILTER": true, "LINK_STATUS": true, "BLEND": true, "TEXTURE16": true, "SHADER_COMPILER": true, "KEEP": true, "FUNC_REVERSE_SUBTRACT": true, "VERTEX_ATTRIB_ARRAY_ENABLED": true, "FRONT_AND_BACK": true, "FRONT": true, "DST_ALPHA": true, "DEPTH_STENCIL": true, "STENCIL_BACK_FUNC": true, "INVALID_FRAMEBUFFER_OPERATION": true, "BLEND_EQUATION": true, "UNPACK_FLIP_Y_WEBGL": true, "RENDERBUFFER_DEPTH_SIZE": true, "STENCIL_BACK_WRITEMASK": true, "NEAREST_MIPMAP_LINEAR": true, "TEXTURE_CUBE_MAP_POSITIVE_Y": true, "NEAREST": true, "RENDERBUFFER_WIDTH": true, "ARRAY_BUFFER_BINDING": true, "ARRAY_BUFFER": true, "FRAMEBUFFER_INCOMPLETE_DIMENSIONS": true, "LEQUAL": true, "VERSION": true, "COLOR_CLEAR_VALUE": true, "RENDERER": true, "GREEN_BITS": true, "MAX_TEXTURE_IMAGE_UNITS": true, "LOW_FLOAT": true, "MIRRORED_REPEAT": true, "TEXTURE18": true, "VIEWPORT": true, "FRAGMENT_SHADER": true, "LUMINANCE": true, "DECR_WRAP": true, "STENCIL_BACK_PASS_DEPTH_PASS": true, "ONE_MINUS_DST_ALPHA": true, "MEDIUM_INT": true, "MEDIUM_FLOAT": true, "OUT_OF_MEMORY": true, "POLYGON_OFFSET_FACTOR": true, "FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL": true, "TEXTURE_2D": true, "DITHER": true, "TEXTURE31": true, "TEXTURE30": true, "DEPTH_COMPONENT16": true, "TEXTURE13": true, "TEXTURE23": true, "DEPTH_TEST": true, "ONE_MINUS_DST_COLOR": true, "drawingBufferHeight": true, "STREAM_DRAW": true, "POLYGON_OFFSET_UNITS": true, "RGB": true, "SCISSOR_BOX": true, "NOTEQUAL": true, "MAX_VARYING_VECTORS": true, "DONT_CARE": true, "FRONT_FACE": true, "FRAMEBUFFER_ATTACHMENT_OBJECT_NAME": true, "INT_VEC2": true, "UNSIGNED_SHORT_4_4_4_4": true, "NONE": true, "BLEND_DST_ALPHA": true, "VERTEX_ATTRIB_ARRAY_SIZE": true, "SRC_COLOR": true, "COMPRESSED_TEXTURE_FORMATS": true, "MAX_VERTEX_ATTRIBS": true, "UNSIGNED_SHORT_5_5_5_1": true, "LOW_INT": true, "BLEND_EQUATION_RGB": true, "TEXTURE": true, "LINEAR_MIPMAP_LINEAR": true, "VERTEX_ATTRIB_ARRAY_BUFFER_BINDING": true, "CURRENT_PROGRAM": true, "COLOR_BUFFER_BIT": true, "STENCIL_BUFFER_BIT": true, "NICEST": true, "NO_ERROR": true, "FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE": true, "TEXTURE22": true, "ELEMENT_ARRAY_BUFFER_BINDING": true, "STENCIL_PASS_DEPTH_FAIL": true, "REPEAT": true, "TEXTURE26": true, "TEXTURE27": true, "TEXTURE24": true, "TEXTURE25": true, "STENCIL_INDEX": true, "TRIANGLE_FAN": true, "FLOAT_MAT3": true, "FLOAT_MAT2": true, "FLOAT_MAT4": true, "VERTEX_ATTRIB_ARRAY_NORMALIZED": true, "SAMPLE_COVERAGE_INVERT": true, "STATIC_DRAW": true, "FLOAT_VEC3": true, "FLOAT_VEC2": true, "STENCIL_ATTACHMENT": true, "ACTIVE_UNIFORMS": true, "INVALID_OPERATION": true, "DEPTH_ATTACHMENT": true, "MAX_COMBINED_TEXTURE_IMAGE_UNITS": true, "FRAMEBUFFER_COMPLETE": true, "BOOL_VEC4": true, "TEXTURE2": true, "TEXTURE1": true, "GEQUAL": true, "ACTIVE_TEXTURE": true, "TEXTURE6": true, "BOOL_VEC2": true, "BOOL_VEC3": true, "GENERATE_MIPMAP_HINT": true, "CULL_FACE": true, "TEXTURE9": true, "TEXTURE8": true, "COLOR_WRITEMASK": true, "DEPTH_COMPONENT": true, "VERTEX_ATTRIB_ARRAY_TYPE": true, "STENCIL_CLEAR_VALUE": true, "TEXTURE_BINDING_CUBE_MAP": true, "ONE_MINUS_SRC_ALPHA": true, "VERTEX_SHADER": true, "SUBPIXEL_BITS": true, "STENCIL_WRITEMASK": true, "ATTACHED_SHADERS": true, "FLOAT_VEC4": true, "TEXTURE17": true, "ONE_MINUS_CONSTANT_ALPHA": true, "TEXTURE15": true, "TEXTURE14": true, "SHORT": true, "SAMPLES": true, "TEXTURE11": true, "TEXTURE10": true, "FUNC_SUBTRACT": true, "RENDERBUFFER_STENCIL_SIZE": true, "PACK_ALIGNMENT": true, "UNSIGNED_INT": true, "TEXTURE19": true, "STENCIL_FUNC": true, "NEAREST_MIPMAP_NEAREST": true, "RENDERBUFFER_HEIGHT": true, "RENDERBUFFER_BINDING": true, "HIGH_INT": true, "GREATER": true, "RED_BITS": true, "BUFFER_SIZE": true, "BLEND_COLOR": true, "INT_VEC3": true, "INT_VEC4": true, "MAX_CUBE_MAP_TEXTURE_SIZE": true, "RENDERBUFFER_BLUE_SIZE": true, "drawingBufferWidth": true, "SAMPLE_COVERAGE": true, "TEXTURE21": true, "SRC_ALPHA": true, "STENCIL_TEST": true, "DEPTH_WRITEMASK": true, "FRAMEBUFFER_INCOMPLETE_ATTACHMENT": true, "POLYGON_OFFSET_FILL": true, "FUNC_ADD": true, "REPLACE": true, "LUMINANCE_ALPHA": true, "DEPTH_RANGE": true, "FASTEST": true, "STENCIL_FAIL": true, "MAX_RENDERBUFFER_SIZE": true, "STENCIL_BACK_FAIL": true, "BLEND_SRC_RGB": true, "ONE_MINUS_CONSTANT_COLOR": true, "RENDERBUFFER": true, "RGB5_A1": true, "RENDERBUFFER_ALPHA_SIZE": true, "UNPACK_COLORSPACE_CONVERSION_WEBGL": true, "MAX_FRAGMENT_UNIFORM_VECTORS": true, "BLEND_DST_RGB": true, "BROWSER_DEFAULT_WEBGL": true, "DEPTH_STENCIL_ATTACHMENT": true, "UNSIGNED_SHORT": true, "ZERO": true, "TEXTURE0": true, "LINE_LOOP": true, "BUFFER_USAGE": true, "TEXTURE7": true, "BYTE": true, "CW": true, "DYNAMIC_DRAW": true, "RENDERBUFFER_RED_SIZE": true, "FRAMEBUFFER_UNSUPPORTED": true, "RGBA4": true, "TEXTURE20": true, "VALIDATE_STATUS": true, "STENCIL_BITS": true, "TEXTURE_BINDING_2D": true, "TEXTURE4": true, "INT": true, "DEPTH_FUNC": true, "SAMPLER_2D": true, "BOOL": true, "MAX_VIEWPORT_DIMS": true, "ONE_MINUS_SRC_COLOR": true, "UNPACK_ALIGNMENT": true, "ALIASED_POINT_SIZE_RANGE": true, "INVALID_ENUM": true, "MAX_TEXTURE_SIZE": true, "SHADER_TYPE": true, "CULL_FACE_MODE": true, "TEXTURE5": true, "VERTEX_ATTRIB_ARRAY_POINTER": true, "TEXTURE_WRAP_S": true, "VERTEX_ATTRIB_ARRAY_STRIDE": true, "LINES": true, "EQUAL": true, "BLUE_BITS": true, "TEXTURE_WRAP_T": true, "DEPTH_BUFFER_BIT": true, "MAX_VERTEX_TEXTURE_IMAGE_UNITS": true, "ONE": true, "UNSIGNED_SHORT_5_6_5": true, "TEXTURE_CUBE_MAP_NEGATIVE_X": true, "TEXTURE_CUBE_MAP_NEGATIVE_Y": true, "TEXTURE_CUBE_MAP_NEGATIVE_Z": true, "DECR": true, "DELETE_STATUS": true, "DEPTH_BITS": true, "INCR": true, "SAMPLE_COVERAGE_VALUE": true, "ALPHA_BITS": true, "SAMPLE_ALPHA_TO_COVERAGE": true, "LINE_STRIP": true, "TEXTURE28": true, "INVALID_VALUE": true, "NEVER": true, "FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE": true, "BLEND_EQUATION_ALPHA": true, "TEXTURE_MAG_FILTER": true, "POINTS": true, "COLOR_ATTACHMENT0": true, "MAX_VERTEX_UNIFORM_VECTORS": true, "RGBA": true, "SRC_ALPHA_SATURATE": true, "STENCIL_INDEX8": true, "FRAMEBUFFER": true, "RGB565": true, "TEXTURE_CUBE_MAP": true, "SAMPLE_BUFFERS": true, "LINEAR": true, "TEXTURE29": true, "LINEAR_MIPMAP_NEAREST": true, "STENCIL_BACK_REF": true, "ELEMENT_ARRAY_BUFFER": true, "TRIANGLE_STRIP": true, "CONSTANT_COLOR": true, "COMPILE_STATUS": true, "RENDERBUFFER_GREEN_SIZE": true, "ALPHA": true, "TEXTURE3": true, "DEPTH_CLEAR_VALUE": true, "ALIASED_LINE_WIDTH_RANGE": true, "SHADING_LANGUAGE_VERSION": true, "STENCIL_PASS_DEPTH_PASS": true, "STENCIL_VALUE_MASK": true, "ALWAYS": true, "INVERT": true, "FLOAT": true, "FRAMEBUFFER_BINDING": true, "FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT": true, "UNPACK_PREMULTIPLY_ALPHA_WEBGL": true, "VENDOR": true, "HIGH_FLOAT": true, "SAMPLER_CUBE": true, "TRIANGLES": true, "CLAMP_TO_EDGE": true, "CURRENT_VERTEX_ATTRIB": true, "SCISSOR_TEST": true, "CONTEXT_LOST_WEBGL": true}, "constants": {}, "methods": {"activeTexture": true, "uniform4i": true, "isProgram": true, "stencilMaskSeparate": true, "checkFramebufferStatus": true, "uniform4f": true, "pixelStorei": true, "getProgramParameter": true, "uniformMatrix3fv": true, "hint": true, "isEnabled": true, "vertexAttrib1fv": true, "validateProgram": true, "attachShader": true, "getExtension": true, "createFramebuffer": true, "frontFace": true, "deleteFramebuffer": true, "uniform3i": true, "disable": true, "depthFunc": true, "isRenderbuffer": true, "finish": true, "uniform1iv": true, "copyTexImage2D": true, "clearDepth": true, "getShaderParameter": true, "disableVertexAttribArray": true, "getContextAttributes": true, "bufferData": true, "compileShader": true, "getTexParameter": true, "isTexture": true, "blendColor": true, "vertexAttrib3fv": true, "readPixels": true, "deleteTexture": true, "enableVertexAttribArray": true, "flush": true, "getBufferParameter": true, "createProgram": true, "uniform4iv": true, "uniform3iv": true, "drawArrays": true, "getParameter": true, "linkProgram": true, "framebufferTexture2D": true, "isBuffer": true, "createTexture": true, "vertexAttrib4f": true, "texImage2D": true, "createShader": true, "isContextLost": true, "bindRenderbuffer": true, "uniform2iv": true, "deleteShader": true, "getShaderInfoLog": true, "renderbufferStorage": true, "uniform4fv": true, "lineWidth": true, "copyTexSubImage2D": true, "texSubImage2D": true, "getActiveAttrib": true, "uniformMatrix2fv": true, "releaseShaderCompiler": true, "getProgramInfoLog": true, "blendFuncSeparate": true, "stencilFuncSeparate": true, "stencilOpSeparate": true, "vertexAttrib4fv": true, "blendEquation": true, "stencilFunc": true, "getError": true, "colorMask": true, "getActiveUniform": true, "vertexAttrib3f": true, "polygonOffset": true, "createRenderbuffer": true, "bufferSubData": true, "stencilMask": true, "enable": true, "depthMask": true, "isShader": true, "bindFramebuffer": true, "stencilOp": true, "uniform2fv": true, "createBuffer": true, "uniform2i": true, "getAttachedShaders": true, "useProgram": true, "viewport": true, "bindBuffer": true, "vertexAttribPointer": true, "getAttribLocation": true, "getVertexAttrib": true, "uniformMatrix4fv": true, "vertexAttrib2f": true, "cullFace": true, "deleteRenderbuffer": true, "vertexAttrib2fv": true, "clearStencil": true, "vertexAttrib1f": true, "getRenderbufferParameter": true, "getFramebufferAttachmentParameter": true, "deleteBuffer": true, "uniform1fv": true, "uniform1f": true, "getShaderSource": true, "getUniform": true, "clearColor": true, "depthRange": true, "uniform2f": true, "deleteProgram": true, "blendEquationSeparate": true, "detachShader": true, "uniform3fv": true, "sampleCoverage": true, "blendFunc": true, "generateMipmap": true, "drawElements": true, "texParameteri": true, "getUniformLocation": true, "uniform3f": true, "shaderSource": true, "bindAttribLocation": true, "clear": true, "getVertexAttribOffset": true, "scissor": true, "isFramebuffer": true, "texParameterf": true, "framebufferRenderbuffer": true, "bindTexture": true, "uniform1i": true}}, "MediaQueryListListener": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"queryChanged": true}}, "Float32Array": {"constructors": {}, "properties": {"length": true, "BYTES_PER_ELEMENT": true}, "constants": {}, "methods": {"subarray": true}}, "AudioChannelSplitter": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "SVGPathSegLinetoRel": {"constructors": {}, "properties": {"y": true, "x": true}, "constants": {}, "methods": {}}, "HTMLTableColElement": {"constructors": {}, "properties": {"ch": true, "span": true, "chOff": true, "align": true, "width": true, "vAlign": true}, "constants": {}, "methods": {}}, "XMLHttpRequestProgressEvent": {"constructors": {}, "properties": {"totalSize": true, "position": true}, "constants": {}, "methods": {}}, "SVGScriptElement": {"constructors": {}, "properties": {"type": true}, "constants": {}, "methods": {}}, "AudioGain": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "IDBTransaction": {"constructors": {}, "properties": {"READ_ONLY": true, "onabort": true, "READ_WRITE": true, "oncomplete": true, "db": true, "onerror": true, "mode": true, "VERSION_CHANGE": true}, "constants": {}, "methods": {"dispatchEvent": true, "removeEventListener": true, "abort": true, "objectStore": true, "addEventListener": true}}, "HTMLModElement": {"constructors": {}, "properties": {"cite": true, "dateTime": true}, "constants": {}, "methods": {}}, "NavigatorUserMediaSuccessCallback": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "DatabaseSync": {"constructors": {}, "properties": {"version": true}, "constants": {}, "methods": {"changeVersion": true, "readTransaction": true, "transaction": true}}, "SVGPaint": {"constructors": {}, "properties": {"SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR": true, "SVG_PAINTTYPE_NONE": true, "SVG_PAINTTYPE_URI_NONE": true, "SVG_PAINTTYPE_URI_RGBCOLOR": true, "SVG_PAINTTYPE_URI_CURRENTCOLOR": true, "uri": true, "SVG_PAINTTYPE_CURRENTCOLOR": true, "SVG_PAINTTYPE_URI": true, "SVG_PAINTTYPE_RGBCOLOR": true, "SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR": true, "SVG_PAINTTYPE_UNKNOWN": true, "paintType": true}, "constants": {}, "methods": {"setUri": true, "setPaint": true}}, "SVGTextPathElement": {"constructors": {}, "properties": {"TEXTPATH_METHODTYPE_UNKNOWN": true, "TEXTPATH_SPACINGTYPE_UNKNOWN": true, "TEXTPATH_SPACINGTYPE_AUTO": true, "spacing": true, "TEXTPATH_METHODTYPE_STRETCH": true, "startOffset": true, "TEXTPATH_METHODTYPE_ALIGN": true, "TEXTPATH_SPACINGTYPE_EXACT": true, "method": true}, "constants": {}, "methods": {}}, "WebKitLoseContext": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"restoreContext": true, "loseContext": true}}, "ArrayBuffer": {"constructors": {}, "properties": {"byteLength": true}, "constants": {}, "methods": {"slice": true}}, "SVGPathSegArcRel": {"constructors": {}, "properties": {"angle": true, "largeArcFlag": true, "r2": true, "sweepFlag": true, "y": true, "x": true, "r1": true}, "constants": {}, "methods": {}}, "Touch": {"constructors": {}, "properties": {"clientX": true, "clientY": true, "identifier": true, "target": true, "webkitRotationAngle": true, "webkitForce": true, "pageX": true, "pageY": true, "screenY": true, "screenX": true, "webkitRadiusY": true, "webkitRadiusX": true}, "constants": {}, "methods": {}}, "IDBDatabase": {"constructors": {}, "properties": {"onabort": true, "onerror": true, "onversionchange": true, "version": true, "name": true}, "constants": {}, "methods": {"transaction": true, "createObjectStore": true, "removeEventListener": true, "addEventListener": true, "dispatchEvent": true, "close": true, "deleteObjectStore": true, "setVersion": true}}, "Notification": {"constructors": {}, "properties": {"onerror": true, "onclose": true, "ondisplay": true, "dir": true, "onclick": true, "replaceId": true}, "constants": {}, "methods": {"cancel": true, "removeEventListener": true, "dispatchEvent": true, "show": true, "addEventListener": true}}, "IDBKey": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "SVGColor": {"constructors": {}, "properties": {"SVG_COLORTYPE_RGBCOLOR": true, "rgbColor": true, "SVG_COLORTYPE_UNKNOWN": true, "colorType": true, "SVG_COLORTYPE_RGBCOLOR_ICCCOLOR": true, "SVG_COLORTYPE_CURRENTCOLOR": true}, "constants": {}, "methods": {"setRGBColorICCColor": true, "setColor": true, "setRGBColor": true}}, "XPathExpression": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"evaluate": true}}, "ProgressEvent": {"constructors": {}, "properties": {"loaded": true, "lengthComputable": true, "total": true}, "constants": {}, "methods": {"initProgressEvent": true}}, "IDBKeyRange": {"constructors": {}, "properties": {"upper": true, "lower": true, "lowerOpen": true, "upperOpen": true}, "constants": {}, "methods": {"only": true, "lowerBound": true, "bound": true, "upperBound": true}}, "Int16Array": {"constructors": {}, "properties": {"length": true, "BYTES_PER_ELEMENT": true}, "constants": {}, "methods": {"subarray": true}}, "Screen": {"constructors": {}, "properties": {"availLeft": true, "pixelDepth": true, "width": true, "availHeight": true, "height": true, "availWidth": true, "availTop": true, "colorDepth": true}, "constants": {}, "methods": {}}, "Uint8Array": {"constructors": {}, "properties": {"length": true, "BYTES_PER_ELEMENT": true}, "constants": {}, "methods": {"subarray": true}}, "MediaList": {"constructors": {}, "properties": {"mediaText": true, "length": true}, "constants": {}, "methods": {"deleteMedium": true, "appendMedium": true, "item": true}}, "XPathNSResolver": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"lookupNamespaceURI": true}}, "PositionCallback": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "HTMLOptGroupElement": {"constructors": {}, "properties": {"disabled": true, "label": true}, "constants": {}, "methods": {}}, "Database": {"constructors": {}, "properties": {"version": true}, "constants": {}, "methods": {"changeVersion": true, "readTransaction": true, "transaction": true}}, "SVGTransformList": {"constructors": {}, "properties": {"numberOfItems": true}, "constants": {}, "methods": {"consolidate": true, "replaceItem": true, "appendItem": true, "clear": true, "getItem": true, "removeItem": true, "initialize": true, "insertItemBefore": true, "createSVGTransformFromMatrix": true}}, "FileError": {"constructors": {}, "properties": {"SYNTAX_ERR": true, "SECURITY_ERR": true, "NOT_FOUND_ERR": true, "NOT_READABLE_ERR": true, "INVALID_STATE_ERR": true, "code": true, "INVALID_MODIFICATION_ERR": true, "NO_MODIFICATION_ALLOWED_ERR": true, "ABORT_ERR": true, "QUOTA_EXCEEDED_ERR": true, "PATH_EXISTS_ERR": true, "TYPE_MISMATCH_ERR": true, "ENCODING_ERR": true}, "constants": {}, "methods": {}}, "DOMWindow": {"constructors": {}, "properties": {"defaultStatus": true, "onreset": true, "personalbar": true, "ondurationchange": true, "onmousewheel": true, "pageXOffset": true, "menubar": true, "onload": true, "oninput": true, "locationbar": true, "console": true, "outerWidth": true, "innerHeight": true, "opener": true, "onmousemove": true, "location": true, "onsubmit": true, "onkeypress": true, "ononline": true, "onstalled": true, "onsearch": true, "onseeking": true, "name": true, "oncanplaythrough": true, "crypto": true, "onkeyup": true, "clientInformation": true, "onwaiting": true, "screenTop": true, "onchange": true, "event": true, "ontimeupdate": true, "onwebkitanimationstart": true, "ondragleave": true, "innerWidth": true, "onresize": true, "onselect": true, "closed": true, "onemptied": true, "onfocus": true, "ondrag": true, "onoffline": true, "parent": true, "sessionStorage": true, "screen": true, "onkeydown": true, "webkitURL": true, "onwebkitanimationiteration": true, "applicationCache": true, "toolbar": true, "onprogress": true, "scrollX": true, "scrollY": true, "onbeforeunload": true, "length": true, "onmessage": true, "onseeked": true, "onloadeddata": true, "outerHeight": true, "onscroll": true, "frames": true, "navigator": true, "onsuspend": true, "oninvalid": true, "onabort": true, "ondevicemotion": true, "onratechange": true, "top": true, "window": true, "onwebkitanimationend": true, "localStorage": true, "onmouseup": true, "screenY": true, "screenX": true, "onstorage": true, "pageYOffset": true, "onblur": true, "onmouseout": true, "onvolumechange": true, "onpopstate": true, "oncontextmenu": true, "ontouchend": true, "onunload": true, "devicePixelRatio": true, "screenLeft": true, "statusbar": true, "onpagehide": true, "history": true, "onerror": true, "ondragenter": true, "styleMedia": true, "onmousedown": true, "onplay": true, "onpause": true, "scrollbars": true, "webkitNotifications": true, "onloadstart": true, "defaultstatus": true, "ondragover": true, "self": true, "onclick": true, "performance": true, "document": true, "oncanplay": true, "status": true, "onended": true, "onhashchange": true, "ondragstart": true, "onpageshow": true, "frameElement": true, "offscreenBuffering": true, "ondrop": true, "ondeviceorientation": true, "onwebkittransitionend": true, "onloadedmetadata": true, "ondragend": true, "ontouchcancel": true, "ontouchmove": true, "onplaying": true, "ondblclick": true, "ontouchstart": true, "onmouseover": true}, "constants": {}, "methods": {"moveTo": true, "getMatchedCSSRules": true, "scrollTo": true, "clearTimeout": true, "prompt": true, "focus": true, "releaseEvents": true, "close": true, "open": true, "find": true, "webkitConvertPointFromPageToNode": true, "setTimeout": true, "confirm": true, "getComputedStyle": true, "resizeBy": true, "moveBy": true, "addEventListener": true, "print": true, "webkitConvertPointFromNodeToPage": true, "removeEventListener": true, "setInterval": true, "getSelection": true, "blur": true, "stop": true, "clearInterval": true, "webkitRequestAnimationFrame": true, "atob": true, "alert": true, "postMessage": true, "showModalDialog": true, "scrollBy": true, "btoa": true, "matchMedia": true, "captureEvents": true, "resizeTo": true, "dispatchEvent": true, "webkitPostMessage": true, "webkitCancelRequestAnimationFrame": true, "scroll": true}}, "OverflowEvent": {"constructors": {}, "properties": {"BOTH": true, "VERTICAL": true, "horizontalOverflow": true, "HORIZONTAL": true, "orient": true, "verticalOverflow": true}, "constants": {}, "methods": {"initOverflowEvent": true}}, "SpeechInputResultList": {"constructors": {}, "properties": {"length": true}, "constants": {}, "methods": {"item": true}}, "CSSPageRule": {"constructors": {}, "properties": {"style": true, "selectorText": true}, "constants": {}, "methods": {}}, "History": {"constructors": {}, "properties": {"length": true}, "constants": {}, "methods": {"forward": true, "go": true, "pushState": true, "replaceState": true, "back": true}}, "SVGPoint": {"constructors": {}, "properties": {"y": true, "x": true}, "constants": {}, "methods": {"matrixTransform": true}}, "NodeIterator": {"constructors": {}, "properties": {"referenceNode": true, "filter": true, "whatToShow": true, "root": true, "expandEntityReferences": true, "pointerBeforeReferenceNode": true}, "constants": {}, "methods": {"previousNode": true, "detach": true, "nextNode": true}}, "SVGLangSpace": {"constructors": {}, "properties": {"xmlspace": true, "xmllang": true}, "constants": {}, "methods": {}}, "DynamicsCompressorNode": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "FileWriter": {"constructors": {}, "properties": {"onabort": true, "readyState": true, "onerror": true, "onwrite": true, "onprogress": true, "length": true, "WRITING": true, "onwritestart": true, "INIT": true, "DONE": true, "error": true, "position": true, "onwriteend": true}, "constants": {}, "methods": {"write": true, "abort": true, "seek": true, "truncate": true}}, "SVGAnimationElement": {"constructors": {}, "properties": {"targetElement": true}, "constants": {}, "methods": {"getStartTime": true, "getCurrentTime": true, "getSimpleDuration": true}}, "XMLHttpRequest": {"constructors": {}, "properties": {"onabort": true, "onload": true, "readyState": true, "LOADING": true, "responseText": true, "OPENED": true, "asBlob": true, "onerror": true, "responseType": true, "status": true, "onprogress": true, "upload": true, "responseXML": true, "UNSENT": true, "DONE": true, "statusText": true, "HEADERS_RECEIVED": true, "responseBlob": true, "onreadystatechange": true, "onloadstart": true, "withCredentials": true}, "constants": {}, "methods": {"removeEventListener": true, "getAllResponseHeaders": true, "overrideMimeType": true, "addEventListener": true, "setRequestHeader": true, "send": true, "getResponseHeader": true, "abort": true, "dispatchEvent": true, "open": true}}, "HTMLOListElement": {"constructors": {}, "properties": {"compact": true, "start": true, "type": true}, "constants": {}, "methods": {}}, "SVGComponentTransferFunctionElement": {"constructors": {}, "properties": {"slope": true, "exponent": true, "SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY": true, "type": true, "SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN": true, "SVG_FECOMPONENTTRANSFER_TYPE_TABLE": true, "intercept": true, "amplitude": true, "offset": true, "SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE": true, "SVG_FECOMPONENTTRANSFER_TYPE_LINEAR": true, "SVG_FECOMPONENTTRANSFER_TYPE_GAMMA": true, "tableValues": true}, "constants": {}, "methods": {}}, "HTMLPreElement": {"constructors": {}, "properties": {"wrap": true, "width": true}, "constants": {}, "methods": {}}, "CloseEvent": {"constructors": {}, "properties": {"reason": true, "code": true, "wasClean": true}, "constants": {}, "methods": {"initCloseEvent": true}}, "MemoryInfo": {"constructors": {}, "properties": {"totalJSHeapSize": true, "usedJSHeapSize": true, "jsHeapSizeLimit": true}, "constants": {}, "methods": {}}, "XMLSerializer": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"serializeToString": true}}, "StyleMedia": {"constructors": {}, "properties": {"type": true}, "constants": {}, "methods": {"matchMedium": true}}, "SVGDefsElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "SVGRectElement": {"constructors": {}, "properties": {"rx": true, "ry": true, "height": true, "width": true, "y": true, "x": true}, "constants": {}, "methods": {}}, "StorageInfoUsageCallback": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "HTMLMapElement": {"constructors": {}, "properties": {"name": true, "areas": true}, "constants": {}, "methods": {}}, "MessageChannel": {"constructors": {}, "properties": {"port2": true, "port1": true}, "constants": {}, "methods": {}}, "SVGUseElement": {"constructors": {}, "properties": {"width": true, "height": true, "instanceRoot": true, "animatedInstanceRoot": true, "y": true, "x": true}, "constants": {}, "methods": {}}, "SVGImageElement": {"constructors": {}, "properties": {"y": true, "width": true, "preserveAspectRatio": true, "x": true, "height": true}, "constants": {}, "methods": {}}, "SVGElementInstance": {"constructors": {}, "properties": {"onmousedown": true, "onerror": true, "ondragenter": true, "onreset": true, "nextSibling": true, "ondragleave": true, "onscroll": true, "parentNode": true, "oncopy": true, "onmousewheel": true, "onbeforepaste": true, "childNodes": true, "onabort": true, "onload": true, "oninput": true, "onchange": true, "onmouseout": true, "ondragover": true, "onbeforecut": true, "onresize": true, "onselect": true, "onmousemove": true, "onclick": true, "onfocus": true, "ondrag": true, "previousSibling": true, "onpaste": true, "onblur": true, "onsubmit": true, "ondragstart": true, "onmouseup": true, "ondrop": true, "onkeypress": true, "onkeydown": true, "onmouseover": true, "onbeforecopy": true, "lastChild": true, "onsearch": true, "oncontextmenu": true, "onunload": true, "ondblclick": true, "ondragend": true, "firstChild": true, "oncut": true, "correspondingUseElement": true, "onkeyup": true, "correspondingElement": true, "onselectstart": true}, "constants": {}, "methods": {"removeEventListener": true, "dispatchEvent": true, "addEventListener": true}}, "SharedWorkercontext": {"constructors": {}, "properties": {"name": true, "onconnect": true}, "constants": {}, "methods": {}}, "SQLTransaction": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "CanvasRenderingContext": {"constructors": {}, "properties": {"canvas": true}, "constants": {}, "methods": {}}, "PopStateEvent": {"constructors": {}, "properties": {"state": true}, "constants": {}, "methods": {"initPopStateEvent": true}}, "HTMLHeadingElement": {"constructors": {}, "properties": {"align": true}, "constants": {}, "methods": {}}, "HTMLCanvasElement": {"constructors": {}, "properties": {"width": true, "height": true}, "constants": {}, "methods": {"toDataURL": true, "getContext": true}}, "AudioProcessingEvent": {"constructors": {}, "properties": {"inputBuffer": true, "outputBuffer": true}, "constants": {}, "methods": {}}, "SVGFEGaussianBlurElement": {"constructors": {}, "properties": {"stdDeviationY": true, "in1": true, "stdDeviationX": true}, "constants": {}, "methods": {"setStdDeviation": true}}, "AudioNode": {"constructors": {}, "properties": {"numberOfInputs": true, "context": true, "numberOfOutputs": true}, "constants": {}, "methods": {"disconnect": true, "connect": true}}, "SpeechInputEvent": {"constructors": {}, "properties": {"results": true}, "constants": {}, "methods": {}}, "InspectorFrontendHost": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"saveAs": true, "recordPanelShown": true, "disconnectFromBackend": true, "bringToFront": true, "port": true, "showContextMenu": true, "requestDetachWindow": true, "inspectedURLChanged": true, "moveWindowBy": true, "platform": true, "setExtensionAPI": true, "closeWindow": true, "setAttachedWindowHeight": true, "localizedStringsURL": true, "requestAttachWindow": true, "sendMessageToBackend": true, "loaded": true, "copyText": true, "recordSettingChanged": true, "hiddenPanels": true, "recordActionTaken": true}}, "SVGFontFaceUriElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "SVGFontFaceElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "NavigatorUserMediaError": {"constructors": {}, "properties": {"PERMISSION_DENIED": true, "code": true}, "constants": {}, "methods": {}}, "SVGFEFuncBElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "UIEvent": {"constructors": {}, "properties": {"which": true, "layerY": true, "layerX": true, "detail": true, "pageX": true, "pageY": true, "charCode": true, "keyCode": true, "view": true}, "constants": {}, "methods": {"initUIEvent": true}}, "Coordinates": {"constructors": {}, "properties": {"altitude": true, "longitude": true, "latitude": true, "altitudeAccuracy": true, "speed": true, "heading": true, "accuracy": true}, "constants": {}, "methods": {}}, "MediaQueryList": {"constructors": {}, "properties": {"matches": true, "media": true}, "constants": {}, "methods": {"addListener": true, "removeListener": true}}, "SVGAnimateMotionElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "Document": {"constructors": {}, "properties": {"domain": true, "onmousedown": true, "onselect": true, "links": true, "onerror": true, "ondragenter": true, "characterSet": true, "onblur": true, "ondragleave": true, "onscroll": true, "onsubmit": true, "oncopy": true, "onmousewheel": true, "images": true, "compatMode": true, "onbeforepaste": true, "onchange": true, "ontouchstart": true, "oninvalid": true, "documentURI": true, "onload": true, "oninput": true, "onpaste": true, "onmouseout": true, "ondragover": true, "title": true, "applets": true, "charset": true, "selectedStylesheetSet": true, "onbeforecut": true, "forms": true, "onmouseup": true, "onmousemove": true, "location": true, "onclick": true, "onfocus": true, "ondrag": true, "onwebkitfullscreenchange": true, "body": true, "onabort": true, "head": true, "onreset": true, "ondragstart": true, "anchors": true, "ondrop": true, "onkeypress": true, "URL": true, "xmlEncoding": true, "onkeydown": true, "webkitVisibilityState": true, "xmlStandalone": true, "cookie": true, "onmouseover": true, "inputEncoding": true, "preferredStylesheetSet": true, "onbeforecopy": true, "defaultView": true, "webkitHidden": true, "onsearch": true, "oncontextmenu": true, "ontouchend": true, "readyState": true, "ondragend": true, "documentElement": true, "ontouchcancel": true, "ontouchmove": true, "lastModified": true, "xmlVersion": true, "doctype": true, "styleSheets": true, "oncut": true, "implementation": true, "referrer": true, "onkeyup": true, "onselectionchange": true, "ondblclick": true, "onselectstart": true, "onreadystatechange": true, "defaultCharset": true}, "constants": {}, "methods": {"createAttribute": true, "getCSSCanvasContext": true, "adoptNode": true, "getOverrideStyle": true, "createDocumentFragment": true, "createProcessingInstruction": true, "createComment": true, "getElementsByClassName": true, "createAttributeNS": true, "queryCommandIndeterm": true, "getElementsByTagName": true, "getSelection": true, "createExpression": true, "createNSResolver": true, "createCDATASection": true, "evaluate": true, "createElementNS": true, "queryCommandState": true, "getElementsByTagNameNS": true, "createEntityReference": true, "createTreeWalker": true, "querySelector": true, "queryCommandValue": true, "createElement": true, "queryCommandSupported": true, "getElementsByName": true, "caretRangeFromPoint": true, "querySelectorAll": true, "execCommand": true, "importNode": true, "queryCommandEnabled": true, "getElementById": true, "createRange": true, "elementFromPoint": true, "createEvent": true, "createNodeIterator": true, "createTextNode": true}}, "SVGUnitTypes": {"constructors": {}, "properties": {"SVG_UNIT_TYPE_OBJECTBOUNDINGBOX": true, "SVG_UNIT_TYPE_UNKNOWN": true, "SVG_UNIT_TYPE_USERSPACEONUSE": true}, "constants": {}, "methods": {}}, "SVGForeignObjectElement": {"constructors": {}, "properties": {"y": true, "width": true, "x": true, "height": true}, "constants": {}, "methods": {}}, "SVGMarkerElement": {"constructors": {}, "properties": {"refY": true, "refX": true, "SVG_MARKERUNITS_USERSPACEONUSE": true, "markerUnits": true, "SVG_MARKER_ORIENT_ANGLE": true, "SVG_MARKER_ORIENT_UNKNOWN": true, "SVG_MARKER_ORIENT_AUTO": true, "SVG_MARKERUNITS_UNKNOWN": true, "SVG_MARKERUNITS_STROKEWIDTH": true, "orientType": true, "markerWidth": true, "orientAngle": true, "markerHeight": true}, "constants": {}, "methods": {"setOrientToAngle": true, "setOrientToAuto": true}}, "SVGPathElement": {"constructors": {}, "properties": {"pathSegList": true, "normalizedPathSegList": true, "animatedNormalizedPathSegList": true, "animatedPathSegList": true, "pathLength": true}, "constants": {}, "methods": {"createSVGPathSegArcRel": true, "createSVGPathSegMovetoAbs": true, "createSVGPathSegLinetoAbs": true, "createSVGPathSegArcAbs": true, "createSVGPathSegMovetoRel": true, "createSVGPathSegCurvetoCubicRel": true, "createSVGPathSegLinetoRel": true, "createSVGPathSegLinetoVerticalAbs": true, "createSVGPathSegCurvetoQuadraticRel": true, "createSVGPathSegLinetoVerticalRel": true, "getPointAtLength": true, "getPathSegAtLength": true, "createSVGPathSegLinetoHorizontalAbs": true, "getTotalLength": true, "createSVGPathSegCurvetoQuadraticAbs": true, "createSVGPathSegCurvetoCubicAbs": true, "createSVGPathSegCurvetoCubicSmoothRel": true, "createSVGPathSegClosePath": true, "createSVGPathSegLinetoHorizontalRel": true, "createSVGPathSegCurvetoCubicSmoothAbs": true, "createSVGPathSegCurvetoQuadraticSmoothRel": true, "createSVGPathSegCurvetoQuadraticSmoothAbs": true}}, "DocumentType": {"constructors": {}, "properties": {"publicId": true, "name": true, "notations": true, "entities": true, "internalSubset": true, "systemId": true}, "constants": {}, "methods": {}}, "DeviceMotionEvent": {"constructors": {}, "properties": {"interval": true}, "constants": {}, "methods": {}}, "Rect": {"constructors": {}, "properties": {"top": true, "left": true, "right": true, "bottom": true}, "constants": {}, "methods": {}}, "StorageEvent": {"constructors": {}, "properties": {"url": true, "oldValue": true, "storageArea": true, "newValue": true, "key": true}, "constants": {}, "methods": {"initStorageEvent": true}}, "PositionError": {"constructors": {}, "properties": {"PERMISSION_DENIED": true, "message": true, "code": true, "TIMEOUT": true, "POSITION_UNAVAILABLE": true}, "constants": {}, "methods": {}}, "SVGRenderingIntent": {"constructors": {}, "properties": {"RENDERING_INTENT_ABSOLUTE_COLORIMETRIC": true, "RENDERING_INTENT_SATURATION": true, "RENDERING_INTENT_UNKNOWN": true, "RENDERING_INTENT_PERCEPTUAL": true, "RENDERING_INTENT_RELATIVE_COLORIMETRIC": true, "RENDERING_INTENT_AUTO": true}, "constants": {}, "methods": {}}, "SVGPathSegList": {"constructors": {}, "properties": {"numberOfItems": true}, "constants": {}, "methods": {"replaceItem": true, "appendItem": true, "clear": true, "getItem": true, "removeItem": true, "initialize": true, "insertItemBefore": true}}, "SVGTRefElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "SVGAnimatedBoolean": {"constructors": {}, "properties": {"animVal": true, "baseVal": true}, "constants": {}, "methods": {}}, "SVGFEOffsetElement": {"constructors": {}, "properties": {"in1": true, "dx": true, "dy": true}, "constants": {}, "methods": {}}, "WebKitCSSMatrix": {"constructors": {}, "properties": {"m11": true, "m13": true, "m12": true, "m14": true, "m44": true, "m34": true, "m33": true, "m32": true, "m31": true, "a": true, "c": true, "b": true, "e": true, "d": true, "f": true, "m24": true, "m43": true, "m41": true, "m21": true, "m22": true, "m23": true, "m42": true}, "constants": {}, "methods": {"inverse": true, "rotateAxisAngle": true, "rotate": true, "toString": true, "scale": true, "skewY": true, "skewX": true, "multiply": true, "translate": true, "setMatrixValue": true}}, "HTMLAudioElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "BarInfo": {"constructors": {}, "properties": {"visible": true}, "constants": {}, "methods": {}}, "AudioPannerNode": {"constructors": {}, "properties": {"distanceGain": true, "EQUALPOWER": true, "distanceModel": true, "SOUNDFIELD": true, "HRTF": true, "panningModel": true, "coneInnerAngle": true, "coneOuterAngle": true, "maxDistance": true, "refDistance": true, "rolloffFactor": true, "coneGain": true, "coneOuterGain": true}, "constants": {}, "methods": {"setOrientation": true, "setPosition": true, "setVelocity": true}}, "HTMLVideoElement": {"constructors": {}, "properties": {"width": true, "poster": true, "webkitDecodedFrameCount": true, "height": true, "webkitSupportsFullscreen": true, "webkitDisplayingFullscreen": true, "webkitDroppedFrameCount": true, "videoWidth": true, "videoHeight": true}, "constants": {}, "methods": {"webkitExitFullScreen": true, "webkitEnterFullScreen": true, "webkitEnterFullscreen": true, "webkitExitFullscreen": true}}, "DOMMimeType": {"constructors": {}, "properties": {"suffixes": true, "type": true, "description": true, "enabledPlugin": true}, "constants": {}, "methods": {}}, "AudioGainNode": {"constructors": {}, "properties": {"gain": true}, "constants": {}, "methods": {}}, "Storage": {"constructors": {}, "properties": {"length": true}, "constants": {}, "methods": {"setItem": true, "clear": true, "key": true, "getItem": true, "removeItem": true}}, "SVGGlyphRefElement": {"constructors": {}, "properties": {"format": true, "dx": true, "dy": true, "y": true, "x": true, "glyphRef": true}, "constants": {}, "methods": {}}, "Location": {"constructors": {}, "properties": {"origin": true, "search": true, "hash": true, "hostname": true, "host": true, "href": true, "pathname": true, "protocol": true, "port": true}, "constants": {}, "methods": {"reload": true, "replace": true, "toString": true, "assign": true, "getParameter": true}}, "DOMSettableTokenList": {"constructors": {}, "properties": {"value": true}, "constants": {}, "methods": {}}, "Performance": {"constructors": {}, "properties": {"timing": true, "navigation": true, "memory": true}, "constants": {}, "methods": {}}, "HTMLFrameElement": {"constructors": {}, "properties": {"src": true, "contentDocument": true, "name": true, "noResize": true, "height": true, "width": true, "contentWindow": true, "location": true, "marginHeight": true, "scrolling": true, "longDesc": true, "frameBorder": true, "marginWidth": true}, "constants": {}, "methods": {}}, "SVGTextElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "HTMLDListElement": {"constructors": {}, "properties": {"compact": true}, "constants": {}, "methods": {}}, "AudioSourceNode": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "SVGFEFuncRElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "SVGLineElement": {"constructors": {}, "properties": {"x2": true, "y1": true, "x1": true, "y2": true}, "constants": {}, "methods": {}}, "SVGAnimatedNumberList": {"constructors": {}, "properties": {"animVal": true, "baseVal": true}, "constants": {}, "methods": {}}, "HTMLOutputElement": {"constructors": {}, "properties": {"name": true, "form": true, "htmlFor": true, "defaultValue": true, "labels": true, "validity": true, "willValidate": true, "value": true, "type": true, "validationMessage": true}, "constants": {}, "methods": {"setCustomValidity": true, "checkValidity": true}}, "SVGAnimatedLength": {"constructors": {}, "properties": {"animVal": true, "baseVal": true}, "constants": {}, "methods": {}}, "Counter": {"constructors": {}, "properties": {"identifier": true, "separator": true, "listStyle": true}, "constants": {}, "methods": {}}, "HTMLIsIndexElement": {"constructors": {}, "properties": {"prompt": true, "form": true}, "constants": {}, "methods": {}}, "HTMLParagraphElement": {"constructors": {}, "properties": {"align": true}, "constants": {}, "methods": {}}, "SVGFitToViewBox": {"constructors": {}, "properties": {"preserveAspectRatio": true, "viewBox": true}, "constants": {}, "methods": {}}, "DOMApplicationCache": {"constructors": {}, "properties": {"status": true, "DOWNLOADING": true, "ondownloading": true, "onchecking": true, "CHECKING": true, "UNCACHED": true, "onprogress": true, "OBSOLETE": true, "onerror": true, "IDLE": true, "UPDATEREADY": true, "onobsolete": true, "oncached": true, "onnoupdate": true, "onupdateready": true}, "constants": {}, "methods": {"removeEventListener": true, "dispatchEvent": true, "swapCache": true, "update": true, "addEventListener": true}}, "SVGAnimatedAngle": {"constructors": {}, "properties": {"animVal": true, "baseVal": true}, "constants": {}, "methods": {}}, "SVGNumberList": {"constructors": {}, "properties": {"numberOfItems": true}, "constants": {}, "methods": {"replaceItem": true, "appendItem": true, "clear": true, "getItem": true, "removeItem": true, "initialize": true, "insertItemBefore": true}}, "HTMLAppletElement": {"constructors": {}, "properties": {"code": true, "name": true, "align": true, "object": true, "height": true, "codeBase": true, "width": true, "vspace": true, "alt": true, "hspace": true, "archive": true}, "constants": {}, "methods": {}}, "AudioDestinationNode": {"constructors": {}, "properties": {"numberOfChannels": true}, "constants": {}, "methods": {}}, "HTMLUListElement": {"constructors": {}, "properties": {"compact": true, "type": true}, "constants": {}, "methods": {}}, "SVGMPathElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "WebKitCSSKeyframeRule": {"constructors": {}, "properties": {"style": true, "keyText": true}, "constants": {}, "methods": {}}, "ConvolverNode": {"constructors": {}, "properties": {"buffer": true}, "constants": {}, "methods": {}}, "HTMLAllCollection": {"constructors": {}, "properties": {"length": true}, "constants": {}, "methods": {"item": true, "namedItem": true, "tags": true}}, "WebKitPoint": {"constructors": {}, "properties": {"y": true, "x": true}, "constants": {}, "methods": {}}, "ClientRectList": {"constructors": {}, "properties": {"length": true}, "constants": {}, "methods": {"item": true}}, "SVGViewSpec": {"constructors": {}, "properties": {"transformString": true, "viewTarget": true, "viewTargetString": true, "transform": true, "preserveAspectRatioString": true, "viewBoxString": true}, "constants": {}, "methods": {}}, "PageTransitionEvent": {"constructors": {}, "properties": {"persisted": true}, "constants": {}, "methods": {"initPageTransitionEvent": true}}, "ScriptProfile": {"constructors": {}, "properties": {"head": true, "uid": true, "title": true}, "constants": {}, "methods": {}}, "WebGLContextEvent": {"constructors": {}, "properties": {"statusMessage": true}, "constants": {}, "methods": {}}, "TimeRanges": {"constructors": {}, "properties": {"length": true}, "constants": {}, "methods": {"start": true, "end": true}}, "PerformanceNavigation": {"constructors": {}, "properties": {"TYPE_RELOAD": true, "redirectCount": true, "TYPE_RESERVED": true, "TYPE_NAVIGATE": true, "type": true, "TYPE_BACK_FORWARD": true}, "constants": {}, "methods": {}}, "SVGFEBlendElement": {"constructors": {}, "properties": {"SVG_FEBLEND_MODE_NORMAL": true, "SVG_FEBLEND_MODE_MULTIPLY": true, "SVG_FEBLEND_MODE_SCREEN": true, "in1": true, "in2": true, "SVG_FEBLEND_MODE_DARKEN": true, "mode": true, "SVG_FEBLEND_MODE_LIGHTEN": true, "SVG_FEBLEND_MODE_UNKNOWN": true}, "constants": {}, "methods": {}}, "CanvasRenderingContext2D": {"constructors": {}, "properties": {"strokeStyle": true, "webkitLineDash": true, "lineWidth": true, "shadowBlur": true, "globalAlpha": true, "lineCap": true, "shadowOffsetX": true, "shadowOffsetY": true, "globalCompositeOperation": true, "miterLimit": true, "fillStyle": true, "webkitLineDashOffset": true, "shadowColor": true, "textBaseline": true, "lineJoin": true, "font": true, "textAlign": true}, "constants": {}, "methods": {"quadraticCurveTo": true, "restore": true, "moveTo": true, "lineTo": true, "clip": true, "setTransform": true, "createPattern": true, "stroke": true, "arc": true, "createImageData": true, "measureText": true, "setLineJoin": true, "setLineWidth": true, "fill": true, "scale": true, "drawImage": true, "setCompositeOperation": true, "translate": true, "transform": true, "fillText": true, "strokeText": true, "setAlpha": true, "rect": true, "save": true, "createRadialGradient": true, "setShadow": true, "isPointInPath": true, "bezierCurveTo": true, "arcTo": true, "fillRect": true, "setFillColor": true, "clearShadow": true, "setLineCap": true, "beginPath": true, "clearRect": true, "drawImageFromRect": true, "rotate": true, "setMiterLimit": true, "putImageData": true, "getImageData": true, "createLinearGradient": true, "strokeRect": true, "closePath": true, "setStrokeColor": true}}, "FileReaderSync": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"readAsDataURL": true, "readAsText": true, "readAsArrayBuffer": true, "readAsBinaryString": true}}, "SVGEllipseElement": {"constructors": {}, "properties": {"cy": true, "cx": true, "rx": true, "ry": true}, "constants": {}, "methods": {}}, "HTMLScriptElement": {"constructors": {}, "properties": {"src": true, "htmlFor": true, "text": true, "charset": true, "defer": true, "async": true, "type": true, "event": true}, "constants": {}, "methods": {}}, "XMLHttpRequestException": {"constructors": {}, "properties": {"NETWORK_ERR": true, "message": true, "code": true, "name": true, "ABORT_ERR": true}, "constants": {}, "methods": {"toString": true}}, "JavaScriptCallFrame": {"constructors": {}, "properties": {"CLOSURE_SCOPE": true, "functionName": true, "column": true, "caller": true, "CATCH_SCOPE": true, "sourceID": true, "LOCAL_SCOPE": true, "scopeChain": true, "WITH_SCOPE": true, "GLOBAL_SCOPE": true, "line": true, "type": true}, "constants": {}, "methods": {"evaluate": true, "scopeType": true}}, "HTMLTrackElement": {"constructors": {}, "properties": {"src": true, "kind": true, "track": true, "label": true, "srclang": true, "isDefault": true}, "constants": {}, "methods": {}}, "AudioChannelMerger": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "PerformanceTiming": {"constructors": {}, "properties": {"secureConnectionStart": true, "redirectStart": true, "domContentLoadedEventStart": true, "responseEnd": true, "redirectEnd": true, "loadEventStart": true, "unloadEventStart": true, "domainLookupEnd": true, "connectEnd": true, "unloadEventEnd": true, "requestStart": true, "loadEventEnd": true, "navigationStart": true, "domLoading": true, "domInteractive": true, "fetchStart": true, "domComplete": true, "domContentLoadedEventEnd": true, "responseStart": true, "connectStart": true, "domainLookupStart": true}, "constants": {}, "methods": {}}, "SVGFilterPrimitiveStandardAttributes": {"constructors": {}, "properties": {"y": true, "width": true, "x": true, "result": true, "height": true}, "constants": {}, "methods": {}}, "NamedNodeMap": {"constructors": {}, "properties": {"length": true}, "constants": {}, "methods": {"removeNamedItemNS": true, "setNamedItemNS": true, "getNamedItemNS": true, "getNamedItem": true, "setNamedItem": true, "item": true, "removeNamedItem": true}}, "SVGFEDiffuseLightingElement": {"constructors": {}, "properties": {"surfaceScale": true, "kernelUnitLengthY": true, "diffuseConstant": true, "kernelUnitLengthX": true, "in1": true}, "constants": {}, "methods": {}}, "SVGGradientElement": {"constructors": {}, "properties": {"SVG_SPREADMETHOD_REFLECT": true, "SVG_SPREADMETHOD_UNKNOWN": true, "spreadMethod": true, "gradientUnits": true, "SVG_SPREADMETHOD_REPEAT": true, "gradientTransform": true, "SVG_SPREADMETHOD_PAD": true}, "constants": {}, "methods": {}}, "SVGPathSegCurvetoCubicRel": {"constructors": {}, "properties": {"y2": true, "y1": true, "y": true, "x2": true, "x": true, "x1": true}, "constants": {}, "methods": {}}, "SVGPathSegMovetoRel": {"constructors": {}, "properties": {"y": true, "x": true}, "constants": {}, "methods": {}}, "SVGTransform": {"constructors": {}, "properties": {"SVG_TRANSFORM_TRANSLATE": true, "angle": true, "matrix": true, "SVG_TRANSFORM_SKEWY": true, "SVG_TRANSFORM_SKEWX": true, "SVG_TRANSFORM_SCALE": true, "SVG_TRANSFORM_ROTATE": true, "SVG_TRANSFORM_MATRIX": true, "SVG_TRANSFORM_UNKNOWN": true, "type": true}, "constants": {}, "methods": {"setMatrix": true, "setRotate": true, "setScale": true, "setSkewX": true, "setSkewY": true, "setTranslate": true}}, "StringCallback": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "SVGZoomAndPan": {"constructors": {}, "properties": {"SVG_ZOOMANDPAN_UNKNOWN": true, "SVG_ZOOMANDPAN_MAGNIFY": true, "SVG_ZOOMANDPAN_DISABLE": true, "zoomAndPan": true}, "constants": {}, "methods": {}}, "SVGDescElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "WebGLDebugRendererInfo": {"constructors": {}, "properties": {"UNMASKED_VENDOR_WEBGL": true, "UNMASKED_RENDERER_WEBGL": true}, "constants": {}, "methods": {}}, "Uint16Array": {"constructors": {}, "properties": {"length": true, "BYTES_PER_ELEMENT": true}, "constants": {}, "methods": {"subarray": true}}, "DirectoryEntry": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"getFile": true, "createReader": true, "removeRecursively": true, "getDirectory": true}}, "CSSPrimitiveValue": {"constructors": {}, "properties": {"CSS_PX": true, "CSS_STRING": true, "CSS_PT": true, "CSS_COUNTER": true, "CSS_IDENT": true, "CSS_EMS": true, "CSS_CM": true, "CSS_PC": true, "CSS_PERCENTAGE": true, "CSS_RECT": true, "CSS_HZ": true, "CSS_EXS": true, "CSS_ATTR": true, "CSS_GRAD": true, "CSS_KHZ": true, "CSS_URI": true, "CSS_RGBCOLOR": true, "CSS_S": true, "CSS_RAD": true, "CSS_DIMENSION": true, "CSS_MS": true, "primitiveType": true, "CSS_DEG": true, "CSS_MM": true, "CSS_NUMBER": true, "CSS_IN": true, "CSS_UNKNOWN": true}, "constants": {}, "methods": {"getRGBColorValue": true, "getFloatValue": true, "setFloatValue": true, "getRectValue": true, "getStringValue": true, "getCounterValue": true, "setStringValue": true}}, "DirectoryEntrySync": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"getFile": true, "createReader": true, "removeRecursively": true, "getDirectory": true}}, "SVGAnimatedPreserveAspectRatio": {"constructors": {}, "properties": {"animVal": true, "baseVal": true}, "constants": {}, "methods": {}}, "Blob": {"constructors": {}, "properties": {"type": true, "size": true}, "constants": {}, "methods": {}}, "HTMLBRElement": {"constructors": {}, "properties": {"clear": true}, "constants": {}, "methods": {}}, "SVGAltGlyphDefElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "DOMMimeTypeArray": {"constructors": {}, "properties": {"length": true}, "constants": {}, "methods": {"item": true, "namedItem": true}}, "WebKitFlags": {"constructors": {}, "properties": {"exclusive": true, "create": true}, "constants": {}, "methods": {}}, "EntityReference": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "SpeechInputResult": {"constructors": {}, "properties": {"confidence": true, "utterance": true}, "constants": {}, "methods": {}}, "SQLStatementErrorCallback": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "AudioBufferCallback": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "CSSStyleRule": {"constructors": {}, "properties": {"style": true, "selectorText": true}, "constants": {}, "methods": {}}, "SVGPolylineElement": {"constructors": {}, "properties": {"animatedPoints": true, "points": true}, "constants": {}, "methods": {}}, "CanvasPattern": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "SQLTransactionSyncCallback": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "CSSImportRule": {"constructors": {}, "properties": {"media": true, "styleSheet": true, "href": true}, "constants": {}, "methods": {}}, "HTMLTableCaptionElement": {"constructors": {}, "properties": {"align": true}, "constants": {}, "methods": {}}, "SVGNumber": {"constructors": {}, "properties": {"value": true}, "constants": {}, "methods": {}}, "SVGPathSegCurvetoCubicSmoothRel": {"constructors": {}, "properties": {"x2": true, "x": true, "y2": true, "y": true}, "constants": {}, "methods": {}}, "AudioParam": {"constructors": {}, "properties": {"name": true, "defaultValue": true, "maxValue": true, "value": true, "minValue": true, "units": true}, "constants": {}, "methods": {"setValueAtTime": true, "linearRampToValueAtTime": true, "cancelScheduledValues": true, "exponentialRampToValueAtTime": true, "setTargetValueAtTime": true, "setValueCurveAtTime": true}}, "MessagePort": {"constructors": {}, "properties": {"onmessage": true}, "constants": {}, "methods": {"postMessage": true, "removeEventListener": true, "start": true, "addEventListener": true, "dispatchEvent": true, "webkitPostMessage": true, "close": true}}, "ElementTimeControl": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"beginElementAt": true, "beginElement": true, "endElementAt": true, "endElement": true}}, "SVGPathSegArcAbs": {"constructors": {}, "properties": {"angle": true, "largeArcFlag": true, "r2": true, "sweepFlag": true, "y": true, "x": true, "r1": true}, "constants": {}, "methods": {}}, "WebGLDebugShaders": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"getTranslatedShaderSource": true}}, "SVGFontElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "RangeException": {"constructors": {}, "properties": {"message": true, "code": true, "BAD_BOUNDARYPOINTS_ERR": true, "INVALID_NODE_TYPE_ERR": true, "name": true}, "constants": {}, "methods": {"toString": true}}, "LowPass2FilterNode": {"constructors": {}, "properties": {"cutoff": true, "resonance": true}, "constants": {}, "methods": {}}, "SVGElement": {"constructors": {}, "properties": {"ownerSVGElement": true, "viewportElement": true, "xmlbase": true, "id": true}, "constants": {}, "methods": {}}, "CSSValue": {"constructors": {}, "properties": {"cssValueType": true, "CSS_VALUE_LIST": true, "cssText": true, "CSS_INHERIT": true, "CSS_PRIMITIVE_VALUE": true, "CSS_CUSTOM": true}, "constants": {}, "methods": {}}, "ArrayBufferView": {"constructors": {}, "properties": {"buffer": true, "byteLength": true, "byteOffset": true}, "constants": {}, "methods": {}}, "HighPass2FilterNode": {"constructors": {}, "properties": {"cutoff": true, "resonance": true}, "constants": {}, "methods": {}}, "SVGFEConvolveMatrixElement": {"constructors": {}, "properties": {"divisor": true, "targetX": true, "kernelMatrix": true, "targetY": true, "bias": true, "in1": true, "edgeMode": true, "SVG_EDGEMODE_DUPLICATE": true, "orderX": true, "orderY": true, "SVG_EDGEMODE_UNKNOWN": true, "preserveAlpha": true, "kernelUnitLengthY": true, "SVG_EDGEMODE_NONE": true, "kernelUnitLengthX": true, "SVG_EDGEMODE_WRAP": true}, "constants": {}, "methods": {}}, "SVGAnimatedEnumeration": {"constructors": {}, "properties": {"animVal": true, "baseVal": true}, "constants": {}, "methods": {}}, "SVGAnimateColorElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "Geoposition": {"constructors": {}, "properties": {"timestamp": true, "coords": true}, "constants": {}, "methods": {}}, "HTMLDataListElement": {"constructors": {}, "properties": {"options": true}, "constants": {}, "methods": {}}, "Console": {"constructors": {}, "properties": {"memory": true}, "constants": {}, "methods": {"count": true, "info": true, "group": true, "log": true, "trace": true, "timeStamp": true, "dirxml": true, "time": true, "timeEnd": true, "assert": true, "groupEnd": true, "groupCollapsed": true, "warn": true, "error": true, "debug": true, "markTimeline": true, "dir": true}}, "HTMLMediaElement": {"constructors": {}, "properties": {"NETWORK_LOADING": true, "buffered": true, "HAVE_FUTURE_DATA": true, "HAVE_ENOUGH_DATA": true, "played": true, "webkitVideoDecodedByteCount": true, "paused": true, "ended": true, "currentSrc": true, "duration": true, "defaultMuted": true, "muted": true, "controls": true, "NETWORK_NO_SOURCE": true, "preload": true, "seeking": true, "HAVE_CURRENT_DATA": true, "webkitAudioDecodedByteCount": true, "webkitPreservesPitch": true, "volume": true, "networkState": true, "startTime": true, "NETWORK_IDLE": true, "seekable": true, "initialTime": true, "src": true, "readyState": true, "NETWORK_EMPTY": true, "currentTime": true, "HAVE_NOTHING": true, "webkitClosedCaptionsVisible": true, "playbackRate": true, "HAVE_METADATA": true, "defaultPlaybackRate": true, "error": true, "webkitHasClosedCaptions": true, "loop": true, "autoplay": true}, "constants": {}, "methods": {"load": true, "play": true, "pause": true, "canPlayType": true}}, "SVGMissingGlyphElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "DOMPlugin": {"constructors": {}, "properties": {"length": true, "description": true, "name": true, "filename": true}, "constants": {}, "methods": {"item": true, "namedItem": true}}, "OperationNotAllowedException": {"constructors": {}, "properties": {"message": true, "code": true, "NOT_ALLOWED_ERR": true, "name": true}, "constants": {}, "methods": {"toString": true}}, "CSSRuleList": {"constructors": {}, "properties": {"length": true}, "constants": {}, "methods": {"item": true}}, "StorageInfoQuotaCallback": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "WebKitCSSFilterValue": {"constructors": {}, "properties": {"CSS_FILTER_HUE_ROTATE": true, "CSS_FILTER_BLUR": true, "operationType": true, "CSS_FILTER_GRAYSCALE": true, "CSS_FILTER_SATURATE": true, "CSS_FILTER_GAMMA": true, "CSS_FILTER_SEPIA": true, "CSS_FILTER_INVERT": true, "CSS_FILTER_OPACITY": true, "CSS_FILTER_SHARPEN": true, "CSS_FILTER_REFERENCE": true, "CSS_FILTER_DROP_SHADOW": true}, "constants": {}, "methods": {}}, "SVGAngle": {"constructors": {}, "properties": {"valueInSpecifiedUnits": true, "unitType": true, "value": true, "SVG_ANGLETYPE_RAD": true, "SVG_ANGLETYPE_UNKNOWN": true, "valueAsString": true, "SVG_ANGLETYPE_DEG": true, "SVG_ANGLETYPE_GRAD": true, "SVG_ANGLETYPE_UNSPECIFIED": true}, "constants": {}, "methods": {"newValueSpecifiedUnits": true, "convertToSpecifiedUnits": true}}, "TextTrackCue": {"constructors": {}, "properties": {"textPosition": true, "direction": true, "snapToLines": true, "track": true, "linePosition": true, "pauseOnExit": true, "startTime": true, "endTime": true, "id": true, "alignment": true, "size": true}, "constants": {}, "methods": {"getCueAsSource": true, "getCueAsHTML": true}}, "SQLException": {"constructors": {}, "properties": {"code": true, "CONSTRAINT_ERR": true, "TOO_LARGE_ERR": true, "TIMEOUT_ERR": true, "UNKNOWN_ERR": true, "SYNTAX_ERR": true, "message": true, "VERSION_ERR": true, "QUOTA_ERR": true, "DATABASE_ERR": true}, "constants": {}, "methods": {}}, "RealtimeAnalyserNode": {"constructors": {}, "properties": {"smoothingTimeConstant": true, "maxDecibels": true, "fftSize": true, "minDecibels": true, "frequencyBinCount": true}, "constants": {}, "methods": {"getByteTimeDomainData": true, "getByteFrequencyData": true, "getFloatFrequencyData": true}}, "HTMLBaseElement": {"constructors": {}, "properties": {"href": true, "target": true}, "constants": {}, "methods": {}}, "SVGAnimatedInteger": {"constructors": {}, "properties": {"animVal": true, "baseVal": true}, "constants": {}, "methods": {}}, "HTMLSelectElement": {"constructors": {}, "properties": {"required": true, "multiple": true, "name": true, "form": true, "labels": true, "willValidate": true, "validity": true, "disabled": true, "length": true, "value": true, "selectedIndex": true, "autofocus": true, "validationMessage": true, "type": true, "options": true, "size": true}, "constants": {}, "methods": {"setCustomValidity": true, "namedItem": true, "remove": true, "item": true, "add": true, "checkValidity": true}}, "TextTrack": {"constructors": {}, "properties": {"None": true, "Loading": true, "activeCues": true, "language": true, "Showing": true, "kind": true, "label": true, "Disabled": true, "mode": true, "Error": true, "Loaded": true, "Hidden": true, "cues": true, "readyState": true}, "constants": {}, "methods": {"removeCue": true, "addCue": true}}, "SVGPathSegCurvetoCubicSmoothAbs": {"constructors": {}, "properties": {"x2": true, "x": true, "y2": true, "y": true}, "constants": {}, "methods": {}}, "HTMLIFrameElement": {"constructors": {}, "properties": {"src": true, "contentDocument": true, "name": true, "align": true, "sandbox": true, "height": true, "width": true, "contentWindow": true, "marginWidth": true, "marginHeight": true, "scrolling": true, "longDesc": true, "frameBorder": true}, "constants": {}, "methods": {}}, "SVGPathSeg": {"constructors": {}, "properties": {"PATHSEG_CURVETO_CUBIC_REL": true, "PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS": true, "PATHSEG_CURVETO_CUBIC_SMOOTH_REL": true, "PATHSEG_CURVETO_QUADRATIC_REL": true, "pathSegTypeAsLetter": true, "PATHSEG_UNKNOWN": true, "PATHSEG_LINETO_HORIZONTAL_REL": true, "PATHSEG_CURVETO_QUADRATIC_ABS": true, "PATHSEG_LINETO_REL": true, "PATHSEG_ARC_REL": true, "PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL": true, "pathSegType": true, "PATHSEG_CURVETO_CUBIC_ABS": true, "PATHSEG_LINETO_HORIZONTAL_ABS": true, "PATHSEG_MOVETO_ABS": true, "PATHSEG_LINETO_ABS": true, "PATHSEG_CLOSEPATH": true, "PATHSEG_CURVETO_CUBIC_SMOOTH_ABS": true, "PATHSEG_LINETO_VERTICAL_REL": true, "PATHSEG_MOVETO_REL": true, "PATHSEG_LINETO_VERTICAL_ABS": true, "PATHSEG_ARC_ABS": true}, "constants": {}, "methods": {}}, "SVGDocument": {"constructors": {}, "properties": {"rootElement": true}, "constants": {}, "methods": {"createEvent": true}}, "TouchEvent": {"constructors": {}, "properties": {"touches": true, "shiftKey": true, "changedTouches": true, "altKey": true, "metaKey": true, "targetTouches": true, "ctrlKey": true}, "constants": {}, "methods": {"initTouchEvent": true}}, "Text": {"constructors": {}, "properties": {"wholeText": true}, "constants": {}, "methods": {"splitText": true, "replaceWholeText": true}}, "WebGLVertexArrayObjectOES": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "HTMLTableCellElement": {"constructors": {}, "properties": {"ch": true, "chOff": true, "bgColor": true, "colSpan": true, "align": true, "height": true, "headers": true, "cellIndex": true, "rowSpan": true, "abbr": true, "vAlign": true, "scope": true, "noWrap": true, "width": true, "axis": true}, "constants": {}, "methods": {}}, "FileWriterSync": {"constructors": {}, "properties": {"position": true, "length": true}, "constants": {}, "methods": {"write": true, "seek": true, "truncate": true}}, "XSLTProcessor": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"reset": true, "clearParameters": true, "getParameter": true, "transformToDocument": true, "removeParameter": true, "importStylesheet": true, "setParameter": true, "transformToFragment": true}}, "WheelEvent": {"constructors": {}, "properties": {"clientX": true, "clientY": true, "wheelDeltaX": true, "webkitDirectionInvertedFromDevice": true, "shiftKey": true, "wheelDelta": true, "offsetX": true, "offsetY": true, "altKey": true, "metaKey": true, "ctrlKey": true, "y": true, "x": true, "screenY": true, "screenX": true, "wheelDeltaY": true}, "constants": {}, "methods": {"initWebKitWheelEvent": true}}, "AudioBuffer": {"constructors": {}, "properties": {"duration": true, "sampleRate": true, "length": true, "numberOfChannels": true, "gain": true}, "constants": {}, "methods": {"getChannelData": true}}, "BeforeLoadEvent": {"constructors": {}, "properties": {"url": true}, "constants": {}, "methods": {"initBeforeLoadEvent": true}}, "SVGTransformable": {"constructors": {}, "properties": {"transform": true}, "constants": {}, "methods": {}}, "HashChangeEvent": {"constructors": {}, "properties": {"newURL": true, "oldURL": true}, "constants": {}, "methods": {"initHashChangeEvent": true}}, "SVGStringList": {"constructors": {}, "properties": {"numberOfItems": true}, "constants": {}, "methods": {"replaceItem": true, "appendItem": true, "clear": true, "getItem": true, "removeItem": true, "initialize": true, "insertItemBefore": true}}, "HTMLTableSectionElement": {"constructors": {}, "properties": {"rows": true, "align": true, "ch": true, "chOff": true, "vAlign": true}, "constants": {}, "methods": {"insertRow": true, "deleteRow": true}}, "SVGClipPathElement": {"constructors": {}, "properties": {"clipPathUnits": true}, "constants": {}, "methods": {}}, "SVGCursorElement": {"constructors": {}, "properties": {"y": true, "x": true}, "constants": {}, "methods": {}}, "SQLResultSet": {"constructors": {}, "properties": {"insertId": true, "rows": true, "rowsAffected": true}, "constants": {}, "methods": {}}, "DOMParser": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"parseFromString": true}}, "IDBAny": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "MediaElementAudioSourceNode": {"constructors": {}, "properties": {"mediaElement": true}, "constants": {}, "methods": {}}, "Clipboard": {"constructors": {}, "properties": {"effectAllowed": true, "files": true, "types": true, "dropEffect": true, "items": true}, "constants": {}, "methods": {"setDragImage": true, "getData": true, "clearData": true, "setData": true}}, "EntrySync": {"constructors": {}, "properties": {"fullPath": true, "isFile": true, "isDirectory": true, "name": true, "filesystem": true}, "constants": {}, "methods": {"moveTo": true, "getParent": true, "getMetadata": true, "toURL": true, "remove": true, "copyTo": true}}, "HTMLProgressElement": {"constructors": {}, "properties": {"max": true, "labels": true, "value": true, "form": true, "position": true}, "constants": {}, "methods": {}}, "SVGGElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "HTMLOptionsCollection": {"constructors": {}, "properties": {"selectedIndex": true, "length": true}, "constants": {}, "methods": {"remove": true}}, "SVGHKernElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "IDBRequest": {"constructors": {}, "properties": {"readyState": true, "LOADING": true, "onerror": true, "webkitErrorMessage": true, "onsuccess": true, "errorCode": true, "source": true, "transaction": true, "DONE": true, "result": true}, "constants": {}, "methods": {"removeEventListener": true, "dispatchEvent": true, "addEventListener": true}}, "SVGFEDisplacementMapElement": {"constructors": {}, "properties": {"SVG_CHANNEL_B": true, "SVG_CHANNEL_A": true, "SVG_CHANNEL_G": true, "in1": true, "SVG_CHANNEL_UNKNOWN": true, "yChannelSelector": true, "SVG_CHANNEL_R": true, "scale": true, "in2": true, "xChannelSelector": true}, "constants": {}, "methods": {}}, "SVGFontFaceNameElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "IDBFactory": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"getDatabaseNames": true, "deleteDatabase": true, "open": true, "cmp": true}}, "FileList": {"constructors": {}, "properties": {"length": true}, "constants": {}, "methods": {"item": true}}, "SQLTransactionCallback": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "HTMLFieldSetElement": {"constructors": {}, "properties": {"willValidate": true, "validity": true, "form": true, "validationMessage": true}, "constants": {}, "methods": {"setCustomValidity": true, "checkValidity": true}}, "CSSStyleDeclaration": {"constructors": {}, "properties": {"parentRule": true, "length": true, "cssText": true}, "constants": {}, "methods": {"getPropertyShorthand": true, "isPropertyImplicit": true, "setProperty": true, "getPropertyCSSValue": true, "item": true, "removeProperty": true, "getPropertyValue": true, "getPropertyPriority": true}}, "WebGLFramebuffer": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "SVGExternalResourcesRequired": {"constructors": {}, "properties": {"externalResourcesRequired": true}, "constants": {}, "methods": {}}, "ElementTraversal": {"constructors": {}, "properties": {"lastElementChild": true, "nextElementSibling": true, "firstElementChild": true, "childElementCount": true, "previousElementSibling": true}, "constants": {}, "methods": {}}, "FileCallback": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "CSSValueList": {"constructors": {}, "properties": {"length": true}, "constants": {}, "methods": {"item": true}}, "ValidityState": {"constructors": {}, "properties": {"rangeUnderflow": true, "tooLong": true, "rangeOverflow": true, "stepMismatch": true, "customError": true, "patternMismatch": true, "valueMissing": true, "typeMismatch": true, "valid": true}, "constants": {}, "methods": {}}, "WebSocket": {"constructors": {}, "properties": {"onopen": true, "readyState": true, "protocol": true, "URL": true, "onclose": true, "bufferedAmount": true, "onerror": true, "CONNECTING": true, "binaryType": true, "CLOSED": true, "onmessage": true, "extensions": true, "CLOSING": true, "OPEN": true}, "constants": {}, "methods": {"close": true, "removeEventListener": true, "dispatchEvent": true, "send": true, "addEventListener": true}}, "EntriesCallback": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "SVGAnimatedRect": {"constructors": {}, "properties": {"animVal": true, "baseVal": true}, "constants": {}, "methods": {}}, "Crypto": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"getRandomValues": true}}, "SVGStylable": {"constructors": {}, "properties": {"className": true, "style": true}, "constants": {}, "methods": {"getPresentationAttribute": true}}, "Range": {"constructors": {}, "properties": {"START_TO_END": true, "endContainer": true, "NODE_AFTER": true, "endOffset": true, "END_TO_END": true, "collapsed": true, "START_TO_START": true, "NODE_BEFORE_AND_AFTER": true, "END_TO_START": true, "startOffset": true, "NODE_INSIDE": true, "NODE_BEFORE": true, "commonAncestorContainer": true, "startContainer": true}, "constants": {}, "methods": {"comparePoint": true, "toString": true, "cloneContents": true, "setEnd": true, "setEndAfter": true, "setStart": true, "setEndBefore": true, "surroundContents": true, "getBoundingClientRect": true, "setStartAfter": true, "cloneRange": true, "isPointInRange": true, "getClientRects": true, "collapse": true, "compareNode": true, "createContextualFragment": true, "setStartBefore": true, "insertNode": true, "selectNode": true, "selectNodeContents": true, "extractContents": true, "detach": true, "expand": true, "deleteContents": true, "intersectsNode": true}}, "Comment": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "ProcessingInstruction": {"constructors": {}, "properties": {"sheet": true, "data": true, "target": true}, "constants": {}, "methods": {}}, "HTMLLIElement": {"constructors": {}, "properties": {"type": true, "value": true}, "constants": {}, "methods": {}}, "SVGTests": {"constructors": {}, "properties": {"requiredFeatures": true, "systemLanguage": true, "requiredExtensions": true}, "constants": {}, "methods": {"hasExtension": true}}, "SVGSVGElement": {"constructors": {}, "properties": {"x": true, "currentTranslate": true, "pixelUnitToMillimeterX": true, "screenPixelToMillimeterY": true, "height": true, "width": true, "contentStyleType": true, "pixelUnitToMillimeterY": true, "currentScale": true, "y": true, "useCurrentView": true, "screenPixelToMillimeterX": true, "viewport": true, "contentScriptType": true}, "constants": {}, "methods": {"unpauseAnimations": true, "createSVGMatrix": true, "getIntersectionList": true, "setCurrentTime": true, "createSVGNumber": true, "unsuspendRedrawAll": true, "forceRedraw": true, "getEnclosureList": true, "createSVGAngle": true, "getCurrentTime": true, "animationsPaused": true, "createSVGTransform": true, "createSVGLength": true, "unsuspendRedraw": true, "checkIntersection": true, "createSVGPoint": true, "pauseAnimations": true, "createSVGTransformFromMatrix": true, "deselectAll": true, "checkEnclosure": true, "suspendRedraw": true, "createSVGRect": true, "getElementById": true}}, "DirectoryReaderSync": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"readEntries": true}}, "ScriptProfileNode": {"constructors": {}, "properties": {"totalTime": true, "functionName": true, "selfTime": true, "url": true, "numberOfCalls": true, "visible": true, "callUID": true, "lineNumber": true, "children": true}, "constants": {}, "methods": {}}, "Int32Array": {"constructors": {}, "properties": {"length": true, "BYTES_PER_ELEMENT": true}, "constants": {}, "methods": {"subarray": true}}, "SQLResultSetRowList": {"constructors": {}, "properties": {"length": true}, "constants": {}, "methods": {"item": true}}, "NavigatorUserMediaErrorCallback": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "EntryArraySync": {"constructors": {}, "properties": {"length": true}, "constants": {}, "methods": {"item": true}}, "SharedWorker": {"constructors": {}, "properties": {"port": true}, "constants": {}, "methods": {}}, "SVGMetadataElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "SVGAltGlyphElement": {"constructors": {}, "properties": {"glyphRef": true, "format": true}, "constants": {}, "methods": {}}, "FileEntry": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"createWriter": true, "file": true}}, "WebKitTransitionEvent": {"constructors": {}, "properties": {"elapsedTime": true, "propertyName": true}, "constants": {}, "methods": {"initWebKitTransitionEvent": true}}, "SQLError": {"constructors": {}, "properties": {"code": true, "CONSTRAINT_ERR": true, "TOO_LARGE_ERR": true, "TIMEOUT_ERR": true, "UNKNOWN_ERR": true, "SYNTAX_ERR": true, "message": true, "VERSION_ERR": true, "QUOTA_ERR": true, "DATABASE_ERR": true}, "constants": {}, "methods": {}}, "SVGPathSegCurvetoQuadraticRel": {"constructors": {}, "properties": {"y": true, "x": true, "x1": true, "y1": true}, "constants": {}, "methods": {}}, "HTMLKeygenElement": {"constructors": {}, "properties": {"name": true, "form": true, "challenge": true, "labels": true, "validity": true, "disabled": true, "willValidate": true, "autofocus": true, "type": true, "keytype": true, "validationMessage": true}, "constants": {}, "methods": {"setCustomValidity": true, "checkValidity": true}}, "SVGFEMergeElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "DOMFileSystemSync": {"constructors": {}, "properties": {"root": true, "name": true}, "constants": {}, "methods": {}}, "SVGFilterElement": {"constructors": {}, "properties": {"primitiveUnits": true, "height": true, "width": true, "filterResX": true, "filterResY": true, "y": true, "x": true, "filterUnits": true}, "constants": {}, "methods": {"setFilterRes": true}}, "SVGRadialGradientElement": {"constructors": {}, "properties": {"fx": true, "fy": true, "cy": true, "cx": true, "r": true}, "constants": {}, "methods": {}}, "SVGPathSegCurvetoQuadraticSmoothAbs": {"constructors": {}, "properties": {"y": true, "x": true}, "constants": {}, "methods": {}}, "SVGElementInstanceList": {"constructors": {}, "properties": {"length": true}, "constants": {}, "methods": {"item": true}}, "HTMLUnknownElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "DedicatedWorkerContext": {"constructors": {}, "properties": {"onmessage": true}, "constants": {}, "methods": {"postMessage": true, "webkitPostMessage": true}}, "SVGViewElement": {"constructors": {}, "properties": {"viewTarget": true}, "constants": {}, "methods": {}}, "HTMLHRElement": {"constructors": {}, "properties": {"width": true, "align": true, "noShade": true, "size": true}, "constants": {}, "methods": {}}, "SVGFEDistantLightElement": {"constructors": {}, "properties": {"elevation": true, "azimuth": true}, "constants": {}, "methods": {}}, "HTMLElement": {"constructors": {}, "properties": {"webkitdropzone": true, "contentEditable": true, "itemType": true, "innerHTML": true, "outerHTML": true, "id": true, "tabIndex": true, "className": true, "spellcheck": true, "itemRef": true, "children": true, "hidden": true, "lang": true, "isContentEditable": true, "outerText": true, "itemId": true, "classList": true, "title": true, "itemProp": true, "draggable": true, "innerText": true, "itemValue": true, "itemScope": true, "dir": true}, "constants": {}, "methods": {"insertAdjacentText": true, "insertAdjacentHTML": true, "insertAdjacentElement": true}}, "XPathResult": {"constructors": {}, "properties": {"invalidIteratorState": true, "snapshotLength": true, "BOOLEAN_TYPE": true, "resultType": true, "UNORDERED_NODE_ITERATOR_TYPE": true, "ORDERED_NODE_ITERATOR_TYPE": true, "STRING_TYPE": true, "ORDERED_NODE_SNAPSHOT_TYPE": true, "UNORDERED_NODE_SNAPSHOT_TYPE": true, "numberValue": true, "NUMBER_TYPE": true, "stringValue": true, "FIRST_ORDERED_NODE_TYPE": true, "booleanValue": true, "singleNodeValue": true, "ANY_UNORDERED_NODE_TYPE": true, "ANY_TYPE": true}, "constants": {}, "methods": {"snapshotItem": true, "iterateNext": true}}, "CanvasGradient": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"addColorStop": true}}, "TouchList": {"constructors": {}, "properties": {"length": true}, "constants": {}, "methods": {"item": true}}, "SVGMaskElement": {"constructors": {}, "properties": {"maskContentUnits": true, "height": true, "width": true, "y": true, "x": true, "maskUnits": true}, "constants": {}, "methods": {}}, "WaveShaperNode": {"constructors": {}, "properties": {"curve": true}, "constants": {}, "methods": {}}, "HTMLMarqueeElement": {"constructors": {}, "properties": {"direction": true, "scrollDelay": true, "trueSpeed": true, "height": true, "bgColor": true, "vspace": true, "scrollAmount": true, "behavior": true, "hspace": true, "width": true, "loop": true}, "constants": {}, "methods": {"start": true, "stop": true}}, "WorkerNavigator": {"constructors": {}, "properties": {"platform": true, "onLine": true, "userAgent": true, "appVersion": true, "appName": true}, "constants": {}, "methods": {}}, "NotificationCenter": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"createHTMLNotification": true, "checkPermission": true, "createNotification": true, "requestPermission": true}}, "OESTextureFloat": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "HTMLFontElement": {"constructors": {}, "properties": {"color": true, "size": true, "face": true}, "constants": {}, "methods": {}}, "DOMSelection": {"constructors": {}, "properties": {"isCollapsed": true, "focusOffset": true, "focusNode": true, "anchorOffset": true, "baseNode": true, "rangeCount": true, "extentOffset": true, "baseOffset": true, "anchorNode": true, "type": true, "extentNode": true}, "constants": {}, "methods": {"deleteFromDocument": true, "collapse": true, "extend": true, "modify": true, "addRange": true, "collapseToStart": true, "toString": true, "getRangeAt": true, "setBaseAndExtent": true, "containsNode": true, "collapseToEnd": true, "setPosition": true, "removeAllRanges": true, "selectAllChildren": true, "empty": true}}, "SVGLinearGradientElement": {"constructors": {}, "properties": {"x2": true, "y1": true, "x1": true, "y2": true}, "constants": {}, "methods": {}}, "SVGFETurbulenceElement": {"constructors": {}, "properties": {"SVG_TURBULENCE_TYPE_FRACTALNOISE": true, "baseFrequencyX": true, "SVG_STITCHTYPE_UNKNOWN": true, "stitchTiles": true, "seed": true, "SVG_TURBULENCE_TYPE_TURBULENCE": true, "baseFrequencyY": true, "SVG_STITCHTYPE_STITCH": true, "SVG_STITCHTYPE_NOSTITCH": true, "numOctaves": true, "type": true, "SVG_TURBULENCE_TYPE_UNKNOWN": true}, "constants": {}, "methods": {}}, "AudioListener": {"constructors": {}, "properties": {"dopplerFactor": true, "speedOfSound": true}, "constants": {}, "methods": {"setOrientation": true, "setPosition": true, "setVelocity": true}}, "HTMLAnchorElement": {"constructors": {}, "properties": {"origin": true, "charset": true, "protocol": true, "ping": true, "hreflang": true, "shape": true, "href": true, "download": true, "port": true, "accessKey": true, "hostname": true, "rev": true, "rel": true, "text": true, "pathname": true, "type": true, "hash": true, "host": true, "target": true, "search": true, "name": true, "coords": true}, "constants": {}, "methods": {"toString": true, "getParameter": true}}, "CSSMediaRule": {"constructors": {}, "properties": {"media": true, "cssRules": true}, "constants": {}, "methods": {"insertRule": true, "deleteRule": true}}, "MouseEvent": {"constructors": {}, "properties": {"clientX": true, "clientY": true, "fromElement": true, "dataTransfer": true, "relatedTarget": true, "shiftKey": true, "button": true, "offsetX": true, "offsetY": true, "altKey": true, "metaKey": true, "toElement": true, "ctrlKey": true, "y": true, "x": true, "screenY": true, "screenX": true}, "constants": {}, "methods": {"initMouseEvent": true}}, "WebGLActiveInfo": {"constructors": {}, "properties": {"type": true, "name": true, "size": true}, "constants": {}, "methods": {}}, "CharacterData": {"constructors": {}, "properties": {"length": true, "data": true}, "constants": {}, "methods": {"appendData": true, "deleteData": true, "substringData": true, "insertData": true, "replaceData": true}}, "IDBCursorWithValue": {"constructors": {}, "properties": {"value": true}, "constants": {}, "methods": {}}, "HTMLHtmlElement": {"constructors": {}, "properties": {"version": true, "manifest": true}, "constants": {}, "methods": {}}, "DataTransferItem": {"constructors": {}, "properties": {"kind": true, "type": true}, "constants": {}, "methods": {"getAsString": true, "getAsFile": true}}, "HTMLStyleElement": {"constructors": {}, "properties": {"disabled": true, "media": true, "sheet": true, "type": true}, "constants": {}, "methods": {}}, "DOMURL": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"createObjectURL": true, "revokeObjectURL": true}}, "WebKitCSSTransformValue": {"constructors": {}, "properties": {"CSS_ROTATEX": true, "CSS_ROTATEY": true, "CSS_ROTATEZ": true, "CSS_SKEW": true, "CSS_SCALE3D": true, "CSS_SCALE": true, "CSS_TRANSLATE3D": true, "operationType": true, "CSS_PERSPECTIVE": true, "CSS_MATRIX": true, "CSS_ROTATE": true, "CSS_SCALEX": true, "CSS_SCALEY": true, "CSS_SCALEZ": true, "CSS_SKEWY": true, "CSS_SKEWX": true, "CSS_ROTATE3D": true, "CSS_TRANSLATE": true, "CSS_TRANSLATEX": true, "CSS_TRANSLATEY": true, "CSS_TRANSLATEZ": true, "CSS_MATRIX3D": true}, "constants": {}, "methods": {}}, "HTMLImageElement": {"constructors": {}, "properties": {"src": true, "crossOrigin": true, "lowsrc": true, "naturalHeight": true, "hspace": true, "align": true, "name": true, "height": true, "width": true, "naturalWidth": true, "x": true, "useMap": true, "y": true, "vspace": true, "alt": true, "isMap": true, "border": true, "longDesc": true, "complete": true}, "constants": {}, "methods": {}}, "CanvasPixelArray": {"constructors": {}, "properties": {"length": true}, "constants": {}, "methods": {}}, "StyleSheetList": {"constructors": {}, "properties": {"length": true}, "constants": {}, "methods": {"item": true}}, "Element": {"constructors": {}, "properties": {"tagName": true, "offsetParent": true, "onerror": true, "ondragenter": true, "onreset": true, "childElementCount": true, "onbeforecut": true, "clientWidth": true, "ondragleave": true, "clientTop": true, "oncopy": true, "onmousewheel": true, "offsetHeight": true, "onbeforepaste": true, "onchange": true, "oninvalid": true, "onabort": true, "onload": true, "oninput": true, "onpaste": true, "onmouseout": true, "ondragover": true, "clientLeft": true, "scrollWidth": true, "firstElementChild": true, "ontouchend": true, "onselect": true, "offsetLeft": true, "onclick": true, "offsetTop": true, "onmousemove": true, "onfocus": true, "ondrag": true, "style": true, "onwebkitfullscreenchange": true, "onblur": true, "onsubmit": true, "ondragstart": true, "onmouseup": true, "ondrop": true, "onkeypress": true, "nextElementSibling": true, "onkeydown": true, "scrollLeft": true, "onmouseover": true, "onbeforecopy": true, "onmousedown": true, "scrollHeight": true, "onsearch": true, "oncontextmenu": true, "onscroll": true, "ondragend": true, "ontouchcancel": true, "ontouchmove": true, "onselectstart": true, "lastElementChild": true, "clientHeight": true, "ontouchstart": true, "oncut": true, "previousElementSibling": true, "onkeyup": true, "scrollTop": true, "ondblclick": true, "offsetWidth": true}, "constants": {}, "methods": {"removeAttributeNS": true, "removeAttribute": true, "getAttribute": true, "focus": true, "hasAttributeNS": true, "setAttributeNS": true, "scrollIntoViewIfNeeded": true, "getAttributeNS": true, "removeAttributeNode": true, "getAttributeNode": true, "getBoundingClientRect": true, "getElementsByClassName": true, "blur": true, "getClientRects": true, "setAttributeNodeNS": true, "getElementsByTagName": true, "getElementsByTagNameNS": true, "hasAttribute": true, "scrollByPages": true, "querySelector": true, "webkitMatchesSelector": true, "scrollByLines": true, "scrollIntoView": true, "setAttribute": true, "querySelectorAll": true, "getAttributeNodeNS": true, "setAttributeNode": true}}, "SVGPathSegLinetoHorizontalAbs": {"constructors": {}, "properties": {"x": true}, "constants": {}, "methods": {}}, "IDBDatabaseError": {"constructors": {}, "properties": {"message": true, "code": true}, "constants": {}, "methods": {}}, "SVGFEFloodElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "Entry": {"constructors": {}, "properties": {"fullPath": true, "isFile": true, "isDirectory": true, "name": true, "filesystem": true}, "constants": {}, "methods": {"moveTo": true, "getParent": true, "getMetadata": true, "toURL": true, "remove": true, "copyTo": true}}, "IDBObjectStore": {"constructors": {}, "properties": {"transaction": true, "name": true, "keyPath": true}, "constants": {}, "methods": {"deleteIndex": true, "index": true, "get": true, "clear": true, "add": true, "openCursor": true, "put": true, "createIndex": true, "delete": true}}, "BiquadFilterNode": {"constructors": {}, "properties": {"PEAKING": true, "ALLPASS": true, "HIGHPASS": true, "Q": true, "frequency": true, "BANDPASS": true, "LOWPASS": true, "HIGHSHELF": true, "NOTCH": true, "type": true, "LOWSHELF": true, "gain": true}, "constants": {}, "methods": {}}, "IDBVersionChangeRequest": {"constructors": {}, "properties": {"onblocked": true}, "constants": {}, "methods": {}}, "HTMLParamElement": {"constructors": {}, "properties": {"valueType": true, "type": true, "name": true, "value": true}, "constants": {}, "methods": {}}, "SVGTitleElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "SVGGlyphElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}, "SVGFEComponentTransferElement": {"constructors": {}, "properties": {"in1": true}, "constants": {}, "methods": {}}, "DOMFormData": {"constructors": {}, "properties": {}, "constants": {}, "methods": {"append": true}}, "SVGAltGlyphItemElement": {"constructors": {}, "properties": {}, "constants": {}, "methods": {}}}
\ No newline at end of file
diff --git a/utils/apidoc/mdn/data/domTypes.json b/utils/apidoc/mdn/data/domTypes.json
deleted file mode 100644
index 3b978f3..0000000
--- a/utils/apidoc/mdn/data/domTypes.json
+++ /dev/null
@@ -1 +0,0 @@
-["AbstractWorker", "ArrayBuffer", "ArrayBufferView", "Attr", "AudioBuffer", "AudioBufferSourceNode", "AudioChannelMerger", "AudioChannelSplitter", "AudioContext", "AudioDestinationNode", "AudioGain", "AudioGainNode", "AudioListener", "AudioNode", "AudioPannerNode", "AudioParam", "AudioProcessingEvent", "AudioSourceNode", "BarInfo", "BeforeLoadEvent", "BiquadFilterNode", "Blob", "CDATASection", "CSSCharsetRule", "CSSFontFaceRule", "CSSImportRule", "CSSMediaRule", "CSSPageRule", "CSSPrimitiveValue", "CSSRule", "CSSRuleList", "CSSStyleDeclaration", "CSSStyleRule", "CSSStyleSheet", "CSSUnknownRule", "CSSValue", "CSSValueList", "CanvasGradient", "CanvasPattern", "CanvasPixelArray", "CanvasRenderingContext", "CanvasRenderingContext2D", "CharacterData", "ClientRect", "ClientRectList", "Clipboard", "CloseEvent", "Comment", "CompositionEvent", "Console", "ConvolverNode", "Coordinates", "Counter", "Crypto", "CustomEvent", "DOMApplicationCache", "DOMException", "DOMFileSystem", "DOMFileSystemSync", "DOMFormData", "DOMImplementation", "DOMMimeType", "DOMMimeTypeArray", "DOMParser", "DOMPlugin", "DOMPluginArray", "DOMSelection", "DOMSettableTokenList", "DOMTokenList", "DOMURL", "DOMWindow", "DataTransferItem", "DataTransferItemList", "DataView", "Database", "DatabaseSync", "DedicatedWorkerContext", "DelayNode", "DeviceMotionEvent", "DeviceOrientationEvent", "DirectoryEntry", "DirectoryEntrySync", "DirectoryReader", "DirectoryReaderSync", "Document", "DocumentFragment", "DocumentType", "DynamicsCompressorNode", "Element", "ElementTimeControl", "ElementTraversal", "Entity", "EntityReference", "Entry", "EntryArray", "EntryArraySync", "EntrySync", "ErrorEvent", "Event", "EventException", "EventSource", "EventTarget", "File", "FileEntry", "FileEntrySync", "FileError", "FileException", "FileList", "FileReader", "FileReaderSync", "FileWriter", "FileWriterSync", "Float32Array", "Float64Array", "Geolocation", "Geoposition", "HTMLAllCollection", "HTMLAnchorElement", "HTMLAppletElement", "HTMLAreaElement", "HTMLAudioElement", "HTMLBRElement", "HTMLBaseElement", "HTMLBaseFontElement", "HTMLBodyElement", "HTMLButtonElement", "HTMLCanvasElement", "HTMLCollection", "HTMLDListElement", "HTMLDataListElement", "HTMLDetailsElement", "HTMLDirectoryElement", "HTMLDivElement", "HTMLDocument", "HTMLElement", "HTMLEmbedElement", "HTMLFieldSetElement", "HTMLFontElement", "HTMLFormElement", "HTMLFrameElement", "HTMLFrameSetElement", "HTMLHRElement", "HTMLHeadElement", "HTMLHeadingElement", "HTMLHtmlElement", "HTMLIFrameElement", "HTMLImageElement", "HTMLInputElement", "HTMLIsIndexElement", "HTMLKeygenElement", "HTMLLIElement", "HTMLLabelElement", "HTMLLegendElement", "HTMLLinkElement", "HTMLMapElement", "HTMLMarqueeElement", "HTMLMediaElement", "HTMLMenuElement", "HTMLMetaElement", "HTMLMeterElement", "HTMLModElement", "HTMLOListElement", "HTMLObjectElement", "HTMLOptGroupElement", "HTMLOptionElement", "HTMLOptionsCollection", "HTMLOutputElement", "HTMLParagraphElement", "HTMLParamElement", "HTMLPreElement", "HTMLProgressElement", "HTMLQuoteElement", "HTMLScriptElement", "HTMLSelectElement", "HTMLSourceElement", "HTMLSpanElement", "HTMLStyleElement", "HTMLTableCaptionElement", "HTMLTableCellElement", "HTMLTableColElement", "HTMLTableElement", "HTMLTableRowElement", "HTMLTableSectionElement", "HTMLTextAreaElement", "HTMLTitleElement", "HTMLTrackElement", "HTMLUListElement", "HTMLUnknownElement", "HTMLVideoElement", "HashChangeEvent", "HighPass2FilterNode", "History", "IDBAny", "IDBCursor", "IDBCursorWithValue", "IDBDatabase", "IDBDatabaseError", "IDBDatabaseException", "IDBFactory", "IDBIndex", "IDBKey", "IDBKeyRange", "IDBObjectStore", "IDBRequest", "IDBTransaction", "IDBVersionChangeEvent", "IDBVersionChangeRequest", "ImageData", "InjectedScriptHost", "InspectorFrontendHost", "Int16Array", "Int32Array", "Int8Array", "JavaScriptAudioNode", "JavaScriptCallFrame", "KeyboardEvent", "Location", "LowPass2FilterNode", "MediaElementAudioSourceNode", "MediaError", "MediaList", "MediaQueryList", "MediaQueryListListener", "MemoryInfo", "MessageChannel", "MessageEvent", "MessagePort", "Metadata", "MouseEvent", "MutationCallback", "MutationEvent", "MutationRecord", "NamedNodeMap", "Navigator", "NavigatorUserMediaError", "NavigatorUserMediaSuccessCallback", "Node", "NodeFilter", "NodeIterator", "NodeList", "NodeSelector", "Notation", "Notification", "NotificationCenter", "OESStandardDerivatives", "OESTextureFloat", "OESVertexArrayObject", "OfflineAudioCompletionEvent", "OperationNotAllowedException", "OverflowEvent", "PageTransitionEvent", "Performance", "PerformanceNavigation", "PerformanceTiming", "PopStateEvent", "PositionError", "ProcessingInstruction", "ProgressEvent", "RGBColor", "Range", "RangeException", "RealtimeAnalyserNode", "Rect", "SQLError", "SQLException", "SQLResultSet", "SQLResultSetRowList", "SQLTransaction", "SQLTransactionSync", "SVGAElement", "SVGAltGlyphDefElement", "SVGAltGlyphElement", "SVGAltGlyphItemElement", "SVGAngle", "SVGAnimateColorElement", "SVGAnimateElement", "SVGAnimateMotionElement", "SVGAnimateTransformElement", "SVGAnimatedAngle", "SVGAnimatedBoolean", "SVGAnimatedEnumeration", "SVGAnimatedInteger", "SVGAnimatedLength", "SVGAnimatedLengthList", "SVGAnimatedNumber", "SVGAnimatedNumberList", "SVGAnimatedPreserveAspectRatio", "SVGAnimatedRect", "SVGAnimatedString", "SVGAnimatedTransformList", "SVGAnimationElement", "SVGCircleElement", "SVGClipPathElement", "SVGColor", "SVGComponentTransferFunctionElement", "SVGCursorElement", "SVGDefsElement", "SVGDescElement", "SVGDocument", "SVGElement", "SVGElementInstance", "SVGElementInstanceList", "SVGEllipseElement", "SVGException", "SVGExternalResourcesRequired", "SVGFEBlendElement", "SVGFEColorMatrixElement", "SVGFEComponentTransferElement", "SVGFECompositeElement", "SVGFEConvolveMatrixElement", "SVGFEDiffuseLightingElement", "SVGFEDisplacementMapElement", "SVGFEDistantLightElement", "SVGFEDropShadowElement", "SVGFEFloodElement", "SVGFEFuncAElement", "SVGFEFuncBElement", "SVGFEFuncGElement", "SVGFEFuncRElement", "SVGFEGaussianBlurElement", "SVGFEImageElement", "SVGFEMergeElement", "SVGFEMergeNodeElement", "SVGFEMorphologyElement", "SVGFEOffsetElement", "SVGFEPointLightElement", "SVGFESpecularLightingElement", "SVGFESpotLightElement", "SVGFETileElement", "SVGFETurbulenceElement", "SVGFilterElement", "SVGFilterPrimitiveStandardAttributes", "SVGFitToViewBox", "SVGFontElement", "SVGFontFaceElement", "SVGFontFaceFormatElement", "SVGFontFaceNameElement", "SVGFontFaceSrcElement", "SVGFontFaceUriElement", "SVGForeignObjectElement", "SVGGElement", "SVGGlyphElement", "SVGGlyphRefElement", "SVGGradientElement", "SVGHKernElement", "SVGImageElement", "SVGLangSpace", "SVGLength", "SVGLengthList", "SVGLineElement", "SVGLinearGradientElement", "SVGLocatable", "SVGMPathElement", "SVGMarkerElement", "SVGMaskElement", "SVGMatrix", "SVGMetadataElement", "SVGMissingGlyphElement", "SVGNumber", "SVGNumberList", "SVGPaint", "SVGPathElement", "SVGPathSeg", "SVGPathSegArcAbs", "SVGPathSegArcRel", "SVGPathSegClosePath", "SVGPathSegCurvetoCubicAbs", "SVGPathSegCurvetoCubicRel", "SVGPathSegCurvetoCubicSmoothAbs", "SVGPathSegCurvetoCubicSmoothRel", "SVGPathSegCurvetoQuadraticAbs", "SVGPathSegCurvetoQuadraticRel", "SVGPathSegCurvetoQuadraticSmoothAbs", "SVGPathSegCurvetoQuadraticSmoothRel", "SVGPathSegLinetoAbs", "SVGPathSegLinetoHorizontalAbs", "SVGPathSegLinetoHorizontalRel", "SVGPathSegLinetoRel", "SVGPathSegLinetoVerticalAbs", "SVGPathSegLinetoVerticalRel", "SVGPathSegList", "SVGPathSegMovetoAbs", "SVGPathSegMovetoRel", "SVGPatternElement", "SVGPoint", "SVGPointList", "SVGPolygonElement", "SVGPolylineElement", "SVGPreserveAspectRatio", "SVGRadialGradientElement", "SVGRect", "SVGRectElement", "SVGRenderingIntent", "SVGSVGElement", "SVGScriptElement", "SVGSetElement", "SVGStopElement", "SVGStringList", "SVGStylable", "SVGStyleElement", "SVGSwitchElement", "SVGSymbolElement", "SVGTRefElement", "SVGTSpanElement", "SVGTests", "SVGTextContentElement", "SVGTextElement", "SVGTextPathElement", "SVGTextPositioningElement", "SVGTitleElement", "SVGTransform", "SVGTransformList", "SVGTransformable", "SVGURIReference", "SVGUnitTypes", "SVGUseElement", "SVGVKernElement", "SVGViewElement", "SVGViewSpec", "SVGZoomAndPan", "SVGZoomEvent", "Screen", "ScriptProfile", "ScriptProfileNode", "SharedWorker", "SharedWorkercontext", "SpeechInputEvent", "SpeechInputResult", "SpeechInputResultList", "Storage", "StorageEvent", "StorageInfo", "StyleMedia", "StyleSheet", "StyleSheetList", "Text", "TextEvent", "TextMetrics", "TextTrack", "TextTrackCue", "TextTrackCueList", "TimeRanges", "Touch", "TouchEvent", "TouchList", "TreeWalker", "UIEvent", "Uint16Array", "Uint32Array", "Uint8Array", "ValidityState", "VoidCallback", "WaveShaperNode", "WebGLActiveInfo", "WebGLBuffer", "WebGLContextAttributes", "WebGLContextEvent", "WebGLDebugRendererInfo", "WebGLDebugShaders", "WebGLFramebuffer", "WebGLProgram", "WebGLRenderbuffer", "WebGLRenderingContext", "WebGLShader", "WebGLTexture", "WebGLUniformLocation", "WebGLVertexArrayObjectOES", "WebKitAnimation", "WebKitAnimationEvent", "WebKitAnimationList", "WebKitBlobBuilder", "WebKitCSSFilterValue", "WebKitCSSKeyframeRule", "WebKitCSSKeyframesRule", "WebKitCSSMatrix", "WebKitCSSTransformValue", "WebKitFlags", "WebKitLoseContext", "WebKitMutationObserver", "WebKitPoint", "WebKitTransitionEvent", "WebSocket", "WheelEvent", "Worker", "WorkerContext", "WorkerLocation", "WorkerNavigator", "XMLHttpRequest", "XMLHttpRequestException", "XMLHttpRequestProgressEvent", "XMLHttpRequestUpload", "XMLSerializer", "XPathEvaluator", "XPathException", "XPathExpression", "XPathNSResolver", "XPathResult", "XSLTProcessor", "AudioBufferCallback", "DatabaseCallback", "EntriesCallback", "EntryCallback", "ErrorCallback", "FileCallback", "FileSystemCallback", "FileWriterCallback", "MetadataCallback", "NavigatorUserMediaErrorCallback", "PositionCallback", "PositionErrorCallback", "SQLStatementCallback", "SQLStatementErrorCallback", "SQLTransactionCallback", "SQLTransactionErrorCallback", "SQLTransactionSyncCallback", "StorageInfoErrorCallback", "StorageInfoQuotaCallback", "StorageInfoUsageCallback", "StringCallback"]
\ No newline at end of file
diff --git a/utils/apidoc/mdn/database.json b/utils/apidoc/mdn/database.json
deleted file mode 100644
index 5875194..0000000
--- a/utils/apidoc/mdn/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/utils/apidoc/mdn/extract.dart b/utils/apidoc/mdn/extract.dart
deleted file mode 100644
index 210e84c..0000000
--- a/utils/apidoc/mdn/extract.dart
+++ /dev/null
@@ -1,1321 +0,0 @@
-// 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 "dart:collection";
-import 'dart:convert';
-import 'dart:html';
-
-// Workaround for HTML lib missing feature.
-Range newRange() {
-  return document.createRange();
-}
-
-// Temporary range object to optimize performance computing client rects
-// from text nodes.
-Range _tempRange;
-// Hacks because ASYNC measurement is annoying when just writing a script.
-ClientRect getClientRect(Node n) {
-  if (n is Element) {
-    return n.$dom_getBoundingClientRect();
-  } else {
-    // Crazy hacks that works for nodes.... create a range and measure it.
-    if (_tempRange == null) {
-      _tempRange = newRange();
-    }
-    _tempRange.setStartBefore(n);
-    _tempRange.setEndAfter(n);
-     return _tempRange.getBoundingClientRect();
-  }
-}
-
-/**
- * CSS class that is added to elements in the DOM to indicate that they should
- * be removed when extracting blocks of documentation.  This is helpful when
- * running this script in a web browser as it is easy to visually see what
- * blocks of information were extracted when using CSS such as DEBUG_CSS
- * which highlights elements that should be removed.
- */
-const DART_REMOVED = "dart-removed";
-
-const DEBUG_CSS = """
-<style type="text/css">
-  .dart-removed {
-    background-color: rgba(255, 0, 0, 0.5);
-   }
-</style>""";
-
-const MIN_PIXELS_DIFFERENT_LINES = 10;
-
-const IDL_SELECTOR = "pre.eval, pre.idl";
-
-Map data;
-
-// TODO(rnystrom): Hack! Copied from domTypes.json. Instead of hard-coding
-// these, should use the same mapping that the DOM/HTML code generators use.
-var domTypes;
-const domTypesRaw = const [
-  "AbstractWorker", "ArrayBuffer", "ArrayBufferView", "Attr",
-  "AudioBuffer", "AudioBufferSourceNode", "AudioChannelMerger",
-  "AudioChannelSplitter", "AudioContext", "AudioDestinationNode",
-  "AudioGain", "AudioGainNode", "AudioListener", "AudioNode",
-  "AudioPannerNode", "AudioParam", "AudioProcessingEvent",
-  "AudioSourceNode", "BarInfo", "BeforeLoadEvent", "BiquadFilterNode",
-  "Blob", "CDATASection", "CSSCharsetRule", "CSSFontFaceRule",
-  "CSSImportRule", "CSSMediaRule", "CSSPageRule", "CSSPrimitiveValue",
-  "CSSRule", "CSSRuleList", "CSSStyleDeclaration", "CSSStyleRule",
-  "CSSStyleSheet", "CSSUnknownRule", "CSSValue", "CSSValueList",
-  "CanvasGradient", "CanvasPattern", "CanvasPixelArray",
-  "CanvasRenderingContext", "CanvasRenderingContext2D",
-  "CharacterData", "ClientRect", "ClientRectList", "Clipboard",
-  "CloseEvent", "Comment", "CompositionEvent", "Console",
-  "ConvolverNode", "Coordinates", "Counter", "Crypto", "CustomEvent",
-  "DOMApplicationCache", "DOMException", "DOMFileSystem",
-  "DOMFileSystemSync", "DOMFormData", "DOMImplementation",
-  "DOMMimeType", "DOMMimeTypeArray", "DOMParser", "DOMPlugin",
-  "DOMPluginArray", "DOMSelection", "DOMSettableTokenList",
-  "DOMTokenList", "DOMURL", "DOMWindow", "DataTransferItem",
-  "DataTransferItemList", "DataView", "Database", "DatabaseSync",
-  "DedicatedWorkerContext", "DelayNode", "DeviceMotionEvent",
-  "DeviceOrientationEvent", "DirectoryEntry", "DirectoryEntrySync",
-  "DirectoryReader", "DirectoryReaderSync", "Document",
-  "DocumentFragment", "DocumentType", "DynamicsCompressorNode",
-  "Element", "ElementTimeControl", "ElementTraversal", "Entity",
-  "EntityReference", "Entry", "EntryArray", "EntryArraySync",
-  "EntrySync", "ErrorEvent", "Event", "EventException", "EventSource",
-  "EventTarget", "File", "FileEntry", "FileEntrySync", "FileError",
-  "FileException", "FileList", "FileReader", "FileReaderSync",
-  "FileWriter", "FileWriterSync", "Float32Array", "Float64Array",
-  "Geolocation", "Geoposition", "HTMLAllCollection",
-  "HTMLAnchorElement", "HTMLAppletElement", "HTMLAreaElement",
-  "HTMLAudioElement", "HTMLBRElement", "HTMLBaseElement",
-  "HTMLBaseFontElement", "HTMLBodyElement", "HTMLButtonElement",
-  "HTMLCanvasElement", "HTMLCollection", "HTMLDListElement",
-  "HTMLDataListElement", "HTMLDetailsElement", "HTMLDirectoryElement",
-  "HTMLDivElement", "HTMLDocument", "HTMLElement", "HTMLEmbedElement",
-  "HTMLFieldSetElement", "HTMLFontElement", "HTMLFormElement",
-  "HTMLFrameElement", "HTMLFrameSetElement", "HTMLHRElement",
-  "HTMLHeadElement", "HTMLHeadingElement", "HTMLHtmlElement",
-  "HTMLIFrameElement", "HTMLImageElement", "HTMLInputElement",
-  "HTMLIsIndexElement", "HTMLKeygenElement", "HTMLLIElement",
-  "HTMLLabelElement", "HTMLLegendElement", "HTMLLinkElement",
-  "HTMLMapElement", "HTMLMarqueeElement", "HTMLMediaElement",
-  "HTMLMenuElement", "HTMLMetaElement", "HTMLMeterElement",
-  "HTMLModElement", "HTMLOListElement", "HTMLObjectElement",
-  "HTMLOptGroupElement", "HTMLOptionElement", "HTMLOptionsCollection",
-  "HTMLOutputElement", "HTMLParagraphElement", "HTMLParamElement",
-  "HTMLPreElement", "HTMLProgressElement", "HTMLQuoteElement",
-  "HTMLScriptElement", "HTMLSelectElement", "HTMLSourceElement",
-  "HTMLSpanElement", "HTMLStyleElement", "HTMLTableCaptionElement",
-  "HTMLTableCellElement", "HTMLTableColElement", "HTMLTableElement",
-  "HTMLTableRowElement", "HTMLTableSectionElement",
-  "HTMLTextAreaElement", "HTMLTitleElement", "HTMLTrackElement",
-  "HTMLUListElement", "HTMLUnknownElement", "HTMLVideoElement",
-  "HashChangeEvent", "HighPass2FilterNode", "History", "IDBAny",
-  "IDBCursor", "IDBCursorWithValue", "IDBDatabase",
-  "IDBDatabaseError", "IDBDatabaseException", "IDBFactory",
-  "IDBIndex", "IDBKey", "IDBKeyRange", "IDBObjectStore", "IDBRequest",
-  "IDBTransaction", "IDBVersionChangeEvent",
-  "IDBVersionChangeRequest", "ImageData", "InjectedScriptHost",
-  "InspectorFrontendHost", "Int16Array", "Int32Array", "Int8Array",
-  "JavaScriptAudioNode", "JavaScriptCallFrame", "KeyboardEvent",
-  "Location", "LowPass2FilterNode", "MediaElementAudioSourceNode",
-  "MediaError", "MediaList", "MediaQueryList",
-  "MediaQueryListListener", "MemoryInfo", "MessageChannel",
-  "MessageEvent", "MessagePort", "Metadata", "MouseEvent",
-  "MutationCallback", "MutationEvent", "MutationRecord",
-  "NamedNodeMap", "Navigator", "NavigatorUserMediaError",
-  "NavigatorUserMediaSuccessCallback", "Node", "NodeFilter",
-  "NodeIterator", "NodeList", "NodeSelector", "Notation",
-  "Notification", "NotificationCenter", "OESStandardDerivatives",
-  "OESTextureFloat", "OESVertexArrayObject",
-  "OfflineAudioCompletionEvent", "OperationNotAllowedException",
-  "OverflowEvent", "PageTransitionEvent", "Performance",
-  "PerformanceNavigation", "PerformanceTiming", "PopStateEvent",
-  "PositionError", "ProcessingInstruction", "ProgressEvent",
-  "RGBColor", "Range", "RangeException", "RealtimeAnalyserNode",
-  "Rect", "SQLError", "SQLException", "SQLResultSet",
-  "SQLResultSetRowList", "SQLTransaction", "SQLTransactionSync",
-  "SVGAElement", "SVGAltGlyphDefElement", "SVGAltGlyphElement",
-  "SVGAltGlyphItemElement", "SVGAngle", "SVGAnimateColorElement",
-  "SVGAnimateElement", "SVGAnimateMotionElement",
-  "SVGAnimateTransformElement", "SVGAnimatedAngle",
-  "SVGAnimatedBoolean", "SVGAnimatedEnumeration",
-  "SVGAnimatedInteger", "SVGAnimatedLength", "SVGAnimatedLengthList",
-  "SVGAnimatedNumber", "SVGAnimatedNumberList",
-  "SVGAnimatedPreserveAspectRatio", "SVGAnimatedRect",
-  "SVGAnimatedString", "SVGAnimatedTransformList",
-  "SVGAnimationElement", "SVGCircleElement", "SVGClipPathElement",
-  "SVGColor", "SVGComponentTransferFunctionElement",
-  "SVGCursorElement", "SVGDefsElement", "SVGDescElement",
-  "SVGDocument", "SVGElement", "SVGElementInstance",
-  "SVGElementInstanceList", "SVGEllipseElement", "SVGException",
-  "SVGExternalResourcesRequired", "SVGFEBlendElement",
-  "SVGFEColorMatrixElement", "SVGFEComponentTransferElement",
-  "SVGFECompositeElement", "SVGFEConvolveMatrixElement",
-  "SVGFEDiffuseLightingElement", "SVGFEDisplacementMapElement",
-  "SVGFEDistantLightElement", "SVGFEDropShadowElement",
-  "SVGFEFloodElement", "SVGFEFuncAElement", "SVGFEFuncBElement",
-  "SVGFEFuncGElement", "SVGFEFuncRElement",
-  "SVGFEGaussianBlurElement", "SVGFEImageElement",
-  "SVGFEMergeElement", "SVGFEMergeNodeElement",
-  "SVGFEMorphologyElement", "SVGFEOffsetElement",
-  "SVGFEPointLightElement", "SVGFESpecularLightingElement",
-  "SVGFESpotLightElement", "SVGFETileElement",
-  "SVGFETurbulenceElement", "SVGFilterElement",
-  "SVGFilterPrimitiveStandardAttributes", "SVGFitToViewBox",
-  "SVGFontElement", "SVGFontFaceElement", "SVGFontFaceFormatElement",
-  "SVGFontFaceNameElement", "SVGFontFaceSrcElement",
-  "SVGFontFaceUriElement", "SVGForeignObjectElement", "SVGGElement",
-  "SVGGlyphElement", "SVGGlyphRefElement", "SVGGradientElement",
-  "SVGHKernElement", "SVGImageElement", "SVGLangSpace", "SVGLength",
-  "SVGLengthList", "SVGLineElement", "SVGLinearGradientElement",
-  "SVGLocatable", "SVGMPathElement", "SVGMarkerElement",
-  "SVGMaskElement", "SVGMatrix", "SVGMetadataElement",
-  "SVGMissingGlyphElement", "SVGNumber", "SVGNumberList", "SVGPaint",
-  "SVGPathElement", "SVGPathSeg", "SVGPathSegArcAbs",
-  "SVGPathSegArcRel", "SVGPathSegClosePath",
-  "SVGPathSegCurvetoCubicAbs", "SVGPathSegCurvetoCubicRel",
-  "SVGPathSegCurvetoCubicSmoothAbs",
-  "SVGPathSegCurvetoCubicSmoothRel", "SVGPathSegCurvetoQuadraticAbs",
-  "SVGPathSegCurvetoQuadraticRel",
-  "SVGPathSegCurvetoQuadraticSmoothAbs",
-  "SVGPathSegCurvetoQuadraticSmoothRel", "SVGPathSegLinetoAbs",
-  "SVGPathSegLinetoHorizontalAbs", "SVGPathSegLinetoHorizontalRel",
-  "SVGPathSegLinetoRel", "SVGPathSegLinetoVerticalAbs",
-  "SVGPathSegLinetoVerticalRel", "SVGPathSegList",
-  "SVGPathSegMovetoAbs", "SVGPathSegMovetoRel", "SVGPatternElement",
-  "SVGPoint", "SVGPointList", "SVGPolygonElement",
-  "SVGPolylineElement", "SVGPreserveAspectRatio",
-  "SVGRadialGradientElement", "SVGRect", "SVGRectElement",
-  "SVGRenderingIntent", "SVGSVGElement", "SVGScriptElement",
-  "SVGSetElement", "SVGStopElement", "SVGStringList", "SVGStylable",
-  "SVGStyleElement", "SVGSwitchElement", "SVGSymbolElement",
-  "SVGTRefElement", "SVGTSpanElement", "SVGTests",
-  "SVGTextContentElement", "SVGTextElement", "SVGTextPathElement",
-  "SVGTextPositioningElement", "SVGTitleElement", "SVGTransform",
-  "SVGTransformList", "SVGTransformable", "SVGURIReference",
-  "SVGUnitTypes", "SVGUseElement", "SVGVKernElement",
-  "SVGViewElement", "SVGViewSpec", "SVGZoomAndPan", "SVGZoomEvent",
-  "Screen", "ScriptProfile", "ScriptProfileNode", "SharedWorker",
-  "SharedWorkercontext", "SpeechInputEvent", "SpeechInputResult",
-  "SpeechInputResultList", "Storage", "StorageEvent", "StorageInfo",
-  "StyleMedia", "StyleSheet", "StyleSheetList", "Text", "TextEvent",
-  "TextMetrics", "TextTrack", "TextTrackCue", "TextTrackCueList",
-  "TimeRanges", "Touch", "TouchEvent", "TouchList", "TreeWalker",
-  "UIEvent", "Uint16Array", "Uint32Array", "Uint8Array",
-  "ValidityState", "VoidCallback", "WaveShaperNode",
-  "WebGLActiveInfo", "WebGLBuffer", "WebGLContextAttributes",
-  "WebGLContextEvent", "WebGLDebugRendererInfo", "WebGLDebugShaders",
-  "WebGLFramebuffer", "WebGLProgram", "WebGLRenderbuffer",
-  "WebGLRenderingContext", "WebGLShader", "WebGLTexture",
-  "WebGLUniformLocation", "WebGLVertexArrayObjectOES",
-  "WebKitAnimation", "WebKitAnimationEvent", "WebKitAnimationList",
-  "WebKitBlobBuilder", "WebKitCSSFilterValue",
-  "WebKitCSSKeyframeRule", "WebKitCSSKeyframesRule",
-  "WebKitCSSMatrix", "WebKitCSSTransformValue", "WebKitFlags",
-  "WebKitLoseContext", "WebKitMutationObserver", "WebKitPoint",
-  "WebKitTransitionEvent", "WebSocket", "WheelEvent", "Worker",
-  "WorkerContext", "WorkerLocation", "WorkerNavigator",
-  "XMLHttpRequest", "XMLHttpRequestException",
-  "XMLHttpRequestProgressEvent", "XMLHttpRequestUpload",
-  "XMLSerializer", "XPathEvaluator", "XPathException",
-  "XPathExpression", "XPathNSResolver", "XPathResult",
-  "XSLTProcessor", "AudioBufferCallback", "DatabaseCallback",
-  "EntriesCallback", "EntryCallback", "ErrorCallback", "FileCallback",
-  "FileSystemCallback", "FileWriterCallback", "MetadataCallback",
-  "NavigatorUserMediaErrorCallback", "PositionCallback",
-  "PositionErrorCallback", "SQLStatementCallback",
-  "SQLStatementErrorCallback", "SQLTransactionCallback",
-  "SQLTransactionErrorCallback", "SQLTransactionSyncCallback",
-  "StorageInfoErrorCallback", "StorageInfoQuotaCallback",
-  "StorageInfoUsageCallback", "StringCallback"
-];
-
-Map dbEntry;
-
-Map get dartIdl => data['dartIdl'];
-String get currentType => data['type'];
-
-String _currentTypeShort;
-String get currentTypeShort {
-  if (_currentTypeShort == null) {
-    _currentTypeShort = currentType;
-    _currentTypeShort = trimPrefix(_currentTypeShort, "HTML");
-    _currentTypeShort = trimPrefix(_currentTypeShort, "SVG");
-    _currentTypeShort = trimPrefix(_currentTypeShort, "DOM");
-    _currentTypeShort = trimPrefix(_currentTypeShort, "WebKit");
-    _currentTypeShort = trimPrefix(_currentTypeShort, "Webkit");
-  }
-  return _currentTypeShort;
-}
-
-String _currentTypeTiny;
-String get currentTypeTiny {
-  if (_currentTypeTiny == null) {
-    _currentTypeTiny = currentTypeShort;
-    _currentTypeTiny = trimEnd(_currentTypeTiny, "Element");
-  }
-  return _currentTypeTiny;
-}
-
-Map get searchResult => data['searchResult'];
-String get pageUrl => searchResult['link'];
-
-String _pageDomain;
-String get pageDomain {
-  if (_pageDomain == null) {
-    _pageDomain = pageUrl.substring(0, pageUrl.indexOf("/", "https://".length));
-  }
-  return _pageDomain;
-}
-
-String get pageDir {
-  return pageUrl.substring(0, pageUrl.lastIndexOf('/') + 1);
-}
-
-String getAbsoluteUrl(AnchorElement anchor) {
-  if (anchor == null || anchor.href.length == 0) return '';
-  String path = anchor.href;
-  RegExp fullUrlRegExp = new RegExp("^https?://");
-  if (fullUrlRegExp.hasMatch(path)) return path;
-  if (path.startsWith('/')) {
-    return "$pageDomain$path";
-  } else if (path.startsWith("#")) {
-    return "$pageUrl$path";
-  } else {
-    return "$pageDir$path";
-  }
-}
-
-bool inTable(Node n) {
-  while (n != null) {
-    if (n is TableElement) return true;
-    n = n.parent;
-  }
-  return false;
-}
-
-String escapeHTML(str) {
-  Element e = new Element.tag("div");
-  e.text = str;
-  return e.innerHTML;
-}
-
-List<Text> getAllTextNodes(Element elem) {
-  final nodes = <Text>[];
-  helper(Node n) {
-    if (n is Text) {
-      nodes.add(n);
-    } else {
-      for (Node child in n.nodes) {
-        helper(child);
-      }
-    }
-  };
-
-  helper(elem);
-  return nodes;
-}
-
-/**
- * Whether a node and its children are all types that are safe to skip if the
- * nodes have no text content.
- */
-bool isSkippableType(Node n) {
-  // TODO(jacobr): are there any types we don't want to skip even if they
-  // have no text content?
-  if (n is ImageElement || n is CanvasElement || n is InputElement
-      || n is ObjectElement) {
-    return false;
-  }
-  if (n is Text) return true;
-
-  for (final child in n.nodes) {
-    if (!isSkippableType(child)) {
-      return false;
-    }
-  }
-  return true;
-}
-
-bool isSkippable(Node n) {
-  if (!isSkippableType(n)) return false;
-  return n.text.trim().length == 0;
-}
-
-void onEnd() {
-  // Hideous hack to send JSON back to JS.
-  String dbJson = JSON.encode(dbEntry);
-  // workaround bug in JSON.decode.
-  dbJson = dbJson.replaceAll("ZDARTIUMDOESNTESCAPESLASHNJXXXX", "\\n");
-
-  // Use postMessage to end the JSON to JavaScript. TODO(jacobr): use a simple
-  // isolate based Dart-JS interop solution in the future.
-  window.postMessage("START_DART_MESSAGE_UNIQUE_IDENTIFIER$dbJson", "*");
-}
-
-class SectionParseResult {
-  final String html;
-  final String url;
-  final String idl;
-  SectionParseResult(this.html, this.url, this.idl);
-}
-
-String genCleanHtml(Element root) {
-  for (final e in root.queryAll(".$DART_REMOVED")) {
-    e.classes.remove(DART_REMOVED);
-  }
-
-  // Ditch inline styles.
-  for (final e in root.queryAll('[style]')) {
-    e.attributes.remove('style');
-  }
-
-  // These elements are just tags that we should suppress.
-  for (final e in root.queryAll(".lang.lang-en")) {
-    e.remove();
-  }
-
-  Element parametersHeader;
-  Element returnValueHeader;
-  for (final e in root.queryAll("h6")) {
-    if (e.text == 'Parameters') {
-      parametersHeader = e;
-    } else if (e.text == 'Return value') {
-      returnValueHeader = e;
-    }
-  }
-
-  if (parametersHeader != null) {
-    int numEmptyParameters = 0;
-    final parameterDescriptions = root.queryAll("dd");
-    for (Element parameterDescription in parameterDescriptions) {
-      if (parameterDescription.text.trim().length == 0) {
-        numEmptyParameters++;
-      }
-    }
-    if (numEmptyParameters > 0 &&
-        numEmptyParameters == parameterDescriptions.length) {
-      // Remove the parameter list as it adds zero value as all descriptions
-      // are empty.
-      parametersHeader.remove();
-      for (final e in root.queryAll("dl")) {
-        e.remove();
-      }
-    } else if (parameterDescriptions.length == 0 &&
-        parametersHeader.nextElementSibling != null &&
-        parametersHeader.nextElementSibling.text.trim() == 'None.') {
-      // No need to display that the function takes 0 parameters.
-      parametersHeader.nextElementSibling.remove();
-      parametersHeader.remove();
-    }
-  }
-
-  // Heuristic: if the return value is a single word it is a type name not a
-  // useful text description so suppress it.
-  if (returnValueHeader != null &&
-      returnValueHeader.nextElementSibling != null &&
-      returnValueHeader.nextElementSibling.text.trim().split(' ').length < 2) {
-    returnValueHeader.nextElementSibling.remove();
-    returnValueHeader.remove();
-  }
-
-  bool changed = true;
-  while (changed) {
-    changed = false;
-    while (root.nodes.length == 1 && root.nodes.first is Element) {
-      root = root.nodes.first;
-      changed = true;
-    }
-
-    // Trim useless nodes from the front.
-    while (root.nodes.length > 0 &&
-        isSkippable(root.nodes.first)) {
-      root.nodes.first.remove();
-      changed = true;
-    }
-
-    // Trim useless nodes from the back.
-    while (root.nodes.length > 0 &&
-        isSkippable(root.nodes.last)) {
-      root.nodes.last.remove();
-      changed = true;
-    }
-  }
-  return JSONFIXUPHACK(root.innerHTML);
-}
-
-String genPrettyHtmlFromElement(Element e) {
-  e = e.clone(true);
-  return genCleanHtml(e);
-}
-
-class PostOrderTraversalIterator implements Iterator<Node> {
-
-  Node _next;
-  Node _current;
-
-  PostOrderTraversalIterator(Node start) {
-    _next = _leftMostDescendent(start);
-  }
-
-  Node get current => _current;
-  bool get hasNext => _next != null;
-
-  bool moveNext() {
-    _current = _next;
-    if (_next == null) return false;
-    if (_next.nextNode != null) {
-      _next = _leftMostDescendent(_next.nextNode);
-    } else {
-      _next = _next.parent;
-    }
-    return true;
-  }
-
-  static Node _leftMostDescendent(Node n) {
-    while (n.nodes.length > 0) {
-      n = n.nodes.first;
-    }
-    return n;
-  }
-}
-
-class PostOrderTraversal extends IterableBase<Node> {
-  final Node _node;
-  PostOrderTraversal(this._node);
-
-  Iterator<Node> get iterator => new PostOrderTraversalIterator(_node);
-}
-
-/**
- * Estimate what content represents the first line of text within the [section]
- * range returning null if there isn't a plausible first line of text that
- * contains the string [prop].  We measure the actual rendered client rectangle
- * for the text and use heuristics defining how many pixels text can vary by
- * and still be viewed as being on the same line.
- */
-Range findFirstLine(Range section, String prop) {
-  final firstLine = newRange();
-  firstLine.setStart(section.startContainer, section.startOffset);
-
-  num maxBottom = null;
-  for (final n in new PostOrderTraversal(section.startContainer)) {
-    int compareResult = section.comparePoint(n, 0);
-    if (compareResult == -1) {
-      // before range so skip.
-      continue;
-    } else if (compareResult > 0) {
-      // After range so exit.
-      break;
-    }
-
-    final rect = getClientRect(n);
-    num bottom = rect.bottom;
-    if (rect.height > 0 && rect.width > 0) {
-      if (maxBottom != null &&
-          maxBottom + MIN_PIXELS_DIFFERENT_LINES < bottom) {
-        break;
-      } else if (maxBottom == null || maxBottom > bottom) {
-        maxBottom = bottom;
-      }
-    }
-
-    firstLine.setEndAfter(n);
-  }
-
-  // If the first line of text in the section does not contain the property
-  // name then we're not confident we are able to extract a high accuracy match
-  // so we should not return anything.
-  if (!firstLine.toString().contains(stripWebkit(prop))) {
-    return null;
-  }
-  return firstLine;
-}
-
-/** Find child anchor elements that contain the text [prop]. */
-AnchorElement findAnchorElement(Element root, String prop) {
-  for (AnchorElement a in root.queryAll("a")) {
-    if (a.text.contains(prop)) {
-      return a;
-    }
-  }
-  return null;
-}
-
-// First surrounding element with an ID is safe enough.
-Element findTighterRoot(Element elem, Element root) {
-  Element candidate = elem;
-  while (root != candidate) {
-    candidate = candidate.parent;
-    if (candidate.id.length > 0 && candidate.id.indexOf("section_") != 0) {
-      break;
-    }
-  }
-  return candidate;
-}
-
-// TODO(jacobr): this is very slow and ugly.. consider rewriting or at least
-// commenting carefully.
-SectionParseResult filteredHtml(Element elem, Element root, String prop,
-    Function fragmentGeneratedCallback) {
-  // Using a tighter root avoids false positives at the risk of trimming
-  // text we shouldn't.
-  root = findTighterRoot(elem, root);
-  final range = newRange();
-  range.setStartBefore(elem);
-
-  Element current = elem;
-  while (current != null) {
-    range.setEndBefore(current);
-    if (current.classes.contains(DART_REMOVED) &&
-        range.toString().trim().length > 0) {
-      break;
-    }
-    if (current.firstElementChild != null) {
-      current = current.firstElementChild;
-    } else {
-      while (current != null) {
-        range.setEndAfter(current);
-        if (current == root) {
-          current = null;
-          break;
-        }
-        if (current.nextElementSibling != null) {
-          current = current.nextElementSibling;
-          break;
-        }
-        current = current.parent;
-      }
-    }
-  }
-  String url = null;
-  if (prop != null) {
-    Range firstLine = findFirstLine(range, prop);
-    if (firstLine != null) {
-      range.setStart(firstLine.endContainer, firstLine.endOffset);
-      DocumentFragment firstLineClone = firstLine.cloneContents();
-      AnchorElement anchor = findAnchorElement(firstLineClone, prop);
-      if (anchor != null) {
-        url = getAbsoluteUrl(anchor);
-      }
-    }
-  }
-  final fragment = range.cloneContents();
-  if (fragmentGeneratedCallback != null) {
-    fragmentGeneratedCallback(fragment);
-  }
-  // Strip tags we don't want
-  for (Element e in fragment.queryAll("script, object, style")) {
-    e.remove();
-  }
-
-  // Extract idl
-  final idl = new StringBuffer();
-  if (prop != null && prop.length > 0) {
-    // Only expect properties to have HTML.
-    for(Element e in fragment.queryAll(IDL_SELECTOR)) {
-      idl.write(e.outerHTML);
-      e.remove();
-    }
-    // TODO(jacobr) this is a very basic regex to see if text looks like IDL
-    RegExp likelyIdl = new RegExp(" $prop\\w*\\(");
-
-    for (Element e in fragment.queryAll("pre")) {
-      // Check if it looks like idl...
-      String txt = e.text.trim();
-      if (likelyIdl.hasMatch(txt) && txt.contains("\n") && txt.contains(")")) {
-        idl.write(e.outerHTML);
-        e.remove();
-      }
-    }
-  }
-  return new SectionParseResult(genCleanHtml(fragment), url, idl.toString());
-}
-
-/**
- * Find the best child element of [root] that appears to be an API definition
- * for [prop].  [allText] is a list of all text nodes under root computed by
- * the caller to improve performance.
- */
-Element findBest(Element root, List<Text> allText, String prop,
-    String propType) {
-  // Best bet: find a child of root where the id matches the property name.
-  Element cand = root.query("#$prop");
-
-  if (cand == null && propType == "methods") {
-    cand = root.query("[id=$prop\\(\\)]");
-  }
-  while (cand != null && cand.text.trim().length == 0) {
-    // We found the bookmark for the element but sadly it is just an empty
-    // placeholder. Find the first real element.
-    cand = cand.nextElementSibling;
-  }
-  if (cand != null) {
-    return cand;
-  }
-
-  // If we are at least 70 pixels from the left, something is definitely
-  // fishy and we shouldn't even consider this candidate as nobody visually
-  // formats API docs like that.
-  num candLeft = 70;
-
-  for (Text text in allText) {
-    Element proposed = null;
-
-    // TODO(jacobr): does it hurt precision to use the full cleanup?
-    String t = fullNameCleanup(text.text);
-    if (t == prop) {
-      proposed = text.parent;
-      ClientRect candRect = getClientRect(proposed);
-
-      // TODO(jacobr): this is a good heuristic
-      // if (selObj.selector.indexOf(" > DD ") == -1
-      if (candRect.left < candLeft) {
-        cand = proposed;
-        candLeft = candRect.left;
-      }
-    }
-  }
-  return cand;
-}
-
-/**
- * Checks whether [e] is tagged as obsolete or deprecated using heuristics
- * for what these tags look like in the MDN docs.
- */
-bool isObsolete(Element e) {
-  RegExp obsoleteRegExp = new RegExp(r"(^|\s)obsolete(?=\s|$)");
-  RegExp deprecatedRegExp = new RegExp(r"(^|\s)deprecated(?=\s|$)");
-  for (Element child in e.queryAll("span")) {
-    String t = child.text.toLowerCase();
-    if (t.startsWith("obsolete") || t.startsWith("deprecated")) return true;
-  }
-
-  String text = e.text.toLowerCase();
-  return obsoleteRegExp.hasMatch(text) || deprecatedRegExp.hasMatch(text);
-}
-
-bool isFirstCharLowerCase(String str) {
-  return new RegExp("^[a-z]").hasMatch(str);
-}
-
-/**
- * Extracts information from a fragment of HTML only searching under the [root]
- * html node.  [secitonSelector] specifies the query to use to find candidate
- * sections of the document to consider (there may be more than one).
- * [currentType] specifies the name of the current class. [members] specifies
- * the known class members for this class that we are attempting to find
- * documentation for.  [propType] indicates whether we are searching for
- * methods, properties, constants, or constructors.
- */
-void scrapeSection(Element root, String sectionSelector, String currentType,
-    List members, String propType) {
-  Map expectedProps = dartIdl[propType];
-
-  Set<String> alreadyMatchedProperties = new Set<String>();
-  bool onlyConsiderTables = false;
-  ElementList allMatches = root.queryAll(sectionSelector);
-  if (allMatches.length == 0) {
-    // If we can't find any matches to the sectionSelector, we fall back to
-    // considering all tables in the document.  This is dangerous so we only
-    // allow the safer table matching extraction rules for this case.
-    allMatches = root.queryAll(".fullwidth-table");
-    onlyConsiderTables = true;
-  }
-  for (Element matchElement in allMatches) {
-    final match = matchElement.parent;
-    if (!match.id.startsWith("section") && match.id != "pageText") {
-      throw "Unexpected element $match";
-    }
-    // We don't want to later display this text a second time while for example
-    // displaying class level summary information as then we would display
-    // the same documentation twice.
-    match.classes.add(DART_REMOVED);
-
-    bool foundProps = false;
-
-    // TODO(jacobr): we should really look for the table tag instead
-    // add an assert if we are missing something that is a table...
-    // TODO(jacobr) ignore tables in tables.
-    for (Element t in match.queryAll('.standard-table, .fullwidth-table')) {
-      int helpIndex = -1;
-      num i = 0;
-      for (Element r in t.queryAll("th, td.header")) {
-        final txt = r.text.trim().split(" ")[0].toLowerCase();
-        if (txt == "description") {
-          helpIndex = i;
-          break;
-        }
-        i++;
-      }
-
-      // Figure out which column in the table contains member names by
-      // tracking how many member names each column contains.
-      final numMatches = new List<int>(i);
-      for (int j = 0; j < i; j++) {
-        numMatches[j] = 0;
-      }
-
-      // Find the column that seems to have the most names that look like
-      // expected properties.
-      for (Element r in t.queryAll("tbody tr")) {
-        ElementList row = r.elements;
-        if (row.length == 0 || row.first.classes.contains(".header")) {
-          continue;
-        }
-
-        for (int k = 0; k < numMatches.length && k < row.length; k++) {
-          if (expectedProps.containsKey(fullNameCleanup(row[k].text))) {
-            numMatches[k]++;
-            break;
-          }
-        }
-      }
-
-      int propNameIndex = 0;
-      {
-        int bestCount = numMatches[0];
-        for (int k = 1; k < numMatches.length; k++) {
-          if (numMatches[k] > bestCount) {
-            bestCount = numMatches[k];
-            propNameIndex = k;
-          }
-        }
-      }
-
-      for (Element r in t.queryAll("tbody tr")) {
-        final row = r.elements;
-        if (row.length > propNameIndex && row.length > helpIndex) {
-          if (row.first.classes.contains(".header")) {
-            continue;
-          }
-          // TODO(jacobr): this code for determining the namestr is needlessly
-          // messy.
-          final nameRow = row[propNameIndex];
-          AnchorElement a = nameRow.query("a");
-          String goodName = '';
-          if (a != null) {
-            goodName = a.text.trim();
-          }
-          String nameStr = nameRow.text;
-
-          Map entry = new Map<String, String>();
-
-          entry["name"] = fullNameCleanup(nameStr.length > 0 ?
-              nameStr : goodName);
-
-          final parse = filteredHtml(nameRow, nameRow, entry["name"], null);
-          String altHelp = parse.html;
-
-          entry["help"] = (helpIndex == -1 || row[helpIndex] == null) ?
-              altHelp : genPrettyHtmlFromElement(row[helpIndex]);
-          if (parse.url != null) {
-            entry["url"] = parse.url;
-          }
-
-          if (parse.idl.length > 0) {
-            entry["idl"] = parse.idl;
-          }
-
-          entry["obsolete"] = isObsolete(r);
-
-          if (entry["name"].length > 0) {
-            cleanupEntry(members, entry);
-            alreadyMatchedProperties.add(entry['name']);
-            foundProps = true;
-          }
-        }
-      }
-    }
-
-    if (onlyConsiderTables) {
-      continue;
-    }
-
-    // After this point we have higher risk tests that attempt to perform
-    // rudimentary page segmentation.  This approach is much more error-prone
-    // than using tables because the HTML is far less clearly structured.
-
-    final allText = getAllTextNodes(match);
-
-    final pmap = new Map<String, Element>();
-    for (final prop in expectedProps.keys) {
-      if (alreadyMatchedProperties.contains(prop)) {
-        continue;
-      }
-      final e = findBest(match, allText, prop, propType);
-      if (e != null && !inTable(e)) {
-        pmap[prop] = e;
-      }
-    }
-
-    for (final prop in pmap.keys) {
-      pmap[prop].classes.add(DART_REMOVED);
-    }
-
-    // The problem is the MDN docs do place documentation for each method in a
-    // nice self contained subtree. Instead you will see something like:
-
-    // <h3>drawImage</h3>
-    // <p>Draw image is an awesome method</p>
-    // some more info on drawImage here
-    // <h3>mozDrawWindow</h3>
-    // <p>This API cannot currently be used by Web content.
-    // It is chrome only.</p>
-    // <h3>drawRect</h3>
-    // <p>Always call drawRect instead of drawImage</p>
-    // some more info on drawRect here...
-
-    // The trouble is we will easily detect that the drawImage and drawRect
-    // entries are method definitions because we know to search for these
-    // method names but we will not detect that mozDrawWindow is a method
-    // definition as that method doesn't exist in our IDL.  Thus if we are not
-    // careful the definition for the drawImage method will contain the
-    // definition for the mozDrawWindow method as well which would result in
-    // broken docs.  We solve this problem by finding all content with similar
-    // visual structure to the already found method definitions.  It turns out
-    // that using the visual position of each element on the page is much
-    // more reliable than using the DOM structure
-    // (e.g. section_root > div > h3) for the MDN docs because MDN authors
-    // carefully check that the documentation for each method comment is
-    // visually consistent but take less care to check that each
-    // method comment has identical markup structure.
-    for (String prop in pmap.keys) {
-      Element e = pmap[prop];
-      ClientRect r = getClientRect(e);
-      // TODO(jacobr): a lot of these queries are identical and this code
-      // could easily be optimized.
-      for (final cand in match.queryAll(e.tagName)) {
-        // TODO(jacobr): use a negative selector instead.
-        if (!cand.classes.contains(DART_REMOVED) && !inTable(cand)) {
-          final candRect = getClientRect(cand);
-          // Only consider matches that have similar heights and identical left
-          // coordinates.
-          if (candRect.left == r.left &&
-            (candRect.height - r.height).abs() < 5) {
-            String propName = fullNameCleanup(cand.text);
-            if (isFirstCharLowerCase(propName) && !pmap.containsKey(propName)
-                && !alreadyMatchedProperties.contains(propName)) {
-              pmap[propName] = cand;
-            }
-          }
-        }
-      }
-    }
-
-    // We mark these elements in batch to reduce the number of layouts
-    // triggered. TODO(jacobr): use new batch based async measurement to make
-    // this code flow simpler.
-    for (String prop in pmap.keys) {
-      Element e = pmap[prop];
-      e.classes.add(DART_REMOVED);
-    }
-
-    // Find likely "subsections" of the main section and mark them with
-    // DART_REMOVED so we don't include them in member descriptions... which
-    // would suck.
-    for (Element e in match.queryAll("[id]")) {
-      if (e.id.contains(matchElement.id)) {
-        e.classes.add(DART_REMOVED);
-      }
-    }
-
-    for (String prop in pmap.keys) {
-      Element elem = pmap[prop];
-      bool obsolete = false;
-      final parse = filteredHtml(
-        elem, match, prop,
-        (Element e) {
-          obsolete = isObsolete(e);
-        });
-      Map entry = {
-        "url" : parse.url,
-        "name" : prop,
-        "help" : parse.html,
-        "obsolete" : obsolete
-      };
-      if (parse.idl.length > 0) {
-        entry["idl"] = parse.idl;
-      }
-      cleanupEntry(members, entry);
-    }
-  }
-}
-
-String trimHtml(String html) {
-  // TODO(jacobr): implement this.  Remove spurious enclosing HTML tags, etc.
-  return html;
-}
-
-bool maybeName(String name) {
-  return new RegExp("^[a-z][a-z0-9A-Z]+\$").hasMatch(name) ||
-      new RegExp("^[A-Z][A-Z_]*\$").hasMatch(name);
-}
-
-// TODO(jacobr): this element is ugly at the moment but will become easier to
-// read once ElementList supports most of the Element functionality.
-void markRemoved(var e) {
-  if (e != null) {
-    if (e is Element) {
-      e.classes.add(DART_REMOVED);
-    } else {
-      for (Element el in e) {
-        el.classes.add(DART_REMOVED);
-      }
-    }
-  }
-}
-
-// TODO(jacobr): remove this when the dartium JSON parse handles \n correctly.
-String JSONFIXUPHACK(String value) {
-  return value.replaceAll("\n", "ZDARTIUMDOESNTESCAPESLASHNJXXXX");
-}
-
-String mozToWebkit(String name) {
-  return name.replaceFirst(new RegExp("^moz"), "webkit");
-}
-
-String stripWebkit(String name) {
-  return trimPrefix(name, "webkit");
-}
-
-// TODO(jacobr): be more principled about this.
-String fullNameCleanup(String name) {
-  int parenIndex = name.indexOf('(');
-  if (parenIndex != -1) {
-    name = name.substring(0, parenIndex);
-  }
-  name = name.split(" ")[0];
-  name = name.split("\n")[0];
-  name = name.split("\t")[0];
-  name = name.split("*")[0];
-  name = name.trim();
-  name = safeNameCleanup(name);
-  return name;
-}
-
-// Less agressive than the full name cleanup to avoid overeager matching.
-// TODO(jacobr): be more principled about this.
-String safeNameCleanup(String name) {
-  int parenIndex = name.indexOf('(');
-  if (parenIndex != -1 && name.indexOf(")") != -1) {
-    // TODO(jacobr): workaround bug in:
-    // name = name.split("(")[0];
-    name = name.substring(0, parenIndex);
-  }
-  name = name.trim();
-  name = trimPrefix(name, currentType + ".");
-  name = trimPrefix(name, currentType.toLowerCase() + ".");
-  name = trimPrefix(name, currentTypeShort + ".");
-  name = trimPrefix(name, currentTypeShort.toLowerCase() + ".");
-  name = trimPrefix(name, currentTypeTiny + ".");
-  name = trimPrefix(name, currentTypeTiny.toLowerCase() + ".");
-  name = name.trim();
-  name = mozToWebkit(name);
-  return name;
-}
-
-/**
- * Remove h1, h2, and h3 headers.
- */
-void removeHeaders(DocumentFragment fragment) {
-  for (Element e in fragment.queryAll("h1, h2, h3")) {
-    e.remove();
-  }
-}
-
-/**
- * Given an [entry] representing a single method or property cleanup the
- * values performing some simple normalization and only adding the entry to
- * [members] if it has a valid name.
- */
-void cleanupEntry(List members, Map entry) {
-  if (entry.containsKey('help')) {
-    entry['help'] = trimHtml(entry['help']);
-  }
-  String name = fullNameCleanup(entry['name']);
-  entry['name'] = name;
-  if (maybeName(name)) {
-    for (String key in entry.keys) {
-      var value = entry[key];
-      if (value == null) {
-        entry.remove(key);
-        continue;
-      }
-      if (value is String) {
-        entry[key] = JSONFIXUPHACK(value);
-      }
-    }
-    members.add(entry);
-  }
-}
-
-// TODO(jacobr) dup with trim start....
-String trimPrefix(String str, String prefix) {
-  if (str.indexOf(prefix) == 0) {
-    return str.substring(prefix.length);
-  } else {
-    return str;
-  }
-}
-
-String trimStart(String str, String start) {
-  if (str.startsWith(start) && str.length > start.length) {
-    return str.substring(start.length);
-  }
-  return str;
-}
-
-String trimEnd(String str, String end) {
-  if (str.endsWith(end) && str.length > end.length) {
-    return str.substring(0, str.length - end.length);
-  }
-  return str;
-}
-
-/**
- * Extract a section with name [key] using [selector] to find start points for
- * the section in the document.
- */
-void extractSection(String selector, String key) {
-  for (Element e in document.queryAll(selector)) {
-    e = e.parent;
-    for (Element skip in e.queryAll("h1, h2, $IDL_SELECTOR")) {
-      skip.remove();
-    }
-    String html = filteredHtml(e, e, null, removeHeaders).html;
-    if (html.length > 0) {
-      if (dbEntry.containsKey(key)) {
-        dbEntry[key] += html;
-      } else {
-        dbEntry[key] = html;
-      }
-    }
-    e.classes.add(DART_REMOVED);
-  }
-}
-
-void run() {
-  // Inject CSS to ensure lines don't wrap unless they were intended to.
-  // This is needed to make the logic to determine what is a single line
-  // behave consistently even for very long method names.
-  document.head.nodes.add(new Element.html("""
-<style type="text/css">
-  body {
-    width: 10000px;
-  }
-</style>"""));
-
-  String title = trimEnd(window.document.title.trim(), " - MDN");
-  dbEntry['title'] = title;
-
-  // TODO(rnystrom): Clean up the page a bunch. Not sure if this is the best
-  // place to do this...
-  // TODO(jacobr): move this to right before we extract HTML.
-
-  // Remove the "Introduced in HTML <version>" boxes.
-  for (Element e in document.queryAll('.htmlVersionHeaderTemplate')) {
-    e.remove();
-  }
-
-  // Flatten the list of known DOM types into a faster and case-insensitive
-  // map.
-  domTypes = {};
-  for (final domType in domTypesRaw) {
-    domTypes[domType.toLowerCase()] = domType;
-  }
-
-  // Fix up links.
-  final SHORT_LINK = new RegExp(r'^[\w/]+$');
-  final INNER_LINK = new RegExp(r'[Ee]n/(?:[\w/]+/|)([\w#.]+)(?:\(\))?$');
-  final MEMBER_LINK = new RegExp(r'(\w+)[.#](\w+)');
-  final RELATIVE_LINK = new RegExp(r'^(?:../)*/?[Ee][Nn]/(.+)');
-
-  // - Make relative links absolute.
-  // - If we can, take links that point to other MDN pages and retarget them
-  //   to appropriate pages in our docs.
-  // TODO(rnystrom): Add rel external to links we didn't fix.
-  for (AnchorElement a in document.queryAll('a')) {
-    // Get the raw attribute because we *don't* want the browser to fully-
-    // qualify the name for us since it has the wrong base address for the
-    // page.
-    var href = a.attributes['href'];
-
-    // Ignore busted links.
-    if (href == null) continue;
-
-    // If we can recognize what it's pointing to, point it to our page instead.
-    tryToLinkToRealType(maybeType) {
-      // See if we know a type with that name.
-      final realType = domTypes[maybeType.toLowerCase()];
-      if (realType != null) {
-        href = '../html/$realType.html';
-      }
-    }
-
-    // If it's a relative link (that we know how to root), make it absolute.
-    var match = RELATIVE_LINK.firstMatch(href);
-    if (match != null) {
-      href = 'https://developer.mozilla.org/en/${match[1]}';
-    }
-
-    // If it's a word link like "foo" find a type or make it absolute.
-    match = SHORT_LINK.firstMatch(href);
-    if (match != null) {
-      href = 'https://developer.mozilla.org/en/DOM/${match[0]}';
-    }
-
-    // TODO(rnystrom): This is a terrible way to do this. Should use the real
-    // mapping from DOM names to html class names that we use elsewhere in the
-    // DOM scripts.
-    match = INNER_LINK.firstMatch(href);
-    if (match != null) {
-      // See if we're linking to a member ("type.name" or "type#name") or just
-      // a type ("type").
-      final member = MEMBER_LINK.firstMatch(match[1]);
-      if (member != null) {
-        tryToLinkToRealType(member[1]);
-      } else {
-        tryToLinkToRealType(match[1]);
-      }
-    }
-
-    // Put it back into the element.
-    a.attributes['href'] = href;
-  }
-
-  if (!title.toLowerCase().contains(currentTypeTiny.toLowerCase())) {
-    bool foundMatch = false;
-    // Test out if the title is really an HTML tag that matches the
-    // current class name.
-    for (String tag in [title.split(" ")[0], title.split(".").last]) {
-      try {
-        Element element = new Element.tag(tag);
-        // TODO(jacobr): this is a really ugly way of doing this that will
-        // stop working at some point soon.
-        if (element.typeName == currentType) {
-          foundMatch = true;
-          break;
-        }
-      } catch (e) {}
-    }
-    if (!foundMatch) {
-      dbEntry['skipped'] = true;
-      dbEntry['cause'] = "Suspect title";
-      onEnd();
-      return;
-    }
-  }
-
-  Element root = document.query(".pageText");
-  if (root == null) {
-    dbEntry['cause'] = '.pageText not found';
-    onEnd();
-    return;
-  }
-
-  markRemoved(root.query("#Notes"));
-  List members = dbEntry['members'];
-
-  // This is a laundry list of CSS selectors for boilerplate content on the
-  // MDN pages that we should ignore for the purposes of extracting
-  // documentation.
-  markRemoved(document.queryAll(".pageToc, footer, header, #nav-toolbar"));
-  markRemoved(document.queryAll("#article-nav"));
-  markRemoved(document.queryAll(".hideforedit"));
-  markRemoved(document.queryAll(".navbox"));
-  markRemoved(document.query("#Method_overview"));
-  markRemoved(document.queryAll("h1, h2"));
-
-  scrapeSection(root, "#Methods", currentType, members, 'methods');
-  scrapeSection(root, "#Constants, #Error_codes, #State_constants",
-      currentType, members, 'constants');
-  // TODO(jacobr): infer tables based on multiple matches rather than
-  // using a hard coded list of section ids.
-  scrapeSection(root,
-      "[id^=Properties], #Notes, [id^=Other_properties], #Attributes, " +
-      "#DOM_properties, #Event_handlers, #Event_Handlers",
-      currentType, members, 'properties');
-
-  // Avoid doing this till now to avoid messing up the section scrape.
-  markRemoved(document.queryAll("h3"));
-
-  ElementList examples = root.queryAll("span[id^=example], span[id^=Example]");
-
-  extractSection("#See_also", 'seeAlso');
-  extractSection("#Specification, #Specifications", "specification");
-
-  // TODO(jacobr): actually extract the constructor(s)
-  extractSection("#Constructor, #Constructors", 'constructor');
-  extractSection("#Browser_compatibility, #Compatibility", 'compatibility');
-
-  // Extract examples.
-  List<String> exampleHtml = [];
-  for (Element e in examples) {
-    e.classes.add(DART_REMOVED);
-  }
-  for (Element e in examples) {
-    String html = filteredHtml(e, root, null,
-      (DocumentFragment fragment) {
-        removeHeaders(fragment);
-        if (fragment.text.trim().toLowerCase() == "example") {
-          // Degenerate example.
-          fragment.nodes.clear();
-        }
-      }).html;
-    if (html.length > 0) {
-      exampleHtml.add(html);
-    }
-  }
-  if (exampleHtml.length > 0) {
-    dbEntry['examples'] = exampleHtml;
-  }
-
-  // Extract the class summary.
-  // Basically everything left over after the #Summary or #Description tag is
-  // safe to include in the summary.
-  StringBuffer summary = new StringBuffer();
-  for (Element e in root.queryAll("#Summary, #Description")) {
-    summary.write(filteredHtml(root, e, null, removeHeaders).html);
-  }
-
-  if (summary.length == 0) {
-    // Remove the "Gecko DOM Reference text"
-    Element ref = root.query(".lang.lang-en");
-    if (ref != null) {
-      ref = ref.parent;
-      String refText = ref.text.trim();
-      if (refText == "Gecko DOM Reference" ||
-          refText == "« Gecko DOM Reference") {
-        ref.remove();
-      }
-    }
-    // Risky... this might add stuff we shouldn't.
-    summary.write(filteredHtml(root, root, null, removeHeaders).html);
-  }
-
-  if (summary.length > 0) {
-    dbEntry['summary'] = summary.toString();
-  }
-
-  // Inject CSS to aid debugging in the browser.
-  // We could avoid doing this if we know we are not running in a browser..
-  document.head.nodes.add(new Element.html(DEBUG_CSS));
-
-  onEnd();
-}
-
-void main() {
-  window.on.load.add(documentLoaded);
-}
-
-void documentLoaded(event) {
-  // Load the database of expected methods and properties with an HttpRequest.
-  new HttpRequest.get('${window.location}.json', (req) {
-    data = JSON.decode(req.responseText);
-    dbEntry = {'members': [], 'srcUrl': pageUrl};
-    run();
-  });
-}
diff --git a/utils/apidoc/mdn/extract.sh b/utils/apidoc/mdn/extract.sh
deleted file mode 100755
index 8ec9208..0000000
--- a/utils/apidoc/mdn/extract.sh
+++ /dev/null
@@ -1,19 +0,0 @@
-
-BUILT_DIR=../../../out/ReleaseIA32
-DART2JS=$BUILT_DIR/dart2js
-DARTVM=$BUILT_DIR/dart
-
-$DART2JS -ooutput/extract.dart.js -c extract.dart
-node extractRunner.js
-
-# Read database.json, 
-# write database.filtered.json (with "best" entries) 
-# and obsolete.json (with entries marked obsolete).
-$DARTVM postProcess.dart
-
-# Create database.html, examples.html, and obsolete.html.
-$DARTVM prettyPrint.dart
-
-# Copy up the final output to the main MDN directory so we can check it in.
-cp output/database.filtered.json database.json
-cp output/obsolete.json .
diff --git a/utils/apidoc/mdn/extractRunner.js b/utils/apidoc/mdn/extractRunner.js
deleted file mode 100644
index 6a95a2e..0000000
--- a/utils/apidoc/mdn/extractRunner.js
+++ /dev/null
@@ -1,194 +0,0 @@
-var fs = require('fs');
-var util = require('util');
-var exec = require('child_process').exec;
-var path = require('path');
-
-// We have numProcesses extraction tasks running simultaneously to improve
-// performance.  If your machine is slow, you may need to dial back the
-// parallelism.
-var numProcesses = 8;
-
-var db = {};
-var metadata = {};
-var USE_VM = false;
-
-// Warning: START_DART_MESSAGE must match the value hardcoded in extract.dart
-// TODO(jacobr): figure out a cleaner way to parse this data.
-var START_DART_MESSAGE = "START_DART_MESSAGE_UNIQUE_IDENTIFIER";
-var END_DART_MESSAGE = "END_DART_MESSAGE_UNIQUE_IDENTIFIER";
-
-var domTypes = JSON.parse(fs.readFileSync('data/domTypes.json',
-    'utf8').toString());
-var cacheData = JSON.parse(fs.readFileSync('output/crawl/cache.json',
-    'utf8').toString());
-var dartIdl = JSON.parse(fs.readFileSync('data/dartIdl.json',
-    'utf8').toString());
-
-try {
-  fs.mkdirSync('output/extract');
-} catch (e) {
-  // It doesn't matter if the directories already exist.
-}
-
-var errorFiles = [];
-// TODO(jacobr): blacklist these types as we can't get good docs for them.
-// ["Performance"]
-
-function parseFile(type, onDone, entry, file, searchResultIndex) {
-  var inputFile;
-  try {
-    inputFile = fs.readFileSync("output/crawl/" + file, 'utf8').toString();
-  } catch (e) {
-    console.warn("Couldn't read: " + file);
-    onDone();
-    return;
-  }
-
-  var inputFileRaw = inputFile;
-  // Cached pages have multiple DOCTYPE tags.  Strip off the first one so that
-  // we have valid HTML.
-  // TODO(jacobr): use a regular expression instead of indexOf.
-  if (inputFile.toLowerCase().indexOf("<!doctype") == 0) {
-    var matchIndex = inputFile.toLowerCase().indexOf("<!doctype", 1);
-    if (matchIndex == -1) {
-      // not a cached page.
-      inputFile = inputFileRaw;
-    } else {
-      inputFile = inputFile.substr(matchIndex);
-    }
-  }
-
-  // Disable all existing javascript in the input file to speed up parsing and
-  // avoid conflicts between our JS and the JS in the file.
-  inputFile = inputFile.replace(/<script type="text\/javascript"/g,
-      '<script type="text/ignored"');
-
-  var endBodyIndex = inputFile.lastIndexOf("</body>");
-  if (endBodyIndex == -1) {
-    // Some files are missing a closing body tag.
-    endBodyIndex = inputFile.lastIndexOf("</html>");
-  }
-  if (endBodyIndex == -1) {
-    if (inputFile.indexOf("Error 404 (Not Found)") != -1) {
-      console.warn("Skipping 404 file: " + file);
-      onDone();
-      return;
-    }
-    throw "Unexpected file format for " + file;
-  }
-
-  inputFile = inputFile.substring(0, endBodyIndex) +
-    '<script type="text/javascript">\n' +
-    '  if (window.layoutTestController) {\n' +
-    '    var controller = window.layoutTestController;\n' +
-    '    controller.dumpAsText();\n' +
-    '    controller.waitUntilDone();\n' +
-    '  }\n' +
-    'window.addEventListener("message", receiveMessage, false);\n' +
-    'function receiveMessage(event) {\n' +
-     '  if (event.data.indexOf("' + START_DART_MESSAGE + '") != 0) return;\n' +
-     '  console.log(event.data + "' + END_DART_MESSAGE + '");\n' +
-     // We feature detect whether the browser supports layoutTestController
-     // so we only clear the document content when running in the test shell
-     // and not when debugging using a normal browser.
-     '  if (window.layoutTestController) {\n' +
-     '    document.documentElement.textContent = "";\n' +
-     '    window.layoutTestController.notifyDone();\n' +
-     '  }\n' +
-     '}\n' +
-    '</script>\n' +
-    (USE_VM ?
-      '<script type="application/dart" src="../../extract.dart"></script>' :
-      '<script type="text/javascript" src="../../output/extract.dart.js">' +
-      '</script>') +
-      '\n' + inputFile.substring(endBodyIndex);
-
-  console.log("Processing: " + file);
-  var absoluteDumpFileName = path.resolve("output/extract/" + file);
-  fs.writeFileSync(absoluteDumpFileName, inputFile, 'utf8');
-  var parseArgs = {
-    type: type,
-    searchResult: entry,
-    dartIdl: dartIdl[type]
-  };
-  fs.writeFileSync(absoluteDumpFileName + ".json", JSON.stringify(parseArgs),
-      'utf8');
-
-  /*
-  // TODO(jacobr): Make this run on platforms other than OS X.
-  var cmd = '../../../client/tests/drt/Content Shell.app/Contents/MacOS/' +
-      Content Shell' + absoluteDumpFileName;
-  */
-  // TODO(eub): Make this run on platforms other than Linux.
-  var cmd = '../../../client/tests/drt/content_shell ' + absoluteDumpFileName;
-  console.log(cmd);
-  exec(cmd,
-    function (error, stdout, stderr) {
-      var msgIndex = stdout.indexOf(START_DART_MESSAGE);
-      console.log('all: ' + stdout);
-      console.log('stderr: ' + stderr);
-      if (error !== null) {
-        console.log('exec error: ' + error);
-      }
-
-      // TODO(jacobr): use a regexp.
-      var msg = stdout.substring(msgIndex + START_DART_MESSAGE.length);
-      msg = msg.substring(0, msg.indexOf(END_DART_MESSAGE));
-      if (!(type in db)) {
-        db[type] = [];
-      }
-      try {
-        db[type][searchResultIndex] = JSON.parse(msg);
-      } catch(e) {
-        // Write the errors file every time there is an error so that if the
-        // user aborts the script, the error file is valid.
-        console.warn("error parsing result for " + type + " file= "+ file);
-        errorFiles.push(file);
-        fs.writeFileSync("output/errors.json",
-            JSON.stringify(errorFiles, null, ' '), 'utf8');
-      }
-      onDone();
-  });
-}
-
-var tasks = [];
-
-var numPending = numProcesses;
-
-function processNextTask() {
-  numPending--;
-  if (tasks.length > 0) {
-    numPending++;
-    var task = tasks.pop();
-    task();
-  } else {
-    if (numPending <= 0) {
-      console.log("Successfully completed all tasks");
-      fs.writeFileSync("output/database.json",
-          JSON.stringify(db, null, ' '), 'utf8');
-    }
-  }
-}
-
-function createTask(type, entry, index) {
-  return function () {
-    var file = type + index + '.html';
-    parseFile(type, processNextTask, entry, file, index);
-  };
-}
-
-for (var i = 0; i < domTypes.length; i++) {
-  var type = domTypes[i];
-  var entries = cacheData[type];
-  if (entries != null) {
-    for (var j = 0; j < entries.length; j++) {
-      tasks.push(createTask(type, entries[j], j));
-    }
-  } else {
-    console.warn("No crawled files for " + type);
-  }
-}
-
-for (var p = 0; p < numProcesses; p++) {
-  processNextTask();
-}
diff --git a/utils/apidoc/mdn/full_run.sh b/utils/apidoc/mdn/full_run.sh
deleted file mode 100755
index 8e26096..0000000
--- a/utils/apidoc/mdn/full_run.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-# This script goes from the input data in data/ all the way to the output data
-# in database.filtered.json
-# See output/database.html for a human readable view of the extracted data.
-
-rm -rf output
-node search.js
-node crawl.js
-./extract.sh
diff --git a/utils/apidoc/mdn/obsolete.json b/utils/apidoc/mdn/obsolete.json
deleted file mode 100644
index 48a8f5d..0000000
--- a/utils/apidoc/mdn/obsolete.json
+++ /dev/null
@@ -1 +0,0 @@
-[{"type":"HTMLDListElement","member":"compact"},{"type":"HTMLSelectElement","member":"tabIndex"},{"type":"HTMLAreaElement","member":"accessKey"},{"type":"HTMLAreaElement","member":"tabIndex"},{"type":"HTMLAreaElement","member":"noHref"},{"type":"HTMLParagraphElement","member":"align"},{"type":"CanvasRenderingContext2D","member":"webkitTextStyle"},{"type":"HTMLDivElement","member":"align"},{"type":"HTMLLegendElement","member":"accessKey"},{"type":"HTMLLegendElement","member":"align"},{"type":"KeyboardEvent","member":"keyCode"},{"type":"KeyboardEvent","member":"which"},{"type":"KeyboardEvent","member":"charCode"},{"type":"HTMLObjectElement","member":"declare"},{"type":"HTMLObjectElement","member":"codeBase"},{"type":"HTMLObjectElement","member":"code"},{"type":"HTMLObjectElement","member":"archive"},{"type":"HTMLObjectElement","member":"hspace"},{"type":"HTMLObjectElement","member":"border"},{"type":"HTMLObjectElement","member":"tabIndex"},{"type":"HTMLObjectElement","member":"vspace"},{"type":"HTMLObjectElement","member":"align"},{"type":"HTMLObjectElement","member":"codeType"},{"type":"HTMLObjectElement","member":"standby"},{"type":"HTMLImageElement","member":"longDesc"},{"type":"HTMLImageElement","member":"align"},{"type":"HTMLImageElement","member":"vspace"},{"type":"HTMLImageElement","member":"hspace"},{"type":"HTMLImageElement","member":"border"},{"type":"HTMLTableCaptionElement","member":"align"},{"type":"HTMLIFrameElement","member":"align"},{"type":"HTMLTableColElement","member":"align"},{"type":"HTMLTableColElement","member":"width"},{"type":"HTMLTableColElement","member":"ch"},{"type":"HTMLTableColElement","member":"vAlign"},{"type":"HTMLTableColElement","member":"chOff"},{"type":"HTMLHRElement","member":"width"},{"type":"HTMLHRElement","member":"align"},{"type":"HTMLHRElement","member":"noshade"},{"type":"HTMLHRElement","member":"size"},{"type":"HTMLHeadingElement","member":"align"},{"type":"HTMLBodyElement","member":"vLink"},{"type":"HTMLBodyElement","member":"background"},{"type":"HTMLBodyElement","member":"text"},{"type":"HTMLBodyElement","member":"link"},{"type":"HTMLBodyElement","member":"bgColor"},{"type":"HTMLBodyElement","member":"aLink"},{"type":"Document","member":"width"},{"type":"Document","member":"bgColor"},{"type":"Document","member":"all"},{"type":"Document","member":"xmlStandalone"},{"type":"Document","member":"xmlEncoding"},{"type":"Document","member":"applets"},{"type":"Document","member":"vlinkColor"},{"type":"Document","member":"linkColor"},{"type":"Document","member":"fgColor"},{"type":"Document","member":"height"},{"type":"Document","member":"alinkColor"},{"type":"Document","member":"xmlVersion"},{"type":"HTMLHtmlElement","member":"version"},{"type":"HTMLHeadElement","member":"profile"},{"type":"HTMLTextAreaElement","member":"accessKey"},{"type":"HTMLTextAreaElement","member":"tabIndex"},{"type":"HTMLTextAreaElement","member":"blur"},{"type":"HTMLTextAreaElement","member":"focus"},{"type":"XMLHttpRequest","member":"webkitResponseArrayBuffer"},{"type":"File","member":"fileName"},{"type":"File","member":"fileSize"},{"type":"HTMLInputElement","member":"accessKey"},{"type":"HTMLInputElement","member":"tabIndex"},{"type":"HTMLInputElement","member":"useMap"},{"type":"HTMLInputElement","member":"align"},{"type":"IDBVersionChangeEvent","member":"version"},{"type":"HTMLBRElement","member":"clear"},{"type":"HTMLAnchorElement","member":"accessKey"},{"type":"HTMLAnchorElement","member":"name"},{"type":"HTMLAnchorElement","member":"charset"},{"type":"HTMLAnchorElement","member":"rev"},{"type":"HTMLAnchorElement","member":"coords"},{"type":"HTMLAnchorElement","member":"tabIndex"},{"type":"HTMLAnchorElement","member":"shape"}]
\ No newline at end of file
diff --git a/utils/apidoc/mdn/postProcess.dart b/utils/apidoc/mdn/postProcess.dart
deleted file mode 100644
index ee61723..0000000
--- a/utils/apidoc/mdn/postProcess.dart
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Read database.json,
- * write database.filtered.json (with "best" entries)
- * and obsolete.json (with entries marked obsolete).
- */
-
-library postProcess;
-
-import 'dart:convert';
-import 'dart:io';
-import 'util.dart';
-
-void main() {
-  // Database of code documentation.
-  Map<String, List> database = JSON.decode(
-      new File('output/database.json').readAsStringSync());
-  final filteredDb = {};
-  final obsolete = [];
-  for (String type in database.keys) {
-    final entry = pickBestEntry(database[type], type);
-    if (entry == null) {
-      print("Can't find ${type} in database.  Skipping.");
-      continue;
-    }
-    filteredDb[type] = entry;
-    if (entry.containsKey("members")) {
-      Map members = getMembersMap(entry);
-      for (String name in members.keys) {
-        Map memberData = members[name];
-        if (memberData['obsolete'] == true) {
-          obsolete.add({'type': type, 'member' : name});
-        }
-      }
-    }
-  }
-  writeFileSync("output/database.filtered.json", JSON.encode(filteredDb));
-  writeFileSync("output/obsolete.json", JSON.encode(obsolete));
-}
diff --git a/utils/apidoc/mdn/prettyPrint.dart b/utils/apidoc/mdn/prettyPrint.dart
deleted file mode 100644
index 3e5c12a..0000000
--- a/utils/apidoc/mdn/prettyPrint.dart
+++ /dev/null
@@ -1,430 +0,0 @@
-/**
- * Creates database.html, examples.html, and obsolete.html.
- */
-
-library prettyPrint;
-
-import 'dart:convert';
-import 'dart:io';
-import 'util.dart';
-
-String orEmpty(String str) {
-  return str == null ? "" : str;
-}
-
-List<String> sortStringCollection(Iterable<String> collection) {
-  final out = <String>[];
-  out.addAll(collection);
-  out.sort((String a, String b) => a.compareTo(b));
-  return out;
-}
-
-int addMissing(StringBuffer sb, String type, Map members) {
-  int total = 0;
-  /**
-   * Add all missing members to the string output and return the number of
-   * missing members.
-   */
-  void addMissingHelper(String propType) {
-    Map expected = allProps[type][propType];
-    if (expected != null) {
-      for(final name in sortStringCollection(expected.keys)) {
-        if (!members.containsKey(name)) {
-          total++;
-        sb.write("""
-                <tr class="missing">
-                  <td>$name</td>
-                  <td></td>
-                  <td>Could not find documentation for $propType</td>
-                </tr>
-    """);
-        }
-      }
-    }
-  }
-
-  addMissingHelper('properties');
-  addMissingHelper('methods');
-  addMissingHelper('constants');
-  return total;
-}
-
-void main() {
-  // Database of code documentation.
-  final Map<String, Map> database = JSON.decode(
-      new File('output/database.filtered.json').readAsStringSync());
-
-  // Types we have documentation for.
-  matchedTypes = new Set<String>();
-  int numMissingMethods = 0;
-  int numFoundMethods = 0;
-  int numExtraMethods = 0;
-  int numGen = 0;
-  int numSkipped = 0;
-  final sbSkipped = new StringBuffer();
-  final sbAllExamples = new StringBuffer();
-
-  // Table rows for all obsolete members.
-  final sbObsolete = new StringBuffer();
-  // Main documentation file.
-  final sb = new StringBuffer();
-
-  // TODO(jacobr): switch to using a real template system instead of string
-  // interpolation combined with StringBuffers.
-  sb.write("""
-<html>
-  <head>
-    <style type="text/css">
-      body {
-      	background-color: #eee;
-      	margin: 10px;
-      	font: 14px/1.428 "Lucida Grande", "Lucida Sans Unicode", Lucida,
-            Arial, Helvetica, sans-serif;
-      }
-
-      .debug {
-      	color: #888;
-      }
-
-      .compatibility, .links, .see-also, .summary, .members, .example {
-      	border: 1px solid #CCC;
-        margin: 5px;
-        padding: 5px;
-      }
-
-      .type, #dart_summary {
-        border: 1px solid;
-        margin-top: 10px;
-        margin-bottom: 10px;
-        padding: 10px;
-        overflow: hidden;
-        background-color: white;
-        -moz-box-shadow: 5px 5px 5px #888;
-        -webkit-box-shadow: 5px 5px 5px #888;
-        box-shadow: 5px 5px 5px #888;
-      }
-
-      #dart_summary {
-      	border: 2px solid #00F;
-        margin: 5px;
-        padding: 5px;
-      }
-
-      th {
-        background-color:#ccc;
-        font-weight: bold;
-      }
-
-      tr:nth-child(odd) {
-        background-color:#eee;
-      }
-      tr:nth-child(even) {
-	      background-color:#fff;
-	    }
-
-      tr:nth-child(odd).unknown {
-        background-color:#dd0;
-      }
-      tr:nth-child(even).unknown {
-	      background-color:#ff0;
-	    }
-
-      tr:nth-child(odd).missing {
-        background-color:#d88;
-      }
-      tr:nth-child(even).missing {
-	      background-color:#faa;
-	    }
-
-	    li.unknown {
-        color: #f00;
-	    }
-
-	    td, th {
-	    	vertical-align: top;
-	    }
-    </style>
-    <title>Doc Dump</title>
-  </head>
-  <body>
-    <h1>Doc Dump</h1>
-    <ul>
-      <li><a href="#dart_summary">Summary</a></li>
-    </li>
-""");
-  for (String type in sortStringCollection(database.keys)) {
-  	final entry = database[type];
-    if (entry == null || entry.containsKey('skipped')) {
-      numSkipped++;
-      sbSkipped.write("""
-    <li id="$type">
-      <a target="_blank" href="http://www.google.com/cse?cx=017193972565947830266%3Awpqsk6dy6ee&ie=UTF-8&q=$type">
-        $type
-      </a>
-      --
-      Title: ${entry == null ? "???" : entry["title"]} -- Issue:
-      ${entry == null ? "???" : entry['cause']}
-      --
-      <a target="_blank" href="${entry == null ? "???" : entry["srcUrl"]}">
-        scraped url
-      </a>
-    </li>""");
-      continue;
-    }
-    matchedTypes.add(type);
-    numGen++;
-    StringBuffer sbSections = new StringBuffer();
-    StringBuffer sbMembers = new StringBuffer();
-    StringBuffer sbExamples = new StringBuffer();
-    if (entry.containsKey("members")) {
-      Map members = getMembersMap(entry);
-      sbMembers.write("""
-  	    <div class="members">
-          <h3><span class="debug">[dart]</span> Members</h3>
-          <table>
-            <tbody>
-              <tr>
-                <th>Name</th><th>Description</th><th>IDL</th><th>Status</th>
-              </tr>
-""");
-      for (String name in sortStringCollection(members.keys)) {
-        Map memberData = members[name];
-        bool unknown = !hasAny(type, name);
-        StringBuffer classes = new StringBuffer();
-        if (unknown) classes.write("unknown ");
-        if (unknown) {
-          numExtraMethods++;
-        } else {
-          numFoundMethods++;
-        }
-
-        final sbMember = new StringBuffer();
-
-        if (memberData.containsKey('url')) {
-          sbMember.write("""
-		         <td><a href="${memberData['url']}">$name</a></td>
-""");
-        } else {
-          sbMember.write("""
-		         <td>$name</td>
-""");
-        }
-        sbMember.write("""
-		  	     <td>${memberData['help']}</td>
-             <td>
-               <pre>${orEmpty(memberData['idl'])}</pre>
-             </td>
-             <td>${memberData['obsolete'] == true ? "Obsolete" : ""}</td>
-""");
-        if (memberData['obsolete'] == true) {
-          sbObsolete.write("<tr class='$classes'><td>$type</td>$sbMember</tr>");
-        }
-        sbMembers.write("<tr class='$classes'>$sbMember</tr>");
-    	}
-
-      numMissingMethods += addMissing(sbMembers, type, members);
-
-      sbMembers.write("""
-            </tbody>
-          </table>
-        </div>
-""");
-    }
-    for (String sectionName in
-        ["summary", "constructor", "compatibility", "specification",
-         "seeAlso"]) {
-      if (entry.containsKey(sectionName)) {
-        sbSections.write("""
-      <div class="$sectionName">
-        <h3><span class="debug">[Dart]</span> $sectionName</h3>
-        ${entry[sectionName]}
-      </div>
-""");
-      }
-    }
-    if (entry.containsKey("links")) {
-      sbSections.write("""
-      <div class="links">
-        <h3><span class="debug">[Dart]</span> Specification</h3>
-        <ul>
-""");
-    	List links = entry["links"];
-    	for (Map link in links) {
-    	  sbSections.write("""
-      <li><a href="${link['href']}">${link['title']}</a></li>
-""");
-      }
-      sbSections.write("""
-        </ul>
-      </div>
-""");
-    }
-    if (entry.containsKey("examples")) {
-    	for (String example in entry["examples"]) {
-  	  sbExamples.write("""
-	    <div class="example">
-	  	  <h3><span class="debug">[Dart]</span> Example</h3>
-	  	  $example
-	  	</div>
-""");
-      }
-    }
-
-    String title = entry['title'];
-    if (title != type) {
-      title = '<h4>Dart type: $type</h4><h2>$title</h2>';
-    } else {
-      title = '<h2>$title</h2>';
-    }
-    sb.write("""
-    <div class='type' id="$type">
-      <a href='${entry['srcUrl']}'>$title</a>
-$sbSections
-$sbExamples
-$sbMembers
-    </div>
-""");
-    if (sbExamples.length > 0) {
-      sbAllExamples.write("""
-    <div class='type' id="$type">
-      <a href='${entry['srcUrl']}'>$title</a>
-      $sbExamples
-    </div>
-""");
-    }
-  }
-
-  for (String type in sortStringCollection(allProps.keys)) {
-    if (!matchedTypes.contains(type) &&
-        !database.containsKey(type)) {
-      numSkipped++;
-      sbSkipped.write("""
-    <li class="unknown" id="$type">
-      <a target="_blank" href="http://www.google.com/cse?cx=017193972565947830266%3Awpqsk6dy6ee&ie=UTF-8&q=$type">
-        $type
-      </a>
-    </li>
-""");
-    }
-  }
-
-  sb.write("""
-<div id="#dart_summary">
-  <h2>Summary</h2>
-  <h3>
-    Generated docs for $numGen classes out of a possible
-    ${allProps.keys.length}
-  </h3>
-  <h3>Found documentation for $numFoundMethods methods listed in WebKit</h3>
-  <h3>
-    Found documentation for $numExtraMethods methods not listed in WebKit
-  </h3>
-  <h3>
-    Unable to find documentation for $numMissingMethods methods present in
-    WebKit
-  </h3>
-  <h3>
-    Skipped generating documentation for $numSkipped classes due to no
-    plausible matching files
-  </h3>
-  <ul>
-$sbSkipped
-  </ul>
-</div>
-""");
-  sb.write("""
-  </body>
-</html>
-""");
-
-  writeFileSync("output/database.html", sb.toString());
-
-  writeFileSync("output/examples.html", """
-<html>
-  <head>
-    <style type="text/css">
-      body {
-      	background-color: #eee;
-      	margin: 10px;
-      	font: 14px/1.428 "Lucida Grande", "Lucida Sans Unicode", Lucida, Arial,
-            Helvetica, sans-serif;
-      }
-
-      .debug {
-      	color: #888;
-      }
-
-      .example {
-      	border: 1px solid #CCC;
-        margin: 5px;
-        padding: 5px;
-      }
-
-      .type {
-        border: 1px solid;
-        margin-top: 10px;
-        margin-bottom: 10px;
-        padding: 10px;
-        overflow: hidden;
-        background-color: white;
-        -moz-box-shadow: 5px 5px 5px #888;
-        -webkit-box-shadow: 5px 5px 5px #888;
-        box-shadow: 5px 5px 5px #888;
-      }
-    </style>
-    <title>All examples</title>
-  </head>
-  <body>
-    <h1>All examples</h1>
-$sbAllExamples
-  </body>
- </html>
-""");
-
-  writeFileSync("output/obsolete.html", """
-<html>
-  <head>
-    <style type="text/css">
-      body {
-        background-color: #eee;
-        margin: 10px;
-        font: 14px/1.428 "Lucida Grande", "Lucida Sans Unicode", Lucida,
-            Arial, Helvetica, sans-serif;
-      }
-
-      .debug {
-        color: #888;
-      }
-
-      .type {
-        border: 1px solid;
-        margin-top: 10px;
-        margin-bottom: 10px;
-        padding: 10px;
-        overflow: hidden;
-        background-color: white;
-        -moz-box-shadow: 5px 5px 5px #888;
-        -webkit-box-shadow: 5px 5px 5px #888;
-        box-shadow: 5px 5px 5px #888;
-      }
-    </style>
-    <title>Methods marked as obsolete</title>
-  </head>
-  <body>
-    <h1>Methods marked as obsolete</h1>
-    <table>
-      <tbody>
-        <tr>
-          <th>Type</th>
-          <th>Name</th>
-          <th>Description</th>
-          <th>IDL</th>
-          <th>Status</th>
-        </tr>
-$sbObsolete
-    </tbody>
-   </table>
-  </body>
- </html>
- """);
-}
diff --git a/utils/apidoc/mdn/search.js b/utils/apidoc/mdn/search.js
deleted file mode 100644
index f01d692..0000000
--- a/utils/apidoc/mdn/search.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/**
- * Uses a Google Custom Search Engine to find pages on
- * developer.mozilla.org that appear to match types from the Webkit IDL
- */
-var https = require('https');
-var fs = require('fs');
-
-var domTypes = JSON.parse(fs.readFileSync('data/domTypes.json', 'utf8'));
-
-try {
-  fs.mkdirSync('output');
-  fs.mkdirSync('output/search');
-} catch (e) {
-  // It doesn't matter if the directories already exist.
-}
-
-function searchForType(type) {
-  // Strip off WebKit specific prefixes from type names to increase the chances
-  // of getting matches on developer.mozilla.org.
-  var shortType = type.replace(/^WebKit/, "");
-
-  // We use a Google Custom Search Engine provisioned for 10,000 API based
-  // queries per day that limits search results to developer.mozilla.org.
-  // You shouldn't need to, but if you want to create your own Google Custom
-  // Search Engine, visit http://www.google.com/cse/
-  var options = {
-    host: 'www.googleapis.com',
-    path: '/customsearch/v1?key=AIzaSyDN1RhE5FafLzLfErGpoYhHlLHeyEkxTkM&' +
-          'cx=017193972565947830266:wpqsk6dy6ee&num=5&q=' + shortType,
-    port: 443,
-    method: 'GET'
-  };
-
-  var req = https.request(options, function(res) {
-    res.setEncoding('utf8');
-    var data = '';
-    res.on('data', function(d) {
-      data += d;
-    });
-    var onClose = function(e) {
-      fs.writeFile("output/search/" + type + ".json", data, function(err) {
-          if (err) throw err;
-      console.log('Done searching for ' + type);
-      });
-    }
-    res.on('close', onClose);
-    res.on('end', onClose);
-  });
-  req.end();
-
-  req.on('error', function(e) {
-    console.error(e);
-  });
-}
-
-for (var i = 0; i < domTypes.length; i++) {
-  searchForType(domTypes[i]);
-}
diff --git a/utils/apidoc/mdn/util.dart b/utils/apidoc/mdn/util.dart
deleted file mode 100644
index e5907bd..0000000
--- a/utils/apidoc/mdn/util.dart
+++ /dev/null
@@ -1,95 +0,0 @@
-library util;
-
-import 'dart:io';
-
-Map<String, Map> _allProps;
-
-Map<String, Map> get allProps {
-  if (_allProps == null) {
-    // Database of expected property names for each type in WebKit.
-    _allProps = parse.parse(
-        new File('data/dartIdl.json').readAsStringSync());
-  }
-  return _allProps;
-}
-
-Set<String> matchedTypes;
-
-/** Returns whether the type has any member matching the specified name. */
-bool hasAny(String type, String prop) {
-  final data = allProps[type];
-  return data['properties'].containsKey(prop) ||
-      data['methods'].containsKey(prop) ||
-      data['constants'].containsKey(prop);
-}
-
-/**
- * Return the members from an [entry] as Map of member names to member
- * objects.
- */
-Map getMembersMap(Map entry) {
-  List<Map> rawMembers = entry["members"];
-  final members = {};
-  for (final entry in rawMembers) {
-    members[entry['name']] = entry;
-  }
-  return members;
-}
-
-/**
- * Score entries using similarity heuristics calculated from the observed and
- * expected list of members. We could be much less naive and penalize spurious
- * methods, prefer entries with class level comments, etc. This method is
- * needed becase we extract entries for each of the top search results for
- * each class name and rely on these scores to determine which entry was
- * best.  Typically all scores but one will be zero.  Multiple pages have
- * non-zero scores when MDN has multiple pages on the same class or pages on
- * similar classes (e.g. HTMLElement and Element), or pages on Mozilla
- * specific classes that are similar to DOM classes (Console).
- */
-num scoreEntry(Map entry, String type) {
-  num score = 0;
-  // TODO(jacobr): consider removing skipped entries completely instead of
-  // just giving them lower scores.
-  if (!entry.containsKey('skipped')) {
-    score++;
-  }
-  if (entry.containsKey("members")) {
-    Map members = getMembersMap(entry);
-    for (String name in members.keys) {
-      if (hasAny(type, name)) {
-        score++;
-      }
-    }
-  }
-  return score;
-}
-
-/**
- * Given a list of candidates for the documentation for a type, find the one
- * that is the best.
- */
-Map pickBestEntry(List entries, String type) {
-  num bestScore = -1;
-  Map bestEntry;
-  for (Map entry in entries) {
-    if (entry != null) {
-      num score = scoreEntry(entry, type);
-      if (score > bestScore) {
-        bestScore = score;
-        bestEntry = entry;
-      }
-    }
-  }
-  return bestEntry;
-}
-
-/**
- * Helper for sync creation of a whole file from a string.
- */
-void writeFileSync(String filename, String data) {
-  File f = new File(filename);
-  RandomAccessFile raf = f.openSync(FileMode.WRITE);
-  raf.writeStringSync(data);
-  raf.closeSync();
-}
diff --git a/utils/apidoc/static/apidoc-styles.css b/utils/apidoc/static/apidoc-styles.css
deleted file mode 100644
index 05e4389..0000000
--- a/utils/apidoc/static/apidoc-styles.css
+++ /dev/null
@@ -1,92 +0,0 @@
-#comments {
-  width: 1000px;
-  margin: 0 auto 22px auto;
-}
-
-.mdn {
-  border: solid 1px hsl(10, 80%, 90%);
-  border-radius: 4px;
-  font-size: 16px;
-  line-height: 22px;
-  margin: 22px 0;
-  padding: 21px 21px 0 21px;
-}
-
-/* Try to massage the MDN content a bit to look nicer. This makes sure we don't
-   double pad the insides of the box. */
-.mdn > *:first-child {
-  margin-top: 0;
-}
-
-.mdn > *:last-child {
-  margin-bottom: 0;
-}
-
-.mdn .note {
-  background: hsl(220, 80%, 93%);
-  font: 400 14px/22px 'Open Sans', 'Lucida Sans Unicode', 'Lucida Grande',
-      sans-serif;
-  color: hsl(220, 40%, 40%);
-  border-radius: 4px;
-  padding: 11px;
-}
-
-.mdn .warning {
-  background: hsl(40, 80%, 90%);
-  font: 400 14px/22px 'Open Sans', 'Lucida Sans Unicode', 'Lucida Grande',
-      sans-serif;
-  color: hsl(40, 40%, 30%);
-  border-radius: 4px;
-  padding: 11px;
-}
-
-.mdn h6 {
-  font: 600 14px/22px 'Open Sans', 'Lucida Sans Unicode', 'Lucida Grande',
-      sans-serif;
-  color: #999;
-  margin: 22px 0 0 0;
-}
-
-/* End MDN massage. */
-
-.mdn-note {
-  font: 600 11px/22px 'Open Sans', 'Lucida Sans Unicode', 'Lucida Grande',
-      sans-serif;
-  color: hsl(10, 60%, 80%);
-  text-align: right;
-  line-height: 21px; /* To absorb bottom border 1px. */
-  margin-right: -14px;
-}
-
-.mdn-note a {
-  color: hsl(10, 60%, 80%);
-}
-
-.mdn-note a:hover {
-  color: hsl(10, 60%, 60%);
-}
-
-.mdn-attribution {
-  background: hsl(10, 80%, 95%);
-  border-radius: 4px;
-  font: 400 13px/22px 'Open Sans', 'Lucida Sans Unicode', 'Lucida Grande',
-      sans-serif;
-  color: hsl(10, 30%, 30%);
-  padding: 22px 22px 22px 75px;
-}
-
-.mdn-logo {
-  float: left;
-  margin-left: -53px;
-  /*padding-right: 11px;*/
-}
-
-.correspond {
-  font: italic 400 14px/22px 'Open Sans', 'Lucida Sans Unicode',
-      'Lucida Grande', sans-serif;
-  color: #666;
-}
-
-.correspond .crossref {
-  font: inherit;
-}
\ No newline at end of file
diff --git a/utils/apidoc/static/mdn-logo-tiny.png b/utils/apidoc/static/mdn-logo-tiny.png
deleted file mode 100644
index f19019d..0000000
--- a/utils/apidoc/static/mdn-logo-tiny.png
+++ /dev/null
Binary files differ