[html5] r2330 - [gow] (2) Seriously revamp the <video> state processing models and events.

whatwg at whatwg.org whatwg at whatwg.org
Tue Oct 14 17:26:53 PDT 2008


Author: ianh
Date: 2008-10-14 17:26:52 -0700 (Tue, 14 Oct 2008)
New Revision: 2330

Modified:
   index
   source
Log:
[gow] (2) Seriously revamp the <video> state processing models and events.

Modified: index
===================================================================
--- index	2008-10-13 22:23:42 UTC (rev 2329)
+++ index	2008-10-15 00:26:52 UTC (rev 2330)
@@ -16,7 +16,7 @@
   <div class=head>
    <p><a class=logo href=http://www.whatwg.org/ rel=home><img alt=WHATWG src=/images/logo></a></p>
    <h1>HTML 5</h1>
-   <h2 class="no-num no-toc" id=draft-recommendation-—-date:-01-jan-1901>Draft Recommendation — 13 October 2008</h2>
+   <h2 class="no-num no-toc" id=draft-recommendation-—-date:-01-jan-1901>Draft Recommendation — 15 October 2008</h2>
    <p>You can take part in this work. <a href=http://www.whatwg.org/mailing-list>Join the working group's discussion list.</a></p>
    <p><strong>Web designers!</strong> We have a <a href=http://blog.whatwg.org/faq/>FAQ</a>, a <a href=http://forums.whatwg.org/>forum</a>, and a <a href=http://www.whatwg.org/mailing-list#help>help mailing list</a> for you!</p>
    <dl><dt>Multiple-page version:</dt>
@@ -16111,8 +16111,8 @@
   <p>The <dfn id=dom-video-poster title=dom-video-poster><code>poster</code></dfn> DOM
   attribute must <a href=#reflect>reflect</a> the <code title=attr-video-poster><a href=#attr-video-poster>poster</a></code> content attribute.</p>
 
