W3C home > Mailing lists > Public > public-html-diffs@w3.org > October 2008

spec/Overview.html 1.1503 2330 Seriously revamp the <video> state proce

From: poot <cvsmail@w3.org>
Date: Wed, 15 Oct 2008 09:31:36 +0900 (JST)
To: public-html-diffs@w3.org
Message-Id: <20081015003136.E8F8D2BBEB@toro.w3.mag.keio.ac.jp>

Seriously revamp the <video> state processing models and events. (whatwg
r2330)

HAVE_SOME_DATA
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#dom-media-have_some_data
abort
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#event-abort
poster frame
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#poster-frame
HAVE_ENOUGH_DATA
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#dom-media-have_enough_data
HTMLMediaElement
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#htmlmediaelement
canplaythrough
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#event-canplaythrough
If the media data can be fetched but has non-fatal errors or uses, in part, codecs that are unsupported, preventing the user agent from rendering the content completely correctly but not preventing playback altogether
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#non-fatal-media-error
progress
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#event-progress
4.8.10.3 Network states
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#network-states
4.8.10.4 Loading the media resource
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#loading-the-media-resource
HAVE_FUTURE_DATA
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#dom-media-have_future_data
emptied
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#event-emptied
4.8.10.2 Location of the media resource
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#location-of-the-media-resource
When a media element is potentially playing and its Document is an active document, its current playback position must increase monotonically at playbackRate units of media time per unit time of wall clock time.
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#media-playback
ended
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#event-ended
loadedmetadata
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#event-loadedmetadata
NETWORK_LOADING
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#dom-media-network_loading
currentSrc
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#dom-media-currentsrc
loadstart
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#event-loadstart
load()
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#dom-media-load
play
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#event-play
stopped due to errors
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#stopped-due-to-errors
poster
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#dom-video-poster
The user agent must queue a task to fire a simple event called timeupdate at the element.
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#seekUpdate
suspend
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#event-suspend
networkState
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#dom-media-networkstate
4.8.10.6 The ready states
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#the-ready-states
canplay
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#event-canplay
paused for user interaction
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#paused-for-user-interaction
play()
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#dom-media-play
The user agent must queue a task to fire a simple event called loadeddata at the element.
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#fire-loadeddata
currentLoop
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#dom-media-currentloop
error
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#event-error
begun flag
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#begun-flag
readyState
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#dom-media-readystate
autoplay
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#attr-media-autoplay
HAVE_NOTHING
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#dom-media-have_nothing
NETWORK_LOADED
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#dom-media-network_loaded
waiting
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#event-waiting
seekable
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#dom-media-seekable
seeking
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#event-seeking
bufferingRate
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#dom-media-bufferingrate
When a media element that is potentially playing stops playing because its readyState attribute changes to a value lower than HAVE_FUTURE_DATA, without the element having ended playback, or playback having stopped due to errors, or playback having paused for user interaction, or the seeking algorithm being invoked, the user agent must queue a task to fire a simple event called timeupdate at the element, and queue a task to fire a simple event called waiting at the element.
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#fire-waiting-when-waiting
pixelratio
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#attr-source-pixelratio
4.8.10.9 Seeking
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#seeking
bufferingThrottled
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#dom-media-bufferingthrottled
ratechange
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#event-ratechange
pause()
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#dom-media-pause
NETWORK_EMPTY
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#dom-media-network_empty
HAVE_METADATA
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#dom-media-have_metadata
seek
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#dom-media-seek
If the media data can be fetched but is in an unsupported format, or can otherwise not be rendered at all
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#fatal-decode-error
stalled
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#event-stalled
autoplaying flag
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#autoplaying-flag
Status of this document
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#status-of-this-document
ended playback
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#ended-playback
Once enough of the media data has been fetched to enable the user agent to display the frame at the effective start of the media resource
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#handling-first-frame-available
loadeddata
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#event-loadeddata
A vocabulary and associated APIs for HTML and XHTML
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#a-vocabulary-and-associated-apis-for-html-and-xhtml
load
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#event-load
src
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#dom-source-src
ended
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#dom-media-ended
NETWORK_IDLE
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#dom-media-network_idle
The user agent must queue a task to fire a simple event called loadedmetadata at the element.
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#fire-loadedmetadata
potentially playing
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#potentially-playing
Editor's Draft 15 October 2008
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#editor-s-draft-date-zzz-9-june-2008
HAVE_CURRENT_DATA
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#dom-media-have_current_data
pause
http://people.w3.org/mike/diffs/html5/spec/Overview.1.1503.html#event-pause

