[html5] r8716 - [giow] (1) Define <video>.srcObject Fixing https://www.w3.org/Bugs/Public/show_b [...]
whatwg at whatwg.org
whatwg at whatwg.org
Tue Aug 26 11:59:21 PDT 2014
Author: ianh
Date: 2014-08-26 11:59:17 -0700 (Tue, 26 Aug 2014)
New Revision: 8716
Modified:
complete.html
index
source
Log:
[giow] (1) Define <video>.srcObject
Fixing https://www.w3.org/Bugs/Public/show_bug.cgi?id=24684
Affected topics: DOM APIs, HTML, Video and Audio
Modified: complete.html
===================================================================
--- complete.html 2014-08-25 21:24:20 UTC (rev 8715)
+++ complete.html 2014-08-26 18:59:17 UTC (rev 8716)
@@ -291,7 +291,7 @@
</style><link rel=stylesheet href=status.css><body onload=init()>
<header id=head class="head with-buttons">
<p><a href=//www.whatwg.org/ class=logo><img src=/images/logo width=101 alt=WHATWG height=101></a></p>
- <hgroup><h1 class=allcaps>HTML</h1><h2 id=living-standard-—-last-updated-[date:-01-jan-1901] class="no-num no-toc">Living Standard — Last Updated <span class=pubdate>25 August 2014</span></h2></hgroup>
+ <hgroup><h1 class=allcaps>HTML</h1><h2 id=living-standard-—-last-updated-[date:-01-jan-1901] class="no-num no-toc">Living Standard — Last Updated <span class=pubdate>26 August 2014</span></h2></hgroup>
<nav>
<div>
@@ -2390,6 +2390,12 @@
<ul class=brief><li><dfn id=blob><code>Blob</code></dfn> interface<li><dfn id=file><code>File</code></dfn> interface<li><dfn id=filelist><code>FileList</code></dfn> interface<li><dfn id=dom-blob-close><code>Blob.close()</code></dfn><li><dfn id=dom-blob-type><code>Blob.type</code></dfn><li>The concept of <dfn id=file-error-read>read errors</dfn></ul>
+ <dt>Media Providers<dd>
+
+ <p>This specification references the following interfaces:</p>
+
+ <ul class=brief><li><dfn id=mediastream><code>MediaStream</code></dfn> <a href=#refsMEDIASTREAM>[MEDIASTREAM]</a><li><dfn id=mediasource><code>MediaSource</code></dfn> <a href=#refsMEDIASOURCE>[MEDIASOURCE]</a></ul>
+
<dt>XMLHttpRequest<dd>
<p>This specification references the XMLHttpRequest specification to describe how the two
@@ -21771,6 +21777,7 @@
this specification) implement the following interface:</p>
<pre class=idl>enum <dfn id=canplaytyperesult>CanPlayTypeResult</dfn> { "" /* <a href=#dom-canplaytyperesult-nil id=media-elements:dom-canplaytyperesult-nil>empty string</a> */, "<a href=#dom-canplaytyperesult-maybe id=media-elements:dom-canplaytyperesult-maybe>maybe</a>", "<a href=#dom-canplaytyperesult-probably id=media-elements:dom-canplaytyperesult-probably>probably</a>" };
+typedef (<a href=#mediastream id=media-elements:mediastream>MediaStream</a> or <a href=#mediasource id=media-elements:mediasource>MediaSource</a> or <a href=#blob id=media-elements:blob>Blob</a>) <dfn id=mediaprovider>MediaProvider</dfn>;
interface <dfn id=htmlmediaelement>HTMLMediaElement</dfn> : <a href=#htmlelement id=media-elements:htmlelement>HTMLElement</a> {
// error state
@@ -21778,6 +21785,7 @@
// network state
attribute DOMString <a href=#dom-media-src id=media-elements:dom-media-src>src</a>;
+ attribute <a href=#mediaprovider id=media-elements:mediaprovider>MediaProvider</a>? <a href=#dom-media-srcobject id=media-elements:dom-media-srcobject>srcObject</a>;
readonly attribute DOMString <a href=#dom-media-currentsrc id=media-elements:dom-media-currentsrc>currentSrc</a>;
attribute DOMString <a href=#dom-media-crossorigin id=media-elements:dom-media-crossorigin>crossOrigin</a>;
const unsigned short <a href=#dom-media-network_empty id=media-elements:dom-media-network_empty>NETWORK_EMPTY</a> = 0;
@@ -21920,7 +21928,7 @@
user's request.<dt><dfn id=dom-mediaerror-media_err_network><code>MEDIA_ERR_NETWORK</code></dfn> (numeric value 2)<dd>A network error of some description caused the user agent to stop fetching the <a href=#media-resource id=error-codes:media-resource-2>media
resource</a>, after the resource was established to be usable.<dt><dfn id=dom-mediaerror-media_err_decode><code>MEDIA_ERR_DECODE</code></dfn> (numeric value 3)<dd>An error of some description occurred while decoding the <a href=#media-resource id=error-codes:media-resource-3>media resource</a>, after
the resource was established to be usable.<dt><dfn id=dom-mediaerror-media_err_src_not_supported><code>MEDIA_ERR_SRC_NOT_SUPPORTED</code></dfn> (numeric value 4)<dd>The <a href=#media-resource id=error-codes:media-resource-4>media resource</a> indicated by the <code id=error-codes:attr-media-src><a href=#attr-media-src>src</a></code>
- attribute was not suitable.</dl>
+ attribute or <a href=#assigned-media-provider-object id=error-codes:assigned-media-provider-object>assigned media provider object</a> was not suitable.</dl>
@@ -21957,28 +21965,49 @@
attribute, <a href=#limited-to-only-known-values id=location-of-the-media-resource:limited-to-only-known-values>limited to only known values</a>.</p>
+
+ <p>A <dfn id=media-provider-object>media provider object</dfn> is an object that can represent a <a href=#media-resource id=location-of-the-media-resource:media-resource>media resource</a>,
+ separate from a <a href=#url id=location-of-the-media-resource:url>URL</a>. <code id=location-of-the-media-resource:mediastream><a href=#mediastream>MediaStream</a></code> objects, <code id=location-of-the-media-resource:mediasource><a href=#mediasource>MediaSource</a></code>
+ objects, <code id=location-of-the-media-resource:blob><a href=#blob>Blob</a></code> objects, and <code id=location-of-the-media-resource:file><a href=#file>File</a></code> objects are all <a href=#media-provider-object id=location-of-the-media-resource:media-provider-object>media provider objects</a>.</p>
- <dl class=domintro><dt><var>media</var> . <code id=location-of-the-media-resource:dom-media-currentsrc><a href=#dom-media-currentsrc>currentSrc</a></code><dd>
+
- <p>Returns the address of the current <a href=#media-resource id=location-of-the-media-resource:media-resource>media resource</a>.</p>
+ <p>Each <a href=#media-element id=location-of-the-media-resource:media-element-9>media element</a> can have an <dfn id=assigned-media-provider-object>assigned media provider object</dfn>, which is a
+ <a href=#media-provider-object id=location-of-the-media-resource:media-provider-object-2>media provider object</a>. When a <a href=#media-element id=location-of-the-media-resource:media-element-10>media element</a> is created, it has no
+ <a href=#assigned-media-provider-object id=location-of-the-media-resource:assigned-media-provider-object>assigned media provider object</a>.</p>
- <p>Returns the empty string when there is no <a href=#media-resource id=location-of-the-media-resource:media-resource-2>media resource</a>.</p>
+
+ <dl class=domintro><dt><var>media</var> . <code id=location-of-the-media-resource:dom-media-srcobject><a href=#dom-media-srcobject>srcObject</a></code> [ = <var>source</var> ]<dd>
+
+ <p>Allows the <a href=#media-element id=location-of-the-media-resource:media-element-11>media element</a> to be assigned a <a href=#media-provider-object id=location-of-the-media-resource:media-provider-object-3>media provider object</a>.</p>
+
+ <dt><var>media</var> . <code id=location-of-the-media-resource:dom-media-currentsrc><a href=#dom-media-currentsrc>currentSrc</a></code><dd>
+
+ <p>Returns the address of the current <a href=#media-resource id=location-of-the-media-resource:media-resource-2>media resource</a>, if any.</p>
+
+ <p>Returns the empty string when there is no <a href=#media-resource id=location-of-the-media-resource:media-resource-3>media resource</a>, or it doesn't have an address.</p>
+
</dl>
- <p>The <dfn id=dom-media-currentsrc><code>currentSrc</code></dfn> IDL attribute is initially
+ <p>The <dfn id=dom-media-currentsrc><code>currentSrc</code></dfn> IDL attribute must initially be set to
the empty string. Its value is changed by the <a href=#concept-media-load-algorithm id=location-of-the-media-resource:concept-media-load-algorithm-2>resource
selection algorithm</a> defined below.</p>
+ <p>The <dfn id=dom-media-srcobject><code>srcObject</code></dfn> IDL attribute, on getting,
+ must return the element's <a href=#assigned-media-provider-object id=location-of-the-media-resource:assigned-media-provider-object-2>assigned media provider object</a>, if any, or null otherwise.
+ On setting, it must set the element's <a href=#assigned-media-provider-object id=location-of-the-media-resource:assigned-media-provider-object-3>assigned media provider object</a> to the new
+ value, and then invoke the element's <a href=#media-element-load-algorithm id=location-of-the-media-resource:media-element-load-algorithm-2>media element load algorithm</a>.</p>
+
+
+ <p class=note>There are three ways to specify a <a href=#media-resource id=location-of-the-media-resource:media-resource-4>media resource</a>: the <code id=location-of-the-media-resource:dom-media-srcobject-2><a href=#dom-media-srcobject>srcObject</a></code> IDL attribute, the <code id=location-of-the-media-resource:attr-media-src-5><a href=#attr-media-src>src</a></code> content attribute, and <code id=location-of-the-media-resource:the-source-element-2><a href=#the-source-element>source</a></code> elements. The IDL
+ attribute takes priority, followed by the content attribute, followed by the elements.</p>
- <p class=note>There are two ways to specify a <a href=#media-resource id=location-of-the-media-resource:media-resource-3>media resource</a>, the <code id=location-of-the-media-resource:attr-media-src-5><a href=#attr-media-src>src</a></code> attribute, or <code id=location-of-the-media-resource:the-source-element-2><a href=#the-source-element>source</a></code> elements. The attribute
- overrides the elements.</p>
-
<h5 id=mime-types>4.8.14.3 MIME types</h5>
<p>A <a href=#media-resource id=mime-types:media-resource>media resource</a> can be described in terms of its <em>type</em>, specifically a
@@ -22185,194 +22214,272 @@
<li>
- <p>⌛ If the <a href=#media-element id=loading-the-media-resource:media-element-14>media element</a> has a <code id=loading-the-media-resource:attr-media-src><a href=#attr-media-src>src</a></code>
+ <p>⌛ If the <a href=#media-element id=loading-the-media-resource:media-element-14>media element</a> has an <a href=#assigned-media-provider-object id=loading-the-media-resource:assigned-media-provider-object>assigned media provider
+ object</a>, then let <var>mode</var> be <i>object</i>.</p>
+
+ <p>⌛ Otherwise, if the <a href=#media-element id=loading-the-media-resource:media-element-15>media element</a> has no <a href=#assigned-media-provider-object id=loading-the-media-resource:assigned-media-provider-object-2>assigned media provider
+ object</a> but has a <code id=loading-the-media-resource:attr-media-src><a href=#attr-media-src>src</a></code>
attribute, then let <var>mode</var> be <i>attribute</i>.</p>
- <p>⌛ Otherwise, if the <a href=#media-element id=loading-the-media-resource:media-element-15>media element</a> does not have a <code id=loading-the-media-resource:attr-media-src-2><a href=#attr-media-src>src</a></code> attribute but has a <code id=loading-the-media-resource:the-source-element><a href=#the-source-element>source</a></code> element child, then
+ <p>⌛ Otherwise, if the <a href=#media-element id=loading-the-media-resource:media-element-16>media element</a> does not have an <a href=#assigned-media-provider-object id=loading-the-media-resource:assigned-media-provider-object-3>assigned media provider
+ object</a> and does not have a <code id=loading-the-media-resource:attr-media-src-2><a href=#attr-media-src>src</a></code> attribute, but does have a <code id=loading-the-media-resource:the-source-element><a href=#the-source-element>source</a></code> element child, then
let <var>mode</var> be <i>children</i> and let <var>candidate</var>
be the first such <code id=loading-the-media-resource:the-source-element-2><a href=#the-source-element>source</a></code> element child in <a href=#tree-order id=loading-the-media-resource:tree-order>tree order</a>.</p>
- <p>⌛ Otherwise the <a href=#media-element id=loading-the-media-resource:media-element-16>media element</a> has neither a <code id=loading-the-media-resource:attr-media-src-3><a href=#attr-media-src>src</a></code> attribute nor a <code id=loading-the-media-resource:the-source-element-3><a href=#the-source-element>source</a></code> element child: set the
+ <p>⌛ Otherwise the <a href=#media-element id=loading-the-media-resource:media-element-17>media element</a> has no <a href=#assigned-media-provider-object id=loading-the-media-resource:assigned-media-provider-object-4>assigned media provider
+ object</a> and has neither a <code id=loading-the-media-resource:attr-media-src-3><a href=#attr-media-src>src</a></code> attribute nor a <code id=loading-the-media-resource:the-source-element-3><a href=#the-source-element>source</a></code> element child: set the
<code id=loading-the-media-resource:dom-media-networkstate-4><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_empty-2><a href=#dom-media-network_empty>NETWORK_EMPTY</a></code>, and abort these steps; the
<a href=#synchronous-section id=loading-the-media-resource:synchronous-section-5>synchronous section</a> ends.</p>
- <li><p>⌛ Set the <a href=#media-element id=loading-the-media-resource:media-element-17>media element</a>'s <code id=loading-the-media-resource:dom-media-networkstate-5><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_loading-2><a href=#dom-media-network_loading>NETWORK_LOADING</a></code>.<li><p>⌛ <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-4>Queue a task</a> to <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-4>fire a simple event</a> named <code id=loading-the-media-resource:event-media-loadstart><a href=#event-media-loadstart>loadstart</a></code> at the <a href=#media-element id=loading-the-media-resource:media-element-18>media element</a>.<li>
+ <li><p>⌛ Set the <a href=#media-element id=loading-the-media-resource:media-element-18>media element</a>'s <code id=loading-the-media-resource:dom-media-networkstate-5><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_loading-2><a href=#dom-media-network_loading>NETWORK_LOADING</a></code>.<li><p>⌛ <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-4>Queue a task</a> to <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-4>fire a simple event</a> named <code id=loading-the-media-resource:event-media-loadstart><a href=#event-media-loadstart>loadstart</a></code> at the <a href=#media-element id=loading-the-media-resource:media-element-19>media element</a>.<li>
- <p>If <var>mode</var> is <i>attribute</i>, then run these substeps:</p>
+ <p>Run the appropriate steps from the following list:</p>
- <ol><li><p>⌛ If the <code id=loading-the-media-resource:attr-media-src-4><a href=#attr-media-src>src</a></code>
- attribute's value is the empty string, then end the <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-6>synchronous section</a>, and jump
- down to the <i>failed with attribute</i> step below.<li><p>⌛ Let <var>absolute URL</var> be the <a href=#absolute-url id=loading-the-media-resource:absolute-url>absolute URL</a> that
- would have resulted from <a href=#resolve-a-url id=loading-the-media-resource:resolve-a-url>resolving</a> the <a href=#url id=loading-the-media-resource:url>URL</a>
- specified by the <code id=loading-the-media-resource:attr-media-src-5><a href=#attr-media-src>src</a></code> attribute's value relative to the
- <a href=#media-element id=loading-the-media-resource:media-element-19>media element</a> when the <code id=loading-the-media-resource:attr-media-src-6><a href=#attr-media-src>src</a></code> attribute was last
- changed.</p>
+ <dl class=switch><dt>If <var>mode</var> is <i>object</i><dd>
- <li><p>⌛ If <var>absolute URL</var> was obtained successfully, set the <code id=loading-the-media-resource:dom-media-currentsrc><a href=#dom-media-currentsrc>currentSrc</a></code> attribute to <var>absolute
- URL</var>.<li><p>End the <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-7>synchronous section</a>, continuing the remaining steps
- asynchronously.<li><p>If <var>absolute URL</var> was obtained successfully, run the <a href=#concept-media-load-resource id=loading-the-media-resource:concept-media-load-resource>resource fetch algorithm</a> with <var>absolute
- URL</var>. If that algorithm returns without aborting <em>this</em> one, then the load
- failed.<li>
+ <ol><li><p>⌛ Set the <code id=loading-the-media-resource:dom-media-currentsrc><a href=#dom-media-currentsrc>currentSrc</a></code> attribute to
+ the empty string.<li><p>End the <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-6>synchronous section</a>, continuing the remaining steps
+ asynchronously.<li><p>Run the <a href=#concept-media-load-resource id=loading-the-media-resource:concept-media-load-resource>resource fetch algorithm</a>
+ with the <a href=#assigned-media-provider-object id=loading-the-media-resource:assigned-media-provider-object-5>assigned media provider object</a>. If that algorithm returns without
+ aborting <em>this</em> one, then the load failed.<li><p><i>Failed with media provider</i>: Reaching this step indicates that the media
+ resource failed to load. <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-5>Queue a task</a> to run the <a href=#dedicated-media-source-failure-steps id=loading-the-media-resource:dedicated-media-source-failure-steps>dedicated media source
+ failure steps</a>.<li><p>Wait for the <a href=#concept-task id=loading-the-media-resource:concept-task-4>task</a> queued by the previous step to have
+ executed.<li><p>Abort these steps. The element won't attempt to load another resource until this
+ algorithm is triggered again.</ol>
- <p><i>Failed with attribute</i>: Reaching this step indicates that the media resource
- failed to load or that the given <a href=#url id=loading-the-media-resource:url-2>URL</a> could not be <a href=#resolve-a-url id=loading-the-media-resource:resolve-a-url-2>resolved</a>. <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-5>Queue a task</a> to run the following steps:</p>
+ <dt>If <var>mode</var> is <i>attribute</i><dd>
- <ol><li><p>Set the <code id=loading-the-media-resource:dom-media-error-2><a href=#dom-media-error>error</a></code> attribute to a new
- <code id=loading-the-media-resource:mediaerror><a href=#mediaerror>MediaError</a></code> object whose <code id=loading-the-media-resource:dom-mediaerror-code><a href=#dom-mediaerror-code>code</a></code> attribute
- is set to <code id=loading-the-media-resource:dom-mediaerror-media_err_src_not_supported><a href=#dom-mediaerror-media_err_src_not_supported>MEDIA_ERR_SRC_NOT_SUPPORTED</a></code>.<li><p><a href="#forget-the-media-element's-media-resource-specific-tracks" id="loading-the-media-resource:forget-the-media-element's-media-resource-specific-tracks-2">Forget the media element's media-resource-specific tracks</a>.<li><p>Set the element's <code id=loading-the-media-resource:dom-media-networkstate-6><a href=#dom-media-networkstate>networkState</a></code> attribute
- to the <code id=loading-the-media-resource:dom-media-network_no_source-2><a href=#dom-media-network_no_source>NETWORK_NO_SOURCE</a></code> value.<li><p>Set the element's <a href=#show-poster-flag id=loading-the-media-resource:show-poster-flag-2>show poster flag</a> to true.<li><p><a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-5>Fire a simple event</a> named <code id=loading-the-media-resource:event-media-error><a href=#event-media-error>error</a></code> at
- the <a href=#media-element id=loading-the-media-resource:media-element-20>media element</a>.<li><p>Set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-3>delaying-the-load-event flag</a> to false. This stops <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-3>delaying the load event</a>.</ol>
+ <ol><li><p>⌛ If the <code id=loading-the-media-resource:attr-media-src-4><a href=#attr-media-src>src</a></code>
+ attribute's value is the empty string, then end the <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-7>synchronous section</a>, and jump
+ down to the <i>failed with attribute</i> step below.<li><p>⌛ Let <var>absolute URL</var> be the <a href=#absolute-url id=loading-the-media-resource:absolute-url>absolute URL</a> that
+ would have resulted from <a href=#resolve-a-url id=loading-the-media-resource:resolve-a-url>resolving</a> the <a href=#url id=loading-the-media-resource:url>URL</a>
+ specified by the <code id=loading-the-media-resource:attr-media-src-5><a href=#attr-media-src>src</a></code> attribute's value relative to the
+ <a href=#media-element id=loading-the-media-resource:media-element-20>media element</a> when the <code id=loading-the-media-resource:attr-media-src-6><a href=#attr-media-src>src</a></code> attribute was last
+ changed.</p>
- <li><p>Wait for the <a href=#concept-task id=loading-the-media-resource:concept-task-4>task</a> queued by the previous step to have
- executed.<li><p>Abort these steps. Until the <code id=loading-the-media-resource:dom-media-load-2><a href=#dom-media-load>load()</a></code> method is
- invoked or the <code id=loading-the-media-resource:attr-media-src-7><a href=#attr-media-src>src</a></code> attribute is changed, the element won't
- attempt to load another resource.</ol>
+ <li><p>⌛ If <var>absolute URL</var> was obtained successfully, set the <code id=loading-the-media-resource:dom-media-currentsrc-2><a href=#dom-media-currentsrc>currentSrc</a></code> attribute to <var>absolute
+ URL</var>.<li><p>End the <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-8>synchronous section</a>, continuing the remaining steps
+ asynchronously.<li><p>If <var>absolute URL</var> was obtained successfully, run the <a href=#concept-media-load-resource id=loading-the-media-resource:concept-media-load-resource-2>resource fetch algorithm</a> with <var>absolute
+ URL</var>. If that algorithm returns without aborting <em>this</em> one, then the load
+ failed.<li><p><i>Failed with attribute</i>: Reaching this step indicates that the media resource
+ failed to load or that the given <a href=#url id=loading-the-media-resource:url-2>URL</a> could not be <a href=#resolve-a-url id=loading-the-media-resource:resolve-a-url-2>resolved</a>. <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-6>Queue a task</a> to run the <a href=#dedicated-media-source-failure-steps id=loading-the-media-resource:dedicated-media-source-failure-steps-2>dedicated media source
+ failure steps</a>.<li><p>Wait for the <a href=#concept-task id=loading-the-media-resource:concept-task-5>task</a> queued by the previous step to have
+ executed.<li><p>Abort these steps. The element won't attempt to load another resource until this
+ algorithm is triggered again.</ol>
- <p>Otherwise, the <code id=loading-the-media-resource:the-source-element-4><a href=#the-source-element>source</a></code> elements will be used; run these substeps:</p>
+ <dt>Otherwise (<var>mode</var> is <i>children</i>)<dd>
- <ol><li>
+ <ol><li>
- <p>⌛ Let <var>pointer</var> be a position defined by two adjacent nodes in the
- <a href=#media-element id=loading-the-media-resource:media-element-21>media element</a>'s child list, treating the start of the list (before the first
- child in the list, if any) and end of the list (after the last child in the list, if any) as
- nodes in their own right. One node is the node before <var>pointer</var>, and the
- other node is the node after <var>pointer</var>. Initially, let <var>pointer</var> be the position between the <var>candidate</var> node and the
- next node, if there are any, or the end of the list, if it is the last node.</p>
+ <p>⌛ Let <var>pointer</var> be a position defined by two adjacent nodes in the
+ <a href=#media-element id=loading-the-media-resource:media-element-21>media element</a>'s child list, treating the start of the list (before the first
+ child in the list, if any) and end of the list (after the last child in the list, if any) as
+ nodes in their own right. One node is the node before <var>pointer</var>, and the
+ other node is the node after <var>pointer</var>. Initially, let <var>pointer</var> be the position between the <var>candidate</var> node and the
+ next node, if there are any, or the end of the list, if it is the last node.</p>
- <p>As nodes are inserted and removed into the <a href=#media-element id=loading-the-media-resource:media-element-22>media element</a>, <var>pointer</var> must be updated as follows:</p>
+ <p>As nodes are inserted and removed into the <a href=#media-element id=loading-the-media-resource:media-element-22>media element</a>, <var>pointer</var> must be updated as follows:</p>
- <dl><dt>If a new node is inserted between the two nodes that define <var>pointer</var><dd>Let <var>pointer</var> be the point between the node before <var>pointer</var> and the new node. In other words, insertions at <var>pointer</var> go after <var>pointer</var>.<dt>If the node before <var>pointer</var> is removed<dd>Let <var>pointer</var> be the point between the node after <var>pointer</var> and the node before the node after <var>pointer</var>. In
- other words, <var>pointer</var> doesn't move relative to the remaining nodes.<dt>If the node after <var>pointer</var> is removed<dd>Let <var>pointer</var> be the point between the node before <var>pointer</var> and the node after the node before <var>pointer</var>. Just
- as with the previous case, <var>pointer</var> doesn't move relative to the remaining
- nodes.</dl>
+ <dl><dt>If a new node is inserted between the two nodes that define <var>pointer</var><dd>Let <var>pointer</var> be the point between the node before <var>pointer</var> and the new node. In other words, insertions at <var>pointer</var> go after <var>pointer</var>.<dt>If the node before <var>pointer</var> is removed<dd>Let <var>pointer</var> be the point between the node after <var>pointer</var> and the node before the node after <var>pointer</var>. In
+ other words, <var>pointer</var> doesn't move relative to the remaining nodes.<dt>If the node after <var>pointer</var> is removed<dd>Let <var>pointer</var> be the point between the node before <var>pointer</var> and the node after the node before <var>pointer</var>. Just
+ as with the previous case, <var>pointer</var> doesn't move relative to the remaining
+ nodes.</dl>
- <p>Other changes don't affect <var>pointer</var>.</p>
+ <p>Other changes don't affect <var>pointer</var>.</p>
- <li><p>⌛ <i>Process candidate</i>: If <var>candidate</var> does not have a
- <code id=loading-the-media-resource:attr-source-src><a href=#attr-source-src>src</a></code> attribute, or if its <code id=loading-the-media-resource:attr-source-src-2><a href=#attr-source-src>src</a></code> attribute's value is the empty string, then end the
- <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-8>synchronous section</a>, and jump down to the <i>failed with elements</i> step
- below.<li><p>⌛ Let <var>absolute URL</var> be the <a href=#absolute-url id=loading-the-media-resource:absolute-url-2>absolute URL</a> that
- would have resulted from <a href=#resolve-a-url id=loading-the-media-resource:resolve-a-url-3>resolving</a> the <a href=#url id=loading-the-media-resource:url-3>URL</a>
- specified by <var>candidate</var>'s <code id=loading-the-media-resource:attr-source-src-3><a href=#attr-source-src>src</a></code>
- attribute's value relative to the <var>candidate</var> when the <code id=loading-the-media-resource:attr-source-src-4><a href=#attr-source-src>src</a></code> attribute was last changed.</p>
+ <li><p>⌛ <i>Process candidate</i>: If <var>candidate</var> does not have a
+ <code id=loading-the-media-resource:attr-source-src><a href=#attr-source-src>src</a></code> attribute, or if its <code id=loading-the-media-resource:attr-source-src-2><a href=#attr-source-src>src</a></code> attribute's value is the empty string, then end the
+ <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-9>synchronous section</a>, and jump down to the <i>failed with elements</i> step
+ below.<li><p>⌛ Let <var>absolute URL</var> be the <a href=#absolute-url id=loading-the-media-resource:absolute-url-2>absolute URL</a> that
+ would have resulted from <a href=#resolve-a-url id=loading-the-media-resource:resolve-a-url-3>resolving</a> the <a href=#url id=loading-the-media-resource:url-3>URL</a>
+ specified by <var>candidate</var>'s <code id=loading-the-media-resource:attr-source-src-3><a href=#attr-source-src>src</a></code>
+ attribute's value relative to the <var>candidate</var> when the <code id=loading-the-media-resource:attr-source-src-4><a href=#attr-source-src>src</a></code> attribute was last changed.</p>
- <li><p>⌛ If <var>absolute URL</var> was not obtained successfully, then end the
- <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-9>synchronous section</a>, and jump down to the <i>failed with elements</i> step
- below.<li><p>⌛ If <var>candidate</var> has a <code id=loading-the-media-resource:attr-source-type><a href=#attr-source-type>type</a></code> attribute whose value, when parsed as a <a href=#mime-type id=loading-the-media-resource:mime-type>MIME
- type</a> (including any codecs described by the <code>codecs</code> parameter, for
- types that define that parameter), represents <a href=#a-type-that-the-user-agent-knows-it-cannot-render id=loading-the-media-resource:a-type-that-the-user-agent-knows-it-cannot-render>a type that the user agent knows it cannot
- render</a>, then end the <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-10>synchronous section</a>, and jump down to the <i>failed with elements</i> step below.<li><p>⌛ Set the <code id=loading-the-media-resource:dom-media-currentsrc-2><a href=#dom-media-currentsrc>currentSrc</a></code> attribute to <var>absolute URL</var>.<li><p>End the <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-11>synchronous section</a>, continuing the remaining steps
- asynchronously.<li><p>Run the <a href=#concept-media-load-resource id=loading-the-media-resource:concept-media-load-resource-2>resource fetch algorithm</a> with
- <var>absolute URL</var>. If that algorithm returns without aborting <em>this</em> one,
- then the load failed.<li><p><i>Failed with elements</i>: <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-6>Queue a task</a> to <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-6>fire a simple
- event</a> named <code id=loading-the-media-resource:event-error><a href=#event-error>error</a></code> at the <var>candidate</var> element.<li><p>Asynchronously <a href=#await-a-stable-state id=loading-the-media-resource:await-a-stable-state-2>await a stable state</a>. The <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-12>synchronous section</a>
- consists of all the remaining steps of this algorithm until the algorithm says the
- <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-13>synchronous section</a> has ended. (Steps in <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-14>synchronous sections</a> are marked with ⌛.)<li><p>⌛ <a href="#forget-the-media-element's-media-resource-specific-tracks" id="loading-the-media-resource:forget-the-media-element's-media-resource-specific-tracks-3">Forget the media element's media-resource-specific
- tracks</a>.<li><p>⌛ <i>Find next candidate</i>: Let <var>candidate</var> be
- null.<li><p>⌛ <i>Search loop</i>: If the node after <var>pointer</var> is
- the end of the list, then jump to the <i>waiting</i> step below.<li><p>⌛ If the node after <var>pointer</var> is a <code id=loading-the-media-resource:the-source-element-5><a href=#the-source-element>source</a></code> element,
- let <var>candidate</var> be that element.<li><p>⌛ Advance <var>pointer</var> so that the node before <var>pointer</var> is now the node that was after <var>pointer</var>, and the node
- after <var>pointer</var> is the node after the node that used to be after <var>pointer</var>, if any.<li><p>⌛ If <var>candidate</var> is null, jump back to the <i>search
- loop</i> step. Otherwise, jump back to the <i>process candidate</i> step.<li><p>⌛ <i>Waiting</i>: Set the element's <code id=loading-the-media-resource:dom-media-networkstate-7><a href=#dom-media-networkstate>networkState</a></code> attribute to the <code id=loading-the-media-resource:dom-media-network_no_source-3><a href=#dom-media-network_no_source>NETWORK_NO_SOURCE</a></code> value.<li><p>⌛ Set the element's <a href=#show-poster-flag id=loading-the-media-resource:show-poster-flag-3>show poster flag</a> to true.<li><p>⌛ <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-7>Queue a task</a> to set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-4>delaying-the-load-event
- flag</a> to false. This stops <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-4>delaying the load
- event</a>.<li><p>End the <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-15>synchronous section</a>, continuing the remaining steps
- asynchronously.<li><p>Wait until the node after <var>pointer</var> is a node other than the end of
- the list. (This step might wait forever.)<li><p>Asynchronously <a href=#await-a-stable-state id=loading-the-media-resource:await-a-stable-state-3>await a stable state</a>. The <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-16>synchronous section</a>
- consists of all the remaining steps of this algorithm until the algorithm says the
- <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-17>synchronous section</a> has ended. (Steps in <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-18>synchronous sections</a> are marked with ⌛.)<li><p>⌛ Set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-5>delaying-the-load-event flag</a> back to true (this
- <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-5>delays the load event</a> again, in case it hasn't been
- fired yet).</p>
+ <li><p>⌛ If <var>absolute URL</var> was not obtained successfully, then end the
+ <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-10>synchronous section</a>, and jump down to the <i>failed with elements</i> step
+ below.<li><p>⌛ If <var>candidate</var> has a <code id=loading-the-media-resource:attr-source-type><a href=#attr-source-type>type</a></code> attribute whose value, when parsed as a <a href=#mime-type id=loading-the-media-resource:mime-type>MIME
+ type</a> (including any codecs described by the <code>codecs</code> parameter, for
+ types that define that parameter), represents <a href=#a-type-that-the-user-agent-knows-it-cannot-render id=loading-the-media-resource:a-type-that-the-user-agent-knows-it-cannot-render>a type that the user agent knows it cannot
+ render</a>, then end the <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-11>synchronous section</a>, and jump down to the <i>failed with elements</i> step below.<li><p>⌛ Set the <code id=loading-the-media-resource:dom-media-currentsrc-3><a href=#dom-media-currentsrc>currentSrc</a></code> attribute to <var>absolute URL</var>.<li><p>End the <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-12>synchronous section</a>, continuing the remaining steps
+ asynchronously.<li><p>Run the <a href=#concept-media-load-resource id=loading-the-media-resource:concept-media-load-resource-3>resource fetch algorithm</a> with
+ <var>absolute URL</var>. If that algorithm returns without aborting <em>this</em> one,
+ then the load failed.<li><p><i>Failed with elements</i>: <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-7>Queue a task</a> to <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-5>fire a simple
+ event</a> named <code id=loading-the-media-resource:event-error><a href=#event-error>error</a></code> at the <var>candidate</var> element.<li><p>Asynchronously <a href=#await-a-stable-state id=loading-the-media-resource:await-a-stable-state-2>await a stable state</a>. The <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-13>synchronous section</a>
+ consists of all the remaining steps of this algorithm until the algorithm says the
+ <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-14>synchronous section</a> has ended. (Steps in <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-15>synchronous sections</a> are marked with ⌛.)<li><p>⌛ <a href="#forget-the-media-element's-media-resource-specific-tracks" id="loading-the-media-resource:forget-the-media-element's-media-resource-specific-tracks-2">Forget the media element's media-resource-specific
+ tracks</a>.<li><p>⌛ <i>Find next candidate</i>: Let <var>candidate</var> be
+ null.<li><p>⌛ <i>Search loop</i>: If the node after <var>pointer</var> is
+ the end of the list, then jump to the <i>waiting</i> step below.<li><p>⌛ If the node after <var>pointer</var> is a <code id=loading-the-media-resource:the-source-element-4><a href=#the-source-element>source</a></code> element,
+ let <var>candidate</var> be that element.<li><p>⌛ Advance <var>pointer</var> so that the node before <var>pointer</var> is now the node that was after <var>pointer</var>, and the node
+ after <var>pointer</var> is the node after the node that used to be after <var>pointer</var>, if any.<li><p>⌛ If <var>candidate</var> is null, jump back to the <i>search
+ loop</i> step. Otherwise, jump back to the <i>process candidate</i> step.<li><p>⌛ <i>Waiting</i>: Set the element's <code id=loading-the-media-resource:dom-media-networkstate-6><a href=#dom-media-networkstate>networkState</a></code> attribute to the <code id=loading-the-media-resource:dom-media-network_no_source-2><a href=#dom-media-network_no_source>NETWORK_NO_SOURCE</a></code> value.<li><p>⌛ Set the element's <a href=#show-poster-flag id=loading-the-media-resource:show-poster-flag-2>show poster flag</a> to true.<li><p>⌛ <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-8>Queue a task</a> to set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-3>delaying-the-load-event
+ flag</a> to false. This stops <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-3>delaying the load
+ event</a>.<li><p>End the <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-16>synchronous section</a>, continuing the remaining steps
+ asynchronously.<li><p>Wait until the node after <var>pointer</var> is a node other than the end of
+ the list. (This step might wait forever.)<li><p>Asynchronously <a href=#await-a-stable-state id=loading-the-media-resource:await-a-stable-state-3>await a stable state</a>. The <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-17>synchronous section</a>
+ consists of all the remaining steps of this algorithm until the algorithm says the
+ <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-18>synchronous section</a> has ended. (Steps in <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-19>synchronous sections</a> are marked with ⌛.)<li><p>⌛ Set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-4>delaying-the-load-event flag</a> back to true (this
+ <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-4>delays the load event</a> again, in case it hasn't been
+ fired yet).</p>
- <li><p>⌛ Set the <code id=loading-the-media-resource:dom-media-networkstate-8><a href=#dom-media-networkstate>networkState</a></code> back to <code id=loading-the-media-resource:dom-media-network_loading-3><a href=#dom-media-network_loading>NETWORK_LOADING</a></code>.<li><p>⌛ Jump back to the <i>find next candidate</i> step above.</ol>
+ <li><p>⌛ Set the <code id=loading-the-media-resource:dom-media-networkstate-7><a href=#dom-media-networkstate>networkState</a></code> back to <code id=loading-the-media-resource:dom-media-network_loading-3><a href=#dom-media-network_loading>NETWORK_LOADING</a></code>.<li><p>⌛ Jump back to the <i>find next candidate</i> step above.</ol>
+ </dl>
+
+ <p>The <dfn id=dedicated-media-source-failure-steps>dedicated media source failure steps</dfn> are the following steps:</p>
+
+ <ol><li><p>Set the <code id=loading-the-media-resource:dom-media-error-2><a href=#dom-media-error>error</a></code> attribute to a new
+ <code id=loading-the-media-resource:mediaerror><a href=#mediaerror>MediaError</a></code> object whose <code id=loading-the-media-resource:dom-mediaerror-code><a href=#dom-mediaerror-code>code</a></code> attribute
+ is set to <code id=loading-the-media-resource:dom-mediaerror-media_err_src_not_supported><a href=#dom-mediaerror-media_err_src_not_supported>MEDIA_ERR_SRC_NOT_SUPPORTED</a></code>.<li><p><a href="#forget-the-media-element's-media-resource-specific-tracks" id="loading-the-media-resource:forget-the-media-element's-media-resource-specific-tracks-3">Forget the media element's media-resource-specific tracks</a>.<li><p>Set the element's <code id=loading-the-media-resource:dom-media-networkstate-8><a href=#dom-media-networkstate>networkState</a></code> attribute to
+ the <code id=loading-the-media-resource:dom-media-network_no_source-3><a href=#dom-media-network_no_source>NETWORK_NO_SOURCE</a></code> value.<li><p>Set the element's <a href=#show-poster-flag id=loading-the-media-resource:show-poster-flag-3>show poster flag</a> to true.<li><p><a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-6>Fire a simple event</a> named <code id=loading-the-media-resource:event-media-error><a href=#event-media-error>error</a></code> at
+ the <a href=#media-element id=loading-the-media-resource:media-element-23>media element</a>.<li><p>Set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-5>delaying-the-load-event flag</a> to false. This stops <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-5>delaying the load event</a>.</ol>
+
</ol>
- <p>The <dfn id=concept-media-load-resource>resource fetch algorithm</dfn> for a <a href=#media-element id=loading-the-media-resource:media-element-23>media
- element</a> and a given <a href=#absolute-url id=loading-the-media-resource:absolute-url-3>absolute URL</a> is as follows:</p>
+ <p>The <dfn id=concept-media-load-resource>resource fetch algorithm</dfn> for a <a href=#media-element id=loading-the-media-resource:media-element-24>media
+ element</a> and a given <a href=#absolute-url id=loading-the-media-resource:absolute-url-3>absolute URL</a> or <a href=#media-provider-object id=loading-the-media-resource:media-provider-object>media provider object</a> is as
+ follows:</p>
- <ol><li><p>Let the <var>current media resource</var> be the resource given by the
- <a href=#absolute-url id=loading-the-media-resource:absolute-url-4>absolute URL</a> passed to this algorithm. This is now the element's <a href=#media-resource id=loading-the-media-resource:media-resource-3>media
+ <ol><li><p>If the algorithm was invoked with a <a href=#url id=loading-the-media-resource:url-4>URL</a>, then let <var>mode</var> be
+ <i>remote</i>, otherwise let <var>mode</var> be <i>local</i>.<li><p>If <var>mode</var> is <i>local</i>, then let the <var>current media resource</var> be the
+ resource given by the <a href=#absolute-url id=loading-the-media-resource:absolute-url-4>absolute URL</a> passed to this algorithm; otherwise, let the
+ <var>current media resource</var> be the resource given by the <a href=#media-provider-object id=loading-the-media-resource:media-provider-object-2>media provider
+ object</a>. Either way, the <var>current media resource</var> is now the element's <a href=#media-resource id=loading-the-media-resource:media-resource-3>media
resource</a>.<li><p>Remove all <a href=#media-resource-specific-text-track id=loading-the-media-resource:media-resource-specific-text-track>media-resource-specific text
- tracks</a> from the <a href=#media-element id=loading-the-media-resource:media-element-24>media element</a>'s <a href=#list-of-pending-text-tracks id=loading-the-media-resource:list-of-pending-text-tracks>list of pending text tracks</a>, if
+ tracks</a> from the <a href=#media-element id=loading-the-media-resource:media-element-25>media element</a>'s <a href=#list-of-pending-text-tracks id=loading-the-media-resource:list-of-pending-text-tracks>list of pending text tracks</a>, if
any.</p>
- <li><p>Optionally, run the following substeps. This is the expected behavior if the user agent
- intends to not attempt to fetch the resource until the user requests it explicitly (e.g. as a way
- to implement the <code id=loading-the-media-resource:attr-media-preload><a href=#attr-media-preload>preload</a></code> attribute's <code id=loading-the-media-resource:attr-media-preload-none><a href=#attr-media-preload-none>none</a></code> keyword).</p>
- <ol><li><p>Set the <code id=loading-the-media-resource:dom-media-networkstate-9><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_idle-2><a href=#dom-media-network_idle>NETWORK_IDLE</a></code>.<li><p><a href=#queue-a-task id=loading-the-media-resource:queue-a-task-8>Queue a task</a> to <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-7>fire a simple event</a> named <code id=loading-the-media-resource:event-media-suspend><a href=#event-media-suspend>suspend</a></code> at the element.<li><p><a href=#queue-a-task id=loading-the-media-resource:queue-a-task-9>Queue a task</a> to set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-6>delaying-the-load-event flag</a>
- to false. This stops <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-6>delaying the load
- event</a>.<li><p>Wait for the task to be run.<li><p>Wait for an implementation-defined event (e.g. the user requesting that the media
- element begin playback).<li><p>Set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-7>delaying-the-load-event flag</a> back to true (this <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-7>delays the load event</a> again, in case it hasn't been fired
- yet).</p>
+ <li>
- <li><p>Set the <code id=loading-the-media-resource:dom-media-networkstate-10><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_loading-4><a href=#dom-media-network_loading>NETWORK_LOADING</a></code>.</ol>
+ <p>Run the appropriate steps from the following list:</p>
- <li>
+ <dl class=switch><dt>If <var>mode</var> is remote<dd>
- <p>Perform a <a href=#potentially-cors-enabled-fetch id=loading-the-media-resource:potentially-cors-enabled-fetch>potentially CORS-enabled fetch</a> of the <var>current media
- resource</var>'s <a href=#absolute-url id=loading-the-media-resource:absolute-url-5>absolute URL</a>, with the <i>mode</i> being the state of the
- <a href=#media-element id=loading-the-media-resource:media-element-25>media element</a>'s <code id=loading-the-media-resource:attr-media-crossorigin><a href=#attr-media-crossorigin>crossorigin</a></code> content
- attribute, the <i>origin</i> being the <a href=#origin-2 id=loading-the-media-resource:origin-2>origin</a> of the <a href=#media-element id=loading-the-media-resource:media-element-26>media element</a>'s
- <code id=loading-the-media-resource:document><a href=#document>Document</a></code>, and the <i>default origin behaviour</i> set to <i>taint</i>.</p>
+ <ol><li>
- <p>The resource obtained in this fashion, if any, contains the <a href=#media-data id=loading-the-media-resource:media-data>media data</a>. It can
- be <a href=#cors-same-origin id=loading-the-media-resource:cors-same-origin>CORS-same-origin</a> or <a href=#cors-cross-origin id=loading-the-media-resource:cors-cross-origin>CORS-cross-origin</a>; this affects whether
- subtitles referenced in the <a href=#media-data id=loading-the-media-resource:media-data-2>media data</a> are exposed in the API and, for
- <code id=loading-the-media-resource:the-video-element><a href=#the-video-element>video</a></code> elements, whether a <code id=loading-the-media-resource:the-canvas-element><a href=#the-canvas-element>canvas</a></code> gets tainted when the video is drawn
- on it.</p>
+ <p>Optionally, run the following substeps. This is the expected behavior if the user agent
+ intends to not attempt to fetch the resource until the user requests it explicitly (e.g. as
+ a way to implement the <code id=loading-the-media-resource:attr-media-preload><a href=#attr-media-preload>preload</a></code> attribute's <code id=loading-the-media-resource:attr-media-preload-none><a href=#attr-media-preload-none>none</a></code> keyword).</p>
- <p>While the load is not suspended (see below), every 350ms (±200ms) or for every byte
- received, whichever is <em>least</em> frequent, <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-10>queue a task</a> to <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-8>fire a simple
- event</a> named <code id=loading-the-media-resource:event-media-progress><a href=#event-media-progress>progress</a></code> at the element.</p>
+ <ol><li><p>Set the <code id=loading-the-media-resource:dom-media-networkstate-9><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_idle-2><a href=#dom-media-network_idle>NETWORK_IDLE</a></code>.<li><p><a href=#queue-a-task id=loading-the-media-resource:queue-a-task-9>Queue a task</a> to <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-7>fire a simple event</a> named <code id=loading-the-media-resource:event-media-suspend><a href=#event-media-suspend>suspend</a></code> at the element.<li><p><a href=#queue-a-task id=loading-the-media-resource:queue-a-task-10>Queue a task</a> to set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-6>delaying-the-load-event flag</a>
+ to false. This stops <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-6>delaying the load
+ event</a>.<li><p>Wait for the task to be run.<li><p>Wait for an implementation-defined event (e.g. the user requesting that the media
+ element begin playback).<li><p>Set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-7>delaying-the-load-event flag</a> back to true (this <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-7>delays the load event</a> again, in case it hasn't been fired
+ yet).</p>
- <p>The <dfn id=stall-timeout>stall timeout</dfn> is a user-agent defined length of time, which should be about
- three seconds. When a <a href=#media-element id=loading-the-media-resource:media-element-27>media element</a> that is actively attempting to obtain
- <a href=#media-data id=loading-the-media-resource:media-data-3>media data</a> has failed to receive any data for a duration equal to the <a href=#stall-timeout id=loading-the-media-resource:stall-timeout>stall
- timeout</a>, the user agent must <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-11>queue a task</a> to <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-9>fire a simple
- event</a> named <code id=loading-the-media-resource:event-media-stalled><a href=#event-media-stalled>stalled</a></code> at the element.</p>
+ <li><p>Set the <code id=loading-the-media-resource:dom-media-networkstate-10><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_loading-4><a href=#dom-media-network_loading>NETWORK_LOADING</a></code>.</ol>
- <p>User agents may allow users to selectively block or slow <a href=#media-data id=loading-the-media-resource:media-data-4>media data</a> downloads.
- When a <a href=#media-element id=loading-the-media-resource:media-element-28>media element</a>'s download has been blocked altogether, the user agent must
- act as if it was stalled (as opposed to acting as if the connection was closed). The rate of the
- download may also be throttled automatically by the user agent, e.g. to balance the download
- with other connections sharing the same bandwidth.</p>
+ <li>
- <p id=resourceSuspend>User agents may decide to not download more content at any time, e.g.
- after buffering five minutes of a one hour media resource, while waiting for the user to decide
- whether to play the resource or not, while waiting for user input in an interactive resource, or
- when the user navigates away from the page. When a <a href=#media-element id=loading-the-media-resource:media-element-29>media element</a>'s download has
- been suspended, the user agent must <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-12>queue a task</a>, to set the <code id=loading-the-media-resource:dom-media-networkstate-11><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_idle-3><a href=#dom-media-network_idle>NETWORK_IDLE</a></code> and <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-10>fire a simple event</a> named
- <code id=loading-the-media-resource:event-media-suspend-2><a href=#event-media-suspend>suspend</a></code> at the element. If and when downloading of the
- resource resumes, the user agent must <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-13>queue a task</a> to set the <code id=loading-the-media-resource:dom-media-networkstate-12><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_loading-5><a href=#dom-media-network_loading>NETWORK_LOADING</a></code>. Between the queuing of these tasks,
- the load is suspended (so <code id=loading-the-media-resource:event-media-progress-2><a href=#event-media-progress>progress</a></code> events don't fire,
- as described above).</p>
+ <p>Perform a <a href=#potentially-cors-enabled-fetch id=loading-the-media-resource:potentially-cors-enabled-fetch>potentially CORS-enabled fetch</a> of the <var>current media
+ resource</var>'s <a href=#absolute-url id=loading-the-media-resource:absolute-url-5>absolute URL</a>, with the <i>mode</i> being the state of the
+ <a href=#media-element id=loading-the-media-resource:media-element-26>media element</a>'s <code id=loading-the-media-resource:attr-media-crossorigin><a href=#attr-media-crossorigin>crossorigin</a></code> content
+ attribute, the <i>origin</i> being the <a href=#origin-2 id=loading-the-media-resource:origin-2>origin</a> of the <a href=#media-element id=loading-the-media-resource:media-element-27>media element</a>'s
+ <code id=loading-the-media-resource:document><a href=#document>Document</a></code>, and the <i>default origin behaviour</i> set to <i>taint</i>.</p>
- <p class=note>The <code id=loading-the-media-resource:attr-media-preload-2><a href=#attr-media-preload>preload</a></code> attribute provides a hint
- regarding how much buffering the author thinks is advisable, even in the absence of the <code id=loading-the-media-resource:attr-media-autoplay><a href=#attr-media-autoplay>autoplay</a></code> attribute.</p>
+ <p>The resource obtained in this fashion, if any, contains the <a href=#media-data id=loading-the-media-resource:media-data>media data</a>. It can
+ be <a href=#cors-same-origin id=loading-the-media-resource:cors-same-origin>CORS-same-origin</a> or <a href=#cors-cross-origin id=loading-the-media-resource:cors-cross-origin>CORS-cross-origin</a>; this affects whether
+ subtitles referenced in the <a href=#media-data id=loading-the-media-resource:media-data-2>media data</a> are exposed in the API and, for
+ <code id=loading-the-media-resource:the-video-element><a href=#the-video-element>video</a></code> elements, whether a <code id=loading-the-media-resource:the-canvas-element><a href=#the-canvas-element>canvas</a></code> gets tainted when the video is drawn
+ on it.</p>
- <p>When a user agent decides to completely stall a download, e.g. if it is waiting until the
- user starts playback before downloading any further content, the user agent must <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-14>queue a
- task</a> to set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-8>delaying-the-load-event flag</a> to false. This stops
- <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-8>delaying the load event</a>.</p>
+ <p>The <dfn id=stall-timeout>stall timeout</dfn> is a user-agent defined length of time, which should be about
+ three seconds. When a <a href=#media-element id=loading-the-media-resource:media-element-28>media element</a> that is actively attempting to obtain
+ <a href=#media-data id=loading-the-media-resource:media-data-3>media data</a> has failed to receive any data for a duration equal to the <a href=#stall-timeout id=loading-the-media-resource:stall-timeout>stall
+ timeout</a>, the user agent must <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-11>queue a task</a> to <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-8>fire a simple
+ event</a> named <code id=loading-the-media-resource:event-media-stalled><a href=#event-media-stalled>stalled</a></code> at the element.</p>
- <p>The user agent may use whatever means necessary to fetch the resource (within the constraints
- put forward by this and other specifications); for example, reconnecting to the server in the
- face of network errors, using HTTP range retrieval requests, or switching to a streaming
- protocol. The user agent must consider a resource erroneous only if it has given up trying to
- fetch it.</p>
+ <p>User agents may allow users to selectively block or slow <a href=#media-data id=loading-the-media-resource:media-data-4>media data</a> downloads.
+ When a <a href=#media-element id=loading-the-media-resource:media-element-29>media element</a>'s download has been blocked altogether, the user agent must
+ act as if it was stalled (as opposed to acting as if the connection was closed). The rate of the
+ download may also be throttled automatically by the user agent, e.g. to balance the download
+ with other connections sharing the same bandwidth.</p>
- <p>To determine the format of the <a href=#media-resource id=loading-the-media-resource:media-resource-4>media resource</a>, the user agent must use the
- <span>rules for sniffing audio and video specifically</span>.</p>
+ <p id=resourceSuspend>User agents may decide to not download more content at any time, e.g.
+ after buffering five minutes of a one hour media resource, while waiting for the user to decide
+ whether to play the resource or not, while waiting for user input in an interactive resource, or
+ when the user navigates away from the page. When a <a href=#media-element id=loading-the-media-resource:media-element-30>media element</a>'s download has
+ been suspended, the user agent must <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-12>queue a task</a>, to set the <code id=loading-the-media-resource:dom-media-networkstate-11><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_idle-3><a href=#dom-media-network_idle>NETWORK_IDLE</a></code> and <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-9>fire a simple event</a> named
+ <code id=loading-the-media-resource:event-media-suspend-2><a href=#event-media-suspend>suspend</a></code> at the element. If and when downloading of the
+ resource resumes, the user agent must <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-13>queue a task</a> to set the <code id=loading-the-media-resource:dom-media-networkstate-12><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_loading-5><a href=#dom-media-network_loading>NETWORK_LOADING</a></code>. Between the queuing of these tasks,
+ the load is suspended (so <code id=loading-the-media-resource:event-media-progress><a href=#event-media-progress>progress</a></code> events don't fire,
+ as described above).</p>
- <p>The <a href=#networking-task-source id=loading-the-media-resource:networking-task-source>networking task source</a> <a href=#concept-task id=loading-the-media-resource:concept-task-5>tasks</a> to process
- the data as it is being fetched must each immediately <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-15>queue a task</a> to run the first
- appropriate steps from the following list. (A new task is used for this so that the work
- described below occurs relative to the <a href=#media-element-event-task-source id=loading-the-media-resource:media-element-event-task-source-2>media element event task source</a> rather than
- the <a href=#networking-task-source id=loading-the-media-resource:networking-task-source-2>networking task source</a>.)</p>
+ <p class=note>The <code id=loading-the-media-resource:attr-media-preload-2><a href=#attr-media-preload>preload</a></code> attribute provides a hint
+ regarding how much buffering the author thinks is advisable, even in the absence of the <code id=loading-the-media-resource:attr-media-autoplay><a href=#attr-media-autoplay>autoplay</a></code> attribute.</p>
- <dl class=switch><dt>If the <a href=#media-data id=loading-the-media-resource:media-data-5>media data</a> cannot be fetched at all, due to network errors, causing the
- user agent to give up trying to fetch the resource<dt>If the <a href=#media-data id=loading-the-media-resource:media-data-6>media data</a> can be fetched but is found by inspection to be in an
+ <p>When a user agent decides to completely stall a download, e.g. if it is waiting until the
+ user starts playback before downloading any further content, the user agent must <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-14>queue a
+ task</a> to set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-8>delaying-the-load-event flag</a> to false. This stops
+ <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-8>delaying the load event</a>.</p>
+
+ <p>The user agent may use whatever means necessary to fetch the resource (within the constraints
+ put forward by this and other specifications); for example, reconnecting to the server in the
+ face of network errors, using HTTP range retrieval requests, or switching to a streaming
+ protocol. The user agent must consider a resource erroneous only if it has given up trying to
+ fetch it.</p>
+
+ <p>To determine the format of the <a href=#media-resource id=loading-the-media-resource:media-resource-4>media resource</a>, the user agent must use the
+ <span>rules for sniffing audio and video specifically</span>.</p>
+
+ <p>While the load is not suspended (see below), every 350ms (±200ms) or for every byte
+ received, whichever is <em>least</em> frequent, <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-15>queue a task</a> to <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-10>fire a simple
+ event</a> named <code id=loading-the-media-resource:event-media-progress-2><a href=#event-media-progress>progress</a></code> at the element.</p>
+
+ <p>The <a href=#networking-task-source id=loading-the-media-resource:networking-task-source>networking task source</a> <a href=#concept-task id=loading-the-media-resource:concept-task-6>tasks</a> to
+ process the data as it is being fetched must each immediately <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-16>queue a task</a> to
+ run the first appropriate steps from the <a href=#media-data-processing-steps-list id=loading-the-media-resource:media-data-processing-steps-list>media data processing steps list</a>
+ below. (A new task is used for this so that the work described below occurs relative to the
+ <a href=#media-element-event-task-source id=loading-the-media-resource:media-element-event-task-source-2>media element event task source</a> rather than the <a href=#networking-task-source id=loading-the-media-resource:networking-task-source-2>networking task
+ source</a>.)</p>
+
+ <p>When the <a href=#networking-task-source id=loading-the-media-resource:networking-task-source-3>networking task source</a> has <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-17>queued</a> the
+ last <a href=#concept-task id=loading-the-media-resource:concept-task-7>task</a> as part of <a href=#fetch id=loading-the-media-resource:fetch>fetching</a> the
+ <a href=#media-resource id=loading-the-media-resource:media-resource-5>media resource</a> (i.e. once the download has completed), if the fetching process
+ completes without errors, including decoding the media data, and if all of the data is available
+ to the user agent without network access, then, the user agent must move on to the <i>final step</i> below.
+ This might never happen, e.g. when streaming an infinite resource such as Web radio, or if the
+ resource is longer than the user agent's ability to cache data.</p>
+
+ <p>While the user agent might still need network access to obtain parts of the <a href=#media-resource id=loading-the-media-resource:media-resource-6>media
+ resource</a>, the user agent must remain on this step.</p>
+
+ <p class=example>For example, if the user agent has discarded the first half of a video, the
+ user agent will remain at this step even once the <a href=#ended-playback id=loading-the-media-resource:ended-playback>playback has
+ ended</a>, because there is always the chance the user will seek back to the start. In fact,
+ in this situation, once <a href=#ended-playback id=loading-the-media-resource:ended-playback-2>playback has ended</a>, the user agent
+ will end up firing a <code id=loading-the-media-resource:event-media-suspend-3><a href=#event-media-suspend>suspend</a></code> event, as described
+ earlier.</p>
+
+ </ol>
+
+ <dt>Otherwise (<var>mode</var> is <i>local</i>)<dd>
+
+ <p>The resource described by the <var>current media resource</var>, if any, contains the
+ <a href=#media-data id=loading-the-media-resource:media-data-5>media data</a>. It is <a href=#cors-same-origin id=loading-the-media-resource:cors-same-origin-2>CORS-same-origin</a>. </p>
+
+ <p>If the <var>current media resource</var> is a raw data stream (e.g. from a
+ <code id=loading-the-media-resource:file><a href=#file>File</a></code> object), then to determine the format of the <a href=#media-resource id=loading-the-media-resource:media-resource-7>media resource</a>,
+ the user agent must use the <span>rules for sniffing audio and video specifically</span>.
+ Otherwise, if the data stream is pre-decoded, then the format is the format given by the
+ relevant specification.</p>
+
+ <p>Whenever new data for the <var>current media resource</var> becomes available, <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-18>queue
+ a task</a> to run the first appropriate steps from the <a href=#media-data-processing-steps-list id=loading-the-media-resource:media-data-processing-steps-list-2>media data processing steps
+ list</a> below.</p>
+
+ <p>When the <var>current media resource</var> is permanently exhausted (e.g. all the bytes of
+ a <code id=loading-the-media-resource:blob><a href=#blob>Blob</a></code> have been processed), if there were no decoding errors, then the user
+ agent must move on to the <i>final step</i> below. This might never happen, e.g. if the
+ <var>current media resource</var> is a <code id=loading-the-media-resource:mediastream><a href=#mediastream>MediaStream</a></code>.</p>
+
+ </dl>
+
+ <p>The <dfn id=media-data-processing-steps-list>media data processing steps list</dfn> is as follows:</p>
+
+ <dl class=switch><dt>If the <a href=#media-data id=loading-the-media-resource:media-data-6>media data</a> cannot be fetched at all, due to network errors, causing the
+ user agent to give up trying to fetch the resource<dt>If the <a href=#media-data id=loading-the-media-resource:media-data-7>media data</a> can be fetched but is found by inspection to be in an
unsupported format, or can otherwise not be rendered at all<dd>
<p>DNS errors, HTTP 4xx and 5xx errors (and equivalents in other protocols), and other fatal
@@ -22384,13 +22491,13 @@
</ol>
- <dt id=found-another-audio-track>If the <a href=#media-resource id=loading-the-media-resource:media-resource-5>media resource</a> is found to have an audio
+ <dt id=found-another-audio-track>If the <a href=#media-resource id=loading-the-media-resource:media-resource-8>media resource</a> is found to have an audio
track<dd>
- <ol><li><p>Create an <code id=loading-the-media-resource:audiotrack><a href=#audiotrack>AudioTrack</a></code> object to represent the audio track.<li><p>Update the <a href=#media-element id=loading-the-media-resource:media-element-30>media element</a>'s <code id=loading-the-media-resource:dom-media-audiotracks><a href=#dom-media-audiotracks>audioTracks</a></code> attribute's <code id=loading-the-media-resource:audiotracklist><a href=#audiotracklist>AudioTrackList</a></code>
+ <ol><li><p>Create an <code id=loading-the-media-resource:audiotrack><a href=#audiotrack>AudioTrack</a></code> object to represent the audio track.<li><p>Update the <a href=#media-element id=loading-the-media-resource:media-element-31>media element</a>'s <code id=loading-the-media-resource:dom-media-audiotracks><a href=#dom-media-audiotracks>audioTracks</a></code> attribute's <code id=loading-the-media-resource:audiotracklist><a href=#audiotracklist>AudioTrackList</a></code>
object with the new <code id=loading-the-media-resource:audiotrack-2><a href=#audiotrack>AudioTrack</a></code> object.<li><p>Let <var>enable</var> be <i>unknown</i>.<li>
- <p>If either the <a href=#media-resource id=loading-the-media-resource:media-resource-6>media resource</a> or the address of the <var>current
+ <p>If either the <a href=#media-resource id=loading-the-media-resource:media-resource-9>media resource</a> or the address of the <var>current
media resource</var> indicate a particular set of audio tracks to enable, or if the user
agent has information that would facilitate the selection of specific audio tracks to
improve the user's experience, then: if this audio track is one of the ones to enable, then
@@ -22401,20 +22508,20 @@
identifier syntax, but it could also be triggered e.g. by the user agent selecting a 5.1
surround sound audio track over a stereo audio track. <a href=#refsMEDIAFRAG>[MEDIAFRAG]</a></p>
- <li><p>If <var>enable</var> is still <i>unknown</i>, then, if the <a href=#media-element id=loading-the-media-resource:media-element-31>media
+ <li><p>If <var>enable</var> is still <i>unknown</i>, then, if the <a href=#media-element id=loading-the-media-resource:media-element-32>media
element</a> does not yet have an <a href=#dom-audiotrack-enabled id=loading-the-media-resource:dom-audiotrack-enabled>enabled</a>
audio track, then set <var>enable</var> to <i>true</i>, otherwise, set <var>enable</var> to <i>false</i>.<li><p>If <var>enable</var> is <i>true</i>, then enable this audio track,
otherwise, do not enable this audio track.<li><p><a href=#concept-event-fire id=loading-the-media-resource:concept-event-fire>Fire</a> a <a href=#concept-events-trusted id=loading-the-media-resource:concept-events-trusted>trusted</a> event with the name <code id=loading-the-media-resource:event-media-addtrack><a href=#event-media-addtrack>addtrack</a></code>, that does not bubble and is not cancelable,
and that uses the <code id=loading-the-media-resource:trackevent><a href=#trackevent>TrackEvent</a></code> interface, with the <code id=loading-the-media-resource:dom-trackevent-track><a href=#dom-trackevent-track>track</a></code> attribute initialised to the new
<code id=loading-the-media-resource:audiotrack-3><a href=#audiotrack>AudioTrack</a></code> object, at this <code id=loading-the-media-resource:audiotracklist-2><a href=#audiotracklist>AudioTrackList</a></code> object.</ol>
- <dt id=found-another-video-track>If the <a href=#media-resource id=loading-the-media-resource:media-resource-7>media resource</a> is found to have a video
+ <dt id=found-another-video-track>If the <a href=#media-resource id=loading-the-media-resource:media-resource-10>media resource</a> is found to have a video
track<dd>
- <ol><li><p>Create a <code id=loading-the-media-resource:videotrack><a href=#videotrack>VideoTrack</a></code> object to represent the video track.<li><p>Update the <a href=#media-element id=loading-the-media-resource:media-element-32>media element</a>'s <code id=loading-the-media-resource:dom-media-videotracks><a href=#dom-media-videotracks>videoTracks</a></code> attribute's <code id=loading-the-media-resource:videotracklist><a href=#videotracklist>VideoTrackList</a></code>
+ <ol><li><p>Create a <code id=loading-the-media-resource:videotrack><a href=#videotrack>VideoTrack</a></code> object to represent the video track.<li><p>Update the <a href=#media-element id=loading-the-media-resource:media-element-33>media element</a>'s <code id=loading-the-media-resource:dom-media-videotracks><a href=#dom-media-videotracks>videoTracks</a></code> attribute's <code id=loading-the-media-resource:videotracklist><a href=#videotracklist>VideoTrackList</a></code>
object with the new <code id=loading-the-media-resource:videotrack-2><a href=#videotrack>VideoTrack</a></code> object.<li><p>Let <var>enable</var> be <i>unknown</i>.<li>
- <p>If either the <a href=#media-resource id=loading-the-media-resource:media-resource-8>media resource</a> or the address of the <var>current
+ <p>If either the <a href=#media-resource id=loading-the-media-resource:media-resource-11>media resource</a> or the address of the <var>current
media resource</var> indicate a particular set of video tracks to enable, or if the user
agent has information that would facilitate the selection of specific video tracks to
improve the user's experience, then: if this video track is the first such video track, then
@@ -22424,7 +22531,7 @@
<p class=example>This could again be triggered by <cite>Media Fragments URI</cite>
fragment identifier syntax.</p>
- <li><p>If <var>enable</var> is still <i>unknown</i>, then, if the <a href=#media-element id=loading-the-media-resource:media-element-33>media
+ <li><p>If <var>enable</var> is still <i>unknown</i>, then, if the <a href=#media-element id=loading-the-media-resource:media-element-34>media
element</a> does not yet have a <a href=#dom-videotrack-selected id=loading-the-media-resource:dom-videotrack-selected>selected</a>
video track, then set <var>enable</var> to <i>true</i>, otherwise, set <var>enable</var> to <i>false</i>.<li><p>If <var>enable</var> is <i>true</i>, then select this track and unselect any
previously selected video tracks, otherwise, do not select this video track. If other tracks
@@ -22432,8 +22539,8 @@
and that uses the <code id=loading-the-media-resource:trackevent-2><a href=#trackevent>TrackEvent</a></code> interface, with the <code id=loading-the-media-resource:dom-trackevent-track-2><a href=#dom-trackevent-track>track</a></code> attribute initialised to the new
<code id=loading-the-media-resource:videotrack-3><a href=#videotrack>VideoTrack</a></code> object, at this <code id=loading-the-media-resource:videotracklist-2><a href=#videotracklist>VideoTrackList</a></code> object.</ol>
- <dt id=getting-media-metadata>Once enough of the <a href=#media-data id=loading-the-media-resource:media-data-7>media data</a> has been fetched to
- determine the duration of the <a href=#media-resource id=loading-the-media-resource:media-resource-9>media resource</a>, its dimensions, and other
+ <dt id=getting-media-metadata>Once enough of the <a href=#media-data id=loading-the-media-resource:media-data-8>media data</a> has been fetched to
+ determine the duration of the <a href=#media-resource id=loading-the-media-resource:media-resource-12>media resource</a>, its dimensions, and other
metadata<dd>
<p>This indicates that the resource is usable. The user agent must follow these substeps:</p>
@@ -22442,13 +22549,13 @@
<p><a href=#defineTimeline id=loading-the-media-resource:defineTimeline>Establish the media timeline</a> for the purposes of the <a href=#current-playback-position id=loading-the-media-resource:current-playback-position-2>current playback
position</a>, the <a href=#earliest-possible-position id=loading-the-media-resource:earliest-possible-position>earliest possible position</a>, and the <a href=#initial-playback-position id=loading-the-media-resource:initial-playback-position-2>initial playback
- position</a>, based on the <a href=#media-data id=loading-the-media-resource:media-data-8>media data</a>.</p>
+ position</a>, based on the <a href=#media-data id=loading-the-media-resource:media-data-9>media data</a>.</p>
<li>
<p>Update the <a href=#timeline-offset id=loading-the-media-resource:timeline-offset-2>timeline offset</a> to the date and time that corresponds to the zero
time in the <a href=#media-timeline id=loading-the-media-resource:media-timeline>media timeline</a> established in the previous step, if any. If no
- explicit time and date is given by the <a href=#media-resource id=loading-the-media-resource:media-resource-10>media resource</a>, the <a href=#timeline-offset id=loading-the-media-resource:timeline-offset-3>timeline
+ explicit time and date is given by the <a href=#media-resource id=loading-the-media-resource:media-resource-13>media resource</a>, the <a href=#timeline-offset id=loading-the-media-resource:timeline-offset-3>timeline
offset</a> must be set to Not-a-Number (NaN).</p>
<li><p>Set the <a href=#current-playback-position id=loading-the-media-resource:current-playback-position-3>current playback position</a> and the <a href=#official-playback-position id=loading-the-media-resource:official-playback-position-3>official playback
@@ -22458,14 +22565,14 @@
the last frame of the resource, if known, on the <a href=#media-timeline id=loading-the-media-resource:media-timeline-2>media timeline</a> established
above. If it is not known (e.g. a stream that is in principle infinite), update the <code id=loading-the-media-resource:dom-media-duration-3><a href=#dom-media-duration>duration</a></code> attribute to the value positive Infinity.</p>
- <p class=note>The user agent <a href=#durationChange>will</a> <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-16>queue a task</a>
+ <p class=note>The user agent <a href=#durationChange>will</a> <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-19>queue a task</a>
to <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-11>fire a simple event</a> named <code id=loading-the-media-resource:event-media-durationchange-2><a href=#event-media-durationchange>durationchange</a></code> at the element at this point.</p>
<li>
- <p>For <code id=loading-the-media-resource:the-video-element-2><a href=#the-video-element>video</a></code> elements, set the <code id=loading-the-media-resource:dom-video-videowidth><a href=#dom-video-videowidth>videoWidth</a></code> and <code id=loading-the-media-resource:dom-video-videoheight><a href=#dom-video-videoheight>videoHeight</a></code> attributes, and <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-17>queue a task</a>
+ <p>For <code id=loading-the-media-resource:the-video-element-2><a href=#the-video-element>video</a></code> elements, set the <code id=loading-the-media-resource:dom-video-videowidth><a href=#dom-video-videowidth>videoWidth</a></code> and <code id=loading-the-media-resource:dom-video-videoheight><a href=#dom-video-videoheight>videoHeight</a></code> attributes, and <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-20>queue a task</a>
to <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-12>fire a simple event</a> named <code id=loading-the-media-resource:event-media-resize><a href=#event-media-resize>resize</a></code> at
- the <a href=#media-element id=loading-the-media-resource:media-element-34>media element</a>.</p>
+ the <a href=#media-element id=loading-the-media-resource:media-element-35>media element</a>.</p>
<p class=note>Further <code id=loading-the-media-resource:event-media-resize-2><a href=#event-media-resize>resize</a></code> events will be fired
if the dimensions subsequently change.</p>
@@ -22479,11 +22586,11 @@
- <li><p>Let <var>jumped</var> be false.<li><p>If the <a href=#media-element id=loading-the-media-resource:media-element-35>media element</a>'s <a href=#default-playback-start-position id=loading-the-media-resource:default-playback-start-position>default playback start position</a> is
- greater than zero, then <a href=#dom-media-seek id=loading-the-media-resource:dom-media-seek>seek</a> to that time, and let <var>jumped</var> be true.<li><p>Let the <a href=#media-element id=loading-the-media-resource:media-element-36>media element</a>'s <a href=#default-playback-start-position id=loading-the-media-resource:default-playback-start-position-2>default playback
+ <li><p>Let <var>jumped</var> be false.<li><p>If the <a href=#media-element id=loading-the-media-resource:media-element-36>media element</a>'s <a href=#default-playback-start-position id=loading-the-media-resource:default-playback-start-position>default playback start position</a> is
+ greater than zero, then <a href=#dom-media-seek id=loading-the-media-resource:dom-media-seek>seek</a> to that time, and let <var>jumped</var> be true.<li><p>Let the <a href=#media-element id=loading-the-media-resource:media-element-37>media element</a>'s <a href=#default-playback-start-position id=loading-the-media-resource:default-playback-start-position-2>default playback
start position</a> be zero.<li>
- <p>If either the <a href=#media-resource id=loading-the-media-resource:media-resource-11>media resource</a> or the address of the <var>current
+ <p>If either the <a href=#media-resource id=loading-the-media-resource:media-resource-14>media resource</a> or the address of the <var>current
media resource</var> indicate a particular start time, then set the <a href=#initial-playback-position id=loading-the-media-resource:initial-playback-position-3>initial playback
position</a> to that time and, if <var>jumped</var> is still false, <a href=#dom-media-seek id=loading-the-media-resource:dom-media-seek-2>seek</a> to that time and let <var>jumped</var> be
true.</p>
@@ -22494,14 +22601,14 @@
<li><p>If there is no <a href=#dom-audiotrack-enabled id=loading-the-media-resource:dom-audiotrack-enabled-2>enabled</a> audio track, then
enable an audio track. This <a href=#toggle-audio-track>will cause a <code>change</code> event to be fired</a>.<li><p>If there is no <a href=#dom-videotrack-selected id=loading-the-media-resource:dom-videotrack-selected-2>selected</a> video track,
- then select a video track. This <a href=#toggle-video-track>will cause a <code>change</code> event to be fired</a>.<li><p>If the <a href=#media-element id=loading-the-media-resource:media-element-37>media element</a> has a <a href=#current-media-controller id=loading-the-media-resource:current-media-controller>current media controller</a>, then:
+ then select a video track. This <a href=#toggle-video-track>will cause a <code>change</code> event to be fired</a>.<li><p>If the <a href=#media-element id=loading-the-media-resource:media-element-38>media element</a> has a <a href=#current-media-controller id=loading-the-media-resource:current-media-controller>current media controller</a>, then:
if <var>jumped</var> is true and the <a href=#initial-playback-position id=loading-the-media-resource:initial-playback-position-4>initial playback position</a>,
relative to the <a href=#current-media-controller id=loading-the-media-resource:current-media-controller-2>current media controller</a>'s timeline, is greater than the
<a href=#current-media-controller id=loading-the-media-resource:current-media-controller-3>current media controller</a>'s <a href=#media-controller-position id=loading-the-media-resource:media-controller-position>media controller position</a>, then
- <a href=#seek-the-media-controller id=loading-the-media-resource:seek-the-media-controller>seek the media controller</a> to the <a href=#media-element id=loading-the-media-resource:media-element-38>media element</a>'s <a href=#initial-playback-position id=loading-the-media-resource:initial-playback-position-5>initial
+ <a href=#seek-the-media-controller id=loading-the-media-resource:seek-the-media-controller>seek the media controller</a> to the <a href=#media-element id=loading-the-media-resource:media-element-39>media element</a>'s <a href=#initial-playback-position id=loading-the-media-resource:initial-playback-position-5>initial
playback position</a>, relative to the <a href=#current-media-controller id=loading-the-media-resource:current-media-controller-4>current media controller</a>'s timeline;
- otherwise, <a href=#dom-media-seek id=loading-the-media-resource:dom-media-seek-3>seek</a> the <a href=#media-element id=loading-the-media-resource:media-element-39>media element</a> to the
- <a href=#media-controller-position id=loading-the-media-resource:media-controller-position-2>media controller position</a>, relative to the <a href=#media-element id=loading-the-media-resource:media-element-40>media element</a>'s
+ otherwise, <a href=#dom-media-seek id=loading-the-media-resource:dom-media-seek-3>seek</a> the <a href=#media-element id=loading-the-media-resource:media-element-40>media element</a> to the
+ <a href=#media-controller-position id=loading-the-media-resource:media-controller-position-2>media controller position</a>, relative to the <a href=#media-element id=loading-the-media-resource:media-element-41>media element</a>'s
timeline.</ol>
<p>Once the <code id=loading-the-media-resource:dom-media-readystate-4><a href=#dom-media-readystate>readyState</a></code> attribute reaches <code id=loading-the-media-resource:dom-media-have_current_data><a href=#dom-media-have_current_data>HAVE_CURRENT_DATA</a></code>, <a href=#fire-loadeddata>after
@@ -22509,54 +22616,54 @@
element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-9>delaying-the-load-event flag</a> to false. This stops <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-9>delaying the load event</a>.</p>
<p class=note>A user agent that is attempting to reduce network usage while still fetching
- the metadata for each <a href=#media-resource id=loading-the-media-resource:media-resource-12>media resource</a> would also stop buffering at this point,
+ the metadata for each <a href=#media-resource id=loading-the-media-resource:media-resource-15>media resource</a> would also stop buffering at this point,
following <a href=#resourceSuspend>the rules described previously</a>, which involve the
- <code id=loading-the-media-resource:dom-media-networkstate-13><a href=#dom-media-networkstate>networkState</a></code> attribute switching to the <code id=loading-the-media-resource:dom-media-network_idle-4><a href=#dom-media-network_idle>NETWORK_IDLE</a></code> value and a <code id=loading-the-media-resource:event-media-suspend-3><a href=#event-media-suspend>suspend</a></code> event firing.</p>
+ <code id=loading-the-media-resource:dom-media-networkstate-13><a href=#dom-media-networkstate>networkState</a></code> attribute switching to the <code id=loading-the-media-resource:dom-media-network_idle-4><a href=#dom-media-network_idle>NETWORK_IDLE</a></code> value and a <code id=loading-the-media-resource:event-media-suspend-4><a href=#event-media-suspend>suspend</a></code> event firing.</p>
<p class=note>The user agent is <em>required</em> to determine the duration of the
- <a href=#media-resource id=loading-the-media-resource:media-resource-13>media resource</a> and go through this step before playing.</p>
+ <a href=#media-resource id=loading-the-media-resource:media-resource-16>media resource</a> and go through this step before playing.</p>
- <dt>Once the entire <a href=#media-resource id=loading-the-media-resource:media-resource-14>media resource</a> has been <a href=#fetch id=loading-the-media-resource:fetch>fetched</a>
+ <dt>Once the entire <a href=#media-resource id=loading-the-media-resource:media-resource-17>media resource</a> has been <a href=#fetch id=loading-the-media-resource:fetch-2>fetched</a>
(but potentially before any of it has been decoded)<dd>
<p><a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-13>Fire a simple event</a> named <code id=loading-the-media-resource:event-media-progress-3><a href=#event-media-progress>progress</a></code>
- at the <a href=#media-element id=loading-the-media-resource:media-element-41>media element</a>.</p>
+ at the <a href=#media-element id=loading-the-media-resource:media-element-42>media element</a>.</p>
<p>Set the <code id=loading-the-media-resource:dom-media-networkstate-14><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_idle-5><a href=#dom-media-network_idle>NETWORK_IDLE</a></code> and <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-14>fire a simple event</a> named
- <code id=loading-the-media-resource:event-media-suspend-4><a href=#event-media-suspend>suspend</a></code> at the <a href=#media-element id=loading-the-media-resource:media-element-42>media element</a>.</p>
+ <code id=loading-the-media-resource:event-media-suspend-5><a href=#event-media-suspend>suspend</a></code> at the <a href=#media-element id=loading-the-media-resource:media-element-43>media element</a>.</p>
- <p>If the user agent ever discards any <a href=#media-data id=loading-the-media-resource:media-data-9>media data</a> and then needs to resume the
- network activity to obtain it again, then it must <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-18>queue a task</a> to set the <code id=loading-the-media-resource:dom-media-networkstate-15><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_loading-6><a href=#dom-media-network_loading>NETWORK_LOADING</a></code>.</p>
+ <p>If the user agent ever discards any <a href=#media-data id=loading-the-media-resource:media-data-10>media data</a> and then needs to resume the
+ network activity to obtain it again, then it must <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-21>queue a task</a> to set the <code id=loading-the-media-resource:dom-media-networkstate-15><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_loading-6><a href=#dom-media-network_loading>NETWORK_LOADING</a></code>.</p>
- <p class=note>If the user agent can keep the <a href=#media-resource id=loading-the-media-resource:media-resource-15>media resource</a> loaded, then the
- algorithm will continue to its final step below, which aborts the algorithm.</p>
+ <p class=note>If the user agent can keep the <a href=#media-resource id=loading-the-media-resource:media-resource-18>media resource</a> loaded, then the
+ algorithm will continue to its <i>final step</i> below, which aborts the algorithm.</p>
- <dt>If the connection is interrupted after some <a href=#media-data id=loading-the-media-resource:media-data-10>media data</a> has been received,
+ <dt>If the connection is interrupted after some <a href=#media-data id=loading-the-media-resource:media-data-11>media data</a> has been received,
causing the user agent to give up trying to fetch the resource<dd>
- <p>Fatal network errors that occur after the user agent has established whether the <var>current media resource</var> is usable (i.e. once the <a href=#media-element id=loading-the-media-resource:media-element-43>media element</a>'s
+ <p>Fatal network errors that occur after the user agent has established whether the <var>current media resource</var> is usable (i.e. once the <a href=#media-element id=loading-the-media-resource:media-element-44>media element</a>'s
<code id=loading-the-media-resource:dom-media-readystate-5><a href=#dom-media-readystate>readyState</a></code> attribute is no longer <code id=loading-the-media-resource:dom-media-have_nothing-2><a href=#dom-media-have_nothing>HAVE_NOTHING</a></code>) must cause the user agent to execute the
following steps:</p>
<ol><li><p>The user agent should cancel the fetching process.<li><p>Set the <code id=loading-the-media-resource:dom-media-error-3><a href=#dom-media-error>error</a></code> attribute to a new
<code id=loading-the-media-resource:mediaerror-2><a href=#mediaerror>MediaError</a></code> object whose <code id=loading-the-media-resource:dom-mediaerror-code-2><a href=#dom-mediaerror-code>code</a></code> attribute
is set to <code id=loading-the-media-resource:dom-mediaerror-media_err_network><a href=#dom-mediaerror-media_err_network>MEDIA_ERR_NETWORK</a></code>.<li><p><a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-15>Fire a simple event</a> named <code id=loading-the-media-resource:event-media-error-2><a href=#event-media-error>error</a></code> at
- the <a href=#media-element id=loading-the-media-resource:media-element-44>media element</a>.<li><p>Set the element's <code id=loading-the-media-resource:dom-media-networkstate-16><a href=#dom-media-networkstate>networkState</a></code> attribute
+ the <a href=#media-element id=loading-the-media-resource:media-element-45>media element</a>.<li><p>Set the element's <code id=loading-the-media-resource:dom-media-networkstate-16><a href=#dom-media-networkstate>networkState</a></code> attribute
to the <code id=loading-the-media-resource:dom-media-network_idle-6><a href=#dom-media-network_idle>NETWORK_IDLE</a></code> value.<li><p>Set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-10>delaying-the-load-event flag</a> to false. This stops <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-10>delaying the load event</a>.<li><p>Abort the overall <a href=#concept-media-load-algorithm id=loading-the-media-resource:concept-media-load-algorithm-4>resource selection
algorithm</a>.</ol>
- <dt id=fatal-decode-error>If the <a href=#media-data id=loading-the-media-resource:media-data-11>media data</a> is corrupted<dd>
+ <dt id=fatal-decode-error>If the <a href=#media-data id=loading-the-media-resource:media-data-12>media data</a> is corrupted<dd>
- <p>Fatal errors in decoding the <a href=#media-data id=loading-the-media-resource:media-data-12>media data</a> that occur after the user agent has
+ <p>Fatal errors in decoding the <a href=#media-data id=loading-the-media-resource:media-data-13>media data</a> that occur after the user agent has
established whether the <var>current media resource</var> is usable must cause the
user agent to execute the following steps:</p>
<ol><li><p>The user agent should cancel the fetching process.<li><p>Set the <code id=loading-the-media-resource:dom-media-error-4><a href=#dom-media-error>error</a></code> attribute to a new
<code id=loading-the-media-resource:mediaerror-3><a href=#mediaerror>MediaError</a></code> object whose <code id=loading-the-media-resource:dom-mediaerror-code-3><a href=#dom-mediaerror-code>code</a></code> attribute
is set to <code id=loading-the-media-resource:dom-mediaerror-media_err_decode><a href=#dom-mediaerror-media_err_decode>MEDIA_ERR_DECODE</a></code>.<li><p><a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-16>Fire a simple event</a> named <code id=loading-the-media-resource:event-media-error-3><a href=#event-media-error>error</a></code> at
- the <a href=#media-element id=loading-the-media-resource:media-element-45>media element</a>.<li>
+ the <a href=#media-element id=loading-the-media-resource:media-element-46>media element</a>.<li>
- <p>If the <a href=#media-element id=loading-the-media-resource:media-element-46>media element</a>'s <code id=loading-the-media-resource:dom-media-readystate-6><a href=#dom-media-readystate>readyState</a></code>
+ <p>If the <a href=#media-element id=loading-the-media-resource:media-element-47>media element</a>'s <code id=loading-the-media-resource:dom-media-readystate-6><a href=#dom-media-readystate>readyState</a></code>
attribute has a value equal to <code id=loading-the-media-resource:dom-media-have_nothing-3><a href=#dom-media-have_nothing>HAVE_NOTHING</a></code>, set
the element's <code id=loading-the-media-resource:dom-media-networkstate-17><a href=#dom-media-networkstate>networkState</a></code> attribute to the
<code id=loading-the-media-resource:dom-media-network_empty-3><a href=#dom-media-network_empty>NETWORK_EMPTY</a></code> value, set the element's
@@ -22568,19 +22675,19 @@
<li><p>Set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-11>delaying-the-load-event flag</a> to false. This stops <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-11>delaying the load event</a>.<li><p>Abort the overall <a href=#concept-media-load-algorithm id=loading-the-media-resource:concept-media-load-algorithm-5>resource selection
algorithm</a>.</ol>
- <dt>If the <a href=#media-data id=loading-the-media-resource:media-data-13>media data</a> fetching process is aborted by the user<dd>
+ <dt>If the <a href=#media-data id=loading-the-media-resource:media-data-14>media data</a> fetching process is aborted by the user<dd>
<p>The fetching process is aborted by the user, e.g. because the user
pressed a "stop" button, the user agent must execute the following steps. These steps are not
- followed if the <code id=loading-the-media-resource:dom-media-load-3><a href=#dom-media-load>load()</a></code> method itself is invoked while
+ followed if the <code id=loading-the-media-resource:dom-media-load-2><a href=#dom-media-load>load()</a></code> method itself is invoked while
these steps are running, as the steps above handle that particular kind of abort.</p>
<ol><li><p>The user agent should cancel the fetching process.<li><p>Set the <code id=loading-the-media-resource:dom-media-error-5><a href=#dom-media-error>error</a></code> attribute to a new
<code id=loading-the-media-resource:mediaerror-4><a href=#mediaerror>MediaError</a></code> object whose <code id=loading-the-media-resource:dom-mediaerror-code-4><a href=#dom-mediaerror-code>code</a></code> attribute
is set to <code id=loading-the-media-resource:dom-mediaerror-media_err_aborted><a href=#dom-mediaerror-media_err_aborted>MEDIA_ERR_ABORTED</a></code>.<li><p><a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-18>Fire a simple event</a> named <code id=loading-the-media-resource:event-media-abort-2><a href=#event-media-abort>abort</a></code> at
- the <a href=#media-element id=loading-the-media-resource:media-element-47>media element</a>.<li>
+ the <a href=#media-element id=loading-the-media-resource:media-element-48>media element</a>.<li>
- <p>If the <a href=#media-element id=loading-the-media-resource:media-element-48>media element</a>'s <code id=loading-the-media-resource:dom-media-readystate-7><a href=#dom-media-readystate>readyState</a></code>
+ <p>If the <a href=#media-element id=loading-the-media-resource:media-element-49>media element</a>'s <code id=loading-the-media-resource:dom-media-readystate-7><a href=#dom-media-readystate>readyState</a></code>
attribute has a value equal to <code id=loading-the-media-resource:dom-media-have_nothing-4><a href=#dom-media-have_nothing>HAVE_NOTHING</a></code>, set
the element's <code id=loading-the-media-resource:dom-media-networkstate-19><a href=#dom-media-networkstate>networkState</a></code> attribute to the
<code id=loading-the-media-resource:dom-media-network_empty-4><a href=#dom-media-network_empty>NETWORK_EMPTY</a></code> value, set the element's
@@ -22592,7 +22699,7 @@
<li><p>Set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-12>delaying-the-load-event flag</a> to false. This stops <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-12>delaying the load event</a>.<li><p>Abort the overall <a href=#concept-media-load-algorithm id=loading-the-media-resource:concept-media-load-algorithm-6>resource selection
algorithm</a>.</ol>
- <dt id=non-fatal-media-error>If the <a href=#media-data id=loading-the-media-resource:media-data-14>media data</a> can be fetched but has non-fatal
+ <dt id=non-fatal-media-error>If the <a href=#media-data id=loading-the-media-resource:media-data-15>media data</a> can be fetched but has non-fatal
errors or uses, in part, codecs that are unsupported, preventing the user agent from rendering
the content completely correctly but not preventing playback altogether<dd>
@@ -22601,11 +22708,11 @@
- <dt id=found-a-media-resource-specific-timed-track>If the <a href=#media-resource id=loading-the-media-resource:media-resource-16>media resource</a> is
+ <dt id=found-a-media-resource-specific-timed-track>If the <a href=#media-resource id=loading-the-media-resource:media-resource-19>media resource</a> is
found to declare a <a href=#media-resource-specific-text-track id=loading-the-media-resource:media-resource-specific-text-track-2>media-resource-specific text track</a> that the user agent
supports<dd>
- <p>If the <a href=#media-data id=loading-the-media-resource:media-data-15>media data</a> is <a href=#cors-same-origin id=loading-the-media-resource:cors-same-origin-2>CORS-same-origin</a>, run the <a href=#steps-to-expose-a-media-resource-specific-text-track id=loading-the-media-resource:steps-to-expose-a-media-resource-specific-text-track>steps to
+ <p>If the <a href=#media-data id=loading-the-media-resource:media-data-16>media data</a> is <a href=#cors-same-origin id=loading-the-media-resource:cors-same-origin-3>CORS-same-origin</a>, run the <a href=#steps-to-expose-a-media-resource-specific-text-track id=loading-the-media-resource:steps-to-expose-a-media-resource-specific-text-track>steps to
expose a media-resource-specific text track</a> with the relevant data.</p>
<p class=note>Cross-origin videos do not expose their subtitles, since that would allow
@@ -22614,32 +22721,14 @@
</dl>
- <p>When the <a href=#networking-task-source id=loading-the-media-resource:networking-task-source-3>networking task source</a> has <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-19>queued</a> the
- last <a href=#concept-task id=loading-the-media-resource:concept-task-6>task</a> as part of <a href=#fetch id=loading-the-media-resource:fetch-2>fetching</a> the
- <a href=#media-resource id=loading-the-media-resource:media-resource-17>media resource</a> (i.e. once the download has completed), if the fetching process
- completes without errors, including decoding the media data, and if all of the data is available
- to the user agent without network access, then, the user agent must move on to the next step.
- This might never happen, e.g. when streaming an infinite resource such as Web radio, or if the
- resource is longer than the user agent's ability to cache data.</p>
-
- <p>While the user agent might still need network access to obtain parts of the <a href=#media-resource id=loading-the-media-resource:media-resource-18>media
- resource</a>, the user agent must remain on this step.</p>
-
- <p class=example>For example, if the user agent has discarded the first half of a video, the
- user agent will remain at this step even once the <a href=#ended-playback id=loading-the-media-resource:ended-playback>playback has
- ended</a>, because there is always the chance the user will seek back to the start. In fact,
- in this situation, once <a href=#ended-playback id=loading-the-media-resource:ended-playback-2>playback has ended</a>, the user agent
- will end up firing a <code id=loading-the-media-resource:event-media-suspend-5><a href=#event-media-suspend>suspend</a></code> event, as described
- earlier.</p>
-
- <li><p>If the user agent ever reaches this step (which can only happen if the entire resource
+ <li><p><i>Final step:</i> If the user agent ever reaches this step (which can only happen if the entire resource
gets loaded and kept available): abort the overall <a href=#concept-media-load-algorithm id=loading-the-media-resource:concept-media-load-algorithm-7>resource selection algorithm</a>.</ol>
- <p>When a <a href=#media-element id=loading-the-media-resource:media-element-49>media element</a> is to <dfn id="forget-the-media-element's-media-resource-specific-tracks">forget the media element's media-resource-specific
- tracks</dfn>, the user agent must remove from the <a href=#media-element id=loading-the-media-resource:media-element-50>media element</a>'s <a href=#list-of-text-tracks id=loading-the-media-resource:list-of-text-tracks>list of text
+ <p>When a <a href=#media-element id=loading-the-media-resource:media-element-50>media element</a> is to <dfn id="forget-the-media-element's-media-resource-specific-tracks">forget the media element's media-resource-specific
+ tracks</dfn>, the user agent must remove from the <a href=#media-element id=loading-the-media-resource:media-element-51>media element</a>'s <a href=#list-of-text-tracks id=loading-the-media-resource:list-of-text-tracks>list of text
tracks</a> all the <a href=#media-resource-specific-text-track id=loading-the-media-resource:media-resource-specific-text-track-3>media-resource-specific
- text tracks</a>, then empty the <a href=#media-element id=loading-the-media-resource:media-element-51>media element</a>'s <code id=loading-the-media-resource:dom-media-audiotracks-2><a href=#dom-media-audiotracks>audioTracks</a></code> attribute's <code id=loading-the-media-resource:audiotracklist-3><a href=#audiotracklist>AudioTrackList</a></code> object,
- then empty the <a href=#media-element id=loading-the-media-resource:media-element-52>media element</a>'s <code id=loading-the-media-resource:dom-media-videotracks-2><a href=#dom-media-videotracks>videoTracks</a></code>
+ text tracks</a>, then empty the <a href=#media-element id=loading-the-media-resource:media-element-52>media element</a>'s <code id=loading-the-media-resource:dom-media-audiotracks-2><a href=#dom-media-audiotracks>audioTracks</a></code> attribute's <code id=loading-the-media-resource:audiotracklist-3><a href=#audiotracklist>AudioTrackList</a></code> object,
+ then empty the <a href=#media-element id=loading-the-media-resource:media-element-53>media element</a>'s <code id=loading-the-media-resource:dom-media-videotracks-2><a href=#dom-media-videotracks>videoTracks</a></code>
attribute's <code id=loading-the-media-resource:videotracklist-3><a href=#videotracklist>VideoTrackList</a></code> object. No events (in particular, no <code id=loading-the-media-resource:event-media-removetrack><a href=#event-media-removetrack>removetrack</a></code> events) are fired as part of this; the <code id=loading-the-media-resource:event-media-error-4><a href=#event-media-error>error</a></code> and <code id=loading-the-media-resource:event-media-emptied-4><a href=#event-media-emptied>emptied</a></code>
events, fired by the algorithms that invoke this one, can be used instead.</p>
@@ -22650,7 +22739,7 @@
<p>The <dfn id=attr-media-preload><code>preload</code></dfn> attribute is an <a href=#enumerated-attribute id=loading-the-media-resource:enumerated-attribute>enumerated
attribute</a>. The following table lists the keywords and states for the attribute — the
keywords in the left column map to the states in the cell in the second column on the same row as
- the keyword. The attribute can be changed even once the <a href=#media-resource id=loading-the-media-resource:media-resource-19>media resource</a> is being
+ the keyword. The attribute can be changed even once the <a href=#media-resource id=loading-the-media-resource:media-resource-20>media resource</a> is being
buffered or played; the descriptions in the table below are to be interpreted with that in
mind.</p>
@@ -22663,7 +22752,7 @@
This state does not provide a hint regarding how aggressively to actually download the media resource if buffering starts anyway (e.g. once the user hits "play").
<tr><td><dfn id=attr-media-preload-metadata><code>metadata</code></dfn>
<td><dfn id=attr-media-preload-metadata-state>Metadata</dfn>
- <td>Hints to the user agent that the author does not expect the user to need the media resource, but that fetching the resource metadata (dimensions, track list, duration, etc), and maybe even the first few frames, is reasonable. If the user agent precisely fetches no more than the metadata, then the <a href=#media-element id=loading-the-media-resource:media-element-53>media element</a> will end up with its <code id=loading-the-media-resource:dom-media-readystate-8><a href=#dom-media-readystate>readyState</a></code> attribute set to <code id=loading-the-media-resource:dom-media-have_metadata-2><a href=#dom-media-have_metadata>HAVE_METADATA</a></code>; typically though, some frames will be obtained as well and it will probably be <code id=loading-the-media-resource:dom-media-have_current_data-2><a href=#dom-media-have_current_data>HAVE_CURRENT_DATA</a></code> or <code id=loading-the-media-resource:dom-media-have_future_data><a href=#dom-media-have_future_data>HAVE_FUTURE
_DATA</a></code>.
+ <td>Hints to the user agent that the author does not expect the user to need the media resource, but that fetching the resource metadata (dimensions, track list, duration, etc), and maybe even the first few frames, is reasonable. If the user agent precisely fetches no more than the metadata, then the <a href=#media-element id=loading-the-media-resource:media-element-54>media element</a> will end up with its <code id=loading-the-media-resource:dom-media-readystate-8><a href=#dom-media-readystate>readyState</a></code> attribute set to <code id=loading-the-media-resource:dom-media-have_metadata-2><a href=#dom-media-have_metadata>HAVE_METADATA</a></code>; typically though, some frames will be obtained as well and it will probably be <code id=loading-the-media-resource:dom-media-have_current_data-2><a href=#dom-media-have_current_data>HAVE_CURRENT_DATA</a></code> or <code id=loading-the-media-resource:dom-media-have_future_data><a href=#dom-media-have_future_data>HAVE_FUTURE
_DATA</a></code>.
When the media resource is playing, hints to the user agent that bandwidth is to be considered scarce, e.g. suggesting throttling the download so that the media data is obtained at the slowest possible rate that still maintains consistent playback.
<tr><td><dfn id=attr-media-preload-auto><code>auto</code></dfn>
<td><dfn id=attr-media-preload-auto-state>Automatic</dfn>
@@ -22701,7 +22790,7 @@
<dl class=domintro><dt><var>media</var> . <code id=loading-the-media-resource:dom-media-buffered><a href=#dom-media-buffered>buffered</a></code><dd>
- <p>Returns a <code id=loading-the-media-resource:timeranges><a href=#timeranges>TimeRanges</a></code> object that represents the ranges of the <a href=#media-resource id=loading-the-media-resource:media-resource-20>media
+ <p>Returns a <code id=loading-the-media-resource:timeranges><a href=#timeranges>TimeRanges</a></code> object that represents the ranges of the <a href=#media-resource id=loading-the-media-resource:media-resource-21>media
resource</a> that the user agent has buffered.</p>
</dl>
@@ -22710,7 +22799,7 @@
<p>The <dfn id=dom-media-buffered><code>buffered</code></dfn> attribute must return a new
static <a href=#normalised-timeranges-object id=loading-the-media-resource:normalised-timeranges-object>normalised <code>TimeRanges</code> object</a> that represents the ranges of the
- <a href=#media-resource id=loading-the-media-resource:media-resource-21>media resource</a>, if any, that the user agent has buffered, at the time the attribute
+ <a href=#media-resource id=loading-the-media-resource:media-resource-22>media resource</a>, if any, 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>
@@ -83750,7 +83839,7 @@
- <dl id=ref-list><dt id=refsABNF>[ABNF]<dd><cite><a href=http://www.ietf.org/rfc/std/std68.txt>Augmented BNF for Syntax Specifications: ABNF</a></cite>, D. Crocker, P. Overell. IETF.<dt id=refsABOUT>[ABOUT]<dd><cite><a href=http://tools.ietf.org/html/rfc6694>The 'about' URI scheme</a></cite>, S. Moonesamy. IETF.<dt id=refsAPNG>[APNG]<dd>(Non-normative) <cite><a href=https://wiki.mozilla.org/APNG_Specification>APNG Specification</a></cite>. S. Parmenter, V. Vukicevic, A. Smith. Mozilla.<dt id=refsARIA>[ARIA]<dd><cite><a href=http://www.w3.org/WAI/PF/aria/>Accessible Rich Internet Applications (WAI-ARIA)</a></cite>, J. Craig, M. Cooper, L. Pappas, R. Schwerdtfeger, L. Seeman. W3C.<dt id=refsARIAIMPL>[ARIAIMPL]<dd><cite><a href=http://www.w3.org/WAI/PF/aria-implementation/>WAI-ARIA 1.0 User Agent Implementation Guide</a></cite>, A. Snow-Weaver, M. Cooper. W3C.<dt id=refsATAG>[ATAG]<dd>(Non-normative) <cite><a href=http://www.w3.org/TR/ATAG20/>Authoring Tool Accessibility Guide
lines (ATAG) 2.0</a></cite>, J. Richards, J. Spellman, J. Treviranus. W3C.<dt id=refsATOM>[ATOM]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc4287>The Atom Syndication Format</a></cite>, M. Nottingham, R. Sayre. IETF.<dt id=refsBCP47>[BCP47]<dd><cite><a href=http://www.ietf.org/rfc/bcp/bcp47.txt>Tags for Identifying Languages; Matching of Language Tags</a></cite>, A. Phillips, M. Davis. IETF.<dt id=refsBECSS>[BECSS]<dd><cite><a href=http://www.w3.org/TR/becss/>Behavioral Extensions to CSS</a></cite>, I. Hickson. W3C.<dt id=refsBEZIER>[BEZIER]<dd><cite>Courbes à poles</cite>, P. de Casteljau. INPI, 1959.<dt id=refsBIDI>[BIDI]<dd><cite><a href=http://www.unicode.org/reports/tr9/>UAX #9: Unicode Bidirectional Algorithm</a></cite>, M. Davis. Unicode Consortium.<dt id=refsBOCU1>[BOCU1]<dd>(Non-normative) <cite><a href=http://www.unicode.org/notes/tn6/>UTN #6: BOCU-1: MIME-Compatible Unicode Compression</a></cite>, M. Scherer, M. Davis. Unicode Consortium.<dt id
=refsCESU8>[CESU8]<dd>(Non-normative) <cite><a href=http://www.unicode.org/reports/tr26/>UTR #26: Compatibility Encoding Scheme For UTF-16: 8-BIT (CESU-8)</a></cite>, T. Phipps. Unicode Consortium.<dt id=refsCHARMOD>[CHARMOD]<dd>(Non-normative) <cite><a href=http://www.w3.org/TR/charmod/>Character Model for the World Wide Web 1.0: Fundamentals</a></cite>, M. Dürst, F. Yergeau, R. Ishida, M. Wolf, T. Texin. W3C.<dt id=refsCLDR>[CLDR]<dd><cite><a href=http://cldr.unicode.org/>Unicode Common Locale Data Repository</a></cite>. Unicode.<dt id=refsCOMPOSITE>[COMPOSITE]<dd><cite><a href=http://dev.w3.org/fxtf/compositing/>Compositing and Blending</a></cite>. R. Cabanier, N. Andronikos. W3C.<dt id=refsCOMPUTABLE>[COMPUTABLE]<dd>(Non-normative) <cite><a href=http://www.turingarchive.org/browse.php/B/12>On computable numbers, with an application to the Entscheidungsproblem</a></cite>, A. Turing. In <cite>Proceedings of the London Mathematical Society</cite>, series 2, volume 42, page
s 230-265. London Mathematical Society, 1937.<dt id=refsCOOKIES>[COOKIES]<dd><cite><a href=http://tools.ietf.org/html/rfc6265>HTTP State Management Mechanism</a></cite>, A. Barth. IETF.<dt id=refsCP50220>[CP50220]<dd>(Non-normative) <cite><a href=http://www.iana.org/assignments/charset-reg/CP50220>CP50220</a></cite>, Y. Naruse. IANA.<dt id=refsCSP>[CSP]<dd>(Non-normative) <cite><a href=http://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html>Content Security Policy</a></cite>, B. Sterne, A. Barth. W3C.<dt id=refsCSS>[CSS]<dd><cite><a href=http://www.w3.org/TR/CSS2/>Cascading Style Sheets Level 2 Revision 1</a></cite>, B. Bos, T. Çelik, I. Hickson, H. Lie. W3C.<dt id=refsCSSANIMATIONS>[CSSANIMATIONS]<dd>(Non-normative) <cite><a href=http://dev.w3.org/csswg/css3-animations/>CSS Animations</a></cite>, D. Jackson, D. Hyatt, C. Marrin, S. Galineau, L. Baron. W3C.<dt id=refsCSSATTR>[CSSATTR]<dd><cite><a href=http://dev.w3.org/csswg/css-style-attr/>CSS
Styling Attribute Syntax</a></cite>, T. Çelik, E. Etemad. W3C.<dt id=refsCSSCOLOR>[CSSCOLOR]<dd><cite><a href=http://dev.w3.org/csswg/css3-color/>CSS Color Module Level 3</a></cite>, T. Çelik, C. Lilley, L. Baron. W3C.<dt id=refsCSSFONTLOAD>[CSSFONTLOAD]<dd><cite><a href=http://dev.w3.org/csswg/css-font-loading/>CSS Font Loading</a></cite>, T. Atkins, J. Daggett. W3C.<dt id=refsCSSFONTS>[CSSFONTS]<dd><cite><a href=http://dev.w3.org/csswg/css3-fonts/>CSS Fonts</a></cite>, J. Daggett. W3C.<dt id=refsCSSGC>[CSSGC]<dd><cite><a href=http://dev.w3.org/csswg/css-content>CSS Generated Content</a></cite>, H. Lie, E. Etemad, I. Hickson. W3C.<dt id=refsCSSIMAGES>[CSSIMAGES]<dd><cite><a href=http://dev.w3.org/csswg/css-images/>CSS Image Values and Replaced Content Module</a></cite>, E. Etemad, T. Atkins. W3C.<dt id=refsCSSOM>[CSSOM]<dd><cite><a href=http://dev.w3.org/csswg/cssom/>Cascading Style Sheets Object Model (CSSOM)</a></cite>, S. Pieters, G. Adams. W3C.<dt id=refsCSSOMVIEW>[C
SSOMVIEW]<dd><cite><a href=http://dev.w3.org/csswg/cssom-view/>CSSOM View Module</a></cite>, S. Pieters, G. Adams. W3C.<dt id=refsCSSRUBY>[CSSRUBY]<dd><cite><a href=http://dev.w3.org/csswg/css3-ruby/>CSS3 Ruby Module</a></cite>, R. Ishida. W3C.<dt id=refsCSSTRANSITIONS>[CSSTRANSITIONS]<dd>(Non-normative) <cite><a href=http://dev.w3.org/csswg/css3-transitions/>CSS Transitions</a></cite>, D. Jackson, D. Hyatt, C. Marrin, L. Baron. W3C.<dt id=refsCSSUI>[CSSUI]<dd><cite><a href=http://dev.w3.org/csswg/css3-ui/>CSS3 Basic User Interface Module</a></cite>, T. Çelik. W3C.<dt id=refsCSSSCOPED>[CSSSCOPED]<dd><cite><a href=http://dev.w3.org/csswg/css-scoping/>CSS Scoping</a></cite>, T. Atkins, E. Etemad. W3C.<dt id=refsCSSSYNTAX>[CSSSYNTAX]<dd><cite><a href=http://dev.w3.org/csswg/css-syntax/>CSS Syntax</a></cite>, T. Atkins, S. Sapin. W3C.<dt id=refsCSSVALUES>[CSSVALUES]<dd><cite><a href=http://dev.w3.org/csswg/css3-values/>CSS3 Values and Units</a></cite>, H. Lie, T. Atkins, E. Ete
mad. W3C.<dt id=refsCSSWM>[CSSWM]<dd><cite><a href=http://dev.w3.org/csswg/css-writing-modes>CSS Writing Modes</a></cite>, E. Etemad, K. Ishii. W3C.<dt id=refsDASH>[DASH]<dd><cite><a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=57623">Dynamic adaptive streaming over HTTP (DASH)</a></cite>. ISO.<dt id=refsDOM>[DOM]<dd><cite><a href=http://dom.spec.whatwg.org/>DOM</a></cite>, A. van Kesteren, A. Gregor, Ms2ger. WHATWG.<dt id=refsDOMEVENTS>[DOMEVENTS]<dd><cite><a href=https://dvcs.w3.org/hg/dom3events/raw-file/tip/html/DOM3-Events.html>Document Object Model (DOM) Level 3 Events Specification</a></cite>, G. Kacmarcik, T. Leithead, J. Rossi, D. Schepers, B. Höhrmann, P. Le Hégaret, T. Pixley. W3C.<dt id=refsDOMPARSING>[DOMPARSING]<dd><cite><a href=http://domparsing.spec.whatwg.org/ lang=en-US>DOM Parsing and Serialization</a></cite>, Ms2ger. WHATWG.<dt id=refsDOT>[DOT]<dd>(Non-normative) <cite><a href=http://www.graphviz.org/content/dot-
language>The DOT Language</a></cite>. Graphviz.<dt id=refsE163>[E163]<dd><cite>Recommendation E.163 — Numbering Plan for The International Telephone Service</cite>, CCITT Blue Book, Fascicle II.2, pp. 128-134, November 1988.<dt id=refsECMA262>[ECMA262]<dd><cite><a href=http://people.mozilla.org/~jorendorff/es6-draft.html>ECMAScript Language Specification</a></cite>. ECMA.<dt id=refsEDITING>[EDITING]<dd><cite><a href=http://dvcs.w3.org/hg/editing/raw-file/tip/editing.html>HTML Editing APIs</a></cite>, A. Gregor. W3C Editing APIs CG.<dt id=refsENCODING>[ENCODING]<dd><cite><a href=http://encoding.spec.whatwg.org/>Encoding</a></cite>, A. van Kesteren, J. Bell. WHATWG.<dt id=refsFETCH>[FETCH]<dd><cite><a href=http://fetch.spec.whatwg.org/>Fetch</a></cite>, A. van Kesteren. WHATWG.<dt id=refsFILEAPI>[FILEAPI]<dd><cite><a href=http://dev.w3.org/2006/webapi/FileAPI/>File API</a></cite>, A. Ranganathan. W3C.<dt id=refsFULLSCREEN>[FULLSCREEN]<dd><cite><a href=http://fullscreen.spec.
whatwg.org/>Fullscreen</a></cite>, A. van Kesteren, T. Çelik. WHATWG.<dt id=refsGIF>[GIF]<dd>(Non-normative) <cite><a href=http://www.w3.org/Graphics/GIF/spec-gif89a.txt>Graphics Interchange Format</a></cite>. CompuServe.<dt id=refsGRAPHICS>[GRAPHICS]<dd>(Non-normative) <cite>Computer Graphics: Principles and Practice in C</cite>, Second Edition, J. Foley, A. van Dam, S. Feiner, J. Hughes. Addison-Wesley. ISBN 0-201-84840-6.<dt id=refsGREGORIAN>[GREGORIAN]<dd>(Non-normative) <cite>Inter Gravissimas</cite>, A. Lilius, C. Clavius. Gregory XIII Papal Bull, February 1582.<dt id=refsHTTP>[HTTP]<dd><cite><a href=http://tools.ietf.org/html/rfc7230>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</a></cite>, R. Fielding, J. Reschke. IETF.<dd><cite><a href=http://tools.ietf.org/html/rfc7231>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</a></cite>, R. Fielding, J. Reschke. IETF.<dd><cite><a href=http://tools.ietf.org/html/rfc7232>Hypertext Transfer P
rotocol (HTTP/1.1): Conditional Requests</a></cite>, R. Fielding, J. Reschke. IETF.<dd><cite><a href=http://tools.ietf.org/html/rfc7233>Hypertext Transfer Protocol (HTTP/1.1): Range Requests</a></cite>, R. Fielding, Y. Lafon, J. Reschke. IETF.<dd><cite><a href=http://tools.ietf.org/html/rfc7234>Hypertext Transfer Protocol (HTTP/1.1): Caching</a></cite>, R. Fielding, M. Nottingham, J. Reschke. IETF.<dd><cite><a href=http://tools.ietf.org/html/rfc7235>Hypertext Transfer Protocol (HTTP/1.1): Authentication</a></cite>, R. Fielding, J. Reschke. IETF.<dt id=refsHTTPS>[HTTPS]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc2818>HTTP Over TLS</a></cite>, E. Rescorla. IETF.<dt id=refsIANAPERMHEADERS>[IANAPERMHEADERS]<dd><cite><a href=http://www.iana.org/assignments/message-headers/perm-headers.html>Permanent Message Header Field Names</a></cite>. IANA.<dt id=refsINBAND>[INBAND]<dd><cite><a href=http://dev.w3.org/html5/html-sourcing-inband-tracks/>Sourcing In-band Media
Resource Tracks from Media Containers into HTML</a></cite>, S. Pfeiffer, B. Lund. W3C.<dt id=refsISO3166>[ISO3166]<dd><cite><a href=http://www.iso.org/iso/home/standards/country_codes.htm>ISO 3166: Codes for the representation of names of countries and their subdivisions</a></cite>. ISO.<dt id=refsISO8601>[ISO8601]<dd>(Non-normative) <cite><a href="http://isotc.iso.org/livelink/livelink/4021199/ISO_8601_2004_E.zip?func=doc.Fetch&nodeid=4021199">ISO8601: Data elements and interchange formats — Information interchange — Representation of dates and times</a></cite>. ISO.<dt id=refsJLREQ>[JLREQ]<dd><cite><a href=http://www.w3.org/TR/jlreq/>Requirements for Japanese Text Layout</a></cite>. W3C.<dt id=refsJPEG>[JPEG]<dd><cite><a href=http://www.w3.org/Graphics/JPEG/jfif3.pdf>JPEG File Interchange Format</a></cite>, E. Hamilton.<dt id=refsJSON>[JSON]<dd><cite><a href=http://tools.ietf.org/html/rfc4627>The application/json Media Type for JavaScript Object Notation (JSON)</a
></cite>, D. Crockford. IETF.<dt id=refsMAILTO>[MAILTO]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc6068>The 'mailto' URI scheme</a></cite>, M. Duerst, L. Masinter, J. Zawinski. IETF.<dt id=refsMATHML>[MATHML]<dd><cite><a href=http://www.w3.org/TR/MathML/>Mathematical Markup Language (MathML)</a></cite>, D. Carlisle, P. Ion, R. Miner, N. Poppelier. W3C.<dt id=refsMEDIAFRAG>[MEDIAFRAG]<dd><cite><a href=http://www.w3.org/2008/WebVideo/Fragments/WD-media-fragments-spec/>Media Fragments URI</a></cite>, R. Troncy, E. Mannens, S. Pfeiffer, D. Van Deursen. W3C.<dt id=refsMFREL>[MFREL]<dd><cite><a href=http://microformats.org/wiki/existing-rel-values#HTML5_link_type_extensions>Microformats Wiki: existing rel values</a></cite>. Microformats.<dt id=refsMIMESNIFF>[MIMESNIFF]<dd><cite><a href=http://mimesniff.spec.whatwg.org/>MIME Sniffing</a></cite>, G. Hemsley. WHATWG.<dt id=refsMNG>[MNG]<dd><cite><a href=http://www.libpng.org/pub/mng/spec/>MNG (Multiple-image Netwo
rk Graphics) Format</a></cite>. G. Randers-Pehrson.<dt id=refsMPEG2>[MPEG2]<dd><cite>ISO/IEC 13818-1: Information technology — Generic coding of moving pictures and associated audio information: Systems</cite>. ISO/IEC.<dt id=refsMPEG4>[MPEG4]<dd><cite>ISO/IEC 14496-12: ISO base media file format</cite>. ISO/IEC.<dt id=refsMQ>[MQ]<dd><cite><a href=http://dev.w3.org/csswg/css3-mediaqueries/>Media Queries</a></cite>, H. Lie, T. Çelik, D. Glazman, A. van Kesteren. W3C.<dt id=refsNPAPI>[NPAPI]<dd>(Non-normative) <cite><a href=https://developer.mozilla.org/en/Gecko_Plugin_API_Reference>Gecko Plugin API Reference</a></cite>. Mozilla.<dt id=refsOGGSKELETONHEADERS>[OGGSKELETONHEADERS]<dd><cite><a href=http://wiki.xiph.org/SkeletonHeaders>SkeletonHeaders</a></cite>. Xiph.Org.<dt id=refsOPENSEARCH>[OPENSEARCH]<dd><cite><a href=http://www.opensearch.org/Specifications/OpenSearch/1.1#Autodiscovery_in_HTML.2FXHTML>Autodiscovery in HTML/XHTML</a></cite>. In <cite>OpenSearch 1.1 Draft
4</cite>, Section 4.6.2. OpenSearch.org.<dt id=refsORIGIN>[ORIGIN]<dd><cite><a href=http://tools.ietf.org/html/rfc6454>The Web Origin Concept</a></cite>, A. Barth. IETF.<dt id=refsPAGEVIS>[PAGEVIS]<dd>(Non-normative) <cite><a href=https://w3c.github.io/web-performance/specs/PageVisibility/Overview.html>Page Visibility</a></cite>, J. Mann, A. Jain. W3C.<dt id=refsPDF>[PDF]<dd>(Non-normative) <cite><a href=http://www.adobe.com/devnet/acrobat/pdfs/PDF32000_2008.pdf>Document management — Portable document format — Part 1: PDF</a></cite>. ISO.<dt id=refsPINGBACK>[PINGBACK]<dd><cite><a href=http://www.hixie.ch/specs/pingback/pingback>Pingback 1.0</a></cite>, S. Langridge, I. Hickson.<dt id=refsPNG>[PNG]<dd><cite><a href=http://www.w3.org/TR/PNG/>Portable Network Graphics (PNG) Specification</a></cite>, D. Duce. W3C.<dt id=refsPOINTERLOCK>[POINTERLOCK]<dd><cite><a href=http://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html>Pointer Lock</a></cite>, V. Scheib. W3C.<dt id=r
efsPPUTF8>[PPUTF8]<dd>(Non-normative) <cite><a href=http://www.sw.it.aoyama.ac.jp/2012/pub/IUC11-UTF-8.pdf>The Properties and Promises of UTF-8</a></cite>, M. Dürst. University of Zürich. In <cite>Proceedings of the 11th International Unicode Conference</cite>.<dt id=refsPSL>[PSL]<dd><cite><a href=http://publicsuffix.org/>Public Suffix List</a></cite>.
+ <dl id=ref-list><dt id=refsABNF>[ABNF]<dd><cite><a href=http://www.ietf.org/rfc/std/std68.txt>Augmented BNF for Syntax Specifications: ABNF</a></cite>, D. Crocker, P. Overell. IETF.<dt id=refsABOUT>[ABOUT]<dd><cite><a href=http://tools.ietf.org/html/rfc6694>The 'about' URI scheme</a></cite>, S. Moonesamy. IETF.<dt id=refsAPNG>[APNG]<dd>(Non-normative) <cite><a href=https://wiki.mozilla.org/APNG_Specification>APNG Specification</a></cite>. S. Parmenter, V. Vukicevic, A. Smith. Mozilla.<dt id=refsARIA>[ARIA]<dd><cite><a href=http://www.w3.org/WAI/PF/aria/>Accessible Rich Internet Applications (WAI-ARIA)</a></cite>, J. Craig, M. Cooper, L. Pappas, R. Schwerdtfeger, L. Seeman. W3C.<dt id=refsARIAIMPL>[ARIAIMPL]<dd><cite><a href=http://www.w3.org/WAI/PF/aria-implementation/>WAI-ARIA 1.0 User Agent Implementation Guide</a></cite>, A. Snow-Weaver, M. Cooper. W3C.<dt id=refsATAG>[ATAG]<dd>(Non-normative) <cite><a href=http://www.w3.org/TR/ATAG20/>Authoring Tool Accessibility Guide
lines (ATAG) 2.0</a></cite>, J. Richards, J. Spellman, J. Treviranus. W3C.<dt id=refsATOM>[ATOM]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc4287>The Atom Syndication Format</a></cite>, M. Nottingham, R. Sayre. IETF.<dt id=refsBCP47>[BCP47]<dd><cite><a href=http://www.ietf.org/rfc/bcp/bcp47.txt>Tags for Identifying Languages; Matching of Language Tags</a></cite>, A. Phillips, M. Davis. IETF.<dt id=refsBECSS>[BECSS]<dd><cite><a href=http://www.w3.org/TR/becss/>Behavioral Extensions to CSS</a></cite>, I. Hickson. W3C.<dt id=refsBEZIER>[BEZIER]<dd><cite>Courbes à poles</cite>, P. de Casteljau. INPI, 1959.<dt id=refsBIDI>[BIDI]<dd><cite><a href=http://www.unicode.org/reports/tr9/>UAX #9: Unicode Bidirectional Algorithm</a></cite>, M. Davis. Unicode Consortium.<dt id=refsBOCU1>[BOCU1]<dd>(Non-normative) <cite><a href=http://www.unicode.org/notes/tn6/>UTN #6: BOCU-1: MIME-Compatible Unicode Compression</a></cite>, M. Scherer, M. Davis. Unicode Consortium.<dt id
=refsCESU8>[CESU8]<dd>(Non-normative) <cite><a href=http://www.unicode.org/reports/tr26/>UTR #26: Compatibility Encoding Scheme For UTF-16: 8-BIT (CESU-8)</a></cite>, T. Phipps. Unicode Consortium.<dt id=refsCHARMOD>[CHARMOD]<dd>(Non-normative) <cite><a href=http://www.w3.org/TR/charmod/>Character Model for the World Wide Web 1.0: Fundamentals</a></cite>, M. Dürst, F. Yergeau, R. Ishida, M. Wolf, T. Texin. W3C.<dt id=refsCLDR>[CLDR]<dd><cite><a href=http://cldr.unicode.org/>Unicode Common Locale Data Repository</a></cite>. Unicode.<dt id=refsCOMPOSITE>[COMPOSITE]<dd><cite><a href=http://dev.w3.org/fxtf/compositing/>Compositing and Blending</a></cite>. R. Cabanier, N. Andronikos. W3C.<dt id=refsCOMPUTABLE>[COMPUTABLE]<dd>(Non-normative) <cite><a href=http://www.turingarchive.org/browse.php/B/12>On computable numbers, with an application to the Entscheidungsproblem</a></cite>, A. Turing. In <cite>Proceedings of the London Mathematical Society</cite>, series 2, volume 42, page
s 230-265. London Mathematical Society, 1937.<dt id=refsCOOKIES>[COOKIES]<dd><cite><a href=http://tools.ietf.org/html/rfc6265>HTTP State Management Mechanism</a></cite>, A. Barth. IETF.<dt id=refsCP50220>[CP50220]<dd>(Non-normative) <cite><a href=http://www.iana.org/assignments/charset-reg/CP50220>CP50220</a></cite>, Y. Naruse. IANA.<dt id=refsCSP>[CSP]<dd>(Non-normative) <cite><a href=http://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html>Content Security Policy</a></cite>, B. Sterne, A. Barth. W3C.<dt id=refsCSS>[CSS]<dd><cite><a href=http://www.w3.org/TR/CSS2/>Cascading Style Sheets Level 2 Revision 1</a></cite>, B. Bos, T. Çelik, I. Hickson, H. Lie. W3C.<dt id=refsCSSANIMATIONS>[CSSANIMATIONS]<dd>(Non-normative) <cite><a href=http://dev.w3.org/csswg/css3-animations/>CSS Animations</a></cite>, D. Jackson, D. Hyatt, C. Marrin, S. Galineau, L. Baron. W3C.<dt id=refsCSSATTR>[CSSATTR]<dd><cite><a href=http://dev.w3.org/csswg/css-style-attr/>CSS
Styling Attribute Syntax</a></cite>, T. Çelik, E. Etemad. W3C.<dt id=refsCSSCOLOR>[CSSCOLOR]<dd><cite><a href=http://dev.w3.org/csswg/css3-color/>CSS Color Module Level 3</a></cite>, T. Çelik, C. Lilley, L. Baron. W3C.<dt id=refsCSSFONTLOAD>[CSSFONTLOAD]<dd><cite><a href=http://dev.w3.org/csswg/css-font-loading/>CSS Font Loading</a></cite>, T. Atkins, J. Daggett. W3C.<dt id=refsCSSFONTS>[CSSFONTS]<dd><cite><a href=http://dev.w3.org/csswg/css3-fonts/>CSS Fonts</a></cite>, J. Daggett. W3C.<dt id=refsCSSGC>[CSSGC]<dd><cite><a href=http://dev.w3.org/csswg/css-content>CSS Generated Content</a></cite>, H. Lie, E. Etemad, I. Hickson. W3C.<dt id=refsCSSIMAGES>[CSSIMAGES]<dd><cite><a href=http://dev.w3.org/csswg/css-images/>CSS Image Values and Replaced Content Module</a></cite>, E. Etemad, T. Atkins. W3C.<dt id=refsCSSOM>[CSSOM]<dd><cite><a href=http://dev.w3.org/csswg/cssom/>Cascading Style Sheets Object Model (CSSOM)</a></cite>, S. Pieters, G. Adams. W3C.<dt id=refsCSSOMVIEW>[C
SSOMVIEW]<dd><cite><a href=http://dev.w3.org/csswg/cssom-view/>CSSOM View Module</a></cite>, S. Pieters, G. Adams. W3C.<dt id=refsCSSRUBY>[CSSRUBY]<dd><cite><a href=http://dev.w3.org/csswg/css3-ruby/>CSS3 Ruby Module</a></cite>, R. Ishida. W3C.<dt id=refsCSSTRANSITIONS>[CSSTRANSITIONS]<dd>(Non-normative) <cite><a href=http://dev.w3.org/csswg/css3-transitions/>CSS Transitions</a></cite>, D. Jackson, D. Hyatt, C. Marrin, L. Baron. W3C.<dt id=refsCSSUI>[CSSUI]<dd><cite><a href=http://dev.w3.org/csswg/css3-ui/>CSS3 Basic User Interface Module</a></cite>, T. Çelik. W3C.<dt id=refsCSSSCOPED>[CSSSCOPED]<dd><cite><a href=http://dev.w3.org/csswg/css-scoping/>CSS Scoping</a></cite>, T. Atkins, E. Etemad. W3C.<dt id=refsCSSSYNTAX>[CSSSYNTAX]<dd><cite><a href=http://dev.w3.org/csswg/css-syntax/>CSS Syntax</a></cite>, T. Atkins, S. Sapin. W3C.<dt id=refsCSSVALUES>[CSSVALUES]<dd><cite><a href=http://dev.w3.org/csswg/css3-values/>CSS3 Values and Units</a></cite>, H. Lie, T. Atkins, E. Ete
mad. W3C.<dt id=refsCSSWM>[CSSWM]<dd><cite><a href=http://dev.w3.org/csswg/css-writing-modes>CSS Writing Modes</a></cite>, E. Etemad, K. Ishii. W3C.<dt id=refsDASH>[DASH]<dd><cite><a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=57623">Dynamic adaptive streaming over HTTP (DASH)</a></cite>. ISO.<dt id=refsDOM>[DOM]<dd><cite><a href=http://dom.spec.whatwg.org/>DOM</a></cite>, A. van Kesteren, A. Gregor, Ms2ger. WHATWG.<dt id=refsDOMEVENTS>[DOMEVENTS]<dd><cite><a href=https://dvcs.w3.org/hg/dom3events/raw-file/tip/html/DOM3-Events.html>Document Object Model (DOM) Level 3 Events Specification</a></cite>, G. Kacmarcik, T. Leithead, J. Rossi, D. Schepers, B. Höhrmann, P. Le Hégaret, T. Pixley. W3C.<dt id=refsDOMPARSING>[DOMPARSING]<dd><cite><a href=http://domparsing.spec.whatwg.org/ lang=en-US>DOM Parsing and Serialization</a></cite>, Ms2ger. WHATWG.<dt id=refsDOT>[DOT]<dd>(Non-normative) <cite><a href=http://www.graphviz.org/content/dot-
language>The DOT Language</a></cite>. Graphviz.<dt id=refsE163>[E163]<dd><cite>Recommendation E.163 — Numbering Plan for The International Telephone Service</cite>, CCITT Blue Book, Fascicle II.2, pp. 128-134, November 1988.<dt id=refsECMA262>[ECMA262]<dd><cite><a href=http://people.mozilla.org/~jorendorff/es6-draft.html>ECMAScript Language Specification</a></cite>. ECMA.<dt id=refsEDITING>[EDITING]<dd><cite><a href=http://dvcs.w3.org/hg/editing/raw-file/tip/editing.html>HTML Editing APIs</a></cite>, A. Gregor. W3C Editing APIs CG.<dt id=refsENCODING>[ENCODING]<dd><cite><a href=http://encoding.spec.whatwg.org/>Encoding</a></cite>, A. van Kesteren, J. Bell. WHATWG.<dt id=refsFETCH>[FETCH]<dd><cite><a href=http://fetch.spec.whatwg.org/>Fetch</a></cite>, A. van Kesteren. WHATWG.<dt id=refsFILEAPI>[FILEAPI]<dd><cite><a href=http://dev.w3.org/2006/webapi/FileAPI/>File API</a></cite>, A. Ranganathan. W3C.<dt id=refsFULLSCREEN>[FULLSCREEN]<dd><cite><a href=http://fullscreen.spec.
whatwg.org/>Fullscreen</a></cite>, A. van Kesteren, T. Çelik. WHATWG.<dt id=refsGIF>[GIF]<dd>(Non-normative) <cite><a href=http://www.w3.org/Graphics/GIF/spec-gif89a.txt>Graphics Interchange Format</a></cite>. CompuServe.<dt id=refsGRAPHICS>[GRAPHICS]<dd>(Non-normative) <cite>Computer Graphics: Principles and Practice in C</cite>, Second Edition, J. Foley, A. van Dam, S. Feiner, J. Hughes. Addison-Wesley. ISBN 0-201-84840-6.<dt id=refsGREGORIAN>[GREGORIAN]<dd>(Non-normative) <cite>Inter Gravissimas</cite>, A. Lilius, C. Clavius. Gregory XIII Papal Bull, February 1582.<dt id=refsHTTP>[HTTP]<dd><cite><a href=http://tools.ietf.org/html/rfc7230>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</a></cite>, R. Fielding, J. Reschke. IETF.<dd><cite><a href=http://tools.ietf.org/html/rfc7231>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</a></cite>, R. Fielding, J. Reschke. IETF.<dd><cite><a href=http://tools.ietf.org/html/rfc7232>Hypertext Transfer P
rotocol (HTTP/1.1): Conditional Requests</a></cite>, R. Fielding, J. Reschke. IETF.<dd><cite><a href=http://tools.ietf.org/html/rfc7233>Hypertext Transfer Protocol (HTTP/1.1): Range Requests</a></cite>, R. Fielding, Y. Lafon, J. Reschke. IETF.<dd><cite><a href=http://tools.ietf.org/html/rfc7234>Hypertext Transfer Protocol (HTTP/1.1): Caching</a></cite>, R. Fielding, M. Nottingham, J. Reschke. IETF.<dd><cite><a href=http://tools.ietf.org/html/rfc7235>Hypertext Transfer Protocol (HTTP/1.1): Authentication</a></cite>, R. Fielding, J. Reschke. IETF.<dt id=refsHTTPS>[HTTPS]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc2818>HTTP Over TLS</a></cite>, E. Rescorla. IETF.<dt id=refsIANAPERMHEADERS>[IANAPERMHEADERS]<dd><cite><a href=http://www.iana.org/assignments/message-headers/perm-headers.html>Permanent Message Header Field Names</a></cite>. IANA.<dt id=refsINBAND>[INBAND]<dd><cite><a href=http://dev.w3.org/html5/html-sourcing-inband-tracks/>Sourcing In-band Media
Resource Tracks from Media Containers into HTML</a></cite>, S. Pfeiffer, B. Lund. W3C.<dt id=refsISO3166>[ISO3166]<dd><cite><a href=http://www.iso.org/iso/home/standards/country_codes.htm>ISO 3166: Codes for the representation of names of countries and their subdivisions</a></cite>. ISO.<dt id=refsISO8601>[ISO8601]<dd>(Non-normative) <cite><a href="http://isotc.iso.org/livelink/livelink/4021199/ISO_8601_2004_E.zip?func=doc.Fetch&nodeid=4021199">ISO8601: Data elements and interchange formats — Information interchange — Representation of dates and times</a></cite>. ISO.<dt id=refsJLREQ>[JLREQ]<dd><cite><a href=http://www.w3.org/TR/jlreq/>Requirements for Japanese Text Layout</a></cite>. W3C.<dt id=refsJPEG>[JPEG]<dd><cite><a href=http://www.w3.org/Graphics/JPEG/jfif3.pdf>JPEG File Interchange Format</a></cite>, E. Hamilton.<dt id=refsJSON>[JSON]<dd><cite><a href=http://tools.ietf.org/html/rfc4627>The application/json Media Type for JavaScript Object Notation (JSON)</a
></cite>, D. Crockford. IETF.<dt id=refsMAILTO>[MAILTO]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc6068>The 'mailto' URI scheme</a></cite>, M. Duerst, L. Masinter, J. Zawinski. IETF.<dt id=refsMATHML>[MATHML]<dd><cite><a href=http://www.w3.org/TR/MathML/>Mathematical Markup Language (MathML)</a></cite>, D. Carlisle, P. Ion, R. Miner, N. Poppelier. W3C.<dt id=refsMEDIAFRAG>[MEDIAFRAG]<dd><cite><a href=http://www.w3.org/2008/WebVideo/Fragments/WD-media-fragments-spec/>Media Fragments URI</a></cite>, R. Troncy, E. Mannens, S. Pfeiffer, D. Van Deursen. W3C.<dt id=refsMEDIASOURCE>[MEDIASOURCE]<dd><cite><a href=https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html>Media Source Extensions</a></cite>, A. Colwell, A. Bateman, M. Watson. W3C.<dt id=refsMEDIASTREAM>[MEDIASTREAM]<dd><cite><a href=http://dev.w3.org/2011/webrtc/editor/getusermedia.html>Media Capture and Streams</a></cite>, D. Burnett, A. Bergkvist, C. Jennings, A. Narayanan. W3C
.<dt id=refsMFREL>[MFREL]<dd><cite><a href=http://microformats.org/wiki/existing-rel-values#HTML5_link_type_extensions>Microformats Wiki: existing rel values</a></cite>. Microformats.<dt id=refsMIMESNIFF>[MIMESNIFF]<dd><cite><a href=http://mimesniff.spec.whatwg.org/>MIME Sniffing</a></cite>, G. Hemsley. WHATWG.<dt id=refsMNG>[MNG]<dd><cite><a href=http://www.libpng.org/pub/mng/spec/>MNG (Multiple-image Network Graphics) Format</a></cite>. G. Randers-Pehrson.<dt id=refsMPEG2>[MPEG2]<dd><cite>ISO/IEC 13818-1: Information technology — Generic coding of moving pictures and associated audio information: Systems</cite>. ISO/IEC.<dt id=refsMPEG4>[MPEG4]<dd><cite>ISO/IEC 14496-12: ISO base media file format</cite>. ISO/IEC.<dt id=refsMQ>[MQ]<dd><cite><a href=http://dev.w3.org/csswg/css3-mediaqueries/>Media Queries</a></cite>, H. Lie, T. Çelik, D. Glazman, A. van Kesteren. W3C.<dt id=refsNPAPI>[NPAPI]<dd>(Non-normative) <cite><a href=https://developer.mozilla.org/en/Gecko_Plugin_
API_Reference>Gecko Plugin API Reference</a></cite>. Mozilla.<dt id=refsOGGSKELETONHEADERS>[OGGSKELETONHEADERS]<dd><cite><a href=http://wiki.xiph.org/SkeletonHeaders>SkeletonHeaders</a></cite>. Xiph.Org.<dt id=refsOPENSEARCH>[OPENSEARCH]<dd><cite><a href=http://www.opensearch.org/Specifications/OpenSearch/1.1#Autodiscovery_in_HTML.2FXHTML>Autodiscovery in HTML/XHTML</a></cite>. In <cite>OpenSearch 1.1 Draft 4</cite>, Section 4.6.2. OpenSearch.org.<dt id=refsORIGIN>[ORIGIN]<dd><cite><a href=http://tools.ietf.org/html/rfc6454>The Web Origin Concept</a></cite>, A. Barth. IETF.<dt id=refsPAGEVIS>[PAGEVIS]<dd>(Non-normative) <cite><a href=https://w3c.github.io/web-performance/specs/PageVisibility/Overview.html>Page Visibility</a></cite>, J. Mann, A. Jain. W3C.<dt id=refsPDF>[PDF]<dd>(Non-normative) <cite><a href=http://www.adobe.com/devnet/acrobat/pdfs/PDF32000_2008.pdf>Document management — Portable document format — Part 1: PDF</a></cite>. ISO.<dt id=refsPINGBACK>[PINGBACK]
<dd><cite><a href=http://www.hixie.ch/specs/pingback/pingback>Pingback 1.0</a></cite>, S. Langridge, I. Hickson.<dt id=refsPNG>[PNG]<dd><cite><a href=http://www.w3.org/TR/PNG/>Portable Network Graphics (PNG) Specification</a></cite>, D. Duce. W3C.<dt id=refsPOINTERLOCK>[POINTERLOCK]<dd><cite><a href=http://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html>Pointer Lock</a></cite>, V. Scheib. W3C.<dt id=refsPPUTF8>[PPUTF8]<dd>(Non-normative) <cite><a href=http://www.sw.it.aoyama.ac.jp/2012/pub/IUC11-UTF-8.pdf>The Properties and Promises of UTF-8</a></cite>, M. Dürst. University of Zürich. In <cite>Proceedings of the 11th International Unicode Conference</cite>.<dt id=refsPSL>[PSL]<dd><cite><a href=http://publicsuffix.org/>Public Suffix List</a></cite>.
Mozilla Foundation.<dt id=refsRFC1034>[RFC1034]<dd><cite><a href=http://tools.ietf.org/html/rfc1034>Domain Names - Concepts and Facilities</a></cite>, P. Mockapetris. IETF, November 1987.<dt id=refsRFC1123>[RFC1123]<dd><cite><a href=http://tools.ietf.org/html/rfc1123>Requirements for Internet Hosts -- Application and Support</a></cite>, R. Braden. IETF, October 1989.<dt id=refsRFC1345>[RFC1345]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc1345>Character Mnemonics and Character Sets</a></cite>, K. Simonsen. IETF.<dt id=refsRFC1468>[RFC1468]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc1468>Japanese Character Encoding for Internet Messages</a></cite>, J. Murai, M. Crispin, E. van der Poel. IETF.<dt id=refsRFC1554>[RFC1554]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc1554>ISO-2022-JP-2: Multilingual Extension of ISO-2022-JP</a></cite>, M. Ohta, K. Handa. IETF.<dt id=refsRFC1557>[RFC1557]<dd>(Non-normative) <cite><a href=
http://tools.ietf.org/html/rfc1557>Korean Character Encoding for Internet Messages</a></cite>, U. Choi, K. Chon, H. Park. IETF.<dt id=refsRFC1842>[RFC1842]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc1842>ASCII Printable Characters-Based Chinese Character Encoding for Internet Messages</a></cite>, Y. Wei, Y. Zhang, J. Li, J. Ding, Y. Jiang. IETF.<dt id=refsRFC1922>[RFC1922]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc1922>Chinese Character Encoding for Internet Messages</a></cite>, HF. Zhu, DY. Hu, ZG. Wang, TC. Kao, WCH. Chang, M. Crispin. IETF.<dt id=refsRFC2046>[RFC2046]<dd><cite><a href=http://tools.ietf.org/html/rfc2046>Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types</a></cite>, N. Freed, N. Borenstein. IETF.<dt id=refsRFC2119>[RFC2119]<dd><cite><a href=http://tools.ietf.org/html/rfc2119>Key words for use in RFCs to Indicate Requirement Levels</a></cite>, S. Bradner. IETF.<dt id=refsRFC2237>[RFC2237]<dd>(Non-norm
ative) <cite><a href=http://tools.ietf.org/html/rfc2237>Japanese Character Encoding for Internet Messages</a></cite>, K. Tamaru. IETF.<dt id=refsRFC2313>[RFC2313]<dd><cite><a href=http://tools.ietf.org/html/rfc2313>PKCS #1: RSA Encryption</a></cite>, B. Kaliski. IETF.<dt id=refsRFC2318>[RFC2318]<dd><cite><a href=http://tools.ietf.org/html/rfc2318>The text/css Media Type</a></cite>, H. Lie, B. Bos, C. Lilley. IETF.<dt id=refsRFC2388>[RFC2388]<dd><cite><a href=http://tools.ietf.org/html/rfc2388>Returning Values from Forms: multipart/form-data</a></cite>, L. Masinter. IETF.<dt id=refsRFC2397>[RFC2397]<dd><cite><a href=http://tools.ietf.org/html/rfc2397>The "data" URL scheme</a></cite>, L. Masinter. IETF.<dt id=refsRFC2445>[RFC2445]<dd><cite><a href=http://tools.ietf.org/html/rfc2445>Internet Calendaring and Scheduling Core Object Specification (iCalendar)</a></cite>, F. Dawson, D. Stenerson. IETF.<dt id=refsRFC2483>[RFC2483]<dd><cite><a href=http://tools.ietf.org/html/rfc2483>U
RI Resolution Services Necessary for URN Resolution</a></cite>, M. Mealling, R. Daniel. IETF.<dt id=refsRFC3676>[RFC3676]<dd><cite><a href=http://tools.ietf.org/html/rfc3676>The Text/Plain Format and DelSp Parameters</a></cite>, R. Gellens. IETF.<dt id=refsRFC3023>[RFC3023]<dd><cite><a href=http://tools.ietf.org/html/rfc3023>XML Media Types</a></cite>, M. Murata, S. St. Laurent, D. Kohn. IETF.<dt id=refsRFC3279>[RFC3279]<dd><cite><a href=http://tools.ietf.org/html/rfc3279>Algorithms and Identifiers for the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</a></cite>, W. Polk, R. Housley, L. Bassham. IETF.<dt id=refsRFC3490>[RFC3490]<dd><cite><a href=http://tools.ietf.org/html/rfc3490>Internationalizing Domain Names in Applications (IDNA)</a></cite>, P. Faltstrom, P. Hoffman, A. Costello. IETF.<dt id=refsRFC3864>[RFC3864]<dd><cite><a href=http://tools.ietf.org/html/rfc3864>Registration Procedures for Message Header Fields</a></
cite>, G. Klyne, M. Nottingham, J. Mogul. IETF.<dt id=refsRFC4281>[RFC4281]<dd><cite><a href=http://tools.ietf.org/html/rfc4281>The Codecs Parameter for "Bucket" Media Types</a></cite>, R. Gellens, D. Singer, P. Frojdh. IETF.<dt id=refsRFC4329>[RFC4329]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc4329>Scripting Media Types</a></cite>, B. Höhrmann. IETF.<dt id=refsRFC4395>[RFC4395]<dd><cite><a href=http://tools.ietf.org/html/rfc4395>Guidelines and Registration Procedures for New URI Schemes</a></cite>, T. Hansen, T. Hardie, L. Masinter. IETF.<dt id=refsRFC4648>[RFC4648]<dd><cite><a href=http://tools.ietf.org/html/rfc4648>The Base16, Base32, and Base64 Data Encodings</a></cite>, S. Josefsson. IETF.<dt id=refsRFC5280>[RFC5280]<dd><cite><a href=http://tools.ietf.org/html/rfc5280>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</a></cite>, D. Cooper, S. Santesson, S. Farrell, S. Boeyen, R. Housley, W. Polk. IET
F.<dt id=refsRFC5322>[RFC5322]<dd><cite><a href=http://tools.ietf.org/html/rfc5322>Internet Message Format</a></cite>, P. Resnick. IETF.<dt id=refsSMS>[SMS]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc5724>URI Scheme for Global System for Mobile Communications (GSM) Short Message Service (SMS)</a></cite>, E. Wilde, A. Vaha-Sipila. IETF.<dt id=refsRFC6266>[RFC6266]<dd><cite><a href=http://tools.ietf.org/html/rfc6266>Use of the Content-Disposition Header Field in the Hypertext Transfer Protocol (HTTP)</a></cite>, J. Reschke. IETF.<dt id=refsRFC6350>[RFC6350]<dd><cite><a href=http://tools.ietf.org/html/rfc6350>vCard Format Specification</a></cite>, S. Perreault. IETF.<dt id=refsSCSU>[SCSU]<dd>(Non-normative) <cite><a href=http://www.unicode.org/reports/tr6/>UTR #6: A Standard Compression Scheme For Unicode</a></cite>, M. Wolf, K. Whistler, C. Wicksteed, M. Davis, A. Freytag, M. Scherer. Unicode Consortium.<dt id=refsSELECTORS>[SELECTORS]<dd><cite><a href=http
://dev.w3.org/csswg/selectors/>Selectors</a></cite>, E. Etemad, T. Çelik, D. Glazman, I. Hickson, P. Linss, J. Williams. W3C.<dt id=refsSRGB>[SRGB]<dd><cite lang=en-GB><a href="http://webstore.iec.ch/webstore/webstore.nsf/artnum/025408!OpenDocument&Click=">IEC 61966-2-1: Multimedia systems and equipment — Colour measurement and management — Part 2-1: Colour management — Default RGB colour space — sRGB</a></cite>. IEC.<dt id=refsSVG>[SVG]<dd><cite><a href=http://www.w3.org/TR/SVGTiny12/>Scalable Vector Graphics (SVG) Tiny 1.2 Specification</a></cite>, O. Andersson, R. Berjon, E. Dahlström, A. Emmons, J. Ferraiolo, A. Grasso, V. Hardy, S. Hayman, D. Jackson, C. Lilley, C. McCormack, A. Neumann, C. Northway, A. Quint, N. Ramani, D. Schepers, A. Shellshear. W3C.<dt id=refsTOR>[TOR]<dd>(Non-normative) <cite><a href=https://www.torproject.org/>Tor</a></cite>.<dt id=refsTOUCH>[TOUCH]<dd><cite><a href=https://dvcs.w3.org/hg/webevents/raw-file/v1/touchevents.html>Touch
Events</a></cite>, D. Schepers, S. Moon, M. Brubeck, A. Barstow. W3C.<dt id=refsTZDATABASE>[TZDATABASE]<dd>(Non-normative) <cite><a href=http://www.iana.org/time-zones>Time Zone Database</a></cite>. IANA.<dt id=refsUAAG>[UAAG]<dd>(Non-normative) <cite><a href=http://www.w3.org/TR/UAAG20/>User Agent Accessibility Guidelines (UAAG) 2.0</a></cite>, J. Allan, K. Ford, J. Richards, J. Spellman. W3C.<dt id=refsUCA>[UCA]<dd><cite><a href=http://www.unicode.org/reports/tr10/>UTR #10: Unicode Collation Algorithm</a></cite>, M. Davis, K. Whistler. Unicode Consortium.<dt id=refsUNICODE>[UNICODE]<dd><cite><a href=http://www.unicode.org/versions/>The Unicode Standard</a></cite>. Unicode Consortium.<dt id=refsUNIVCHARDET>[UNIVCHARDET]<dd>(Non-normative) <cite><a href=http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html>A composite approach to language/encoding detection</a></cite>, S. Li, K. Momoi. Netscape. In <cite>Proceedings of the 19th International Unicode Conference<
/cite>.<dt id=refsURL>[URL]<dd><cite><a href=http://url.spec.whatwg.org/>URL</a></cite>, A. van Kesteren. WHATWG.<dt id=refsURN>[URN]<dd><cite><a href=http://tools.ietf.org/html/rfc2141>URN Syntax</a></cite>, R. Moats. IETF.<dt id=refsUTF7>[UTF7]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc2152>UTF-7: A Mail-Safe Transformation Format of Unicode</a></cite>, D. Goldsmith, M. Davis. IETF.<dt id=refsUTF8DET>[UTF8DET]<dd>(Non-normative) <cite><a href=http://www.w3.org/International/questions/qa-forms-utf-8>Multilingual form encoding</a></cite>, M. Dürst. W3C.<dt id=refsUTR36>[UTR36]<dd>(Non-normative) <cite><a href=http://www.unicode.org/reports/tr36/>UTR #36: Unicode Security Considerations</a></cite>, M. Davis, M. Suignard. Unicode Consortium.<dt id=refsWCAG>[WCAG]<dd>(Non-normative) <cite><a href=http://www.w3.org/TR/WCAG20/>Web Content Accessibility Guidelines (WCAG) 2.0</a></cite>, B. Caldwell, M. Cooper, L. Reid, G. Vanderheiden. W3C.<dt id=refsWEBGL>[W
EBGL]<dd><cite><a href=http://www.khronos.org/registry/webgl/specs/latest/>WebGL Specification</a></cite>, D. Jackson. Khronos Group.<dt id=refsWEBIDL>[WEBIDL]<dd><cite><a href=http://dev.w3.org/2006/webapi/WebIDL/>Web IDL</a></cite>, C. McCormack. W3C.<dt id=refsWEBLINK>[WEBLINK]<dd><cite><a href=http://tools.ietf.org/html/rfc5988>Web Linking</a></cite>, M. Nottingham. IETF.<dt id=refsWEBMCG>[WEBMCG]<dd><cite><a href=http://www.webmproject.org/code/specs/container/>WebM Container Guidelines</a></cite>. The WebM Project.<dt id=refsWEBVTT>[WEBVTT]<dd><cite><a href=http://dev.w3.org/html5/webvtt/>WebVTT</a></cite>, I. Hickson. W3C.<dt id=refsWHATWGWIKI>[WHATWGWIKI]<dd><cite><a href=http://wiki.whatwg.org/>The WHATWG Wiki</a></cite>. WHATWG.<dt id=refsWSP>[WSP]<dd><cite><a href=http://tools.ietf.org/html/rfc6455>The WebSocket protocol</a></cite>, I. Fette, A. Melnikov. IETF.<dt id=refsX121>[X121]<dd><cite>Recommendation X.121 — International Numbering Plan for Public Data Net
works</cite>, CCITT Blue Book, Fascicle VIII.3, pp. 317-332.<dt id=refsX690>[X690]<dd><cite><a href=http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf>Recommendation X.690 — Information Technology — ASN.1 Encoding Rules — Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER), and Distinguished Encoding Rules (DER)</a></cite>. International Telecommunication Union.<dt id=refsXFN>[XFN]<dd><cite><a href=http://gmpg.org/xfn/11>XFN 1.1 profile</a></cite>, T. Çelik, M. Mullenweg, E. Meyer. GMPG.<dt id=refsXHR>[XHR]<dd><cite><a href=http://xhr.spec.whatwg.org/><code>XMLHttpRequest</code></a></cite>, A. van Kesteren. WHATWG.<dt id=refsXML>[XML]<dd><cite><a href=http://www.w3.org/TR/xml/>Extensible Markup Language</a></cite>, T. Bray, J. Paoli, C. Sperberg-McQueen, E. Maler, F. Yergeau. W3C.<dt id=refsXMLBASE>[XMLBASE]<dd><cite><a href=http://www.w3.org/TR/xmlbase/>XML Base</a></cite>, J. Marsh, R. Tobin. W3C.<dt id=refsXMLNS>[XMLNS]<dd><
cite><a href=http://www.w3.org/TR/xml-names/>Namespaces in XML</a></cite>, T. Bray, D. Hollander, A. Layman, R. Tobin. W3C.<dt id=refsXMLSSPI>[XMLSSPI]<dd><cite><a href=http://www.w3.org/TR/xml-stylesheet/>Associating Style Sheets with XML documents</a></cite>, J. Clark, S. Pieters, H. Thompson. W3C.<dt id=refsXPATH10>[XPATH10]<dd><cite><a href=http://www.w3.org/TR/1999/REC-xpath-19991116>XML Path Language (XPath) Version 1.0</a></cite>, J. Clark, S. DeRose. W3C.<dt id=refsXSLT10>[XSLT10]<dd>(Non-normative) <cite><a href=http://www.w3.org/TR/1999/REC-xslt-19991116>XSL Transformations (XSLT) Version 1.0</a></cite>, J. Clark. W3C.</dl>
Modified: index
===================================================================
--- index 2014-08-25 21:24:20 UTC (rev 8715)
+++ index 2014-08-26 18:59:17 UTC (rev 8716)
@@ -291,7 +291,7 @@
</style><link rel=stylesheet href=status.css><body onload=init()>
<header id=head class="head with-buttons">
<p><a href=//www.whatwg.org/ class=logo><img src=/images/logo width=101 alt=WHATWG height=101></a></p>
- <hgroup><h1 class=allcaps>HTML</h1><h2 id=living-standard-—-last-updated-[date:-01-jan-1901] class="no-num no-toc">Living Standard — Last Updated <span class=pubdate>25 August 2014</span></h2></hgroup>
+ <hgroup><h1 class=allcaps>HTML</h1><h2 id=living-standard-—-last-updated-[date:-01-jan-1901] class="no-num no-toc">Living Standard — Last Updated <span class=pubdate>26 August 2014</span></h2></hgroup>
<nav>
<div>
@@ -2390,6 +2390,12 @@
<ul class=brief><li><dfn id=blob><code>Blob</code></dfn> interface<li><dfn id=file><code>File</code></dfn> interface<li><dfn id=filelist><code>FileList</code></dfn> interface<li><dfn id=dom-blob-close><code>Blob.close()</code></dfn><li><dfn id=dom-blob-type><code>Blob.type</code></dfn><li>The concept of <dfn id=file-error-read>read errors</dfn></ul>
+ <dt>Media Providers<dd>
+
+ <p>This specification references the following interfaces:</p>
+
+ <ul class=brief><li><dfn id=mediastream><code>MediaStream</code></dfn> <a href=#refsMEDIASTREAM>[MEDIASTREAM]</a><li><dfn id=mediasource><code>MediaSource</code></dfn> <a href=#refsMEDIASOURCE>[MEDIASOURCE]</a></ul>
+
<dt>XMLHttpRequest<dd>
<p>This specification references the XMLHttpRequest specification to describe how the two
@@ -21771,6 +21777,7 @@
this specification) implement the following interface:</p>
<pre class=idl>enum <dfn id=canplaytyperesult>CanPlayTypeResult</dfn> { "" /* <a href=#dom-canplaytyperesult-nil id=media-elements:dom-canplaytyperesult-nil>empty string</a> */, "<a href=#dom-canplaytyperesult-maybe id=media-elements:dom-canplaytyperesult-maybe>maybe</a>", "<a href=#dom-canplaytyperesult-probably id=media-elements:dom-canplaytyperesult-probably>probably</a>" };
+typedef (<a href=#mediastream id=media-elements:mediastream>MediaStream</a> or <a href=#mediasource id=media-elements:mediasource>MediaSource</a> or <a href=#blob id=media-elements:blob>Blob</a>) <dfn id=mediaprovider>MediaProvider</dfn>;
interface <dfn id=htmlmediaelement>HTMLMediaElement</dfn> : <a href=#htmlelement id=media-elements:htmlelement>HTMLElement</a> {
// error state
@@ -21778,6 +21785,7 @@
// network state
attribute DOMString <a href=#dom-media-src id=media-elements:dom-media-src>src</a>;
+ attribute <a href=#mediaprovider id=media-elements:mediaprovider>MediaProvider</a>? <a href=#dom-media-srcobject id=media-elements:dom-media-srcobject>srcObject</a>;
readonly attribute DOMString <a href=#dom-media-currentsrc id=media-elements:dom-media-currentsrc>currentSrc</a>;
attribute DOMString <a href=#dom-media-crossorigin id=media-elements:dom-media-crossorigin>crossOrigin</a>;
const unsigned short <a href=#dom-media-network_empty id=media-elements:dom-media-network_empty>NETWORK_EMPTY</a> = 0;
@@ -21920,7 +21928,7 @@
user's request.<dt><dfn id=dom-mediaerror-media_err_network><code>MEDIA_ERR_NETWORK</code></dfn> (numeric value 2)<dd>A network error of some description caused the user agent to stop fetching the <a href=#media-resource id=error-codes:media-resource-2>media
resource</a>, after the resource was established to be usable.<dt><dfn id=dom-mediaerror-media_err_decode><code>MEDIA_ERR_DECODE</code></dfn> (numeric value 3)<dd>An error of some description occurred while decoding the <a href=#media-resource id=error-codes:media-resource-3>media resource</a>, after
the resource was established to be usable.<dt><dfn id=dom-mediaerror-media_err_src_not_supported><code>MEDIA_ERR_SRC_NOT_SUPPORTED</code></dfn> (numeric value 4)<dd>The <a href=#media-resource id=error-codes:media-resource-4>media resource</a> indicated by the <code id=error-codes:attr-media-src><a href=#attr-media-src>src</a></code>
- attribute was not suitable.</dl>
+ attribute or <a href=#assigned-media-provider-object id=error-codes:assigned-media-provider-object>assigned media provider object</a> was not suitable.</dl>
@@ -21957,28 +21965,49 @@
attribute, <a href=#limited-to-only-known-values id=location-of-the-media-resource:limited-to-only-known-values>limited to only known values</a>.</p>
+
+ <p>A <dfn id=media-provider-object>media provider object</dfn> is an object that can represent a <a href=#media-resource id=location-of-the-media-resource:media-resource>media resource</a>,
+ separate from a <a href=#url id=location-of-the-media-resource:url>URL</a>. <code id=location-of-the-media-resource:mediastream><a href=#mediastream>MediaStream</a></code> objects, <code id=location-of-the-media-resource:mediasource><a href=#mediasource>MediaSource</a></code>
+ objects, <code id=location-of-the-media-resource:blob><a href=#blob>Blob</a></code> objects, and <code id=location-of-the-media-resource:file><a href=#file>File</a></code> objects are all <a href=#media-provider-object id=location-of-the-media-resource:media-provider-object>media provider objects</a>.</p>
- <dl class=domintro><dt><var>media</var> . <code id=location-of-the-media-resource:dom-media-currentsrc><a href=#dom-media-currentsrc>currentSrc</a></code><dd>
+
- <p>Returns the address of the current <a href=#media-resource id=location-of-the-media-resource:media-resource>media resource</a>.</p>
+ <p>Each <a href=#media-element id=location-of-the-media-resource:media-element-9>media element</a> can have an <dfn id=assigned-media-provider-object>assigned media provider object</dfn>, which is a
+ <a href=#media-provider-object id=location-of-the-media-resource:media-provider-object-2>media provider object</a>. When a <a href=#media-element id=location-of-the-media-resource:media-element-10>media element</a> is created, it has no
+ <a href=#assigned-media-provider-object id=location-of-the-media-resource:assigned-media-provider-object>assigned media provider object</a>.</p>
- <p>Returns the empty string when there is no <a href=#media-resource id=location-of-the-media-resource:media-resource-2>media resource</a>.</p>
+
+ <dl class=domintro><dt><var>media</var> . <code id=location-of-the-media-resource:dom-media-srcobject><a href=#dom-media-srcobject>srcObject</a></code> [ = <var>source</var> ]<dd>
+
+ <p>Allows the <a href=#media-element id=location-of-the-media-resource:media-element-11>media element</a> to be assigned a <a href=#media-provider-object id=location-of-the-media-resource:media-provider-object-3>media provider object</a>.</p>
+
+ <dt><var>media</var> . <code id=location-of-the-media-resource:dom-media-currentsrc><a href=#dom-media-currentsrc>currentSrc</a></code><dd>
+
+ <p>Returns the address of the current <a href=#media-resource id=location-of-the-media-resource:media-resource-2>media resource</a>, if any.</p>
+
+ <p>Returns the empty string when there is no <a href=#media-resource id=location-of-the-media-resource:media-resource-3>media resource</a>, or it doesn't have an address.</p>
+
</dl>
- <p>The <dfn id=dom-media-currentsrc><code>currentSrc</code></dfn> IDL attribute is initially
+ <p>The <dfn id=dom-media-currentsrc><code>currentSrc</code></dfn> IDL attribute must initially be set to
the empty string. Its value is changed by the <a href=#concept-media-load-algorithm id=location-of-the-media-resource:concept-media-load-algorithm-2>resource
selection algorithm</a> defined below.</p>
+ <p>The <dfn id=dom-media-srcobject><code>srcObject</code></dfn> IDL attribute, on getting,
+ must return the element's <a href=#assigned-media-provider-object id=location-of-the-media-resource:assigned-media-provider-object-2>assigned media provider object</a>, if any, or null otherwise.
+ On setting, it must set the element's <a href=#assigned-media-provider-object id=location-of-the-media-resource:assigned-media-provider-object-3>assigned media provider object</a> to the new
+ value, and then invoke the element's <a href=#media-element-load-algorithm id=location-of-the-media-resource:media-element-load-algorithm-2>media element load algorithm</a>.</p>
+
+
+ <p class=note>There are three ways to specify a <a href=#media-resource id=location-of-the-media-resource:media-resource-4>media resource</a>: the <code id=location-of-the-media-resource:dom-media-srcobject-2><a href=#dom-media-srcobject>srcObject</a></code> IDL attribute, the <code id=location-of-the-media-resource:attr-media-src-5><a href=#attr-media-src>src</a></code> content attribute, and <code id=location-of-the-media-resource:the-source-element-2><a href=#the-source-element>source</a></code> elements. The IDL
+ attribute takes priority, followed by the content attribute, followed by the elements.</p>
- <p class=note>There are two ways to specify a <a href=#media-resource id=location-of-the-media-resource:media-resource-3>media resource</a>, the <code id=location-of-the-media-resource:attr-media-src-5><a href=#attr-media-src>src</a></code> attribute, or <code id=location-of-the-media-resource:the-source-element-2><a href=#the-source-element>source</a></code> elements. The attribute
- overrides the elements.</p>
-
<h5 id=mime-types>4.8.14.3 MIME types</h5>
<p>A <a href=#media-resource id=mime-types:media-resource>media resource</a> can be described in terms of its <em>type</em>, specifically a
@@ -22185,194 +22214,272 @@
<li>
- <p>⌛ If the <a href=#media-element id=loading-the-media-resource:media-element-14>media element</a> has a <code id=loading-the-media-resource:attr-media-src><a href=#attr-media-src>src</a></code>
+ <p>⌛ If the <a href=#media-element id=loading-the-media-resource:media-element-14>media element</a> has an <a href=#assigned-media-provider-object id=loading-the-media-resource:assigned-media-provider-object>assigned media provider
+ object</a>, then let <var>mode</var> be <i>object</i>.</p>
+
+ <p>⌛ Otherwise, if the <a href=#media-element id=loading-the-media-resource:media-element-15>media element</a> has no <a href=#assigned-media-provider-object id=loading-the-media-resource:assigned-media-provider-object-2>assigned media provider
+ object</a> but has a <code id=loading-the-media-resource:attr-media-src><a href=#attr-media-src>src</a></code>
attribute, then let <var>mode</var> be <i>attribute</i>.</p>
- <p>⌛ Otherwise, if the <a href=#media-element id=loading-the-media-resource:media-element-15>media element</a> does not have a <code id=loading-the-media-resource:attr-media-src-2><a href=#attr-media-src>src</a></code> attribute but has a <code id=loading-the-media-resource:the-source-element><a href=#the-source-element>source</a></code> element child, then
+ <p>⌛ Otherwise, if the <a href=#media-element id=loading-the-media-resource:media-element-16>media element</a> does not have an <a href=#assigned-media-provider-object id=loading-the-media-resource:assigned-media-provider-object-3>assigned media provider
+ object</a> and does not have a <code id=loading-the-media-resource:attr-media-src-2><a href=#attr-media-src>src</a></code> attribute, but does have a <code id=loading-the-media-resource:the-source-element><a href=#the-source-element>source</a></code> element child, then
let <var>mode</var> be <i>children</i> and let <var>candidate</var>
be the first such <code id=loading-the-media-resource:the-source-element-2><a href=#the-source-element>source</a></code> element child in <a href=#tree-order id=loading-the-media-resource:tree-order>tree order</a>.</p>
- <p>⌛ Otherwise the <a href=#media-element id=loading-the-media-resource:media-element-16>media element</a> has neither a <code id=loading-the-media-resource:attr-media-src-3><a href=#attr-media-src>src</a></code> attribute nor a <code id=loading-the-media-resource:the-source-element-3><a href=#the-source-element>source</a></code> element child: set the
+ <p>⌛ Otherwise the <a href=#media-element id=loading-the-media-resource:media-element-17>media element</a> has no <a href=#assigned-media-provider-object id=loading-the-media-resource:assigned-media-provider-object-4>assigned media provider
+ object</a> and has neither a <code id=loading-the-media-resource:attr-media-src-3><a href=#attr-media-src>src</a></code> attribute nor a <code id=loading-the-media-resource:the-source-element-3><a href=#the-source-element>source</a></code> element child: set the
<code id=loading-the-media-resource:dom-media-networkstate-4><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_empty-2><a href=#dom-media-network_empty>NETWORK_EMPTY</a></code>, and abort these steps; the
<a href=#synchronous-section id=loading-the-media-resource:synchronous-section-5>synchronous section</a> ends.</p>
- <li><p>⌛ Set the <a href=#media-element id=loading-the-media-resource:media-element-17>media element</a>'s <code id=loading-the-media-resource:dom-media-networkstate-5><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_loading-2><a href=#dom-media-network_loading>NETWORK_LOADING</a></code>.<li><p>⌛ <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-4>Queue a task</a> to <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-4>fire a simple event</a> named <code id=loading-the-media-resource:event-media-loadstart><a href=#event-media-loadstart>loadstart</a></code> at the <a href=#media-element id=loading-the-media-resource:media-element-18>media element</a>.<li>
+ <li><p>⌛ Set the <a href=#media-element id=loading-the-media-resource:media-element-18>media element</a>'s <code id=loading-the-media-resource:dom-media-networkstate-5><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_loading-2><a href=#dom-media-network_loading>NETWORK_LOADING</a></code>.<li><p>⌛ <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-4>Queue a task</a> to <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-4>fire a simple event</a> named <code id=loading-the-media-resource:event-media-loadstart><a href=#event-media-loadstart>loadstart</a></code> at the <a href=#media-element id=loading-the-media-resource:media-element-19>media element</a>.<li>
- <p>If <var>mode</var> is <i>attribute</i>, then run these substeps:</p>
+ <p>Run the appropriate steps from the following list:</p>
- <ol><li><p>⌛ If the <code id=loading-the-media-resource:attr-media-src-4><a href=#attr-media-src>src</a></code>
- attribute's value is the empty string, then end the <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-6>synchronous section</a>, and jump
- down to the <i>failed with attribute</i> step below.<li><p>⌛ Let <var>absolute URL</var> be the <a href=#absolute-url id=loading-the-media-resource:absolute-url>absolute URL</a> that
- would have resulted from <a href=#resolve-a-url id=loading-the-media-resource:resolve-a-url>resolving</a> the <a href=#url id=loading-the-media-resource:url>URL</a>
- specified by the <code id=loading-the-media-resource:attr-media-src-5><a href=#attr-media-src>src</a></code> attribute's value relative to the
- <a href=#media-element id=loading-the-media-resource:media-element-19>media element</a> when the <code id=loading-the-media-resource:attr-media-src-6><a href=#attr-media-src>src</a></code> attribute was last
- changed.</p>
+ <dl class=switch><dt>If <var>mode</var> is <i>object</i><dd>
- <li><p>⌛ If <var>absolute URL</var> was obtained successfully, set the <code id=loading-the-media-resource:dom-media-currentsrc><a href=#dom-media-currentsrc>currentSrc</a></code> attribute to <var>absolute
- URL</var>.<li><p>End the <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-7>synchronous section</a>, continuing the remaining steps
- asynchronously.<li><p>If <var>absolute URL</var> was obtained successfully, run the <a href=#concept-media-load-resource id=loading-the-media-resource:concept-media-load-resource>resource fetch algorithm</a> with <var>absolute
- URL</var>. If that algorithm returns without aborting <em>this</em> one, then the load
- failed.<li>
+ <ol><li><p>⌛ Set the <code id=loading-the-media-resource:dom-media-currentsrc><a href=#dom-media-currentsrc>currentSrc</a></code> attribute to
+ the empty string.<li><p>End the <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-6>synchronous section</a>, continuing the remaining steps
+ asynchronously.<li><p>Run the <a href=#concept-media-load-resource id=loading-the-media-resource:concept-media-load-resource>resource fetch algorithm</a>
+ with the <a href=#assigned-media-provider-object id=loading-the-media-resource:assigned-media-provider-object-5>assigned media provider object</a>. If that algorithm returns without
+ aborting <em>this</em> one, then the load failed.<li><p><i>Failed with media provider</i>: Reaching this step indicates that the media
+ resource failed to load. <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-5>Queue a task</a> to run the <a href=#dedicated-media-source-failure-steps id=loading-the-media-resource:dedicated-media-source-failure-steps>dedicated media source
+ failure steps</a>.<li><p>Wait for the <a href=#concept-task id=loading-the-media-resource:concept-task-4>task</a> queued by the previous step to have
+ executed.<li><p>Abort these steps. The element won't attempt to load another resource until this
+ algorithm is triggered again.</ol>
- <p><i>Failed with attribute</i>: Reaching this step indicates that the media resource
- failed to load or that the given <a href=#url id=loading-the-media-resource:url-2>URL</a> could not be <a href=#resolve-a-url id=loading-the-media-resource:resolve-a-url-2>resolved</a>. <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-5>Queue a task</a> to run the following steps:</p>
+ <dt>If <var>mode</var> is <i>attribute</i><dd>
- <ol><li><p>Set the <code id=loading-the-media-resource:dom-media-error-2><a href=#dom-media-error>error</a></code> attribute to a new
- <code id=loading-the-media-resource:mediaerror><a href=#mediaerror>MediaError</a></code> object whose <code id=loading-the-media-resource:dom-mediaerror-code><a href=#dom-mediaerror-code>code</a></code> attribute
- is set to <code id=loading-the-media-resource:dom-mediaerror-media_err_src_not_supported><a href=#dom-mediaerror-media_err_src_not_supported>MEDIA_ERR_SRC_NOT_SUPPORTED</a></code>.<li><p><a href="#forget-the-media-element's-media-resource-specific-tracks" id="loading-the-media-resource:forget-the-media-element's-media-resource-specific-tracks-2">Forget the media element's media-resource-specific tracks</a>.<li><p>Set the element's <code id=loading-the-media-resource:dom-media-networkstate-6><a href=#dom-media-networkstate>networkState</a></code> attribute
- to the <code id=loading-the-media-resource:dom-media-network_no_source-2><a href=#dom-media-network_no_source>NETWORK_NO_SOURCE</a></code> value.<li><p>Set the element's <a href=#show-poster-flag id=loading-the-media-resource:show-poster-flag-2>show poster flag</a> to true.<li><p><a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-5>Fire a simple event</a> named <code id=loading-the-media-resource:event-media-error><a href=#event-media-error>error</a></code> at
- the <a href=#media-element id=loading-the-media-resource:media-element-20>media element</a>.<li><p>Set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-3>delaying-the-load-event flag</a> to false. This stops <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-3>delaying the load event</a>.</ol>
+ <ol><li><p>⌛ If the <code id=loading-the-media-resource:attr-media-src-4><a href=#attr-media-src>src</a></code>
+ attribute's value is the empty string, then end the <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-7>synchronous section</a>, and jump
+ down to the <i>failed with attribute</i> step below.<li><p>⌛ Let <var>absolute URL</var> be the <a href=#absolute-url id=loading-the-media-resource:absolute-url>absolute URL</a> that
+ would have resulted from <a href=#resolve-a-url id=loading-the-media-resource:resolve-a-url>resolving</a> the <a href=#url id=loading-the-media-resource:url>URL</a>
+ specified by the <code id=loading-the-media-resource:attr-media-src-5><a href=#attr-media-src>src</a></code> attribute's value relative to the
+ <a href=#media-element id=loading-the-media-resource:media-element-20>media element</a> when the <code id=loading-the-media-resource:attr-media-src-6><a href=#attr-media-src>src</a></code> attribute was last
+ changed.</p>
- <li><p>Wait for the <a href=#concept-task id=loading-the-media-resource:concept-task-4>task</a> queued by the previous step to have
- executed.<li><p>Abort these steps. Until the <code id=loading-the-media-resource:dom-media-load-2><a href=#dom-media-load>load()</a></code> method is
- invoked or the <code id=loading-the-media-resource:attr-media-src-7><a href=#attr-media-src>src</a></code> attribute is changed, the element won't
- attempt to load another resource.</ol>
+ <li><p>⌛ If <var>absolute URL</var> was obtained successfully, set the <code id=loading-the-media-resource:dom-media-currentsrc-2><a href=#dom-media-currentsrc>currentSrc</a></code> attribute to <var>absolute
+ URL</var>.<li><p>End the <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-8>synchronous section</a>, continuing the remaining steps
+ asynchronously.<li><p>If <var>absolute URL</var> was obtained successfully, run the <a href=#concept-media-load-resource id=loading-the-media-resource:concept-media-load-resource-2>resource fetch algorithm</a> with <var>absolute
+ URL</var>. If that algorithm returns without aborting <em>this</em> one, then the load
+ failed.<li><p><i>Failed with attribute</i>: Reaching this step indicates that the media resource
+ failed to load or that the given <a href=#url id=loading-the-media-resource:url-2>URL</a> could not be <a href=#resolve-a-url id=loading-the-media-resource:resolve-a-url-2>resolved</a>. <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-6>Queue a task</a> to run the <a href=#dedicated-media-source-failure-steps id=loading-the-media-resource:dedicated-media-source-failure-steps-2>dedicated media source
+ failure steps</a>.<li><p>Wait for the <a href=#concept-task id=loading-the-media-resource:concept-task-5>task</a> queued by the previous step to have
+ executed.<li><p>Abort these steps. The element won't attempt to load another resource until this
+ algorithm is triggered again.</ol>
- <p>Otherwise, the <code id=loading-the-media-resource:the-source-element-4><a href=#the-source-element>source</a></code> elements will be used; run these substeps:</p>
+ <dt>Otherwise (<var>mode</var> is <i>children</i>)<dd>
- <ol><li>
+ <ol><li>
- <p>⌛ Let <var>pointer</var> be a position defined by two adjacent nodes in the
- <a href=#media-element id=loading-the-media-resource:media-element-21>media element</a>'s child list, treating the start of the list (before the first
- child in the list, if any) and end of the list (after the last child in the list, if any) as
- nodes in their own right. One node is the node before <var>pointer</var>, and the
- other node is the node after <var>pointer</var>. Initially, let <var>pointer</var> be the position between the <var>candidate</var> node and the
- next node, if there are any, or the end of the list, if it is the last node.</p>
+ <p>⌛ Let <var>pointer</var> be a position defined by two adjacent nodes in the
+ <a href=#media-element id=loading-the-media-resource:media-element-21>media element</a>'s child list, treating the start of the list (before the first
+ child in the list, if any) and end of the list (after the last child in the list, if any) as
+ nodes in their own right. One node is the node before <var>pointer</var>, and the
+ other node is the node after <var>pointer</var>. Initially, let <var>pointer</var> be the position between the <var>candidate</var> node and the
+ next node, if there are any, or the end of the list, if it is the last node.</p>
- <p>As nodes are inserted and removed into the <a href=#media-element id=loading-the-media-resource:media-element-22>media element</a>, <var>pointer</var> must be updated as follows:</p>
+ <p>As nodes are inserted and removed into the <a href=#media-element id=loading-the-media-resource:media-element-22>media element</a>, <var>pointer</var> must be updated as follows:</p>
- <dl><dt>If a new node is inserted between the two nodes that define <var>pointer</var><dd>Let <var>pointer</var> be the point between the node before <var>pointer</var> and the new node. In other words, insertions at <var>pointer</var> go after <var>pointer</var>.<dt>If the node before <var>pointer</var> is removed<dd>Let <var>pointer</var> be the point between the node after <var>pointer</var> and the node before the node after <var>pointer</var>. In
- other words, <var>pointer</var> doesn't move relative to the remaining nodes.<dt>If the node after <var>pointer</var> is removed<dd>Let <var>pointer</var> be the point between the node before <var>pointer</var> and the node after the node before <var>pointer</var>. Just
- as with the previous case, <var>pointer</var> doesn't move relative to the remaining
- nodes.</dl>
+ <dl><dt>If a new node is inserted between the two nodes that define <var>pointer</var><dd>Let <var>pointer</var> be the point between the node before <var>pointer</var> and the new node. In other words, insertions at <var>pointer</var> go after <var>pointer</var>.<dt>If the node before <var>pointer</var> is removed<dd>Let <var>pointer</var> be the point between the node after <var>pointer</var> and the node before the node after <var>pointer</var>. In
+ other words, <var>pointer</var> doesn't move relative to the remaining nodes.<dt>If the node after <var>pointer</var> is removed<dd>Let <var>pointer</var> be the point between the node before <var>pointer</var> and the node after the node before <var>pointer</var>. Just
+ as with the previous case, <var>pointer</var> doesn't move relative to the remaining
+ nodes.</dl>
- <p>Other changes don't affect <var>pointer</var>.</p>
+ <p>Other changes don't affect <var>pointer</var>.</p>
- <li><p>⌛ <i>Process candidate</i>: If <var>candidate</var> does not have a
- <code id=loading-the-media-resource:attr-source-src><a href=#attr-source-src>src</a></code> attribute, or if its <code id=loading-the-media-resource:attr-source-src-2><a href=#attr-source-src>src</a></code> attribute's value is the empty string, then end the
- <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-8>synchronous section</a>, and jump down to the <i>failed with elements</i> step
- below.<li><p>⌛ Let <var>absolute URL</var> be the <a href=#absolute-url id=loading-the-media-resource:absolute-url-2>absolute URL</a> that
- would have resulted from <a href=#resolve-a-url id=loading-the-media-resource:resolve-a-url-3>resolving</a> the <a href=#url id=loading-the-media-resource:url-3>URL</a>
- specified by <var>candidate</var>'s <code id=loading-the-media-resource:attr-source-src-3><a href=#attr-source-src>src</a></code>
- attribute's value relative to the <var>candidate</var> when the <code id=loading-the-media-resource:attr-source-src-4><a href=#attr-source-src>src</a></code> attribute was last changed.</p>
+ <li><p>⌛ <i>Process candidate</i>: If <var>candidate</var> does not have a
+ <code id=loading-the-media-resource:attr-source-src><a href=#attr-source-src>src</a></code> attribute, or if its <code id=loading-the-media-resource:attr-source-src-2><a href=#attr-source-src>src</a></code> attribute's value is the empty string, then end the
+ <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-9>synchronous section</a>, and jump down to the <i>failed with elements</i> step
+ below.<li><p>⌛ Let <var>absolute URL</var> be the <a href=#absolute-url id=loading-the-media-resource:absolute-url-2>absolute URL</a> that
+ would have resulted from <a href=#resolve-a-url id=loading-the-media-resource:resolve-a-url-3>resolving</a> the <a href=#url id=loading-the-media-resource:url-3>URL</a>
+ specified by <var>candidate</var>'s <code id=loading-the-media-resource:attr-source-src-3><a href=#attr-source-src>src</a></code>
+ attribute's value relative to the <var>candidate</var> when the <code id=loading-the-media-resource:attr-source-src-4><a href=#attr-source-src>src</a></code> attribute was last changed.</p>
- <li><p>⌛ If <var>absolute URL</var> was not obtained successfully, then end the
- <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-9>synchronous section</a>, and jump down to the <i>failed with elements</i> step
- below.<li><p>⌛ If <var>candidate</var> has a <code id=loading-the-media-resource:attr-source-type><a href=#attr-source-type>type</a></code> attribute whose value, when parsed as a <a href=#mime-type id=loading-the-media-resource:mime-type>MIME
- type</a> (including any codecs described by the <code>codecs</code> parameter, for
- types that define that parameter), represents <a href=#a-type-that-the-user-agent-knows-it-cannot-render id=loading-the-media-resource:a-type-that-the-user-agent-knows-it-cannot-render>a type that the user agent knows it cannot
- render</a>, then end the <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-10>synchronous section</a>, and jump down to the <i>failed with elements</i> step below.<li><p>⌛ Set the <code id=loading-the-media-resource:dom-media-currentsrc-2><a href=#dom-media-currentsrc>currentSrc</a></code> attribute to <var>absolute URL</var>.<li><p>End the <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-11>synchronous section</a>, continuing the remaining steps
- asynchronously.<li><p>Run the <a href=#concept-media-load-resource id=loading-the-media-resource:concept-media-load-resource-2>resource fetch algorithm</a> with
- <var>absolute URL</var>. If that algorithm returns without aborting <em>this</em> one,
- then the load failed.<li><p><i>Failed with elements</i>: <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-6>Queue a task</a> to <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-6>fire a simple
- event</a> named <code id=loading-the-media-resource:event-error><a href=#event-error>error</a></code> at the <var>candidate</var> element.<li><p>Asynchronously <a href=#await-a-stable-state id=loading-the-media-resource:await-a-stable-state-2>await a stable state</a>. The <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-12>synchronous section</a>
- consists of all the remaining steps of this algorithm until the algorithm says the
- <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-13>synchronous section</a> has ended. (Steps in <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-14>synchronous sections</a> are marked with ⌛.)<li><p>⌛ <a href="#forget-the-media-element's-media-resource-specific-tracks" id="loading-the-media-resource:forget-the-media-element's-media-resource-specific-tracks-3">Forget the media element's media-resource-specific
- tracks</a>.<li><p>⌛ <i>Find next candidate</i>: Let <var>candidate</var> be
- null.<li><p>⌛ <i>Search loop</i>: If the node after <var>pointer</var> is
- the end of the list, then jump to the <i>waiting</i> step below.<li><p>⌛ If the node after <var>pointer</var> is a <code id=loading-the-media-resource:the-source-element-5><a href=#the-source-element>source</a></code> element,
- let <var>candidate</var> be that element.<li><p>⌛ Advance <var>pointer</var> so that the node before <var>pointer</var> is now the node that was after <var>pointer</var>, and the node
- after <var>pointer</var> is the node after the node that used to be after <var>pointer</var>, if any.<li><p>⌛ If <var>candidate</var> is null, jump back to the <i>search
- loop</i> step. Otherwise, jump back to the <i>process candidate</i> step.<li><p>⌛ <i>Waiting</i>: Set the element's <code id=loading-the-media-resource:dom-media-networkstate-7><a href=#dom-media-networkstate>networkState</a></code> attribute to the <code id=loading-the-media-resource:dom-media-network_no_source-3><a href=#dom-media-network_no_source>NETWORK_NO_SOURCE</a></code> value.<li><p>⌛ Set the element's <a href=#show-poster-flag id=loading-the-media-resource:show-poster-flag-3>show poster flag</a> to true.<li><p>⌛ <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-7>Queue a task</a> to set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-4>delaying-the-load-event
- flag</a> to false. This stops <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-4>delaying the load
- event</a>.<li><p>End the <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-15>synchronous section</a>, continuing the remaining steps
- asynchronously.<li><p>Wait until the node after <var>pointer</var> is a node other than the end of
- the list. (This step might wait forever.)<li><p>Asynchronously <a href=#await-a-stable-state id=loading-the-media-resource:await-a-stable-state-3>await a stable state</a>. The <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-16>synchronous section</a>
- consists of all the remaining steps of this algorithm until the algorithm says the
- <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-17>synchronous section</a> has ended. (Steps in <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-18>synchronous sections</a> are marked with ⌛.)<li><p>⌛ Set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-5>delaying-the-load-event flag</a> back to true (this
- <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-5>delays the load event</a> again, in case it hasn't been
- fired yet).</p>
+ <li><p>⌛ If <var>absolute URL</var> was not obtained successfully, then end the
+ <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-10>synchronous section</a>, and jump down to the <i>failed with elements</i> step
+ below.<li><p>⌛ If <var>candidate</var> has a <code id=loading-the-media-resource:attr-source-type><a href=#attr-source-type>type</a></code> attribute whose value, when parsed as a <a href=#mime-type id=loading-the-media-resource:mime-type>MIME
+ type</a> (including any codecs described by the <code>codecs</code> parameter, for
+ types that define that parameter), represents <a href=#a-type-that-the-user-agent-knows-it-cannot-render id=loading-the-media-resource:a-type-that-the-user-agent-knows-it-cannot-render>a type that the user agent knows it cannot
+ render</a>, then end the <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-11>synchronous section</a>, and jump down to the <i>failed with elements</i> step below.<li><p>⌛ Set the <code id=loading-the-media-resource:dom-media-currentsrc-3><a href=#dom-media-currentsrc>currentSrc</a></code> attribute to <var>absolute URL</var>.<li><p>End the <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-12>synchronous section</a>, continuing the remaining steps
+ asynchronously.<li><p>Run the <a href=#concept-media-load-resource id=loading-the-media-resource:concept-media-load-resource-3>resource fetch algorithm</a> with
+ <var>absolute URL</var>. If that algorithm returns without aborting <em>this</em> one,
+ then the load failed.<li><p><i>Failed with elements</i>: <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-7>Queue a task</a> to <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-5>fire a simple
+ event</a> named <code id=loading-the-media-resource:event-error><a href=#event-error>error</a></code> at the <var>candidate</var> element.<li><p>Asynchronously <a href=#await-a-stable-state id=loading-the-media-resource:await-a-stable-state-2>await a stable state</a>. The <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-13>synchronous section</a>
+ consists of all the remaining steps of this algorithm until the algorithm says the
+ <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-14>synchronous section</a> has ended. (Steps in <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-15>synchronous sections</a> are marked with ⌛.)<li><p>⌛ <a href="#forget-the-media-element's-media-resource-specific-tracks" id="loading-the-media-resource:forget-the-media-element's-media-resource-specific-tracks-2">Forget the media element's media-resource-specific
+ tracks</a>.<li><p>⌛ <i>Find next candidate</i>: Let <var>candidate</var> be
+ null.<li><p>⌛ <i>Search loop</i>: If the node after <var>pointer</var> is
+ the end of the list, then jump to the <i>waiting</i> step below.<li><p>⌛ If the node after <var>pointer</var> is a <code id=loading-the-media-resource:the-source-element-4><a href=#the-source-element>source</a></code> element,
+ let <var>candidate</var> be that element.<li><p>⌛ Advance <var>pointer</var> so that the node before <var>pointer</var> is now the node that was after <var>pointer</var>, and the node
+ after <var>pointer</var> is the node after the node that used to be after <var>pointer</var>, if any.<li><p>⌛ If <var>candidate</var> is null, jump back to the <i>search
+ loop</i> step. Otherwise, jump back to the <i>process candidate</i> step.<li><p>⌛ <i>Waiting</i>: Set the element's <code id=loading-the-media-resource:dom-media-networkstate-6><a href=#dom-media-networkstate>networkState</a></code> attribute to the <code id=loading-the-media-resource:dom-media-network_no_source-2><a href=#dom-media-network_no_source>NETWORK_NO_SOURCE</a></code> value.<li><p>⌛ Set the element's <a href=#show-poster-flag id=loading-the-media-resource:show-poster-flag-2>show poster flag</a> to true.<li><p>⌛ <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-8>Queue a task</a> to set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-3>delaying-the-load-event
+ flag</a> to false. This stops <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-3>delaying the load
+ event</a>.<li><p>End the <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-16>synchronous section</a>, continuing the remaining steps
+ asynchronously.<li><p>Wait until the node after <var>pointer</var> is a node other than the end of
+ the list. (This step might wait forever.)<li><p>Asynchronously <a href=#await-a-stable-state id=loading-the-media-resource:await-a-stable-state-3>await a stable state</a>. The <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-17>synchronous section</a>
+ consists of all the remaining steps of this algorithm until the algorithm says the
+ <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-18>synchronous section</a> has ended. (Steps in <a href=#synchronous-section id=loading-the-media-resource:synchronous-section-19>synchronous sections</a> are marked with ⌛.)<li><p>⌛ Set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-4>delaying-the-load-event flag</a> back to true (this
+ <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-4>delays the load event</a> again, in case it hasn't been
+ fired yet).</p>
- <li><p>⌛ Set the <code id=loading-the-media-resource:dom-media-networkstate-8><a href=#dom-media-networkstate>networkState</a></code> back to <code id=loading-the-media-resource:dom-media-network_loading-3><a href=#dom-media-network_loading>NETWORK_LOADING</a></code>.<li><p>⌛ Jump back to the <i>find next candidate</i> step above.</ol>
+ <li><p>⌛ Set the <code id=loading-the-media-resource:dom-media-networkstate-7><a href=#dom-media-networkstate>networkState</a></code> back to <code id=loading-the-media-resource:dom-media-network_loading-3><a href=#dom-media-network_loading>NETWORK_LOADING</a></code>.<li><p>⌛ Jump back to the <i>find next candidate</i> step above.</ol>
+ </dl>
+
+ <p>The <dfn id=dedicated-media-source-failure-steps>dedicated media source failure steps</dfn> are the following steps:</p>
+
+ <ol><li><p>Set the <code id=loading-the-media-resource:dom-media-error-2><a href=#dom-media-error>error</a></code> attribute to a new
+ <code id=loading-the-media-resource:mediaerror><a href=#mediaerror>MediaError</a></code> object whose <code id=loading-the-media-resource:dom-mediaerror-code><a href=#dom-mediaerror-code>code</a></code> attribute
+ is set to <code id=loading-the-media-resource:dom-mediaerror-media_err_src_not_supported><a href=#dom-mediaerror-media_err_src_not_supported>MEDIA_ERR_SRC_NOT_SUPPORTED</a></code>.<li><p><a href="#forget-the-media-element's-media-resource-specific-tracks" id="loading-the-media-resource:forget-the-media-element's-media-resource-specific-tracks-3">Forget the media element's media-resource-specific tracks</a>.<li><p>Set the element's <code id=loading-the-media-resource:dom-media-networkstate-8><a href=#dom-media-networkstate>networkState</a></code> attribute to
+ the <code id=loading-the-media-resource:dom-media-network_no_source-3><a href=#dom-media-network_no_source>NETWORK_NO_SOURCE</a></code> value.<li><p>Set the element's <a href=#show-poster-flag id=loading-the-media-resource:show-poster-flag-3>show poster flag</a> to true.<li><p><a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-6>Fire a simple event</a> named <code id=loading-the-media-resource:event-media-error><a href=#event-media-error>error</a></code> at
+ the <a href=#media-element id=loading-the-media-resource:media-element-23>media element</a>.<li><p>Set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-5>delaying-the-load-event flag</a> to false. This stops <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-5>delaying the load event</a>.</ol>
+
</ol>
- <p>The <dfn id=concept-media-load-resource>resource fetch algorithm</dfn> for a <a href=#media-element id=loading-the-media-resource:media-element-23>media
- element</a> and a given <a href=#absolute-url id=loading-the-media-resource:absolute-url-3>absolute URL</a> is as follows:</p>
+ <p>The <dfn id=concept-media-load-resource>resource fetch algorithm</dfn> for a <a href=#media-element id=loading-the-media-resource:media-element-24>media
+ element</a> and a given <a href=#absolute-url id=loading-the-media-resource:absolute-url-3>absolute URL</a> or <a href=#media-provider-object id=loading-the-media-resource:media-provider-object>media provider object</a> is as
+ follows:</p>
- <ol><li><p>Let the <var>current media resource</var> be the resource given by the
- <a href=#absolute-url id=loading-the-media-resource:absolute-url-4>absolute URL</a> passed to this algorithm. This is now the element's <a href=#media-resource id=loading-the-media-resource:media-resource-3>media
+ <ol><li><p>If the algorithm was invoked with a <a href=#url id=loading-the-media-resource:url-4>URL</a>, then let <var>mode</var> be
+ <i>remote</i>, otherwise let <var>mode</var> be <i>local</i>.<li><p>If <var>mode</var> is <i>local</i>, then let the <var>current media resource</var> be the
+ resource given by the <a href=#absolute-url id=loading-the-media-resource:absolute-url-4>absolute URL</a> passed to this algorithm; otherwise, let the
+ <var>current media resource</var> be the resource given by the <a href=#media-provider-object id=loading-the-media-resource:media-provider-object-2>media provider
+ object</a>. Either way, the <var>current media resource</var> is now the element's <a href=#media-resource id=loading-the-media-resource:media-resource-3>media
resource</a>.<li><p>Remove all <a href=#media-resource-specific-text-track id=loading-the-media-resource:media-resource-specific-text-track>media-resource-specific text
- tracks</a> from the <a href=#media-element id=loading-the-media-resource:media-element-24>media element</a>'s <a href=#list-of-pending-text-tracks id=loading-the-media-resource:list-of-pending-text-tracks>list of pending text tracks</a>, if
+ tracks</a> from the <a href=#media-element id=loading-the-media-resource:media-element-25>media element</a>'s <a href=#list-of-pending-text-tracks id=loading-the-media-resource:list-of-pending-text-tracks>list of pending text tracks</a>, if
any.</p>
- <li><p>Optionally, run the following substeps. This is the expected behavior if the user agent
- intends to not attempt to fetch the resource until the user requests it explicitly (e.g. as a way
- to implement the <code id=loading-the-media-resource:attr-media-preload><a href=#attr-media-preload>preload</a></code> attribute's <code id=loading-the-media-resource:attr-media-preload-none><a href=#attr-media-preload-none>none</a></code> keyword).</p>
- <ol><li><p>Set the <code id=loading-the-media-resource:dom-media-networkstate-9><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_idle-2><a href=#dom-media-network_idle>NETWORK_IDLE</a></code>.<li><p><a href=#queue-a-task id=loading-the-media-resource:queue-a-task-8>Queue a task</a> to <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-7>fire a simple event</a> named <code id=loading-the-media-resource:event-media-suspend><a href=#event-media-suspend>suspend</a></code> at the element.<li><p><a href=#queue-a-task id=loading-the-media-resource:queue-a-task-9>Queue a task</a> to set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-6>delaying-the-load-event flag</a>
- to false. This stops <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-6>delaying the load
- event</a>.<li><p>Wait for the task to be run.<li><p>Wait for an implementation-defined event (e.g. the user requesting that the media
- element begin playback).<li><p>Set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-7>delaying-the-load-event flag</a> back to true (this <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-7>delays the load event</a> again, in case it hasn't been fired
- yet).</p>
+ <li>
- <li><p>Set the <code id=loading-the-media-resource:dom-media-networkstate-10><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_loading-4><a href=#dom-media-network_loading>NETWORK_LOADING</a></code>.</ol>
+ <p>Run the appropriate steps from the following list:</p>
- <li>
+ <dl class=switch><dt>If <var>mode</var> is remote<dd>
- <p>Perform a <a href=#potentially-cors-enabled-fetch id=loading-the-media-resource:potentially-cors-enabled-fetch>potentially CORS-enabled fetch</a> of the <var>current media
- resource</var>'s <a href=#absolute-url id=loading-the-media-resource:absolute-url-5>absolute URL</a>, with the <i>mode</i> being the state of the
- <a href=#media-element id=loading-the-media-resource:media-element-25>media element</a>'s <code id=loading-the-media-resource:attr-media-crossorigin><a href=#attr-media-crossorigin>crossorigin</a></code> content
- attribute, the <i>origin</i> being the <a href=#origin-2 id=loading-the-media-resource:origin-2>origin</a> of the <a href=#media-element id=loading-the-media-resource:media-element-26>media element</a>'s
- <code id=loading-the-media-resource:document><a href=#document>Document</a></code>, and the <i>default origin behaviour</i> set to <i>taint</i>.</p>
+ <ol><li>
- <p>The resource obtained in this fashion, if any, contains the <a href=#media-data id=loading-the-media-resource:media-data>media data</a>. It can
- be <a href=#cors-same-origin id=loading-the-media-resource:cors-same-origin>CORS-same-origin</a> or <a href=#cors-cross-origin id=loading-the-media-resource:cors-cross-origin>CORS-cross-origin</a>; this affects whether
- subtitles referenced in the <a href=#media-data id=loading-the-media-resource:media-data-2>media data</a> are exposed in the API and, for
- <code id=loading-the-media-resource:the-video-element><a href=#the-video-element>video</a></code> elements, whether a <code id=loading-the-media-resource:the-canvas-element><a href=#the-canvas-element>canvas</a></code> gets tainted when the video is drawn
- on it.</p>
+ <p>Optionally, run the following substeps. This is the expected behavior if the user agent
+ intends to not attempt to fetch the resource until the user requests it explicitly (e.g. as
+ a way to implement the <code id=loading-the-media-resource:attr-media-preload><a href=#attr-media-preload>preload</a></code> attribute's <code id=loading-the-media-resource:attr-media-preload-none><a href=#attr-media-preload-none>none</a></code> keyword).</p>
- <p>While the load is not suspended (see below), every 350ms (±200ms) or for every byte
- received, whichever is <em>least</em> frequent, <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-10>queue a task</a> to <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-8>fire a simple
- event</a> named <code id=loading-the-media-resource:event-media-progress><a href=#event-media-progress>progress</a></code> at the element.</p>
+ <ol><li><p>Set the <code id=loading-the-media-resource:dom-media-networkstate-9><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_idle-2><a href=#dom-media-network_idle>NETWORK_IDLE</a></code>.<li><p><a href=#queue-a-task id=loading-the-media-resource:queue-a-task-9>Queue a task</a> to <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-7>fire a simple event</a> named <code id=loading-the-media-resource:event-media-suspend><a href=#event-media-suspend>suspend</a></code> at the element.<li><p><a href=#queue-a-task id=loading-the-media-resource:queue-a-task-10>Queue a task</a> to set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-6>delaying-the-load-event flag</a>
+ to false. This stops <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-6>delaying the load
+ event</a>.<li><p>Wait for the task to be run.<li><p>Wait for an implementation-defined event (e.g. the user requesting that the media
+ element begin playback).<li><p>Set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-7>delaying-the-load-event flag</a> back to true (this <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-7>delays the load event</a> again, in case it hasn't been fired
+ yet).</p>
- <p>The <dfn id=stall-timeout>stall timeout</dfn> is a user-agent defined length of time, which should be about
- three seconds. When a <a href=#media-element id=loading-the-media-resource:media-element-27>media element</a> that is actively attempting to obtain
- <a href=#media-data id=loading-the-media-resource:media-data-3>media data</a> has failed to receive any data for a duration equal to the <a href=#stall-timeout id=loading-the-media-resource:stall-timeout>stall
- timeout</a>, the user agent must <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-11>queue a task</a> to <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-9>fire a simple
- event</a> named <code id=loading-the-media-resource:event-media-stalled><a href=#event-media-stalled>stalled</a></code> at the element.</p>
+ <li><p>Set the <code id=loading-the-media-resource:dom-media-networkstate-10><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_loading-4><a href=#dom-media-network_loading>NETWORK_LOADING</a></code>.</ol>
- <p>User agents may allow users to selectively block or slow <a href=#media-data id=loading-the-media-resource:media-data-4>media data</a> downloads.
- When a <a href=#media-element id=loading-the-media-resource:media-element-28>media element</a>'s download has been blocked altogether, the user agent must
- act as if it was stalled (as opposed to acting as if the connection was closed). The rate of the
- download may also be throttled automatically by the user agent, e.g. to balance the download
- with other connections sharing the same bandwidth.</p>
+ <li>
- <p id=resourceSuspend>User agents may decide to not download more content at any time, e.g.
- after buffering five minutes of a one hour media resource, while waiting for the user to decide
- whether to play the resource or not, while waiting for user input in an interactive resource, or
- when the user navigates away from the page. When a <a href=#media-element id=loading-the-media-resource:media-element-29>media element</a>'s download has
- been suspended, the user agent must <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-12>queue a task</a>, to set the <code id=loading-the-media-resource:dom-media-networkstate-11><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_idle-3><a href=#dom-media-network_idle>NETWORK_IDLE</a></code> and <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-10>fire a simple event</a> named
- <code id=loading-the-media-resource:event-media-suspend-2><a href=#event-media-suspend>suspend</a></code> at the element. If and when downloading of the
- resource resumes, the user agent must <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-13>queue a task</a> to set the <code id=loading-the-media-resource:dom-media-networkstate-12><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_loading-5><a href=#dom-media-network_loading>NETWORK_LOADING</a></code>. Between the queuing of these tasks,
- the load is suspended (so <code id=loading-the-media-resource:event-media-progress-2><a href=#event-media-progress>progress</a></code> events don't fire,
- as described above).</p>
+ <p>Perform a <a href=#potentially-cors-enabled-fetch id=loading-the-media-resource:potentially-cors-enabled-fetch>potentially CORS-enabled fetch</a> of the <var>current media
+ resource</var>'s <a href=#absolute-url id=loading-the-media-resource:absolute-url-5>absolute URL</a>, with the <i>mode</i> being the state of the
+ <a href=#media-element id=loading-the-media-resource:media-element-26>media element</a>'s <code id=loading-the-media-resource:attr-media-crossorigin><a href=#attr-media-crossorigin>crossorigin</a></code> content
+ attribute, the <i>origin</i> being the <a href=#origin-2 id=loading-the-media-resource:origin-2>origin</a> of the <a href=#media-element id=loading-the-media-resource:media-element-27>media element</a>'s
+ <code id=loading-the-media-resource:document><a href=#document>Document</a></code>, and the <i>default origin behaviour</i> set to <i>taint</i>.</p>
- <p class=note>The <code id=loading-the-media-resource:attr-media-preload-2><a href=#attr-media-preload>preload</a></code> attribute provides a hint
- regarding how much buffering the author thinks is advisable, even in the absence of the <code id=loading-the-media-resource:attr-media-autoplay><a href=#attr-media-autoplay>autoplay</a></code> attribute.</p>
+ <p>The resource obtained in this fashion, if any, contains the <a href=#media-data id=loading-the-media-resource:media-data>media data</a>. It can
+ be <a href=#cors-same-origin id=loading-the-media-resource:cors-same-origin>CORS-same-origin</a> or <a href=#cors-cross-origin id=loading-the-media-resource:cors-cross-origin>CORS-cross-origin</a>; this affects whether
+ subtitles referenced in the <a href=#media-data id=loading-the-media-resource:media-data-2>media data</a> are exposed in the API and, for
+ <code id=loading-the-media-resource:the-video-element><a href=#the-video-element>video</a></code> elements, whether a <code id=loading-the-media-resource:the-canvas-element><a href=#the-canvas-element>canvas</a></code> gets tainted when the video is drawn
+ on it.</p>
- <p>When a user agent decides to completely stall a download, e.g. if it is waiting until the
- user starts playback before downloading any further content, the user agent must <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-14>queue a
- task</a> to set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-8>delaying-the-load-event flag</a> to false. This stops
- <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-8>delaying the load event</a>.</p>
+ <p>The <dfn id=stall-timeout>stall timeout</dfn> is a user-agent defined length of time, which should be about
+ three seconds. When a <a href=#media-element id=loading-the-media-resource:media-element-28>media element</a> that is actively attempting to obtain
+ <a href=#media-data id=loading-the-media-resource:media-data-3>media data</a> has failed to receive any data for a duration equal to the <a href=#stall-timeout id=loading-the-media-resource:stall-timeout>stall
+ timeout</a>, the user agent must <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-11>queue a task</a> to <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-8>fire a simple
+ event</a> named <code id=loading-the-media-resource:event-media-stalled><a href=#event-media-stalled>stalled</a></code> at the element.</p>
- <p>The user agent may use whatever means necessary to fetch the resource (within the constraints
- put forward by this and other specifications); for example, reconnecting to the server in the
- face of network errors, using HTTP range retrieval requests, or switching to a streaming
- protocol. The user agent must consider a resource erroneous only if it has given up trying to
- fetch it.</p>
+ <p>User agents may allow users to selectively block or slow <a href=#media-data id=loading-the-media-resource:media-data-4>media data</a> downloads.
+ When a <a href=#media-element id=loading-the-media-resource:media-element-29>media element</a>'s download has been blocked altogether, the user agent must
+ act as if it was stalled (as opposed to acting as if the connection was closed). The rate of the
+ download may also be throttled automatically by the user agent, e.g. to balance the download
+ with other connections sharing the same bandwidth.</p>
- <p>To determine the format of the <a href=#media-resource id=loading-the-media-resource:media-resource-4>media resource</a>, the user agent must use the
- <span>rules for sniffing audio and video specifically</span>.</p>
+ <p id=resourceSuspend>User agents may decide to not download more content at any time, e.g.
+ after buffering five minutes of a one hour media resource, while waiting for the user to decide
+ whether to play the resource or not, while waiting for user input in an interactive resource, or
+ when the user navigates away from the page. When a <a href=#media-element id=loading-the-media-resource:media-element-30>media element</a>'s download has
+ been suspended, the user agent must <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-12>queue a task</a>, to set the <code id=loading-the-media-resource:dom-media-networkstate-11><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_idle-3><a href=#dom-media-network_idle>NETWORK_IDLE</a></code> and <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-9>fire a simple event</a> named
+ <code id=loading-the-media-resource:event-media-suspend-2><a href=#event-media-suspend>suspend</a></code> at the element. If and when downloading of the
+ resource resumes, the user agent must <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-13>queue a task</a> to set the <code id=loading-the-media-resource:dom-media-networkstate-12><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_loading-5><a href=#dom-media-network_loading>NETWORK_LOADING</a></code>. Between the queuing of these tasks,
+ the load is suspended (so <code id=loading-the-media-resource:event-media-progress><a href=#event-media-progress>progress</a></code> events don't fire,
+ as described above).</p>
- <p>The <a href=#networking-task-source id=loading-the-media-resource:networking-task-source>networking task source</a> <a href=#concept-task id=loading-the-media-resource:concept-task-5>tasks</a> to process
- the data as it is being fetched must each immediately <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-15>queue a task</a> to run the first
- appropriate steps from the following list. (A new task is used for this so that the work
- described below occurs relative to the <a href=#media-element-event-task-source id=loading-the-media-resource:media-element-event-task-source-2>media element event task source</a> rather than
- the <a href=#networking-task-source id=loading-the-media-resource:networking-task-source-2>networking task source</a>.)</p>
+ <p class=note>The <code id=loading-the-media-resource:attr-media-preload-2><a href=#attr-media-preload>preload</a></code> attribute provides a hint
+ regarding how much buffering the author thinks is advisable, even in the absence of the <code id=loading-the-media-resource:attr-media-autoplay><a href=#attr-media-autoplay>autoplay</a></code> attribute.</p>
- <dl class=switch><dt>If the <a href=#media-data id=loading-the-media-resource:media-data-5>media data</a> cannot be fetched at all, due to network errors, causing the
- user agent to give up trying to fetch the resource<dt>If the <a href=#media-data id=loading-the-media-resource:media-data-6>media data</a> can be fetched but is found by inspection to be in an
+ <p>When a user agent decides to completely stall a download, e.g. if it is waiting until the
+ user starts playback before downloading any further content, the user agent must <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-14>queue a
+ task</a> to set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-8>delaying-the-load-event flag</a> to false. This stops
+ <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-8>delaying the load event</a>.</p>
+
+ <p>The user agent may use whatever means necessary to fetch the resource (within the constraints
+ put forward by this and other specifications); for example, reconnecting to the server in the
+ face of network errors, using HTTP range retrieval requests, or switching to a streaming
+ protocol. The user agent must consider a resource erroneous only if it has given up trying to
+ fetch it.</p>
+
+ <p>To determine the format of the <a href=#media-resource id=loading-the-media-resource:media-resource-4>media resource</a>, the user agent must use the
+ <span>rules for sniffing audio and video specifically</span>.</p>
+
+ <p>While the load is not suspended (see below), every 350ms (±200ms) or for every byte
+ received, whichever is <em>least</em> frequent, <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-15>queue a task</a> to <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-10>fire a simple
+ event</a> named <code id=loading-the-media-resource:event-media-progress-2><a href=#event-media-progress>progress</a></code> at the element.</p>
+
+ <p>The <a href=#networking-task-source id=loading-the-media-resource:networking-task-source>networking task source</a> <a href=#concept-task id=loading-the-media-resource:concept-task-6>tasks</a> to
+ process the data as it is being fetched must each immediately <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-16>queue a task</a> to
+ run the first appropriate steps from the <a href=#media-data-processing-steps-list id=loading-the-media-resource:media-data-processing-steps-list>media data processing steps list</a>
+ below. (A new task is used for this so that the work described below occurs relative to the
+ <a href=#media-element-event-task-source id=loading-the-media-resource:media-element-event-task-source-2>media element event task source</a> rather than the <a href=#networking-task-source id=loading-the-media-resource:networking-task-source-2>networking task
+ source</a>.)</p>
+
+ <p>When the <a href=#networking-task-source id=loading-the-media-resource:networking-task-source-3>networking task source</a> has <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-17>queued</a> the
+ last <a href=#concept-task id=loading-the-media-resource:concept-task-7>task</a> as part of <a href=#fetch id=loading-the-media-resource:fetch>fetching</a> the
+ <a href=#media-resource id=loading-the-media-resource:media-resource-5>media resource</a> (i.e. once the download has completed), if the fetching process
+ completes without errors, including decoding the media data, and if all of the data is available
+ to the user agent without network access, then, the user agent must move on to the <i>final step</i> below.
+ This might never happen, e.g. when streaming an infinite resource such as Web radio, or if the
+ resource is longer than the user agent's ability to cache data.</p>
+
+ <p>While the user agent might still need network access to obtain parts of the <a href=#media-resource id=loading-the-media-resource:media-resource-6>media
+ resource</a>, the user agent must remain on this step.</p>
+
+ <p class=example>For example, if the user agent has discarded the first half of a video, the
+ user agent will remain at this step even once the <a href=#ended-playback id=loading-the-media-resource:ended-playback>playback has
+ ended</a>, because there is always the chance the user will seek back to the start. In fact,
+ in this situation, once <a href=#ended-playback id=loading-the-media-resource:ended-playback-2>playback has ended</a>, the user agent
+ will end up firing a <code id=loading-the-media-resource:event-media-suspend-3><a href=#event-media-suspend>suspend</a></code> event, as described
+ earlier.</p>
+
+ </ol>
+
+ <dt>Otherwise (<var>mode</var> is <i>local</i>)<dd>
+
+ <p>The resource described by the <var>current media resource</var>, if any, contains the
+ <a href=#media-data id=loading-the-media-resource:media-data-5>media data</a>. It is <a href=#cors-same-origin id=loading-the-media-resource:cors-same-origin-2>CORS-same-origin</a>. </p>
+
+ <p>If the <var>current media resource</var> is a raw data stream (e.g. from a
+ <code id=loading-the-media-resource:file><a href=#file>File</a></code> object), then to determine the format of the <a href=#media-resource id=loading-the-media-resource:media-resource-7>media resource</a>,
+ the user agent must use the <span>rules for sniffing audio and video specifically</span>.
+ Otherwise, if the data stream is pre-decoded, then the format is the format given by the
+ relevant specification.</p>
+
+ <p>Whenever new data for the <var>current media resource</var> becomes available, <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-18>queue
+ a task</a> to run the first appropriate steps from the <a href=#media-data-processing-steps-list id=loading-the-media-resource:media-data-processing-steps-list-2>media data processing steps
+ list</a> below.</p>
+
+ <p>When the <var>current media resource</var> is permanently exhausted (e.g. all the bytes of
+ a <code id=loading-the-media-resource:blob><a href=#blob>Blob</a></code> have been processed), if there were no decoding errors, then the user
+ agent must move on to the <i>final step</i> below. This might never happen, e.g. if the
+ <var>current media resource</var> is a <code id=loading-the-media-resource:mediastream><a href=#mediastream>MediaStream</a></code>.</p>
+
+ </dl>
+
+ <p>The <dfn id=media-data-processing-steps-list>media data processing steps list</dfn> is as follows:</p>
+
+ <dl class=switch><dt>If the <a href=#media-data id=loading-the-media-resource:media-data-6>media data</a> cannot be fetched at all, due to network errors, causing the
+ user agent to give up trying to fetch the resource<dt>If the <a href=#media-data id=loading-the-media-resource:media-data-7>media data</a> can be fetched but is found by inspection to be in an
unsupported format, or can otherwise not be rendered at all<dd>
<p>DNS errors, HTTP 4xx and 5xx errors (and equivalents in other protocols), and other fatal
@@ -22384,13 +22491,13 @@
</ol>
- <dt id=found-another-audio-track>If the <a href=#media-resource id=loading-the-media-resource:media-resource-5>media resource</a> is found to have an audio
+ <dt id=found-another-audio-track>If the <a href=#media-resource id=loading-the-media-resource:media-resource-8>media resource</a> is found to have an audio
track<dd>
- <ol><li><p>Create an <code id=loading-the-media-resource:audiotrack><a href=#audiotrack>AudioTrack</a></code> object to represent the audio track.<li><p>Update the <a href=#media-element id=loading-the-media-resource:media-element-30>media element</a>'s <code id=loading-the-media-resource:dom-media-audiotracks><a href=#dom-media-audiotracks>audioTracks</a></code> attribute's <code id=loading-the-media-resource:audiotracklist><a href=#audiotracklist>AudioTrackList</a></code>
+ <ol><li><p>Create an <code id=loading-the-media-resource:audiotrack><a href=#audiotrack>AudioTrack</a></code> object to represent the audio track.<li><p>Update the <a href=#media-element id=loading-the-media-resource:media-element-31>media element</a>'s <code id=loading-the-media-resource:dom-media-audiotracks><a href=#dom-media-audiotracks>audioTracks</a></code> attribute's <code id=loading-the-media-resource:audiotracklist><a href=#audiotracklist>AudioTrackList</a></code>
object with the new <code id=loading-the-media-resource:audiotrack-2><a href=#audiotrack>AudioTrack</a></code> object.<li><p>Let <var>enable</var> be <i>unknown</i>.<li>
- <p>If either the <a href=#media-resource id=loading-the-media-resource:media-resource-6>media resource</a> or the address of the <var>current
+ <p>If either the <a href=#media-resource id=loading-the-media-resource:media-resource-9>media resource</a> or the address of the <var>current
media resource</var> indicate a particular set of audio tracks to enable, or if the user
agent has information that would facilitate the selection of specific audio tracks to
improve the user's experience, then: if this audio track is one of the ones to enable, then
@@ -22401,20 +22508,20 @@
identifier syntax, but it could also be triggered e.g. by the user agent selecting a 5.1
surround sound audio track over a stereo audio track. <a href=#refsMEDIAFRAG>[MEDIAFRAG]</a></p>
- <li><p>If <var>enable</var> is still <i>unknown</i>, then, if the <a href=#media-element id=loading-the-media-resource:media-element-31>media
+ <li><p>If <var>enable</var> is still <i>unknown</i>, then, if the <a href=#media-element id=loading-the-media-resource:media-element-32>media
element</a> does not yet have an <a href=#dom-audiotrack-enabled id=loading-the-media-resource:dom-audiotrack-enabled>enabled</a>
audio track, then set <var>enable</var> to <i>true</i>, otherwise, set <var>enable</var> to <i>false</i>.<li><p>If <var>enable</var> is <i>true</i>, then enable this audio track,
otherwise, do not enable this audio track.<li><p><a href=#concept-event-fire id=loading-the-media-resource:concept-event-fire>Fire</a> a <a href=#concept-events-trusted id=loading-the-media-resource:concept-events-trusted>trusted</a> event with the name <code id=loading-the-media-resource:event-media-addtrack><a href=#event-media-addtrack>addtrack</a></code>, that does not bubble and is not cancelable,
and that uses the <code id=loading-the-media-resource:trackevent><a href=#trackevent>TrackEvent</a></code> interface, with the <code id=loading-the-media-resource:dom-trackevent-track><a href=#dom-trackevent-track>track</a></code> attribute initialised to the new
<code id=loading-the-media-resource:audiotrack-3><a href=#audiotrack>AudioTrack</a></code> object, at this <code id=loading-the-media-resource:audiotracklist-2><a href=#audiotracklist>AudioTrackList</a></code> object.</ol>
- <dt id=found-another-video-track>If the <a href=#media-resource id=loading-the-media-resource:media-resource-7>media resource</a> is found to have a video
+ <dt id=found-another-video-track>If the <a href=#media-resource id=loading-the-media-resource:media-resource-10>media resource</a> is found to have a video
track<dd>
- <ol><li><p>Create a <code id=loading-the-media-resource:videotrack><a href=#videotrack>VideoTrack</a></code> object to represent the video track.<li><p>Update the <a href=#media-element id=loading-the-media-resource:media-element-32>media element</a>'s <code id=loading-the-media-resource:dom-media-videotracks><a href=#dom-media-videotracks>videoTracks</a></code> attribute's <code id=loading-the-media-resource:videotracklist><a href=#videotracklist>VideoTrackList</a></code>
+ <ol><li><p>Create a <code id=loading-the-media-resource:videotrack><a href=#videotrack>VideoTrack</a></code> object to represent the video track.<li><p>Update the <a href=#media-element id=loading-the-media-resource:media-element-33>media element</a>'s <code id=loading-the-media-resource:dom-media-videotracks><a href=#dom-media-videotracks>videoTracks</a></code> attribute's <code id=loading-the-media-resource:videotracklist><a href=#videotracklist>VideoTrackList</a></code>
object with the new <code id=loading-the-media-resource:videotrack-2><a href=#videotrack>VideoTrack</a></code> object.<li><p>Let <var>enable</var> be <i>unknown</i>.<li>
- <p>If either the <a href=#media-resource id=loading-the-media-resource:media-resource-8>media resource</a> or the address of the <var>current
+ <p>If either the <a href=#media-resource id=loading-the-media-resource:media-resource-11>media resource</a> or the address of the <var>current
media resource</var> indicate a particular set of video tracks to enable, or if the user
agent has information that would facilitate the selection of specific video tracks to
improve the user's experience, then: if this video track is the first such video track, then
@@ -22424,7 +22531,7 @@
<p class=example>This could again be triggered by <cite>Media Fragments URI</cite>
fragment identifier syntax.</p>
- <li><p>If <var>enable</var> is still <i>unknown</i>, then, if the <a href=#media-element id=loading-the-media-resource:media-element-33>media
+ <li><p>If <var>enable</var> is still <i>unknown</i>, then, if the <a href=#media-element id=loading-the-media-resource:media-element-34>media
element</a> does not yet have a <a href=#dom-videotrack-selected id=loading-the-media-resource:dom-videotrack-selected>selected</a>
video track, then set <var>enable</var> to <i>true</i>, otherwise, set <var>enable</var> to <i>false</i>.<li><p>If <var>enable</var> is <i>true</i>, then select this track and unselect any
previously selected video tracks, otherwise, do not select this video track. If other tracks
@@ -22432,8 +22539,8 @@
and that uses the <code id=loading-the-media-resource:trackevent-2><a href=#trackevent>TrackEvent</a></code> interface, with the <code id=loading-the-media-resource:dom-trackevent-track-2><a href=#dom-trackevent-track>track</a></code> attribute initialised to the new
<code id=loading-the-media-resource:videotrack-3><a href=#videotrack>VideoTrack</a></code> object, at this <code id=loading-the-media-resource:videotracklist-2><a href=#videotracklist>VideoTrackList</a></code> object.</ol>
- <dt id=getting-media-metadata>Once enough of the <a href=#media-data id=loading-the-media-resource:media-data-7>media data</a> has been fetched to
- determine the duration of the <a href=#media-resource id=loading-the-media-resource:media-resource-9>media resource</a>, its dimensions, and other
+ <dt id=getting-media-metadata>Once enough of the <a href=#media-data id=loading-the-media-resource:media-data-8>media data</a> has been fetched to
+ determine the duration of the <a href=#media-resource id=loading-the-media-resource:media-resource-12>media resource</a>, its dimensions, and other
metadata<dd>
<p>This indicates that the resource is usable. The user agent must follow these substeps:</p>
@@ -22442,13 +22549,13 @@
<p><a href=#defineTimeline id=loading-the-media-resource:defineTimeline>Establish the media timeline</a> for the purposes of the <a href=#current-playback-position id=loading-the-media-resource:current-playback-position-2>current playback
position</a>, the <a href=#earliest-possible-position id=loading-the-media-resource:earliest-possible-position>earliest possible position</a>, and the <a href=#initial-playback-position id=loading-the-media-resource:initial-playback-position-2>initial playback
- position</a>, based on the <a href=#media-data id=loading-the-media-resource:media-data-8>media data</a>.</p>
+ position</a>, based on the <a href=#media-data id=loading-the-media-resource:media-data-9>media data</a>.</p>
<li>
<p>Update the <a href=#timeline-offset id=loading-the-media-resource:timeline-offset-2>timeline offset</a> to the date and time that corresponds to the zero
time in the <a href=#media-timeline id=loading-the-media-resource:media-timeline>media timeline</a> established in the previous step, if any. If no
- explicit time and date is given by the <a href=#media-resource id=loading-the-media-resource:media-resource-10>media resource</a>, the <a href=#timeline-offset id=loading-the-media-resource:timeline-offset-3>timeline
+ explicit time and date is given by the <a href=#media-resource id=loading-the-media-resource:media-resource-13>media resource</a>, the <a href=#timeline-offset id=loading-the-media-resource:timeline-offset-3>timeline
offset</a> must be set to Not-a-Number (NaN).</p>
<li><p>Set the <a href=#current-playback-position id=loading-the-media-resource:current-playback-position-3>current playback position</a> and the <a href=#official-playback-position id=loading-the-media-resource:official-playback-position-3>official playback
@@ -22458,14 +22565,14 @@
the last frame of the resource, if known, on the <a href=#media-timeline id=loading-the-media-resource:media-timeline-2>media timeline</a> established
above. If it is not known (e.g. a stream that is in principle infinite), update the <code id=loading-the-media-resource:dom-media-duration-3><a href=#dom-media-duration>duration</a></code> attribute to the value positive Infinity.</p>
- <p class=note>The user agent <a href=#durationChange>will</a> <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-16>queue a task</a>
+ <p class=note>The user agent <a href=#durationChange>will</a> <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-19>queue a task</a>
to <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-11>fire a simple event</a> named <code id=loading-the-media-resource:event-media-durationchange-2><a href=#event-media-durationchange>durationchange</a></code> at the element at this point.</p>
<li>
- <p>For <code id=loading-the-media-resource:the-video-element-2><a href=#the-video-element>video</a></code> elements, set the <code id=loading-the-media-resource:dom-video-videowidth><a href=#dom-video-videowidth>videoWidth</a></code> and <code id=loading-the-media-resource:dom-video-videoheight><a href=#dom-video-videoheight>videoHeight</a></code> attributes, and <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-17>queue a task</a>
+ <p>For <code id=loading-the-media-resource:the-video-element-2><a href=#the-video-element>video</a></code> elements, set the <code id=loading-the-media-resource:dom-video-videowidth><a href=#dom-video-videowidth>videoWidth</a></code> and <code id=loading-the-media-resource:dom-video-videoheight><a href=#dom-video-videoheight>videoHeight</a></code> attributes, and <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-20>queue a task</a>
to <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-12>fire a simple event</a> named <code id=loading-the-media-resource:event-media-resize><a href=#event-media-resize>resize</a></code> at
- the <a href=#media-element id=loading-the-media-resource:media-element-34>media element</a>.</p>
+ the <a href=#media-element id=loading-the-media-resource:media-element-35>media element</a>.</p>
<p class=note>Further <code id=loading-the-media-resource:event-media-resize-2><a href=#event-media-resize>resize</a></code> events will be fired
if the dimensions subsequently change.</p>
@@ -22479,11 +22586,11 @@
- <li><p>Let <var>jumped</var> be false.<li><p>If the <a href=#media-element id=loading-the-media-resource:media-element-35>media element</a>'s <a href=#default-playback-start-position id=loading-the-media-resource:default-playback-start-position>default playback start position</a> is
- greater than zero, then <a href=#dom-media-seek id=loading-the-media-resource:dom-media-seek>seek</a> to that time, and let <var>jumped</var> be true.<li><p>Let the <a href=#media-element id=loading-the-media-resource:media-element-36>media element</a>'s <a href=#default-playback-start-position id=loading-the-media-resource:default-playback-start-position-2>default playback
+ <li><p>Let <var>jumped</var> be false.<li><p>If the <a href=#media-element id=loading-the-media-resource:media-element-36>media element</a>'s <a href=#default-playback-start-position id=loading-the-media-resource:default-playback-start-position>default playback start position</a> is
+ greater than zero, then <a href=#dom-media-seek id=loading-the-media-resource:dom-media-seek>seek</a> to that time, and let <var>jumped</var> be true.<li><p>Let the <a href=#media-element id=loading-the-media-resource:media-element-37>media element</a>'s <a href=#default-playback-start-position id=loading-the-media-resource:default-playback-start-position-2>default playback
start position</a> be zero.<li>
- <p>If either the <a href=#media-resource id=loading-the-media-resource:media-resource-11>media resource</a> or the address of the <var>current
+ <p>If either the <a href=#media-resource id=loading-the-media-resource:media-resource-14>media resource</a> or the address of the <var>current
media resource</var> indicate a particular start time, then set the <a href=#initial-playback-position id=loading-the-media-resource:initial-playback-position-3>initial playback
position</a> to that time and, if <var>jumped</var> is still false, <a href=#dom-media-seek id=loading-the-media-resource:dom-media-seek-2>seek</a> to that time and let <var>jumped</var> be
true.</p>
@@ -22494,14 +22601,14 @@
<li><p>If there is no <a href=#dom-audiotrack-enabled id=loading-the-media-resource:dom-audiotrack-enabled-2>enabled</a> audio track, then
enable an audio track. This <a href=#toggle-audio-track>will cause a <code>change</code> event to be fired</a>.<li><p>If there is no <a href=#dom-videotrack-selected id=loading-the-media-resource:dom-videotrack-selected-2>selected</a> video track,
- then select a video track. This <a href=#toggle-video-track>will cause a <code>change</code> event to be fired</a>.<li><p>If the <a href=#media-element id=loading-the-media-resource:media-element-37>media element</a> has a <a href=#current-media-controller id=loading-the-media-resource:current-media-controller>current media controller</a>, then:
+ then select a video track. This <a href=#toggle-video-track>will cause a <code>change</code> event to be fired</a>.<li><p>If the <a href=#media-element id=loading-the-media-resource:media-element-38>media element</a> has a <a href=#current-media-controller id=loading-the-media-resource:current-media-controller>current media controller</a>, then:
if <var>jumped</var> is true and the <a href=#initial-playback-position id=loading-the-media-resource:initial-playback-position-4>initial playback position</a>,
relative to the <a href=#current-media-controller id=loading-the-media-resource:current-media-controller-2>current media controller</a>'s timeline, is greater than the
<a href=#current-media-controller id=loading-the-media-resource:current-media-controller-3>current media controller</a>'s <a href=#media-controller-position id=loading-the-media-resource:media-controller-position>media controller position</a>, then
- <a href=#seek-the-media-controller id=loading-the-media-resource:seek-the-media-controller>seek the media controller</a> to the <a href=#media-element id=loading-the-media-resource:media-element-38>media element</a>'s <a href=#initial-playback-position id=loading-the-media-resource:initial-playback-position-5>initial
+ <a href=#seek-the-media-controller id=loading-the-media-resource:seek-the-media-controller>seek the media controller</a> to the <a href=#media-element id=loading-the-media-resource:media-element-39>media element</a>'s <a href=#initial-playback-position id=loading-the-media-resource:initial-playback-position-5>initial
playback position</a>, relative to the <a href=#current-media-controller id=loading-the-media-resource:current-media-controller-4>current media controller</a>'s timeline;
- otherwise, <a href=#dom-media-seek id=loading-the-media-resource:dom-media-seek-3>seek</a> the <a href=#media-element id=loading-the-media-resource:media-element-39>media element</a> to the
- <a href=#media-controller-position id=loading-the-media-resource:media-controller-position-2>media controller position</a>, relative to the <a href=#media-element id=loading-the-media-resource:media-element-40>media element</a>'s
+ otherwise, <a href=#dom-media-seek id=loading-the-media-resource:dom-media-seek-3>seek</a> the <a href=#media-element id=loading-the-media-resource:media-element-40>media element</a> to the
+ <a href=#media-controller-position id=loading-the-media-resource:media-controller-position-2>media controller position</a>, relative to the <a href=#media-element id=loading-the-media-resource:media-element-41>media element</a>'s
timeline.</ol>
<p>Once the <code id=loading-the-media-resource:dom-media-readystate-4><a href=#dom-media-readystate>readyState</a></code> attribute reaches <code id=loading-the-media-resource:dom-media-have_current_data><a href=#dom-media-have_current_data>HAVE_CURRENT_DATA</a></code>, <a href=#fire-loadeddata>after
@@ -22509,54 +22616,54 @@
element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-9>delaying-the-load-event flag</a> to false. This stops <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-9>delaying the load event</a>.</p>
<p class=note>A user agent that is attempting to reduce network usage while still fetching
- the metadata for each <a href=#media-resource id=loading-the-media-resource:media-resource-12>media resource</a> would also stop buffering at this point,
+ the metadata for each <a href=#media-resource id=loading-the-media-resource:media-resource-15>media resource</a> would also stop buffering at this point,
following <a href=#resourceSuspend>the rules described previously</a>, which involve the
- <code id=loading-the-media-resource:dom-media-networkstate-13><a href=#dom-media-networkstate>networkState</a></code> attribute switching to the <code id=loading-the-media-resource:dom-media-network_idle-4><a href=#dom-media-network_idle>NETWORK_IDLE</a></code> value and a <code id=loading-the-media-resource:event-media-suspend-3><a href=#event-media-suspend>suspend</a></code> event firing.</p>
+ <code id=loading-the-media-resource:dom-media-networkstate-13><a href=#dom-media-networkstate>networkState</a></code> attribute switching to the <code id=loading-the-media-resource:dom-media-network_idle-4><a href=#dom-media-network_idle>NETWORK_IDLE</a></code> value and a <code id=loading-the-media-resource:event-media-suspend-4><a href=#event-media-suspend>suspend</a></code> event firing.</p>
<p class=note>The user agent is <em>required</em> to determine the duration of the
- <a href=#media-resource id=loading-the-media-resource:media-resource-13>media resource</a> and go through this step before playing.</p>
+ <a href=#media-resource id=loading-the-media-resource:media-resource-16>media resource</a> and go through this step before playing.</p>
- <dt>Once the entire <a href=#media-resource id=loading-the-media-resource:media-resource-14>media resource</a> has been <a href=#fetch id=loading-the-media-resource:fetch>fetched</a>
+ <dt>Once the entire <a href=#media-resource id=loading-the-media-resource:media-resource-17>media resource</a> has been <a href=#fetch id=loading-the-media-resource:fetch-2>fetched</a>
(but potentially before any of it has been decoded)<dd>
<p><a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-13>Fire a simple event</a> named <code id=loading-the-media-resource:event-media-progress-3><a href=#event-media-progress>progress</a></code>
- at the <a href=#media-element id=loading-the-media-resource:media-element-41>media element</a>.</p>
+ at the <a href=#media-element id=loading-the-media-resource:media-element-42>media element</a>.</p>
<p>Set the <code id=loading-the-media-resource:dom-media-networkstate-14><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_idle-5><a href=#dom-media-network_idle>NETWORK_IDLE</a></code> and <a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-14>fire a simple event</a> named
- <code id=loading-the-media-resource:event-media-suspend-4><a href=#event-media-suspend>suspend</a></code> at the <a href=#media-element id=loading-the-media-resource:media-element-42>media element</a>.</p>
+ <code id=loading-the-media-resource:event-media-suspend-5><a href=#event-media-suspend>suspend</a></code> at the <a href=#media-element id=loading-the-media-resource:media-element-43>media element</a>.</p>
- <p>If the user agent ever discards any <a href=#media-data id=loading-the-media-resource:media-data-9>media data</a> and then needs to resume the
- network activity to obtain it again, then it must <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-18>queue a task</a> to set the <code id=loading-the-media-resource:dom-media-networkstate-15><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_loading-6><a href=#dom-media-network_loading>NETWORK_LOADING</a></code>.</p>
+ <p>If the user agent ever discards any <a href=#media-data id=loading-the-media-resource:media-data-10>media data</a> and then needs to resume the
+ network activity to obtain it again, then it must <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-21>queue a task</a> to set the <code id=loading-the-media-resource:dom-media-networkstate-15><a href=#dom-media-networkstate>networkState</a></code> to <code id=loading-the-media-resource:dom-media-network_loading-6><a href=#dom-media-network_loading>NETWORK_LOADING</a></code>.</p>
- <p class=note>If the user agent can keep the <a href=#media-resource id=loading-the-media-resource:media-resource-15>media resource</a> loaded, then the
- algorithm will continue to its final step below, which aborts the algorithm.</p>
+ <p class=note>If the user agent can keep the <a href=#media-resource id=loading-the-media-resource:media-resource-18>media resource</a> loaded, then the
+ algorithm will continue to its <i>final step</i> below, which aborts the algorithm.</p>
- <dt>If the connection is interrupted after some <a href=#media-data id=loading-the-media-resource:media-data-10>media data</a> has been received,
+ <dt>If the connection is interrupted after some <a href=#media-data id=loading-the-media-resource:media-data-11>media data</a> has been received,
causing the user agent to give up trying to fetch the resource<dd>
- <p>Fatal network errors that occur after the user agent has established whether the <var>current media resource</var> is usable (i.e. once the <a href=#media-element id=loading-the-media-resource:media-element-43>media element</a>'s
+ <p>Fatal network errors that occur after the user agent has established whether the <var>current media resource</var> is usable (i.e. once the <a href=#media-element id=loading-the-media-resource:media-element-44>media element</a>'s
<code id=loading-the-media-resource:dom-media-readystate-5><a href=#dom-media-readystate>readyState</a></code> attribute is no longer <code id=loading-the-media-resource:dom-media-have_nothing-2><a href=#dom-media-have_nothing>HAVE_NOTHING</a></code>) must cause the user agent to execute the
following steps:</p>
<ol><li><p>The user agent should cancel the fetching process.<li><p>Set the <code id=loading-the-media-resource:dom-media-error-3><a href=#dom-media-error>error</a></code> attribute to a new
<code id=loading-the-media-resource:mediaerror-2><a href=#mediaerror>MediaError</a></code> object whose <code id=loading-the-media-resource:dom-mediaerror-code-2><a href=#dom-mediaerror-code>code</a></code> attribute
is set to <code id=loading-the-media-resource:dom-mediaerror-media_err_network><a href=#dom-mediaerror-media_err_network>MEDIA_ERR_NETWORK</a></code>.<li><p><a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-15>Fire a simple event</a> named <code id=loading-the-media-resource:event-media-error-2><a href=#event-media-error>error</a></code> at
- the <a href=#media-element id=loading-the-media-resource:media-element-44>media element</a>.<li><p>Set the element's <code id=loading-the-media-resource:dom-media-networkstate-16><a href=#dom-media-networkstate>networkState</a></code> attribute
+ the <a href=#media-element id=loading-the-media-resource:media-element-45>media element</a>.<li><p>Set the element's <code id=loading-the-media-resource:dom-media-networkstate-16><a href=#dom-media-networkstate>networkState</a></code> attribute
to the <code id=loading-the-media-resource:dom-media-network_idle-6><a href=#dom-media-network_idle>NETWORK_IDLE</a></code> value.<li><p>Set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-10>delaying-the-load-event flag</a> to false. This stops <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-10>delaying the load event</a>.<li><p>Abort the overall <a href=#concept-media-load-algorithm id=loading-the-media-resource:concept-media-load-algorithm-4>resource selection
algorithm</a>.</ol>
- <dt id=fatal-decode-error>If the <a href=#media-data id=loading-the-media-resource:media-data-11>media data</a> is corrupted<dd>
+ <dt id=fatal-decode-error>If the <a href=#media-data id=loading-the-media-resource:media-data-12>media data</a> is corrupted<dd>
- <p>Fatal errors in decoding the <a href=#media-data id=loading-the-media-resource:media-data-12>media data</a> that occur after the user agent has
+ <p>Fatal errors in decoding the <a href=#media-data id=loading-the-media-resource:media-data-13>media data</a> that occur after the user agent has
established whether the <var>current media resource</var> is usable must cause the
user agent to execute the following steps:</p>
<ol><li><p>The user agent should cancel the fetching process.<li><p>Set the <code id=loading-the-media-resource:dom-media-error-4><a href=#dom-media-error>error</a></code> attribute to a new
<code id=loading-the-media-resource:mediaerror-3><a href=#mediaerror>MediaError</a></code> object whose <code id=loading-the-media-resource:dom-mediaerror-code-3><a href=#dom-mediaerror-code>code</a></code> attribute
is set to <code id=loading-the-media-resource:dom-mediaerror-media_err_decode><a href=#dom-mediaerror-media_err_decode>MEDIA_ERR_DECODE</a></code>.<li><p><a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-16>Fire a simple event</a> named <code id=loading-the-media-resource:event-media-error-3><a href=#event-media-error>error</a></code> at
- the <a href=#media-element id=loading-the-media-resource:media-element-45>media element</a>.<li>
+ the <a href=#media-element id=loading-the-media-resource:media-element-46>media element</a>.<li>
- <p>If the <a href=#media-element id=loading-the-media-resource:media-element-46>media element</a>'s <code id=loading-the-media-resource:dom-media-readystate-6><a href=#dom-media-readystate>readyState</a></code>
+ <p>If the <a href=#media-element id=loading-the-media-resource:media-element-47>media element</a>'s <code id=loading-the-media-resource:dom-media-readystate-6><a href=#dom-media-readystate>readyState</a></code>
attribute has a value equal to <code id=loading-the-media-resource:dom-media-have_nothing-3><a href=#dom-media-have_nothing>HAVE_NOTHING</a></code>, set
the element's <code id=loading-the-media-resource:dom-media-networkstate-17><a href=#dom-media-networkstate>networkState</a></code> attribute to the
<code id=loading-the-media-resource:dom-media-network_empty-3><a href=#dom-media-network_empty>NETWORK_EMPTY</a></code> value, set the element's
@@ -22568,19 +22675,19 @@
<li><p>Set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-11>delaying-the-load-event flag</a> to false. This stops <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-11>delaying the load event</a>.<li><p>Abort the overall <a href=#concept-media-load-algorithm id=loading-the-media-resource:concept-media-load-algorithm-5>resource selection
algorithm</a>.</ol>
- <dt>If the <a href=#media-data id=loading-the-media-resource:media-data-13>media data</a> fetching process is aborted by the user<dd>
+ <dt>If the <a href=#media-data id=loading-the-media-resource:media-data-14>media data</a> fetching process is aborted by the user<dd>
<p>The fetching process is aborted by the user, e.g. because the user
pressed a "stop" button, the user agent must execute the following steps. These steps are not
- followed if the <code id=loading-the-media-resource:dom-media-load-3><a href=#dom-media-load>load()</a></code> method itself is invoked while
+ followed if the <code id=loading-the-media-resource:dom-media-load-2><a href=#dom-media-load>load()</a></code> method itself is invoked while
these steps are running, as the steps above handle that particular kind of abort.</p>
<ol><li><p>The user agent should cancel the fetching process.<li><p>Set the <code id=loading-the-media-resource:dom-media-error-5><a href=#dom-media-error>error</a></code> attribute to a new
<code id=loading-the-media-resource:mediaerror-4><a href=#mediaerror>MediaError</a></code> object whose <code id=loading-the-media-resource:dom-mediaerror-code-4><a href=#dom-mediaerror-code>code</a></code> attribute
is set to <code id=loading-the-media-resource:dom-mediaerror-media_err_aborted><a href=#dom-mediaerror-media_err_aborted>MEDIA_ERR_ABORTED</a></code>.<li><p><a href=#fire-a-simple-event id=loading-the-media-resource:fire-a-simple-event-18>Fire a simple event</a> named <code id=loading-the-media-resource:event-media-abort-2><a href=#event-media-abort>abort</a></code> at
- the <a href=#media-element id=loading-the-media-resource:media-element-47>media element</a>.<li>
+ the <a href=#media-element id=loading-the-media-resource:media-element-48>media element</a>.<li>
- <p>If the <a href=#media-element id=loading-the-media-resource:media-element-48>media element</a>'s <code id=loading-the-media-resource:dom-media-readystate-7><a href=#dom-media-readystate>readyState</a></code>
+ <p>If the <a href=#media-element id=loading-the-media-resource:media-element-49>media element</a>'s <code id=loading-the-media-resource:dom-media-readystate-7><a href=#dom-media-readystate>readyState</a></code>
attribute has a value equal to <code id=loading-the-media-resource:dom-media-have_nothing-4><a href=#dom-media-have_nothing>HAVE_NOTHING</a></code>, set
the element's <code id=loading-the-media-resource:dom-media-networkstate-19><a href=#dom-media-networkstate>networkState</a></code> attribute to the
<code id=loading-the-media-resource:dom-media-network_empty-4><a href=#dom-media-network_empty>NETWORK_EMPTY</a></code> value, set the element's
@@ -22592,7 +22699,7 @@
<li><p>Set the element's <a href=#delaying-the-load-event-flag id=loading-the-media-resource:delaying-the-load-event-flag-12>delaying-the-load-event flag</a> to false. This stops <a href=#delay-the-load-event id=loading-the-media-resource:delay-the-load-event-12>delaying the load event</a>.<li><p>Abort the overall <a href=#concept-media-load-algorithm id=loading-the-media-resource:concept-media-load-algorithm-6>resource selection
algorithm</a>.</ol>
- <dt id=non-fatal-media-error>If the <a href=#media-data id=loading-the-media-resource:media-data-14>media data</a> can be fetched but has non-fatal
+ <dt id=non-fatal-media-error>If the <a href=#media-data id=loading-the-media-resource:media-data-15>media data</a> can be fetched but has non-fatal
errors or uses, in part, codecs that are unsupported, preventing the user agent from rendering
the content completely correctly but not preventing playback altogether<dd>
@@ -22601,11 +22708,11 @@
- <dt id=found-a-media-resource-specific-timed-track>If the <a href=#media-resource id=loading-the-media-resource:media-resource-16>media resource</a> is
+ <dt id=found-a-media-resource-specific-timed-track>If the <a href=#media-resource id=loading-the-media-resource:media-resource-19>media resource</a> is
found to declare a <a href=#media-resource-specific-text-track id=loading-the-media-resource:media-resource-specific-text-track-2>media-resource-specific text track</a> that the user agent
supports<dd>
- <p>If the <a href=#media-data id=loading-the-media-resource:media-data-15>media data</a> is <a href=#cors-same-origin id=loading-the-media-resource:cors-same-origin-2>CORS-same-origin</a>, run the <a href=#steps-to-expose-a-media-resource-specific-text-track id=loading-the-media-resource:steps-to-expose-a-media-resource-specific-text-track>steps to
+ <p>If the <a href=#media-data id=loading-the-media-resource:media-data-16>media data</a> is <a href=#cors-same-origin id=loading-the-media-resource:cors-same-origin-3>CORS-same-origin</a>, run the <a href=#steps-to-expose-a-media-resource-specific-text-track id=loading-the-media-resource:steps-to-expose-a-media-resource-specific-text-track>steps to
expose a media-resource-specific text track</a> with the relevant data.</p>
<p class=note>Cross-origin videos do not expose their subtitles, since that would allow
@@ -22614,32 +22721,14 @@
</dl>
- <p>When the <a href=#networking-task-source id=loading-the-media-resource:networking-task-source-3>networking task source</a> has <a href=#queue-a-task id=loading-the-media-resource:queue-a-task-19>queued</a> the
- last <a href=#concept-task id=loading-the-media-resource:concept-task-6>task</a> as part of <a href=#fetch id=loading-the-media-resource:fetch-2>fetching</a> the
- <a href=#media-resource id=loading-the-media-resource:media-resource-17>media resource</a> (i.e. once the download has completed), if the fetching process
- completes without errors, including decoding the media data, and if all of the data is available
- to the user agent without network access, then, the user agent must move on to the next step.
- This might never happen, e.g. when streaming an infinite resource such as Web radio, or if the
- resource is longer than the user agent's ability to cache data.</p>
-
- <p>While the user agent might still need network access to obtain parts of the <a href=#media-resource id=loading-the-media-resource:media-resource-18>media
- resource</a>, the user agent must remain on this step.</p>
-
- <p class=example>For example, if the user agent has discarded the first half of a video, the
- user agent will remain at this step even once the <a href=#ended-playback id=loading-the-media-resource:ended-playback>playback has
- ended</a>, because there is always the chance the user will seek back to the start. In fact,
- in this situation, once <a href=#ended-playback id=loading-the-media-resource:ended-playback-2>playback has ended</a>, the user agent
- will end up firing a <code id=loading-the-media-resource:event-media-suspend-5><a href=#event-media-suspend>suspend</a></code> event, as described
- earlier.</p>
-
- <li><p>If the user agent ever reaches this step (which can only happen if the entire resource
+ <li><p><i>Final step:</i> If the user agent ever reaches this step (which can only happen if the entire resource
gets loaded and kept available): abort the overall <a href=#concept-media-load-algorithm id=loading-the-media-resource:concept-media-load-algorithm-7>resource selection algorithm</a>.</ol>
- <p>When a <a href=#media-element id=loading-the-media-resource:media-element-49>media element</a> is to <dfn id="forget-the-media-element's-media-resource-specific-tracks">forget the media element's media-resource-specific
- tracks</dfn>, the user agent must remove from the <a href=#media-element id=loading-the-media-resource:media-element-50>media element</a>'s <a href=#list-of-text-tracks id=loading-the-media-resource:list-of-text-tracks>list of text
+ <p>When a <a href=#media-element id=loading-the-media-resource:media-element-50>media element</a> is to <dfn id="forget-the-media-element's-media-resource-specific-tracks">forget the media element's media-resource-specific
+ tracks</dfn>, the user agent must remove from the <a href=#media-element id=loading-the-media-resource:media-element-51>media element</a>'s <a href=#list-of-text-tracks id=loading-the-media-resource:list-of-text-tracks>list of text
tracks</a> all the <a href=#media-resource-specific-text-track id=loading-the-media-resource:media-resource-specific-text-track-3>media-resource-specific
- text tracks</a>, then empty the <a href=#media-element id=loading-the-media-resource:media-element-51>media element</a>'s <code id=loading-the-media-resource:dom-media-audiotracks-2><a href=#dom-media-audiotracks>audioTracks</a></code> attribute's <code id=loading-the-media-resource:audiotracklist-3><a href=#audiotracklist>AudioTrackList</a></code> object,
- then empty the <a href=#media-element id=loading-the-media-resource:media-element-52>media element</a>'s <code id=loading-the-media-resource:dom-media-videotracks-2><a href=#dom-media-videotracks>videoTracks</a></code>
+ text tracks</a>, then empty the <a href=#media-element id=loading-the-media-resource:media-element-52>media element</a>'s <code id=loading-the-media-resource:dom-media-audiotracks-2><a href=#dom-media-audiotracks>audioTracks</a></code> attribute's <code id=loading-the-media-resource:audiotracklist-3><a href=#audiotracklist>AudioTrackList</a></code> object,
+ then empty the <a href=#media-element id=loading-the-media-resource:media-element-53>media element</a>'s <code id=loading-the-media-resource:dom-media-videotracks-2><a href=#dom-media-videotracks>videoTracks</a></code>
attribute's <code id=loading-the-media-resource:videotracklist-3><a href=#videotracklist>VideoTrackList</a></code> object. No events (in particular, no <code id=loading-the-media-resource:event-media-removetrack><a href=#event-media-removetrack>removetrack</a></code> events) are fired as part of this; the <code id=loading-the-media-resource:event-media-error-4><a href=#event-media-error>error</a></code> and <code id=loading-the-media-resource:event-media-emptied-4><a href=#event-media-emptied>emptied</a></code>
events, fired by the algorithms that invoke this one, can be used instead.</p>
@@ -22650,7 +22739,7 @@
<p>The <dfn id=attr-media-preload><code>preload</code></dfn> attribute is an <a href=#enumerated-attribute id=loading-the-media-resource:enumerated-attribute>enumerated
attribute</a>. The following table lists the keywords and states for the attribute — the
keywords in the left column map to the states in the cell in the second column on the same row as
- the keyword. The attribute can be changed even once the <a href=#media-resource id=loading-the-media-resource:media-resource-19>media resource</a> is being
+ the keyword. The attribute can be changed even once the <a href=#media-resource id=loading-the-media-resource:media-resource-20>media resource</a> is being
buffered or played; the descriptions in the table below are to be interpreted with that in
mind.</p>
@@ -22663,7 +22752,7 @@
This state does not provide a hint regarding how aggressively to actually download the media resource if buffering starts anyway (e.g. once the user hits "play").
<tr><td><dfn id=attr-media-preload-metadata><code>metadata</code></dfn>
<td><dfn id=attr-media-preload-metadata-state>Metadata</dfn>
- <td>Hints to the user agent that the author does not expect the user to need the media resource, but that fetching the resource metadata (dimensions, track list, duration, etc), and maybe even the first few frames, is reasonable. If the user agent precisely fetches no more than the metadata, then the <a href=#media-element id=loading-the-media-resource:media-element-53>media element</a> will end up with its <code id=loading-the-media-resource:dom-media-readystate-8><a href=#dom-media-readystate>readyState</a></code> attribute set to <code id=loading-the-media-resource:dom-media-have_metadata-2><a href=#dom-media-have_metadata>HAVE_METADATA</a></code>; typically though, some frames will be obtained as well and it will probably be <code id=loading-the-media-resource:dom-media-have_current_data-2><a href=#dom-media-have_current_data>HAVE_CURRENT_DATA</a></code> or <code id=loading-the-media-resource:dom-media-have_future_data><a href=#dom-media-have_future_data>HAVE_FUTURE
_DATA</a></code>.
+ <td>Hints to the user agent that the author does not expect the user to need the media resource, but that fetching the resource metadata (dimensions, track list, duration, etc), and maybe even the first few frames, is reasonable. If the user agent precisely fetches no more than the metadata, then the <a href=#media-element id=loading-the-media-resource:media-element-54>media element</a> will end up with its <code id=loading-the-media-resource:dom-media-readystate-8><a href=#dom-media-readystate>readyState</a></code> attribute set to <code id=loading-the-media-resource:dom-media-have_metadata-2><a href=#dom-media-have_metadata>HAVE_METADATA</a></code>; typically though, some frames will be obtained as well and it will probably be <code id=loading-the-media-resource:dom-media-have_current_data-2><a href=#dom-media-have_current_data>HAVE_CURRENT_DATA</a></code> or <code id=loading-the-media-resource:dom-media-have_future_data><a href=#dom-media-have_future_data>HAVE_FUTURE
_DATA</a></code>.
When the media resource is playing, hints to the user agent that bandwidth is to be considered scarce, e.g. suggesting throttling the download so that the media data is obtained at the slowest possible rate that still maintains consistent playback.
<tr><td><dfn id=attr-media-preload-auto><code>auto</code></dfn>
<td><dfn id=attr-media-preload-auto-state>Automatic</dfn>
@@ -22701,7 +22790,7 @@
<dl class=domintro><dt><var>media</var> . <code id=loading-the-media-resource:dom-media-buffered><a href=#dom-media-buffered>buffered</a></code><dd>
- <p>Returns a <code id=loading-the-media-resource:timeranges><a href=#timeranges>TimeRanges</a></code> object that represents the ranges of the <a href=#media-resource id=loading-the-media-resource:media-resource-20>media
+ <p>Returns a <code id=loading-the-media-resource:timeranges><a href=#timeranges>TimeRanges</a></code> object that represents the ranges of the <a href=#media-resource id=loading-the-media-resource:media-resource-21>media
resource</a> that the user agent has buffered.</p>
</dl>
@@ -22710,7 +22799,7 @@
<p>The <dfn id=dom-media-buffered><code>buffered</code></dfn> attribute must return a new
static <a href=#normalised-timeranges-object id=loading-the-media-resource:normalised-timeranges-object>normalised <code>TimeRanges</code> object</a> that represents the ranges of the
- <a href=#media-resource id=loading-the-media-resource:media-resource-21>media resource</a>, if any, that the user agent has buffered, at the time the attribute
+ <a href=#media-resource id=loading-the-media-resource:media-resource-22>media resource</a>, if any, 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>
@@ -83750,7 +83839,7 @@
- <dl id=ref-list><dt id=refsABNF>[ABNF]<dd><cite><a href=http://www.ietf.org/rfc/std/std68.txt>Augmented BNF for Syntax Specifications: ABNF</a></cite>, D. Crocker, P. Overell. IETF.<dt id=refsABOUT>[ABOUT]<dd><cite><a href=http://tools.ietf.org/html/rfc6694>The 'about' URI scheme</a></cite>, S. Moonesamy. IETF.<dt id=refsAPNG>[APNG]<dd>(Non-normative) <cite><a href=https://wiki.mozilla.org/APNG_Specification>APNG Specification</a></cite>. S. Parmenter, V. Vukicevic, A. Smith. Mozilla.<dt id=refsARIA>[ARIA]<dd><cite><a href=http://www.w3.org/WAI/PF/aria/>Accessible Rich Internet Applications (WAI-ARIA)</a></cite>, J. Craig, M. Cooper, L. Pappas, R. Schwerdtfeger, L. Seeman. W3C.<dt id=refsARIAIMPL>[ARIAIMPL]<dd><cite><a href=http://www.w3.org/WAI/PF/aria-implementation/>WAI-ARIA 1.0 User Agent Implementation Guide</a></cite>, A. Snow-Weaver, M. Cooper. W3C.<dt id=refsATAG>[ATAG]<dd>(Non-normative) <cite><a href=http://www.w3.org/TR/ATAG20/>Authoring Tool Accessibility Guide
lines (ATAG) 2.0</a></cite>, J. Richards, J. Spellman, J. Treviranus. W3C.<dt id=refsATOM>[ATOM]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc4287>The Atom Syndication Format</a></cite>, M. Nottingham, R. Sayre. IETF.<dt id=refsBCP47>[BCP47]<dd><cite><a href=http://www.ietf.org/rfc/bcp/bcp47.txt>Tags for Identifying Languages; Matching of Language Tags</a></cite>, A. Phillips, M. Davis. IETF.<dt id=refsBECSS>[BECSS]<dd><cite><a href=http://www.w3.org/TR/becss/>Behavioral Extensions to CSS</a></cite>, I. Hickson. W3C.<dt id=refsBEZIER>[BEZIER]<dd><cite>Courbes à poles</cite>, P. de Casteljau. INPI, 1959.<dt id=refsBIDI>[BIDI]<dd><cite><a href=http://www.unicode.org/reports/tr9/>UAX #9: Unicode Bidirectional Algorithm</a></cite>, M. Davis. Unicode Consortium.<dt id=refsBOCU1>[BOCU1]<dd>(Non-normative) <cite><a href=http://www.unicode.org/notes/tn6/>UTN #6: BOCU-1: MIME-Compatible Unicode Compression</a></cite>, M. Scherer, M. Davis. Unicode Consortium.<dt id
=refsCESU8>[CESU8]<dd>(Non-normative) <cite><a href=http://www.unicode.org/reports/tr26/>UTR #26: Compatibility Encoding Scheme For UTF-16: 8-BIT (CESU-8)</a></cite>, T. Phipps. Unicode Consortium.<dt id=refsCHARMOD>[CHARMOD]<dd>(Non-normative) <cite><a href=http://www.w3.org/TR/charmod/>Character Model for the World Wide Web 1.0: Fundamentals</a></cite>, M. Dürst, F. Yergeau, R. Ishida, M. Wolf, T. Texin. W3C.<dt id=refsCLDR>[CLDR]<dd><cite><a href=http://cldr.unicode.org/>Unicode Common Locale Data Repository</a></cite>. Unicode.<dt id=refsCOMPOSITE>[COMPOSITE]<dd><cite><a href=http://dev.w3.org/fxtf/compositing/>Compositing and Blending</a></cite>. R. Cabanier, N. Andronikos. W3C.<dt id=refsCOMPUTABLE>[COMPUTABLE]<dd>(Non-normative) <cite><a href=http://www.turingarchive.org/browse.php/B/12>On computable numbers, with an application to the Entscheidungsproblem</a></cite>, A. Turing. In <cite>Proceedings of the London Mathematical Society</cite>, series 2, volume 42, page
s 230-265. London Mathematical Society, 1937.<dt id=refsCOOKIES>[COOKIES]<dd><cite><a href=http://tools.ietf.org/html/rfc6265>HTTP State Management Mechanism</a></cite>, A. Barth. IETF.<dt id=refsCP50220>[CP50220]<dd>(Non-normative) <cite><a href=http://www.iana.org/assignments/charset-reg/CP50220>CP50220</a></cite>, Y. Naruse. IANA.<dt id=refsCSP>[CSP]<dd>(Non-normative) <cite><a href=http://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html>Content Security Policy</a></cite>, B. Sterne, A. Barth. W3C.<dt id=refsCSS>[CSS]<dd><cite><a href=http://www.w3.org/TR/CSS2/>Cascading Style Sheets Level 2 Revision 1</a></cite>, B. Bos, T. Çelik, I. Hickson, H. Lie. W3C.<dt id=refsCSSANIMATIONS>[CSSANIMATIONS]<dd>(Non-normative) <cite><a href=http://dev.w3.org/csswg/css3-animations/>CSS Animations</a></cite>, D. Jackson, D. Hyatt, C. Marrin, S. Galineau, L. Baron. W3C.<dt id=refsCSSATTR>[CSSATTR]<dd><cite><a href=http://dev.w3.org/csswg/css-style-attr/>CSS
Styling Attribute Syntax</a></cite>, T. Çelik, E. Etemad. W3C.<dt id=refsCSSCOLOR>[CSSCOLOR]<dd><cite><a href=http://dev.w3.org/csswg/css3-color/>CSS Color Module Level 3</a></cite>, T. Çelik, C. Lilley, L. Baron. W3C.<dt id=refsCSSFONTLOAD>[CSSFONTLOAD]<dd><cite><a href=http://dev.w3.org/csswg/css-font-loading/>CSS Font Loading</a></cite>, T. Atkins, J. Daggett. W3C.<dt id=refsCSSFONTS>[CSSFONTS]<dd><cite><a href=http://dev.w3.org/csswg/css3-fonts/>CSS Fonts</a></cite>, J. Daggett. W3C.<dt id=refsCSSGC>[CSSGC]<dd><cite><a href=http://dev.w3.org/csswg/css-content>CSS Generated Content</a></cite>, H. Lie, E. Etemad, I. Hickson. W3C.<dt id=refsCSSIMAGES>[CSSIMAGES]<dd><cite><a href=http://dev.w3.org/csswg/css-images/>CSS Image Values and Replaced Content Module</a></cite>, E. Etemad, T. Atkins. W3C.<dt id=refsCSSOM>[CSSOM]<dd><cite><a href=http://dev.w3.org/csswg/cssom/>Cascading Style Sheets Object Model (CSSOM)</a></cite>, S. Pieters, G. Adams. W3C.<dt id=refsCSSOMVIEW>[C
SSOMVIEW]<dd><cite><a href=http://dev.w3.org/csswg/cssom-view/>CSSOM View Module</a></cite>, S. Pieters, G. Adams. W3C.<dt id=refsCSSRUBY>[CSSRUBY]<dd><cite><a href=http://dev.w3.org/csswg/css3-ruby/>CSS3 Ruby Module</a></cite>, R. Ishida. W3C.<dt id=refsCSSTRANSITIONS>[CSSTRANSITIONS]<dd>(Non-normative) <cite><a href=http://dev.w3.org/csswg/css3-transitions/>CSS Transitions</a></cite>, D. Jackson, D. Hyatt, C. Marrin, L. Baron. W3C.<dt id=refsCSSUI>[CSSUI]<dd><cite><a href=http://dev.w3.org/csswg/css3-ui/>CSS3 Basic User Interface Module</a></cite>, T. Çelik. W3C.<dt id=refsCSSSCOPED>[CSSSCOPED]<dd><cite><a href=http://dev.w3.org/csswg/css-scoping/>CSS Scoping</a></cite>, T. Atkins, E. Etemad. W3C.<dt id=refsCSSSYNTAX>[CSSSYNTAX]<dd><cite><a href=http://dev.w3.org/csswg/css-syntax/>CSS Syntax</a></cite>, T. Atkins, S. Sapin. W3C.<dt id=refsCSSVALUES>[CSSVALUES]<dd><cite><a href=http://dev.w3.org/csswg/css3-values/>CSS3 Values and Units</a></cite>, H. Lie, T. Atkins, E. Ete
mad. W3C.<dt id=refsCSSWM>[CSSWM]<dd><cite><a href=http://dev.w3.org/csswg/css-writing-modes>CSS Writing Modes</a></cite>, E. Etemad, K. Ishii. W3C.<dt id=refsDASH>[DASH]<dd><cite><a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=57623">Dynamic adaptive streaming over HTTP (DASH)</a></cite>. ISO.<dt id=refsDOM>[DOM]<dd><cite><a href=http://dom.spec.whatwg.org/>DOM</a></cite>, A. van Kesteren, A. Gregor, Ms2ger. WHATWG.<dt id=refsDOMEVENTS>[DOMEVENTS]<dd><cite><a href=https://dvcs.w3.org/hg/dom3events/raw-file/tip/html/DOM3-Events.html>Document Object Model (DOM) Level 3 Events Specification</a></cite>, G. Kacmarcik, T. Leithead, J. Rossi, D. Schepers, B. Höhrmann, P. Le Hégaret, T. Pixley. W3C.<dt id=refsDOMPARSING>[DOMPARSING]<dd><cite><a href=http://domparsing.spec.whatwg.org/ lang=en-US>DOM Parsing and Serialization</a></cite>, Ms2ger. WHATWG.<dt id=refsDOT>[DOT]<dd>(Non-normative) <cite><a href=http://www.graphviz.org/content/dot-
language>The DOT Language</a></cite>. Graphviz.<dt id=refsE163>[E163]<dd><cite>Recommendation E.163 — Numbering Plan for The International Telephone Service</cite>, CCITT Blue Book, Fascicle II.2, pp. 128-134, November 1988.<dt id=refsECMA262>[ECMA262]<dd><cite><a href=http://people.mozilla.org/~jorendorff/es6-draft.html>ECMAScript Language Specification</a></cite>. ECMA.<dt id=refsEDITING>[EDITING]<dd><cite><a href=http://dvcs.w3.org/hg/editing/raw-file/tip/editing.html>HTML Editing APIs</a></cite>, A. Gregor. W3C Editing APIs CG.<dt id=refsENCODING>[ENCODING]<dd><cite><a href=http://encoding.spec.whatwg.org/>Encoding</a></cite>, A. van Kesteren, J. Bell. WHATWG.<dt id=refsFETCH>[FETCH]<dd><cite><a href=http://fetch.spec.whatwg.org/>Fetch</a></cite>, A. van Kesteren. WHATWG.<dt id=refsFILEAPI>[FILEAPI]<dd><cite><a href=http://dev.w3.org/2006/webapi/FileAPI/>File API</a></cite>, A. Ranganathan. W3C.<dt id=refsFULLSCREEN>[FULLSCREEN]<dd><cite><a href=http://fullscreen.spec.
whatwg.org/>Fullscreen</a></cite>, A. van Kesteren, T. Çelik. WHATWG.<dt id=refsGIF>[GIF]<dd>(Non-normative) <cite><a href=http://www.w3.org/Graphics/GIF/spec-gif89a.txt>Graphics Interchange Format</a></cite>. CompuServe.<dt id=refsGRAPHICS>[GRAPHICS]<dd>(Non-normative) <cite>Computer Graphics: Principles and Practice in C</cite>, Second Edition, J. Foley, A. van Dam, S. Feiner, J. Hughes. Addison-Wesley. ISBN 0-201-84840-6.<dt id=refsGREGORIAN>[GREGORIAN]<dd>(Non-normative) <cite>Inter Gravissimas</cite>, A. Lilius, C. Clavius. Gregory XIII Papal Bull, February 1582.<dt id=refsHTTP>[HTTP]<dd><cite><a href=http://tools.ietf.org/html/rfc7230>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</a></cite>, R. Fielding, J. Reschke. IETF.<dd><cite><a href=http://tools.ietf.org/html/rfc7231>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</a></cite>, R. Fielding, J. Reschke. IETF.<dd><cite><a href=http://tools.ietf.org/html/rfc7232>Hypertext Transfer P
rotocol (HTTP/1.1): Conditional Requests</a></cite>, R. Fielding, J. Reschke. IETF.<dd><cite><a href=http://tools.ietf.org/html/rfc7233>Hypertext Transfer Protocol (HTTP/1.1): Range Requests</a></cite>, R. Fielding, Y. Lafon, J. Reschke. IETF.<dd><cite><a href=http://tools.ietf.org/html/rfc7234>Hypertext Transfer Protocol (HTTP/1.1): Caching</a></cite>, R. Fielding, M. Nottingham, J. Reschke. IETF.<dd><cite><a href=http://tools.ietf.org/html/rfc7235>Hypertext Transfer Protocol (HTTP/1.1): Authentication</a></cite>, R. Fielding, J. Reschke. IETF.<dt id=refsHTTPS>[HTTPS]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc2818>HTTP Over TLS</a></cite>, E. Rescorla. IETF.<dt id=refsIANAPERMHEADERS>[IANAPERMHEADERS]<dd><cite><a href=http://www.iana.org/assignments/message-headers/perm-headers.html>Permanent Message Header Field Names</a></cite>. IANA.<dt id=refsINBAND>[INBAND]<dd><cite><a href=http://dev.w3.org/html5/html-sourcing-inband-tracks/>Sourcing In-band Media
Resource Tracks from Media Containers into HTML</a></cite>, S. Pfeiffer, B. Lund. W3C.<dt id=refsISO3166>[ISO3166]<dd><cite><a href=http://www.iso.org/iso/home/standards/country_codes.htm>ISO 3166: Codes for the representation of names of countries and their subdivisions</a></cite>. ISO.<dt id=refsISO8601>[ISO8601]<dd>(Non-normative) <cite><a href="http://isotc.iso.org/livelink/livelink/4021199/ISO_8601_2004_E.zip?func=doc.Fetch&nodeid=4021199">ISO8601: Data elements and interchange formats — Information interchange — Representation of dates and times</a></cite>. ISO.<dt id=refsJLREQ>[JLREQ]<dd><cite><a href=http://www.w3.org/TR/jlreq/>Requirements for Japanese Text Layout</a></cite>. W3C.<dt id=refsJPEG>[JPEG]<dd><cite><a href=http://www.w3.org/Graphics/JPEG/jfif3.pdf>JPEG File Interchange Format</a></cite>, E. Hamilton.<dt id=refsJSON>[JSON]<dd><cite><a href=http://tools.ietf.org/html/rfc4627>The application/json Media Type for JavaScript Object Notation (JSON)</a
></cite>, D. Crockford. IETF.<dt id=refsMAILTO>[MAILTO]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc6068>The 'mailto' URI scheme</a></cite>, M. Duerst, L. Masinter, J. Zawinski. IETF.<dt id=refsMATHML>[MATHML]<dd><cite><a href=http://www.w3.org/TR/MathML/>Mathematical Markup Language (MathML)</a></cite>, D. Carlisle, P. Ion, R. Miner, N. Poppelier. W3C.<dt id=refsMEDIAFRAG>[MEDIAFRAG]<dd><cite><a href=http://www.w3.org/2008/WebVideo/Fragments/WD-media-fragments-spec/>Media Fragments URI</a></cite>, R. Troncy, E. Mannens, S. Pfeiffer, D. Van Deursen. W3C.<dt id=refsMFREL>[MFREL]<dd><cite><a href=http://microformats.org/wiki/existing-rel-values#HTML5_link_type_extensions>Microformats Wiki: existing rel values</a></cite>. Microformats.<dt id=refsMIMESNIFF>[MIMESNIFF]<dd><cite><a href=http://mimesniff.spec.whatwg.org/>MIME Sniffing</a></cite>, G. Hemsley. WHATWG.<dt id=refsMNG>[MNG]<dd><cite><a href=http://www.libpng.org/pub/mng/spec/>MNG (Multiple-image Netwo
rk Graphics) Format</a></cite>. G. Randers-Pehrson.<dt id=refsMPEG2>[MPEG2]<dd><cite>ISO/IEC 13818-1: Information technology — Generic coding of moving pictures and associated audio information: Systems</cite>. ISO/IEC.<dt id=refsMPEG4>[MPEG4]<dd><cite>ISO/IEC 14496-12: ISO base media file format</cite>. ISO/IEC.<dt id=refsMQ>[MQ]<dd><cite><a href=http://dev.w3.org/csswg/css3-mediaqueries/>Media Queries</a></cite>, H. Lie, T. Çelik, D. Glazman, A. van Kesteren. W3C.<dt id=refsNPAPI>[NPAPI]<dd>(Non-normative) <cite><a href=https://developer.mozilla.org/en/Gecko_Plugin_API_Reference>Gecko Plugin API Reference</a></cite>. Mozilla.<dt id=refsOGGSKELETONHEADERS>[OGGSKELETONHEADERS]<dd><cite><a href=http://wiki.xiph.org/SkeletonHeaders>SkeletonHeaders</a></cite>. Xiph.Org.<dt id=refsOPENSEARCH>[OPENSEARCH]<dd><cite><a href=http://www.opensearch.org/Specifications/OpenSearch/1.1#Autodiscovery_in_HTML.2FXHTML>Autodiscovery in HTML/XHTML</a></cite>. In <cite>OpenSearch 1.1 Draft
4</cite>, Section 4.6.2. OpenSearch.org.<dt id=refsORIGIN>[ORIGIN]<dd><cite><a href=http://tools.ietf.org/html/rfc6454>The Web Origin Concept</a></cite>, A. Barth. IETF.<dt id=refsPAGEVIS>[PAGEVIS]<dd>(Non-normative) <cite><a href=https://w3c.github.io/web-performance/specs/PageVisibility/Overview.html>Page Visibility</a></cite>, J. Mann, A. Jain. W3C.<dt id=refsPDF>[PDF]<dd>(Non-normative) <cite><a href=http://www.adobe.com/devnet/acrobat/pdfs/PDF32000_2008.pdf>Document management — Portable document format — Part 1: PDF</a></cite>. ISO.<dt id=refsPINGBACK>[PINGBACK]<dd><cite><a href=http://www.hixie.ch/specs/pingback/pingback>Pingback 1.0</a></cite>, S. Langridge, I. Hickson.<dt id=refsPNG>[PNG]<dd><cite><a href=http://www.w3.org/TR/PNG/>Portable Network Graphics (PNG) Specification</a></cite>, D. Duce. W3C.<dt id=refsPOINTERLOCK>[POINTERLOCK]<dd><cite><a href=http://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html>Pointer Lock</a></cite>, V. Scheib. W3C.<dt id=r
efsPPUTF8>[PPUTF8]<dd>(Non-normative) <cite><a href=http://www.sw.it.aoyama.ac.jp/2012/pub/IUC11-UTF-8.pdf>The Properties and Promises of UTF-8</a></cite>, M. Dürst. University of Zürich. In <cite>Proceedings of the 11th International Unicode Conference</cite>.<dt id=refsPSL>[PSL]<dd><cite><a href=http://publicsuffix.org/>Public Suffix List</a></cite>.
+ <dl id=ref-list><dt id=refsABNF>[ABNF]<dd><cite><a href=http://www.ietf.org/rfc/std/std68.txt>Augmented BNF for Syntax Specifications: ABNF</a></cite>, D. Crocker, P. Overell. IETF.<dt id=refsABOUT>[ABOUT]<dd><cite><a href=http://tools.ietf.org/html/rfc6694>The 'about' URI scheme</a></cite>, S. Moonesamy. IETF.<dt id=refsAPNG>[APNG]<dd>(Non-normative) <cite><a href=https://wiki.mozilla.org/APNG_Specification>APNG Specification</a></cite>. S. Parmenter, V. Vukicevic, A. Smith. Mozilla.<dt id=refsARIA>[ARIA]<dd><cite><a href=http://www.w3.org/WAI/PF/aria/>Accessible Rich Internet Applications (WAI-ARIA)</a></cite>, J. Craig, M. Cooper, L. Pappas, R. Schwerdtfeger, L. Seeman. W3C.<dt id=refsARIAIMPL>[ARIAIMPL]<dd><cite><a href=http://www.w3.org/WAI/PF/aria-implementation/>WAI-ARIA 1.0 User Agent Implementation Guide</a></cite>, A. Snow-Weaver, M. Cooper. W3C.<dt id=refsATAG>[ATAG]<dd>(Non-normative) <cite><a href=http://www.w3.org/TR/ATAG20/>Authoring Tool Accessibility Guide
lines (ATAG) 2.0</a></cite>, J. Richards, J. Spellman, J. Treviranus. W3C.<dt id=refsATOM>[ATOM]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc4287>The Atom Syndication Format</a></cite>, M. Nottingham, R. Sayre. IETF.<dt id=refsBCP47>[BCP47]<dd><cite><a href=http://www.ietf.org/rfc/bcp/bcp47.txt>Tags for Identifying Languages; Matching of Language Tags</a></cite>, A. Phillips, M. Davis. IETF.<dt id=refsBECSS>[BECSS]<dd><cite><a href=http://www.w3.org/TR/becss/>Behavioral Extensions to CSS</a></cite>, I. Hickson. W3C.<dt id=refsBEZIER>[BEZIER]<dd><cite>Courbes à poles</cite>, P. de Casteljau. INPI, 1959.<dt id=refsBIDI>[BIDI]<dd><cite><a href=http://www.unicode.org/reports/tr9/>UAX #9: Unicode Bidirectional Algorithm</a></cite>, M. Davis. Unicode Consortium.<dt id=refsBOCU1>[BOCU1]<dd>(Non-normative) <cite><a href=http://www.unicode.org/notes/tn6/>UTN #6: BOCU-1: MIME-Compatible Unicode Compression</a></cite>, M. Scherer, M. Davis. Unicode Consortium.<dt id
=refsCESU8>[CESU8]<dd>(Non-normative) <cite><a href=http://www.unicode.org/reports/tr26/>UTR #26: Compatibility Encoding Scheme For UTF-16: 8-BIT (CESU-8)</a></cite>, T. Phipps. Unicode Consortium.<dt id=refsCHARMOD>[CHARMOD]<dd>(Non-normative) <cite><a href=http://www.w3.org/TR/charmod/>Character Model for the World Wide Web 1.0: Fundamentals</a></cite>, M. Dürst, F. Yergeau, R. Ishida, M. Wolf, T. Texin. W3C.<dt id=refsCLDR>[CLDR]<dd><cite><a href=http://cldr.unicode.org/>Unicode Common Locale Data Repository</a></cite>. Unicode.<dt id=refsCOMPOSITE>[COMPOSITE]<dd><cite><a href=http://dev.w3.org/fxtf/compositing/>Compositing and Blending</a></cite>. R. Cabanier, N. Andronikos. W3C.<dt id=refsCOMPUTABLE>[COMPUTABLE]<dd>(Non-normative) <cite><a href=http://www.turingarchive.org/browse.php/B/12>On computable numbers, with an application to the Entscheidungsproblem</a></cite>, A. Turing. In <cite>Proceedings of the London Mathematical Society</cite>, series 2, volume 42, page
s 230-265. London Mathematical Society, 1937.<dt id=refsCOOKIES>[COOKIES]<dd><cite><a href=http://tools.ietf.org/html/rfc6265>HTTP State Management Mechanism</a></cite>, A. Barth. IETF.<dt id=refsCP50220>[CP50220]<dd>(Non-normative) <cite><a href=http://www.iana.org/assignments/charset-reg/CP50220>CP50220</a></cite>, Y. Naruse. IANA.<dt id=refsCSP>[CSP]<dd>(Non-normative) <cite><a href=http://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html>Content Security Policy</a></cite>, B. Sterne, A. Barth. W3C.<dt id=refsCSS>[CSS]<dd><cite><a href=http://www.w3.org/TR/CSS2/>Cascading Style Sheets Level 2 Revision 1</a></cite>, B. Bos, T. Çelik, I. Hickson, H. Lie. W3C.<dt id=refsCSSANIMATIONS>[CSSANIMATIONS]<dd>(Non-normative) <cite><a href=http://dev.w3.org/csswg/css3-animations/>CSS Animations</a></cite>, D. Jackson, D. Hyatt, C. Marrin, S. Galineau, L. Baron. W3C.<dt id=refsCSSATTR>[CSSATTR]<dd><cite><a href=http://dev.w3.org/csswg/css-style-attr/>CSS
Styling Attribute Syntax</a></cite>, T. Çelik, E. Etemad. W3C.<dt id=refsCSSCOLOR>[CSSCOLOR]<dd><cite><a href=http://dev.w3.org/csswg/css3-color/>CSS Color Module Level 3</a></cite>, T. Çelik, C. Lilley, L. Baron. W3C.<dt id=refsCSSFONTLOAD>[CSSFONTLOAD]<dd><cite><a href=http://dev.w3.org/csswg/css-font-loading/>CSS Font Loading</a></cite>, T. Atkins, J. Daggett. W3C.<dt id=refsCSSFONTS>[CSSFONTS]<dd><cite><a href=http://dev.w3.org/csswg/css3-fonts/>CSS Fonts</a></cite>, J. Daggett. W3C.<dt id=refsCSSGC>[CSSGC]<dd><cite><a href=http://dev.w3.org/csswg/css-content>CSS Generated Content</a></cite>, H. Lie, E. Etemad, I. Hickson. W3C.<dt id=refsCSSIMAGES>[CSSIMAGES]<dd><cite><a href=http://dev.w3.org/csswg/css-images/>CSS Image Values and Replaced Content Module</a></cite>, E. Etemad, T. Atkins. W3C.<dt id=refsCSSOM>[CSSOM]<dd><cite><a href=http://dev.w3.org/csswg/cssom/>Cascading Style Sheets Object Model (CSSOM)</a></cite>, S. Pieters, G. Adams. W3C.<dt id=refsCSSOMVIEW>[C
SSOMVIEW]<dd><cite><a href=http://dev.w3.org/csswg/cssom-view/>CSSOM View Module</a></cite>, S. Pieters, G. Adams. W3C.<dt id=refsCSSRUBY>[CSSRUBY]<dd><cite><a href=http://dev.w3.org/csswg/css3-ruby/>CSS3 Ruby Module</a></cite>, R. Ishida. W3C.<dt id=refsCSSTRANSITIONS>[CSSTRANSITIONS]<dd>(Non-normative) <cite><a href=http://dev.w3.org/csswg/css3-transitions/>CSS Transitions</a></cite>, D. Jackson, D. Hyatt, C. Marrin, L. Baron. W3C.<dt id=refsCSSUI>[CSSUI]<dd><cite><a href=http://dev.w3.org/csswg/css3-ui/>CSS3 Basic User Interface Module</a></cite>, T. Çelik. W3C.<dt id=refsCSSSCOPED>[CSSSCOPED]<dd><cite><a href=http://dev.w3.org/csswg/css-scoping/>CSS Scoping</a></cite>, T. Atkins, E. Etemad. W3C.<dt id=refsCSSSYNTAX>[CSSSYNTAX]<dd><cite><a href=http://dev.w3.org/csswg/css-syntax/>CSS Syntax</a></cite>, T. Atkins, S. Sapin. W3C.<dt id=refsCSSVALUES>[CSSVALUES]<dd><cite><a href=http://dev.w3.org/csswg/css3-values/>CSS3 Values and Units</a></cite>, H. Lie, T. Atkins, E. Ete
mad. W3C.<dt id=refsCSSWM>[CSSWM]<dd><cite><a href=http://dev.w3.org/csswg/css-writing-modes>CSS Writing Modes</a></cite>, E. Etemad, K. Ishii. W3C.<dt id=refsDASH>[DASH]<dd><cite><a href="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=57623">Dynamic adaptive streaming over HTTP (DASH)</a></cite>. ISO.<dt id=refsDOM>[DOM]<dd><cite><a href=http://dom.spec.whatwg.org/>DOM</a></cite>, A. van Kesteren, A. Gregor, Ms2ger. WHATWG.<dt id=refsDOMEVENTS>[DOMEVENTS]<dd><cite><a href=https://dvcs.w3.org/hg/dom3events/raw-file/tip/html/DOM3-Events.html>Document Object Model (DOM) Level 3 Events Specification</a></cite>, G. Kacmarcik, T. Leithead, J. Rossi, D. Schepers, B. Höhrmann, P. Le Hégaret, T. Pixley. W3C.<dt id=refsDOMPARSING>[DOMPARSING]<dd><cite><a href=http://domparsing.spec.whatwg.org/ lang=en-US>DOM Parsing and Serialization</a></cite>, Ms2ger. WHATWG.<dt id=refsDOT>[DOT]<dd>(Non-normative) <cite><a href=http://www.graphviz.org/content/dot-
language>The DOT Language</a></cite>. Graphviz.<dt id=refsE163>[E163]<dd><cite>Recommendation E.163 — Numbering Plan for The International Telephone Service</cite>, CCITT Blue Book, Fascicle II.2, pp. 128-134, November 1988.<dt id=refsECMA262>[ECMA262]<dd><cite><a href=http://people.mozilla.org/~jorendorff/es6-draft.html>ECMAScript Language Specification</a></cite>. ECMA.<dt id=refsEDITING>[EDITING]<dd><cite><a href=http://dvcs.w3.org/hg/editing/raw-file/tip/editing.html>HTML Editing APIs</a></cite>, A. Gregor. W3C Editing APIs CG.<dt id=refsENCODING>[ENCODING]<dd><cite><a href=http://encoding.spec.whatwg.org/>Encoding</a></cite>, A. van Kesteren, J. Bell. WHATWG.<dt id=refsFETCH>[FETCH]<dd><cite><a href=http://fetch.spec.whatwg.org/>Fetch</a></cite>, A. van Kesteren. WHATWG.<dt id=refsFILEAPI>[FILEAPI]<dd><cite><a href=http://dev.w3.org/2006/webapi/FileAPI/>File API</a></cite>, A. Ranganathan. W3C.<dt id=refsFULLSCREEN>[FULLSCREEN]<dd><cite><a href=http://fullscreen.spec.
whatwg.org/>Fullscreen</a></cite>, A. van Kesteren, T. Çelik. WHATWG.<dt id=refsGIF>[GIF]<dd>(Non-normative) <cite><a href=http://www.w3.org/Graphics/GIF/spec-gif89a.txt>Graphics Interchange Format</a></cite>. CompuServe.<dt id=refsGRAPHICS>[GRAPHICS]<dd>(Non-normative) <cite>Computer Graphics: Principles and Practice in C</cite>, Second Edition, J. Foley, A. van Dam, S. Feiner, J. Hughes. Addison-Wesley. ISBN 0-201-84840-6.<dt id=refsGREGORIAN>[GREGORIAN]<dd>(Non-normative) <cite>Inter Gravissimas</cite>, A. Lilius, C. Clavius. Gregory XIII Papal Bull, February 1582.<dt id=refsHTTP>[HTTP]<dd><cite><a href=http://tools.ietf.org/html/rfc7230>Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing</a></cite>, R. Fielding, J. Reschke. IETF.<dd><cite><a href=http://tools.ietf.org/html/rfc7231>Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content</a></cite>, R. Fielding, J. Reschke. IETF.<dd><cite><a href=http://tools.ietf.org/html/rfc7232>Hypertext Transfer P
rotocol (HTTP/1.1): Conditional Requests</a></cite>, R. Fielding, J. Reschke. IETF.<dd><cite><a href=http://tools.ietf.org/html/rfc7233>Hypertext Transfer Protocol (HTTP/1.1): Range Requests</a></cite>, R. Fielding, Y. Lafon, J. Reschke. IETF.<dd><cite><a href=http://tools.ietf.org/html/rfc7234>Hypertext Transfer Protocol (HTTP/1.1): Caching</a></cite>, R. Fielding, M. Nottingham, J. Reschke. IETF.<dd><cite><a href=http://tools.ietf.org/html/rfc7235>Hypertext Transfer Protocol (HTTP/1.1): Authentication</a></cite>, R. Fielding, J. Reschke. IETF.<dt id=refsHTTPS>[HTTPS]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc2818>HTTP Over TLS</a></cite>, E. Rescorla. IETF.<dt id=refsIANAPERMHEADERS>[IANAPERMHEADERS]<dd><cite><a href=http://www.iana.org/assignments/message-headers/perm-headers.html>Permanent Message Header Field Names</a></cite>. IANA.<dt id=refsINBAND>[INBAND]<dd><cite><a href=http://dev.w3.org/html5/html-sourcing-inband-tracks/>Sourcing In-band Media
Resource Tracks from Media Containers into HTML</a></cite>, S. Pfeiffer, B. Lund. W3C.<dt id=refsISO3166>[ISO3166]<dd><cite><a href=http://www.iso.org/iso/home/standards/country_codes.htm>ISO 3166: Codes for the representation of names of countries and their subdivisions</a></cite>. ISO.<dt id=refsISO8601>[ISO8601]<dd>(Non-normative) <cite><a href="http://isotc.iso.org/livelink/livelink/4021199/ISO_8601_2004_E.zip?func=doc.Fetch&nodeid=4021199">ISO8601: Data elements and interchange formats — Information interchange — Representation of dates and times</a></cite>. ISO.<dt id=refsJLREQ>[JLREQ]<dd><cite><a href=http://www.w3.org/TR/jlreq/>Requirements for Japanese Text Layout</a></cite>. W3C.<dt id=refsJPEG>[JPEG]<dd><cite><a href=http://www.w3.org/Graphics/JPEG/jfif3.pdf>JPEG File Interchange Format</a></cite>, E. Hamilton.<dt id=refsJSON>[JSON]<dd><cite><a href=http://tools.ietf.org/html/rfc4627>The application/json Media Type for JavaScript Object Notation (JSON)</a
></cite>, D. Crockford. IETF.<dt id=refsMAILTO>[MAILTO]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc6068>The 'mailto' URI scheme</a></cite>, M. Duerst, L. Masinter, J. Zawinski. IETF.<dt id=refsMATHML>[MATHML]<dd><cite><a href=http://www.w3.org/TR/MathML/>Mathematical Markup Language (MathML)</a></cite>, D. Carlisle, P. Ion, R. Miner, N. Poppelier. W3C.<dt id=refsMEDIAFRAG>[MEDIAFRAG]<dd><cite><a href=http://www.w3.org/2008/WebVideo/Fragments/WD-media-fragments-spec/>Media Fragments URI</a></cite>, R. Troncy, E. Mannens, S. Pfeiffer, D. Van Deursen. W3C.<dt id=refsMEDIASOURCE>[MEDIASOURCE]<dd><cite><a href=https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html>Media Source Extensions</a></cite>, A. Colwell, A. Bateman, M. Watson. W3C.<dt id=refsMEDIASTREAM>[MEDIASTREAM]<dd><cite><a href=http://dev.w3.org/2011/webrtc/editor/getusermedia.html>Media Capture and Streams</a></cite>, D. Burnett, A. Bergkvist, C. Jennings, A. Narayanan. W3C
.<dt id=refsMFREL>[MFREL]<dd><cite><a href=http://microformats.org/wiki/existing-rel-values#HTML5_link_type_extensions>Microformats Wiki: existing rel values</a></cite>. Microformats.<dt id=refsMIMESNIFF>[MIMESNIFF]<dd><cite><a href=http://mimesniff.spec.whatwg.org/>MIME Sniffing</a></cite>, G. Hemsley. WHATWG.<dt id=refsMNG>[MNG]<dd><cite><a href=http://www.libpng.org/pub/mng/spec/>MNG (Multiple-image Network Graphics) Format</a></cite>. G. Randers-Pehrson.<dt id=refsMPEG2>[MPEG2]<dd><cite>ISO/IEC 13818-1: Information technology — Generic coding of moving pictures and associated audio information: Systems</cite>. ISO/IEC.<dt id=refsMPEG4>[MPEG4]<dd><cite>ISO/IEC 14496-12: ISO base media file format</cite>. ISO/IEC.<dt id=refsMQ>[MQ]<dd><cite><a href=http://dev.w3.org/csswg/css3-mediaqueries/>Media Queries</a></cite>, H. Lie, T. Çelik, D. Glazman, A. van Kesteren. W3C.<dt id=refsNPAPI>[NPAPI]<dd>(Non-normative) <cite><a href=https://developer.mozilla.org/en/Gecko_Plugin_
API_Reference>Gecko Plugin API Reference</a></cite>. Mozilla.<dt id=refsOGGSKELETONHEADERS>[OGGSKELETONHEADERS]<dd><cite><a href=http://wiki.xiph.org/SkeletonHeaders>SkeletonHeaders</a></cite>. Xiph.Org.<dt id=refsOPENSEARCH>[OPENSEARCH]<dd><cite><a href=http://www.opensearch.org/Specifications/OpenSearch/1.1#Autodiscovery_in_HTML.2FXHTML>Autodiscovery in HTML/XHTML</a></cite>. In <cite>OpenSearch 1.1 Draft 4</cite>, Section 4.6.2. OpenSearch.org.<dt id=refsORIGIN>[ORIGIN]<dd><cite><a href=http://tools.ietf.org/html/rfc6454>The Web Origin Concept</a></cite>, A. Barth. IETF.<dt id=refsPAGEVIS>[PAGEVIS]<dd>(Non-normative) <cite><a href=https://w3c.github.io/web-performance/specs/PageVisibility/Overview.html>Page Visibility</a></cite>, J. Mann, A. Jain. W3C.<dt id=refsPDF>[PDF]<dd>(Non-normative) <cite><a href=http://www.adobe.com/devnet/acrobat/pdfs/PDF32000_2008.pdf>Document management — Portable document format — Part 1: PDF</a></cite>. ISO.<dt id=refsPINGBACK>[PINGBACK]
<dd><cite><a href=http://www.hixie.ch/specs/pingback/pingback>Pingback 1.0</a></cite>, S. Langridge, I. Hickson.<dt id=refsPNG>[PNG]<dd><cite><a href=http://www.w3.org/TR/PNG/>Portable Network Graphics (PNG) Specification</a></cite>, D. Duce. W3C.<dt id=refsPOINTERLOCK>[POINTERLOCK]<dd><cite><a href=http://dvcs.w3.org/hg/pointerlock/raw-file/default/index.html>Pointer Lock</a></cite>, V. Scheib. W3C.<dt id=refsPPUTF8>[PPUTF8]<dd>(Non-normative) <cite><a href=http://www.sw.it.aoyama.ac.jp/2012/pub/IUC11-UTF-8.pdf>The Properties and Promises of UTF-8</a></cite>, M. Dürst. University of Zürich. In <cite>Proceedings of the 11th International Unicode Conference</cite>.<dt id=refsPSL>[PSL]<dd><cite><a href=http://publicsuffix.org/>Public Suffix List</a></cite>.
Mozilla Foundation.<dt id=refsRFC1034>[RFC1034]<dd><cite><a href=http://tools.ietf.org/html/rfc1034>Domain Names - Concepts and Facilities</a></cite>, P. Mockapetris. IETF, November 1987.<dt id=refsRFC1123>[RFC1123]<dd><cite><a href=http://tools.ietf.org/html/rfc1123>Requirements for Internet Hosts -- Application and Support</a></cite>, R. Braden. IETF, October 1989.<dt id=refsRFC1345>[RFC1345]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc1345>Character Mnemonics and Character Sets</a></cite>, K. Simonsen. IETF.<dt id=refsRFC1468>[RFC1468]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc1468>Japanese Character Encoding for Internet Messages</a></cite>, J. Murai, M. Crispin, E. van der Poel. IETF.<dt id=refsRFC1554>[RFC1554]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc1554>ISO-2022-JP-2: Multilingual Extension of ISO-2022-JP</a></cite>, M. Ohta, K. Handa. IETF.<dt id=refsRFC1557>[RFC1557]<dd>(Non-normative) <cite><a href=
http://tools.ietf.org/html/rfc1557>Korean Character Encoding for Internet Messages</a></cite>, U. Choi, K. Chon, H. Park. IETF.<dt id=refsRFC1842>[RFC1842]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc1842>ASCII Printable Characters-Based Chinese Character Encoding for Internet Messages</a></cite>, Y. Wei, Y. Zhang, J. Li, J. Ding, Y. Jiang. IETF.<dt id=refsRFC1922>[RFC1922]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc1922>Chinese Character Encoding for Internet Messages</a></cite>, HF. Zhu, DY. Hu, ZG. Wang, TC. Kao, WCH. Chang, M. Crispin. IETF.<dt id=refsRFC2046>[RFC2046]<dd><cite><a href=http://tools.ietf.org/html/rfc2046>Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types</a></cite>, N. Freed, N. Borenstein. IETF.<dt id=refsRFC2119>[RFC2119]<dd><cite><a href=http://tools.ietf.org/html/rfc2119>Key words for use in RFCs to Indicate Requirement Levels</a></cite>, S. Bradner. IETF.<dt id=refsRFC2237>[RFC2237]<dd>(Non-norm
ative) <cite><a href=http://tools.ietf.org/html/rfc2237>Japanese Character Encoding for Internet Messages</a></cite>, K. Tamaru. IETF.<dt id=refsRFC2313>[RFC2313]<dd><cite><a href=http://tools.ietf.org/html/rfc2313>PKCS #1: RSA Encryption</a></cite>, B. Kaliski. IETF.<dt id=refsRFC2318>[RFC2318]<dd><cite><a href=http://tools.ietf.org/html/rfc2318>The text/css Media Type</a></cite>, H. Lie, B. Bos, C. Lilley. IETF.<dt id=refsRFC2388>[RFC2388]<dd><cite><a href=http://tools.ietf.org/html/rfc2388>Returning Values from Forms: multipart/form-data</a></cite>, L. Masinter. IETF.<dt id=refsRFC2397>[RFC2397]<dd><cite><a href=http://tools.ietf.org/html/rfc2397>The "data" URL scheme</a></cite>, L. Masinter. IETF.<dt id=refsRFC2445>[RFC2445]<dd><cite><a href=http://tools.ietf.org/html/rfc2445>Internet Calendaring and Scheduling Core Object Specification (iCalendar)</a></cite>, F. Dawson, D. Stenerson. IETF.<dt id=refsRFC2483>[RFC2483]<dd><cite><a href=http://tools.ietf.org/html/rfc2483>U
RI Resolution Services Necessary for URN Resolution</a></cite>, M. Mealling, R. Daniel. IETF.<dt id=refsRFC3676>[RFC3676]<dd><cite><a href=http://tools.ietf.org/html/rfc3676>The Text/Plain Format and DelSp Parameters</a></cite>, R. Gellens. IETF.<dt id=refsRFC3023>[RFC3023]<dd><cite><a href=http://tools.ietf.org/html/rfc3023>XML Media Types</a></cite>, M. Murata, S. St. Laurent, D. Kohn. IETF.<dt id=refsRFC3279>[RFC3279]<dd><cite><a href=http://tools.ietf.org/html/rfc3279>Algorithms and Identifiers for the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</a></cite>, W. Polk, R. Housley, L. Bassham. IETF.<dt id=refsRFC3490>[RFC3490]<dd><cite><a href=http://tools.ietf.org/html/rfc3490>Internationalizing Domain Names in Applications (IDNA)</a></cite>, P. Faltstrom, P. Hoffman, A. Costello. IETF.<dt id=refsRFC3864>[RFC3864]<dd><cite><a href=http://tools.ietf.org/html/rfc3864>Registration Procedures for Message Header Fields</a></
cite>, G. Klyne, M. Nottingham, J. Mogul. IETF.<dt id=refsRFC4281>[RFC4281]<dd><cite><a href=http://tools.ietf.org/html/rfc4281>The Codecs Parameter for "Bucket" Media Types</a></cite>, R. Gellens, D. Singer, P. Frojdh. IETF.<dt id=refsRFC4329>[RFC4329]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc4329>Scripting Media Types</a></cite>, B. Höhrmann. IETF.<dt id=refsRFC4395>[RFC4395]<dd><cite><a href=http://tools.ietf.org/html/rfc4395>Guidelines and Registration Procedures for New URI Schemes</a></cite>, T. Hansen, T. Hardie, L. Masinter. IETF.<dt id=refsRFC4648>[RFC4648]<dd><cite><a href=http://tools.ietf.org/html/rfc4648>The Base16, Base32, and Base64 Data Encodings</a></cite>, S. Josefsson. IETF.<dt id=refsRFC5280>[RFC5280]<dd><cite><a href=http://tools.ietf.org/html/rfc5280>Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</a></cite>, D. Cooper, S. Santesson, S. Farrell, S. Boeyen, R. Housley, W. Polk. IET
F.<dt id=refsRFC5322>[RFC5322]<dd><cite><a href=http://tools.ietf.org/html/rfc5322>Internet Message Format</a></cite>, P. Resnick. IETF.<dt id=refsSMS>[SMS]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc5724>URI Scheme for Global System for Mobile Communications (GSM) Short Message Service (SMS)</a></cite>, E. Wilde, A. Vaha-Sipila. IETF.<dt id=refsRFC6266>[RFC6266]<dd><cite><a href=http://tools.ietf.org/html/rfc6266>Use of the Content-Disposition Header Field in the Hypertext Transfer Protocol (HTTP)</a></cite>, J. Reschke. IETF.<dt id=refsRFC6350>[RFC6350]<dd><cite><a href=http://tools.ietf.org/html/rfc6350>vCard Format Specification</a></cite>, S. Perreault. IETF.<dt id=refsSCSU>[SCSU]<dd>(Non-normative) <cite><a href=http://www.unicode.org/reports/tr6/>UTR #6: A Standard Compression Scheme For Unicode</a></cite>, M. Wolf, K. Whistler, C. Wicksteed, M. Davis, A. Freytag, M. Scherer. Unicode Consortium.<dt id=refsSELECTORS>[SELECTORS]<dd><cite><a href=http
://dev.w3.org/csswg/selectors/>Selectors</a></cite>, E. Etemad, T. Çelik, D. Glazman, I. Hickson, P. Linss, J. Williams. W3C.<dt id=refsSRGB>[SRGB]<dd><cite lang=en-GB><a href="http://webstore.iec.ch/webstore/webstore.nsf/artnum/025408!OpenDocument&Click=">IEC 61966-2-1: Multimedia systems and equipment — Colour measurement and management — Part 2-1: Colour management — Default RGB colour space — sRGB</a></cite>. IEC.<dt id=refsSVG>[SVG]<dd><cite><a href=http://www.w3.org/TR/SVGTiny12/>Scalable Vector Graphics (SVG) Tiny 1.2 Specification</a></cite>, O. Andersson, R. Berjon, E. Dahlström, A. Emmons, J. Ferraiolo, A. Grasso, V. Hardy, S. Hayman, D. Jackson, C. Lilley, C. McCormack, A. Neumann, C. Northway, A. Quint, N. Ramani, D. Schepers, A. Shellshear. W3C.<dt id=refsTOR>[TOR]<dd>(Non-normative) <cite><a href=https://www.torproject.org/>Tor</a></cite>.<dt id=refsTOUCH>[TOUCH]<dd><cite><a href=https://dvcs.w3.org/hg/webevents/raw-file/v1/touchevents.html>Touch
Events</a></cite>, D. Schepers, S. Moon, M. Brubeck, A. Barstow. W3C.<dt id=refsTZDATABASE>[TZDATABASE]<dd>(Non-normative) <cite><a href=http://www.iana.org/time-zones>Time Zone Database</a></cite>. IANA.<dt id=refsUAAG>[UAAG]<dd>(Non-normative) <cite><a href=http://www.w3.org/TR/UAAG20/>User Agent Accessibility Guidelines (UAAG) 2.0</a></cite>, J. Allan, K. Ford, J. Richards, J. Spellman. W3C.<dt id=refsUCA>[UCA]<dd><cite><a href=http://www.unicode.org/reports/tr10/>UTR #10: Unicode Collation Algorithm</a></cite>, M. Davis, K. Whistler. Unicode Consortium.<dt id=refsUNICODE>[UNICODE]<dd><cite><a href=http://www.unicode.org/versions/>The Unicode Standard</a></cite>. Unicode Consortium.<dt id=refsUNIVCHARDET>[UNIVCHARDET]<dd>(Non-normative) <cite><a href=http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html>A composite approach to language/encoding detection</a></cite>, S. Li, K. Momoi. Netscape. In <cite>Proceedings of the 19th International Unicode Conference<
/cite>.<dt id=refsURL>[URL]<dd><cite><a href=http://url.spec.whatwg.org/>URL</a></cite>, A. van Kesteren. WHATWG.<dt id=refsURN>[URN]<dd><cite><a href=http://tools.ietf.org/html/rfc2141>URN Syntax</a></cite>, R. Moats. IETF.<dt id=refsUTF7>[UTF7]<dd>(Non-normative) <cite><a href=http://tools.ietf.org/html/rfc2152>UTF-7: A Mail-Safe Transformation Format of Unicode</a></cite>, D. Goldsmith, M. Davis. IETF.<dt id=refsUTF8DET>[UTF8DET]<dd>(Non-normative) <cite><a href=http://www.w3.org/International/questions/qa-forms-utf-8>Multilingual form encoding</a></cite>, M. Dürst. W3C.<dt id=refsUTR36>[UTR36]<dd>(Non-normative) <cite><a href=http://www.unicode.org/reports/tr36/>UTR #36: Unicode Security Considerations</a></cite>, M. Davis, M. Suignard. Unicode Consortium.<dt id=refsWCAG>[WCAG]<dd>(Non-normative) <cite><a href=http://www.w3.org/TR/WCAG20/>Web Content Accessibility Guidelines (WCAG) 2.0</a></cite>, B. Caldwell, M. Cooper, L. Reid, G. Vanderheiden. W3C.<dt id=refsWEBGL>[W
EBGL]<dd><cite><a href=http://www.khronos.org/registry/webgl/specs/latest/>WebGL Specification</a></cite>, D. Jackson. Khronos Group.<dt id=refsWEBIDL>[WEBIDL]<dd><cite><a href=http://dev.w3.org/2006/webapi/WebIDL/>Web IDL</a></cite>, C. McCormack. W3C.<dt id=refsWEBLINK>[WEBLINK]<dd><cite><a href=http://tools.ietf.org/html/rfc5988>Web Linking</a></cite>, M. Nottingham. IETF.<dt id=refsWEBMCG>[WEBMCG]<dd><cite><a href=http://www.webmproject.org/code/specs/container/>WebM Container Guidelines</a></cite>. The WebM Project.<dt id=refsWEBVTT>[WEBVTT]<dd><cite><a href=http://dev.w3.org/html5/webvtt/>WebVTT</a></cite>, I. Hickson. W3C.<dt id=refsWHATWGWIKI>[WHATWGWIKI]<dd><cite><a href=http://wiki.whatwg.org/>The WHATWG Wiki</a></cite>. WHATWG.<dt id=refsWSP>[WSP]<dd><cite><a href=http://tools.ietf.org/html/rfc6455>The WebSocket protocol</a></cite>, I. Fette, A. Melnikov. IETF.<dt id=refsX121>[X121]<dd><cite>Recommendation X.121 — International Numbering Plan for Public Data Net
works</cite>, CCITT Blue Book, Fascicle VIII.3, pp. 317-332.<dt id=refsX690>[X690]<dd><cite><a href=http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf>Recommendation X.690 — Information Technology — ASN.1 Encoding Rules — Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER), and Distinguished Encoding Rules (DER)</a></cite>. International Telecommunication Union.<dt id=refsXFN>[XFN]<dd><cite><a href=http://gmpg.org/xfn/11>XFN 1.1 profile</a></cite>, T. Çelik, M. Mullenweg, E. Meyer. GMPG.<dt id=refsXHR>[XHR]<dd><cite><a href=http://xhr.spec.whatwg.org/><code>XMLHttpRequest</code></a></cite>, A. van Kesteren. WHATWG.<dt id=refsXML>[XML]<dd><cite><a href=http://www.w3.org/TR/xml/>Extensible Markup Language</a></cite>, T. Bray, J. Paoli, C. Sperberg-McQueen, E. Maler, F. Yergeau. W3C.<dt id=refsXMLBASE>[XMLBASE]<dd><cite><a href=http://www.w3.org/TR/xmlbase/>XML Base</a></cite>, J. Marsh, R. Tobin. W3C.<dt id=refsXMLNS>[XMLNS]<dd><
cite><a href=http://www.w3.org/TR/xml-names/>Namespaces in XML</a></cite>, T. Bray, D. Hollander, A. Layman, R. Tobin. W3C.<dt id=refsXMLSSPI>[XMLSSPI]<dd><cite><a href=http://www.w3.org/TR/xml-stylesheet/>Associating Style Sheets with XML documents</a></cite>, J. Clark, S. Pieters, H. Thompson. W3C.<dt id=refsXPATH10>[XPATH10]<dd><cite><a href=http://www.w3.org/TR/1999/REC-xpath-19991116>XML Path Language (XPath) Version 1.0</a></cite>, J. Clark, S. DeRose. W3C.<dt id=refsXSLT10>[XSLT10]<dd>(Non-normative) <cite><a href=http://www.w3.org/TR/1999/REC-xslt-19991116>XSL Transformations (XSLT) Version 1.0</a></cite>, J. Clark. W3C.</dl>
Modified: source
===================================================================
--- source 2014-08-25 21:24:20 UTC (rev 8715)
+++ source 2014-08-26 18:59:17 UTC (rev 8716)
@@ -3061,6 +3061,23 @@
</dd>
+
+ <dt>Media Providers</dt>
+
+ <dd>
+
+ <p>This specification references the following interfaces:</p>
+
+ <ul class="brief">
+
+ <li><dfn><code data-x-href="http://dev.w3.org/2011/webrtc/editor/getusermedia.html#idl-def-MediaStream">MediaStream</code></dfn> <ref spec=MEDIASTREAM></li>
+ <li><dfn><code data-x-href="https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#idl-def-MediaSource">MediaSource</code></dfn> <ref spec=MEDIASOURCE></li>
+
+ </ul>
+
+ </dd>
+
+
<dt>XMLHttpRequest</dt>
<dd>
@@ -27599,6 +27616,7 @@
this specification) implement the following interface:</p>
<pre class="idl">enum <dfn>CanPlayTypeResult</dfn> { "" /* <span data-x="dom-CanPlayTypeResult-nil">empty string</span> */, "<span data-x="dom-CanPlayTypeResult-maybe">maybe</span>", "<span data-x="dom-CanPlayTypeResult-probably">probably</span>" };
+typedef (<span>MediaStream</span> or <span>MediaSource</span> or <span>Blob</span>) <dfn>MediaProvider</dfn>;
interface <dfn>HTMLMediaElement</dfn> : <span>HTMLElement</span> {
// error state
@@ -27606,6 +27624,7 @@
// network state
attribute DOMString <span data-x="dom-media-src">src</span>;
+ attribute <span>MediaProvider</span>? <span data-x="dom-media-srcObject">srcObject</span>;
readonly attribute DOMString <span data-x="dom-media-currentSrc">currentSrc</span>;
attribute DOMString <span data-x="dom-media-crossOrigin">crossOrigin</span>;
const unsigned short <span data-x="dom-media-NETWORK_EMPTY">NETWORK_EMPTY</span> = 0;
@@ -27814,7 +27833,7 @@
<dt><dfn><code data-x="dom-MediaError-MEDIA_ERR_SRC_NOT_SUPPORTED">MEDIA_ERR_SRC_NOT_SUPPORTED</code></dfn> (numeric value 4)</dt>
<dd>The <span>media resource</span> indicated by the <code data-x="attr-media-src">src</code>
- attribute was not suitable.</dd>
+ attribute or <span>assigned media provider object</span> was not suitable.</dd>
</dl>
@@ -27855,16 +27874,37 @@
attribute, <span>limited to only known values</span>.</p>
</div>
+
+ <p>A <dfn>media provider object</dfn> is an object that can represent a <span>media resource</span>,
+ separate from a <span>URL</span>. <code>MediaStream</code> objects, <code>MediaSource</code>
+ objects, <code>Blob</code> objects, and <code>File</code> objects are all <span data-x="media
+ provider object">media provider objects</span>.</p>
+ <div w-nodev>
+
+ <p>Each <span>media element</span> can have an <dfn>assigned media provider object</dfn>, which is a
+ <span>media provider object</span>. When a <span>media element</span> is created, it has no
+ <span>assigned media provider object</span>.</p>
+
+ </div>
+
<dl class="domintro">
+ <dt><var data-x="">media</var> . <code data-x="dom-media-srcObject">srcObject</code> [ = <var data-x="">source</var> ]</dt>
+
+ <dd>
+
+ <p>Allows the <span>media element</span> to be assigned a <span>media provider object</span>.</p>
+
+ </dd>
+
<dt><var>media</var> . <code subdfn data-x="dom-media-currentSrc">currentSrc</code></dt>
<dd>
- <p>Returns the address of the current <span>media resource</span>.</p>
+ <p>Returns the address of the current <span>media resource</span>, if any.</p>
- <p>Returns the empty string when there is no <span>media resource</span>.</p>
+ <p>Returns the empty string when there is no <span>media resource</span>, or it doesn't have an address.</p>
</dd>
@@ -27872,18 +27912,24 @@
<div w-nodev>
- <p>The <dfn><code data-x="dom-media-currentSrc">currentSrc</code></dfn> IDL attribute is initially
+ <p>The <dfn><code data-x="dom-media-currentSrc">currentSrc</code></dfn> IDL attribute must initially be set to
the empty string. Its value is changed by the <span data-x="concept-media-load-algorithm">resource
selection algorithm</span> defined below.</p>
+ <p>The <dfn><code data-x="dom-media-srcObject">srcObject</code></dfn> IDL attribute, on getting,
+ must return the element's <span>assigned media provider object</span>, if any, or null otherwise.
+ On setting, it must set the element's <span>assigned media provider object</span> to the new
+ value, and then invoke the element's <span>media element load algorithm</span>.</p>
+
</div>
+
+ <p class="note">There are three ways to specify a <span>media resource</span>: the <code
+ data-x="dom-media-srcObject">srcObject</code> IDL attribute, the <code
+ data-x="attr-media-src">src</code> content attribute, and <code>source</code> elements. The IDL
+ attribute takes priority, followed by the content attribute, followed by the elements.</p>
- <p class="note">There are two ways to specify a <span>media resource</span>, the <code
- data-x="attr-media-src">src</code> attribute, or <code>source</code> elements. The attribute
- overrides the elements.</p>
-
<h5>MIME types</h5>
<p>A <span>media resource</span> can be described in terms of its <em>type</em>, specifically a
@@ -28215,15 +28261,21 @@
<li>
- <p>⌛ If the <span>media element</span> has a <code data-x="attr-media-src">src</code>
+ <p>⌛ If the <span>media element</span> has an <span>assigned media provider
+ object</span>, then let <var>mode</var> be <i>object</i>.</p>
+
+ <p>⌛ Otherwise, if the <span>media element</span> has no <span>assigned media provider
+ object</span> but has a <code data-x="attr-media-src">src</code>
attribute, then let <var>mode</var> be <i>attribute</i>.</p>
- <p>⌛ Otherwise, if the <span>media element</span> does not have a <code
- data-x="attr-media-src">src</code> attribute but has a <code>source</code> element child, then
+ <p>⌛ Otherwise, if the <span>media element</span> does not have an <span>assigned media provider
+ object</span> and does not have a <code
+ data-x="attr-media-src">src</code> attribute, but does have a <code>source</code> element child, then
let <var>mode</var> be <i>children</i> and let <var>candidate</var>
be the first such <code>source</code> element child in <span>tree order</span>.</p>
- <p>⌛ Otherwise the <span>media element</span> has neither a <code
+ <p>⌛ Otherwise the <span>media element</span> has no <span>assigned media provider
+ object</span> and has neither a <code
data-x="attr-media-src">src</code> attribute nor a <code>source</code> element child: set the
<code data-x="dom-media-networkState">networkState</code> to <code
data-x="dom-media-NETWORK_EMPTY">NETWORK_EMPTY</code><!-- no need to set the <span>show poster
@@ -28241,198 +28293,240 @@
<li>
- <p>If <var>mode</var> is <i>attribute</i>, then run these substeps:</p>
+ <p>Run the appropriate steps from the following list:</p>
- <ol>
+ <dl class="switch">
- <li><p>⌛ If the <code data-x="attr-media-src">src</code>
- attribute's value is the empty string, then end the <span>synchronous section</span>, and jump
- down to the <i>failed with attribute</i> step below.</p></li>
+ <dt>If <var>mode</var> is <i>object</i></dt>
- <li><p>⌛ Let <var>absolute URL</var> be the <span>absolute URL</span> that
- would have resulted from <span data-x="resolve a url">resolving</span> the <span>URL</span>
- specified by the <code data-x="attr-media-src">src</code> attribute's value relative to the
- <span>media element</span> when the <code data-x="attr-media-src">src</code> attribute was last
- changed.</p> <!-- i.e. changing xml:base or <base> after src="" has no effect -->
+ <dd>
- <li><p>⌛ If <var>absolute URL</var> was obtained successfully, set the <code
- data-x="dom-media-currentSrc">currentSrc</code> attribute to <var>absolute
- URL</var>.</p></li>
+ <ol>
- <li><p>End the <span>synchronous section</span>, continuing the remaining steps
- asynchronously.</p></li>
+ <li><p>⌛ Set the <code data-x="dom-media-currentSrc">currentSrc</code> attribute to
+ the empty string.</p></li>
- <li><p>If <var>absolute URL</var> was obtained successfully, run the <span
- data-x="concept-media-load-resource">resource fetch algorithm</span> with <var>absolute
- URL</var>. If that algorithm returns without aborting <em>this</em> one, then the load
- failed.</p></li>
+ <li><p>End the <span>synchronous section</span>, continuing the remaining steps
+ asynchronously.</p></li>
- <li>
+ <li><p>Run the <span data-x="concept-media-load-resource">resource fetch algorithm</span>
+ with the <span>assigned media provider object</span>. If that algorithm returns without
+ aborting <em>this</em> one, then the load failed.</p></li>
- <p><i>Failed with attribute</i>: Reaching this step indicates that the media resource
- failed to load or that the given <span>URL</span> could not be <span data-x="resolve a
- url">resolved</span>. <span>Queue a task</span> to run the following steps:</p>
+ <li><p><i>Failed with media provider</i>: Reaching this step indicates that the media
+ resource failed to load. <span>Queue a task</span> to run the <span>dedicated media source
+ failure steps</span>.</p></li>
+ <li><p>Wait for the <span data-x="concept-task">task</span> queued by the previous step to have
+ executed.</p></li>
+
+ <li><p>Abort these steps. The element won't attempt to load another resource until this
+ algorithm is triggered again.</p></li>
+
+ </ol>
+
+ </dd>
+
+ <dt>If <var>mode</var> is <i>attribute</i></dt>
+
+ <dd>
+
<ol>
- <li><p>Set the <code data-x="dom-media-error">error</code> attribute to a new
- <code>MediaError</code> object whose <code data-x="dom-MediaError-code">code</code> attribute
- is set to <code
- data-x="dom-MediaError-MEDIA_ERR_SRC_NOT_SUPPORTED">MEDIA_ERR_SRC_NOT_SUPPORTED</code>.</p></li>
+ <li><p>⌛ If the <code data-x="attr-media-src">src</code>
+ attribute's value is the empty string, then end the <span>synchronous section</span>, and jump
+ down to the <i>failed with attribute</i> step below.</p></li>
- <li><p><span>Forget the media element's media-resource-specific tracks</span>.</p></li>
+ <li><p>⌛ Let <var>absolute URL</var> be the <span>absolute URL</span> that
+ would have resulted from <span data-x="resolve a url">resolving</span> the <span>URL</span>
+ specified by the <code data-x="attr-media-src">src</code> attribute's value relative to the
+ <span>media element</span> when the <code data-x="attr-media-src">src</code> attribute was last
+ changed.</p> <!-- i.e. changing xml:base or <base> after src="" has no effect -->
- <li><p>Set the element's <code data-x="dom-media-networkState">networkState</code> attribute
- to the <code data-x="dom-media-NETWORK_NO_SOURCE">NETWORK_NO_SOURCE</code> value.</p></li>
+ <li><p>⌛ If <var>absolute URL</var> was obtained successfully, set the <code
+ data-x="dom-media-currentSrc">currentSrc</code> attribute to <var>absolute
+ URL</var>.</p></li>
- <li><p>Set the element's <span>show poster flag</span> to true.</p></li>
+ <li><p>End the <span>synchronous section</span>, continuing the remaining steps
+ asynchronously.</p></li>
- <li><p><span>Fire a simple event</span> named <code data-x="event-media-error">error</code> at
- the <span>media element</span>.</p></li>
+ <li><p>If <var>absolute URL</var> was obtained successfully, run the <span
+ data-x="concept-media-load-resource">resource fetch algorithm</span> with <var>absolute
+ URL</var>. If that algorithm returns without aborting <em>this</em> one, then the load
+ failed.</p></li>
- <li><p>Set the element's <span>delaying-the-load-event flag</span> to false. This stops <span
- data-x="delay the load event">delaying the load event</span>.</p></li>
+ <li><p><i>Failed with attribute</i>: Reaching this step indicates that the media resource
+ failed to load or that the given <span>URL</span> could not be <span data-x="resolve a
+ url">resolved</span>. <span>Queue a task</span> to run the <span>dedicated media source
+ failure steps</span>.</p></li>
+ <li><p>Wait for the <span data-x="concept-task">task</span> queued by the previous step to have
+ executed.</p></li>
+
+ <li><p>Abort these steps. The element won't attempt to load another resource until this
+ algorithm is triggered again.</p></li>
+ <!-- it took its ball and went home, sulking. -->
+
</ol>
- </li>
+ </dd>
- <li><p>Wait for the <span data-x="concept-task">task</span> queued by the previous step to have
- executed.</p></li>
+ <dt>Otherwise (<var>mode</var> is <i>children</i>)</dt>
- <li><p>Abort these steps. Until the <code data-x="dom-media-load">load()</code> method is
- invoked or the <code data-x="attr-media-src">src</code> attribute is changed, the element won't
- attempt to load another resource.</p></li>
- <!-- it took its ball and went home, sulking. -->
+ <dd>
- </ol>
+ <ol>
- <p>Otherwise, the <code>source</code> elements will be used; run these substeps:</p>
+ <li>
- <ol>
+ <p>⌛ Let <var>pointer</var> be a position defined by two adjacent nodes in the
+ <span>media element</span>'s child list, treating the start of the list (before the first
+ child in the list, if any) and end of the list (after the last child in the list, if any) as
+ nodes in their own right. One node is the node before <var>pointer</var>, and the
+ other node is the node after <var>pointer</var>. Initially, let <var>pointer</var> be the position between the <var>candidate</var> node and the
+ next node, if there are any, or the end of the list, if it is the last node.</p>
- <li>
+ <p>As nodes are inserted and removed into the <span>media element</span>, <var>pointer</var> must be updated as follows:</p>
- <p>⌛ Let <var>pointer</var> be a position defined by two adjacent nodes in the
- <span>media element</span>'s child list, treating the start of the list (before the first
- child in the list, if any) and end of the list (after the last child in the list, if any) as
- nodes in their own right. One node is the node before <var>pointer</var>, and the
- other node is the node after <var>pointer</var>. Initially, let <var>pointer</var> be the position between the <var>candidate</var> node and the
- next node, if there are any, or the end of the list, if it is the last node.</p>
+ <dl>
- <p>As nodes are inserted and removed into the <span>media element</span>, <var>pointer</var> must be updated as follows:</p>
+ <dt>If a new node is inserted between the two nodes that define <var>pointer</var></dt>
- <dl>
+ <dd>Let <var>pointer</var> be the point between the node before <var>pointer</var> and the new node. In other words, insertions at <var>pointer</var> go after <var>pointer</var>.</dd>
- <dt>If a new node is inserted between the two nodes that define <var>pointer</var></dt>
+ <dt>If the node before <var>pointer</var> is removed</dt>
- <dd>Let <var>pointer</var> be the point between the node before <var>pointer</var> and the new node. In other words, insertions at <var>pointer</var> go after <var>pointer</var>.</dd>
+ <dd>Let <var>pointer</var> be the point between the node after <var>pointer</var> and the node before the node after <var>pointer</var>. In
+ other words, <var>pointer</var> doesn't move relative to the remaining nodes.</dd>
- <dt>If the node before <var>pointer</var> is removed</dt>
+ <dt>If the node after <var>pointer</var> is removed</dt>
- <dd>Let <var>pointer</var> be the point between the node after <var>pointer</var> and the node before the node after <var>pointer</var>. In
- other words, <var>pointer</var> doesn't move relative to the remaining nodes.</dd>
+ <dd>Let <var>pointer</var> be the point between the node before <var>pointer</var> and the node after the node before <var>pointer</var>. Just
+ as with the previous case, <var>pointer</var> doesn't move relative to the remaining
+ nodes.</dd>
- <dt>If the node after <var>pointer</var> is removed</dt>
+ </dl>
- <dd>Let <var>pointer</var> be the point between the node before <var>pointer</var> and the node after the node before <var>pointer</var>. Just
- as with the previous case, <var>pointer</var> doesn't move relative to the remaining
- nodes.</dd>
+ <p>Other changes don't affect <var>pointer</var>.</p>
- </dl>
+ </li>
- <p>Other changes don't affect <var>pointer</var>.</p>
+ <li><p>⌛ <i>Process candidate</i>: If <var>candidate</var> does not have a
+ <code data-x="attr-source-src">src</code> attribute, or if its <code
+ data-x="attr-source-src">src</code> attribute's value is the empty string, then end the
+ <span>synchronous section</span>, and jump down to the <i>failed with elements</i> step
+ below.</p></li>
- </li>
+ <li><p>⌛ Let <var>absolute URL</var> be the <span>absolute URL</span> that
+ would have resulted from <span data-x="resolve a url">resolving</span> the <span>URL</span>
+ specified by <var>candidate</var>'s <code data-x="attr-source-src">src</code>
+ attribute's value relative to the <var>candidate</var> when the <code
+ data-x="attr-source-src">src</code> attribute was last changed.</p> <!-- i.e. changing xml:base
+ or <base> after src="" has no effect -->
- <li><p>⌛ <i>Process candidate</i>: If <var>candidate</var> does not have a
- <code data-x="attr-source-src">src</code> attribute, or if its <code
- data-x="attr-source-src">src</code> attribute's value is the empty string, then end the
- <span>synchronous section</span>, and jump down to the <i>failed with elements</i> step
- below.</p></li>
+ <li><p>⌛ If <var>absolute URL</var> was not obtained successfully, then end the
+ <span>synchronous section</span>, and jump down to the <i>failed with elements</i> step
+ below.</p></li>
- <li><p>⌛ Let <var>absolute URL</var> be the <span>absolute URL</span> that
- would have resulted from <span data-x="resolve a url">resolving</span> the <span>URL</span>
- specified by <var>candidate</var>'s <code data-x="attr-source-src">src</code>
- attribute's value relative to the <var>candidate</var> when the <code
- data-x="attr-source-src">src</code> attribute was last changed.</p> <!-- i.e. changing xml:base
- or <base> after src="" has no effect -->
+ <li><p>⌛ If <var>candidate</var> has a <code
+ data-x="attr-source-type">type</code> attribute whose value, when parsed as a <span>MIME
+ type</span> (including any codecs described by the <code data-x="">codecs</code> parameter, for
+ types that define that parameter), represents <span>a type that the user agent knows it cannot
+ render</span>, then end the <span>synchronous section</span>, and jump down to the <i>failed with elements</i> step below.</p></li>
- <li><p>⌛ If <var>absolute URL</var> was not obtained successfully, then end the
- <span>synchronous section</span>, and jump down to the <i>failed with elements</i> step
- below.</p></li>
+ <li><p>⌛ Set the <code data-x="dom-media-currentSrc">currentSrc</code> attribute to <var>absolute URL</var>.</p></li>
- <li><p>⌛ If <var>candidate</var> has a <code
- data-x="attr-source-type">type</code> attribute whose value, when parsed as a <span>MIME
- type</span> (including any codecs described by the <code data-x="">codecs</code> parameter, for
- types that define that parameter), represents <span>a type that the user agent knows it cannot
- render</span>, then end the <span>synchronous section</span>, and jump down to the <i>failed with elements</i> step below.</p></li>
+ <li><p>End the <span>synchronous section</span>, continuing the remaining steps
+ asynchronously.</p></li>
- <li><p>⌛ Set the <code data-x="dom-media-currentSrc">currentSrc</code> attribute to <var>absolute URL</var>.</p></li>
+ <li><p>Run the <span data-x="concept-media-load-resource">resource fetch algorithm</span> with
+ <var>absolute URL</var>. If that algorithm returns without aborting <em>this</em> one,
+ then the load failed.</p></li>
- <li><p>End the <span>synchronous section</span>, continuing the remaining steps
- asynchronously.</p></li>
+ <li><p><i>Failed with elements</i>: <span>Queue a task</span> to <span>fire a simple
+ event</span> named <code data-x="event-error">error</code> at the <var>candidate</var> element.</p></li>
- <li><p>Run the <span data-x="concept-media-load-resource">resource fetch algorithm</span> with
- <var>absolute URL</var>. If that algorithm returns without aborting <em>this</em> one,
- then the load failed.</p></li>
+ <li><p>Asynchronously <span>await a stable state</span>. The <span>synchronous section</span>
+ consists of all the remaining steps of this algorithm until the algorithm says the
+ <span>synchronous section</span> has ended. (Steps in <span data-x="synchronous
+ section">synchronous sections</span> are marked with ⌛.)</p></li>
- <li><p><i>Failed with elements</i>: <span>Queue a task</span> to <span>fire a simple
- event</span> named <code data-x="event-error">error</code> at the <var>candidate</var> element.</p></li>
+ <li><p>⌛ <span>Forget the media element's media-resource-specific
+ tracks</span>.</p></li>
- <li><p>Asynchronously <span>await a stable state</span>. The <span>synchronous section</span>
- consists of all the remaining steps of this algorithm until the algorithm says the
- <span>synchronous section</span> has ended. (Steps in <span data-x="synchronous
- section">synchronous sections</span> are marked with ⌛.)</p></li>
+ <li><p>⌛ <i>Find next candidate</i>: Let <var>candidate</var> be
+ null.</p></li>
- <li><p>⌛ <span>Forget the media element's media-resource-specific
- tracks</span>.</p></li>
+ <li><p>⌛ <i>Search loop</i>: If the node after <var>pointer</var> is
+ the end of the list, then jump to the <i>waiting</i> step below.</p></li>
- <li><p>⌛ <i>Find next candidate</i>: Let <var>candidate</var> be
- null.</p></li>
+ <li><p>⌛ If the node after <var>pointer</var> is a <code>source</code> element,
+ let <var>candidate</var> be that element.</p></li>
- <li><p>⌛ <i>Search loop</i>: If the node after <var>pointer</var> is
- the end of the list, then jump to the <i>waiting</i> step below.</p></li>
+ <li><p>⌛ Advance <var>pointer</var> so that the node before <var>pointer</var> is now the node that was after <var>pointer</var>, and the node
+ after <var>pointer</var> is the node after the node that used to be after <var>pointer</var>, if any.</p></li>
- <li><p>⌛ If the node after <var>pointer</var> is a <code>source</code> element,
- let <var>candidate</var> be that element.</p></li>
+ <li><p>⌛ If <var>candidate</var> is null, jump back to the <i>search
+ loop</i> step. Otherwise, jump back to the <i>process candidate</i> step.</p></li>
- <li><p>⌛ Advance <var>pointer</var> so that the node before <var>pointer</var> is now the node that was after <var>pointer</var>, and the node
- after <var>pointer</var> is the node after the node that used to be after <var>pointer</var>, if any.</p></li>
+ <li><p>⌛ <i>Waiting</i>: Set the element's <code
+ data-x="dom-media-networkState">networkState</code> attribute to the <code
+ data-x="dom-media-NETWORK_NO_SOURCE">NETWORK_NO_SOURCE</code> value.</p></li>
- <li><p>⌛ If <var>candidate</var> is null, jump back to the <i>search
- loop</i> step. Otherwise, jump back to the <i>process candidate</i> step.</p></li>
+ <li><p>⌛ Set the element's <span>show poster flag</span> to true.</p></li>
- <li><p>⌛ <i>Waiting</i>: Set the element's <code
- data-x="dom-media-networkState">networkState</code> attribute to the <code
- data-x="dom-media-NETWORK_NO_SOURCE">NETWORK_NO_SOURCE</code> value.</p></li>
+ <li><p>⌛ <span>Queue a task</span> to set the element's <span>delaying-the-load-event
+ flag</span> to false. This stops <span data-x="delay the load event">delaying the load
+ event</span>.</p></li>
- <li><p>⌛ Set the element's <span>show poster flag</span> to true.</p></li>
+ <li><p>End the <span>synchronous section</span>, continuing the remaining steps
+ asynchronously.</p></li>
- <li><p>⌛ <span>Queue a task</span> to set the element's <span>delaying-the-load-event
- flag</span> to false. This stops <span data-x="delay the load event">delaying the load
- event</span>.</p></li>
+ <li><p>Wait until the node after <var>pointer</var> is a node other than the end of
+ the list. (This step might wait forever.)</p></li>
- <li><p>End the <span>synchronous section</span>, continuing the remaining steps
- asynchronously.</p></li>
+ <li><p>Asynchronously <span>await a stable state</span>. The <span>synchronous section</span>
+ consists of all the remaining steps of this algorithm until the algorithm says the
+ <span>synchronous section</span> has ended. (Steps in <span data-x="synchronous
+ section">synchronous sections</span> are marked with ⌛.)</p></li>
- <li><p>Wait until the node after <var>pointer</var> is a node other than the end of
- the list. (This step might wait forever.)</p></li>
+ <li><p>⌛ Set the element's <span>delaying-the-load-event flag</span> back to true (this
+ <span data-x="delay the load event">delays the load event</span> again, in case it hasn't been
+ fired yet).</p>
- <li><p>Asynchronously <span>await a stable state</span>. The <span>synchronous section</span>
- consists of all the remaining steps of this algorithm until the algorithm says the
- <span>synchronous section</span> has ended. (Steps in <span data-x="synchronous
- section">synchronous sections</span> are marked with ⌛.)</p></li>
+ <li><p>⌛ Set the <code data-x="dom-media-networkState">networkState</code> back to <code
+ data-x="dom-media-NETWORK_LOADING">NETWORK_LOADING</code>.</p></li>
- <li><p>⌛ Set the element's <span>delaying-the-load-event flag</span> back to true (this
- <span data-x="delay the load event">delays the load event</span> again, in case it hasn't been
- fired yet).</p>
+ <li><p>⌛ Jump back to the <i>find next candidate</i> step above.</p></li>
- <li><p>⌛ Set the <code data-x="dom-media-networkState">networkState</code> back to <code
- data-x="dom-media-NETWORK_LOADING">NETWORK_LOADING</code>.</p></li>
+ </ol>
- <li><p>⌛ Jump back to the <i>find next candidate</i> step above.</p></li>
+ </dd>
+ </dl>
+
+ <p>The <dfn>dedicated media source failure steps</dfn> are the following steps:</p>
+
+ <ol>
+
+ <li><p>Set the <code data-x="dom-media-error">error</code> attribute to a new
+ <code>MediaError</code> object whose <code data-x="dom-MediaError-code">code</code> attribute
+ is set to <code
+ data-x="dom-MediaError-MEDIA_ERR_SRC_NOT_SUPPORTED">MEDIA_ERR_SRC_NOT_SUPPORTED</code>.</p></li>
+
+ <li><p><span>Forget the media element's media-resource-specific tracks</span>.</p></li>
+
+ <li><p>Set the element's <code data-x="dom-media-networkState">networkState</code> attribute to
+ the <code data-x="dom-media-NETWORK_NO_SOURCE">NETWORK_NO_SOURCE</code> value.</p></li>
+
+ <li><p>Set the element's <span>show poster flag</span> to true.</p></li>
+
+ <li><p><span>Fire a simple event</span> named <code data-x="event-media-error">error</code> at
+ the <span>media element</span>.</p></li>
+
+ <li><p>Set the element's <span>delaying-the-load-event flag</span> to false. This stops <span
+ data-x="delay the load event">delaying the load event</span>.</p></li>
+
</ol>
</li>
@@ -28440,119 +28534,193 @@
</ol>
<p>The <dfn data-x="concept-media-load-resource">resource fetch algorithm</dfn> for a <span>media
- element</span> and a given <span>absolute URL</span> is as follows:</p>
+ element</span> and a given <span>absolute URL</span> or <span>media provider object</span> is as
+ follows:</p>
<ol>
- <li><p>Let the <var>current media resource</var> be the resource given by the
- <span>absolute URL</span> passed to this algorithm. This is now the element's <span>media
+ <li><p>If the algorithm was invoked with a <span>URL</span>, then let <var>mode</var> be
+ <i>remote</i>, otherwise let <var>mode</var> be <i>local</i>.</p></li>
+
+ <li><p>If <var>mode</var> is <i>local</i>, then let the <var>current media resource</var> be the
+ resource given by the <span>absolute URL</span> passed to this algorithm; otherwise, let the
+ <var>current media resource</var> be the resource given by the <span>media provider
+ object</span>. Either way, the <var>current media resource</var> is now the element's <span>media
resource</span>.</p></li>
<li><p>Remove all <span data-x="media-resource-specific text track">media-resource-specific text
tracks</span> from the <span>media element</span>'s <span>list of pending text tracks</span>, if
any.</p>
- <li><p>Optionally, run the following substeps. This is the expected behavior if the user agent
- intends to not attempt to fetch the resource until the user requests it explicitly (e.g. as a way
- to implement the <code data-x="attr-media-preload">preload</code> attribute's <code
- data-x="attr-media-preload-none">none</code> keyword).</p>
- <ol>
+ <li>
- <li><p>Set the <code data-x="dom-media-networkState">networkState</code> to <code
- data-x="dom-media-NETWORK_IDLE">NETWORK_IDLE</code>.</p></li>
+ <p>Run the appropriate steps from the following list:</p>
- <li><p><span>Queue a task</span> to <span>fire a simple event</span> named <code
- data-x="event-media-suspend">suspend</code> at the element.</p></li>
+ <dl class="switch">
- <li><p><span>Queue a task</span> to set the element's <span>delaying-the-load-event flag</span>
- to false. This stops <span data-x="delay the load event">delaying the load
- event</span>.</p></li>
+ <dt>If <var>mode</var> is remote</dt>
- <li><p>Wait for the task to be run.</p></li>
+ <dd>
- <li><p>Wait for an implementation-defined event (e.g. the user requesting that the media
- element begin playback).</p></li>
+ <ol>
- <li><p>Set the element's <span>delaying-the-load-event flag</span> back to true (this <span
- data-x="delay the load event">delays the load event</span> again, in case it hasn't been fired
- yet).</p>
+ <li>
- <li><p>Set the <code data-x="dom-media-networkState">networkState</code> to <code
- data-x="dom-media-NETWORK_LOADING">NETWORK_LOADING</code>.</p></li>
+ <p>Optionally, run the following substeps. This is the expected behavior if the user agent
+ intends to not attempt to fetch the resource until the user requests it explicitly (e.g. as
+ a way to implement the <code data-x="attr-media-preload">preload</code> attribute's <code
+ data-x="attr-media-preload-none">none</code> keyword).</p>
- </ol>
+ <ol>
- </li>
+ <li><p>Set the <code data-x="dom-media-networkState">networkState</code> to <code
+ data-x="dom-media-NETWORK_IDLE">NETWORK_IDLE</code>.</p></li>
- <li>
+ <li><p><span>Queue a task</span> to <span>fire a simple event</span> named <code
+ data-x="event-media-suspend">suspend</code> at the element.</p></li>
- <p>Perform a <span>potentially CORS-enabled fetch</span><!--FETCH--> of the <var>current media
- resource</var>'s <span>absolute URL</span>, with the <i>mode</i> being the state of the
- <span>media element</span>'s <code data-x="attr-media-crossorigin">crossorigin</code> content
- attribute, the <i>origin</i> being the <span>origin</span> of the <span>media element</span>'s
- <code>Document</code>, and the <i>default origin behaviour</i> set to <i>taint</i>.</p>
+ <li><p><span>Queue a task</span> to set the element's <span>delaying-the-load-event flag</span>
+ to false. This stops <span data-x="delay the load event">delaying the load
+ event</span>.</p></li>
- <p>The resource obtained in this fashion, if any, contains the <span>media data</span>. It can
- be <span>CORS-same-origin</span> or <span>CORS-cross-origin</span>; this affects whether
- subtitles referenced in the <span>media data</span> are exposed in the API and, for
- <code>video</code> elements, whether a <code>canvas</code> gets tainted when the video is drawn
- on it.</p>
+ <li><p>Wait for the task to be run.</p></li>
- <p>While the load is not suspended (see below), every 350ms (±200ms) or for every byte
- received, whichever is <em>least</em> frequent, <span>queue a task</span> to <span>fire a simple
- event</span> named <code data-x="event-media-progress">progress</code> at the element.</p>
+ <li><p>Wait for an implementation-defined event (e.g. the user requesting that the media
+ element begin playback).</p></li>
- <p>The <dfn>stall timeout</dfn> is a user-agent defined length of time, which should be about
- three seconds. When a <span>media element</span> that is actively attempting to obtain
- <span>media data</span> has failed to receive any data for a duration equal to the <span>stall
- timeout</span>, the user agent must <span>queue a task</span> to <span>fire a simple
- event</span> named <code data-x="event-media-stalled">stalled</code> at the element.</p>
+ <li><p>Set the element's <span>delaying-the-load-event flag</span> back to true (this <span
+ data-x="delay the load event">delays the load event</span> again, in case it hasn't been fired
+ yet).</p>
- <p>User agents may allow users to selectively block or slow <span>media data</span> downloads.
- When a <span>media element</span>'s download has been blocked altogether, the user agent must
- act as if it was stalled (as opposed to acting as if the connection was closed). The rate of the
- download may also be throttled automatically by the user agent, e.g. to balance the download
- with other connections sharing the same bandwidth.</p>
+ <li><p>Set the <code data-x="dom-media-networkState">networkState</code> to <code
+ data-x="dom-media-NETWORK_LOADING">NETWORK_LOADING</code>.</p></li>
- <p id="resourceSuspend">User agents may decide to not download more content at any time, e.g.
- after buffering five minutes of a one hour media resource, while waiting for the user to decide
- whether to play the resource or not, while waiting for user input in an interactive resource, or
- when the user navigates away from the page. When a <span>media element</span>'s download has
- been suspended, the user agent must <span>queue a task</span>, to set the <code
- data-x="dom-media-networkState">networkState</code> to <code
- data-x="dom-media-NETWORK_IDLE">NETWORK_IDLE</code> and <span>fire a simple event</span> named
- <code data-x="event-media-suspend">suspend</code> at the element. If and when downloading of the
- resource resumes, the user agent must <span>queue a task</span> to set the <code
- data-x="dom-media-networkState">networkState</code> to <code
- data-x="dom-media-NETWORK_LOADING">NETWORK_LOADING</code>. Between the queuing of these tasks,
- the load is suspended (so <code data-x="event-media-progress">progress</code> events don't fire,
- as described above).</p>
+ </ol>
- <p class="note">The <code data-x="attr-media-preload">preload</code> attribute provides a hint
- regarding how much buffering the author thinks is advisable, even in the absence of the <code
- data-x="attr-media-autoplay">autoplay</code> attribute.</p>
+ </li>
- <p>When a user agent decides to completely stall a download, e.g. if it is waiting until the
- user starts playback before downloading any further content, the user agent must <span>queue a
- task</span> to set the element's <span>delaying-the-load-event flag</span> to false. This stops
- <span data-x="delay the load event">delaying the load event</span>.</p>
+ <li>
- <p>The user agent may use whatever means necessary to fetch the resource (within the constraints
- put forward by this and other specifications); for example, reconnecting to the server in the
- face of network errors, using HTTP range retrieval requests, or switching to a streaming
- protocol. The user agent must consider a resource erroneous only if it has given up trying to
- fetch it.</p>
+ <p>Perform a <span>potentially CORS-enabled fetch</span><!--FETCH--> of the <var>current media
+ resource</var>'s <span>absolute URL</span>, with the <i>mode</i> being the state of the
+ <span>media element</span>'s <code data-x="attr-media-crossorigin">crossorigin</code> content
+ attribute, the <i>origin</i> being the <span>origin</span> of the <span>media element</span>'s
+ <code>Document</code>, and the <i>default origin behaviour</i> set to <i>taint</i>.</p>
- <p>To determine the format of the <span>media resource</span>, the user agent must use the
- <span>rules for sniffing audio and video specifically</span>.</p>
+ <p>The resource obtained in this fashion, if any, contains the <span>media data</span>. It can
+ be <span>CORS-same-origin</span> or <span>CORS-cross-origin</span>; this affects whether
+ subtitles referenced in the <span>media data</span> are exposed in the API and, for
+ <code>video</code> elements, whether a <code>canvas</code> gets tainted when the video is drawn
+ on it.</p>
- <p>The <span>networking task source</span> <span data-x="concept-task">tasks</span> to process
- the data as it is being fetched must each immediately <span>queue a task</span> to run the first
- appropriate steps from the following list. (A new task is used for this so that the work
- described below occurs relative to the <span>media element event task source</span> rather than
- the <span>networking task source</span>.)</p>
+ <p>The <dfn>stall timeout</dfn> is a user-agent defined length of time, which should be about
+ three seconds. When a <span>media element</span> that is actively attempting to obtain
+ <span>media data</span> has failed to receive any data for a duration equal to the <span>stall
+ timeout</span>, the user agent must <span>queue a task</span> to <span>fire a simple
+ event</span> named <code data-x="event-media-stalled">stalled</code> at the element.</p>
+ <p>User agents may allow users to selectively block or slow <span>media data</span> downloads.
+ When a <span>media element</span>'s download has been blocked altogether, the user agent must
+ act as if it was stalled (as opposed to acting as if the connection was closed). The rate of the
+ download may also be throttled automatically by the user agent, e.g. to balance the download
+ with other connections sharing the same bandwidth.</p>
+
+ <p id="resourceSuspend">User agents may decide to not download more content at any time, e.g.
+ after buffering five minutes of a one hour media resource, while waiting for the user to decide
+ whether to play the resource or not, while waiting for user input in an interactive resource, or
+ when the user navigates away from the page. When a <span>media element</span>'s download has
+ been suspended, the user agent must <span>queue a task</span>, to set the <code
+ data-x="dom-media-networkState">networkState</code> to <code
+ data-x="dom-media-NETWORK_IDLE">NETWORK_IDLE</code> and <span>fire a simple event</span> named
+ <code data-x="event-media-suspend">suspend</code> at the element. If and when downloading of the
+ resource resumes, the user agent must <span>queue a task</span> to set the <code
+ data-x="dom-media-networkState">networkState</code> to <code
+ data-x="dom-media-NETWORK_LOADING">NETWORK_LOADING</code>. Between the queuing of these tasks,
+ the load is suspended (so <code data-x="event-media-progress">progress</code> events don't fire,
+ as described above).</p>
+
+ <p class="note">The <code data-x="attr-media-preload">preload</code> attribute provides a hint
+ regarding how much buffering the author thinks is advisable, even in the absence of the <code
+ data-x="attr-media-autoplay">autoplay</code> attribute.</p>
+
+ <p>When a user agent decides to completely stall a download, e.g. if it is waiting until the
+ user starts playback before downloading any further content, the user agent must <span>queue a
+ task</span> to set the element's <span>delaying-the-load-event flag</span> to false. This stops
+ <span data-x="delay the load event">delaying the load event</span>.</p>
+
+ <p>The user agent may use whatever means necessary to fetch the resource (within the constraints
+ put forward by this and other specifications); for example, reconnecting to the server in the
+ face of network errors, using HTTP range retrieval requests, or switching to a streaming
+ protocol. The user agent must consider a resource erroneous only if it has given up trying to
+ fetch it.</p>
+
+ <p>To determine the format of the <span>media resource</span>, the user agent must use the
+ <span>rules for sniffing audio and video specifically</span>.</p>
+
+ <p>While the load is not suspended (see below), every 350ms (±200ms) or for every byte
+ received, whichever is <em>least</em> frequent, <span>queue a task</span> to <span>fire a simple
+ event</span> named <code data-x="event-media-progress">progress</code> at the element.</p>
+
+ <p>The <span>networking task source</span> <span data-x="concept-task">tasks</span> to
+ process the data as it is being fetched must each immediately <span>queue a task</span> to
+ run the first appropriate steps from the <span>media data processing steps list</span>
+ below. (A new task is used for this so that the work described below occurs relative to the
+ <span>media element event task source</span> rather than the <span>networking task
+ source</span>.)</p>
+
+ <p>When the <span>networking task source</span> has <span data-x="queue a task">queued</span> the
+ last <span data-x="concept-task">task</span> as part of <span data-x="fetch">fetching</span> the
+ <span>media resource</span> (i.e. once the download has completed), if the fetching process
+ completes without errors, including decoding the media data, and if all of the data is available
+ to the user agent without network access, then, the user agent must move on to the <i>final step</i> below.
+ This might never happen, e.g. when streaming an infinite resource such as Web radio, or if the
+ resource is longer than the user agent's ability to cache data.</p>
+
+ <p>While the user agent might still need network access to obtain parts of the <span>media
+ resource</span>, the user agent must remain on this step.</p>
+
+ <p class="example">For example, if the user agent has discarded the first half of a video, the
+ user agent will remain at this step even once the <span data-x="ended playback">playback has
+ ended</span>, because there is always the chance the user will seek back to the start. In fact,
+ in this situation, once <span data-x="ended playback">playback has ended</span>, the user agent
+ will end up firing a <code data-x="event-media-suspend">suspend</code> event, as described
+ earlier.</p>
+
+ </li>
+
+ </ol>
+
+ </dd>
+
+ <dt>Otherwise (<var>mode</var> is <i>local</i>)</dt>
+
+ <dd>
+
+ <p>The resource described by the <var>current media resource</var>, if any, contains the
+ <span>media data</span>. It is <span>CORS-same-origin</span>. </p>
+
+ <p>If the <var>current media resource</var> is a raw data stream (e.g. from a
+ <code>File</code> object), then to determine the format of the <span>media resource</span>,
+ the user agent must use the <span>rules for sniffing audio and video specifically</span>.
+ Otherwise, if the data stream is pre-decoded, then the format is the format given by the
+ relevant specification.</p>
+
+ <p>Whenever new data for the <var>current media resource</var> becomes available, <span>queue
+ a task</span> to run the first appropriate steps from the <span>media data processing steps
+ list</span> below.</p>
+
+ <p>When the <var>current media resource</var> is permanently exhausted (e.g. all the bytes of
+ a <code>Blob</code> have been processed), if there were no decoding errors, then the user
+ agent must move on to the <i>final step</i> below. This might never happen, e.g. if the
+ <var>current media resource</var> is a <code>MediaStream</code>.</p>
+
+ </dd>
+
+ </dl>
+
+ <p>The <dfn>media data processing steps list</dfn> is as follows:</p>
+
<dl class="switch">
<dt>If the <span>media data</span> cannot be fetched at all, due to network errors, causing the
@@ -28580,11 +28748,6 @@
</dd>
- <!-- insert content sniffing here if we want to define that -->
- <!-- (in practice I don't think that's necessary since it's not like you can do anything with
- the resource if you sniff it as the wrong type) -->
-
-
<dt id="found-another-audio-track">If the <span>media resource</span> is found to have an audio
track</dt>
@@ -28839,8 +29002,7 @@
data-x="dom-media-NETWORK_LOADING">NETWORK_LOADING</code>.</p>
<p class="note">If the user agent can keep the <span>media resource</span> loaded, then the
- algorithm will continue to its final step below, which aborts the algorithm.</p><!-- see FINAL
- STEP below -->
+ algorithm will continue to its <i>final step</i> below, which aborts the algorithm.</p>
</dd>
@@ -29000,28 +29162,10 @@
</dl>
- <p>When the <span>networking task source</span> has <span data-x="queue a task">queued</span> the
- last <span data-x="concept-task">task</span> as part of <span data-x="fetch">fetching</span> the
- <span>media resource</span> (i.e. once the download has completed), if the fetching process
- completes without errors, including decoding the media data, and if all of the data is available
- to the user agent without network access, then, the user agent must move on to the next step.
- This might never happen, e.g. when streaming an infinite resource such as Web radio, or if the
- resource is longer than the user agent's ability to cache data.</p>
-
- <p>While the user agent might still need network access to obtain parts of the <span>media
- resource</span>, the user agent must remain on this step.</p>
-
- <p class="example">For example, if the user agent has discarded the first half of a video, the
- user agent will remain at this step even once the <span data-x="ended playback">playback has
- ended</span>, because there is always the chance the user will seek back to the start. In fact,
- in this situation, once <span data-x="ended playback">playback has ended</span>, the user agent
- will end up firing a <code data-x="event-media-suspend">suspend</code> event, as described
- earlier.</p>
-
</li>
- <!-- this step is mentioned above, search for "FINAL STEP" -->
- <li><p>If the user agent ever reaches this step (which can only happen if the entire resource
+ <!-- this step is mentioned above, search for "final step" -->
+ <li><p><i>Final step:</i> If the user agent ever reaches this step (which can only happen if the entire resource
gets loaded and kept available): abort the overall <span
data-x="concept-media-load-algorithm">resource selection algorithm</span>.</p></li>
@@ -114701,6 +114845,12 @@
<dt id="refsMEDIAFRAG">[MEDIAFRAG]</dt>
<dd><cite><a href="http://www.w3.org/2008/WebVideo/Fragments/WD-media-fragments-spec/">Media Fragments URI</a></cite>, R. Troncy, E. Mannens, S. Pfeiffer, D. Van Deursen. W3C.</dd>
+ <dt id="refsMEDIASOURCE">[MEDIASOURCE]</dt>
+ <dd><cite><a href="https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html">Media Source Extensions</a></cite>, A. Colwell, A. Bateman, M. Watson. W3C.</dd>
+
+ <dt id="refsMEDIASTREAM">[MEDIASTREAM]</dt>
+ <dd><cite><a href="http://dev.w3.org/2011/webrtc/editor/getusermedia.html">Media Capture and Streams</a></cite>, D. Burnett, A. Bergkvist, C. Jennings, A. Narayanan. W3C.</dd>
+
<dt id="refsMFREL">[MFREL]</dt>
<dd><cite><a href="http://microformats.org/wiki/existing-rel-values#HTML5_link_type_extensions">Microformats Wiki: existing rel values</a></cite>. Microformats.</dd>
More information about the Commit-Watchers
mailing list