-  <hr><p>When no video data is available (the element's <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> attribute is
-  either <code title=dom-media-EMPTY><a href=#dom-media-empty>EMPTY</a></code>, <code title=dom-media-LOADING><a href=#dom-media-loading>LOADING</a></code>, or <code title=dom-media-LOADED_METADATA><a href=#dom-media-loaded_metadata>LOADED_METADATA</a></code>),
+  <hr><p>When no video data is available (the element's <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> attribute is either
+  <code title=dom-media-HAVE_NOTHING><a href=#dom-media-have_nothing>HAVE_NOTHING</a></code> or <code title=dom-media-HAVE_METADATA><a href=#dom-media-have_metadata>HAVE_METADATA</a></code>),
   <code><a href=#video>video</a></code> elements represent either the <a href=#poster-frame>poster
   frame</a>, or nothing.</p>
 
@@ -16550,8 +16550,9 @@
   are honoured.</p>
 
   <p>If a <code><a href=#the-source-element>source</a></code> element is inserted into a <a href=#media-element>media
-  element</a> that is already in a document and whose <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> is in the <code title=dom-media-EMPTY><a href=#dom-media-empty>EMPTY</a></code> state, the user agent must
-  <a href=#queue-a-task>queue a task</a> that implicitly invokes the <code title=dom-media-load><a href=#dom-media-load>load()</a></code> method on the <a href=#media-element>media
+  element</a> that is already in a document and whose <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> is in the <code title=dom-media-NETWORK_EMPTY><a href=#dom-media-network_empty>NETWORK_EMPTY</a></code> state, the user
+  agent must <a href=#queue-a-task>queue a task</a> that implicitly invokes the
+  <code title=dom-media-load><a href=#dom-media-load>load()</a></code> method on the <a href=#media-element>media
   element</a>, and ignores any resulting exceptions. The <a href=#task-source>task
   source</a> for this task is the <a href=#media-element>media element</a>'s own
   <a href=#media-element-new-resource-task-source>media element new resource task source</a>.</p>
@@ -16579,11 +16580,10 @@
   // network state
            attribute DOMString <a href=#dom-media-src title=dom-media-src>src</a>;
   readonly attribute DOMString <a href=#dom-media-currentsrc title=dom-media-currentSrc>currentSrc</a>;
-  const unsigned short <a href=#dom-media-empty title=dom-media-EMPTY>EMPTY</a> = 0;
-  const unsigned short <a href=#dom-media-loading title=dom-media-LOADING>LOADING</a> = 1;
-  const unsigned short <a href=#dom-media-loaded_metadata title=dom-media-LOADED_METADATA>LOADED_METADATA</a> = 2;
-  const unsigned short <a href=#dom-media-loaded_first_frame title=dom-media-LOADED_FIRST_FRAME>LOADED_FIRST_FRAME</a> = 3;
-  const unsigned short <a href=#dom-media-loaded title=dom-media-LOADED>LOADED</a> = 4;
+  const unsigned short <a href=#dom-media-network_empty title=dom-media-NETWORK_EMPTY>NETWORK_EMPTY</a> = 0;
+  const unsigned short <a href=#dom-media-network_idle title=dom-media-NETWORK_IDLE>NETWORK_IDLE</a> = 1;
+  const unsigned short <a href=#dom-media-network_loading title=dom-media-NETWORK_LOADING>NETWORK_LOADING</a> = 2;
+  const unsigned short <a href=#dom-media-network_loaded title=dom-media-NETWORK_LOADED>NETWORK_LOADED</a> = 3;
   readonly attribute unsigned short <a href=#dom-media-networkstate title=dom-media-networkState>networkState</a>;
   readonly attribute float <a href=#dom-media-bufferingrate title=dom-media-bufferingRate>bufferingRate</a>;
   readonly attribute boolean <a href=#dom-media-bufferingthrottled title=dom-media-bufferingThrottled>bufferingThrottled</a>;
@@ -16593,10 +16593,12 @@
   void <a href=#dom-media-load title=dom-media-load>load</a>();
 
   // ready state
-  const unsigned short <a href=#dom-media-data_unavailable title=dom-media-DATA_UNAVAILABLE>DATA_UNAVAILABLE</a> = 0;
-  const unsigned short <a href=#dom-media-can_show_current_frame title=dom-media-CAN_SHOW_CURRENT_FRAME>CAN_SHOW_CURRENT_FRAME</a> = 1;
-  const unsigned short <a href=#dom-media-can_play title=dom-media-CAN_PLAY>CAN_PLAY</a> = 2;
-  const unsigned short <a href=#dom-media-can_play_through title=dom-media-CAN_PLAY_THROUGH>CAN_PLAY_THROUGH</a> = 3;
+  const unsigned short <a href=#dom-media-have_nothing title=dom-media-HAVE_NOTHING>HAVE_NOTHING</a> = 0;
+  const unsigned short <a href=#dom-media-have_metadata title=dom-media-HAVE_METADATA>HAVE_METADATA</a> = 1;
+  const unsigned short <a href=#dom-media-have_some_data title=dom-media-HAVE_SOME_DATA>HAVE_SOME_DATA</a> = 2;
+  const unsigned short <a href=#dom-media-have_current_data title=dom-media-HAVE_CURRENT_DATA>HAVE_CURRENT_DATA</a> = 3;
+  const unsigned short <a href=#dom-media-have_future_data title=dom-media-HAVE_FUTURE_DATA>HAVE_FUTURE_DATA</a> = 4;
+  const unsigned short <a href=#dom-media-have_enough_data title=dom-media-HAVE_ENOUGH_DATA>HAVE_ENOUGH_DATA</a> = 5;
   readonly attribute unsigned short <a href=#dom-media-readystate title=dom-media-readyState>readyState</a>;
   readonly attribute boolean <a href=#dom-media-seeking title=dom-media-seeking>seeking</a>;
 
@@ -16732,13 +16734,12 @@
   <p>If the <code title=attr-media-src><a href=#attr-media-src>src</a></code> attribute of a
   <a href=#media-element>media element</a> that is already in a document and whose
   <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> is in the
-  <code title=dom-media-EMPTY><a href=#dom-media-empty>EMPTY</a></code> state is added, changed,
-  or removed, the user agent must <a href=#queue-a-task>queue a task</a> that
-  implicitly invokes the <code title=dom-media-load><a href=#dom-media-load>load()</a></code>
-  method on the <a href=#media-element>media element</a>, and ignores any resulting
-  exceptions. The <a href=#task-source>task source</a> for this task is the
-  <a href=#media-element>media element</a>'s own <a href=#media-element-new-resource-task-source>media element new resource
-  task source</a>.</p>
+  <code title=dom-media-NETWORK_EMPTY><a href=#dom-media-network_empty>NETWORK_EMPTY</a></code> state is
+  added, changed, or removed, the user agent must <a href=#queue-a-task>queue a
+  task</a> that implicitly invokes the <code title=dom-media-load><a href=#dom-media-load>load()</a></code> method on the <a href=#media-element>media
+  element</a>, and ignores any resulting exceptions. The <a href=#task-source>task
+  source</a> for this task is the <a href=#media-element>media element</a>'s own
+  <a href=#media-element-new-resource-task-source>media element new resource task source</a>.</p>
 
   <p class=note>If a <code title=attr-media-src><a href=#attr-media-src>src</a></code>
   attribute is specified, the resource it specifies is the <a href=#media-resource>media
@@ -16828,63 +16829,56 @@
   </ol><p>The <dfn id=dom-media-currentsrc title=dom-media-currentSrc><code>currentSrc</code></dfn> DOM
   attribute must return the empty string if the <a href=#media-element>media
   element</a>'s <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> has the value
-  <a href=#dom-media-empty title=dom-media-EMPTY>EMPTY</a>, and the <a href=#absolute-url>absolute
-  URL</a> that is the address of the <a href=#chosen-media-resource>chosen media
-  resource</a> otherwise.</p>
+  <code title=dom-media-NETWORK_EMPTY><a href=#dom-media-network_empty>NETWORK_EMPTY</a></code>, and the
+  <a href=#absolute-url>absolute URL</a> that is the address of the <a href=#chosen-media-resource>chosen
+  media resource</a> otherwise.</p>
 
 
 
   <h5 id=network-states><span class=secno>4.8.10.3 </span>Network states</h5>
 
   <p>As <a href=#media-element title="media element">media elements</a> interact
-  with the network, they go through several states. The <dfn id=dom-media-networkstate title=dom-media-networkState><code>networkState</code></dfn>
-  attribute, on getting, must return the current network state of the
-  element, which must be one of the following values:</p>
+  with the network, their current network activity is represented by
+  the <dfn id=dom-media-networkstate title=dom-media-networkState><code>networkState</code></dfn>
+  attribute. On getting, it must return the current network state of
+  the element, which must be one of the following values:</p>
 
-  <dl><dt><dfn id=dom-media-empty title=dom-media-EMPTY><code>EMPTY</code></dfn> (numeric value 0)</dt>
+  <dl><dt><dfn id=dom-media-network_empty title=dom-media-NETWORK_EMPTY><code>NETWORK_EMPTY</code></dfn> (numeric value 0)</dt>
 
    <dd>The element has not yet been initialized. All attributes are in
    their initial states.</dd>
 
-   <dt><dfn id=dom-media-loading title=dom-media-LOADING><code>LOADING</code></dfn> (numeric value 1)</dt>
+   <dt><dfn id=dom-media-network_idle title=dom-media-NETWORK_IDLE><code>NETWORK_IDLE</code></dfn> (numeric value 1)</dt>
 
-   <dd>The element has <a href=#pick-a-media-resource title="pick a media resource">picked a
-   media resource</a> (the <a href=#chosen-media-resource>chosen media resource</a> is
-   available from the <code title=dom-media-currentSrc><a href=#dom-media-currentsrc>currentSrc</a></code> attribute), but none
-   of the metadata has yet been obtained and therefore all the other
-   attributes are still in their initial states.</dd>
+   <dd>The element has a <a href=#chosen-media-resource>chosen media resource</a>, but the
+   user agent is not using the network to obtain any more of the
+   resource than is already obtained at this time.</dd>
 
-   <dt><dfn id=dom-media-loaded_metadata title=dom-media-LOADED_METADATA><code>LOADED_METADATA</code></dfn> (numeric value 2)</dt>
+   <dt><dfn id=dom-media-network_loading title=dom-media-NETWORK_LOADING><code>NETWORK_LOADING</code></dfn> (numeric value 2)</dt>
 
-   <dd>Enough of the resource has been obtained that the metadata
-   attributes are initialized (e.g. the length is known). The API will
-   no longer raise exceptions when used.</dd>
+   <dd>The user agent is actively trying to download data for the
+   <a href=#chosen-media-resource>chosen media resource</a>.</dd>
 
-   <dt><dfn id=dom-media-loaded_first_frame title=dom-media-LOADED_FIRST_FRAME><code>LOADED_FIRST_FRAME</code></dfn> (numeric value 3)</dt>
+   <dt><dfn id=dom-media-network_loaded title=dom-media-NETWORK_LOADED><code>NETWORK_LOADED</code></dfn> (numeric value 3)</dt>
 
-   <dd>Actual <a href=#media-data>media data</a> has been obtained. In the case
-   of video, this specifically means that a frame of video is
-   available and can be shown.</dd>
-
-   <dt><dfn id=dom-media-loaded title=dom-media-LOADED><code>LOADED</code></dfn> (numeric value 4)</dt>
-
    <dd>The entire <a href=#media-resource>media resource</a> has been obtained and is
    available to the user agent locally. Network connectivity could be
    lost without affecting the media playback.</dd>
 
   </dl><p>The algorithm for the <code title=dom-media-load><a href=#dom-media-load>load()</a></code>
   method defined below describes exactly when the <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> attribute changes
-  value.</p>
+  value and what events fire to indicate changes in this state.</p>
 
+  <p class=note>Some resources, e.g. streaming Web radio, can never
+  each the <code title=dom-media-NETWORK_LOADED><a href=#dom-media-network_loaded>NETWORK_LOADED</a></code> state.</p>
 
 
+
   <h5 id=loading-the-media-resource><span class=secno>4.8.10.4 </span>Loading the media resource</h5>
 
   <p>All <a href=#media-element title="media element">media elements</a> have a
-  <dfn id=begun-flag>begun flag</dfn>, which must begin in the false state, a
-  <dfn id=loaded-first-frame-flag>loaded-first-frame flag</dfn>, which must begin in the false
-  state, and an <dfn id=autoplaying-flag>autoplaying flag</dfn>, which must begin in the
-  true state.</p>
+  <dfn id=begun-flag>begun flag</dfn>, which must begin in the false state, and an
+  <dfn id=autoplaying-flag>autoplaying flag</dfn>, which must begin in the true state.</p>
 
   <p>When the <dfn id=dom-media-load title=dom-media-load><code>load()</code></dfn>
   method on a <a href=#media-element>media element</a> is invoked, the user agent
@@ -16920,29 +16914,28 @@
    <a href=#media-element>media element</a>.</li>
 
    <li><p>The <code title=dom-media-error><a href=#dom-media-error>error</a></code> attribute
-   must be set to null, the <a href=#loaded-first-frame-flag>loaded-first-frame flag</a> must
-   be set to false, and the <a href=#autoplaying-flag>autoplaying flag</a> must be set
-   to true.</li>
+   must be set to null and the <a href=#autoplaying-flag>autoplaying flag</a> must be
+   set to true.</li>
 
    <li><p>The <code title=dom-media-playbackRate><a href=#dom-media-playbackrate>playbackRate</a></code>
    attribute must be set to the value of the <code title=dom-media-defaultPlaybackRate><a href=#dom-media-defaultplaybackrate>defaultPlaybackRate</a></code>
    attribute.</li>
 
    <li><p>If the <a href=#media-element>media element</a>'s <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> is not set to
-   <a href=#dom-media-empty title=dom-media-EMPTY>EMPTY</a>, then the following
-   substeps must be followed:
+   <code title=dom-media-NETWORK_EMPTY><a href=#dom-media-network_empty>NETWORK_EMPTY</a></code>, then
+   the following substeps must be followed:</p>
 
     <ol><!--<li>Let <var title="">events</var> be a list of event names,
      initially empty.</li>--><li>The <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code>
-     attribute must be set to <a href=#dom-media-empty title=dom-media-EMPTY>EMPTY</a><!--, and the user agent must
-     add <code title="event-emptied">emptied</code> to the <var
-     title="">events</var> list-->.</li>
+     attribute must be set to <a href=#dom-media-network_empty title=dom-media-NETWORK_EMPTY>NETWORK_EMPTY</a><!--, and the
+     user agent must add <code title="event-emptied">emptied</code> to
+     the <var title="">events</var> list-->.</li>
 
      <li>If <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> is
-     not set to <code title=dom-media-DATA_UNAVAILABLE><a href=#dom-media-data_unavailable>DATA_UNAVAILABLE</a></code>, it must be set
-     to that state<!-- and the user agent must add <code
-     title="event-dataunavailable">dataunavailable</code> to the
-     <var title="">events</var> list-->.</li>
+     not set to <code title=dom-media-HAVE_NOTHING><a href=#dom-media-have_nothing>HAVE_NOTHING</a></code>, it must be
+     set to that state<!-- and the user agent must add <code
+     title="event-dataunavailable">dataunavailable</code> to the <var
+     title="">events</var> list-->.</li>
 
      <li>If the <code title=dom-media-paused><a href=#dom-media-paused>paused</a></code> attribute
      is false, it must be set to true<!--, and the user agent must add
@@ -16975,9 +16968,9 @@
    steps.</li>
 
    <li><p>The <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code>
-   attribute must be set to <a href=#dom-media-loading title=dom-media-LOADING>LOADING</a>.</li>
+   attribute must be set to <a href=#dom-media-network_idle title=dom-media-NETWORK_IDLE>NETWORK_IDLE</a>.</p>
 
-   <li><p class=note>The <code title=dom-media-currentSrc><a href=#dom-media-currentsrc>currentSrc</a></code> attribute starts
+   <p class=note>The <code title=dom-media-currentSrc><a href=#dom-media-currentsrc>currentSrc</a></code> attribute starts
    returning the new value.</li>
 
    <li><p>The user agent must then set the <a href=#begun-flag>begun flag</a> to
@@ -17004,10 +16997,12 @@
    <li>
 
     <p>While the fetching process is progressing, the user agent must
-    <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-progress-event>fire a progress event</a>
-    called <code title=event-progress><a href=#event-progress>progress</a></code> at the element
-    every 350ms (±200ms) or for every byte received, whichever is
-    <em>least</em> frequent.</p>
+    set the <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code>
+    to <code title=dom-media-NETWORK_LOADING><a href=#dom-media-network_loading>NETWORK_LOADING</a></code>
+    and <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-progress-event>fire a progress
+    event</a> called <code title=event-progress><a href=#event-progress>progress</a></code>
+    at the element every 350ms (±200ms) or for every byte
+    received, whichever is <em>least</em> frequent.</p>
 
     <p>If at any point the user agent has received no data for more
     than about three seconds, the user agent must <a href=#queue-a-task>queue a
@@ -17019,6 +17014,14 @@
     act as if it was stalled (as opposed to acting as if the
     connection was closed).</p>
 
+    <p>User agents may decide to not download more content at any
+    time, e.g. after buffering five minutes of a one hour media
+    resource, while waiting for the user to decide whether to play the
+    resource or not, or while waiting for user input in an interactive
+    resource. When a <a href=#media-element>media element</a>'s download has been
+    suspended, the user agent must set the <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> to <code title=dom-media-NETWORK_IDLE><a href=#dom-media-network_idle>NETWORK_IDLE</a></code> and <a href=#queue-a-task>queue
+    a task</a> to <a href=#fire-a-progress-event>fire a progress event</a> called <code title=event-suspend><a href=#event-suspend>suspend</a></code> at the element.</p>
+
     <p>The user agent may use whatever means necessary to fetch the
     resource (within the constraints put forward by this and other
     specifications); for example, reconnecting to the server in the
@@ -17053,10 +17056,9 @@
        element</a>.</li>
 
        <li>The element's <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> attribute
-       must be switched to the <a href=#dom-media-empty title=dom-media-EMPTY>EMPTY</a> value and the user agent
-       must <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple
-       event</a> called <code title=event-emptied><a href=#event-emptied>emptied</a></code>
-       at the element.</li>
+       must be switched to the <a href=#dom-media-network_empty title=dom-media-NETWORK_EMPTY>NETWORK_EMPTY</a> value and
+       the user agent must <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a
+       simple event</a> called <code title=event-emptied><a href=#event-emptied>emptied</a></code> at the element.</li>
 
        <li>These steps must be aborted.</li>
 
@@ -17089,10 +17091,9 @@
        element</a>.</li>
 
        <li>The element's <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> attribute
-       must be switched to the <a href=#dom-media-empty title=dom-media-EMPTY>EMPTY</a> value and the user agent
-       must <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple
-       event</a> called <code title=event-emptied><a href=#event-emptied>emptied</a></code>
-       at the element.</li>
+       must be switched to the <a href=#dom-media-network_empty title=dom-media-NETWORK_EMPTY>NETWORK_EMPTY</a> value and
+       the user agent must <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a
+       simple event</a> called <code title=event-emptied><a href=#event-emptied>emptied</a></code> at the element.</li>
 
        <li>These steps must be aborted.</li>
 
@@ -17121,15 +17122,16 @@
        progress event</a> called <code title=event-abort><a href=#event-abort>abort</a></code> at the <a href=#media-element>media
        element</a>.</li>
 
-       <li>If the <a href=#media-element>media element</a>'s <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> attribute
-       has the value <code title=dom-media-LOADING><a href=#dom-media-loading>LOADING</a></code>,
-       the element's <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> attribute
-       must be switched to the <a href=#dom-media-empty title=dom-media-EMPTY>EMPTY</a> value and the user agent
-       must <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple
-       event</a> called <code title=event-emptied><a href=#event-emptied>emptied</a></code>
-       at the element. (If the <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> attribute
-       has a value greater than <code title=dom-media-LOADING><a href=#dom-media-loading>LOADING</a></code>, then this doesn't
-       happen; the available data, if any, will be playable.)</li>
+       <li>If the <a href=#media-element>media element</a>'s <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> attribute has a
+       value equal to <code title=dom-media-HAVE_NOTHING><a href=#dom-media-have_nothing>HAVE_NOTHING</a></code>, the
+       element's <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> attribute
+       must be switched to the <a href=#dom-media-network_empty title=dom-media-NETWORK_EMPTY>NETWORK_EMPTY</a> value and
+       the user agent must <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a
+       simple event</a> called <code title=event-emptied><a href=#event-emptied>emptied</a></code> at the element. (If the
+       <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> attribute
+       has a value greater than <code title=dom-media-HAVE_NOTHING><a href=#dom-media-have_nothing>HAVE_NOTHING</a></code>, then this
+       doesn't happen; the available data, if any, will be
+       playable.)</li>
 
        <li>These steps must be aborted.</li>
 
@@ -17163,8 +17165,8 @@
       <ol><li><p>The <a href=#current-playback-position>current playback position</a> must be set
        to the <var><a href=#effective-start>effective start</a></var>.</li>
 
-       <li><p>The <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> attribute
-       must be set to <code title=dom-media-LOADED_METADATA><a href=#dom-media-loaded_metadata>LOADED_METADATA</a></code>.</li>
+       <li><p>The <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code>
+       attribute must be set to <code title=dom-media-HAVE_METADATA><a href=#dom-media-have_metadata>HAVE_METADATA</a></code>.</li>
 
        <li><p class=note>A number of attributes, including <code title=dom-media-duration><a href=#dom-media-duration>duration</a></code>, <code title=dom-media-buffered><a href=#dom-media-buffered>buffered</a></code>, and <code title=dom-media-played><a href=#dom-media-played>played</a></code>, become
        available.</li>
@@ -17173,8 +17175,8 @@
        <a href=#fire-a-simple-event>fire a simple event</a> called <code title=event-durationchange><a href=#event-durationchange>durationchange</a></code> at the
        element at this point.</li>
 
-       <li><p>The user agent must <a href=#queue-a-task>queue a task</a> to
-       <a href=#fire-a-simple-event>fire a simple event</a> called <code title=event-loadedmetadata><a href=#event-loadedmetadata>loadedmetadata</a></code> at the
+       <li id=fire-loadedmetadata><p>The user agent must <a href=#queue-a-task>queue
+       a task</a> to <a href=#fire-a-simple-event>fire a simple event</a> called <code title=event-loadedmetadata><a href=#event-loadedmetadata>loadedmetadata</a></code> at the
        element.</li>
 
       </ol></dd>
@@ -17188,45 +17190,36 @@
 
       <p>The user agent must follow these substeps:</p>
 
-      <ol><li><p>The <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> attribute
-       must be set to <code title=dom-media-LOADED_FIRST_FRAME><a href=#dom-media-loaded_first_frame>LOADED_FIRST_FRAME</a></code>.</li>
+      <ol><li><p>The <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code>
+       attribute must change to <code title=dom-media-HAVE_CURRENT_DATA><a href=#dom-media-have_current_data>HAVE_CURRENT_DATA</a></code>.</li>
 
-       <li><p>The <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> attribute must
-       change to <code title=dom-media-CAN_SHOW_CURRENT_FRAME><a href=#dom-media-can_show_current_frame>CAN_SHOW_CURRENT_FRAME</a></code>.</li>
+       <li><p id=fire-loadeddata>The user agent must <a href=#queue-a-task>queue a
+       task</a> to <a href=#fire-a-simple-event>fire a simple event</a> called <code title=event-loadeddata><a href=#event-loadeddata>loadeddata</a></code> at the element.</li>
 
-       <li><p>The <a href=#loaded-first-frame-flag>loaded-first-frame flag</a> must be set to
-       true.</li>
-
-       <li><p>The user agent must <a href=#queue-a-task>queue a task</a> to
-       <a href=#fire-a-simple-event>fire a simple event</a> called <code title=event-loadedfirstframe><a href=#event-loadedfirstframe>loadedfirstframe</a></code> at the
-       element.</li>
-
-       <li><p>The user agent must <a href=#queue-a-task>queue a task</a> to
-       <a href=#fire-a-simple-event>fire a simple event</a> called <code title=event-canshowcurrentframe><a href=#event-canshowcurrentframe>canshowcurrentframe</a></code> at
-       the element.</li>
-
       </ol></dd>
 
     </dl><p>When the user agent has completely fetched of the entire
-    <a href=#media-resource>media resource</a>, it must move on to the next step.</p>
+    <a href=#media-resource>media resource</a>, it must move on to the next
+    step. This might never happen, e.g. when streaming an infinite
+    resource such as Web radio.</p>
 
    </li>
 
    <li><p>If the fetching process completes without errors, the
    <a href=#begun-flag>begun flag</a> must be set to false, the <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> attribute must
-   be set to <code title=dom-media-LOADED><a href=#dom-media-loaded>LOADED</a></code>, and the
+   be set to <code title=dom-media-NETWORK_LOADED><a href=#dom-media-network_loaded>NETWORK_LOADED</a></code>, and the
    user agent must <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-progress-event>fire a progress
    event</a> called <code title=event-load><a href=#event-load>load</a></code> at the
    element.</li>
 
   </ol><p>If a <a href=#media-element>media element</a> whose <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> has the value
-  <code title=dom-media-EMPTY><a href=#dom-media-empty>EMPTY</a></code> is <a href=#insert-an-element-into-a-document title="insert an
-  element into a document">inserted into a document</a>, the user
-  agent must <a href=#queue-a-task>queue a task</a> that implicitly invokes the
-  <code title=dom-media-load><a href=#dom-media-load>load()</a></code> method on the <a href=#media-element>media
-  element</a>, and ignores any resulting exceptions. The <a href=#task-source>task
-  source</a> for this task is the <a href=#media-element>media element</a>'s own
-  <a href=#media-element-new-resource-task-source>media element new resource task source</a>.</p>
+  <code title=dom-media-NETWORK_EMPTY><a href=#dom-media-network_empty>NETWORK_EMPTY</a></code> is <a href=#insert-an-element-into-a-document title="insert an element into a document">inserted into a
+  document</a>, the user agent must <a href=#queue-a-task>queue a task</a> that
+  implicitly invokes the <code title=dom-media-load><a href=#dom-media-load>load()</a></code>
+  method on the <a href=#media-element>media element</a>, and ignores any resulting
+  exceptions. The <a href=#task-source>task source</a> for this task is the
+  <a href=#media-element>media element</a>'s own <a href=#media-element-new-resource-task-source>media element new resource
+  task source</a>.</p>
 
   <p>The <dfn id=dom-media-bufferingrate title=dom-media-bufferingRate><code>bufferingRate</code></dfn>
   attribute must return the average number of bits received per second
@@ -17387,8 +17380,10 @@
    value must be set to <span><code title=dom-media-playCount><a href=#dom-media-playcount>playCount</a></code>-1</span> (which will
    make the current loop the last loop).</li>
 
-   <li><p>If the <a href=#media-element>media element</a>'s <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> is in the <code title=dom-media-EMPTY><a href=#dom-media-empty>EMPTY</a></code> state or the <code title=dom-media-LOADING><a href=#dom-media-loading>LOADING</a></code> state, then the user agent
-   must at this point abort these steps.</li>
+   <li><p>If the <a href=#media-element>media element</a>'s <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> is in the <code title=dom-media-HAVE_NOTHING><a href=#dom-media-have_nothing>HAVE_NOTHING</a></code> state, then the
+   user agent must at this point abort these steps.</li>
+   <!-- because we don't have the duration yet, so many of the
+   following concepts are undefined -->
 
    <li><p>If the <code title=dom-media-currentLoop><a href=#dom-media-currentloop>currentLoop</a></code> is zero, and the
    <a href=#current-playback-position>current playback position</a> is before the <var><a href=#effective-start>effective
@@ -17421,43 +17416,53 @@
   at any particular time is the greatest value describing the state of
   the element:</p>
 
-  <dl><dt><dfn id=dom-media-data_unavailable title=dom-media-DATA_UNAVAILABLE><code>DATA_UNAVAILABLE</code></dfn> (numeric value 0)</dt>
+  <dl><dt><dfn id=dom-media-have_nothing title=dom-media-HAVE_NOTHING><code>HAVE_NOTHING</code></dfn> (numeric value 0)</dt>
 
-   <dd>No data for the <a href=#current-playback-position>current playback position</a> is
-   available. <a href=#media-element title="media element">Media elements</a> whose
-   <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> attribute
-   is less than <code title=dom-media-LOADED_FIRST_FRAME><a href=#dom-media-loaded_first_frame>LOADED_FIRST_FRAME</a></code>
-   are always in the <code title=dom-media-DATA_UNAVAILABLE><a href=#dom-media-data_unavailable>DATA_UNAVAILABLE</a></code>
+   <dd>No information regardig the <a href=#media-resource>media resource</a> is
+   available. No data for the <a href=#current-playback-position>current playback position</a>
+   is available. <a href=#media-element title="media element">Media elements</a>
+   whose <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code>
+   attribute is <code title=dom-media-NETWORK_EMPTY><a href=#dom-media-network_empty>NETWORK_EMPTY</a></code> are always in
+   the <code title=dom-media-HAVE_NOTHING><a href=#dom-media-have_nothing>HAVE_NOTHING</a></code>
    state.</dd>
 
-   <dt><dfn id=dom-media-can_show_current_frame title=dom-media-CAN_SHOW_CURRENT_FRAME><code>CAN_SHOW_CURRENT_FRAME</code></dfn> (numeric value 1)</dt>
+   <dt><dfn id=dom-media-have_metadata title=dom-media-HAVE_METADATA><code>HAVE_METADATA</code></dfn> (numeric value 1)</dt>
 
+   <dd>Enough of the resource has been obtained that the metadata
+   attributes are initialized (e.g. the length is known). The API will
+   no longer raise an exception when seeking.</dd>
+
+   <dt><dfn id=dom-media-have_some_data title=dom-media-HAVE_SOME_DATA><code>HAVE_SOME_DATA</code></dfn> (numeric value 2)</dt>
+
    <dd>Data for the immediate <a href=#current-playback-position>current playback position</a>
+   is not available, but there is at least one playback position for
+   which the <i>ready state</i> would have a value of <code title=dom-media-HAVE_CURRENT_DATA><a href=#dom-media-have_current_data>HAVE_CURRENT_DATA</a></code> or
+   greater.</dd>
+
+   <dt><dfn id=dom-media-have_current_data title=dom-media-HAVE_CURRENT_DATA><code>HAVE_CURRENT_DATA</code></dfn> (numeric value 3)</dt>
+
+   <dd>Data for the immediate <a href=#current-playback-position>current playback position</a>
    is available, but not enough data is available that the user agent
    could successfully advance the <a href=#current-playback-position>current playback
-   position</a> at all without immediately reverting to the <code title=dom-media-DATA_UNAVAILABLE><a href=#dom-media-data_unavailable>DATA_UNAVAILABLE</a></code> state. In video,
-   this corresponds to the user agent having data from the current
-   frame, but not the next frame. In audio, this corresponds to the
-   user agent only having audio up to the <a href=#current-playback-position>current playback
-   position</a>, but no further.</dd>
+   position</a> at all without immediately reverting to the <code title=dom-media-HAVE_SOME_DATA><a href=#dom-media-have_some_data>HAVE_SOME_DATA</a></code> state. For
+   example, in video this corresponds to the user agent having data
+   from the current frame, but not the next frame.</dd>
 
-   <dt><dfn id=dom-media-can_play title=dom-media-CAN_PLAY><code>CAN_PLAY</code></dfn> (numeric value 2)</dt>
+   <dt><dfn id=dom-media-have_future_data title=dom-media-HAVE_FUTURE_DATA><code>HAVE_FUTURE_DATA</code></dfn> (numeric value 4)</dt>
 
    <dd>Data for the immediate <a href=#current-playback-position>current playback position</a>
    is available, as well as enough data for the user agent to advance
    the <a href=#current-playback-position>current playback position</a> at least a little
-   without immediately reverting to the <code title=dom-media-DATA_UNAVAILABLE><a href=#dom-media-data_unavailable>DATA_UNAVAILABLE</a></code> state. In video,
-   this corresponds to the user agent having data for the current
-   frame and the next frame. In audio, this corresponds to the user
-   agent having data beyond the <a href=#current-playback-position>current playback
-   position</a>.</dd>
+   without immediately reverting to the <code title=dom-media-HAVE_SOME_DATA><a href=#dom-media-have_some_data>HAVE_SOME_DATA</a></code> state. For
+   example, In video this corresponds to the user agent having data
+   for at least the current frame and the next frame.</dd>
 
-   <dt><dfn id=dom-media-can_play_through title=dom-media-CAN_PLAY_THROUGH><code>CAN_PLAY_THROUGH</code></dfn> (numeric value 3)</dt>
+   <dt><dfn id=dom-media-have_enough_data title=dom-media-HAVE_ENOUGH_DATA><code>HAVE_ENOUGH_DATA</code></dfn> (numeric value 5)</dt>
 
    <dd>Data for the immediate <a href=#current-playback-position>current playback position</a>
    is available, as well as enough data for the user agent to advance
    the <a href=#current-playback-position>current playback position</a> at least a little
-   without immediately reverting to the <code title=dom-media-DATA_UNAVAILABLE><a href=#dom-media-data_unavailable>DATA_UNAVAILABLE</a></code> state,
+   without immediately reverting to the <code title=dom-media-HAVE_SOME_DATA><a href=#dom-media-have_some_data>HAVE_SOME_DATA</a></code> state,
    and, in addition, the user agent estimates that data is being
    fetched at a rate where the <a href=#current-playback-position>current playback position</a>,
    if it were to advance at the rate given by the <code title=dom-media-defaultPlaybackRate><a href=#dom-media-defaultplaybackrate>defaultPlaybackRate</a></code>
@@ -17465,55 +17470,68 @@
    reaches the <a href=#effective-end>effective end</a> of the <a href=#media-resource>media
    resource</a> on the last <a href=#dom-media-playcount title=dom-media-playCount>loop</a>.</dd>
 
-  </dl><p>When the ready state of a <a href=#media-element>media element</a> whose <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> is not <code title=dom-media-EMPTY><a href=#dom-media-empty>EMPTY</a></code> changes, the user agent must
-  follow the steps given below:</p>
+  </dl><p>When the ready state of a <a href=#media-element>media element</a> whose <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> is not <code title=dom-media-NETWORK_EMPTY><a href=#dom-media-network_empty>NETWORK_EMPTY</a></code> changes, the
+  user agent must follow the steps given below:</p>
 
-  <dl class=switch><dt>If the new ready state is <code title=dom-media-DATA_UNAVAILABLE><a href=#dom-media-data_unavailable>DATA_UNAVAILABLE</a></code></dt>
+  <dl class=switch><!-- going up to metadata --><dt>If the prevous ready state was <code title=dom-media-HAVE_NOTHING><a href=#dom-media-have_nothing>HAVE_NOTHING</a></code>, and the new
+   ready state is <code title=dom-media-HAVE_METADATA><a href=#dom-media-have_metadata>HAVE_METADATA</a></code></dt>
 
-   <dd><p>The user agent must <a href=#fire-a-simple-event>fire a simple event</a> called
-   <code title=event-dataunavailable><a href=#event-dataunavailable>dataunavailable</a></code> at the
-   element.</dd>
+   <dd>
 
-   <dt>If the new ready state is <code title=dom-media-CAN_SHOW_CURRENT_FRAME><a href=#dom-media-can_show_current_frame>CAN_SHOW_CURRENT_FRAME</a></code></dt>
+    <p class=note>A <code title=event-loadedmetadata><a href=#event-loadedmetadata>loadedmetadata</a></code> DOM event <a href=#fire-loadedmetadata>will be fired</a> as part of the <code title=dom-event-load>load()</code> algorithm.</p>
 
+   </dd>
+
+   <!-- going up to current -->
+   <dt>If the prevous ready state was <code title=dom-media-HAVE_METADATA><a href=#dom-media-have_metadata>HAVE_METADATA</a></code>, and the new
+   ready state is <code title=dom-media-HAVE_CURRENT_DATA><a href=#dom-media-have_current_data>HAVE_CURRENT_DATA</a></code></dt>
+
    <dd>
 
-    <p>If the element's <a href=#loaded-first-frame-flag>loaded-first-frame flag</a> is true,
-    the user agent must <a href=#fire-a-simple-event>fire a simple event</a> called <code title=event-canshowcurrentframe><a href=#event-canshowcurrentframe>canshowcurrentframe</a></code>
-    event.</p>
+    <p class=note>A <code title=event-loadeddata><a href=#event-loadeddata>loadeddata</a></code>
+    DOM event <a href=#fire-loadeddata>will be fired</a> as part of
+    the <code title=dom-event-load>load()</code> algorithm.</p>
 
-    <p class=note>The first time the <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> attribute
-    switches to this value, the <a href=#loaded-first-frame-flag>loaded-first-frame flag</a>
-    is false, and the event is fired <a href=#handling-first-frame-available>by the algorithm described
-    above</a> for the <code title=dom-media-load><a href=#dom-media-load>load()</a></code>
-    method, in conjunction with other steps.</p>
+   </dd>
 
+   <!-- going down -->
+   <dt>If the prevous ready state was <code title=dom-media-HAVE_FUTURE_DATA><a href=#dom-media-have_future_data>HAVE_FUTURE_DATA</a></code> or more,
+   and the new ready state is <code title=dom-media-HAVE_CURRENT_DATA><a href=#dom-media-have_current_data>HAVE_CURRENT_DATA</a></code> or
+   less</dt>
+
+   <dd>
+
+    <p class=note>A <code title=event-waiting><a href=#event-waiting>waiting</a></code> DOM
+    event <a href=#fire-waiting-when-waiting>can be fired</a>,
+    depending on the current state of playback.</p>
+
    </dd>
 
-   <dt>If the new ready state is <code title=dom-media-CAN_PLAY><a href=#dom-media-can_play>CAN_PLAY</a></code></dt>
+   <!-- going up to future -->
+   <dt>If the prevous ready state was <code title=dom-media-HAVE_CURRENT_DATA><a href=#dom-media-have_current_data>HAVE_CURRENT_DATA</a></code> or
+   less, and the new ready state is <code title=dom-media-HAVE_FUTURE_DATA><a href=#dom-media-have_future_data>HAVE_FUTURE_DATA</a></code> or
+   more</dt>
 
    <dd><p>The user agent must <a href=#fire-a-simple-event>fire a simple event</a> called
    <code title=event-canplay><a href=#event-canplay>canplay</a></code>.</dd>
 
-   <dt>If the new ready state is <code title=dom-media-CAN_PLAY_THROUGH><a href=#dom-media-can_play_through>CAN_PLAY_THROUGH</a></code></dt>
+   <dt>If the new ready state is <code title=dom-media-HAVE_ENOUGH_DATA><a href=#dom-media-have_enough_data>HAVE_ENOUGH_DATA</a></code></dt>
 
    <dd><p>The user agent must <a href=#fire-a-simple-event>fire a simple event</a> called
-   <code title=event-canplaythrough><a href=#event-canplaythrough>canplaythrough</a></code> event. If
-   the <a href=#autoplaying-flag>autoplaying flag</a> is true, and the <code title=dom-media-paused><a href=#dom-media-paused>paused</a></code> attribute is true, and the
+   <code title=event-canplaythrough><a href=#event-canplaythrough>canplaythrough</a></code> event.
+   <!-- XXX make sure it fires after canplay when fixing queueing here -->
+   If the
+   <a href=#autoplaying-flag>autoplaying flag</a> is true, and the <code title=dom-media-paused><a href=#dom-media-paused>paused</a></code> attribute is true, and the
    <a href=#media-element>media element</a> has an <code title=attr-media-autoplay><a href=#attr-media-autoplay>autoplay</a></code> attribute specified,
    then the user agent must also set the <code title=dom-media-paused><a href=#dom-media-paused>paused</a></code> attribute to false and
    <a href=#fire-a-simple-event>fire a simple event</a> called <code title=event-play><a href=#event-play>play</a></code>.</dd>
 
   </dl><p class=note>It is possible for the ready state of a media
   element to jump between these states discontinuously. For example,
-  the state of a media element whose <a href=#loaded-first-frame-flag>loaded-first-frame
-  flag</a> is false can jump straight from <code title=dom-media-DATA_UNAVAILABLE><a href=#dom-media-data_unavailable>DATA_UNAVAILABLE</a></code> to <code title=dom-media-CAN_PLAY_THROUGH><a href=#dom-media-can_play_through>CAN_PLAY_THROUGH</a></code> without
-  passing through the <code title=dom-media-CAN_SHOW_CURRENT_FRAME><a href=#dom-media-can_show_current_frame>CAN_SHOW_CURRENT_FRAME</a></code>
-  and <code title=dom-media-CAN_PLAY><a href=#dom-media-can_play>CAN_PLAY</a></code> states, and
-  thus without firing the <code title=event-canshowcurrentframe><a href=#event-canshowcurrentframe>canshowcurrentframe</a></code> and
-  <code title=event-canplay><a href=#event-canplay>canplay</a></code> events. The only state
-  that is guaranteed to be reached is the <code title=dom-media-CAN_SHOW_CURRENT_FRAME><a href=#dom-media-can_show_current_frame>CAN_SHOW_CURRENT_FRAME</a></code>
-  state, which is reached as part of the <code title=dom-media-load><a href=#dom-media-load>load()</a></code> method's processing.</p>
+  the state of a media element can jump straight from <code title=dom-media-HAVE_SOME_DATA><a href=#dom-media-have_some_data>HAVE_SOME_DATA</a></code> to <code title=dom-media-HAVE_ENOUGH_DATA><a href=#dom-media-have_enough_data>HAVE_ENOUGH_DATA</a></code> without
+  passing through the <code title=dom-media-HAVE_CURRENT_DATA><a href=#dom-media-have_current_data>HAVE_CURRENT_DATA</a></code> and
+  <code title=dom-media-HAVE_FUTURE_DATA><a href=#dom-media-have_future_data>HAVE_FUTURE_DATA</a></code>
+  states.</p>
 
   <p>The <dfn id=dom-media-readystate title=dom-media-readyState><code>readyState</code></dfn> DOM
   attribute must, on getting, return the value described above that
@@ -17592,15 +17610,15 @@
   <p>A <a href=#media-element>media element</a> is said to be <dfn id=potentially-playing>potentially
   playing</dfn> when its <code title=dom-media-paused><a href=#dom-media-paused>paused</a></code>
   attribute is false, the <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> attribute is either
-  <code title=dom-media-CAN_PLAY><a href=#dom-media-can_play>CAN_PLAY</a></code> or <code title=dom-media-CAN_PLAY_THROUGH><a href=#dom-media-can_play_through>CAN_PLAY_THROUGH</a></code>, the
-  element has not <a href=#ended-playback>ended playback</a>, playback has not
+  <code title=dom-media-HAVE_FUTURE_DATA><a href=#dom-media-have_future_data>HAVE_FUTURE_DATA</a></code> or
+  <code title=dom-media-HAVE_ENOUGH_DATA><a href=#dom-media-have_enough_data>HAVE_FUTURE_DATA</a></code>,
+  the element has not <a href=#ended-playback>ended playback</a>, playback has not
   <a href=#stopped-due-to-errors>stopped due to errors</a>, and the element has not
   <a href=#paused-for-user-interaction>paused for user interaction</a>.</p>
 
   <p>A <a href=#media-element>media element</a> is said to have <dfn id=ended-playback>ended
-  playback</dfn> when the element's <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> attribute is
-  <code title=dom-media-LOADED_METADATA><a href=#dom-media-loaded_metadata>LOADED_METADATA</a></code> or
-  greater, the <a href=#current-playback-position>current playback position</a> is equal to the
+  playback</dfn> when the element's <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> attribute is <code title=dom-media-HAVE_METADATA><a href=#dom-media-have_metadata>HAD_METADATA</a></code> or greater, the
+  <a href=#current-playback-position>current playback position</a> is equal to the
   <var><a href=#effective-end>effective end</a></var> of the <a href=#media-resource>media resource</a>, and the
   <code title=dom-media-currentLoop><a href=#dom-media-currentloop>currentLoop</a></code> attribute is
   equal to <span><code title=dom-media-playCount><a href=#dom-media-playcount>playCount</a></code>-1</span>.</p>
@@ -17610,19 +17628,19 @@
   <a href=#ended-playback>ended playback</a>, and false otherwise.</p>
 
   <p>A <a href=#media-element>media element</a> is said to have <dfn id=stopped-due-to-errors>stopped due to
-  errors</dfn> when the element's <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> attribute is
-  <code title=dom-media-LOADED_METADATA><a href=#dom-media-loaded_metadata>LOADED_METADATA</a></code> or
-  greater, and the user agent <a href=#non-fatal-media-error>encounters a non-fatal error</a>
-  during the processing of the <a href=#media-data>media data</a>, and due to
-  that error, is not able to play the content at the <a href=#current-playback-position>current
-  playback position</a>.</p>
+  errors</dfn> when the element's <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> attribute is <code title=dom-media-HAVE_METADATA><a href=#dom-media-have_metadata>HAVE_METADATA</a></code> or greater, and
+  the user agent <a href=#non-fatal-media-error>encounters a
+  non-fatal error</a> during the processing of the <a href=#media-data>media
+  data</a>, and due to that error, is not able to play the content
+  at the <a href=#current-playback-position>current playback position</a>.</p>
 
   <p>A <a href=#media-element>media element</a> is said to have <dfn id=paused-for-user-interaction>paused for user
   interaction</dfn> when its <code title=dom-media-paused><a href=#dom-media-paused>paused</a></code> attribute is false, the <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> attribute is either
-  <code title=dom-media-CAN_PLAY><a href=#dom-media-can_play>CAN_PLAY</a></code> or <code title=dom-media-CAN_PLAY_THROUGH><a href=#dom-media-can_play_through>CAN_PLAY_THROUGH</a></code> and the
-  user agent has reached a point in the <a href=#media-resource>media resource</a>
-  where the user has to make a selection for the resource to
-  continue.</p>
+  <code title=dom-media-HAVE_FUTURE_DATA><a href=#dom-media-have_future_data>HAVE_FUTURE_DATA</a></code> or
+  <code title=dom-media-HAVE_ENOUGH_DATA><a href=#dom-media-have_enough_data>HAVE_ENOUGH_DATA</a></code> and
+  the user agent has reached a point in the <a href=#media-resource>media
+  resource</a> where the user has to make a selection for the
+  resource to continue.</p>
 
   <p>It is possible for a <a href=#media-element>media element</a> to have both
   <a href=#ended-playback>ended playback</a> and <a href=#paused-for-user-interaction>paused for user
@@ -17636,14 +17654,15 @@
   <p id=fire-waiting-when-waiting>When a <a href=#media-element>media element</a>
   that is <a href=#potentially-playing>potentially playing</a> stops playing because its
   <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> attribute
-  changes to a value lower than <code title=dom-media-CAN_PLAY><a href=#dom-media-can_play>CAN_PLAY</a></code>, without the element
-  having <a href=#ended-playback>ended playback</a>, or playback having <a href=#stopped-due-to-errors>stopped
-  due to errors</a>, or playback having <a href=#paused-for-user-interaction>paused for user
-  interaction</a>, or the <a href=#dom-media-seek title=dom-media-seek>seeking
-  algorithm</a> being invoked, the user agent must <a href=#queue-a-task>queue a
-  task</a> to <a href=#fire-a-simple-event>fire a simple event</a> called <code title=event-timeupdate><a href=#event-timeupdate>timeupdate</a></code> at the element, and
-  <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple event</a> called
-  <code title=event-waiting><a href=#event-waiting>waiting</a></code> at the element.</p>
+  changes to a value lower than <code title=dom-media-HAVE_FUTURE_DATA><a href=#dom-media-have_future_data>HAVE_FUTURE_DATA</a></code>, without
+  the element having <a href=#ended-playback>ended playback</a>, or playback having
+  <a href=#stopped-due-to-errors>stopped due to errors</a>, or playback having <a href=#paused-for-user-interaction>paused
+  for user interaction</a>, or the <a href=#dom-media-seek title=dom-media-seek>seeking algorithm</a> being invoked, the
+  user agent must <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple
+  event</a> called <code title=event-timeupdate><a href=#event-timeupdate>timeupdate</a></code>
+  at the element, and <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple
+  event</a> called <code title=event-waiting><a href=#event-waiting>waiting</a></code> at
+  the element.</p>
 
   <p>When <code title=dom-media-currentLoop><a href=#dom-media-currentloop>currentLoop</a></code> is
   less than <span><code title=dom-media-playCount><a href=#dom-media-playcount>playCount</a></code>-1</span> and the
@@ -17707,7 +17726,7 @@
   must run the following steps.</p>
 
   <ol><li><p>If the <a href=#media-element>media element</a>'s <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> attribute has
-   the value <a href=#dom-media-empty title=dom-media-EMPTY>EMPTY</a>, then the user
+   the value <code title=dom-media-NETWORK_EMPTY><a href=#dom-media-network_empty>NETWORK_EMPTY</a></code>, then the user
    agent must invoke the <code title=dom-media-load><a href=#dom-media-load>load()</a></code>
    method and wait for it to return. If that raises an exception, that
    exception must be reraised by the <code title=dom-media-play><a href=#dom-media-play>play()</a></code> method.</li>
@@ -17755,7 +17774,7 @@
   method is invoked, the user agent must run the following steps:</p>
 
   <ol><li><p>If the <a href=#media-element>media element</a>'s <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> attribute has
-   the value <a href=#dom-media-empty title=dom-media-EMPTY>EMPTY</a>, then the user
+   the value <code title=dom-media-NETWORK_EMPTY><a href=#dom-media-network_empty>NETWORK_EMPTY</a></code>, then the user
    agent must invoke the <code title=dom-media-load><a href=#dom-media-load>load()</a></code>
    method and wait for it to return. If that raises an exception, that
    exception must be reraised by the <code title=dom-media-play><a href=#dom-media-play>pause()</a></code> method.</li>
@@ -17790,17 +17809,13 @@
   playback rate) the client doesn't actually have to drop or
   interpolate any frames.</p>
 