http://people.w3.org/mike/diffs/html5/spec/Overview.diff.html
http://dev.w3.org/cvsweb/html5/spec/Overview.html?r1=1.1502&r2=1.1503&f=h
http://html5.org/tools/web-apps-tracker?from=2329&to=2330

===================================================================
RCS file: /sources/public/html5/spec/Overview.html,v
retrieving revision 1.1502
retrieving revision 1.1503
diff -u -d -r1.1502 -r1.1503
--- Overview.html	13 Oct 2008 22:23:46 -0000	1.1502
+++ Overview.html	15 Oct 2008 00:26:57 -0000	1.1503
@@ -8,7 +8,7 @@
    <p><a href=http://www.w3.org/><img alt=W3C height=48 src=http://www.w3.org/Icons/w3c_home width=72></a></p>
    <h1>HTML 5</h1>
    <h2 class="no-num no-toc" id=a-vocabulary-and-associated-apis-for-html-and-xhtml>A vocabulary and associated APIs for HTML and XHTML</h2>
-   <h2 class="no-num no-toc" id=editor-s-draft-date-zzz-9-june-2008><!-- "W3C Working Draft" --> Editor's Draft <!--ZZZ-->13 October 2008</h2>
+   <h2 class="no-num no-toc" id=editor-s-draft-date-zzz-9-june-2008><!-- "W3C Working Draft" --> Editor's Draft <!--ZZZ-->15 October 2008</h2>
    <dl><!-- ZZZ: update the month/day
     <dt>This Version:</dt>
     <dd><a href="http://www.w3.org/TR/2008/WD-html5-20080610/">http://www.w3.org/TR/2008/WD-html5-20080610/</a></dd>
@@ -97,7 +97,7 @@
   specification's progress along the W3C Recommendation
   track.
   <!--ZZZ:-->
-  This specification is the 13 October 2008 <!--ZZZ "Working Draft"-->Editor's Draft.
+  This specification is the 15 October 2008 <!--ZZZ "Working Draft"-->Editor's Draft.
   <!--:ZZZ-->
   </p><!-- UNDER NO CIRCUMSTANCES IS THE PRECEDING PARAGRAPH TO BE REMOVED OR EDITED WITHOUT TALKING TO IAN FIRST --><!-- relationship to other work (required) --><p>This specification is also being produced by the <a href=http://www.whatwg.org/>WHATWG</a>. The two specifications are
   identical from the table of contents onwards.</p><!-- UNDER NO CIRCUMSTANCES IS THE FOLLOWING PARAGRAPH TO BE REMOVED OR EDITED WITHOUT TALKING TO IAN FIRST --><!-- UNDER NO CIRCUMSTANCES IS THE PRECEDING PARAGRAPH TO BE REMOVED OR EDITED WITHOUT TALKING TO IAN FIRST --><!-- context and rationale (required) --><p>This specification is intended to replace (be a new version of)
@@ -13126,8 +13126,8 @@
   frame</a></i>, is intended to be a representative frame of the video
   (typically one of the first non-blank frames) that gives the user an
   idea of what the video is like.<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>),
+  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-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>When a <code><a href=#video>video</a></code> element is <a href=#dom-media-paused title=dom-media-paused>paused</a> and the <a href=#current-playback-position title="current
   playback position">current playback position</a> is the first
@@ -13447,8 +13447,9 @@
   agent doesn't adjust the <a href=#concept-video-intrinsic-width title=concept-video-intrinsic-width>intrinsic width</a> of the
   video at all; the intrinsic dimensions and the <a href=#concept-video-pixel-ratio title=concept-video-pixel-ratio>pixel ratio</a> of the video
   are honoured.<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>The DOM attributes <dfn id=dom-source-src title=dom-source-src><code>src</code></dfn>, <dfn id=dom-source-type title=dom-source-type><code>type</code></dfn>, and <dfn id=dom-source-media title=dom-source-media><code>media</code></dfn> must
