[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 (±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 (±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