-  <p>If the <code title=dom-media-playbackRate><a href=#dom-media-playbackrate>playbackRate</a></code>
-  is positive and is a rate at which audio can be played back, and if
-  the audio channels are not <code title=dom-media-muted><a href=#dom-media-muted>muted</a></code>, then the audio component of
-  the <a href=#media-resource>media resource</a> should be played synchronised with
-  the <a href=#current-playback-position>current playback position</a>. If this rate is not 1.0,
-  the user agent may apply pitch adjustments to the audio as necessary
-  to render it faithfully. When the <code title=dom-media-playbackRate><a href=#dom-media-playbackrate>playbackRate</a></code> is negative
-  (playback is backwards), the corresponding audio must not play. When
-  the <code title=dom-media-playbackRate><a href=#dom-media-playbackrate>playbackRate</a></code> is so
-  low or so high that the user agent cannot play audio usefully, the
-  corresponding audio must not play.</p>
+  <p>When the <code title=dom-media-playbackRate><a href=#dom-media-playbackrate>playbackRate</a></code>
+  is negative (playback is backwards), any corresponding audio must be
+  muted. When the <code title=dom-media-playbackRate><a href=#dom-media-playbackrate>playbackRate</a></code> is so low or so
+  high that the user agent cannot play audio usefully, the
+  corresponding audio must also be muted. If the <code title=dom-media-playbackRate><a href=#dom-media-playbackrate>playbackRate</a></code> is not 1.0, the
+  user agent may apply pitch adjustments to the audio as necessary to
+  render it faithfully.</p>
 
   <p><a href=#media-element title="media element">Media elements</a> that are
   <a href=#potentially-playing>potentially playing</a> while not <span>in a