@@ -13464,11 +13465,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>;
@@ -13478,10 +13478,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>;
 
@@ -13593,13 +13595,12 @@
   attribute, if present, must contain a <a href=#valid-url>valid URL</a>.<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 class=note>If a <code title=attr-media-src><a href=#attr-media-src>src</a></code>
+  <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 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
   resource</a> that will be used. Otherwise, the resource specified
   by the first suitable <code><a href=#the-source-element>source</a></code> element child of the
@@ -13681,37 +13682,29 @@
   </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.<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:<dl><dt><dfn id=dom-media-empty title=dom-media-EMPTY><code>EMPTY</code></dfn> (numeric value 0)</dt>
+  <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.<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, 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:<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>
-
-   <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>
-
-   <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_idle title=dom-media-NETWORK_IDLE><code>NETWORK_IDLE</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 exceptions when used.</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_first_frame title=dom-media-LOADED_FIRST_FRAME><code>LOADED_FIRST_FRAME</code></dfn> (numeric value 3)</dt>
+   <dt><dfn id=dom-media-network_loading title=dom-media-NETWORK_LOADING><code>NETWORK_LOADING</code></dfn> (numeric value 2)</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>
+   <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 title=dom-media-LOADED><code>LOADED</code></dfn> (numeric value 4)</dt>
+   <dt><dfn id=dom-media-network_loaded title=dom-media-NETWORK_LOADED><code>NETWORK_LOADED</code></dfn> (numeric value 3)</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
@@ -13719,11 +13712,10 @@
 
   </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.<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>When the <dfn id=dom-media-load title=dom-media-load><code>load()</code></dfn>
+  value and what events fire to indicate changes in this state.<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.<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, and an
+  <dfn id=autoplaying-flag>autoplaying flag</dfn>, which must begin in the true state.<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
   must run the following steps. Note that this algorithm might get
   aborted, e.g. if the <code title=dom-media-load><a href=#dom-media-load>load()</a></code>
