Version 2.0.0-dev.40.0

Merge commit '581c512345da309711369ce3878bb45119a0e732' into dev
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 48ec197..1522229 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,5 @@
+## 2.0.0-dev.40.0
+
 ## 2.0.0-dev.39.0
 ### Tool Changes
 #### Pub
@@ -227,6 +229,7 @@
     `timeout`.
   * `Stdin.hasTerminal` added, which is true if stdin is attached to a terminal.
   * `WebSocket` added static `userAgent` property.
+  * `RandomAccessFile.close` returns `Future<void>`
 
 * `dart:isolate`
 
@@ -274,22 +277,36 @@
 
 ### Tool Changes
 
-* Analyzer
+#### Analyzer
 
-  * The analyzer will no longer issue a warning when a generic type parameter
-    is used as the type in an instance check. For example:
+* The analyzer will no longer issue a warning when a generic type parameter
+  is used as the type in an instance check. For example:
+
+  ```dart
+  test<T>() {
+    print(3 is T); // No warning
+  }
+  ```
+
+* New static checking of `@visibleForTesting` elements. Accessing a method,
+  function, class, etc. annotated with `@visibleForTesting` from a file _not_
+  in a `test/` directory will result in a new hint ([issue 28273]).
+* Static analysis now respects functions annotated with `@alwaysThrows`
+  ([issue 31384]).
+* New hints added:
+  * `NULL_AWARE_BEFORE_OPERATOR` when an operator is used after a null-aware
+    access. For example:
 
     ```dart
-    test<T>() {
-      print(3 is T); // No warning
-    }
+    x?.a - ''; // HINT
     ```
 
-  * New static checking of `@visibleForTesting` elements. Accessing a method,
-    function, class, etc. annotated with `@visibleForTesting` from a file _not_
-    in a `test/` directory will result in a new hint ([issue 28273]).
-  * Static analysis now respects functions annotated with `@alwaysThrows`
-    ([issue 31384]).
+  * `NULL_AWARE_IN_LOGICAL_OPERATOR` when an expression with null-aware access
+    is used as a condition in logical operators. For example:
+
+    ```dart
+    x.a || x?.b; // HINT
+    ```
 
 [issue 28273]: https://github.com/dart-lang/sdk/issues/28273
 [issue 31384]: https://github.com/dart-lang/sdk/issues/31384
diff --git a/DEPS b/DEPS
index 1c46318..e30ca30 100644
--- a/DEPS
+++ b/DEPS
@@ -94,7 +94,7 @@
   "http_retry_tag": "@0.1.0",
   "http_tag" : "@0.11.3+16",
   "http_throttle_tag" : "@1.0.1",
-  "idl_parser_rev": "@7fbe68cab90c38147dee4f48c30ad0d496c17915",
+  "idl_parser_rev": "@5fb1ebf49d235b5a70c9f49047e83b0654031eb7",
   "intl_tag": "@0.15.2",
   "isolate_tag": "@1.1.0",
   "jinja2_rev": "@2222b31554f03e62600cd7e383376a7c187967a1",
@@ -143,7 +143,7 @@
   "utf_tag": "@0.9.0+4",
   "watcher_tag": "@0.9.7+7",
   "web_socket_channel_tag": "@1.0.7",
-  "WebCore_rev": "@3c45690813c112373757bbef53de1602a62af609",
+  "WebCore_rev": "@fb11e887f77919450e497344da570d780e078bc8",
   "yaml_tag": "@2.1.13",
   "zlib_rev": "@c3d0a6190f2f8c924a05ab6cc97b8f975bddd33f",
 }
diff --git a/pkg/analysis_server/benchmark/integration/main.dart b/pkg/analysis_server/benchmark/integration/main.dart
index 0760b17..a84e913 100644
--- a/pkg/analysis_server/benchmark/integration/main.dart
+++ b/pkg/analysis_server/benchmark/integration/main.dart
@@ -75,9 +75,8 @@
       help: '<filePath>\n'
           'The input file specifying how this client should interact with the server.\n'
           'If the input file name is "stdin", then the instructions are read from standard input.');
-  _argParser.addOption(MAP_OPTION,
+  _argParser.addMultiOption(MAP_OPTION,
       abbr: 'm',
-      allowMultiple: true,
       splitCommas: false,
       help: '<oldSrcPath>,<newSrcPath>\n'
           'This option defines a mapping from the original source directory <oldSrcPath>\n'
diff --git a/pkg/analysis_server/benchmark/perf/analysis_timing_tests.dart b/pkg/analysis_server/benchmark/perf/analysis_timing_tests.dart
index 7933045..fb60e43 100644
--- a/pkg/analysis_server/benchmark/perf/analysis_timing_tests.dart
+++ b/pkg/analysis_server/benchmark/perf/analysis_timing_tests.dart
@@ -52,8 +52,8 @@
 String source;
 
 ArgParser _createArgParser() => new ArgParser()
-  ..addOption(METRIC_NAME_OPTION,
-      help: 'metric name (defaults to `analysis`)', allowMultiple: true)
+  ..addMultiOption(METRIC_NAME_OPTION,
+      help: 'metric name (defaults to `analysis`)')
   ..addOption(SOURCE_OPTION, help: 'full path to source directory for analysis')
   ..addOption(PRIORITY_FILE_OPTION,
       help: '(optional) full path to a priority file');
diff --git a/pkg/analysis_server/lib/src/flutter/flutter_outline_computer.dart b/pkg/analysis_server/lib/src/flutter/flutter_outline_computer.dart
index 25dfe13..f786479 100644
--- a/pkg/analysis_server/lib/src/flutter/flutter_outline_computer.dart
+++ b/pkg/analysis_server/lib/src/flutter/flutter_outline_computer.dart
@@ -68,6 +68,7 @@
 
     // Compute instrumented code.
     if (widgets.isNotEmpty) {
+      _rewriteRelativeDirectives();
       instrumentationEdits.sort((a, b) => b.offset - a.offset);
       instrumentedCode =
           SourceEdit.applySequence(content, instrumentationEdits);
@@ -339,6 +340,25 @@
     }
     return node.toString();
   }
+
+  /// The instrumented code is put into a temporary directory for Dart VM to
+  /// run. So, any relative URIs must be changed to corresponding absolute URIs.
+  void _rewriteRelativeDirectives() {
+    for (var directive in unit.directives) {
+      if (directive is UriBasedDirective) {
+        String uriContent = directive.uriContent;
+        Source source = directive.uriSource;
+        if (uriContent != null && source != null) {
+          try {
+            if (!Uri.parse(uriContent).isAbsolute) {
+              instrumentationEdits.add(new SourceEdit(directive.uri.offset,
+                  directive.uri.length, "'${source.uri}'"));
+            }
+          } on FormatException {}
+        }
+      }
+    }
+  }
 }
 
 class _FlutterOutlineBuilder extends GeneralizingAstVisitor<void> {
diff --git a/pkg/analysis_server/lib/src/server/driver.dart b/pkg/analysis_server/lib/src/server/driver.dart
index 3f35824..8ae5367 100644
--- a/pkg/analysis_server/lib/src/server/driver.dart
+++ b/pkg/analysis_server/lib/src/server/driver.dart
@@ -72,8 +72,7 @@
       List<String> allowed,
       Map<String, String> allowedHelp,
       String defaultsTo,
-      void callback(value),
-      bool allowMultiple: false}) {
+      void callback(value)}) {
     _knownFlags.add(name);
     _parser.addOption(name,
         abbr: abbr,
@@ -81,8 +80,7 @@
         allowed: allowed,
         allowedHelp: allowedHelp,
         defaultsTo: defaultsTo,
-        callback: callback,
-        allowMultiple: allowMultiple);
+        callback: callback);
   }
 
   /// Generates a string displaying usage information for the defined options.
@@ -318,6 +316,8 @@
     analysisServerOptions.cacheFolder = results[CACHE_FOLDER];
     if (results.wasParsed(PREVIEW_DART2)) {
       analysisServerOptions.previewDart2 = results[PREVIEW_DART2];
+    } else {
+      analysisServerOptions.previewDart2 = true;
     }
     analysisServerOptions.useCFE = results[USE_CFE];
 
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart
index 3f9c444..e31866b 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart
@@ -101,6 +101,9 @@
     }
 
     SourceRange selectionRange = builder.selectionRange;
+    if (selectionRange == null) {
+      return null;
+    }
     int offsetDelta = targetId.offset + replacement.indexOf(completion);
     String displayText =
         displayTextBuffer.isNotEmpty ? displayTextBuffer.toString() : null;
diff --git a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
index ce3e78b..446edf9 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
@@ -2973,7 +2973,7 @@
   /// does not export a class with such name.
   Future<ClassElement> _getExportedClass(
       String libraryUri, String className) async {
-    var libraryElement = await _getLibraryByUri(libraryUri);
+    var libraryElement = await session.getLibraryByUri(libraryUri);
     var element = libraryElement.exportNamespace.get(className);
     if (element is ClassElement) {
       return element;
@@ -2982,34 +2982,6 @@
     }
   }
 
-  /// Return the [LibraryElement] for the library with the given [uri].
-  Future<LibraryElement> _getLibraryByUri(String uri) async {
-    var libraryElement = libraryCache[uri];
-    if (libraryElement == null) {
-      void walkLibraries(LibraryElement library) {
-        var libraryUri = library.source.uri.toString();
-        if (libraryCache[libraryUri] == null) {
-          libraryCache[libraryUri] = library;
-          library.importedLibraries.forEach(walkLibraries);
-          library.exportedLibraries.forEach(walkLibraries);
-        }
-      }
-
-      // Fill the cache with all libraries referenced from the unit.
-      walkLibraries(unitLibraryElement);
-
-      // The library might be already in the cache.
-      libraryElement = libraryCache[uri];
-
-      // If still not found, build a new library element.
-      if (libraryElement == null) {
-        libraryElement = await session.getLibraryByUri(uri);
-        libraryCache[uri] = libraryElement;
-      }
-    }
-    return libraryElement;
-  }
-
   /**
    * Returns the text of the given node in the unit.
    */
diff --git a/pkg/analysis_server/lib/src/services/correction/fix.dart b/pkg/analysis_server/lib/src/services/correction/fix.dart
index dd3dc19..a2bfe33 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix.dart
@@ -89,6 +89,8 @@
 class DartFixKind {
   static const ADD_ASYNC =
       const FixKind('ADD_ASYNC', 50, "Add 'async' modifier");
+  static const ADD_EXPLICIT_CAST =
+      const FixKind('ADD_EXPLICIT_CAST', 50, "Add cast");
   static const ADD_FIELD_FORMAL_PARAMETERS = const FixKind(
       'ADD_FIELD_FORMAL_PARAMETERS', 30, "Add final field formal parameters");
   static const ADD_MISSING_PARAMETER_POSITIONAL = const FixKind(
@@ -211,6 +213,8 @@
       'REMOVE_UNUSED_CATCH_STACK', 50, "Remove unused stack trace variable");
   static const REMOVE_UNUSED_IMPORT =
       const FixKind('REMOVE_UNUSED_IMPORT', 50, "Remove unused import");
+  static const RENAME_TO_CAMEL_CASE =
+      const FixKind('RENAME_TO_CAMEL_CASE', 50, "Rename to '{0}'");
   static const REPLACE_BOOLEAN_WITH_BOOL = const FixKind(
       'REPLACE_BOOLEAN_WITH_BOOL', 50, "Replace 'boolean' with 'bool'");
   static const REPLACE_FINAL_WITH_CONST = const FixKind(
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 c5340dc..7c28a08 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -364,6 +364,7 @@
       await _addFix_useStaticAccess_property();
     }
     if (errorCode == StaticTypeWarningCode.INVALID_ASSIGNMENT) {
+      await _addFix_addExplicitCast();
       await _addFix_changeTypeAnnotation();
     }
     if (errorCode == StaticTypeWarningCode.INVOCATION_OF_NON_FUNCTION) {
@@ -447,6 +448,9 @@
       if (name == LintNames.empty_statements) {
         await _addFix_removeEmptyStatement();
       }
+      if (name == LintNames.non_constant_identifier_names) {
+        await _addFix_renameToCamelCase();
+      }
       if (name == LintNames.prefer_collection_literals) {
         await _addFix_replaceWithLiteral();
       }
@@ -497,6 +501,80 @@
     }
   }
 
+  Future<Null> _addFix_addExplicitCast() async {
+    if (coveredNode is! Expression) {
+      return;
+    }
+    Expression target = coveredNode;
+    DartType fromType = target.staticType;
+    DartType toType;
+    AstNode parent = target.parent;
+    if (parent is AssignmentExpression && target == parent.rightHandSide) {
+      toType = parent.leftHandSide.staticType;
+    } else if (parent is VariableDeclaration && target == parent.initializer) {
+      toType = parent.name.staticType;
+    } else {
+      return;
+    }
+    // TODO(brianwilkerson) I think it's more efficient to invoke `cast` before
+    // invoking `toList()`, so check to see whether the cast should be inserted
+    // before the end of the expression.
+    // TODO(brianwilkerson) We should not produce a fix if the target is an
+    // invocation of the `cast` method.
+    bool needsParentheses = target.precedence < 15;
+    if ((_isDartCoreList(fromType) && _isDartCoreList(toType)) ||
+        (_isDartCoreSet(fromType) && _isDartCoreSet(toType))) {
+      DartChangeBuilder changeBuilder = new DartChangeBuilder(session);
+      await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) {
+        if (needsParentheses) {
+          builder.addSimpleInsertion(target.offset, '(');
+        }
+        builder.addInsertion(target.end, (DartEditBuilder builder) {
+          if (needsParentheses) {
+            builder.write(')');
+          }
+          builder.write('.cast<');
+          builder.writeType((toType as InterfaceType).typeArguments[0]);
+          builder.write('>()');
+        });
+      });
+      _addFixFromBuilder(changeBuilder, DartFixKind.ADD_EXPLICIT_CAST);
+    } else if (_isDartCoreMap(fromType) && _isDartCoreMap(toType)) {
+      DartChangeBuilder changeBuilder = new DartChangeBuilder(session);
+      await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) {
+        if (needsParentheses) {
+          builder.addSimpleInsertion(target.offset, '(');
+        }
+        builder.addInsertion(target.end, (DartEditBuilder builder) {
+          if (needsParentheses) {
+            builder.write(')');
+          }
+          builder.write('.cast<');
+          builder.writeType((toType as InterfaceType).typeArguments[0]);
+          builder.write(', ');
+          builder.writeType((toType as InterfaceType).typeArguments[1]);
+          builder.write('>()');
+        });
+      });
+      _addFixFromBuilder(changeBuilder, DartFixKind.ADD_EXPLICIT_CAST);
+    } else {
+      DartChangeBuilder changeBuilder = new DartChangeBuilder(session);
+      await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) {
+        if (needsParentheses) {
+          builder.addSimpleInsertion(target.offset, '(');
+        }
+        builder.addInsertion(target.end, (DartEditBuilder builder) {
+          if (needsParentheses) {
+            builder.write(')');
+          }
+          builder.write(' as ');
+          builder.writeType(toType);
+        });
+      });
+      _addFixFromBuilder(changeBuilder, DartFixKind.ADD_EXPLICIT_CAST);
+    }
+  }
+
   Future<Null> _addFix_addMissingMethodCall() async {
     ClassDeclaration targetClass = node.parent as ClassDeclaration;
     int insertOffset = targetClass.end - 1;
@@ -2362,6 +2440,47 @@
     _addFixFromBuilder(changeBuilder, DartFixKind.REMOVE_UNUSED_IMPORT);
   }
 
+  Future<Null> _addFix_renameToCamelCase() async {
+    if (node is! SimpleIdentifier) {
+      return;
+    }
+    SimpleIdentifier identifier = this.node;
+
+    // Prepare the new name.
+    List<String> words = identifier.name.split('_');
+    if (words.length < 2) {
+      return;
+    }
+    var newName = words.first + words.skip(1).map((w) => capitalize(w)).join();
+
+    // Find references to the identifier.
+    List<SimpleIdentifier> references;
+    Element element = identifier.staticElement;
+    if (element is LocalVariableElement) {
+      AstNode root = node.getAncestor((node) => node is Block);
+      references = findLocalElementReferences(root, element);
+    } else if (element is ParameterElement) {
+      if (!element.isNamed) {
+        AstNode root = node.getAncestor((node) =>
+            node.parent is ClassDeclaration || node.parent is CompilationUnit);
+        references = findLocalElementReferences(root, element);
+      }
+    }
+    if (references == null) {
+      return;
+    }
+
+    // Compute the change.
+    DartChangeBuilder changeBuilder = new DartChangeBuilder(session);
+    await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) {
+      for (var reference in references) {
+        builder.addSimpleReplacement(range.node(reference), newName);
+      }
+    });
+    _addFixFromBuilder(changeBuilder, DartFixKind.RENAME_TO_CAMEL_CASE,
+        args: [newName]);
+  }
+
   Future<Null> _addFix_replaceFinalWithConst() async {
     if (node is VariableDeclarationList) {
       DartChangeBuilder changeBuilder = new DartChangeBuilder(session);
@@ -3309,6 +3428,39 @@
     return node is SimpleIdentifier && node.name == 'await';
   }
 
+  bool _isDartCoreList(DartType type) {
+    if (type is! InterfaceType) {
+      return false;
+    }
+    ClassElement element = type.element;
+    if (element == null) {
+      return false;
+    }
+    return element.name == "List" && element.library.isDartCore;
+  }
+
+  bool _isDartCoreMap(DartType type) {
+    if (type is! InterfaceType) {
+      return false;
+    }
+    ClassElement element = type.element;
+    if (element == null) {
+      return false;
+    }
+    return element.name == "Map" && element.library.isDartCore;
+  }
+
+  bool _isDartCoreSet(DartType type) {
+    if (type is! InterfaceType) {
+      return false;
+    }
+    ClassElement element = type.element;
+    if (element == null) {
+      return false;
+    }
+    return element.name == "Set" && element.library.isDartCore;
+  }
+
   bool _isLibSrcPath(String path) {
     List<String> parts = resourceProvider.pathContext.split(path);
     for (int i = 0; i < parts.length - 2; i++) {
@@ -3435,6 +3587,8 @@
   static const String empty_catches = 'empty_catches';
   static const String empty_constructor_bodies = 'empty_constructor_bodies';
   static const String empty_statements = 'empty_statements';
+  static const String non_constant_identifier_names =
+      'non_constant_identifier_names';
   static const String prefer_collection_literals = 'prefer_collection_literals';
   static const String prefer_conditional_assignment =
       'prefer_conditional_assignment';
diff --git a/pkg/analysis_server/lib/src/services/correction/util.dart b/pkg/analysis_server/lib/src/services/correction/util.dart
index 1347247..71dd8c0 100644
--- a/pkg/analysis_server/lib/src/services/correction/util.dart
+++ b/pkg/analysis_server/lib/src/services/correction/util.dart
@@ -144,6 +144,16 @@
 }
 
 /**
+ * Return references to the [element] inside the [root] node.
+ */
+List<SimpleIdentifier> findLocalElementReferences(
+    AstNode root, LocalElement element) {
+  var collector = new _ElementReferenceCollector(element);
+  root.accept(collector);
+  return collector.references;
+}
+
+/**
  * TODO(scheglov) replace with nodes once there will be [CompilationUnit.getComments].
  *
  * Returns [SourceRange]s of all comments in [unit].
@@ -1463,6 +1473,20 @@
   }
 }
 
+class _ElementReferenceCollector extends RecursiveAstVisitor<void> {
+  final Element element;
+  final List<SimpleIdentifier> references = [];
+
+  _ElementReferenceCollector(this.element);
+
+  @override
+  void visitSimpleIdentifier(SimpleIdentifier node) {
+    if (node.staticElement == element) {
+      references.add(node);
+    }
+  }
+}
+
 class _ImportDirectiveInfo {
   final String uri;
   final int offset;
diff --git a/pkg/analysis_server/test/integration/analysis/get_hover_test.dart b/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
index f9a45f6..487a4ac 100644
--- a/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/get_hover_test.dart
@@ -108,7 +108,6 @@
           expect(info.parameter, matches(parameterRegexp));
         }
       }
-      expect(info.propagatedType, equals(propagatedType));
       if (staticTypeRegexps == null) {
         expect(info.staticType, isNull);
       } else {
diff --git a/pkg/analysis_server/test/integration/analysis/highlights_test.dart b/pkg/analysis_server/test/integration/analysis/highlights_test.dart
index f52caaf..e143a15 100644
--- a/pkg/analysis_server/test/integration/analysis/highlights_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/highlights_test.dart
@@ -112,7 +112,7 @@
           HighlightRegionType.COMMENT_END_OF_LINE, ['// End of line comment']);
       check(HighlightRegionType.CONSTRUCTOR, ['constructor']);
       check(HighlightRegionType.DIRECTIVE, ["import 'dart:async' as async;"]);
-      check(HighlightRegionType.DYNAMIC_TYPE, ['dynamicType']);
+      check(HighlightRegionType.DYNAMIC_TYPE, ['dynamicType', 'local']);
       check(HighlightRegionType.FIELD, ['field']);
       check(HighlightRegionType.FIELD_STATIC, ['staticField']);
       check(HighlightRegionType.FUNCTION, ['print']);
@@ -129,8 +129,8 @@
       check(HighlightRegionType.LITERAL_MAP,
           ['{1.0: [].toList()}', '{2: local}']);
       check(HighlightRegionType.LITERAL_STRING, ["'dart:async'", "'string'"]);
-      check(HighlightRegionType.LOCAL_VARIABLE, ['local']);
-      check(HighlightRegionType.LOCAL_VARIABLE_DECLARATION, ['local']);
+      //check(HighlightRegionType.LOCAL_VARIABLE, ['local']);
+      //check(HighlightRegionType.LOCAL_VARIABLE_DECLARATION, ['local']);
       check(HighlightRegionType.METHOD, ['toList']);
       check(HighlightRegionType.METHOD_DECLARATION, ['method']);
       check(HighlightRegionType.METHOD_DECLARATION_STATIC, ['staticMethod']);
diff --git a/pkg/analysis_server/test/integration/analysis/highlights_test2.dart b/pkg/analysis_server/test/integration/analysis/highlights_test2.dart
index 2157e77..5f4a9c3 100644
--- a/pkg/analysis_server/test/integration/analysis/highlights_test2.dart
+++ b/pkg/analysis_server/test/integration/analysis/highlights_test2.dart
@@ -147,8 +147,8 @@
       check(HighlightRegionType.LITERAL_MAP,
           ['{1.0: [].toList()}', '{2: local}']);
       check(HighlightRegionType.LITERAL_STRING, ["'dart:async'", "'string'"]);
-      check(HighlightRegionType.LOCAL_VARIABLE_DECLARATION, ['local']);
-      check(HighlightRegionType.LOCAL_VARIABLE_REFERENCE, ['local']);
+      check(HighlightRegionType.DYNAMIC_LOCAL_VARIABLE_DECLARATION, ['local']);
+      check(HighlightRegionType.DYNAMIC_LOCAL_VARIABLE_REFERENCE, ['local']);
       check(HighlightRegionType.INSTANCE_METHOD_REFERENCE, ['toList']);
       check(HighlightRegionType.INSTANCE_METHOD_DECLARATION, ['method']);
       check(HighlightRegionType.STATIC_METHOD_DECLARATION, ['staticMethod']);
diff --git a/pkg/analysis_server/test/integration/analysis/update_content_test.dart b/pkg/analysis_server/test/integration/analysis/update_content_test.dart
index f703fe0..55e1e84 100644
--- a/pkg/analysis_server/test/integration/analysis/update_content_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/update_content_test.dart
@@ -63,7 +63,6 @@
     expect(currentAnalysisErrors[path], isNotEmpty);
   }
 
-  @failingTest
   test_updateContent_multipleAdds() async {
     String pathname = sourcePath('test.dart');
     writeFile(pathname, r'''
diff --git a/pkg/analysis_server/test/mock_sdk.dart b/pkg/analysis_server/test/mock_sdk.dart
index 86252cd..de74dd3 100644
--- a/pkg/analysis_server/test/mock_sdk.dart
+++ b/pkg/analysis_server/test/mock_sdk.dart
@@ -130,16 +130,19 @@
   bool get isEmpty;
   Iterable<T> map<T>(T f(E e)) => null;
   T fold<T>(T initialValue, T combine(T previousValue, E element));
+  List<E> toList({bool growable: true});
 }
 
 class List<E> implements Iterable<E> {
   List();
   void add(E value) {}
   void addAll(Iterable<E> iterable) {}
+  List<R> cast<R>();
   E operator [](int index) => null;
   void operator []=(int index, E value) {}
   Iterator<E> get iterator => null;
   void clear() {}
+  Iterable<E> where(bool test(E element)) {}
 
   bool get isEmpty => false;
   E get first => null;
@@ -147,6 +150,7 @@
 }
 
 abstract class Map<K, V> extends Object {
+  Map<RK, RV> cast<RK, RV>();
   bool containsKey(Object key);
   Iterable<K> get keys;
 }
@@ -155,6 +159,10 @@
 
 void print(Object object) {}
 
+class Set<E> implements Iterable<E> {
+  Set<R> cast<R>();
+}
+
 class Uri {
   static List<int> parseIPv6Address(String host, [int start = 0, int end]) {
     int parseHex(int start, int end) {
@@ -167,7 +175,6 @@
 class _Override { const _Override(); }
 const Object override = const _Override();
 ''');
-
   static const MockSdkLibrary LIB_ASYNC =
       const MockSdkLibrary('dart:async', '/lib/async/async.dart', '''
 library dart.async;
diff --git a/pkg/analysis_server/test/services/correction/fix_test.dart b/pkg/analysis_server/test/services/correction/fix_test.dart
index 2826fd6..486a6a6 100644
--- a/pkg/analysis_server/test/services/correction/fix_test.dart
+++ b/pkg/analysis_server/test/services/correction/fix_test.dart
@@ -97,12 +97,7 @@
 
   assertNoFix(FixKind kind) async {
     AnalysisError error = await _findErrorToFix();
-    List<Fix> fixes = await _computeFixes(error);
-    for (Fix fix in fixes) {
-      if (fix.kind == kind) {
-        fail('Unexpected fix $kind in\n${fixes.join('\n')}');
-      }
-    }
+    await _assertNoFix(kind, error);
   }
 
   List<LinkedEditSuggestion> expectedSuggestions(
@@ -139,6 +134,15 @@
     }
   }
 
+  Future _assertNoFix(FixKind kind, AnalysisError error) async {
+    List<Fix> fixes = await _computeFixes(error);
+    for (Fix fix in fixes) {
+      if (fix.kind == kind) {
+        fail('Unexpected fix $kind in\n${fixes.join('\n')}');
+      }
+    }
+  }
+
   Future<List<AnalysisError>> _computeErrors() async {
     return (await driver.getResult(convertPath(testFile))).errors;
   }
@@ -381,6 +385,194 @@
 ''');
   }
 
+  test_addExplicitCast_assignment_general() async {
+    await resolveTestUnit('''
+f(A a) {
+  B b;
+  b = a;
+}
+class A {}
+class B {}
+''');
+    await assertHasFix(DartFixKind.ADD_EXPLICIT_CAST, '''
+f(A a) {
+  B b;
+  b = a as B;
+}
+class A {}
+class B {}
+''');
+  }
+
+  test_addExplicitCast_assignment_list() async {
+    await resolveTestUnit('''
+f(List<A> a) {
+  List<B> b;
+  b = a.where((e) => e is B).toList();
+}
+class A {}
+class B {}
+''');
+    await assertHasFix(DartFixKind.ADD_EXPLICIT_CAST, '''
+f(List<A> a) {
+  List<B> b;
+  b = a.where((e) => e is B).toList().cast<B>();
+}
+class A {}
+class B {}
+''');
+  }
+
+  test_addExplicitCast_assignment_map() async {
+    await resolveTestUnit('''
+f(Map<A, B> a) {
+  Map<B, A> b;
+  b = a;
+}
+class A {}
+class B {}
+''');
+    await assertHasFix(DartFixKind.ADD_EXPLICIT_CAST, '''
+f(Map<A, B> a) {
+  Map<B, A> b;
+  b = a.cast<B, A>();
+}
+class A {}
+class B {}
+''');
+  }
+
+  test_addExplicitCast_assignment_needsParens() async {
+    await resolveTestUnit('''
+f(A a) {
+  B b;
+  b = a..m();
+}
+class A {
+  int m() => 0;
+}
+class B {}
+''');
+    await assertHasFix(DartFixKind.ADD_EXPLICIT_CAST, '''
+f(A a) {
+  B b;
+  b = (a..m()) as B;
+}
+class A {
+  int m() => 0;
+}
+class B {}
+''');
+  }
+
+  test_addExplicitCast_assignment_set() async {
+    await resolveTestUnit('''
+f(Set<A> a) {
+  Set<B> b;
+  b = a;
+}
+class A {}
+class B {}
+''');
+    await assertHasFix(DartFixKind.ADD_EXPLICIT_CAST, '''
+f(Set<A> a) {
+  Set<B> b;
+  b = a.cast<B>();
+}
+class A {}
+class B {}
+''');
+  }
+
+  test_addExplicitCast_declaration_general() async {
+    await resolveTestUnit('''
+f(A a) {
+  B b = a;
+}
+class A {}
+class B {}
+''');
+    await assertHasFix(DartFixKind.ADD_EXPLICIT_CAST, '''
+f(A a) {
+  B b = a as B;
+}
+class A {}
+class B {}
+''');
+  }
+
+  test_addExplicitCast_declaration_list() async {
+    await resolveTestUnit('''
+f(List<A> a) {
+  List<B> b = a.where((e) => e is B).toList();
+}
+class A {}
+class B {}
+''');
+    await assertHasFix(DartFixKind.ADD_EXPLICIT_CAST, '''
+f(List<A> a) {
+  List<B> b = a.where((e) => e is B).toList().cast<B>();
+}
+class A {}
+class B {}
+''');
+  }
+
+  test_addExplicitCast_declaration_map() async {
+    await resolveTestUnit('''
+f(Map<A, B> a) {
+  Map<B, A> b = a;
+}
+class A {}
+class B {}
+''');
+    await assertHasFix(DartFixKind.ADD_EXPLICIT_CAST, '''
+f(Map<A, B> a) {
+  Map<B, A> b = a.cast<B, A>();
+}
+class A {}
+class B {}
+''');
+  }
+
+  test_addExplicitCast_declaration_needsParens() async {
+    await resolveTestUnit('''
+f(A a) {
+  B b = a..m();
+}
+class A {
+  int m() => 0;
+}
+class B {}
+''');
+    await assertHasFix(DartFixKind.ADD_EXPLICIT_CAST, '''
+f(A a) {
+  B b = (a..m()) as B;
+}
+class A {
+  int m() => 0;
+}
+class B {}
+''');
+  }
+
+  test_addExplicitCast_declaration_set() async {
+    await resolveTestUnit('''
+f(Set<A> a) {
+  Set<B> b = a;
+}
+class A {}
+class B {}
+''');
+    await assertHasFix(DartFixKind.ADD_EXPLICIT_CAST, '''
+f(Set<A> a) {
+  Set<B> b = a.cast<B>();
+}
+class A {}
+class B {}
+''');
+  }
+
   test_addFieldFormalParameters_hasRequiredParameter() async {
     await resolveTestUnit('''
 class Test {
@@ -5938,6 +6130,11 @@
     resultCode = SourceEdit.applySequence(testCode, change.edits[0].edits);
   }
 
+  @override
+  assertNoFix(FixKind kind) async {
+    await _assertNoFix(kind, error);
+  }
+
   Future<Null> findLint(String src, String lintCode, {int length: 1}) async {
     int errorOffset = src.indexOf('/*LINT*/');
     await resolveTestUnit(src.replaceAll('/*LINT*/', ''));
@@ -6798,6 +6995,115 @@
 ''');
   }
 
+  test_renameToCamelCase_BAD_parameter_optionalNamed() async {
+    String src = '''
+foo({int /*LINT*/my_integer_variable}) {
+  print(my_integer_variable);
+}
+''';
+    await findLint(src, LintNames.non_constant_identifier_names);
+    await assertNoFix(DartFixKind.RENAME_TO_CAMEL_CASE);
+  }
+
+  test_renameToCamelCase_OK_localVariable() async {
+    String src = '''
+main() {
+  int /*LINT*/my_integer_variable = 42;
+  int foo;
+  print(my_integer_variable);
+  print(foo);
+}
+''';
+    await findLint(src, LintNames.non_constant_identifier_names);
+
+    await applyFix(DartFixKind.RENAME_TO_CAMEL_CASE);
+
+    verifyResult('''
+main() {
+  int myIntegerVariable = 42;
+  int foo;
+  print(myIntegerVariable);
+  print(foo);
+}
+''');
+  }
+
+  test_renameToCamelCase_OK_parameter_closure() async {
+    String src = '''
+main() {
+  [0, 1, 2].forEach((/*LINT*/my_integer_variable) {
+    print(my_integer_variable);
+  });
+}
+''';
+    await findLint(src, LintNames.non_constant_identifier_names);
+
+    await applyFix(DartFixKind.RENAME_TO_CAMEL_CASE);
+
+    verifyResult('''
+main() {
+  [0, 1, 2].forEach((myIntegerVariable) {
+    print(myIntegerVariable);
+  });
+}
+''');
+  }
+
+  test_renameToCamelCase_OK_parameter_function() async {
+    String src = '''
+main(int /*LINT*/my_integer_variable) {
+  print(my_integer_variable);
+}
+''';
+    await findLint(src, LintNames.non_constant_identifier_names);
+
+    await applyFix(DartFixKind.RENAME_TO_CAMEL_CASE);
+
+    verifyResult('''
+main(int myIntegerVariable) {
+  print(myIntegerVariable);
+}
+''');
+  }
+
+  test_renameToCamelCase_OK_parameter_method() async {
+    String src = '''
+class A {
+  main(int /*LINT*/my_integer_variable) {
+    print(my_integer_variable);
+  }
+}
+''';
+    await findLint(src, LintNames.non_constant_identifier_names);
+
+    await applyFix(DartFixKind.RENAME_TO_CAMEL_CASE);
+
+    verifyResult('''
+class A {
+  main(int myIntegerVariable) {
+    print(myIntegerVariable);
+  }
+}
+''');
+  }
+
+  test_renameToCamelCase_OK_parameter_optionalPositional() async {
+    String src = '''
+main([int /*LINT*/my_integer_variable]) {
+  print(my_integer_variable);
+}
+''';
+    await findLint(src, LintNames.non_constant_identifier_names);
+
+    await applyFix(DartFixKind.RENAME_TO_CAMEL_CASE);
+
+    verifyResult('''
+main([int myIntegerVariable]) {
+  print(myIntegerVariable);
+}
+''');
+  }
+
   test_replaceFinalWithConst_method() async {
     String src = '''
 /*LINT*/final int a = 1;
diff --git a/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart b/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart
index 218a54b..374cf39 100644
--- a/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart
+++ b/pkg/analysis_server/test/src/flutter/flutter_outline_computer_test.dart
@@ -376,6 +376,118 @@
     expect(myWidget.renderConstructor, isNull);
   }
 
+  test_render_instrumentedCode_registerWidgets() async {
+    await _computeOutline('''
+import 'package:flutter/widgets.dart';
+
+class MyWidget extends StatelessWidget {
+  MyWidget.forDesignTime();
+
+  @override
+  Widget build(BuildContext context) {
+    return new Row(
+      children: <Widget>[
+        new Text('aaa'),
+        new Text('bbb'),
+      ],
+    );
+  }
+}
+''');
+    expect(
+        computer.instrumentedCode,
+        r'''
+import 'package:flutter/widgets.dart';
+
+class MyWidget extends StatelessWidget {
+  MyWidget.forDesignTime();
+
+  @override
+  Widget build(BuildContext context) {
+    return _registerWidgetInstance(0, new Row(
+      children: <Widget>[
+        _registerWidgetInstance(1, new Text('aaa')),
+        _registerWidgetInstance(2, new Text('bbb')),
+      ],
+    ));
+  }
+}
+''' +
+            FlutterOutlineComputer.RENDER_APPEND);
+  }
+
+  test_render_instrumentedCode_rewriteUri_file() async {
+    testPath = resourceProvider.convertPath('/home/user/test/test.dart');
+    var libFile = newFile('/home/user/test/my_lib.dart', content: '');
+
+    await _computeOutline('''
+import 'package:flutter/widgets.dart';
+import 'my_lib.dart';
+
+class MyWidget extends StatelessWidget {
+  MyWidget.forDesignTime();
+
+  @override
+  Widget build(BuildContext context) {
+    return new Container();
+  }
+}
+''');
+    expect(
+        computer.instrumentedCode,
+        '''
+import 'package:flutter/widgets.dart';
+import '${libFile.toUri()}';
+
+class MyWidget extends StatelessWidget {
+  MyWidget.forDesignTime();
+
+  @override
+  Widget build(BuildContext context) {
+    return _registerWidgetInstance(0, new Container());
+  }
+}
+''' +
+            FlutterOutlineComputer.RENDER_APPEND);
+  }
+
+  test_render_instrumentedCode_rewriteUri_package() async {
+    packageMap['test'] = [newFolder('/home/user/test/lib')];
+
+    testPath = resourceProvider.convertPath('/home/user/test/lib/test.dart');
+    newFile('/home/user/test/lib/my_lib.dart', content: '');
+
+    await _computeOutline('''
+import 'package:flutter/widgets.dart';
+import 'my_lib.dart';
+
+class MyWidget extends StatelessWidget {
+  MyWidget.forDesignTime();
+
+  @override
+  Widget build(BuildContext context) {
+    return new Container();
+  }
+}
+''');
+    expect(
+        computer.instrumentedCode,
+        '''
+import 'package:flutter/widgets.dart';
+import 'package:test/my_lib.dart';
+
+class MyWidget extends StatelessWidget {
+  MyWidget.forDesignTime();
+
+  @override
+  Widget build(BuildContext context) {
+    return _registerWidgetInstance(0, new Container());
+  }
+}
+''' +
+            FlutterOutlineComputer.RENDER_APPEND);
+  }
+
   test_render_stateful_createState_blockBody() async {
     FlutterOutline unitOutline = await _computeOutline('''
 import 'package:flutter/widgets.dart';
@@ -449,27 +561,6 @@
     expect(myWidget.stateOffset, isNull);
     expect(myWidget.stateLength, isNull);
 
-    expect(
-        computer.instrumentedCode,
-        r'''
-import 'package:flutter/widgets.dart';
-
-class MyWidget extends StatelessWidget {
-  MyWidget.forDesignTime();
-
-  @override
-  Widget build(BuildContext context) {
-    return _registerWidgetInstance(0, new Row(
-      children: <Widget>[
-        _registerWidgetInstance(1, new Text('aaa')),
-        _registerWidgetInstance(2, new Text('bbb')),
-      ],
-    ));
-  }
-}
-''' +
-            FlutterOutlineComputer.RENDER_APPEND);
-
     var build = myWidget.children[1];
 
     var row = build.children[0];
diff --git a/pkg/analyzer/lib/source/analysis_options_provider.dart b/pkg/analyzer/lib/source/analysis_options_provider.dart
index 8c47f07..40b53e7 100644
--- a/pkg/analyzer/lib/source/analysis_options_provider.dart
+++ b/pkg/analyzer/lib/source/analysis_options_provider.dart
@@ -2,8 +2,6 @@
 // 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 analyzer.source.analysis_options_provider;
-
 import 'dart:core';
 
 import 'package:analyzer/file_system/file_system.dart';
@@ -155,7 +153,7 @@
   ///
   Map<String, YamlNode> merge(
           Map<String, YamlNode> defaults, Map<String, YamlNode> overrides) =>
-      new Merger().merge(defaults, overrides) as Map<String, YamlNode>;
+      new Merger().mergeMap(defaults, overrides);
 
   /// Read the contents of [source] as a string.
   /// Returns null if source is null or does not exist.
diff --git a/pkg/analyzer/lib/src/command_line/arguments.dart b/pkg/analyzer/lib/src/command_line/arguments.dart
index 8f6af83..2703beb 100644
--- a/pkg/analyzer/lib/src/command_line/arguments.dart
+++ b/pkg/analyzer/lib/src/command_line/arguments.dart
@@ -196,9 +196,8 @@
   //
   // Hidden flags and options.
   //
-  parser.addOption(defineVariableOption,
+  parser.addMultiOption(defineVariableOption,
       abbr: 'D',
-      allowMultiple: true,
       help: 'Define environment variables. For example, "-Dfoo=bar" defines an '
           'environment variable named "foo" whose value is "bar".',
       hide: hide);
@@ -291,7 +290,7 @@
   Set<String> knownAbbreviations = new HashSet<String>();
   parser.options.forEach((String name, Option option) {
     knownOptions.add(name);
-    String abbreviation = option.abbreviation;
+    String abbreviation = option.abbr;
     if (abbreviation != null) {
       knownAbbreviations.add(abbreviation);
     }
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 2b6e7ac..43a1d47 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -94,7 +94,7 @@
   /**
    * The version of data format, should be incremented on every format change.
    */
-  static const int DATA_VERSION = 52;
+  static const int DATA_VERSION = 53;
 
   /**
    * The number of exception contexts allowed to write. Once this field is
@@ -326,11 +326,8 @@
 
   /**
    * The current analysis session.
-   *
-   * TODO(brianwilkerson) Create a new session when the current session might
-   * produce inconsistent results.
    */
-  AnalysisSession _currentSession;
+  AnalysisSessionImpl _currentSession;
 
   /**
    * Create a new instance of [AnalysisDriver].
@@ -356,7 +353,7 @@
         _sourceFactory = sourceFactory.clone(),
         _sdkBundle = sdkBundle,
         _externalSummaries = externalSummaries {
-    _currentSession = new AnalysisSessionImpl(this);
+    _createNewSession();
     _onResults = _resultController.stream.asBroadcastStream();
     _testView = new AnalysisDriverTestView(this);
     _createFileTracker();
@@ -1122,6 +1119,7 @@
    * of state.
    */
   void _changeHook() {
+    _createNewSession();
     _priorityResults.clear();
     _scheduler.notify(this);
   }
@@ -1238,6 +1236,8 @@
             }
           }
 
+          _currentSession.put(libraryElement: resolvedUnit?.element?.library);
+
           // Return the result, full or partial.
           _logger.writeln('Computed new analysis result.');
           AnalysisResult result = _getAnalysisResultFromBytes(
@@ -1385,6 +1385,13 @@
   }
 
   /**
+   * Create a new analysis session, so invalidating the current one.
+   */
+  void _createNewSession() {
+    _currentSession = new AnalysisSessionImpl(this);
+  }
+
+  /**
    * Fill [_salt] with data.
    */
   void _fillSalt() {
diff --git a/pkg/analyzer/lib/src/dart/analysis/session.dart b/pkg/analyzer/lib/src/dart/analysis/session.dart
index b8ff388..9125b01 100644
--- a/pkg/analyzer/lib/src/dart/analysis/session.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/session.dart
@@ -32,6 +32,11 @@
   TypeSystem _typeSystem;
 
   /**
+   * The cache of libraries for URIs.
+   */
+  final Map<String, LibraryElement> _uriToLibraryCache = {};
+
+  /**
    * Initialize a newly created analysis session.
    */
   AnalysisSessionImpl(this._driver);
@@ -70,9 +75,14 @@
   }
 
   @override
-  Future<LibraryElement> getLibraryByUri(String uri) {
+  Future<LibraryElement> getLibraryByUri(String uri) async {
     _checkConsistency();
-    return _driver.getLibraryByUri(uri);
+    var libraryElement = _uriToLibraryCache[uri];
+    if (libraryElement == null) {
+      libraryElement = await _driver.getLibraryByUri(uri);
+      _fillUriToLibraryCache(libraryElement);
+    }
+    return libraryElement;
   }
 
   @override
@@ -113,6 +123,18 @@
   }
 
   /**
+   * Put information into the session, so it is available even though it is
+   * not yet requested by the user. We want to put only information that is
+   * already available directly, or can be derived from available information
+   * very cheaply.
+   */
+  void put({LibraryElement libraryElement}) {
+    if (libraryElement != null) {
+      _fillUriToLibraryCache(libraryElement);
+    }
+  }
+
+  /**
    * Check to see that results from this session will be consistent, and throw
    * an [InconsistentAnalysisException] if they might not be.
    */
@@ -121,4 +143,21 @@
       throw new InconsistentAnalysisException();
     }
   }
+
+  /**
+   * Fill the [_uriToLibraryCache] with libraries referenced from the
+   * given [library].
+   */
+  void _fillUriToLibraryCache(LibraryElement library) {
+    Source source = library.source;
+    if (source == null) {
+      print('zzzzz');
+    }
+    String uri = source.uri.toString();
+    if (_uriToLibraryCache[uri] == null) {
+      _uriToLibraryCache[uri] = library;
+      library.importedLibraries.forEach(_fillUriToLibraryCache);
+      library.exportedLibraries.forEach(_fillUriToLibraryCache);
+    }
+  }
 }
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index 63c6633..f916e4d 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -2,8 +2,6 @@
 // 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 analyzer.src.dart.ast.ast;
-
 import 'dart:collection';
 
 import 'package:analyzer/dart/ast/ast.dart';
@@ -92,7 +90,7 @@
    * The documentation comment associated with this node, or `null` if this node
    * does not have a documentation comment associated with it.
    */
-  Comment _comment;
+  CommentImpl _comment;
 
   /**
    * The annotations associated with this node.
@@ -132,7 +130,7 @@
 
   @override
   void set documentationComment(Comment comment) {
-    _comment = _becomeParentOf(comment as AstNodeImpl);
+    _comment = _becomeParentOf(comment as CommentImpl);
   }
 
   @override
@@ -209,7 +207,7 @@
    * The name of the class defining the constructor that is being invoked or the
    * name of the field that is being referenced.
    */
-  Identifier _name;
+  IdentifierImpl _name;
 
   /**
    * The period before the constructor name, or `null` if this annotation is not
@@ -222,13 +220,13 @@
    * The name of the constructor being invoked, or `null` if this annotation is
    * not the invocation of a named constructor.
    */
-  SimpleIdentifier _constructorName;
+  SimpleIdentifierImpl _constructorName;
 
   /**
    * The arguments to the constructor being invoked, or `null` if this
    * annotation is not the invocation of a constructor.
    */
-  ArgumentList _arguments;
+  ArgumentListImpl _arguments;
 
   /**
    * The element associated with this annotation, or `null` if the AST structure
@@ -260,7 +258,7 @@
 
   @override
   void set arguments(ArgumentList arguments) {
-    _arguments = _becomeParentOf(arguments as AstNodeImpl);
+    _arguments = _becomeParentOf(arguments as ArgumentListImpl);
   }
 
   @override
@@ -279,7 +277,7 @@
 
   @override
   void set constructorName(SimpleIdentifier name) {
-    _constructorName = _becomeParentOf(name as AstNodeImpl);
+    _constructorName = _becomeParentOf(name as SimpleIdentifierImpl);
   }
 
   @override
@@ -312,7 +310,7 @@
 
   @override
   void set name(Identifier name) {
-    _name = _becomeParentOf(name as AstNodeImpl);
+    _name = _becomeParentOf(name as IdentifierImpl);
   }
 
   @override
@@ -497,7 +495,7 @@
   /**
    * The expression used to compute the value being cast.
    */
-  Expression _expression;
+  ExpressionImpl _expression;
 
   /**
    * The 'as' operator.
@@ -508,7 +506,7 @@
   /**
    * The type being cast to.
    */
-  TypeAnnotation _type;
+  TypeAnnotationImpl _type;
 
   /**
    * Initialize a newly created as expression.
@@ -534,7 +532,7 @@
 
   @override
   void set expression(Expression expression) {
-    _expression = _becomeParentOf(expression as AstNodeImpl);
+    _expression = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -545,7 +543,7 @@
 
   @override
   void set type(TypeAnnotation type) {
-    _type = _becomeParentOf(type as AstNodeImpl);
+    _type = _becomeParentOf(type as TypeAnnotationImpl);
   }
 
   @override
@@ -575,7 +573,7 @@
   /**
    * The condition that is being asserted to be `true`.
    */
-  Expression _condition;
+  ExpressionImpl _condition;
 
   @override
   Token comma;
@@ -584,7 +582,7 @@
    * The message to report if the assertion fails, or `null` if no message was
    * supplied.
    */
-  Expression _message;
+  ExpressionImpl _message;
 
   @override
   Token rightParenthesis;
@@ -620,7 +618,7 @@
 
   @override
   void set condition(Expression condition) {
-    _condition = _becomeParentOf(condition as AstNodeImpl);
+    _condition = _becomeParentOf(condition as ExpressionImpl);
   }
 
   @override
@@ -631,7 +629,7 @@
 
   @override
   void set message(Expression expression) {
-    _message = _becomeParentOf(expression as AstNodeImpl);
+    _message = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -660,7 +658,7 @@
   /**
    * The condition that is being asserted to be `true`.
    */
-  Expression _condition;
+  ExpressionImpl _condition;
 
   @override
   Token comma;
@@ -669,7 +667,7 @@
    * The message to report if the assertion fails, or `null` if no message was
    * supplied.
    */
-  Expression _message;
+  ExpressionImpl _message;
 
   @override
   Token rightParenthesis;
@@ -710,7 +708,7 @@
 
   @override
   void set condition(Expression condition) {
-    _condition = _becomeParentOf(condition as AstNodeImpl);
+    _condition = _becomeParentOf(condition as ExpressionImpl);
   }
 
   @override
@@ -721,7 +719,7 @@
 
   @override
   void set message(Expression expression) {
-    _message = _becomeParentOf(expression as AstNodeImpl);
+    _message = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -745,7 +743,7 @@
   /**
    * The expression used to compute the left hand side.
    */
-  Expression _leftHandSide;
+  ExpressionImpl _leftHandSide;
 
   /**
    * The assignment operator being applied.
@@ -756,7 +754,7 @@
   /**
    * The expression used to compute the right hand side.
    */
-  Expression _rightHandSide;
+  ExpressionImpl _rightHandSide;
 
   /**
    * The element associated with the operator based on the static type of the
@@ -825,7 +823,7 @@
 
   @override
   void set leftHandSide(Expression expression) {
-    _leftHandSide = _becomeParentOf(expression as AstNodeImpl);
+    _leftHandSide = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -836,7 +834,7 @@
 
   @override
   void set rightHandSide(Expression expression) {
-    _rightHandSide = _becomeParentOf(expression as AstNodeImpl);
+    _rightHandSide = _becomeParentOf(expression as ExpressionImpl);
   }
 
   /**
@@ -1020,7 +1018,7 @@
   /**
    * Make this node the parent of the given [child] node. Return the child node.
    */
-  AstNode _becomeParentOf(AstNodeImpl child) {
+  T _becomeParentOf<T extends AstNodeImpl>(T child) {
     if (child != null) {
       child._parent = this;
     }
@@ -1044,7 +1042,7 @@
   /**
    * The expression whose value is being waited on.
    */
-  Expression _expression;
+  ExpressionImpl _expression;
 
   /**
    * Initialize a newly created await expression.
@@ -1073,7 +1071,7 @@
 
   @override
   void set expression(Expression expression) {
-    _expression = _becomeParentOf(expression as AstNodeImpl);
+    _expression = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -1098,7 +1096,7 @@
   /**
    * The expression used to compute the left operand.
    */
-  Expression _leftOperand;
+  ExpressionImpl _leftOperand;
 
   /**
    * The binary operator being applied.
@@ -1109,7 +1107,7 @@
   /**
    * The expression used to compute the right operand.
    */
-  Expression _rightOperand;
+  ExpressionImpl _rightOperand;
 
   /**
    * The element associated with the operator based on the static type of the
@@ -1161,7 +1159,7 @@
 
   @override
   void set leftOperand(Expression expression) {
-    _leftOperand = _becomeParentOf(expression as AstNodeImpl);
+    _leftOperand = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -1172,7 +1170,7 @@
 
   @override
   void set rightOperand(Expression expression) {
-    _rightOperand = _becomeParentOf(expression as AstNodeImpl);
+    _rightOperand = _becomeParentOf(expression as ExpressionImpl);
   }
 
   /**
@@ -1244,7 +1242,7 @@
   /**
    * The block representing the body of the function.
    */
-  Block _block;
+  BlockImpl _block;
 
   /**
    * Initialize a newly created function body consisting of a block of
@@ -1269,7 +1267,7 @@
 
   @override
   void set block(Block block) {
-    _block = _becomeParentOf(block as AstNodeImpl);
+    _block = _becomeParentOf(block as BlockImpl);
   }
 
   @override
@@ -1414,7 +1412,7 @@
   /**
    * The label associated with the statement, or `null` if there is no label.
    */
-  SimpleIdentifier _label;
+  SimpleIdentifierImpl _label;
 
   /**
    * The semicolon terminating the statement.
@@ -1458,7 +1456,7 @@
 
   @override
   void set label(SimpleIdentifier identifier) {
-    _label = _becomeParentOf(identifier as AstNodeImpl);
+    _label = _becomeParentOf(identifier as SimpleIdentifierImpl);
   }
 
   @override
@@ -1491,7 +1489,7 @@
   /**
    * The target of the cascade sections.
    */
-  Expression _target;
+  ExpressionImpl _target;
 
   /**
    * The cascade sections sharing the common target.
@@ -1530,7 +1528,7 @@
 
   @override
   void set target(Expression target) {
-    _target = _becomeParentOf(target as AstNodeImpl);
+    _target = _becomeParentOf(target as ExpressionImpl);
   }
 
   @override
@@ -1565,7 +1563,7 @@
    * The type of exceptions caught by this catch clause, or `null` if this catch
    * clause catches every type of exception.
    */
-  TypeAnnotation _exceptionType;
+  TypeAnnotationImpl _exceptionType;
 
   /**
    * The token representing the 'catch' keyword, or `null` if there is no
@@ -1584,7 +1582,7 @@
    * The parameter whose value will be the exception that was thrown, or `null`
    * if there is no 'catch' keyword.
    */
-  SimpleIdentifier _exceptionParameter;
+  SimpleIdentifierImpl _exceptionParameter;
 
   /**
    * The comma separating the exception parameter from the stack trace
@@ -1597,7 +1595,7 @@
    * The parameter whose value will be the stack trace associated with the
    * exception, or `null` if there is no stack trace parameter.
    */
-  SimpleIdentifier _stackTraceParameter;
+  SimpleIdentifierImpl _stackTraceParameter;
 
   /**
    * The right parenthesis, or `null` if there is no 'catch' keyword.
@@ -1608,7 +1606,7 @@
   /**
    * The body of the catch block.
    */
-  Block _body;
+  BlockImpl _body;
 
   /**
    * Initialize a newly created catch clause. The [onKeyword] and
@@ -1645,7 +1643,7 @@
 
   @override
   void set body(Block block) {
-    _body = _becomeParentOf(block as AstNodeImpl);
+    _body = _becomeParentOf(block as BlockImpl);
   }
 
   @override
@@ -1668,7 +1666,7 @@
 
   @override
   void set exceptionParameter(SimpleIdentifier parameter) {
-    _exceptionParameter = _becomeParentOf(parameter as AstNodeImpl);
+    _exceptionParameter = _becomeParentOf(parameter as SimpleIdentifierImpl);
   }
 
   @override
@@ -1676,7 +1674,7 @@
 
   @override
   void set exceptionType(TypeAnnotation exceptionType) {
-    _exceptionType = _becomeParentOf(exceptionType as AstNodeImpl);
+    _exceptionType = _becomeParentOf(exceptionType as TypeAnnotationImpl);
   }
 
   @override
@@ -1684,7 +1682,7 @@
 
   @override
   void set stackTraceParameter(SimpleIdentifier parameter) {
-    _stackTraceParameter = _becomeParentOf(parameter as AstNodeImpl);
+    _stackTraceParameter = _becomeParentOf(parameter as SimpleIdentifierImpl);
   }
 
   @override
@@ -1759,31 +1757,31 @@
    * The type parameters for the class, or `null` if the class does not have any
    * type parameters.
    */
-  TypeParameterList _typeParameters;
+  TypeParameterListImpl _typeParameters;
 
   /**
    * The extends clause for the class, or `null` if the class does not extend
    * any other class.
    */
-  ExtendsClause _extendsClause;
+  ExtendsClauseImpl _extendsClause;
 
   /**
    * The with clause for the class, or `null` if the class does not have a with
    * clause.
    */
-  WithClause _withClause;
+  WithClauseImpl _withClause;
 
   /**
    * The implements clause for the class, or `null` if the class does not
    * implement any interfaces.
    */
-  ImplementsClause _implementsClause;
+  ImplementsClauseImpl _implementsClause;
 
   /**
    * The native clause for the class, or `null` if the class does not have a
    * native clause.
    */
-  NativeClause _nativeClause;
+  NativeClauseImpl _nativeClause;
 
   /**
    * The left curly bracket.
@@ -1813,7 +1811,7 @@
    * not have any members.
    */
   ClassDeclarationImpl(
-      Comment comment,
+      CommentImpl comment,
       List<Annotation> metadata,
       this.abstractKeyword,
       this.classKeyword,
@@ -1858,7 +1856,7 @@
 
   @override
   void set extendsClause(ExtendsClause extendsClause) {
-    _extendsClause = _becomeParentOf(extendsClause as AstNodeImpl);
+    _extendsClause = _becomeParentOf(extendsClause as ExtendsClauseImpl);
   }
 
   @override
@@ -1874,7 +1872,8 @@
 
   @override
   void set implementsClause(ImplementsClause implementsClause) {
-    _implementsClause = _becomeParentOf(implementsClause as AstNodeImpl);
+    _implementsClause =
+        _becomeParentOf(implementsClause as ImplementsClauseImpl);
   }
 
   @override
@@ -1888,7 +1887,7 @@
 
   @override
   void set nativeClause(NativeClause nativeClause) {
-    _nativeClause = _becomeParentOf(nativeClause as AstNodeImpl);
+    _nativeClause = _becomeParentOf(nativeClause as NativeClauseImpl);
   }
 
   @override
@@ -1896,7 +1895,7 @@
 
   @override
   void set typeParameters(TypeParameterList typeParameters) {
-    _typeParameters = _becomeParentOf(typeParameters as AstNodeImpl);
+    _typeParameters = _becomeParentOf(typeParameters as TypeParameterListImpl);
   }
 
   @override
@@ -1904,7 +1903,7 @@
 
   @override
   void set withClause(WithClause withClause) {
-    _withClause = _becomeParentOf(withClause as AstNodeImpl);
+    _withClause = _becomeParentOf(withClause as WithClauseImpl);
   }
 
   @override
@@ -1989,7 +1988,7 @@
    * [comment] and [metadata] can be `null` if the member does not have the
    * corresponding attribute.
    */
-  ClassMemberImpl(Comment comment, List<Annotation> metadata)
+  ClassMemberImpl(CommentImpl comment, List<Annotation> metadata)
       : super(comment, metadata);
 }
 
@@ -2007,7 +2006,7 @@
    * The type parameters for the class, or `null` if the class does not have any
    * type parameters.
    */
-  TypeParameterList _typeParameters;
+  TypeParameterListImpl _typeParameters;
 
   /**
    * The token for the '=' separating the name from the definition.
@@ -2025,18 +2024,18 @@
   /**
    * The name of the superclass of the class being declared.
    */
-  TypeName _superclass;
+  TypeNameImpl _superclass;
 
   /**
    * The with clause for this class.
    */
-  WithClause _withClause;
+  WithClauseImpl _withClause;
 
   /**
    * The implements clause for this class, or `null` if there is no implements
    * clause.
    */
-  ImplementsClause _implementsClause;
+  ImplementsClauseImpl _implementsClause;
 
   /**
    * Initialize a newly created class type alias. Either or both of the
@@ -2093,7 +2092,8 @@
 
   @override
   void set implementsClause(ImplementsClause implementsClause) {
-    _implementsClause = _becomeParentOf(implementsClause as AstNodeImpl);
+    _implementsClause =
+        _becomeParentOf(implementsClause as ImplementsClauseImpl);
   }
 
   @override
@@ -2104,7 +2104,7 @@
 
   @override
   void set superclass(TypeName superclass) {
-    _superclass = _becomeParentOf(superclass as AstNodeImpl);
+    _superclass = _becomeParentOf(superclass as TypeNameImpl);
   }
 
   @override
@@ -2112,7 +2112,7 @@
 
   @override
   void set typeParameters(TypeParameterList typeParameters) {
-    _typeParameters = _becomeParentOf(typeParameters as AstNodeImpl);
+    _typeParameters = _becomeParentOf(typeParameters as TypeParameterListImpl);
   }
 
   @override
@@ -2120,7 +2120,7 @@
 
   @override
   void set withClause(WithClause withClause) {
-    _withClause = _becomeParentOf(withClause as AstNodeImpl);
+    _withClause = _becomeParentOf(withClause as WithClauseImpl);
   }
 
   @override
@@ -2283,7 +2283,7 @@
   /**
    * The identifier being referenced.
    */
-  Identifier _identifier;
+  IdentifierImpl _identifier;
 
   /**
    * Initialize a newly created reference to a Dart element. The [newKeyword]
@@ -2308,7 +2308,7 @@
 
   @override
   void set identifier(Identifier identifier) {
-    _identifier = _becomeParentOf(identifier as AstNodeImpl);
+    _identifier = _becomeParentOf(identifier as IdentifierImpl);
   }
 
   @override
@@ -2388,7 +2388,7 @@
    * The script tag at the beginning of the compilation unit, or `null` if there
    * is no script tag in this compilation unit.
    */
-  ScriptTag _scriptTag;
+  ScriptTagImpl _scriptTag;
 
   /**
    * The directives contained in this compilation unit.
@@ -2472,7 +2472,7 @@
 
   @override
   void set scriptTag(ScriptTag scriptTag) {
-    _scriptTag = _becomeParentOf(scriptTag as AstNodeImpl);
+    _scriptTag = _becomeParentOf(scriptTag as ScriptTagImpl);
   }
 
   @override
@@ -2535,7 +2535,7 @@
    * of the [comment] and [metadata] can be `null` if the member does not have
    * the corresponding attribute.
    */
-  CompilationUnitMemberImpl(Comment comment, List<Annotation> metadata)
+  CompilationUnitMemberImpl(CommentImpl comment, List<Annotation> metadata)
       : super(comment, metadata);
 }
 
@@ -2550,7 +2550,7 @@
   /**
    * The condition used to determine which of the expressions is executed next.
    */
-  Expression _condition;
+  ExpressionImpl _condition;
 
   /**
    * The token used to separate the condition from the then expression.
@@ -2561,7 +2561,7 @@
   /**
    * The expression that is executed if the condition evaluates to `true`.
    */
-  Expression _thenExpression;
+  ExpressionImpl _thenExpression;
 
   /**
    * The token used to separate the then expression from the else expression.
@@ -2572,7 +2572,7 @@
   /**
    * The expression that is executed if the condition evaluates to `false`.
    */
-  Expression _elseExpression;
+  ExpressionImpl _elseExpression;
 
   /**
    * Initialize a newly created conditional expression.
@@ -2604,7 +2604,7 @@
 
   @override
   void set condition(Expression expression) {
-    _condition = _becomeParentOf(expression as AstNodeImpl);
+    _condition = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -2612,7 +2612,7 @@
 
   @override
   void set elseExpression(Expression expression) {
-    _elseExpression = _becomeParentOf(expression as AstNodeImpl);
+    _elseExpression = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -2626,7 +2626,7 @@
 
   @override
   void set thenExpression(Expression expression) {
-    _thenExpression = _becomeParentOf(expression as AstNodeImpl);
+    _thenExpression = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -2660,17 +2660,17 @@
   @override
   Token leftParenthesis;
 
-  DottedName _name;
+  DottedNameImpl _name;
 
   @override
   Token equalToken;
 
-  StringLiteral _value;
+  StringLiteralImpl _value;
 
   @override
   Token rightParenthesis;
 
-  StringLiteral _uri;
+  StringLiteralImpl _uri;
 
   @override
   Source uriSource;
@@ -2711,7 +2711,7 @@
   @deprecated
   @override
   void set libraryUri(StringLiteral libraryUri) {
-    _uri = _becomeParentOf(libraryUri as AstNodeImpl);
+    _uri = _becomeParentOf(libraryUri as StringLiteralImpl);
   }
 
   @override
@@ -2719,7 +2719,7 @@
 
   @override
   void set name(DottedName name) {
-    _name = _becomeParentOf(name as AstNodeImpl);
+    _name = _becomeParentOf(name as DottedNameImpl);
   }
 
   @override
@@ -2727,7 +2727,7 @@
 
   @override
   void set uri(StringLiteral uri) {
-    _uri = _becomeParentOf(uri as AstNodeImpl);
+    _uri = _becomeParentOf(uri as StringLiteralImpl);
   }
 
   @override
@@ -2735,7 +2735,7 @@
 
   @override
   void set value(StringLiteral value) {
-    _value = _becomeParentOf(value as AstNodeImpl);
+    _value = _becomeParentOf(value as StringLiteralImpl);
   }
 
   @override
@@ -2829,7 +2829,7 @@
    * which the constructor is being declared if the constructor is the
    * implementation of a factory constructor.
    */
-  Identifier _returnType;
+  IdentifierImpl _returnType;
 
   /**
    * The token for the period before the constructor name, or `null` if the
@@ -2842,12 +2842,12 @@
    * The name of the constructor, or `null` if the constructor being declared is
    * unnamed.
    */
-  SimpleIdentifier _name;
+  SimpleIdentifierImpl _name;
 
   /**
    * The parameters associated with the constructor.
    */
-  FormalParameterList _parameters;
+  FormalParameterListImpl _parameters;
 
   /**
    * The token for the separator (colon or equals) before the initializer list
@@ -2865,13 +2865,13 @@
    * The name of the constructor to which this constructor will be redirected,
    * or `null` if this is not a redirecting factory constructor.
    */
-  ConstructorName _redirectedConstructor;
+  ConstructorNameImpl _redirectedConstructor;
 
   /**
    * The body of the constructor, or `null` if the constructor does not have a
    * body.
    */
-  FunctionBody _body;
+  FunctionBodyImpl _body;
 
   /**
    * The element associated with this constructor, or `null` if the AST
@@ -2925,7 +2925,7 @@
 
   @override
   void set body(FunctionBody functionBody) {
-    _body = _becomeParentOf(functionBody as AstNodeImpl);
+    _body = _becomeParentOf(functionBody as FunctionBodyImpl);
   }
 
   @override
@@ -2970,7 +2970,7 @@
 
   @override
   void set name(SimpleIdentifier identifier) {
-    _name = _becomeParentOf(identifier as AstNodeImpl);
+    _name = _becomeParentOf(identifier as SimpleIdentifierImpl);
   }
 
   @override
@@ -2978,7 +2978,7 @@
 
   @override
   void set parameters(FormalParameterList parameters) {
-    _parameters = _becomeParentOf(parameters as AstNodeImpl);
+    _parameters = _becomeParentOf(parameters as FormalParameterListImpl);
   }
 
   @override
@@ -2987,7 +2987,7 @@
   @override
   void set redirectedConstructor(ConstructorName redirectedConstructor) {
     _redirectedConstructor =
-        _becomeParentOf(redirectedConstructor as AstNodeImpl);
+        _becomeParentOf(redirectedConstructor as ConstructorNameImpl);
   }
 
   @override
@@ -2995,7 +2995,7 @@
 
   @override
   void set returnType(Identifier typeName) {
-    _returnType = _becomeParentOf(typeName as AstNodeImpl);
+    _returnType = _becomeParentOf(typeName as IdentifierImpl);
   }
 
   @override
@@ -3038,7 +3038,7 @@
   /**
    * The name of the field being initialized.
    */
-  SimpleIdentifier _fieldName;
+  SimpleIdentifierImpl _fieldName;
 
   /**
    * The token for the equal sign between the field name and the expression.
@@ -3049,7 +3049,7 @@
   /**
    * The expression computing the value to which the field will be initialized.
    */
-  Expression _expression;
+  ExpressionImpl _expression;
 
   /**
    * Initialize a newly created field initializer to initialize the field with
@@ -3086,7 +3086,7 @@
 
   @override
   void set expression(Expression expression) {
-    _expression = _becomeParentOf(expression as AstNodeImpl);
+    _expression = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -3094,7 +3094,7 @@
 
   @override
   void set fieldName(SimpleIdentifier identifier) {
-    _fieldName = _becomeParentOf(identifier as AstNodeImpl);
+    _fieldName = _becomeParentOf(identifier as SimpleIdentifierImpl);
   }
 
   @override
@@ -3129,7 +3129,7 @@
   /**
    * The name of the type defining the constructor.
    */
-  TypeName _type;
+  TypeNameImpl _type;
 
   /**
    * The token for the period before the constructor name, or `null` if the
@@ -3142,7 +3142,7 @@
    * The name of the constructor, or `null` if the specified constructor is the
    * unnamed constructor.
    */
-  SimpleIdentifier _name;
+  SimpleIdentifierImpl _name;
 
   /**
    * The element associated with this constructor name based on static type
@@ -3182,7 +3182,7 @@
 
   @override
   void set name(SimpleIdentifier name) {
-    _name = _becomeParentOf(name as AstNodeImpl);
+    _name = _becomeParentOf(name as SimpleIdentifierImpl);
   }
 
   @override
@@ -3190,7 +3190,7 @@
 
   @override
   void set type(TypeName type) {
-    _type = _becomeParentOf(type as AstNodeImpl);
+    _type = _becomeParentOf(type as TypeNameImpl);
   }
 
   @override
@@ -3219,7 +3219,7 @@
   /**
    * The label associated with the statement, or `null` if there is no label.
    */
-  SimpleIdentifier _label;
+  SimpleIdentifierImpl _label;
 
   /**
    * The semicolon terminating the statement.
@@ -3261,7 +3261,7 @@
 
   @override
   void set label(SimpleIdentifier identifier) {
-    _label = _becomeParentOf(identifier as AstNodeImpl);
+    _label = _becomeParentOf(identifier as SimpleIdentifierImpl);
   }
 
   @override
@@ -3284,7 +3284,7 @@
    * [metadata] can be `null` if the declaration does not have the corresponding
    * attribute.
    */
-  DeclarationImpl(Comment comment, List<Annotation> metadata)
+  DeclarationImpl(CommentImpl comment, List<Annotation> metadata)
       : super(comment, metadata);
 }
 
@@ -3307,12 +3307,12 @@
    * The name of the declared type of the parameter, or `null` if the parameter
    * does not have a declared type.
    */
-  TypeAnnotation _type;
+  TypeAnnotationImpl _type;
 
   /**
    * The name of the variable being declared.
    */
-  SimpleIdentifier _identifier;
+  SimpleIdentifierImpl _identifier;
 
   /**
    * Initialize a newly created formal parameter. Either or both of the
@@ -3357,7 +3357,7 @@
 
   @override
   void set identifier(SimpleIdentifier identifier) {
-    _identifier = _becomeParentOf(identifier as AstNodeImpl);
+    _identifier = _becomeParentOf(identifier as SimpleIdentifierImpl);
   }
 
   @override
@@ -3371,7 +3371,7 @@
 
   @override
   void set type(TypeAnnotation type) {
-    _type = _becomeParentOf(type as AstNodeImpl);
+    _type = _becomeParentOf(type as TypeAnnotationImpl);
   }
 
   @override
@@ -3419,7 +3419,7 @@
   /**
    * The formal parameter with which the default value is associated.
    */
-  NormalFormalParameter _parameter;
+  NormalFormalParameterImpl _parameter;
 
   /**
    * The kind of this parameter.
@@ -3438,7 +3438,7 @@
    * The expression computing the default value for the parameter, or `null` if
    * there is no default value.
    */
-  Expression _defaultValue;
+  ExpressionImpl _defaultValue;
 
   /**
    * Initialize a newly created default formal parameter. The [separator] and
@@ -3465,7 +3465,7 @@
 
   @override
   void set defaultValue(Expression expression) {
-    _defaultValue = _becomeParentOf(expression as AstNodeImpl);
+    _defaultValue = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -3493,7 +3493,7 @@
 
   @override
   void set parameter(NormalFormalParameter formalParameter) {
-    _parameter = _becomeParentOf(formalParameter as AstNodeImpl);
+    _parameter = _becomeParentOf(formalParameter as NormalFormalParameterImpl);
   }
 
   @override
@@ -3529,7 +3529,7 @@
    * [metadata] can be `null` if the directive does not have the corresponding
    * attribute.
    */
-  DirectiveImpl(Comment comment, List<Annotation> metadata)
+  DirectiveImpl(CommentImpl comment, List<Annotation> metadata)
       : super(comment, metadata);
 
   @override
@@ -3559,7 +3559,7 @@
   /**
    * The body of the loop.
    */
-  Statement _body;
+  StatementImpl _body;
 
   /**
    * The token representing the 'while' keyword.
@@ -3575,7 +3575,7 @@
   /**
    * The condition that determines when the loop will terminate.
    */
-  Expression _condition;
+  ExpressionImpl _condition;
 
   /**
    * The right parenthesis.
@@ -3612,7 +3612,7 @@
 
   @override
   void set body(Statement statement) {
-    _body = _becomeParentOf(statement as AstNodeImpl);
+    _body = _becomeParentOf(statement as StatementImpl);
   }
 
   @override
@@ -3630,7 +3630,7 @@
 
   @override
   void set condition(Expression expression) {
-    _condition = _becomeParentOf(expression as AstNodeImpl);
+    _condition = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -3822,7 +3822,7 @@
   /**
    * The name of the constant.
    */
-  SimpleIdentifier _name;
+  SimpleIdentifierImpl _name;
 
   /**
    * Initialize a newly created enum constant declaration. Either or both of the
@@ -3854,7 +3854,7 @@
 
   @override
   void set name(SimpleIdentifier name) {
-    _name = _becomeParentOf(name as AstNodeImpl);
+    _name = _becomeParentOf(name as SimpleIdentifierImpl);
   }
 
   @override
@@ -3906,10 +3906,10 @@
    * value.
    */
   EnumDeclarationImpl(
-      Comment comment,
+      CommentImpl comment,
       List<Annotation> metadata,
       this.enumKeyword,
-      SimpleIdentifier name,
+      SimpleIdentifierImpl name,
       this.leftBracket,
       List<EnumConstantDeclaration> constants,
       this.rightBracket)
@@ -3975,10 +3975,10 @@
    * are no combinators.
    */
   ExportDirectiveImpl(
-      Comment comment,
+      CommentImpl comment,
       List<Annotation> metadata,
       Token keyword,
-      StringLiteral libraryUri,
+      StringLiteralImpl libraryUri,
       List<Configuration> configurations,
       List<Combinator> combinators,
       Token semicolon)
@@ -4037,7 +4037,7 @@
   /**
    * The expression representing the body of the function.
    */
-  Expression _expression;
+  ExpressionImpl _expression;
 
   /**
    * The semicolon terminating the statement.
@@ -4083,7 +4083,7 @@
 
   @override
   void set expression(Expression expression) {
-    _expression = _becomeParentOf(expression as AstNodeImpl);
+    _expression = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -4268,7 +4268,7 @@
   /**
    * The expression that comprises the statement.
    */
-  Expression _expression;
+  ExpressionImpl _expression;
 
   /**
    * The semicolon terminating the statement, or `null` if the expression is a
@@ -4304,7 +4304,7 @@
 
   @override
   void set expression(Expression expression) {
-    _expression = _becomeParentOf(expression as AstNodeImpl);
+    _expression = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -4335,7 +4335,7 @@
   /**
    * The name of the class that is being extended.
    */
-  TypeName _superclass;
+  TypeNameImpl _superclass;
 
   /**
    * Initialize a newly created extends clause.
@@ -4359,7 +4359,7 @@
 
   @override
   void set superclass(TypeName name) {
-    _superclass = _becomeParentOf(name as AstNodeImpl);
+    _superclass = _becomeParentOf(name as TypeNameImpl);
   }
 
   @override
@@ -4394,7 +4394,7 @@
   /**
    * The fields being declared.
    */
-  VariableDeclarationList _fieldList;
+  VariableDeclarationListImpl _fieldList;
 
   /**
    * The semicolon terminating the declaration.
@@ -4434,7 +4434,7 @@
 
   @override
   void set fields(VariableDeclarationList fields) {
-    _fieldList = _becomeParentOf(fields as AstNodeImpl);
+    _fieldList = _becomeParentOf(fields as VariableDeclarationListImpl);
   }
 
   @override
@@ -4480,7 +4480,7 @@
    * The name of the declared type of the parameter, or `null` if the parameter
    * does not have a declared type.
    */
-  TypeAnnotation _type;
+  TypeAnnotationImpl _type;
 
   /**
    * The token representing the 'this' keyword.
@@ -4498,13 +4498,13 @@
    * The type parameters associated with the method, or `null` if the method is
    * not a generic method.
    */
-  TypeParameterList _typeParameters;
+  TypeParameterListImpl _typeParameters;
 
   /**
    * The parameters of the function-typed parameter, or `null` if this is not a
    * function-typed field formal parameter.
    */
-  FormalParameterList _parameters;
+  FormalParameterListImpl _parameters;
 
   /**
    * Initialize a newly created formal parameter. Either or both of the
@@ -4575,7 +4575,7 @@
 
   @override
   void set parameters(FormalParameterList parameters) {
-    _parameters = _becomeParentOf(parameters as AstNodeImpl);
+    _parameters = _becomeParentOf(parameters as FormalParameterListImpl);
   }
 
   @override
@@ -4583,7 +4583,7 @@
 
   @override
   void set type(TypeAnnotation type) {
-    _type = _becomeParentOf(type as AstNodeImpl);
+    _type = _becomeParentOf(type as TypeAnnotationImpl);
   }
 
   @override
@@ -4591,7 +4591,7 @@
 
   @override
   void set typeParameters(TypeParameterList typeParameters) {
-    _typeParameters = _becomeParentOf(typeParameters as AstNodeImpl);
+    _typeParameters = _becomeParentOf(typeParameters as TypeParameterListImpl);
   }
 
   @override
@@ -4638,12 +4638,12 @@
    * The declaration of the loop variable, or `null` if the loop variable is a
    * simple identifier.
    */
-  DeclaredIdentifier _loopVariable;
+  DeclaredIdentifierImpl _loopVariable;
 
   /**
    * The loop variable, or `null` if the loop variable is declared in the 'for'.
    */
-  SimpleIdentifier _identifier;
+  SimpleIdentifierImpl _identifier;
 
   /**
    * The token representing the 'in' keyword.
@@ -4654,7 +4654,7 @@
   /**
    * The expression evaluated to produce the iterator.
    */
-  Expression _iterable;
+  ExpressionImpl _iterable;
 
   /**
    * The right parenthesis.
@@ -4665,7 +4665,7 @@
   /**
    * The body of the loop.
    */
-  Statement _body;
+  StatementImpl _body;
 
   /**
    * Initialize a newly created for-each statement whose loop control variable
@@ -4713,7 +4713,7 @@
 
   @override
   void set body(Statement statement) {
-    _body = _becomeParentOf(statement as AstNodeImpl);
+    _body = _becomeParentOf(statement as StatementImpl);
   }
 
   @override
@@ -4736,7 +4736,7 @@
 
   @override
   void set identifier(SimpleIdentifier identifier) {
-    _identifier = _becomeParentOf(identifier as AstNodeImpl);
+    _identifier = _becomeParentOf(identifier as SimpleIdentifierImpl);
   }
 
   @override
@@ -4744,7 +4744,7 @@
 
   @override
   void set iterable(Expression expression) {
-    _iterable = _becomeParentOf(expression as AstNodeImpl);
+    _iterable = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -4752,7 +4752,7 @@
 
   @override
   void set loopVariable(DeclaredIdentifier variable) {
-    _loopVariable = _becomeParentOf(variable as AstNodeImpl);
+    _loopVariable = _becomeParentOf(variable as DeclaredIdentifierImpl);
   }
 
   @override
@@ -4958,14 +4958,14 @@
    * Note that a for statement cannot have both a variable list and an
    * initialization expression, but can validly have neither.
    */
-  VariableDeclarationList _variableList;
+  VariableDeclarationListImpl _variableList;
 
   /**
    * The initialization expression, or `null` if there is no initialization
    * expression. Note that a for statement cannot have both a variable list and
    * an initialization expression, but can validly have neither.
    */
-  Expression _initialization;
+  ExpressionImpl _initialization;
 
   /**
    * The semicolon separating the initializer and the condition.
@@ -4977,7 +4977,7 @@
    * The condition used to determine when to terminate the loop, or `null` if
    * there is no condition.
    */
-  Expression _condition;
+  ExpressionImpl _condition;
 
   /**
    * The semicolon separating the condition and the updater.
@@ -4999,7 +4999,7 @@
   /**
    * The body of the loop.
    */
-  Statement _body;
+  StatementImpl _body;
 
   /**
    * Initialize a newly created for statement. Either the [variableList] or the
@@ -5033,7 +5033,7 @@
 
   @override
   void set body(Statement statement) {
-    _body = _becomeParentOf(statement as AstNodeImpl);
+    _body = _becomeParentOf(statement as StatementImpl);
   }
 
   @override
@@ -5054,7 +5054,7 @@
 
   @override
   void set condition(Expression expression) {
-    _condition = _becomeParentOf(expression as AstNodeImpl);
+    _condition = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -5065,7 +5065,7 @@
 
   @override
   void set initialization(Expression initialization) {
-    _initialization = _becomeParentOf(initialization as AstNodeImpl);
+    _initialization = _becomeParentOf(initialization as ExpressionImpl);
   }
 
   @override
@@ -5076,7 +5076,8 @@
 
   @override
   void set variables(VariableDeclarationList variableList) {
-    _variableList = _becomeParentOf(variableList as AstNodeImpl);
+    _variableList =
+        _becomeParentOf(variableList as VariableDeclarationListImpl);
   }
 
   @override
@@ -5179,7 +5180,7 @@
   /**
    * The return type of the function, or `null` if no return type was declared.
    */
-  TypeAnnotation _returnType;
+  TypeAnnotationImpl _returnType;
 
   /**
    * The token representing the 'get' or 'set' keyword, or `null` if this is a
@@ -5191,7 +5192,7 @@
   /**
    * The function expression being wrapped.
    */
-  FunctionExpression _functionExpression;
+  FunctionExpressionImpl _functionExpression;
 
   /**
    * Initialize a newly created function declaration. Either or both of the
@@ -5247,7 +5248,8 @@
 
   @override
   void set functionExpression(FunctionExpression functionExpression) {
-    _functionExpression = _becomeParentOf(functionExpression as AstNodeImpl);
+    _functionExpression =
+        _becomeParentOf(functionExpression as FunctionExpressionImpl);
   }
 
   @override
@@ -5261,7 +5263,7 @@
 
   @override
   void set returnType(TypeAnnotation type) {
-    _returnType = _becomeParentOf(type as AstNodeImpl);
+    _returnType = _becomeParentOf(type as TypeAnnotationImpl);
   }
 
   @override
@@ -5284,7 +5286,7 @@
   /**
    * The function declaration being wrapped.
    */
-  FunctionDeclaration _functionDeclaration;
+  FunctionDeclarationImpl _functionDeclaration;
 
   /**
    * Initialize a newly created function declaration statement.
@@ -5309,7 +5311,8 @@
 
   @override
   void set functionDeclaration(FunctionDeclaration functionDeclaration) {
-    _functionDeclaration = _becomeParentOf(functionDeclaration as AstNodeImpl);
+    _functionDeclaration =
+        _becomeParentOf(functionDeclaration as FunctionDeclarationImpl);
   }
 
   @override
@@ -5334,17 +5337,17 @@
    * The type parameters associated with the method, or `null` if the method is
    * not a generic method.
    */
-  TypeParameterList _typeParameters;
+  TypeParameterListImpl _typeParameters;
 
   /**
    * The parameters associated with the function.
    */
-  FormalParameterList _parameters;
+  FormalParameterListImpl _parameters;
 
   /**
    * The body of the function, or `null` if this is an external function.
    */
-  FunctionBody _body;
+  FunctionBodyImpl _body;
 
   /**
    * The element associated with the function, or `null` if the AST structure
@@ -5382,7 +5385,7 @@
 
   @override
   void set body(FunctionBody functionBody) {
-    _body = _becomeParentOf(functionBody as AstNodeImpl);
+    _body = _becomeParentOf(functionBody as FunctionBodyImpl);
   }
 
   @override
@@ -5406,7 +5409,7 @@
 
   @override
   void set parameters(FormalParameterList parameters) {
-    _parameters = _becomeParentOf(parameters as AstNodeImpl);
+    _parameters = _becomeParentOf(parameters as FormalParameterListImpl);
   }
 
   @override
@@ -5417,7 +5420,7 @@
 
   @override
   void set typeParameters(TypeParameterList typeParameters) {
-    _typeParameters = _becomeParentOf(typeParameters as AstNodeImpl);
+    _typeParameters = _becomeParentOf(typeParameters as TypeParameterListImpl);
   }
 
   @override
@@ -5445,7 +5448,7 @@
   /**
    * The expression producing the function being invoked.
    */
-  Expression _function;
+  ExpressionImpl _function;
 
   /**
    * The element associated with the function being invoked based on static type
@@ -5496,7 +5499,7 @@
 
   @override
   void set function(Expression expression) {
-    _function = _becomeParentOf(expression as AstNodeImpl);
+    _function = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -5528,18 +5531,18 @@
    * The name of the return type of the function type being defined, or `null`
    * if no return type was given.
    */
-  TypeAnnotation _returnType;
+  TypeAnnotationImpl _returnType;
 
   /**
    * The type parameters for the function type, or `null` if the function type
    * does not have any type parameters.
    */
-  TypeParameterList _typeParameters;
+  TypeParameterListImpl _typeParameters;
 
   /**
    * The parameters associated with the function type.
    */
-  FormalParameterList _parameters;
+  FormalParameterListImpl _parameters;
 
   /**
    * Initialize a newly created function type alias. Either or both of the
@@ -5581,7 +5584,7 @@
 
   @override
   void set parameters(FormalParameterList parameters) {
-    _parameters = _becomeParentOf(parameters as AstNodeImpl);
+    _parameters = _becomeParentOf(parameters as FormalParameterListImpl);
   }
 
   @override
@@ -5589,7 +5592,7 @@
 
   @override
   void set returnType(TypeAnnotation type) {
-    _returnType = _becomeParentOf(type as AstNodeImpl);
+    _returnType = _becomeParentOf(type as TypeAnnotationImpl);
   }
 
   @override
@@ -5597,7 +5600,7 @@
 
   @override
   void set typeParameters(TypeParameterList typeParameters) {
-    _typeParameters = _becomeParentOf(typeParameters as AstNodeImpl);
+    _typeParameters = _becomeParentOf(typeParameters as TypeParameterListImpl);
   }
 
   @override
@@ -5625,18 +5628,18 @@
    * The return type of the function, or `null` if the function does not have a
    * return type.
    */
-  TypeAnnotation _returnType;
+  TypeAnnotationImpl _returnType;
 
   /**
    * The type parameters associated with the function, or `null` if the function
    * is not a generic function.
    */
-  TypeParameterList _typeParameters;
+  TypeParameterListImpl _typeParameters;
 
   /**
    * The parameters of the function-typed parameter.
    */
-  FormalParameterList _parameters;
+  FormalParameterListImpl _parameters;
 
   @override
   Token question;
@@ -5687,7 +5690,7 @@
 
   @override
   void set parameters(FormalParameterList parameters) {
-    _parameters = _becomeParentOf(parameters as AstNodeImpl);
+    _parameters = _becomeParentOf(parameters as FormalParameterListImpl);
   }
 
   @override
@@ -5695,7 +5698,7 @@
 
   @override
   void set returnType(TypeAnnotation type) {
-    _returnType = _becomeParentOf(type as AstNodeImpl);
+    _returnType = _becomeParentOf(type as TypeAnnotationImpl);
   }
 
   @override
@@ -5703,7 +5706,7 @@
 
   @override
   void set typeParameters(TypeParameterList typeParameters) {
-    _typeParameters = _becomeParentOf(typeParameters as AstNodeImpl);
+    _typeParameters = _becomeParentOf(typeParameters as TypeParameterListImpl);
   }
 
   @override
@@ -5755,7 +5758,7 @@
    * The name of the return type of the function type being defined, or
    * `null` if no return type was given.
    */
-  TypeAnnotation _returnType;
+  TypeAnnotationImpl _returnType;
 
   @override
   Token functionKeyword;
@@ -5764,12 +5767,12 @@
    * The type parameters for the function type, or `null` if the function type
    * does not have any type parameters.
    */
-  TypeParameterList _typeParameters;
+  TypeParameterListImpl _typeParameters;
 
   /**
    * The parameters associated with the function type.
    */
-  FormalParameterList _parameters;
+  FormalParameterListImpl _parameters;
 
   @override
   DartType type;
@@ -5806,7 +5809,7 @@
 
   @override
   void set parameters(FormalParameterList parameters) {
-    _parameters = _becomeParentOf(parameters as AstNodeImpl);
+    _parameters = _becomeParentOf(parameters as FormalParameterListImpl);
   }
 
   @override
@@ -5814,7 +5817,7 @@
 
   @override
   void set returnType(TypeAnnotation type) {
-    _returnType = _becomeParentOf(type as AstNodeImpl);
+    _returnType = _becomeParentOf(type as TypeAnnotationImpl);
   }
 
   /**
@@ -5828,7 +5831,7 @@
    * [typeParameters].
    */
   void set typeParameters(TypeParameterList typeParameters) {
-    _typeParameters = _becomeParentOf(typeParameters as AstNodeImpl);
+    _typeParameters = _becomeParentOf(typeParameters as TypeParameterListImpl);
   }
 
   // TODO: implement type
@@ -5856,7 +5859,7 @@
    * The type parameters for the function type, or `null` if the function
    * type does not have any type parameters.
    */
-  TypeParameterList _typeParameters;
+  TypeParameterListImpl _typeParameters;
 
   @override
   Token equals;
@@ -5864,7 +5867,7 @@
   /**
    * The type of function being defined by the alias.
    */
-  GenericFunctionType _functionType;
+  GenericFunctionTypeImpl _functionType;
 
   /**
    * Returns a newly created generic type alias. Either or both of the
@@ -5873,10 +5876,10 @@
    * are no type parameters.
    */
   GenericTypeAliasImpl(
-      Comment comment,
+      CommentImpl comment,
       List<Annotation> metadata,
       Token typedefToken,
-      SimpleIdentifier name,
+      SimpleIdentifierImpl name,
       TypeParameterListImpl typeParameters,
       this.equals,
       GenericFunctionTypeImpl functionType,
@@ -5903,7 +5906,7 @@
 
   @override
   void set functionType(GenericFunctionType functionType) {
-    _functionType = _becomeParentOf(functionType as AstNodeImpl);
+    _functionType = _becomeParentOf(functionType as GenericFunctionTypeImpl);
   }
 
   @override
@@ -5911,7 +5914,7 @@
 
   @override
   void set typeParameters(TypeParameterList typeParameters) {
-    _typeParameters = _becomeParentOf(typeParameters as AstNodeImpl);
+    _typeParameters = _becomeParentOf(typeParameters as TypeParameterListImpl);
   }
 
   @override
@@ -6012,7 +6015,7 @@
   /**
    * The condition used to determine which of the statements is executed next.
    */
-  Expression _condition;
+  ExpressionImpl _condition;
 
   /**
    * The right parenthesis.
@@ -6023,7 +6026,7 @@
   /**
    * The statement that is executed if the condition evaluates to `true`.
    */
-  Statement _thenStatement;
+  StatementImpl _thenStatement;
 
   /**
    * The token representing the 'else' keyword, or `null` if there is no else
@@ -6036,7 +6039,7 @@
    * The statement that is executed if the condition evaluates to `false`, or
    * `null` if there is no else statement.
    */
-  Statement _elseStatement;
+  StatementImpl _elseStatement;
 
   /**
    * Initialize a newly created if statement. The [elseKeyword] and
@@ -6073,7 +6076,7 @@
 
   @override
   void set condition(Expression expression) {
-    _condition = _becomeParentOf(expression as AstNodeImpl);
+    _condition = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -6081,7 +6084,7 @@
 
   @override
   void set elseStatement(Statement statement) {
-    _elseStatement = _becomeParentOf(statement as AstNodeImpl);
+    _elseStatement = _becomeParentOf(statement as StatementImpl);
   }
 
   @override
@@ -6097,7 +6100,7 @@
 
   @override
   void set thenStatement(Statement statement) {
-    _thenStatement = _becomeParentOf(statement as AstNodeImpl);
+    _thenStatement = _becomeParentOf(statement as StatementImpl);
   }
 
   @override
@@ -6186,7 +6189,7 @@
    * The prefix to be used with the imported names, or `null` if the imported
    * names are not prefixed.
    */
-  SimpleIdentifier _prefix;
+  SimpleIdentifierImpl _prefix;
 
   /**
    * Initialize a newly created import directive. Either or both of the
@@ -6229,7 +6232,7 @@
 
   @override
   void set prefix(SimpleIdentifier identifier) {
-    _prefix = _becomeParentOf(identifier as AstNodeImpl);
+    _prefix = _becomeParentOf(identifier as SimpleIdentifierImpl);
   }
 
   @override
@@ -6263,7 +6266,7 @@
    * The expression used to compute the object being indexed, or `null` if this
    * index expression is part of a cascade expression.
    */
-  Expression _target;
+  ExpressionImpl _target;
 
   /**
    * The period ("..") before a cascaded index expression, or `null` if this
@@ -6281,7 +6284,7 @@
   /**
    * The expression used to compute the index.
    */
-  Expression _index;
+  ExpressionImpl _index;
 
   /**
    * The right square bracket.
@@ -6364,7 +6367,7 @@
 
   @override
   void set index(Expression expression) {
-    _index = _becomeParentOf(expression as AstNodeImpl);
+    _index = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -6396,7 +6399,7 @@
 
   @override
   void set target(Expression expression) {
-    _target = _becomeParentOf(expression as AstNodeImpl);
+    _target = _becomeParentOf(expression as ExpressionImpl);
   }
 
   /**
@@ -6491,12 +6494,12 @@
   /**
    * The name of the constructor to be invoked.
    */
-  ConstructorName _constructorName;
+  ConstructorNameImpl _constructorName;
 
   /**
    * The list of arguments to the constructor.
    */
-  ArgumentList _argumentList;
+  ArgumentListImpl _argumentList;
 
   /**
    * The element associated with the constructor based on static type
@@ -6520,7 +6523,7 @@
 
   @override
   void set argumentList(ArgumentList argumentList) {
-    _argumentList = _becomeParentOf(argumentList as AstNodeImpl);
+    _argumentList = _becomeParentOf(argumentList as ArgumentListImpl);
   }
 
   @override
@@ -6537,7 +6540,7 @@
 
   @override
   void set constructorName(ConstructorName name) {
-    _constructorName = _becomeParentOf(name as AstNodeImpl);
+    _constructorName = _becomeParentOf(name as ConstructorNameImpl);
   }
 
   @override
@@ -6790,7 +6793,7 @@
   /**
    * The expression to be evaluated for the value to be converted into a string.
    */
-  Expression _expression;
+  ExpressionImpl _expression;
 
   /**
    * The right curly bracket, or `null` if the expression is an identifier
@@ -6829,7 +6832,7 @@
 
   @override
   void set expression(Expression expression) {
-    _expression = _becomeParentOf(expression as AstNodeImpl);
+    _expression = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -6907,13 +6910,13 @@
   /**
    * The list of arguments to the function.
    */
-  ArgumentList _argumentList;
+  ArgumentListImpl _argumentList;
 
   /**
    * The type arguments to be applied to the method being invoked, or `null` if
    * no type arguments were provided.
    */
-  TypeArgumentList _typeArguments;
+  TypeArgumentListImpl _typeArguments;
 
   @override
   DartType propagatedInvokeType;
@@ -6934,14 +6937,14 @@
   ArgumentList get argumentList => _argumentList;
 
   void set argumentList(ArgumentList argumentList) {
-    _argumentList = _becomeParentOf(argumentList as AstNodeImpl);
+    _argumentList = _becomeParentOf(argumentList as ArgumentListImpl);
   }
 
   @override
   TypeArgumentList get typeArguments => _typeArguments;
 
   void set typeArguments(TypeArgumentList typeArguments) {
-    _typeArguments = _becomeParentOf(typeArguments as AstNodeImpl);
+    _typeArguments = _becomeParentOf(typeArguments as TypeArgumentListImpl);
   }
 }
 
@@ -6955,7 +6958,7 @@
   /**
    * The expression used to compute the value whose type is being tested.
    */
-  Expression _expression;
+  ExpressionImpl _expression;
 
   /**
    * The is operator.
@@ -6972,7 +6975,7 @@
   /**
    * The name of the type being tested for.
    */
-  TypeAnnotation _type;
+  TypeAnnotationImpl _type;
 
   /**
    * Initialize a newly created is expression. The [notOperator] can be `null`
@@ -7002,7 +7005,7 @@
 
   @override
   void set expression(Expression expression) {
-    _expression = _becomeParentOf(expression as AstNodeImpl);
+    _expression = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -7013,7 +7016,7 @@
 
   @override
   void set type(TypeAnnotation type) {
-    _type = _becomeParentOf(type as AstNodeImpl);
+    _type = _becomeParentOf(type as TypeAnnotationImpl);
   }
 
   @override
@@ -7041,7 +7044,7 @@
   /**
    * The statement with which the labels are being associated.
    */
-  Statement _statement;
+  StatementImpl _statement;
 
   /**
    * Initialize a newly created labeled statement.
@@ -7075,7 +7078,7 @@
 
   @override
   void set statement(Statement statement) {
-    _statement = _becomeParentOf(statement as AstNodeImpl);
+    _statement = _becomeParentOf(statement as StatementImpl);
   }
 
   @override
@@ -7101,7 +7104,7 @@
   /**
    * The label being associated with the statement.
    */
-  SimpleIdentifier _label;
+  SimpleIdentifierImpl _label;
 
   /**
    * The colon that separates the label from the statement.
@@ -7131,7 +7134,7 @@
 
   @override
   void set label(SimpleIdentifier label) {
-    _label = _becomeParentOf(label as AstNodeImpl);
+    _label = _becomeParentOf(label as SimpleIdentifierImpl);
   }
 
   @override
@@ -7159,7 +7162,7 @@
   /**
    * The name of the library being defined.
    */
-  LibraryIdentifier _name;
+  LibraryIdentifierImpl _name;
 
   /**
    * The semicolon terminating the directive.
@@ -7196,7 +7199,7 @@
 
   @override
   void set name(LibraryIdentifier name) {
-    _name = _becomeParentOf(name as AstNodeImpl);
+    _name = _becomeParentOf(name as LibraryIdentifierImpl);
   }
 
   @override
@@ -7311,7 +7314,7 @@
    * type arguments were declared. The list of [elements] can be `null` if the
    * list is empty.
    */
-  ListLiteralImpl(Token constKeyword, TypeArgumentList typeArguments,
+  ListLiteralImpl(Token constKeyword, TypeArgumentListImpl typeArguments,
       this.leftBracket, List<Expression> elements, this.rightBracket)
       : super(constKeyword, typeArguments) {
     _elements = new NodeListImpl<Expression>(this, elements);
@@ -7399,7 +7402,7 @@
   /**
    * The expression computing the key with which the value will be associated.
    */
-  Expression _key;
+  ExpressionImpl _key;
 
   /**
    * The colon that separates the key from the value.
@@ -7410,7 +7413,7 @@
   /**
    * The expression computing the value that will be associated with the key.
    */
-  Expression _value;
+  ExpressionImpl _value;
 
   /**
    * Initialize a newly created map literal entry.
@@ -7436,7 +7439,7 @@
 
   @override
   void set key(Expression string) {
-    _key = _becomeParentOf(string as AstNodeImpl);
+    _key = _becomeParentOf(string as ExpressionImpl);
   }
 
   @override
@@ -7444,7 +7447,7 @@
 
   @override
   void set value(Expression expression) {
-    _value = _becomeParentOf(expression as AstNodeImpl);
+    _value = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -7487,7 +7490,7 @@
    * the literal is not a constant. The [typeArguments] can be `null` if no type
    * arguments were declared. The [entries] can be `null` if the map is empty.
    */
-  MapLiteralImpl(Token constKeyword, TypeArgumentList typeArguments,
+  MapLiteralImpl(Token constKeyword, TypeArgumentListImpl typeArguments,
       this.leftBracket, List<MapLiteralEntry> entries, this.rightBracket)
       : super(constKeyword, typeArguments) {
     _entries = new NodeListImpl<MapLiteralEntry>(this, entries);
@@ -7561,7 +7564,7 @@
   /**
    * The return type of the method, or `null` if no return type was declared.
    */
-  TypeAnnotation _returnType;
+  TypeAnnotationImpl _returnType;
 
   /**
    * The token representing the 'get' or 'set' keyword, or `null` if this is a
@@ -7580,24 +7583,24 @@
   /**
    * The name of the method.
    */
-  SimpleIdentifier _name;
+  SimpleIdentifierImpl _name;
 
   /**
    * The type parameters associated with the method, or `null` if the method is
    * not a generic method.
    */
-  TypeParameterList _typeParameters;
+  TypeParameterListImpl _typeParameters;
 
   /**
    * The parameters associated with the method, or `null` if this method
    * declares a getter.
    */
-  FormalParameterList _parameters;
+  FormalParameterListImpl _parameters;
 
   /**
    * The body of the method.
    */
-  FunctionBody _body;
+  FunctionBodyImpl _body;
 
   /**
    * Initialize a newly created method declaration. Either or both of the
@@ -7635,7 +7638,7 @@
 
   @override
   void set body(FunctionBody functionBody) {
-    _body = _becomeParentOf(functionBody as AstNodeImpl);
+    _body = _becomeParentOf(functionBody as FunctionBodyImpl);
   }
 
   @override
@@ -7702,7 +7705,7 @@
 
   @override
   void set name(SimpleIdentifier identifier) {
-    _name = _becomeParentOf(identifier as AstNodeImpl);
+    _name = _becomeParentOf(identifier as SimpleIdentifierImpl);
   }
 
   @override
@@ -7710,7 +7713,7 @@
 
   @override
   void set parameters(FormalParameterList parameters) {
-    _parameters = _becomeParentOf(parameters as AstNodeImpl);
+    _parameters = _becomeParentOf(parameters as FormalParameterListImpl);
   }
 
   @override
@@ -7718,7 +7721,7 @@
 
   @override
   void set returnType(TypeAnnotation type) {
-    _returnType = _becomeParentOf(type as AstNodeImpl);
+    _returnType = _becomeParentOf(type as TypeAnnotationImpl);
   }
 
   @override
@@ -7726,7 +7729,7 @@
 
   @override
   void set typeParameters(TypeParameterList typeParameters) {
-    _typeParameters = _becomeParentOf(typeParameters as AstNodeImpl);
+    _typeParameters = _becomeParentOf(typeParameters as TypeParameterListImpl);
   }
 
   @override
@@ -7758,7 +7761,7 @@
    * The expression producing the object on which the method is defined, or
    * `null` if there is no target (that is, the target is implicitly `this`).
    */
-  Expression _target;
+  ExpressionImpl _target;
 
   /**
    * The operator that separates the target from the method name, or `null`
@@ -7772,7 +7775,7 @@
   /**
    * The name of the method being invoked.
    */
-  SimpleIdentifier _methodName;
+  SimpleIdentifierImpl _methodName;
 
   /**
    * Initialize a newly created method invocation. The [target] and [operator]
@@ -7821,7 +7824,7 @@
 
   @override
   void set methodName(SimpleIdentifier identifier) {
-    _methodName = _becomeParentOf(identifier as AstNodeImpl);
+    _methodName = _becomeParentOf(identifier as SimpleIdentifierImpl);
   }
 
   @override
@@ -7847,7 +7850,7 @@
 
   @override
   void set target(Expression expression) {
-    _target = _becomeParentOf(expression as AstNodeImpl);
+    _target = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -7870,7 +7873,7 @@
   /**
    * The name of the member being declared.
    */
-  SimpleIdentifier _name;
+  SimpleIdentifierImpl _name;
 
   /**
    * Initialize a newly created compilation unit member with the given [name].
@@ -7888,7 +7891,7 @@
 
   @override
   void set name(SimpleIdentifier identifier) {
-    _name = _becomeParentOf(identifier as AstNodeImpl);
+    _name = _becomeParentOf(identifier as SimpleIdentifierImpl);
   }
 }
 
@@ -7903,12 +7906,12 @@
   /**
    * The name associated with the expression.
    */
-  Label _name;
+  LabelImpl _name;
 
   /**
    * The expression with which the name is associated.
    */
-  Expression _expression;
+  ExpressionImpl _expression;
 
   /**
    * Initialize a newly created named expression..
@@ -7942,7 +7945,7 @@
 
   @override
   void set expression(Expression expression) {
-    _expression = _becomeParentOf(expression as AstNodeImpl);
+    _expression = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -7950,7 +7953,7 @@
 
   @override
   void set name(Label identifier) {
-    _name = _becomeParentOf(identifier as AstNodeImpl);
+    _name = _becomeParentOf(identifier as LabelImpl);
   }
 
   @override
@@ -8011,10 +8014,10 @@
    * are no combinators.
    */
   NamespaceDirectiveImpl(
-      Comment comment,
+      CommentImpl comment,
       List<Annotation> metadata,
       this.keyword,
-      StringLiteral libraryUri,
+      StringLiteralImpl libraryUri,
       List<Configuration> configurations,
       List<Combinator> combinators,
       this.semicolon)
@@ -8065,7 +8068,7 @@
   /**
    * The name of the native object that implements the class.
    */
-  StringLiteral _name;
+  StringLiteralImpl _name;
 
   /**
    * Initialize a newly created native clause.
@@ -8089,7 +8092,7 @@
 
   @override
   void set name(StringLiteral name) {
-    _name = _becomeParentOf(name as AstNodeImpl);
+    _name = _becomeParentOf(name as StringLiteralImpl);
   }
 
   @override
@@ -8119,7 +8122,7 @@
   /**
    * The string literal, after the 'native' token.
    */
-  StringLiteral _stringLiteral;
+  StringLiteralImpl _stringLiteral;
 
   /**
    * The token representing the semicolon that marks the end of the function
@@ -8154,7 +8157,7 @@
 
   @override
   void set stringLiteral(StringLiteral stringLiteral) {
-    _stringLiteral = _becomeParentOf(stringLiteral as AstNodeImpl);
+    _stringLiteral = _becomeParentOf(stringLiteral as StringLiteralImpl);
   }
 
   @override
@@ -8330,7 +8333,7 @@
    * The documentation comment associated with this parameter, or `null` if this
    * parameter does not have a documentation comment associated with it.
    */
-  Comment _comment;
+  CommentImpl _comment;
 
   /**
    * The annotations associated with this parameter.
@@ -8345,7 +8348,7 @@
   /**
    * The name of the parameter being declared.
    */
-  SimpleIdentifier _identifier;
+  SimpleIdentifierImpl _identifier;
 
   /**
    * Initialize a newly created formal parameter. Either or both of the
@@ -8364,7 +8367,7 @@
 
   @override
   void set documentationComment(Comment comment) {
-    _comment = _becomeParentOf(comment as AstNodeImpl);
+    _comment = _becomeParentOf(comment as CommentImpl);
   }
 
   @override
@@ -8372,7 +8375,7 @@
 
   @override
   void set identifier(SimpleIdentifier identifier) {
-    _identifier = _becomeParentOf(identifier as AstNodeImpl);
+    _identifier = _becomeParentOf(identifier as SimpleIdentifierImpl);
   }
 
   @deprecated
@@ -8499,7 +8502,7 @@
   /**
    * The expression within the parentheses.
    */
-  Expression _expression;
+  ExpressionImpl _expression;
 
   /**
    * The right parenthesis.
@@ -8531,7 +8534,7 @@
 
   @override
   void set expression(Expression expression) {
-    _expression = _becomeParentOf(expression as AstNodeImpl);
+    _expression = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -8582,8 +8585,8 @@
    * and [metadata] can be `null` if the directive does not have the
    * corresponding attribute.
    */
-  PartDirectiveImpl(Comment comment, List<Annotation> metadata,
-      this.partKeyword, StringLiteral partUri, this.semicolon)
+  PartDirectiveImpl(CommentImpl comment, List<Annotation> metadata,
+      this.partKeyword, StringLiteralImpl partUri, this.semicolon)
       : super(comment, metadata, partUri);
 
   @override
@@ -8634,7 +8637,7 @@
    * The name of the library that the containing compilation unit is part of, or
    * `null` if no name was given (typically because a library URI was provided).
    */
-  LibraryIdentifier _libraryName;
+  LibraryIdentifierImpl _libraryName;
 
   /**
    * The semicolon terminating the directive.
@@ -8682,7 +8685,7 @@
 
   @override
   void set libraryName(LibraryIdentifier libraryName) {
-    _libraryName = _becomeParentOf(libraryName as AstNodeImpl);
+    _libraryName = _becomeParentOf(libraryName as LibraryIdentifierImpl);
   }
 
   @override
@@ -8690,7 +8693,7 @@
 
   @override
   void set uri(StringLiteral uri) {
-    _uri = _becomeParentOf(uri as AstNodeImpl);
+    _uri = _becomeParentOf(uri as StringLiteralImpl);
   }
 
   @override
@@ -8715,7 +8718,7 @@
   /**
    * The expression computing the operand for the operator.
    */
-  Expression _operand;
+  ExpressionImpl _operand;
 
   /**
    * The postfix operator being applied to the operand.
@@ -8771,7 +8774,7 @@
 
   @override
   void set operand(Expression expression) {
-    _operand = _becomeParentOf(expression as AstNodeImpl);
+    _operand = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -8832,7 +8835,7 @@
   /**
    * The prefix associated with the library in which the identifier is defined.
    */
-  SimpleIdentifier _prefix;
+  SimpleIdentifierImpl _prefix;
 
   /**
    * The period used to separate the prefix from the identifier.
@@ -8842,7 +8845,7 @@
   /**
    * The identifier being prefixed.
    */
-  SimpleIdentifier _identifier;
+  SimpleIdentifierImpl _identifier;
 
   /**
    * Initialize a newly created prefixed identifier.
@@ -8883,7 +8886,7 @@
 
   @override
   void set identifier(SimpleIdentifier identifier) {
-    _identifier = _becomeParentOf(identifier as AstNodeImpl);
+    _identifier = _becomeParentOf(identifier as SimpleIdentifierImpl);
   }
 
   @override
@@ -8911,7 +8914,7 @@
 
   @override
   void set prefix(SimpleIdentifier identifier) {
-    _prefix = _becomeParentOf(identifier as AstNodeImpl);
+    _prefix = _becomeParentOf(identifier as SimpleIdentifierImpl);
   }
 
   @override
@@ -8955,7 +8958,7 @@
   /**
    * The expression computing the operand for the operator.
    */
-  Expression _operand;
+  ExpressionImpl _operand;
 
   /**
    * The element associated with the operator based on the static type of the
@@ -9002,7 +9005,7 @@
 
   @override
   void set operand(Expression expression) {
-    _operand = _becomeParentOf(expression as AstNodeImpl);
+    _operand = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -9065,7 +9068,7 @@
   /**
    * The expression computing the object defining the property being accessed.
    */
-  Expression _target;
+  ExpressionImpl _target;
 
   /**
    * The property access operator.
@@ -9075,7 +9078,7 @@
   /**
    * The name of the property being accessed.
    */
-  SimpleIdentifier _propertyName;
+  SimpleIdentifierImpl _propertyName;
 
   /**
    * Initialize a newly created property access expression.
@@ -9116,7 +9119,7 @@
 
   @override
   void set propertyName(SimpleIdentifier identifier) {
-    _propertyName = _becomeParentOf(identifier as AstNodeImpl);
+    _propertyName = _becomeParentOf(identifier as SimpleIdentifierImpl);
   }
 
   @override
@@ -9139,7 +9142,7 @@
 
   @override
   void set target(Expression expression) {
-    _target = _becomeParentOf(expression as AstNodeImpl);
+    _target = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -9176,12 +9179,12 @@
    * The name of the constructor that is being invoked, or `null` if the unnamed
    * constructor is being invoked.
    */
-  SimpleIdentifier _constructorName;
+  SimpleIdentifierImpl _constructorName;
 
   /**
    * The list of arguments to the constructor.
    */
-  ArgumentList _argumentList;
+  ArgumentListImpl _argumentList;
 
   /**
    * The element associated with the constructor based on static type
@@ -9206,7 +9209,7 @@
 
   @override
   void set argumentList(ArgumentList argumentList) {
-    _argumentList = _becomeParentOf(argumentList as AstNodeImpl);
+    _argumentList = _becomeParentOf(argumentList as ArgumentListImpl);
   }
 
   @override
@@ -9224,7 +9227,7 @@
 
   @override
   void set constructorName(SimpleIdentifier identifier) {
-    _constructorName = _becomeParentOf(identifier as AstNodeImpl);
+    _constructorName = _becomeParentOf(identifier as SimpleIdentifierImpl);
   }
 
   @override
@@ -9297,7 +9300,7 @@
    * The expression computing the value to be returned, or `null` if no explicit
    * value was provided.
    */
-  Expression _expression;
+  ExpressionImpl _expression;
 
   /**
    * The semicolon terminating the statement.
@@ -9328,7 +9331,7 @@
 
   @override
   void set expression(Expression expression) {
-    _expression = _becomeParentOf(expression as AstNodeImpl);
+    _expression = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -9435,7 +9438,7 @@
    * The name of the declared type of the parameter, or `null` if the parameter
    * does not have a declared type.
    */
-  TypeAnnotation _type;
+  TypeAnnotationImpl _type;
 
   @override
   ParameterElement element;
@@ -9490,7 +9493,7 @@
 
   @override
   void set type(TypeAnnotation type) {
-    _type = _becomeParentOf(type as AstNodeImpl);
+    _type = _becomeParentOf(type as TypeAnnotationImpl);
   }
 
   @override
@@ -10058,12 +10061,12 @@
    * The name of the constructor that is being invoked, or `null` if the unnamed
    * constructor is being invoked.
    */
-  SimpleIdentifier _constructorName;
+  SimpleIdentifierImpl _constructorName;
 
   /**
    * The list of arguments to the constructor.
    */
-  ArgumentList _argumentList;
+  ArgumentListImpl _argumentList;
 
   /**
    * The element associated with the constructor based on static type
@@ -10089,7 +10092,7 @@
 
   @override
   void set argumentList(ArgumentList argumentList) {
-    _argumentList = _becomeParentOf(argumentList as AstNodeImpl);
+    _argumentList = _becomeParentOf(argumentList as ArgumentListImpl);
   }
 
   @override
@@ -10107,7 +10110,7 @@
 
   @override
   void set constructorName(SimpleIdentifier identifier) {
-    _constructorName = _becomeParentOf(identifier as AstNodeImpl);
+    _constructorName = _becomeParentOf(identifier as SimpleIdentifierImpl);
   }
 
   @override
@@ -10173,7 +10176,7 @@
   /**
    * The expression controlling whether the statements will be executed.
    */
-  Expression _expression;
+  ExpressionImpl _expression;
 
   /**
    * Initialize a newly created switch case. The list of [labels] can be `null`
@@ -10198,7 +10201,7 @@
 
   @override
   void set expression(Expression expression) {
-    _expression = _becomeParentOf(expression as AstNodeImpl);
+    _expression = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -10326,7 +10329,7 @@
    * The expression used to determine which of the switch members will be
    * selected.
    */
-  Expression _expression;
+  ExpressionImpl _expression;
 
   /**
    * The right parenthesis.
@@ -10385,7 +10388,7 @@
 
   @override
   void set expression(Expression expression) {
-    _expression = _becomeParentOf(expression as AstNodeImpl);
+    _expression = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -10498,7 +10501,7 @@
   /**
    * The expression computing the exception to be thrown.
    */
-  Expression _expression;
+  ExpressionImpl _expression;
 
   /**
    * Initialize a newly created throw expression.
@@ -10527,7 +10530,7 @@
 
   @override
   void set expression(Expression expression) {
-    _expression = _becomeParentOf(expression as AstNodeImpl);
+    _expression = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -10554,7 +10557,7 @@
   /**
    * The top-level variables being declared.
    */
-  VariableDeclarationList _variableList;
+  VariableDeclarationListImpl _variableList;
 
   /**
    * The semicolon terminating the declaration.
@@ -10593,7 +10596,7 @@
 
   @override
   void set variables(VariableDeclarationList variables) {
-    _variableList = _becomeParentOf(variables as AstNodeImpl);
+    _variableList = _becomeParentOf(variables as VariableDeclarationListImpl);
   }
 
   @override
@@ -10625,7 +10628,7 @@
   /**
    * The body of the statement.
    */
-  Block _body;
+  BlockImpl _body;
 
   /**
    * The catch clauses contained in the try statement.
@@ -10642,7 +10645,7 @@
    * The finally block contained in the try statement, or `null` if the
    * statement does not contain a finally clause.
    */
-  Block _finallyBlock;
+  BlockImpl _finallyBlock;
 
   /**
    * Initialize a newly created try statement. The list of [catchClauses] can be
@@ -10668,7 +10671,7 @@
 
   @override
   void set body(Block block) {
-    _body = _becomeParentOf(block as AstNodeImpl);
+    _body = _becomeParentOf(block as BlockImpl);
   }
 
   @override
@@ -10699,7 +10702,7 @@
 
   @override
   void set finallyBlock(Block block) {
-    _finallyBlock = _becomeParentOf(block as AstNodeImpl);
+    _finallyBlock = _becomeParentOf(block as BlockImpl);
   }
 
   @override
@@ -10740,8 +10743,8 @@
    * [metadata] can be `null` if the declaration does not have the corresponding
    * attribute.
    */
-  TypeAliasImpl(Comment comment, List<Annotation> metadata, this.typedefKeyword,
-      SimpleIdentifier name, this.semicolon)
+  TypeAliasImpl(CommentImpl comment, List<Annotation> metadata,
+      this.typedefKeyword, SimpleIdentifierImpl name, this.semicolon)
       : super(comment, metadata, name);
 
   @override
@@ -10834,7 +10837,7 @@
    * The type argument associated with this literal, or `null` if no type
    * arguments were declared.
    */
-  TypeArgumentList _typeArguments;
+  TypeArgumentListImpl _typeArguments;
 
   /**
    * Initialize a newly created typed literal. The [constKeyword] can be `null`\
@@ -10855,7 +10858,7 @@
 
   @override
   void set typeArguments(TypeArgumentList typeArguments) {
-    _typeArguments = _becomeParentOf(typeArguments as AstNodeImpl);
+    _typeArguments = _becomeParentOf(typeArguments as TypeArgumentListImpl);
   }
 
   ChildEntities get _childEntities =>
@@ -10877,13 +10880,13 @@
   /**
    * The name of the type.
    */
-  Identifier _name;
+  IdentifierImpl _name;
 
   /**
    * The type arguments associated with the type, or `null` if there are no type
    * arguments.
    */
-  TypeArgumentList _typeArguments;
+  TypeArgumentListImpl _typeArguments;
 
   @override
   Token question;
@@ -10935,7 +10938,7 @@
 
   @override
   void set name(Identifier identifier) {
-    _name = _becomeParentOf(identifier as AstNodeImpl);
+    _name = _becomeParentOf(identifier as IdentifierImpl);
   }
 
   @override
@@ -10943,7 +10946,7 @@
 
   @override
   void set typeArguments(TypeArgumentList typeArguments) {
-    _typeArguments = _becomeParentOf(typeArguments as AstNodeImpl);
+    _typeArguments = _becomeParentOf(typeArguments as TypeArgumentListImpl);
   }
 
   @override
@@ -10966,7 +10969,7 @@
   /**
    * The name of the type parameter.
    */
-  SimpleIdentifier _name;
+  SimpleIdentifierImpl _name;
 
   /**
    * The token representing the 'extends' keyword, or `null` if there is no
@@ -10978,7 +10981,7 @@
    * The name of the upper bound for legal arguments, or `null` if there is no
    * explicit upper bound.
    */
-  TypeAnnotation _bound;
+  TypeAnnotationImpl _bound;
 
   /**
    * Initialize a newly created type parameter. Either or both of the [comment]
@@ -10998,7 +11001,7 @@
 
   @override
   void set bound(TypeAnnotation type) {
-    _bound = _becomeParentOf(type as AstNodeImpl);
+    _bound = _becomeParentOf(type as TypeAnnotationImpl);
   }
 
   @override
@@ -11025,7 +11028,7 @@
 
   @override
   void set name(SimpleIdentifier identifier) {
-    _name = _becomeParentOf(identifier as AstNodeImpl);
+    _name = _becomeParentOf(identifier as SimpleIdentifierImpl);
   }
 
   @override
@@ -11112,7 +11115,7 @@
   /**
    * The URI referenced by this directive.
    */
-  StringLiteral _uri;
+  StringLiteralImpl _uri;
 
   @override
   String uriContent;
@@ -11146,7 +11149,7 @@
 
   @override
   void set uri(StringLiteral uri) {
-    _uri = _becomeParentOf(uri as AstNodeImpl);
+    _uri = _becomeParentOf(uri as StringLiteralImpl);
   }
 
   UriValidationCode validate() {
@@ -11231,7 +11234,7 @@
   /**
    * The name of the variable being declared.
    */
-  SimpleIdentifier _name;
+  SimpleIdentifierImpl _name;
 
   /**
    * The equal sign separating the variable name from the initial value, or
@@ -11243,7 +11246,7 @@
    * The expression used to compute the initial value for the variable, or
    * `null` if the initial value was not specified.
    */
-  Expression _initializer;
+  ExpressionImpl _initializer;
 
   /**
    * Initialize a newly created variable declaration. The [equals] and
@@ -11296,7 +11299,7 @@
 
   @override
   void set initializer(Expression expression) {
-    _initializer = _becomeParentOf(expression as AstNodeImpl);
+    _initializer = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -11316,7 +11319,7 @@
 
   @override
   void set name(SimpleIdentifier identifier) {
-    _name = _becomeParentOf(identifier as AstNodeImpl);
+    _name = _becomeParentOf(identifier as SimpleIdentifierImpl);
   }
 
   @override
@@ -11353,7 +11356,7 @@
   /**
    * The type of the variables being declared, or `null` if no type was provided.
    */
-  TypeAnnotation _type;
+  TypeAnnotationImpl _type;
 
   /**
    * A list containing the individual variables being declared.
@@ -11408,7 +11411,7 @@
 
   @override
   void set type(TypeAnnotation type) {
-    _type = _becomeParentOf(type as AstNodeImpl);
+    _type = _becomeParentOf(type as TypeAnnotationImpl);
   }
 
   @override
@@ -11438,7 +11441,7 @@
   /**
    * The variables being declared.
    */
-  VariableDeclarationList _variableList;
+  VariableDeclarationListImpl _variableList;
 
   /**
    * The semicolon terminating the statement.
@@ -11468,7 +11471,7 @@
 
   @override
   void set variables(VariableDeclarationList variables) {
-    _variableList = _becomeParentOf(variables as AstNodeImpl);
+    _variableList = _becomeParentOf(variables as VariableDeclarationListImpl);
   }
 
   @override
@@ -11501,7 +11504,7 @@
   /**
    * The expression used to determine whether to execute the body of the loop.
    */
-  Expression _condition;
+  ExpressionImpl _condition;
 
   /**
    * The right parenthesis.
@@ -11511,7 +11514,7 @@
   /**
    * The body of the loop.
    */
-  Statement _body;
+  StatementImpl _body;
 
   /**
    * Initialize a newly created while statement.
@@ -11530,7 +11533,7 @@
 
   @override
   void set body(Statement statement) {
-    _body = _becomeParentOf(statement as AstNodeImpl);
+    _body = _becomeParentOf(statement as StatementImpl);
   }
 
   @override
@@ -11546,7 +11549,7 @@
 
   @override
   void set condition(Expression expression) {
-    _condition = _becomeParentOf(expression as AstNodeImpl);
+    _condition = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
@@ -11630,7 +11633,7 @@
   /**
    * The expression whose value will be yielded.
    */
-  Expression _expression;
+  ExpressionImpl _expression;
 
   /**
    * The semicolon following the expression.
@@ -11674,7 +11677,7 @@
 
   @override
   void set expression(Expression expression) {
-    _expression = _becomeParentOf(expression as AstNodeImpl);
+    _expression = _becomeParentOf(expression as ExpressionImpl);
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 5f3d53b..094a77b 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -2,8 +2,6 @@
 // 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 analyzer.src.dart.element.element;
-
 import 'dart:collection';
 import 'dart:math' show min;
 
@@ -802,6 +800,7 @@
         _interfaces = _unlinkedClass.interfaces
             .map((EntityRef t) => context.resolveTypeRef(this, t))
             .where(_isClassInterfaceType)
+            .cast<InterfaceType>()
             .toList(growable: false);
       }
     }
@@ -938,6 +937,7 @@
         _mixins = _unlinkedClass.mixins
             .map((EntityRef t) => context.resolveTypeRef(this, t))
             .where(_isClassInterfaceType)
+            .cast<InterfaceType>()
             .toList(growable: false);
       }
     }
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 083a05f..2ca77de 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -1464,6 +1464,10 @@
     }
   }
 
+  void beginTopLevelMethod(Token lastConsumed, Token externalToken) {
+    push(new _Modifiers()..externalKeyword = externalToken);
+  }
+
   void endTopLevelMethod(Token beginToken, Token getOrSet, Token endToken) {
     // TODO(paulberry): set up scopes properly to resolve parameters and type
     // variables.
@@ -1995,6 +1999,14 @@
   }
 
   @override
+  void beginFactoryMethod(
+      Token lastConsumed, Token externalToken, Token constToken) {
+    push(new _Modifiers()
+      ..externalKeyword = externalToken
+      ..finalConstOrVarKeyword = constToken);
+  }
+
+  @override
   void endFactoryMethod(
       Token beginToken, Token factoryKeyword, Token endToken) {
     assert(optional('factory', factoryKeyword));
@@ -2083,7 +2095,6 @@
     FormalParameterList parameters = pop();
     SimpleIdentifier name = pop();
     TypeAnnotation returnType = pop();
-    pop(); // modifiers
     TypeParameterList typeParameters = pop();
     FunctionExpression functionExpression =
         ast.functionExpression(typeParameters, parameters, body);
diff --git a/pkg/analyzer/lib/src/generated/testing/test_type_provider.dart b/pkg/analyzer/lib/src/generated/testing/test_type_provider.dart
index 06ce559..e8b2f1f 100644
--- a/pkg/analyzer/lib/src/generated/testing/test_type_provider.dart
+++ b/pkg/analyzer/lib/src/generated/testing/test_type_provider.dart
@@ -2,8 +2,6 @@
 // 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 analyzer.src.generated.testing.test_type_provider;
-
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/element.dart';
@@ -732,6 +730,7 @@
     element.accessors = accessors;
     element.fields = accessors
         .map((PropertyAccessorElement accessor) => accessor.variable)
+        .cast<FieldElement>()
         .toList();
   }
 }
diff --git a/pkg/analyzer/lib/src/plugin/engine_plugin.dart b/pkg/analyzer/lib/src/plugin/engine_plugin.dart
index fb0599db4..fc652f0 100644
--- a/pkg/analyzer/lib/src/plugin/engine_plugin.dart
+++ b/pkg/analyzer/lib/src/plugin/engine_plugin.dart
@@ -2,8 +2,6 @@
 // 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 analyzer.src.plugin.engine_plugin;
-
 import 'package:analyzer/error/error.dart' show AnalysisError;
 import 'package:analyzer/plugin/task.dart';
 import 'package:analyzer/src/generated/engine.dart'
@@ -90,7 +88,7 @@
    * descriptors for Dart sources.
    */
   @ExtensionPointId('DART_ERRORS_FOR_SOURCE_EXTENSION_POINT_ID')
-  List<ResultDescriptor> get dartErrorsForSource =>
+  List<ListResultDescriptor<AnalysisError>> get dartErrorsForSource =>
       dartErrorsForSourceExtensionPoint.extensions;
 
   /**
@@ -98,7 +96,7 @@
    * descriptors for Dart library specific units.
    */
   @ExtensionPointId('DART_ERRORS_FOR_UNIT_EXTENSION_POINT_ID')
-  List<ResultDescriptor> get dartErrorsForUnit =>
+  List<ListResultDescriptor<AnalysisError>> get dartErrorsForUnit =>
       dartErrorsForUnitExtensionPoint.extensions;
 
   /**
@@ -106,7 +104,8 @@
    * descriptors for HTML sources.
    */
   @ExtensionPointId('HTML_ERRORS_EXTENSION_POINT_ID')
-  List<ResultDescriptor> get htmlErrors => htmlErrorsExtensionPoint.extensions;
+  List<ListResultDescriptor<AnalysisError>> get htmlErrors =>
+      htmlErrorsExtensionPoint.extensions;
 
   @override
   String get uniqueIdentifier => UNIQUE_IDENTIFIER;
diff --git a/pkg/analyzer/lib/src/summary/resynthesize.dart b/pkg/analyzer/lib/src/summary/resynthesize.dart
index 4f0d914..58fbf60 100644
--- a/pkg/analyzer/lib/src/summary/resynthesize.dart
+++ b/pkg/analyzer/lib/src/summary/resynthesize.dart
@@ -1371,7 +1371,11 @@
         } else {
           // For a type that refers to a generic executable, the type arguments are
           // not supposed to include the arguments to the executable itself.
-          numTypeArguments = enclosing?.numTypeParameters ?? 0;
+          if (element is MethodElementHandle && !element.isStatic) {
+            numTypeArguments = enclosing?.numTypeParameters ?? 0;
+          } else {
+            numTypeArguments = 0;
+          }
           computer = () => this.element as FunctionTypedElement;
         }
         // TODO(paulberry): Is it a bug that we have to pass `false` for
diff --git a/pkg/analyzer/lib/src/summary/summarize_const_expr.dart b/pkg/analyzer/lib/src/summary/summarize_const_expr.dart
index 75a487c..91b8015 100644
--- a/pkg/analyzer/lib/src/summary/summarize_const_expr.dart
+++ b/pkg/analyzer/lib/src/summary/summarize_const_expr.dart
@@ -2,8 +2,6 @@
 // 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 serialization.summarize_const_expr;
-
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/element/type.dart' show DartType;
@@ -13,7 +11,7 @@
 /**
  * Serialize the given constructor initializer [node].
  */
-UnlinkedConstructorInitializer serializeConstructorInitializer(
+UnlinkedConstructorInitializerBuilder serializeConstructorInitializer(
     ConstructorInitializer node,
     UnlinkedExprBuilder serializeConstExpr(Expression expr)) {
   if (node is ConstructorFieldInitializer) {
@@ -175,6 +173,13 @@
   List<int> serializeFunctionExpression(FunctionExpression functionExpression);
 
   /**
+   * Return [EntityRefBuilder] that corresponds to the [type], which is defined
+   * using generic function type syntax. These may appear as the type arguments
+   * of a const list, etc.
+   */
+  EntityRefBuilder serializeGenericFunctionType(GenericFunctionType type);
+
+  /**
    * Return [EntityRefBuilder] that corresponds to the given [identifier].
    */
   EntityRefBuilder serializeIdentifier(Identifier identifier);
@@ -193,22 +198,6 @@
   }
 
   /**
-   * Return [EntityRefBuilder] that corresponds to the [type] with the given
-   * [name] and [arguments].  It is expected that [type] corresponds to the
-   * given [name] and [arguments].  The parameter [type] might be `null` if the
-   * type is not resolved.
-   */
-  EntityRefBuilder serializeTypeName(
-      DartType type, Identifier name, TypeArgumentList arguments);
-
-  /**
-   * Return [EntityRefBuilder] that corresponds to the [type], which is defined
-   * using generic function type syntax. These may appear as the type arguments
-   * of a const list, etc.
-   */
-  EntityRefBuilder serializeGenericFunctionType(GenericFunctionType type);
-
-  /**
    * Return [EntityRefBuilder] that corresponds to the given [type].
    */
   EntityRefBuilder serializeType(TypeAnnotation type) {
@@ -223,6 +212,15 @@
   }
 
   /**
+   * Return [EntityRefBuilder] that corresponds to the [type] with the given
+   * [name] and [arguments].  It is expected that [type] corresponds to the
+   * given [name] and [arguments].  The parameter [type] might be `null` if the
+   * type is not resolved.
+   */
+  EntityRefBuilder serializeTypeName(
+      DartType type, Identifier name, TypeArgumentList arguments);
+
+  /**
    * Return the [UnlinkedExprBuilder] that corresponds to the state of this
    * serializer.
    */
diff --git a/pkg/analyzer/lib/src/task/dart.dart b/pkg/analyzer/lib/src/task/dart.dart
index aa309b2..3fed1de 100644
--- a/pkg/analyzer/lib/src/task/dart.dart
+++ b/pkg/analyzer/lib/src/task/dart.dart
@@ -2,8 +2,6 @@
 // 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 analyzer.src.task.dart;
-
 import 'dart:collection';
 
 import 'package:analyzer/dart/ast/ast.dart';
@@ -1077,7 +1075,7 @@
     ConstantFinder constantFinder = new ConstantFinder();
     unit.accept(constantFinder);
     List<ConstantEvaluationTarget> constants =
-        constantFinder.constantsToCompute.toList();
+        constantFinder.constantsToCompute;
     //
     // Record outputs.
     //
@@ -2262,9 +2260,9 @@
           component.expand((l) => l.units).map(unitToLSU).toList();
       outputs[LIBRARY_CYCLE_DEPENDENCIES] = deps.map(unitToLSU).toList();
     } else {
-      outputs[LIBRARY_CYCLE] = [];
-      outputs[LIBRARY_CYCLE_UNITS] = [];
-      outputs[LIBRARY_CYCLE_DEPENDENCIES] = [];
+      outputs[LIBRARY_CYCLE] = <LibraryElement>[];
+      outputs[LIBRARY_CYCLE_UNITS] = <LibrarySpecificUnit>[];
+      outputs[LIBRARY_CYCLE_DEPENDENCIES] = <LibrarySpecificUnit>[];
     }
   }
 
@@ -2530,18 +2528,20 @@
     inputs[IGNORE_INFO_INPUT] = IGNORE_INFO.of(source);
     EnginePlugin enginePlugin = AnalysisEngine.instance.enginePlugin;
     // for Source
-    List<ResultDescriptor> errorsForSource = enginePlugin.dartErrorsForSource;
+    List<ListResultDescriptor<AnalysisError>> errorsForSource =
+        enginePlugin.dartErrorsForSource;
     int sourceLength = errorsForSource.length;
     for (int i = 0; i < sourceLength; i++) {
-      ResultDescriptor result = errorsForSource[i];
+      ListResultDescriptor<AnalysisError> result = errorsForSource[i];
       String inputName = result.name + '_input';
       inputs[inputName] = result.of(source);
     }
     // for LibrarySpecificUnit
-    List<ResultDescriptor> errorsForUnit = enginePlugin.dartErrorsForUnit;
+    List<ListResultDescriptor<AnalysisError>> errorsForUnit =
+        enginePlugin.dartErrorsForUnit;
     int unitLength = errorsForUnit.length;
     for (int i = 0; i < unitLength; i++) {
-      ResultDescriptor result = errorsForUnit[i];
+      ListResultDescriptor<AnalysisError> result = errorsForUnit[i];
       String inputName = result.name + '_input';
       inputs[inputName] =
           CONTAINING_LIBRARIES.of(source).toMap((Source library) {
diff --git a/pkg/analyzer/lib/src/task/inputs.dart b/pkg/analyzer/lib/src/task/inputs.dart
index 678bc1f..66650c3 100644
--- a/pkg/analyzer/lib/src/task/inputs.dart
+++ b/pkg/analyzer/lib/src/task/inputs.dart
@@ -2,8 +2,6 @@
 // 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 analyzer.src.task.inputs;
-
 import 'dart:collection';
 
 import 'package:analyzer/task/model.dart';
@@ -109,7 +107,7 @@
   }
 
   MapTaskInput<AnalysisTarget, V> toMapOf<V>(ResultDescriptor<V> valueResult) {
-    return (this as ListTaskInputImpl<AnalysisTarget>).toMap(valueResult.of);
+    return (this as ListTaskInputImpl<AnalysisTarget>).toMap<V>(valueResult.of);
   }
 }
 
@@ -651,6 +649,10 @@
       throw new StateError(
           'Cannot set the result value when there is no current result');
     }
+    if (value is! V) {
+      throw new StateError(
+          'Cannot build $input: computed ${value.runtimeType}, needed $V');
+    }
     _resultValue = value as V;
     _resultSet = true;
   }
diff --git a/pkg/analyzer/lib/src/util/yaml.dart b/pkg/analyzer/lib/src/util/yaml.dart
index 06308c7..89b6156 100644
--- a/pkg/analyzer/lib/src/util/yaml.dart
+++ b/pkg/analyzer/lib/src/util/yaml.dart
@@ -2,8 +2,6 @@
 // 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 analyzer.src.util.yaml;
-
 import 'dart:collection';
 
 /// If all of the elements of [list] are strings, return a list of strings
@@ -55,13 +53,16 @@
   }
 
   /// Merge lists, avoiding duplicates.
-  List mergeList(List l1, List l2) =>
-      new List()..addAll(l1)..addAll(l2.where((item) => !l1.contains(item)));
+  List<E> mergeList<E>(List<E> l1, List<E> l2) =>
+      new List<E>()..addAll(l1)..addAll(l2.where((item) => !l1.contains(item)));
 
   /// Merge maps (recursively).
-  Map mergeMap(Map m1, Map m2) {
-    Map merged = new HashMap()..addAll(m1);
+  Map<K, V> mergeMap<K, V>(Map<K, V> m1, Map<K, V> m2) {
+    Map<K, V> merged = new HashMap<K, V>()..addAll(m1);
     m2.forEach((k, v) {
+      // TODO(brianwilkerson) This fails when merging two Map<String, YamlNode>
+      // objects and the result of `merge` is a HashMap (because the YamlNodes
+      // were YamlMaps.
       merged[k] = merge(merged[k], v);
     });
     return merged;
diff --git a/pkg/analyzer/lib/task/model.dart b/pkg/analyzer/lib/task/model.dart
index b522c98..0ba6aec 100644
--- a/pkg/analyzer/lib/task/model.dart
+++ b/pkg/analyzer/lib/task/model.dart
@@ -2,8 +2,6 @@
 // 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 analyzer.task.model;
-
 import 'dart:collection';
 import 'dart:developer';
 
@@ -180,6 +178,10 @@
     if (inputs == null || !inputs.containsKey(name)) {
       throw new AnalysisException("Could not $description: missing $name");
     }
+    if (inputs[name] is! E) {
+      throw new AnalysisException(
+          "Could not $description: $name is a ${inputs[name].runtimeType} rather than a $E");
+    }
     return inputs[name] as E;
   }
 
diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml
index 4d2f038..48ec171 100644
--- a/pkg/analyzer/pubspec.yaml
+++ b/pkg/analyzer/pubspec.yaml
@@ -26,5 +26,4 @@
   cli_util: ^0.1.0
 dev_dependencies:
   test_reflective_loader: ^0.1.0
-  mockito: ^2.0.2
   test: ^0.12.0
diff --git a/pkg/analyzer/test/generated/all_the_rest_test.dart b/pkg/analyzer/test/generated/all_the_rest_test.dart
index 23eb3b0..a14fde5 100644
--- a/pkg/analyzer/test/generated/all_the_rest_test.dart
+++ b/pkg/analyzer/test/generated/all_the_rest_test.dart
@@ -2,8 +2,6 @@
 // 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 analyzer.test.generated.all_the_rest_test;
-
 import 'dart:async';
 
 import 'package:analyzer/dart/ast/ast.dart';
@@ -33,7 +31,6 @@
 import 'package:analyzer/src/generated/testing/test_type_provider.dart';
 import 'package:analyzer/src/generated/testing/token_factory.dart';
 import 'package:analyzer/src/generated/utilities_dart.dart';
-import 'package:mockito/mockito.dart' show Mock, when;
 import 'package:path/path.dart' as path;
 import 'package:source_span/source_span.dart';
 import 'package:test/test.dart';
@@ -151,17 +148,17 @@
   }
 
   void test_restoreAbsolute_library() {
-    Source source = new _SourceMock();
+    _SourceMock source = new _SourceMock();
     Uri fileUri = resourceProvider.pathContext.toUri(coreCorePath);
-    when(source.uri).thenReturn(fileUri);
+    source.uri = fileUri;
     Uri dartUri = resolver.restoreAbsolute(source);
     expect(dartUri.toString(), 'dart:core');
   }
 
   void test_restoreAbsolute_part() {
-    Source source = new _SourceMock();
+    _SourceMock source = new _SourceMock();
     Uri fileUri = resourceProvider.pathContext.toUri(coreIntPath);
-    when(source.uri).thenReturn(fileUri);
+    source.uri = fileUri;
     Uri dartUri = resolver.restoreAbsolute(source);
     expect(dartUri.toString(), 'dart:core/int.dart');
   }
@@ -2089,4 +2086,12 @@
   }
 }
 
-class _SourceMock extends Mock implements Source {}
+class _SourceMock implements Source {
+  @override
+  Uri uri;
+
+  @override
+  noSuchMethod(Invocation invocation) {
+    throw new StateError('Unexpected invocation of ${invocation.memberName}');
+  }
+}
diff --git a/pkg/analyzer/test/generated/analysis_context_factory.dart b/pkg/analyzer/test/generated/analysis_context_factory.dart
index d608785..5f02ed3 100644
--- a/pkg/analyzer/test/generated/analysis_context_factory.dart
+++ b/pkg/analyzer/test/generated/analysis_context_factory.dart
@@ -2,8 +2,6 @@
 // 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 analyzer.test.generated.analysis_context_factory;
-
 import 'dart:collection';
 
 import 'package:analyzer/dart/ast/ast.dart';
@@ -303,6 +301,7 @@
     ];
     canvasElement.fields = canvasElement.accessors
         .map((PropertyAccessorElement accessor) => accessor.variable)
+        .cast<FieldElement>()
         .toList();
     ClassElementImpl documentElement =
         ElementFactory.classElement("Document", elementType);
diff --git a/pkg/analyzer/test/generated/bazel_test.dart b/pkg/analyzer/test/generated/bazel_test.dart
index c5a3367..290f45f 100644
--- a/pkg/analyzer/test/generated/bazel_test.dart
+++ b/pkg/analyzer/test/generated/bazel_test.dart
@@ -2,12 +2,9 @@
 // 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 analyzer.test.generated.bazel_test;
-
 import 'package:analyzer/file_system/memory_file_system.dart';
 import 'package:analyzer/src/generated/bazel.dart';
 import 'package:analyzer/src/generated/source.dart';
-import 'package:mockito/mockito.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -669,7 +666,14 @@
   String _p(String path) => provider.convertPath(path);
 }
 
-class _MockSource extends Mock implements Source {
+class _MockSource implements Source {
+  @override
   final String fullName;
+
   _MockSource(this.fullName);
+
+  @override
+  noSuchMethod(Invocation invocation) {
+    throw new StateError('Unexpected invocation of ${invocation.memberName}');
+  }
 }
diff --git a/pkg/analyzer/test/generated/parser_fasta_listener.dart b/pkg/analyzer/test/generated/parser_fasta_listener.dart
index 349d2ad..cf19032 100644
--- a/pkg/analyzer/test/generated/parser_fasta_listener.dart
+++ b/pkg/analyzer/test/generated/parser_fasta_listener.dart
@@ -206,8 +206,9 @@
   }
 
   @override
-  void beginFactoryMethod(Token lastConsumed) {
-    super.beginFactoryMethod(lastConsumed);
+  void beginFactoryMethod(
+      Token lastConsumed, Token externalToken, Token constToken) {
+    super.beginFactoryMethod(lastConsumed, externalToken, constToken);
     begin('FactoryMethod');
   }
 
@@ -480,8 +481,8 @@
   }
 
   @override
-  void beginTopLevelMethod(Token lastConsumed) {
-    super.beginTopLevelMethod(lastConsumed);
+  void beginTopLevelMethod(Token lastConsumed, Token externalToken) {
+    super.beginTopLevelMethod(lastConsumed, externalToken);
     begin('TopLevelMethod');
   }
 
diff --git a/pkg/analyzer/test/generated/strong_mode_test.dart b/pkg/analyzer/test/generated/strong_mode_test.dart
index 775f942..0194fd9 100644
--- a/pkg/analyzer/test/generated/strong_mode_test.dart
+++ b/pkg/analyzer/test/generated/strong_mode_test.dart
@@ -3899,6 +3899,15 @@
     expectStaticInvokeType('m();', '() → T');
   }
 
+  test_issue32396() async {
+    await resolveTestUnit(r'''
+class C<E> {
+  static T g<T>(T e) => null;
+  static final h = g;
+}
+''');
+  }
+
   test_notInstantiatedBound_direct_class_class() async {
     String code = r'''
 class A<T extends int> {}
diff --git a/pkg/analyzer/test/src/context/cache_test.dart b/pkg/analyzer/test/src/context/cache_test.dart
index 06f3fd7..235e254 100644
--- a/pkg/analyzer/test/src/context/cache_test.dart
+++ b/pkg/analyzer/test/src/context/cache_test.dart
@@ -2,8 +2,6 @@
 // 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 analyzer.test.src.context.cache_test;
-
 import 'package:analyzer/exception/exception.dart';
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/file_system/memory_file_system.dart';
@@ -16,7 +14,6 @@
 import 'package:analyzer/src/generated/utilities_collection.dart';
 import 'package:analyzer/src/task/model.dart';
 import 'package:analyzer/task/model.dart';
-import 'package:mockito/mockito.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -39,14 +36,14 @@
 }
 
 class AbstractCacheTest {
-  InternalAnalysisContext context;
+  _InternalAnalysisContextMock context;
   AnalysisCache cache;
 
   void setUp() {
     context = new _InternalAnalysisContextMock();
-    when(context.prioritySources).thenReturn([]);
+    context.prioritySources = [];
     cache = createCache(context: context);
-    when(context.analysisCache).thenReturn(cache);
+    context.analysisCache = cache;
   }
 }
 
@@ -812,7 +809,7 @@
     expect(entry2.getState(descriptor2), CacheState.VALID);
 
     // Make source1 priority, so result2 is flushed instead.
-    when(context.prioritySources).thenReturn([source1]);
+    context.prioritySources = <Source>[source1];
     entry3.setValue(descriptor3, 3, TargetedResult.EMPTY_LIST);
     expect(entry1.getState(descriptor1), CacheState.VALID);
     expect(entry2.getState(descriptor2), CacheState.FLUSHED);
@@ -1250,11 +1247,11 @@
   }
 
   test_dispose() {
-    InternalAnalysisContext context = new _InternalAnalysisContextMock();
+    _InternalAnalysisContextMock context = new _InternalAnalysisContextMock();
     CachePartition partition1 = new UniversalCachePartition(context);
     CachePartition partition2 = new UniversalCachePartition(context);
     AnalysisCache cache = new AnalysisCache([partition1, partition2]);
-    when(context.analysisCache).thenReturn(cache);
+    context.analysisCache = cache;
     // configure
     // prepare entries
     ResultDescriptor<int> descriptor1 =
@@ -1283,10 +1280,20 @@
   }
 }
 
-class _InternalAnalysisContextMock extends Mock
-    implements InternalAnalysisContext {
+class _InternalAnalysisContextMock implements InternalAnalysisContext {
   @override
   final AnalysisOptions analysisOptions = new AnalysisOptionsImpl();
+
+  @override
+  AnalysisCache analysisCache;
+
+  @override
+  List<Source> prioritySources = <Source>[];
+
+  @override
+  noSuchMethod(Invocation invocation) {
+    throw new StateError('Unexpected invocation of ${invocation.memberName}');
+  }
 }
 
 /**
diff --git a/pkg/analyzer/test/src/dart/analysis/base.dart b/pkg/analyzer/test/src/dart/analysis/base.dart
index 4b98b46..cb6b92c 100644
--- a/pkg/analyzer/test/src/dart/analysis/base.dart
+++ b/pkg/analyzer/test/src/dart/analysis/base.dart
@@ -16,7 +16,6 @@
 import 'package:analyzer/src/summary/package_bundle_reader.dart';
 import 'package:front_end/src/api_prototype/byte_store.dart';
 import 'package:front_end/src/base/performance_logger.dart';
-import 'package:mockito/mockito.dart';
 import 'package:test/test.dart';
 
 import '../../context/mock_sdk.dart';
@@ -54,7 +53,8 @@
   final StringBuffer logBuffer = new StringBuffer();
   PerformanceLog logger;
 
-  final UriResolver generatedUriResolver = new _GeneratedUriResolverMock();
+  final _GeneratedUriResolverMock generatedUriResolver =
+      new _GeneratedUriResolverMock();
   AnalysisDriverScheduler scheduler;
   AnalysisDriver driver;
   final List<AnalysisStatus> allStatuses = <AnalysisStatus>[];
@@ -65,13 +65,13 @@
   String testFile;
   String testCode;
 
-  bool get disableChangesAndCacheAllResults => false;
-
   /**
    * Whether to enable the Dart 2.0 Common Front End.
    */
   bool useCFE = false;
 
+  bool get disableChangesAndCacheAllResults => false;
+
   void addTestFile(String content, {bool priority: false}) {
     testCode = content;
     provider.newFile(testFile, content);
@@ -169,4 +169,29 @@
   }
 }
 
-class _GeneratedUriResolverMock extends Mock implements UriResolver {}
+class _GeneratedUriResolverMock implements UriResolver {
+  Source Function(Uri, Uri) resolveAbsoluteFunction;
+
+  Uri Function(Source) restoreAbsoluteFunction;
+
+  @override
+  noSuchMethod(Invocation invocation) {
+    throw new StateError('Unexpected invocation of ${invocation.memberName}');
+  }
+
+  @override
+  Source resolveAbsolute(Uri uri, [Uri actualUri]) {
+    if (resolveAbsoluteFunction != null) {
+      return resolveAbsoluteFunction(uri, actualUri);
+    }
+    return null;
+  }
+
+  @override
+  Uri restoreAbsolute(Source source) {
+    if (restoreAbsoluteFunction != null) {
+      return restoreAbsoluteFunction(source);
+    }
+    return null;
+  }
+}
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index bb2cba2..32df76a 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -30,7 +30,6 @@
 import 'package:analyzer/src/summary/package_bundle_reader.dart';
 import 'package:front_end/src/api_prototype/byte_store.dart';
 import 'package:front_end/src/base/performance_logger.dart';
-import 'package:mockito/mockito.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -6726,6 +6725,26 @@
     expect(x.constantValue.toIntValue(), 1);
   }
 
+  test_currentSession() async {
+    var a = _p('/a.dart');
+
+    provider.newFile(a, 'var V = 1;');
+    await driver.getResult(a);
+
+    var session1 = driver.currentSession;
+    expect(session1, isNotNull);
+
+    provider.updateFile(a, 'var V = 2;');
+    driver.changeFile(a);
+    await driver.getResult(a);
+
+    var session2 = driver.currentSession;
+    expect(session2, isNotNull);
+
+    // We get a new session.
+    expect(session2, isNot(session1));
+  }
+
   test_errors_uriDoesNotExist_export() async {
     addTestFile(r'''
 export 'foo.dart';
@@ -6869,22 +6888,18 @@
 bbb() {}
 ''');
 
-    Source generatedSource = new _SourceMock();
-    when(generatedSource.uri).thenReturn(uri);
-    when(generatedSource.fullName).thenReturn(generatedPath);
+    Source generatedSource = new _SourceMock(generatedPath, uri);
 
-    when(generatedUriResolver.resolveAbsolute(uri, uri))
-        .thenReturn(generatedSource);
-    when(generatedUriResolver.restoreAbsolute(any))
-        .thenAnswer((Invocation invocation) {
-      Source source = invocation.positionalArguments[0];
+    generatedUriResolver.resolveAbsoluteFunction =
+        (uri, actualUri) => generatedSource;
+    generatedUriResolver.restoreAbsoluteFunction = (Source source) {
       String path = source.fullName;
       if (path == templatePath || path == generatedPath) {
         return uri;
       } else {
         return null;
       }
-    });
+    };
 
     driver.addFile(templatePath);
 
@@ -8797,4 +8812,17 @@
   String _p(String path) => provider.convertPath(path);
 }
 
-class _SourceMock extends Mock implements Source {}
+class _SourceMock implements Source {
+  @override
+  final String fullName;
+
+  @override
+  final Uri uri;
+
+  _SourceMock(this.fullName, this.uri);
+
+  @override
+  noSuchMethod(Invocation invocation) {
+    throw new StateError('Unexpected invocation of ${invocation.memberName}');
+  }
+}
diff --git a/pkg/analyzer/test/src/dart/analysis/file_state_test.dart b/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
index 11815d5..3cae769 100644
--- a/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/file_state_test.dart
@@ -17,7 +17,6 @@
 import 'package:crypto/crypto.dart';
 import 'package:front_end/src/api_prototype/byte_store.dart';
 import 'package:front_end/src/base/performance_logger.dart';
-import 'package:mockito/mockito.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -38,7 +37,8 @@
   final FileContentOverlay contentOverlay = new FileContentOverlay();
 
   final StringBuffer logBuffer = new StringBuffer();
-  final UriResolver generatedUriResolver = new _GeneratedUriResolverMock();
+  final _GeneratedUriResolverMock generatedUriResolver =
+      new _GeneratedUriResolverMock();
   SourceFactory sourceFactory;
   PerformanceLog logger;
 
@@ -493,12 +493,10 @@
     String templatePath = _p('/aaa/lib/foo.dart');
     String generatedPath = _p('/generated/aaa/lib/foo.dart');
 
-    Source generatedSource = new _SourceMock();
-    when(generatedSource.fullName).thenReturn(generatedPath);
-    when(generatedSource.uri).thenReturn(uri);
+    Source generatedSource = new _SourceMock(generatedPath, uri);
 
-    when(generatedUriResolver.resolveAbsolute(uri, uri))
-        .thenReturn(generatedSource);
+    generatedUriResolver.resolveAbsoluteFunction =
+        (uri, actualUri) => generatedSource;
 
     expect(fileSystemState.hasUri(templatePath), isFalse);
     expect(fileSystemState.hasUri(generatedPath), isTrue);
@@ -792,6 +790,44 @@
   }
 }
 
-class _GeneratedUriResolverMock extends Mock implements UriResolver {}
+class _GeneratedUriResolverMock implements UriResolver {
+  Source Function(Uri, Uri) resolveAbsoluteFunction;
 
-class _SourceMock extends Mock implements Source {}
+  Uri Function(Source) restoreAbsoluteFunction;
+
+  @override
+  noSuchMethod(Invocation invocation) {
+    throw new StateError('Unexpected invocation of ${invocation.memberName}');
+  }
+
+  @override
+  Source resolveAbsolute(Uri uri, [Uri actualUri]) {
+    if (resolveAbsoluteFunction != null) {
+      return resolveAbsoluteFunction(uri, actualUri);
+    }
+    return null;
+  }
+
+  @override
+  Uri restoreAbsolute(Source source) {
+    if (restoreAbsoluteFunction != null) {
+      return restoreAbsoluteFunction(source);
+    }
+    return null;
+  }
+}
+
+class _SourceMock implements Source {
+  @override
+  final String fullName;
+
+  @override
+  final Uri uri;
+
+  _SourceMock(this.fullName, this.uri);
+
+  @override
+  noSuchMethod(Invocation invocation) {
+    throw new StateError('Unexpected invocation of ${invocation.memberName}');
+  }
+}
diff --git a/pkg/analyzer/test/src/dart/analysis/session_test.dart b/pkg/analyzer/test/src/dart/analysis/session_test.dart
index fff33da..f49208d 100644
--- a/pkg/analyzer/test/src/dart/analysis/session_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/session_test.dart
@@ -42,9 +42,16 @@
 
   test_getLibraryByUri() async {
     String uri = 'uri';
-    LibraryElement element = new LibraryElementImpl(null, null, null, null);
-    driver.libraryMap[uri] = element;
-    expect(await session.getLibraryByUri(uri), element);
+
+    var source = new _SourceMock(Uri.parse(uri));
+    var unit = new CompilationUnitElementImpl('')
+      ..librarySource = source
+      ..source = source;
+    var library = new LibraryElementImpl(null, null, null, null)
+      ..definingCompilationUnit = unit;
+
+    driver.libraryMap[uri] = library;
+    expect(await session.getLibraryByUri(uri), library);
   }
 
   test_getParsedAst() async {
@@ -204,3 +211,15 @@
     return parseResult;
   }
 }
+
+class _SourceMock implements Source {
+  @override
+  final Uri uri;
+
+  _SourceMock(this.uri);
+
+  @override
+  noSuchMethod(Invocation invocation) {
+    throw new StateError('Unexpected invocation of ${invocation.memberName}');
+  }
+}
diff --git a/pkg/analyzer/test/src/summary/package_bundle_reader_test.dart b/pkg/analyzer/test/src/summary/package_bundle_reader_test.dart
index 73266b9..db16be7 100644
--- a/pkg/analyzer/test/src/summary/package_bundle_reader_test.dart
+++ b/pkg/analyzer/test/src/summary/package_bundle_reader_test.dart
@@ -10,7 +10,6 @@
 import 'package:analyzer/src/task/dart.dart';
 import 'package:analyzer/task/dart.dart';
 import 'package:analyzer/task/general.dart';
-import 'package:mockito/mockito.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -26,15 +25,15 @@
     const _ConflictingSummaryException();
 
 UnlinkedPublicNamespace _namespaceWithParts(List<String> parts) {
-  UnlinkedPublicNamespace namespace = new _UnlinkedPublicNamespaceMock();
-  when(namespace.parts).thenReturn(parts);
+  _UnlinkedPublicNamespaceMock namespace = new _UnlinkedPublicNamespaceMock();
+  namespace.parts = parts;
   return namespace;
 }
 
 @reflectiveTest
 class ResynthesizerResultProviderTest {
-  SourceFactory sourceFactory = new _SourceFactoryMock();
-  InternalAnalysisContext context = new _InternalAnalysisContextMock();
+  _SourceFactoryMock sourceFactory = new _SourceFactoryMock();
+  _InternalAnalysisContextMock context = new _InternalAnalysisContextMock();
   UniversalCachePartition cachePartition;
 
   Source source1 = new _SourceMock('package:p1/u1.dart', '/p1/lib/u1.dart');
@@ -44,10 +43,10 @@
   CacheEntry entry2;
   CacheEntry entry3;
 
-  PackageBundle bundle = new _PackageBundleMock();
-  UnlinkedUnit unlinkedUnit1 = new _UnlinkedUnitMock();
-  UnlinkedUnit unlinkedUnit2 = new _UnlinkedUnitMock();
-  LinkedLibrary linkedLibrary = new _LinkedLibraryMock();
+  _PackageBundleMock bundle = new _PackageBundleMock();
+  _UnlinkedUnitMock unlinkedUnit1 = new _UnlinkedUnitMock();
+  _UnlinkedUnitMock unlinkedUnit2 = new _UnlinkedUnitMock();
+  _LinkedLibraryMock linkedLibrary = new _LinkedLibraryMock();
 
   SummaryDataStore dataStore = new SummaryDataStore(<String>[]);
   _TestResynthesizerResultProvider provider;
@@ -61,27 +60,26 @@
     cachePartition.put(entry2);
     cachePartition.put(entry3);
 
-    when(sourceFactory.resolveUri(any, 'package:p1/u1.dart'))
-        .thenReturn(source1);
-    when(sourceFactory.resolveUri(any, 'package:p1/u2.dart'))
-        .thenReturn(source2);
-    when(context.sourceFactory).thenReturn(sourceFactory);
+    sourceFactory.resolvedUriMap['package:p1/u1.dart'] = source1;
+    sourceFactory.resolvedUriMap['package:p1/u2.dart'] = source2;
+    context.sourceFactory = sourceFactory;
 
-    when(bundle.unlinkedUnitUris)
-        .thenReturn(<String>['package:p1/u1.dart', 'package:p1/u2.dart']);
-    when(bundle.unlinkedUnits)
-        .thenReturn(<UnlinkedUnit>[unlinkedUnit1, unlinkedUnit2]);
-    when(bundle.linkedLibraryUris).thenReturn(<String>['package:p1/u1.dart']);
-    when(bundle.linkedLibraries).thenReturn(<LinkedLibrary>[linkedLibrary]);
+    bundle.unlinkedUnitUris = <String>[
+      'package:p1/u1.dart',
+      'package:p1/u2.dart'
+    ];
+    bundle.unlinkedUnits = <UnlinkedUnit>[unlinkedUnit1, unlinkedUnit2];
+    bundle.linkedLibraryUris = <String>['package:p1/u1.dart'];
+    bundle.linkedLibraries = <LinkedLibrary>[linkedLibrary];
     dataStore.addBundle('/p1.ds', bundle);
 
-    when(unlinkedUnit1.isPartOf).thenReturn(false);
-    when(unlinkedUnit2.isPartOf).thenReturn(true);
+    unlinkedUnit1.isPartOf = false;
+    unlinkedUnit2.isPartOf = true;
 
     var namespace1 = _namespaceWithParts(['package:p1/u2.dart']);
     var namespace2 = _namespaceWithParts([]);
-    when(unlinkedUnit1.publicNamespace).thenReturn(namespace1);
-    when(unlinkedUnit2.publicNamespace).thenReturn(namespace2);
+    unlinkedUnit1.publicNamespace = namespace1;
+    unlinkedUnit2.publicNamespace = namespace2;
 
     provider = new _TestResynthesizerResultProvider(context, dataStore);
     provider.sourcesWithResults.add(source1);
@@ -101,13 +99,13 @@
   }
 
   test_compute_LINE_INFO_emptyLineStarts() {
-    when(unlinkedUnit1.lineStarts).thenReturn(<int>[]);
+    unlinkedUnit1.lineStarts = <int>[];
     bool success = provider.compute(entry1, LINE_INFO);
     expect(success, isFalse);
   }
 
   test_compute_LINE_INFO_hasLineStarts() {
-    when(unlinkedUnit1.lineStarts).thenReturn(<int>[10, 20, 30]);
+    unlinkedUnit1.lineStarts = <int>[10, 20, 30];
     bool success = provider.compute(entry1, LINE_INFO);
     expect(success, isTrue);
     expect(entry1.getValue(LINE_INFO).lineStarts, <int>[10, 20, 30]);
@@ -132,7 +130,7 @@
   }
 
   test_compute_SOURCE_KIND_librarySource_isPartOf() {
-    when(unlinkedUnit1.isPartOf).thenReturn(true);
+    unlinkedUnit1.isPartOf = true;
     bool success = provider.compute(entry1, SOURCE_KIND);
     expect(success, isTrue);
     expect(entry1.getValue(SOURCE_KIND), SourceKind.PART);
@@ -156,13 +154,13 @@
   SummaryDataStore dataStore =
       new SummaryDataStore(<String>[], disallowOverlappingSummaries: true);
 
-  PackageBundle bundle1 = new _PackageBundleMock();
-  PackageBundle bundle2 = new _PackageBundleMock();
-  UnlinkedUnit unlinkedUnit11 = new _UnlinkedUnitMock();
-  UnlinkedUnit unlinkedUnit12 = new _UnlinkedUnitMock();
-  UnlinkedUnit unlinkedUnit21 = new _UnlinkedUnitMock();
-  LinkedLibrary linkedLibrary1 = new _LinkedLibraryMock();
-  LinkedLibrary linkedLibrary2 = new _LinkedLibraryMock();
+  _PackageBundleMock bundle1 = new _PackageBundleMock();
+  _PackageBundleMock bundle2 = new _PackageBundleMock();
+  _UnlinkedUnitMock unlinkedUnit11 = new _UnlinkedUnitMock();
+  _UnlinkedUnitMock unlinkedUnit12 = new _UnlinkedUnitMock();
+  _UnlinkedUnitMock unlinkedUnit21 = new _UnlinkedUnitMock();
+  _LinkedLibraryMock linkedLibrary1 = new _LinkedLibraryMock();
+  _LinkedLibraryMock linkedLibrary2 = new _LinkedLibraryMock();
 
   void setUp() {
     _setupDataStore(dataStore);
@@ -189,36 +187,38 @@
   }
 
   test_addBundle_dartUris() {
-    PackageBundle bundle = new _PackageBundleMock();
-    when(bundle.unlinkedUnitUris).thenReturn(<String>['dart:core']);
-    when(bundle.unlinkedUnits).thenReturn(<UnlinkedUnit>[unlinkedUnit11]);
-    when(bundle.linkedLibraryUris).thenReturn(<String>['dart:core']);
-    when(bundle.linkedLibraries).thenReturn(<LinkedLibrary>[linkedLibrary1]);
-    when(bundle.apiSignature).thenReturn('signature');
+    _PackageBundleMock bundle = new _PackageBundleMock();
+    bundle.unlinkedUnitUris = <String>['dart:core'];
+    bundle.unlinkedUnits = <UnlinkedUnit>[unlinkedUnit11];
+    bundle.linkedLibraryUris = <String>['dart:core'];
+    bundle.linkedLibraries = <LinkedLibrary>[linkedLibrary1];
+    bundle.apiSignature = 'signature';
     dataStore.addBundle('/p3.ds', bundle);
   }
 
   test_addBundle_fileUris() {
-    PackageBundle bundle = new _PackageBundleMock();
-    when(bundle.unlinkedUnitUris).thenReturn(<String>['file:/foo.dart']);
-    when(bundle.unlinkedUnits).thenReturn(<UnlinkedUnit>[unlinkedUnit11]);
-    when(bundle.linkedLibraryUris).thenReturn(<String>['file:/foo.dart']);
-    when(bundle.linkedLibraries).thenReturn(<LinkedLibrary>[linkedLibrary1]);
-    when(bundle.apiSignature).thenReturn('signature');
+    _PackageBundleMock bundle = new _PackageBundleMock();
+    bundle.unlinkedUnitUris = <String>['file:/foo.dart'];
+    bundle.unlinkedUnits = <UnlinkedUnit>[unlinkedUnit11];
+    bundle.linkedLibraryUris = <String>['file:/foo.dart'];
+    bundle.linkedLibraries = <LinkedLibrary>[linkedLibrary1];
+    bundle.apiSignature = 'signature';
     dataStore.addBundle('/p3.ds', bundle);
   }
 
   test_addBundle_multiProject() {
-    PackageBundle bundle = new _PackageBundleMock();
-    when(bundle.unlinkedUnitUris)
-        .thenReturn(<String>['package:p2/u1.dart', 'package:p1/u1.dart']);
-    when(bundle.unlinkedUnits)
-        .thenReturn(<UnlinkedUnit>[unlinkedUnit21, unlinkedUnit11]);
-    when(bundle.linkedLibraryUris)
-        .thenReturn(<String>['package:p2/u1.dart', 'package:p1/u1.dart']);
-    when(bundle.linkedLibraries)
-        .thenReturn(<LinkedLibrary>[linkedLibrary2, linkedLibrary1]);
-    when(bundle.apiSignature).thenReturn('signature');
+    _PackageBundleMock bundle = new _PackageBundleMock();
+    bundle.unlinkedUnitUris = <String>[
+      'package:p2/u1.dart',
+      'package:p1/u1.dart'
+    ];
+    bundle.unlinkedUnits = <UnlinkedUnit>[unlinkedUnit21, unlinkedUnit11];
+    bundle.linkedLibraryUris = <String>[
+      'package:p2/u1.dart',
+      'package:p1/u1.dart'
+    ];
+    bundle.linkedLibraries = <LinkedLibrary>[linkedLibrary2, linkedLibrary1];
+    bundle.apiSignature = 'signature';
     // p3 conflicts (overlaps) with existing summaries.
     expect(() => dataStore.addBundle('/p3.ds', bundle),
         throwsA(isConflictingSummaryException));
@@ -229,16 +229,18 @@
         new SummaryDataStore(<String>[], disallowOverlappingSummaries: false);
     _setupDataStore(dataStore2);
 
-    PackageBundle bundle = new _PackageBundleMock();
-    when(bundle.unlinkedUnitUris)
-        .thenReturn(<String>['package:p2/u1.dart', 'package:p1/u1.dart']);
-    when(bundle.unlinkedUnits)
-        .thenReturn(<UnlinkedUnit>[unlinkedUnit21, unlinkedUnit11]);
-    when(bundle.linkedLibraryUris)
-        .thenReturn(<String>['package:p2/u1.dart', 'package:p1/u1.dart']);
-    when(bundle.linkedLibraries)
-        .thenReturn(<LinkedLibrary>[linkedLibrary2, linkedLibrary1]);
-    when(bundle.apiSignature).thenReturn('signature');
+    _PackageBundleMock bundle = new _PackageBundleMock();
+    bundle.unlinkedUnitUris = <String>[
+      'package:p2/u1.dart',
+      'package:p1/u1.dart'
+    ];
+    bundle.unlinkedUnits = <UnlinkedUnit>[unlinkedUnit21, unlinkedUnit11];
+    bundle.linkedLibraryUris = <String>[
+      'package:p2/u1.dart',
+      'package:p1/u1.dart'
+    ];
+    bundle.linkedLibraries = <LinkedLibrary>[linkedLibrary2, linkedLibrary1];
+    bundle.apiSignature = 'signature';
     // p3 conflicts (overlaps) with existing summaries, but now allowed.
     dataStore2.addBundle('/p3.ds', bundle);
   }
@@ -265,23 +267,24 @@
     var namespace1 = _namespaceWithParts(['package:p1/u2.dart']);
     var namespace2 = _namespaceWithParts([]);
     // bundle1
-    when(unlinkedUnit11.publicNamespace).thenReturn(namespace1);
-    when(unlinkedUnit12.publicNamespace).thenReturn(namespace2);
-    when(bundle1.unlinkedUnitUris)
-        .thenReturn(<String>['package:p1/u1.dart', 'package:p1/u2.dart']);
-    when(bundle1.unlinkedUnits)
-        .thenReturn(<UnlinkedUnit>[unlinkedUnit11, unlinkedUnit12]);
-    when(bundle1.linkedLibraryUris).thenReturn(<String>['package:p1/u1.dart']);
-    when(bundle1.linkedLibraries).thenReturn(<LinkedLibrary>[linkedLibrary1]);
-    when(bundle1.apiSignature).thenReturn('signature1');
+    unlinkedUnit11.publicNamespace = namespace1;
+    unlinkedUnit12.publicNamespace = namespace2;
+    bundle1.unlinkedUnitUris = <String>[
+      'package:p1/u1.dart',
+      'package:p1/u2.dart'
+    ];
+    bundle1.unlinkedUnits = <UnlinkedUnit>[unlinkedUnit11, unlinkedUnit12];
+    bundle1.linkedLibraryUris = <String>['package:p1/u1.dart'];
+    bundle1.linkedLibraries = <LinkedLibrary>[linkedLibrary1];
+    bundle1.apiSignature = 'signature1';
     store.addBundle('/p1.ds', bundle1);
     // bundle2
-    when(unlinkedUnit21.publicNamespace).thenReturn(namespace2);
-    when(bundle2.unlinkedUnitUris).thenReturn(<String>['package:p2/u1.dart']);
-    when(bundle2.unlinkedUnits).thenReturn(<UnlinkedUnit>[unlinkedUnit21]);
-    when(bundle2.linkedLibraryUris).thenReturn(<String>['package:p2/u1.dart']);
-    when(bundle2.linkedLibraries).thenReturn(<LinkedLibrary>[linkedLibrary2]);
-    when(bundle2.apiSignature).thenReturn('signature2');
+    unlinkedUnit21.publicNamespace = namespace2;
+    bundle2.unlinkedUnitUris = <String>['package:p2/u1.dart'];
+    bundle2.unlinkedUnits = <UnlinkedUnit>[unlinkedUnit21];
+    bundle2.linkedLibraryUris = <String>['package:p2/u1.dart'];
+    bundle2.linkedLibraries = <LinkedLibrary>[linkedLibrary2];
+    bundle2.apiSignature = 'signature2';
     store.addBundle('/p2.ds', bundle2);
   }
 }
@@ -291,17 +294,64 @@
   bool matches(item, Map matchState) => item is ConflictingSummaryException;
 }
 
-class _InternalAnalysisContextMock extends Mock
-    implements InternalAnalysisContext {}
+class _InternalAnalysisContextMock implements InternalAnalysisContext {
+  @override
+  SourceFactory sourceFactory;
 
-class _LinkedLibraryMock extends Mock implements LinkedLibrary {}
+  @override
+  noSuchMethod(Invocation invocation) {
+    throw new StateError('Unexpected invocation of ${invocation.memberName}');
+  }
+}
 
-class _PackageBundleMock extends Mock implements PackageBundle {}
+class _LinkedLibraryMock implements LinkedLibrary {
+  @override
+  noSuchMethod(Invocation invocation) {
+    throw new StateError('Unexpected invocation of ${invocation.memberName}');
+  }
+}
 
-class _SourceFactoryMock extends Mock implements SourceFactory {}
+class _PackageBundleMock implements PackageBundle {
+  @override
+  String apiSignature;
+
+  @override
+  List<LinkedLibrary> linkedLibraries;
+
+  @override
+  List<String> linkedLibraryUris;
+
+  @override
+  List<UnlinkedUnit> unlinkedUnits;
+
+  @override
+  List<String> unlinkedUnitUris;
+
+  @override
+  noSuchMethod(Invocation invocation) {
+    throw new StateError('Unexpected invocation of ${invocation.memberName}');
+  }
+}
+
+class _SourceFactoryMock implements SourceFactory {
+  Map<String, Source> resolvedUriMap = <String, Source>{};
+
+  @override
+  noSuchMethod(Invocation invocation) {
+    throw new StateError('Unexpected invocation of ${invocation.memberName}');
+  }
+
+  @override
+  Source resolveUri(Source containingSource, String containedUri) {
+    return resolvedUriMap[containedUri];
+  }
+}
 
 class _SourceMock implements Source {
+  @override
   final Uri uri;
+
+  @override
   final String fullName;
 
   _SourceMock(String uriStr, this.fullName) : uri = Uri.parse(uriStr);
@@ -331,7 +381,28 @@
   }
 }
 
-class _UnlinkedPublicNamespaceMock extends Mock
-    implements UnlinkedPublicNamespace {}
+class _UnlinkedPublicNamespaceMock implements UnlinkedPublicNamespace {
+  @override
+  List<String> parts;
 
-class _UnlinkedUnitMock extends Mock implements UnlinkedUnit {}
+  @override
+  noSuchMethod(Invocation invocation) {
+    throw new StateError('Unexpected invocation of ${invocation.memberName}');
+  }
+}
+
+class _UnlinkedUnitMock implements UnlinkedUnit {
+  @override
+  bool isPartOf;
+
+  @override
+  List<int> lineStarts;
+
+  @override
+  UnlinkedPublicNamespace publicNamespace;
+
+  @override
+  noSuchMethod(Invocation invocation) {
+    throw new StateError('Unexpected invocation of ${invocation.memberName}');
+  }
+}
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index 6dfd98c..3763f67 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -9917,6 +9917,7 @@
   }
 
   test_unused_type_parameter() async {
+    shouldCompareLibraryElements = false;
     var library = await checkLibrary('''
 class C<T> {
   void f() {}
diff --git a/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart b/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart
index 0774634..707aa7e 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart
@@ -29,9 +29,11 @@
 import 'resynthesize_common.dart';
 
 main() {
-  defineReflectiveSuite(() {
-    defineReflectiveTests(ResynthesizeKernelStrongTest);
-  });
+  // TODO(brianwilkerson) Either remove the following test, or uncomment it if
+  // we get it working under Dart2 semantics.
+//  defineReflectiveSuite(() {
+//    defineReflectiveTests(ResynthesizeKernelStrongTest);
+//  });
 }
 
 /// Tests marked with this annotation fail because they test features that
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 40b9e23..cc4fa43 100644
--- a/pkg/analyzer/test/src/task/dart_work_manager_test.dart
+++ b/pkg/analyzer/test/src/task/dart_work_manager_test.dart
@@ -2,8 +2,6 @@
 // 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 analyzer.test.src.task.dart_work_manager_test;
-
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/error/error.dart' show AnalysisError;
 import 'package:analyzer/exception/exception.dart';
@@ -11,6 +9,8 @@
 import 'package:analyzer/src/dart/scanner/scanner.dart' show ScannerErrorCode;
 import 'package:analyzer/src/generated/engine.dart'
     show
+        AnalysisContext,
+        AnalysisErrorInfo,
         AnalysisErrorInfoImpl,
         AnalysisOptions,
         AnalysisOptionsImpl,
@@ -25,7 +25,6 @@
 import 'package:analyzer/task/dart.dart';
 import 'package:analyzer/task/general.dart';
 import 'package:analyzer/task/model.dart';
-import 'package:mockito/mockito.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -39,7 +38,7 @@
 
 @reflectiveTest
 class DartWorkManagerTest {
-  InternalAnalysisContext context = new _InternalAnalysisContextMock();
+  _InternalAnalysisContextMock context = new _InternalAnalysisContextMock();
   AnalysisCache cache;
   DartWorkManager manager;
 
@@ -226,8 +225,8 @@
   }
 
   void test_applyPriorityTargets_isLibrary_computeErrors() {
-    when(context.shouldErrorsBeAnalyzed(source2)).thenReturn(true);
-    when(context.shouldErrorsBeAnalyzed(source3)).thenReturn(true);
+    context.setShouldErrorsBeAnalyzed(source2, true);
+    context.setShouldErrorsBeAnalyzed(source3, true);
     entry1.setValue(SOURCE_KIND, SourceKind.LIBRARY, []);
     entry2.setValue(SOURCE_KIND, SourceKind.LIBRARY, []);
     entry3.setValue(SOURCE_KIND, SourceKind.LIBRARY, []);
@@ -250,8 +249,8 @@
   }
 
   void test_applyPriorityTargets_isLibrary_computeUnit() {
-    when(context.shouldErrorsBeAnalyzed(source2)).thenReturn(false);
-    when(context.shouldErrorsBeAnalyzed(source3)).thenReturn(false);
+    context.setShouldErrorsBeAnalyzed(source2, false);
+    context.setShouldErrorsBeAnalyzed(source3, false);
     entry1.setValue(SOURCE_KIND, SourceKind.LIBRARY, []);
     entry2.setValue(SOURCE_KIND, SourceKind.LIBRARY, []);
     entry3.setValue(SOURCE_KIND, SourceKind.LIBRARY, []);
@@ -276,8 +275,7 @@
     entry2.setValue(SOURCE_KIND, SourceKind.LIBRARY, []);
     entry3.setValue(SOURCE_KIND, SourceKind.LIBRARY, []);
     // +source2 +source3
-    when(context.getLibrariesContaining(source1))
-        .thenReturn([source2, source3]);
+    context.getLibrariesContainingMap[source1] = <Source>[source2, source3];
     manager.applyPriorityTargets([source1]);
     expect(
         manager.priorityResultQueue,
@@ -310,7 +308,7 @@
         new AnalysisError(source1, 1, 0, ScannerErrorCode.MISSING_DIGIT);
     AnalysisError error2 =
         new AnalysisError(source1, 2, 0, ScannerErrorCode.MISSING_DIGIT);
-    when(context.getLibrariesContaining(source1)).thenReturn([source2]);
+    context.getLibrariesContainingMap[source1] = <Source>[source2];
     entry1.setValue(SCAN_ERRORS, <AnalysisError>[error1], []);
     context
         .getCacheEntry(new LibrarySpecificUnit(source2, source1))
@@ -324,14 +322,14 @@
         new AnalysisError(source1, 1, 0, ScannerErrorCode.MISSING_DIGIT);
     AnalysisError error2 =
         new AnalysisError(source1, 2, 0, ScannerErrorCode.MISSING_DIGIT);
-    when(context.getLibrariesContaining(source1)).thenReturn([source2]);
+    context.getLibrariesContainingMap[source1] = <Source>[source2];
     entry1.setValue(DART_ERRORS, <AnalysisError>[error1, error2], []);
     List<AnalysisError> errors = manager.getErrors(source1);
     expect(errors, unorderedEquals([error1, error2]));
   }
 
   void test_getLibrariesContainingPart() {
-    when(context.aboutToComputeResult(any, any)).thenReturn(false);
+    context.aboutToComputeEverything = false;
     Source part1 = new TestSource('part1.dart');
     Source part2 = new TestSource('part2.dart');
     Source part3 = new TestSource('part3.dart');
@@ -356,10 +354,8 @@
     Source library1 = new TestSource('library1.dart');
     Source library2 = new TestSource('library2.dart');
     // configure AnalysisContext mock
-    when(context.aboutToComputeResult(any, CONTAINING_LIBRARIES))
-        .thenAnswer((invocation) {
-      CacheEntry entry = invocation.positionalArguments[0];
-      ResultDescriptor result = invocation.positionalArguments[1];
+    context.aboutToComputeResultMap[CONTAINING_LIBRARIES] =
+        (CacheEntry entry, ResultDescriptor result) {
       if (entry.target == part1) {
         entry.setValue(result as ResultDescriptor<List<Source>>,
             <Source>[library1, library2], []);
@@ -371,7 +367,7 @@
         return true;
       }
       return false;
-    });
+    };
     // getLibrariesContainingPart
     expect(manager.getLibrariesContainingPart(part1),
         unorderedEquals([library1, library2]));
@@ -381,26 +377,29 @@
   }
 
   void test_getLibrariesContainingPart_inSDK() {
-    Source part = new _SourceMock('part.dart');
-    when(part.isInSystemLibrary).thenReturn(true);
+    _SourceMock part = new _SourceMock('part.dart');
+    part.isInSystemLibrary = true;
     // SDK work manager
-    DartWorkManager sdkDartWorkManagerMock = new _DartWorkManagerMock();
-    when(sdkDartWorkManagerMock.getLibrariesContainingPart(part))
-        .thenReturn([source2, source3]);
+    _DartWorkManagerMock sdkDartWorkManagerMock = new _DartWorkManagerMock();
+    sdkDartWorkManagerMock.librariesContainingPartMap[part] = <Source>[
+      source2,
+      source3
+    ];
     // SDK context mock
-    InternalAnalysisContext sdkContextMock = new _InternalAnalysisContextMock();
-    when(sdkContextMock.workManagers).thenReturn([sdkDartWorkManagerMock]);
+    _InternalAnalysisContextMock sdkContextMock =
+        new _InternalAnalysisContextMock();
+    sdkContextMock.workManagers = <WorkManager>[sdkDartWorkManagerMock];
     // SDK mock
-    DartSdk sdkMock = new _DartSdkMock();
-    when(sdkMock.context).thenReturn(sdkContextMock);
+    _DartSdkMock sdkMock = new _DartSdkMock();
+    sdkMock.context = sdkContextMock;
     // SourceFactory mock
-    SourceFactory sourceFactory = new _SourceFactoryMock();
-    when(sourceFactory.dartSdk).thenReturn(sdkMock);
-    when(context.sourceFactory).thenReturn(sourceFactory);
+    _SourceFactoryMock sourceFactory = new _SourceFactoryMock();
+    sourceFactory.dartSdk = sdkMock;
+    context.sourceFactory = sourceFactory;
     // SDK source mock
-    Source source = new _SourceMock('test.dart');
-    when(source.source).thenReturn(source);
-    when(source.isInSystemLibrary).thenReturn(true);
+    _SourceMock source = new _SourceMock('test.dart');
+    source.source = source;
+    source.isInSystemLibrary = true;
     // validate
     expect(manager.getLibrariesContainingPart(part),
         unorderedEquals([source2, source3]));
@@ -531,7 +530,7 @@
   }
 
   void test_onAnalysisOptionsChanged() {
-    when(context.exists(any)).thenReturn(true);
+    context.everythingExists = true;
     // set cache values
     entry1.setValue(PARSED_UNIT, AstTestFactory.compilationUnit(), []);
     entry1.setValue(IMPORTED_LIBRARIES, <Source>[], []);
@@ -575,7 +574,7 @@
   }
 
   void test_onSourceFactoryChanged() {
-    when(context.exists(any)).thenReturn(true);
+    context.everythingExists = true;
     // set cache values
     entry1.setValue(PARSED_UNIT, AstTestFactory.compilationUnit(), []);
     entry1.setValue(IMPORTED_LIBRARIES, <Source>[], []);
@@ -610,9 +609,9 @@
         new AnalysisError(source1, 1, 0, ScannerErrorCode.MISSING_DIGIT);
     AnalysisError error2 =
         new AnalysisError(source1, 2, 0, ScannerErrorCode.MISSING_DIGIT);
-    when(context.getLibrariesContaining(source1)).thenReturn([source2]);
-    when(context.getErrors(source1))
-        .thenReturn(new AnalysisErrorInfoImpl([error1, error2], lineInfo));
+    context.getLibrariesContainingMap[source1] = <Source>[source2];
+    context.errorsMap[source1] =
+        new AnalysisErrorInfoImpl([error1, error2], lineInfo);
     entry1.setValue(LINE_INFO, lineInfo, []);
     entry1.setValue(SCAN_ERRORS, <AnalysisError>[error1], []);
     AnalysisTarget unitTarget = new LibrarySpecificUnit(source2, source1);
@@ -634,9 +633,9 @@
         new AnalysisError(source1, 1, 0, ScannerErrorCode.MISSING_DIGIT);
     AnalysisError error2 =
         new AnalysisError(source1, 2, 0, ScannerErrorCode.MISSING_DIGIT);
-    when(context.getLibrariesContaining(source1)).thenReturn([source2]);
-    when(context.getErrors(source1))
-        .thenReturn(new AnalysisErrorInfoImpl([error1, error2], lineInfo));
+    context.getLibrariesContainingMap[source1] = <Source>[source2];
+    context.errorsMap[source1] =
+        new AnalysisErrorInfoImpl([error1, error2], lineInfo);
     entry1.setValue(LINE_INFO, lineInfo, []);
     entry1.setValue(SCAN_ERRORS, <AnalysisError>[error1], []);
     entry1.setValue(PARSE_ERRORS, <AnalysisError>[error2], []);
@@ -658,8 +657,8 @@
     _getOrCreateEntry(part1).setValue(CONTAINING_LIBRARIES, [], []);
     expect(cache.getState(part1, CONTAINING_LIBRARIES), CacheState.VALID);
     // configure AnalysisContext mock
-    when(context.prioritySources).thenReturn(<Source>[]);
-    when(context.shouldErrorsBeAnalyzed(any)).thenReturn(false);
+    context.prioritySources = <Source>[];
+    context.analyzeAllErrors = false;
     // library1 parts
     manager.resultsComputed(library1, <ResultDescriptor, dynamic>{
       INCLUDED_PARTS: [part1, part2],
@@ -685,25 +684,28 @@
   }
 
   void test_resultsComputed_inSDK() {
-    DartWorkManager sdkDartWorkManagerMock = new _DartWorkManagerMock();
+    _DartWorkManagerMock sdkDartWorkManagerMock = new _DartWorkManagerMock();
     // SDK context mock
-    InternalAnalysisContext sdkContextMock = new _InternalAnalysisContextMock();
-    when(sdkContextMock.workManagers).thenReturn([sdkDartWorkManagerMock]);
+    _InternalAnalysisContextMock sdkContextMock =
+        new _InternalAnalysisContextMock();
+    sdkContextMock.workManagers = <WorkManager>[sdkDartWorkManagerMock];
     // SDK mock
-    DartSdk sdkMock = new _DartSdkMock();
-    when(sdkMock.context).thenReturn(sdkContextMock);
+    _DartSdkMock sdkMock = new _DartSdkMock();
+    sdkMock.context = sdkContextMock;
     // SourceFactory mock
-    SourceFactory sourceFactory = new _SourceFactoryMock();
-    when(sourceFactory.dartSdk).thenReturn(sdkMock);
-    when(context.sourceFactory).thenReturn(sourceFactory);
+    _SourceFactoryMock sourceFactory = new _SourceFactoryMock();
+    sourceFactory.dartSdk = sdkMock;
+    context.sourceFactory = sourceFactory;
     // SDK source mock
-    Source source = new _SourceMock('test.dart');
-    when(source.source).thenReturn(source);
-    when(source.isInSystemLibrary).thenReturn(true);
+    _SourceMock source = new _SourceMock('test.dart');
+    source.source = source;
+    source.isInSystemLibrary = true;
     // notify and validate
     Map<ResultDescriptor, dynamic> outputs = <ResultDescriptor, dynamic>{};
     manager.resultsComputed(source, outputs);
-    verify(sdkDartWorkManagerMock.resultsComputed(source, outputs)).called(1);
+    var bySourceMap = sdkDartWorkManagerMock.resultsComputedCounts[source];
+    expect(bySourceMap, isNotNull);
+    expect(bySourceMap[outputs], 1);
   }
 
   void test_resultsComputed_noSourceKind() {
@@ -722,9 +724,8 @@
 
   void test_resultsComputed_parsedUnit() {
     LineInfo lineInfo = new LineInfo([0]);
-    when(context.getLibrariesContaining(source1)).thenReturn([]);
-    when(context.getErrors(source1))
-        .thenReturn(new AnalysisErrorInfoImpl([], lineInfo));
+    context.getLibrariesContainingMap[source1] = <Source>[];
+    context.errorsMap[source1] = new AnalysisErrorInfoImpl([], lineInfo);
     entry1.setValue(LINE_INFO, lineInfo, []);
     CompilationUnit unit = AstTestFactory.compilationUnit();
     manager.resultsComputed(source1, {PARSED_UNIT: unit});
@@ -736,9 +737,8 @@
 
   void test_resultsComputed_resolvedUnit() {
     LineInfo lineInfo = new LineInfo([0]);
-    when(context.getLibrariesContaining(source2)).thenReturn([]);
-    when(context.getErrors(source2))
-        .thenReturn(new AnalysisErrorInfoImpl([], lineInfo));
+    context.getLibrariesContainingMap[source2] = <Source>[];
+    context.errorsMap[source2] = new AnalysisErrorInfoImpl([], lineInfo);
     entry2.setValue(LINE_INFO, lineInfo, []);
     CompilationUnit unit = AstTestFactory.compilationUnit();
     manager.resultsComputed(
@@ -751,8 +751,8 @@
 
   void test_resultsComputed_sourceKind_isLibrary() {
     manager.unknownSourceQueue.addAll([source1, source2, source3]);
-    when(context.prioritySources).thenReturn(<Source>[]);
-    when(context.shouldErrorsBeAnalyzed(source2)).thenReturn(true);
+    context.prioritySources = <Source>[];
+    context.shouldErrorsBeAnalyzedMap[source2] = true;
     manager.resultsComputed(source2, {SOURCE_KIND: SourceKind.LIBRARY});
     expect_librarySourceQueue([source2]);
     expect_unknownSourceQueue([source1, source3]);
@@ -760,8 +760,8 @@
 
   void test_resultsComputed_sourceKind_isLibrary_isPriority_computeErrors() {
     manager.unknownSourceQueue.addAll([source1, source2, source3]);
-    when(context.prioritySources).thenReturn(<Source>[source2]);
-    when(context.shouldErrorsBeAnalyzed(source2)).thenReturn(true);
+    context.prioritySources = <Source>[source2];
+    context.shouldErrorsBeAnalyzedMap[source2] = true;
     manager.resultsComputed(source2, {SOURCE_KIND: SourceKind.LIBRARY});
     expect_unknownSourceQueue([source1, source3]);
     expect(manager.priorityResultQueue,
@@ -770,8 +770,8 @@
 
   void test_resultsComputed_sourceKind_isLibrary_isPriority_computeUnit() {
     manager.unknownSourceQueue.addAll([source1, source2, source3]);
-    when(context.prioritySources).thenReturn(<Source>[source2]);
-    when(context.shouldErrorsBeAnalyzed(source2)).thenReturn(false);
+    context.prioritySources = <Source>[source2];
+    context.shouldErrorsBeAnalyzedMap[source2] = false;
     manager.resultsComputed(source2, {SOURCE_KIND: SourceKind.LIBRARY});
     expect_unknownSourceQueue([source1, source3]);
     expect(
@@ -816,18 +816,74 @@
   }
 }
 
-class _DartSdkMock extends Mock implements DartSdk {}
+class _DartSdkMock implements DartSdk {
+  AnalysisContext context;
 
-class _DartWorkManagerMock extends Mock implements DartWorkManager {}
+  @override
+  noSuchMethod(Invocation invocation) {
+    throw new StateError('Unexpected invocation of ${invocation.memberName}');
+  }
+}
 
-class _InternalAnalysisContextMock extends Mock
-    implements InternalAnalysisContext {
+class _DartWorkManagerMock implements DartWorkManager {
+  Map<Source, List<Source>> librariesContainingPartMap =
+      <Source, List<Source>>{};
+
+  Map<Source, Map<Map<ResultDescriptor, dynamic>, int>> resultsComputedCounts =
+      <Source, Map<Map<ResultDescriptor, dynamic>, int>>{};
+
+  @override
+  List<Source> getLibrariesContainingPart(Source part) {
+    return librariesContainingPartMap[part] ?? <Source>[];
+  }
+
+  @override
+  noSuchMethod(Invocation invocation) {
+    throw new StateError('Unexpected invocation of ${invocation.memberName}');
+  }
+
+  @override
+  void resultsComputed(
+      AnalysisTarget target, Map<ResultDescriptor, dynamic> outputs) {
+    Map<Map<ResultDescriptor, dynamic>, int> bySourceMap =
+        resultsComputedCounts.putIfAbsent(target, () => {});
+    bySourceMap[outputs] = (bySourceMap[outputs] ?? 0) + 1;
+  }
+}
+
+class _InternalAnalysisContextMock implements InternalAnalysisContext {
   @override
   CachePartition privateAnalysisCachePartition;
 
   @override
   AnalysisCache analysisCache;
 
+  @override
+  SourceFactory sourceFactory;
+
+  bool analyzeAllErrors;
+
+  bool everythingExists = false;
+
+  bool aboutToComputeEverything;
+
+  @override
+  List<Source> prioritySources = <Source>[];
+
+  @override
+  List<WorkManager> workManagers = <WorkManager>[];
+
+  Map<Source, List<Source>> getLibrariesContainingMap =
+      <Source, List<Source>>{};
+
+  Map<Source, bool> shouldErrorsBeAnalyzedMap = <Source, bool>{};
+
+  Map<ResultDescriptor, bool Function(CacheEntry entry, ResultDescriptor)>
+      aboutToComputeResultMap =
+      <ResultDescriptor, bool Function(CacheEntry entry, ResultDescriptor)>{};
+
+  Map<Source, AnalysisErrorInfo> errorsMap = <Source, AnalysisErrorInfo>{};
+
   Map<Source, ChangeNoticeImpl> _pendingNotices = <Source, ChangeNoticeImpl>{};
 
   @override
@@ -846,6 +902,24 @@
   }
 
   @override
+  bool aboutToComputeResult(CacheEntry entry, ResultDescriptor result) {
+    if (aboutToComputeEverything != null) {
+      return aboutToComputeEverything;
+    }
+    bool Function(CacheEntry entry, ResultDescriptor) function =
+        aboutToComputeResultMap[result];
+    if (function == null) {
+      return false;
+    }
+    return function(entry, result);
+  }
+
+  @override
+  bool exists(Source source) {
+    return everythingExists;
+  }
+
+  @override
   CacheEntry getCacheEntry(AnalysisTarget target) {
     CacheEntry entry = analysisCache.get(target);
     if (entry == null) {
@@ -856,19 +930,65 @@
   }
 
   @override
+  AnalysisErrorInfo getErrors(Source source) => errorsMap[source];
+
+  List<Source> getLibrariesContaining(Source source) {
+    return getLibrariesContainingMap[source];
+  }
+
+  @override
   ChangeNoticeImpl getNotice(Source source) {
     return _pendingNotices.putIfAbsent(
         source, () => new ChangeNoticeImpl(source));
   }
+
+  @override
+  noSuchMethod(Invocation invocation) {
+    throw new StateError('Unexpected invocation of ${invocation.memberName}');
+  }
+
+  void setShouldErrorsBeAnalyzed(Source source, bool value) {
+    shouldErrorsBeAnalyzedMap[source] = value;
+  }
+
+  @override
+  bool shouldErrorsBeAnalyzed(Source source) {
+    if (analyzeAllErrors != null) {
+      return analyzeAllErrors;
+    }
+    return shouldErrorsBeAnalyzedMap[source];
+  }
 }
 
-class _SourceFactoryMock extends Mock implements SourceFactory {}
+class _SourceFactoryMock implements SourceFactory {
+  DartSdk dartSdk;
 
-class _SourceMock extends Mock implements Source {
+  @override
+  noSuchMethod(Invocation invocation) {
+    throw new StateError('Unexpected invocation of ${invocation.memberName}');
+  }
+}
+
+class _SourceMock implements Source {
+  @override
   final String shortName;
+
+  @override
+  bool isInSystemLibrary = false;
+
+  @override
+  Source source;
+
   _SourceMock(this.shortName);
+
   @override
   String get fullName => '/' + shortName;
+
+  @override
+  noSuchMethod(Invocation invocation) {
+    throw new StateError('Unexpected invocation of ${invocation.memberName}');
+  }
+
   @override
   String toString() => fullName;
 }
diff --git a/pkg/analyzer/test/src/task/driver_test.dart b/pkg/analyzer/test/src/task/driver_test.dart
index 1c7c6ec..55a613d5 100644
--- a/pkg/analyzer/test/src/task/driver_test.dart
+++ b/pkg/analyzer/test/src/task/driver_test.dart
@@ -2,8 +2,6 @@
 // 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 analyzer.test.src.task.driver_test;
-
 import 'package:analyzer/exception/exception.dart';
 import 'package:analyzer/src/context/cache.dart';
 import 'package:analyzer/src/generated/engine.dart';
@@ -11,7 +9,6 @@
 import 'package:analyzer/src/task/inputs.dart';
 import 'package:analyzer/src/task/manager.dart';
 import 'package:analyzer/task/model.dart';
-import 'package:mockito/mockito.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -30,20 +27,19 @@
 class AbstractDriverTest {
   TaskManager taskManager = new TaskManager();
   List<WorkManager> workManagers = <WorkManager>[];
-  InternalAnalysisContext context = new _InternalAnalysisContextMock();
+  _InternalAnalysisContextMock context = new _InternalAnalysisContextMock();
   AnalysisDriver analysisDriver;
 
   void setUp() {
     context = new _InternalAnalysisContextMock();
     analysisDriver = new AnalysisDriver(taskManager, workManagers, context);
-    when(context.aboutToComputeResult(any, any)).thenReturn(false);
   }
 }
 
 @reflectiveTest
 class AnalysisDriverTest extends AbstractDriverTest {
-  WorkManager workManager1 = new _WorkManagerMock();
-  WorkManager workManager2 = new _WorkManagerMock();
+  _WorkManagerMock workManager1 = new _WorkManagerMock();
+  _WorkManagerMock workManager2 = new _WorkManagerMock();
 
   AnalysisTarget target1 = new TestSource('/1.dart');
   AnalysisTarget target2 = new TestSource('/2.dart');
@@ -56,10 +52,8 @@
 
   void setUp() {
     super.setUp();
-    when(workManager1.getNextResultPriority())
-        .thenReturn(WorkOrderPriority.NONE);
-    when(workManager2.getNextResultPriority())
-        .thenReturn(WorkOrderPriority.NONE);
+    workManager1.nextResultPriority = WorkOrderPriority.NONE;
+    workManager2.nextResultPriority = WorkOrderPriority.NONE;
 
     workManagers.add(workManager1);
     workManagers.add(workManager2);
@@ -87,12 +81,9 @@
 
   test_createNextWorkOrder_highLow() {
     _configureDescriptors12();
-    when(workManager1.getNextResultPriority())
-        .thenReturn(WorkOrderPriority.PRIORITY);
-    when(workManager2.getNextResultPriority())
-        .thenReturn(WorkOrderPriority.NORMAL);
-    when(workManager1.getNextResult())
-        .thenReturn(new TargetedResult(target1, result1));
+    workManager1.nextResultPriority = WorkOrderPriority.PRIORITY;
+    workManager2.nextResultPriority = WorkOrderPriority.NORMAL;
+    workManager1.nextResult = new TargetedResult(target1, result1);
     WorkOrder workOrder = analysisDriver.createNextWorkOrder();
     expect(workOrder, isNotNull);
     expect(workOrder.moveNext(), true);
@@ -102,12 +93,9 @@
 
   test_createNextWorkOrder_lowHigh() {
     _configureDescriptors12();
-    when(workManager1.getNextResultPriority())
-        .thenReturn(WorkOrderPriority.NORMAL);
-    when(workManager2.getNextResultPriority())
-        .thenReturn(WorkOrderPriority.PRIORITY);
-    when(workManager2.getNextResult())
-        .thenReturn(new TargetedResult(target1, result1));
+    workManager1.nextResultPriority = WorkOrderPriority.NORMAL;
+    workManager2.nextResultPriority = WorkOrderPriority.PRIORITY;
+    workManager2.nextResult = new TargetedResult(target1, result1);
     WorkOrder workOrder = analysisDriver.createNextWorkOrder();
     expect(workOrder, isNotNull);
     expect(workOrder.moveNext(), true);
@@ -117,10 +105,8 @@
 
   test_createNextWorkOrder_none() {
     _configureDescriptors12();
-    when(workManager1.getNextResultPriority())
-        .thenReturn(WorkOrderPriority.NONE);
-    when(workManager2.getNextResultPriority())
-        .thenReturn(WorkOrderPriority.NONE);
+    workManager1.nextResultPriority = WorkOrderPriority.NONE;
+    workManager2.nextResultPriority = WorkOrderPriority.NONE;
     expect(analysisDriver.createNextWorkOrder(), isNull);
   }
 
@@ -136,14 +122,14 @@
     context.getCacheEntry(target).setState(result, CacheState.INVALID);
     // has result
     {
-      when(context.aboutToComputeResult(any, result)).thenReturn(true);
+      context.aboutToComputeResultMap[result] = true;
       WorkOrder workOrder =
           analysisDriver.createWorkOrderForResult(target, result);
       expect(workOrder, isNull);
     }
     // no result
     {
-      when(context.aboutToComputeResult(any, result)).thenReturn(false);
+      context.aboutToComputeResultMap[result] = false;
       WorkOrder workOrder =
           analysisDriver.createWorkOrderForResult(target, result);
       expect(workOrder, isNotNull);
@@ -230,16 +216,13 @@
 
   test_performAnalysisTask() {
     _configureDescriptors12();
-    when(workManager1.getNextResult())
-        .thenReturn(new TargetedResult(target1, result1));
+    workManager1.nextResult = new TargetedResult(target1, result1);
 
-    when(workManager1.getNextResultPriority())
-        .thenReturn(WorkOrderPriority.NORMAL);
+    workManager1.nextResultPriority = WorkOrderPriority.NORMAL;
     expect(analysisDriver.performAnalysisTask(), true);
     expect(analysisDriver.performAnalysisTask(), true);
 
-    when(workManager1.getNextResultPriority())
-        .thenReturn(WorkOrderPriority.NONE);
+    workManager1.nextResultPriority = WorkOrderPriority.NONE;
     expect(analysisDriver.performAnalysisTask(), false);
   }
 
@@ -273,14 +256,11 @@
     taskManager.addTaskDescriptor(descriptor1);
     taskManager.addTaskDescriptor(descriptor2);
     // configure WorkManager
-    when(workManager1.getNextResultPriority())
-        .thenReturn(WorkOrderPriority.NORMAL);
-    when(workManager1.getNextResult())
-        .thenReturn(new TargetedResult(target, resultB));
+    workManager1.nextResultPriority = WorkOrderPriority.NORMAL;
+    workManager1.nextResult = new TargetedResult(target, resultB);
     // prepare work order
     while (analysisDriver.performAnalysisTask()) {
-      when(workManager1.getNextResultPriority())
-          .thenReturn(WorkOrderPriority.NONE);
+      workManager1.nextResultPriority = WorkOrderPriority.NONE;
     }
     Set<TaskDescriptor> expectedCycle = [descriptor1, descriptor2].toSet();
     expect(task1.dependencyCycle, isNotNull);
@@ -317,10 +297,8 @@
     taskManager.addTaskDescriptor(descriptor1);
     taskManager.addTaskDescriptor(descriptor2);
     // configure WorkManager
-    when(workManager1.getNextResultPriority())
-        .thenReturn(WorkOrderPriority.NORMAL);
-    when(workManager1.getNextResult())
-        .thenReturn(new TargetedResult(target, resultB));
+    workManager1.nextResultPriority = WorkOrderPriority.NORMAL;
+    workManager1.nextResult = new TargetedResult(target, resultB);
     // prepare work order
     expect(analysisDriver.performAnalysisTask(), true);
     expect(analysisDriver.performAnalysisTask(), true);
@@ -350,10 +328,8 @@
     taskManager.addTaskDescriptor(descriptor1);
     taskManager.addTaskDescriptor(descriptor2);
     // configure WorkManager
-    when(workManager1.getNextResultPriority())
-        .thenReturn(WorkOrderPriority.NORMAL);
-    when(workManager1.getNextResult())
-        .thenReturn(new TargetedResult(target, resultB));
+    workManager1.nextResultPriority = WorkOrderPriority.NORMAL;
+    workManager1.nextResult = new TargetedResult(target, resultB);
     // prepare work order
     expect(analysisDriver.performAnalysisTask(), true);
     expect(context.getCacheEntry(target).getValue(resultA), -1);
@@ -367,8 +343,7 @@
     expect(context.getCacheEntry(target).getValue(resultA), 10);
     expect(context.getCacheEntry(target).getValue(resultB), 20);
     // done
-    when(workManager1.getNextResultPriority())
-        .thenReturn(WorkOrderPriority.NONE);
+    workManager1.nextResultPriority = WorkOrderPriority.NONE;
     expect(analysisDriver.performAnalysisTask(), false);
   }
 
@@ -704,7 +679,7 @@
     taskManager.addTaskDescriptor(task1);
     taskManager.addTaskDescriptor(task2);
     // configure mocks
-    when(context.aboutToComputeResult(any, resultA)).thenReturn(true);
+    context.aboutToComputeResultMap[resultA] = true;
     // gather inputs
     WorkItem item = new WorkItem(context, target, task2, null, 0, null);
     WorkItem inputItem = item.gatherInputs(taskManager, []);
@@ -731,7 +706,7 @@
     taskManager.addTaskDescriptor(task2);
     // configure ResultProvider
     // configure mocks
-    when(context.aboutToComputeResult(any, resultA)).thenReturn(false);
+    context.aboutToComputeResultMap[resultA] = false;
     // gather inputs
     WorkItem item = new WorkItem(context, target, task2, null, 0, null);
     WorkItem inputItem = item.gatherInputs(taskManager, []);
@@ -824,10 +799,11 @@
  * A dummy [InternalAnalysisContext] that does not use [AnalysisDriver] itself,
  * but provides enough implementation for it to function.
  */
-class _InternalAnalysisContextMock extends Mock
-    implements InternalAnalysisContext {
+class _InternalAnalysisContextMock implements InternalAnalysisContext {
   AnalysisCache analysisCache;
 
+  Map<ResultDescriptor, bool> aboutToComputeResultMap = {};
+
   @override
   final AnalysisOptionsImpl analysisOptions = new AnalysisOptionsImpl();
 
@@ -841,6 +817,12 @@
     analysisCache = new AnalysisCache([new UniversalCachePartition(this)]);
   }
 
+  String get name => 'mock';
+
+  @override
+  bool aboutToComputeResult(CacheEntry entry, ResultDescriptor result) =>
+      aboutToComputeResultMap[result] ?? false;
+
   @override
   CacheEntry getCacheEntry(AnalysisTarget target) {
     CacheEntry entry = analysisCache.get(target);
@@ -850,6 +832,11 @@
     }
     return entry;
   }
+
+  @override
+  noSuchMethod(Invocation invocation) {
+    throw new StateError('Unexpected invocation of ${invocation.memberName}');
+  }
 }
 
 /**
@@ -875,4 +862,20 @@
   }
 }
 
-class _WorkManagerMock extends Mock implements WorkManager {}
+class _WorkManagerMock implements WorkManager {
+  WorkOrderPriority nextResultPriority;
+
+  TargetedResult nextResult;
+
+  TargetedResult getNextResult() => nextResult;
+
+  WorkOrderPriority getNextResultPriority() => nextResultPriority;
+
+  @override
+  noSuchMethod(Invocation invocation) {
+    throw new StateError('Unexpected invocation of ${invocation.memberName}');
+  }
+
+  void resultsComputed(
+      AnalysisTarget target, Map<ResultDescriptor, dynamic> outputs) {}
+}
diff --git a/pkg/analyzer/test/src/task/general_test.dart b/pkg/analyzer/test/src/task/general_test.dart
index cb3eecb..0caea7e 100644
--- a/pkg/analyzer/test/src/task/general_test.dart
+++ b/pkg/analyzer/test/src/task/general_test.dart
@@ -2,14 +2,11 @@
 // 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 analyzer.test.src.task.general_test;
-
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/task/general.dart';
 import 'package:analyzer/task/general.dart';
 import 'package:analyzer/task/model.dart';
-import 'package:mockito/mockito.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -55,11 +52,11 @@
   }
 
   test_perform() {
-    AnalysisContext context = new _MockContext();
+    _MockContext context = new _MockContext();
     Source target = new TestSource();
     GetContentTask task = new GetContentTask(context, target);
-    when(context.getContents(target))
-        .thenReturn(new TimestampedData<String>(42, 'foo'));
+    context.getContentsResponse[target] =
+        () => new TimestampedData<String>(42, 'foo');
     task.perform();
     expect(task.caughtException, isNull);
     expect(task.outputs, hasLength(2));
@@ -68,10 +65,10 @@
   }
 
   void test_perform_exception() {
-    AnalysisContext context = new _MockContext();
+    _MockContext context = new _MockContext();
     Source target = new TestSource();
     GetContentTask task = new GetContentTask(context, target);
-    when(context.getContents(target)).thenThrow('My exception!');
+    context.getContentsResponse[target] = () => throw 'My exception!';
     task.perform();
     expect(task.caughtException, isNull);
     expect(task.outputs, hasLength(2));
@@ -80,4 +77,23 @@
   }
 }
 
-class _MockContext extends Mock implements AnalysisContext {}
+class _MockContext implements AnalysisContext {
+  Map<Source, TimestampedData<String> Function()> getContentsResponse =
+      <Source, TimestampedData<String> Function()>{};
+
+  String get name => 'mock';
+
+  @override
+  TimestampedData<String> getContents(Source source) {
+    TimestampedData<String> Function() response = getContentsResponse[source];
+    if (response == null) {
+      fail('Unexpected invocation of getContents');
+    }
+    return response();
+  }
+
+  @override
+  noSuchMethod(Invocation invocation) {
+    fail('Unexpected invocation of ${invocation.memberName}');
+  }
+}
diff --git a/pkg/analyzer/test/src/task/html_work_manager_test.dart b/pkg/analyzer/test/src/task/html_work_manager_test.dart
index 0939d9f..b09a365 100644
--- a/pkg/analyzer/test/src/task/html_work_manager_test.dart
+++ b/pkg/analyzer/test/src/task/html_work_manager_test.dart
@@ -2,12 +2,11 @@
 // 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 analyzer.test.src.task.html_work_manager_test;
-
 import 'package:analyzer/error/error.dart' show AnalysisError;
 import 'package:analyzer/exception/exception.dart';
 import 'package:analyzer/src/context/cache.dart';
 import 'package:analyzer/src/context/context.dart';
+import 'package:analyzer/src/context/source.dart';
 import 'package:analyzer/src/error/codes.dart' show HtmlErrorCode;
 import 'package:analyzer/src/generated/engine.dart'
     show
@@ -24,7 +23,6 @@
 import 'package:analyzer/task/general.dart';
 import 'package:analyzer/task/html.dart';
 import 'package:analyzer/task/model.dart';
-import 'package:mockito/mockito.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -63,7 +61,7 @@
     // the work manager was constructed. This used to create a failure
     // case for test_onResultInvalidated_scheduleInvalidLibraries so its
     // tested here.
-    context.sourceFactory = new _SourceFactoryMock();
+    context.sourceFactory = new SourceFactoryImpl(<UriResolver>[]);
 
     // now just do the same checks as
     // test_onResultInvalidated_scheduleInvalidLibraries
@@ -82,7 +80,7 @@
 
 @reflectiveTest
 class HtmlWorkManagerTest {
-  InternalAnalysisContext context = new _InternalAnalysisContextMock();
+  _InternalAnalysisContextMock context = new _InternalAnalysisContextMock();
   AnalysisCache cache;
   HtmlWorkManager manager;
 
@@ -155,8 +153,8 @@
   }
 
   void test_applyPriorityTargets() {
-    when(context.shouldErrorsBeAnalyzed(source2)).thenReturn(true);
-    when(context.shouldErrorsBeAnalyzed(source3)).thenReturn(true);
+    context.setShouldErrorsBeAnalyzed(source2, true);
+    context.setShouldErrorsBeAnalyzed(source3, true);
     manager.priorityResultQueue.add(new TargetedResult(source1, HTML_ERRORS));
     manager.priorityResultQueue.add(new TargetedResult(source2, HTML_ERRORS));
     // -source1 +source3
@@ -284,7 +282,7 @@
   }
 
   void test_onAnalysisOptionsChanged() {
-    when(context.exists(any)).thenReturn(true);
+    context.everythingExists = true;
     // set cache values
     entry1.setValue(DART_SCRIPTS, [], []);
     entry1.setValue(HTML_DOCUMENT, null, []);
@@ -314,7 +312,7 @@
   }
 
   void test_onSourceFactoryChanged() {
-    when(context.exists(any)).thenReturn(true);
+    context.everythingExists = true;
     // set cache values
     entry1.setValue(DART_SCRIPTS, [], []);
     entry1.setValue(HTML_DOCUMENT, null, []);
@@ -348,14 +346,17 @@
   }
 }
 
-class _InternalAnalysisContextMock extends Mock
-    implements InternalAnalysisContext {
+class _InternalAnalysisContextMock implements InternalAnalysisContext {
   @override
   CachePartition privateAnalysisCachePartition;
 
   @override
   AnalysisCache analysisCache;
 
+  bool everythingExists = false;
+
+  Map<Source, bool> shouldErrorsBeAnalyzedMap = <Source, bool>{};
+
   // The production version is a stream that carries messages from the cache
   // since the cache changes. Here, we can just pass the inner stream because
   // it doesn't change.
@@ -370,6 +371,11 @@
   get onResultInvalidated => analysisCache.onResultInvalidated;
 
   @override
+  bool exists(Source source) {
+    return everythingExists;
+  }
+
+  @override
   CacheEntry getCacheEntry(AnalysisTarget target) {
     CacheEntry entry = analysisCache.get(target);
     if (entry == null) {
@@ -397,6 +403,18 @@
     return _pendingNotices.putIfAbsent(
         source, () => new ChangeNoticeImpl(source));
   }
-}
 
-class _SourceFactoryMock extends Mock implements SourceFactory {}
+  @override
+  noSuchMethod(Invocation invocation) {
+    throw new StateError('Unexpected invocation of ${invocation.memberName}');
+  }
+
+  void setShouldErrorsBeAnalyzed(Source source, bool value) {
+    shouldErrorsBeAnalyzedMap[source] = value;
+  }
+
+  @override
+  bool shouldErrorsBeAnalyzed(Source source) {
+    return shouldErrorsBeAnalyzedMap[source];
+  }
+}
diff --git a/pkg/analyzer/test/src/task/inputs_test.dart b/pkg/analyzer/test/src/task/inputs_test.dart
index e2bd0fa..bdbf9ae 100644
--- a/pkg/analyzer/test/src/task/inputs_test.dart
+++ b/pkg/analyzer/test/src/task/inputs_test.dart
@@ -2,8 +2,6 @@
 // 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 analyzer.test.src.task.inputs_test;
-
 import 'package:analyzer/src/task/inputs.dart';
 import 'package:analyzer/src/task/model.dart';
 import 'package:analyzer/task/model.dart';
@@ -141,30 +139,30 @@
 
   test_toList() {
     var input = new ListTaskInputImpl<AnalysisTarget>(target, result1);
-    TaskInput<List> input2 =
-        input.toList((target) => new SimpleTaskInput(target, null));
+    ListTaskInput<String> input2 =
+        input.toList((target) => new SimpleTaskInput<String>(target, null));
     expect(input2,
         new isInstanceOf<ListToListTaskInput<AnalysisTarget, String>>());
   }
 
   test_toListOf() {
     var input = new ListTaskInputImpl<AnalysisTarget>(target, result1);
-    TaskInput<List> input2 = input.toListOf(result2);
+    ListTaskInput<int> input2 = input.toListOf(result2);
     expect(
         input2, new isInstanceOf<ListToListTaskInput<AnalysisTarget, int>>());
   }
 
   test_toMap() {
     var input = new ListTaskInputImpl<AnalysisTarget>(target, result1);
-    TaskInput<Map> input2 =
-        input.toMap((target) => new SimpleTaskInput(target, null));
+    MapTaskInput<AnalysisTarget, String> input2 =
+        input.toMap((target) => new SimpleTaskInput<String>(target, null));
     expect(
         input2, new isInstanceOf<ListToMapTaskInput<AnalysisTarget, String>>());
   }
 
   test_toMapOf() {
     var input = new ListTaskInputImpl<AnalysisTarget>(target, result1);
-    TaskInput<Map> input2 = input.toMapOf(result2);
+    MapTaskInput<AnalysisTarget, int> input2 = input.toMapOf(result2);
     expect(input2, new isInstanceOf<ListToMapTaskInput<AnalysisTarget, int>>());
   }
 }
diff --git a/pkg/analyzer/test/src/task/options_work_manager_test.dart b/pkg/analyzer/test/src/task/options_work_manager_test.dart
index 5092f5d..d8a0ec7 100644
--- a/pkg/analyzer/test/src/task/options_work_manager_test.dart
+++ b/pkg/analyzer/test/src/task/options_work_manager_test.dart
@@ -2,8 +2,6 @@
 // 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 analyzer.test.src.task.options_work_manager_test;
-
 import 'package:analyzer/error/error.dart' show AnalysisError;
 import 'package:analyzer/exception/exception.dart';
 import 'package:analyzer/src/context/cache.dart';
@@ -22,7 +20,6 @@
 import 'package:analyzer/task/dart.dart';
 import 'package:analyzer/task/general.dart';
 import 'package:analyzer/task/model.dart';
-import 'package:mockito/mockito.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -46,7 +43,7 @@
 }
 
 abstract class OptionsWorkManagerTest {
-  InternalAnalysisContext context = new _InternalAnalysisContextMock();
+  _InternalAnalysisContextMock context = new _InternalAnalysisContextMock();
   AnalysisCache cache;
   OptionsWorkManager manager;
 
@@ -125,8 +122,8 @@
   }
 
   void test_applyPriorityTargets() {
-    when(context.shouldErrorsBeAnalyzed(source2)).thenReturn(true);
-    when(context.shouldErrorsBeAnalyzed(source3)).thenReturn(true);
+    context.setShouldErrorsBeAnalyzed(source2, true);
+    context.setShouldErrorsBeAnalyzed(source3, true);
     manager.priorityResultQueue
         .add(new TargetedResult(source1, ANALYSIS_OPTIONS_ERRORS));
     manager.priorityResultQueue
@@ -258,14 +255,15 @@
   }
 }
 
-class _InternalAnalysisContextMock extends Mock
-    implements InternalAnalysisContext {
+class _InternalAnalysisContextMock implements InternalAnalysisContext {
   @override
   CachePartition privateAnalysisCachePartition;
 
   @override
   AnalysisCache analysisCache;
 
+  Map<Source, bool> shouldErrorsBeAnalyzedMap = <Source, bool>{};
+
   Map<Source, ChangeNoticeImpl> _pendingNotices = <Source, ChangeNoticeImpl>{};
 
   _InternalAnalysisContextMock() {
@@ -296,4 +294,18 @@
   @override
   ChangeNoticeImpl getNotice(Source source) =>
       _pendingNotices.putIfAbsent(source, () => new ChangeNoticeImpl(source));
+
+  @override
+  noSuchMethod(Invocation invocation) {
+    throw new StateError('Unexpected invocation of ${invocation.memberName}');
+  }
+
+  void setShouldErrorsBeAnalyzed(Source source, bool value) {
+    shouldErrorsBeAnalyzedMap[source] = value;
+  }
+
+  @override
+  bool shouldErrorsBeAnalyzed(Source source) {
+    return shouldErrorsBeAnalyzedMap[source];
+  }
 }
diff --git a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
index d9f803c..b30d121 100644
--- a/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
+++ b/pkg/analyzer/test/src/task/strong/inferred_type_test.dart
@@ -2,8 +2,6 @@
 // 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 analyzer.test.src.task.strong.inferred_type_test;
-
 import 'dart:async';
 
 import 'package:analyzer/dart/ast/ast.dart';
@@ -4071,7 +4069,7 @@
 
   @failingTest
   test_unsafeBlockClosureInference_functionCall_explicitDynamicParam_viaExpr1() async {
-    // Note: (f/*<dynamic>*/) is nort properly resulting in an instantiated
+    // Note: (f<dynamic>) is not properly resulting in an instantiated
     // function type due to dartbug.com/25824.
     var mainUnit = await checkFileElement('''
 List<T> f<T>(T g()) => <T>[g()];
@@ -4104,11 +4102,11 @@
 
   @failingTest
   test_unsafeBlockClosureInference_functionCall_explicitTypeParam_viaExpr1() async {
-    // TODO(paulberry): for some reason (f/*<int>) is nort properly resulting
+    // TODO(paulberry): for some reason (f<int>) is not properly resulting
     // in an instantiated function type.
     var mainUnit = await checkFileElement('''
 List<T> f<T>(T g()) => <T>[g()];
-var v = (f/int>)(/*info:INFERRED_TYPE_CLOSURE*/() { return 1; });
+var v = (f<int>)(/*info:INFERRED_TYPE_CLOSURE*/() { return 1; });
 ''');
     var v = mainUnit.topLevelVariables[0];
     expect(v.name, 'v');
@@ -4337,7 +4335,7 @@
   @override
   Future<CompilationUnitElement> checkFileElement(String content) async {
     CompilationUnit unit = await checkFile(content);
-    return (unit).element;
+    return unit.element;
   }
 }
 
diff --git a/pkg/analyzer/test/src/task/strong/strong_test_helper.dart b/pkg/analyzer/test/src/task/strong/strong_test_helper.dart
index b27ef2e..9b51a72 100644
--- a/pkg/analyzer/test/src/task/strong/strong_test_helper.dart
+++ b/pkg/analyzer/test/src/task/strong/strong_test_helper.dart
@@ -4,8 +4,6 @@
 
 // TODO(jmesserly): this file needs to be refactored, it's a port from
 // package:dev_compiler's tests
-library analyzer.test.src.task.strong.strong_test_helper;
-
 import 'dart:async';
 
 import 'package:analyzer/dart/ast/ast.dart';
@@ -371,7 +369,7 @@
       List<String> nonnullableTypes: AnalysisOptionsImpl.NONNULLABLE_TYPES,
       bool superMixins: false}) async {
     addFile(content);
-    return check(
+    return await check(
         declarationCasts: declarationCasts,
         implicitCasts: implicitCasts,
         implicitDynamic: implicitDynamic,
diff --git a/pkg/analyzer/test/src/task/strong_mode_test.dart b/pkg/analyzer/test/src/task/strong_mode_test.dart
index 6753adc..8aaff8e 100644
--- a/pkg/analyzer/test/src/task/strong_mode_test.dart
+++ b/pkg/analyzer/test/src/task/strong_mode_test.dart
@@ -2,8 +2,6 @@
 // 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 analyzer.test.src.task.strong_mode_test;
-
 import 'dart:async';
 
 import 'package:analyzer/dart/element/element.dart';
@@ -468,7 +466,7 @@
     VariableFilter filter = (variable) => true;
     VariableGatherer gatherer = new VariableGatherer(filter);
     expect(gatherer, isNotNull);
-    expect(gatherer.filter, filter);
+    expect(gatherer.filter, same(filter));
   }
 
   test_creation_withoutFilter() async {
diff --git a/pkg/analyzer_cli/lib/src/options.dart b/pkg/analyzer_cli/lib/src/options.dart
index 76bc78f..285f328 100644
--- a/pkg/analyzer_cli/lib/src/options.dart
+++ b/pkg/analyzer_cli/lib/src/options.dart
@@ -393,15 +393,13 @@
           defaultsTo: false,
           negatable: false,
           hide: hide)
-      ..addOption('build-summary-input',
+      ..addMultiOption('build-summary-input',
           help: 'Path to a linked summary file that contains information from '
               'a previous analysis run; may be specified multiple times.',
-          allowMultiple: true,
           hide: hide)
-      ..addOption('build-summary-unlinked-input',
+      ..addMultiOption('build-summary-unlinked-input',
           help: 'Path to an unlinked summary file that contains information '
               'from a previous analysis run; may be specified multiple times.',
-          allowMultiple: true,
           hide: hide)
       ..addOption('build-summary-output',
           help: 'Specifies the path to the file where the full summary '
@@ -508,11 +506,10 @@
           defaultsTo: false,
           negatable: false,
           hide: hide)
-      ..addOption('url-mapping',
+      ..addMultiOption('url-mapping',
           help: '--url-mapping=libraryUri,/path/to/library.dart directs the '
               'analyzer to use "library.dart" as the source for an import '
               'of "libraryUri".',
-          allowMultiple: true,
           splitCommas: false,
           hide: hide)
       ..addFlag('use-cfe',
diff --git a/pkg/compiler/lib/src/elements/resolution_types.dart b/pkg/compiler/lib/src/elements/resolution_types.dart
index 4ecaf3b..e2f677a 100644
--- a/pkg/compiler/lib/src/elements/resolution_types.dart
+++ b/pkg/compiler/lib/src/elements/resolution_types.dart
@@ -132,6 +132,9 @@
   @override
   bool get isFunctionTypeVariable => false;
 
+  @override
+  bool get isFutureOr => false;
+
   /// Is [: true :] if this type is a malformed type.
   bool get isMalformed => false;
 
diff --git a/pkg/compiler/lib/src/elements/types.dart b/pkg/compiler/lib/src/elements/types.dart
index 13514a2..3da214e 100644
--- a/pkg/compiler/lib/src/elements/types.dart
+++ b/pkg/compiler/lib/src/elements/types.dart
@@ -65,6 +65,9 @@
   ///     void Function<T>(T t)
   bool get isFunctionTypeVariable => false;
 
+  /// Is `true` if this type is a `FutureOr` type.
+  bool get isFutureOr => false;
+
   /// Is `true` if this type is a malformed type.
   bool get isMalformed => false;
 
@@ -188,7 +191,7 @@
   bool operator ==(other) {
     if (identical(this, other)) return true;
     if (other is! InterfaceType) return false;
-    return _equals(other, null);
+    return _equalsInternal(other, null);
   }
 
   bool _equals(DartType other, _Assumptions assumptions) {
@@ -425,7 +428,7 @@
   bool operator ==(other) {
     if (identical(this, other)) return true;
     if (other is! FunctionTypeVariable) return false;
-    return _equals(other, null);
+    return false;
   }
 
   @override
@@ -728,6 +731,52 @@
   }
 }
 
+class FutureOrType extends DartType {
+  final DartType typeArgument;
+
+  FutureOrType(this.typeArgument);
+
+  @override
+  bool get isFutureOr => true;
+
+  @override
+  DartType subst(List<DartType> arguments, List<DartType> parameters) {
+    DartType newTypeArgument = typeArgument.subst(arguments, parameters);
+    if (identical(typeArgument, newTypeArgument)) return this;
+    return new FutureOrType(newTypeArgument);
+  }
+
+  R accept<R, A>(DartTypeVisitor<R, A> visitor, A argument) =>
+      visitor.visitFutureOrType(this, argument);
+
+  int get hashCode => typeArgument.hashCode * 13;
+
+  bool operator ==(other) {
+    if (identical(this, other)) return true;
+    if (other is! FutureOrType) return false;
+    return _equalsInternal(other, null);
+  }
+
+  bool _equals(DartType other, _Assumptions assumptions) {
+    if (identical(this, other)) return true;
+    if (other is! FutureOrType) return false;
+    return _equalsInternal(other, assumptions);
+  }
+
+  bool _equalsInternal(FutureOrType other, _Assumptions assumptions) {
+    return typeArgument._equals(other.typeArgument, assumptions);
+  }
+
+  String toString() {
+    StringBuffer sb = new StringBuffer();
+    sb.write('FutureOr');
+    sb.write('<');
+    sb.write(typeArgument);
+    sb.write('>');
+    return sb.toString();
+  }
+}
+
 /// Helper method for performing substitution of a list of types.
 ///
 /// If no types are changed by the substitution, the [types] is returned
@@ -778,6 +827,8 @@
   R visitTypedefType(covariant TypedefType type, A argument) => null;
 
   R visitDynamicType(covariant DynamicType type, A argument) => null;
+
+  R visitFutureOrType(covariant FutureOrType type, A argument) => null;
 }
 
 abstract class BaseDartTypeVisitor<R, A> extends DartTypeVisitor<R, A> {
@@ -809,6 +860,10 @@
   @override
   R visitDynamicType(covariant DynamicType type, A argument) =>
       visitType(type, argument);
+
+  @override
+  R visitFutureOrType(covariant FutureOrType type, A argument) =>
+      visitType(type, argument);
 }
 
 /// Abstract visitor for determining relations between types.
@@ -1078,13 +1133,31 @@
   bool invalidCallableType(covariant DartType callType, covariant DartType s) {
     return !isMoreSpecific(callType, s);
   }
+
+  bool visitFutureOrType(FutureOrType t, covariant DartType s) {
+    return false;
+  }
 }
 
 /// Type visitor that determines the subtype relation two types.
 abstract class SubtypeVisitor<T extends DartType>
     extends MoreSpecificVisitor<T> {
-  bool isSubtype(T t, T s) {
-    return t.treatAsDynamic || isMoreSpecific(t, s);
+  bool isSubtype(DartType t, DartType s) {
+    if (t.treatAsDynamic) return true;
+    if (s.isFutureOr) {
+      FutureOrType sFutureOr = s;
+      if (isSubtype(t, sFutureOr.typeArgument)) {
+        return true;
+      } else if (t.isInterfaceType) {
+        InterfaceType tInterface = t;
+        if (tInterface.element == commonElements.futureClass &&
+            isSubtype(
+                tInterface.typeArguments.single, sFutureOr.typeArgument)) {
+          return true;
+        }
+      }
+    }
+    return isMoreSpecific(t, s);
   }
 
   bool isAssignable(T t, T s) {
@@ -1110,6 +1183,14 @@
   bool invalidCallableType(covariant DartType callType, covariant DartType s) {
     return !isSubtype(callType, s);
   }
+
+  bool visitFutureOrType(FutureOrType t, covariant DartType s) {
+    if (s.isFutureOr) {
+      FutureOrType sFutureOr = s;
+      return isSubtype(t.typeArgument, sFutureOr.typeArgument);
+    }
+    return false;
+  }
 }
 
 /// Type visitor that determines one type could a subtype of another given the
@@ -1117,7 +1198,7 @@
 /// `false` only if we are sure no such substitution exists.
 abstract class PotentialSubtypeVisitor<T extends DartType>
     extends SubtypeVisitor<T> {
-  bool isSubtype(T t, T s) {
+  bool isSubtype(DartType t, DartType s) {
     if (t is TypeVariableType || s is TypeVariableType) {
       return true;
     }
diff --git a/pkg/compiler/lib/src/inferrer/type_system.dart b/pkg/compiler/lib/src/inferrer/type_system.dart
index 04f691f..a4fbfd7 100644
--- a/pkg/compiler/lib/src/inferrer/type_system.dart
+++ b/pkg/compiler/lib/src/inferrer/type_system.dart
@@ -334,6 +334,9 @@
       }
     } else if (annotation.isTypedef || annotation.isFunctionType) {
       otherType = functionType.type;
+    } else if (annotation.isFutureOr) {
+      // TODO(johnniwinther): Support narrowing of FutureOr.
+      return type;
     } else {
       assert(annotation.isTypeVariable);
       // TODO(ngeoffray): Narrow to bound.
diff --git a/pkg/compiler/lib/src/js_backend/runtime_types.dart b/pkg/compiler/lib/src/js_backend/runtime_types.dart
index e67afa3..9b357d1 100644
--- a/pkg/compiler/lib/src/js_backend/runtime_types.dart
+++ b/pkg/compiler/lib/src/js_backend/runtime_types.dart
@@ -2100,6 +2100,12 @@
       return finish(visit(unaliasedType, emitter));
     }
   }
+
+  @override
+  jsAst.Expression visitFutureOrType(FutureOrType type, Emitter argument) {
+    // TODO(johnniwinther,sigmund): Implement runtime semantics for `FutureOr`.
+    return getDynamicValue();
+  }
 }
 
 class TypeCheckMapping implements TypeChecks {
diff --git a/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart
index b945d93..f7489b2 100644
--- a/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart
+++ b/pkg/compiler/lib/src/js_emitter/parameter_stub_generator.dart
@@ -74,6 +74,8 @@
 
     ParameterStructure parameterStructure = member.parameterStructure;
     int positionalArgumentCount = callStructure.positionalArgumentCount;
+    assert(callStructure.typeArgumentCount == 0 ||
+        callStructure.typeArgumentCount == parameterStructure.typeParameters);
     bool needsTypeArguments =
         callStructure.typeArgumentCount != parameterStructure.typeParameters;
     if (positionalArgumentCount == parameterStructure.totalParameters &&
@@ -109,7 +111,7 @@
     List<jsAst.Expression> argumentsBuffer = new List<jsAst.Expression>(
         parameterStructure.totalParameters +
             extraArgumentCount +
-            parameterStructure.typeParameters);
+            (needsTypeArguments ? parameterStructure.typeParameters : 0));
 
     int count = 0;
     if (isInterceptedMethod) {
diff --git a/pkg/compiler/lib/src/js_model/elements.dart b/pkg/compiler/lib/src/js_model/elements.dart
index c6e9710..3e762b9 100644
--- a/pkg/compiler/lib/src/js_model/elements.dart
+++ b/pkg/compiler/lib/src/js_model/elements.dart
@@ -285,6 +285,11 @@
   DartType visitVoidType(VoidType type, EntityConverter converter) {
     return const VoidType();
   }
+
+  @override
+  DartType visitFutureOrType(FutureOrType type, EntityConverter converter) {
+    return new FutureOrType(visit(type.typeArgument, converter));
+  }
 }
 
 const String jsElementPrefix = 'j:';
diff --git a/pkg/compiler/lib/src/kernel/element_map.dart b/pkg/compiler/lib/src/kernel/element_map.dart
index cc058e6..48a25e7 100644
--- a/pkg/compiler/lib/src/kernel/element_map.dart
+++ b/pkg/compiler/lib/src/kernel/element_map.dart
@@ -130,7 +130,7 @@
   ///
   /// The main method of the first component is used as the main method for the
   /// compilation.
-  void addProgram(ir.Component component);
+  void addComponent(ir.Component component);
 
   /// Returns the [ConstructorEntity] corresponding to a super initializer in
   /// [constructor].
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index ccec600..e00692e 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -1220,8 +1220,8 @@
   ///
   /// The main method of the first component is used as the main method for the
   /// compilation.
-  void addProgram(ir.Component component) {
-    _env.addProgram(component);
+  void addComponent(ir.Component component) {
+    _env.addComponent(component);
   }
 
   @override
@@ -1706,10 +1706,12 @@
   @override
   DartType visitInterfaceType(ir.InterfaceType node) {
     ClassEntity cls = elementMap.getClass(node.classNode);
-    // TODO(johnniwinther): We currently encode 'FutureOr' as a dynamic type.
-    // Update the subtyping implementations to handle 'FutureOr' correctly.
     if (cls.name == 'FutureOr' &&
         cls.library == elementMap.commonElements.asyncLibrary) {
+      if (elementMap.options.strongMode) {
+        return new FutureOrType(visitTypes(node.typeArguments).single);
+      }
+      // In Dart 1 we encode 'FutureOr' as a dynamic type.
       return const DynamicType();
     }
     return new InterfaceType(cls, visitTypes(node.typeArguments));
diff --git a/pkg/compiler/lib/src/kernel/env.dart b/pkg/compiler/lib/src/kernel/env.dart
index 0870b99..37d3e65 100644
--- a/pkg/compiler/lib/src/kernel/env.dart
+++ b/pkg/compiler/lib/src/kernel/env.dart
@@ -25,15 +25,15 @@
 
 /// Environment for fast lookup of component libraries.
 class ProgramEnv {
-  final Set<ir.Component> _programs = new Set<ir.Component>();
+  final Set<ir.Component> _components = new Set<ir.Component>();
 
   Map<Uri, LibraryEnv> _libraryMap;
 
   /// TODO(johnniwinther): Handle arbitrary load order if needed.
-  ir.Member get mainMethod => _programs.first?.mainMethod;
+  ir.Member get mainMethod => _components.first?.mainMethod;
 
-  void addProgram(ir.Component component) {
-    if (_programs.add(component)) {
+  void addComponent(ir.Component component) {
+    if (_components.add(component)) {
       if (_libraryMap != null) {
         _addLibraries(component);
       }
@@ -49,7 +49,7 @@
   void _ensureLibraryMap() {
     if (_libraryMap == null) {
       _libraryMap = <Uri, LibraryEnv>{};
-      for (ir.Component component in _programs) {
+      for (ir.Component component in _components) {
         _addLibraries(component);
       }
     }
diff --git a/pkg/compiler/lib/src/library_loader.dart b/pkg/compiler/lib/src/library_loader.dart
index ace0223..e6e2ea8 100644
--- a/pkg/compiler/lib/src/library_loader.dart
+++ b/pkg/compiler/lib/src/library_loader.dart
@@ -884,7 +884,7 @@
 
   // Only visible for unit testing.
   LoadedLibraries createLoadedLibraries(ir.Component component) {
-    _elementMap.addProgram(component);
+    _elementMap.addComponent(component);
     LibraryEntity rootLibrary = null;
     Iterable<ir.Library> libraries = component.libraries;
     if (component.mainMethod != null) {
diff --git a/pkg/compiler/lib/src/old_to_new_api.dart b/pkg/compiler/lib/src/old_to_new_api.dart
index 160739d..78f85d1 100644
--- a/pkg/compiler/lib/src/old_to_new_api.dart
+++ b/pkg/compiler/lib/src/old_to_new_api.dart
@@ -8,6 +8,7 @@
 library compiler.api.legacy;
 
 import 'dart:async' show EventSink, Future;
+import 'dart:convert' show utf8;
 
 import '../compiler.dart';
 import '../compiler_new.dart';
@@ -37,7 +38,7 @@
           return sourceFile;
         case InputKind.binary:
           if (data is String) {
-            data = data.codeUnits;
+            data = utf8.encode(data);
           }
           return new Binary(uri, data);
       }
diff --git a/pkg/compiler/lib/src/parser/element_listener.dart b/pkg/compiler/lib/src/parser/element_listener.dart
index 4a2634a..0658333 100644
--- a/pkg/compiler/lib/src/parser/element_listener.dart
+++ b/pkg/compiler/lib/src/parser/element_listener.dart
@@ -386,6 +386,18 @@
   }
 
   @override
+  void beginTopLevelMethod(Token lastConsumed, Token externalToken) {
+    if (externalToken == null) {
+      pushNode(Modifiers.EMPTY);
+    } else {
+      Link<Node> poppedNodes = const Link<Node>();
+      poppedNodes = poppedNodes.prepend(new Identifier(externalToken));
+      NodeList modifierNodes = new NodeList(null, poppedNodes, null, ' ');
+      pushNode(new Modifiers(modifierNodes));
+    }
+  }
+
+  @override
   void endTopLevelMethod(Token beginToken, Token getOrSet, Token endToken) {
     bool hasParseError = currentMemberHasParseError;
     memberErrors = memberErrors.tail;
diff --git a/pkg/compiler/lib/src/parser/node_listener.dart b/pkg/compiler/lib/src/parser/node_listener.dart
index 940a35b..54d308e 100644
--- a/pkg/compiler/lib/src/parser/node_listener.dart
+++ b/pkg/compiler/lib/src/parser/node_listener.dart
@@ -550,7 +550,7 @@
     // The name can be an identifier or a send in case of named constructors.
     Expression name = popNode();
     TypeAnnotation type = popNode();
-    Modifiers modifiers = popNode();
+    Modifiers modifiers = new Modifiers(new NodeList.empty());
     NodeList typeVariables = popNode();
     pushNode(new FunctionExpression(name, typeVariables, formals, body, type,
         modifiers, initializers, null, asyncModifier));
@@ -565,7 +565,7 @@
     // The name can be an identifier or a send in case of named constructors.
     Expression name = popNode();
     TypeAnnotation type = popNode();
-    Modifiers modifiers = popNode();
+    Modifiers modifiers = new Modifiers(new NodeList.empty());
     NodeList typeVariables = popNode();
     pushNode(new FunctionDeclaration(new FunctionExpression(name, typeVariables,
         formals, body, type, modifiers, initializers, null, asyncModifier)));
@@ -1009,6 +1009,27 @@
   }
 
   @override
+  void beginFactoryMethod(
+      Token lastConsumed, Token externalToken, Token constToken) {
+    if (externalToken != null) {
+      Link<Node> poppedNodes = const Link<Node>();
+      if (constToken != null) {
+        poppedNodes = poppedNodes.prepend(new Identifier(constToken));
+      }
+      poppedNodes = poppedNodes.prepend(new Identifier(externalToken));
+      NodeList modifierNodes = new NodeList(null, poppedNodes, null, ' ');
+      pushNode(new Modifiers(modifierNodes));
+    } else if (constToken != null) {
+      Link<Node> poppedNodes = const Link<Node>();
+      poppedNodes = poppedNodes.prepend(new Identifier(constToken));
+      NodeList modifierNodes = new NodeList(null, poppedNodes, null, ' ');
+      pushNode(new Modifiers(modifierNodes));
+    } else {
+      pushNode(Modifiers.EMPTY);
+    }
+  }
+
+  @override
   void endFactoryMethod(
       Token beginToken, Token factoryKeyword, Token endToken) {
     super.endFactoryMethod(beginToken, factoryKeyword, endToken);
diff --git a/pkg/compiler/lib/src/serialization/equivalence.dart b/pkg/compiler/lib/src/serialization/equivalence.dart
index 06b0dc3..65f12d5 100644
--- a/pkg/compiler/lib/src/serialization/equivalence.dart
+++ b/pkg/compiler/lib/src/serialization/equivalence.dart
@@ -723,6 +723,12 @@
       FunctionTypeVariable type, ResolutionDartType other) {
     throw new UnsupportedError("Function type variables are not supported.");
   }
+
+  @override
+  bool visitFutureOrType(
+      covariant FutureOrType type, covariant ResolutionDartType other) {
+    throw new UnsupportedError("FutureOr is not supported.");
+  }
 }
 
 /// Visitor that checks for structural equivalence of [ConstantExpression]s.
diff --git a/pkg/compiler/lib/src/ssa/nodes.dart b/pkg/compiler/lib/src/ssa/nodes.dart
index 5033547..9bdd008 100644
--- a/pkg/compiler/lib/src/ssa/nodes.dart
+++ b/pkg/compiler/lib/src/ssa/nodes.dart
@@ -1348,6 +1348,9 @@
     if (type.isFunctionType || type.isMalformed) {
       return new HTypeConversion(type, kind,
           closedWorld.commonMasks.dynamicType, this, sourceInformation);
+    } else if (type.isFutureOr) {
+      // TODO(johnniwinther): Handle conversion to FutureOr.
+      return this;
     }
     assert(type.isInterfaceType);
     if (kind == HTypeConversion.BOOLEAN_CONVERSION_CHECK) {
diff --git a/pkg/dev_compiler/lib/src/analyzer/code_generator.dart b/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
index 239e873..43580d4 100644
--- a/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/code_generator.dart
@@ -461,13 +461,23 @@
       e is PropertyInducingElement &&
           ((e.getter?.isExternal ?? false) || (e.setter?.isExternal ?? false));
 
-  bool _isJSElement(Element e) =>
+  /// Returns true iff this element is a JS interop member.
+  ///
+  /// The element's library must have `@JS(...)` annotation from `package:js`.
+  ///
+  /// If the element is a class, it must also be marked with `@JS`. Other
+  /// elements, such as class members and top-level functions/accessors, should
+  /// be marked `external`.
+  //
+  // TODO(jmesserly): if the element is a member, shouldn't we check that the
+  // class is a JS interop class?
+  bool _usesJSInterop(Element e) =>
       e?.library != null &&
-      _isJSNative(e.library) &&
-      (_isExternal(e) || e is ClassElement && _isJSNative(e));
+      _hasJSInteropAnnotation(e.library) &&
+      (_isExternal(e) || e is ClassElement && _hasJSInteropAnnotation(e));
 
   String _getJSNameWithoutGlobal(Element e) {
-    if (!_isJSElement(e)) return null;
+    if (!_usesJSInterop(e)) return null;
     var libraryJSName = getAnnotationName(e.library, isPublicJSAnnotation);
     var jsName =
         getAnnotationName(e, isPublicJSAnnotation) ?? _getElementName(e);
@@ -492,7 +502,7 @@
   }
 
   JS.Expression _emitJSInteropStaticMemberName(Element e) {
-    if (!_isJSElement(e)) return null;
+    if (!_usesJSInterop(e)) return null;
     var name = getAnnotationName(e, isPublicJSAnnotation);
     if (name != null) {
       if (name.contains('.')) {
@@ -873,7 +883,7 @@
   JS.Statement _emitClassDeclaration(Declaration classNode,
       ClassElement classElem, List<ClassMember> members) {
     // If this class is annotated with `@JS`, then there is nothing to emit.
-    if (findAnnotation(classElem, isPublicJSAnnotation) != null) return null;
+    if (_hasJSInteropAnnotation(classElem)) return null;
 
     // If this is a JavaScript type, emit it now and then exit.
     var jsTypeDef = _emitJSType(classElem);
@@ -921,7 +931,7 @@
     body.addAll(jsCtors);
 
     // Emit things that come after the ES6 `class ... { ... }`.
-    var jsPeerNames = _getJSPeerNames(classElem);
+    var jsPeerNames = _extensionTypes.getNativePeers(classElem);
     if (jsPeerNames.length == 1 && classElem.typeParameters.isNotEmpty) {
       // Special handling for JSArray<E>
       body.add(_callHelperStatement('setExtensionBaseClass(#, #.global.#);',
@@ -1466,7 +1476,7 @@
     var virtualFields = _classProperties.virtualFields;
 
     var jsMethods = <JS.Method>[];
-    bool hasJsPeer = findAnnotation(classElem, isJsPeerInterface) != null;
+    bool hasJsPeer = _extensionTypes.isNativeClass(classElem);
     bool hasIterator = false;
 
     if (type.isObject) {
@@ -1875,25 +1885,6 @@
     }
   }
 
-  /// Gets the JS peer for this Dart type if any, otherwise null.
-  ///
-  /// For example for dart:_interceptors `JSArray` this will return "Array",
-  /// referring to the JavaScript built-in `Array` type.
-  List<String> _getJSPeerNames(ClassElement classElem) {
-    var jsPeerNames = getAnnotationName(
-        classElem,
-        (a) =>
-            isJsPeerInterface(a) ||
-            isNativeAnnotation(a) && _extensionTypes.isNativeClass(classElem));
-    if (classElem.type.isObject) return ['Object'];
-    if (jsPeerNames == null) return [];
-
-    // Omit the special name "!nonleaf" and any future hacks starting with "!"
-    var result =
-        jsPeerNames.split(',').where((peer) => !peer.startsWith("!")).toList();
-    return result;
-  }
-
   void _registerExtensionType(
       ClassElement classElem, String jsPeerName, List<JS.Statement> body) {
     var className = _emitTopLevelName(classElem);
@@ -2015,7 +2006,7 @@
       var type = classElem.type;
       void addField(FieldElement e, JS.Expression value) {
         var args = [
-          _emitStaticAccess(classElem),
+          _emitStaticClassName(classElem),
           _declareMemberName(e.getter),
           value
         ];
@@ -2033,7 +2024,7 @@
         if (f.type != type) continue;
         // static const E id_i = const E(i);
         values.add(new JS.PropertyAccess(
-            _emitStaticAccess(classElem), _declareMemberName(f.getter)));
+            _emitStaticClassName(classElem), _declareMemberName(f.getter)));
         var enumValue = _callHelper('const(new (#.#)(#))', [
           _emitConstructorAccess(type),
           _constructorName(''),
@@ -2051,7 +2042,8 @@
         .map((f) => members[f] as VariableDeclaration)
         .toList();
     if (lazyStatics.isNotEmpty) {
-      body.add(_emitLazyFields(_emitTopLevelName(classElem), lazyStatics));
+      body.add(_emitLazyFields(_emitStaticClassName(classElem), lazyStatics,
+          (e) => _emitStaticMemberName(e.name, e)));
     }
   }
 
@@ -3105,12 +3097,20 @@
 
       // A static native element should just forward directly to the
       // JS type's member.
+      //
+      // TODO(jmesserly): this code path seems broken. It doesn't exist
+      // elsewhere, such as [_emitAccess], so it will only take affect for
+      // unqualified static access inside of the the same class.
+      //
+      // If we want this feature to work, we'll need to implement it in the
+      // standard [_emitStaticClassName] code path, which will need to know the
+      // member we're calling so it can determine whether to use the Dart class
+      // name or the native JS class name.
       if (isStatic && _isExternal(element)) {
-        var nativeName = getAnnotationName(classElem, isNativeAnnotation);
-        if (nativeName != null) {
+        var nativeName = _extensionTypes.getNativePeers(classElem);
+        if (nativeName.isNotEmpty) {
           var memberName = getAnnotationName(element, isJSName) ?? member;
-          return js
-              .call('#.#.#', [_callHelper('global'), nativeName, memberName]);
+          return _callHelper('global.#.#', [nativeName[0], memberName]);
         }
       }
 
@@ -3118,16 +3118,16 @@
       // For method tear-offs, we ensure it's a bound method.
       if (element is MethodElement &&
           !inInvocationContext(node) &&
-          !_isJSNative(classElem)) {
+          !_hasJSInteropAnnotation(classElem)) {
         if (isStatic) {
           // TODO(jmesserly): instead of looking up the function type, we could
           // simply emit it here.
           return _callHelper(
-              'tagStatic(#, #)', [_emitStaticAccess(classElem), member]);
+              'tagStatic(#, #)', [_emitStaticClassName(classElem), member]);
         }
         return _callHelper('bind(this, #)', member);
       }
-      var target = isStatic ? _emitStaticAccess(classElem) : new JS.This();
+      var target = isStatic ? _emitStaticClassName(classElem) : new JS.This();
       return new JS.PropertyAccess(target, member);
     }
 
@@ -3318,10 +3318,10 @@
     return _emitJSInterop(type.element) ?? _emitType(type, nameType: nameType);
   }
 
-  /// Emits an expression that lets you access statics on an [element] from code.
-  JS.Expression _emitStaticAccess(ClassElement element) {
-    _declareBeforeUse(element);
-    return _emitTopLevelName(element);
+  /// Emits an expression that lets you access statics on an [c] from code.
+  JS.Expression _emitStaticClassName(ClassElement c) {
+    _declareBeforeUse(c);
+    return _emitTopLevelName(c);
   }
 
   /// Emits a Dart [type] into code.
@@ -3406,9 +3406,17 @@
   }
 
   JS.PropertyAccess _emitTopLevelNameNoInterop(Element e, {String suffix: ''}) {
-    var name = getJSExportName(e) ?? _getElementName(e);
     return new JS.PropertyAccess(
-        emitLibraryName(e.library), _propertyName(name + suffix));
+        emitLibraryName(e.library), _emitTopLevelMemberName(e, suffix: suffix));
+  }
+
+  /// Emits the member name portion of a top-level member.
+  ///
+  /// NOTE: usually you should use [_emitTopLevelName] instead of this. This
+  /// function does not handle JS interop.
+  JS.Expression _emitTopLevelMemberName(Element e, {String suffix: ''}) {
+    var name = getJSExportName(e) ?? _getElementName(e);
+    return _propertyName(name + suffix);
   }
 
   @override
@@ -3592,7 +3600,7 @@
     var member = _emitMemberName(field.name,
         isStatic: isStatic, type: classElem.type, element: field.setter);
     jsTarget = isStatic
-        ? (new JS.PropertyAccess(_emitStaticAccess(classElem), member)
+        ? (new JS.PropertyAccess(_emitStaticClassName(classElem), member)
           ..sourceInformation = _nodeSpan(id))
         : _emitTargetAccess(jsTarget, member, field.setter, id);
     return _visitExpression(right).toAssignExpression(jsTarget);
@@ -3688,12 +3696,12 @@
       if (member is PropertyAccessorElement) {
         var field = member.variable;
         if (field is FieldElement) {
-          return _emitStaticAccess(field.enclosingElement)
+          return _emitStaticClassName(field.enclosingElement)
             ..sourceInformation = _nodeSpan(target);
         }
       }
       if (member is MethodElement) {
-        return _emitStaticAccess(member.enclosingElement)
+        return _emitStaticClassName(member.enclosingElement)
           ..sourceInformation = _nodeSpan(target);
       }
     }
@@ -4241,7 +4249,8 @@
 
   /// Emits a list of top-level field.
   void _emitTopLevelFields(List<VariableDeclaration> fields) {
-    _moduleItems.add(_emitLazyFields(emitLibraryName(currentLibrary), fields));
+    _moduleItems.add(_emitLazyFields(
+        emitLibraryName(currentLibrary), fields, _emitTopLevelMemberName));
   }
 
   /// Treat dart:_runtime fields as safe to eagerly evaluate.
@@ -4284,18 +4293,19 @@
   }
 
   JS.Statement _emitLazyFields(
-      JS.Expression objExpr, List<VariableDeclaration> fields) {
+      JS.Expression objExpr,
+      List<VariableDeclaration> fields,
+      JS.Expression Function(Element e) emitFieldName) {
     var accessors = <JS.Method>[];
 
     for (var node in fields) {
-      var name = node.name.name;
       var element = node.element;
-      var access = _emitStaticMemberName(name, element);
+      var access = emitFieldName(element);
       accessors.add(closureAnnotate(
           new JS.Method(
               access,
               js.call('function() { return #; }',
-                  _visitInitializer(node.initializer, node.element)) as JS.Fun,
+                  _visitInitializer(node.initializer, element)) as JS.Fun,
               isGetter: true)
             ..sourceInformation = _hoverComment(
                 new JS.PropertyAccess(objExpr, access), node.name),
@@ -4390,7 +4400,7 @@
       // Native factory constructors are JS constructors - use new here.
       var ctor = _emitConstructorName(element, type);
       if (ctorNode != null) ctor.sourceInformation = _nodeSpan(ctorNode);
-      return element.isFactory && !_isJSNative(classElem)
+      return element.isFactory && !_hasJSInteropAnnotation(classElem)
           ? new JS.Call(ctor, args)
           : new JS.New(ctor, args);
     }
@@ -4399,11 +4409,22 @@
   }
 
   bool _isObjectLiteral(Element classElem) {
-    return _isJSNative(classElem) &&
+    return _hasJSInteropAnnotation(classElem) &&
         findAnnotation(classElem, isJSAnonymousAnnotation) != null;
   }
 
-  bool _isJSNative(Element e) =>
+  /// Returns true iff the class has an `@JS(...)` annotation from `package:js`.
+  ///
+  /// Note: usually [_usesJSInterop] should be used instead of this.
+  //
+  // TODO(jmesserly): I think almost all uses of this should be replaced with
+  // [_usesJSInterop], which also checks that the library is marked with `@JS`.
+  //
+  // Right now we have inconsistencies: sometimes we'll respect `@JS` on the
+  // class itself, other places we require it on the library. Also members are
+  // inconsistent: sometimes they need to have `@JS` on them, other times they
+  // need to be `external` in an `@JS` class.
+  bool _hasJSInteropAnnotation(Element e) =>
       findAnnotation(e, isPublicJSAnnotation) != null;
 
   JS.Expression _emitObjectLiteral(ArgumentList argumentList) {
@@ -5219,7 +5240,7 @@
         result = _callHelper('#(#)', [memberName, jsTarget]);
       }
     } else if (accessor is MethodElement &&
-        !_isJSNative(accessor.enclosingElement)) {
+        !_hasJSInteropAnnotation(accessor.enclosingElement)) {
       if (isStatic) {
         result = _callHelper('tagStatic(#, #)', [jsTarget, jsName]);
       } else if (isSuper) {
diff --git a/pkg/dev_compiler/lib/src/analyzer/element_helpers.dart b/pkg/dev_compiler/lib/src/analyzer/element_helpers.dart
index e595819..1a0658c 100644
--- a/pkg/dev_compiler/lib/src/analyzer/element_helpers.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/element_helpers.dart
@@ -246,3 +246,12 @@
   }
   return false;
 }
+
+bool isBuiltinAnnotation(
+    DartObjectImpl value, String libraryName, String annotationName) {
+  var e = value?.type?.element;
+  if (e?.name != annotationName) return false;
+  var uri = e.source.uri;
+  var path = uri.pathSegments[0];
+  return uri.scheme == 'dart' && path == libraryName;
+}
diff --git a/pkg/dev_compiler/lib/src/analyzer/extension_types.dart b/pkg/dev_compiler/lib/src/analyzer/extension_types.dart
index 53463fa..b816065 100644
--- a/pkg/dev_compiler/lib/src/analyzer/extension_types.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/extension_types.dart
@@ -7,6 +7,7 @@
     show ClassElement, CompilationUnitElement, Element;
 import 'package:analyzer/dart/element/type.dart' show DartType, InterfaceType;
 import 'package:analyzer/src/generated/engine.dart' show AnalysisContext;
+import 'element_helpers.dart' show getAnnotationName, isBuiltinAnnotation;
 
 /// Contains information about native JS types (those types provided by the
 /// implementation) that are also provided by the Dart SDK.
@@ -150,4 +151,21 @@
 
   bool hasNativeSubtype(DartType type) =>
       isNativeInterface(type.element) || isNativeClass(type.element);
+
+  /// Gets the JS peer for this Dart type if any, otherwise null.
+  ///
+  /// For example for dart:_interceptors `JSArray` this will return "Array",
+  /// referring to the JavaScript built-in `Array` type.
+  List<String> getNativePeers(ClassElement classElem) {
+    if (classElem.type.isObject) return ['Object'];
+    var names = getAnnotationName(
+        classElem,
+        (a) =>
+            isBuiltinAnnotation(a, '_js_helper', 'JsPeerInterface') ||
+            isBuiltinAnnotation(a, '_js_helper', 'Native'));
+    if (names == null) return [];
+
+    // Omit the special name "!nonleaf" and any future hacks starting with "!"
+    return names.split(',').where((peer) => !peer.startsWith("!")).toList();
+  }
 }
diff --git a/pkg/dev_compiler/lib/src/analyzer/js_interop.dart b/pkg/dev_compiler/lib/src/analyzer/js_interop.dart
index 4e76a27..f0ab80b9 100644
--- a/pkg/dev_compiler/lib/src/analyzer/js_interop.dart
+++ b/pkg/dev_compiler/lib/src/analyzer/js_interop.dart
@@ -18,6 +18,8 @@
   var uri = e.source.uri;
   if (uri.scheme == 'package' && uri.path.startsWith('js/')) return true;
   if (uri.scheme == 'dart') {
+    // TODO(jmesserly): this needs cleanup: many of the annotations don't exist
+    // in these libraries.
     return uri.path == '_js_helper' || uri.path == '_foreign_helper';
   }
   return false;
@@ -47,15 +49,6 @@
 bool isJSAnonymousAnnotation(DartObjectImpl value) =>
     _isJsLibType('_Anonymous', value.type.element);
 
-bool isBuiltinAnnotation(
-    DartObjectImpl value, String libraryName, String annotationName) {
-  var e = value?.type?.element;
-  if (e?.name != annotationName) return false;
-  var uri = e.source.uri;
-  var path = uri.pathSegments[0];
-  return uri.scheme == 'dart' && path == libraryName;
-}
-
 /// Whether [value] is a `@JSExportName` (internal annotation used in SDK
 /// instead of `@JS` from `package:js`).
 bool isJSExportNameAnnotation(DartObjectImpl value) =>
@@ -64,12 +57,6 @@
 bool isJSName(DartObjectImpl value) =>
     isBuiltinAnnotation(value, '_js_helper', 'JSName');
 
-bool isJsPeerInterface(DartObjectImpl value) =>
-    isBuiltinAnnotation(value, '_js_helper', 'JsPeerInterface');
-
-bool isNativeAnnotation(DartObjectImpl value) =>
-    isBuiltinAnnotation(value, '_js_helper', 'Native');
-
 bool isNotNullAnnotation(DartObjectImpl value) =>
     isBuiltinAnnotation(value, '_js_helper', '_NotNull');
 
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index d3f8a9f..143c646 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -431,19 +431,27 @@
     assert(_currentLibrary == null);
     _currentLibrary = library;
 
-    // `dart:_runtime` uses a different order for bootstrapping.
-    bool bootstrap = isSdkInternalRuntime(library);
-    if (bootstrap) _emitLibraryProcedures(library);
-
-    library.classes.forEach(_emitClass);
-    library.typedefs.forEach(_emitTypedef);
-    if (bootstrap) {
-      _moduleItems.add(_emitInternalSdkFields(library.fields));
-    } else {
+    if (isSdkInternalRuntime(library)) {
+      // `dart:_runtime` uses a different order for bootstrapping.
+      //
+      // Functions are first because we use them to associate type info
+      // (such as `dart.fn`), then classes/typedefs, then fields
+      // (which instantiate classes).
+      //
+      // For other libraries, we start with classes/types, because functions
+      // often use classes/types from the library in their signature.
+      //
+      // TODO(jmesserly): we can merge these once we change signatures to be
+      // lazily associated at the tear-off point for top-level functions.
       _emitLibraryProcedures(library);
-      var fields = library.fields;
-      if (fields.isNotEmpty)
-        _moduleItems.add(_emitLazyFields(emitLibraryName(library), fields));
+      library.classes.forEach(_emitClass);
+      library.typedefs.forEach(_emitTypedef);
+      _emitTopLevelFields(library.fields);
+    } else {
+      library.classes.forEach(_emitClass);
+      library.typedefs.forEach(_emitTypedef);
+      _emitLibraryProcedures(library);
+      _emitTopLevelFields(library.fields);
     }
 
     _currentLibrary = null;
@@ -551,7 +559,7 @@
     body.addAll(jsCtors);
 
     // Emit things that come after the ES6 `class ... { ... }`.
-    var jsPeerNames = _getJSPeerNames(c);
+    var jsPeerNames = _extensionTypes.getNativePeers(c);
     if (jsPeerNames.length == 1 && c.typeParameters.isNotEmpty) {
       // Special handling for JSArray<E>
       body.add(_callHelperStatement('setExtensionBaseClass(#, #.global.#);',
@@ -1102,7 +1110,8 @@
             .toStatement());
       }
     } else if (fields.isNotEmpty) {
-      body.add(_emitLazyFields(_emitTopLevelName(c), fields));
+      body.add(_emitLazyFields(_emitTopLevelName(c), fields,
+          (n) => _emitStaticMemberName(n.name.name)));
     }
   }
 
@@ -1567,7 +1576,7 @@
     var virtualFields = _classProperties.virtualFields;
 
     var jsMethods = <JS.Method>[];
-    bool hasJsPeer = findAnnotation(c, isJsPeerInterface) != null;
+    bool hasJsPeer = _extensionTypes.isNativeClass(c);
     bool hasIterator = false;
 
     if (c == coreTypes.objectClass) {
@@ -2056,25 +2065,6 @@
   JS.Expression _instantiateAnnotation(Expression node) =>
       _visitExpression(node);
 
-  /// Gets the JS peer for this Dart type if any, otherwise null.
-  ///
-  /// For example for dart:_interceptors `JSArray` this will return "Array",
-  /// referring to the JavaScript built-in `Array` type.
-  List<String> _getJSPeerNames(Class c) {
-    var jsPeerNames = getAnnotationName(
-        c,
-        (a) =>
-            isJsPeerInterface(a) ||
-            isNativeAnnotation(a) && _extensionTypes.isNativeClass(c));
-    if (c == coreTypes.objectClass) return ['Object'];
-    if (jsPeerNames == null) return [];
-
-    // Omit the special name "!nonleaf" and any future hacks starting with "!"
-    var result =
-        jsPeerNames.split(',').where((peer) => !peer.startsWith("!")).toList();
-    return result;
-  }
-
   void _registerExtensionType(
       Class c, String jsPeerName, List<JS.Statement> body) {
     var className = _emitTopLevelName(c);
@@ -2115,50 +2105,55 @@
     _moduleItems.add(result);
   }
 
-  /// Treat dart:_runtime fields as safe to eagerly evaluate.
-  // TODO(jmesserly): it'd be nice to avoid this special case.
-  JS.Statement _emitInternalSdkFields(Iterable<Field> fields) {
-    var lazyFields = <Field>[];
-    var savedUri = _currentUri;
+  void _emitTopLevelFields(List<Field> fields) {
+    if (isSdkInternalRuntime(_currentLibrary)) {
+      /// Treat dart:_runtime fields as safe to eagerly evaluate.
+      // TODO(jmesserly): it'd be nice to avoid this special case.
+      var lazyFields = <Field>[];
+      var savedUri = _currentUri;
+      for (var field in fields) {
+        // Skip our magic undefined constant.
+        if (field.name.name == 'undefined') continue;
 
-    for (var field in fields) {
-      // Skip our magic undefined constant.
-      if (field.name.name == 'undefined') continue;
-
-      var init = field.initializer;
-      if (init == null ||
-          init is BasicLiteral ||
-          init is StaticInvocation && isInlineJS(init.target) ||
-          init is ConstructorInvocation &&
-              isSdkInternalRuntime(init.target.enclosingLibrary)) {
-        _currentUri = field.fileUri;
-        _moduleItems.add(js.statement('# = #;', [
-          _emitTopLevelName(field),
-          _visitInitializer(init, field.annotations)
-        ]));
-      } else {
-        lazyFields.add(field);
+        var init = field.initializer;
+        if (init == null ||
+            init is BasicLiteral ||
+            init is StaticInvocation && isInlineJS(init.target) ||
+            init is ConstructorInvocation &&
+                isSdkInternalRuntime(init.target.enclosingLibrary)) {
+          _currentUri = field.fileUri;
+          _moduleItems.add(js.statement('# = #;', [
+            _emitTopLevelName(field),
+            _visitInitializer(init, field.annotations)
+          ]));
+        } else {
+          lazyFields.add(field);
+        }
       }
+
+      _currentUri = savedUri;
+      fields = lazyFields;
     }
 
-    _currentUri = savedUri;
-    return _emitLazyFields(emitLibraryName(_currentLibrary), lazyFields);
+    if (fields.isEmpty) return;
+    _moduleItems.add(_emitLazyFields(
+        emitLibraryName(_currentLibrary), fields, _emitTopLevelMemberName));
   }
 
-  JS.Statement _emitLazyFields(JS.Expression objExpr, Iterable<Field> fields) {
+  JS.Statement _emitLazyFields(JS.Expression objExpr, Iterable<Field> fields,
+      JS.Expression Function(Field f) emitFieldName) {
     var accessors = <JS.Method>[];
     var savedUri = _currentUri;
 
     for (var field in fields) {
       _currentUri = field.fileUri;
-      var name = field.name.name;
-      var access = _emitStaticMemberName(name);
+      var access = emitFieldName(field);
       accessors.add(new JS.Method(access, _emitStaticFieldInitializer(field),
           isGetter: true)
         ..sourceInformation = _hoverComment(
             new JS.PropertyAccess(objExpr, access),
             field.fileOffset,
-            name.length));
+            field.name.name.length));
 
       // TODO(jmesserly): currently uses a dummy setter to indicate writable.
       if (!field.isFinal && !field.isConst) {
@@ -2415,7 +2410,7 @@
   }
 
   JS.Expression _emitJSInteropStaticMemberName(NamedNode n) {
-    if (!isJSElement(n)) return null;
+    if (!usesJSInterop(n)) return null;
     var name = getAnnotationName(n, isPublicJSAnnotation);
     if (name != null) {
       if (name.contains('.')) {
@@ -2431,13 +2426,21 @@
 
   JS.PropertyAccess _emitTopLevelNameNoInterop(NamedNode n,
       {String suffix: ''}) {
+    return new JS.PropertyAccess(emitLibraryName(getLibrary(n)),
+        _emitTopLevelMemberName(n, suffix: suffix));
+  }
+
+  /// Emits the member name portion of a top-level member.
+  ///
+  /// NOTE: usually you should use [_emitTopLevelName] instead of this. This
+  /// function does not handle JS interop.
+  JS.Expression _emitTopLevelMemberName(NamedNode n, {String suffix: ''}) {
     var name = getJSExportName(n) ?? getTopLevelName(n);
-    return new JS.PropertyAccess(
-        emitLibraryName(getLibrary(n)), _propertyName(name + suffix));
+    return _propertyName(name + suffix);
   }
 
   String _getJSNameWithoutGlobal(NamedNode n) {
-    if (!isJSElement(n)) return null;
+    if (!usesJSInterop(n)) return null;
     var libraryJSName = getAnnotationName(getLibrary(n), isPublicJSAnnotation);
     var jsName =
         getAnnotationName(n, isPublicJSAnnotation) ?? getTopLevelName(n);
@@ -2695,8 +2698,8 @@
             _emitConstructorAccess(type), _constructorName(c.name.name));
   }
 
-  /// Emits an expression that lets you access statics on an [element] from code.
-  JS.Expression _emitStaticAccess(Class c) {
+  /// Emits an expression that lets you access statics on an [c] from code.
+  JS.Expression _emitStaticClassName(Class c) {
     _declareBeforeUse(c);
     return _emitTopLevelName(c);
   }
@@ -3799,7 +3802,7 @@
       }
     } else if (member is Procedure &&
         !member.isAccessor &&
-        !_isJSNative(member.enclosingClass)) {
+        !hasJSInteropAnnotation(member.enclosingClass)) {
       return _callHelper('bind(#, #)', [jsReceiver, jsName]);
     } else {
       return new JS.PropertyAccess(jsReceiver, jsName);
@@ -3828,7 +3831,7 @@
     var jsTarget = _emitSuperTarget(target);
     if (target is Procedure &&
         !target.isAccessor &&
-        !_isJSNative(target.enclosingClass)) {
+        !hasJSInteropAnnotation(target.enclosingClass)) {
       return _callHelper('bind(this, #, #)', [jsTarget.selector, jsTarget]);
     }
     return jsTarget;
@@ -4329,7 +4332,7 @@
   JS.Expression _emitStaticTarget(Member target) {
     var c = target.enclosingClass;
     if (c != null) {
-      return new JS.PropertyAccess(_emitStaticAccess(c),
+      return new JS.PropertyAccess(_emitStaticClassName(c),
           _emitStaticMemberName(target.name.name, target));
     }
     return _emitTopLevelName(target);
@@ -4530,7 +4533,7 @@
     var args = node.arguments;
     var ctor = node.target;
     var ctorClass = ctor.enclosingClass;
-    if (ctor.isExternal && _isJSNative(ctorClass)) {
+    if (ctor.isExternal && hasJSInteropAnnotation(ctorClass)) {
       return _emitJSInteropNew(ctor, args);
     }
 
@@ -4607,7 +4610,7 @@
 
   JS.Expression _emitJSInteropNew(Member ctor, Arguments args) {
     var ctorClass = ctor.enclosingClass;
-    if (_isObjectLiteral(ctorClass)) return _emitObjectLiteral(args);
+    if (isJSAnonymousType(ctorClass)) return _emitObjectLiteral(args);
     return new JS.New(_emitConstructorName(ctorClass.rawType, ctor),
         _emitArgumentList(args, types: false));
   }
@@ -4628,12 +4631,6 @@
     return _emitType(new InterfaceType(c, typeArgs));
   }
 
-  bool _isObjectLiteral(Class c) {
-    return _isJSNative(c) && c.annotations.any(isJSAnonymousAnnotation);
-  }
-
-  bool _isJSNative(Class c) => c.annotations.any(isPublicJSAnnotation);
-
   JS.Expression _emitObjectLiteral(Arguments node) {
     var args = _emitArgumentList(node);
     if (args.isEmpty) return js.call('{}');
diff --git a/pkg/dev_compiler/lib/src/kernel/js_interop.dart b/pkg/dev_compiler/lib/src/kernel/js_interop.dart
index 419823b..890edab 100644
--- a/pkg/dev_compiler/lib/src/kernel/js_interop.dart
+++ b/pkg/dev_compiler/lib/src/kernel/js_interop.dart
@@ -45,7 +45,7 @@
 bool isPublicJSAnnotation(Expression value) =>
     _annotationIsFromJSLibrary('JS', value);
 
-bool isJSAnonymousAnnotation(Expression value) =>
+bool _isJSAnonymousAnnotation(Expression value) =>
     _annotationIsFromJSLibrary('_Anonymous', value);
 
 bool _isBuiltinAnnotation(
@@ -80,21 +80,37 @@
     _isBuiltinAnnotation(value, '_js_helper', 'Native');
 
 bool isJSAnonymousType(Class namedClass) {
-  return _isJSNative(namedClass) &&
-      findAnnotation(namedClass, isJSAnonymousAnnotation) != null;
+  return hasJSInteropAnnotation(namedClass) &&
+      findAnnotation(namedClass, _isJSAnonymousAnnotation) != null;
 }
 
-// TODO(jmesserly): rename this after port
-bool isJSElement(NamedNode n) {
+/// Returns true iff the class has an `@JS(...)` annotation from `package:js`.
+///
+/// Note: usually [_usesJSInterop] should be used instead of this.
+//
+// TODO(jmesserly): I think almost all uses of this should be replaced with
+// [_usesJSInterop], which also checks that the library is marked with `@JS`.
+//
+// Right now we have inconsistencies: sometimes we'll respect `@JS` on the
+// class itself, other places we require it on the library. Also members are
+// inconsistent: sometimes they need to have `@JS` on them, other times they
+// need to be `external` in an `@JS` class.
+bool hasJSInteropAnnotation(Class c) => c.annotations.any(isPublicJSAnnotation);
+
+/// Returns true iff this element is a JS interop member.
+///
+/// The element's library must have `@JS(...)` annotation from `package:js`.
+/// If the element is a class, it must also be marked with `@JS`. Other
+/// elements, such as class members and top-level functions/accessors, should
+/// be marked `external`.
+bool usesJSInterop(NamedNode n) {
   var library = getLibrary(n);
   return library != null &&
-      _isJSNative(library) &&
-      (n is Procedure && n.isExternal || n is Class && _isJSNative(n));
+      library.annotations.any(isPublicJSAnnotation) &&
+      (n is Procedure && n.isExternal ||
+          n is Class && n.annotations.any(isPublicJSAnnotation));
 }
 
-bool _isJSNative(NamedNode n) =>
-    findAnnotation(n, isPublicJSAnnotation) != null;
-
 /// Returns the name value of the `JSExportName` annotation (when compiling
 /// the SDK), or `null` if there's none. This is used to control the name
 /// under which functions are compiled and exported.
diff --git a/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart b/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
index 312116b..18fb1a3 100644
--- a/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
+++ b/pkg/dev_compiler/lib/src/kernel/kernel_helpers.dart
@@ -92,6 +92,14 @@
 /// If [node] has annotation matching [test] and the first argument is a
 /// string, this returns the string value.
 ///
+/// Calls [findAnnotation] followed by [getNameFromAnnotation].
+String getAnnotationName(NamedNode node, bool test(Expression value)) {
+  return getNameFromAnnotation(findAnnotation(node, test));
+}
+
+/// If [node] is an annotation and the first argument is a string, this returns
+/// the string value.
+///
 /// For example
 ///
 ///     class MyAnnotation {
@@ -103,15 +111,11 @@
 ///     @MyAnnotation('FooBar')
 ///     main() { ... }
 ///
-/// If we match the annotation for the `@MyAnnotation('FooBar')` this will
-/// return the string `'FooBar'`.
-String getAnnotationName(NamedNode node, bool test(Expression value)) {
-  var match = findAnnotation(node, test);
-  if (match is ConstructorInvocation && match.arguments.positional.isNotEmpty) {
-    var first = _followConstFields(match.arguments.positional[0]);
-    if (first is StringLiteral) {
-      return first.value;
-    }
+/// Given teh node for `@MyAnnotation('FooBar')` this will return `'FooBar'`.
+String getNameFromAnnotation(ConstructorInvocation node) {
+  if (node != null && node.arguments.positional.isNotEmpty) {
+    var first = _followConstFields(node.arguments.positional[0]);
+    if (first is StringLiteral) return first.value;
   }
   return null;
 }
diff --git a/pkg/dev_compiler/lib/src/kernel/native_types.dart b/pkg/dev_compiler/lib/src/kernel/native_types.dart
index e862eb9..1ac42bb 100644
--- a/pkg/dev_compiler/lib/src/kernel/native_types.dart
+++ b/pkg/dev_compiler/lib/src/kernel/native_types.dart
@@ -6,6 +6,7 @@
 import 'package:kernel/core_types.dart';
 import 'package:kernel/kernel.dart';
 import 'package:kernel/library_index.dart';
+import 'kernel_helpers.dart' show getNameFromAnnotation;
 
 /// Contains information about native JS types (those types provided by the
 /// implementation) that are also provided by the Dart SDK.
@@ -64,18 +65,6 @@
     _addPendingExtensionTypes(sdk.getLibrary('dart:web_sql'));
   }
 
-  bool _isNative(Class c) {
-    for (var annotation in c.annotations) {
-      if (annotation is ConstructorInvocation) {
-        var c = annotation.target.enclosingClass;
-        if (c.name == 'Native' || c.name == 'JsPeerInterface') {
-          if (c.enclosingLibrary.importUri.scheme == 'dart') return true;
-        }
-      }
-    }
-    return false;
-  }
-
   void _addExtensionType(Class c, [bool mustBeNative = false]) {
     if (c == coreTypes.objectClass) return;
     if (_extensibleTypes.contains(c) || _nativeTypes.contains(c)) {
@@ -129,4 +118,32 @@
       _processPending(c) && _extensibleTypes.contains(c);
 
   bool hasNativeSubtype(Class c) => isNativeInterface(c) || isNativeClass(c);
+
+  /// Gets the JS peer for this Dart type if any, otherwise null.
+  ///
+  /// For example for dart:_interceptors `JSArray` this will return "Array",
+  /// referring to the JavaScript built-in `Array` type.
+  List<String> getNativePeers(Class c) {
+    if (c == coreTypes.objectClass) return ['Object'];
+    var names = getNameFromAnnotation(_getNativeAnnotation(c));
+    if (names == null) return const [];
+
+    // Omit the special name "!nonleaf" and any future hacks starting with "!"
+    return names.split(',').where((peer) => !peer.startsWith("!")).toList();
+  }
+}
+
+bool _isNative(Class c) => _getNativeAnnotation(c) != null;
+
+ConstructorInvocation _getNativeAnnotation(Class c) {
+  for (var annotation in c.annotations) {
+    if (annotation is ConstructorInvocation) {
+      var c = annotation.target.enclosingClass;
+      if ((c.name == 'Native' || c.name == 'JsPeerInterface') &&
+          c.enclosingLibrary.importUri.scheme == 'dart') {
+        return annotation;
+      }
+    }
+  }
+  return null;
 }
diff --git a/pkg/dev_compiler/tool/input_sdk/patch/core_patch.dart b/pkg/dev_compiler/tool/input_sdk/patch/core_patch.dart
index de39cbb..3e7dd29 100644
--- a/pkg/dev_compiler/tool/input_sdk/patch/core_patch.dart
+++ b/pkg/dev_compiler/tool/input_sdk/patch/core_patch.dart
@@ -1118,7 +1118,7 @@
     unshiftedDigits[3] = 0x10 | (bits[6] & 0xF);
 
     var unshiftedBig = new _BigIntImpl._normalized(false, 4, unshiftedDigits);
-    _BigIntImpl absResult;
+    _BigIntImpl absResult = unshiftedBig;
     if (exponent < 0) {
       absResult = unshiftedBig >> -exponent;
     } else if (exponent > 0) {
diff --git a/pkg/front_end/lib/src/base/processed_options.dart b/pkg/front_end/lib/src/base/processed_options.dart
index cbe7ebc..f0a3761 100644
--- a/pkg/front_end/lib/src/base/processed_options.dart
+++ b/pkg/front_end/lib/src/base/processed_options.dart
@@ -102,7 +102,7 @@
   /// all method bodies are left out. In essence, it contains just API
   /// signatures and constants. When strong-mode is enabled, the summary already
   /// includes inferred types.
-  Component _sdkSummaryProgram;
+  Component _sdkSummaryComponent;
 
   /// The summary for each uri in `options.inputSummaries`.
   ///
@@ -110,9 +110,9 @@
   /// all method bodies are left out. In essence, it contains just API
   /// signatures and constants. When strong-mode is enabled, the summary already
   /// includes inferred types.
-  List<Component> _inputSummariesPrograms;
+  List<Component> _inputSummariesComponents;
 
-  /// Other programs that are meant to be linked and compiled with the input
+  /// Other components that are meant to be linked and compiled with the input
   /// sources.
   List<Component> _linkedDependencies;
 
@@ -282,6 +282,14 @@
           Severity.internalProblem);
       return false;
     }
+
+    for (Uri source in _raw.linkedDependencies) {
+      if (!await fileSystem.entityForUri(source).exists()) {
+        reportWithoutLocation(
+            templateInputFileNotFound.withArguments(source), Severity.error);
+        return false;
+      }
+    }
     return true;
   }
 
@@ -309,38 +317,38 @@
   /// Get an outline component that summarizes the SDK, if any.
   // TODO(sigmund): move, this doesn't feel like an "option".
   Future<Component> loadSdkSummary(CanonicalName nameRoot) async {
-    if (_sdkSummaryProgram == null) {
+    if (_sdkSummaryComponent == null) {
       if (sdkSummary == null) return null;
       var bytes = await loadSdkSummaryBytes();
-      _sdkSummaryProgram = loadComponent(bytes, nameRoot);
+      _sdkSummaryComponent = loadComponent(bytes, nameRoot);
     }
-    return _sdkSummaryProgram;
+    return _sdkSummaryComponent;
   }
 
   void set sdkSummaryComponent(Component platform) {
-    if (_sdkSummaryProgram != null) {
+    if (_sdkSummaryComponent != null) {
       throw new StateError("sdkSummary already loaded.");
     }
-    _sdkSummaryProgram = platform;
+    _sdkSummaryComponent = platform;
   }
 
   /// Get the summary programs for each of the underlying `inputSummaries`
   /// provided via [CompilerOptions].
   // TODO(sigmund): move, this doesn't feel like an "option".
   Future<List<Component>> loadInputSummaries(CanonicalName nameRoot) async {
-    if (_inputSummariesPrograms == null) {
+    if (_inputSummariesComponents == null) {
       var uris = _raw.inputSummaries;
       if (uris == null || uris.isEmpty) return const <Component>[];
       // TODO(sigmund): throttle # of concurrent opreations.
       var allBytes = await Future
           .wait(uris.map((uri) => fileSystem.entityForUri(uri).readAsBytes()));
-      _inputSummariesPrograms =
+      _inputSummariesComponents =
           allBytes.map((bytes) => loadComponent(bytes, nameRoot)).toList();
     }
-    return _inputSummariesPrograms;
+    return _inputSummariesComponents;
   }
 
-  /// Load each of the [CompilerOptions.linkedDependencies] programs.
+  /// Load each of the [CompilerOptions.linkedDependencies] components.
   // TODO(sigmund): move, this doesn't feel like an "option".
   Future<List<Component>> loadLinkDependencies(CanonicalName nameRoot) async {
     if (_linkedDependencies == null) {
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_loader.dart b/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
index 2be3fcf..d033d7d 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_loader.dart
@@ -25,7 +25,7 @@
   /// Source targets are compiled against these binary libraries.
   final libraries = <Library>[];
 
-  /// Sources for all appended programs.
+  /// Sources for all appended components.
   final Map<Uri, Source> uriToSource = <Uri, Source>{};
 
   DillLoader(TargetImplementation target) : super(target);
diff --git a/pkg/front_end/lib/src/fasta/get_dependencies.dart b/pkg/front_end/lib/src/fasta/get_dependencies.dart
index 14165b7..37ee55e 100644
--- a/pkg/front_end/lib/src/fasta/get_dependencies.dart
+++ b/pkg/front_end/lib/src/fasta/get_dependencies.dart
@@ -47,8 +47,8 @@
         new DillTarget(c.options.ticker, uriTranslator, c.options.target);
     if (platform != null) {
       var bytes = await fileSystem.entityForUri(platform).readAsBytes();
-      var platformProgram = loadComponentFromBytes(bytes);
-      dillTarget.loader.appendLibraries(platformProgram);
+      var platformComponent = loadComponentFromBytes(bytes);
+      dillTarget.loader.appendLibraries(platformComponent);
     }
     KernelTarget kernelTarget = new KernelTarget(
         fileSystem, false, dillTarget, uriTranslator,
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index eba0a79..b3039b5 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -133,7 +133,7 @@
 
       // This is not the full program. It is the component including all
       // libraries loaded from .dill files.
-      Component programWithDill =
+      Component componentWithDill =
           await userCode.buildComponent(verify: c.options.verify);
 
       List<Library> libraries =
@@ -160,9 +160,9 @@
 
       // This component represents the parts of the program that were
       // recompiled.
-      Procedure mainMethod = programWithDill == null
+      Procedure mainMethod = componentWithDill == null
           ? data.userLoadedUriMain
-          : programWithDill.mainMethod;
+          : componentWithDill.mainMethod;
       return new Component(libraries: libraries, uriToSource: data.uriToSource)
         ..mainMethod = mainMethod;
     });
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 7c7babc..bdf106f 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -22,7 +22,6 @@
         FormalParameterKind,
         IdentifierContext,
         MemberKind,
-        closeBraceTokenFor,
         lengthForToken,
         lengthOfSpan,
         offsetForToken,
@@ -816,8 +815,7 @@
   @override
   void handleParenthesizedExpression(Token token) {
     debugEvent("ParenthesizedExpression");
-    push(new ParenthesizedExpression(
-        this, popForValue(), closeBraceTokenFor(token)));
+    push(new ParenthesizedExpression(this, popForValue(), token.endGroup));
   }
 
   @override
@@ -1786,7 +1784,7 @@
         addProblem(
             fasta.messageListLiteralTooManyTypeArguments,
             offsetForToken(beginToken),
-            lengthOfSpan(beginToken, closeBraceTokenFor(beginToken)));
+            lengthOfSpan(beginToken, beginToken.endGroup));
       } else if (library.loader.target.strongMode) {
         typeArgument = instantiateToBounds(typeArgument, coreTypes.objectClass);
       }
@@ -1834,7 +1832,7 @@
         addProblem(
             fasta.messageListLiteralTypeArgumentMismatch,
             offsetForToken(beginToken),
-            lengthOfSpan(beginToken, closeBraceTokenFor(beginToken)));
+            lengthOfSpan(beginToken, beginToken.endGroup));
       } else {
         if (library.loader.target.strongMode) {
           keyType =
@@ -2861,7 +2859,6 @@
     var returnType = pop();
     var hasImplicitReturnType = returnType == null;
     returnType ??= const DynamicType();
-    pop(); // Modifiers.
     exitFunction();
     List<TypeParameter> typeParameters = typeVariableBuildersToKernel(pop());
     FunctionNode function = formals.addToFunction(new FunctionNode(body,
diff --git a/pkg/front_end/lib/src/fasta/parser.dart b/pkg/front_end/lib/src/fasta/parser.dart
index 17c0d5c..13713da 100644
--- a/pkg/front_end/lib/src/fasta/parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser.dart
@@ -31,12 +31,7 @@
 export 'parser/top_level_parser.dart' show TopLevelParser;
 
 export 'parser/util.dart'
-    show
-        closeBraceTokenFor,
-        lengthForToken,
-        lengthOfSpan,
-        offsetForToken,
-        optional;
+    show lengthForToken, lengthOfSpan, offsetForToken, optional;
 
 List<ParserError> parse(Token tokens) {
   Listener listener = new Listener();
diff --git a/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart b/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart
index 2ff44b0..c5c0802 100644
--- a/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart
+++ b/pkg/front_end/lib/src/fasta/parser/forwarding_listener.dart
@@ -141,8 +141,9 @@
   }
 
   @override
-  void beginFactoryMethod(Token lastConsumed) {
-    listener?.beginFactoryMethod(lastConsumed);
+  void beginFactoryMethod(
+      Token lastConsumed, Token externalToken, Token constToken) {
+    listener?.beginFactoryMethod(lastConsumed, externalToken, constToken);
   }
 
   @override
@@ -368,8 +369,8 @@
   }
 
   @override
-  void beginTopLevelMethod(Token lastConsumed) {
-    listener?.beginTopLevelMethod(lastConsumed);
+  void beginTopLevelMethod(Token lastConsumed, Token externalToken) {
+    listener?.beginTopLevelMethod(lastConsumed, externalToken);
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/parser/listener.dart b/pkg/front_end/lib/src/fasta/parser/listener.dart
index b7d921e..167775d 100644
--- a/pkg/front_end/lib/src/fasta/parser/listener.dart
+++ b/pkg/front_end/lib/src/fasta/parser/listener.dart
@@ -224,7 +224,8 @@
     logEvent("ExpressionStatement");
   }
 
-  void beginFactoryMethod(Token lastConsumed) {}
+  void beginFactoryMethod(
+      Token lastConsumed, Token externalToken, Token constToken) {}
 
   void endFactoryMethod(
       Token beginToken, Token factoryKeyword, Token endToken) {
@@ -327,7 +328,6 @@
   /// A function declaration.
   ///
   /// Substructures:
-  /// - Modifiers
   /// - Return type
   /// - Name
   /// - Type variables
@@ -817,7 +817,7 @@
     logEvent("TopLevelFields");
   }
 
-  void beginTopLevelMethod(Token lastConsumed) {}
+  void beginTopLevelMethod(Token lastConsumed, Token externalToken) {}
 
   /// Handle the end of a top level method.  Substructures:
   /// - metadata
diff --git a/pkg/front_end/lib/src/fasta/parser/parser.dart b/pkg/front_end/lib/src/fasta/parser/parser.dart
index 0778f66..d48c0a3 100644
--- a/pkg/front_end/lib/src/fasta/parser/parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser/parser.dart
@@ -101,7 +101,7 @@
         isValidTypeReference,
         noTypeInfo;
 
-import 'util.dart' show closeBraceTokenFor, optional;
+import 'util.dart' show optional;
 
 /// An event generating parser of Dart programs. This parser expects all tokens
 /// in a linked list (aka a token stream).
@@ -1076,7 +1076,7 @@
       listener.endFormalParameters(0, token, token, kind);
       return reportUnexpectedToken(token);
     }
-    Token closeBrace = closeBraceTokenFor(token);
+    Token closeBrace = token.endGroup;
     listener.endFormalParameters(0, token, closeBrace, kind);
     return closeBrace;
   }
@@ -1488,7 +1488,7 @@
     /// [isValidMethodTypeArguments].
     Token tryParseMethodTypeArguments(Token token) {
       if (!identical(token.kind, LT_TOKEN)) return null;
-      Token endToken = closeBraceTokenFor(token);
+      Token endToken = token.endGroup;
       if (endToken == null ||
           !identical(endToken.next.kind, OPEN_PAREN_TOKEN)) {
         return null;
@@ -1596,7 +1596,7 @@
 
   Token skipBlock(Token token) {
     token = ensureBlock(token, null);
-    Token closeBrace = closeBraceTokenFor(token);
+    Token closeBrace = token.endGroup;
     if (closeBrace == null ||
         !identical(closeBrace.kind, $CLOSE_CURLY_BRACKET)) {
       return reportUnmatchedToken(token).next;
@@ -2278,7 +2278,7 @@
     /// The tokens before the start of type variables of function types seen
     /// during analysis. Notice that the tokens in this list might precede
     /// either `'<'` or `'('` as not all function types have type parameters.
-    /// Also, it is safe to assume that [closeBraceTokenFor] will return
+    /// Also, it is safe to assume that token.endGroup will return
     /// non-null for all of the tokens following these tokens.
     Link<Token> typeVariableStarters = const Link<Token>();
 
@@ -2316,7 +2316,7 @@
           token = beforeToken.next;
         }
         if (optional("<", token)) {
-          Token close = closeBraceTokenFor(token);
+          Token close = token.endGroup;
           if (close != null &&
               (optional(">", close) || optional(">>", close))) {
             // We found some type arguments.
@@ -2338,7 +2338,7 @@
       while (optional("Function", token)) {
         Token typeVariableStart = token;
         if (optional("<", token.next)) {
-          Token close = closeBraceTokenFor(token.next);
+          Token close = token.next.endGroup;
           if (close != null && optional(">", close)) {
             beforeToken = previousToken(token, close);
             token = close;
@@ -2348,7 +2348,7 @@
         }
         if (optional("(", token.next)) {
           // This is a function type.
-          Token close = closeBraceTokenFor(token.next);
+          Token close = token.next.endGroup;
           assert(optional(")", close));
           looksLikeType = true;
           functionTypes++;
@@ -2398,7 +2398,7 @@
         Token functionToken = next;
         if (optional("<", next.next)) {
           // Skip type parameters, they were parsed above.
-          next = closeBraceTokenFor(next.next);
+          next = next.next.endGroup;
         }
         token = parseFormalParametersRequiredOpt(
             next, MemberKind.GeneralizedFunctionType);
@@ -2439,12 +2439,12 @@
       }
       token = token.next;
       if (optional('<', token)) {
-        Token closeBrace = closeBraceTokenFor(token);
+        Token closeBrace = token.endGroup;
         if (closeBrace == null) return false;
         token = closeBrace.next;
       }
       if (optional('(', token)) {
-        return looksLikeFunctionBody(closeBraceTokenFor(token).next);
+        return looksLikeFunctionBody(token.endGroup.next);
       }
       return false;
     }
@@ -2513,7 +2513,7 @@
             return parseVariablesDeclaration(beforeBegin);
           } else if (OPEN_PAREN_TOKEN == afterIdKind) {
             // We are looking at `type identifier '('`.
-            if (looksLikeFunctionBody(closeBraceTokenFor(afterId).next)) {
+            if (looksLikeFunctionBody(afterId.endGroup.next)) {
               // We are looking at `type identifier '(' ... ')'` followed
               // `( '{' | '=>' | 'async' | 'sync' )`.
 
@@ -2522,7 +2522,6 @@
               Token beforeFormals = parseTypeVariablesOpt(token);
 
               listener.beginLocalFunctionDeclaration(begin);
-              listener.handleModifiers(0);
               if (voidToken != null) {
                 listener.handleVoidKeyword(voidToken);
               } else {
@@ -2533,16 +2532,14 @@
             }
           } else if (identical(afterIdKind, LT_TOKEN)) {
             // We are looking at `type identifier '<'`.
-            Token beforeFormals = closeBraceTokenFor(afterId);
+            Token beforeFormals = afterId.endGroup;
             if (beforeFormals?.next != null &&
                 optional("(", beforeFormals.next)) {
-              if (looksLikeFunctionBody(
-                  closeBraceTokenFor(beforeFormals.next).next)) {
+              if (looksLikeFunctionBody(beforeFormals.next.endGroup.next)) {
                 // We are looking at "type identifier '<' ... '>' '(' ... ')'"
                 // followed by '{', '=>', 'async', or 'sync'.
                 parseTypeVariablesOpt(token);
                 listener.beginLocalFunctionDeclaration(begin);
-                listener.handleModifiers(0);
                 if (voidToken != null) {
                   listener.handleVoidKeyword(voidToken);
                 } else {
@@ -2560,7 +2557,7 @@
           if (optional(':', token.next)) {
             return parseLabeledStatement(beforeToken);
           } else if (optional('(', token.next)) {
-            if (looksLikeFunctionBody(closeBraceTokenFor(token.next).next)) {
+            if (looksLikeFunctionBody(token.next.endGroup.next)) {
               // We are looking at `identifier '(' ... ')'` followed by `'{'`,
               // `'=>'`, `'async'`, or `'sync'`.
 
@@ -2569,19 +2566,17 @@
               Token formals = parseTypeVariablesOpt(token);
 
               listener.beginLocalFunctionDeclaration(token);
-              listener.handleModifiers(0);
               listener.handleNoType(token);
               return parseNamedFunctionRest(beforeToken, begin, formals, false);
             }
           } else if (optional('<', token.next)) {
-            Token gt = closeBraceTokenFor(token.next);
+            Token gt = token.next.endGroup;
             if (gt?.next != null && optional("(", gt.next)) {
-              if (looksLikeFunctionBody(closeBraceTokenFor(gt.next).next)) {
+              if (looksLikeFunctionBody(gt.next.endGroup.next)) {
                 // We are looking at `identifier '<' ... '>' '(' ... ')'`
                 // followed by `'{'`, `'=>'`, `'async'`, or `'sync'`.
                 parseTypeVariablesOpt(token);
                 listener.beginLocalFunctionDeclaration(token);
-                listener.handleModifiers(0);
                 listener.handleNoType(token);
                 return parseNamedFunctionRest(beforeToken, begin, gt, false);
               }
@@ -2632,7 +2627,6 @@
 
         Token formals = parseTypeVariablesOpt(name);
         listener.beginNamedFunctionExpression(begin);
-        listener.handleModifiers(0);
         if (hasReturnType) {
           if (voidToken != null) {
             listener.handleVoidKeyword(voidToken);
@@ -2760,7 +2754,7 @@
 
         Token inlineFunctionTypeStart;
         if (optional("<", token)) {
-          Token closer = closeBraceTokenFor(token);
+          Token closer = token.endGroup;
           if (closer != null) {
             if (optional("(", closer.next)) {
               if (varFinalOrConst != null) {
@@ -2778,7 +2772,7 @@
                 varFinalOrConst, fasta.messageFunctionTypedParameterVar);
           }
           inlineFunctionTypeStart = beforeToken;
-          beforeToken = closeBraceTokenFor(token);
+          beforeToken = token.endGroup;
           token = beforeToken.next;
         }
 
@@ -3135,16 +3129,7 @@
 
   Token parseTopLevelMethod(Token beforeStart, Token externalToken,
       Token beforeType, Token getOrSet, Token beforeName) {
-    listener.beginTopLevelMethod(beforeStart);
-
-    // TODO(danrubel): Consider passing modifiers via endTopLevelMethod
-    // rather than handleModifier and handleModifiers
-    if (externalToken != null) {
-      listener.handleModifier(externalToken);
-      listener.handleModifiers(1);
-    } else {
-      listener.handleModifiers(0);
-    }
+    listener.beginTopLevelMethod(beforeStart, externalToken);
 
     if (beforeType == null) {
       listener.handleNoType(beforeName);
@@ -3561,7 +3546,7 @@
     if (!optional('{', token)) {
       token = ensureBlock(previousToken, fasta.templateExpectedClassBody);
     }
-    Token closeBrace = closeBraceTokenFor(token);
+    Token closeBrace = token.endGroup;
     if (closeBrace == null ||
         !identical(closeBrace.kind, $CLOSE_CURLY_BRACKET)) {
       return reportUnmatchedToken(token).next;
@@ -3900,28 +3885,17 @@
       varFinalOrConst = context.varFinalOrConst;
     }
 
-    int modifierCount = 0;
-    if (externalToken != null) {
-      listener.handleModifier(externalToken);
-      ++modifierCount;
-    }
     if (staticOrCovariant != null) {
       reportRecoverableErrorWithToken(
           staticOrCovariant, fasta.templateExtraneousModifier);
     }
-    if (varFinalOrConst != null) {
-      if (optional('const', varFinalOrConst)) {
-        listener.handleModifier(varFinalOrConst);
-        ++modifierCount;
-      } else {
-        reportRecoverableErrorWithToken(
-            varFinalOrConst, fasta.templateExtraneousModifier);
-        varFinalOrConst = null;
-      }
+    if (varFinalOrConst != null && !optional('const', varFinalOrConst)) {
+      reportRecoverableErrorWithToken(
+          varFinalOrConst, fasta.templateExtraneousModifier);
+      varFinalOrConst = null;
     }
-    listener.handleModifiers(modifierCount);
 
-    listener.beginFactoryMethod(beforeStart);
+    listener.beginFactoryMethod(beforeStart, externalToken, varFinalOrConst);
     token = parseConstructorReference(token);
     token = parseFormalParametersRequiredOpt(token, MemberKind.Factory);
     Token asyncToken = token.next;
@@ -4003,7 +3977,6 @@
   /// - Type variables.
   /// - `beginLocalFunctionDeclaration` if [isFunctionExpression] is false,
   ///   otherwise `beginNamedFunctionExpression`.
-  /// - Modifiers.
   /// - Return type.
   Token parseNamedFunctionRest(
       Token beforeName, Token begin, Token formals, bool isFunctionExpression) {
@@ -4518,7 +4491,7 @@
           //   Foo() : map = {};
           //   Foo.x() : map = true ? {} : {};
           // }
-          token = closeBraceTokenFor(next.next) ?? next;
+          token = next.next.endGroup ?? next;
           next = token.next;
           continue;
         }
@@ -4529,10 +4502,10 @@
           //   Foo() : map = <String, Foo>{};
           //   Foo.x() : map = true ? <String, Foo>{} : <String, Foo>{};
           // }
-          token = closeBraceTokenFor(next.next) ?? next;
+          token = next.next.endGroup ?? next;
           next = token.next;
           if (identical(next.stringValue, '{')) {
-            token = closeBraceTokenFor(next) ?? next;
+            token = next.endGroup ?? next;
             next = token.next;
           }
           continue;
@@ -4542,7 +4515,7 @@
         break;
       }
       if (next is BeginToken) {
-        token = closeBraceTokenFor(next) ?? next;
+        token = next.endGroup ?? next;
       } else {
         if (next is ErrorToken) {
           reportErrorToken(next, false);
@@ -4882,7 +4855,7 @@
   Token parseParenthesizedExpressionOrFunctionLiteral(Token token) {
     Token next = token.next;
     assert(optional('(', next));
-    Token nextToken = closeBraceTokenFor(next).next;
+    Token nextToken = next.endGroup.next;
     int kind = nextToken.kind;
     if (mayParseFunctionExpressions) {
       if ((identical(kind, FUNCTION_TOKEN) ||
@@ -5071,7 +5044,7 @@
   Token parseLiteralFunctionSuffix(Token token) {
     Token next = token.next;
     assert(optional('(', next));
-    Token closeBrace = closeBraceTokenFor(next);
+    Token closeBrace = next.endGroup;
     if (closeBrace != null) {
       Token nextToken = closeBrace.next;
       int kind = nextToken.kind;
@@ -5098,7 +5071,7 @@
   Token parseLiteralListOrMapOrFunction(Token token, Token constKeyword) {
     Token next = token.next;
     assert(optional('<', next));
-    Token closeBrace = closeBraceTokenFor(next);
+    Token closeBrace = next.endGroup;
     if (constKeyword == null &&
         closeBrace != null &&
         identical(closeBrace.next.kind, OPEN_PAREN_TOKEN)) {
@@ -5382,7 +5355,7 @@
     Token next = token.next;
     listener.handleNoArguments(next);
     if (optional('(', next)) {
-      return closeBraceTokenFor(next);
+      return next.endGroup;
     } else {
       return token;
     }
diff --git a/pkg/front_end/lib/src/fasta/parser/util.dart b/pkg/front_end/lib/src/fasta/parser/util.dart
index f16353d..50dd955 100644
--- a/pkg/front_end/lib/src/fasta/parser/util.dart
+++ b/pkg/front_end/lib/src/fasta/parser/util.dart
@@ -17,12 +17,6 @@
   return identical(value, token.stringValue);
 }
 
-/// Returns the close brace, bracket, or parenthesis of [left]. For '<', it may
-/// return null.
-Token closeBraceTokenFor(Token token) {
-  return token is BeginToken ? token.endGroup : null;
-}
-
 /// Returns the token before the close brace, bracket, or parenthesis
 /// associated with [left]. For '<', it may return `null`.
 Token beforeCloseBraceTokenFor(BeginToken left) {
diff --git a/pkg/front_end/lib/src/fasta/source/diet_listener.dart b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
index d831420..3b901fb 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -26,8 +26,7 @@
 
 import '../kernel/body_builder.dart' show BodyBuilder;
 
-import '../parser.dart'
-    show IdentifierContext, MemberKind, Parser, closeBraceTokenFor, optional;
+import '../parser.dart' show IdentifierContext, MemberKind, Parser, optional;
 
 import '../problems.dart' show internalProblem, unexpected;
 
@@ -475,8 +474,7 @@
     Object name = pop();
     Token metadata = pop();
     checkEmpty(beginToken.charOffset);
-    if (bodyToken == null ||
-        optional("=", closeBraceTokenFor(bodyToken).next)) {
+    if (bodyToken == null || optional("=", bodyToken.endGroup.next)) {
       // TODO(ahe): Don't skip this. We need to compile metadata and
       // redirecting factory bodies.
       return;
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index 4777289..95f7e87 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -440,8 +440,9 @@
   }
 
   @override
-  void beginTopLevelMethod(Token lastConsumed) {
+  void beginTopLevelMethod(Token lastConsumed, Token externalToken) {
     library.beginNestedDeclaration("#method", hasMembers: false);
+    push(externalToken != null ? externalMask : 0);
   }
 
   @override
@@ -462,7 +463,10 @@
         isAbstract = false;
       }
     }
-    int modifiers = Modifier.validate(pop(), isAbstract: isAbstract);
+    int modifiers = pop();
+    if (isAbstract) {
+      modifiers |= abstractMask;
+    }
     List<MetadataBuilder> metadata = pop();
     String documentationComment = getDocumentationComment(beginToken);
     checkEmpty(beginToken.charOffset);
@@ -1031,8 +1035,11 @@
   }
 
   @override
-  void beginFactoryMethod(Token lastConsumed) {
+  void beginFactoryMethod(
+      Token lastConsumed, Token externalToken, Token constToken) {
     library.beginNestedDeclaration("#factory_method", hasMembers: false);
+    push((externalToken != null ? externalMask : 0) |
+        (constToken != null ? constMask : 0));
   }
 
   @override
@@ -1047,7 +1054,7 @@
     List<FormalParameterBuilder> formals = pop();
     int formalsOffset = pop();
     var name = pop();
-    int modifiers = Modifier.validate(pop());
+    int modifiers = pop();
     List<MetadataBuilder> metadata = pop();
     String documentationComment = getDocumentationComment(beginToken);
     library.addFactoryMethod(
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index 83396f3..79c88ae 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -557,7 +557,7 @@
     ticker.logMs("Built component");
   }
 
-  Component computeFullProgram() {
+  Component computeFullComponent() {
     Set<Library> libraries = new Set<Library>();
     List<Library> workList = <Library>[];
     builders.forEach((Uri uri, LibraryBuilder library) {
@@ -580,7 +580,7 @@
 
   void computeHierarchy() {
     List<List> ambiguousTypesRecords = [];
-    hierarchy = new ClassHierarchy(computeFullProgram(),
+    hierarchy = new ClassHierarchy(computeFullComponent(),
         onAmbiguousSupertypes: (Class cls, Supertype a, Supertype b) {
       if (ambiguousTypesRecords != null) {
         ambiguousTypesRecords.add([cls, a, b]);
@@ -694,7 +694,7 @@
     // TODO(paulberry): could we make this unnecessary by not clearing class
     // inference info?
     typeInferenceEngine.classHierarchy = hierarchy = new ClassHierarchy(
-        computeFullProgram(),
+        computeFullComponent(),
         onAmbiguousSupertypes: ignoreAmbiguousSupertypes);
     ticker.logMs("Performed top level inference");
   }
diff --git a/pkg/front_end/lib/src/incremental/kernel_driver.dart b/pkg/front_end/lib/src/incremental/kernel_driver.dart
index 9038870..57b35a6 100644
--- a/pkg/front_end/lib/src/incremental/kernel_driver.dart
+++ b/pkg/front_end/lib/src/incremental/kernel_driver.dart
@@ -418,7 +418,7 @@
         if (bytes != null) {
           return _logger.runAsync('Read serialized libraries', () async {
             var component = new Component(nameRoot: nameRoot);
-            _readProgram(component, bytes);
+            _readComponent(component, bytes);
             await appendNewDillLibraries(component);
 
             return new LibraryCycleResult(
@@ -557,7 +557,7 @@
   /// configured metadata factory.  The [component] must be ready to read these
   /// libraries, i.e. either the [bytes] represent a full component with all
   /// dependencies, or the [component] already has all required dependencies.
-  void _readProgram(Component component, List<int> bytes) {
+  void _readComponent(Component component, List<int> bytes) {
     if (_metadataFactory != null) {
       var repository = _metadataFactory.newRepositoryForReading();
       component.addMetadataRepository(repository);
diff --git a/pkg/front_end/lib/src/kernel_generator_impl.dart b/pkg/front_end/lib/src/kernel_generator_impl.dart
index 4761b9a..8b78836 100644
--- a/pkg/front_end/lib/src/kernel_generator_impl.dart
+++ b/pkg/front_end/lib/src/kernel_generator_impl.dart
@@ -94,17 +94,17 @@
 
     var kernelTarget = new KernelTarget(fs, false, dillTarget, uriTranslator);
     options.inputs.forEach(kernelTarget.read);
-    Component summaryProgram =
+    Component summaryComponent =
         await kernelTarget.buildOutlines(nameRoot: nameRoot);
     List<int> summary = null;
     if (buildSummary) {
       if (options.verify) {
-        for (var error in verifyComponent(summaryProgram)) {
+        for (var error in verifyComponent(summaryComponent)) {
           options.report(error, Severity.error);
         }
       }
       if (options.debugDump) {
-        printComponentText(summaryProgram,
+        printComponentText(summaryComponent,
             libraryFilter: kernelTarget.isSourceLibrary);
       }
 
@@ -113,20 +113,21 @@
       // Note: we don't pass the library argument to the constructor to
       // preserve the the libraries parent pointer (it should continue to point
       // to the component within KernelTarget).
-      var trimmedSummaryProgram = new Component(nameRoot: summaryProgram.root)
-        ..libraries.addAll(truncateSummary
-            ? kernelTarget.loader.libraries
-            : summaryProgram.libraries);
-      trimmedSummaryProgram.metadata.addAll(summaryProgram.metadata);
+      var trimmedSummaryComponent =
+          new Component(nameRoot: summaryComponent.root)
+            ..libraries.addAll(truncateSummary
+                ? kernelTarget.loader.libraries
+                : summaryComponent.libraries);
+      trimmedSummaryComponent.metadata.addAll(summaryComponent.metadata);
 
       // As documented, we only run outline transformations when we are building
       // summaries without building a full component (at this time, that's
       // the only need we have for these transformations).
       if (!buildComponent) {
-        options.target.performOutlineTransformations(trimmedSummaryProgram);
+        options.target.performOutlineTransformations(trimmedSummaryComponent);
         options.ticker.logMs("Transformed outline");
       }
-      summary = serializeComponent(trimmedSummaryProgram);
+      summary = serializeComponent(trimmedSummaryComponent);
       options.ticker.logMs("Generated outline");
     }
 
diff --git a/pkg/front_end/test/fasta/bootstrap_test.dart b/pkg/front_end/test/fasta/bootstrap_test.dart
index 77e7cab..2ca89b4 100644
--- a/pkg/front_end/test/fasta/bootstrap_test.dart
+++ b/pkg/front_end/test/fasta/bootstrap_test.dart
@@ -78,13 +78,13 @@
   if (!silent) {
     print("$a is different from $b");
   }
-  Component programA = new Component();
-  Component programB = new Component();
-  new BinaryBuilder(bytesA, filename: a.toFilePath()).readComponent(programA);
-  new BinaryBuilder(bytesB, filename: b.toFilePath()).readComponent(programB);
+  Component componentA = new Component();
+  Component componentB = new Component();
+  new BinaryBuilder(bytesA, filename: a.toFilePath()).readComponent(componentA);
+  new BinaryBuilder(bytesB, filename: b.toFilePath()).readComponent(componentB);
   RegExp splitLines = new RegExp('^', multiLine: true);
-  List<String> linesA = componentToString(programA).split(splitLines);
-  List<String> linesB = componentToString(programB).split(splitLines);
+  List<String> linesA = componentToString(componentA).split(splitLines);
+  List<String> linesB = componentToString(componentB).split(splitLines);
   for (int i = 0; i < linesA.length && i < linesB.length; i++) {
     String lineA = linesA[i].trimRight();
     String lineB = linesB[i].trimRight();
diff --git a/pkg/front_end/test/fasta/testing/suite.dart b/pkg/front_end/test/fasta/testing/suite.dart
index 3337a9e..014f3a6 100644
--- a/pkg/front_end/test/fasta/testing/suite.dart
+++ b/pkg/front_end/test/fasta/testing/suite.dart
@@ -108,7 +108,7 @@
   final Uri vm;
   final bool strongMode;
   final bool onlyCrashes;
-  final Map<Component, KernelTarget> programToTarget =
+  final Map<Component, KernelTarget> componentToTarget =
       <Component, KernelTarget>{};
   final Uri platformBinaries;
   Uri platformUri;
@@ -153,8 +153,8 @@
         if (!ignoreExpectations) {
           steps.add(new MatchExpectation(
               fullCompile
-              ? ".${generateExpectationName(strongMode)}.transformed.expect"
-              : ".outline.transformed.expect",
+                  ? ".${generateExpectationName(strongMode)}.transformed.expect"
+                  : ".outline.transformed.expect",
               updateExpectations: updateExpectations));
         }
         steps.add(const WriteDill());
@@ -327,8 +327,8 @@
       } on deprecated_InputError catch (e, s) {
         return fail(null, e.error, s);
       }
-      context.programToTarget.clear();
-      context.programToTarget[p] = sourceTarget;
+      context.componentToTarget.clear();
+      context.componentToTarget[p] = sourceTarget;
       return pass(p);
     });
   }
@@ -341,8 +341,8 @@
 
   Future<Result<Component>> run(
       Component component, FastaContext context) async {
-    KernelTarget sourceTarget = context.programToTarget[component];
-    context.programToTarget.remove(component);
+    KernelTarget sourceTarget = context.componentToTarget[component];
+    context.componentToTarget.remove(component);
     TestVmTarget backendTarget = sourceTarget.backendTarget;
     backendTarget.enabled = true;
     try {
diff --git a/pkg/front_end/test/incremental_load_from_dill_test.dart b/pkg/front_end/test/incremental_load_from_dill_test.dart
index 13ab958..5ba4f3b 100644
--- a/pkg/front_end/test/incremental_load_from_dill_test.dart
+++ b/pkg/front_end/test/incremental_load_from_dill_test.dart
@@ -473,25 +473,25 @@
   for (Uri invalidateUri in invalidateUris) {
     compiler.invalidate(invalidateUri);
   }
-  var bootstrappedProgram = await compiler.computeDelta();
-  throwOnEmptyMixinBodies(bootstrappedProgram);
+  var bootstrappedComponent = await compiler.computeDelta();
+  throwOnEmptyMixinBodies(bootstrappedComponent);
   bool result = compiler.initializedFromDill;
-  await writeComponentToFile(bootstrappedProgram, output);
+  await writeComponentToFile(bootstrappedComponent, output);
   for (Uri invalidateUri in invalidateUris) {
     compiler.invalidate(invalidateUri);
   }
 
-  var partialProgram = await compiler.computeDelta();
-  throwOnEmptyMixinBodies(partialProgram);
-  var emptyProgram = await compiler.computeDelta();
-  throwOnEmptyMixinBodies(emptyProgram);
+  var partialComponent = await compiler.computeDelta();
+  throwOnEmptyMixinBodies(partialComponent);
+  var emptyComponent = await compiler.computeDelta();
+  throwOnEmptyMixinBodies(emptyComponent);
 
   var fullLibUris =
-      bootstrappedProgram.libraries.map((lib) => lib.importUri).toList();
+      bootstrappedComponent.libraries.map((lib) => lib.importUri).toList();
   var partialLibUris =
-      partialProgram.libraries.map((lib) => lib.importUri).toList();
+      partialComponent.libraries.map((lib) => lib.importUri).toList();
   var emptyLibUris =
-      emptyProgram.libraries.map((lib) => lib.importUri).toList();
+      emptyComponent.libraries.map((lib) => lib.importUri).toList();
 
   if (performSizeTests) {
     Expect.isTrue(fullLibUris.length > partialLibUris.length);
diff --git a/pkg/front_end/test/kernel_generator_test.dart b/pkg/front_end/test/kernel_generator_test.dart
index 6a2c923..736cb2f 100644
--- a/pkg/front_end/test/kernel_generator_test.dart
+++ b/pkg/front_end/test/kernel_generator_test.dart
@@ -107,7 +107,7 @@
       expect(exceptionThrown, isTrue);
     }, skip: true /* Issue 30194 */);
 
-    test('generated component contains source-info', () async {
+    test('generated program contains source-info', () async {
       var component = await compileScript('a() => print("hi"); main() {}',
           fileName: 'a.dart');
       // Kernel always store an empty '' key in the map, so there is always at
diff --git a/pkg/front_end/test/src/incremental/kernel_driver_test.dart b/pkg/front_end/test/src/incremental/kernel_driver_test.dart
index febded4..7568239 100644
--- a/pkg/front_end/test/src/incremental/kernel_driver_test.dart
+++ b/pkg/front_end/test/src/incremental/kernel_driver_test.dart
@@ -716,7 +716,7 @@
     String initialKernelText;
     List<int> bytes;
     {
-      Library initialLibrary = _getLibraryFromProgram(component, bUri);
+      Library initialLibrary = _getLibraryFromComponent(component, bUri);
       initialKernelText = _getLibraryText(initialLibrary);
 
       bytes = serializeComponent(component,
@@ -733,10 +733,10 @@
     // serialized canonical names can be linked to corresponding nodes.
     Library loadedLibrary;
     {
-      var programForLoading = new Component(nameRoot: component.root);
+      var componentForLoading = new Component(nameRoot: component.root);
       var reader = new BinaryBuilder(bytes);
-      reader.readComponent(programForLoading);
-      loadedLibrary = _getLibraryFromProgram(programForLoading, bUri);
+      reader.readComponent(componentForLoading);
+      loadedLibrary = _getLibraryFromComponent(componentForLoading, bUri);
     }
 
     // Add the library into the component.
@@ -1023,7 +1023,7 @@
     fail('No library found with URI "$uri"');
   }
 
-  Library _getLibraryFromProgram(Component component, Uri uri) {
+  Library _getLibraryFromComponent(Component component, Uri uri) {
     for (var library in component.libraries) {
       if (library.importUri == uri) return library;
     }
diff --git a/pkg/front_end/tool/_fasta/entry_points.dart b/pkg/front_end/tool/_fasta/entry_points.dart
index 78d1163..67cbe59 100644
--- a/pkg/front_end/tool/_fasta/entry_points.dart
+++ b/pkg/front_end/tool/_fasta/entry_points.dart
@@ -276,6 +276,6 @@
 /// to the [dillTarget].
 void _appendDillForUri(DillTarget dillTarget, Uri uri) {
   var bytes = new File.fromUri(uri).readAsBytesSync();
-  var platformProgram = loadComponentFromBytes(bytes);
-  dillTarget.loader.appendLibraries(platformProgram, byteCount: bytes.length);
+  var platformComponent = loadComponentFromBytes(bytes);
+  dillTarget.loader.appendLibraries(platformComponent, byteCount: bytes.length);
 }
diff --git a/pkg/front_end/tool/incremental_perf.dart b/pkg/front_end/tool/incremental_perf.dart
index d9cf2cc..1d68942 100644
--- a/pkg/front_end/tool/incremental_perf.dart
+++ b/pkg/front_end/tool/incremental_perf.dart
@@ -134,12 +134,12 @@
   collector.start("Initial compilation");
   var generator = new IncrementalKernelGenerator(compilerOptions, entryUri);
 
-  var program = await generator.computeDelta();
+  var component = await generator.computeDelta();
   collector.stop("Initial compilation");
   if (verbose) {
-    print("Libraries changed: ${program.libraries.length}");
+    print("Libraries changed: ${component.libraries.length}");
   }
-  if (program.libraries.length < 1) {
+  if (component.libraries.length < 1) {
     throw "No libraries were changed";
   }
 
@@ -148,13 +148,13 @@
     await applyEdits(
         changeSet.edits, overlayFs, generator, uriTranslator, verbose);
     collector.start(name);
-    program = await generator.computeDelta();
+    component = await generator.computeDelta();
     collector.stop(name);
     if (verbose) {
       print("Change '${changeSet.name}' - "
-          "Libraries changed: ${program.libraries.length}");
+          "Libraries changed: ${component.libraries.length}");
     }
-    if (program.libraries.length < 1) {
+    if (component.libraries.length < 1) {
       throw "No libraries were changed";
     }
   }
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index c829ca2..7bec298 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -15,7 +15,7 @@
 ///
 /// A [BinaryPrinter] can be used to write one file and must then be
 /// discarded.
-class BinaryPrinter extends Visitor implements BinarySink {
+class BinaryPrinter implements Visitor<void>, BinarySink {
   VariableIndexer _variableIndexer;
   LabelIndexer _labelIndexer;
   SwitchCaseIndexer _switchCaseIndexer;
@@ -576,7 +576,8 @@
 
   bool insideExternalLibrary = false;
 
-  visitLibrary(Library node) {
+  @override
+  void visitLibrary(Library node) {
     insideExternalLibrary = node.isExternal;
     libraryOffsets.add(getBufferOffset());
     writeByte(insideExternalLibrary ? 1 : 0);
@@ -714,7 +715,8 @@
         levelFlags;
   }
 
-  visitClass(Class node) {
+  @override
+  void visitClass(Class node) {
     classOffsets.add(getBufferOffset());
 
     int flags = _encodeClassFlags(node.isAbstract, node.isEnum,
@@ -758,7 +760,8 @@
 
   static final Name _emptyName = new Name('');
 
-  visitConstructor(Constructor node) {
+  @override
+  void visitConstructor(Constructor node) {
     if (node.canonicalName == null) {
       throw 'Missing canonical name for $node';
     }
@@ -787,7 +790,8 @@
     _variableIndexer = null;
   }
 
-  visitProcedure(Procedure node) {
+  @override
+  void visitProcedure(Procedure node) {
     procedureOffsets.add(getBufferOffset());
 
     if (node.canonicalName == null) {
@@ -818,7 +822,8 @@
         !(node.isForwardingStub && node.function.body != null));
   }
 
-  visitField(Field node) {
+  @override
+  void visitField(Field node) {
     if (node.canonicalName == null) {
       throw 'Missing canonical name for $node';
     }
@@ -843,7 +848,8 @@
     _variableIndexer = null;
   }
 
-  visitRedirectingFactoryConstructor(RedirectingFactoryConstructor node) {
+  @override
+  void visitRedirectingFactoryConstructor(RedirectingFactoryConstructor node) {
     if (node.canonicalName == null) {
       throw 'Missing canonical name for $node';
     }
@@ -877,45 +883,52 @@
     _variableIndexer = null;
   }
 
-  visitInvalidInitializer(InvalidInitializer node) {
+  @override
+  void visitInvalidInitializer(InvalidInitializer node) {
     writeByte(Tag.InvalidInitializer);
     writeByte(node.isSynthetic ? 1 : 0);
   }
 
-  visitFieldInitializer(FieldInitializer node) {
+  @override
+  void visitFieldInitializer(FieldInitializer node) {
     writeByte(Tag.FieldInitializer);
     writeByte(node.isSynthetic ? 1 : 0);
     writeReference(node.fieldReference);
     writeNode(node.value);
   }
 
-  visitSuperInitializer(SuperInitializer node) {
+  @override
+  void visitSuperInitializer(SuperInitializer node) {
     writeByte(Tag.SuperInitializer);
     writeByte(node.isSynthetic ? 1 : 0);
     writeReference(node.targetReference);
     writeNode(node.arguments);
   }
 
-  visitRedirectingInitializer(RedirectingInitializer node) {
+  @override
+  void visitRedirectingInitializer(RedirectingInitializer node) {
     writeByte(Tag.RedirectingInitializer);
     writeByte(node.isSynthetic ? 1 : 0);
     writeReference(node.targetReference);
     writeNode(node.arguments);
   }
 
-  visitLocalInitializer(LocalInitializer node) {
+  @override
+  void visitLocalInitializer(LocalInitializer node) {
     writeByte(Tag.LocalInitializer);
     writeByte(node.isSynthetic ? 1 : 0);
     writeVariableDeclaration(node.variable);
   }
 
-  visitAssertInitializer(AssertInitializer node) {
+  @override
+  void visitAssertInitializer(AssertInitializer node) {
     writeByte(Tag.AssertInitializer);
     writeByte(node.isSynthetic ? 1 : 0);
     writeNode(node.statement);
   }
 
-  visitFunctionNode(FunctionNode node) {
+  @override
+  void visitFunctionNode(FunctionNode node) {
     writeByte(Tag.FunctionNode);
     assert(_variableIndexer != null);
     _variableIndexer.pushScope();
@@ -942,13 +955,15 @@
     _variableIndexer.popScope();
   }
 
-  visitInvalidExpression(InvalidExpression node) {
+  @override
+  void visitInvalidExpression(InvalidExpression node) {
     writeByte(Tag.InvalidExpression);
     writeOffset(node.fileOffset);
     writeStringReference(node.message ?? '');
   }
 
-  visitVariableGet(VariableGet node) {
+  @override
+  void visitVariableGet(VariableGet node) {
     assert(_variableIndexer != null);
     int index = _variableIndexer[node.variable];
     assert(index != null);
@@ -966,7 +981,8 @@
     }
   }
 
-  visitVariableSet(VariableSet node) {
+  @override
+  void visitVariableSet(VariableSet node) {
     assert(_variableIndexer != null);
     int index = _variableIndexer[node.variable];
     if (index & Tag.SpecializedPayloadMask == index) {
@@ -983,7 +999,8 @@
     }
   }
 
-  visitPropertyGet(PropertyGet node) {
+  @override
+  void visitPropertyGet(PropertyGet node) {
     writeByte(Tag.PropertyGet);
     writeOffset(node.fileOffset);
     writeByte(node.flags);
@@ -992,7 +1009,8 @@
     writeReference(node.interfaceTargetReference);
   }
 
-  visitPropertySet(PropertySet node) {
+  @override
+  void visitPropertySet(PropertySet node) {
     writeByte(Tag.PropertySet);
     writeOffset(node.fileOffset);
     writeByte(node.flags);
@@ -1002,14 +1020,16 @@
     writeReference(node.interfaceTargetReference);
   }
 
-  visitSuperPropertyGet(SuperPropertyGet node) {
+  @override
+  void visitSuperPropertyGet(SuperPropertyGet node) {
     writeByte(Tag.SuperPropertyGet);
     writeOffset(node.fileOffset);
     writeName(node.name);
     writeReference(node.interfaceTargetReference);
   }
 
-  visitSuperPropertySet(SuperPropertySet node) {
+  @override
+  void visitSuperPropertySet(SuperPropertySet node) {
     writeByte(Tag.SuperPropertySet);
     writeOffset(node.fileOffset);
     writeName(node.name);
@@ -1017,7 +1037,8 @@
     writeReference(node.interfaceTargetReference);
   }
 
-  visitDirectPropertyGet(DirectPropertyGet node) {
+  @override
+  void visitDirectPropertyGet(DirectPropertyGet node) {
     writeByte(Tag.DirectPropertyGet);
     writeOffset(node.fileOffset);
     writeByte(node.flags);
@@ -1025,7 +1046,8 @@
     writeReference(node.targetReference);
   }
 
-  visitDirectPropertySet(DirectPropertySet node) {
+  @override
+  void visitDirectPropertySet(DirectPropertySet node) {
     writeByte(Tag.DirectPropertySet);
     writeOffset(node.fileOffset);
     writeByte(node.flags);
@@ -1034,20 +1056,23 @@
     writeNode(node.value);
   }
 
-  visitStaticGet(StaticGet node) {
+  @override
+  void visitStaticGet(StaticGet node) {
     writeByte(Tag.StaticGet);
     writeOffset(node.fileOffset);
     writeReference(node.targetReference);
   }
 
-  visitStaticSet(StaticSet node) {
+  @override
+  void visitStaticSet(StaticSet node) {
     writeByte(Tag.StaticSet);
     writeOffset(node.fileOffset);
     writeReference(node.targetReference);
     writeNode(node.value);
   }
 
-  visitMethodInvocation(MethodInvocation node) {
+  @override
+  void visitMethodInvocation(MethodInvocation node) {
     writeByte(Tag.MethodInvocation);
     writeOffset(node.fileOffset);
     writeByte(node.flags);
@@ -1057,7 +1082,8 @@
     writeReference(node.interfaceTargetReference);
   }
 
-  visitSuperMethodInvocation(SuperMethodInvocation node) {
+  @override
+  void visitSuperMethodInvocation(SuperMethodInvocation node) {
     writeByte(Tag.SuperMethodInvocation);
     writeOffset(node.fileOffset);
     writeName(node.name);
@@ -1065,7 +1091,8 @@
     writeReference(node.interfaceTargetReference);
   }
 
-  visitDirectMethodInvocation(DirectMethodInvocation node) {
+  @override
+  void visitDirectMethodInvocation(DirectMethodInvocation node) {
     writeByte(Tag.DirectMethodInvocation);
     writeOffset(node.fileOffset);
     writeByte(node.flags);
@@ -1074,14 +1101,16 @@
     writeNode(node.arguments);
   }
 
-  visitStaticInvocation(StaticInvocation node) {
+  @override
+  void visitStaticInvocation(StaticInvocation node) {
     writeByte(node.isConst ? Tag.ConstStaticInvocation : Tag.StaticInvocation);
     writeOffset(node.fileOffset);
     writeReference(node.targetReference);
     writeNode(node.arguments);
   }
 
-  visitConstructorInvocation(ConstructorInvocation node) {
+  @override
+  void visitConstructorInvocation(ConstructorInvocation node) {
     writeByte(node.isConst
         ? Tag.ConstConstructorInvocation
         : Tag.ConstructorInvocation);
@@ -1090,19 +1119,22 @@
     writeNode(node.arguments);
   }
 
-  visitArguments(Arguments node) {
+  @override
+  void visitArguments(Arguments node) {
     writeUInt30(node.positional.length + node.named.length);
     writeNodeList(node.types);
     writeNodeList(node.positional);
     writeNodeList(node.named);
   }
 
-  visitNamedExpression(NamedExpression node) {
+  @override
+  void visitNamedExpression(NamedExpression node) {
     writeStringReference(node.name);
     writeNode(node.value);
   }
 
-  visitNot(Not node) {
+  @override
+  void visitNot(Not node) {
     writeByte(Tag.Not);
     writeNode(node.operand);
   }
@@ -1117,14 +1149,16 @@
     throw 'Not a logical operator: $operator';
   }
 
-  visitLogicalExpression(LogicalExpression node) {
+  @override
+  void visitLogicalExpression(LogicalExpression node) {
     writeByte(Tag.LogicalExpression);
     writeNode(node.left);
     writeByte(logicalOperatorIndex(node.operator));
     writeNode(node.right);
   }
 
-  visitConditionalExpression(ConditionalExpression node) {
+  @override
+  void visitConditionalExpression(ConditionalExpression node) {
     writeByte(Tag.ConditionalExpression);
     writeNode(node.condition);
     writeNode(node.then);
@@ -1132,20 +1166,23 @@
     writeOptionalNode(node.staticType);
   }
 
-  visitStringConcatenation(StringConcatenation node) {
+  @override
+  void visitStringConcatenation(StringConcatenation node) {
     writeByte(Tag.StringConcatenation);
     writeOffset(node.fileOffset);
     writeNodeList(node.expressions);
   }
 
-  visitIsExpression(IsExpression node) {
+  @override
+  void visitIsExpression(IsExpression node) {
     writeByte(Tag.IsExpression);
     writeOffset(node.fileOffset);
     writeNode(node.operand);
     writeNode(node.type);
   }
 
-  visitAsExpression(AsExpression node) {
+  @override
+  void visitAsExpression(AsExpression node) {
     writeByte(Tag.AsExpression);
     writeOffset(node.fileOffset);
     writeByte(node.flags);
@@ -1153,12 +1190,14 @@
     writeNode(node.type);
   }
 
-  visitStringLiteral(StringLiteral node) {
+  @override
+  void visitStringLiteral(StringLiteral node) {
     writeByte(Tag.StringLiteral);
     writeStringReference(node.value);
   }
 
-  visitIntLiteral(IntLiteral node) {
+  @override
+  void visitIntLiteral(IntLiteral node) {
     writeInteger(node.value);
   }
 
@@ -1182,7 +1221,8 @@
     }
   }
 
-  visitDoubleLiteral(DoubleLiteral node) {
+  @override
+  void visitDoubleLiteral(DoubleLiteral node) {
     writeDouble(node.value);
   }
 
@@ -1192,47 +1232,56 @@
     writeStringReference('$value');
   }
 
-  visitBoolLiteral(BoolLiteral node) {
+  @override
+  void visitBoolLiteral(BoolLiteral node) {
     writeByte(node.value ? Tag.TrueLiteral : Tag.FalseLiteral);
   }
 
-  visitNullLiteral(NullLiteral node) {
+  @override
+  void visitNullLiteral(NullLiteral node) {
     writeByte(Tag.NullLiteral);
   }
 
-  visitSymbolLiteral(SymbolLiteral node) {
+  @override
+  void visitSymbolLiteral(SymbolLiteral node) {
     writeByte(Tag.SymbolLiteral);
     writeStringReference(node.value);
   }
 
-  visitTypeLiteral(TypeLiteral node) {
+  @override
+  void visitTypeLiteral(TypeLiteral node) {
     writeByte(Tag.TypeLiteral);
     writeNode(node.type);
   }
 
-  visitThisExpression(ThisExpression node) {
+  @override
+  void visitThisExpression(ThisExpression node) {
     writeByte(Tag.ThisExpression);
   }
 
-  visitRethrow(Rethrow node) {
+  @override
+  void visitRethrow(Rethrow node) {
     writeByte(Tag.Rethrow);
     writeOffset(node.fileOffset);
   }
 
-  visitThrow(Throw node) {
+  @override
+  void visitThrow(Throw node) {
     writeByte(Tag.Throw);
     writeOffset(node.fileOffset);
     writeNode(node.expression);
   }
 
-  visitListLiteral(ListLiteral node) {
+  @override
+  void visitListLiteral(ListLiteral node) {
     writeByte(node.isConst ? Tag.ConstListLiteral : Tag.ListLiteral);
     writeOffset(node.fileOffset);
     writeNode(node.typeArgument);
     writeNodeList(node.expressions);
   }
 
-  visitMapLiteral(MapLiteral node) {
+  @override
+  void visitMapLiteral(MapLiteral node) {
     writeByte(node.isConst ? Tag.ConstMapLiteral : Tag.MapLiteral);
     writeOffset(node.fileOffset);
     writeNode(node.keyType);
@@ -1240,70 +1289,82 @@
     writeNodeList(node.entries);
   }
 
-  visitMapEntry(MapEntry node) {
+  @override
+  void visitMapEntry(MapEntry node) {
     // Note: there is no tag on MapEntry
     writeNode(node.key);
     writeNode(node.value);
   }
 
-  visitAwaitExpression(AwaitExpression node) {
+  @override
+  void visitAwaitExpression(AwaitExpression node) {
     writeByte(Tag.AwaitExpression);
     writeNode(node.operand);
   }
 
-  visitFunctionExpression(FunctionExpression node) {
+  @override
+  void visitFunctionExpression(FunctionExpression node) {
     writeByte(Tag.FunctionExpression);
     writeOffset(node.fileOffset);
     writeNode(node.function);
   }
 
-  visitLet(Let node) {
+  @override
+  void visitLet(Let node) {
     writeByte(Tag.Let);
     writeVariableDeclaration(node.variable);
     writeNode(node.body);
     --_variableIndexer.stackHeight;
   }
 
-  visitInstantiation(Instantiation node) {
+  @override
+  void visitInstantiation(Instantiation node) {
     writeByte(Tag.Instantiation);
     writeNode(node.expression);
     writeNodeList(node.typeArguments);
   }
 
-  visitLoadLibrary(LoadLibrary node) {
+  @override
+  void visitLoadLibrary(LoadLibrary node) {
     writeByte(Tag.LoadLibrary);
     writeLibraryDependencyReference(node.import);
   }
 
-  visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) {
+  @override
+  void visitCheckLibraryIsLoaded(CheckLibraryIsLoaded node) {
     writeByte(Tag.CheckLibraryIsLoaded);
     writeLibraryDependencyReference(node.import);
   }
 
-  visitVectorCreation(VectorCreation node) {
+  @override
+  void visitVectorCreation(VectorCreation node) {
     writeByte(Tag.VectorCreation);
     writeUInt30(node.length);
   }
 
-  visitVectorGet(VectorGet node) {
+  @override
+  void visitVectorGet(VectorGet node) {
     writeByte(Tag.VectorGet);
     writeNode(node.vectorExpression);
     writeUInt30(node.index);
   }
 
-  visitVectorSet(VectorSet node) {
+  @override
+  void visitVectorSet(VectorSet node) {
     writeByte(Tag.VectorSet);
     writeNode(node.vectorExpression);
     writeUInt30(node.index);
     writeNode(node.value);
   }
 
-  visitVectorCopy(VectorCopy node) {
+  @override
+  void visitVectorCopy(VectorCopy node) {
     writeByte(Tag.VectorCopy);
     writeNode(node.vectorExpression);
   }
 
-  visitClosureCreation(ClosureCreation node) {
+  @override
+  void visitClosureCreation(ClosureCreation node) {
     writeByte(Tag.ClosureCreation);
     writeReference(node.topLevelFunctionReference);
     writeNode(node.contextVector);
@@ -1319,30 +1380,35 @@
     }
   }
 
-  visitExpressionStatement(ExpressionStatement node) {
+  @override
+  void visitExpressionStatement(ExpressionStatement node) {
     writeByte(Tag.ExpressionStatement);
     writeNode(node.expression);
   }
 
-  visitBlock(Block node) {
+  @override
+  void visitBlock(Block node) {
     _variableIndexer.pushScope();
     writeByte(Tag.Block);
     writeNodeList(node.statements);
     _variableIndexer.popScope();
   }
 
-  visitAssertBlock(AssertBlock node) {
+  @override
+  void visitAssertBlock(AssertBlock node) {
     _variableIndexer.pushScope();
     writeByte(Tag.AssertBlock);
     writeNodeList(node.statements);
     _variableIndexer.popScope();
   }
 
-  visitEmptyStatement(EmptyStatement node) {
+  @override
+  void visitEmptyStatement(EmptyStatement node) {
     writeByte(Tag.EmptyStatement);
   }
 
-  visitAssertStatement(AssertStatement node) {
+  @override
+  void visitAssertStatement(AssertStatement node) {
     writeByte(Tag.AssertStatement);
     writeNode(node.condition);
     writeOffset(node.conditionStartOffset);
@@ -1350,7 +1416,8 @@
     writeOptionalNode(node.message);
   }
 
-  visitLabeledStatement(LabeledStatement node) {
+  @override
+  void visitLabeledStatement(LabeledStatement node) {
     if (_labelIndexer == null) {
       _labelIndexer = new LabelIndexer();
     }
@@ -1360,32 +1427,37 @@
     _labelIndexer.exit();
   }
 
-  visitConstantExpression(ConstantExpression node) {
+  @override
+  void visitConstantExpression(ConstantExpression node) {
     writeByte(Tag.ConstantExpression);
     writeConstantReference(node.constant);
   }
 
-  visitBreakStatement(BreakStatement node) {
+  @override
+  void visitBreakStatement(BreakStatement node) {
     writeByte(Tag.BreakStatement);
     writeOffset(node.fileOffset);
     writeUInt30(_labelIndexer[node.target]);
   }
 
-  visitWhileStatement(WhileStatement node) {
+  @override
+  void visitWhileStatement(WhileStatement node) {
     writeByte(Tag.WhileStatement);
     writeOffset(node.fileOffset);
     writeNode(node.condition);
     writeNode(node.body);
   }
 
-  visitDoStatement(DoStatement node) {
+  @override
+  void visitDoStatement(DoStatement node) {
     writeByte(Tag.DoStatement);
     writeOffset(node.fileOffset);
     writeNode(node.body);
     writeNode(node.condition);
   }
 
-  visitForStatement(ForStatement node) {
+  @override
+  void visitForStatement(ForStatement node) {
     _variableIndexer.pushScope();
     writeByte(Tag.ForStatement);
     writeOffset(node.fileOffset);
@@ -1396,7 +1468,8 @@
     _variableIndexer.popScope();
   }
 
-  visitForInStatement(ForInStatement node) {
+  @override
+  void visitForInStatement(ForInStatement node) {
     _variableIndexer.pushScope();
     writeByte(node.isAsync ? Tag.AsyncForInStatement : Tag.ForInStatement);
     writeOffset(node.fileOffset);
@@ -1407,7 +1480,8 @@
     _variableIndexer.popScope();
   }
 
-  visitSwitchStatement(SwitchStatement node) {
+  @override
+  void visitSwitchStatement(SwitchStatement node) {
     if (_switchCaseIndexer == null) {
       _switchCaseIndexer = new SwitchCaseIndexer();
     }
@@ -1419,7 +1493,8 @@
     _switchCaseIndexer.exit(node);
   }
 
-  visitSwitchCase(SwitchCase node) {
+  @override
+  void visitSwitchCase(SwitchCase node) {
     // Note: there is no tag on SwitchCase.
     int length = node.expressions.length;
     writeUInt30(length);
@@ -1431,13 +1506,15 @@
     writeNode(node.body);
   }
 
-  visitContinueSwitchStatement(ContinueSwitchStatement node) {
+  @override
+  void visitContinueSwitchStatement(ContinueSwitchStatement node) {
     writeByte(Tag.ContinueSwitchStatement);
     writeOffset(node.fileOffset);
     writeUInt30(_switchCaseIndexer[node.target]);
   }
 
-  visitIfStatement(IfStatement node) {
+  @override
+  void visitIfStatement(IfStatement node) {
     writeByte(Tag.IfStatement);
     writeOffset(node.fileOffset);
     writeNode(node.condition);
@@ -1445,13 +1522,15 @@
     writeStatementOrEmpty(node.otherwise);
   }
 
-  visitReturnStatement(ReturnStatement node) {
+  @override
+  void visitReturnStatement(ReturnStatement node) {
     writeByte(Tag.ReturnStatement);
     writeOffset(node.fileOffset);
     writeOptionalNode(node.expression);
   }
 
-  visitTryCatch(TryCatch node) {
+  @override
+  void visitTryCatch(TryCatch node) {
     writeByte(Tag.TryCatch);
     writeNode(node.body);
     if (node.catches.any((Catch c) => c.stackTrace != null)) {
@@ -1464,7 +1543,8 @@
     writeNodeList(node.catches);
   }
 
-  visitCatch(Catch node) {
+  @override
+  void visitCatch(Catch node) {
     // Note: there is no tag on Catch.
     _variableIndexer.pushScope();
     writeOffset(node.fileOffset);
@@ -1475,20 +1555,23 @@
     _variableIndexer.popScope();
   }
 
-  visitTryFinally(TryFinally node) {
+  @override
+  void visitTryFinally(TryFinally node) {
     writeByte(Tag.TryFinally);
     writeNode(node.body);
     writeNode(node.finalizer);
   }
 
-  visitYieldStatement(YieldStatement node) {
+  @override
+  void visitYieldStatement(YieldStatement node) {
     writeByte(Tag.YieldStatement);
     writeOffset(node.fileOffset);
     writeByte(node.flags);
     writeNode(node.expression);
   }
 
-  visitVariableDeclaration(VariableDeclaration node) {
+  @override
+  void visitVariableDeclaration(VariableDeclaration node) {
     writeByte(Tag.VariableDeclaration);
     writeVariableDeclaration(node);
   }
@@ -1523,30 +1606,36 @@
     }
   }
 
-  visitFunctionDeclaration(FunctionDeclaration node) {
+  @override
+  void visitFunctionDeclaration(FunctionDeclaration node) {
     writeByte(Tag.FunctionDeclaration);
     writeOffset(node.fileOffset);
     writeVariableDeclaration(node.variable);
     writeNode(node.function);
   }
 
-  visitBottomType(BottomType node) {
+  @override
+  void visitBottomType(BottomType node) {
     writeByte(Tag.BottomType);
   }
 
-  visitInvalidType(InvalidType node) {
+  @override
+  void visitInvalidType(InvalidType node) {
     writeByte(Tag.InvalidType);
   }
 
-  visitDynamicType(DynamicType node) {
+  @override
+  void visitDynamicType(DynamicType node) {
     writeByte(Tag.DynamicType);
   }
 
-  visitVoidType(VoidType node) {
+  @override
+  void visitVoidType(VoidType node) {
     writeByte(Tag.VoidType);
   }
 
-  visitInterfaceType(InterfaceType node) {
+  @override
+  void visitInterfaceType(InterfaceType node) {
     if (node.typeArguments.isEmpty) {
       writeByte(Tag.SimpleInterfaceType);
       writeReference(node.className);
@@ -1557,7 +1646,8 @@
     }
   }
 
-  visitSupertype(Supertype node) {
+  @override
+  void visitSupertype(Supertype node) {
     if (node.typeArguments.isEmpty) {
       writeByte(Tag.SimpleInterfaceType);
       writeReference(node.className);
@@ -1568,7 +1658,8 @@
     }
   }
 
-  visitFunctionType(FunctionType node) {
+  @override
+  void visitFunctionType(FunctionType node) {
     if (node.requiredParameterCount == node.positionalParameters.length &&
         node.typeParameters.isEmpty &&
         node.namedParameters.isEmpty &&
@@ -1593,40 +1684,248 @@
     }
   }
 
-  visitNamedType(NamedType node) {
+  @override
+  void visitNamedType(NamedType node) {
     writeStringReference(node.name);
     writeNode(node.type);
   }
 
-  visitTypeParameterType(TypeParameterType node) {
+  @override
+  void visitTypeParameterType(TypeParameterType node) {
     writeByte(Tag.TypeParameterType);
     writeUInt30(_typeParameterIndexer[node.parameter]);
     writeOptionalNode(node.promotedBound);
   }
 
-  visitVectorType(VectorType node) {
+  @override
+  void visitVectorType(VectorType node) {
     writeByte(Tag.VectorType);
   }
 
-  visitTypedefType(TypedefType node) {
+  @override
+  void visitTypedefType(TypedefType node) {
     writeByte(Tag.TypedefType);
     writeReference(node.typedefReference);
     writeNodeList(node.typeArguments);
   }
 
-  visitTypeParameter(TypeParameter node) {
+  @override
+  void visitTypeParameter(TypeParameter node) {
     writeByte(node.flags);
     writeAnnotationList(node.annotations);
     writeStringReference(node.name ?? '');
     writeNode(node.bound);
   }
 
-  defaultConstant(Constant node) {
-    throw 'Implement handling of ${node.runtimeType}';
+  // ================================================================
+  // These are nodes that are never serialized directly.  Reaching one
+  // during serialization is an error.
+  @override
+  void defaultNode(Node node) {
+    throw new UnsupportedError('serialization of generic Nodes');
   }
 
-  defaultNode(Node node) {
-    throw 'Unsupported node: $node';
+  @override
+  void defaultConstant(Constant node) {
+    throw new UnsupportedError('serialization of generic Constants');
+  }
+
+  @override
+  void defaultBasicLiteral(BasicLiteral node) {
+    throw new UnsupportedError('serialization of generic BasicLiterals');
+  }
+
+  @override
+  void defaultConstantReference(Constant node) {
+    throw new UnsupportedError('serialization of generic Constant references');
+  }
+
+  @override
+  void defaultDartType(DartType node) {
+    throw new UnsupportedError('serialization of generic DartTypes');
+  }
+
+  @override
+  void defaultExpression(Expression node) {
+    throw new UnsupportedError('serialization of generic Expressions');
+  }
+
+  @override
+  void defaultInitializer(Initializer node) {
+    throw new UnsupportedError('serialization of generic Initializers');
+  }
+
+  @override
+  void defaultMember(Member node) {
+    throw new UnsupportedError('serialization of generic Members');
+  }
+
+  @override
+  void defaultMemberReference(Member node) {
+    throw new UnsupportedError('serialization of generic Member references');
+  }
+
+  @override
+  void defaultStatement(Statement node) {
+    throw new UnsupportedError('serialization of generic Statements');
+  }
+
+  @override
+  void defaultTreeNode(TreeNode node) {
+    throw new UnsupportedError('serialization of generic TreeNodes');
+  }
+
+  @override
+  void visitBoolConstant(BoolConstant node) {
+    throw new UnsupportedError('serialization of BoolConstants');
+  }
+
+  @override
+  void visitBoolConstantReference(BoolConstant node) {
+    throw new UnsupportedError('serialization of BoolConstant references');
+  }
+
+  @override
+  void visitClassReference(Class node) {
+    throw new UnsupportedError('serialization of Class references');
+  }
+
+  @override
+  void visitConstructorReference(Constructor node) {
+    throw new UnsupportedError('serialization of Constructor references');
+  }
+
+  @override
+  void visitDoubleConstant(DoubleConstant node) {
+    throw new UnsupportedError('serialization of DoubleConstants');
+  }
+
+  @override
+  void visitDoubleConstantReference(DoubleConstant node) {
+    throw new UnsupportedError('serialization of DoubleConstant references');
+  }
+
+  @override
+  void visitFieldReference(Field node) {
+    throw new UnsupportedError('serialization of Field references');
+  }
+
+  @override
+  void visitInstanceConstant(InstanceConstant node) {
+    throw new UnsupportedError('serialization of InstanceConstants');
+  }
+
+  @override
+  void visitInstanceConstantReference(InstanceConstant node) {
+    throw new UnsupportedError('serialization of InstanceConstant references');
+  }
+
+  @override
+  void visitIntConstant(IntConstant node) {
+    throw new UnsupportedError('serialization of IntConstants');
+  }
+
+  @override
+  void visitIntConstantReference(IntConstant node) {
+    throw new UnsupportedError('serialization of IntConstant references');
+  }
+
+  @override
+  void visitLibraryDependency(LibraryDependency node) {
+    throw new UnsupportedError('serialization of LibraryDependencys');
+  }
+
+  @override
+  void visitLibraryPart(LibraryPart node) {
+    throw new UnsupportedError('serialization of LibraryParts');
+  }
+
+  @override
+  void visitListConstant(ListConstant node) {
+    throw new UnsupportedError('serialization of ListConstants');
+  }
+
+  @override
+  void visitListConstantReference(ListConstant node) {
+    throw new UnsupportedError('serialization of ListConstant references');
+  }
+
+  @override
+  void visitMapConstant(MapConstant node) {
+    throw new UnsupportedError('serialization of MapConstants');
+  }
+
+  @override
+  void visitMapConstantReference(MapConstant node) {
+    throw new UnsupportedError('serialization of MapConstant references');
+  }
+
+  @override
+  void visitName(Name node) {
+    throw new UnsupportedError('serialization of Names');
+  }
+
+  @override
+  void visitNullConstant(NullConstant node) {
+    throw new UnsupportedError('serialization of NullConstants');
+  }
+
+  @override
+  void visitNullConstantReference(NullConstant node) {
+    throw new UnsupportedError('serialization of NullConstant references');
+  }
+
+  @override
+  void visitProcedureReference(Procedure node) {
+    throw new UnsupportedError('serialization of Procedure references');
+  }
+
+  @override
+  void visitComponent(Component node) {
+    throw new UnsupportedError('serialization of Components');
+  }
+
+  @override
+  void visitRedirectingFactoryConstructorReference(
+      RedirectingFactoryConstructor node) {
+    throw new UnsupportedError(
+        'serialization of RedirectingFactoryConstructor references');
+  }
+
+  @override
+  void visitStringConstant(StringConstant node) {
+    throw new UnsupportedError('serialization of StringConstants');
+  }
+
+  @override
+  void visitStringConstantReference(StringConstant node) {
+    throw new UnsupportedError('serialization of StringConstant references');
+  }
+
+  @override
+  void visitTearOffConstant(TearOffConstant node) {
+    throw new UnsupportedError('serialization of TearOffConstants ');
+  }
+
+  @override
+  void visitTearOffConstantReference(TearOffConstant node) {
+    throw new UnsupportedError('serialization of TearOffConstant references');
+  }
+
+  @override
+  void visitTypeLiteralConstant(TypeLiteralConstant node) {
+    throw new UnsupportedError('serialization of TypeLiteralConstants');
+  }
+
+  @override
+  void visitTypeLiteralConstantReference(TypeLiteralConstant node) {
+    throw new UnsupportedError(
+        'serialization of TypeLiteralConstant references');
+  }
+
+  @override
+  void visitTypedefReference(Typedef node) {
+    throw new UnsupportedError('serialization of Typedef references');
   }
 }
 
diff --git a/pkg/vm/lib/transformations/type_flow/analysis.dart b/pkg/vm/lib/transformations/type_flow/analysis.dart
index 0b6bd2e..13e0739 100644
--- a/pkg/vm/lib/transformations/type_flow/analysis.dart
+++ b/pkg/vm/lib/transformations/type_flow/analysis.dart
@@ -166,11 +166,19 @@
       case CallKind.FieldInitializer:
         assertx(args.values.isEmpty);
         assertx(args.names.isEmpty);
-        fieldValue.setValue(
-            typeFlowAnalysis
-                .getSummary(field)
-                .apply(args, typeFlowAnalysis.hierarchyCache, typeFlowAnalysis),
-            typeFlowAnalysis);
+        Type initializerResult = typeFlowAnalysis
+            .getSummary(field)
+            .apply(args, typeFlowAnalysis.hierarchyCache, typeFlowAnalysis);
+        if (field.isStatic &&
+            !field.isConst &&
+            initializerResult is! NullableType) {
+          // If initializer of a static field throws an exception,
+          // then field is initialized with null value.
+          // TODO(alexmarkov): Try to prove that static field initializer
+          // does not throw exception.
+          initializerResult = new Type.nullable(initializerResult);
+        }
+        fieldValue.setValue(initializerResult, typeFlowAnalysis);
         return const EmptyType();
     }
 
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/bench_vector.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/bench_vector.dart.expect
index b23ebd2..87c7282 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/bench_vector.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/bench_vector.dart.expect
@@ -18,19 +18,19 @@
   operator []=([@vm.inferred-type.metadata=!] core::int i, core::double value) → void {
     [@vm.unreachable.metadata=] [@vm.direct-call.metadata=#lib::_Vector::_elements] [@vm.inferred-type.metadata=dart.typed_data::_Float64List] this.{self::_Vector::_elements}.{core::List::[]=}([@vm.unreachable.metadata=] i.{core::num::+}([@vm.direct-call.metadata=#lib::_Vector::_offset] [@vm.inferred-type.metadata=!] this.{self::_Vector::_offset}), value);
   }
-  operator *([@vm.inferred-type.metadata=#lib::_Vector] self::_Vector a) → core::double {
+  operator *([@vm.inferred-type.metadata=#lib::_Vector?] self::_Vector a) → core::double {
     core::double result = 0.0;
     for (core::int i = 0; i.{core::num::<}([@vm.direct-call.metadata=#lib::_Vector::_length] [@vm.inferred-type.metadata=!] this.{self::_Vector::_length}); i = i.{core::num::+}(1))
-      result = [@vm.direct-call.metadata=dart.core::_Double::+??] [@vm.inferred-type.metadata=dart.core::_Double] result.{core::double::+}([@vm.direct-call.metadata=dart.core::_Double::*] [@vm.inferred-type.metadata=dart.core::_Double] [@vm.direct-call.metadata=#lib::_Vector::[]] [@vm.inferred-type.metadata=dart.core::_Double] this.{self::_Vector::[]}(i).{core::double::*}([@vm.direct-call.metadata=#lib::_Vector::[]] [@vm.inferred-type.metadata=dart.core::_Double] a.{self::_Vector::[]}(i)));
+      result = [@vm.direct-call.metadata=dart.core::_Double::+??] [@vm.inferred-type.metadata=dart.core::_Double] result.{core::double::+}([@vm.direct-call.metadata=dart.core::_Double::*] [@vm.inferred-type.metadata=dart.core::_Double] [@vm.direct-call.metadata=#lib::_Vector::[]] [@vm.inferred-type.metadata=dart.core::_Double] this.{self::_Vector::[]}(i).{core::double::*}([@vm.direct-call.metadata=#lib::_Vector::[]??] [@vm.inferred-type.metadata=dart.core::_Double] a.{self::_Vector::[]}(i)));
     return result;
   }
 }
-[@vm.inferred-type.metadata=#lib::_Vector]static field self::_Vector v = new self::_Vector::•(10);
-[@vm.inferred-type.metadata=dart.core::_Double]static field core::double x = 0.0;
+[@vm.inferred-type.metadata=#lib::_Vector?]static field self::_Vector v = new self::_Vector::•(10);
+[@vm.inferred-type.metadata=dart.core::_Double?]static field core::double x = 0.0;
 static method main(core::List<core::String> args) → dynamic {
   core::Stopwatch timer = let final core::Stopwatch #t1 = new core::Stopwatch::•() in let final dynamic #t2 = [@vm.direct-call.metadata=dart.core::Stopwatch::start] #t1.{core::Stopwatch::start}() in #t1;
   for (core::int i = 0; i.{core::num::<}(100000000); i = i.{core::num::+}(1)) {
-    self::x = [@vm.direct-call.metadata=dart.core::_Double::+] [@vm.inferred-type.metadata=dart.core::_Double] [@vm.inferred-type.metadata=dart.core::_Double] self::x.{core::double::+}([@vm.direct-call.metadata=#lib::_Vector::*] [@vm.inferred-type.metadata=dart.core::_Double] [@vm.inferred-type.metadata=#lib::_Vector] self::v.{self::_Vector::*}([@vm.inferred-type.metadata=#lib::_Vector] self::v));
+    self::x = [@vm.direct-call.metadata=dart.core::_Double::+??] [@vm.inferred-type.metadata=dart.core::_Double] [@vm.inferred-type.metadata=dart.core::_Double?] self::x.{core::double::+}([@vm.direct-call.metadata=#lib::_Vector::*??] [@vm.inferred-type.metadata=dart.core::_Double] [@vm.inferred-type.metadata=#lib::_Vector?] self::v.{self::_Vector::*}([@vm.inferred-type.metadata=#lib::_Vector?] self::v));
   }
   [@vm.direct-call.metadata=dart.core::Stopwatch::stop] timer.{core::Stopwatch::stop}();
   core::print("Elapsed ${[@vm.direct-call.metadata=dart.core::Stopwatch::elapsedMilliseconds] timer.{core::Stopwatch::elapsedMilliseconds}}ms, result ${self::x}");
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart.expect
index 8843409..21c932f 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/devirt.dart.expect
@@ -35,7 +35,7 @@
     return "D";
 }
 [@vm.inferred-type.metadata=#lib::D?]static field self::A dd;
-[@vm.inferred-type.metadata=#lib::E]static field self::E ee = new self::E::•();
+[@vm.inferred-type.metadata=#lib::E?]static field self::E ee = new self::E::•();
 static method callerA1([@vm.inferred-type.metadata=!] self::A aa) → void {
   aa.{self::A::foo}();
 }
@@ -51,7 +51,7 @@
 static method callerE1([@vm.inferred-type.metadata=!] dynamic x) → void {
   x.toString();
 }
-static method callerE2([@vm.inferred-type.metadata=#lib::E] dynamic x) → void {
+static method callerE2([@vm.inferred-type.metadata=#lib::E?] dynamic x) → void {
   x.toString();
 }
 static method main(core::List<core::String> args) → dynamic {
@@ -62,5 +62,5 @@
   self::callerA4([@vm.inferred-type.metadata=#lib::D?] self::dd);
   self::dd = new self::D::•();
   self::callerE1("abc");
-  self::callerE2([@vm.inferred-type.metadata=#lib::E] self::ee);
+  self::callerE2([@vm.inferred-type.metadata=#lib::E?] self::ee);
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect
index da1a6e6..9fa579c 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect
@@ -37,13 +37,13 @@
     : super core::Object::•()
     ;
   method barL1() → dynamic
-    return [@vm.direct-call.metadata=#lib::DeepCaller1::barL2] [@vm.inferred-type.metadata=!] this.{self::DeepCaller1::barL2}();
+    return [@vm.direct-call.metadata=#lib::DeepCaller1::barL2] this.{self::DeepCaller1::barL2}();
   method barL2() → dynamic
-    return [@vm.direct-call.metadata=#lib::DeepCaller1::barL3] [@vm.inferred-type.metadata=!] this.{self::DeepCaller1::barL3}();
+    return [@vm.direct-call.metadata=#lib::DeepCaller1::barL3] this.{self::DeepCaller1::barL3}();
   method barL3() → dynamic
-    return [@vm.direct-call.metadata=#lib::DeepCaller1::barL4] [@vm.inferred-type.metadata=!] this.{self::DeepCaller1::barL4}();
+    return [@vm.direct-call.metadata=#lib::DeepCaller1::barL4] this.{self::DeepCaller1::barL4}();
   method barL4() → dynamic
-    return [@vm.inferred-type.metadata=!] self::field1;
+    return self::field1;
 }
 class D extends core::Object {
 [@vm.inferred-type.metadata=!]  field core::Object field2 = [@vm.inferred-type.metadata=!] self::getValue();
@@ -65,7 +65,7 @@
     return [@vm.direct-call.metadata=#lib::D::field2] [@vm.inferred-type.metadata=!] dd.{self::D::field2};
 }
 [@vm.inferred-type.metadata=dart.core::Null?]static field core::Function unknown;
-[@vm.inferred-type.metadata=!]static field core::Object field1 = [@vm.inferred-type.metadata=!] self::getValue();
+static field core::Object field1 = [@vm.inferred-type.metadata=!] self::getValue();
 static method getDynamic() → dynamic
   return self::unknown.call();
 static method getValue() → core::Object {
@@ -73,7 +73,7 @@
   return [@vm.inferred-type.metadata=!] aa.{self::A::foo}();
 }
 static method use1([@vm.inferred-type.metadata=#lib::DeepCaller1] self::DeepCaller1 x) → dynamic
-  return [@vm.direct-call.metadata=#lib::DeepCaller1::barL1] [@vm.inferred-type.metadata=!] x.{self::DeepCaller1::barL1}();
+  return [@vm.direct-call.metadata=#lib::DeepCaller1::barL1] x.{self::DeepCaller1::barL1}();
 static method use2([@vm.inferred-type.metadata=#lib::DeepCaller2] self::DeepCaller2 x) → dynamic
   return [@vm.direct-call.metadata=#lib::DeepCaller2::barL1] [@vm.inferred-type.metadata=!] x.{self::DeepCaller2::barL1}(new self::D::•());
 static method createC() → dynamic {
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
index 61fb50e..f15ef86 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
@@ -104,18 +104,18 @@
     return new self::T7::•();
   }
 }
-[@vm.inferred-type.metadata=#lib::B]static field self::A bb = new self::B::•();
-[@vm.inferred-type.metadata=#lib::D]static field self::A dd = new self::D::•();
+[@vm.inferred-type.metadata=#lib::B?]static field self::A bb = new self::B::•();
+[@vm.inferred-type.metadata=#lib::D?]static field self::A dd = new self::D::•();
 [@vm.inferred-type.metadata=dart.core::Null?]static field core::Function unknown;
 static method getDynamic() → dynamic
   return self::unknown.call();
 static method main(core::List<core::String> args) → dynamic {
-  core::print([@vm.inferred-type.metadata=#lib::T1] [@vm.inferred-type.metadata=#lib::B] self::bb.{self::A::foo}());
-  core::print([@vm.inferred-type.metadata=#lib::T1] [@vm.inferred-type.metadata=#lib::B] self::bb.{self::A::bar});
-  core::print([@vm.inferred-type.metadata=#lib::T1] [@vm.inferred-type.metadata=#lib::B] self::bb.{self::A::bazz}(1, 2, 3, 4));
-  core::print([@vm.inferred-type.metadata=#lib::T2] [@vm.inferred-type.metadata=#lib::D] self::dd.{self::A::foo}());
-  core::print([@vm.inferred-type.metadata=#lib::T2] [@vm.inferred-type.metadata=#lib::D] self::dd.{self::A::bar});
-  core::print([@vm.inferred-type.metadata=#lib::T2] [@vm.inferred-type.metadata=#lib::D] self::dd.{self::A::bazz}(1, 2, 3, 4));
+  core::print([@vm.inferred-type.metadata=#lib::T1] [@vm.inferred-type.metadata=#lib::B?] self::bb.{self::A::foo}());
+  core::print([@vm.inferred-type.metadata=#lib::T1] [@vm.inferred-type.metadata=#lib::B?] self::bb.{self::A::bar});
+  core::print([@vm.inferred-type.metadata=#lib::T1] [@vm.inferred-type.metadata=#lib::B?] self::bb.{self::A::bazz}(1, 2, 3, 4));
+  core::print([@vm.inferred-type.metadata=#lib::T2] [@vm.inferred-type.metadata=#lib::D?] self::dd.{self::A::foo}());
+  core::print([@vm.inferred-type.metadata=#lib::T2] [@vm.inferred-type.metadata=#lib::D?] self::dd.{self::A::bar});
+  core::print([@vm.inferred-type.metadata=#lib::T2] [@vm.inferred-type.metadata=#lib::D?] self::dd.{self::A::bazz}(1, 2, 3, 4));
   new self::E::•();
   self::A xx = self::getDynamic() as{TypeError} self::A;
   core::print([@vm.inferred-type.metadata=!] xx.{self::A::bar});
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect
index deb3fa6..24ea90c 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_super_method.dart.expect
@@ -40,10 +40,10 @@
   method bar() → core::int
     return [@vm.direct-call.metadata=#lib::Base::doCall] this.{self::Base::doCall}(super.{self::Base::foo});
 }
-[@vm.inferred-type.metadata=#lib::B]static field self::A aa = new self::B::•();
+[@vm.inferred-type.metadata=#lib::B?]static field self::A aa = new self::B::•();
 static method knownResult() → dynamic
   return new self::B::•();
 static method main(core::List<core::String> args) → dynamic {
   [@vm.direct-call.metadata=#lib::TearOffSuperMethod::bar] new self::TearOffSuperMethod::•().{self::TearOffSuperMethod::bar}();
-  [@vm.direct-call.metadata=#lib::B::foo] [@vm.inferred-type.metadata=#lib::B] self::aa.{self::A::foo}();
+  [@vm.direct-call.metadata=#lib::B::foo??] [@vm.inferred-type.metadata=#lib::B?] self::aa.{self::A::foo}();
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/unfinished_static_field_init.dart b/pkg/vm/testcases/transformations/type_flow/transformer/unfinished_static_field_init.dart
new file mode 100644
index 0000000..e2c4d9a
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/unfinished_static_field_init.dart
@@ -0,0 +1,16 @@
+// Copyright (c) 2018, 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.
+
+class A {}
+
+dynamic good() => new A();
+dynamic bad() => throw 'No return!';
+
+var static_field_good = good();
+var static_field_bad = bad();
+
+main(List<String> args) {
+  print(static_field_good);
+  print(static_field_bad); // Should infer null.
+}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/unfinished_static_field_init.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/unfinished_static_field_init.dart.expect
new file mode 100644
index 0000000..e5f135c
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/unfinished_static_field_init.dart.expect
@@ -0,0 +1,19 @@
+library #lib;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → void
+    : super core::Object::•()
+    ;
+}
+[@vm.inferred-type.metadata=#lib::A?]static field dynamic static_field_good = [@vm.inferred-type.metadata=#lib::A] self::good();
+[@vm.inferred-type.metadata=dart.core::Null?]static field dynamic static_field_bad = [@vm.inferred-type.metadata=!] self::bad();
+static method good() → dynamic
+  return new self::A::•();
+static method bad() → dynamic
+  return throw "No return!";
+static method main(core::List<core::String> args) → dynamic {
+  core::print([@vm.inferred-type.metadata=#lib::A?] self::static_field_good);
+  core::print([@vm.inferred-type.metadata=dart.core::Null?] self::static_field_bad);
+}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/unreachable.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/unreachable.dart.expect
index 2170390..8ff3030 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/unreachable.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/unreachable.dart.expect
@@ -22,12 +22,12 @@
 [@vm.unreachable.metadata=]  method foo(dynamic x) → void
     throw "TFA Error: #lib::B::foo";
 }
-[@vm.inferred-type.metadata=#lib::B]static field self::I ii = new self::B::•();
-static method bar([@vm.inferred-type.metadata=#lib::B] self::I i) → void {
+[@vm.inferred-type.metadata=#lib::B?]static field self::I ii = new self::B::•();
+static method bar([@vm.inferred-type.metadata=#lib::B?] self::I i) → void {
   if(i is self::A) {
     [@vm.unreachable.metadata=] i{self::A}.{self::A::foo}(42);
   }
 }
 static method main(core::List<core::String> args) → dynamic {
-  self::bar([@vm.inferred-type.metadata=#lib::B] self::ii);
+  self::bar([@vm.inferred-type.metadata=#lib::B?] self::ii);
 }
diff --git a/runtime/bin/dartutils.cc b/runtime/bin/dartutils.cc
index c4c7d3d..e23ba23 100644
--- a/runtime/bin/dartutils.cc
+++ b/runtime/bin/dartutils.cc
@@ -413,19 +413,6 @@
   return kUnknownMagicNumber;
 }
 
-void DartUtils::WriteSnapshotMagicNumber(File* file) {
-  // Write a magic number and version information into the snapshot file.
-  bool bytes_written = file->WriteFully(snapshot_magic_number.bytes,
-                                        snapshot_magic_number.length);
-  ASSERT(bytes_written);
-}
-
-void DartUtils::SkipSnapshotMagicNumber(const uint8_t** buffer,
-                                        intptr_t* buffer_length) {
-  *buffer += snapshot_magic_number.length;
-  *buffer_length -= snapshot_magic_number.length;
-}
-
 Dart_Handle DartUtils::PrepareBuiltinLibrary(Dart_Handle builtin_lib,
                                              Dart_Handle internal_lib,
                                              bool is_service_isolate,
diff --git a/runtime/bin/dartutils.h b/runtime/bin/dartutils.h
index 5002f31..5c14911 100644
--- a/runtime/bin/dartutils.h
+++ b/runtime/bin/dartutils.h
@@ -217,10 +217,6 @@
   static MagicNumber SniffForMagicNumber(const uint8_t* text_buffer,
                                          intptr_t buffer_len);
 
-  // Write a magic number to indicate a script snapshot file.
-  static void WriteSnapshotMagicNumber(File* file);
-  static void SkipSnapshotMagicNumber(const uint8_t** buffer, intptr_t* length);
-
   // Global state that stores the original working directory..
   static const char* original_working_directory;
 
diff --git a/runtime/bin/dfe.cc b/runtime/bin/dfe.cc
index d80f237..d6bad2b 100644
--- a/runtime/bin/dfe.cc
+++ b/runtime/bin/dfe.cc
@@ -110,10 +110,12 @@
   // platform_dill is not NULL implies that platform_strong_dill is also
   // not NULL.
   if (platform_program_ == NULL) {
+    ASSERT(Dart_IsKernel(platform_dill, platform_dill_size));
     platform_program_ =
         Dart_ReadKernelBinary(platform_dill, platform_dill_size, NoopRelease);
   }
   if (platform_strong_program_ == NULL) {
+    ASSERT(Dart_IsKernel(platform_strong_dill, platform_strong_dill_size));
     platform_strong_program_ = Dart_ReadKernelBinary(
         platform_strong_dill, platform_strong_dill_size, NoopRelease);
   }
@@ -175,34 +177,6 @@
   free(buffer);
 }
 
-Dart_Handle DFE::ReadKernelBinary(Dart_Isolate isolate,
-                                  const char* url_string) {
-  ASSERT(!Dart_IsServiceIsolate(isolate) && !Dart_IsKernelIsolate(isolate));
-  // First check if the URL points to a Kernel IR file in which case we
-  // skip the compilation step and directly reload the file.
-  const uint8_t* kernel_ir = NULL;
-  intptr_t kernel_ir_size = -1;
-  if (!TryReadKernelFile(url_string, &kernel_ir, &kernel_ir_size)) {
-    // We have a source file, compile it into a kernel ir first.
-    // TODO(asiva): We will have to change this API to pass in a list of files
-    // that have changed. For now just pass in the main url_string and have it
-    // recompile the script.
-    // TODO(aam): When Frontend is ready, VM should be passing vm_outline.dill
-    // instead of vm_platform.dill to Frontend for compilation.
-    Dart_KernelCompilationResult kresult =
-        Dart_CompileToKernel(url_string, platform_dill, platform_dill_size);
-    if (kresult.status != Dart_KernelCompilationStatus_Ok) {
-      return Dart_NewApiError(kresult.error);
-    }
-    kernel_ir = kresult.kernel;
-    kernel_ir_size = kresult.kernel_size;
-  }
-  void* kernel_program =
-      Dart_ReadKernelBinary(kernel_ir, kernel_ir_size, ReleaseFetchedBytes);
-  ASSERT(kernel_program != NULL);
-  return Dart_NewExternalTypedData(Dart_TypedData_kUint64, kernel_program, 1);
-}
-
 class WindowsPathSanitizer {
  public:
   explicit WindowsPathSanitizer(const char* path) {
diff --git a/runtime/bin/dfe.h b/runtime/bin/dfe.h
index 9d5e471..558de85 100644
--- a/runtime/bin/dfe.h
+++ b/runtime/bin/dfe.h
@@ -45,12 +45,6 @@
   }
   void* application_kernel_binary() const { return application_kernel_binary_; }
 
-  // Method to read a kernel file into a kernel program blob.
-  // If the specified script [url] is not a kernel IR, compile it first using
-  // DFE and then read the resulting kernel file into a kernel program blob.
-  // Returns Dart_Null if successful, otherwise an error object is returned.
-  Dart_Handle ReadKernelBinary(Dart_Isolate isolate, const char* url_string);
-
   // Compiles a script and reads the resulting kernel file.
   // If the compilation is successful, returns a valid in memory kernel
   // representation of the script, NULL otherwise
diff --git a/runtime/bin/error_exit.cc b/runtime/bin/error_exit.cc
index a93a972..617da04 100644
--- a/runtime/bin/error_exit.cc
+++ b/runtime/bin/error_exit.cc
@@ -21,7 +21,6 @@
   Log::VPrintErr(format, arguments);
   va_end(arguments);
 
-  Dart_ExitScope();
   Dart_ShutdownIsolate();
 
   // Terminate process exit-code handler.
diff --git a/runtime/bin/loader.cc b/runtime/bin/loader.cc
index 9c05e0d..70c34e3 100644
--- a/runtime/bin/loader.cc
+++ b/runtime/bin/loader.cc
@@ -450,7 +450,6 @@
     } break;
     case Dart_kScriptTag:
       if (payload_type == DartUtils::kSnapshotMagicNumber) {
-        DartUtils::SkipSnapshotMagicNumber(&payload, &payload_length);
         dart_result = Dart_LoadScriptFromSnapshot(payload, payload_length);
         reload_extensions = true;
       } else if (payload_type == DartUtils::kKernelMagicNumber) {
diff --git a/runtime/bin/run_vm_tests.cc b/runtime/bin/run_vm_tests.cc
index 42e4f63..31ecf76 100644
--- a/runtime/bin/run_vm_tests.cc
+++ b/runtime/bin/run_vm_tests.cc
@@ -179,7 +179,6 @@
     bin::DartUtils::ReadFile(&payload, &payload_length, file);
     bin::DartUtils::CloseFile(file);
 
-    bin::DartUtils::SkipSnapshotMagicNumber(&payload, &payload_length);
     Dart_Handle result = Dart_LoadScriptFromSnapshot(payload, payload_length);
     CHECK_RESULT(result);
   }
diff --git a/runtime/bin/snapshot_utils.cc b/runtime/bin/snapshot_utils.cc
index 7c827cd..999cbe0 100644
--- a/runtime/bin/snapshot_utils.cc
+++ b/runtime/bin/snapshot_utils.cc
@@ -246,7 +246,6 @@
 }
 
 static void WriteSnapshotFile(const char* filename,
-                              bool write_magic_number,
                               const uint8_t* buffer,
                               const intptr_t size) {
   File* file = File::Open(NULL, filename, File::kWriteTruncate);
@@ -255,11 +254,6 @@
               filename);
   }
 
-  if (write_magic_number) {
-    // Write the magic number to indicate file is a script snapshot.
-    DartUtils::WriteSnapshotMagicNumber(file);
-  }
-
   if (!file->WriteFully(buffer, size)) {
     ErrorExit(kErrorExitCode, "Unable to write file %s for writing snapshot\n",
               filename);
@@ -332,7 +326,7 @@
     ErrorExit(kErrorExitCode, "%s\n", Dart_GetError(result));
   }
 
-  WriteSnapshotFile(snapshot_filename, true, buffer, size);
+  WriteSnapshotFile(snapshot_filename, buffer, size);
 }
 
 void Snapshot::GenerateAppJIT(const char* snapshot_filename) {
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index ae0dcbd..b4d3d75 100644
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -862,9 +862,6 @@
  *
  * Requires there to be no current isolate.
  *
- * After this call, the `kernel_program` needs to be supplied to a call to
- * `Dart_LoadKernel()` which will then take ownership of the memory.
- *
  * \param script_uri The main source file or snapshot this isolate will load.
  *   The VM will provide this URI to the Dart_IsolateCreateCallback when a child
  *   isolate is created by Isolate.spawn. The embedder should use a URI that
@@ -890,9 +887,9 @@
                                                       void* callback_data,
                                                       char** error);
 /**
- * Shuts down the current isolate. After this call, the current isolate
- * is NULL. Invokes the shutdown callback and any callbacks of remaining
- * weak persistent handles.
+ * Shuts down the current isolate. After this call, the current isolate is NULL.
+ * Any current scopes created by Dart_EnterScope will be exited. Invokes the
+ * shutdown callback and any callbacks of remaining weak persistent handles.
  *
  * Requires there to be a current isolate.
  */
@@ -1030,6 +1027,27 @@
                           intptr_t* script_snapshot_size);
 
 /**
+ * Returns whether the buffer contains a snapshot created by
+ * Dart_Create*Snapshot.
+ *
+ * \param buffer Pointer to a buffer that might contain a snapshot.
+ * \param buffer_size Size of the buffer.
+ *
+ * \return Whether the buffer contains a snapshot (core, app or script).
+ */
+DART_EXPORT bool Dart_IsSnapshot(const uint8_t* buffer, intptr_t buffer_size);
+
+/**
+ * Returns whether the buffer contains a kernel file.
+ *
+ * \param buffer Pointer to a buffer that might contain a kernel binary.
+ * \param buffer_size Size of the buffer.
+ *
+ * \return Whether the buffer contains a kernel binary (full or partial).
+ */
+DART_EXPORT bool Dart_IsKernel(const uint8_t* buffer, intptr_t buffer_size);
+
+/**
  * Returns true if snapshot_buffer contains a Dart2 snapshot.
  *
  * \param snapshot_buffer Pointer to a buffer that contains the snapshot
@@ -2870,17 +2888,18 @@
                             intptr_t script_snapshot_size);
 
 /**
- * Loads a dart application via an in-memory kernel program.
+ * Loads the root library for the current isolate.
  *
- * \param kernel_program The kernel program obtained via
- *        `Dart_ReadKernelBinary`.
+ * Requires there to be no current root library.
  *
- * The VM will take ownership of the `kernel_program` object.
+ * \param buffer A buffer which contains a kernel binary (see
+ *               pkg/kernel/binary.md).
+ * \param buffer_size Length of the passed in buffer.
  *
- * \return If no error occurs, the Library object corresponding to the root
- *   script is returned. Otherwise an error handle is returned.
+ * \return A handle to the root library, or an error.
  */
-DART_EXPORT Dart_Handle Dart_LoadKernel(void* kernel_program);
+DART_EXPORT Dart_Handle Dart_LoadScriptFromKernel(const uint8_t* kernel_buffer,
+                                                  intptr_t kernel_size);
 
 /**
  * Constructs an in-memory kernel program form a binary.
@@ -3006,6 +3025,19 @@
                                          intptr_t column_offset);
 
 /**
+ * Called by the embedder to load a partial program. Does not set the root
+ * library.
+ *
+ * \param buffer A buffer which contains a kernel binary (see
+ *               pkg/kernel/binary.md).
+ * \param buffer_size Length of the passed in buffer.
+ *
+ * \return A handle to the main library of the compilation unit, or an error.
+ */
+DART_EXPORT Dart_Handle Dart_LoadLibraryFromKernel(const uint8_t* kernel_buffer,
+                                                   intptr_t kernel_buffer_size);
+
+/**
  * Imports a library into another library, optionally with a prefix.
  * If no prefix is required, an empty string or Dart_Null() can be
  * supplied.
@@ -3062,7 +3094,6 @@
                                         Dart_Handle source,
                                         intptr_t line_offset,
                                         intptr_t column_offset);
-/* TODO(turnidge): Rename to Dart_LibraryLoadSource? */
 
 /**
  * Loads a patch source string into a library.
diff --git a/runtime/lib/bigint_patch.dart b/runtime/lib/bigint_patch.dart
index 7094f29..08bcf47 100644
--- a/runtime/lib/bigint_patch.dart
+++ b/runtime/lib/bigint_patch.dart
@@ -412,7 +412,7 @@
         ((0x10 | (bits[6] & 0xF)) << 16) + (bits[5] << 8) + bits[4];
 
     var unshiftedBig = new _BigIntImpl._normalized(false, 2, unshiftedDigits);
-    _BigIntImpl absResult;
+    _BigIntImpl absResult = unshiftedBig;
     if (exponent < 0) {
       absResult = unshiftedBig >> -exponent;
     } else if (exponent > 0) {
diff --git a/runtime/observatory/tests/service/get_vm_timeline_rpc_test.dart b/runtime/observatory/tests/service/get_vm_timeline_rpc_test.dart
index 58c4596..c9299b9 100644
--- a/runtime/observatory/tests/service/get_vm_timeline_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_vm_timeline_rpc_test.dart
@@ -75,6 +75,10 @@
       // Skip meta-data events.
       continue;
     }
+    if (event['ph'] == 'C') {
+      // Skip counter events, where an isolate id makes Catapult hard to read.
+      continue;
+    }
     if (event['name'] == 'Runnable' && event['ph'] == 'i') {
       // Skip Runnable events which don't have an isolate.
       continue;
diff --git a/runtime/platform/utils.h b/runtime/platform/utils.h
index 3b05c02..bd8e1ab 100644
--- a/runtime/platform/utils.h
+++ b/runtime/platform/utils.h
@@ -290,6 +290,17 @@
     return bit_cast<int64_t, double>(a) == bit_cast<int64_t, double>(b);
   }
 
+  // A double-to-integer conversion that avoids undefined behavior.
+  // Out of range values and NaNs are converted to minimum value
+  // for type T.
+  template <typename T>
+  static T SafeDoubleToInt(double v) {
+    const double min = static_cast<double>(std::numeric_limits<T>::min());
+    const double max = static_cast<double>(std::numeric_limits<T>::max());
+    return (min <= v && v <= max) ? static_cast<T>(v)
+                                  : std::numeric_limits<T>::min();
+  }
+
   // dart2js represents integers as double precision floats, which can
   // represent anything in the range -2^53 ... 2^53.
   static bool IsJavascriptInt(int64_t value) {
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index e8dde2e..8ba409b 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -2751,7 +2751,7 @@
   sentinel.SetStaticValue(enum_value, true);
   sentinel.RecordStore(enum_value);
 
-  if (thread->isolate()->use_dart_frontend()) {
+  if (enum_cls.kernel_offset() > 0) {
     Object& result = Object::Handle(zone);
     for (intptr_t i = 0; i < fields.Length(); i++) {
       field = Field::RawCast(fields.At(i));
diff --git a/runtime/vm/clustered_snapshot.h b/runtime/vm/clustered_snapshot.h
index 63725d5..4900da6 100644
--- a/runtime/vm/clustered_snapshot.h
+++ b/runtime/vm/clustered_snapshot.h
@@ -190,9 +190,10 @@
   }
 
   void FillHeader(Snapshot::Kind kind) {
-    int64_t* data = reinterpret_cast<int64_t*>(stream_.buffer());
-    data[Snapshot::kLengthIndex] = stream_.bytes_written();
-    data[Snapshot::kSnapshotFlagIndex] = kind;
+    Snapshot* header = reinterpret_cast<Snapshot*>(stream_.buffer());
+    header->set_magic();
+    header->set_length(stream_.bytes_written());
+    header->set_kind(kind);
   }
 
   void WriteVersionAndFeatures(bool is_vm_snapshot);
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index dcd56b5..c4425ed 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -1601,7 +1601,7 @@
   const Object& constant = value->BoundConstant();
   if (constant.IsDouble()) {
     const Double& double_constant = Double::Cast(constant);
-    *result = static_cast<int64_t>(double_constant.value());
+    *result = Utils::SafeDoubleToInt<int64_t>(double_constant.value());
     return (static_cast<double>(*result) == double_constant.value());
   } else if (constant.IsSmi()) {
     *result = Smi::Cast(constant).Value();
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 6fcc4e0..3429379 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -1192,6 +1192,16 @@
   Isolate* I = T->isolate();
   CHECK_ISOLATE(I);
   I->WaitForOutstandingSpawns();
+
+  // Release any remaining API scopes.
+  ApiLocalScope* scope = T->api_top_scope();
+  while (scope != NULL) {
+    ApiLocalScope* previous = scope->previous();
+    delete scope;
+    scope = previous;
+  }
+  T->set_api_top_scope(NULL);
+
   {
     StackZone zone(T);
     HandleScope handle_scope(T);
@@ -1522,6 +1532,21 @@
   return Api::Success();
 }
 
+DART_EXPORT bool Dart_IsSnapshot(const uint8_t* buffer, intptr_t buffer_size) {
+  if (buffer_size < Snapshot::kHeaderSize) {
+    return false;
+  }
+  return Snapshot::SetupFromBuffer(buffer) != NULL;
+}
+
+DART_EXPORT bool Dart_IsKernel(const uint8_t* buffer, intptr_t buffer_size) {
+  if (buffer_size < 4) {
+    return false;
+  }
+  return (buffer[0] == 0x90) && (buffer[1] == 0xab) && (buffer[2] == 0xcd) &&
+         (buffer[3] == 0xef);
+}
+
 DART_EXPORT bool Dart_IsDart2Snapshot(const uint8_t* snapshot_buffer) {
   if (snapshot_buffer == NULL) {
     return false;
@@ -5144,6 +5169,7 @@
 
   Dart_Handle result;
   if (I->use_dart_frontend()) {
+    // TODO(kernel): Fix callers to use Dart_LoadScriptFromKernel.
     if ((source == Api::Null()) || (source == NULL)) {
       RETURN_NULL_ERROR(source);
     }
@@ -5260,13 +5286,14 @@
   return NULL;
 #else
   kernel::Program* program =
-      ReadPrecompiledKernelFromBuffer(buffer, buffer_len);
+      kernel::Program::ReadFromBuffer(buffer, buffer_len);
   program->set_release_buffer_callback(callback);
   return program;
 #endif
 }
 
-DART_EXPORT Dart_Handle Dart_LoadKernel(void* kernel_program) {
+DART_EXPORT Dart_Handle Dart_LoadScriptFromKernel(const uint8_t* buffer,
+                                                  intptr_t buffer_size) {
 #if defined(DART_PRECOMPILED_RUNTIME)
   return Api::NewError("%s: Cannot compile on an AOT runtime.", CURRENT_FUNC);
 #else
@@ -5284,9 +5311,8 @@
   CHECK_CALLBACK_STATE(T);
   CHECK_COMPILATION_ALLOWED(I);
 
-  // NOTE: Now the VM owns the [kernel_program] memory!
-  // We will promptly delete it when done.
-  kernel::Program* program = reinterpret_cast<kernel::Program*>(kernel_program);
+  kernel::Program* program = kernel::Program::ReadFromBuffer(
+      buffer, buffer_size, false /* take_buffer_ownership */);
   const Object& tmp = kernel::KernelLoader::LoadEntireProgram(program);
   delete program;
 
@@ -5509,6 +5535,7 @@
   }
   Dart_Handle result;
   if (I->use_dart_frontend()) {
+    // TODO(kernel): Fix callers to use Dart_LoadLibraryFromKernel.
     void* kernel_pgm = reinterpret_cast<void*>(source);
     result = LoadKernelProgram(T, url_str, kernel_pgm);
     if (::Dart_IsError(result)) {
@@ -5573,6 +5600,29 @@
 #endif  // defined(DART_PRECOMPILED_RUNTIME)
 }
 
+DART_EXPORT Dart_Handle Dart_LoadLibraryFromKernel(const uint8_t* buffer,
+                                                   intptr_t buffer_size) {
+#if defined(DART_PRECOMPILED_RUNTIME)
+  return Api::NewError("%s: Cannot compile on an AOT runtime.", CURRENT_FUNC);
+#else
+  DARTSCOPE(Thread::Current());
+  API_TIMELINE_DURATION(T);
+  StackZone zone(T);
+  Isolate* I = T->isolate();
+
+  CHECK_CALLBACK_STATE(T);
+  CHECK_COMPILATION_ALLOWED(I);
+
+  kernel::Program* program = kernel::Program::ReadFromBuffer(
+      buffer, buffer_size, false /* take_buffer_ownership */);
+  const Object& result =
+      kernel::KernelLoader::LoadEntireProgram(program, false);
+  delete program;
+
+  return Api::NewHandle(T, result.raw());
+#endif  // defined(DART_PRECOMPILED_RUNTIME)
+}
+
 DART_EXPORT Dart_Handle Dart_LibraryImportLibrary(Dart_Handle library,
                                                   Dart_Handle import,
                                                   Dart_Handle prefix) {
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 3dbb929..3a6edba 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -2709,8 +2709,6 @@
     thread = thread_registry()->GetFreeThreadLocked(this, is_mutator);
     ASSERT(thread != NULL);
 
-    thread->ResetHighWatermark();
-
     // Set up other values and set the TLS value.
     thread->isolate_ = this;
     ASSERT(heap() != NULL);
@@ -2731,6 +2729,8 @@
     }
     Thread::SetCurrent(thread);
     os_thread->EnableThreadInterrupts();
+
+    thread->ResetHighWatermark();
   }
   return thread;
 }
diff --git a/runtime/vm/isolate_reload.cc b/runtime/vm/isolate_reload.cc
index 338409f..cd42d41 100644
--- a/runtime/vm/isolate_reload.cc
+++ b/runtime/vm/isolate_reload.cc
@@ -585,11 +585,11 @@
     intptr_t num_libs = libs.Length();
     modified_libs_ = new (Z) BitVector(Z, num_libs);
 
-    // ReadPrecompiledKernelFromFile checks to see if the file at
+    // ReadKernelFromFile checks to see if the file at
     // root_script_url is a valid .dill file. If that's the case, a Program*
     // is returned. Otherwise, this is likely a source file that needs to be
-    // compiled, so ReadPrecompiledKernelFromFile returns NULL.
-    kernel_program.set(ReadPrecompiledKernelFromFile(root_script_url));
+    // compiled, so ReadKernelFromFile returns NULL.
+    kernel_program.set(kernel::Program::ReadFromFile(root_script_url));
     if (kernel_program.get() == NULL) {
       TransitionVMToNative transition(thread);
       Dart_SourceFile* modified_scripts = NULL;
@@ -613,7 +613,7 @@
       }
       did_kernel_compilation = true;
       kernel_program.set(
-          ReadPrecompiledKernelFromBuffer(retval.kernel, retval.kernel_size));
+          kernel::Program::ReadFromBuffer(retval.kernel, retval.kernel_size));
     }
 
     kernel_program.get()->set_release_buffer_callback(ReleaseFetchedBytes);
diff --git a/runtime/vm/kernel.h b/runtime/vm/kernel.h
index 579a186..deb900d 100644
--- a/runtime/vm/kernel.h
+++ b/runtime/vm/kernel.h
@@ -77,6 +77,11 @@
    */
   static Program* ReadFrom(Reader* reader, bool take_buffer_ownership = true);
 
+  static Program* ReadFromFile(const char* script_uri);
+  static Program* ReadFromBuffer(const uint8_t* buffer,
+                                 intptr_t buffer_length,
+                                 bool take_buffer_ownership = true);
+
   bool is_single_program() { return single_program_; }
   NameIndex main_method() { return main_method_reference_; }
   intptr_t source_table_offset() const { return source_table_offset_; }
@@ -195,12 +200,6 @@
                                         TokenPosition* end);
 
 }  // namespace kernel
-
-kernel::Program* ReadPrecompiledKernelFromFile(const char* script_uri);
-
-kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer,
-                                                 intptr_t buffer_length);
-
 }  // namespace dart
 
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
diff --git a/runtime/vm/kernel_binary.cc b/runtime/vm/kernel_binary.cc
index 21e833f..a2fe779 100644
--- a/runtime/vm/kernel_binary.cc
+++ b/runtime/vm/kernel_binary.cc
@@ -77,9 +77,7 @@
   return program;
 }
 
-}  // namespace kernel
-
-kernel::Program* ReadPrecompiledKernelFromFile(const char* script_uri) {
+Program* Program::ReadFromFile(const char* script_uri) {
   Thread* thread = Thread::Current();
   if (script_uri == NULL) {
     return NULL;
@@ -108,11 +106,13 @@
   return kernel_program;
 }
 
-kernel::Program* ReadPrecompiledKernelFromBuffer(const uint8_t* buffer,
-                                                 intptr_t buffer_length) {
+Program* Program::ReadFromBuffer(const uint8_t* buffer,
+                                 intptr_t buffer_length,
+                                 bool take_buffer_ownership) {
   kernel::Reader reader(buffer, buffer_length);
-  return kernel::Program::ReadFrom(&reader);
+  return kernel::Program::ReadFrom(&reader, take_buffer_ownership);
 }
 
+}  // namespace kernel
 }  // namespace dart
 #endif  // !defined(DART_PRECOMPILED_RUNTIME)
diff --git a/runtime/vm/kernel_loader.cc b/runtime/vm/kernel_loader.cc
index fa60ee8..b2b6b26 100644
--- a/runtime/vm/kernel_loader.cc
+++ b/runtime/vm/kernel_loader.cc
@@ -192,49 +192,50 @@
   initialize_fields();
 }
 
-Object& KernelLoader::LoadEntireProgram(Program* program) {
+Object& KernelLoader::LoadEntireProgram(Program* program,
+                                        bool process_pending_classes) {
   if (program->is_single_program()) {
     KernelLoader loader(program);
-    return loader.LoadProgram();
-  } else {
-    kernel::Reader reader(program->kernel_data(), program->kernel_data_size());
-    GrowableArray<intptr_t> subprogram_file_starts;
-    index_programs(&reader, &subprogram_file_starts);
-
-    Thread* thread = Thread::Current();
-    Zone* zone = thread->zone();
-    Library& library = Library::Handle(zone);
-    // Create "fake programs" for each sub-program.
-    intptr_t subprogram_count = subprogram_file_starts.length() - 1;
-    for (intptr_t i = 0; i < subprogram_count; ++i) {
-      intptr_t subprogram_start = subprogram_file_starts.At(i);
-      intptr_t subprogram_end = subprogram_file_starts.At(i + 1);
-      reader.set_raw_buffer(program->kernel_data() + subprogram_start);
-      reader.set_size(subprogram_end - subprogram_start);
-      reader.set_offset(0);
-      Program* subprogram = Program::ReadFrom(&reader, false);
-      ASSERT(subprogram->is_single_program());
-      KernelLoader loader(subprogram);
-      Object& load_result = loader.LoadProgram(false);
-      if (load_result.IsError()) return load_result;
-
-      if (library.IsNull() && load_result.IsLibrary()) {
-        library ^= load_result.raw();
-      }
-
-      delete subprogram;
-    }
-
-    if (!ClassFinalizer::ProcessPendingClasses()) {
-      // Class finalization failed -> sticky error would be set.
-      Error& error = Error::Handle(zone);
-      error = thread->sticky_error();
-      thread->clear_sticky_error();
-      return error;
-    }
-
-    return library;
+    return loader.LoadProgram(process_pending_classes);
   }
+
+  kernel::Reader reader(program->kernel_data(), program->kernel_data_size());
+  GrowableArray<intptr_t> subprogram_file_starts;
+  index_programs(&reader, &subprogram_file_starts);
+
+  Thread* thread = Thread::Current();
+  Zone* zone = thread->zone();
+  Library& library = Library::Handle(zone);
+  // Create "fake programs" for each sub-program.
+  intptr_t subprogram_count = subprogram_file_starts.length() - 1;
+  for (intptr_t i = 0; i < subprogram_count; ++i) {
+    intptr_t subprogram_start = subprogram_file_starts.At(i);
+    intptr_t subprogram_end = subprogram_file_starts.At(i + 1);
+    reader.set_raw_buffer(program->kernel_data() + subprogram_start);
+    reader.set_size(subprogram_end - subprogram_start);
+    reader.set_offset(0);
+    Program* subprogram = Program::ReadFrom(&reader, false);
+    ASSERT(subprogram->is_single_program());
+    KernelLoader loader(subprogram);
+    Object& load_result = loader.LoadProgram(false);
+    if (load_result.IsError()) return load_result;
+
+    if (library.IsNull() && load_result.IsLibrary()) {
+      library ^= load_result.raw();
+    }
+
+    delete subprogram;
+  }
+
+  if (process_pending_classes && !ClassFinalizer::ProcessPendingClasses()) {
+    // Class finalization failed -> sticky error would be set.
+    Error& error = Error::Handle(zone);
+    error = thread->sticky_error();
+    thread->clear_sticky_error();
+    return error;
+  }
+
+  return library;
 }
 
 void KernelLoader::index_programs(
@@ -1168,7 +1169,7 @@
     }
     class_helper->SetJustRead(ClassHelper::kFields);
 
-    if (I->use_dart_frontend() && klass.is_enum_class()) {
+    if (klass.is_enum_class()) {
       // Add static field 'const _deleted_enum_sentinel'.
       // This field does not need to be of type E.
       Field& deleted_enum_sentinel = Field::ZoneHandle(Z);
diff --git a/runtime/vm/kernel_loader.h b/runtime/vm/kernel_loader.h
index 7cafb9d..d18fa6c 100644
--- a/runtime/vm/kernel_loader.h
+++ b/runtime/vm/kernel_loader.h
@@ -123,7 +123,8 @@
 class KernelLoader {
  public:
   explicit KernelLoader(Program* program);
-  static Object& LoadEntireProgram(Program* program);
+  static Object& LoadEntireProgram(Program* program,
+                                   bool process_pending_classes = true);
 
   // Returns the library containing the main procedure, null if there
   // was no main procedure, or a failure object if there was an error.
diff --git a/runtime/vm/snapshot.cc b/runtime/vm/snapshot.cc
index a906dd7..1b91df8 100644
--- a/runtime/vm/snapshot.cc
+++ b/runtime/vm/snapshot.cc
@@ -152,19 +152,16 @@
   }
 }
 
-// TODO(5411462): Temporary setup of snapshot for testing purposes,
-// the actual creation of a snapshot maybe done differently.
 const Snapshot* Snapshot::SetupFromBuffer(const void* raw_memory) {
   ASSERT(raw_memory != NULL);
-  ASSERT(kHeaderSize == sizeof(Snapshot));
-  ASSERT(kLengthIndex == length_offset());
-  ASSERT((kSnapshotFlagIndex * sizeof(int64_t)) == kind_offset());
-  ASSERT((kHeapObjectTag & kInlined));
   const Snapshot* snapshot = reinterpret_cast<const Snapshot*>(raw_memory);
+  if (!snapshot->check_magic()) {
+    return NULL;
+  }
   // If the raw length is negative or greater than what the local machine can
   // handle, then signal an error.
-  int64_t snapshot_length = ReadUnaligned(&snapshot->unaligned_length_);
-  if ((snapshot_length < 0) || (snapshot_length > kIntptrMax)) {
+  int64_t length = snapshot->large_length();
+  if ((length < 0) || (length > kIntptrMax)) {
     return NULL;
   }
   return snapshot;
diff --git a/runtime/vm/snapshot.h b/runtime/vm/snapshot.h
index 5db9e24..44cb6db 100644
--- a/runtime/vm/snapshot.h
+++ b/runtime/vm/snapshot.h
@@ -161,19 +161,36 @@
   };
   static const char* KindToCString(Kind kind);
 
-  static const int kHeaderSize = 2 * sizeof(int64_t);
-  static const int kLengthIndex = 0;
-  static const int kSnapshotFlagIndex = 1;
-
   static const Snapshot* SetupFromBuffer(const void* raw_memory);
 
-  // Getters.
-  const uint8_t* content() const { OPEN_ARRAY_START(uint8_t, uint8_t); }
-  intptr_t length() const {
-    return static_cast<intptr_t>(ReadUnaligned(&unaligned_length_));
+  static const int32_t kMagicValue = 0xdcdcf5f5;
+  static const intptr_t kMagicOffset = 0;
+  static const intptr_t kMagicSize = sizeof(int32_t);
+  static const intptr_t kLengthOffset = kMagicOffset + kMagicSize;
+  static const intptr_t kLengthSize = sizeof(int64_t);
+  static const intptr_t kKindOffset = kLengthOffset + kLengthSize;
+  static const intptr_t kKindSize = sizeof(int64_t);
+  static const intptr_t kHeaderSize = kKindOffset + kKindSize;
+
+  // Accessors.
+  bool check_magic() const {
+    return Read<int32_t>(kMagicOffset) == kMagicValue;
   }
-  Kind kind() const {
-    return static_cast<Kind>(ReadUnaligned(&unaligned_kind_));
+  void set_magic() { return Write<int32_t>(kMagicOffset, kMagicValue); }
+  // Excluding the magic value from the size written in the buffer is needed
+  // so we give a proper version mismatch error for snapshots create before
+  // magic value was written by the VM instead of the embedder.
+  int64_t large_length() const {
+    return Read<int64_t>(kLengthOffset) + kMagicSize;
+  }
+  intptr_t length() const { return static_cast<intptr_t>(large_length()); }
+  void set_length(intptr_t value) {
+    return Write<int64_t>(kLengthOffset, value - kMagicSize);
+  }
+  Kind kind() const { return static_cast<Kind>(Read<int64_t>(kKindOffset)); }
+  void set_kind(Kind value) { return Write<int64_t>(kKindOffset, value); }
+  const uint8_t* content() const {
+    return reinterpret_cast<const uint8_t*>(this) + kHeaderSize;
   }
 
   static bool IsFull(Kind kind) {
@@ -185,20 +202,21 @@
 
   const uint8_t* Addr() const { return reinterpret_cast<const uint8_t*>(this); }
 
-  static intptr_t length_offset() {
-    return OFFSET_OF(Snapshot, unaligned_length_);
-  }
-  static intptr_t kind_offset() { return OFFSET_OF(Snapshot, unaligned_kind_); }
-
  private:
   // Prevent Snapshot from ever being allocated directly.
   Snapshot();
 
-  // The following fields are potentially unaligned.
-  int64_t unaligned_length_;  // Stream length.
-  int64_t unaligned_kind_;    // Kind of snapshot.
+  template <typename T>
+  T Read(intptr_t offset) const {
+    return ReadUnaligned(
+        reinterpret_cast<const T*>(reinterpret_cast<uword>(this) + offset));
+  }
 
-  // Variable length data follows here.
+  template <typename T>
+  void Write(intptr_t offset, T value) {
+    return StoreUnaligned(
+        reinterpret_cast<T*>(reinterpret_cast<uword>(this) + offset), value);
+  }
 
   DISALLOW_COPY_AND_ASSIGN(Snapshot);
 };
@@ -570,9 +588,10 @@
   }
 
   void FillHeader(Snapshot::Kind kind) {
-    int64_t* data = reinterpret_cast<int64_t*>(stream_.buffer());
-    data[Snapshot::kLengthIndex] = stream_.bytes_written();
-    data[Snapshot::kSnapshotFlagIndex] = kind;
+    Snapshot* header = reinterpret_cast<Snapshot*>(stream_.buffer());
+    header->set_magic();
+    header->set_length(stream_.bytes_written());
+    header->set_kind(kind);
   }
 
   void FreeBuffer() {
diff --git a/runtime/vm/snapshot_test.cc b/runtime/vm/snapshot_test.cc
index 3bfe589..cff0584 100644
--- a/runtime/vm/snapshot_test.cc
+++ b/runtime/vm/snapshot_test.cc
@@ -1029,6 +1029,7 @@
     result = Dart_CreateSnapshot(NULL, &vm_isolate_snapshot_size,
                                  &isolate_snapshot, &isolate_snapshot_size);
     EXPECT_VALID(result);
+    EXPECT(Dart_IsSnapshot(isolate_snapshot, isolate_snapshot_size));
     full_snapshot = reinterpret_cast<uint8_t*>(malloc(isolate_snapshot_size));
     memmove(full_snapshot, isolate_snapshot, isolate_snapshot_size);
     Dart_ExitScope();
@@ -1067,6 +1068,7 @@
     // Write out the script snapshot.
     result = Dart_CreateScriptSnapshot(&buffer, &size);
     EXPECT_VALID(result);
+    EXPECT(Dart_IsSnapshot(buffer, size));
     script_snapshot = reinterpret_cast<uint8_t*>(malloc(size));
     memmove(script_snapshot, buffer, size);
     Dart_ExitScope();
@@ -1139,6 +1141,7 @@
     result = Dart_CreateSnapshot(NULL, &vm_isolate_snapshot_size,
                                  &isolate_snapshot, &isolate_snapshot_size);
     EXPECT_VALID(result);
+    EXPECT(Dart_IsSnapshot(isolate_snapshot, isolate_snapshot_size));
     full_snapshot = reinterpret_cast<uint8_t*>(malloc(isolate_snapshot_size));
     memmove(full_snapshot, isolate_snapshot, isolate_snapshot_size);
     Dart_ExitScope();
@@ -1176,6 +1179,7 @@
     // Write out the script snapshot.
     result = Dart_CreateScriptSnapshot(&buffer, &size);
     EXPECT_VALID(result);
+    EXPECT(Dart_IsSnapshot(buffer, size));
     script_snapshot = reinterpret_cast<uint8_t*>(malloc(size));
     memmove(script_snapshot, buffer, size);
     Dart_ExitScope();
@@ -1452,6 +1456,7 @@
     result = Dart_CreateSnapshot(NULL, &vm_isolate_snapshot_size,
                                  &isolate_snapshot, &isolate_snapshot_size);
     EXPECT_VALID(result);
+    EXPECT(Dart_IsSnapshot(isolate_snapshot, isolate_snapshot_size));
     full_snapshot = reinterpret_cast<uint8_t*>(malloc(isolate_snapshot_size));
     memmove(full_snapshot, isolate_snapshot, isolate_snapshot_size);
     Dart_ExitScope();
@@ -1486,6 +1491,7 @@
     // Write out the script snapshot.
     result = Dart_CreateScriptSnapshot(&buffer, &size);
     EXPECT_VALID(result);
+    EXPECT(Dart_IsSnapshot(buffer, size));
     script_snapshot = reinterpret_cast<uint8_t*>(malloc(size));
     memmove(script_snapshot, buffer, size);
     Dart_ExitScope();
@@ -1550,6 +1556,7 @@
     result = Dart_CreateSnapshot(NULL, &vm_isolate_snapshot_size,
                                  &isolate_snapshot, &isolate_snapshot_size);
     EXPECT_VALID(result);
+    EXPECT(Dart_IsSnapshot(isolate_snapshot, isolate_snapshot_size));
     full_snapshot = reinterpret_cast<uint8_t*>(malloc(isolate_snapshot_size));
     memmove(full_snapshot, isolate_snapshot, isolate_snapshot_size);
     Dart_ExitScope();
@@ -1568,6 +1575,7 @@
     // Write out the script snapshot.
     result = Dart_CreateScriptSnapshot(&buffer, &size);
     EXPECT_VALID(result);
+    EXPECT(Dart_IsSnapshot(buffer, size));
     script_snapshot = reinterpret_cast<uint8_t*>(malloc(size));
     memmove(script_snapshot, buffer, size);
     Dart_ExitScope();
@@ -1641,6 +1649,7 @@
     result = Dart_CreateSnapshot(NULL, &vm_isolate_snapshot_size,
                                  &isolate_snapshot, &isolate_snapshot_size);
     EXPECT_VALID(result);
+    EXPECT(Dart_IsSnapshot(isolate_snapshot, isolate_snapshot_size));
     full_snapshot = reinterpret_cast<uint8_t*>(malloc(isolate_snapshot_size));
     memmove(full_snapshot, isolate_snapshot, isolate_snapshot_size);
     Dart_ExitScope();
@@ -1669,6 +1678,7 @@
     // Write out the script snapshot.
     result = Dart_CreateScriptSnapshot(&buffer, &size);
     EXPECT_VALID(result);
+    EXPECT(Dart_IsSnapshot(buffer, size));
     script_snapshot = reinterpret_cast<uint8_t*>(malloc(size));
     memmove(script_snapshot, buffer, size);
     Dart_ExitScope();
@@ -1733,6 +1743,7 @@
     result = Dart_CreateSnapshot(NULL, &vm_isolate_snapshot_size,
                                  &isolate_snapshot, &isolate_snapshot_size);
     EXPECT_VALID(result);
+    EXPECT(Dart_IsSnapshot(isolate_snapshot, isolate_snapshot_size));
     full_snapshot = reinterpret_cast<uint8_t*>(malloc(isolate_snapshot_size));
     memmove(full_snapshot, isolate_snapshot, isolate_snapshot_size);
     Dart_ExitScope();
@@ -1754,6 +1765,7 @@
     // Write out the script snapshot.
     result = Dart_CreateScriptSnapshot(&buffer, &size);
     EXPECT_VALID(result);
+    EXPECT(Dart_IsSnapshot(buffer, size));
     script_snapshot = reinterpret_cast<uint8_t*>(malloc(size));
     memmove(script_snapshot, buffer, size);
     Dart_ExitScope();
@@ -3145,4 +3157,18 @@
   free(writer.buffer());
 }
 
+TEST_CASE(IsSnapshotNegative) {
+  EXPECT(!Dart_IsSnapshot(NULL, 0));
+
+  uint8_t buffer[4] = {0, 0, 0, 0};
+  EXPECT(!Dart_IsSnapshot(buffer, ARRAY_SIZE(buffer)));
+}
+
+TEST_CASE(IsKernelNegative) {
+  EXPECT(!Dart_IsKernel(NULL, 0));
+
+  uint8_t buffer[4] = {0, 0, 0, 0};
+  EXPECT(!Dart_IsKernel(buffer, ARRAY_SIZE(buffer)));
+}
+
 }  // namespace dart
diff --git a/runtime/vm/thread.cc b/runtime/vm/thread.cc
index 239b06a7..af6c31a 100644
--- a/runtime/vm/thread.cc
+++ b/runtime/vm/thread.cc
@@ -457,6 +457,25 @@
   return false;
 }
 
+void Thread::SetHighWatermark(intptr_t value) {
+  zone_high_watermark_ = value;
+
+#if !defined(PRODUCT)
+  if ((isolate()->name() != NULL)) {
+    TimelineEvent* event = Timeline::GetZoneStream()->StartEvent();
+    if (event != NULL) {
+      event->Counter(strdup(isolate()->name()));
+      event->set_owns_label(true);
+      // Prevent Catapult from showing "isolateId" as another series.
+      event->set_isolate_id(ILLEGAL_PORT);
+      event->SetNumArguments(1);
+      event->FormatArgument(0, "zoneHighWatermark", "%" Pd, value);
+      event->Complete();
+    }
+  }
+#endif
+}
+
 void Thread::DeferOOBMessageInterrupts() {
   MonitorLocker ml(thread_lock_);
   defer_oob_messages_count_++;
diff --git a/runtime/vm/thread.h b/runtime/vm/thread.h
index 2c51ce0..c506170 100644
--- a/runtime/vm/thread.h
+++ b/runtime/vm/thread.h
@@ -284,7 +284,7 @@
   void IncrementMemoryCapacity(uintptr_t value) {
     current_zone_capacity_ += value;
     if (current_zone_capacity_ > zone_high_watermark_) {
-      zone_high_watermark_ = current_zone_capacity_;
+      SetHighWatermark(current_zone_capacity_);
     }
   }
 
@@ -297,7 +297,9 @@
 
   uintptr_t zone_high_watermark() const { return zone_high_watermark_; }
 
-  void ResetHighWatermark() { zone_high_watermark_ = current_zone_capacity_; }
+  void ResetHighWatermark() { SetHighWatermark(current_zone_capacity_); }
+
+  void SetHighWatermark(intptr_t value);
 
   // The reusable api local scope for this thread.
   ApiLocalScope* api_reusable_scope() const { return api_reusable_scope_; }
diff --git a/runtime/vm/timeline.h b/runtime/vm/timeline.h
index 8ad971c..c37a982 100644
--- a/runtime/vm/timeline.h
+++ b/runtime/vm/timeline.h
@@ -39,7 +39,8 @@
   V(Embedder, false)                                                           \
   V(GC, false)                                                                 \
   V(Isolate, false)                                                            \
-  V(VM, false)
+  V(VM, false)                                                                 \
+  V(Zone, false)
 
 // A stream of timeline events. A stream has a name and can be enabled or
 // disabled (globally and per isolate).
@@ -314,10 +315,10 @@
   void PrintJSON(JSONStream* stream) const;
 
   ThreadId thread() const { return thread_; }
-
   void set_thread(ThreadId tid) { thread_ = tid; }
 
   Dart_Port isolate_id() const { return isolate_id_; }
+  void set_isolate_id(Dart_Port id) { isolate_id_ = id; }
 
   const char* label() const { return label_; }
 
diff --git a/sdk/lib/_internal/js_runtime/lib/core_patch.dart b/sdk/lib/_internal/js_runtime/lib/core_patch.dart
index ce9b3e0..df3bf16 100644
--- a/sdk/lib/_internal/js_runtime/lib/core_patch.dart
+++ b/sdk/lib/_internal/js_runtime/lib/core_patch.dart
@@ -1198,7 +1198,7 @@
     unshiftedDigits[3] = 0x10 | (bits[6] & 0xF);
 
     var unshiftedBig = new _BigIntImpl._normalized(false, 4, unshiftedDigits);
-    _BigIntImpl absResult;
+    _BigIntImpl absResult = unshiftedBig;
     if (exponent < 0) {
       absResult = unshiftedBig >> -exponent;
     } else if (exponent > 0) {
diff --git a/sdk/lib/collection/maps.dart b/sdk/lib/collection/maps.dart
index bdc5a41..5967553 100644
--- a/sdk/lib/collection/maps.dart
+++ b/sdk/lib/collection/maps.dart
@@ -113,7 +113,7 @@
     if (this.containsKey(key)) {
       return this[key] = update(this[key]);
     }
-    if (ifAbsent == null) {
+    if (ifAbsent != null) {
       return this[key] = ifAbsent();
     }
     throw new ArgumentError.value(key, "key", "Key not in map.");
diff --git a/sdk/lib/core/iterable.dart b/sdk/lib/core/iterable.dart
index 8341360..2187812 100644
--- a/sdk/lib/core/iterable.dart
+++ b/sdk/lib/core/iterable.dart
@@ -160,7 +160,7 @@
    * if it is already an `Iterable<R>`.
    *
    * It means that `someIterable.cast<Object>().toList()` is not guaranteed
-   * to return precisley a `List<Object>`, but it may return a subtype.
+   * to return precisely a `List<Object>`, but it may return a subtype.
    */
   Iterable<R> cast<R>() {
     Iterable<Object> self = this;
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index b3de731..f76fa2e 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -37,6 +37,7 @@
 import 'dart:svg' show Matrix;
 import 'dart:svg' show SvgSvgElement;
 import 'dart:web_audio' as web_audio;
+import 'dart:web_audio' show AudioBuffer, AudioTrack, AudioTrackList;
 import 'dart:web_gl' as gl;
 import 'dart:web_gl' show RenderingContext, RenderingContext2;
 import 'dart:web_sql';
@@ -101,7 +102,7 @@
 // Workaround for tags like <cite> that lack their own Element subclass --
 // Dart issue 1990.
 @Native("HTMLElement")
-class HtmlElement extends Element {
+class HtmlElement extends Element implements NoncedElement {
   factory HtmlElement() {
     throw new UnsupportedError("Not supported");
   }
@@ -112,6 +113,10 @@
    * This can only be called by subclasses from their created constructor.
    */
   HtmlElement.created() : super.created();
+
+  // From NoncedElement
+  @DomName('HTMLElement.nonce')
+  String nonce;
 }
 
 createCustomUpgrader(Type customElementClass, $this) => $this;
@@ -124,6 +129,65 @@
 @Experimental() // untriaged
 typedef void FontFaceSetForEachCallback(
     FontFace fontFace, FontFace fontFaceAgain, FontFaceSet set);
+
+// 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.
+
+@DocsEditable()
+@DomName('AbortPaymentEvent')
+@Experimental() // untriaged
+@Native("AbortPaymentEvent")
+class AbortPaymentEvent extends ExtendableEvent {
+  // To suppress missing implicit constructor warnings.
+  factory AbortPaymentEvent._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('AbortPaymentEvent.AbortPaymentEvent')
+  @DocsEditable()
+  factory AbortPaymentEvent(String type, Map eventInitDict) {
+    var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
+    return AbortPaymentEvent._create_1(type, eventInitDict_1);
+  }
+  static AbortPaymentEvent _create_1(type, eventInitDict) => JS(
+      'AbortPaymentEvent', 'new AbortPaymentEvent(#,#)', type, eventInitDict);
+
+  @DomName('AbortPaymentEvent.respondWith')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void respondWith(Future paymentAbortedResponse) native;
+}
+// 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.
+
+@DocsEditable()
+@DomName('AbsoluteOrientationSensor')
+@Experimental() // untriaged
+@Native("AbsoluteOrientationSensor")
+class AbsoluteOrientationSensor extends OrientationSensor {
+  // To suppress missing implicit constructor warnings.
+  factory AbsoluteOrientationSensor._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('AbsoluteOrientationSensor.AbsoluteOrientationSensor')
+  @DocsEditable()
+  factory AbsoluteOrientationSensor([Map sensorOptions]) {
+    if (sensorOptions != null) {
+      var sensorOptions_1 = convertDartToNative_Dictionary(sensorOptions);
+      return AbsoluteOrientationSensor._create_1(sensorOptions_1);
+    }
+    return AbsoluteOrientationSensor._create_2();
+  }
+  static AbsoluteOrientationSensor _create_1(sensorOptions) => JS(
+      'AbsoluteOrientationSensor',
+      'new AbsoluteOrientationSensor(#)',
+      sensorOptions);
+  static AbsoluteOrientationSensor _create_2() =>
+      JS('AbsoluteOrientationSensor', 'new AbsoluteOrientationSensor()');
+}
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -152,6 +216,466 @@
   @DocsEditable()
   Stream<Event> get onError => errorEvent.forTarget(this);
 }
+// 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.
+
+@DocsEditable()
+@DomName('Accelerometer')
+@Experimental() // untriaged
+@Native("Accelerometer")
+class Accelerometer extends Sensor {
+  // To suppress missing implicit constructor warnings.
+  factory Accelerometer._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('Accelerometer.Accelerometer')
+  @DocsEditable()
+  factory Accelerometer([Map sensorOptions]) {
+    if (sensorOptions != null) {
+      var sensorOptions_1 = convertDartToNative_Dictionary(sensorOptions);
+      return Accelerometer._create_1(sensorOptions_1);
+    }
+    return Accelerometer._create_2();
+  }
+  static Accelerometer _create_1(sensorOptions) =>
+      JS('Accelerometer', 'new Accelerometer(#)', sensorOptions);
+  static Accelerometer _create_2() =>
+      JS('Accelerometer', 'new Accelerometer()');
+
+  @DomName('Accelerometer.x')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num x;
+
+  @DomName('Accelerometer.y')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num y;
+
+  @DomName('Accelerometer.z')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num z;
+}
+// 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.
+
+@DocsEditable()
+@DomName('AccessibleNode')
+@Experimental() // untriaged
+@Native("AccessibleNode")
+class AccessibleNode extends EventTarget {
+  // To suppress missing implicit constructor warnings.
+  factory AccessibleNode._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('AccessibleNode.accessibleclickEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<Event> accessibleClickEvent =
+      const EventStreamProvider<Event>('accessibleclick');
+
+  @DomName('AccessibleNode.accessiblecontextmenuEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<Event> accessibleContextMenuEvent =
+      const EventStreamProvider<Event>('accessiblecontextmenu');
+
+  @DomName('AccessibleNode.accessibledecrementEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<Event> accessibleDecrementEvent =
+      const EventStreamProvider<Event>('accessibledecrement');
+
+  @DomName('AccessibleNode.accessiblefocusEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<Event> accessibleFocusEvent =
+      const EventStreamProvider<Event>('accessiblefocus');
+
+  @DomName('AccessibleNode.accessibleincrementEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<Event> accessibleIncrementEvent =
+      const EventStreamProvider<Event>('accessibleincrement');
+
+  @DomName('AccessibleNode.accessiblescrollintoviewEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<Event> accessibleScrollIntoViewEvent =
+      const EventStreamProvider<Event>('accessiblescrollintoview');
+
+  @DomName('AccessibleNode.AccessibleNode')
+  @DocsEditable()
+  factory AccessibleNode() {
+    return AccessibleNode._create_1();
+  }
+  static AccessibleNode _create_1() =>
+      JS('AccessibleNode', 'new AccessibleNode()');
+
+  @DomName('AccessibleNode.activeDescendant')
+  @DocsEditable()
+  @Experimental() // untriaged
+  AccessibleNode activeDescendant;
+
+  @DomName('AccessibleNode.atomic')
+  @DocsEditable()
+  @Experimental() // untriaged
+  bool atomic;
+
+  @DomName('AccessibleNode.autocomplete')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String autocomplete;
+
+  @DomName('AccessibleNode.busy')
+  @DocsEditable()
+  @Experimental() // untriaged
+  bool busy;
+
+  @DomName('AccessibleNode.checked')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String checked;
+
+  @DomName('AccessibleNode.colCount')
+  @DocsEditable()
+  @Experimental() // untriaged
+  int colCount;
+
+  @DomName('AccessibleNode.colIndex')
+  @DocsEditable()
+  @Experimental() // untriaged
+  int colIndex;
+
+  @DomName('AccessibleNode.colSpan')
+  @DocsEditable()
+  @Experimental() // untriaged
+  int colSpan;
+
+  @DomName('AccessibleNode.controls')
+  @DocsEditable()
+  @Experimental() // untriaged
+  AccessibleNodeList controls;
+
+  @DomName('AccessibleNode.current')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String current;
+
+  @DomName('AccessibleNode.describedBy')
+  @DocsEditable()
+  @Experimental() // untriaged
+  AccessibleNodeList describedBy;
+
+  @DomName('AccessibleNode.details')
+  @DocsEditable()
+  @Experimental() // untriaged
+  AccessibleNode details;
+
+  @DomName('AccessibleNode.disabled')
+  @DocsEditable()
+  @Experimental() // untriaged
+  bool disabled;
+
+  @DomName('AccessibleNode.errorMessage')
+  @DocsEditable()
+  @Experimental() // untriaged
+  AccessibleNode errorMessage;
+
+  @DomName('AccessibleNode.expanded')
+  @DocsEditable()
+  @Experimental() // untriaged
+  bool expanded;
+
+  @DomName('AccessibleNode.flowTo')
+  @DocsEditable()
+  @Experimental() // untriaged
+  AccessibleNodeList flowTo;
+
+  @DomName('AccessibleNode.hasPopUp')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String hasPopUp;
+
+  @DomName('AccessibleNode.hidden')
+  @DocsEditable()
+  @Experimental() // untriaged
+  bool hidden;
+
+  @DomName('AccessibleNode.invalid')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String invalid;
+
+  @DomName('AccessibleNode.keyShortcuts')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String keyShortcuts;
+
+  @DomName('AccessibleNode.label')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String label;
+
+  @DomName('AccessibleNode.labeledBy')
+  @DocsEditable()
+  @Experimental() // untriaged
+  AccessibleNodeList labeledBy;
+
+  @DomName('AccessibleNode.level')
+  @DocsEditable()
+  @Experimental() // untriaged
+  int level;
+
+  @DomName('AccessibleNode.live')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String live;
+
+  @DomName('AccessibleNode.modal')
+  @DocsEditable()
+  @Experimental() // untriaged
+  bool modal;
+
+  @DomName('AccessibleNode.multiline')
+  @DocsEditable()
+  @Experimental() // untriaged
+  bool multiline;
+
+  @DomName('AccessibleNode.multiselectable')
+  @DocsEditable()
+  @Experimental() // untriaged
+  bool multiselectable;
+
+  @DomName('AccessibleNode.orientation')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String orientation;
+
+  @DomName('AccessibleNode.owns')
+  @DocsEditable()
+  @Experimental() // untriaged
+  AccessibleNodeList owns;
+
+  @DomName('AccessibleNode.placeholder')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String placeholder;
+
+  @DomName('AccessibleNode.posInSet')
+  @DocsEditable()
+  @Experimental() // untriaged
+  int posInSet;
+
+  @DomName('AccessibleNode.pressed')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String pressed;
+
+  @DomName('AccessibleNode.readOnly')
+  @DocsEditable()
+  @Experimental() // untriaged
+  bool readOnly;
+
+  @DomName('AccessibleNode.relevant')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String relevant;
+
+  @DomName('AccessibleNode.required')
+  @DocsEditable()
+  @Experimental() // untriaged
+  bool required;
+
+  @DomName('AccessibleNode.role')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String role;
+
+  @DomName('AccessibleNode.roleDescription')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String roleDescription;
+
+  @DomName('AccessibleNode.rowCount')
+  @DocsEditable()
+  @Experimental() // untriaged
+  int rowCount;
+
+  @DomName('AccessibleNode.rowIndex')
+  @DocsEditable()
+  @Experimental() // untriaged
+  int rowIndex;
+
+  @DomName('AccessibleNode.rowSpan')
+  @DocsEditable()
+  @Experimental() // untriaged
+  int rowSpan;
+
+  @DomName('AccessibleNode.selected')
+  @DocsEditable()
+  @Experimental() // untriaged
+  bool selected;
+
+  @DomName('AccessibleNode.setSize')
+  @DocsEditable()
+  @Experimental() // untriaged
+  int setSize;
+
+  @DomName('AccessibleNode.sort')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String sort;
+
+  @DomName('AccessibleNode.valueMax')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num valueMax;
+
+  @DomName('AccessibleNode.valueMin')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num valueMin;
+
+  @DomName('AccessibleNode.valueNow')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num valueNow;
+
+  @DomName('AccessibleNode.valueText')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String valueText;
+
+  @DomName('AccessibleNode.appendChild')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void appendChild(AccessibleNode child) native;
+
+  @DomName('AccessibleNode.onaccessibleclick')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<Event> get onAccessibleClick => accessibleClickEvent.forTarget(this);
+
+  @DomName('AccessibleNode.onaccessiblecontextmenu')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<Event> get onAccessibleContextMenu =>
+      accessibleContextMenuEvent.forTarget(this);
+
+  @DomName('AccessibleNode.onaccessibledecrement')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<Event> get onAccessibleDecrement =>
+      accessibleDecrementEvent.forTarget(this);
+
+  @DomName('AccessibleNode.onaccessiblefocus')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<Event> get onAccessibleFocus => accessibleFocusEvent.forTarget(this);
+
+  @DomName('AccessibleNode.onaccessibleincrement')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<Event> get onAccessibleIncrement =>
+      accessibleIncrementEvent.forTarget(this);
+
+  @DomName('AccessibleNode.onaccessiblescrollintoview')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<Event> get onAccessibleScrollIntoView =>
+      accessibleScrollIntoViewEvent.forTarget(this);
+}
+// 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.
+
+@DocsEditable()
+@DomName('AccessibleNodeList')
+@Experimental() // untriaged
+@Native("AccessibleNodeList")
+class AccessibleNodeList extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory AccessibleNodeList._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('AccessibleNodeList.AccessibleNodeList')
+  @DocsEditable()
+  factory AccessibleNodeList([List<AccessibleNode> nodes]) {
+    if (nodes != null) {
+      return AccessibleNodeList._create_1(nodes);
+    }
+    return AccessibleNodeList._create_2();
+  }
+  static AccessibleNodeList _create_1(nodes) =>
+      JS('AccessibleNodeList', 'new AccessibleNodeList(#)', nodes);
+  static AccessibleNodeList _create_2() =>
+      JS('AccessibleNodeList', 'new AccessibleNodeList()');
+
+  @DomName('AccessibleNodeList.length')
+  @DocsEditable()
+  @Experimental() // untriaged
+  int length;
+
+  @DomName('AccessibleNodeList.__setter__')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void __setter__(int index, AccessibleNode node) native;
+
+  @DomName('AccessibleNodeList.add')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void add(AccessibleNode node, AccessibleNode before) native;
+
+  @DomName('AccessibleNodeList.item')
+  @DocsEditable()
+  @Experimental() // untriaged
+  AccessibleNode item(int index) native;
+
+  @DomName('AccessibleNodeList.remove')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void remove(int index) native;
+}
+// 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.
+
+@DocsEditable()
+@DomName('AmbientLightSensor')
+@Experimental() // untriaged
+@Native("AmbientLightSensor")
+class AmbientLightSensor extends Sensor {
+  // To suppress missing implicit constructor warnings.
+  factory AmbientLightSensor._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('AmbientLightSensor.AmbientLightSensor')
+  @DocsEditable()
+  factory AmbientLightSensor([Map sensorOptions]) {
+    if (sensorOptions != null) {
+      var sensorOptions_1 = convertDartToNative_Dictionary(sensorOptions);
+      return AmbientLightSensor._create_1(sensorOptions_1);
+    }
+    return AmbientLightSensor._create_2();
+  }
+  static AmbientLightSensor _create_1(sensorOptions) =>
+      JS('AmbientLightSensor', 'new AmbientLightSensor(#)', sensorOptions);
+  static AmbientLightSensor _create_2() =>
+      JS('AmbientLightSensor', 'new AmbientLightSensor()');
+
+  @DomName('AmbientLightSensor.illuminance')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num illuminance;
+}
 // 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.
@@ -159,7 +683,7 @@
 @DocsEditable()
 @DomName('HTMLAnchorElement')
 @Native("HTMLAnchorElement")
-class AnchorElement extends HtmlElement implements UrlUtils {
+class AnchorElement extends HtmlElement implements HtmlHyperlinkElementUtils {
   // To suppress missing implicit constructor warnings.
   factory AnchorElement._() {
     throw new UnsupportedError("Not supported");
@@ -188,10 +712,10 @@
   @DocsEditable()
   String hreflang;
 
-  @DomName('HTMLAnchorElement.referrerpolicy')
+  @DomName('HTMLAnchorElement.referrerPolicy')
   @DocsEditable()
   @Experimental() // untriaged
-  String referrerpolicy;
+  String referrerPolicy;
 
   @DomName('HTMLAnchorElement.rel')
   @DocsEditable()
@@ -205,7 +729,7 @@
   @DocsEditable()
   String type;
 
-  // From URLUtils
+  // From HTMLHyperlinkElementUtils
 
   @DomName('HTMLAnchorElement.hash')
   @DocsEditable()
@@ -273,6 +797,36 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('Animation.cancelEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<Event> cancelEvent =
+      const EventStreamProvider<Event>('cancel');
+
+  @DomName('Animation.finishEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<Event> finishEvent =
+      const EventStreamProvider<Event>('finish');
+
+  @DomName('Animation.Animation')
+  @DocsEditable()
+  factory Animation(
+      [AnimationEffectReadOnly effect, AnimationTimeline timeline]) {
+    if (timeline != null) {
+      return Animation._create_1(effect, timeline);
+    }
+    if (effect != null) {
+      return Animation._create_2(effect);
+    }
+    return Animation._create_3();
+  }
+  static Animation _create_1(effect, timeline) =>
+      JS('Animation', 'new Animation(#,#)', effect, timeline);
+  static Animation _create_2(effect) =>
+      JS('Animation', 'new Animation(#)', effect);
+  static Animation _create_3() => JS('Animation', 'new Animation()');
+
   /// Checks if this type is supported on the current platform.
   static bool get supported => JS('bool', '!!(document.body.animate)');
 
@@ -316,6 +870,11 @@
   @Experimental() // untriaged
   num startTime;
 
+  @DomName('Animation.timeline')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final AnimationTimeline timeline;
+
   @DomName('Animation.cancel')
   @DocsEditable()
   @Experimental() // untriaged
@@ -340,6 +899,16 @@
   @DocsEditable()
   @Experimental() // untriaged
   void reverse() native;
+
+  @DomName('Animation.oncancel')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<Event> get onCancel => cancelEvent.forTarget(this);
+
+  @DomName('Animation.onfinish')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<Event> get onFinish => finishEvent.forTarget(this);
 }
 // 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
@@ -355,21 +924,23 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AnimationEffectReadOnly.computedTiming')
-  @DocsEditable()
-  @Experimental() // untriaged
-  Map get computedTiming =>
-      convertNativeToDart_Dictionary(this._get_computedTiming);
-  @JSName('computedTiming')
-  @DomName('AnimationEffectReadOnly.computedTiming')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final dynamic _get_computedTiming;
-
   @DomName('AnimationEffectReadOnly.timing')
   @DocsEditable()
   @Experimental() // untriaged
-  final AnimationEffectTiming timing;
+  final AnimationEffectTimingReadOnly timing;
+
+  @DomName('AnimationEffectReadOnly.getComputedTiming')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Map getComputedTiming() {
+    return convertNativeToDart_Dictionary(_getComputedTiming_1());
+  }
+
+  @JSName('getComputedTiming')
+  @DomName('AnimationEffectReadOnly.getComputedTiming')
+  @DocsEditable()
+  @Experimental() // untriaged
+  _getComputedTiming_1() native;
 }
 // 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
@@ -379,58 +950,121 @@
 @DomName('AnimationEffectTiming')
 @Experimental() // untriaged
 @Native("AnimationEffectTiming")
-class AnimationEffectTiming extends Interceptor {
+class AnimationEffectTiming extends AnimationEffectTimingReadOnly {
   // To suppress missing implicit constructor warnings.
   factory AnimationEffectTiming._() {
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AnimationEffectTiming.delay')
-  @DocsEditable()
-  @Experimental() // untriaged
-  num delay;
+  // Shadowing definition.
+  num get delay => JS("num", "#.delay", this);
 
-  @DomName('AnimationEffectTiming.direction')
-  @DocsEditable()
-  @Experimental() // untriaged
-  String direction;
+  set delay(num value) {
+    JS("void", "#.delay = #", this, value);
+  }
 
-  @DomName('AnimationEffectTiming.duration')
-  @DocsEditable()
-  @Experimental() // untriaged
-  @Creates('Null')
-  @Returns('num|String')
-  Object duration;
+  // Shadowing definition.
+  String get direction => JS("String", "#.direction", this);
 
-  @DomName('AnimationEffectTiming.easing')
-  @DocsEditable()
-  @Experimental() // untriaged
-  String easing;
+  set direction(String value) {
+    JS("void", "#.direction = #", this, value);
+  }
 
-  @DomName('AnimationEffectTiming.endDelay')
-  @DocsEditable()
-  @Experimental() // untriaged
-  num endDelay;
+  // Shadowing definition.
+  Object get duration => JS("Object", "#.duration", this);
 
-  @DomName('AnimationEffectTiming.fill')
-  @DocsEditable()
-  @Experimental() // untriaged
-  String fill;
+  set duration(Object value) {
+    JS("void", "#.duration = #", this, value);
+  }
 
-  @DomName('AnimationEffectTiming.iterationStart')
-  @DocsEditable()
-  @Experimental() // untriaged
-  num iterationStart;
+  // Shadowing definition.
+  String get easing => JS("String", "#.easing", this);
 
-  @DomName('AnimationEffectTiming.iterations')
-  @DocsEditable()
-  @Experimental() // untriaged
-  num iterations;
+  set easing(String value) {
+    JS("void", "#.easing = #", this, value);
+  }
 
-  @DomName('AnimationEffectTiming.playbackRate')
+  // Shadowing definition.
+  num get endDelay => JS("num", "#.endDelay", this);
+
+  set endDelay(num value) {
+    JS("void", "#.endDelay = #", this, value);
+  }
+
+  // Shadowing definition.
+  String get fill => JS("String", "#.fill", this);
+
+  set fill(String value) {
+    JS("void", "#.fill = #", this, value);
+  }
+
+  // Shadowing definition.
+  num get iterationStart => JS("num", "#.iterationStart", this);
+
+  set iterationStart(num value) {
+    JS("void", "#.iterationStart = #", this, value);
+  }
+
+  // Shadowing definition.
+  num get iterations => JS("num", "#.iterations", this);
+
+  set iterations(num value) {
+    JS("void", "#.iterations = #", this, value);
+  }
+}
+// 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.
+
+@DocsEditable()
+@DomName('AnimationEffectTimingReadOnly')
+@Experimental() // untriaged
+@Native("AnimationEffectTimingReadOnly")
+class AnimationEffectTimingReadOnly extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory AnimationEffectTimingReadOnly._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('AnimationEffectTimingReadOnly.delay')
   @DocsEditable()
   @Experimental() // untriaged
-  num playbackRate;
+  final num delay;
+
+  @DomName('AnimationEffectTimingReadOnly.direction')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String direction;
+
+  @DomName('AnimationEffectTimingReadOnly.duration')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Object duration;
+
+  @DomName('AnimationEffectTimingReadOnly.easing')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String easing;
+
+  @DomName('AnimationEffectTimingReadOnly.endDelay')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num endDelay;
+
+  @DomName('AnimationEffectTimingReadOnly.fill')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String fill;
+
+  @DomName('AnimationEffectTimingReadOnly.iterationStart')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num iterationStart;
+
+  @DomName('AnimationEffectTimingReadOnly.iterations')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num iterations;
 }
 // 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
@@ -468,48 +1102,48 @@
   @DomName('AnimationEvent.elapsedTime')
   @DocsEditable()
   @Experimental() // untriaged
-  final double elapsedTime;
+  final num elapsedTime;
 }
 // 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.
 
 @DocsEditable()
-@DomName('AnimationPlayerEvent')
+@DomName('AnimationPlaybackEvent')
 @Experimental() // untriaged
-@Native("AnimationPlayerEvent")
-class AnimationPlayerEvent extends Event {
+@Native("AnimationPlaybackEvent")
+class AnimationPlaybackEvent extends Event {
   // To suppress missing implicit constructor warnings.
-  factory AnimationPlayerEvent._() {
+  factory AnimationPlaybackEvent._() {
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AnimationPlayerEvent.AnimationPlayerEvent')
+  @DomName('AnimationPlaybackEvent.AnimationPlaybackEvent')
   @DocsEditable()
-  factory AnimationPlayerEvent(String type, [Map eventInitDict]) {
+  factory AnimationPlaybackEvent(String type, [Map eventInitDict]) {
     if (eventInitDict != null) {
       var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
-      return AnimationPlayerEvent._create_1(type, eventInitDict_1);
+      return AnimationPlaybackEvent._create_1(type, eventInitDict_1);
     }
-    return AnimationPlayerEvent._create_2(type);
+    return AnimationPlaybackEvent._create_2(type);
   }
-  static AnimationPlayerEvent _create_1(type, eventInitDict) => JS(
-      'AnimationPlayerEvent',
-      'new AnimationPlayerEvent(#,#)',
+  static AnimationPlaybackEvent _create_1(type, eventInitDict) => JS(
+      'AnimationPlaybackEvent',
+      'new AnimationPlaybackEvent(#,#)',
       type,
       eventInitDict);
-  static AnimationPlayerEvent _create_2(type) =>
-      JS('AnimationPlayerEvent', 'new AnimationPlayerEvent(#)', type);
+  static AnimationPlaybackEvent _create_2(type) =>
+      JS('AnimationPlaybackEvent', 'new AnimationPlaybackEvent(#)', type);
 
-  @DomName('AnimationPlayerEvent.currentTime')
+  @DomName('AnimationPlaybackEvent.currentTime')
   @DocsEditable()
   @Experimental() // untriaged
-  final double currentTime;
+  final num currentTime;
 
-  @DomName('AnimationPlayerEvent.timelineTime')
+  @DomName('AnimationPlaybackEvent.timelineTime')
   @DocsEditable()
   @Experimental() // untriaged
-  final double timelineTime;
+  final num timelineTime;
 }
 // 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
@@ -528,46 +1162,26 @@
   @DomName('AnimationTimeline.currentTime')
   @DocsEditable()
   @Experimental() // untriaged
-  num currentTime;
-
-  @DomName('AnimationTimeline.playbackRate')
-  @DocsEditable()
-  @Experimental() // untriaged
-  num playbackRate;
-
-  @DomName('AnimationTimeline.getAnimations')
-  @DocsEditable()
-  @Experimental() // untriaged
-  List<Animation> getAnimations() native;
-
-  @DomName('AnimationTimeline.play')
-  @DocsEditable()
-  @Experimental() // untriaged
-  Animation play(AnimationEffectReadOnly source) native;
+  final num currentTime;
 }
 // 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.
 
 @DocsEditable()
-@DomName('AppBannerPromptResult')
+@DomName('AnimationWorkletGlobalScope')
 @Experimental() // untriaged
-@Native("AppBannerPromptResult")
-class AppBannerPromptResult extends Interceptor {
+@Native("AnimationWorkletGlobalScope")
+class AnimationWorkletGlobalScope extends WorkletGlobalScope {
   // To suppress missing implicit constructor warnings.
-  factory AppBannerPromptResult._() {
+  factory AnimationWorkletGlobalScope._() {
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AppBannerPromptResult.outcome')
+  @DomName('AnimationWorkletGlobalScope.registerAnimator')
   @DocsEditable()
   @Experimental() // untriaged
-  final String outcome;
-
-  @DomName('AppBannerPromptResult.platform')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final String platform;
+  void registerAnimator(String name, Object animatorConstructor) native;
 }
 // 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
@@ -830,7 +1444,7 @@
  */
 @DomName('HTMLAreaElement')
 @Native("HTMLAreaElement")
-class AreaElement extends HtmlElement implements UrlUtils {
+class AreaElement extends HtmlElement implements HtmlHyperlinkElementUtils {
   // To suppress missing implicit constructor warnings.
   factory AreaElement._() {
     throw new UnsupportedError("Not supported");
@@ -858,10 +1472,20 @@
   @DocsEditable()
   String coords;
 
-  @DomName('HTMLAreaElement.referrerpolicy')
+  @DomName('HTMLAreaElement.download')
   @DocsEditable()
   @Experimental() // untriaged
-  String referrerpolicy;
+  String download;
+
+  @DomName('HTMLAreaElement.referrerPolicy')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String referrerPolicy;
+
+  @DomName('HTMLAreaElement.rel')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String rel;
 
   @DomName('HTMLAreaElement.shape')
   @DocsEditable()
@@ -871,7 +1495,7 @@
   @DocsEditable()
   String target;
 
-  // From URLUtils
+  // From HTMLHyperlinkElementUtils
 
   @DomName('HTMLAreaElement.hash')
   @DocsEditable()
@@ -956,160 +1580,63 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('AudioTrack')
+@DomName('AuthenticatorAssertionResponse')
 @Experimental() // untriaged
-@Native("AudioTrack")
-class AudioTrack extends Interceptor {
+@Native("AuthenticatorAssertionResponse")
+class AuthenticatorAssertionResponse extends AuthenticatorResponse {
   // To suppress missing implicit constructor warnings.
-  factory AudioTrack._() {
+  factory AuthenticatorAssertionResponse._() {
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AudioTrack.enabled')
+  @DomName('AuthenticatorAssertionResponse.authenticatorData')
   @DocsEditable()
   @Experimental() // untriaged
-  bool enabled;
+  final ByteBuffer authenticatorData;
 
-  @DomName('AudioTrack.id')
+  @DomName('AuthenticatorAssertionResponse.signature')
   @DocsEditable()
   @Experimental() // untriaged
-  final String id;
-
-  @DomName('AudioTrack.kind')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final String kind;
-
-  @DomName('AudioTrack.label')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final String label;
-
-  @DomName('AudioTrack.language')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final String language;
+  final ByteBuffer signature;
 }
 // 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.
 
 @DocsEditable()
-@DomName('AudioTrackList')
+@DomName('AuthenticatorAttestationResponse')
 @Experimental() // untriaged
-@Native("AudioTrackList")
-class AudioTrackList extends EventTarget
-    with ListMixin<AudioTrack>, ImmutableListMixin<AudioTrack>
-    implements JavaScriptIndexingBehavior<AudioTrack>, List<AudioTrack> {
+@Native("AuthenticatorAttestationResponse")
+class AuthenticatorAttestationResponse extends AuthenticatorResponse {
   // To suppress missing implicit constructor warnings.
-  factory AudioTrackList._() {
+  factory AuthenticatorAttestationResponse._() {
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AudioTrackList.changeEvent')
+  @DomName('AuthenticatorAttestationResponse.attestationObject')
   @DocsEditable()
   @Experimental() // untriaged
-  static const EventStreamProvider<Event> changeEvent =
-      const EventStreamProvider<Event>('change');
-
-  @DomName('AudioTrackList.length')
-  @DocsEditable()
-  @Experimental() // untriaged
-  int get length => JS("int", "#.length", this);
-
-  AudioTrack operator [](int index) {
-    if (JS("bool", "# >>> 0 !== # || # >= #", index, index, index, length))
-      throw new RangeError.index(index, this);
-    return JS("AudioTrack", "#[#]", this, index);
-  }
-
-  void operator []=(int index, AudioTrack value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<AudioTrack> mixins.
-  // AudioTrack is the element type.
-
-  set length(int value) {
-    throw new UnsupportedError("Cannot resize immutable List.");
-  }
-
-  AudioTrack get first {
-    if (this.length > 0) {
-      return JS('AudioTrack', '#[0]', this);
-    }
-    throw new StateError("No elements");
-  }
-
-  AudioTrack get last {
-    int len = this.length;
-    if (len > 0) {
-      return JS('AudioTrack', '#[#]', this, len - 1);
-    }
-    throw new StateError("No elements");
-  }
-
-  AudioTrack get single {
-    int len = this.length;
-    if (len == 1) {
-      return JS('AudioTrack', '#[0]', this);
-    }
-    if (len == 0) throw new StateError("No elements");
-    throw new StateError("More than one element");
-  }
-
-  AudioTrack elementAt(int index) => this[index];
-  // -- end List<AudioTrack> mixins.
-
-  @DomName('AudioTrackList.__getter__')
-  @DocsEditable()
-  @Experimental() // untriaged
-  AudioTrack __getter__(int index) native;
-
-  @DomName('AudioTrackList.getTrackById')
-  @DocsEditable()
-  @Experimental() // untriaged
-  AudioTrack getTrackById(String id) native;
-
-  @DomName('AudioTrackList.onchange')
-  @DocsEditable()
-  @Experimental() // untriaged
-  Stream<Event> get onChange => changeEvent.forTarget(this);
+  final ByteBuffer attestationObject;
 }
 // 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.
 
 @DocsEditable()
-@DomName('AutocompleteErrorEvent')
-// http://wiki.whatwg.org/wiki/RequestAutocomplete
-@Experimental()
-@Native("AutocompleteErrorEvent")
-class AutocompleteErrorEvent extends Event {
+@DomName('AuthenticatorResponse')
+@Experimental() // untriaged
+@Native("AuthenticatorResponse")
+class AuthenticatorResponse extends Interceptor {
   // To suppress missing implicit constructor warnings.
-  factory AutocompleteErrorEvent._() {
+  factory AuthenticatorResponse._() {
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AutocompleteErrorEvent.AutocompleteErrorEvent')
+  @JSName('clientDataJSON')
+  @DomName('AuthenticatorResponse.clientDataJSON')
   @DocsEditable()
-  factory AutocompleteErrorEvent(String type, [Map eventInitDict]) {
-    if (eventInitDict != null) {
-      var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
-      return AutocompleteErrorEvent._create_1(type, eventInitDict_1);
-    }
-    return AutocompleteErrorEvent._create_2(type);
-  }
-  static AutocompleteErrorEvent _create_1(type, eventInitDict) => JS(
-      'AutocompleteErrorEvent',
-      'new AutocompleteErrorEvent(#,#)',
-      type,
-      eventInitDict);
-  static AutocompleteErrorEvent _create_2(type) =>
-      JS('AutocompleteErrorEvent', 'new AutocompleteErrorEvent(#)', type);
-
-  @DomName('AutocompleteErrorEvent.reason')
-  @DocsEditable()
-  final String reason;
+  @Experimental() // untriaged
+  final ByteBuffer clientDataJson;
 }
 // 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
@@ -1140,6 +1667,278 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('BackgroundFetchClickEvent')
+@Experimental() // untriaged
+@Native("BackgroundFetchClickEvent")
+class BackgroundFetchClickEvent extends BackgroundFetchEvent {
+  // To suppress missing implicit constructor warnings.
+  factory BackgroundFetchClickEvent._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('BackgroundFetchClickEvent.BackgroundFetchClickEvent')
+  @DocsEditable()
+  factory BackgroundFetchClickEvent(String type, Map init) {
+    var init_1 = convertDartToNative_Dictionary(init);
+    return BackgroundFetchClickEvent._create_1(type, init_1);
+  }
+  static BackgroundFetchClickEvent _create_1(type, init) => JS(
+      'BackgroundFetchClickEvent',
+      'new BackgroundFetchClickEvent(#,#)',
+      type,
+      init);
+
+  @DomName('BackgroundFetchClickEvent.state')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String state;
+}
+// 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.
+
+@DocsEditable()
+@DomName('BackgroundFetchEvent')
+@Experimental() // untriaged
+@Native("BackgroundFetchEvent")
+class BackgroundFetchEvent extends ExtendableEvent {
+  // To suppress missing implicit constructor warnings.
+  factory BackgroundFetchEvent._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('BackgroundFetchEvent.BackgroundFetchEvent')
+  @DocsEditable()
+  factory BackgroundFetchEvent(String type, Map init) {
+    var init_1 = convertDartToNative_Dictionary(init);
+    return BackgroundFetchEvent._create_1(type, init_1);
+  }
+  static BackgroundFetchEvent _create_1(type, init) =>
+      JS('BackgroundFetchEvent', 'new BackgroundFetchEvent(#,#)', type, init);
+
+  @DomName('BackgroundFetchEvent.id')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String id;
+}
+// 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.
+
+@DocsEditable()
+@DomName('BackgroundFetchFailEvent')
+@Experimental() // untriaged
+@Native("BackgroundFetchFailEvent")
+class BackgroundFetchFailEvent extends BackgroundFetchEvent {
+  // To suppress missing implicit constructor warnings.
+  factory BackgroundFetchFailEvent._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('BackgroundFetchFailEvent.BackgroundFetchFailEvent')
+  @DocsEditable()
+  factory BackgroundFetchFailEvent(String type, Map init) {
+    var init_1 = convertDartToNative_Dictionary(init);
+    return BackgroundFetchFailEvent._create_1(type, init_1);
+  }
+  static BackgroundFetchFailEvent _create_1(type, init) => JS(
+      'BackgroundFetchFailEvent',
+      'new BackgroundFetchFailEvent(#,#)',
+      type,
+      init);
+
+  @DomName('BackgroundFetchFailEvent.fetches')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final List<BackgroundFetchSettledFetch> fetches;
+}
+// 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.
+
+@DocsEditable()
+@DomName('BackgroundFetchFetch')
+@Experimental() // untriaged
+@Native("BackgroundFetchFetch")
+class BackgroundFetchFetch extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory BackgroundFetchFetch._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('BackgroundFetchFetch.request')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final _Request request;
+}
+// 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.
+
+@DocsEditable()
+@DomName('BackgroundFetchManager')
+@Experimental() // untriaged
+@Native("BackgroundFetchManager")
+class BackgroundFetchManager extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory BackgroundFetchManager._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('BackgroundFetchManager.fetch')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future fetch(String id, Object requests, [Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return _fetch_1(id, requests, options_1);
+    }
+    return _fetch_2(id, requests);
+  }
+
+  @JSName('fetch')
+  @DomName('BackgroundFetchManager.fetch')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _fetch_1(id, requests, options) native;
+  @JSName('fetch')
+  @DomName('BackgroundFetchManager.fetch')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _fetch_2(id, requests) native;
+
+  @DomName('BackgroundFetchManager.get')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future get(String id) native;
+
+  @DomName('BackgroundFetchManager.getIds')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future getIds() native;
+}
+// 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.
+
+@DocsEditable()
+@DomName('BackgroundFetchRegistration')
+@Experimental() // untriaged
+@Native("BackgroundFetchRegistration")
+class BackgroundFetchRegistration extends EventTarget {
+  // To suppress missing implicit constructor warnings.
+  factory BackgroundFetchRegistration._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('BackgroundFetchRegistration.downloadTotal')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final int downloadTotal;
+
+  @DomName('BackgroundFetchRegistration.downloaded')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final int downloaded;
+
+  @DomName('BackgroundFetchRegistration.id')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String id;
+
+  @DomName('BackgroundFetchRegistration.title')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String title;
+
+  @DomName('BackgroundFetchRegistration.totalDownloadSize')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final int totalDownloadSize;
+
+  @DomName('BackgroundFetchRegistration.uploadTotal')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final int uploadTotal;
+
+  @DomName('BackgroundFetchRegistration.uploaded')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final int uploaded;
+
+  @DomName('BackgroundFetchRegistration.abort')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future abort() native;
+}
+// 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.
+
+@DocsEditable()
+@DomName('BackgroundFetchSettledFetch')
+@Experimental() // untriaged
+@Native("BackgroundFetchSettledFetch")
+class BackgroundFetchSettledFetch extends BackgroundFetchFetch {
+  // To suppress missing implicit constructor warnings.
+  factory BackgroundFetchSettledFetch._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('BackgroundFetchSettledFetch.BackgroundFetchSettledFetch')
+  @DocsEditable()
+  factory BackgroundFetchSettledFetch(_Request request, _Response response) {
+    return BackgroundFetchSettledFetch._create_1(request, response);
+  }
+  static BackgroundFetchSettledFetch _create_1(request, response) => JS(
+      'BackgroundFetchSettledFetch',
+      'new BackgroundFetchSettledFetch(#,#)',
+      request,
+      response);
+
+  @DomName('BackgroundFetchSettledFetch.response')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final _Response response;
+}
+// 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.
+
+@DocsEditable()
+@DomName('BackgroundFetchedEvent')
+@Experimental() // untriaged
+@Native("BackgroundFetchedEvent")
+class BackgroundFetchedEvent extends BackgroundFetchEvent {
+  // To suppress missing implicit constructor warnings.
+  factory BackgroundFetchedEvent._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('BackgroundFetchedEvent.BackgroundFetchedEvent')
+  @DocsEditable()
+  factory BackgroundFetchedEvent(String type, Map init) {
+    var init_1 = convertDartToNative_Dictionary(init);
+    return BackgroundFetchedEvent._create_1(type, init_1);
+  }
+  static BackgroundFetchedEvent _create_1(type, init) => JS(
+      'BackgroundFetchedEvent', 'new BackgroundFetchedEvent(#,#)', type, init);
+
+  @DomName('BackgroundFetchedEvent.fetches')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final List<BackgroundFetchSettledFetch> fetches;
+
+  @DomName('BackgroundFetchedEvent.updateUI')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future updateUI(String title) native;
+}
+// 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.
+
+@DocsEditable()
 @DomName('BarProp')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/browsers.html#barprop
 @deprecated // standard
@@ -1159,6 +1958,33 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('BarcodeDetector')
+@Experimental() // untriaged
+@Native("BarcodeDetector")
+class BarcodeDetector extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory BarcodeDetector._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('BarcodeDetector.BarcodeDetector')
+  @DocsEditable()
+  factory BarcodeDetector() {
+    return BarcodeDetector._create_1();
+  }
+  static BarcodeDetector _create_1() =>
+      JS('BarcodeDetector', 'new BarcodeDetector()');
+
+  @DomName('BarcodeDetector.detect')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future detect(/*ImageBitmapSource*/ image) native;
+}
+// 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.
+
+@DocsEditable()
 @DomName('HTMLBaseElement')
 @Native("HTMLBaseElement")
 class BaseElement extends HtmlElement {
@@ -1210,15 +2036,15 @@
 
   @DomName('BatteryManager.chargingTime')
   @DocsEditable()
-  final double chargingTime;
+  final num chargingTime;
 
   @DomName('BatteryManager.dischargingTime')
   @DocsEditable()
-  final double dischargingTime;
+  final num dischargingTime;
 
   @DomName('BatteryManager.level')
   @DocsEditable()
-  final double level;
+  final num level;
 }
 // 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
@@ -1251,7 +2077,10 @@
   static BeforeInstallPromptEvent _create_2(type) =>
       JS('BeforeInstallPromptEvent', 'new BeforeInstallPromptEvent(#)', type);
 
-  List<String> get platforms => JS("List<String>", "#.platforms", this);
+  @DomName('BeforeInstallPromptEvent.platforms')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final List<String> platforms;
 
   @DomName('BeforeInstallPromptEvent.userChoice')
   @DocsEditable()
@@ -1303,11 +2132,6 @@
   @DocsEditable()
   final String type;
 
-  @DomName('Blob.close')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void close() native;
-
   @DomName('Blob.slice')
   @DocsEditable()
   Blob slice([int start, int end, String contentType]) native;
@@ -1369,6 +2193,50 @@
   @DocsEditable()
   @Experimental() // untriaged
   final Blob data;
+
+  @DomName('BlobEvent.timecode')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num timecode;
+}
+// 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.
+
+@DocsEditable()
+@DomName('BluetoothRemoteGATTDescriptor')
+@Experimental() // untriaged
+@Native("BluetoothRemoteGATTDescriptor")
+class BluetoothRemoteGattDescriptor extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory BluetoothRemoteGattDescriptor._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('BluetoothRemoteGATTDescriptor.characteristic')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final _BluetoothRemoteGATTCharacteristic characteristic;
+
+  @DomName('BluetoothRemoteGATTDescriptor.uuid')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String uuid;
+
+  @DomName('BluetoothRemoteGATTDescriptor.value')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final ByteData value;
+
+  @DomName('BluetoothRemoteGATTDescriptor.readValue')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future readValue() native;
+
+  @DomName('BluetoothRemoteGATTDescriptor.writeValue')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future writeValue(/*BufferSource*/ value) native;
 }
 // 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
@@ -1399,6 +2267,11 @@
   @Experimental() // untriaged
   Future blob() native;
 
+  @DomName('Body.formData')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future formData() native;
+
   @DomName('Body.json')
   @DocsEditable()
   @Experimental() // untriaged
@@ -1644,6 +2517,78 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('BroadcastChannel')
+@Experimental() // untriaged
+@Native("BroadcastChannel")
+class BroadcastChannel extends EventTarget {
+  // To suppress missing implicit constructor warnings.
+  factory BroadcastChannel._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('BroadcastChannel.messageEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<MessageEvent> messageEvent =
+      const EventStreamProvider<MessageEvent>('message');
+
+  @DomName('BroadcastChannel.BroadcastChannel')
+  @DocsEditable()
+  factory BroadcastChannel(String name) {
+    return BroadcastChannel._create_1(name);
+  }
+  static BroadcastChannel _create_1(name) =>
+      JS('BroadcastChannel', 'new BroadcastChannel(#)', name);
+
+  @DomName('BroadcastChannel.name')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String name;
+
+  @DomName('BroadcastChannel.close')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void close() native;
+
+  @DomName('BroadcastChannel.postMessage')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void postMessage(Object message) native;
+
+  @DomName('BroadcastChannel.onmessage')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
+}
+// 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.
+
+@DocsEditable()
+@DomName('BudgetState')
+@Experimental() // untriaged
+@Native("BudgetState")
+class BudgetState extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory BudgetState._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('BudgetState.budgetAt')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num budgetAt;
+
+  @DomName('BudgetState.time')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final int time;
+}
+// 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.
+
+@DocsEditable()
 @DomName('HTMLButtonElement')
 @Native("HTMLButtonElement")
 class ButtonElement extends HtmlElement {
@@ -1818,108 +2763,51 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('CalcLength')
+@DomName('CanMakePaymentEvent')
 @Experimental() // untriaged
-@Native("CalcLength")
-class CalcLength extends LengthValue {
+@Native("CanMakePaymentEvent")
+class CanMakePaymentEvent extends ExtendableEvent {
   // To suppress missing implicit constructor warnings.
-  factory CalcLength._() {
+  factory CanMakePaymentEvent._() {
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('CalcLength.CalcLength')
+  @DomName('CanMakePaymentEvent.CanMakePaymentEvent')
   @DocsEditable()
-  factory CalcLength(calcDictionary_OR_length) {
-    if ((calcDictionary_OR_length is LengthValue)) {
-      return CalcLength._create_1(calcDictionary_OR_length);
-    }
-    if ((calcDictionary_OR_length is Map)) {
-      var calcDictionary_1 =
-          convertDartToNative_Dictionary(calcDictionary_OR_length);
-      return CalcLength._create_2(calcDictionary_1);
-    }
-    throw new ArgumentError("Incorrect number or type of arguments");
+  factory CanMakePaymentEvent(String type, Map eventInitDict) {
+    var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
+    return CanMakePaymentEvent._create_1(type, eventInitDict_1);
   }
-  static CalcLength _create_1(calcDictionary_OR_length) =>
-      JS('CalcLength', 'new CalcLength(#)', calcDictionary_OR_length);
-  static CalcLength _create_2(calcDictionary_OR_length) =>
-      JS('CalcLength', 'new CalcLength(#)', calcDictionary_OR_length);
+  static CanMakePaymentEvent _create_1(type, eventInitDict) => JS(
+      'CanMakePaymentEvent',
+      'new CanMakePaymentEvent(#,#)',
+      type,
+      eventInitDict);
 
-  @DomName('CalcLength.ch')
+  @DomName('CanMakePaymentEvent.methodData')
   @DocsEditable()
   @Experimental() // untriaged
-  final double ch;
+  final List methodData;
 
-  @DomName('CalcLength.cm')
+  @DomName('CanMakePaymentEvent.modifiers')
   @DocsEditable()
   @Experimental() // untriaged
-  final double cm;
+  final List modifiers;
 
-  @DomName('CalcLength.em')
+  @DomName('CanMakePaymentEvent.paymentRequestOrigin')
   @DocsEditable()
   @Experimental() // untriaged
-  final double em;
+  final String paymentRequestOrigin;
 
-  @DomName('CalcLength.ex')
+  @DomName('CanMakePaymentEvent.topLevelOrigin')
   @DocsEditable()
   @Experimental() // untriaged
-  final double ex;
+  final String topLevelOrigin;
 
-  @JSName('in')
-  @DomName('CalcLength.in')
+  @DomName('CanMakePaymentEvent.respondWith')
   @DocsEditable()
   @Experimental() // untriaged
-  final double inch;
-
-  @DomName('CalcLength.mm')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double mm;
-
-  @DomName('CalcLength.pc')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double pc;
-
-  @DomName('CalcLength.percent')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double percent;
-
-  @DomName('CalcLength.pt')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double pt;
-
-  @DomName('CalcLength.px')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double px;
-
-  @DomName('CalcLength.rem')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double rem;
-
-  @DomName('CalcLength.vh')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double vh;
-
-  @DomName('CalcLength.vmax')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double vmax;
-
-  @DomName('CalcLength.vmin')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double vmin;
-
-  @DomName('CalcLength.vw')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double vw;
+  void respondWith(Future canMakePaymentResponse) native;
 }
 // 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
@@ -2045,6 +2933,11 @@
   @DocsEditable()
   String _toDataUrl(String type, [arguments_OR_quality]) native;
 
+  @DomName('HTMLCanvasElement.transferControlToOffscreen')
+  @DocsEditable()
+  @Experimental() // untriaged
+  OffscreenCanvas transferControlToOffscreen() native;
+
   /// Stream of `webglcontextlost` events handled by this [CanvasElement].
   @DomName('HTMLCanvasElement.onwebglcontextlost')
   @DocsEditable()
@@ -2406,14 +3299,51 @@
   @DomName('CanvasRenderingContext2D.createImageData')
   @DocsEditable()
   @Creates('ImageData|=Object')
-  ImageData createImageData(imagedata_OR_sw, [num sh]) {
-    if ((imagedata_OR_sw is ImageData) && sh == null) {
-      var imagedata_1 = convertDartToNative_ImageData(imagedata_OR_sw);
+  ImageData createImageData(data_OR_imagedata_OR_sw,
+      [int sh_OR_sw,
+      imageDataColorSettings_OR_sh,
+      Map imageDataColorSettings]) {
+    if ((data_OR_imagedata_OR_sw is ImageData) &&
+        sh_OR_sw == null &&
+        imageDataColorSettings_OR_sh == null &&
+        imageDataColorSettings == null) {
+      var imagedata_1 = convertDartToNative_ImageData(data_OR_imagedata_OR_sw);
       return convertNativeToDart_ImageData(_createImageData_1(imagedata_1));
     }
-    if (sh != null && (imagedata_OR_sw is num)) {
+    if (sh_OR_sw != null &&
+        (data_OR_imagedata_OR_sw is int) &&
+        imageDataColorSettings_OR_sh == null &&
+        imageDataColorSettings == null) {
       return convertNativeToDart_ImageData(
-          _createImageData_2(imagedata_OR_sw, sh));
+          _createImageData_2(data_OR_imagedata_OR_sw, sh_OR_sw));
+    }
+    if ((imageDataColorSettings_OR_sh is Map) &&
+        sh_OR_sw != null &&
+        (data_OR_imagedata_OR_sw is int) &&
+        imageDataColorSettings == null) {
+      var imageDataColorSettings_1 =
+          convertDartToNative_Dictionary(imageDataColorSettings_OR_sh);
+      return convertNativeToDart_ImageData(_createImageData_3(
+          data_OR_imagedata_OR_sw, sh_OR_sw, imageDataColorSettings_1));
+    }
+    if ((imageDataColorSettings_OR_sh is int) &&
+        sh_OR_sw != null &&
+        data_OR_imagedata_OR_sw != null &&
+        imageDataColorSettings == null) {
+      return convertNativeToDart_ImageData(_createImageData_4(
+          data_OR_imagedata_OR_sw, sh_OR_sw, imageDataColorSettings_OR_sh));
+    }
+    if (imageDataColorSettings != null &&
+        (imageDataColorSettings_OR_sh is int) &&
+        sh_OR_sw != null &&
+        data_OR_imagedata_OR_sw != null) {
+      var imageDataColorSettings_1 =
+          convertDartToNative_Dictionary(imageDataColorSettings);
+      return convertNativeToDart_ImageData(_createImageData_5(
+          data_OR_imagedata_OR_sw,
+          sh_OR_sw,
+          imageDataColorSettings_OR_sh,
+          imageDataColorSettings_1));
     }
     throw new ArgumentError("Incorrect number or type of arguments");
   }
@@ -2427,7 +3357,22 @@
   @DomName('CanvasRenderingContext2D.createImageData')
   @DocsEditable()
   @Creates('ImageData|=Object')
-  _createImageData_2(num sw, sh) native;
+  _createImageData_2(int sw, sh) native;
+  @JSName('createImageData')
+  @DomName('CanvasRenderingContext2D.createImageData')
+  @DocsEditable()
+  @Creates('ImageData|=Object')
+  _createImageData_3(int sw, sh, imageDataColorSettings) native;
+  @JSName('createImageData')
+  @DomName('CanvasRenderingContext2D.createImageData')
+  @DocsEditable()
+  @Creates('ImageData|=Object')
+  _createImageData_4(data, sw, int sh) native;
+  @JSName('createImageData')
+  @DomName('CanvasRenderingContext2D.createImageData')
+  @DocsEditable()
+  @Creates('ImageData|=Object')
+  _createImageData_5(data, sw, int sh, imageDataColorSettings) native;
 
   @DomName('CanvasRenderingContext2D.createLinearGradient')
   @DocsEditable()
@@ -2469,7 +3414,7 @@
   @DomName('CanvasRenderingContext2D.getImageData')
   @DocsEditable()
   @Creates('ImageData|=Object')
-  ImageData getImageData(num sx, num sy, num sw, num sh) {
+  ImageData getImageData(int sx, int sy, int sw, int sh) {
     return convertNativeToDart_ImageData(_getImageData_1(sx, sy, sw, sh));
   }
 
@@ -2504,8 +3449,8 @@
 
   @DomName('CanvasRenderingContext2D.putImageData')
   @DocsEditable()
-  void putImageData(ImageData imagedata, num dx, num dy,
-      [num dirtyX, num dirtyY, num dirtyWidth, num dirtyHeight]) {
+  void putImageData(ImageData imagedata, int dx, int dy,
+      [int dirtyX, int dirtyY, int dirtyWidth, int dirtyHeight]) {
     if (dirtyX == null &&
         dirtyY == null &&
         dirtyWidth == null &&
@@ -2591,7 +3536,7 @@
   @DocsEditable()
   void translate(num x, num y) native;
 
-  // From CanvasPathMethods
+  // From CanvasPath
 
   @JSName('arc')
   @DomName('CanvasRenderingContext2D.arc')
@@ -2991,6 +3936,16 @@
 
   // From ChildNode
 
+  @DomName('CharacterData.after')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void after(Object nodes) native;
+
+  @DomName('CharacterData.before')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void before(Object nodes) native;
+
   // From NonDocumentTypeChildNode
 
   @DomName('CharacterData.nextElementSibling')
@@ -3014,6 +3969,10 @@
     throw new UnsupportedError("Not supported");
   }
 
+  void after(Object nodes);
+
+  void before(Object nodes);
+
   void remove();
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3021,68 +3980,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('CHROMIUMValuebuffer')
-@Experimental() // untriaged
-@Native("CHROMIUMValuebuffer")
-class ChromiumValuebuffer extends Interceptor {
-  // To suppress missing implicit constructor warnings.
-  factory ChromiumValuebuffer._() {
-    throw new UnsupportedError("Not supported");
-  }
-}
-// 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.
-
-@DocsEditable()
-@DomName('CircularGeofencingRegion')
-@Experimental() // untriaged
-@Native("CircularGeofencingRegion")
-class CircularGeofencingRegion extends GeofencingRegion {
-  // To suppress missing implicit constructor warnings.
-  factory CircularGeofencingRegion._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('CircularGeofencingRegion.CircularGeofencingRegion')
-  @DocsEditable()
-  factory CircularGeofencingRegion(Map init) {
-    var init_1 = convertDartToNative_Dictionary(init);
-    return CircularGeofencingRegion._create_1(init_1);
-  }
-  static CircularGeofencingRegion _create_1(init) =>
-      JS('CircularGeofencingRegion', 'new CircularGeofencingRegion(#)', init);
-
-  @DomName('CircularGeofencingRegion.MAX_RADIUS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const num MAX_RADIUS = 100.0;
-
-  @DomName('CircularGeofencingRegion.MIN_RADIUS')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const num MIN_RADIUS = 1.0;
-
-  @DomName('CircularGeofencingRegion.latitude')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double latitude;
-
-  @DomName('CircularGeofencingRegion.longitude')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double longitude;
-
-  @DomName('CircularGeofencingRegion.radius')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double radius;
-}
-// 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.
-
-@DocsEditable()
 @DomName('Client')
 @Experimental() // untriaged
 @Native("Client")
@@ -3102,6 +3999,11 @@
   @Experimental() // untriaged
   final String id;
 
+  @DomName('Client.type')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String type;
+
   @DomName('Client.url')
   @DocsEditable()
   @Experimental() // untriaged
@@ -3110,28 +4012,7 @@
   @DomName('Client.postMessage')
   @DocsEditable()
   @Experimental() // untriaged
-  void postMessage(/*SerializedScriptValue*/ message,
-      [List<MessagePort> transfer]) {
-    if (transfer != null) {
-      var message_1 = convertDartToNative_SerializedScriptValue(message);
-      _postMessage_1(message_1, transfer);
-      return;
-    }
-    var message_1 = convertDartToNative_SerializedScriptValue(message);
-    _postMessage_2(message_1);
-    return;
-  }
-
-  @JSName('postMessage')
-  @DomName('Client.postMessage')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void _postMessage_1(message, List<MessagePort> transfer) native;
-  @JSName('postMessage')
-  @DomName('Client.postMessage')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void _postMessage_2(message) native;
+  void postMessage(Object message, [List<Object> transfer]) native;
 }
 // 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
@@ -3198,6 +4079,20 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('ClipboardEvent.ClipboardEvent')
+  @DocsEditable()
+  factory ClipboardEvent(String type, [Map eventInitDict]) {
+    if (eventInitDict != null) {
+      var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
+      return ClipboardEvent._create_1(type, eventInitDict_1);
+    }
+    return ClipboardEvent._create_2(type);
+  }
+  static ClipboardEvent _create_1(type, eventInitDict) =>
+      JS('ClipboardEvent', 'new ClipboardEvent(#,#)', type, eventInitDict);
+  static ClipboardEvent _create_2(type) =>
+      JS('ClipboardEvent', 'new ClipboardEvent(#)', type);
+
   @DomName('ClipboardEvent.clipboardData')
   @DocsEditable()
   @Experimental() // untriaged
@@ -3319,328 +4214,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('CompositorProxy')
-@Experimental() // untriaged
-@Native("CompositorProxy")
-class CompositorProxy extends Interceptor {
-  // To suppress missing implicit constructor warnings.
-  factory CompositorProxy._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('CompositorProxy.CompositorProxy')
-  @DocsEditable()
-  factory CompositorProxy(Element element, List<String> attributeArray) {
-    return CompositorProxy._create_1(element, attributeArray);
-  }
-  static CompositorProxy _create_1(element, attributeArray) => JS(
-      'CompositorProxy', 'new CompositorProxy(#,#)', element, attributeArray);
-
-  @DomName('CompositorProxy.opacity')
-  @DocsEditable()
-  @Experimental() // untriaged
-  num opacity;
-
-  @DomName('CompositorProxy.scrollLeft')
-  @DocsEditable()
-  @Experimental() // untriaged
-  num scrollLeft;
-
-  @DomName('CompositorProxy.scrollTop')
-  @DocsEditable()
-  @Experimental() // untriaged
-  num scrollTop;
-
-  @DomName('CompositorProxy.transform')
-  @DocsEditable()
-  @Experimental() // untriaged
-  DomMatrix transform;
-
-  @DomName('CompositorProxy.disconnect')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void disconnect() native;
-
-  @DomName('CompositorProxy.supports')
-  @DocsEditable()
-  @Experimental() // untriaged
-  bool supports(String attribute) native;
-}
-// 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.
-
-@DocsEditable()
-@DomName('CompositorWorker')
-@Experimental() // untriaged
-@Native("CompositorWorker")
-class CompositorWorker extends EventTarget implements AbstractWorker {
-  // To suppress missing implicit constructor warnings.
-  factory CompositorWorker._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('CompositorWorker.errorEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const EventStreamProvider<Event> errorEvent =
-      const EventStreamProvider<Event>('error');
-
-  @DomName('CompositorWorker.messageEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const EventStreamProvider<MessageEvent> messageEvent =
-      const EventStreamProvider<MessageEvent>('message');
-
-  @DomName('CompositorWorker.CompositorWorker')
-  @DocsEditable()
-  factory CompositorWorker(String scriptUrl) {
-    return CompositorWorker._create_1(scriptUrl);
-  }
-  static CompositorWorker _create_1(scriptUrl) =>
-      JS('CompositorWorker', 'new CompositorWorker(#)', scriptUrl);
-
-  @DomName('CompositorWorker.postMessage')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void postMessage(/*SerializedScriptValue*/ message,
-      [List<MessagePort> transfer]) {
-    if (transfer != null) {
-      var message_1 = convertDartToNative_SerializedScriptValue(message);
-      _postMessage_1(message_1, transfer);
-      return;
-    }
-    var message_1 = convertDartToNative_SerializedScriptValue(message);
-    _postMessage_2(message_1);
-    return;
-  }
-
-  @JSName('postMessage')
-  @DomName('CompositorWorker.postMessage')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void _postMessage_1(message, List<MessagePort> transfer) native;
-  @JSName('postMessage')
-  @DomName('CompositorWorker.postMessage')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void _postMessage_2(message) native;
-
-  @DomName('CompositorWorker.terminate')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void terminate() native;
-
-  @DomName('CompositorWorker.onerror')
-  @DocsEditable()
-  @Experimental() // untriaged
-  Stream<Event> get onError => errorEvent.forTarget(this);
-
-  @DomName('CompositorWorker.onmessage')
-  @DocsEditable()
-  @Experimental() // untriaged
-  Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
-}
-// 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.
-
-@DocsEditable()
-@DomName('CompositorWorkerGlobalScope')
-@Experimental() // untriaged
-@Native("CompositorWorkerGlobalScope")
-class CompositorWorkerGlobalScope extends WorkerGlobalScope {
-  // To suppress missing implicit constructor warnings.
-  factory CompositorWorkerGlobalScope._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('CompositorWorkerGlobalScope.messageEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const EventStreamProvider<MessageEvent> messageEvent =
-      const EventStreamProvider<MessageEvent>('message');
-
-  @DomName('CompositorWorkerGlobalScope.cancelAnimationFrame')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void cancelAnimationFrame(int handle) native;
-
-  @DomName('CompositorWorkerGlobalScope.postMessage')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void postMessage(/*any*/ message, [List<MessagePort> transfer]) {
-    if (transfer != null) {
-      var message_1 = convertDartToNative_SerializedScriptValue(message);
-      _postMessage_1(message_1, transfer);
-      return;
-    }
-    var message_1 = convertDartToNative_SerializedScriptValue(message);
-    _postMessage_2(message_1);
-    return;
-  }
-
-  @JSName('postMessage')
-  @DomName('CompositorWorkerGlobalScope.postMessage')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void _postMessage_1(message, List<MessagePort> transfer) native;
-  @JSName('postMessage')
-  @DomName('CompositorWorkerGlobalScope.postMessage')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void _postMessage_2(message) native;
-
-  @DomName('CompositorWorkerGlobalScope.requestAnimationFrame')
-  @DocsEditable()
-  @Experimental() // untriaged
-  int requestAnimationFrame(FrameRequestCallback callback) native;
-
-  @DomName('CompositorWorkerGlobalScope.onmessage')
-  @DocsEditable()
-  @Experimental() // untriaged
-  Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
-}
-// 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.
-
-@DomName('Console')
-class Console {
-  const Console._safe();
-
-  static const Console _safeConsole = const Console._safe();
-
-  bool get _isConsoleDefined => JS('bool', 'typeof console != "undefined"');
-
-  @DomName('Console.memory')
-  MemoryInfo get memory =>
-      _isConsoleDefined ? JS('MemoryInfo', 'console.memory') : null;
-
-  @DomName('Console.assertCondition')
-  void assertCondition(bool condition, Object arg) => _isConsoleDefined
-      ? JS('void', 'console.assertCondition(#, #)', condition, arg)
-      : null;
-
-  @DomName('Console.clear')
-  void clear(Object arg) =>
-      _isConsoleDefined ? JS('void', 'console.clear(#)', arg) : null;
-
-  @DomName('Console.count')
-  void count(Object arg) =>
-      _isConsoleDefined ? JS('void', 'console.count(#)', arg) : null;
-
-  @DomName('Console.debug')
-  void debug(Object arg) =>
-      _isConsoleDefined ? JS('void', 'console.debug(#)', arg) : null;
-
-  @DomName('Console.dir')
-  void dir(Object arg) =>
-      _isConsoleDefined ? JS('void', 'console.dir(#)', arg) : null;
-
-  @DomName('Console.dirxml')
-  void dirxml(Object arg) =>
-      _isConsoleDefined ? JS('void', 'console.dirxml(#)', arg) : null;
-
-  @DomName('Console.error')
-  void error(Object arg) =>
-      _isConsoleDefined ? JS('void', 'console.error(#)', arg) : null;
-
-  @DomName('Console.group')
-  void group(Object arg) =>
-      _isConsoleDefined ? JS('void', 'console.group(#)', arg) : null;
-
-  @DomName('Console.groupCollapsed')
-  void groupCollapsed(Object arg) =>
-      _isConsoleDefined ? JS('void', 'console.groupCollapsed(#)', arg) : null;
-
-  @DomName('Console.groupEnd')
-  void groupEnd() =>
-      _isConsoleDefined ? JS('void', 'console.groupEnd()') : null;
-
-  @DomName('Console.info')
-  void info(Object arg) =>
-      _isConsoleDefined ? JS('void', 'console.info(#)', arg) : null;
-
-  @DomName('Console.log')
-  void log(Object arg) =>
-      _isConsoleDefined ? JS('void', 'console.log(#)', arg) : null;
-
-  @DomName('Console.markTimeline')
-  void markTimeline(Object arg) =>
-      _isConsoleDefined ? JS('void', 'console.markTimeline(#)', arg) : null;
-
-  @DomName('Console.profile')
-  void profile(String title) =>
-      _isConsoleDefined ? JS('void', 'console.profile(#)', title) : null;
-
-  @DomName('Console.profileEnd')
-  void profileEnd(String title) =>
-      _isConsoleDefined ? JS('void', 'console.profileEnd(#)', title) : null;
-
-  @DomName('Console.table')
-  void table(Object arg) =>
-      _isConsoleDefined ? JS('void', 'console.table(#)', arg) : null;
-
-  @DomName('Console.time')
-  void time(String title) =>
-      _isConsoleDefined ? JS('void', 'console.time(#)', title) : null;
-
-  @DomName('Console.timeEnd')
-  void timeEnd(String title) =>
-      _isConsoleDefined ? JS('void', 'console.timeEnd(#)', title) : null;
-
-  @DomName('Console.timeStamp')
-  void timeStamp(Object arg) =>
-      _isConsoleDefined ? JS('void', 'console.timeStamp(#)', arg) : null;
-
-  @DomName('Console.trace')
-  void trace(Object arg) =>
-      _isConsoleDefined ? JS('void', 'console.trace(#)', arg) : null;
-
-  @DomName('Console.warn')
-  void warn(Object arg) =>
-      _isConsoleDefined ? JS('void', 'console.warn(#)', arg) : null;
-  // To suppress missing implicit constructor warnings.
-  factory Console._() {
-    throw new UnsupportedError("Not supported");
-  }
-}
-// 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.
-
-@DocsEditable()
-@DomName('ConsoleBase')
-@Experimental() // untriaged
-@Native("ConsoleBase")
-class ConsoleBase extends Interceptor {
-  // To suppress missing implicit constructor warnings.
-  factory ConsoleBase._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @JSName('assert')
-  @DomName('ConsoleBase.assert')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void assertCondition(bool condition, Object arg) native;
-
-  @DomName('ConsoleBase.timeline')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void timeline(String title) native;
-
-  @DomName('ConsoleBase.timelineEnd')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void timelineEnd(String title) native;
-}
-// 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.
-
-@DocsEditable()
 @DomName('HTMLContentElement')
 @SupportedBrowser(SupportedBrowser.CHROME, '26')
 @Experimental()
@@ -3680,6 +4253,64 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('CookieStore')
+@Experimental() // untriaged
+@Native("CookieStore")
+class CookieStore extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory CookieStore._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('CookieStore.getAll')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future getAll([Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return _getAll_1(options_1);
+    }
+    return _getAll_2();
+  }
+
+  @JSName('getAll')
+  @DomName('CookieStore.getAll')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _getAll_1(options) native;
+  @JSName('getAll')
+  @DomName('CookieStore.getAll')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _getAll_2() native;
+
+  @DomName('CookieStore.set')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future set(String name, String value, [Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return _set_1(name, value, options_1);
+    }
+    return _set_2(name, value);
+  }
+
+  @JSName('set')
+  @DomName('CookieStore.set')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _set_1(name, value, options) native;
+  @JSName('set')
+  @DomName('CookieStore.set')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _set_2(name, value) native;
+}
+// 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.
+
+@DocsEditable()
 @DomName('Coordinates')
 @Native("Coordinates")
 class Coordinates extends Interceptor {
@@ -3690,31 +4321,31 @@
 
   @DomName('Coordinates.accuracy')
   @DocsEditable()
-  final double accuracy;
+  final num accuracy;
 
   @DomName('Coordinates.altitude')
   @DocsEditable()
-  final double altitude;
+  final num altitude;
 
   @DomName('Coordinates.altitudeAccuracy')
   @DocsEditable()
-  final double altitudeAccuracy;
+  final num altitudeAccuracy;
 
   @DomName('Coordinates.heading')
   @DocsEditable()
-  final double heading;
+  final num heading;
 
   @DomName('Coordinates.latitude')
   @DocsEditable()
-  final double latitude;
+  final num latitude;
 
   @DomName('Coordinates.longitude')
   @DocsEditable()
-  final double longitude;
+  final num longitude;
 
   @DomName('Coordinates.speed')
   @DocsEditable()
-  final double speed;
+  final num speed;
 }
 // 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
@@ -3730,22 +4361,11 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @JSName('iconURL')
-  @DomName('Credential.iconURL')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final String iconUrl;
-
   @DomName('Credential.id')
   @DocsEditable()
   @Experimental() // untriaged
   final String id;
 
-  @DomName('Credential.name')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final String name;
-
   @DomName('Credential.type')
   @DocsEditable()
   @Experimental() // untriaged
@@ -3756,6 +4376,31 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('CredentialUserData')
+@Experimental() // untriaged
+@Native("CredentialUserData")
+class CredentialUserData extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory CredentialUserData._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @JSName('iconURL')
+  @DomName('CredentialUserData.iconURL')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String iconUrl;
+
+  @DomName('CredentialUserData.name')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String name;
+}
+// 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.
+
+@DocsEditable()
 @DomName('CredentialsContainer')
 @Experimental() // untriaged
 @Native("CredentialsContainer")
@@ -3765,6 +4410,28 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('CredentialsContainer.create')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future create([Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return _create_1(options_1);
+    }
+    return _create_2();
+  }
+
+  @JSName('create')
+  @DomName('CredentialsContainer.create')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _create_1(options) native;
+  @JSName('create')
+  @DomName('CredentialsContainer.create')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _create_2() native;
+
   @DomName('CredentialsContainer.get')
   @DocsEditable()
   @Experimental() // untriaged
@@ -3787,6 +4454,11 @@
   @Experimental() // untriaged
   Future _get_2() native;
 
+  @DomName('CredentialsContainer.preventSilentAccess')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future preventSilentAccess() native;
+
   @DomName('CredentialsContainer.requireUserMediation')
   @DocsEditable()
   @Experimental() // untriaged
@@ -3797,56 +4469,6 @@
   @Experimental() // untriaged
   Future store(Credential credential) native;
 }
-// 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.
-
-@DocsEditable()
-@DomName('CrossOriginServiceWorkerClient')
-@Experimental() // untriaged
-@Native("CrossOriginServiceWorkerClient")
-class CrossOriginServiceWorkerClient extends EventTarget {
-  // To suppress missing implicit constructor warnings.
-  factory CrossOriginServiceWorkerClient._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('CrossOriginServiceWorkerClient.origin')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final String origin;
-
-  @DomName('CrossOriginServiceWorkerClient.targetUrl')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final String targetUrl;
-
-  @DomName('CrossOriginServiceWorkerClient.postMessage')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void postMessage(/*SerializedScriptValue*/ message,
-      [List<MessagePort> transfer]) {
-    if (transfer != null) {
-      var message_1 = convertDartToNative_SerializedScriptValue(message);
-      _postMessage_1(message_1, transfer);
-      return;
-    }
-    var message_1 = convertDartToNative_SerializedScriptValue(message);
-    _postMessage_2(message_1);
-    return;
-  }
-
-  @JSName('postMessage')
-  @DomName('CrossOriginServiceWorkerClient.postMessage')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void _postMessage_1(message, List<MessagePort> transfer) native;
-  @JSName('postMessage')
-  @DomName('CrossOriginServiceWorkerClient.postMessage')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void _postMessage_2(message) native;
-}
 // 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.
@@ -3916,7 +4538,7 @@
   @DomName('CryptoKey.usages')
   @DocsEditable()
   @Experimental() // untriaged
-  final List<String> usages;
+  final Object usages;
 }
 // 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
@@ -3933,11 +4555,147 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('CSS.paintWorklet')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final _Worklet paintWorklet;
+
+  @DomName('CSS.Hz')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue Hz(num value) native;
+
+  @DomName('CSS.ch')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue ch(num value) native;
+
+  @DomName('CSS.cm')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue cm(num value) native;
+
+  @DomName('CSS.deg')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue deg(num value) native;
+
+  @DomName('CSS.dpcm')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue dpcm(num value) native;
+
+  @DomName('CSS.dpi')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue dpi(num value) native;
+
+  @DomName('CSS.dppx')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue dppx(num value) native;
+
+  @DomName('CSS.em')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue em(num value) native;
+
   @DomName('CSS.escape')
   @DocsEditable()
   @Experimental() // untriaged
   static String escape(String ident) native;
 
+  @DomName('CSS.ex')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue ex(num value) native;
+
+  @DomName('CSS.fr')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue fr(num value) native;
+
+  @DomName('CSS.grad')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue grad(num value) native;
+
+  @JSName('in')
+  @DomName('CSS.in')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue inch(num value) native;
+
+  @DomName('CSS.kHz')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue kHz(num value) native;
+
+  @DomName('CSS.mm')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue mm(num value) native;
+
+  @DomName('CSS.ms')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue ms(num value) native;
+
+  @DomName('CSS.number')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue number(num value) native;
+
+  @DomName('CSS.pc')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue pc(num value) native;
+
+  @DomName('CSS.percent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue percent(num value) native;
+
+  @DomName('CSS.pt')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue pt(num value) native;
+
+  @DomName('CSS.px')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue px(num value) native;
+
+  @DomName('CSS.rad')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue rad(num value) native;
+
+  @DomName('CSS.registerProperty')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static void registerProperty(Map descriptor) {
+    var descriptor_1 = convertDartToNative_Dictionary(descriptor);
+    _registerProperty_1(descriptor_1);
+    return;
+  }
+
+  @JSName('registerProperty')
+  @DomName('CSS.registerProperty')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static void _registerProperty_1(descriptor) native;
+
+  @DomName('CSS.rem')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue rem(num value) native;
+
+  @DomName('CSS.s')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue s(num value) native;
+
   @DomName('CSS.supports')
   @DocsEditable()
   static bool supports(String property, String value) native;
@@ -3946,6 +4704,31 @@
   @DomName('CSS.supports')
   @DocsEditable()
   static bool supportsCondition(String conditionText) native;
+
+  @DomName('CSS.turn')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue turn(num value) native;
+
+  @DomName('CSS.vh')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue vh(num value) native;
+
+  @DomName('CSS.vmax')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue vmax(num value) native;
+
+  @DomName('CSS.vmin')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue vmin(num value) native;
+
+  @DomName('CSS.vw')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssUnitValue vw(num value) native;
 }
 // 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
@@ -3971,6 +4754,25 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('CSSConditionRule')
+@Experimental() // untriaged
+@Native("CSSConditionRule")
+class CssConditionRule extends CssGroupingRule {
+  // To suppress missing implicit constructor warnings.
+  factory CssConditionRule._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('CSSConditionRule.conditionText')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String conditionText;
+}
+// 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.
+
+@DocsEditable()
 @DomName('CSSFontFaceRule')
 @Native("CSSFontFaceRule")
 class CssFontFaceRule extends CssRule {
@@ -4019,6 +4821,35 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('CSSImageValue')
+@Experimental() // untriaged
+@Native("CSSImageValue")
+class CssImageValue extends CssResourceValue {
+  // To suppress missing implicit constructor warnings.
+  factory CssImageValue._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('CSSImageValue.intrinsicHeight')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num intrinsicHeight;
+
+  @DomName('CSSImageValue.intrinsicRatio')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num intrinsicRatio;
+
+  @DomName('CSSImageValue.intrinsicWidth')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num intrinsicWidth;
+}
+// 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.
+
+@DocsEditable()
 @DomName('CSSImportRule')
 @Native("CSSImportRule")
 class CssImportRule extends CssRule {
@@ -4114,9 +4945,69 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('CSSKeywordValue')
+@Experimental() // untriaged
+@Native("CSSKeywordValue")
+class CssKeywordValue extends CssStyleValue {
+  // To suppress missing implicit constructor warnings.
+  factory CssKeywordValue._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('CSSKeywordValue.CSSKeywordValue')
+  @DocsEditable()
+  factory CssKeywordValue(String keyword) {
+    return CssKeywordValue._create_1(keyword);
+  }
+  static CssKeywordValue _create_1(keyword) =>
+      JS('CssKeywordValue', 'new CSSKeywordValue(#)', keyword);
+
+  @DomName('CSSKeywordValue.value')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String value;
+}
+// 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.
+
+@DocsEditable()
+@DomName('CSSMatrixComponent')
+@Experimental() // untriaged
+@Native("CSSMatrixComponent")
+class CssMatrixComponent extends CssTransformComponent {
+  // To suppress missing implicit constructor warnings.
+  factory CssMatrixComponent._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('CSSMatrixComponent.CSSMatrixComponent')
+  @DocsEditable()
+  factory CssMatrixComponent(DomMatrixReadOnly matrix, [Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return CssMatrixComponent._create_1(matrix, options_1);
+    }
+    return CssMatrixComponent._create_2(matrix);
+  }
+  static CssMatrixComponent _create_1(matrix, options) =>
+      JS('CssMatrixComponent', 'new CSSMatrixComponent(#,#)', matrix, options);
+  static CssMatrixComponent _create_2(matrix) =>
+      JS('CssMatrixComponent', 'new CSSMatrixComponent(#)', matrix);
+
+  @DomName('CSSMatrixComponent.matrix')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomMatrix matrix;
+}
+// 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.
+
+@DocsEditable()
 @DomName('CSSMediaRule')
 @Native("CSSMediaRule")
-class CssMediaRule extends CssGroupingRule {
+class CssMediaRule extends CssConditionRule {
   // To suppress missing implicit constructor warnings.
   factory CssMediaRule._() {
     throw new UnsupportedError("Not supported");
@@ -4156,6 +5047,50 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('CSSNumericValue')
+@Experimental() // untriaged
+@Native("CSSNumericValue")
+class CssNumericValue extends CssStyleValue {
+  // To suppress missing implicit constructor warnings.
+  factory CssNumericValue._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('CSSNumericValue.add')
+  @DocsEditable()
+  @Experimental() // untriaged
+  CssNumericValue add(CssNumericValue value) native;
+
+  @DomName('CSSNumericValue.div')
+  @DocsEditable()
+  @Experimental() // untriaged
+  CssNumericValue div(num value) native;
+
+  @DomName('CSSNumericValue.mul')
+  @DocsEditable()
+  @Experimental() // untriaged
+  CssNumericValue mul(num value) native;
+
+  @DomName('CSSNumericValue.parse')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static CssNumericValue parse(String cssText) native;
+
+  @DomName('CSSNumericValue.sub')
+  @DocsEditable()
+  @Experimental() // untriaged
+  CssNumericValue sub(CssNumericValue value) native;
+
+  @DomName('CSSNumericValue.to')
+  @DocsEditable()
+  @Experimental() // untriaged
+  CssNumericValue to(String unit) native;
+}
+// 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.
+
+@DocsEditable()
 @DomName('CSSPageRule')
 @Native("CSSPageRule")
 class CssPageRule extends CssRule {
@@ -4177,6 +5112,140 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('CSSPerspective')
+@Experimental() // untriaged
+@Native("CSSPerspective")
+class CssPerspective extends CssTransformComponent {
+  // To suppress missing implicit constructor warnings.
+  factory CssPerspective._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('CSSPerspective.CSSPerspective')
+  @DocsEditable()
+  factory CssPerspective(CssNumericValue length) {
+    return CssPerspective._create_1(length);
+  }
+  static CssPerspective _create_1(length) =>
+      JS('CssPerspective', 'new CSSPerspective(#)', length);
+
+  @DomName('CSSPerspective.length')
+  @DocsEditable()
+  @Experimental() // untriaged
+  CssNumericValue length;
+}
+// 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.
+
+@DocsEditable()
+@DomName('CSSPositionValue')
+@Experimental() // untriaged
+@Native("CSSPositionValue")
+class CssPositionValue extends CssStyleValue {
+  // To suppress missing implicit constructor warnings.
+  factory CssPositionValue._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('CSSPositionValue.CSSPositionValue')
+  @DocsEditable()
+  factory CssPositionValue(CssNumericValue x, CssNumericValue y) {
+    return CssPositionValue._create_1(x, y);
+  }
+  static CssPositionValue _create_1(x, y) =>
+      JS('CssPositionValue', 'new CSSPositionValue(#,#)', x, y);
+
+  @DomName('CSSPositionValue.x')
+  @DocsEditable()
+  @Experimental() // untriaged
+  CssNumericValue x;
+
+  @DomName('CSSPositionValue.y')
+  @DocsEditable()
+  @Experimental() // untriaged
+  CssNumericValue y;
+}
+// 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.
+
+@DocsEditable()
+@DomName('CSSResourceValue')
+@Experimental() // untriaged
+@Native("CSSResourceValue")
+class CssResourceValue extends CssStyleValue {
+  // To suppress missing implicit constructor warnings.
+  factory CssResourceValue._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('CSSResourceValue.state')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String state;
+}
+// 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.
+
+@DocsEditable()
+@DomName('CSSRotation')
+@Experimental() // untriaged
+@Native("CSSRotation")
+class CssRotation extends CssTransformComponent {
+  // To suppress missing implicit constructor warnings.
+  factory CssRotation._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('CSSRotation.CSSRotation')
+  @DocsEditable()
+  factory CssRotation(angleValue_OR_x, [num y, num z, CssNumericValue angle]) {
+    if ((angleValue_OR_x is CssNumericValue) &&
+        y == null &&
+        z == null &&
+        angle == null) {
+      return CssRotation._create_1(angleValue_OR_x);
+    }
+    if ((angle is CssNumericValue) &&
+        (z is num) &&
+        (y is num) &&
+        (angleValue_OR_x is num)) {
+      return CssRotation._create_2(angleValue_OR_x, y, z, angle);
+    }
+    throw new ArgumentError("Incorrect number or type of arguments");
+  }
+  static CssRotation _create_1(angleValue_OR_x) =>
+      JS('CssRotation', 'new CSSRotation(#)', angleValue_OR_x);
+  static CssRotation _create_2(angleValue_OR_x, y, z, angle) => JS(
+      'CssRotation', 'new CSSRotation(#,#,#,#)', angleValue_OR_x, y, z, angle);
+
+  @DomName('CSSRotation.angle')
+  @DocsEditable()
+  @Experimental() // untriaged
+  CssNumericValue angle;
+
+  @DomName('CSSRotation.x')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num x;
+
+  @DomName('CSSRotation.y')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num y;
+
+  @DomName('CSSRotation.z')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num z;
+}
+// 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.
+
+@DocsEditable()
 @DomName('CSSRule')
 @Native("CSSRule")
 class CssRule extends Interceptor {
@@ -4233,18 +5302,6 @@
   @Experimental() // untriaged
   static const int VIEWPORT_RULE = 15;
 
-  @DomName('CSSRule.WEBKIT_KEYFRAMES_RULE')
-  @DocsEditable()
-  // http://www.w3.org/TR/css3-animations/#cssrule
-  @Experimental()
-  static const int WEBKIT_KEYFRAMES_RULE = 7;
-
-  @DomName('CSSRule.WEBKIT_KEYFRAME_RULE')
-  @DocsEditable()
-  // http://www.w3.org/TR/css3-animations/#cssrule
-  @Experimental()
-  static const int WEBKIT_KEYFRAME_RULE = 8;
-
   @DomName('CSSRule.cssText')
   @DocsEditable()
   String cssText;
@@ -4261,6 +5318,81 @@
   @DocsEditable()
   final int type;
 }
+// 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.
+
+@DocsEditable()
+@DomName('CSSScale')
+@Experimental() // untriaged
+@Native("CSSScale")
+class CssScale extends CssTransformComponent {
+  // To suppress missing implicit constructor warnings.
+  factory CssScale._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('CSSScale.CSSScale')
+  @DocsEditable()
+  factory CssScale(num x, num y, [num z]) {
+    if ((y is num) && (x is num) && z == null) {
+      return CssScale._create_1(x, y);
+    }
+    if ((z is num) && (y is num) && (x is num)) {
+      return CssScale._create_2(x, y, z);
+    }
+    throw new ArgumentError("Incorrect number or type of arguments");
+  }
+  static CssScale _create_1(x, y) => JS('CssScale', 'new CSSScale(#,#)', x, y);
+  static CssScale _create_2(x, y, z) =>
+      JS('CssScale', 'new CSSScale(#,#,#)', x, y, z);
+
+  @DomName('CSSScale.x')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num x;
+
+  @DomName('CSSScale.y')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num y;
+
+  @DomName('CSSScale.z')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num z;
+}
+// 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.
+
+@DocsEditable()
+@DomName('CSSSkew')
+@Experimental() // untriaged
+@Native("CSSSkew")
+class CssSkew extends CssTransformComponent {
+  // To suppress missing implicit constructor warnings.
+  factory CssSkew._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('CSSSkew.CSSSkew')
+  @DocsEditable()
+  factory CssSkew(CssNumericValue ax, CssNumericValue ay) {
+    return CssSkew._create_1(ax, ay);
+  }
+  static CssSkew _create_1(ax, ay) => JS('CssSkew', 'new CSSSkew(#,#)', ax, ay);
+
+  @DomName('CSSSkew.ax')
+  @DocsEditable()
+  @Experimental() // untriaged
+  CssNumericValue ax;
+
+  @DomName('CSSSkew.ay')
+  @DocsEditable()
+  @Experimental() // untriaged
+  CssNumericValue ay;
+}
 
 // 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
@@ -8807,31 +9939,234 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('CSSStyleValue')
+@Experimental() // untriaged
+@Native("CSSStyleValue")
+class CssStyleValue extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory CssStyleValue._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('CSSStyleValue.parse')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static Object parse(String property, String cssText) native;
+}
+// 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.
+
+@DocsEditable()
 @DomName('CSSSupportsRule')
 @Native("CSSSupportsRule")
-class CssSupportsRule extends CssRule {
+class CssSupportsRule extends CssConditionRule {
   // To suppress missing implicit constructor warnings.
   factory CssSupportsRule._() {
     throw new UnsupportedError("Not supported");
   }
+}
+// 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.
 
-  @DomName('CSSSupportsRule.conditionText')
-  @DocsEditable()
-  final String conditionText;
+@DocsEditable()
+@DomName('CSSTransformComponent')
+@Experimental() // untriaged
+@Native("CSSTransformComponent")
+class CssTransformComponent extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory CssTransformComponent._() {
+    throw new UnsupportedError("Not supported");
+  }
 
-  @DomName('CSSSupportsRule.cssRules')
+  @DomName('CSSTransformComponent.is2D')
   @DocsEditable()
-  @Returns('_CssRuleList|Null')
-  @Creates('_CssRuleList')
-  final List<CssRule> cssRules;
+  @Experimental() // untriaged
+  bool is2D;
+}
+// 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.
 
-  @DomName('CSSSupportsRule.deleteRule')
-  @DocsEditable()
-  void deleteRule(int index) native;
+@DocsEditable()
+@DomName('CSSTransformValue')
+@Experimental() // untriaged
+@Native("CSSTransformValue")
+class CssTransformValue extends CssStyleValue {
+  // To suppress missing implicit constructor warnings.
+  factory CssTransformValue._() {
+    throw new UnsupportedError("Not supported");
+  }
 
-  @DomName('CSSSupportsRule.insertRule')
+  @DomName('CSSTransformValue.CSSTransformValue')
   @DocsEditable()
-  int insertRule(String rule, int index) native;
+  factory CssTransformValue([List<CssTransformComponent> transformComponents]) {
+    if (transformComponents == null) {
+      return CssTransformValue._create_1();
+    }
+    if ((transformComponents is List<CssTransformComponent>)) {
+      return CssTransformValue._create_2(transformComponents);
+    }
+    throw new ArgumentError("Incorrect number or type of arguments");
+  }
+  static CssTransformValue _create_1() =>
+      JS('CssTransformValue', 'new CSSTransformValue()');
+  static CssTransformValue _create_2(transformComponents) =>
+      JS('CssTransformValue', 'new CSSTransformValue(#)', transformComponents);
+
+  @DomName('CSSTransformValue.is2D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final bool is2D;
+
+  @DomName('CSSTransformValue.length')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final int length;
+
+  @DomName('CSSTransformValue.componentAtIndex')
+  @DocsEditable()
+  @Experimental() // untriaged
+  CssTransformComponent componentAtIndex(int index) native;
+
+  @DomName('CSSTransformValue.toMatrix')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomMatrix toMatrix() native;
+}
+// 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.
+
+@DocsEditable()
+@DomName('CSSTranslation')
+@Experimental() // untriaged
+@Native("CSSTranslation")
+class CssTranslation extends CssTransformComponent {
+  // To suppress missing implicit constructor warnings.
+  factory CssTranslation._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('CSSTranslation.CSSTranslation')
+  @DocsEditable()
+  factory CssTranslation(CssNumericValue x, CssNumericValue y,
+      [CssNumericValue z]) {
+    if ((y is CssNumericValue) && (x is CssNumericValue) && z == null) {
+      return CssTranslation._create_1(x, y);
+    }
+    if ((z is CssNumericValue) &&
+        (y is CssNumericValue) &&
+        (x is CssNumericValue)) {
+      return CssTranslation._create_2(x, y, z);
+    }
+    throw new ArgumentError("Incorrect number or type of arguments");
+  }
+  static CssTranslation _create_1(x, y) =>
+      JS('CssTranslation', 'new CSSTranslation(#,#)', x, y);
+  static CssTranslation _create_2(x, y, z) =>
+      JS('CssTranslation', 'new CSSTranslation(#,#,#)', x, y, z);
+
+  @DomName('CSSTranslation.x')
+  @DocsEditable()
+  @Experimental() // untriaged
+  CssNumericValue x;
+
+  @DomName('CSSTranslation.y')
+  @DocsEditable()
+  @Experimental() // untriaged
+  CssNumericValue y;
+
+  @DomName('CSSTranslation.z')
+  @DocsEditable()
+  @Experimental() // untriaged
+  CssNumericValue z;
+}
+// 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.
+
+@DocsEditable()
+@DomName('CSSUnitValue')
+@Experimental() // untriaged
+@Native("CSSUnitValue")
+class CssUnitValue extends CssNumericValue {
+  // To suppress missing implicit constructor warnings.
+  factory CssUnitValue._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('CSSUnitValue.CSSUnitValue')
+  @DocsEditable()
+  factory CssUnitValue(num value, String unit) {
+    return CssUnitValue._create_1(value, unit);
+  }
+  static CssUnitValue _create_1(value, unit) =>
+      JS('CssUnitValue', 'new CSSUnitValue(#,#)', value, unit);
+
+  @DomName('CSSUnitValue.type')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String type;
+
+  @DomName('CSSUnitValue.unit')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String unit;
+
+  @DomName('CSSUnitValue.value')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num value;
+}
+// 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.
+
+@DocsEditable()
+@DomName('CSSUnparsedValue')
+@Experimental() // untriaged
+@Native("CSSUnparsedValue")
+class CssUnparsedValue extends CssStyleValue {
+  // To suppress missing implicit constructor warnings.
+  factory CssUnparsedValue._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('CSSUnparsedValue.length')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final int length;
+
+  @DomName('CSSUnparsedValue.fragmentAtIndex')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Object fragmentAtIndex(int index) native;
+}
+// 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.
+
+@DocsEditable()
+@DomName('CSSVariableReferenceValue')
+@Experimental() // untriaged
+@Native("CSSVariableReferenceValue")
+class CssVariableReferenceValue extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory CssVariableReferenceValue._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('CSSVariableReferenceValue.fallback')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final CssUnparsedValue fallback;
+
+  @DomName('CSSVariableReferenceValue.variable')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String variable;
 }
 // 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
@@ -8856,6 +10191,91 @@
 // 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.
 
+@DocsEditable()
+@DomName('CSSURLImageValue')
+@Experimental() // untriaged
+@Native("CSSURLImageValue")
+class CssurlImageValue extends CssImageValue {
+  // To suppress missing implicit constructor warnings.
+  factory CssurlImageValue._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('CSSURLImageValue.CSSURLImageValue')
+  @DocsEditable()
+  factory CssurlImageValue(String url) {
+    return CssurlImageValue._create_1(url);
+  }
+  static CssurlImageValue _create_1(url) =>
+      JS('CssurlImageValue', 'new CSSURLImageValue(#)', url);
+
+  @DomName('CSSURLImageValue.url')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String url;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+@DomName('CustomElementConstructor')
+// https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/custom/index.html#dfn-custom-element-constructor-generation
+@deprecated // experimental
+typedef void CustomElementConstructor();
+// 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.
+
+@DocsEditable()
+@DomName('CustomElementRegistry')
+@Experimental() // untriaged
+@Native("CustomElementRegistry")
+class CustomElementRegistry extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory CustomElementRegistry._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('CustomElementRegistry.define')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void define(String name, Object constructor, [Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      _define_1(name, constructor, options_1);
+      return;
+    }
+    _define_2(name, constructor);
+    return;
+  }
+
+  @JSName('define')
+  @DomName('CustomElementRegistry.define')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _define_1(name, constructor, options) native;
+  @JSName('define')
+  @DomName('CustomElementRegistry.define')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _define_2(name, constructor) native;
+
+  @DomName('CustomElementRegistry.get')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Object get(String name) native;
+
+  @DomName('CustomElementRegistry.whenDefined')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future whenDefined(String name) native;
+}
+// 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.
+
 // WARNING: Do not edit - generated code.
 
 @DomName('CustomEvent')
@@ -8894,6 +10314,20 @@
     return _detail;
   }
 
+  @DomName('CustomEvent.CustomEvent')
+  @DocsEditable()
+  factory CustomEvent._(String type, [Map eventInitDict]) {
+    if (eventInitDict != null) {
+      var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
+      return CustomEvent._create_1(type, eventInitDict_1);
+    }
+    return CustomEvent._create_2(type);
+  }
+  static CustomEvent _create_1(type, eventInitDict) =>
+      JS('CustomEvent', 'new CustomEvent(#,#)', type, eventInitDict);
+  static CustomEvent _create_2(type) =>
+      JS('CustomEvent', 'new CustomEvent(#)', type);
+
   @DomName('CustomEvent._detail')
   @DocsEditable()
   @Experimental() // untriaged
@@ -8909,8 +10343,8 @@
   @JSName('initCustomEvent')
   @DomName('CustomEvent.initCustomEvent')
   @DocsEditable()
-  void _initCustomEvent(
-      String type, bool bubbles, bool cancelable, Object detail) native;
+  void _initCustomEvent(String type,
+      [bool bubbles, bool cancelable, Object detail]) native;
 }
 // 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
@@ -8944,6 +10378,31 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('HTMLDataElement')
+@Experimental() // untriaged
+@Native("HTMLDataElement")
+class DataElement extends HtmlElement {
+  // To suppress missing implicit constructor warnings.
+  factory DataElement._() {
+    throw new UnsupportedError("Not supported");
+  }
+  /**
+   * Constructor instantiated by the DOM when a custom element has been created.
+   *
+   * This can only be called by subclasses from their created constructor.
+   */
+  DataElement.created() : super.created();
+
+  @DomName('HTMLDataElement.value')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String value;
+}
+// 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.
+
+@DocsEditable()
 @DomName('HTMLDataListElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
@@ -8989,6 +10448,13 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('DataTransfer.DataTransfer')
+  @DocsEditable()
+  factory DataTransfer() {
+    return DataTransfer._create_1();
+  }
+  static DataTransfer _create_1() => JS('DataTransfer', 'new DataTransfer()');
+
   @DomName('DataTransfer.dropEffect')
   @DocsEditable()
   @Experimental() // untriaged
@@ -9061,23 +10527,7 @@
 
   @DomName('DataTransferItem.getAsFile')
   @DocsEditable()
-  Blob getAsFile() native;
-
-  @JSName('getAsString')
-  @DomName('DataTransferItem.getAsString')
-  @DocsEditable()
-  void _getAsString(_StringCallback callback) native;
-
-  @JSName('getAsString')
-  @DomName('DataTransferItem.getAsString')
-  @DocsEditable()
-  Future<String> getAsString() {
-    var completer = new Completer<String>();
-    _getAsString((value) {
-      completer.complete(value);
-    });
-    return completer.future;
-  }
+  File getAsFile() native;
 
   @JSName('webkitGetAsEntry')
   @DomName('DataTransferItem.webkitGetAsEntry')
@@ -9151,6 +10601,24 @@
 // 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.
 
+// WARNING: Do not edit - generated code.
+
+@DomName('DecodeErrorCallback')
+@Experimental() // untriaged
+typedef void DecodeErrorCallback(DomException error);
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+@DomName('DecodeSuccessCallback')
+@Experimental() // untriaged
+typedef void DecodeSuccessCallback(AudioBuffer decodedData);
+// 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.
+
 @DocsEditable()
 @DomName('DedicatedWorkerGlobalScope')
 @Experimental() // untriaged
@@ -9183,10 +10651,15 @@
   @Experimental() // untriaged
   static const int TEMPORARY = 0;
 
+  @DomName('DedicatedWorkerGlobalScope.close')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void close() native;
+
   @DomName('DedicatedWorkerGlobalScope.postMessage')
   @DocsEditable()
   @Experimental() // untriaged
-  void postMessage(/*any*/ message, [List<MessagePort> transfer]) {
+  void postMessage(/*any*/ message, [List<Object> transfer]) {
     if (transfer != null) {
       var message_1 = convertDartToNative_SerializedScriptValue(message);
       _postMessage_1(message_1, transfer);
@@ -9201,7 +10674,7 @@
   @DomName('DedicatedWorkerGlobalScope.postMessage')
   @DocsEditable()
   @Experimental() // untriaged
-  void _postMessage_1(message, List<MessagePort> transfer) native;
+  void _postMessage_1(message, List<Object> transfer) native;
   @JSName('postMessage')
   @DomName('DedicatedWorkerGlobalScope.postMessage')
   @DocsEditable()
@@ -9324,6 +10797,35 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('DeprecationReport')
+@Experimental() // untriaged
+@Native("DeprecationReport")
+class DeprecationReport extends ReportBody {
+  // To suppress missing implicit constructor warnings.
+  factory DeprecationReport._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('DeprecationReport.lineNumber')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final int lineNumber;
+
+  @DomName('DeprecationReport.message')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String message;
+
+  @DomName('DeprecationReport.sourceFile')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String sourceFile;
+}
+// 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.
+
+@DocsEditable()
 @DomName('HTMLDetailsElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.SAFARI)
@@ -9357,6 +10859,110 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('DetectedBarcode')
+@Experimental() // untriaged
+@Native("DetectedBarcode")
+class DetectedBarcode extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory DetectedBarcode._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('DetectedBarcode.DetectedBarcode')
+  @DocsEditable()
+  factory DetectedBarcode() {
+    return DetectedBarcode._create_1();
+  }
+  static DetectedBarcode _create_1() =>
+      JS('DetectedBarcode', 'new DetectedBarcode()');
+
+  @DomName('DetectedBarcode.boundingBox')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Rectangle boundingBox;
+
+  @DomName('DetectedBarcode.cornerPoints')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final List cornerPoints;
+
+  @DomName('DetectedBarcode.rawValue')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String rawValue;
+}
+// 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.
+
+@DocsEditable()
+@DomName('DetectedFace')
+@Experimental() // untriaged
+@Native("DetectedFace")
+class DetectedFace extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory DetectedFace._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('DetectedFace.DetectedFace')
+  @DocsEditable()
+  factory DetectedFace() {
+    return DetectedFace._create_1();
+  }
+  static DetectedFace _create_1() => JS('DetectedFace', 'new DetectedFace()');
+
+  @DomName('DetectedFace.boundingBox')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Rectangle boundingBox;
+
+  @DomName('DetectedFace.landmarks')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final List landmarks;
+}
+// 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.
+
+@DocsEditable()
+@DomName('DetectedText')
+@Experimental() // untriaged
+@Native("DetectedText")
+class DetectedText extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory DetectedText._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('DetectedText.DetectedText')
+  @DocsEditable()
+  factory DetectedText() {
+    return DetectedText._create_1();
+  }
+  static DetectedText _create_1() => JS('DetectedText', 'new DetectedText()');
+
+  @DomName('DetectedText.boundingBox')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Rectangle boundingBox;
+
+  @DomName('DetectedText.cornerPoints')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final List cornerPoints;
+
+  @DomName('DetectedText.rawValue')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String rawValue;
+}
+// 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.
+
+@DocsEditable()
 @DomName('DeviceAcceleration')
 // http://dev.w3.org/geo/api/spec-source-orientation.html#devicemotion
 @Experimental()
@@ -9369,48 +10975,15 @@
 
   @DomName('DeviceAcceleration.x')
   @DocsEditable()
-  final double x;
+  final num x;
 
   @DomName('DeviceAcceleration.y')
   @DocsEditable()
-  final double y;
+  final num y;
 
   @DomName('DeviceAcceleration.z')
   @DocsEditable()
-  final double z;
-}
-// 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.
-
-@DocsEditable()
-@DomName('DeviceLightEvent')
-@Experimental() // untriaged
-@Native("DeviceLightEvent")
-class DeviceLightEvent extends Event {
-  // To suppress missing implicit constructor warnings.
-  factory DeviceLightEvent._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('DeviceLightEvent.DeviceLightEvent')
-  @DocsEditable()
-  factory DeviceLightEvent(String type, [Map eventInitDict]) {
-    if (eventInitDict != null) {
-      var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
-      return DeviceLightEvent._create_1(type, eventInitDict_1);
-    }
-    return DeviceLightEvent._create_2(type);
-  }
-  static DeviceLightEvent _create_1(type, eventInitDict) =>
-      JS('DeviceLightEvent', 'new DeviceLightEvent(#,#)', type, eventInitDict);
-  static DeviceLightEvent _create_2(type) =>
-      JS('DeviceLightEvent', 'new DeviceLightEvent(#)', type);
-
-  @DomName('DeviceLightEvent.value')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double value;
+  final num z;
 }
 // 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
@@ -9427,6 +11000,20 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('DeviceMotionEvent.DeviceMotionEvent')
+  @DocsEditable()
+  factory DeviceMotionEvent(String type, [Map eventInitDict]) {
+    if (eventInitDict != null) {
+      var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
+      return DeviceMotionEvent._create_1(type, eventInitDict_1);
+    }
+    return DeviceMotionEvent._create_2(type);
+  }
+  static DeviceMotionEvent _create_1(type, eventInitDict) => JS(
+      'DeviceMotionEvent', 'new DeviceMotionEvent(#,#)', type, eventInitDict);
+  static DeviceMotionEvent _create_2(type) =>
+      JS('DeviceMotionEvent', 'new DeviceMotionEvent(#)', type);
+
   @DomName('DeviceMotionEvent.acceleration')
   @DocsEditable()
   final DeviceAcceleration acceleration;
@@ -9437,73 +11024,59 @@
 
   @DomName('DeviceMotionEvent.interval')
   @DocsEditable()
-  final double interval;
+  final num interval;
 
   @DomName('DeviceMotionEvent.rotationRate')
   @DocsEditable()
   final DeviceRotationRate rotationRate;
-
-  @DomName('DeviceMotionEvent.initDeviceMotionEvent')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void initDeviceMotionEvent(
-      String type,
-      bool bubbles,
-      bool cancelable,
-      DeviceAcceleration acceleration,
-      DeviceAcceleration accelerationIncludingGravity,
-      DeviceRotationRate rotationRate,
-      num interval) native;
 }
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// 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.
 
-// WARNING: Do not edit - generated code.
-
+@DocsEditable()
 @DomName('DeviceOrientationEvent')
 // http://dev.w3.org/geo/api/spec-source-orientation.html#devicemotion
 @Experimental()
 @Native("DeviceOrientationEvent")
 class DeviceOrientationEvent extends Event {
-  factory DeviceOrientationEvent(String type,
-      {bool canBubble: true,
-      bool cancelable: true,
-      num alpha: 0,
-      num beta: 0,
-      num gamma: 0,
-      bool absolute: false}) {
-    DeviceOrientationEvent e = document._createEvent("DeviceOrientationEvent");
-    e._initDeviceOrientationEvent(
-        type, canBubble, cancelable, alpha, beta, gamma, absolute);
-    return e;
-  }
   // To suppress missing implicit constructor warnings.
   factory DeviceOrientationEvent._() {
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('DeviceOrientationEvent.DeviceOrientationEvent')
+  @DocsEditable()
+  factory DeviceOrientationEvent(String type, [Map eventInitDict]) {
+    if (eventInitDict != null) {
+      var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
+      return DeviceOrientationEvent._create_1(type, eventInitDict_1);
+    }
+    return DeviceOrientationEvent._create_2(type);
+  }
+  static DeviceOrientationEvent _create_1(type, eventInitDict) => JS(
+      'DeviceOrientationEvent',
+      'new DeviceOrientationEvent(#,#)',
+      type,
+      eventInitDict);
+  static DeviceOrientationEvent _create_2(type) =>
+      JS('DeviceOrientationEvent', 'new DeviceOrientationEvent(#)', type);
+
   @DomName('DeviceOrientationEvent.absolute')
   @DocsEditable()
   final bool absolute;
 
   @DomName('DeviceOrientationEvent.alpha')
   @DocsEditable()
-  final double alpha;
+  final num alpha;
 
   @DomName('DeviceOrientationEvent.beta')
   @DocsEditable()
-  final double beta;
+  final num beta;
 
   @DomName('DeviceOrientationEvent.gamma')
   @DocsEditable()
-  final double gamma;
-
-  @JSName('initDeviceOrientationEvent')
-  @DomName('DeviceOrientationEvent.initDeviceOrientationEvent')
-  @DocsEditable()
-  void _initDeviceOrientationEvent(String type, bool bubbles, bool cancelable,
-      num alpha, num beta, num gamma, bool absolute) native;
+  final num gamma;
 }
 // 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
@@ -9522,15 +11095,15 @@
 
   @DomName('DeviceRotationRate.alpha')
   @DocsEditable()
-  final double alpha;
+  final num alpha;
 
   @DomName('DeviceRotationRate.beta')
   @DocsEditable()
-  final double beta;
+  final num beta;
 
   @DomName('DeviceRotationRate.gamma')
   @DocsEditable()
-  final double gamma;
+  final num gamma;
 }
 // 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
@@ -9563,7 +11136,7 @@
 
   @DomName('HTMLDialogElement.close')
   @DocsEditable()
-  void close(String returnValue) native;
+  void close([String returnValue]) native;
 
   @DomName('HTMLDialogElement.show')
   @DocsEditable()
@@ -9917,10 +11490,17 @@
   static const EventStreamProvider<Event> selectionChangeEvent =
       const EventStreamProvider<Event>('selectionchange');
 
-  @DomName('Document.activeElement')
+  @DomName('Document.Document')
+  @DocsEditable()
+  factory Document() {
+    return Document._create_1();
+  }
+  static Document _create_1() => JS('Document', 'new Document()');
+
+  @DomName('Document.addressSpace')
   @DocsEditable()
   @Experimental() // untriaged
-  final Element activeElement;
+  final String addressSpace;
 
   @JSName('body')
   @DomName('Document.body')
@@ -9963,16 +11543,6 @@
   @DocsEditable()
   final String domain;
 
-  @DomName('Document.fonts')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final FontFaceSet fonts;
-
-  @DomName('Document.fullscreenElement')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final Element fullscreenElement;
-
   @DomName('Document.fullscreenEnabled')
   @DocsEditable()
   @Experimental() // untriaged
@@ -10002,11 +11572,6 @@
   @Experimental() // untriaged
   final String origin;
 
-  @DomName('Document.pointerLockElement')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final Element pointerLockElement;
-
   @JSName('preferredStylesheetSet')
   @DomName('Document.preferredStylesheetSet')
   @DocsEditable()
@@ -10026,6 +11591,11 @@
   @Experimental() // untriaged
   final SvgSvgElement rootElement;
 
+  @DomName('Document.rootScroller')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Element rootScroller;
+
   @DomName('Document.scrollingElement')
   @DocsEditable()
   @Experimental() // untriaged
@@ -10036,13 +11606,6 @@
   @DocsEditable()
   String _selectedStylesheetSet;
 
-  @JSName('styleSheets')
-  @DomName('Document.styleSheets')
-  @DocsEditable()
-  @Returns('_StyleSheetList|Null')
-  @Creates('_StyleSheetList')
-  final List<StyleSheet> _styleSheets;
-
   @DomName('Document.suborigin')
   @DocsEditable()
   @Experimental() // untriaged
@@ -10051,7 +11614,7 @@
   @DomName('Document.timeline')
   @DocsEditable()
   @Experimental() // untriaged
-  final AnimationTimeline timeline;
+  final DocumentTimeline timeline;
 
   @JSName('title')
   @DomName('Document.title')
@@ -10118,14 +11681,14 @@
   @JSName('createElement')
   @DomName('Document.createElement')
   @DocsEditable()
-  Element _createElement(String localName_OR_tagName, [String typeExtension])
-      native;
+  Element _createElement(String localName_OR_tagName,
+      [options_OR_typeExtension]) native;
 
   @JSName('createElementNS')
   @DomName('Document.createElementNS')
   @DocsEditable()
   Element _createElementNS(String namespaceURI, String qualifiedName,
-      [String typeExtension]) native;
+      [options_OR_typeExtension]) native;
 
   @JSName('createEvent')
   @DomName('Document.createEvent')
@@ -10145,21 +11708,32 @@
   @DocsEditable()
   // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
   @Experimental()
-  Touch _createTouch(
-      Window window,
-      EventTarget target,
-      int identifier,
-      num pageX,
-      num pageY,
-      num screenX,
-      num screenY,
-      num radiusX,
-      num radiusY,
-      num rotationAngle,
-      num force) {
+  Touch _createTouch(Window view, EventTarget target, int identifier, num pageX,
+      num pageY, num screenX, num screenY,
+      [num radiusX, num radiusY, num rotationAngle, num force]) {
+    if (force != null) {
+      var target_1 = _convertDartToNative_EventTarget(target);
+      return _createTouch_1(view, target_1, identifier, pageX, pageY, screenX,
+          screenY, radiusX, radiusY, rotationAngle, force);
+    }
+    if (rotationAngle != null) {
+      var target_1 = _convertDartToNative_EventTarget(target);
+      return _createTouch_2(view, target_1, identifier, pageX, pageY, screenX,
+          screenY, radiusX, radiusY, rotationAngle);
+    }
+    if (radiusY != null) {
+      var target_1 = _convertDartToNative_EventTarget(target);
+      return _createTouch_3(view, target_1, identifier, pageX, pageY, screenX,
+          screenY, radiusX, radiusY);
+    }
+    if (radiusX != null) {
+      var target_1 = _convertDartToNative_EventTarget(target);
+      return _createTouch_4(
+          view, target_1, identifier, pageX, pageY, screenX, screenY, radiusX);
+    }
     var target_1 = _convertDartToNative_EventTarget(target);
-    return _createTouch_1(window, target_1, identifier, pageX, pageY, screenX,
-        screenY, radiusX, radiusY, rotationAngle, force);
+    return _createTouch_5(
+        view, target_1, identifier, pageX, pageY, screenX, screenY);
   }
 
   @JSName('createTouch')
@@ -10167,8 +11741,36 @@
   @DocsEditable()
   // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
   @Experimental()
-  Touch _createTouch_1(Window window, target, identifier, pageX, pageY, screenX,
+  Touch _createTouch_1(Window view, target, identifier, pageX, pageY, screenX,
       screenY, radiusX, radiusY, rotationAngle, force) native;
+  @JSName('createTouch')
+  @DomName('Document.createTouch')
+  @DocsEditable()
+  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
+  @Experimental()
+  Touch _createTouch_2(Window view, target, identifier, pageX, pageY, screenX,
+      screenY, radiusX, radiusY, rotationAngle) native;
+  @JSName('createTouch')
+  @DomName('Document.createTouch')
+  @DocsEditable()
+  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
+  @Experimental()
+  Touch _createTouch_3(Window view, target, identifier, pageX, pageY, screenX,
+      screenY, radiusX, radiusY) native;
+  @JSName('createTouch')
+  @DomName('Document.createTouch')
+  @DocsEditable()
+  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
+  @Experimental()
+  Touch _createTouch_4(Window view, target, identifier, pageX, pageY, screenX,
+      screenY, radiusX) native;
+  @JSName('createTouch')
+  @DomName('Document.createTouch')
+  @DocsEditable()
+  // http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features
+  @Experimental()
+  Touch _createTouch_5(
+      Window view, target, identifier, pageX, pageY, screenX, screenY) native;
 
   @JSName('createTouchList')
   @DomName('Document.createTouchList')
@@ -10177,16 +11779,6 @@
   @Experimental()
   TouchList _createTouchList(Touch touches) native;
 
-  @JSName('elementFromPoint')
-  @DomName('Document.elementFromPoint')
-  @DocsEditable()
-  Element _elementFromPoint(int x, int y) native;
-
-  @DomName('Document.elementsFromPoint')
-  @DocsEditable()
-  @Experimental() // untriaged
-  List<Element> elementsFromPoint(int x, int y) native;
-
   @DomName('Document.execCommand')
   @DocsEditable()
   bool execCommand(String commandId, [bool showUI, String value]) native;
@@ -10201,6 +11793,11 @@
   @Experimental() // untriaged
   void exitPointerLock() native;
 
+  @DomName('Document.getAnimations')
+  @DocsEditable()
+  @Experimental() // untriaged
+  List<Animation> getAnimations() native;
+
   @DomName('Document.getElementsByClassName')
   @DocsEditable()
   @Creates('NodeList|HtmlCollection')
@@ -10243,10 +11840,27 @@
   @DocsEditable()
   String queryCommandValue(String commandId) native;
 
-  @DomName('Document.transformDocumentToTreeView')
+  @DomName('Document.registerElement')
   @DocsEditable()
   @Experimental() // untriaged
-  void transformDocumentToTreeView(String noStyleMessage) native;
+  Function registerElement2(String type, [Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return _registerElement2_1(type, options_1);
+    }
+    return _registerElement2_2(type);
+  }
+
+  @JSName('registerElement')
+  @DomName('Document.registerElement')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Function _registerElement2_1(type, options) native;
+  @JSName('registerElement')
+  @DomName('Document.registerElement')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Function _registerElement2_2(type) native;
 
   @JSName('webkitExitFullscreen')
   @DomName('Document.webkitExitFullscreen')
@@ -10263,6 +11877,47 @@
   @DocsEditable()
   Element getElementById(String elementId) native;
 
+  // From DocumentOrShadowRoot
+
+  @DomName('Document.activeElement')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Element activeElement;
+
+  @DomName('Document.fullscreenElement')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Element fullscreenElement;
+
+  @DomName('Document.pointerLockElement')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Element pointerLockElement;
+
+  @JSName('styleSheets')
+  @DomName('Document.styleSheets')
+  @DocsEditable()
+  @Returns('_StyleSheetList|Null')
+  @Creates('_StyleSheetList')
+  final List<StyleSheet> _styleSheets;
+
+  @JSName('elementFromPoint')
+  @DomName('Document.elementFromPoint')
+  @DocsEditable()
+  Element _elementFromPoint(int x, int y) native;
+
+  @DomName('Document.elementsFromPoint')
+  @DocsEditable()
+  @Experimental() // untriaged
+  List<Element> elementsFromPoint(int x, int y) native;
+
+  // From FontFaceSource
+
+  @DomName('Document.fonts')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final FontFaceSet fonts;
+
   // From ParentNode
 
   @JSName('childElementCount')
@@ -10748,6 +12403,12 @@
   @deprecated
   bool get supportsRegister => supportsRegisterElement;
 
+  void registerElement(String tag, Type customElementClass,
+      {String extendsTag}) {
+    registerElement2(
+        tag, {'prototype': customElementClass, 'extends': extendsTag});
+  }
+
   @DomName('Document.createElement')
   @ForceInline() // Almost all call sites have one argument.
   Element createElement(String tagName, [String typeExtension]) {
@@ -10974,6 +12635,85 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('DocumentOrShadowRoot')
+@Experimental() // untriaged
+@Native("DocumentOrShadowRoot")
+class DocumentOrShadowRoot extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory DocumentOrShadowRoot._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('DocumentOrShadowRoot.activeElement')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Element activeElement;
+
+  @DomName('DocumentOrShadowRoot.fullscreenElement')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Element fullscreenElement;
+
+  @DomName('DocumentOrShadowRoot.pointerLockElement')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Element pointerLockElement;
+
+  @DomName('DocumentOrShadowRoot.styleSheets')
+  @DocsEditable()
+  @Experimental() // untriaged
+  @Returns('_StyleSheetList|Null')
+  @Creates('_StyleSheetList')
+  final List<StyleSheet> styleSheets;
+
+  @DomName('DocumentOrShadowRoot.elementFromPoint')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Element elementFromPoint(int x, int y) native;
+
+  @DomName('DocumentOrShadowRoot.elementsFromPoint')
+  @DocsEditable()
+  @Experimental() // untriaged
+  List<Element> elementsFromPoint(int x, int y) native;
+
+  @DomName('DocumentOrShadowRoot.getSelection')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Selection getSelection() native;
+}
+// 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.
+
+@DocsEditable()
+@DomName('DocumentTimeline')
+@Experimental() // untriaged
+@Native("DocumentTimeline")
+class DocumentTimeline extends AnimationTimeline {
+  // To suppress missing implicit constructor warnings.
+  factory DocumentTimeline._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('DocumentTimeline.DocumentTimeline')
+  @DocsEditable()
+  factory DocumentTimeline([Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return DocumentTimeline._create_1(options_1);
+    }
+    return DocumentTimeline._create_2();
+  }
+  static DocumentTimeline _create_1(options) =>
+      JS('DocumentTimeline', 'new DocumentTimeline(#)', options);
+  static DocumentTimeline _create_2() =>
+      JS('DocumentTimeline', 'new DocumentTimeline()');
+}
+// 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.
+
+@DocsEditable()
 @DomName('DOMError')
 @Native("DOMError")
 class DomError extends Interceptor {
@@ -11085,7 +12825,7 @@
   @JSName('createHTMLDocument')
   @DomName('DOMImplementation.createHTMLDocument')
   @DocsEditable()
-  HtmlDocument createHtmlDocument(String title) native;
+  HtmlDocument createHtmlDocument([String title]) native;
 
   @DomName('DOMImplementation.hasFeature')
   @DocsEditable()
@@ -11126,18 +12866,14 @@
 
   @DomName('DOMMatrix.DOMMatrix')
   @DocsEditable()
-  factory DomMatrix([DomMatrixReadOnly other]) {
-    if (other == null) {
-      return DomMatrix._create_1();
+  factory DomMatrix([Object init]) {
+    if (init != null) {
+      return DomMatrix._create_1(init);
     }
-    if ((other is DomMatrixReadOnly)) {
-      return DomMatrix._create_2(other);
-    }
-    throw new ArgumentError("Incorrect number or type of arguments");
+    return DomMatrix._create_2();
   }
-  static DomMatrix _create_1() => JS('DomMatrix', 'new DOMMatrix()');
-  static DomMatrix _create_2(other) =>
-      JS('DomMatrix', 'new DOMMatrix(#)', other);
+  static DomMatrix _create_1(init) => JS('DomMatrix', 'new DOMMatrix(#)', init);
+  static DomMatrix _create_2() => JS('DomMatrix', 'new DOMMatrix()');
 
   // Shadowing definition.
   num get a => JS("num", "#.a", this);
@@ -11293,37 +13029,138 @@
     JS("void", "#.m44 = #", this, value);
   }
 
+  @DomName('DOMMatrix.fromFloat32Array')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static DomMatrix fromFloat32Array(Float32List array32) native;
+
+  @DomName('DOMMatrix.fromFloat64Array')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static DomMatrix fromFloat64Array(Float64List array64) native;
+
+  @DomName('DOMMatrix.fromMatrix')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static DomMatrix fromMatrix([Map other]) {
+    if (other != null) {
+      var other_1 = convertDartToNative_Dictionary(other);
+      return _fromMatrix_1(other_1);
+    }
+    return _fromMatrix_2();
+  }
+
+  @JSName('fromMatrix')
+  @DomName('DOMMatrix.fromMatrix')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static DomMatrix _fromMatrix_1(other) native;
+  @JSName('fromMatrix')
+  @DomName('DOMMatrix.fromMatrix')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static DomMatrix _fromMatrix_2() native;
+
+  @DomName('DOMMatrix.invertSelf')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomMatrix invertSelf() native;
+
   @DomName('DOMMatrix.multiplySelf')
   @DocsEditable()
   @Experimental() // untriaged
-  DomMatrix multiplySelf(DomMatrix other) native;
+  DomMatrix multiplySelf([Map other]) {
+    if (other != null) {
+      var other_1 = convertDartToNative_Dictionary(other);
+      return _multiplySelf_1(other_1);
+    }
+    return _multiplySelf_2();
+  }
+
+  @JSName('multiplySelf')
+  @DomName('DOMMatrix.multiplySelf')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomMatrix _multiplySelf_1(other) native;
+  @JSName('multiplySelf')
+  @DomName('DOMMatrix.multiplySelf')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomMatrix _multiplySelf_2() native;
 
   @DomName('DOMMatrix.preMultiplySelf')
   @DocsEditable()
   @Experimental() // untriaged
-  DomMatrix preMultiplySelf(DomMatrix other) native;
+  DomMatrix preMultiplySelf([Map other]) {
+    if (other != null) {
+      var other_1 = convertDartToNative_Dictionary(other);
+      return _preMultiplySelf_1(other_1);
+    }
+    return _preMultiplySelf_2();
+  }
+
+  @JSName('preMultiplySelf')
+  @DomName('DOMMatrix.preMultiplySelf')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomMatrix _preMultiplySelf_1(other) native;
+  @JSName('preMultiplySelf')
+  @DomName('DOMMatrix.preMultiplySelf')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomMatrix _preMultiplySelf_2() native;
+
+  @DomName('DOMMatrix.rotateAxisAngleSelf')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomMatrix rotateAxisAngleSelf([num x, num y, num z, num angle]) native;
+
+  @DomName('DOMMatrix.rotateFromVectorSelf')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomMatrix rotateFromVectorSelf([num x, num y]) native;
+
+  @DomName('DOMMatrix.rotateSelf')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomMatrix rotateSelf([num rotX, num rotY, num rotZ]) native;
 
   @DomName('DOMMatrix.scale3dSelf')
   @DocsEditable()
   @Experimental() // untriaged
-  DomMatrix scale3dSelf(num scale, [num originX, num originY, num originZ])
+  DomMatrix scale3dSelf([num scale, num originX, num originY, num originZ])
       native;
 
-  @DomName('DOMMatrix.scaleNonUniformSelf')
-  @DocsEditable()
-  @Experimental() // untriaged
-  DomMatrix scaleNonUniformSelf(num scaleX,
-      [num scaleY, num scaleZ, num originX, num originY, num originZ]) native;
-
   @DomName('DOMMatrix.scaleSelf')
   @DocsEditable()
   @Experimental() // untriaged
-  DomMatrix scaleSelf(num scale, [num originX, num originY]) native;
+  DomMatrix scaleSelf(
+      [num scaleX,
+      num scaleY,
+      num scaleZ,
+      num originX,
+      num originY,
+      num originZ]) native;
+
+  @DomName('DOMMatrix.setMatrixValue')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomMatrix setMatrixValue(String transformList) native;
+
+  @DomName('DOMMatrix.skewXSelf')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomMatrix skewXSelf([num sx]) native;
+
+  @DomName('DOMMatrix.skewYSelf')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomMatrix skewYSelf([num sy]) native;
 
   @DomName('DOMMatrix.translateSelf')
   @DocsEditable()
   @Experimental() // untriaged
-  DomMatrix translateSelf(num tx, num ty, [num tz]) native;
+  DomMatrix translateSelf([num tx, num ty, num tz]) native;
 }
 // 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
@@ -11339,6 +13176,19 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('DOMMatrixReadOnly.DOMMatrixReadOnly')
+  @DocsEditable()
+  factory DomMatrixReadOnly([Object init]) {
+    if (init != null) {
+      return DomMatrixReadOnly._create_1(init);
+    }
+    return DomMatrixReadOnly._create_2();
+  }
+  static DomMatrixReadOnly _create_1(init) =>
+      JS('DomMatrixReadOnly', 'new DOMMatrixReadOnly(#)', init);
+  static DomMatrixReadOnly _create_2() =>
+      JS('DomMatrixReadOnly', 'new DOMMatrixReadOnly()');
+
   num get a => JS("num", "#.a", this);
 
   num get b => JS("num", "#.b", this);
@@ -11387,26 +13237,115 @@
 
   num get m44 => JS("num", "#.m44", this);
 
+  @DomName('DOMMatrixReadOnly.flipX')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomMatrix flipX() native;
+
+  @DomName('DOMMatrixReadOnly.flipY')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomMatrix flipY() native;
+
+  @DomName('DOMMatrixReadOnly.fromFloat32Array')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static DomMatrixReadOnly fromFloat32Array(Float32List array32) native;
+
+  @DomName('DOMMatrixReadOnly.fromFloat64Array')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static DomMatrixReadOnly fromFloat64Array(Float64List array64) native;
+
+  @DomName('DOMMatrixReadOnly.fromMatrix')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static DomMatrixReadOnly fromMatrix([Map other]) {
+    if (other != null) {
+      var other_1 = convertDartToNative_Dictionary(other);
+      return _fromMatrix_1(other_1);
+    }
+    return _fromMatrix_2();
+  }
+
+  @JSName('fromMatrix')
+  @DomName('DOMMatrixReadOnly.fromMatrix')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static DomMatrixReadOnly _fromMatrix_1(other) native;
+  @JSName('fromMatrix')
+  @DomName('DOMMatrixReadOnly.fromMatrix')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static DomMatrixReadOnly _fromMatrix_2() native;
+
+  @DomName('DOMMatrixReadOnly.inverse')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomMatrix inverse() native;
+
   @DomName('DOMMatrixReadOnly.multiply')
   @DocsEditable()
   @Experimental() // untriaged
-  DomMatrix multiply(DomMatrix other) native;
+  DomMatrix multiply([Map other]) {
+    if (other != null) {
+      var other_1 = convertDartToNative_Dictionary(other);
+      return _multiply_1(other_1);
+    }
+    return _multiply_2();
+  }
+
+  @JSName('multiply')
+  @DomName('DOMMatrixReadOnly.multiply')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomMatrix _multiply_1(other) native;
+  @JSName('multiply')
+  @DomName('DOMMatrixReadOnly.multiply')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomMatrix _multiply_2() native;
+
+  @DomName('DOMMatrixReadOnly.rotate')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomMatrix rotate([num rotX, num rotY, num rotZ]) native;
+
+  @DomName('DOMMatrixReadOnly.rotateAxisAngle')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomMatrix rotateAxisAngle([num x, num y, num z, num angle]) native;
+
+  @DomName('DOMMatrixReadOnly.rotateFromVector')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomMatrix rotateFromVector([num x, num y]) native;
 
   @DomName('DOMMatrixReadOnly.scale')
   @DocsEditable()
   @Experimental() // untriaged
-  DomMatrix scale(num scale, [num originX, num originY]) native;
+  DomMatrix scale(
+      [num scaleX,
+      num scaleY,
+      num scaleZ,
+      num originX,
+      num originY,
+      num originZ]) native;
 
   @DomName('DOMMatrixReadOnly.scale3d')
   @DocsEditable()
   @Experimental() // untriaged
-  DomMatrix scale3d(num scale, [num originX, num originY, num originZ]) native;
+  DomMatrix scale3d([num scale, num originX, num originY, num originZ]) native;
 
-  @DomName('DOMMatrixReadOnly.scaleNonUniform')
+  @DomName('DOMMatrixReadOnly.skewX')
   @DocsEditable()
   @Experimental() // untriaged
-  DomMatrix scaleNonUniform(num scaleX,
-      [num scaleY, num scaleZn, num originX, num originY, num originZ]) native;
+  DomMatrix skewX([num sx]) native;
+
+  @DomName('DOMMatrixReadOnly.skewY')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomMatrix skewY([num sy]) native;
 
   @DomName('DOMMatrixReadOnly.toFloat32Array')
   @DocsEditable()
@@ -11418,10 +13357,32 @@
   @Experimental() // untriaged
   Float64List toFloat64Array() native;
 
+  @DomName('DOMMatrixReadOnly.transformPoint')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomPoint transformPoint([Map point]) {
+    if (point != null) {
+      var point_1 = convertDartToNative_Dictionary(point);
+      return _transformPoint_1(point_1);
+    }
+    return _transformPoint_2();
+  }
+
+  @JSName('transformPoint')
+  @DomName('DOMMatrixReadOnly.transformPoint')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomPoint _transformPoint_1(point) native;
+  @JSName('transformPoint')
+  @DomName('DOMMatrixReadOnly.transformPoint')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomPoint _transformPoint_2() native;
+
   @DomName('DOMMatrixReadOnly.translate')
   @DocsEditable()
   @Experimental() // untriaged
-  DomMatrix translate(num tx, num ty, [num tz]) native;
+  DomMatrix translate([num tx, num ty, num tz]) native;
 }
 // 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
@@ -11463,51 +13424,28 @@
 
   @DomName('DOMPoint.DOMPoint')
   @DocsEditable()
-  factory DomPoint([point_OR_x, num y, num z, num w]) {
-    if ((point_OR_x is Map) && y == null && z == null && w == null) {
-      var point_1 = convertDartToNative_Dictionary(point_OR_x);
-      return DomPoint._create_1(point_1);
+  factory DomPoint([num x, num y, num z, num w]) {
+    if (w != null) {
+      return DomPoint._create_1(x, y, z, w);
     }
-    if (point_OR_x == null && y == null && z == null && w == null) {
-      return DomPoint._create_2();
+    if (z != null) {
+      return DomPoint._create_2(x, y, z);
     }
-    if ((point_OR_x is num || point_OR_x == null) &&
-        y == null &&
-        z == null &&
-        w == null) {
-      return DomPoint._create_3(point_OR_x);
+    if (y != null) {
+      return DomPoint._create_3(x, y);
     }
-    if ((y is num || y == null) &&
-        (point_OR_x is num || point_OR_x == null) &&
-        z == null &&
-        w == null) {
-      return DomPoint._create_4(point_OR_x, y);
+    if (x != null) {
+      return DomPoint._create_4(x);
     }
-    if ((z is num || z == null) &&
-        (y is num || y == null) &&
-        (point_OR_x is num || point_OR_x == null) &&
-        w == null) {
-      return DomPoint._create_5(point_OR_x, y, z);
-    }
-    if ((w is num || w == null) &&
-        (z is num || z == null) &&
-        (y is num || y == null) &&
-        (point_OR_x is num || point_OR_x == null)) {
-      return DomPoint._create_6(point_OR_x, y, z, w);
-    }
-    throw new ArgumentError("Incorrect number or type of arguments");
+    return DomPoint._create_5();
   }
-  static DomPoint _create_1(point_OR_x) =>
-      JS('DomPoint', 'new DOMPoint(#)', point_OR_x);
-  static DomPoint _create_2() => JS('DomPoint', 'new DOMPoint()');
-  static DomPoint _create_3(point_OR_x) =>
-      JS('DomPoint', 'new DOMPoint(#)', point_OR_x);
-  static DomPoint _create_4(point_OR_x, y) =>
-      JS('DomPoint', 'new DOMPoint(#,#)', point_OR_x, y);
-  static DomPoint _create_5(point_OR_x, y, z) =>
-      JS('DomPoint', 'new DOMPoint(#,#,#)', point_OR_x, y, z);
-  static DomPoint _create_6(point_OR_x, y, z, w) =>
-      JS('DomPoint', 'new DOMPoint(#,#,#,#)', point_OR_x, y, z, w);
+  static DomPoint _create_1(x, y, z, w) =>
+      JS('DomPoint', 'new DOMPoint(#,#,#,#)', x, y, z, w);
+  static DomPoint _create_2(x, y, z) =>
+      JS('DomPoint', 'new DOMPoint(#,#,#)', x, y, z);
+  static DomPoint _create_3(x, y) => JS('DomPoint', 'new DOMPoint(#,#)', x, y);
+  static DomPoint _create_4(x) => JS('DomPoint', 'new DOMPoint(#)', x);
+  static DomPoint _create_5() => JS('DomPoint', 'new DOMPoint()');
 
   /// Checks if this type is supported on the current platform.
   static bool get supported =>
@@ -11540,6 +13478,28 @@
   set z(num value) {
     JS("void", "#.z = #", this, value);
   }
+
+  @DomName('DOMPoint.fromPoint')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static DomPoint fromPoint([Map other]) {
+    if (other != null) {
+      var other_1 = convertDartToNative_Dictionary(other);
+      return _fromPoint_1(other_1);
+    }
+    return _fromPoint_2();
+  }
+
+  @JSName('fromPoint')
+  @DomName('DOMPoint.fromPoint')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static DomPoint _fromPoint_1(other) native;
+  @JSName('fromPoint')
+  @DomName('DOMPoint.fromPoint')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static DomPoint _fromPoint_2() native;
 }
 // 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
@@ -11557,11 +13517,31 @@
 
   @DomName('DOMPointReadOnly.DOMPointReadOnly')
   @DocsEditable()
-  factory DomPointReadOnly(num x, num y, num z, num w) {
-    return DomPointReadOnly._create_1(x, y, z, w);
+  factory DomPointReadOnly([num x, num y, num z, num w]) {
+    if (w != null) {
+      return DomPointReadOnly._create_1(x, y, z, w);
+    }
+    if (z != null) {
+      return DomPointReadOnly._create_2(x, y, z);
+    }
+    if (y != null) {
+      return DomPointReadOnly._create_3(x, y);
+    }
+    if (x != null) {
+      return DomPointReadOnly._create_4(x);
+    }
+    return DomPointReadOnly._create_5();
   }
   static DomPointReadOnly _create_1(x, y, z, w) =>
       JS('DomPointReadOnly', 'new DOMPointReadOnly(#,#,#,#)', x, y, z, w);
+  static DomPointReadOnly _create_2(x, y, z) =>
+      JS('DomPointReadOnly', 'new DOMPointReadOnly(#,#,#)', x, y, z);
+  static DomPointReadOnly _create_3(x, y) =>
+      JS('DomPointReadOnly', 'new DOMPointReadOnly(#,#)', x, y);
+  static DomPointReadOnly _create_4(x) =>
+      JS('DomPointReadOnly', 'new DOMPointReadOnly(#)', x);
+  static DomPointReadOnly _create_5() =>
+      JS('DomPointReadOnly', 'new DOMPointReadOnly()');
 
   num get w => JS("num", "#.w", this);
 
@@ -11570,6 +13550,237 @@
   num get y => JS("num", "#.y", this);
 
   num get z => JS("num", "#.z", this);
+
+  @DomName('DOMPointReadOnly.fromPoint')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static DomPointReadOnly fromPoint([Map other]) {
+    if (other != null) {
+      var other_1 = convertDartToNative_Dictionary(other);
+      return _fromPoint_1(other_1);
+    }
+    return _fromPoint_2();
+  }
+
+  @JSName('fromPoint')
+  @DomName('DOMPointReadOnly.fromPoint')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static DomPointReadOnly _fromPoint_1(other) native;
+  @JSName('fromPoint')
+  @DomName('DOMPointReadOnly.fromPoint')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static DomPointReadOnly _fromPoint_2() native;
+
+  @DomName('DOMPointReadOnly.matrixTransform')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomPoint matrixTransform([Map matrix]) {
+    if (matrix != null) {
+      var matrix_1 = convertDartToNative_Dictionary(matrix);
+      return _matrixTransform_1(matrix_1);
+    }
+    return _matrixTransform_2();
+  }
+
+  @JSName('matrixTransform')
+  @DomName('DOMPointReadOnly.matrixTransform')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomPoint _matrixTransform_1(matrix) native;
+  @JSName('matrixTransform')
+  @DomName('DOMPointReadOnly.matrixTransform')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DomPoint _matrixTransform_2() native;
+}
+// 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.
+
+@DocsEditable()
+@DomName('DOMQuad')
+@Experimental() // untriaged
+@Native("DOMQuad")
+class DomQuad extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory DomQuad._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('DOMQuad.DOMQuad')
+  @DocsEditable()
+  factory DomQuad([Map p1, Map p2, Map p3, Map p4]) {
+    if (p4 != null) {
+      var p1_1 = convertDartToNative_Dictionary(p1);
+      var p2_2 = convertDartToNative_Dictionary(p2);
+      var p3_3 = convertDartToNative_Dictionary(p3);
+      var p4_4 = convertDartToNative_Dictionary(p4);
+      return DomQuad._create_1(p1_1, p2_2, p3_3, p4_4);
+    }
+    if (p3 != null) {
+      var p1_1 = convertDartToNative_Dictionary(p1);
+      var p2_2 = convertDartToNative_Dictionary(p2);
+      var p3_3 = convertDartToNative_Dictionary(p3);
+      return DomQuad._create_2(p1_1, p2_2, p3_3);
+    }
+    if (p2 != null) {
+      var p1_1 = convertDartToNative_Dictionary(p1);
+      var p2_2 = convertDartToNative_Dictionary(p2);
+      return DomQuad._create_3(p1_1, p2_2);
+    }
+    if (p1 != null) {
+      var p1_1 = convertDartToNative_Dictionary(p1);
+      return DomQuad._create_4(p1_1);
+    }
+    return DomQuad._create_5();
+  }
+  static DomQuad _create_1(p1, p2, p3, p4) =>
+      JS('DomQuad', 'new DOMQuad(#,#,#,#)', p1, p2, p3, p4);
+  static DomQuad _create_2(p1, p2, p3) =>
+      JS('DomQuad', 'new DOMQuad(#,#,#)', p1, p2, p3);
+  static DomQuad _create_3(p1, p2) => JS('DomQuad', 'new DOMQuad(#,#)', p1, p2);
+  static DomQuad _create_4(p1) => JS('DomQuad', 'new DOMQuad(#)', p1);
+  static DomQuad _create_5() => JS('DomQuad', 'new DOMQuad()');
+
+  @DomName('DOMQuad.p1')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final DomPoint p1;
+
+  @DomName('DOMQuad.p2')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final DomPoint p2;
+
+  @DomName('DOMQuad.p3')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final DomPoint p3;
+
+  @DomName('DOMQuad.p4')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final DomPoint p4;
+
+  @DomName('DOMQuad.fromQuad')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static DomQuad fromQuad([Map other]) {
+    if (other != null) {
+      var other_1 = convertDartToNative_Dictionary(other);
+      return _fromQuad_1(other_1);
+    }
+    return _fromQuad_2();
+  }
+
+  @JSName('fromQuad')
+  @DomName('DOMQuad.fromQuad')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static DomQuad _fromQuad_1(other) native;
+  @JSName('fromQuad')
+  @DomName('DOMQuad.fromQuad')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static DomQuad _fromQuad_2() native;
+
+  @DomName('DOMQuad.fromRect')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static DomQuad fromRect([Map other]) {
+    if (other != null) {
+      var other_1 = convertDartToNative_Dictionary(other);
+      return _fromRect_1(other_1);
+    }
+    return _fromRect_2();
+  }
+
+  @JSName('fromRect')
+  @DomName('DOMQuad.fromRect')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static DomQuad _fromRect_1(other) native;
+  @JSName('fromRect')
+  @DomName('DOMQuad.fromRect')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static DomQuad _fromRect_2() native;
+
+  @DomName('DOMQuad.getBounds')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Rectangle getBounds() native;
+}
+// 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.
+
+@DocsEditable()
+@DomName('DOMRectList')
+@Experimental() // untriaged
+@Native("ClientRectList,DOMRectList")
+class DomRectList extends Interceptor
+    with ListMixin<Rectangle>, ImmutableListMixin<Rectangle>
+    implements List<Rectangle>, JavaScriptIndexingBehavior<Rectangle> {
+  // To suppress missing implicit constructor warnings.
+  factory DomRectList._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('DOMRectList.length')
+  @DocsEditable()
+  @Experimental() // untriaged
+  int get length => JS("int", "#.length", this);
+
+  Rectangle operator [](int index) {
+    if (JS("bool", "# >>> 0 !== # || # >= #", index, index, index, length))
+      throw new RangeError.index(index, this);
+    return JS("Rectangle", "#[#]", this, index);
+  }
+
+  void operator []=(int index, Rectangle value) {
+    throw new UnsupportedError("Cannot assign element of immutable List.");
+  }
+  // -- start List<Rectangle> mixins.
+  // Rectangle is the element type.
+
+  set length(int value) {
+    throw new UnsupportedError("Cannot resize immutable List.");
+  }
+
+  Rectangle get first {
+    if (this.length > 0) {
+      return JS('Rectangle', '#[0]', this);
+    }
+    throw new StateError("No elements");
+  }
+
+  Rectangle get last {
+    int len = this.length;
+    if (len > 0) {
+      return JS('Rectangle', '#[#]', this, len - 1);
+    }
+    throw new StateError("No elements");
+  }
+
+  Rectangle get single {
+    int len = this.length;
+    if (len == 1) {
+      return JS('Rectangle', '#[0]', this);
+    }
+    if (len == 0) throw new StateError("No elements");
+    throw new StateError("More than one element");
+  }
+
+  Rectangle elementAt(int index) => this[index];
+  // -- end List<Rectangle> mixins.
+
+  @DomName('DOMRectList.item')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Rectangle item(int index) native;
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -11676,11 +13887,31 @@
 
   @DomName('DOMRectReadOnly.DOMRectReadOnly')
   @DocsEditable()
-  factory DomRectReadOnly(num x, num y, num width, num height) {
-    return DomRectReadOnly._create_1(x, y, width, height);
+  factory DomRectReadOnly([num x, num y, num width, num height]) {
+    if (height != null) {
+      return DomRectReadOnly._create_1(x, y, width, height);
+    }
+    if (width != null) {
+      return DomRectReadOnly._create_2(x, y, width);
+    }
+    if (y != null) {
+      return DomRectReadOnly._create_3(x, y);
+    }
+    if (x != null) {
+      return DomRectReadOnly._create_4(x);
+    }
+    return DomRectReadOnly._create_5();
   }
   static DomRectReadOnly _create_1(x, y, width, height) => JS(
       'DomRectReadOnly', 'new DOMRectReadOnly(#,#,#,#)', x, y, width, height);
+  static DomRectReadOnly _create_2(x, y, width) =>
+      JS('DomRectReadOnly', 'new DOMRectReadOnly(#,#,#)', x, y, width);
+  static DomRectReadOnly _create_3(x, y) =>
+      JS('DomRectReadOnly', 'new DOMRectReadOnly(#,#)', x, y);
+  static DomRectReadOnly _create_4(x) =>
+      JS('DomRectReadOnly', 'new DOMRectReadOnly(#)', x);
+  static DomRectReadOnly _create_5() =>
+      JS('DomRectReadOnly', 'new DOMRectReadOnly()');
 
   num get bottom => JS("num", "#.bottom", this);
 
@@ -11697,6 +13928,28 @@
   num get x => JS("num", "#.x", this);
 
   num get y => JS("num", "#.y", this);
+
+  @DomName('DOMRectReadOnly.fromRect')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static DomRectReadOnly fromRect([Map other]) {
+    if (other != null) {
+      var other_1 = convertDartToNative_Dictionary(other);
+      return _fromRect_1(other_1);
+    }
+    return _fromRect_2();
+  }
+
+  @JSName('fromRect')
+  @DomName('DOMRectReadOnly.fromRect')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static DomRectReadOnly _fromRect_1(other) native;
+  @JSName('fromRect')
+  @DomName('DOMRectReadOnly.fromRect')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static DomRectReadOnly _fromRect_2() native;
 }
 
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -11761,11 +14014,6 @@
   String elementAt(int index) => this[index];
   // -- end List<String> mixins.
 
-  @DomName('DOMStringList.__getter__')
-  @DocsEditable()
-  @Experimental() // untriaged
-  String __getter__(int index) native;
-
   @DomName('DOMStringList.item')
   @DocsEditable()
   String item(int index) native;
@@ -11785,15 +14033,11 @@
 
   @DomName('DOMStringMap.__delete__')
   @DocsEditable()
-  void __delete__(index_OR_name) native;
-
-  @DomName('DOMStringMap.__getter__')
-  @DocsEditable()
-  String __getter__(int index) native;
+  void __delete__(String name) native;
 
   @DomName('DOMStringMap.__setter__')
   @DocsEditable()
-  void __setter__(index_OR_name, String value) native;
+  void __setter__(String name, String value) native;
 
   @DomName('DOMStringMap.item')
   @DocsEditable()
@@ -11840,6 +14084,11 @@
   @Experimental() // untriaged
   void remove(String tokens) native;
 
+  @DomName('DOMTokenList.replace')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void replace(String token, String newToken) native;
+
   @DomName('DOMTokenList.supports')
   @DocsEditable()
   @Experimental() // untriaged
@@ -11853,20 +14102,6 @@
 // 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.
 
-@DocsEditable()
-@DomName('EffectModel')
-@Experimental() // untriaged
-@Native("EffectModel")
-class EffectModel extends Interceptor {
-  // To suppress missing implicit constructor warnings.
-  factory EffectModel._() {
-    throw new UnsupportedError("Not supported");
-  }
-}
-// 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.
-
 class _ChildrenElementList extends ListBase<Element>
     implements NodeListWrapper {
   // Raw Element.
@@ -12581,6 +14816,11 @@
   // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html
   @Experimental()
   ElementStream<Event> get onFullscreenError;
+
+  @DomName('Element.onwheel')
+  @DocsEditable()
+  @Experimental() // untriaged
+  ElementStream<WheelEvent> get onWheel;
 }
 
 // Wrapper over an immutable NodeList to make it implement ElementList.
@@ -13169,6 +15409,12 @@
   @Experimental()
   ElementStream<Event> get onFullscreenError =>
       Element.fullscreenErrorEvent._forElementList(this);
+
+  @DomName('Element.onwheel')
+  @DocsEditable()
+  @Experimental() // untriaged
+  ElementStream<WheelEvent> get onWheel =>
+      Element.wheelEvent._forElementList(this);
 }
 
 @DocsEditable()
@@ -13638,6 +15884,24 @@
   @deprecated
   void enteredView() {}
 
+  @DomName('Element.getClientRects')
+  @DocsEditable()
+  @Returns('DomRectList|Null')
+  @Creates('DomRectList')
+  List<Rectangle> getClientRects() {
+    var value = _getClientRects();
+
+    // If no prototype we need one for the world to hookup to the proper Dart class.
+    var jsProto = JS('', '#.prototype', value);
+    if (jsProto == null) {
+      JS('', '#.prototype = Object.create(null)', value);
+    }
+
+    applyExtension('DOMRectList', value);
+
+    return value;
+  }
+
   /** *Deprecated*: override [detached] instead. */
   @Experimental()
   @deprecated
@@ -15120,15 +17384,16 @@
   static const EventStreamProvider<Event> fullscreenErrorEvent =
       const EventStreamProvider<Event>('webkitfullscreenerror');
 
+  @DomName('Element.wheelEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<WheelEvent> wheelEvent =
+      const EventStreamProvider<WheelEvent>('wheel');
+
   @DomName('Element.contentEditable')
   @DocsEditable()
   String contentEditable;
 
-  @DomName('Element.contextMenu')
-  @DocsEditable()
-  @Experimental() // untriaged
-  MenuElement contextMenu;
-
   @DomName('Element.dir')
   @DocsEditable()
   String dir;
@@ -15163,6 +17428,16 @@
   @DocsEditable()
   bool hidden;
 
+  @DomName('Element.inert')
+  @DocsEditable()
+  @Experimental() // untriaged
+  bool inert;
+
+  @DomName('Element.inputMode')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String inputMode;
+
   // Using property as subclass shadows.
   bool get isContentEditable => JS("bool", "#.isContentEditable", this);
 
@@ -15204,29 +17479,6 @@
   @Experimental()
   bool translate;
 
-  @JSName('webkitdropzone')
-  /**
-   * A set of space-separated keywords that specify what kind of data this
-   * Element accepts on drop and what to do with that data.
-   *
-   * ## Other resources
-   *
-   * * [Drag and drop
-   *   sample](https://github.com/dart-lang/dart-samples/tree/master/html5/web/dnd/basics)
-   *   based on [the tutorial](http://www.html5rocks.com/en/tutorials/dnd/basics/)
-   *   from HTML5Rocks.
-   * * [Drag and drop
-   *   specification](https://html.spec.whatwg.org/multipage/interaction.html#dnd)
-   *   from WHATWG.
-   */
-  @DomName('Element.webkitdropzone')
-  @DocsEditable()
-  @SupportedBrowser(SupportedBrowser.CHROME)
-  @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  // http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html#the-dropzone-attribute
-  String dropzone;
-
   @DomName('Element.blur')
   @DocsEditable()
   void blur() native;
@@ -15239,6 +17491,11 @@
   @DocsEditable()
   void focus() native;
 
+  @DomName('Element.accessibleNode')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final AccessibleNode accessibleNode;
+
   @DomName('Element.assignedSlot')
   @DocsEditable()
   @Experimental() // untriaged
@@ -15328,6 +17585,11 @@
   @Experimental() // untriaged
   String slot;
 
+  @DomName('Element.styleMap')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final StylePropertyMap styleMap;
+
   @DomName('Element.tagName')
   @DocsEditable()
   final String tagName;
@@ -15367,6 +17629,11 @@
   @Experimental() // untriaged
   String getAttributeNS(String namespaceURI, String localName) native;
 
+  @DomName('Element.getAttributeNames')
+  @DocsEditable()
+  @Experimental() // untriaged
+  List<String> getAttributeNames() native;
+
   /**
    * Returns the smallest bounding rectangle that encompasses this element's
    * padding, scrollbar, and border.
@@ -15381,10 +17648,11 @@
    */
   @DomName('Element.getBoundingClientRect')
   @DocsEditable()
-  @Creates('_ClientRect')
-  @Returns('_ClientRect|Null')
+  @Creates('_DomRect')
+  @Returns('_DomRect|Null')
   Rectangle getBoundingClientRect() native;
 
+  @JSName('getClientRects')
   /**
    * Returns a list of bounding rectangles for each box associated with this
    * element.
@@ -15399,9 +17667,9 @@
    */
   @DomName('Element.getClientRects')
   @DocsEditable()
-  @Returns('_ClientRectList|Null')
-  @Creates('_ClientRectList')
-  List<Rectangle> getClientRects() native;
+  @Returns('DomRectList|Null')
+  @Creates('DomRectList')
+  List<Rectangle> _getClientRects() native;
 
   /**
    * Returns a list of shadow DOM insertion points to which this element is
@@ -15452,6 +17720,16 @@
   @DocsEditable()
   bool _hasAttributeNS(String namespaceURI, String localName) native;
 
+  @DomName('Element.hasPointerCapture')
+  @DocsEditable()
+  @Experimental() // untriaged
+  bool hasPointerCapture(int pointerId) native;
+
+  @DomName('Element.releasePointerCapture')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void releasePointerCapture(int pointerId) native;
+
   @JSName('removeAttribute')
   @DomName('Element.removeAttribute')
   @DocsEditable()
@@ -15547,7 +17825,7 @@
   @JSName('scrollIntoView')
   @DomName('Element.scrollIntoView')
   @DocsEditable()
-  void _scrollIntoView([bool alignWithTop]) native;
+  void _scrollIntoView([Object arg]) native;
 
   @JSName('scrollIntoViewIfNeeded')
   @DomName('Element.scrollIntoViewIfNeeded')
@@ -15612,8 +17890,23 @@
   void setDistributeScroll(ScrollStateCallback scrollStateCallback,
       String nativeScrollBehavior) native;
 
+  @DomName('Element.setPointerCapture')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void setPointerCapture(int pointerId) native;
+
   // From ChildNode
 
+  @DomName('Element.after')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void after(Object nodes) native;
+
+  @DomName('Element.before')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void before(Object nodes) native;
+
   // From NonDocumentTypeChildNode
 
   @DomName('Element.nextElementSibling')
@@ -16154,6 +18447,11 @@
   @Experimental()
   ElementStream<Event> get onFullscreenError =>
       fullscreenErrorEvent.forElement(this);
+
+  @DomName('Element.onwheel')
+  @DocsEditable()
+  @Experimental() // untriaged
+  ElementStream<WheelEvent> get onWheel => wheelEvent.forElement(this);
 }
 
 class _ElementFactoryProvider {
@@ -16243,11 +18541,11 @@
 
   @DomName('HTMLEmbedElement.__getter__')
   @DocsEditable()
-  bool __getter__(index_OR_name) native;
+  Node __getter__(String name) native;
 
   @DomName('HTMLEmbedElement.__setter__')
   @DocsEditable()
-  void __setter__(index_OR_name, Node value) native;
+  void __setter__(String name, Node value) native;
 }
 // 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
@@ -16418,7 +18716,7 @@
 @DomName('ErrorCallback')
 // http://www.w3.org/TR/file-system-api/#the-errorcallback-interface
 @Experimental()
-typedef void _ErrorCallback(FileError error);
+typedef void _ErrorCallback(DomException error);
 // 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.
@@ -16528,6 +18826,12 @@
     throw new StateError('No selector matched for populating matchedTarget.');
   }
 
+  @DomName('Event.path')
+  @DocsEditable()
+  @Experimental()
+  List<EventTarget> get path =>
+      JS('bool', '!!#.composedPath', this) ? composedPath() : [];
+
   @DomName('Event.Event')
   @DocsEditable()
   factory Event._(String type, [Map eventInitDict]) {
@@ -16586,6 +18890,11 @@
   @DocsEditable()
   final bool cancelable;
 
+  @DomName('Event.composed')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final bool composed;
+
   @DomName('Event.currentTarget')
   @DocsEditable()
   EventTarget get currentTarget =>
@@ -16610,26 +18919,6 @@
   @Experimental() // untriaged
   final bool isTrusted;
 
-  /**
-   * This event's path, taking into account shadow DOM.
-   *
-   * ## Other resources
-   *
-   * * [Shadow DOM extensions to
-   *   Event](http://w3c.github.io/webcomponents/spec/shadow/#extensions-to-event)
-   *   from W3C.
-   */
-  @DomName('Event.path')
-  @DocsEditable()
-  // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#extensions-to-event
-  @Experimental()
-  final List<EventTarget> path;
-
-  @DomName('Event.scoped')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final bool scoped;
-
   @DomName('Event.target')
   @DocsEditable()
   EventTarget get target => _convertNativeToDart_EventTarget(this._get_target);
@@ -16642,21 +18931,21 @@
 
   @DomName('Event.timeStamp')
   @DocsEditable()
-  final double timeStamp;
+  final num timeStamp;
 
   @DomName('Event.type')
   @DocsEditable()
   final String type;
 
-  @DomName('Event.deepPath')
+  @DomName('Event.composedPath')
   @DocsEditable()
   @Experimental() // untriaged
-  List<EventTarget> deepPath() native;
+  List<EventTarget> composedPath() native;
 
   @JSName('initEvent')
   @DomName('Event.initEvent')
   @DocsEditable()
-  void _initEvent(String type, bool bubbles, bool cancelable) native;
+  void _initEvent(String type, [bool bubbles, bool cancelable]) native;
 
   @DomName('Event.preventDefault')
   @DocsEditable()
@@ -17005,10 +19294,67 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('External')
+@Experimental() // untriaged
+@Native("External")
+class External extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory External._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('External.AddSearchProvider')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void AddSearchProvider() native;
+
+  @DomName('External.IsSearchProviderInstalled')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void IsSearchProviderInstalled() native;
+}
+// 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.
+
+@DocsEditable()
+@DomName('FaceDetector')
+@Experimental() // untriaged
+@Native("FaceDetector")
+class FaceDetector extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory FaceDetector._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('FaceDetector.FaceDetector')
+  @DocsEditable()
+  factory FaceDetector([Map faceDetectorOptions]) {
+    if (faceDetectorOptions != null) {
+      var faceDetectorOptions_1 =
+          convertDartToNative_Dictionary(faceDetectorOptions);
+      return FaceDetector._create_1(faceDetectorOptions_1);
+    }
+    return FaceDetector._create_2();
+  }
+  static FaceDetector _create_1(faceDetectorOptions) =>
+      JS('FaceDetector', 'new FaceDetector(#)', faceDetectorOptions);
+  static FaceDetector _create_2() => JS('FaceDetector', 'new FaceDetector()');
+
+  @DomName('FaceDetector.detect')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future detect(/*ImageBitmapSource*/ image) native;
+}
+// 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.
+
+@DocsEditable()
 @DomName('FederatedCredential')
 @Experimental() // untriaged
 @Native("FederatedCredential")
-class FederatedCredential extends Credential {
+class FederatedCredential extends Credential implements CredentialUserData {
   // To suppress missing implicit constructor warnings.
   factory FederatedCredential._() {
     throw new UnsupportedError("Not supported");
@@ -17032,6 +19378,19 @@
   @DocsEditable()
   @Experimental() // untriaged
   final String provider;
+
+  // From CredentialUserData
+
+  @JSName('iconURL')
+  @DomName('FederatedCredential.iconURL')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String iconUrl;
+
+  @DomName('FederatedCredential.name')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String name;
 }
 // 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
@@ -17066,6 +19425,11 @@
   @Experimental() // untriaged
   final bool isReload;
 
+  @DomName('FetchEvent.preloadResponse')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Future preloadResponse;
+
   @DomName('FetchEvent.request')
   @DocsEditable()
   @Experimental() // untriaged
@@ -17110,7 +19474,9 @@
 
   @DomName('HTMLFieldSetElement.elements')
   @DocsEditable()
-  final HtmlFormControlsCollection elements;
+  @Returns('HtmlCollection|Null')
+  @Creates('HtmlCollection')
+  final List<Node> elements;
 
   @DomName('HTMLFieldSetElement.form')
   @DocsEditable()
@@ -17274,73 +19640,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('FileError')
-// http://dev.w3.org/2009/dap/file-system/pub/FileSystem/
-@Experimental()
-@Native("FileError")
-class FileError extends DomError {
-  // To suppress missing implicit constructor warnings.
-  factory FileError._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('FileError.ABORT_ERR')
-  @DocsEditable()
-  static const int ABORT_ERR = 3;
-
-  @DomName('FileError.ENCODING_ERR')
-  @DocsEditable()
-  static const int ENCODING_ERR = 5;
-
-  @DomName('FileError.INVALID_MODIFICATION_ERR')
-  @DocsEditable()
-  static const int INVALID_MODIFICATION_ERR = 9;
-
-  @DomName('FileError.INVALID_STATE_ERR')
-  @DocsEditable()
-  static const int INVALID_STATE_ERR = 7;
-
-  @DomName('FileError.NOT_FOUND_ERR')
-  @DocsEditable()
-  static const int NOT_FOUND_ERR = 1;
-
-  @DomName('FileError.NOT_READABLE_ERR')
-  @DocsEditable()
-  static const int NOT_READABLE_ERR = 4;
-
-  @DomName('FileError.NO_MODIFICATION_ALLOWED_ERR')
-  @DocsEditable()
-  static const int NO_MODIFICATION_ALLOWED_ERR = 6;
-
-  @DomName('FileError.PATH_EXISTS_ERR')
-  @DocsEditable()
-  static const int PATH_EXISTS_ERR = 12;
-
-  @DomName('FileError.QUOTA_EXCEEDED_ERR')
-  @DocsEditable()
-  static const int QUOTA_EXCEEDED_ERR = 10;
-
-  @DomName('FileError.SECURITY_ERR')
-  @DocsEditable()
-  static const int SECURITY_ERR = 2;
-
-  @DomName('FileError.SYNTAX_ERR')
-  @DocsEditable()
-  static const int SYNTAX_ERR = 8;
-
-  @DomName('FileError.TYPE_MISMATCH_ERR')
-  @DocsEditable()
-  static const int TYPE_MISMATCH_ERR = 11;
-
-  @DomName('FileError.code')
-  @DocsEditable()
-  final int code;
-}
-// 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.
-
-@DocsEditable()
 @DomName('FileList')
 @Native("FileList")
 class FileList extends Interceptor
@@ -17444,8 +19743,8 @@
    */
   @DomName('FileReader.errorEvent')
   @DocsEditable()
-  static const EventStreamProvider<Event> errorEvent =
-      const EventStreamProvider<Event>('error');
+  static const EventStreamProvider<ProgressEvent> errorEvent =
+      const EventStreamProvider<ProgressEvent>('error');
 
   /**
    * Static factory designed to expose `load` events to event
@@ -17512,7 +19811,7 @@
 
   @DomName('FileReader.error')
   @DocsEditable()
-  final FileError error;
+  final DomException error;
 
   @DomName('FileReader.readyState')
   @DocsEditable()
@@ -17543,7 +19842,7 @@
   /// Stream of `error` events handled by this [FileReader].
   @DomName('FileReader.onerror')
   @DocsEditable()
-  Stream<Event> get onError => errorEvent.forTarget(this);
+  Stream<ProgressEvent> get onError => errorEvent.forTarget(this);
 
   /// Stream of `load` events handled by this [FileReader].
   @DomName('FileReader.onload')
@@ -17570,25 +19869,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('Stream')
-@Experimental() // untriaged
-@Native("Stream")
-class FileStream extends Interceptor {
-  // To suppress missing implicit constructor warnings.
-  factory FileStream._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('Stream.type')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final String type;
-}
-// 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.
-
-@DocsEditable()
 @DomName('DOMFileSystem')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @Experimental()
@@ -17716,7 +19996,7 @@
 
   @DomName('FileWriter.error')
   @DocsEditable()
-  final FileError error;
+  final DomException error;
 
   @DomName('FileWriter.length')
   @DocsEditable()
@@ -17851,6 +20131,11 @@
   static FontFace _create_2(family, source) =>
       JS('FontFace', 'new FontFace(#,#)', family, source);
 
+  @DomName('FontFace.display')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String display;
+
   @DomName('FontFace.family')
   @DocsEditable()
   @Experimental() // untriaged
@@ -17915,10 +20200,23 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('FontFaceSet.size')
+  @DomName('FontFaceSet.loadingEvent')
   @DocsEditable()
   @Experimental() // untriaged
-  final int size;
+  static const EventStreamProvider<FontFaceSetLoadEvent> loadingEvent =
+      const EventStreamProvider<FontFaceSetLoadEvent>('loading');
+
+  @DomName('FontFaceSet.loadingdoneEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<FontFaceSetLoadEvent> loadingDoneEvent =
+      const EventStreamProvider<FontFaceSetLoadEvent>('loadingdone');
+
+  @DomName('FontFaceSet.loadingerrorEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<FontFaceSetLoadEvent> loadingErrorEvent =
+      const EventStreamProvider<FontFaceSetLoadEvent>('loadingerror');
 
   @DomName('FontFaceSet.status')
   @DocsEditable()
@@ -17954,6 +20252,23 @@
   @DocsEditable()
   @Experimental() // untriaged
   bool has(FontFace arg) native;
+
+  @DomName('FontFaceSet.onloading')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<FontFaceSetLoadEvent> get onLoading => loadingEvent.forTarget(this);
+
+  @DomName('FontFaceSet.onloadingdone')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<FontFaceSetLoadEvent> get onLoadingDone =>
+      loadingDoneEvent.forTarget(this);
+
+  @DomName('FontFaceSet.onloadingerror')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<FontFaceSetLoadEvent> get onLoadingError =>
+      loadingErrorEvent.forTarget(this);
 }
 // 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
@@ -17969,6 +20284,23 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('FontFaceSetLoadEvent.FontFaceSetLoadEvent')
+  @DocsEditable()
+  factory FontFaceSetLoadEvent(String type, [Map eventInitDict]) {
+    if (eventInitDict != null) {
+      var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
+      return FontFaceSetLoadEvent._create_1(type, eventInitDict_1);
+    }
+    return FontFaceSetLoadEvent._create_2(type);
+  }
+  static FontFaceSetLoadEvent _create_1(type, eventInitDict) => JS(
+      'FontFaceSetLoadEvent',
+      'new FontFaceSetLoadEvent(#,#)',
+      type,
+      eventInitDict);
+  static FontFaceSetLoadEvent _create_2(type) =>
+      JS('FontFaceSetLoadEvent', 'new FontFaceSetLoadEvent(#)', type);
+
   @DomName('FontFaceSetLoadEvent.fontfaces')
   @DocsEditable()
   @Experimental() // untriaged
@@ -17979,6 +20311,63 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('FontFaceSource')
+@Experimental() // untriaged
+@Native("FontFaceSource")
+class FontFaceSource extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory FontFaceSource._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('FontFaceSource.fonts')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final FontFaceSet fonts;
+}
+// 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.
+
+@DocsEditable()
+@DomName('ForeignFetchEvent')
+@Experimental() // untriaged
+@Native("ForeignFetchEvent")
+class ForeignFetchEvent extends ExtendableEvent {
+  // To suppress missing implicit constructor warnings.
+  factory ForeignFetchEvent._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('ForeignFetchEvent.ForeignFetchEvent')
+  @DocsEditable()
+  factory ForeignFetchEvent(String type, Map eventInitDict) {
+    var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
+    return ForeignFetchEvent._create_1(type, eventInitDict_1);
+  }
+  static ForeignFetchEvent _create_1(type, eventInitDict) => JS(
+      'ForeignFetchEvent', 'new ForeignFetchEvent(#,#)', type, eventInitDict);
+
+  @DomName('ForeignFetchEvent.origin')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String origin;
+
+  @DomName('ForeignFetchEvent.request')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final _Request request;
+
+  @DomName('ForeignFetchEvent.respondWith')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void respondWith(Future r) native;
+}
+// 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.
+
+@DocsEditable()
 @DomName('FormData')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
@@ -18164,6 +20553,15 @@
 // 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.
 
+// WARNING: Do not edit - generated code.
+
+@DomName('FunctionStringCallback')
+@Experimental() // untriaged
+typedef void FunctionStringCallback(String data);
+// 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.
+
 @DocsEditable()
 @DomName('Gamepad')
 // https://dvcs.w3.org/hg/gamepad/raw-file/default/gamepad.html#gamepad-interface
@@ -18190,6 +20588,16 @@
   @Experimental() // untriaged
   final bool connected;
 
+  @DomName('Gamepad.displayId')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final int displayId;
+
+  @DomName('Gamepad.hand')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String hand;
+
   @DomName('Gamepad.id')
   @DocsEditable()
   final String id;
@@ -18203,6 +20611,11 @@
   @Experimental() // untriaged
   final String mapping;
 
+  @DomName('Gamepad.pose')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final GamepadPose pose;
+
   @DomName('Gamepad.timestamp')
   @DocsEditable()
   final int timestamp;
@@ -18226,10 +20639,15 @@
   @Experimental() // untriaged
   final bool pressed;
 
+  @DomName('GamepadButton.touched')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final bool touched;
+
   @DomName('GamepadButton.value')
   @DocsEditable()
   @Experimental() // untriaged
-  final double value;
+  final num value;
 }
 // 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
@@ -18269,72 +20687,54 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('Geofencing')
+@DomName('GamepadPose')
 @Experimental() // untriaged
-@Native("Geofencing")
-class Geofencing extends Interceptor {
+@Native("GamepadPose")
+class GamepadPose extends Interceptor {
   // To suppress missing implicit constructor warnings.
-  factory Geofencing._() {
+  factory GamepadPose._() {
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Geofencing.getRegisteredRegions')
+  @DomName('GamepadPose.angularAcceleration')
   @DocsEditable()
   @Experimental() // untriaged
-  Future getRegisteredRegions() native;
+  final Float32List angularAcceleration;
 
-  @DomName('Geofencing.registerRegion')
+  @DomName('GamepadPose.angularVelocity')
   @DocsEditable()
   @Experimental() // untriaged
-  Future registerRegion(GeofencingRegion region) native;
+  final Float32List angularVelocity;
 
-  @DomName('Geofencing.unregisterRegion')
+  @DomName('GamepadPose.hasOrientation')
   @DocsEditable()
   @Experimental() // untriaged
-  Future unregisterRegion(String regionId) native;
-}
-// 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.
+  final bool hasOrientation;
 
-@DocsEditable()
-@DomName('GeofencingEvent')
-@Experimental() // untriaged
-@Native("GeofencingEvent")
-class GeofencingEvent extends Event {
-  // To suppress missing implicit constructor warnings.
-  factory GeofencingEvent._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('GeofencingEvent.id')
+  @DomName('GamepadPose.hasPosition')
   @DocsEditable()
   @Experimental() // untriaged
-  final String id;
+  final bool hasPosition;
 
-  @DomName('GeofencingEvent.region')
+  @DomName('GamepadPose.linearAcceleration')
   @DocsEditable()
   @Experimental() // untriaged
-  final GeofencingRegion region;
-}
-// 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.
+  final Float32List linearAcceleration;
 
-@DocsEditable()
-@DomName('GeofencingRegion')
-@Experimental() // untriaged
-@Native("GeofencingRegion")
-class GeofencingRegion extends Interceptor {
-  // To suppress missing implicit constructor warnings.
-  factory GeofencingRegion._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('GeofencingRegion.id')
+  @DomName('GamepadPose.linearVelocity')
   @DocsEditable()
   @Experimental() // untriaged
-  final String id;
+  final Float32List linearVelocity;
+
+  @DomName('GamepadPose.orientation')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Float32List orientation;
+
+  @DomName('GamepadPose.position')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Float32List position;
 }
 // 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
@@ -18507,21 +20907,23 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('Geoposition')
-@Unstable()
-@Native("Geoposition")
+@DomName('Position')
+@Experimental() // untriaged
+@Native("Position")
 class Geoposition extends Interceptor {
   // To suppress missing implicit constructor warnings.
   factory Geoposition._() {
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Geoposition.coords')
+  @DomName('Position.coords')
   @DocsEditable()
+  @Experimental() // untriaged
   final Coordinates coords;
 
-  @DomName('Geoposition.timestamp')
+  @DomName('Position.timestamp')
   @DocsEditable()
+  @Experimental() // untriaged
   final int timestamp;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -18883,6 +21285,12 @@
   static const EventStreamProvider<Event> waitingEvent =
       const EventStreamProvider<Event>('waiting');
 
+  @DomName('GlobalEventHandlers.wheelEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<WheelEvent> wheelEvent =
+      const EventStreamProvider<WheelEvent>('wheel');
+
   @DomName('GlobalEventHandlers.onabort')
   @DocsEditable()
   @Experimental() // untriaged
@@ -19162,6 +21570,53 @@
   @DocsEditable()
   @Experimental() // untriaged
   Stream<Event> get onWaiting => waitingEvent.forTarget(this);
+
+  @DomName('GlobalEventHandlers.onwheel')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<WheelEvent> get onWheel => wheelEvent.forTarget(this);
+}
+// 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.
+
+@DocsEditable()
+@DomName('Gyroscope')
+@Experimental() // untriaged
+@Native("Gyroscope")
+class Gyroscope extends Sensor {
+  // To suppress missing implicit constructor warnings.
+  factory Gyroscope._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('Gyroscope.Gyroscope')
+  @DocsEditable()
+  factory Gyroscope([Map sensorOptions]) {
+    if (sensorOptions != null) {
+      var sensorOptions_1 = convertDartToNative_Dictionary(sensorOptions);
+      return Gyroscope._create_1(sensorOptions_1);
+    }
+    return Gyroscope._create_2();
+  }
+  static Gyroscope _create_1(sensorOptions) =>
+      JS('Gyroscope', 'new Gyroscope(#)', sensorOptions);
+  static Gyroscope _create_2() => JS('Gyroscope', 'new Gyroscope()');
+
+  @DomName('Gyroscope.x')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num x;
+
+  @DomName('Gyroscope.y')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num y;
+
+  @DomName('Gyroscope.z')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num z;
 }
 // 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
@@ -19293,26 +21748,14 @@
 
   @DomName('Headers.Headers')
   @DocsEditable()
-  factory Headers([input]) {
-    if (input == null) {
-      return Headers._create_1();
+  factory Headers([Object init]) {
+    if (init != null) {
+      return Headers._create_1(init);
     }
-    if ((input is Headers)) {
-      return Headers._create_2(input);
-    }
-    if ((input is Map)) {
-      var input_1 = convertDartToNative_Dictionary(input);
-      return Headers._create_3(input_1);
-    }
-    if ((input is List<Object>)) {
-      return Headers._create_4(input);
-    }
-    throw new ArgumentError("Incorrect number or type of arguments");
+    return Headers._create_2();
   }
-  static Headers _create_1() => JS('Headers', 'new Headers()');
-  static Headers _create_2(input) => JS('Headers', 'new Headers(#)', input);
-  static Headers _create_3(input) => JS('Headers', 'new Headers(#)', input);
-  static Headers _create_4(input) => JS('Headers', 'new Headers(#)', input);
+  static Headers _create_1(init) => JS('Headers', 'new Headers(#)', init);
+  static Headers _create_2() => JS('Headers', 'new Headers()');
 }
 // 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
@@ -19482,30 +21925,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('HMDVRDevice')
-@Experimental() // untriaged
-@Native("HMDVRDevice")
-class HmdvrDevice extends VRDevice {
-  // To suppress missing implicit constructor warnings.
-  factory HmdvrDevice._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('HMDVRDevice.getEyeParameters')
-  @DocsEditable()
-  @Experimental() // untriaged
-  VREyeParameters getEyeParameters(String whichEye) native;
-
-  @DomName('HMDVRDevice.setFieldOfView')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void setFieldOfView([VRFieldOfView leftFov, VRFieldOfView rightFov]) native;
-}
-// 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.
-
-@DocsEditable()
 @DomName('HTMLCollection')
 @Native("HTMLCollection")
 class HtmlCollection extends Interceptor
@@ -19733,10 +22152,8 @@
    * `<input is="x-bar"></input>`
    *
    */
-  void registerElement(String tag, Type customElementClass,
-      {String extendsTag}) {
-    _registerCustomElement(
-        JS('', 'window'), this, tag, customElementClass, extendsTag);
+  Function registerElement2(String tag, [Map options]) {
+    return _registerCustomElement(JS('', 'window'), this, tag, options);
   }
 
   /** *Deprecated*: use [registerElement] instead. */
@@ -19848,6 +22265,75 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('HTMLHyperlinkElementUtils')
+@Experimental() // untriaged
+@Native("HTMLHyperlinkElementUtils")
+class HtmlHyperlinkElementUtils extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory HtmlHyperlinkElementUtils._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('HTMLHyperlinkElementUtils.hash')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String hash;
+
+  @DomName('HTMLHyperlinkElementUtils.host')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String host;
+
+  @DomName('HTMLHyperlinkElementUtils.hostname')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String hostname;
+
+  @DomName('HTMLHyperlinkElementUtils.href')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String href;
+
+  @DomName('HTMLHyperlinkElementUtils.origin')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String origin;
+
+  @DomName('HTMLHyperlinkElementUtils.password')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String password;
+
+  @DomName('HTMLHyperlinkElementUtils.pathname')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String pathname;
+
+  @DomName('HTMLHyperlinkElementUtils.port')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String port;
+
+  @DomName('HTMLHyperlinkElementUtils.protocol')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String protocol;
+
+  @DomName('HTMLHyperlinkElementUtils.search')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String search;
+
+  @DomName('HTMLHyperlinkElementUtils.username')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String username;
+}
+// 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.
+
+@DocsEditable()
 @DomName('HTMLOptionsCollection')
 @Native("HTMLOptionsCollection")
 class HtmlOptionsCollection extends HtmlCollection {
@@ -19860,7 +22346,7 @@
   @DomName('HTMLOptionsCollection.item')
   @DocsEditable()
   @Experimental() // untriaged
-  Node _item(int index) native;
+  Element _item(int index) native;
 }
 // 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
@@ -20278,8 +22764,8 @@
    */
   @DomName('XMLHttpRequest.readystatechangeEvent')
   @DocsEditable()
-  static const EventStreamProvider<ProgressEvent> readyStateChangeEvent =
-      const EventStreamProvider<ProgressEvent>('readystatechange');
+  static const EventStreamProvider<Event> readyStateChangeEvent =
+      const EventStreamProvider<Event>('readystatechange');
 
   /**
    * General constructor for any type of request (GET, POST, etc).
@@ -20585,8 +23071,7 @@
    */
   @DomName('XMLHttpRequest.onreadystatechange')
   @DocsEditable()
-  Stream<ProgressEvent> get onReadyStateChange =>
-      readyStateChangeEvent.forTarget(this);
+  Stream<Event> get onReadyStateChange => readyStateChangeEvent.forTarget(this);
 }
 // 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
@@ -20778,11 +23263,21 @@
    */
   IFrameElement.created() : super.created();
 
+  @DomName('HTMLIFrameElement.allow')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String allow;
+
   @DomName('HTMLIFrameElement.allowFullscreen')
   @DocsEditable()
   @Experimental() // untriaged
   bool allowFullscreen;
 
+  @DomName('HTMLIFrameElement.allowPaymentRequest')
+  @DocsEditable()
+  @Experimental() // untriaged
+  bool allowPaymentRequest;
+
   @DomName('HTMLIFrameElement.contentWindow')
   @DocsEditable()
   WindowBase get contentWindow =>
@@ -20794,6 +23289,11 @@
   @Returns('Window|=Object')
   final dynamic _get_contentWindow;
 
+  @DomName('HTMLIFrameElement.csp')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String csp;
+
   @DomName('HTMLIFrameElement.height')
   @DocsEditable()
   String height;
@@ -20802,10 +23302,10 @@
   @DocsEditable()
   String name;
 
-  @DomName('HTMLIFrameElement.referrerpolicy')
+  @DomName('HTMLIFrameElement.referrerPolicy')
   @DocsEditable()
   @Experimental() // untriaged
-  String referrerpolicy;
+  String referrerPolicy;
 
   @DomName('HTMLIFrameElement.sandbox')
   @DocsEditable()
@@ -20904,10 +23404,88 @@
   @Experimental() // untriaged
   final CanvasElement canvas;
 
-  @DomName('ImageBitmapRenderingContext.transferImageBitmap')
+  @DomName('ImageBitmapRenderingContext.transferFromImageBitmap')
   @DocsEditable()
   @Experimental() // untriaged
-  void transferImageBitmap(ImageBitmap bitmap) native;
+  void transferFromImageBitmap(ImageBitmap bitmap) native;
+}
+// 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.
+
+@DocsEditable()
+@DomName('ImageCapture')
+@Experimental() // untriaged
+@Native("ImageCapture")
+class ImageCapture extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory ImageCapture._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('ImageCapture.ImageCapture')
+  @DocsEditable()
+  factory ImageCapture(MediaStreamTrack track) {
+    return ImageCapture._create_1(track);
+  }
+  static ImageCapture _create_1(track) =>
+      JS('ImageCapture', 'new ImageCapture(#)', track);
+
+  @DomName('ImageCapture.track')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final MediaStreamTrack track;
+
+  @DomName('ImageCapture.getPhotoCapabilities')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future getPhotoCapabilities() native;
+
+  @DomName('ImageCapture.getPhotoSettings')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future getPhotoSettings() native;
+
+  @DomName('ImageCapture.grabFrame')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future grabFrame() native;
+
+  @DomName('ImageCapture.setOptions')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future setOptions(Map photoSettings) {
+    var photoSettings_1 = convertDartToNative_Dictionary(photoSettings);
+    return _setOptions_1(photoSettings_1);
+  }
+
+  @JSName('setOptions')
+  @DomName('ImageCapture.setOptions')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _setOptions_1(photoSettings) native;
+
+  @DomName('ImageCapture.takePhoto')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future takePhoto([Map photoSettings]) {
+    if (photoSettings != null) {
+      var photoSettings_1 = convertDartToNative_Dictionary(photoSettings);
+      return _takePhoto_1(photoSettings_1);
+    }
+    return _takePhoto_2();
+  }
+
+  @JSName('takePhoto')
+  @DomName('ImageCapture.takePhoto')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _takePhoto_1(photoSettings) native;
+  @JSName('takePhoto')
+  @DomName('ImageCapture.takePhoto')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _takePhoto_2() native;
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -20989,6 +23567,11 @@
   @DocsEditable()
   String alt;
 
+  @DomName('HTMLImageElement.async')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String async;
+
   @DomName('HTMLImageElement.complete')
   @DocsEditable()
   final bool complete;
@@ -21018,10 +23601,10 @@
   @DocsEditable()
   final int naturalWidth;
 
-  @DomName('HTMLImageElement.referrerpolicy')
+  @DomName('HTMLImageElement.referrerPolicy')
   @DocsEditable()
   @Experimental() // untriaged
-  String referrerpolicy;
+  String referrerPolicy;
 
   @DomName('HTMLImageElement.sizes')
   @DocsEditable()
@@ -21044,25 +23627,11 @@
   @DomName('HTMLImageElement.width')
   @DocsEditable()
   int width;
-}
-// 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.
 
-@DocsEditable()
-@DomName('InjectedScriptHost')
-@Experimental() // untriaged
-@Native("InjectedScriptHost")
-class InjectedScriptHost extends Interceptor {
-  // To suppress missing implicit constructor warnings.
-  factory InjectedScriptHost._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('InjectedScriptHost.inspect')
+  @DomName('HTMLImageElement.decode')
   @DocsEditable()
   @Experimental() // untriaged
-  void inspect(Object objectId, Object hints) native;
+  Future decode() native;
 }
 // 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
@@ -21174,7 +23743,7 @@
   @DomName('HTMLInputElement.capture')
   @DocsEditable()
   @Experimental() // untriaged
-  bool capture;
+  String capture;
 
   @DomName('HTMLInputElement.checked')
   @DocsEditable()
@@ -21240,11 +23809,6 @@
   @DocsEditable()
   bool indeterminate;
 
-  @DomName('HTMLInputElement.inputMode')
-  @DocsEditable()
-  @Experimental() // untriaged
-  String inputMode;
-
   @DomName('HTMLInputElement.labels')
   @DocsEditable()
   @Returns('NodeList|Null')
@@ -21999,20 +24563,20 @@
   static InstallEvent _create_2(type) =>
       JS('InstallEvent', 'new InstallEvent(#)', type);
 
-  @DomName('InstallEvent.registerForeignFetchScopes')
+  @DomName('InstallEvent.registerForeignFetch')
   @DocsEditable()
   @Experimental() // untriaged
-  void registerForeignFetchScopes(List<String> subScopes, Object origins) {
-    List subScopes_1 = convertDartToNative_StringArray(subScopes);
-    _registerForeignFetchScopes_1(subScopes_1, origins);
+  void registerForeignFetch(Map options) {
+    var options_1 = convertDartToNative_Dictionary(options);
+    _registerForeignFetch_1(options_1);
     return;
   }
 
-  @JSName('registerForeignFetchScopes')
-  @DomName('InstallEvent.registerForeignFetchScopes')
+  @JSName('registerForeignFetch')
+  @DomName('InstallEvent.registerForeignFetch')
   @DocsEditable()
   @Experimental() // untriaged
-  void _registerForeignFetchScopes_1(List subScopes, origins) native;
+  void _registerForeignFetch_1(options) native;
 }
 // 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
@@ -22028,6 +24592,24 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('IntersectionObserver.IntersectionObserver')
+  @DocsEditable()
+  factory IntersectionObserver(IntersectionObserverCallback callback,
+      [Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return IntersectionObserver._create_1(callback, options_1);
+    }
+    return IntersectionObserver._create_2(callback);
+  }
+  static IntersectionObserver _create_1(callback, options) => JS(
+      'IntersectionObserver',
+      'new IntersectionObserver(#,#)',
+      callback,
+      options);
+  static IntersectionObserver _create_2(callback) =>
+      JS('IntersectionObserver', 'new IntersectionObserver(#)', callback);
+
   @DomName('IntersectionObserver.root')
   @DocsEditable()
   @Experimental() // untriaged
@@ -22067,6 +24649,16 @@
 // 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.
 
+// WARNING: Do not edit - generated code.
+
+@DomName('IntersectionObserverCallback')
+@Experimental() // untriaged
+typedef void IntersectionObserverCallback(
+    List<IntersectionObserverEntry> entries, IntersectionObserver observer);
+// 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.
+
 @DocsEditable()
 @DomName('IntersectionObserverEntry')
 @Experimental() // untriaged
@@ -22080,17 +24672,27 @@
   @DomName('IntersectionObserverEntry.boundingClientRect')
   @DocsEditable()
   @Experimental() // untriaged
-  final Rectangle boundingClientRect;
+  final DomRectReadOnly boundingClientRect;
+
+  @DomName('IntersectionObserverEntry.intersectionRatio')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num intersectionRatio;
 
   @DomName('IntersectionObserverEntry.intersectionRect')
   @DocsEditable()
   @Experimental() // untriaged
-  final Rectangle intersectionRect;
+  final DomRectReadOnly intersectionRect;
+
+  @DomName('IntersectionObserverEntry.isIntersecting')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final bool isIntersecting;
 
   @DomName('IntersectionObserverEntry.rootBounds')
   @DocsEditable()
   @Experimental() // untriaged
-  final Rectangle rootBounds;
+  final DomRectReadOnly rootBounds;
 
   @DomName('IntersectionObserverEntry.target')
   @DocsEditable()
@@ -22100,7 +24702,36 @@
   @DomName('IntersectionObserverEntry.time')
   @DocsEditable()
   @Experimental() // untriaged
-  final double time;
+  final num time;
+}
+// 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.
+
+@DocsEditable()
+@DomName('InterventionReport')
+@Experimental() // untriaged
+@Native("InterventionReport")
+class InterventionReport extends ReportBody {
+  // To suppress missing implicit constructor warnings.
+  factory InterventionReport._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('InterventionReport.lineNumber')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final int lineNumber;
+
+  @DomName('InterventionReport.message')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String message;
+
+  @DomName('InterventionReport.sourceFile')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String sourceFile;
 }
 // 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
@@ -22248,6 +24879,11 @@
   @DocsEditable()
   final bool ctrlKey;
 
+  @DomName('KeyboardEvent.isComposing')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final bool isComposing;
+
   @DomName('KeyboardEvent.key')
   @DocsEditable()
   @Experimental() // untriaged
@@ -22259,12 +24895,6 @@
   @Experimental() // untriaged
   final int _keyCode;
 
-  @JSName('keyIdentifier')
-  @DomName('KeyboardEvent.keyIdentifier')
-  @DocsEditable()
-  @Experimental() // nonstandard
-  final String _keyIdentifier;
-
   @DomName('KeyboardEvent.location')
   @DocsEditable()
   @Experimental() // untriaged
@@ -22283,9 +24913,6 @@
   @DocsEditable()
   final bool shiftKey;
 
-  // Use implementation from UIEvent.
-  // final int _which;
-
   @DomName('KeyboardEvent.getModifierState')
   @DocsEditable()
   @Experimental() // untriaged
@@ -22299,7 +24926,7 @@
 @DomName('KeyframeEffect')
 @Experimental() // untriaged
 @Native("KeyframeEffect")
-class KeyframeEffect extends AnimationEffectReadOnly {
+class KeyframeEffect extends KeyframeEffectReadOnly {
   // To suppress missing implicit constructor warnings.
   factory KeyframeEffect._() {
     throw new UnsupportedError("Not supported");
@@ -22307,150 +24934,51 @@
 
   @DomName('KeyframeEffect.KeyframeEffect')
   @DocsEditable()
-  factory KeyframeEffect(Element target, Object effect, [timing]) {
-    if (effect != null &&
-        (target is Element || target == null) &&
-        timing == null) {
-      return KeyframeEffect._create_1(target, effect);
+  factory KeyframeEffect(Element target, Object effect, [Object options]) {
+    if (options != null) {
+      return KeyframeEffect._create_1(target, effect, options);
     }
-    if ((timing is num) &&
-        effect != null &&
-        (target is Element || target == null)) {
-      return KeyframeEffect._create_2(target, effect, timing);
-    }
-    if ((timing is Map) &&
-        effect != null &&
-        (target is Element || target == null)) {
-      var timing_1 = convertDartToNative_Dictionary(timing);
-      return KeyframeEffect._create_3(target, effect, timing_1);
-    }
-    throw new ArgumentError("Incorrect number or type of arguments");
+    return KeyframeEffect._create_2(target, effect);
   }
-  static KeyframeEffect _create_1(target, effect) =>
+  static KeyframeEffect _create_1(target, effect, options) => JS(
+      'KeyframeEffect', 'new KeyframeEffect(#,#,#)', target, effect, options);
+  static KeyframeEffect _create_2(target, effect) =>
       JS('KeyframeEffect', 'new KeyframeEffect(#,#)', target, effect);
-  static KeyframeEffect _create_2(target, effect, timing) =>
-      JS('KeyframeEffect', 'new KeyframeEffect(#,#,#)', target, effect, timing);
-  static KeyframeEffect _create_3(target, effect, timing) =>
-      JS('KeyframeEffect', 'new KeyframeEffect(#,#,#)', target, effect, timing);
 }
 // 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.
 
 @DocsEditable()
-@DomName('HTMLKeygenElement')
-@SupportedBrowser(SupportedBrowser.CHROME)
-@SupportedBrowser(SupportedBrowser.SAFARI)
-@Experimental()
-// http://www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#the-keygen-element
-@Native("HTMLKeygenElement")
-class KeygenElement extends HtmlElement {
-  // To suppress missing implicit constructor warnings.
-  factory KeygenElement._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('HTMLKeygenElement.HTMLKeygenElement')
-  @DocsEditable()
-  factory KeygenElement() => document.createElement("keygen");
-  /**
-   * Constructor instantiated by the DOM when a custom element has been created.
-   *
-   * This can only be called by subclasses from their created constructor.
-   */
-  KeygenElement.created() : super.created();
-
-  /// Checks if this type is supported on the current platform.
-  static bool get supported =>
-      Element.isTagSupported('keygen') &&
-      (new Element.tag('keygen') is KeygenElement);
-
-  @DomName('HTMLKeygenElement.autofocus')
-  @DocsEditable()
-  bool autofocus;
-
-  @DomName('HTMLKeygenElement.challenge')
-  @DocsEditable()
-  String challenge;
-
-  @DomName('HTMLKeygenElement.disabled')
-  @DocsEditable()
-  bool disabled;
-
-  @DomName('HTMLKeygenElement.form')
-  @DocsEditable()
-  final FormElement form;
-
-  @DomName('HTMLKeygenElement.keytype')
-  @DocsEditable()
-  String keytype;
-
-  @DomName('HTMLKeygenElement.labels')
-  @DocsEditable()
-  @Unstable()
-  @Returns('NodeList|Null')
-  @Creates('NodeList')
-  final List<Node> labels;
-
-  @DomName('HTMLKeygenElement.name')
-  @DocsEditable()
-  String name;
-
-  @DomName('HTMLKeygenElement.type')
-  @DocsEditable()
-  final String type;
-
-  @DomName('HTMLKeygenElement.validationMessage')
-  @DocsEditable()
-  final String validationMessage;
-
-  @DomName('HTMLKeygenElement.validity')
-  @DocsEditable()
-  final ValidityState validity;
-
-  @DomName('HTMLKeygenElement.willValidate')
-  @DocsEditable()
-  final bool willValidate;
-
-  @DomName('HTMLKeygenElement.checkValidity')
-  @DocsEditable()
-  bool checkValidity() native;
-
-  @DomName('HTMLKeygenElement.reportValidity')
-  @DocsEditable()
-  @Experimental() // untriaged
-  bool reportValidity() native;
-
-  @DomName('HTMLKeygenElement.setCustomValidity')
-  @DocsEditable()
-  void setCustomValidity(String error) native;
-}
-// 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.
-
-@DocsEditable()
-@DomName('KeywordValue')
+@DomName('KeyframeEffectReadOnly')
 @Experimental() // untriaged
-@Native("KeywordValue")
-class KeywordValue extends StyleValue {
+@Native("KeyframeEffectReadOnly")
+class KeyframeEffectReadOnly extends AnimationEffectReadOnly {
   // To suppress missing implicit constructor warnings.
-  factory KeywordValue._() {
+  factory KeyframeEffectReadOnly._() {
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('KeywordValue.KeywordValue')
+  @DomName('KeyframeEffectReadOnly.KeyframeEffectReadOnly')
   @DocsEditable()
-  factory KeywordValue(String keyword) {
-    return KeywordValue._create_1(keyword);
+  factory KeyframeEffectReadOnly(Element target, Object effect,
+      [Object options]) {
+    if (options != null) {
+      return KeyframeEffectReadOnly._create_1(target, effect, options);
+    }
+    return KeyframeEffectReadOnly._create_2(target, effect);
   }
-  static KeywordValue _create_1(keyword) =>
-      JS('KeywordValue', 'new KeywordValue(#)', keyword);
-
-  @DomName('KeywordValue.keywordValue')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final String keywordValue;
+  static KeyframeEffectReadOnly _create_1(target, effect, options) => JS(
+      'KeyframeEffectReadOnly',
+      'new KeyframeEffectReadOnly(#,#,#)',
+      target,
+      effect,
+      options);
+  static KeyframeEffectReadOnly _create_2(target, effect) => JS(
+      'KeyframeEffectReadOnly',
+      'new KeyframeEffectReadOnly(#,#)',
+      target,
+      effect);
 }
 // 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
@@ -22555,58 +25083,30 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('LengthValue')
+@DomName('LinearAccelerationSensor')
 @Experimental() // untriaged
-@Native("LengthValue")
-class LengthValue extends StyleValue {
+@Native("LinearAccelerationSensor")
+class LinearAccelerationSensor extends Accelerometer {
   // To suppress missing implicit constructor warnings.
-  factory LengthValue._() {
+  factory LinearAccelerationSensor._() {
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('LengthValue.add')
+  @DomName('LinearAccelerationSensor.LinearAccelerationSensor')
   @DocsEditable()
-  @Experimental() // untriaged
-  LengthValue add(LengthValue other) native;
-
-  @DomName('LengthValue.divide')
-  @DocsEditable()
-  @Experimental() // untriaged
-  LengthValue divide(num value) native;
-
-  @DomName('LengthValue.fromDictionary')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static LengthValue fromDictionary(Map dictionary) {
-    var dictionary_1 = convertDartToNative_Dictionary(dictionary);
-    return _fromDictionary_1(dictionary_1);
+  factory LinearAccelerationSensor([Map sensorOptions]) {
+    if (sensorOptions != null) {
+      var sensorOptions_1 = convertDartToNative_Dictionary(sensorOptions);
+      return LinearAccelerationSensor._create_1(sensorOptions_1);
+    }
+    return LinearAccelerationSensor._create_2();
   }
-
-  @JSName('fromDictionary')
-  @DomName('LengthValue.fromDictionary')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static LengthValue _fromDictionary_1(dictionary) native;
-
-  @DomName('LengthValue.fromValue')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static LengthValue fromValue(num value, String type) native;
-
-  @DomName('LengthValue.multiply')
-  @DocsEditable()
-  @Experimental() // untriaged
-  LengthValue multiply(num value) native;
-
-  @DomName('LengthValue.parse')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static LengthValue parse(String cssString) native;
-
-  @DomName('LengthValue.subtract')
-  @DocsEditable()
-  @Experimental() // untriaged
-  LengthValue subtract(LengthValue other) native;
+  static LinearAccelerationSensor _create_1(sensorOptions) => JS(
+      'LinearAccelerationSensor',
+      'new LinearAccelerationSensor(#)',
+      sensorOptions);
+  static LinearAccelerationSensor _create_2() =>
+      JS('LinearAccelerationSensor', 'new LinearAccelerationSensor()');
 }
 // 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
@@ -22672,6 +25172,11 @@
   @DocsEditable()
   String media;
 
+  @DomName('HTMLLinkElement.referrerPolicy')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String referrerPolicy;
+
   @DomName('HTMLLinkElement.rel')
   @DocsEditable()
   String rel;
@@ -22681,6 +25186,11 @@
   @Experimental() // untriaged
   final DomTokenList relList;
 
+  @DomName('HTMLLinkElement.scope')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String scope;
+
   @DomName('HTMLLinkElement.sheet')
   @DocsEditable()
   final StyleSheet sheet;
@@ -22750,6 +25260,11 @@
   @DocsEditable()
   String search;
 
+  @DomName('Location.trustedHref')
+  @DocsEditable()
+  @Experimental() // untriaged
+  TrustedUrl trustedHref;
+
   @DomName('Location.assign')
   @DocsEditable()
   void assign([String url]) native;
@@ -22779,6 +25294,48 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('Magnetometer')
+@Experimental() // untriaged
+@Native("Magnetometer")
+class Magnetometer extends Sensor {
+  // To suppress missing implicit constructor warnings.
+  factory Magnetometer._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('Magnetometer.Magnetometer')
+  @DocsEditable()
+  factory Magnetometer([Map sensorOptions]) {
+    if (sensorOptions != null) {
+      var sensorOptions_1 = convertDartToNative_Dictionary(sensorOptions);
+      return Magnetometer._create_1(sensorOptions_1);
+    }
+    return Magnetometer._create_2();
+  }
+  static Magnetometer _create_1(sensorOptions) =>
+      JS('Magnetometer', 'new Magnetometer(#)', sensorOptions);
+  static Magnetometer _create_2() => JS('Magnetometer', 'new Magnetometer()');
+
+  @DomName('Magnetometer.x')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num x;
+
+  @DomName('Magnetometer.y')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num y;
+
+  @DomName('Magnetometer.z')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num z;
+}
+// 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.
+
+@DocsEditable()
 @DomName('HTMLMapElement')
 @Native("HTMLMapElement")
 class MapElement extends HtmlElement {
@@ -22813,204 +25370,71 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('Matrix')
+@DomName('MediaCapabilities')
 @Experimental() // untriaged
-@Native("Matrix")
-class Matrix extends TransformComponent {
+@Native("MediaCapabilities")
+class MediaCapabilities extends Interceptor {
   // To suppress missing implicit constructor warnings.
-  factory Matrix._() {
+  factory MediaCapabilities._() {
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Matrix.Matrix')
+  @DomName('MediaCapabilities.decodingInfo')
   @DocsEditable()
-  factory Matrix(num a_OR_m11, num b_OR_m12, num c_OR_m13, num d_OR_m14,
-      num e_OR_m21, num f_OR_m22,
-      [num m23,
-      num m24,
-      num m31,
-      num m32,
-      num m33,
-      num m34,
-      num m41,
-      num m42,
-      num m43,
-      num m44]) {
-    if ((f_OR_m22 is num) &&
-        (e_OR_m21 is num) &&
-        (d_OR_m14 is num) &&
-        (c_OR_m13 is num) &&
-        (b_OR_m12 is num) &&
-        (a_OR_m11 is num) &&
-        m23 == null &&
-        m24 == null &&
-        m31 == null &&
-        m32 == null &&
-        m33 == null &&
-        m34 == null &&
-        m41 == null &&
-        m42 == null &&
-        m43 == null &&
-        m44 == null) {
-      return Matrix._create_1(
-          a_OR_m11, b_OR_m12, c_OR_m13, d_OR_m14, e_OR_m21, f_OR_m22);
-    }
-    if ((m44 is num) &&
-        (m43 is num) &&
-        (m42 is num) &&
-        (m41 is num) &&
-        (m34 is num) &&
-        (m33 is num) &&
-        (m32 is num) &&
-        (m31 is num) &&
-        (m24 is num) &&
-        (m23 is num) &&
-        (f_OR_m22 is num) &&
-        (e_OR_m21 is num) &&
-        (d_OR_m14 is num) &&
-        (c_OR_m13 is num) &&
-        (b_OR_m12 is num) &&
-        (a_OR_m11 is num)) {
-      return Matrix._create_2(a_OR_m11, b_OR_m12, c_OR_m13, d_OR_m14, e_OR_m21,
-          f_OR_m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, m44);
-    }
-    throw new ArgumentError("Incorrect number or type of arguments");
+  @Experimental() // untriaged
+  Future decodingInfo(Map configuration) {
+    var configuration_1 = convertDartToNative_Dictionary(configuration);
+    return _decodingInfo_1(configuration_1);
   }
-  static Matrix _create_1(
-          a_OR_m11, b_OR_m12, c_OR_m13, d_OR_m14, e_OR_m21, f_OR_m22) =>
-      JS('Matrix', 'new Matrix(#,#,#,#,#,#)', a_OR_m11, b_OR_m12, c_OR_m13,
-          d_OR_m14, e_OR_m21, f_OR_m22);
-  static Matrix _create_2(a_OR_m11, b_OR_m12, c_OR_m13, d_OR_m14, e_OR_m21,
-          f_OR_m22, m23, m24, m31, m32, m33, m34, m41, m42, m43, m44) =>
-      JS(
-          'Matrix',
-          'new Matrix(#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#)',
-          a_OR_m11,
-          b_OR_m12,
-          c_OR_m13,
-          d_OR_m14,
-          e_OR_m21,
-          f_OR_m22,
-          m23,
-          m24,
-          m31,
-          m32,
-          m33,
-          m34,
-          m41,
-          m42,
-          m43,
-          m44);
 
-  @DomName('Matrix.a')
+  @JSName('decodingInfo')
+  @DomName('MediaCapabilities.decodingInfo')
   @DocsEditable()
   @Experimental() // untriaged
-  final double a;
+  Future _decodingInfo_1(configuration) native;
 
-  @DomName('Matrix.b')
+  @DomName('MediaCapabilities.encodingInfo')
   @DocsEditable()
   @Experimental() // untriaged
-  final double b;
+  Future encodingInfo(Map configuration) {
+    var configuration_1 = convertDartToNative_Dictionary(configuration);
+    return _encodingInfo_1(configuration_1);
+  }
 
-  @DomName('Matrix.c')
+  @JSName('encodingInfo')
+  @DomName('MediaCapabilities.encodingInfo')
   @DocsEditable()
   @Experimental() // untriaged
-  final double c;
+  Future _encodingInfo_1(configuration) native;
+}
+// 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.
 
-  @DomName('Matrix.d')
+@DocsEditable()
+@DomName('MediaCapabilitiesInfo')
+@Experimental() // untriaged
+@Native("MediaCapabilitiesInfo")
+class MediaCapabilitiesInfo extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory MediaCapabilitiesInfo._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('MediaCapabilitiesInfo.powerEfficient')
   @DocsEditable()
   @Experimental() // untriaged
-  final double d;
+  final bool powerEfficient;
 
-  @DomName('Matrix.e')
+  @DomName('MediaCapabilitiesInfo.smooth')
   @DocsEditable()
   @Experimental() // untriaged
-  final double e;
+  final bool smooth;
 
-  @DomName('Matrix.f')
+  @DomName('MediaCapabilitiesInfo.supported')
   @DocsEditable()
   @Experimental() // untriaged
-  final double f;
-
-  @DomName('Matrix.m11')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double m11;
-
-  @DomName('Matrix.m12')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double m12;
-
-  @DomName('Matrix.m13')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double m13;
-
-  @DomName('Matrix.m14')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double m14;
-
-  @DomName('Matrix.m21')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double m21;
-
-  @DomName('Matrix.m22')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double m22;
-
-  @DomName('Matrix.m23')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double m23;
-
-  @DomName('Matrix.m24')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double m24;
-
-  @DomName('Matrix.m31')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double m31;
-
-  @DomName('Matrix.m32')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double m32;
-
-  @DomName('Matrix.m33')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double m33;
-
-  @DomName('Matrix.m34')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double m34;
-
-  @DomName('Matrix.m41')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double m41;
-
-  @DomName('Matrix.m42')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double m42;
-
-  @DomName('Matrix.m43')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double m43;
-
-  @DomName('Matrix.m44')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double m44;
+  final bool supported;
 }
 // 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
@@ -23054,7 +25478,7 @@
 @DomName('MediaDevices')
 @Experimental() // untriaged
 @Native("MediaDevices")
-class MediaDevices extends Interceptor {
+class MediaDevices extends EventTarget {
   // To suppress missing implicit constructor warnings.
   factory MediaDevices._() {
     throw new UnsupportedError("Not supported");
@@ -23065,19 +25489,18 @@
   @Experimental() // untriaged
   Future enumerateDevices() native;
 
-  @DomName('MediaDevices.getUserMedia')
+  @DomName('MediaDevices.getSupportedConstraints')
   @DocsEditable()
   @Experimental() // untriaged
-  Future getUserMedia(Map options) {
-    var options_1 = convertDartToNative_Dictionary(options);
-    return _getUserMedia_1(options_1);
+  Map getSupportedConstraints() {
+    return convertNativeToDart_Dictionary(_getSupportedConstraints_1());
   }
 
-  @JSName('getUserMedia')
-  @DomName('MediaDevices.getUserMedia')
+  @JSName('getSupportedConstraints')
+  @DomName('MediaDevices.getSupportedConstraints')
   @DocsEditable()
   @Experimental() // untriaged
-  Future _getUserMedia_1(options) native;
+  _getSupportedConstraints_1() native;
 }
 // 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
@@ -23138,9 +25561,7 @@
   @DomName('HTMLMediaElement.audioTracks')
   @DocsEditable()
   @Experimental() // untriaged
-  @Returns('AudioTrackList|Null')
-  @Creates('AudioTrackList')
-  final List<AudioTrack> audioTracks;
+  final AudioTrackList audioTracks;
 
   @DomName('HTMLMediaElement.autoplay')
   @DocsEditable()
@@ -23154,6 +25575,11 @@
   @DocsEditable()
   bool controls;
 
+  @DomName('HTMLMediaElement.controlsList')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final DomTokenList controlsList;
+
   @DomName('HTMLMediaElement.crossOrigin')
   @DocsEditable()
   @Experimental() // untriaged
@@ -23182,7 +25608,7 @@
 
   @DomName('HTMLMediaElement.duration')
   @DocsEditable()
-  final double duration;
+  final num duration;
 
   @DomName('HTMLMediaElement.ended')
   @DocsEditable()
@@ -23230,6 +25656,11 @@
   @DocsEditable()
   final int readyState;
 
+  @DomName('HTMLMediaElement.remote')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final RemotePlayback remote;
+
   @DomName('HTMLMediaElement.seekable')
   @DocsEditable()
   final TimeRanges seekable;
@@ -23238,11 +25669,6 @@
   @DocsEditable()
   final bool seeking;
 
-  @DomName('HTMLMediaElement.session')
-  @DocsEditable()
-  @Experimental() // untriaged
-  MediaSession session;
-
   @DomName('HTMLMediaElement.sinkId')
   @DocsEditable()
   @Experimental() // untriaged
@@ -23252,6 +25678,11 @@
   @DocsEditable()
   String src;
 
+  @DomName('HTMLMediaElement.srcObject')
+  @DocsEditable()
+  @Experimental() // untriaged
+  MediaStream srcObject;
+
   @DomName('HTMLMediaElement.textTracks')
   @DocsEditable()
   // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#dom-media-texttracks
@@ -23397,6 +25828,11 @@
   @DomName('MediaError.code')
   @DocsEditable()
   final int code;
+
+  @DomName('MediaError.message')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String message;
 }
 // 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
@@ -23415,20 +25851,15 @@
 
   @DomName('MediaKeyMessageEvent.MediaKeyMessageEvent')
   @DocsEditable()
-  factory MediaKeyMessageEvent(String type, [Map eventInitDict]) {
-    if (eventInitDict != null) {
-      var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
-      return MediaKeyMessageEvent._create_1(type, eventInitDict_1);
-    }
-    return MediaKeyMessageEvent._create_2(type);
+  factory MediaKeyMessageEvent(String type, Map eventInitDict) {
+    var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
+    return MediaKeyMessageEvent._create_1(type, eventInitDict_1);
   }
   static MediaKeyMessageEvent _create_1(type, eventInitDict) => JS(
       'MediaKeyMessageEvent',
       'new MediaKeyMessageEvent(#,#)',
       type,
       eventInitDict);
-  static MediaKeyMessageEvent _create_2(type) =>
-      JS('MediaKeyMessageEvent', 'new MediaKeyMessageEvent(#)', type);
 
   @DomName('MediaKeyMessageEvent.message')
   @DocsEditable()
@@ -23454,6 +25885,12 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('MediaKeySession.messageEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<MessageEvent> messageEvent =
+      const EventStreamProvider<MessageEvent>('message');
+
   @DomName('MediaKeySession.closed')
   @DocsEditable()
   @Experimental() // untriaged
@@ -23462,7 +25899,7 @@
   @DomName('MediaKeySession.expiration')
   @DocsEditable()
   @Experimental() // untriaged
-  final double expiration;
+  final num expiration;
 
   @DomName('MediaKeySession.keyStatuses')
   @DocsEditable()
@@ -23496,6 +25933,11 @@
   @DomName('MediaKeySession.update')
   @DocsEditable()
   Future _update(/*BufferSource*/ response) native;
+
+  @DomName('MediaKeySession.onmessage')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
 }
 // 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
@@ -23515,6 +25957,16 @@
   @DocsEditable()
   @Experimental() // untriaged
   final int size;
+
+  @DomName('MediaKeyStatusMap.get')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Object get(/*BufferSource*/ keyId) native;
+
+  @DomName('MediaKeyStatusMap.has')
+  @DocsEditable()
+  @Experimental() // untriaged
+  bool has(/*BufferSource*/ keyId) native;
 }
 // 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
@@ -23573,6 +26025,11 @@
   @DocsEditable()
   MediaKeySession _createSession([String sessionType]) native;
 
+  @DomName('MediaKeys.getStatusForPolicy')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future getStatusForPolicy(MediaKeysPolicy policy) native;
+
   @DomName('MediaKeys.setServerCertificate')
   @DocsEditable()
   @Experimental() // untriaged
@@ -23583,6 +26040,34 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('MediaKeysPolicy')
+@Experimental() // untriaged
+@Native("MediaKeysPolicy")
+class MediaKeysPolicy extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory MediaKeysPolicy._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('MediaKeysPolicy.MediaKeysPolicy')
+  @DocsEditable()
+  factory MediaKeysPolicy(Map init) {
+    var init_1 = convertDartToNative_Dictionary(init);
+    return MediaKeysPolicy._create_1(init_1);
+  }
+  static MediaKeysPolicy _create_1(init) =>
+      JS('MediaKeysPolicy', 'new MediaKeysPolicy(#)', init);
+
+  @DomName('MediaKeysPolicy.minHdcpVersion')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String minHdcpVersion;
+}
+// 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.
+
+@DocsEditable()
 @DomName('MediaList')
 @Unstable()
 @Native("MediaList")
@@ -23628,27 +26113,37 @@
 
   @DomName('MediaMetadata.MediaMetadata')
   @DocsEditable()
-  factory MediaMetadata(Map metadata) {
-    var metadata_1 = convertDartToNative_Dictionary(metadata);
-    return MediaMetadata._create_1(metadata_1);
+  factory MediaMetadata([Map metadata]) {
+    if (metadata != null) {
+      var metadata_1 = convertDartToNative_Dictionary(metadata);
+      return MediaMetadata._create_1(metadata_1);
+    }
+    return MediaMetadata._create_2();
   }
   static MediaMetadata _create_1(metadata) =>
       JS('MediaMetadata', 'new MediaMetadata(#)', metadata);
+  static MediaMetadata _create_2() =>
+      JS('MediaMetadata', 'new MediaMetadata()');
 
   @DomName('MediaMetadata.album')
   @DocsEditable()
   @Experimental() // untriaged
-  final String album;
+  String album;
 
   @DomName('MediaMetadata.artist')
   @DocsEditable()
   @Experimental() // untriaged
-  final String artist;
+  String artist;
+
+  @DomName('MediaMetadata.artwork')
+  @DocsEditable()
+  @Experimental() // untriaged
+  List artwork;
 
   @DomName('MediaMetadata.title')
   @DocsEditable()
   @Experimental() // untriaged
-  final String title;
+  String title;
 }
 // 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
@@ -23777,11 +26272,6 @@
   @Experimental() // untriaged
   final int audioBitsPerSecond;
 
-  @DomName('MediaRecorder.ignoreMutedMedia')
-  @DocsEditable()
-  @Experimental() // untriaged
-  bool ignoreMutedMedia;
-
   @DomName('MediaRecorder.mimeType')
   @DocsEditable()
   @Experimental() // untriaged
@@ -23856,27 +26346,59 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('MediaSession.MediaSession')
-  @DocsEditable()
-  factory MediaSession() {
-    return MediaSession._create_1();
-  }
-  static MediaSession _create_1() => JS('MediaSession', 'new MediaSession()');
-
   @DomName('MediaSession.metadata')
   @DocsEditable()
   @Experimental() // untriaged
   MediaMetadata metadata;
 
-  @DomName('MediaSession.activate')
+  @DomName('MediaSession.playbackState')
   @DocsEditable()
   @Experimental() // untriaged
-  Future activate() native;
+  String playbackState;
 
-  @DomName('MediaSession.deactivate')
+  @DomName('MediaSession.setActionHandler')
   @DocsEditable()
   @Experimental() // untriaged
-  Future deactivate() native;
+  void setActionHandler(String action, MediaSessionActionHandler handler)
+      native;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+@DomName('MediaSessionActionHandler')
+@Experimental() // untriaged
+typedef void MediaSessionActionHandler();
+// 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.
+
+@DocsEditable()
+@DomName('MediaSettingsRange')
+@Experimental() // untriaged
+@Native("MediaSettingsRange")
+class MediaSettingsRange extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory MediaSettingsRange._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('MediaSettingsRange.max')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num max;
+
+  @DomName('MediaSettingsRange.min')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num min;
+
+  @DomName('MediaSettingsRange.step')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num step;
 }
 // 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
@@ -23925,6 +26447,11 @@
   @DocsEditable()
   SourceBuffer addSourceBuffer(String type) native;
 
+  @DomName('MediaSource.clearLiveSeekableRange')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void clearLiveSeekableRange() native;
+
   @DomName('MediaSource.endOfStream')
   @DocsEditable()
   void endOfStream([String error]) native;
@@ -23936,6 +26463,11 @@
   @DomName('MediaSource.removeSourceBuffer')
   @DocsEditable()
   void removeSourceBuffer(SourceBuffer buffer) native;
+
+  @DomName('MediaSource.setLiveSeekableRange')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void setLiveSeekableRange(num start, num end) native;
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -23964,17 +26496,6 @@
       const EventStreamProvider<Event>('addtrack');
 
   /**
-   * Static factory designed to expose `ended` events to event
-   * handlers that are not necessarily instances of [MediaStream].
-   *
-   * See [EventStreamProvider] for usage information.
-   */
-  @DomName('MediaStream.endedEvent')
-  @DocsEditable()
-  static const EventStreamProvider<Event> endedEvent =
-      const EventStreamProvider<Event>('ended');
-
-  /**
    * Static factory designed to expose `removetrack` events to event
    * handlers that are not necessarily instances of [MediaStream].
    *
@@ -24053,11 +26574,6 @@
   @DocsEditable()
   Stream<Event> get onAddTrack => addTrackEvent.forTarget(this);
 
-  /// Stream of `ended` events handled by this [MediaStream].
-  @DomName('MediaStream.onended')
-  @DocsEditable()
-  Stream<Event> get onEnded => endedEvent.forTarget(this);
-
   /// Stream of `removetrack` events handled by this [MediaStream].
   @DomName('MediaStream.onremovetrack')
   @DocsEditable()
@@ -24165,6 +26681,11 @@
   static const EventStreamProvider<Event> unmuteEvent =
       const EventStreamProvider<Event>('unmute');
 
+  @DomName('MediaStreamTrack.contentHint')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String contentHint;
+
   @DomName('MediaStreamTrack.enabled')
   @DocsEditable()
   bool enabled;
@@ -24190,34 +26711,72 @@
   @DocsEditable()
   final String readyState;
 
-  @DomName('MediaStreamTrack.remote')
+  @DomName('MediaStreamTrack.applyConstraints')
   @DocsEditable()
   @Experimental() // untriaged
-  final bool remote;
+  Future applyConstraints([Map constraints]) {
+    if (constraints != null) {
+      var constraints_1 = convertDartToNative_Dictionary(constraints);
+      return _applyConstraints_1(constraints_1);
+    }
+    return _applyConstraints_2();
+  }
+
+  @JSName('applyConstraints')
+  @DomName('MediaStreamTrack.applyConstraints')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _applyConstraints_1(constraints) native;
+  @JSName('applyConstraints')
+  @DomName('MediaStreamTrack.applyConstraints')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _applyConstraints_2() native;
 
   @DomName('MediaStreamTrack.clone')
   @DocsEditable()
   @Experimental() // untriaged
   MediaStreamTrack clone() native;
 
-  @JSName('getSources')
-  @DomName('MediaStreamTrack.getSources')
+  @DomName('MediaStreamTrack.getCapabilities')
   @DocsEditable()
   @Experimental() // untriaged
-  static void _getSources(MediaStreamTrackSourcesCallback callback) native;
-
-  @JSName('getSources')
-  @DomName('MediaStreamTrack.getSources')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static Future<List<SourceInfo>> getSources() {
-    var completer = new Completer<List<SourceInfo>>();
-    _getSources((value) {
-      completer.complete(value);
-    });
-    return completer.future;
+  Map getCapabilities() {
+    return convertNativeToDart_Dictionary(_getCapabilities_1());
   }
 
+  @JSName('getCapabilities')
+  @DomName('MediaStreamTrack.getCapabilities')
+  @DocsEditable()
+  @Experimental() // untriaged
+  _getCapabilities_1() native;
+
+  @DomName('MediaStreamTrack.getConstraints')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Map getConstraints() {
+    return convertNativeToDart_Dictionary(_getConstraints_1());
+  }
+
+  @JSName('getConstraints')
+  @DomName('MediaStreamTrack.getConstraints')
+  @DocsEditable()
+  @Experimental() // untriaged
+  _getConstraints_1() native;
+
+  @DomName('MediaStreamTrack.getSettings')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Map getSettings() {
+    return convertNativeToDart_Dictionary(_getSettings_1());
+  }
+
+  @JSName('getSettings')
+  @DomName('MediaStreamTrack.getSettings')
+  @DocsEditable()
+  @Experimental() // untriaged
+  _getSettings_1() native;
+
   @DomName('MediaStreamTrack.stop')
   @DocsEditable()
   @Experimental() // untriaged
@@ -24254,6 +26813,18 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('MediaStreamTrackEvent.MediaStreamTrackEvent')
+  @DocsEditable()
+  factory MediaStreamTrackEvent(String type, Map eventInitDict) {
+    var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
+    return MediaStreamTrackEvent._create_1(type, eventInitDict_1);
+  }
+  static MediaStreamTrackEvent _create_1(type, eventInitDict) => JS(
+      'MediaStreamTrackEvent',
+      'new MediaStreamTrackEvent(#,#)',
+      type,
+      eventInitDict);
+
   /// Checks if this type is supported on the current platform.
   static bool get supported =>
       Device.isEventTypeSupported('MediaStreamTrackEvent');
@@ -24266,15 +26837,6 @@
 // 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.
 
-// WARNING: Do not edit - generated code.
-
-@DomName('MediaStreamTrackSourcesCallback')
-@Experimental() // untriaged
-typedef void MediaStreamTrackSourcesCallback(List<SourceInfo> sources);
-// 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.
-
 @DocsEditable()
 @DomName('MemoryInfo')
 @Experimental() // nonstandard
@@ -24333,73 +26895,16 @@
    * This can only be called by subclasses from their created constructor.
    */
   MenuElement.created() : super.created();
-
-  @DomName('HTMLMenuElement.label')
-  @DocsEditable()
-  @Experimental() // untriaged
-  String label;
-
-  @DomName('HTMLMenuElement.type')
-  @DocsEditable()
-  @Experimental() // untriaged
-  String type;
 }
 // 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.
 
-@DocsEditable()
-@DomName('HTMLMenuItemElement')
+// WARNING: Do not edit - generated code.
+
+@DomName('MessageCallback')
 @Experimental() // untriaged
-@Native("HTMLMenuItemElement")
-class MenuItemElement extends HtmlElement {
-  // To suppress missing implicit constructor warnings.
-  factory MenuItemElement._() {
-    throw new UnsupportedError("Not supported");
-  }
-  /**
-   * Constructor instantiated by the DOM when a custom element has been created.
-   *
-   * This can only be called by subclasses from their created constructor.
-   */
-  MenuItemElement.created() : super.created();
-
-  @DomName('HTMLMenuItemElement.checked')
-  @DocsEditable()
-  @Experimental() // untriaged
-  bool checked;
-
-  @JSName('default')
-  @DomName('HTMLMenuItemElement.default')
-  @DocsEditable()
-  @Experimental() // untriaged
-  bool defaultValue;
-
-  @DomName('HTMLMenuItemElement.disabled')
-  @DocsEditable()
-  @Experimental() // untriaged
-  bool disabled;
-
-  @DomName('HTMLMenuItemElement.icon')
-  @DocsEditable()
-  @Experimental() // untriaged
-  String icon;
-
-  @DomName('HTMLMenuItemElement.label')
-  @DocsEditable()
-  @Experimental() // untriaged
-  String label;
-
-  @DomName('HTMLMenuItemElement.radiogroup')
-  @DocsEditable()
-  @Experimental() // untriaged
-  String radiogroup;
-
-  @DomName('HTMLMenuItemElement.type')
-  @DocsEditable()
-  @Experimental() // untriaged
-  String type;
-}
+typedef void MessageCallback(Map message);
 // 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.
@@ -24515,7 +27020,6 @@
   @Experimental() // untriaged
   final String suborigin;
 
-  @JSName('initMessageEvent')
   @DomName('MessageEvent.initMessageEvent')
   @DocsEditable()
   void _initMessageEvent(
@@ -24525,8 +27029,19 @@
       Object dataArg,
       String originArg,
       String lastEventIdArg,
-      Window sourceArg,
-      List<MessagePort> portsArg) native;
+      EventTarget sourceArg,
+      List<MessagePort> portsArg) {
+    var sourceArg_1 = _convertDartToNative_EventTarget(sourceArg);
+    _initMessageEvent_1(typeArg, canBubbleArg, cancelableArg, dataArg,
+        originArg, lastEventIdArg, sourceArg_1, portsArg);
+    return;
+  }
+
+  @JSName('initMessageEvent')
+  @DomName('MessageEvent.initMessageEvent')
+  @DocsEditable()
+  void _initMessageEvent_1(typeArg, canBubbleArg, cancelableArg, dataArg,
+      originArg, lastEventIdArg, sourceArg, List<MessagePort> portsArg) native;
 }
 // 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
@@ -24559,7 +27074,7 @@
 
   @DomName('MessagePort.postMessage')
   @DocsEditable()
-  void postMessage(/*any*/ message, [List<MessagePort> transfer]) {
+  void postMessage(/*any*/ message, [List<Object> transfer]) {
     if (transfer != null) {
       var message_1 = convertDartToNative_SerializedScriptValue(message);
       _postMessage_1(message_1, transfer);
@@ -24573,7 +27088,7 @@
   @JSName('postMessage')
   @DomName('MessagePort.postMessage')
   @DocsEditable()
-  void _postMessage_1(message, List<MessagePort> transfer) native;
+  void _postMessage_1(message, List<Object> transfer) native;
   @JSName('postMessage')
   @DomName('MessagePort.postMessage')
   @DocsEditable()
@@ -24836,11 +27351,6 @@
   factory MidiInputMap._() {
     throw new UnsupportedError("Not supported");
   }
-
-  @DomName('MIDIInputMap.size')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final int size;
 }
 // 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
@@ -24874,10 +27384,6 @@
   @DomName('MIDIMessageEvent.data')
   @DocsEditable()
   final Uint8List data;
-
-  @DomName('MIDIMessageEvent.receivedTime')
-  @DocsEditable()
-  final double receivedTime;
 }
 // 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
@@ -24911,11 +27417,6 @@
   factory MidiOutputMap._() {
     throw new UnsupportedError("Not supported");
   }
-
-  @DomName('MIDIOutputMap.size')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final int size;
 }
 // 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
@@ -25105,6 +27606,15 @@
 // 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.
 
+// WARNING: Do not edit - generated code.
+
+@DomName('MojoWatchCallback')
+@Experimental() // untriaged
+typedef void MojoWatchCallback(int result);
+// 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.
+
 @DomName('MouseEvent')
 @Native("MouseEvent,DragEvent")
 class MouseEvent extends UIEvent {
@@ -25176,12 +27686,12 @@
   @JSName('clientX')
   @DomName('MouseEvent.clientX')
   @DocsEditable()
-  final int _clientX;
+  final num _clientX;
 
   @JSName('clientY')
   @DomName('MouseEvent.clientY')
   @DocsEditable()
-  final int _clientY;
+  final num _clientY;
 
   @DomName('MouseEvent.ctrlKey')
   @DocsEditable()
@@ -25231,13 +27741,13 @@
   @DomName('MouseEvent.pageX')
   @DocsEditable()
   @Experimental() // untriaged
-  final int _pageX;
+  final num _pageX;
 
   @JSName('pageY')
   @DomName('MouseEvent.pageY')
   @DocsEditable()
   @Experimental() // untriaged
-  final int _pageY;
+  final num _pageY;
 
   @DomName('MouseEvent.region')
   @DocsEditable()
@@ -25258,12 +27768,12 @@
   @JSName('screenX')
   @DomName('MouseEvent.screenX')
   @DocsEditable()
-  final int _screenX;
+  final num _screenX;
 
   @JSName('screenY')
   @DomName('MouseEvent.screenY')
   @DocsEditable()
-  final int _screenY;
+  final num _screenY;
 
   @DomName('MouseEvent.shiftKey')
   @DocsEditable()
@@ -25281,9 +27791,6 @@
   @deprecated
   final Node toElement;
 
-  // Use implementation from UIEvent.
-  // final int _which;
-
   @DomName('MouseEvent.getModifierState')
   @DocsEditable()
   @Experimental() // untriaged
@@ -25482,9 +27989,13 @@
 
   @DomName('MutationObserver.observe')
   @DocsEditable()
-  void _observe(Node target, Map options) {
-    var options_1 = convertDartToNative_Dictionary(options);
-    _observe_1(target, options_1);
+  void _observe(Node target, [Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      _observe_1(target, options_1);
+      return;
+    }
+    _observe_2(target);
     return;
   }
 
@@ -25492,6 +28003,10 @@
   @DomName('MutationObserver.observe')
   @DocsEditable()
   void _observe_1(Node target, options) native;
+  @JSName('observe')
+  @DomName('MutationObserver.observe')
+  @DocsEditable()
+  void _observe_2(Node target) native;
 
   @DomName('MutationObserver.takeRecords')
   @DocsEditable()
@@ -25634,14 +28149,43 @@
 // 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.
 
+@DocsEditable()
+@DomName('NavigationPreloadManager')
+@Experimental() // untriaged
+@Native("NavigationPreloadManager")
+class NavigationPreloadManager extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory NavigationPreloadManager._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('NavigationPreloadManager.disable')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future disable() native;
+
+  @DomName('NavigationPreloadManager.enable')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future enable() native;
+
+  @DomName('NavigationPreloadManager.getState')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future getState() native;
+}
+// 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.
+
 @DomName('Navigator')
 @Native("Navigator")
-class Navigator extends Interceptor
+class Navigator extends NavigatorConcurrentHardware
     implements
-        NavigatorStorageUtils,
-        NavigatorCpu,
+        NavigatorCookies,
         NavigatorLanguage,
         NavigatorOnLine,
+        NavigatorAutomationInformation,
         NavigatorID {
   @DomName('Navigator.language')
   String get language =>
@@ -25722,6 +28266,16 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('Navigator.budget')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final _BudgetService budget;
+
+  @DomName('Navigator.clipboard')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final _Clipboard clipboard;
+
   @DomName('Navigator.connection')
   @DocsEditable()
   @Experimental() // untriaged
@@ -25732,6 +28286,11 @@
   @Experimental() // untriaged
   final CredentialsContainer credentials;
 
+  @DomName('Navigator.deviceMemory')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num deviceMemory;
+
   @DomName('Navigator.doNotTrack')
   @DocsEditable()
   // http://www.w3.org/2011/tracking-protection/drafts/tracking-dnt.html#js-dom
@@ -25748,11 +28307,21 @@
   @Experimental() // untriaged
   final int maxTouchPoints;
 
+  @DomName('Navigator.mediaCapabilities')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final MediaCapabilities mediaCapabilities;
+
   @DomName('Navigator.mediaDevices')
   @DocsEditable()
   @Experimental() // untriaged
   final MediaDevices mediaDevices;
 
+  @DomName('Navigator.mediaSession')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final MediaSession mediaSession;
+
   @DomName('Navigator.mimeTypes')
   @DocsEditable()
   @Experimental() // nonstandard
@@ -25783,21 +28352,11 @@
   @Experimental() // untriaged
   final ServiceWorkerContainer serviceWorker;
 
-  @DomName('Navigator.services')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final ServicePortCollection services;
-
   @DomName('Navigator.storage')
   @DocsEditable()
   @Experimental() // untriaged
   final StorageManager storage;
 
-  @DomName('Navigator.storageQuota')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final StorageQuota storageQuota;
-
   @DomName('Navigator.vendor')
   @DocsEditable()
   @Unstable()
@@ -25808,6 +28367,11 @@
   @Unstable()
   final String vendorSub;
 
+  @DomName('Navigator.vr')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final VR vr;
+
   @JSName('webkitPersistentStorage')
   @DomName('Navigator.webkitPersistentStorage')
   @DocsEditable()
@@ -25826,6 +28390,11 @@
   // http://www.w3.org/TR/quota-api/#accessing-storagequota
   final DeprecatedStorageQuota temporaryStorage;
 
+  @DomName('Navigator.cancelKeyboardLock')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void cancelKeyboardLock() native;
+
   @DomName('Navigator.getBattery')
   @DocsEditable()
   @Experimental() // untriaged
@@ -25838,16 +28407,43 @@
   @Creates('_GamepadList')
   List<Gamepad> getGamepads() native;
 
-  @DomName('Navigator.getVRDevices')
+  @DomName('Navigator.getInstalledRelatedApps')
   @DocsEditable()
   @Experimental() // untriaged
-  Future getVRDevices() native;
+  Future getInstalledRelatedApps() native;
+
+  @DomName('Navigator.getVRDisplays')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future getVRDisplays() native;
 
   @DomName('Navigator.registerProtocolHandler')
   @DocsEditable()
   @Unstable()
   void registerProtocolHandler(String scheme, String url, String title) native;
 
+  @DomName('Navigator.requestKeyboardLock')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future requestKeyboardLock([List<String> keyCodes]) {
+    if (keyCodes != null) {
+      List keyCodes_1 = convertDartToNative_StringArray(keyCodes);
+      return _requestKeyboardLock_1(keyCodes_1);
+    }
+    return _requestKeyboardLock_2();
+  }
+
+  @JSName('requestKeyboardLock')
+  @DomName('Navigator.requestKeyboardLock')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _requestKeyboardLock_1(List keyCodes) native;
+  @JSName('requestKeyboardLock')
+  @DomName('Navigator.requestKeyboardLock')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _requestKeyboardLock_2() native;
+
   @DomName('Navigator.requestMIDIAccess')
   @DocsEditable()
   @Experimental() // untriaged
@@ -25881,12 +28477,41 @@
   @Experimental() // untriaged
   bool sendBeacon(String url, Object data) native;
 
-  // From NavigatorCPU
-
-  @DomName('Navigator.hardwareConcurrency')
+  @DomName('Navigator.share')
   @DocsEditable()
   @Experimental() // untriaged
-  final int hardwareConcurrency;
+  Future share([Map data]) {
+    if (data != null) {
+      var data_1 = convertDartToNative_Dictionary(data);
+      return _share_1(data_1);
+    }
+    return _share_2();
+  }
+
+  @JSName('share')
+  @DomName('Navigator.share')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _share_1(data) native;
+  @JSName('share')
+  @DomName('Navigator.share')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _share_2() native;
+
+  // From NavigatorAutomationInformation
+
+  @DomName('Navigator.webdriver')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final bool webdriver;
+
+  // From NavigatorCookies
+
+  @DomName('Navigator.cookieEnabled')
+  @DocsEditable()
+  @Unstable()
+  final bool cookieEnabled;
 
   // From NavigatorID
 
@@ -25934,27 +28559,43 @@
   @DocsEditable()
   @Unstable()
   final bool onLine;
-
-  // From NavigatorStorageUtils
-
-  @DomName('Navigator.cookieEnabled')
-  @DocsEditable()
-  @Unstable()
-  final bool cookieEnabled;
 }
 // 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.
 
 @DocsEditable()
-@DomName('NavigatorCPU')
+@DomName('NavigatorAutomationInformation')
 @Experimental() // untriaged
-abstract class NavigatorCpu extends Interceptor {
+@Native("NavigatorAutomationInformation")
+class NavigatorAutomationInformation extends Interceptor {
   // To suppress missing implicit constructor warnings.
-  factory NavigatorCpu._() {
+  factory NavigatorAutomationInformation._() {
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('NavigatorAutomationInformation.webdriver')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final bool webdriver;
+}
+// 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.
+
+@DocsEditable()
+@DomName('NavigatorConcurrentHardware')
+@Experimental() // untriaged
+@Native("NavigatorConcurrentHardware")
+class NavigatorConcurrentHardware extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory NavigatorConcurrentHardware._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('NavigatorConcurrentHardware.hardwareConcurrency')
+  @DocsEditable()
+  @Experimental() // untriaged
   final int hardwareConcurrency;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -25962,6 +28603,25 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('NavigatorCookies')
+@Experimental() // untriaged
+@Native("NavigatorCookies")
+class NavigatorCookies extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory NavigatorCookies._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('NavigatorCookies.cookieEnabled')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final bool cookieEnabled;
+}
+// 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.
+
+@DocsEditable()
 @DomName('NavigatorID')
 @Experimental() // untriaged
 abstract class NavigatorID extends Interceptor {
@@ -26021,25 +28681,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('NavigatorStorageUtils')
-@Experimental() // untriaged
-@Native("NavigatorStorageUtils")
-class NavigatorStorageUtils extends Interceptor {
-  // To suppress missing implicit constructor warnings.
-  factory NavigatorStorageUtils._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('NavigatorStorageUtils.cookieEnabled')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final bool cookieEnabled;
-}
-// 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.
-
-@DocsEditable()
 @DomName('NavigatorUserMediaError')
 // http://dev.w3.org/2011/webrtc/editor/getusermedia.html#idl-def-NavigatorUserMediaError
 @Experimental()
@@ -26102,10 +28743,25 @@
   static const EventStreamProvider<Event> changeEvent =
       const EventStreamProvider<Event>('change');
 
+  @DomName('NetworkInformation.downlink')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num downlink;
+
   @DomName('NetworkInformation.downlinkMax')
   @DocsEditable()
   @Experimental() // untriaged
-  final double downlinkMax;
+  final num downlinkMax;
+
+  @DomName('NetworkInformation.effectiveType')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String effectiveType;
+
+  @DomName('NetworkInformation.rtt')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final int rtt;
 
   @DomName('NetworkInformation.type')
   @DocsEditable()
@@ -26462,6 +29118,11 @@
   @DocsEditable()
   final Node firstChild;
 
+  @DomName('Node.isConnected')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final bool isConnected;
+
   /**
    * The last child of this node.
    *
@@ -26612,11 +29273,6 @@
   @DocsEditable()
   String text;
 
-  @DomName('Node.treeRoot')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final Node treeRoot;
-
   @JSName('appendChild')
   /**
    * Adds a node to the end of the child [nodes] list of this node.
@@ -26659,6 +29315,28 @@
   @DocsEditable()
   bool contains(Node other) native;
 
+  @DomName('Node.getRootNode')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Node getRootNode([Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return _getRootNode_1(options_1);
+    }
+    return _getRootNode_2();
+  }
+
+  @JSName('getRootNode')
+  @DomName('Node.getRootNode')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Node _getRootNode_1(options) native;
+  @JSName('getRootNode')
+  @DomName('Node.getRootNode')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Node _getRootNode_2() native;
+
   /**
    * Returns true if this node has any children.
    *
@@ -26905,6 +29583,25 @@
   @Experimental() // untriaged
   Element getElementById(String elementId) native;
 }
+// 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.
+
+@DocsEditable()
+@DomName('NoncedElement')
+@Experimental() // untriaged
+@Native("NoncedElement")
+class NoncedElement extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory NoncedElement._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('NoncedElement.nonce')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String nonce;
+}
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -27000,6 +29697,11 @@
   @Experimental() // untriaged
   final List actions;
 
+  @DomName('Notification.badge')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String badge;
+
   @DomName('Notification.body')
   @DocsEditable()
   @Experimental() // untriaged
@@ -27022,6 +29724,11 @@
   @Experimental() // untriaged
   final String icon;
 
+  @DomName('Notification.image')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String image;
+
   @DomName('Notification.lang')
   @DocsEditable()
   @Experimental() // untriaged
@@ -27144,6 +29851,11 @@
   @DocsEditable()
   @Experimental() // untriaged
   final Notification notification;
+
+  @DomName('NotificationEvent.reply')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String reply;
 }
 // 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
@@ -27160,33 +29872,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('NumberValue')
-@Experimental() // untriaged
-@Native("NumberValue")
-class NumberValue extends StyleValue {
-  // To suppress missing implicit constructor warnings.
-  factory NumberValue._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('NumberValue.NumberValue')
-  @DocsEditable()
-  factory NumberValue(num value) {
-    return NumberValue._create_1(value);
-  }
-  static NumberValue _create_1(value) =>
-      JS('NumberValue', 'new NumberValue(#)', value);
-
-  @DomName('NumberValue.value')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double value;
-}
-// 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.
-
-@DocsEditable()
 @DomName('HTMLOListElement')
 @Native("HTMLOListElement")
 class OListElement extends HtmlElement {
@@ -27251,6 +29936,19 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => Element.isTagSupported('object');
 
+  @DomName('HTMLObjectElement.contentWindow')
+  @DocsEditable()
+  @Experimental() // untriaged
+  WindowBase get contentWindow =>
+      _convertNativeToDart_Window(this._get_contentWindow);
+  @JSName('contentWindow')
+  @DomName('HTMLObjectElement.contentWindow')
+  @DocsEditable()
+  @Experimental() // untriaged
+  @Creates('Window|=Object')
+  @Returns('Window|=Object')
+  final dynamic _get_contentWindow;
+
   @DomName('HTMLObjectElement.data')
   @DocsEditable()
   String data;
@@ -27293,11 +29991,11 @@
 
   @DomName('HTMLObjectElement.__getter__')
   @DocsEditable()
-  bool __getter__(index_OR_name) native;
+  Node __getter__(String name) native;
 
   @DomName('HTMLObjectElement.__setter__')
   @DocsEditable()
-  void __setter__(index_OR_name, Node value) native;
+  void __setter__(String name, Node value) native;
 
   @DomName('HTMLObjectElement.checkValidity')
   @DocsEditable()
@@ -27320,7 +30018,7 @@
 @DomName('OffscreenCanvas')
 @Experimental() // untriaged
 @Native("OffscreenCanvas")
-class OffscreenCanvas extends Interceptor {
+class OffscreenCanvas extends EventTarget {
   // To suppress missing implicit constructor warnings.
   factory OffscreenCanvas._() {
     throw new UnsupportedError("Not supported");
@@ -27343,6 +30041,486 @@
   @DocsEditable()
   @Experimental() // untriaged
   int width;
+
+  @DomName('OffscreenCanvas.convertToBlob')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future convertToBlob([Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return _convertToBlob_1(options_1);
+    }
+    return _convertToBlob_2();
+  }
+
+  @JSName('convertToBlob')
+  @DomName('OffscreenCanvas.convertToBlob')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _convertToBlob_1(options) native;
+  @JSName('convertToBlob')
+  @DomName('OffscreenCanvas.convertToBlob')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _convertToBlob_2() native;
+
+  @DomName('OffscreenCanvas.getContext')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Object getContext(String contextType, [Map attributes]) {
+    if (attributes != null) {
+      var attributes_1 = convertDartToNative_Dictionary(attributes);
+      return _getContext_1(contextType, attributes_1);
+    }
+    return _getContext_2(contextType);
+  }
+
+  @JSName('getContext')
+  @DomName('OffscreenCanvas.getContext')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Object _getContext_1(contextType, attributes) native;
+  @JSName('getContext')
+  @DomName('OffscreenCanvas.getContext')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Object _getContext_2(contextType) native;
+
+  @DomName('OffscreenCanvas.transferToImageBitmap')
+  @DocsEditable()
+  @Experimental() // untriaged
+  ImageBitmap transferToImageBitmap() native;
+}
+// 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.
+
+@DocsEditable()
+@DomName('OffscreenCanvasRenderingContext2D')
+@Experimental() // untriaged
+@Native("OffscreenCanvasRenderingContext2D")
+class OffscreenCanvasRenderingContext2D extends Interceptor
+    implements _CanvasPath {
+  // To suppress missing implicit constructor warnings.
+  factory OffscreenCanvasRenderingContext2D._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('OffscreenCanvasRenderingContext2D.canvas')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final OffscreenCanvas canvas;
+
+  @DomName('OffscreenCanvasRenderingContext2D.direction')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String direction;
+
+  @DomName('OffscreenCanvasRenderingContext2D.fillStyle')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Object fillStyle;
+
+  @DomName('OffscreenCanvasRenderingContext2D.filter')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String filter;
+
+  @DomName('OffscreenCanvasRenderingContext2D.font')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String font;
+
+  @DomName('OffscreenCanvasRenderingContext2D.globalAlpha')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num globalAlpha;
+
+  @DomName('OffscreenCanvasRenderingContext2D.globalCompositeOperation')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String globalCompositeOperation;
+
+  @DomName('OffscreenCanvasRenderingContext2D.imageSmoothingEnabled')
+  @DocsEditable()
+  @Experimental() // untriaged
+  bool imageSmoothingEnabled;
+
+  @DomName('OffscreenCanvasRenderingContext2D.imageSmoothingQuality')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String imageSmoothingQuality;
+
+  @DomName('OffscreenCanvasRenderingContext2D.lineCap')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String lineCap;
+
+  @DomName('OffscreenCanvasRenderingContext2D.lineDashOffset')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num lineDashOffset;
+
+  @DomName('OffscreenCanvasRenderingContext2D.lineJoin')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String lineJoin;
+
+  @DomName('OffscreenCanvasRenderingContext2D.lineWidth')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num lineWidth;
+
+  @DomName('OffscreenCanvasRenderingContext2D.miterLimit')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num miterLimit;
+
+  @DomName('OffscreenCanvasRenderingContext2D.shadowBlur')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num shadowBlur;
+
+  @DomName('OffscreenCanvasRenderingContext2D.shadowColor')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String shadowColor;
+
+  @DomName('OffscreenCanvasRenderingContext2D.shadowOffsetX')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num shadowOffsetX;
+
+  @DomName('OffscreenCanvasRenderingContext2D.shadowOffsetY')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num shadowOffsetY;
+
+  @DomName('OffscreenCanvasRenderingContext2D.strokeStyle')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Object strokeStyle;
+
+  @DomName('OffscreenCanvasRenderingContext2D.textAlign')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String textAlign;
+
+  @DomName('OffscreenCanvasRenderingContext2D.textBaseline')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String textBaseline;
+
+  @DomName('OffscreenCanvasRenderingContext2D.beginPath')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void beginPath() native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.clearRect')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void clearRect(num x, num y, num width, num height) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.clip')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void clip([Path2D path]) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.commit')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future commit() native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.createImageData')
+  @DocsEditable()
+  @Experimental() // untriaged
+  ImageData createImageData(data_OR_imagedata_OR_sw,
+      [int sh_OR_sw,
+      imageDataColorSettings_OR_sh,
+      Map imageDataColorSettings]) {
+    if ((data_OR_imagedata_OR_sw is ImageData) &&
+        sh_OR_sw == null &&
+        imageDataColorSettings_OR_sh == null &&
+        imageDataColorSettings == null) {
+      var imagedata_1 = convertDartToNative_ImageData(data_OR_imagedata_OR_sw);
+      return convertNativeToDart_ImageData(_createImageData_1(imagedata_1));
+    }
+    if (sh_OR_sw != null &&
+        (data_OR_imagedata_OR_sw is int) &&
+        imageDataColorSettings_OR_sh == null &&
+        imageDataColorSettings == null) {
+      return convertNativeToDart_ImageData(
+          _createImageData_2(data_OR_imagedata_OR_sw, sh_OR_sw));
+    }
+    if ((imageDataColorSettings_OR_sh is Map) &&
+        sh_OR_sw != null &&
+        (data_OR_imagedata_OR_sw is int) &&
+        imageDataColorSettings == null) {
+      var imageDataColorSettings_1 =
+          convertDartToNative_Dictionary(imageDataColorSettings_OR_sh);
+      return convertNativeToDart_ImageData(_createImageData_3(
+          data_OR_imagedata_OR_sw, sh_OR_sw, imageDataColorSettings_1));
+    }
+    if (imageDataColorSettings != null &&
+        (imageDataColorSettings_OR_sh is int) &&
+        sh_OR_sw != null &&
+        data_OR_imagedata_OR_sw != null) {
+      var imageDataColorSettings_1 =
+          convertDartToNative_Dictionary(imageDataColorSettings);
+      return convertNativeToDart_ImageData(_createImageData_4(
+          data_OR_imagedata_OR_sw,
+          sh_OR_sw,
+          imageDataColorSettings_OR_sh,
+          imageDataColorSettings_1));
+    }
+    throw new ArgumentError("Incorrect number or type of arguments");
+  }
+
+  @JSName('createImageData')
+  @DomName('OffscreenCanvasRenderingContext2D.createImageData')
+  @DocsEditable()
+  @Experimental() // untriaged
+  _createImageData_1(imagedata) native;
+  @JSName('createImageData')
+  @DomName('OffscreenCanvasRenderingContext2D.createImageData')
+  @DocsEditable()
+  @Experimental() // untriaged
+  _createImageData_2(int sw, sh) native;
+  @JSName('createImageData')
+  @DomName('OffscreenCanvasRenderingContext2D.createImageData')
+  @DocsEditable()
+  @Experimental() // untriaged
+  _createImageData_3(int sw, sh, imageDataColorSettings) native;
+  @JSName('createImageData')
+  @DomName('OffscreenCanvasRenderingContext2D.createImageData')
+  @DocsEditable()
+  @Experimental() // untriaged
+  _createImageData_4(data, sw, int sh, imageDataColorSettings) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.createLinearGradient')
+  @DocsEditable()
+  @Experimental() // untriaged
+  CanvasGradient createLinearGradient(num x0, num y0, num x1, num y1) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.createPattern')
+  @DocsEditable()
+  @Experimental() // untriaged
+  CanvasPattern createPattern(
+      /*CanvasImageSource*/ image,
+      String repetitionType) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.createRadialGradient')
+  @DocsEditable()
+  @Experimental() // untriaged
+  CanvasGradient createRadialGradient(
+      num x0, num y0, num r0, num x1, num y1, num r1) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.drawImage')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void drawImage(/*CanvasImageSource*/ image, num sx_OR_x, num sy_OR_y,
+      [num sw_OR_width,
+      num height_OR_sh,
+      num dx,
+      num dy,
+      num dw,
+      num dh]) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.fill')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void fill([path_OR_winding, String winding]) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.fillRect')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void fillRect(num x, num y, num width, num height) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.fillText')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void fillText(String text, num x, num y, [num maxWidth]) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.getImageData')
+  @DocsEditable()
+  @Experimental() // untriaged
+  ImageData getImageData(int sx, int sy, int sw, int sh) {
+    return convertNativeToDart_ImageData(_getImageData_1(sx, sy, sw, sh));
+  }
+
+  @JSName('getImageData')
+  @DomName('OffscreenCanvasRenderingContext2D.getImageData')
+  @DocsEditable()
+  @Experimental() // untriaged
+  _getImageData_1(sx, sy, sw, sh) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.getLineDash')
+  @DocsEditable()
+  @Experimental() // untriaged
+  List<num> getLineDash() native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.isPointInPath')
+  @DocsEditable()
+  @Experimental() // untriaged
+  bool isPointInPath(path_OR_x, num x_OR_y, [winding_OR_y, String winding])
+      native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.isPointInStroke')
+  @DocsEditable()
+  @Experimental() // untriaged
+  bool isPointInStroke(path_OR_x, num x_OR_y, [num y]) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.measureText')
+  @DocsEditable()
+  @Experimental() // untriaged
+  TextMetrics measureText(String text) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.putImageData')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void putImageData(ImageData imagedata, int dx, int dy,
+      [int dirtyX, int dirtyY, int dirtyWidth, int dirtyHeight]) {
+    if (dirtyX == null &&
+        dirtyY == null &&
+        dirtyWidth == null &&
+        dirtyHeight == null) {
+      var imagedata_1 = convertDartToNative_ImageData(imagedata);
+      _putImageData_1(imagedata_1, dx, dy);
+      return;
+    }
+    if (dirtyHeight != null &&
+        dirtyWidth != null &&
+        dirtyY != null &&
+        dirtyX != null) {
+      var imagedata_1 = convertDartToNative_ImageData(imagedata);
+      _putImageData_2(
+          imagedata_1, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight);
+      return;
+    }
+    throw new ArgumentError("Incorrect number or type of arguments");
+  }
+
+  @JSName('putImageData')
+  @DomName('OffscreenCanvasRenderingContext2D.putImageData')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _putImageData_1(imagedata, dx, dy) native;
+  @JSName('putImageData')
+  @DomName('OffscreenCanvasRenderingContext2D.putImageData')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _putImageData_2(
+      imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.resetTransform')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void resetTransform() native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.restore')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void restore() native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.rotate')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void rotate(num angle) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.save')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void save() native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.scale')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void scale(num x, num y) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.setLineDash')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void setLineDash(List<num> dash) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.setTransform')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void setTransform(num a, num b, num c, num d, num e, num f) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.stroke')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void stroke([Path2D path]) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.strokeRect')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void strokeRect(num x, num y, num width, num height) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.strokeText')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void strokeText(String text, num x, num y, [num maxWidth]) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.transform')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void transform(num a, num b, num c, num d, num e, num f) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.translate')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void translate(num x, num y) native;
+
+  // From CanvasPath
+
+  @DomName('OffscreenCanvasRenderingContext2D.arc')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void arc(num x, num y, num radius, num startAngle, num endAngle,
+      bool anticlockwise) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.arcTo')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void arcTo(num x1, num y1, num x2, num y2, num radius) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.bezierCurveTo')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void bezierCurveTo(num cp1x, num cp1y, num cp2x, num cp2y, num x, num y)
+      native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.closePath')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void closePath() native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.ellipse')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void ellipse(num x, num y, num radiusX, num radiusY, num rotation,
+      num startAngle, num endAngle, bool anticlockwise) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.lineTo')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void lineTo(num x, num y) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.moveTo')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void moveTo(num x, num y) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.quadraticCurveTo')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void quadraticCurveTo(num cpx, num cpy, num x, num y) native;
+
+  @DomName('OffscreenCanvasRenderingContext2D.rect')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void rect(num x, num y, num width, num height) native;
 }
 // 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
@@ -27463,6 +30641,30 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('OrientationSensor')
+@Experimental() // untriaged
+@Native("OrientationSensor")
+class OrientationSensor extends Sensor {
+  // To suppress missing implicit constructor warnings.
+  factory OrientationSensor._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('OrientationSensor.quaternion')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final List<num> quaternion;
+
+  @DomName('OrientationSensor.populateMatrix')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void populateMatrix(Object targetBuffer) native;
+}
+// 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.
+
+@DocsEditable()
 @DomName('HTMLOutputElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
@@ -27548,6 +30750,46 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('OverconstrainedError')
+@Experimental() // untriaged
+@Native("OverconstrainedError")
+class OverconstrainedError extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory OverconstrainedError._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('OverconstrainedError.OverconstrainedError')
+  @DocsEditable()
+  factory OverconstrainedError(String constraint, String message) {
+    return OverconstrainedError._create_1(constraint, message);
+  }
+  static OverconstrainedError _create_1(constraint, message) => JS(
+      'OverconstrainedError',
+      'new OverconstrainedError(#,#)',
+      constraint,
+      message);
+
+  @DomName('OverconstrainedError.constraint')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String constraint;
+
+  @DomName('OverconstrainedError.message')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String message;
+
+  @DomName('OverconstrainedError.name')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String name;
+}
+// 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.
+
+@DocsEditable()
 @DomName('PageTransitionEvent')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#pagetransitionevent
 @Experimental()
@@ -27584,6 +30826,328 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('PaintRenderingContext2D')
+@Experimental() // untriaged
+@Native("PaintRenderingContext2D")
+class PaintRenderingContext2D extends Interceptor implements _CanvasPath {
+  // To suppress missing implicit constructor warnings.
+  factory PaintRenderingContext2D._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('PaintRenderingContext2D.currentTransform')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Matrix currentTransform;
+
+  @DomName('PaintRenderingContext2D.fillStyle')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Object fillStyle;
+
+  @DomName('PaintRenderingContext2D.filter')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String filter;
+
+  @DomName('PaintRenderingContext2D.globalAlpha')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num globalAlpha;
+
+  @DomName('PaintRenderingContext2D.globalCompositeOperation')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String globalCompositeOperation;
+
+  @DomName('PaintRenderingContext2D.imageSmoothingEnabled')
+  @DocsEditable()
+  @Experimental() // untriaged
+  bool imageSmoothingEnabled;
+
+  @DomName('PaintRenderingContext2D.imageSmoothingQuality')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String imageSmoothingQuality;
+
+  @DomName('PaintRenderingContext2D.lineCap')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String lineCap;
+
+  @DomName('PaintRenderingContext2D.lineDashOffset')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num lineDashOffset;
+
+  @DomName('PaintRenderingContext2D.lineJoin')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String lineJoin;
+
+  @DomName('PaintRenderingContext2D.lineWidth')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num lineWidth;
+
+  @DomName('PaintRenderingContext2D.miterLimit')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num miterLimit;
+
+  @DomName('PaintRenderingContext2D.shadowBlur')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num shadowBlur;
+
+  @DomName('PaintRenderingContext2D.shadowColor')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String shadowColor;
+
+  @DomName('PaintRenderingContext2D.shadowOffsetX')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num shadowOffsetX;
+
+  @DomName('PaintRenderingContext2D.shadowOffsetY')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num shadowOffsetY;
+
+  @DomName('PaintRenderingContext2D.strokeStyle')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Object strokeStyle;
+
+  @DomName('PaintRenderingContext2D.beginPath')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void beginPath() native;
+
+  @DomName('PaintRenderingContext2D.clearRect')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void clearRect(num x, num y, num width, num height) native;
+
+  @DomName('PaintRenderingContext2D.clip')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void clip([path_OR_winding, String winding]) native;
+
+  @DomName('PaintRenderingContext2D.createLinearGradient')
+  @DocsEditable()
+  @Experimental() // untriaged
+  CanvasGradient createLinearGradient(num x0, num y0, num x1, num y1) native;
+
+  @DomName('PaintRenderingContext2D.createPattern')
+  @DocsEditable()
+  @Experimental() // untriaged
+  CanvasPattern createPattern(
+      /*CanvasImageSource*/ image,
+      String repetitionType) native;
+
+  @DomName('PaintRenderingContext2D.createRadialGradient')
+  @DocsEditable()
+  @Experimental() // untriaged
+  CanvasGradient createRadialGradient(
+      num x0, num y0, num r0, num x1, num y1, num r1) native;
+
+  @DomName('PaintRenderingContext2D.drawImage')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void drawImage(/*CanvasImageSource*/ image, num sx_OR_x, num sy_OR_y,
+      [num sw_OR_width,
+      num height_OR_sh,
+      num dx,
+      num dy,
+      num dw,
+      num dh]) native;
+
+  @DomName('PaintRenderingContext2D.fill')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void fill([path_OR_winding, String winding]) native;
+
+  @DomName('PaintRenderingContext2D.fillRect')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void fillRect(num x, num y, num width, num height) native;
+
+  @DomName('PaintRenderingContext2D.getLineDash')
+  @DocsEditable()
+  @Experimental() // untriaged
+  List<num> getLineDash() native;
+
+  @DomName('PaintRenderingContext2D.isPointInPath')
+  @DocsEditable()
+  @Experimental() // untriaged
+  bool isPointInPath(path_OR_x, num x_OR_y, [winding_OR_y, String winding])
+      native;
+
+  @DomName('PaintRenderingContext2D.isPointInStroke')
+  @DocsEditable()
+  @Experimental() // untriaged
+  bool isPointInStroke(path_OR_x, num x_OR_y, [num y]) native;
+
+  @DomName('PaintRenderingContext2D.resetTransform')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void resetTransform() native;
+
+  @DomName('PaintRenderingContext2D.restore')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void restore() native;
+
+  @DomName('PaintRenderingContext2D.rotate')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void rotate(num angle) native;
+
+  @DomName('PaintRenderingContext2D.save')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void save() native;
+
+  @DomName('PaintRenderingContext2D.scale')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void scale(num x, num y) native;
+
+  @DomName('PaintRenderingContext2D.setLineDash')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void setLineDash(List<num> dash) native;
+
+  @DomName('PaintRenderingContext2D.setTransform')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void setTransform(num a, num b, num c, num d, num e, num f) native;
+
+  @DomName('PaintRenderingContext2D.stroke')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void stroke([Path2D path]) native;
+
+  @DomName('PaintRenderingContext2D.strokeRect')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void strokeRect(num x, num y, num width, num height) native;
+
+  @DomName('PaintRenderingContext2D.transform')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void transform(num a, num b, num c, num d, num e, num f) native;
+
+  @DomName('PaintRenderingContext2D.translate')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void translate(num x, num y) native;
+
+  // From CanvasPath
+
+  @DomName('PaintRenderingContext2D.arc')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void arc(num x, num y, num radius, num startAngle, num endAngle,
+      bool anticlockwise) native;
+
+  @DomName('PaintRenderingContext2D.arcTo')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void arcTo(num x1, num y1, num x2, num y2, num radius) native;
+
+  @DomName('PaintRenderingContext2D.bezierCurveTo')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void bezierCurveTo(num cp1x, num cp1y, num cp2x, num cp2y, num x, num y)
+      native;
+
+  @DomName('PaintRenderingContext2D.closePath')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void closePath() native;
+
+  @DomName('PaintRenderingContext2D.ellipse')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void ellipse(num x, num y, num radiusX, num radiusY, num rotation,
+      num startAngle, num endAngle, bool anticlockwise) native;
+
+  @DomName('PaintRenderingContext2D.lineTo')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void lineTo(num x, num y) native;
+
+  @DomName('PaintRenderingContext2D.moveTo')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void moveTo(num x, num y) native;
+
+  @DomName('PaintRenderingContext2D.quadraticCurveTo')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void quadraticCurveTo(num cpx, num cpy, num x, num y) native;
+
+  @DomName('PaintRenderingContext2D.rect')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void rect(num x, num y, num width, num height) native;
+}
+// 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.
+
+@DocsEditable()
+@DomName('PaintSize')
+@Experimental() // untriaged
+@Native("PaintSize")
+class PaintSize extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory PaintSize._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('PaintSize.height')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num height;
+
+  @DomName('PaintSize.width')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num width;
+}
+// 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.
+
+@DocsEditable()
+@DomName('PaintWorkletGlobalScope')
+@Experimental() // untriaged
+@Native("PaintWorkletGlobalScope")
+class PaintWorkletGlobalScope extends WorkletGlobalScope {
+  // To suppress missing implicit constructor warnings.
+  factory PaintWorkletGlobalScope._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('PaintWorkletGlobalScope.devicePixelRatio')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num devicePixelRatio;
+
+  @DomName('PaintWorkletGlobalScope.registerPaint')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void registerPaint(String name, Object paintCtor) native;
+}
+// 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.
+
+@DocsEditable()
 @DomName('HTMLParagraphElement')
 @Native("HTMLParagraphElement")
 class ParagraphElement extends HtmlElement {
@@ -27675,7 +31239,7 @@
 @DomName('PasswordCredential')
 @Experimental() // untriaged
 @Native("PasswordCredential")
-class PasswordCredential extends Credential {
+class PasswordCredential extends Credential implements CredentialUserData {
   // To suppress missing implicit constructor warnings.
   factory PasswordCredential._() {
     throw new UnsupportedError("Not supported");
@@ -27683,12 +31247,20 @@
 
   @DomName('PasswordCredential.PasswordCredential')
   @DocsEditable()
-  factory PasswordCredential(Map data) {
-    var data_1 = convertDartToNative_Dictionary(data);
-    return PasswordCredential._create_1(data_1);
+  factory PasswordCredential(data_OR_form) {
+    if ((data_OR_form is Map)) {
+      var data_1 = convertDartToNative_Dictionary(data_OR_form);
+      return PasswordCredential._create_1(data_1);
+    }
+    if ((data_OR_form is FormElement)) {
+      return PasswordCredential._create_2(data_OR_form);
+    }
+    throw new ArgumentError("Incorrect number or type of arguments");
   }
-  static PasswordCredential _create_1(data) =>
-      JS('PasswordCredential', 'new PasswordCredential(#)', data);
+  static PasswordCredential _create_1(data_OR_form) =>
+      JS('PasswordCredential', 'new PasswordCredential(#)', data_OR_form);
+  static PasswordCredential _create_2(data_OR_form) =>
+      JS('PasswordCredential', 'new PasswordCredential(#)', data_OR_form);
 
   @DomName('PasswordCredential.additionalData')
   @DocsEditable()
@@ -27700,10 +31272,28 @@
   @Experimental() // untriaged
   String idName;
 
+  @DomName('PasswordCredential.password')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String password;
+
   @DomName('PasswordCredential.passwordName')
   @DocsEditable()
   @Experimental() // untriaged
   String passwordName;
+
+  // From CredentialUserData
+
+  @JSName('iconURL')
+  @DomName('PasswordCredential.iconURL')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String iconUrl;
+
+  @DomName('PasswordCredential.name')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String name;
 }
 // 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
@@ -27713,7 +31303,7 @@
 @DomName('Path2D')
 @Experimental() // untriaged
 @Native("Path2D")
-class Path2D extends Interceptor implements _CanvasPathMethods {
+class Path2D extends Interceptor implements _CanvasPath {
   // To suppress missing implicit constructor warnings.
   factory Path2D._() {
     throw new UnsupportedError("Not supported");
@@ -27744,7 +31334,7 @@
   @Experimental() // untriaged
   void addPath(Path2D path, [Matrix transform]) native;
 
-  // From CanvasPathMethods
+  // From CanvasPath
 
   @DomName('Path2D.arc')
   @DocsEditable()
@@ -27799,6 +31389,391 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('PaymentAddress')
+@Experimental() // untriaged
+@Native("PaymentAddress")
+class PaymentAddress extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory PaymentAddress._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('PaymentAddress.addressLine')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final List<String> addressLine;
+
+  @DomName('PaymentAddress.city')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String city;
+
+  @DomName('PaymentAddress.country')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String country;
+
+  @DomName('PaymentAddress.dependentLocality')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String dependentLocality;
+
+  @DomName('PaymentAddress.languageCode')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String languageCode;
+
+  @DomName('PaymentAddress.organization')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String organization;
+
+  @DomName('PaymentAddress.phone')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String phone;
+
+  @DomName('PaymentAddress.postalCode')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String postalCode;
+
+  @DomName('PaymentAddress.recipient')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String recipient;
+
+  @DomName('PaymentAddress.region')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String region;
+
+  @DomName('PaymentAddress.sortingCode')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String sortingCode;
+}
+// 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.
+
+@DocsEditable()
+@DomName('PaymentInstruments')
+@Experimental() // untriaged
+@Native("PaymentInstruments")
+class PaymentInstruments extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory PaymentInstruments._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('PaymentInstruments.clear')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future clear() native;
+
+  @DomName('PaymentInstruments.delete')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future delete(String instrumentKey) native;
+
+  @DomName('PaymentInstruments.get')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future get(String instrumentKey) native;
+
+  @DomName('PaymentInstruments.has')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future has(String instrumentKey) native;
+
+  @DomName('PaymentInstruments.keys')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future keys() native;
+
+  @DomName('PaymentInstruments.set')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future set(String instrumentKey, Map details) {
+    var details_1 = convertDartToNative_Dictionary(details);
+    return _set_1(instrumentKey, details_1);
+  }
+
+  @JSName('set')
+  @DomName('PaymentInstruments.set')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _set_1(instrumentKey, details) native;
+}
+// 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.
+
+@DocsEditable()
+@DomName('PaymentManager')
+@Experimental() // untriaged
+@Native("PaymentManager")
+class PaymentManager extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory PaymentManager._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('PaymentManager.instruments')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final PaymentInstruments instruments;
+
+  @DomName('PaymentManager.userHint')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String userHint;
+}
+// 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.
+
+@DocsEditable()
+@DomName('PaymentRequest')
+@Experimental() // untriaged
+@Native("PaymentRequest")
+class PaymentRequest extends EventTarget {
+  factory PaymentRequest(List<Map> methodData, Map details, [Map options]) {
+    var methodData_1 = [];
+    for (var i in methodData) {
+      methodData_1.add(convertDartToNative_Dictionary(i));
+    }
+    if (options != null) {
+      var details_1 = convertDartToNative_Dictionary(details);
+      var options_2 = convertDartToNative_Dictionary(options);
+      return PaymentRequest._create_1(methodData_1, details_1, options_2);
+    }
+    var details_1 = convertDartToNative_Dictionary(details);
+    return PaymentRequest._create_2(methodData_1, details_1);
+  }
+
+  static PaymentRequest _create_1(methodData, details, options) => JS(
+      'PaymentRequest',
+      'new PaymentRequest(#,#,#)',
+      methodData,
+      details,
+      options);
+  static PaymentRequest _create_2(methodData, details) =>
+      JS('PaymentRequest', 'new PaymentRequest(#,#)', methodData, details);
+
+  // To suppress missing implicit constructor warnings.
+  factory PaymentRequest._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('PaymentRequest.id')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String id;
+
+  @DomName('PaymentRequest.shippingAddress')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final PaymentAddress shippingAddress;
+
+  @DomName('PaymentRequest.shippingOption')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String shippingOption;
+
+  @DomName('PaymentRequest.shippingType')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String shippingType;
+
+  @DomName('PaymentRequest.abort')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future abort() native;
+
+  @DomName('PaymentRequest.canMakePayment')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future canMakePayment() native;
+
+  @DomName('PaymentRequest.show')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future show() native;
+}
+
+// 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.
+
+@DocsEditable()
+@DomName('PaymentRequestEvent')
+@Experimental() // untriaged
+@Native("PaymentRequestEvent")
+class PaymentRequestEvent extends ExtendableEvent {
+  // To suppress missing implicit constructor warnings.
+  factory PaymentRequestEvent._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('PaymentRequestEvent.PaymentRequestEvent')
+  @DocsEditable()
+  factory PaymentRequestEvent(String type, Map eventInitDict) {
+    var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
+    return PaymentRequestEvent._create_1(type, eventInitDict_1);
+  }
+  static PaymentRequestEvent _create_1(type, eventInitDict) => JS(
+      'PaymentRequestEvent',
+      'new PaymentRequestEvent(#,#)',
+      type,
+      eventInitDict);
+
+  @DomName('PaymentRequestEvent.instrumentKey')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String instrumentKey;
+
+  @DomName('PaymentRequestEvent.methodData')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final List methodData;
+
+  @DomName('PaymentRequestEvent.modifiers')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final List modifiers;
+
+  @DomName('PaymentRequestEvent.paymentRequestId')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String paymentRequestId;
+
+  @DomName('PaymentRequestEvent.paymentRequestOrigin')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String paymentRequestOrigin;
+
+  @DomName('PaymentRequestEvent.topLevelOrigin')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String topLevelOrigin;
+
+  @DomName('PaymentRequestEvent.total')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Object total;
+
+  @DomName('PaymentRequestEvent.openWindow')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future openWindow(String url) native;
+
+  @DomName('PaymentRequestEvent.respondWith')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void respondWith(Future response) native;
+}
+// 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.
+
+@DocsEditable()
+@DomName('PaymentRequestUpdateEvent')
+@Experimental() // untriaged
+@Native("PaymentRequestUpdateEvent")
+class PaymentRequestUpdateEvent extends Event {
+  // To suppress missing implicit constructor warnings.
+  factory PaymentRequestUpdateEvent._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('PaymentRequestUpdateEvent.PaymentRequestUpdateEvent')
+  @DocsEditable()
+  factory PaymentRequestUpdateEvent(String type, [Map eventInitDict]) {
+    if (eventInitDict != null) {
+      var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
+      return PaymentRequestUpdateEvent._create_1(type, eventInitDict_1);
+    }
+    return PaymentRequestUpdateEvent._create_2(type);
+  }
+  static PaymentRequestUpdateEvent _create_1(type, eventInitDict) => JS(
+      'PaymentRequestUpdateEvent',
+      'new PaymentRequestUpdateEvent(#,#)',
+      type,
+      eventInitDict);
+  static PaymentRequestUpdateEvent _create_2(type) =>
+      JS('PaymentRequestUpdateEvent', 'new PaymentRequestUpdateEvent(#)', type);
+
+  @DomName('PaymentRequestUpdateEvent.updateWith')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void updateWith(Future detailsPromise) native;
+}
+// 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.
+
+@DocsEditable()
+@DomName('PaymentResponse')
+@Experimental() // untriaged
+@Native("PaymentResponse")
+class PaymentResponse extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory PaymentResponse._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('PaymentResponse.details')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Object details;
+
+  @DomName('PaymentResponse.methodName')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String methodName;
+
+  @DomName('PaymentResponse.payerEmail')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String payerEmail;
+
+  @DomName('PaymentResponse.payerName')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String payerName;
+
+  @DomName('PaymentResponse.payerPhone')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String payerPhone;
+
+  @DomName('PaymentResponse.requestId')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String requestId;
+
+  @DomName('PaymentResponse.shippingAddress')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final PaymentAddress shippingAddress;
+
+  @DomName('PaymentResponse.shippingOption')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String shippingOption;
+
+  @DomName('PaymentResponse.complete')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future complete([String paymentResult]) native;
+}
+// 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.
+
+@DocsEditable()
 @DomName('Performance')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
@@ -27822,15 +31797,15 @@
   @DocsEditable()
   final PerformanceNavigation navigation;
 
+  @DomName('Performance.timeOrigin')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num timeOrigin;
+
   @DomName('Performance.timing')
   @DocsEditable()
   final PerformanceTiming timing;
 
-  @DomName('Performance.clearFrameTimings')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void clearFrameTimings() native;
-
   @DomName('Performance.clearMarks')
   @DocsEditable()
   // https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/UserTiming/Overview.html#extensions-performance-interface
@@ -27882,11 +31857,6 @@
   @DocsEditable()
   double now() native;
 
-  @DomName('Performance.setFrameTimingBufferSize')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void setFrameTimingBufferSize(int maxSize) native;
-
   @DomName('Performance.setResourceTimingBufferSize')
   @DocsEditable()
   @Experimental() // untriaged
@@ -27897,25 +31867,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('PerformanceCompositeTiming')
-@Experimental() // untriaged
-@Native("PerformanceCompositeTiming")
-class PerformanceCompositeTiming extends PerformanceEntry {
-  // To suppress missing implicit constructor warnings.
-  factory PerformanceCompositeTiming._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('PerformanceCompositeTiming.sourceFrame')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final int sourceFrame;
-}
-// 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.
-
-@DocsEditable()
 @DomName('PerformanceEntry')
 // http://www.w3.org/TR/performance-timeline/#sec-PerformanceEntry-interface
 @Experimental()
@@ -27928,7 +31879,7 @@
 
   @DomName('PerformanceEntry.duration')
   @DocsEditable()
-  final double duration;
+  final num duration;
 
   @DomName('PerformanceEntry.entryType')
   @DocsEditable()
@@ -27940,7 +31891,26 @@
 
   @DomName('PerformanceEntry.startTime')
   @DocsEditable()
-  final double startTime;
+  final num startTime;
+}
+// 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.
+
+@DocsEditable()
+@DomName('PerformanceLongTaskTiming')
+@Experimental() // untriaged
+@Native("PerformanceLongTaskTiming")
+class PerformanceLongTaskTiming extends PerformanceEntry {
+  // To suppress missing implicit constructor warnings.
+  factory PerformanceLongTaskTiming._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('PerformanceLongTaskTiming.attribution')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final List<TaskAttributionTiming> attribution;
 }
 // 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
@@ -28015,6 +31985,70 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('PerformanceNavigationTiming')
+@Experimental() // untriaged
+@Native("PerformanceNavigationTiming")
+class PerformanceNavigationTiming extends PerformanceResourceTiming {
+  // To suppress missing implicit constructor warnings.
+  factory PerformanceNavigationTiming._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('PerformanceNavigationTiming.domComplete')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num domComplete;
+
+  @DomName('PerformanceNavigationTiming.domContentLoadedEventEnd')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num domContentLoadedEventEnd;
+
+  @DomName('PerformanceNavigationTiming.domContentLoadedEventStart')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num domContentLoadedEventStart;
+
+  @DomName('PerformanceNavigationTiming.domInteractive')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num domInteractive;
+
+  @DomName('PerformanceNavigationTiming.loadEventEnd')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num loadEventEnd;
+
+  @DomName('PerformanceNavigationTiming.loadEventStart')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num loadEventStart;
+
+  @DomName('PerformanceNavigationTiming.redirectCount')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final int redirectCount;
+
+  @DomName('PerformanceNavigationTiming.type')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String type;
+
+  @DomName('PerformanceNavigationTiming.unloadEventEnd')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num unloadEventEnd;
+
+  @DomName('PerformanceNavigationTiming.unloadEventStart')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num unloadEventStart;
+}
+// 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.
+
+@DocsEditable()
 @DomName('PerformanceObserver')
 @Experimental() // untriaged
 @Native("PerformanceObserver")
@@ -28024,6 +32058,14 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('PerformanceObserver.PerformanceObserver')
+  @DocsEditable()
+  factory PerformanceObserver(PerformanceObserverCallback callback) {
+    return PerformanceObserver._create_1(callback);
+  }
+  static PerformanceObserver _create_1(callback) =>
+      JS('PerformanceObserver', 'new PerformanceObserver(#)', callback);
+
   @DomName('PerformanceObserver.disconnect')
   @DocsEditable()
   @Experimental() // untriaged
@@ -28048,6 +32090,16 @@
 // 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.
 
+// WARNING: Do not edit - generated code.
+
+@DomName('PerformanceObserverCallback')
+@Experimental() // untriaged
+typedef void PerformanceObserverCallback(
+    PerformanceObserverEntryList entries, PerformanceObserver observer);
+// 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.
+
 @DocsEditable()
 @DomName('PerformanceObserverEntryList')
 @Experimental() // untriaged
@@ -28078,19 +32130,14 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('PerformanceRenderTiming')
+@DomName('PerformancePaintTiming')
 @Experimental() // untriaged
-@Native("PerformanceRenderTiming")
-class PerformanceRenderTiming extends PerformanceEntry {
+@Native("PerformancePaintTiming")
+class PerformancePaintTiming extends PerformanceEntry {
   // To suppress missing implicit constructor warnings.
-  factory PerformanceRenderTiming._() {
+  factory PerformancePaintTiming._() {
     throw new UnsupportedError("Not supported");
   }
-
-  @DomName('PerformanceRenderTiming.sourceFrame')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final int sourceFrame;
 }
 // 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
@@ -28109,59 +32156,113 @@
 
   @DomName('PerformanceResourceTiming.connectEnd')
   @DocsEditable()
-  final double connectEnd;
+  final num connectEnd;
 
   @DomName('PerformanceResourceTiming.connectStart')
   @DocsEditable()
-  final double connectStart;
+  final num connectStart;
+
+  @DomName('PerformanceResourceTiming.decodedBodySize')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final int decodedBodySize;
 
   @DomName('PerformanceResourceTiming.domainLookupEnd')
   @DocsEditable()
-  final double domainLookupEnd;
+  final num domainLookupEnd;
 
   @DomName('PerformanceResourceTiming.domainLookupStart')
   @DocsEditable()
-  final double domainLookupStart;
+  final num domainLookupStart;
+
+  @DomName('PerformanceResourceTiming.encodedBodySize')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final int encodedBodySize;
 
   @DomName('PerformanceResourceTiming.fetchStart')
   @DocsEditable()
-  final double fetchStart;
+  final num fetchStart;
 
   @DomName('PerformanceResourceTiming.initiatorType')
   @DocsEditable()
   final String initiatorType;
 
+  @DomName('PerformanceResourceTiming.nextHopProtocol')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String nextHopProtocol;
+
   @DomName('PerformanceResourceTiming.redirectEnd')
   @DocsEditable()
-  final double redirectEnd;
+  final num redirectEnd;
 
   @DomName('PerformanceResourceTiming.redirectStart')
   @DocsEditable()
-  final double redirectStart;
+  final num redirectStart;
 
   @DomName('PerformanceResourceTiming.requestStart')
   @DocsEditable()
   @Experimental() // nonstandard
-  final double requestStart;
+  final num requestStart;
 
   @DomName('PerformanceResourceTiming.responseEnd')
   @DocsEditable()
   @Experimental() // nonstandard
-  final double responseEnd;
+  final num responseEnd;
 
   @DomName('PerformanceResourceTiming.responseStart')
   @DocsEditable()
   @Experimental() // nonstandard
-  final double responseStart;
+  final num responseStart;
 
   @DomName('PerformanceResourceTiming.secureConnectionStart')
   @DocsEditable()
-  final double secureConnectionStart;
+  final num secureConnectionStart;
+
+  @DomName('PerformanceResourceTiming.serverTiming')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final List<PerformanceServerTiming> serverTiming;
+
+  @DomName('PerformanceResourceTiming.transferSize')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final int transferSize;
 
   @DomName('PerformanceResourceTiming.workerStart')
   @DocsEditable()
   @Experimental() // untriaged
-  final double workerStart;
+  final num workerStart;
+}
+// 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.
+
+@DocsEditable()
+@DomName('PerformanceServerTiming')
+@Experimental() // untriaged
+@Native("PerformanceServerTiming")
+class PerformanceServerTiming extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory PerformanceServerTiming._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('PerformanceServerTiming.description')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String description;
+
+  @DomName('PerformanceServerTiming.duration')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num duration;
+
+  @DomName('PerformanceServerTiming.name')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String name;
 }
 // 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
@@ -28357,27 +32458,34 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('Perspective')
+@DomName('PhotoCapabilities')
 @Experimental() // untriaged
-@Native("Perspective")
-class Perspective extends TransformComponent {
+@Native("PhotoCapabilities")
+class PhotoCapabilities extends Interceptor {
   // To suppress missing implicit constructor warnings.
-  factory Perspective._() {
+  factory PhotoCapabilities._() {
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Perspective.Perspective')
-  @DocsEditable()
-  factory Perspective(LengthValue length) {
-    return Perspective._create_1(length);
-  }
-  static Perspective _create_1(length) =>
-      JS('Perspective', 'new Perspective(#)', length);
-
-  @DomName('Perspective.length')
+  @DomName('PhotoCapabilities.fillLightMode')
   @DocsEditable()
   @Experimental() // untriaged
-  final LengthValue length;
+  final List fillLightMode;
+
+  @DomName('PhotoCapabilities.imageHeight')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final MediaSettingsRange imageHeight;
+
+  @DomName('PhotoCapabilities.imageWidth')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final MediaSettingsRange imageWidth;
+
+  @DomName('PhotoCapabilities.redEyeReduction')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String redEyeReduction;
 }
 // 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
@@ -28543,7 +32651,7 @@
   @DomName('PointerEvent.height')
   @DocsEditable()
   @Experimental() // untriaged
-  final double height;
+  final num height;
 
   @DomName('PointerEvent.isPrimary')
   @DocsEditable()
@@ -28563,7 +32671,12 @@
   @DomName('PointerEvent.pressure')
   @DocsEditable()
   @Experimental() // untriaged
-  final double pressure;
+  final num pressure;
+
+  @DomName('PointerEvent.tangentialPressure')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num tangentialPressure;
 
   @DomName('PointerEvent.tiltX')
   @DocsEditable()
@@ -28575,10 +32688,20 @@
   @Experimental() // untriaged
   final int tiltY;
 
+  @DomName('PointerEvent.twist')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final int twist;
+
   @DomName('PointerEvent.width')
   @DocsEditable()
   @Experimental() // untriaged
-  final double width;
+  final num width;
+
+  @DomName('PointerEvent.getCoalescedEvents')
+  @DocsEditable()
+  @Experimental() // untriaged
+  List<PointerEvent> getCoalescedEvents() native;
 }
 // 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
@@ -28679,67 +32802,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('PositionSensorVRDevice')
-@Experimental() // untriaged
-@Native("PositionSensorVRDevice")
-class PositionSensorVRDevice extends VRDevice {
-  // To suppress missing implicit constructor warnings.
-  factory PositionSensorVRDevice._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('PositionSensorVRDevice.getImmediateState')
-  @DocsEditable()
-  @Experimental() // untriaged
-  VRPositionState getImmediateState() native;
-
-  @DomName('PositionSensorVRDevice.getState')
-  @DocsEditable()
-  @Experimental() // untriaged
-  VRPositionState getState() native;
-
-  @DomName('PositionSensorVRDevice.resetSensor')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void resetSensor() native;
-}
-// 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.
-
-@DocsEditable()
-@DomName('PositionValue')
-@Experimental() // untriaged
-@Native("PositionValue")
-class PositionValue extends StyleValue {
-  // To suppress missing implicit constructor warnings.
-  factory PositionValue._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('PositionValue.PositionValue')
-  @DocsEditable()
-  factory PositionValue(LengthValue x, LengthValue y) {
-    return PositionValue._create_1(x, y);
-  }
-  static PositionValue _create_1(x, y) =>
-      JS('PositionValue', 'new PositionValue(#,#)', x, y);
-
-  @DomName('PositionValue.x')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final LengthValue x;
-
-  @DomName('PositionValue.y')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final LengthValue y;
-}
-// 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.
-
-@DocsEditable()
 @DomName('HTMLPreElement')
 @Native("HTMLPreElement")
 class PreElement extends HtmlElement {
@@ -28848,6 +32910,11 @@
   @Experimental() // untriaged
   final String state;
 
+  @DomName('PresentationConnection.url')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String url;
+
   @DomName('PresentationConnection.close')
   @DocsEditable()
   @Experimental() // untriaged
@@ -28940,24 +33007,38 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('PresentationConnectionList')
+@Experimental() // untriaged
+@Native("PresentationConnectionList")
+class PresentationConnectionList extends EventTarget {
+  // To suppress missing implicit constructor warnings.
+  factory PresentationConnectionList._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('PresentationConnectionList.connections')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final List<PresentationConnection> connections;
+}
+// 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.
+
+@DocsEditable()
 @DomName('PresentationReceiver')
 @Experimental() // untriaged
 @Native("PresentationReceiver")
-class PresentationReceiver extends EventTarget {
+class PresentationReceiver extends Interceptor {
   // To suppress missing implicit constructor warnings.
   factory PresentationReceiver._() {
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('PresentationReceiver.getConnection')
+  @DomName('PresentationReceiver.connectionList')
   @DocsEditable()
   @Experimental() // untriaged
-  Future getConnection() native;
-
-  @DomName('PresentationReceiver.getConnections')
-  @DocsEditable()
-  @Experimental() // untriaged
-  Future getConnections() native;
+  final Future connectionList;
 }
 // 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
@@ -28975,11 +33056,20 @@
 
   @DomName('PresentationRequest.PresentationRequest')
   @DocsEditable()
-  factory PresentationRequest(String url) {
-    return PresentationRequest._create_1(url);
+  factory PresentationRequest(url_OR_urls) {
+    if ((url_OR_urls is String)) {
+      return PresentationRequest._create_1(url_OR_urls);
+    }
+    if ((url_OR_urls is List<String>)) {
+      List urls_1 = convertDartToNative_StringArray(url_OR_urls);
+      return PresentationRequest._create_2(urls_1);
+    }
+    throw new ArgumentError("Incorrect number or type of arguments");
   }
-  static PresentationRequest _create_1(url) =>
-      JS('PresentationRequest', 'new PresentationRequest(#)', url);
+  static PresentationRequest _create_1(url_OR_urls) =>
+      JS('PresentationRequest', 'new PresentationRequest(#)', url_OR_urls);
+  static PresentationRequest _create_2(url_OR_urls) =>
+      JS('PresentationRequest', 'new PresentationRequest(#)', url_OR_urls);
 
   @DomName('PresentationRequest.getAvailability')
   @DocsEditable()
@@ -29062,7 +33152,7 @@
 
   @DomName('HTMLProgressElement.position')
   @DocsEditable()
-  final double position;
+  final num position;
 
   @DomName('HTMLProgressElement.value')
   @DocsEditable()
@@ -29148,6 +33238,30 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('PublicKeyCredential')
+@Experimental() // untriaged
+@Native("PublicKeyCredential")
+class PublicKeyCredential extends Credential {
+  // To suppress missing implicit constructor warnings.
+  factory PublicKeyCredential._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('PublicKeyCredential.rawId')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final ByteBuffer rawId;
+
+  @DomName('PublicKeyCredential.response')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final AuthenticatorResponse response;
+}
+// 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.
+
+@DocsEditable()
 @DomName('PushEvent')
 @Experimental() // untriaged
 @Native("PushEvent")
@@ -29189,6 +33303,11 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('PushManager.supportedContentEncodings')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final List<String> supportedContentEncodings;
+
   @DomName('PushManager.getSubscription')
   @DocsEditable()
   @Experimental() // untriaged
@@ -29291,6 +33410,16 @@
   @Experimental() // untriaged
   final String endpoint;
 
+  @DomName('PushSubscription.expirationTime')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final int expirationTime;
+
+  @DomName('PushSubscription.options')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final PushSubscriptionOptions options;
+
   @DomName('PushSubscription.getKey')
   @DocsEditable()
   @Experimental() // untriaged
@@ -29306,6 +33435,30 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('PushSubscriptionOptions')
+@Experimental() // untriaged
+@Native("PushSubscriptionOptions")
+class PushSubscriptionOptions extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory PushSubscriptionOptions._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('PushSubscriptionOptions.applicationServerKey')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final ByteBuffer applicationServerKey;
+
+  @DomName('PushSubscriptionOptions.userVisibleOnly')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final bool userVisibleOnly;
+}
+// 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.
+
+@DocsEditable()
 @DomName('HTMLQuoteElement')
 @Native("HTMLQuoteElement")
 class QuoteElement extends HtmlElement {
@@ -29466,11 +33619,12 @@
   @DocsEditable()
   Rectangle getBoundingClientRect() native;
 
+  @JSName('getClientRects')
   @DomName('Range.getClientRects')
   @DocsEditable()
-  @Returns('_ClientRectList|Null')
-  @Creates('_ClientRectList')
-  List<Rectangle> getClientRects() native;
+  @Returns('DomRectList|Null')
+  @Creates('DomRectList')
+  List<Rectangle> _getClientRects() native;
 
   @DomName('Range.insertNode')
   @DocsEditable()
@@ -29516,6 +33670,24 @@
   @DocsEditable()
   void surroundContents(Node newParent) native;
 
+  @DomName('Range.getClientRects')
+  @DocsEditable()
+  @Returns('DomRectList|Null')
+  @Creates('DomRectList')
+  List<Rectangle> getClientRects() {
+    var value = _getClientRects();
+
+    // If no prototype we need one for the world to hookup to the proper Dart class.
+    var jsProto = JS('', '#.prototype', value);
+    if (jsProto == null) {
+      JS('', '#.prototype = Object.create(null)', value);
+    }
+
+    applyExtension('DOMRectList', value);
+
+    return value;
+  }
+
   /**
    * Checks if createContextualFragment is supported.
    *
@@ -29531,136 +33703,163 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('ReadableByteStream')
+@DomName('RelatedApplication')
 @Experimental() // untriaged
-@Native("ReadableByteStream")
-class ReadableByteStream extends Interceptor {
+@Native("RelatedApplication")
+class RelatedApplication extends Interceptor {
   // To suppress missing implicit constructor warnings.
-  factory ReadableByteStream._() {
+  factory RelatedApplication._() {
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ReadableByteStream.cancel')
+  @DomName('RelatedApplication.id')
   @DocsEditable()
   @Experimental() // untriaged
-  Future cancel([Object reason]) native;
+  final String id;
 
-  @DomName('ReadableByteStream.getReader')
+  @DomName('RelatedApplication.platform')
   @DocsEditable()
   @Experimental() // untriaged
-  ReadableByteStreamReader getReader() native;
+  final String platform;
+
+  @DomName('RelatedApplication.url')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String url;
 }
 // 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.
 
 @DocsEditable()
-@DomName('ReadableByteStreamReader')
+@DomName('RelativeOrientationSensor')
 @Experimental() // untriaged
-@Native("ReadableByteStreamReader")
-class ReadableByteStreamReader extends Interceptor {
+@Native("RelativeOrientationSensor")
+class RelativeOrientationSensor extends OrientationSensor {
   // To suppress missing implicit constructor warnings.
-  factory ReadableByteStreamReader._() {
+  factory RelativeOrientationSensor._() {
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ReadableByteStreamReader.closed')
+  @DomName('RelativeOrientationSensor.RelativeOrientationSensor')
   @DocsEditable()
-  @Experimental() // untriaged
-  final Future closed;
-
-  @DomName('ReadableByteStreamReader.cancel')
-  @DocsEditable()
-  @Experimental() // untriaged
-  Future cancel([Object reason]) native;
-
-  @DomName('ReadableByteStreamReader.read')
-  @DocsEditable()
-  @Experimental() // untriaged
-  Future read() native;
-
-  @DomName('ReadableByteStreamReader.releaseLock')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void releaseLock() native;
-}
-// 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.
-
-@DocsEditable()
-@DomName('ReadableStreamReader')
-@Experimental() // untriaged
-@Native("ReadableStreamReader")
-class ReadableStreamReader extends Interceptor {
-  // To suppress missing implicit constructor warnings.
-  factory ReadableStreamReader._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('ReadableStreamReader.closed')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final Future closed;
-
-  @DomName('ReadableStreamReader.cancel')
-  @DocsEditable()
-  @Experimental() // untriaged
-  Future cancel([Object reason]) native;
-
-  @DomName('ReadableStreamReader.read')
-  @DocsEditable()
-  @Experimental() // untriaged
-  Future read() native;
-
-  @DomName('ReadableStreamReader.releaseLock')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void releaseLock() native;
-}
-// 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.
-
-@DocsEditable()
-@DomName('RelatedEvent')
-@Experimental() // untriaged
-@Native("RelatedEvent")
-class RelatedEvent extends Event {
-  // To suppress missing implicit constructor warnings.
-  factory RelatedEvent._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('RelatedEvent.RelatedEvent')
-  @DocsEditable()
-  factory RelatedEvent(String type, [Map eventInitDict]) {
-    if (eventInitDict != null) {
-      var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
-      return RelatedEvent._create_1(type, eventInitDict_1);
+  factory RelativeOrientationSensor([Map sensorOptions]) {
+    if (sensorOptions != null) {
+      var sensorOptions_1 = convertDartToNative_Dictionary(sensorOptions);
+      return RelativeOrientationSensor._create_1(sensorOptions_1);
     }
-    return RelatedEvent._create_2(type);
+    return RelativeOrientationSensor._create_2();
   }
-  static RelatedEvent _create_1(type, eventInitDict) =>
-      JS('RelatedEvent', 'new RelatedEvent(#,#)', type, eventInitDict);
-  static RelatedEvent _create_2(type) =>
-      JS('RelatedEvent', 'new RelatedEvent(#)', type);
-
-  @DomName('RelatedEvent.relatedTarget')
-  @DocsEditable()
-  @Experimental() // untriaged
-  EventTarget get relatedTarget =>
-      _convertNativeToDart_EventTarget(this._get_relatedTarget);
-  @JSName('relatedTarget')
-  @DomName('RelatedEvent.relatedTarget')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final dynamic _get_relatedTarget;
+  static RelativeOrientationSensor _create_1(sensorOptions) => JS(
+      'RelativeOrientationSensor',
+      'new RelativeOrientationSensor(#)',
+      sensorOptions);
+  static RelativeOrientationSensor _create_2() =>
+      JS('RelativeOrientationSensor', 'new RelativeOrientationSensor()');
 }
 // 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.
 
+@DocsEditable()
+@DomName('RemotePlayback')
+@Experimental() // untriaged
+@Native("RemotePlayback")
+class RemotePlayback extends EventTarget {
+  // To suppress missing implicit constructor warnings.
+  factory RemotePlayback._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('RemotePlayback.state')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String state;
+
+  @DomName('RemotePlayback.cancelWatchAvailability')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future cancelWatchAvailability([int id]) native;
+
+  @DomName('RemotePlayback.prompt')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future prompt() native;
+
+  @DomName('RemotePlayback.watchAvailability')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future watchAvailability(RemotePlaybackAvailabilityCallback callback) native;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+@DomName('RemotePlaybackAvailabilityCallback')
+@Experimental() // untriaged
+typedef void RemotePlaybackAvailabilityCallback(bool available);
+// 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.
+
+@DocsEditable()
+@DomName('ReportBody')
+@Experimental() // untriaged
+@Native("ReportBody")
+class ReportBody extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory ReportBody._() {
+    throw new UnsupportedError("Not supported");
+  }
+}
+// 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.
+
+@DocsEditable()
+@DomName('ReportingObserver')
+@Experimental() // untriaged
+@Native("ReportingObserver")
+class ReportingObserver extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory ReportingObserver._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('ReportingObserver.ReportingObserver')
+  @DocsEditable()
+  factory ReportingObserver(ReportingObserverCallback callback) {
+    return ReportingObserver._create_1(callback);
+  }
+  static ReportingObserver _create_1(callback) =>
+      JS('ReportingObserver', 'new ReportingObserver(#)', callback);
+
+  @DomName('ReportingObserver.disconnect')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void disconnect() native;
+
+  @DomName('ReportingObserver.observe')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void observe() native;
+}
+// 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.
+
+// WARNING: Do not edit - generated code.
+
+@DomName('ReportingObserverCallback')
+@Experimental() // untriaged
+typedef void ReportingObserverCallback(
+    List<_Report> reports, ReportingObserver observer);
+// 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.
+
 // WARNING: Do not edit - generated code.
 
 @DomName('RequestAnimationFrameCallback')
@@ -29670,49 +33869,71 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('Rotation')
+@DomName('ResizeObserver')
 @Experimental() // untriaged
-@Native("Rotation")
-class Rotation extends TransformComponent {
+@Native("ResizeObserver")
+class ResizeObserver extends Interceptor {
   // To suppress missing implicit constructor warnings.
-  factory Rotation._() {
+  factory ResizeObserver._() {
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('Rotation.Rotation')
+  @DomName('ResizeObserver.ResizeObserver')
   @DocsEditable()
-  factory Rotation(num angle, [num x, num y, num z]) {
-    if ((angle is num) && x == null && y == null && z == null) {
-      return Rotation._create_1(angle);
-    }
-    if ((z is num) && (y is num) && (x is num) && (angle is num)) {
-      return Rotation._create_2(angle, x, y, z);
-    }
-    throw new ArgumentError("Incorrect number or type of arguments");
+  factory ResizeObserver(ResizeObserverCallback callback) {
+    return ResizeObserver._create_1(callback);
   }
-  static Rotation _create_1(angle) => JS('Rotation', 'new Rotation(#)', angle);
-  static Rotation _create_2(angle, x, y, z) =>
-      JS('Rotation', 'new Rotation(#,#,#,#)', angle, x, y, z);
+  static ResizeObserver _create_1(callback) =>
+      JS('ResizeObserver', 'new ResizeObserver(#)', callback);
 
-  @DomName('Rotation.angle')
+  @DomName('ResizeObserver.disconnect')
   @DocsEditable()
   @Experimental() // untriaged
-  final double angle;
+  void disconnect() native;
 
-  @DomName('Rotation.x')
+  @DomName('ResizeObserver.observe')
   @DocsEditable()
   @Experimental() // untriaged
-  final double x;
+  void observe(Element target) native;
 
-  @DomName('Rotation.y')
+  @DomName('ResizeObserver.unobserve')
   @DocsEditable()
   @Experimental() // untriaged
-  final double y;
+  void unobserve(Element target) native;
+}
+// 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.
 
-  @DomName('Rotation.z')
+// WARNING: Do not edit - generated code.
+
+@DomName('ResizeObserverCallback')
+@Experimental() // untriaged
+typedef void ResizeObserverCallback(
+    List<ResizeObserverEntry> entries, ResizeObserver observer);
+// 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.
+
+@DocsEditable()
+@DomName('ResizeObserverEntry')
+@Experimental() // untriaged
+@Native("ResizeObserverEntry")
+class ResizeObserverEntry extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory ResizeObserverEntry._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('ResizeObserverEntry.contentRect')
   @DocsEditable()
   @Experimental() // untriaged
-  final double z;
+  final DomRectReadOnly contentRect;
+
+  @DomName('ResizeObserverEntry.target')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Element target;
 }
 // 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
@@ -29732,6 +33953,11 @@
   @DocsEditable()
   @Experimental() // untriaged
   final int expires;
+
+  @DomName('RTCCertificate.getFingerprints')
+  @DocsEditable()
+  @Experimental() // untriaged
+  List<Map> getFingerprints() native;
 }
 // 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
@@ -29910,6 +34136,18 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('RTCDataChannelEvent.RTCDataChannelEvent')
+  @DocsEditable()
+  factory RtcDataChannelEvent(String type, Map eventInitDict) {
+    var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
+    return RtcDataChannelEvent._create_1(type, eventInitDict_1);
+  }
+  static RtcDataChannelEvent _create_1(type, eventInitDict) => JS(
+      'RtcDataChannelEvent',
+      'new RTCDataChannelEvent(#,#)',
+      type,
+      eventInitDict);
+
   @DomName('RTCDataChannelEvent.channel')
   @DocsEditable()
   final RtcDataChannel channel;
@@ -30048,19 +34286,44 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('RTCIceCandidateEvent')
-// http://dev.w3.org/2011/webrtc/editor/webrtc.html#rtcicecandidate-type
-@Experimental()
-@Native("RTCIceCandidateEvent,RTCPeerConnectionIceEvent")
-class RtcIceCandidateEvent extends Event {
+@DomName('RTCLegacyStatsReport')
+@Experimental() // untriaged
+@Native("RTCLegacyStatsReport")
+class RtcLegacyStatsReport extends Interceptor {
   // To suppress missing implicit constructor warnings.
-  factory RtcIceCandidateEvent._() {
+  factory RtcLegacyStatsReport._() {
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('RTCIceCandidateEvent.candidate')
+  @DomName('RTCLegacyStatsReport.id')
   @DocsEditable()
-  final RtcIceCandidate candidate;
+  @Experimental() // untriaged
+  final String id;
+
+  @DomName('RTCLegacyStatsReport.timestamp')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DateTime get timestamp => convertNativeToDart_DateTime(this._get_timestamp);
+  @JSName('timestamp')
+  @DomName('RTCLegacyStatsReport.timestamp')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final dynamic _get_timestamp;
+
+  @DomName('RTCLegacyStatsReport.type')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String type;
+
+  @DomName('RTCLegacyStatsReport.names')
+  @DocsEditable()
+  @Experimental() // untriaged
+  List<String> names() native;
+
+  @DomName('RTCLegacyStatsReport.stat')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String stat(String name) native;
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -30180,8 +34443,9 @@
    */
   @DomName('RTCPeerConnection.icecandidateEvent')
   @DocsEditable()
-  static const EventStreamProvider<RtcIceCandidateEvent> iceCandidateEvent =
-      const EventStreamProvider<RtcIceCandidateEvent>('icecandidate');
+  static const EventStreamProvider<RtcPeerConnectionIceEvent>
+      iceCandidateEvent =
+      const EventStreamProvider<RtcPeerConnectionIceEvent>('icecandidate');
 
   /**
    * Static factory designed to expose `iceconnectionstatechange` events to event
@@ -30249,7 +34513,7 @@
 
   @DomName('RTCPeerConnection.addIceCandidate')
   @DocsEditable()
-  Future addIceCandidate(candidate,
+  Future addIceCandidate(Object candidate,
       [VoidCallback successCallback,
       RtcPeerConnectionErrorCallback failureCallback]) native;
 
@@ -30274,34 +34538,66 @@
   @DocsEditable()
   void _addStream_2(MediaStream stream) native;
 
+  @DomName('RTCPeerConnection.addTrack')
+  @DocsEditable()
+  @Experimental() // untriaged
+  RtcRtpSender addTrack(MediaStreamTrack track, MediaStream streams) native;
+
   @DomName('RTCPeerConnection.close')
   @DocsEditable()
   void close() native;
 
   @DomName('RTCPeerConnection.createAnswer')
   @DocsEditable()
-  void _createAnswer(_RtcSessionDescriptionCallback successCallback,
+  Future _createAnswer(
+      [options_OR_successCallback,
       RtcPeerConnectionErrorCallback failureCallback,
-      [Map mediaConstraints]) {
-    if (mediaConstraints != null) {
-      var mediaConstraints_1 = convertDartToNative_Dictionary(mediaConstraints);
-      _createAnswer_1(successCallback, failureCallback, mediaConstraints_1);
-      return;
+      Map mediaConstraints]) {
+    if (options_OR_successCallback == null &&
+        failureCallback == null &&
+        mediaConstraints == null) {
+      return _createAnswer_1();
     }
-    _createAnswer_2(successCallback, failureCallback);
-    return;
+    if ((options_OR_successCallback is Map) &&
+        failureCallback == null &&
+        mediaConstraints == null) {
+      var options_1 =
+          convertDartToNative_Dictionary(options_OR_successCallback);
+      return _createAnswer_2(options_1);
+    }
+    if (failureCallback != null &&
+        (options_OR_successCallback is _RtcSessionDescriptionCallback) &&
+        mediaConstraints == null) {
+      return _createAnswer_3(options_OR_successCallback, failureCallback);
+    }
+    if (mediaConstraints != null &&
+        failureCallback != null &&
+        (options_OR_successCallback is _RtcSessionDescriptionCallback)) {
+      var mediaConstraints_1 = convertDartToNative_Dictionary(mediaConstraints);
+      return _createAnswer_4(
+          options_OR_successCallback, failureCallback, mediaConstraints_1);
+    }
+    throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   @JSName('createAnswer')
   @DomName('RTCPeerConnection.createAnswer')
   @DocsEditable()
-  void _createAnswer_1(_RtcSessionDescriptionCallback successCallback,
-      RtcPeerConnectionErrorCallback failureCallback, mediaConstraints) native;
+  Future _createAnswer_1() native;
   @JSName('createAnswer')
   @DomName('RTCPeerConnection.createAnswer')
   @DocsEditable()
-  void _createAnswer_2(_RtcSessionDescriptionCallback successCallback,
+  Future _createAnswer_2(options) native;
+  @JSName('createAnswer')
+  @DomName('RTCPeerConnection.createAnswer')
+  @DocsEditable()
+  Future _createAnswer_3(_RtcSessionDescriptionCallback successCallback,
       RtcPeerConnectionErrorCallback failureCallback) native;
+  @JSName('createAnswer')
+  @DomName('RTCPeerConnection.createAnswer')
+  @DocsEditable()
+  Future _createAnswer_4(_RtcSessionDescriptionCallback successCallback,
+      RtcPeerConnectionErrorCallback failureCallback, mediaConstraints) native;
 
   @JSName('createDTMFSender')
   @DomName('RTCPeerConnection.createDTMFSender')
@@ -30310,10 +34606,10 @@
 
   @DomName('RTCPeerConnection.createDataChannel')
   @DocsEditable()
-  RtcDataChannel createDataChannel(String label, [Map options]) {
-    if (options != null) {
-      var options_1 = convertDartToNative_Dictionary(options);
-      return _createDataChannel_1(label, options_1);
+  RtcDataChannel createDataChannel(String label, [Map dataChannelDict]) {
+    if (dataChannelDict != null) {
+      var dataChannelDict_1 = convertDartToNative_Dictionary(dataChannelDict);
+      return _createDataChannel_1(label, dataChannelDict_1);
     }
     return _createDataChannel_2(label);
   }
@@ -30321,7 +34617,7 @@
   @JSName('createDataChannel')
   @DomName('RTCPeerConnection.createDataChannel')
   @DocsEditable()
-  RtcDataChannel _createDataChannel_1(label, options) native;
+  RtcDataChannel _createDataChannel_1(label, dataChannelDict) native;
   @JSName('createDataChannel')
   @DomName('RTCPeerConnection.createDataChannel')
   @DocsEditable()
@@ -30329,62 +34625,123 @@
 
   @DomName('RTCPeerConnection.createOffer')
   @DocsEditable()
-  void _createOffer(_RtcSessionDescriptionCallback successCallback,
+  Future _createOffer(
+      [options_OR_successCallback,
       RtcPeerConnectionErrorCallback failureCallback,
-      [Map rtcOfferOptions]) {
-    if (rtcOfferOptions != null) {
-      var rtcOfferOptions_1 = convertDartToNative_Dictionary(rtcOfferOptions);
-      _createOffer_1(successCallback, failureCallback, rtcOfferOptions_1);
-      return;
+      Map rtcOfferOptions]) {
+    if (options_OR_successCallback == null &&
+        failureCallback == null &&
+        rtcOfferOptions == null) {
+      return _createOffer_1();
     }
-    _createOffer_2(successCallback, failureCallback);
-    return;
+    if ((options_OR_successCallback is Map) &&
+        failureCallback == null &&
+        rtcOfferOptions == null) {
+      var options_1 =
+          convertDartToNative_Dictionary(options_OR_successCallback);
+      return _createOffer_2(options_1);
+    }
+    if (failureCallback != null &&
+        (options_OR_successCallback is _RtcSessionDescriptionCallback) &&
+        rtcOfferOptions == null) {
+      return _createOffer_3(options_OR_successCallback, failureCallback);
+    }
+    if (rtcOfferOptions != null &&
+        failureCallback != null &&
+        (options_OR_successCallback is _RtcSessionDescriptionCallback)) {
+      var rtcOfferOptions_1 = convertDartToNative_Dictionary(rtcOfferOptions);
+      return _createOffer_4(
+          options_OR_successCallback, failureCallback, rtcOfferOptions_1);
+    }
+    throw new ArgumentError("Incorrect number or type of arguments");
   }
 
   @JSName('createOffer')
   @DomName('RTCPeerConnection.createOffer')
   @DocsEditable()
-  void _createOffer_1(_RtcSessionDescriptionCallback successCallback,
-      RtcPeerConnectionErrorCallback failureCallback, rtcOfferOptions) native;
+  Future _createOffer_1() native;
   @JSName('createOffer')
   @DomName('RTCPeerConnection.createOffer')
   @DocsEditable()
-  void _createOffer_2(_RtcSessionDescriptionCallback successCallback,
+  Future _createOffer_2(options) native;
+  @JSName('createOffer')
+  @DomName('RTCPeerConnection.createOffer')
+  @DocsEditable()
+  Future _createOffer_3(_RtcSessionDescriptionCallback successCallback,
       RtcPeerConnectionErrorCallback failureCallback) native;
+  @JSName('createOffer')
+  @DomName('RTCPeerConnection.createOffer')
+  @DocsEditable()
+  Future _createOffer_4(_RtcSessionDescriptionCallback successCallback,
+      RtcPeerConnectionErrorCallback failureCallback, rtcOfferOptions) native;
 
   @DomName('RTCPeerConnection.getLocalStreams')
   @DocsEditable()
   List<MediaStream> getLocalStreams() native;
 
+  @DomName('RTCPeerConnection.getReceivers')
+  @DocsEditable()
+  @Experimental() // untriaged
+  List<RtcRtpReceiver> getReceivers() native;
+
   @DomName('RTCPeerConnection.getRemoteStreams')
   @DocsEditable()
   List<MediaStream> getRemoteStreams() native;
 
+  @DomName('RTCPeerConnection.getSenders')
+  @DocsEditable()
+  @Experimental() // untriaged
+  List<RtcRtpSender> getSenders() native;
+
   @JSName('getStats')
   @DomName('RTCPeerConnection.getStats')
   @DocsEditable()
-  void _getStats(RtcStatsCallback successCallback, MediaStreamTrack selector)
-      native;
-
-  @DomName('RTCPeerConnection.getStreamById')
-  @DocsEditable()
-  MediaStream getStreamById(String streamId) native;
+  Future _getStats(
+      [RtcStatsCallback successCallback, MediaStreamTrack selector]) native;
 
   @DomName('RTCPeerConnection.removeStream')
   @DocsEditable()
   void removeStream(MediaStream stream) native;
 
-  @JSName('setLocalDescription')
+  @DomName('RTCPeerConnection.removeTrack')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void removeTrack(RtcRtpSender sender) native;
+
+  @DomName('RTCPeerConnection.setConfiguration')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void setConfiguration(Map configuration) {
+    var configuration_1 = convertDartToNative_Dictionary(configuration);
+    _setConfiguration_1(configuration_1);
+    return;
+  }
+
+  @JSName('setConfiguration')
+  @DomName('RTCPeerConnection.setConfiguration')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _setConfiguration_1(configuration) native;
+
   @DomName('RTCPeerConnection.setLocalDescription')
   @DocsEditable()
-  Future _setLocalDescription(
-      RtcSessionDescription description, VoidCallback successCallback,
-      [RtcPeerConnectionErrorCallback failureCallback]) native;
+  Future _setLocalDescription(Map description, VoidCallback successCallback,
+      [RtcPeerConnectionErrorCallback failureCallback]) {
+    var description_1 = convertDartToNative_Dictionary(description);
+    return _setLocalDescription_1(
+        description_1, successCallback, failureCallback);
+  }
 
   @JSName('setLocalDescription')
   @DomName('RTCPeerConnection.setLocalDescription')
   @DocsEditable()
-  Future setLocalDescription(RtcSessionDescription description) {
+  Future _setLocalDescription_1(description, VoidCallback successCallback,
+      RtcPeerConnectionErrorCallback failureCallback) native;
+
+  @JSName('setLocalDescription')
+  @DomName('RTCPeerConnection.setLocalDescription')
+  @DocsEditable()
+  Future setLocalDescription(Map description) {
     var completer = new Completer();
     _setLocalDescription(description, () {
       completer.complete();
@@ -30394,17 +34751,25 @@
     return completer.future;
   }
 
-  @JSName('setRemoteDescription')
   @DomName('RTCPeerConnection.setRemoteDescription')
   @DocsEditable()
-  Future _setRemoteDescription(
-      RtcSessionDescription description, VoidCallback successCallback,
-      [RtcPeerConnectionErrorCallback failureCallback]) native;
+  Future _setRemoteDescription(Map description, VoidCallback successCallback,
+      [RtcPeerConnectionErrorCallback failureCallback]) {
+    var description_1 = convertDartToNative_Dictionary(description);
+    return _setRemoteDescription_1(
+        description_1, successCallback, failureCallback);
+  }
 
   @JSName('setRemoteDescription')
   @DomName('RTCPeerConnection.setRemoteDescription')
   @DocsEditable()
-  Future setRemoteDescription(RtcSessionDescription description) {
+  Future _setRemoteDescription_1(description, VoidCallback successCallback,
+      RtcPeerConnectionErrorCallback failureCallback) native;
+
+  @JSName('setRemoteDescription')
+  @DomName('RTCPeerConnection.setRemoteDescription')
+  @DocsEditable()
+  Future setRemoteDescription(Map description) {
     var completer = new Completer();
     _setRemoteDescription(description, () {
       completer.complete();
@@ -30414,37 +34779,6 @@
     return completer.future;
   }
 
-  @DomName('RTCPeerConnection.updateIce')
-  @DocsEditable()
-  void updateIce([Map configuration, Map mediaConstraints]) {
-    if (mediaConstraints != null) {
-      var configuration_1 = convertDartToNative_Dictionary(configuration);
-      var mediaConstraints_2 = convertDartToNative_Dictionary(mediaConstraints);
-      _updateIce_1(configuration_1, mediaConstraints_2);
-      return;
-    }
-    if (configuration != null) {
-      var configuration_1 = convertDartToNative_Dictionary(configuration);
-      _updateIce_2(configuration_1);
-      return;
-    }
-    _updateIce_3();
-    return;
-  }
-
-  @JSName('updateIce')
-  @DomName('RTCPeerConnection.updateIce')
-  @DocsEditable()
-  void _updateIce_1(configuration, mediaConstraints) native;
-  @JSName('updateIce')
-  @DomName('RTCPeerConnection.updateIce')
-  @DocsEditable()
-  void _updateIce_2(configuration) native;
-  @JSName('updateIce')
-  @DomName('RTCPeerConnection.updateIce')
-  @DocsEditable()
-  void _updateIce_3() native;
-
   /// Stream of `addstream` events handled by this [RtcPeerConnection].
   @DomName('RTCPeerConnection.onaddstream')
   @DocsEditable()
@@ -30459,7 +34793,7 @@
   /// Stream of `icecandidate` events handled by this [RtcPeerConnection].
   @DomName('RTCPeerConnection.onicecandidate')
   @DocsEditable()
-  Stream<RtcIceCandidateEvent> get onIceCandidate =>
+  Stream<RtcPeerConnectionIceEvent> get onIceCandidate =>
       iceCandidateEvent.forTarget(this);
 
   /// Stream of `iceconnectionstatechange` events handled by this [RtcPeerConnection].
@@ -30486,6 +34820,109 @@
   Stream<Event> get onSignalingStateChange =>
       signalingStateChangeEvent.forTarget(this);
 }
+// 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.
+
+@DocsEditable()
+@DomName('RTCPeerConnectionIceEvent')
+@Experimental() // untriaged
+@Native("RTCPeerConnectionIceEvent")
+class RtcPeerConnectionIceEvent extends Event {
+  // To suppress missing implicit constructor warnings.
+  factory RtcPeerConnectionIceEvent._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('RTCPeerConnectionIceEvent.RTCPeerConnectionIceEvent')
+  @DocsEditable()
+  factory RtcPeerConnectionIceEvent(String type, [Map eventInitDict]) {
+    if (eventInitDict != null) {
+      var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
+      return RtcPeerConnectionIceEvent._create_1(type, eventInitDict_1);
+    }
+    return RtcPeerConnectionIceEvent._create_2(type);
+  }
+  static RtcPeerConnectionIceEvent _create_1(type, eventInitDict) => JS(
+      'RtcPeerConnectionIceEvent',
+      'new RTCPeerConnectionIceEvent(#,#)',
+      type,
+      eventInitDict);
+  static RtcPeerConnectionIceEvent _create_2(type) =>
+      JS('RtcPeerConnectionIceEvent', 'new RTCPeerConnectionIceEvent(#)', type);
+
+  @DomName('RTCPeerConnectionIceEvent.candidate')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final RtcIceCandidate candidate;
+}
+// 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.
+
+@DocsEditable()
+@DomName('RTCRtpContributingSource')
+@Experimental() // untriaged
+@Native("RTCRtpContributingSource")
+class RtcRtpContributingSource extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory RtcRtpContributingSource._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('RTCRtpContributingSource.source')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final int source;
+
+  @DomName('RTCRtpContributingSource.timestamp')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num timestamp;
+}
+// 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.
+
+@DocsEditable()
+@DomName('RTCRtpReceiver')
+@Experimental() // untriaged
+@Native("RTCRtpReceiver")
+class RtcRtpReceiver extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory RtcRtpReceiver._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('RTCRtpReceiver.track')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final MediaStreamTrack track;
+
+  @DomName('RTCRtpReceiver.getContributingSources')
+  @DocsEditable()
+  @Experimental() // untriaged
+  List<RtcRtpContributingSource> getContributingSources() native;
+}
+// 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.
+
+@DocsEditable()
+@DomName('RTCRtpSender')
+@Experimental() // untriaged
+@Native("RTCRtpSender")
+class RtcRtpSender extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory RtcRtpSender._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('RTCRtpSender.track')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final MediaStreamTrack track;
+}
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -30536,31 +34973,6 @@
   factory RtcStatsReport._() {
     throw new UnsupportedError("Not supported");
   }
-
-  @DomName('RTCStatsReport.id')
-  @DocsEditable()
-  final String id;
-
-  @DomName('RTCStatsReport.timestamp')
-  @DocsEditable()
-  DateTime get timestamp => convertNativeToDart_DateTime(this._get_timestamp);
-  @JSName('timestamp')
-  @DomName('RTCStatsReport.timestamp')
-  @DocsEditable()
-  @Creates('Null')
-  final dynamic _get_timestamp;
-
-  @DomName('RTCStatsReport.type')
-  @DocsEditable()
-  final String type;
-
-  @DomName('RTCStatsReport.names')
-  @DocsEditable()
-  List<String> names() native;
-
-  @DomName('RTCStatsReport.stat')
-  @DocsEditable()
-  String stat(String name) native;
 }
 // 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
@@ -30579,11 +34991,49 @@
 
   @DomName('RTCStatsResponse.namedItem')
   @DocsEditable()
-  RtcStatsReport namedItem(String name) native;
+  RtcLegacyStatsReport namedItem(String name) native;
 
   @DomName('RTCStatsResponse.result')
   @DocsEditable()
-  List<RtcStatsReport> result() native;
+  List<RtcLegacyStatsReport> result() native;
+}
+// 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.
+
+@DocsEditable()
+@DomName('RTCTrackEvent')
+@Experimental() // untriaged
+@Native("RTCTrackEvent")
+class RtcTrackEvent extends Event {
+  // To suppress missing implicit constructor warnings.
+  factory RtcTrackEvent._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('RTCTrackEvent.RTCTrackEvent')
+  @DocsEditable()
+  factory RtcTrackEvent(String type, Map eventInitDict) {
+    var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
+    return RtcTrackEvent._create_1(type, eventInitDict_1);
+  }
+  static RtcTrackEvent _create_1(type, eventInitDict) =>
+      JS('RtcTrackEvent', 'new RTCTrackEvent(#,#)', type, eventInitDict);
+
+  @DomName('RTCTrackEvent.receiver')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final RtcRtpReceiver receiver;
+
+  @DomName('RTCTrackEvent.streams')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final List<MediaStream> streams;
+
+  @DomName('RTCTrackEvent.track')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final MediaStreamTrack track;
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -30747,11 +35197,10 @@
   @Experimental() // untriaged
   String integrity;
 
-  @DomName('HTMLScriptElement.nonce')
+  @DomName('HTMLScriptElement.noModule')
   @DocsEditable()
-  // https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html#interaction-with-the-script-src-directive
-  @Experimental()
-  String nonce;
+  @Experimental() // untriaged
+  bool noModule;
 
   @DomName('HTMLScriptElement.src')
   @DocsEditable()
@@ -30791,17 +35240,17 @@
   @DomName('ScrollState.deltaGranularity')
   @DocsEditable()
   @Experimental() // untriaged
-  final double deltaGranularity;
+  final num deltaGranularity;
 
   @DomName('ScrollState.deltaX')
   @DocsEditable()
   @Experimental() // untriaged
-  final double deltaX;
+  final num deltaX;
 
   @DomName('ScrollState.deltaY')
   @DocsEditable()
   @Experimental() // untriaged
-  final double deltaY;
+  final num deltaY;
 
   @DomName('ScrollState.fromUserInput')
   @DocsEditable()
@@ -30828,30 +35277,25 @@
   @Experimental() // untriaged
   final bool isEnding;
 
-  @DomName('ScrollState.shouldPropagate')
+  @DomName('ScrollState.positionX')
   @DocsEditable()
   @Experimental() // untriaged
-  final bool shouldPropagate;
+  final int positionX;
 
-  @DomName('ScrollState.startPositionX')
+  @DomName('ScrollState.positionY')
   @DocsEditable()
   @Experimental() // untriaged
-  final int startPositionX;
-
-  @DomName('ScrollState.startPositionY')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final int startPositionY;
+  final int positionY;
 
   @DomName('ScrollState.velocityX')
   @DocsEditable()
   @Experimental() // untriaged
-  final double velocityX;
+  final num velocityX;
 
   @DomName('ScrollState.velocityY')
   @DocsEditable()
   @Experimental() // untriaged
-  final double velocityY;
+  final num velocityY;
 
   @DomName('ScrollState.consumeDelta')
   @DocsEditable()
@@ -30877,6 +35321,49 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('ScrollTimeline')
+@Experimental() // untriaged
+@Native("ScrollTimeline")
+class ScrollTimeline extends AnimationTimeline {
+  // To suppress missing implicit constructor warnings.
+  factory ScrollTimeline._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('ScrollTimeline.ScrollTimeline')
+  @DocsEditable()
+  factory ScrollTimeline([Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return ScrollTimeline._create_1(options_1);
+    }
+    return ScrollTimeline._create_2();
+  }
+  static ScrollTimeline _create_1(options) =>
+      JS('ScrollTimeline', 'new ScrollTimeline(#)', options);
+  static ScrollTimeline _create_2() =>
+      JS('ScrollTimeline', 'new ScrollTimeline()');
+
+  @DomName('ScrollTimeline.orientation')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String orientation;
+
+  @DomName('ScrollTimeline.scrollSource')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Element scrollSource;
+
+  @DomName('ScrollTimeline.timeRange')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Object timeRange;
+}
+// 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.
+
+@DocsEditable()
 @DomName('SecurityPolicyViolationEvent')
 // https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html#securitypolicyviolationevent-events
 @Experimental()
@@ -30915,6 +35402,11 @@
   @DocsEditable()
   final int columnNumber;
 
+  @DomName('SecurityPolicyViolationEvent.disposition')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String disposition;
+
   @JSName('documentURI')
   @DomName('SecurityPolicyViolationEvent.documentURI')
   @DocsEditable()
@@ -30936,6 +35428,11 @@
   @DocsEditable()
   final String referrer;
 
+  @DomName('SecurityPolicyViolationEvent.sample')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String sample;
+
   @DomName('SecurityPolicyViolationEvent.sourceFile')
   @DocsEditable()
   final String sourceFile;
@@ -31194,6 +35691,11 @@
   @DocsEditable()
   void removeAllRanges() native;
 
+  @DomName('Selection.removeRange')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void removeRange(Range range) native;
+
   @DomName('Selection.selectAllChildren')
   @DocsEditable()
   void selectAllChildren(Node node) native;
@@ -31214,191 +35716,78 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('ServicePort')
+@DomName('Sensor')
 @Experimental() // untriaged
-@Native("ServicePort")
-class ServicePort extends Interceptor {
+@Native("Sensor")
+class Sensor extends EventTarget {
   // To suppress missing implicit constructor warnings.
-  factory ServicePort._() {
+  factory Sensor._() {
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ServicePort.data')
+  @DomName('Sensor.errorEvent')
   @DocsEditable()
   @Experimental() // untriaged
-  final Object data;
+  static const EventStreamProvider<Event> errorEvent =
+      const EventStreamProvider<Event>('error');
 
-  @DomName('ServicePort.name')
+  @DomName('Sensor.activated')
   @DocsEditable()
   @Experimental() // untriaged
-  final String name;
+  final bool activated;
 
-  @JSName('targetURL')
-  @DomName('ServicePort.targetURL')
+  @DomName('Sensor.hasReading')
   @DocsEditable()
   @Experimental() // untriaged
-  final String targetUrl;
+  final bool hasReading;
 
-  @DomName('ServicePort.close')
+  @DomName('Sensor.timestamp')
   @DocsEditable()
   @Experimental() // untriaged
-  void close() native;
+  final num timestamp;
 
-  @DomName('ServicePort.postMessage')
+  @DomName('Sensor.start')
   @DocsEditable()
   @Experimental() // untriaged
-  void postMessage(/*SerializedScriptValue*/ message,
-      [List<MessagePort> transfer]) {
-    if (transfer != null) {
-      var message_1 = convertDartToNative_SerializedScriptValue(message);
-      _postMessage_1(message_1, transfer);
-      return;
-    }
-    var message_1 = convertDartToNative_SerializedScriptValue(message);
-    _postMessage_2(message_1);
-    return;
-  }
+  void start() native;
 
-  @JSName('postMessage')
-  @DomName('ServicePort.postMessage')
+  @DomName('Sensor.stop')
   @DocsEditable()
   @Experimental() // untriaged
-  void _postMessage_1(message, List<MessagePort> transfer) native;
-  @JSName('postMessage')
-  @DomName('ServicePort.postMessage')
+  void stop() native;
+
+  @DomName('Sensor.onerror')
   @DocsEditable()
   @Experimental() // untriaged
-  void _postMessage_2(message) native;
+  Stream<Event> get onError => errorEvent.forTarget(this);
 }
 // 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.
 
 @DocsEditable()
-@DomName('ServicePortCollection')
+@DomName('SensorErrorEvent')
 @Experimental() // untriaged
-@Native("ServicePortCollection")
-class ServicePortCollection extends EventTarget {
+@Native("SensorErrorEvent")
+class SensorErrorEvent extends Event {
   // To suppress missing implicit constructor warnings.
-  factory ServicePortCollection._() {
+  factory SensorErrorEvent._() {
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ServicePortCollection.messageEvent')
+  @DomName('SensorErrorEvent.SensorErrorEvent')
   @DocsEditable()
-  @Experimental() // untriaged
-  static const EventStreamProvider<MessageEvent> messageEvent =
-      const EventStreamProvider<MessageEvent>('message');
-
-  @DomName('ServicePortCollection.connect')
-  @DocsEditable()
-  @Experimental() // untriaged
-  Future connect(String url, [Map options]) {
-    if (options != null) {
-      var options_1 = convertDartToNative_Dictionary(options);
-      return _connect_1(url, options_1);
-    }
-    return _connect_2(url);
+  factory SensorErrorEvent(String type, Map eventInitDict) {
+    var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
+    return SensorErrorEvent._create_1(type, eventInitDict_1);
   }
+  static SensorErrorEvent _create_1(type, eventInitDict) =>
+      JS('SensorErrorEvent', 'new SensorErrorEvent(#,#)', type, eventInitDict);
 
-  @JSName('connect')
-  @DomName('ServicePortCollection.connect')
+  @DomName('SensorErrorEvent.error')
   @DocsEditable()
   @Experimental() // untriaged
-  Future _connect_1(url, options) native;
-  @JSName('connect')
-  @DomName('ServicePortCollection.connect')
-  @DocsEditable()
-  @Experimental() // untriaged
-  Future _connect_2(url) native;
-
-  @DomName('ServicePortCollection.match')
-  @DocsEditable()
-  @Experimental() // untriaged
-  Future match(Map options) {
-    var options_1 = convertDartToNative_Dictionary(options);
-    return _match_1(options_1);
-  }
-
-  @JSName('match')
-  @DomName('ServicePortCollection.match')
-  @DocsEditable()
-  @Experimental() // untriaged
-  Future _match_1(options) native;
-
-  @DomName('ServicePortCollection.matchAll')
-  @DocsEditable()
-  @Experimental() // untriaged
-  Future matchAll([Map options]) {
-    if (options != null) {
-      var options_1 = convertDartToNative_Dictionary(options);
-      return _matchAll_1(options_1);
-    }
-    return _matchAll_2();
-  }
-
-  @JSName('matchAll')
-  @DomName('ServicePortCollection.matchAll')
-  @DocsEditable()
-  @Experimental() // untriaged
-  Future _matchAll_1(options) native;
-  @JSName('matchAll')
-  @DomName('ServicePortCollection.matchAll')
-  @DocsEditable()
-  @Experimental() // untriaged
-  Future _matchAll_2() native;
-
-  @DomName('ServicePortCollection.onmessage')
-  @DocsEditable()
-  @Experimental() // untriaged
-  Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
-}
-// 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.
-
-@DocsEditable()
-@DomName('ServicePortConnectEvent')
-@Experimental() // untriaged
-@Native("ServicePortConnectEvent")
-class ServicePortConnectEvent extends ExtendableEvent {
-  // To suppress missing implicit constructor warnings.
-  factory ServicePortConnectEvent._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('ServicePortConnectEvent.ServicePortConnectEvent')
-  @DocsEditable()
-  factory ServicePortConnectEvent(String type, [Map eventInitDict]) {
-    if (eventInitDict != null) {
-      var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
-      return ServicePortConnectEvent._create_1(type, eventInitDict_1);
-    }
-    return ServicePortConnectEvent._create_2(type);
-  }
-  static ServicePortConnectEvent _create_1(type, eventInitDict) => JS(
-      'ServicePortConnectEvent',
-      'new ServicePortConnectEvent(#,#)',
-      type,
-      eventInitDict);
-  static ServicePortConnectEvent _create_2(type) =>
-      JS('ServicePortConnectEvent', 'new ServicePortConnectEvent(#)', type);
-
-  @DomName('ServicePortConnectEvent.origin')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final String origin;
-
-  @JSName('targetURL')
-  @DomName('ServicePortConnectEvent.targetURL')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final String targetUrl;
-
-  @DomName('ServicePortConnectEvent.respondWith')
-  @DocsEditable()
-  @Experimental() // untriaged
-  Future respondWith(Future response) native;
+  final DomException error;
 }
 // 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
@@ -31481,6 +35870,30 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('ServiceWorkerGlobalScope.activateEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<Event> activateEvent =
+      const EventStreamProvider<Event>('activate');
+
+  @DomName('ServiceWorkerGlobalScope.fetchEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<Event> fetchEvent =
+      const EventStreamProvider<Event>('fetch');
+
+  @DomName('ServiceWorkerGlobalScope.foreignfetchEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<ForeignFetchEvent> foreignfetchEvent =
+      const EventStreamProvider<ForeignFetchEvent>('foreignfetch');
+
+  @DomName('ServiceWorkerGlobalScope.installEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<Event> installEvent =
+      const EventStreamProvider<Event>('install');
+
   @DomName('ServiceWorkerGlobalScope.messageEvent')
   @DocsEditable()
   @Experimental() // untriaged
@@ -31502,64 +35915,32 @@
   @Experimental() // untriaged
   Future skipWaiting() native;
 
+  @DomName('ServiceWorkerGlobalScope.onactivate')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<Event> get onActivate => activateEvent.forTarget(this);
+
+  @DomName('ServiceWorkerGlobalScope.onfetch')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<Event> get onFetch => fetchEvent.forTarget(this);
+
+  @DomName('ServiceWorkerGlobalScope.onforeignfetch')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<ForeignFetchEvent> get onForeignfetch =>
+      foreignfetchEvent.forTarget(this);
+
+  @DomName('ServiceWorkerGlobalScope.oninstall')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<Event> get onInstall => installEvent.forTarget(this);
+
   @DomName('ServiceWorkerGlobalScope.onmessage')
   @DocsEditable()
   @Experimental() // untriaged
   Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
 }
-// Copyright (c) 2016, 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.
-
-// WARNING: Do not edit - generated code.
-
-// TODO(alanknight): Provide a nicer constructor that uses named parameters
-// rather than an initialization map.
-@DomName('ServiceWorkerMessageEvent')
-@Experimental() // untriaged
-@Native("ServiceWorkerMessageEvent")
-class ServiceWorkerMessageEvent extends Event {
-  // TODO(alanknight): This really should be generated by the
-  // _OutputConversion in the systemnative.py script, but that doesn't
-  // use those conversions right now, so do this as a one-off.
-  @DomName('ServiceWorkerMessageEvent.data')
-  @DocsEditable()
-  dynamic get data => convertNativeToDart_SerializedScriptValue(this._get_data);
-
-  @JSName('data')
-  @DomName('ServiceWorkerMessageEvent.data')
-  @DocsEditable()
-  @annotation_Creates_SerializedScriptValue
-  @annotation_Returns_SerializedScriptValue
-  final dynamic _get_data;
-
-  // To suppress missing implicit constructor warnings.
-  factory ServiceWorkerMessageEvent._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('ServiceWorkerMessageEvent.lastEventId')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final String lastEventId;
-
-  @DomName('ServiceWorkerMessageEvent.origin')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final String origin;
-
-  @DomName('ServiceWorkerMessageEvent.ports')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final List<MessagePort> ports;
-
-  @DomName('ServiceWorkerMessageEvent.source')
-  @DocsEditable()
-  @Experimental() // untriaged
-  @Creates('Null')
-  @Returns('_ServiceWorker|MessagePort')
-  final Object source;
-}
 // 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.
@@ -31579,16 +35960,26 @@
   @Experimental() // untriaged
   final _ServiceWorker active;
 
-  @DomName('ServiceWorkerRegistration.geofencing')
+  @DomName('ServiceWorkerRegistration.backgroundFetch')
   @DocsEditable()
   @Experimental() // untriaged
-  final Geofencing geofencing;
+  final BackgroundFetchManager backgroundFetch;
 
   @DomName('ServiceWorkerRegistration.installing')
   @DocsEditable()
   @Experimental() // untriaged
   final _ServiceWorker installing;
 
+  @DomName('ServiceWorkerRegistration.navigationPreload')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final NavigationPreloadManager navigationPreload;
+
+  @DomName('ServiceWorkerRegistration.paymentManager')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final PaymentManager paymentManager;
+
   @DomName('ServiceWorkerRegistration.pushManager')
   @DocsEditable()
   @Experimental() // untriaged
@@ -31710,16 +36101,12 @@
 @Experimental()
 // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#api-shadow-root
 @Native("ShadowRoot")
-class ShadowRoot extends DocumentFragment {
+class ShadowRoot extends DocumentFragment implements DocumentOrShadowRoot {
   // To suppress missing implicit constructor warnings.
   factory ShadowRoot._() {
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ShadowRoot.activeElement')
-  @DocsEditable()
-  final Element activeElement;
-
   @DomName('ShadowRoot.delegatesFocus')
   @DocsEditable()
   @Experimental() // untriaged
@@ -31735,11 +36122,32 @@
   @DocsEditable()
   String innerHtml;
 
+  @DomName('ShadowRoot.mode')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String mode;
+
   @DomName('ShadowRoot.olderShadowRoot')
   @DocsEditable()
   @Experimental() // untriaged
   final ShadowRoot olderShadowRoot;
 
+  // From DocumentOrShadowRoot
+
+  @DomName('ShadowRoot.activeElement')
+  @DocsEditable()
+  final Element activeElement;
+
+  @DomName('ShadowRoot.fullscreenElement')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Element fullscreenElement;
+
+  @DomName('ShadowRoot.pointerLockElement')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Element pointerLockElement;
+
   @DomName('ShadowRoot.styleSheets')
   @DocsEditable()
   @Experimental() // untriaged
@@ -31747,11 +36155,6 @@
   @Creates('_StyleSheetList')
   final List<StyleSheet> styleSheets;
 
-  @JSName('cloneNode')
-  @DomName('ShadowRoot.cloneNode')
-  @DocsEditable()
-  Node clone([bool deep]) native;
-
   @DomName('ShadowRoot.elementFromPoint')
   @DocsEditable()
   Element elementFromPoint(int x, int y) native;
@@ -31862,11 +36265,6 @@
   @DocsEditable()
   final MessagePort port;
 
-  @DomName('SharedWorker.workerStart')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double workerStart;
-
   @DomName('SharedWorker.onerror')
   @DocsEditable()
   @Experimental() // untriaged
@@ -31913,6 +36311,11 @@
   @Experimental() // untriaged
   final String name;
 
+  @DomName('SharedWorkerGlobalScope.close')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void close() native;
+
   @JSName('webkitRequestFileSystem')
   @DomName('SharedWorkerGlobalScope.webkitRequestFileSystem')
   @DocsEditable()
@@ -31964,69 +36367,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('SimpleLength')
-@Experimental() // untriaged
-@Native("SimpleLength")
-class SimpleLength extends LengthValue {
-  // To suppress missing implicit constructor warnings.
-  factory SimpleLength._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('SimpleLength.SimpleLength')
-  @DocsEditable()
-  factory SimpleLength(num value, String type) {
-    return SimpleLength._create_1(value, type);
-  }
-  static SimpleLength _create_1(value, type) =>
-      JS('SimpleLength', 'new SimpleLength(#,#)', value, type);
-
-  @DomName('SimpleLength.type')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final String type;
-
-  @DomName('SimpleLength.value')
-  @DocsEditable()
-  @Experimental() // untriaged
-  num value;
-}
-// 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.
-
-@DocsEditable()
-@DomName('Skew')
-@Experimental() // untriaged
-@Native("Skew")
-class Skew extends TransformComponent {
-  // To suppress missing implicit constructor warnings.
-  factory Skew._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('Skew.Skew')
-  @DocsEditable()
-  factory Skew(num ax, num ay) {
-    return Skew._create_1(ax, ay);
-  }
-  static Skew _create_1(ax, ay) => JS('Skew', 'new Skew(#,#)', ax, ay);
-
-  @DomName('Skew.ax')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double ax;
-
-  @DomName('Skew.ay')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final double ay;
-}
-// 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.
-
-@DocsEditable()
 @DomName('HTMLSlotElement')
 @Experimental() // untriaged
 @Native("HTMLSlotElement")
@@ -32047,27 +36387,27 @@
   @Experimental() // untriaged
   String name;
 
-  @DomName('HTMLSlotElement.getAssignedNodes')
+  @DomName('HTMLSlotElement.assignedNodes')
   @DocsEditable()
   @Experimental() // untriaged
-  List<Node> getAssignedNodes([Map options]) {
+  List<Node> assignedNodes([Map options]) {
     if (options != null) {
       var options_1 = convertDartToNative_Dictionary(options);
-      return _getAssignedNodes_1(options_1);
+      return _assignedNodes_1(options_1);
     }
-    return _getAssignedNodes_2();
+    return _assignedNodes_2();
   }
 
-  @JSName('getAssignedNodes')
-  @DomName('HTMLSlotElement.getAssignedNodes')
+  @JSName('assignedNodes')
+  @DomName('HTMLSlotElement.assignedNodes')
   @DocsEditable()
   @Experimental() // untriaged
-  List<Node> _getAssignedNodes_1(options) native;
-  @JSName('getAssignedNodes')
-  @DomName('HTMLSlotElement.getAssignedNodes')
+  List<Node> _assignedNodes_1(options) native;
+  @JSName('assignedNodes')
+  @DomName('HTMLSlotElement.assignedNodes')
   @DocsEditable()
   @Experimental() // untriaged
-  List<Node> _getAssignedNodes_2() native;
+  List<Node> _assignedNodes_2() native;
 }
 // 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
@@ -32084,6 +36424,18 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('SourceBuffer.abortEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<Event> abortEvent =
+      const EventStreamProvider<Event>('abort');
+
+  @DomName('SourceBuffer.errorEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<Event> errorEvent =
+      const EventStreamProvider<Event>('error');
+
   @DomName('SourceBuffer.appendWindowEnd')
   @DocsEditable()
   @Experimental() // untriaged
@@ -32094,6 +36446,11 @@
   @Experimental() // untriaged
   num appendWindowStart;
 
+  @DomName('SourceBuffer.audioTracks')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final AudioTrackList audioTracks;
+
   @DomName('SourceBuffer.buffered')
   @DocsEditable()
   final TimeRanges buffered;
@@ -32117,6 +36474,11 @@
   @Experimental() // untriaged
   final bool updating;
 
+  @DomName('SourceBuffer.videoTracks')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final VideoTrackList videoTracks;
+
   @DomName('SourceBuffer.abort')
   @DocsEditable()
   void abort() native;
@@ -32126,11 +36488,6 @@
   @Experimental() // untriaged
   void appendBuffer(ByteBuffer data) native;
 
-  @DomName('SourceBuffer.appendStream')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void appendStream(FileStream stream, [int maxSize]) native;
-
   @JSName('appendBuffer')
   @DomName('SourceBuffer.appendBuffer')
   @DocsEditable()
@@ -32141,6 +36498,16 @@
   @DocsEditable()
   @Experimental() // untriaged
   void remove(num start, num end) native;
+
+  @DomName('SourceBuffer.onabort')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<Event> get onAbort => abortEvent.forTarget(this);
+
+  @DomName('SourceBuffer.onerror')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<Event> get onError => errorEvent.forTarget(this);
 }
 // 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
@@ -32264,40 +36631,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('SourceInfo')
-@Experimental() // untriaged
-@Native("SourceInfo")
-class SourceInfo extends Interceptor {
-  // To suppress missing implicit constructor warnings.
-  factory SourceInfo._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('SourceInfo.facing')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final String facing;
-
-  @DomName('SourceInfo.id')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final String id;
-
-  @DomName('SourceInfo.kind')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final String kind;
-
-  @DomName('SourceInfo.label')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final String label;
-}
-// 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.
-
-@DocsEditable()
 @DomName('HTMLSpanElement')
 @Native("HTMLSpanElement")
 class SpanElement extends HtmlElement {
@@ -32690,7 +37023,7 @@
 
   @DomName('SpeechRecognitionAlternative.confidence')
   @DocsEditable()
-  final double confidence;
+  final num confidence;
 
   @DomName('SpeechRecognitionAlternative.transcript')
   @DocsEditable()
@@ -32884,7 +37217,7 @@
 
   @DomName('SpeechSynthesisEvent.elapsedTime')
   @DocsEditable()
-  final double elapsedTime;
+  final num elapsedTime;
 
   @DomName('SpeechSynthesisEvent.name')
   @DocsEditable()
@@ -33100,6 +37433,45 @@
 // 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.
 
+@DocsEditable()
+@DomName('StaticRange')
+@Experimental() // untriaged
+@Native("StaticRange")
+class StaticRange extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory StaticRange._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('StaticRange.collapsed')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final bool collapsed;
+
+  @DomName('StaticRange.endContainer')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Node endContainer;
+
+  @DomName('StaticRange.endOffset')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final int endOffset;
+
+  @DomName('StaticRange.startContainer')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Node startContainer;
+
+  @DomName('StaticRange.startOffset')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final int startOffset;
+}
+// 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.
+
 /**
  * The type used by the
  * [Window.localStorage] and [Window.sessionStorage] properties.
@@ -33195,18 +37567,6 @@
   @DocsEditable()
   final int _length;
 
-  @DomName('Storage.__delete__')
-  @DocsEditable()
-  bool __delete__(index_OR_name) native;
-
-  @DomName('Storage.__getter__')
-  @DocsEditable()
-  String __getter__(index_OR_name) native;
-
-  @DomName('Storage.__setter__')
-  @DocsEditable()
-  void __setter__(index_OR_name, String value) native;
-
   @JSName('clear')
   @DomName('Storage.clear')
   @DocsEditable()
@@ -33318,31 +37678,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('StorageInfo')
-// http://www.w3.org/TR/file-system-api/
-@Experimental()
-@Native("StorageInfo")
-class StorageInfo extends Interceptor {
-  // To suppress missing implicit constructor warnings.
-  factory StorageInfo._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('StorageInfo.quota')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final int quota;
-
-  @DomName('StorageInfo.usage')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final int usage;
-}
-// 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.
-
-@DocsEditable()
 @DomName('StorageManager')
 @Experimental() // untriaged
 @Native("StorageManager")
@@ -33352,45 +37687,20 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('StorageManager.persistentPermission')
+  @DomName('StorageManager.estimate')
   @DocsEditable()
   @Experimental() // untriaged
-  Future persistentPermission() native;
+  Future estimate() native;
 
-  @DomName('StorageManager.requestPersistent')
+  @DomName('StorageManager.persist')
   @DocsEditable()
   @Experimental() // untriaged
-  Future requestPersistent() native;
-}
-// 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.
+  Future persist() native;
 
-@DocsEditable()
-@DomName('StorageQuota')
-// http://www.w3.org/TR/quota-api/#idl-def-StorageQuota
-@Experimental()
-@Native("StorageQuota")
-class StorageQuota extends Interceptor {
-  // To suppress missing implicit constructor warnings.
-  factory StorageQuota._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('StorageQuota.supportedTypes')
+  @DomName('StorageManager.persisted')
   @DocsEditable()
   @Experimental() // untriaged
-  final List<String> supportedTypes;
-
-  @DomName('StorageQuota.queryInfo')
-  @DocsEditable()
-  @Experimental() // untriaged
-  Future queryInfo(String type) native;
-
-  @DomName('StorageQuota.requestPersistentQuota')
-  @DocsEditable()
-  @Experimental() // untriaged
-  Future requestPersistentQuota(int newQuota) native;
+  Future persisted() native;
 }
 // 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
@@ -33417,16 +37727,6 @@
 // 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.
 
-// WARNING: Do not edit - generated code.
-
-@DomName('StringCallback')
-// http://www.w3.org/TR/2011/WD-html5-20110113/dnd.html#the-datatransferitem-interface
-@Experimental()
-typedef void _StringCallback(String data);
-// 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.
-
 @DocsEditable()
 @DomName('HTMLStyleElement')
 @Native("HTMLStyleElement")
@@ -33497,7 +37797,7 @@
 @DomName('StylePropertyMap')
 @Experimental() // untriaged
 @Native("StylePropertyMap")
-class StylePropertyMap extends Interceptor {
+class StylePropertyMap extends StylePropertyMapReadonly {
   // To suppress missing implicit constructor warnings.
   factory StylePropertyMap._() {
     throw new UnsupportedError("Not supported");
@@ -33513,26 +37813,6 @@
   @Experimental() // untriaged
   void delete(String property) native;
 
-  @DomName('StylePropertyMap.get')
-  @DocsEditable()
-  @Experimental() // untriaged
-  StyleValue get(String property) native;
-
-  @DomName('StylePropertyMap.getAll')
-  @DocsEditable()
-  @Experimental() // untriaged
-  List<StyleValue> getAll(String property) native;
-
-  @DomName('StylePropertyMap.getProperties')
-  @DocsEditable()
-  @Experimental() // untriaged
-  List<String> getProperties() native;
-
-  @DomName('StylePropertyMap.has')
-  @DocsEditable()
-  @Experimental() // untriaged
-  bool has(String property) native;
-
   @DomName('StylePropertyMap.set')
   @DocsEditable()
   @Experimental() // untriaged
@@ -33543,6 +37823,40 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('StylePropertyMapReadonly')
+@Experimental() // untriaged
+@Native("StylePropertyMapReadonly")
+class StylePropertyMapReadonly extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory StylePropertyMapReadonly._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('StylePropertyMapReadonly.get')
+  @DocsEditable()
+  @Experimental() // untriaged
+  CssStyleValue get(String property) native;
+
+  @DomName('StylePropertyMapReadonly.getAll')
+  @DocsEditable()
+  @Experimental() // untriaged
+  List<CssStyleValue> getAll(String property) native;
+
+  @DomName('StylePropertyMapReadonly.getProperties')
+  @DocsEditable()
+  @Experimental() // untriaged
+  List<String> getProperties() native;
+
+  @DomName('StylePropertyMapReadonly.has')
+  @DocsEditable()
+  @Experimental() // untriaged
+  bool has(String property) native;
+}
+// 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.
+
+@DocsEditable()
 @DomName('StyleSheet')
 @Native("StyleSheet")
 class StyleSheet extends Interceptor {
@@ -33584,30 +37898,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('StyleValue')
-@Experimental() // untriaged
-@Native("StyleValue")
-class StyleValue extends Interceptor {
-  // To suppress missing implicit constructor warnings.
-  factory StyleValue._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('StyleValue.cssString')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final String cssString;
-
-  @DomName('StyleValue.parse')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static Object parse(String property, String cssText) native;
-}
-// 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.
-
-@DocsEditable()
 @DomName('SyncEvent')
 @Experimental() // untriaged
 @Native("SyncEvent")
@@ -34036,6 +38326,46 @@
   @DocsEditable()
   HtmlElement _insertRow([int index]) native;
 }
+// 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.
+
+@DocsEditable()
+@DomName('TaskAttributionTiming')
+@Experimental() // untriaged
+@Native("TaskAttributionTiming")
+class TaskAttributionTiming extends PerformanceEntry {
+  // To suppress missing implicit constructor warnings.
+  factory TaskAttributionTiming._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('TaskAttributionTiming.containerId')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String containerId;
+
+  @DomName('TaskAttributionTiming.containerName')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String containerName;
+
+  @DomName('TaskAttributionTiming.containerSrc')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String containerSrc;
+
+  @DomName('TaskAttributionTiming.containerType')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String containerType;
+
+  @JSName('scriptURL')
+  @DomName('TaskAttributionTiming.scriptURL')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String scriptUrl;
+}
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -34184,11 +38514,6 @@
   @DocsEditable()
   final FormElement form;
 
-  @DomName('HTMLTextAreaElement.inputMode')
-  @DocsEditable()
-  @Experimental() // untriaged
-  String inputMode;
-
   @DomName('HTMLTextAreaElement.labels')
   @DocsEditable()
   @Unstable()
@@ -34293,6 +38618,32 @@
   @DocsEditable()
   void setSelectionRange(int start, int end, [String direction]) native;
 }
+// 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.
+
+@DocsEditable()
+@DomName('TextDetector')
+@Experimental() // untriaged
+@Native("TextDetector")
+class TextDetector extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory TextDetector._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('TextDetector.TextDetector')
+  @DocsEditable()
+  factory TextDetector() {
+    return TextDetector._create_1();
+  }
+  static TextDetector _create_1() => JS('TextDetector', 'new TextDetector()');
+
+  @DomName('TextDetector.detect')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future detect(/*ImageBitmapSource*/ image) native;
+}
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -34346,61 +38697,61 @@
   @DomName('TextMetrics.actualBoundingBoxAscent')
   @DocsEditable()
   @Experimental() // untriaged
-  final double actualBoundingBoxAscent;
+  final num actualBoundingBoxAscent;
 
   @DomName('TextMetrics.actualBoundingBoxDescent')
   @DocsEditable()
   @Experimental() // untriaged
-  final double actualBoundingBoxDescent;
+  final num actualBoundingBoxDescent;
 
   @DomName('TextMetrics.actualBoundingBoxLeft')
   @DocsEditable()
   @Experimental() // untriaged
-  final double actualBoundingBoxLeft;
+  final num actualBoundingBoxLeft;
 
   @DomName('TextMetrics.actualBoundingBoxRight')
   @DocsEditable()
   @Experimental() // untriaged
-  final double actualBoundingBoxRight;
+  final num actualBoundingBoxRight;
 
   @DomName('TextMetrics.alphabeticBaseline')
   @DocsEditable()
   @Experimental() // untriaged
-  final double alphabeticBaseline;
+  final num alphabeticBaseline;
 
   @DomName('TextMetrics.emHeightAscent')
   @DocsEditable()
   @Experimental() // untriaged
-  final double emHeightAscent;
+  final num emHeightAscent;
 
   @DomName('TextMetrics.emHeightDescent')
   @DocsEditable()
   @Experimental() // untriaged
-  final double emHeightDescent;
+  final num emHeightDescent;
 
   @DomName('TextMetrics.fontBoundingBoxAscent')
   @DocsEditable()
   @Experimental() // untriaged
-  final double fontBoundingBoxAscent;
+  final num fontBoundingBoxAscent;
 
   @DomName('TextMetrics.fontBoundingBoxDescent')
   @DocsEditable()
   @Experimental() // untriaged
-  final double fontBoundingBoxDescent;
+  final num fontBoundingBoxDescent;
 
   @DomName('TextMetrics.hangingBaseline')
   @DocsEditable()
   @Experimental() // untriaged
-  final double hangingBaseline;
+  final num hangingBaseline;
 
   @DomName('TextMetrics.ideographicBaseline')
   @DocsEditable()
   @Experimental() // untriaged
-  final double ideographicBaseline;
+  final num ideographicBaseline;
 
   @DomName('TextMetrics.width')
   @DocsEditable()
-  final double width;
+  final num width;
 }
 // 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
@@ -34457,29 +38808,14 @@
   @DocsEditable()
   String mode;
 
-  @DomName('TextTrack.regions')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final VttRegionList regions;
-
   @DomName('TextTrack.addCue')
   @DocsEditable()
   void addCue(TextTrackCue cue) native;
 
-  @DomName('TextTrack.addRegion')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void addRegion(VttRegion region) native;
-
   @DomName('TextTrack.removeCue')
   @DocsEditable()
   void removeCue(TextTrackCue cue) native;
 
-  @DomName('TextTrack.removeRegion')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void removeRegion(VttRegion region) native;
-
   /// Stream of `cuechange` events handled by this [TextTrack].
   @DomName('TextTrack.oncuechange')
   @DocsEditable()
@@ -34731,6 +39067,31 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('HTMLTimeElement')
+@Experimental() // untriaged
+@Native("HTMLTimeElement")
+class TimeElement extends HtmlElement {
+  // To suppress missing implicit constructor warnings.
+  factory TimeElement._() {
+    throw new UnsupportedError("Not supported");
+  }
+  /**
+   * Constructor instantiated by the DOM when a custom element has been created.
+   *
+   * This can only be called by subclasses from their created constructor.
+   */
+  TimeElement.created() : super.created();
+
+  @DomName('HTMLTimeElement.dateTime')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String dateTime;
+}
+// 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.
+
+@DocsEditable()
 @DomName('TimeRanges')
 @Unstable()
 @Native("TimeRanges")
@@ -34813,17 +39174,17 @@
   @JSName('clientX')
   @DomName('Touch.clientX')
   @DocsEditable()
-  final double _clientX;
+  final num _clientX;
 
   @JSName('clientY')
   @DomName('Touch.clientY')
   @DocsEditable()
-  final double _clientY;
+  final num _clientY;
 
   @DomName('Touch.force')
   @DocsEditable()
   @Experimental() // untriaged
-  final double force;
+  final num force;
 
   @DomName('Touch.identifier')
   @DocsEditable()
@@ -34832,24 +39193,24 @@
   @JSName('pageX')
   @DomName('Touch.pageX')
   @DocsEditable()
-  final double _pageX;
+  final num _pageX;
 
   @JSName('pageY')
   @DomName('Touch.pageY')
   @DocsEditable()
-  final double _pageY;
+  final num _pageY;
 
   @JSName('radiusX')
   @DomName('Touch.radiusX')
   @DocsEditable()
   @Experimental() // untriaged
-  final double _radiusX;
+  final num _radiusX;
 
   @JSName('radiusY')
   @DomName('Touch.radiusY')
   @DocsEditable()
   @Experimental() // untriaged
-  final double _radiusY;
+  final num _radiusY;
 
   @DomName('Touch.region')
   @DocsEditable()
@@ -34859,17 +39220,17 @@
   @DomName('Touch.rotationAngle')
   @DocsEditable()
   @Experimental() // untriaged
-  final double rotationAngle;
+  final num rotationAngle;
 
   @JSName('screenX')
   @DomName('Touch.screenX')
   @DocsEditable()
-  final double _screenX;
+  final num _screenX;
 
   @JSName('screenY')
   @DomName('Touch.screenY')
   @DocsEditable()
-  final double _screenY;
+  final num _screenY;
 
   @DomName('Touch.target')
   @DocsEditable()
@@ -34929,30 +39290,25 @@
 @Experimental()
 @Native("TouchEvent")
 class TouchEvent extends UIEvent {
-  factory TouchEvent(TouchList touches, TouchList targetTouches,
-      TouchList changedTouches, String type,
-      {Window view,
-      int screenX: 0,
-      int screenY: 0,
-      int clientX: 0,
-      int clientY: 0,
-      bool ctrlKey: false,
-      bool altKey: false,
-      bool shiftKey: false,
-      bool metaKey: false}) {
-    if (view == null) {
-      view = window;
-    }
-    TouchEvent e = document._createEvent("TouchEvent");
-    e._initTouchEvent(touches, targetTouches, changedTouches, type, view,
-        screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey);
-    return e;
-  }
   // To suppress missing implicit constructor warnings.
   factory TouchEvent._() {
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('TouchEvent.TouchEvent')
+  @DocsEditable()
+  factory TouchEvent(String type, [Map eventInitDict]) {
+    if (eventInitDict != null) {
+      var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
+      return TouchEvent._create_1(type, eventInitDict_1);
+    }
+    return TouchEvent._create_2(type);
+  }
+  static TouchEvent _create_1(type, eventInitDict) =>
+      JS('TouchEvent', 'new TouchEvent(#,#)', type, eventInitDict);
+  static TouchEvent _create_2(type) =>
+      JS('TouchEvent', 'new TouchEvent(#)', type);
+
   @DomName('TouchEvent.altKey')
   @DocsEditable()
   final bool altKey;
@@ -34981,24 +39337,6 @@
   @DocsEditable()
   final TouchList touches;
 
-  @JSName('initTouchEvent')
-  @DomName('TouchEvent.initTouchEvent')
-  @DocsEditable()
-  void _initTouchEvent(
-      TouchList touches,
-      TouchList targetTouches,
-      TouchList changedTouches,
-      String type,
-      Window view,
-      int unused1,
-      int unused2,
-      int unused3,
-      int unused4,
-      bool ctrlKey,
-      bool altKey,
-      bool shiftKey,
-      bool metaKey) native;
-
   /**
    * Checks if touch events supported on the current platform.
    *
@@ -35131,7 +39469,7 @@
   @DomName('TrackDefault.kinds')
   @DocsEditable()
   @Experimental() // untriaged
-  final List<String> kinds;
+  final Object kinds;
 
   @DomName('TrackDefault.label')
   @DocsEditable()
@@ -35299,70 +39637,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('TransformComponent')
-@Experimental() // untriaged
-@Native("TransformComponent")
-class TransformComponent extends Interceptor {
-  // To suppress missing implicit constructor warnings.
-  factory TransformComponent._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('TransformComponent.cssString')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final String cssString;
-
-  @DomName('TransformComponent.asMatrix')
-  @DocsEditable()
-  @Experimental() // untriaged
-  Matrix asMatrix() native;
-
-  @DomName('TransformComponent.is2DComponent')
-  @DocsEditable()
-  @Experimental() // untriaged
-  bool is2DComponent() native;
-}
-// 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.
-
-@DocsEditable()
-@DomName('TransformValue')
-@Experimental() // untriaged
-@Native("TransformValue")
-class TransformValue extends StyleValue {
-  // To suppress missing implicit constructor warnings.
-  factory TransformValue._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('TransformValue.TransformValue')
-  @DocsEditable()
-  factory TransformValue([List<TransformComponent> transformComponents]) {
-    if (transformComponents == null) {
-      return TransformValue._create_1();
-    }
-    if ((transformComponents is List<TransformComponent>)) {
-      return TransformValue._create_2(transformComponents);
-    }
-    throw new ArgumentError("Incorrect number or type of arguments");
-  }
-  static TransformValue _create_1() =>
-      JS('TransformValue', 'new TransformValue()');
-  static TransformValue _create_2(transformComponents) =>
-      JS('TransformValue', 'new TransformValue(#)', transformComponents);
-
-  @DomName('TransformValue.is2D')
-  @DocsEditable()
-  @Experimental() // untriaged
-  bool is2D() native;
-}
-// 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.
-
-@DocsEditable()
 @DomName('TransitionEvent')
 @Native("TransitionEvent,WebKitTransitionEvent")
 class TransitionEvent extends Event {
@@ -35387,7 +39661,7 @@
 
   @DomName('TransitionEvent.elapsedTime')
   @DocsEditable()
-  final double elapsedTime;
+  final num elapsedTime;
 
   @DomName('TransitionEvent.propertyName')
   @DocsEditable()
@@ -35397,51 +39671,6 @@
   @DocsEditable()
   final String pseudoElement;
 }
-// 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.
-
-@DocsEditable()
-@DomName('Translation')
-@Experimental() // untriaged
-@Native("Translation")
-class Translation extends TransformComponent {
-  // To suppress missing implicit constructor warnings.
-  factory Translation._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('Translation.Translation')
-  @DocsEditable()
-  factory Translation(LengthValue x, LengthValue y, [LengthValue z]) {
-    if ((y is LengthValue) && (x is LengthValue) && z == null) {
-      return Translation._create_1(x, y);
-    }
-    if ((z is LengthValue) && (y is LengthValue) && (x is LengthValue)) {
-      return Translation._create_2(x, y, z);
-    }
-    throw new ArgumentError("Incorrect number or type of arguments");
-  }
-  static Translation _create_1(x, y) =>
-      JS('Translation', 'new Translation(#,#)', x, y);
-  static Translation _create_2(x, y, z) =>
-      JS('Translation', 'new Translation(#,#,#)', x, y, z);
-
-  @DomName('Translation.x')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final LengthValue x;
-
-  @DomName('Translation.y')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final LengthValue y;
-
-  @DomName('Translation.z')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final LengthValue z;
-}
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
@@ -35506,6 +39735,73 @@
 // 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.
 
+@DocsEditable()
+@DomName('TrustedHTML')
+@Experimental() // untriaged
+@Native("TrustedHTML")
+class TrustedHtml extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory TrustedHtml._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('TrustedHTML.escape')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static TrustedHtml escape(String html) native;
+
+  @DomName('TrustedHTML.unsafelyCreate')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static TrustedHtml unsafelyCreate(String html) native;
+}
+// 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.
+
+@DocsEditable()
+@DomName('TrustedScriptURL')
+@Experimental() // untriaged
+@Native("TrustedScriptURL")
+class TrustedScriptUrl extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory TrustedScriptUrl._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('TrustedScriptURL.unsafelyCreate')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static TrustedScriptUrl unsafelyCreate(String url) native;
+}
+// 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.
+
+@DocsEditable()
+@DomName('TrustedURL')
+@Experimental() // untriaged
+@Native("TrustedURL")
+class TrustedUrl extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory TrustedUrl._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('TrustedURL.create')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static TrustedUrl create(String url) native;
+
+  @DomName('TrustedURL.unsafelyCreate')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static TrustedUrl unsafelyCreate(String url) native;
+}
+// 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.
+
 // WARNING: Do not edit - generated code.
 
 @DomName('UIEvent')
@@ -35620,6 +39916,16 @@
   @Experimental() // untriaged
   Future cancel(Object reason) native;
 
+  @DomName('UnderlyingSourceBase.notifyLockAcquired')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void notifyLockAcquired() native;
+
+  @DomName('UnderlyingSourceBase.notifyLockReleased')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void notifyLockReleased() native;
+
   @DomName('UnderlyingSourceBase.pull')
   @DocsEditable()
   @Experimental() // untriaged
@@ -35655,7 +39961,7 @@
 
 @DomName('URL')
 @Native("URL")
-class Url extends Interceptor implements UrlUtils {
+class Url extends Interceptor {
   static String createObjectUrl(blob_OR_source_OR_stream) => JS(
       'String',
       '(self.URL || self.webkitURL).createObjectURL(#)',
@@ -35682,8 +39988,6 @@
     throw new UnsupportedError("Not supported");
   }
 
-  // From URLUtils
-
   @DomName('URL.hash')
   @DocsEditable()
   @Experimental() // untriaged
@@ -35734,6 +40038,11 @@
   @Experimental() // untriaged
   String search;
 
+  @DomName('URL.searchParams')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final UrlSearchParams searchParams;
+
   @DomName('URL.username')
   @DocsEditable()
   @Experimental() // untriaged
@@ -35795,43 +40104,11 @@
   @DocsEditable()
   @Experimental() // untriaged
   void set(String name, String value) native;
-}
-// 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.
 
-@DocsEditable()
-@DomName('URLUtils')
-@Experimental() // untriaged
-abstract class UrlUtils extends Interceptor {
-  // To suppress missing implicit constructor warnings.
-  factory UrlUtils._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  String hash;
-
-  String host;
-
-  String hostname;
-
-  String href;
-
-  final String origin;
-
-  String password;
-
-  String pathname;
-
-  String port;
-
-  String protocol;
-
-  String search;
-
-  String username;
-
-  String toString();
+  @DomName('URLSearchParams.sort')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void sort() native;
 }
 // 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
@@ -35863,8 +40140,44 @@
   final String protocol;
 
   final String search;
+}
+// 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.
 
-  String toString();
+@DocsEditable()
+@DomName('VR')
+@Experimental() // untriaged
+@Native("VR")
+class VR extends EventTarget {
+  // To suppress missing implicit constructor warnings.
+  factory VR._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('VR.getDevices')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future getDevices() native;
+}
+// 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.
+
+@DocsEditable()
+@DomName('VRCoordinateSystem')
+@Experimental() // untriaged
+@Native("VRCoordinateSystem")
+class VRCoordinateSystem extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory VRCoordinateSystem._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('VRCoordinateSystem.getTransformTo')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Float32List getTransformTo(VRCoordinateSystem other) native;
 }
 // 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
@@ -35874,26 +40187,254 @@
 @DomName('VRDevice')
 @Experimental() // untriaged
 @Native("VRDevice")
-class VRDevice extends Interceptor {
+class VRDevice extends EventTarget {
   // To suppress missing implicit constructor warnings.
   factory VRDevice._() {
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('VRDevice.deviceId')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final String deviceId;
-
   @DomName('VRDevice.deviceName')
   @DocsEditable()
   @Experimental() // untriaged
   final String deviceName;
 
-  @DomName('VRDevice.hardwareUnitId')
+  @DomName('VRDevice.isExternal')
   @DocsEditable()
   @Experimental() // untriaged
-  final String hardwareUnitId;
+  final bool isExternal;
+
+  @DomName('VRDevice.requestSession')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future requestSession([Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return _requestSession_1(options_1);
+    }
+    return _requestSession_2();
+  }
+
+  @JSName('requestSession')
+  @DomName('VRDevice.requestSession')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _requestSession_1(options) native;
+  @JSName('requestSession')
+  @DomName('VRDevice.requestSession')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _requestSession_2() native;
+
+  @DomName('VRDevice.supportsSession')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future supportsSession([Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return _supportsSession_1(options_1);
+    }
+    return _supportsSession_2();
+  }
+
+  @JSName('supportsSession')
+  @DomName('VRDevice.supportsSession')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _supportsSession_1(options) native;
+  @JSName('supportsSession')
+  @DomName('VRDevice.supportsSession')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future _supportsSession_2() native;
+}
+// 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.
+
+@DocsEditable()
+@DomName('VRDeviceEvent')
+@Experimental() // untriaged
+@Native("VRDeviceEvent")
+class VRDeviceEvent extends Event {
+  // To suppress missing implicit constructor warnings.
+  factory VRDeviceEvent._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('VRDeviceEvent.VRDeviceEvent')
+  @DocsEditable()
+  factory VRDeviceEvent(String type, Map eventInitDict) {
+    var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
+    return VRDeviceEvent._create_1(type, eventInitDict_1);
+  }
+  static VRDeviceEvent _create_1(type, eventInitDict) =>
+      JS('VRDeviceEvent', 'new VRDeviceEvent(#,#)', type, eventInitDict);
+
+  @DomName('VRDeviceEvent.device')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final VRDevice device;
+}
+// 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.
+
+@DocsEditable()
+@DomName('VRDisplay')
+@Experimental() // untriaged
+@Native("VRDisplay")
+class VRDisplay extends EventTarget {
+  // To suppress missing implicit constructor warnings.
+  factory VRDisplay._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('VRDisplay.capabilities')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final VRDisplayCapabilities capabilities;
+
+  @DomName('VRDisplay.depthFar')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num depthFar;
+
+  @DomName('VRDisplay.depthNear')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num depthNear;
+
+  @DomName('VRDisplay.displayId')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final int displayId;
+
+  @DomName('VRDisplay.displayName')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String displayName;
+
+  @DomName('VRDisplay.isPresenting')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final bool isPresenting;
+
+  @DomName('VRDisplay.stageParameters')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final VRStageParameters stageParameters;
+
+  @DomName('VRDisplay.cancelAnimationFrame')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void cancelAnimationFrame(int handle) native;
+
+  @DomName('VRDisplay.exitPresent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future exitPresent() native;
+
+  @DomName('VRDisplay.getEyeParameters')
+  @DocsEditable()
+  @Experimental() // untriaged
+  VREyeParameters getEyeParameters(String whichEye) native;
+
+  @DomName('VRDisplay.getFrameData')
+  @DocsEditable()
+  @Experimental() // untriaged
+  bool getFrameData(VRFrameData frameData) native;
+
+  @DomName('VRDisplay.getLayers')
+  @DocsEditable()
+  @Experimental() // untriaged
+  List<Map> getLayers() native;
+
+  @DomName('VRDisplay.requestAnimationFrame')
+  @DocsEditable()
+  @Experimental() // untriaged
+  int requestAnimationFrame(FrameRequestCallback callback) native;
+
+  @DomName('VRDisplay.requestPresent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future requestPresent(List<Map> layers) native;
+
+  @DomName('VRDisplay.submitFrame')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void submitFrame() native;
+}
+// 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.
+
+@DocsEditable()
+@DomName('VRDisplayCapabilities')
+@Experimental() // untriaged
+@Native("VRDisplayCapabilities")
+class VRDisplayCapabilities extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory VRDisplayCapabilities._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('VRDisplayCapabilities.canPresent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final bool canPresent;
+
+  @DomName('VRDisplayCapabilities.hasExternalDisplay')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final bool hasExternalDisplay;
+
+  @DomName('VRDisplayCapabilities.hasPosition')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final bool hasPosition;
+
+  @DomName('VRDisplayCapabilities.maxLayers')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final int maxLayers;
+}
+// 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.
+
+@DocsEditable()
+@DomName('VRDisplayEvent')
+@Experimental() // untriaged
+@Native("VRDisplayEvent")
+class VRDisplayEvent extends Event {
+  // To suppress missing implicit constructor warnings.
+  factory VRDisplayEvent._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('VRDisplayEvent.VRDisplayEvent')
+  @DocsEditable()
+  factory VRDisplayEvent(String type, [Map eventInitDict]) {
+    if (eventInitDict != null) {
+      var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
+      return VRDisplayEvent._create_1(type, eventInitDict_1);
+    }
+    return VRDisplayEvent._create_2(type);
+  }
+  static VRDisplayEvent _create_1(type, eventInitDict) =>
+      JS('VRDisplayEvent', 'new VRDisplayEvent(#,#)', type, eventInitDict);
+  static VRDisplayEvent _create_2(type) =>
+      JS('VRDisplayEvent', 'new VRDisplayEvent(#)', type);
+
+  @DomName('VRDisplayEvent.display')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final VRDisplay display;
+
+  @DomName('VRDisplayEvent.reason')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String reason;
 }
 // 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
@@ -35909,132 +40450,317 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('VREyeParameters.currentFieldOfView')
+  @DomName('VREyeParameters.offset')
   @DocsEditable()
   @Experimental() // untriaged
-  final VRFieldOfView currentFieldOfView;
+  final Float32List offset;
 
-  @DomName('VREyeParameters.eyeTranslation')
+  @DomName('VREyeParameters.renderHeight')
   @DocsEditable()
   @Experimental() // untriaged
-  final DomPoint eyeTranslation;
+  final int renderHeight;
 
-  @DomName('VREyeParameters.maximumFieldOfView')
+  @DomName('VREyeParameters.renderWidth')
   @DocsEditable()
   @Experimental() // untriaged
-  final VRFieldOfView maximumFieldOfView;
-
-  @DomName('VREyeParameters.minimumFieldOfView')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final VRFieldOfView minimumFieldOfView;
-
-  @DomName('VREyeParameters.recommendedFieldOfView')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final VRFieldOfView recommendedFieldOfView;
-
-  @DomName('VREyeParameters.renderRect')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final _DomRect renderRect;
+  final int renderWidth;
 }
 // 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.
 
 @DocsEditable()
-@DomName('VRFieldOfView')
+@DomName('VRFrameData')
 @Experimental() // untriaged
-@Native("VRFieldOfView")
-class VRFieldOfView extends Interceptor {
+@Native("VRFrameData")
+class VRFrameData extends Interceptor {
   // To suppress missing implicit constructor warnings.
-  factory VRFieldOfView._() {
+  factory VRFrameData._() {
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('VRFieldOfView.VRFieldOfView')
+  @DomName('VRFrameData.VRFrameData')
   @DocsEditable()
-  factory VRFieldOfView([Map fov]) {
-    if (fov != null) {
-      var fov_1 = convertDartToNative_Dictionary(fov);
-      return VRFieldOfView._create_1(fov_1);
+  factory VRFrameData() {
+    return VRFrameData._create_1();
+  }
+  static VRFrameData _create_1() => JS('VRFrameData', 'new VRFrameData()');
+
+  @DomName('VRFrameData.leftProjectionMatrix')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Float32List leftProjectionMatrix;
+
+  @DomName('VRFrameData.leftViewMatrix')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Float32List leftViewMatrix;
+
+  @DomName('VRFrameData.pose')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final VRPose pose;
+
+  @DomName('VRFrameData.rightProjectionMatrix')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Float32List rightProjectionMatrix;
+
+  @DomName('VRFrameData.rightViewMatrix')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Float32List rightViewMatrix;
+}
+// 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.
+
+@DocsEditable()
+@DomName('VRFrameOfReference')
+@Experimental() // untriaged
+@Native("VRFrameOfReference")
+class VRFrameOfReference extends VRCoordinateSystem {
+  // To suppress missing implicit constructor warnings.
+  factory VRFrameOfReference._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('VRFrameOfReference.bounds')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final VRStageBounds bounds;
+
+  @DomName('VRFrameOfReference.emulatedHeight')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num emulatedHeight;
+}
+// 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.
+
+@DocsEditable()
+@DomName('VRPose')
+@Experimental() // untriaged
+@Native("VRPose")
+class VRPose extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory VRPose._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('VRPose.angularAcceleration')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Float32List angularAcceleration;
+
+  @DomName('VRPose.angularVelocity')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Float32List angularVelocity;
+
+  @DomName('VRPose.linearAcceleration')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Float32List linearAcceleration;
+
+  @DomName('VRPose.linearVelocity')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Float32List linearVelocity;
+
+  @DomName('VRPose.orientation')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Float32List orientation;
+
+  @DomName('VRPose.position')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Float32List position;
+}
+// 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.
+
+@DocsEditable()
+@DomName('VRSession')
+@Experimental() // untriaged
+@Native("VRSession")
+class VRSession extends EventTarget {
+  // To suppress missing implicit constructor warnings.
+  factory VRSession._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('VRSession.blurEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<Event> blurEvent =
+      const EventStreamProvider<Event>('blur');
+
+  @DomName('VRSession.focusEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<Event> focusEvent =
+      const EventStreamProvider<Event>('focus');
+
+  @DomName('VRSession.depthFar')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num depthFar;
+
+  @DomName('VRSession.depthNear')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num depthNear;
+
+  @DomName('VRSession.device')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final VRDevice device;
+
+  @DomName('VRSession.exclusive')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final bool exclusive;
+
+  @DomName('VRSession.end')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future end() native;
+
+  @DomName('VRSession.requestFrameOfReference')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future requestFrameOfReference(String type, [Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return _requestFrameOfReference_1(type, options_1);
     }
-    return VRFieldOfView._create_2();
+    return _requestFrameOfReference_2(type);
   }
-  static VRFieldOfView _create_1(fov) =>
-      JS('VRFieldOfView', 'new VRFieldOfView(#)', fov);
-  static VRFieldOfView _create_2() =>
-      JS('VRFieldOfView', 'new VRFieldOfView()');
 
-  @DomName('VRFieldOfView.downDegrees')
+  @JSName('requestFrameOfReference')
+  @DomName('VRSession.requestFrameOfReference')
   @DocsEditable()
   @Experimental() // untriaged
-  num downDegrees;
-
-  @DomName('VRFieldOfView.leftDegrees')
+  Future _requestFrameOfReference_1(type, options) native;
+  @JSName('requestFrameOfReference')
+  @DomName('VRSession.requestFrameOfReference')
   @DocsEditable()
   @Experimental() // untriaged
-  num leftDegrees;
+  Future _requestFrameOfReference_2(type) native;
 
-  @DomName('VRFieldOfView.rightDegrees')
+  @DomName('VRSession.onblur')
   @DocsEditable()
   @Experimental() // untriaged
-  num rightDegrees;
+  Stream<Event> get onBlur => blurEvent.forTarget(this);
 
-  @DomName('VRFieldOfView.upDegrees')
+  @DomName('VRSession.onfocus')
   @DocsEditable()
   @Experimental() // untriaged
-  num upDegrees;
+  Stream<Event> get onFocus => focusEvent.forTarget(this);
 }
 // 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.
 
 @DocsEditable()
-@DomName('VRPositionState')
+@DomName('VRSessionEvent')
 @Experimental() // untriaged
-@Native("VRPositionState")
-class VRPositionState extends Interceptor {
+@Native("VRSessionEvent")
+class VRSessionEvent extends Event {
   // To suppress missing implicit constructor warnings.
-  factory VRPositionState._() {
+  factory VRSessionEvent._() {
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('VRPositionState.angularAcceleration')
+  @DomName('VRSessionEvent.VRSessionEvent')
   @DocsEditable()
-  @Experimental() // untriaged
-  final DomPoint angularAcceleration;
+  factory VRSessionEvent(String type, Map eventInitDict) {
+    var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
+    return VRSessionEvent._create_1(type, eventInitDict_1);
+  }
+  static VRSessionEvent _create_1(type, eventInitDict) =>
+      JS('VRSessionEvent', 'new VRSessionEvent(#,#)', type, eventInitDict);
 
-  @DomName('VRPositionState.angularVelocity')
+  @DomName('VRSessionEvent.session')
   @DocsEditable()
   @Experimental() // untriaged
-  final DomPoint angularVelocity;
+  final VRSession session;
+}
+// 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.
 
-  @DomName('VRPositionState.linearAcceleration')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final DomPoint linearAcceleration;
+@DocsEditable()
+@DomName('VRStageBounds')
+@Experimental() // untriaged
+@Native("VRStageBounds")
+class VRStageBounds extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory VRStageBounds._() {
+    throw new UnsupportedError("Not supported");
+  }
 
-  @DomName('VRPositionState.linearVelocity')
+  @DomName('VRStageBounds.geometry')
   @DocsEditable()
   @Experimental() // untriaged
-  final DomPoint linearVelocity;
+  final List<VRStageBoundsPoint> geometry;
+}
+// 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.
 
-  @DomName('VRPositionState.orientation')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final DomPoint orientation;
+@DocsEditable()
+@DomName('VRStageBoundsPoint')
+@Experimental() // untriaged
+@Native("VRStageBoundsPoint")
+class VRStageBoundsPoint extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory VRStageBoundsPoint._() {
+    throw new UnsupportedError("Not supported");
+  }
 
-  @DomName('VRPositionState.position')
+  @DomName('VRStageBoundsPoint.x')
   @DocsEditable()
   @Experimental() // untriaged
-  final DomPoint position;
+  final num x;
 
-  @DomName('VRPositionState.timeStamp')
+  @DomName('VRStageBoundsPoint.z')
   @DocsEditable()
   @Experimental() // untriaged
-  final double timeStamp;
+  final num z;
+}
+// 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.
+
+@DocsEditable()
+@DomName('VRStageParameters')
+@Experimental() // untriaged
+@Native("VRStageParameters")
+class VRStageParameters extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory VRStageParameters._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('VRStageParameters.sittingToStandingTransform')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Float32List sittingToStandingTransform;
+
+  @DomName('VRStageParameters.sizeX')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num sizeX;
+
+  @DomName('VRStageParameters.sizeZ')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num sizeZ;
 }
 // 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
@@ -36201,7 +40927,7 @@
   @DomName('VideoPlaybackQuality.creationTime')
   @DocsEditable()
   @Experimental() // untriaged
-  final double creationTime;
+  final num creationTime;
 
   @DomName('VideoPlaybackQuality.droppedVideoFrames')
   @DocsEditable()
@@ -36251,6 +40977,11 @@
   @DocsEditable()
   @Experimental() // untriaged
   bool selected;
+
+  @DomName('VideoTrack.sourceBuffer')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final SourceBuffer sourceBuffer;
 }
 // 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
@@ -36301,6 +41032,77 @@
 // 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.
 
+@DocsEditable()
+@DomName('VisualViewport')
+@Experimental() // untriaged
+@Native("VisualViewport")
+class VisualViewport extends EventTarget {
+  // To suppress missing implicit constructor warnings.
+  factory VisualViewport._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('VisualViewport.resizeEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<Event> resizeEvent =
+      const EventStreamProvider<Event>('resize');
+
+  @DomName('VisualViewport.scrollEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<Event> scrollEvent =
+      const EventStreamProvider<Event>('scroll');
+
+  @DomName('VisualViewport.height')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num height;
+
+  @DomName('VisualViewport.offsetLeft')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num offsetLeft;
+
+  @DomName('VisualViewport.offsetTop')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num offsetTop;
+
+  @DomName('VisualViewport.pageLeft')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num pageLeft;
+
+  @DomName('VisualViewport.pageTop')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num pageTop;
+
+  @DomName('VisualViewport.scale')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num scale;
+
+  @DomName('VisualViewport.width')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num width;
+
+  @DomName('VisualViewport.onresize')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<Event> get onResize => resizeEvent.forTarget(this);
+
+  @DomName('VisualViewport.onscroll')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<Event> get onScroll => scrollEvent.forTarget(this);
+}
+// 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.
+
 // WARNING: Do not edit - generated code.
 
 @DomName('VoidCallback')
@@ -36348,10 +41150,10 @@
   @Returns('num|String')
   Object position;
 
-  @DomName('VTTCue.regionId')
+  @DomName('VTTCue.region')
   @DocsEditable()
   @Experimental() // untriaged
-  String regionId;
+  VttRegion region;
 
   @DomName('VTTCue.size')
   @DocsEditable()
@@ -36400,16 +41202,16 @@
   }
   static VttRegion _create_1() => JS('VttRegion', 'new VTTRegion()');
 
-  @DomName('VTTRegion.height')
-  @DocsEditable()
-  @Experimental() // untriaged
-  int height;
-
   @DomName('VTTRegion.id')
   @DocsEditable()
   @Experimental() // untriaged
   String id;
 
+  @DomName('VTTRegion.lines')
+  @DocsEditable()
+  @Experimental() // untriaged
+  int lines;
+
   @DomName('VTTRegion.regionAnchorX')
   @DocsEditable()
   @Experimental() // untriaged
@@ -36425,11 +41227,6 @@
   @Experimental() // untriaged
   String scroll;
 
-  @DomName('VTTRegion.track')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final TextTrack track;
-
   @DomName('VTTRegion.viewportAnchorX')
   @DocsEditable()
   @Experimental() // untriaged
@@ -36450,35 +41247,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('VTTRegionList')
-@Experimental() // untriaged
-@Native("VTTRegionList")
-class VttRegionList extends Interceptor {
-  // To suppress missing implicit constructor warnings.
-  factory VttRegionList._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('VTTRegionList.length')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final int length;
-
-  @DomName('VTTRegionList.getRegionById')
-  @DocsEditable()
-  @Experimental() // untriaged
-  VttRegion getRegionById(String id) native;
-
-  @DomName('VTTRegionList.item')
-  @DocsEditable()
-  @Experimental() // untriaged
-  VttRegion item(int index) native;
-}
-// 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.
-
-@DocsEditable()
 /**
  * Use the WebSocket interface to connect to a WebSocket,
  * and to send and receive data on that WebSocket.
@@ -36793,16 +41561,16 @@
   @JSName('deltaX')
   @DomName('WheelEvent.deltaX')
   @DocsEditable()
-  final double _deltaX;
+  final num _deltaX;
 
   @JSName('deltaY')
   @DomName('WheelEvent.deltaY')
   @DocsEditable()
-  final double _deltaY;
+  final num _deltaY;
 
   @DomName('WheelEvent.deltaZ')
   @DocsEditable()
-  final double deltaZ;
+  final num deltaZ;
 
   /**
    * The amount that is expected to scroll vertically, in units determined by
@@ -37356,6 +42124,11 @@
   @Experimental()
   static const int TEMPORARY = 0;
 
+  @DomName('Window.animationWorklet')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final _Worklet animationWorklet;
+
   /**
    * The application cache for this window.
    *
@@ -37372,6 +42145,11 @@
   @DocsEditable()
   final ApplicationCache applicationCache;
 
+  @DomName('Window.audioWorklet')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final _Worklet audioWorklet;
+
   @DomName('Window.caches')
   @DocsEditable()
   @Experimental() // untriaged
@@ -37381,6 +42159,11 @@
   @DocsEditable()
   final bool closed;
 
+  @DomName('Window.cookieStore')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final CookieStore cookieStore;
+
   /**
    * Entrypoint for the browser's cryptographic functions.
    *
@@ -37394,6 +42177,11 @@
   @Experimental()
   final Crypto crypto;
 
+  @DomName('Window.customElements')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final CustomElementRegistry customElements;
+
   /// *Deprecated*.
   @DomName('Window.defaultStatus')
   @DocsEditable()
@@ -37420,7 +42208,12 @@
   @DocsEditable()
   // http://www.quirksmode.org/blog/archives/2012/06/devicepixelrati.html
   @Experimental() // non-standard
-  final double devicePixelRatio;
+  final num devicePixelRatio;
+
+  @DomName('Window.external')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final External external;
 
   /**
    * The current session history for this window's newest document.
@@ -37562,6 +42355,11 @@
   @Experimental() // untriaged
   final int orientation;
 
+  @DomName('Window.origin')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String origin;
+
   /**
    * The height of this window including all user interface elements.
    *
@@ -37602,7 +42400,7 @@
    */
   @DomName('Window.pageXOffset')
   @DocsEditable()
-  final double _pageXOffset;
+  final num _pageXOffset;
 
   @JSName('pageYOffset')
   /**
@@ -37620,7 +42418,7 @@
    */
   @DomName('Window.pageYOffset')
   @DocsEditable()
-  final double _pageYOffset;
+  final num _pageYOffset;
 
   @DomName('Window.parent')
   @DocsEditable()
@@ -37650,11 +42448,6 @@
   @SupportedBrowser(SupportedBrowser.IE)
   final Performance performance;
 
-  @DomName('Window.renderWorklet')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final _Worklet renderWorklet;
-
   /**
    * Information about the screen displaying this window.
    *
@@ -37843,6 +42636,11 @@
   @Returns('Window|=Object')
   final dynamic _get_top;
 
+  @DomName('Window.visualViewport')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final VisualViewport visualViewport;
+
   /**
    * The current window.
    *
@@ -37968,7 +42766,13 @@
   @JSName('getComputedStyle')
   @DomName('Window.getComputedStyle')
   @DocsEditable()
-  CssStyleDeclaration _getComputedStyle(Element elt, String pseudoElt) native;
+  CssStyleDeclaration _getComputedStyle(Element elt, [String pseudoElt]) native;
+
+  @DomName('Window.getComputedStyleMap')
+  @DocsEditable()
+  @Experimental() // untriaged
+  StylePropertyMapReadonly getComputedStyleMap(
+      Element element, String pseudoElement) native;
 
   @JSName('getMatchedCSSRules')
   /**
@@ -38047,7 +42851,7 @@
   @DomName('Window.postMessage')
   @DocsEditable()
   void postMessage(/*any*/ message, String targetOrigin,
-      [List<MessagePort> transfer]) {
+      [List<Object> transfer]) {
     if (transfer != null) {
       var message_1 = convertDartToNative_SerializedScriptValue(message);
       _postMessage_1(message_1, targetOrigin, transfer);
@@ -38061,7 +42865,7 @@
   @JSName('postMessage')
   @DomName('Window.postMessage')
   @DocsEditable()
-  void _postMessage_1(message, targetOrigin, List<MessagePort> transfer) native;
+  void _postMessage_1(message, targetOrigin, List<Object> transfer) native;
   @JSName('postMessage')
   @DomName('Window.postMessage')
   @DocsEditable()
@@ -38971,6 +43775,10 @@
   @DomName('Window.onbeforeunload')
   Stream<Event> get onBeforeUnload => beforeUnloadEvent.forTarget(this);
 
+  /// Stream of `wheel` events handled by this [Window].
+  @DomName('Window.onWheel')
+  Stream<WheelEvent> get onWheel => Element.wheelEvent.forTarget(this);
+
   /**
    * Moves this window to a specific position.
    *
@@ -39301,26 +44109,7 @@
 
   @DomName('Worker.postMessage')
   @DocsEditable()
-  void postMessage(/*SerializedScriptValue*/ message,
-      [List<MessagePort> transfer]) {
-    if (transfer != null) {
-      var message_1 = convertDartToNative_SerializedScriptValue(message);
-      _postMessage_1(message_1, transfer);
-      return;
-    }
-    var message_1 = convertDartToNative_SerializedScriptValue(message);
-    _postMessage_2(message_1);
-    return;
-  }
-
-  @JSName('postMessage')
-  @DomName('Worker.postMessage')
-  @DocsEditable()
-  void _postMessage_1(message, List<MessagePort> transfer) native;
-  @JSName('postMessage')
-  @DomName('Worker.postMessage')
-  @DocsEditable()
-  void _postMessage_2(message) native;
+  void postMessage(Object message, [List<Object> transfer]) native;
 
   @DomName('Worker.terminate')
   @DocsEditable()
@@ -39342,20 +44131,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('WorkerConsole')
-@Experimental() // untriaged
-@Native("WorkerConsole")
-class WorkerConsole extends ConsoleBase {
-  // To suppress missing implicit constructor warnings.
-  factory WorkerConsole._() {
-    throw new UnsupportedError("Not supported");
-  }
-}
-// 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.
-
-@DocsEditable()
 @DomName('WorkerGlobalScope')
 @Experimental() // untriaged
 @Native("WorkerGlobalScope")
@@ -39378,16 +44153,16 @@
   static const EventStreamProvider<Event> errorEvent =
       const EventStreamProvider<Event>('error');
 
+  @DomName('WorkerGlobalScope.addressSpace')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String addressSpace;
+
   @DomName('WorkerGlobalScope.caches')
   @DocsEditable()
   @Experimental() // untriaged
   final CacheStorage caches;
 
-  @DomName('WorkerGlobalScope.console')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final WorkerConsole console;
-
   @DomName('WorkerGlobalScope.crypto')
   @DocsEditable()
   @Experimental() // untriaged
@@ -39398,6 +44173,11 @@
   @Experimental() // untriaged
   final IdbFactory indexedDB;
 
+  @DomName('WorkerGlobalScope.isSecureContext')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final bool isSecureContext;
+
   @DomName('WorkerGlobalScope.location')
   @DocsEditable()
   @Experimental() // untriaged
@@ -39408,6 +44188,11 @@
   @Experimental() // untriaged
   final _WorkerNavigator navigator;
 
+  @DomName('WorkerGlobalScope.origin')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String origin;
+
   @DomName('WorkerGlobalScope.performance')
   @DocsEditable()
   @Experimental() // untriaged
@@ -39418,11 +44203,6 @@
   @Experimental() // untriaged
   final WorkerGlobalScope self;
 
-  @DomName('WorkerGlobalScope.close')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void close() native;
-
   @DomName('WorkerGlobalScope.fetch')
   @DocsEditable()
   @Experimental() // untriaged
@@ -39527,6 +44307,11 @@
   @Experimental() // untriaged
   final MemoryInfo memory;
 
+  @DomName('WorkerPerformance.timeOrigin')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num timeOrigin;
+
   @DomName('WorkerPerformance.clearMarks')
   @DocsEditable()
   @Experimental() // untriaged
@@ -39582,6 +44367,65 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('WorkletAnimation')
+@Experimental() // untriaged
+@Native("WorkletAnimation")
+class WorkletAnimation extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory WorkletAnimation._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('WorkletAnimation.WorkletAnimation')
+  @DocsEditable()
+  factory WorkletAnimation(
+      String animatorName,
+      List<KeyframeEffectReadOnly> effects,
+      List<Object> timelines,
+      /*SerializedScriptValue*/ options) {
+    var options_1 = convertDartToNative_SerializedScriptValue(options);
+    return WorkletAnimation._create_1(
+        animatorName, effects, timelines, options_1);
+  }
+  static WorkletAnimation _create_1(
+          animatorName, effects, timelines, options) =>
+      JS('WorkletAnimation', 'new WorkletAnimation(#,#,#,#)', animatorName,
+          effects, timelines, options);
+
+  @DomName('WorkletAnimation.playState')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String playState;
+
+  @DomName('WorkletAnimation.cancel')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void cancel() native;
+
+  @DomName('WorkletAnimation.play')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void play() native;
+}
+// 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.
+
+@DocsEditable()
+@DomName('WorkletGlobalScope')
+@Experimental() // untriaged
+@Native("WorkletGlobalScope")
+class WorkletGlobalScope extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory WorkletGlobalScope._() {
+    throw new UnsupportedError("Not supported");
+  }
+}
+// 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.
+
+@DocsEditable()
 @DomName('XPathEvaluator')
 // http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator
 @deprecated // experimental
@@ -39719,7 +44563,7 @@
 
   @DomName('XPathResult.numberValue')
   @DocsEditable()
-  final double numberValue;
+  final num numberValue;
 
   @DomName('XPathResult.resultType')
   @DocsEditable()
@@ -39875,9 +44719,6 @@
   @Experimental() // untriaged
   final String _namespaceUri;
 
-  // Use implementation from Node.
-  // final String nodeValue;
-
   @DomName('Attr.value')
   @DocsEditable()
   String value;
@@ -39901,20 +44742,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('BluetoothAdvertisingData')
-@Experimental() // untriaged
-@Native("BluetoothAdvertisingData")
-abstract class _BluetoothAdvertisingData extends Interceptor {
-  // To suppress missing implicit constructor warnings.
-  factory _BluetoothAdvertisingData._() {
-    throw new UnsupportedError("Not supported");
-  }
-}
-// 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.
-
-@DocsEditable()
 @DomName('BluetoothCharacteristicProperties')
 @Experimental() // untriaged
 @Native("BluetoothCharacteristicProperties")
@@ -39999,6 +44826,35 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('BudgetService')
+@Experimental() // untriaged
+@Native("BudgetService")
+class _BudgetService extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory _BudgetService._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('BudgetService.getBudget')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future getBudget() native;
+
+  @DomName('BudgetService.getCost')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future getCost(String operation) native;
+
+  @DomName('BudgetService.reserve')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future reserve(String operation) native;
+}
+// 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.
+
+@DocsEditable()
 @DomName('Cache')
 @Experimental() // untriaged
 @Native("Cache")
@@ -40013,247 +44869,46 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('CanvasPathMethods')
+@DomName('CanvasPath')
 @Experimental() // untriaged
-abstract class _CanvasPathMethods extends Interceptor {
+abstract class _CanvasPath extends Interceptor {
   // To suppress missing implicit constructor warnings.
-  factory _CanvasPathMethods._() {
+  factory _CanvasPath._() {
     throw new UnsupportedError("Not supported");
   }
 }
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-@DocsEditable()
-@DomName('ClientRect')
-@Native("ClientRect")
-class _ClientRect extends Interceptor implements Rectangle {
-  // NOTE! All code below should be common with RectangleBase.
-  String toString() {
-    return 'Rectangle ($left, $top) $width x $height';
-  }
-
-  bool operator ==(other) {
-    if (other is! Rectangle) return false;
-    return left == other.left &&
-        top == other.top &&
-        width == other.width &&
-        height == other.height;
-  }
-
-  int get hashCode => _JenkinsSmiHash.hash4(
-      left.hashCode, top.hashCode, width.hashCode, height.hashCode);
-
-  /**
-   * Computes the intersection of `this` and [other].
-   *
-   * The intersection of two axis-aligned rectangles, if any, is always another
-   * axis-aligned rectangle.
-   *
-   * Returns the intersection of this and `other`, or null if they don't
-   * intersect.
-   */
-  Rectangle intersection(Rectangle other) {
-    var x0 = max(left, other.left);
-    var x1 = min(left + width, other.left + other.width);
-
-    if (x0 <= x1) {
-      var y0 = max(top, other.top);
-      var y1 = min(top + height, other.top + other.height);
-
-      if (y0 <= y1) {
-        return new Rectangle(x0, y0, x1 - x0, y1 - y0);
-      }
-    }
-    return null;
-  }
-
-  /**
-   * Returns true if `this` intersects [other].
-   */
-  bool intersects(Rectangle<num> other) {
-    return (left <= other.left + other.width &&
-        other.left <= left + width &&
-        top <= other.top + other.height &&
-        other.top <= top + height);
-  }
-
-  /**
-   * Returns a new rectangle which completely contains `this` and [other].
-   */
-  Rectangle boundingBox(Rectangle other) {
-    var right = max(this.left + this.width, other.left + other.width);
-    var bottom = max(this.top + this.height, other.top + other.height);
-
-    var left = min(this.left, other.left);
-    var top = min(this.top, other.top);
-
-    return new Rectangle(left, top, right - left, bottom - top);
-  }
-
-  /**
-   * Tests whether `this` entirely contains [another].
-   */
-  bool containsRectangle(Rectangle<num> another) {
-    return left <= another.left &&
-        left + width >= another.left + another.width &&
-        top <= another.top &&
-        top + height >= another.top + another.height;
-  }
-
-  /**
-   * Tests whether [another] is inside or along the edges of `this`.
-   */
-  bool containsPoint(Point<num> another) {
-    return another.x >= left &&
-        another.x <= left + width &&
-        another.y >= top &&
-        another.y <= top + height;
-  }
-
-  Point get topLeft => new Point(this.left, this.top);
-  Point get topRight => new Point(this.left + this.width, this.top);
-  Point get bottomRight =>
-      new Point(this.left + this.width, this.top + this.height);
-  Point get bottomLeft => new Point(this.left, this.top + this.height);
-
-  // To suppress missing implicit constructor warnings.
-  factory _ClientRect._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('ClientRect.bottom')
-  @DocsEditable()
-  final double bottom;
-
-  @DomName('ClientRect.height')
-  @DocsEditable()
-  final double height;
-
-  @DomName('ClientRect.left')
-  @DocsEditable()
-  final double left;
-
-  @DomName('ClientRect.right')
-  @DocsEditable()
-  final double right;
-
-  @DomName('ClientRect.top')
-  @DocsEditable()
-  final double top;
-
-  @DomName('ClientRect.width')
-  @DocsEditable()
-  final double width;
-}
-
-/**
- * This is the [Jenkins hash function][1] but using masking to keep
- * values in SMI range.
- *
- * [1]: http://en.wikipedia.org/wiki/Jenkins_hash_function
- *
- * Use:
- * Hash each value with the hash of the previous value, then get the final
- * hash by calling finish.
- *
- *     var hash = 0;
- *     for (var value in values) {
- *       hash = JenkinsSmiHash.combine(hash, value.hashCode);
- *     }
- *     hash = JenkinsSmiHash.finish(hash);
- */
-class _JenkinsSmiHash {
-  // TODO(11617): This class should be optimized and standardized elsewhere.
-
-  static int combine(int hash, int value) {
-    hash = 0x1fffffff & (hash + value);
-    hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
-    return hash ^ (hash >> 6);
-  }
-
-  static int finish(int hash) {
-    hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
-    hash = hash ^ (hash >> 11);
-    return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
-  }
-
-  static int hash2(a, b) => finish(combine(combine(0, a), b));
-
-  static int hash4(a, b, c, d) =>
-      finish(combine(combine(combine(combine(0, a), b), c), d));
-}
 // 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.
 
 @DocsEditable()
-@DomName('ClientRectList')
-@Native("ClientRectList,DOMRectList")
-class _ClientRectList extends Interceptor
-    with ListMixin<Rectangle>, ImmutableListMixin<Rectangle>
-    implements List<Rectangle>, JavaScriptIndexingBehavior<Rectangle> {
+@DomName('Clipboard')
+@Native("Clipboard")
+class _Clipboard extends EventTarget {
   // To suppress missing implicit constructor warnings.
-  factory _ClientRectList._() {
+  factory _Clipboard._() {
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('ClientRectList.length')
-  @DocsEditable()
-  int get length => JS("int", "#.length", this);
-
-  Rectangle operator [](int index) {
-    if (JS("bool", "# >>> 0 !== # || # >= #", index, index, index, length))
-      throw new RangeError.index(index, this);
-    return JS("Rectangle", "#[#]", this, index);
-  }
-
-  void operator []=(int index, Rectangle value) {
-    throw new UnsupportedError("Cannot assign element of immutable List.");
-  }
-  // -- start List<Rectangle> mixins.
-  // Rectangle is the element type.
-
-  set length(int value) {
-    throw new UnsupportedError("Cannot resize immutable List.");
-  }
-
-  Rectangle get first {
-    if (this.length > 0) {
-      return JS('Rectangle', '#[0]', this);
-    }
-    throw new StateError("No elements");
-  }
-
-  Rectangle get last {
-    int len = this.length;
-    if (len > 0) {
-      return JS('Rectangle', '#[#]', this, len - 1);
-    }
-    throw new StateError("No elements");
-  }
-
-  Rectangle get single {
-    int len = this.length;
-    if (len == 1) {
-      return JS('Rectangle', '#[0]', this);
-    }
-    if (len == 0) throw new StateError("No elements");
-    throw new StateError("More than one element");
-  }
-
-  Rectangle elementAt(int index) => this[index];
-  // -- end List<Rectangle> mixins.
-
-  @DomName('ClientRectList.__getter__')
+  @DomName('Clipboard.read')
   @DocsEditable()
   @Experimental() // untriaged
-  Rectangle __getter__(int index) native;
+  Future read() native;
 
-  @DomName('ClientRectList.item')
+  @DomName('Clipboard.readText')
   @DocsEditable()
-  Rectangle item(int index) native;
+  @Experimental() // untriaged
+  Future readText() native;
+
+  @DomName('Clipboard.write')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future write(DataTransfer data) native;
+
+  @DomName('Clipboard.writeText')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future writeText(String data) native;
 }
 // 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
@@ -40386,7 +45041,7 @@
 
 }
 
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
@@ -40394,7 +45049,96 @@
 @DomName('DOMRect')
 @Experimental() // untriaged
 @Native("DOMRect")
-class _DomRect extends DomRectReadOnly {
+class _DomRect extends DomRectReadOnly implements Rectangle {
+  // NOTE! All code below should be common with RectangleBase.
+  String toString() {
+    return 'Rectangle ($left, $top) $width x $height';
+  }
+
+  bool operator ==(other) {
+    if (other is! Rectangle) return false;
+    return left == other.left &&
+        top == other.top &&
+        width == other.width &&
+        height == other.height;
+  }
+
+  int get hashCode => _JenkinsSmiHash.hash4(
+      left.hashCode, top.hashCode, width.hashCode, height.hashCode);
+
+  /**
+   * Computes the intersection of `this` and [other].
+   *
+   * The intersection of two axis-aligned rectangles, if any, is always another
+   * axis-aligned rectangle.
+   *
+   * Returns the intersection of this and `other`, or null if they don't
+   * intersect.
+   */
+  Rectangle intersection(Rectangle other) {
+    var x0 = max(left, other.left);
+    var x1 = min(left + width, other.left + other.width);
+
+    if (x0 <= x1) {
+      var y0 = max(top, other.top);
+      var y1 = min(top + height, other.top + other.height);
+
+      if (y0 <= y1) {
+        return new Rectangle(x0, y0, x1 - x0, y1 - y0);
+      }
+    }
+    return null;
+  }
+
+  /**
+   * Returns true if `this` intersects [other].
+   */
+  bool intersects(Rectangle<num> other) {
+    return (left <= other.left + other.width &&
+        other.left <= left + width &&
+        top <= other.top + other.height &&
+        other.top <= top + height);
+  }
+
+  /**
+   * Returns a new rectangle which completely contains `this` and [other].
+   */
+  Rectangle boundingBox(Rectangle other) {
+    var right = max(this.left + this.width, other.left + other.width);
+    var bottom = max(this.top + this.height, other.top + other.height);
+
+    var left = min(this.left, other.left);
+    var top = min(this.top, other.top);
+
+    return new Rectangle(left, top, right - left, bottom - top);
+  }
+
+  /**
+   * Tests whether `this` entirely contains [another].
+   */
+  bool containsRectangle(Rectangle<num> another) {
+    return left <= another.left &&
+        left + width >= another.left + another.width &&
+        top <= another.top &&
+        top + height >= another.top + another.height;
+  }
+
+  /**
+   * Tests whether [another] is inside or along the edges of `this`.
+   */
+  bool containsPoint(Point<num> another) {
+    return another.x >= left &&
+        another.x <= left + width &&
+        another.y >= top &&
+        another.y <= top + height;
+  }
+
+  Point get topLeft => new Point(this.left, this.top);
+  Point get topRight => new Point(this.left + this.width, this.top);
+  Point get bottomRight =>
+      new Point(this.left + this.width, this.top + this.height);
+  Point get bottomLeft => new Point(this.left, this.top + this.height);
+
   // To suppress missing implicit constructor warnings.
   factory _DomRect._() {
     throw new UnsupportedError("Not supported");
@@ -40452,6 +45196,65 @@
   set y(num value) {
     JS("void", "#.y = #", this, value);
   }
+
+  @DomName('DOMRect.fromRect')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static Rectangle fromRect([Map other]) {
+    if (other != null) {
+      var other_1 = convertDartToNative_Dictionary(other);
+      return _fromRect_1(other_1);
+    }
+    return _fromRect_2();
+  }
+
+  @JSName('fromRect')
+  @DomName('DOMRect.fromRect')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static Rectangle _fromRect_1(other) native;
+  @JSName('fromRect')
+  @DomName('DOMRect.fromRect')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static Rectangle _fromRect_2() native;
+}
+
+/**
+ * This is the [Jenkins hash function][1] but using masking to keep
+ * values in SMI range.
+ *
+ * [1]: http://en.wikipedia.org/wiki/Jenkins_hash_function
+ *
+ * Use:
+ * Hash each value with the hash of the previous value, then get the final
+ * hash by calling finish.
+ *
+ *     var hash = 0;
+ *     for (var value in values) {
+ *       hash = JenkinsSmiHash.combine(hash, value.hashCode);
+ *     }
+ *     hash = JenkinsSmiHash.finish(hash);
+ */
+class _JenkinsSmiHash {
+  // TODO(11617): This class should be optimized and standardized elsewhere.
+
+  static int combine(int hash, int value) {
+    hash = 0x1fffffff & (hash + value);
+    hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
+    return hash ^ (hash >> 6);
+  }
+
+  static int finish(int hash) {
+    hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
+    hash = hash ^ (hash >> 11);
+    return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
+  }
+
+  static int hash2(a, b) => finish(combine(combine(0, a), b));
+
+  static int hash4(a, b, c, d) =>
+      finish(combine(combine(combine(combine(0, a), b), c), d));
 }
 // 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
@@ -40721,6 +45524,111 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('Mojo')
+@Experimental() // untriaged
+@Native("Mojo")
+abstract class _Mojo extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory _Mojo._() {
+    throw new UnsupportedError("Not supported");
+  }
+}
+// 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.
+
+@DocsEditable()
+@DomName('MojoHandle')
+@Experimental() // untriaged
+@Native("MojoHandle")
+abstract class _MojoHandle extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory _MojoHandle._() {
+    throw new UnsupportedError("Not supported");
+  }
+}
+// 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.
+
+@DocsEditable()
+@DomName('MojoInterfaceInterceptor')
+@Experimental() // untriaged
+@Native("MojoInterfaceInterceptor")
+abstract class _MojoInterfaceInterceptor extends EventTarget {
+  // To suppress missing implicit constructor warnings.
+  factory _MojoInterfaceInterceptor._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('MojoInterfaceInterceptor.MojoInterfaceInterceptor')
+  @DocsEditable()
+  factory _MojoInterfaceInterceptor(String interfaceName, [String scope]) {
+    if (scope != null) {
+      return _MojoInterfaceInterceptor._create_1(interfaceName, scope);
+    }
+    return _MojoInterfaceInterceptor._create_2(interfaceName);
+  }
+  static _MojoInterfaceInterceptor _create_1(interfaceName, scope) => JS(
+      '_MojoInterfaceInterceptor',
+      'new MojoInterfaceInterceptor(#,#)',
+      interfaceName,
+      scope);
+  static _MojoInterfaceInterceptor _create_2(interfaceName) => JS(
+      '_MojoInterfaceInterceptor',
+      'new MojoInterfaceInterceptor(#)',
+      interfaceName);
+}
+// 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.
+
+@DocsEditable()
+@DomName('MojoInterfaceRequestEvent')
+@Experimental() // untriaged
+@Native("MojoInterfaceRequestEvent")
+abstract class _MojoInterfaceRequestEvent extends Event {
+  // To suppress missing implicit constructor warnings.
+  factory _MojoInterfaceRequestEvent._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('MojoInterfaceRequestEvent.MojoInterfaceRequestEvent')
+  @DocsEditable()
+  factory _MojoInterfaceRequestEvent(String type, [Map eventInitDict]) {
+    if (eventInitDict != null) {
+      var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
+      return _MojoInterfaceRequestEvent._create_1(type, eventInitDict_1);
+    }
+    return _MojoInterfaceRequestEvent._create_2(type);
+  }
+  static _MojoInterfaceRequestEvent _create_1(type, eventInitDict) => JS(
+      '_MojoInterfaceRequestEvent',
+      'new MojoInterfaceRequestEvent(#,#)',
+      type,
+      eventInitDict);
+  static _MojoInterfaceRequestEvent _create_2(type) => JS(
+      '_MojoInterfaceRequestEvent', 'new MojoInterfaceRequestEvent(#)', type);
+}
+// 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.
+
+@DocsEditable()
+@DomName('MojoWatcher')
+@Experimental() // untriaged
+@Native("MojoWatcher")
+abstract class _MojoWatcher extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory _MojoWatcher._() {
+    throw new UnsupportedError("Not supported");
+  }
+}
+// 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.
+
+@DocsEditable()
 @DomName('NFC')
 @Experimental() // untriaged
 @Native("NFC")
@@ -40849,6 +45757,35 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('Report')
+@Experimental() // untriaged
+@Native("Report")
+class _Report extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory _Report._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('Report.body')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final ReportBody body;
+
+  @DomName('Report.type')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String type;
+
+  @DomName('Report.url')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String url;
+}
+// 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.
+
+@DocsEditable()
 @DomName('Request')
 @Experimental() // untriaged
 @Native("Request")
@@ -40871,6 +45808,11 @@
       JS('_Request', 'new Request(#,#)', input, requestInitDict);
   static _Request _create_2(input) => JS('_Request', 'new Request(#)', input);
 
+  @DomName('Request.cache')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String cache;
+
   @DomName('Request.credentials')
   @DocsEditable()
   @Experimental() // untriaged
@@ -40901,6 +45843,11 @@
   @Experimental() // untriaged
   final String referrer;
 
+  @DomName('Request.referrerPolicy')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String referrerPolicy;
+
   @DomName('Request.url')
   @DocsEditable()
   @Experimental() // untriaged
@@ -40942,18 +45889,18 @@
 
   @DomName('Response.Response')
   @DocsEditable()
-  factory _Response([Object body, Map responseInitDict]) {
-    if (responseInitDict != null) {
-      var responseInitDict_1 = convertDartToNative_Dictionary(responseInitDict);
-      return _Response._create_1(body, responseInitDict_1);
+  factory _Response([Object body, Map init]) {
+    if (init != null) {
+      var init_1 = convertDartToNative_Dictionary(init);
+      return _Response._create_1(body, init_1);
     }
     if (body != null) {
       return _Response._create_2(body);
     }
     return _Response._create_3();
   }
-  static _Response _create_1(body, responseInitDict) =>
-      JS('_Response', 'new Response(#,#)', body, responseInitDict);
+  static _Response _create_1(body, init) =>
+      JS('_Response', 'new Response(#,#)', body, init);
   static _Response _create_2(body) => JS('_Response', 'new Response(#)', body);
   static _Response _create_3() => JS('_Response', 'new Response()');
 }
@@ -41207,20 +46154,15 @@
 
   @DomName('USBConnectionEvent.USBConnectionEvent')
   @DocsEditable()
-  factory _USBConnectionEvent(String type, [Map eventInitDict]) {
-    if (eventInitDict != null) {
-      var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
-      return _USBConnectionEvent._create_1(type, eventInitDict_1);
-    }
-    return _USBConnectionEvent._create_2(type);
+  factory _USBConnectionEvent(String type, Map eventInitDict) {
+    var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
+    return _USBConnectionEvent._create_1(type, eventInitDict_1);
   }
   static _USBConnectionEvent _create_1(type, eventInitDict) => JS(
       '_USBConnectionEvent',
       'new USBConnectionEvent(#,#)',
       type,
       eventInitDict);
-  static _USBConnectionEvent _create_2(type) =>
-      JS('_USBConnectionEvent', 'new USBConnectionEvent(#)', type);
 }
 // 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
@@ -41276,6 +46218,19 @@
   factory _USBInTransferResult._() {
     throw new UnsupportedError("Not supported");
   }
+
+  @DomName('USBInTransferResult.USBInTransferResult')
+  @DocsEditable()
+  factory _USBInTransferResult(String status, [ByteData data]) {
+    if (data != null) {
+      return _USBInTransferResult._create_1(status, data);
+    }
+    return _USBInTransferResult._create_2(status);
+  }
+  static _USBInTransferResult _create_1(status, data) =>
+      JS('_USBInTransferResult', 'new USBInTransferResult(#,#)', status, data);
+  static _USBInTransferResult _create_2(status) =>
+      JS('_USBInTransferResult', 'new USBInTransferResult(#)', status);
 }
 // 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
@@ -41312,6 +46267,24 @@
   factory _USBIsochronousInTransferPacket._() {
     throw new UnsupportedError("Not supported");
   }
+
+  @DomName('USBIsochronousInTransferPacket.USBIsochronousInTransferPacket')
+  @DocsEditable()
+  factory _USBIsochronousInTransferPacket(String status, [ByteData data]) {
+    if (data != null) {
+      return _USBIsochronousInTransferPacket._create_1(status, data);
+    }
+    return _USBIsochronousInTransferPacket._create_2(status);
+  }
+  static _USBIsochronousInTransferPacket _create_1(status, data) => JS(
+      '_USBIsochronousInTransferPacket',
+      'new USBIsochronousInTransferPacket(#,#)',
+      status,
+      data);
+  static _USBIsochronousInTransferPacket _create_2(status) => JS(
+      '_USBIsochronousInTransferPacket',
+      'new USBIsochronousInTransferPacket(#)',
+      status);
 }
 // 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
@@ -41326,6 +46299,26 @@
   factory _USBIsochronousInTransferResult._() {
     throw new UnsupportedError("Not supported");
   }
+
+  @DomName('USBIsochronousInTransferResult.USBIsochronousInTransferResult')
+  @DocsEditable()
+  factory _USBIsochronousInTransferResult(
+      List<_USBIsochronousInTransferPacket> packets,
+      [ByteData data]) {
+    if (data != null) {
+      return _USBIsochronousInTransferResult._create_1(packets, data);
+    }
+    return _USBIsochronousInTransferResult._create_2(packets);
+  }
+  static _USBIsochronousInTransferResult _create_1(packets, data) => JS(
+      '_USBIsochronousInTransferResult',
+      'new USBIsochronousInTransferResult(#,#)',
+      packets,
+      data);
+  static _USBIsochronousInTransferResult _create_2(packets) => JS(
+      '_USBIsochronousInTransferResult',
+      'new USBIsochronousInTransferResult(#)',
+      packets);
 }
 // 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
@@ -41340,6 +46333,24 @@
   factory _USBIsochronousOutTransferPacket._() {
     throw new UnsupportedError("Not supported");
   }
+
+  @DomName('USBIsochronousOutTransferPacket.USBIsochronousOutTransferPacket')
+  @DocsEditable()
+  factory _USBIsochronousOutTransferPacket(String status, [int bytesWritten]) {
+    if (bytesWritten != null) {
+      return _USBIsochronousOutTransferPacket._create_1(status, bytesWritten);
+    }
+    return _USBIsochronousOutTransferPacket._create_2(status);
+  }
+  static _USBIsochronousOutTransferPacket _create_1(status, bytesWritten) => JS(
+      '_USBIsochronousOutTransferPacket',
+      'new USBIsochronousOutTransferPacket(#,#)',
+      status,
+      bytesWritten);
+  static _USBIsochronousOutTransferPacket _create_2(status) => JS(
+      '_USBIsochronousOutTransferPacket',
+      'new USBIsochronousOutTransferPacket(#)',
+      status);
 }
 // 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
@@ -41354,6 +46365,17 @@
   factory _USBIsochronousOutTransferResult._() {
     throw new UnsupportedError("Not supported");
   }
+
+  @DomName('USBIsochronousOutTransferResult.USBIsochronousOutTransferResult')
+  @DocsEditable()
+  factory _USBIsochronousOutTransferResult(
+      List<_USBIsochronousOutTransferPacket> packets) {
+    return _USBIsochronousOutTransferResult._create_1(packets);
+  }
+  static _USBIsochronousOutTransferResult _create_1(packets) => JS(
+      '_USBIsochronousOutTransferResult',
+      'new USBIsochronousOutTransferResult(#)',
+      packets);
 }
 // 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
@@ -41368,37 +46390,22 @@
   factory _USBOutTransferResult._() {
     throw new UnsupportedError("Not supported");
   }
-}
-// 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.
 
-@DocsEditable()
-@DomName('WebKitCSSMatrix')
-@SupportedBrowser(SupportedBrowser.CHROME)
-@SupportedBrowser(SupportedBrowser.SAFARI)
-@Experimental()
-// http://dev.w3.org/csswg/cssom/
-@deprecated // deprecated
-@Native("WebKitCSSMatrix")
-abstract class _WebKitCSSMatrix extends Interceptor {
-  // To suppress missing implicit constructor warnings.
-  factory _WebKitCSSMatrix._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('WebKitCSSMatrix.WebKitCSSMatrix')
+  @DomName('USBOutTransferResult.USBOutTransferResult')
   @DocsEditable()
-  factory _WebKitCSSMatrix([String cssValue]) {
-    if (cssValue != null) {
-      return _WebKitCSSMatrix._create_1(cssValue);
+  factory _USBOutTransferResult(String status, [int bytesWritten]) {
+    if (bytesWritten != null) {
+      return _USBOutTransferResult._create_1(status, bytesWritten);
     }
-    return _WebKitCSSMatrix._create_2();
+    return _USBOutTransferResult._create_2(status);
   }
-  static _WebKitCSSMatrix _create_1(cssValue) =>
-      JS('_WebKitCSSMatrix', 'new WebKitCSSMatrix(#)', cssValue);
-  static _WebKitCSSMatrix _create_2() =>
-      JS('_WebKitCSSMatrix', 'new WebKitCSSMatrix()');
+  static _USBOutTransferResult _create_1(status, bytesWritten) => JS(
+      '_USBOutTransferResult',
+      'new USBOutTransferResult(#,#)',
+      status,
+      bytesWritten);
+  static _USBOutTransferResult _create_2(status) =>
+      JS('_USBOutTransferResult', 'new USBOutTransferResult(#)', status);
 }
 // 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
@@ -41453,15 +46460,13 @@
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html#workernavigator
 @Experimental()
 @Native("WorkerNavigator")
-abstract class _WorkerNavigator extends Interceptor
-    implements NavigatorCpu, NavigatorOnLine, NavigatorID {
+abstract class _WorkerNavigator extends NavigatorConcurrentHardware
+    implements NavigatorOnLine, NavigatorID {
   // To suppress missing implicit constructor warnings.
   factory _WorkerNavigator._() {
     throw new UnsupportedError("Not supported");
   }
 
-  // From NavigatorCPU
-
   // From NavigatorID
 
   // From NavigatorOnLine
@@ -41486,20 +46491,6 @@
 // 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.
 
-@DocsEditable()
-@DomName('WorkletGlobalScope')
-@Experimental() // untriaged
-@Native("WorkletGlobalScope")
-abstract class _WorkletGlobalScope extends Interceptor {
-  // To suppress missing implicit constructor warnings.
-  factory _WorkletGlobalScope._() {
-    throw new UnsupportedError("Not supported");
-  }
-}
-// 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.
-
 abstract class _AttributeMap extends MapBase<String, String> {
   final Element _element;
 
@@ -45672,6 +50663,108 @@
 
   T get current => _current;
 }
+// Copyright (c) 2017, 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.
+
+class Console {
+  const Console._safe();
+  static const Console _safeConsole = const Console._safe();
+
+  bool get _isConsoleDefined => JS('bool', 'typeof console != "undefined"');
+
+  @DomName('Console.memory')
+  MemoryInfo get memory =>
+      _isConsoleDefined ? JS('MemoryInfo', 'window.console.memory') : null;
+
+  @DomName('Console.assertCondition')
+  void assertCondition(bool condition, Object arg) => _isConsoleDefined
+      ? JS('void', 'window.console.assertCondition(#, #)', condition, arg)
+      : null;
+
+  @DomName('Console.clear')
+  void clear(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.clear(#)', arg) : null;
+
+  @DomName('Console.count')
+  void count(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.count(#)', arg) : null;
+
+  @DomName('Console.debug')
+  void debug(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.debug(#)', arg) : null;
+
+  @DomName('Console.dir')
+  void dir(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.dir(#)', arg) : null;
+
+  @DomName('Console.dirxml')
+  void dirxml(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.dirxml(#)', arg) : null;
+
+  @DomName('Console.error')
+  void error(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.error(#)', arg) : null;
+
+  @DomName('Console.group')
+  void group(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.group(#)', arg) : null;
+
+  @DomName('Console.groupCollapsed')
+  void groupCollapsed(Object arg) => _isConsoleDefined
+      ? JS('void', 'window.console.groupCollapsed(#)', arg)
+      : null;
+
+  @DomName('Console.groupEnd')
+  void groupEnd() =>
+      _isConsoleDefined ? JS('void', 'window.console.groupEnd()') : null;
+
+  @DomName('Console.info')
+  void info(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.info(#)', arg) : null;
+
+  @DomName('Console.log')
+  void log(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.log(#)', arg) : null;
+
+  @DomName('Console.markTimeline')
+  void markTimeline(Object arg) => _isConsoleDefined
+      ? JS('void', 'window.console.markTimeline(#)', arg)
+      : null;
+
+  @DomName('Console.profile')
+  void profile(String title) =>
+      _isConsoleDefined ? JS('void', 'window.console.profile(#)', title) : null;
+
+  @DomName('Console.profileEnd')
+  void profileEnd(String title) => _isConsoleDefined
+      ? JS('void', 'window.console.profileEnd(#)', title)
+      : null;
+
+  @DomName('Console.table')
+  void table(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.table(#)', arg) : null;
+
+  @DomName('Console.time')
+  void time(String title) =>
+      _isConsoleDefined ? JS('void', 'window.console.time(#)', title) : null;
+
+  @DomName('Console.timeEnd')
+  void timeEnd(String title) =>
+      _isConsoleDefined ? JS('void', 'window.console.timeEnd(#)', title) : null;
+
+  @DomName('Console.timeStamp')
+  void timeStamp(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.timeStamp(#)', arg) : null;
+
+  @DomName('Console.trace')
+  void trace(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.trace(#)', arg) : null;
+
+  @DomName('Console.warn')
+  void warn(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.warn(#)', arg) : null;
+}
 // 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.
@@ -45785,8 +50878,7 @@
   }
 }
 
-void _registerCustomElement(
-    context, document, String tag, Type type, String extendsTagName) {
+Function _registerCustomElement(context, document, String tag, [Map options]) {
   // Function follows the same pattern as the following JavaScript code for
   // registering a custom element.
   //
@@ -45801,6 +50893,13 @@
   //    ...
   //    var e = document.createElement('x-foo');
 
+  var extendsTagName = '';
+  Type type;
+  if (options != null) {
+    extendsTagName = options['extends'];
+    type = options['prototype'];
+  }
+
   var interceptorClass = findInterceptorConstructorForType(type);
   if (interceptorClass == null) {
     throw new ArgumentError(type);
@@ -45854,13 +50953,13 @@
 
   setNativeSubclassDispatchRecord(proto, interceptor);
 
-  var options = JS('=Object', '{prototype: #}', proto);
+  var opts = JS('=Object', '{prototype: #}', proto);
 
   if (extendsTagName != null) {
-    JS('=Object', '#.extends = #', options, extendsTagName);
+    JS('=Object', '#.extends = #', opts, extendsTagName);
   }
 
-  JS('void', '#.registerElement(#, #)', document, tag, options);
+  return JS('=Object', '#.registerElement(#, #)', document, tag, opts);
 }
 
 //// Called by Element.created to do validation & initialization.
@@ -46245,6 +51344,7 @@
   /** True if the ctrl key is pressed during this event. */
   bool get ctrlKey => _parent.ctrlKey;
   int get detail => _parent.detail;
+  bool get isComposing => _parent.isComposing;
   String get key => _parent.key;
   /**
    * Accessor to the part of the keyboard that the key was pressed from (one of
@@ -46292,6 +51392,7 @@
 
   @Experimental() // untriaged
   bool get repeat => throw new UnimplementedError();
+  bool get isComposed => throw new UnimplementedError();
   dynamic get _get_view => throw new UnimplementedError();
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -46332,11 +51433,9 @@
 
   bool get cancelable => wrapped.cancelable;
 
-  EventTarget get currentTarget => wrapped.currentTarget;
+  bool get composed => wrapped.composed;
 
-  List<EventTarget> deepPath() {
-    return wrapped.deepPath();
-  }
+  EventTarget get currentTarget => wrapped.currentTarget;
 
   bool get defaultPrevented => wrapped.defaultPrevented;
 
@@ -46344,15 +51443,13 @@
 
   bool get isTrusted => wrapped.isTrusted;
 
-  bool get scoped => wrapped.scoped;
-
   EventTarget get target => wrapped.target;
 
   double get timeStamp => wrapped.timeStamp;
 
   String get type => wrapped.type;
 
-  void _initEvent(String eventTypeArg, bool canBubbleArg, bool cancelableArg) {
+  void _initEvent(String type, [bool bubbles, bool cancelable]) {
     throw new UnsupportedError('Cannot initialize this Event.');
   }
 
@@ -46368,6 +51465,8 @@
     wrapped.stopPropagation();
   }
 
+  List<EventTarget> composedPath() => wrapped.composedPath();
+
   /**
    * A pointer to the element whose CSS selector matched within which an event
    * was fired. If this Event was not associated with any Event delegation,
diff --git a/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart b/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart
index 715037b..7edd685 100644
--- a/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart
+++ b/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart
@@ -512,6 +512,15 @@
 // 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.
 
+// WARNING: Do not edit - generated code.
+
+@DomName('IDBObserverCallback')
+@Experimental() // untriaged
+typedef void ObserverCallback(ObserverChanges changes);
+// 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.
+
 @DomName('IDBFactory')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX, '15')
@@ -579,21 +588,9 @@
     }
   }
 
-  @DomName('IDBFactory.getDatabaseNames')
-  @SupportedBrowser(SupportedBrowser.CHROME)
-  @Experimental()
-  Future<List<String>> getDatabaseNames() {
-    try {
-      var request = _webkitGetDatabaseNames();
-
-      return _completeRequest(request);
-    } catch (e, stacktrace) {
-      return new Future.error(e, stacktrace);
-    }
-  }
-
   /**
    * Checks to see if getDatabaseNames is supported by the current platform.
+   * TODO(terry): Should be able to always return false?
    */
   bool get supportsDatabaseNames {
     return supported &&
@@ -622,17 +619,6 @@
   @Creates('Request')
   @Creates('Database')
   OpenDBRequest _open(String name, [int version]) native;
-
-  @JSName('webkitGetDatabaseNames')
-  @DomName('IDBFactory.webkitGetDatabaseNames')
-  @DocsEditable()
-  @SupportedBrowser(SupportedBrowser.CHROME)
-  @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  @Returns('Request')
-  @Creates('Request')
-  @Creates('DomStringList')
-  Request _webkitGetDatabaseNames() native;
 }
 
 /**
@@ -762,7 +748,7 @@
 
   @DomName('IDBIndex.name')
   @DocsEditable()
-  final String name;
+  String name;
 
   @DomName('IDBIndex.objectStore')
   @DocsEditable()
@@ -788,12 +774,12 @@
   @DomName('IDBIndex.getAll')
   @DocsEditable()
   @Experimental() // untriaged
-  Request getAll(Object range, [int maxCount]) native;
+  Request getAll(Object query, [int count]) native;
 
   @DomName('IDBIndex.getAllKeys')
   @DocsEditable()
   @Experimental() // untriaged
-  Request getAllKeys(Object range, [int maxCount]) native;
+  Request getAllKeys(Object query, [int count]) native;
 
   @JSName('getKey')
   @DomName('IDBIndex.getKey')
@@ -875,6 +861,11 @@
   static KeyRange bound_(Object lower, Object upper,
       [bool lowerOpen, bool upperOpen]) native;
 
+  @DomName('IDBKeyRange.includes')
+  @DocsEditable()
+  @Experimental() // untriaged
+  bool includes(Object key) native;
+
   @JSName('lowerBound')
   @DomName('IDBKeyRange.lowerBound')
   @DocsEditable()
@@ -1046,7 +1037,7 @@
 
   @DomName('IDBObjectStore.name')
   @DocsEditable()
-  final String name;
+  String name;
 
   @DomName('IDBObjectStore.transaction')
   @DocsEditable()
@@ -1131,12 +1122,17 @@
   @DomName('IDBObjectStore.getAll')
   @DocsEditable()
   @Experimental() // untriaged
-  Request getAll(Object range, [int maxCount]) native;
+  Request getAll(Object query, [int count]) native;
 
   @DomName('IDBObjectStore.getAllKeys')
   @DocsEditable()
   @Experimental() // untriaged
-  Request getAllKeys(Object range, [int maxCount]) native;
+  Request getAllKeys(Object query, [int count]) native;
+
+  @DomName('IDBObjectStore.getKey')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Request getKey(Object key) native;
 
   @DomName('IDBObjectStore.index')
   @DocsEditable()
@@ -1217,6 +1213,106 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('IDBObservation')
+@Experimental() // untriaged
+@Native("IDBObservation")
+class Observation extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory Observation._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('IDBObservation.key')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Object key;
+
+  @DomName('IDBObservation.type')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String type;
+
+  @DomName('IDBObservation.value')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Object value;
+}
+// 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.
+
+@DocsEditable()
+@DomName('IDBObserver')
+@Experimental() // untriaged
+@Native("IDBObserver")
+class Observer extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory Observer._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('IDBObserver.IDBObserver')
+  @DocsEditable()
+  factory Observer(ObserverCallback callback) {
+    return Observer._create_1(callback);
+  }
+  static Observer _create_1(callback) =>
+      JS('Observer', 'new IDBObserver(#)', callback);
+
+  @DomName('IDBObserver.observe')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void observe(Database db, Transaction tx, Map options) {
+    var options_1 = convertDartToNative_Dictionary(options);
+    _observe_1(db, tx, options_1);
+    return;
+  }
+
+  @JSName('observe')
+  @DomName('IDBObserver.observe')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _observe_1(Database db, Transaction tx, options) native;
+
+  @DomName('IDBObserver.unobserve')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void unobserve(Database db) native;
+}
+// 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.
+
+@DocsEditable()
+@DomName('IDBObserverChanges')
+@Experimental() // untriaged
+@Native("IDBObserverChanges")
+class ObserverChanges extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory ObserverChanges._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('IDBObserverChanges.database')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Database database;
+
+  @DomName('IDBObserverChanges.records')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Object records;
+
+  @DomName('IDBObserverChanges.transaction')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Transaction transaction;
+}
+// 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.
+
+@DocsEditable()
 @DomName('IDBOpenDBRequest')
 @Unstable()
 @Native("IDBOpenDBRequest,IDBVersionChangeRequest")
diff --git a/sdk/lib/io/file.dart b/sdk/lib/io/file.dart
index e1a9825..b881bbe 100644
--- a/sdk/lib/io/file.dart
+++ b/sdk/lib/io/file.dart
@@ -609,10 +609,10 @@
  */
 abstract class RandomAccessFile {
   /**
-   * Closes the file. Returns a `Future<RandomAccessFile>` that
-   * completes with this RandomAccessFile when it has been closed.
+   * Closes the file. Returns a `Future` that
+   * completes when it has been closed.
    */
-  Future<RandomAccessFile> close();
+  Future<void> close();
 
   /**
    * Synchronously closes the file.
diff --git a/sdk/lib/io/file_impl.dart b/sdk/lib/io/file_impl.dart
index c0a0543..a64fdc2 100644
--- a/sdk/lib/io/file_impl.dart
+++ b/sdk/lib/io/file_impl.dart
@@ -685,15 +685,13 @@
     }
   }
 
-  Future<RandomAccessFile> close() {
+  Future<void> close() {
     return _dispatch(_FILE_CLOSE, [null], markClosed: true).then((result) {
-      if (result != -1) {
-        closed = closed || (result == 0);
-        _maybePerformCleanup();
-        return this;
-      } else {
+      if (result == -1) {
         throw new FileSystemException("Cannot close file", path);
       }
+      closed = closed || (result == 0);
+      _maybePerformCleanup();
     });
   }
 
diff --git a/sdk/lib/svg/dart2js/svg_dart2js.dart b/sdk/lib/svg/dart2js/svg_dart2js.dart
index e782763..fb3da8b 100644
--- a/sdk/lib/svg/dart2js/svg_dart2js.dart
+++ b/sdk/lib/svg/dart2js/svg_dart2js.dart
@@ -370,7 +370,7 @@
 
   @DomName('SVGAnimatedNumber.animVal')
   @DocsEditable()
-  final double animVal;
+  final num animVal;
 
   @DomName('SVGAnimatedNumber.baseVal')
   @DocsEditable()
@@ -549,10 +549,6 @@
   @DocsEditable()
   final StringList requiredExtensions;
 
-  @DomName('SVGAnimationElement.requiredFeatures')
-  @DocsEditable()
-  final StringList requiredFeatures;
-
   @DomName('SVGAnimationElement.systemLanguage')
   @DocsEditable()
   final StringList systemLanguage;
@@ -2543,6 +2539,21 @@
    */
   GeometryElement.created() : super.created();
 
+  @DomName('SVGGeometryElement.pathLength')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final AnimatedNumber pathLength;
+
+  @DomName('SVGGeometryElement.getPointAtLength')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Point getPointAtLength(num distance) native;
+
+  @DomName('SVGGeometryElement.getTotalLength')
+  @DocsEditable()
+  @Experimental() // untriaged
+  double getTotalLength() native;
+
   @DomName('SVGGeometryElement.isPointInFill')
   @DocsEditable()
   @Experimental() // untriaged
@@ -2612,11 +2623,6 @@
   @Experimental() // untriaged
   final StringList requiredExtensions;
 
-  @DomName('SVGGraphicsElement.requiredFeatures')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final StringList requiredFeatures;
-
   @DomName('SVGGraphicsElement.systemLanguage')
   @DocsEditable()
   @Experimental() // untriaged
@@ -2647,6 +2653,11 @@
    */
   ImageElement.created() : super.created();
 
+  @DomName('SVGImageElement.async')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String async;
+
   @DomName('SVGImageElement.height')
   @DocsEditable()
   final AnimatedLength height;
@@ -2667,6 +2678,11 @@
   @DocsEditable()
   final AnimatedLength y;
 
+  @DomName('SVGImageElement.decode')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future decode() native;
+
   // From SVGURIReference
 
   @DomName('SVGImageElement.href')
@@ -3088,10 +3104,6 @@
   @DocsEditable()
   final StringList requiredExtensions;
 
-  @DomName('SVGMaskElement.requiredFeatures')
-  @DocsEditable()
-  final StringList requiredFeatures;
-
   @DomName('SVGMaskElement.systemLanguage')
   @DocsEditable()
   final StringList systemLanguage;
@@ -3341,22 +3353,6 @@
    * This can only be called by subclasses from their created constructor.
    */
   PathElement.created() : super.created();
-
-  @DomName('SVGPathElement.pathLength')
-  @DocsEditable()
-  final AnimatedNumber pathLength;
-
-  @DomName('SVGPathElement.getPathSegAtLength')
-  @DocsEditable()
-  int getPathSegAtLength(num distance) native;
-
-  @DomName('SVGPathElement.getPointAtLength')
-  @DocsEditable()
-  Point getPointAtLength(num distance) native;
-
-  @DomName('SVGPathElement.getTotalLength')
-  @DocsEditable()
-  double getTotalLength() native;
 }
 // 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
@@ -3428,10 +3424,6 @@
   @DocsEditable()
   final StringList requiredExtensions;
 
-  @DomName('SVGPatternElement.requiredFeatures')
-  @DocsEditable()
-  final StringList requiredFeatures;
-
   @DomName('SVGPatternElement.systemLanguage')
   @DocsEditable()
   final StringList systemLanguage;
@@ -4077,7 +4069,7 @@
 @DomName('SVGElement')
 @Unstable()
 @Native("SVGElement")
-class SvgElement extends Element implements GlobalEventHandlers {
+class SvgElement extends Element implements GlobalEventHandlers, NoncedElement {
   static final _START_TAG_REGEXP = new RegExp('<(\\w+)');
 
   factory SvgElement.tag(String tag) =>
@@ -4528,6 +4520,12 @@
   @Experimental() // untriaged
   static const EventStreamProvider<Event> waitingEvent =
       const EventStreamProvider<Event>('waiting');
+
+  @DomName('SVGElement.wheelEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<WheelEvent> wheelEvent =
+      const EventStreamProvider<WheelEvent>('wheel');
   /**
    * Constructor instantiated by the DOM when a custom element has been created.
    *
@@ -4563,6 +4561,13 @@
   @Experimental() // untriaged
   void focus() native;
 
+  // From NoncedElement
+
+  @DomName('SVGElement.nonce')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String nonce;
+
   @DomName('SVGElement.onabort')
   @DocsEditable()
   @Experimental() // untriaged
@@ -4851,6 +4856,11 @@
   @DocsEditable()
   @Experimental() // untriaged
   ElementStream<Event> get onWaiting => waitingEvent.forElement(this);
+
+  @DomName('SVGElement.onwheel')
+  @DocsEditable()
+  @Experimental() // untriaged
+  ElementStream<WheelEvent> get onWheel => wheelEvent.forElement(this);
 }
 // 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
@@ -4887,22 +4897,10 @@
   @DocsEditable()
   final Point currentTranslate;
 
-  @DomName('SVGSVGElement.currentView')
-  @DocsEditable()
-  final ViewSpec currentView;
-
   @DomName('SVGSVGElement.height')
   @DocsEditable()
   final AnimatedLength height;
 
-  @DomName('SVGSVGElement.useCurrentView')
-  @DocsEditable()
-  final bool useCurrentView;
-
-  @DomName('SVGSVGElement.viewport')
-  @DocsEditable()
-  final Rect viewport;
-
   @DomName('SVGSVGElement.width')
   @DocsEditable()
   final AnimatedLength width;
@@ -5135,8 +5133,6 @@
 
   final StringList requiredExtensions;
 
-  final StringList requiredFeatures;
-
   final StringList systemLanguage;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -5411,7 +5407,7 @@
 
   @DomName('SVGTransform.angle')
   @DocsEditable()
-  final double angle;
+  final num angle;
 
   @DomName('SVGTransform.matrix')
   @DocsEditable()
@@ -5668,10 +5664,6 @@
    */
   ViewElement.created() : super.created();
 
-  @DomName('SVGViewElement.viewTarget')
-  @DocsEditable()
-  final StringList viewTarget;
-
   // From SVGFitToViewBox
 
   @DomName('SVGViewElement.preserveAspectRatio')
@@ -5693,63 +5685,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('SVGViewSpec')
-@Unstable()
-@Native("SVGViewSpec")
-class ViewSpec extends Interceptor implements FitToViewBox, ZoomAndPan {
-  // To suppress missing implicit constructor warnings.
-  factory ViewSpec._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('SVGViewSpec.preserveAspectRatioString')
-  @DocsEditable()
-  final String preserveAspectRatioString;
-
-  @DomName('SVGViewSpec.transform')
-  @DocsEditable()
-  final TransformList transform;
-
-  @DomName('SVGViewSpec.transformString')
-  @DocsEditable()
-  final String transformString;
-
-  @DomName('SVGViewSpec.viewBoxString')
-  @DocsEditable()
-  final String viewBoxString;
-
-  @DomName('SVGViewSpec.viewTarget')
-  @DocsEditable()
-  final SvgElement viewTarget;
-
-  @DomName('SVGViewSpec.viewTargetString')
-  @DocsEditable()
-  final String viewTargetString;
-
-  // From SVGFitToViewBox
-
-  @DomName('SVGViewSpec.preserveAspectRatio')
-  @DocsEditable()
-  @Experimental() // nonstandard
-  final AnimatedPreserveAspectRatio preserveAspectRatio;
-
-  @DomName('SVGViewSpec.viewBox')
-  @DocsEditable()
-  @Experimental() // nonstandard
-  final AnimatedRect viewBox;
-
-  // From SVGZoomAndPan
-
-  @DomName('SVGViewSpec.zoomAndPan')
-  @DocsEditable()
-  @Experimental() // nonstandard
-  int zoomAndPan;
-}
-// 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.
-
-@DocsEditable()
 @DomName('SVGZoomAndPan')
 @Unstable()
 abstract class ZoomAndPan extends Interceptor {
@@ -5777,40 +5712,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('SVGZoomEvent')
-@Unstable()
-@Native("SVGZoomEvent")
-class ZoomEvent extends UIEvent {
-  // To suppress missing implicit constructor warnings.
-  factory ZoomEvent._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('SVGZoomEvent.newScale')
-  @DocsEditable()
-  final double newScale;
-
-  @DomName('SVGZoomEvent.newTranslate')
-  @DocsEditable()
-  final Point newTranslate;
-
-  @DomName('SVGZoomEvent.previousScale')
-  @DocsEditable()
-  final double previousScale;
-
-  @DomName('SVGZoomEvent.previousTranslate')
-  @DocsEditable()
-  final Point previousTranslate;
-
-  @DomName('SVGZoomEvent.zoomRectScreen')
-  @DocsEditable()
-  final Rect zoomRectScreen;
-}
-// 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.
-
-@DocsEditable()
 @DomName('SVGGradientElement')
 @Unstable()
 @Native("SVGGradientElement")
@@ -5885,43 +5786,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
-@DomName('SVGCursorElement')
-@Unstable()
-@Native("SVGCursorElement")
-abstract class _SVGCursorElement extends SvgElement
-    implements UriReference, Tests {
-  // To suppress missing implicit constructor warnings.
-  factory _SVGCursorElement._() {
-    throw new UnsupportedError("Not supported");
-  }
-
-  @DomName('SVGCursorElement.SVGCursorElement')
-  @DocsEditable()
-  factory _SVGCursorElement() =>
-      _SvgElementFactoryProvider.createSvgElement_tag("cursor");
-  /**
-   * Constructor instantiated by the DOM when a custom element has been created.
-   *
-   * This can only be called by subclasses from their created constructor.
-   */
-  _SVGCursorElement.created() : super.created();
-
-  /// Checks if this type is supported on the current platform.
-  static bool get supported =>
-      SvgElement.isTagSupported('cursor') &&
-      (new SvgElement.tag('cursor') is _SVGCursorElement);
-
-  // From SVGTests
-
-  // From SVGURIReference
-
-}
-
-// 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.
-
-@DocsEditable()
 @DomName('SVGFEDropShadowElement')
 @Experimental() // nonstandard
 @Native("SVGFEDropShadowElement")
diff --git a/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart b/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart
index c59ee24..deb724c 100644
--- a/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart
+++ b/sdk/lib/web_audio/dart2js/web_audio_dart2js.dart
@@ -10,14 +10,21 @@
 import 'dart:html_common';
 import 'dart:_native_typed_data';
 import 'dart:typed_data';
-import 'dart:_js_helper'
-    show Creates, JSName, Native, Returns, convertDartClosureToJS;
 import 'dart:_foreign_helper' show JS;
 import 'dart:_interceptors' show Interceptor;
 // DO NOT EDIT - unless you are editing documentation as per:
 // https://code.google.com/p/dart/wiki/ContributingHTMLDocumentation
 // Auto-generated dart:audio library.
 
+import 'dart:_js_helper'
+    show
+        Creates,
+        JavaScriptIndexingBehavior,
+        JSName,
+        Native,
+        Returns,
+        convertDartClosureToJS;
+
 // 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.
@@ -33,6 +40,20 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('AnalyserNode.AnalyserNode')
+  @DocsEditable()
+  factory AnalyserNode(BaseAudioContext context, [Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return AnalyserNode._create_1(context, options_1);
+    }
+    return AnalyserNode._create_2(context);
+  }
+  static AnalyserNode _create_1(context, options) =>
+      JS('AnalyserNode', 'new AnalyserNode(#,#)', context, options);
+  static AnalyserNode _create_2(context) =>
+      JS('AnalyserNode', 'new AnalyserNode(#)', context);
+
   @DomName('AnalyserNode.fftSize')
   @DocsEditable()
   int fftSize;
@@ -85,9 +106,18 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('AudioBuffer.AudioBuffer')
+  @DocsEditable()
+  factory AudioBuffer(Map options) {
+    var options_1 = convertDartToNative_Dictionary(options);
+    return AudioBuffer._create_1(options_1);
+  }
+  static AudioBuffer _create_1(options) =>
+      JS('AudioBuffer', 'new AudioBuffer(#)', options);
+
   @DomName('AudioBuffer.duration')
   @DocsEditable()
-  final double duration;
+  final num duration;
 
   @DomName('AudioBuffer.length')
   @DocsEditable()
@@ -99,7 +129,7 @@
 
   @DomName('AudioBuffer.sampleRate')
   @DocsEditable()
-  final double sampleRate;
+  final num sampleRate;
 
   @DomName('AudioBuffer.copyFromChannel')
   @DocsEditable()
@@ -121,69 +151,35 @@
 // 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.
 
-// WARNING: Do not edit - generated code.
-
-@DomName('AudioBufferCallback')
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioBuffer-section
-@Experimental()
-typedef void AudioBufferCallback(audioBuffer_OR_exception);
-// 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.
-
+@DocsEditable()
 @DomName('AudioBufferSourceNode')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @Experimental()
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioBufferSourceNode-section
 @Native("AudioBufferSourceNode")
-class AudioBufferSourceNode extends AudioSourceNode {
-  // TODO(efortuna): Remove these methods when Chrome stable also uses start
-  // instead of noteOn.
-  void start(num when, [num grainOffset, num grainDuration]) {
-    if (JS('bool', '!!#.start', this)) {
-      if (grainDuration != null) {
-        JS('void', '#.start(#, #, #)', this, when, grainOffset, grainDuration);
-      } else if (grainOffset != null) {
-        JS('void', '#.start(#, #)', this, when, grainOffset);
-      } else {
-        JS('void', '#.start(#)', this, when);
-      }
-    } else {
-      if (grainDuration != null) {
-        JS('void', '#.noteOn(#, #, #)', this, when, grainOffset, grainDuration);
-      } else if (grainOffset != null) {
-        JS('void', '#.noteOn(#, #)', this, when, grainOffset);
-      } else {
-        JS('void', '#.noteOn(#)', this, when);
-      }
-    }
-  }
-
-  void stop(num when) {
-    if (JS('bool', '!!#.stop', this)) {
-      JS('void', '#.stop(#)', this, when);
-    } else {
-      JS('void', '#.noteOff(#)', this, when);
-    }
-  }
-
+class AudioBufferSourceNode extends AudioScheduledSourceNode {
   // To suppress missing implicit constructor warnings.
   factory AudioBufferSourceNode._() {
     throw new UnsupportedError("Not supported");
   }
 
-  /**
-   * Static factory designed to expose `ended` events to event
-   * handlers that are not necessarily instances of [AudioBufferSourceNode].
-   *
-   * See [EventStreamProvider] for usage information.
-   */
-  @DomName('AudioBufferSourceNode.endedEvent')
+  @DomName('AudioBufferSourceNode.AudioBufferSourceNode')
   @DocsEditable()
-  @Experimental() // untriaged
-  static const EventStreamProvider<Event> endedEvent =
-      const EventStreamProvider<Event>('ended');
+  factory AudioBufferSourceNode(BaseAudioContext context, [Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return AudioBufferSourceNode._create_1(context, options_1);
+    }
+    return AudioBufferSourceNode._create_2(context);
+  }
+  static AudioBufferSourceNode _create_1(context, options) => JS(
+      'AudioBufferSourceNode',
+      'new AudioBufferSourceNode(#,#)',
+      context,
+      options);
+  static AudioBufferSourceNode _create_2(context) =>
+      JS('AudioBufferSourceNode', 'new AudioBufferSourceNode(#)', context);
 
   @DomName('AudioBufferSourceNode.buffer')
   @DocsEditable()
@@ -210,11 +206,10 @@
   @DocsEditable()
   final AudioParam playbackRate;
 
-  /// Stream of `ended` events handled by this [AudioBufferSourceNode].
-  @DomName('AudioBufferSourceNode.onended')
+  @JSName('start')
+  @DomName('AudioBufferSourceNode.start')
   @DocsEditable()
-  @Experimental() // untriaged
-  Stream<Event> get onEnded => endedEvent.forTarget(this);
+  void start2([num when, num grainOffset, num grainDuration]) native;
 }
 // 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
@@ -226,7 +221,7 @@
 @Experimental()
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioContext-section
 @Native("AudioContext,webkitAudioContext")
-class AudioContext extends EventTarget {
+class AudioContext extends BaseAudioContext {
   // To suppress missing implicit constructor warnings.
   factory AudioContext._() {
     throw new UnsupportedError("Not supported");
@@ -236,135 +231,28 @@
   static bool get supported =>
       JS('bool', '!!(window.AudioContext || window.webkitAudioContext)');
 
-  @DomName('AudioContext.currentTime')
-  @DocsEditable()
-  final double currentTime;
-
-  @DomName('AudioContext.destination')
-  @DocsEditable()
-  final AudioDestinationNode destination;
-
-  @DomName('AudioContext.listener')
-  @DocsEditable()
-  final AudioListener listener;
-
-  @DomName('AudioContext.sampleRate')
-  @DocsEditable()
-  final double sampleRate;
-
-  @DomName('AudioContext.state')
+  @DomName('AudioContext.baseLatency')
   @DocsEditable()
   @Experimental() // untriaged
-  final String state;
+  final num baseLatency;
 
   @DomName('AudioContext.close')
   @DocsEditable()
   @Experimental() // untriaged
   Future close() native;
 
-  @DomName('AudioContext.createAnalyser')
-  @DocsEditable()
-  AnalyserNode createAnalyser() native;
-
-  @DomName('AudioContext.createBiquadFilter')
-  @DocsEditable()
-  BiquadFilterNode createBiquadFilter() native;
-
-  @DomName('AudioContext.createBuffer')
-  @DocsEditable()
-  AudioBuffer createBuffer(
-      int numberOfChannels, int numberOfFrames, num sampleRate) native;
-
-  @DomName('AudioContext.createBufferSource')
-  @DocsEditable()
-  AudioBufferSourceNode createBufferSource() native;
-
-  @DomName('AudioContext.createChannelMerger')
-  @DocsEditable()
-  ChannelMergerNode createChannelMerger([int numberOfInputs]) native;
-
-  @DomName('AudioContext.createChannelSplitter')
-  @DocsEditable()
-  ChannelSplitterNode createChannelSplitter([int numberOfOutputs]) native;
-
-  @DomName('AudioContext.createConvolver')
-  @DocsEditable()
-  ConvolverNode createConvolver() native;
-
-  @DomName('AudioContext.createDelay')
-  @DocsEditable()
-  DelayNode createDelay([num maxDelayTime]) native;
-
-  @DomName('AudioContext.createDynamicsCompressor')
-  @DocsEditable()
-  DynamicsCompressorNode createDynamicsCompressor() native;
-
-  @JSName('createIIRFilter')
-  @DomName('AudioContext.createIIRFilter')
+  @DomName('AudioContext.getOutputTimestamp')
   @DocsEditable()
   @Experimental() // untriaged
-  IirFilterNode createIirFilter(List<num> feedForward, List<num> feedBack)
-      native;
-
-  @DomName('AudioContext.createMediaElementSource')
-  @DocsEditable()
-  MediaElementAudioSourceNode createMediaElementSource(
-      MediaElement mediaElement) native;
-
-  @DomName('AudioContext.createMediaStreamDestination')
-  @DocsEditable()
-  MediaStreamAudioDestinationNode createMediaStreamDestination() native;
-
-  @DomName('AudioContext.createMediaStreamSource')
-  @DocsEditable()
-  MediaStreamAudioSourceNode createMediaStreamSource(MediaStream mediaStream)
-      native;
-
-  @DomName('AudioContext.createOscillator')
-  @DocsEditable()
-  OscillatorNode createOscillator() native;
-
-  @DomName('AudioContext.createPanner')
-  @DocsEditable()
-  PannerNode createPanner() native;
-
-  @DomName('AudioContext.createPeriodicWave')
-  @DocsEditable()
-  @Experimental() // untriaged
-  PeriodicWave createPeriodicWave(Float32List real, Float32List imag,
-      [Map options]) {
-    if (options != null) {
-      var options_1 = convertDartToNative_Dictionary(options);
-      return _createPeriodicWave_1(real, imag, options_1);
-    }
-    return _createPeriodicWave_2(real, imag);
+  Map getOutputTimestamp() {
+    return convertNativeToDart_Dictionary(_getOutputTimestamp_1());
   }
 
-  @JSName('createPeriodicWave')
-  @DomName('AudioContext.createPeriodicWave')
+  @JSName('getOutputTimestamp')
+  @DomName('AudioContext.getOutputTimestamp')
   @DocsEditable()
   @Experimental() // untriaged
-  PeriodicWave _createPeriodicWave_1(
-      Float32List real, Float32List imag, options) native;
-  @JSName('createPeriodicWave')
-  @DomName('AudioContext.createPeriodicWave')
-  @DocsEditable()
-  @Experimental() // untriaged
-  PeriodicWave _createPeriodicWave_2(Float32List real, Float32List imag) native;
-
-  @DomName('AudioContext.createStereoPanner')
-  @DocsEditable()
-  @Experimental() // untriaged
-  StereoPannerNode createStereoPanner() native;
-
-  @DomName('AudioContext.createWaveShaper')
-  @DocsEditable()
-  WaveShaperNode createWaveShaper() native;
-
-  @DomName('AudioContext.resume')
-  @DocsEditable()
-  @Experimental() // untriaged
-  Future resume() native;
+  _getOutputTimestamp_1() native;
 
   @DomName('AudioContext.suspend')
   @DocsEditable()
@@ -382,8 +270,8 @@
     }
   }
 
-  ScriptProcessorNode createScriptProcessor(int bufferSize,
-      [int numberOfInputChannels, int numberOfOutputChannels]) {
+  ScriptProcessorNode createScriptProcessor(
+      [int bufferSize, int numberOfInputChannels, int numberOfOutputChannels]) {
     var function = JS(
         '=Object',
         '#.createScriptProcessor || '
@@ -396,9 +284,11 @@
     } else if (numberOfInputChannels != null) {
       return JS('ScriptProcessorNode', '#.call(#, #, #)', function, this,
           bufferSize, numberOfInputChannels);
-    } else {
+    } else if (bufferSize != null) {
       return JS(
           'ScriptProcessorNode', '#.call(#, #)', function, this, bufferSize);
+    } else {
+      return JS('ScriptProcessorNode', '#.call(#)', function, this);
     }
   }
 
@@ -406,11 +296,17 @@
   @DomName('AudioContext.decodeAudioData')
   @DocsEditable()
   Future _decodeAudioData(ByteBuffer audioData,
-      [AudioBufferCallback successCallback,
-      AudioBufferCallback errorCallback]) native;
+      [DecodeSuccessCallback successCallback,
+      DecodeErrorCallback errorCallback]) native;
 
   @DomName('AudioContext.decodeAudioData')
-  Future<AudioBuffer> decodeAudioData(ByteBuffer audioData) {
+  Future<AudioBuffer> decodeAudioData(ByteBuffer audioData,
+      [DecodeSuccessCallback successCallback,
+      DecodeErrorCallback errorCallback]) {
+    if (successCallback != null && errorCallback != null) {
+      return _decodeAudioData(audioData, successCallback, errorCallback);
+    }
+
     var completer = new Completer<AudioBuffer>();
     _decodeAudioData(audioData, (value) {
       completer.complete(value);
@@ -458,13 +354,50 @@
     throw new UnsupportedError("Not supported");
   }
 
-  @DomName('AudioListener.dopplerFactor')
+  @DomName('AudioListener.forwardX')
   @DocsEditable()
-  num dopplerFactor;
+  @Experimental() // untriaged
+  final AudioParam forwardX;
 
-  @DomName('AudioListener.speedOfSound')
+  @DomName('AudioListener.forwardY')
   @DocsEditable()
-  num speedOfSound;
+  @Experimental() // untriaged
+  final AudioParam forwardY;
+
+  @DomName('AudioListener.forwardZ')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final AudioParam forwardZ;
+
+  @DomName('AudioListener.positionX')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final AudioParam positionX;
+
+  @DomName('AudioListener.positionY')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final AudioParam positionY;
+
+  @DomName('AudioListener.positionZ')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final AudioParam positionZ;
+
+  @DomName('AudioListener.upX')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final AudioParam upX;
+
+  @DomName('AudioListener.upY')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final AudioParam upY;
+
+  @DomName('AudioListener.upZ')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final AudioParam upZ;
 
   @DomName('AudioListener.setOrientation')
   @DocsEditable()
@@ -473,10 +406,6 @@
   @DomName('AudioListener.setPosition')
   @DocsEditable()
   void setPosition(num x, num y, num z) native;
-
-  @DomName('AudioListener.setVelocity')
-  @DocsEditable()
-  void setVelocity(num x, num y, num z) native;
 }
 // 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
@@ -506,7 +435,7 @@
 
   @DomName('AudioNode.context')
   @DocsEditable()
-  final AudioContext context;
+  final BaseAudioContext context;
 
   @DomName('AudioNode.numberOfInputs')
   @DocsEditable()
@@ -552,12 +481,25 @@
 
   @DomName('AudioParam.defaultValue')
   @DocsEditable()
-  final double defaultValue;
+  final num defaultValue;
+
+  @DomName('AudioParam.maxValue')
+  @DocsEditable()
+  final num maxValue;
+
+  @DomName('AudioParam.minValue')
+  @DocsEditable()
+  final num minValue;
 
   @DomName('AudioParam.value')
   @DocsEditable()
   num value;
 
+  @DomName('AudioParam.cancelAndHoldAtTime')
+  @DocsEditable()
+  @Experimental() // untriaged
+  AudioParam cancelAndHoldAtTime(num startTime) native;
+
   @DomName('AudioParam.cancelScheduledValues')
   @DocsEditable()
   AudioParam cancelScheduledValues(num startTime) native;
@@ -580,7 +522,7 @@
 
   @DomName('AudioParam.setValueCurveAtTime')
   @DocsEditable()
-  AudioParam setValueCurveAtTime(Float32List values, num time, num duration)
+  AudioParam setValueCurveAtTime(List<num> values, num time, num duration)
       native;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -588,6 +530,20 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('AudioParamMap')
+@Experimental() // untriaged
+@Native("AudioParamMap")
+class AudioParamMap extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory AudioParamMap._() {
+    throw new UnsupportedError("Not supported");
+  }
+}
+// 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.
+
+@DocsEditable()
 @DomName('AudioProcessingEvent')
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioProcessingEvent-section
 @Experimental()
@@ -598,6 +554,18 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('AudioProcessingEvent.AudioProcessingEvent')
+  @DocsEditable()
+  factory AudioProcessingEvent(String type, Map eventInitDict) {
+    var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
+    return AudioProcessingEvent._create_1(type, eventInitDict_1);
+  }
+  static AudioProcessingEvent _create_1(type, eventInitDict) => JS(
+      'AudioProcessingEvent',
+      'new AudioProcessingEvent(#,#)',
+      type,
+      eventInitDict);
+
   @DomName('AudioProcessingEvent.inputBuffer')
   @DocsEditable()
   final AudioBuffer inputBuffer;
@@ -609,22 +577,390 @@
   @DomName('AudioProcessingEvent.playbackTime')
   @DocsEditable()
   @Experimental() // untriaged
-  final double playbackTime;
+  final num playbackTime;
 }
 // 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.
 
 @DocsEditable()
-@DomName('AudioSourceNode')
-// https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html
-@Experimental()
-@Native("AudioSourceNode")
-class AudioSourceNode extends AudioNode {
+@DomName('AudioScheduledSourceNode')
+@Experimental() // untriaged
+@Native("AudioScheduledSourceNode")
+class AudioScheduledSourceNode extends AudioNode {
   // To suppress missing implicit constructor warnings.
-  factory AudioSourceNode._() {
+  factory AudioScheduledSourceNode._() {
     throw new UnsupportedError("Not supported");
   }
+
+  @DomName('AudioScheduledSourceNode.endedEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<Event> endedEvent =
+      const EventStreamProvider<Event>('ended');
+
+  @DomName('AudioScheduledSourceNode.start')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void start([num when]) native;
+
+  @DomName('AudioScheduledSourceNode.stop')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void stop([num when]) native;
+
+  @DomName('AudioScheduledSourceNode.onended')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<Event> get onEnded => endedEvent.forTarget(this);
+}
+// 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.
+
+@DocsEditable()
+@DomName('AudioTrack')
+@Experimental() // untriaged
+@Native("AudioTrack")
+class AudioTrack extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory AudioTrack._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('AudioTrack.enabled')
+  @DocsEditable()
+  @Experimental() // untriaged
+  bool enabled;
+
+  @DomName('AudioTrack.id')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String id;
+
+  @DomName('AudioTrack.kind')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String kind;
+
+  @DomName('AudioTrack.label')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String label;
+
+  @DomName('AudioTrack.language')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String language;
+
+  @DomName('AudioTrack.sourceBuffer')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final SourceBuffer sourceBuffer;
+}
+// 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.
+
+@DocsEditable()
+@DomName('AudioTrackList')
+@Experimental() // untriaged
+@Native("AudioTrackList")
+class AudioTrackList extends EventTarget {
+  // To suppress missing implicit constructor warnings.
+  factory AudioTrackList._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('AudioTrackList.changeEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<Event> changeEvent =
+      const EventStreamProvider<Event>('change');
+
+  @DomName('AudioTrackList.length')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final int length;
+
+  @DomName('AudioTrackList.__getter__')
+  @DocsEditable()
+  @Experimental() // untriaged
+  AudioTrack __getter__(int index) native;
+
+  @DomName('AudioTrackList.getTrackById')
+  @DocsEditable()
+  @Experimental() // untriaged
+  AudioTrack getTrackById(String id) native;
+
+  @DomName('AudioTrackList.onchange')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<Event> get onChange => changeEvent.forTarget(this);
+}
+// 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.
+
+@DocsEditable()
+@DomName('AudioWorkletGlobalScope')
+@Experimental() // untriaged
+@Native("AudioWorkletGlobalScope")
+class AudioWorkletGlobalScope extends WorkletGlobalScope {
+  // To suppress missing implicit constructor warnings.
+  factory AudioWorkletGlobalScope._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('AudioWorkletGlobalScope.currentTime')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num currentTime;
+
+  @DomName('AudioWorkletGlobalScope.sampleRate')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num sampleRate;
+
+  @DomName('AudioWorkletGlobalScope.registerProcessor')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void registerProcessor(String name, Object processorConstructor) native;
+}
+// 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.
+
+@DocsEditable()
+@DomName('AudioWorkletNode')
+@Experimental() // untriaged
+@Native("AudioWorkletNode")
+class AudioWorkletNode extends AudioNode {
+  // To suppress missing implicit constructor warnings.
+  factory AudioWorkletNode._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('AudioWorkletNode.AudioWorkletNode')
+  @DocsEditable()
+  factory AudioWorkletNode(BaseAudioContext context, String name,
+      [Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return AudioWorkletNode._create_1(context, name, options_1);
+    }
+    return AudioWorkletNode._create_2(context, name);
+  }
+  static AudioWorkletNode _create_1(context, name, options) => JS(
+      'AudioWorkletNode',
+      'new AudioWorkletNode(#,#,#)',
+      context,
+      name,
+      options);
+  static AudioWorkletNode _create_2(context, name) =>
+      JS('AudioWorkletNode', 'new AudioWorkletNode(#,#)', context, name);
+
+  @DomName('AudioWorkletNode.parameters')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final AudioParamMap parameters;
+}
+// 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.
+
+@DocsEditable()
+@DomName('AudioWorkletProcessor')
+@Experimental() // untriaged
+@Native("AudioWorkletProcessor")
+class AudioWorkletProcessor extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory AudioWorkletProcessor._() {
+    throw new UnsupportedError("Not supported");
+  }
+}
+// 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.
+
+@DocsEditable()
+@DomName('BaseAudioContext')
+@Experimental() // untriaged
+@Native("BaseAudioContext")
+class BaseAudioContext extends EventTarget {
+  // To suppress missing implicit constructor warnings.
+  factory BaseAudioContext._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('BaseAudioContext.currentTime')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num currentTime;
+
+  @DomName('BaseAudioContext.destination')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final AudioDestinationNode destination;
+
+  @DomName('BaseAudioContext.listener')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final AudioListener listener;
+
+  @DomName('BaseAudioContext.sampleRate')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num sampleRate;
+
+  @DomName('BaseAudioContext.state')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String state;
+
+  @DomName('BaseAudioContext.createAnalyser')
+  @DocsEditable()
+  @Experimental() // untriaged
+  AnalyserNode createAnalyser() native;
+
+  @DomName('BaseAudioContext.createBiquadFilter')
+  @DocsEditable()
+  @Experimental() // untriaged
+  BiquadFilterNode createBiquadFilter() native;
+
+  @DomName('BaseAudioContext.createBuffer')
+  @DocsEditable()
+  @Experimental() // untriaged
+  AudioBuffer createBuffer(
+      int numberOfChannels, int numberOfFrames, num sampleRate) native;
+
+  @DomName('BaseAudioContext.createBufferSource')
+  @DocsEditable()
+  @Experimental() // untriaged
+  AudioBufferSourceNode createBufferSource() native;
+
+  @DomName('BaseAudioContext.createChannelMerger')
+  @DocsEditable()
+  @Experimental() // untriaged
+  ChannelMergerNode createChannelMerger([int numberOfInputs]) native;
+
+  @DomName('BaseAudioContext.createChannelSplitter')
+  @DocsEditable()
+  @Experimental() // untriaged
+  ChannelSplitterNode createChannelSplitter([int numberOfOutputs]) native;
+
+  @DomName('BaseAudioContext.createConstantSource')
+  @DocsEditable()
+  @Experimental() // untriaged
+  ConstantSourceNode createConstantSource() native;
+
+  @DomName('BaseAudioContext.createConvolver')
+  @DocsEditable()
+  @Experimental() // untriaged
+  ConvolverNode createConvolver() native;
+
+  @DomName('BaseAudioContext.createDelay')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DelayNode createDelay([num maxDelayTime]) native;
+
+  @DomName('BaseAudioContext.createDynamicsCompressor')
+  @DocsEditable()
+  @Experimental() // untriaged
+  DynamicsCompressorNode createDynamicsCompressor() native;
+
+  @DomName('BaseAudioContext.createGain')
+  @DocsEditable()
+  @Experimental() // untriaged
+  GainNode createGain() native;
+
+  @JSName('createIIRFilter')
+  @DomName('BaseAudioContext.createIIRFilter')
+  @DocsEditable()
+  @Experimental() // untriaged
+  IirFilterNode createIirFilter(List<num> feedForward, List<num> feedBack)
+      native;
+
+  @DomName('BaseAudioContext.createMediaElementSource')
+  @DocsEditable()
+  @Experimental() // untriaged
+  MediaElementAudioSourceNode createMediaElementSource(
+      MediaElement mediaElement) native;
+
+  @DomName('BaseAudioContext.createMediaStreamDestination')
+  @DocsEditable()
+  @Experimental() // untriaged
+  MediaStreamAudioDestinationNode createMediaStreamDestination() native;
+
+  @DomName('BaseAudioContext.createMediaStreamSource')
+  @DocsEditable()
+  @Experimental() // untriaged
+  MediaStreamAudioSourceNode createMediaStreamSource(MediaStream mediaStream)
+      native;
+
+  @DomName('BaseAudioContext.createOscillator')
+  @DocsEditable()
+  @Experimental() // untriaged
+  OscillatorNode createOscillator() native;
+
+  @DomName('BaseAudioContext.createPanner')
+  @DocsEditable()
+  @Experimental() // untriaged
+  PannerNode createPanner() native;
+
+  @DomName('BaseAudioContext.createPeriodicWave')
+  @DocsEditable()
+  @Experimental() // untriaged
+  PeriodicWave createPeriodicWave(List<num> real, List<num> imag,
+      [Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return _createPeriodicWave_1(real, imag, options_1);
+    }
+    return _createPeriodicWave_2(real, imag);
+  }
+
+  @JSName('createPeriodicWave')
+  @DomName('BaseAudioContext.createPeriodicWave')
+  @DocsEditable()
+  @Experimental() // untriaged
+  PeriodicWave _createPeriodicWave_1(List<num> real, List<num> imag, options)
+      native;
+  @JSName('createPeriodicWave')
+  @DomName('BaseAudioContext.createPeriodicWave')
+  @DocsEditable()
+  @Experimental() // untriaged
+  PeriodicWave _createPeriodicWave_2(List<num> real, List<num> imag) native;
+
+  @DomName('BaseAudioContext.createScriptProcessor')
+  @DocsEditable()
+  @Experimental() // untriaged
+  ScriptProcessorNode createScriptProcessor(
+      [int bufferSize,
+      int numberOfInputChannels,
+      int numberOfOutputChannels]) native;
+
+  @DomName('BaseAudioContext.createStereoPanner')
+  @DocsEditable()
+  @Experimental() // untriaged
+  StereoPannerNode createStereoPanner() native;
+
+  @DomName('BaseAudioContext.createWaveShaper')
+  @DocsEditable()
+  @Experimental() // untriaged
+  WaveShaperNode createWaveShaper() native;
+
+  @DomName('BaseAudioContext.decodeAudioData')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future decodeAudioData(ByteBuffer audioData,
+      [DecodeSuccessCallback successCallback,
+      DecodeErrorCallback errorCallback]) native;
+
+  @DomName('BaseAudioContext.resume')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future resume() native;
 }
 // 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
@@ -641,6 +977,20 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('BiquadFilterNode.BiquadFilterNode')
+  @DocsEditable()
+  factory BiquadFilterNode(BaseAudioContext context, [Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return BiquadFilterNode._create_1(context, options_1);
+    }
+    return BiquadFilterNode._create_2(context);
+  }
+  static BiquadFilterNode _create_1(context, options) =>
+      JS('BiquadFilterNode', 'new BiquadFilterNode(#,#)', context, options);
+  static BiquadFilterNode _create_2(context) =>
+      JS('BiquadFilterNode', 'new BiquadFilterNode(#)', context);
+
   @DomName('BiquadFilterNode.Q')
   @DocsEditable()
   final AudioParam Q;
@@ -680,6 +1030,20 @@
   factory ChannelMergerNode._() {
     throw new UnsupportedError("Not supported");
   }
+
+  @DomName('ChannelMergerNode.ChannelMergerNode')
+  @DocsEditable()
+  factory ChannelMergerNode(BaseAudioContext context, [Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return ChannelMergerNode._create_1(context, options_1);
+    }
+    return ChannelMergerNode._create_2(context);
+  }
+  static ChannelMergerNode _create_1(context, options) =>
+      JS('ChannelMergerNode', 'new ChannelMergerNode(#,#)', context, options);
+  static ChannelMergerNode _create_2(context) =>
+      JS('ChannelMergerNode', 'new ChannelMergerNode(#)', context);
 }
 // 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
@@ -695,6 +1059,53 @@
   factory ChannelSplitterNode._() {
     throw new UnsupportedError("Not supported");
   }
+
+  @DomName('ChannelSplitterNode.ChannelSplitterNode')
+  @DocsEditable()
+  factory ChannelSplitterNode(BaseAudioContext context, [Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return ChannelSplitterNode._create_1(context, options_1);
+    }
+    return ChannelSplitterNode._create_2(context);
+  }
+  static ChannelSplitterNode _create_1(context, options) => JS(
+      'ChannelSplitterNode', 'new ChannelSplitterNode(#,#)', context, options);
+  static ChannelSplitterNode _create_2(context) =>
+      JS('ChannelSplitterNode', 'new ChannelSplitterNode(#)', context);
+}
+// 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.
+
+@DocsEditable()
+@DomName('ConstantSourceNode')
+@Experimental() // untriaged
+@Native("ConstantSourceNode")
+class ConstantSourceNode extends AudioScheduledSourceNode {
+  // To suppress missing implicit constructor warnings.
+  factory ConstantSourceNode._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('ConstantSourceNode.ConstantSourceNode')
+  @DocsEditable()
+  factory ConstantSourceNode(BaseAudioContext context, [Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return ConstantSourceNode._create_1(context, options_1);
+    }
+    return ConstantSourceNode._create_2(context);
+  }
+  static ConstantSourceNode _create_1(context, options) =>
+      JS('ConstantSourceNode', 'new ConstantSourceNode(#,#)', context, options);
+  static ConstantSourceNode _create_2(context) =>
+      JS('ConstantSourceNode', 'new ConstantSourceNode(#)', context);
+
+  @DomName('ConstantSourceNode.offset')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final AudioParam offset;
 }
 // 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
@@ -711,6 +1122,20 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('ConvolverNode.ConvolverNode')
+  @DocsEditable()
+  factory ConvolverNode(BaseAudioContext context, [Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return ConvolverNode._create_1(context, options_1);
+    }
+    return ConvolverNode._create_2(context);
+  }
+  static ConvolverNode _create_1(context, options) =>
+      JS('ConvolverNode', 'new ConvolverNode(#,#)', context, options);
+  static ConvolverNode _create_2(context) =>
+      JS('ConvolverNode', 'new ConvolverNode(#)', context);
+
   @DomName('ConvolverNode.buffer')
   @DocsEditable()
   AudioBuffer buffer;
@@ -734,6 +1159,20 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('DelayNode.DelayNode')
+  @DocsEditable()
+  factory DelayNode(BaseAudioContext context, [Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return DelayNode._create_1(context, options_1);
+    }
+    return DelayNode._create_2(context);
+  }
+  static DelayNode _create_1(context, options) =>
+      JS('DelayNode', 'new DelayNode(#,#)', context, options);
+  static DelayNode _create_2(context) =>
+      JS('DelayNode', 'new DelayNode(#)', context);
+
   @DomName('DelayNode.delayTime')
   @DocsEditable()
   final AudioParam delayTime;
@@ -753,6 +1192,23 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('DynamicsCompressorNode.DynamicsCompressorNode')
+  @DocsEditable()
+  factory DynamicsCompressorNode(BaseAudioContext context, [Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return DynamicsCompressorNode._create_1(context, options_1);
+    }
+    return DynamicsCompressorNode._create_2(context);
+  }
+  static DynamicsCompressorNode _create_1(context, options) => JS(
+      'DynamicsCompressorNode',
+      'new DynamicsCompressorNode(#,#)',
+      context,
+      options);
+  static DynamicsCompressorNode _create_2(context) =>
+      JS('DynamicsCompressorNode', 'new DynamicsCompressorNode(#)', context);
+
   @DomName('DynamicsCompressorNode.attack')
   @DocsEditable()
   final AudioParam attack;
@@ -767,7 +1223,7 @@
 
   @DomName('DynamicsCompressorNode.reduction')
   @DocsEditable()
-  final AudioParam reduction;
+  final num reduction;
 
   @DomName('DynamicsCompressorNode.release')
   @DocsEditable()
@@ -792,6 +1248,20 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('GainNode.GainNode')
+  @DocsEditable()
+  factory GainNode(BaseAudioContext context, [Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return GainNode._create_1(context, options_1);
+    }
+    return GainNode._create_2(context);
+  }
+  static GainNode _create_1(context, options) =>
+      JS('GainNode', 'new GainNode(#,#)', context, options);
+  static GainNode _create_2(context) =>
+      JS('GainNode', 'new GainNode(#)', context);
+
   @DomName('GainNode.gain')
   @DocsEditable()
   final AudioParam gain;
@@ -810,6 +1280,15 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('IIRFilterNode.IIRFilterNode')
+  @DocsEditable()
+  factory IirFilterNode(BaseAudioContext context, Map options) {
+    var options_1 = convertDartToNative_Dictionary(options);
+    return IirFilterNode._create_1(context, options_1);
+  }
+  static IirFilterNode _create_1(context, options) =>
+      JS('IirFilterNode', 'new IIRFilterNode(#,#)', context, options);
+
   @DomName('IIRFilterNode.getFrequencyResponse')
   @DocsEditable()
   @Experimental() // untriaged
@@ -825,12 +1304,24 @@
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#MediaElementAudioSourceNode
 @Experimental()
 @Native("MediaElementAudioSourceNode")
-class MediaElementAudioSourceNode extends AudioSourceNode {
+class MediaElementAudioSourceNode extends AudioNode {
   // To suppress missing implicit constructor warnings.
   factory MediaElementAudioSourceNode._() {
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('MediaElementAudioSourceNode.MediaElementAudioSourceNode')
+  @DocsEditable()
+  factory MediaElementAudioSourceNode(BaseAudioContext context, Map options) {
+    var options_1 = convertDartToNative_Dictionary(options);
+    return MediaElementAudioSourceNode._create_1(context, options_1);
+  }
+  static MediaElementAudioSourceNode _create_1(context, options) => JS(
+      'MediaElementAudioSourceNode',
+      'new MediaElementAudioSourceNode(#,#)',
+      context,
+      options);
+
   @DomName('MediaElementAudioSourceNode.mediaElement')
   @DocsEditable()
   @Experimental() // non-standard
@@ -851,6 +1342,26 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('MediaStreamAudioDestinationNode.MediaStreamAudioDestinationNode')
+  @DocsEditable()
+  factory MediaStreamAudioDestinationNode(BaseAudioContext context,
+      [Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return MediaStreamAudioDestinationNode._create_1(context, options_1);
+    }
+    return MediaStreamAudioDestinationNode._create_2(context);
+  }
+  static MediaStreamAudioDestinationNode _create_1(context, options) => JS(
+      'MediaStreamAudioDestinationNode',
+      'new MediaStreamAudioDestinationNode(#,#)',
+      context,
+      options);
+  static MediaStreamAudioDestinationNode _create_2(context) => JS(
+      'MediaStreamAudioDestinationNode',
+      'new MediaStreamAudioDestinationNode(#)',
+      context);
+
   @DomName('MediaStreamAudioDestinationNode.stream')
   @DocsEditable()
   final MediaStream stream;
@@ -864,12 +1375,24 @@
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#MediaStreamAudioSourceNode
 @Experimental()
 @Native("MediaStreamAudioSourceNode")
-class MediaStreamAudioSourceNode extends AudioSourceNode {
+class MediaStreamAudioSourceNode extends AudioNode {
   // To suppress missing implicit constructor warnings.
   factory MediaStreamAudioSourceNode._() {
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('MediaStreamAudioSourceNode.MediaStreamAudioSourceNode')
+  @DocsEditable()
+  factory MediaStreamAudioSourceNode(BaseAudioContext context, Map options) {
+    var options_1 = convertDartToNative_Dictionary(options);
+    return MediaStreamAudioSourceNode._create_1(context, options_1);
+  }
+  static MediaStreamAudioSourceNode _create_1(context, options) => JS(
+      'MediaStreamAudioSourceNode',
+      'new MediaStreamAudioSourceNode(#,#)',
+      context,
+      options);
+
   @DomName('MediaStreamAudioSourceNode.mediaStream')
   @DocsEditable()
   final MediaStream mediaStream;
@@ -889,6 +1412,18 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('OfflineAudioCompletionEvent.OfflineAudioCompletionEvent')
+  @DocsEditable()
+  factory OfflineAudioCompletionEvent(String type, Map eventInitDict) {
+    var eventInitDict_1 = convertDartToNative_Dictionary(eventInitDict);
+    return OfflineAudioCompletionEvent._create_1(type, eventInitDict_1);
+  }
+  static OfflineAudioCompletionEvent _create_1(type, eventInitDict) => JS(
+      'OfflineAudioCompletionEvent',
+      'new OfflineAudioCompletionEvent(#,#)',
+      type,
+      eventInitDict);
+
   @DomName('OfflineAudioCompletionEvent.renderedBuffer')
   @DocsEditable()
   final AudioBuffer renderedBuffer;
@@ -902,7 +1437,7 @@
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#OfflineAudioContext-section
 @Experimental()
 @Native("OfflineAudioContext")
-class OfflineAudioContext extends AudioContext {
+class OfflineAudioContext extends BaseAudioContext {
   // To suppress missing implicit constructor warnings.
   factory OfflineAudioContext._() {
     throw new UnsupportedError("Not supported");
@@ -910,15 +1445,36 @@
 
   @DomName('OfflineAudioContext.OfflineAudioContext')
   @DocsEditable()
-  factory OfflineAudioContext(
-      int numberOfChannels, int numberOfFrames, num sampleRate) {
-    return OfflineAudioContext._create_1(
-        numberOfChannels, numberOfFrames, sampleRate);
+  factory OfflineAudioContext(numberOfChannels_OR_options,
+      [int numberOfFrames, num sampleRate]) {
+    if ((sampleRate is num) &&
+        (numberOfFrames is int) &&
+        (numberOfChannels_OR_options is int)) {
+      return OfflineAudioContext._create_1(
+          numberOfChannels_OR_options, numberOfFrames, sampleRate);
+    }
+    if ((numberOfChannels_OR_options is Map) &&
+        numberOfFrames == null &&
+        sampleRate == null) {
+      var options_1 =
+          convertDartToNative_Dictionary(numberOfChannels_OR_options);
+      return OfflineAudioContext._create_2(options_1);
+    }
+    throw new ArgumentError("Incorrect number or type of arguments");
   }
   static OfflineAudioContext _create_1(
-          numberOfChannels, numberOfFrames, sampleRate) =>
+          numberOfChannels_OR_options, numberOfFrames, sampleRate) =>
       JS('OfflineAudioContext', 'new OfflineAudioContext(#,#,#)',
-          numberOfChannels, numberOfFrames, sampleRate);
+          numberOfChannels_OR_options, numberOfFrames, sampleRate);
+  static OfflineAudioContext _create_2(numberOfChannels_OR_options) => JS(
+      'OfflineAudioContext',
+      'new OfflineAudioContext(#)',
+      numberOfChannels_OR_options);
+
+  @DomName('OfflineAudioContext.length')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final int length;
 
   @DomName('OfflineAudioContext.startRendering')
   @DocsEditable()
@@ -940,23 +1496,25 @@
 // https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#dfn-OscillatorNode
 @Experimental()
 @Native("OscillatorNode,Oscillator")
-class OscillatorNode extends AudioSourceNode {
+class OscillatorNode extends AudioScheduledSourceNode {
   // To suppress missing implicit constructor warnings.
   factory OscillatorNode._() {
     throw new UnsupportedError("Not supported");
   }
 
-  /**
-   * Static factory designed to expose `ended` events to event
-   * handlers that are not necessarily instances of [OscillatorNode].
-   *
-   * See [EventStreamProvider] for usage information.
-   */
-  @DomName('OscillatorNode.endedEvent')
+  @DomName('OscillatorNode.OscillatorNode')
   @DocsEditable()
-  @Experimental() // untriaged
-  static const EventStreamProvider<Event> endedEvent =
-      const EventStreamProvider<Event>('ended');
+  factory OscillatorNode(BaseAudioContext context, [Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return OscillatorNode._create_1(context, options_1);
+    }
+    return OscillatorNode._create_2(context);
+  }
+  static OscillatorNode _create_1(context, options) =>
+      JS('OscillatorNode', 'new OscillatorNode(#,#)', context, options);
+  static OscillatorNode _create_2(context) =>
+      JS('OscillatorNode', 'new OscillatorNode(#)', context);
 
   @DomName('OscillatorNode.detune')
   @DocsEditable()
@@ -974,20 +1532,6 @@
   @DocsEditable()
   @Experimental() // untriaged
   void setPeriodicWave(PeriodicWave periodicWave) native;
-
-  @DomName('OscillatorNode.start')
-  @DocsEditable()
-  void start([num when]) native;
-
-  @DomName('OscillatorNode.stop')
-  @DocsEditable()
-  void stop([num when]) native;
-
-  /// Stream of `ended` events handled by this [OscillatorNode].
-  @DomName('OscillatorNode.onended')
-  @DocsEditable()
-  @Experimental() // untriaged
-  Stream<Event> get onEnded => endedEvent.forTarget(this);
 }
 // 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
@@ -1004,6 +1548,20 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('PannerNode.PannerNode')
+  @DocsEditable()
+  factory PannerNode(BaseAudioContext context, [Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return PannerNode._create_1(context, options_1);
+    }
+    return PannerNode._create_2(context);
+  }
+  static PannerNode _create_1(context, options) =>
+      JS('PannerNode', 'new PannerNode(#,#)', context, options);
+  static PannerNode _create_2(context) =>
+      JS('PannerNode', 'new PannerNode(#)', context);
+
   @DomName('PannerNode.coneInnerAngle')
   @DocsEditable()
   num coneInnerAngle;
@@ -1024,10 +1582,40 @@
   @DocsEditable()
   num maxDistance;
 
+  @DomName('PannerNode.orientationX')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final AudioParam orientationX;
+
+  @DomName('PannerNode.orientationY')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final AudioParam orientationY;
+
+  @DomName('PannerNode.orientationZ')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final AudioParam orientationZ;
+
   @DomName('PannerNode.panningModel')
   @DocsEditable()
   String panningModel;
 
+  @DomName('PannerNode.positionX')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final AudioParam positionX;
+
+  @DomName('PannerNode.positionY')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final AudioParam positionY;
+
+  @DomName('PannerNode.positionZ')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final AudioParam positionZ;
+
   @DomName('PannerNode.refDistance')
   @DocsEditable()
   num refDistance;
@@ -1043,10 +1631,6 @@
   @DomName('PannerNode.setPosition')
   @DocsEditable()
   void setPosition(num x, num y, num z) native;
-
-  @DomName('PannerNode.setVelocity')
-  @DocsEditable()
-  void setVelocity(num x, num y, num z) native;
 }
 // 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
@@ -1061,6 +1645,20 @@
   factory PeriodicWave._() {
     throw new UnsupportedError("Not supported");
   }
+
+  @DomName('PeriodicWave.PeriodicWave')
+  @DocsEditable()
+  factory PeriodicWave(BaseAudioContext context, [Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return PeriodicWave._create_1(context, options_1);
+    }
+    return PeriodicWave._create_2(context);
+  }
+  static PeriodicWave _create_1(context, options) =>
+      JS('PeriodicWave', 'new PeriodicWave(#,#)', context, options);
+  static PeriodicWave _create_2(context) =>
+      JS('PeriodicWave', 'new PeriodicWave(#)', context);
 }
 // 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
@@ -1126,6 +1724,20 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('StereoPannerNode.StereoPannerNode')
+  @DocsEditable()
+  factory StereoPannerNode(BaseAudioContext context, [Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return StereoPannerNode._create_1(context, options_1);
+    }
+    return StereoPannerNode._create_2(context);
+  }
+  static StereoPannerNode _create_1(context, options) =>
+      JS('StereoPannerNode', 'new StereoPannerNode(#,#)', context, options);
+  static StereoPannerNode _create_2(context) =>
+      JS('StereoPannerNode', 'new StereoPannerNode(#)', context);
+
   @DomName('StereoPannerNode.pan')
   @DocsEditable()
   @Experimental() // untriaged
@@ -1146,6 +1758,20 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('WaveShaperNode.WaveShaperNode')
+  @DocsEditable()
+  factory WaveShaperNode(BaseAudioContext context, [Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return WaveShaperNode._create_1(context, options_1);
+    }
+    return WaveShaperNode._create_2(context);
+  }
+  static WaveShaperNode _create_1(context, options) =>
+      JS('WaveShaperNode', 'new WaveShaperNode(#,#)', context, options);
+  static WaveShaperNode _create_2(context) =>
+      JS('WaveShaperNode', 'new WaveShaperNode(#)', context);
+
   @DomName('WaveShaperNode.curve')
   @DocsEditable()
   Float32List curve;
diff --git a/sdk/lib/web_gl/dart2js/web_gl_dart2js.dart b/sdk/lib/web_gl/dart2js/web_gl_dart2js.dart
index 5e833a6..d441cf1 100644
--- a/sdk/lib/web_gl/dart2js/web_gl_dart2js.dart
+++ b/sdk/lib/web_gl/dart2js/web_gl_dart2js.dart
@@ -3,6 +3,7 @@
  */
 library dart.dom.web_gl;
 
+import 'dart:async';
 import 'dart:collection' hide LinkedList, LinkedListEntry;
 import 'dart:_internal' show FixedLengthListMixin;
 import 'dart:html';
@@ -253,7 +254,6 @@
 const int STENCIL_CLEAR_VALUE = RenderingContext.STENCIL_CLEAR_VALUE;
 const int STENCIL_FAIL = RenderingContext.STENCIL_FAIL;
 const int STENCIL_FUNC = RenderingContext.STENCIL_FUNC;
-const int STENCIL_INDEX = RenderingContext.STENCIL_INDEX;
 const int STENCIL_INDEX8 = RenderingContext.STENCIL_INDEX8;
 const int STENCIL_PASS_DEPTH_FAIL = RenderingContext.STENCIL_PASS_DEPTH_FAIL;
 const int STENCIL_PASS_DEPTH_PASS = RenderingContext.STENCIL_PASS_DEPTH_PASS;
@@ -428,72 +428,44 @@
     throw new UnsupportedError("Not supported");
   }
 }
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+@DocsEditable()
+@DomName('WebGLCanvas')
+@Experimental() // untriaged
+@Native("WebGLCanvas")
+class Canvas extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory Canvas._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @JSName('canvas')
+  @DomName('WebGLCanvas.canvas')
+  @DocsEditable()
+  final CanvasElement canvas;
+
+  @JSName('canvas')
+  @DomName('WebGLCanvas.offscreenCanvas')
+  @DocsEditable()
+  final OffscreenCanvas offscreenCanvas;
+}
+
 // 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.
 
 @DocsEditable()
-@DomName('CHROMIUMSubscribeUniform')
+@DomName('WebGLColorBufferFloat')
 @Experimental() // untriaged
-@Native("CHROMIUMSubscribeUniform")
-class ChromiumSubscribeUniform extends Interceptor {
+@Native("WebGLColorBufferFloat")
+class ColorBufferFloat extends Interceptor {
   // To suppress missing implicit constructor warnings.
-  factory ChromiumSubscribeUniform._() {
+  factory ColorBufferFloat._() {
     throw new UnsupportedError("Not supported");
   }
-
-  @DomName('CHROMIUMSubscribeUniform.MOUSE_POSITION_CHROMIUM')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int MOUSE_POSITION_CHROMIUM = 0x924C;
-
-  @DomName('CHROMIUMSubscribeUniform.SUBSCRIBED_VALUES_BUFFER_CHROMIUM')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int SUBSCRIBED_VALUES_BUFFER_CHROMIUM = 0x924B;
-
-  @JSName('bindValuebufferCHROMIUM')
-  @DomName('CHROMIUMSubscribeUniform.bindValuebufferCHROMIUM')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void bindValuebufferChromium(int target, ChromiumValuebuffer buffer) native;
-
-  @JSName('createValuebufferCHROMIUM')
-  @DomName('CHROMIUMSubscribeUniform.createValuebufferCHROMIUM')
-  @DocsEditable()
-  @Experimental() // untriaged
-  ChromiumValuebuffer createValuebufferChromium() native;
-
-  @JSName('deleteValuebufferCHROMIUM')
-  @DomName('CHROMIUMSubscribeUniform.deleteValuebufferCHROMIUM')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void deleteValuebufferChromium(ChromiumValuebuffer buffer) native;
-
-  @JSName('isValuebufferCHROMIUM')
-  @DomName('CHROMIUMSubscribeUniform.isValuebufferCHROMIUM')
-  @DocsEditable()
-  @Experimental() // untriaged
-  bool isValuebufferChromium(ChromiumValuebuffer buffer) native;
-
-  @JSName('populateSubscribedValuesCHROMIUM')
-  @DomName('CHROMIUMSubscribeUniform.populateSubscribedValuesCHROMIUM')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void populateSubscribedValuesChromium(int target) native;
-
-  @JSName('subscribeValueCHROMIUM')
-  @DomName('CHROMIUMSubscribeUniform.subscribeValueCHROMIUM')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void subscribeValueChromium(int target, int subscriptions) native;
-
-  @JSName('uniformValuebufferCHROMIUM')
-  @DomName('CHROMIUMSubscribeUniform.uniformValuebufferCHROMIUM')
-  @DocsEditable()
-  @Experimental() // untriaged
-  void uniformValuebufferChromium(
-      UniformLocation location, int target, int subscription) native;
 }
 // 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
@@ -701,6 +673,71 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('WebGLCompressedTextureETC')
+@Experimental() // untriaged
+@Native("WebGLCompressedTextureETC")
+class CompressedTextureEtc extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory CompressedTextureEtc._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('WebGLCompressedTextureETC.COMPRESSED_R11_EAC')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const int COMPRESSED_R11_EAC = 0x9270;
+
+  @DomName('WebGLCompressedTextureETC.COMPRESSED_RG11_EAC')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const int COMPRESSED_RG11_EAC = 0x9272;
+
+  @DomName('WebGLCompressedTextureETC.COMPRESSED_RGB8_ETC2')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const int COMPRESSED_RGB8_ETC2 = 0x9274;
+
+  @DomName('WebGLCompressedTextureETC.COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const int COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9276;
+
+  @DomName('WebGLCompressedTextureETC.COMPRESSED_RGBA8_ETC2_EAC')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const int COMPRESSED_RGBA8_ETC2_EAC = 0x9278;
+
+  @DomName('WebGLCompressedTextureETC.COMPRESSED_SIGNED_R11_EAC')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const int COMPRESSED_SIGNED_R11_EAC = 0x9271;
+
+  @DomName('WebGLCompressedTextureETC.COMPRESSED_SIGNED_RG11_EAC')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const int COMPRESSED_SIGNED_RG11_EAC = 0x9273;
+
+  @DomName('WebGLCompressedTextureETC.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const int COMPRESSED_SRGB8_ALPHA8_ETC2_EAC = 0x9279;
+
+  @DomName('WebGLCompressedTextureETC.COMPRESSED_SRGB8_ETC2')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const int COMPRESSED_SRGB8_ETC2 = 0x9275;
+
+  @DomName(
+      'WebGLCompressedTextureETC.COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const int COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9277;
+}
+// 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.
+
+@DocsEditable()
 @DomName('WebGLCompressedTexturePVRTC')
 // http://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_pvrtc/
 @Experimental() // experimental
@@ -763,6 +800,40 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('WebGLCompressedTextureS3TCsRGB')
+@Experimental() // untriaged
+@Native("WebGLCompressedTextureS3TCsRGB")
+class CompressedTextureS3TCsRgb extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory CompressedTextureS3TCsRgb._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('WebGLCompressedTextureS3TCsRGB.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const int COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT = 0x8C4D;
+
+  @DomName('WebGLCompressedTextureS3TCsRGB.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const int COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT = 0x8C4E;
+
+  @DomName('WebGLCompressedTextureS3TCsRGB.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const int COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT = 0x8C4F;
+
+  @DomName('WebGLCompressedTextureS3TCsRGB.COMPRESSED_SRGB_S3TC_DXT1_EXT')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const int COMPRESSED_SRGB_S3TC_DXT1_EXT = 0x8C4C;
+}
+// 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.
+
+@DocsEditable()
 @DomName('WebGLContextEvent')
 @Unstable()
 @Native("WebGLContextEvent")
@@ -1084,6 +1155,20 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('EXTColorBufferHalfFloat')
+@Experimental() // untriaged
+@Native("EXTColorBufferHalfFloat")
+class ExtColorBufferHalfFloat extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory ExtColorBufferHalfFloat._() {
+    throw new UnsupportedError("Not supported");
+  }
+}
+// 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.
+
+@DocsEditable()
 @DomName('EXTDisjointTimerQuery')
 @Experimental() // untriaged
 @Native("EXTDisjointTimerQuery")
@@ -1181,6 +1266,46 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('EXTDisjointTimerQueryWebGL2')
+@Experimental() // untriaged
+@Native("EXTDisjointTimerQueryWebGL2")
+class ExtDisjointTimerQueryWebGL2 extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory ExtDisjointTimerQueryWebGL2._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('EXTDisjointTimerQueryWebGL2.GPU_DISJOINT_EXT')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const int GPU_DISJOINT_EXT = 0x8FBB;
+
+  @DomName('EXTDisjointTimerQueryWebGL2.QUERY_COUNTER_BITS_EXT')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const int QUERY_COUNTER_BITS_EXT = 0x8864;
+
+  @DomName('EXTDisjointTimerQueryWebGL2.TIMESTAMP_EXT')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const int TIMESTAMP_EXT = 0x8E28;
+
+  @DomName('EXTDisjointTimerQueryWebGL2.TIME_ELAPSED_EXT')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const int TIME_ELAPSED_EXT = 0x88BF;
+
+  @JSName('queryCounterEXT')
+  @DomName('EXTDisjointTimerQueryWebGL2.queryCounterEXT')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void queryCounterExt(Query query, int target) native;
+}
+// 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.
+
+@DocsEditable()
 @DomName('EXTFragDepth')
 // http://www.khronos.org/registry/webgl/extensions/EXT_frag_depth/
 @Experimental()
@@ -1247,6 +1372,26 @@
 // BSD-style license that can be found in the LICENSE file.
 
 @DocsEditable()
+@DomName('WebGLGetBufferSubDataAsync')
+@Experimental() // untriaged
+@Native("WebGLGetBufferSubDataAsync")
+class GetBufferSubDataAsync extends Interceptor {
+  // To suppress missing implicit constructor warnings.
+  factory GetBufferSubDataAsync._() {
+    throw new UnsupportedError("Not supported");
+  }
+
+  @DomName('WebGLGetBufferSubDataAsync.getBufferSubDataAsync')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future getBufferSubDataAsync(int target, int srcByteOffset, TypedData dstData,
+      [int dstOffset, int length]) native;
+}
+// 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.
+
+@DocsEditable()
 @DomName('WebGLLoseContext')
 // http://www.khronos.org/registry/webgl/extensions/WEBGL_lose_context/
 @Experimental()
@@ -1463,6 +1608,11 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => JS('bool', '!!(window.WebGLRenderingContext)');
 
+  @DomName('WebGLRenderingContext.canvas')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final CanvasElement canvas;
+
   @DomName('WebGLRenderingContext.ACTIVE_ATTRIBUTES')
   @DocsEditable()
   static const int ACTIVE_ATTRIBUTES = 0x8B89;
@@ -2321,10 +2471,6 @@
   @DocsEditable()
   static const int STENCIL_FUNC = 0x0B92;
 
-  @DomName('WebGLRenderingContext.STENCIL_INDEX')
-  @DocsEditable()
-  static const int STENCIL_INDEX = 0x1901;
-
   @DomName('WebGLRenderingContext.STENCIL_INDEX8')
   @DocsEditable()
   static const int STENCIL_INDEX8 = 0x8D48;
@@ -2655,11 +2801,6 @@
 
   // From WebGLRenderingContextBase
 
-  @DomName('WebGLRenderingContext.canvas')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final CanvasElement canvas;
-
   @DomName('WebGLRenderingContext.drawingBufferHeight')
   @DocsEditable()
   final int drawingBufferHeight;
@@ -2749,6 +2890,11 @@
   @DocsEditable()
   void colorMask(bool red, bool green, bool blue, bool alpha) native;
 
+  @DomName('WebGLRenderingContext.commit')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future commit() native;
+
   @DomName('WebGLRenderingContext.compileShader')
   @DocsEditable()
   void compileShader(Shader shader) native;
@@ -3142,8 +3288,7 @@
           pixels);
       return;
     }
-    if ((bitmap_OR_border_OR_canvas_OR_image_OR_pixels_OR_video is ImageData ||
-            bitmap_OR_border_OR_canvas_OR_image_OR_pixels_OR_video == null) &&
+    if ((bitmap_OR_border_OR_canvas_OR_image_OR_pixels_OR_video is ImageData) &&
         format == null &&
         type == null &&
         pixels == null) {
@@ -3277,8 +3422,7 @@
           pixels);
       return;
     }
-    if ((bitmap_OR_canvas_OR_format_OR_image_OR_pixels_OR_video is ImageData ||
-            bitmap_OR_canvas_OR_format_OR_image_OR_pixels_OR_video == null) &&
+    if ((bitmap_OR_canvas_OR_format_OR_image_OR_pixels_OR_video is ImageData) &&
         type == null &&
         pixels == null) {
       var pixels_1 = convertDartToNative_ImageData(
@@ -3600,6 +3744,11 @@
     throw new UnsupportedError("Not supported");
   }
 
+  @DomName('WebGL2RenderingContext.canvas')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final Canvas canvas;
+
   @DomName('WebGL2RenderingContext.ACTIVE_ATTRIBUTES')
   @DocsEditable()
   @Experimental() // untriaged
@@ -4671,11 +4820,6 @@
   @Experimental() // untriaged
   static const int STENCIL_FUNC = 0x0B92;
 
-  @DomName('WebGL2RenderingContext.STENCIL_INDEX')
-  @DocsEditable()
-  @Experimental() // untriaged
-  static const int STENCIL_INDEX = 0x1901;
-
   @DomName('WebGL2RenderingContext.STENCIL_INDEX8')
   @DocsEditable()
   @Experimental() // untriaged
@@ -5130,6 +5274,21 @@
   void blitFramebuffer(int srcX0, int srcY0, int srcX1, int srcY1, int dstX0,
       int dstY0, int dstX1, int dstY1, int mask, int filter) native;
 
+  @JSName('bufferData')
+  @DomName('WebGL2RenderingContext.bufferData')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void bufferData2(int target, TypedData srcData, int usage, int srcOffset,
+      [int length]) native;
+
+  @JSName('bufferSubData')
+  @DomName('WebGL2RenderingContext.bufferSubData')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void bufferSubData2(
+      int target, int dstByteOffset, TypedData srcData, int srcOffset,
+      [int length]) native;
+
   @DomName('WebGL2RenderingContext.clearBufferfi')
   @DocsEditable()
   @Experimental() // untriaged
@@ -5138,33 +5297,88 @@
   @DomName('WebGL2RenderingContext.clearBufferfv')
   @DocsEditable()
   @Experimental() // untriaged
-  void clearBufferfv(int buffer, int drawbuffer, value) native;
+  void clearBufferfv(int buffer, int drawbuffer, value, [int srcOffset]) native;
 
   @DomName('WebGL2RenderingContext.clearBufferiv')
   @DocsEditable()
   @Experimental() // untriaged
-  void clearBufferiv(int buffer, int drawbuffer, value) native;
+  void clearBufferiv(int buffer, int drawbuffer, value, [int srcOffset]) native;
 
   @DomName('WebGL2RenderingContext.clearBufferuiv')
   @DocsEditable()
   @Experimental() // untriaged
-  void clearBufferuiv(int buffer, int drawbuffer, value) native;
+  void clearBufferuiv(int buffer, int drawbuffer, value, [int srcOffset])
+      native;
 
   @DomName('WebGL2RenderingContext.clientWaitSync')
   @DocsEditable()
   @Experimental() // untriaged
   int clientWaitSync(Sync sync, int flags, int timeout) native;
 
+  @JSName('compressedTexImage2D')
+  @DomName('WebGL2RenderingContext.compressedTexImage2D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void compressedTexImage2D2(int target, int level, int internalformat,
+      int width, int height, int border, TypedData data, int srcOffset,
+      [int srcLengthOverride]) native;
+
+  @JSName('compressedTexImage2D')
+  @DomName('WebGL2RenderingContext.compressedTexImage2D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void compressedTexImage2D3(int target, int level, int internalformat,
+      int width, int height, int border, int imageSize, int offset) native;
+
   @DomName('WebGL2RenderingContext.compressedTexImage3D')
   @DocsEditable()
   @Experimental() // untriaged
   void compressedTexImage3D(int target, int level, int internalformat,
-      int width, int height, int depth, int border, TypedData data) native;
+      int width, int height, int depth, int border, TypedData data,
+      [int srcOffset, int srcLengthOverride]) native;
+
+  @JSName('compressedTexImage3D')
+  @DomName('WebGL2RenderingContext.compressedTexImage3D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void compressedTexImage3D2(
+      int target,
+      int level,
+      int internalformat,
+      int width,
+      int height,
+      int depth,
+      int border,
+      int imageSize,
+      int offset) native;
+
+  @JSName('compressedTexSubImage2D')
+  @DomName('WebGL2RenderingContext.compressedTexSubImage2D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void compressedTexSubImage2D2(int target, int level, int xoffset, int yoffset,
+      int width, int height, int format, TypedData data, int srcOffset,
+      [int srcLengthOverride]) native;
+
+  @JSName('compressedTexSubImage2D')
+  @DomName('WebGL2RenderingContext.compressedTexSubImage2D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void compressedTexSubImage2D3(int target, int level, int xoffset, int yoffset,
+      int width, int height, int format, int imageSize, int offset) native;
 
   @DomName('WebGL2RenderingContext.compressedTexSubImage3D')
   @DocsEditable()
   @Experimental() // untriaged
-  void compressedTexSubImage3D(
+  void compressedTexSubImage3D(int target, int level, int xoffset, int yoffset,
+      int zoffset, int width, int height, int depth, int format, TypedData data,
+      [int srcOffset, int srcLengthOverride]) native;
+
+  @JSName('compressedTexSubImage3D')
+  @DomName('WebGL2RenderingContext.compressedTexSubImage3D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void compressedTexSubImage3D2(
       int target,
       int level,
       int xoffset,
@@ -5174,7 +5388,8 @@
       int height,
       int depth,
       int format,
-      TypedData data) native;
+      int imageSize,
+      int offset) native;
 
   @DomName('WebGL2RenderingContext.copyBufferSubData')
   @DocsEditable()
@@ -5298,7 +5513,8 @@
   @DomName('WebGL2RenderingContext.getBufferSubData')
   @DocsEditable()
   @Experimental() // untriaged
-  void getBufferSubData(int target, int offset, ByteBuffer returnedData) native;
+  void getBufferSubData(int target, int srcByteOffset, TypedData dstData,
+      [int dstOffset, int length]) native;
 
   @DomName('WebGL2RenderingContext.getFragDataLocation')
   @DocsEditable()
@@ -5319,7 +5535,7 @@
   @DomName('WebGL2RenderingContext.getQuery')
   @DocsEditable()
   @Experimental() // untriaged
-  Query getQuery(int target, int pname) native;
+  Object getQuery(int target, int pname) native;
 
   @DomName('WebGL2RenderingContext.getQueryParameter')
   @DocsEditable()
@@ -5411,7 +5627,8 @@
   @DocsEditable()
   @Experimental() // untriaged
   void readPixels2(int x, int y, int width, int height, int format, int type,
-      int offset) native;
+      dstData_OR_offset,
+      [int offset]) native;
 
   @DomName('WebGL2RenderingContext.renderbufferStorageMultisample')
   @DocsEditable()
@@ -5434,12 +5651,165 @@
   @Experimental() // untriaged
   void samplerParameteri(Sampler sampler, int pname, int param) native;
 
+  @DomName('WebGL2RenderingContext.texImage2D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void texImage2D2(
+      int target,
+      int level,
+      int internalformat,
+      int width,
+      int height,
+      int border,
+      int format,
+      int type,
+      bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video,
+      [int srcOffset]) {
+    if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video
+            is int) &&
+        srcOffset == null) {
+      _texImage2D2_1(
+          target,
+          level,
+          internalformat,
+          width,
+          height,
+          border,
+          format,
+          type,
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video);
+      return;
+    }
+    if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video
+            is ImageData) &&
+        srcOffset == null) {
+      var data_1 = convertDartToNative_ImageData(
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video);
+      _texImage2D2_2(target, level, internalformat, width, height, border,
+          format, type, data_1);
+      return;
+    }
+    if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video
+            is ImageElement) &&
+        srcOffset == null) {
+      _texImage2D2_3(
+          target,
+          level,
+          internalformat,
+          width,
+          height,
+          border,
+          format,
+          type,
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video);
+      return;
+    }
+    if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video
+            is CanvasElement) &&
+        srcOffset == null) {
+      _texImage2D2_4(
+          target,
+          level,
+          internalformat,
+          width,
+          height,
+          border,
+          format,
+          type,
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video);
+      return;
+    }
+    if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video
+            is VideoElement) &&
+        srcOffset == null) {
+      _texImage2D2_5(
+          target,
+          level,
+          internalformat,
+          width,
+          height,
+          border,
+          format,
+          type,
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video);
+      return;
+    }
+    if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video
+            is ImageBitmap) &&
+        srcOffset == null) {
+      _texImage2D2_6(
+          target,
+          level,
+          internalformat,
+          width,
+          height,
+          border,
+          format,
+          type,
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video);
+      return;
+    }
+    if (srcOffset != null &&
+        (bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video
+            is TypedData)) {
+      _texImage2D2_7(
+          target,
+          level,
+          internalformat,
+          width,
+          height,
+          border,
+          format,
+          type,
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video,
+          srcOffset);
+      return;
+    }
+    throw new ArgumentError("Incorrect number or type of arguments");
+  }
+
   @JSName('texImage2D')
   @DomName('WebGL2RenderingContext.texImage2D')
   @DocsEditable()
   @Experimental() // untriaged
-  void texImage2D2(int target, int level, int internalformat, int width,
-      int height, int border, int format, int type, int offset) native;
+  void _texImage2D2_1(target, level, internalformat, width, height, border,
+      format, type, int offset) native;
+  @JSName('texImage2D')
+  @DomName('WebGL2RenderingContext.texImage2D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _texImage2D2_2(target, level, internalformat, width, height, border,
+      format, type, data) native;
+  @JSName('texImage2D')
+  @DomName('WebGL2RenderingContext.texImage2D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _texImage2D2_3(target, level, internalformat, width, height, border,
+      format, type, ImageElement image) native;
+  @JSName('texImage2D')
+  @DomName('WebGL2RenderingContext.texImage2D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _texImage2D2_4(target, level, internalformat, width, height, border,
+      format, type, CanvasElement canvas) native;
+  @JSName('texImage2D')
+  @DomName('WebGL2RenderingContext.texImage2D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _texImage2D2_5(target, level, internalformat, width, height, border,
+      format, type, VideoElement video) native;
+  @JSName('texImage2D')
+  @DomName('WebGL2RenderingContext.texImage2D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _texImage2D2_6(target, level, internalformat, width, height, border,
+      format, type, ImageBitmap bitmap) native;
+  @JSName('texImage2D')
+  @DomName('WebGL2RenderingContext.texImage2D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _texImage2D2_7(target, level, internalformat, width, height, border,
+      format, type, TypedData srcData, srcOffset) native;
 
   @DomName('WebGL2RenderingContext.texImage3D')
   @DocsEditable()
@@ -5454,7 +5824,183 @@
       int border,
       int format,
       int type,
-      offset_OR_pixels) native;
+      bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video,
+      [int srcOffset]) {
+    if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video
+            is int) &&
+        srcOffset == null) {
+      _texImage3D_1(
+          target,
+          level,
+          internalformat,
+          width,
+          height,
+          depth,
+          border,
+          format,
+          type,
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video);
+      return;
+    }
+    if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video
+            is ImageData) &&
+        srcOffset == null) {
+      var data_1 = convertDartToNative_ImageData(
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video);
+      _texImage3D_2(target, level, internalformat, width, height, depth, border,
+          format, type, data_1);
+      return;
+    }
+    if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video
+            is ImageElement) &&
+        srcOffset == null) {
+      _texImage3D_3(
+          target,
+          level,
+          internalformat,
+          width,
+          height,
+          depth,
+          border,
+          format,
+          type,
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video);
+      return;
+    }
+    if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video
+            is CanvasElement) &&
+        srcOffset == null) {
+      _texImage3D_4(
+          target,
+          level,
+          internalformat,
+          width,
+          height,
+          depth,
+          border,
+          format,
+          type,
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video);
+      return;
+    }
+    if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video
+            is VideoElement) &&
+        srcOffset == null) {
+      _texImage3D_5(
+          target,
+          level,
+          internalformat,
+          width,
+          height,
+          depth,
+          border,
+          format,
+          type,
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video);
+      return;
+    }
+    if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video
+            is ImageBitmap) &&
+        srcOffset == null) {
+      _texImage3D_6(
+          target,
+          level,
+          internalformat,
+          width,
+          height,
+          depth,
+          border,
+          format,
+          type,
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video);
+      return;
+    }
+    if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video
+                is TypedData ||
+            bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video ==
+                null) &&
+        srcOffset == null) {
+      _texImage3D_7(
+          target,
+          level,
+          internalformat,
+          width,
+          height,
+          depth,
+          border,
+          format,
+          type,
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video);
+      return;
+    }
+    if (srcOffset != null &&
+        (bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video
+            is TypedData)) {
+      _texImage3D_8(
+          target,
+          level,
+          internalformat,
+          width,
+          height,
+          depth,
+          border,
+          format,
+          type,
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video,
+          srcOffset);
+      return;
+    }
+    throw new ArgumentError("Incorrect number or type of arguments");
+  }
+
+  @JSName('texImage3D')
+  @DomName('WebGL2RenderingContext.texImage3D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _texImage3D_1(target, level, internalformat, width, height, depth,
+      border, format, type, int offset) native;
+  @JSName('texImage3D')
+  @DomName('WebGL2RenderingContext.texImage3D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _texImage3D_2(target, level, internalformat, width, height, depth,
+      border, format, type, data) native;
+  @JSName('texImage3D')
+  @DomName('WebGL2RenderingContext.texImage3D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _texImage3D_3(target, level, internalformat, width, height, depth,
+      border, format, type, ImageElement image) native;
+  @JSName('texImage3D')
+  @DomName('WebGL2RenderingContext.texImage3D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _texImage3D_4(target, level, internalformat, width, height, depth,
+      border, format, type, CanvasElement canvas) native;
+  @JSName('texImage3D')
+  @DomName('WebGL2RenderingContext.texImage3D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _texImage3D_5(target, level, internalformat, width, height, depth,
+      border, format, type, VideoElement video) native;
+  @JSName('texImage3D')
+  @DomName('WebGL2RenderingContext.texImage3D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _texImage3D_6(target, level, internalformat, width, height, depth,
+      border, format, type, ImageBitmap bitmap) native;
+  @JSName('texImage3D')
+  @DomName('WebGL2RenderingContext.texImage3D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _texImage3D_7(target, level, internalformat, width, height, depth,
+      border, format, type, TypedData pixels) native;
+  @JSName('texImage3D')
+  @DomName('WebGL2RenderingContext.texImage3D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _texImage3D_8(target, level, internalformat, width, height, depth,
+      border, format, type, TypedData pixels, srcOffset) native;
 
   @DomName('WebGL2RenderingContext.texStorage2D')
   @DocsEditable()
@@ -5468,6 +6014,166 @@
   void texStorage3D(int target, int levels, int internalformat, int width,
       int height, int depth) native;
 
+  @DomName('WebGL2RenderingContext.texSubImage2D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void texSubImage2D2(
+      int target,
+      int level,
+      int xoffset,
+      int yoffset,
+      int width,
+      int height,
+      int format,
+      int type,
+      bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video,
+      [int srcOffset]) {
+    if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video
+            is int) &&
+        srcOffset == null) {
+      _texSubImage2D2_1(
+          target,
+          level,
+          xoffset,
+          yoffset,
+          width,
+          height,
+          format,
+          type,
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video);
+      return;
+    }
+    if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video
+            is ImageData) &&
+        srcOffset == null) {
+      var data_1 = convertDartToNative_ImageData(
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video);
+      _texSubImage2D2_2(
+          target, level, xoffset, yoffset, width, height, format, type, data_1);
+      return;
+    }
+    if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video
+            is ImageElement) &&
+        srcOffset == null) {
+      _texSubImage2D2_3(
+          target,
+          level,
+          xoffset,
+          yoffset,
+          width,
+          height,
+          format,
+          type,
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video);
+      return;
+    }
+    if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video
+            is CanvasElement) &&
+        srcOffset == null) {
+      _texSubImage2D2_4(
+          target,
+          level,
+          xoffset,
+          yoffset,
+          width,
+          height,
+          format,
+          type,
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video);
+      return;
+    }
+    if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video
+            is VideoElement) &&
+        srcOffset == null) {
+      _texSubImage2D2_5(
+          target,
+          level,
+          xoffset,
+          yoffset,
+          width,
+          height,
+          format,
+          type,
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video);
+      return;
+    }
+    if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video
+            is ImageBitmap) &&
+        srcOffset == null) {
+      _texSubImage2D2_6(
+          target,
+          level,
+          xoffset,
+          yoffset,
+          width,
+          height,
+          format,
+          type,
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video);
+      return;
+    }
+    if (srcOffset != null &&
+        (bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video
+            is TypedData)) {
+      _texSubImage2D2_7(
+          target,
+          level,
+          xoffset,
+          yoffset,
+          width,
+          height,
+          format,
+          type,
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_srcData_OR_video,
+          srcOffset);
+      return;
+    }
+    throw new ArgumentError("Incorrect number or type of arguments");
+  }
+
+  @JSName('texSubImage2D')
+  @DomName('WebGL2RenderingContext.texSubImage2D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _texSubImage2D2_1(target, level, xoffset, yoffset, width, height, format,
+      type, int offset) native;
+  @JSName('texSubImage2D')
+  @DomName('WebGL2RenderingContext.texSubImage2D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _texSubImage2D2_2(target, level, xoffset, yoffset, width, height, format,
+      type, data) native;
+  @JSName('texSubImage2D')
+  @DomName('WebGL2RenderingContext.texSubImage2D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _texSubImage2D2_3(target, level, xoffset, yoffset, width, height, format,
+      type, ImageElement image) native;
+  @JSName('texSubImage2D')
+  @DomName('WebGL2RenderingContext.texSubImage2D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _texSubImage2D2_4(target, level, xoffset, yoffset, width, height, format,
+      type, CanvasElement canvas) native;
+  @JSName('texSubImage2D')
+  @DomName('WebGL2RenderingContext.texSubImage2D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _texSubImage2D2_5(target, level, xoffset, yoffset, width, height, format,
+      type, VideoElement video) native;
+  @JSName('texSubImage2D')
+  @DomName('WebGL2RenderingContext.texSubImage2D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _texSubImage2D2_6(target, level, xoffset, yoffset, width, height, format,
+      type, ImageBitmap bitmap) native;
+  @JSName('texSubImage2D')
+  @DomName('WebGL2RenderingContext.texSubImage2D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _texSubImage2D2_7(target, level, xoffset, yoffset, width, height, format,
+      type, TypedData srcData, srcOffset) native;
+
   @DomName('WebGL2RenderingContext.texSubImage3D')
   @DocsEditable()
   @Experimental() // untriaged
@@ -5477,102 +6183,140 @@
       int xoffset,
       int yoffset,
       int zoffset,
-      int format_OR_width,
-      int height_OR_type,
-      bitmap_OR_canvas_OR_data_OR_depth_OR_image_OR_video,
-      [int format,
+      int width,
+      int height,
+      int depth,
+      int format,
       int type,
-      TypedData pixels]) {
-    if (type != null &&
-        format != null &&
-        (bitmap_OR_canvas_OR_data_OR_depth_OR_image_OR_video is int)) {
+      bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video,
+      [int srcOffset]) {
+    if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video
+            is int) &&
+        srcOffset == null) {
       _texSubImage3D_1(
           target,
           level,
           xoffset,
           yoffset,
           zoffset,
-          format_OR_width,
-          height_OR_type,
-          bitmap_OR_canvas_OR_data_OR_depth_OR_image_OR_video,
+          width,
+          height,
+          depth,
           format,
           type,
-          pixels);
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video);
       return;
     }
-    if ((bitmap_OR_canvas_OR_data_OR_depth_OR_image_OR_video is ImageData ||
-            bitmap_OR_canvas_OR_data_OR_depth_OR_image_OR_video == null) &&
-        format == null &&
-        type == null &&
-        pixels == null) {
+    if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video
+            is ImageData) &&
+        srcOffset == null) {
       var data_1 = convertDartToNative_ImageData(
-          bitmap_OR_canvas_OR_data_OR_depth_OR_image_OR_video);
-      _texSubImage3D_2(target, level, xoffset, yoffset, zoffset,
-          format_OR_width, height_OR_type, data_1);
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video);
+      _texSubImage3D_2(target, level, xoffset, yoffset, zoffset, width, height,
+          depth, format, type, data_1);
       return;
     }
-    if ((bitmap_OR_canvas_OR_data_OR_depth_OR_image_OR_video is ImageElement ||
-            bitmap_OR_canvas_OR_data_OR_depth_OR_image_OR_video == null) &&
-        format == null &&
-        type == null &&
-        pixels == null) {
+    if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video
+            is ImageElement) &&
+        srcOffset == null) {
       _texSubImage3D_3(
           target,
           level,
           xoffset,
           yoffset,
           zoffset,
-          format_OR_width,
-          height_OR_type,
-          bitmap_OR_canvas_OR_data_OR_depth_OR_image_OR_video);
+          width,
+          height,
+          depth,
+          format,
+          type,
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video);
       return;
     }
-    if ((bitmap_OR_canvas_OR_data_OR_depth_OR_image_OR_video is CanvasElement ||
-            bitmap_OR_canvas_OR_data_OR_depth_OR_image_OR_video == null) &&
-        format == null &&
-        type == null &&
-        pixels == null) {
+    if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video
+            is CanvasElement) &&
+        srcOffset == null) {
       _texSubImage3D_4(
           target,
           level,
           xoffset,
           yoffset,
           zoffset,
-          format_OR_width,
-          height_OR_type,
-          bitmap_OR_canvas_OR_data_OR_depth_OR_image_OR_video);
+          width,
+          height,
+          depth,
+          format,
+          type,
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video);
       return;
     }
-    if ((bitmap_OR_canvas_OR_data_OR_depth_OR_image_OR_video is VideoElement ||
-            bitmap_OR_canvas_OR_data_OR_depth_OR_image_OR_video == null) &&
-        format == null &&
-        type == null &&
-        pixels == null) {
+    if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video
+            is VideoElement) &&
+        srcOffset == null) {
       _texSubImage3D_5(
           target,
           level,
           xoffset,
           yoffset,
           zoffset,
-          format_OR_width,
-          height_OR_type,
-          bitmap_OR_canvas_OR_data_OR_depth_OR_image_OR_video);
+          width,
+          height,
+          depth,
+          format,
+          type,
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video);
       return;
     }
-    if ((bitmap_OR_canvas_OR_data_OR_depth_OR_image_OR_video is ImageBitmap ||
-            bitmap_OR_canvas_OR_data_OR_depth_OR_image_OR_video == null) &&
-        format == null &&
-        type == null &&
-        pixels == null) {
+    if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video
+            is ImageBitmap) &&
+        srcOffset == null) {
       _texSubImage3D_6(
           target,
           level,
           xoffset,
           yoffset,
           zoffset,
-          format_OR_width,
-          height_OR_type,
-          bitmap_OR_canvas_OR_data_OR_depth_OR_image_OR_video);
+          width,
+          height,
+          depth,
+          format,
+          type,
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video);
+      return;
+    }
+    if ((bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video
+            is TypedData) &&
+        srcOffset == null) {
+      _texSubImage3D_7(
+          target,
+          level,
+          xoffset,
+          yoffset,
+          zoffset,
+          width,
+          height,
+          depth,
+          format,
+          type,
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video);
+      return;
+    }
+    if (srcOffset != null &&
+        (bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video
+            is TypedData)) {
+      _texSubImage3D_8(
+          target,
+          level,
+          xoffset,
+          yoffset,
+          zoffset,
+          width,
+          height,
+          depth,
+          format,
+          type,
+          bitmap_OR_canvas_OR_data_OR_image_OR_offset_OR_pixels_OR_video,
+          srcOffset);
       return;
     }
     throw new ArgumentError("Incorrect number or type of arguments");
@@ -5583,37 +6327,49 @@
   @DocsEditable()
   @Experimental() // untriaged
   void _texSubImage3D_1(target, level, xoffset, yoffset, zoffset, width, height,
-      int depth, format, type, TypedData pixels) native;
+      depth, format, type, int offset) native;
   @JSName('texSubImage3D')
   @DomName('WebGL2RenderingContext.texSubImage3D')
   @DocsEditable()
   @Experimental() // untriaged
-  void _texSubImage3D_2(
-      target, level, xoffset, yoffset, zoffset, format, type, data) native;
+  void _texSubImage3D_2(target, level, xoffset, yoffset, zoffset, width, height,
+      depth, format, type, data) native;
   @JSName('texSubImage3D')
   @DomName('WebGL2RenderingContext.texSubImage3D')
   @DocsEditable()
   @Experimental() // untriaged
-  void _texSubImage3D_3(target, level, xoffset, yoffset, zoffset, format, type,
-      ImageElement image) native;
+  void _texSubImage3D_3(target, level, xoffset, yoffset, zoffset, width, height,
+      depth, format, type, ImageElement image) native;
   @JSName('texSubImage3D')
   @DomName('WebGL2RenderingContext.texSubImage3D')
   @DocsEditable()
   @Experimental() // untriaged
-  void _texSubImage3D_4(target, level, xoffset, yoffset, zoffset, format, type,
-      CanvasElement canvas) native;
+  void _texSubImage3D_4(target, level, xoffset, yoffset, zoffset, width, height,
+      depth, format, type, CanvasElement canvas) native;
   @JSName('texSubImage3D')
   @DomName('WebGL2RenderingContext.texSubImage3D')
   @DocsEditable()
   @Experimental() // untriaged
-  void _texSubImage3D_5(target, level, xoffset, yoffset, zoffset, format, type,
-      VideoElement video) native;
+  void _texSubImage3D_5(target, level, xoffset, yoffset, zoffset, width, height,
+      depth, format, type, VideoElement video) native;
   @JSName('texSubImage3D')
   @DomName('WebGL2RenderingContext.texSubImage3D')
   @DocsEditable()
   @Experimental() // untriaged
-  void _texSubImage3D_6(target, level, xoffset, yoffset, zoffset, format, type,
-      ImageBitmap bitmap) native;
+  void _texSubImage3D_6(target, level, xoffset, yoffset, zoffset, width, height,
+      depth, format, type, ImageBitmap bitmap) native;
+  @JSName('texSubImage3D')
+  @DomName('WebGL2RenderingContext.texSubImage3D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _texSubImage3D_7(target, level, xoffset, yoffset, zoffset, width, height,
+      depth, format, type, TypedData pixels) native;
+  @JSName('texSubImage3D')
+  @DomName('WebGL2RenderingContext.texSubImage3D')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void _texSubImage3D_8(target, level, xoffset, yoffset, zoffset, width, height,
+      depth, format, type, TypedData pixels, srcOffset) native;
 
   @DomName('WebGL2RenderingContext.transformFeedbackVaryings')
   @DocsEditable()
@@ -5632,6 +6388,20 @@
   void _transformFeedbackVaryings_1(Program program, List varyings, bufferMode)
       native;
 
+  @JSName('uniform1fv')
+  @DomName('WebGL2RenderingContext.uniform1fv')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void uniform1fv2(UniformLocation location, v, int srcOffset, [int srcLength])
+      native;
+
+  @JSName('uniform1iv')
+  @DomName('WebGL2RenderingContext.uniform1iv')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void uniform1iv2(UniformLocation location, v, int srcOffset, [int srcLength])
+      native;
+
   @DomName('WebGL2RenderingContext.uniform1ui')
   @DocsEditable()
   @Experimental() // untriaged
@@ -5640,7 +6410,22 @@
   @DomName('WebGL2RenderingContext.uniform1uiv')
   @DocsEditable()
   @Experimental() // untriaged
-  void uniform1uiv(UniformLocation location, v) native;
+  void uniform1uiv(UniformLocation location, v, [int srcOffset, int srcLength])
+      native;
+
+  @JSName('uniform2fv')
+  @DomName('WebGL2RenderingContext.uniform2fv')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void uniform2fv2(UniformLocation location, v, int srcOffset, [int srcLength])
+      native;
+
+  @JSName('uniform2iv')
+  @DomName('WebGL2RenderingContext.uniform2iv')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void uniform2iv2(UniformLocation location, v, int srcOffset, [int srcLength])
+      native;
 
   @DomName('WebGL2RenderingContext.uniform2ui')
   @DocsEditable()
@@ -5650,7 +6435,22 @@
   @DomName('WebGL2RenderingContext.uniform2uiv')
   @DocsEditable()
   @Experimental() // untriaged
-  void uniform2uiv(UniformLocation location, v) native;
+  void uniform2uiv(UniformLocation location, v, [int srcOffset, int srcLength])
+      native;
+
+  @JSName('uniform3fv')
+  @DomName('WebGL2RenderingContext.uniform3fv')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void uniform3fv2(UniformLocation location, v, int srcOffset, [int srcLength])
+      native;
+
+  @JSName('uniform3iv')
+  @DomName('WebGL2RenderingContext.uniform3iv')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void uniform3iv2(UniformLocation location, v, int srcOffset, [int srcLength])
+      native;
 
   @DomName('WebGL2RenderingContext.uniform3ui')
   @DocsEditable()
@@ -5660,7 +6460,22 @@
   @DomName('WebGL2RenderingContext.uniform3uiv')
   @DocsEditable()
   @Experimental() // untriaged
-  void uniform3uiv(UniformLocation location, v) native;
+  void uniform3uiv(UniformLocation location, v, [int srcOffset, int srcLength])
+      native;
+
+  @JSName('uniform4fv')
+  @DomName('WebGL2RenderingContext.uniform4fv')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void uniform4fv2(UniformLocation location, v, int srcOffset, [int srcLength])
+      native;
+
+  @JSName('uniform4iv')
+  @DomName('WebGL2RenderingContext.uniform4iv')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void uniform4iv2(UniformLocation location, v, int srcOffset, [int srcLength])
+      native;
 
   @DomName('WebGL2RenderingContext.uniform4ui')
   @DocsEditable()
@@ -5671,7 +6486,8 @@
   @DomName('WebGL2RenderingContext.uniform4uiv')
   @DocsEditable()
   @Experimental() // untriaged
-  void uniform4uiv(UniformLocation location, v) native;
+  void uniform4uiv(UniformLocation location, v, [int srcOffset, int srcLength])
+      native;
 
   @DomName('WebGL2RenderingContext.uniformBlockBinding')
   @DocsEditable()
@@ -5679,41 +6495,65 @@
   void uniformBlockBinding(
       Program program, int uniformBlockIndex, int uniformBlockBinding) native;
 
+  @JSName('uniformMatrix2fv')
+  @DomName('WebGL2RenderingContext.uniformMatrix2fv')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void uniformMatrix2fv2(
+      UniformLocation location, bool transpose, array, int srcOffset,
+      [int srcLength]) native;
+
   @DomName('WebGL2RenderingContext.uniformMatrix2x3fv')
   @DocsEditable()
   @Experimental() // untriaged
-  void uniformMatrix2x3fv(UniformLocation location, bool transpose, value)
-      native;
+  void uniformMatrix2x3fv(UniformLocation location, bool transpose, value,
+      [int srcOffset, int srcLength]) native;
 
   @DomName('WebGL2RenderingContext.uniformMatrix2x4fv')
   @DocsEditable()
   @Experimental() // untriaged
-  void uniformMatrix2x4fv(UniformLocation location, bool transpose, value)
-      native;
+  void uniformMatrix2x4fv(UniformLocation location, bool transpose, value,
+      [int srcOffset, int srcLength]) native;
+
+  @JSName('uniformMatrix3fv')
+  @DomName('WebGL2RenderingContext.uniformMatrix3fv')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void uniformMatrix3fv2(
+      UniformLocation location, bool transpose, array, int srcOffset,
+      [int srcLength]) native;
 
   @DomName('WebGL2RenderingContext.uniformMatrix3x2fv')
   @DocsEditable()
   @Experimental() // untriaged
-  void uniformMatrix3x2fv(UniformLocation location, bool transpose, value)
-      native;
+  void uniformMatrix3x2fv(UniformLocation location, bool transpose, value,
+      [int srcOffset, int srcLength]) native;
 
   @DomName('WebGL2RenderingContext.uniformMatrix3x4fv')
   @DocsEditable()
   @Experimental() // untriaged
-  void uniformMatrix3x4fv(UniformLocation location, bool transpose, value)
-      native;
+  void uniformMatrix3x4fv(UniformLocation location, bool transpose, value,
+      [int srcOffset, int srcLength]) native;
+
+  @JSName('uniformMatrix4fv')
+  @DomName('WebGL2RenderingContext.uniformMatrix4fv')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void uniformMatrix4fv2(
+      UniformLocation location, bool transpose, array, int srcOffset,
+      [int srcLength]) native;
 
   @DomName('WebGL2RenderingContext.uniformMatrix4x2fv')
   @DocsEditable()
   @Experimental() // untriaged
-  void uniformMatrix4x2fv(UniformLocation location, bool transpose, value)
-      native;
+  void uniformMatrix4x2fv(UniformLocation location, bool transpose, value,
+      [int srcOffset, int srcLength]) native;
 
   @DomName('WebGL2RenderingContext.uniformMatrix4x3fv')
   @DocsEditable()
   @Experimental() // untriaged
-  void uniformMatrix4x3fv(UniformLocation location, bool transpose, value)
-      native;
+  void uniformMatrix4x3fv(UniformLocation location, bool transpose, value,
+      [int srcOffset, int srcLength]) native;
 
   @DomName('WebGL2RenderingContext.vertexAttribDivisor')
   @DocsEditable()
@@ -5753,11 +6593,6 @@
 
   // From WebGLRenderingContextBase
 
-  @DomName('WebGL2RenderingContext.canvas')
-  @DocsEditable()
-  @Experimental() // untriaged
-  final CanvasElement canvas;
-
   @DomName('WebGL2RenderingContext.drawingBufferHeight')
   @DocsEditable()
   @Experimental() // untriaged
@@ -5869,6 +6704,11 @@
   @Experimental() // untriaged
   void colorMask(bool red, bool green, bool blue, bool alpha) native;
 
+  @DomName('WebGL2RenderingContext.commit')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Future commit() native;
+
   @DomName('WebGL2RenderingContext.compileShader')
   @DocsEditable()
   @Experimental() // untriaged
@@ -6321,8 +7161,7 @@
           pixels);
       return;
     }
-    if ((bitmap_OR_border_OR_canvas_OR_image_OR_pixels_OR_video is ImageData ||
-            bitmap_OR_border_OR_canvas_OR_image_OR_pixels_OR_video == null) &&
+    if ((bitmap_OR_border_OR_canvas_OR_image_OR_pixels_OR_video is ImageData) &&
         format == null &&
         type == null &&
         pixels == null) {
@@ -6465,8 +7304,7 @@
           pixels);
       return;
     }
-    if ((bitmap_OR_canvas_OR_format_OR_image_OR_pixels_OR_video is ImageData ||
-            bitmap_OR_canvas_OR_format_OR_image_OR_pixels_OR_video == null) &&
+    if ((bitmap_OR_canvas_OR_format_OR_image_OR_pixels_OR_video is ImageData) &&
         type == null &&
         pixels == null) {
       var pixels_1 = convertDartToNative_ImageData(
@@ -6813,6 +7651,26 @@
   factory Texture._() {
     throw new UnsupportedError("Not supported");
   }
+
+  @DomName('WebGLTexture.lastUploadedVideoFrameWasSkipped')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final bool lastUploadedVideoFrameWasSkipped;
+
+  @DomName('WebGLTexture.lastUploadedVideoHeight')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final int lastUploadedVideoHeight;
+
+  @DomName('WebGLTexture.lastUploadedVideoTimestamp')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final num lastUploadedVideoTimestamp;
+
+  @DomName('WebGLTexture.lastUploadedVideoWidth')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final int lastUploadedVideoWidth;
 }
 // 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
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index 86b9d35..9ef5fea 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -448,8 +448,10 @@
 LayoutTests/fast/css/focus-display-block-inline_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/css/font-face-insert-link_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/css/font-face-multiple-ranges-for-unicode-range_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css/font-face-unicode-range-monospace_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/css/font-face-unicode-range-overlap-load_t01: Skip # Times out, Runtime error. Please triage this failure
 LayoutTests/fast/css/fontfaceset-events_t01: Pass, RuntimeError # Please triage this failure
+LayoutTests/fast/css/fontfaceset-loadingdone_t01: Pass, RuntimeError # See issue https://github.com/dart-lang/co19/issues/134
 LayoutTests/fast/css/getComputedStyle/computed-style-cross-fade_t01: RuntimeError # co19 issue 14
 LayoutTests/fast/css/getComputedStyle/computed-style-font_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/getComputedStyle/font-family-fallback-reset_t01: RuntimeError # Please triage this failure
@@ -4896,6 +4898,7 @@
 LayoutTests/fast/table/td-bordercolor-attribute_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text-autosizing/vertical-writing-mode_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text/container-align-with-inlines_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/decomposed-after-stacked-diacritics_t01: RuntimeError # Issue 32578
 LayoutTests/fast/text/find-backwards_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text/find-case-folding_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text/find-hidden-text_t01: RuntimeError # Please triage this failure
@@ -4908,11 +4911,16 @@
 LayoutTests/fast/text/font-ligatures-linebreak-word_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/text/font-ligatures-linebreak_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/text/international/cjk-segmentation_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/international/complex-text-rectangle_t01: RuntimeError # Issue 32578
 LayoutTests/fast/text/international/iso-8859-8_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text/international/listbox-width-rtl_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text/international/rtl-text-wrapping_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text/international/thai-offsetForPosition-inside-character_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/justification-padding-mid-word_t01: RuntimeError # Issue 32578
+LayoutTests/fast/text/line-break-after-inline-latin1_t01: RuntimeError # Issue 32578
 LayoutTests/fast/text/line-break-after-question-mark_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/line-breaks-after-ideographic-comma-or-full-stop_t02: RuntimeError # Issue 32578
+LayoutTests/fast/text/multiglyph-characters_t01: RuntimeError # Issue 32578
 LayoutTests/fast/text/offsetForPosition-cluster-at-zero_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text/pre-wrap-trailing-tab_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text/remove-zero-length-run_t01: RuntimeError # Please triage this failure
@@ -5079,6 +5087,8 @@
 LibTest/html/Element/getAttributeNS_A01_t01: RuntimeError # Please triage this failure
 LibTest/html/Element/getAttributeNS_A02_t01: RuntimeError # Please triage this failure
 LibTest/html/Element/getAttribute_A01_t01: Skip # Times out. Please triage this failure
+LibTest/html/Element/getBoundingClientRect_A01_t02: RuntimeError # Issue 32578
+LibTest/html/Element/getClientRects_A01_t02: RuntimeError # Issue 32579
 LibTest/html/Element/getNamespacedAttributes_A01_t01: RuntimeError # Please triage this failure
 LibTest/html/Element/isTagSupported_A01_t01: RuntimeError # Please triage this failure
 LibTest/html/Element/isTagSupported_A01_t02: RuntimeError # Please triage this failure
@@ -5127,6 +5137,7 @@
 LibTest/html/IFrameElement/createFragment_A01_t03: RuntimeError # Please triage this failure
 LibTest/html/IFrameElement/createShadowRoot_A01_t01: RuntimeError # Please triage this failure
 LibTest/html/IFrameElement/focus_A01_t01: Pass, RuntimeError # Please triage this failure
+LibTest/html/IFrameElement/getClientRects_A01_t02: RuntimeError # Issue 32578
 LibTest/html/IFrameElement/getNamespacedAttributes_A01_t01: RuntimeError # Please triage this failure
 LibTest/html/IFrameElement/innerHtml_A01_t01: RuntimeError # Please triage this failure
 LibTest/html/IFrameElement/leftView_A01_t01: RuntimeError # Please triage this failure
@@ -5732,6 +5743,7 @@
 LayoutTests/fast/css/css3-nth-tokens-style_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/cssText-shorthand_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/csstext-of-content-string_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/css/deprecated-flex-box-zero-width-intrinsic-max-width_t01: RuntimeError # Issue 32568
 LayoutTests/fast/css/deprecated-flexbox-auto-min-size_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/css/draggable-region-parser_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/css/dynamic-class-backdrop-pseudo_t01: RuntimeError # Please triage this failure
@@ -5886,6 +5898,7 @@
 LayoutTests/fast/dom/Node/initial-values_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dom/NodeIterator/NodeIterator-basic_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dom/Range/bug-19527_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/dom/Range/getClientRects-character_t01: RuntimeError # Issue 32573
 LayoutTests/fast/dom/Range/insertNode-empty-fragment-crash_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dom/Range/mutation_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/dom/Range/range-comparePoint_t01: RuntimeError # Please triage this failure
@@ -6113,6 +6126,7 @@
 LayoutTests/fast/forms/autofocus-input-css-style-change_t01: Pass, RuntimeError # Fails 7 out of 10.
 LayoutTests/fast/forms/button-baseline-and-collapsing_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/forms/button/button-disabled-blur_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/checkValidity-001_t01: RuntimeError # co19 issue 142
 LayoutTests/fast/forms/clone-input-with-dirty-value_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/forms/color/color-setrangetext_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/forms/color/input-value-sanitization-color_t01: RuntimeError # Please triage this failure
@@ -6162,10 +6176,14 @@
 LayoutTests/fast/forms/search-popup-crasher_t01: Pass, RuntimeError # Fails on 7.1. Please triage this failure
 LayoutTests/fast/forms/select-max-length_t01: Pass, RuntimeError # Issue 29634
 LayoutTests/fast/forms/selection-wrongtype_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/setCustomValidity-existence_t01: RuntimeError # co19 issue 141
 LayoutTests/fast/forms/setrangetext_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/forms/textarea-maxlength_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/forms/textarea-paste-newline_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/forms/textarea-selection-preservation_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/forms/validationMessage_t01: RuntimeError # Issue 32567
+LayoutTests/fast/forms/validity-property_t01: RuntimeError # co19 issue 140
+LayoutTests/fast/forms/willvalidate_t01: RuntimeError # co19 issue 142
 LayoutTests/fast/html/hidden-attr_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/html/imports/import-element-removed-flag_t01: Skip # Times out. Please triage this failure
 LayoutTests/fast/html/imports/import-events_t01: RuntimeError # Please triage this failure
@@ -6292,6 +6310,7 @@
 LayoutTests/fast/table/table-rowspan-height-distribution-in-rows_t02: RuntimeError # Please triage this failure
 LayoutTests/fast/table/table-with-content-width-exceeding-max-width_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text-autosizing/vertical-writing-mode_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/decomposed-after-stacked-diacritics_t01: RuntimeError # See issue 32574
 LayoutTests/fast/text/find-case-folding_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text/find-russian_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text/find-soft-hyphen_t01: RuntimeError # Please triage this failure
@@ -6301,11 +6320,16 @@
 LayoutTests/fast/text/font-ligatures-linebreak_t01: Pass, RuntimeError # Please triage this failure
 LayoutTests/fast/text/glyph-reordering_t01: Pass, RuntimeError # Fails on 7.1. Please triage this failure
 LayoutTests/fast/text/international/cjk-segmentation_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/international/complex-text-rectangle_t01: RuntimeError # See issue 32575
 LayoutTests/fast/text/international/iso-8859-8_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text/international/listbox-width-rtl_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text/international/rtl-text-wrapping_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text/international/thai-offsetForPosition-inside-character_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/justification-padding-mid-word_t01: RuntimeError # Issue 32577
+LayoutTests/fast/text/line-break-after-inline-latin1_t01: RuntimeError # Issue 32569
 LayoutTests/fast/text/line-break-after-question-mark_t01: RuntimeError # Please triage this failure
+LayoutTests/fast/text/line-breaks-after-ideographic-comma-or-full-stop_t02: RuntimeError # Issue 32570
+LayoutTests/fast/text/multiglyph-characters_t01: RuntimeError # Issue 32577
 LayoutTests/fast/text/offsetForPosition-cluster-at-zero_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text/remove-zero-length-run_t01: RuntimeError # Please triage this failure
 LayoutTests/fast/text/sub-pixel/text-scaling-ltr_t01: RuntimeError # Please triage this failure
diff --git a/tests/compiler/dart2js/equivalence/check_helpers.dart b/tests/compiler/dart2js/equivalence/check_helpers.dart
index a0ac080..9191c01 100644
--- a/tests/compiler/dart2js/equivalence/check_helpers.dart
+++ b/tests/compiler/dart2js/equivalence/check_helpers.dart
@@ -678,6 +678,13 @@
     sb.write('void');
   }
 
+  @override
+  visitFutureOrType(FutureOrType type, _) {
+    sb.write('FutureOr<');
+    visit(type.typeArgument);
+    sb.write('>');
+  }
+
   String getText() => sb.toString();
 }
 
diff --git a/tests/compiler/dart2js/model/future_or_test.dart b/tests/compiler/dart2js/model/future_or_test.dart
new file mode 100644
index 0000000..a183c3a
--- /dev/null
+++ b/tests/compiler/dart2js/model/future_or_test.dart
@@ -0,0 +1,127 @@
+// Copyright (c) 2018, 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/commandline_options.dart';
+import 'package:compiler/src/elements/types.dart';
+import 'package:expect/expect.dart';
+import '../type_test_helper.dart';
+
+main() {
+  asyncTest(() async {
+    var env = await TypeEnvironment.create(
+        '''
+Future<num> futureNum() async => null;
+FutureOr<num> futureOrNum() async => null;
+
+Future<int> futureInt() async => null;
+FutureOr<int> futureOrInt() async => null;
+
+Future<List<num>> futureListNum() async => null;
+FutureOr<List<num>> futureOrListNum() async => null;
+
+Future<Future<num>> futureFutureNum() async => null;
+FutureOr<FutureOr<num>> futureOrFutureOrNum() async => null;
+
+Future<Null> futureNull() async => null;
+FutureOr<Null> futureOrNull() async => null;
+''',
+        compileMode: CompileMode.kernel,
+        options: [Flags.strongMode]);
+    DartType getReturnType(String name, String expectedType) {
+      FunctionType type = env.getMemberType(name);
+      DartType returnType = type.returnType;
+      Expect.equals(expectedType, '${returnType}');
+      return returnType;
+    }
+
+    DartType Object_ = env['Object'];
+
+    DartType futureNum = getReturnType('futureNum', 'Future<num>');
+    FutureOrType futureOrNum = getReturnType('futureOrNum', 'FutureOr<num>');
+    DartType num_ = futureOrNum.typeArgument;
+
+    DartType futureInt = getReturnType('futureInt', 'Future<int>');
+    FutureOrType futureOrInt = getReturnType('futureOrInt', 'FutureOr<int>');
+    DartType int_ = futureOrInt.typeArgument;
+
+    DartType futureListNum =
+        getReturnType('futureListNum', 'Future<List<num>>');
+    FutureOrType futureOrListNum =
+        getReturnType('futureOrListNum', 'FutureOr<List<num>>');
+    DartType ListNum = futureOrListNum.typeArgument;
+
+    DartType futureFutureNum =
+        getReturnType('futureFutureNum', 'Future<Future<num>>');
+    FutureOrType futureOrFutureOrNum =
+        getReturnType('futureOrFutureOrNum', 'FutureOr<FutureOr<num>>');
+
+    DartType futureNull = getReturnType('futureNull', 'Future<Null>');
+    FutureOrType futureOrNull = getReturnType('futureOrNull', 'FutureOr<Null>');
+    DartType Null_ = futureOrNull.typeArgument;
+
+    List<DartType> all = [
+      Object_,
+      num_,
+      int_,
+      Null_,
+      ListNum,
+      futureNum,
+      futureOrNum,
+      futureInt,
+      futureNull,
+      futureListNum,
+      futureOrInt,
+      futureOrNull,
+      futureOrListNum,
+      futureFutureNum,
+      futureOrFutureOrNum,
+    ];
+
+    Map<DartType, List<DartType>> expectedSubtypesMap = {
+      num_: [futureOrNum, futureOrFutureOrNum],
+      int_: [num_, futureOrInt, futureOrNum, futureOrFutureOrNum],
+      ListNum: [futureOrListNum],
+      futureNum: [futureOrNum, futureOrFutureOrNum],
+      futureInt: [futureNum, futureOrNum, futureOrInt, futureOrFutureOrNum],
+      futureNull: [
+        futureOrNull,
+        futureNum,
+        futureOrNum,
+        futureInt,
+        futureOrInt,
+        futureListNum,
+        futureOrListNum,
+        futureFutureNum,
+        futureOrFutureOrNum,
+        futureOrNull,
+      ],
+      futureListNum: [futureOrListNum],
+      futureFutureNum: [futureOrFutureOrNum],
+      futureOrNum: [futureOrFutureOrNum],
+      futureOrInt: [futureOrNum, futureOrFutureOrNum],
+      futureOrNull: [
+        futureOrNum,
+        futureOrInt,
+        futureOrListNum,
+        futureOrFutureOrNum
+      ],
+    };
+
+    for (DartType t in all) {
+      List<DartType> expectedSubtypes = expectedSubtypesMap[t] ?? [];
+      for (DartType s in all) {
+        bool expectedSubtype = t == s ||
+            expectedSubtypes.contains(s) ||
+            s == Object_ ||
+            t == Null_;
+        Expect.equals(
+            expectedSubtype,
+            env.isSubtype(t, s),
+            "$t${expectedSubtype ? '' : ' not'} "
+            "expected to be a subtype of $s.");
+      }
+    }
+  });
+}
diff --git a/tests/compiler/dart2js/old_frontend/analyze_api_test.dart b/tests/compiler/dart2js/old_frontend/analyze_api_test.dart
index 458824e..678e798 100644
--- a/tests/compiler/dart2js/old_frontend/analyze_api_test.dart
+++ b/tests/compiler/dart2js/old_frontend/analyze_api_test.dart
@@ -18,7 +18,14 @@
  * the error/warning message in the list of white-listings for each file.
  */
 // TODO(johnniwinther): Support canonical URIs as keys.
-const Map<String, List<String>> WHITE_LIST = const {};
+const Map<String, List<String>> WHITE_LIST = const {
+  "sdk/lib/io/file.dart": const [
+    "'void' is not a subtype of bound 'Object' for type variable",
+  ],
+  "sdk/lib/io/file_impl.dart": const [
+    "'void' is not a subtype of bound 'Object' for type variable",
+  ],
+};
 
 void main() {
   var uriList = new List<Uri>();
diff --git a/tests/compiler/dart2js/old_frontend/analyze_unused_dart2js_test.dart b/tests/compiler/dart2js/old_frontend/analyze_unused_dart2js_test.dart
index 558bb2f..dd803ab 100644
--- a/tests/compiler/dart2js/old_frontend/analyze_unused_dart2js_test.dart
+++ b/tests/compiler/dart2js/old_frontend/analyze_unused_dart2js_test.dart
@@ -55,9 +55,21 @@
     "Duplicated library name 'kernel.transformations.closure.converter'",
   ],
 
+  "pkg/kernel/lib/binary/ast_to_binary.dart": const [
+    "'void' is not a subtype of bound 'Object' for type variable",
+  ],
+
   "pkg/compiler/lib/src/js_backend/runtime_types.dart": const [
     "'void' is not a subtype of bound 'Object' for type variable",
   ],
+
+  "sdk/lib/io/file.dart": const [
+    "'void' is not a subtype of bound 'Object' for type variable",
+  ],
+
+  "sdk/lib/io/file_impl.dart": const [
+    "'void' is not a subtype of bound 'Object' for type variable",
+  ],
 };
 
 void main() {
diff --git a/tests/corelib_2/bigint_from_test.dart b/tests/corelib_2/bigint_from_test.dart
new file mode 100644
index 0000000..c25e457
--- /dev/null
+++ b/tests/corelib_2/bigint_from_test.dart
@@ -0,0 +1,67 @@
+// Copyright (c) 2018, 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 'dart:math' show pow;
+
+main() {
+  // Test integers.
+  testInt(0);
+  for (int i = 0; i < 63; i++) {
+    var n = pow(2, i);
+    testInt(-n - 1);
+    testInt(-n);
+    testInt(-n + 1);
+    testInt(n - 1);
+    testInt(n);
+    testInt(n + 1);
+  }
+  testInt(-0x8000000000000000);
+
+  // Test doubles.
+  testDouble(0.0);
+  testDouble(-0.0, 0.0);
+  for (double d in [
+    1.0,
+    2.0,
+    pow(2.0, 30) - 1,
+    pow(2.0, 30),
+    pow(2.0, 31) - 1,
+    pow(2.0, 31),
+    pow(2.0, 31) + 1,
+    pow(2.0, 32) - 1,
+    pow(2.0, 32),
+    pow(2.0, 32) + 1,
+    pow(2.0, 52) - 1,
+    pow(2.0, 52),
+    pow(2.0, 52) + 1,
+    pow(2.0, 53) - 1,
+    pow(2.0, 53),
+  ]) {
+    for (int p = 0; p < 1024; p++) {
+      var value = d * pow(2.0, p); // Valid integer value.
+      if (!value.isFinite) break;
+      testDouble(-value);
+      testDouble(value);
+    }
+  }
+  Expect.equals(BigInt.zero, new BigInt.from(0.5));
+  Expect.equals(BigInt.one, new BigInt.from(1.5));
+
+  Expect.throws(() => new BigInt.from(double.infinity));
+  Expect.throws(() => new BigInt.from(-double.infinity));
+  Expect.throws(() => new BigInt.from(double.nan));
+}
+
+testInt(int n) {
+  var bigint = new BigInt.from(n);
+  Expect.equals(n, bigint.toInt());
+  Expect.equals("$n", "$bigint");
+}
+
+testDouble(double input, [double expectation]) {
+  var bigint = new BigInt.from(input);
+  Expect.equals(expectation ?? input, bigint.toDouble());
+}
diff --git a/tests/corelib_2/corelib_2.status b/tests/corelib_2/corelib_2.status
index 2e60e22..4083750a 100644
--- a/tests/corelib_2/corelib_2.status
+++ b/tests/corelib_2/corelib_2.status
@@ -4,12 +4,14 @@
 iterable_where_type_test: RuntimeError # Disabled.  Issue 32463
 
 [ $compiler == dart2analyzer ]
+bigint_from_test: CompileTimeError # Issue 32585
 compare_to2_test: CompileTimeError # invalid test
 int_parse_radix_bad_handler_test: MissingCompileTimeError
 iterable_element_at_test/static: Pass
 num_sign_test: Crash, Pass # Issue 31768
 
 [ $compiler == dart2js ]
+bigint_from_test: RuntimeError # Issue 32589
 date_time11_test: RuntimeError, Pass # Fails when US is on winter time, issue 31285.
 int_parse_radix_test/badTypes: RuntimeError # wrong exception returned
 iterable_where_type_test: RuntimeError # issue 31718
@@ -20,6 +22,7 @@
 
 [ $compiler == dartdevk ]
 apply3_test: RuntimeError
+bigint_from_test: RuntimeError # Issue 32589
 bool_from_environment2_test/03: Crash
 int_modulo_arith_test/modPow: RuntimeError
 int_modulo_arith_test/none: RuntimeError
@@ -250,7 +253,6 @@
 regexp/regress-regexp-codeflush_test: RuntimeError
 regexp/standalones_test: RuntimeError
 splay_tree_from_iterable_test: RuntimeError
-stacktrace_fromstring_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
 string_from_list_test: RuntimeError
 string_fromcharcodes_test: RuntimeError
 string_replace_test: Crash # NoSuchMethodError: The getter 'isDynamic' was called on null.
@@ -303,7 +305,6 @@
 regexp/regress-regexp-codeflush_test: RuntimeError
 regexp/standalones_test: RuntimeError
 splay_tree_from_iterable_test: RuntimeError
-stacktrace_fromstring_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
 string_from_list_test: RuntimeError
 string_fromcharcodes_test: RuntimeError
 string_replace_test: Crash # NoSuchMethodError: The getter 'isDynamic' was called on null.
@@ -318,6 +319,7 @@
 uri_test: RuntimeError
 
 [ $compiler == dart2js && $fasta && $strong ]
+map_update_test: Crash # Issue 32453
 null_nosuchmethod_test: RuntimeError # Fails if type checks are skipped.
 shuffle_test: RuntimeError
 
@@ -344,6 +346,7 @@
 string_from_environment3_test/03: MissingCompileTimeError
 
 [ $compiler == dartdevc && $runtime != none ]
+bigint_from_test: CompileTimeError # Issue 32585
 compare_to2_test: CompileTimeError # invalid test
 null_nosuchmethod_test/01: RuntimeError # Issue 32088
 symbol_operator_test: RuntimeError # Issue 29921
diff --git a/tests/corelib_2/map_update_test.dart b/tests/corelib_2/map_update_test.dart
new file mode 100644
index 0000000..c00caca
--- /dev/null
+++ b/tests/corelib_2/map_update_test.dart
@@ -0,0 +1,214 @@
+// Copyright (c) 2018, 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 'dart:collection';
+import 'dart:convert' show json;
+
+Map<String, dynamic> newJsonMap() => json.decode('{}');
+Map<String, dynamic> newJsonMapCustomReviver() =>
+    json.decode('{}', reviver: (key, value) => value);
+
+void main() {
+  test({});
+  test(new LinkedHashMap());
+  test(new HashMap());
+  test(new LinkedHashMap.identity());
+  test(new HashMap.identity());
+  test(new MapView(new HashMap()));
+  test(new MapBaseMap());
+  test(new MapMixinMap());
+  test(newJsonMap());
+  test(newJsonMapCustomReviver());
+  testNonNull(new SplayTreeMap());
+  testNonNull(new SplayTreeMap(Comparable.compare));
+  testNonNull(new MapView(new SplayTreeMap()));
+}
+
+void test(Map<Comparable, Object> map) {
+  testNonNull(map);
+
+  // Also works with null keys and values (omitted for splay-tree based maps)
+  map.clear();
+  map.update(null, unreachable, ifAbsent: () => null);
+  Expect.mapEquals({null: null}, map);
+  map.update(null, (v) => "$v", ifAbsent: unreachable);
+  Expect.mapEquals({null: "null"}, map);
+  map.update(null, (v) => null, ifAbsent: unreachable);
+  Expect.mapEquals({null: null}, map);
+}
+
+void testNonNull(Map<Comparable, Object> map) {
+  // Only use literal String keys since JSON maps only accept strings,
+  // and literals works with identity-maps, and it's comparable for SplayTreeMap
+  // maps.
+  Expect.mapEquals({}, map);
+  map.update("key1", unreachable, ifAbsent: () => 42);
+  Expect.mapEquals({"key1": 42}, map);
+  map.clear();
+  map["key1"] = 42;
+  map.update("key1", (v) => 1 + v, ifAbsent: unreachable);
+  Expect.mapEquals({"key1": 43}, map);
+  map.clear();
+
+  // Operations on maps with multiple elements.
+  var multi = {
+    "k1": 1,
+    "k2": 2,
+    "k3": 3,
+    "k4": 4,
+    "k5": 5,
+    "k6": 6,
+    "k7": 7,
+    "k8": 8,
+    "k9": 9,
+    "k10": 10,
+  };
+  map.addAll(multi);
+  Expect.mapEquals(multi, map);
+  map.update("k3", (v) => 13);
+  map.update("k6", (v) => 16);
+  map.update("k11", unreachable, ifAbsent: () => 21);
+  Expect.mapEquals({
+    "k1": 1,
+    "k2": 2,
+    "k3": 13,
+    "k4": 4,
+    "k5": 5,
+    "k6": 16,
+    "k7": 7,
+    "k8": 8,
+    "k9": 9,
+    "k10": 10,
+    "k11": 21,
+  }, map);
+
+  map.clear();
+  map.updateAll((k, v) => throw "unreachable");
+  Expect.mapEquals({}, map);
+
+  map.addAll(multi);
+  map.updateAll((k, v) => "$k:$v");
+  Expect.mapEquals({
+    "k1": "k1:1",
+    "k2": "k2:2",
+    "k3": "k3:3",
+    "k4": "k4:4",
+    "k5": "k5:5",
+    "k6": "k6:6",
+    "k7": "k7:7",
+    "k8": "k8:8",
+    "k9": "k9:9",
+    "k10": "k10:10",
+  }, map);
+
+  map.clear();
+  Expect.throws(
+      () => map.update("key1", unreachable, ifAbsent: () => throw "expected"),
+      (t) => t == "expected");
+
+  map["key1"] = 42;
+  Expect.throws(() => map.update("key1", (_) => throw "expected"),
+      (t) => t == "expected");
+
+  // No ifAbsent means throw if key not there.
+  Expect.throws(() => map.update("key-not", unreachable), (e) => e is Error);
+
+  Expect.throws(() => map.update("key1", null), (e) => e is Error);
+
+  // Works with null values.
+  map.clear();
+  map.update("key1", unreachable, ifAbsent: () => null);
+  Expect.mapEquals({"key1": null}, map);
+  map.update("key1", (v) => "$v", ifAbsent: unreachable);
+  Expect.mapEquals({"key1": "null"}, map);
+  map.update("key1", (v) => null, ifAbsent: unreachable);
+  Expect.mapEquals({"key1": null}, map);
+}
+
+// Slow implementation of Map based on MapBase.
+abstract class MapBaseOperations<K, V> {
+  final List _keys = <K>[];
+  final List _values = <V>[];
+  int _modCount = 0;
+
+  V operator [](Object key) {
+    int index = _keys.indexOf(key);
+    if (index < 0) return null;
+    return _values[index];
+  }
+
+  Iterable<K> get keys => new TestKeyIterable<K>(this);
+
+  void operator []=(K key, V value) {
+    int index = _keys.indexOf(key);
+    if (index >= 0) {
+      _values[index] = value;
+    } else {
+      _modCount++;
+      _keys.add(key);
+      _values.add(value);
+    }
+  }
+
+  V remove(Object key) {
+    int index = _keys.indexOf(key);
+    if (index >= 0) {
+      var result = _values[index];
+      key = _keys.removeLast();
+      var value = _values.removeLast();
+      if (index != _keys.length) {
+        _keys[index] = key;
+        _values[index] = value;
+      }
+      _modCount++;
+      return result;
+    }
+    return null;
+  }
+
+  void clear() {
+    // Clear cannot be based on remove, since remove won't remove keys that
+    // are not equal to themselves. It will fail the testNaNKeys test.
+    _keys.clear();
+    _values.clear();
+    _modCount++;
+  }
+}
+
+class MapBaseMap<K, V> = MapBase<K, V> with MapBaseOperations<K, V>;
+class MapMixinMap<K, V> = MapBaseOperations<K, V> with MapMixin<K, V>;
+
+class TestKeyIterable<K> extends IterableBase<K> {
+  final _map;
+  TestKeyIterable(this._map);
+  int get length => _map._keys.length;
+  Iterator<K> get iterator => new TestKeyIterator<K>(_map);
+}
+
+class TestKeyIterator<K> implements Iterator<K> {
+  final _map;
+  final int _modCount;
+  int _index = 0;
+  var _current;
+  TestKeyIterator(map)
+      : _map = map,
+        _modCount = map._modCount;
+
+  bool moveNext() {
+    if (_modCount != _map._modCount) {
+      throw new ConcurrentModificationError(_map);
+    }
+    if (_index == _map._keys.length) {
+      _current = null;
+      return false;
+    }
+    _current = _map._keys[_index++];
+    return true;
+  }
+
+  K get current => _current;
+}
+
+Null unreachable([_, __]) => throw "unreachable";
diff --git a/tests/html/audiobuffersourcenode_test.dart b/tests/html/audiobuffersourcenode_test.dart
index 7da731f..34dc221 100644
--- a/tests/html/audiobuffersourcenode_test.dart
+++ b/tests/html/audiobuffersourcenode_test.dart
@@ -19,7 +19,7 @@
         var ctx = new AudioContext();
         AudioBufferSourceNode node = ctx.createBufferSource();
         expect(node is AudioBufferSourceNode, isTrue);
-        node.start(ctx.currentTime, 0, 2);
+        node.start2(ctx.currentTime, 0, 2);
         expect(node is AudioBufferSourceNode, isTrue);
       }
     });
diff --git a/tests/html/client_rect_test.dart b/tests/html/client_rect_test.dart
index 4b4481a..7b086f3 100644
--- a/tests/html/client_rect_test.dart
+++ b/tests/html/client_rect_test.dart
@@ -5,8 +5,7 @@
 import 'dart:html';
 
 main() {
-  var isRectList =
-      predicate((x) => x is List<Rectangle>, 'is a List<Rectangle>');
+  var isRectList = predicate((x) => x is DomRectList, 'is a DomRectList');
 
   insertTestDiv() {
     var element = new Element.tag('div');
diff --git a/tests/html/element_types_constructors2_test.dart b/tests/html/element_types_constructors2_test.dart
index f351831..a714031 100644
--- a/tests/html/element_types_constructors2_test.dart
+++ b/tests/html/element_types_constructors2_test.dart
@@ -35,7 +35,5 @@
     check('iframe', () => new IFrameElement() is IFrameElement);
     check('img', () => new ImageElement() is ImageElement);
     check('input', () => new InputElement() is InputElement);
-    check('keygen', () => new KeygenElement() is KeygenElement,
-        KeygenElement.supported);
   });
 }
diff --git a/tests/html/element_types_test.dart b/tests/html/element_types_test.dart
index 57129b9..6f434b9 100644
--- a/tests/html/element_types_test.dart
+++ b/tests/html/element_types_test.dart
@@ -35,12 +35,6 @@
     });
   });
 
-  group('supported_keygen', () {
-    test('supported', () {
-      expect(KeygenElement.supported, true);
-    });
-  });
-
   group('supported_meter', () {
     test('supported', () {
       expect(MeterElement.supported, true);
diff --git a/tests/html/fileapi_test.dart b/tests/html/fileapi_test.dart
index 4c36c53..a867c92 100644
--- a/tests/html/fileapi_test.dart
+++ b/tests/html/fileapi_test.dart
@@ -43,8 +43,8 @@
 
       test('directoryDoesntExist', () {
         return fs.root.getDirectory('directory2').catchError((error) {
-          expect(error.code, equals(FileError.NOT_FOUND_ERR));
-        }, test: (e) => e is FileError);
+          expect(error.code, equals(DomException.NOT_FOUND));
+        }, test: (e) => e is DomError);
       });
 
       test('directoryCreate', () {
@@ -61,8 +61,8 @@
 
       test('fileDoesntExist', () {
         return fs.root.getFile('file2').catchError((error) {
-          expect(error.code, equals(FileError.NOT_FOUND_ERR));
-        }, test: (e) => e is FileError);
+          expect(error.code, equals(DomException.NOT_FOUND));
+        }, test: (e) => e is DomError);
       });
 
       test('fileCreate', () {
@@ -139,8 +139,8 @@
           expect(entry.fullPath, '/dir_moveTo/movedFile');
           return fs.root.getFile('file4');
         }).catchError((error) {
-          expect(error.code, equals(FileError.NOT_FOUND_ERR));
-        }, test: (e) => e is FileError);
+          expect(error.code, equals(DomException.NOT_FOUND));
+        }, test: (e) => e is DomError);
       });
 
       test('remove', () {
diff --git a/tests/html/html.status b/tests/html/html.status
index 3796ec1..bd4fae9 100644
--- a/tests/html/html.status
+++ b/tests/html/html.status
@@ -65,6 +65,7 @@
 deferred_multi_app_htmltest: Skip # Times out on IE.  Issue 21537
 element_animate_test: Fail # Element.animate not supported on these browsers.
 element_test/click: Fail # IE does not support firing this event.
+element_test/position: RuntimeError # Issue 32578
 element_types_test/supported_content: Fail # IE11 Feature support statuses - These results not yet noted in platform support annotations. All changes should be accompanied by platform support annotation changes.
 element_types_test/supported_details: Fail # IE11 Feature support statuses - These results not yet noted in platform support annotations. All changes should be accompanied by platform support annotation changes.
 element_types_test/supported_keygen: Fail # IE11 Feature support statuses - These results not yet noted in platform support annotations. All changes should be accompanied by platform support annotation changes.
@@ -100,6 +101,7 @@
 shadow_dom_test/supported: Fail # IE11 Feature support statuses - These results not yet noted in platform support annotations. All changes should be accompanied by platform support annotation changes.
 speechrecognition_test/supported: Fail # IE11 Feature support statuses - These results not yet noted in platform support annotations. All changes should be accompanied by platform support annotation changes.
 storage_test: Pass, RuntimeError # Issue 22166
+svgelement_test/getBoundingClientRect: RuntimeError # Isue 32580
 svgelement_test/supported_altGlyph: Fail # IE11 Feature support statuses - These results not yet noted in platform support annotations. All changes should be accompanied by platform support annotation changes.
 svgelement_test/supported_animate: Fail # IE11 Feature support statuses - These results not yet noted in platform support annotations. All changes should be accompanied by platform support annotation changes.
 svgelement_test/supported_animateMotion: Fail # IE11 Feature support statuses - These results not yet noted in platform support annotations. All changes should be accompanied by platform support annotation changes.
@@ -501,7 +503,6 @@
 js_typed_interop_default_arg_test/explicit_argument: RuntimeError
 js_typed_interop_test/static_method_tearoff_1: RuntimeError
 mirrors_js_typed_interop_test: SkipByDesign
-websql_test/Database/Database: Pass, RuntimeError
 
 [ $compiler == dart2js && $fasta && $host_checked ]
 fontface_loaded_test: Crash
diff --git a/tests/html/indexeddb_5_test.dart b/tests/html/indexeddb_5_test.dart
index cc50cea..b61b90f 100644
--- a/tests/html/indexeddb_5_test.dart
+++ b/tests/html/indexeddb_5_test.dart
@@ -32,14 +32,6 @@
     });
   });
 
-  if (html.window.indexedDB.supportsDatabaseNames) {
-    test('getDatabaseNames', () {
-      return html.window.indexedDB.getDatabaseNames().then((names) {
-        expect(names.contains(dbName), isTrue);
-      });
-    });
-  }
-
   var value = {'name_index': 'one', 'value': 'add_value'};
   test('add/delete', () {
     var transaction = db.transaction(storeName, 'readwrite');
diff --git a/tests/html/touchevent_test.dart b/tests/html/touchevent_test.dart
index 48cc98d..b1a92e8 100644
--- a/tests/html/touchevent_test.dart
+++ b/tests/html/touchevent_test.dart
@@ -11,20 +11,12 @@
 main() {
   useHtmlIndividualConfiguration();
 
-  group('supported', () {
-    test('supported', () {
-      expect(TouchEvent.supported, true);
-    });
-  });
-
   group('functional', () {
-    test('unsupported throws', () {
-      var expectation = TouchEvent.supported ? returnsNormally : throws;
-
-      expect(() {
-        var e = new TouchEvent(null, null, null, 'touch');
-        expect(e is TouchEvent, true);
-      }, expectation);
+    test('Basic TouchEvent', () {
+      if (TouchEvent.supported) {
+        var e = new TouchEvent('touch');
+        expect(e is TouchEvent, isTrue);
+      }
     });
   });
 }
diff --git a/tests/language_2/closure_type_variables_test.dart b/tests/language_2/closure_type_variables_test.dart
index 9c39a70..2fe276c 100644
--- a/tests/language_2/closure_type_variables_test.dart
+++ b/tests/language_2/closure_type_variables_test.dart
@@ -2,6 +2,8 @@
 // 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:async';
+
 import "package:expect/expect.dart";
 
 // Test that type variables are available in closures.
@@ -26,7 +28,18 @@
   }
 }
 
+class B<K> {
+  makeBaz() {
+    return (K key) async {
+      return null;
+    };
+  }
+}
+
+typedef Future<Null> aBaz(int a);
+
 main() {
   Expect.isTrue(new A<int>().foo() is A<int>);
   Expect.isTrue(new A<int>.bar().foo() is A<int>);
+  Expect.isTrue(new B<int>().makeBaz() is aBaz);
 }
diff --git a/tests/language_2/language_2_dart2js.status b/tests/language_2/language_2_dart2js.status
index db6dba1..f42f191 100644
--- a/tests/language_2/language_2_dart2js.status
+++ b/tests/language_2/language_2_dart2js.status
@@ -1145,110 +1145,51 @@
 assertion_initializer_const_error2_test/none: CompileTimeError
 assertion_initializer_test: CompileTimeError
 assertion_test: RuntimeError
-async_and_or_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_catch_regression_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_foreign_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-async_await_syntax_test/a01a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/a02a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/a03a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/a03b: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/a05a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/a05b: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/a06a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/a09a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/a11c: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/a11d: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/a12g: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/b01a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/b02a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/b03a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/b05a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/b06a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/b09a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/b11c: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/b11d: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/b12g: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/c01a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/c02a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/c03a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/c05a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/c06a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/c09a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/d01a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/d02a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/d03a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/d05a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/d06a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_syntax_test/d09a: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_await_test/02: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-async_await_test/03: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-async_await_test/none: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-async_break_in_finally_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_call_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_cascade_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_congruence_local_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_congruence_method_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_congruence_top_level_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_congruence_unnamed_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_continue_label_test/await_in_body: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_continue_label_test/await_in_condition: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_continue_label_test/await_in_init: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_continue_label_test/await_in_update: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_continue_label_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_control_structures_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_await_syntax_test/a06a: RuntimeError
+async_await_syntax_test/b06a: RuntimeError
+async_await_syntax_test/c06a: RuntimeError
+async_await_syntax_test/d06a: RuntimeError
+async_await_test/02: RuntimeError
+async_await_test/03: RuntimeError
+async_await_test/none: RuntimeError
+async_congruence_local_test/none: RuntimeError
+async_congruence_method_test/none: RuntimeError
+async_congruence_top_level_test: RuntimeError
+async_congruence_unnamed_test/none: RuntimeError
 async_error_timing_test: RuntimeError
-async_finally_rethrow_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 async_or_generator_return_type_stacktrace_test/01: MissingCompileTimeError
 async_or_generator_return_type_stacktrace_test/02: MissingCompileTimeError
 async_or_generator_return_type_stacktrace_test/03: MissingCompileTimeError
-async_regression_23058_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_rethrow_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 async_return_types_test/nestedFuture: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_return_types_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_return_types_test/none: RuntimeError
 async_return_types_test/tooManyTypeParameters: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 async_return_types_test/wrongReturnType: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_star_await_pauses_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-async_star_cancel_and_throw_in_finally_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_star_await_pauses_test: RuntimeError
+async_star_cancel_and_throw_in_finally_test: RuntimeError
 async_star_cancel_while_paused_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_star_no_cancel2_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_star_no_cancel_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_star_pause_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_star_regression_2238_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-async_star_regression_23116_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_star_regression_fisk_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_star_stream_take_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-async_star_take_reyield_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_star_test/01: Crash # Assertion failure: Unexpected arguments. Expected 1 argument, actual: [invoke dynamic method: selector=Selector(operator, *, arity=1), mask=[subclass=JSUInt32], HTypeInfoReadVariable(ListQueue.E)].
-async_star_test/02: Crash # Assertion failure: Unexpected arguments. Expected 1 argument, actual: [invoke dynamic method: selector=Selector(operator, *, arity=1), mask=[subclass=JSUInt32], HTypeInfoReadVariable(ListQueue.E)].
-async_star_test/03: Crash # Assertion failure: Unexpected arguments. Expected 1 argument, actual: [invoke dynamic method: selector=Selector(operator, *, arity=1), mask=[subclass=JSUInt32], HTypeInfoReadVariable(ListQueue.E)].
-async_star_test/04: Crash # Assertion failure: Unexpected arguments. Expected 1 argument, actual: [invoke dynamic method: selector=Selector(operator, *, arity=1), mask=[subclass=JSUInt32], HTypeInfoReadVariable(ListQueue.E)].
-async_star_test/05: Crash # Assertion failure: Unexpected arguments. Expected 1 argument, actual: [invoke dynamic method: selector=Selector(operator, *, arity=1), mask=[subclass=JSUInt32], HTypeInfoReadVariable(ListQueue.E)].
-async_star_test/none: Crash # Assertion failure: Unexpected arguments. Expected 1 argument, actual: [invoke dynamic method: selector=Selector(operator, *, arity=1), mask=[subclass=JSUInt32], HTypeInfoReadVariable(ListQueue.E)].
-async_switch_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_switch_test/withDefault: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-async_this_bound_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_throw_in_catch_test/forceAwait: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-async_throw_in_catch_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-asyncstar_concat_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-asyncstar_throw_in_catch_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-asyncstar_yield_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-asyncstar_yieldstar_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-await_and_ifnull_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-await_backwards_compatibility_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-await_exceptions_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-await_for_cancel_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-await_for_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-await_for_use_local_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-await_future_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-await_in_cascade_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-await_nonfuture_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+async_star_no_cancel2_test: RuntimeError
+async_star_no_cancel_test: RuntimeError
+async_star_pause_test: RuntimeError
+async_star_regression_2238_test: RuntimeError
+async_star_regression_23116_test: RuntimeError
+async_star_regression_fisk_test: RuntimeError
+async_star_stream_take_test: RuntimeError
+async_star_take_reyield_test: RuntimeError
+async_star_test/01: RuntimeError
+async_star_test/02: RuntimeError
+async_star_test/03: RuntimeError
+async_star_test/04: RuntimeError
+async_star_test/05: RuntimeError
+async_star_test/none: RuntimeError
+async_test: RuntimeError
+asyncstar_concat_test: RuntimeError
+asyncstar_yield_test: RuntimeError
+asyncstar_yieldstar_test: RuntimeError
+await_for_cancel_test: RuntimeError
+await_for_test: RuntimeError
+await_for_use_local_test: RuntimeError
 await_not_started_immediately_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-await_null_aware_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-await_postfix_expr_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-await_regression_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-await_started_immediately_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-await_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+await_test: RuntimeError
 bad_override_test/01: MissingCompileTimeError
 bad_override_test/02: MissingCompileTimeError
 bad_override_test/03: MissingCompileTimeError
@@ -1263,9 +1204,9 @@
 call_non_method_field_test/01: MissingCompileTimeError
 call_non_method_field_test/02: MissingCompileTimeError
 canonical_const2_test: RuntimeError, OK # non JS number semantics
-cha_deopt1_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-cha_deopt2_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-cha_deopt3_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+cha_deopt1_test: RuntimeError
+cha_deopt2_test: RuntimeError
+cha_deopt3_test: RuntimeError
 check_member_static_test/01: MissingCompileTimeError
 check_member_static_test/02: MissingCompileTimeError
 class_cycle_test/02: MissingCompileTimeError
@@ -1332,7 +1273,6 @@
 covariant_subtyping_unsafe_call2_test: RuntimeError
 covariant_subtyping_unsafe_call3_test: RuntimeError
 ct_const_test: CompileTimeError
-custom_await_stack_trace_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 cyclic_constructor_test/01: Crash # Issue 30856
 cyclic_type_variable_test/01: MissingCompileTimeError
 cyclic_type_variable_test/02: MissingCompileTimeError
@@ -1342,44 +1282,40 @@
 cyclic_typedef_test/11: Crash # Stack Overflow
 default_factory2_test/01: MissingCompileTimeError
 default_factory_test/01: MissingCompileTimeError
-deferred_closurize_load_library_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-deferred_constant_list_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-deferred_constraints_constants_test/default_argument2: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-deferred_constraints_constants_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-deferred_constraints_constants_test/reference_after_load: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-deferred_constraints_type_annotation_test/new: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-deferred_constraints_type_annotation_test/new_generic1: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-deferred_constraints_type_annotation_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-deferred_constraints_type_annotation_test/static_method: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-deferred_constraints_type_annotation_test/type_annotation_non_deferred: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-deferred_function_type_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-deferred_global_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-deferred_import_core_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_closurize_load_library_test: RuntimeError
+deferred_constant_list_test: RuntimeError
+deferred_constraints_constants_test/none: RuntimeError
+deferred_constraints_constants_test/reference_after_load: RuntimeError
+deferred_constraints_type_annotation_test/new: RuntimeError
+deferred_constraints_type_annotation_test/new_generic1: RuntimeError
+deferred_constraints_type_annotation_test/none: RuntimeError
+deferred_constraints_type_annotation_test/static_method: RuntimeError
+deferred_constraints_type_annotation_test/type_annotation_non_deferred: RuntimeError
+deferred_function_type_test: RuntimeError
+deferred_global_test: RuntimeError
 deferred_inheritance_constraints_test/extends: MissingCompileTimeError
 deferred_inheritance_constraints_test/implements: MissingCompileTimeError
 deferred_inheritance_constraints_test/mixin: MissingCompileTimeError
 deferred_inheritance_constraints_test/redirecting_constructor: MissingCompileTimeError
-deferred_inlined_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-deferred_load_constants_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-deferred_load_inval_code_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_inlined_test: RuntimeError
+deferred_load_constants_test/none: RuntimeError
+deferred_load_inval_code_test: RuntimeError
 deferred_load_library_wrong_args_test/01: CompileTimeError
-deferred_load_library_wrong_args_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-deferred_mixin_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-deferred_no_such_method_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_mixin_test: RuntimeError
+deferred_no_such_method_test: RuntimeError
 deferred_not_loaded_check_test: RuntimeError # Test out of date. Issue 31933
-deferred_only_constant_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-deferred_optimized_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-deferred_redirecting_factory_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-deferred_regression_22995_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-deferred_regression_28678_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-deferred_shadow_load_library_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_only_constant_test: RuntimeError
+deferred_optimized_test: RuntimeError
+deferred_redirecting_factory_test: RuntimeError
+deferred_regression_22995_test: RuntimeError
+deferred_regression_28678_test: RuntimeError
+deferred_shadow_load_library_test: RuntimeError
 deferred_shared_and_unshared_classes_test: CompileTimeError
-deferred_static_seperate_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-deferred_super_dependency_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-deferred_type_dependency_test/as: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-deferred_type_dependency_test/is: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-deferred_type_dependency_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-deferred_type_dependency_test/type_annotation: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+deferred_static_seperate_test: RuntimeError
+deferred_type_dependency_test/as: RuntimeError
+deferred_type_dependency_test/is: RuntimeError
+deferred_type_dependency_test/none: RuntimeError
+deferred_type_dependency_test/type_annotation: RuntimeError
 double_int_to_string_test: RuntimeError, OK # non JS number semantics
 duplicate_export_negative_test: Fail
 duplicate_implements_test/01: MissingCompileTimeError
@@ -1412,19 +1348,10 @@
 field_override4_test/02: MissingCompileTimeError
 field_override_test/00: MissingCompileTimeError
 field_override_test/01: MissingCompileTimeError
-flatten_test/01: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-flatten_test/02: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-flatten_test/03: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-flatten_test/04: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-flatten_test/05: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-flatten_test/06: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-flatten_test/07: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-flatten_test/08: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-flatten_test/09: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-flatten_test/10: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-flatten_test/11: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-flatten_test/12: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-flatten_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+flatten_test/05: MissingRuntimeError
+flatten_test/08: MissingRuntimeError
+flatten_test/09: MissingRuntimeError
+flatten_test/12: MissingRuntimeError
 full_stacktrace1_test: RuntimeError # Issue 12698
 full_stacktrace2_test: RuntimeError # Issue 12698
 full_stacktrace3_test: RuntimeError # Issue 12698
@@ -1462,8 +1389,7 @@
 function_type_alias_test: RuntimeError
 function_type_call_getter2_test/none: RuntimeError
 function_type_test: RuntimeError
-generic_async_star_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-generic_async_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+generic_async_star_test: RuntimeError
 generic_closure_test/01: RuntimeError
 generic_closure_test/none: RuntimeError
 generic_field_mixin6_test/none: RuntimeError
@@ -1541,8 +1467,7 @@
 issue31596_override_test/08: MissingCompileTimeError
 issue31596_super_test/01: CompileTimeError
 issue31596_super_test/03: CompileTimeError
-issue_1751477_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-known_identifier_usage_error_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+known_identifier_usage_error_test/none: RuntimeError
 left_shift_test: RuntimeError # non JS number semantics
 library_env_test/has_mirror_support: RuntimeError
 library_env_test/has_no_html_support: RuntimeError
@@ -1782,28 +1707,15 @@
 reg_exp_test: RuntimeError
 regress_13462_1_test: RuntimeError
 regress_18535_test: RuntimeError
-regress_22443_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-regress_22445_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-regress_22579_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-regress_22728_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-regress_22777_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+regress_22443_test: RuntimeError
 regress_23089_test: Crash # Stack Overflow
 regress_23408_test: CompileTimeError
-regress_23498_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-regress_23500_test/01: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-regress_23500_test/02: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-regress_23500_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-regress_23996_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+regress_23996_test: RuntimeError
 regress_24283_test: RuntimeError # non JS number semantics
-regress_24935_test/01: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-regress_24935_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-regress_26175_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-regress_26668_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-regress_26948_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+regress_24935_test/none: RuntimeError
 regress_27617_test/1: Crash # Assertion failure: Unexpected constructor j:constructor(Foo._) in ConstructorDataImpl._getConstructorConstant
-regress_27659_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 regress_28255_test: RuntimeError
-regress_28278_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+regress_28278_test: RuntimeError
 regress_29025_test: CompileTimeError
 regress_29405_test: CompileTimeError
 regress_29784_test/01: Crash # Assertion failure: Cannot find value Instance of 'ThisLocal' in () for j:constructor(A.ok).
@@ -1817,7 +1729,7 @@
 setter_override_test/01: MissingCompileTimeError
 setter_override_test/02: MissingCompileTimeError
 setter_override_test/03: MissingCompileTimeError
-shadow_parameter_and_local_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+shadow_parameter_and_local_test: RuntimeError
 stacktrace_demangle_ctors_test: RuntimeError # Issue 12698
 stacktrace_rethrow_error_test/none: RuntimeError # Issue 12698
 stacktrace_rethrow_error_test/withtraceparameter: RuntimeError # Issue 12698
@@ -1830,12 +1742,6 @@
 super_bound_closure_test/none: CompileTimeError
 super_call4_test: CompileTimeError
 super_getter_setter_test: CompileTimeError
-super_in_async1_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-super_in_async2_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-super_in_async3_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-super_in_async4_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-super_in_async5_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-super_in_async6_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 super_no_such_method1_test: CompileTimeError
 super_no_such_method2_test: CompileTimeError
 super_no_such_method3_test: CompileTimeError
@@ -1853,8 +1759,6 @@
 switch_case_test/02: MissingCompileTimeError
 sync_generator2_test/41: Crash # 'file:*/pkg/compiler/lib/src/kernel/element_map_impl.dart': Failed assertion: line 939 pos 18: 'asyncMarker == AsyncMarker.SYNC': is not true.
 sync_generator2_test/52: Crash # 'file:*/pkg/compiler/lib/src/kernel/element_map_impl.dart': Failed assertion: line 939 pos 18: 'asyncMarker == AsyncMarker.SYNC': is not true.
-sync_generator2_test/none: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
-syncstar_yieldstar_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 syntax_test/04: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
 syntax_test/05: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
 syntax_test/06: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
@@ -1914,7 +1818,6 @@
 type_variable_promotion_test: RuntimeError
 typedef_is_test: RuntimeError
 typevariable_substitution2_test/02: RuntimeError
-unused_overridden_async_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
 vm/async_await_catch_stacktrace_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
 vm/await_synchronous_future_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 vm/causal_async_exception_stack2_test: Crash # Assertion failure: Unexpected arguments. Expected 1 argument, actual: [invoke dynamic method: selector=Selector(operator, *, arity=1), mask=[subclass=JSUInt32], HTypeInfoReadVariable(ListQueue.E)].
@@ -1987,7 +1890,7 @@
 void_type_usage_test/paren_null_equals2: Crash # 'package:front_end/src/fasta/type_inference/type_schema_environment.dart': Failed assertion: line 214 pos 12: 'false': is not true.
 wrong_number_type_arguments_test/01: MissingCompileTimeError
 wrong_number_type_arguments_test/none: Pass
-yieldstar_pause_test: Crash # 'file:*/pkg/compiler/lib/src/js_emitter/runtime_type_generator.dart': Failed assertion: line 208 pos 18: '!(_useKernel && _strongMode && !_disableRtiOptimization) ||
+yieldstar_pause_test: RuntimeError
 
 [ $compiler == dart2js && $fasta && $minified && $strong ]
 abstract_factory_constructor_test/00: MissingCompileTimeError
@@ -2003,110 +1906,51 @@
 assertion_initializer_const_error2_test/none: CompileTimeError
 assertion_initializer_test: CompileTimeError
 assertion_test: RuntimeError
-async_and_or_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_catch_regression_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_foreign_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-async_await_syntax_test/a01a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/a02a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/a03a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/a03b: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/a05a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/a05b: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/a06a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/a09a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/a11c: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/a11d: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/a12g: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/b01a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/b02a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/b03a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/b05a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/b06a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/b09a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/b11c: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/b11d: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/b12g: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/c01a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/c02a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/c03a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/c05a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/c06a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/c09a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/d01a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/d02a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/d03a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/d05a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/d06a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_syntax_test/d09a: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_await_test/02: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-async_await_test/03: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-async_await_test/none: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-async_break_in_finally_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_call_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_cascade_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_congruence_local_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_congruence_method_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_congruence_top_level_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_congruence_unnamed_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_continue_label_test/await_in_body: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_continue_label_test/await_in_condition: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_continue_label_test/await_in_init: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_continue_label_test/await_in_update: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_continue_label_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_control_structures_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_await_syntax_test/a06a: RuntimeError
+async_await_syntax_test/b06a: RuntimeError
+async_await_syntax_test/c06a: RuntimeError
+async_await_syntax_test/d06a: RuntimeError
+async_await_test/02: RuntimeError
+async_await_test/03: RuntimeError
+async_await_test/none: RuntimeError
+async_congruence_local_test/none: RuntimeError
+async_congruence_method_test/none: RuntimeError
+async_congruence_top_level_test: RuntimeError
+async_congruence_unnamed_test/none: RuntimeError
 async_error_timing_test: RuntimeError
-async_finally_rethrow_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 async_or_generator_return_type_stacktrace_test/01: MissingCompileTimeError
 async_or_generator_return_type_stacktrace_test/02: MissingCompileTimeError
 async_or_generator_return_type_stacktrace_test/03: MissingCompileTimeError
-async_regression_23058_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_rethrow_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 async_return_types_test/nestedFuture: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_return_types_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_return_types_test/none: RuntimeError
 async_return_types_test/tooManyTypeParameters: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 async_return_types_test/wrongReturnType: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_star_await_pauses_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-async_star_cancel_and_throw_in_finally_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_star_await_pauses_test: RuntimeError
+async_star_cancel_and_throw_in_finally_test: RuntimeError
 async_star_cancel_while_paused_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_star_no_cancel2_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_star_no_cancel_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_star_pause_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_star_regression_2238_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-async_star_regression_23116_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_star_regression_fisk_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_star_stream_take_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-async_star_take_reyield_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_star_test/01: Crash # Wrong number of template arguments, given 2, expected 1
-async_star_test/02: Crash # Wrong number of template arguments, given 2, expected 1
-async_star_test/03: Crash # Wrong number of template arguments, given 2, expected 1
-async_star_test/04: Crash # Wrong number of template arguments, given 2, expected 1
-async_star_test/05: Crash # Wrong number of template arguments, given 2, expected 1
-async_star_test/none: Crash # Wrong number of template arguments, given 2, expected 1
-async_switch_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_switch_test/withDefault: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-async_this_bound_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_throw_in_catch_test/forceAwait: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-async_throw_in_catch_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-asyncstar_concat_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-asyncstar_throw_in_catch_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-asyncstar_yield_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-asyncstar_yieldstar_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-await_and_ifnull_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-await_backwards_compatibility_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-await_exceptions_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-await_for_cancel_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-await_for_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-await_for_use_local_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-await_future_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-await_in_cascade_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-await_nonfuture_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+async_star_no_cancel2_test: RuntimeError
+async_star_no_cancel_test: RuntimeError
+async_star_pause_test: RuntimeError
+async_star_regression_2238_test: RuntimeError
+async_star_regression_23116_test: RuntimeError
+async_star_regression_fisk_test: RuntimeError
+async_star_stream_take_test: RuntimeError
+async_star_take_reyield_test: RuntimeError
+async_star_test/01: RuntimeError
+async_star_test/02: RuntimeError
+async_star_test/03: RuntimeError
+async_star_test/04: RuntimeError
+async_star_test/05: RuntimeError
+async_star_test/none: RuntimeError
+async_test: RuntimeError
+asyncstar_concat_test: RuntimeError
+asyncstar_yield_test: RuntimeError
+asyncstar_yieldstar_test: RuntimeError
+await_for_cancel_test: RuntimeError
+await_for_test: RuntimeError
+await_for_use_local_test: RuntimeError
 await_not_started_immediately_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-await_null_aware_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-await_postfix_expr_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-await_regression_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-await_started_immediately_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-await_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+await_test: RuntimeError
 bad_override_test/01: MissingCompileTimeError
 bad_override_test/02: MissingCompileTimeError
 bad_override_test/03: MissingCompileTimeError
@@ -2120,9 +1964,9 @@
 call_non_method_field_test/01: MissingCompileTimeError
 call_non_method_field_test/02: MissingCompileTimeError
 canonical_const2_test: RuntimeError, OK # non JS number semantics
-cha_deopt1_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-cha_deopt2_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-cha_deopt3_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+cha_deopt1_test: RuntimeError
+cha_deopt2_test: RuntimeError
+cha_deopt3_test: RuntimeError
 check_member_static_test/01: MissingCompileTimeError
 check_member_static_test/02: MissingCompileTimeError
 class_cycle_test/02: MissingCompileTimeError
@@ -2188,7 +2032,6 @@
 covariant_subtyping_unsafe_call2_test: RuntimeError
 covariant_subtyping_unsafe_call3_test: RuntimeError
 ct_const_test: CompileTimeError
-custom_await_stack_trace_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 cyclic_constructor_test/01: Crash # Issue 30856
 cyclic_type_variable_test/01: MissingCompileTimeError
 cyclic_type_variable_test/02: MissingCompileTimeError
@@ -2198,44 +2041,40 @@
 cyclic_typedef_test/11: Crash # Stack Overflow
 default_factory2_test/01: MissingCompileTimeError
 default_factory_test/01: MissingCompileTimeError
-deferred_closurize_load_library_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-deferred_constant_list_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-deferred_constraints_constants_test/default_argument2: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-deferred_constraints_constants_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-deferred_constraints_constants_test/reference_after_load: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-deferred_constraints_type_annotation_test/new: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-deferred_constraints_type_annotation_test/new_generic1: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-deferred_constraints_type_annotation_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-deferred_constraints_type_annotation_test/static_method: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-deferred_constraints_type_annotation_test/type_annotation_non_deferred: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-deferred_function_type_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-deferred_global_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-deferred_import_core_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_closurize_load_library_test: RuntimeError
+deferred_constant_list_test: RuntimeError
+deferred_constraints_constants_test/none: RuntimeError
+deferred_constraints_constants_test/reference_after_load: RuntimeError
+deferred_constraints_type_annotation_test/new: RuntimeError
+deferred_constraints_type_annotation_test/new_generic1: RuntimeError
+deferred_constraints_type_annotation_test/none: RuntimeError
+deferred_constraints_type_annotation_test/static_method: RuntimeError
+deferred_constraints_type_annotation_test/type_annotation_non_deferred: RuntimeError
+deferred_function_type_test: RuntimeError
+deferred_global_test: RuntimeError
 deferred_inheritance_constraints_test/extends: MissingCompileTimeError
 deferred_inheritance_constraints_test/implements: MissingCompileTimeError
 deferred_inheritance_constraints_test/mixin: MissingCompileTimeError
 deferred_inheritance_constraints_test/redirecting_constructor: MissingCompileTimeError
-deferred_inlined_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-deferred_load_constants_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-deferred_load_inval_code_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_inlined_test: RuntimeError
+deferred_load_constants_test/none: RuntimeError
+deferred_load_inval_code_test: RuntimeError
 deferred_load_library_wrong_args_test/01: CompileTimeError
-deferred_load_library_wrong_args_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-deferred_mixin_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-deferred_no_such_method_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_mixin_test: RuntimeError
+deferred_no_such_method_test: RuntimeError
 deferred_not_loaded_check_test: RuntimeError # Test out of date. Issue 31933
-deferred_only_constant_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-deferred_optimized_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-deferred_redirecting_factory_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-deferred_regression_22995_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-deferred_regression_28678_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-deferred_shadow_load_library_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_only_constant_test: RuntimeError
+deferred_optimized_test: RuntimeError
+deferred_redirecting_factory_test: RuntimeError
+deferred_regression_22995_test: RuntimeError
+deferred_regression_28678_test: RuntimeError
+deferred_shadow_load_library_test: RuntimeError
 deferred_shared_and_unshared_classes_test: CompileTimeError
-deferred_static_seperate_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-deferred_super_dependency_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-deferred_type_dependency_test/as: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-deferred_type_dependency_test/is: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-deferred_type_dependency_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-deferred_type_dependency_test/type_annotation: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+deferred_static_seperate_test: RuntimeError
+deferred_type_dependency_test/as: RuntimeError
+deferred_type_dependency_test/is: RuntimeError
+deferred_type_dependency_test/none: RuntimeError
+deferred_type_dependency_test/type_annotation: RuntimeError
 double_int_to_string_test: RuntimeError, OK # non JS number semantics
 duplicate_export_negative_test: Fail
 duplicate_implements_test/01: MissingCompileTimeError
@@ -2269,19 +2108,10 @@
 field_override4_test/02: MissingCompileTimeError
 field_override_test/00: MissingCompileTimeError
 field_override_test/01: MissingCompileTimeError
-flatten_test/01: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-flatten_test/02: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-flatten_test/03: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-flatten_test/04: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-flatten_test/05: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-flatten_test/06: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-flatten_test/07: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-flatten_test/08: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-flatten_test/09: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-flatten_test/10: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-flatten_test/11: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-flatten_test/12: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-flatten_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+flatten_test/05: MissingRuntimeError
+flatten_test/08: MissingRuntimeError
+flatten_test/09: MissingRuntimeError
+flatten_test/12: MissingRuntimeError
 full_stacktrace1_test: RuntimeError # Issue 12698
 full_stacktrace2_test: RuntimeError # Issue 12698
 full_stacktrace3_test: RuntimeError # Issue 12698
@@ -2319,8 +2149,7 @@
 function_type_alias_test: RuntimeError
 function_type_call_getter2_test/none: RuntimeError
 function_type_test: RuntimeError
-generic_async_star_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-generic_async_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+generic_async_star_test: RuntimeError
 generic_field_mixin6_test/none: RuntimeError
 generic_function_bounds_test: RuntimeError
 generic_function_dcall_test: RuntimeError
@@ -2390,13 +2219,11 @@
 issue18628_2_test/01: MissingCompileTimeError
 issue21079_test: RuntimeError
 issue23244_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-issue28498_test: Crash
 issue31596_override_test/07: MissingCompileTimeError
 issue31596_override_test/08: MissingCompileTimeError
 issue31596_super_test/01: CompileTimeError
 issue31596_super_test/03: CompileTimeError
-issue_1751477_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-known_identifier_usage_error_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+known_identifier_usage_error_test/none: RuntimeError
 left_shift_test: RuntimeError # non JS number semantics
 library_env_test/has_mirror_support: RuntimeError
 library_env_test/has_no_html_support: RuntimeError
@@ -2633,28 +2460,15 @@
 regress_13462_1_test: RuntimeError
 regress_18535_test: RuntimeError
 regress_21795_test: RuntimeError # Issue 12605
-regress_22443_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-regress_22445_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-regress_22579_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-regress_22728_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-regress_22777_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+regress_22443_test: RuntimeError
 regress_23089_test: Crash # Stack Overflow
 regress_23408_test: CompileTimeError
-regress_23498_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-regress_23500_test/01: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-regress_23500_test/02: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-regress_23500_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-regress_23996_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+regress_23996_test: RuntimeError
 regress_24283_test: RuntimeError, OK # Requires 64 bit numbers.
-regress_24935_test/01: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-regress_24935_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-regress_26175_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
-regress_26668_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-regress_26948_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+regress_24935_test/none: RuntimeError
 regress_27617_test/1: Crash # Assertion failure: Unexpected constructor j:constructor(Foo._) in ConstructorDataImpl._getConstructorConstant
-regress_27659_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 regress_28255_test: RuntimeError
-regress_28278_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+regress_28278_test: RuntimeError
 regress_29025_test: CompileTimeError
 regress_29405_test: CompileTimeError
 regress_29784_test/01: Crash # Issue 29784
@@ -2668,7 +2482,7 @@
 setter_override_test/01: MissingCompileTimeError
 setter_override_test/02: MissingCompileTimeError
 setter_override_test/03: MissingCompileTimeError
-shadow_parameter_and_local_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+shadow_parameter_and_local_test: RuntimeError
 stack_trace_test: RuntimeError, OK # Stack trace not preserved in minified code.
 stacktrace_demangle_ctors_test: RuntimeError # Issue 12698
 stacktrace_rethrow_error_test/none: RuntimeError # Issue 12698
@@ -2682,12 +2496,6 @@
 super_bound_closure_test/none: CompileTimeError
 super_call4_test: CompileTimeError
 super_getter_setter_test: CompileTimeError
-super_in_async1_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-super_in_async2_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-super_in_async3_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-super_in_async4_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-super_in_async5_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-super_in_async6_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 super_no_such_method1_test: CompileTimeError
 super_no_such_method2_test: CompileTimeError
 super_no_such_method3_test: CompileTimeError
@@ -2704,8 +2512,6 @@
 switch_case_test/01: MissingCompileTimeError
 switch_case_test/02: MissingCompileTimeError
 symbol_conflict_test: RuntimeError # Issue 23857
-sync_generator2_test/none: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
-syncstar_yieldstar_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 syntax_test/28: MissingCompileTimeError
 syntax_test/29: MissingCompileTimeError
 syntax_test/30: MissingCompileTimeError
@@ -2743,7 +2549,6 @@
 type_variable_promotion_test: RuntimeError
 typedef_is_test: RuntimeError
 typevariable_substitution2_test/02: RuntimeError
-unused_overridden_async_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 vm/async_await_catch_stacktrace_test: Crash # Assertion failure: Runtime type information not available for type_variable_local(bindCallback.R) in (local(_RootZone.bindCallback#)) for j:closure_call(_RootZone_bindCallback_closure.call).
 vm/await_synchronous_future_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
 vm/causal_async_exception_stack2_test: Crash # Wrong number of template arguments, given 2, expected 1
@@ -2780,7 +2585,7 @@
 void_type_usage_test/conditional_return_to_void: MissingCompileTimeError
 wrong_number_type_arguments_test/01: MissingCompileTimeError
 wrong_number_type_arguments_test/none: Pass
-yieldstar_pause_test: Crash # Interpolated value #1 is not an Expression or List of Expressions: [VariableUse(f), Instance of 'LiteralNull', null]
+yieldstar_pause_test: RuntimeError
 
 [ $compiler == dart2js && $fasta && $strong ]
 mixin_type_parameter5_test: RuntimeError
diff --git a/tests/language_2/naming3_test.dart b/tests/language_2/naming3_test.dart
index 1af4356..3936778 100644
--- a/tests/language_2/naming3_test.dart
+++ b/tests/language_2/naming3_test.dart
@@ -93,4 +93,5 @@
 
   regress31049();
   regress31050();
+  regress31117();
 }
diff --git a/tests/lib_2/html/audiobuffersourcenode_test.dart b/tests/lib_2/html/audiobuffersourcenode_test.dart
index 9c98cf0..ddfb55c 100644
--- a/tests/lib_2/html/audiobuffersourcenode_test.dart
+++ b/tests/lib_2/html/audiobuffersourcenode_test.dart
@@ -15,7 +15,7 @@
         var ctx = new AudioContext();
         AudioBufferSourceNode node = ctx.createBufferSource();
         expect(node is AudioBufferSourceNode, isTrue);
-        node.start(ctx.currentTime, 0, 2);
+        node.start2(ctx.currentTime, 0, 2);
         expect(node is AudioBufferSourceNode, isTrue);
       }
     });
diff --git a/tests/lib_2/html/client_rect_test.dart b/tests/lib_2/html/client_rect_test.dart
index 983be6b..10d84b2 100644
--- a/tests/lib_2/html/client_rect_test.dart
+++ b/tests/lib_2/html/client_rect_test.dart
@@ -4,7 +4,13 @@
 
 main() {
   var isRectList =
-      predicate((x) => x is List<Rectangle>, 'is a List<Rectangle>');
+      predicate((x) => x is DomRectList, 'should be a DomRectList');
+  var isListOfRectangle =
+      predicate((x) => x is List<Rectangle>, 'should be a List<Rectangle>');
+
+  var isRectangle = predicate((x) => x is Rectangle, 'should be a Rectangle');
+  var isDomRectReadOnly =
+      predicate((x) => x is DomRectReadOnly, 'should be a DomRectReadOnly');
 
   insertTestDiv() {
     var element = new Element.tag('div');
@@ -17,16 +23,19 @@
     return element;
   }
 
-  test("ClientRectList test", () {
+  test("DomRectList test", () {
     insertTestDiv();
     var range = new Range();
     var rects = range.getClientRects();
+    expect(rects, isListOfRectangle);
     expect(rects, isRectList);
   });
 
   test("ClientRect ==", () {
     var rect1 = document.body.getBoundingClientRect();
     var rect2 = document.body.getBoundingClientRect();
+    expect(rect1, isRectangle);
+    expect(rect1, isDomRectReadOnly);
     expect(rect1, equals(rect2));
   });
 }
diff --git a/tests/lib_2/html/custom/attribute_changed_callback_test.dart b/tests/lib_2/html/custom/attribute_changed_callback_test.dart
index 5d685c5..1d6a85e 100644
--- a/tests/lib_2/html/custom/attribute_changed_callback_test.dart
+++ b/tests/lib_2/html/custom/attribute_changed_callback_test.dart
@@ -58,8 +58,8 @@
   setUp(() => customElementsReady.then((_) {
         if (!registered) {
           registered = true;
-          document.registerElement(A.tag, A);
-          document.registerElement(B.tag, B);
+          document.registerElement2(A.tag, {'prototype': A});
+          document.registerElement2(B.tag, {'prototype': B});
         }
       }));
 
diff --git a/tests/lib_2/html/custom/constructor_calls_created_synchronously_test.dart b/tests/lib_2/html/custom/constructor_calls_created_synchronously_test.dart
index eb0f55b..9b6818b 100644
--- a/tests/lib_2/html/custom/constructor_calls_created_synchronously_test.dart
+++ b/tests/lib_2/html/custom/constructor_calls_created_synchronously_test.dart
@@ -30,7 +30,7 @@
     return customElementsReady.then((_) {
       if (!registered) {
         registered = true;
-        document.registerElement(A.tag, A);
+        document.registerElement2(A.tag, {'prototype': A});
       }
     });
   });
@@ -51,8 +51,8 @@
   });
 
   test("can extend elements that don't have special prototypes", () {
-    document.registerElement('fancy-section', FancySection,
-        extendsTag: 'section');
+    document.registerElement2(
+        'fancy-section', {'prototype': FancySection, 'extends': 'section'});
     var fancy = document.createElement('section', 'fancy-section');
     expect(fancy is FancySection, true, reason: 'fancy-section was registered');
     expect((fancy as FancySection).wasCreated, true,
diff --git a/tests/lib_2/html/custom/created_callback_test.dart b/tests/lib_2/html/custom/created_callback_test.dart
index 492fb3e..4961b8b 100644
--- a/tests/lib_2/html/custom/created_callback_test.dart
+++ b/tests/lib_2/html/custom/created_callback_test.dart
@@ -65,15 +65,15 @@
     return customElementsReady.then((_) {
       if (!registered) {
         registered = true;
-        document.registerElement(B.tag, B);
-        document.registerElement(C.tag, C);
+        document.registerElement2(B.tag, {'prototype': B});
+        document.registerElement2(C.tag, {'prototype': C});
         ErrorConstructorElement.register();
       }
     });
   });
 
   test('transfer created callback', () {
-    document.registerElement(A.tag, A as dynamic);
+    document.registerElement2(A.tag, {'prototype': A as dynamic});
     var x = new A();
     expect(A.createdInvocations, 1);
   });
@@ -107,8 +107,8 @@
 
   test('cannot register without created', () {
     expect(() {
-      document.registerElement(
-          MissingCreatedElement.tag, MissingCreatedElement);
+      document.registerElement2(
+          MissingCreatedElement.tag, {'prototype': MissingCreatedElement});
     }, throws);
   });
 
@@ -150,8 +150,8 @@
 
   test('cannot register created with params', () {
     expect(() {
-      document.registerElement(
-          'x-created-with-params', CreatedWithParametersElement);
+      document.registerElement2(
+          'x-created-with-params', {'prototype': CreatedWithParametersElement});
     }, throws);
   });
 
@@ -171,7 +171,7 @@
   NestedElement.created() : super.created();
 
   static void register() {
-    document.registerElement(tag, NestedElement);
+    document.registerElement2(tag, {'prototype': NestedElement});
   }
 
   static void test() {
@@ -202,7 +202,7 @@
   }
 
   static void register() {
-    document.registerElement(tag, AccessWhileUpgradingElement);
+    document.registerElement2(tag, {'prototype': AccessWhileUpgradingElement});
   }
 
   static void test() {
@@ -238,7 +238,7 @@
   }
 
   static void register() {
-    document.registerElement(tag, ErrorConstructorElement);
+    document.registerElement2(tag, {'prototype': ErrorConstructorElement});
   }
 }
 
@@ -253,7 +253,8 @@
   NestedCreatedConstructorElement.created() : super.created();
 
   static void register() {
-    document.registerElement(tag, NestedCreatedConstructorElement);
+    document
+        .registerElement2(tag, {'prototype': NestedCreatedConstructorElement});
   }
 
   // Try to run the created constructor, and record the results.
diff --git a/tests/lib_2/html/custom/document_register_basic_test.dart b/tests/lib_2/html/custom/document_register_basic_test.dart
index 156556e..c295b7f7 100644
--- a/tests/lib_2/html/custom/document_register_basic_test.dart
+++ b/tests/lib_2/html/custom/document_register_basic_test.dart
@@ -48,23 +48,29 @@
 
   setUp(() => customElementsReady);
 
-  test('Testing document.registerElement() basic behaviors', () {
-    document.registerElement(Foo.tag, Foo);
+  test('Testing document.registerElement2() basic behaviors', () {
+    document.registerElement2(Foo.tag, {'prototype': Foo});
 
     // Cannot register an existing dart:html type.
-    expect(() => document.registerElement('x-bad-a', HtmlElement), throws);
+    expect(
+        () => document.registerElement2('x-bad-a', {'prototype': HtmlElement}),
+        throws);
 
     // Invalid user type.  Doesn't inherit from HtmlElement.
-    expect(() => document.registerElement('x-bad-b', BadB), throws);
+    expect(() => document.registerElement2('x-bad-b', {'prototype': BadB}),
+        throws);
 
     // Cannot register abstract class.
-    expect(() => document.registerElement('x-bad-c', BadC), throws);
+    expect(() => document.registerElement2('x-bad-c', {'prototype': BadC}),
+        throws);
 
     // Not a type.
-    expect(() => document.registerElement('x-bad-d', null), throws);
+    expect(() => document.registerElement2('x-bad-d', {'prototype': null}),
+        throws);
 
     // Cannot register system type.
-    expect(() => document.registerElement('x-bad-e', Object), throws);
+    expect(() => document.registerElement2('x-bad-e', {'prototype': Object}),
+        throws);
 
     // Constructor initiated instantiation
     var createdFoo = new Foo();
@@ -105,14 +111,14 @@
     expect(someProperty[container.firstChild], someProperty[parsedFoo]);
 
     // Having another constructor
-    document.registerElement(Bar.tag, Bar);
+    document.registerElement2(Bar.tag, {'prototype': Bar});
     var createdBar = new Bar();
     expect(createdBar is Bar, isTrue);
     expect(createdBar is Foo, isFalse);
     expect(createdBar.tagName, "X-BAR");
 
     // Having a subclass
-    document.registerElement(Baz.tag, Baz);
+    document.registerElement2(Baz.tag, {'prototype': Baz});
     var createdBaz = new Baz();
     expect(createdBaz.tagName, "X-BAZ");
     expect(createdBaz.thisIsACustomClass, isTrue);
diff --git a/tests/lib_2/html/custom/document_register_template_test.dart b/tests/lib_2/html/custom/document_register_template_test.dart
index f7819fa..883f4f0 100644
--- a/tests/lib_2/html/custom/document_register_template_test.dart
+++ b/tests/lib_2/html/custom/document_register_template_test.dart
@@ -8,7 +8,8 @@
   setUp(() => customElementsReady);
 
   test('can register custom template with webcomponents-lite polyfill', () {
-    document.registerElement('my-element', MyElement, extendsTag: 'template');
+    document.registerElement2(
+        'my-element', {'prototype': MyElement, 'extends': 'template'});
     dynamic e = new Element.tag('template', 'my-element');
     document.body.append(e);
     expect(e is TemplateElement, isTrue);
diff --git a/tests/lib_2/html/custom/document_register_type_extensions_test.dart b/tests/lib_2/html/custom/document_register_type_extensions_test.dart
index e9143ea..2e652c4 100644
--- a/tests/lib_2/html/custom/document_register_type_extensions_test.dart
+++ b/tests/lib_2/html/custom/document_register_type_extensions_test.dart
@@ -96,13 +96,13 @@
       return;
     }
     registeredTypes = true;
-    document.registerElement(Foo.tag, Foo);
-    document.registerElement(Bar.tag, Bar, extendsTag: 'input');
-    document.registerElement(Baz.tag, Baz);
-    document.registerElement(Qux.tag, Qux, extendsTag: 'input');
-    document.registerElement(MyCanvas.tag, MyCanvas, extendsTag: 'canvas');
-    document.registerElement(CustomCustomDiv.tag, CustomCustomDiv,
-        extendsTag: 'div');
+    document.registerElement2(Foo.tag, {'prototype': Foo});
+    document.registerElement2(Bar.tag, {'prototype': Bar, 'extends': 'input'});
+    document.registerElement2(Baz.tag, {'prototype': Baz});
+    document.registerElement2(Qux.tag, {'prototype': Qux, 'extends': 'input'});
+    document.registerElement2(MyCanvas.tag, {'prototype': MyCanvas, 'extends': 'canvas'});
+    document.registerElement2(CustomCustomDiv.tag, {'prototype': CustomCustomDiv,
+        'extends': 'div'});
   }
 
   setUp(() => customElementsReady);
@@ -111,19 +111,19 @@
     setUp(registerTypes);
 
     test('cannot register twice', () {
-      expect(() => document.registerElement(FooBad.tag, Foo, extendsTag: 'div'),
+      expect(() => document.registerElement2(FooBad.tag, {'prototype': Foo, 'extends': 'div'}),
           throws);
     });
 
     test('cannot register for non-matching tag', () {
       expect(() {
-        document.registerElement('x-input-div', Bar, extendsTag: 'div');
+        document.registerElement2('x-input-div', {'prototype': Bar, 'extends': 'div'});
       }, throws);
     });
 
     test('cannot register type extension for custom tag', () {
       expect(() {
-        document.registerElement('x-custom-tag', CustomCustomDiv);
+        document.registerElement2('x-custom-tag',  {'prototype': CustomCustomDiv});
       }, throws);
     });
   });
diff --git a/tests/lib_2/html/custom/element_upgrade_test.dart b/tests/lib_2/html/custom/element_upgrade_test.dart
index c025552..15a9f85 100644
--- a/tests/lib_2/html/custom/element_upgrade_test.dart
+++ b/tests/lib_2/html/custom/element_upgrade_test.dart
@@ -38,7 +38,8 @@
             upgrader.upgrade(e);
           };
 
-          document.registerElement('custom-element', CustomElement);
+          document
+              .registerElement2('custom-element', {'prototype': CustomElement});
         }
       }));
 
diff --git a/tests/lib_2/html/custom/entered_left_view_test.dart b/tests/lib_2/html/custom/entered_left_view_test.dart
index 20d5dc1..3badfdb 100644
--- a/tests/lib_2/html/custom/entered_left_view_test.dart
+++ b/tests/lib_2/html/custom/entered_left_view_test.dart
@@ -79,8 +79,8 @@
   setUp(() => customElementsReady.then((_) {
         if (registeredTypes) return;
         registeredTypes = true;
-        document.registerElement('x-a', Foo);
-        document.registerElement('x-a-old', FooOldCallbacks);
+        document.registerElement2('x-a', {'prototype': Foo});
+        document.registerElement2('x-a-old', {'prototype': FooOldCallbacks});
       }));
 
   group('standard_events', () {
diff --git a/tests/lib_2/html/custom/js_custom_test.dart b/tests/lib_2/html/custom/js_custom_test.dart
index 9044134..1a7fd47 100644
--- a/tests/lib_2/html/custom/js_custom_test.dart
+++ b/tests/lib_2/html/custom/js_custom_test.dart
@@ -31,7 +31,7 @@
     return customElementsReady.then((_) {
       if (!registered) {
         registered = true;
-        document.registerElement(A.tag, A);
+        document.registerElement2(A.tag, {'prototype': A});
       }
     });
   });
@@ -51,7 +51,7 @@
 
   test('accessing custom JS element from Dart', () {
     var script = '''
-    var Foo = document.registerElement('x-foo', {
+    var Foo = document.registerElement2('x-foo', {
       prototype: Object.create(HTMLElement.prototype, {
         createdCallback: {
           value: function() {
diff --git a/tests/lib_2/html/custom/mirrors_2_test.dart b/tests/lib_2/html/custom/mirrors_2_test.dart
index a489ede..6fa8ab3 100644
--- a/tests/lib_2/html/custom/mirrors_2_test.dart
+++ b/tests/lib_2/html/custom/mirrors_2_test.dart
@@ -27,8 +27,8 @@
   setUp(() => customElementsReady.then((_) {
         if (!registered) {
           registered = true;
-          document.registerElement(A.tag, A);
-          document.registerElement(B.tag, B);
+          document.registerElement2(A.tag, {'prototype': A});
+          document.registerElement2(B.tag, {'prototype': B});
         }
       }));
 
diff --git a/tests/lib_2/html/custom/mirrors_test.dart b/tests/lib_2/html/custom/mirrors_test.dart
index e5225af..c08e777 100644
--- a/tests/lib_2/html/custom/mirrors_test.dart
+++ b/tests/lib_2/html/custom/mirrors_test.dart
@@ -22,8 +22,8 @@
   setUp(() => customElementsReady.then((_) {
         if (!registered) {
           registered = true;
-          document.registerElement(A.tag, A);
-          document.registerElement(B.tag, B);
+          document.registerElement2(A.tag, {'prototype': A});
+          document.registerElement2(B.tag, {'prototype': B});
         }
       }));
 
diff --git a/tests/lib_2/html/custom/regress_194523002_test.dart b/tests/lib_2/html/custom/regress_194523002_test.dart
index 7cb1394..a705e34 100644
--- a/tests/lib_2/html/custom/regress_194523002_test.dart
+++ b/tests/lib_2/html/custom/regress_194523002_test.dart
@@ -27,7 +27,7 @@
     return customElementsReady.then((_) {
       if (!registered) {
         registered = true;
-        document.registerElement(A.tag, A);
+        document.registerElement2(A.tag, {'prototype': A});
       }
     });
   });
diff --git a/tests/lib_2/html/custom_element_method_clash_test.dart b/tests/lib_2/html/custom_element_method_clash_test.dart
index e088b65..b9ad26d 100644
--- a/tests/lib_2/html/custom_element_method_clash_test.dart
+++ b/tests/lib_2/html/custom_element_method_clash_test.dart
@@ -28,7 +28,7 @@
 
   group('test', () {
     test('test', () {
-      document.registerElement('x-custom', CustomElement);
+      document.registerElement2('x-custom', {'prototype': CustomElement});
       CustomElement custom = new CustomElement();
       document.body.children.add(custom);
 
diff --git a/tests/lib_2/html/custom_element_name_clash_test.dart b/tests/lib_2/html/custom_element_name_clash_test.dart
index a11c565..58e29d3 100644
--- a/tests/lib_2/html/custom_element_name_clash_test.dart
+++ b/tests/lib_2/html/custom_element_name_clash_test.dart
@@ -26,7 +26,7 @@
 
   group('test', () {
     test('test', () {
-      document.registerElement('x-custom', CustomElement);
+      document.registerElement2('x-custom', {'prototype': CustomElement});
       CustomElement custom = new CustomElement();
       document.body.children.add(custom);
       // Will call appendChild in JS.
diff --git a/tests/lib_2/html/element_types_constructors2_test.dart b/tests/lib_2/html/element_types_constructors2_test.dart
index f21ae78..d1376b0 100644
--- a/tests/lib_2/html/element_types_constructors2_test.dart
+++ b/tests/lib_2/html/element_types_constructors2_test.dart
@@ -33,7 +33,5 @@
     check('iframe', () => new IFrameElement() is IFrameElement);
     check('img', () => new ImageElement() is ImageElement);
     check('input', () => new InputElement() is InputElement);
-    check('keygen', () => new KeygenElement() is KeygenElement,
-        KeygenElement.supported);
   });
 }
diff --git a/tests/lib_2/html/element_types_keygen_test.dart b/tests/lib_2/html/element_types_keygen_test.dart
deleted file mode 100644
index ec27ac8..0000000
--- a/tests/lib_2/html/element_types_keygen_test.dart
+++ /dev/null
@@ -1,13 +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:html';
-
-import 'package:expect/minitest.dart';
-
-main() {
-  test('keygen_supported', () {
-    expect(KeygenElement.supported, true);
-  });
-}
diff --git a/tests/lib_2/html/fileapi_directory_test.dart b/tests/lib_2/html/fileapi_directory_test.dart
index 6dda69a..03f8e2f 100644
--- a/tests/lib_2/html/fileapi_directory_test.dart
+++ b/tests/lib_2/html/fileapi_directory_test.dart
@@ -1,5 +1,6 @@
 library fileapi;
 
+
 import 'dart:async';
 import 'dart:html';
 
@@ -40,5 +41,6 @@
       expect(entry.name, equals('directory3'));
     });
   }
+
 }
 
diff --git a/tests/lib_2/html/fileapi_file_test.dart b/tests/lib_2/html/fileapi_file_test.dart
index 3511ec3..9075a65 100644
--- a/tests/lib_2/html/fileapi_file_test.dart
+++ b/tests/lib_2/html/fileapi_file_test.dart
@@ -7,6 +7,12 @@
 import 'package:unittest/html_config.dart';
 import 'package:async_helper/async_helper.dart';
 
+class FileAndDir {
+  FileEntry file;
+  DirectoryEntry dir;
+  FileAndDir(this.file, this.dir);
+}
+
 FileSystem fs;
 
 main() async {
diff --git a/tests/lib_2/html/indexeddb_5_test.dart b/tests/lib_2/html/indexeddb_5_test.dart
index d4d3a28..3197c33 100644
--- a/tests/lib_2/html/indexeddb_5_test.dart
+++ b/tests/lib_2/html/indexeddb_5_test.dart
@@ -29,14 +29,6 @@
     });
   });
 
-  if (html.window.indexedDB.supportsDatabaseNames) {
-    test('getDatabaseNames', () {
-      return html.window.indexedDB.getDatabaseNames().then((names) {
-        expect(names.contains(dbName), isTrue);
-      });
-    });
-  }
-
   var value = {'name_index': 'one', 'value': 'add_value'};
   test('add/delete', () {
     var transaction = db.transaction(storeName, 'readwrite');
diff --git a/tests/lib_2/html/touchevent_test.dart b/tests/lib_2/html/touchevent_test.dart
index 7ad89c6..7e9645f 100644
--- a/tests/lib_2/html/touchevent_test.dart
+++ b/tests/lib_2/html/touchevent_test.dart
@@ -4,23 +4,16 @@
 
 import 'dart:html';
 
-import 'package:expect/minitest.dart';
+import 'package:unittest/unittest.dart';
+import 'package:unittest/html_config.dart';
 
 main() {
-  group('supported', () {
-    test('supported', () {
-      expect(TouchEvent.supported, isTrue);
-    });
-  });
+  useHtmlConfiguration();
 
-  group('functional', () {
-    test('unsupported throws', () {
-      var expectation = TouchEvent.supported ? returnsNormally : throws;
-
-      expect(() {
-        var e = new TouchEvent(null, null, null, 'touch');
-        expect(e is TouchEvent, isTrue);
-      }, expectation);
-    });
+  test('Basic TouchEvent', () {
+    if (TouchEvent.supported) {
+      var e = new TouchEvent('touch');
+      expect(e is TouchEvent, isTrue);
+    }
   });
 }
diff --git a/tests/lib_2/lib_2.status b/tests/lib_2/lib_2.status
index fbcb2db..322ea0f 100644
--- a/tests/lib_2/lib_2.status
+++ b/tests/lib_2/lib_2.status
@@ -15,7 +15,6 @@
 
 [ $runtime == chrome ]
 html/element_animate_test/timing_dict: RuntimeError # Issue 26730
-html/touchevent_test: Fail # Touch events are only supported on touch devices
 
 [ $runtime == drt ]
 html/webgl_extensions_test: Skip # webgl does not work properly on DRT, which is 'headless'.
@@ -99,7 +98,6 @@
 html/rtc_test: Fail
 html/shadow_dom_test: Fail
 html/speechrecognition_test: Fail
-html/touchevent_test: Fail # Safari does not support TouchEvents
 html/webgl_1_test: Pass, Fail # Issue 8219
 html/worker_api_test: Skip # Issue 13221
 typed_data/float32x4_test: Fail, Pass # Safari has an optimization bug (nightlies are already fine).
diff --git a/tests/lib_2/lib_2_analyzer.status b/tests/lib_2/lib_2_analyzer.status
index 8c96e84..96499ee 100644
--- a/tests/lib_2/lib_2_analyzer.status
+++ b/tests/lib_2/lib_2_analyzer.status
@@ -4,6 +4,7 @@
 
 [ $compiler == dart2analyzer ]
 html/debugger_test: CompileTimeError # Issue 28969
+html/element_types_keygen_test: CompileTimeError # Chrome 57 keygen removed
 html/js_function_getter_trust_types_test: Skip # dart2js specific flags.
 html/js_typed_interop_default_arg_test/default_value: MissingCompileTimeError # Issue #25759
 mirrors/deferred_mirrors_metadata_test: Fail # Issue 17522
@@ -20,7 +21,6 @@
 mirrors/metadata_nested_constructor_call_test/none: CompileTimeError
 
 [ $compiler == dart2analyzer && $strong ]
-html/transferables_test: CompileTimeError # Issue 30975
 mirrors/deferred_mirrors_metadata_test: StaticWarning # Issue 28969
 mirrors/deferred_type_test: CompileTimeError, OK # Deliberately refers to a deferred type in a declaration.
 mirrors/generic_f_bounded_mixin_application_test: CompileTimeError
diff --git a/tests/lib_2/lib_2_dart2js.status b/tests/lib_2/lib_2_dart2js.status
index 01f5583..85c39cc 100644
--- a/tests/lib_2/lib_2_dart2js.status
+++ b/tests/lib_2/lib_2_dart2js.status
@@ -406,7 +406,6 @@
 html/shadow_dom_test: Fail
 html/speechrecognition_test: RuntimeError # Please triage.
 html/text_event_test: Fail # Issue 17893
-html/touchevent_test: Fail
 html/webgl_1_test: Pass, Fail # Issue 8219
 html/websql_test: Fail
 isolate/kill_self_synchronously_test: RuntimeError
@@ -484,6 +483,8 @@
 
 [ $compiler == dart2js && $runtime == safari ]
 html/audiobuffersourcenode_test: RuntimeError
+html/client_rect_test: RuntimeError # Issue 32572
+html/css_test/functional/functional: RuntimeError # Issue 32576
 html/custom/attribute_changed_callback_test: RuntimeError, Timeout
 html/custom/constructor_calls_created_synchronously_test: Pass, Timeout
 html/custom/created_callback_test: Pass, Timeout
@@ -494,6 +495,8 @@
 html/file_sample_test: Skip # FileSystem not supported on Safari.
 html/fileapi_supported_throws_test: Skip # FileSystem not supported on Safari
 html/js_mock_test: RuntimeError # Issue 32286
+html/svgelement_test: RuntimeError # Issue 32571
+html/svgelement_test/getBoundingClientRect/getBoundingClientRect: RuntimeError # Issue 32571
 html/xhr_test: RuntimeError
 isolate/cross_isolate_message_test: Skip # Issue 12627
 isolate/message_test: Skip # Issue 12627
@@ -849,7 +852,6 @@
 html/mirrors_js_typed_interop_test: RuntimeError
 html/postmessage_structured_test: Crash # NoSuchMethodError: Class 'JMethod' has no instance getter 'implementation'.
 html/speechrecognition_test: Crash # NoSuchMethodError: Class 'JMethod' has no instance getter 'implementation'.
-html/touchevent_test: Crash # NoSuchMethodError: Class 'JMethod' has no instance getter 'implementation'.
 html/trusted_html_tree_sanitizer_test/not_create_document_fragment: RuntimeError
 html/trusted_html_tree_sanitizer_test/untrusted: RuntimeError
 html/typed_arrays_1_test/arrays: RuntimeError
diff --git a/tests/lib_2/lib_2_dartdevc.status b/tests/lib_2/lib_2_dartdevc.status
index 476cbd7..d3e9fe3 100644
--- a/tests/lib_2/lib_2_dartdevc.status
+++ b/tests/lib_2/lib_2_dartdevc.status
@@ -3,6 +3,7 @@
 # BSD-style license that can be found in the LICENSE file.
 
 [ $compiler == dartdevc ]
+html/element_types_keygen_test: CompileTimeError # Chrome 57 keygen removed
 html/xhr_test: Pass, Slow
 
 [ $compiler == dartdevk ]
@@ -19,9 +20,8 @@
 
 [ $runtime == chrome && ($compiler == dartdevc || $compiler == dartdevk) ]
 html/element_animate_test/timing_dict: RuntimeError # Issue 29922
-html/element_types_keygen_test: RuntimeError # Issue 29055
+html/element_types_keygen_test: CompileTimeError # Issue 29055
 html/js_dispatch_property_test: Skip # Timeout Issue 31030
-html/touchevent_test: RuntimeError # Issue 29922
 
 [ $runtime == drt && ($compiler == dartdevc || $compiler == dartdevk) ]
 html/svg_test: RuntimeError # Issue 29922
@@ -61,7 +61,6 @@
 convert/utf85_test: Slow, Pass
 html/async_spawnuri_test: RuntimeError # Issue 29922
 html/async_test: RuntimeError # Issue 29922
-html/client_rect_test: RuntimeError # Issue 29922, seems to be a reified type problem with DOMClientRect
 html/custom/attribute_changed_callback_test: Skip # Issue 31577
 html/custom/constructor_calls_created_synchronously_test: Skip # Issue 31577
 html/custom/created_callback_test: RuntimeError
@@ -103,12 +102,10 @@
 html/no_linked_scripts_htmltest: Skip # Issue 29919
 html/notification_permission_test: Timeout # Issue 32002
 html/scripts_htmltest: Skip # Issue 29919
-html/transferables_test: CompileTimeError # Issue 30975
 html/transition_event_test: Pass, RuntimeError, Timeout # Issue 29922, this test seems flaky
 html/two_scripts_htmltest: Skip # Issue 29919
 html/webgl_extensions_test: RuntimeError # Issue 31017
 html/worker_api_test: RuntimeError # Issue 29922
-html/xhr_cross_origin_test/functional: RuntimeError # Issue 29922
 isolate/*: SkipByDesign # No support for dart:isolate in dart4web (http://dartbug.com/30538)
 js/null_test: RuntimeError # Issue 30652
 math/double_pow_test: RuntimeError # Issue 29922
diff --git a/tools/VERSION b/tools/VERSION
index 08a79fe..bdaeec8 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 0
 PATCH 0
-PRERELEASE 39
+PRERELEASE 40
 PRERELEASE_PATCH 0
diff --git a/tools/bots/browsers/README b/tools/bots/browsers/README
new file mode 100644
index 0000000..91d325c
--- /dev/null
+++ b/tools/bots/browsers/README
@@ -0,0 +1,20 @@
+This directory contains the hashes of tar.gz files uploaded to cloud storage.
+Steps in the test.py script run "download_from_google_storage"
+to download these tarfiles and unpack them, if the browser cache directory exists.
+These tar files contain browser installations on the different platforms.
+We currently download Chrome.
+
+The downloads use the --auto-platform feature, so that only the browsers for the
+current platform (linux, macos, or windows) is downloaded. This requires
+the subdirectories to have the special names "linux", "win", and "mac", which
+the download_from_google_storage script in depot_tools is hardcoded to
+recognize.
+
+The download is intended to run on bots from the swarming pools, and they
+download to a named cache directory called "browsers" on those swarming bots.
+
+To upload new versions of these tar files, use the "upload_to_google_storage"
+tool in depot_tools, after replacing the existing downloaded browser in-place
+with the new version.
+
+Currently, we only have the Chrome browser for Linux uploaded.
\ No newline at end of file
diff --git a/tools/bots/browsers/chrome/linux/chrome.tar.gz.sha1 b/tools/bots/browsers/chrome/linux/chrome.tar.gz.sha1
new file mode 100644
index 0000000..ef2e989
--- /dev/null
+++ b/tools/bots/browsers/chrome/linux/chrome.tar.gz.sha1
@@ -0,0 +1 @@
+3d7ff2d8ee18bdb06f84b381795b53351437138b
\ No newline at end of file
diff --git a/tools/dom/dom.json b/tools/dom/dom.json
index 8a113c8..e5c2f48 100644
--- a/tools/dom/dom.json
+++ b/tools/dom/dom.json
@@ -16,6 +16,21 @@
     },
     "support_level": "untriaged"
   },
+  "AbortPaymentEvent": {
+    "members": {
+      "AbortPaymentEvent": {},
+      "respondWith": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "AbsoluteOrientationSensor": {
+    "members": {
+      "AbsoluteOrientationSensor": {}
+    },
+    "support_level": "untriaged"
+  },
   "AbstractWorker": {
     "comment": "http://www.w3.org/TR/workers/#the-abstractworker-abstract-interface",
     "members": {
@@ -26,6 +41,210 @@
     },
     "support_level": "stable"
   },
+  "Accelerometer": {
+    "members": {
+      "Accelerometer": {},
+      "x": {
+        "support_level": "untriaged"
+      },
+      "y": {
+        "support_level": "untriaged"
+      },
+      "z": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "AccessibleNode": {
+    "members": {
+      "AccessibleNode": {},
+      "activeDescendant": {
+        "support_level": "untriaged"
+      },
+      "appendChild": {
+        "support_level": "untriaged"
+      },
+      "atomic": {
+        "support_level": "untriaged"
+      },
+      "autocomplete": {
+        "support_level": "untriaged"
+      },
+      "busy": {
+        "support_level": "untriaged"
+      },
+      "checked": {
+        "support_level": "untriaged"
+      },
+      "colCount": {
+        "support_level": "untriaged"
+      },
+      "colIndex": {
+        "support_level": "untriaged"
+      },
+      "colSpan": {
+        "support_level": "untriaged"
+      },
+      "controls": {
+        "support_level": "untriaged"
+      },
+      "current": {
+        "support_level": "untriaged"
+      },
+      "describedBy": {
+        "support_level": "untriaged"
+      },
+      "details": {
+        "support_level": "untriaged"
+      },
+      "disabled": {
+        "support_level": "untriaged"
+      },
+      "errorMessage": {
+        "support_level": "untriaged"
+      },
+      "expanded": {
+        "support_level": "untriaged"
+      },
+      "flowTo": {
+        "support_level": "untriaged"
+      },
+      "hasPopUp": {
+        "support_level": "untriaged"
+      },
+      "hidden": {
+        "support_level": "untriaged"
+      },
+      "invalid": {
+        "support_level": "untriaged"
+      },
+      "keyShortcuts": {
+        "support_level": "untriaged"
+      },
+      "label": {
+        "support_level": "untriaged"
+      },
+      "labeledBy": {
+        "support_level": "untriaged"
+      },
+      "level": {
+        "support_level": "untriaged"
+      },
+      "live": {
+        "support_level": "untriaged"
+      },
+      "modal": {
+        "support_level": "untriaged"
+      },
+      "multiline": {
+        "support_level": "untriaged"
+      },
+      "multiselectable": {
+        "support_level": "untriaged"
+      },
+      "onaccessibleclick": {
+        "support_level": "untriaged"
+      },
+      "onaccessiblecontextmenu": {
+        "support_level": "untriaged"
+      },
+      "onaccessibledecrement": {
+        "support_level": "untriaged"
+      },
+      "onaccessiblefocus": {
+        "support_level": "untriaged"
+      },
+      "onaccessibleincrement": {
+        "support_level": "untriaged"
+      },
+      "onaccessiblescrollintoview": {
+        "support_level": "untriaged"
+      },
+      "orientation": {
+        "support_level": "untriaged"
+      },
+      "owns": {
+        "support_level": "untriaged"
+      },
+      "placeholder": {
+        "support_level": "untriaged"
+      },
+      "posInSet": {
+        "support_level": "untriaged"
+      },
+      "pressed": {
+        "support_level": "untriaged"
+      },
+      "readOnly": {
+        "support_level": "untriaged"
+      },
+      "relevant": {
+        "support_level": "untriaged"
+      },
+      "required": {
+        "support_level": "untriaged"
+      },
+      "role": {
+        "support_level": "untriaged"
+      },
+      "roleDescription": {
+        "support_level": "untriaged"
+      },
+      "rowCount": {
+        "support_level": "untriaged"
+      },
+      "rowIndex": {
+        "support_level": "untriaged"
+      },
+      "rowSpan": {
+        "support_level": "untriaged"
+      },
+      "selected": {
+        "support_level": "untriaged"
+      },
+      "setSize": {
+        "support_level": "untriaged"
+      },
+      "sort": {
+        "support_level": "untriaged"
+      },
+      "valueMax": {
+        "support_level": "untriaged"
+      },
+      "valueMin": {
+        "support_level": "untriaged"
+      },
+      "valueNow": {
+        "support_level": "untriaged"
+      },
+      "valueText": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "AccessibleNodeList": {
+    "members": {
+      "AccessibleNodeList": {},
+      "__setter__": {
+        "support_level": "untriaged"
+      },
+      "add": {
+        "support_level": "untriaged"
+      },
+      "item": {
+        "support_level": "untriaged"
+      },
+      "length": {
+        "support_level": "untriaged"
+      },
+      "remove": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "AesCbcParams": {
     "members": {
       "iv": {
@@ -69,9 +288,19 @@
     },
     "support_level": "untriaged"
   },
+  "AmbientLightSensor": {
+    "members": {
+      "AmbientLightSensor": {},
+      "illuminance": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "AnalyserNode": {
     "comment": "https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AnalyserNode",
     "members": {
+      "AnalyserNode": {},
       "fftSize": {},
       "frequencyBinCount": {},
       "getByteFrequencyData": {},
@@ -110,6 +339,12 @@
       "id": {
         "support_level": "untriaged"
       },
+      "oncancel": {
+        "support_level": "untriaged"
+      },
+      "onfinish": {
+        "support_level": "untriaged"
+      },
       "pause": {
         "support_level": "untriaged"
       },
@@ -133,6 +368,9 @@
       },
       "startTime": {
         "support_level": "untriaged"
+      },
+      "timeline": {
+        "support_level": "untriaged"
       }
     },
     "support_level": "untriaged"
@@ -146,6 +384,9 @@
       "computedTiming": {
         "support_level": "untriaged"
       },
+      "getComputedTiming": {
+        "support_level": "untriaged"
+      },
       "timing": {
         "support_level": "untriaged"
       }
@@ -184,6 +425,35 @@
     },
     "support_level": "untriaged"
   },
+  "AnimationEffectTimingReadOnly": {
+    "members": {
+      "delay": {
+        "support_level": "untriaged"
+      },
+      "direction": {
+        "support_level": "untriaged"
+      },
+      "duration": {
+        "support_level": "untriaged"
+      },
+      "easing": {
+        "support_level": "untriaged"
+      },
+      "endDelay": {
+        "support_level": "untriaged"
+      },
+      "fill": {
+        "support_level": "untriaged"
+      },
+      "iterationStart": {
+        "support_level": "untriaged"
+      },
+      "iterations": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "AnimationEvent": {
     "members": {
       "AnimationEvent": {},
@@ -225,6 +495,18 @@
     },
     "support_level": "untriaged"
   },
+  "AnimationPlaybackEvent": {
+    "members": {
+      "AnimationPlaybackEvent": {},
+      "currentTime": {
+        "support_level": "untriaged"
+      },
+      "timelineTime": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "AnimationPlayer": {
     "members": {
       "cancel": {
@@ -301,6 +583,14 @@
     },
     "support_level": "untriaged"
   },
+  "AnimationWorkletGlobalScope": {
+    "members": {
+      "registerAnimator": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "AppBannerPromptResult": {
     "members": {
       "outcome": {
@@ -407,6 +697,7 @@
   "AudioBuffer": {
     "comment": "https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioBuffer-section",
     "members": {
+      "AudioBuffer": {},
       "copyFromChannel": {
         "support_level": "untriaged"
       },
@@ -432,6 +723,7 @@
   "AudioBufferSourceNode": {
     "comment": "https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioBufferSourceNode-section",
     "members": {
+      "AudioBufferSourceNode": {},
       "FINISHED_STATE": {},
       "PLAYING_STATE": {},
       "SCHEDULED_STATE": {},
@@ -486,6 +778,9 @@
         "support_level": "untriaged"
       },
       "start": {},
+      "start2": {
+        "support_level": "untriaged"
+      },
       "stop": {}
     },
     "support_level": "experimental"
@@ -498,6 +793,9 @@
       "addEventListener": {
         "support_level": "untriaged"
       },
+      "baseLatency": {
+        "support_level": "untriaged"
+      },
       "close": {
         "support_level": "untriaged"
       },
@@ -539,6 +837,9 @@
       "dispatchEvent": {
         "support_level": "untriaged"
       },
+      "getOutputTimestamp": {
+        "support_level": "untriaged"
+      },
       "listener": {},
       "oncomplete": {},
       "removeEventListener": {
@@ -569,10 +870,37 @@
     "comment": "https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioListener-section",
     "members": {
       "dopplerFactor": {},
+      "forwardX": {
+        "support_level": "untriaged"
+      },
+      "forwardY": {
+        "support_level": "untriaged"
+      },
+      "forwardZ": {
+        "support_level": "untriaged"
+      },
+      "positionX": {
+        "support_level": "untriaged"
+      },
+      "positionY": {
+        "support_level": "untriaged"
+      },
+      "positionZ": {
+        "support_level": "untriaged"
+      },
       "setOrientation": {},
       "setPosition": {},
       "setVelocity": {},
-      "speedOfSound": {}
+      "speedOfSound": {},
+      "upX": {
+        "support_level": "untriaged"
+      },
+      "upY": {
+        "support_level": "untriaged"
+      },
+      "upZ": {
+        "support_level": "untriaged"
+      }
     },
     "support_level": "experimental"
   },
@@ -596,6 +924,9 @@
   "AudioParam": {
     "comment": "https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioParam",
     "members": {
+      "cancelAndHoldAtTime": {
+        "support_level": "untriaged"
+      },
       "cancelScheduledValues": {},
       "defaultValue": {},
       "exponentialRampToValueAtTime": {},
@@ -612,9 +943,14 @@
     },
     "support_level": "experimental"
   },
+  "AudioParamMap": {
+    "members": {},
+    "support_level": "untriaged"
+  },
   "AudioProcessingEvent": {
     "comment": "https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioProcessingEvent-section",
     "members": {
+      "AudioProcessingEvent": {},
       "inputBuffer": {},
       "outputBuffer": {},
       "playbackTime": {
@@ -623,6 +959,23 @@
     },
     "support_level": "experimental"
   },
+  "AudioScheduledSourceNode": {
+    "members": {
+      "onended": {
+        "support_level": "untriaged"
+      },
+      "start": {
+        "support_level": "untriaged"
+      },
+      "start2": {
+        "support_level": "untriaged"
+      },
+      "stop": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "AudioSourceNode": {
     "comment": "https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html",
     "members": {},
@@ -644,6 +997,9 @@
       },
       "language": {
         "support_level": "untriaged"
+      },
+      "sourceBuffer": {
+        "support_level": "untriaged"
       }
     },
     "support_level": "untriaged"
@@ -660,8 +1016,68 @@
       "length": {
         "support_level": "untriaged"
       },
+      "onaddtrack": {
+        "support_level": "untriaged"
+      },
       "onchange": {
         "support_level": "untriaged"
+      },
+      "onremovetrack": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "AudioWorkletGlobalScope": {
+    "members": {
+      "currentTime": {
+        "support_level": "untriaged"
+      },
+      "registerProcessor": {
+        "support_level": "untriaged"
+      },
+      "sampleRate": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "AudioWorkletNode": {
+    "members": {
+      "AudioWorkletNode": {},
+      "parameters": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "AudioWorkletProcessor": {
+    "members": {},
+    "support_level": "untriaged"
+  },
+  "AuthenticatorAssertionResponse": {
+    "members": {
+      "authenticatorData": {
+        "support_level": "untriaged"
+      },
+      "signature": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "AuthenticatorAttestationResponse": {
+    "members": {
+      "attestationObject": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "AuthenticatorResponse": {
+    "members": {
+      "clientDataJSON": {
+        "support_level": "untriaged"
       }
     },
     "support_level": "untriaged"
@@ -674,6 +1090,108 @@
     },
     "support_level": "experimental"
   },
+  "BackgroundFetchClickEvent": {
+    "members": {
+      "BackgroundFetchClickEvent": {},
+      "state": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "BackgroundFetchEvent": {
+    "members": {
+      "BackgroundFetchEvent": {},
+      "id": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "BackgroundFetchFailEvent": {
+    "members": {
+      "BackgroundFetchFailEvent": {},
+      "fetches": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "BackgroundFetchFetch": {
+    "members": {
+      "request": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "BackgroundFetchManager": {
+    "members": {
+      "fetch": {
+        "support_level": "untriaged"
+      },
+      "get": {
+        "support_level": "untriaged"
+      },
+      "getIds": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "BackgroundFetchRegistration": {
+    "members": {
+      "abort": {
+        "support_level": "untriaged"
+      },
+      "downloadTotal": {
+        "support_level": "untriaged"
+      },
+      "downloaded": {
+        "support_level": "untriaged"
+      },
+      "id": {
+        "support_level": "untriaged"
+      },
+      "onprogress": {
+        "support_level": "untriaged"
+      },
+      "title": {
+        "support_level": "untriaged"
+      },
+      "totalDownloadSize": {
+        "support_level": "untriaged"
+      },
+      "uploadTotal": {
+        "support_level": "untriaged"
+      },
+      "uploaded": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "BackgroundFetchSettledFetch": {
+    "members": {
+      "BackgroundFetchSettledFetch": {},
+      "response": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "BackgroundFetchedEvent": {
+    "members": {
+      "BackgroundFetchedEvent": {},
+      "fetches": {
+        "support_level": "untriaged"
+      },
+      "updateUI": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "BarProp": {
     "comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/browsers.html#barprop",
     "dart_action": "suppress",
@@ -682,6 +1200,107 @@
     },
     "support_level": "standard"
   },
+  "BarcodeDetector": {
+    "members": {
+      "BarcodeDetector": {},
+      "detect": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "BaseAudioContext": {
+    "members": {
+      "createAnalyser": {
+        "support_level": "untriaged"
+      },
+      "createBiquadFilter": {
+        "support_level": "untriaged"
+      },
+      "createBuffer": {
+        "support_level": "untriaged"
+      },
+      "createBufferSource": {
+        "support_level": "untriaged"
+      },
+      "createChannelMerger": {
+        "support_level": "untriaged"
+      },
+      "createChannelSplitter": {
+        "support_level": "untriaged"
+      },
+      "createConstantSource": {
+        "support_level": "untriaged"
+      },
+      "createConvolver": {
+        "support_level": "untriaged"
+      },
+      "createDelay": {
+        "support_level": "untriaged"
+      },
+      "createDynamicsCompressor": {
+        "support_level": "untriaged"
+      },
+      "createGain": {
+        "support_level": "untriaged"
+      },
+      "createIIRFilter": {
+        "support_level": "untriaged"
+      },
+      "createMediaElementSource": {
+        "support_level": "untriaged"
+      },
+      "createMediaStreamDestination": {
+        "support_level": "untriaged"
+      },
+      "createMediaStreamSource": {
+        "support_level": "untriaged"
+      },
+      "createOscillator": {
+        "support_level": "untriaged"
+      },
+      "createPanner": {
+        "support_level": "untriaged"
+      },
+      "createPeriodicWave": {
+        "support_level": "untriaged"
+      },
+      "createScriptProcessor": {
+        "support_level": "untriaged"
+      },
+      "createStereoPanner": {
+        "support_level": "untriaged"
+      },
+      "createWaveShaper": {
+        "support_level": "untriaged"
+      },
+      "currentTime": {
+        "support_level": "untriaged"
+      },
+      "decodeAudioData": {
+        "support_level": "untriaged"
+      },
+      "destination": {
+        "support_level": "untriaged"
+      },
+      "listener": {
+        "support_level": "untriaged"
+      },
+      "onstatechange": {
+        "support_level": "untriaged"
+      },
+      "resume": {
+        "support_level": "untriaged"
+      },
+      "sampleRate": {
+        "support_level": "untriaged"
+      },
+      "state": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "BatteryManager": {
     "comment": "https://dvcs.w3.org/hg/dap/raw-file/default/battery/Overview.html#batterymanager-interface",
     "dart_action": "experimental",
@@ -733,6 +1352,7 @@
     "members": {
       "ALLPASS": {},
       "BANDPASS": {},
+      "BiquadFilterNode": {},
       "HIGHPASS": {},
       "HIGHSHELF": {},
       "LOWPASS": {},
@@ -770,6 +1390,9 @@
       "BlobEvent": {},
       "data": {
         "support_level": "untriaged"
+      },
+      "timecode": {
+        "support_level": "untriaged"
       }
     },
     "support_level": "untriaged"
@@ -931,6 +1554,26 @@
     },
     "support_level": "untriaged"
   },
+  "BluetoothRemoteGATTDescriptor": {
+    "members": {
+      "characteristic": {
+        "support_level": "untriaged"
+      },
+      "readValue": {
+        "support_level": "untriaged"
+      },
+      "uuid": {
+        "support_level": "untriaged"
+      },
+      "value": {
+        "support_level": "untriaged"
+      },
+      "writeValue": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "BluetoothRemoteGATTServer": {
     "members": {
       "connect": {
@@ -996,6 +1639,9 @@
       "bodyUsed": {
         "support_level": "untriaged"
       },
+      "formData": {
+        "support_level": "untriaged"
+      },
       "json": {
         "support_level": "untriaged"
       },
@@ -1005,6 +1651,52 @@
     },
     "support_level": "untriaged"
   },
+  "BroadcastChannel": {
+    "members": {
+      "BroadcastChannel": {},
+      "close": {
+        "support_level": "untriaged"
+      },
+      "name": {
+        "support_level": "untriaged"
+      },
+      "onmessage": {
+        "support_level": "untriaged"
+      },
+      "onmessageerror": {
+        "support_level": "untriaged"
+      },
+      "postMessage": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "BudgetService": {
+    "members": {
+      "getBudget": {
+        "support_level": "untriaged"
+      },
+      "getCost": {
+        "support_level": "untriaged"
+      },
+      "reserve": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "BudgetState": {
+    "members": {
+      "budgetAt": {
+        "support_level": "untriaged"
+      },
+      "time": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "CDATASection": {
     "comment": "http://dom.spec.whatwg.org/#cdatasection",
     "dart_action": "suppress",
@@ -1051,12 +1743,105 @@
     "comment": "http://www.w3.org/TR/css3-conditional/#the-css-interface",
     "dart_action": "experimental",
     "members": {
+      "Hz": {
+        "support_level": "untriaged"
+      },
+      "ch": {
+        "support_level": "untriaged"
+      },
+      "cm": {
+        "support_level": "untriaged"
+      },
+      "deg": {
+        "support_level": "untriaged"
+      },
+      "dpcm": {
+        "support_level": "untriaged"
+      },
+      "dpi": {
+        "support_level": "untriaged"
+      },
+      "dppx": {
+        "support_level": "untriaged"
+      },
+      "em": {
+        "support_level": "untriaged"
+      },
       "escape": {
         "support_level": "untriaged"
       },
+      "ex": {
+        "support_level": "untriaged"
+      },
+      "fr": {
+        "support_level": "untriaged"
+      },
+      "grad": {
+        "support_level": "untriaged"
+      },
+      "in": {
+        "support_level": "untriaged"
+      },
+      "inch": {
+        "support_level": "untriaged"
+      },
+      "kHz": {
+        "support_level": "untriaged"
+      },
+      "mm": {
+        "support_level": "untriaged"
+      },
+      "ms": {
+        "support_level": "untriaged"
+      },
+      "number": {
+        "support_level": "untriaged"
+      },
+      "paintWorklet": {
+        "support_level": "untriaged"
+      },
+      "pc": {
+        "support_level": "untriaged"
+      },
+      "percent": {
+        "support_level": "untriaged"
+      },
+      "pt": {
+        "support_level": "untriaged"
+      },
+      "px": {
+        "support_level": "untriaged"
+      },
+      "rad": {
+        "support_level": "untriaged"
+      },
+      "registerProperty": {
+        "support_level": "untriaged"
+      },
+      "rem": {
+        "support_level": "untriaged"
+      },
+      "s": {
+        "support_level": "untriaged"
+      },
       "supports": {},
       "supportsCondition": {},
-      "supportsProperty": {}
+      "supportsProperty": {},
+      "turn": {
+        "support_level": "untriaged"
+      },
+      "vh": {
+        "support_level": "untriaged"
+      },
+      "vmax": {
+        "support_level": "untriaged"
+      },
+      "vmin": {
+        "support_level": "untriaged"
+      },
+      "vw": {
+        "support_level": "untriaged"
+      }
     }
   },
   "CSSCharsetRule": {
@@ -1066,6 +1851,14 @@
     },
     "support_level": "experimental"
   },
+  "CSSConditionRule": {
+    "members": {
+      "conditionText": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "CSSFontFaceLoadEvent": {
     "comment": "http://www.w3.org/TR/css3-fonts/",
     "members": {
@@ -1107,6 +1900,20 @@
     },
     "support_level": "experimental"
   },
+  "CSSImageValue": {
+    "members": {
+      "intrinsicHeight": {
+        "support_level": "untriaged"
+      },
+      "intrinsicRatio": {
+        "support_level": "untriaged"
+      },
+      "intrinsicWidth": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "CSSImportRule": {
     "comment": "http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSImportRule",
     "members": {
@@ -1154,6 +1961,24 @@
     },
     "support_level": "untriaged"
   },
+  "CSSKeywordValue": {
+    "members": {
+      "CSSKeywordValue": {},
+      "value": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "CSSMatrixComponent": {
+    "members": {
+      "CSSMatrixComponent": {},
+      "matrix": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "CSSMediaRule": {
     "comment": "http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule",
     "members": {
@@ -1175,6 +2000,29 @@
     },
     "support_level": "untriaged"
   },
+  "CSSNumericValue": {
+    "members": {
+      "add": {
+        "support_level": "untriaged"
+      },
+      "div": {
+        "support_level": "untriaged"
+      },
+      "mul": {
+        "support_level": "untriaged"
+      },
+      "parse": {
+        "support_level": "untriaged"
+      },
+      "sub": {
+        "support_level": "untriaged"
+      },
+      "to": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "CSSPageRule": {
     "comment": "http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPageRule",
     "members": {
@@ -1183,6 +2031,27 @@
     },
     "support_level": "stable"
   },
+  "CSSPerspective": {
+    "members": {
+      "CSSPerspective": {},
+      "length": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "CSSPositionValue": {
+    "members": {
+      "CSSPositionValue": {},
+      "x": {
+        "support_level": "untriaged"
+      },
+      "y": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "CSSPrimitiveValue": {
     "comment": "http://dev.w3.org/csswg/cssom/#the-cssstyledeclaration-interface",
     "dart_action": "suppress",
@@ -1228,6 +2097,32 @@
     },
     "support_level": "deprecated"
   },
+  "CSSResourceValue": {
+    "members": {
+      "state": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "CSSRotation": {
+    "members": {
+      "CSSRotation": {},
+      "angle": {
+        "support_level": "untriaged"
+      },
+      "x": {
+        "support_level": "untriaged"
+      },
+      "y": {
+        "support_level": "untriaged"
+      },
+      "z": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "CSSRule": {
     "comment": "http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule",
     "members": {
@@ -1290,6 +2185,33 @@
     },
     "support_level": "stable"
   },
+  "CSSScale": {
+    "members": {
+      "CSSScale": {},
+      "x": {
+        "support_level": "untriaged"
+      },
+      "y": {
+        "support_level": "untriaged"
+      },
+      "z": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "CSSSkew": {
+    "members": {
+      "CSSSkew": {},
+      "ax": {
+        "support_level": "untriaged"
+      },
+      "ay": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "CSSStyleDeclaration": {
     "comment": "http://dev.w3.org/csswg/cssom/#the-cssstyledeclaration-interface",
     "members": {
@@ -1353,6 +2275,14 @@
     },
     "support_level": "stable"
   },
+  "CSSStyleValue": {
+    "members": {
+      "parse": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "CSSSupportsRule": {
     "comment": "http://www.w3.org/TR/css3-conditional/#csssupportsrule",
     "members": {
@@ -1363,12 +2293,88 @@
     },
     "support_level": "standard"
   },
+  "CSSTransformComponent": {
+    "members": {
+      "is2D": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "CSSTransformValue": {
+    "members": {
+      "CSSTransformValue": {},
+      "componentAtIndex": {
+        "support_level": "untriaged"
+      },
+      "is2D": {
+        "support_level": "untriaged"
+      },
+      "length": {
+        "support_level": "untriaged"
+      },
+      "toMatrix": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "CSSTranslation": {
+    "members": {
+      "CSSTranslation": {},
+      "x": {
+        "support_level": "untriaged"
+      },
+      "y": {
+        "support_level": "untriaged"
+      },
+      "z": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "CSSURLImageValue": {
+    "members": {
+      "CSSURLImageValue": {},
+      "url": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "CSSUnitValue": {
+    "members": {
+      "CSSUnitValue": {},
+      "type": {
+        "support_level": "untriaged"
+      },
+      "unit": {
+        "support_level": "untriaged"
+      },
+      "value": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "CSSUnknownRule": {
     "comment": "http://dev.w3.org/csswg/cssom/#the-cssstylesheet-interface",
     "dart_action": "suppress",
     "members": {},
     "support_level": "deprecated"
   },
+  "CSSUnparsedValue": {
+    "members": {
+      "fragmentAtIndex": {
+        "support_level": "untriaged"
+      },
+      "length": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "CSSValue": {
     "comment": "http://dev.w3.org/csswg/cssom/",
     "dart_action": "suppress",
@@ -1403,6 +2409,17 @@
     },
     "support_level": "deprecated"
   },
+  "CSSVariableReferenceValue": {
+    "members": {
+      "fallback": {
+        "support_level": "untriaged"
+      },
+      "variable": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "CSSVariablesMap": {
     "members": {
       "clear": {
@@ -1525,6 +2542,27 @@
     },
     "support_level": "untriaged"
   },
+  "CanMakePaymentEvent": {
+    "members": {
+      "CanMakePaymentEvent": {},
+      "methodData": {
+        "support_level": "untriaged"
+      },
+      "modifiers": {
+        "support_level": "untriaged"
+      },
+      "paymentRequestOrigin": {
+        "support_level": "untriaged"
+      },
+      "respondWith": {
+        "support_level": "untriaged"
+      },
+      "topLevelOrigin": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "Canvas2DContextAttributes": {
     "comment": "http://wiki.whatwg.org/wiki/CanvasOpaque#Suggested_IDL",
     "members": {
@@ -1553,6 +2591,38 @@
     },
     "support_level": "stable"
   },
+  "CanvasPath": {
+    "members": {
+      "arc": {
+        "support_level": "untriaged"
+      },
+      "arcTo": {
+        "support_level": "untriaged"
+      },
+      "bezierCurveTo": {
+        "support_level": "untriaged"
+      },
+      "closePath": {
+        "support_level": "untriaged"
+      },
+      "ellipse": {
+        "support_level": "untriaged"
+      },
+      "lineTo": {
+        "support_level": "untriaged"
+      },
+      "moveTo": {
+        "support_level": "untriaged"
+      },
+      "quadraticCurveTo": {
+        "support_level": "untriaged"
+      },
+      "rect": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "CanvasPathMethods": {
     "members": {
       "arc": {
@@ -1779,12 +2849,16 @@
   },
   "ChannelMergerNode": {
     "comment": "https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#ChannelMergerNode-section",
-    "members": {},
+    "members": {
+      "ChannelMergerNode": {}
+    },
     "support_level": "experimental"
   },
   "ChannelSplitterNode": {
     "comment": "https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#ChannelSplitterNode-section",
-    "members": {},
+    "members": {
+      "ChannelSplitterNode": {}
+    },
     "support_level": "experimental"
   },
   "CharacterData": {
@@ -1891,6 +2965,9 @@
       "postMessage": {
         "support_level": "untriaged"
       },
+      "type": {
+        "support_level": "untriaged"
+      },
       "url": {
         "support_level": "untriaged"
       }
@@ -1946,14 +3023,27 @@
       "files": {},
       "getData": {},
       "items": {},
+      "read": {
+        "support_level": "untriaged"
+      },
+      "readText": {
+        "support_level": "untriaged"
+      },
       "setData": {},
       "setDragImage": {},
-      "types": {}
+      "types": {},
+      "write": {
+        "support_level": "untriaged"
+      },
+      "writeText": {
+        "support_level": "untriaged"
+      }
     },
     "support_level": "stable"
   },
   "ClipboardEvent": {
     "members": {
+      "ClipboardEvent": {},
       "clipboardData": {
         "support_level": "untriaged"
       }
@@ -2207,14 +3297,35 @@
     },
     "support_level": "untriaged"
   },
+  "ConstantSourceNode": {
+    "members": {
+      "ConstantSourceNode": {},
+      "offset": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "ConvolverNode": {
     "comment": "https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#ConvolverNode",
     "members": {
+      "ConvolverNode": {},
       "buffer": {},
       "normalize": {}
     },
     "support_level": "experimental"
   },
+  "CookieStore": {
+    "members": {
+      "getAll": {
+        "support_level": "untriaged"
+      },
+      "set": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "Coordinates": {
     "comment": "http://www.w3.org/TR/geolocation-API/#coordinates_interface",
     "members": {
@@ -2258,8 +3369,22 @@
     },
     "support_level": "untriaged"
   },
+  "CredentialUserData": {
+    "members": {
+      "iconURL": {
+        "support_level": "untriaged"
+      },
+      "name": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "CredentialsContainer": {
     "members": {
+      "create": {
+        "support_level": "untriaged"
+      },
       "get": {
         "support_level": "untriaged"
       },
@@ -2272,6 +3397,9 @@
       "notifySignedOut": {
         "support_level": "untriaged"
       },
+      "preventSilentAccess": {
+        "support_level": "untriaged"
+      },
       "request": {
         "support_level": "untriaged"
       },
@@ -2362,9 +3490,27 @@
   "CustomElementConstructor": {
     "comment": "https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/custom/index.html#dfn-custom-element-constructor-generation",
     "dart_action": "suppress",
-    "members": {},
+    "members": {
+      "callback": {
+        "support_level": "untriaged"
+      }
+    },
     "support_level": "experimental"
   },
+  "CustomElementRegistry": {
+    "members": {
+      "define": {
+        "support_level": "untriaged"
+      },
+      "get": {
+        "support_level": "untriaged"
+      },
+      "whenDefined": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "CustomEvent": {
     "comment": "http://www.w3.org/TR/DOM-Level-3-Events/#interface-CustomEvent",
     "members": {
@@ -2600,6 +3746,18 @@
       "f": {
         "support_level": "untriaged"
       },
+      "fromFloat32Array": {
+        "support_level": "untriaged"
+      },
+      "fromFloat64Array": {
+        "support_level": "untriaged"
+      },
+      "fromMatrix": {
+        "support_level": "untriaged"
+      },
+      "invertSelf": {
+        "support_level": "untriaged"
+      },
       "m11": {
         "support_level": "untriaged"
       },
@@ -2654,6 +3812,15 @@
       "preMultiplySelf": {
         "support_level": "untriaged"
       },
+      "rotateAxisAngleSelf": {
+        "support_level": "untriaged"
+      },
+      "rotateFromVectorSelf": {
+        "support_level": "untriaged"
+      },
+      "rotateSelf": {
+        "support_level": "untriaged"
+      },
       "scale3dSelf": {
         "support_level": "untriaged"
       },
@@ -2663,6 +3830,15 @@
       "scaleSelf": {
         "support_level": "untriaged"
       },
+      "setMatrixValue": {
+        "support_level": "untriaged"
+      },
+      "skewXSelf": {
+        "support_level": "untriaged"
+      },
+      "skewYSelf": {
+        "support_level": "untriaged"
+      },
       "translateSelf": {
         "support_level": "untriaged"
       }
@@ -2671,6 +3847,7 @@
   },
   "DOMMatrixReadOnly": {
     "members": {
+      "DOMMatrixReadOnly": {},
       "a": {
         "support_level": "untriaged"
       },
@@ -2689,6 +3866,24 @@
       "f": {
         "support_level": "untriaged"
       },
+      "flipX": {
+        "support_level": "untriaged"
+      },
+      "flipY": {
+        "support_level": "untriaged"
+      },
+      "fromFloat32Array": {
+        "support_level": "untriaged"
+      },
+      "fromFloat64Array": {
+        "support_level": "untriaged"
+      },
+      "fromMatrix": {
+        "support_level": "untriaged"
+      },
+      "inverse": {
+        "support_level": "untriaged"
+      },
       "is2D": {
         "support_level": "untriaged"
       },
@@ -2746,6 +3941,15 @@
       "multiply": {
         "support_level": "untriaged"
       },
+      "rotate": {
+        "support_level": "untriaged"
+      },
+      "rotateAxisAngle": {
+        "support_level": "untriaged"
+      },
+      "rotateFromVector": {
+        "support_level": "untriaged"
+      },
       "scale": {
         "support_level": "untriaged"
       },
@@ -2755,12 +3959,21 @@
       "scaleNonUniform": {
         "support_level": "untriaged"
       },
+      "skewX": {
+        "support_level": "untriaged"
+      },
+      "skewY": {
+        "support_level": "untriaged"
+      },
       "toFloat32Array": {
         "support_level": "untriaged"
       },
       "toFloat64Array": {
         "support_level": "untriaged"
       },
+      "transformPoint": {
+        "support_level": "untriaged"
+      },
       "translate": {
         "support_level": "untriaged"
       }
@@ -2777,6 +3990,9 @@
   "DOMPoint": {
     "members": {
       "DOMPoint": {},
+      "fromPoint": {
+        "support_level": "untriaged"
+      },
       "w": {
         "support_level": "untriaged"
       },
@@ -2795,6 +4011,12 @@
   "DOMPointReadOnly": {
     "members": {
       "DOMPointReadOnly": {},
+      "fromPoint": {
+        "support_level": "untriaged"
+      },
+      "matrixTransform": {
+        "support_level": "untriaged"
+      },
       "w": {
         "support_level": "untriaged"
       },
@@ -2810,9 +4032,39 @@
     },
     "support_level": "untriaged"
   },
+  "DOMQuad": {
+    "members": {
+      "DOMQuad": {},
+      "fromQuad": {
+        "support_level": "untriaged"
+      },
+      "fromRect": {
+        "support_level": "untriaged"
+      },
+      "getBounds": {
+        "support_level": "untriaged"
+      },
+      "p1": {
+        "support_level": "untriaged"
+      },
+      "p2": {
+        "support_level": "untriaged"
+      },
+      "p3": {
+        "support_level": "untriaged"
+      },
+      "p4": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "DOMRect": {
     "members": {
       "DOMRect": {},
+      "fromRect": {
+        "support_level": "untriaged"
+      },
       "height": {
         "support_level": "untriaged"
       },
@@ -2828,12 +4080,26 @@
     },
     "support_level": "untriaged"
   },
+  "DOMRectList": {
+    "members": {
+      "item": {
+        "support_level": "untriaged"
+      },
+      "length": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "DOMRectReadOnly": {
     "members": {
       "DOMRectReadOnly": {},
       "bottom": {
         "support_level": "untriaged"
       },
+      "fromRect": {
+        "support_level": "untriaged"
+      },
       "height": {
         "support_level": "untriaged"
       },
@@ -2907,6 +4173,9 @@
       "remove": {
         "support_level": "untriaged"
       },
+      "replace": {
+        "support_level": "untriaged"
+      },
       "supports": {
         "support_level": "untriaged"
       },
@@ -2920,6 +4189,7 @@
   },
   "DataTransfer": {
     "members": {
+      "DataTransfer": {},
       "clearData": {
         "support_level": "untriaged"
       },
@@ -3019,6 +4289,9 @@
     "comment": "http://www.w3.org/TR/webdatabase/#databasecallback",
     "dart_action": "experimental",
     "members": {
+      "callback": {
+        "support_level": "untriaged"
+      },
       "handleEvent": {}
     },
     "support_level": "deprecated"
@@ -3035,6 +4308,22 @@
     },
     "support_level": "deprecated"
   },
+  "DecodeErrorCallback": {
+    "members": {
+      "callback": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "DecodeSuccessCallback": {
+    "members": {
+      "callback": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "DedicatedWorkerContext": {
     "comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html",
     "members": {
@@ -3051,9 +4340,15 @@
       "TEMPORARY": {
         "support_level": "untriaged"
       },
+      "close": {
+        "support_level": "untriaged"
+      },
       "onmessage": {
         "support_level": "untriaged"
       },
+      "onmessageerror": {
+        "support_level": "untriaged"
+      },
       "postMessage": {
         "support_level": "untriaged"
       },
@@ -3084,6 +4379,7 @@
   "DelayNode": {
     "comment": "https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#DelayNode",
     "members": {
+      "DelayNode": {},
       "delayTime": {}
     },
     "support_level": "experimental"
@@ -3116,6 +4412,62 @@
     },
     "support_level": "untriaged"
   },
+  "DeprecationReport": {
+    "members": {
+      "lineNumber": {
+        "support_level": "untriaged"
+      },
+      "message": {
+        "support_level": "untriaged"
+      },
+      "sourceFile": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "DetectedBarcode": {
+    "members": {
+      "DetectedBarcode": {},
+      "boundingBox": {
+        "support_level": "untriaged"
+      },
+      "cornerPoints": {
+        "support_level": "untriaged"
+      },
+      "rawValue": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "DetectedFace": {
+    "members": {
+      "DetectedFace": {},
+      "boundingBox": {
+        "support_level": "untriaged"
+      },
+      "landmarks": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "DetectedText": {
+    "members": {
+      "DetectedText": {},
+      "boundingBox": {
+        "support_level": "untriaged"
+      },
+      "cornerPoints": {
+        "support_level": "untriaged"
+      },
+      "rawValue": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "DeviceAcceleration": {
     "comment": "http://dev.w3.org/geo/api/spec-source-orientation.html#devicemotion",
     "members": {
@@ -3137,6 +4489,7 @@
   "DeviceMotionEvent": {
     "comment": "http://dev.w3.org/geo/api/spec-source-orientation.html#devicemotion",
     "members": {
+      "DeviceMotionEvent": {},
       "acceleration": {},
       "accelerationIncludingGravity": {},
       "initDeviceMotionEvent": {
@@ -3150,6 +4503,7 @@
   "DeviceOrientationEvent": {
     "comment": "http://dev.w3.org/geo/api/spec-source-orientation.html#devicemotion",
     "members": {
+      "DeviceOrientationEvent": {},
       "absolute": {},
       "alpha": {},
       "beta": {},
@@ -3237,10 +4591,14 @@
   "Document": {
     "comment": "http://dom.spec.whatwg.org/#interface-document",
     "members": {
+      "Document": {},
       "URL": {},
       "activeElement": {
         "support_level": "untriaged"
       },
+      "addressSpace": {
+        "support_level": "untriaged"
+      },
       "adoptNode": {},
       "anchors": {
         "dart_action": "suppress"
@@ -3367,6 +4725,9 @@
       "fullscreenEnabled": {
         "support_level": "untriaged"
       },
+      "getAnimations": {
+        "support_level": "untriaged"
+      },
       "getCSSCanvasContext": {
         "comment": "https://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariCSSRef/Articles/Functions.html",
         "support_level": "nonstandard"
@@ -3545,6 +4906,9 @@
         "comment": "http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features",
         "support_level": "experimental"
       },
+      "onvisibilitychange": {
+        "support_level": "untriaged"
+      },
       "onvolumechange": {
         "support_level": "untriaged"
       },
@@ -3588,9 +4952,18 @@
       "querySelectorAll": {},
       "readyState": {},
       "referrer": {},
+      "registerElement": {
+        "support_level": "untriaged"
+      },
+      "registerElement2": {
+        "support_level": "untriaged"
+      },
       "rootElement": {
         "support_level": "untriaged"
       },
+      "rootScroller": {
+        "support_level": "untriaged"
+      },
       "scrollingElement": {
         "support_level": "untriaged"
       },
@@ -3712,6 +5085,38 @@
     },
     "support_level": "stable"
   },
+  "DocumentOrShadowRoot": {
+    "members": {
+      "activeElement": {
+        "support_level": "untriaged"
+      },
+      "elementFromPoint": {
+        "support_level": "untriaged"
+      },
+      "elementsFromPoint": {
+        "support_level": "untriaged"
+      },
+      "fullscreenElement": {
+        "support_level": "untriaged"
+      },
+      "getSelection": {
+        "support_level": "untriaged"
+      },
+      "pointerLockElement": {
+        "support_level": "untriaged"
+      },
+      "styleSheets": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "DocumentTimeline": {
+    "members": {
+      "DocumentTimeline": {}
+    },
+    "support_level": "untriaged"
+  },
   "DocumentType": {
     "comment": "http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-412266927",
     "dart_action": "suppress",
@@ -3758,6 +5163,7 @@
   "DynamicsCompressorNode": {
     "comment": "https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#DynamicsCompressorNode",
     "members": {
+      "DynamicsCompressorNode": {},
       "attack": {},
       "knee": {},
       "ratio": {},
@@ -3782,6 +5188,10 @@
     "members": {},
     "support_level": "untriaged"
   },
+  "EXTColorBufferHalfFloat": {
+    "members": {},
+    "support_level": "untriaged"
+  },
   "EXTDisjointTimerQuery": {
     "members": {
       "CURRENT_QUERY_EXT": {
@@ -3832,6 +5242,26 @@
     },
     "support_level": "untriaged"
   },
+  "EXTDisjointTimerQueryWebGL2": {
+    "members": {
+      "GPU_DISJOINT_EXT": {
+        "support_level": "untriaged"
+      },
+      "QUERY_COUNTER_BITS_EXT": {
+        "support_level": "untriaged"
+      },
+      "TIMESTAMP_EXT": {
+        "support_level": "untriaged"
+      },
+      "TIME_ELAPSED_EXT": {
+        "support_level": "untriaged"
+      },
+      "queryCounterEXT": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "EXTFragDepth": {
     "comment": "http://www.khronos.org/registry/webgl/extensions/EXT_frag_depth/",
     "members": {},
@@ -3878,6 +5308,9 @@
         "dart_action": "suppress",
         "support_level": "deprecated"
       },
+      "accessibleNode": {
+        "support_level": "untriaged"
+      },
       "after": {
         "support_level": "untriaged"
       },
@@ -3962,6 +5395,9 @@
       "getAttributeNS": {
         "support_level": "untriaged"
       },
+      "getAttributeNames": {
+        "support_level": "untriaged"
+      },
       "getAttributeNode": {
         "comment": "http://dom.spec.whatwg.org/#dom-element-getattributenode",
         "dart_action": "suppress",
@@ -3989,6 +5425,9 @@
       "hasAttribute": {},
       "hasAttributeNS": {},
       "hasAttributes": {},
+      "hasPointerCapture": {
+        "support_level": "untriaged"
+      },
       "hidden": {
         "comment": "http://www.whatwg.org/specs/web-apps/2007-10-26/multipage/section-elements.html#htmlelement",
         "dart_action": "stable",
@@ -3999,6 +5438,9 @@
         "dart_action": "stable",
         "support_level": "nonstandard"
       },
+      "inert": {
+        "support_level": "untriaged"
+      },
       "innerHTML": {
         "comment": "http://www.whatwg.org/specs/web-apps/2007-10-26/multipage/section-elements.html#htmlelement",
         "dart_action": "stable",
@@ -4009,6 +5451,9 @@
         "dart_action": "suppress",
         "support_level": "untriaged"
       },
+      "inputMode": {
+        "support_level": "untriaged"
+      },
       "insertAdjacentElement": {
         "support_level": "untriaged"
       },
@@ -4216,6 +5661,9 @@
       },
       "querySelector": {},
       "querySelectorAll": {},
+      "releasePointerCapture": {
+        "support_level": "untriaged"
+      },
       "remove": {
         "dart_action": "stable",
         "support_level": "nonstandard"
@@ -4269,6 +5717,9 @@
       "setDistributeScroll": {
         "support_level": "untriaged"
       },
+      "setPointerCapture": {
+        "support_level": "untriaged"
+      },
       "shadowRoot": {
         "comment": "https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#api-shadow-aware-create-shadow-root",
         "support_level": "experimental"
@@ -4282,6 +5733,9 @@
         "support_level": "nonstandard"
       },
       "style": {},
+      "styleMap": {
+        "support_level": "untriaged"
+      },
       "tabIndex": {
         "comment": "http://www.whatwg.org/specs/web-apps/2007-10-26/multipage/section-elements.html#htmlelement",
         "dart_action": "stable",
@@ -4564,6 +6018,12 @@
         "dart_action": "experimental",
         "support_level": "nonstandard"
       },
+      "composed": {
+        "support_level": "untriaged"
+      },
+      "composedPath": {
+        "support_level": "untriaged"
+      },
       "currentTarget": {},
       "deepPath": {
         "support_level": "untriaged"
@@ -4679,12 +6139,38 @@
     },
     "support_level": "untriaged"
   },
+  "External": {
+    "members": {
+      "AddSearchProvider": {
+        "support_level": "untriaged"
+      },
+      "IsSearchProviderInstalled": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "FaceDetector": {
+    "members": {
+      "FaceDetector": {},
+      "detect": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "FederatedCredential": {
     "members": {
       "FederatedCredential": {},
       "federation": {
         "support_level": "untriaged"
       },
+      "iconURL": {
+        "support_level": "untriaged"
+      },
+      "name": {
+        "support_level": "untriaged"
+      },
       "protocol": {
         "support_level": "untriaged"
       },
@@ -4720,6 +6206,9 @@
       "isReload": {
         "support_level": "untriaged"
       },
+      "preloadResponse": {
+        "support_level": "untriaged"
+      },
       "request": {
         "support_level": "untriaged"
       },
@@ -4973,6 +6462,9 @@
   "FontFace": {
     "members": {
       "FontFace": {},
+      "display": {
+        "support_level": "untriaged"
+      },
       "family": {
         "support_level": "untriaged"
       },
@@ -5035,6 +6527,15 @@
       "match": {
         "support_level": "untriaged"
       },
+      "onloading": {
+        "support_level": "untriaged"
+      },
+      "onloadingdone": {
+        "support_level": "untriaged"
+      },
+      "onloadingerror": {
+        "support_level": "untriaged"
+      },
       "removeEventListener": {
         "support_level": "untriaged"
       },
@@ -5053,12 +6554,21 @@
   },
   "FontFaceSetLoadEvent": {
     "members": {
+      "FontFaceSetLoadEvent": {},
       "fontfaces": {
         "support_level": "untriaged"
       }
     },
     "support_level": "untriaged"
   },
+  "FontFaceSource": {
+    "members": {
+      "fonts": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "FontLoader": {
     "comment": "http://www.w3.org/TR/css3-fonts/#document-fontloader",
     "members": {
@@ -5077,6 +6587,21 @@
     },
     "support_level": "experimental"
   },
+  "ForeignFetchEvent": {
+    "members": {
+      "ForeignFetchEvent": {},
+      "origin": {
+        "support_level": "untriaged"
+      },
+      "request": {
+        "support_level": "untriaged"
+      },
+      "respondWith": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "FormData": {
     "comment": "http://www.w3.org/TR/XMLHttpRequest2/#interface-formdata",
     "members": {
@@ -5103,12 +6628,25 @@
     "support_level": "stable"
   },
   "FrameRequestCallback": {
-    "members": {},
+    "members": {
+      "callback": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "FunctionStringCallback": {
+    "members": {
+      "callback": {
+        "support_level": "untriaged"
+      }
+    },
     "support_level": "untriaged"
   },
   "GainNode": {
     "comment": "https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#GainNode",
     "members": {
+      "GainNode": {},
       "gain": {}
     },
     "support_level": "experimental"
@@ -5121,11 +6659,20 @@
       "connected": {
         "support_level": "untriaged"
       },
+      "displayId": {
+        "support_level": "untriaged"
+      },
+      "hand": {
+        "support_level": "untriaged"
+      },
       "id": {},
       "index": {},
       "mapping": {
         "support_level": "untriaged"
       },
+      "pose": {
+        "support_level": "untriaged"
+      },
       "timestamp": {}
     },
     "support_level": "experimental"
@@ -5135,6 +6682,9 @@
       "pressed": {
         "support_level": "untriaged"
       },
+      "touched": {
+        "support_level": "untriaged"
+      },
       "value": {
         "support_level": "untriaged"
       }
@@ -5158,6 +6708,35 @@
     },
     "support_level": "experimental"
   },
+  "GamepadPose": {
+    "members": {
+      "angularAcceleration": {
+        "support_level": "untriaged"
+      },
+      "angularVelocity": {
+        "support_level": "untriaged"
+      },
+      "hasOrientation": {
+        "support_level": "untriaged"
+      },
+      "hasPosition": {
+        "support_level": "untriaged"
+      },
+      "linearAcceleration": {
+        "support_level": "untriaged"
+      },
+      "linearVelocity": {
+        "support_level": "untriaged"
+      },
+      "orientation": {
+        "support_level": "untriaged"
+      },
+      "position": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "Geofencing": {
     "members": {
       "getRegisteredRegions": {
@@ -5215,9 +6794,15 @@
       "onabort": {
         "support_level": "untriaged"
       },
+      "onauxclick": {
+        "support_level": "untriaged"
+      },
       "onblur": {
         "support_level": "untriaged"
       },
+      "oncancel": {
+        "support_level": "untriaged"
+      },
       "oncanplay": {
         "support_level": "untriaged"
       },
@@ -5230,9 +6815,15 @@
       "onclick": {
         "support_level": "untriaged"
       },
+      "onclose": {
+        "support_level": "untriaged"
+      },
       "oncontextmenu": {
         "support_level": "untriaged"
       },
+      "oncuechange": {
+        "support_level": "untriaged"
+      },
       "ondblclick": {
         "support_level": "untriaged"
       },
@@ -5275,6 +6866,9 @@
       "onfocus": {
         "support_level": "untriaged"
       },
+      "ongotpointercapture": {
+        "support_level": "untriaged"
+      },
       "oninput": {
         "support_level": "untriaged"
       },
@@ -5299,6 +6893,12 @@
       "onloadedmetadata": {
         "support_level": "untriaged"
       },
+      "onloadstart": {
+        "support_level": "untriaged"
+      },
+      "onlostpointercapture": {
+        "support_level": "untriaged"
+      },
       "onmousedown": {
         "support_level": "untriaged"
       },
@@ -5332,6 +6932,33 @@
       "onplaying": {
         "support_level": "untriaged"
       },
+      "onpointercancel": {
+        "support_level": "untriaged"
+      },
+      "onpointerdown": {
+        "support_level": "untriaged"
+      },
+      "onpointerenter": {
+        "support_level": "untriaged"
+      },
+      "onpointerleave": {
+        "support_level": "untriaged"
+      },
+      "onpointermove": {
+        "support_level": "untriaged"
+      },
+      "onpointerout": {
+        "support_level": "untriaged"
+      },
+      "onpointerover": {
+        "support_level": "untriaged"
+      },
+      "onpointerup": {
+        "support_level": "untriaged"
+      },
+      "onprogress": {
+        "support_level": "untriaged"
+      },
       "onratechange": {
         "support_level": "untriaged"
       },
@@ -5365,6 +6992,9 @@
       "ontimeupdate": {
         "support_level": "untriaged"
       },
+      "ontoggle": {
+        "support_level": "untriaged"
+      },
       "ontouchcancel": {
         "support_level": "untriaged"
       },
@@ -5382,6 +7012,24 @@
       },
       "onwaiting": {
         "support_level": "untriaged"
+      },
+      "onwheel": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "Gyroscope": {
+    "members": {
+      "Gyroscope": {},
+      "x": {
+        "support_level": "untriaged"
+      },
+      "y": {
+        "support_level": "untriaged"
+      },
+      "z": {
+        "support_level": "untriaged"
       }
     },
     "support_level": "untriaged"
@@ -5454,6 +7102,9 @@
       },
       "port": {},
       "protocol": {},
+      "referrerPolicy": {
+        "support_level": "untriaged"
+      },
       "referrerpolicy": {
         "support_level": "untriaged"
       },
@@ -5503,6 +7154,9 @@
       "HTMLAreaElement": {},
       "alt": {},
       "coords": {},
+      "download": {
+        "support_level": "untriaged"
+      },
       "hash": {},
       "host": {},
       "hostname": {},
@@ -5526,9 +7180,15 @@
       },
       "port": {},
       "protocol": {},
+      "referrerPolicy": {
+        "support_level": "untriaged"
+      },
       "referrerpolicy": {
         "support_level": "untriaged"
       },
+      "rel": {
+        "support_level": "untriaged"
+      },
       "search": {},
       "shape": {},
       "target": {},
@@ -5612,6 +7272,9 @@
       "onmessage": {},
       "onoffline": {},
       "ononline": {},
+      "onorientationchange": {
+        "support_level": "untriaged"
+      },
       "onpopstate": {},
       "onresize": {},
       "onscroll": {
@@ -5681,6 +7344,9 @@
         "support_level": "untriaged"
       },
       "toDataURL": {},
+      "transferControlToOffscreen": {
+        "support_level": "untriaged"
+      },
       "width": {}
     },
     "support_level": "stable"
@@ -5717,6 +7383,14 @@
     },
     "support_level": "stable"
   },
+  "HTMLDataElement": {
+    "members": {
+      "value": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "HTMLDataListElement": {
     "comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/the-button-element.html#the-datalist-element",
     "members": {
@@ -5868,6 +7542,9 @@
       },
       "hidden": {},
       "id": {},
+      "inert": {
+        "support_level": "untriaged"
+      },
       "innerHTML": {},
       "innerText": {
         "dart_action": "suppress",
@@ -5876,6 +7553,9 @@
       "inputMethodContext": {
         "support_level": "untriaged"
       },
+      "inputMode": {
+        "support_level": "untriaged"
+      },
       "insertAdjacentElement": {
         "support_level": "nonstandard"
       },
@@ -5887,6 +7567,9 @@
       },
       "isContentEditable": {},
       "lang": {},
+      "nonce": {
+        "support_level": "untriaged"
+      },
       "onabort": {
         "support_level": "untriaged"
       },
@@ -6058,6 +7741,9 @@
       "onwaiting": {
         "support_level": "untriaged"
       },
+      "onwheel": {
+        "support_level": "untriaged"
+      },
       "outerHTML": {},
       "outerText": {
         "dart_action": "suppress",
@@ -6308,6 +7994,44 @@
     },
     "support_level": "stable"
   },
+  "HTMLHyperlinkElementUtils": {
+    "members": {
+      "hash": {
+        "support_level": "untriaged"
+      },
+      "host": {
+        "support_level": "untriaged"
+      },
+      "hostname": {
+        "support_level": "untriaged"
+      },
+      "href": {
+        "support_level": "untriaged"
+      },
+      "origin": {
+        "support_level": "untriaged"
+      },
+      "password": {
+        "support_level": "untriaged"
+      },
+      "pathname": {
+        "support_level": "untriaged"
+      },
+      "port": {
+        "support_level": "untriaged"
+      },
+      "protocol": {
+        "support_level": "untriaged"
+      },
+      "search": {
+        "support_level": "untriaged"
+      },
+      "username": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "HTMLIFrameElement": {
     "comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#the-iframe-element",
     "members": {
@@ -6317,11 +8041,20 @@
         "dart_action": "suppress",
         "support_level": "deprecated"
       },
+      "allow": {
+        "support_level": "untriaged"
+      },
       "allowFullscreen": {
         "support_level": "untriaged"
       },
+      "allowPaymentRequest": {
+        "support_level": "untriaged"
+      },
       "contentDocument": {},
       "contentWindow": {},
+      "csp": {
+        "support_level": "untriaged"
+      },
       "frameBorder": {
         "comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#HTMLIFrameElement-partial",
         "dart_action": "suppress",
@@ -6352,6 +8085,9 @@
         "support_level": "deprecated"
       },
       "name": {},
+      "referrerPolicy": {
+        "support_level": "untriaged"
+      },
       "referrerpolicy": {
         "support_level": "untriaged"
       },
@@ -6378,6 +8114,9 @@
         "support_level": "deprecated"
       },
       "alt": {},
+      "async": {
+        "support_level": "untriaged"
+      },
       "border": {
         "dart_action": "suppress",
         "support_level": "deprecated"
@@ -6387,6 +8126,9 @@
       "currentSrc": {
         "support_level": "untriaged"
       },
+      "decode": {
+        "support_level": "untriaged"
+      },
       "height": {},
       "hspace": {
         "comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#HTMLImageElement-partial",
@@ -6409,6 +8151,9 @@
       "name": {},
       "naturalHeight": {},
       "naturalWidth": {},
+      "referrerPolicy": {
+        "support_level": "untriaged"
+      },
       "referrerpolicy": {
         "support_level": "untriaged"
       },
@@ -6643,6 +8388,9 @@
         "support_level": "untriaged"
       },
       "media": {},
+      "referrerPolicy": {
+        "support_level": "untriaged"
+      },
       "rel": {},
       "relList": {
         "support_level": "untriaged"
@@ -6652,6 +8400,9 @@
         "dart_action": "suppress",
         "support_level": "deprecated"
       },
+      "scope": {
+        "support_level": "untriaged"
+      },
       "sheet": {},
       "sizes": {},
       "target": {
@@ -6723,6 +8474,9 @@
       },
       "controller": {},
       "controls": {},
+      "controlsList": {
+        "support_level": "untriaged"
+      },
       "crossOrigin": {
         "support_level": "untriaged"
       },
@@ -6756,6 +8510,9 @@
       "oncanplaythrough": {},
       "ondurationchange": {},
       "onemptied": {},
+      "onencrypted": {
+        "support_level": "untriaged"
+      },
       "onended": {},
       "onkeyadded": {
         "support_level": "untriaged"
@@ -6814,6 +8571,9 @@
       "onwaiting": {
         "comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#event-media-loadstart"
       },
+      "onwaitingforkey": {
+        "support_level": "untriaged"
+      },
       "onwebkitkeyadded": {
         "comment": "https://dvcs.w3.org/hg/html-media/raw-file/eme-v0.1/encrypted-media/encrypted-media.html#dom-keyadded",
         "support_level": "experimental"
@@ -6837,6 +8597,9 @@
       "played": {},
       "preload": {},
       "readyState": {},
+      "remote": {
+        "support_level": "untriaged"
+      },
       "seekable": {},
       "seeking": {},
       "session": {
@@ -6852,6 +8615,9 @@
         "support_level": "untriaged"
       },
       "src": {},
+      "srcObject": {
+        "support_level": "untriaged"
+      },
       "startTime": {
         "support_level": "nonstandard"
       },
@@ -7040,6 +8806,9 @@
         "support_level": "deprecated"
       },
       "contentDocument": {},
+      "contentWindow": {
+        "support_level": "untriaged"
+      },
       "data": {},
       "declare": {
         "comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/obsolete.html#HTMLObjectElement-partial",
@@ -7247,6 +9016,9 @@
       "integrity": {
         "support_level": "untriaged"
       },
+      "noModule": {
+        "support_level": "untriaged"
+      },
       "nonce": {
         "comment": "https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html#interaction-with-the-script-src-directive",
         "support_level": "experimental"
@@ -7312,6 +9084,9 @@
   },
   "HTMLSlotElement": {
     "members": {
+      "assignedNodes": {
+        "support_level": "untriaged"
+      },
       "getAssignedNodes": {
         "support_level": "untriaged"
       },
@@ -7666,6 +9441,14 @@
     },
     "support_level": "stable"
   },
+  "HTMLTimeElement": {
+    "members": {
+      "dateTime": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "HTMLTitleElement": {
     "comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#the-title-element",
     "members": {
@@ -7980,6 +9763,9 @@
       "bound_": {
         "support_level": "nonstandard"
       },
+      "includes": {
+        "support_level": "untriaged"
+      },
       "lower": {},
       "lowerBound": {},
       "lowerBound_": {
@@ -8017,6 +9803,9 @@
       "getAllKeys": {
         "support_level": "untriaged"
       },
+      "getKey": {
+        "support_level": "untriaged"
+      },
       "index": {},
       "indexNames": {},
       "keyPath": {},
@@ -8030,6 +9819,54 @@
     },
     "support_level": "stable"
   },
+  "IDBObservation": {
+    "members": {
+      "key": {
+        "support_level": "untriaged"
+      },
+      "type": {
+        "support_level": "untriaged"
+      },
+      "value": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "IDBObserver": {
+    "members": {
+      "IDBObserver": {},
+      "observe": {
+        "support_level": "untriaged"
+      },
+      "unobserve": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "IDBObserverCallback": {
+    "members": {
+      "callback": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "IDBObserverChanges": {
+    "members": {
+      "database": {
+        "support_level": "untriaged"
+      },
+      "records": {
+        "support_level": "untriaged"
+      },
+      "transaction": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "IDBOpenDBRequest": {
     "comment": "http://www.w3.org/TR/IndexedDB/#idl-def-IDBOpenDBRequest",
     "dart_action": "unstable",
@@ -8107,6 +9944,7 @@
   },
   "IIRFilterNode": {
     "members": {
+      "IIRFilterNode": {},
       "getFrequencyResponse": {
         "support_level": "untriaged"
       }
@@ -8125,7 +9963,11 @@
     "support_level": "untriaged"
   },
   "IdleRequestCallback": {
-    "members": {},
+    "members": {
+      "callback": {
+        "support_level": "untriaged"
+      }
+    },
     "support_level": "untriaged"
   },
   "ImageBitmap": {
@@ -8159,17 +10001,50 @@
       "canvas": {
         "support_level": "untriaged"
       },
+      "transferFromImageBitmap": {
+        "support_level": "untriaged"
+      },
       "transferImageBitmap": {
         "support_level": "untriaged"
       }
     },
     "support_level": "untriaged"
   },
+  "ImageCapture": {
+    "members": {
+      "ImageCapture": {},
+      "getPhotoCapabilities": {
+        "support_level": "untriaged"
+      },
+      "getPhotoSettings": {
+        "support_level": "untriaged"
+      },
+      "grabFrame": {
+        "support_level": "untriaged"
+      },
+      "setOptions": {
+        "support_level": "untriaged"
+      },
+      "takePhoto": {
+        "support_level": "untriaged"
+      },
+      "track": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "ImageData": {
     "comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#imagedata",
     "members": {
       "ImageData": {},
       "data": {},
+      "dataUnion": {
+        "support_level": "untriaged"
+      },
+      "getColorSettings": {
+        "support_level": "untriaged"
+      },
       "height": {},
       "width": {}
     },
@@ -8241,6 +10116,9 @@
   "InstallEvent": {
     "members": {
       "InstallEvent": {},
+      "registerForeignFetch": {
+        "support_level": "untriaged"
+      },
       "registerForeignFetchScopes": {
         "support_level": "untriaged"
       },
@@ -8293,6 +10171,7 @@
   },
   "IntersectionObserver": {
     "members": {
+      "IntersectionObserver": {},
       "disconnect": {
         "support_level": "untriaged"
       },
@@ -8317,14 +10196,28 @@
     },
     "support_level": "untriaged"
   },
+  "IntersectionObserverCallback": {
+    "members": {
+      "callback": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "IntersectionObserverEntry": {
     "members": {
       "boundingClientRect": {
         "support_level": "untriaged"
       },
+      "intersectionRatio": {
+        "support_level": "untriaged"
+      },
       "intersectionRect": {
         "support_level": "untriaged"
       },
+      "isIntersecting": {
+        "support_level": "untriaged"
+      },
       "rootBounds": {
         "support_level": "untriaged"
       },
@@ -8337,6 +10230,20 @@
     },
     "support_level": "untriaged"
   },
+  "InterventionReport": {
+    "members": {
+      "lineNumber": {
+        "support_level": "untriaged"
+      },
+      "message": {
+        "support_level": "untriaged"
+      },
+      "sourceFile": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "Iterator": {
     "members": {
       "next": {
@@ -8413,6 +10320,9 @@
         "support_level": "untriaged"
       },
       "initKeyboardEvent": {},
+      "isComposing": {
+        "support_level": "untriaged"
+      },
       "key": {
         "support_level": "untriaged"
       },
@@ -8447,6 +10357,12 @@
     },
     "support_level": "untriaged"
   },
+  "KeyframeEffectReadOnly": {
+    "members": {
+      "KeyframeEffectReadOnly": {}
+    },
+    "support_level": "untriaged"
+  },
   "KeywordValue": {
     "members": {
       "KeywordValue": {},
@@ -8482,6 +10398,12 @@
     },
     "support_level": "untriaged"
   },
+  "LinearAccelerationSensor": {
+    "members": {
+      "LinearAccelerationSensor": {}
+    },
+    "support_level": "untriaged"
+  },
   "LocalCredential": {
     "members": {
       "LocalCredential": {},
@@ -8538,6 +10460,9 @@
         "comment": "http://url.spec.whatwg.org/#urlutils"
       },
       "toString": {},
+      "trustedHref": {
+        "support_level": "untriaged"
+      },
       "valueOf": {
         "dart_action": "experimental",
         "support_level": "nonstandard"
@@ -8553,6 +10478,9 @@
       "inputs": {},
       "onconnect": {},
       "ondisconnect": {},
+      "onstatechange": {
+        "support_level": "untriaged"
+      },
       "outputs": {},
       "removeEventListener": {},
       "sysexEnabled": {
@@ -8666,6 +10594,9 @@
       "manufacturer": {},
       "name": {},
       "ondisconnect": {},
+      "onstatechange": {
+        "support_level": "untriaged"
+      },
       "open": {
         "support_level": "untriaged"
       },
@@ -8682,6 +10613,21 @@
     "members": {},
     "support_level": "untriaged"
   },
+  "Magnetometer": {
+    "members": {
+      "Magnetometer": {},
+      "x": {
+        "support_level": "untriaged"
+      },
+      "y": {
+        "support_level": "untriaged"
+      },
+      "z": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "Matrix": {
     "members": {
       "Matrix": {},
@@ -8754,6 +10700,31 @@
     },
     "support_level": "untriaged"
   },
+  "MediaCapabilities": {
+    "members": {
+      "decodingInfo": {
+        "support_level": "untriaged"
+      },
+      "encodingInfo": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "MediaCapabilitiesInfo": {
+    "members": {
+      "powerEfficient": {
+        "support_level": "untriaged"
+      },
+      "smooth": {
+        "support_level": "untriaged"
+      },
+      "supported": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "MediaController": {
     "comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#mediacontroller",
     "members": {
@@ -8804,8 +10775,14 @@
       "enumerateDevices": {
         "support_level": "untriaged"
       },
+      "getSupportedConstraints": {
+        "support_level": "untriaged"
+      },
       "getUserMedia": {
         "support_level": "untriaged"
+      },
+      "ondevicechange": {
+        "support_level": "untriaged"
       }
     },
     "support_level": "untriaged"
@@ -8813,6 +10790,7 @@
   "MediaElementAudioSourceNode": {
     "comment": "https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#MediaElementAudioSourceNode",
     "members": {
+      "MediaElementAudioSourceNode": {},
       "addEventListener": {
         "support_level": "untriaged"
       },
@@ -8876,7 +10854,10 @@
       },
       "MEDIA_ERR_NETWORK": {},
       "MEDIA_ERR_SRC_NOT_SUPPORTED": {},
-      "code": {}
+      "code": {},
+      "message": {
+        "support_level": "untriaged"
+      }
     },
     "support_level": "stable"
   },
@@ -8964,6 +10945,12 @@
       "onkeymessage": {
         "support_level": "untriaged"
       },
+      "onkeystatuseschange": {
+        "support_level": "untriaged"
+      },
+      "onmessage": {
+        "support_level": "untriaged"
+      },
       "onwebkitkeyadded": {},
       "onwebkitkeyerror": {},
       "onwebkitkeymessage": {},
@@ -8981,6 +10968,12 @@
   },
   "MediaKeyStatusMap": {
     "members": {
+      "get": {
+        "support_level": "untriaged"
+      },
+      "has": {
+        "support_level": "untriaged"
+      },
       "size": {
         "support_level": "untriaged"
       }
@@ -9009,6 +11002,9 @@
         "support_level": "untriaged"
       },
       "createSession": {},
+      "getStatusForPolicy": {
+        "support_level": "untriaged"
+      },
       "isTypeSupported": {
         "support_level": "untriaged"
       },
@@ -9019,6 +11015,15 @@
     },
     "support_level": "experimental"
   },
+  "MediaKeysPolicy": {
+    "members": {
+      "MediaKeysPolicy": {},
+      "minHdcpVersion": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "MediaList": {
     "comment": "http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule",
     "dart_action": "unstable",
@@ -9040,6 +11045,9 @@
       "artist": {
         "support_level": "untriaged"
       },
+      "artwork": {
+        "support_level": "untriaged"
+      },
       "title": {
         "support_level": "untriaged"
       }
@@ -9095,12 +11103,24 @@
       "mimeType": {
         "support_level": "untriaged"
       },
+      "ondataavailable": {
+        "support_level": "untriaged"
+      },
       "onerror": {
         "support_level": "untriaged"
       },
       "onpause": {
         "support_level": "untriaged"
       },
+      "onresume": {
+        "support_level": "untriaged"
+      },
+      "onstart": {
+        "support_level": "untriaged"
+      },
+      "onstop": {
+        "support_level": "untriaged"
+      },
       "pause": {
         "support_level": "untriaged"
       },
@@ -9139,6 +11159,34 @@
       },
       "metadata": {
         "support_level": "untriaged"
+      },
+      "playbackState": {
+        "support_level": "untriaged"
+      },
+      "setActionHandler": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "MediaSessionActionHandler": {
+    "members": {
+      "callback": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "MediaSettingsRange": {
+    "members": {
+      "max": {
+        "support_level": "untriaged"
+      },
+      "min": {
+        "support_level": "untriaged"
+      },
+      "step": {
+        "support_level": "untriaged"
       }
     },
     "support_level": "untriaged"
@@ -9150,13 +11198,28 @@
       "activeSourceBuffers": {},
       "addEventListener": {},
       "addSourceBuffer": {},
+      "clearLiveSeekableRange": {
+        "support_level": "untriaged"
+      },
       "dispatchEvent": {},
       "duration": {},
       "endOfStream": {},
       "isTypeSupported": {},
+      "onsourceclose": {
+        "support_level": "untriaged"
+      },
+      "onsourceended": {
+        "support_level": "untriaged"
+      },
+      "onsourceopen": {
+        "support_level": "untriaged"
+      },
       "readyState": {},
       "removeEventListener": {},
       "removeSourceBuffer": {},
+      "setLiveSeekableRange": {
+        "support_level": "untriaged"
+      },
       "sourceBuffers": {}
     },
     "support_level": "experimental"
@@ -9185,8 +11248,14 @@
       "label": {
         "support_level": "nonstandard"
       },
+      "onactive": {
+        "support_level": "untriaged"
+      },
       "onaddtrack": {},
       "onended": {},
+      "oninactive": {
+        "support_level": "untriaged"
+      },
       "onremovetrack": {},
       "removeEventListener": {},
       "removeTrack": {},
@@ -9197,6 +11266,7 @@
   "MediaStreamAudioDestinationNode": {
     "comment": "https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#MediaStreamAudioDestinationNode",
     "members": {
+      "MediaStreamAudioDestinationNode": {},
       "stream": {}
     },
     "support_level": "experimental"
@@ -9204,6 +11274,7 @@
   "MediaStreamAudioSourceNode": {
     "comment": "https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#MediaStreamAudioSourceNode",
     "members": {
+      "MediaStreamAudioSourceNode": {},
       "addEventListener": {
         "support_level": "untriaged"
       },
@@ -9253,11 +11324,26 @@
     "comment": "http://dev.w3.org/2011/webrtc/editor/getusermedia.html#mediastreamtrack",
     "members": {
       "addEventListener": {},
+      "applyConstraints": {
+        "support_level": "untriaged"
+      },
       "clone": {
         "support_level": "untriaged"
       },
+      "contentHint": {
+        "support_level": "untriaged"
+      },
       "dispatchEvent": {},
       "enabled": {},
+      "getCapabilities": {
+        "support_level": "untriaged"
+      },
+      "getConstraints": {
+        "support_level": "untriaged"
+      },
+      "getSettings": {
+        "support_level": "untriaged"
+      },
       "getSources": {
         "support_level": "untriaged"
       },
@@ -9284,6 +11370,7 @@
   "MediaStreamTrackEvent": {
     "comment": "http://dev.w3.org/2011/webrtc/editor/getusermedia.html",
     "members": {
+      "MediaStreamTrackEvent": {},
       "track": {}
     },
     "support_level": "experimental"
@@ -9301,6 +11388,10 @@
     },
     "support_level": "nonstandard"
   },
+  "MessageCallback": {
+    "members": {},
+    "support_level": "untriaged"
+  },
   "MessageChannel": {
     "comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/web-messaging.html#message-channels",
     "dart_action": "unstable",
@@ -9343,6 +11434,9 @@
       "close": {},
       "dispatchEvent": {},
       "onmessage": {},
+      "onmessageerror": {
+        "support_level": "untriaged"
+      },
       "postMessage": {},
       "removeEventListener": {},
       "start": {}
@@ -9383,6 +11477,152 @@
     },
     "support_level": "nonstandard"
   },
+  "Mojo": {
+    "members": {
+      "RESULT_ABORTED": {
+        "support_level": "untriaged"
+      },
+      "RESULT_ALREADY_EXISTS": {
+        "support_level": "untriaged"
+      },
+      "RESULT_BUSY": {
+        "support_level": "untriaged"
+      },
+      "RESULT_CANCELLED": {
+        "support_level": "untriaged"
+      },
+      "RESULT_DATA_LOSS": {
+        "support_level": "untriaged"
+      },
+      "RESULT_DEADLINE_EXCEEDED": {
+        "support_level": "untriaged"
+      },
+      "RESULT_FAILED_PRECONDITION": {
+        "support_level": "untriaged"
+      },
+      "RESULT_INTERNAL": {
+        "support_level": "untriaged"
+      },
+      "RESULT_INVALID_ARGUMENT": {
+        "support_level": "untriaged"
+      },
+      "RESULT_NOT_FOUND": {
+        "support_level": "untriaged"
+      },
+      "RESULT_OK": {
+        "support_level": "untriaged"
+      },
+      "RESULT_OUT_OF_RANGE": {
+        "support_level": "untriaged"
+      },
+      "RESULT_PERMISSION_DENIED": {
+        "support_level": "untriaged"
+      },
+      "RESULT_RESOURCE_EXHAUSTED": {
+        "support_level": "untriaged"
+      },
+      "RESULT_SHOULD_WAIT": {
+        "support_level": "untriaged"
+      },
+      "RESULT_UNAVAILABLE": {
+        "support_level": "untriaged"
+      },
+      "RESULT_UNIMPLEMENTED": {
+        "support_level": "untriaged"
+      },
+      "RESULT_UNKNOWN": {
+        "support_level": "untriaged"
+      },
+      "bindInterface": {
+        "support_level": "untriaged"
+      },
+      "createDataPipe": {
+        "support_level": "untriaged"
+      },
+      "createMessagePipe": {
+        "support_level": "untriaged"
+      },
+      "createSharedBuffer": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "MojoHandle": {
+    "members": {
+      "close": {
+        "support_level": "untriaged"
+      },
+      "discardData": {
+        "support_level": "untriaged"
+      },
+      "duplicateBufferHandle": {
+        "support_level": "untriaged"
+      },
+      "mapBuffer": {
+        "support_level": "untriaged"
+      },
+      "queryData": {
+        "support_level": "untriaged"
+      },
+      "readData": {
+        "support_level": "untriaged"
+      },
+      "readMessage": {
+        "support_level": "untriaged"
+      },
+      "watch": {
+        "support_level": "untriaged"
+      },
+      "writeData": {
+        "support_level": "untriaged"
+      },
+      "writeMessage": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "MojoInterfaceInterceptor": {
+    "members": {
+      "MojoInterfaceInterceptor": {},
+      "oninterfacerequest": {
+        "support_level": "untriaged"
+      },
+      "start": {
+        "support_level": "untriaged"
+      },
+      "stop": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "MojoInterfaceRequestEvent": {
+    "members": {
+      "MojoInterfaceRequestEvent": {},
+      "handle": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "MojoWatchCallback": {
+    "members": {
+      "callback": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "MojoWatcher": {
+    "members": {
+      "cancel": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "MouseEvent": {
     "comment": "http://www.w3.org/TR/DOM-Level-3-Events/#events-mouseevents",
     "members": {
@@ -9545,6 +11785,20 @@
     },
     "support_level": "deprecated"
   },
+  "NavigationPreloadManager": {
+    "members": {
+      "disable": {
+        "support_level": "untriaged"
+      },
+      "enable": {
+        "support_level": "untriaged"
+      },
+      "getState": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "Navigator": {
     "comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#navigator",
     "members": {
@@ -9560,6 +11814,15 @@
       "bluetooth": {
         "support_level": "untriaged"
       },
+      "budget": {
+        "support_level": "untriaged"
+      },
+      "cancelKeyboardLock": {
+        "support_level": "untriaged"
+      },
+      "clipboard": {
+        "support_level": "untriaged"
+      },
       "connection": {
         "support_level": "untriaged"
       },
@@ -9574,6 +11837,9 @@
       "dartEnabled": {
         "support_level": "untriaged"
       },
+      "deviceMemory": {
+        "support_level": "untriaged"
+      },
       "doNotTrack": {
         "comment": "http://www.w3.org/2011/tracking-protection/drafts/tracking-dnt.html#js-dom",
         "dart_action": "experimental",
@@ -9593,6 +11859,9 @@
       "getGamepads": {
         "support_level": "untriaged"
       },
+      "getInstalledRelatedApps": {
+        "support_level": "untriaged"
+      },
       "getMediaDevices": {
         "support_level": "untriaged"
       },
@@ -9600,9 +11869,15 @@
         "comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#navigatorstorageutils",
         "support_level": "experimental"
       },
+      "getUserMedia": {
+        "support_level": "untriaged"
+      },
       "getVRDevices": {
         "support_level": "untriaged"
       },
+      "getVRDisplays": {
+        "support_level": "untriaged"
+      },
       "hardwareConcurrency": {
         "support_level": "untriaged"
       },
@@ -9622,9 +11897,15 @@
       "maxTouchPoints": {
         "support_level": "untriaged"
       },
+      "mediaCapabilities": {
+        "support_level": "untriaged"
+      },
       "mediaDevices": {
         "support_level": "untriaged"
       },
+      "mediaSession": {
+        "support_level": "untriaged"
+      },
       "mimeTypes": {
         "dart_action": "experimental",
         "support_level": "nonstandard"
@@ -9665,6 +11946,9 @@
         "comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#navigatorcontentutils",
         "dart_action": "unstable"
       },
+      "requestKeyboardLock": {
+        "support_level": "untriaged"
+      },
       "requestMIDIAccess": {
         "support_level": "untriaged"
       },
@@ -9680,6 +11964,9 @@
       "services": {
         "support_level": "untriaged"
       },
+      "share": {
+        "support_level": "untriaged"
+      },
       "storage": {
         "support_level": "untriaged"
       },
@@ -9703,6 +11990,12 @@
         "dart_action": "unstable",
         "support_level": "nonstandard"
       },
+      "vr": {
+        "support_level": "untriaged"
+      },
+      "webdriver": {
+        "support_level": "untriaged"
+      },
       "webkitBattery": {
         "comment": "https://dvcs.w3.org/hg/dap/raw-file/tip/battery/Overview.html",
         "support_level": "experimental"
@@ -9726,6 +12019,14 @@
     },
     "support_level": "stable"
   },
+  "NavigatorAutomationInformation": {
+    "members": {
+      "webdriver": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "NavigatorCPU": {
     "members": {
       "hardwareConcurrency": {
@@ -9734,6 +12035,22 @@
     },
     "support_level": "untriaged"
   },
+  "NavigatorConcurrentHardware": {
+    "members": {
+      "hardwareConcurrency": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "NavigatorCookies": {
+    "members": {
+      "cookieEnabled": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "NavigatorID": {
     "members": {
       "appCodeName": {
@@ -9823,12 +12140,24 @@
   },
   "NetworkInformation": {
     "members": {
+      "downlink": {
+        "support_level": "untriaged"
+      },
       "downlinkMax": {
         "support_level": "untriaged"
       },
+      "effectiveType": {
+        "support_level": "untriaged"
+      },
       "onchange": {
         "support_level": "untriaged"
       },
+      "ontypechange": {
+        "support_level": "untriaged"
+      },
+      "rtt": {
+        "support_level": "untriaged"
+      },
       "type": {
         "support_level": "untriaged"
       }
@@ -9865,8 +12194,14 @@
       "contains": {},
       "dispatchEvent": {},
       "firstChild": {},
+      "getRootNode": {
+        "support_level": "untriaged"
+      },
       "hasChildNodes": {},
       "insertBefore": {},
+      "isConnected": {
+        "support_level": "untriaged"
+      },
       "isDefaultNamespace": {},
       "isEqualNode": {},
       "isSameNode": {
@@ -10001,6 +12336,14 @@
     },
     "support_level": "untriaged"
   },
+  "NoncedElement": {
+    "members": {
+      "nonce": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "Notation": {
     "comment": "http://dom.spec.whatwg.org/#notation",
     "dart_action": "suppress",
@@ -10019,6 +12362,9 @@
         "support_level": "untriaged"
       },
       "addEventListener": {},
+      "badge": {
+        "support_level": "untriaged"
+      },
       "body": {
         "support_level": "untriaged"
       },
@@ -10038,6 +12384,9 @@
       "icon": {
         "support_level": "untriaged"
       },
+      "image": {
+        "support_level": "untriaged"
+      },
       "lang": {
         "support_level": "untriaged"
       },
@@ -10096,6 +12445,9 @@
       },
       "notification": {
         "support_level": "untriaged"
+      },
+      "reply": {
+        "support_level": "untriaged"
       }
     },
     "support_level": "untriaged"
@@ -10169,6 +12521,7 @@
   "OfflineAudioCompletionEvent": {
     "comment": "https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#OfflineAudioCompletionEvent-section",
     "members": {
+      "OfflineAudioCompletionEvent": {},
       "renderedBuffer": {}
     },
     "support_level": "experimental"
@@ -10252,9 +12605,15 @@
       "dispatchEvent": {
         "support_level": "untriaged"
       },
+      "length": {
+        "support_level": "untriaged"
+      },
       "listener": {
         "support_level": "untriaged"
       },
+      "oncomplete": {
+        "support_level": "untriaged"
+      },
       "removeEventListener": {
         "support_level": "untriaged"
       },
@@ -10279,15 +12638,220 @@
   "OffscreenCanvas": {
     "members": {
       "OffscreenCanvas": {},
+      "convertToBlob": {
+        "support_level": "untriaged"
+      },
+      "getContext": {
+        "support_level": "untriaged"
+      },
       "height": {
         "support_level": "untriaged"
       },
+      "transferToImageBitmap": {
+        "support_level": "untriaged"
+      },
       "width": {
         "support_level": "untriaged"
       }
     },
     "support_level": "untriaged"
   },
+  "OffscreenCanvasRenderingContext2D": {
+    "members": {
+      "arc": {
+        "support_level": "untriaged"
+      },
+      "arcTo": {
+        "support_level": "untriaged"
+      },
+      "beginPath": {
+        "support_level": "untriaged"
+      },
+      "bezierCurveTo": {
+        "support_level": "untriaged"
+      },
+      "canvas": {
+        "support_level": "untriaged"
+      },
+      "clearRect": {
+        "support_level": "untriaged"
+      },
+      "clip": {
+        "support_level": "untriaged"
+      },
+      "closePath": {
+        "support_level": "untriaged"
+      },
+      "commit": {
+        "support_level": "untriaged"
+      },
+      "createImageData": {
+        "support_level": "untriaged"
+      },
+      "createLinearGradient": {
+        "support_level": "untriaged"
+      },
+      "createPattern": {
+        "support_level": "untriaged"
+      },
+      "createRadialGradient": {
+        "support_level": "untriaged"
+      },
+      "direction": {
+        "support_level": "untriaged"
+      },
+      "drawImage": {
+        "support_level": "untriaged"
+      },
+      "ellipse": {
+        "support_level": "untriaged"
+      },
+      "fill": {
+        "support_level": "untriaged"
+      },
+      "fillRect": {
+        "support_level": "untriaged"
+      },
+      "fillStyle": {
+        "support_level": "untriaged"
+      },
+      "fillText": {
+        "support_level": "untriaged"
+      },
+      "filter": {
+        "support_level": "untriaged"
+      },
+      "font": {
+        "support_level": "untriaged"
+      },
+      "getImageData": {
+        "support_level": "untriaged"
+      },
+      "getLineDash": {
+        "support_level": "untriaged"
+      },
+      "globalAlpha": {
+        "support_level": "untriaged"
+      },
+      "globalCompositeOperation": {
+        "support_level": "untriaged"
+      },
+      "imageSmoothingEnabled": {
+        "support_level": "untriaged"
+      },
+      "imageSmoothingQuality": {
+        "support_level": "untriaged"
+      },
+      "isPointInPath": {
+        "support_level": "untriaged"
+      },
+      "isPointInStroke": {
+        "support_level": "untriaged"
+      },
+      "lineCap": {
+        "support_level": "untriaged"
+      },
+      "lineDashOffset": {
+        "support_level": "untriaged"
+      },
+      "lineJoin": {
+        "support_level": "untriaged"
+      },
+      "lineTo": {
+        "support_level": "untriaged"
+      },
+      "lineWidth": {
+        "support_level": "untriaged"
+      },
+      "measureText": {
+        "support_level": "untriaged"
+      },
+      "miterLimit": {
+        "support_level": "untriaged"
+      },
+      "moveTo": {
+        "support_level": "untriaged"
+      },
+      "putImageData": {
+        "support_level": "untriaged"
+      },
+      "quadraticCurveTo": {
+        "support_level": "untriaged"
+      },
+      "rect": {
+        "support_level": "untriaged"
+      },
+      "resetTransform": {
+        "support_level": "untriaged"
+      },
+      "restore": {
+        "support_level": "untriaged"
+      },
+      "rotate": {
+        "support_level": "untriaged"
+      },
+      "save": {
+        "support_level": "untriaged"
+      },
+      "scale": {
+        "support_level": "untriaged"
+      },
+      "setLineDash": {
+        "support_level": "untriaged"
+      },
+      "setTransform": {
+        "support_level": "untriaged"
+      },
+      "shadowBlur": {
+        "support_level": "untriaged"
+      },
+      "shadowColor": {
+        "support_level": "untriaged"
+      },
+      "shadowOffsetX": {
+        "support_level": "untriaged"
+      },
+      "shadowOffsetY": {
+        "support_level": "untriaged"
+      },
+      "stroke": {
+        "support_level": "untriaged"
+      },
+      "strokeRect": {
+        "support_level": "untriaged"
+      },
+      "strokeStyle": {
+        "support_level": "untriaged"
+      },
+      "strokeText": {
+        "support_level": "untriaged"
+      },
+      "textAlign": {
+        "support_level": "untriaged"
+      },
+      "textBaseline": {
+        "support_level": "untriaged"
+      },
+      "transform": {
+        "support_level": "untriaged"
+      },
+      "translate": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "OrientationSensor": {
+    "members": {
+      "populateMatrix": {
+        "support_level": "untriaged"
+      },
+      "quaternion": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "OscillatorNode": {
     "comment": "https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#dfn-OscillatorNode",
     "members": {
@@ -10297,6 +12861,7 @@
         "support_level": "deprecated"
       },
       "FINISHED_STATE": {},
+      "OscillatorNode": {},
       "PLAYING_STATE": {},
       "SAWTOOTH": {
         "comment": "https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AlternateNames",
@@ -10371,6 +12936,21 @@
     },
     "support_level": "experimental"
   },
+  "OverconstrainedError": {
+    "members": {
+      "OverconstrainedError": {},
+      "constraint": {
+        "support_level": "untriaged"
+      },
+      "message": {
+        "support_level": "untriaged"
+      },
+      "name": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "OverflowEvent": {
     "dart_action": "experimental",
     "members": {
@@ -10404,6 +12984,180 @@
     },
     "support_level": "experimental"
   },
+  "PaintRenderingContext2D": {
+    "members": {
+      "arc": {
+        "support_level": "untriaged"
+      },
+      "arcTo": {
+        "support_level": "untriaged"
+      },
+      "beginPath": {
+        "support_level": "untriaged"
+      },
+      "bezierCurveTo": {
+        "support_level": "untriaged"
+      },
+      "clearRect": {
+        "support_level": "untriaged"
+      },
+      "clip": {
+        "support_level": "untriaged"
+      },
+      "closePath": {
+        "support_level": "untriaged"
+      },
+      "createLinearGradient": {
+        "support_level": "untriaged"
+      },
+      "createPattern": {
+        "support_level": "untriaged"
+      },
+      "createRadialGradient": {
+        "support_level": "untriaged"
+      },
+      "currentTransform": {
+        "support_level": "untriaged"
+      },
+      "drawImage": {
+        "support_level": "untriaged"
+      },
+      "ellipse": {
+        "support_level": "untriaged"
+      },
+      "fill": {
+        "support_level": "untriaged"
+      },
+      "fillRect": {
+        "support_level": "untriaged"
+      },
+      "fillStyle": {
+        "support_level": "untriaged"
+      },
+      "filter": {
+        "support_level": "untriaged"
+      },
+      "getLineDash": {
+        "support_level": "untriaged"
+      },
+      "globalAlpha": {
+        "support_level": "untriaged"
+      },
+      "globalCompositeOperation": {
+        "support_level": "untriaged"
+      },
+      "imageSmoothingEnabled": {
+        "support_level": "untriaged"
+      },
+      "imageSmoothingQuality": {
+        "support_level": "untriaged"
+      },
+      "isPointInPath": {
+        "support_level": "untriaged"
+      },
+      "isPointInStroke": {
+        "support_level": "untriaged"
+      },
+      "lineCap": {
+        "support_level": "untriaged"
+      },
+      "lineDashOffset": {
+        "support_level": "untriaged"
+      },
+      "lineJoin": {
+        "support_level": "untriaged"
+      },
+      "lineTo": {
+        "support_level": "untriaged"
+      },
+      "lineWidth": {
+        "support_level": "untriaged"
+      },
+      "miterLimit": {
+        "support_level": "untriaged"
+      },
+      "moveTo": {
+        "support_level": "untriaged"
+      },
+      "quadraticCurveTo": {
+        "support_level": "untriaged"
+      },
+      "rect": {
+        "support_level": "untriaged"
+      },
+      "resetTransform": {
+        "support_level": "untriaged"
+      },
+      "restore": {
+        "support_level": "untriaged"
+      },
+      "rotate": {
+        "support_level": "untriaged"
+      },
+      "save": {
+        "support_level": "untriaged"
+      },
+      "scale": {
+        "support_level": "untriaged"
+      },
+      "setLineDash": {
+        "support_level": "untriaged"
+      },
+      "setTransform": {
+        "support_level": "untriaged"
+      },
+      "shadowBlur": {
+        "support_level": "untriaged"
+      },
+      "shadowColor": {
+        "support_level": "untriaged"
+      },
+      "shadowOffsetX": {
+        "support_level": "untriaged"
+      },
+      "shadowOffsetY": {
+        "support_level": "untriaged"
+      },
+      "stroke": {
+        "support_level": "untriaged"
+      },
+      "strokeRect": {
+        "support_level": "untriaged"
+      },
+      "strokeStyle": {
+        "support_level": "untriaged"
+      },
+      "transform": {
+        "support_level": "untriaged"
+      },
+      "translate": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "PaintSize": {
+    "members": {
+      "height": {
+        "support_level": "untriaged"
+      },
+      "width": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "PaintWorkletGlobalScope": {
+    "members": {
+      "devicePixelRatio": {
+        "support_level": "untriaged"
+      },
+      "registerPaint": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "PannerNode": {
     "comment": "https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#PannerNode",
     "members": {
@@ -10432,6 +13186,7 @@
         "dart_action": "suppress",
         "support_level": "deprecated"
       },
+      "PannerNode": {},
       "SOUNDFIELD": {
         "comment": "https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AlternateNames",
         "dart_action": "suppress",
@@ -10442,7 +13197,25 @@
       "coneOuterGain": {},
       "distanceModel": {},
       "maxDistance": {},
+      "orientationX": {
+        "support_level": "untriaged"
+      },
+      "orientationY": {
+        "support_level": "untriaged"
+      },
+      "orientationZ": {
+        "support_level": "untriaged"
+      },
       "panningModel": {},
+      "positionX": {
+        "support_level": "untriaged"
+      },
+      "positionY": {
+        "support_level": "untriaged"
+      },
+      "positionZ": {
+        "support_level": "untriaged"
+      },
       "refDistance": {},
       "rolloffFactor": {},
       "setOrientation": {},
@@ -10483,9 +13256,15 @@
       "formData": {
         "support_level": "untriaged"
       },
+      "iconURL": {
+        "support_level": "untriaged"
+      },
       "idName": {
         "support_level": "untriaged"
       },
+      "name": {
+        "support_level": "untriaged"
+      },
       "password": {
         "support_level": "untriaged"
       },
@@ -10546,6 +13325,185 @@
     },
     "support_level": "untriaged"
   },
+  "PaymentAddress": {
+    "members": {
+      "addressLine": {
+        "support_level": "untriaged"
+      },
+      "city": {
+        "support_level": "untriaged"
+      },
+      "country": {
+        "support_level": "untriaged"
+      },
+      "dependentLocality": {
+        "support_level": "untriaged"
+      },
+      "languageCode": {
+        "support_level": "untriaged"
+      },
+      "organization": {
+        "support_level": "untriaged"
+      },
+      "phone": {
+        "support_level": "untriaged"
+      },
+      "postalCode": {
+        "support_level": "untriaged"
+      },
+      "recipient": {
+        "support_level": "untriaged"
+      },
+      "region": {
+        "support_level": "untriaged"
+      },
+      "sortingCode": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "PaymentInstruments": {
+    "members": {
+      "clear": {
+        "support_level": "untriaged"
+      },
+      "delete": {
+        "support_level": "untriaged"
+      },
+      "get": {
+        "support_level": "untriaged"
+      },
+      "has": {
+        "support_level": "untriaged"
+      },
+      "keys": {
+        "support_level": "untriaged"
+      },
+      "set": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "PaymentManager": {
+    "members": {
+      "instruments": {
+        "support_level": "untriaged"
+      },
+      "userHint": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "PaymentRequest": {
+    "members": {
+      "PaymentRequest": {},
+      "abort": {
+        "support_level": "untriaged"
+      },
+      "canMakePayment": {
+        "support_level": "untriaged"
+      },
+      "id": {
+        "support_level": "untriaged"
+      },
+      "onshippingaddresschange": {
+        "support_level": "untriaged"
+      },
+      "onshippingoptionchange": {
+        "support_level": "untriaged"
+      },
+      "shippingAddress": {
+        "support_level": "untriaged"
+      },
+      "shippingOption": {
+        "support_level": "untriaged"
+      },
+      "shippingType": {
+        "support_level": "untriaged"
+      },
+      "show": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "PaymentRequestEvent": {
+    "members": {
+      "PaymentRequestEvent": {},
+      "instrumentKey": {
+        "support_level": "untriaged"
+      },
+      "methodData": {
+        "support_level": "untriaged"
+      },
+      "modifiers": {
+        "support_level": "untriaged"
+      },
+      "openWindow": {
+        "support_level": "untriaged"
+      },
+      "paymentRequestId": {
+        "support_level": "untriaged"
+      },
+      "paymentRequestOrigin": {
+        "support_level": "untriaged"
+      },
+      "respondWith": {
+        "support_level": "untriaged"
+      },
+      "topLevelOrigin": {
+        "support_level": "untriaged"
+      },
+      "total": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "PaymentRequestUpdateEvent": {
+    "members": {
+      "PaymentRequestUpdateEvent": {},
+      "updateWith": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "PaymentResponse": {
+    "members": {
+      "complete": {
+        "support_level": "untriaged"
+      },
+      "details": {
+        "support_level": "untriaged"
+      },
+      "methodName": {
+        "support_level": "untriaged"
+      },
+      "payerEmail": {
+        "support_level": "untriaged"
+      },
+      "payerName": {
+        "support_level": "untriaged"
+      },
+      "payerPhone": {
+        "support_level": "untriaged"
+      },
+      "requestId": {
+        "support_level": "untriaged"
+      },
+      "shippingAddress": {
+        "support_level": "untriaged"
+      },
+      "shippingOption": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "Performance": {
     "comment": "http://www.w3.org/TR/navigation-timing/#performance",
     "members": {
@@ -10613,6 +13571,9 @@
       "setResourceTimingBufferSize": {
         "support_level": "untriaged"
       },
+      "timeOrigin": {
+        "support_level": "untriaged"
+      },
       "timing": {},
       "webkitClearResourceTimings": {
         "comment": "http://www.w3c-test.org/webperf/specs/ResourceTiming/#extensions-performance-interface",
@@ -10651,6 +13612,14 @@
     },
     "support_level": "experimental"
   },
+  "PerformanceLongTaskTiming": {
+    "members": {
+      "attribution": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "PerformanceMark": {
     "comment": "http://www.w3.org/TR/user-timing/#performancemark",
     "members": {},
@@ -10674,8 +13643,44 @@
     },
     "support_level": "stable"
   },
+  "PerformanceNavigationTiming": {
+    "members": {
+      "domComplete": {
+        "support_level": "untriaged"
+      },
+      "domContentLoadedEventEnd": {
+        "support_level": "untriaged"
+      },
+      "domContentLoadedEventStart": {
+        "support_level": "untriaged"
+      },
+      "domInteractive": {
+        "support_level": "untriaged"
+      },
+      "loadEventEnd": {
+        "support_level": "untriaged"
+      },
+      "loadEventStart": {
+        "support_level": "untriaged"
+      },
+      "redirectCount": {
+        "support_level": "untriaged"
+      },
+      "type": {
+        "support_level": "untriaged"
+      },
+      "unloadEventEnd": {
+        "support_level": "untriaged"
+      },
+      "unloadEventStart": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "PerformanceObserver": {
     "members": {
+      "PerformanceObserver": {},
       "disconnect": {
         "support_level": "untriaged"
       },
@@ -10685,6 +13690,14 @@
     },
     "support_level": "untriaged"
   },
+  "PerformanceObserverCallback": {
+    "members": {
+      "callback": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "PerformanceObserverEntryList": {
     "members": {
       "getEntries": {
@@ -10699,6 +13712,10 @@
     },
     "support_level": "untriaged"
   },
+  "PerformancePaintTiming": {
+    "members": {},
+    "support_level": "untriaged"
+  },
   "PerformanceRenderTiming": {
     "members": {
       "sourceFrame": {
@@ -10712,10 +13729,19 @@
     "members": {
       "connectEnd": {},
       "connectStart": {},
+      "decodedBodySize": {
+        "support_level": "untriaged"
+      },
       "domainLookupEnd": {},
       "domainLookupStart": {},
+      "encodedBodySize": {
+        "support_level": "untriaged"
+      },
       "fetchStart": {},
       "initiatorType": {},
+      "nextHopProtocol": {
+        "support_level": "untriaged"
+      },
       "redirectEnd": {},
       "redirectStart": {},
       "requestStart": {
@@ -10731,12 +13757,32 @@
         "support_level": "nonstandard"
       },
       "secureConnectionStart": {},
+      "serverTiming": {
+        "support_level": "untriaged"
+      },
+      "transferSize": {
+        "support_level": "untriaged"
+      },
       "workerStart": {
         "support_level": "untriaged"
       }
     },
     "support_level": "experimental"
   },
+  "PerformanceServerTiming": {
+    "members": {
+      "description": {
+        "support_level": "untriaged"
+      },
+      "duration": {
+        "support_level": "untriaged"
+      },
+      "name": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "PerformanceTiming": {
     "comment": "http://w3c-test.org/webperf/specs/NavigationTiming/#sec-navigation-timing-interface",
     "dart_action": "unstable",
@@ -10815,7 +13861,9 @@
     "support_level": "untriaged"
   },
   "PeriodicWave": {
-    "members": {},
+    "members": {
+      "PeriodicWave": {}
+    },
     "support_level": "untriaged"
   },
   "PermissionStatus": {
@@ -10858,6 +13906,23 @@
     },
     "support_level": "untriaged"
   },
+  "PhotoCapabilities": {
+    "members": {
+      "fillLightMode": {
+        "support_level": "untriaged"
+      },
+      "imageHeight": {
+        "support_level": "untriaged"
+      },
+      "imageWidth": {
+        "support_level": "untriaged"
+      },
+      "redEyeReduction": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "Player": {
     "members": {
       "cancel": {
@@ -10940,6 +14005,9 @@
   "PointerEvent": {
     "members": {
       "PointerEvent": {},
+      "getCoalescedEvents": {
+        "support_level": "untriaged"
+      },
       "height": {
         "support_level": "untriaged"
       },
@@ -10955,12 +14023,18 @@
       "pressure": {
         "support_level": "untriaged"
       },
+      "tangentialPressure": {
+        "support_level": "untriaged"
+      },
       "tiltX": {
         "support_level": "untriaged"
       },
       "tiltY": {
         "support_level": "untriaged"
       },
+      "twist": {
+        "support_level": "untriaged"
+      },
       "width": {
         "support_level": "untriaged"
       }
@@ -10975,10 +14049,24 @@
     },
     "support_level": "stable"
   },
+  "Position": {
+    "members": {
+      "coords": {
+        "support_level": "untriaged"
+      },
+      "timestamp": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "PositionCallback": {
     "comment": "http://www.w3.org/TR/geolocation-API/#position-callback",
     "dart_action": "unstable",
     "members": {
+      "callback": {
+        "support_level": "untriaged"
+      },
       "handleEvent": {}
     },
     "support_level": "stable"
@@ -11074,9 +14162,18 @@
       "id": {
         "support_level": "untriaged"
       },
+      "onclose": {
+        "support_level": "untriaged"
+      },
+      "onconnect": {
+        "support_level": "untriaged"
+      },
       "onmessage": {
         "support_level": "untriaged"
       },
+      "onterminate": {
+        "support_level": "untriaged"
+      },
       "send": {
         "support_level": "untriaged"
       },
@@ -11085,6 +14182,9 @@
       },
       "terminate": {
         "support_level": "untriaged"
+      },
+      "url": {
+        "support_level": "untriaged"
       }
     },
     "support_level": "untriaged"
@@ -11110,8 +14210,22 @@
     },
     "support_level": "untriaged"
   },
+  "PresentationConnectionList": {
+    "members": {
+      "connections": {
+        "support_level": "untriaged"
+      },
+      "onconnectionavailable": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "PresentationReceiver": {
     "members": {
+      "connectionList": {
+        "support_level": "untriaged"
+      },
       "getConnection": {
         "support_level": "untriaged"
       },
@@ -11127,6 +14241,9 @@
       "getAvailability": {
         "support_level": "untriaged"
       },
+      "onconnectionavailable": {
+        "support_level": "untriaged"
+      },
       "reconnect": {
         "support_level": "untriaged"
       },
@@ -11241,6 +14358,17 @@
     },
     "support_level": "untriaged"
   },
+  "PublicKeyCredential": {
+    "members": {
+      "rawId": {
+        "support_level": "untriaged"
+      },
+      "response": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "PushEvent": {
     "members": {
       "PushEvent": {},
@@ -11263,6 +14391,9 @@
       },
       "subscribe": {
         "support_level": "untriaged"
+      },
+      "supportedContentEncodings": {
+        "support_level": "untriaged"
       }
     },
     "support_level": "untriaged"
@@ -11301,15 +14432,32 @@
       "endpoint": {
         "support_level": "untriaged"
       },
+      "expirationTime": {
+        "support_level": "untriaged"
+      },
       "getKey": {
         "support_level": "untriaged"
       },
+      "options": {
+        "support_level": "untriaged"
+      },
       "unsubscribe": {
         "support_level": "untriaged"
       }
     },
     "support_level": "untriaged"
   },
+  "PushSubscriptionOptions": {
+    "members": {
+      "applicationServerKey": {
+        "support_level": "untriaged"
+      },
+      "userVisibleOnly": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "RGBColor": {
     "comment": "http://dev.w3.org/csswg/cssom/",
     "dart_action": "suppress",
@@ -11324,6 +14472,9 @@
     "members": {
       "expires": {
         "support_level": "untriaged"
+      },
+      "getFingerprints": {
+        "support_level": "untriaged"
       }
     },
     "support_level": "untriaged"
@@ -11376,6 +14527,9 @@
       "negotiated": {
         "support_level": "untriaged"
       },
+      "onbufferedamountlow": {
+        "support_level": "untriaged"
+      },
       "onclose": {},
       "onerror": {},
       "onmessage": {},
@@ -11400,6 +14554,7 @@
   "RTCDataChannelEvent": {
     "comment": "http://dev.w3.org/2011/webrtc/editor/webrtc.html#rtcdatachannelevent",
     "members": {
+      "RTCDataChannelEvent": {},
       "channel": {}
     },
     "support_level": "experimental"
@@ -11428,6 +14583,26 @@
     },
     "support_level": "experimental"
   },
+  "RTCLegacyStatsReport": {
+    "members": {
+      "id": {
+        "support_level": "untriaged"
+      },
+      "names": {
+        "support_level": "untriaged"
+      },
+      "stat": {
+        "support_level": "untriaged"
+      },
+      "timestamp": {
+        "support_level": "untriaged"
+      },
+      "type": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "RTCPeerConnection": {
     "comment": "http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCPeerConnection",
     "members": {
@@ -11435,6 +14610,9 @@
       "addEventListener": {},
       "addIceCandidate": {},
       "addStream": {},
+      "addTrack": {
+        "support_level": "untriaged"
+      },
       "close": {},
       "createAnswer": {},
       "createDTMFSender": {},
@@ -11445,7 +14623,13 @@
         "support_level": "untriaged"
       },
       "getLocalStreams": {},
+      "getReceivers": {
+        "support_level": "untriaged"
+      },
       "getRemoteStreams": {},
+      "getSenders": {
+        "support_level": "untriaged"
+      },
       "getStats": {},
       "getStreamById": {},
       "iceConnectionState": {},
@@ -11455,12 +14639,24 @@
       "ondatachannel": {},
       "onicecandidate": {},
       "oniceconnectionstatechange": {},
+      "onicegatheringstatechange": {
+        "support_level": "untriaged"
+      },
       "onnegotiationneeded": {},
       "onremovestream": {},
       "onsignalingstatechange": {},
+      "ontrack": {
+        "support_level": "untriaged"
+      },
       "remoteDescription": {},
       "removeEventListener": {},
       "removeStream": {},
+      "removeTrack": {
+        "support_level": "untriaged"
+      },
+      "setConfiguration": {
+        "support_level": "untriaged"
+      },
       "setLocalDescription": {},
       "setRemoteDescription": {},
       "signalingState": {},
@@ -11472,6 +14668,45 @@
     "members": {},
     "support_level": "untriaged"
   },
+  "RTCPeerConnectionIceEvent": {
+    "members": {
+      "RTCPeerConnectionIceEvent": {},
+      "candidate": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "RTCRtpContributingSource": {
+    "members": {
+      "source": {
+        "support_level": "untriaged"
+      },
+      "timestamp": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "RTCRtpReceiver": {
+    "members": {
+      "getContributingSources": {
+        "support_level": "untriaged"
+      },
+      "track": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "RTCRtpSender": {
+    "members": {
+      "track": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "RTCSessionDescription": {
     "comment": "http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCSessionDescription",
     "members": {
@@ -11518,6 +14753,21 @@
     },
     "support_level": "experimental"
   },
+  "RTCTrackEvent": {
+    "members": {
+      "RTCTrackEvent": {},
+      "receiver": {
+        "support_level": "untriaged"
+      },
+      "streams": {
+        "support_level": "untriaged"
+      },
+      "track": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "RadioNodeList": {
     "comment": "http://www.whatwg.org/specs/web-apps/current-work/#radionodelist",
     "members": {
@@ -11696,6 +14946,20 @@
     },
     "support_level": "deprecated"
   },
+  "RelatedApplication": {
+    "members": {
+      "id": {
+        "support_level": "untriaged"
+      },
+      "platform": {
+        "support_level": "untriaged"
+      },
+      "url": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "RelatedEvent": {
     "members": {
       "RelatedEvent": {},
@@ -11705,6 +14969,84 @@
     },
     "support_level": "untriaged"
   },
+  "RelativeOrientationSensor": {
+    "members": {
+      "RelativeOrientationSensor": {}
+    },
+    "support_level": "untriaged"
+  },
+  "RemotePlayback": {
+    "members": {
+      "cancelWatchAvailability": {
+        "support_level": "untriaged"
+      },
+      "onconnect": {
+        "support_level": "untriaged"
+      },
+      "onconnecting": {
+        "support_level": "untriaged"
+      },
+      "ondisconnect": {
+        "support_level": "untriaged"
+      },
+      "prompt": {
+        "support_level": "untriaged"
+      },
+      "state": {
+        "support_level": "untriaged"
+      },
+      "watchAvailability": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "RemotePlaybackAvailabilityCallback": {
+    "members": {
+      "callback": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "Report": {
+    "members": {
+      "body": {
+        "support_level": "untriaged"
+      },
+      "type": {
+        "support_level": "untriaged"
+      },
+      "url": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "ReportBody": {
+    "members": {},
+    "support_level": "untriaged"
+  },
+  "ReportingObserver": {
+    "members": {
+      "ReportingObserver": {},
+      "disconnect": {
+        "support_level": "untriaged"
+      },
+      "observe": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "ReportingObserverCallback": {
+    "members": {
+      "callback": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "Request": {
     "members": {
       "Request": {},
@@ -11717,6 +15059,9 @@
       "bodyUsed": {
         "support_level": "untriaged"
       },
+      "cache": {
+        "support_level": "untriaged"
+      },
       "clone": {
         "support_level": "untriaged"
       },
@@ -11747,6 +15092,9 @@
       "referrer": {
         "support_level": "untriaged"
       },
+      "referrerPolicy": {
+        "support_level": "untriaged"
+      },
       "text": {
         "support_level": "untriaged"
       },
@@ -11763,6 +15111,40 @@
     },
     "support_level": "stable"
   },
+  "ResizeObserver": {
+    "members": {
+      "ResizeObserver": {},
+      "disconnect": {
+        "support_level": "untriaged"
+      },
+      "observe": {
+        "support_level": "untriaged"
+      },
+      "unobserve": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "ResizeObserverCallback": {
+    "members": {
+      "callback": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "ResizeObserverEntry": {
+    "members": {
+      "contentRect": {
+        "support_level": "untriaged"
+      },
+      "target": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "ResourceProgressEvent": {
     "comment": "https://chromiumcodereview.appspot.com/14773025/",
     "dart_action": "suppress",
@@ -12209,6 +15591,15 @@
       "hasExtension": {
         "comment": "http://www.w3.org/TR/SVG/types.html#InterfaceSVGTests"
       },
+      "onbegin": {
+        "support_level": "untriaged"
+      },
+      "onend": {
+        "support_level": "untriaged"
+      },
+      "onrepeat": {
+        "support_level": "untriaged"
+      },
       "requiredExtensions": {
         "comment": "http://www.w3.org/TR/SVG/types.html#InterfaceSVGTests"
       },
@@ -12466,6 +15857,9 @@
         "support_level": "untriaged"
       },
       "id": {},
+      "nonce": {
+        "support_level": "untriaged"
+      },
       "onabort": {
         "support_level": "untriaged"
       },
@@ -12637,6 +16031,9 @@
       "onwaiting": {
         "support_level": "untriaged"
       },
+      "onwheel": {
+        "support_level": "untriaged"
+      },
       "ownerSVGElement": {},
       "style": {
         "support_level": "untriaged"
@@ -13659,11 +17056,20 @@
   },
   "SVGGeometryElement": {
     "members": {
+      "getPointAtLength": {
+        "support_level": "untriaged"
+      },
+      "getTotalLength": {
+        "support_level": "untriaged"
+      },
       "isPointInFill": {
         "support_level": "untriaged"
       },
       "isPointInStroke": {
         "support_level": "untriaged"
+      },
+      "pathLength": {
+        "support_level": "untriaged"
       }
     },
     "support_level": "untriaged"
@@ -13763,6 +17169,12 @@
     "dart_action": "unstable",
     "members": {
       "SVGImageElement": {},
+      "async": {
+        "support_level": "untriaged"
+      },
+      "decode": {
+        "support_level": "untriaged"
+      },
       "externalResourcesRequired": {
         "comment": "http://www.w3.org/TR/SVG/types.html#InterfaceSVGExternalResourcesRequired"
       },
@@ -15509,6 +18921,12 @@
       "isEnding": {
         "support_level": "untriaged"
       },
+      "positionX": {
+        "support_level": "untriaged"
+      },
+      "positionY": {
+        "support_level": "untriaged"
+      },
       "shouldPropagate": {
         "support_level": "untriaged"
       },
@@ -15531,6 +18949,21 @@
     "members": {},
     "support_level": "untriaged"
   },
+  "ScrollTimeline": {
+    "members": {
+      "ScrollTimeline": {},
+      "orientation": {
+        "support_level": "untriaged"
+      },
+      "scrollSource": {
+        "support_level": "untriaged"
+      },
+      "timeRange": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "SecurityPolicy": {
     "comment": "https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html#securitypolicy",
     "members": {
@@ -15558,11 +18991,17 @@
       "SecurityPolicyViolationEvent": {},
       "blockedURI": {},
       "columnNumber": {},
+      "disposition": {
+        "support_level": "untriaged"
+      },
       "documentURI": {},
       "effectiveDirective": {},
       "lineNumber": {},
       "originalPolicy": {},
       "referrer": {},
+      "sample": {
+        "support_level": "untriaged"
+      },
       "sourceFile": {},
       "statusCode": {
         "support_level": "untriaged"
@@ -15609,6 +19048,9 @@
       },
       "rangeCount": {},
       "removeAllRanges": {},
+      "removeRange": {
+        "support_level": "untriaged"
+      },
       "selectAllChildren": {},
       "setBaseAndExtent": {
         "support_level": "nonstandard"
@@ -15623,6 +19065,44 @@
     },
     "support_level": "stable"
   },
+  "Sensor": {
+    "members": {
+      "activated": {
+        "support_level": "untriaged"
+      },
+      "hasReading": {
+        "support_level": "untriaged"
+      },
+      "onactivate": {
+        "support_level": "untriaged"
+      },
+      "onerror": {
+        "support_level": "untriaged"
+      },
+      "onreading": {
+        "support_level": "untriaged"
+      },
+      "start": {
+        "support_level": "untriaged"
+      },
+      "stop": {
+        "support_level": "untriaged"
+      },
+      "timestamp": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "SensorErrorEvent": {
+    "members": {
+      "SensorErrorEvent": {},
+      "error": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "ServicePort": {
     "members": {
       "close": {
@@ -15718,6 +19198,9 @@
       "installing": {
         "support_level": "untriaged"
       },
+      "oncontrollerchange": {
+        "support_level": "untriaged"
+      },
       "onmessage": {
         "support_level": "untriaged"
       },
@@ -15753,9 +19236,54 @@
       "nativeCaches": {
         "support_level": "untriaged"
       },
+      "onabortpayment": {
+        "support_level": "untriaged"
+      },
+      "onactivate": {
+        "support_level": "untriaged"
+      },
+      "onbackgroundfetchabort": {
+        "support_level": "untriaged"
+      },
+      "onbackgroundfetchclick": {
+        "support_level": "untriaged"
+      },
+      "onbackgroundfetched": {
+        "support_level": "untriaged"
+      },
+      "onbackgroundfetchfail": {
+        "support_level": "untriaged"
+      },
+      "oncanmakepayment": {
+        "support_level": "untriaged"
+      },
+      "onfetch": {
+        "support_level": "untriaged"
+      },
+      "onforeignfetch": {
+        "support_level": "untriaged"
+      },
+      "oninstall": {
+        "support_level": "untriaged"
+      },
       "onmessage": {
         "support_level": "untriaged"
       },
+      "onnotificationclick": {
+        "support_level": "untriaged"
+      },
+      "onnotificationclose": {
+        "support_level": "untriaged"
+      },
+      "onpaymentrequest": {
+        "support_level": "untriaged"
+      },
+      "onpush": {
+        "support_level": "untriaged"
+      },
+      "onsync": {
+        "support_level": "untriaged"
+      },
       "ports": {
         "support_level": "untriaged"
       },
@@ -15797,6 +19325,9 @@
       "active": {
         "support_level": "untriaged"
       },
+      "backgroundFetch": {
+        "support_level": "untriaged"
+      },
       "geofencing": {
         "support_level": "untriaged"
       },
@@ -15806,6 +19337,15 @@
       "installing": {
         "support_level": "untriaged"
       },
+      "navigationPreload": {
+        "support_level": "untriaged"
+      },
+      "onupdatefound": {
+        "support_level": "untriaged"
+      },
+      "paymentManager": {
+        "support_level": "untriaged"
+      },
       "periodicSync": {
         "support_level": "untriaged"
       },
@@ -15846,6 +19386,9 @@
       "elementsFromPoint": {
         "support_level": "untriaged"
       },
+      "fullscreenElement": {
+        "support_level": "untriaged"
+      },
       "getElementById": {},
       "getElementsByClassName": {},
       "getElementsByTagName": {},
@@ -15855,9 +19398,15 @@
         "support_level": "untriaged"
       },
       "innerHTML": {},
+      "mode": {
+        "support_level": "untriaged"
+      },
       "olderShadowRoot": {
         "support_level": "untriaged"
       },
+      "pointerLockElement": {
+        "support_level": "untriaged"
+      },
       "resetStyleInheritance": {},
       "styleSheets": {
         "support_level": "untriaged"
@@ -15913,6 +19462,9 @@
       "TEMPORARY": {
         "support_level": "untriaged"
       },
+      "close": {
+        "support_level": "untriaged"
+      },
       "name": {
         "support_level": "untriaged"
       },
@@ -15989,6 +19541,9 @@
       "appendWindowStart": {
         "support_level": "untriaged"
       },
+      "audioTracks": {
+        "support_level": "untriaged"
+      },
       "buffered": {},
       "dispatchEvent": {
         "support_level": "untriaged"
@@ -15996,6 +19551,21 @@
       "mode": {
         "support_level": "untriaged"
       },
+      "onabort": {
+        "support_level": "untriaged"
+      },
+      "onerror": {
+        "support_level": "untriaged"
+      },
+      "onupdate": {
+        "support_level": "untriaged"
+      },
+      "onupdateend": {
+        "support_level": "untriaged"
+      },
+      "onupdatestart": {
+        "support_level": "untriaged"
+      },
       "remove": {
         "support_level": "untriaged"
       },
@@ -16008,6 +19578,9 @@
       },
       "updating": {
         "support_level": "untriaged"
+      },
+      "videoTracks": {
+        "support_level": "untriaged"
       }
     },
     "support_level": "experimental"
@@ -16019,6 +19592,12 @@
       "dispatchEvent": {},
       "item": {},
       "length": {},
+      "onaddsourcebuffer": {
+        "support_level": "untriaged"
+      },
+      "onremovesourcebuffer": {
+        "support_level": "untriaged"
+      },
       "removeEventListener": {}
     },
     "support_level": "experimental"
@@ -16174,6 +19753,9 @@
         "support_level": "untriaged"
       },
       "getVoices": {},
+      "onvoiceschanged": {
+        "support_level": "untriaged"
+      },
       "pause": {},
       "paused": {},
       "pending": {},
@@ -16260,8 +19842,29 @@
     },
     "support_level": "untriaged"
   },
+  "StaticRange": {
+    "members": {
+      "collapsed": {
+        "support_level": "untriaged"
+      },
+      "endContainer": {
+        "support_level": "untriaged"
+      },
+      "endOffset": {
+        "support_level": "untriaged"
+      },
+      "startContainer": {
+        "support_level": "untriaged"
+      },
+      "startOffset": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "StereoPannerNode": {
     "members": {
+      "StereoPannerNode": {},
       "pan": {
         "support_level": "untriaged"
       }
@@ -16324,6 +19927,15 @@
   },
   "StorageManager": {
     "members": {
+      "estimate": {
+        "support_level": "untriaged"
+      },
+      "persist": {
+        "support_level": "untriaged"
+      },
+      "persisted": {
+        "support_level": "untriaged"
+      },
       "persistentPermission": {
         "support_level": "untriaged"
       },
@@ -16414,6 +20026,23 @@
     },
     "support_level": "untriaged"
   },
+  "StylePropertyMapReadonly": {
+    "members": {
+      "get": {
+        "support_level": "untriaged"
+      },
+      "getAll": {
+        "support_level": "untriaged"
+      },
+      "getProperties": {
+        "support_level": "untriaged"
+      },
+      "has": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "StyleSheet": {
     "comment": "http://dev.w3.org/csswg/cssom/#the-stylesheet-interface",
     "members": {
@@ -16520,6 +20149,26 @@
     },
     "support_level": "untriaged"
   },
+  "TaskAttributionTiming": {
+    "members": {
+      "containerId": {
+        "support_level": "untriaged"
+      },
+      "containerName": {
+        "support_level": "untriaged"
+      },
+      "containerSrc": {
+        "support_level": "untriaged"
+      },
+      "containerType": {
+        "support_level": "untriaged"
+      },
+      "scriptURL": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "Text": {
     "comment": "http://dom.spec.whatwg.org/#interface-text",
     "members": {
@@ -16562,6 +20211,15 @@
     },
     "support_level": "untriaged"
   },
+  "TextDetector": {
+    "members": {
+      "TextDetector": {},
+      "detect": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "TextEncoder": {
     "members": {
       "TextEncoder": {},
@@ -16734,6 +20392,9 @@
       "onchange": {
         "support_level": "untriaged"
       },
+      "onremovetrack": {
+        "support_level": "untriaged"
+      },
       "removeEventListener": {}
     },
     "support_level": "experimental"
@@ -17006,6 +20667,36 @@
     },
     "support_level": "stable"
   },
+  "TrustedHTML": {
+    "members": {
+      "escape": {
+        "support_level": "untriaged"
+      },
+      "unsafelyCreate": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "TrustedScriptURL": {
+    "members": {
+      "unsafelyCreate": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "TrustedURL": {
+    "members": {
+      "create": {
+        "support_level": "untriaged"
+      },
+      "unsafelyCreate": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "UIEvent": {
     "comment": "http://dev.w3.org/2006/webapi/DOM-Level-3-Events/html/DOM3-Events.html#events-UIEvent",
     "members": {
@@ -17101,6 +20792,9 @@
       "search": {
         "support_level": "untriaged"
       },
+      "searchParams": {
+        "support_level": "untriaged"
+      },
       "toString": {
         "support_level": "untriaged"
       },
@@ -17130,6 +20824,9 @@
       },
       "set": {
         "support_level": "untriaged"
+      },
+      "sort": {
+        "support_level": "untriaged"
       }
     },
     "support_level": "untriaged"
@@ -17387,6 +21084,7 @@
   },
   "USBInTransferResult": {
     "members": {
+      "USBInTransferResult": {},
       "data": {
         "support_level": "untriaged"
       },
@@ -17410,6 +21108,7 @@
   },
   "USBIsochronousInTransferPacket": {
     "members": {
+      "USBIsochronousInTransferPacket": {},
       "data": {
         "support_level": "untriaged"
       },
@@ -17421,6 +21120,7 @@
   },
   "USBIsochronousInTransferResult": {
     "members": {
+      "USBIsochronousInTransferResult": {},
       "data": {
         "support_level": "untriaged"
       },
@@ -17432,6 +21132,7 @@
   },
   "USBIsochronousOutTransferPacket": {
     "members": {
+      "USBIsochronousOutTransferPacket": {},
       "bytesWritten": {
         "support_level": "untriaged"
       },
@@ -17443,6 +21144,7 @@
   },
   "USBIsochronousOutTransferResult": {
     "members": {
+      "USBIsochronousOutTransferResult": {},
       "packets": {
         "support_level": "untriaged"
       }
@@ -17451,6 +21153,7 @@
   },
   "USBOutTransferResult": {
     "members": {
+      "USBOutTransferResult": {},
       "bytesWritten": {
         "support_level": "untriaged"
       },
@@ -17504,6 +21207,12 @@
       "cancel": {
         "support_level": "untriaged"
       },
+      "notifyLockAcquired": {
+        "support_level": "untriaged"
+      },
+      "notifyLockReleased": {
+        "support_level": "untriaged"
+      },
       "pull": {
         "support_level": "untriaged"
       },
@@ -17513,6 +21222,28 @@
     },
     "support_level": "untriaged"
   },
+  "VR": {
+    "members": {
+      "getDevices": {
+        "support_level": "untriaged"
+      },
+      "ondeviceconnect": {
+        "support_level": "untriaged"
+      },
+      "ondevicedisconnect": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "VRCoordinateSystem": {
+    "members": {
+      "getTransformTo": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "VRDevice": {
     "members": {
       "deviceId": {
@@ -17523,6 +21254,103 @@
       },
       "hardwareUnitId": {
         "support_level": "untriaged"
+      },
+      "isExternal": {
+        "support_level": "untriaged"
+      },
+      "requestSession": {
+        "support_level": "untriaged"
+      },
+      "supportsSession": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "VRDeviceEvent": {
+    "members": {
+      "VRDeviceEvent": {},
+      "device": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "VRDisplay": {
+    "members": {
+      "cancelAnimationFrame": {
+        "support_level": "untriaged"
+      },
+      "capabilities": {
+        "support_level": "untriaged"
+      },
+      "depthFar": {
+        "support_level": "untriaged"
+      },
+      "depthNear": {
+        "support_level": "untriaged"
+      },
+      "displayId": {
+        "support_level": "untriaged"
+      },
+      "displayName": {
+        "support_level": "untriaged"
+      },
+      "exitPresent": {
+        "support_level": "untriaged"
+      },
+      "getEyeParameters": {
+        "support_level": "untriaged"
+      },
+      "getFrameData": {
+        "support_level": "untriaged"
+      },
+      "getLayers": {
+        "support_level": "untriaged"
+      },
+      "isPresenting": {
+        "support_level": "untriaged"
+      },
+      "requestAnimationFrame": {
+        "support_level": "untriaged"
+      },
+      "requestPresent": {
+        "support_level": "untriaged"
+      },
+      "stageParameters": {
+        "support_level": "untriaged"
+      },
+      "submitFrame": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "VRDisplayCapabilities": {
+    "members": {
+      "canPresent": {
+        "support_level": "untriaged"
+      },
+      "hasExternalDisplay": {
+        "support_level": "untriaged"
+      },
+      "hasPosition": {
+        "support_level": "untriaged"
+      },
+      "maxLayers": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "VRDisplayEvent": {
+    "members": {
+      "VRDisplayEvent": {},
+      "display": {
+        "support_level": "untriaged"
+      },
+      "reason": {
+        "support_level": "untriaged"
       }
     },
     "support_level": "untriaged"
@@ -17541,11 +21369,20 @@
       "minimumFieldOfView": {
         "support_level": "untriaged"
       },
+      "offset": {
+        "support_level": "untriaged"
+      },
       "recommendedFieldOfView": {
         "support_level": "untriaged"
       },
+      "renderHeight": {
+        "support_level": "untriaged"
+      },
       "renderRect": {
         "support_level": "untriaged"
+      },
+      "renderWidth": {
+        "support_level": "untriaged"
       }
     },
     "support_level": "untriaged"
@@ -17568,6 +21405,61 @@
     },
     "support_level": "untriaged"
   },
+  "VRFrameData": {
+    "members": {
+      "VRFrameData": {},
+      "leftProjectionMatrix": {
+        "support_level": "untriaged"
+      },
+      "leftViewMatrix": {
+        "support_level": "untriaged"
+      },
+      "pose": {
+        "support_level": "untriaged"
+      },
+      "rightProjectionMatrix": {
+        "support_level": "untriaged"
+      },
+      "rightViewMatrix": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "VRFrameOfReference": {
+    "members": {
+      "bounds": {
+        "support_level": "untriaged"
+      },
+      "emulatedHeight": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "VRPose": {
+    "members": {
+      "angularAcceleration": {
+        "support_level": "untriaged"
+      },
+      "angularVelocity": {
+        "support_level": "untriaged"
+      },
+      "linearAcceleration": {
+        "support_level": "untriaged"
+      },
+      "linearVelocity": {
+        "support_level": "untriaged"
+      },
+      "orientation": {
+        "support_level": "untriaged"
+      },
+      "position": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "VRPositionState": {
     "members": {
       "angularAcceleration": {
@@ -17594,6 +21486,83 @@
     },
     "support_level": "untriaged"
   },
+  "VRSession": {
+    "members": {
+      "depthFar": {
+        "support_level": "untriaged"
+      },
+      "depthNear": {
+        "support_level": "untriaged"
+      },
+      "device": {
+        "support_level": "untriaged"
+      },
+      "end": {
+        "support_level": "untriaged"
+      },
+      "exclusive": {
+        "support_level": "untriaged"
+      },
+      "onblur": {
+        "support_level": "untriaged"
+      },
+      "onend": {
+        "support_level": "untriaged"
+      },
+      "onfocus": {
+        "support_level": "untriaged"
+      },
+      "onresetpose": {
+        "support_level": "untriaged"
+      },
+      "requestFrameOfReference": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "VRSessionEvent": {
+    "members": {
+      "VRSessionEvent": {},
+      "session": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "VRStageBounds": {
+    "members": {
+      "geometry": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "VRStageBoundsPoint": {
+    "members": {
+      "x": {
+        "support_level": "untriaged"
+      },
+      "z": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "VRStageParameters": {
+    "members": {
+      "sittingToStandingTransform": {
+        "support_level": "untriaged"
+      },
+      "sizeX": {
+        "support_level": "untriaged"
+      },
+      "sizeZ": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "VTTCue": {
     "members": {
       "VTTCue": {},
@@ -17609,6 +21578,9 @@
       "position": {
         "support_level": "untriaged"
       },
+      "region": {
+        "support_level": "untriaged"
+      },
       "regionId": {
         "support_level": "untriaged"
       },
@@ -17636,6 +21608,9 @@
       "id": {
         "support_level": "untriaged"
       },
+      "lines": {
+        "support_level": "untriaged"
+      },
       "regionAnchorX": {
         "support_level": "untriaged"
       },
@@ -17726,6 +21701,9 @@
       },
       "selected": {
         "support_level": "untriaged"
+      },
+      "sourceBuffer": {
+        "support_level": "untriaged"
       }
     },
     "support_level": "untriaged"
@@ -17742,15 +21720,53 @@
       "length": {
         "support_level": "untriaged"
       },
+      "onaddtrack": {
+        "support_level": "untriaged"
+      },
       "onchange": {
         "support_level": "untriaged"
       },
+      "onremovetrack": {
+        "support_level": "untriaged"
+      },
       "selectedIndex": {
         "support_level": "untriaged"
       }
     },
     "support_level": "untriaged"
   },
+  "VisualViewport": {
+    "members": {
+      "height": {
+        "support_level": "untriaged"
+      },
+      "offsetLeft": {
+        "support_level": "untriaged"
+      },
+      "offsetTop": {
+        "support_level": "untriaged"
+      },
+      "onresize": {
+        "support_level": "untriaged"
+      },
+      "onscroll": {
+        "support_level": "untriaged"
+      },
+      "pageLeft": {
+        "support_level": "untriaged"
+      },
+      "pageTop": {
+        "support_level": "untriaged"
+      },
+      "scale": {
+        "support_level": "untriaged"
+      },
+      "width": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "VoidCallback": {
     "comment": "http://www.w3.org/TR/file-system-api/#the-voidcallback-interface",
     "members": {
@@ -17761,6 +21777,7 @@
   "WaveShaperNode": {
     "comment": "https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#dfn-WaveShaperNode",
     "members": {
+      "WaveShaperNode": {},
       "curve": {},
       "oversample": {}
     },
@@ -18730,6 +22747,9 @@
       "bufferData": {
         "support_level": "untriaged"
       },
+      "bufferData2": {
+        "support_level": "untriaged"
+      },
       "bufferDataTyped": {
         "support_level": "untriaged"
       },
@@ -18739,12 +22759,24 @@
       "bufferSubData": {
         "support_level": "untriaged"
       },
+      "bufferSubData2": {
+        "support_level": "untriaged"
+      },
       "bufferSubDataTyped": {
         "support_level": "untriaged"
       },
       "canvas": {
         "support_level": "untriaged"
       },
+      "canvasElement": {
+        "support_level": "untriaged"
+      },
+      "canvasOffscreen": {
+        "support_level": "untriaged"
+      },
+      "canvasUnion": {
+        "support_level": "untriaged"
+      },
       "checkFramebufferStatus": {
         "support_level": "untriaged"
       },
@@ -18778,21 +22810,42 @@
       "colorMask": {
         "support_level": "untriaged"
       },
+      "commit": {
+        "support_level": "untriaged"
+      },
       "compileShader": {
         "support_level": "untriaged"
       },
       "compressedTexImage2D": {
         "support_level": "untriaged"
       },
+      "compressedTexImage2D2": {
+        "support_level": "untriaged"
+      },
+      "compressedTexImage2D3": {
+        "support_level": "untriaged"
+      },
       "compressedTexImage3D": {
         "support_level": "untriaged"
       },
+      "compressedTexImage3D2": {
+        "support_level": "untriaged"
+      },
       "compressedTexSubImage2D": {
         "support_level": "untriaged"
       },
+      "compressedTexSubImage2D2": {
+        "support_level": "untriaged"
+      },
+      "compressedTexSubImage2D3": {
+        "support_level": "untriaged"
+      },
       "compressedTexSubImage3D": {
         "support_level": "untriaged"
       },
+      "compressedTexSubImage3D2": {
+        "support_level": "untriaged"
+      },
       "copyBufferSubData": {
         "support_level": "untriaged"
       },
@@ -19114,6 +23167,9 @@
       "linkProgram": {
         "support_level": "untriaged"
       },
+      "offscreenCanvas": {
+        "support_level": "untriaged"
+      },
       "pauseTransformFeedback": {
         "support_level": "untriaged"
       },
@@ -19210,6 +23266,9 @@
       "texSubImage2D": {
         "support_level": "untriaged"
       },
+      "texSubImage2D2": {
+        "support_level": "untriaged"
+      },
       "texSubImage2DCanvas": {
         "support_level": "untriaged"
       },
@@ -19234,12 +23293,18 @@
       "uniform1fv": {
         "support_level": "untriaged"
       },
+      "uniform1fv2": {
+        "support_level": "untriaged"
+      },
       "uniform1i": {
         "support_level": "untriaged"
       },
       "uniform1iv": {
         "support_level": "untriaged"
       },
+      "uniform1iv2": {
+        "support_level": "untriaged"
+      },
       "uniform1ui": {
         "support_level": "untriaged"
       },
@@ -19252,12 +23317,18 @@
       "uniform2fv": {
         "support_level": "untriaged"
       },
+      "uniform2fv2": {
+        "support_level": "untriaged"
+      },
       "uniform2i": {
         "support_level": "untriaged"
       },
       "uniform2iv": {
         "support_level": "untriaged"
       },
+      "uniform2iv2": {
+        "support_level": "untriaged"
+      },
       "uniform2ui": {
         "support_level": "untriaged"
       },
@@ -19270,12 +23341,18 @@
       "uniform3fv": {
         "support_level": "untriaged"
       },
+      "uniform3fv2": {
+        "support_level": "untriaged"
+      },
       "uniform3i": {
         "support_level": "untriaged"
       },
       "uniform3iv": {
         "support_level": "untriaged"
       },
+      "uniform3iv2": {
+        "support_level": "untriaged"
+      },
       "uniform3ui": {
         "support_level": "untriaged"
       },
@@ -19288,12 +23365,18 @@
       "uniform4fv": {
         "support_level": "untriaged"
       },
+      "uniform4fv2": {
+        "support_level": "untriaged"
+      },
       "uniform4i": {
         "support_level": "untriaged"
       },
       "uniform4iv": {
         "support_level": "untriaged"
       },
+      "uniform4iv2": {
+        "support_level": "untriaged"
+      },
       "uniform4ui": {
         "support_level": "untriaged"
       },
@@ -19306,6 +23389,9 @@
       "uniformMatrix2fv": {
         "support_level": "untriaged"
       },
+      "uniformMatrix2fv2": {
+        "support_level": "untriaged"
+      },
       "uniformMatrix2x3fv": {
         "support_level": "untriaged"
       },
@@ -19315,6 +23401,9 @@
       "uniformMatrix3fv": {
         "support_level": "untriaged"
       },
+      "uniformMatrix3fv2": {
+        "support_level": "untriaged"
+      },
       "uniformMatrix3x2fv": {
         "support_level": "untriaged"
       },
@@ -19324,6 +23413,9 @@
       "uniformMatrix4fv": {
         "support_level": "untriaged"
       },
+      "uniformMatrix4fv2": {
+        "support_level": "untriaged"
+      },
       "uniformMatrix4x2fv": {
         "support_level": "untriaged"
       },
@@ -19410,6 +23502,21 @@
     "members": {},
     "support_level": "stable"
   },
+  "WebGLCanvas": {
+    "members": {
+      "canvas": {
+        "support_level": "untriaged"
+      },
+      "offscreenCanvas": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
+  "WebGLColorBufferFloat": {
+    "members": {},
+    "support_level": "untriaged"
+  },
   "WebGLCompressedTextureASTC": {
     "members": {
       "COMPRESSED_RGBA_ASTC_10x10_KHR": {
@@ -19508,6 +23615,41 @@
     },
     "support_level": "experimental"
   },
+  "WebGLCompressedTextureETC": {
+    "members": {
+      "COMPRESSED_R11_EAC": {
+        "support_level": "untriaged"
+      },
+      "COMPRESSED_RG11_EAC": {
+        "support_level": "untriaged"
+      },
+      "COMPRESSED_RGB8_ETC2": {
+        "support_level": "untriaged"
+      },
+      "COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2": {
+        "support_level": "untriaged"
+      },
+      "COMPRESSED_RGBA8_ETC2_EAC": {
+        "support_level": "untriaged"
+      },
+      "COMPRESSED_SIGNED_R11_EAC": {
+        "support_level": "untriaged"
+      },
+      "COMPRESSED_SIGNED_RG11_EAC": {
+        "support_level": "untriaged"
+      },
+      "COMPRESSED_SRGB8_ALPHA8_ETC2_EAC": {
+        "support_level": "untriaged"
+      },
+      "COMPRESSED_SRGB8_ETC2": {
+        "support_level": "untriaged"
+      },
+      "COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "WebGLCompressedTextureETC1": {
     "members": {
       "COMPRESSED_RGB_ETC1_WEBGL": {
@@ -19538,6 +23680,23 @@
     },
     "support_level": "experimental"
   },
+  "WebGLCompressedTextureS3TCsRGB": {
+    "members": {
+      "COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT": {
+        "support_level": "untriaged"
+      },
+      "COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT": {
+        "support_level": "untriaged"
+      },
+      "COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT": {
+        "support_level": "untriaged"
+      },
+      "COMPRESSED_SRGB_S3TC_DXT1_EXT": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "WebGLContextAttributes": {
     "comment": "http://www.khronos.org/registry/webgl/specs/latest/#5.2",
     "dart_action": "unstable",
@@ -19636,6 +23795,14 @@
     "members": {},
     "support_level": "stable"
   },
+  "WebGLGetBufferSubDataAsync": {
+    "members": {
+      "getBufferSubDataAsync": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "WebGLLoseContext": {
     "comment": "http://www.khronos.org/registry/webgl/extensions/WEBGL_lose_context/",
     "members": {
@@ -19991,12 +24158,24 @@
       "canvas": {
         "support_level": "untriaged"
       },
+      "canvasElement": {
+        "support_level": "untriaged"
+      },
+      "canvasOffscreen": {
+        "support_level": "untriaged"
+      },
+      "canvasUnion": {
+        "support_level": "untriaged"
+      },
       "checkFramebufferStatus": {},
       "clear": {},
       "clearColor": {},
       "clearDepth": {},
       "clearStencil": {},
       "colorMask": {},
+      "commit": {
+        "support_level": "untriaged"
+      },
       "compileShader": {},
       "compressedTexImage2D": {},
       "compressedTexSubImage2D": {},
@@ -20067,6 +24246,9 @@
       "isTexture": {},
       "lineWidth": {},
       "linkProgram": {},
+      "offscreenCanvas": {
+        "support_level": "untriaged"
+      },
       "pixelStorei": {},
       "polygonOffset": {},
       "readPixels": {},
@@ -21507,7 +25689,20 @@
   },
   "WebGLTexture": {
     "comment": "http://www.khronos.org/registry/webgl/specs/latest/#5.9",
-    "members": {},
+    "members": {
+      "lastUploadedVideoFrameWasSkipped": {
+        "support_level": "untriaged"
+      },
+      "lastUploadedVideoHeight": {
+        "support_level": "untriaged"
+      },
+      "lastUploadedVideoTimestamp": {
+        "support_level": "untriaged"
+      },
+      "lastUploadedVideoWidth": {
+        "support_level": "untriaged"
+      }
+    },
     "support_level": "stable"
   },
   "WebGLTimerQueryEXT": {
@@ -21807,8 +26002,14 @@
       },
       "addEventListener": {},
       "alert": {},
+      "animationWorklet": {
+        "support_level": "untriaged"
+      },
       "applicationCache": {},
       "atob": {},
+      "audioWorklet": {
+        "support_level": "untriaged"
+      },
       "blur": {
         "dart_action": "suppress",
         "support_level": "deprecated"
@@ -21835,6 +26036,9 @@
       "closed": {},
       "confirm": {},
       "console": {},
+      "cookieStore": {
+        "support_level": "untriaged"
+      },
       "createImageBitmap": {
         "support_level": "untriaged"
       },
@@ -21842,6 +26046,9 @@
         "comment": "http://www.w3.org/TR/WebCryptoAPI/",
         "support_level": "experimental"
       },
+      "customElements": {
+        "support_level": "untriaged"
+      },
       "defaultStatus": {
         "support_level": "nonstandard"
       },
@@ -21858,6 +26065,9 @@
         "dart_action": "suppress",
         "support_level": "deprecated"
       },
+      "external": {
+        "support_level": "untriaged"
+      },
       "fetch": {
         "support_level": "untriaged"
       },
@@ -21871,6 +26081,9 @@
       "frameElement": {},
       "frames": {},
       "getComputedStyle": {},
+      "getComputedStyleMap": {
+        "support_level": "untriaged"
+      },
       "getMatchedCSSRules": {
         "support_level": "nonstandard"
       },
@@ -21909,6 +26122,12 @@
       "onanimationstart": {
         "support_level": "untriaged"
       },
+      "onappinstalled": {
+        "support_level": "untriaged"
+      },
+      "onbeforeinstallprompt": {
+        "support_level": "untriaged"
+      },
       "onbeforeunload": {},
       "onblur": {},
       "oncanplay": {},
@@ -21928,6 +26147,9 @@
         "comment": "http://dev.w3.org/geo/api/spec-source-orientation.html#devicemotion",
         "support_level": "experimental"
       },
+      "ondeviceorientationabsolute": {
+        "support_level": "untriaged"
+      },
       "ondoubleclick": {
         "support_level": "untriaged"
       },
@@ -21970,6 +26192,9 @@
       "onmousewheel": {},
       "onoffline": {},
       "ononline": {},
+      "onorientationchange": {
+        "support_level": "untriaged"
+      },
       "onpagehide": {},
       "onpageshow": {},
       "onpause": {},
@@ -22050,6 +26275,9 @@
       "orientation": {
         "support_level": "untriaged"
       },
+      "origin": {
+        "support_level": "untriaged"
+      },
       "outerHeight": {},
       "outerWidth": {},
       "pagePopupController": {
@@ -22116,6 +26344,9 @@
       "toString": {},
       "toolbar": {},
       "top": {},
+      "visualViewport": {
+        "support_level": "untriaged"
+      },
       "webkitCancelAnimationFrame": {
         "support_level": "experimental"
       },
@@ -22190,30 +26421,54 @@
   },
   "WindowEventHandlers": {
     "members": {
+      "onafterprint": {
+        "support_level": "untriaged"
+      },
+      "onbeforeprint": {
+        "support_level": "untriaged"
+      },
       "onbeforeunload": {
         "support_level": "untriaged"
       },
       "onhashchange": {
         "support_level": "untriaged"
       },
+      "onlanguagechange": {
+        "support_level": "untriaged"
+      },
       "onmessage": {
         "support_level": "untriaged"
       },
+      "onmessageerror": {
+        "support_level": "untriaged"
+      },
       "onoffline": {
         "support_level": "untriaged"
       },
       "ononline": {
         "support_level": "untriaged"
       },
+      "onpagehide": {
+        "support_level": "untriaged"
+      },
+      "onpageshow": {
+        "support_level": "untriaged"
+      },
       "onpopstate": {
         "support_level": "untriaged"
       },
+      "onrejectionhandled": {
+        "support_level": "untriaged"
+      },
       "onresize": {
         "support_level": "untriaged"
       },
       "onstorage": {
         "support_level": "untriaged"
       },
+      "onunhandledrejection": {
+        "support_level": "untriaged"
+      },
       "onunload": {
         "support_level": "untriaged"
       }
@@ -22444,6 +26699,9 @@
       "addEventListener": {
         "support_level": "untriaged"
       },
+      "addressSpace": {
+        "support_level": "untriaged"
+      },
       "atob": {
         "support_level": "untriaged"
       },
@@ -22483,6 +26741,9 @@
       "indexedDB": {
         "support_level": "untriaged"
       },
+      "isSecureContext": {
+        "support_level": "untriaged"
+      },
       "location": {
         "support_level": "untriaged"
       },
@@ -22492,12 +26753,21 @@
       "onerror": {
         "support_level": "untriaged"
       },
+      "onrejectionhandled": {
+        "support_level": "untriaged"
+      },
+      "onunhandledrejection": {
+        "support_level": "untriaged"
+      },
       "openDatabase": {
         "support_level": "untriaged"
       },
       "openDatabaseSync": {
         "support_level": "untriaged"
       },
+      "origin": {
+        "support_level": "untriaged"
+      },
       "performance": {
         "support_level": "untriaged"
       },
@@ -22627,9 +26897,15 @@
       "now": {
         "support_level": "untriaged"
       },
+      "onresourcetimingbufferfull": {
+        "support_level": "untriaged"
+      },
       "setResourceTimingBufferSize": {
         "support_level": "untriaged"
       },
+      "timeOrigin": {
+        "support_level": "untriaged"
+      },
       "webkitClearResourceTimings": {
         "support_level": "untriaged"
       },
@@ -22647,6 +26923,21 @@
     },
     "support_level": "untriaged"
   },
+  "WorkletAnimation": {
+    "members": {
+      "WorkletAnimation": {},
+      "cancel": {
+        "support_level": "untriaged"
+      },
+      "play": {
+        "support_level": "untriaged"
+      },
+      "playState": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "WorkletGlobalScope": {
     "members": {},
     "support_level": "untriaged"
diff --git a/tools/dom/idl/dart/dart.idl b/tools/dom/idl/dart/dart.idl
index e7e1549..570ccc5 100644
--- a/tools/dom/idl/dart/dart.idl
+++ b/tools/dom/idl/dart/dart.idl
@@ -20,6 +20,9 @@
   [Custom] Element createElement(DOMString localName, DOMString typeExtension);
   [Custom] Element createElementNS(DOMString namespaceURI, DOMString qualifiedName);
   [Custom] Element createElementNS(DOMString namespaceURI, DOMString qualifiedName, DOMString typeExtension);
+  [DartName=registerElement2] CustomElementConstructor registerElement(DOMString type, optional ElementRegistrationOptions options);
+  [DartSuppress] readonly attribute (HTMLScriptElement or SVGScriptElement)? currentScript;
+  readonly attribute HTMLScriptElement? currentScript;
 };
 
 [DartSupplemental]
@@ -82,8 +85,8 @@
 };
 
 interface HTMLCanvasElement {
-  [DartSuppress] DOMString toDataURL([TreatNullAs=NullString, TreatUndefinedAs=NullString,Default=Undefined] DOMString type);
-  [Custom] DOMString toDataURL([TreatNullAs=NullString, TreatUndefinedAs=NullString,Default=Undefined] DOMString type, optional float quality);
+  [DartSuppress] DOMString toDataURL([TreatNullAs=NullString, Default=Undefined] DOMString type);
+  [Custom] DOMString toDataURL([TreatNullAs=NullString, Default=Undefined] DOMString type, optional float quality);
 };
 
 [DartSupplemental]
@@ -124,6 +127,7 @@
   attribute EventListener ontimeupdate;
   attribute EventListener onvolumechange;
   attribute EventListener onwaiting;
+  attribute EventListener onwheel;
 };
 
 [DartSupplemental]
@@ -131,10 +135,108 @@
   [DartSuppress, RaisesException] void addIceCandidate(RTCIceCandidate candidate);
 };
 
+// See implementation in tools/dom/templates for canvas and offscreenCanvas.
+interface WebGLCanvas {
+};
+
+[DartSupplemental]
+interface WebGL2RenderingContext {
+    [DartSuppress] readonly attribute (HTMLCanvasElement or OffscreenCanvas) canvas;
+    readonly attribute WebGLCanvas canvas;
+};
+
+[DartSupplemental]
+interface WebGLRenderingContext {
+    [DartSuppress] readonly attribute (HTMLCanvasElement or OffscreenCanvas) canvas;
+    readonly attribute HTMLCanvasElement canvas;
+};
+
 [DartSupplemental]
 interface WebGL2RenderingContextBase {
+    [DartSuppress] readonly attribute (HTMLCanvasElement or OffscreenCanvas) canvas;
+    readonly attribute WebGLCanvas canvas;
+    [DartName=bufferData2] void bufferData(GLenum target, [AllowShared] ArrayBufferView srcData, GLenum usage, GLuint srcOffset, optional GLuint length = 0);
+    [DartName=bufferSubData2] void bufferSubData(GLenum target, GLintptr dstByteOffset, [AllowShared] ArrayBufferView srcData, GLuint srcOffset, optional GLuint length = 0);
+    [DartName=compressedTexImage2D2] void compressedTexImage2D(GLenum target, GLint level, GLenum internalformat,
+                              GLsizei width, GLsizei height, GLint border,
+                              [AllowShared] ArrayBufferView data, GLuint srcOffset,
+                              optional GLuint srcLengthOverride = 0);
+    [DartName=compressedTexImage2D3] void compressedTexImage2D(GLenum target, GLint level, GLenum internalformat,
+                              GLsizei width, GLsizei height, GLint border,
+                              GLsizei imageSize, GLintptr offset);
+    [DartName=compressedTexSubImage2D2] void compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
+                                 GLsizei width, GLsizei height, GLenum format,
+                                 [AllowShared] ArrayBufferView data, GLuint srcOffset,
+                                 optional GLuint srcLengthOverride = 0);
+    [DartName=compressedTexSubImage2D3] void compressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset,
+                                 GLsizei width, GLsizei height, GLenum format,
+                                 GLsizei imageSize, GLintptr offset);
+    [DartName=compressedTexImage3D2] void compressedTexImage3D(GLenum target, GLint level, GLenum internalformat,
+                              GLsizei width, GLsizei height, GLsizei depth, GLint border,
+                              GLsizei imageSize, GLintptr offset);
+    [DartName=compressedTexSubImage3D2] void compressedTexSubImage3D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset,
+                                 GLsizei width, GLsizei height, GLsizei depth, GLenum format,
+                                 GLsizei imageSize, GLintptr offset);
+    [DartName=readPixels2] void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, ArrayBufferView dstData, GLintptr offset);
     [DartName=readPixels2] void readPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLintptr offset);
     [DartName=texImage2D2] void texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, GLintptr offset);
+    [DartName=texImage2D2] void texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, ImageData data);
+    [DartName=texImage2D2] void texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, HTMLImageElement image);
+    [DartName=texImage2D2] void texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, HTMLCanvasElement canvas);
+    [DartName=texImage2D2] void texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, HTMLVideoElement video);
+    [DartName=texImage2D2] void texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, ImageBitmap bitmap);
+    [DartName=texImage2D2] void texImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, [AllowShared] ArrayBufferView srcData, GLuint srcOffset);
+    [DartName=texSubImage2D2] void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, GLintptr offset);
+    [DartName=texSubImage2D2] void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, ImageData data);
+    [DartName=texSubImage2D2] void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, HTMLImageElement image);
+    [DartName=texSubImage2D2] void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, HTMLCanvasElement canvas);
+    [DartName=texSubImage2D2] void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, HTMLVideoElement video);
+    [DartName=texSubImage2D2] void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, ImageBitmap bitmap);
+    [DartName=texSubImage2D2] void texSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, [AllowShared] ArrayBufferView srcData, GLuint srcOffset);
+    [DartName=uniform1fv2] void uniform1fv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Float32Array v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    [DartName=uniform1fv2] void uniform1fv(WebGLUniformLocation? location, sequence<GLfloat> v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    [DartName=uniform2fv2] void uniform2fv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Float32Array v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    [DartName=uniform2fv2] void uniform2fv(WebGLUniformLocation? location, sequence<GLfloat> v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    [DartName=uniform3fv2] void uniform3fv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Float32Array v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    [DartName=uniform3fv2] void uniform3fv(WebGLUniformLocation? location, sequence<GLfloat> v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    [DartName=uniform4fv2] void uniform4fv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Float32Array v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    [DartName=uniform4fv2] void uniform4fv(WebGLUniformLocation? location, sequence<GLfloat> v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    [DartName=uniform1iv2] void uniform1iv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Int32Array v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    [DartName=uniform1iv2] void uniform1iv(WebGLUniformLocation? location, sequence<GLint> v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    [DartName=uniform2iv2] void uniform2iv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Int32Array v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    [DartName=uniform2iv2] void uniform2iv(WebGLUniformLocation? location, sequence<GLint> v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    [DartName=uniform3iv2] void uniform3iv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Int32Array v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    [DartName=uniform3iv2] void uniform3iv(WebGLUniformLocation? location, sequence<GLint> v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    [DartName=uniform4iv2] void uniform4iv(WebGLUniformLocation? location, [FlexibleArrayBufferView] Int32Array v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    [DartName=uniform4iv2] void uniform4iv(WebGLUniformLocation? location, sequence<GLint> v,
+                    GLuint srcOffset, optional GLuint srcLength = 0);
+    [DartName=uniformMatrix2fv2] void uniformMatrix2fv(WebGLUniformLocation? location, GLboolean transpose, [AllowShared] Float32Array array,
+                          GLuint srcOffset, optional GLuint srcLength = 0);
+    [DartName=uniformMatrix2fv2] void uniformMatrix2fv(WebGLUniformLocation? location, GLboolean transpose, sequence<GLfloat> array,
+                          GLuint srcOffset, optional GLuint srcLength = 0);
+    [DartName=uniformMatrix3fv2] void uniformMatrix3fv(WebGLUniformLocation? location, GLboolean transpose, [AllowShared] Float32Array array,
+                          GLuint srcOffset, optional GLuint srcLength = 0);
+    [DartName=uniformMatrix3fv2] void uniformMatrix3fv(WebGLUniformLocation? location, GLboolean transpose, sequence<GLfloat> array,
+                          GLuint srcOffset, optional GLuint srcLength = 0);
+    [DartName=uniformMatrix4fv2] void uniformMatrix4fv(WebGLUniformLocation? location, GLboolean transpose, [AllowShared] Float32Array array,
+                          GLuint srcOffset, optional GLuint srcLength = 0);
+    [DartName=uniformMatrix4fv2] void uniformMatrix4fv(WebGLUniformLocation? location, GLboolean transpose, sequence<GLfloat> array,
+                          GLuint srcOffset, optional GLuint srcLength = 0);
 };
 
 [DartSupplemental]
@@ -158,7 +260,7 @@
 
 [DartSupplemental]
 interface HTMLMediaElement {
-  DOMString canPlayType([Default=Undefined] optional DOMString type, [Default=Undefined, TreatNullAs=NullString, TreatUndefinedAs=NullString, DartForceOptional] optional DOMString keySystem);
+  DOMString canPlayType([Default=Undefined] optional DOMString type, [Default=Undefined, TreatNullAs=NullString, DartForceOptional] optional DOMString keySystem);
 };
 
 [DartSupplemental]
@@ -208,17 +310,16 @@
   [DartStrictTypeChecking, Custom] attribute float value;
 };
 
-// Keep it in to generate Dart code, C++ implementation is filterd out in generator.
-[Callback]
-interface MutationCallback {
-  [Custom] boolean handleEvent(MutationRecordArray mutations, MutationObserver observer);
+[DartSupplemental]
+interface MediaDevices {
+  [DartSuppress] Promise<MediaStream> getUserMedia(optional MediaStreamConstraints constraints);
 };
 
-[DartSupplemental,
-  CustomConstructor,
-  // Provide missing constructor signature.
-  Constructor(MutationCallback callback)]
-interface MutationObserver {
+[DartSupplemental]
+interface Navigator {
+  [DartSuppress] void getUserMedia(MediaStreamConstraints constraints,
+                                   NavigatorUserMediaSuccessCallback successCallback,
+                                   NavigatorUserMediaErrorCallback errorCallback);
 };
 
 [DartSupplemental,
@@ -245,34 +346,14 @@
 [DartSuppress]
 interface AbstractView {};
 
-interface InjectedScriptHost {
-    [Custom] void inspect(any objectId, any hints);
-    [DartSuppress, Custom] any inspectedObject(long num);
-    [DartSuppress, Custom] any internalConstructorName(any obj);
-    [DartSuppress, Custom] boolean isHTMLAllCollection(any obj);
-    [DartSuppress, Custom] DOMString type(any obj);
-    [DartSuppress, Custom] any functionDetails(any obj);
-    [DartSuppress, Custom] any[] getInternalProperties(any obj);
-    [DartSuppress, Custom] EventListener[] getEventListeners(EventTarget target);
-    [DartSuppress, Custom] any evaluate(DOMString text);
-    [DartSuppress, Custom] void debugFunction(any fn);
-    [DartSuppress, Custom] void undebugFunction(any fn);
-    [DartSuppress, Custom] void monitorFunction(any fn);
-    [DartSuppress, Custom] void unmonitorFunction(any fn);
-
-    // Only declarative scope (local, with and catch) is accepted. Returns undefined.
-    [DartSuppress, Custom] any setFunctionVariableValue(any functionObject, long scopeIndex, DOMString variableName, any newValue);
-};
-
-
-
 [DartSuppress]
 interface JavaScriptCallFrame {};
 
-
 [DartSupplemental]
 interface Location {
+  [DartSuppress] attribute URLString href;
   [Custom=Setter] attribute DOMString href;
+  [Custom=Setter] attribute TrustedURL trustedHref;
 
   [Custom] void assign(optional DOMString url);
   [Custom] void replace([Default=Undefined] optional DOMString url);
@@ -292,6 +373,14 @@
 [DartSuppress]
 interface ImageBitmapFactories {};
 
+[DartSupplemental]
+interface ImageData {
+    [DartSuppress] ImageDataColorSettings getColorSettings();
+    // Below needs 'any' because ImageDataArray is union of (Uint8ClampedArray
+    // or Uint16Array or Float32Array) 
+    [DartSuppress] readonly attribute any dataUnion;
+};
+
 // See https://chromiumcodereview.appspot.com/15901002 for the V8 implementation of
 // TextEncoder/TextDecoder
 [DartSuppress]
@@ -370,9 +459,10 @@
 
 [DartSupplemental]
 interface DOMImplementation {
-    [DartSuppress]
-    CSSStyleSheet createCSSStyleSheet([Default=Undefined] optional DOMString title,
+    [DartSuppress] CSSStyleSheet createCSSStyleSheet([Default=Undefined] optional DOMString title,
                                       [Default=Undefined] optional DOMString media);
+    [DartSuppress] Document createHTMLDocument(optional DOMString title);
+    HTMLDocument createHTMLDocument(optional DOMString title);
 };
 
 [DartSupplemental]
@@ -403,8 +493,8 @@
 };
 
 [DartSupplemental]
-interface AudioBufferSourceNode : AudioSourceNode {
-    [DartSuppress] readonly attribute AudioParam gain;
+interface AudioBufferSourceNode {
+    [DartName=start2] void start(optional double when = 0, optional double grainOffset, optional double grainDuration);
 };
 
 // Remove operations webkitRequestFullscreen replaced w/ requestFullscreen.
@@ -415,6 +505,11 @@
 };
 
 [DartSupplemental]
+interface CSS {
+  [DartName=inch] static CSSUnitValue in(double value);
+};
+
+[DartSupplemental]
 interface CSSStyleDeclaration {
     // Expose __propertyQuery__  a getter with a special operation in the IDL
     // when used with Custom=PropertyQuery will emit __propertyQuery__.
@@ -482,10 +577,14 @@
     [MeasureAs=CSSCharsetRuleEncoding] attribute DOMString encoding;
 };
 
+[DartSupplemental]
+interface Event {
+  [DartSuppress] readonly attribute object path;
+};
 
 [DartSupplemental]
 interface EventTarget {
-    [DartSuppress] void addEventListener(DOMString type, EventListener? listener, optional (EventListenerOptions or boolean) options);
+    [DartSuppress] void addEventListener(DOMString type, EventListener? listener, optional (AddEventListenerOptions or boolean) options);
     [DartSuppress] void removeEventListener(DOMString type, EventListener? listener, optional (EventListenerOptions or boolean) options);
     [Custom] void addEventListener(DOMString type, EventListener? listener, optional boolean options);
     [Custom] void removeEventListener(DOMString type, EventListener? listener, optional boolean options);
diff --git a/tools/dom/new_scripts/code_generator_dart.py b/tools/dom/new_scripts/code_generator_dart.py
index d9d86a9..c5a5709 100644
--- a/tools/dom/new_scripts/code_generator_dart.py
+++ b/tools/dom/new_scripts/code_generator_dart.py
@@ -81,7 +81,7 @@
 import idl_types
 from idl_types import IdlType
 from utilities import write_pickle_file
-from v8_globals import includes, interfaces
+from v8_globals import includes
 from dart_utilities import DartUtilities
 
 
@@ -122,10 +122,6 @@
             interface_name
             for interface_name, interface_info in interfaces_info.iteritems()
             if 'GarbageCollected' in interface_info['inherited_extended_attributes']))
-        IdlType.set_will_be_garbage_collected_types(set(
-            interface_name
-            for interface_name, interface_info in interfaces_info.iteritems()
-            if 'WillBeGarbageCollected' in interface_info['inherited_extended_attributes']))
 
     def generate_code(self, definitions, interface_name, idl_pickle_filename,
                       only_if_changed):
diff --git a/tools/dom/new_scripts/dart_utilities.py b/tools/dom/new_scripts/dart_utilities.py
index c01a426..7a57a4f 100644
--- a/tools/dom/new_scripts/dart_utilities.py
+++ b/tools/dom/new_scripts/dart_utilities.py
@@ -151,11 +151,9 @@
 DartUtilities.cpp_name = v8_utilities.cpp_name
 DartUtilities.deprecate_as = _deprecate_as
 DartUtilities.extended_attribute_value_contains = v8_utilities.extended_attribute_value_contains
-DartUtilities.gc_type = v8_utilities.gc_type
 DartUtilities.has_extended_attribute = v8_utilities.has_extended_attribute
 DartUtilities.has_extended_attribute_value = v8_utilities.has_extended_attribute_value
 DartUtilities.measure_as = _measure_as
-DartUtilities.runtime_enabled_function_name = v8_utilities.runtime_enabled_function_name
 DartUtilities.scoped_name = _scoped_name
 DartUtilities.strip_suffix = v8_utilities.strip_suffix
 DartUtilities.uncapitalize = v8_utilities.uncapitalize
diff --git a/tools/dom/scripts/dartgenerator.py b/tools/dom/scripts/dartgenerator.py
index e03a0fa..52ea4b5 100755
--- a/tools/dom/scripts/dartgenerator.py
+++ b/tools/dom/scripts/dartgenerator.py
@@ -98,15 +98,6 @@
               type_name.endswith('Constructor')):
             _logger.warn('removing %s in %s which has unidentified type %s' %
                        (node_name, interface.id, type_name))
-
-          # One last check is the type a typedef in an IDL file (the typedefs
-          # are treated as global).
-          resolvedType = resolveTypedef(idl_type)
-          if (resolvedType != idl_type):
-            idl_type.id = resolvedType.id
-            idl_type.nullable = resolvedType.nullable
-            continue
-
           return False
         return True
 
diff --git a/tools/dom/scripts/dartmetadata.py b/tools/dom/scripts/dartmetadata.py
index 6e77214..230c2dd 100644
--- a/tools/dom/scripts/dartmetadata.py
+++ b/tools/dom/scripts/dartmetadata.py
@@ -107,8 +107,8 @@
     ],
 
     'Element.getBoundingClientRect': [
-        "@Creates('_ClientRect')",
-        "@Returns('_ClientRect|Null')", # TODO(sra): Verify and remove Null.
+        "@Creates('_DomRect')",
+        "@Returns('_DomRect|Null')", # TODO(sra): Verify and remove Null.
     ],
 
     # Methods returning Window can return a local window, or a cross-frame
diff --git a/tools/dom/scripts/fremontcutbuilder.py b/tools/dom/scripts/fremontcutbuilder.py
index d368470..0bb4b69 100755
--- a/tools/dom/scripts/fremontcutbuilder.py
+++ b/tools/dom/scripts/fremontcutbuilder.py
@@ -5,12 +5,14 @@
 
 import database
 import databasebuilder
+import idlnode
 import logging.config
 import os.path
 import sys
 import time
 import utilities
 import dependency
+from idlnode import IDLType, resolveTypedef
 
 _logger = logging.getLogger('fremontcutbuilder')
 
@@ -36,6 +38,30 @@
     'ENABLE_WEB_AUDIO', # Not on Android
 ]
 
+
+# Resolve all typedefs encountered while parsing (see idlnode.py), resolve any typedefs not resolved
+# during parsing.  This must be done before the database is created, merged, and augmented to
+# exact type matching.  Typedefs can be encountered in any IDL and usage can cross IDL boundaries. 
+def ResolveAllTypedefs(all_interfaces):
+    # Resolve all typedefs.
+    for interface, db_Opts in all_interfaces:
+        def IsIdentified(idl_node):
+            node_name = idl_node.id if idl_node.id else 'parent'
+            for idl_type in idl_node.all(idlnode.IDLType):
+                # One last check is the type a typedef in an IDL file (the typedefs
+                # are treated as global).
+                resolvedType = resolveTypedef(idl_type)
+                if (resolvedType != idl_type):
+                    idl_type.id = resolvedType.id
+                    idl_type.nullable = resolvedType.nullable
+                    continue
+            return True
+
+        interface.constants = filter(IsIdentified, interface.constants)
+        interface.attributes = filter(IsIdentified, interface.attributes)
+        interface.operations = filter(IsIdentified, interface.operations)
+        interface.parents = filter(IsIdentified, interface.parents)
+
 def build_database(idl_files, database_dir, feature_defines=None,
                    logging_level=logging.WARNING, examine_idls=False):
   """This code reconstructs the FremontCut IDL database from W3C,
@@ -54,8 +80,8 @@
   dependency.set_builder(builder)
 
   # TODO(vsm): Move this to a README.
-  # This is the Dart SVN revision.
-  webkit_revision = '1060'
+  # This is the Chrome revision.
+  webkit_revision = '63'
 
   # TODO(vsm): Reconcile what is exposed here and inside WebKit code
   # generation.  We need to recheck this periodically for now.
@@ -88,6 +114,9 @@
 
   start_time = time.time()
 
+  # All typedefs MUST be resolved here before any database fixups (merging, implements, etc.)
+  ResolveAllTypedefs(builder._imported_interfaces)
+
   # Merging:
   builder.merge_imported_interfaces()
 
diff --git a/tools/dom/scripts/generator.py b/tools/dom/scripts/generator.py
index 9438b07..4c7ae18 100644
--- a/tools/dom/scripts/generator.py
+++ b/tools/dom/scripts/generator.py
@@ -16,7 +16,7 @@
 
 _pure_interfaces = monitored.Set('generator._pure_interfaces', [
     'AbstractWorker',
-    'CanvasPathMethods',
+    'CanvasPath',
     'ChildNode',
     'DocumentAnimation',
     'DocumentFontFaceSet',
@@ -153,7 +153,6 @@
     'RTCDTMFSender',
     'RTCDataChannel',
     'RTCDataChannelEvent',
-    'RTCIceCandidateEvent',
     'RTCStatsReport',
     'RTCStatsResponse',
     'ReadableByteStreamReader',
@@ -276,14 +275,12 @@
     'ChannelMergerNode': 'ChannelMergerNode,AudioChannelMerger',
     'ChannelSplitterNode': 'ChannelSplitterNode,AudioChannelSplitter',
 
-    'ClientRectList': 'ClientRectList,DOMRectList',
+    'DOMRectList': 'ClientRectList,DOMRectList',
 
     'CSSStyleDeclaration':
         #                    IE                   Firefox
         'CSSStyleDeclaration,MSStyleCSSProperties,CSS2Properties',
 
-    'Clipboard': 'Clipboard,DataTransfer',
-
     'ApplicationCache':
         'ApplicationCache,DOMApplicationCache,OfflineResourceList',
 
@@ -314,8 +311,6 @@
 
     'RTCIceCandidate': 'RTCIceCandidate,mozRTCIceCandidate',
 
-    'RTCIceCandidateEvent': 'RTCIceCandidateEvent,RTCPeerConnectionIceEvent',
-
     'RTCSessionDescription': 'RTCSessionDescription,mozRTCSessionDescription',
 
     'RTCDataChannel': 'RTCDataChannel,DataChannel',
@@ -407,7 +402,7 @@
 def GetCallbackHandlers(interface):
   callback_handlers = []
   callback_handlers = [operation for operation in interface.operations
-      if operation.id == 'handleEvent']
+      if operation.id == 'handleEvent' or operation.id == 'handleMessage']
   if callback_handlers == []:
     callback_handlers = [operation for operation in interface.operations
                          if operation.id == 'handleItem']
@@ -1169,8 +1164,14 @@
   def __init__(self, idl_type, data):
     super(CallbackIDLTypeInfo, self).__init__(idl_type, data)
 
+  def interface_name(self):
+    return self.dart_type()
+
   def implementation_name(self):
-    return ""
+    return self.dart_type()
+
+  def list_item_type(self):
+    return self._data.item_type
 
 
 def array_type(data_type):
@@ -1445,18 +1446,16 @@
     'any': TypeData(clazz='Primitive', dart_type='Object', native_type='ScriptValue'),
     'Array': TypeData(clazz='Primitive', dart_type='List'),
     'custom': TypeData(clazz='Primitive', dart_type='dynamic'),
-    'ClientRect': TypeData(clazz='Interface',
-        dart_type='Rectangle', suppress_interface=True),
+    'DOMRect': TypeData(clazz='Interface',
+         dart_type='Rectangle', suppress_interface=True),
     'Date': TypeData(clazz='Primitive', dart_type='DateTime', native_type='double'),
     'Promise': TypeData(clazz='Primitive', dart_type='Future', native_type='ScriptPromise'),
     'DOMObject': TypeData(clazz='Primitive', dart_type='Object', native_type='ScriptValue'),
     'DOMString': TypeData(clazz='Primitive', dart_type='String', native_type='String'),
+    'ScriptURLString': TypeData(clazz='Primitive', dart_type='String', native_type='String'),
     # TODO(vsm): This won't actually work until we convert the Map to
     # a native JS Map for JS DOM.
     'Dictionary': TypeData(clazz='Primitive', dart_type='Map'),
-    # TODO(terry): It's a dictionary but a very complex dictionary is multiple lists.
-    #              Need to investigate a 1-off solution probably.
-    'MediaKeySystemConfiguration': TypeData(clazz='Primitive', dart_type='Map'),
     'DOMTimeStamp': TypeData(clazz='Primitive', dart_type='int', native_type='unsigned long long'),
     'object': TypeData(clazz='Primitive', dart_type='Object', native_type='ScriptValue'),
     'PositionOptions': TypeData(clazz='Primitive', dart_type='Object'),
@@ -1483,22 +1482,74 @@
         native_type='MutationRecordArray', dart_type='List<MutationRecord>'),
     'StyleSheet': TypeData(clazz='Interface', conversion_includes=['CSSStyleSheet']),
     'SVGElement': TypeData(clazz='Interface', custom_to_dart=True),
-
-    'AudioTrackList': TypeData(clazz='Interface', item_type='AudioTrack',
-        suppress_interface=False, dart_type='List<AudioTrack>'),
-    'ClientRectList': TypeData(clazz='Interface',
-        item_type='ClientRect', dart_type='List<Rectangle>',
-        suppress_interface=True),
     'CSSRuleList': TypeData(clazz='Interface',
         item_type='CSSRule', suppress_interface=True),
     'CSSValueList': TypeData(clazz='Interface',
         item_type='CSSValue', suppress_interface=True),
     'MimeTypeArray': TypeData(clazz='Interface', item_type='MimeType'),
     'PluginArray': TypeData(clazz='Interface', item_type='Plugin'),
+    'DOMRectList': TypeData(clazz='Interface',
+        item_type='DOMRect', dart_type='List<Rectangle>',
+        custom_to_native = True),
     'DOMStringList': TypeData(clazz='Interface', item_type='DOMString',
         dart_type='List<String>', custom_to_native=True),
     'FileList': TypeData(clazz='Interface', item_type='File',
         dart_type='List<File>'),
+    # Handle new FrozenArray Web IDL builtin
+    # TODO(terry): Consider automating this mechanism to map the conversion from FrozenArray<xxx>
+    #              to List<xxx>. Some caveats for double, unsigned int and dictionary.
+    'FrozenArray<BackgroundFetchSettledFetch>': TypeData(clazz='Primitive', item_type='BackgroundFetchSettledFetch',
+        dart_type='List<BackgroundFetchSettledFetch>'),
+    'FrozenArray<DOMString>': TypeData(clazz='Primitive', item_type='DOMString',
+        dart_type='List<String>', custom_to_native=True),
+    'FrozenArray<double>': TypeData(clazz='Primitive', item_type='double',
+        dart_type='List<num>'),
+    'FrozenArray<Entry>': TypeData(clazz='Primitive', item_type='Entry',
+        dart_type='List<Entry>'),
+    'FrozenArray<FillLightMode>': TypeData(clazz='Primitive', item_type='FillLightMode',
+        dart_type='List'),
+    'FrozenArray<FontFace>': TypeData(clazz='Primitive', item_type='FontFace',
+        dart_type='List<FontFace>'),
+    'FrozenArray<GamepadButton>': TypeData(clazz='Primitive', item_type='GamepadButton',
+        dart_type='List<GamepadButton>'),
+    'FrozenArray<Landmark>': TypeData(clazz='Primitive', item_type='Landmark',
+        dart_type='List'),
+    'FrozenArray<MediaImage>': TypeData(clazz='Primitive', item_type='MediaImage',
+        dart_type='List'),
+    'FrozenArray<MediaStream>': TypeData(clazz='Primitive', item_type='MediaStream',
+        dart_type='List<MediaStream>'),
+    'FrozenArray<MessagePort>': TypeData(clazz='Primitive', item_type='MessagePort',
+        dart_type='List<MessagePort>'),
+    'FrozenArray<NotificationAction>': TypeData(clazz='Primitive', item_type='NotificationAction',
+        dart_type='List'),
+    'FrozenArray<PaymentDetailsModifier>': TypeData(clazz='Primitive', item_type='PaymentDetailsModifier',
+        dart_type='List'),
+    'FrozenArray<PaymentMethodData>':TypeData(clazz='Primitive', item_type='PaymentMethodData',
+        dart_type='List'),
+    'FrozenArray<PerformanceServerTiming>': TypeData(clazz='Primitive', item_type='PerformanceServerTiming',
+        dart_type='List<PerformanceServerTiming>'),
+    'FrozenArray<Point2D>': TypeData(clazz='Primitive', item_type='Point2D',
+        dart_type='List'),
+    'FrozenArray<PresentationConnection>': TypeData(clazz='Primitive', item_type='PresentationConnection',
+        dart_type='List<PresentationConnection>'),
+    'FrozenArray<TaskAttributionTiming>': TypeData(clazz='Primitive', item_type='TaskAttributionTiming',
+        dart_type='List<TaskAttributionTiming>'),
+    'FrozenArray<unsigned long>': TypeData(clazz='Primitive', item_type='unsigned long',
+        dart_type='List<int>'),
+    'FrozenArray<USBEndpoint>': TypeData(clazz='Primitive', item_type='USBEndpoint',
+        dart_type='List<USBEndpoint>'),
+    'FrozenArray<USBInterface>': TypeData(clazz='Primitive', item_type='USBInterface',
+        dart_type='List<USBInterface>'),
+    'FrozenArray<USBConfiguration>': TypeData(clazz='Primitive', item_type='USBConfiguration',
+        dart_type='List<USBConfiguration>'),
+    'FrozenArray<USBAlternateInterface>':TypeData(clazz='Primitive', item_type='USBAlternateInterface',
+        dart_type='List<USBAlternateInterface>'),
+    'FrozenArray<USBIsochronousInTransferPacket>':TypeData(clazz='Primitive', item_type='USBIsochronousInTransferPacket',
+        dart_type='List<USBIsochronousInTransferPacket>'), 
+    'FrozenArray<USBIsochronousOutTransferPacket>':TypeData(clazz='Primitive', item_type='USBIsochronousOutTransferPacket',
+        dart_type='List<USBIsochronousOutTransferPacket>'),  
+    'FrozenArray<VRStageBoundsPoint>': TypeData(clazz='Primitive', item_type='VRStageBoundsPoint',
+        dart_type='List<VRStageBoundsPoint>'),
     'Future': TypeData(clazz='Interface', dart_type='Future'),
     'GamepadList': TypeData(clazz='Interface', item_type='Gamepad',
         item_type_nullable=True, suppress_interface=True),
@@ -1602,8 +1653,12 @@
 
   def _TypeInfo(self, type_name):
     match = re.match(r'(?:sequence<([\w ]+)>|(\w+)\[\])$', type_name)
+
+    if match and self._database.HasDictionary(match.group(1)):
+      interface = self._database.GetDictionary(match.group(1))
+
     # sequence<any> should not be List<Object>
-    if match and match.group(1) != 'any':
+    if match and match.group(1) != 'any' and not(self._database.HasDictionary(match.group(1))):
       type_data = TypeData('Sequence')
       if self.HasTypeDef(match.group(1) or match.group(2)):
         # It's a typedef (union)
@@ -1620,17 +1675,21 @@
         return PrimitiveIDLTypeInfo(
             type_name,
             TypeData(clazz='Primitive', dart_type='String', native_type='String'))
-
       if self._database.HasInterface(type_name):
         interface = self._database.GetInterface(type_name)
       elif self._database.HasDictionary(type_name):
-        interface = self._database.GetDictionary(type_name)
+          type_data = _idl_type_registry.get('Dictionary')
+          class_name = '%sIDLTypeInfo' % type_data.clazz
+          return globals()[class_name](type_name, type_data)
       elif type_name.startswith('sequence<('):
         if type_name.find(' or ') != -1:
           # Union type of sequence is an any type (no type).
           type_data = TypeData('Sequence')
           item_info = self.TypeInfo('any')
           return SequenceIDLTypeInfo(type_name, type_data, item_info)
+      elif match and self._database.HasDictionary(match.group(1)):
+          return SequenceIDLTypeInfo(type_name,
+              TypeData('Sequence'), self.TypeInfo(match.group(1)))
       elif type_name.startswith('sequence<sequence<'):
         # TODO(terry): Cleanup up list of list, etc.
         type_data = TypeData('Sequence')
@@ -1639,6 +1698,8 @@
       elif self.HasTypeDef(type_name):
         # It's a typedef (implied union)
         return self.TypeInfo('any')
+      else:
+          print "ERROR: Unexpected interface, or type not found. %s" % type_name
 
       if 'Callback' in interface.ext_attrs:
         return CallbackIDLTypeInfo(type_name, TypeData('Callback',
@@ -1649,7 +1710,10 @@
           self._renamer.RenameInterface(interface),
           self)
 
-    type_data = _idl_type_registry.get(type_name)
+    if (self._database.HasDictionary(type_name)):
+      type_data = _idl_type_registry.get('Dictionary')
+    else:
+      type_data = _idl_type_registry.get(type_name)
 
     if type_data.clazz == 'Interface':
       if self._database.HasInterface(type_name):
diff --git a/tools/dom/scripts/htmldartgenerator.py b/tools/dom/scripts/htmldartgenerator.py
index 5bad37f..52b1dfe 100644
--- a/tools/dom/scripts/htmldartgenerator.py
+++ b/tools/dom/scripts/htmldartgenerator.py
@@ -545,7 +545,6 @@
     # Hack to ignore the constructor used by JavaScript.
     if ((self._interface.id == 'HTMLImageElement' or
          self._interface.id == 'Blob' or
-         self._interface.id == 'TouchEvent' or
          self._interface.id == 'DOMException')
       and not constructor_info.pure_dart_constructor):
       return
@@ -604,8 +603,14 @@
             inits.Emit('    if ($E != null) e.$E = $E;\n', E=param_info.name)
     else:
       custom_factory_ctr = self._interface.id in _custom_factories
-      constructor_full_name = constructor_info._ConstructorFullName(
+      if self._interface_type_info.has_generated_interface():
+        constructor_full_name = constructor_info._ConstructorFullName(
           self._DartType)
+      else:
+        # The interface is suppress_interface so use the implementation_name not
+        # the dart_type.
+        constructor_full_name = self._interface_type_info.implementation_name()
+        factory_name = constructor_full_name
 
       def GenerateCall(
           stmts_emitter, call_emitter,
diff --git a/tools/dom/scripts/htmleventgenerator.py b/tools/dom/scripts/htmleventgenerator.py
index 2bf39b6..827a79d 100644
--- a/tools/dom/scripts/htmleventgenerator.py
+++ b/tools/dom/scripts/htmleventgenerator.py
@@ -115,6 +115,14 @@
   '*.webkitfullscreenerror': ('fullscreenError', 'Event'),
   '*.wheel': ('wheel', 'WheelEvent'),
   'AbstractWorker.error': ('error', 'Event'),
+  'AccessibleNode.accessibleclick': ('accessibleClick', 'Event'),
+  'AccessibleNode.accessiblecontextmenu': ('accessibleContextMenu', 'Event'),
+  'AccessibleNode.accessibledecrement': ('accessibleDecrement', 'Event'),
+  'AccessibleNode.accessiblefocus': ('accessibleFocus', 'Event'),
+  'AccessibleNode.accessibleincrement': ('accessibleIncrement', 'Event'),
+  'AccessibleNode.accessiblescrollintoview': ('accessibleScrollIntoView', 'Event'),
+  'Animation.finish': ('finish', 'Event'),
+  'Animation.cancel': ('cancel', 'Event'),
   'AudioContext.complete': ('complete', 'Event'),
   'ApplicationCache.cached': ('cached', 'Event'),
   'ApplicationCache.checking': ('checking', 'Event'),
@@ -131,6 +139,7 @@
   'Document.pointerlockerror': ('pointerLockError', 'Event'),
   'EventSource.open': ('open', 'Event'),
   'FileReader.abort': ('abort', 'ProgressEvent'),
+  'FileReader.error': ('error', 'ProgressEvent'),
   'FileReader.load': ('load', 'ProgressEvent'),
   'FileReader.loadend': ('loadEnd', 'ProgressEvent'),
   'FileReader.loadstart': ('loadStart', 'ProgressEvent'),
@@ -140,10 +149,9 @@
   'FileWriter.write': ('write', 'ProgressEvent'),
   'FileWriter.writeend': ('writeEnd', 'ProgressEvent'),
   'FileWriter.writestart': ('writeStart', 'ProgressEvent'),
-  'FontLoader.load': ('load', 'CssFontFaceLoadEvent'),
-  'FontLoader.loading': ('loading', 'CssFontFaceLoadEvent'),
-  'FontLoader.loadingdone': ('loadingDone', 'CssFontFaceLoadEvent'),
-  'FontLoader.loadstart': ('loadStart', 'CssFontFaceLoadEvent'),
+  'FontFaceSet.loading': ('loading', 'FontFaceSetLoadEvent'),
+  'FontFaceSet.loadingdone': ('loadingDone', 'FontFaceSetLoadEvent'),
+  'FontFaceSet.loadingerror': ('loadingError', 'FontFaceSetLoadEvent'),
   'HTMLBodyElement.storage': ('storage', 'StorageEvent'),
   'HTMLCanvasElement.webglcontextlost': ('webGlContextLost', 'gl.ContextEvent'),
   'HTMLCanvasElement.webglcontextrestored': ('webGlContextRestored', 'gl.ContextEvent'),
@@ -185,12 +193,16 @@
   'RTCDataChannel.open': ('open', 'Event'),
   'RTCPeerConnection.addstream': ('addStream', 'MediaStreamEvent'),
   'RTCPeerConnection.datachannel': ('dataChannel', 'RtcDataChannelEvent'),
-  'RTCPeerConnection.icecandidate': ('iceCandidate', 'RtcIceCandidateEvent'),
+  'RTCPeerConnection.icecandidate': ('iceCandidate', 'RtcPeerConnectionIceEvent'),
   'RTCPeerConnection.iceconnectionstatechange': ('iceConnectionStateChange', 'Event'),
   'RTCPeerConnection.negotiationneeded': ('negotiationNeeded', 'Event'),
   'RTCPeerConnection.removestream': ('removeStream', 'MediaStreamEvent'),
   'RTCPeerConnection.signalingstatechange': ('signalingStateChange', 'Event'),
   'ScriptProcessorNode.audioprocess': ('audioProcess', 'AudioProcessingEvent'),
+  'ServiceWorkerGlobalScope.activate': ('activate', 'Event'),
+  'ServiceWorkerGlobalScope.fetch': ('fetch', 'Event'),
+  'ServiceWorkerGlobalScope.install': ('install', 'Event'),
+  'ServiceWorkerGlobalScope.foreignfetch': ('foreignfetch', 'ForeignFetchEvent'),
   'SharedWorker.error': ('error', 'Event'),
   'SharedWorkerGlobalScope.connect': ('connect', 'Event'),
   'SpeechRecognition.audioend': ('audioEnd', 'Event'),
@@ -223,6 +235,7 @@
   'Window.pageshow': ('pageShow', 'Event'),
   'Window.progress': ('progress', 'Event'),
   'Window.webkittransitionend': ('webkitTransitionEnd', 'TransitionEvent'),
+  'Window.wheel': ('wheel', 'WheelEvent'),
   'Worker.error': ('error', 'Event'),
   'XMLHttpRequestEventTarget.abort': ('abort', 'ProgressEvent'),
   'XMLHttpRequestEventTarget.error': ('error', 'ProgressEvent'),
@@ -231,7 +244,7 @@
   'XMLHttpRequestEventTarget.loadstart': ('loadStart', 'ProgressEvent'),
   'XMLHttpRequestEventTarget.progress': ('progress', 'ProgressEvent'),
   'XMLHttpRequestEventTarget.timeout': ('timeout', 'ProgressEvent'),
-  'XMLHttpRequest.readystatechange': ('readyStateChange', 'ProgressEvent'),
+  'XMLHttpRequest.readystatechange': ('readyStateChange', 'Event'),
 })
 
 # These classes require an explicit declaration for the "on" method even though
@@ -251,6 +264,7 @@
 
   def EmitStreamProviders(self, interface, custom_events,
       members_emitter, library_name):
+
     events = self._GetEvents(interface, custom_events)
     if not events:
       return
@@ -279,6 +293,7 @@
   def EmitStreamGetters(self, interface, custom_events,
       members_emitter, library_name, stream_getter_signatures_emitter=None,
       element_stream_getters_emitter=None):
+
     events = self._GetEvents(interface, custom_events)
     if not events:
       return
diff --git a/tools/dom/scripts/htmlrenamer.py b/tools/dom/scripts/htmlrenamer.py
index 12e2de5..9033552 100644
--- a/tools/dom/scripts/htmlrenamer.py
+++ b/tools/dom/scripts/htmlrenamer.py
@@ -24,12 +24,12 @@
 html_interface_renames = monitored.Dict('htmlrenamer.html_interface_renames',
                                         dict({
     'Attr': '_Attr',
+    'BudgetService': '_BudgetService',
     'CDATASection': 'CDataSection',
-    'Clipboard': 'DataTransfer',
+    'Clipboard': '_Clipboard', # TODO(terry): Need to remove when ACX Clipboard is renamed to AcxClipboard.
     'Database': 'SqlDatabase', # Avoid conflict with Index DB's Database.
     'DatabaseSync': 'SqlDatabaseSync',
     'DOMFileSystem': 'FileSystem',
-    'DOMRect': '_DomRect',
     'Entity': '_Entity', # Not sure if we want to expose this yet, may conflict with other libs.
     'EntryCallback': '_EntryCallback',
     'EntriesCallback': '_EntriesCallback',
@@ -47,9 +47,11 @@
     'NavigatorUserMediaErrorCallback': '_NavigatorUserMediaErrorCallback',
     'NavigatorUserMediaSuccessCallback': '_NavigatorUserMediaSuccessCallback',
     'NotificationPermissionCallback': '_NotificationPermissionCallback',
+    'Position': 'Geoposition',
     'PositionCallback': '_PositionCallback',
     'PositionErrorCallback': '_PositionErrorCallback',
     'Request': '_Request',
+    'Report': '_Report',
     'RTCDTMFSender': 'RtcDtmfSender',
     'RTCDTMFToneChangeEvent': 'RtcDtmfToneChangeEvent',
     'RTCErrorCallback': '_RtcErrorCallback',
@@ -68,6 +70,16 @@
     'XMLHttpRequestEventTarget': 'HttpRequestEventTarget',
 }, **typed_array_renames))
 
+
+# Some callback interfaces are not just a simple callback functions.  If the callback
+# interface is in this list then the interface is exposed as a class.
+_gen_callback_interfaces = [
+  'NodeFilter'
+]
+
+def generateCallbackInterface(id):
+  return id in _gen_callback_interfaces
+
 # Interfaces that are suppressed, but need to still exist for Dartium and to
 # properly wrap DOM objects if/when encountered.
 _removed_html_interfaces = [
@@ -80,7 +92,7 @@
   'BluetoothRemoteGATTService',
   'BluetoothUUID',
   'Cache', # TODO: Symbol conflicts with Angular: dartbug.com/20937
-  'CanvasPathMethods',
+  'CanvasPath',
   'CDataSection',
   'CSSPrimitiveValue',
   'CSSUnknownRule',
@@ -104,6 +116,11 @@
   'HTMLFrameSetElement',
   'HTMLMarqueeElement',
   'IDBAny',
+  'Mojo',
+  'MojoHandle',
+  'MojoInterfaceInterceptor',
+  'MojoInterfaceRequestEvent',
+  'MojoWatcher',
   'NFC',
   'Notation',
   'PagePopupController',
@@ -162,7 +179,6 @@
   'WorkerLocation', # Workers
   'WorkerNavigator', # Workers
   'Worklet', # Rendering Workers
-  'WorkletGlobalScope', # Rendering Workers
   'XMLHttpRequestProgressEvent',
   # Obsolete event for NaCl.
   'ResourceProgressEvent',
@@ -323,6 +339,7 @@
   'Element.children',
   'Element.childElementCount',
   'Element.firstElementChild',
+  'Element.getClientRects',
   'Element.getElementsByTagName',
   'Element.insertAdjacentHTML',
   'Element.scrollIntoView',
@@ -404,6 +421,7 @@
   'ParentNode.firstElementChild',
   'ParentNode.lastElementChild',
   'ParentNode.querySelectorAll',
+  'Range.getClientRects',
   'RTCPeerConnection.createAnswer',
   'RTCPeerConnection.createOffer',
   'RTCPeerConnection.getStats',
@@ -440,7 +458,6 @@
   'Touch.screenY',
   'Touch.radiusX',
   'Touch.radiusY',
-  'TouchEvent.initTouchEvent',
   'UIEvent.initUIEvent',
   'UIEvent.layerX',
   'UIEvent.layerY',
@@ -537,7 +554,6 @@
 # number of arguments vary), so we do not rename them as a _raw method.
 keep_overloaded_members = monitored.Set(
     'htmldartgenerator.keep_overloaded_members', [
-  'AudioBufferSourceNode.start',
   'CanvasRenderingContext2D.putImageData',
   'CanvasRenderingContext2D.webkitPutImageDataHD',
   'DataTransferItemList.add',
@@ -707,7 +723,6 @@
     'Element.offsetLeft',
     'Element.offsetWidth',
     'Element.offsetHeight',
-    'Element.on:wheel',
     'Element.outerText',
     'Element.prepend',
     'Element.removeAttributeNode',
@@ -904,14 +919,24 @@
   'AudioBufferSourceNode': 'web_audio',
   'AudioContext': 'web_audio',
   'AudioDestinationNode': 'web_audio',
+  'AudioElement': 'web_audio',
   'AudioListener': 'web_audio',
   'AudioNode': 'web_audio',
   'AudioParam': 'web_audio',
+  'AudioParamMap': 'web_audio',
   'AudioProcessingEvent': 'web_audio',
+  'AudioScheduledSourceNode': 'web_audio',
   'AudioSourceNode': 'web_audio',
+  'AudioTrack': 'web_audio',
+  'AudioTrackList': 'web_audio',
+  'AudioWorkletGlobalScope': 'web_audio',
+  'AudioWorkletNode': 'web_audio',
+  'AudioWorkletProcessor': 'web_audio',
+  'BaseAudioContext': 'web_audio',
   'BiquadFilterNode': 'web_audio',
   'ChannelMergerNode': 'web_audio',
   'ChannelSplitterNode': 'web_audio',
+  'ConstantSourceNode': 'web_audio',
   'ConvolverNode': 'web_audio',
   'DelayNode': 'web_audio',
   'DynamicsCompressorNode': 'web_audio',
diff --git a/tools/dom/scripts/idlnode.py b/tools/dom/scripts/idlnode.py
index 85d711c..a9b7fd7 100644
--- a/tools/dom/scripts/idlnode.py
+++ b/tools/dom/scripts/idlnode.py
@@ -236,6 +236,7 @@
       'ParentInterface': 'parent',
       'Id': 'name',
       'Interface': 'interfaces',
+      'Callback_Function': 'callback_functions',
       'Callback': 'is_callback',
       'Partial': 'is_partial',
       'Operation': 'operations',
@@ -397,6 +398,23 @@
     self.interfaces = self._convert_all(ast, 'Interface', IDLInterface)
     self.dictionaries = self._convert_all(ast, 'Dictionary', IDLDictionary)
 
+    if len(ast.callback_functions) > 0:
+      callback_functions = self._convert_all(ast, 'Callback_Function', IDLCallbackFunction)
+      for callback_function in callback_functions:
+        for annotation in callback_function.annotations:
+          callback = callback_function.annotations[annotation]
+          cb_interface = IDLInterface(None, callback.name)
+          cb_interface.ext_attrs['Callback'] = None
+          op = IDLOperation(None, cb_interface.id, "handleEvent")
+          op.type = IDLType(callback.idl_type)
+          op.type = resolveTypedef(op.type)
+
+          if len(callback.arguments) > 0:
+            op.arguments = self._convert_all(callback, 'Argument', IDLArgument)
+
+          cb_interface.operations = [op]
+          self.interfaces.append(cb_interface)
+
     is_blink = not(isinstance(ast, list)) and ast.__module__ == 'idl_definitions'
 
     if is_blink:
@@ -640,6 +658,7 @@
 
           # TODO(terry): Handled USVString as a DOMString.
           type_name = type_name.replace('USVString', 'DOMString', 1)
+          type_name = type_name.replace('HTMLString', 'DOMString', 1)
 
           # TODO(terry); WindowTimers setInterval/setTimeout overloads with a
           #              Function type - map to any until the IDL uses union.
@@ -693,6 +712,12 @@
 
     # TODO(terry): Need to handle emitting of enums for dart:html
 
+class IDLCallbackFunction(IDLNode):
+  """IDLNode for 'callback [type] [id]' declarations."""
+  def __init__(self, ast):
+    IDLNode.__init__(self, ast)
+    self._convert_annotations(ast)
+    self.type = self._convert_first(ast, 'Type', IDLType)
 
 class IDLTypeDef(IDLNode):
   """IDLNode for 'typedef [type] [id]' declarations."""
@@ -729,6 +754,14 @@
       value = IDLDictionaryMember(member, js_name)
       self[name] = value
 
+def generate_callback(interface_name, result_type, arguments):
+  syn_op = IDLOperation(None, interface_name, 'callback')
+
+  syn_op.type = resolveTypedef(result_type)
+  syn_op.arguments = arguments
+
+  return syn_op
+
 def generate_operation(interface_name, result_type_name, oper_name, arguments):
   """ Synthesize an IDLOperation with no AST used for support of setlike."""
   """ Arguments is a list of argument where each argument is:
@@ -740,8 +773,8 @@
   syn_op.type = resolveTypedef(syn_op.type)
 
   for argument in arguments:
-    arg = IDLArgument(None, argument[1]);
-    arg.type = argument[0];
+    arg = IDLArgument(None, argument[1])
+    arg.type = argument[0]
     arg.optional = argument[2] if len(argument) > 2 else False
     syn_op.arguments.append(arg)
 
@@ -800,8 +833,12 @@
   """IDLInterface node contains operations, attributes, constants,
   as well as parent references."""
 
-  def __init__(self, ast):
+  def __init__(self, ast, id=None):
     IDLNode.__init__(self, ast)
+
+    if id:
+      self.id = id
+
     self._convert_ext_attrs(ast)
     self._convert_annotations(ast)
 
@@ -821,7 +858,7 @@
     self.operations = self._convert_all(ast, 'Operation',
       lambda ast: IDLOperation(ast, self.doc_js_name))
 
-    if ast.setlike:
+    if not(id) and ast.setlike:
       setlike_ops = generate_setLike_operations_properties(self, ast.setlike)
       for op in setlike_ops:
         self.operations.append(op)
@@ -903,7 +940,7 @@
       self.specials = []
       self.is_static = False
       self.arguments = []
-      return;
+      return
 
     self.type = self._convert_first(ast, 'ReturnType', IDLType)
     self.type = resolveTypedef(self.type)
diff --git a/tools/dom/scripts/idlsync.py b/tools/dom/scripts/idlsync.py
index 632e236..e5ac565 100755
--- a/tools/dom/scripts/idlsync.py
+++ b/tools/dom/scripts/idlsync.py
@@ -1,6 +1,6 @@
 # Upgrading Dart's SDK for HTML (blink IDLs).
 #
-# Typically this is done using the Dart integration branch (as it has to be
+# Typically this is done using the Dart WebCore branch (as it has to be
 # staged to get most things working).
 #
 # Enlist in third_party/WebCore:
@@ -9,7 +9,7 @@
 #      > git clone https://github.com/dart-lang/webcore.git WebCore
 #
 # To update all *.idl, *.py, LICENSE files, and IDLExtendedAttributes.txt:
-#      > cd src/dart
+#      > cd sdk
 #      > python tools/dom/scripts/idlsync.py
 #
 # Display blink files to delete, copy, update, and collisions to review:
@@ -30,6 +30,7 @@
 #
 # Finally, commit the files in dart/third_party/WebCore.
 
+import errno
 import optparse
 import os.path
 import re
@@ -40,24 +41,22 @@
 
 from shutil import copyfile
 
-# Dartium DEPS file from the DEPS file checked into the dart-lang/sdk integration
-# branch.
-DEPS_GIT = ('https://raw.githubusercontent.com/dart-lang/sdk/integration/'
-            'tools/deps/dartium.deps/DEPS')
+# Dart DEPS file checked into the dart-lang/sdk master.
+DEPS_GIT = "https://raw.githubusercontent.com/dart-lang/sdk/master/DEPS"
 CHROME_TRUNK = "https://chromium.googlesource.com"
-WEBKIT_URL_PATTERN = r'"dartium_chromium_commit": "(\S+)",'
-DEPS_PATTERNS = {
-    'webkit': (CHROME_TRUNK, WEBKIT_URL_PATTERN),
-}
+WEBKIT_SHA_PATTERN = r'"WebCore_rev": "(\S+)",'
 
-# Dartium/Chromium remote (GIT repository)
-GIT_REMOTES_CHROMIUM = 'https://chromium.googlesource.com/dart/dartium/src.git'
+# Chromium remote (GIT repository)
+GIT_REMOTES_CHROMIUM = 'https://chromium.googlesource.com/chromium/src.git'
 
 # location of this file
-SOURCE_FILE_DIR = 'src/dart/tools/dom/scripts'
+SOURCE_FILE_DIR = 'tools/dom/scripts'
 
 WEBKIT_SOURCE = 'src/third_party/WebKit/Source'
-WEBCORE_SOURCE = 'src/dart/third_party/WebCore'
+WEBCORE_SOURCE = 'third_party/WebCore'
+
+WEBKIT_BLINK_SOURCE = 'src/third_party/blink'
+WEBCORE_BLINK_SOURCE = 'third_party/WebCore/blink'
 
 # Never automatically git add bindings/IDLExtendedAttributes.txt this file has
 # been modified by Dart but is usually changed by WebKit blink too.
@@ -69,6 +68,10 @@
 # is driven from the blink IDL parser AST
 DART_SDK_GENERATOR_SCRIPTS = 'bindings/dart/scripts'
 
+# The __init__.py files allow Python to treat directories as packages. Used to
+# allow Dart's Python scripts to interact with Chrome's IDL parsing scripts.
+PYTHON_INITS = '__init__.py'
+
 # sub directories containing IDLs (core and modules) from the base directory
 # src/third_party/WebKit/Source
 SUBDIRS = [
@@ -89,16 +92,24 @@
 
 warning_messages = []
 
-# Is --check passed in.
-def isChecked():
+# Is --dry_run passed in.
+def isDryRun():
   global options
-  return options['check'] is not None
+  return options['dry_run'] is not None
 
 # Is --verbose passed in.
 def isVerbose():
   global options
   return options['verbose'] is not None
 
+# If --WebKit= is specified then compute the directory of the Chromium
+# source.
+def chromiumDirectory():
+  global options
+  if options['chromium_dir'] is not None:
+    return os.path.expanduser(options['chromium_dir'])
+  return os.cwd()
+
 def RunCommand(cmd, valid_exits=[0]):
   """Executes a shell command and return its stdout."""
   if isVerbose():
@@ -136,8 +147,13 @@
 # source_dir is the src/third_party/WebKit/Source location (blink)
 # destination_dir is the src/dart/third_party/WebCore location
 # returns idls_copied, py_copied, other_copied
-def copy_files(source_dir, destination_dir):
+def copy_files(source_dir, src_prefix, destination_dir):
   original_cwd = os.getcwd()
+  try:
+    os.makedirs(destination_dir)
+  except OSError as e:
+    if e.errno != errno.EEXIST:
+      raise
   os.chdir(destination_dir)
 
   idls = 0                  # *.idl files copied
@@ -161,8 +177,14 @@
           else:
             others += 1
           src_file = os.path.join(root, f)
-          dst_root = root.replace(WEBKIT_SOURCE, WEBCORE_SOURCE)
-          dst_file = os.path.join(dst_root, f)
+
+          # Compute the destination path using sdk/third_party/WebCore
+          subdir_root = src_file[src_file.rfind(src_prefix) + len(src_prefix):]
+          if subdir_root.startswith(os.path.sep):
+            subdir_root = subdir_root[1:]
+          dst_file = os.path.join(destination_dir, subdir_root)
+
+          # Need to make src/third_party/WebKit/Source/* to sdk/third_party/WebCore/*
 
           destination = os.path.dirname(dst_file)
           if not os.path.exists(destination):
@@ -170,16 +192,17 @@
 
           has_Dart_fix_me = anyDartFixMe(dst_file)
 
-          if not isChecked():
+          if not isDryRun():
             copyfile(src_file, dst_file)
           if isVerbose():
-            print('...copying %s' % os.path.split(dst_file)[1])
+            #print('...copying %s' % os.path.split(dst_file)[1])
+            print('...copying %s' % dst_file)
           if f == IDL_EXTENDED_ATTRIBUTES_FILE:
             warning_messages.append(dst_file)
           else:
             if has_Dart_fix_me:
               warning_messages.append(dst_file)
-            if not (isChecked() or has_Dart_fix_me):
+            if not (isDryRun() or has_Dart_fix_me):
               # git add the file
               RunCommand(['git', 'add', dst_file])
 
@@ -196,21 +219,24 @@
   files_to_delete = []
 
   original_cwd = os.getcwd()
-  os.chdir(webcore_dir)
 
-  for (root, _, files) in os.walk(os.path.join(webcore_dir, subdir), topdown=False):
-    dir_portion = subpath(root, webcore_dir)
-    for f in files:
-      # Never automatically deleted any Dart generator scripts (these are the
-      # original sources in WebCore).
-      if dir_portion != DART_SDK_GENERATOR_SCRIPTS:
-        check_file = os.path.join(dir_portion, f)
-        check_file_full_path = os.path.join(webkit_dir, check_file)
-        if not os.path.exists(check_file_full_path):
-          if not isChecked():
-            # Remove the file using git
-            RunCommand(['git', 'rm', check_file])
-          files_to_delete.append(check_file)
+  if os.path.exists(webcore_dir):
+    os.chdir(webcore_dir)
+
+    for (root, _, files) in os.walk(os.path.join(webcore_dir, subdir), topdown=False):
+      dir_portion = subpath(root, webcore_dir)
+      for f in files:
+        # Never automatically deleted any Dart generator scripts (these are the
+        # original sources in WebCore).
+        if dir_portion != DART_SDK_GENERATOR_SCRIPTS:
+          check_file = os.path.join(dir_portion, f)
+          check_file_full_path = os.path.join(webkit_dir, check_file)
+          if not os.path.exists(check_file_full_path) and \
+             not(check_file_full_path.endswith(PYTHON_INITS)):
+            if not isDryRun():
+              # Remove the file using git
+              RunCommand(['git', 'rm', check_file])
+            files_to_delete.append(check_file)
 
   os.chdir(original_cwd)
 
@@ -218,15 +244,18 @@
 
 def ParseOptions():
   parser = optparse.OptionParser()
-  parser.add_option('--verbose', '-v', dest='verbose', action='store_false',
+  parser.add_option('--chromium', '-c', dest='chromium_dir', action='store', type='string',
+                    help='WebKit Chrome directory (e.g., --chromium=~/chrome63', default=None)
+  parser.add_option('--verbose', '-v', dest='verbose', action='store_true',
                     help='Dump all information', default=None)
-  parser.add_option('--check', '-c', dest='check', action='store_false',
+  parser.add_option('--dry_run', '-d', dest='dry_run', action='store_true',
                     help='Display results without adding, updating or deleting any files', default=None)
   args, _ = parser.parse_args()
 
   argOptions = {}
+  argOptions['chromium_dir'] = args.chromium_dir
   argOptions['verbose'] = args.verbose
-  argOptions['check'] = args.check
+  argOptions['dry_run'] = args.dry_run
   return argOptions
 
 # Fetch the DEPS file in src/dart/tools/deps/dartium.deps/DEPS from the GIT repro.
@@ -244,34 +273,68 @@
   print 'ERROR: Unable to find dart/dartium/src repository %s' % GIT_REMOTES_CHROMIUM
   return False
 
-def getCurrentDartiumSHA():
+def getChromiumSHA():
   cwd = os.getcwd()
+  chromiumDir = chromiumDirectory()
+
+  webkit_dir = os.path.join(chromiumDir, WEBKIT_SOURCE)
+  os.chdir(webkit_dir)
+
+  if ValidateGitRemotes():
+    chromium_sha = RunCommand(['git', 'log', '--format=format:%H', '-1'])
+  else:
+    chromium_sha = -1
+
+  os.chdir(cwd)
+  return chromium_sha
+
+def getCurrentDartSHA():
+  cwd = os.getcwd()
+
   if cwd.endswith('dart'):
-    # In src/dart 
+    # In src/dart
     src_dir, _ = os.path.split(cwd)
-  elif cwd.endswith('src'):
+  elif cwd.endswith('sdk'):
     src_dir = cwd
   else:
-    src_dir = os.path.join(cwd, 'src')
+    src_dir = os.path.join(cwd, 'sdk')
   os.chdir(src_dir)
 
   if ValidateGitRemotes():
-    dartium_sha = RunCommand(['git', 'log', '--format=format:%H', '-1'])
+    dart_sha = RunCommand(['git', 'log', '--format=format:%H', '-1'])
   else:
-    dartium_sha = -1
+    dart_sha = -1
 
   os.chdir(cwd)
-  return dartium_sha
+  return dart_sha
 
 # Returns the SHA of the Dartium/Chromiun in the DEPS file.
-def GetDEPSDartiumGitRevision(deps, component):
+def GetDEPSWebCoreGitRevision(deps, component):
   """Returns a tuple with the (dartium chromium repo, latest revision)."""
-  url_base, url_pattern = DEPS_PATTERNS[component]
-  url = url_base + re.search(url_pattern, deps).group(1)
+  foundIt = re.search(WEBKIT_SHA_PATTERN, deps)
+  #url_base, url_pattern = DEPS_PATTERNS[component]
+  #url = url_base + re.search(url_pattern, deps).group(1)
   # Get the SHA for the Chromium/WebKit changes for Dartium.
-  revision = url[len(url_base):]
+  #revision = url[len(url_base):]
+  revision = foundIt.group(1)[1:]
+  print '%s' % revision
   return revision
 
+def copy_subdir(src, src_prefix, dest, subdir):
+  idls_deleted = remove_obsolete_webcore_files(dest, src, subdir)
+  print "%s files removed in WebCore %s" % (idls_deleted.__len__(), subdir)
+  if isVerbose():
+    for delete_file in idls_deleted:
+      print "    %s" % delete_file
+
+  idls_copied, py_copied, other_copied = copy_files(os.path.join(src, subdir), src_prefix, dest)
+  if idls_copied > 0:
+    print "Copied %s IDLs to %s" % (idls_copied, subdir)
+  if py_copied > 0:
+    print "Copied %s PYs to %s" % (py_copied, subdir)
+  if other_copied > 0:
+    print "Copied %s other to %s\n" % (other_copied, subdir)
+
 def main():
   global options
   options = ParseOptions()
@@ -282,29 +345,40 @@
 
   base_directory = current_dir[:current_dir.rfind(SOURCE_FILE_DIR)]
 
-  # Validate that the DEPS SHA matches the SHA of the chromium/dartium branch.
+  # Validate DEPS WebCore_rev SHA DOES NOT match the SHA of chromium master.
   deps = GetDepsFromGit()
-  revision = GetDEPSDartiumGitRevision(deps, 'webkit')
-  dartium_sha = getCurrentDartiumSHA()
-  if not(revision == dartium_sha):
-    print "ERROR: Chromium/Dartium SHA in DEPS doesn't match the GIT branch."
+  webcore_revision = GetDEPSWebCoreGitRevision(deps, 'webkit')
+  chromium_sha = getChromiumSHA()
+  if webcore_revision == chromium_sha:
+    print "ERROR: Nothing to update in WebCore, WebCore_rev SHA in DEPS " \
+          "matches Chromium GIT master SHA in %s" % options['webkit_dir']
     return
 
   start_time = time.time()
+
+  # Copy scripts from third_party/blink/tools to third_party/WebCore/blink/tools
+  #
+  # This also implies that the files:
+  #     WebCore/bindings/scripts/code_generator_web_agent_api.py
+  #     WebCore/bindings/scripts/utilities.py
+  #
+  # Need to have sys.path.append at beginning of the above files changed from:
+  #
+  #    sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..', '..', '..', '..',
+  #                                 'third_party', 'blink', 'tools'))
+  # to
+  #
+  #    sys.path.append(os.path.join(os.path.dirname(__file__), '..', '..',
+  #                                 'blink', 'tools'))
+  #
+  webkit_blink_dir = os.path.join(chromiumDirectory(), WEBKIT_BLINK_SOURCE)
+  webcore_blink_dir = os.path.join(base_directory, WEBCORE_BLINK_SOURCE)
+  copy_subdir(webkit_blink_dir, WEBKIT_BLINK_SOURCE, webcore_blink_dir, "")
+
+  chromium_webkit_dir = os.path.join(chromiumDirectory(), WEBKIT_SOURCE)
+  dart_webcore_dir = os.path.join(base_directory, WEBCORE_SOURCE)
   for subdir in SUBDIRS:
-    webkit_dir = os.path.join(base_directory, WEBKIT_SOURCE) 
-    webcore_dir = os.path.join(base_directory, WEBCORE_SOURCE)
-
-    idls_deleted = remove_obsolete_webcore_files(webcore_dir, webkit_dir, subdir)
-    print "%s files removed in WebCore %s" % (idls_deleted.__len__(), subdir)
-    if isVerbose():
-      for delete_file in idls_deleted:
-        print "    %s" % delete_file
-
-    idls_copied, py_copied, other_copied = copy_files(os.path.join(webkit_dir, subdir), webcore_dir)
-    print "Copied %s IDLs to %s" % (idls_copied, subdir)
-    print "Copied %s PYs to %s" % (py_copied, subdir)
-    print "Copied %s other to %s\n" % (other_copied, subdir)
+    copy_subdir(chromium_webkit_dir, WEBKIT_SOURCE, dart_webcore_dir, subdir)
 
   end_time = time.time()
 
diff --git a/tools/dom/scripts/systemhtml.py b/tools/dom/scripts/systemhtml.py
index 8ab959c..e100908 100644
--- a/tools/dom/scripts/systemhtml.py
+++ b/tools/dom/scripts/systemhtml.py
@@ -13,6 +13,7 @@
 import re
 from generator import *
 from htmldartgenerator import *
+from htmlrenamer import generateCallbackInterface
 
 _logger = logging.getLogger('systemhtml')
 
@@ -35,8 +36,6 @@
     ])
 
 _js_custom_members = monitored.Set('systemhtml._js_custom_members', [
-    'AudioBufferSourceNode.start',
-    'AudioBufferSourceNode.stop',
     'AudioContext.createGain',
     'AudioContext.createScriptProcessor',
     'CanvasRenderingContext2D.drawImage',
@@ -128,6 +127,7 @@
     'Blob',
     'Comment',
     'MutationObserver',
+    'PaymentRequest',
     'RTCIceCandidate',
     'RTCPeerConnection',
     'RTCSessionDescription',
@@ -504,6 +504,8 @@
     elif 'Callback' in self._interface.ext_attrs:
       if len(GetCallbackHandlers(self._interface)) > 0:
         self.GenerateCallback()
+      elif generateCallbackInterface(self._interface.id):
+        self.GenerateInterface()
       else:
         return
     else:
@@ -846,6 +848,13 @@
     return argument.optional
 
   def EmitStaticFactoryOverload(self, constructor_info, name, arguments):
+    if self._interface_type_info.has_generated_interface():
+      # Use dart_type name, we're generating.
+      interface_name = self._interface_type_info.interface_name()
+    else:
+      # Use the implementation name the interface is suppressed.
+      interface_name = self._interface_type_info.implementation_name()
+
     index = len(arguments)
     arguments = constructor_info.ParametersAsArgumentList(index)
     if arguments:
@@ -853,7 +862,7 @@
     self._members_emitter.Emit(
         "  static $INTERFACE_NAME $NAME($PARAMETERS) => "
           "JS('$INTERFACE_NAME', 'new $CTOR_NAME($PLACEHOLDERS)'$ARGUMENTS);\n",
-        INTERFACE_NAME=self._interface_type_info.interface_name(),
+        INTERFACE_NAME=interface_name,
         NAME=name,
         # TODO(antonm): add types to parameters.
         PARAMETERS=constructor_info.ParametersAsArgumentList(index),
@@ -931,12 +940,16 @@
           ' JS("void", "#[#] = #", this, index, value); }',
           TYPE=self._NarrowInputType(element_type))
     else:
+      theType = self._NarrowInputType(element_type)
+      if theType == 'DomRectList':
+          theType = '';
+
       self._members_emitter.Emit(
           '\n'
           '  void operator[]=(int index, $TYPE value) {\n'
           '    throw new UnsupportedError("Cannot assign element of immutable List.");\n'
           '  }\n',
-          TYPE=self._NarrowInputType(element_type))
+          TYPE=theType)
 
     self.EmitListMixin(self._DartType(element_type), nullable)
 
@@ -1019,7 +1032,7 @@
           RENAME=rename,
           ANNOTATIONS=metadata,
           NAME=html_name,
-          TYPE=output_type)
+          TYPE=input_type if output_type == 'double' else output_type)
 
   def _AddAttributeUsingProperties(self, attribute, html_name, read_only):
     self._AddRenamingGetter(attribute, html_name)
@@ -1124,8 +1137,25 @@
     else:
       self._AddDirectNativeOperation(info, html_name)
 
+  def _computeResultType(self, checkType):
+    # TODO(terry): Work around bug in dart2js compiler e.g.,
+    #     typedef void CustomElementConstructor();
+    #     CustomElementConstructor registerElement(String type, [Map options])
+    # Needs to become:
+    #     Function registerElement(String type, [Map options])
+    resultType = checkType
+    if self._database.HasInterface(resultType):
+        resultInterface = self._database.GetInterface(resultType)
+        if 'Callback' in resultInterface.ext_attrs:
+            resultType = 'Function'
+    return resultType
+
+
   def _AddDirectNativeOperation(self, info, html_name):
     force_optional = True if html_name.startswith('_') else False
+
+    resultType = self._computeResultType(info.type_name)
+
     self._members_emitter.Emit(
         '\n'
         '  $RENAME$METADATA$MODIFIERS$TYPE $NAME($PARAMS) native;\n',
@@ -1133,20 +1163,23 @@
         METADATA=self._Metadata(info.type_name, info.declared_name,
             self.SecureOutputType(info.type_name)),
         MODIFIERS='static ' if info.IsStatic() else '',
-        TYPE=self.SecureOutputType(info.type_name, False, True),
+        TYPE=self.SecureOutputType(resultType, False, True),
         NAME=html_name,
         PARAMS=info.ParametersAsDeclaration(self._NarrowInputType, force_optional))
 
   def _AddOperationWithConversions(self, info, html_name):
     # Assert all operations have same return type.
     assert len(set([op.type.id for op in info.operations])) == 1
-    output_conversion = self._OutputConversion(info.type_name,
+
+    resultType = self._computeResultType(info.type_name)
+
+    output_conversion = self._OutputConversion(resultType,
                                                info.declared_name)
     if output_conversion:
       return_type = output_conversion.output_type
       native_return_type = output_conversion.input_type
     else:
-      return_type = self._NarrowInputType(info.type_name)
+      return_type = resultType if resultType == 'Function' else self._NarrowInputType(resultType)
       native_return_type = return_type
 
     parameter_names = [param_info.name for param_info in info.param_infos]
diff --git a/tools/dom/src/WebGLConstants.dart b/tools/dom/src/WebGLConstants.dart
index ae4057a..89d87ce 100644
--- a/tools/dom/src/WebGLConstants.dart
+++ b/tools/dom/src/WebGLConstants.dart
@@ -236,7 +236,6 @@
 const int STENCIL_CLEAR_VALUE = RenderingContext.STENCIL_CLEAR_VALUE;
 const int STENCIL_FAIL = RenderingContext.STENCIL_FAIL;
 const int STENCIL_FUNC = RenderingContext.STENCIL_FUNC;
-const int STENCIL_INDEX = RenderingContext.STENCIL_INDEX;
 const int STENCIL_INDEX8 = RenderingContext.STENCIL_INDEX8;
 const int STENCIL_PASS_DEPTH_FAIL = RenderingContext.STENCIL_PASS_DEPTH_FAIL;
 const int STENCIL_PASS_DEPTH_PASS = RenderingContext.STENCIL_PASS_DEPTH_PASS;
diff --git a/tools/dom/src/dart2js_Console.dart b/tools/dom/src/dart2js_Console.dart
new file mode 100644
index 0000000..6166c0a
--- /dev/null
+++ b/tools/dom/src/dart2js_Console.dart
@@ -0,0 +1,104 @@
+// Copyright (c) 2017, 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 html;
+
+class Console {
+  const Console._safe();
+  static const Console _safeConsole = const Console._safe();
+
+  bool get _isConsoleDefined => JS('bool', 'typeof console != "undefined"');
+
+  @DomName('Console.memory')
+  MemoryInfo get memory =>
+      _isConsoleDefined ? JS('MemoryInfo', 'window.console.memory') : null;
+
+  @DomName('Console.assertCondition')
+  void assertCondition(bool condition, Object arg) => _isConsoleDefined
+      ? JS('void', 'window.console.assertCondition(#, #)', condition, arg)
+      : null;
+
+  @DomName('Console.clear')
+  void clear(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.clear(#)', arg) : null;
+
+  @DomName('Console.count')
+  void count(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.count(#)', arg) : null;
+
+  @DomName('Console.debug')
+  void debug(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.debug(#)', arg) : null;
+
+  @DomName('Console.dir')
+  void dir(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.dir(#)', arg) : null;
+
+  @DomName('Console.dirxml')
+  void dirxml(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.dirxml(#)', arg) : null;
+
+  @DomName('Console.error')
+  void error(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.error(#)', arg) : null;
+
+  @DomName('Console.group')
+  void group(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.group(#)', arg) : null;
+
+  @DomName('Console.groupCollapsed')
+  void groupCollapsed(Object arg) => _isConsoleDefined
+      ? JS('void', 'window.console.groupCollapsed(#)', arg)
+      : null;
+
+  @DomName('Console.groupEnd')
+  void groupEnd() =>
+      _isConsoleDefined ? JS('void', 'window.console.groupEnd()') : null;
+
+  @DomName('Console.info')
+  void info(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.info(#)', arg) : null;
+
+  @DomName('Console.log')
+  void log(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.log(#)', arg) : null;
+
+  @DomName('Console.markTimeline')
+  void markTimeline(Object arg) => _isConsoleDefined
+      ? JS('void', 'window.console.markTimeline(#)', arg)
+      : null;
+
+  @DomName('Console.profile')
+  void profile(String title) =>
+      _isConsoleDefined ? JS('void', 'window.console.profile(#)', title) : null;
+
+  @DomName('Console.profileEnd')
+  void profileEnd(String title) => _isConsoleDefined
+      ? JS('void', 'window.console.profileEnd(#)', title)
+      : null;
+
+  @DomName('Console.table')
+  void table(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.table(#)', arg) : null;
+
+  @DomName('Console.time')
+  void time(String title) =>
+      _isConsoleDefined ? JS('void', 'window.console.time(#)', title) : null;
+
+  @DomName('Console.timeEnd')
+  void timeEnd(String title) =>
+      _isConsoleDefined ? JS('void', 'window.console.timeEnd(#)', title) : null;
+
+  @DomName('Console.timeStamp')
+  void timeStamp(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.timeStamp(#)', arg) : null;
+
+  @DomName('Console.trace')
+  void trace(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.trace(#)', arg) : null;
+
+  @DomName('Console.warn')
+  void warn(Object arg) =>
+      _isConsoleDefined ? JS('void', 'window.console.warn(#)', arg) : null;
+}
diff --git a/tools/dom/src/dart2js_CustomElementSupport.dart b/tools/dom/src/dart2js_CustomElementSupport.dart
index fa1b129..7869ea3 100644
--- a/tools/dom/src/dart2js_CustomElementSupport.dart
+++ b/tools/dom/src/dart2js_CustomElementSupport.dart
@@ -66,8 +66,7 @@
   }
 }
 
-void _registerCustomElement(
-    context, document, String tag, Type type, String extendsTagName) {
+Function _registerCustomElement(context, document, String tag, [Map options]) {
   // Function follows the same pattern as the following JavaScript code for
   // registering a custom element.
   //
@@ -82,6 +81,13 @@
   //    ...
   //    var e = document.createElement('x-foo');
 
+  var extendsTagName = '';
+  Type type;
+  if (options != null) {
+    extendsTagName = options['extends'];
+    type = options['prototype'];
+  }
+
   var interceptorClass = findInterceptorConstructorForType(type);
   if (interceptorClass == null) {
     throw new ArgumentError(type);
@@ -135,13 +141,13 @@
 
   setNativeSubclassDispatchRecord(proto, interceptor);
 
-  var options = JS('=Object', '{prototype: #}', proto);
+  var opts = JS('=Object', '{prototype: #}', proto);
 
   if (extendsTagName != null) {
-    JS('=Object', '#.extends = #', options, extendsTagName);
+    JS('=Object', '#.extends = #', opts, extendsTagName);
   }
 
-  JS('void', '#.registerElement(#, #)', document, tag, options);
+  return JS('=Object', '#.registerElement(#, #)', document, tag, opts);
 }
 
 //// Called by Element.created to do validation & initialization.
diff --git a/tools/dom/src/dart2js_KeyEvent.dart b/tools/dom/src/dart2js_KeyEvent.dart
index 92534a1a..e4bc296 100644
--- a/tools/dom/src/dart2js_KeyEvent.dart
+++ b/tools/dom/src/dart2js_KeyEvent.dart
@@ -187,6 +187,7 @@
   /** True if the ctrl key is pressed during this event. */
   bool get ctrlKey => _parent.ctrlKey;
   int get detail => _parent.detail;
+  bool get isComposing => _parent.isComposing;
   String get key => _parent.key;
   /**
    * Accessor to the part of the keyboard that the key was pressed from (one of
@@ -234,5 +235,6 @@
 
   @Experimental() // untriaged
   bool get repeat => throw new UnimplementedError();
+  bool get isComposed => throw new UnimplementedError();
   dynamic get _get_view => throw new UnimplementedError();
 }
diff --git a/tools/dom/src/dart2js_WrappedEvent.dart b/tools/dom/src/dart2js_WrappedEvent.dart
index e7ab18b..02dab3d 100644
--- a/tools/dom/src/dart2js_WrappedEvent.dart
+++ b/tools/dom/src/dart2js_WrappedEvent.dart
@@ -19,11 +19,9 @@
 
   bool get cancelable => wrapped.cancelable;
 
-  EventTarget get currentTarget => wrapped.currentTarget;
+  bool get composed => wrapped.composed;
 
-  List<EventTarget> deepPath() {
-    return wrapped.deepPath();
-  }
+  EventTarget get currentTarget => wrapped.currentTarget;
 
   bool get defaultPrevented => wrapped.defaultPrevented;
 
@@ -31,15 +29,13 @@
 
   bool get isTrusted => wrapped.isTrusted;
 
-  bool get scoped => wrapped.scoped;
-
   EventTarget get target => wrapped.target;
 
   double get timeStamp => wrapped.timeStamp;
 
   String get type => wrapped.type;
 
-  void _initEvent(String eventTypeArg, bool canBubbleArg, bool cancelableArg) {
+  void _initEvent(String type, [bool bubbles, bool cancelable]) {
     throw new UnsupportedError('Cannot initialize this Event.');
   }
 
@@ -55,6 +51,8 @@
     wrapped.stopPropagation();
   }
 
+  List<EventTarget> composedPath() => wrapped.composedPath();
+
   /**
    * A pointer to the element whose CSS selector matched within which an event
    * was fired. If this Event was not associated with any Event delegation,
diff --git a/tools/dom/templates/html/dart2js/html_dart2js.darttemplate b/tools/dom/templates/html/dart2js/html_dart2js.darttemplate
index dfb08cb..0ee1f54 100644
--- a/tools/dom/templates/html/dart2js/html_dart2js.darttemplate
+++ b/tools/dom/templates/html/dart2js/html_dart2js.darttemplate
@@ -46,6 +46,7 @@
 import 'dart:svg' show Matrix;
 import 'dart:svg' show SvgSvgElement;
 import 'dart:web_audio' as web_audio;
+import 'dart:web_audio' show AudioBuffer, AudioTrack, AudioTrackList;
 import 'dart:web_gl' as gl;
 import 'dart:web_gl' show RenderingContext,RenderingContext2;
 import 'dart:web_sql';
@@ -87,6 +88,7 @@
 part '$AUXILIARY_DIR/WrappedList.dart';
 part '$AUXILIARY_DIR/_HttpRequestUtils.dart';
 part '$AUXILIARY_DIR/_ListIterators.dart';
+part '$AUXILIARY_DIR/dart2js_Console.dart';
 part '$AUXILIARY_DIR/dart2js_Conversions.dart';
 part '$AUXILIARY_DIR/dart2js_CustomElementSupport.dart';
 part '$AUXILIARY_DIR/dart2js_DOMImplementation.dart';
@@ -121,7 +123,7 @@
 // Workaround for tags like <cite> that lack their own Element subclass --
 // Dart issue 1990.
 @Native("HTMLElement")
-class HtmlElement extends Element {
+class HtmlElement extends Element implements NoncedElement {
   factory HtmlElement() { throw new UnsupportedError("Not supported"); }
 
   /**
@@ -130,6 +132,10 @@
    * This can only be called by subclasses from their created constructor.
    */
   HtmlElement.created() : super.created();
+
+  // From NoncedElement
+  @DomName('HTMLElement.nonce')
+  String nonce;
 }
 
 createCustomUpgrader(Type customElementClass, $this) => $this;
@@ -142,3 +148,4 @@
 @Experimental() // untriaged
 typedef void FontFaceSetForEachCallback(
     FontFace fontFace, FontFace fontFaceAgain, FontFaceSet set);
+
diff --git a/tools/dom/templates/html/dart2js/impl_AudioBufferSourceNode.darttemplate b/tools/dom/templates/html/dart2js/impl_AudioBufferSourceNode.darttemplate
deleted file mode 100644
index 7773f8f..0000000
--- a/tools/dom/templates/html/dart2js/impl_AudioBufferSourceNode.darttemplate
+++ /dev/null
@@ -1,39 +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.
-
-part of $LIBRARYNAME;
-
-$(ANNOTATIONS)$(NATIVESPEC)class $CLASSNAME$EXTENDS$IMPLEMENTS {
-
-  // TODO(efortuna): Remove these methods when Chrome stable also uses start
-  // instead of noteOn.
-  void start(num when, [num grainOffset, num grainDuration]) {
-    if (JS('bool', '!!#.start', this)) {
-      if (grainDuration != null) {
-        JS('void', '#.start(#, #, #)', this, when, grainOffset, grainDuration);
-      } else if (grainOffset != null) {
-        JS('void', '#.start(#, #)', this, when, grainOffset);
-      } else {
-        JS('void', '#.start(#)', this, when);
-      }
-    } else {
-      if (grainDuration != null) {
-        JS('void', '#.noteOn(#, #, #)', this, when, grainOffset, grainDuration);
-      } else if (grainOffset != null) {
-        JS('void', '#.noteOn(#, #)', this, when, grainOffset);
-      } else {
-        JS('void', '#.noteOn(#)', this, when);
-      }
-    }
-  }
-
-  void stop(num when) {
-    if (JS('bool', '!!#.stop', this)) {
-      JS('void', '#.stop(#)', this, when);
-    } else {
-      JS('void', '#.noteOff(#)', this, when);
-    }
-  }
-$!MEMBERS
-}
diff --git a/tools/dom/templates/html/dart2js/impl_PaymentRequest.darttemplate b/tools/dom/templates/html/dart2js/impl_PaymentRequest.darttemplate
new file mode 100644
index 0000000..3110cc8
--- /dev/null
+++ b/tools/dom/templates/html/dart2js/impl_PaymentRequest.darttemplate
@@ -0,0 +1,35 @@
+// 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 $LIBRARYNAME;
+
+@DocsEditable()
+$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$MIXINS$IMPLEMENTS {
+  factory PaymentRequest(List<Map> methodData, Map details,
+      [Map options]) {
+    var methodData_1 = [];
+    for (var i in methodData) {
+      methodData_1.add(convertDartToNative_Dictionary(i));
+    }
+    if (options != null) {
+      var details_1 = convertDartToNative_Dictionary(details);
+      var options_2 = convertDartToNative_Dictionary(options);
+      return PaymentRequest._create_1(methodData_1, details_1, options_2);
+    }
+    var details_1 = convertDartToNative_Dictionary(details);
+    return PaymentRequest._create_2(methodData_1, details_1);
+  }
+
+  static PaymentRequest _create_1(methodData, details, options) => JS(
+      'PaymentRequest',
+      'new PaymentRequest(#,#,#)',
+      methodData,
+      details,
+      options);
+  static PaymentRequest _create_2(methodData, details) =>
+      JS('PaymentRequest', 'new PaymentRequest(#,#)', methodData, details);
+
+$!MEMBERS
+}
+
diff --git a/tools/dom/templates/html/dart2js/web_audio_dart2js.darttemplate b/tools/dom/templates/html/dart2js/web_audio_dart2js.darttemplate
index c290f9e..ce8e678 100644
--- a/tools/dom/templates/html/dart2js/web_audio_dart2js.darttemplate
+++ b/tools/dom/templates/html/dart2js/web_audio_dart2js.darttemplate
@@ -14,7 +14,9 @@
 import 'dart:html_common';
 import 'dart:_native_typed_data';
 import 'dart:typed_data';
-import 'dart:_js_helper' show Creates, JSName, Native, Returns, convertDartClosureToJS;
+import 'dart:_js_helper' show
+    Creates, JavaScriptIndexingBehavior, JSName, Native, Returns,
+    convertDartClosureToJS;
 import 'dart:_foreign_helper' show JS;
 import 'dart:_interceptors' show Interceptor;
 
diff --git a/tools/dom/templates/html/dart2js/web_gl_dart2js.darttemplate b/tools/dom/templates/html/dart2js/web_gl_dart2js.darttemplate
index 4d8ff3c..88023f7 100644
--- a/tools/dom/templates/html/dart2js/web_gl_dart2js.darttemplate
+++ b/tools/dom/templates/html/dart2js/web_gl_dart2js.darttemplate
@@ -7,6 +7,7 @@
  */
 library dart.dom.web_gl;
 
+import 'dart:async';
 import 'dart:collection' hide LinkedList, LinkedListEntry;
 import 'dart:_internal' show FixedLengthListMixin;
 import 'dart:html';
diff --git a/tools/dom/templates/html/impl/impl_AudioContext.darttemplate b/tools/dom/templates/html/impl/impl_AudioContext.darttemplate
index 3c9adbd..a90e62e 100644
--- a/tools/dom/templates/html/impl/impl_AudioContext.darttemplate
+++ b/tools/dom/templates/html/impl/impl_AudioContext.darttemplate
@@ -17,19 +17,26 @@
     }
   }
 
-  ScriptProcessorNode createScriptProcessor(int bufferSize,
-      [int numberOfInputChannels, int numberOfOutputChannels]) {
-    var function = JS('=Object', '#.createScriptProcessor || '
-        '#.createJavaScriptNode', this, this);
+  ScriptProcessorNode createScriptProcessor([int bufferSize,
+      int numberOfInputChannels, int numberOfOutputChannels]) {
+    var function = JS(
+        '=Object',
+        '#.createScriptProcessor || '
+        '#.createJavaScriptNode',
+        this,
+        this);
     if (numberOfOutputChannels != null) {
       return JS('ScriptProcessorNode', '#.call(#, #, #, #)', function, this,
           bufferSize, numberOfInputChannels, numberOfOutputChannels);
     } else if (numberOfInputChannels != null) {
       return JS('ScriptProcessorNode', '#.call(#, #, #)', function, this,
           bufferSize, numberOfInputChannels);
+    } else if (bufferSize != null) {
+      return JS(
+          'ScriptProcessorNode', '#.call(#, #)', function, this, bufferSize);
     } else {
-      return JS('ScriptProcessorNode', '#.call(#, #)', function, this,
-          bufferSize);
+      return JS(
+          'ScriptProcessorNode', '#.call(#)', function, this);
     }
   }
 
@@ -37,21 +44,27 @@
   @DomName('AudioContext.decodeAudioData')
   @DocsEditable()
   Future _decodeAudioData(ByteBuffer audioData,
-      [AudioBufferCallback successCallback,
-      AudioBufferCallback errorCallback]) native;
+      [DecodeSuccessCallback successCallback,
+      DecodeErrorCallback errorCallback]) native;
 
   @DomName('AudioContext.decodeAudioData')
-  Future<AudioBuffer> decodeAudioData(ByteBuffer audioData) {
+  Future<AudioBuffer> decodeAudioData(ByteBuffer audioData,
+      [DecodeSuccessCallback successCallback,
+      DecodeErrorCallback errorCallback]) {
+    if (successCallback != null &&  errorCallback != null) {
+      return _decodeAudioData(audioData, successCallback, errorCallback);
+    }
+
     var completer = new Completer<AudioBuffer>();
-    _decodeAudioData(audioData,
-        (value) { completer.complete(value); },
-        (error) {
-          if (error == null) {
-            completer.completeError('');
-          } else {
-            completer.completeError(error);
-          }
-        });
+    _decodeAudioData(audioData, (value) {
+      completer.complete(value);
+    }, (error) {
+      if (error == null) {
+        completer.completeError('');
+      } else {
+        completer.completeError(error);
+      }
+    });
     return completer.future;
   }
 }
diff --git a/tools/dom/templates/html/impl/impl_ClientRect.darttemplate b/tools/dom/templates/html/impl/impl_DOMRect.darttemplate
similarity index 100%
rename from tools/dom/templates/html/impl/impl_ClientRect.darttemplate
rename to tools/dom/templates/html/impl/impl_DOMRect.darttemplate
diff --git a/tools/dom/templates/html/impl/impl_DeviceOrientationEvent.darttemplate b/tools/dom/templates/html/impl/impl_DeviceOrientationEvent.darttemplate
deleted file mode 100644
index 6b4a4f8..0000000
--- a/tools/dom/templates/html/impl/impl_DeviceOrientationEvent.darttemplate
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// WARNING: Do not edit - generated code.
-
-part of $LIBRARYNAME;
-$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
-  factory $CLASSNAME(String type,
-      {bool canBubble: true, bool cancelable: true, num alpha: 0, num beta: 0,
-      num gamma: 0, bool absolute: false}) {
-    DeviceOrientationEvent e = document._createEvent("DeviceOrientationEvent");
-    e._initDeviceOrientationEvent(type, canBubble, cancelable, alpha, beta,
-        gamma, absolute);
-    return e;
-  }
-$!MEMBERS
-}
diff --git a/tools/dom/templates/html/impl/impl_Document.darttemplate b/tools/dom/templates/html/impl/impl_Document.darttemplate
index d64e858..6957bd3 100644
--- a/tools/dom/templates/html/impl/impl_Document.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Document.darttemplate
@@ -56,6 +56,11 @@
   @deprecated
   bool get supportsRegister => supportsRegisterElement;
 
+  void registerElement(String tag, Type customElementClass,
+      {String extendsTag}) {
+        registerElement2(tag, {'prototype': customElementClass, 'extends': extendsTag});
+  }
+
   @DomName('Document.createElement')
   @ForceInline() // Almost all call sites have one argument.
   Element createElement(String tagName, [String typeExtension]) {
diff --git a/tools/dom/templates/html/impl/impl_Element.darttemplate b/tools/dom/templates/html/impl/impl_Element.darttemplate
index 4ec5836..47d2ce3 100644
--- a/tools/dom/templates/html/impl/impl_Element.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Element.darttemplate
@@ -782,6 +782,24 @@
   @deprecated
   void enteredView() {}
 
+  @DomName('Element.getClientRects')
+  @DocsEditable()
+  @Returns('DomRectList|Null')
+  @Creates('DomRectList')
+  List<Rectangle> getClientRects() {
+    var value = _getClientRects();
+
+    // If no prototype we need one for the world to hookup to the proper Dart class.
+    var jsProto = JS('', '#.prototype', value);
+    if (jsProto == null) {
+      JS('', '#.prototype = Object.create(null)', value);
+    }
+
+    applyExtension('DOMRectList', value);
+
+    return value;
+  }
+
   /** *Deprecated*: override [detached] instead. */
   @Experimental()
   @deprecated
diff --git a/tools/dom/templates/html/impl/impl_Event.darttemplate b/tools/dom/templates/html/impl/impl_Event.darttemplate
index 9ff5f48..6359078 100644
--- a/tools/dom/templates/html/impl/impl_Event.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Event.darttemplate
@@ -56,5 +56,12 @@
     } while (target != null && target != currentTarget.parent);
     throw new StateError('No selector matched for populating matchedTarget.');
   }
+
+  @DomName('Event.path')
+  @DocsEditable()
+  @Experimental()
+  List<EventTarget> get path =>
+    JS('bool', '!!#.composedPath', this) ? composedPath() : [];
+
 $!MEMBERS
 }
diff --git a/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate b/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate
index 47451dc..1f95dca 100644
--- a/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate
@@ -158,10 +158,8 @@
    * `<input is="x-bar"></input>`
    *
    */
-  void registerElement(String tag, Type customElementClass,
-      {String extendsTag}) {
-    _registerCustomElement(JS('', 'window'), this, tag, customElementClass,
-        extendsTag);
+  Function registerElement2(String tag, [Map options]) {
+    return _registerCustomElement(JS('', 'window'), this, tag, options);
   }
 
   /** *Deprecated*: use [registerElement] instead. */
diff --git a/tools/dom/templates/html/impl/impl_IDBFactory.darttemplate b/tools/dom/templates/html/impl/impl_IDBFactory.darttemplate
index 7488d85..2fba73d 100644
--- a/tools/dom/templates/html/impl/impl_IDBFactory.darttemplate
+++ b/tools/dom/templates/html/impl/impl_IDBFactory.darttemplate
@@ -63,21 +63,9 @@
     }
   }
 
-  @DomName('IDBFactory.getDatabaseNames')
-  @SupportedBrowser(SupportedBrowser.CHROME)
-  @Experimental()
-  Future<List<String>> getDatabaseNames() {
-    try {
-      var request = _webkitGetDatabaseNames();
-
-      return _completeRequest(request);
-    } catch (e, stacktrace) {
-      return new Future.error(e, stacktrace);
-    }
-  }
-
   /**
    * Checks to see if getDatabaseNames is supported by the current platform.
+   * TODO(terry): Should be able to always return false?
    */
   bool get supportsDatabaseNames {
     return supported && JS('bool',
diff --git a/tools/dom/templates/html/impl/impl_Range.darttemplate b/tools/dom/templates/html/impl/impl_Range.darttemplate
index 82ddf8b..64d01a1 100644
--- a/tools/dom/templates/html/impl/impl_Range.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Range.darttemplate
@@ -13,6 +13,24 @@
       document._caretRangeFromPoint(point.x, point.y);
 $!MEMBERS
 
+  @DomName('Range.getClientRects')
+  @DocsEditable()
+  @Returns('DomRectList|Null')
+  @Creates('DomRectList')
+  List<Rectangle> getClientRects() {
+    var value = _getClientRects();
+
+    // If no prototype we need one for the world to hookup to the proper Dart class.
+    var jsProto = JS('', '#.prototype', value);
+    if (jsProto == null) {
+      JS('', '#.prototype = Object.create(null)', value);
+    }
+
+    applyExtension('DOMRectList', value);
+
+    return value;
+  }
+
   /**
    * Checks if createContextualFragment is supported.
    *
diff --git a/tools/dom/templates/html/impl/impl_TouchEvent.darttemplate b/tools/dom/templates/html/impl/impl_TouchEvent.darttemplate
index 7857dc8..5a30fd4 100644
--- a/tools/dom/templates/html/impl/impl_TouchEvent.darttemplate
+++ b/tools/dom/templates/html/impl/impl_TouchEvent.darttemplate
@@ -7,19 +7,6 @@
 part of $LIBRARYNAME;
 
 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
-  factory $CLASSNAME(TouchList touches, TouchList targetTouches,
-      TouchList changedTouches, String type,
-      {Window view, int screenX: 0, int screenY: 0, int clientX: 0,
-      int clientY: 0, bool ctrlKey: false, bool altKey: false,
-      bool shiftKey: false, bool metaKey: false}) {
-    if (view == null) {
-      view = window;
-    }
-    TouchEvent e = document._createEvent("TouchEvent");
-    e._initTouchEvent(touches, targetTouches, changedTouches, type, view,
-        screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey);
-    return e;
-  }
 $!MEMBERS
   /**
    * Checks if touch events supported on the current platform.
diff --git a/tools/dom/templates/html/impl/impl_WebGLCanvas.darttemplate b/tools/dom/templates/html/impl/impl_WebGLCanvas.darttemplate
new file mode 100644
index 0000000..26e09b6
--- /dev/null
+++ b/tools/dom/templates/html/impl/impl_WebGLCanvas.darttemplate
@@ -0,0 +1,21 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of $LIBRARYNAME;
+
+@DocsEditable()
+$(ANNOTATIONS)$(NATIVESPEC)class $CLASSNAME$EXTENDS {
+$!MEMBERS
+
+  @JSName('canvas')
+  @DomName('WebGLCanvas.canvas')
+  @DocsEditable()
+  final CanvasElement canvas;
+
+  @JSName('canvas')
+  @DomName('WebGLCanvas.offscreenCanvas')
+  @DocsEditable()
+  final OffscreenCanvas offscreenCanvas;
+}
+
diff --git a/tools/dom/templates/html/impl/impl_Window.darttemplate b/tools/dom/templates/html/impl/impl_Window.darttemplate
index 9da90cd..cf5ddf9 100644
--- a/tools/dom/templates/html/impl/impl_Window.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Window.darttemplate
@@ -177,7 +177,6 @@
   @DomName('Window.console')
   Console get console => Console._safeConsole;
 
-
   /**
    * Access a sandboxed file system of the specified `size`. If `persistent` is
    * true, the application will request permission from the user to create
@@ -211,6 +210,10 @@
   @DomName('Window.onbeforeunload')
   Stream<Event> get onBeforeUnload => beforeUnloadEvent.forTarget(this);
 
+  /// Stream of `wheel` events handled by this [Window].
+  @DomName('Window.onWheel')
+  Stream<WheelEvent> get onWheel => Element.wheelEvent.forTarget(this);
+
   /**
    * Moves this window to a specific position.
    *
diff --git a/tools/testing/dart/compiler_configuration.dart b/tools/testing/dart/compiler_configuration.dart
index 79ea762..0b7c602 100644
--- a/tools/testing/dart/compiler_configuration.dart
+++ b/tools/testing/dart/compiler_configuration.dart
@@ -39,6 +39,7 @@
   bool get _isStrong => _configuration.isStrong;
   bool get _isHostChecked => _configuration.isHostChecked;
   bool get _useSdk => _configuration.useSdk;
+  bool get _useEnableAsserts => _configuration.useEnableAsserts;
 
   /// Only some subclasses support this check, but we statically allow calling
   /// it on [CompilerConfiguration].
@@ -190,6 +191,9 @@
       args.add('--enable_asserts');
       args.add('--enable_type_checks');
     }
+    if (_useEnableAsserts) {
+      args.add('--enable_asserts');
+    }
     if (_configuration.hotReload) {
       args.add('--hot-reload-test-mode');
     } else if (_configuration.hotReloadRollback) {
@@ -250,6 +254,9 @@
       args.add('--enable_asserts');
       args.add('--enable_type_checks');
     }
+    if (_useEnableAsserts) {
+      args.add('--enable_asserts');
+    }
     if (_configuration.hotReload) {
       args.add('--hot-reload-test-mode');
     } else if (_configuration.hotReloadRollback) {