@@ -17885,8 +17900,8 @@
   </ol><p>When a <a href=#media-element>media element</a> is <span>removed from a
   <code>Document</code><!-- XXX xref removed --></span>, if the
   <a href=#media-element>media element</a>'s <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> attribute has a
-  value other than <a href=#dom-media-empty title=dom-media-EMPTY>EMPTY</a> then the
-  user agent must act as if the <code title=dom-media-pause><a href=#dom-media-pause>pause()</a></code> method had been invoked.</p>
+  value other than <code title=dom-media-NETWORK_EMPTY><a href=#dom-media-network_empty>NETWORK_EMPTY</a></code> then the user
+  agent must act as if the <code title=dom-media-pause><a href=#dom-media-pause>pause()</a></code> method had been invoked.</p>
 
   <p class=note>If the <a href=#media-element>media element</a>'s
   <code>Document</code> stops being an active document, then the
@@ -17905,11 +17920,10 @@
   playback position</var> in the <a href=#media-resource>media resource</a>, it means
   that the user agent must run the following steps:</p>
 
-  <ol><li><p>If the <a href=#media-element>media element</a>'s <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> is less than
-   <code title=dom-media-LOADED_METADATA><a href=#dom-media-loaded_metadata>LOADED_METADATA</a></code>,
-   then the user agent must raise an <code>INVALID_STATE_ERR</code>
-   exception (if the seek was in response to a DOM method call or
-   setting of a DOM attribute), and abort these steps.</li>
+  <ol><li><p>If the <a href=#media-element>media element</a>'s <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> is <code title=dom-media-HAVE_NOTHING><a href=#dom-media-have_nothing>HAVE_NOTHING</a></code>, then the user
+   agent must raise an <code>INVALID_STATE_ERR</code> exception (if
+   the seek was in response to a DOM method call or setting of a DOM
+   attribute), and abort these steps.</li>
 
    <li><p>If <code title=dom-media-currentLoop><a href=#dom-media-currentloop>currentLoop</a></code> is
    0, let <var title="">min</var> be the <var><a href=#effective-start>effective
@@ -17944,10 +17958,10 @@
    <li><p>If the <a href=#media-element>media element</a> was <a href=#potentially-playing>potentially
    playing</a> immediately before it started seeking, but seeking
    caused its <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code>
-   attribute to change to a value lower than <code title=dom-media-CAN_PLAY><a href=#dom-media-can_play>CAN_PLAY</a></code>, the user agent must
-   <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple event</a>
-   called <code title=event-waiting><a href=#event-waiting>waiting</a></code> at the
-   element.</li>
+   attribute to change to a value lower than <code title=dom-media-HAVE_FUTURE_FRAME>HAVE_FUTURE_FRAME</code>, the
+   user agent must <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple
+   event</a> called <code title=event-waiting><a href=#event-waiting>waiting</a></code> at
+   the element.</li>
 
    <li><p>If, when it reaches this step, the user agent has still not
    established whether or not the <a href=#media-data>media data</a> for the <var title="">new playback position</var> is available, and, if it is,
@@ -17987,6 +18001,11 @@
   as the time of the first frame plus the <code title=dom-media-duration><a href=#dom-media-duration>duration</a></code> attribute's value (which
   would equal the time of the last frame).</p>
 
+  <p class=note>The range might be continuously changing, e.g. if
+  the user agent is buffering a sliding window on an infinite
+  stream. This is the behavior seen with DVRs viewing live TV, for
+  instance.</p>
+
   <p><a href=#media-resource title="media resource">Media resources</a> might be
   internally scripted or interactive. Thus, a <a href=#media-element>media
   element</a> could play in a non-linear fashion. If this happens,
@@ -18171,42 +18190,39 @@
    <tbody><tr><td><dfn id=event-loadstart title=event-loadstart><code>loadstart</code></dfn>
      <td><code>ProgressEvent</code> <a href=#refsPROGRESS>[PROGRESS]</a>
      <td>The user agent begins fetching the <a href=#media-data>media data</a>, synchronously during the <code title=dom-media-load><a href=#dom-media-load>load()</a></code> method call.
-     <td><code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> equals <code title=dom-media-LOADING><a href=#dom-media-loading>LOADING</a></code>
+     <td><code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> equals <code title=dom-media-NETWORK_LOADING><a href=#dom-media-network_loading>NETWORK_LOADING</a></code>
     <tr><td><dfn id=event-progress title=event-progress><code>progress</code></dfn>
      <td><code>ProgressEvent</code> <a href=#refsPROGRESS>[PROGRESS]</a>
      <td>The user agent is fetching <a href=#media-data>media data</a>.
-     <td><code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> is more than <code title=dom-media-EMPTY><a href=#dom-media-empty>EMPTY</a></code> and less than <code title=dom-media-LOADED><a href=#dom-media-loaded>LOADED</a></code>
-    <tr><td><dfn id=event-loadedmetadata title=event-loadedmetadata><code>loadedmetadata</code></dfn>
-     <td><code>Event</code>
-     <td>The user agent is fetching <a href=#media-data>media data</a>, and the <a href=#media-resource>media resource</a>'s metadata has just been received.
-     <td><code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> equals <code title=dom-media-LOADED_METADATA><a href=#dom-media-loaded_metadata>LOADED_METADATA</a></code>
-    <tr><td><dfn id=event-loadedfirstframe title=event-loadedfirstframe><code>loadedfirstframe</code></dfn>
-     <td><code>Event</code>
-     <td>The user agent is fetching <a href=#media-data>media data</a>, and the <a href=#media-resource>media resource</a>'s first frame has just been received.
-     <td><code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> equals <code title=dom-media-LOADED_FIRST_FRAME><a href=#dom-media-loaded_first_frame>LOADED_FIRST_FRAME</a></code>
+     <td><code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> equals <code title=dom-media-NETWORK_LOADING><a href=#dom-media-network_loading>NETWORK_LOADING</a></code>
+    <tr><td><dfn id=event-suspend title=event-suspend><code>suspend</code></dfn>
+     <td><code>ProgressEvent</code> <a href=#refsPROGRESS>[PROGRESS]</a>
+     <td>The user agent is intentionally not currently fetching <a href=#media-data>media data</a>, but does not have the entire <a href=#media-resource>media resource</a> downloaded.
+     <td><code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> equals <code title=dom-media-NETWORK_IDLE><a href=#dom-media-network_idle>NETWORK_IDLE</a></code>
     <tr><td><dfn id=event-load title=event-load><code>load</code></dfn>
      <td><code>ProgressEvent</code> <a href=#refsPROGRESS>[PROGRESS]</a>
      <td>The user agent finishes fetching the entire <a href=#media-resource>media resource</a>.
-     <td><code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> equals <code title=dom-media-LOADED><a href=#dom-media-loaded>LOADED</a></code>
+     <td><code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> equals <code title=dom-media-NETWORK_LOADED><a href=#dom-media-network_loaded>NETWORK_LOADED</a></code>
     <tr><td><dfn id=event-abort title=event-abort><code>abort</code></dfn>
      <td><code>ProgressEvent</code> <a href=#refsPROGRESS>[PROGRESS]</a>
      <td>The user agent stops fetching the <a href=#media-data>media data</a> before it is completely downloaded. This can be fired synchronously during the <code title=dom-media-load><a href=#dom-media-load>load()</a></code> method call.
      <td><code title=dom-media-error><a href=#dom-media-error>error</a></code> is an object with the code <code title=dom-MediaError-MEDIA_ERR_ABORTED><a href=#dom-mediaerror-media_err_aborted>MEDIA_ERR_ABORTED</a></code>.
-         <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> equals either <code title=dom-media-EMPTY><a href=#dom-media-empty>EMPTY</a></code> or <code title=dom-media-LOADED><a href=#dom-media-loaded>LOADED</a></code>, depending on when the download was aborted.
+         <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> equals either <code title=dom-media-NETWORK_EMPTY><a href=#dom-media-network_empty>NETWORK_EMPTY</a></code> or <code title=dom-media-NETWORK_LOADED><a href=#dom-media-network_loaded>NETWORK_LOADED</a></code>, depending on when the download was aborted.
     <tr><td><dfn id=event-error title=event-error><code>error</code></dfn>
      <td><code>ProgressEvent</code> <a href=#refsPROGRESS>[PROGRESS]</a>
      <td>An error occurs while fetching the <a href=#media-data>media data</a>.
      <td><code title=dom-media-error><a href=#dom-media-error>error</a></code> is an object with the code <code title=dom-MediaError-MEDIA_ERR_NETWORK_ERROR>MEDIA_ERR_NETWORK_ERROR</code> or higher.
-         <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> equals either <code title=dom-media-EMPTY><a href=#dom-media-empty>EMPTY</a></code> or <code title=dom-media-LOADED><a href=#dom-media-loaded>LOADED</a></code>, depending on when the download was aborted.
+         <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> equals either <code title=dom-media-NETWORK_EMPTY><a href=#dom-media-network_empty>NETWORK_EMPTY</a></code> or <code title=dom-media-NETWORK_LOADED><a href=#dom-media-network_loaded>NETWORK_LOADED</a></code>, depending on when the download was aborted.
     <tr><td><dfn id=event-emptied title=event-emptied><code>emptied</code></dfn>
      <td><code>Event</code>
-     <td>A <a href=#media-element>media element</a> whose <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> was previously not in the <code title=dom-media-EMPTY><a href=#dom-media-empty>EMPTY</a></code> state has just switched to that state (either because of a fatal error during load that's about to be reported, or because the <code title=dom-media-load><a href=#dom-media-load>load()</a></code> method was reinvoked, in which case it is fired synchronously during the <code title=dom-media-load><a href=#dom-media-load>load()</a></code> method call).
-     <td><code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> is <code title=dom-media-EMPTY><a href=#dom-media-empty>EMPTY</a></code>; all the DOM attributes are in their initial states.
+     <td>A <a href=#media-element>media element</a> whose <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> was previously not in the <code title=dom-media-NETWORK_EMPTY><a href=#dom-media-network_empty>NETWORK_EMPTY</a></code> state has just switched to that state (either because of a fatal error during load that's about to be reported, or because the <code title=dom-media-load><a href=#dom-media-load>load()</a></code> method was reinvoked, in which case it is fired synchronously during the <code title=dom-media-load><a href=#dom-media-load>load()</a></code> method call).
+     <td><code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> is <code title=dom-media-NETWORK_EMPTY><a href=#dom-media-network_empty>NETWORK_EMPTY</a></code>; all the DOM attributes are in their initial states.
     <tr><td><dfn id=event-stalled title=event-stalled><code>stalled</code></dfn>
      <td><code>ProgressEvent</code>
      <td>The user agent is trying to fetch <a href=#media-data>media data</a>, but data is unexpectedly not forthcoming.