@@ -13755,29 +13747,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
@@ -13810,9 +13801,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
@@ -13839,10 +13830,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 (&plusmn;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 (&plusmn;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
@@ -13854,6 +13847,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
@@ -13888,10 +13889,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>
 
@@ -13924,10 +13924,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>
 
@@ -13956,15 +13955,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>
 
@@ -13998,8 +13998,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>
@@ -14008,8 +14008,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>
@@ -14023,45 +14023,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>
-
-       <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>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>
+      <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 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>
+       <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>
 
       </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>The <dfn id=dom-media-bufferingrate title=dom-media-bufferingRate><code>bufferingRate</code></dfn>
+  <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>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
   for the current download over the past few seconds. If there is no
   download in progress, the attribute must return 0.<p>The <dfn id=dom-media-bufferingthrottled title=dom-media-bufferingThrottled><code>bufferingThrottled</code></dfn>
@@ -14162,8 +14153,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
@@ -14192,43 +14185,53 @@
   to be rendered at the <a href=#current-playback-position>current playback position</a>. The
   possible values are as follows; the ready state of a media element
   at any particular time is the greatest value describing the state of
-  the element:<dl><dt><dfn id=dom-media-data_unavailable title=dom-media-DATA_UNAVAILABLE><code>DATA_UNAVAILABLE</code></dfn> (numeric value 0)</dt>
+  the element:<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>
@@ -14236,53 +14239,66 @@
    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:<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><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:<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 <dfn id=dom-media-readystate title=dom-media-readyState><code>readyState</code></dfn> DOM
+  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>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
   describes the current ready state of the <a href=#media-element>media
   element</a>.<p>The <dfn id=attr-media-autoplay title=attr-media-autoplay><code>autoplay</code></dfn>
@@ -14335,29 +14351,29 @@
   paused or not. The attribute must initially be true.<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>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>The <dfn id=dom-media-ended title=dom-media-ended><code>ended</code></dfn>
   attribute must return true if the <a href=#media-element>media element</a> has
   <a href=#ended-playback>ended playback</a>, and false otherwise.<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>A <a href=#media-element>media element</a> is said to have <dfn id=paused-for-user-interaction>paused for user
+  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>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>It is possible for a <a href=#media-element>media element</a> to have both
+  <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>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
   interaction</a> at the same time.<p>When a <a href=#media-element>media element</a> that is <a href=#potentially-playing>potentially
   playing</a> stops playing because it has <a href=#paused-for-user-interaction>paused for user
@@ -14365,14 +14381,15 @@
   <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.<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>When <code title=dom-media-currentLoop><a href=#dom-media-currentloop>currentLoop</a></code> is
+  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>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
   <a href=#current-playback-position>current playback position</a> reaches the <var><a href=#effective-loop-end>effective
   loop end</a></var>, then the user agent must increase <code title=dom-media-currentLoop><a href=#dom-media-currentloop>currentLoop</a></code> by 1 and <a href=#dom-media-seek title=dom-media-seek>seek</a> to the <var><a href=#effective-loop-start>effective loop
@@ -14420,7 +14437,7 @@
   far rendered, at the time the attribute is evaluated.</p><hr><p>When the <dfn id=dom-media-play title=dom-media-play><code>play()</code></dfn>
   method on a <a href=#media-element>media element</a> is invoked, the user agent
   must run the following steps.<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>
@@ -14466,7 +14483,7 @@
 
   </ol><hr><p>When the <dfn id=dom-media-pause title=dom-media-pause><code>pause()</code></dfn>
   method is invoked, the user agent must run the following steps:<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>
@@ -14497,17 +14514,13 @@
   data at the appropriate rate, so that (except for the period between
   when the rate is changed and when the server updates the stream's
   playback rate) the client doesn't actually have to drop or
-  interpolate any frames.<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><a href=#media-element title="media element">Media elements</a> that are
+  interpolate any frames.<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><a href=#media-element title="media element">Media elements</a> that are
   <a href=#potentially-playing>potentially playing</a> while not <span>in a
   <code>Document</code></span><!-- XXX xref --> must not play any
   video, but should play any audio component. Media elements must not
@@ -14586,18 +14599,17 @@
   </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 class=note>If the <a href=#media-element>media element</a>'s
+  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 class=note>If the <a href=#media-element>media element</a>'s
   <code>Document</code> stops being an active document, then the
   playback will <a href=#media-playback>stop</a> until the document
   is active again.<h5 id=seeking><span class=secno>4.8.10.9 </span>Seeking</h5><p>The <dfn id=dom-media-seeking title=dom-media-seeking><code>seeking</code></dfn>
   attribute must initially have the value false.<p>When the user agent is required to <dfn id=dom-media-seek title=dom-media-seek>seek</dfn> to a particular <var title="">new
   playback position</var> in the <a href=#media-resource>media resource</a>, it means
-  that the user agent must run the following steps:<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>
+  that the user agent must run the following steps:<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
@@ -14632,10 +14644,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,
@@ -14671,7 +14683,10 @@
   attribute would return an object with one range, whose start is the
   time of the first frame (typically zero), and whose end is the same
   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><a href=#media-resource title="media resource">Media resources</a> might be
+  would equal the time of the last frame).<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><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,
   the user agent must act as if the algorithm for <a href=#dom-media-seek title=dom-media-seek>seeking</a> was used whenever the
@@ -14785,42 +14800,39 @@
    <tbody><tr><td><dfn id=event-loadstart title=event-loadstart><code>loadstart</code></dfn>
      <td><code>ProgressEvent</code> <a href=#references>[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=#references>[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=#references>[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=#references>[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=#references>[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=#references>[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.
@@ -14828,11 +14840,29 @@
      <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>stoped 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>
@@ -14848,23 +14878,8 @@
      <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>
-     <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>
+
+   <tbody><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>
Received on Wednesday, 15 October 2008 00:32:19 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Saturday, 18 December 2010 06:13:56 GMT