[html5] r6018 - [giow] (0) Rework MediaController so that it exposes more events so that you can [...]
whatwg at whatwg.org
whatwg at whatwg.org
Tue Apr 19 17:42:11 PDT 2011
Author: ianh
Date: 2011-04-19 17:42:09 -0700 (Tue, 19 Apr 2011)
New Revision: 6018
Modified:
complete.html
index
source
Log:
[giow] (0) Rework MediaController so that it exposes more events so that you can keep track of the overall state.
Modified: complete.html
===================================================================
--- complete.html 2011-04-15 21:15:08 UTC (rev 6017)
+++ complete.html 2011-04-20 00:42:09 UTC (rev 6018)
@@ -239,7 +239,7 @@
<header class=head id=head><p><a class=logo href=http://www.whatwg.org/ rel=home><img alt=WHATWG height=101 src=/images/logo width=101></a></p>
<hgroup><h1>Web Applications 1.0</h1>
- <h2 class="no-num no-toc">Living Standard — Last Updated 15 April 2011</h2>
+ <h2 class="no-num no-toc">Living Standard — Last Updated 20 April 2011</h2>
</hgroup><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>
<!--<p class="impl"><strong>Implementors!</strong> We have a <a href="http://www.whatwg.org/mailing-list#implementors">mailing list</a> for you too!</p>-->
@@ -26471,7 +26471,11 @@
<code title=dom-media-NETWORK_EMPTY><a href=#dom-media-network_empty>NETWORK_EMPTY</a></code>, then
run these substeps:</p>
- <ol><li><p>If a fetching process is in progress for the <a href=#media-element>media
+ <ol><li><p><a href=#queue-a-task>Queue a task</a> to <a href=#fire-a-simple-event>fire a simple
+ event</a> named <code title=event-media-emptied><a href=#event-media-emptied>emptied</a></code> at the <a href=#media-element>media
+ element</a>.</li>
+
+ <li><p>If a fetching process is in progress for the <a href=#media-element>media
element</a>, the user agent should stop it.</li>
<li><p>Set the <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> attribute to
@@ -26484,7 +26488,9 @@
<li><p>If <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> is
not set to <code title=dom-media-HAVE_NOTHING><a href=#dom-media-have_nothing>HAVE_NOTHING</a></code>, then set it
- to that state.</li>
+ to that state.
+ <!-- this can do the "report the controller state" thing -->
+ </li>
<li><p>If the <code title=dom-media-paused><a href=#dom-media-paused>paused</a></code>
attribute is false, then set it to true.</li>
@@ -26520,10 +26526,6 @@
</li>
- <li><p><a href=#queue-a-task>Queue a task</a> to <a href=#fire-a-simple-event>fire a simple
- event</a> named <code title=event-media-emptied><a href=#event-media-emptied>emptied</a></code> at the <a href=#media-element>media
- element</a>.</li>
-
</ol></li>
<li><p>Set the <code title=dom-media-playbackRate><a href=#dom-media-playbackrate>playbackRate</a></code> attribute to the
@@ -26968,22 +26970,21 @@
</li>
- <li><p>Set the <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> attribute to
- <code title=dom-media-HAVE_METADATA><a href=#dom-media-have_metadata>HAVE_METADATA</a></code>.</li>
-
<li><p>For <code><a href=#video>video</a></code> elements, set the <code title=dom-video-videoWidth><a href=#dom-video-videowidth>videoWidth</a></code> and <code title=dom-video-videoHeight><a href=#dom-video-videoheight>videoHeight</a></code>
attributes.</li>
- <li id=fire-loadedmetadata>
+ <li>
- <p><a href=#queue-a-task>Queue a task</a> to <a href=#fire-a-simple-event>fire a simple
- event</a> named <code title=event-media-loadedmetadata><a href=#event-media-loadedmetadata>loadedmetadata</a></code> at the
- element.</p>
+ <p>Set the <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> attribute to
+ <code title=dom-media-HAVE_METADATA><a href=#dom-media-have_metadata>HAVE_METADATA</a></code>.</p>
- <p class=note>Before this task is run, as part of the event
- loop mechanism, the rendering will have been updated to resize
- the <code><a href=#video>video</a></code> element if appropriate.</p>
+ <p class=note>A <code title=event-media-loadedmetadata><a href=#event-media-loadedmetadata>loadedmetadata</a></code> DOM
+ event <a href=#fire-loadedmetadata>will be fired</a> as part
+ of setting the <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> attribute to a
+ new value.</p>
+ <!-- this can also do the "report the controller state" thing -->
+
</li>
<li>
@@ -27003,34 +27004,17 @@
</li>
<!--CONTROLLER-->
- <li>
+ <li><p>If either the <a href=#media-resource>media resource</a> or the address
+ of the <var title="">current media resource</var> indicate a
+ particular set of audio or video tracks to enable, then the
+ selected audio tracks must be enabled in the element's <code title=dom-media-audioTracks><a href=#dom-media-audiotracks>audioTracks</a></code> object, and
+ the first selected video track must be selected in the
+ element's <code title=dom-media-videoTracks><a href=#dom-media-videotracks>videoTracks</a></code>
+ object.</li>
- <p>If either the <a href=#media-resource>media resource</a> or the address of
- the <var title="">current media resource</var> indicate a
- particular set of audio or video tracks to enable, then the
- selected audio tracks must be enabled in the element's <code title=dom-media-audioTracks><a href=#dom-media-audiotracks>audioTracks</a></code> object, and
- the first selected video track must be selected in the
- element's <code title=dom-media-videoTracks><a href=#dom-media-videotracks>videoTracks</a></code> object.</p>
-
- </li>
-
- <li>
-
- <p>If the <a href=#media-element>media element</a> has a <a href=#current-media-controller>current
- media controller</a>, then: if the <a href=#initial-playback-position>initial playback
- position</a>, relative to the <a href=#current-media-controller>current media
- controller</a>'s timeline, is greater than the
- <a href=#current-media-controller>current media controller</a>'s <a href=#media-controller-position>media controller
- position</a>, then <a href=#seek-the-media-controller>seek the media controller</a>
- to the <a href=#media-element>media element</a>'s <a href=#initial-playback-position>initial playback
- position</a>, relative to the <a href=#current-media-controller>current media
- controller</a>'s timeline; otherwise, <a href=#dom-media-seek title=dom-media-seek>seek</a> the <a href=#media-element>media
- element</a> to the <a href=#media-controller-position>media controller position</a>,
- relative to the <a href=#media-element>media element</a>'s timeline,
- discarding any resulting exceptions.</p> <!-- i.e. "bring the
- media element up to speed with its new media controller" -->
-
- </li>
+ <li><p>If the <a href=#media-element>media element</a> has a <a href=#current-media-controller>current
+ media controller</a>, then <a href=#bring-the-media-element-up-to-speed-with-its-new-media-controller>bring the media element up
+ to speed with its new media controller</a>.</p>
<!--CONTROLLER-->
<li>
@@ -27693,100 +27677,129 @@
<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><!-- going up to metadata --><dt>If the previous 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>
+ <ol><li>
- <dd>
+ <p>Apply the first applicable set of substeps from the following
+ list:</p>
- <p class=note>A <code title=event-media-loadedmetadata><a href=#event-media-loadedmetadata>loadedmetadata</a></code> DOM event <a href=#fire-loadedmetadata>will be fired</a> as part of the <code title=dom-media-load><a href=#dom-media-load>load()</a></code> algorithm.</p>
- </dd>
+ <dl class=switch><!-- going up to metadata --><dt>If the previous 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>
- <!-- going up to current for the first time -->
+ <dd id=fire-loadedmetadata>
- <dt id=handling-first-frame-available>If the previous 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> or
- greater</dt>
+ <p><a href=#queue-a-task>Queue a task</a> to <a href=#fire-a-simple-event>fire a simple event</a>
+ named <code title=event-media-loadedmetadata><a href=#event-media-loadedmetadata>loadedmetadata</a></code> at the
+ element.</p>
- <dd>
+ <p class=note>Before this task is run, as part of the event
+ loop mechanism, the rendering will have been updated to resize
+ the <code><a href=#video>video</a></code> element if appropriate.</p>
- <p id=fire-loadeddata>If this is the first time this occurs for
- this <a href=#media-element>media element</a> since the <code title=dom-media-load><a href=#dom-media-load>load()</a></code> algorithm was last 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> named <code title=event-media-loadeddata><a href=#event-media-loadeddata>loadeddata</a></code> at the element.</p>
+ </dd>
- <p>If 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
- <code title=dom-media-HAVE_ENOUGH_DATA><a href=#dom-media-have_enough_data>HAVE_ENOUGH_DATA</a></code>,
- then the relevant steps below must then be run also.</p>
+ <!-- going up to current for the first time -->
- </dd>
+ <dt id=handling-first-frame-available>If the previous 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> or
+ greater</dt>
- <!-- going down -->
- <dt>If the previous 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>
- <dd>
+ <p id=fire-loadeddata>If this is the first time this occurs for
+ this <a href=#media-element>media element</a> since the <code title=dom-media-load><a href=#dom-media-load>load()</a></code> algorithm was last 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> named <code title=event-media-loadeddata><a href=#event-media-loadeddata>loadeddata</a></code> at the element.</p>
- <p class=note>A <code title=event-media-waiting><a href=#event-media-waiting>waiting</a></code> DOM
- event <a href=#fire-waiting-when-waiting>can be fired</a>,
- depending on the current state of playback.</p>
+ <p>If 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
+ <code title=dom-media-HAVE_ENOUGH_DATA><a href=#dom-media-have_enough_data>HAVE_ENOUGH_DATA</a></code>,
+ then the relevant steps below must then be run also.</p>
- </dd>
+ </dd>
- <!-- going up to future -->
- <dt>If the previous 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></dt>
+ <!-- going down -->
+ <dt>If the previous 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>
+ <dd>
- <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> named <code title=event-media-canplay><a href=#event-media-canplay>canplay</a></code>.</p>
+ <p id=fire-waiting-when-waiting>If the <a href=#media-element>media
+ element</a> was <a href=#potentially-playing>potentially playing</a> before its
+ <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> attribute
+ changed to a value lower than <code title=dom-media-HAVE_FUTURE_DATA><a href=#dom-media-have_future_data>HAVE_FUTURE_DATA</a></code>, and
+ the element has not <a href=#ended-playback>ended playback</a>, and playback
+ has not <a href=#stopped-due-to-errors>stopped due to errors</a>, and playback has not
+ <a href=#paused-for-user-interaction>paused for user interaction</a>, 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>
+ named <code title=event-media-timeupdate><a href=#event-media-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> named <code title=event-media-waiting><a href=#event-media-waiting>waiting</a></code> at the element.</p>
- <p>If the element's <code title=dom-media-paused><a href=#dom-media-paused>paused</a></code>
- attribute is false, 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> named <code title=event-media-playing><a href=#event-media-playing>playing</a></code>.</p>
+ </dd>
- </dd>
+ <!-- going up to future -->
+ <dt>If the previous 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></dt>
- <!-- going up to enough -->
- <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>
- <dd>
+ <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> named <code title=event-media-canplay><a href=#event-media-canplay>canplay</a></code>.</p>
- <p>If the previous ready state was <code title=dom-media-HAVE_CURRENT_DATA><a href=#dom-media-have_current_data>HAVE_CURRENT_DATA</a></code> or
- less, 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> named <code title=event-media-canplay><a href=#event-media-canplay>canplay</a></code>, and, if the element's
- <code title=dom-media-paused><a href=#dom-media-paused>paused</a></code> attribute is false,
- <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple event</a>
- named <code title=event-media-playing><a href=#event-media-playing>playing</a></code>.</p>
+ <p>If the element's <code title=dom-media-paused><a href=#dom-media-paused>paused</a></code>
+ attribute is false, 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> named <code title=event-media-playing><a href=#event-media-playing>playing</a></code>.</p>
- <p>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,
- and the <a href=#media-element>media element</a>'s <code><a href=#document>Document</a></code>'s
- <a href=#browsing-context>browsing context</a> did not have the <a href=#sandboxed-automatic-features-browsing-context-flag>sandboxed
- automatic features browsing context flag</a> set when the
- <code><a href=#document>Document</a></code> was created, then the user agent may also
- set the <code title=dom-media-paused><a href=#dom-media-paused>paused</a></code> attribute to
- false, <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple
- event</a> named <code title=event-media-play><a href=#event-media-play>play</a></code>, and
- <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple event</a>
- named <code title=event-media-playing><a href=#event-media-playing>playing</a></code>.</p>
+ </dd>
- <p class=note>User agents do not need to support autoplay,
- and it is suggested that user agents honor user preferences on the
- matter. Authors are urged to use the <code title=attr-media-autoplay><a href=#attr-media-autoplay>autoplay</a></code> attribute rather than
- using script to force the video to play, so as to allow the user
- to override the behavior if so desired.</p>
+ <!-- going up to enough -->
+ <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>
- <p>In any case, the user agent must finally <a href=#queue-a-task>queue a
- task</a> to <a href=#fire-a-simple-event>fire a simple event</a> named <code title=event-media-canplaythrough><a href=#event-media-canplaythrough>canplaythrough</a></code>.</p>
+ <dd>
- </dd>
+ <p>If the previous ready state was <code title=dom-media-HAVE_CURRENT_DATA><a href=#dom-media-have_current_data>HAVE_CURRENT_DATA</a></code> or
+ less, 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> named <code title=event-media-canplay><a href=#event-media-canplay>canplay</a></code>, and, if the element's
+ <code title=dom-media-paused><a href=#dom-media-paused>paused</a></code> attribute is false,
+ <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple event</a>
+ named <code title=event-media-playing><a href=#event-media-playing>playing</a></code>.</p>
- </dl></div>
+ <p>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,
+ and the <a href=#media-element>media element</a>'s <code><a href=#document>Document</a></code>'s
+ <a href=#browsing-context>browsing context</a> did not have the <a href=#sandboxed-automatic-features-browsing-context-flag>sandboxed
+ automatic features browsing context flag</a> set when the
+ <code><a href=#document>Document</a></code> was created, then the user agent may also
+ set the <code title=dom-media-paused><a href=#dom-media-paused>paused</a></code> attribute to
+ false, <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple
+ event</a> named <code title=event-media-play><a href=#event-media-play>play</a></code>, and
+ <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple event</a>
+ named <code title=event-media-playing><a href=#event-media-playing>playing</a></code>.</p>
+ <p class=note>User agents do not need to support autoplay,
+ and it is suggested that user agents honor user preferences on the
+ matter. Authors are urged to use the <code title=attr-media-autoplay><a href=#attr-media-autoplay>autoplay</a></code> attribute rather than
+ using script to force the video to play, so as to allow the user
+ to override the behavior if so desired.</p>
+
+ <p>In any case, the user agent must finally <a href=#queue-a-task>queue a
+ task</a> to <a href=#fire-a-simple-event>fire a simple event</a> named <code title=event-media-canplaythrough><a href=#event-media-canplaythrough>canplaythrough</a></code>.</p>
+
+ </dd>
+
+ </dl></li>
+
+<!--CONTROLLER-->
+ <li><p>If the <a href=#media-element>media element</a> has a <a href=#current-media-controller>current media
+ controller</a>, then <a href=#report-the-controller-state>report the controller state</a>
+ for the <a href=#media-element>media element</a>'s <a href=#current-media-controller>current media
+ controller</a>.</li>
+<!--CONTROLLER-->
+
+ </ol></div>
+
<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 can jump straight from <code title=dom-media-HAVE_METADATA><a href=#dom-media-have_metadata>HAVE_METADATA</a></code> to <code title=dom-media-HAVE_ENOUGH_DATA><a href=#dom-media-have_enough_data>HAVE_ENOUGH_DATA</a></code> without
@@ -27994,7 +28007,19 @@
<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>
+ resource to continue.
+<!--CONTROLLER-->
+ If the <a href=#media-element>media element</a> has a <a href=#current-media-controller>current media
+ controller</a> when this happens, then the user agent must
+ <a href=#report-the-controller-state>report the controller state</a> for the <a href=#media-element>media
+ element</a>'s <a href=#current-media-controller>current media controller</a>. If If the
+ <a href=#media-element>media element</a> has a <a href=#current-media-controller>current media
+ controller</a> when the user makes a selection, allowing playback
+ to resume, the user agent must similarly <a href=#report-the-controller-state>report the controller
+ state</a> for the <a href=#media-element>media element</a>'s <a href=#current-media-controller>current
+ media controller</a>.
+<!--CONTROLLER-->
+ </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
@@ -28005,18 +28030,11 @@
interaction</a>, 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> named <code title=event-media-timeupdate><a href=#event-media-timeupdate>timeupdate</a></code> at the element.</p>
- <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-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> named <code title=event-media-timeupdate><a href=#event-media-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> named <code title=event-media-waiting><a href=#event-media-waiting>waiting</a></code> at
- the element.</p>
+ <p class=note>A <code title=event-media-waiting><a href=#event-media-waiting>waiting</a></code>
+ DOM event <a href=#fire-waiting-when-waiting>can be fired</a> as a
+ result of an element that is <a href=#potentially-playing>potentially playing</a>
+ stopping playback due to its <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> attribute changing to
+ a value lower than <code title=dom-media-HAVE_FUTURE_DATA><a href=#dom-media-have_future_data>HAVE_FUTURE_DATA</a></code>.</p>
<p>When the <a href=#current-playback-position>current playback position</a> reaches the end
of the <a href=#media-resource>media resource</a> when the <a href=#direction-of-playback>direction of
@@ -28165,6 +28183,13 @@
<li><p>Set the <a href=#media-element>media element</a>'s <a href=#autoplaying-flag>autoplaying
flag</a> to false.</li>
+<!--CONTROLLER-->
+ <li><p>If the <a href=#media-element>media element</a> has a <a href=#current-media-controller>current media
+ controller</a>, then <a href=#report-the-controller-state>report the controller state</a>
+ for the <a href=#media-element>media element</a>'s <a href=#current-media-controller>current media
+ controller</a>.</li>
+<!--CONTROLLER-->
+
</ol><hr><p>When the <dfn id=dom-media-pause title=dom-media-pause><code>pause()</code></dfn>
method is invoked, and when the user agent is required to pause the
<a href=#media-element>media element</a>, the user agent must run the following
@@ -28193,6 +28218,13 @@
</ol></li>
+<!--CONTROLLER-->
+ <li><p>If the <a href=#media-element>media element</a> has a <a href=#current-media-controller>current media
+ controller</a>, then <a href=#report-the-controller-state>report the controller state</a>
+ for the <a href=#media-element>media element</a>'s <a href=#current-media-controller>current media
+ controller</a>.</li>
+<!--CONTROLLER-->
+
</ol><hr><p>The
<!--CONTROLLER-->
<dfn id=effective-playback-rate>effective playback rate</dfn> is not necessarily the element's
@@ -28493,29 +28525,32 @@
<code title=dom-media-seeking><a href=#dom-media-seeking>seeking</a></code> IDL attribute to
false and abort these steps.</li>
- <li><p>Set the <a href=#current-playback-position>current playback position</a> to the given
- <var title="">new playback position</var>.</li>
-
<li><p><a href=#queue-a-task>Queue a task</a> to <a href=#fire-a-simple-event>fire a simple
event</a> named <code title=event-media-seeking><a href=#event-media-seeking>seeking</a></code>
at the element.</li>
- <li id=seekUpdate><p><a href=#queue-a-task>Queue a task</a> to <a href=#fire-a-simple-event>fire a
- simple event</a> named <code title=event-media-timeupdate><a href=#event-media-timeupdate>timeupdate</a></code> at the
- element.</li>
+ <li>
- <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-HAVE_FUTURE_DATA><a href=#dom-media-have_future_data>HAVE_FUTURE_DATA</a></code>, then
- <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple event</a> named
- <code title=event-media-waiting><a href=#event-media-waiting>waiting</a></code> at the
- element.</li>
+ <p>Set the <a href=#current-playback-position>current playback position</a> to the given
+ <var title="">new playback position</var>.</p>
+ <p class=note>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-HAVE_FUTURE_DATA><a href=#dom-media-have_future_data>HAVE_FUTURE_DATA</a></code>, then a
+ <code title=event-media-waiting><a href=#event-media-waiting>waiting</a></code> <a href=#fire-waiting-when-waiting>will be fired</a> at the
+ element.</p> <!-- also, timeupdate -->
+ <!-- also, it will do the "report the controller state" thing -->
+
+ </li>
+
<li><p>Wait until the user agent has 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, until it has decoded
- enough data to play back that position.</li>
+ enough data to play back that position.</p>
+ <!-- at which point, it will do the "port the controller state"
+ thing again -->
+ </li>
<li><p><a href=#await-a-stable-state>Await a stable state</a>. The <a href=#synchronous-section>synchronous
section</a> consists of all the remaining steps of this
@@ -28525,6 +28560,10 @@
<li><p>⌛ Set the <code title=dom-media-seeking><a href=#dom-media-seeking>seeking</a></code> IDL attribute to
false.</li>
+ <li id=seekUpdate><p><a href=#queue-a-task>Queue a task</a> to <a href=#fire-a-simple-event>fire a
+ simple event</a> named <code title=event-media-timeupdate><a href=#event-media-timeupdate>timeupdate</a></code> at the
+ element.</li>
+
<li><p>⌛ <a href=#queue-a-task>Queue a task</a> to <a href=#fire-a-simple-event>fire a simple
event</a> named <code title=event-media-seeked><a href=#event-media-seeked>seeked</a></code>
at the element.</li>
@@ -28907,6 +28946,14 @@
attribute double <a href=#dom-mediacontroller-volume title=dom-MediaController-volume>volume</a>;
attribute boolean <a href=#dom-mediacontroller-muted title=dom-MediaController-muted>muted</a>;
+ attribute <a href=#function>Function</a> <a href=#handler-mediacontroller-onemptied title=handler-MediaController-onemptied>onemptied</a>;
+ attribute <a href=#function>Function</a> <a href=#handler-mediacontroller-onloadedmetadata title=handler-MediaController-onloadedmetadata>onloadedmetadata</a>;
+ attribute <a href=#function>Function</a> <a href=#handler-mediacontroller-onloadeddata title=handler-MediaController-onloadeddata>onloadeddata</a>;
+ attribute <a href=#function>Function</a> <a href=#handler-mediacontroller-oncanplay title=handler-MediaController-oncanplay>oncanplay</a>;
+ attribute <a href=#function>Function</a> <a href=#handler-mediacontroller-oncanplaythrough title=handler-MediaController-oncanplaythrough>oncanplaythrough</a>;
+ attribute <a href=#function>Function</a> <a href=#handler-mediacontroller-onplaying title=handler-MediaController-onplaying>onplaying</a>;
+ attribute <a href=#function>Function</a> <a href=#handler-mediacontroller-onwaiting title=handler-MediaController-onwaiting>onwaiting</a>;
+
attribute <a href=#function>Function</a> <a href=#handler-mediacontroller-ondurationchange title=handler-MediaController-ondurationchange>ondurationchange</a>;
attribute <a href=#function>Function</a> <a href=#handler-mediacontroller-ontimeupdate title=handler-MediaController-ontimeupdate>ontimeupdate</a>;
attribute <a href=#function>Function</a> <a href=#handler-mediacontroller-onplay title=handler-MediaController-onplay>onplay</a>;
@@ -29078,7 +29125,146 @@
must use the same clock for their definition of their <a href=#media-timeline>media
timeline</a>'s unit time.</p>
- <p>The <a href=#media-resource title="media resource">media resources</a> of all
+ <hr><p>The <dfn id=dom-media-controller title=dom-media-controller><code>controller</code></dfn> attribute
+ on a <a href=#media-element>media element</a>, on getting, must return the
+ element's <a href=#current-media-controller>current media controller</a>, if any, or null
+ otherwise. On setting, it must first remove the element's <code title=attr-media-mediagroup><a href=#attr-media-mediagroup>mediagroup</a></code> attribute, if any,
+ and then set the <a href=#current-media-controller>current media controller</a> to the given
+ value. If the given value is null, the element no longer has a
+ <a href=#current-media-controller>current media controller</a>; if it is not null, then the
+ user agent must <a href=#bring-the-media-element-up-to-speed-with-its-new-media-controller>bring the media element up to speed with its
+ new media controller</a>.</p>
+
+ <hr><p>The <dfn id=dom-mediacontroller title=dom-MediaController><code>MediaController()</code></dfn>
+ constructor, when invoked, must return a newly created
+ <code><a href=#mediacontroller>MediaController</a></code> object.</p>
+
+ <hr><p>The <dfn id=dom-mediacontroller-seekable title=dom-MediaController-seekable><code>seekable</code></dfn>
+ attribute must return a new static <a href=#normalized-timeranges-object>normalized
+ <code>TimeRanges</code> object</a> that represents the
+ intersection of the ranges of the <a href=#media-resource title="media resource">media
+ resources</a> of the <a href=#slaved-media-elements>slaved media elements</a> that the
+ user agent is able to seek to, at the time the attribute is
+ evaluated.</p>
+
+ <p>The <dfn id=dom-mediacontroller-buffered title=dom-MediaController-buffered><code>buffered</code></dfn>
+ attribute must return a new static <a href=#normalized-timeranges-object>normalized
+ <code>TimeRanges</code> object</a> that represents the
+ intersection of the ranges of the <a href=#media-resource title="media resource">media
+ resources</a> of the <a href=#slaved-media-elements>slaved media elements</a> that the
+ user agent has buffered, at the time the attribute is evaluated.
+ Users agents must accurately determine the ranges available, even
+ for media streams where this can only be determined by tedious
+ inspection.</p>
+
+ <p>The <dfn id=dom-mediacontroller-duration title=dom-MediaController-duration><code>duration</code></dfn>
+ attribute must return the <a href=#media-controller-duration>media controller
+ duration</a>.</p>
+
+ <p>Every 15 to 250ms, or whenever the <code><a href=#mediacontroller>MediaController</a></code>'s
+ <a href=#media-controller-duration>media controller duration</a> changes, whichever happens
+ least often, 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> named <code title=event-MediaController-durationchange><a href=#event-mediacontroller-durationchange>durationchange</a></code>
+ at the <code><a href=#mediacontroller>MediaController</a></code>. If the
+ <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-duration>media controller
+ duration</a> decreases such that the <a href=#media-controller-position>media controller
+ position</a> is greater than the <a href=#media-controller-duration>media controller
+ duration</a>, the user agent must immediately <a href=#seek-the-media-controller>seek the
+ media controller</a> to <a href=#media-controller-duration>media controller
+ duration</a>.</p>
+
+ <p>The <dfn id=dom-mediacontroller-currenttime title=dom-MediaController-currentTime><code>currentTime</code></dfn>
+ attribute must return the <a href=#media-controller-position>media controller position</a> on
+ getting, and on setting must <a href=#seek-the-media-controller>seek the media controller</a>
+ to the new value.</p>
+
+ <p>Every 15 to 250ms, or whenever the <code><a href=#mediacontroller>MediaController</a></code>'s
+ <a href=#media-controller-position>media controller position</a> changes, whichever happens
+ least often, 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> named <code title=event-MediaController-timeupdate><a href=#event-mediacontroller-timeupdate>timeupdate</a></code> at the
+ <code><a href=#mediacontroller>MediaController</a></code>.</p>
+
+ <hr><p>When a <code><a href=#mediacontroller>MediaController</a></code> is created it is a
+ <dfn id=playing-media-controller>playing media controller</dfn>. It can be changed into a
+ <dfn id=paused-media-controller>paused media controller</dfn> and back either via the user
+ agent's user interface (when the element is <a href=#expose-a-user-interface-to-the-user title="expose a
+ user interface to the user">exposing a user interface to the
+ user</a>) or by script using the APIs defined in this section
+ (see below).</p>
+
+ <p>The <dfn id=dom-mediacontroller-paused title=dom-MediaController-paused><code>paused</code></dfn>
+ attribute must return true if the <code><a href=#mediacontroller>MediaController</a></code>
+ object is a <a href=#paused-media-controller>paused media controller</a>, and false
+ otherwise.</p>
+
+ <p>When the <dfn id=dom-mediacontroller-pause title=dom-MediaController-pause><code>pause()</code></dfn> method
+ is invoked, if the <code><a href=#mediacontroller>MediaController</a></code> is a <a href=#playing-media-controller>playing
+ media controller</a> then the user agent must change the
+ <code><a href=#mediacontroller>MediaController</a></code> into a <a href=#paused-media-controller>paused media
+ controller</a>, <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple
+ event</a> named <code title=event-MediaController-pause><a href=#event-mediacontroller-pause>pause</a></code> at the
+ <code><a href=#mediacontroller>MediaController</a></code>, and then <a href=#report-the-controller-state>report the controller
+ state</a> of the <code><a href=#mediacontroller>MediaController</a></code>.</p>
+
+ <p>When the <dfn id=dom-mediacontroller-play title=dom-MediaController-play><code>play()</code></dfn> method is
+ invoked, if the <code><a href=#mediacontroller>MediaController</a></code> is a <a href=#paused-media-controller>paused media
+ controller</a>, the user agent must change the
+ <code><a href=#mediacontroller>MediaController</a></code> into a <a href=#playing-media-controller>playing media
+ controller</a>, <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple
+ event</a> named <code title=event-MediaController-play><a href=#event-mediacontroller-play>play</a></code> at the
+ <code><a href=#mediacontroller>MediaController</a></code>, and then <a href=#report-the-controller-state>report the controller
+ state</a> of the <code><a href=#mediacontroller>MediaController</a></code>.</p>
+
+ <hr><p>A <code><a href=#mediacontroller>MediaController</a></code> has a <dfn id=media-controller-default-playback-rate>media controller
+ default playback rate</dfn> and a <dfn id=media-controller-playback-rate>media controller playback
+ rate</dfn>, which must both be set to 1.0 when the
+ <code><a href=#mediacontroller>MediaController</a></code> object is created.</p>
+
+ <p>The <dfn id=dom-mediacontroller-defaultplaybackrate title=dom-MediaController-defaultPlaybackRate><code>defaultPlaybackRate</code></dfn>
+ attribute, on getting, must return the
+ <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-default-playback-rate>media controller default
+ playback rate</a>, and on setting, must set the
+ <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-default-playback-rate>media controller default
+ playback rate</a> to the new value, then <a href=#queue-a-task>queue a
+ task</a> to <a href=#fire-a-simple-event>fire a simple event</a> named <code title=event-MediaController-ratechange><a href=#event-mediacontroller-ratechange>ratechange</a></code> at the
+ <code><a href=#mediacontroller>MediaController</a></code>.</p>
+
+ <p>The <dfn id=dom-mediacontroller-playbackrate title=dom-MediaController-playbackRate><code>playbackRate</code></dfn>
+ attribute, on getting, must return the
+ <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-playback-rate>media controller playback
+ rate</a>, and on setting, must set the
+ <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-playback-rate>media controller playback
+ rate</a> to the new value, then <a href=#queue-a-task>queue a task</a> to
+ <a href=#fire-a-simple-event>fire a simple event</a> named <code title=event-MediaController-ratechange><a href=#event-mediacontroller-ratechange>ratechange</a></code> at the
+ <code><a href=#mediacontroller>MediaController</a></code>.</p>
+
+ <hr><p>A <code><a href=#mediacontroller>MediaController</a></code> has a <dfn id=media-controller-volume-multiplier>media controller volume
+ multiplier</dfn>, which must be set to 1.0 when the
+ <code><a href=#mediacontroller>MediaController</a></code> object is created, and a <dfn id=media-controller-mute-override>media
+ controller mute override</dfn>, much must initially be false.</p>
+
+ <p>The <dfn id=dom-mediacontroller-volume title=dom-MediaController-volume><code>volume</code></dfn>
+ attribute, on getting, must return the
+ <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-volume-multiplier>media controller volume
+ multiplier</a>, and on setting, if the new value is in the range
+ 0.0 to 1.0 inclusive, must set the <code><a href=#mediacontroller>MediaController</a></code>'s
+ <a href=#media-controller-volume-multiplier>media controller volume multiplier</a> to the new value and
+ <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple event</a> named
+ <code title=event-MediaController-volumechange><a href=#event-mediacontroller-volumechange>volumechange</a></code>
+ at the <code><a href=#mediacontroller>MediaController</a></code>. If the new value is outside the
+ range 0.0 to 1.0 inclusive, then, on setting, an
+ <code><a href=#index_size_err>INDEX_SIZE_ERR</a></code> exception must be raised instead.</p>
+
+ <p>The <dfn id=dom-mediacontroller-muted title=dom-MediaController-muted><code>muted</code></dfn>
+ attribute, on getting, must return the
+ <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-mute-override>media controller mute
+ override</a>, and on setting, must set the
+ <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-mute-override>media controller mute
+ override</a> to the new value and <a href=#queue-a-task>queue a task</a> to
+ <a href=#fire-a-simple-event>fire a simple event</a> named <code title=event-MediaController-volumechange><a href=#event-mediacontroller-volumechange>volumechange</a></code> at
+ the <code><a href=#mediacontroller>MediaController</a></code>.</p>
+
+ <hr><p>The <a href=#media-resource title="media resource">media resources</a> of all
the <a href=#slaved-media-elements>slaved media elements</a> of a
<code><a href=#mediacontroller>MediaController</a></code> have a defined temporal relationship
which provides relative offsets between the zero time of each such
@@ -29158,15 +29344,7 @@
exceptions.</li> <!-- i.e. "bring the media element up to speed
with its new media controller" -->
- </ol><p>When a <code><a href=#mediacontroller>MediaController</a></code> is created it is a
- <dfn id=playing-media-controller>playing media controller</dfn>. It can be changed into a
- <dfn id=paused-media-controller>paused media controller</dfn> and back either via the user
- agent's user interface (when the element is <a href=#expose-a-user-interface-to-the-user title="expose a
- user interface to the user">exposing a user interface to the
- user</a>) or via the APIs defined in this section (see
- below).</p>
-
- <p>A <code><a href=#mediacontroller>MediaController</a></code> is a <dfn id=blocked-media-controller>blocked media
+ </ol><p>A <code><a href=#mediacontroller>MediaController</a></code> is a <dfn id=blocked-media-controller>blocked media
controller</dfn> if the <code><a href=#mediacontroller>MediaController</a></code> is a
<a href=#paused-media-controller>paused media controller</a>, or if any of its <a href=#slaved-media-elements>slaved
media elements</a> are <a href=#blocked-media-element title="blocked media
@@ -29183,14 +29361,6 @@
the <a href=#media-resource>media resource</a> relative to the
<code><a href=#mediacontroller>MediaController</a></code>'s timeline.</p>
- <p>A <code><a href=#mediacontroller>MediaController</a></code> has a <dfn id=media-controller-default-playback-rate>media controller
- default playback rate</dfn>, a <dfn id=media-controller-playback-rate>media controller playback
- rate</dfn>, and a <dfn id=media-controller-volume-multiplier>media controller volume multiplier</dfn>,
- which must all be set to 1.0 when the <code><a href=#mediacontroller>MediaController</a></code>
- object is created. A <code><a href=#mediacontroller>MediaController</a></code> also has a
- <dfn id=media-controller-mute-override>media controller mute override</dfn>, much must initially be
- false.</p>
-
<p id=controller-playback>When a <code><a href=#mediacontroller>MediaController</a></code> is
not a <a href=#blocked-media-controller>blocked media controller</a> and it has at least one
<a href=#slaved-media-elements title="slaved media elements">slaved media element</a>
@@ -29201,134 +29371,106 @@
<code><a href=#mediacontroller>MediaController</a></code>'s timeline per unit time of the clock
used by its <a href=#slaved-media-elements>slaved media elements</a>.</p>
- <hr><p>The <dfn id=dom-media-controller title=dom-media-controller><code>controller</code></dfn> attribute
- on a <a href=#media-element>media element</a>, on getting, must return the
- element's <a href=#current-media-controller>current media controller</a>, if any, or null
- otherwise. On setting, it must first remove the element's <code title=attr-media-mediagroup><a href=#attr-media-mediagroup>mediagroup</a></code> attribute, if any,
- and then set the <a href=#current-media-controller>current media controller</a> to the given
- value. If the given value is null, the element no longer has a
- <a href=#current-media-controller>current media controller</a>; if it is not null, then the
- user agent must <a href=#bring-the-media-element-up-to-speed-with-its-new-media-controller>bring the media element up to speed with its
- new media controller</a>.</p>
+ <p>When the zero point on the timeline of a
+ <code><a href=#mediacontroller>MediaController</a></code> moves relative to the timelines of the
+ <a href=#slaved-media-elements>slaved media elements</a> by a time difference <var title="">ΔT</var>, the <code><a href=#mediacontroller>MediaController</a></code>'s
+ <a href=#media-controller-position>media controller position</a> must be decremented by <var title="">ΔT</var>.</p>
- <hr><p>The <dfn id=dom-mediacontroller title=dom-MediaController><code>MediaController()</code></dfn>
- constructor, when invoked, must return a newly created
- <code><a href=#mediacontroller>MediaController</a></code> object.</p>
+ <p class=note>In some situations, e.g. when playing back a live
+ stream without buffering anything, the <a href=#media-controller-position>media controller
+ position</a> would increase motonically as described above at the
+ same rate as the <var title="">ΔT</var> described in the
+ previous paragraph decreases it, with the end result that for all
+ intents and purposes, the <a href=#media-controller-position>media controller position</a>
+ would appear to remain constant (probably with the value 0).</p>
- <hr><p>The <dfn id=dom-mediacontroller-seekable title=dom-MediaController-seekable><code>seekable</code></dfn>
- attribute must return a new static <a href=#normalized-timeranges-object>normalized
- <code>TimeRanges</code> object</a> that represents the
- intersection of the ranges of the <a href=#media-resource title="media resource">media
- resources</a> of the <a href=#slaved-media-elements>slaved media elements</a> that the
- user agent is able to seek to, at the time the attribute is
- evaluated.</p>
+ <hr><p>A <code><a href=#mediacontroller>MediaController</a></code> has a <dfn id=most-recently-reported-readiness-state>most recently reported
+ readiness state</dfn>, which is a number from 0 to 4 derived from
+ the numbers used for the <a href=#media-element>media element</a> <code title=attr-media-readyState>readyState</code> attribute, and a
+ <dfn id=most-recently-reported-playback-state>most recently reported playback state</dfn>, which is either
+ <i>playing</i> or <i>waiting</i>.</p>
- <p>The <dfn id=dom-mediacontroller-buffered title=dom-MediaController-buffered><code>buffered</code></dfn>
- attribute must return a new static <a href=#normalized-timeranges-object>normalized
- <code>TimeRanges</code> object</a> that represents the
- intersection of the ranges of the <a href=#media-resource title="media resource">media
- resources</a> of the <a href=#slaved-media-elements>slaved media elements</a> that the
- user agent has buffered, at the time the attribute is evaluated.
- Users agents must accurately determine the ranges available, even
- for media streams where this can only be determined by tedious
- inspection.</p>
+ <p>When a <code><a href=#mediacontroller>MediaController</a></code> is created, its <a href=#most-recently-reported-readiness-state>most
+ recently reported readiness state</a> must be set to 0, and its
+ <a href=#most-recently-reported-playback-state>most recently reported playback state</a> must be set to
+ <i>waiting</i>.</p>
- <p>The <dfn id=dom-mediacontroller-duration title=dom-MediaController-duration><code>duration</code></dfn>
- attribute must return the <a href=#media-controller-duration>media controller
- duration</a>.</p>
+ <p>When a user agent is required to <dfn id=report-the-controller-state>report the controller
+ state</dfn> for a <code><a href=#mediacontroller>MediaController</a></code>, the user agent must
+ run the following steps:</p>
- <p>Every 15 to 250ms, or whenever the <code><a href=#mediacontroller>MediaController</a></code>'s
- <a href=#media-controller-duration>media controller duration</a> changes, whichever happens
- least often, 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> named <code title=event-MediaController-durationchange><a href=#event-mediacontroller-durationchange>durationchange</a></code> at the
- <code><a href=#mediacontroller>MediaController</a></code>.</p>
+ <ol><li>
- <p>The <dfn id=dom-mediacontroller-currenttime title=dom-MediaController-currentTime><code>currentTime</code></dfn>
- attribute must return the <a href=#media-controller-position>media controller position</a> on
- getting, and on setting must <a href=#seek-the-media-controller>seek the media controller</a>
- to the new value.</p>
+ <p>If the <code><a href=#mediacontroller>MediaController</a></code> has no <a href=#slaved-media-elements>slaved media
+ elements</a>, let <var title="">new readiness state</var> be
+ 0.</p>
- <p>Every 15 to 250ms, or whenever the <code><a href=#mediacontroller>MediaController</a></code>'s
- <a href=#media-controller-position>media controller position</a> changes, whichever happens
- least often, 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> named <code title=event-MediaController-timeupdate><a href=#event-mediacontroller-timeupdate>timeupdate</a></code> at the
- <code><a href=#mediacontroller>MediaController</a></code>.</p>
+ <p>Otherwise, let it have the lowest value of the <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> IDL attributes of
+ all of its <a href=#slaved-media-elements>slaved media elements</a>.</p>
- <hr><p>The <dfn id=dom-mediacontroller-paused title=dom-MediaController-paused><code>paused</code></dfn>
- attribute must return true if the <code><a href=#mediacontroller>MediaController</a></code>
- object is a <a href=#paused-media-controller>paused media controller</a>, and false
- otherwise.</p>
+ </li>
- <p>When the <dfn id=dom-mediacontroller-pause title=dom-MediaController-pause><code>pause()</code></dfn> method
- is invoked, the user agent must change the
- <code><a href=#mediacontroller>MediaController</a></code> into a <a href=#paused-media-controller>paused media
- controller</a>.</p>
+ <li>
- <p>Whenever the <code><a href=#mediacontroller>MediaController</a></code> changes from a
- <a href=#playing-media-controller>playing media controller</a> to a <a href=#paused-media-controller>paused media
- controller</a>, 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> named <code title=event-MediaController-pause><a href=#event-mediacontroller-pause>pause</a></code> at the
- <code><a href=#mediacontroller>MediaController</a></code>.</p>
+ <p>If the <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#most-recently-reported-readiness-state>most recently
+ reported readiness state</a> is not equal to <var title="">new
+ readiness state</var> then <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire
+ a simple event</a> at the <code><a href=#mediacontroller>MediaController</a></code> object,
+ whose name is the event name corresponding to the value of <var title="">new readiness state</var> given in the table below:</p>
+ <!-- hopefully everyone will understand what this means -->
- <p>When the <dfn id=dom-mediacontroller-play title=dom-MediaController-play><code>play()</code></dfn> method
- is invoked, the user agent must change the
- <code><a href=#mediacontroller>MediaController</a></code> into a <a href=#playing-media-controller>playing media
- controller</a>.</p>
+ <table><thead><tr><th>Value of <var title="">new readiness state</var>
+ <th>Event name
- <p>Whenever the <code><a href=#mediacontroller>MediaController</a></code> changes from a
- <a href=#paused-media-controller>paused media controller</a> to a <a href=#playing-media-controller>playing media
- controller</a>, 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> named <code title=event-MediaController-play><a href=#event-mediacontroller-play>play</a></code> at the
- <code><a href=#mediacontroller>MediaController</a></code>.</p>
+ <tbody><tr><td> 0
+ <td> <code title=event-MediaController-emptied><a href=#event-mediacontroller-emptied>emptied</a></code>
- <hr><p>The <dfn id=dom-mediacontroller-defaultplaybackrate title=dom-MediaController-defaultPlaybackRate><code>defaultPlaybackRate</code></dfn>
- attribute, on getting, must return the
- <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-default-playback-rate>media controller default
- playback rate</a>, and on setting, must set the
- <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-default-playback-rate>media controller default
- playback rate</a> to the new value.</p>
+ <tr><td> 1
+ <td> <code title=event-MediaController-loadedmetadata><a href=#event-mediacontroller-loadedmetadata>loadedmetadata</a></code>
- <p>The <dfn id=dom-mediacontroller-playbackrate title=dom-MediaController-playbackRate><code>playbackRate</code></dfn>
- attribute, on getting, must return the
- <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-playback-rate>media controller playback
- rate</a>, and on setting, must set the
- <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-playback-rate>media controller playback
- rate</a> to the new value.</p>
+ <tr><td> 2
+ <td> <code title=event-MediaController-loadeddata><a href=#event-mediacontroller-loadeddata>loadeddata</a></code>
- <p>Whenever the <a href=#media-controller-default-playback-rate>media controller default playback rate</a>
- or the <a href=#media-controller-playback-rate>media controller playback rate</a> are changed, 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> named <code title=event-MediaController-ratechange><a href=#event-mediacontroller-ratechange>ratechange</a></code> at the
- <code><a href=#mediacontroller>MediaController</a></code>.</p>
+ <tr><td> 3
+ <td> <code title=event-MediaController-canplay><a href=#event-mediacontroller-canplay>canplay</a></code>
- <hr><p>The <dfn id=dom-mediacontroller-volume title=dom-MediaController-volume><code>volume</code></dfn>
- attribute, on getting, must return the
- <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-volume-multiplier>media controller volume
- multiplier</a>, and on setting, if the new value is in the range
- 0.0 to 1.0 inclusive, must set the <code><a href=#mediacontroller>MediaController</a></code>'s
- <a href=#media-controller-volume-multiplier>media controller volume multiplier</a> to the new value. If
- the new value is outside the range 0.0 to 1.0 inclusive, then, on
- setting, an <code><a href=#index_size_err>INDEX_SIZE_ERR</a></code> exception must be raised
- instead.</p>
+ <tr><td> 4
+ <td> <code title=event-MediaController-canplaythrough><a href=#event-mediacontroller-canplaythrough>canplaythrough</a></code>
- <p>The <dfn id=dom-mediacontroller-muted title=dom-MediaController-muted><code>muted</code></dfn>
- attribute, on getting, must return the
- <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-mute-override>media controller mute
- override</a>, and on setting, must set the
- <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-mute-override>media controller mute
- override</a> to the new value.</p>
+ </table></li>
- <p>Whenever either the <a href=#media-controller-volume-multiplier>media controller volume
- multiplier</a> or the <a href=#media-controller-mute-override>media controller mute override</a>
- are changed, 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> named <code title=event-MediaController-volumechange><a href=#event-mediacontroller-volumechange>volumechange</a></code> at the
- <code><a href=#mediacontroller>MediaController</a></code>.</p>
+ <li><p>Let the <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#most-recently-reported-readiness-state>most recently
+ reported readiness state</a> be <var title="">new readiness
+ state</var>.</li>
- <hr><p>The following are the <a href=#event-handlers>event handlers</a> that must be
+ <li><p>If the <code><a href=#mediacontroller>MediaController</a></code> has no <a href=#slaved-media-elements>slaved
+ media elements</a>, or the <code><a href=#mediacontroller>MediaController</a></code> is a
+ <a href=#blocked-media-controller>blocked media controller</a>, let <var title="">new
+ playback state</var> be false; otherwise, let it be true.</li>
+
+ <li><p>If the <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#most-recently-reported-playback-state>most recently
+ reported playback state</a> is not equal to <var title="">new
+ playback state</var> then <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a
+ simple event</a> at the <code><a href=#mediacontroller>MediaController</a></code> object,
+ whose name is <code title=event-MediaController-playing><a href=#event-mediacontroller-playing>playing</a></code> if <var title="">new playback state</var> is true, and whose name is <code title=event-MediaController-waiting><a href=#event-mediacontroller-waiting>waiting</a></code>
+ otherwise.</li>
+
+ <li><p>Let the <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#most-recently-reported-playback-state>most recently
+ reported playback state</a> be <var title="">new playback
+ state</var>.</li>
+
+ </ol><hr><p>The following are the <a href=#event-handlers>event handlers</a> that must be
supported, as IDL attributes, by all objects implementing the
<code><a href=#mediacontroller>MediaController</a></code> interface:</p>
<table><thead><tr><th><a href=#event-handlers title="event handlers">Event handler</a> <th><a href=#event-handler-event-type>Event handler event type</a>
+ <tbody><tr><td><dfn id=handler-mediacontroller-onemptied title=handler-MediaController-onemptied><code>onemptied</code></dfn> <td> <code title=event-MediaController-emptied><a href=#event-mediacontroller-emptied>emptied</a></code>
+ <tr><td><dfn id=handler-mediacontroller-onloadedmetadata title=handler-MediaController-onloadedmetadata><code>onloadedmetadata</code></dfn> <td> <code title=event-MediaController-loadedmetadata><a href=#event-mediacontroller-loadedmetadata>loadedmetadata</a></code>
+ <tr><td><dfn id=handler-mediacontroller-onloadeddata title=handler-MediaController-onloadeddata><code>onloadeddata</code></dfn> <td> <code title=event-MediaController-loadeddata><a href=#event-mediacontroller-loadeddata>loadeddata</a></code>
+ <tr><td><dfn id=handler-mediacontroller-oncanplay title=handler-MediaController-oncanplay><code>oncanplay</code></dfn> <td> <code title=event-MediaController-canplay><a href=#event-mediacontroller-canplay>canplay</a></code>
+ <tr><td><dfn id=handler-mediacontroller-oncanplaythrough title=handler-MediaController-oncanplaythrough><code>oncanplaythrough</code></dfn> <td> <code title=event-MediaController-canplaythrough><a href=#event-mediacontroller-canplaythrough>canplaythrough</a></code>
+ <tr><td><dfn id=handler-mediacontroller-onplaying title=handler-MediaController-onplaying><code>onplaying</code></dfn> <td> <code title=event-MediaController-playing><a href=#event-mediacontroller-playing>playing</a></code>
+ <tr><td><dfn id=handler-mediacontroller-onwaiting title=handler-MediaController-onwaiting><code>onwaiting</code></dfn> <td> <code title=event-MediaController-waiting><a href=#event-mediacontroller-waiting>waiting</a></code>
<tbody><tr><td><dfn id=handler-mediacontroller-ondurationchange title=handler-MediaController-ondurationchange><code>ondurationchange</code></dfn> <td> <code title=event-MediaController-durationchange><a href=#event-mediacontroller-durationchange>durationchange</a></code>
<tr><td><dfn id=handler-mediacontroller-ontimeupdate title=handler-MediaController-ontimeupdate><code>ontimeupdate</code></dfn> <td> <code title=event-MediaController-durationchange><a href=#event-mediacontroller-durationchange>durationchange</a></code>
<tr><td><dfn id=handler-mediacontroller-onplay title=handler-MediaController-onplay><code>onplay</code></dfn> <td> <code title=event-MediaController-play><a href=#event-mediacontroller-play>play</a></code>
@@ -33145,6 +33287,28 @@
<th>Interface
<th>Dispatched when...
+ <tbody><tr><td><dfn id=event-mediacontroller-emptied title=event-MediaController-emptied><code>emptied</code></dfn>
+ <td><code><a href=#event>Event</a></code>
+ <td>All the <a href=#slaved-media-elements>slaved media elements</a> newly have <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> set to <code title=dom-media-HAVE_NOTHING><a href=#dom-media-have_nothing>HAVE_NOTHING</a></code> or greater, or there are no longer any <a href=#slaved-media-elements>slaved media elements</a>.
+ <tr><td><dfn id=event-mediacontroller-loadedmetadata title=event-MediaController-loadedmetadata><code>loadedmetadata</code></dfn>
+ <td><code><a href=#event>Event</a></code>
+ <td>All the <a href=#slaved-media-elements>slaved media elements</a> newly have <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> set to <code title=dom-media-HAVE_METADATA><a href=#dom-media-have_metadata>HAVE_METADATA</a></code> or greater.
+ <tr><td><dfn id=event-mediacontroller-loadeddata title=event-MediaController-loadeddata><code>loadeddata</code></dfn>
+ <td><code><a href=#event>Event</a></code>
+ <td>All the <a href=#slaved-media-elements>slaved media elements</a> newly have <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> set to <code title=dom-media-HAVE_CURRENT_DATA><a href=#dom-media-have_current_data>HAVE_CURRENT_DATA</a></code> or greater.
+ <tr><td><dfn id=event-mediacontroller-canplay title=event-MediaController-canplay><code>canplay</code></dfn>
+ <td><code><a href=#event>Event</a></code>
+ <td>All the <a href=#slaved-media-elements>slaved media elements</a> newly have <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> set 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-mediacontroller-canplaythrough title=event-MediaController-canplaythrough><code>canplaythrough</code></dfn>
+ <td><code><a href=#event>Event</a></code>
+ <td>All the <a href=#slaved-media-elements>slaved media elements</a> newly have <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> set to <code title=dom-media-HAVE_ENOUGH_DATA><a href=#dom-media-have_enough_data>HAVE_ENOUGH_DATA</a></code> or greater.
+ <tr><td><dfn id=event-mediacontroller-playing title=event-MediaController-playing><code>playing</code></dfn>
+ <td><code><a href=#event>Event</a></code>
+ <td>The <code><a href=#mediacontroller>MediaController</a></code> is no longer a <a href=#blocked-media-controller>blocked media controller</a>.
+ <tr><td><dfn id=event-mediacontroller-waiting title=event-MediaController-waiting><code>waiting</code></dfn>
+ <td><code><a href=#event>Event</a></code>
+ <td>The <code><a href=#mediacontroller>MediaController</a></code> is now a <a href=#blocked-media-controller>blocked media controller</a>.
+
<tbody><tr><td><dfn id=event-mediacontroller-durationchange title=event-MediaController-durationchange><code>durationchange</code></dfn>
<td><code><a href=#event>Event</a></code>
<td>The <code title=dom-MediaController-duration><a href=#dom-mediacontroller-duration>duration</a></code> attribute has just been updated.
Modified: index
===================================================================
--- index 2011-04-15 21:15:08 UTC (rev 6017)
+++ index 2011-04-20 00:42:09 UTC (rev 6018)
@@ -243,7 +243,7 @@
<header class=head id=head><p><a class=logo href=http://www.whatwg.org/ rel=home><img alt=WHATWG height=101 src=/images/logo width=101></a></p>
<hgroup><h1 class=allcaps>HTML</h1>
- <h2 class="no-num no-toc">Living Standard — Last Updated 15 April 2011</h2>
+ <h2 class="no-num no-toc">Living Standard — Last Updated 20 April 2011</h2>
</hgroup><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>
<!--<p class="impl"><strong>Implementors!</strong> We have a <a href="http://www.whatwg.org/mailing-list#implementors">mailing list</a> for you too!</p>-->
@@ -26483,7 +26483,11 @@
<code title=dom-media-NETWORK_EMPTY><a href=#dom-media-network_empty>NETWORK_EMPTY</a></code>, then
run these substeps:</p>
- <ol><li><p>If a fetching process is in progress for the <a href=#media-element>media
+ <ol><li><p><a href=#queue-a-task>Queue a task</a> to <a href=#fire-a-simple-event>fire a simple
+ event</a> named <code title=event-media-emptied><a href=#event-media-emptied>emptied</a></code> at the <a href=#media-element>media
+ element</a>.</li>
+
+ <li><p>If a fetching process is in progress for the <a href=#media-element>media
element</a>, the user agent should stop it.</li>
<li><p>Set the <code title=dom-media-networkState><a href=#dom-media-networkstate>networkState</a></code> attribute to
@@ -26496,7 +26500,9 @@
<li><p>If <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> is
not set to <code title=dom-media-HAVE_NOTHING><a href=#dom-media-have_nothing>HAVE_NOTHING</a></code>, then set it
- to that state.</li>
+ to that state.
+ <!-- this can do the "report the controller state" thing -->
+ </li>
<li><p>If the <code title=dom-media-paused><a href=#dom-media-paused>paused</a></code>
attribute is false, then set it to true.</li>
@@ -26532,10 +26538,6 @@
</li>
- <li><p><a href=#queue-a-task>Queue a task</a> to <a href=#fire-a-simple-event>fire a simple
- event</a> named <code title=event-media-emptied><a href=#event-media-emptied>emptied</a></code> at the <a href=#media-element>media
- element</a>.</li>
-
</ol></li>
<li><p>Set the <code title=dom-media-playbackRate><a href=#dom-media-playbackrate>playbackRate</a></code> attribute to the
@@ -26980,22 +26982,21 @@
</li>
- <li><p>Set the <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> attribute to
- <code title=dom-media-HAVE_METADATA><a href=#dom-media-have_metadata>HAVE_METADATA</a></code>.</li>
-
<li><p>For <code><a href=#video>video</a></code> elements, set the <code title=dom-video-videoWidth><a href=#dom-video-videowidth>videoWidth</a></code> and <code title=dom-video-videoHeight><a href=#dom-video-videoheight>videoHeight</a></code>
attributes.</li>
- <li id=fire-loadedmetadata>
+ <li>
- <p><a href=#queue-a-task>Queue a task</a> to <a href=#fire-a-simple-event>fire a simple
- event</a> named <code title=event-media-loadedmetadata><a href=#event-media-loadedmetadata>loadedmetadata</a></code> at the
- element.</p>
+ <p>Set the <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> attribute to
+ <code title=dom-media-HAVE_METADATA><a href=#dom-media-have_metadata>HAVE_METADATA</a></code>.</p>
- <p class=note>Before this task is run, as part of the event
- loop mechanism, the rendering will have been updated to resize
- the <code><a href=#video>video</a></code> element if appropriate.</p>
+ <p class=note>A <code title=event-media-loadedmetadata><a href=#event-media-loadedmetadata>loadedmetadata</a></code> DOM
+ event <a href=#fire-loadedmetadata>will be fired</a> as part
+ of setting the <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> attribute to a
+ new value.</p>
+ <!-- this can also do the "report the controller state" thing -->
+
</li>
<li>
@@ -27015,34 +27016,17 @@
</li>
<!--CONTROLLER-->
- <li>
+ <li><p>If either the <a href=#media-resource>media resource</a> or the address
+ of the <var title="">current media resource</var> indicate a
+ particular set of audio or video tracks to enable, then the
+ selected audio tracks must be enabled in the element's <code title=dom-media-audioTracks><a href=#dom-media-audiotracks>audioTracks</a></code> object, and
+ the first selected video track must be selected in the
+ element's <code title=dom-media-videoTracks><a href=#dom-media-videotracks>videoTracks</a></code>
+ object.</li>
- <p>If either the <a href=#media-resource>media resource</a> or the address of
- the <var title="">current media resource</var> indicate a
- particular set of audio or video tracks to enable, then the
- selected audio tracks must be enabled in the element's <code title=dom-media-audioTracks><a href=#dom-media-audiotracks>audioTracks</a></code> object, and
- the first selected video track must be selected in the
- element's <code title=dom-media-videoTracks><a href=#dom-media-videotracks>videoTracks</a></code> object.</p>
-
- </li>
-
- <li>
-
- <p>If the <a href=#media-element>media element</a> has a <a href=#current-media-controller>current
- media controller</a>, then: if the <a href=#initial-playback-position>initial playback
- position</a>, relative to the <a href=#current-media-controller>current media
- controller</a>'s timeline, is greater than the
- <a href=#current-media-controller>current media controller</a>'s <a href=#media-controller-position>media controller
- position</a>, then <a href=#seek-the-media-controller>seek the media controller</a>
- to the <a href=#media-element>media element</a>'s <a href=#initial-playback-position>initial playback
- position</a>, relative to the <a href=#current-media-controller>current media
- controller</a>'s timeline; otherwise, <a href=#dom-media-seek title=dom-media-seek>seek</a> the <a href=#media-element>media
- element</a> to the <a href=#media-controller-position>media controller position</a>,
- relative to the <a href=#media-element>media element</a>'s timeline,
- discarding any resulting exceptions.</p> <!-- i.e. "bring the
- media element up to speed with its new media controller" -->
-
- </li>
+ <li><p>If the <a href=#media-element>media element</a> has a <a href=#current-media-controller>current
+ media controller</a>, then <a href=#bring-the-media-element-up-to-speed-with-its-new-media-controller>bring the media element up
+ to speed with its new media controller</a>.</p>
<!--CONTROLLER-->
<li>
@@ -27705,100 +27689,129 @@
<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><!-- going up to metadata --><dt>If the previous 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>
+ <ol><li>
- <dd>
+ <p>Apply the first applicable set of substeps from the following
+ list:</p>
- <p class=note>A <code title=event-media-loadedmetadata><a href=#event-media-loadedmetadata>loadedmetadata</a></code> DOM event <a href=#fire-loadedmetadata>will be fired</a> as part of the <code title=dom-media-load><a href=#dom-media-load>load()</a></code> algorithm.</p>
- </dd>
+ <dl class=switch><!-- going up to metadata --><dt>If the previous 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>
- <!-- going up to current for the first time -->
+ <dd id=fire-loadedmetadata>
- <dt id=handling-first-frame-available>If the previous 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> or
- greater</dt>
+ <p><a href=#queue-a-task>Queue a task</a> to <a href=#fire-a-simple-event>fire a simple event</a>
+ named <code title=event-media-loadedmetadata><a href=#event-media-loadedmetadata>loadedmetadata</a></code> at the
+ element.</p>
- <dd>
+ <p class=note>Before this task is run, as part of the event
+ loop mechanism, the rendering will have been updated to resize
+ the <code><a href=#video>video</a></code> element if appropriate.</p>
- <p id=fire-loadeddata>If this is the first time this occurs for
- this <a href=#media-element>media element</a> since the <code title=dom-media-load><a href=#dom-media-load>load()</a></code> algorithm was last 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> named <code title=event-media-loadeddata><a href=#event-media-loadeddata>loadeddata</a></code> at the element.</p>
+ </dd>
- <p>If 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
- <code title=dom-media-HAVE_ENOUGH_DATA><a href=#dom-media-have_enough_data>HAVE_ENOUGH_DATA</a></code>,
- then the relevant steps below must then be run also.</p>
+ <!-- going up to current for the first time -->
- </dd>
+ <dt id=handling-first-frame-available>If the previous 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> or
+ greater</dt>
- <!-- going down -->
- <dt>If the previous 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>
- <dd>
+ <p id=fire-loadeddata>If this is the first time this occurs for
+ this <a href=#media-element>media element</a> since the <code title=dom-media-load><a href=#dom-media-load>load()</a></code> algorithm was last 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> named <code title=event-media-loadeddata><a href=#event-media-loadeddata>loadeddata</a></code> at the element.</p>
- <p class=note>A <code title=event-media-waiting><a href=#event-media-waiting>waiting</a></code> DOM
- event <a href=#fire-waiting-when-waiting>can be fired</a>,
- depending on the current state of playback.</p>
+ <p>If 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
+ <code title=dom-media-HAVE_ENOUGH_DATA><a href=#dom-media-have_enough_data>HAVE_ENOUGH_DATA</a></code>,
+ then the relevant steps below must then be run also.</p>
- </dd>
+ </dd>
- <!-- going up to future -->
- <dt>If the previous 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></dt>
+ <!-- going down -->
+ <dt>If the previous 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>
+ <dd>
- <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> named <code title=event-media-canplay><a href=#event-media-canplay>canplay</a></code>.</p>
+ <p id=fire-waiting-when-waiting>If the <a href=#media-element>media
+ element</a> was <a href=#potentially-playing>potentially playing</a> before its
+ <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> attribute
+ changed to a value lower than <code title=dom-media-HAVE_FUTURE_DATA><a href=#dom-media-have_future_data>HAVE_FUTURE_DATA</a></code>, and
+ the element has not <a href=#ended-playback>ended playback</a>, and playback
+ has not <a href=#stopped-due-to-errors>stopped due to errors</a>, and playback has not
+ <a href=#paused-for-user-interaction>paused for user interaction</a>, 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>
+ named <code title=event-media-timeupdate><a href=#event-media-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> named <code title=event-media-waiting><a href=#event-media-waiting>waiting</a></code> at the element.</p>
- <p>If the element's <code title=dom-media-paused><a href=#dom-media-paused>paused</a></code>
- attribute is false, 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> named <code title=event-media-playing><a href=#event-media-playing>playing</a></code>.</p>
+ </dd>
- </dd>
+ <!-- going up to future -->
+ <dt>If the previous 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></dt>
- <!-- going up to enough -->
- <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>
- <dd>
+ <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> named <code title=event-media-canplay><a href=#event-media-canplay>canplay</a></code>.</p>
- <p>If the previous ready state was <code title=dom-media-HAVE_CURRENT_DATA><a href=#dom-media-have_current_data>HAVE_CURRENT_DATA</a></code> or
- less, 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> named <code title=event-media-canplay><a href=#event-media-canplay>canplay</a></code>, and, if the element's
- <code title=dom-media-paused><a href=#dom-media-paused>paused</a></code> attribute is false,
- <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple event</a>
- named <code title=event-media-playing><a href=#event-media-playing>playing</a></code>.</p>
+ <p>If the element's <code title=dom-media-paused><a href=#dom-media-paused>paused</a></code>
+ attribute is false, 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> named <code title=event-media-playing><a href=#event-media-playing>playing</a></code>.</p>
- <p>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,
- and the <a href=#media-element>media element</a>'s <code><a href=#document>Document</a></code>'s
- <a href=#browsing-context>browsing context</a> did not have the <a href=#sandboxed-automatic-features-browsing-context-flag>sandboxed
- automatic features browsing context flag</a> set when the
- <code><a href=#document>Document</a></code> was created, then the user agent may also
- set the <code title=dom-media-paused><a href=#dom-media-paused>paused</a></code> attribute to
- false, <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple
- event</a> named <code title=event-media-play><a href=#event-media-play>play</a></code>, and
- <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple event</a>
- named <code title=event-media-playing><a href=#event-media-playing>playing</a></code>.</p>
+ </dd>
- <p class=note>User agents do not need to support autoplay,
- and it is suggested that user agents honor user preferences on the
- matter. Authors are urged to use the <code title=attr-media-autoplay><a href=#attr-media-autoplay>autoplay</a></code> attribute rather than
- using script to force the video to play, so as to allow the user
- to override the behavior if so desired.</p>
+ <!-- going up to enough -->
+ <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>
- <p>In any case, the user agent must finally <a href=#queue-a-task>queue a
- task</a> to <a href=#fire-a-simple-event>fire a simple event</a> named <code title=event-media-canplaythrough><a href=#event-media-canplaythrough>canplaythrough</a></code>.</p>
+ <dd>
- </dd>
+ <p>If the previous ready state was <code title=dom-media-HAVE_CURRENT_DATA><a href=#dom-media-have_current_data>HAVE_CURRENT_DATA</a></code> or
+ less, 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> named <code title=event-media-canplay><a href=#event-media-canplay>canplay</a></code>, and, if the element's
+ <code title=dom-media-paused><a href=#dom-media-paused>paused</a></code> attribute is false,
+ <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple event</a>
+ named <code title=event-media-playing><a href=#event-media-playing>playing</a></code>.</p>
- </dl></div>
+ <p>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,
+ and the <a href=#media-element>media element</a>'s <code><a href=#document>Document</a></code>'s
+ <a href=#browsing-context>browsing context</a> did not have the <a href=#sandboxed-automatic-features-browsing-context-flag>sandboxed
+ automatic features browsing context flag</a> set when the
+ <code><a href=#document>Document</a></code> was created, then the user agent may also
+ set the <code title=dom-media-paused><a href=#dom-media-paused>paused</a></code> attribute to
+ false, <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple
+ event</a> named <code title=event-media-play><a href=#event-media-play>play</a></code>, and
+ <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple event</a>
+ named <code title=event-media-playing><a href=#event-media-playing>playing</a></code>.</p>
+ <p class=note>User agents do not need to support autoplay,
+ and it is suggested that user agents honor user preferences on the
+ matter. Authors are urged to use the <code title=attr-media-autoplay><a href=#attr-media-autoplay>autoplay</a></code> attribute rather than
+ using script to force the video to play, so as to allow the user
+ to override the behavior if so desired.</p>
+
+ <p>In any case, the user agent must finally <a href=#queue-a-task>queue a
+ task</a> to <a href=#fire-a-simple-event>fire a simple event</a> named <code title=event-media-canplaythrough><a href=#event-media-canplaythrough>canplaythrough</a></code>.</p>
+
+ </dd>
+
+ </dl></li>
+
+<!--CONTROLLER-->
+ <li><p>If the <a href=#media-element>media element</a> has a <a href=#current-media-controller>current media
+ controller</a>, then <a href=#report-the-controller-state>report the controller state</a>
+ for the <a href=#media-element>media element</a>'s <a href=#current-media-controller>current media
+ controller</a>.</li>
+<!--CONTROLLER-->
+
+ </ol></div>
+
<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 can jump straight from <code title=dom-media-HAVE_METADATA><a href=#dom-media-have_metadata>HAVE_METADATA</a></code> to <code title=dom-media-HAVE_ENOUGH_DATA><a href=#dom-media-have_enough_data>HAVE_ENOUGH_DATA</a></code> without
@@ -28006,7 +28019,19 @@
<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>
+ resource to continue.
+<!--CONTROLLER-->
+ If the <a href=#media-element>media element</a> has a <a href=#current-media-controller>current media
+ controller</a> when this happens, then the user agent must
+ <a href=#report-the-controller-state>report the controller state</a> for the <a href=#media-element>media
+ element</a>'s <a href=#current-media-controller>current media controller</a>. If If the
+ <a href=#media-element>media element</a> has a <a href=#current-media-controller>current media
+ controller</a> when the user makes a selection, allowing playback
+ to resume, the user agent must similarly <a href=#report-the-controller-state>report the controller
+ state</a> for the <a href=#media-element>media element</a>'s <a href=#current-media-controller>current
+ media controller</a>.
+<!--CONTROLLER-->
+ </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
@@ -28017,18 +28042,11 @@
interaction</a>, 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> named <code title=event-media-timeupdate><a href=#event-media-timeupdate>timeupdate</a></code> at the element.</p>
- <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-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> named <code title=event-media-timeupdate><a href=#event-media-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> named <code title=event-media-waiting><a href=#event-media-waiting>waiting</a></code> at
- the element.</p>
+ <p class=note>A <code title=event-media-waiting><a href=#event-media-waiting>waiting</a></code>
+ DOM event <a href=#fire-waiting-when-waiting>can be fired</a> as a
+ result of an element that is <a href=#potentially-playing>potentially playing</a>
+ stopping playback due to its <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> attribute changing to
+ a value lower than <code title=dom-media-HAVE_FUTURE_DATA><a href=#dom-media-have_future_data>HAVE_FUTURE_DATA</a></code>.</p>
<p>When the <a href=#current-playback-position>current playback position</a> reaches the end
of the <a href=#media-resource>media resource</a> when the <a href=#direction-of-playback>direction of
@@ -28177,6 +28195,13 @@
<li><p>Set the <a href=#media-element>media element</a>'s <a href=#autoplaying-flag>autoplaying
flag</a> to false.</li>
+<!--CONTROLLER-->
+ <li><p>If the <a href=#media-element>media element</a> has a <a href=#current-media-controller>current media
+ controller</a>, then <a href=#report-the-controller-state>report the controller state</a>
+ for the <a href=#media-element>media element</a>'s <a href=#current-media-controller>current media
+ controller</a>.</li>
+<!--CONTROLLER-->
+
</ol><hr><p>When the <dfn id=dom-media-pause title=dom-media-pause><code>pause()</code></dfn>
method is invoked, and when the user agent is required to pause the
<a href=#media-element>media element</a>, the user agent must run the following
@@ -28205,6 +28230,13 @@
</ol></li>
+<!--CONTROLLER-->
+ <li><p>If the <a href=#media-element>media element</a> has a <a href=#current-media-controller>current media
+ controller</a>, then <a href=#report-the-controller-state>report the controller state</a>
+ for the <a href=#media-element>media element</a>'s <a href=#current-media-controller>current media
+ controller</a>.</li>
+<!--CONTROLLER-->
+
</ol><hr><p>The
<!--CONTROLLER-->
<dfn id=effective-playback-rate>effective playback rate</dfn> is not necessarily the element's
@@ -28505,29 +28537,32 @@
<code title=dom-media-seeking><a href=#dom-media-seeking>seeking</a></code> IDL attribute to
false and abort these steps.</li>
- <li><p>Set the <a href=#current-playback-position>current playback position</a> to the given
- <var title="">new playback position</var>.</li>
-
<li><p><a href=#queue-a-task>Queue a task</a> to <a href=#fire-a-simple-event>fire a simple
event</a> named <code title=event-media-seeking><a href=#event-media-seeking>seeking</a></code>
at the element.</li>
- <li id=seekUpdate><p><a href=#queue-a-task>Queue a task</a> to <a href=#fire-a-simple-event>fire a
- simple event</a> named <code title=event-media-timeupdate><a href=#event-media-timeupdate>timeupdate</a></code> at the
- element.</li>
+ <li>
- <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-HAVE_FUTURE_DATA><a href=#dom-media-have_future_data>HAVE_FUTURE_DATA</a></code>, then
- <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple event</a> named
- <code title=event-media-waiting><a href=#event-media-waiting>waiting</a></code> at the
- element.</li>
+ <p>Set the <a href=#current-playback-position>current playback position</a> to the given
+ <var title="">new playback position</var>.</p>
+ <p class=note>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-HAVE_FUTURE_DATA><a href=#dom-media-have_future_data>HAVE_FUTURE_DATA</a></code>, then a
+ <code title=event-media-waiting><a href=#event-media-waiting>waiting</a></code> <a href=#fire-waiting-when-waiting>will be fired</a> at the
+ element.</p> <!-- also, timeupdate -->
+ <!-- also, it will do the "report the controller state" thing -->
+
+ </li>
+
<li><p>Wait until the user agent has 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, until it has decoded
- enough data to play back that position.</li>
+ enough data to play back that position.</p>
+ <!-- at which point, it will do the "port the controller state"
+ thing again -->
+ </li>
<li><p><a href=#await-a-stable-state>Await a stable state</a>. The <a href=#synchronous-section>synchronous
section</a> consists of all the remaining steps of this
@@ -28537,6 +28572,10 @@
<li><p>⌛ Set the <code title=dom-media-seeking><a href=#dom-media-seeking>seeking</a></code> IDL attribute to
false.</li>
+ <li id=seekUpdate><p><a href=#queue-a-task>Queue a task</a> to <a href=#fire-a-simple-event>fire a
+ simple event</a> named <code title=event-media-timeupdate><a href=#event-media-timeupdate>timeupdate</a></code> at the
+ element.</li>
+
<li><p>⌛ <a href=#queue-a-task>Queue a task</a> to <a href=#fire-a-simple-event>fire a simple
event</a> named <code title=event-media-seeked><a href=#event-media-seeked>seeked</a></code>
at the element.</li>
@@ -28919,6 +28958,14 @@
attribute double <a href=#dom-mediacontroller-volume title=dom-MediaController-volume>volume</a>;
attribute boolean <a href=#dom-mediacontroller-muted title=dom-MediaController-muted>muted</a>;
+ attribute <a href=#function>Function</a> <a href=#handler-mediacontroller-onemptied title=handler-MediaController-onemptied>onemptied</a>;
+ attribute <a href=#function>Function</a> <a href=#handler-mediacontroller-onloadedmetadata title=handler-MediaController-onloadedmetadata>onloadedmetadata</a>;
+ attribute <a href=#function>Function</a> <a href=#handler-mediacontroller-onloadeddata title=handler-MediaController-onloadeddata>onloadeddata</a>;
+ attribute <a href=#function>Function</a> <a href=#handler-mediacontroller-oncanplay title=handler-MediaController-oncanplay>oncanplay</a>;
+ attribute <a href=#function>Function</a> <a href=#handler-mediacontroller-oncanplaythrough title=handler-MediaController-oncanplaythrough>oncanplaythrough</a>;
+ attribute <a href=#function>Function</a> <a href=#handler-mediacontroller-onplaying title=handler-MediaController-onplaying>onplaying</a>;
+ attribute <a href=#function>Function</a> <a href=#handler-mediacontroller-onwaiting title=handler-MediaController-onwaiting>onwaiting</a>;
+
attribute <a href=#function>Function</a> <a href=#handler-mediacontroller-ondurationchange title=handler-MediaController-ondurationchange>ondurationchange</a>;
attribute <a href=#function>Function</a> <a href=#handler-mediacontroller-ontimeupdate title=handler-MediaController-ontimeupdate>ontimeupdate</a>;
attribute <a href=#function>Function</a> <a href=#handler-mediacontroller-onplay title=handler-MediaController-onplay>onplay</a>;
@@ -29090,7 +29137,146 @@
must use the same clock for their definition of their <a href=#media-timeline>media
timeline</a>'s unit time.</p>
- <p>The <a href=#media-resource title="media resource">media resources</a> of all
+ <hr><p>The <dfn id=dom-media-controller title=dom-media-controller><code>controller</code></dfn> attribute
+ on a <a href=#media-element>media element</a>, on getting, must return the
+ element's <a href=#current-media-controller>current media controller</a>, if any, or null
+ otherwise. On setting, it must first remove the element's <code title=attr-media-mediagroup><a href=#attr-media-mediagroup>mediagroup</a></code> attribute, if any,
+ and then set the <a href=#current-media-controller>current media controller</a> to the given
+ value. If the given value is null, the element no longer has a
+ <a href=#current-media-controller>current media controller</a>; if it is not null, then the
+ user agent must <a href=#bring-the-media-element-up-to-speed-with-its-new-media-controller>bring the media element up to speed with its
+ new media controller</a>.</p>
+
+ <hr><p>The <dfn id=dom-mediacontroller title=dom-MediaController><code>MediaController()</code></dfn>
+ constructor, when invoked, must return a newly created
+ <code><a href=#mediacontroller>MediaController</a></code> object.</p>
+
+ <hr><p>The <dfn id=dom-mediacontroller-seekable title=dom-MediaController-seekable><code>seekable</code></dfn>
+ attribute must return a new static <a href=#normalized-timeranges-object>normalized
+ <code>TimeRanges</code> object</a> that represents the
+ intersection of the ranges of the <a href=#media-resource title="media resource">media
+ resources</a> of the <a href=#slaved-media-elements>slaved media elements</a> that the
+ user agent is able to seek to, at the time the attribute is
+ evaluated.</p>
+
+ <p>The <dfn id=dom-mediacontroller-buffered title=dom-MediaController-buffered><code>buffered</code></dfn>
+ attribute must return a new static <a href=#normalized-timeranges-object>normalized
+ <code>TimeRanges</code> object</a> that represents the
+ intersection of the ranges of the <a href=#media-resource title="media resource">media
+ resources</a> of the <a href=#slaved-media-elements>slaved media elements</a> that the
+ user agent has buffered, at the time the attribute is evaluated.
+ Users agents must accurately determine the ranges available, even
+ for media streams where this can only be determined by tedious
+ inspection.</p>
+
+ <p>The <dfn id=dom-mediacontroller-duration title=dom-MediaController-duration><code>duration</code></dfn>
+ attribute must return the <a href=#media-controller-duration>media controller
+ duration</a>.</p>
+
+ <p>Every 15 to 250ms, or whenever the <code><a href=#mediacontroller>MediaController</a></code>'s
+ <a href=#media-controller-duration>media controller duration</a> changes, whichever happens
+ least often, 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> named <code title=event-MediaController-durationchange><a href=#event-mediacontroller-durationchange>durationchange</a></code>
+ at the <code><a href=#mediacontroller>MediaController</a></code>. If the
+ <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-duration>media controller
+ duration</a> decreases such that the <a href=#media-controller-position>media controller
+ position</a> is greater than the <a href=#media-controller-duration>media controller
+ duration</a>, the user agent must immediately <a href=#seek-the-media-controller>seek the
+ media controller</a> to <a href=#media-controller-duration>media controller
+ duration</a>.</p>
+
+ <p>The <dfn id=dom-mediacontroller-currenttime title=dom-MediaController-currentTime><code>currentTime</code></dfn>
+ attribute must return the <a href=#media-controller-position>media controller position</a> on
+ getting, and on setting must <a href=#seek-the-media-controller>seek the media controller</a>
+ to the new value.</p>
+
+ <p>Every 15 to 250ms, or whenever the <code><a href=#mediacontroller>MediaController</a></code>'s
+ <a href=#media-controller-position>media controller position</a> changes, whichever happens
+ least often, 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> named <code title=event-MediaController-timeupdate><a href=#event-mediacontroller-timeupdate>timeupdate</a></code> at the
+ <code><a href=#mediacontroller>MediaController</a></code>.</p>
+
+ <hr><p>When a <code><a href=#mediacontroller>MediaController</a></code> is created it is a
+ <dfn id=playing-media-controller>playing media controller</dfn>. It can be changed into a
+ <dfn id=paused-media-controller>paused media controller</dfn> and back either via the user
+ agent's user interface (when the element is <a href=#expose-a-user-interface-to-the-user title="expose a
+ user interface to the user">exposing a user interface to the
+ user</a>) or by script using the APIs defined in this section
+ (see below).</p>
+
+ <p>The <dfn id=dom-mediacontroller-paused title=dom-MediaController-paused><code>paused</code></dfn>
+ attribute must return true if the <code><a href=#mediacontroller>MediaController</a></code>
+ object is a <a href=#paused-media-controller>paused media controller</a>, and false
+ otherwise.</p>
+
+ <p>When the <dfn id=dom-mediacontroller-pause title=dom-MediaController-pause><code>pause()</code></dfn> method
+ is invoked, if the <code><a href=#mediacontroller>MediaController</a></code> is a <a href=#playing-media-controller>playing
+ media controller</a> then the user agent must change the
+ <code><a href=#mediacontroller>MediaController</a></code> into a <a href=#paused-media-controller>paused media
+ controller</a>, <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple
+ event</a> named <code title=event-MediaController-pause><a href=#event-mediacontroller-pause>pause</a></code> at the
+ <code><a href=#mediacontroller>MediaController</a></code>, and then <a href=#report-the-controller-state>report the controller
+ state</a> of the <code><a href=#mediacontroller>MediaController</a></code>.</p>
+
+ <p>When the <dfn id=dom-mediacontroller-play title=dom-MediaController-play><code>play()</code></dfn> method is
+ invoked, if the <code><a href=#mediacontroller>MediaController</a></code> is a <a href=#paused-media-controller>paused media
+ controller</a>, the user agent must change the
+ <code><a href=#mediacontroller>MediaController</a></code> into a <a href=#playing-media-controller>playing media
+ controller</a>, <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple
+ event</a> named <code title=event-MediaController-play><a href=#event-mediacontroller-play>play</a></code> at the
+ <code><a href=#mediacontroller>MediaController</a></code>, and then <a href=#report-the-controller-state>report the controller
+ state</a> of the <code><a href=#mediacontroller>MediaController</a></code>.</p>
+
+ <hr><p>A <code><a href=#mediacontroller>MediaController</a></code> has a <dfn id=media-controller-default-playback-rate>media controller
+ default playback rate</dfn> and a <dfn id=media-controller-playback-rate>media controller playback
+ rate</dfn>, which must both be set to 1.0 when the
+ <code><a href=#mediacontroller>MediaController</a></code> object is created.</p>
+
+ <p>The <dfn id=dom-mediacontroller-defaultplaybackrate title=dom-MediaController-defaultPlaybackRate><code>defaultPlaybackRate</code></dfn>
+ attribute, on getting, must return the
+ <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-default-playback-rate>media controller default
+ playback rate</a>, and on setting, must set the
+ <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-default-playback-rate>media controller default
+ playback rate</a> to the new value, then <a href=#queue-a-task>queue a
+ task</a> to <a href=#fire-a-simple-event>fire a simple event</a> named <code title=event-MediaController-ratechange><a href=#event-mediacontroller-ratechange>ratechange</a></code> at the
+ <code><a href=#mediacontroller>MediaController</a></code>.</p>
+
+ <p>The <dfn id=dom-mediacontroller-playbackrate title=dom-MediaController-playbackRate><code>playbackRate</code></dfn>
+ attribute, on getting, must return the
+ <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-playback-rate>media controller playback
+ rate</a>, and on setting, must set the
+ <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-playback-rate>media controller playback
+ rate</a> to the new value, then <a href=#queue-a-task>queue a task</a> to
+ <a href=#fire-a-simple-event>fire a simple event</a> named <code title=event-MediaController-ratechange><a href=#event-mediacontroller-ratechange>ratechange</a></code> at the
+ <code><a href=#mediacontroller>MediaController</a></code>.</p>
+
+ <hr><p>A <code><a href=#mediacontroller>MediaController</a></code> has a <dfn id=media-controller-volume-multiplier>media controller volume
+ multiplier</dfn>, which must be set to 1.0 when the
+ <code><a href=#mediacontroller>MediaController</a></code> object is created, and a <dfn id=media-controller-mute-override>media
+ controller mute override</dfn>, much must initially be false.</p>
+
+ <p>The <dfn id=dom-mediacontroller-volume title=dom-MediaController-volume><code>volume</code></dfn>
+ attribute, on getting, must return the
+ <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-volume-multiplier>media controller volume
+ multiplier</a>, and on setting, if the new value is in the range
+ 0.0 to 1.0 inclusive, must set the <code><a href=#mediacontroller>MediaController</a></code>'s
+ <a href=#media-controller-volume-multiplier>media controller volume multiplier</a> to the new value and
+ <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a simple event</a> named
+ <code title=event-MediaController-volumechange><a href=#event-mediacontroller-volumechange>volumechange</a></code>
+ at the <code><a href=#mediacontroller>MediaController</a></code>. If the new value is outside the
+ range 0.0 to 1.0 inclusive, then, on setting, an
+ <code><a href=#index_size_err>INDEX_SIZE_ERR</a></code> exception must be raised instead.</p>
+
+ <p>The <dfn id=dom-mediacontroller-muted title=dom-MediaController-muted><code>muted</code></dfn>
+ attribute, on getting, must return the
+ <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-mute-override>media controller mute
+ override</a>, and on setting, must set the
+ <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-mute-override>media controller mute
+ override</a> to the new value and <a href=#queue-a-task>queue a task</a> to
+ <a href=#fire-a-simple-event>fire a simple event</a> named <code title=event-MediaController-volumechange><a href=#event-mediacontroller-volumechange>volumechange</a></code> at
+ the <code><a href=#mediacontroller>MediaController</a></code>.</p>
+
+ <hr><p>The <a href=#media-resource title="media resource">media resources</a> of all
the <a href=#slaved-media-elements>slaved media elements</a> of a
<code><a href=#mediacontroller>MediaController</a></code> have a defined temporal relationship
which provides relative offsets between the zero time of each such
@@ -29170,15 +29356,7 @@
exceptions.</li> <!-- i.e. "bring the media element up to speed
with its new media controller" -->
- </ol><p>When a <code><a href=#mediacontroller>MediaController</a></code> is created it is a
- <dfn id=playing-media-controller>playing media controller</dfn>. It can be changed into a
- <dfn id=paused-media-controller>paused media controller</dfn> and back either via the user
- agent's user interface (when the element is <a href=#expose-a-user-interface-to-the-user title="expose a
- user interface to the user">exposing a user interface to the
- user</a>) or via the APIs defined in this section (see
- below).</p>
-
- <p>A <code><a href=#mediacontroller>MediaController</a></code> is a <dfn id=blocked-media-controller>blocked media
+ </ol><p>A <code><a href=#mediacontroller>MediaController</a></code> is a <dfn id=blocked-media-controller>blocked media
controller</dfn> if the <code><a href=#mediacontroller>MediaController</a></code> is a
<a href=#paused-media-controller>paused media controller</a>, or if any of its <a href=#slaved-media-elements>slaved
media elements</a> are <a href=#blocked-media-element title="blocked media
@@ -29195,14 +29373,6 @@
the <a href=#media-resource>media resource</a> relative to the
<code><a href=#mediacontroller>MediaController</a></code>'s timeline.</p>
- <p>A <code><a href=#mediacontroller>MediaController</a></code> has a <dfn id=media-controller-default-playback-rate>media controller
- default playback rate</dfn>, a <dfn id=media-controller-playback-rate>media controller playback
- rate</dfn>, and a <dfn id=media-controller-volume-multiplier>media controller volume multiplier</dfn>,
- which must all be set to 1.0 when the <code><a href=#mediacontroller>MediaController</a></code>
- object is created. A <code><a href=#mediacontroller>MediaController</a></code> also has a
- <dfn id=media-controller-mute-override>media controller mute override</dfn>, much must initially be
- false.</p>
-
<p id=controller-playback>When a <code><a href=#mediacontroller>MediaController</a></code> is
not a <a href=#blocked-media-controller>blocked media controller</a> and it has at least one
<a href=#slaved-media-elements title="slaved media elements">slaved media element</a>
@@ -29213,134 +29383,106 @@
<code><a href=#mediacontroller>MediaController</a></code>'s timeline per unit time of the clock
used by its <a href=#slaved-media-elements>slaved media elements</a>.</p>
- <hr><p>The <dfn id=dom-media-controller title=dom-media-controller><code>controller</code></dfn> attribute
- on a <a href=#media-element>media element</a>, on getting, must return the
- element's <a href=#current-media-controller>current media controller</a>, if any, or null
- otherwise. On setting, it must first remove the element's <code title=attr-media-mediagroup><a href=#attr-media-mediagroup>mediagroup</a></code> attribute, if any,
- and then set the <a href=#current-media-controller>current media controller</a> to the given
- value. If the given value is null, the element no longer has a
- <a href=#current-media-controller>current media controller</a>; if it is not null, then the
- user agent must <a href=#bring-the-media-element-up-to-speed-with-its-new-media-controller>bring the media element up to speed with its
- new media controller</a>.</p>
+ <p>When the zero point on the timeline of a
+ <code><a href=#mediacontroller>MediaController</a></code> moves relative to the timelines of the
+ <a href=#slaved-media-elements>slaved media elements</a> by a time difference <var title="">ΔT</var>, the <code><a href=#mediacontroller>MediaController</a></code>'s
+ <a href=#media-controller-position>media controller position</a> must be decremented by <var title="">ΔT</var>.</p>
- <hr><p>The <dfn id=dom-mediacontroller title=dom-MediaController><code>MediaController()</code></dfn>
- constructor, when invoked, must return a newly created
- <code><a href=#mediacontroller>MediaController</a></code> object.</p>
+ <p class=note>In some situations, e.g. when playing back a live
+ stream without buffering anything, the <a href=#media-controller-position>media controller
+ position</a> would increase motonically as described above at the
+ same rate as the <var title="">ΔT</var> described in the
+ previous paragraph decreases it, with the end result that for all
+ intents and purposes, the <a href=#media-controller-position>media controller position</a>
+ would appear to remain constant (probably with the value 0).</p>
- <hr><p>The <dfn id=dom-mediacontroller-seekable title=dom-MediaController-seekable><code>seekable</code></dfn>
- attribute must return a new static <a href=#normalized-timeranges-object>normalized
- <code>TimeRanges</code> object</a> that represents the
- intersection of the ranges of the <a href=#media-resource title="media resource">media
- resources</a> of the <a href=#slaved-media-elements>slaved media elements</a> that the
- user agent is able to seek to, at the time the attribute is
- evaluated.</p>
+ <hr><p>A <code><a href=#mediacontroller>MediaController</a></code> has a <dfn id=most-recently-reported-readiness-state>most recently reported
+ readiness state</dfn>, which is a number from 0 to 4 derived from
+ the numbers used for the <a href=#media-element>media element</a> <code title=attr-media-readyState>readyState</code> attribute, and a
+ <dfn id=most-recently-reported-playback-state>most recently reported playback state</dfn>, which is either
+ <i>playing</i> or <i>waiting</i>.</p>
- <p>The <dfn id=dom-mediacontroller-buffered title=dom-MediaController-buffered><code>buffered</code></dfn>
- attribute must return a new static <a href=#normalized-timeranges-object>normalized
- <code>TimeRanges</code> object</a> that represents the
- intersection of the ranges of the <a href=#media-resource title="media resource">media
- resources</a> of the <a href=#slaved-media-elements>slaved media elements</a> that the
- user agent has buffered, at the time the attribute is evaluated.
- Users agents must accurately determine the ranges available, even
- for media streams where this can only be determined by tedious
- inspection.</p>
+ <p>When a <code><a href=#mediacontroller>MediaController</a></code> is created, its <a href=#most-recently-reported-readiness-state>most
+ recently reported readiness state</a> must be set to 0, and its
+ <a href=#most-recently-reported-playback-state>most recently reported playback state</a> must be set to
+ <i>waiting</i>.</p>
- <p>The <dfn id=dom-mediacontroller-duration title=dom-MediaController-duration><code>duration</code></dfn>
- attribute must return the <a href=#media-controller-duration>media controller
- duration</a>.</p>
+ <p>When a user agent is required to <dfn id=report-the-controller-state>report the controller
+ state</dfn> for a <code><a href=#mediacontroller>MediaController</a></code>, the user agent must
+ run the following steps:</p>
- <p>Every 15 to 250ms, or whenever the <code><a href=#mediacontroller>MediaController</a></code>'s
- <a href=#media-controller-duration>media controller duration</a> changes, whichever happens
- least often, 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> named <code title=event-MediaController-durationchange><a href=#event-mediacontroller-durationchange>durationchange</a></code> at the
- <code><a href=#mediacontroller>MediaController</a></code>.</p>
+ <ol><li>
- <p>The <dfn id=dom-mediacontroller-currenttime title=dom-MediaController-currentTime><code>currentTime</code></dfn>
- attribute must return the <a href=#media-controller-position>media controller position</a> on
- getting, and on setting must <a href=#seek-the-media-controller>seek the media controller</a>
- to the new value.</p>
+ <p>If the <code><a href=#mediacontroller>MediaController</a></code> has no <a href=#slaved-media-elements>slaved media
+ elements</a>, let <var title="">new readiness state</var> be
+ 0.</p>
- <p>Every 15 to 250ms, or whenever the <code><a href=#mediacontroller>MediaController</a></code>'s
- <a href=#media-controller-position>media controller position</a> changes, whichever happens
- least often, 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> named <code title=event-MediaController-timeupdate><a href=#event-mediacontroller-timeupdate>timeupdate</a></code> at the
- <code><a href=#mediacontroller>MediaController</a></code>.</p>
+ <p>Otherwise, let it have the lowest value of the <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> IDL attributes of
+ all of its <a href=#slaved-media-elements>slaved media elements</a>.</p>
- <hr><p>The <dfn id=dom-mediacontroller-paused title=dom-MediaController-paused><code>paused</code></dfn>
- attribute must return true if the <code><a href=#mediacontroller>MediaController</a></code>
- object is a <a href=#paused-media-controller>paused media controller</a>, and false
- otherwise.</p>
+ </li>
- <p>When the <dfn id=dom-mediacontroller-pause title=dom-MediaController-pause><code>pause()</code></dfn> method
- is invoked, the user agent must change the
- <code><a href=#mediacontroller>MediaController</a></code> into a <a href=#paused-media-controller>paused media
- controller</a>.</p>
+ <li>
- <p>Whenever the <code><a href=#mediacontroller>MediaController</a></code> changes from a
- <a href=#playing-media-controller>playing media controller</a> to a <a href=#paused-media-controller>paused media
- controller</a>, 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> named <code title=event-MediaController-pause><a href=#event-mediacontroller-pause>pause</a></code> at the
- <code><a href=#mediacontroller>MediaController</a></code>.</p>
+ <p>If the <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#most-recently-reported-readiness-state>most recently
+ reported readiness state</a> is not equal to <var title="">new
+ readiness state</var> then <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire
+ a simple event</a> at the <code><a href=#mediacontroller>MediaController</a></code> object,
+ whose name is the event name corresponding to the value of <var title="">new readiness state</var> given in the table below:</p>
+ <!-- hopefully everyone will understand what this means -->
- <p>When the <dfn id=dom-mediacontroller-play title=dom-MediaController-play><code>play()</code></dfn> method
- is invoked, the user agent must change the
- <code><a href=#mediacontroller>MediaController</a></code> into a <a href=#playing-media-controller>playing media
- controller</a>.</p>
+ <table><thead><tr><th>Value of <var title="">new readiness state</var>
+ <th>Event name
- <p>Whenever the <code><a href=#mediacontroller>MediaController</a></code> changes from a
- <a href=#paused-media-controller>paused media controller</a> to a <a href=#playing-media-controller>playing media
- controller</a>, 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> named <code title=event-MediaController-play><a href=#event-mediacontroller-play>play</a></code> at the
- <code><a href=#mediacontroller>MediaController</a></code>.</p>
+ <tbody><tr><td> 0
+ <td> <code title=event-MediaController-emptied><a href=#event-mediacontroller-emptied>emptied</a></code>
- <hr><p>The <dfn id=dom-mediacontroller-defaultplaybackrate title=dom-MediaController-defaultPlaybackRate><code>defaultPlaybackRate</code></dfn>
- attribute, on getting, must return the
- <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-default-playback-rate>media controller default
- playback rate</a>, and on setting, must set the
- <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-default-playback-rate>media controller default
- playback rate</a> to the new value.</p>
+ <tr><td> 1
+ <td> <code title=event-MediaController-loadedmetadata><a href=#event-mediacontroller-loadedmetadata>loadedmetadata</a></code>
- <p>The <dfn id=dom-mediacontroller-playbackrate title=dom-MediaController-playbackRate><code>playbackRate</code></dfn>
- attribute, on getting, must return the
- <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-playback-rate>media controller playback
- rate</a>, and on setting, must set the
- <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-playback-rate>media controller playback
- rate</a> to the new value.</p>
+ <tr><td> 2
+ <td> <code title=event-MediaController-loadeddata><a href=#event-mediacontroller-loadeddata>loadeddata</a></code>
- <p>Whenever the <a href=#media-controller-default-playback-rate>media controller default playback rate</a>
- or the <a href=#media-controller-playback-rate>media controller playback rate</a> are changed, 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> named <code title=event-MediaController-ratechange><a href=#event-mediacontroller-ratechange>ratechange</a></code> at the
- <code><a href=#mediacontroller>MediaController</a></code>.</p>
+ <tr><td> 3
+ <td> <code title=event-MediaController-canplay><a href=#event-mediacontroller-canplay>canplay</a></code>
- <hr><p>The <dfn id=dom-mediacontroller-volume title=dom-MediaController-volume><code>volume</code></dfn>
- attribute, on getting, must return the
- <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-volume-multiplier>media controller volume
- multiplier</a>, and on setting, if the new value is in the range
- 0.0 to 1.0 inclusive, must set the <code><a href=#mediacontroller>MediaController</a></code>'s
- <a href=#media-controller-volume-multiplier>media controller volume multiplier</a> to the new value. If
- the new value is outside the range 0.0 to 1.0 inclusive, then, on
- setting, an <code><a href=#index_size_err>INDEX_SIZE_ERR</a></code> exception must be raised
- instead.</p>
+ <tr><td> 4
+ <td> <code title=event-MediaController-canplaythrough><a href=#event-mediacontroller-canplaythrough>canplaythrough</a></code>
- <p>The <dfn id=dom-mediacontroller-muted title=dom-MediaController-muted><code>muted</code></dfn>
- attribute, on getting, must return the
- <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-mute-override>media controller mute
- override</a>, and on setting, must set the
- <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#media-controller-mute-override>media controller mute
- override</a> to the new value.</p>
+ </table></li>
- <p>Whenever either the <a href=#media-controller-volume-multiplier>media controller volume
- multiplier</a> or the <a href=#media-controller-mute-override>media controller mute override</a>
- are changed, 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> named <code title=event-MediaController-volumechange><a href=#event-mediacontroller-volumechange>volumechange</a></code> at the
- <code><a href=#mediacontroller>MediaController</a></code>.</p>
+ <li><p>Let the <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#most-recently-reported-readiness-state>most recently
+ reported readiness state</a> be <var title="">new readiness
+ state</var>.</li>
- <hr><p>The following are the <a href=#event-handlers>event handlers</a> that must be
+ <li><p>If the <code><a href=#mediacontroller>MediaController</a></code> has no <a href=#slaved-media-elements>slaved
+ media elements</a>, or the <code><a href=#mediacontroller>MediaController</a></code> is a
+ <a href=#blocked-media-controller>blocked media controller</a>, let <var title="">new
+ playback state</var> be false; otherwise, let it be true.</li>
+
+ <li><p>If the <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#most-recently-reported-playback-state>most recently
+ reported playback state</a> is not equal to <var title="">new
+ playback state</var> then <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire a
+ simple event</a> at the <code><a href=#mediacontroller>MediaController</a></code> object,
+ whose name is <code title=event-MediaController-playing><a href=#event-mediacontroller-playing>playing</a></code> if <var title="">new playback state</var> is true, and whose name is <code title=event-MediaController-waiting><a href=#event-mediacontroller-waiting>waiting</a></code>
+ otherwise.</li>
+
+ <li><p>Let the <code><a href=#mediacontroller>MediaController</a></code>'s <a href=#most-recently-reported-playback-state>most recently
+ reported playback state</a> be <var title="">new playback
+ state</var>.</li>
+
+ </ol><hr><p>The following are the <a href=#event-handlers>event handlers</a> that must be
supported, as IDL attributes, by all objects implementing the
<code><a href=#mediacontroller>MediaController</a></code> interface:</p>
<table><thead><tr><th><a href=#event-handlers title="event handlers">Event handler</a> <th><a href=#event-handler-event-type>Event handler event type</a>
+ <tbody><tr><td><dfn id=handler-mediacontroller-onemptied title=handler-MediaController-onemptied><code>onemptied</code></dfn> <td> <code title=event-MediaController-emptied><a href=#event-mediacontroller-emptied>emptied</a></code>
+ <tr><td><dfn id=handler-mediacontroller-onloadedmetadata title=handler-MediaController-onloadedmetadata><code>onloadedmetadata</code></dfn> <td> <code title=event-MediaController-loadedmetadata><a href=#event-mediacontroller-loadedmetadata>loadedmetadata</a></code>
+ <tr><td><dfn id=handler-mediacontroller-onloadeddata title=handler-MediaController-onloadeddata><code>onloadeddata</code></dfn> <td> <code title=event-MediaController-loadeddata><a href=#event-mediacontroller-loadeddata>loadeddata</a></code>
+ <tr><td><dfn id=handler-mediacontroller-oncanplay title=handler-MediaController-oncanplay><code>oncanplay</code></dfn> <td> <code title=event-MediaController-canplay><a href=#event-mediacontroller-canplay>canplay</a></code>
+ <tr><td><dfn id=handler-mediacontroller-oncanplaythrough title=handler-MediaController-oncanplaythrough><code>oncanplaythrough</code></dfn> <td> <code title=event-MediaController-canplaythrough><a href=#event-mediacontroller-canplaythrough>canplaythrough</a></code>
+ <tr><td><dfn id=handler-mediacontroller-onplaying title=handler-MediaController-onplaying><code>onplaying</code></dfn> <td> <code title=event-MediaController-playing><a href=#event-mediacontroller-playing>playing</a></code>
+ <tr><td><dfn id=handler-mediacontroller-onwaiting title=handler-MediaController-onwaiting><code>onwaiting</code></dfn> <td> <code title=event-MediaController-waiting><a href=#event-mediacontroller-waiting>waiting</a></code>
<tbody><tr><td><dfn id=handler-mediacontroller-ondurationchange title=handler-MediaController-ondurationchange><code>ondurationchange</code></dfn> <td> <code title=event-MediaController-durationchange><a href=#event-mediacontroller-durationchange>durationchange</a></code>
<tr><td><dfn id=handler-mediacontroller-ontimeupdate title=handler-MediaController-ontimeupdate><code>ontimeupdate</code></dfn> <td> <code title=event-MediaController-durationchange><a href=#event-mediacontroller-durationchange>durationchange</a></code>
<tr><td><dfn id=handler-mediacontroller-onplay title=handler-MediaController-onplay><code>onplay</code></dfn> <td> <code title=event-MediaController-play><a href=#event-mediacontroller-play>play</a></code>
@@ -33157,6 +33299,28 @@
<th>Interface
<th>Dispatched when...
+ <tbody><tr><td><dfn id=event-mediacontroller-emptied title=event-MediaController-emptied><code>emptied</code></dfn>
+ <td><code><a href=#event>Event</a></code>
+ <td>All the <a href=#slaved-media-elements>slaved media elements</a> newly have <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> set to <code title=dom-media-HAVE_NOTHING><a href=#dom-media-have_nothing>HAVE_NOTHING</a></code> or greater, or there are no longer any <a href=#slaved-media-elements>slaved media elements</a>.
+ <tr><td><dfn id=event-mediacontroller-loadedmetadata title=event-MediaController-loadedmetadata><code>loadedmetadata</code></dfn>
+ <td><code><a href=#event>Event</a></code>
+ <td>All the <a href=#slaved-media-elements>slaved media elements</a> newly have <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> set to <code title=dom-media-HAVE_METADATA><a href=#dom-media-have_metadata>HAVE_METADATA</a></code> or greater.
+ <tr><td><dfn id=event-mediacontroller-loadeddata title=event-MediaController-loadeddata><code>loadeddata</code></dfn>
+ <td><code><a href=#event>Event</a></code>
+ <td>All the <a href=#slaved-media-elements>slaved media elements</a> newly have <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> set to <code title=dom-media-HAVE_CURRENT_DATA><a href=#dom-media-have_current_data>HAVE_CURRENT_DATA</a></code> or greater.
+ <tr><td><dfn id=event-mediacontroller-canplay title=event-MediaController-canplay><code>canplay</code></dfn>
+ <td><code><a href=#event>Event</a></code>
+ <td>All the <a href=#slaved-media-elements>slaved media elements</a> newly have <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> set 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-mediacontroller-canplaythrough title=event-MediaController-canplaythrough><code>canplaythrough</code></dfn>
+ <td><code><a href=#event>Event</a></code>
+ <td>All the <a href=#slaved-media-elements>slaved media elements</a> newly have <code title=dom-media-readyState><a href=#dom-media-readystate>readyState</a></code> set to <code title=dom-media-HAVE_ENOUGH_DATA><a href=#dom-media-have_enough_data>HAVE_ENOUGH_DATA</a></code> or greater.
+ <tr><td><dfn id=event-mediacontroller-playing title=event-MediaController-playing><code>playing</code></dfn>
+ <td><code><a href=#event>Event</a></code>
+ <td>The <code><a href=#mediacontroller>MediaController</a></code> is no longer a <a href=#blocked-media-controller>blocked media controller</a>.
+ <tr><td><dfn id=event-mediacontroller-waiting title=event-MediaController-waiting><code>waiting</code></dfn>
+ <td><code><a href=#event>Event</a></code>
+ <td>The <code><a href=#mediacontroller>MediaController</a></code> is now a <a href=#blocked-media-controller>blocked media controller</a>.
+
<tbody><tr><td><dfn id=event-mediacontroller-durationchange title=event-MediaController-durationchange><code>durationchange</code></dfn>
<td><code><a href=#event>Event</a></code>
<td>The <code title=dom-MediaController-duration><a href=#dom-mediacontroller-duration>duration</a></code> attribute has just been updated.
Modified: source
===================================================================
--- source 2011-04-15 21:15:08 UTC (rev 6017)
+++ source 2011-04-20 00:42:09 UTC (rev 6018)
@@ -28629,6 +28629,11 @@
<ol>
+ <li><p><span>Queue a task</span> to <span>fire a simple
+ event</span> named <code
+ title="event-media-emptied">emptied</code> at the <span>media
+ element</span>.</p></li>
+
<li><p>If a fetching process is in progress for the <span>media
element</span>, the user agent should stop it.</p></li>
@@ -28645,7 +28650,9 @@
<li><p>If <code title="dom-media-readyState">readyState</code> is
not set to <code
title="dom-media-HAVE_NOTHING">HAVE_NOTHING</code>, then set it
- to that state.</p></li>
+ to that state.
+ <!-- this can do the "report the controller state" thing -->
+ </p></li>
<li><p>If the <code title="dom-media-paused">paused</code>
attribute is false, then set it to true.</p></li>
@@ -28683,11 +28690,6 @@
</li>
- <li><p><span>Queue a task</span> to <span>fire a simple
- event</span> named <code
- title="event-media-emptied">emptied</code> at the <span>media
- element</span>.</p></li>
-
</ol>
</li>
@@ -29235,27 +29237,27 @@
</li>
- <li><p>Set the <code
- title="dom-media-readyState">readyState</code> attribute to
- <code
- title="dom-media-HAVE_METADATA">HAVE_METADATA</code>.</p></li>
-
<li><p>For <code>video</code> elements, set the <code
title="dom-video-videoWidth">videoWidth</code> and <code
title="dom-video-videoHeight">videoHeight</code>
attributes.</p></li>
- <li id="fire-loadedmetadata">
+ <li>
- <p><span>Queue a task</span> to <span>fire a simple
- event</span> named <code
- title="event-media-loadedmetadata">loadedmetadata</code> at the
- element.</p>
+ <p>Set the <code
+ title="dom-media-readyState">readyState</code> attribute to
+ <code
+ title="dom-media-HAVE_METADATA">HAVE_METADATA</code>.</p>
- <p class="note">Before this task is run, as part of the event
- loop mechanism, the rendering will have been updated to resize
- the <code>video</code> element if appropriate.</p>
+ <p class="note">A <code
+ title="event-media-loadedmetadata">loadedmetadata</code> DOM
+ event <a href="#fire-loadedmetadata">will be fired</a> as part
+ of setting the <code
+ title="dom-media-readyState">readyState</code> attribute to a
+ new value.</p>
+ <!-- this can also do the "report the controller state" thing -->
+
</li>
<li>
@@ -29277,37 +29279,19 @@
</li>
<!--END w3c-html--><!--CONTROLLER-->
- <li>
+ <li><p>If either the <span>media resource</span> or the address
+ of the <var title="">current media resource</var> indicate a
+ particular set of audio or video tracks to enable, then the
+ selected audio tracks must be enabled in the element's <code
+ title="dom-media-audioTracks">audioTracks</code> object, and
+ the first selected video track must be selected in the
+ element's <code
+ title="dom-media-videoTracks">videoTracks</code>
+ object.</p></li>
- <p>If either the <span>media resource</span> or the address of
- the <var title="">current media resource</var> indicate a
- particular set of audio or video tracks to enable, then the
- selected audio tracks must be enabled in the element's <code
- title="dom-media-audioTracks">audioTracks</code> object, and
- the first selected video track must be selected in the
- element's <code
- title="dom-media-videoTracks">videoTracks</code> object.</p>
-
- </li>
-
- <li>
-
- <p>If the <span>media element</span> has a <span>current
- media controller</span>, then: if the <span>initial playback
- position</span>, relative to the <span>current media
- controller</span>'s timeline, is greater than the
- <span>current media controller</span>'s <span>media controller
- position</span>, then <span>seek the media controller</span>
- to the <span>media element</span>'s <span>initial playback
- position</span>, relative to the <span>current media
- controller</span>'s timeline; otherwise, <span
- title="dom-media-seek">seek</span> the <span>media
- element</span> to the <span>media controller position</span>,
- relative to the <span>media element</span>'s timeline,
- discarding any resulting exceptions.</p> <!-- i.e. "bring the
- media element up to speed with its new media controller" -->
-
- </li>
+ <li><p>If the <span>media element</span> has a <span>current
+ media controller</span>, then <span>bring the media element up
+ to speed with its new media controller</span>.</p>
<!--START w3c-html--><!--CONTROLLER-->
<li>
@@ -30083,125 +30067,158 @@
title="dom-media-NETWORK_EMPTY">NETWORK_EMPTY</code> changes, the
user agent must follow the steps given below:</p>
- <dl class="switch">
+ <ol>
- <!-- going up to metadata -->
- <dt>If the previous 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>
+ <li>
- <dd>
+ <p>Apply the first applicable set of substeps from the following
+ list:</p>
- <p class="note">A <code
- title="event-media-loadedmetadata">loadedmetadata</code> DOM event <a
- href="#fire-loadedmetadata">will be fired</a> as part of the <code
- title="dom-media-load">load()</code> algorithm.</p>
- </dd>
+ <dl class="switch">
- <!-- going up to current for the first time -->
+ <!-- going up to metadata -->
+ <dt>If the previous 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>
- <dt id="handling-first-frame-available">If the previous 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> or
- greater</dt>
+ <dd id="fire-loadedmetadata">
- <dd>
+ <p><span>Queue a task</span> to <span>fire a simple event</span>
+ named <code
+ title="event-media-loadedmetadata">loadedmetadata</code> at the
+ element.</p>
- <p id="fire-loadeddata">If this is the first time this occurs for
- this <span>media element</span> since the <code
- title="dom-media-load">load()</code> algorithm was last invoked,
- the user agent must <span>queue a task</span> to <span>fire a
- simple event</span> named <code
- title="event-media-loadeddata">loadeddata</code> at the element.</p>
+ <p class="note">Before this task is run, as part of the event
+ loop mechanism, the rendering will have been updated to resize
+ the <code>video</code> element if appropriate.</p>
- <p>If the new ready state is <code
- title="dom-media-HAVE_FUTURE_DATA">HAVE_FUTURE_DATA</code> or
- <code title="dom-media-HAVE_ENOUGH_DATA">HAVE_ENOUGH_DATA</code>,
- then the relevant steps below must then be run also.</p>
+ </dd>
- </dd>
+ <!-- going up to current for the first time -->
- <!-- going down -->
- <dt>If the previous 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>
+ <dt id="handling-first-frame-available">If the previous 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> or
+ greater</dt>
- <dd>
+ <dd>
- <p class="note">A <code title="event-media-waiting">waiting</code> DOM
- event <a href="#fire-waiting-when-waiting">can be fired</a>,
- depending on the current state of playback.</p>
+ <p id="fire-loadeddata">If this is the first time this occurs for
+ this <span>media element</span> since the <code
+ title="dom-media-load">load()</code> algorithm was last invoked,
+ the user agent must <span>queue a task</span> to <span>fire a
+ simple event</span> named <code
+ title="event-media-loadeddata">loadeddata</code> at the element.</p>
- </dd>
+ <p>If the new ready state is <code
+ title="dom-media-HAVE_FUTURE_DATA">HAVE_FUTURE_DATA</code> or
+ <code title="dom-media-HAVE_ENOUGH_DATA">HAVE_ENOUGH_DATA</code>,
+ then the relevant steps below must then be run also.</p>
- <!-- going up to future -->
- <dt>If the previous 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></dt>
+ </dd>
- <dd>
+ <!-- going down -->
+ <dt>If the previous 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>
- <p>The user agent must <span>queue a task</span> to <span>fire a
- simple event</span> named <code
- title="event-media-canplay">canplay</code>.</p>
+ <dd>
- <p>If the element's <code title="dom-media-paused">paused</code>
- attribute is false, the user agent must <span>queue a task</span>
- to <span>fire a simple event</span> named <code
- title="event-media-playing">playing</code>.</p>
+ <p id="fire-waiting-when-waiting">If the <span>media
+ element</span> was <span>potentially playing</span> before its
+ <code title="dom-media-readyState">readyState</code> attribute
+ changed to a value lower than <code
+ title="dom-media-HAVE_FUTURE_DATA">HAVE_FUTURE_DATA</code>, and
+ the element has not <span>ended playback</span>, and playback
+ has not <span>stopped due to errors</span>, and playback has not
+ <span>paused for user interaction</span>, the user agent must
+ <span>queue a task</span> to <span>fire a simple event</span>
+ named <code title="event-media-timeupdate">timeupdate</code> at
+ the element, and <span>queue a task</span> to <span>fire a
+ simple event</span> named <code
+ title="event-media-waiting">waiting</code> at the element.</p>
- </dd>
+ </dd>
- <!-- going up to enough -->
- <dt>If the new ready state is <code
- title="dom-media-HAVE_ENOUGH_DATA">HAVE_ENOUGH_DATA</code></dt>
+ <!-- going up to future -->
+ <dt>If the previous 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></dt>
- <dd>
+ <dd>
- <p>If the previous ready state was <code
- title="dom-media-HAVE_CURRENT_DATA">HAVE_CURRENT_DATA</code> or
- less, the user agent must <span>queue a task</span> to <span>fire
- a simple event</span> named <code
- title="event-media-canplay">canplay</code>, and, if the element's
- <code title="dom-media-paused">paused</code> attribute is false,
- <span>queue a task</span> to <span>fire a simple event</span>
- named <code title="event-media-playing">playing</code>.</p>
+ <p>The user agent must <span>queue a task</span> to <span>fire a
+ simple event</span> named <code
+ title="event-media-canplay">canplay</code>.</p>
- <p>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,
- and the <span>media element</span>'s <code>Document</code>'s
- <span>browsing context</span> did not have the <span>sandboxed
- automatic features browsing context flag</span> set when the
- <code>Document</code> was created, then the user agent may also
- set the <code title="dom-media-paused">paused</code> attribute to
- false, <span>queue a task</span> to <span>fire a simple
- event</span> named <code title="event-media-play">play</code>, and
- <span>queue a task</span> to <span>fire a simple event</span>
- named <code title="event-media-playing">playing</code>.</p>
+ <p>If the element's <code title="dom-media-paused">paused</code>
+ attribute is false, the user agent must <span>queue a task</span>
+ to <span>fire a simple event</span> named <code
+ title="event-media-playing">playing</code>.</p>
- <p class="note">User agents do not need to support autoplay,
- and it is suggested that user agents honor user preferences on the
- matter. Authors are urged to use the <code
- title="attr-media-autoplay">autoplay</code> attribute rather than
- using script to force the video to play, so as to allow the user
- to override the behavior if so desired.</p>
+ </dd>
- <p>In any case, the user agent must finally <span>queue a
- task</span> to <span>fire a simple event</span> named <code
- title="event-media-canplaythrough">canplaythrough</code>.</p>
+ <!-- going up to enough -->
+ <dt>If the new ready state is <code
+ title="dom-media-HAVE_ENOUGH_DATA">HAVE_ENOUGH_DATA</code></dt>
- </dd>
+ <dd>
- </dl>
+ <p>If the previous ready state was <code
+ title="dom-media-HAVE_CURRENT_DATA">HAVE_CURRENT_DATA</code> or
+ less, the user agent must <span>queue a task</span> to <span>fire
+ a simple event</span> named <code
+ title="event-media-canplay">canplay</code>, and, if the element's
+ <code title="dom-media-paused">paused</code> attribute is false,
+ <span>queue a task</span> to <span>fire a simple event</span>
+ named <code title="event-media-playing">playing</code>.</p>
+ <p>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,
+ and the <span>media element</span>'s <code>Document</code>'s
+ <span>browsing context</span> did not have the <span>sandboxed
+ automatic features browsing context flag</span> set when the
+ <code>Document</code> was created, then the user agent may also
+ set the <code title="dom-media-paused">paused</code> attribute to
+ false, <span>queue a task</span> to <span>fire a simple
+ event</span> named <code title="event-media-play">play</code>, and
+ <span>queue a task</span> to <span>fire a simple event</span>
+ named <code title="event-media-playing">playing</code>.</p>
+
+ <p class="note">User agents do not need to support autoplay,
+ and it is suggested that user agents honor user preferences on the
+ matter. Authors are urged to use the <code
+ title="attr-media-autoplay">autoplay</code> attribute rather than
+ using script to force the video to play, so as to allow the user
+ to override the behavior if so desired.</p>
+
+ <p>In any case, the user agent must finally <span>queue a
+ task</span> to <span>fire a simple event</span> named <code
+ title="event-media-canplaythrough">canplaythrough</code>.</p>
+
+ </dd>
+
+ </dl>
+
+ </li>
+
+<!--END w3c-html--><!--CONTROLLER-->
+ <li><p>If the <span>media element</span> has a <span>current media
+ controller</span>, then <span>report the controller state</span>
+ for the <span>media element</span>'s <span>current media
+ controller</span>.</p></li>
+<!--START w3c-html--><!--CONTROLLER-->
+
+ </ol>
+
</div>
<p class="note">It is possible for the ready state of a media
@@ -30443,7 +30460,19 @@
<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>
+ resource to continue.
+<!--END w3c-html--><!--CONTROLLER-->
+ If the <span>media element</span> has a <span>current media
+ controller</span> when this happens, then the user agent must
+ <span>report the controller state</span> for the <span>media
+ element</span>'s <span>current media controller</span>. If If the
+ <span>media element</span> has a <span>current media
+ controller</span> when the user makes a selection, allowing playback
+ to resume, the user agent must similarly <span>report the controller
+ state</span> for the <span>media element</span>'s <span>current
+ media controller</span>.
+<!--START w3c-html--><!--CONTROLLER-->
+ </p>
<p>It is possible for a <span>media element</span> to have both
<span>ended playback</span> and <span>paused for user
@@ -30455,20 +30484,13 @@
<span>fire a simple event</span> named <code
title="event-media-timeupdate">timeupdate</code> at the element.</p>
- <p id="fire-waiting-when-waiting">When a <span>media element</span>
- 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-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> named <code title="event-media-timeupdate">timeupdate</code>
- at the element, and <span>queue a task</span> to <span>fire a simple
- event</span> named <code title="event-media-waiting">waiting</code> at
- the element.</p>
+ <p class="note">A <code title="event-media-waiting">waiting</code>
+ DOM event <a href="#fire-waiting-when-waiting">can be fired</a> as a
+ result of an element that is <span>potentially playing</span>
+ stopping playback due to its <code
+ title="dom-media-readyState">readyState</code> attribute changing to
+ a value lower than <code
+ title="dom-media-HAVE_FUTURE_DATA">HAVE_FUTURE_DATA</code>.</p>
<p>When the <span>current playback position</span> reaches the end
of the <span>media resource</span> when the <span>direction of
@@ -30660,6 +30682,13 @@
<li><p>Set the <span>media element</span>'s <span>autoplaying
flag</span> to false.</p></li>
+<!--END w3c-html--><!--CONTROLLER-->
+ <li><p>If the <span>media element</span> has a <span>current media
+ controller</span>, then <span>report the controller state</span>
+ for the <span>media element</span>'s <span>current media
+ controller</span>.</p></li>
+<!--START w3c-html--><!--CONTROLLER-->
+
</ol>
<hr>
@@ -30704,6 +30733,13 @@
</li>
+<!--END w3c-html--><!--CONTROLLER-->
+ <li><p>If the <span>media element</span> has a <span>current media
+ controller</span>, then <span>report the controller state</span>
+ for the <span>media element</span>'s <span>current media
+ controller</span>.</p></li>
+<!--START w3c-html--><!--CONTROLLER-->
+
</ol>
<hr>
@@ -31053,31 +31089,35 @@
<code title="dom-media-seeking">seeking</code> IDL attribute to
false and abort these steps.</p></li>
- <li><p>Set the <span>current playback position</span> to the given
- <var title="">new playback position</var>.</p></li>
-
<li><p><span>Queue a task</span> to <span>fire a simple
event</span> named <code title="event-media-seeking">seeking</code>
at the element.</p></li>
- <li id="seekUpdate"><p><span>Queue a task</span> to <span>fire a
- simple event</span> named <code
- title="event-media-timeupdate">timeupdate</code> at the
- element.</p></li>
+ <li>
- <li><p>If the <span>media element</span> was <span>potentially
- 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-HAVE_FUTURE_DATA">HAVE_FUTURE_DATA</code>, then
- <span>queue a task</span> to <span>fire a simple event</span> named
- <code title="event-media-waiting">waiting</code> at the
- element.</p></li>
+ <p>Set the <span>current playback position</span> to the given
+ <var title="">new playback position</var>.</p>
+ <p class="note">If the <span>media element</span> was
+ <span>potentially 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-HAVE_FUTURE_DATA">HAVE_FUTURE_DATA</code>, then a
+ <code title="event-media-waiting">waiting</code> <a
+ href="#fire-waiting-when-waiting">will be fired</a> at the
+ element.</p> <!-- also, timeupdate -->
+ <!-- also, it will do the "report the controller state" thing -->
+
+ </li>
+
<li><p>Wait until the user agent has established whether or not the
<span>media data</span> for the <var title="">new playback
position</var> is available, and, if it is, until it has decoded
- enough data to play back that position.</p></li>
+ enough data to play back that position.</p>
+ <!-- at which point, it will do the "port the controller state"
+ thing again -->
+ </li>
<li><p><span>Await a stable state</span>. The <span>synchronous
section</span> consists of all the remaining steps of this
@@ -31088,6 +31128,11 @@
title="dom-media-seeking">seeking</code> IDL attribute to
false.</p></li>
+ <li id="seekUpdate"><p><span>Queue a task</span> to <span>fire a
+ simple event</span> named <code
+ title="event-media-timeupdate">timeupdate</code> at the
+ element.</p></li>
+
<li><p>⌛ <span>Queue a task</span> to <span>fire a simple
event</span> named <code title="event-media-seeked">seeked</code>
at the element.</p></li>
@@ -31511,6 +31556,14 @@
attribute double <span title="dom-MediaController-volume">volume</span>;
attribute boolean <span title="dom-MediaController-muted">muted</span>;
+ attribute <span>Function</span> <span title="handler-MediaController-onemptied">onemptied</span>;
+ attribute <span>Function</span> <span title="handler-MediaController-onloadedmetadata">onloadedmetadata</span>;
+ attribute <span>Function</span> <span title="handler-MediaController-onloadeddata">onloadeddata</span>;
+ attribute <span>Function</span> <span title="handler-MediaController-oncanplay">oncanplay</span>;
+ attribute <span>Function</span> <span title="handler-MediaController-oncanplaythrough">oncanplaythrough</span>;
+ attribute <span>Function</span> <span title="handler-MediaController-onplaying">onplaying</span>;
+ attribute <span>Function</span> <span title="handler-MediaController-onwaiting">onwaiting</span>;
+
attribute <span>Function</span> <span title="handler-MediaController-ondurationchange">ondurationchange</span>;
attribute <span>Function</span> <span title="handler-MediaController-ontimeupdate">ontimeupdate</span>;
attribute <span>Function</span> <span title="handler-MediaController-onplay">onplay</span>;
@@ -31690,6 +31743,180 @@
must use the same clock for their definition of their <span>media
timeline</span>'s unit time.</p>
+ <hr>
+
+ <p>The <dfn
+ title="dom-media-controller"><code>controller</code></dfn> attribute
+ on a <span>media element</span>, on getting, must return the
+ element's <span>current media controller</span>, if any, or null
+ otherwise. On setting, it must first remove the element's <code
+ title="attr-media-mediagroup">mediagroup</code> attribute, if any,
+ and then set the <span>current media controller</span> to the given
+ value. If the given value is null, the element no longer has a
+ <span>current media controller</span>; if it is not null, then the
+ user agent must <span>bring the media element up to speed with its
+ new media controller</span>.</p>
+
+ <hr>
+
+ <p>The <dfn
+ title="dom-MediaController"><code>MediaController()</code></dfn>
+ constructor, when invoked, must return a newly created
+ <code>MediaController</code> object.</p>
+
+ <hr>
+
+ <p>The <dfn
+ title="dom-MediaController-seekable"><code>seekable</code></dfn>
+ attribute must return a new static <span>normalized
+ <code>TimeRanges</code> object</span> that represents the
+ intersection of the ranges of the <span title="media resource">media
+ resources</span> of the <span>slaved media elements</span> that the
+ user agent is able to seek to, at the time the attribute is
+ evaluated.</p>
+
+ <p>The <dfn
+ title="dom-MediaController-buffered"><code>buffered</code></dfn>
+ attribute must return a new static <span>normalized
+ <code>TimeRanges</code> object</span> that represents the
+ intersection of the ranges of the <span title="media resource">media
+ resources</span> of the <span>slaved media elements</span> that the
+ user agent has buffered, at the time the attribute is evaluated.
+ Users agents must accurately determine the ranges available, even
+ for media streams where this can only be determined by tedious
+ inspection.</p>
+
+ <p>The <dfn
+ title="dom-MediaController-duration"><code>duration</code></dfn>
+ attribute must return the <span>media controller
+ duration</span>.</p>
+
+ <p>Every 15 to 250ms, or whenever the <code>MediaController</code>'s
+ <span>media controller duration</span> changes, whichever happens
+ least often, the user agent must <span>queue a task</span> to
+ <span>fire a simple event</span> named <code
+ title="event-MediaController-durationchange">durationchange</code>
+ at the <code>MediaController</code>. If the
+ <code>MediaController</code>'s <span>media controller
+ duration</span> decreases such that the <span>media controller
+ position</span> is greater than the <span>media controller
+ duration</span>, the user agent must immediately <span>seek the
+ media controller</span> to <span>media controller
+ duration</span>.</p>
+
+ <p>The <dfn
+ title="dom-MediaController-currentTime"><code>currentTime</code></dfn>
+ attribute must return the <span>media controller position</span> on
+ getting, and on setting must <span>seek the media controller</span>
+ to the new value.</p>
+
+ <p>Every 15 to 250ms, or whenever the <code>MediaController</code>'s
+ <span>media controller position</span> changes, whichever happens
+ least often, the user agent must <span>queue a task</span> to
+ <span>fire a simple event</span> named <code
+ title="event-MediaController-timeupdate">timeupdate</code> at the
+ <code>MediaController</code>.</p>
+
+ <hr>
+
+ <p>When a <code>MediaController</code> is created it is a
+ <dfn>playing media controller</dfn>. It can be changed into a
+ <dfn>paused media controller</dfn> and back either via the user
+ agent's user interface (when the element is <span title="expose a
+ user interface to the user">exposing a user interface to the
+ user</span>) or by script using the APIs defined in this section
+ (see below).</p>
+
+ <p>The <dfn
+ title="dom-MediaController-paused"><code>paused</code></dfn>
+ attribute must return true if the <code>MediaController</code>
+ object is a <span>paused media controller</span>, and false
+ otherwise.</p>
+
+ <p>When the <dfn
+ title="dom-MediaController-pause"><code>pause()</code></dfn> method
+ is invoked, if the <code>MediaController</code> is a <span>playing
+ media controller</span> then the user agent must change the
+ <code>MediaController</code> into a <span>paused media
+ controller</span>, <span>queue a task</span> to <span>fire a simple
+ event</span> named <code
+ title="event-MediaController-pause">pause</code> at the
+ <code>MediaController</code>, and then <span>report the controller
+ state</span> of the <code>MediaController</code>.</p>
+
+ <p>When the <dfn
+ title="dom-MediaController-play"><code>play()</code></dfn> method is
+ invoked, if the <code>MediaController</code> is a <span>paused media
+ controller</span>, the user agent must change the
+ <code>MediaController</code> into a <span>playing media
+ controller</span>, <span>queue a task</span> to <span>fire a simple
+ event</span> named <code
+ title="event-MediaController-play">play</code> at the
+ <code>MediaController</code>, and then <span>report the controller
+ state</span> of the <code>MediaController</code>.</p>
+
+ <hr>
+
+ <p>A <code>MediaController</code> has a <dfn>media controller
+ default playback rate</dfn> and a <dfn>media controller playback
+ rate</dfn>, which must both be set to 1.0 when the
+ <code>MediaController</code> object is created.</p>
+
+ <p>The <dfn
+ title="dom-MediaController-defaultPlaybackRate"><code>defaultPlaybackRate</code></dfn>
+ attribute, on getting, must return the
+ <code>MediaController</code>'s <span>media controller default
+ playback rate</span>, and on setting, must set the
+ <code>MediaController</code>'s <span>media controller default
+ playback rate</span> to the new value, then <span>queue a
+ task</span> to <span>fire a simple event</span> named <code
+ title="event-MediaController-ratechange">ratechange</code> at the
+ <code>MediaController</code>.</p>
+
+ <p>The <dfn
+ title="dom-MediaController-playbackRate"><code>playbackRate</code></dfn>
+ attribute, on getting, must return the
+ <code>MediaController</code>'s <span>media controller playback
+ rate</span>, and on setting, must set the
+ <code>MediaController</code>'s <span>media controller playback
+ rate</span> to the new value, then <span>queue a task</span> to
+ <span>fire a simple event</span> named <code
+ title="event-MediaController-ratechange">ratechange</code> at the
+ <code>MediaController</code>.</p>
+
+ <hr>
+
+ <p>A <code>MediaController</code> has a <dfn>media controller volume
+ multiplier</dfn>, which must be set to 1.0 when the
+ <code>MediaController</code> object is created, and a <dfn>media
+ controller mute override</dfn>, much must initially be false.</p>
+
+ <p>The <dfn
+ title="dom-MediaController-volume"><code>volume</code></dfn>
+ attribute, on getting, must return the
+ <code>MediaController</code>'s <span>media controller volume
+ multiplier</span>, and on setting, if the new value is in the range
+ 0.0 to 1.0 inclusive, must set the <code>MediaController</code>'s
+ <span>media controller volume multiplier</span> to the new value and
+ <span>queue a task</span> to <span>fire a simple event</span> named
+ <code title="event-MediaController-volumechange">volumechange</code>
+ at the <code>MediaController</code>. If the new value is outside the
+ range 0.0 to 1.0 inclusive, then, on setting, an
+ <code>INDEX_SIZE_ERR</code> exception must be raised instead.</p>
+
+ <p>The <dfn
+ title="dom-MediaController-muted"><code>muted</code></dfn>
+ attribute, on getting, must return the
+ <code>MediaController</code>'s <span>media controller mute
+ override</span>, and on setting, must set the
+ <code>MediaController</code>'s <span>media controller mute
+ override</span> to the new value and <span>queue a task</span> to
+ <span>fire a simple event</span> named <code
+ title="event-MediaController-volumechange">volumechange</code> at
+ the <code>MediaController</code>.</p>
+
+ <hr>
+
<p>The <span title="media resource">media resources</span> of all
the <span>slaved media elements</span> of a
<code>MediaController</code> have a defined temporal relationship
@@ -31777,14 +32004,6 @@
</ol>
- <p>When a <code>MediaController</code> is created it is a
- <dfn>playing media controller</dfn>. It can be changed into a
- <dfn>paused media controller</dfn> and back either via the user
- agent's user interface (when the element is <span title="expose a
- user interface to the user">exposing a user interface to the
- user</span>) or via the APIs defined in this section (see
- below).</p>
-
<p>A <code>MediaController</code> is a <dfn>blocked media
controller</dfn> if the <code>MediaController</code> is a
<span>paused media controller</span>, or if any of its <span>slaved
@@ -31803,14 +32022,6 @@
the <span>media resource</span> relative to the
<code>MediaController</code>'s timeline.</p>
- <p>A <code>MediaController</code> has a <dfn>media controller
- default playback rate</dfn>, a <dfn>media controller playback
- rate</dfn>, and a <dfn>media controller volume multiplier</dfn>,
- which must all be set to 1.0 when the <code>MediaController</code>
- object is created. A <code>MediaController</code> also has a
- <dfn>media controller mute override</dfn>, much must initially be
- false.</p>
-
<p id="controller-playback">When a <code>MediaController</code> is
not a <span>blocked media controller</span> and it has at least one
<span title="slaved media elements">slaved media element</span>
@@ -31821,161 +32032,119 @@
<code>MediaController</code>'s timeline per unit time of the clock
used by its <span>slaved media elements</span>.</p>
- <hr>
+ <p>When the zero point on the timeline of a
+ <code>MediaController</code> moves relative to the timelines of the
+ <span>slaved media elements</span> by a time difference <var
+ title="">ΔT</var>, the <code>MediaController</code>'s
+ <span>media controller position</span> must be decremented by <var
+ title="">ΔT</var>.</p>
- <p>The <dfn
- title="dom-media-controller"><code>controller</code></dfn> attribute
- on a <span>media element</span>, on getting, must return the
- element's <span>current media controller</span>, if any, or null
- otherwise. On setting, it must first remove the element's <code
- title="attr-media-mediagroup">mediagroup</code> attribute, if any,
- and then set the <span>current media controller</span> to the given
- value. If the given value is null, the element no longer has a
- <span>current media controller</span>; if it is not null, then the
- user agent must <span>bring the media element up to speed with its
- new media controller</span>.</p>
+ <p class="note">In some situations, e.g. when playing back a live
+ stream without buffering anything, the <span>media controller
+ position</span> would increase motonically as described above at the
+ same rate as the <var title="">ΔT</var> described in the
+ previous paragraph decreases it, with the end result that for all
+ intents and purposes, the <span>media controller position</span>
+ would appear to remain constant (probably with the value 0).</p>
<hr>
- <p>The <dfn
- title="dom-MediaController"><code>MediaController()</code></dfn>
- constructor, when invoked, must return a newly created
- <code>MediaController</code> object.</p>
+ <p>A <code>MediaController</code> has a <dfn>most recently reported
+ readiness state</dfn>, which is a number from 0 to 4 derived from
+ the numbers used for the <span>media element</span> <code
+ title="attr-media-readyState">readyState</code> attribute, and a
+ <dfn>most recently reported playback state</dfn>, which is either
+ <i>playing</i> or <i>waiting</i>.</p>
- <hr>
+ <p>When a <code>MediaController</code> is created, its <span>most
+ recently reported readiness state</span> must be set to 0, and its
+ <span>most recently reported playback state</span> must be set to
+ <i>waiting</i>.</p>
- <p>The <dfn
- title="dom-MediaController-seekable"><code>seekable</code></dfn>
- attribute must return a new static <span>normalized
- <code>TimeRanges</code> object</span> that represents the
- intersection of the ranges of the <span title="media resource">media
- resources</span> of the <span>slaved media elements</span> that the
- user agent is able to seek to, at the time the attribute is
- evaluated.</p>
+ <p>When a user agent is required to <dfn>report the controller
+ state</dfn> for a <code>MediaController</code>, the user agent must
+ run the following steps:</p>
- <p>The <dfn
- title="dom-MediaController-buffered"><code>buffered</code></dfn>
- attribute must return a new static <span>normalized
- <code>TimeRanges</code> object</span> that represents the
- intersection of the ranges of the <span title="media resource">media
- resources</span> of the <span>slaved media elements</span> that the
- user agent has buffered, at the time the attribute is evaluated.
- Users agents must accurately determine the ranges available, even
- for media streams where this can only be determined by tedious
- inspection.</p>
+ <ol>
- <p>The <dfn
- title="dom-MediaController-duration"><code>duration</code></dfn>
- attribute must return the <span>media controller
- duration</span>.</p>
+ <li>
- <p>Every 15 to 250ms, or whenever the <code>MediaController</code>'s
- <span>media controller duration</span> changes, whichever happens
- least often, the user agent must <span>queue a task</span> to
- <span>fire a simple event</span> named <code
- title="event-MediaController-durationchange">durationchange</code> at the
- <code>MediaController</code>.</p>
+ <p>If the <code>MediaController</code> has no <span>slaved media
+ elements</span>, let <var title="">new readiness state</var> be
+ 0.</p>
- <p>The <dfn
- title="dom-MediaController-currentTime"><code>currentTime</code></dfn>
- attribute must return the <span>media controller position</span> on
- getting, and on setting must <span>seek the media controller</span>
- to the new value.</p>
+ <p>Otherwise, let it have the lowest value of the <code
+ title="dom-media-readyState">readyState</code> IDL attributes of
+ all of its <span>slaved media elements</span>.</p>
- <p>Every 15 to 250ms, or whenever the <code>MediaController</code>'s
- <span>media controller position</span> changes, whichever happens
- least often, the user agent must <span>queue a task</span> to
- <span>fire a simple event</span> named <code
- title="event-MediaController-timeupdate">timeupdate</code> at the
- <code>MediaController</code>.</p>
+ </li>
- <hr>
+ <li>
- <p>The <dfn
- title="dom-MediaController-paused"><code>paused</code></dfn>
- attribute must return true if the <code>MediaController</code>
- object is a <span>paused media controller</span>, and false
- otherwise.</p>
+ <p>If the <code>MediaController</code>'s <span>most recently
+ reported readiness state</span> is not equal to <var title="">new
+ readiness state</var> then <span>queue a task</span> to <span>fire
+ a simple event</span> at the <code>MediaController</code> object,
+ whose name is the event name corresponding to the value of <var
+ title="">new readiness state</var> given in the table below:</p>
+ <!-- hopefully everyone will understand what this means -->
- <p>When the <dfn
- title="dom-MediaController-pause"><code>pause()</code></dfn> method
- is invoked, the user agent must change the
- <code>MediaController</code> into a <span>paused media
- controller</span>.</p>
+ <table>
+ <thead>
+ <tr>
+ <th>Value of <var title="">new readiness state</var>
+ <th>Event name
- <p>Whenever the <code>MediaController</code> changes from a
- <span>playing media controller</span> to a <span>paused media
- controller</span>, the user agent must <span>queue a task</span> to
- <span>fire a simple event</span> named <code
- title="event-MediaController-pause">pause</code> at the
- <code>MediaController</code>.</p>
+ <tbody>
+ <tr>
+ <td> 0
+ <td> <code title="event-MediaController-emptied">emptied</code>
- <p>When the <dfn
- title="dom-MediaController-play"><code>play()</code></dfn> method
- is invoked, the user agent must change the
- <code>MediaController</code> into a <span>playing media
- controller</span>.</p>
+ <tr>
+ <td> 1
+ <td> <code title="event-MediaController-loadedmetadata">loadedmetadata</code>
- <p>Whenever the <code>MediaController</code> changes from a
- <span>paused media controller</span> to a <span>playing media
- controller</span>, the user agent must <span>queue a task</span> to
- <span>fire a simple event</span> named <code
- title="event-MediaController-play">play</code> at the
- <code>MediaController</code>.</p>
+ <tr>
+ <td> 2
+ <td> <code title="event-MediaController-loadeddata">loadeddata</code>
- <hr>
+ <tr>
+ <td> 3
+ <td> <code title="event-MediaController-canplay">canplay</code>
- <p>The <dfn
- title="dom-MediaController-defaultPlaybackRate"><code>defaultPlaybackRate</code></dfn>
- attribute, on getting, must return the
- <code>MediaController</code>'s <span>media controller default
- playback rate</span>, and on setting, must set the
- <code>MediaController</code>'s <span>media controller default
- playback rate</span> to the new value.</p>
+ <tr>
+ <td> 4
+ <td> <code title="event-MediaController-canplaythrough">canplaythrough</code>
- <p>The <dfn
- title="dom-MediaController-playbackRate"><code>playbackRate</code></dfn>
- attribute, on getting, must return the
- <code>MediaController</code>'s <span>media controller playback
- rate</span>, and on setting, must set the
- <code>MediaController</code>'s <span>media controller playback
- rate</span> to the new value.</p>
+ </table>
- <p>Whenever the <span>media controller default playback rate</span>
- or the <span>media controller playback rate</span> are changed, the
- user agent must <span>queue a task</span> to <span>fire a simple
- event</span> named <code
- title="event-MediaController-ratechange">ratechange</code> at the
- <code>MediaController</code>.</p>
+ </li>
- <hr>
+ <li><p>Let the <code>MediaController</code>'s <span>most recently
+ reported readiness state</span> be <var title="">new readiness
+ state</var>.</p></li>
- <p>The <dfn
- title="dom-MediaController-volume"><code>volume</code></dfn>
- attribute, on getting, must return the
- <code>MediaController</code>'s <span>media controller volume
- multiplier</span>, and on setting, if the new value is in the range
- 0.0 to 1.0 inclusive, must set the <code>MediaController</code>'s
- <span>media controller volume multiplier</span> to the new value. If
- the new value is outside the range 0.0 to 1.0 inclusive, then, on
- setting, an <code>INDEX_SIZE_ERR</code> exception must be raised
- instead.</p>
+ <li><p>If the <code>MediaController</code> has no <span>slaved
+ media elements</span>, or the <code>MediaController</code> is a
+ <span>blocked media controller</span>, let <var title="">new
+ playback state</var> be false; otherwise, let it be true.</p></li>
- <p>The <dfn
- title="dom-MediaController-muted"><code>muted</code></dfn>
- attribute, on getting, must return the
- <code>MediaController</code>'s <span>media controller mute
- override</span>, and on setting, must set the
- <code>MediaController</code>'s <span>media controller mute
- override</span> to the new value.</p>
+ <li><p>If the <code>MediaController</code>'s <span>most recently
+ reported playback state</span> is not equal to <var title="">new
+ playback state</var> then <span>queue a task</span> to <span>fire a
+ simple event</span> at the <code>MediaController</code> object,
+ whose name is <code
+ title="event-MediaController-playing">playing</code> if <var
+ title="">new playback state</var> is true, and whose name is <code
+ title="event-MediaController-waiting">waiting</code>
+ otherwise.</p></li>
- <p>Whenever either the <span>media controller volume
- multiplier</span> or the <span>media controller mute override</span>
- are changed, the user agent must <span>queue a task</span> to
- <span>fire a simple event</span> named <code
- title="event-MediaController-volumechange">volumechange</code> at the
- <code>MediaController</code>.</p>
+ <li><p>Let the <code>MediaController</code>'s <span>most recently
+ reported playback state</span> be <var title="">new playback
+ state</var>.</p></li>
+ </ol>
+
<hr>
<p>The following are the <span>event handlers</span> that must be
@@ -31986,6 +32155,14 @@
<thead>
<tr><th><span title="event handlers">Event handler</span> <th><span>Event handler event type</span>
<tbody>
+ <tr><td><dfn title="handler-MediaController-onemptied"><code>onemptied</code></dfn> <td> <code title="event-MediaController-emptied">emptied</code>
+ <tr><td><dfn title="handler-MediaController-onloadedmetadata"><code>onloadedmetadata</code></dfn> <td> <code title="event-MediaController-loadedmetadata">loadedmetadata</code>
+ <tr><td><dfn title="handler-MediaController-onloadeddata"><code>onloadeddata</code></dfn> <td> <code title="event-MediaController-loadeddata">loadeddata</code>
+ <tr><td><dfn title="handler-MediaController-oncanplay"><code>oncanplay</code></dfn> <td> <code title="event-MediaController-canplay">canplay</code>
+ <tr><td><dfn title="handler-MediaController-oncanplaythrough"><code>oncanplaythrough</code></dfn> <td> <code title="event-MediaController-canplaythrough">canplaythrough</code>
+ <tr><td><dfn title="handler-MediaController-onplaying"><code>onplaying</code></dfn> <td> <code title="event-MediaController-playing">playing</code>
+ <tr><td><dfn title="handler-MediaController-onwaiting"><code>onwaiting</code></dfn> <td> <code title="event-MediaController-waiting">waiting</code>
+ <tbody>
<tr><td><dfn title="handler-MediaController-ondurationchange"><code>ondurationchange</code></dfn> <td> <code title="event-MediaController-durationchange">durationchange</code>
<tr><td><dfn title="handler-MediaController-ontimeupdate"><code>ontimeupdate</code></dfn> <td> <code title="event-MediaController-durationchange">durationchange</code>
<tr><td><dfn title="handler-MediaController-onplay"><code>onplay</code></dfn> <td> <code title="event-MediaController-play">play</code>
@@ -36475,6 +36652,36 @@
<tbody>
<tr>
+ <td><dfn title="event-MediaController-emptied"><code>emptied</code></dfn>
+ <td><code>Event</code>
+ <td>All the <span>slaved media elements</span> newly have <code title="dom-media-readyState">readyState</code> set to <code title="dom-media-HAVE_NOTHING">HAVE_NOTHING</code> or greater, or there are no longer any <span>slaved media elements</span>.
+ <tr>
+ <td><dfn title="event-MediaController-loadedmetadata"><code>loadedmetadata</code></dfn>
+ <td><code>Event</code>
+ <td>All the <span>slaved media elements</span> newly have <code title="dom-media-readyState">readyState</code> set to <code title="dom-media-HAVE_METADATA">HAVE_METADATA</code> or greater.
+ <tr>
+ <td><dfn title="event-MediaController-loadeddata"><code>loadeddata</code></dfn>
+ <td><code>Event</code>
+ <td>All the <span>slaved media elements</span> newly have <code title="dom-media-readyState">readyState</code> set to <code title="dom-media-HAVE_CURRENT_DATA">HAVE_CURRENT_DATA</code> or greater.
+ <tr>
+ <td><dfn title="event-MediaController-canplay"><code>canplay</code></dfn>
+ <td><code>Event</code>
+ <td>All the <span>slaved media elements</span> newly have <code title="dom-media-readyState">readyState</code> set to <code title="dom-media-HAVE_FUTURE_DATA">HAVE_FUTURE_DATA</code> or greater.
+ <tr>
+ <td><dfn title="event-MediaController-canplaythrough"><code>canplaythrough</code></dfn>
+ <td><code>Event</code>
+ <td>All the <span>slaved media elements</span> newly have <code title="dom-media-readyState">readyState</code> set to <code title="dom-media-HAVE_ENOUGH_DATA">HAVE_ENOUGH_DATA</code> or greater.
+ <tr>
+ <td><dfn title="event-MediaController-playing"><code>playing</code></dfn>
+ <td><code>Event</code>
+ <td>The <code>MediaController</code> is no longer a <span>blocked media controller</span>.
+ <tr>
+ <td><dfn title="event-MediaController-waiting"><code>waiting</code></dfn>
+ <td><code>Event</code>
+ <td>The <code>MediaController</code> is now a <span>blocked media controller</span>.
+
+ <tbody>
+ <tr>
<td><dfn title="event-MediaController-durationchange"><code>durationchange</code></dfn>
<td><code>Event</code>
<td>The <code title="dom-MediaController-duration">duration</code> attribute has just been updated.
More information about the Commit-Watchers
mailing list