-     <td>
-    <tr><td><dfn id=event-play title=event-play><code>play</code></dfn>
+     <td><code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> is <code title=dom-media-NETWORK_LOADING><a href=#dom-media-network_loading>NETWORK_LOADING</a></code>.
+
+   <tbody><tr><td><dfn id=event-play title=event-play><code>play</code></dfn>
      <td><code>Event</code>
      <td>Playback has begun. Fired after the <code title=dom-media-play><a href=#dom-media-play>play</a></code> method has returned.
      <td><code title=dom-media-paused><a href=#dom-media-paused>paused</a></code> is newly false.
@@ -18214,12 +18230,30 @@
      <td><code>Event</code>
      <td>Playback has been paused. Fired after the <code title=dom-media-pause><a href=#dom-media-pause>pause</a></code> method has returned.
      <td><code title=dom-media-paused><a href=#dom-media-paused>paused</a></code> is newly true.
+
+   <tbody><tr><td><dfn id=event-loadedmetadata title=event-loadedmetadata><code>loadedmetadata</code></dfn>
+     <td><code>Event</code>
+     <td>The user agent has just received the metadata, such as duration or dimensions, for the <a href=#media-resource>media resource</a>.
+     <td><code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> is newly equal to <code title=dom-media-HAVE_METADATA><a href=#dom-media-have_metadata>HAVE_METADATA</a></code> or greater for the first time.
+    <tr><td><dfn id=event-loadeddata title=event-loadeddata><code>loadeddata</code></dfn>
+     <td><code>Event</code>
+     <td>The user agent can render the <a href=#media-data>media data</a> at the <a href=#current-playback-position>current playback position</a> for the first time.
+     <td><code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> newly increased to <code title=dom-media-HAVE_CURRENT_DATA><a href=#dom-media-have_current_data>HAVE_CURRENT_DATA</a></code> or greater for the first time.
     <tr><td><dfn id=event-waiting title=event-waiting><code>waiting</code></dfn>
      <td><code>Event</code>
      <td>Playback has stopped because the next frame is not available, but the user agent expects that frame to become available in due course.
-     <td><code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> is either <code title=dom-media-DATA_UNAVAILABLE><a href=#dom-media-data_unavailable>DATA_UNAVAILABLE</a></code> or <code title=dom-media-CAN_SHOW_CURRENT_FRAME><a href=#dom-media-can_show_current_frame>CAN_SHOW_CURRENT_FRAME</a></code>, and <code title=dom-media-paused><a href=#dom-media-paused>paused</a></code> is false. Either <code title=dom-media-seeking><a href=#dom-media-seeking>seeking</a></code> is true, or the <a href=#current-playback-position>current playback position</a> is not contained in any of the ranges in <code title=dom-media-buffered><a href=#dom-media-buffered>buffered</a></code>. It is possible for playback to stop for two other reasons without <code title=dom-media-paused><a href=#dom-media-paused>paused</a></code> being false, but those two reasons do not fire this event: maybe <a href=#ended-playback title="ended playback">playback ended</a>, or playback <a href=#stopped-due-to-errors>stopped due to errors</a>.
-    <tr><td><dfn id=event-seeking title=event-seeking><code>seeking</code></dfn>
+     <td><code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> is newly equal to or less than <code title=dom-media-HAVE_CURRENT_DATA><a href=#dom-media-have_current_data>HAVE_CURRENT_DATA</a></code>, and <code title=dom-media-paused><a href=#dom-media-paused>paused</a></code> is false. Either <code title=dom-media-seeking><a href=#dom-media-seeking>seeking</a></code> is true, or the <a href=#current-playback-position>current playback position</a> is not contained in any of the ranges in <code title=dom-media-buffered><a href=#dom-media-buffered>buffered</a></code>. It is possible for playback to stop for two other reasons without <code title=dom-media-paused><a href=#dom-media-paused>paused</a></code> being false, but those two reasons do not fire this event: maybe <a href=#ended-playback title="ended playback">playback ended</a>, or playback <a href=#stopped-due-to-errors>stopped due to errors</a>.
+    <tr><td><dfn id=event-canplay title=event-canplay><code>canplay</code></dfn>
      <td><code>Event</code>
+     <td>The user agent can resume playback of the <a href=#media-data>media data</a>, but estimates that if playback were to be started now, the <a href=#media-resource>media resource</a> could not be rendered at the current playback rate up to its end without having to stop for further buffering of content.
+     <td><code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> newly increased to <code title=dom-media-HAVE_FUTURE_DATA><a href=#dom-media-have_future_data>HAVE_FUTURE_DATA</a></code> or greater.
+    <tr><td><dfn id=event-canplaythrough title=event-canplaythrough><code>canplaythrough</code></dfn>
+     <td><code>Event</code>
+     <td>The user agent estimates that if playback were to be started now, the <a href=#media-resource>media resource</a> could be rendered at the current playback rate all the way to its end without having to stop for further buffering.
+     <td><code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> is newly equal to <code title=dom-media-HAVE_ENOUGH_DATA><a href=#dom-media-have_enough_data>HAVE_ENOUGH_DATA</a></code>.
+
+   <tbody><tr><td><dfn id=event-seeking title=event-seeking><code>seeking</code></dfn>
+     <td><code>Event</code>
      <td>The <code title=dom-media-seeking><a href=#dom-media-seeking>seeking</a></code> DOM attribute changed to true and the seek operation is taking long enough that the user agent has time to fire the event.
      <td>
     <tr><td><dfn id=event-seeked title=event-seeked><code>seeked</code></dfn>
@@ -18234,24 +18268,9 @@
      <td><code>Event</code>
      <td>Playback has stopped because the end of the <a href=#media-resource>media resource</a> was reached.
      <td><code title=dom-media-currentTime><a href=#dom-media-currenttime>currentTime</a></code> equals the <var><a href=#effective-end>effective end</a></var>; <code title=dom-media-ended><a href=#dom-media-ended>ended</a></code> is true.
-    <tr><td><dfn id=event-dataunavailable title=event-dataunavailable><code>dataunavailable</code></dfn>
+
+   <tbody><tr><td><dfn id=event-ratechange title=event-ratechange><code>ratechange</code></dfn>
      <td><code>Event</code>
-     <td>The user agent cannot render the data at the <a href=#current-playback-position>current playback position</a> because data for the current frame is not immediately available.
-     <td>The <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> attribute is newly equal to <code title=DATA_UNAVAILABLE>DATA_UNAVAILABLE</code>.
-    <tr><td><dfn id=event-canshowcurrentframe title=event-canshowcurrentframe><code>canshowcurrentframe</code></dfn>
-     <td><code>Event</code>
-     <td>The user agent cannot render the data after the <a href=#current-playback-position>current playback position</a> because data for the next frame is not immediately available.
-     <td>The <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> attribute is newly equal to <code title=dom-media-CAN_SHOW_CURRENT_FRAME><a href=#dom-media-can_show_current_frame>CAN_SHOW_CURRENT_FRAME</a></code>.
-    <tr><td><dfn id=event-canplay title=event-canplay><code>canplay</code></dfn>
-     <td><code>Event</code>
-     <td>The user agent can resume playback of the <a href=#media-data>media data</a>, but estimates that if playback were to be started now, the <a href=#media-resource>media resource</a> could not be rendered at the current playback rate up to its end without having to stop for further buffering of content.
-     <td>The <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> attribute is newly equal to <code title=dom-media-CAN_PLAY><a href=#dom-media-can_play>CAN_PLAY</a></code>.
-    <tr><td><dfn id=event-canplaythrough title=event-canplaythrough><code>canplaythrough</code></dfn>
-     <td><code>Event</code>
-     <td>The user agent estimates that if playback were to be started now, the <a href=#media-resource>media resource</a> could be rendered at the current playback rate all the way to its end without having to stop for further buffering.
-     <td>The <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> attribute is newly equal to <code title=dom-media-CAN_PLAY_THROUGH><a href=#dom-media-can_play_through>CAN_PLAY_THROUGH</a></code>.
-    <tr><td><dfn id=event-ratechange title=event-ratechange><code>ratechange</code></dfn>
-     <td><code>Event</code>
      <td>Either the <code title=dom-media-defaultPlaybackRate><a href=#dom-media-defaultplaybackrate>defaultPlaybackRate</a></code> or the <code title=dom-media-playbackRate><a href=#dom-media-playbackrate>playbackRate</a></code> attribute has just been updated.
      <td>
     <tr><td><dfn id=event-durationchange title=event-durationchange><code>durationchange</code></dfn>

Modified: source
===================================================================
--- source	2008-10-13 22:23:42 UTC (rev 2329)
+++ source	2008-10-15 00:26:52 UTC (rev 2330)
@@ -17153,10 +17153,9 @@
   <hr>
 
   <p>When no video data is available (the element's <code
-  title="dom-media-networkState">networkState</code> attribute is
-  either <code title="dom-media-EMPTY">EMPTY</code>, <code
-  title="dom-media-LOADING">LOADING</code>, or <code
-  title="dom-media-LOADED_METADATA">LOADED_METADATA</code>),
+  title="dom-media-readyState">readyState</code> attribute is either
+  <code title="dom-media-HAVE_NOTHING">HAVE_NOTHING</code> or <code
+  title="dom-media-HAVE_METADATA">HAVE_METADATA</code>),
   <code>video</code> elements represent either the <span>poster
   frame</span>, or nothing.</p>
 
@@ -17658,9 +17657,9 @@
   <p>If a <code>source</code> element is inserted into a <span>media
   element</span> that is already in a document and whose <code
   title="dom-media-networkState">networkState</code> is in the <code
-  title="dom-media-EMPTY">EMPTY</code> state, the user agent must
-  <span>queue a task</span> that implicitly invokes the <code
-  title="dom-media-load">load()</code> method on the <span>media
+  title="dom-media-NETWORK_EMPTY">NETWORK_EMPTY</code> state, the user
+  agent must <span>queue a task</span> that implicitly invokes the
+  <code title="dom-media-load">load()</code> method on the <span>media
   element</span>, and ignores any resulting exceptions. The <span>task
   source</span> for this task is the <span>media element</span>'s own
   <span>media element new resource task source</span>.</p>
@@ -17693,11 +17692,10 @@
   // network state
            attribute DOMString <span title="dom-media-src">src</span>;
   readonly attribute DOMString <span title="dom-media-currentSrc">currentSrc</span>;
-  const unsigned short <span title="dom-media-EMPTY">EMPTY</span> = 0;
-  const unsigned short <span title="dom-media-LOADING">LOADING</span> = 1;
-  const unsigned short <span title="dom-media-LOADED_METADATA">LOADED_METADATA</span> = 2;
-  const unsigned short <span title="dom-media-LOADED_FIRST_FRAME">LOADED_FIRST_FRAME</span> = 3;
-  const unsigned short <span title="dom-media-LOADED">LOADED</span> = 4;
+  const unsigned short <span title="dom-media-NETWORK_EMPTY">NETWORK_EMPTY</span> = 0;
+  const unsigned short <span title="dom-media-NETWORK_IDLE">NETWORK_IDLE</span> = 1;
+  const unsigned short <span title="dom-media-NETWORK_LOADING">NETWORK_LOADING</span> = 2;
+  const unsigned short <span title="dom-media-NETWORK_LOADED">NETWORK_LOADED</span> = 3;
   readonly attribute unsigned short <span title="dom-media-networkState">networkState</span>;
   readonly attribute float <span title="dom-media-bufferingRate">bufferingRate</span>;
   readonly attribute boolean <span title="dom-media-bufferingThrottled">bufferingThrottled</span>;
@@ -17707,10 +17705,12 @@
   void <span title="dom-media-load">load</span>();
 
   // ready state
-  const unsigned short <span title="dom-media-DATA_UNAVAILABLE">DATA_UNAVAILABLE</span> = 0;
-  const unsigned short <span title="dom-media-CAN_SHOW_CURRENT_FRAME">CAN_SHOW_CURRENT_FRAME</span> = 1;
-  const unsigned short <span title="dom-media-CAN_PLAY">CAN_PLAY</span> = 2;
-  const unsigned short <span title="dom-media-CAN_PLAY_THROUGH">CAN_PLAY_THROUGH</span> = 3;
+  const unsigned short <span title="dom-media-HAVE_NOTHING">HAVE_NOTHING</span> = 0;
+  const unsigned short <span title="dom-media-HAVE_METADATA">HAVE_METADATA</span> = 1;
+  const unsigned short <span title="dom-media-HAVE_SOME_DATA">HAVE_SOME_DATA</span> = 2;
+  const unsigned short <span title="dom-media-HAVE_CURRENT_DATA">HAVE_CURRENT_DATA</span> = 3;
+  const unsigned short <span title="dom-media-HAVE_FUTURE_DATA">HAVE_FUTURE_DATA</span> = 4;
+  const unsigned short <span title="dom-media-HAVE_ENOUGH_DATA">HAVE_ENOUGH_DATA</span> = 5;
   readonly attribute unsigned short <span title="dom-media-readyState">readyState</span>;
   readonly attribute boolean <span title="dom-media-seeking">seeking</span>;
 
@@ -17863,13 +17863,13 @@
   <p>If the <code title="attr-media-src">src</code> attribute of a
   <span>media element</span> that is already in a document and whose
   <code title="dom-media-networkState">networkState</code> is in the
-  <code title="dom-media-EMPTY">EMPTY</code> state is added, changed,
-  or removed, the user agent must <span>queue a task</span> that
-  implicitly invokes the <code title="dom-media-load">load()</code>
-  method on the <span>media element</span>, and ignores any resulting
-  exceptions. The <span>task source</span> for this task is the
-  <span>media element</span>'s own <span>media element new resource
-  task source</span>.</p>
+  <code title="dom-media-NETWORK_EMPTY">NETWORK_EMPTY</code> state is
+  added, changed, or removed, the user agent must <span>queue a
+  task</span> that implicitly invokes the <code
+  title="dom-media-load">load()</code> method on the <span>media
+  element</span>, and ignores any resulting exceptions. The <span>task
+  source</span> for this task is the <span>media element</span>'s own
+  <span>media element new resource task source</span>.</p>
 
   <p class="note">If a <code title="attr-media-src">src</code>
   attribute is specified, the resource it specifies is the <span>media
@@ -17979,50 +17979,41 @@
   attribute must return the empty string if the <span>media
   element</span>'s <code
   title="dom-media-networkState">networkState</code> has the value
-  <span title="dom-media-EMPTY">EMPTY</span>, and the <span>absolute
-  URL</span> that is the address of the <span>chosen media
-  resource</span> otherwise.</p>
+  <code title="dom-media-NETWORK_EMPTY">NETWORK_EMPTY</code>, and the
+  <span>absolute URL</span> that is the address of the <span>chosen
+  media resource</span> otherwise.</p>
 
 
 
   <h5>Network states</h5>
 
   <p>As <span title="media element">media elements</span> interact
-  with the network, they go through several states. The <dfn
+  with the network, their current network activity is represented by
+  the <dfn
   title="dom-media-networkState"><code>networkState</code></dfn>
-  attribute, on getting, must return the current network state of the
-  element, which must be one of the following values:</p>
+  attribute. On getting, it must return the current network state of
+  the element, which must be one of the following values:</p>
 
   <dl>
 
-   <dt><dfn title="dom-media-EMPTY"><code>EMPTY</code></dfn> (numeric value 0)</dt>
+   <dt><dfn title="dom-media-NETWORK_EMPTY"><code>NETWORK_EMPTY</code></dfn> (numeric value 0)</dt>
 
    <dd>The element has not yet been initialized. All attributes are in
    their initial states.</dd>
 
-   <dt><dfn title="dom-media-LOADING"><code>LOADING</code></dfn> (numeric value 1)</dt>
+   <dt><dfn title="dom-media-NETWORK_IDLE"><code>NETWORK_IDLE</code></dfn> (numeric value 1)</dt>
 
-   <dd>The element has <span title="pick a media resource">picked a
-   media resource</span> (the <span>chosen media resource</span> is
-   available from the <code
-   title="dom-media-currentSrc">currentSrc</code> attribute), but none
-   of the metadata has yet been obtained and therefore all the other
-   attributes are still in their initial states.</dd>
+   <dd>The element has a <span>chosen media resource</span>, but the
+   user agent is not using the network to obtain any more of the
+   resource than is already obtained at this time.</dd>
 
-   <dt><dfn title="dom-media-LOADED_METADATA"><code>LOADED_METADATA</code></dfn> (numeric value 2)</dt>
+   <dt><dfn title="dom-media-NETWORK_LOADING"><code>NETWORK_LOADING</code></dfn> (numeric value 2)</dt>
 
