Version 0.6.11.0

svn merge -r 25435:25460 https://dart.googlecode.com/svn/branches/bleeding_edge trunk

git-svn-id: http://dart.googlecode.com/svn/trunk@25461 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/pkg/docgen/lib/docgen.dart b/pkg/docgen/lib/docgen.dart
index aa8cb12..72f6a13 100644
--- a/pkg/docgen/lib/docgen.dart
+++ b/pkg/docgen/lib/docgen.dart
@@ -470,11 +470,13 @@
  */
 class Indexable {
   String name;
+  String qualifiedName;
   
   /// Documentation comment with converted markdown.
   String comment;
   
   Indexable(this.name, this.comment, String qualifiedName) {
+    this.qualifiedName = qualifiedName;
     qualifiedNameIndex.add(qualifiedName);
   }
 }
@@ -499,6 +501,7 @@
   /// Generates a map describing the [Library] object.
   Map toMap() => {
       'name': name,
+      'qualifiedname': qualifiedName,
       'comment': comment,
       'variables': recurseMap(variables),
       'functions': recurseMap(functions),
@@ -536,6 +539,7 @@
   /// Generates a map describing the [Class] object.
   Map toMap() => {
       'name': name,
+      'qualifiedname': qualifiedName,
       'comment': comment,
       'superclass': superclass,
       'implements': new List.from(interfaces),
@@ -563,6 +567,7 @@
   
   Map toMap() => {
       'name': name,
+      'qualifiedname': qualifiedName,
       'comment': comment,
       'return': returnType,
       'parameters': recurseMap(parameters),
@@ -591,6 +596,7 @@
   /// Generates a map describing the [Variable] object.
   Map toMap() => {
       'name': name,
+      'qualifiedname': qualifiedName,
       'comment': comment,
       'final': isFinal.toString(),
       'static': isStatic.toString(),
@@ -624,6 +630,7 @@
   /// Generates a map describing the [Method] object.
   Map toMap() => {
       'name': name,
+      'qualifiedname': qualifiedName,
       'comment': comment,
       'static': isStatic.toString(),
       'abstract': isAbstract.toString(),
diff --git a/pkg/mdv/lib/src/template_iterator.dart b/pkg/mdv/lib/src/template_iterator.dart
index 8f399ef..1c76e61 100644
--- a/pkg/mdv/lib/src/template_iterator.dart
+++ b/pkg/mdv/lib/src/template_iterator.dart
@@ -31,10 +31,16 @@
 }
 
 void _addBindings(Node node, model, [BindingDelegate delegate]) {
+  List bindings = null;
   if (node is Element) {
-    _addAttributeBindings(node, model, delegate);
+    bindings = _parseAttributeBindings(node);
   } else if (node is Text) {
-    _parseAndBind(node, 'text', node.text, model, delegate);
+    var tokens = _parseMustacheTokens(node.text);
+    if (tokens != null) bindings = ['text', tokens];
+  }
+
+  if (bindings != null) {
+    _processBindings(bindings, node, model, delegate);
   }
 
   for (var c = node.firstChild; c != null; c = c.nextNode) {
@@ -42,57 +48,70 @@
   }
 }
 
-void _addAttributeBindings(Element element, model, delegate) {
-  var attrs = new LinkedHashMap.from(element.attributes);
-  if (element.isTemplate) {
-    // Accept 'naked' bind & repeat.
-    if (attrs['bind'] == '') attrs['bind'] = '{{}}';
-    if (attrs['repeat'] == '') attrs['repeat'] = '{{}}';
+List _parseAttributeBindings(Element element) {
+  var bindings = null;
+  var ifFound = false;
+  var bindFound = false;
+  var isTemplateNode = element.isTemplate;
 
-    // Treat <template if="{{expr}}"> as <template bind if="{{expr}}">
-    if (attrs.containsKey('if') &&
-        !attrs.containsKey('bind') &&
-        !attrs.containsKey('repeat')) {
-      attrs['bind'] = '{{}}';
+  element.attributes.forEach((name, value) {
+    if (isTemplateNode) {
+      if (name == 'if') {
+        ifFound = true;
+      } else if (name == 'bind' || name == 'repeat') {
+        bindFound = true;
+        if (value == '') value = '{{}}';
+      }
     }
+
+    var tokens = _parseMustacheTokens(value);
+    if (tokens != null) {
+      if (bindings == null) bindings = [];
+      bindings..add(name)..add(tokens);
+    }
+  });
+
+  // Treat <template if> as <template bind if>
+  if (ifFound && !bindFound) {
+    if (bindings == null) bindings = [];
+    bindings..add('bind')..add(_parseMustacheTokens('{{}}'));
   }
 
-  attrs.forEach((name, value) {
-    _parseAndBind(element, name, value, model, delegate);
-  });
+  return bindings;
 }
 
-void _parseAndBind(Node node, String name, String text, model,
+void _processBindings(List bindings, Node node, model,
     BindingDelegate delegate) {
 
-  var tokens = _parseMustacheTokens(text);
-  if (tokens.length == 0 || (tokens.length == 1 && tokens[0].isText)) {
-    return;
+  for (var i = 0; i < bindings.length; i += 2) {
+    _setupBinding(node, bindings[i], bindings[i + 1], model, delegate);
   }
+}
+
+void _setupBinding(Node node, String name, List tokens, model,
+    BindingDelegate delegate) {
 
   // If this is a custom element, give the .xtag a change to bind.
   node = _nodeOrCustom(node);
 
-  if (tokens.length == 1 && tokens[0].isBinding) {
-    _bindOrDelegate(node, name, model, tokens[0].value, delegate);
+  if (_isSimpleBinding(tokens)) {
+    _bindOrDelegate(node, name, model, tokens[1], delegate);
     return;
   }
 
   var replacementBinding = new CompoundBinding();
-  for (var i = 0; i < tokens.length; i++) {
-    var token = tokens[i];
-    if (token.isBinding) {
-      _bindOrDelegate(replacementBinding, i, model, token.value, delegate);
-    }
+  for (var i = 1; i < tokens.length; i += 2) {
+    // TODO(jmesserly): not sure if this index is correct. See my comment here:
+    // https://github.com/Polymer/mdv/commit/f1af6fe683fd06eed2a7a7849f01c227db12cda3#L0L1035
+    _bindOrDelegate(replacementBinding, i, model, tokens[i], delegate);
   }
 
   replacementBinding.combinator = (values) {
     var newValue = new StringBuffer();
 
-    for (var i = 0; i < tokens.length; i++) {
-      var token = tokens[i];
-      if (token.isText) {
-        newValue.write(token.value);
+    for (var i = 0, text = true; i < tokens.length; i++, text = !text) {
+      if (text) {
+        newValue.write(tokens[i]);
       } else {
         var value = values[i];
         if (value != null) {
@@ -129,38 +148,41 @@
 // TODO(jmesserly): remove this when we can extend Element for real.
 _nodeOrCustom(node) => node is Element ? node.xtag : node;
 
-List<_BindingToken> _parseMustacheTokens(String s) {
-  var result = [];
-  var length = s.length;
-  var index = 0, lastIndex = 0;
-  while (lastIndex < length) {
-    index = s.indexOf('{{', lastIndex);
-    if (index < 0) {
-      result.add(new _BindingToken(s.substring(lastIndex)));
-      break;
-    } else {
-      // There is a non-empty text run before the next path token.
-      if (index > 0 && lastIndex < index) {
-        result.add(new _BindingToken(s.substring(lastIndex, index)));
-      }
-      lastIndex = index + 2;
-      index = s.indexOf('}}', lastIndex);
-      if (index < 0) {
-        var text = s.substring(lastIndex - 2);
-        if (result.length > 0 && result.last.isText) {
-          result.last.value += text;
-        } else {
-          result.add(new _BindingToken(text));
-        }
-        break;
-      }
+/** True if and only if [tokens] is of the form `['', path, '']`. */
+bool _isSimpleBinding(List<String> tokens) =>
+    tokens.length == 3 && tokens[0].isEmpty && tokens[2].isEmpty;
 
-      var value = s.substring(lastIndex, index).trim();
-      result.add(new _BindingToken(value, isBinding: true));
-      lastIndex = index + 2;
+/**
+ * Parses {{ mustache }} bindings.
+ *
+ * Returns null if there are no matches. Otherwise returns
+ * [TEXT, (PATH, TEXT)+] if there is at least one mustache.
+ */
+List<String> _parseMustacheTokens(String s) {
+  if (s.isEmpty) return;
+
+  var tokens = null;
+  var length = s.length;
+  var startIndex = 0, lastIndex = 0, endIndex = 0;
+  while (lastIndex < length) {
+    startIndex = s.indexOf('{{', lastIndex);
+    endIndex = startIndex < 0 ? -1 : s.indexOf('}}', startIndex + 2);
+
+    if (endIndex < 0) {
+      if (tokens == null) return null;
+
+      tokens.add(s.substring(lastIndex));
+      break;
     }
+
+    if (tokens == null) tokens = <String>[];
+    tokens.add(s.substring(lastIndex, startIndex)); // TEXT
+    tokens.add(s.substring(startIndex + 2, endIndex).trim()); // PATH
+    lastIndex = endIndex + 2;
   }
-  return result;
+
+  if (lastIndex == length) tokens.add('');
+  return tokens;
 }
 
 void _addTemplateInstanceRecord(fragment, model) {
@@ -178,14 +200,6 @@
   }
 }
 
-class _BindingToken {
-  final String value;
-  final bool isBinding;
-
-  _BindingToken(this.value, {this.isBinding: false});
-
-  bool get isText => !isBinding;
-}
 
 class _TemplateIterator {
   final Element _templateElement;
@@ -371,8 +385,8 @@
     if (closed) return;
 
     unobserve();
+    inputs.close();
     terminators.clear();
-    inputs.dispose();
     closed = true;
   }
 
diff --git a/pkg/observe/lib/src/compound_binding.dart b/pkg/observe/lib/src/compound_binding.dart
index 80877ce..625c82c 100644
--- a/pkg/observe/lib/src/compound_binding.dart
+++ b/pkg/observe/lib/src/compound_binding.dart
@@ -32,10 +32,9 @@
 
   // TODO(jmesserly): ideally these would be String keys, but sometimes we
   // use integers.
-  Map<dynamic, StreamSubscription> _bindings = new Map();
+  Map<dynamic, StreamSubscription> _observers = new Map();
   Map _values = new Map();
   bool _scheduled = false;
-  bool _disposed = false;
   Object _value;
 
   CompoundBinding([CompoundBindingCombinator combinator]) {
@@ -57,7 +56,7 @@
 
   get value => _value;
 
-  int get length => _bindings.length;
+  int get length => _observers.length;
 
   void set value(newValue) {
     _value = notifyPropertyChange(_VALUE, _value, newValue);
@@ -66,16 +65,16 @@
   void bind(name, model, String path) {
     unbind(name);
 
-     // TODO(jmesserly): should we avoid observing until we are observed,
-     // similar to PathObserver? Similar for unobserving?
-    _bindings[name] = new PathObserver(model, path).bindSync((value) {
+     // TODO(jmesserly): should we delay observing until we are observed,
+     // similar to PathObserver?
+    _observers[name] = new PathObserver(model, path).bindSync((value) {
       _values[name] = value;
       _scheduleResolve();
     });
   }
 
   void unbind(name, {bool suppressResolve: false}) {
-    var binding = _bindings.remove(name);
+    var binding = _observers.remove(name);
     if (binding == null) return;
 
     binding.cancel();
@@ -93,7 +92,7 @@
   }
 
   void resolve() {
-    if (_disposed) return;
+    if (_observers.isEmpty) return;
     _scheduled = false;
 
     if (_combinator == null) {
@@ -104,14 +103,20 @@
     value = _combinator(_values);
   }
 
-  void dispose() {
-    for (var binding in _bindings.values) {
+  /**
+   * Closes the observer.
+   *
+   * This happens automatically if the [value] property is no longer observed,
+   * but this can also be called explicitly.
+   */
+  void close() {
+    for (var binding in _observers.values) {
       binding.cancel();
     }
-    _bindings.clear();
+    _observers.clear();
     _values.clear();
-
-    _disposed = true;
     value = null;
   }
+
+  _unobserved() => close();
 }
diff --git a/pkg/pkg.status b/pkg/pkg.status
index e978abe..18f116e 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -15,11 +15,6 @@
 scheduled_test/test/scheduled_server_test: Pass, Fail, Slow, Crash # Issue 9231, 9582
 scheduled_test/test/scheduled_process_test: Pass, Slow # Issue 9231
 
-# WebDriver tests have 3rd party dependencies (we need to run
-# selenium_standalone.jar), so we skip these in our automated
-# testing.
-webdriver/test/webdriver_test: Skip
-
 [ $compiler == none && $runtime == drt && $mode == debug]
 mdv/test/custom_element_bindings_test: Fail # Issue 11657
 
@@ -65,7 +60,6 @@
 
 [ $compiler == dart2js ]
 analyzer_experimental/test/generated/ast_test: Fail, Slow # Issue 11230
-unittest/test/instance_test: Fail # http://dartbug.com/11191
 stack_trace/test/trace_test: Pass, Timeout # Issue 11645
 
 [ $compiler == dartc || $compiler == dartanalyzer || $compiler == dart2analyzer]
diff --git a/pkg/unittest/test/instance_test.dart b/pkg/unittest/test/instance_test.dart
index d9e9875..287744c 100644
--- a/pkg/unittest/test/instance_test.dart
+++ b/pkg/unittest/test/instance_test.dart
@@ -20,10 +20,9 @@
     test('throwsA', () {
       shouldPass(doesThrow, throwsA(equals('X')));
       shouldFail(doesThrow, throwsA(equals('Y')),
-          "Expected: throws 'Y' "
-          "Actual: <Closure: () => dynamic "
-              "from Function 'doesThrow': static.> "
-          "Which: threw 'X'");
+          matches("Expected: throws 'Y'.*"
+          "Actual: <Closure.*"
+          "Which: threw 'X'"));
     });
   });
 }
diff --git a/pkg/webdriver/lib/src/base64decoder.dart b/pkg/webdriver/lib/src/base64decoder.dart
deleted file mode 100644
index 7e9175b..0000000
--- a/pkg/webdriver/lib/src/base64decoder.dart
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of webdriver;
-
-/**
- * A simple base64 decoder class, used to decode web browser screenshots
- * returned by WebDriver.
- */
-class Base64Decoder {
-
-  static int getVal(String s, pos) {
-    int code = s.codeUnitAt(pos);
-    if (code >= 65 && code < (65+26)) { // 'A'..'Z'
-      return code - 65;
-    } else if (code >= 97 && code < (97+26)) { // 'a'..'z'
-      return code - 97 + 26;
-    } else if (code >= 48 && code < (48+10)) { // '0'..'9'
-      return code - 48 + 52;
-    } else if (code == 43) { // '+'
-      return 62;
-    } else if (code == 47) { // '/'
-      return 63;
-    } else {
-      throw 'Invalid character $s';
-    }
-  }
-
-  static List<int> decode(String s) {
-    var rtn = new List<int>();
-    var pos = 0;
-    while (pos < s.length) {
-      if (s[pos+2] =='=') { // Single byte as two chars.
-        int v = (getVal(s, pos) << 18 ) | (getVal(s, pos+1) << 12 );
-        rtn.add((v >> 16) & 0xff);
-        break;
-      } else if (s[pos+3] == '=') { // Two bytes as 3 chars.
-        int v = (getVal(s, pos) << 18 ) | (getVal(s, pos+1) << 12 ) |
-            (getVal(s, pos + 2) << 6);
-        rtn.add((v >> 16) & 0xff);
-        rtn.add((v >> 8) & 0xff);
-        break;
-      } else { // Three bytes as 4 chars.
-        int v = (getVal(s, pos) << 18 ) | (getVal(s, pos+1) << 12 ) |
-            (getVal(s, pos + 2) << 6) | getVal(s, pos+3);
-        pos += 4;
-        rtn.add((v >> 16 ) & 0xff);
-        rtn.add((v >> 8) & 0xff);
-        rtn.add(v & 0xff);
-      }
-    }
-    return rtn;
-  }
-}
diff --git a/pkg/webdriver/lib/webdriver.dart b/pkg/webdriver/lib/webdriver.dart
deleted file mode 100644
index e9c6262..0000000
--- a/pkg/webdriver/lib/webdriver.dart
+++ /dev/null
@@ -1,1479 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library webdriver;
-
-import 'dart:async';
-import 'dart:io';
-import 'dart:json' as json;
-
-part 'src/base64decoder.dart';
-
-/**
- * WebDriver bindings for Dart.
- *
-* ## Installing ##
- *
- * Use [pub][] to install this package. Add the following to your `pubspec.yaml`
- * file.
- *
- *     dependencies:
- *       webdriver: any
- *
- * Then run `pub install`.
- *
- * For more information, see the
- * [webdriver package on pub.dartlang.org][pkg].
- *
- * ## Using ##
- *
- * These bindings are based on the WebDriver JSON wire protocol spec
- * (http://code.google.com/p/selenium/wiki/JsonWireProtocol). Not
- * all of these commands are implemented yet by WebDriver itself.
- * Nontheless this is a complete implementation of the spec as the
- * unsupported commands may be supported in the future. Currently,
- * there are known issues with local and session storage, script
- * execution, and log access.
- *
- * To use these bindings, the Selenium standalone server must be running.
- * You can download it at http://code.google.com/p/selenium/downloads/list.
- *
- * There are a number of commands that use ids to access page elements.
- * These ids are not the HTML ids; they are opaque ids internal to
- * WebDriver. To get the id for an element you would first need to do
- * a search, get the results, and extract the WebDriver id from the returned
- * [Map] using the 'ELEMENT' key. For example:
- *
- *     String id;
- *     WebDriverSession session;
- *     Future f = web_driver.newSession('chrome');
- *     f.then((_session) {
- *       session = _session;
- *       return session.setUrl('http://my.web.site.com');
- *    }).then((_) {
- *      return session.findElement('id', 'username');
- *    }).then((element) {
- *      id = element['ELEMENT'];
- *      return session.sendKeyStrokesToElement(id,
- *          [ 'j', 'o', 'e', ' ', 'u', 's', 'e', 'r' ]);
- *    }).then((_) {
- *      return session.submit(id);
- *    }).then((_) {
- *      return session.close();
- *    }).then((_) {
- *      session = null;
- *    });
- *
- * [pub]: http://pub.dartlang.org
- * [pkg]: http://pub.dartlang.org/packages/webdriver
- */
-
-void writeStringToFile(String fileName, String contents) {
-  new File(fileName).writeAsStringSync(contents);
-}
-
-void writeBytesToFile(String fileName, List<int> contents) {
-  new File(fileName).writeAsBytesSync(contents);
-}
-
-class WebDriverError {
-  static List _errorTypes = null;
-  static List _errorDetails = null;
-  int statusCode;
-  String type;
-  String message;
-  String details;
-  String results;
-
-  WebDriverError(this.statusCode, this.message, [this.results = '']) {
-    /** These correspond to WebDrive exception types. */
-    if (_errorTypes == null) {
-      _errorTypes = [
-        null,
-        'IndexOutOfBounds',
-        'NoCollection',
-        'NoString',
-        'NoStringLength',
-        'NoStringWrapper',
-        'NoSuchDriver',
-        'NoSuchElement',
-        'NoSuchFrame',
-        'UnknownCommand',
-        'ObsoleteElement',
-        'ElementNotDisplayed',
-        'InvalidElementState',
-        'Unhandled',
-        'Expected',
-        'ElementNotSelectable',
-        'NoSuchDocument',
-        'UnexpectedJavascript',
-        'NoScriptResult',
-        'XPathLookup',
-        'NoSuchCollection',
-        'TimeOut',
-        'NullPointer',
-        'NoSuchWindow',
-        'InvalidCookieDomain',
-        'UnableToSetCookie',
-        'UnexpectedAlertOpen',
-        'NoAlertOpen',
-        'ScriptTimeout',
-        'InvalidElementCoordinates',
-        'IMENotAvailable',
-        'IMEEngineActivationFailed',
-        'InvalidSelector',
-        'SessionNotCreatedException',
-        'MoveTargetOutOfBounds'
-      ];
-      // Explanations of the eror types. In thoses cases where the
-      // explanation is the same as the type (e.g. NoCollection), that is an
-      // error type used by an old version of the IE driver and is deprecated.
-      _errorDetails = [
-        null,
-        'IndexOutOfBounds',
-        'NoCollection',
-        'NoString',
-        'NoStringLength',
-        'NoStringWrapper',
-        'NoSuchDriver',
-        'An element could not be located on the page using the given '
-            'search parameters.',
-        'A request to switch to a frame could not be satisfied because the '
-            'frame could not be found.',
-        'The requested resource could not be found, or a request was '
-            'received using an HTTP method that is not supported by the '
-            'mapped resource.',
-        'An element command failed because the referenced element is no '
-            'longer attached to the DOM.',
-        'An element command could not be completed because the element '
-            'is not visible on the page.',
-        'An element command could not be completed because the element is in '
-            'an invalid state (e.g. attempting to click a disabled element).',
-        'An unknown server-side error occurred while processing the command.',
-        'Expected',
-        'An attempt was made to select an element that cannot be selected.',
-        'NoSuchDocument',
-        'An error occurred while executing user supplied JavaScript.',
-        'NoScriptResult',
-        'An error occurred while searching for an element by XPath.',
-        'NoSuchCollection',
-        'An operation did not complete before its timeout expired.',
-        'NullPointer',
-        'A request to switch to a different window could not be satisfied '
-            'because the window could not be found.',
-        'An illegal attempt was made to set a cookie under a different '
-            'domain than the current page.',
-        'A request to set a cookie\'s value could not be satisfied.',
-        'A modal dialog was open, blocking this operation.',
-        'An attempt was made to operate on a modal dialog when one was '
-            'not open.',
-        'A script did not complete before its timeout expired.',
-        'The coordinates provided to an interactions operation are invalid.',
-        'IME was not available.',
-        'An IME engine could not be started.',
-        'Argument was an invalid selector (e.g. XPath/CSS).',
-        'A new session could not be created.',
-        'Target provided for a move action is out of bounds.'
-      ];
-    }
-    if (statusCode < 0 || statusCode > 32) {
-      type = 'External';
-      details = '';
-    } else {
-      type = _errorTypes[statusCode];
-      details = _errorDetails[statusCode];
-    }
-  }
-
-  String toString() {
-    return '$statusCode $type: $message $results\n$details';
-  }
-}
-
-/**
- * Base class for all WebDriver request classes. This class wraps up
- * an URL prefix (host, port, and initial path), and provides a client
- * function for doing HTTP requests with JSON payloads.
- */
-class WebDriverBase {
-
-  String _host;
-  int _port;
-  String _path;
-  String _url;
-
-  String get path => _path;
-  String get url => _url;
-
-  /**
-   * The default URL for WebDriver remote server is
-   * http://localhost:4444/wd/hub.
-   */
-  WebDriverBase.fromUrl([this._url = 'http://localhost:4444/wd/hub']) {
-    // Break out the URL components.
-    var re = new RegExp('[^:/]+://([^/]+)(/.*)');
-    var matches = re.firstMatch(_url);
-    _host = matches[1];
-    _path = matches[2];
-    var idx = _host.indexOf(':');
-    if (idx >= 0) {
-      _port = int.parse(_host.substring(idx+1));
-      _host = _host.substring(0, idx);
-    } else {
-      _port = 80;
-    }
-  }
-
-  WebDriverBase([
-      this._host = 'localhost',
-      this._port = 4444,
-      this._path = '/wd/hub']) {
-    _url = 'http://$_host:$_port$_path';
-  }
-
-  void _failRequest(Completer completer, error, [stackTrace]) {
-    if (completer != null) {
-      var trace = stackTrace != null ? stackTrace : getAttachedStackTrace(error);
-      completer.completeError(new WebDriverError(-1, error), trace);
-    }
-  }
-
-  /**
-   * Execute a request to the WebDriver server. [http_method] should be
-   * one of 'GET', 'POST', or 'DELETE'. [command] is the text to append
-   * to the base URL path to get the full URL. [params] are the additional
-   * parameters. If a [List] or [Map] they will be posted as JSON parameters.
-   * If a number or string, "/params" is appended to the URL.
-   */
-  void _serverRequest(String http_method, String command, Completer completer,
-                      {List successCodes, params, Function customHandler}) {
-    var status = 0;
-    var results = null;
-    var message = null;
-    if (successCodes == null) {
-      successCodes = [ 200, 204 ];
-    }
-    try {
-      var path = command;
-      if (params != null) {
-        if (params is num || params is String) {
-          path = '$path/$params';
-          params = null;
-        } else if (http_method != 'POST') {
-          throw new Exception(
-            'The http method called for ${command} is ${http_method} but it '
-            'must be POST if you want to pass the JSON params '
-            '${json.stringify(params)}');
-        }
-      }
-
-      var client = new HttpClient();
-      client.open(http_method, _host, _port, path).then((req) {
-        req.followRedirects = false;
-        req.headers.add(HttpHeaders.ACCEPT, "application/json");
-        req.headers.add(
-            HttpHeaders.CONTENT_TYPE, 'application/json;charset=UTF-8');
-        if (params != null) {
-          var body = json.stringify(params);
-          req.write(body);
-        }
-        req.close().then((rsp) {
-          List<int> body = new List<int>();
-          rsp.listen(body.addAll, onDone: () {
-            var value = null;
-            // For some reason we get a bunch of NULs on the end
-            // of the text and the json.parse blows up on these, so
-            // strip them.
-            // These NULs can be seen in the TCP packet, so it is not
-            // an issue with character encoding; it seems to be a bug
-            // in WebDriver stack.
-            results = new String.fromCharCodes(body)
-                .replaceAll(new RegExp('\u{0}*\$'), '');
-            if (!successCodes.contains(rsp.statusCode)) {
-              _failRequest(completer, 
-                  'Unexpected response ${rsp.statusCode}; $results');
-              completer = null;
-              return;
-            }
-            if (status == 0 && results.length > 0) {
-              // 4xx responses send plain text; others send JSON.
-              if (rsp.statusCode < 400) {
-                results = json.parse(results);
-                status = results['status'];
-              }
-              if (results is Map && (results as Map).containsKey('value')) {
-                value = results['value'];
-              }
-              if (value is Map && value.containsKey('message')) {
-                message = value['message'];
-              }
-            }
-            if (status == 0) {
-              if (customHandler != null) {
-                customHandler(rsp, value);
-              } else if (completer != null) {
-                completer.complete(value);
-              }
-            }
-          }, onError: (error) {
-            _failRequest(completer, error);
-            completer = null;
-          });
-        })
-        .catchError((error) {
-          _failRequest(completer, error);
-          completer = null;
-        });
-      })
-      .catchError((error) {
-        _failRequest(completer, error);
-        completer = null;
-      });
-    } catch (e, s) {
-      _failRequest(completer, e, s);
-      completer = null;
-    }
-  }
-
-  Future _get(String extraPath,
-      [Completer completer, Function customHandler]) {
-    if (completer == null) completer = new Completer();
-    _serverRequest('GET', '${_path}/$extraPath', completer,
-        customHandler: customHandler);
-    return completer.future;
-  }
-
-  Future _post(String extraPath, [params]) {
-    var completer = new Completer();
-    _serverRequest('POST', '${_path}/$extraPath', completer,
-        params: params);
-    return completer.future;
-  }
-
-  Future _delete(String extraPath) {
-    var completer = new Completer();
-    _serverRequest('DELETE', '${_path}/$extraPath', completer);
-    return completer.future;
-  }
-}
-
-class WebDriver extends WebDriverBase {
-
-  WebDriver(host, port, path) : super(host, port, path);
-
-  /**
-   * Create a new session. The server will attempt to create a session that
-   * most closely matches the desired and required capabilities. Required
-   * capabilities have higher priority than desired capabilities and must be
-   * set for the session to be created.
-   *
-   * The capabilities are:
-   *
-   * - browserName (String)  The name of the browser being used; should be one
-   *   of chrome|firefox|htmlunit|internet explorer|iphone.
-   *
-   * - version (String) The browser version, or the empty string if unknown.
-   *
-   * - platform (String) A key specifying which platform the browser is
-   *   running on. This value should be one of WINDOWS|XP|VISTA|MAC|LINUX|UNIX.
-   *   When requesting a new session, the client may specify ANY to indicate
-   *   any available platform may be used.
-   *
-   * - javascriptEnabled (bool) Whether the session supports executing user
-   *   supplied JavaScript in the context of the current page.
-   *
-   * - takesScreenshot (bool) Whether the session supports taking screenshots
-   *   of the current page.
-   *
-   * - handlesAlerts (bool) Whether the session can interact with modal popups,
-   *   such as window.alert and window.confirm.
-   *
-   * - databaseEnabled (bool) Whether the session can interact database storage.
-   *
-   * - locationContextEnabled (bool) Whether the session can set and query the
-   *   browser's location context.
-   *
-   * - applicationCacheEnabled (bool) Whether the session can interact with
-   *   the application cache.
-   *
-   * - browserConnectionEnabled (bool) Whether the session can query for the
-   *   browser's connectivity and disable it if desired.
-   *
-   * - cssSelectorsEnabled (bool) Whether the session supports CSS selectors
-   *   when searching for elements.
-   *
-   * - webStorageEnabled (bool) Whether the session supports interactions with
-   *   storage objects.
-   *
-   * - rotatable (bool) Whether the session can rotate the current page's
-   *   current layout between portrait and landscape orientations (only applies
-   *   to mobile platforms).
-   *
-   * - acceptSslCerts (bool) Whether the session should accept all SSL certs
-   *   by default.
-   *
-   * - nativeEvents (bool) Whether the session is capable of generating native
-   *   events when simulating user input.
-   *
-   * - proxy (proxy object) Details of any proxy to use. If no proxy is
-   *   specified, whatever the system's current or default state is used.
-   *
-   * The format of the proxy object is:
-   *
-   * - proxyType (String) The type of proxy being used. Possible values are:
-   *
-   *   direct - A direct connection - no proxy in use,
-   *
-   *   manual - Manual proxy settings configured,
-   *
-   *   pac - Proxy autoconfiguration from a URL),
-   *
-   *   autodetect (proxy autodetection, probably with WPAD),
-   *
-   *   system - Use system settings
-   *
-   * - proxyAutoconfigUrl (String) Required if proxyType == pac, Ignored
-   *   otherwise. Specifies the URL to be used for proxy autoconfiguration.
-   *
-   * - ftpProxy, httpProxy, sslProxy (String) (Optional, Ignored if
-   *   proxyType != manual) Specifies the proxies to be used for FTP, HTTP
-   *   and HTTPS requests respectively. Behaviour is undefined if a request
-   *   is made, where the proxy for the particular protocol is undefined,
-   *   if proxyType is manual.
-   *
-   * Potential Errors: SessionNotCreatedException (if a required capability
-   * could not be set).
-   */
-  Future<WebDriverSession> newSession([
-      browser = 'chrome', Map additional_capabilities]) {
-    var completer = new Completer();
-    if (additional_capabilities == null) {
-      additional_capabilities = {};
-    }
-
-    additional_capabilities['browserName'] = browser;
-
-    _serverRequest('POST', '${_path}/session', completer,
-        successCodes: [ 302 ],
-        customHandler: (r, v) {
-          var url = r.headers.value(HttpHeaders.LOCATION);
-          var session = new WebDriverSession.fromUrl(url);
-          completer.complete(session);
-        },
-        params: { 'desiredCapabilities': additional_capabilities });
-    return completer.future;
-  }
-
-  /** Get the set of currently active sessions. */
-  Future<List<WebDriverSession>> getSessions() {
-    var completer = new Completer();
-    return _get('sessions', completer, (r, v) {
-      var _sessions = [];
-      for (var session in v) {
-        var url = 'http://${this._host}:${this._port}${this._path}/'
-            'session/${session["id"]}';
-        _sessions.add(new WebDriverSession.fromUrl(url));
-      }
-      completer.complete(_sessions);
-    });
-  }
-
-  /** Query the server's current status. */
-  Future<Map> getStatus() => _get('status');
-}
-
-class WebDriverWindow extends WebDriverBase {
-  WebDriverWindow.fromUrl(url) : super.fromUrl(url);
-
-  /** Get the window size. */
-  Future<Map> getSize() => _get('size');
-
-  /**
-   * Set the window size. Note that this is flaky and often
-   * has no effect.
-   *
-   * Potential Errors:
-   *   NoSuchWindow - If the specified window cannot be found.
-   */
-  Future<String> setSize(int width, int height) =>
-      _post('size', { 'width': width, 'height': height });
-
-  /** Get the window position. */
-  Future<Map> getPosition() => _get('position');
-
-  /**
-   * Set the window position. Note that this is flaky and often
-   * has no effect.
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future setPosition(int x, int y) =>
-      _post('position', { 'x': x, 'y': y });
-
-  /** Maximize the specified window if not already maximized. */
-  Future maximize() => _post('maximize');
-}
-
-class WebDriverSession extends WebDriverBase {
-  WebDriverSession.fromUrl(url) : super.fromUrl(url);
-
-  /** Close the session. */
-  Future close() => _delete('');
-
-  /** Get the session capabilities. See [newSession] for details. */
-  Future<Map> getCapabilities() => _get('');
-
-  /**
-   * Configure the amount of time in milliseconds that a script can execute
-   * for before it is aborted and a Timeout error is returned to the client.
-   */
-  Future setScriptTimeout(t) =>
-      _post('timeouts', { 'type': 'script', 'ms': t });
-
-  /*Future<String> setImplicitWaitTimeout(t) =>
-      simplePost('timeouts', { 'type': 'implicit', 'ms': t });*/
-
-  /**
-   * Configure the amount of time in milliseconds that a page can load for
-   * before it is aborted and a Timeout error is returned to the client.
-   */
-  Future setPageLoadTimeout(t) =>
-      _post('timeouts', { 'type': 'page load', 'ms': t });
-
-  /**
-   * Set the amount of time, in milliseconds, that asynchronous scripts
-   * executed by /session/:sessionId/execute_async are permitted to run
-   * before they are aborted and a Timeout error is returned to the client.
-   */
-  Future setAsyncScriptTimeout(t) =>
-      _post('timeouts/async_script', { 'ms': t });
-
-  /**
-   * Set the amount of time the driver should wait when searching for elements.
-   * When searching for a single element, the driver should poll the page until
-   * an element is found or the timeout expires, whichever occurs first. When
-   * searching for multiple elements, the driver should poll the page until at
-   * least one element is found or the timeout expires, at which point it should
-   * return an empty list.
-   *
-   * If this command is never sent, the driver should default to an implicit
-   * wait of 0ms.
-   */
-  Future setImplicitWaitTimeout(t) =>
-      _post('timeouts/implicit_wait', { 'ms': t });
-
-  /**
-   * Retrieve the current window handle.
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future<String> getWindowHandle() => _get('window_handle');
-
-  /**
-   * Retrieve a [WebDriverWindow] for the specified window. We don't
-   * have to use a Future here but do so to be consistent.
-   */
-  Future<WebDriverWindow> getWindow([handle = 'current']) {
-    var completer = new Completer();
-    completer.complete(new WebDriverWindow.fromUrl('${_url}/window/$handle'));
-    return completer.future;
-  }
-
-  /** Retrieve the list of all window handles available to the session. */
-  Future<List<String>> getWindowHandles() => _get('window_handles');
-
-  /**
-   * Retrieve the URL of the current page.
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future<String> getUrl() => _get('url');
-
-  /**
-   * Navigate to a new URL.
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future setUrl(String url) => _post('url', { 'url': url });
-
-  /**
-   * Navigate forwards in the browser history, if possible.
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future navigateForward() => _post('forward');
-
-  /**
-   * Navigate backwards in the browser history, if possible.
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future navigateBack() => _post('back');
-
-  /**
-   * Refresh the current page.
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future refresh() => _post('refresh');
-
-  /**
-   * Inject a snippet of JavaScript into the page for execution in the context
-   * of the currently selected frame. The executed script is assumed to be
-   * synchronous and the result of evaluating the script is returned to the
-   * client.
-   *
-   * The script argument defines the script to execute in the form of a
-   * function body. The value returned by that function will be returned to
-   * the client. The function will be invoked with the provided args array
-   * and the values may be accessed via the arguments object in the order
-   * specified.
-   *
-   * Arguments may be any JSON-primitive, array, or JSON object. JSON objects
-   * that define a WebElement reference will be converted to the corresponding
-   * DOM element. Likewise, any WebElements in the script result will be
-   * returned to the client as WebElement JSON objects.
-   *
-   * Potential Errors: NoSuchWindow, StaleElementReference, JavaScriptError.
-   */
-  Future execute(String script, [List args]) {
-    if (args == null) args = [];
-    return _post('execute', { 'script': script, 'args': args });
-  }
-
-  /**
-   * Inject a snippet of JavaScript into the page for execution in the context
-   * of the currently selected frame. The executed script is assumed to be
-   * asynchronous and must signal that it is done by invoking the provided
-   * callback, which is always provided as the final argument to the function.
-   * The value to this callback will be returned to the client.
-   *
-   * Asynchronous script commands may not span page loads. If an unload event
-   * is fired while waiting for a script result, an error should be returned
-   * to the client.
-   *
-   * The script argument defines the script to execute in the form of a function
-   * body. The function will be invoked with the provided args array and the
-   * values may be accessed via the arguments object in the order specified.
-   * The final argument will always be a callback function that must be invoked
-   * to signal that the script has finished.
-   *
-   * Arguments may be any JSON-primitive, array, or JSON object. JSON objects
-   * that define a WebElement reference will be converted to the corresponding
-   * DOM element. Likewise, any WebElements in the script result will be
-   * returned to the client as WebElement JSON objects.
-   *
-   * Potential Errors: NoSuchWindow, StaleElementReference, Timeout (controlled
-   * by the [setAsyncScriptTimeout] command), JavaScriptError (if the script
-   * callback is not invoked before the timout expires).
-   */
-  Future executeAsync(String script, [List args]) {
-    if (args == null) args = [];
-    return _post('execute_async', { 'script': script, 'args': args });
-  }
-
-  /**
-   * Take a screenshot of the current page (PNG).
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future<List<int>> getScreenshot([fname]) {
-    var completer = new Completer();
-    return _get('screenshot', completer, (r, v) {
-      var image = Base64Decoder.decode(v);
-      if (fname != null) {
-        writeBytesToFile(fname, image);
-      }
-      completer.complete(image);
-    });
-  }
-
-  /**
-   * List all available IME (Input Method Editor) engines on the machine.
-   * To use an engine, it has to be present in this list.
-   *
-   * Potential Errors: ImeNotAvailableException.
-   */
-  Future<List<String>> getAvailableImeEngines() =>
-      _get('ime/available_engines');
-
-  /**
-   * Get the name of the active IME engine. The name string is
-   * platform specific.
-   *
-   * Potential Errors: ImeNotAvailableException.
-   */
-  Future<String> getActiveImeEngine() => _get('ime/active_engine');
-
-  /**
-   * Indicates whether IME input is active at the moment (not if
-   * it's available).
-   *
-   * Potential Errors: ImeNotAvailableException.
-   */
-  Future<bool> getIsImeActive() => _get('ime/activated');
-
-  /**
-   * De-activates the currently-active IME engine.
-   *
-   * Potential Errors: ImeNotAvailableException.
-   */
-  Future deactivateIme() => _post('ime/deactivate');
-
-  /**
-   * Make an engine that is available (appears on the list returned by
-   * getAvailableEngines) active. After this call, the engine will be added
-   * to the list of engines loaded in the IME daemon and the input sent using
-   * sendKeys will be converted by the active engine. Note that this is a
-   * platform-independent method of activating IME (the platform-specific way
-   * being using keyboard shortcuts).
-   *
-   * Potential Errors: ImeActivationFailedException, ImeNotAvailableException.
-   */
-  Future activateIme(String engine) =>
-      _post('ime/activate', { 'engine': engine });
-
-  /**
-   * Change focus to another frame on the page. If the frame id is null,
-   * the server should switch to the page's default content.
-   * [id] is the Identifier for the frame to change focus to, and can be
-   * a string, number, null, or JSON Object.
-   *
-   * Potential Errors: NoSuchWindow, NoSuchFrame.
-   */
-  Future setFrameFocus(id) => _post('frame', { 'id': id });
-
-  /**
-   * Change focus to another window. The window to change focus to may be
-   * specified by [name], which is its server assigned window handle, or
-   * the value of its name attribute.
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future setWindowFocus(name) => _post('window', { 'name': name });
-
-  /**
-   * Close the current window.
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future closeWindow() => _delete('window');
-
-  /**
-   * Retrieve all cookies visible to the current page.
-   *
-   * The returned List contains Maps with the following keys:
-   *
-   * 'name' - The name of the cookie.
-   *
-   * 'value' - The cookie value.
-   *
-   * The following keys may optionally be present:
-   *
-   * 'path' - The cookie path.
-   *
-   * 'domain' - The domain the cookie is visible to.
-   *
-   * 'secure' - Whether the cookie is a secure cookie.
-   *
-   * 'expiry' - When the cookie expires, seconds since midnight, 1/1/1970 UTC.
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future<List<Map>> getCookies() => _get('cookie');
-
-  /**
-   * Set a cookie. If the cookie path is not specified, it should be set
-   * to "/". Likewise, if the domain is omitted, it should default to the
-   * current page's domain. See [getCookies] for the structure of a cookie
-   * Map.
-   */
-  Future setCookie(Map cookie) => _post('cookie', { 'cookie': cookie });
-
-  /**
-   * Delete all cookies visible to the current page.
-   *
-   * Potential Errors: InvalidCookieDomain (the cookie's domain is not
-   * visible from the current page), NoSuchWindow, UnableToSetCookie (if
-   * attempting to set a cookie on a page that does not support cookies,
-   * e.g. pages with mime-type text/plain).
-   */
-  Future deleteCookies() => _delete('cookie');
-
-  /**
-   * Delete the cookie with the given [name]. This command should be a no-op
-   * if there is no such cookie visible to the current page.
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future deleteCookie(String name) => _delete('cookie/$name');
-
-  /**
-   * Get the current page source.
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future<String> getPageSource() => _get('source');
-
-  /**
-   * Get the current page title.
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future<String> getPageTitle() => _get('title');
-
-  /**
-   * Search for an element on the page, starting from the document root. The
-   * first matching located element will be returned as a WebElement JSON
-   * object (a [Map] with an 'ELEMENT' key whose value should be used to
-   * identify the element in further requests). The [strategy] should be
-   * one of:
-   *
-   * 'class name' - Returns an element whose class name contains the search
-   *    value; compound class names are not permitted.
-   *
-   * 'css selector' - Returns an element matching a CSS selector.
-   *
-   * 'id' - Returns an element whose ID attribute matches the search value.
-   *
-   * 'name' - Returns an element whose NAME attribute matches the search value.
-   *
-   * 'link text' - Returns an anchor element whose visible text matches the
-   *   search value.
-   *
-   * 'partial link text' - Returns an anchor element whose visible text
-   *   partially matches the search value.
-   *
-   * 'tag name' - Returns an element whose tag name matches the search value.
-   *
-   * 'xpath' - Returns an element matching an XPath expression.
-   *
-   * Potential Errors: NoSuchWindow, NoSuchElement, XPathLookupError (if
-   * using XPath and the input expression is invalid).
-   */
-  Future<String> findElement(String strategy, String searchValue) =>
-      _post('element', { 'using': strategy, 'value' : searchValue });
-
-  /**
-   * Search for multiple elements on the page, starting from the document root.
-   * The located elements will be returned as WebElement JSON objects. See
-   * [findElement] for the locator strategies that each server supports.
-   * Elements are be returned in the order located in the DOM.
-   *
-   * Potential Errors: NoSuchWindow, XPathLookupError.
-   */
-  Future<List<String>> findElements(String strategy, String searchValue) =>
-      _post('elements', { 'using': strategy, 'value' : searchValue });
-
-  /**
-   * Get the element on the page that currently has focus. The element will
-   * be returned as a WebElement JSON object.
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future<String> getElementWithFocus() => _post('element/active');
-
-  /**
-   * Search for an element on the page, starting from element with id [id].
-   * The located element will be returned as WebElement JSON objects. See
-   * [findElement] for the locator strategies that each server supports.
-   *
-   * Potential Errors: NoSuchWindow, XPathLookupError.
-   */
-  Future<String>
-      findElementFromId(String id, String strategy, String searchValue) =>
-          _post('element/$id/element',
-              { 'using': strategy, 'value' : searchValue });
-
-  /**
-   * Search for multiple elements on the page, starting from the element with
-   * id [id].The located elements will be returned as WebElement JSON objects.
-   * See [findElement] for the locator strategies that each server supports.
-   * Elements are be returned in the order located in the DOM.
-   *
-   * Potential Errors: NoSuchWindow, XPathLookupError.
-   */
-  Future<List<String>>
-      findElementsFromId(String id, String strategy, String searchValue) =>
-          _post('element/$id/elements',
-              { 'using': strategy, 'value' : searchValue });
-  /**
-   * Click on an element specified by [id].
-   *
-   * Potential Errors: NoSuchWindow, StaleElementReference, ElementNotVisible
-   * (if the referenced element is not visible on the page, either hidden
-   * by CSS, or has 0-width or 0-height).
-   */
-  Future clickElement(String id) => _post('element/$id/click');
-
-  /**
-   * Submit a FORM element. The submit command may also be applied to any
-   * element that is a descendant of a FORM element.
-   *
-   * Potential Errors: NoSuchWindow, StaleElementReference.
-   */
-  Future submit(String id) => _post('element/$id/submit');
-
-  /** Returns the visible text for the element.
-   *
-   * Potential Errors: NoSuchWindow, StaleElementReference.
-   */
-  Future<String> getElementText(String id) => _get('element/$id/text');
-
-  /**
-   * Send a sequence of key strokes to an element.
-   *
-   * Any UTF-8 character may be specified, however, if the server does not
-   * support native key events, it will simulate key strokes for a standard
-   * US keyboard layout. The Unicode Private Use Area code points,
-   * 0xE000-0xF8FF, are used to represent pressable, non-text keys:
-   *
-   * NULL - U+E000
-   *
-   * Cancel - U+E001
-   *
-   * Help - U+E002
-   *
-   * Backspace - U+E003
-   *
-   * Tab - U+E004
-   *
-   * Clear - U+E005
-   *
-   * Return - U+E006
-   *
-   * Enter - U+E007
-   *
-   * Shift - U+E008
-   *
-   * Control - U+E009
-   *
-   * Alt - U+E00A
-   *
-   * Pause - U+E00B
-   *
-   * Escape - U+E00C
-   *
-   * Space - U+E00D
-   *
-   * Pageup - U+E00E
-   *
-   * Pagedown - U+E00F
-   *
-   * End - U+E010
-   *
-   * Home - U+E011
-   *
-   * Left arrow - U+E012
-   *
-   * Up arrow - U+E013
-   *
-   * Right arrow - U+E014
-   *
-   * Down arrow - U+E015
-   *
-   * Insert - U+E016
-   *
-   * Delete - U+E017
-   *
-   * Semicolon - U+E018
-   *
-   * Equals - U+E019
-   *
-   * Numpad 0..9 - U+E01A..U+E023
-   *
-   * Multiply - U+E024
-   *
-   * Add - U+E025
-   *
-   * Separator - U+E026
-   *
-   * Subtract - U+E027
-   *
-   * Decimal - U+E028
-   *
-   * Divide - U+E029
-   *
-   * F1..F12 - U+E031..U+E03C
-   *
-   * Command/Meta U+E03D
-   *
-   * The server processes the key sequence as follows:
-   *
-   * - Each key that appears on the keyboard without requiring modifiers is
-   *   sent as a keydown followed by a key up.
-   *
-   * - If the server does not support native events and must simulate key
-   *   strokes with JavaScript, it will generate keydown, keypress, and keyup
-   *   events, in that order. The keypress event is only fired when the
-   *   corresponding key is for a printable character.
-   *
-   * - If a key requires a modifier key (e.g. "!" on a standard US keyboard),
-   *   the sequence is: modifier down, key down, key up, modifier up, where
-   *   key is the ideal unmodified key value (using the previous example,
-   *   a "1").
-   *
-   * - Modifier keys (Ctrl, Shift, Alt, and Command/Meta) are assumed to be
-   *  "sticky"; each modifier is held down (e.g. only a keydown event) until
-   *   either the modifier is encountered again in the sequence, or the NULL
-   *   (U+E000) key is encountered.
-   *
-   * - Each key sequence is terminated with an implicit NULL key.
-   *   Subsequently, all depressed modifier keys are released (with
-   *   corresponding keyup events) at the end of the sequence.
-   *
-   * Potential Errors: NoSuchWindow, StaleElementReference, ElementNotVisible.
-   */
-  Future sendKeyStrokesToElement(String id, List<String> keys) =>
-      _post('element/$id/value', { 'value': keys });
-
-  /**
-   * Send a sequence of key strokes to the active element. This command is
-   * similar to [sendKeyStrokesToElement] command in every aspect except the
-   * implicit termination: The modifiers are not released at the end of the
-   * call. Rather, the state of the modifier keys is kept between calls,
-   * so mouse interactions can be performed while modifier keys are depressed.
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future sendKeyStrokes(List<String> keys) => _post('keys', { 'value': keys });
-
-  /**
-   * Query for an element's tag name, as a lower-case string.
-   *
-   * Potential Errors: NoSuchWindow, StaleElementReference.
-   */
-  Future<String> getElementTagName(String id) => _get('element/$id/name');
-
-  /**
-   * Clear a TEXTAREA or text INPUT element's value.
-   *
-   * Potential Errors: NoSuchWindow, StaleElementReference, ElementNotVisible,
-   * InvalidElementState.
-   */
-  Future clearValue(String id) => _post('/element/$id/clear');
-
-  /**
-   * Determine if an OPTION element, or an INPUT element of type checkbox
-   * or radiobutton is currently selected.
-   *
-   * Potential Errors: NoSuchWindow, StaleElementReference.
-   */
-  Future<bool> isSelected(String id) => _get('element/$id/selected');
-
-  /**
-   * Determine if an element is currently enabled.
-   *
-   * Potential Errors: NoSuchWindow, StaleElementReference.
-   */
-  Future<bool> isEnabled(String id) => _get('element/$id/enabled');
-
-  /**
-   * Get the value of an element's attribute, or null if it has no such
-   * attribute.
-   *
-   * Potential Errors: NoSuchWindow, StaleElementReference.
-   */
-  Future<String> getAttribute(String id, String attribute) =>
-      _get('element/$id/attribute/$attribute');
-
-  /**
-   * Test if two element IDs refer to the same DOM element.
-   *
-   * Potential Errors: NoSuchWindow, StaleElementReference.
-   */
-  Future<bool> areSameElement(String id, String other) =>
-      _get('element/$id/equals/$other');
-
-  /**
-   * Determine if an element is currently displayed.
-   *
-   * Potential Errors: NoSuchWindow, StaleElementReference.
-   */
-  Future<bool> isDiplayed(String id) => _get('element/$id/displayed');
-
-  /**
-   * Determine an element's location on the page. The point (0, 0) refers to
-   * the upper-left corner of the page. The element's coordinates are returned
-   * as a [Map] object with x and y properties.
-   *
-   * Potential Errors: NoSuchWindow, StaleElementReference.
-   */
-  Future<Map> getElementLocation(String id) => _get('element/$id/location');
-
-  /**
-   * Determine an element's size in pixels. The size will be returned as a
-   * [Map] object with width and height properties.
-   *
-   * Potential Errors: NoSuchWindow, StalElementReference.
-   */
-  Future<Map> getElementSize(String id) => _get('element/$id/size');
-
-  /**
-   * Query the value of an element's computed CSS property. The CSS property
-   * to query should be specified using the CSS property name, not the
-   * JavaScript property name (e.g. background-color instead of
-   * backgroundColor).
-   *
-   * Potential Errors: NoSuchWindow, StaleElementReference.
-   */
-  Future<String> getElementCssProperty(String id, String property) =>
-      _get('element/$id/css/$property');
-
-  /**
-   * Get the current browser orientation ('LANDSCAPE' or 'PORTRAIT').
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future<String> getBrowserOrientation() => _get('orientation');
-
-  /**
-   * Gets the text of the currently displayed JavaScript alert(), confirm(),
-   * or prompt() dialog.
-   *
-   * Potential Errors: NoAlertPresent.
-   */
-  Future<String> getAlertText() => _get('alert_text');
-
-  /**
-   * Sends keystrokes to a JavaScript prompt() dialog.
-   *
-   * Potential Errors: NoAlertPresent.
-   */
-  Future sendKeyStrokesToPrompt(String text) =>
-      _post('alert_text', { 'text': text });
-
-  /**
-   * Accepts the currently displayed alert dialog. Usually, this is equivalent
-   * to clicking on the 'OK' button in the dialog.
-   *
-   * Potential Errors: NoAlertPresent.
-   */
-  Future acceptAlert() => _post('accept_alert');
-
-  /**
-   * Dismisses the currently displayed alert dialog. For confirm() and prompt()
-   * dialogs, this is equivalent to clicking the 'Cancel' button. For alert()
-   * dialogs, this is equivalent to clicking the 'OK' button.
-   *
-   * Potential Errors: NoAlertPresent.
-   */
-  Future dismissAlert() => _post('dismiss_alert');
-
-  /**
-   * Move the mouse by an offset relative to a specified element. If no element
-   * is specified, the move is relative to the current mouse cursor. If an
-   * element is provided but no offset, the mouse will be moved to the center
-   * of the element. If the element is not visible, it will be scrolled
-   * into view.
-   */
-  Future moveTo(String id, int x, int y) {
-    var json = {};
-    if (id != null) {
-      json['element'] = id;
-    }
-    if (x != null) {
-      json['xoffset'] = x;
-    }
-    if (y != null) {
-      json['yoffset'] = y;
-    }
-    return _post('moveto', json);
-  }
-
-  /**
-   * Click a mouse button (at the coordinates set by the last [moveTo] command).
-   * Note that calling this command after calling [buttonDown] and before
-   * calling [buttonUp] (or any out-of-order interactions sequence) will yield
-   * undefined behaviour).
-   *
-   * [button] should be 0 for left, 1 for middle, or 2 for right.
-   */
-  Future clickMouse([button = 0]) => _post('click', { 'button' : button });
-
-  /**
-   * Click and hold the left mouse button (at the coordinates set by the last
-   * [moveTo] command). Note that the next mouse-related command that should
-   * follow is [buttonDown]. Any other mouse command (such as [click] or
-   * another call to [buttonDown]) will yield undefined behaviour.
-   *
-   * [button] should be 0 for left, 1 for middle, or 2 for right.
-   */
-  Future buttonDown([button = 0]) => _post('click', { 'button' : button });
-
-  /**
-   * Releases the mouse button previously held (where the mouse is currently
-   * at). Must be called once for every [buttonDown] command issued. See the
-   * note in [click] and [buttonDown] about implications of out-of-order
-   * commands.
-   *
-   * [button] should be 0 for left, 1 for middle, or 2 for right.
-   */
-  Future buttonUp([button = 0]) => _post('click', { 'button' : button });
-
-  /** Double-clicks at the current mouse coordinates (set by [moveTo]). */
-  Future doubleClick() => _post('doubleclick');
-
-  /** Single tap on the touch enabled device on the element with id [id]. */
-  Future touchClick(String id) => _post('touch/click', { 'element': id });
-
-  /** Finger down on the screen. */
-  Future touchDown(int x, int y) => _post('touch/down', { 'x': x, 'y': y });
-
-  /** Finger up on the screen. */
-  Future touchUp(int x, int y) => _post('touch/up', { 'x': x, 'y': y }); 
-
-  /** Finger move on the screen. */
-  Future touchMove(int x, int y) => _post('touch/move', { 'x': x, 'y': y });
-
-  /**
-   * Scroll on the touch screen using finger based motion events. If [id] is
-   * specified, scrolling will start at a particular screen location.
-   */
-  Future touchScroll(int xOffset, int yOffset, [String id = null]) {
-    if (id == null) {
-      return _post('touch/scroll', { 'xoffset': xOffset, 'yoffset': yOffset });
-    } else {
-      return _post('touch/scroll',
-          { 'element': id, 'xoffset': xOffset, 'yoffset': yOffset });
-    }
-  }
-
-  /** Double tap on the touch screen using finger motion events. */
-  Future touchDoubleClick(String id) =>
-      _post('touch/doubleclick', { 'element': id });
-
-  /** Long press on the touch screen using finger motion events. */
-  Future touchLongClick(String id) =>
-      _post('touch/longclick', { 'element': id });
-
-  /**
-   * Flick on the touch screen using finger based motion events, starting
-   * at a particular screen location. [speed] is in pixels-per-second.
-   */
-  Future touchFlickFrom(String id, int xOffset, int yOffset, int speed) =>
-          _post('touch/flick',
-              { 'element': id, 'xoffset': xOffset, 'yoffset': yOffset,
-                        'speed': speed });
-
-  /**
-   * Flick on the touch screen using finger based motion events. Use this
-   * instead of [touchFlickFrom] if you don'tr care where the flick starts.
-   */
-  Future touchFlick(int xSpeed, int ySpeed) =>
-      _post('touch/flick', { 'xSpeed': xSpeed, 'ySpeed': ySpeed });
-
-  /**
-   * Get the current geo location. Returns a [Map] with latitude,
-   * longitude and altitude properties.
-   */
-  Future<Map> getGeolocation() => _get('location');
-
-  /** Set the current geo location. */
-  Future setLocation(double latitude, double longitude, double altitude) =>
-          _post('location',
-              { 'latitude': latitude,
-                'longitude': longitude,
-                'altitude': altitude });
-
-  /**
-   * Only a few drivers actually support the JSON storage commands.
-   * Currently it looks like this is the Android and iPhone drivers only.
-   * For the rest, we can achieve a similar effect with Javascript
-   * execution. The flag below is used to control whether to do this.
-   */
-  bool useJavascriptForStorageAPIs = true;
-
-  /**
-   * Get all keys of the local storage. Completes with [null] if there
-   * are no keys or the keys could not be retrieved.
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future<List<String>> getLocalStorageKeys() {
-    if (useJavascriptForStorageAPIs) {
-      return execute(
-          'var rtn = [];'
-          'for (var i = 0; i < window.localStorage.length; i++)'
-          '  rtn.push(window.localStorage.key(i));'
-          'return rtn;'); 
-    } else {
-      return _get('local_storage');
-    }
-  }
-
-  /**
-   * Set the local storage item for the given key.
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future setLocalStorageItem(String key, String value) {
-    if (useJavascriptForStorageAPIs) {
-      return execute('window.localStorage.setItem(arguments[0], arguments[1]);',
-          [key, value]); 
-    } else {
-      return _post('local_storage', { 'key': key, 'value': value });
-    }
-  }
-
-  /**
-   * Clear the local storage.
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future clearLocalStorage() {
-    if (useJavascriptForStorageAPIs) {
-      return execute('return window.localStorage.clear();');
-    } else {
-      return _delete('local_storage');
-    }
-  }
-
-  /**
-   * Get the local storage item for the given key.
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future<String> getLocalStorageValue(String key) {
-    if (useJavascriptForStorageAPIs) {
-      return execute('return window.localStorage.getItem(arguments[0]);',
-          [key]); 
-    } else {
-      return _get('local_storage/key/$key');
-    }
-  }
-
-  /**
-   * Delete the local storage item for the given key.
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future deleteLocalStorageValue(String key) {
-    if (useJavascriptForStorageAPIs) {
-      return execute('return window.localStorage.removeItem(arguments[0]);',
-          [key]); 
-    } else {
-      return _delete('local_storage/key/$key');
-    }
-  }
-
-  /**
-   * Get the number of items in the local storage.
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future<int> getLocalStorageCount() {
-    if (useJavascriptForStorageAPIs) {
-      return execute('return window.localStorage.length;'); 
-    } else {
-      return _get('local_storage/size');
-    }
-  }
-
-  /**
-   * Get all keys of the session storage.
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future<List<String>> getSessionStorageKeys() {
-    if (useJavascriptForStorageAPIs) {
-      return execute(
-          'var rtn = [];'
-          'for (var i = 0; i < window.sessionStorage.length; i++)'
-          '  rtn.push(window.sessionStorage.key(i));'
-          'return rtn;'); 
-    } else {
-      return _get('session_storage');
-    }
-  }
-
-  /**
-   * Set the sessionstorage item for the given key.
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future setSessionStorageItem(String key, String value) {
-    if (useJavascriptForStorageAPIs) {
-      return execute(
-          'window.sessionStorage.setItem(arguments[0], arguments[1]);',
-              [key, value]); 
-    } else {
-      return _post('session_storage', { 'key': key, 'value': value });
-    }
-  }
-
-  /**
-   * Clear the session storage.
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future clearSessionStorage() {
-    if (useJavascriptForStorageAPIs) {
-      return execute('window.sessionStorage.clear();');
-    } else {
-      return _delete('session_storage');
-    }
-  }
-
-  /**
-   * Get the session storage item for the given key.
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future<String> getSessionStorageValue(String key) {
-    if (useJavascriptForStorageAPIs) {
-      return execute('return window.sessionStorage.getItem(arguments[0]);',
-          [key]); 
-    } else {
-      return _get('session_storage/key/$key');
-    }
-  }
-
-  /**
-   * Delete the session storage item for the given key.
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future deleteSessionStorageValue(String key) {
-    if (useJavascriptForStorageAPIs) {
-      return execute('return window.sessionStorage.removeItem(arguments[0]);',
-          [key]); 
-    } else {
-      return _delete('session_storage/key/$key');
-    }
-  }
-
-  /**
-   * Get the number of items in the session storage.
-   *
-   * Potential Errors: NoSuchWindow.
-   */
-  Future<String> getSessionStorageCount() {
-    if (useJavascriptForStorageAPIs) {
-      return execute('return window.sessionStorage.length;');
-    } else {
-      return _get('session_storage/size');
-    }
-  }
-
-  /**
-   * Get available log types ('client', 'driver', 'browser', 'server').
-   * This works with Firefox but Chrome returns a 500 response due to a 
-   * bad cast.
-   */
-  Future<List<String>> getLogTypes() => _get('log/types');
-
-  /**
-   * Get the log for a given log type. Log buffer is reset after each request.
-   * Each log entry is a [Map] with these fields:
-   *
-   * 'timestamp' (int) - The timestamp of the entry.
-   * 'level' (String) - The log level of the entry, for example, "INFO".
-   * 'message' (String) - The log message.
-   *
-   * This works with Firefox but Chrome returns a 500 response due to a 
-   * bad cast.
-   */
-  Future<List<Map>> getLogs(String type) => _post('log', { 'type': type });
-}
diff --git a/pkg/webdriver/pubspec.yaml b/pkg/webdriver/pubspec.yaml
deleted file mode 100644
index 8520cec..0000000
--- a/pkg/webdriver/pubspec.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-name: webdriver
-author: "Dart Team <misc@dartlang.org>"
-homepage: http://www.dartlang.org
-description: >
- Provides WedDriver bindings for Dart. These use the WebDriver JSON
- interface, and as such, require the use of the WebDriver remote server.
-
diff --git a/pkg/webdriver/test/webdriver_test.dart b/pkg/webdriver/test/webdriver_test.dart
deleted file mode 100644
index 3c4d500..0000000
--- a/pkg/webdriver/test/webdriver_test.dart
+++ /dev/null
@@ -1,466 +0,0 @@
-library webdriver_test;
-import 'dart:async' show getAttachedStackTrace;
-import 'package:webdriver/webdriver.dart';
-import 'package:unittest/unittest.dart';
-import 'package:unittest/vm_config.dart';
-
-WebDriver web_driver;
-
-/**
- * These tests are not expected to be run as part of normal automated testing,
- * as they are slow and they have external dependencies.
- */
-main() {
-  useVMConfiguration();
-
-  var web_driver = new WebDriver('localhost', 4444, '/wd/hub');
-  var session = null;
-
-  var exceptionHandler = (error) {
-    var trace = getAttachedStackTrace(error);
-    String traceString = trace == null ? "" : trace.toString();
-    if (error is TestFailure) {
-      currentTestCase.fail(error.message, traceString);
-    } else {
-      currentTestCase.error("Unexpected error: ${error}", traceString);
-    }
-    if (session != null) {
-      var s = session;
-      session = null;
-      s.close();
-    }
-  };
-
-  group('Sessionless tests', () {
-    test('Get status', () {
-      return web_driver.getStatus()
-          .then((status) {
-            expect(status['sessionId'], isNull);
-          })
-          .catchError(exceptionHandler);
-    });
-  });
-
-  group('Basic session tests', () {
-    test('Create session/get capabilities', () {
-      return web_driver.newSession('chrome')
-          .then((_session) {
-            expect(_session, isNotNull);
-            session = _session;
-            return session.getCapabilities();
-          })
-          .then((capabilities) {
-            expect(capabilities, isNotNull);
-            expect(capabilities['browserName'], equals('chrome'));
-            return session.close();
-          })
-          .then((_) {
-            session = null;
-          })
-          .catchError(exceptionHandler);
-    });
-
-    test('Create and get multiple sessions', () {
-      var session2 = null;
-      return web_driver.newSession('chrome')
-          .then((_session) {
-            session = _session;
-            return web_driver.newSession('chrome');
-          })
-          .then((_session) {
-            session2 = _session;
-            return web_driver.getSessions();
-          })
-          .then((sessions) {
-            expect(sessions.length, greaterThanOrEqualTo(2));
-            return session2.close();
-          })
-          .then((_) {
-            return session.close();
-          })
-          .then((_) {
-            session = null;
-          })
-          .catchError(exceptionHandler);
-    });
-
-    test('Set/get url', () {
-      return web_driver.newSession('chrome')
-          .then((_session) {
-            session = _session;
-            return session.setUrl('http://translate.google.com');
-          })
-          .then((_) {
-            return session.getUrl();
-          })
-          .then((u) {
-            expect(u, equals('http://translate.google.com/'));
-            return session.close();
-          })
-          .then((_) {
-            session = null;
-          })
-          .catchError(exceptionHandler);
-    });
-
-    test('Navigation', () {
-      return web_driver.newSession('chrome')
-          .then((_session) {
-            session = _session;
-            return session.setUrl('http://translate.google.com');
-          })
-          .then((_) {
-            return session.setUrl('http://www.google.com');
-          })
-          .then((_) {
-            return session.navigateBack();
-          })
-          .then((_) {
-            return session.getUrl();
-          })
-          .then((u) {
-            expect(u, equals('http://translate.google.com/'));
-            return session.navigateForward();
-          })
-          .then((_) {
-            return session.getUrl();
-          })
-          .then((url) {
-            expect(url, equals('http://www.google.com/'));
-            return session.close();
-          })
-          .then((_) {
-            session = null;
-          })
-          .catchError(exceptionHandler);
-    });
-
-    test('Take a Screen shot', () {
-      return web_driver.newSession('chrome')
-          .then((_session) {
-            session = _session;
-            return session.setUrl('http://translate.google.com');
-          })
-          .then((_) {
-            return session.getScreenshot();
-          })
-          .then((image) {
-            expect(image.length, greaterThan(10000));
-            return session.close();
-          })
-          .then((_) {
-            session = null;
-          })
-          .catchError(exceptionHandler);
-    });
-  });
-
-  group('Window tests', () {
-    test('Window position and size', () {
-      // We don't validate the results. Setting size and position is flaky.
-      // I tried with the Selenium python client code and found it had the
-      // same issue, so this is not a bug in the Dart code.
-      var window;
-      return web_driver.newSession('chrome')
-          .then((_session) {
-            session = _session;
-            return session.getWindow();
-          })
-          .then((_window) {
-            window = _window;
-            return window.setSize(220, 400);
-          })
-          .then((_) {
-            return window.getSize();
-          })
-          .then((ws) {
-            return window.setPosition(100, 80);
-          })
-          .then((_) {
-            return window.getPosition();
-          })
-          .then((wp) {
-            return session.close();
-          })
-          .then((_) {
-            session = null;
-          })
-          .catchError(exceptionHandler);
-    });
-  });
-
-  group('Cookie tests', () {
-    test('Create/query/delete', () {
-      var window;
-      var numcookies;
-      return web_driver.newSession('chrome')
-          .then((_session) {
-            session = _session;
-            // Must go to a web page first to set a cookie.
-            return session.setUrl('http://translate.google.com');
-          })
-          .then((_) {
-            return session.getCookies();
-          })
-          .then((cookies) {
-            numcookies = cookies.length;
-            return session.setCookie({ 'name': 'foo', 'value': 'bar'});
-          })
-          .then((_) {
-            return session.getCookies();
-          })
-          .then((cookies) {
-            expect(cookies.length, equals(numcookies + 1));
-            expect(cookies, someElement(allOf(
-                containsPair('name', 'foo'),
-                containsPair('value', 'bar'))));
-            return session.deleteCookie('foo');
-          })
-          .then((_) {
-            return session.getCookies();
-          })
-          .then((cookies) {
-            expect(cookies.length, numcookies);
-            expect(cookies, everyElement(isNot(containsPair('name', 'foo'))));
-            return session.deleteCookie('foo');
-          })
-          .then((_) {
-            return session.getCookies();
-          })
-          .then((cookies) {
-            expect(cookies.length, numcookies);
-            return session.close();
-          })
-          .then((_) {
-            session = null;
-          })
-          .catchError(exceptionHandler);
-    });
-  });
-
-  group('Storage tests', () {
-    test('Local Storage Create/query/delete', () {
-      var window;
-      var numkeys;
-      return web_driver.newSession('firefox', { 'webStorageEnabled': true })
-          .then((_session) {
-            session = _session;
-            return session.getCapabilities();
-          })
-          .then((capabilities) {
-            expect(capabilities, isNotNull);
-            expect(capabilities['webStorageEnabled'], isTrue);
-            // Must go to a web page first.
-            return session.setUrl('http://translate.google.com');
-          })
-          .then((_) {
-            return session.getLocalStorageKeys();
-          })
-          .then((keys) {
-            numkeys = keys.length;
-            return session.setLocalStorageItem('foo', 'bar');
-          })
-          .then((_) {
-            return session.getLocalStorageKeys();
-          })
-          .then((keys) {
-            expect(keys.length, equals(numkeys + 1));
-            expect(keys, someElement(equals('foo')));
-            return session.getLocalStorageCount();
-          })
-          .then((count) {
-            expect(count, equals(numkeys + 1));
-            return session.getLocalStorageValue('foo');
-          })
-          .then((value) {
-            expect(value, equals('bar'));
-            return session.setLocalStorageItem('bar', 'foo');
-          })
-          .then((_) {
-            return session.getLocalStorageKeys();
-          })
-          .then((keys) {
-            expect(keys.length, equals(numkeys + 2));
-            expect(keys, someElement(equals('bar')));
-            expect(keys, someElement(equals('foo')));
-            return session.deleteLocalStorageValue('foo');
-          })
-          .then((_) {
-            return session.getLocalStorageKeys();
-          })
-          .then((keys) {
-            expect(keys.length, equals(numkeys + 1));
-            expect(keys, everyElement(isNot(equals('foo'))));
-            return session.setLocalStorageItem('foo', 'bar');
-          })
-          .then((_) {
-            return session.clearLocalStorage();
-          })
-          .then((_) {
-            return session.getLocalStorageKeys();
-          })
-          .then((keys) {
-            expect(keys.length, isZero);
-            return session.close();
-          })
-          .then((_) {
-            session = null;
-          })
-          .catchError(exceptionHandler);
-    });
-
-    test('Session Storage Create/query/delete', () {
-      var window;
-      var numkeys;
-      return web_driver.newSession('chrome', { 'webStorageEnabled': true })
-          .then((_session) {
-            session = _session;
-            // Must go to a web page first.
-            return session.setUrl('http://translate.google.com');
-          })
-          .then((_) {
-            return session.getSessionStorageKeys();
-          })
-          .then((keys) {
-            numkeys = keys.length;
-            return session.setSessionStorageItem('foo', 'bar');
-          })
-          .then((_) {
-            return session.getSessionStorageKeys();
-          })
-          .then((keys) {
-            expect(keys.length, equals(numkeys + 1));
-            expect(keys, someElement(equals('foo')));
-            return session.getSessionStorageCount();
-          })
-          .then((count) {
-            expect(count, equals(numkeys + 1));
-            return session.getSessionStorageValue('foo');
-          })
-          .then((value) {
-            expect(value, equals('bar'));
-            return session.deleteSessionStorageValue('foo');
-          })
-          .then((_) {
-            return session.getSessionStorageKeys();
-          })
-          .then((keys) {
-            expect(keys.length, equals(numkeys));
-            expect(keys, everyElement(isNot(equals('foo'))));
-            return session.setSessionStorageItem('foo', 'bar');
-          })
-          .then((_) {
-            return session.clearSessionStorage();
-          })
-          .then((_) {
-            return session.getSessionStorageKeys();
-          })
-          .then((keys) {
-            expect(keys.length, isZero);
-            return session.close();
-          })
-          .then((_) {
-            session = null;
-          })
-          .catchError(exceptionHandler);
-        });
-
-  });
-
-  group('Script tests', () {
-    // This test is just timing out eventually with a 500 response.
-
-    test('Sync script', () {
-      return web_driver.newSession('chrome')
-          .then((_session) {
-            session = _session;
-            return session.setUrl('http://translate.google.com');
-          })
-          .then((_) {
-            return session.execute('return arguments[0] * arguments[1];',
-                [2, 3]);
-          })
-          .then((value) {
-            expect(value, equals(6));
-            return session.close();
-          })
-          .then((_) {
-            session = null;
-          })
-          .catchError(exceptionHandler);
-    });
-  });
-
-  group('Element tests', () {
-    test('Elements', () {
-      var w;
-      return web_driver.newSession('chrome')
-          .then((_session) {
-            session = _session;
-            return session.setUrl('http://duckduckgo.com');
-          })
-          .then((_) {
-            return session.findElement('id', 'search_form_input_homepage');
-          })
-          .then((_w) {
-            w = _w['ELEMENT'];
-            return session.sendKeyStrokesToElement(w,
-                [ 'g', 'o', 'o', 'g', 'l', 'e' ]);
-          })
-          .then((_) {
-            return session.submit(w);
-          })
-          .then((_) {
-            return session.findElements('class name',
-                'links_zero_click_disambig');
-          })
-          .then((divs) {
-            expect(divs.length, greaterThan(0));
-            return session.close();
-          })
-          .then((_) {
-            session = null;
-          })
-          .catchError(exceptionHandler);
-    });
-  });
-
-  group('Log tests', () {
-    // Currently, getLogTypes returns a 404, and attempts to get the
-    // logs either return 500 with 'Unknown log type' or 500 with
-    // 'Unable to convert logEntries'.
-
-    test('Log retrieval', () {
-      return web_driver.newSession('firefox')
-          .then((_session) {
-            session = _session;
-            return session.getLogTypes();
-          })
-          .then((logTypes) {
-            expect(logTypes, someElement(equals('client')));
-            expect(logTypes, someElement(equals('server')));
-            return session.getLogs('driver');
-          })
-          .then((logs) {
-            expect(logs.length, greaterThan(0));
-            return session.close();
-          })
-          .then((_) {
-            session = null;
-          })
-          .catchError(exceptionHandler);
-        });
-  });
-
-  group('Cleanup', () {
-    test('Cleanup', () {
-      web_driver = null;
-      if (session != null) {
-        var s = session;
-        session = null;
-        s.close();
-      }
-    });
-  });
-}
-
diff --git a/runtime/lib/mirrors.cc b/runtime/lib/mirrors.cc
index e031cda..0d1a4af 100644
--- a/runtime/lib/mirrors.cc
+++ b/runtime/lib/mirrors.cc
@@ -119,8 +119,7 @@
   DARTSCOPE(isolate);
   const Object& referent = Object::Handle(isolate, Api::UnwrapHandle(handle));
   const MirrorReference& reference =
-       MirrorReference::Handle(MirrorReference::New());
-  reference.set_referent(referent);
+       MirrorReference::Handle(MirrorReference::New(referent));
   return Api::NewHandle(isolate, reference.raw());
 }
 
@@ -236,47 +235,35 @@
 static Dart_Handle CreateLazyMirror(Dart_Handle target);
 
 
-static Dart_Handle CreateParameterMirrorList(Dart_Handle func) {
+static RawInstance* CreateParameterMirrorList(const Function& func) {
+  HANDLESCOPE(Isolate::Current());
+  const intptr_t param_cnt = func.num_fixed_parameters() -
+                             func.NumImplicitParameters() +
+                             func.NumOptionalParameters();
+  const Array& results = Array::Handle(Array::New(param_cnt));
+  const Array& args = Array::Handle(Array::New(3));
+  args.SetAt(0, MirrorReference::Handle(MirrorReference::New(func)));
+  Smi& pos = Smi::Handle();
+  Instance& param = Instance::Handle();
+  for (intptr_t i = 0; i < param_cnt; i++) {
+    pos ^= Smi::New(i);
+    args.SetAt(1, pos);
+    args.SetAt(2, (i >= func.num_fixed_parameters()) ?
+        Bool::True() : Bool::False());
+    param ^= CreateMirror(Symbols::_LocalParameterMirrorImpl(), args);
+    results.SetAt(i, param);
+  }
+  results.MakeImmutable();
+  return results.raw();
+}
+
+
+static Dart_Handle CreateParameterMirrorListUsingApi(Dart_Handle func) {
   ASSERT(Dart_IsFunction(func));
-  int64_t fixed_param_count;
-  int64_t opt_param_count;
-  Dart_Handle result = Dart_FunctionParameterCounts(func,
-                                                    &fixed_param_count,
-                                                    &opt_param_count);
-  if (Dart_IsError(result)) {
-    return result;
-  }
-
-  int64_t param_count = fixed_param_count + opt_param_count;
-  Dart_Handle parameter_list = Dart_NewList(param_count);
-  if (Dart_IsError(parameter_list)) {
-    return result;
-  }
-
-  Dart_Handle param_cls_name = NewString("_LocalParameterMirrorImpl");
-  Dart_Handle param_type = Dart_GetType(MirrorLib(), param_cls_name, 0, NULL);
-  if (Dart_IsError(param_type)) {
-    return param_type;
-  }
-
-  Dart_Handle reflectee = CreateMirrorReference(func);
-  for (int64_t i = 0; i < param_count; i++) {
-    Dart_Handle args[] = {
-      reflectee,
-      Dart_NewInteger(i),
-      (i >= fixed_param_count) ? Api::True() : Api::False(),
-    };
-    Dart_Handle param =
-        Dart_New(param_type, Dart_Null(), ARRAY_SIZE(args), args);
-    if (Dart_IsError(param)) {
-      return param;
-    }
-    result = Dart_ListSetAt(parameter_list, i, param);
-    if (Dart_IsError(result)) {
-      return result;
-    }
-  }
-  return parameter_list;
+  Isolate* isolate = Isolate::Current();
+  return Api::NewHandle(
+      isolate, CreateParameterMirrorList(Api::UnwrapFunctionHandle(
+          isolate, func)));
 }
 
 
@@ -305,7 +292,7 @@
 
       Dart_Handle args[] = {
         CreateLazyMirror(return_type),
-        CreateParameterMirrorList(sig),
+        CreateParameterMirrorListUsingApi(sig),
       };
       return Dart_New(type, Dart_Null(), ARRAY_SIZE(args), args);
     } else {
@@ -505,7 +492,6 @@
 }
 
 
-static Dart_Handle CreateMemberMap(Dart_Handle owner, Dart_Handle owner_mirror);
 static Dart_Handle CreateConstructorMap(Dart_Handle owner,
                                         Dart_Handle owner_mirror);
 
@@ -579,7 +565,7 @@
   Dart_Handle args[] = {
     CreateMirrorReference(func),
     owner_mirror,
-    CreateParameterMirrorList(func),
+    CreateParameterMirrorListUsingApi(func),
     func_obj.is_static() ? Api::True() : Api::False(),
     func_obj.is_abstract() ? Api::True() : Api::False(),
     func_obj.IsGetterFunction() ? Api::True() : Api::False(),
@@ -598,8 +584,7 @@
 static RawInstance* CreateVariableMirror(const Field& field,
                                          const Instance& owner_mirror) {
   const MirrorReference& field_ref =
-      MirrorReference::Handle(MirrorReference::New());
-  field_ref.set_referent(field);
+      MirrorReference::Handle(MirrorReference::New(field));
 
   const String& name = String::Handle(field.UserVisibleName());
 
@@ -615,84 +600,6 @@
 }
 
 
-static Dart_Handle AddMemberClasses(Dart_Handle map,
-                                    Dart_Handle owner,
-                                    Dart_Handle owner_mirror) {
-  ASSERT(Dart_IsLibrary(owner));
-  Dart_Handle result;
-  Dart_Handle names = Dart_LibraryGetClassNames(owner);
-  if (Dart_IsError(names)) {
-    return names;
-  }
-  intptr_t len;
-  result = Dart_ListLength(names, &len);
-  if (Dart_IsError(result)) {
-    return result;
-  }
-  for (intptr_t i = 0; i < len; i++) {
-    Dart_Handle intf_name = Dart_ListGetAt(names, i);
-    Dart_Handle intf = Dart_GetClass(owner, intf_name);
-    if (Dart_IsError(intf)) {
-      return intf;
-    }
-    Dart_Handle intf_mirror =
-        CreateClassMirrorUsingApi(intf, intf_name, owner_mirror);
-    if (Dart_IsError(intf_mirror)) {
-      return intf_mirror;
-    }
-    result = MapAdd(map, intf_name, intf_mirror);
-    if (Dart_IsError(result)) {
-      return result;
-    }
-  }
-  return Dart_True();
-}
-
-
-static Dart_Handle AddMemberFunctions(Dart_Handle map,
-                                      Dart_Handle owner,
-                                      Dart_Handle owner_mirror) {
-  Dart_Handle result;
-  Dart_Handle names = Dart_GetFunctionNames(owner);
-  if (Dart_IsError(names)) {
-    return names;
-  }
-  intptr_t len;
-  result = Dart_ListLength(names, &len);
-  if (Dart_IsError(result)) {
-    return result;
-  }
-  for (intptr_t i = 0; i < len; i++) {
-    Dart_Handle func_name = Dart_ListGetAt(names, i);
-    Dart_Handle func = Dart_LookupFunction(owner, func_name);
-    if (Dart_IsError(func)) {
-      return func;
-    }
-    ASSERT(!Dart_IsNull(func));
-
-    bool is_constructor = false;
-    result = Dart_FunctionIsConstructor(func, &is_constructor);
-    if (Dart_IsError(result)) {
-      return result;
-    }
-    if (is_constructor) {
-      // Skip constructors.
-      continue;
-    }
-
-    Dart_Handle func_mirror = CreateMethodMirrorUsingApi(func, owner_mirror);
-    if (Dart_IsError(func_mirror)) {
-      return func_mirror;
-    }
-    result = MapAdd(map, func_name, func_mirror);
-    if (Dart_IsError(result)) {
-      return result;
-    }
-  }
-  return Dart_True();
-}
-
-
 static Dart_Handle AddConstructors(Dart_Handle map,
                                    Dart_Handle owner,
                                    Dart_Handle owner_mirror) {
@@ -737,70 +644,6 @@
 }
 
 
-static Dart_Handle AddMemberVariables(Dart_Handle map,
-                                      Dart_Handle owner,
-                                      Dart_Handle owner_mirror) {
-  Isolate* isolate = Isolate::Current();
-  Dart_Handle result;
-  Dart_Handle names = Dart_GetVariableNames(owner);
-  if (Dart_IsError(names)) {
-    return names;
-  }
-  intptr_t len;
-  result = Dart_ListLength(names, &len);
-  if (Dart_IsError(result)) {
-    return result;
-  }
-  for (intptr_t i = 0; i < len; i++) {
-    Dart_Handle var_name = Dart_ListGetAt(names, i);
-    Dart_Handle var = Dart_LookupVariable(owner, var_name);
-    if (Dart_IsError(var)) {
-      return var;
-    }
-    ASSERT(!Dart_IsNull(var));
-    ASSERT(Dart_IsVariable(var));
-    const Field& field = Api::UnwrapFieldHandle(isolate, var);
-    const Instance& owner_mirror_inst =
-      Api::UnwrapInstanceHandle(isolate, owner_mirror);
-    const Instance& var_mirror_inst =
-      Instance::Handle(CreateVariableMirror(field, owner_mirror_inst));
-    Dart_Handle var_mirror = Api::NewHandle(isolate, var_mirror_inst.raw());
-
-    result = MapAdd(map, var_name, var_mirror);
-    if (Dart_IsError(result)) {
-      return result;
-    }
-  }
-  return Dart_True();
-}
-
-
-static Dart_Handle CreateMemberMap(Dart_Handle owner,
-                                   Dart_Handle owner_mirror) {
-  // TODO(turnidge): This should be an immutable map.
-  if (Dart_IsError(owner_mirror)) {
-    return owner_mirror;
-  }
-  Dart_Handle result;
-  Dart_Handle map = MapNew();
-  if (Dart_IsLibrary(owner)) {
-    result = AddMemberClasses(map, owner, owner_mirror);
-    if (Dart_IsError(result)) {
-      return result;
-    }
-  }
-  result = AddMemberFunctions(map, owner, owner_mirror);
-  if (Dart_IsError(result)) {
-    return result;
-  }
-  result = AddMemberVariables(map, owner, owner_mirror);
-  if (Dart_IsError(result)) {
-    return result;
-  }
-  return map;
-}
-
-
 static Dart_Handle CreateConstructorMap(Dart_Handle owner,
                                         Dart_Handle owner_mirror) {
   // TODO(turnidge): This should be an immutable map.
@@ -827,15 +670,10 @@
   if (Dart_IsError(lazy_lib_mirror)) {
     return lazy_lib_mirror;
   }
-  Dart_Handle member_map = CreateMemberMap(lib, lazy_lib_mirror);
-  if (Dart_IsError(member_map)) {
-    return member_map;
-  }
   Dart_Handle args[] = {
     CreateMirrorReference(lib),
     Dart_LibraryName(lib),
     Dart_LibraryUrl(lib),
-    member_map,
   };
   Dart_Handle lib_mirror = Dart_New(type, Dart_Null(), ARRAY_SIZE(args), args);
   if (Dart_IsError(lib_mirror)) {
@@ -1171,43 +1009,6 @@
 }
 
 
-// TODO(11742): This is transitional.
-static RawInstance* Reflect(const Instance& reflectee) {
-  Isolate* isolate = Isolate::Current();
-  DARTSCOPE(isolate);
-  return Instance::RawCast(
-      Api::UnwrapHandle(
-          CreateInstanceMirror(
-              Api::NewHandle(isolate, reflectee.raw()))));
-}
-
-
-static void ThrowMirroredUnhandledError(const Error& original_error) {
-  const UnhandledException& unhandled_ex =
-      UnhandledException::Cast(original_error);
-  Instance& exc = Instance::Handle(unhandled_ex.exception());
-  Instance& stack = Instance::Handle(unhandled_ex.stacktrace());
-
-  Object& exc_string_or_error =
-      Object::Handle(DartLibraryCalls::ToString(exc));
-  String& exc_string = String::Handle();
-  // Ignore any errors that might occur in toString.
-  if (exc_string_or_error.IsString()) {
-    exc_string ^= exc_string_or_error.raw();
-  }
-
-  Instance& mirror_on_exc = Instance::Handle(Reflect(exc));
-
-  Array& args = Array::Handle(Array::New(3));
-  args.SetAt(0, mirror_on_exc);
-  args.SetAt(1, exc_string);
-  args.SetAt(2, stack);
-
-  Exceptions::ThrowByType(Exceptions::kMirroredUncaughtExceptionError, args);
-  UNREACHABLE();
-}
-
-
 static void ThrowMirroredCompilationError(const String& message) {
   Array& args = Array::Handle(Array::New(1));
   args.SetAt(0, message);
@@ -1218,16 +1019,14 @@
 
 
 static void ThrowInvokeError(const Error& error) {
-  if (error.IsUnhandledException()) {
-    // An ordinary runtime error.
-    ThrowMirroredUnhandledError(error);
-  }
   if (error.IsLanguageError()) {
     // A compilation error that was delayed by lazy compilation.
     const LanguageError& compilation_error = LanguageError::Cast(error);
     String& message = String::Handle(compilation_error.message());
     ThrowMirroredCompilationError(message);
+    UNREACHABLE();
   }
+  Exceptions::PropagateError(error);
   UNREACHABLE();
 }
 
@@ -1247,7 +1046,7 @@
 DEFINE_NATIVE_ENTRY(ClassMirror_name, 1) {
   GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(0));
   const Class& klass = Class::Handle(ref.GetClassReferent());
-  return klass.Name();
+  return klass.UserVisibleName();
 }
 
 
@@ -1303,6 +1102,51 @@
 }
 
 
+DEFINE_NATIVE_ENTRY(LibraryMirror_members, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Instance,
+                               owner_mirror,
+                               arguments->NativeArgAt(0));
+  GET_NON_NULL_NATIVE_ARGUMENT(MirrorReference, ref, arguments->NativeArgAt(1));
+  const Library& library = Library::Handle(ref.GetLibraryReferent());
+
+  Instance& member_mirror = Instance::Handle();
+  const GrowableObjectArray& member_mirrors =
+      GrowableObjectArray::Handle(GrowableObjectArray::New());
+
+  Object& entry = Object::Handle();
+  DictionaryIterator entries(library);
+
+  while (entries.HasNext()) {
+    entry = entries.GetNext();
+    if (entry.IsClass()) {
+      const Class& klass = Class::Cast(entry);
+      if (!klass.IsCanonicalSignatureClass()) {
+        // The various implementations of public classes don't always have the
+        // expected superinterfaces or other properties, so we filter them out.
+        if (!RawObject::IsImplementationClassId(klass.id())) {
+          member_mirror = CreateClassMirror(klass, owner_mirror);
+          member_mirrors.Add(member_mirror);
+        }
+      }
+    } else if (entry.IsField()) {
+      const Field& field = Field::Cast(entry);
+      member_mirror = CreateVariableMirror(field, owner_mirror);
+      member_mirrors.Add(member_mirror);
+    } else if (entry.IsFunction()) {
+      const Function& func = Function::Cast(entry);
+      if (func.kind() == RawFunction::kRegularFunction ||
+          func.kind() == RawFunction::kGetterFunction ||
+          func.kind() == RawFunction::kSetterFunction) {
+        member_mirror = CreateMethodMirror(func, owner_mirror);
+        member_mirrors.Add(member_mirror);
+      }
+    }
+  }
+
+  return member_mirrors.raw();
+}
+
+
 // Invoke the function, or noSuchMethod if it is null. Propagate any unhandled
 // exceptions. Wrap and propagate any compilation errors.
 static RawObject* ReflectivelyInvokeDynamicFunction(const Instance& receiver,
diff --git a/runtime/lib/mirrors_impl.dart b/runtime/lib/mirrors_impl.dart
index d957cc7..acd568d 100644
--- a/runtime/lib/mirrors_impl.dart
+++ b/runtime/lib/mirrors_impl.dart
@@ -194,9 +194,10 @@
   }
 
   InstanceMirror setField(Symbol memberName, Object value) {
-    return reflect(this._invokeSetter(_reflectee,
-                                      _n(memberName),
-                                      value)); 
+    this._invokeSetter(_reflectee,
+                       _n(memberName),
+                       value);
+    return reflect(value);
   }
 
   Future<InstanceMirror> invokeAsync(Symbol memberName,
@@ -239,10 +240,10 @@
               "a simple value or InstanceMirror";
       }
 
-      var result = this._invokeSetter(_reflectee,
-                                      _n(memberName),
-                                      unwrappedValue);
-      return new Future.value(reflect(result)); 
+      this._invokeSetter(_reflectee,
+                         _n(memberName),
+                         unwrappedValue);
+      return new Future.value(reflect(unwrappedValue)); 
     } catch(e) {
       return new Future.error(e);
     }
@@ -793,10 +794,8 @@
     implements LibraryMirror {
   _LocalLibraryMirrorImpl(reflectee,
                           String simpleName,
-                          String url,
-                          Map<String, Mirror> members)
+                          String url)
       : this.simpleName = _s(simpleName),
-        this.members = _convertStringToSymbolMap(members),
         this.uri = Uri.parse(url),
         super(reflectee);
 
@@ -820,7 +819,15 @@
   }
 
   final Uri uri;
-  final Map<Symbol, Mirror> members;
+
+  Map<Symbol, Mirror> _members;
+
+  Map<Symbol, Mirror> get members {
+    if (_members == null) {
+      _members = _makeMemberMap(_computeMembers(_reflectee));
+    }
+    return _members;
+  }
 
   Map<Symbol, ClassMirror> _classes = null;
   Map<Symbol, MethodMirror> _functions = null;
@@ -884,6 +891,9 @@
 
   _invokeSetter(reflectee, setterName, value)
       native 'LibraryMirror_invokeSetter';
+
+  _computeMembers(reflectee)
+      native "LibraryMirror_members";
 }
 
 class _LocalMethodMirrorImpl extends _LocalDeclarationMirrorImpl
diff --git a/runtime/lib/simd128.cc b/runtime/lib/simd128.cc
index 542eee4..0ff6da4 100644
--- a/runtime/lib/simd128.cc
+++ b/runtime/lib/simd128.cc
@@ -242,6 +242,61 @@
 }
 
 
+DEFINE_NATIVE_ENTRY(Float32x4_withZWInXY, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, self, arguments->NativeArgAt(0));
+  GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, other, arguments->NativeArgAt(1));
+  float _x = other.z();
+  float _y = other.w();
+  float _z = self.z();
+  float _w = self.w();
+  return Float32x4::New(_x, _y, _z, _w);
+}
+
+
+DEFINE_NATIVE_ENTRY(Float32x4_interleaveXY, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, self, arguments->NativeArgAt(0));
+  GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, other, arguments->NativeArgAt(1));
+  float _x = self.x();
+  float _y = other.x();
+  float _z = self.y();
+  float _w = other.y();
+  return Float32x4::New(_x, _y, _z, _w);
+}
+
+
+DEFINE_NATIVE_ENTRY(Float32x4_interleaveZW, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, self, arguments->NativeArgAt(0));
+  GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, other, arguments->NativeArgAt(1));
+  float _x = self.z();
+  float _y = other.z();
+  float _z = self.w();
+  float _w = other.w();
+  return Float32x4::New(_x, _y, _z, _w);
+}
+
+
+DEFINE_NATIVE_ENTRY(Float32x4_interleaveXYPairs, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, self, arguments->NativeArgAt(0));
+  GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, other, arguments->NativeArgAt(1));
+  float _x = self.x();
+  float _y = self.y();
+  float _z = other.x();
+  float _w = other.y();
+  return Float32x4::New(_x, _y, _z, _w);
+}
+
+
+DEFINE_NATIVE_ENTRY(Float32x4_interleaveZWPairs, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, self, arguments->NativeArgAt(0));
+  GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, other, arguments->NativeArgAt(1));
+  float _x = self.z();
+  float _y = self.w();
+  float _z = other.z();
+  float _w = other.w();
+  return Float32x4::New(_x, _y, _z, _w);
+}
+
+
 DEFINE_NATIVE_ENTRY(Float32x4_setX, 2) {
   GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, self, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Double, x, arguments->NativeArgAt(1));
diff --git a/runtime/lib/typed_data.dart b/runtime/lib/typed_data.dart
index fef87bc..437be6a 100644
--- a/runtime/lib/typed_data.dart
+++ b/runtime/lib/typed_data.dart
@@ -2271,6 +2271,15 @@
   Float32x4 get wwwz => _shuffle(0xBF);
   Float32x4 get wwww => _shuffle(0xFF);
   Float32x4 _shuffle(int mask) native "Float32x4_shuffle";
+
+  Float32x4 withZWInXY(Float32x4 other) native "Float32x4_withZWInXY";
+  Float32x4 interleaveXY(Float32x4 other) native "Float32x4_interleaveXY";
+  Float32x4 interleaveZW(Float32x4 other) native "Float32x4_interleaveZW";
+  Float32x4 interleaveXYPairs(Float32x4 other)
+      native "Float32x4_interleaveXYPairs";
+  Float32x4 interleaveZWPairs(Float32x4 other)
+      native "Float32x4_interleaveZWPairs";
+
   Float32x4 withX(double x) native "Float32x4_setX";
   Float32x4 withY(double y) native "Float32x4_setY";
   Float32x4 withZ(double z) native "Float32x4_setZ";
diff --git a/runtime/tests/vm/dart/isolate_mirror_local_test.dart b/runtime/tests/vm/dart/isolate_mirror_local_test.dart
index 7ac396c..cc7d3e6 100644
--- a/runtime/tests/vm/dart/isolate_mirror_local_test.dart
+++ b/runtime/tests/vm/dart/isolate_mirror_local_test.dart
@@ -483,13 +483,9 @@
       Expect.isTrue(false);
     })
     .catchError((error) {
-        Expect.isTrue(error is MirroredUncaughtExceptionError);
-        Expect.equals(const Symbol('MyException'),
-                      error.exception_mirror.type.simpleName);
+        Expect.isTrue(error is MyException);
         Expect.equals('MyException: from methodWithException',
-                      error.exception_string);
-        Expect.isTrue(error.stacktrace.toString().contains(
-            'isolate_mirror_local_test.dart'));
+                      error.toString());
         testDone('testMirrorErrors1');
       });
 
diff --git a/runtime/vm/benchmark_test.cc b/runtime/vm/benchmark_test.cc
index ba6b949..ec82fc9 100644
--- a/runtime/vm/benchmark_test.cc
+++ b/runtime/vm/benchmark_test.cc
@@ -455,4 +455,24 @@
   benchmark->set_score(snapshot->length());
 }
 
+
+BENCHMARK(CreateMirrorSystem) {
+  const char* kScriptChars =
+      "import 'dart:mirrors';\n"
+      "\n"
+      "void benchmark() {\n"
+      "  currentMirrorSystem();\n"
+      "}\n";
+
+  Dart_Handle lib = TestCase::LoadTestScript(kScriptChars, NULL);
+  Dart_Handle args[0];
+
+  Timer timer(true, "currentMirrorSystem() benchmark");
+  timer.Start();
+  Dart_Invoke(lib, NewString("benchmark"), 0, args);
+  timer.Stop();
+  int64_t elapsed_time = timer.TotalElapsedTime();
+  benchmark->set_score(elapsed_time);
+}
+
 }  // namespace dart
diff --git a/runtime/vm/bootstrap_natives.h b/runtime/vm/bootstrap_natives.h
index aa4ffe8..edb6211 100644
--- a/runtime/vm/bootstrap_natives.h
+++ b/runtime/vm/bootstrap_natives.h
@@ -196,6 +196,11 @@
   V(Float32x4_getZ, 1)                                                         \
   V(Float32x4_getW, 1)                                                         \
   V(Float32x4_shuffle, 2)                                                      \
+  V(Float32x4_withZWInXY, 2)                                                   \
+  V(Float32x4_interleaveXY, 2)                                                 \
+  V(Float32x4_interleaveZW, 2)                                                 \
+  V(Float32x4_interleaveXYPairs, 2)                                            \
+  V(Float32x4_interleaveZWPairs, 2)                                            \
   V(Float32x4_setX, 2)                                                         \
   V(Float32x4_setY, 2)                                                         \
   V(Float32x4_setZ, 2)                                                         \
@@ -243,6 +248,7 @@
   V(ClassMirror_name, 1)                                                       \
   V(ClassMirror_library, 1)                                                    \
   V(ClassMirror_members, 2)                                                    \
+  V(LibraryMirror_members, 2)                                                  \
   V(ClassMirror_invoke, 4)                                                     \
   V(ClassMirror_invokeGetter, 3)                                               \
   V(ClassMirror_invokeSetter, 4)                                               \
diff --git a/runtime/vm/flow_graph_optimizer.cc b/runtime/vm/flow_graph_optimizer.cc
index 859e22d..8fd9d02 100644
--- a/runtime/vm/flow_graph_optimizer.cc
+++ b/runtime/vm/flow_graph_optimizer.cc
@@ -232,7 +232,7 @@
         Token::kBIT_AND,
         new Value(left_instr),
         new Value(right_instr),
-        bit_and_instr->deopt_id());
+        Isolate::kNoDeoptId);  // BIT_AND cannot deoptimize.
     bit_and_instr->ReplaceWith(smi_op, current_iterator());
   }
 }
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 598addc..b0bfbe8 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -8264,7 +8264,8 @@
   if (count == 0) {
     comments = new Comments(Object::empty_array());
   } else {
-    const Array& data = Array::Handle(Array::New(count * kNumberOfEntries));
+    const Array& data =
+        Array::Handle(Array::New(count * kNumberOfEntries, Heap::kOld));
     comments = new Comments(data);
   }
   return *comments;
@@ -14345,13 +14346,20 @@
 }
 
 
-RawMirrorReference* MirrorReference::New(Heap::Space space) {
+RawMirrorReference* MirrorReference::New(const Object& referent,
+                                         Heap::Space space) {
   ASSERT(Isolate::Current()->object_store()->mirror_reference_class()
          != Class::null());
-  RawObject* raw = Object::Allocate(MirrorReference::kClassId,
-                                    MirrorReference::InstanceSize(),
-                                    space);
-  return reinterpret_cast<RawMirrorReference*>(raw);
+  MirrorReference& result = MirrorReference::Handle();
+  {
+    RawObject* raw = Object::Allocate(MirrorReference::kClassId,
+                                      MirrorReference::InstanceSize(),
+                                      space);
+    NoGCScope no_gc;
+    result ^= raw;
+  }
+  result.set_referent(referent);
+  return result.raw();
 }
 
 
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index c3e5d2a..04581ae 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -5898,7 +5898,8 @@
 
   RawLibrary* GetLibraryReferent() const;
 
-  static RawMirrorReference* New(Heap::Space space = Heap::kNew);
+  static RawMirrorReference* New(const Object& referent,
+                                 Heap::Space space = Heap::kNew);
 
   static intptr_t InstanceSize() {
     return RoundedAllocationSize(sizeof(RawMirrorReference));
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index e36d722..fd433b9 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -3180,7 +3180,7 @@
 
 TEST_CASE(MirrorReference) {
   const MirrorReference& reference =
-      MirrorReference::Handle(MirrorReference::New());
+      MirrorReference::Handle(MirrorReference::New(Object::Handle()));
   Object& initial_referent = Object::Handle(reference.referent());
   EXPECT(initial_referent.IsNull());
 
@@ -3193,7 +3193,7 @@
   EXPECT_EQ(returned_referent.raw(), library.raw());
 
   const MirrorReference& other_reference =
-      MirrorReference::Handle(MirrorReference::New());
+      MirrorReference::Handle(MirrorReference::New(Object::Handle()));
   EXPECT_NE(reference.raw(), other_reference.raw());
   other_reference.set_referent(library);
   EXPECT_NE(reference.raw(), other_reference.raw());
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index 6ec46b3..80e1404 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -401,6 +401,7 @@
   static bool IsTypedDataClassId(intptr_t index);
   static bool IsTypedDataViewClassId(intptr_t index);
   static bool IsExternalTypedDataClassId(intptr_t index);
+  static bool IsImplementationClassId(intptr_t index);
 
   static intptr_t NumberOfTypedDataClasses();
 
@@ -1627,7 +1628,7 @@
   // Make sure this function is updated when new builtin List types are added.
   ASSERT(kImmutableArrayCid == kArrayCid + 1 &&
          kTypedDataCid == kGrowableObjectArrayCid + 1);
-  return ((index >= kArrayCid && index < kImmutableArrayCid) ||
+  return ((index >= kArrayCid && index <= kImmutableArrayCid) ||
           (index >= kGrowableObjectArrayCid && index < kTypedDataCid) ||
           IsTypedDataClassId(index) ||
           IsTypedDataViewClassId(index) ||
@@ -1704,6 +1705,13 @@
 }
 
 
+inline bool RawObject::IsImplementationClassId(intptr_t index) {
+  return IsBuiltinListClassId(index) ||
+      IsStringClassId(index) ||
+      IsNumberClassId(index);
+}
+
+
 inline intptr_t RawObject::NumberOfTypedDataClasses() {
   // Make sure this is updated when new TypedData types are added.
   ASSERT(kTypedDataInt8ArrayViewCid == kTypedDataInt8ArrayCid + 12);
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index 70305b6..554e419 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -268,6 +268,7 @@
   V(_A, "_A")                                                                  \
   V(_SpecialTypeMirrorImpl, "_SpecialTypeMirrorImpl")                          \
   V(_LocalVariableMirrorImpl, "_LocalVariableMirrorImpl")                      \
+  V(_LocalParameterMirrorImpl, "_LocalParameterMirrorImpl")                    \
 
 
 // Contains a list of frequently used strings in a canonicalized form. This
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index ca85edf..c9f131f 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -96,20 +96,6 @@
   @DocsEditable()
   static const EventStreamProvider<ErrorEvent> errorEvent = const EventStreamProvider<ErrorEvent>('error');
 
-  @JSName('addEventListener')
-  @DomName('AbstractWorker.addEventListener')
-  @DocsEditable()
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
-
-  @DomName('AbstractWorker.dispatchEvent')
-  @DocsEditable()
-  bool dispatchEvent(Event evt) native;
-
-  @JSName('removeEventListener')
-  @DomName('AbstractWorker.removeEventListener')
-  @DocsEditable()
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
-
   @DomName('AbstractWorker.onerror')
   @DocsEditable()
   Stream<ErrorEvent> get onError => errorEvent.forTarget(this);
@@ -213,6 +199,39 @@
 
 
 @DocsEditable()
+@DomName('ANGLEInstancedArrays')
+@Experimental() // untriaged
+class AngleInstancedArrays extends Interceptor native "ANGLEInstancedArrays" {
+
+  @DomName('ANGLEInstancedArrays.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const int VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE = 0x88FE;
+
+  @JSName('drawArraysInstancedANGLE')
+  @DomName('ANGLEInstancedArrays.drawArraysInstancedANGLE')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void drawArraysInstancedAngle(int mode, int first, int count, int primcount) native;
+
+  @JSName('drawElementsInstancedANGLE')
+  @DomName('ANGLEInstancedArrays.drawElementsInstancedANGLE')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void drawElementsInstancedAngle(int mode, int count, int type, int offset, int primcount) native;
+
+  @JSName('vertexAttribDivisorANGLE')
+  @DomName('ANGLEInstancedArrays.vertexAttribDivisorANGLE')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void vertexAttribDivisorAngle(int index, int divisor) 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('WebKitAnimationEvent')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.SAFARI)
@@ -1634,7 +1653,7 @@
 
 @DocsEditable()
 @DomName('CharacterData')
-class CharacterData extends Node native "CharacterData" {
+class CharacterData extends Node implements ChildNode native "CharacterData" {
   // To suppress missing implicit constructor warnings.
   factory CharacterData._() { throw new UnsupportedError("Not supported"); }
 
@@ -1646,14 +1665,6 @@
   @DocsEditable()
   final int length;
 
-  @DomName('CharacterData.nextElementSibling')
-  @DocsEditable()
-  final Element nextElementSibling;
-
-  @DomName('CharacterData.previousElementSibling')
-  @DocsEditable()
-  final Element previousElementSibling;
-
   @DomName('CharacterData.appendData')
   @DocsEditable()
   void appendData(String data) native;
@@ -1673,6 +1684,32 @@
   @DomName('CharacterData.substringData')
   @DocsEditable()
   String substringData(int offset, int length) native;
+
+  // From ChildNode
+
+  @DomName('CharacterData.nextElementSibling')
+  @DocsEditable()
+  final Element nextElementSibling;
+
+  @DomName('CharacterData.previousElementSibling')
+  @DocsEditable()
+  final Element previousElementSibling;
+}
+// Copyright (c) 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('ChildNode')
+@Experimental() // untriaged
+abstract class ChildNode extends Interceptor {
+
+  Element nextElementSibling;
+
+  Element previousElementSibling;
+
+  void remove();
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -1961,6 +1998,11 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => JS('bool', '!!(window.crypto && window.crypto.getRandomValues)');
 
+  @DomName('Crypto.subtle')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final SubtleCrypto subtle;
+
   @DomName('Crypto.getRandomValues')
   @DocsEditable()
   @Creates('TypedData')
@@ -2268,7 +2310,7 @@
 @deprecated // deprecated
 class CssMatrix extends Interceptor native "WebKitCSSMatrix" {
 
-  @DomName('WebKitCSSMatrix.CSSMatrix')
+  @DomName('WebKitCSSMatrix.WebKitCSSMatrix')
   @DocsEditable()
   factory CssMatrix([String cssValue]) {
     if (cssValue != null) {
@@ -2541,6 +2583,11 @@
   @deprecated // deprecated
   static const int UNKNOWN_RULE = 0;
 
+  @DomName('CSSRule.VIEWPORT_RULE')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const int VIEWPORT_RULE = 15;
+
   @DomName('CSSRule.WEBKIT_FILTER_RULE')
   @DocsEditable()
   // http://www.w3.org/TR/filter-effects/
@@ -6047,10 +6094,16 @@
 
 
 @DocsEditable()
-@DomName('CustomElementConstructor')
-// https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/custom/index.html#dfn-custom-element-constructor-generation
-@deprecated // experimental
-class CustomElementConstructor extends Interceptor native "CustomElementConstructor" {
+@DomName('CSSViewportRule')
+@Experimental() // untriaged
+class CssViewportRule extends CssRule native "CSSViewportRule" {
+  // To suppress missing implicit constructor warnings.
+  factory CssViewportRule._() { throw new UnsupportedError("Not supported"); }
+
+  @DomName('CSSViewportRule.style')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final CssStyleDeclaration style;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -6750,18 +6803,15 @@
   @deprecated // nonstandard
   String charset;
 
-  @DomName('Document.childElementCount')
-  @DocsEditable()
-  final int childElementCount;
-
-  @DomName('Document.children')
-  @DocsEditable()
-  final HtmlCollection children;
-
   @DomName('Document.cookie')
   @DocsEditable()
   String cookie;
 
+  @DomName('Document.currentScript')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final ScriptElement currentScript;
+
   WindowBase get window => _convertNativeToDart_Window(this._get_window);
   @JSName('defaultView')
   @DomName('Document.window')
@@ -6781,10 +6831,6 @@
   @DocsEditable()
   final String domain;
 
-  @DomName('Document.firstElementChild')
-  @DocsEditable()
-  final Element firstElementChild;
-
   @DomName('Document.fontloader')
   @DocsEditable()
   // http://www.w3.org/TR/css3-fonts/#document-fontloader
@@ -6801,10 +6847,6 @@
   @DocsEditable()
   final DomImplementation implementation;
 
-  @DomName('Document.lastElementChild')
-  @DocsEditable()
-  final Element lastElementChild;
-
   @JSName('lastModified')
   /// Moved to [HtmlDocument].
   @DomName('Document.lastModified')
@@ -6954,7 +6996,7 @@
   @DomName('Document.createNodeIterator')
   @DocsEditable()
   @Unstable()
-  NodeIterator $dom_createNodeIterator(Node root, int whatToShow, NodeFilter filter, bool expandEntityReferences) native;
+  NodeIterator $dom_createNodeIterator(Node root, [int whatToShow, NodeFilter filter, bool expandEntityReferences]) native;
 
   @JSName('createRange')
   @DomName('Document.createRange')
@@ -6992,7 +7034,7 @@
   @JSName('createTreeWalker')
   @DomName('Document.createTreeWalker')
   @DocsEditable()
-  TreeWalker $dom_createTreeWalker(Node root, int whatToShow, NodeFilter filter, bool expandEntityReferences) native;
+  TreeWalker $dom_createTreeWalker(Node root, [int whatToShow, NodeFilter filter, bool expandEntityReferences]) native;
 
   @JSName('elementFromPoint')
   @DomName('Document.elementFromPoint')
@@ -7125,35 +7167,27 @@
   // http://www.w3.org/TR/css3-regions/#dom-named-flow-collection
   NamedFlowCollection getNamedFlows() native;
 
-  @DomName('Document.webkitRegister')
+  // From ParentNode
+
+  @JSName('childElementCount')
+  @DomName('Document.childElementCount')
   @DocsEditable()
-  @SupportedBrowser(SupportedBrowser.CHROME)
-  @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/custom/index.html#dfn-document-register
-  CustomElementConstructor register(String name, [Map options]) {
-    if (options != null) {
-      var options_1 = convertDartToNative_Dictionary(options);
-      return _register_1(name, options_1);
-    }
-    return _register_2(name);
-  }
-  @JSName('webkitRegister')
-  @DomName('Document.webkitRegister')
+  final int $dom_childElementCount;
+
+  @JSName('children')
+  @DomName('Document.children')
   @DocsEditable()
-  @SupportedBrowser(SupportedBrowser.CHROME)
-  @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/custom/index.html#dfn-document-register
-  CustomElementConstructor _register_1(name, options) native;
-  @JSName('webkitRegister')
-  @DomName('Document.webkitRegister')
+  final HtmlCollection $dom_children;
+
+  @JSName('firstElementChild')
+  @DomName('Document.firstElementChild')
   @DocsEditable()
-  @SupportedBrowser(SupportedBrowser.CHROME)
-  @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/custom/index.html#dfn-document-register
-  CustomElementConstructor _register_2(name) native;
+  final Element $dom_firstElementChild;
+
+  @JSName('lastElementChild')
+  @DomName('Document.lastElementChild')
+  @DocsEditable()
+  final Element $dom_lastElementChild;
 
   @DomName('Document.onabort')
   @DocsEditable()
@@ -7400,7 +7434,7 @@
 
 
 @DomName('DocumentFragment')
-class DocumentFragment extends Node native "DocumentFragment" {
+class DocumentFragment extends Node implements ParentNode native "DocumentFragment" {
   factory DocumentFragment() => document.createDocumentFragment();
 
   factory DocumentFragment.html(String html) {
@@ -7484,18 +7518,6 @@
   // To suppress missing implicit constructor warnings.
   factory DocumentFragment._() { throw new UnsupportedError("Not supported"); }
 
-  @DomName('DocumentFragment.childElementCount')
-  @DocsEditable()
-  final int childElementCount;
-
-  @DomName('DocumentFragment.firstElementChild')
-  @DocsEditable()
-  final Element firstElementChild;
-
-  @DomName('DocumentFragment.lastElementChild')
-  @DocsEditable()
-  final Element lastElementChild;
-
   @JSName('querySelector')
   @DomName('DocumentFragment.querySelector')
   @DocsEditable()
@@ -7508,6 +7530,23 @@
   @Creates('NodeList')
   List<Node> $dom_querySelectorAll(String selectors) native;
 
+  // From ParentNode
+
+  @JSName('childElementCount')
+  @DomName('DocumentFragment.childElementCount')
+  @DocsEditable()
+  final int $dom_childElementCount;
+
+  @JSName('firstElementChild')
+  @DomName('DocumentFragment.firstElementChild')
+  @DocsEditable()
+  final Element $dom_firstElementChild;
+
+  @JSName('lastElementChild')
+  @DomName('DocumentFragment.lastElementChild')
+  @DocsEditable()
+  final Element $dom_lastElementChild;
+
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -7518,9 +7557,11 @@
 @DomName('DocumentType')
 // http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-412266927
 @deprecated // stable
-class DocumentType extends Node native "DocumentType" {
+class DocumentType extends Node implements ChildNode native "DocumentType" {
   // To suppress missing implicit constructor warnings.
   factory DocumentType._() { throw new UnsupportedError("Not supported"); }
+
+  // From ChildNode
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -7531,6 +7572,11 @@
 @DomName('DOMError')
 class DomError extends Interceptor native "DOMError" {
 
+  @DomName('DOMError.message')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String message;
+
   @DomName('DOMError.name')
   @DocsEditable()
   final String name;
@@ -8055,7 +8101,7 @@
  * An abstract class, which all HTML elements extend.
  */
 @DomName('Element')
-abstract class Element extends Node implements ElementTraversal native "Element" {
+abstract class Element extends Node implements ParentNode, ChildNode native "Element" {
 
   /**
    * Creates an HTML element from a valid fragment of HTML.
@@ -9145,16 +9191,6 @@
   @DocsEditable()
   final _NamedNodeMap $dom_attributes;
 
-  @JSName('childElementCount')
-  @DomName('Element.childElementCount')
-  @DocsEditable()
-  final int $dom_childElementCount;
-
-  @JSName('children')
-  @DomName('Element.children')
-  @DocsEditable()
-  final HtmlCollection $dom_children;
-
   @DomName('Element.className')
   @DocsEditable()
   String className;
@@ -9175,20 +9211,6 @@
   @DocsEditable()
   final int clientWidth;
 
-  @JSName('firstElementChild')
-  @DomName('Element.firstElementChild')
-  @DocsEditable()
-  final Element $dom_firstElementChild;
-
-  @JSName('lastElementChild')
-  @DomName('Element.lastElementChild')
-  @DocsEditable()
-  final Element $dom_lastElementChild;
-
-  @DomName('Element.nextElementSibling')
-  @DocsEditable()
-  final Element nextElementSibling;
-
   @DomName('Element.offsetHeight')
   @DocsEditable()
   final int offsetHeight;
@@ -9209,10 +9231,6 @@
   @DocsEditable()
   final int offsetWidth;
 
-  @DomName('Element.previousElementSibling')
-  @DocsEditable()
-  final Element previousElementSibling;
-
   @DomName('Element.scrollHeight')
   @DocsEditable()
   final int scrollHeight;
@@ -9429,6 +9447,38 @@
   // https://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html#widl-Element-requestPointerLock-void
   void requestPointerLock() native;
 
+  // From ChildNode
+
+  @DomName('Element.nextElementSibling')
+  @DocsEditable()
+  final Element nextElementSibling;
+
+  @DomName('Element.previousElementSibling')
+  @DocsEditable()
+  final Element previousElementSibling;
+
+  // From ParentNode
+
+  @JSName('childElementCount')
+  @DomName('Element.childElementCount')
+  @DocsEditable()
+  final int $dom_childElementCount;
+
+  @JSName('children')
+  @DomName('Element.children')
+  @DocsEditable()
+  final HtmlCollection $dom_children;
+
+  @JSName('firstElementChild')
+  @DomName('Element.firstElementChild')
+  @DocsEditable()
+  final Element $dom_firstElementChild;
+
+  @JSName('lastElementChild')
+  @DomName('Element.lastElementChild')
+  @DocsEditable()
+  final Element $dom_lastElementChild;
+
   @DomName('Element.onabort')
   @DocsEditable()
   Stream<Event> get onAbort => abortEvent.forTarget(this);
@@ -9811,26 +9861,6 @@
 
 
 @DocsEditable()
-@DomName('ElementTraversal')
-@Unstable()
-abstract class ElementTraversal extends Interceptor {
-
-  int $dom_childElementCount;
-
-  Element $dom_firstElementChild;
-
-  Element $dom_lastElementChild;
-
-  Element nextElementSibling;
-
-  Element previousElementSibling;
-}
-// Copyright (c) 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('HTMLEmbedElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.IE)
@@ -10285,42 +10315,6 @@
   void stopPropagation() 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('EventException')
-@Unstable()
-class EventException extends Interceptor native "EventException" {
-
-  @DomName('EventException.DISPATCH_REQUEST_ERR')
-  @DocsEditable()
-  static const int DISPATCH_REQUEST_ERR = 1;
-
-  @DomName('EventException.UNSPECIFIED_EVENT_TYPE_ERR')
-  @DocsEditable()
-  static const int UNSPECIFIED_EVENT_TYPE_ERR = 0;
-
-  @DomName('EventException.code')
-  @DocsEditable()
-  final int code;
-
-  @DomName('EventException.message')
-  @DocsEditable()
-  @deprecated // nonstandard
-  final String message;
-
-  @DomName('EventException.name')
-  @DocsEditable()
-  @deprecated // nonstandard
-  final String name;
-
-  @DomName('EventException.toString')
-  @DocsEditable()
-  String toString() 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.
@@ -10976,6 +10970,21 @@
 
 
 @DocsEditable()
+@DomName('Stream')
+@Experimental() // untriaged
+class FileStream extends Interceptor native "Stream" {
+
+  @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()
@@ -12418,6 +12427,11 @@
   @DocsEditable()
   final String statusText;
 
+  @DomName('XMLHttpRequest.timeout')
+  @DocsEditable()
+  @Experimental() // untriaged
+  int timeout;
+
   /**
    * [EventTarget] that can hold listeners to track the progress of the request.
    * The events fired will be members of [HttpRequestUploadEvents].
@@ -14045,7 +14059,7 @@
   @DocsEditable()
   // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/imports/index.html#interface-import
   @Experimental()
-  final DocumentFragment import;
+  final Document import;
 
   @DomName('HTMLLinkElement.media')
   @DocsEditable()
@@ -14155,6 +14169,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('MIDISuccessCallback')
+@Experimental() // untriaged
+typedef void MidiSuccessCallback(MidiAccess access, bool sysexEnabled);
+// Copyright (c) 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')
@@ -15095,65 +15119,63 @@
 
 
 @DocsEditable()
-@DomName('WebKitMediaSource')
-@SupportedBrowser(SupportedBrowser.CHROME)
-@SupportedBrowser(SupportedBrowser.SAFARI)
-@Experimental()
+@DomName('MediaSource')
 // https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#mediasource
-class MediaSource extends EventTarget native "WebKitMediaSource" {
+@Experimental()
+class MediaSource extends EventTarget native "MediaSource" {
   // To suppress missing implicit constructor warnings.
   factory MediaSource._() { throw new UnsupportedError("Not supported"); }
 
-  @DomName('WebKitMediaSource.WebKitMediaSource')
+  @DomName('MediaSource.MediaSource')
   @DocsEditable()
   factory MediaSource() {
     return MediaSource._create_1();
   }
-  static MediaSource _create_1() => JS('MediaSource', 'new WebKitMediaSource()');
+  static MediaSource _create_1() => JS('MediaSource', 'new MediaSource()');
 
-  @DomName('WebKitMediaSource.activeSourceBuffers')
+  @DomName('MediaSource.activeSourceBuffers')
   @DocsEditable()
   final SourceBufferList activeSourceBuffers;
 
-  @DomName('WebKitMediaSource.duration')
+  @DomName('MediaSource.duration')
   @DocsEditable()
   num duration;
 
-  @DomName('WebKitMediaSource.readyState')
+  @DomName('MediaSource.readyState')
   @DocsEditable()
   final String readyState;
 
-  @DomName('WebKitMediaSource.sourceBuffers')
+  @DomName('MediaSource.sourceBuffers')
   @DocsEditable()
   final SourceBufferList sourceBuffers;
 
   @JSName('addEventListener')
-  @DomName('WebKitMediaSource.addEventListener')
+  @DomName('MediaSource.addEventListener')
   @DocsEditable()
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  @DomName('WebKitMediaSource.addSourceBuffer')
+  @DomName('MediaSource.addSourceBuffer')
   @DocsEditable()
   SourceBuffer addSourceBuffer(String type) native;
 
-  @DomName('WebKitMediaSource.dispatchEvent')
+  @DomName('MediaSource.dispatchEvent')
   @DocsEditable()
   bool dispatchEvent(Event event) native;
 
-  @DomName('WebKitMediaSource.endOfStream')
+  @DomName('MediaSource.endOfStream')
   @DocsEditable()
   void endOfStream(String error) native;
 
-  @DomName('WebKitMediaSource.isTypeSupported')
+  @DomName('MediaSource.isTypeSupported')
   @DocsEditable()
   static bool isTypeSupported(String type) native;
 
   @JSName('removeEventListener')
-  @DomName('WebKitMediaSource.removeEventListener')
+  @DomName('MediaSource.removeEventListener')
   @DocsEditable()
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  @DomName('WebKitMediaSource.removeSourceBuffer')
+  @DomName('MediaSource.removeSourceBuffer')
   @DocsEditable()
   void removeSourceBuffer(SourceBuffer buffer) native;
 }
@@ -15355,6 +15377,11 @@
   @DocsEditable()
   bool dispatchEvent(Event event) native;
 
+  @DomName('MediaStreamTrack.getSources')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static void getSources(MediaStreamTrackSourcesCallback callback) native;
+
   @JSName('removeEventListener')
   @DomName('MediaStreamTrack.removeEventListener')
   @DocsEditable()
@@ -15397,6 +15424,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('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')
@@ -15759,6 +15796,21 @@
 
 
 @DocsEditable()
+@DomName('MIDIAccessPromise')
+@Experimental() // untriaged
+class MidiAccessPromise extends Interceptor native "MIDIAccessPromise" {
+
+  @DomName('MIDIAccessPromise.then')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void then(MidiSuccessCallback successCallback, MidiErrorCallback errorCallback) 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('MIDIConnectionEvent')
 // http://webaudio.github.io/web-midi-api/#midiconnectionevent-interface
 @Experimental()
@@ -16665,6 +16717,27 @@
   @Unstable()
   void registerProtocolHandler(String scheme, String url, String title) native;
 
+  @DomName('Navigator.requestMIDIAccess')
+  @DocsEditable()
+  @Experimental() // untriaged
+  MidiAccessPromise requestMidiAccess([Map options]) {
+    if (options != null) {
+      var options_1 = convertDartToNative_Dictionary(options);
+      return _requestMidiAccess_1(options_1);
+    }
+    return _requestMidiAccess_2();
+  }
+  @JSName('requestMIDIAccess')
+  @DomName('Navigator.requestMIDIAccess')
+  @DocsEditable()
+  @Experimental() // untriaged
+  MidiAccessPromise _requestMidiAccess_1(options) native;
+  @JSName('requestMIDIAccess')
+  @DomName('Navigator.requestMIDIAccess')
+  @DocsEditable()
+  @Experimental() // untriaged
+  MidiAccessPromise _requestMidiAccess_2() native;
+
   @JSName('webkitGetGamepads')
   @DomName('Navigator.webkitGetGamepads')
   @DocsEditable()
@@ -17945,6 +18018,24 @@
 
 
 @DocsEditable()
+@DomName('ParentNode')
+@Experimental() // untriaged
+abstract class ParentNode extends Interceptor {
+
+  int $dom_childElementCount;
+
+  HtmlCollection $dom_children;
+
+  Element $dom_firstElementChild;
+
+  Element $dom_lastElementChild;
+}
+// Copyright (c) 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('Path')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#path-objects
 @Experimental()
@@ -18654,6 +18745,26 @@
 
 
 @DocsEditable()
+@DomName('Promise')
+@Experimental() // untriaged
+class Promise extends Interceptor native "Promise" {
+}
+// Copyright (c) 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('PromiseResolver')
+@Experimental() // untriaged
+class PromiseResolver extends Interceptor native "PromiseResolver" {
+}
+// Copyright (c) 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')
 class QuoteElement extends _HTMLElement native "HTMLQuoteElement" {
   // To suppress missing implicit constructor warnings.
@@ -20120,6 +20231,11 @@
   @DocsEditable()
   String innerHtml;
 
+  @DomName('ShadowRoot.olderShadowRoot')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final ShadowRoot olderShadowRoot;
+
   @DomName('ShadowRoot.resetStyleInheritance')
   @DocsEditable()
   bool resetStyleInheritance;
@@ -20162,29 +20278,51 @@
 
 
 @DocsEditable()
-@DomName('WebKitSourceBuffer')
-@SupportedBrowser(SupportedBrowser.CHROME)
-@SupportedBrowser(SupportedBrowser.SAFARI)
-@Experimental()
+@DomName('SourceBuffer')
 // https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#sourcebuffer
-class SourceBuffer extends Interceptor native "WebKitSourceBuffer" {
+@Experimental()
+class SourceBuffer extends EventTarget native "SourceBuffer" {
+  // To suppress missing implicit constructor warnings.
+  factory SourceBuffer._() { throw new UnsupportedError("Not supported"); }
 
-  @DomName('WebKitSourceBuffer.buffered')
+  @DomName('SourceBuffer.buffered')
   @DocsEditable()
   final TimeRanges buffered;
 
-  @DomName('WebKitSourceBuffer.timestampOffset')
+  @DomName('SourceBuffer.timestampOffset')
   @DocsEditable()
   num timestampOffset;
 
-  @DomName('WebKitSourceBuffer.abort')
+  @DomName('SourceBuffer.updating')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final bool updating;
+
+  @DomName('SourceBuffer.abort')
   @DocsEditable()
   void abort() native;
 
-  @DomName('WebKitSourceBuffer.append')
+  @JSName('addEventListener')
+  @DomName('SourceBuffer.addEventListener')
   @DocsEditable()
-  @Experimental() // non-standard
-  void append(Uint8List data) native;
+  @Experimental() // untriaged
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
+
+  @DomName('SourceBuffer.appendBuffer')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void appendBuffer(data) native;
+
+  @DomName('SourceBuffer.dispatchEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  bool dispatchEvent(Event event) native;
+
+  @JSName('removeEventListener')
+  @DomName('SourceBuffer.removeEventListener')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) 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
@@ -20192,16 +20330,14 @@
 
 
 @DocsEditable()
-@DomName('WebKitSourceBufferList')
-@SupportedBrowser(SupportedBrowser.CHROME)
-@SupportedBrowser(SupportedBrowser.SAFARI)
-@Experimental()
+@DomName('SourceBufferList')
 // https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#sourcebufferlist
-class SourceBufferList extends EventTarget with ListMixin<SourceBuffer>, ImmutableListMixin<SourceBuffer> implements JavaScriptIndexingBehavior, List<SourceBuffer> native "WebKitSourceBufferList" {
+@Experimental()
+class SourceBufferList extends EventTarget with ListMixin<SourceBuffer>, ImmutableListMixin<SourceBuffer> implements JavaScriptIndexingBehavior, List<SourceBuffer> native "SourceBufferList" {
   // To suppress missing implicit constructor warnings.
   factory SourceBufferList._() { throw new UnsupportedError("Not supported"); }
 
-  @DomName('WebKitSourceBufferList.length')
+  @DomName('SourceBufferList.length')
   @DocsEditable()
   int get length => JS("int", "#.length", this);
 
@@ -20250,20 +20386,20 @@
   // -- end List<SourceBuffer> mixins.
 
   @JSName('addEventListener')
-  @DomName('WebKitSourceBufferList.addEventListener')
+  @DomName('SourceBufferList.addEventListener')
   @DocsEditable()
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native;
 
-  @DomName('WebKitSourceBufferList.dispatchEvent')
+  @DomName('SourceBufferList.dispatchEvent')
   @DocsEditable()
   bool dispatchEvent(Event event) native;
 
-  @DomName('WebKitSourceBufferList.item')
+  @DomName('SourceBufferList.item')
   @DocsEditable()
   SourceBuffer item(int index) native;
 
   @JSName('removeEventListener')
-  @DomName('WebKitSourceBufferList.removeEventListener')
+  @DomName('SourceBufferList.removeEventListener')
   @DocsEditable()
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native;
 }
@@ -20300,6 +20436,36 @@
 
 
 @DocsEditable()
+@DomName('SourceInfo')
+@Experimental() // untriaged
+class SourceInfo extends Interceptor native "SourceInfo" {
+
+  @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')
 class SpanElement extends _HTMLElement native "HTMLSpanElement" {
   // To suppress missing implicit constructor warnings.
@@ -21304,6 +21470,16 @@
 
 
 @DocsEditable()
+@DomName('SubtleCrypto')
+@Experimental() // untriaged
+class SubtleCrypto extends Interceptor native "SubtleCrypto" {
+}
+// Copyright (c) 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('HTMLTableCaptionElement')
 class TableCaptionElement extends _HTMLElement native "HTMLTableCaptionElement" {
   // To suppress missing implicit constructor warnings.
@@ -23670,7 +23846,7 @@
 
 
 @DomName('Window')
-class Window extends EventTarget implements WindowBase native "Window,DOMWindow" {
+class Window extends EventTarget implements WindowBase, WindowTimers native "Window,DOMWindow" {
 
   /**
    * Executes a [callback] after the immediate execution stack has completed.
@@ -23812,7 +23988,7 @@
    * Note: The supplied [callback] needs to call [requestAnimationFrame] again
    * for the animation to continue.
    */
-  @DomName('DOMWindow.requestAnimationFrame')
+  @DomName('Window.requestAnimationFrame')
   int requestAnimationFrame(RequestAnimationFrameCallback callback) {
     _ensureRequestAnimationFrame();
     return _requestAnimationFrame(callback);
@@ -23894,7 +24070,7 @@
     return _requestFileSystem(persistent? 1 : 0, size);
   }
 
-  @DomName('DOMWindow.convertPointFromNodeToPage')
+  @DomName('Window.convertPointFromNodeToPage')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
@@ -23904,7 +24080,7 @@
     return new Point(result.x, result.y);
   }
 
-  @DomName('DOMWindow.convertPointFromPageToNode')
+  @DomName('Window.convertPointFromPageToNode')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
@@ -24279,16 +24455,6 @@
   @DocsEditable()
   String btoa(String string) native;
 
-  @JSName('clearInterval')
-  @DomName('Window.clearInterval')
-  @DocsEditable()
-  void _clearInterval(int handle) native;
-
-  @JSName('clearTimeout')
-  @DomName('Window.clearTimeout')
-  @DocsEditable()
-  void _clearTimeout(int handle) native;
-
   @DomName('Window.close')
   @DocsEditable()
   void close() native;
@@ -24396,16 +24562,6 @@
   @DocsEditable()
   void scrollTo(int x, int y) native;
 
-  @JSName('setInterval')
-  @DomName('Window.setInterval')
-  @DocsEditable()
-  int _setInterval(Object handler, int timeout) native;
-
-  @JSName('setTimeout')
-  @DomName('Window.setTimeout')
-  @DocsEditable()
-  int _setTimeout(Object handler, int timeout) native;
-
   @DomName('Window.showModalDialog')
   @DocsEditable()
   @Creates('Null')
@@ -24481,6 +24637,28 @@
     return completer.future;
   }
 
+  // From WindowTimers
+
+  @JSName('clearInterval')
+  @DomName('Window.clearInterval')
+  @DocsEditable()
+  void _clearInterval(int handle) native;
+
+  @JSName('clearTimeout')
+  @DomName('Window.clearTimeout')
+  @DocsEditable()
+  void _clearTimeout(int handle) native;
+
+  @JSName('setInterval')
+  @DomName('Window.setInterval')
+  @DocsEditable()
+  int _setInterval(Object handler, int timeout) native;
+
+  @JSName('setTimeout')
+  @DomName('Window.setTimeout')
+  @DocsEditable()
+  int _setTimeout(Object handler, int timeout) native;
+
   @DomName('Window.onDOMContentLoaded')
   @DocsEditable()
   Stream<Event> get onContentLoaded => contentLoadedEvent.forTarget(this);
@@ -24711,12 +24889,12 @@
   Stream<AnimationEvent> get onAnimationStart => animationStartEvent.forTarget(this);
 
 
-  @DomName('DOMWindow.beforeunloadEvent')
+  @DomName('Window.beforeunloadEvent')
   @DocsEditable()
   static const EventStreamProvider<BeforeUnloadEvent> beforeUnloadEvent =
       const _BeforeUnloadEventStreamProvider('beforeunload');
 
-  @DomName('DOMWindow.onbeforeunload')
+  @DomName('Window.onbeforeunload')
   @DocsEditable()
   Stream<Event> get onBeforeUnload => beforeUnloadEvent.forTarget(this);
 
@@ -24785,6 +24963,24 @@
 
 
 @DocsEditable()
+@DomName('WindowTimers')
+@Experimental() // untriaged
+abstract class WindowTimers extends Interceptor {
+
+  void clearInterval(int handle);
+
+  void clearTimeout(int handle);
+
+  int setInterval(Object handler, int timeout);
+
+  int setTimeout(Object handler, int timeout);
+}
+// Copyright (c) 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('Worker')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
@@ -24792,10 +24988,15 @@
 @SupportedBrowser(SupportedBrowser.SAFARI)
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html#worker
 @Experimental() // stable
-class Worker extends AbstractWorker native "Worker" {
+class Worker extends EventTarget implements AbstractWorker native "Worker" {
   // To suppress missing implicit constructor warnings.
   factory Worker._() { throw new UnsupportedError("Not supported"); }
 
+  @DomName('Worker.errorEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<Event> errorEvent = const EventStreamProvider<Event>('error');
+
   @DomName('Worker.messageEvent')
   @DocsEditable()
   static const EventStreamProvider<MessageEvent> messageEvent = const EventStreamProvider<MessageEvent>('message');
@@ -24818,6 +25019,11 @@
   @DocsEditable()
   void terminate() native;
 
+  @DomName('Worker.onerror')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<Event> get onError => errorEvent.forTarget(this);
+
   @DomName('Worker.onmessage')
   @DocsEditable()
   Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
@@ -24828,6 +25034,35 @@
 
 
 @DocsEditable()
+@DomName('WorkerCrypto')
+@Experimental() // untriaged
+class WorkerCrypto extends Interceptor native "WorkerCrypto" {
+
+  @DomName('WorkerCrypto.getRandomValues')
+  @DocsEditable()
+  @Experimental() // untriaged
+  @Creates('TypedData')
+  @Returns('TypedData|Null')
+  TypedData getRandomValues(TypedData array) 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('WorkerPerformance')
+@Experimental() // untriaged
+abstract class WorkerPerformance extends Interceptor {
+
+  num now();
+}
+// Copyright (c) 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
@@ -24858,43 +25093,6 @@
 
 
 @DocsEditable()
-@DomName('XPathException')
-// http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathException
-@deprecated // experimental
-class XPathException extends Interceptor native "XPathException" {
-
-  @DomName('XPathException.INVALID_EXPRESSION_ERR')
-  @DocsEditable()
-  static const int INVALID_EXPRESSION_ERR = 51;
-
-  @DomName('XPathException.TYPE_ERR')
-  @DocsEditable()
-  static const int TYPE_ERR = 52;
-
-  @DomName('XPathException.code')
-  @DocsEditable()
-  final int code;
-
-  @DomName('XPathException.message')
-  @DocsEditable()
-  @Experimental() // non-standard
-  final String message;
-
-  @DomName('XPathException.name')
-  @DocsEditable()
-  @Experimental() // non-standard
-  final String name;
-
-  @DomName('XPathException.toString')
-  @DocsEditable()
-  String toString() 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('XPathExpression')
 // http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathExpression
 @deprecated // experimental
@@ -25544,7 +25742,7 @@
 @Experimental() // non-standard
 class _DomPoint extends Interceptor native "WebKitPoint" {
 
-  @DomName('WebKitPoint.DOMPoint')
+  @DomName('WebKitPoint.WebKitPoint')
   @DocsEditable()
   factory _DomPoint(num x, num y) {
     return _DomPoint._create_1(x, y);
@@ -26060,7 +26258,7 @@
 @DomName('SharedWorker')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html#shared-workers-and-the-sharedworker-interface
 @Experimental()
-abstract class _SharedWorker extends AbstractWorker native "SharedWorker" {
+abstract class _SharedWorker extends EventTarget implements AbstractWorker native "SharedWorker" {
   // To suppress missing implicit constructor warnings.
   factory _SharedWorker._() { throw new UnsupportedError("Not supported"); }
 
@@ -26285,12 +26483,59 @@
 
 
 @DocsEditable()
+@DomName('WebKitMediaSource')
+@Experimental() // untriaged
+abstract class _WebKitMediaSource extends EventTarget native "WebKitMediaSource" {
+  // To suppress missing implicit constructor warnings.
+  factory _WebKitMediaSource._() { throw new UnsupportedError("Not supported"); }
+
+  @DomName('WebKitMediaSource.WebKitMediaSource')
+  @DocsEditable()
+  factory _WebKitMediaSource() {
+    return _WebKitMediaSource._create_1();
+  }
+  static _WebKitMediaSource _create_1() => JS('_WebKitMediaSource', 'new WebKitMediaSource()');
+}
+// Copyright (c) 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('WebKitSourceBuffer')
+@Experimental() // untriaged
+abstract class _WebKitSourceBuffer extends Interceptor native "WebKitSourceBuffer" {
+}
+// Copyright (c) 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('WebKitSourceBufferList')
+@Experimental() // untriaged
+abstract class _WebKitSourceBufferList extends EventTarget native "WebKitSourceBufferList" {
+  // To suppress missing implicit constructor warnings.
+  factory _WebKitSourceBufferList._() { throw new UnsupportedError("Not supported"); }
+
+  @JSName('item')
+  @DomName('WebKitSourceBufferList.item')
+  @DocsEditable()
+  @Experimental() // untriaged
+  _WebKitSourceBuffer _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()
 @DomName('WorkerContext')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html#WorkerGlobalScope-partial
 @Experimental() // stable
-abstract class _WorkerContext extends EventTarget native "WorkerContext" {
-  // To suppress missing implicit constructor warnings.
-  factory _WorkerContext._() { throw new UnsupportedError("Not supported"); }
+abstract class _WorkerContext extends Interceptor implements EventTarget, WindowTimers native "WorkerContext" {
+
+  // From WindowTimers
 }
 // Copyright (c) 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/sdk/lib/html/dartium/html_dartium.dart b/sdk/lib/html/dartium/html_dartium.dart
index f817506..2981699 100644
--- a/sdk/lib/html/dartium/html_dartium.dart
+++ b/sdk/lib/html/dartium/html_dartium.dart
@@ -108,18 +108,6 @@
   @DocsEditable()
   static const EventStreamProvider<ErrorEvent> errorEvent = const EventStreamProvider<ErrorEvent>('error');
 
-  @DomName('AbstractWorker.addEventListener')
-  @DocsEditable()
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "AbstractWorker_addEventListener_Callback";
-
-  @DomName('AbstractWorker.dispatchEvent')
-  @DocsEditable()
-  bool dispatchEvent(Event evt) native "AbstractWorker_dispatchEvent_Callback";
-
-  @DomName('AbstractWorker.removeEventListener')
-  @DocsEditable()
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "AbstractWorker_removeEventListener_Callback";
-
   @DomName('AbstractWorker.onerror')
   @DocsEditable()
   Stream<ErrorEvent> get onError => errorEvent.forTarget(this);
@@ -293,6 +281,39 @@
 
 
 @DocsEditable()
+@DomName('ANGLEInstancedArrays')
+@Experimental() // untriaged
+class AngleInstancedArrays extends NativeFieldWrapperClass1 {
+
+  @DomName('ANGLEInstancedArrays.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const int VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE = 0x88FE;
+
+  @DomName('ANGLEInstancedArrays.drawArraysInstancedANGLE')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void drawArraysInstancedAngle(int mode, int first, int count, int primcount) native "ANGLEInstancedArrays_drawArraysInstancedANGLE_Callback";
+
+  @DomName('ANGLEInstancedArrays.drawElementsInstancedANGLE')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void drawElementsInstancedAngle(int mode, int count, int type, int offset, int primcount) native "ANGLEInstancedArrays_drawElementsInstancedANGLE_Callback";
+
+  @DomName('ANGLEInstancedArrays.vertexAttribDivisorANGLE')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void vertexAttribDivisorAngle(int index, int divisor) native "ANGLEInstancedArrays_vertexAttribDivisorANGLE_Callback";
+
+}
+// Copyright (c) 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('WebKitAnimationEvent')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.SAFARI)
@@ -303,11 +324,11 @@
 
   @DomName('WebKitAnimationEvent.animationName')
   @DocsEditable()
-  String get animationName native "AnimationEvent_animationName_Getter";
+  String get animationName native "WebKitAnimationEvent_animationName_Getter";
 
   @DomName('WebKitAnimationEvent.elapsedTime')
   @DocsEditable()
-  num get elapsedTime native "AnimationEvent_elapsedTime_Getter";
+  num get elapsedTime native "WebKitAnimationEvent_elapsedTime_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -1945,7 +1966,7 @@
 
 @DocsEditable()
 @DomName('CharacterData')
-class CharacterData extends Node {
+class CharacterData extends Node implements ChildNode {
   // To suppress missing implicit constructor warnings.
   factory CharacterData._() { throw new UnsupportedError("Not supported"); }
 
@@ -1961,14 +1982,6 @@
   @DocsEditable()
   int get length native "CharacterData_length_Getter";
 
-  @DomName('CharacterData.nextElementSibling')
-  @DocsEditable()
-  Element get nextElementSibling native "CharacterData_nextElementSibling_Getter";
-
-  @DomName('CharacterData.previousElementSibling')
-  @DocsEditable()
-  Element get previousElementSibling native "CharacterData_previousElementSibling_Getter";
-
   @DomName('CharacterData.appendData')
   @DocsEditable()
   void appendData(String data) native "CharacterData_appendData_Callback";
@@ -1989,6 +2002,42 @@
   @DocsEditable()
   String substringData(int offset, int length) native "CharacterData_substringData_Callback";
 
+  @DomName('CharacterData.nextElementSibling')
+  @DocsEditable()
+  Element get nextElementSibling native "CharacterData_nextElementSibling_Getter";
+
+  @DomName('CharacterData.previousElementSibling')
+  @DocsEditable()
+  Element get previousElementSibling native "CharacterData_previousElementSibling_Getter";
+
+}
+// Copyright (c) 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('ChildNode')
+@Experimental() // untriaged
+abstract class ChildNode extends NativeFieldWrapperClass1 {
+
+  @DomName('ChildNode.nextElementSibling')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Element get nextElementSibling native "ChildNode_nextElementSibling_Getter";
+
+  @DomName('ChildNode.previousElementSibling')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Element get previousElementSibling native "ChildNode_previousElementSibling_Getter";
+
+  @DomName('ChildNode.remove')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void remove() native "ChildNode_remove_Callback";
+
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -2305,6 +2354,11 @@
   /// Checks if this type is supported on the current platform.
   static bool get supported => true;
 
+  @DomName('Crypto.subtle')
+  @DocsEditable()
+  @Experimental() // untriaged
+  SubtleCrypto get subtle native "Crypto_subtle_Getter";
+
   @DomName('Crypto.getRandomValues')
   @DocsEditable()
   TypedData getRandomValues(TypedData array) native "Crypto_getRandomValues_Callback";
@@ -2375,7 +2429,7 @@
 
   @DomName('WebKitCSSFilterRule.style')
   @DocsEditable()
-  CssStyleDeclaration get style native "CSSFilterRule_style_Getter";
+  CssStyleDeclaration get style native "WebKitCSSFilterRule_style_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2446,11 +2500,11 @@
 
   @DomName('WebKitCSSFilterValue.operationType')
   @DocsEditable()
-  int get operationType native "CSSFilterValue_operationType_Getter";
+  int get operationType native "WebKitCSSFilterValue_operationType_Getter";
 
   @DomName('WebKitCSSFilterValue.__getter__')
   @DocsEditable()
-  _CSSValue __getter__(int index) native "CSSFilterValue___getter___Callback";
+  _CSSValue __getter__(int index) native "WebKitCSSFilterValue___getter___Callback";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2569,15 +2623,15 @@
 
   @DomName('WebKitCSSKeyframeRule.keyText')
   @DocsEditable()
-  String get keyText native "CSSKeyframeRule_keyText_Getter";
+  String get keyText native "WebKitCSSKeyframeRule_keyText_Getter";
 
   @DomName('WebKitCSSKeyframeRule.keyText')
   @DocsEditable()
-  void set keyText(String value) native "CSSKeyframeRule_keyText_Setter";
+  void set keyText(String value) native "WebKitCSSKeyframeRule_keyText_Setter";
 
   @DomName('WebKitCSSKeyframeRule.style')
   @DocsEditable()
-  CssStyleDeclaration get style native "CSSKeyframeRule_style_Getter";
+  CssStyleDeclaration get style native "WebKitCSSKeyframeRule_style_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2597,31 +2651,31 @@
 
   @DomName('WebKitCSSKeyframesRule.cssRules')
   @DocsEditable()
-  List<CssRule> get cssRules native "CSSKeyframesRule_cssRules_Getter";
+  List<CssRule> get cssRules native "WebKitCSSKeyframesRule_cssRules_Getter";
 
   @DomName('WebKitCSSKeyframesRule.name')
   @DocsEditable()
-  String get name native "CSSKeyframesRule_name_Getter";
+  String get name native "WebKitCSSKeyframesRule_name_Getter";
 
   @DomName('WebKitCSSKeyframesRule.name')
   @DocsEditable()
-  void set name(String value) native "CSSKeyframesRule_name_Setter";
+  void set name(String value) native "WebKitCSSKeyframesRule_name_Setter";
 
   @DomName('WebKitCSSKeyframesRule.__getter__')
   @DocsEditable()
-  CssKeyframeRule __getter__(int index) native "CSSKeyframesRule___getter___Callback";
+  CssKeyframeRule __getter__(int index) native "WebKitCSSKeyframesRule___getter___Callback";
 
   @DomName('WebKitCSSKeyframesRule.deleteRule')
   @DocsEditable()
-  void deleteRule(String key) native "CSSKeyframesRule_deleteRule_Callback";
+  void deleteRule(String key) native "WebKitCSSKeyframesRule_deleteRule_Callback";
 
   @DomName('WebKitCSSKeyframesRule.findRule')
   @DocsEditable()
-  CssKeyframeRule findRule(String key) native "CSSKeyframesRule_findRule_Callback";
+  CssKeyframeRule findRule(String key) native "WebKitCSSKeyframesRule_findRule_Callback";
 
   @DomName('WebKitCSSKeyframesRule.insertRule')
   @DocsEditable()
-  void appendRule(String rule) native "CSSKeyframesRule_insertRule_Callback";
+  void appendRule(String rule) native "WebKitCSSKeyframesRule_insertRule_Callback";
 
 
 }
@@ -2644,230 +2698,230 @@
 @deprecated // deprecated
 class CssMatrix extends NativeFieldWrapperClass1 {
 
-  @DomName('WebKitCSSMatrix.CSSMatrix')
+  @DomName('WebKitCSSMatrix.WebKitCSSMatrix')
   @DocsEditable()
   factory CssMatrix([String cssValue]) {
     return CssMatrix._create_1(cssValue);
   }
 
   @DocsEditable()
-  static CssMatrix _create_1(cssValue) native "CSSMatrix__create_1constructorCallback";
+  static CssMatrix _create_1(cssValue) native "WebKitCSSMatrix__create_1constructorCallback";
 
   @DomName('WebKitCSSMatrix.a')
   @DocsEditable()
-  num get a native "CSSMatrix_a_Getter";
+  num get a native "WebKitCSSMatrix_a_Getter";
 
   @DomName('WebKitCSSMatrix.a')
   @DocsEditable()
-  void set a(num value) native "CSSMatrix_a_Setter";
+  void set a(num value) native "WebKitCSSMatrix_a_Setter";
 
   @DomName('WebKitCSSMatrix.b')
   @DocsEditable()
-  num get b native "CSSMatrix_b_Getter";
+  num get b native "WebKitCSSMatrix_b_Getter";
 
   @DomName('WebKitCSSMatrix.b')
   @DocsEditable()
-  void set b(num value) native "CSSMatrix_b_Setter";
+  void set b(num value) native "WebKitCSSMatrix_b_Setter";
 
   @DomName('WebKitCSSMatrix.c')
   @DocsEditable()
-  num get c native "CSSMatrix_c_Getter";
+  num get c native "WebKitCSSMatrix_c_Getter";
 
   @DomName('WebKitCSSMatrix.c')
   @DocsEditable()
-  void set c(num value) native "CSSMatrix_c_Setter";
+  void set c(num value) native "WebKitCSSMatrix_c_Setter";
 
   @DomName('WebKitCSSMatrix.d')
   @DocsEditable()
-  num get d native "CSSMatrix_d_Getter";
+  num get d native "WebKitCSSMatrix_d_Getter";
 
   @DomName('WebKitCSSMatrix.d')
   @DocsEditable()
-  void set d(num value) native "CSSMatrix_d_Setter";
+  void set d(num value) native "WebKitCSSMatrix_d_Setter";
 
   @DomName('WebKitCSSMatrix.e')
   @DocsEditable()
-  num get e native "CSSMatrix_e_Getter";
+  num get e native "WebKitCSSMatrix_e_Getter";
 
   @DomName('WebKitCSSMatrix.e')
   @DocsEditable()
-  void set e(num value) native "CSSMatrix_e_Setter";
+  void set e(num value) native "WebKitCSSMatrix_e_Setter";
 
   @DomName('WebKitCSSMatrix.f')
   @DocsEditable()
-  num get f native "CSSMatrix_f_Getter";
+  num get f native "WebKitCSSMatrix_f_Getter";
 
   @DomName('WebKitCSSMatrix.f')
   @DocsEditable()
-  void set f(num value) native "CSSMatrix_f_Setter";
+  void set f(num value) native "WebKitCSSMatrix_f_Setter";
 
   @DomName('WebKitCSSMatrix.m11')
   @DocsEditable()
-  num get m11 native "CSSMatrix_m11_Getter";
+  num get m11 native "WebKitCSSMatrix_m11_Getter";
 
   @DomName('WebKitCSSMatrix.m11')
   @DocsEditable()
-  void set m11(num value) native "CSSMatrix_m11_Setter";
+  void set m11(num value) native "WebKitCSSMatrix_m11_Setter";
 
   @DomName('WebKitCSSMatrix.m12')
   @DocsEditable()
-  num get m12 native "CSSMatrix_m12_Getter";
+  num get m12 native "WebKitCSSMatrix_m12_Getter";
 
   @DomName('WebKitCSSMatrix.m12')
   @DocsEditable()
-  void set m12(num value) native "CSSMatrix_m12_Setter";
+  void set m12(num value) native "WebKitCSSMatrix_m12_Setter";
 
   @DomName('WebKitCSSMatrix.m13')
   @DocsEditable()
-  num get m13 native "CSSMatrix_m13_Getter";
+  num get m13 native "WebKitCSSMatrix_m13_Getter";
 
   @DomName('WebKitCSSMatrix.m13')
   @DocsEditable()
-  void set m13(num value) native "CSSMatrix_m13_Setter";
+  void set m13(num value) native "WebKitCSSMatrix_m13_Setter";
 
   @DomName('WebKitCSSMatrix.m14')
   @DocsEditable()
-  num get m14 native "CSSMatrix_m14_Getter";
+  num get m14 native "WebKitCSSMatrix_m14_Getter";
 
   @DomName('WebKitCSSMatrix.m14')
   @DocsEditable()
-  void set m14(num value) native "CSSMatrix_m14_Setter";
+  void set m14(num value) native "WebKitCSSMatrix_m14_Setter";
 
   @DomName('WebKitCSSMatrix.m21')
   @DocsEditable()
-  num get m21 native "CSSMatrix_m21_Getter";
+  num get m21 native "WebKitCSSMatrix_m21_Getter";
 
   @DomName('WebKitCSSMatrix.m21')
   @DocsEditable()
-  void set m21(num value) native "CSSMatrix_m21_Setter";
+  void set m21(num value) native "WebKitCSSMatrix_m21_Setter";
 
   @DomName('WebKitCSSMatrix.m22')
   @DocsEditable()
-  num get m22 native "CSSMatrix_m22_Getter";
+  num get m22 native "WebKitCSSMatrix_m22_Getter";
 
   @DomName('WebKitCSSMatrix.m22')
   @DocsEditable()
-  void set m22(num value) native "CSSMatrix_m22_Setter";
+  void set m22(num value) native "WebKitCSSMatrix_m22_Setter";
 
   @DomName('WebKitCSSMatrix.m23')
   @DocsEditable()
-  num get m23 native "CSSMatrix_m23_Getter";
+  num get m23 native "WebKitCSSMatrix_m23_Getter";
 
   @DomName('WebKitCSSMatrix.m23')
   @DocsEditable()
-  void set m23(num value) native "CSSMatrix_m23_Setter";
+  void set m23(num value) native "WebKitCSSMatrix_m23_Setter";
 
   @DomName('WebKitCSSMatrix.m24')
   @DocsEditable()
-  num get m24 native "CSSMatrix_m24_Getter";
+  num get m24 native "WebKitCSSMatrix_m24_Getter";
 
   @DomName('WebKitCSSMatrix.m24')
   @DocsEditable()
-  void set m24(num value) native "CSSMatrix_m24_Setter";
+  void set m24(num value) native "WebKitCSSMatrix_m24_Setter";
 
   @DomName('WebKitCSSMatrix.m31')
   @DocsEditable()
-  num get m31 native "CSSMatrix_m31_Getter";
+  num get m31 native "WebKitCSSMatrix_m31_Getter";
 
   @DomName('WebKitCSSMatrix.m31')
   @DocsEditable()
-  void set m31(num value) native "CSSMatrix_m31_Setter";
+  void set m31(num value) native "WebKitCSSMatrix_m31_Setter";
 
   @DomName('WebKitCSSMatrix.m32')
   @DocsEditable()
-  num get m32 native "CSSMatrix_m32_Getter";
+  num get m32 native "WebKitCSSMatrix_m32_Getter";
 
   @DomName('WebKitCSSMatrix.m32')
   @DocsEditable()
-  void set m32(num value) native "CSSMatrix_m32_Setter";
+  void set m32(num value) native "WebKitCSSMatrix_m32_Setter";
 
   @DomName('WebKitCSSMatrix.m33')
   @DocsEditable()
-  num get m33 native "CSSMatrix_m33_Getter";
+  num get m33 native "WebKitCSSMatrix_m33_Getter";
 
   @DomName('WebKitCSSMatrix.m33')
   @DocsEditable()
-  void set m33(num value) native "CSSMatrix_m33_Setter";
+  void set m33(num value) native "WebKitCSSMatrix_m33_Setter";
 
   @DomName('WebKitCSSMatrix.m34')
   @DocsEditable()
-  num get m34 native "CSSMatrix_m34_Getter";
+  num get m34 native "WebKitCSSMatrix_m34_Getter";
 
   @DomName('WebKitCSSMatrix.m34')
   @DocsEditable()
-  void set m34(num value) native "CSSMatrix_m34_Setter";
+  void set m34(num value) native "WebKitCSSMatrix_m34_Setter";
 
   @DomName('WebKitCSSMatrix.m41')
   @DocsEditable()
-  num get m41 native "CSSMatrix_m41_Getter";
+  num get m41 native "WebKitCSSMatrix_m41_Getter";
 
   @DomName('WebKitCSSMatrix.m41')
   @DocsEditable()
-  void set m41(num value) native "CSSMatrix_m41_Setter";
+  void set m41(num value) native "WebKitCSSMatrix_m41_Setter";
 
   @DomName('WebKitCSSMatrix.m42')
   @DocsEditable()
-  num get m42 native "CSSMatrix_m42_Getter";
+  num get m42 native "WebKitCSSMatrix_m42_Getter";
 
   @DomName('WebKitCSSMatrix.m42')
   @DocsEditable()
-  void set m42(num value) native "CSSMatrix_m42_Setter";
+  void set m42(num value) native "WebKitCSSMatrix_m42_Setter";
 
   @DomName('WebKitCSSMatrix.m43')
   @DocsEditable()
-  num get m43 native "CSSMatrix_m43_Getter";
+  num get m43 native "WebKitCSSMatrix_m43_Getter";
 
   @DomName('WebKitCSSMatrix.m43')
   @DocsEditable()
-  void set m43(num value) native "CSSMatrix_m43_Setter";
+  void set m43(num value) native "WebKitCSSMatrix_m43_Setter";
 
   @DomName('WebKitCSSMatrix.m44')
   @DocsEditable()
-  num get m44 native "CSSMatrix_m44_Getter";
+  num get m44 native "WebKitCSSMatrix_m44_Getter";
 
   @DomName('WebKitCSSMatrix.m44')
   @DocsEditable()
-  void set m44(num value) native "CSSMatrix_m44_Setter";
+  void set m44(num value) native "WebKitCSSMatrix_m44_Setter";
 
   @DomName('WebKitCSSMatrix.inverse')
   @DocsEditable()
-  CssMatrix inverse() native "CSSMatrix_inverse_Callback";
+  CssMatrix inverse() native "WebKitCSSMatrix_inverse_Callback";
 
   @DomName('WebKitCSSMatrix.multiply')
   @DocsEditable()
-  CssMatrix multiply(CssMatrix secondMatrix) native "CSSMatrix_multiply_Callback";
+  CssMatrix multiply(CssMatrix secondMatrix) native "WebKitCSSMatrix_multiply_Callback";
 
   @DomName('WebKitCSSMatrix.rotate')
   @DocsEditable()
-  CssMatrix rotate(num rotX, num rotY, num rotZ) native "CSSMatrix_rotate_Callback";
+  CssMatrix rotate(num rotX, num rotY, num rotZ) native "WebKitCSSMatrix_rotate_Callback";
 
   @DomName('WebKitCSSMatrix.rotateAxisAngle')
   @DocsEditable()
-  CssMatrix rotateAxisAngle(num x, num y, num z, num angle) native "CSSMatrix_rotateAxisAngle_Callback";
+  CssMatrix rotateAxisAngle(num x, num y, num z, num angle) native "WebKitCSSMatrix_rotateAxisAngle_Callback";
 
   @DomName('WebKitCSSMatrix.scale')
   @DocsEditable()
-  CssMatrix scale(num scaleX, num scaleY, num scaleZ) native "CSSMatrix_scale_Callback";
+  CssMatrix scale(num scaleX, num scaleY, num scaleZ) native "WebKitCSSMatrix_scale_Callback";
 
   @DomName('WebKitCSSMatrix.setMatrixValue')
   @DocsEditable()
-  void setMatrixValue(String string) native "CSSMatrix_setMatrixValue_Callback";
+  void setMatrixValue(String string) native "WebKitCSSMatrix_setMatrixValue_Callback";
 
   @DomName('WebKitCSSMatrix.skewX')
   @DocsEditable()
-  CssMatrix skewX(num angle) native "CSSMatrix_skewX_Callback";
+  CssMatrix skewX(num angle) native "WebKitCSSMatrix_skewX_Callback";
 
   @DomName('WebKitCSSMatrix.skewY')
   @DocsEditable()
-  CssMatrix skewY(num angle) native "CSSMatrix_skewY_Callback";
+  CssMatrix skewY(num angle) native "WebKitCSSMatrix_skewY_Callback";
 
   @DomName('WebKitCSSMatrix.toString')
   @DocsEditable()
-  String toString() native "CSSMatrix_toString_Callback";
+  String toString() native "WebKitCSSMatrix_toString_Callback";
 
   @DomName('WebKitCSSMatrix.translate')
   @DocsEditable()
-  CssMatrix translate(num x, num y, num z) native "CSSMatrix_translate_Callback";
+  CssMatrix translate(num x, num y, num z) native "WebKitCSSMatrix_translate_Callback";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -2964,7 +3018,7 @@
 
   @DomName('WebKitCSSRegionRule.cssRules')
   @DocsEditable()
-  List<CssRule> get cssRules native "CSSRegionRule_cssRules_Getter";
+  List<CssRule> get cssRules native "WebKitCSSRegionRule_cssRules_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -3018,6 +3072,11 @@
   @deprecated // deprecated
   static const int UNKNOWN_RULE = 0;
 
+  @DomName('CSSRule.VIEWPORT_RULE')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const int VIEWPORT_RULE = 15;
+
   @DomName('CSSRule.WEBKIT_FILTER_RULE')
   @DocsEditable()
   // http://www.w3.org/TR/filter-effects/
@@ -6513,11 +6572,11 @@
 
   @DomName('WebKitCSSTransformValue.operationType')
   @DocsEditable()
-  int get operationType native "CSSTransformValue_operationType_Getter";
+  int get operationType native "WebKitCSSTransformValue_operationType_Getter";
 
   @DomName('WebKitCSSTransformValue.__getter__')
   @DocsEditable()
-  _CSSValue __getter__(int index) native "CSSTransformValue___getter___Callback";
+  _CSSValue __getter__(int index) native "WebKitCSSTransformValue___getter___Callback";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -6544,10 +6603,16 @@
 
 
 @DocsEditable()
-@DomName('CustomElementConstructor')
-// https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/custom/index.html#dfn-custom-element-constructor-generation
-@deprecated // experimental
-class CustomElementConstructor extends NativeFieldWrapperClass1 {
+@DomName('CSSViewportRule')
+@Experimental() // untriaged
+class CssViewportRule extends CssRule {
+  // To suppress missing implicit constructor warnings.
+  factory CssViewportRule._() { throw new UnsupportedError("Not supported"); }
+
+  @DomName('CSSViewportRule.style')
+  @DocsEditable()
+  @Experimental() // untriaged
+  CssStyleDeclaration get style native "CSSViewportRule_style_Getter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -7224,14 +7289,6 @@
   @deprecated // nonstandard
   void set charset(String value) native "Document_charset_Setter";
 
-  @DomName('Document.childElementCount')
-  @DocsEditable()
-  int get childElementCount native "Document_childElementCount_Getter";
-
-  @DomName('Document.children')
-  @DocsEditable()
-  HtmlCollection get children native "Document_children_Getter";
-
   @DomName('Document.cookie')
   @DocsEditable()
   String get cookie native "Document_cookie_Getter";
@@ -7240,6 +7297,11 @@
   @DocsEditable()
   void set cookie(String value) native "Document_cookie_Setter";
 
+  @DomName('Document.currentScript')
+  @DocsEditable()
+  @Experimental() // untriaged
+  ScriptElement get currentScript native "Document_currentScript_Getter";
+
   @DomName('Document.defaultView')
   @DocsEditable()
   WindowBase get window native "Document_defaultView_Getter";
@@ -7252,10 +7314,6 @@
   @DocsEditable()
   String get domain native "Document_domain_Getter";
 
-  @DomName('Document.firstElementChild')
-  @DocsEditable()
-  Element get firstElementChild native "Document_firstElementChild_Getter";
-
   @DomName('Document.fontloader')
   @DocsEditable()
   // http://www.w3.org/TR/css3-fonts/#document-fontloader
@@ -7271,10 +7329,6 @@
   @DocsEditable()
   DomImplementation get implementation native "Document_implementation_Getter";
 
-  @DomName('Document.lastElementChild')
-  @DocsEditable()
-  Element get lastElementChild native "Document_lastElementChild_Getter";
-
   /// Moved to [HtmlDocument].
   @DomName('Document.lastModified')
   @DocsEditable()
@@ -7429,10 +7483,26 @@
   @DocsEditable()
   Event $dom_createEvent(String eventType) native "Document_createEvent_Callback";
 
-  @DomName('Document.createNodeIterator')
-  @DocsEditable()
-  @Unstable()
-  NodeIterator $dom_createNodeIterator(Node root, int whatToShow, NodeFilter filter, bool expandEntityReferences) native "Document_createNodeIterator_Callback";
+  NodeIterator $dom_createNodeIterator(Node root, [int whatToShow, NodeFilter filter, bool expandEntityReferences]) {
+    if (expandEntityReferences != null) {
+      return _createNodeIterator_1(root, whatToShow, filter, expandEntityReferences);
+    }
+    if (filter != null) {
+      return _createNodeIterator_2(root, whatToShow, filter);
+    }
+    if (whatToShow != null) {
+      return _createNodeIterator_3(root, whatToShow);
+    }
+    return _createNodeIterator_4(root);
+  }
+
+  NodeIterator _createNodeIterator_1(root, whatToShow, filter, expandEntityReferences) native "Document__createNodeIterator_1_Callback";
+
+  NodeIterator _createNodeIterator_2(root, whatToShow, filter) native "Document__createNodeIterator_2_Callback";
+
+  NodeIterator _createNodeIterator_3(root, whatToShow) native "Document__createNodeIterator_3_Callback";
+
+  NodeIterator _createNodeIterator_4(root) native "Document__createNodeIterator_4_Callback";
 
   @DomName('Document.createRange')
   @DocsEditable()
@@ -7455,9 +7525,26 @@
   @Experimental()
   TouchList $dom_createTouchList() native "Document_createTouchList_Callback";
 
-  @DomName('Document.createTreeWalker')
-  @DocsEditable()
-  TreeWalker $dom_createTreeWalker(Node root, int whatToShow, NodeFilter filter, bool expandEntityReferences) native "Document_createTreeWalker_Callback";
+  TreeWalker $dom_createTreeWalker(Node root, [int whatToShow, NodeFilter filter, bool expandEntityReferences]) {
+    if (expandEntityReferences != null) {
+      return _createTreeWalker_1(root, whatToShow, filter, expandEntityReferences);
+    }
+    if (filter != null) {
+      return _createTreeWalker_2(root, whatToShow, filter);
+    }
+    if (whatToShow != null) {
+      return _createTreeWalker_3(root, whatToShow);
+    }
+    return _createTreeWalker_4(root);
+  }
+
+  TreeWalker _createTreeWalker_1(root, whatToShow, filter, expandEntityReferences) native "Document__createTreeWalker_1_Callback";
+
+  TreeWalker _createTreeWalker_2(root, whatToShow, filter) native "Document__createTreeWalker_2_Callback";
+
+  TreeWalker _createTreeWalker_3(root, whatToShow) native "Document__createTreeWalker_3_Callback";
+
+  TreeWalker _createTreeWalker_4(root) native "Document__createTreeWalker_4_Callback";
 
   @DomName('Document.elementFromPoint')
   @DocsEditable()
@@ -7581,13 +7668,21 @@
   // http://www.w3.org/TR/css3-regions/#dom-named-flow-collection
   NamedFlowCollection getNamedFlows() native "Document_webkitGetNamedFlows_Callback";
 
-  @DomName('Document.webkitRegister')
+  @DomName('Document.childElementCount')
   @DocsEditable()
-  @SupportedBrowser(SupportedBrowser.CHROME)
-  @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/custom/index.html#dfn-document-register
-  CustomElementConstructor register(String name, [Map options]) native "Document_webkitRegister_Callback";
+  int get $dom_childElementCount native "Document_childElementCount_Getter";
+
+  @DomName('Document.children')
+  @DocsEditable()
+  HtmlCollection get $dom_children native "Document_children_Getter";
+
+  @DomName('Document.firstElementChild')
+  @DocsEditable()
+  Element get $dom_firstElementChild native "Document_firstElementChild_Getter";
+
+  @DomName('Document.lastElementChild')
+  @DocsEditable()
+  Element get $dom_lastElementChild native "Document_lastElementChild_Getter";
 
   @DomName('Document.onabort')
   @DocsEditable()
@@ -7834,7 +7929,7 @@
 
 
 @DomName('DocumentFragment')
-class DocumentFragment extends Node {
+class DocumentFragment extends Node implements ParentNode {
   factory DocumentFragment() => document.createDocumentFragment();
 
   factory DocumentFragment.html(String html) {
@@ -7915,18 +8010,6 @@
   // To suppress missing implicit constructor warnings.
   factory DocumentFragment._() { throw new UnsupportedError("Not supported"); }
 
-  @DomName('DocumentFragment.childElementCount')
-  @DocsEditable()
-  int get childElementCount native "DocumentFragment_childElementCount_Getter";
-
-  @DomName('DocumentFragment.firstElementChild')
-  @DocsEditable()
-  Element get firstElementChild native "DocumentFragment_firstElementChild_Getter";
-
-  @DomName('DocumentFragment.lastElementChild')
-  @DocsEditable()
-  Element get lastElementChild native "DocumentFragment_lastElementChild_Getter";
-
   @DomName('DocumentFragment.querySelector')
   @DocsEditable()
   Element $dom_querySelector(String selectors) native "DocumentFragment_querySelector_Callback";
@@ -7935,6 +8018,18 @@
   @DocsEditable()
   List<Node> $dom_querySelectorAll(String selectors) native "DocumentFragment_querySelectorAll_Callback";
 
+  @DomName('DocumentFragment.childElementCount')
+  @DocsEditable()
+  int get $dom_childElementCount native "DocumentFragment_childElementCount_Getter";
+
+  @DomName('DocumentFragment.firstElementChild')
+  @DocsEditable()
+  Element get $dom_firstElementChild native "DocumentFragment_firstElementChild_Getter";
+
+  @DomName('DocumentFragment.lastElementChild')
+  @DocsEditable()
+  Element get $dom_lastElementChild native "DocumentFragment_lastElementChild_Getter";
+
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -7947,7 +8042,7 @@
 @DomName('DocumentType')
 // http://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-412266927
 @deprecated // stable
-class DocumentType extends Node {
+class DocumentType extends Node implements ChildNode {
   // To suppress missing implicit constructor warnings.
   factory DocumentType._() { throw new UnsupportedError("Not supported"); }
 
@@ -7963,6 +8058,11 @@
 @DomName('DOMError')
 class DomError extends NativeFieldWrapperClass1 {
 
+  @DomName('DOMError.message')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String get message native "DOMError_message_Getter";
+
   @DomName('DOMError.name')
   @DocsEditable()
   String get name native "DOMError_name_Getter";
@@ -8002,15 +8102,15 @@
 
   @DomName('DOMException.message')
   @DocsEditable()
-  String get message native "DOMCoreException_message_Getter";
+  String get message native "DOMException_message_Getter";
 
   @DomName('DOMException.name')
   @DocsEditable()
-  String get name native "DOMCoreException_name_Getter";
+  String get name native "DOMException_name_Getter";
 
   @DomName('DOMException.toString')
   @DocsEditable()
-  String toString() native "DOMCoreException_toString_Callback";
+  String toString() native "DOMException_toString_Callback";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -8518,7 +8618,7 @@
  * An abstract class, which all HTML elements extend.
  */
 @DomName('Element')
-abstract class Element extends Node implements ElementTraversal {
+abstract class Element extends Node implements ParentNode, ChildNode {
 
   /**
    * Creates an HTML element from a valid fragment of HTML.
@@ -9429,14 +9529,6 @@
   @DocsEditable()
   _NamedNodeMap get $dom_attributes native "Element_attributes_Getter";
 
-  @DomName('Element.childElementCount')
-  @DocsEditable()
-  int get $dom_childElementCount native "Element_childElementCount_Getter";
-
-  @DomName('Element.children')
-  @DocsEditable()
-  HtmlCollection get $dom_children native "Element_children_Getter";
-
   @DomName('Element.className')
   @DocsEditable()
   String get className native "Element_className_Getter";
@@ -9461,18 +9553,6 @@
   @DocsEditable()
   int get clientWidth native "Element_clientWidth_Getter";
 
-  @DomName('Element.firstElementChild')
-  @DocsEditable()
-  Element get $dom_firstElementChild native "Element_firstElementChild_Getter";
-
-  @DomName('Element.lastElementChild')
-  @DocsEditable()
-  Element get $dom_lastElementChild native "Element_lastElementChild_Getter";
-
-  @DomName('Element.nextElementSibling')
-  @DocsEditable()
-  Element get nextElementSibling native "Element_nextElementSibling_Getter";
-
   @DomName('Element.offsetHeight')
   @DocsEditable()
   int get offsetHeight native "Element_offsetHeight_Getter";
@@ -9493,10 +9573,6 @@
   @DocsEditable()
   int get offsetWidth native "Element_offsetWidth_Getter";
 
-  @DomName('Element.previousElementSibling')
-  @DocsEditable()
-  Element get previousElementSibling native "Element_previousElementSibling_Getter";
-
   @DomName('Element.scrollHeight')
   @DocsEditable()
   int get scrollHeight native "Element_scrollHeight_Getter";
@@ -9626,10 +9702,6 @@
   @DocsEditable()
   List<Node> $dom_querySelectorAll(String selectors) native "Element_querySelectorAll_Callback";
 
-  @DomName('Element.remove')
-  @DocsEditable()
-  void remove() native "Element_remove_Callback";
-
   @DomName('Element.removeAttribute')
   @DocsEditable()
   void $dom_removeAttribute(String name) native "Element_removeAttribute_Callback";
@@ -9726,6 +9798,34 @@
   // https://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html#widl-Element-requestPointerLock-void
   void requestPointerLock() native "Element_webkitRequestPointerLock_Callback";
 
+  @DomName('Element.nextElementSibling')
+  @DocsEditable()
+  Element get nextElementSibling native "Element_nextElementSibling_Getter";
+
+  @DomName('Element.previousElementSibling')
+  @DocsEditable()
+  Element get previousElementSibling native "Element_previousElementSibling_Getter";
+
+  @DomName('Element.remove')
+  @DocsEditable()
+  void remove() native "Element_remove_Callback";
+
+  @DomName('Element.childElementCount')
+  @DocsEditable()
+  int get $dom_childElementCount native "Element_childElementCount_Getter";
+
+  @DomName('Element.children')
+  @DocsEditable()
+  HtmlCollection get $dom_children native "Element_children_Getter";
+
+  @DomName('Element.firstElementChild')
+  @DocsEditable()
+  Element get $dom_firstElementChild native "Element_firstElementChild_Getter";
+
+  @DomName('Element.lastElementChild')
+  @DocsEditable()
+  Element get $dom_lastElementChild native "Element_lastElementChild_Getter";
+
   @DomName('Element.onabort')
   @DocsEditable()
   Stream<Event> get onAbort => abortEvent.forTarget(this);
@@ -10118,39 +10218,6 @@
 
 
 @DocsEditable()
-@DomName('ElementTraversal')
-@Unstable()
-abstract class ElementTraversal extends NativeFieldWrapperClass1 {
-
-  @DomName('ElementTraversal.childElementCount')
-  @DocsEditable()
-  int get $dom_childElementCount native "ElementTraversal_childElementCount_Getter";
-
-  @DomName('ElementTraversal.firstElementChild')
-  @DocsEditable()
-  Element get $dom_firstElementChild native "ElementTraversal_firstElementChild_Getter";
-
-  @DomName('ElementTraversal.lastElementChild')
-  @DocsEditable()
-  Element get $dom_lastElementChild native "ElementTraversal_lastElementChild_Getter";
-
-  @DomName('ElementTraversal.nextElementSibling')
-  @DocsEditable()
-  Element get nextElementSibling native "ElementTraversal_nextElementSibling_Getter";
-
-  @DomName('ElementTraversal.previousElementSibling')
-  @DocsEditable()
-  Element get previousElementSibling native "ElementTraversal_previousElementSibling_Getter";
-
-}
-// Copyright (c) 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('HTMLEmbedElement')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.IE)
@@ -10630,45 +10697,6 @@
   void stopPropagation() native "Event_stopPropagation_Callback";
 
 }
-// Copyright (c) 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('EventException')
-@Unstable()
-class EventException extends NativeFieldWrapperClass1 {
-
-  @DomName('EventException.DISPATCH_REQUEST_ERR')
-  @DocsEditable()
-  static const int DISPATCH_REQUEST_ERR = 1;
-
-  @DomName('EventException.UNSPECIFIED_EVENT_TYPE_ERR')
-  @DocsEditable()
-  static const int UNSPECIFIED_EVENT_TYPE_ERR = 0;
-
-  @DomName('EventException.code')
-  @DocsEditable()
-  int get code native "EventException_code_Getter";
-
-  @DomName('EventException.message')
-  @DocsEditable()
-  @deprecated // nonstandard
-  String get message native "EventException_message_Getter";
-
-  @DomName('EventException.name')
-  @DocsEditable()
-  @deprecated // nonstandard
-  String get name native "EventException_name_Getter";
-
-  @DomName('EventException.toString')
-  @DocsEditable()
-  String toString() native "EventException_toString_Callback";
-
-}
 // 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.
@@ -11345,6 +11373,24 @@
 
 
 @DocsEditable()
+@DomName('Stream')
+@Experimental() // untriaged
+class FileStream extends NativeFieldWrapperClass1 {
+
+  @DomName('Stream.type')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String get type native "Stream_type_Getter";
+
+}
+// Copyright (c) 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('DOMFileSystem')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @Experimental()
@@ -12834,6 +12880,16 @@
   @DocsEditable()
   String get statusText native "XMLHttpRequest_statusText_Getter";
 
+  @DomName('XMLHttpRequest.timeout')
+  @DocsEditable()
+  @Experimental() // untriaged
+  int get timeout native "XMLHttpRequest_timeout_Getter";
+
+  @DomName('XMLHttpRequest.timeout')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void set timeout(int value) native "XMLHttpRequest_timeout_Setter";
+
   /**
    * [EventTarget] that can hold listeners to track the progress of the request.
    * The events fired will be members of [HttpRequestUploadEvents].
@@ -14786,7 +14842,7 @@
   @DocsEditable()
   // https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/imports/index.html#interface-import
   @Experimental()
-  DocumentFragment get import native "HTMLLinkElement_import_Getter";
+  Document get import native "HTMLLinkElement_import_Getter";
 
   @DomName('HTMLLinkElement.media')
   @DocsEditable()
@@ -14945,6 +15001,16 @@
 // WARNING: Do not edit - generated code.
 
 
+@DomName('MIDISuccessCallback')
+@Experimental() // untriaged
+typedef void MidiSuccessCallback(MidiAccess access, bool sysexEnabled);
+// Copyright (c) 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('HTMLMapElement')
 class MapElement extends _HTMLElement {
@@ -16037,71 +16103,69 @@
 
 
 @DocsEditable()
-@DomName('WebKitMediaSource')
-@SupportedBrowser(SupportedBrowser.CHROME)
-@SupportedBrowser(SupportedBrowser.SAFARI)
-@Experimental()
+@DomName('MediaSource')
 // https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#mediasource
+@Experimental()
 class MediaSource extends EventTarget {
   // To suppress missing implicit constructor warnings.
   factory MediaSource._() { throw new UnsupportedError("Not supported"); }
 
-  @DomName('WebKitMediaSource.WebKitMediaSource')
+  @DomName('MediaSource.MediaSource')
   @DocsEditable()
   factory MediaSource() {
     return MediaSource._create_1();
   }
 
   @DocsEditable()
-  static MediaSource _create_1() native "WebKitMediaSource__create_1constructorCallback";
+  static MediaSource _create_1() native "MediaSource__create_1constructorCallback";
 
-  @DomName('WebKitMediaSource.activeSourceBuffers')
+  @DomName('MediaSource.activeSourceBuffers')
   @DocsEditable()
-  SourceBufferList get activeSourceBuffers native "WebKitMediaSource_activeSourceBuffers_Getter";
+  SourceBufferList get activeSourceBuffers native "MediaSource_activeSourceBuffers_Getter";
 
-  @DomName('WebKitMediaSource.duration')
+  @DomName('MediaSource.duration')
   @DocsEditable()
-  num get duration native "WebKitMediaSource_duration_Getter";
+  num get duration native "MediaSource_duration_Getter";
 
-  @DomName('WebKitMediaSource.duration')
+  @DomName('MediaSource.duration')
   @DocsEditable()
-  void set duration(num value) native "WebKitMediaSource_duration_Setter";
+  void set duration(num value) native "MediaSource_duration_Setter";
 
-  @DomName('WebKitMediaSource.readyState')
+  @DomName('MediaSource.readyState')
   @DocsEditable()
-  String get readyState native "WebKitMediaSource_readyState_Getter";
+  String get readyState native "MediaSource_readyState_Getter";
 
-  @DomName('WebKitMediaSource.sourceBuffers')
+  @DomName('MediaSource.sourceBuffers')
   @DocsEditable()
-  SourceBufferList get sourceBuffers native "WebKitMediaSource_sourceBuffers_Getter";
+  SourceBufferList get sourceBuffers native "MediaSource_sourceBuffers_Getter";
 
-  @DomName('WebKitMediaSource.addEventListener')
+  @DomName('MediaSource.addEventListener')
   @DocsEditable()
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "WebKitMediaSource_addEventListener_Callback";
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "MediaSource_addEventListener_Callback";
 
-  @DomName('WebKitMediaSource.addSourceBuffer')
+  @DomName('MediaSource.addSourceBuffer')
   @DocsEditable()
-  SourceBuffer addSourceBuffer(String type) native "WebKitMediaSource_addSourceBuffer_Callback";
+  SourceBuffer addSourceBuffer(String type) native "MediaSource_addSourceBuffer_Callback";
 
-  @DomName('WebKitMediaSource.dispatchEvent')
+  @DomName('MediaSource.dispatchEvent')
   @DocsEditable()
-  bool dispatchEvent(Event event) native "WebKitMediaSource_dispatchEvent_Callback";
+  bool dispatchEvent(Event event) native "MediaSource_dispatchEvent_Callback";
 
-  @DomName('WebKitMediaSource.endOfStream')
+  @DomName('MediaSource.endOfStream')
   @DocsEditable()
-  void endOfStream(String error) native "WebKitMediaSource_endOfStream_Callback";
+  void endOfStream(String error) native "MediaSource_endOfStream_Callback";
 
-  @DomName('WebKitMediaSource.isTypeSupported')
+  @DomName('MediaSource.isTypeSupported')
   @DocsEditable()
-  static bool isTypeSupported(String type) native "WebKitMediaSource_isTypeSupported_Callback";
+  static bool isTypeSupported(String type) native "MediaSource_isTypeSupported_Callback";
 
-  @DomName('WebKitMediaSource.removeEventListener')
+  @DomName('MediaSource.removeEventListener')
   @DocsEditable()
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "WebKitMediaSource_removeEventListener_Callback";
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "MediaSource_removeEventListener_Callback";
 
-  @DomName('WebKitMediaSource.removeSourceBuffer')
+  @DomName('MediaSource.removeSourceBuffer')
   @DocsEditable()
-  void removeSourceBuffer(SourceBuffer buffer) native "WebKitMediaSource_removeSourceBuffer_Callback";
+  void removeSourceBuffer(SourceBuffer buffer) native "MediaSource_removeSourceBuffer_Callback";
 
 }
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
@@ -16308,6 +16372,11 @@
   @DocsEditable()
   bool dispatchEvent(Event event) native "MediaStreamTrack_dispatchEvent_Callback";
 
+  @DomName('MediaStreamTrack.getSources')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static void getSources(MediaStreamTrackSourcesCallback callback) native "MediaStreamTrack_getSources_Callback";
+
   @DomName('MediaStreamTrack.removeEventListener')
   @DocsEditable()
   void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "MediaStreamTrack_removeEventListener_Callback";
@@ -16356,6 +16425,16 @@
 // 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.
+
+// WARNING: Do not edit - generated code.
+
+
 @DocsEditable()
 @DomName('MemoryInfo')
 @Experimental() // nonstandard
@@ -16741,6 +16820,24 @@
 
 
 @DocsEditable()
+@DomName('MIDIAccessPromise')
+@Experimental() // untriaged
+class MidiAccessPromise extends NativeFieldWrapperClass1 {
+
+  @DomName('MIDIAccessPromise.then')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void then(MidiSuccessCallback successCallback, MidiErrorCallback errorCallback) native "MIDIAccessPromise_then_Callback";
+
+}
+// Copyright (c) 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('MIDIConnectionEvent')
 // http://webaudio.github.io/web-midi-api/#midiconnectionevent-interface
 @Experimental()
@@ -17396,39 +17493,39 @@
 
   @DomName('WebKitNamedFlow.firstEmptyRegionIndex')
   @DocsEditable()
-  int get firstEmptyRegionIndex native "NamedFlow_firstEmptyRegionIndex_Getter";
+  int get firstEmptyRegionIndex native "WebKitNamedFlow_firstEmptyRegionIndex_Getter";
 
   @DomName('WebKitNamedFlow.name')
   @DocsEditable()
-  String get name native "NamedFlow_name_Getter";
+  String get name native "WebKitNamedFlow_name_Getter";
 
   @DomName('WebKitNamedFlow.overset')
   @DocsEditable()
-  bool get overset native "NamedFlow_overset_Getter";
+  bool get overset native "WebKitNamedFlow_overset_Getter";
 
   @DomName('WebKitNamedFlow.addEventListener')
   @DocsEditable()
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "NamedFlow_addEventListener_Callback";
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "WebKitNamedFlow_addEventListener_Callback";
 
   @DomName('WebKitNamedFlow.dispatchEvent')
   @DocsEditable()
-  bool dispatchEvent(Event event) native "NamedFlow_dispatchEvent_Callback";
+  bool dispatchEvent(Event event) native "WebKitNamedFlow_dispatchEvent_Callback";
 
   @DomName('WebKitNamedFlow.getContent')
   @DocsEditable()
-  List<Node> getContent() native "NamedFlow_getContent_Callback";
+  List<Node> getContent() native "WebKitNamedFlow_getContent_Callback";
 
   @DomName('WebKitNamedFlow.getRegions')
   @DocsEditable()
-  List<Node> getRegions() native "NamedFlow_getRegions_Callback";
+  List<Node> getRegions() native "WebKitNamedFlow_getRegions_Callback";
 
   @DomName('WebKitNamedFlow.getRegionsByContent')
   @DocsEditable()
-  List<Node> getRegionsByContent(Node contentNode) native "NamedFlow_getRegionsByContent_Callback";
+  List<Node> getRegionsByContent(Node contentNode) native "WebKitNamedFlow_getRegionsByContent_Callback";
 
   @DomName('WebKitNamedFlow.removeEventListener')
   @DocsEditable()
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "NamedFlow_removeEventListener_Callback";
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "WebKitNamedFlow_removeEventListener_Callback";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17448,19 +17545,19 @@
 
   @DomName('WebKitNamedFlowCollection.length')
   @DocsEditable()
-  int get length native "DOMNamedFlowCollection_length_Getter";
+  int get length native "WebKitNamedFlowCollection_length_Getter";
 
   @DomName('WebKitNamedFlowCollection.__getter__')
   @DocsEditable()
-  NamedFlow __getter__(String name) native "DOMNamedFlowCollection___getter___Callback";
+  NamedFlow __getter__(String name) native "WebKitNamedFlowCollection___getter___Callback";
 
   @DomName('WebKitNamedFlowCollection.item')
   @DocsEditable()
-  NamedFlow item(int index) native "DOMNamedFlowCollection_item_Callback";
+  NamedFlow item(int index) native "WebKitNamedFlowCollection_item_Callback";
 
   @DomName('WebKitNamedFlowCollection.namedItem')
   @DocsEditable()
-  NamedFlow namedItem(String name) native "DOMNamedFlowCollection_namedItem_Callback";
+  NamedFlow namedItem(String name) native "WebKitNamedFlowCollection_namedItem_Callback";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -17636,6 +17733,11 @@
   @Unstable()
   void registerProtocolHandler(String scheme, String url, String title) native "Navigator_registerProtocolHandler_Callback";
 
+  @DomName('Navigator.requestMIDIAccess')
+  @DocsEditable()
+  @Experimental() // untriaged
+  MidiAccessPromise requestMidiAccess([Map options]) native "Navigator_requestMIDIAccess_Callback";
+
   @DomName('Navigator.webkitGetGamepads')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
@@ -19027,6 +19129,39 @@
 
 
 @DocsEditable()
+@DomName('ParentNode')
+@Experimental() // untriaged
+abstract class ParentNode extends NativeFieldWrapperClass1 {
+
+  @DomName('ParentNode.childElementCount')
+  @DocsEditable()
+  @Experimental() // untriaged
+  int get $dom_childElementCount native "ParentNode_childElementCount_Getter";
+
+  @DomName('ParentNode.children')
+  @DocsEditable()
+  @Experimental() // untriaged
+  HtmlCollection get $dom_children native "ParentNode_children_Getter";
+
+  @DomName('ParentNode.firstElementChild')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Element get $dom_firstElementChild native "ParentNode_firstElementChild_Getter";
+
+  @DomName('ParentNode.lastElementChild')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Element get $dom_lastElementChild native "ParentNode_lastElementChild_Getter";
+
+}
+// Copyright (c) 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('Path')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#path-objects
 @Experimental()
@@ -19801,6 +19936,32 @@
 
 
 @DocsEditable()
+@DomName('Promise')
+@Experimental() // untriaged
+class Promise extends NativeFieldWrapperClass1 {
+
+}
+// Copyright (c) 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('PromiseResolver')
+@Experimental() // untriaged
+class PromiseResolver extends NativeFieldWrapperClass1 {
+
+}
+// Copyright (c) 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('HTMLQuoteElement')
 class QuoteElement extends _HTMLElement {
   // To suppress missing implicit constructor warnings.
@@ -21317,6 +21478,11 @@
   @DocsEditable()
   void set innerHtml(String value) native "ShadowRoot_innerHTML_Setter";
 
+  @DomName('ShadowRoot.olderShadowRoot')
+  @DocsEditable()
+  @Experimental() // untriaged
+  ShadowRoot get olderShadowRoot native "ShadowRoot_olderShadowRoot_Getter";
+
   @DomName('ShadowRoot.resetStyleInheritance')
   @DocsEditable()
   bool get resetStyleInheritance native "ShadowRoot_resetStyleInheritance_Getter";
@@ -21359,33 +21525,64 @@
 
 
 @DocsEditable()
-@DomName('WebKitSourceBuffer')
-@SupportedBrowser(SupportedBrowser.CHROME)
-@SupportedBrowser(SupportedBrowser.SAFARI)
-@Experimental()
+@DomName('SourceBuffer')
 // https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#sourcebuffer
-class SourceBuffer extends NativeFieldWrapperClass1 {
+@Experimental()
+class SourceBuffer extends EventTarget {
+  // To suppress missing implicit constructor warnings.
+  factory SourceBuffer._() { throw new UnsupportedError("Not supported"); }
 
-  @DomName('WebKitSourceBuffer.buffered')
+  @DomName('SourceBuffer.buffered')
   @DocsEditable()
-  TimeRanges get buffered native "WebKitSourceBuffer_buffered_Getter";
+  TimeRanges get buffered native "SourceBuffer_buffered_Getter";
 
-  @DomName('WebKitSourceBuffer.timestampOffset')
+  @DomName('SourceBuffer.timestampOffset')
   @DocsEditable()
-  num get timestampOffset native "WebKitSourceBuffer_timestampOffset_Getter";
+  num get timestampOffset native "SourceBuffer_timestampOffset_Getter";
 
-  @DomName('WebKitSourceBuffer.timestampOffset')
+  @DomName('SourceBuffer.timestampOffset')
   @DocsEditable()
-  void set timestampOffset(num value) native "WebKitSourceBuffer_timestampOffset_Setter";
+  void set timestampOffset(num value) native "SourceBuffer_timestampOffset_Setter";
 
-  @DomName('WebKitSourceBuffer.abort')
+  @DomName('SourceBuffer.updating')
   @DocsEditable()
-  void abort() native "WebKitSourceBuffer_abort_Callback";
+  @Experimental() // untriaged
+  bool get updating native "SourceBuffer_updating_Getter";
 
-  @DomName('WebKitSourceBuffer.append')
+  @DomName('SourceBuffer.abort')
   @DocsEditable()
-  @Experimental() // non-standard
-  void append(Uint8List data) native "WebKitSourceBuffer_append_Callback";
+  void abort() native "SourceBuffer_abort_Callback";
+
+  @DomName('SourceBuffer.addEventListener')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "SourceBuffer_addEventListener_Callback";
+
+  void appendBuffer(data) {
+    if ((data is TypedData || data == null)) {
+      _appendBuffer_1(data);
+      return;
+    }
+    if ((data is ByteBuffer || data == null)) {
+      _appendBuffer_2(data);
+      return;
+    }
+    throw new ArgumentError("Incorrect number or type of arguments");
+  }
+
+  void _appendBuffer_1(data) native "SourceBuffer__appendBuffer_1_Callback";
+
+  void _appendBuffer_2(data) native "SourceBuffer__appendBuffer_2_Callback";
+
+  @DomName('SourceBuffer.dispatchEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  bool dispatchEvent(Event event) native "SourceBuffer_dispatchEvent_Callback";
+
+  @DomName('SourceBuffer.removeEventListener')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "SourceBuffer_removeEventListener_Callback";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21396,25 +21593,23 @@
 
 
 @DocsEditable()
-@DomName('WebKitSourceBufferList')
-@SupportedBrowser(SupportedBrowser.CHROME)
-@SupportedBrowser(SupportedBrowser.SAFARI)
-@Experimental()
+@DomName('SourceBufferList')
 // https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#sourcebufferlist
+@Experimental()
 class SourceBufferList extends EventTarget with ListMixin<SourceBuffer>, ImmutableListMixin<SourceBuffer> implements List<SourceBuffer> {
   // To suppress missing implicit constructor warnings.
   factory SourceBufferList._() { throw new UnsupportedError("Not supported"); }
 
-  @DomName('WebKitSourceBufferList.length')
+  @DomName('SourceBufferList.length')
   @DocsEditable()
-  int get length native "WebKitSourceBufferList_length_Getter";
+  int get length native "SourceBufferList_length_Getter";
 
   SourceBuffer operator[](int index) {
     if (index < 0 || index >= length)
       throw new RangeError.range(index, 0, length);
     return _nativeIndexedGetter(index);
   }
-  SourceBuffer _nativeIndexedGetter(int index) native "WebKitSourceBufferList_item_Callback";
+  SourceBuffer _nativeIndexedGetter(int index) native "SourceBufferList_item_Callback";
 
   void operator[]=(int index, SourceBuffer value) {
     throw new UnsupportedError("Cannot assign element of immutable List.");
@@ -21454,21 +21649,21 @@
   SourceBuffer elementAt(int index) => this[index];
   // -- end List<SourceBuffer> mixins.
 
-  @DomName('WebKitSourceBufferList.addEventListener')
+  @DomName('SourceBufferList.addEventListener')
   @DocsEditable()
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "WebKitSourceBufferList_addEventListener_Callback";
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "SourceBufferList_addEventListener_Callback";
 
-  @DomName('WebKitSourceBufferList.dispatchEvent')
+  @DomName('SourceBufferList.dispatchEvent')
   @DocsEditable()
-  bool dispatchEvent(Event event) native "WebKitSourceBufferList_dispatchEvent_Callback";
+  bool dispatchEvent(Event event) native "SourceBufferList_dispatchEvent_Callback";
 
-  @DomName('WebKitSourceBufferList.item')
+  @DomName('SourceBufferList.item')
   @DocsEditable()
-  SourceBuffer item(int index) native "WebKitSourceBufferList_item_Callback";
+  SourceBuffer item(int index) native "SourceBufferList_item_Callback";
 
-  @DomName('WebKitSourceBufferList.removeEventListener')
+  @DomName('SourceBufferList.removeEventListener')
   @DocsEditable()
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "WebKitSourceBufferList_removeEventListener_Callback";
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "SourceBufferList_removeEventListener_Callback";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -21521,6 +21716,39 @@
 
 
 @DocsEditable()
+@DomName('SourceInfo')
+@Experimental() // untriaged
+class SourceInfo extends NativeFieldWrapperClass1 {
+
+  @DomName('SourceInfo.facing')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String get facing native "SourceInfo_facing_Getter";
+
+  @DomName('SourceInfo.id')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String get id native "SourceInfo_id_Getter";
+
+  @DomName('SourceInfo.kind')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String get kind native "SourceInfo_kind_Getter";
+
+  @DomName('SourceInfo.label')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String get label native "SourceInfo_label_Getter";
+
+}
+// Copyright (c) 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('HTMLSpanElement')
 class SpanElement extends _HTMLElement {
   // To suppress missing implicit constructor warnings.
@@ -22689,6 +22917,19 @@
 
 
 @DocsEditable()
+@DomName('SubtleCrypto')
+@Experimental() // untriaged
+class SubtleCrypto extends NativeFieldWrapperClass1 {
+
+}
+// Copyright (c) 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('HTMLTableCaptionElement')
 class TableCaptionElement extends _HTMLElement {
   // To suppress missing implicit constructor warnings.
@@ -24590,24 +24831,9 @@
 @DomName('URL')
 class Url extends NativeFieldWrapperClass1 {
 
-  static String createObjectUrl(blob_OR_source_OR_stream) {
-    if ((blob_OR_source_OR_stream is MediaSource || blob_OR_source_OR_stream == null)) {
-      return _createObjectURL_1(blob_OR_source_OR_stream);
-    }
-    if ((blob_OR_source_OR_stream is MediaStream || blob_OR_source_OR_stream == null)) {
-      return _createObjectURL_2(blob_OR_source_OR_stream);
-    }
-    if ((blob_OR_source_OR_stream is Blob || blob_OR_source_OR_stream == null)) {
-      return _createObjectURL_3(blob_OR_source_OR_stream);
-    }
-    throw new ArgumentError("Incorrect number or type of arguments");
-  }
-
-  static String _createObjectURL_1(blob_OR_source_OR_stream) native "URL__createObjectURL_1_Callback";
-
-  static String _createObjectURL_2(blob_OR_source_OR_stream) native "URL__createObjectURL_2_Callback";
-
-  static String _createObjectURL_3(blob_OR_source_OR_stream) native "URL__createObjectURL_3_Callback";
+  @DomName('URL.createObjectURL')
+  @DocsEditable()
+  static String createObjectUrl(_WebKitMediaSource source) native "URL_createObjectURL_Callback";
 
   @DomName('URL.createObjectUrlFromBlob')
   @DocsEditable()
@@ -25130,7 +25356,7 @@
 
 
 @DomName('Window')
-class Window extends EventTarget implements WindowBase {
+class Window extends EventTarget implements WindowBase, WindowTimers {
 
   /**
    * Executes a [callback] after the immediate execution stack has completed.
@@ -25212,7 +25438,7 @@
     return _requestFileSystem(persistent? 1 : 0, size);
   }
 
-  @DomName('DOMWindow.convertPointFromNodeToPage')
+  @DomName('Window.convertPointFromNodeToPage')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
@@ -25222,7 +25448,7 @@
     return new Point(result.x, result.y);
   }
 
-  @DomName('DOMWindow.convertPointFromPageToNode')
+  @DomName('Window.convertPointFromPageToNode')
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
@@ -25331,62 +25557,62 @@
 
   @DomName('Window.CSS')
   @DocsEditable()
-  Css get css native "DOMWindow_CSS_Getter";
+  Css get css native "Window_CSS_Getter";
 
   @DomName('Window.applicationCache')
   @DocsEditable()
-  ApplicationCache get applicationCache native "DOMWindow_applicationCache_Getter";
+  ApplicationCache get applicationCache native "Window_applicationCache_Getter";
 
   @DomName('Window.closed')
   @DocsEditable()
-  bool get closed native "DOMWindow_closed_Getter";
+  bool get closed native "Window_closed_Getter";
 
   @DomName('Window.console')
   @DocsEditable()
-  Console get console native "DOMWindow_console_Getter";
+  Console get console native "Window_console_Getter";
 
   @DomName('Window.crypto')
   @DocsEditable()
   // http://www.w3.org/TR/WebCryptoAPI/
   @Experimental()
-  Crypto get crypto native "DOMWindow_crypto_Getter";
+  Crypto get crypto native "Window_crypto_Getter";
 
   @DomName('Window.defaultStatus')
   @DocsEditable()
-  String get defaultStatus native "DOMWindow_defaultStatus_Getter";
+  String get defaultStatus native "Window_defaultStatus_Getter";
 
   @DomName('Window.defaultStatus')
   @DocsEditable()
-  void set defaultStatus(String value) native "DOMWindow_defaultStatus_Setter";
+  void set defaultStatus(String value) native "Window_defaultStatus_Setter";
 
   @DomName('Window.defaultstatus')
   @DocsEditable()
   @Experimental() // non-standard
-  String get defaultstatus native "DOMWindow_defaultstatus_Getter";
+  String get defaultstatus native "Window_defaultstatus_Getter";
 
   @DomName('Window.defaultstatus')
   @DocsEditable()
   @Experimental() // non-standard
-  void set defaultstatus(String value) native "DOMWindow_defaultstatus_Setter";
+  void set defaultstatus(String value) native "Window_defaultstatus_Setter";
 
   @DomName('Window.devicePixelRatio')
   @DocsEditable()
   // http://www.quirksmode.org/blog/archives/2012/06/devicepixelrati.html
   @Experimental() // non-standard
-  num get devicePixelRatio native "DOMWindow_devicePixelRatio_Getter";
+  num get devicePixelRatio native "Window_devicePixelRatio_Getter";
 
   @DomName('Window.document')
   @DocsEditable()
-  Document get document native "DOMWindow_document_Getter";
+  Document get document native "Window_document_Getter";
 
   @DomName('Window.event')
   @DocsEditable()
   @deprecated // deprecated
-  Event get event native "DOMWindow_event_Getter";
+  Event get event native "Window_event_Getter";
 
   @DomName('Window.history')
   @DocsEditable()
-  History get history native "DOMWindow_history_Getter";
+  History get history native "Window_history_Getter";
 
   @DomName('Window.indexedDB')
   @DocsEditable()
@@ -25394,157 +25620,157 @@
   @SupportedBrowser(SupportedBrowser.FIREFOX, '15')
   @SupportedBrowser(SupportedBrowser.IE, '10')
   @Experimental()
-  IdbFactory get indexedDB native "DOMWindow_indexedDB_Getter";
+  IdbFactory get indexedDB native "Window_indexedDB_Getter";
 
   @DomName('Window.innerHeight')
   @DocsEditable()
-  int get innerHeight native "DOMWindow_innerHeight_Getter";
+  int get innerHeight native "Window_innerHeight_Getter";
 
   @DomName('Window.innerWidth')
   @DocsEditable()
-  int get innerWidth native "DOMWindow_innerWidth_Getter";
+  int get innerWidth native "Window_innerWidth_Getter";
 
   @DomName('Window.localStorage')
   @DocsEditable()
-  Storage get localStorage native "DOMWindow_localStorage_Getter";
+  Storage get localStorage native "Window_localStorage_Getter";
 
   @DomName('Window.location')
   @DocsEditable()
-  Location get location native "DOMWindow_location_Getter";
+  Location get location native "Window_location_Getter";
 
   @DomName('Window.locationbar')
   @DocsEditable()
-  BarProp get locationbar native "DOMWindow_locationbar_Getter";
+  BarProp get locationbar native "Window_locationbar_Getter";
 
   @DomName('Window.menubar')
   @DocsEditable()
-  BarProp get menubar native "DOMWindow_menubar_Getter";
+  BarProp get menubar native "Window_menubar_Getter";
 
   @DomName('Window.name')
   @DocsEditable()
-  String get name native "DOMWindow_name_Getter";
+  String get name native "Window_name_Getter";
 
   @DomName('Window.name')
   @DocsEditable()
-  void set name(String value) native "DOMWindow_name_Setter";
+  void set name(String value) native "Window_name_Setter";
 
   @DomName('Window.navigator')
   @DocsEditable()
-  Navigator get navigator native "DOMWindow_navigator_Getter";
+  Navigator get navigator native "Window_navigator_Getter";
 
   @DomName('Window.offscreenBuffering')
   @DocsEditable()
   @Experimental() // non-standard
-  bool get offscreenBuffering native "DOMWindow_offscreenBuffering_Getter";
+  bool get offscreenBuffering native "Window_offscreenBuffering_Getter";
 
   @DomName('Window.opener')
   @DocsEditable()
-  WindowBase get opener native "DOMWindow_opener_Getter";
+  WindowBase get opener native "Window_opener_Getter";
 
   @DomName('Window.outerHeight')
   @DocsEditable()
-  int get outerHeight native "DOMWindow_outerHeight_Getter";
+  int get outerHeight native "Window_outerHeight_Getter";
 
   @DomName('Window.outerWidth')
   @DocsEditable()
-  int get outerWidth native "DOMWindow_outerWidth_Getter";
+  int get outerWidth native "Window_outerWidth_Getter";
 
   @DomName('Window.pageXOffset')
   @DocsEditable()
-  int get pageXOffset native "DOMWindow_pageXOffset_Getter";
+  int get pageXOffset native "Window_pageXOffset_Getter";
 
   @DomName('Window.pageYOffset')
   @DocsEditable()
-  int get pageYOffset native "DOMWindow_pageYOffset_Getter";
+  int get pageYOffset native "Window_pageYOffset_Getter";
 
   @DomName('Window.parent')
   @DocsEditable()
-  WindowBase get parent native "DOMWindow_parent_Getter";
+  WindowBase get parent native "Window_parent_Getter";
 
   @DomName('Window.performance')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @SupportedBrowser(SupportedBrowser.FIREFOX)
   @SupportedBrowser(SupportedBrowser.IE)
-  Performance get performance native "DOMWindow_performance_Getter";
+  Performance get performance native "Window_performance_Getter";
 
   @DomName('Window.personalbar')
   @DocsEditable()
   // https://developer.mozilla.org/en-US/docs/DOM/window.personalbar
   @deprecated // deprecated
-  BarProp get personalbar native "DOMWindow_personalbar_Getter";
+  BarProp get personalbar native "Window_personalbar_Getter";
 
   @DomName('Window.screen')
   @DocsEditable()
-  Screen get screen native "DOMWindow_screen_Getter";
+  Screen get screen native "Window_screen_Getter";
 
   @DomName('Window.screenLeft')
   @DocsEditable()
-  int get screenLeft native "DOMWindow_screenLeft_Getter";
+  int get screenLeft native "Window_screenLeft_Getter";
 
   @DomName('Window.screenTop')
   @DocsEditable()
-  int get screenTop native "DOMWindow_screenTop_Getter";
+  int get screenTop native "Window_screenTop_Getter";
 
   @DomName('Window.screenX')
   @DocsEditable()
-  int get screenX native "DOMWindow_screenX_Getter";
+  int get screenX native "Window_screenX_Getter";
 
   @DomName('Window.screenY')
   @DocsEditable()
-  int get screenY native "DOMWindow_screenY_Getter";
+  int get screenY native "Window_screenY_Getter";
 
   @DomName('Window.scrollX')
   @DocsEditable()
-  int get scrollX native "DOMWindow_scrollX_Getter";
+  int get scrollX native "Window_scrollX_Getter";
 
   @DomName('Window.scrollY')
   @DocsEditable()
-  int get scrollY native "DOMWindow_scrollY_Getter";
+  int get scrollY native "Window_scrollY_Getter";
 
   @DomName('Window.scrollbars')
   @DocsEditable()
-  BarProp get scrollbars native "DOMWindow_scrollbars_Getter";
+  BarProp get scrollbars native "Window_scrollbars_Getter";
 
   @DomName('Window.self')
   @DocsEditable()
-  WindowBase get self native "DOMWindow_self_Getter";
+  WindowBase get self native "Window_self_Getter";
 
   @DomName('Window.sessionStorage')
   @DocsEditable()
-  Storage get sessionStorage native "DOMWindow_sessionStorage_Getter";
+  Storage get sessionStorage native "Window_sessionStorage_Getter";
 
   @DomName('Window.speechSynthesis')
   @DocsEditable()
   // https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section
   @Experimental()
-  SpeechSynthesis get speechSynthesis native "DOMWindow_speechSynthesis_Getter";
+  SpeechSynthesis get speechSynthesis native "Window_speechSynthesis_Getter";
 
   @DomName('Window.status')
   @DocsEditable()
-  String get status native "DOMWindow_status_Getter";
+  String get status native "Window_status_Getter";
 
   @DomName('Window.status')
   @DocsEditable()
-  void set status(String value) native "DOMWindow_status_Setter";
+  void set status(String value) native "Window_status_Setter";
 
   @DomName('Window.statusbar')
   @DocsEditable()
-  BarProp get statusbar native "DOMWindow_statusbar_Getter";
+  BarProp get statusbar native "Window_statusbar_Getter";
 
   @DomName('Window.styleMedia')
   @DocsEditable()
   // http://developer.apple.com/library/safari/#documentation/SafariDOMAdditions/Reference/StyleMedia/StyleMedia/StyleMedia.html
   @Experimental() // nonstandard
-  StyleMedia get styleMedia native "DOMWindow_styleMedia_Getter";
+  StyleMedia get styleMedia native "Window_styleMedia_Getter";
 
   @DomName('Window.toolbar')
   @DocsEditable()
-  BarProp get toolbar native "DOMWindow_toolbar_Getter";
+  BarProp get toolbar native "Window_toolbar_Getter";
 
   @DomName('Window.top')
   @DocsEditable()
-  WindowBase get top native "DOMWindow_top_Getter";
+  WindowBase get top native "Window_top_Getter";
 
   @DomName('Window.webkitNotifications')
   @DocsEditable()
@@ -25553,7 +25779,7 @@
   @Experimental()
   // https://plus.sandbox.google.com/u/0/+GoogleChromeDevelopers/posts/8vWo8hq4pDm?e=Showroom
   @deprecated // deprecated
-  NotificationCenter get notifications native "DOMWindow_webkitNotifications_Getter";
+  NotificationCenter get notifications native "Window_webkitNotifications_Getter";
 
   @DomName('Window.webkitStorageInfo')
   @DocsEditable()
@@ -25562,11 +25788,11 @@
   @Experimental()
   // http://www.w3.org/TR/file-system-api/
   @deprecated // deprecated
-  StorageInfo get storageInfo native "DOMWindow_webkitStorageInfo_Getter";
+  StorageInfo get storageInfo native "Window_webkitStorageInfo_Getter";
 
   @DomName('Window.window')
   @DocsEditable()
-  WindowBase get window native "DOMWindow_window_Getter";
+  WindowBase get window native "Window_window_Getter";
 
   WindowBase __getter__(index_OR_name) {
     if ((index_OR_name is int || index_OR_name == null)) {
@@ -25578,83 +25804,75 @@
     throw new ArgumentError("Incorrect number or type of arguments");
   }
 
-  WindowBase ___getter___1(index_OR_name) native "DOMWindow____getter___1_Callback";
+  WindowBase ___getter___1(index_OR_name) native "Window____getter___1_Callback";
 
-  WindowBase ___getter___2(index_OR_name) native "DOMWindow____getter___2_Callback";
+  WindowBase ___getter___2(index_OR_name) native "Window____getter___2_Callback";
 
   @DomName('Window.addEventListener')
   @DocsEditable()
-  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "DOMWindow_addEventListener_Callback";
+  void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "Window_addEventListener_Callback";
 
   @DomName('Window.alert')
   @DocsEditable()
-  void alert(String message) native "DOMWindow_alert_Callback";
+  void alert(String message) native "Window_alert_Callback";
 
   @DomName('Window.atob')
   @DocsEditable()
-  String atob(String string) native "DOMWindow_atob_Callback";
+  String atob(String string) native "Window_atob_Callback";
 
   @DomName('Window.btoa')
   @DocsEditable()
-  String btoa(String string) native "DOMWindow_btoa_Callback";
+  String btoa(String string) native "Window_btoa_Callback";
 
   @DomName('Window.cancelAnimationFrame')
   @DocsEditable()
-  void cancelAnimationFrame(int id) native "DOMWindow_cancelAnimationFrame_Callback";
-
-  @DomName('Window.clearInterval')
-  @DocsEditable()
-  void _clearInterval(int handle) native "DOMWindow_clearInterval_Callback";
-
-  @DomName('Window.clearTimeout')
-  @DocsEditable()
-  void _clearTimeout(int handle) native "DOMWindow_clearTimeout_Callback";
+  void cancelAnimationFrame(int id) native "Window_cancelAnimationFrame_Callback";
 
   @DomName('Window.close')
   @DocsEditable()
-  void close() native "DOMWindow_close_Callback";
+  void close() native "Window_close_Callback";
 
   @DomName('Window.confirm')
   @DocsEditable()
-  bool confirm(String message) native "DOMWindow_confirm_Callback";
+  bool confirm(String message) native "Window_confirm_Callback";
 
   @DomName('Window.dispatchEvent')
   @DocsEditable()
-  bool dispatchEvent(Event evt) native "DOMWindow_dispatchEvent_Callback";
+  bool dispatchEvent(Event evt) native "Window_dispatchEvent_Callback";
 
   @DomName('Window.find')
   @DocsEditable()
   @Experimental() // non-standard
-  bool find(String string, bool caseSensitive, bool backwards, bool wrap, bool wholeWord, bool searchInFrames, bool showDialog) native "DOMWindow_find_Callback";
+  bool find(String string, bool caseSensitive, bool backwards, bool wrap, bool wholeWord, bool searchInFrames, bool showDialog) native "Window_find_Callback";
 
   @DomName('Window.getComputedStyle')
   @DocsEditable()
-  CssStyleDeclaration $dom_getComputedStyle(Element element, String pseudoElement) native "DOMWindow_getComputedStyle_Callback";
+  CssStyleDeclaration $dom_getComputedStyle(Element element, String pseudoElement) native "Window_getComputedStyle_Callback";
 
   @DomName('Window.getMatchedCSSRules')
   @DocsEditable()
   @Experimental() // non-standard
-  List<CssRule> getMatchedCssRules(Element element, String pseudoElement) native "DOMWindow_getMatchedCSSRules_Callback";
+  List<CssRule> getMatchedCssRules(Element element, String pseudoElement) native "Window_getMatchedCSSRules_Callback";
 
   @DomName('Window.getSelection')
   @DocsEditable()
-  Selection getSelection() native "DOMWindow_getSelection_Callback";
+  Selection getSelection() native "Window_getSelection_Callback";
 
   @DomName('Window.matchMedia')
   @DocsEditable()
-  MediaQueryList matchMedia(String query) native "DOMWindow_matchMedia_Callback";
+  MediaQueryList matchMedia(String query) native "Window_matchMedia_Callback";
 
   @DomName('Window.moveBy')
   @DocsEditable()
-  void moveBy(num x, num y) native "DOMWindow_moveBy_Callback";
+  void moveBy(num x, num y) native "Window_moveBy_Callback";
 
   @DomName('Window.moveTo')
   @DocsEditable()
-  void $dom_moveTo(num x, num y) native "DOMWindow_moveTo_Callback";
+  void $dom_moveTo(num x, num y) native "Window_moveTo_Callback";
 
   @DomName('Window.open')
   @DocsEditable()
-  WindowBase open(String url, String name, [String options]) native "DOMWindow_open_Callback";
+  WindowBase open(String url, String name, [String options]) native "Window_open_Callback";
 
   @DomName('Window.openDatabase')
   @DocsEditable()
@@ -25663,63 +25881,55 @@
   @Experimental()
   // http://www.w3.org/TR/webdatabase/
   @Experimental() // deprecated
-  SqlDatabase openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) native "DOMWindow_openDatabase_Callback";
+  SqlDatabase openDatabase(String name, String version, String displayName, int estimatedSize, [DatabaseCallback creationCallback]) native "Window_openDatabase_Callback";
 
   @DomName('Window.postMessage')
   @DocsEditable()
-  void postMessage(/*SerializedScriptValue*/ message, String targetOrigin, [List messagePorts]) native "DOMWindow_postMessage_Callback";
+  void postMessage(/*SerializedScriptValue*/ message, String targetOrigin, [List messagePorts]) native "Window_postMessage_Callback";
 
   @DomName('Window.print')
   @DocsEditable()
-  void print() native "DOMWindow_print_Callback";
+  void print() native "Window_print_Callback";
 
   @DomName('Window.removeEventListener')
   @DocsEditable()
-  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "DOMWindow_removeEventListener_Callback";
+  void $dom_removeEventListener(String type, EventListener listener, [bool useCapture]) native "Window_removeEventListener_Callback";
 
   @DomName('Window.requestAnimationFrame')
   @DocsEditable()
-  int requestAnimationFrame(RequestAnimationFrameCallback callback) native "DOMWindow_requestAnimationFrame_Callback";
+  int requestAnimationFrame(RequestAnimationFrameCallback callback) native "Window_requestAnimationFrame_Callback";
 
   @DomName('Window.resizeBy')
   @DocsEditable()
-  void resizeBy(num x, num y) native "DOMWindow_resizeBy_Callback";
+  void resizeBy(num x, num y) native "Window_resizeBy_Callback";
 
   @DomName('Window.resizeTo')
   @DocsEditable()
-  void resizeTo(num width, num height) native "DOMWindow_resizeTo_Callback";
+  void resizeTo(num width, num height) native "Window_resizeTo_Callback";
 
   @DomName('Window.scroll')
   @DocsEditable()
-  void scroll(int x, int y) native "DOMWindow_scroll_Callback";
+  void scroll(int x, int y) native "Window_scroll_Callback";
 
   @DomName('Window.scrollBy')
   @DocsEditable()
-  void scrollBy(int x, int y) native "DOMWindow_scrollBy_Callback";
+  void scrollBy(int x, int y) native "Window_scrollBy_Callback";
 
   @DomName('Window.scrollTo')
   @DocsEditable()
-  void scrollTo(int x, int y) native "DOMWindow_scrollTo_Callback";
-
-  @DomName('Window.setInterval')
-  @DocsEditable()
-  int _setInterval(Object handler, int timeout) native "DOMWindow_setInterval_Callback";
-
-  @DomName('Window.setTimeout')
-  @DocsEditable()
-  int _setTimeout(Object handler, int timeout) native "DOMWindow_setTimeout_Callback";
+  void scrollTo(int x, int y) native "Window_scrollTo_Callback";
 
   @DomName('Window.showModalDialog')
   @DocsEditable()
-  Object showModalDialog(String url, [Object dialogArgs, String featureArgs]) native "DOMWindow_showModalDialog_Callback";
+  Object showModalDialog(String url, [Object dialogArgs, String featureArgs]) native "Window_showModalDialog_Callback";
 
   @DomName('Window.stop')
   @DocsEditable()
-  void stop() native "DOMWindow_stop_Callback";
+  void stop() native "Window_stop_Callback";
 
   @DomName('Window.toString')
   @DocsEditable()
-  String toString() native "DOMWindow_toString_Callback";
+  String toString() native "Window_toString_Callback";
 
   @DomName('Window.webkitConvertPointFromNodeToPage')
   @DocsEditable()
@@ -25727,7 +25937,7 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // http://developer.apple.com/library/safari/#documentation/DataManagement/Reference/DOMWindowAdditionsReference/DOMWindowAdditions/DOMWindowAdditions.html
-  _DomPoint _convertPointFromNodeToPage(Node node, _DomPoint p) native "DOMWindow_webkitConvertPointFromNodeToPage_Callback";
+  _DomPoint _convertPointFromNodeToPage(Node node, _DomPoint p) native "Window_webkitConvertPointFromNodeToPage_Callback";
 
   @DomName('Window.webkitConvertPointFromPageToNode')
   @DocsEditable()
@@ -25735,14 +25945,14 @@
   @SupportedBrowser(SupportedBrowser.SAFARI)
   @Experimental()
   // http://developer.apple.com/library/safari/#documentation/DataManagement/Reference/DOMWindowAdditionsReference/DOMWindowAdditions/DOMWindowAdditions.html
-  _DomPoint _convertPointFromPageToNode(Node node, _DomPoint p) native "DOMWindow_webkitConvertPointFromPageToNode_Callback";
+  _DomPoint _convertPointFromPageToNode(Node node, _DomPoint p) native "Window_webkitConvertPointFromPageToNode_Callback";
 
   @DomName('Window.webkitRequestFileSystem')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
   @Experimental()
   // http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem
-  void __requestFileSystem(int type, int size, _FileSystemCallback successCallback, [_ErrorCallback errorCallback]) native "DOMWindow_webkitRequestFileSystem_Callback";
+  void __requestFileSystem(int type, int size, _FileSystemCallback successCallback, [_ErrorCallback errorCallback]) native "Window_webkitRequestFileSystem_Callback";
 
   Future<FileSystem> _requestFileSystem(int type, int size) {
     var completer = new Completer<FileSystem>();
@@ -25757,7 +25967,7 @@
   @SupportedBrowser(SupportedBrowser.CHROME)
   @Experimental()
   // http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem
-  void _resolveLocalFileSystemUrl(String url, _EntryCallback successCallback, [_ErrorCallback errorCallback]) native "DOMWindow_webkitResolveLocalFileSystemURL_Callback";
+  void _resolveLocalFileSystemUrl(String url, _EntryCallback successCallback, [_ErrorCallback errorCallback]) native "Window_webkitResolveLocalFileSystemURL_Callback";
 
   Future<Entry> resolveLocalFileSystemUrl(String url) {
     var completer = new Completer<Entry>();
@@ -25767,6 +25977,22 @@
     return completer.future;
   }
 
+  @DomName('Window.clearInterval')
+  @DocsEditable()
+  void _clearInterval(int handle) native "Window_clearInterval_Callback";
+
+  @DomName('Window.clearTimeout')
+  @DocsEditable()
+  void _clearTimeout(int handle) native "Window_clearTimeout_Callback";
+
+  @DomName('Window.setInterval')
+  @DocsEditable()
+  int _setInterval(Object handler, int timeout) native "Window_setInterval_Callback";
+
+  @DomName('Window.setTimeout')
+  @DocsEditable()
+  int _setTimeout(Object handler, int timeout) native "Window_setTimeout_Callback";
+
   @DomName('Window.onDOMContentLoaded')
   @DocsEditable()
   Stream<Event> get onContentLoaded => contentLoadedEvent.forTarget(this);
@@ -25997,12 +26223,12 @@
   Stream<AnimationEvent> get onAnimationStart => animationStartEvent.forTarget(this);
 
 
-  @DomName('DOMWindow.beforeunloadEvent')
+  @DomName('Window.beforeunloadEvent')
   @DocsEditable()
   static const EventStreamProvider<BeforeUnloadEvent> beforeUnloadEvent =
       const _BeforeUnloadEventStreamProvider('beforeunload');
 
-  @DomName('DOMWindow.onbeforeunload')
+  @DomName('Window.onbeforeunload')
   @DocsEditable()
   Stream<Event> get onBeforeUnload => beforeUnloadEvent.forTarget(this);
 
@@ -26068,6 +26294,39 @@
 
 
 @DocsEditable()
+@DomName('WindowTimers')
+@Experimental() // untriaged
+abstract class WindowTimers extends NativeFieldWrapperClass1 {
+
+  @DomName('WindowTimers.clearInterval')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void clearInterval(int handle) native "WindowTimers_clearInterval_Callback";
+
+  @DomName('WindowTimers.clearTimeout')
+  @DocsEditable()
+  @Experimental() // untriaged
+  void clearTimeout(int handle) native "WindowTimers_clearTimeout_Callback";
+
+  @DomName('WindowTimers.setInterval')
+  @DocsEditable()
+  @Experimental() // untriaged
+  int setInterval(Object handler, int timeout) native "WindowTimers_setInterval_Callback";
+
+  @DomName('WindowTimers.setTimeout')
+  @DocsEditable()
+  @Experimental() // untriaged
+  int setTimeout(Object handler, int timeout) native "WindowTimers_setTimeout_Callback";
+
+}
+// Copyright (c) 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('Worker')
 @SupportedBrowser(SupportedBrowser.CHROME)
 @SupportedBrowser(SupportedBrowser.FIREFOX)
@@ -26075,10 +26334,15 @@
 @SupportedBrowser(SupportedBrowser.SAFARI)
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html#worker
 @Experimental() // stable
-class Worker extends AbstractWorker {
+class Worker extends EventTarget implements AbstractWorker {
   // To suppress missing implicit constructor warnings.
   factory Worker._() { throw new UnsupportedError("Not supported"); }
 
+  @DomName('Worker.errorEvent')
+  @DocsEditable()
+  @Experimental() // untriaged
+  static const EventStreamProvider<Event> errorEvent = const EventStreamProvider<Event>('error');
+
   @DomName('Worker.messageEvent')
   @DocsEditable()
   static const EventStreamProvider<MessageEvent> messageEvent = const EventStreamProvider<MessageEvent>('message');
@@ -26103,6 +26367,11 @@
   @DocsEditable()
   void terminate() native "Worker_terminate_Callback";
 
+  @DomName('Worker.onerror')
+  @DocsEditable()
+  @Experimental() // untriaged
+  Stream<Event> get onError => errorEvent.forTarget(this);
+
   @DomName('Worker.onmessage')
   @DocsEditable()
   Stream<MessageEvent> get onMessage => messageEvent.forTarget(this);
@@ -26116,6 +26385,42 @@
 
 
 @DocsEditable()
+@DomName('WorkerCrypto')
+@Experimental() // untriaged
+class WorkerCrypto extends NativeFieldWrapperClass1 {
+
+  @DomName('WorkerCrypto.getRandomValues')
+  @DocsEditable()
+  @Experimental() // untriaged
+  TypedData getRandomValues(TypedData array) native "WorkerCrypto_getRandomValues_Callback";
+
+}
+// Copyright (c) 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('WorkerPerformance')
+@Experimental() // untriaged
+abstract class WorkerPerformance extends NativeFieldWrapperClass1 {
+
+  @DomName('WorkerPerformance.now')
+  @DocsEditable()
+  @Experimental() // untriaged
+  num now() native "WorkerPerformance_now_Callback";
+
+}
+// Copyright (c) 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('XPathEvaluator')
 // http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator
 @deprecated // experimental
@@ -26151,46 +26456,6 @@
 
 
 @DocsEditable()
-@DomName('XPathException')
-// http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathException
-@deprecated // experimental
-class XPathException extends NativeFieldWrapperClass1 {
-
-  @DomName('XPathException.INVALID_EXPRESSION_ERR')
-  @DocsEditable()
-  static const int INVALID_EXPRESSION_ERR = 51;
-
-  @DomName('XPathException.TYPE_ERR')
-  @DocsEditable()
-  static const int TYPE_ERR = 52;
-
-  @DomName('XPathException.code')
-  @DocsEditable()
-  int get code native "XPathException_code_Getter";
-
-  @DomName('XPathException.message')
-  @DocsEditable()
-  @Experimental() // non-standard
-  String get message native "XPathException_message_Getter";
-
-  @DomName('XPathException.name')
-  @DocsEditable()
-  @Experimental() // non-standard
-  String get name native "XPathException_name_Getter";
-
-  @DomName('XPathException.toString')
-  @DocsEditable()
-  String toString() native "XPathException_toString_Callback";
-
-}
-// Copyright (c) 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('XPathExpression')
 // http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathExpression
 @deprecated // experimental
@@ -26901,31 +27166,31 @@
 @Experimental() // non-standard
 class _DomPoint extends NativeFieldWrapperClass1 {
 
-  @DomName('WebKitPoint.DOMPoint')
+  @DomName('WebKitPoint.WebKitPoint')
   @DocsEditable()
   factory _DomPoint(num x, num y) => _create(x, y);
 
   @DocsEditable()
-  static _DomPoint _create(x, y) native "DOMPoint_constructorCallback";
+  static _DomPoint _create(x, y) native "WebKitPoint_constructorCallback";
 
   /// Checks if this type is supported on the current platform.
   static bool get supported => true;
 
   @DomName('WebKitPoint.x')
   @DocsEditable()
-  num get x native "DOMPoint_x_Getter";
+  num get x native "WebKitPoint_x_Getter";
 
   @DomName('WebKitPoint.x')
   @DocsEditable()
-  void set x(num value) native "DOMPoint_x_Setter";
+  void set x(num value) native "WebKitPoint_x_Setter";
 
   @DomName('WebKitPoint.y')
   @DocsEditable()
-  num get y native "DOMPoint_y_Getter";
+  num get y native "WebKitPoint_y_Getter";
 
   @DomName('WebKitPoint.y')
   @DocsEditable()
-  void set y(num value) native "DOMPoint_y_Setter";
+  void set y(num value) native "WebKitPoint_y_Setter";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -27647,7 +27912,7 @@
 @DomName('SharedWorker')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html#shared-workers-and-the-sharedworker-interface
 @Experimental()
-abstract class _SharedWorker extends AbstractWorker {
+abstract class _SharedWorker extends EventTarget implements AbstractWorker {
   // To suppress missing implicit constructor warnings.
   factory _SharedWorker._() { throw new UnsupportedError("Not supported"); }
 
@@ -27888,12 +28153,67 @@
 
 
 @DocsEditable()
+@DomName('WebKitMediaSource')
+@Experimental() // untriaged
+abstract class _WebKitMediaSource extends EventTarget {
+  // To suppress missing implicit constructor warnings.
+  factory _WebKitMediaSource._() { throw new UnsupportedError("Not supported"); }
+
+  @DomName('WebKitMediaSource.WebKitMediaSource')
+  @DocsEditable()
+  factory _WebKitMediaSource() {
+    return _WebKitMediaSource._create_1();
+  }
+
+  @DocsEditable()
+  static _WebKitMediaSource _create_1() native "WebKitMediaSource__create_1constructorCallback";
+
+}
+// Copyright (c) 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('WebKitSourceBuffer')
+@Experimental() // untriaged
+abstract class _WebKitSourceBuffer extends NativeFieldWrapperClass1 {
+
+}
+// Copyright (c) 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('WebKitSourceBufferList')
+@Experimental() // untriaged
+abstract class _WebKitSourceBufferList extends EventTarget {
+  // To suppress missing implicit constructor warnings.
+  factory _WebKitSourceBufferList._() { throw new UnsupportedError("Not supported"); }
+
+  @DomName('WebKitSourceBufferList.item')
+  @DocsEditable()
+  @Experimental() // untriaged
+  _WebKitSourceBuffer _item(int index) native "WebKitSourceBufferList_item_Callback";
+
+}
+// Copyright (c) 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('WorkerContext')
 // http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html#WorkerGlobalScope-partial
 @Experimental() // stable
-abstract class _WorkerContext extends EventTarget {
-  // To suppress missing implicit constructor warnings.
-  factory _WorkerContext._() { throw new UnsupportedError("Not supported"); }
+abstract class _WorkerContext extends NativeFieldWrapperClass1 implements EventTarget, WindowTimers {
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
@@ -31628,20 +31948,20 @@
   _DOMWindowCrossFrame.internal();
 
   // Fields.
-  HistoryBase get history native "DOMWindow_history_cross_frame_Getter";
-  LocationBase get location native "DOMWindow_location_cross_frame_Getter";
-  bool get closed native "DOMWindow_closed_Getter";
-  int get length native "DOMWindow_length_Getter";
-  WindowBase get opener native "DOMWindow_opener_Getter";
-  WindowBase get parent native "DOMWindow_parent_Getter";
-  WindowBase get top native "DOMWindow_top_Getter";
+  HistoryBase get history native "Window_history_cross_frame_Getter";
+  LocationBase get location native "Window_location_cross_frame_Getter";
+  bool get closed native "Window_closed_Getter";
+  int get length native "Window_length_Getter";
+  WindowBase get opener native "Window_opener_Getter";
+  WindowBase get parent native "Window_parent_Getter";
+  WindowBase get top native "Window_top_Getter";
 
   // Methods.
-  void close() native "DOMWindow_close_Callback";
-  void postMessage(/*SerializedScriptValue*/ message, String targetOrigin, [List messagePorts]) native "DOMWindow_postMessage_Callback";
+  void close() native "Window_close_Callback";
+  void postMessage(/*SerializedScriptValue*/ message, String targetOrigin, [List messagePorts]) native "Window_postMessage_Callback";
 
   // Implementation support.
-  String get typeName => "DOMWindow";
+  String get typeName => "Window";
 }
 
 class _HistoryCrossFrame extends NativeFieldWrapperClass1 implements HistoryBase {
diff --git a/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart b/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart
index 0b00a166..41ec3f4 100644
--- a/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart
+++ b/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart
@@ -1149,14 +1149,6 @@
   @DocsEditable()
   final Transaction transaction;
 
-  @JSName('webkitErrorMessage')
-  @DomName('IDBRequest.webkitErrorMessage')
-  @DocsEditable()
-  @SupportedBrowser(SupportedBrowser.CHROME)
-  @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  final String errorMessage;
-
   @JSName('addEventListener')
   @DomName('IDBRequest.addEventListener')
   @DocsEditable()
@@ -1240,14 +1232,6 @@
   @DocsEditable()
   final String mode;
 
-  @JSName('webkitErrorMessage')
-  @DomName('IDBTransaction.webkitErrorMessage')
-  @DocsEditable()
-  @SupportedBrowser(SupportedBrowser.CHROME)
-  @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  final String errorMessage;
-
   @DomName('IDBTransaction.abort')
   @DocsEditable()
   void abort() native;
@@ -1295,6 +1279,11 @@
   // To suppress missing implicit constructor warnings.
   factory VersionChangeEvent._() { throw new UnsupportedError("Not supported"); }
 
+  @DomName('IDBVersionChangeEvent.dataLoss')
+  @DocsEditable()
+  @Experimental() // untriaged
+  final String dataLoss;
+
   @DomName('IDBVersionChangeEvent.newVersion')
   @DocsEditable()
   @Creates('int|String|Null')
diff --git a/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart b/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart
index e48be2a..015c8ee 100644
--- a/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart
+++ b/sdk/lib/indexed_db/dartium/indexed_db_dartium.dart
@@ -980,13 +980,6 @@
   @DocsEditable()
   Transaction get transaction native "IDBRequest_transaction_Getter";
 
-  @DomName('IDBRequest.webkitErrorMessage')
-  @DocsEditable()
-  @SupportedBrowser(SupportedBrowser.CHROME)
-  @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  String get errorMessage native "IDBRequest_webkitErrorMessage_Getter";
-
   @DomName('IDBRequest.addEventListener')
   @DocsEditable()
   void $dom_addEventListener(String type, EventListener listener, [bool useCapture]) native "IDBRequest_addEventListener_Callback";
@@ -1069,13 +1062,6 @@
   @DocsEditable()
   String get mode native "IDBTransaction_mode_Getter";
 
-  @DomName('IDBTransaction.webkitErrorMessage')
-  @DocsEditable()
-  @SupportedBrowser(SupportedBrowser.CHROME)
-  @SupportedBrowser(SupportedBrowser.SAFARI)
-  @Experimental()
-  String get errorMessage native "IDBTransaction_webkitErrorMessage_Getter";
-
   @DomName('IDBTransaction.abort')
   @DocsEditable()
   void abort() native "IDBTransaction_abort_Callback";
@@ -1123,6 +1109,11 @@
   // To suppress missing implicit constructor warnings.
   factory VersionChangeEvent._() { throw new UnsupportedError("Not supported"); }
 
+  @DomName('IDBVersionChangeEvent.dataLoss')
+  @DocsEditable()
+  @Experimental() // untriaged
+  String get dataLoss native "IDBVersionChangeEvent_dataLoss_Getter";
+
   @DomName('IDBVersionChangeEvent.newVersion')
   @DocsEditable()
   dynamic get newVersion native "IDBVersionChangeEvent_newVersion_Getter";
diff --git a/sdk/lib/svg/dart2js/svg_dart2js.dart b/sdk/lib/svg/dart2js/svg_dart2js.dart
index e481c15..ba93b3a 100644
--- a/sdk/lib/svg/dart2js/svg_dart2js.dart
+++ b/sdk/lib/svg/dart2js/svg_dart2js.dart
@@ -64,7 +64,7 @@
 @DocsEditable()
 @DomName('SVGAElement')
 @Unstable()
-class AElement extends StyledElement implements UriReference, Tests, Transformable, ExternalResourcesRequired, LangSpace native "SVGAElement" {
+class AElement extends StyledElement implements Transformable, ExternalResourcesRequired, UriReference, Tests, LangSpace native "SVGAElement" {
   // To suppress missing implicit constructor warnings.
   factory AElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -530,7 +530,7 @@
 @DocsEditable()
 @DomName('SVGAnimationElement')
 @Unstable()
-class AnimationElement extends SvgElement implements Tests, ElementTimeControl, ExternalResourcesRequired native "SVGAnimationElement" {
+class AnimationElement extends SvgElement implements ExternalResourcesRequired, ElementTimeControl, Tests native "SVGAnimationElement" {
   // To suppress missing implicit constructor warnings.
   factory AnimationElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -604,7 +604,7 @@
 @DocsEditable()
 @DomName('SVGCircleElement')
 @Unstable()
-class CircleElement extends StyledElement implements Transformable, Tests, ExternalResourcesRequired, LangSpace native "SVGCircleElement" {
+class CircleElement extends StyledElement implements Transformable, ExternalResourcesRequired, Tests, LangSpace native "SVGCircleElement" {
   // To suppress missing implicit constructor warnings.
   factory CircleElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -700,7 +700,7 @@
 @DocsEditable()
 @DomName('SVGClipPathElement')
 @Unstable()
-class ClipPathElement extends StyledElement implements Transformable, Tests, ExternalResourcesRequired, LangSpace native "SVGClipPathElement" {
+class ClipPathElement extends StyledElement implements Transformable, ExternalResourcesRequired, Tests, LangSpace native "SVGClipPathElement" {
   // To suppress missing implicit constructor warnings.
   factory ClipPathElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -788,7 +788,7 @@
 @DocsEditable()
 @DomName('SVGDefsElement')
 @Unstable()
-class DefsElement extends StyledElement implements Transformable, Tests, ExternalResourcesRequired, LangSpace native "SVGDefsElement" {
+class DefsElement extends StyledElement implements Transformable, ExternalResourcesRequired, Tests, LangSpace native "SVGDefsElement" {
   // To suppress missing implicit constructor warnings.
   factory DefsElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -1268,7 +1268,7 @@
 @DocsEditable()
 @DomName('SVGEllipseElement')
 @Unstable()
-class EllipseElement extends StyledElement implements Transformable, Tests, ExternalResourcesRequired, LangSpace native "SVGEllipseElement" {
+class EllipseElement extends StyledElement implements Transformable, ExternalResourcesRequired, Tests, LangSpace native "SVGEllipseElement" {
   // To suppress missing implicit constructor warnings.
   factory EllipseElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -2849,7 +2849,7 @@
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-class ForeignObjectElement extends StyledElement implements Transformable, Tests, ExternalResourcesRequired, LangSpace native "SVGForeignObjectElement" {
+class ForeignObjectElement extends StyledElement implements Transformable, ExternalResourcesRequired, Tests, LangSpace native "SVGForeignObjectElement" {
   // To suppress missing implicit constructor warnings.
   factory ForeignObjectElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -2952,7 +2952,7 @@
 @DocsEditable()
 @DomName('SVGGElement')
 @Unstable()
-class GElement extends StyledElement implements Transformable, Tests, ExternalResourcesRequired, LangSpace native "SVGGElement" {
+class GElement extends StyledElement implements Transformable, ExternalResourcesRequired, Tests, LangSpace native "SVGGElement" {
   // To suppress missing implicit constructor warnings.
   factory GElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -3036,7 +3036,7 @@
 @DocsEditable()
 @DomName('SVGImageElement')
 @Unstable()
-class ImageElement extends StyledElement implements UriReference, Tests, Transformable, ExternalResourcesRequired, LangSpace native "SVGImageElement" {
+class ImageElement extends StyledElement implements Transformable, ExternalResourcesRequired, UriReference, Tests, LangSpace native "SVGImageElement" {
   // To suppress missing implicit constructor warnings.
   factory ImageElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -3329,7 +3329,7 @@
 @DocsEditable()
 @DomName('SVGLineElement')
 @Unstable()
-class LineElement extends StyledElement implements Transformable, Tests, ExternalResourcesRequired, LangSpace native "SVGLineElement" {
+class LineElement extends StyledElement implements Transformable, ExternalResourcesRequired, Tests, LangSpace native "SVGLineElement" {
   // To suppress missing implicit constructor warnings.
   factory LineElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -3585,7 +3585,7 @@
 @DocsEditable()
 @DomName('SVGMaskElement')
 @Unstable()
-class MaskElement extends StyledElement implements Tests, ExternalResourcesRequired, LangSpace native "SVGMaskElement" {
+class MaskElement extends StyledElement implements ExternalResourcesRequired, Tests, LangSpace native "SVGMaskElement" {
   // To suppress missing implicit constructor warnings.
   factory MaskElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -3851,7 +3851,7 @@
 @DocsEditable()
 @DomName('SVGPathElement')
 @Unstable()
-class PathElement extends StyledElement implements Transformable, Tests, ExternalResourcesRequired, LangSpace native "SVGPathElement" {
+class PathElement extends StyledElement implements Transformable, ExternalResourcesRequired, Tests, LangSpace native "SVGPathElement" {
   // To suppress missing implicit constructor warnings.
   factory PathElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -4708,7 +4708,7 @@
 @DocsEditable()
 @DomName('SVGPatternElement')
 @Unstable()
-class PatternElement extends StyledElement implements FitToViewBox, UriReference, Tests, ExternalResourcesRequired, LangSpace native "SVGPatternElement" {
+class PatternElement extends StyledElement implements FitToViewBox, UriReference, ExternalResourcesRequired, Tests, LangSpace native "SVGPatternElement" {
   // To suppress missing implicit constructor warnings.
   factory PatternElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -4866,7 +4866,7 @@
 @DocsEditable()
 @DomName('SVGPolygonElement')
 @Unstable()
-class PolygonElement extends StyledElement implements Transformable, Tests, ExternalResourcesRequired, LangSpace native "SVGPolygonElement" {
+class PolygonElement extends StyledElement implements Transformable, ExternalResourcesRequired, Tests, LangSpace native "SVGPolygonElement" {
   // To suppress missing implicit constructor warnings.
   factory PolygonElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -4958,7 +4958,7 @@
 @DocsEditable()
 @DomName('SVGPolylineElement')
 @Unstable()
-class PolylineElement extends StyledElement implements Transformable, Tests, ExternalResourcesRequired, LangSpace native "SVGPolylineElement" {
+class PolylineElement extends StyledElement implements Transformable, ExternalResourcesRequired, Tests, LangSpace native "SVGPolylineElement" {
   // To suppress missing implicit constructor warnings.
   factory PolylineElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -5190,7 +5190,7 @@
 @DocsEditable()
 @DomName('SVGRectElement')
 @Unstable()
-class RectElement extends StyledElement implements Transformable, Tests, ExternalResourcesRequired, LangSpace native "SVGRectElement" {
+class RectElement extends StyledElement implements Transformable, ExternalResourcesRequired, Tests, LangSpace native "SVGRectElement" {
   // To suppress missing implicit constructor warnings.
   factory RectElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -5713,46 +5713,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 
-@DocsEditable()
-@DomName('SVGException')
-@Unstable()
-class SvgException extends Interceptor native "SVGException" {
-
-  @DomName('SVGException.SVG_INVALID_VALUE_ERR')
-  @DocsEditable()
-  static const int SVG_INVALID_VALUE_ERR = 1;
-
-  @DomName('SVGException.SVG_MATRIX_NOT_INVERTABLE')
-  @DocsEditable()
-  static const int SVG_MATRIX_NOT_INVERTABLE = 2;
-
-  @DomName('SVGException.SVG_WRONG_TYPE_ERR')
-  @DocsEditable()
-  static const int SVG_WRONG_TYPE_ERR = 0;
-
-  @DomName('SVGException.code')
-  @DocsEditable()
-  final int code;
-
-  @DomName('SVGException.message')
-  @DocsEditable()
-  @Experimental() // nonstandard
-  final String message;
-
-  @DomName('SVGException.name')
-  @DocsEditable()
-  @Experimental() // nonstandard
-  final String name;
-
-  @DomName('SVGException.toString')
-  @DocsEditable()
-  String toString() 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('SVGSVGElement')
 @Unstable()
 class SvgSvgElement extends StyledElement implements FitToViewBox, Transformable, Tests, ExternalResourcesRequired, ZoomAndPan, LangSpace native "SVGSVGElement" {
@@ -6018,7 +5978,7 @@
 @DocsEditable()
 @DomName('SVGSwitchElement')
 @Unstable()
-class SwitchElement extends StyledElement implements Transformable, Tests, ExternalResourcesRequired, LangSpace native "SVGSwitchElement" {
+class SwitchElement extends StyledElement implements Transformable, ExternalResourcesRequired, Tests, LangSpace native "SVGSwitchElement" {
   // To suppress missing implicit constructor warnings.
   factory SwitchElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -6178,7 +6138,7 @@
 @DocsEditable()
 @DomName('SVGTextContentElement')
 @Unstable()
-class TextContentElement extends StyledElement implements Tests, ExternalResourcesRequired, LangSpace native "SVGTextContentElement" {
+class TextContentElement extends StyledElement implements ExternalResourcesRequired, Tests, LangSpace native "SVGTextContentElement" {
   // To suppress missing implicit constructor warnings.
   factory TextContentElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -6673,7 +6633,7 @@
 @DocsEditable()
 @DomName('SVGUseElement')
 @Unstable()
-class UseElement extends StyledElement implements UriReference, Tests, Transformable, ExternalResourcesRequired, LangSpace native "SVGUseElement" {
+class UseElement extends StyledElement implements Transformable, ExternalResourcesRequired, UriReference, Tests, LangSpace native "SVGUseElement" {
   // To suppress missing implicit constructor warnings.
   factory UseElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -6829,12 +6789,7 @@
 @DocsEditable()
 @DomName('SVGViewSpec')
 @Unstable()
-class ViewSpec extends Interceptor native "SVGViewSpec" {
-
-  @DomName('SVGViewSpec.preserveAspectRatio')
-  @DocsEditable()
-  @Experimental() // nonstandard
-  final AnimatedPreserveAspectRatio preserveAspectRatio;
+class ViewSpec extends Interceptor implements FitToViewBox native "SVGViewSpec" {
 
   @DomName('SVGViewSpec.preserveAspectRatioString')
   @DocsEditable()
@@ -6848,11 +6803,6 @@
   @DocsEditable()
   final String transformString;
 
-  @DomName('SVGViewSpec.viewBox')
-  @DocsEditable()
-  @Experimental() // nonstandard
-  final AnimatedRect viewBox;
-
   @DomName('SVGViewSpec.viewBoxString')
   @DocsEditable()
   final String viewBoxString;
@@ -6869,6 +6819,18 @@
   @DocsEditable()
   @Experimental() // nonstandard
   int zoomAndPan;
+
+  // From SVGFitToViewBox
+
+  @DomName('SVGViewSpec.preserveAspectRatio')
+  @DocsEditable()
+  @Experimental() // nonstandard
+  final AnimatedPreserveAspectRatio preserveAspectRatio;
+
+  @DomName('SVGViewSpec.viewBox')
+  @DocsEditable()
+  @Experimental() // nonstandard
+  final AnimatedRect viewBox;
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -7109,7 +7071,7 @@
 @DocsEditable()
 @DomName('SVGCursorElement')
 @Unstable()
-abstract class _SVGCursorElement extends SvgElement implements UriReference, Tests, ExternalResourcesRequired native "SVGCursorElement" {
+abstract class _SVGCursorElement extends SvgElement implements UriReference, ExternalResourcesRequired, Tests native "SVGCursorElement" {
   // To suppress missing implicit constructor warnings.
   factory _SVGCursorElement._() { throw new UnsupportedError("Not supported"); }
 
diff --git a/sdk/lib/svg/dartium/svg_dartium.dart b/sdk/lib/svg/dartium/svg_dartium.dart
index 98774f3..0e76bcc 100644
--- a/sdk/lib/svg/dartium/svg_dartium.dart
+++ b/sdk/lib/svg/dartium/svg_dartium.dart
@@ -63,7 +63,7 @@
 @DocsEditable()
 @DomName('SVGAElement')
 @Unstable()
-class AElement extends StyledElement implements UriReference, Tests, Transformable, ExternalResourcesRequired, LangSpace {
+class AElement extends StyledElement implements Transformable, ExternalResourcesRequired, UriReference, Tests, LangSpace {
   // To suppress missing implicit constructor warnings.
   factory AElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -615,7 +615,7 @@
 @DocsEditable()
 @DomName('SVGAnimationElement')
 @Unstable()
-class AnimationElement extends SvgElement implements Tests, ElementTimeControl, ExternalResourcesRequired {
+class AnimationElement extends SvgElement implements ExternalResourcesRequired, ElementTimeControl, Tests {
   // To suppress missing implicit constructor warnings.
   factory AnimationElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -686,7 +686,7 @@
 @DocsEditable()
 @DomName('SVGCircleElement')
 @Unstable()
-class CircleElement extends StyledElement implements Transformable, Tests, ExternalResourcesRequired, LangSpace {
+class CircleElement extends StyledElement implements Transformable, ExternalResourcesRequired, Tests, LangSpace {
   // To suppress missing implicit constructor warnings.
   factory CircleElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -781,7 +781,7 @@
 @DocsEditable()
 @DomName('SVGClipPathElement')
 @Unstable()
-class ClipPathElement extends StyledElement implements Transformable, Tests, ExternalResourcesRequired, LangSpace {
+class ClipPathElement extends StyledElement implements Transformable, ExternalResourcesRequired, Tests, LangSpace {
   // To suppress missing implicit constructor warnings.
   factory ClipPathElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -868,7 +868,7 @@
 @DocsEditable()
 @DomName('SVGDefsElement')
 @Unstable()
-class DefsElement extends StyledElement implements Transformable, Tests, ExternalResourcesRequired, LangSpace {
+class DefsElement extends StyledElement implements Transformable, ExternalResourcesRequired, Tests, LangSpace {
   // To suppress missing implicit constructor warnings.
   factory DefsElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -1357,7 +1357,7 @@
 @DocsEditable()
 @DomName('SVGEllipseElement')
 @Unstable()
-class EllipseElement extends StyledElement implements Transformable, Tests, ExternalResourcesRequired, LangSpace {
+class EllipseElement extends StyledElement implements Transformable, ExternalResourcesRequired, Tests, LangSpace {
   // To suppress missing implicit constructor warnings.
   factory EllipseElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -3009,7 +3009,7 @@
 @SupportedBrowser(SupportedBrowser.FIREFOX)
 @SupportedBrowser(SupportedBrowser.SAFARI)
 @Unstable()
-class ForeignObjectElement extends StyledElement implements Transformable, Tests, ExternalResourcesRequired, LangSpace {
+class ForeignObjectElement extends StyledElement implements Transformable, ExternalResourcesRequired, Tests, LangSpace {
   // To suppress missing implicit constructor warnings.
   factory ForeignObjectElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -3111,7 +3111,7 @@
 @DocsEditable()
 @DomName('SVGGElement')
 @Unstable()
-class GElement extends StyledElement implements Transformable, Tests, ExternalResourcesRequired, LangSpace {
+class GElement extends StyledElement implements Transformable, ExternalResourcesRequired, Tests, LangSpace {
   // To suppress missing implicit constructor warnings.
   factory GElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -3194,7 +3194,7 @@
 @DocsEditable()
 @DomName('SVGImageElement')
 @Unstable()
-class ImageElement extends StyledElement implements UriReference, Tests, Transformable, ExternalResourcesRequired, LangSpace {
+class ImageElement extends StyledElement implements Transformable, ExternalResourcesRequired, UriReference, Tests, LangSpace {
   // To suppress missing implicit constructor warnings.
   factory ImageElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -3518,7 +3518,7 @@
 @DocsEditable()
 @DomName('SVGLineElement')
 @Unstable()
-class LineElement extends StyledElement implements Transformable, Tests, ExternalResourcesRequired, LangSpace {
+class LineElement extends StyledElement implements Transformable, ExternalResourcesRequired, Tests, LangSpace {
   // To suppress missing implicit constructor warnings.
   factory LineElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -3796,7 +3796,7 @@
 @DocsEditable()
 @DomName('SVGMaskElement')
 @Unstable()
-class MaskElement extends StyledElement implements Tests, ExternalResourcesRequired, LangSpace {
+class MaskElement extends StyledElement implements ExternalResourcesRequired, Tests, LangSpace {
   // To suppress missing implicit constructor warnings.
   factory MaskElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -4108,7 +4108,7 @@
 @DocsEditable()
 @DomName('SVGPathElement')
 @Unstable()
-class PathElement extends StyledElement implements Transformable, Tests, ExternalResourcesRequired, LangSpace {
+class PathElement extends StyledElement implements Transformable, ExternalResourcesRequired, Tests, LangSpace {
   // To suppress missing implicit constructor warnings.
   factory PathElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -5241,7 +5241,7 @@
 @DocsEditable()
 @DomName('SVGPatternElement')
 @Unstable()
-class PatternElement extends StyledElement implements FitToViewBox, UriReference, Tests, ExternalResourcesRequired, LangSpace {
+class PatternElement extends StyledElement implements FitToViewBox, UriReference, ExternalResourcesRequired, Tests, LangSpace {
   // To suppress missing implicit constructor warnings.
   factory PatternElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -5414,7 +5414,7 @@
 @DocsEditable()
 @DomName('SVGPolygonElement')
 @Unstable()
-class PolygonElement extends StyledElement implements Transformable, Tests, ExternalResourcesRequired, LangSpace {
+class PolygonElement extends StyledElement implements Transformable, ExternalResourcesRequired, Tests, LangSpace {
   // To suppress missing implicit constructor warnings.
   factory PolygonElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -5505,7 +5505,7 @@
 @DocsEditable()
 @DomName('SVGPolylineElement')
 @Unstable()
-class PolylineElement extends StyledElement implements Transformable, Tests, ExternalResourcesRequired, LangSpace {
+class PolylineElement extends StyledElement implements Transformable, ExternalResourcesRequired, Tests, LangSpace {
   // To suppress missing implicit constructor warnings.
   factory PolylineElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -5769,7 +5769,7 @@
 @DocsEditable()
 @DomName('SVGRectElement')
 @Unstable()
-class RectElement extends StyledElement implements Transformable, Tests, ExternalResourcesRequired, LangSpace {
+class RectElement extends StyledElement implements Transformable, ExternalResourcesRequired, Tests, LangSpace {
   // To suppress missing implicit constructor warnings.
   factory RectElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -6336,49 +6336,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.
-
-
-@DocsEditable()
-@DomName('SVGException')
-@Unstable()
-class SvgException extends NativeFieldWrapperClass1 {
-
-  @DomName('SVGException.SVG_INVALID_VALUE_ERR')
-  @DocsEditable()
-  static const int SVG_INVALID_VALUE_ERR = 1;
-
-  @DomName('SVGException.SVG_MATRIX_NOT_INVERTABLE')
-  @DocsEditable()
-  static const int SVG_MATRIX_NOT_INVERTABLE = 2;
-
-  @DomName('SVGException.SVG_WRONG_TYPE_ERR')
-  @DocsEditable()
-  static const int SVG_WRONG_TYPE_ERR = 0;
-
-  @DomName('SVGException.code')
-  @DocsEditable()
-  int get code native "SVGException_code_Getter";
-
-  @DomName('SVGException.message')
-  @DocsEditable()
-  @Experimental() // nonstandard
-  String get message native "SVGException_message_Getter";
-
-  @DomName('SVGException.name')
-  @DocsEditable()
-  @Experimental() // nonstandard
-  String get name native "SVGException_name_Getter";
-
-  @DomName('SVGException.toString')
-  @DocsEditable()
-  String toString() native "SVGException_toString_Callback";
-
-}
-// Copyright (c) 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('SVGSVGElement')
 @Unstable()
@@ -6643,7 +6600,7 @@
 @DocsEditable()
 @DomName('SVGSwitchElement')
 @Unstable()
-class SwitchElement extends StyledElement implements Transformable, Tests, ExternalResourcesRequired, LangSpace {
+class SwitchElement extends StyledElement implements Transformable, ExternalResourcesRequired, Tests, LangSpace {
   // To suppress missing implicit constructor warnings.
   factory SwitchElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -6821,7 +6778,7 @@
 @DocsEditable()
 @DomName('SVGTextContentElement')
 @Unstable()
-class TextContentElement extends StyledElement implements Tests, ExternalResourcesRequired, LangSpace {
+class TextContentElement extends StyledElement implements ExternalResourcesRequired, Tests, LangSpace {
   // To suppress missing implicit constructor warnings.
   factory TextContentElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -7360,7 +7317,7 @@
 @DocsEditable()
 @DomName('SVGUseElement')
 @Unstable()
-class UseElement extends StyledElement implements UriReference, Tests, Transformable, ExternalResourcesRequired, LangSpace {
+class UseElement extends StyledElement implements Transformable, ExternalResourcesRequired, UriReference, Tests, LangSpace {
   // To suppress missing implicit constructor warnings.
   factory UseElement._() { throw new UnsupportedError("Not supported"); }
 
@@ -7514,12 +7471,7 @@
 @DocsEditable()
 @DomName('SVGViewSpec')
 @Unstable()
-class ViewSpec extends NativeFieldWrapperClass1 {
-
-  @DomName('SVGViewSpec.preserveAspectRatio')
-  @DocsEditable()
-  @Experimental() // nonstandard
-  AnimatedPreserveAspectRatio get preserveAspectRatio native "SVGViewSpec_preserveAspectRatio_Getter";
+class ViewSpec extends NativeFieldWrapperClass1 implements FitToViewBox {
 
   @DomName('SVGViewSpec.preserveAspectRatioString')
   @DocsEditable()
@@ -7533,11 +7485,6 @@
   @DocsEditable()
   String get transformString native "SVGViewSpec_transformString_Getter";
 
-  @DomName('SVGViewSpec.viewBox')
-  @DocsEditable()
-  @Experimental() // nonstandard
-  AnimatedRect get viewBox native "SVGViewSpec_viewBox_Getter";
-
   @DomName('SVGViewSpec.viewBoxString')
   @DocsEditable()
   String get viewBoxString native "SVGViewSpec_viewBoxString_Getter";
@@ -7560,6 +7507,16 @@
   @Experimental() // nonstandard
   void set zoomAndPan(int value) native "SVGViewSpec_zoomAndPan_Setter";
 
+  @DomName('SVGViewSpec.preserveAspectRatio')
+  @DocsEditable()
+  @Experimental() // nonstandard
+  AnimatedPreserveAspectRatio get preserveAspectRatio native "SVGViewSpec_preserveAspectRatio_Getter";
+
+  @DomName('SVGViewSpec.viewBox')
+  @DocsEditable()
+  @Experimental() // nonstandard
+  AnimatedRect get viewBox native "SVGViewSpec_viewBox_Getter";
+
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
@@ -7829,7 +7786,7 @@
 @DocsEditable()
 @DomName('SVGCursorElement')
 @Unstable()
-abstract class _SVGCursorElement extends SvgElement implements UriReference, Tests, ExternalResourcesRequired {
+abstract class _SVGCursorElement extends SvgElement implements UriReference, ExternalResourcesRequired, Tests {
   // To suppress missing implicit constructor warnings.
   factory _SVGCursorElement._() { throw new UnsupportedError("Not supported"); }
 
diff --git a/sdk/lib/typed_data/typed_data.dart b/sdk/lib/typed_data/typed_data.dart
index 756b34a..739eae8 100644
--- a/sdk/lib/typed_data/typed_data.dart
+++ b/sdk/lib/typed_data/typed_data.dart
@@ -1383,6 +1383,26 @@
   /// Returns a new [Float32x4] with lane values reordered.
   Float32x4 get wwww;
 
+  /// Returns a new [Float32x4] with values in the X and Y lanes
+  /// replaced with the values in the Z and W lanes of [other].
+  Float32x4 withZWInXY(Float32x4 other);
+
+  /// Returns a new [Float32x4] with the X and Y lane values
+  /// from [this] and [other] interleaved.
+  Float32x4 interleaveXY(Float32x4 other);
+
+  /// Returns a new [Float32x4] with the Z and W lane values
+  /// from [this] and [other] interleaved.
+  Float32x4 interleaveZW(Float32x4 other);
+
+  /// Returns a new [Float32x4] with the X and Y lane value pairs
+  /// from [this] and [other] interleaved.
+  Float32x4 interleaveXYPairs(Float32x4 other);
+
+  /// Returns a new [Float32x4] with the Z and W lane value pairs
+  /// from [this] and [other] interleaved.
+  Float32x4 interleaveZWPairs(Float32x4 other);
+
   /// Returns a new [Float32x4] copied from [this] with a new x value.
   Float32x4 withX(double x);
   /// Returns a new [Float32x4] copied from [this] with a new y value.
diff --git a/sdk/lib/web_gl/dart2js/web_gl_dart2js.dart b/sdk/lib/web_gl/dart2js/web_gl_dart2js.dart
index eef8b0f..11e9e01 100644
--- a/sdk/lib/web_gl/dart2js/web_gl_dart2js.dart
+++ b/sdk/lib/web_gl/dart2js/web_gl_dart2js.dart
@@ -531,151 +531,151 @@
 
 
 @DocsEditable()
-@DomName('EXTDrawBuffers')
+@DomName('WebGLDrawBuffers')
 // http://www.khronos.org/registry/webgl/specs/latest/
 @Experimental() // stable
-class ExtDrawBuffers extends Interceptor native "EXTDrawBuffers" {
+class DrawBuffers extends Interceptor native "WebGLDrawBuffers" {
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT0_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT0_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT0_EXT = 0x8CE0;
+  static const int COLOR_ATTACHMENT0_WEBGL = 0x8CE0;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT10_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT10_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT10_EXT = 0x8CEA;
+  static const int COLOR_ATTACHMENT10_WEBGL = 0x8CEA;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT11_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT11_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT11_EXT = 0x8CEB;
+  static const int COLOR_ATTACHMENT11_WEBGL = 0x8CEB;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT12_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT12_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT12_EXT = 0x8CEC;
+  static const int COLOR_ATTACHMENT12_WEBGL = 0x8CEC;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT13_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT13_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT13_EXT = 0x8CED;
+  static const int COLOR_ATTACHMENT13_WEBGL = 0x8CED;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT14_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT14_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT14_EXT = 0x8CEE;
+  static const int COLOR_ATTACHMENT14_WEBGL = 0x8CEE;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT15_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT15_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT15_EXT = 0x8CEF;
+  static const int COLOR_ATTACHMENT15_WEBGL = 0x8CEF;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT1_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT1_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT1_EXT = 0x8CE1;
+  static const int COLOR_ATTACHMENT1_WEBGL = 0x8CE1;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT2_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT2_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT2_EXT = 0x8CE2;
+  static const int COLOR_ATTACHMENT2_WEBGL = 0x8CE2;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT3_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT3_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT3_EXT = 0x8CE3;
+  static const int COLOR_ATTACHMENT3_WEBGL = 0x8CE3;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT4_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT4_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT4_EXT = 0x8CE4;
+  static const int COLOR_ATTACHMENT4_WEBGL = 0x8CE4;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT5_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT5_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT5_EXT = 0x8CE5;
+  static const int COLOR_ATTACHMENT5_WEBGL = 0x8CE5;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT6_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT6_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT6_EXT = 0x8CE6;
+  static const int COLOR_ATTACHMENT6_WEBGL = 0x8CE6;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT7_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT7_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT7_EXT = 0x8CE7;
+  static const int COLOR_ATTACHMENT7_WEBGL = 0x8CE7;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT8_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT8_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT8_EXT = 0x8CE8;
+  static const int COLOR_ATTACHMENT8_WEBGL = 0x8CE8;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT9_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT9_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT9_EXT = 0x8CE9;
+  static const int COLOR_ATTACHMENT9_WEBGL = 0x8CE9;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER0_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER0_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER0_EXT = 0x8825;
+  static const int DRAW_BUFFER0_WEBGL = 0x8825;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER10_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER10_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER10_EXT = 0x882F;
+  static const int DRAW_BUFFER10_WEBGL = 0x882F;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER11_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER11_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER11_EXT = 0x8830;
+  static const int DRAW_BUFFER11_WEBGL = 0x8830;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER12_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER12_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER12_EXT = 0x8831;
+  static const int DRAW_BUFFER12_WEBGL = 0x8831;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER13_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER13_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER13_EXT = 0x8832;
+  static const int DRAW_BUFFER13_WEBGL = 0x8832;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER14_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER14_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER14_EXT = 0x8833;
+  static const int DRAW_BUFFER14_WEBGL = 0x8833;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER15_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER15_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER15_EXT = 0x8834;
+  static const int DRAW_BUFFER15_WEBGL = 0x8834;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER1_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER1_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER1_EXT = 0x8826;
+  static const int DRAW_BUFFER1_WEBGL = 0x8826;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER2_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER2_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER2_EXT = 0x8827;
+  static const int DRAW_BUFFER2_WEBGL = 0x8827;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER3_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER3_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER3_EXT = 0x8828;
+  static const int DRAW_BUFFER3_WEBGL = 0x8828;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER4_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER4_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER4_EXT = 0x8829;
+  static const int DRAW_BUFFER4_WEBGL = 0x8829;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER5_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER5_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER5_EXT = 0x882A;
+  static const int DRAW_BUFFER5_WEBGL = 0x882A;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER6_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER6_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER6_EXT = 0x882B;
+  static const int DRAW_BUFFER6_WEBGL = 0x882B;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER7_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER7_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER7_EXT = 0x882C;
+  static const int DRAW_BUFFER7_WEBGL = 0x882C;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER8_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER8_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER8_EXT = 0x882D;
+  static const int DRAW_BUFFER8_WEBGL = 0x882D;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER9_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER9_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER9_EXT = 0x882E;
+  static const int DRAW_BUFFER9_WEBGL = 0x882E;
 
-  @DomName('EXTDrawBuffers.MAX_COLOR_ATTACHMENTS_EXT')
+  @DomName('WebGLDrawBuffers.MAX_COLOR_ATTACHMENTS_WEBGL')
   @DocsEditable()
-  static const int MAX_COLOR_ATTACHMENTS_EXT = 0x8CDF;
+  static const int MAX_COLOR_ATTACHMENTS_WEBGL = 0x8CDF;
 
-  @DomName('EXTDrawBuffers.MAX_DRAW_BUFFERS_EXT')
+  @DomName('WebGLDrawBuffers.MAX_DRAW_BUFFERS_WEBGL')
   @DocsEditable()
-  static const int MAX_DRAW_BUFFERS_EXT = 0x8824;
+  static const int MAX_DRAW_BUFFERS_WEBGL = 0x8824;
 
-  @JSName('drawBuffersEXT')
-  @DomName('EXTDrawBuffers.drawBuffersEXT')
+  @JSName('drawBuffersWEBGL')
+  @DomName('WebGLDrawBuffers.drawBuffersWEBGL')
   @DocsEditable()
-  void drawBuffersExt(List<int> buffers) native;
+  void drawBuffersWebgl(List<int> buffers) 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
diff --git a/sdk/lib/web_gl/dartium/web_gl_dartium.dart b/sdk/lib/web_gl/dartium/web_gl_dartium.dart
index 7b2efc5..7637a680 100644
--- a/sdk/lib/web_gl/dartium/web_gl_dartium.dart
+++ b/sdk/lib/web_gl/dartium/web_gl_dartium.dart
@@ -585,150 +585,150 @@
 
 
 @DocsEditable()
-@DomName('EXTDrawBuffers')
+@DomName('WebGLDrawBuffers')
 // http://www.khronos.org/registry/webgl/specs/latest/
 @Experimental() // stable
-class ExtDrawBuffers extends NativeFieldWrapperClass1 {
+class DrawBuffers extends NativeFieldWrapperClass1 {
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT0_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT0_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT0_EXT = 0x8CE0;
+  static const int COLOR_ATTACHMENT0_WEBGL = 0x8CE0;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT10_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT10_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT10_EXT = 0x8CEA;
+  static const int COLOR_ATTACHMENT10_WEBGL = 0x8CEA;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT11_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT11_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT11_EXT = 0x8CEB;
+  static const int COLOR_ATTACHMENT11_WEBGL = 0x8CEB;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT12_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT12_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT12_EXT = 0x8CEC;
+  static const int COLOR_ATTACHMENT12_WEBGL = 0x8CEC;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT13_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT13_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT13_EXT = 0x8CED;
+  static const int COLOR_ATTACHMENT13_WEBGL = 0x8CED;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT14_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT14_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT14_EXT = 0x8CEE;
+  static const int COLOR_ATTACHMENT14_WEBGL = 0x8CEE;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT15_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT15_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT15_EXT = 0x8CEF;
+  static const int COLOR_ATTACHMENT15_WEBGL = 0x8CEF;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT1_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT1_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT1_EXT = 0x8CE1;
+  static const int COLOR_ATTACHMENT1_WEBGL = 0x8CE1;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT2_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT2_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT2_EXT = 0x8CE2;
+  static const int COLOR_ATTACHMENT2_WEBGL = 0x8CE2;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT3_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT3_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT3_EXT = 0x8CE3;
+  static const int COLOR_ATTACHMENT3_WEBGL = 0x8CE3;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT4_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT4_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT4_EXT = 0x8CE4;
+  static const int COLOR_ATTACHMENT4_WEBGL = 0x8CE4;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT5_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT5_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT5_EXT = 0x8CE5;
+  static const int COLOR_ATTACHMENT5_WEBGL = 0x8CE5;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT6_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT6_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT6_EXT = 0x8CE6;
+  static const int COLOR_ATTACHMENT6_WEBGL = 0x8CE6;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT7_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT7_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT7_EXT = 0x8CE7;
+  static const int COLOR_ATTACHMENT7_WEBGL = 0x8CE7;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT8_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT8_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT8_EXT = 0x8CE8;
+  static const int COLOR_ATTACHMENT8_WEBGL = 0x8CE8;
 
-  @DomName('EXTDrawBuffers.COLOR_ATTACHMENT9_EXT')
+  @DomName('WebGLDrawBuffers.COLOR_ATTACHMENT9_WEBGL')
   @DocsEditable()
-  static const int COLOR_ATTACHMENT9_EXT = 0x8CE9;
+  static const int COLOR_ATTACHMENT9_WEBGL = 0x8CE9;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER0_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER0_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER0_EXT = 0x8825;
+  static const int DRAW_BUFFER0_WEBGL = 0x8825;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER10_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER10_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER10_EXT = 0x882F;
+  static const int DRAW_BUFFER10_WEBGL = 0x882F;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER11_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER11_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER11_EXT = 0x8830;
+  static const int DRAW_BUFFER11_WEBGL = 0x8830;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER12_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER12_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER12_EXT = 0x8831;
+  static const int DRAW_BUFFER12_WEBGL = 0x8831;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER13_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER13_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER13_EXT = 0x8832;
+  static const int DRAW_BUFFER13_WEBGL = 0x8832;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER14_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER14_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER14_EXT = 0x8833;
+  static const int DRAW_BUFFER14_WEBGL = 0x8833;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER15_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER15_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER15_EXT = 0x8834;
+  static const int DRAW_BUFFER15_WEBGL = 0x8834;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER1_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER1_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER1_EXT = 0x8826;
+  static const int DRAW_BUFFER1_WEBGL = 0x8826;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER2_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER2_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER2_EXT = 0x8827;
+  static const int DRAW_BUFFER2_WEBGL = 0x8827;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER3_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER3_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER3_EXT = 0x8828;
+  static const int DRAW_BUFFER3_WEBGL = 0x8828;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER4_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER4_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER4_EXT = 0x8829;
+  static const int DRAW_BUFFER4_WEBGL = 0x8829;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER5_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER5_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER5_EXT = 0x882A;
+  static const int DRAW_BUFFER5_WEBGL = 0x882A;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER6_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER6_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER6_EXT = 0x882B;
+  static const int DRAW_BUFFER6_WEBGL = 0x882B;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER7_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER7_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER7_EXT = 0x882C;
+  static const int DRAW_BUFFER7_WEBGL = 0x882C;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER8_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER8_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER8_EXT = 0x882D;
+  static const int DRAW_BUFFER8_WEBGL = 0x882D;
 
-  @DomName('EXTDrawBuffers.DRAW_BUFFER9_EXT')
+  @DomName('WebGLDrawBuffers.DRAW_BUFFER9_WEBGL')
   @DocsEditable()
-  static const int DRAW_BUFFER9_EXT = 0x882E;
+  static const int DRAW_BUFFER9_WEBGL = 0x882E;
 
-  @DomName('EXTDrawBuffers.MAX_COLOR_ATTACHMENTS_EXT')
+  @DomName('WebGLDrawBuffers.MAX_COLOR_ATTACHMENTS_WEBGL')
   @DocsEditable()
-  static const int MAX_COLOR_ATTACHMENTS_EXT = 0x8CDF;
+  static const int MAX_COLOR_ATTACHMENTS_WEBGL = 0x8CDF;
 
-  @DomName('EXTDrawBuffers.MAX_DRAW_BUFFERS_EXT')
+  @DomName('WebGLDrawBuffers.MAX_DRAW_BUFFERS_WEBGL')
   @DocsEditable()
-  static const int MAX_DRAW_BUFFERS_EXT = 0x8824;
+  static const int MAX_DRAW_BUFFERS_WEBGL = 0x8824;
 
-  @DomName('EXTDrawBuffers.drawBuffersEXT')
+  @DomName('WebGLDrawBuffers.drawBuffersWEBGL')
   @DocsEditable()
-  void drawBuffersExt(List<int> buffers) native "EXTDrawBuffers_drawBuffersEXT_Callback";
+  void drawBuffersWebgl(List<int> buffers) native "WebGLDrawBuffers_drawBuffersWEBGL_Callback";
 
 }
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index 236faa9..82cb2b9 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -20,6 +20,7 @@
 typed_data/float32x4_unbox_phi_test: Fail, OK
 typed_data/float32x4_unbox_regress_test: Fail, OK
 typed_data/float32x4_shuffle_test: Fail, OK
+typed_data/float32x4_two_arg_shuffle_test: Fail, OK
 
 [ $compiler == dart2js && ($runtime == d8 || $runtime == ie9) ]
 typed_data/byte_data_test: Fail, OK # d8/ie9 doesn't support DataView
@@ -62,12 +63,13 @@
 async/run_async6_test: Fail             # Issue 10957 - may be related to issue 10910
 
 [ $compiler == dart2dart && $minified ]
-json/json_test: Fail                           # Issue 10961
-typed_data/float32x4_test: Fail                # Issue 10961
-typed_data/float32x4_list_test: Fail           # Issue 10961
-typed_data/float32x4_unbox_phi_test: Fail      # Issue 10961
-typed_data/float32x4_unbox_regress_test: Fail  # Issue 10961
-typed_data/float32x4_shuffle_test: Fail        # Issue 10961
+json/json_test: Fail                            # Issue 10961
+typed_data/float32x4_test: Fail                 # Issue 10961
+typed_data/float32x4_list_test: Fail            # Issue 10961
+typed_data/float32x4_unbox_phi_test: Fail       # Issue 10961
+typed_data/float32x4_unbox_regress_test: Fail   # Issue 10961
+typed_data/float32x4_shuffle_test: Fail         # Issue 10961
+typed_data/float32x4_two_arg_shuffle_test: Fail # Issue 10961
 
 [ $runtime == ff ]
 # FF setTimeout can fire early: https://bugzilla.mozilla.org/show_bug.cgi?id=291386
@@ -96,9 +98,7 @@
 async/run_async3_test: Fail # _enqueueImmediate runs after Timer. http://dartbug.com/9001.
 mirrors/library_metadata_test: Fail # http://dartbug.com/10906
 mirrors/superclass_test: Fail # http://dartbug.com/11142
-mirrors/reflect_model_test: Fail # http://dartbug.com/11219
 mirrors/parameter_test: Fail # http://dartbug.com/11567
-mirrors/top_level_accessors_test: Fail # http://dartbug.com/11943
 mirrors/operator_test: Fail # http://dartbug.com/11944
 
 [ $compiler == none && $runtime == drt ]
@@ -121,4 +121,5 @@
 typed_data/float32x4_list_test: Crash # Unimplemented
 typed_data/float32x4_test: Crash # Unimplemented
 typed_data/float32x4_shuffle_test: Crash # Unimplemented
+typed_data/float32x4_two_arg_shuffle_test: Crash # Unimplemented
 
diff --git a/tests/lib/typed_data/float32x4_two_arg_shuffle_test.dart b/tests/lib/typed_data/float32x4_two_arg_shuffle_test.dart
new file mode 100644
index 0000000..f991356
--- /dev/null
+++ b/tests/lib/typed_data/float32x4_two_arg_shuffle_test.dart
@@ -0,0 +1,69 @@
+// 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.
+
+// Library tag to be able to run in html test framework.
+library float32x4_two_arg_shuffle_test;
+
+import "package:expect/expect.dart";
+import 'dart:typed_data';
+
+testWithZWInXY() {
+  Float32x4 a = new Float32x4(1.0, 2.0, 3.0, 4.0);
+  Float32x4 b = new Float32x4(5.0, 6.0, 7.0, 8.0);
+  Float32x4 c = a.withZWInXY(b);
+  Expect.equals(7.0, c.x);
+  Expect.equals(8.0, c.y);
+  Expect.equals(3.0, c.z);
+  Expect.equals(4.0, c.w);
+}
+
+testInterleaveXY() {
+  Float32x4 a = new Float32x4(1.0, 2.0, 3.0, 4.0);
+  Float32x4 b = new Float32x4(5.0, 6.0, 7.0, 8.0);
+  Float32x4 c = a.interleaveXY(b);
+  Expect.equals(1.0, c.x);
+  Expect.equals(5.0, c.y);
+  Expect.equals(2.0, c.z);
+  Expect.equals(6.0, c.w);
+}
+
+testInterleaveZW() {
+  Float32x4 a = new Float32x4(1.0, 2.0, 3.0, 4.0);
+  Float32x4 b = new Float32x4(5.0, 6.0, 7.0, 8.0);
+  Float32x4 c = a.interleaveZW(b);
+  Expect.equals(3.0, c.x);
+  Expect.equals(7.0, c.y);
+  Expect.equals(4.0, c.z);
+  Expect.equals(8.0, c.w);
+}
+
+testInterleaveXYPairs() {
+  Float32x4 a = new Float32x4(1.0, 2.0, 3.0, 4.0);
+  Float32x4 b = new Float32x4(5.0, 6.0, 7.0, 8.0);
+  Float32x4 c = a.interleaveXYPairs(b);
+  Expect.equals(1.0, c.x);
+  Expect.equals(2.0, c.y);
+  Expect.equals(5.0, c.z);
+  Expect.equals(6.0, c.w);
+}
+
+testInterleaveZWPairs() {
+  Float32x4 a = new Float32x4(1.0, 2.0, 3.0, 4.0);
+  Float32x4 b = new Float32x4(5.0, 6.0, 7.0, 8.0);
+  Float32x4 c = a.interleaveZWPairs(b);
+  Expect.equals(3.0, c.x);
+  Expect.equals(4.0, c.y);
+  Expect.equals(7.0, c.z);
+  Expect.equals(8.0, c.w);
+}
+
+main() {
+  for (int i = 0; i < 4000; i++) {
+    testWithZWInXY();
+    testInterleaveXY();
+    testInterleaveZW();
+    testInterleaveXYPairs();
+    testInterleaveZWPairs();
+  }
+}
diff --git a/tools/VERSION b/tools/VERSION
index f6f9fc8..ac61405 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -1,4 +1,4 @@
 MAJOR 0
 MINOR 6
-BUILD 10
+BUILD 11
 PATCH 0
diff --git a/tools/dom/dom.json b/tools/dom/dom.json
index 9c560e4..946b502 100644
--- a/tools/dom/dom.json
+++ b/tools/dom/dom.json
@@ -1,4 +1,21 @@
 {
+  "ANGLEInstancedArrays": {
+    "members": {
+      "VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE": {
+        "support_level": "untriaged"
+      },
+      "drawArraysInstancedANGLE": {
+        "support_level": "untriaged"
+      },
+      "drawElementsInstancedANGLE": {
+        "support_level": "untriaged"
+      },
+      "vertexAttribDivisorANGLE": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "AbstractWorker": {
     "comment": "http://www.w3.org/TR/workers/#the-abstractworker-abstract-interface",
     "members": {
@@ -23,14 +40,6 @@
     },
     "support_level": "experimental"
   },
-  "AnimationEvent": {
-    "comment": "http://www.w3.org/TR/css3-animations/#AnimationEvent-interface",
-    "members": {
-      "animationName": {},
-      "elapsedTime": {}
-    },
-    "support_level": "stable"
-  },
   "ArrayBuffer": {
     "comment": "http://www.khronos.org/registry/typedarray/specs/latest/",
     "members": {
@@ -302,34 +311,6 @@
     },
     "support_level": "experimental"
   },
-  "CSSFilterRule": {
-    "comment": "http://www.w3.org/TR/filter-effects/",
-    "members": {
-      "style": {}
-    },
-    "support_level": "experimental"
-  },
-  "CSSFilterValue": {
-    "comment": "http://dev.w3.org/csswg/cssom/",
-    "dart_action": "suppress",
-    "members": {
-      "CSS_FILTER_BLUR": {},
-      "CSS_FILTER_BRIGHTNESS": {},
-      "CSS_FILTER_CONTRAST": {},
-      "CSS_FILTER_CUSTOM": {},
-      "CSS_FILTER_DROP_SHADOW": {},
-      "CSS_FILTER_GRAYSCALE": {},
-      "CSS_FILTER_HUE_ROTATE": {},
-      "CSS_FILTER_INVERT": {},
-      "CSS_FILTER_OPACITY": {},
-      "CSS_FILTER_REFERENCE": {},
-      "CSS_FILTER_SATURATE": {},
-      "CSS_FILTER_SEPIA": {},
-      "__getter__": {},
-      "operationType": {}
-    },
-    "support_level": "deprecated"
-  },
   "CSSFontFaceLoadEvent": {
     "comment": "http://www.w3.org/TR/css3-fonts/",
     "members": {
@@ -363,66 +344,6 @@
     },
     "support_level": "stable"
   },
-  "CSSKeyframeRule": {
-    "comment": "http://www.w3.org/TR/css3-animations/#CSSKeyframeRule-interface",
-    "members": {
-      "keyText": {},
-      "style": {}
-    },
-    "support_level": "experimental"
-  },
-  "CSSKeyframesRule": {
-    "comment": "http://www.w3.org/TR/css3-animations/#csskeyframesrule",
-    "members": {
-      "__getter__": {},
-      "cssRules": {},
-      "deleteRule": {},
-      "findRule": {},
-      "insertRule": {},
-      "name": {}
-    },
-    "support_level": "experimental"
-  },
-  "CSSMatrix": {
-    "comment": "http://dev.w3.org/csswg/cssom/",
-    "dart_action": "suppress",
-    "members": {
-      "CSSMatrix": {},
-      "a": {},
-      "b": {},
-      "c": {},
-      "d": {},
-      "e": {},
-      "f": {},
-      "inverse": {},
-      "m11": {},
-      "m12": {},
-      "m13": {},
-      "m14": {},
-      "m21": {},
-      "m22": {},
-      "m23": {},
-      "m24": {},
-      "m31": {},
-      "m32": {},
-      "m33": {},
-      "m34": {},
-      "m41": {},
-      "m42": {},
-      "m43": {},
-      "m44": {},
-      "multiply": {},
-      "rotate": {},
-      "rotateAxisAngle": {},
-      "scale": {},
-      "setMatrixValue": {},
-      "skewX": {},
-      "skewY": {},
-      "toString": {},
-      "translate": {}
-    },
-    "support_level": "deprecated"
-  },
   "CSSMediaRule": {
     "comment": "http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSMediaRule",
     "members": {
@@ -433,12 +354,6 @@
     },
     "support_level": "stable"
   },
-  "CSSMixFunctionValue": {
-    "comment": "http://dev.w3.org/csswg/cssom/",
-    "dart_action": "suppress",
-    "members": {},
-    "support_level": "deprecated"
-  },
   "CSSPageRule": {
     "comment": "http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSPageRule",
     "members": {
@@ -492,13 +407,6 @@
     },
     "support_level": "deprecated"
   },
-  "CSSRegionRule": {
-    "comment": "http://dev.w3.org/csswg/css-regions/#region-style-rule-interface",
-    "members": {
-      "cssRules": {}
-    },
-    "support_level": "experimental"
-  },
   "CSSRule": {
     "comment": "http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSRule",
     "members": {
@@ -518,6 +426,9 @@
         "dart_action": "suppress",
         "support_level": "deprecated"
       },
+      "VIEWPORT_RULE": {
+        "support_level": "untriaged"
+      },
       "WEBKIT_FILTER_RULE": {
         "comment": "http://www.w3.org/TR/filter-effects/",
         "support_level": "experimental"
@@ -552,6 +463,9 @@
   "CSSStyleDeclaration": {
     "comment": "http://dev.w3.org/csswg/cssom/#the-cssstyledeclaration-interface",
     "members": {
+      "__getter__": {
+        "support_level": "untriaged"
+      },
       "__setter__": {},
       "cssText": {},
       "getPropertyCSSValue": {
@@ -606,36 +520,6 @@
     },
     "support_level": "standard"
   },
-  "CSSTransformValue": {
-    "comment": "http://dev.w3.org/csswg/cssom/",
-    "dart_action": "suppress",
-    "members": {
-      "CSS_MATRIX": {},
-      "CSS_MATRIX3D": {},
-      "CSS_PERSPECTIVE": {},
-      "CSS_ROTATE": {},
-      "CSS_ROTATE3D": {},
-      "CSS_ROTATEX": {},
-      "CSS_ROTATEY": {},
-      "CSS_ROTATEZ": {},
-      "CSS_SCALE": {},
-      "CSS_SCALE3D": {},
-      "CSS_SCALEX": {},
-      "CSS_SCALEY": {},
-      "CSS_SCALEZ": {},
-      "CSS_SKEW": {},
-      "CSS_SKEWX": {},
-      "CSS_SKEWY": {},
-      "CSS_TRANSLATE": {},
-      "CSS_TRANSLATE3D": {},
-      "CSS_TRANSLATEX": {},
-      "CSS_TRANSLATEY": {},
-      "CSS_TRANSLATEZ": {},
-      "__getter__": {},
-      "operationType": {}
-    },
-    "support_level": "deprecated"
-  },
   "CSSUnknownRule": {
     "comment": "http://dev.w3.org/csswg/cssom/#the-cssstylesheet-interface",
     "dart_action": "suppress",
@@ -664,6 +548,14 @@
     },
     "support_level": "deprecated"
   },
+  "CSSViewportRule": {
+    "members": {
+      "style": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "Canvas2DContextAttributes": {
     "comment": "http://wiki.whatwg.org/wiki/CanvasOpaque#Suggested_IDL",
     "members": {
@@ -850,6 +742,20 @@
     },
     "support_level": "stable"
   },
+  "ChildNode": {
+    "members": {
+      "nextElementSibling": {
+        "support_level": "untriaged"
+      },
+      "previousElementSibling": {
+        "support_level": "untriaged"
+      },
+      "remove": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "ClientRect": {
     "comment": "http://www.w3.org/TR/cssom-view/#the-clientrect-interface",
     "members": {
@@ -1004,7 +910,10 @@
   "Crypto": {
     "comment": "http://www.w3.org/TR/WebCryptoAPI/",
     "members": {
-      "getRandomValues": {}
+      "getRandomValues": {},
+      "subtle": {
+        "support_level": "untriaged"
+      }
     },
     "support_level": "experimental"
   },
@@ -1050,7 +959,17 @@
     },
     "support_level": "stable"
   },
-  "DOMCoreException": {
+  "DOMError": {
+    "comment": "http://www.w3.org/TR/dom/#interface-domerror",
+    "members": {
+      "message": {
+        "support_level": "untriaged"
+      },
+      "name": {}
+    },
+    "support_level": "stable"
+  },
+  "DOMException": {
     "comment": "http://www.w3.org/TR/dom/#domexception (Should be DOMException)",
     "dart_action": "unstable",
     "members": {
@@ -1165,13 +1084,6 @@
     },
     "support_level": "stable"
   },
-  "DOMError": {
-    "comment": "http://www.w3.org/TR/dom/#interface-domerror",
-    "members": {
-      "name": {}
-    },
-    "support_level": "stable"
-  },
   "DOMFileSystem": {
     "comment": "http://www.w3.org/TR/file-system-api/",
     "members": {
@@ -1201,16 +1113,6 @@
     },
     "support_level": "stable"
   },
-  "DOMNamedFlowCollection": {
-    "comment": "http://dev.w3.org/csswg/css-regions/#dom-named-flow-collection",
-    "members": {
-      "__getter__": {},
-      "item": {},
-      "length": {},
-      "namedItem": {}
-    },
-    "support_level": "experimental"
-  },
   "DOMParser": {
     "members": {
       "DOMParser": {},
@@ -1218,16 +1120,6 @@
     },
     "support_level": "stable"
   },
-  "DOMPoint": {
-    "comment": "http://developer.apple.com/library/safari/#documentation/DataManagement/Reference/DOMWindowAdditionsReference/DOMWindowAdditions/DOMWindowAdditions.html",
-    "members": {
-      "DOMPoint": {},
-      "_DomPoint": {},
-      "x": {},
-      "y": {}
-    },
-    "support_level": "nonstandard"
-  },
   "DOMSettableTokenList": {
     "comment": "http://dev.w3.org/html5/spec-LC/common-dom-interfaces.html#domsettabletokenlist-0",
     "members": {
@@ -1265,325 +1157,6 @@
     },
     "support_level": "stable"
   },
-  "Window": {
-    "members": {
-      "CSS": {
-        "comment": "http://www.w3.org/TR/css3-conditional/#the-css-interface"
-      },
-      "PERSISTENT": {
-        "comment": "http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem",
-        "support_level": "experimental"
-      },
-      "TEMPORARY": {
-        "comment": "http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem",
-        "support_level": "experimental"
-      },
-      "__getter__": {},
-      "addEventListener": {},
-      "alert": {},
-      "applicationCache": {},
-      "atob": {},
-      "blur": {
-        "dart_action": "suppress",
-        "support_level": "deprecated"
-      },
-      "btoa": {},
-      "cancelAnimationFrame": {},
-      "captureEvents": {
-        "comment": "http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-flow-capture",
-        "dart_action": "suppress",
-        "support_level": "deprecated"
-      },
-      "clearInterval": {},
-      "clearTimeout": {},
-      "clientInformation": {
-        "support_level": "nonstandard"
-      },
-      "close": {},
-      "closed": {},
-      "confirm": {},
-      "console": {},
-      "crypto": {
-        "comment": "http://www.w3.org/TR/WebCryptoAPI/",
-        "support_level": "experimental"
-      },
-      "defaultStatus": {},
-      "defaultstatus": {
-        "support_level": "nonstandard"
-      },
-      "devicePixelRatio": {
-        "comment": "http://www.quirksmode.org/blog/archives/2012/06/devicepixelrati.html",
-        "support_level": "nonstandard"
-      },
-      "dispatchEvent": {},
-      "document": {},
-      "event": {
-        "dart_action": "suppress",
-        "support_level": "deprecated"
-      },
-      "find": {
-        "support_level": "nonstandard"
-      },
-      "focus": {
-        "dart_action": "suppress",
-        "support_level": "deprecated"
-      },
-      "frameElement": {},
-      "frames": {},
-      "getComputedStyle": {},
-      "getMatchedCSSRules": {
-        "support_level": "nonstandard"
-      },
-      "getSelection": {},
-      "history": {},
-      "indexedDB": {},
-      "innerHeight": {},
-      "innerWidth": {},
-      "length": {
-        "dart_action": "suppress",
-        "support_level": "deprecated"
-      },
-      "localStorage": {},
-      "location": {},
-      "locationbar": {},
-      "matchMedia": {},
-      "menubar": {},
-      "moveBy": {},
-      "moveTo": {},
-      "name": {},
-      "navigator": {},
-      "offscreenBuffering": {
-        "support_level": "nonstandard"
-      },
-      "onDOMContentLoaded": {},
-      "onabort": {},
-      "onbeforeunload": {},
-      "onblur": {},
-      "oncanplay": {},
-      "oncanplaythrough": {},
-      "onchange": {},
-      "onclick": {},
-      "oncontextmenu": {},
-      "ondblclick": {},
-      "ondevicemotion": {
-        "comment": "http://dev.w3.org/geo/api/spec-source-orientation.html#devicemotion",
-        "support_level": "experimental"
-      },
-      "ondeviceorientation": {
-        "comment": "http://dev.w3.org/geo/api/spec-source-orientation.html#devicemotion",
-        "support_level": "experimental"
-      },
-      "ondrag": {},
-      "ondragend": {},
-      "ondragenter": {},
-      "ondragleave": {},
-      "ondragover": {},
-      "ondragstart": {},
-      "ondrop": {},
-      "ondurationchange": {},
-      "onemptied": {},
-      "onended": {},
-      "onerror": {},
-      "onfocus": {},
-      "onhashchange": {},
-      "oninput": {},
-      "oninvalid": {
-        "comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/section-index.html#attributes-1"
-      },
-      "onkeydown": {},
-      "onkeypress": {},
-      "onkeyup": {},
-      "onload": {},
-      "onloadeddata": {},
-      "onloadedmetadata": {},
-      "onloadstart": {},
-      "onmessage": {},
-      "onmousedown": {},
-      "onmousemove": {},
-      "onmouseout": {},
-      "onmouseover": {},
-      "onmouseup": {},
-      "onmousewheel": {},
-      "onoffline": {},
-      "ononline": {},
-      "onpagehide": {},
-      "onpageshow": {},
-      "onpause": {},
-      "onplay": {},
-      "onplaying": {},
-      "onpopstate": {},
-      "onprogress": {},
-      "onratechange": {},
-      "onreset": {},
-      "onresize": {},
-      "onscroll": {},
-      "onsearch": {
-        "comment": "http://www.w3.org/TR/html-markup/input.search.html",
-        "support_level": "experimental"
-      },
-      "onseeked": {},
-      "onseeking": {},
-      "onselect": {},
-      "onstalled": {},
-      "onstorage": {},
-      "onsubmit": {},
-      "onsuspend": {},
-      "ontimeupdate": {},
-      "ontouchcancel": {
-        "comment": "http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features",
-        "support_level": "experimental"
-      },
-      "ontouchend": {
-        "comment": "http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features",
-        "support_level": "experimental"
-      },
-      "ontouchmove": {
-        "comment": "http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features",
-        "support_level": "experimental"
-      },
-      "ontouchstart": {
-        "comment": "http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features",
-        "support_level": "experimental"
-      },
-      "ontransitionend": {},
-      "onunload": {},
-      "onvolumechange": {},
-      "onwaiting": {},
-      "onwebkitAnimationEnd": {
-        "support_level": "experimental"
-      },
-      "onwebkitAnimationIteration": {
-        "support_level": "experimental"
-      },
-      "onwebkitAnimationStart": {
-        "support_level": "experimental"
-      },
-      "onwebkitTransitionEnd": {
-        "support_level": "deprecated"
-      },
-      "onwebkitanimationend": {
-        "support_level": "experimental"
-      },
-      "onwebkitanimationiteration": {
-        "support_level": "experimental"
-      },
-      "onwebkitanimationstart": {
-        "support_level": "experimental"
-      },
-      "onwebkittransitionend": {
-        "support_level": "deprecated"
-      },
-      "open": {},
-      "openDatabase": {
-        "comment": "http://www.w3.org/TR/webdatabase/",
-        "dart_action": "experimental",
-        "support_level": "deprecated"
-      },
-      "opener": {},
-      "outerHeight": {},
-      "outerWidth": {},
-      "pagePopupController": {
-        "dart_action": "suppress",
-        "support_level": "nonstandard"
-      },
-      "pageXOffset": {},
-      "pageYOffset": {},
-      "parent": {},
-      "performance": {
-        "comment": "http://www.w3.org/TR/navigation-timing/#sec-window.performance-attribute"
-      },
-      "personalbar": {
-        "comment": "https://developer.mozilla.org/en-US/docs/DOM/window.personalbar",
-        "dart_action": "suppress",
-        "support_level": "deprecated"
-      },
-      "postMessage": {},
-      "print": {},
-      "prompt": {},
-      "releaseEvents": {
-        "comment": "http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-flow-capture",
-        "dart_action": "suppress",
-        "support_level": "deprecated"
-      },
-      "removeEventListener": {},
-      "requestAnimationFrame": {},
-      "resizeBy": {},
-      "resizeTo": {},
-      "screen": {},
-      "screenLeft": {},
-      "screenTop": {},
-      "screenX": {},
-      "screenY": {},
-      "scroll": {},
-      "scrollBy": {},
-      "scrollTo": {},
-      "scrollX": {},
-      "scrollY": {},
-      "scrollbars": {},
-      "self": {},
-      "sessionStorage": {},
-      "setInterval": {},
-      "setTimeout": {},
-      "showModalDialog": {},
-      "speechSynthesis": {
-        "comment": "https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section",
-        "support_level": "experimental"
-      },
-      "status": {},
-      "statusbar": {},
-      "stop": {},
-      "styleMedia": {
-        "comment": "http://developer.apple.com/library/safari/#documentation/SafariDOMAdditions/Reference/StyleMedia/StyleMedia/StyleMedia.html",
-        "dart_action": "experimental",
-        "support_level": "nonstandard"
-      },
-      "toString": {},
-      "toolbar": {},
-      "top": {},
-      "webkitCancelAnimationFrame": {
-        "support_level": "experimental"
-      },
-      "webkitCancelRequestAnimationFrame": {
-        "support_level": "experimental"
-      },
-      "webkitConvertPointFromNodeToPage": {
-        "comment": "http://developer.apple.com/library/safari/#documentation/DataManagement/Reference/DOMWindowAdditionsReference/DOMWindowAdditions/DOMWindowAdditions.html",
-        "support_level": "experimental"
-      },
-      "webkitConvertPointFromPageToNode": {
-        "comment": "http://developer.apple.com/library/safari/#documentation/DataManagement/Reference/DOMWindowAdditionsReference/DOMWindowAdditions/DOMWindowAdditions.html",
-        "support_level": "experimental"
-      },
-      "webkitIndexedDB": {
-        "comment": "http://www.w3.org/TR/IndexedDB/#idl-def-IDBEnvironment",
-        "support_level": "experimental"
-      },
-      "webkitNotifications": {
-        "comment": "https://plus.sandbox.google.com/u/0/+GoogleChromeDevelopers/posts/8vWo8hq4pDm?e=Showroom",
-        "dart_action": "suppress",
-        "support_level": "deprecated"
-      },
-      "webkitRequestAnimationFrame": {
-        "dart_action": "suppress",
-        "support_level": "deprecated"
-      },
-      "webkitRequestFileSystem": {
-        "comment": "http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem",
-        "support_level": "experimental"
-      },
-      "webkitResolveLocalFileSystemURL": {
-        "comment": "http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem",
-        "support_level": "experimental"
-      },
-      "webkitStorageInfo": {
-        "comment": "http://www.w3.org/TR/file-system-api/",
-        "dart_action": "suppress",
-        "support_level": "deprecated"
-      },
-      "window": {}
-    },
-    "support_level": "stable"
-  },
   "DataTransferItem": {
     "comment": "http://www.w3.org/TR/2011/WD-html5-20110113/dnd.html#the-datatransferitem-interface",
     "members": {
@@ -1832,6 +1405,9 @@
         "support_level": "experimental"
       },
       "createTreeWalker": {},
+      "currentScript": {
+        "support_level": "untriaged"
+      },
       "defaultCharset": {
         "dart_action": "suppress",
         "support_level": "nonstandard"
@@ -2130,48 +1706,6 @@
     },
     "support_level": "experimental"
   },
-  "EXTDrawBuffers": {
-    "comment": "http://www.khronos.org/registry/webgl/specs/latest/",
-    "dart_action": "experimental",
-    "members": {
-      "COLOR_ATTACHMENT0_EXT": {},
-      "COLOR_ATTACHMENT10_EXT": {},
-      "COLOR_ATTACHMENT11_EXT": {},
-      "COLOR_ATTACHMENT12_EXT": {},
-      "COLOR_ATTACHMENT13_EXT": {},
-      "COLOR_ATTACHMENT14_EXT": {},
-      "COLOR_ATTACHMENT15_EXT": {},
-      "COLOR_ATTACHMENT1_EXT": {},
-      "COLOR_ATTACHMENT2_EXT": {},
-      "COLOR_ATTACHMENT3_EXT": {},
-      "COLOR_ATTACHMENT4_EXT": {},
-      "COLOR_ATTACHMENT5_EXT": {},
-      "COLOR_ATTACHMENT6_EXT": {},
-      "COLOR_ATTACHMENT7_EXT": {},
-      "COLOR_ATTACHMENT8_EXT": {},
-      "COLOR_ATTACHMENT9_EXT": {},
-      "DRAW_BUFFER0_EXT": {},
-      "DRAW_BUFFER10_EXT": {},
-      "DRAW_BUFFER11_EXT": {},
-      "DRAW_BUFFER12_EXT": {},
-      "DRAW_BUFFER13_EXT": {},
-      "DRAW_BUFFER14_EXT": {},
-      "DRAW_BUFFER15_EXT": {},
-      "DRAW_BUFFER1_EXT": {},
-      "DRAW_BUFFER2_EXT": {},
-      "DRAW_BUFFER3_EXT": {},
-      "DRAW_BUFFER4_EXT": {},
-      "DRAW_BUFFER5_EXT": {},
-      "DRAW_BUFFER6_EXT": {},
-      "DRAW_BUFFER7_EXT": {},
-      "DRAW_BUFFER8_EXT": {},
-      "DRAW_BUFFER9_EXT": {},
-      "MAX_COLOR_ATTACHMENTS_EXT": {},
-      "MAX_DRAW_BUFFERS_EXT": {},
-      "drawBuffersEXT": {}
-    },
-    "support_level": "stable"
-  },
   "EXTFragDepth": {
     "comment": "http://www.khronos.org/registry/webgl/extensions/EXT_frag_depth/",
     "members": {},
@@ -5188,6 +4722,9 @@
     "comment": "http://www.w3.org/TR/IndexedDB/#idl-def-IDBVersionChangeEvent",
     "dart_action": "unstable",
     "members": {
+      "dataLoss": {
+        "support_level": "untriaged"
+      },
       "newVersion": {},
       "oldVersion": {}
     },
@@ -5335,6 +4872,14 @@
     },
     "support_level": "experimental"
   },
+  "MIDIAccessPromise": {
+    "members": {
+      "then": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "MIDIConnectionEvent": {
     "comment": "http://webaudio.github.io/web-midi-api/#midiconnectionevent-interface",
     "members": {
@@ -5384,6 +4929,10 @@
     },
     "support_level": "experimental"
   },
+  "MIDISuccessCallback": {
+    "members": {},
+    "support_level": "untriaged"
+  },
   "MediaController": {
     "comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#mediacontroller",
     "members": {
@@ -5534,6 +5083,24 @@
     },
     "support_level": "stable"
   },
+  "MediaSource": {
+    "comment": "https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#mediasource",
+    "members": {
+      "MediaSource": {},
+      "activeSourceBuffers": {},
+      "addEventListener": {},
+      "addSourceBuffer": {},
+      "dispatchEvent": {},
+      "duration": {},
+      "endOfStream": {},
+      "isTypeSupported": {},
+      "readyState": {},
+      "removeEventListener": {},
+      "removeSourceBuffer": {},
+      "sourceBuffers": {}
+    },
+    "support_level": "experimental"
+  },
   "MediaStream": {
     "comment": "http://dev.w3.org/2011/webrtc/editor/getusermedia.html#mediastream",
     "members": {
@@ -5585,6 +5152,9 @@
       "addEventListener": {},
       "dispatchEvent": {},
       "enabled": {},
+      "getSources": {
+        "support_level": "untriaged"
+      },
       "id": {},
       "kind": {},
       "label": {},
@@ -5603,6 +5173,10 @@
     },
     "support_level": "experimental"
   },
+  "MediaStreamTrackSourcesCallback": {
+    "members": {},
+    "support_level": "untriaged"
+  },
   "MemoryInfo": {
     "dart_action": "experimental",
     "members": {
@@ -5788,21 +5362,6 @@
     },
     "support_level": "stable"
   },
-  "NamedFlow": {
-    "comment": "http://www.w3.org/TR/css3-regions/#dom-named-flow-collection",
-    "members": {
-      "addEventListener": {},
-      "dispatchEvent": {},
-      "firstEmptyRegionIndex": {},
-      "getContent": {},
-      "getRegions": {},
-      "getRegionsByContent": {},
-      "name": {},
-      "overset": {},
-      "removeEventListener": {}
-    },
-    "support_level": "experimental"
-  },
   "NamedNodeMap": {
     "comment": "http://dom.spec.whatwg.org/#namednodemap",
     "dart_action": "suppress",
@@ -5885,6 +5444,9 @@
         "comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#navigatorcontentutils",
         "dart_action": "unstable"
       },
+      "requestMIDIAccess": {
+        "support_level": "untriaged"
+      },
       "userAgent": {
         "comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#navigatorid"
       },
@@ -6090,6 +5652,9 @@
   "NodeList": {
     "comment": "http://dom.spec.whatwg.org/#nodelist",
     "members": {
+      "__getter__": {
+        "support_level": "untriaged"
+      },
       "item": {},
       "length": {}
     },
@@ -6351,6 +5916,23 @@
     },
     "support_level": "experimental"
   },
+  "ParentNode": {
+    "members": {
+      "childElementCount": {
+        "support_level": "untriaged"
+      },
+      "children": {
+        "support_level": "untriaged"
+      },
+      "firstElementChild": {
+        "support_level": "untriaged"
+      },
+      "lastElementChild": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "Path": {
     "comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#path-objects",
     "members": {
@@ -6597,6 +6179,14 @@
     },
     "support_level": "stable"
   },
+  "Promise": {
+    "members": {},
+    "support_level": "untriaged"
+  },
+  "PromiseResolver": {
+    "members": {},
+    "support_level": "untriaged"
+  },
   "RGBColor": {
     "comment": "http://dev.w3.org/csswg/cssom/",
     "dart_action": "suppress",
@@ -10140,6 +9730,9 @@
       "getElementsByTagNameNS": {},
       "getSelection": {},
       "innerHTML": {},
+      "olderShadowRoot": {
+        "support_level": "untriaged"
+      },
       "resetStyleInheritance": {}
     },
     "support_level": "experimental"
@@ -10161,6 +9754,61 @@
     },
     "support_level": "nonstandard"
   },
+  "SourceBuffer": {
+    "comment": "https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#sourcebuffer",
+    "members": {
+      "abort": {},
+      "addEventListener": {
+        "support_level": "untriaged"
+      },
+      "append": {
+        "support_level": "nonstandard"
+      },
+      "appendBuffer": {
+        "support_level": "untriaged"
+      },
+      "buffered": {},
+      "dispatchEvent": {
+        "support_level": "untriaged"
+      },
+      "removeEventListener": {
+        "support_level": "untriaged"
+      },
+      "timestampOffset": {},
+      "updating": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "experimental"
+  },
+  "SourceBufferList": {
+    "comment": "https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#sourcebufferlist",
+    "members": {
+      "addEventListener": {},
+      "dispatchEvent": {},
+      "item": {},
+      "length": {},
+      "removeEventListener": {}
+    },
+    "support_level": "experimental"
+  },
+  "SourceInfo": {
+    "members": {
+      "facing": {
+        "support_level": "untriaged"
+      },
+      "id": {
+        "support_level": "untriaged"
+      },
+      "kind": {
+        "support_level": "untriaged"
+      },
+      "label": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "SpeechGrammar": {
     "comment": "https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#dfn-speechgrammar",
     "members": {
@@ -10398,6 +10046,14 @@
     },
     "support_level": "experimental"
   },
+  "Stream": {
+    "members": {
+      "type": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "StringCallback": {
     "comment": "http://www.w3.org/TR/2011/WD-html5-20110113/dnd.html#the-datatransferitem-interface",
     "members": {
@@ -10436,6 +10092,10 @@
     },
     "support_level": "stable"
   },
+  "SubtleCrypto": {
+    "members": {},
+    "support_level": "untriaged"
+  },
   "Text": {
     "comment": "http://dom.spec.whatwg.org/#interface-text",
     "members": {
@@ -10710,6 +10370,9 @@
   "URL": {
     "comment": "http://www.w3.org/TR/FileAPI/#URL-object",
     "members": {
+      "_createObjectUrlFromWebKitMediaSource": {
+        "support_level": "untriaged"
+      },
       "createObjectURL": {},
       "createObjectUrlFromBlob": {},
       "createObjectUrlFromSource": {},
@@ -10886,6 +10549,48 @@
     },
     "support_level": "experimental"
   },
+  "WebGLDrawBuffers": {
+    "comment": "http://www.khronos.org/registry/webgl/specs/latest/",
+    "dart_action": "experimental",
+    "members": {
+      "COLOR_ATTACHMENT0_WEBGL": {},
+      "COLOR_ATTACHMENT10_WEBGL": {},
+      "COLOR_ATTACHMENT11_WEBGL": {},
+      "COLOR_ATTACHMENT12_WEBGL": {},
+      "COLOR_ATTACHMENT13_WEBGL": {},
+      "COLOR_ATTACHMENT14_WEBGL": {},
+      "COLOR_ATTACHMENT15_WEBGL": {},
+      "COLOR_ATTACHMENT1_WEBGL": {},
+      "COLOR_ATTACHMENT2_WEBGL": {},
+      "COLOR_ATTACHMENT3_WEBGL": {},
+      "COLOR_ATTACHMENT4_WEBGL": {},
+      "COLOR_ATTACHMENT5_WEBGL": {},
+      "COLOR_ATTACHMENT6_WEBGL": {},
+      "COLOR_ATTACHMENT7_WEBGL": {},
+      "COLOR_ATTACHMENT8_WEBGL": {},
+      "COLOR_ATTACHMENT9_WEBGL": {},
+      "DRAW_BUFFER0_WEBGL": {},
+      "DRAW_BUFFER10_WEBGL": {},
+      "DRAW_BUFFER11_WEBGL": {},
+      "DRAW_BUFFER12_WEBGL": {},
+      "DRAW_BUFFER13_WEBGL": {},
+      "DRAW_BUFFER14_WEBGL": {},
+      "DRAW_BUFFER15_WEBGL": {},
+      "DRAW_BUFFER1_WEBGL": {},
+      "DRAW_BUFFER2_WEBGL": {},
+      "DRAW_BUFFER3_WEBGL": {},
+      "DRAW_BUFFER4_WEBGL": {},
+      "DRAW_BUFFER5_WEBGL": {},
+      "DRAW_BUFFER6_WEBGL": {},
+      "DRAW_BUFFER7_WEBGL": {},
+      "DRAW_BUFFER8_WEBGL": {},
+      "DRAW_BUFFER9_WEBGL": {},
+      "MAX_COLOR_ATTACHMENTS_WEBGL": {},
+      "MAX_DRAW_BUFFERS_WEBGL": {},
+      "drawBuffersWEBGL": {}
+    },
+    "support_level": "stable"
+  },
   "WebGLFramebuffer": {
     "comment": "http://www.khronos.org/registry/webgl/specs/latest/#5.5",
     "dart_action": "unstable",
@@ -11407,47 +11112,198 @@
     "members": {},
     "support_level": "experimental"
   },
+  "WebKitAnimationEvent": {
+    "comment": "http://www.w3.org/TR/css3-animations/#AnimationEvent-interface",
+    "members": {
+      "animationName": {},
+      "elapsedTime": {}
+    },
+    "support_level": "stable"
+  },
+  "WebKitCSSFilterRule": {
+    "comment": "http://www.w3.org/TR/filter-effects/",
+    "members": {
+      "style": {}
+    },
+    "support_level": "experimental"
+  },
+  "WebKitCSSFilterValue": {
+    "comment": "http://dev.w3.org/csswg/cssom/",
+    "dart_action": "suppress",
+    "members": {
+      "CSS_FILTER_BLUR": {},
+      "CSS_FILTER_BRIGHTNESS": {},
+      "CSS_FILTER_CONTRAST": {},
+      "CSS_FILTER_CUSTOM": {},
+      "CSS_FILTER_DROP_SHADOW": {},
+      "CSS_FILTER_GRAYSCALE": {},
+      "CSS_FILTER_HUE_ROTATE": {},
+      "CSS_FILTER_INVERT": {},
+      "CSS_FILTER_OPACITY": {},
+      "CSS_FILTER_REFERENCE": {},
+      "CSS_FILTER_SATURATE": {},
+      "CSS_FILTER_SEPIA": {},
+      "__getter__": {},
+      "operationType": {}
+    },
+    "support_level": "deprecated"
+  },
+  "WebKitCSSKeyframeRule": {
+    "comment": "http://www.w3.org/TR/css3-animations/#CSSKeyframeRule-interface",
+    "members": {
+      "keyText": {},
+      "style": {}
+    },
+    "support_level": "experimental"
+  },
+  "WebKitCSSKeyframesRule": {
+    "comment": "http://www.w3.org/TR/css3-animations/#csskeyframesrule",
+    "members": {
+      "__getter__": {},
+      "cssRules": {},
+      "deleteRule": {},
+      "findRule": {},
+      "insertRule": {},
+      "name": {}
+    },
+    "support_level": "experimental"
+  },
+  "WebKitCSSMatrix": {
+    "comment": "http://dev.w3.org/csswg/cssom/",
+    "dart_action": "suppress",
+    "members": {
+      "WebKitCSSMatrix": {},
+      "a": {},
+      "b": {},
+      "c": {},
+      "d": {},
+      "e": {},
+      "f": {},
+      "inverse": {},
+      "m11": {},
+      "m12": {},
+      "m13": {},
+      "m14": {},
+      "m21": {},
+      "m22": {},
+      "m23": {},
+      "m24": {},
+      "m31": {},
+      "m32": {},
+      "m33": {},
+      "m34": {},
+      "m41": {},
+      "m42": {},
+      "m43": {},
+      "m44": {},
+      "multiply": {},
+      "rotate": {},
+      "rotateAxisAngle": {},
+      "scale": {},
+      "setMatrixValue": {},
+      "skewX": {},
+      "skewY": {},
+      "toString": {},
+      "translate": {}
+    },
+    "support_level": "deprecated"
+  },
+  "WebKitCSSMixFunctionValue": {
+    "comment": "http://dev.w3.org/csswg/cssom/",
+    "dart_action": "suppress",
+    "members": {},
+    "support_level": "deprecated"
+  },
+  "WebKitCSSRegionRule": {
+    "comment": "http://dev.w3.org/csswg/css-regions/#region-style-rule-interface",
+    "members": {
+      "cssRules": {}
+    },
+    "support_level": "experimental"
+  },
+  "WebKitCSSTransformValue": {
+    "comment": "http://dev.w3.org/csswg/cssom/",
+    "dart_action": "suppress",
+    "members": {
+      "CSS_MATRIX": {},
+      "CSS_MATRIX3D": {},
+      "CSS_PERSPECTIVE": {},
+      "CSS_ROTATE": {},
+      "CSS_ROTATE3D": {},
+      "CSS_ROTATEX": {},
+      "CSS_ROTATEY": {},
+      "CSS_ROTATEZ": {},
+      "CSS_SCALE": {},
+      "CSS_SCALE3D": {},
+      "CSS_SCALEX": {},
+      "CSS_SCALEY": {},
+      "CSS_SCALEZ": {},
+      "CSS_SKEW": {},
+      "CSS_SKEWX": {},
+      "CSS_SKEWY": {},
+      "CSS_TRANSLATE": {},
+      "CSS_TRANSLATE3D": {},
+      "CSS_TRANSLATEX": {},
+      "CSS_TRANSLATEY": {},
+      "CSS_TRANSLATEZ": {},
+      "__getter__": {},
+      "operationType": {}
+    },
+    "support_level": "deprecated"
+  },
   "WebKitMediaSource": {
-    "comment": "https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#mediasource",
     "members": {
-      "WebKitMediaSource": {},
-      "activeSourceBuffers": {},
-      "addEventListener": {},
-      "addSourceBuffer": {},
-      "dispatchEvent": {},
-      "duration": {},
-      "endOfStream": {},
-      "isTypeSupported": {},
-      "readyState": {},
-      "removeEventListener": {},
-      "removeSourceBuffer": {},
-      "sourceBuffers": {}
+      "WebKitMediaSource": {}
     },
-    "support_level": "experimental"
+    "support_level": "untriaged"
   },
-  "WebKitSourceBuffer": {
-    "comment": "https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#sourcebuffer",
-    "members": {
-      "abort": {},
-      "append": {
-        "support_level": "nonstandard"
-      },
-      "buffered": {},
-      "timestampOffset": {}
-    },
-    "support_level": "experimental"
-  },
-  "WebKitSourceBufferList": {
-    "comment": "https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#sourcebufferlist",
+  "WebKitNamedFlow": {
+    "comment": "http://www.w3.org/TR/css3-regions/#dom-named-flow-collection",
     "members": {
       "addEventListener": {},
       "dispatchEvent": {},
-      "item": {},
-      "length": {},
+      "firstEmptyRegionIndex": {},
+      "getContent": {},
+      "getRegions": {},
+      "getRegionsByContent": {},
+      "name": {},
+      "overset": {},
       "removeEventListener": {}
     },
     "support_level": "experimental"
   },
+  "WebKitNamedFlowCollection": {
+    "comment": "http://dev.w3.org/csswg/css-regions/#dom-named-flow-collection",
+    "members": {
+      "__getter__": {},
+      "item": {},
+      "length": {},
+      "namedItem": {}
+    },
+    "support_level": "experimental"
+  },
+  "WebKitPoint": {
+    "comment": "http://developer.apple.com/library/safari/#documentation/DataManagement/Reference/DOMWindowAdditionsReference/DOMWindowAdditions/DOMWindowAdditions.html",
+    "members": {
+      "WebKitPoint": {},
+      "_DomPoint": {},
+      "x": {},
+      "y": {}
+    },
+    "support_level": "nonstandard"
+  },
+  "WebKitSourceBuffer": {
+    "members": {},
+    "support_level": "untriaged"
+  },
+  "WebKitSourceBufferList": {
+    "members": {
+      "item": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "WebSocket": {
     "comment": "http://www.w3.org/TR/websockets/#the-websocket-interface",
     "dart_action": "unstable",
@@ -11508,11 +11364,350 @@
     },
     "support_level": "stable"
   },
+  "Window": {
+    "members": {
+      "CSS": {
+        "comment": "http://www.w3.org/TR/css3-conditional/#the-css-interface"
+      },
+      "PERSISTENT": {
+        "comment": "http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem",
+        "support_level": "experimental"
+      },
+      "TEMPORARY": {
+        "comment": "http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem",
+        "support_level": "experimental"
+      },
+      "__getter__": {},
+      "addEventListener": {},
+      "alert": {},
+      "applicationCache": {},
+      "atob": {},
+      "blur": {
+        "dart_action": "suppress",
+        "support_level": "deprecated"
+      },
+      "btoa": {},
+      "cancelAnimationFrame": {},
+      "captureEvents": {
+        "comment": "http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-flow-capture",
+        "dart_action": "suppress",
+        "support_level": "deprecated"
+      },
+      "clearInterval": {},
+      "clearTimeout": {},
+      "clientInformation": {
+        "support_level": "nonstandard"
+      },
+      "close": {},
+      "closed": {},
+      "confirm": {},
+      "console": {},
+      "crypto": {
+        "comment": "http://www.w3.org/TR/WebCryptoAPI/",
+        "support_level": "experimental"
+      },
+      "defaultStatus": {},
+      "defaultstatus": {
+        "support_level": "nonstandard"
+      },
+      "devicePixelRatio": {
+        "comment": "http://www.quirksmode.org/blog/archives/2012/06/devicepixelrati.html",
+        "support_level": "nonstandard"
+      },
+      "dispatchEvent": {},
+      "document": {},
+      "event": {
+        "dart_action": "suppress",
+        "support_level": "deprecated"
+      },
+      "find": {
+        "support_level": "nonstandard"
+      },
+      "focus": {
+        "dart_action": "suppress",
+        "support_level": "deprecated"
+      },
+      "frameElement": {},
+      "frames": {},
+      "getComputedStyle": {},
+      "getMatchedCSSRules": {
+        "support_level": "nonstandard"
+      },
+      "getSelection": {},
+      "history": {},
+      "indexedDB": {},
+      "innerHeight": {},
+      "innerWidth": {},
+      "length": {
+        "dart_action": "suppress",
+        "support_level": "deprecated"
+      },
+      "localStorage": {},
+      "location": {},
+      "locationbar": {},
+      "matchMedia": {},
+      "menubar": {},
+      "moveBy": {},
+      "moveTo": {},
+      "name": {},
+      "navigator": {},
+      "offscreenBuffering": {
+        "support_level": "nonstandard"
+      },
+      "onDOMContentLoaded": {},
+      "onabort": {},
+      "onbeforeunload": {},
+      "onblur": {},
+      "oncanplay": {},
+      "oncanplaythrough": {},
+      "onchange": {},
+      "onclick": {},
+      "oncontextmenu": {},
+      "ondblclick": {},
+      "ondevicemotion": {
+        "comment": "http://dev.w3.org/geo/api/spec-source-orientation.html#devicemotion",
+        "support_level": "experimental"
+      },
+      "ondeviceorientation": {
+        "comment": "http://dev.w3.org/geo/api/spec-source-orientation.html#devicemotion",
+        "support_level": "experimental"
+      },
+      "ondrag": {},
+      "ondragend": {},
+      "ondragenter": {},
+      "ondragleave": {},
+      "ondragover": {},
+      "ondragstart": {},
+      "ondrop": {},
+      "ondurationchange": {},
+      "onemptied": {},
+      "onended": {},
+      "onerror": {},
+      "onfocus": {},
+      "onhashchange": {},
+      "oninput": {},
+      "oninvalid": {
+        "comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/section-index.html#attributes-1"
+      },
+      "onkeydown": {},
+      "onkeypress": {},
+      "onkeyup": {},
+      "onload": {},
+      "onloadeddata": {},
+      "onloadedmetadata": {},
+      "onloadstart": {},
+      "onmessage": {},
+      "onmousedown": {},
+      "onmousemove": {},
+      "onmouseout": {},
+      "onmouseover": {},
+      "onmouseup": {},
+      "onmousewheel": {},
+      "onoffline": {},
+      "ononline": {},
+      "onpagehide": {},
+      "onpageshow": {},
+      "onpause": {},
+      "onplay": {},
+      "onplaying": {},
+      "onpopstate": {},
+      "onprogress": {},
+      "onratechange": {},
+      "onreset": {},
+      "onresize": {},
+      "onscroll": {},
+      "onsearch": {
+        "comment": "http://www.w3.org/TR/html-markup/input.search.html",
+        "support_level": "experimental"
+      },
+      "onseeked": {},
+      "onseeking": {},
+      "onselect": {},
+      "onstalled": {},
+      "onstorage": {},
+      "onsubmit": {},
+      "onsuspend": {},
+      "ontimeupdate": {},
+      "ontouchcancel": {
+        "comment": "http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features",
+        "support_level": "experimental"
+      },
+      "ontouchend": {
+        "comment": "http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features",
+        "support_level": "experimental"
+      },
+      "ontouchmove": {
+        "comment": "http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features",
+        "support_level": "experimental"
+      },
+      "ontouchstart": {
+        "comment": "http://www.w3.org/TR/touch-events/, http://www.chromestatus.com/features",
+        "support_level": "experimental"
+      },
+      "ontransitionend": {},
+      "onunload": {},
+      "onvolumechange": {},
+      "onwaiting": {},
+      "onwebkitAnimationEnd": {
+        "support_level": "experimental"
+      },
+      "onwebkitAnimationIteration": {
+        "support_level": "experimental"
+      },
+      "onwebkitAnimationStart": {
+        "support_level": "experimental"
+      },
+      "onwebkitTransitionEnd": {
+        "support_level": "deprecated"
+      },
+      "onwebkitanimationend": {
+        "support_level": "experimental"
+      },
+      "onwebkitanimationiteration": {
+        "support_level": "experimental"
+      },
+      "onwebkitanimationstart": {
+        "support_level": "experimental"
+      },
+      "onwebkittransitionend": {
+        "support_level": "deprecated"
+      },
+      "open": {},
+      "openDatabase": {
+        "comment": "http://www.w3.org/TR/webdatabase/",
+        "dart_action": "experimental",
+        "support_level": "deprecated"
+      },
+      "opener": {},
+      "outerHeight": {},
+      "outerWidth": {},
+      "pagePopupController": {
+        "dart_action": "suppress",
+        "support_level": "nonstandard"
+      },
+      "pageXOffset": {},
+      "pageYOffset": {},
+      "parent": {},
+      "performance": {
+        "comment": "http://www.w3.org/TR/navigation-timing/#sec-window.performance-attribute"
+      },
+      "personalbar": {
+        "comment": "https://developer.mozilla.org/en-US/docs/DOM/window.personalbar",
+        "dart_action": "suppress",
+        "support_level": "deprecated"
+      },
+      "postMessage": {},
+      "print": {},
+      "prompt": {},
+      "releaseEvents": {
+        "comment": "http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-flow-capture",
+        "dart_action": "suppress",
+        "support_level": "deprecated"
+      },
+      "removeEventListener": {},
+      "requestAnimationFrame": {},
+      "resizeBy": {},
+      "resizeTo": {},
+      "screen": {},
+      "screenLeft": {},
+      "screenTop": {},
+      "screenX": {},
+      "screenY": {},
+      "scroll": {},
+      "scrollBy": {},
+      "scrollTo": {},
+      "scrollX": {},
+      "scrollY": {},
+      "scrollbars": {},
+      "self": {},
+      "sessionStorage": {},
+      "setInterval": {},
+      "setTimeout": {},
+      "showModalDialog": {},
+      "speechSynthesis": {
+        "comment": "https://dvcs.w3.org/hg/speech-api/raw-file/tip/speechapi.html#tts-section",
+        "support_level": "experimental"
+      },
+      "status": {},
+      "statusbar": {},
+      "stop": {},
+      "styleMedia": {
+        "comment": "http://developer.apple.com/library/safari/#documentation/SafariDOMAdditions/Reference/StyleMedia/StyleMedia/StyleMedia.html",
+        "dart_action": "experimental",
+        "support_level": "nonstandard"
+      },
+      "toString": {},
+      "toolbar": {},
+      "top": {},
+      "webkitCancelAnimationFrame": {
+        "support_level": "experimental"
+      },
+      "webkitCancelRequestAnimationFrame": {
+        "support_level": "experimental"
+      },
+      "webkitConvertPointFromNodeToPage": {
+        "comment": "http://developer.apple.com/library/safari/#documentation/DataManagement/Reference/DOMWindowAdditionsReference/DOMWindowAdditions/DOMWindowAdditions.html",
+        "support_level": "experimental"
+      },
+      "webkitConvertPointFromPageToNode": {
+        "comment": "http://developer.apple.com/library/safari/#documentation/DataManagement/Reference/DOMWindowAdditionsReference/DOMWindowAdditions/DOMWindowAdditions.html",
+        "support_level": "experimental"
+      },
+      "webkitIndexedDB": {
+        "comment": "http://www.w3.org/TR/IndexedDB/#idl-def-IDBEnvironment",
+        "support_level": "experimental"
+      },
+      "webkitNotifications": {
+        "comment": "https://plus.sandbox.google.com/u/0/+GoogleChromeDevelopers/posts/8vWo8hq4pDm?e=Showroom",
+        "dart_action": "suppress",
+        "support_level": "deprecated"
+      },
+      "webkitRequestAnimationFrame": {
+        "dart_action": "suppress",
+        "support_level": "deprecated"
+      },
+      "webkitRequestFileSystem": {
+        "comment": "http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem",
+        "support_level": "experimental"
+      },
+      "webkitResolveLocalFileSystemURL": {
+        "comment": "http://www.w3.org/TR/file-system-api/#idl-def-LocalFileSystem",
+        "support_level": "experimental"
+      },
+      "webkitStorageInfo": {
+        "comment": "http://www.w3.org/TR/file-system-api/",
+        "dart_action": "suppress",
+        "support_level": "deprecated"
+      },
+      "window": {}
+    },
+    "support_level": "stable"
+  },
+  "WindowTimers": {
+    "members": {
+      "clearInterval": {
+        "support_level": "untriaged"
+      },
+      "clearTimeout": {
+        "support_level": "untriaged"
+      },
+      "setInterval": {
+        "support_level": "untriaged"
+      },
+      "setTimeout": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "Worker": {
     "comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html#worker",
     "dart_action": "experimental",
     "members": {
       "Worker": {},
+      "onerror": {
+        "support_level": "untriaged"
+      },
       "onmessage": {},
       "postMessage": {},
       "terminate": {}
@@ -11598,6 +11793,14 @@
     },
     "support_level": "stable"
   },
+  "WorkerCrypto": {
+    "members": {
+      "getRandomValues": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "WorkerLocation": {
     "comment": "http://www.whatwg.org/specs/web-apps/current-work/multipage/workers.html#workerlocation",
     "members": {
@@ -11659,6 +11862,14 @@
     },
     "support_level": "experimental"
   },
+  "WorkerPerformance": {
+    "members": {
+      "now": {
+        "support_level": "untriaged"
+      }
+    },
+    "support_level": "untriaged"
+  },
   "XMLHttpRequest": {
     "comment": "http://xhr.spec.whatwg.org/#interface-xmlhttprequest",
     "members": {
@@ -11697,6 +11908,9 @@
       "setRequestHeader": {},
       "status": {},
       "statusText": {},
+      "timeout": {
+        "support_level": "untriaged"
+      },
       "upload": {
         "dart_action": "unstable"
       },
diff --git a/tools/dom/idl/dart/dart.idl b/tools/dom/idl/dart/dart.idl
index 565b4b8..8c9035b 100644
--- a/tools/dom/idl/dart/dart.idl
+++ b/tools/dom/idl/dart/dart.idl
@@ -332,3 +332,6 @@
 
 [Supplemental]
 interface Window : EventTarget {};
+
+[Supplemental]
+interface AbstractWorker : EventTarget {};
diff --git a/tools/dom/scripts/dartmetadata.py b/tools/dom/scripts/dartmetadata.py
index 9069570..259b75b 100644
--- a/tools/dom/scripts/dartmetadata.py
+++ b/tools/dom/scripts/dartmetadata.py
@@ -376,7 +376,7 @@
 #   INTERFACE.MEMBER: annotation to be added to the member declaration
 _annotations = monitored.Dict('dartmetadata._annotations', {
   'CSSHostRule': _shadow_dom_annotations,
-  'CSSMatrix': _webkit_experimental_annotations,
+  'WebKitCSSMatrix': _webkit_experimental_annotations,
   'Crypto': _webkit_experimental_annotations,
   'Database': _web_sql_annotations,
   'DatabaseSync': _web_sql_annotations,
diff --git a/tools/dom/scripts/fremontcutbuilder.py b/tools/dom/scripts/fremontcutbuilder.py
index b888107..085e01b 100755
--- a/tools/dom/scripts/fremontcutbuilder.py
+++ b/tools/dom/scripts/fremontcutbuilder.py
@@ -17,13 +17,10 @@
 # for ENABLE_* flags defined in Chromium / Blink.
 # We list all ENABLE flags used in IDL in one of these two lists.
 FEATURE_DISABLED = [
-    'ENABLE_BATTERY_STATUS',
-    'ENABLE_CSS_DEVICE_ADAPTATION',
     'ENABLE_CUSTOM_SCHEME_HANDLER',
     'ENABLE_MEDIA_CAPTURE', # Only enabled on Android.
     'ENABLE_ORIENTATION_EVENTS', # Only enabled on Android.
     'ENABLE_WEBVTT_REGIONS',
-    'ENABLE_XHR_TIMEOUT',
 ]
 
 FEATURE_DEFINES = [
diff --git a/tools/dom/scripts/generator.py b/tools/dom/scripts/generator.py
index 8290433..f966029 100644
--- a/tools/dom/scripts/generator.py
+++ b/tools/dom/scripts/generator.py
@@ -17,14 +17,11 @@
     # TODO(sra): DOMStringMap should be a class implementing Map<String,String>.
     'DOMStringMap',
     'ChildNode',
-    #'Crypto',
     'ElementTimeControl',
-    'ElementTraversal',
     'EventListener',
     'MediaQueryListListener',
     'MutationCallback',
     'ParentNode',
-    #'SubtleCrypto',
     'SVGExternalResourcesRequired',
     'SVGFilterPrimitiveStandardAttributes',
     'SVGFitToViewBox',
@@ -36,7 +33,6 @@
     'SVGZoomAndPan',
     'TimeoutHandler',
     'WindowTimers',
-    #'WorkerCrypto',
     'WorkerPerformance',
     ])
 
@@ -997,12 +993,12 @@
     'boolean': TypeData(clazz='Primitive', dart_type='bool', native_type='bool',
                         webcore_getter_name='hasAttribute',
                         webcore_setter_name='setBooleanAttribute'),
+    'byte': TypeData(clazz='Primitive', dart_type='int', native_type='int'),
+    'octet': TypeData(clazz='Primitive', dart_type='int', native_type='int'),
     'short': TypeData(clazz='Primitive', dart_type='int', native_type='int'),
     'unsigned short': TypeData(clazz='Primitive', dart_type='int',
         native_type='int'),
     'int': TypeData(clazz='Primitive', dart_type='int'),
-    'unsigned int': TypeData(clazz='Primitive', dart_type='int',
-        native_type='unsigned'),
     'long': TypeData(clazz='Primitive', dart_type='int', native_type='int',
         webcore_getter_name='getIntegralAttribute',
         webcore_setter_name='setIntegralAttribute'),
@@ -1080,7 +1076,7 @@
                          suppress_interface=False, dart_type='List<Node>'),
     'SVGElementInstanceList': TypeData(clazz='Interface',
         item_type='SVGElementInstance', suppress_interface=True),
-    'WebKitSourceBufferList': TypeData(clazz='Interface', item_type='WebKitSourceBuffer'),
+    'SourceBufferList': TypeData(clazz='Interface', item_type='SourceBuffer'),
     'SpeechGrammarList': TypeData(clazz='Interface', item_type='SpeechGrammar'),
     'SpeechInputResultList': TypeData(clazz='Interface',
         item_type='SpeechInputResult', suppress_interface=True),
diff --git a/tools/dom/scripts/htmlrenamer.py b/tools/dom/scripts/htmlrenamer.py
index d0b1d78..89753be 100644
--- a/tools/dom/scripts/htmlrenamer.py
+++ b/tools/dom/scripts/htmlrenamer.py
@@ -52,7 +52,6 @@
     'RTCSessionDescriptionCallback': '_RtcSessionDescriptionCallback',
     'SVGDocument': 'SvgDocument', # Manual to avoid name conflicts.
     'SVGElement': 'SvgElement', # Manual to avoid name conflicts.
-    'SVGException': 'SvgException', # Manual of avoid conflict with Exception.
     'SVGGradientElement': '_GradientElement',
     'SVGSVGElement': 'SvgSvgElement', # Manual to avoid name conflicts.
     'Stream': 'FileStream',
@@ -217,9 +216,6 @@
   'Element.setAttributeNS',
   'Element.setAttribute',
   'Element.setAttributeNS',
-  'ElementTraversal.childElementCount',
-  'ElementTraversal.firstElementChild',
-  'ElementTraversal.lastElementChild',
   'Event.initEvent',
   'EventTarget.addEventListener',
   'EventTarget.removeEventListener',
@@ -313,7 +309,7 @@
 # identical functionality but with cleaner names.
 renamed_html_members = monitored.Dict('htmlrenamer.renamed_html_members', {
     'CanvasRenderingContext2D.drawImage': '_drawImage',
-    'CSSKeyframesRule.insertRule': 'appendRule',
+    'WebKitCSSKeyframesRule.insertRule': 'appendRule',
     'CSSStyleDeclaration.getPropertyValue': '_getPropertyValue',
     'CSSStyleDeclaration.setProperty': '_setProperty',
     'DirectoryEntry.getDirectory': '_getDirectory',
@@ -381,10 +377,10 @@
   'RTCDataChannel.send(Blob data)': 'sendBlob',
   'RTCDataChannel.send(DOMString data)': 'sendString',
   'SourceBuffer.appendBuffer(ArrayBufferView view)': 'appendBufferView',
-  'URL.createObjectURL(WebKitMediaSource source)':
-      '_createObjectUrlFromWebKitMediaSource',
   'URL.createObjectURL(MediaSource source)':
       'createObjectUrlFromSource',
+  'URL.createObjectURL(WebKitMediaSource source)':
+      '_createObjectUrlFromWebKitSource',
   'URL.createObjectURL(MediaStream stream)': 'createObjectUrlFromStream',
   'URL.createObjectURL(Blob blob)': 'createObjectUrlFromBlob',
   'WebGLRenderingContext.texImage2D(unsigned long target, long level, '
@@ -530,32 +526,32 @@
     'Document.xmlVersion',
     'DocumentFragment.children',
     'DocumentType.*',
-    'DOMCoreException.code',
-    'DOMCoreException.ABORT_ERR',
-    'DOMCoreException.DATA_CLONE_ERR',
-    'DOMCoreException.DOMSTRING_SIZE_ERR',
-    'DOMCoreException.HIERARCHY_REQUEST_ERR',
-    'DOMCoreException.INDEX_SIZE_ERR',
-    'DOMCoreException.INUSE_ATTRIBUTE_ERR',
-    'DOMCoreException.INVALID_ACCESS_ERR',
-    'DOMCoreException.INVALID_CHARACTER_ERR',
-    'DOMCoreException.INVALID_MODIFICATION_ERR',
-    'DOMCoreException.INVALID_NODE_TYPE_ERR',
-    'DOMCoreException.INVALID_STATE_ERR',
-    'DOMCoreException.NAMESPACE_ERR',
-    'DOMCoreException.NETWORK_ERR',
-    'DOMCoreException.NOT_FOUND_ERR',
-    'DOMCoreException.NOT_SUPPORTED_ERR',
-    'DOMCoreException.NO_DATA_ALLOWED_ERR',
-    'DOMCoreException.NO_MODIFICATION_ALLOWED_ERR',
-    'DOMCoreException.QUOTA_EXCEEDED_ERR',
-    'DOMCoreException.SECURITY_ERR',
-    'DOMCoreException.SYNTAX_ERR',
-    'DOMCoreException.TIMEOUT_ERR',
-    'DOMCoreException.TYPE_MISMATCH_ERR',
-    'DOMCoreException.URL_MISMATCH_ERR',
-    'DOMCoreException.VALIDATION_ERR',
-    'DOMCoreException.WRONG_DOCUMENT_ERR',
+    'DOMException.code',
+    'DOMException.ABORT_ERR',
+    'DOMException.DATA_CLONE_ERR',
+    'DOMException.DOMSTRING_SIZE_ERR',
+    'DOMException.HIERARCHY_REQUEST_ERR',
+    'DOMException.INDEX_SIZE_ERR',
+    'DOMException.INUSE_ATTRIBUTE_ERR',
+    'DOMException.INVALID_ACCESS_ERR',
+    'DOMException.INVALID_CHARACTER_ERR',
+    'DOMException.INVALID_MODIFICATION_ERR',
+    'DOMException.INVALID_NODE_TYPE_ERR',
+    'DOMException.INVALID_STATE_ERR',
+    'DOMException.NAMESPACE_ERR',
+    'DOMException.NETWORK_ERR',
+    'DOMException.NOT_FOUND_ERR',
+    'DOMException.NOT_SUPPORTED_ERR',
+    'DOMException.NO_DATA_ALLOWED_ERR',
+    'DOMException.NO_MODIFICATION_ALLOWED_ERR',
+    'DOMException.QUOTA_EXCEEDED_ERR',
+    'DOMException.SECURITY_ERR',
+    'DOMException.SYNTAX_ERR',
+    'DOMException.TIMEOUT_ERR',
+    'DOMException.TYPE_MISMATCH_ERR',
+    'DOMException.URL_MISMATCH_ERR',
+    'DOMException.VALIDATION_ERR',
+    'DOMException.WRONG_DOCUMENT_ERR',
     'Element.accessKey',
     'Element.dataset',
     'Element.get:classList',