| Index: sdk/lib/html/dart2js/html_dart2js.dart
 | 
| diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
 | 
| index b6d8612eaad1c799524fc5e5f0e68197573c73ac..a7805aa163832c752bd7fc3b6e2a4d49f9ec70ce 100644
 | 
| --- a/sdk/lib/html/dart2js/html_dart2js.dart
 | 
| +++ b/sdk/lib/html/dart2js/html_dart2js.dart
 | 
| @@ -6013,6 +6013,15 @@ class DivElement extends Element implements Element native "*HTMLDivElement" {
 | 
|  
 | 
|  
 | 
|  /// @domName Document
 | 
| +/**
 | 
| + * The base class for all documents.
 | 
| + *
 | 
| + * Each web page loaded in the browser has its own [Document] object, which is
 | 
| + * typically an [HtmlDocument].
 | 
| + *
 | 
| + * If you aren't comfortable with DOM concepts, see the Dart tutorial
 | 
| + * [Target 2: Connect Dart & HTML](http://www.dartlang.org/docs/tutorials/connect-dart-html/).
 | 
| + */
 | 
|  class Document extends Node  native "*Document"
 | 
|  {
 | 
|  
 | 
| @@ -6024,6 +6033,7 @@ class Document extends Node  native "*Document"
 | 
|    /// @domName Document.body; @docsEditable true
 | 
|    Element get $dom_body => JS("Element", "#.body", this);
 | 
|  
 | 
| +  /// Moved to [HtmlDocument].
 | 
|    /// @domName Document.body; @docsEditable true
 | 
|    void set $dom_body(Element value) {
 | 
|      JS("void", "#.body = #", this, value);
 | 
| @@ -6035,6 +6045,7 @@ class Document extends Node  native "*Document"
 | 
|    /// @domName Document.cookie; @docsEditable true
 | 
|    String cookie;
 | 
|  
 | 
| +  /// Returns the [Window] associated with the document.
 | 
|    /// @domName Document.defaultView; @docsEditable true
 | 
|    Window get window => _convertNativeToDart_Window(this._window);
 | 
|    dynamic get _window => JS("dynamic", "#.defaultView", this);
 | 
| @@ -6045,12 +6056,14 @@ class Document extends Node  native "*Document"
 | 
|    /// @domName Document.domain; @docsEditable true
 | 
|    final String domain;
 | 
|  
 | 
| +  /// Moved to [HtmlDocument].
 | 
|    /// @domName Document.head; @docsEditable true
 | 
|    HeadElement get $dom_head => JS("HeadElement", "#.head", this);
 | 
|  
 | 
|    /// @domName Document.implementation; @docsEditable true
 | 
|    final DOMImplementation implementation;
 | 
|  
 | 
| +  /// Moved to [HtmlDocument].
 | 
|    /// @domName Document.lastModified; @docsEditable true
 | 
|    String get $dom_lastModified => JS("String", "#.lastModified", this);
 | 
|  
 | 
| @@ -6060,41 +6073,52 @@ class Document extends Node  native "*Document"
 | 
|    /// @domName Document.readyState; @docsEditable true
 | 
|    final String readyState;
 | 
|  
 | 
| +  /// Moved to [HtmlDocument].
 | 
|    /// @domName Document.referrer; @docsEditable true
 | 
|    String get $dom_referrer => JS("String", "#.referrer", this);
 | 
|  
 | 
|    /// @domName Document.selectedStylesheetSet; @docsEditable true
 | 
|    String selectedStylesheetSet;
 | 
|  
 | 
| +  /// Moved to [HtmlDocument].
 | 
|    /// @domName Document.styleSheets; @docsEditable true
 | 
|    List<StyleSheet> get $dom_styleSheets => JS("_StyleSheetList", "#.styleSheets", this);
 | 
|  
 | 
| +  /// Moved to [HtmlDocument].
 | 
|    /// @domName Document.title; @docsEditable true
 | 
|    String get $dom_title => JS("String", "#.title", this);
 | 
|  
 | 
| +  /// Moved to [HtmlDocument].
 | 
|    /// @domName Document.title; @docsEditable true
 | 
|    void set $dom_title(String value) {
 | 
|      JS("void", "#.title = #", this, value);
 | 
|    }
 | 
|  
 | 
| +  /// Moved to [HtmlDocument].
 | 
|    /// @domName Document.webkitFullscreenElement; @docsEditable true
 | 
|    Element get $dom_webkitFullscreenElement => JS("Element", "#.webkitFullscreenElement", this);
 | 
|  
 | 
| +  /// Moved to [HtmlDocument].
 | 
|    /// @domName Document.webkitFullscreenEnabled; @docsEditable true
 | 
|    bool get $dom_webkitFullscreenEnabled => JS("bool", "#.webkitFullscreenEnabled", this);
 | 
|  
 | 
| +  /// Moved to [HtmlDocument].
 | 
|    /// @domName Document.webkitHidden; @docsEditable true
 | 
|    bool get $dom_webkitHidden => JS("bool", "#.webkitHidden", this);
 | 
|  
 | 
| +  /// Moved to [HtmlDocument].
 | 
|    /// @domName Document.webkitIsFullScreen; @docsEditable true
 | 
|    bool get $dom_webkitIsFullScreen => JS("bool", "#.webkitIsFullScreen", this);
 | 
|  
 | 
| +  /// Moved to [HtmlDocument].
 | 
|    /// @domName Document.webkitPointerLockElement; @docsEditable true
 | 
|    Element get $dom_webkitPointerLockElement => JS("Element", "#.webkitPointerLockElement", this);
 | 
|  
 | 
| +  /// Moved to [HtmlDocument].
 | 
|    /// @domName Document.webkitVisibilityState; @docsEditable true
 | 
|    String get $dom_webkitVisibilityState => JS("String", "#.webkitVisibilityState", this);
 | 
|  
 | 
| +  /// Use the [Range] constructor instead.
 | 
|    /// @domName Document.caretRangeFromPoint; @docsEditable true
 | 
|    Range $dom_caretRangeFromPoint(int x, int y) native "caretRangeFromPoint";
 | 
|  
 | 
| @@ -6104,6 +6128,7 @@ class Document extends Node  native "*Document"
 | 
|    /// @domName Document.createDocumentFragment; @docsEditable true
 | 
|    DocumentFragment createDocumentFragment() native;
 | 
|  
 | 
| +  /// Deprecated: use new Element.tag(tagName) instead.
 | 
|    /// @domName Document.createElement; @docsEditable true
 | 
|    Element $dom_createElement(String tagName) native "createElement";
 | 
|  
 | 
| @@ -6126,9 +6151,11 @@ class Document extends Node  native "*Document"
 | 
|    }
 | 
|    Touch _createTouch_1(LocalWindow window, target, identifier, pageX, pageY, screenX, screenY, webkitRadiusX, webkitRadiusY, webkitRotationAngle, webkitForce) native "createTouch";
 | 
|  
 | 
| +  /// Use the [TouchList] constructor isntead.
 | 
|    /// @domName Document.createTouchList; @docsEditable true
 | 
|    TouchList $dom_createTouchList() native "createTouchList";
 | 
|  
 | 
| +  /// Moved to [HtmlDocument].
 | 
|    /// @domName Document.elementFromPoint; @docsEditable true
 | 
|    Element $dom_elementFromPoint(int x, int y) native "elementFromPoint";
 | 
|  
 | 
| @@ -6138,9 +6165,11 @@ class Document extends Node  native "*Document"
 | 
|    /// @domName Document.getCSSCanvasContext; @docsEditable true
 | 
|    CanvasRenderingContext getCssCanvasContext(String contextId, String name, int width, int height) native "getCSSCanvasContext";
 | 
|  
 | 
| +  /// Deprecated: use query("#$elementId") instead.
 | 
|    /// @domName Document.getElementById; @docsEditable true
 | 
|    Element $dom_getElementById(String elementId) native "getElementById";
 | 
|  
 | 
| +  /// Deprecated: use query("#$elementId") instead.
 | 
|    /// @domName Document.getElementsByClassName; @docsEditable true
 | 
|    @Returns('_NodeList') @Creates('_NodeList')
 | 
|    List<Node> $dom_getElementsByClassName(String tagname) native "getElementsByClassName";
 | 
| @@ -6168,6 +6197,7 @@ class Document extends Node  native "*Document"
 | 
|    /// @domName Document.queryCommandValue; @docsEditable true
 | 
|    String queryCommandValue(String command) native;
 | 
|  
 | 
| +  /// Deprecated: renamed to the shorter name [query].
 | 
|    /// @domName Document.querySelector; @docsEditable true
 | 
|    Element $dom_querySelector(String selectors) native "querySelector";
 | 
|  
 | 
| @@ -6175,17 +6205,34 @@ class Document extends Node  native "*Document"
 | 
|    @Returns('_NodeList') @Creates('_NodeList')
 | 
|    List<Node> $dom_querySelectorAll(String selectors) native "querySelectorAll";
 | 
|  
 | 
| +  /// Moved to [HtmlDocument].
 | 
|    /// @domName Document.webkitCancelFullScreen; @docsEditable true
 | 
|    void $dom_webkitCancelFullScreen() native "webkitCancelFullScreen";
 | 
|  
 | 
| +  /// Moved to [HtmlDocument].
 | 
|    /// @domName Document.webkitExitFullscreen; @docsEditable true
 | 
|    void $dom_webkitExitFullscreen() native "webkitExitFullscreen";
 | 
|  
 | 
| +  /// Moved to [HtmlDocument].
 | 
|    /// @domName Document.webkitExitPointerLock; @docsEditable true
 | 
|    void $dom_webkitExitPointerLock() native "webkitExitPointerLock";
 | 
|  
 | 
| -  // TODO(jacobr): implement all Element methods not on Document.
 | 
|  
 | 
| +  /**
 | 
| +   * Finds the first descendant element of this document that matches the
 | 
| +   * specified group of selectors.
 | 
| +   *
 | 
| +   * Unless your webpage contains multiple documents, the top-level query
 | 
| +   * method behaves the same as this method, so you should use it instead to
 | 
| +   * save typing a few characters.
 | 
| +   *
 | 
| +   * [selectors] should be a string using CSS selector syntax.
 | 
| +   *     var element1 = document.query('.className');
 | 
| +   *     var element2 = document.query('#id');
 | 
| +   *
 | 
| +   * For details about CSS selector syntax, see the
 | 
| +   * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
 | 
| +   */
 | 
|    Element query(String selectors) {
 | 
|      // It is fine for our RegExp to detect element id query selectors to have
 | 
|      // false negatives but not false positives.
 | 
| @@ -6195,6 +6242,20 @@ class Document extends Node  native "*Document"
 | 
|      return $dom_querySelector(selectors);
 | 
|    }
 | 
|  
 | 
| +  /**
 | 
| +   * Finds all descendant elements of this document that match the specified
 | 
| +   * group of selectors.
 | 
| +   *
 | 
| +   * Unless your webpage contains multiple documents, the top-level queryAll
 | 
| +   * method behaves the same as this method, so you should use it instead to
 | 
| +   * save typing a few characters.
 | 
| +   *
 | 
| +   * [selectors] should be a string using CSS selector syntax.
 | 
| +   *     var items = document.queryAll('.itemClassName');
 | 
| +   *
 | 
| +   * For details about CSS selector syntax, see the
 | 
| +   * [CSS selector specification](http://www.w3.org/TR/css3-selectors/).
 | 
| +   */
 | 
|    List<Element> queryAll(String selectors) {
 | 
|      if (new RegExp("""^\\[name=["'][^'"]+['"]\\]\$""").hasMatch(selectors)) {
 | 
|        final mutableMatches = $dom_getElementsByName(
 | 
| @@ -6373,7 +6434,7 @@ class DocumentFragment extends Node native "*DocumentFragment" {
 | 
|      }
 | 
|      return null;
 | 
|    }
 | 
| -  Element get $m_lastElementChild() => elements.last;
 | 
| +  Element get $m_lastElementChild => elements.last;
 | 
|    Element get nextElementSibling => null;
 | 
|    Element get previousElementSibling => null;
 | 
|    Element get offsetParent => null;
 | 
| @@ -7833,6 +7894,19 @@ class EventSourceEvents extends Events {
 | 
|  // BSD-style license that can be found in the LICENSE file.
 | 
|  
 | 
|  
 | 
| +/**
 | 
| + * Base class that supports listening for and dispatching browser events.
 | 
| + *
 | 
| + * Events can either be accessed by string name (using the indexed getter) or by
 | 
| + * getters exposed by subclasses. Use the getters exposed by subclasses when
 | 
| + * possible for better compile-time type checks.
 | 
| + * 
 | 
| + * Using an indexed getter:
 | 
| + *     events['mouseover'].add((e) => print("Mouse over!"));
 | 
| + *
 | 
| + * Using a getter provided by a subclass:
 | 
| + *     elementEvents.mouseOver.add((e) => print("Mouse over!"));
 | 
| + */
 | 
|  class Events {
 | 
|    /* Raw event target. */
 | 
|    final EventTarget _ptr;
 | 
| @@ -7844,6 +7918,9 @@ class Events {
 | 
|    }
 | 
|  }
 | 
|  
 | 
| +/**
 | 
| + * Supports adding, removing, and dispatching events for a specific event type.
 | 
| + */
 | 
|  class EventListenerList {
 | 
|  
 | 
|    final EventTarget _ptr;
 | 
| @@ -7879,6 +7956,14 @@ class EventListenerList {
 | 
|  }
 | 
|  
 | 
|  /// @domName EventTarget
 | 
| +/**
 | 
| + * Base class for all browser objects that support events.
 | 
| + *
 | 
| + * Use the [on] property to add, remove, and dispatch events (rather than
 | 
| + * [$dom_addEventListener], [$dom_dispatchEvent], and
 | 
| + * [$dom_removeEventListener]) for compile-time type checks and a more concise
 | 
| + * API.
 | 
| + */ 
 | 
|  class EventTarget native "*EventTarget" {
 | 
|  
 | 
|    /** @domName EventTarget.addEventListener, EventTarget.removeEventListener, EventTarget.dispatchEvent */
 | 
| @@ -11181,7 +11266,7 @@ class LocalWindow extends EventTarget implements Window native "@*DOMWindow" {
 | 
|    // API level getter and setter for Location.
 | 
|    // TODO: The cross domain safe wrapper can be inserted here or folded into
 | 
|    // _LocationWrapper.
 | 
| -  LocalLocation get location() {
 | 
| +  LocalLocation get location {
 | 
|      // Firefox work-around for Location.  The Firefox location object cannot be
 | 
|      // made to behave like a Dart object so must be wrapped.
 | 
|      var result = _location;
 | 
| @@ -11278,7 +11363,7 @@ class LocalWindow extends EventTarget implements Window native "@*DOMWindow" {
 | 
|         this);
 | 
|    }
 | 
|  
 | 
| -  IDBFactory get indexedDB() =>
 | 
| +  IDBFactory get indexedDB =>
 | 
|        JS('IDBFactory',
 | 
|           '#.indexedDB || #.webkitIndexedDB || #.mozIndexedDB',
 | 
|           this, this, this);
 | 
| 
 |