-   <dd>Enough of the resource has been obtained that the metadata
-   attributes are initialized (e.g. the length is known). The API will
-   no longer raise exceptions when used.</dd>
+   <dd>The user agent is actively trying to download data for the
+   <span>chosen media resource</span>.</dd>
 
-   <dt><dfn title="dom-media-LOADED_FIRST_FRAME"><code>LOADED_FIRST_FRAME</code></dfn> (numeric value 3)</dt>
+   <dt><dfn title="dom-media-NETWORK_LOADED"><code>NETWORK_LOADED</code></dfn> (numeric value 3)</dt>
 
-   <dd>Actual <span>media data</span> has been obtained. In the case
-   of video, this specifically means that a frame of video is
-   available and can be shown.</dd>
-
-   <dt><dfn title="dom-media-LOADED"><code>LOADED</code></dfn> (numeric value 4)</dt>
-
    <dd>The entire <span>media resource</span> has been obtained and is
    available to the user agent locally. Network connectivity could be
    lost without affecting the media playback.</dd>
@@ -18032,17 +18023,19 @@
   <p>The algorithm for the <code title="dom-media-load">load()</code>
   method defined below describes exactly when the <code
   title="dom-media-networkState">networkState</code> attribute changes
-  value.</p>
+  value and what events fire to indicate changes in this state.</p>
 
+  <p class="note">Some resources, e.g. streaming Web radio, can never
+  each the <code
+  title="dom-media-NETWORK_LOADED">NETWORK_LOADED</code> state.</p>
 
 
+
   <h5>Loading the media resource</h5>
 
   <p>All <span title="media element">media elements</span> have a
-  <dfn>begun flag</dfn>, which must begin in the false state, a
-  <dfn>loaded-first-frame flag</dfn>, which must begin in the false
-  state, and an <dfn>autoplaying flag</dfn>, which must begin in the
-  true state.</p>
+  <dfn>begun flag</dfn>, which must begin in the false state, and an
+  <dfn>autoplaying flag</dfn>, which must begin in the true state.</p>
 
   <p>When the <dfn title="dom-media-load"><code>load()</code></dfn>
   method on a <span>media element</span> is invoked, the user agent
@@ -18083,9 +18076,8 @@
    <span>media element</span>.</p></li>
 
    <li><p>The <code title="dom-media-error">error</code> attribute
-   must be set to null, the <span>loaded-first-frame flag</span> must
-   be set to false, and the <span>autoplaying flag</span> must be set
-   to true.</p></li>
+   must be set to null and the <span>autoplaying flag</span> must be
+   set to true.</p></li>
 
    <li><p>The <code title="dom-media-playbackRate">playbackRate</code>
    attribute must be set to the value of the <code
@@ -18094,8 +18086,8 @@
 
    <li><p>If the <span>media element</span>'s <code
    title="dom-media-networkState">networkState</code> is not set to
-   <span title="dom-media-EMPTY">EMPTY</span>, then the following
-   substeps must be followed:
+   <code title="dom-media-NETWORK_EMPTY">NETWORK_EMPTY</code>, then
+   the following substeps must be followed:</p>
 
     <ol>
 
@@ -18104,16 +18096,16 @@
 
      <li>The <code title="dom-media-networkState">networkState</code>
      attribute must be set to <span
-     title="dom-media-EMPTY">EMPTY</span><!--, and the user agent must
-     add <code title="event-emptied">emptied</code> to the <var
-     title="">events</var> list-->.</li>
+     title="dom-media-NETWORK_EMPTY">NETWORK_EMPTY</span><!--, and the
+     user agent must add <code title="event-emptied">emptied</code> to
+     the <var title="">events</var> list-->.</li>
 
      <li>If <code title="dom-media-readyState">readyState</code> is
      not set to <code
-     title="dom-media-DATA_UNAVAILABLE">DATA_UNAVAILABLE</code>, it must be set
-     to that state<!-- and the user agent must add <code
-     title="event-dataunavailable">dataunavailable</code> to the
-     <var title="">events</var> list-->.</li>
+     title="dom-media-HAVE_NOTHING">HAVE_NOTHING</code>, it must be
+     set to that state<!-- and the user agent must add <code
+     title="event-dataunavailable">dataunavailable</code> to the <var
+     title="">events</var> list-->.</li>
 
      <li>If the <code title="dom-media-paused">paused</code> attribute
      is false, it must be set to true<!--, and the user agent must add
@@ -18149,9 +18141,9 @@
 
    <li><p>The <code title="dom-media-networkState">networkState</code>
    attribute must be set to <span
-   title="dom-media-LOADING">LOADING</span>.</li>
+   title="dom-media-NETWORK_IDLE">NETWORK_IDLE</span>.</p>
 
-   <li><p class="note">The <code
+   <p class="note">The <code
    title="dom-media-currentSrc">currentSrc</code> attribute starts
    returning the new value.</p></li>
 
@@ -18179,10 +18171,12 @@
    <li>
 
     <p>While the fetching process is progressing, the user agent must
-    <span>queue a task</span> to <span>fire a progress event</span>
-    called <code title="event-progress">progress</code> at the element
-    every 350ms (&#xB1;200ms) or for every byte received, whichever is
-    <em>least</em> frequent.</p>
+    set the <code title="dom-media-networkState">networkState</code>
+    to <code title="dom-media-NETWORK_LOADING">NETWORK_LOADING</code>
+    and <span>queue a task</span> to <span>fire a progress
+    event</span> called <code title="event-progress">progress</code>
+    at the element every 350ms (&#xB1;200ms) or for every byte
+    received, whichever is <em>least</em> frequent.</p>
 
     <p>If at any point the user agent has received no data for more
     than about three seconds, the user agent must <span>queue a
@@ -18195,6 +18189,17 @@
     act as if it was stalled (as opposed to acting as if the
     connection was closed).</p>
 
+    <p>User agents may decide to not download more content at any
+    time, e.g. after buffering five minutes of a one hour media
+    resource, while waiting for the user to decide whether to play the
+    resource or not, or while waiting for user input in an interactive
+    resource. When a <span>media element</span>'s download has been
+    suspended, the user agent must set the <code
+    title="dom-media-networkState">networkState</code> to <code
+    title="dom-media-NETWORK_IDLE">NETWORK_IDLE</code> and <span>queue
+    a task</span> to <span>fire a progress event</span> called <code
+    title="event-suspend">suspend</code> at the element.</p>
+
     <p>The user agent may use whatever means necessary to fetch the
     resource (within the constraints put forward by this and other
     specifications); for example, reconnecting to the server in the
@@ -18239,10 +18244,10 @@
        <li>The element's <code
        title="dom-media-networkState">networkState</code> attribute
        must be switched to the <span
-       title="dom-media-EMPTY">EMPTY</span> value and the user agent
-       must <span>queue a task</span> to <span>fire a simple
-       event</span> called <code title="event-emptied">emptied</code>
-       at the element.</li>
+       title="dom-media-NETWORK_EMPTY">NETWORK_EMPTY</span> value and
+       the user agent must <span>queue a task</span> to <span>fire a
+       simple event</span> called <code
+       title="event-emptied">emptied</code> at the element.</li>
 
        <li>These steps must be aborted.</li>
 
@@ -18284,10 +18289,10 @@
        <li>The element's <code
        title="dom-media-networkState">networkState</code> attribute
        must be switched to the <span
-       title="dom-media-EMPTY">EMPTY</span> value and the user agent
-       must <span>queue a task</span> to <span>fire a simple
-       event</span> called <code title="event-emptied">emptied</code>
-       at the element.</li>
+       title="dom-media-NETWORK_EMPTY">NETWORK_EMPTY</span> value and
+       the user agent must <span>queue a task</span> to <span>fire a
+       simple event</span> called <code
+       title="event-emptied">emptied</code> at the element.</li>
 
        <li>These steps must be aborted.</li>
 
@@ -18324,19 +18329,21 @@
        element</span>.</li>
 
        <li>If the <span>media element</span>'s <code
+       title="dom-media-readyState">readyState</code> attribute has a
+       value equal to <code
+       title="dom-media-HAVE_NOTHING">HAVE_NOTHING</code>, the
+       element's <code
        title="dom-media-networkState">networkState</code> attribute
-       has the value <code title="dom-media-LOADING">LOADING</code>,
-       the element's <code
-       title="dom-media-networkState">networkState</code> attribute
        must be switched to the <span
-       title="dom-media-EMPTY">EMPTY</span> value and the user agent
-       must <span>queue a task</span> to <span>fire a simple
-       event</span> called <code title="event-emptied">emptied</code>
-       at the element. (If the <code
-       title="dom-media-networkState">networkState</code> attribute
+       title="dom-media-NETWORK_EMPTY">NETWORK_EMPTY</span> value and
+       the user agent must <span>queue a task</span> to <span>fire a
+       simple event</span> called <code
+       title="event-emptied">emptied</code> at the element. (If the
+       <code title="dom-media-readyState">readyState</code> attribute
        has a value greater than <code
-       title="dom-media-LOADING">LOADING</code>, then this doesn't
-       happen; the available data, if any, will be playable.)</li>
+       title="dom-media-HAVE_NOTHING">HAVE_NOTHING</code>, then this
+       doesn't happen; the available data, if any, will be
+       playable.)</li>
 
        <li>These steps must be aborted.</li>
 
@@ -18378,10 +18385,9 @@
        <li><p>The <span>current playback position</span> must be set
        to the <var>effective start</var>.</p></li>
 
-       <li><p>The <code
-       title="dom-media-networkState">networkState</code> attribute
-       must be set to <code
-       title="dom-media-LOADED_METADATA">LOADED_METADATA</code>.</p></li>
+       <li><p>The <code title="dom-media-readyState">readyState</code>
+       attribute must be set to <code
+       title="dom-media-HAVE_METADATA">HAVE_METADATA</code>.</p></li>
 
        <li><p class="note">A number of attributes, including <code
        title="dom-media-duration">duration</code>, <code
@@ -18395,8 +18401,8 @@
        title="event-durationchange">durationchange</code> at the
        element at this point.</li>
 
-       <li><p>The user agent must <span>queue a task</span> to
-       <span>fire a simple event</span> called <code
+       <li id="fire-loadedmetadata"><p>The user agent must <span>queue
+       a task</span> to <span>fire a simple event</span> called <code
        title="event-loadedmetadata">loadedmetadata</code> at the
        element.</li>
 
@@ -18415,29 +18421,14 @@
 
       <ol>
 
-       <li><p>The <code
-       title="dom-media-networkState">networkState</code> attribute
-       must be set to <code
-       title="dom-media-LOADED_FIRST_FRAME">LOADED_FIRST_FRAME</code>.</p></li>
+       <li><p>The <code title="dom-media-readyState">readyState</code>
+       attribute must change to <code
+       title="dom-media-HAVE_CURRENT_DATA">HAVE_CURRENT_DATA</code>.</p></li>
 
-       <li><p>The <code
-       title="dom-media-readyState">readyState</code> attribute must
-       change to <code
-       title="dom-media-CAN_SHOW_CURRENT_FRAME">CAN_SHOW_CURRENT_FRAME</code>.</p></li>
+       <li><p id="fire-loadeddata">The user agent must <span>queue a
+       task</span> to <span>fire a simple event</span> called <code
+       title="event-loadeddata">loadeddata</code> at the element.</li>
 
-       <li><p>The <span>loaded-first-frame flag</span> must be set to
-       true.</p></li>
-
-       <li><p>The user agent must <span>queue a task</span> to
-       <span>fire a simple event</span> called <code
-       title="event-loadedfirstframe">loadedfirstframe</code> at the
-       element.</li>
-
-       <li><p>The user agent must <span>queue a task</span> to
-       <span>fire a simple event</span> called <code
-       title="event-canshowcurrentframe">canshowcurrentframe</code> at
-       the element.</li>
-
       </ol>
 
      </dd>
@@ -18445,14 +18436,17 @@
     </dl>
 
     <p>When the user agent has completely fetched of the entire
-    <span>media resource</span>, it must move on to the next step.</p>
+    <span>media resource</span>, it must move on to the next
+    step. This might never happen, e.g. when streaming an infinite
+    resource such as Web radio.</p>
 
    </li>
 
    <li><p>If the fetching process completes without errors, the
    <span>begun flag</span> must be set to false, the <code
    title="dom-media-networkState">networkState</code> attribute must
-   be set to <code title="dom-media-LOADED">LOADED</code>, and the
+   be set to <code
+   title="dom-media-NETWORK_LOADED">NETWORK_LOADED</code>, and the
    user agent must <span>queue a task</span> to <span>fire a progress
    event</span> called <code title="event-load">load</code> at the
    element.</p></li>
@@ -18461,13 +18455,14 @@
 
   <p>If a <span>media element</span> whose <code
   title="dom-media-networkState">networkState</code> has the value
-  <code title="dom-media-EMPTY">EMPTY</code> is <span title="insert an
-  element into a document">inserted into a document</span>, the user
-  agent must <span>queue a task</span> that implicitly invokes the
-  <code title="dom-media-load">load()</code> method on the <span>media
-  element</span>, and ignores any resulting exceptions. The <span>task
-  source</span> for this task is the <span>media element</span>'s own
-  <span>media element new resource task source</span>.</p>
+  <code title="dom-media-NETWORK_EMPTY">NETWORK_EMPTY</code> is <span
+  title="insert an element into a document">inserted into a
+  document</span>, the user agent must <span>queue a task</span> that
+  implicitly invokes the <code title="dom-media-load">load()</code>
+  method on the <span>media element</span>, and ignores any resulting
+  exceptions. The <span>task source</span> for this task is the
+  <span>media element</span>'s own <span>media element new resource
+  task source</span>.</p>
 
   <p>The <dfn
   title="dom-media-bufferingRate"><code>bufferingRate</code></dfn>
@@ -18668,10 +18663,11 @@
    make the current loop the last loop).</p></li>
 
    <li><p>If the <span>media element</span>'s <code
-   title="dom-media-networkState">networkState</code> is in the <code
-   title="dom-media-EMPTY">EMPTY</code> state or the <code
-   title="dom-media-LOADING">LOADING</code> state, then the user agent
-   must at this point abort these steps.</p></li>
+   title="dom-media-readyState">readyState</code> is in the <code
+   title="dom-media-HAVE_NOTHING">HAVE_NOTHING</code> state, then the
+   user agent must at this point abort these steps.</p></li>
+   <!-- because we don't have the duration yet, so many of the
+   following concepts are undefined -->
 
    <li><p>If the <code
    title="dom-media-currentLoop">currentLoop</code> is zero, and the
@@ -18719,48 +18715,58 @@
 
   <dl>
 
-   <dt><dfn title="dom-media-DATA_UNAVAILABLE"><code>DATA_UNAVAILABLE</code></dfn> (numeric value 0)</dt>
+   <dt><dfn title="dom-media-HAVE_NOTHING"><code>HAVE_NOTHING</code></dfn> (numeric value 0)</dt>
 
-   <dd>No data for the <span>current playback position</span> is
-   available. <span title="media element">Media elements</span> whose
-   <code title="dom-media-networkState">networkState</code> attribute
-   is less than <code
-   title="dom-media-LOADED_FIRST_FRAME">LOADED_FIRST_FRAME</code>
-   are always in the <code
-   title="dom-media-DATA_UNAVAILABLE">DATA_UNAVAILABLE</code>
+   <dd>No information regardig the <span>media resource</span> is
+   available. No data for the <span>current playback position</span>
+   is available. <span title="media element">Media elements</span>
+   whose <code title="dom-media-networkState">networkState</code>
+   attribute is <code
+   title="dom-media-NETWORK_EMPTY">NETWORK_EMPTY</code> are always in
+   the <code title="dom-media-HAVE_NOTHING">HAVE_NOTHING</code>
    state.</dd>
 
-   <dt><dfn title="dom-media-CAN_SHOW_CURRENT_FRAME"><code>CAN_SHOW_CURRENT_FRAME</code></dfn> (numeric value 1)</dt>
+   <dt><dfn title="dom-media-HAVE_METADATA"><code>HAVE_METADATA</code></dfn> (numeric value 1)</dt>
 
+   <dd>Enough of the resource has been obtained that the metadata
+   attributes are initialized (e.g. the length is known). The API will
+   no longer raise an exception when seeking.</dd>
+
+   <dt><dfn title="dom-media-HAVE_SOME_DATA"><code>HAVE_SOME_DATA</code></dfn> (numeric value 2)</dt>
+
    <dd>Data for the immediate <span>current playback position</span>
+   is not available, but there is at least one playback position for
+   which the <i>ready state</i> would have a value of <code
+   title="dom-media-HAVE_CURRENT_DATA">HAVE_CURRENT_DATA</code> or
+   greater.</dd>
+
+   <dt><dfn title="dom-media-HAVE_CURRENT_DATA"><code>HAVE_CURRENT_DATA</code></dfn> (numeric value 3)</dt>
+
+   <dd>Data for the immediate <span>current playback position</span>
    is available, but not enough data is available that the user agent
    could successfully advance the <span>current playback
    position</span> at all without immediately reverting to the <code
-   title="dom-media-DATA_UNAVAILABLE">DATA_UNAVAILABLE</code> state. In video,
-   this corresponds to the user agent having data from the current
-   frame, but not the next frame. In audio, this corresponds to the
-   user agent only having audio up to the <span>current playback
-   position</span>, but no further.</dd>
+   title="dom-media-HAVE_SOME_DATA">HAVE_SOME_DATA</code> state. For
+   example, in video this corresponds to the user agent having data
+   from the current frame, but not the next frame.</dd>
 
-   <dt><dfn title="dom-media-CAN_PLAY"><code>CAN_PLAY</code></dfn> (numeric value 2)</dt>
+   <dt><dfn title="dom-media-HAVE_FUTURE_DATA"><code>HAVE_FUTURE_DATA</code></dfn> (numeric value 4)</dt>
 
    <dd>Data for the immediate <span>current playback position</span>
    is available, as well as enough data for the user agent to advance
    the <span>current playback position</span> at least a little
    without immediately reverting to the <code
-   title="dom-media-DATA_UNAVAILABLE">DATA_UNAVAILABLE</code> state. In video,
-   this corresponds to the user agent having data for the current
-   frame and the next frame. In audio, this corresponds to the user
-   agent having data beyond the <span>current playback
-   position</span>.</dd>
+   title="dom-media-HAVE_SOME_DATA">HAVE_SOME_DATA</code> state. For
+   example, In video this corresponds to the user agent having data
+   for at least the current frame and the next frame.</dd>
 
-   <dt><dfn title="dom-media-CAN_PLAY_THROUGH"><code>CAN_PLAY_THROUGH</code></dfn> (numeric value 3)</dt>
+   <dt><dfn title="dom-media-HAVE_ENOUGH_DATA"><code>HAVE_ENOUGH_DATA</code></dfn> (numeric value 5)</dt>
 
    <dd>Data for the immediate <span>current playback position</span>
    is available, as well as enough data for the user agent to advance
    the <span>current playback position</span> at least a little
    without immediately reverting to the <code
-   title="dom-media-DATA_UNAVAILABLE">DATA_UNAVAILABLE</code> state,
+   title="dom-media-HAVE_SOME_DATA">HAVE_SOME_DATA</code> state,
    and, in addition, the user agent estimates that data is being
    fetched at a rate where the <span>current playback position</span>,
    if it were to advance at the rate given by the <code
@@ -18774,50 +18780,73 @@
 
   <p>When the ready state of a <span>media element</span> whose <code
   title="dom-media-networkState">networkState</code> is not <code
-  title="dom-media-EMPTY">EMPTY</code> changes, the user agent must
-  follow the steps given below:</p>
+  title="dom-media-NETWORK_EMPTY">NETWORK_EMPTY</code> changes, the
+  user agent must follow the steps given below:</p>
 
   <dl class="switch">
 
-   <dt>If the new ready state is <code
-   title="dom-media-DATA_UNAVAILABLE">DATA_UNAVAILABLE</code></dt>
+   <!-- going up to metadata -->
+   <dt>If the prevous ready state was <code
+   title="dom-media-HAVE_NOTHING">HAVE_NOTHING</code>, and the new
+   ready state is <code
+   title="dom-media-HAVE_METADATA">HAVE_METADATA</code></dt>
 
-   <dd><p>The user agent must <span>fire a simple event</span> called
-   <code title="event-dataunavailable">dataunavailable</code> at the
-   element.</p></dd>
+   <dd>
 
-   <dt>If the new ready state is <code
-   title="dom-media-CAN_SHOW_CURRENT_FRAME">CAN_SHOW_CURRENT_FRAME</code></dt>
+    <p class="note">A <code
+    title="event-loadedmetadata">loadedmetadata</code> DOM event <a
+    href="#fire-loadedmetadata">will be fired</a> as part of the <code
+    title="dom-event-load">load()</code> algorithm.</p>
 
+   </dd>
+
+   <!-- going up to current -->
+   <dt>If the prevous ready state was <code
+   title="dom-media-HAVE_METADATA">HAVE_METADATA</code>, and the new
+   ready state is <code
+   title="dom-media-HAVE_CURRENT_DATA">HAVE_CURRENT_DATA</code></dt>
+
    <dd>
 
-    <p>If the element's <span>loaded-first-frame flag</span> is true,
-    the user agent must <span>fire a simple event</span> called <code
-    title="event-canshowcurrentframe">canshowcurrentframe</code>
-    event.</p>
+    <p class="note">A <code title="event-loadeddata">loadeddata</code>
+    DOM event <a href="#fire-loadeddata">will be fired</a> as part of
+    the <code title="dom-event-load">load()</code> algorithm.</p>
 
-    <p class="note">The first time the <code
-    title="dom-media-networkState">networkState</code> attribute
-    switches to this value, the <span>loaded-first-frame flag</span>
-    is false, and the event is fired <a
-    href="#handling-first-frame-available">by the algorithm described
-    above</a> for the <code title="dom-media-load">load()</code>
-    method, in conjunction with other steps.</p>
+   </dd>
 
+   <!-- going down -->
+   <dt>If the prevous ready state was <code
+   title="dom-media-HAVE_FUTURE_DATA">HAVE_FUTURE_DATA</code> or more,
+   and the new ready state is <code
+   title="dom-media-HAVE_CURRENT_DATA">HAVE_CURRENT_DATA</code> or
+   less</dt>
+
+   <dd>
+
+    <p class="note">A <code title="event-waiting">waiting</code> DOM
+    event <a href="#fire-waiting-when-waiting">can be fired</a>,
+    depending on the current state of playback.</p>
+
    </dd>
 
-   <dt>If the new ready state is <code
-   title="dom-media-CAN_PLAY">CAN_PLAY</code></dt>
+   <!-- going up to future -->
+   <dt>If the prevous ready state was <code
+   title="dom-media-HAVE_CURRENT_DATA">HAVE_CURRENT_DATA</code> or
+   less, and the new ready state is <code
+   title="dom-media-HAVE_FUTURE_DATA">HAVE_FUTURE_DATA</code> or
+   more</dt>
 
    <dd><p>The user agent must <span>fire a simple event</span> called
    <code title="event-canplay">canplay</code>.</p></dd>
 
    <dt>If the new ready state is <code
-   title="dom-media-CAN_PLAY_THROUGH">CAN_PLAY_THROUGH</code></dt>
+   title="dom-media-HAVE_ENOUGH_DATA">HAVE_ENOUGH_DATA</code></dt>
 
    <dd><p>The user agent must <span>fire a simple event</span> called
-   <code title="event-canplaythrough">canplaythrough</code> event. If
-   the <span>autoplaying flag</span> is true, and the <code
+   <code title="event-canplaythrough">canplaythrough</code> event.
+   <!-- XXX make sure it fires after canplay when fixing queueing here -->
+   If the
+   <span>autoplaying flag</span> is true, and the <code
    title="dom-media-paused">paused</code> attribute is true, and the
    <span>media element</span> has an <code
    title="attr-media-autoplay">autoplay</code> attribute specified,
@@ -18830,20 +18859,13 @@
 
   <p class="note">It is possible for the ready state of a media
   element to jump between these states discontinuously. For example,
-  the state of a media element whose <span>loaded-first-frame
-  flag</span> is false can jump straight from <code
-  title="dom-media-DATA_UNAVAILABLE">DATA_UNAVAILABLE</code> to <code
-  title="dom-media-CAN_PLAY_THROUGH">CAN_PLAY_THROUGH</code> without
+  the state of a media element can jump straight from <code
+  title="dom-media-HAVE_SOME_DATA">HAVE_SOME_DATA</code> to <code
+  title="dom-media-HAVE_ENOUGH_DATA">HAVE_ENOUGH_DATA</code> without
   passing through the <code
-  title="dom-media-CAN_SHOW_CURRENT_FRAME">CAN_SHOW_CURRENT_FRAME</code>
-  and <code title="dom-media-CAN_PLAY">CAN_PLAY</code> states, and
-  thus without firing the <code
-  title="event-canshowcurrentframe">canshowcurrentframe</code> and
-  <code title="event-canplay">canplay</code> events. The only state
-  that is guaranteed to be reached is the <code
-  title="dom-media-CAN_SHOW_CURRENT_FRAME">CAN_SHOW_CURRENT_FRAME</code>
-  state, which is reached as part of the <code
-  title="dom-media-load">load()</code> method's processing.</p>
+  title="dom-media-HAVE_CURRENT_DATA">HAVE_CURRENT_DATA</code> and
+  <code title="dom-media-HAVE_FUTURE_DATA">HAVE_FUTURE_DATA</code>
+  states.</p>
 
   <p>The <dfn
   title="dom-media-readyState"><code>readyState</code></dfn> DOM
@@ -18939,17 +18961,17 @@
   playing</dfn> when its <code title="dom-media-paused">paused</code>
   attribute is false, the <code
   title="dom-media-readyState">readyState</code> attribute is either
-  <code title="dom-media-CAN_PLAY">CAN_PLAY</code> or <code
-  title="dom-media-CAN_PLAY_THROUGH">CAN_PLAY_THROUGH</code>, the
-  element has not <span>ended playback</span>, playback has not
+  <code title="dom-media-HAVE_FUTURE_DATA">HAVE_FUTURE_DATA</code> or
+  <code title="dom-media-HAVE_ENOUGH_DATA">HAVE_FUTURE_DATA</code>,
+  the element has not <span>ended playback</span>, playback has not
   <span>stopped due to errors</span>, and the element has not
   <span>paused for user interaction</span>.</p>
 
   <p>A <span>media element</span> is said to have <dfn>ended
   playback</dfn> when the element's <code
-  title="dom-media-networkState">networkState</code> attribute is
-  <code title="dom-media-LOADED_METADATA">LOADED_METADATA</code> or
-  greater, the <span>current playback position</span> is equal to the
+  title="dom-media-readyState">readyState</code> attribute is <code
+  title="dom-media-HAVE_METADATA">HAD_METADATA</code> or greater, the
+  <span>current playback position</span> is equal to the
   <var>effective end</var> of the <span>media resource</span>, and the
   <code title="dom-media-currentLoop">currentLoop</code> attribute is
   equal to <span><code
@@ -18961,23 +18983,22 @@
 
   <p>A <span>media element</span> is said to have <dfn>stopped due to
   errors</dfn> when the element's <code
-  title="dom-media-networkState">networkState</code> attribute is
-  <code title="dom-media-LOADED_METADATA">LOADED_METADATA</code> or
-  greater, and the user agent <a
-  href="#non-fatal-media-error">encounters a non-fatal error</a>
-  during the processing of the <span>media data</span>, and due to
-  that error, is not able to play the content at the <span>current
-  playback position</span>.</p>
+  title="dom-media-readyState">readyState</code> attribute is <code
+  title="dom-media-HAVE_METADATA">HAVE_METADATA</code> or greater, and
+  the user agent <a href="#non-fatal-media-error">encounters a
+  non-fatal error</a> during the processing of the <span>media
+  data</span>, and due to that error, is not able to play the content
+  at the <span>current playback position</span>.</p>
 
   <p>A <span>media element</span> is said to have <dfn>paused for user
   interaction</dfn> when its <code
   title="dom-media-paused">paused</code> attribute is false, the <code
   title="dom-media-readyState">readyState</code> attribute is either
-  <code title="dom-media-CAN_PLAY">CAN_PLAY</code> or <code
-  title="dom-media-CAN_PLAY_THROUGH">CAN_PLAY_THROUGH</code> and the
-  user agent has reached a point in the <span>media resource</span>
-  where the user has to make a selection for the resource to
-  continue.</p>
+  <code title="dom-media-HAVE_FUTURE_DATA">HAVE_FUTURE_DATA</code> or
+  <code title="dom-media-HAVE_ENOUGH_DATA">HAVE_ENOUGH_DATA</code> and
+  the user agent has reached a point in the <span>media
+  resource</span> where the user has to make a selection for the
+  resource to continue.</p>
 
   <p>It is possible for a <span>media element</span> to have both
   <span>ended playback</span> and <span>paused for user
@@ -18993,15 +19014,16 @@
   that is <span>potentially playing</span> stops playing because its
   <code title="dom-media-readyState">readyState</code> attribute
   changes to a value lower than <code
-  title="dom-media-CAN_PLAY">CAN_PLAY</code>, without the element
-  having <span>ended playback</span>, or playback having <span>stopped
-  due to errors</span>, or playback having <span>paused for user
-  interaction</span>, or the <span title="dom-media-seek">seeking
-  algorithm</span> being invoked, the user agent must <span>queue a
-  task</span> to <span>fire a simple event</span> called <code
-  title="event-timeupdate">timeupdate</code> at the element, and
-  <span>queue a task</span> to <span>fire a simple event</span> called
-  <code title="event-waiting">waiting</code> at the element.</p>
+  title="dom-media-HAVE_FUTURE_DATA">HAVE_FUTURE_DATA</code>, without
+  the element having <span>ended playback</span>, or playback having
+  <span>stopped due to errors</span>, or playback having <span>paused
+  for user interaction</span>, or the <span
+  title="dom-media-seek">seeking algorithm</span> being invoked, the
+  user agent must <span>queue a task</span> to <span>fire a simple
+  event</span> called <code title="event-timeupdate">timeupdate</code>
+  at the element, and <span>queue a task</span> to <span>fire a simple
+  event</span> called <code title="event-waiting">waiting</code> at
+  the element.</p>
 
   <p>When <code title="dom-media-currentLoop">currentLoop</code> is
   less than <span><code
@@ -19083,7 +19105,7 @@
 
    <li><p>If the <span>media element</span>'s <code
    title="dom-media-networkState">networkState</code> attribute has
-   the value <span title="dom-media-EMPTY">EMPTY</span>, then the user
+   the value <code title="dom-media-NETWORK_EMPTY">NETWORK_EMPTY</code>, then the user
    agent must invoke the <code title="dom-media-load">load()</code>
    method and wait for it to return. If that raises an exception, that
    exception must be reraised by the <code
@@ -19147,7 +19169,8 @@
 
    <li><p>If the <span>media element</span>'s <code
    title="dom-media-networkState">networkState</code> attribute has
-   the value <span title="dom-media-EMPTY">EMPTY</span>, then the user
+   the value <code
+   title="dom-media-NETWORK_EMPTY">NETWORK_EMPTY</code>, then the user
    agent must invoke the <code title="dom-media-load">load()</code>
    method and wait for it to return. If that raises an exception, that
    exception must be reraised by the <code
@@ -19190,19 +19213,15 @@
   playback rate) the client doesn't actually have to drop or
   interpolate any frames.</p>
 
-  <p>If the <code title="dom-media-playbackRate">playbackRate</code>
-  is positive and is a rate at which audio can be played back, and if
-  the audio channels are not <code
-  title="dom-media-muted">muted</code>, then the audio component of
-  the <span>media resource</span> should be played synchronised with
-  the <span>current playback position</span>. If this rate is not 1.0,
-  the user agent may apply pitch adjustments to the audio as necessary
-  to render it faithfully. When the <code
-  title="dom-media-playbackRate">playbackRate</code> is negative
-  (playback is backwards), the corresponding audio must not play. When
-  the <code title="dom-media-playbackRate">playbackRate</code> is so
-  low or so high that the user agent cannot play audio usefully, the
-  corresponding audio must not play.</p>
+  <p>When the <code title="dom-media-playbackRate">playbackRate</code>
+  is negative (playback is backwards), any corresponding audio must be
+  muted. When the <code
+  title="dom-media-playbackRate">playbackRate</code> is so low or so
+  high that the user agent cannot play audio usefully, the
+  corresponding audio must also be muted. If the <code
+  title="dom-media-playbackRate">playbackRate</code> is not 1.0, the
+  user agent may apply pitch adjustments to the audio as necessary to
+  render it faithfully.</p>
 
   <p><span title="media element">Media elements</span> that are
   <span>potentially playing</span> while not <span>in a
@@ -19299,8 +19318,9 @@
   <code>Document</code><!-- XXX xref removed --></span>, if the
   <span>media element</span>'s <code
   title="dom-media-networkState">networkState</code> attribute has a
-  value other than <span title="dom-media-EMPTY">EMPTY</span> then the
-  user agent must act as if the <code
+  value other than <code
+  title="dom-media-NETWORK_EMPTY">NETWORK_EMPTY</code> then the user
+  agent must act as if the <code
   title="dom-media-pause">pause()</code> method had been invoked.</p>
 
   <p class="note">If the <span>media element</span>'s
@@ -19324,11 +19344,11 @@
   <ol>
 
    <li><p>If the <span>media element</span>'s <code
-   title="dom-media-networkState">networkState</code> is less than
-   <code title="dom-media-LOADED_METADATA">LOADED_METADATA</code>,
-   then the user agent must raise an <code>INVALID_STATE_ERR</code>
-   exception (if the seek was in response to a DOM method call or
-   setting of a DOM attribute), and abort these steps.</p></li>
+   title="dom-media-readyState">readyState</code> is <code
+   title="dom-media-HAVE_NOTHING">HAVE_NOTHING</code>, then the user
+   agent must raise an <code>INVALID_STATE_ERR</code> exception (if
+   the seek was in response to a DOM method call or setting of a DOM
+   attribute), and abort these steps.</p></li>
 
    <li><p>If <code title="dom-media-currentLoop">currentLoop</code> is
    0, let <var title="">min</var> be the <var>effective
@@ -19368,10 +19388,10 @@
    playing</span> immediately before it started seeking, but seeking
    caused its <code title="dom-media-readyState">readyState</code>
    attribute to change to a value lower than <code
-   title="dom-media-CAN_PLAY">CAN_PLAY</code>, the user agent must
-   <span>queue a task</span> to <span>fire a simple event</span>
-   called <code title="event-waiting">waiting</code> at the
-   element.</p></li>
+   title="dom-media-HAVE_FUTURE_FRAME">HAVE_FUTURE_FRAME</code>, the
+   user agent must <span>queue a task</span> to <span>fire a simple
+   event</span> called <code title="event-waiting">waiting</code> at
+   the element.</p></li>
 
    <li><p>If, when it reaches this step, the user agent has still not
    established whether or not the <span>media data</span> for the <var
@@ -19417,6 +19437,11 @@
   title="dom-media-duration">duration</code> attribute's value (which
   would equal the time of the last frame).</p>
 
+  <p class="note">The range might be continuously changing, e.g. if
+  the user agent is buffering a sliding window on an infinite
+  stream. This is the behavior seen with DVRs viewing live TV, for
+  instance.</p>
+
   <p><span title="media resource">Media resources</span> might be
   internally scripted or interactive. Thus, a <span>media
   element</span> could play in a non-linear fashion. If this happens,
@@ -19625,49 +19650,46 @@
      <td><dfn title="event-loadstart"><code>loadstart</code></dfn>
      <td><code>ProgressEvent</code> <a href="#refsPROGRESS">[PROGRESS]</a>
      <td>The user agent begins fetching the <span>media data</span>, synchronously during the <code title="dom-media-load">load()</code> method call.
-     <td><code title="dom-media-networkState">networkState</code> equals <code title="dom-media-LOADING">LOADING</code>
+     <td><code title="dom-media-networkState">networkState</code> equals <code title="dom-media-NETWORK_LOADING">NETWORK_LOADING</code>
     <tr>
      <td><dfn title="event-progress"><code>progress</code></dfn>
      <td><code>ProgressEvent</code> <a href="#refsPROGRESS">[PROGRESS]</a>
      <td>The user agent is fetching <span>media data</span>.
-     <td><code title="dom-media-networkState">networkState</code> is more than <code title="dom-media-EMPTY">EMPTY</code> and less than <code title="dom-media-LOADED">LOADED</code>
+     <td><code title="dom-media-networkState">networkState</code> equals <code title="dom-media-NETWORK_LOADING">NETWORK_LOADING</code>
     <tr>
-     <td><dfn title="event-loadedmetadata"><code>loadedmetadata</code></dfn>
-     <td><code>Event</code>
-     <td>The user agent is fetching <span>media data</span>, and the <span>media resource</span>'s metadata has just been received.
-     <td><code title="dom-media-networkState">networkState</code> equals <code title="dom-media-LOADED_METADATA">LOADED_METADATA</code>
+     <td><dfn title="event-suspend"><code>suspend</code></dfn>
+     <td><code>ProgressEvent</code> <a href="#refsPROGRESS">[PROGRESS]</a>
+     <td>The user agent is intentionally not currently fetching <span>media data</span>, but does not have the entire <span>media resource</span> downloaded.
+     <td><code title="dom-media-networkState">networkState</code> equals <code title="dom-media-NETWORK_IDLE">NETWORK_IDLE</code>
     <tr>
-     <td><dfn title="event-loadedfirstframe"><code>loadedfirstframe</code></dfn>
-     <td><code>Event</code>
-     <td>The user agent is fetching <span>media data</span>, and the <span>media resource</span>'s first frame has just been received.
-     <td><code title="dom-media-networkState">networkState</code> equals <code title="dom-media-LOADED_FIRST_FRAME">LOADED_FIRST_FRAME</code>
-    <tr>
      <td><dfn title="event-load"><code>load</code></dfn>
      <td><code>ProgressEvent</code> <a href="#refsPROGRESS">[PROGRESS]</a>
      <td>The user agent finishes fetching the entire <span>media resource</span>.
-     <td><code title="dom-media-networkState">networkState</code> equals <code title="dom-media-LOADED">LOADED</code>
+     <td><code title="dom-media-networkState">networkState</code> equals <code title="dom-media-NETWORK_LOADED">NETWORK_LOADED</code>
     <tr>
      <td><dfn title="event-abort"><code>abort</code></dfn>
      <td><code>ProgressEvent</code> <a href="#refsPROGRESS">[PROGRESS]</a>
      <td>The user agent stops fetching the <span>media data</span> before it is completely downloaded. This can be fired synchronously during the <code title="dom-media-load">load()</code> method call.
      <td><code title="dom-media-error">error</code> is an object with the code <code title="dom-MediaError-MEDIA_ERR_ABORTED">MEDIA_ERR_ABORTED</code>.
-         <code title="dom-media-networkState">networkState</code> equals either <code title="dom-media-EMPTY">EMPTY</code> or <code title="dom-media-LOADED">LOADED</code>, depending on when the download was aborted.
+         <code title="dom-media-networkState">networkState</code> equals either <code title="dom-media-NETWORK_EMPTY">NETWORK_EMPTY</code> or <code title="dom-media-NETWORK_LOADED">NETWORK_LOADED</code>, depending on when the download was aborted.
     <tr>
      <td><dfn title="event-error"><code>error</code></dfn>
      <td><code>ProgressEvent</code> <a href="#refsPROGRESS">[PROGRESS]</a>
      <td>An error occurs while fetching the <span>media data</span>.
      <td><code title="dom-media-error">error</code> is an object with the code <code title="dom-MediaError-MEDIA_ERR_NETWORK_ERROR">MEDIA_ERR_NETWORK_ERROR</code> or higher.
-         <code title="dom-media-networkState">networkState</code> equals either <code title="dom-media-EMPTY">EMPTY</code> or <code title="dom-media-LOADED">LOADED</code>, depending on when the download was aborted.
+         <code title="dom-media-networkState">networkState</code> equals either <code title="dom-media-NETWORK_EMPTY">NETWORK_EMPTY</code> or <code title="dom-media-NETWORK_LOADED">NETWORK_LOADED</code>, depending on when the download was aborted.
     <tr>
      <td><dfn title="event-emptied"><code>emptied</code></dfn>
      <td><code>Event</code>
-     <td>A <span>media element</span> whose <code title="dom-media-networkState">networkState</code> was previously not in the <code title="dom-media-EMPTY">EMPTY</code> state has just switched to that state (either because of a fatal error during load that's about to be reported, or because the <code title="dom-media-load">load()</code> method was reinvoked, in which case it is fired synchronously during the <code title="dom-media-load">load()</code> method call).
-     <td><code title="dom-media-networkState">networkState</code> is <code title="dom-media-EMPTY">EMPTY</code>; all the DOM attributes are in their initial states.
+     <td>A <span>media element</span> whose <code title="dom-media-networkState">networkState</code> was previously not in the <code title="dom-media-NETWORK_EMPTY">NETWORK_EMPTY</code> state has just switched to that state (either because of a fatal error during load that's about to be reported, or because the <code title="dom-media-load">load()</code> method was reinvoked, in which case it is fired synchronously during the <code title="dom-media-load">load()</code> method call).
+     <td><code title="dom-media-networkState">networkState</code> is <code title="dom-media-NETWORK_EMPTY">NETWORK_EMPTY</code>; all the DOM attributes are in their initial states.
     <tr>
      <td><dfn title="event-stalled"><code>stalled</code></dfn>
      <td><code>ProgressEvent</code>
      <td>The user agent is trying to fetch <span>media data</span>, but data is unexpectedly not forthcoming.
-     <td>
+     <td><code title="dom-media-networkState">networkState</code> is <code title="dom-media-NETWORK_LOADING">NETWORK_LOADING</code>.
+
+   <tbody>
     <tr>
      <td><dfn title="event-play"><code>play</code></dfn>
      <td><code>Event</code>
@@ -19678,12 +19700,36 @@
      <td><code>Event</code>
      <td>Playback has been paused. Fired after the <code title="dom-media-pause">pause</code> method has returned.
      <td><code title="dom-media-paused">paused</code> is newly true.
+
+   <tbody>
     <tr>
+     <td><dfn title="event-loadedmetadata"><code>loadedmetadata</code></dfn>
+     <td><code>Event</code>
+     <td>The user agent has just received the metadata, such as duration or dimensions, for the <span>media resource</span>.
+     <td><code title="dom-media-readyState">readyState</code> is newly equal to <code title="dom-media-HAVE_METADATA">HAVE_METADATA</code> or greater for the first time.
+    <tr>
+     <td><dfn title="event-loadeddata"><code>loadeddata</code></dfn>
+     <td><code>Event</code>
+     <td>The user agent can render the <span>media data</span> at the <span>current playback position</span> for the first time.
+     <td><code title="dom-media-readyState">readyState</code> newly increased to <code title="dom-media-HAVE_CURRENT_DATA">HAVE_CURRENT_DATA</code> or greater for the first time.
+    <tr>
      <td><dfn title="event-waiting"><code>waiting</code></dfn>
      <td><code>Event</code>
      <td>Playback has stopped because the next frame is not available, but the user agent expects that frame to become available in due course.
-     <td><code title="dom-media-readyState">readyState</code> is either <code title="dom-media-DATA_UNAVAILABLE">DATA_UNAVAILABLE</code> or <code title="dom-media-CAN_SHOW_CURRENT_FRAME">CAN_SHOW_CURRENT_FRAME</code>, and <code title="dom-media-paused">paused</code> is false. Either <code title="dom-media-seeking">seeking</code> is true, or the <span>current playback position</span> is not contained in any of the ranges in <code title="dom-media-buffered">buffered</code>. It is possible for playback to stop for two other reasons without <code title="dom-media-paused">paused</code> being false, but those two reasons do not fire this event: maybe <span title="ended playback">playback ended</span>, or playback <span>stopped due to errors</span>.
+     <td><code title="dom-media-readyState">readyState</code> is newly equal to or less than <code title="dom-media-HAVE_CURRENT_DATA">HAVE_CURRENT_DATA</code>, and <code title="dom-media-paused">paused</code> is false. Either <code title="dom-media-seeking">seeking</code> is true, or the <span>current playback position</span> is not contained in any of the ranges in <code title="dom-media-buffered">buffered</code>. It is possible for playback to stop for two other reasons without <code title="dom-media-paused">paused</code> being false, but those two reasons do not fire this event: maybe <span title="ended playback">playback ended</span>, or playback <span>stopped due to errors</span>.
     <tr>
+     <td><dfn title="event-canplay"><code>canplay</code></dfn>
+     <td><code>Event</code>
+     <td>The user agent can resume playback of the <span>media data</span>, but estimates that if playback were to be started now, the <span>media resource</span> could not be rendered at the current playback rate up to its end without having to stop for further buffering of content.
+     <td><code title="dom-media-readyState">readyState</code> newly increased to <code title="dom-media-HAVE_FUTURE_DATA">HAVE_FUTURE_DATA</code> or greater.
+    <tr>
+     <td><dfn title="event-canplaythrough"><code>canplaythrough</code></dfn>
+     <td><code>Event</code>
+     <td>The user agent estimates that if playback were to be started now, the <span>media resource</span> could be rendered at the current playback rate all the way to its end without having to stop for further buffering.
+     <td><code title="dom-media-readyState">readyState</code> is newly equal to <code title="dom-media-HAVE_ENOUGH_DATA">HAVE_ENOUGH_DATA</code>.
+
+   <tbody>
+    <tr>
      <td><dfn title="event-seeking"><code>seeking</code></dfn>
      <td><code>Event</code>
      <td>The <code title="dom-media-seeking">seeking</code> DOM attribute changed to true and the seek operation is taking long enough that the user agent has time to fire the event.
@@ -19703,27 +19749,9 @@
      <td><code>Event</code>
      <td>Playback has stopped because the end of the <span>media resource</span> was reached.
      <td><code title="dom-media-currentTime">currentTime</code> equals the <var>effective end</var>; <code title="dom-media-ended">ended</code> is true.
+
+   <tbody>
     <tr>
-     <td><dfn title="event-dataunavailable"><code>dataunavailable</code></dfn>
-     <td><code>Event</code>
-     <td>The user agent cannot render the data at the <span>current playback position</span> because data for the current frame is not immediately available.
-     <td>The <code title="dom-media-readyState">readyState</code> attribute is newly equal to <code title="DATA_UNAVAILABLE">DATA_UNAVAILABLE</code>.
-    <tr>
-     <td><dfn title="event-canshowcurrentframe"><code>canshowcurrentframe</code></dfn>
-     <td><code>Event</code>
-     <td>The user agent cannot render the data after the <span>current playback position</span> because data for the next frame is not immediately available.
-     <td>The <code title="dom-media-readyState">readyState</code> attribute is newly equal to <code title="dom-media-CAN_SHOW_CURRENT_FRAME">CAN_SHOW_CURRENT_FRAME</code>.
-    <tr>
-     <td><dfn title="event-canplay"><code>canplay</code></dfn>
-     <td><code>Event</code>
-     <td>The user agent can resume playback of the <span>media data</span>, but estimates that if playback were to be started now, the <span>media resource</span> could not be rendered at the current playback rate up to its end without having to stop for further buffering of content.
-     <td>The <code title="dom-media-readyState">readyState</code> attribute is newly equal to <code title="dom-media-CAN_PLAY">CAN_PLAY</code>.
-    <tr>
-     <td><dfn title="event-canplaythrough"><code>canplaythrough</code></dfn>
-     <td><code>Event</code>
-     <td>The user agent estimates that if playback were to be started now, the <span>media resource</span> could be rendered at the current playback rate all the way to its end without having to stop for further buffering.
-     <td>The <code title="dom-media-readyState">readyState</code> attribute is newly equal to <code title="dom-media-CAN_PLAY_THROUGH">CAN_PLAY_THROUGH</code>.
-    <tr>
      <td><dfn title="event-ratechange"><code>ratechange</code></dfn>
      <td><code>Event</code>
      <td>Either the <code title="dom-media-defaultPlaybackRate">defaultPlaybackRate</code> or the <code title="dom-media-playbackRate">playbackRate</code> attribute has just been updated.




More information about the Commit-Watchers mailing list