[html5] r7695 - [e] (0) Cleanup
whatwg at whatwg.org
whatwg at whatwg.org
Tue Feb 5 14:23:47 PST 2013
Author: ianh
Date: 2013-02-05 14:23:45 -0800 (Tue, 05 Feb 2013)
New Revision: 7695
Modified:
complete.html
index
source
Log:
[e] (0) Cleanup
Modified: complete.html
===================================================================
--- complete.html 2013-02-05 20:33:00 UTC (rev 7694)
+++ complete.html 2013-02-05 22:23:45 UTC (rev 7695)
@@ -12394,24 +12394,23 @@
<h3 id=interactions-with-xpath-and-xslt><span class=secno>3.3 </span>Interactions with XPath and XSLT</h3>
- <p id=xpath-1.0-processors>Implementations of XPath 1.0 that
- operate on <a href=#html-documents>HTML documents</a> parsed or created in the
- manners described in this specification (e.g. as part of the <code title="">document.evaluate()</code> API) must act as if the
- following edit was applied to the XPath 1.0 specification.</p>
+ <p id=xpath-1.0-processors>Implementations of XPath 1.0 that operate on <a href=#html-documents>HTML
+ documents</a> parsed or created in the manners described in this specification (e.g. as part of
+ the <code title="">document.evaluate()</code> API) must act as if the following edit was applied
+ to the XPath 1.0 specification.</p>
<p>First, remove this paragraph:</p>
<blockquote cite=http://www.w3.org/TR/1999/REC-xpath-19991116#node-tests>
- <p>A <a href=http://www.w3.org/TR/REC-xml-names#NT-QName>QName</a> in the
- node test is expanded into an <a href=http://www.w3.org/TR/1999/REC-xpath-19991116#dt-expanded-name>expanded-name</a>
- using the namespace declarations from the expression context. This
- is the same way expansion is done for element type names in start
- and end-tags except that the default namespace declared with <code title="">xmlns</code> is not used: if the <a href=http://www.w3.org/TR/REC-xml-names#NT-QName>QName</a> does
- not have a prefix, then the namespace URI is null (this is the same
- way attribute names are expanded). It is an error if the <a href=http://www.w3.org/TR/REC-xml-names#NT-QName>QName</a> has a
- prefix for which there is no namespace declaration in the
- expression context.</p>
+ <p>A <a href=http://www.w3.org/TR/REC-xml-names#NT-QName>QName</a> in the node test is expanded
+ into an <a href=http://www.w3.org/TR/1999/REC-xpath-19991116#dt-expanded-name>expanded-name</a>
+ using the namespace declarations from the expression context. This is the same way expansion is
+ done for element type names in start and end-tags except that the default namespace declared with
+ <code title="">xmlns</code> is not used: if the <a href=http://www.w3.org/TR/REC-xml-names#NT-QName>QName</a> does not have a prefix, then the
+ namespace URI is null (this is the same way attribute names are expanded). It is an error if the
+ <a href=http://www.w3.org/TR/REC-xml-names#NT-QName>QName</a> has a prefix for which there is
+ no namespace declaration in the expression context.</p>
</blockquote>
@@ -12419,87 +12418,68 @@
<blockquote cite="http://www.w3.org/Bugs/Public/show_bug.cgi?id=7059#c37">
- <p>A QName in the node test is expanded into an expanded-name using
- the namespace declarations from the expression context. If the
- QName has a prefix, then there must be a<!-- added 2009-10-27 -
- http://www.w3.org/Bugs/Public/show_bug.cgi?id=8062 --> namespace
- declaration for this prefix in the expression context, and the
- corresponding<!-- typo fixed 2009-10-27 -
- http://www.w3.org/Bugs/Public/show_bug.cgi?id=8063 --> namespace
- URI is the one that is associated with this prefix. It is an error
- if the QName has a prefix for which there is no namespace
- declaration in the expression context. </p>
+ <p>A QName in the node test is expanded into an expanded-name using the namespace declarations
+ from the expression context. If the QName has a prefix, then there must be a<!-- added 2009-10-27
+ - http://www.w3.org/Bugs/Public/show_bug.cgi?id=8062 --> namespace declaration for this prefix in
+ the expression context, and the corresponding<!-- typo fixed 2009-10-27 -
+ http://www.w3.org/Bugs/Public/show_bug.cgi?id=8063 --> namespace URI is the one that is
+ associated with this prefix. It is an error if the QName has a prefix for which there is no
+ namespace declaration in the expression context. </p>
- <p>If the QName has no prefix and the principal node type of the
- axis is element, then the default element namespace is
- used. Otherwise if the QName has no prefix, the namespace URI is
- null. The default element namespace is a member of the context for
- the XPath expression. The value of the default element namespace
- when executing an XPath expression through the DOM3 XPath API is
- determined in the following way:</p>
+ <p>If the QName has no prefix and the principal node type of the axis is element, then the
+ default element namespace is used. Otherwise if the QName has no prefix, the namespace URI is
+ null. The default element namespace is a member of the context for the XPath expression. The
+ value of the default element namespace when executing an XPath expression through the DOM3 XPath
+ API is determined in the following way:</p>
- <ol><li>If the context node is from an HTML DOM, the default element
- namespace is "http://www.w3.org/1999/xhtml".</li>
+ <ol><li>If the context node is from an HTML DOM, the default element namespace is
+ "http://www.w3.org/1999/xhtml".</li>
<li>Otherwise, the default element namespace URI is null.</li>
- </ol><p class=note>This is equivalent to adding the default element
- namespace feature of XPath 2.0 to XPath 1.0, and using the HTML
- namespace as the default element namespace for HTML documents. It
- is motivated by the desire to have implementations be compatible
- with legacy HTML content while still supporting the changes that
- this specification introduces to HTML regarding the namespace used
- for HTML elements, and by the desire to use XPath 1.0 rather than
- XPath 2.0.</p>
+ </ol><p class=note>This is equivalent to adding the default element namespace feature of XPath 2.0
+ to XPath 1.0, and using the HTML namespace as the default element namespace for HTML documents.
+ It is motivated by the desire to have implementations be compatible with legacy HTML content
+ while still supporting the changes that this specification introduces to HTML regarding the
+ namespace used for HTML elements, and by the desire to use XPath 1.0 rather than XPath 2.0.</p>
</blockquote>
- <p class=note>This change is a <a href=#willful-violation>willful violation</a> of
- the XPath 1.0 specification, motivated by desire to have
- implementations be compatible with legacy content while still
- supporting the changes that this specification introduces to HTML
- regarding which namespace is used for HTML elements. <a href=#refsXPATH10>[XPATH10]</a></p> <!-- note: version matters for
+ <p class=note>This change is a <a href=#willful-violation>willful violation</a> of the XPath 1.0 specification,
+ motivated by desire to have implementations be compatible with legacy content while still
+ supporting the changes that this specification introduces to HTML regarding which namespace is
+ used for HTML elements. <a href=#refsXPATH10>[XPATH10]</a></p> <!-- note: version matters for
this ref -->
- <hr><p id=dom-based-xslt-1.0-processors>XSLT 1.0 processors outputting
- to a DOM when the output method is "html" (either explicitly or via
- the defaulting rule in XSLT 1.0) are affected as follows:</p>
+ <hr><p id=dom-based-xslt-1.0-processors>XSLT 1.0 processors outputting to a DOM when the output
+ method is "html" (either explicitly or via the defaulting rule in XSLT 1.0) are affected as
+ follows:</p>
- <p>If the transformation program outputs an element in no namespace,
- the processor must, prior to constructing the corresponding DOM
- element node, change the namespace of the element to the <a href=#html-namespace-0>HTML
- namespace</a>, <a href=#converted-to-ascii-lowercase title="converted to ASCII
- lowercase">ASCII-lowercase</a> the element's local name, and
- <a href=#converted-to-ascii-lowercase title="converted to ASCII lowercase">ASCII-lowercase</a>
- the names of any non-namespaced attributes on the element.</p>
+ <p>If the transformation program outputs an element in no namespace, the processor must, prior to
+ constructing the corresponding DOM element node, change the namespace of the element to the
+ <a href=#html-namespace-0>HTML namespace</a>, <a href=#converted-to-ascii-lowercase title="converted to ASCII lowercase">ASCII-lowercase</a> the
+ element's local name, and <a href=#converted-to-ascii-lowercase title="converted to ASCII lowercase">ASCII-lowercase</a> the
+ names of any non-namespaced attributes on the element.</p>
- <p class=note>This requirement is a <a href=#willful-violation>willful violation</a>
- of the XSLT 1.0 specification, required because this specification
- changes the namespaces and case-sensitivity rules of HTML in a
- manner that would otherwise be incompatible with DOM-based XSLT
- transformations. (Processors that serialize the output are
- unaffected.) <a href=#refsXSLT10>[XSLT10]</a></p> <!-- note:
- version matters for this ref -->
+ <p class=note>This requirement is a <a href=#willful-violation>willful violation</a> of the XSLT 1.0
+ specification, required because this specification changes the namespaces and case-sensitivity
+ rules of HTML in a manner that would otherwise be incompatible with DOM-based XSLT
+ transformations. (Processors that serialize the output are unaffected.) <a href=#refsXSLT10>[XSLT10]</a></p> <!-- note: version matters for this ref -->
- <hr><p>This specification does not specify precisely how XSLT processing
- interacts with the <a href=#html-parser>HTML parser</a> infrastructure (for
- example, whether an XSLT processor acts as if it puts any elements
- into a <a href=#stack-of-open-elements>stack of open elements</a>). However, XSLT
- processors must <a href=#stop-parsing>stop parsing</a> if they successfully
- complete, and must set the <a href=#current-document-readiness>current document readiness</a>
- first to "<code title="">interactive</code>"<!-- this synchronously
- fires an event --> and then to "<code title="">complete</code>"<!--
- this also synchronously fires an event --> if they are aborted.</p>
+ <hr><p>This specification does not specify precisely how XSLT processing interacts with the <a href=#html-parser>HTML
+ parser</a> infrastructure (for example, whether an XSLT processor acts as if it puts any
+ elements into a <a href=#stack-of-open-elements>stack of open elements</a>). However, XSLT processors must <a href=#stop-parsing>stop
+ parsing</a> if they successfully complete, and must set the <a href=#current-document-readiness>current document
+ readiness</a> first to "<code title="">interactive</code>"<!-- this synchronously fires an
+ event --> and then to "<code title="">complete</code>"<!-- this also synchronously fires an event
+ --> if they are aborted.</p>
- <hr><p>This specification does not specify how XSLT interacts with the
- <a href=#navigate title=navigate>navigation</a> algorithm, how it fits in
- with the <a href=#event-loop>event loop</a>, nor how error pages are to be
- handled (e.g. whether XSLT errors are to replace an incremental XSLT
+ <hr><p>This specification does not specify how XSLT interacts with the <a href=#navigate title=navigate>navigation</a> algorithm, how it fits in with the <a href=#event-loop>event loop</a>, nor
+ how error pages are to be handled (e.g. whether XSLT errors are to replace an incremental XSLT
output, or are rendered inline, etc).</p>
- <p class=note>There are also additional non-normative comments
- regarding the interaction of XSLT and HTML <a href=#scriptTagXSLT>in the <code>script</code> element
- section</a>.</p>
+ <p class=note>There are also additional non-normative comments regarding the interaction of XSLT
+ and HTML <a href=#scriptTagXSLT>in the <code>script</code> element section</a>.</p>
</div>
@@ -12740,27 +12720,25 @@
</dl><div class=impl>
- <p>The <dfn id=dom-document-close title=dom-document-close><code>close()</code></dfn>
- method must run the following steps:</p>
+ <p>The <dfn id=dom-document-close title=dom-document-close><code>close()</code></dfn> method must run the following
+ steps:</p>
- <ol><li><p>If the <code><a href=#document>Document</a></code> object is not flagged as an
- <a href=#html-documents title="HTML documents">HTML document</a>, throw an
- <code><a href=#invalidstateerror>InvalidStateError</a></code> exception and abort these
+ <ol><li><p>If the <code><a href=#document>Document</a></code> object is not flagged as an <a href=#html-documents title="HTML documents">HTML
+ document</a>, throw an <code><a href=#invalidstateerror>InvalidStateError</a></code> exception and abort these
steps.</li>
- <li><p>If there is no <a href=#script-created-parser>script-created parser</a> associated
- with the document, then abort these steps.</li>
+ <li><p>If there is no <a href=#script-created-parser>script-created parser</a> associated with the document, then abort
+ these steps.</li>
- <li><p>Insert an <a href=#explicit-eof-character>explicit "EOF" character</a> at the end
- of the parser's <a href=#input-stream>input stream</a>.</li>
+ <li><p>Insert an <a href=#explicit-eof-character>explicit "EOF" character</a> at the end of the parser's <a href=#input-stream>input
+ stream</a>.</li>
- <li><p>If there is a <a href=#pending-parsing-blocking-script>pending parsing-blocking script</a>,
- then abort these steps.</li>
+ <li><p>If there is a <a href=#pending-parsing-blocking-script>pending parsing-blocking script</a>, then abort these
+ steps.</li>
- <li><p>Run the tokenizer, processing resulting tokens as they are
- emitted, and stopping when the tokenizer reaches the <a href=#explicit-eof-character>explicit
- "EOF" character</a> or <a href=#spin-the-event-loop title="spin the event loop">spins
- the event loop</a>.</li>
+ <li><p>Run the tokenizer, processing resulting tokens as they are emitted, and stopping when the
+ tokenizer reaches the <a href=#explicit-eof-character>explicit "EOF" character</a> or <a href=#spin-the-event-loop title="spin the event
+ loop">spins the event loop</a>.</li>
</ol></div>
@@ -14715,14 +14693,12 @@
<h4 id=styling><span class=secno>4.2.7 </span><dfn title="styling processing model">Styling</dfn></h4>
- <p>The <code><a href=#the-link-element>link</a></code> and <code><a href=#the-style-element>style</a></code> elements can provide
- styling information for the user agent to use when rendering the
- document. The CSS and CSSOM specifications specify what styling
- information is to be used by the user agent and how it is to be
- used. <a href=#refsCSS>[CSS]</a> <a href=#refsCSSOM>[CSSOM]</a></p>
+ <p>The <code><a href=#the-link-element>link</a></code> and <code><a href=#the-style-element>style</a></code> elements can provide styling information for the
+ user agent to use when rendering the document. The CSS and CSSOM specifications specify what
+ styling information is to be used by the user agent and how it is to be used. <a href=#refsCSS>[CSS]</a> <a href=#refsCSSOM>[CSSOM]</a></p>
- <p>The <code><a href=#the-style-element>style</a></code> and <code><a href=#the-link-element>link</a></code> elements implement
- the <code><a href=#linkstyle>LinkStyle</a></code> interface. <a href=#refsCSSOM>[CSSOM]</a></p>
+ <p>The <code><a href=#the-style-element>style</a></code> and <code><a href=#the-link-element>link</a></code> elements implement the <code><a href=#linkstyle>LinkStyle</a></code>
+ interface. <a href=#refsCSSOM>[CSSOM]</a></p>
<div class=impl>
@@ -14745,126 +14721,98 @@
<dl><dt>The style sheet type</dt>
- <dd><p>The style sheet type must be the same as the style's specified
- type. For <code><a href=#the-style-element>style</a></code> elements, this is the same as the
- <code title=attr-style-type><a href=#attr-style-type>type</a></code> content attribute's
- value, or <code title="">text/css</code> if that is omitted. For
- <code><a href=#the-link-element>link</a></code> elements, this is the <a href=#content-type title=Content-Type>Content-Type metadata of the specified
- resource</a>.</dd>
+ <dd><p>The style sheet type must be the same as the style's specified type. For
+ <code><a href=#the-style-element>style</a></code> elements, this is the same as the <code title=attr-style-type><a href=#attr-style-type>type</a></code>
+ content attribute's value, or <code title="">text/css</code> if that is omitted. For
+ <code><a href=#the-link-element>link</a></code> elements, this is the <a href=#content-type title=Content-Type>Content-Type metadata of the
+ specified resource</a>.</dd>
<dt>The style sheet location</dt>
- <dd><p>For <code><a href=#the-link-element>link</a></code> elements, the location must be the
- result of <a href=#resolve-a-url title="resolve a url">resolving</a> the
- <a href=#url>URL</a> given by the element's <code title=attr-link-href><a href=#attr-link-href>href</a></code> content attribute, relative to
- the element, or the empty string if that fails. For
- <code><a href=#the-style-element>style</a></code> elements, there is no location.</dd> <!--
- note that this might not match the style sheet URL, if the base URL
- has changed for instance -->
+ <dd><p>For <code><a href=#the-link-element>link</a></code> elements, the location must be the result of <a href=#resolve-a-url title="resolve a
+ url">resolving</a> the <a href=#url>URL</a> given by the element's <code title=attr-link-href><a href=#attr-link-href>href</a></code> content attribute, relative to the element, or the empty
+ string if that fails. For <code><a href=#the-style-element>style</a></code> elements, there is no location.</dd> <!-- note
+ that this might not match the style sheet URL, if the base URL has changed for instance -->
<dt>The style sheet media</dt>
- <dd><p>The media must be the same as the value of the element's
- <code title="">media</code> content attribute, or the empty string,
- if the attribute is omitted.</dd>
+ <dd><p>The media must be the same as the value of the element's <code title="">media</code>
+ content attribute, or the empty string, if the attribute is omitted.</dd>
<dt>The style sheet title</dt>
- <dd><p>The title must be the same as the value of the element's
- <code title=dom-title><a href=#dom-title>title</a></code> content attribute, if the
- attribute is present and has a non-empty value. If the attribute is
- absent or its value is the empty string, then the style sheet does
- not have a title (it is the empty string). The title is used for
- defining <a href=#alternative-style-sheet-sets>alternative style sheet sets</a>.</dd>
+ <dd><p>The title must be the same as the value of the element's <code title=dom-title><a href=#dom-title>title</a></code> content attribute, if the attribute is present and has a non-empty
+ value. If the attribute is absent or its value is the empty string, then the style sheet does not
+ have a title (it is the empty string). The title is used for defining <a href=#alternative-style-sheet-sets>alternative style
+ sheet sets</a>.</dd>
<dt>The style sheet alternate flag</dt>
- <dd><p>For <code><a href=#the-link-element>link</a></code> elements, true if <a href=#the-link-is-an-alternative-stylesheet>the link is an
- alternative stylesheet</a>. In all other cases, false.</dd>
+ <dd><p>For <code><a href=#the-link-element>link</a></code> elements, true if <a href=#the-link-is-an-alternative-stylesheet>the link is an alternative
+ stylesheet</a>. In all other cases, false.</dd>
<!--
- <dt>The style sheet disabled flag</dt>
- (not included, because I assume CSSOM will change to not require
- this spec to initialise the value, but will instead initialise it
- based on the other values)
+ <dt>The style sheet disabled flag</dt> (not included, because I assume CSSOM will change to not
+ require this spec to initialise the value, but will instead initialise it based on the other
+ values)
-->
</dl><p>The same object must be returned each time.</p>
- <p>The <dfn id=dom-linkstyle-disabled title=dom-LinkStyle-disabled><code>disabled</code></dfn> IDL
- attribute on <code><a href=#the-link-element>link</a></code> and <code><a href=#the-style-element>style</a></code> elements must
- return false and do nothing on setting, if the <code title=dom-linkstyle-sheet><a href=#dom-linkstyle-sheet>sheet</a></code> attribute of their
- <code><a href=#linkstyle>LinkStyle</a></code> interface is null. Otherwise, it must return
- the value of the <code><a href=#stylesheet>StyleSheet</a></code> interface's <code title=dom-stylesheet-disabled><a href=#dom-stylesheet-disabled>disabled</a></code> attribute on
- getting, and forward the new value to that same attribute on
- setting.</p>
+ <p>The <dfn id=dom-linkstyle-disabled title=dom-LinkStyle-disabled><code>disabled</code></dfn> IDL attribute on
+ <code><a href=#the-link-element>link</a></code> and <code><a href=#the-style-element>style</a></code> elements must return false and do nothing on setting, if
+ the <code title=dom-linkstyle-sheet><a href=#dom-linkstyle-sheet>sheet</a></code> attribute of their <code><a href=#linkstyle>LinkStyle</a></code>
+ interface is null. Otherwise, it must return the value of the <code><a href=#stylesheet>StyleSheet</a></code> interface's
+ <code title=dom-stylesheet-disabled><a href=#dom-stylesheet-disabled>disabled</a></code> attribute on getting, and forward the new
+ value to that same attribute on setting.</p>
- <!-- [CSSOM] covers the following: the term "alternative style sheet
- sets", the term "default style sheet set", preferred stylesheets,
- alternative stylesheets, persistent stylesheets, ordering of
- stylesheets, dynamic additions/removals, window.styleSheets, style
- sheets given by HTTP Link: headers, and the alternative style sheet
- API -->
+ <!-- [CSSOM] covers the following: the term "alternative style sheet sets", the term "default
+ style sheet set", preferred stylesheets, alternative stylesheets, persistent stylesheets, ordering
+ of stylesheets, dynamic additions/removals, window.styleSheets, style sheets given by HTTP Link:
+ headers, and the alternative style sheet API -->
- <p id=alternate-style-sheets>The rules for handling alternative
- style sheets are defined in the CSS object model specification. <a href=#refsCSSOM>[CSSOM]</a></p>
+ <p id=alternate-style-sheets>The rules for handling alternative style sheets are defined in the
+ CSS object model specification. <a href=#refsCSSOM>[CSSOM]</a></p>
- <hr><p>Style sheets, whether added by a <code><a href=#the-link-element>link</a></code> element, a
- <code><a href=#the-style-element>style</a></code> element, an <code><?xml-stylesheet></code> PI,
- an HTTP <code title=http-link>Link:</code> header, or some other
- mechanism, have a <dfn id=style-sheet-ready>style sheet ready</dfn> flag, which is
- initially unset.</p>
+ <hr><p>Style sheets, whether added by a <code><a href=#the-link-element>link</a></code> element, a <code><a href=#the-style-element>style</a></code> element, an
+ <code><?xml-stylesheet></code> PI, an HTTP <code title=http-link>Link:</code> header, or some
+ other mechanism, have a <dfn id=style-sheet-ready>style sheet ready</dfn> flag, which is initially unset.</p>
- <p>When a style sheet is ready to be applied, its <a href=#style-sheet-ready>style sheet
- ready</a> flag must be set. If the style sheet referenced no
- other resources (e.g. it was an internal style sheet given by a
- <code><a href=#the-style-element>style</a></code> element with no <code title="">@import</code>
- rules), then the style rules must be synchronously made available to
- script; otherwise, the style rules must only be made available to
- script once the <a href=#event-loop>event loop</a> reaches its "update the
- rendering" step.</p>
+ <p>When a style sheet is ready to be applied, its <a href=#style-sheet-ready>style sheet ready</a> flag must be set.
+ If the style sheet referenced no other resources (e.g. it was an internal style sheet given by a
+ <code><a href=#the-style-element>style</a></code> element with no <code title="">@import</code> rules), then the style rules must
+ be synchronously made available to script; otherwise, the style rules must only be made available
+ to script once the <a href=#event-loop>event loop</a> reaches its "update the rendering" step.</p>
- <p>A style sheet in the context of the <code><a href=#document>Document</a></code> of an
- <a href=#html-parser>HTML parser</a> or <a href=#xml-parser>XML parser</a> is said to be
- <dfn id=a-style-sheet-that-is-blocking-scripts>a style sheet that is blocking scripts</dfn> if the element was
- created by that <code><a href=#document>Document</a></code>'s parser, and the element is
- either a <code><a href=#the-style-element>style</a></code> element or a <code><a href=#the-link-element>link</a></code> element
- that was an <a href=#link-type-stylesheet title=rel-stylesheet>external resource link that
- contributes to the styling processing model</a> when the element
- was created by the parser, and the element's style sheet was enabled
- when the element was created by the parser, and the element's
- <a href=#style-sheet-ready>style sheet ready</a> flag is not yet set, and, the last
- time the <a href=#event-loop>event loop</a> reached step 1, the element was
- <a href=#in-a-document title="in a document">in that <code>Document</code></a>,
- and the user agent hasn't given up on that particular style sheet
- yet. A user agent may give up on a style sheet at any time.</p>
+ <p>A style sheet in the context of the <code><a href=#document>Document</a></code> of an <a href=#html-parser>HTML parser</a> or
+ <a href=#xml-parser>XML parser</a> is said to be <dfn id=a-style-sheet-that-is-blocking-scripts>a style sheet that is blocking scripts</dfn> if the
+ element was created by that <code><a href=#document>Document</a></code>'s parser, and the element is either a
+ <code><a href=#the-style-element>style</a></code> element or a <code><a href=#the-link-element>link</a></code> element that was an <a href=#link-type-stylesheet title=rel-stylesheet>external resource link that contributes to the styling processing
+ model</a> when the element was created by the parser, and the element's style sheet was enabled
+ when the element was created by the parser, and the element's <a href=#style-sheet-ready>style sheet ready</a> flag
+ is not yet set, and, the last time the <a href=#event-loop>event loop</a> reached step 1, the element was
+ <a href=#in-a-document title="in a document">in that <code>Document</code></a>, and the user agent hasn't given
+ up on that particular style sheet yet. A user agent may give up on a style sheet at any time.</p>
- <p class=note>Giving up on a style sheet before the style sheet
- loads, if the style sheet eventually does still load, means that the
- script might end up operating with incorrect information. For
- example, if a style sheet sets the color of an element to green, but
- a script that inspects the resulting style is executed before the
- sheet is loaded, the script will find that the element is black (or
- whatever the default color is), and might thus make poor choices
- (e.g. deciding to use black as the color elsewhere on the page,
- instead of green). Implementors have to balance the likelihood of a
- script using incorrect information with the performance impact of
- doing nothing while waiting for a slow network request to
- finish.</p>
+ <p class=note>Giving up on a style sheet before the style sheet loads, if the style sheet
+ eventually does still load, means that the script might end up operating with incorrect
+ information. For example, if a style sheet sets the color of an element to green, but a script
+ that inspects the resulting style is executed before the sheet is loaded, the script will find
+ that the element is black (or whatever the default color is), and might thus make poor choices
+ (e.g. deciding to use black as the color elsewhere on the page, instead of green). Implementors
+ have to balance the likelihood of a script using incorrect information with the performance impact
+ of doing nothing while waiting for a slow network request to finish.</p>
- <p>A <code><a href=#document>Document</a></code> <dfn id=has-a-style-sheet-that-is-blocking-scripts>has a style sheet that is blocking
- scripts</dfn> if there is either <a href=#a-style-sheet-that-is-blocking-scripts>a style sheet that is
- blocking scripts</a> in the context of that
- <code><a href=#document>Document</a></code>, or if that <code><a href=#document>Document</a></code> is in a
- <a href=#browsing-context>browsing context</a> that has a <a href=#parent-browsing-context>parent browsing
- context</a>, and the <a href=#active-document>active document</a> of that
- <a href=#parent-browsing-context>parent browsing context</a> itself <a href=#has-a-style-sheet-that-is-blocking-scripts>has a style sheet
- that is blocking scripts</a>.</p>
+ <p>A <code><a href=#document>Document</a></code> <dfn id=has-a-style-sheet-that-is-blocking-scripts>has a style sheet that is blocking scripts</dfn> if there is
+ either <a href=#a-style-sheet-that-is-blocking-scripts>a style sheet that is blocking scripts</a> in the context of that
+ <code><a href=#document>Document</a></code>, or if that <code><a href=#document>Document</a></code> is in a <a href=#browsing-context>browsing context</a> that
+ has a <a href=#parent-browsing-context>parent browsing context</a>, and the <a href=#active-document>active document</a> of that
+ <a href=#parent-browsing-context>parent browsing context</a> itself <a href=#has-a-style-sheet-that-is-blocking-scripts>has a style sheet that is blocking
+ scripts</a>.</p>
- <p>A <code><a href=#document>Document</a></code> <dfn id=has-no-style-sheet-that-is-blocking-scripts>has no style sheet that is blocking
- scripts</dfn> if it does not <a href=#has-a-style-sheet-that-is-blocking-scripts title="has a style sheet that is
- blocking scripts">have a style sheet that is blocking scripts</a>
- as defined in the previous paragraph.</p>
+ <p>A <code><a href=#document>Document</a></code> <dfn id=has-no-style-sheet-that-is-blocking-scripts>has no style sheet that is blocking scripts</dfn> if it does not
+ <a href=#has-a-style-sheet-that-is-blocking-scripts title="has a style sheet that is blocking scripts">have a style sheet that is blocking
+ scripts</a> as defined in the previous paragraph.</p>
</div>
@@ -28741,8 +28689,8 @@
<p><a href=#queue-a-task>Queue a task</a> to <a href=#fire-a-simple-event>fire a simple event</a> named <code title=event-media-loadedmetadata><a href=#event-media-loadedmetadata>loadedmetadata</a></code> at the element.</p>
- <p class=note>Before this task is run, as part of the event loop mechanism, the rendering
- will have been updated to resize the <code><a href=#the-video-element>video</a></code> element if appropriate.</p>
+ <p class=note>Before this task is run, as part of the <a href=#event-loop>event loop</a> mechanism, the
+ rendering will have been updated to resize the <code><a href=#the-video-element>video</a></code> element if appropriate.</p>
</dd>
@@ -31973,74 +31921,61 @@
</dd>
- </dl><p>If the <a href=#text-track-mode>text track mode</a> of the <a href=#text-track>text
- track</a> that the <code><a href=#texttrack>TextTrack</a></code> object represents is
- not the <a href=#text-track-disabled>text track disabled</a> mode, then the <dfn id=dom-texttrack-cues title=dom-TextTrack-cues><code>cues</code></dfn> attribute must
- return a <a href=#live>live</a> <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object that
- represents the subset of the <a href=#text-track-list-of-cues>text track list of cues</a> of
- the <a href=#text-track>text track</a> that the <code><a href=#texttrack>TextTrack</a></code> object
- represents whose <a href=#text-track-cue-end-time title="text track cue end time">end
- times</a> occur at or after the <a href=#earliest-possible-position-when-the-script-started>earliest possible position
- when the script started</a>, in <a href=#text-track-cue-order>text track cue
- order</a>. Otherwise, it must return null. When an object is
- returned, the same object must be returned each time.</p>
+ </dl><p>If the <a href=#text-track-mode>text track mode</a> of the <a href=#text-track>text track</a> that the
+ <code><a href=#texttrack>TextTrack</a></code> object represents is not the <a href=#text-track-disabled>text track disabled</a> mode, then
+ the <dfn id=dom-texttrack-cues title=dom-TextTrack-cues><code>cues</code></dfn> attribute must return a
+ <a href=#live>live</a> <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object that represents the subset of the
+ <a href=#text-track-list-of-cues>text track list of cues</a> of the <a href=#text-track>text track</a> that the
+ <code><a href=#texttrack>TextTrack</a></code> object represents whose <a href=#text-track-cue-end-time title="text track cue end time">end
+ times</a> occur at or after the <a href=#earliest-possible-position-when-the-script-started>earliest possible position when the script
+ started</a>, in <a href=#text-track-cue-order>text track cue order</a>. Otherwise, it must return null. When an
+ object is returned, the same object must be returned each time.</p>
- <p>The <dfn id=earliest-possible-position-when-the-script-started>earliest possible position when the script started</dfn>
- is whatever the <a href=#earliest-possible-position>earliest possible position</a> was the last
- time the <a href=#event-loop>event loop</a> reached step 1.</p>
+ <p>The <dfn id=earliest-possible-position-when-the-script-started>earliest possible position when the script started</dfn> is whatever the
+ <a href=#earliest-possible-position>earliest possible position</a> was the last time the <a href=#event-loop>event loop</a> reached step
+ 1.</p>
- <p>If the <a href=#text-track-mode>text track mode</a> of the <a href=#text-track>text
- track</a> that the <code><a href=#texttrack>TextTrack</a></code> object represents is
- not the <a href=#text-track-disabled>text track disabled</a> mode, then the <dfn id=dom-texttrack-activecues title=dom-TextTrack-activeCues><code>activeCues</code></dfn>
- attribute must return a <a href=#live>live</a>
- <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object that represents the subset of
- the <a href=#text-track-list-of-cues>text track list of cues</a> of the <a href=#text-track>text
- track</a> that the <code><a href=#texttrack>TextTrack</a></code> object represents
- whose <a href=#active-flag-was-set-when-the-script-started>active flag was set when the script started</a>, in
- <a href=#text-track-cue-order>text track cue order</a>. Otherwise, it must return
- null. When an object is returned, the same object must be returned
- each time.</p>
+ <p>If the <a href=#text-track-mode>text track mode</a> of the <a href=#text-track>text track</a> that the
+ <code><a href=#texttrack>TextTrack</a></code> object represents is not the <a href=#text-track-disabled>text track disabled</a> mode, then
+ the <dfn id=dom-texttrack-activecues title=dom-TextTrack-activeCues><code>activeCues</code></dfn> attribute must return a
+ <a href=#live>live</a> <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object that represents the subset of the
+ <a href=#text-track-list-of-cues>text track list of cues</a> of the <a href=#text-track>text track</a> that the
+ <code><a href=#texttrack>TextTrack</a></code> object represents whose <a href=#active-flag-was-set-when-the-script-started>active flag was set when the script
+ started</a>, in <a href=#text-track-cue-order>text track cue order</a>. Otherwise, it must return null. When an
+ object is returned, the same object must be returned each time.</p>
- <p>A <a href=#text-track-cue>text track cue</a>'s <dfn id=active-flag-was-set-when-the-script-started>active flag was set when
- the script started</dfn> if its <a href=#text-track-cue-active-flag>text track cue active
- flag</a> was set the last time the <a href=#event-loop>event loop</a>
- reached step 1.</p>
+ <p>A <a href=#text-track-cue>text track cue</a>'s <dfn id=active-flag-was-set-when-the-script-started>active flag was set when the script started</dfn> if its
+ <a href=#text-track-cue-active-flag>text track cue active flag</a> was set the last time the <a href=#event-loop>event loop</a> reached
+ step 1.</p>
- <hr><p>The <dfn id=dom-texttrack-addcue title=dom-TextTrack-addCue><code>addCue(<var title="">cue</var>)</code></dfn> method of <code><a href=#texttrack>TextTrack</a></code>
- objects, when invoked, must run the following steps:</p>
+ <hr><p>The <dfn id=dom-texttrack-addcue title=dom-TextTrack-addCue><code>addCue(<var title="">cue</var>)</code></dfn> method
+ of <code><a href=#texttrack>TextTrack</a></code> objects, when invoked, must run the following steps:</p>
- <ol><li><p>If the given <var title="">cue</var> is in a <a href=#text-track-list-of-cues>text
- track list of cues</a>, then remove <var title="">cue</var> from
- that <a href=#text-track-list-of-cues>text track list of cues</a>.</li>
+ <ol><li><p>If the given <var title="">cue</var> is in a <a href=#text-track-list-of-cues>text track list of cues</a>, then
+ remove <var title="">cue</var> from that <a href=#text-track-list-of-cues>text track list of cues</a>.</li>
- <li><p>Add <var title="">cue</var> to the method's
- <code><a href=#texttrack>TextTrack</a></code> object's <a href=#text-track>text track</a>'s
- <a href=#text-track-list-of-cues>text track list of cues</a>.</li>
+ <li><p>Add <var title="">cue</var> to the method's <code><a href=#texttrack>TextTrack</a></code> object's <a href=#text-track>text
+ track</a>'s <a href=#text-track-list-of-cues>text track list of cues</a>.</li>
- </ol><p>The <dfn id=dom-texttrack-removecue title=dom-TextTrack-removeCue><code>removeCue(<var title="">cue</var>)</code></dfn> method of
- <code><a href=#texttrack>TextTrack</a></code> objects, when invoked, must run the
- following steps:</p>
+ </ol><p>The <dfn id=dom-texttrack-removecue title=dom-TextTrack-removeCue><code>removeCue(<var title="">cue</var>)</code></dfn>
+ method of <code><a href=#texttrack>TextTrack</a></code> objects, when invoked, must run the following steps:</p>
- <ol><li><p>If the given <var title="">cue</var> is not currently listed
- in the method's <code><a href=#texttrack>TextTrack</a></code> object's <a href=#text-track>text
- track</a>'s <a href=#text-track-list-of-cues>text track list of cues</a>, then throw a
- <code><a href=#notfounderror>NotFoundError</a></code> exception.</li>
+ <ol><li><p>If the given <var title="">cue</var> is not currently listed in the method's
+ <code><a href=#texttrack>TextTrack</a></code> object's <a href=#text-track>text track</a>'s <a href=#text-track-list-of-cues>text track list of cues</a>,
+ then throw a <code><a href=#notfounderror>NotFoundError</a></code> exception.</li>
- <li><p>Remove <var title="">cue</var> from the method's
- <code><a href=#texttrack>TextTrack</a></code> object's <a href=#text-track>text track</a>'s
- <a href=#text-track-list-of-cues>text track list of cues</a>.</li>
+ <li><p>Remove <var title="">cue</var> from the method's <code><a href=#texttrack>TextTrack</a></code> object's
+ <a href=#text-track>text track</a>'s <a href=#text-track-list-of-cues>text track list of cues</a>.</li>
</ol></div>
<div class=example>
- <p>In this example, an <code><a href=#the-audio-element>audio</a></code> element is used to play a
- specific sound-effect from a sound file containing many sound
- effects. A cue is used to pause the audio, so that it ends exactly
- at the end of the clip, even if the browser is busy running some
- script. If the page had relied on script to pause the audio, then
- the start of the next clip might be heard if the browser was not
- able to run the script at the exact time specified.</p>
+ <p>In this example, an <code><a href=#the-audio-element>audio</a></code> element is used to play a specific sound-effect from a
+ sound file containing many sound effects. A cue is used to pause the audio, so that it ends
+ exactly at the end of the clip, even if the browser is busy running some script. If the page had
+ relied on script to pause the audio, then the start of the next clip might be heard if the
+ browser was not able to run the script at the exact time specified.</p>
<pre>var sfx = new Audio('sfx.wav');
var sounds = sfx.addTextTrack('metadata');
@@ -32096,35 +32031,25 @@
</dl><div class=impl>
- <p>A <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object represents a dynamically
- updating list of <a href=#text-track-cue title="text track cue">text track
- cues</a> in a given order.</p>
+ <p>A <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object represents a dynamically updating list of <a href=#text-track-cue title="text track cue">text track cues</a> in a given order.</p>
- <p>The <dfn id=dom-texttrackcuelist-length title=dom-TextTrackCueList-length><code>length</code></dfn>
- attribute must return the number of <a href=#text-track-cue title="text track
- cue">cues</a> in the list represented by the
+ <p>The <dfn id=dom-texttrackcuelist-length title=dom-TextTrackCueList-length><code>length</code></dfn> attribute must return
+ the number of <a href=#text-track-cue title="text track cue">cues</a> in the list represented by the
<code><a href=#texttrackcuelist>TextTrackCueList</a></code> object.</p>
- <p>The <a href=#supported-property-indices>supported property indices</a> of a
- <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object at any instant are the numbers
- from zero to the number of <a href=#text-track-cue title="text track cue">cues</a>
- in the list represented by the <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object
- minus one, if any. If there are no <a href=#text-track-cue title="text track
- cue">cues</a> in the list, there are no <a href=#supported-property-indices>supported property
+ <p>The <a href=#supported-property-indices>supported property indices</a> of a <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object at any
+ instant are the numbers from zero to the number of <a href=#text-track-cue title="text track cue">cues</a> in the
+ list represented by the <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object minus one, if any. If there are no
+ <a href=#text-track-cue title="text track cue">cues</a> in the list, there are no <a href=#supported-property-indices>supported property
indices</a>.</p>
- <p>To <a href=#determine-the-value-of-an-indexed-property>determine the value of an indexed property</a> for a
- given index <var title="">index</var>, the user agent must return
- the <var title="">index</var>th <a href=#text-track-cue>text track cue</a> in the
- list represented by the <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object.</p>
+ <p>To <a href=#determine-the-value-of-an-indexed-property>determine the value of an indexed property</a> for a given index <var title="">index</var>, the user agent must return the <var title="">index</var>th <a href=#text-track-cue>text track
+ cue</a> in the list represented by the <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object.</p>
- <p>The <dfn id=dom-texttrackcuelist-getcuebyid title=dom-TextTrackCueList-getCueById><code>getCueById(<var title="">id</var>)</code></dfn> method, when called with an argument
- other than the empty string, must return the first <a href=#text-track-cue>text track
- cue</a> in the list represented by the
- <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object whose <a href=#text-track-cue-identifier>text track cue
- identifier</a> is <var title="">id</var>, if any, or null
- otherwise. If the argument is the empty string, then the method must
- return null.</p>
+ <p>The <dfn id=dom-texttrackcuelist-getcuebyid title=dom-TextTrackCueList-getCueById><code>getCueById(<var title="">id</var>)</code></dfn> method, when called with an argument other than the empty string,
+ must return the first <a href=#text-track-cue>text track cue</a> in the list represented by the
+ <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object whose <a href=#text-track-cue-identifier>text track cue identifier</a> is <var title="">id</var>, if any, or null otherwise. If the argument is the empty string, then the method
+ must return null.</p>
</div>
@@ -33125,58 +33050,46 @@
<p><i>This section is non-normative.</i></p>
- <p>How accurately various aspects of the <a href=#media-element>media element</a>
- API are implemented is considered a quality-of-implementation issue.</p>
+ <p>How accurately various aspects of the <a href=#media-element>media element</a> API are implemented is
+ considered a quality-of-implementation issue.</p>
- <p>For example, when implementing the <code title=attr-media-buffered>buffered</code> attribute, how precise
- an implementation reports the ranges that have been buffered depends
- on how carefully the user agent inspects the data. Since the API
- reports ranges as times, but the data is obtained in byte streams, a
- user agent receiving a variable-bit-rate stream might only be able
- to determine precise times by actually decoding all of the data.
- User agents aren't required to do this, however; they can instead
- return estimates (e.g. based on the average bit rate seen so far)
- which get revised as more information becomes available.</p>
+ <p>For example, when implementing the <code title=attr-media-buffered>buffered</code> attribute,
+ how precise an implementation reports the ranges that have been buffered depends on how carefully
+ the user agent inspects the data. Since the API reports ranges as times, but the data is obtained
+ in byte streams, a user agent receiving a variable-bit-rate stream might only be able to determine
+ precise times by actually decoding all of the data. User agents aren't required to do this,
+ however; they can instead return estimates (e.g. based on the average bit rate seen so far) which
+ get revised as more information becomes available.</p>
- <p>As a general rule, user agents are urged to be conservative
- rather than optimistic. For example, it would be bad to report that
- everything had been buffered when it had not.</p>
+ <p>As a general rule, user agents are urged to be conservative rather than optimistic. For
+ example, it would be bad to report that everything had been buffered when it had not.</p>
- <p>Another quality-of-implementation issue would be playing a video
- backwards when the codec is designed only for forward playback (e.g.
- there aren't many key frames, and they are far apart, and the
- intervening frames only have deltas from the previous frame). User
- agents could do a poor job, e.g. only showing key frames; however,
- better implementations would do more work and thus do a better job,
- e.g. actually decoding parts of the video forwards, storing the
- complete frames, and then playing the frames backwards.</p>
+ <p>Another quality-of-implementation issue would be playing a video backwards when the codec is
+ designed only for forward playback (e.g. there aren't many key frames, and they are far apart, and
+ the intervening frames only have deltas from the previous frame). User agents could do a poor job,
+ e.g. only showing key frames; however, better implementations would do more work and thus do a
+ better job, e.g. actually decoding parts of the video forwards, storing the complete frames, and
+ then playing the frames backwards.</p>
- <p>Similarly, while implementations are allowed to drop buffered
- data at any time (there is no requirement that a user agent keep all
- the media data obtained for the lifetime of the media element), it
- is again a quality of implementation issue: user agents with
- sufficient resources to keep all the data around are encouraged to
- do so, as this allows for a better user experience. For example, if
- the user is watching a live stream, a user agent could allow the
- user only to view the live video; however, a better user agent would
- buffer everything and allow the user to seek through the earlier
- material, pause it, play it forwards and backwards, etc.</p>
+ <p>Similarly, while implementations are allowed to drop buffered data at any time (there is no
+ requirement that a user agent keep all the media data obtained for the lifetime of the media
+ element), it is again a quality of implementation issue: user agents with sufficient resources to
+ keep all the data around are encouraged to do so, as this allows for a better user experience. For
+ example, if the user is watching a live stream, a user agent could allow the user only to view the
+ live video; however, a better user agent would buffer everything and allow the user to seek
+ through the earlier material, pause it, play it forwards and backwards, etc.</p>
- <p>When multiple tracks are synchronised with a
- <code><a href=#mediacontroller>MediaController</a></code>, it is possible for scripts to add and
- remove media elements from the <code><a href=#mediacontroller>MediaController</a></code>'s list
- of <a href=#slaved-media-elements>slaved media elements</a>, even while these tracks are
- playing. How smoothly the media plays back in such situations is
- another quality-of-implementation issue.</p>
+ <p>When multiple tracks are synchronised with a <code><a href=#mediacontroller>MediaController</a></code>, it is possible for
+ scripts to add and remove media elements from the <code><a href=#mediacontroller>MediaController</a></code>'s list of
+ <a href=#slaved-media-elements>slaved media elements</a>, even while these tracks are playing. How smoothly the media
+ plays back in such situations is another quality-of-implementation issue.</p>
- <hr><p>When a <a href=#media-element>media element</a> that is paused is <a href=#remove-an-element-from-a-document title="remove an element from a document">removed from a
- document</a> and not reinserted before the next time the
- <a href=#event-loop>event loop</a> spins, implementations that are resource
- constrained are encouraged to take that opportunity to release all
- hardware resources (like video planes, networking resources, and
- data buffers) used by the <a href=#media-element>media element</a>. (User agents
- still have to keep track of the playback position and so forth,
- though, in case playback is later restarted.)</p>
+ <hr><p>When a <a href=#media-element>media element</a> that is paused is <a href=#remove-an-element-from-a-document title="remove an element from a
+ document">removed from a document</a> and not reinserted before the next time the <a href=#event-loop>event
+ loop</a> spins, implementations that are resource constrained are encouraged to take that
+ opportunity to release all hardware resources (like video planes, networking resources, and data
+ buffers) used by the <a href=#media-element>media element</a>. (User agents still have to keep track of the
+ playback position and so forth, though, in case playback is later restarted.)</p>
</div>
@@ -37509,15 +37422,15 @@
instructions to the <a href=#scratch-bitmap>scratch bitmap</a>'s <a href=#list-of-pending-interface-actions>list of pending interface actions</a>
that run the following steps:</p>
- <ol><li><p>Let <var title="">the specified rectangle</var> be the
- rectangle of the bounding box of the intended path.</li>
+ <ol><li><p>Let <var title="">the specified rectangle</var> be the rectangle of the bounding box of
+ the intended path.</li>
- <li><p>Let <var title="">notional child</var> be a hypothetical
- element that is a rendered child of the <code><a href=#the-canvas-element>canvas</a></code> element
- whose dimensions are those of <var title="">the specified
+ <li><p>Let <var title="">notional child</var> be a hypothetical element that is a rendered child
+ of the <code><a href=#the-canvas-element>canvas</a></code> element whose dimensions are those of <var title="">the specified
rectangle</var>.</li>
- <li><p><a href=#scroll-an-element-into-view title="scroll an element into view">Scroll <var title="">notional child</var> into view</a> with the <var title="">align to top flag</var> set.</p>
+ <li><p><a href=#scroll-an-element-into-view title="scroll an element into view">Scroll <var title="">notional child</var> into
+ view</a> with the <var title="">align to top flag</var> set.</p>
<li><p>Optionally, <a href=#inform>inform the user</a> that the caret or selection (or both)
cover <var title="">the specified rectangle</var> of the canvas. If the
@@ -37525,17 +37438,14 @@
until the next time the <a href=#event-loop>event loop</a> reaches its "update the rendering" step to
optionally inform the user.</li>
- </ol><p class=note id=inform>"Inform the user", as used in this
- section, could mean calling a system accessibility API, which would
- notify assistive technologies such as magnification tools. To
- properly drive magnification based on a focus change, a system
- accessibility API driving a screen magnifier needs the bounds for
- the newly focused object. The methods above are intended to enable
- this by allowing the user agent to report the bounding box of the
- path used to render the focus ring as the bounds of the <var title="">element</var> element passed as an argument, if that
- element is focused, and the bounding box of the area to which the
- user agent is scrolling as the bounding box of the current
- selection.</p>
+ </ol><p class=note id=inform>"Inform the user", as used in this section, could mean calling a
+ system accessibility API, which would notify assistive technologies such as magnification tools.
+ To properly drive magnification based on a focus change, a system accessibility API driving a
+ screen magnifier needs the bounds for the newly focused object. The methods above are intended to
+ enable this by allowing the user agent to report the bounding box of the path used to render the
+ focus ring as the bounds of the <var title="">element</var> element passed as an argument, if that
+ element is focused, and the bounding box of the area to which the user agent is scrolling as the
+ bounding box of the current selection.</p>
<hr><p>The <dfn id=dom-context-2d-clip title=dom-context-2d-clip><code>clip()</code></dfn> method must create a new
<dfn id=clipping-region>clipping region</dfn> by calculating the intersection of the current clipping region and the
@@ -37543,9 +37453,8 @@
be implicitly closed when computing the clipping region, without affecting the actual subpaths.
The new clipping region replaces the current clipping region.</p>
- <p>When the context is initialized, the clipping region must be set
- to the rectangle with the top left corner at (0,0) and the width and
- height of the coordinate space.</p>
+ <p>When the context is initialized, the clipping region must be set to the rectangle with the top
+ left corner at (0,0) and the width and height of the coordinate space.</p>
<!-- v6
Jordan OSETE suggests:
@@ -68883,110 +68792,97 @@
<div class=impl>
- <p>A <code><a href=#document>Document</a></code> has a <dfn id=concept-document-salvageable title=concept-document-salvageable><var>salvageable</var></dfn>
- state, which must initially be true, a <dfn id=fired-unload>fired unload</dfn> flag,
- which must initially be false, and a <dfn id=page-showing>page showing</dfn> flag,
- which must initially be false.</p>
+ <p>A <code><a href=#document>Document</a></code> has a <dfn id=concept-document-salvageable title=concept-document-salvageable><var>salvageable</var></dfn> state, which must initially be
+ true, a <dfn id=fired-unload>fired unload</dfn> flag, which must initially be false, and a <dfn id=page-showing>page showing</dfn>
+ flag, which must initially be false.</p>
- <p><a href=#event-loop title="event loop">Event loops</a> have a
- <dfn id=termination-nesting-level>termination nesting level</dfn> counter, which must initially
- be zero.</p>
+ <p><a href=#event-loop title="event loop">Event loops</a> have a <dfn id=termination-nesting-level>termination nesting level</dfn>
+ counter, which must initially be zero.</p>
- <p>When a user agent is to <dfn id=prompt-to-unload-a-document>prompt to unload a document</dfn>,
- it must run the following steps.</p>
+ <p>When a user agent is to <dfn id=prompt-to-unload-a-document>prompt to unload a document</dfn>, it must run the following
+ steps.</p>
- <ol><li><p>Increase the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination
- nesting level</a> by one.</li>
+ <ol><li><p>Increase the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination nesting level</a> by
+ one.</li>
- <li><p>Increase the <code><a href=#document>Document</a></code>'s
- <a href=#ignore-opens-during-unload-counter>ignore-opens-during-unload counter</a> by one.</li>
+ <li><p>Increase the <code><a href=#document>Document</a></code>'s <a href=#ignore-opens-during-unload-counter>ignore-opens-during-unload counter</a> by
+ one.</li>
<li><p>Let <var title="">event</var> be a new <a href=#concept-events-trusted title=concept-events-trusted>trusted</a>
<code><a href=#beforeunloadevent>BeforeUnloadEvent</a></code> event object with the name <code title=event-beforeunload>beforeunload</code>, which does not bubble but is cancelable.</li>
<li><p><i>Dispatch</i>: <a href=#concept-event-dispatch title=concept-event-dispatch>Dispatch</a> <var title="">event</var> at the <code><a href=#document>Document</a></code>'s <code><a href=#window>Window</a></code> object.</li>
- <li><p>Decrease the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination
- nesting level</a> by one.</li>
+ <li><p>Decrease the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination nesting level</a> by
+ one.</li>
<li><p>Release the <a href=#storage-mutex>storage mutex</a>.</li>
- <li><p>If any event listeners were triggered by the earlier
- <i>dispatch</i> step, then set the <code><a href=#document>Document</a></code>'s <var title=concept-document-salvageable><a href=#concept-document-salvageable>salvageable</a></var> state to
+ <li><p>If any event listeners were triggered by the earlier <i>dispatch</i> step, then set the
+ <code><a href=#document>Document</a></code>'s <var title=concept-document-salvageable><a href=#concept-document-salvageable>salvageable</a></var> state to
false.</li>
<li>
- <p>If the <code title=dom-BeforeUnloadEvent-returnValue><a href=#dom-beforeunloadevent-returnvalue>returnValue</a></code>
- attribute of the <var title="">event</var> object is not the empty
- string, or if the event was canceled, then the user agent should
- ask the user to confirm that they wish to unload the document.</p>
+ <p>If the <code title=dom-BeforeUnloadEvent-returnValue><a href=#dom-beforeunloadevent-returnvalue>returnValue</a></code> attribute of the
+ <var title="">event</var> object is not the empty string, or if the event was canceled, then the
+ user agent should ask the user to confirm that they wish to unload the document.</p>
- <p>The prompt shown by the user agent may include the string of
- the <code title=dom-BeforeUnloadEvent-returnValue><a href=#dom-beforeunloadevent-returnvalue>returnValue</a></code>
- attribute, or some leading subset thereof. (A user agent may want
- to truncate the string to 1024 characters for display, for
+ <p>The prompt shown by the user agent may include the string of the <code title=dom-BeforeUnloadEvent-returnValue><a href=#dom-beforeunloadevent-returnvalue>returnValue</a></code> attribute, or some leading subset
+ thereof. (A user agent may want to truncate the string to 1024 characters for display, for
instance.)</p>
- <p>The user agent must <a href=#pause>pause</a> while waiting for the
- user's response.</p>
+ <p>The user agent must <a href=#pause>pause</a> while waiting for the user's response.</p>
- <p>If the user did not confirm the page navigation, then the user
- agent <dfn id=refused-to-allow-the-document-to-be-unloaded>refused to allow the document to be unloaded</dfn>.</p>
+ <p>If the user did not confirm the page navigation, then the user agent <dfn id=refused-to-allow-the-document-to-be-unloaded>refused to allow
+ the document to be unloaded</dfn>.</p>
</li>
- <li><p>If this algorithm was invoked by another instance of the
- "prompt to unload a document" algorithm (i.e. through the steps
- below that invoke this algorithm for all descendant browsing
+ <li><p>If this algorithm was invoked by another instance of the "prompt to unload a document"
+ algorithm (i.e. through the steps below that invoke this algorithm for all descendant browsing
contexts), then jump to the step labeled <i>end</i>.</li>
- <li><p>Let <var title="">descendants</var> be the <a href=#list-of-the-descendant-browsing-contexts>list of the
- descendant browsing contexts</a> of the
- <code><a href=#document>Document</a></code>.</li>
+ <li><p>Let <var title="">descendants</var> be the <a href=#list-of-the-descendant-browsing-contexts>list of the descendant browsing
+ contexts</a> of the <code><a href=#document>Document</a></code>.</li>
<li>
- <p>If <var title="">descendants</var> is not an empty list, then
- for each <a href=#browsing-context>browsing context</a> <var title="">b</var> in
- <var title="">descendants</var> run the following substeps:</p>
+ <p>If <var title="">descendants</var> is not an empty list, then for each <a href=#browsing-context>browsing
+ context</a> <var title="">b</var> in <var title="">descendants</var> run the following
+ substeps:</p>
- <ol><li><p><a href=#prompt-to-unload-a-document title="prompt to unload a document">Prompt to
- unload</a> the <a href=#active-document>active document</a> of the
- <a href=#browsing-context>browsing context</a> <var title="">b</var>. If the user
- <a href=#refused-to-allow-the-document-to-be-unloaded>refused to allow the document to be unloaded</a>, then
- the user implicitly also <a href=#refused-to-allow-the-document-to-be-unloaded title="refused to allow the
- document to be unloaded">refused to allow <em>this</em> document
- to be unloaded</a>; jump to the step labeled <i>end</i>.</p>
+ <ol><li><p><a href=#prompt-to-unload-a-document title="prompt to unload a document">Prompt to unload</a> the <a href=#active-document>active
+ document</a> of the <a href=#browsing-context>browsing context</a> <var title="">b</var>. If the user
+ <a href=#refused-to-allow-the-document-to-be-unloaded>refused to allow the document to be unloaded</a>, then the user implicitly also <a href=#refused-to-allow-the-document-to-be-unloaded title="refused to allow the document to be unloaded">refused to allow <em>this</em> document to
+ be unloaded</a>; jump to the step labeled <i>end</i>.</p>
- <li><p>If <var title=concept-document-salvageable><a href=#concept-document-salvageable>salvageable</a></var> state of
- the <a href=#active-document>active document</a> of the <a href=#browsing-context>browsing
- context</a> <var title="">b</var> is false, then set the <var title=concept-document-salvageable><a href=#concept-document-salvageable>salvageable</a></var> state of
- <em>this</em> document to false also.</li>
+ <li><p>If <var title=concept-document-salvageable><a href=#concept-document-salvageable>salvageable</a></var> state of the <a href=#active-document>active
+ document</a> of the <a href=#browsing-context>browsing context</a> <var title="">b</var> is false, then set
+ the <var title=concept-document-salvageable><a href=#concept-document-salvageable>salvageable</a></var> state of <em>this</em> document
+ to false also.</li>
</ol></li>
- <li><p><i>End</i>: Decrease the <code><a href=#document>Document</a></code>'s
- <a href=#ignore-opens-during-unload-counter>ignore-opens-during-unload counter</a> by one.</li>
+ <li><p><i>End</i>: Decrease the <code><a href=#document>Document</a></code>'s <a href=#ignore-opens-during-unload-counter>ignore-opens-during-unload
+ counter</a> by one.</li>
- </ol><p>When a user agent is to <dfn id=unload-a-document>unload a document</dfn>, it must run
- the following steps. These steps are passed an argument, <var title="">recycle</var>, which is either true or false, indicating
- whether the <code><a href=#document>Document</a></code> object is going to be
- re-used. (This is set by the <code title=dom-document-open><a href=#dom-document-open>document.open()</a></code> method.)</p>
+ </ol><p>When a user agent is to <dfn id=unload-a-document>unload a document</dfn>, it must run the following steps. These
+ steps are passed an argument, <var title="">recycle</var>, which is either true or false,
+ indicating whether the <code><a href=#document>Document</a></code> object is going to be re-used. (This is set by the
+ <code title=dom-document-open><a href=#dom-document-open>document.open()</a></code> method.)</p>
- <ol><li><p>Increase the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination
- nesting level</a> by one.</li>
+ <ol><li><p>Increase the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination nesting level</a> by
+ one.</li>
- <li><p>Increase the <code><a href=#document>Document</a></code>'s
- <a href=#ignore-opens-during-unload-counter>ignore-opens-during-unload counter</a> by one.</li>
+ <li><p>Increase the <code><a href=#document>Document</a></code>'s <a href=#ignore-opens-during-unload-counter>ignore-opens-during-unload counter</a> by
+ one.</li>
- <li><p>If the <code><a href=#document>Document</a></code>'s <a href=#page-showing>page showing</a>
- flag is false, then jump to the step labeled <i>unload event</i>
- below (i.e. skip firing the <code title=event-pagehide><a href=#event-pagehide>pagehide</a></code> even and don't rerun the
- <a href=#unloading-document-visibility-change-steps>unloading document visibility change steps</a>).</li>
+ <li><p>If the <code><a href=#document>Document</a></code>'s <a href=#page-showing>page showing</a> flag is false, then jump to the
+ step labeled <i>unload event</i> below (i.e. skip firing the <code title=event-pagehide><a href=#event-pagehide>pagehide</a></code> even and don't rerun the <a href=#unloading-document-visibility-change-steps>unloading document
+ visibility change steps</a>).</li>
- <li><p>Set the <code><a href=#document>Document</a></code>'s <a href=#page-showing>page showing</a>
- flag to false.</li>
+ <li><p>Set the <code><a href=#document>Document</a></code>'s <a href=#page-showing>page showing</a> flag to false.</li>
<li><p><a href=#concept-event-fire title=concept-event-fire>Fire</a> a <a href=#concept-events-trusted title=concept-events-trusted>trusted</a> event with the name <code title=event-pagehide><a href=#event-pagehide>pagehide</a></code> at the <code><a href=#window>Window</a></code> object of the
<code><a href=#document>Document</a></code>, but with its <code title=dom-event-target><a href=#dom-event-target>target</a></code> set to the
@@ -68997,59 +68893,51 @@
<li>
- <p>Run any <dfn id=unloading-document-visibility-change-steps>unloading document visibility change steps</dfn>
- for <code><a href=#document>Document</a></code> that are defined by <a href=#other-applicable-specifications>other
- applicable specifications</a>.</p>
+ <p>Run any <dfn id=unloading-document-visibility-change-steps>unloading document visibility change steps</dfn> for <code><a href=#document>Document</a></code> that
+ are defined by <a href=#other-applicable-specifications>other applicable specifications</a>.</p>
- <p class=note>This is specifically intended for use by the Page
- Visibility specification. <a href=#refsPAGEVIS>[PAGEVIS]</a></p>
+ <p class=note>This is specifically intended for use by the Page Visibility specification. <a href=#refsPAGEVIS>[PAGEVIS]</a></p>
</li>
- <li><p><i>Unload event</i>: If the <code><a href=#document>Document</a></code>'s
- <a href=#fired-unload>fired unload</a> flag is false, <a href=#fire-a-simple-event>fire a simple
- event</a> named <code title=event-unload>unload</code> at the
+ <li><p><i>Unload event</i>: If the <code><a href=#document>Document</a></code>'s <a href=#fired-unload>fired unload</a> flag is
+ false, <a href=#fire-a-simple-event>fire a simple event</a> named <code title=event-unload>unload</code> at the
<code><a href=#document>Document</a></code>'s <code><a href=#window>Window</a></code> object.</li>
- <li><p>Decrease the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination
- nesting level</a> by one.</li>
+ <li><p>Decrease the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination nesting level</a> by
+ one.</li>
<li><p>Release the <a href=#storage-mutex>storage mutex</a>.</li>
- <li><p>If any event listeners were triggered by the earlier
- <i>unload event</i> step, then set the <code><a href=#document>Document</a></code>
- object's <var title=concept-document-salvageable><a href=#concept-document-salvageable>salvageable</a></var> state to
- false and set the <code><a href=#document>Document</a></code>'s <a href=#fired-unload>fired unload</a>
- flag to true.</li>
+ <li><p>If any event listeners were triggered by the earlier <i>unload event</i> step, then set
+ the <code><a href=#document>Document</a></code> object's <var title=concept-document-salvageable><a href=#concept-document-salvageable>salvageable</a></var>
+ state to false and set the <code><a href=#document>Document</a></code>'s <a href=#fired-unload>fired unload</a> flag to
+ true.</li>
- <li><p>Run any <a href=#unloading-document-cleanup-steps>unloading document cleanup steps</a> for
- <code><a href=#document>Document</a></code> that are defined by this specification and
- <a href=#other-applicable-specifications>other applicable specifications</a>.</li>
+ <li><p>Run any <a href=#unloading-document-cleanup-steps>unloading document cleanup steps</a> for <code><a href=#document>Document</a></code> that are
+ defined by this specification and <a href=#other-applicable-specifications>other applicable specifications</a>.</li>
- <li><p>If this algorithm was invoked by another instance of the
- "unload a document" algorithm (i.e. by the steps below that invoke
- this algorithm for all descendant browsing contexts), then jump to
- the step labeled <i>end</i>.</li>
+ <li><p>If this algorithm was invoked by another instance of the "unload a document" algorithm
+ (i.e. by the steps below that invoke this algorithm for all descendant browsing contexts), then
+ jump to the step labeled <i>end</i>.</li>
- <li><p>Let <var title="">descendants</var> be the <a href=#list-of-the-descendant-browsing-contexts>list of the
- descendant browsing contexts</a> of the
- <code><a href=#document>Document</a></code>.</li>
+ <li><p>Let <var title="">descendants</var> be the <a href=#list-of-the-descendant-browsing-contexts>list of the descendant browsing
+ contexts</a> of the <code><a href=#document>Document</a></code>.</li>
<li>
- <p>If <var title="">descendants</var> is not an empty list, then
- for each <a href=#browsing-context>browsing context</a> <var title="">b</var> in
- <var title="">descendants</var> run the following substeps:</p>
+ <p>If <var title="">descendants</var> is not an empty list, then for each <a href=#browsing-context>browsing
+ context</a> <var title="">b</var> in <var title="">descendants</var> run the following
+ substeps:</p>
- <ol><li><p><a href=#unload-a-document title="unload a document">Unload</a> the
- <a href=#active-document>active document</a> of the <a href=#browsing-context>browsing context</a>
- <var title="">b</var> with the <var title="">recycle</var>
+ <ol><li><p><a href=#unload-a-document title="unload a document">Unload</a> the <a href=#active-document>active document</a> of the
+ <a href=#browsing-context>browsing context</a> <var title="">b</var> with the <var title="">recycle</var>
parameter set to false.</li>
- <li><p>If <var title=concept-document-salvageable><a href=#concept-document-salvageable>salvageable</a></var> state of
- the <a href=#active-document>active document</a> of the <a href=#browsing-context>browsing
- context</a> <var title="">b</var> is false, then set the <var title=concept-document-salvageable><a href=#concept-document-salvageable>salvageable</a></var> state of
- <em>this</em> document to false also.</li>
+ <li><p>If <var title=concept-document-salvageable><a href=#concept-document-salvageable>salvageable</a></var> state of the <a href=#active-document>active
+ document</a> of the <a href=#browsing-context>browsing context</a> <var title="">b</var> is false, then set
+ the <var title=concept-document-salvageable><a href=#concept-document-salvageable>salvageable</a></var> state of <em>this</em> document
+ to false also.</li>
</ol></li>
@@ -71856,51 +71744,44 @@
<h5 id=definitions-1><span class=secno>7.1.4.1 </span>Definitions</h5>
- <p>To coordinate events, user interaction, scripts, rendering,
- networking, and so forth, user agents must use <dfn id=event-loop title="event
- loop">event loops</dfn> as described in this section.</p>
+ <p>To coordinate events, user interaction, scripts, rendering, networking, and so forth, user
+ agents must use <dfn id=event-loop title="event loop">event loops</dfn> as described in this section.</p>
- <p>There must be at least one <a href=#event-loop>event loop</a> per user
- agent, and at most one <a href=#event-loop>event loop</a> per <a href=#unit-of-related-similar-origin-browsing-contexts>unit of
- related similar-origin browsing contexts</a>.</p>
+ <p>There must be at least one <a href=#event-loop>event loop</a> per user agent, and at most one <a href=#event-loop>event
+ loop</a> per <a href=#unit-of-related-similar-origin-browsing-contexts>unit of related similar-origin browsing contexts</a>.</p>
- <p class=note>When there is more than one <a href=#event-loop>event loop</a>
- for a <a href=#unit-of-related-browsing-contexts>unit of related browsing contexts</a>, complications
- arise when a <a href=#browsing-context>browsing context</a> in that group is <a href=#navigate title=navigate>navigated</a> such that it switches from one
- <a href=#unit-of-related-similar-origin-browsing-contexts>unit of related similar-origin browsing contexts</a> to
- another. This specification does not currently describe how to
- handle these complications.</p>
+ <p class=note>When there is more than one <a href=#event-loop>event loop</a> for a <a href=#unit-of-related-browsing-contexts>unit of related
+ browsing contexts</a>, complications arise when a <a href=#browsing-context>browsing context</a> in that group
+ is <a href=#navigate title=navigate>navigated</a> such that it switches from one <a href=#unit-of-related-similar-origin-browsing-contexts>unit of related
+ similar-origin browsing contexts</a> to another. This specification does not currently describe
+ how to handle these complications.</p>
- <p>An <a href=#event-loop>event loop</a> always has at least one <a href=#browsing-context>browsing
- context</a>. If an <a href=#event-loop>event loop</a>'s <a href=#browsing-context title="browsing context">browsing contexts</a> all go away, then
- the <a href=#event-loop>event loop</a> goes away as well. A <a href=#browsing-context>browsing
- context</a> always has an <a href=#event-loop>event loop</a> coordinating
- its activities.</p>
+ <p>An <a href=#event-loop>event loop</a> always has at least one <a href=#browsing-context>browsing context</a>. If an
+ <a href=#event-loop>event loop</a>'s <a href=#browsing-context title="browsing context">browsing contexts</a> all go away,
+ then the <a href=#event-loop>event loop</a> goes away as well. A <a href=#browsing-context>browsing context</a> always has an
+ <a href=#event-loop>event loop</a> coordinating its activities.</p>
+ <p>An <a href=#event-loop>event loop</a> has one or more <dfn id=task-queue title="task queue">task queues</dfn>. A
+ <a href=#task-queue>task queue</a> is an ordered list of <dfn id=concept-task title=concept-task>tasks</dfn>, which can
+ be:</p>
- <p>An <a href=#event-loop>event loop</a> has one or more <dfn id=task-queue title="task
- queue">task queues</dfn>. A <a href=#task-queue>task queue</a> is an ordered
- list of <dfn id=concept-task title=concept-task>tasks</dfn>, which can be:</p>
-
<dl><dt>Events</dt>
<dd>
- <p>Asynchronously dispatching an <code><a href=#event>Event</a></code> object at a
- particular <code><a href=#eventtarget>EventTarget</a></code> object is a task.</p>
+ <p>Asynchronously dispatching an <code><a href=#event>Event</a></code> object at a particular
+ <code><a href=#eventtarget>EventTarget</a></code> object is a task.</p>
- <p class=note>Not all events are dispatched using the <a href=#task-queue>task
- queue</a>, many are dispatched synchronously during other
- tasks.</p>
+ <p class=note>Not all events are dispatched using the <a href=#task-queue>task queue</a>, many are
+ dispatched synchronously during other tasks.</p>
</dd>
<dt>Parsing</dt>
- <dd><p>The <a href=#html-parser>HTML parser</a> tokenizing one or more bytes,
- and then processing any resulting tokens, is typically a
- task.</dd>
+ <dd><p>The <a href=#html-parser>HTML parser</a> tokenizing one or more bytes, and then processing any
+ resulting tokens, is typically a task.</dd>
<dt>Callbacks</dt>
@@ -71910,81 +71791,64 @@
<dt>Using a resource</dt>
- <dd><p>When an algorithm <a href=#fetch title=fetch>fetches</a> a
- resource, if the fetching occurs asynchronously then the processing
- of the resource once some or all of the resource is available is a
- task.</dd>
+ <dd><p>When an algorithm <a href=#fetch title=fetch>fetches</a> a resource, if the fetching occurs
+ asynchronously then the processing of the resource once some or all of the resource is available
+ is a task.</dd>
<dt>Reacting to DOM manipulation</dt>
- <dd><p>Some elements have tasks that trigger in response to DOM
- manipulation, e.g. when that element is <a href=#insert-an-element-into-a-document title="insert an
- element into a document">inserted into the document</a>.</p>
+ <dd><p>Some elements have tasks that trigger in response to DOM manipulation, e.g. when that
+ element is <a href=#insert-an-element-into-a-document title="insert an element into a document">inserted into the document</a>.</p>
- </dl><p>When a user agent is to <dfn id=queue-a-task>queue a task</dfn>, it must add the
- given task to one of the <a href=#task-queue title="task queue">task queues</a>
- of the relevant <a href=#event-loop>event loop</a>. All the tasks from one
- particular <dfn id=task-source>task source</dfn> (e.g. the callbacks generated by
- timers, the events fired for mouse movements, the tasks queued for
- the parser) must always be added to the same <a href=#task-queue>task
- queue</a>, but tasks from different <a href=#task-source title="task
- source">task sources</a> may be placed in different <a href=#task-queue title="task queue">task queues</a>.</p>
+ </dl><p>When a user agent is to <dfn id=queue-a-task>queue a task</dfn>, it must add the given task to one of the <a href=#task-queue title="task queue">task queues</a> of the relevant <a href=#event-loop>event loop</a>. All the tasks from
+ one particular <dfn id=task-source>task source</dfn> (e.g. the callbacks generated by timers, the events fired
+ for mouse movements, the tasks queued for the parser) must always be added to the same <a href=#task-queue>task
+ queue</a>, but tasks from different <a href=#task-source title="task source">task sources</a> may be placed
+ in different <a href=#task-queue title="task queue">task queues</a>.</p>
- <p class=example>For example, a user agent could have one
- <a href=#task-queue>task queue</a> for mouse and key events (the <a href=#user-interaction-task-source>user
- interaction task source</a>), and another for everything
- else. The user agent could then give keyboard and mouse events
- preference over other tasks three quarters of the time, keeping the
- interface responsive but not starving other task queues, and never
- processing events from any one <a href=#task-source>task source</a> out of
- order.</p>
+ <p class=example>For example, a user agent could have one <a href=#task-queue>task queue</a> for mouse and
+ key events (the <a href=#user-interaction-task-source>user interaction task source</a>), and another for everything else. The
+ user agent could then give keyboard and mouse events preference over other tasks three quarters of
+ the time, keeping the interface responsive but not starving other task queues, and never
+ processing events from any one <a href=#task-source>task source</a> out of order.</p>
- <p>Each <a href=#concept-task title=concept-task>task</a> that is <a href=#queue-a-task title="queue a task">queued</a> onto a <a href=#task-queue>task queue</a> of
- an <a href=#event-loop>event loop</a> defined by this specification is
- associated with a <code><a href=#document>Document</a></code>; if the task was queued in
- the context of an element, then it is the element's
- <code><a href=#document>Document</a></code>; if the task was queued in the context of a
- <a href=#browsing-context>browsing context</a>, then it is the <a href=#browsing-context>browsing
- context</a>'s <a href=#active-document>active document</a> at the time the task
- was queued; if the task was queued by or for a <a href=#concept-script title=concept-script>script</a> then the document is the
- <a href="#script's-document">script's document</a>.</p>
+ <p>Each <a href=#concept-task title=concept-task>task</a> that is <a href=#queue-a-task title="queue a task">queued</a>
+ onto a <a href=#task-queue>task queue</a> of an <a href=#event-loop>event loop</a> defined by this specification is
+ associated with a <code><a href=#document>Document</a></code>; if the task was queued in the context of an element, then
+ it is the element's <code><a href=#document>Document</a></code>; if the task was queued in the context of a
+ <a href=#browsing-context>browsing context</a>, then it is the <a href=#browsing-context>browsing context</a>'s <a href=#active-document>active
+ document</a> at the time the task was queued; if the task was queued by or for a <a href=#concept-script title=concept-script>script</a> then the document is the <a href="#script's-document">script's document</a>.</p>
- <p>A user agent may have one <dfn id=storage-mutex>storage mutex</dfn>. This mutex is
- used to control access to shared state like cookies. At any one
- point, the <a href=#storage-mutex>storage mutex</a> is either free, or owned by a
- particular <a href=#event-loop>event loop</a> or instance of the <a href=#fetch title=fetch>fetching</a> algorithm.</p>
+ <p>A user agent may have one <dfn id=storage-mutex>storage mutex</dfn>. This mutex is used to control access to
+ shared state like cookies. At any one point, the <a href=#storage-mutex>storage mutex</a> is either free, or
+ owned by a particular <a href=#event-loop>event loop</a> or instance of the <a href=#fetch title=fetch>fetching</a> algorithm.</p>
- <p>If a user agent does not implement a <a href=#storage-mutex>storage mutex</a>,
- it is exempt from implementing the requirements that require it to
- acquire or release it.</p>
+ <p>If a user agent does not implement a <a href=#storage-mutex>storage mutex</a>, it is exempt from implementing
+ the requirements that require it to acquire or release it.</p>
- <p class=note>User agent implementors have to make a choice
- between two evils. On the one hand, not implementing the storage
- mutex means that there is a risk of data corruption: a site could,
- for instance, try to read a cookie, increment its value, then write
- it back out, using the new value of the cookie as a unique
- identifier for the session; if the site does this twice in two
- different browser windows at the same time, it might end up using
- the same "unique" identifier for both sessions, with potentially
- disastrous effects. On the other hand, implementing the storage
- mutex has potentially serious performance implications: whenever a
- site uses Web Storage or cookies, all other sites that try to use
- Web Storage or cookies are blocked until the first site finishes.</p>
+ <p class=note>User agent implementors have to make a choice between two evils. On the one hand,
+ not implementing the storage mutex means that there is a risk of data corruption: a site could,
+ for instance, try to read a cookie, increment its value, then write it back out, using the new
+ value of the cookie as a unique identifier for the session; if the site does this twice in two
+ different browser windows at the same time, it might end up using the same "unique" identifier for
+ both sessions, with potentially disastrous effects. On the other hand, implementing the storage
+ mutex has potentially serious performance implications: whenever a site uses Web Storage or
+ cookies, all other sites that try to use Web Storage or cookies are blocked until the first site
+ finishes.</p>
- <p>Whenever a <a href=#concept-script title=concept-script>script</a> calls into
- a <a href=#plugin>plugin</a>, and whenever a <a href=#plugin>plugin</a> calls into
- a <a href=#concept-script title=concept-script>script</a>, the user agent must
- release the <a href=#storage-mutex>storage mutex</a>.</p>
+ <p>Whenever a <a href=#concept-script title=concept-script>script</a> calls into a <a href=#plugin>plugin</a>, and
+ whenever a <a href=#plugin>plugin</a> calls into a <a href=#concept-script title=concept-script>script</a>, the user
+ agent must release the <a href=#storage-mutex>storage mutex</a>.</p>
<h5 id=processing-model-4><span class=secno>7.1.4.2 </span>Processing model</h5>
- <p>An <a href=#event-loop>event loop</a> must continually run through the
- following steps for as long as it exists:</p>
+ <p>An <a href=#event-loop>event loop</a> must continually run through the following steps for as long as it
+ exists:</p>
<ol><!-- if you add a step here, make sure to go through the spec updating references to the "first
- step" of the event loop --><li><p>Run the oldest <a href=#concept-task title=concept-task>task</a> on one of the <a href=#event-loop>event
+ step" or "step 1" of the event loop --><li><p>Run the oldest <a href=#concept-task title=concept-task>task</a> on one of the <a href=#event-loop>event
loop</a>'s <a href=#task-queue title="task queue">task queues</a>, if any, ignoring tasks whose
associated <code><a href=#document>Document</a></code>s are not <a href=#fully-active>fully active</a>. The user agent may pick any
<a href=#task-queue>task queue</a>.</li>
@@ -72002,28 +71866,23 @@
<li><p><a href=#provide-a-stable-state>Provide a stable state</a>.</li>
- <li><p>If necessary, update the rendering or user interface of any
- <code><a href=#document>Document</a></code> or <a href=#browsing-context>browsing context</a> to reflect
- the current state.</li>
+ <li><p>If necessary, update the rendering or user interface of any <code><a href=#document>Document</a></code> or
+ <a href=#browsing-context>browsing context</a> to reflect the current state.</li>
- <li><p>Return to the first step of the <a href=#event-loop>event
- loop</a>.</li>
+ <li><p>Return to the first step of the <a href=#event-loop>event loop</a>.</li>
- </ol><hr><p>When a user agent is to <dfn id=perform-a-microtask-checkpoint>perform a microtask
- checkpoint</dfn>, if the <a href=#running-mutation-observers>running mutation observers</a>
- flag is false, then the user agent must run the following steps:</p>
+ </ol><hr><p>When a user agent is to <dfn id=perform-a-microtask-checkpoint>perform a microtask checkpoint</dfn>, if the <a href=#running-mutation-observers>running
+ mutation observers</a> flag is false, then the user agent must run the following steps:</p>
- <ol><li><p>Let the <a href=#running-mutation-observers>running mutation observers</a> flag be
- true.</li>
+ <ol><li><p>Let the <a href=#running-mutation-observers>running mutation observers</a> flag be true.</li>
<li><p><a href=#sort-the-tables-with-pending-sorts>Sort the tables with pending sorts</a>.</li>
<li>
- <p><a href=#concept-mo-invoke title=concept-mo-invoke>Invoke
- <code>MutationObserver</code> objects</a> for the <a href=#unit-of-related-similar-origin-browsing-contexts>unit
- of related similar-origin browsing contexts</a> to which the
- <a href="#script's-browsing-context">script's browsing context</a> belongs.</p>
+ <p><a href=#concept-mo-invoke title=concept-mo-invoke>Invoke <code>MutationObserver</code> objects</a> for the
+ <a href=#unit-of-related-similar-origin-browsing-contexts>unit of related similar-origin browsing contexts</a> to which the <a href="#script's-browsing-context">script's
+ browsing context</a> belongs.</p>
<p class=note>This will typically invoke scripted callbacks, which calls the <a href=#jump-to-a-code-entry-point>jump to a
code entry-point</a> algorithm, which calls this <a href=#perform-a-microtask-checkpoint>perform a microtask checkpoint</a>
@@ -72032,8 +71891,7 @@
</li>
- <li><p>Let the <a href=#running-mutation-observers>running mutation observers</a> flag be
- false.</li>
+ <li><p>Let the <a href=#running-mutation-observers>running mutation observers</a> flag be false.</li>
</ol><hr><p>When the user agent is to <dfn id=provide-a-stable-state>provide a stable state</dfn>, if any asynchronously-running
algorithms are <dfn id=await-a-stable-state title="await a stable state">awaiting a stable state</dfn>, then the user
@@ -72046,66 +71904,52 @@
<p class=note>Steps in <a href=#synchronous-section title="synchronous section">synchronous sections</a> are marked
with ⌛.</p>
- <hr><p>When an algorithm says to <dfn id=spin-the-event-loop>spin the event loop</dfn> until
- a condition <var title="">goal</var> is met, the user agent must run
- the following steps:</p>
+ <hr><p>When an algorithm says to <dfn id=spin-the-event-loop>spin the event loop</dfn> until a condition <var title="">goal</var> is met, the user agent must run the following steps:</p>
- <ol><li><p>Let <var title="">task source</var> be the <a href=#task-source>task
- source</a> of the currently running <a href=#concept-task title=concept-task>task</a>.</li>
+ <ol><li><p>Let <var title="">task source</var> be the <a href=#task-source>task source</a> of the currently
+ running <a href=#concept-task title=concept-task>task</a>.</li>
<li>
<p>Stop the currently running <a href=#concept-task title=concept-task>task</a>, allowing the <a href=#event-loop>event
- loop</a> to resume, but continue these steps
- asynchronously.</p>
+ loop</a> to resume, but continue these steps asynchronously.</p>
- <p class=note>This causes the <a href=#event-loop>event loop</a> to move on
- to the second step of its processing model (defined above).</p>
+ <p class=note>This causes the <a href=#event-loop>event loop</a> to move on to the second step of its
+ processing model (defined above).</p>
</li>
- <li><p>Wait until the condition <var title="">goal</var> is
- met.</li>
+ <li><p>Wait until the condition <var title="">goal</var> is met.</li>
- <li><p><a href=#queue-a-task>Queue a task</a> to continue running these steps,
- using the <a href=#task-source>task source</a> <var title="">task
- source</var>. Wait until this task runs before continuing these
+ <li><p><a href=#queue-a-task>Queue a task</a> to continue running these steps, using the <a href=#task-source>task
+ source</a> <var title="">task source</var>. Wait until this task runs before continuing these
steps.</li>
<li><p>Return to the caller.</li>
- </ol><hr><p>Some of the algorithms in this specification, for historical
- reasons, require the user agent to <dfn id=pause>pause</dfn> while running a
- <a href=#concept-task title=concept-task>task</a> until a condition <var title="">goal</var> is met. This means running the following
- steps:</p>
+ </ol><hr><p>Some of the algorithms in this specification, for historical reasons, require the user agent to
+ <dfn id=pause>pause</dfn> while running a <a href=#concept-task title=concept-task>task</a> until a condition <var title="">goal</var> is met. This means running the following steps:</p>
- <ol><li><p>If any asynchronously-running algorithms are <a href=#await-a-stable-state title="await a stable state">awaiting a stable state</a>, then
- run their <a href=#synchronous-section>synchronous section</a> and then resume running
- their asynchronous algorithm. (See the <a href=#event-loop>event loop</a>
- processing model definition above for details.)</p>
+ <ol><li><p>If any asynchronously-running algorithms are <a href=#await-a-stable-state title="await a stable state">awaiting a
+ stable state</a>, then run their <a href=#synchronous-section>synchronous section</a> and then resume running
+ their asynchronous algorithm. (See the <a href=#event-loop>event loop</a> processing model definition above
+ for details.)</p>
- <li><p>If necessary, update the rendering or user interface of any
- <code><a href=#document>Document</a></code> or <a href=#browsing-context>browsing context</a> to reflect
- the current state.</li>
+ <li><p>If necessary, update the rendering or user interface of any <code><a href=#document>Document</a></code> or
+ <a href=#browsing-context>browsing context</a> to reflect the current state.</li>
- <li><p>Wait until the condition <var title="">goal</var> is met.
- While a user agent has a paused <a href=#concept-task title=concept-task>task</a>, the corresponding <a href=#event-loop>event
- loop</a> must not run further <a href=#concept-task title=concept-task>tasks</a>, and any script in the currently
- running <a href=#concept-task title=concept-task>task</a> must block. User
- agents should remain responsive to user input while paused,
- however, albeit in a reduced capacity since the <a href=#event-loop>event
- loop</a> will not be doing anything.</li>
+ <li><p>Wait until the condition <var title="">goal</var> is met. While a user agent has a paused
+ <a href=#concept-task title=concept-task>task</a>, the corresponding <a href=#event-loop>event loop</a> must not run
+ further <a href=#concept-task title=concept-task>tasks</a>, and any script in the currently running <a href=#concept-task title=concept-task>task</a> must block. User agents should remain responsive to user input
+ while paused, however, albeit in a reduced capacity since the <a href=#event-loop>event loop</a> will not be
+ doing anything.</li>
- </ol><hr><p>When a user agent is to <dfn id=obtain-the-storage-mutex>obtain the storage mutex</dfn> as
- part of running a <a href=#concept-task title=concept-task>task</a>, it must
- run through the following steps:</p>
+ </ol><hr><p>When a user agent is to <dfn id=obtain-the-storage-mutex>obtain the storage mutex</dfn> as part of running a <a href=#concept-task title=concept-task>task</a>, it must run through the following steps:</p>
- <ol><li><p>If the <a href=#storage-mutex>storage mutex</a> is already owned by this
- <a href=#concept-task title=concept-task>task</a>'s <a href=#event-loop>event loop</a>,
- then abort these steps.</li>
+ <ol><li><p>If the <a href=#storage-mutex>storage mutex</a> is already owned by this <a href=#concept-task title=concept-task>task</a>'s <a href=#event-loop>event loop</a>, then abort these steps.</li>
- <li><p>Otherwise, <a href=#pause>pause</a> until the <a href=#storage-mutex>storage
- mutex</a> can be taken by the <a href=#event-loop>event loop</a>.</li>
+ <li><p>Otherwise, <a href=#pause>pause</a> until the <a href=#storage-mutex>storage mutex</a> can be taken by the
+ <a href=#event-loop>event loop</a>.</li>
<li><p>Take ownership of the <a href=#storage-mutex>storage mutex</a>.</li>
@@ -72116,17 +71960,15 @@
<h5 id=generic-task-sources><span class=secno>7.1.4.3 </span>Generic task sources</h5>
- <p>The following <a href=#task-source title="task source">task sources</a> are
- used by a number of mostly unrelated features in this and other
- specifications.</p>
+ <p>The following <a href=#task-source title="task source">task sources</a> are used by a number of mostly
+ unrelated features in this and other specifications.</p>
<dl><dt>The <dfn id=dom-manipulation-task-source>DOM manipulation task source</dfn></dt>
<dd>
- <p>This <a href=#task-source>task source</a> is used for features that react
- to DOM manipulations, such as things that happen asynchronously
- when an element is <a href=#insert-an-element-into-a-document title="insert an element into a
+ <p>This <a href=#task-source>task source</a> is used for features that react to DOM manipulations, such as
+ things that happen asynchronously when an element is <a href=#insert-an-element-into-a-document title="insert an element into a
document">inserted into the document</a>.</p>
</dd>
@@ -72135,14 +71977,12 @@
<dd>
- <p>This <a href=#task-source>task source</a> is used for features that react
- to user interaction, for example keyboard or mouse input.</p>
+ <p>This <a href=#task-source>task source</a> is used for features that react to user interaction, for
+ example keyboard or mouse input.</p>
- <p>Asynchronous events sent in response to user input (e.g. <code title=event-click><a href=#event-click>click</a></code> events) must be fired using
- <a href=#concept-task title=concept-task>tasks</a> <a href=#queue-a-task title="queue a
- task">queued</a> with the <a href=#user-interaction-task-source>user interaction task
- source</a>. <a href=#refsDOMEVENTS>[DOMEVENTS]</a></p>
- <!-- user interaction events integration point -->
+ <p>Asynchronous events sent in response to user input (e.g. <code title=event-click><a href=#event-click>click</a></code> events) must be fired using <a href=#concept-task title=concept-task>tasks</a> <a href=#queue-a-task title="queue a task">queued</a> with the <a href=#user-interaction-task-source>user
+ interaction task source</a>. <a href=#refsDOMEVENTS>[DOMEVENTS]</a></p> <!-- user
+ interaction events integration point -->
</dd>
@@ -72150,19 +71990,16 @@
<dd>
- <p>This <a href=#task-source>task source</a> is used for features that trigger
- in response to network activity.</p>
+ <p>This <a href=#task-source>task source</a> is used for features that trigger in response to network
+ activity.</p>
- <!-- XHR should use this -->
-
</dd>
<dt>The <dfn id=history-traversal-task-source>history traversal task source</dfn></dt>
<dd>
- <p>This <a href=#task-source>task source</a> is used to queue calls to <code title=dom-history-back><a href=#dom-history-back>history.back()</a></code> and similar
- APIs.</p>
+ <p>This <a href=#task-source>task source</a> is used to queue calls to <code title=dom-history-back><a href=#dom-history-back>history.back()</a></code> and similar APIs.</p>
</dd>
@@ -73558,11 +73395,11 @@
</dl><div class=impl>
- <p>The <dfn id=dom-alert title=dom-alert><code>alert(<var title="">message</var>)</code></dfn> method, when invoked, must run
- the following steps:</p>
+ <p>The <dfn id=dom-alert title=dom-alert><code>alert(<var title="">message</var>)</code></dfn> method, when
+ invoked, must run the following steps:</p>
- <ol><li><p>If the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination nesting
- level</a> is non-zero, optionally abort these steps.</li>
+ <ol><li><p>If the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination nesting level</a> is non-zero,
+ optionally abort these steps.</li>
<li><p>Release the <a href=#storage-mutex>storage mutex</a>.</li>
@@ -73570,18 +73407,16 @@
to ignore all alerts, and would thus abort at this step whenever the method was
invoked.)</li>
- <li><p>Show the given <var title="">message</var> to the
- user.</li>
+ <li><p>Show the given <var title="">message</var> to the user.</li>
- <li><p>Optionally, <a href=#pause>pause</a> while waiting for for the
- user to acknowledge the message.</li>
+ <li><p>Optionally, <a href=#pause>pause</a> while waiting for for the user to acknowledge the
+ message.</li>
- </ol><p>The <dfn id=dom-confirm title=dom-confirm><code>confirm(<var title="">message</var>)</code></dfn> method, when invoked, must run
- the following steps:</p>
+ </ol><p>The <dfn id=dom-confirm title=dom-confirm><code>confirm(<var title="">message</var>)</code></dfn> method,
+ when invoked, must run the following steps:</p>
- <ol><li><p>If the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination nesting
- level</a> is non-zero, optionally abort these steps, returning
- false.</li>
+ <ol><li><p>If the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination nesting level</a> is non-zero,
+ optionally abort these steps, returning false.</li>
<li><p>Release the <a href=#storage-mutex>storage mutex</a>.</li>
@@ -73589,22 +73424,18 @@
the user the option to ignore all prompts, and would thus abort at this step whenever the method
was invoked.)</li>
- <li><p>Show the given <var title="">message</var> to the user, and
- ask the user to respond with a positive or negative
- response.</li>
+ <li><p>Show the given <var title="">message</var> to the user, and ask the user to respond with a
+ positive or negative response.</li>
- <li><p><a href=#pause>Pause</a> until the user responds either positively
- or negatively.</li>
+ <li><p><a href=#pause>Pause</a> until the user responds either positively or negatively.</li>
- <li><p>If the user responded positively, return true; otherwise,
- the user responded negatively: return false.</li>
+ <li><p>If the user responded positively, return true; otherwise, the user responded negatively:
+ return false.</li>
- </ol><p>The <dfn id=dom-prompt title=dom-prompt><code>prompt(<var title="">message</var>, <var title="">default</var>)</code></dfn>
- method, when invoked, must run the following steps:</p>
+ </ol><p>The <dfn id=dom-prompt title=dom-prompt><code>prompt(<var title="">message</var>, <var title="">default</var>)</code></dfn> method, when invoked, must run the following steps:</p>
- <ol><li><p>If the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination nesting
- level</a> is non-zero, optionally abort these steps, returning
- null.</li>
+ <ol><li><p>If the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination nesting level</a> is non-zero,
+ optionally abort these steps, returning null.</li>
<li><p>Release the <a href=#storage-mutex>storage mutex</a>.</li>
@@ -73612,16 +73443,14 @@
user the option to ignore all prompts, and would thus abort at this step whenever the method was
invoked.)</li>
- <li><p>Show the given <var title="">message</var> to the user, and
- ask the user to either respond with a string value or abort. The
- second argument is optional. If the second argument (<var title="">default</var>) is present, then the response must be
- defaulted to the value given by <var title="">default</var>.</li>
+ <li><p>Show the given <var title="">message</var> to the user, and ask the user to either respond
+ with a string value or abort. The second argument is optional. If the second argument (<var title="">default</var>) is present, then the response must be defaulted to the value given by
+ <var title="">default</var>.</li>
- <li><p><a href=#pause>Pause</a> while waiting for the user's
- response.</li>
+ <li><p><a href=#pause>Pause</a> while waiting for the user's response.</li>
- <li><p>If the user aborts, then return null; otherwise, return the
- string that the user responded with.</li>
+ <li><p>If the user aborts, then return null; otherwise, return the string that the user responded
+ with.</li>
</ol></div>
@@ -73766,29 +73595,22 @@
<li>
- <p>If the user agent is configured such that this invocation of
- <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> is
- somehow disabled, then return the empty string and abort these
- steps.</p>
+ <p>If the user agent is configured such that this invocation of <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> is somehow disabled, then return the empty
+ string and abort these steps.</p>
- <p class=note>User agents are expected to disable this method in
- certain cases to avoid user annoyance (e.g. as part of their popup
- blocker feature). For instance, a user agent could require that a
- site be white-listed before enabling this method, or the user
- agent could be configured to only allow one modal dialog at a
- time.</p>
+ <p class=note>User agents are expected to disable this method in certain cases to avoid user
+ annoyance (e.g. as part of their popup blocker feature). For instance, a user agent could
+ require that a site be white-listed before enabling this method, or the user agent could be
+ configured to only allow one modal dialog at a time.</p>
</li>
<li>
- <p>If the <a href=#active-sandboxing-flag-set>active sandboxing flag set</a>
- of the <a href=#active-document>active document</a>
- of the <a href="#script's-browsing-context" title="script's browsing context">browsing context</a>
- of the <a href=#concept-script title=concept-script>script</a> that invoked the method
- has its
- <a href=#sandboxed-auxiliary-navigation-browsing-context-flag>sandboxed auxiliary navigation browsing context flag</a>
- set, then return the empty string and abort these steps.</p>
+ <p>If the <a href=#active-sandboxing-flag-set>active sandboxing flag set</a> of the <a href=#active-document>active document</a> of the
+ <a href="#script's-browsing-context" title="script's browsing context">browsing context</a> of the <a href=#concept-script title=concept-script>script</a> that invoked the method has its <a href=#sandboxed-auxiliary-navigation-browsing-context-flag>sandboxed auxiliary
+ navigation browsing context flag</a> set, then return the empty string and abort these
+ steps.</p>
</li>
@@ -73797,17 +73619,13 @@
<p>Let <var title="">the list of background browsing
contexts</var> be a list of all the browsing contexts that:</p>
- <ul><li>are part of the same <a href=#unit-of-related-browsing-contexts>unit of related browsing
- contexts</a> as the browsing context of the
- <code><a href=#window>Window</a></code> object on which the <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> method was
- called, and that</li>
+ <ul><li>are part of the same <a href=#unit-of-related-browsing-contexts>unit of related browsing contexts</a> as the browsing context
+ of the <code><a href=#window>Window</a></code> object on which the <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> method was called, and that</li>
- <li>have an <a href=#active-document>active document</a> whose
- <a href=#origin>origin</a> is the <a href=#same-origin title="same origin">same</a>
- as the <a href=#origin>origin</a> of the <a href=#concept-script title=concept-script>script</a> that called the <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> method at
- the time the method was called,</li> <!-- Note that changing
- document.domain to talk to another domain doesn't make you able
- to block that domain -->
+ <li>have an <a href=#active-document>active document</a> whose <a href=#origin>origin</a> is the <a href=#same-origin title="same
+ origin">same</a> as the <a href=#origin>origin</a> of the <a href=#concept-script title=concept-script>script</a> that called the <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> method at the time the method was
+ called,</li> <!-- Note that changing document.domain to talk to another domain doesn't make you
+ able to block that domain -->
</ul><p>...as well as any browsing contexts that are nested inside any
of the browsing contexts matching those conditions.</p>
@@ -73816,105 +73634,87 @@
<li>
- <p>Disable the user interface for all the browsing contexts in
- <var title="">the list of background browsing contexts</var>. This
- should prevent the user from navigating those browsing contexts,
- causing events to be sent to those browsing context, or editing
- any content in those browsing contexts. However, it does not
- prevent those browsing contexts from receiving events from sources
- other than the user, from running scripts, from running
- animations, and so forth.</p>
+ <p>Disable the user interface for all the browsing contexts in <var title="">the list of
+ background browsing contexts</var>. This should prevent the user from navigating those browsing
+ contexts, causing events to be sent to those browsing context, or editing any content in those
+ browsing contexts. However, it does not prevent those browsing contexts from receiving events
+ from sources other than the user, from running scripts, from running animations, and so
+ forth.</p>
</li>
<li>
- <p>Create a new <a href=#auxiliary-browsing-context>auxiliary browsing context</a>, with the
- <a href=#opener-browsing-context>opener browsing context</a> being the browsing context of
- the <code><a href=#window>Window</a></code> object on which the <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> method was
- called. The new auxiliary browsing context has no name.</p>
+ <p>Create a new <a href=#auxiliary-browsing-context>auxiliary browsing context</a>, with the <a href=#opener-browsing-context>opener browsing
+ context</a> being the browsing context of the <code><a href=#window>Window</a></code> object on which the <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> method was called. The new auxiliary
+ browsing context has no name.</p>
- <p class=note>This <a href=#browsing-context>browsing context</a>'s
- <code><a href=#document>Document</a></code>s' <code><a href=#window>Window</a></code> objects all implement
- the <code><a href=#windowmodal>WindowModal</a></code> interface.</p>
+ <p class=note>This <a href=#browsing-context>browsing context</a>'s <code><a href=#document>Document</a></code>s' <code><a href=#window>Window</a></code>
+ objects all implement the <code><a href=#windowmodal>WindowModal</a></code> interface.</p>
</li>
<li>
- <p>Set all the flags
- in the new browsing context's <a href=#popup-sandboxing-flag-set>popup sandboxing flag set</a>
- that are set in the
- <a href=#active-sandboxing-flag-set>active sandboxing flag set</a>
- of the <a href=#active-document>active document</a>
- of the <a href="#script's-browsing-context" title="script's browsing context">browsing context</a>
- of the <a href=#concept-script title=concept-script>script</a> that invoked the method.
- The <a href="#script's-browsing-context" title="script's browsing context">browsing context</a>
- of the <a href=#concept-script title=concept-script>script</a> that invoked the method
- must be set as the new browsing context's
- <a href=#one-permitted-sandboxed-navigator>one permitted sandboxed navigator</a>.</p>
+ <p>Set all the flags in the new browsing context's <a href=#popup-sandboxing-flag-set>popup sandboxing flag set</a> that
+ are set in the <a href=#active-sandboxing-flag-set>active sandboxing flag set</a> of the <a href=#active-document>active document</a> of
+ the <a href="#script's-browsing-context" title="script's browsing context">browsing context</a> of the <a href=#concept-script title=concept-script>script</a> that invoked the method. The <a href="#script's-browsing-context" title="script's browsing
+ context">browsing context</a> of the <a href=#concept-script title=concept-script>script</a> that invoked
+ the method must be set as the new browsing context's <a href=#one-permitted-sandboxed-navigator>one permitted sandboxed
+ navigator</a>.</p>
</li>
<li>
- <p>Let the <a href=#dialog-arguments>dialog arguments</a> of the new browsing
- context be set to the value of <var title="">argument</var>, or
- the 'undefined' value if the argument was omitted.</p>
+ <p>Let the <a href=#dialog-arguments>dialog arguments</a> of the new browsing context be set to the value of <var title="">argument</var>, or the 'undefined' value if the argument was omitted.</p>
</li>
<li>
- <p>Let the <a href="#dialog-arguments'-origin">dialog arguments' origin</a> be the
- <a href=#origin>origin</a> of the <a href=#concept-script title=concept-script>script</a> that called the <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> method.</p>
+ <p>Let the <a href="#dialog-arguments'-origin">dialog arguments' origin</a> be the <a href=#origin>origin</a> of the <a href=#concept-script title=concept-script>script</a> that called the <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> method.</p>
</li>
<li>
- <p><a href=#navigate>Navigate</a><!--DONAV showModalDialog--> the new
- <a href=#browsing-context>browsing context</a> to the <a href=#absolute-url>absolute URL</a>
- that resulted from <a href=#resolve-a-url title="resolve a url">resolving</a>
- <var title="">url</var> earlier, with <a href=#replacement-enabled>replacement
- enabled</a>, and with the <a href="#script's-browsing-context" title="script's browsing
- context">browsing context</a> of the <a href=#concept-script title=concept-script>script</a> that invoked the method as
- the <a href=#source-browsing-context>source browsing context</a>.</p>
+ <p><a href=#navigate>Navigate</a><!--DONAV showModalDialog--> the new <a href=#browsing-context>browsing context</a> to
+ the <a href=#absolute-url>absolute URL</a> that resulted from <a href=#resolve-a-url title="resolve a url">resolving</a>
+ <var title="">url</var> earlier, with <a href=#replacement-enabled>replacement enabled</a>, and with the <a href="#script's-browsing-context" title="script's browsing context">browsing context</a> of the <a href=#concept-script title=concept-script>script</a> that invoked the method as the <a href=#source-browsing-context>source browsing
+ context</a>.</p>
</li>
<li>
- <p><a href=#spin-the-event-loop>Spin the event loop</a> until the new <a href=#browsing-context>browsing
- context</a> is closed. (The user agent must allow the user to
- indicate that the <a href=#browsing-context>browsing context</a> is to be
+ <p><a href=#spin-the-event-loop>Spin the event loop</a> until the new <a href=#browsing-context>browsing context</a> is closed. (The
+ user agent must allow the user to indicate that the <a href=#browsing-context>browsing context</a> is to be
closed.)</p>
</li>
<li>
- <p>Reenable the user interface for all the browsing contexts in
- <var title="">the list of background browsing contexts</var>.</p>
+ <p>Reenable the user interface for all the browsing contexts in <var title="">the list of
+ background browsing contexts</var>.</p>
</li>
<li>
- <p>Return the <a href=#auxiliary-browsing-context>auxiliary browsing context</a>'s
- <a href=#return-value>return value</a>.</p>
+ <p>Return the <a href=#auxiliary-browsing-context>auxiliary browsing context</a>'s <a href=#return-value>return value</a>.</p>
</li>
- </ol><p>The <code><a href=#window>Window</a></code> objects of <code><a href=#document>Document</a></code>s hosted
- by <a href=#browsing-context title="browsing context">browsing contexts</a> created
- by the above algorithm must also implement the
+ </ol><p>The <code><a href=#window>Window</a></code> objects of <code><a href=#document>Document</a></code>s hosted by <a href=#browsing-context title="browsing
+ context">browsing contexts</a> created by the above algorithm must also implement the
<code><a href=#windowmodal>WindowModal</a></code> interface.</p>
- <p class=note>When this happens, the members of the
- <code><a href=#windowmodal>WindowModal</a></code> interface, in JavaScript environments,
- appear to actually be part of the <code><a href=#window>Window</a></code> interface
- (e.g. they are on the same prototype chain as the <code title=dom-alert><a href=#dom-alert>window.alert()</a></code> method).</p>
+ <p class=note>When this happens, the members of the <code><a href=#windowmodal>WindowModal</a></code> interface, in
+ JavaScript environments, appear to actually be part of the <code><a href=#window>Window</a></code> interface (e.g.
+ they are on the same prototype chain as the <code title=dom-alert><a href=#dom-alert>window.alert()</a></code>
+ method).</p>
</div>
@@ -73927,8 +73727,7 @@
<dd>
- <p>Returns the <var title="">argument</var> argument that was
- passed to the <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> method.</p>
+ <p>Returns the <var title="">argument</var> argument that was passed to the <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> method.</p>
</dd>
@@ -73938,45 +73737,36 @@
<p>Returns the current return value for the window.</p>
- <p>Can be set, to change the value that will be returned by the
- <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code>
- method.</p>
+ <p>Can be set, to change the value that will be returned by the <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> method.</p>
</dd>
</dl><div class=impl>
- <p>Such browsing contexts have associated <dfn id=dialog-arguments>dialog
- arguments</dfn>, which are stored along with the <dfn id="dialog-arguments'-origin">dialog
- arguments' origin</dfn>. These values are set by the <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> method in the
- algorithm above, when the browsing context is created, based on the
- arguments provided to the method.</p>
+ <p>Such browsing contexts have associated <dfn id=dialog-arguments>dialog arguments</dfn>, which are stored along with
+ the <dfn id="dialog-arguments'-origin">dialog arguments' origin</dfn>. These values are set by the <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> method in the algorithm above, when the
+ browsing context is created, based on the arguments provided to the method.</p>
- <p>The <dfn id=dom-windowmodal-dialogarguments title=dom-WindowModal-dialogArguments><code>dialogArguments</code></dfn>
- IDL attribute, on getting, must check whether its browsing context's
- <a href=#active-document>active document</a>'s <a href=#origin>origin</a> is the <a href=#same-origin title="same origin">same</a> as the <a href="#dialog-arguments'-origin">dialog arguments'
- origin</a>. If it is, then the browsing context's <a href=#dialog-arguments>dialog
- arguments</a> must be returned unchanged. Otherwise, if the
- <a href=#dialog-arguments>dialog arguments</a> are an object, then the empty string
- must be returned, and if the <a href=#dialog-arguments>dialog arguments</a> are not
- an object, then the stringification of the <a href=#dialog-arguments>dialog
- arguments</a> must be returned.
+ <p>The <dfn id=dom-windowmodal-dialogarguments title=dom-WindowModal-dialogArguments><code>dialogArguments</code></dfn> IDL
+ attribute, on getting, must check whether its browsing context's <a href=#active-document>active document</a>'s
+ <a href=#origin>origin</a> is the <a href=#same-origin title="same origin">same</a> as the <a href="#dialog-arguments'-origin">dialog arguments'
+ origin</a>. If it is, then the browsing context's <a href=#dialog-arguments>dialog arguments</a> must be
+ returned unchanged. Otherwise, if the <a href=#dialog-arguments>dialog arguments</a> are an object, then the empty
+ string must be returned, and if the <a href=#dialog-arguments>dialog arguments</a> are not an object, then the
+ stringification of the <a href=#dialog-arguments>dialog arguments</a> must be returned.
- <p>These browsing contexts also have an associated <dfn id=return-value>return
- value</dfn>. The <a href=#return-value>return value</a> of a browsing context
- must be initialized to the empty string when the browsing context is
- created.</p>
+ <p>These browsing contexts also have an associated <dfn id=return-value>return value</dfn>. The <a href=#return-value>return
+ value</a> of a browsing context must be initialized to the empty string when the browsing
+ context is created.</p>
- <p>The <dfn id=dom-windowmodal-returnvalue title=dom-WindowModal-returnValue><code>returnValue</code></dfn>
- IDL attribute, on getting, must return the <a href=#return-value>return value</a>
- of its browsing context, and on setting, must set the <a href=#return-value>return
- value</a> to the given new value.</p>
+ <p>The <dfn id=dom-windowmodal-returnvalue title=dom-WindowModal-returnValue><code>returnValue</code></dfn> IDL attribute, on
+ getting, must return the <a href=#return-value>return value</a> of its browsing context, and on setting, must
+ set the <a href=#return-value>return value</a> to the given new value.</p>
</div>
<p class=note>The <code title=dom-window-close><a href=#dom-window-close>window.close()</a></code> method can be used to
close the browsing context.</p>
-<!--TOPIC:HTML-->
<!--TOPIC:DOM APIs-->
@@ -73986,12 +73776,10 @@
<div class=impl>
- <p>The <dfn id=dom-navigator title=dom-navigator><code>navigator</code></dfn>
- attribute of the <code><a href=#window>Window</a></code> interface must return an
- instance of the <code><a href=#navigator>Navigator</a></code> interface, which represents
- the identity and state of the user agent (the client), and allows
- Web pages to register themselves as potential protocol and content
- handlers:</p>
+ <p>The <dfn id=dom-navigator title=dom-navigator><code>navigator</code></dfn> attribute of the
+ <code><a href=#window>Window</a></code> interface must return an instance of the <code><a href=#navigator>Navigator</a></code> interface,
+ which represents the identity and state of the user agent (the client), and allows Web pages to
+ register themselves as potential protocol and content handlers:</p>
</div>
@@ -74013,9 +73801,8 @@
<div class=impl>
- <p>These interfaces are defined separately so that other
- specifications can re-use parts of the <code><a href=#navigator>Navigator</a></code>
- interface.</p>
+ <p>These interfaces are defined separately so that other specifications can re-use parts of the
+ <code><a href=#navigator>Navigator</a></code> interface.</p>
</div>
@@ -74787,11 +74574,10 @@
</dl><div class=impl>
- <p>The <dfn id=dom-navigator-yieldforstorageupdates title=dom-navigator-yieldForStorageUpdates><code>yieldForStorageUpdates()</code></dfn>
- method, when invoked, must, if the <a href=#storage-mutex>storage mutex</a> is
- owned by the <a href=#event-loop>event loop</a> of the <a href=#concept-task title=concept-task>task</a> that resulted in the method being
- called, release the <a href=#storage-mutex>storage mutex</a> so that it is once
- again free. Otherwise, it must do nothing.</p>
+ <p>The <dfn id=dom-navigator-yieldforstorageupdates title=dom-navigator-yieldForStorageUpdates><code>yieldForStorageUpdates()</code></dfn> method,
+ when invoked, must, if the <a href=#storage-mutex>storage mutex</a> is owned by the <a href=#event-loop>event loop</a> of
+ the <a href=#concept-task title=concept-task>task</a> that resulted in the method being called, release the
+ <a href=#storage-mutex>storage mutex</a> so that it is once again free. Otherwise, it must do nothing.</p>
</div>
@@ -74800,10 +74586,9 @@
<div class=impl>
- <p>The <dfn id=dom-external title=dom-external><code>external</code></dfn>
- attribute of the <code><a href=#window>Window</a></code> interface must return an
- instance of the <code><a href=#external>External</a></code> interface. The same object
- must be returned each time.</p>
+ <p>The <dfn id=dom-external title=dom-external><code>external</code></dfn> attribute of the <code><a href=#window>Window</a></code>
+ interface must return an instance of the <code><a href=#external>External</a></code> interface. The same object must be
+ returned each time.</p>
</div>
@@ -80083,38 +79868,32 @@
attribute <a href=#eventhandler>EventHandler</a> <a href=#handler-workerglobalscope-ononline title=handler-WorkerGlobalScope-ononline>ononline</a>;
};</pre>
- <p>The <dfn id=dom-workerglobalscope-self title=dom-WorkerGlobalScope-self><code>self</code></dfn> attribute
- must return the <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object itself.</p>
+ <p>The <dfn id=dom-workerglobalscope-self title=dom-WorkerGlobalScope-self><code>self</code></dfn> attribute must return the
+ <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object itself.</p>
- <p>The <dfn id=dom-workerglobalscope-location title=dom-WorkerGlobalScope-location><code>location</code></dfn>
- attribute must return the <code><a href=#workerlocation>WorkerLocation</a></code> object created
- for the <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object when the worker was
- created. It represents the <a href=#absolute-url>absolute URL</a> of the script
- that was used to initialize the worker, after any redirects.</p>
+ <p>The <dfn id=dom-workerglobalscope-location title=dom-WorkerGlobalScope-location><code>location</code></dfn> attribute must
+ return the <code><a href=#workerlocation>WorkerLocation</a></code> object created for the <code><a href=#workerglobalscope>WorkerGlobalScope</a></code>
+ object when the worker was created. It represents the <a href=#absolute-url>absolute URL</a> of the script that
+ was used to initialize the worker, after any redirects.</p>
<hr><p>When a script invokes the <dfn id=dom-workerglobalscope-close title=dom-WorkerGlobalScope-close><code>close()</code></dfn>
- method on a <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object, the user agent
- must run the following steps (atomically):</p>
+ method on a <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object, the user agent must run the following steps
+ (atomically):</p>
- <ol><li><p>Discard any <a href=#concept-task title=concept-task>tasks</a> that
- have been added to the <a href=#event-loop>event loop</a>'s <a href=#task-queue title="task
- queue">task queues</a>.</p>
+ <ol><li><p>Discard any <a href=#concept-task title=concept-task>tasks</a> that have been added to the
+ <a href=#event-loop>event loop</a>'s <a href=#task-queue title="task queue">task queues</a>.</p>
<!-- v2-onclose
- <li><p><span>Queue a task</span> to <span>fire a simple
- event</span> named <code title="event-worker-close">close</code> at the
- <code>WorkerGlobalScope</code> object.</p></li>
+ <li><p><span>Queue a task</span> to <span>fire a simple event</span> named <code
+ title="event-worker-close">close</code> at the <code>WorkerGlobalScope</code> object.</p></li>
-->
- <li><p>Set the worker's <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object's
- <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag to
- true. (This prevents any further tasks from being queued.)</li>
+ <li><p>Set the worker's <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object's <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag to true. (This prevents any further
+ tasks from being queued.)</li>
- </ol><hr><p>The following are the <a href=#event-handlers>event handlers</a> (and their
- corresponding <a href=#event-handler-event-type title="event handler event type">event handler
- event types</a>) that must be supported, as IDL attributes, by
- objects implementing the <code><a href=#workerglobalscope>WorkerGlobalScope</a></code>
- interface:</p>
+ </ol><hr><p>The following are the <a href=#event-handlers>event handlers</a> (and their corresponding <a href=#event-handler-event-type title="event
+ handler event type">event handler event types</a>) that must be supported, as IDL attributes,
+ by objects implementing the <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> interface:</p>
<table><thead><tr><th><a href=#event-handlers title="event handlers">Event handler</a> <th><a href=#event-handler-event-type>Event handler event type</a>
<tbody><!-- v2-onclose <tr><td><dfn title="handler-WorkerGlobalScope-onclose"><code>onclose</code></dfn> <td> <code title="event-worker-close">close</code> --><tr><td><dfn id=handler-workerglobalscope-onerror title=handler-WorkerGlobalScope-onerror><code>onerror</code></dfn> <td> <code title=event-error>error</code>
@@ -80223,191 +80002,159 @@
<h4 id=the-event-loop><span class=secno>9.2.2 </span>The event loop</h4>
- <p>Each <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object has an <a href=#event-loop>event
- loop</a> distinct from those defined for <a href=#unit-of-related-similar-origin-browsing-contexts title="unit of
- related similar-origin browsing contexts">units of related
- similar-origin browsing contexts</a>. This <a href=#event-loop>event
- loop</a> has no associated <a href=#browsing-context>browsing context</a>, and its
- <a href=#task-queue title="task queue">task queues</a> only have events,
- callbacks, and networking activity as <a href=#concept-task title=concept-task>tasks</a>. The processing model of these
- <a href=#event-loop title="event loop">event loops</a> is defined below in the
+ <p>Each <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object has an <a href=#event-loop>event loop</a> distinct from those
+ defined for <a href=#unit-of-related-similar-origin-browsing-contexts title="unit of related similar-origin browsing contexts">units of related
+ similar-origin browsing contexts</a>. This <a href=#event-loop>event loop</a> has no associated
+ <a href=#browsing-context>browsing context</a>, and its <a href=#task-queue title="task queue">task queues</a> only have
+ events, callbacks, and networking activity as <a href=#concept-task title=concept-task>tasks</a>. The
+ processing model of these <a href=#event-loop title="event loop">event loops</a> is defined below in the
<a href=#run-a-worker>run a worker</a> algorithm.</p>
- <p>Each <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object also has a <dfn id=dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</dfn> flag, which must
- initially be false, but which can get set to true by the algorithms
- in the processing model section below.</p>
+ <p>Each <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object also has a <dfn id=dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</dfn> flag, which must initially be false, but which
+ can get set to true by the algorithms in the processing model section below.</p>
- <p>Once the <code><a href=#workerglobalscope>WorkerGlobalScope</a></code>'s <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is set to
- true, the <a href=#event-loop>event loop</a>'s <a href=#task-queue title="task queue">task
- queues</a> must discard any further <a href=#concept-task title=concept-task>tasks</a> that would be added to them (tasks
- already on the queue are unaffected except where otherwise
- specified). Effectively, once the <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is true,
- timers stop firing, notifications for all pending asynchronous
- operations are dropped, etc.</p>
+ <p>Once the <code><a href=#workerglobalscope>WorkerGlobalScope</a></code>'s <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is set to true, the <a href=#event-loop>event
+ loop</a>'s <a href=#task-queue title="task queue">task queues</a> must discard any further <a href=#concept-task title=concept-task>tasks</a> that would be added to them (tasks already on the queue are
+ unaffected except where otherwise specified). Effectively, once the <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is true, timers stop firing,
+ notifications for all pending asynchronous operations are dropped, etc.</p>
<h4 id="the-worker's-lifetime"><span class=secno>9.2.3 </span>The worker's lifetime</h4>
- <p>Workers communicate with other workers and with <a href=#browsing-context title="browsing context">browsing contexts</a> through <a href=#channel-messaging title="channel messaging">message channels</a> and their
+ <p>Workers communicate with other workers and with <a href=#browsing-context title="browsing context">browsing
+ contexts</a> through <a href=#channel-messaging title="channel messaging">message channels</a> and their
<code><a href=#messageport>MessagePort</a></code> objects.</p>
- <p>Each <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> <var title="">worker global
- scope</var> has a list of <dfn id="the-worker's-ports">the worker's ports</dfn>, which
- consists of all the <code><a href=#messageport>MessagePort</a></code> objects that are
- entangled with another port and that have one (but only one) port
- owned by <var title="">worker global scope</var>. This list includes
- <!--all the <code>MessagePort</code> objects that are in events
- pending in the <span>event loop</span>, as well as (commented out
- because in practice it makes no difference either way as far as I
- can tell, and it would be hard to strictly implement since these
- ports might not yet be across the thread boundary)--> the implicit
- <code><a href=#messageport>MessagePort</a></code> in the case of <a href=#dedicatedworkerglobalscope title=DedicatedWorkerGlobalScope>dedicated workers</a>.</p>
+ <p>Each <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> <var title="">worker global scope</var> has a list of
+ <dfn id="the-worker's-ports">the worker's ports</dfn>, which consists of all the <code><a href=#messageport>MessagePort</a></code> objects that are
+ entangled with another port and that have one (but only one) port owned by <var title="">worker
+ global scope</var>. This list includes <!--all the <code>MessagePort</code> objects that are in
+ events pending in the <span>event loop</span>, as well as (commented out because in practice it
+ makes no difference either way as far as I can tell, and it would be hard to strictly implement
+ since these ports might not yet be across the thread boundary)--> the implicit
+ <code><a href=#messageport>MessagePort</a></code> in the case of <a href=#dedicatedworkerglobalscope title=DedicatedWorkerGlobalScope>dedicated
+ workers</a>.</p>
- <p>Each <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> also has a list of <dfn id="the-worker's-workers">the
- worker's workers</dfn>. Initially this list is empty; it is
- populated when the worker creates or obtains further workers.</p>
+ <p>Each <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> also has a list of <dfn id="the-worker's-workers">the worker's workers</dfn>.
+ Initially this list is empty; it is populated when the worker creates or obtains further
+ workers.</p>
- <p>Finally, each <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> also has a list of
- <dfn id="the-worker's-documents">the worker's <code>Document</code>s</dfn>. Initially this list
- is empty; it is populated when the worker is created.</p>
+ <p>Finally, each <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> also has a list of <dfn id="the-worker's-documents">the worker's
+ <code>Document</code>s</dfn>. Initially this list is empty; it is populated when the worker is
+ created.</p>
- <p>Whenever a <code><a href=#document>Document</a></code> <var title="">d</var> is <dfn id="add-a-document-to-the-worker's-documents" title="add a document to the worker's documents">added to the
- worker's <code>Document</code>s</dfn>, the user agent must, for each
- worker <var title="">q</var> in the list of <a href="#the-worker's-workers">the worker's
- workers</a> whose list of <a href="#the-worker's-documents">the worker's
- <code>Document</code>s</a> does not contain <var title="">d</var>, <a href="#add-a-document-to-the-worker's-documents" title="add a document to the worker's
- documents">add <var title="">d</var> to <var title="">q</var>'s
- <code>WorkerGlobalScope</code> owner's list of <span>the worker's
- <code>Document</code>s</span></a>.</p> <!-- suggestions welcome
- on making this sentence into understandable English -->
+ <p>Whenever a <code><a href=#document>Document</a></code> <var title="">d</var> is <dfn id="add-a-document-to-the-worker's-documents" title="add a document to the
+ worker's documents">added to the worker's <code>Document</code>s</dfn>, the user agent must, for
+ each worker <var title="">q</var> in the list of <a href="#the-worker's-workers">the worker's workers</a> whose list of
+ <a href="#the-worker's-documents">the worker's <code>Document</code>s</a> does not contain <var title="">d</var>, <a href="#add-a-document-to-the-worker's-documents" title="add a document to the worker's documents">add <var title="">d</var> to <var title="">q</var>'s <code>WorkerGlobalScope</code> owner's list of <span>the worker's
+ <code>Document</code>s</span></a>.</p> <!-- suggestions welcome on making this sentence into
+ understandable English -->
- <p>Whenever a <code><a href=#document>Document</a></code> object is <a href=#discard-a-document title="discard a
- Document">discarded</a>, it must be removed from the list of
- <a href="#the-worker's-documents">the worker's <code>Document</code>s</a> of each worker
- whose list contains that <code><a href=#document>Document</a></code>.</p>
+ <p>Whenever a <code><a href=#document>Document</a></code> object is <a href=#discard-a-document title="discard a Document">discarded</a>,
+ it must be removed from the list of <a href="#the-worker's-documents">the worker's <code>Document</code>s</a> of each
+ worker whose list contains that <code><a href=#document>Document</a></code>.</p>
- <p>Given a <a href="#script's-global-object">script's global object</a> <var title="">o</var>
- when creating or obtaining a worker, the <dfn id=list-of-relevant-document-objects-to-add>list of relevant
- <code>Document</code> objects to add</dfn> depends on the type of
- <var title="">o</var>. If <var title="">o</var> is a
- <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object (i.e. if we are creating a
- nested worker), then the relevant <code><a href=#document>Document</a></code>s are the
- <code><a href=#document>Document</a></code>s that are in <var title="">o</var>'s own list
- of <a href="#the-worker's-documents">the worker's <code>Document</code>s</a>. Otherwise, <var title="">o</var> is a <code><a href=#window>Window</a></code> object, and the relevant
- <code><a href=#document>Document</a></code> is just the <code><a href=#document>Document</a></code> that is the
- <a href=#active-document>active document</a> of the <code><a href=#window>Window</a></code> object <var title="">o</var>.</p>
+ <p>Given a <a href="#script's-global-object">script's global object</a> <var title="">o</var> when creating or obtaining a
+ worker, the <dfn id=list-of-relevant-document-objects-to-add>list of relevant <code>Document</code> objects to add</dfn> depends on the type
+ of <var title="">o</var>. If <var title="">o</var> is a <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object
+ (i.e. if we are creating a nested worker), then the relevant <code><a href=#document>Document</a></code>s are the
+ <code><a href=#document>Document</a></code>s that are in <var title="">o</var>'s own list of <a href="#the-worker's-documents">the worker's
+ <code>Document</code>s</a>. Otherwise, <var title="">o</var> is a <code><a href=#window>Window</a></code> object,
+ and the relevant <code><a href=#document>Document</a></code> is just the <code><a href=#document>Document</a></code> that is the <a href=#active-document>active
+ document</a> of the <code><a href=#window>Window</a></code> object <var title="">o</var>.</p>
- <hr><p>A worker is said to be a <dfn id=permissible-worker>permissible worker</dfn> if its
- list of <a href="#the-worker's-documents">the worker's <code>Document</code>s</a> is not
- empty.</p>
+ <hr><p>A worker is said to be a <dfn id=permissible-worker>permissible worker</dfn> if its list of <a href="#the-worker's-documents">the worker's
+ <code>Document</code>s</a> is not empty.</p>
- <p>A worker is said to be a <dfn id=protected-worker>protected worker</dfn> if it is a
- <a href=#permissible-worker>permissible worker</a> and either it has outstanding
- timers, database transactions, or network connections, or its list
- of <a href="#the-worker's-ports">the worker's ports</a> is not empty, or its
- <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> is actually a
- <code><a href=#sharedworkerglobalscope>SharedWorkerGlobalScope</a></code> object (i.e. the worker is a
- shared worker).</p>
+ <p>A worker is said to be a <dfn id=protected-worker>protected worker</dfn> if it is a <a href=#permissible-worker>permissible worker</a>
+ and either it has outstanding timers, database transactions, or network connections, or its list
+ of <a href="#the-worker's-ports">the worker's ports</a> is not empty, or its <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> is actually
+ a <code><a href=#sharedworkerglobalscope>SharedWorkerGlobalScope</a></code> object (i.e. the worker is a shared worker).</p>
- <p>A worker is said to be an <dfn id=active-needed-worker>active needed worker</dfn> if any
- of the <code><a href=#document>Document</a></code> objects in <a href="#the-worker's-documents">the worker's
- <code>Document</code>s</a> are <a href=#fully-active>fully active</a>.</p>
+ <p>A worker is said to be an <dfn id=active-needed-worker>active needed worker</dfn> if any of the <code><a href=#document>Document</a></code>
+ objects in <a href="#the-worker's-documents">the worker's <code>Document</code>s</a> are <a href=#fully-active>fully active</a>.</p>
- <p>A worker is said to be a <dfn id=suspendable-worker>suspendable worker</dfn> if it is
- not an <a href=#active-needed-worker>active needed worker</a> but it is a
- <a href=#permissible-worker>permissible worker</a>.</p>
+ <p>A worker is said to be a <dfn id=suspendable-worker>suspendable worker</dfn> if it is not an <a href=#active-needed-worker>active needed
+ worker</a> but it is a <a href=#permissible-worker>permissible worker</a>.</p>
<h4 id=processing-model-6><span class=secno>9.2.4 </span>Processing model</h4>
- <p>When a user agent is to <dfn id=run-a-worker>run a worker</dfn> for a script with
- <a href=#url>URL</a> <var title="">url</var>, a <a href=#browsing-context>browsing
- context</a> <var title="">owner browsing context</var>, a
- <code><a href=#document>Document</a></code> <var title="">owner document</var>, an
- <a href=#origin>origin</a> <var title="">owner origin</var>, and with
- global scope <var title="">worker global scope</var>, it must run
- the following steps:</p>
+ <p>When a user agent is to <dfn id=run-a-worker>run a worker</dfn> for a script with <a href=#url>URL</a> <var title="">url</var>, a <a href=#browsing-context>browsing context</a> <var title="">owner browsing context</var>, a
+ <code><a href=#document>Document</a></code> <var title="">owner document</var>, an <a href=#origin>origin</a> <var title="">owner origin</var>, and with global scope <var title="">worker global scope</var>, it
+ must run the following steps:</p>
<ol><li>
- <p>Create a separate parallel execution environment (i.e. a
- separate thread or process or equivalent construct), and run the
- rest of these steps asynchronously in that context.</p>
+ <p>Create a separate parallel execution environment (i.e. a separate thread or process or
+ equivalent construct), and run the rest of these steps asynchronously in that context.</p>
</li>
<li><p>If <var title="">worker global scope</var> is actually a
- <code><a href=#sharedworkerglobalscope>SharedWorkerGlobalScope</a></code> object (i.e. the worker is a
- shared worker), and there are any <a href=#relevant-application-cache title="relevant application
- cache">relevant application caches</a> that are identified by a
- manifest URL with the <a href=#same-origin>same origin</a> as <var title="">url</var> and that have <var title="">url</var> as one of
- their entries, <em>not</em> excluding entries marked as <a href=#concept-appcache-foreign title=concept-appcache-foreign>foreign</a>, then associate the
- <var title="">worker global scope</var> with the <a href=#concept-appcache-selection title=concept-appcache-selection>most appropriate application
+ <code><a href=#sharedworkerglobalscope>SharedWorkerGlobalScope</a></code> object (i.e. the worker is a shared worker), and there are
+ any <a href=#relevant-application-cache title="relevant application cache">relevant application caches</a> that are
+ identified by a manifest URL with the <a href=#same-origin>same origin</a> as <var title="">url</var> and
+ that have <var title="">url</var> as one of their entries, <em>not</em> excluding entries marked
+ as <a href=#concept-appcache-foreign title=concept-appcache-foreign>foreign</a>, then associate the <var title="">worker
+ global scope</var> with the <a href=#concept-appcache-selection title=concept-appcache-selection>most appropriate application
cache</a> of those that match.</li>
<li>
- <p>Attempt to <a href=#fetch>fetch</a><!--FETCH--> the resource
- identified by <var title="">url</var>, from the <var title="">owner origin</var>, using <var title="">owner
- document</var> as the <a href=#referrer-source>referrer source</a>, with the
- <i>synchronous flag</i> set and the <i>force same-origin flag</i>
- set.</p> <!-- not http-origin privacy sensitive (looking forward
- to CORS) -->
+ <p>Attempt to <a href=#fetch>fetch</a><!--FETCH--> the resource identified by <var title="">url</var>,
+ from the <var title="">owner origin</var>, using <var title="">owner document</var> as the
+ <a href=#referrer-source>referrer source</a>, with the <i>synchronous flag</i> set and the <i>force same-origin
+ flag</i> set.</p> <!-- not http-origin privacy sensitive (looking forward to CORS) -->
- <p>If the attempt fails, then for each <code><a href=#worker>Worker</a></code> or
- <code><a href=#sharedworker>SharedWorker</a></code> object associated with <var title="">worker global scope</var>, <a href=#queue-a-task>queue a task</a> to
- <a href=#fire-a-simple-event>fire a simple event</a> named <code title=event-error>error</code> at that object. Abort these
+ <p>If the attempt fails, then for each <code><a href=#worker>Worker</a></code> or <code><a href=#sharedworker>SharedWorker</a></code> object
+ associated with <var title="">worker global scope</var>, <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire
+ a simple event</a> named <code title=event-error>error</code> at that object. Abort these
steps.</p>
- <p>If the attempt succeeds, then let <var title="">source</var> be
- the script resource <a href=#decoded-as-utf-8,-with-error-handling>decoded as UTF-8, with error
- handling</a>.
+ <p>If the attempt succeeds, then let <var title="">source</var> be the script resource
+ <a href=#decoded-as-utf-8,-with-error-handling>decoded as UTF-8, with error handling</a>.
</p>
<p>Let <var title="">language</var> be JavaScript.</p>
- <p class=note>As with <code><a href=#the-script-element>script</a></code> elements, the MIME
- type of the script is ignored. Unlike with <code><a href=#the-script-element>script</a></code>
- elements, there is no way to override the type. It's always
+ <p class=note>As with <code><a href=#the-script-element>script</a></code> elements, the MIME type of the script is ignored.
+ Unlike with <code><a href=#the-script-element>script</a></code> elements, there is no way to override the type. It's always
assumed to be JavaScript.</p>
</li>
- <li><p>In the newly created execution environment, create a
- <a href=#javascript-global-environment>JavaScript global environment</a> whose <i>global
- object</i> is <var title="">worker global scope</var>. If <var title="">worker global scope</var> is a
- <code><a href=#dedicatedworkerglobalscope>DedicatedWorkerGlobalScope</a></code> object, then this is a
- <a href=#dedicated-worker-environment>dedicated worker environment</a>. Otherwise, <var title="">worker global scope</var> is a
- <code><a href=#sharedworkerglobalscope>SharedWorkerGlobalScope</a></code> object, and this is a
- <a href=#shared-worker-environment>shared worker environment</a>. (In either case, by
- definition, it is a <a href=#worker-environment>worker environment</a>.)</li>
+ <li><p>In the newly created execution environment, create a <a href=#javascript-global-environment>JavaScript global
+ environment</a> whose <i>global object</i> is <var title="">worker global scope</var>. If <var title="">worker global scope</var> is a <code><a href=#dedicatedworkerglobalscope>DedicatedWorkerGlobalScope</a></code> object, then this
+ is a <a href=#dedicated-worker-environment>dedicated worker environment</a>. Otherwise, <var title="">worker global
+ scope</var> is a <code><a href=#sharedworkerglobalscope>SharedWorkerGlobalScope</a></code> object, and this is a <a href=#shared-worker-environment>shared worker
+ environment</a>. (In either case, by definition, it is a <a href=#worker-environment>worker
+ environment</a>.)</li>
<li>
- <p>A new <a href=#concept-script title=concept-script>script</a> is now
- created, as follows.</p>
+ <p>A new <a href=#concept-script title=concept-script>script</a> is now created, as follows.</p>
- <p>Create a new <a href=#script-execution-environment>script execution environment</a>
- set up as appropriate for the scripting language <var title="">language</var>.</p>
+ <p>Create a new <a href=#script-execution-environment>script execution environment</a> set up as appropriate for the
+ scripting language <var title="">language</var>.</p>
- <p>Parse/compile/initialize <var title="">source</var> using that
- <a href=#script-execution-environment>script execution environment</a>, as appropriate for <var title="">language</var>, and thus obtain a <a href=#list-of-code-entry-points>list of code
- entry-points</a>; set the <i><a href=#initial-code-entry-point>initial code entry-point</a></i> to
- the entry-point for any executable code to be immediately run.</p>
+ <p>Parse/compile/initialize <var title="">source</var> using that <a href=#script-execution-environment>script execution
+ environment</a>, as appropriate for <var title="">language</var>, and thus obtain a
+ <a href=#list-of-code-entry-points>list of code entry-points</a>; set the <i><a href=#initial-code-entry-point>initial code entry-point</a></i> to the
+ entry-point for any executable code to be immediately run.</p>
<p>Set the <a href="#script's-global-object">script's global object</a> to <var title="">worker global scope</var>.</p>
- <p>Set the <a href="#script's-browsing-context">script's browsing context</a> to <var title="">owner browsing context</var>.</p>
+ <p>Set the <a href="#script's-browsing-context">script's browsing context</a> to <var title="">owner browsing
+ context</var>.</p>
- <p>Set the <a href="#script's-document">script's document</a> to <var title="">owner
- document</var>.</p>
+ <p>Set the <a href="#script's-document">script's document</a> to <var title="">owner document</var>.</p>
<p>Set the <a href="#script's-referrer-source">script's referrer source</a> to <var title="">url</var>.</p>
- <p>Set the <a href="#script's-url-character-encoding">script's URL character encoding</a> to
- UTF-8. (This is just used for encoding non-ASCII characters in the
- query component of URLs.)</p>
+ <p>Set the <a href="#script's-url-character-encoding">script's URL character encoding</a> to UTF-8. (This is just used for
+ encoding non-ASCII characters in the query component of URLs.)</p>
<p>Set the <a href="#script's-base-url">script's base URL</a> to <var title="">url</var>.</p>
@@ -80415,198 +80162,163 @@
<li>
- <p><strong>Closing orphan workers</strong>: Start monitoring the
- worker such that no sooner than it stops being either a
- <a href=#protected-worker>protected worker</a> or a <a href=#suspendable-worker>suspendable
- worker</a>, and no later than it stops being a
- <a href=#permissible-worker>permissible worker</a>, <var title="">worker global
- scope</var>'s <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is set
- to true<!-- v2-onclose and <span title="queue a task">a task is
- queued</span> to <span>fire a simple event</span> named <code
- title="event-worker-close">close</code> at <var title="">worker global
+ <p><strong>Closing orphan workers</strong>: Start monitoring the worker such that no sooner than
+ it stops being either a <a href=#protected-worker>protected worker</a> or a <a href=#suspendable-worker>suspendable worker</a>, and
+ no later than it stops being a <a href=#permissible-worker>permissible worker</a>, <var title="">worker global
+ scope</var>'s <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is set to true<!--
+ v2-onclose and <span title="queue a task">a task is queued</span> to <span>fire a simple
+ event</span> named <code title="event-worker-close">close</code> at <var title="">worker global
scope</var>-->.</p>
</li>
<li>
- <p><strong>Suspending workers</strong>: Start monitoring the
- worker, such that whenever <var title="">worker global
- scope</var>'s <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is false
- and the worker is a <a href=#suspendable-worker>suspendable worker</a>, the user
- agent suspends execution of script in that worker until such time
- as either the <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag switches
- to true or the worker stops being a <a href=#suspendable-worker>suspendable
- worker</a>.</p>
+ <p><strong>Suspending workers</strong>: Start monitoring the worker, such that whenever <var title="">worker global scope</var>'s <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a>
+ flag is false and the worker is a <a href=#suspendable-worker>suspendable worker</a>, the user agent suspends
+ execution of script in that worker until such time as either the <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag switches to true or the worker stops
+ being a <a href=#suspendable-worker>suspendable worker</a>.</p>
</li>
<li>
- <p><a href=#jump-to-a-code-entry-point title="jump to a code entry-point">Jump</a> to the
- <a href=#concept-script title=concept-script>script</a>'s <i><a href=#initial-code-entry-point>initial code
- entry-point</a></i>, and let that run until it either returns, fails
- to catch an exception, or gets prematurely aborted by the
- "<a href=#kill-a-worker>kill a worker</a>" or "<a href=#terminate-a-worker>terminate a worker</a>"
- algorithms defined below.</p>
+ <p><a href=#jump-to-a-code-entry-point title="jump to a code entry-point">Jump</a> to the <a href=#concept-script title=concept-script>script</a>'s <i><a href=#initial-code-entry-point>initial code entry-point</a></i>, and let that run until
+ it either returns, fails to catch an exception, or gets prematurely aborted by the "<a href=#kill-a-worker>kill a
+ worker</a>" or "<a href=#terminate-a-worker>terminate a worker</a>" algorithms defined below.</p>
<!-- v2-onclose
- <p class="note">If the script gets aborted by the "<span>kill a
- worker</span>" algorithm, then that same algorithm will cause
- there to only be a single <span title="concept-task">task</span>
- in the <span>event loop</span> at the next step, namely the task
- for the <code title="message-close">close</code> event. The
- "<span>terminate a worker</span>" algorithm removes all the
- events.</p>
+ <p class="note">If the script gets aborted by the "<span>kill a worker</span>" algorithm, then
+ that same algorithm will cause there to only be a single <span title="concept-task">task</span>
+ in the <span>event loop</span> at the next step, namely the task for the <code
+ title="message-close">close</code> event. The "<span>terminate a worker</span>" algorithm
+ removes all the events.</p>
-->
</li>
<li><p>If <var title="">worker global scope</var> is actually a
- <code><a href=#dedicatedworkerglobalscope>DedicatedWorkerGlobalScope</a></code> object (i.e. the worker is
- a dedicated worker), then enable the <a href=#port-message-queue>port message
- queue</a> of the worker's implicit port.</li>
+ <code><a href=#dedicatedworkerglobalscope>DedicatedWorkerGlobalScope</a></code> object (i.e. the worker is a dedicated worker), then
+ enable the <a href=#port-message-queue>port message queue</a> of the worker's implicit port.</li>
<li>
- <p><i title="">Event loop</i>: Wait until either there is a <a href=#concept-task title=concept-task>task</a> in one of the <a href=#event-loop>event
- loop</a>'s <a href=#task-queue title="task queue">task queues</a> or <var title="">worker global scope</var>'s <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is set
- to true.</p>
+ <p><i title="">Event loop</i>: Wait until either there is a <a href=#concept-task title=concept-task>task</a> in one of the <a href=#event-loop>event loop</a>'s <a href=#task-queue title="task
+ queue">task queues</a> or <var title="">worker global scope</var>'s <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is set to true.</p>
</li>
<li>
- <p>Run the oldest task on one of the <a href=#event-loop>event loop</a>'s
- <a href=#task-queue title="task queue">task queues</a>, if any. The user
- agent may pick any <a href=#task-queue>task queue</a>.</p>
+ <p>Run the oldest task on one of the <a href=#event-loop>event loop</a>'s <a href=#task-queue title="task queue">task
+ queues</a>, if any. The user agent may pick any <a href=#task-queue>task queue</a>.</p>
- <p class=note>The handling of events or the execution of
- callbacks might get prematurely aborted by the "<a href=#kill-a-worker>kill a
- worker</a>" or "<a href=#terminate-a-worker>terminate a worker</a>" algorithms
+ <p class=note>The handling of events or the execution of callbacks might get prematurely
+ aborted by the "<a href=#kill-a-worker>kill a worker</a>" or "<a href=#terminate-a-worker>terminate a worker</a>" algorithms
defined below.</p>
</li>
<li>
- <p>If the <a href=#storage-mutex>storage mutex</a> is now owned by the worker's
- <a href=#event-loop>event loop</a>, release it so that it is once again
- free.</p>
+ <p>If the <a href=#storage-mutex>storage mutex</a> is now owned by the worker's <a href=#event-loop>event loop</a>,
+ release it so that it is once again free.</p>
</li>
<li>
- <p>Remove the task just run in the earlier step, if any, from its
- <a href=#task-queue>task queue</a>.</p>
+ <p>Remove the task just run in the earlier step, if any, from its <a href=#task-queue>task queue</a>.</p>
</li>
<li>
- <p>If there are any more events in the <a href=#event-loop>event loop</a>'s
- <a href=#task-queue title="task queue">task queues</a> or if <var title="">worker global scope</var>'s <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is set
- to false, then jump back to the step above labeled <i><a href=#event-loop>event
- loop</a></i>.</p>
+ <p>If there are any more events in the <a href=#event-loop>event loop</a>'s <a href=#task-queue title="task queue">task
+ queues</a> or if <var title="">worker global scope</var>'s <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is set to false, then jump back to the
+ step above labeled <i><a href=#event-loop>event loop</a></i>.</p>
</li>
<li>
- <p>Empty the <var title="">worker global scope</var>'s <a href=#list-of-active-timers>list
- of active timers</a>.</p>
+ <p>Empty the <var title="">worker global scope</var>'s <a href=#list-of-active-timers>list of active timers</a>.</p>
</li>
<li>
- <p>Disentangle all the ports in the list of <a href="#the-worker's-ports">the worker's
- ports</a>.</p>
+ <p>Disentangle all the ports in the list of <a href="#the-worker's-ports">the worker's ports</a>.</p>
</li>
<!-- v2-onclose
<li>
- <p>For each <code>Worker</code> or <code>SharedWorker</code>
- object associated with <var title="">worker global scope</var>,
- <span>queue a task</span> to <span>fire a simple event</span>
- named <code title="event-worker-close">close</code> at that object.</p>
+ <p>For each <code>Worker</code> or <code>SharedWorker</code> object associated with <var
+ title="">worker global scope</var>, <span>queue a task</span> to <span>fire a simple
+ event</span> named <code title="event-worker-close">close</code> at that object.</p>
</li>
-->
- </ol><hr><p>When a user agent is to <dfn id=kill-a-worker>kill a worker</dfn> it must
- run the following steps in parallel with the worker's main loop (the
- "<a href=#run-a-worker>run a worker</a>" processing model defined above):</p>
+ </ol><hr><p>When a user agent is to <dfn id=kill-a-worker>kill a worker</dfn> it must run the following steps in parallel
+ with the worker's main loop (the "<a href=#run-a-worker>run a worker</a>" processing model defined above):</p>
<ol><!-- v2-onclose
- <li><p>If the worker's <code>WorkerGlobalScope</code> object's
- <span title="dom-WorkerGlobalScope-closing">closing</span> flag is
- false, <span>queue a task</span> to <span>fire a simple
- event</span> named <code title="event-worker-close">close</code> at the
+ <li><p>If the worker's <code>WorkerGlobalScope</code> object's <span
+ title="dom-WorkerGlobalScope-closing">closing</span> flag is false, <span>queue a task</span> to
+ <span>fire a simple event</span> named <code title="event-worker-close">close</code> at the
worker's <code>WorkerGlobalScope</code> object.</p></li>
---><li><p>Set the worker's <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object's <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag to
- true.</li>
+--><li><p>Set the worker's <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object's <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag to true.</li>
<!-- v2-onclose
- <li><p>Wait a user-agent-defined amount of time. If the "<span>run
- a worker</span>" processing model defined above immediately starts
- running event listeners registered for the <code
- title="event-worker-close">close</code> event, this time should not be
- zero — the idea is that the <code
- title="event-worker-close">close</code> event can be used to clean up
- when shutting down unexpectedly.</p></li>
+ <li><p>Wait a user-agent-defined amount of time. If the "<span>run a worker</span>" processing
+ model defined above immediately starts running event listeners registered for the <code
+ title="event-worker-close">close</code> event, this time should not be zero — the idea is
+ that the <code title="event-worker-close">close</code> event can be used to clean up when
+ shutting down unexpectedly.</p></li>
-->
- <li><p>If there are any <a href=#concept-task title=concept-task>tasks</a>
- queued in the <a href=#event-loop>event loop</a>'s <a href=#task-queue title="task
- queue">task queues</a><!-- v2-onclose other than the <code
- title="event-worker-close">close</code> event that this algorithm just
- added-->, discard them without processing them.</li>
+ <li><p>If there are any <a href=#concept-task title=concept-task>tasks</a> queued in the <a href=#event-loop>event
+ loop</a>'s <a href=#task-queue title="task queue">task queues</a><!-- v2-onclose other than the <code
+ title="event-worker-close">close</code> event that this algorithm just added-->, discard them
+ without processing them.</li>
<!-- v2-onclose
- <li><p>If the <code title="event-worker-close">close</code> event that
- this algorithm just queued hasn't yet been dispatched, then abort
- the script currently running in the worker.</p></li>
+ <li><p>If the <code title="event-worker-close">close</code> event that this algorithm just queued
+ hasn't yet been dispatched, then abort the script currently running in the worker.</p></li>
-->
<li><p>Wait a user-agent-defined amount of time.</li>
- <li><p>Abort the script currently running in the worker<!--
- v2-onclose (if any script is running, then it will be a handler for
- the <code title="event-worker-close">close</code> event)-->.</li>
+ <li><p>Abort the script currently running in the worker<!-- v2-onclose (if any script is running,
+ then it will be a handler for the <code title="event-worker-close">close</code>
+ event)-->.</li>
- </ol><p>User agents may invoke the "<a href=#kill-a-worker>kill a worker</a>"
- processing model on a worker at any time, e.g. in response to user
- requests, in response to CPU quota management, or when a worker
- stops being an <a href=#active-needed-worker>active needed worker</a> if the worker
- continues executing even after its <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag was
- set to true.</p>
+ </ol><p>User agents may invoke the "<a href=#kill-a-worker>kill a worker</a>" processing model on a worker at any
+ time, e.g. in response to user requests, in response to CPU quota management, or when a worker
+ stops being an <a href=#active-needed-worker>active needed worker</a> if the worker continues executing even after its
+ <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag was set to true.</p>
- <hr><p>When a user agent is to <dfn id=terminate-a-worker>terminate a worker</dfn> it must run
- the following steps in parallel with the worker's main loop (the
- "<a href=#run-a-worker>run a worker</a>" processing model defined above):</p>
+ <hr><p>When a user agent is to <dfn id=terminate-a-worker>terminate a worker</dfn> it must run the following steps in
+ parallel with the worker's main loop (the "<a href=#run-a-worker>run a worker</a>" processing model defined
+ above):</p>
- <ol><li><p>Set the worker's <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object's
- <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag to
- true.</li>
+ <ol><li><p>Set the worker's <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object's <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag to true.</li>
- <li><p>If there are any <a href=#concept-task title=concept-task>tasks</a>
- queued in the <a href=#event-loop>event loop</a>'s <a href=#task-queue title="task
- queue">task queues</a>, discard them without processing
+ <li><p>If there are any <a href=#concept-task title=concept-task>tasks</a> queued in the <a href=#event-loop>event
+ loop</a>'s <a href=#task-queue title="task queue">task queues</a>, discard them without processing
them.</li>
<li><p>Abort the script currently running in the worker.</li>
- <li><p>If the worker's <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object is
- actually a <code><a href=#dedicatedworkerglobalscope>DedicatedWorkerGlobalScope</a></code> object (i.e. the
- worker is a dedicated worker), then empty the <a href=#port-message-queue>port message
- queue</a> of the port that the worker's implicit port is
+ <li><p>If the worker's <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object is actually a
+ <code><a href=#dedicatedworkerglobalscope>DedicatedWorkerGlobalScope</a></code> object (i.e. the worker is a dedicated worker), then
+ empty the <a href=#port-message-queue>port message queue</a> of the port that the worker's implicit port is
entangled with.</li>
- </ol><hr><p>The <a href=#task-source>task source</a> for the tasks mentioned above is the
- <a href=#dom-manipulation-task-source>DOM manipulation task source</a>.</p>
+ </ol><hr><p>The <a href=#task-source>task source</a> for the tasks mentioned above is the <a href=#dom-manipulation-task-source>DOM manipulation task
+ source</a>.</p>
<h4 id=runtime-script-errors-0><span class=secno>9.2.5 </span>Runtime script errors</h4>
@@ -80618,9 +80330,9 @@
<code title=handler-WorkerGlobalScope-onerror><a href=#handler-workerglobalscope-onerror>onerror</a></code> attribute.
</p>
- <p>For shared workers, if the error is still <i title=concept-error-nothandled><a href=#concept-error-nothandled>not handled</a></i> afterwards, or if
- the error occurred while handling a previous script error, the error
- may be reported to the user.
+ <p>For shared workers, if the error is still <i title=concept-error-nothandled><a href=#concept-error-nothandled>not handled</a></i>
+ afterwards, or if the error occurred while handling a previous script error, the error may be
+ reported to the user.
</p>
<p>For dedicated workers, if the error is still <i title=concept-error-nothandled><a href=#concept-error-nothandled>not
@@ -80633,20 +80345,18 @@
error had occurred in the global scope that the <code><a href=#worker>Worker</a></code> object is in, thus repeating
the entire runtime script error reporting process one level up.</p>
- <p>If the implicit port connecting the worker to its
- <code><a href=#worker>Worker</a></code> object has been disentangled (i.e. if the parent
- worker has been terminated), then the user agent must act as if the
- <code><a href=#worker>Worker</a></code> object had no <code title=event-error>error</code> event handler and as if that
- worker's <code title=handler-WorkerGlobalScope-onerror><a href=#handler-workerglobalscope-onerror>onerror</a></code> attribute
- was null, but must otherwise act as described above.</p>
+ <p>If the implicit port connecting the worker to its <code><a href=#worker>Worker</a></code> object has been
+ disentangled (i.e. if the parent worker has been terminated), then the user agent must act as if
+ the <code><a href=#worker>Worker</a></code> object had no <code title=event-error>error</code> event handler and as
+ if that worker's <code title=handler-WorkerGlobalScope-onerror><a href=#handler-workerglobalscope-onerror>onerror</a></code> attribute was
+ null, but must otherwise act as described above.</p>
- <p class=note>Thus, error reports propagate up to the chain of
- dedicated workers up to the original <code><a href=#document>Document</a></code>, even if
- some of the workers along this chain have been terminated and
- garbage collected.</p>
+ <p class=note>Thus, error reports propagate up to the chain of dedicated workers up to the
+ original <code><a href=#document>Document</a></code>, even if some of the workers along this chain have been terminated
+ and garbage collected.</p>
- <p>The <a href=#task-source>task source</a> for the task mentioned above is the
- <a href=#dom-manipulation-task-source>DOM manipulation task source</a>.</p>
+ <p>The <a href=#task-source>task source</a> for the task mentioned above is the <a href=#dom-manipulation-task-source>DOM manipulation task
+ source</a>.</p>
<hr><pre class=idl>[Constructor(DOMString type, optional <a href=#erroreventinit>ErrorEventInit</a> eventInitDict)]
interface <dfn id=errorevent>ErrorEvent</dfn> : <a href=#event>Event</a> {
@@ -82626,26 +82336,23 @@
</dl></li>
- </ol><hr><p>The <dfn id=dom-websocket-bufferedamount title=dom-WebSocket-bufferedAmount><code>bufferedAmount</code></dfn>
- attribute must return the number of bytes of application data (UTF-8
- text and binary data) that have been queued using <code title=dom-WebSocket-send><a href=#dom-websocket-send>send()</a></code> but that, as of the last
- time the <a href=#event-loop>event loop</a> started executing a <a href=#concept-task title=concept-task>task</a>, had not yet been transmitted to
- the network. (This thus includes any text sent during the execution
- of the current task, regardless of whether the user agent is able to
- transmit text asynchronously with script execution.) This does not
- include framing overhead incurred by the protocol, or buffering done
- by the operating system or network hardware. If the connection is
- closed, this attribute's value will only increase with each call to
- the <code title=dom-WebSocket-send><a href=#dom-websocket-send>send()</a></code> method (the
+ </ol><hr><p>The <dfn id=dom-websocket-bufferedamount title=dom-WebSocket-bufferedAmount><code>bufferedAmount</code></dfn> attribute must
+ return the number of bytes of application data (UTF-8 text and binary data) that have been queued
+ using <code title=dom-WebSocket-send><a href=#dom-websocket-send>send()</a></code> but that, as of the last time the <a href=#event-loop>event
+ loop</a> started executing a <a href=#concept-task title=concept-task>task</a>, had not yet been
+ transmitted to the network. (This thus includes any text sent during the execution of the current
+ task, regardless of whether the user agent is able to transmit text asynchronously with script
+ execution.) This does not include framing overhead incurred by the protocol, or buffering done by
+ the operating system or network hardware. If the connection is closed, this attribute's value will
+ only increase with each call to the <code title=dom-WebSocket-send><a href=#dom-websocket-send>send()</a></code> method (the
number does not reset to zero once the connection closes).</p>
<div class=example>
<p>In this simple example, the <code title=dom-WebSocket-bufferedAmount><a href=#dom-websocket-bufferedamount>bufferedAmount</a></code>
- attribute is used to ensure that updates are sent either at the
- rate of one update every 50ms, if the network can handle that rate,
- or at whatever rate the network <em>can</em> handle, if that is too
- fast.</p>
+ attribute is used to ensure that updates are sent either at the rate of one update every 50ms, if
+ the network can handle that rate, or at whatever rate the network <em>can</em> handle, if that is
+ too fast.</p>
<pre>var socket = new WebSocket('ws://game.example.com:12010/updates');
socket.onopen = function () {
@@ -82655,60 +82362,46 @@
}, 50);
};</pre>
- <p>The <code title=dom-WebSocket-bufferedAmount><a href=#dom-websocket-bufferedamount>bufferedAmount</a></code>
- attribute can also be used to saturate the network without sending
- the data at a higher rate than the network can handle, though this
- requires more careful monitoring of the value of the attribute over
- time.</p>
+ <p>The <code title=dom-WebSocket-bufferedAmount><a href=#dom-websocket-bufferedamount>bufferedAmount</a></code> attribute can also be
+ used to saturate the network without sending the data at a higher rate than the network can
+ handle, though this requires more careful monitoring of the value of the attribute over time.</p>
</div>
- <hr><p>When a <code><a href=#websocket>WebSocket</a></code> object is created, its <dfn id=dom-websocket-binarytype title=dom-WebSocket-binaryType><code>binaryType</code></dfn> IDL
- attribute must be set to the string "<code title="">blob</code>". On
- getting, it must return the last value it was set to. On setting,
- the user agent must set the IDL attribute to the new value.</p>
+ <hr><p>When a <code><a href=#websocket>WebSocket</a></code> object is created, its <dfn id=dom-websocket-binarytype title=dom-WebSocket-binaryType><code>binaryType</code></dfn> IDL attribute must be set to the
+ string "<code title="">blob</code>". On getting, it must return the last value it was set to. On
+ setting, the user agent must set the IDL attribute to the new value.</p>
- <p class=note>This attribute allows authors to control how binary
- data is exposed to scripts. By setting the attribute to "<code title="">blob</code>", binary data is returned in <code><a href=#blob>Blob</a></code>
- form; by setting it to "<code title="">arraybuffer</code>", it is
- returned in <code><a href=#arraybuffer>ArrayBuffer</a></code> form. User agents can use this
- as a hint for how to handle incoming binary data: if the attribute
- is set to "<code title="">blob</code>", it is safe to spool it to
- disk, and if it is set to "<code title="">arraybuffer</code>", it is
- likely more efficient to keep the data in memory. Naturally, user
- agents are encouraged to use more subtle heuristics to decide
- whether to keep incoming data in memory or not, e.g. based on how
- big the data is or how common it is for a script to change the
- attribute at the last minute. This latter aspect is important in
- particular because it is quite possible for the attribute to be
- changed after the user agent has received the data but before the
- user agent has fired the event for it.</p>
+ <p class=note>This attribute allows authors to control how binary data is exposed to scripts. By
+ setting the attribute to "<code title="">blob</code>", binary data is returned in
+ <code><a href=#blob>Blob</a></code> form; by setting it to "<code title="">arraybuffer</code>", it is returned in
+ <code><a href=#arraybuffer>ArrayBuffer</a></code> form. User agents can use this as a hint for how to handle incoming
+ binary data: if the attribute is set to "<code title="">blob</code>", it is safe to spool it to
+ disk, and if it is set to "<code title="">arraybuffer</code>", it is likely more efficient to keep
+ the data in memory. Naturally, user agents are encouraged to use more subtle heuristics to decide
+ whether to keep incoming data in memory or not, e.g. based on how big the data is or how common it
+ is for a script to change the attribute at the last minute. This latter aspect is important in
+ particular because it is quite possible for the attribute to be changed after the user agent has
+ received the data but before the user agent has fired the event for it.</p>
- <p>The <dfn id=dom-websocket-send title=dom-WebSocket-send><code>send(<var title="">data</var>)</code></dfn> method transmits data using the
- connection. If the <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code> attribute is
- <code title=dom-WebSocket-CONNECTING><a href=#dom-websocket-connecting>CONNECTING</a></code>, it must
- throw an <code><a href=#invalidstateerror>InvalidStateError</a></code> exception. Otherwise, the
- user agent must run the appropriate set of steps from the following
- list:</p>
+ <p>The <dfn id=dom-websocket-send title=dom-WebSocket-send><code>send(<var title="">data</var>)</code></dfn> method
+ transmits data using the connection. If the <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code> attribute is <code title=dom-WebSocket-CONNECTING><a href=#dom-websocket-connecting>CONNECTING</a></code>, it must throw an
+ <code><a href=#invalidstateerror>InvalidStateError</a></code> exception. Otherwise, the user agent must run the appropriate set
+ of steps from the following list:</p>
<dl><dt>If the argument is a string</dt>
<dd>
- <p>Let <var title="">data</var> be the result of <a href=#convert-a-domstring-to-a-sequence-of-unicode-characters title="convert a DOMString to a sequence of Unicode
- characters">converting the <var title="">data</var> argument to a
- sequence of Unicode characters</a>. If <i><a href=#the-websocket-connection-is-established>the WebSocket
- connection is established</a></i> and <i title="the WebSocket closing
- handshake is started"><a href=#the-websocket-closing-handshake-is-started>the WebSocket closing handshake has not yet
- started</a></i>, then the user agent must <i>send a WebSocket
- Message</i> comprised of <var title="">data</var> using a text
- frame opcode; if the data cannot be sent, e.g. because it would
- need to be buffered but the buffer is full, the user agent must
- <i><a href=#close-the-websocket-connection>close the WebSocket connection</a></i> <a href=#concept-websocket-close-fail title=concept-websocket-close-fail>with prejudice</a>. Any
- invocation of this method with a string argument that does not
- throw an exception must increase the <code title=dom-WebSocket-bufferedAmount><a href=#dom-websocket-bufferedamount>bufferedAmount</a></code>
- attribute by the number of bytes needed to express the argument as
- UTF-8. <a href=#refsUNICODE>[UNICODE]</a> <a href=#refsRFC3629>[RFC3629]</a> <a href=#refsWSP>[WSP]</a></p>
+ <p>Let <var title="">data</var> be the result of <a href=#convert-a-domstring-to-a-sequence-of-unicode-characters title="convert a DOMString to a sequence
+ of Unicode characters">converting the <var title="">data</var> argument to a sequence of Unicode
+ characters</a>. If <i><a href=#the-websocket-connection-is-established>the WebSocket connection is established</a></i> and <i title="the WebSocket
+ closing handshake is started"><a href=#the-websocket-closing-handshake-is-started>the WebSocket closing handshake has not yet started</a></i>, then the
+ user agent must <i>send a WebSocket Message</i> comprised of <var title="">data</var> using a
+ text frame opcode; if the data cannot be sent, e.g. because it would need to be buffered but the
+ buffer is full, the user agent must <i><a href=#close-the-websocket-connection>close the WebSocket connection</a></i> <a href=#concept-websocket-close-fail title=concept-websocket-close-fail>with prejudice</a>. Any invocation of this method with a
+ string argument that does not throw an exception must increase the <code title=dom-WebSocket-bufferedAmount><a href=#dom-websocket-bufferedamount>bufferedAmount</a></code> attribute by the number of bytes
+ needed to express the argument as UTF-8. <a href=#refsUNICODE>[UNICODE]</a> <a href=#refsRFC3629>[RFC3629]</a> <a href=#refsWSP>[WSP]</a></p>
</dd>
@@ -82717,19 +82410,15 @@
<dd>
- <p>If <i><a href=#the-websocket-connection-is-established>the WebSocket connection is established</a></i>, and <i title="the WebSocket closing handshake is started"><a href=#the-websocket-closing-handshake-is-started>the WebSocket
- closing handshake has not yet started</a></i>, then the user agent
- must <i>send a WebSocket Message</i> comprised of <var title="">data</var> using a binary frame opcode; if the data
- cannot be sent, e.g. because it would need to be buffered but the
- buffer is full, the user agent must <i><a href=#close-the-websocket-connection>close the WebSocket
- connection</a></i> <a href=#concept-websocket-close-fail title=concept-websocket-close-fail>with
- prejudice</a>. The data to be sent is the raw data represented
- by the <code><a href=#blob>Blob</a></code> object. <!-- that sentence is meant to
- invoke "This interface represents immutable raw data." --> Any
- invocation of this method with a <code><a href=#blob>Blob</a></code> argument that
- does not throw an exception must increase the <code title=dom-WebSocket-bufferedAmount><a href=#dom-websocket-bufferedamount>bufferedAmount</a></code>
- attribute by the size of the <code><a href=#blob>Blob</a></code> object's raw data,
- in bytes. <!-- that sentence is meant to invoke the same as
+ <p>If <i><a href=#the-websocket-connection-is-established>the WebSocket connection is established</a></i>, and <i title="the WebSocket closing
+ handshake is started"><a href=#the-websocket-closing-handshake-is-started>the WebSocket closing handshake has not yet started</a></i>, then the user
+ agent must <i>send a WebSocket Message</i> comprised of <var title="">data</var> using a binary
+ frame opcode; if the data cannot be sent, e.g. because it would need to be buffered but the
+ buffer is full, the user agent must <i><a href=#close-the-websocket-connection>close the WebSocket connection</a></i> <a href=#concept-websocket-close-fail title=concept-websocket-close-fail>with prejudice</a>. The data to be sent is the raw data
+ represented by the <code><a href=#blob>Blob</a></code> object. <!-- that sentence is meant to invoke "This
+ interface represents immutable raw data." --> Any invocation of this method with a
+ <code><a href=#blob>Blob</a></code> argument that does not throw an exception must increase the <code title=dom-WebSocket-bufferedAmount><a href=#dom-websocket-bufferedamount>bufferedAmount</a></code> attribute by the size of the
+ <code><a href=#blob>Blob</a></code> object's raw data, in bytes. <!-- that sentence is meant to invoke the same as
Blob.size --> <a href=#refsWSP>[WSP]</a> <a href=#refsFILEAPI>[FILEAPI]</a></p>
</dd>
@@ -82739,24 +82428,19 @@
<dd>
- <p>If <i><a href=#the-websocket-connection-is-established>the WebSocket connection is established</a></i>, and <i title="the WebSocket closing handshake is started"><a href=#the-websocket-closing-handshake-is-started>the WebSocket
- closing handshake has not yet started</a></i>, then the user agent
- must <i>send a WebSocket Message</i> comprised of <var title="">data</var> using a binary frame opcode; if the data
- cannot be sent, e.g. because it would need to be buffered but the
- buffer is full, the user agent must <i><a href=#close-the-websocket-connection>close the WebSocket
- connection</a></i> <a href=#concept-websocket-close-fail title=concept-websocket-close-fail>with
- prejudice</a>. The data to be sent is the data stored in the
- buffer described by the <code><a href=#arraybuffer>ArrayBuffer</a></code> object. <!-- that
- sentence is meant to invoke "The ArrayBuffer type describes a
- buffer used to store data for the array buffer views." at the top
- of the Typed Array spec, and "Optional byteOffset and length can
- be used to limit the section of the buffer referenced" in the
- definition of the TypedArray constructor --> Any invocation of
- this method with an <code><a href=#arraybuffer>ArrayBuffer</a></code> argument that does
- not throw an exception must increase the <code title=dom-WebSocket-bufferedAmount><a href=#dom-websocket-bufferedamount>bufferedAmount</a></code>
- attribute by the length of the <code><a href=#arraybuffer>ArrayBuffer</a></code> in bytes.
- <!-- that sentence is meant to invoke the same as
- ArrayBuffer.byteLength --> <a href=#refsWSP>[WSP]</a> <a href=#refsTYPEDARRAY>[TYPEDARRAY]</a></p>
+ <p>If <i><a href=#the-websocket-connection-is-established>the WebSocket connection is established</a></i>, and <i title="the WebSocket closing
+ handshake is started"><a href=#the-websocket-closing-handshake-is-started>the WebSocket closing handshake has not yet started</a></i>, then the user
+ agent must <i>send a WebSocket Message</i> comprised of <var title="">data</var> using a binary
+ frame opcode; if the data cannot be sent, e.g. because it would need to be buffered but the
+ buffer is full, the user agent must <i><a href=#close-the-websocket-connection>close the WebSocket connection</a></i> <a href=#concept-websocket-close-fail title=concept-websocket-close-fail>with prejudice</a>. The data to be sent is the data
+ stored in the buffer described by the <code><a href=#arraybuffer>ArrayBuffer</a></code> object. <!-- that sentence is
+ meant to invoke "The ArrayBuffer type describes a buffer used to store data for the array buffer
+ views." at the top of the Typed Array spec, and "Optional byteOffset and length can be used to
+ limit the section of the buffer referenced" in the definition of the TypedArray constructor -->
+ Any invocation of this method with an <code><a href=#arraybuffer>ArrayBuffer</a></code> argument that does not throw an
+ exception must increase the <code title=dom-WebSocket-bufferedAmount><a href=#dom-websocket-bufferedamount>bufferedAmount</a></code>
+ attribute by the length of the <code><a href=#arraybuffer>ArrayBuffer</a></code> in bytes. <!-- that sentence is meant to
+ invoke the same as ArrayBuffer.byteLength --> <a href=#refsWSP>[WSP]</a> <a href=#refsTYPEDARRAY>[TYPEDARRAY]</a></p>
</dd>
@@ -82765,32 +82449,26 @@
<dd>
- <p>If <i><a href=#the-websocket-connection-is-established>the WebSocket connection is established</a></i>, and <i title="the WebSocket closing handshake is started"><a href=#the-websocket-closing-handshake-is-started>the WebSocket
- closing handshake has not yet started</a></i>, then the user agent
- must <i>send a WebSocket Message</i> comprised of <var title="">data</var> using a binary frame opcode; if the data
- cannot be sent, e.g. because it would need to be buffered but the
- buffer is full, the user agent must <i><a href=#close-the-websocket-connection>close the WebSocket
- connection</a></i> <a href=#concept-websocket-close-fail title=concept-websocket-close-fail>with
- prejudice</a>. The data to be sent is the data stored in the
- section of the buffer described by the <code><a href=#arraybuffer>ArrayBuffer</a></code>
- object that the <code><a href=#arraybufferview>ArrayBufferView</a></code> object references.
- <!-- that sentence is meant to invoke "The ArrayBuffer type
- describes a buffer used to store data for the array buffer views."
- at the top of the Typed Array spec, and "Optional byteOffset and
- length can be used to limit the section of the buffer referenced"
- in the definition of the TypedArray constructor --> Any invocation
- of this method with an <code><a href=#arraybufferview>ArrayBufferView</a></code> argument that
- does not throw an exception must increase the <code title=dom-WebSocket-bufferedAmount><a href=#dom-websocket-bufferedamount>bufferedAmount</a></code>
- attribute by the length of the <code><a href=#arraybufferview>ArrayBufferView</a></code> in
- bytes. <!-- that sentence is meant to invoke the same as
- ArrayBufferView.byteLength --> <a href=#refsWSP>[WSP]</a> <a href=#refsTYPEDARRAY>[TYPEDARRAY]</a></p>
+ <p>If <i><a href=#the-websocket-connection-is-established>the WebSocket connection is established</a></i>, and <i title="the WebSocket closing
+ handshake is started"><a href=#the-websocket-closing-handshake-is-started>the WebSocket closing handshake has not yet started</a></i>, then the user
+ agent must <i>send a WebSocket Message</i> comprised of <var title="">data</var> using a binary
+ frame opcode; if the data cannot be sent, e.g. because it would need to be buffered but the
+ buffer is full, the user agent must <i><a href=#close-the-websocket-connection>close the WebSocket connection</a></i> <a href=#concept-websocket-close-fail title=concept-websocket-close-fail>with prejudice</a>. The data to be sent is the data
+ stored in the section of the buffer described by the <code><a href=#arraybuffer>ArrayBuffer</a></code> object that the
+ <code><a href=#arraybufferview>ArrayBufferView</a></code> object references. <!-- that sentence is meant to invoke "The
+ ArrayBuffer type describes a buffer used to store data for the array buffer views." at the top
+ of the Typed Array spec, and "Optional byteOffset and length can be used to limit the section of
+ the buffer referenced" in the definition of the TypedArray constructor --> Any invocation of
+ this method with an <code><a href=#arraybufferview>ArrayBufferView</a></code> argument that does not throw an exception must
+ increase the <code title=dom-WebSocket-bufferedAmount><a href=#dom-websocket-bufferedamount>bufferedAmount</a></code> attribute by the
+ length of the <code><a href=#arraybufferview>ArrayBufferView</a></code> in bytes. <!-- that sentence is meant to invoke the
+ same as ArrayBufferView.byteLength --> <a href=#refsWSP>[WSP]</a> <a href=#refsTYPEDARRAY>[TYPEDARRAY]</a></p>
</dd>
- </dl><hr><p>The following are the <a href=#event-handlers>event handlers</a> (and their
- corresponding <a href=#event-handler-event-type title="event handler event type">event handler
- event types</a>) that must be supported, as IDL attributes, by
- all objects implementing the <code><a href=#websocket>WebSocket</a></code> interface:</p>
+ </dl><hr><p>The following are the <a href=#event-handlers>event handlers</a> (and their corresponding <a href=#event-handler-event-type title="event
+ handler event type">event handler event types</a>) that must be supported, as IDL attributes,
+ by all objects implementing the <code><a href=#websocket>WebSocket</a></code> interface:</p>
<table><thead><tr><th><a href=#event-handlers title="event handlers">Event handler</a> <th><a href=#event-handler-event-type>Event handler event type</a>
<tbody><tr><td><dfn id=handler-websocket-onopen title=handler-WebSocket-onopen><code>onopen</code></dfn> <td> <code title=event-open>open</code>
@@ -82799,34 +82477,32 @@
<tr><td><dfn id=handler-websocket-onclose title=handler-WebSocket-onclose><code>onclose</code></dfn> <td> <code title=event-socket-close>close</code>
</table><h4 id=feedback-from-the-protocol><span class=secno>10.3.3 </span>Feedback from the protocol</h4>
- <p>When <i><a href=#the-websocket-connection-is-established>the WebSocket connection is established</a></i>, the user
- agent must <a href=#queue-a-task>queue a task</a> to run these steps:</p>
+ <p>When <i><a href=#the-websocket-connection-is-established>the WebSocket connection is established</a></i>, the user agent must <a href=#queue-a-task>queue a
+ task</a> to run these steps:</p>
- <ol><li><p>Change the <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code> attribute's
- value to <code title=dom-WebSocket-OPEN><a href=#dom-websocket-open>OPEN</a></code> (1).</li>
+ <ol><li><p>Change the <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code> attribute's value to
+ <code title=dom-WebSocket-OPEN><a href=#dom-websocket-open>OPEN</a></code> (1).</li>
- <li><p>Change the <code title=dom-WebSocket-extensions><a href=#dom-websocket-extensions>extensions</a></code> attribute's
- value to the <i><a href=#extensions-in-use>extensions in use</a></i>, if is not the null value. <a href=#refsWSP>[WSP]</a></li>
+ <li><p>Change the <code title=dom-WebSocket-extensions><a href=#dom-websocket-extensions>extensions</a></code> attribute's value to
+ the <i><a href=#extensions-in-use>extensions in use</a></i>, if is not the null value. <a href=#refsWSP>[WSP]</a></li>
- <li><p>Change the <code title=dom-WebSocket-protocol><a href=#dom-websocket-protocol>protocol</a></code> attribute's value to
- the <i><a href=#subprotocol-in-use>subprotocol in use</a></i>, if is not the null value. <a href=#refsWSP>[WSP]</a></li>
+ <li><p>Change the <code title=dom-WebSocket-protocol><a href=#dom-websocket-protocol>protocol</a></code> attribute's value to the
+ <i><a href=#subprotocol-in-use>subprotocol in use</a></i>, if is not the null value. <a href=#refsWSP>[WSP]</a></li>
- <li><p>Act as if the user agent had <a href=#receives-a-set-cookie-string title="receives a
- set-cookie-string">received a set-cookie-string</a> consisting
- of the <i><a href="#cookies-set-during-the-server's-opening-handshake">cookies set during the server's opening handshake</a></i>,
- for the URL <var title="">url</var> given to the <code title=dom-WebSocket><a href=#dom-websocket>WebSocket()</a></code> constructor. <a href=#refsCOOKIES>[COOKIES]</a> <a href=#refsRFC3629>[RFC3629]</a> <a href=#refsWSP>[WSP]</a></li>
+ <li><p>Act as if the user agent had <a href=#receives-a-set-cookie-string title="receives a set-cookie-string">received a
+ set-cookie-string</a> consisting of the <i><a href="#cookies-set-during-the-server's-opening-handshake">cookies set during the server's opening
+ handshake</a></i>, for the URL <var title="">url</var> given to the <code title=dom-WebSocket><a href=#dom-websocket>WebSocket()</a></code> constructor. <a href=#refsCOOKIES>[COOKIES]</a> <a href=#refsRFC3629>[RFC3629]</a> <a href=#refsWSP>[WSP]</a></li>
- <li><p><a href=#fire-a-simple-event>Fire a simple event</a> named <code title=event-open>open</code> at the <code><a href=#websocket>WebSocket</a></code>
- object.</p>
+ <li><p><a href=#fire-a-simple-event>Fire a simple event</a> named <code title=event-open>open</code> at the
+ <code><a href=#websocket>WebSocket</a></code> object.</p>
- </ol><hr><p>When <i><a href=#a-websocket-message-has-been-received>a WebSocket message has been received</a></i> with type <var title="">type</var> and data <var title="">data</var>, the user
- agent must <a href=#queue-a-task>queue a task</a> to follow these steps: <a href=#refsWSP>[WSP]</a></p>
+ </ol><hr><p>When <i><a href=#a-websocket-message-has-been-received>a WebSocket message has been received</a></i> with type <var title="">type</var> and data
+ <var title="">data</var>, the user agent must <a href=#queue-a-task>queue a task</a> to follow these steps: <a href=#refsWSP>[WSP]</a></p>
<ol><li>
- <p>If the <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code>
- attribute's value is not <code title=dom-WebSocket-OPEN><a href=#dom-websocket-open>OPEN</a></code> (1), then abort these
- steps.</p>
+ <p>If the <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code> attribute's value is not
+ <code title=dom-WebSocket-OPEN><a href=#dom-websocket-open>OPEN</a></code> (1), then abort these steps.</p>
</li>
@@ -82839,27 +82515,21 @@
</li>
- <li><p>Initialize <var title="">event</var>'s <code title=dom-MessageEvent-origin><a href=#dom-messageevent-origin>origin</a></code> attribute to the
- <a href=#unicode-serialization-of-an-origin title="Unicode serialization of an origin">Unicode
- serialization</a> of the <a href=#origin>origin</a> of the
- <a href=#url>URL</a> that was passed to the <code><a href=#websocket>WebSocket</a></code>
+ <li><p>Initialize <var title="">event</var>'s <code title=dom-MessageEvent-origin><a href=#dom-messageevent-origin>origin</a></code>
+ attribute to the <a href=#unicode-serialization-of-an-origin title="Unicode serialization of an origin">Unicode serialization</a> of
+ the <a href=#origin>origin</a> of the <a href=#url>URL</a> that was passed to the <code><a href=#websocket>WebSocket</a></code>
object's constructor.</li>
<li>
- <p>If <var title="">type</var> indicates that the data is Text,
- then initialize <var title="">event</var>'s <code title=dom-MessageEvent-data><a href=#dom-messageevent-data>data</a></code> attribute to <var title="">data</var>.
+ <p>If <var title="">type</var> indicates that the data is Text, then initialize <var title="">event</var>'s <code title=dom-MessageEvent-data><a href=#dom-messageevent-data>data</a></code> attribute to <var title="">data</var>.
- <p>If <var title="">type</var> indicates that the data is Binary,
- and <code title=dom-WebSocket-binaryType><a href=#dom-websocket-binarytype>binaryType</a></code> is
- set to "<code title="">blob</code>", then initialize <var title="">event</var>'s <code title=dom-MessageEvent-data><a href=#dom-messageevent-data>data</a></code> attribute to a new
- <code><a href=#blob>Blob</a></code> object that represents <var title="">data</var>
- as its raw data. <a href=#refsFILEAPI>[FILEAPI]</a></p>
+ <p>If <var title="">type</var> indicates that the data is Binary, and <code title=dom-WebSocket-binaryType><a href=#dom-websocket-binarytype>binaryType</a></code> is set to "<code title="">blob</code>", then
+ initialize <var title="">event</var>'s <code title=dom-MessageEvent-data><a href=#dom-messageevent-data>data</a></code> attribute
+ to a new <code><a href=#blob>Blob</a></code> object that represents <var title="">data</var> as its raw data. <a href=#refsFILEAPI>[FILEAPI]</a></p>
- <p>If <var title="">type</var> indicates that the data is Binary,
- and <code title=dom-WebSocket-binaryType><a href=#dom-websocket-binarytype>binaryType</a></code> is
- set to "<code title="">arraybuffer</code>", then initialize <var title="">event</var>'s <code title=dom-MessageEvent-data><a href=#dom-messageevent-data>data</a></code> attribute to a new
- read-only <code><a href=#arraybuffer>ArrayBuffer</a></code> object whose contents are <var title="">data</var>. <a href=#refsTYPEDARRAY>[TYPEDARRAY]</a></p>
+ <p>If <var title="">type</var> indicates that the data is Binary, and <code title=dom-WebSocket-binaryType><a href=#dom-websocket-binarytype>binaryType</a></code> is set to "<code title="">arraybuffer</code>", then initialize <var title="">event</var>'s <code title=dom-MessageEvent-data><a href=#dom-messageevent-data>data</a></code> attribute to a new read-only <code><a href=#arraybuffer>ArrayBuffer</a></code>
+ object whose contents are <var title="">data</var>. <a href=#refsTYPEDARRAY>[TYPEDARRAY]</a></p>
</li>
@@ -82870,21 +82540,17 @@
</li>
- </ol><p class=note>User agents are encouraged to check if they can
- perform the above steps efficiently before they run the task,
- picking tasks from other <a href=#task-queue title="task queue">task queues</a>
- while they prepare the buffers if not. For example, if the <code title=dom-WebSocket-binaryType><a href=#dom-websocket-binarytype>binaryType</a></code> attribute was set
- to "<code title="">blob</code>" when the data arrived, and the user
- agent spooled all the data to disk, but just before running the
- above <a href=#concept-task title=concept-task>task</a> for this particular
- message the script switched <code title=dom-WebSocket-binaryType><a href=#dom-websocket-binarytype>binaryType</a></code> to "<code title="">arraybuffer</code>", the user agent would want to page the
- data back to RAM before running this <a href=#concept-task title=concept-task>task</a> so as to avoid stalling the main
- thread while it created the <code><a href=#arraybuffer>ArrayBuffer</a></code> object.</p>
+ </ol><p class=note>User agents are encouraged to check if they can perform the above steps
+ efficiently before they run the task, picking tasks from other <a href=#task-queue title="task queue">task
+ queues</a> while they prepare the buffers if not. For example, if the <code title=dom-WebSocket-binaryType><a href=#dom-websocket-binarytype>binaryType</a></code> attribute was set to "<code title="">blob</code>" when the data arrived, and the user agent spooled all the data to disk, but
+ just before running the above <a href=#concept-task title=concept-task>task</a> for this particular message
+ the script switched <code title=dom-WebSocket-binaryType><a href=#dom-websocket-binarytype>binaryType</a></code> to "<code title="">arraybuffer</code>", the user agent would want to page the data back to RAM before
+ running this <a href=#concept-task title=concept-task>task</a> so as to avoid stalling the main thread while
+ it created the <code><a href=#arraybuffer>ArrayBuffer</a></code> object.</p>
<div class=example>
- <p>Here is an example of how to define a handler for the <code title=event-message><a href=#event-message>message</a></code> event in the case of text
- frames:</p>
+ <p>Here is an example of how to define a handler for the <code title=event-message><a href=#event-message>message</a></code> event in the case of text frames:</p>
<pre>mysocket.onmessage = function (event) {
if (event.data == 'on') {
@@ -82894,31 +82560,24 @@
}
};</pre>
- <p>The protocol here is a trivial one, with the server just sending
- "on" or "off" messages.</p>
+ <p>The protocol here is a trivial one, with the server just sending "on" or "off" messages.</p>
</div>
- <hr><p>When <i><a href=#the-websocket-closing-handshake-is-started>the WebSocket closing handshake is started</a></i>, the user
- agent must <a href=#queue-a-task>queue a task</a> to change the <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code> attribute's value
- to <code title=dom-WebSocket-CLOSING><a href=#dom-websocket-closing>CLOSING</a></code> (2). (If the
- <code title=dom-WebSocket-close><a href=#dom-websocket-close>close()</a></code> method was called,
- the <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code>
- attribute's value will already be set to <code title=dom-WebSocket-CLOSING><a href=#dom-websocket-closing>CLOSING</a></code> (2) when this task
- runs.) <a href=#refsWSP>[WSP]</a></p>
+ <hr><p>When <i><a href=#the-websocket-closing-handshake-is-started>the WebSocket closing handshake is started</a></i>, the user agent must <a href=#queue-a-task>queue a
+ task</a> to change the <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code> attribute's
+ value to <code title=dom-WebSocket-CLOSING><a href=#dom-websocket-closing>CLOSING</a></code> (2). (If the <code title=dom-WebSocket-close><a href=#dom-websocket-close>close()</a></code> method was called, the <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code> attribute's value will already be set to <code title=dom-WebSocket-CLOSING><a href=#dom-websocket-closing>CLOSING</a></code> (2) when this task runs.) <a href=#refsWSP>[WSP]</a></p>
- <hr><p id=closeWebSocket>When <i><a href=#the-websocket-connection-is-closed>the WebSocket connection is
- closed</a></i>, possibly <i title="">cleanly</i>, the user agent must
- <a href=#queue-a-task>queue a task</a> to run the following substeps:</p>
+ <hr><p id=closeWebSocket>When <i><a href=#the-websocket-connection-is-closed>the WebSocket connection is closed</a></i>, possibly <i title="">cleanly</i>, the user agent must <a href=#queue-a-task>queue a task</a> to run the following
+ substeps:</p>
- <ol><li><p>Change the <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code> attribute's
- value to <code title=dom-WebSocket-CLOSED><a href=#dom-websocket-closed>CLOSED</a></code>
- (3).</li>
+ <ol><li><p>Change the <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code> attribute's value to
+ <code title=dom-WebSocket-CLOSED><a href=#dom-websocket-closed>CLOSED</a></code> (3).</li>
- <li><p>If the user agent was required to <i><a href=#fail-the-websocket-connection>fail the WebSocket
- connection</a></i> or <i><a href=#the-websocket-connection-is-closed>the WebSocket connection is closed</a></i> <dfn id=concept-websocket-close-fail title=concept-websocket-close-fail>with prejudice</dfn>,
- <a href=#fire-a-simple-event>fire a simple event</a> named <code title="">error</code>
- at the <code><a href=#websocket>WebSocket</a></code> object. <a href=#refsWSP>[WSP]</a></li>
+ <li><p>If the user agent was required to <i><a href=#fail-the-websocket-connection>fail the WebSocket connection</a></i> or <i><a href=#the-websocket-connection-is-closed>the WebSocket
+ connection is closed</a></i> <dfn id=concept-websocket-close-fail title=concept-websocket-close-fail>with prejudice</dfn>,
+ <a href=#fire-a-simple-event>fire a simple event</a> named <code title="">error</code> at the <code><a href=#websocket>WebSocket</a></code>
+ object. <a href=#refsWSP>[WSP]</a></li>
<li><p>Create a <a href=#concept-events-trusted title=concept-events-trusted>trusted</a> event that uses the
<code><a href=#closeevent>CloseEvent</a></code> interface, with the event type <code title=event-socket-close>close</code>, which does not bubble, is not cancelable, has no default
@@ -82931,9 +82590,8 @@
</ol><div class=warning>
- <p>User agents must not convey any failure information to scripts
- in a way that would allow a script to distinguish the following
- situations:</p>
+ <p>User agents must not convey any failure information to scripts in a way that would allow a
+ script to distinguish the following situations:</p>
<ul><li>A server whose host name could not be resolved.
@@ -82941,37 +82599,32 @@
<li>A server that refused the connection on the specified port.
- <li>A server that failed to correctly perform a TLS handshake
- (e.g., the server certificate can't be verified).
+ <li>A server that failed to correctly perform a TLS handshake (e.g., the server certificate
+ can't be verified).
- <li>A server that did not complete the opening handshake (e.g.
- because it was not a WebSocket server).
+ <li>A server that did not complete the opening handshake (e.g. because it was not a WebSocket
+ server).
- <li>A WebSocket server that sent a correct opening handshake, but
- that specified options that caused the client to drop the
- connection (e.g. the server specified a subprotocol that the
+ <li>A WebSocket server that sent a correct opening handshake, but that specified options that
+ caused the client to drop the connection (e.g. the server specified a subprotocol that the
client did not offer).
- <li>A WebSocket server that abruptly closed the connection after
- successfully completing the opening handshake.
+ <li>A WebSocket server that abruptly closed the connection after successfully completing the
+ opening handshake.
- </ul><p>In all of these cases, the <i><a href=#the-websocket-connection-close-code>the WebSocket connection close
- code</a></i> would be 1006, as required by the WebSocket Protocol
- specification. <a href=#refsWSP>[WSP]</a></p>
+ </ul><p>In all of these cases, the <i><a href=#the-websocket-connection-close-code>the WebSocket connection close code</a></i> would be 1006, as
+ required by the WebSocket Protocol specification. <a href=#refsWSP>[WSP]</a></p>
- <p>Allowing a script to distinguish these cases would allow a
- script to probe the user's local network in preparation for an
- attack.</p>
+ <p>Allowing a script to distinguish these cases would allow a script to probe the user's local
+ network in preparation for an attack.</p>
- <p class=note>In particular, this means the code 1015 is not used
- by the user agent (unless the server erroneously uses it in its
- close frame, of course).</p>
+ <p class=note>In particular, this means the code 1015 is not used by the user agent (unless the
+ server erroneously uses it in its close frame, of course).</p>
</div>
- <hr><p>The <a href=#task-source>task source</a> for all <a href=#concept-task title=concept-task>tasks</a> <a href=#queue-a-task title="queue a
- task">queued</a> in this section is the <dfn id=websocket-task-source>WebSocket task
- source</dfn>.</p>
+ <hr><p>The <a href=#task-source>task source</a> for all <a href=#concept-task title=concept-task>tasks</a> <a href=#queue-a-task title="queue
+ a task">queued</a> in this section is the <dfn id=websocket-task-source>WebSocket task source</dfn>.</p>
<h4 id=ping-and-pong-frames><span class=secno>10.3.4 </span>Ping and Pong frames</h4>
@@ -83092,38 +82745,33 @@
<h4 id=garbage-collection-1><span class=secno>10.3.7 </span>Garbage collection</h4>
- <p>A <code><a href=#websocket>WebSocket</a></code> object whose <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code> attribute's value
- was set to <code title=dom-WebSocket-CONNECTING><a href=#dom-websocket-connecting>CONNECTING</a></code>
- (0) as of the last time the <a href=#event-loop>event loop</a> started
- executing a <a href=#concept-task title=concept-task>task</a> must not be
- garbage collected if there are any event listeners registered for
- <code title=event-open>open</code> events, <code title=event-message><a href=#event-message>message</a></code> events, <code title=event-error>error</code> events, or <code title=event-socket-close>close</code> events.</p>
+ <p>A <code><a href=#websocket>WebSocket</a></code> object whose <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code>
+ attribute's value was set to <code title=dom-WebSocket-CONNECTING><a href=#dom-websocket-connecting>CONNECTING</a></code> (0) as of
+ the last time the <a href=#event-loop>event loop</a> started executing a <a href=#concept-task title=concept-task>task</a> must not be garbage collected if there are any event listeners
+ registered for <code title=event-open>open</code> events, <code title=event-message><a href=#event-message>message</a></code> events, <code title=event-error>error</code> events, or
+ <code title=event-socket-close>close</code> events.</p>
- <p>A <code><a href=#websocket>WebSocket</a></code> object whose <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code> attribute's value
- was set to <code title=dom-WebSocket-OPEN><a href=#dom-websocket-open>OPEN</a></code> (1) as of
- the last time the <a href=#event-loop>event loop</a> started executing a <a href=#concept-task title=concept-task>task</a> must not be garbage collected if
- there are any event listeners registered for <code title=event-message><a href=#event-message>message</a></code> events, <code title=event-error>error</code>, or <code title=event-socket-close>close</code> events.</p>
+ <p>A <code><a href=#websocket>WebSocket</a></code> object whose <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code>
+ attribute's value was set to <code title=dom-WebSocket-OPEN><a href=#dom-websocket-open>OPEN</a></code> (1) as of the last time
+ the <a href=#event-loop>event loop</a> started executing a <a href=#concept-task title=concept-task>task</a> must not be
+ garbage collected if there are any event listeners registered for <code title=event-message><a href=#event-message>message</a></code> events, <code title=event-error>error</code>, or <code title=event-socket-close>close</code> events.</p>
- <p>A <code><a href=#websocket>WebSocket</a></code> object whose <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code> attribute's value
- was set to <code title=dom-WebSocket-CLOSING><a href=#dom-websocket-closing>CLOSING</a></code> (2) as
- of the last time the <a href=#event-loop>event loop</a> started executing a
- <a href=#concept-task title=concept-task>task</a> must not be garbage collected
- if there are any event listeners registered for <code title=event-error>error</code> or <code title=event-socket-close>close</code> events.</p>
+ <p>A <code><a href=#websocket>WebSocket</a></code> object whose <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code>
+ attribute's value was set to <code title=dom-WebSocket-CLOSING><a href=#dom-websocket-closing>CLOSING</a></code> (2) as of the last
+ time the <a href=#event-loop>event loop</a> started executing a <a href=#concept-task title=concept-task>task</a> must
+ not be garbage collected if there are any event listeners registered for <code title=event-error>error</code> or <code title=event-socket-close>close</code> events.</p>
- <p>A <code><a href=#websocket>WebSocket</a></code> object with <i title="the WebSocket
- connection is established"><a href=#the-websocket-connection-is-established>an established connection</a></i> that has
- data queued to be transmitted to the network must not be garbage
- collected. <a href=#refsWSP>[WSP]</a></p>
+ <p>A <code><a href=#websocket>WebSocket</a></code> object with <i title="the WebSocket connection is established"><a href=#the-websocket-connection-is-established>an
+ established connection</a></i> that has data queued to be transmitted to the network must not be
+ garbage collected. <a href=#refsWSP>[WSP]</a></p>
- <p>If a <code><a href=#websocket>WebSocket</a></code> object is garbage collected while its
- connection is still open, the user agent must <i><a href=#start-the-websocket-closing-handshake>start the
- WebSocket closing handshake</a></i>, with no status code<!--CLOSE
- CODE--> for the Close message. <a href=#refsWSP>[WSP]</a></p>
+ <p>If a <code><a href=#websocket>WebSocket</a></code> object is garbage collected while its connection is still open, the
+ user agent must <i><a href=#start-the-websocket-closing-handshake>start the WebSocket closing handshake</a></i>, with no status code<!--CLOSE CODE-->
+ for the Close message. <a href=#refsWSP>[WSP]</a></p>
- <hr><p>If a user agent is to <dfn id=make-disappear>make disappear</dfn> a
- <code><a href=#websocket>WebSocket</a></code> object (this happens when a
- <code><a href=#document>Document</a></code> object goes away), the user agent must follow
- the first appropriate set of steps from the following list:</p>
+ <hr><p>If a user agent is to <dfn id=make-disappear>make disappear</dfn> a <code><a href=#websocket>WebSocket</a></code> object (this happens
+ when a <code><a href=#document>Document</a></code> object goes away), the user agent must follow the first appropriate
+ set of steps from the following list:</p>
<dl class=switch><dt>If the WebSocket connection is not yet <i title="the WebSocket
connection is established"><a href=#the-websocket-connection-is-established>established</a></i> <a href=#refsWSP>[WSP]</a></dt>
@@ -83800,16 +83448,13 @@
</dl><div class=impl>
- <p>Each <code><a href=#messageport>MessagePort</a></code> object can be entangled with
- another (a symmetric relationship). Each <code><a href=#messageport>MessagePort</a></code>
- object also has a <a href=#task-source>task source</a> called the <dfn id=port-message-queue>port
- message queue</dfn>, initially empty. A <a href=#port-message-queue>port message
- queue</a> can be enabled or disabled, and is initially
- disabled. Once enabled, a port can never be disabled again (though
- messages in the queue can get moved to another queue or removed
- altogether, which has much the same effect).
- A <code><a href=#messageport>MessagePort</a></code> also has a <dfn id=has-been-shipped>has been shipped</dfn> flag. It must initially be
- false.</p>
+ <p>Each <code><a href=#messageport>MessagePort</a></code> object can be entangled with another (a symmetric relationship).
+ Each <code><a href=#messageport>MessagePort</a></code> object also has a <a href=#task-source>task source</a> called the <dfn id=port-message-queue>port
+ message queue</dfn>, initially empty. A <a href=#port-message-queue>port message queue</a> can be enabled or
+ disabled, and is initially disabled. Once enabled, a port can never be disabled again (though
+ messages in the queue can get moved to another queue or removed altogether, which has much the
+ same effect). A <code><a href=#messageport>MessagePort</a></code> also has a <dfn id=has-been-shipped>has been shipped</dfn> flag. It must
+ initially be false.</p>
<p>Each <a href=#event-loop>event loop</a> has a <a href=#task-source>task source</a> called the <dfn id=unshipped-port-message-queue>unshipped port
message queue</dfn>. This is a virtual <a href=#task-source>task source</a>: it must act as if it contained
@@ -83828,15 +83473,12 @@
is true, its <a href=#port-message-queue>port message queue</a> acts as a first-class <a href=#task-source>task source</a>,
unaffected to any <a href=#unshipped-port-message-queue>unshipped port message queue</a>.</p>
- <p>When the user agent is to <dfn id=create-a-new-messageport-object>create a new
- <code>MessagePort</code> object</dfn> owned by a <a href="#script's-global-object">script's
- global object</a> object <var title="">owner</var>, it must
- instantiate a new <code><a href=#messageport>MessagePort</a></code> object, and let its owner
- be <var title="">owner</var>.</p>
+ <p>When the user agent is to <dfn id=create-a-new-messageport-object>create a new <code>MessagePort</code> object</dfn> owned by a
+ <a href="#script's-global-object">script's global object</a> object <var title="">owner</var>, it must instantiate a new
+ <code><a href=#messageport>MessagePort</a></code> object, and let its owner be <var title="">owner</var>.</p>
- <p>When the user agent is to <dfn id=entangle>entangle</dfn> two
- <code><a href=#messageport>MessagePort</a></code> objects, it must run the following
- steps:</p>
+ <p>When the user agent is to <dfn id=entangle>entangle</dfn> two <code><a href=#messageport>MessagePort</a></code> objects, it must run
+ the following steps:</p>
<ol><li>
@@ -84090,29 +83732,24 @@
title="">target port</var>.</p></li>
</ol>
---><hr><p>The <dfn id=dom-messageport-start title=dom-MessagePort-start><code>start()</code></dfn>
- method must enable its port's <a href=#port-message-queue>port message queue</a>, if it
- is not already enabled.</p>
+--><hr><p>The <dfn id=dom-messageport-start title=dom-MessagePort-start><code>start()</code></dfn> method must enable its port's
+ <a href=#port-message-queue>port message queue</a>, if it is not already enabled.</p>
- <p>When a port's <a href=#port-message-queue>port message queue</a> is enabled, the
- <a href=#event-loop>event loop</a> must use it as one of its <a href=#task-source title="task
- source">task sources</a>.</p>
+ <p>When a port's <a href=#port-message-queue>port message queue</a> is enabled, the <a href=#event-loop>event loop</a> must use
+ it as one of its <a href=#task-source title="task source">task sources</a>.</p>
- <p class=note>If the <code><a href=#document>Document</a></code> of the port's event
- listeners' <a href="#script's-global-object" title="script's global object">global object</a>
- is not <a href=#fully-active>fully active</a>, then the messages are lost.</p>
- <!-- because of the jump-to-entry-point algorithm first step -->
+ <p class=note>If the <code><a href=#document>Document</a></code> of the port's event listeners' <a href="#script's-global-object" title="script's
+ global object">global object</a> is not <a href=#fully-active>fully active</a>, then the messages are
+ lost.</p> <!-- because of the jump-to-entry-point algorithm first step -->
- <hr><p>The <dfn id=dom-messageport-close title=dom-MessagePort-close><code>close()</code></dfn>
- method, when called on a port <var title="">local port</var> that is
- entangled with another port, must cause the user agents to
- disentangle the two ports. If the method is called on a port that is
- not entangled, then the method must do nothing.</p>
+ <hr><p>The <dfn id=dom-messageport-close title=dom-MessagePort-close><code>close()</code></dfn> method, when called on a port
+ <var title="">local port</var> that is entangled with another port, must cause the user agents to
+ disentangle the two ports. If the method is called on a port that is not entangled, then the
+ method must do nothing.</p>
- <hr><p>The following are the <a href=#event-handlers>event handlers</a> (and their
- corresponding <a href=#event-handler-event-type title="event handler event type">event handler
- event types</a>) that must be supported, as IDL attributes, by
- all objects implementing the <code><a href=#messageport>MessagePort</a></code> interface:</p>
+ <hr><p>The following are the <a href=#event-handlers>event handlers</a> (and their corresponding <a href=#event-handler-event-type title="event
+ handler event type">event handler event types</a>) that must be supported, as IDL attributes,
+ by all objects implementing the <code><a href=#messageport>MessagePort</a></code> interface:</p>
<table><thead><tr><th><a href=#event-handlers title="event handlers">Event handler</a> <th><a href=#event-handler-event-type>Event handler event type</a>
<tbody><tr><td><dfn id=handler-messageport-onmessage title=handler-MessagePort-onmessage><code>onmessage</code></dfn> <td> <code title=event-message><a href=#event-message>message</a></code>
@@ -84655,27 +84292,20 @@
<p>The <a href=#task-source>task source</a> for these tasks is the <a href=#dom-manipulation-task-source>DOM manipulation task
source</a>.</p>
- <p>If the event is being fired due to an invocation of the <code title=dom-Storage-setItem><a href=#dom-storage-setitem>setItem()</a></code> or <code title=dom-Storage-removeItem><a href=#dom-storage-removeitem>removeItem()</a></code> methods, the
- event must have its <code title=dom-StorageEvent-key><a href=#dom-storageevent-key>key</a></code>
- attribute initialized to the name of the key in question, its <code title=dom-StorageEvent-oldValue><a href=#dom-storageevent-oldvalue>oldValue</a></code> attribute initialized to
- the old value of the key in question, or null if the key is newly
- added, and its <code title=dom-StorageEvent-newValue><a href=#dom-storageevent-newvalue>newValue</a></code> attribute initialized to
- the new value of the key in question, or null if the key was
- removed.</p>
+ <p>If the event is being fired due to an invocation of the <code title=dom-Storage-setItem><a href=#dom-storage-setitem>setItem()</a></code> or <code title=dom-Storage-removeItem><a href=#dom-storage-removeitem>removeItem()</a></code> methods, the event must have its <code title=dom-StorageEvent-key><a href=#dom-storageevent-key>key</a></code> attribute initialized to the name of the key in question,
+ its <code title=dom-StorageEvent-oldValue><a href=#dom-storageevent-oldvalue>oldValue</a></code> attribute initialized to the old value
+ of the key in question, or null if the key is newly added, and its <code title=dom-StorageEvent-newValue><a href=#dom-storageevent-newvalue>newValue</a></code> attribute initialized to the new value of the
+ key in question, or null if the key was removed.</p>
- <p>Otherwise, if the event is being fired due to an invocation of
- the <code title=dom-Storage-clear><a href=#dom-storage-clear>clear()</a></code> method, the event
- must have its <code title=dom-StorageEvent-key><a href=#dom-storageevent-key>key</a></code>, <code title=dom-StorageEvent-oldValue><a href=#dom-storageevent-oldvalue>oldValue</a></code>, and <code title=dom-StorageEvent-newValue><a href=#dom-storageevent-newvalue>newValue</a></code> attributes
- initialized to null.</p>
+ <p>Otherwise, if the event is being fired due to an invocation of the <code title=dom-Storage-clear><a href=#dom-storage-clear>clear()</a></code> method, the event must have its <code title=dom-StorageEvent-key><a href=#dom-storageevent-key>key</a></code>, <code title=dom-StorageEvent-oldValue><a href=#dom-storageevent-oldvalue>oldValue</a></code>,
+ and <code title=dom-StorageEvent-newValue><a href=#dom-storageevent-newvalue>newValue</a></code> attributes initialized to null.</p>
- <p>In addition, the event must have its <code title=dom-StorageEvent-url><a href=#dom-storageevent-url>url</a></code> attribute initialized to
- <a href="#the-document's-address" title="the document's address">the address of the
- document</a> whose <code><a href=#storage-0>Storage</a></code> object was affected; and
- its <code title=dom-StorageEvent-storageArea><a href=#dom-storageevent-storagearea>storageArea</a></code>
- attribute initialized to the <code><a href=#storage-0>Storage</a></code> object from the
- <code><a href=#window>Window</a></code> object of the target <code><a href=#document>Document</a></code> that
- represents the same kind of <code><a href=#storage-0>Storage</a></code> area as was
- affected (i.e. session or local).</p>
+ <p>In addition, the event must have its <code title=dom-StorageEvent-url><a href=#dom-storageevent-url>url</a></code> attribute
+ initialized to <a href="#the-document's-address" title="the document's address">the address of the document</a> whose
+ <code><a href=#storage-0>Storage</a></code> object was affected; and its <code title=dom-StorageEvent-storageArea><a href=#dom-storageevent-storagearea>storageArea</a></code> attribute initialized to the
+ <code><a href=#storage-0>Storage</a></code> object from the <code><a href=#window>Window</a></code> object of the target
+ <code><a href=#document>Document</a></code> that represents the same kind of <code><a href=#storage-0>Storage</a></code> area as was affected
+ (i.e. session or local).</p>
<h5 id=event-definition-0><span class=secno>11.2.4.1 </span>Event definition</h5>
@@ -91636,48 +91266,39 @@
<p>Run these steps:</p>
- <ol><li><p>Let <var title="">the script</var> be the <a href=#pending-parsing-blocking-script>pending
- parsing-blocking script</a>. There is no longer a <a href=#pending-parsing-blocking-script>pending
- parsing-blocking script</a>.</li>
+ <ol><li><p>Let <var title="">the script</var> be the <a href=#pending-parsing-blocking-script>pending parsing-blocking
+ script</a>. There is no longer a <a href=#pending-parsing-blocking-script>pending parsing-blocking script</a>.</li>
- <li><p>Block the <a href=#tokenization title=tokenization>tokenizer</a>
- for this instance of the <a href=#html-parser>HTML parser</a>, such that
- the <a href=#event-loop>event loop</a> will not run <a href=#concept-task title=concept-task>tasks</a> that invoke the <a href=#tokenization title=tokenization>tokenizer</a>.</li>
+ <li><p>Block the <a href=#tokenization title=tokenization>tokenizer</a> for this instance of the
+ <a href=#html-parser>HTML parser</a>, such that the <a href=#event-loop>event loop</a> will not run <a href=#concept-task title=concept-task>tasks</a> that invoke the <a href=#tokenization title=tokenization>tokenizer</a>.</li>
- <li><p>If the parser's <code><a href=#document>Document</a></code> <a href=#has-a-style-sheet-that-is-blocking-scripts>has a style
- sheet that is blocking scripts</a> or <var title="">the
- script</var>'s <a href=#ready-to-be-parser-executed>"ready to be parser-executed"</a> flag
- is not set: <a href=#spin-the-event-loop>spin the event loop</a> until the parser's
- <code><a href=#document>Document</a></code> <a href=#has-no-style-sheet-that-is-blocking-scripts>has no style sheet that is blocking
- scripts</a> and <var title="">the script</var>'s
- <a href=#ready-to-be-parser-executed>"ready to be parser-executed"</a> flag is
- set.</li>
+ <li><p>If the parser's <code><a href=#document>Document</a></code> <a href=#has-a-style-sheet-that-is-blocking-scripts>has a style sheet that is blocking
+ scripts</a> or <var title="">the script</var>'s <a href=#ready-to-be-parser-executed>"ready to be parser-executed"</a>
+ flag is not set: <a href=#spin-the-event-loop>spin the event loop</a> until the parser's <code><a href=#document>Document</a></code>
+ <a href=#has-no-style-sheet-that-is-blocking-scripts>has no style sheet that is blocking scripts</a> and <var title="">the script</var>'s
+ <a href=#ready-to-be-parser-executed>"ready to be parser-executed"</a> flag is set.</li>
- <li><p>Unblock the <a href=#tokenization title=tokenization>tokenizer</a>
- for this instance of the <a href=#html-parser>HTML parser</a>, such that
- <a href=#concept-task title=concept-task>tasks</a> that invoke the <a href=#tokenization title=tokenization>tokenizer</a> can again be
- run.</li>
+ <li><p>Unblock the <a href=#tokenization title=tokenization>tokenizer</a> for this instance of the
+ <a href=#html-parser>HTML parser</a>, such that <a href=#concept-task title=concept-task>tasks</a> that invoke the
+ <a href=#tokenization title=tokenization>tokenizer</a> can again be run.</li>
- <li><p>Let the <a href=#insertion-point>insertion point</a> be just before the
- <a href=#next-input-character>next input character</a>.</li>
+ <li><p>Let the <a href=#insertion-point>insertion point</a> be just before the <a href=#next-input-character>next input
+ character</a>.</li>
- <li><p>Increment the parser's <a href=#script-nesting-level>script nesting level</a>
- by one (it should be zero before this step, so this sets it to
- one).</li>
+ <li><p>Increment the parser's <a href=#script-nesting-level>script nesting level</a> by one (it should be zero
+ before this step, so this sets it to one).</li>
- <li><p><a href=#execute-the-script-block title="execute the script block">Execute</a>
- <var title="">the script</var>.</li>
+ <li><p><a href=#execute-the-script-block title="execute the script block">Execute</a> <var title="">the
+ script</var>.</li>
- <li><p>Decrement the parser's <a href=#script-nesting-level>script nesting level</a>
- by one. If the parser's <a href=#script-nesting-level>script nesting level</a> is
- zero (which it always should be at this point), then set the
- <a href=#parser-pause-flag>parser pause flag</a> to false.</p>
+ <li><p>Decrement the parser's <a href=#script-nesting-level>script nesting level</a> by one. If the parser's
+ <a href=#script-nesting-level>script nesting level</a> is zero (which it always should be at this point), then set
+ the <a href=#parser-pause-flag>parser pause flag</a> to false.</p>
- <li><p>Let the <a href=#insertion-point>insertion point</a> be undefined
- again.</li>
+ <li><p>Let the <a href=#insertion-point>insertion point</a> be undefined again.</li>
- <li><p>If there is once again a <a href=#pending-parsing-blocking-script>pending parsing-blocking
- script</a>, then repeat these steps from step 1.</li>
+ <li><p>If there is once again a <a href=#pending-parsing-blocking-script>pending parsing-blocking script</a>, then repeat
+ these steps from step 1.</li>
</ol></dd>
@@ -93065,56 +92686,44 @@
<p>Once the user agent <dfn id=stop-parsing title="stop parsing">stops parsing</dfn>
the document, the user agent must run the following steps:</p>
- <ol><!-- this happens as part of one of the tasks that runs the parser --><li><p>Set the <a href=#current-document-readiness>current document readiness</a> to "<code title="">interactive</code>" <!-- this also synchronously fires an
- event --> and the <a href=#insertion-point>insertion point</a> to
+ <ol><!-- this happens as part of one of the tasks that runs the parser --><li><p>Set the <a href=#current-document-readiness>current document readiness</a> to "<code title="">interactive</code>"
+ <!-- this also synchronously fires an event --> and the <a href=#insertion-point>insertion point</a> to
undefined.</li>
- <li><p>Pop <em>all</em> the nodes off the <a href=#stack-of-open-elements>stack of open
- elements</a>.</li>
+ <li><p>Pop <em>all</em> the nodes off the <a href=#stack-of-open-elements>stack of open elements</a>.</li>
- <li><p>If the <a href=#list-of-scripts-that-will-execute-when-the-document-has-finished-parsing>list of scripts that will execute when the
- document has finished parsing</a> is not empty, run these
- substeps:</p>
+ <li><p>If the <a href=#list-of-scripts-that-will-execute-when-the-document-has-finished-parsing>list of scripts that will execute when the document has finished
+ parsing</a> is not empty, run these substeps:</p>
- <ol><li><p><a href=#spin-the-event-loop>Spin the event loop</a> until the first
- <code><a href=#the-script-element>script</a></code> in the <a href=#list-of-scripts-that-will-execute-when-the-document-has-finished-parsing>list of scripts that will
- execute when the document has finished parsing</a> has its
- <a href=#ready-to-be-parser-executed>"ready to be parser-executed"</a> flag set <em>and</em>
- the parser's <code><a href=#document>Document</a></code> <a href=#has-no-style-sheet-that-is-blocking-scripts>has no style sheet that
- is blocking scripts</a>.</li>
+ <ol><li><p><a href=#spin-the-event-loop>Spin the event loop</a> until the first <code><a href=#the-script-element>script</a></code> in the <a href=#list-of-scripts-that-will-execute-when-the-document-has-finished-parsing>list
+ of scripts that will execute when the document has finished parsing</a> has its <a href=#ready-to-be-parser-executed>"ready
+ to be parser-executed"</a> flag set <em>and</em> the parser's <code><a href=#document>Document</a></code>
+ <a href=#has-no-style-sheet-that-is-blocking-scripts>has no style sheet that is blocking scripts</a>.</li>
- <li><p><a href=#execute-the-script-block title="execute the script block">Execute</a> the
- first <code><a href=#the-script-element>script</a></code> in the <a href=#list-of-scripts-that-will-execute-when-the-document-has-finished-parsing>list of scripts that will
- execute when the document has finished parsing</a>.</li>
+ <li><p><a href=#execute-the-script-block title="execute the script block">Execute</a> the first <code><a href=#the-script-element>script</a></code> in
+ the <a href=#list-of-scripts-that-will-execute-when-the-document-has-finished-parsing>list of scripts that will execute when the document has finished
+ parsing</a>.</li>
- <li><p>Remove the first <code><a href=#the-script-element>script</a></code> element from the
- <a href=#list-of-scripts-that-will-execute-when-the-document-has-finished-parsing>list of scripts that will execute when the document has
- finished parsing</a> (i.e. shift out the first entry in the
+ <li><p>Remove the first <code><a href=#the-script-element>script</a></code> element from the <a href=#list-of-scripts-that-will-execute-when-the-document-has-finished-parsing>list of scripts that will
+ execute when the document has finished parsing</a> (i.e. shift out the first entry in the
list).</li>
- <li><p>If the <a href=#list-of-scripts-that-will-execute-when-the-document-has-finished-parsing>list of scripts that will execute when the
- document has finished parsing</a> is still not empty, repeat
- these substeps again from substep 1.</p>
+ <li><p>If the <a href=#list-of-scripts-that-will-execute-when-the-document-has-finished-parsing>list of scripts that will execute when the document has finished
+ parsing</a> is still not empty, repeat these substeps again from substep 1.</p>
</ol></li>
- <li><p><a href=#queue-a-task>Queue a task</a> to <a href=#fire-a-simple-event>fire a simple
- event</a> that bubbles named <code title=event-DOMContentLoaded>DOMContentLoaded</code> at the
- <code><a href=#document>Document</a></code>.</li>
+ <li><p><a href=#queue-a-task>Queue a task</a> to <a href=#fire-a-simple-event>fire a simple event</a> that bubbles named <code title=event-DOMContentLoaded>DOMContentLoaded</code> at the <code><a href=#document>Document</a></code>.</li>
- <li><p><a href=#spin-the-event-loop>Spin the event loop</a> until the <a href=#set-of-scripts-that-will-execute-as-soon-as-possible>set of
- scripts that will execute as soon as possible</a> and the
- <a href=#list-of-scripts-that-will-execute-in-order-as-soon-as-possible>list of scripts that will execute in order as soon as
- possible</a> are empty.</li> <!-- this step is not redundant
- with the next one, since <script> nodes delay the load event of the
- document they are in, but they might change document between being
- added to one document's set/list and executing those scripts, so
- they might be delaying another document but still be in this
- document's set/list. -->
+ <li><p><a href=#spin-the-event-loop>Spin the event loop</a> until the <a href=#set-of-scripts-that-will-execute-as-soon-as-possible>set of scripts that will execute as soon
+ as possible</a> and the <a href=#list-of-scripts-that-will-execute-in-order-as-soon-as-possible>list of scripts that will execute in order as soon as
+ possible</a> are empty.</li> <!-- this step is not redundant with the next one, since
+ <script> nodes delay the load event of the document they are in, but they might change document
+ between being added to one document's set/list and executing those scripts, so they might be
+ delaying another document but still be in this document's set/list. -->
- <li><p><a href=#spin-the-event-loop>Spin the event loop</a> until there is nothing that
- <dfn id=delay-the-load-event title="delay the load event">delays the load event</dfn> in
- the <code><a href=#document>Document</a></code>.</li>
+ <li><p><a href=#spin-the-event-loop>Spin the event loop</a> until there is nothing that <dfn id=delay-the-load-event title="delay the load
+ event">delays the load event</dfn> in the <code><a href=#document>Document</a></code>.</li>
<li>
@@ -94118,17 +93727,14 @@
<li><code title="">-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN</code></li>
<li><code title="">-//W3C//DTD MathML 2.0//EN</code></li>
<li><code title="">-//WAPFORUM//DTD XHTML Mobile 1.0//EN</code></li>
- </ul><p>Furthermore, user agents should attempt to retrieve the above
- external entity's content when one of the above public identifiers
- is used, and should not attempt to retrieve any other external
+ </ul><p>Furthermore, user agents should attempt to retrieve the above external entity's content when
+ one of the above public identifiers is used, and should not attempt to retrieve any other external
entity's content.</p>
- <p class=note>This is not strictly a <a href=#willful-violation title="willful
- violation">violation</a> of the XML specification, but it does
- contradict the spirit of the XML specification's requirements. This
- is motivated by a desire for user agents to all handle entities in
- an interoperable fashion without requiring any network access for
- handling external subsets. <a href=#refsXML>[XML]</a></p>
+ <p class=note>This is not strictly a <a href=#willful-violation title="willful violation">violation</a> of the XML
+ specification, but it does contradict the spirit of the XML specification's requirements. This is
+ motivated by a desire for user agents to all handle entities in an interoperable fashion without
+ requiring any network access for handling external subsets. <a href=#refsXML>[XML]</a></p>
<p id=scriptTagXML>When an <a href=#xml-parser>XML parser</a> creates a <code><a href=#the-script-element>script</a></code> element, it
must be marked as being <a href=#parser-inserted>"parser-inserted"</a> and its <a href=#force-async>"force-async"</a> flag
@@ -94139,45 +93745,36 @@
<code><a href=#the-script-element>script</a></code> element. If this causes there to be a <a href=#pending-parsing-blocking-script>pending parsing-blocking
script</a>, then the user agent must run the following steps:</p>
- <ol><li><p>Block this instance of the <a href=#xml-parser>XML parser</a>, such
- that the <a href=#event-loop>event loop</a> will not run <a href=#concept-task title=concept-task>tasks</a> that invoke it.</li>
+ <ol><li><p>Block this instance of the <a href=#xml-parser>XML parser</a>, such that the <a href=#event-loop>event loop</a>
+ will not run <a href=#concept-task title=concept-task>tasks</a> that invoke it.</li>
- <li><p><a href=#spin-the-event-loop>Spin the event loop</a> until the parser's
- <code><a href=#document>Document</a></code> <a href=#has-no-style-sheet-that-is-blocking-scripts>has no style sheet that is blocking
- scripts</a> and the <a href=#pending-parsing-blocking-script>pending parsing-blocking
- script</a>'s <a href=#ready-to-be-parser-executed>"ready to be parser-executed"</a> flag is
- set.</li>
+ <li><p><a href=#spin-the-event-loop>Spin the event loop</a> until the parser's <code><a href=#document>Document</a></code> <a href=#has-no-style-sheet-that-is-blocking-scripts>has no
+ style sheet that is blocking scripts</a> and the <a href=#pending-parsing-blocking-script>pending parsing-blocking
+ script</a>'s <a href=#ready-to-be-parser-executed>"ready to be parser-executed"</a> flag is set.</li>
- <li><p>Unblock this instance of the <a href=#xml-parser>XML parser</a>, such
- that <a href=#concept-task title=concept-task>tasks</a> that invoke it can
- again be run.</li>
+ <li><p>Unblock this instance of the <a href=#xml-parser>XML parser</a>, such that <a href=#concept-task title=concept-task>tasks</a> that invoke it can again be run.</li>
- <li><p><a href=#execute-the-script-block title="execute the script block">Execute</a> the
- <a href=#pending-parsing-blocking-script>pending parsing-blocking script</a>.</li>
-
- <li><p>There is no longer a <a href=#pending-parsing-blocking-script>pending parsing-blocking
+ <li><p><a href=#execute-the-script-block title="execute the script block">Execute</a> the <a href=#pending-parsing-blocking-script>pending parsing-blocking
script</a>.</li>
+ <li><p>There is no longer a <a href=#pending-parsing-blocking-script>pending parsing-blocking script</a>.</li>
+
</ol><p class=note>Since the <code title=dom-document-write><a href=#dom-document-write>document.write()</a></code> API is not
- available for <a href=#xml-documents>XML documents</a>, much of the complexity in
- the <a href=#html-parser>HTML parser</a> is not needed in the <a href=#xml-parser>XML
- parser</a>.</p>
+ available for <a href=#xml-documents>XML documents</a>, much of the complexity in the <a href=#html-parser>HTML parser</a>
+ is not needed in the <a href=#xml-parser>XML parser</a>.</p>
- <p>Certain algorithms in this specification <dfn id=feed-the-parser title="feed the
- parser">spoon-feed the parser</dfn> characters one string at a
- time. In such cases, the <a href=#xml-parser>XML parser</a> must act as it
- would have if faced with a single string consisting of the
- concatenation of all those characters.</p>
+ <p>Certain algorithms in this specification <dfn id=feed-the-parser title="feed the parser">spoon-feed the
+ parser</dfn> characters one string at a time. In such cases, the <a href=#xml-parser>XML parser</a> must act
+ as it would have if faced with a single string consisting of the concatenation of all those
+ characters.</p>
- <p>When an <a href=#xml-parser>XML parser</a> reaches the end of its input, it
- must <a href=#stop-parsing>stop parsing</a>, following the same rules as the
- <a href=#html-parser>HTML parser</a>. An <a href=#xml-parser>XML parser</a> can also be
- <a href=#abort-a-parser title="abort a parser">aborted</a>, which must again by
- done in the same way as for an <a href=#html-parser>HTML parser</a>.</p>
+ <p>When an <a href=#xml-parser>XML parser</a> reaches the end of its input, it must <a href=#stop-parsing>stop
+ parsing</a>, following the same rules as the <a href=#html-parser>HTML parser</a>. An <a href=#xml-parser>XML
+ parser</a> can also be <a href=#abort-a-parser title="abort a parser">aborted</a>, which must again by done in
+ the same way as for an <a href=#html-parser>HTML parser</a>.</p>
- <p>For the purposes of conformance checkers, if a resource is
- determined to be in <a href=#the-xhtml-syntax>the XHTML syntax</a>, then it is an
- <a href=#xml-documents title="XML documents">XML document</a>.</p>
+ <p>For the purposes of conformance checkers, if a resource is determined to be in <a href=#the-xhtml-syntax>the XHTML
+ syntax</a>, then it is an <a href=#xml-documents title="XML documents">XML document</a>.</p>
Modified: index
===================================================================
--- index 2013-02-05 20:33:00 UTC (rev 7694)
+++ index 2013-02-05 22:23:45 UTC (rev 7695)
@@ -12394,24 +12394,23 @@
<h3 id=interactions-with-xpath-and-xslt><span class=secno>3.3 </span>Interactions with XPath and XSLT</h3>
- <p id=xpath-1.0-processors>Implementations of XPath 1.0 that
- operate on <a href=#html-documents>HTML documents</a> parsed or created in the
- manners described in this specification (e.g. as part of the <code title="">document.evaluate()</code> API) must act as if the
- following edit was applied to the XPath 1.0 specification.</p>
+ <p id=xpath-1.0-processors>Implementations of XPath 1.0 that operate on <a href=#html-documents>HTML
+ documents</a> parsed or created in the manners described in this specification (e.g. as part of
+ the <code title="">document.evaluate()</code> API) must act as if the following edit was applied
+ to the XPath 1.0 specification.</p>
<p>First, remove this paragraph:</p>
<blockquote cite=http://www.w3.org/TR/1999/REC-xpath-19991116#node-tests>
- <p>A <a href=http://www.w3.org/TR/REC-xml-names#NT-QName>QName</a> in the
- node test is expanded into an <a href=http://www.w3.org/TR/1999/REC-xpath-19991116#dt-expanded-name>expanded-name</a>
- using the namespace declarations from the expression context. This
- is the same way expansion is done for element type names in start
- and end-tags except that the default namespace declared with <code title="">xmlns</code> is not used: if the <a href=http://www.w3.org/TR/REC-xml-names#NT-QName>QName</a> does
- not have a prefix, then the namespace URI is null (this is the same
- way attribute names are expanded). It is an error if the <a href=http://www.w3.org/TR/REC-xml-names#NT-QName>QName</a> has a
- prefix for which there is no namespace declaration in the
- expression context.</p>
+ <p>A <a href=http://www.w3.org/TR/REC-xml-names#NT-QName>QName</a> in the node test is expanded
+ into an <a href=http://www.w3.org/TR/1999/REC-xpath-19991116#dt-expanded-name>expanded-name</a>
+ using the namespace declarations from the expression context. This is the same way expansion is
+ done for element type names in start and end-tags except that the default namespace declared with
+ <code title="">xmlns</code> is not used: if the <a href=http://www.w3.org/TR/REC-xml-names#NT-QName>QName</a> does not have a prefix, then the
+ namespace URI is null (this is the same way attribute names are expanded). It is an error if the
+ <a href=http://www.w3.org/TR/REC-xml-names#NT-QName>QName</a> has a prefix for which there is
+ no namespace declaration in the expression context.</p>
</blockquote>
@@ -12419,87 +12418,68 @@
<blockquote cite="http://www.w3.org/Bugs/Public/show_bug.cgi?id=7059#c37">
- <p>A QName in the node test is expanded into an expanded-name using
- the namespace declarations from the expression context. If the
- QName has a prefix, then there must be a<!-- added 2009-10-27 -
- http://www.w3.org/Bugs/Public/show_bug.cgi?id=8062 --> namespace
- declaration for this prefix in the expression context, and the
- corresponding<!-- typo fixed 2009-10-27 -
- http://www.w3.org/Bugs/Public/show_bug.cgi?id=8063 --> namespace
- URI is the one that is associated with this prefix. It is an error
- if the QName has a prefix for which there is no namespace
- declaration in the expression context. </p>
+ <p>A QName in the node test is expanded into an expanded-name using the namespace declarations
+ from the expression context. If the QName has a prefix, then there must be a<!-- added 2009-10-27
+ - http://www.w3.org/Bugs/Public/show_bug.cgi?id=8062 --> namespace declaration for this prefix in
+ the expression context, and the corresponding<!-- typo fixed 2009-10-27 -
+ http://www.w3.org/Bugs/Public/show_bug.cgi?id=8063 --> namespace URI is the one that is
+ associated with this prefix. It is an error if the QName has a prefix for which there is no
+ namespace declaration in the expression context. </p>
- <p>If the QName has no prefix and the principal node type of the
- axis is element, then the default element namespace is
- used. Otherwise if the QName has no prefix, the namespace URI is
- null. The default element namespace is a member of the context for
- the XPath expression. The value of the default element namespace
- when executing an XPath expression through the DOM3 XPath API is
- determined in the following way:</p>
+ <p>If the QName has no prefix and the principal node type of the axis is element, then the
+ default element namespace is used. Otherwise if the QName has no prefix, the namespace URI is
+ null. The default element namespace is a member of the context for the XPath expression. The
+ value of the default element namespace when executing an XPath expression through the DOM3 XPath
+ API is determined in the following way:</p>
- <ol><li>If the context node is from an HTML DOM, the default element
- namespace is "http://www.w3.org/1999/xhtml".</li>
+ <ol><li>If the context node is from an HTML DOM, the default element namespace is
+ "http://www.w3.org/1999/xhtml".</li>
<li>Otherwise, the default element namespace URI is null.</li>
- </ol><p class=note>This is equivalent to adding the default element
- namespace feature of XPath 2.0 to XPath 1.0, and using the HTML
- namespace as the default element namespace for HTML documents. It
- is motivated by the desire to have implementations be compatible
- with legacy HTML content while still supporting the changes that
- this specification introduces to HTML regarding the namespace used
- for HTML elements, and by the desire to use XPath 1.0 rather than
- XPath 2.0.</p>
+ </ol><p class=note>This is equivalent to adding the default element namespace feature of XPath 2.0
+ to XPath 1.0, and using the HTML namespace as the default element namespace for HTML documents.
+ It is motivated by the desire to have implementations be compatible with legacy HTML content
+ while still supporting the changes that this specification introduces to HTML regarding the
+ namespace used for HTML elements, and by the desire to use XPath 1.0 rather than XPath 2.0.</p>
</blockquote>
- <p class=note>This change is a <a href=#willful-violation>willful violation</a> of
- the XPath 1.0 specification, motivated by desire to have
- implementations be compatible with legacy content while still
- supporting the changes that this specification introduces to HTML
- regarding which namespace is used for HTML elements. <a href=#refsXPATH10>[XPATH10]</a></p> <!-- note: version matters for
+ <p class=note>This change is a <a href=#willful-violation>willful violation</a> of the XPath 1.0 specification,
+ motivated by desire to have implementations be compatible with legacy content while still
+ supporting the changes that this specification introduces to HTML regarding which namespace is
+ used for HTML elements. <a href=#refsXPATH10>[XPATH10]</a></p> <!-- note: version matters for
this ref -->
- <hr><p id=dom-based-xslt-1.0-processors>XSLT 1.0 processors outputting
- to a DOM when the output method is "html" (either explicitly or via
- the defaulting rule in XSLT 1.0) are affected as follows:</p>
+ <hr><p id=dom-based-xslt-1.0-processors>XSLT 1.0 processors outputting to a DOM when the output
+ method is "html" (either explicitly or via the defaulting rule in XSLT 1.0) are affected as
+ follows:</p>
- <p>If the transformation program outputs an element in no namespace,
- the processor must, prior to constructing the corresponding DOM
- element node, change the namespace of the element to the <a href=#html-namespace-0>HTML
- namespace</a>, <a href=#converted-to-ascii-lowercase title="converted to ASCII
- lowercase">ASCII-lowercase</a> the element's local name, and
- <a href=#converted-to-ascii-lowercase title="converted to ASCII lowercase">ASCII-lowercase</a>
- the names of any non-namespaced attributes on the element.</p>
+ <p>If the transformation program outputs an element in no namespace, the processor must, prior to
+ constructing the corresponding DOM element node, change the namespace of the element to the
+ <a href=#html-namespace-0>HTML namespace</a>, <a href=#converted-to-ascii-lowercase title="converted to ASCII lowercase">ASCII-lowercase</a> the
+ element's local name, and <a href=#converted-to-ascii-lowercase title="converted to ASCII lowercase">ASCII-lowercase</a> the
+ names of any non-namespaced attributes on the element.</p>
- <p class=note>This requirement is a <a href=#willful-violation>willful violation</a>
- of the XSLT 1.0 specification, required because this specification
- changes the namespaces and case-sensitivity rules of HTML in a
- manner that would otherwise be incompatible with DOM-based XSLT
- transformations. (Processors that serialize the output are
- unaffected.) <a href=#refsXSLT10>[XSLT10]</a></p> <!-- note:
- version matters for this ref -->
+ <p class=note>This requirement is a <a href=#willful-violation>willful violation</a> of the XSLT 1.0
+ specification, required because this specification changes the namespaces and case-sensitivity
+ rules of HTML in a manner that would otherwise be incompatible with DOM-based XSLT
+ transformations. (Processors that serialize the output are unaffected.) <a href=#refsXSLT10>[XSLT10]</a></p> <!-- note: version matters for this ref -->
- <hr><p>This specification does not specify precisely how XSLT processing
- interacts with the <a href=#html-parser>HTML parser</a> infrastructure (for
- example, whether an XSLT processor acts as if it puts any elements
- into a <a href=#stack-of-open-elements>stack of open elements</a>). However, XSLT
- processors must <a href=#stop-parsing>stop parsing</a> if they successfully
- complete, and must set the <a href=#current-document-readiness>current document readiness</a>
- first to "<code title="">interactive</code>"<!-- this synchronously
- fires an event --> and then to "<code title="">complete</code>"<!--
- this also synchronously fires an event --> if they are aborted.</p>
+ <hr><p>This specification does not specify precisely how XSLT processing interacts with the <a href=#html-parser>HTML
+ parser</a> infrastructure (for example, whether an XSLT processor acts as if it puts any
+ elements into a <a href=#stack-of-open-elements>stack of open elements</a>). However, XSLT processors must <a href=#stop-parsing>stop
+ parsing</a> if they successfully complete, and must set the <a href=#current-document-readiness>current document
+ readiness</a> first to "<code title="">interactive</code>"<!-- this synchronously fires an
+ event --> and then to "<code title="">complete</code>"<!-- this also synchronously fires an event
+ --> if they are aborted.</p>
- <hr><p>This specification does not specify how XSLT interacts with the
- <a href=#navigate title=navigate>navigation</a> algorithm, how it fits in
- with the <a href=#event-loop>event loop</a>, nor how error pages are to be
- handled (e.g. whether XSLT errors are to replace an incremental XSLT
+ <hr><p>This specification does not specify how XSLT interacts with the <a href=#navigate title=navigate>navigation</a> algorithm, how it fits in with the <a href=#event-loop>event loop</a>, nor
+ how error pages are to be handled (e.g. whether XSLT errors are to replace an incremental XSLT
output, or are rendered inline, etc).</p>
- <p class=note>There are also additional non-normative comments
- regarding the interaction of XSLT and HTML <a href=#scriptTagXSLT>in the <code>script</code> element
- section</a>.</p>
+ <p class=note>There are also additional non-normative comments regarding the interaction of XSLT
+ and HTML <a href=#scriptTagXSLT>in the <code>script</code> element section</a>.</p>
</div>
@@ -12740,27 +12720,25 @@
</dl><div class=impl>
- <p>The <dfn id=dom-document-close title=dom-document-close><code>close()</code></dfn>
- method must run the following steps:</p>
+ <p>The <dfn id=dom-document-close title=dom-document-close><code>close()</code></dfn> method must run the following
+ steps:</p>
- <ol><li><p>If the <code><a href=#document>Document</a></code> object is not flagged as an
- <a href=#html-documents title="HTML documents">HTML document</a>, throw an
- <code><a href=#invalidstateerror>InvalidStateError</a></code> exception and abort these
+ <ol><li><p>If the <code><a href=#document>Document</a></code> object is not flagged as an <a href=#html-documents title="HTML documents">HTML
+ document</a>, throw an <code><a href=#invalidstateerror>InvalidStateError</a></code> exception and abort these
steps.</li>
- <li><p>If there is no <a href=#script-created-parser>script-created parser</a> associated
- with the document, then abort these steps.</li>
+ <li><p>If there is no <a href=#script-created-parser>script-created parser</a> associated with the document, then abort
+ these steps.</li>
- <li><p>Insert an <a href=#explicit-eof-character>explicit "EOF" character</a> at the end
- of the parser's <a href=#input-stream>input stream</a>.</li>
+ <li><p>Insert an <a href=#explicit-eof-character>explicit "EOF" character</a> at the end of the parser's <a href=#input-stream>input
+ stream</a>.</li>
- <li><p>If there is a <a href=#pending-parsing-blocking-script>pending parsing-blocking script</a>,
- then abort these steps.</li>
+ <li><p>If there is a <a href=#pending-parsing-blocking-script>pending parsing-blocking script</a>, then abort these
+ steps.</li>
- <li><p>Run the tokenizer, processing resulting tokens as they are
- emitted, and stopping when the tokenizer reaches the <a href=#explicit-eof-character>explicit
- "EOF" character</a> or <a href=#spin-the-event-loop title="spin the event loop">spins
- the event loop</a>.</li>
+ <li><p>Run the tokenizer, processing resulting tokens as they are emitted, and stopping when the
+ tokenizer reaches the <a href=#explicit-eof-character>explicit "EOF" character</a> or <a href=#spin-the-event-loop title="spin the event
+ loop">spins the event loop</a>.</li>
</ol></div>
@@ -14715,14 +14693,12 @@
<h4 id=styling><span class=secno>4.2.7 </span><dfn title="styling processing model">Styling</dfn></h4>
- <p>The <code><a href=#the-link-element>link</a></code> and <code><a href=#the-style-element>style</a></code> elements can provide
- styling information for the user agent to use when rendering the
- document. The CSS and CSSOM specifications specify what styling
- information is to be used by the user agent and how it is to be
- used. <a href=#refsCSS>[CSS]</a> <a href=#refsCSSOM>[CSSOM]</a></p>
+ <p>The <code><a href=#the-link-element>link</a></code> and <code><a href=#the-style-element>style</a></code> elements can provide styling information for the
+ user agent to use when rendering the document. The CSS and CSSOM specifications specify what
+ styling information is to be used by the user agent and how it is to be used. <a href=#refsCSS>[CSS]</a> <a href=#refsCSSOM>[CSSOM]</a></p>
- <p>The <code><a href=#the-style-element>style</a></code> and <code><a href=#the-link-element>link</a></code> elements implement
- the <code><a href=#linkstyle>LinkStyle</a></code> interface. <a href=#refsCSSOM>[CSSOM]</a></p>
+ <p>The <code><a href=#the-style-element>style</a></code> and <code><a href=#the-link-element>link</a></code> elements implement the <code><a href=#linkstyle>LinkStyle</a></code>
+ interface. <a href=#refsCSSOM>[CSSOM]</a></p>
<div class=impl>
@@ -14745,126 +14721,98 @@
<dl><dt>The style sheet type</dt>
- <dd><p>The style sheet type must be the same as the style's specified
- type. For <code><a href=#the-style-element>style</a></code> elements, this is the same as the
- <code title=attr-style-type><a href=#attr-style-type>type</a></code> content attribute's
- value, or <code title="">text/css</code> if that is omitted. For
- <code><a href=#the-link-element>link</a></code> elements, this is the <a href=#content-type title=Content-Type>Content-Type metadata of the specified
- resource</a>.</dd>
+ <dd><p>The style sheet type must be the same as the style's specified type. For
+ <code><a href=#the-style-element>style</a></code> elements, this is the same as the <code title=attr-style-type><a href=#attr-style-type>type</a></code>
+ content attribute's value, or <code title="">text/css</code> if that is omitted. For
+ <code><a href=#the-link-element>link</a></code> elements, this is the <a href=#content-type title=Content-Type>Content-Type metadata of the
+ specified resource</a>.</dd>
<dt>The style sheet location</dt>
- <dd><p>For <code><a href=#the-link-element>link</a></code> elements, the location must be the
- result of <a href=#resolve-a-url title="resolve a url">resolving</a> the
- <a href=#url>URL</a> given by the element's <code title=attr-link-href><a href=#attr-link-href>href</a></code> content attribute, relative to
- the element, or the empty string if that fails. For
- <code><a href=#the-style-element>style</a></code> elements, there is no location.</dd> <!--
- note that this might not match the style sheet URL, if the base URL
- has changed for instance -->
+ <dd><p>For <code><a href=#the-link-element>link</a></code> elements, the location must be the result of <a href=#resolve-a-url title="resolve a
+ url">resolving</a> the <a href=#url>URL</a> given by the element's <code title=attr-link-href><a href=#attr-link-href>href</a></code> content attribute, relative to the element, or the empty
+ string if that fails. For <code><a href=#the-style-element>style</a></code> elements, there is no location.</dd> <!-- note
+ that this might not match the style sheet URL, if the base URL has changed for instance -->
<dt>The style sheet media</dt>
- <dd><p>The media must be the same as the value of the element's
- <code title="">media</code> content attribute, or the empty string,
- if the attribute is omitted.</dd>
+ <dd><p>The media must be the same as the value of the element's <code title="">media</code>
+ content attribute, or the empty string, if the attribute is omitted.</dd>
<dt>The style sheet title</dt>
- <dd><p>The title must be the same as the value of the element's
- <code title=dom-title><a href=#dom-title>title</a></code> content attribute, if the
- attribute is present and has a non-empty value. If the attribute is
- absent or its value is the empty string, then the style sheet does
- not have a title (it is the empty string). The title is used for
- defining <a href=#alternative-style-sheet-sets>alternative style sheet sets</a>.</dd>
+ <dd><p>The title must be the same as the value of the element's <code title=dom-title><a href=#dom-title>title</a></code> content attribute, if the attribute is present and has a non-empty
+ value. If the attribute is absent or its value is the empty string, then the style sheet does not
+ have a title (it is the empty string). The title is used for defining <a href=#alternative-style-sheet-sets>alternative style
+ sheet sets</a>.</dd>
<dt>The style sheet alternate flag</dt>
- <dd><p>For <code><a href=#the-link-element>link</a></code> elements, true if <a href=#the-link-is-an-alternative-stylesheet>the link is an
- alternative stylesheet</a>. In all other cases, false.</dd>
+ <dd><p>For <code><a href=#the-link-element>link</a></code> elements, true if <a href=#the-link-is-an-alternative-stylesheet>the link is an alternative
+ stylesheet</a>. In all other cases, false.</dd>
<!--
- <dt>The style sheet disabled flag</dt>
- (not included, because I assume CSSOM will change to not require
- this spec to initialise the value, but will instead initialise it
- based on the other values)
+ <dt>The style sheet disabled flag</dt> (not included, because I assume CSSOM will change to not
+ require this spec to initialise the value, but will instead initialise it based on the other
+ values)
-->
</dl><p>The same object must be returned each time.</p>
- <p>The <dfn id=dom-linkstyle-disabled title=dom-LinkStyle-disabled><code>disabled</code></dfn> IDL
- attribute on <code><a href=#the-link-element>link</a></code> and <code><a href=#the-style-element>style</a></code> elements must
- return false and do nothing on setting, if the <code title=dom-linkstyle-sheet><a href=#dom-linkstyle-sheet>sheet</a></code> attribute of their
- <code><a href=#linkstyle>LinkStyle</a></code> interface is null. Otherwise, it must return
- the value of the <code><a href=#stylesheet>StyleSheet</a></code> interface's <code title=dom-stylesheet-disabled><a href=#dom-stylesheet-disabled>disabled</a></code> attribute on
- getting, and forward the new value to that same attribute on
- setting.</p>
+ <p>The <dfn id=dom-linkstyle-disabled title=dom-LinkStyle-disabled><code>disabled</code></dfn> IDL attribute on
+ <code><a href=#the-link-element>link</a></code> and <code><a href=#the-style-element>style</a></code> elements must return false and do nothing on setting, if
+ the <code title=dom-linkstyle-sheet><a href=#dom-linkstyle-sheet>sheet</a></code> attribute of their <code><a href=#linkstyle>LinkStyle</a></code>
+ interface is null. Otherwise, it must return the value of the <code><a href=#stylesheet>StyleSheet</a></code> interface's
+ <code title=dom-stylesheet-disabled><a href=#dom-stylesheet-disabled>disabled</a></code> attribute on getting, and forward the new
+ value to that same attribute on setting.</p>
- <!-- [CSSOM] covers the following: the term "alternative style sheet
- sets", the term "default style sheet set", preferred stylesheets,
- alternative stylesheets, persistent stylesheets, ordering of
- stylesheets, dynamic additions/removals, window.styleSheets, style
- sheets given by HTTP Link: headers, and the alternative style sheet
- API -->
+ <!-- [CSSOM] covers the following: the term "alternative style sheet sets", the term "default
+ style sheet set", preferred stylesheets, alternative stylesheets, persistent stylesheets, ordering
+ of stylesheets, dynamic additions/removals, window.styleSheets, style sheets given by HTTP Link:
+ headers, and the alternative style sheet API -->
- <p id=alternate-style-sheets>The rules for handling alternative
- style sheets are defined in the CSS object model specification. <a href=#refsCSSOM>[CSSOM]</a></p>
+ <p id=alternate-style-sheets>The rules for handling alternative style sheets are defined in the
+ CSS object model specification. <a href=#refsCSSOM>[CSSOM]</a></p>
- <hr><p>Style sheets, whether added by a <code><a href=#the-link-element>link</a></code> element, a
- <code><a href=#the-style-element>style</a></code> element, an <code><?xml-stylesheet></code> PI,
- an HTTP <code title=http-link>Link:</code> header, or some other
- mechanism, have a <dfn id=style-sheet-ready>style sheet ready</dfn> flag, which is
- initially unset.</p>
+ <hr><p>Style sheets, whether added by a <code><a href=#the-link-element>link</a></code> element, a <code><a href=#the-style-element>style</a></code> element, an
+ <code><?xml-stylesheet></code> PI, an HTTP <code title=http-link>Link:</code> header, or some
+ other mechanism, have a <dfn id=style-sheet-ready>style sheet ready</dfn> flag, which is initially unset.</p>
- <p>When a style sheet is ready to be applied, its <a href=#style-sheet-ready>style sheet
- ready</a> flag must be set. If the style sheet referenced no
- other resources (e.g. it was an internal style sheet given by a
- <code><a href=#the-style-element>style</a></code> element with no <code title="">@import</code>
- rules), then the style rules must be synchronously made available to
- script; otherwise, the style rules must only be made available to
- script once the <a href=#event-loop>event loop</a> reaches its "update the
- rendering" step.</p>
+ <p>When a style sheet is ready to be applied, its <a href=#style-sheet-ready>style sheet ready</a> flag must be set.
+ If the style sheet referenced no other resources (e.g. it was an internal style sheet given by a
+ <code><a href=#the-style-element>style</a></code> element with no <code title="">@import</code> rules), then the style rules must
+ be synchronously made available to script; otherwise, the style rules must only be made available
+ to script once the <a href=#event-loop>event loop</a> reaches its "update the rendering" step.</p>
- <p>A style sheet in the context of the <code><a href=#document>Document</a></code> of an
- <a href=#html-parser>HTML parser</a> or <a href=#xml-parser>XML parser</a> is said to be
- <dfn id=a-style-sheet-that-is-blocking-scripts>a style sheet that is blocking scripts</dfn> if the element was
- created by that <code><a href=#document>Document</a></code>'s parser, and the element is
- either a <code><a href=#the-style-element>style</a></code> element or a <code><a href=#the-link-element>link</a></code> element
- that was an <a href=#link-type-stylesheet title=rel-stylesheet>external resource link that
- contributes to the styling processing model</a> when the element
- was created by the parser, and the element's style sheet was enabled
- when the element was created by the parser, and the element's
- <a href=#style-sheet-ready>style sheet ready</a> flag is not yet set, and, the last
- time the <a href=#event-loop>event loop</a> reached step 1, the element was
- <a href=#in-a-document title="in a document">in that <code>Document</code></a>,
- and the user agent hasn't given up on that particular style sheet
- yet. A user agent may give up on a style sheet at any time.</p>
+ <p>A style sheet in the context of the <code><a href=#document>Document</a></code> of an <a href=#html-parser>HTML parser</a> or
+ <a href=#xml-parser>XML parser</a> is said to be <dfn id=a-style-sheet-that-is-blocking-scripts>a style sheet that is blocking scripts</dfn> if the
+ element was created by that <code><a href=#document>Document</a></code>'s parser, and the element is either a
+ <code><a href=#the-style-element>style</a></code> element or a <code><a href=#the-link-element>link</a></code> element that was an <a href=#link-type-stylesheet title=rel-stylesheet>external resource link that contributes to the styling processing
+ model</a> when the element was created by the parser, and the element's style sheet was enabled
+ when the element was created by the parser, and the element's <a href=#style-sheet-ready>style sheet ready</a> flag
+ is not yet set, and, the last time the <a href=#event-loop>event loop</a> reached step 1, the element was
+ <a href=#in-a-document title="in a document">in that <code>Document</code></a>, and the user agent hasn't given
+ up on that particular style sheet yet. A user agent may give up on a style sheet at any time.</p>
- <p class=note>Giving up on a style sheet before the style sheet
- loads, if the style sheet eventually does still load, means that the
- script might end up operating with incorrect information. For
- example, if a style sheet sets the color of an element to green, but
- a script that inspects the resulting style is executed before the
- sheet is loaded, the script will find that the element is black (or
- whatever the default color is), and might thus make poor choices
- (e.g. deciding to use black as the color elsewhere on the page,
- instead of green). Implementors have to balance the likelihood of a
- script using incorrect information with the performance impact of
- doing nothing while waiting for a slow network request to
- finish.</p>
+ <p class=note>Giving up on a style sheet before the style sheet loads, if the style sheet
+ eventually does still load, means that the script might end up operating with incorrect
+ information. For example, if a style sheet sets the color of an element to green, but a script
+ that inspects the resulting style is executed before the sheet is loaded, the script will find
+ that the element is black (or whatever the default color is), and might thus make poor choices
+ (e.g. deciding to use black as the color elsewhere on the page, instead of green). Implementors
+ have to balance the likelihood of a script using incorrect information with the performance impact
+ of doing nothing while waiting for a slow network request to finish.</p>
- <p>A <code><a href=#document>Document</a></code> <dfn id=has-a-style-sheet-that-is-blocking-scripts>has a style sheet that is blocking
- scripts</dfn> if there is either <a href=#a-style-sheet-that-is-blocking-scripts>a style sheet that is
- blocking scripts</a> in the context of that
- <code><a href=#document>Document</a></code>, or if that <code><a href=#document>Document</a></code> is in a
- <a href=#browsing-context>browsing context</a> that has a <a href=#parent-browsing-context>parent browsing
- context</a>, and the <a href=#active-document>active document</a> of that
- <a href=#parent-browsing-context>parent browsing context</a> itself <a href=#has-a-style-sheet-that-is-blocking-scripts>has a style sheet
- that is blocking scripts</a>.</p>
+ <p>A <code><a href=#document>Document</a></code> <dfn id=has-a-style-sheet-that-is-blocking-scripts>has a style sheet that is blocking scripts</dfn> if there is
+ either <a href=#a-style-sheet-that-is-blocking-scripts>a style sheet that is blocking scripts</a> in the context of that
+ <code><a href=#document>Document</a></code>, or if that <code><a href=#document>Document</a></code> is in a <a href=#browsing-context>browsing context</a> that
+ has a <a href=#parent-browsing-context>parent browsing context</a>, and the <a href=#active-document>active document</a> of that
+ <a href=#parent-browsing-context>parent browsing context</a> itself <a href=#has-a-style-sheet-that-is-blocking-scripts>has a style sheet that is blocking
+ scripts</a>.</p>
- <p>A <code><a href=#document>Document</a></code> <dfn id=has-no-style-sheet-that-is-blocking-scripts>has no style sheet that is blocking
- scripts</dfn> if it does not <a href=#has-a-style-sheet-that-is-blocking-scripts title="has a style sheet that is
- blocking scripts">have a style sheet that is blocking scripts</a>
- as defined in the previous paragraph.</p>
+ <p>A <code><a href=#document>Document</a></code> <dfn id=has-no-style-sheet-that-is-blocking-scripts>has no style sheet that is blocking scripts</dfn> if it does not
+ <a href=#has-a-style-sheet-that-is-blocking-scripts title="has a style sheet that is blocking scripts">have a style sheet that is blocking
+ scripts</a> as defined in the previous paragraph.</p>
</div>
@@ -28741,8 +28689,8 @@
<p><a href=#queue-a-task>Queue a task</a> to <a href=#fire-a-simple-event>fire a simple event</a> named <code title=event-media-loadedmetadata><a href=#event-media-loadedmetadata>loadedmetadata</a></code> at the element.</p>
- <p class=note>Before this task is run, as part of the event loop mechanism, the rendering
- will have been updated to resize the <code><a href=#the-video-element>video</a></code> element if appropriate.</p>
+ <p class=note>Before this task is run, as part of the <a href=#event-loop>event loop</a> mechanism, the
+ rendering will have been updated to resize the <code><a href=#the-video-element>video</a></code> element if appropriate.</p>
</dd>
@@ -31973,74 +31921,61 @@
</dd>
- </dl><p>If the <a href=#text-track-mode>text track mode</a> of the <a href=#text-track>text
- track</a> that the <code><a href=#texttrack>TextTrack</a></code> object represents is
- not the <a href=#text-track-disabled>text track disabled</a> mode, then the <dfn id=dom-texttrack-cues title=dom-TextTrack-cues><code>cues</code></dfn> attribute must
- return a <a href=#live>live</a> <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object that
- represents the subset of the <a href=#text-track-list-of-cues>text track list of cues</a> of
- the <a href=#text-track>text track</a> that the <code><a href=#texttrack>TextTrack</a></code> object
- represents whose <a href=#text-track-cue-end-time title="text track cue end time">end
- times</a> occur at or after the <a href=#earliest-possible-position-when-the-script-started>earliest possible position
- when the script started</a>, in <a href=#text-track-cue-order>text track cue
- order</a>. Otherwise, it must return null. When an object is
- returned, the same object must be returned each time.</p>
+ </dl><p>If the <a href=#text-track-mode>text track mode</a> of the <a href=#text-track>text track</a> that the
+ <code><a href=#texttrack>TextTrack</a></code> object represents is not the <a href=#text-track-disabled>text track disabled</a> mode, then
+ the <dfn id=dom-texttrack-cues title=dom-TextTrack-cues><code>cues</code></dfn> attribute must return a
+ <a href=#live>live</a> <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object that represents the subset of the
+ <a href=#text-track-list-of-cues>text track list of cues</a> of the <a href=#text-track>text track</a> that the
+ <code><a href=#texttrack>TextTrack</a></code> object represents whose <a href=#text-track-cue-end-time title="text track cue end time">end
+ times</a> occur at or after the <a href=#earliest-possible-position-when-the-script-started>earliest possible position when the script
+ started</a>, in <a href=#text-track-cue-order>text track cue order</a>. Otherwise, it must return null. When an
+ object is returned, the same object must be returned each time.</p>
- <p>The <dfn id=earliest-possible-position-when-the-script-started>earliest possible position when the script started</dfn>
- is whatever the <a href=#earliest-possible-position>earliest possible position</a> was the last
- time the <a href=#event-loop>event loop</a> reached step 1.</p>
+ <p>The <dfn id=earliest-possible-position-when-the-script-started>earliest possible position when the script started</dfn> is whatever the
+ <a href=#earliest-possible-position>earliest possible position</a> was the last time the <a href=#event-loop>event loop</a> reached step
+ 1.</p>
- <p>If the <a href=#text-track-mode>text track mode</a> of the <a href=#text-track>text
- track</a> that the <code><a href=#texttrack>TextTrack</a></code> object represents is
- not the <a href=#text-track-disabled>text track disabled</a> mode, then the <dfn id=dom-texttrack-activecues title=dom-TextTrack-activeCues><code>activeCues</code></dfn>
- attribute must return a <a href=#live>live</a>
- <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object that represents the subset of
- the <a href=#text-track-list-of-cues>text track list of cues</a> of the <a href=#text-track>text
- track</a> that the <code><a href=#texttrack>TextTrack</a></code> object represents
- whose <a href=#active-flag-was-set-when-the-script-started>active flag was set when the script started</a>, in
- <a href=#text-track-cue-order>text track cue order</a>. Otherwise, it must return
- null. When an object is returned, the same object must be returned
- each time.</p>
+ <p>If the <a href=#text-track-mode>text track mode</a> of the <a href=#text-track>text track</a> that the
+ <code><a href=#texttrack>TextTrack</a></code> object represents is not the <a href=#text-track-disabled>text track disabled</a> mode, then
+ the <dfn id=dom-texttrack-activecues title=dom-TextTrack-activeCues><code>activeCues</code></dfn> attribute must return a
+ <a href=#live>live</a> <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object that represents the subset of the
+ <a href=#text-track-list-of-cues>text track list of cues</a> of the <a href=#text-track>text track</a> that the
+ <code><a href=#texttrack>TextTrack</a></code> object represents whose <a href=#active-flag-was-set-when-the-script-started>active flag was set when the script
+ started</a>, in <a href=#text-track-cue-order>text track cue order</a>. Otherwise, it must return null. When an
+ object is returned, the same object must be returned each time.</p>
- <p>A <a href=#text-track-cue>text track cue</a>'s <dfn id=active-flag-was-set-when-the-script-started>active flag was set when
- the script started</dfn> if its <a href=#text-track-cue-active-flag>text track cue active
- flag</a> was set the last time the <a href=#event-loop>event loop</a>
- reached step 1.</p>
+ <p>A <a href=#text-track-cue>text track cue</a>'s <dfn id=active-flag-was-set-when-the-script-started>active flag was set when the script started</dfn> if its
+ <a href=#text-track-cue-active-flag>text track cue active flag</a> was set the last time the <a href=#event-loop>event loop</a> reached
+ step 1.</p>
- <hr><p>The <dfn id=dom-texttrack-addcue title=dom-TextTrack-addCue><code>addCue(<var title="">cue</var>)</code></dfn> method of <code><a href=#texttrack>TextTrack</a></code>
- objects, when invoked, must run the following steps:</p>
+ <hr><p>The <dfn id=dom-texttrack-addcue title=dom-TextTrack-addCue><code>addCue(<var title="">cue</var>)</code></dfn> method
+ of <code><a href=#texttrack>TextTrack</a></code> objects, when invoked, must run the following steps:</p>
- <ol><li><p>If the given <var title="">cue</var> is in a <a href=#text-track-list-of-cues>text
- track list of cues</a>, then remove <var title="">cue</var> from
- that <a href=#text-track-list-of-cues>text track list of cues</a>.</li>
+ <ol><li><p>If the given <var title="">cue</var> is in a <a href=#text-track-list-of-cues>text track list of cues</a>, then
+ remove <var title="">cue</var> from that <a href=#text-track-list-of-cues>text track list of cues</a>.</li>
- <li><p>Add <var title="">cue</var> to the method's
- <code><a href=#texttrack>TextTrack</a></code> object's <a href=#text-track>text track</a>'s
- <a href=#text-track-list-of-cues>text track list of cues</a>.</li>
+ <li><p>Add <var title="">cue</var> to the method's <code><a href=#texttrack>TextTrack</a></code> object's <a href=#text-track>text
+ track</a>'s <a href=#text-track-list-of-cues>text track list of cues</a>.</li>
- </ol><p>The <dfn id=dom-texttrack-removecue title=dom-TextTrack-removeCue><code>removeCue(<var title="">cue</var>)</code></dfn> method of
- <code><a href=#texttrack>TextTrack</a></code> objects, when invoked, must run the
- following steps:</p>
+ </ol><p>The <dfn id=dom-texttrack-removecue title=dom-TextTrack-removeCue><code>removeCue(<var title="">cue</var>)</code></dfn>
+ method of <code><a href=#texttrack>TextTrack</a></code> objects, when invoked, must run the following steps:</p>
- <ol><li><p>If the given <var title="">cue</var> is not currently listed
- in the method's <code><a href=#texttrack>TextTrack</a></code> object's <a href=#text-track>text
- track</a>'s <a href=#text-track-list-of-cues>text track list of cues</a>, then throw a
- <code><a href=#notfounderror>NotFoundError</a></code> exception.</li>
+ <ol><li><p>If the given <var title="">cue</var> is not currently listed in the method's
+ <code><a href=#texttrack>TextTrack</a></code> object's <a href=#text-track>text track</a>'s <a href=#text-track-list-of-cues>text track list of cues</a>,
+ then throw a <code><a href=#notfounderror>NotFoundError</a></code> exception.</li>
- <li><p>Remove <var title="">cue</var> from the method's
- <code><a href=#texttrack>TextTrack</a></code> object's <a href=#text-track>text track</a>'s
- <a href=#text-track-list-of-cues>text track list of cues</a>.</li>
+ <li><p>Remove <var title="">cue</var> from the method's <code><a href=#texttrack>TextTrack</a></code> object's
+ <a href=#text-track>text track</a>'s <a href=#text-track-list-of-cues>text track list of cues</a>.</li>
</ol></div>
<div class=example>
- <p>In this example, an <code><a href=#the-audio-element>audio</a></code> element is used to play a
- specific sound-effect from a sound file containing many sound
- effects. A cue is used to pause the audio, so that it ends exactly
- at the end of the clip, even if the browser is busy running some
- script. If the page had relied on script to pause the audio, then
- the start of the next clip might be heard if the browser was not
- able to run the script at the exact time specified.</p>
+ <p>In this example, an <code><a href=#the-audio-element>audio</a></code> element is used to play a specific sound-effect from a
+ sound file containing many sound effects. A cue is used to pause the audio, so that it ends
+ exactly at the end of the clip, even if the browser is busy running some script. If the page had
+ relied on script to pause the audio, then the start of the next clip might be heard if the
+ browser was not able to run the script at the exact time specified.</p>
<pre>var sfx = new Audio('sfx.wav');
var sounds = sfx.addTextTrack('metadata');
@@ -32096,35 +32031,25 @@
</dl><div class=impl>
- <p>A <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object represents a dynamically
- updating list of <a href=#text-track-cue title="text track cue">text track
- cues</a> in a given order.</p>
+ <p>A <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object represents a dynamically updating list of <a href=#text-track-cue title="text track cue">text track cues</a> in a given order.</p>
- <p>The <dfn id=dom-texttrackcuelist-length title=dom-TextTrackCueList-length><code>length</code></dfn>
- attribute must return the number of <a href=#text-track-cue title="text track
- cue">cues</a> in the list represented by the
+ <p>The <dfn id=dom-texttrackcuelist-length title=dom-TextTrackCueList-length><code>length</code></dfn> attribute must return
+ the number of <a href=#text-track-cue title="text track cue">cues</a> in the list represented by the
<code><a href=#texttrackcuelist>TextTrackCueList</a></code> object.</p>
- <p>The <a href=#supported-property-indices>supported property indices</a> of a
- <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object at any instant are the numbers
- from zero to the number of <a href=#text-track-cue title="text track cue">cues</a>
- in the list represented by the <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object
- minus one, if any. If there are no <a href=#text-track-cue title="text track
- cue">cues</a> in the list, there are no <a href=#supported-property-indices>supported property
+ <p>The <a href=#supported-property-indices>supported property indices</a> of a <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object at any
+ instant are the numbers from zero to the number of <a href=#text-track-cue title="text track cue">cues</a> in the
+ list represented by the <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object minus one, if any. If there are no
+ <a href=#text-track-cue title="text track cue">cues</a> in the list, there are no <a href=#supported-property-indices>supported property
indices</a>.</p>
- <p>To <a href=#determine-the-value-of-an-indexed-property>determine the value of an indexed property</a> for a
- given index <var title="">index</var>, the user agent must return
- the <var title="">index</var>th <a href=#text-track-cue>text track cue</a> in the
- list represented by the <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object.</p>
+ <p>To <a href=#determine-the-value-of-an-indexed-property>determine the value of an indexed property</a> for a given index <var title="">index</var>, the user agent must return the <var title="">index</var>th <a href=#text-track-cue>text track
+ cue</a> in the list represented by the <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object.</p>
- <p>The <dfn id=dom-texttrackcuelist-getcuebyid title=dom-TextTrackCueList-getCueById><code>getCueById(<var title="">id</var>)</code></dfn> method, when called with an argument
- other than the empty string, must return the first <a href=#text-track-cue>text track
- cue</a> in the list represented by the
- <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object whose <a href=#text-track-cue-identifier>text track cue
- identifier</a> is <var title="">id</var>, if any, or null
- otherwise. If the argument is the empty string, then the method must
- return null.</p>
+ <p>The <dfn id=dom-texttrackcuelist-getcuebyid title=dom-TextTrackCueList-getCueById><code>getCueById(<var title="">id</var>)</code></dfn> method, when called with an argument other than the empty string,
+ must return the first <a href=#text-track-cue>text track cue</a> in the list represented by the
+ <code><a href=#texttrackcuelist>TextTrackCueList</a></code> object whose <a href=#text-track-cue-identifier>text track cue identifier</a> is <var title="">id</var>, if any, or null otherwise. If the argument is the empty string, then the method
+ must return null.</p>
</div>
@@ -33125,58 +33050,46 @@
<p><i>This section is non-normative.</i></p>
- <p>How accurately various aspects of the <a href=#media-element>media element</a>
- API are implemented is considered a quality-of-implementation issue.</p>
+ <p>How accurately various aspects of the <a href=#media-element>media element</a> API are implemented is
+ considered a quality-of-implementation issue.</p>
- <p>For example, when implementing the <code title=attr-media-buffered>buffered</code> attribute, how precise
- an implementation reports the ranges that have been buffered depends
- on how carefully the user agent inspects the data. Since the API
- reports ranges as times, but the data is obtained in byte streams, a
- user agent receiving a variable-bit-rate stream might only be able
- to determine precise times by actually decoding all of the data.
- User agents aren't required to do this, however; they can instead
- return estimates (e.g. based on the average bit rate seen so far)
- which get revised as more information becomes available.</p>
+ <p>For example, when implementing the <code title=attr-media-buffered>buffered</code> attribute,
+ how precise an implementation reports the ranges that have been buffered depends on how carefully
+ the user agent inspects the data. Since the API reports ranges as times, but the data is obtained
+ in byte streams, a user agent receiving a variable-bit-rate stream might only be able to determine
+ precise times by actually decoding all of the data. User agents aren't required to do this,
+ however; they can instead return estimates (e.g. based on the average bit rate seen so far) which
+ get revised as more information becomes available.</p>
- <p>As a general rule, user agents are urged to be conservative
- rather than optimistic. For example, it would be bad to report that
- everything had been buffered when it had not.</p>
+ <p>As a general rule, user agents are urged to be conservative rather than optimistic. For
+ example, it would be bad to report that everything had been buffered when it had not.</p>
- <p>Another quality-of-implementation issue would be playing a video
- backwards when the codec is designed only for forward playback (e.g.
- there aren't many key frames, and they are far apart, and the
- intervening frames only have deltas from the previous frame). User
- agents could do a poor job, e.g. only showing key frames; however,
- better implementations would do more work and thus do a better job,
- e.g. actually decoding parts of the video forwards, storing the
- complete frames, and then playing the frames backwards.</p>
+ <p>Another quality-of-implementation issue would be playing a video backwards when the codec is
+ designed only for forward playback (e.g. there aren't many key frames, and they are far apart, and
+ the intervening frames only have deltas from the previous frame). User agents could do a poor job,
+ e.g. only showing key frames; however, better implementations would do more work and thus do a
+ better job, e.g. actually decoding parts of the video forwards, storing the complete frames, and
+ then playing the frames backwards.</p>
- <p>Similarly, while implementations are allowed to drop buffered
- data at any time (there is no requirement that a user agent keep all
- the media data obtained for the lifetime of the media element), it
- is again a quality of implementation issue: user agents with
- sufficient resources to keep all the data around are encouraged to
- do so, as this allows for a better user experience. For example, if
- the user is watching a live stream, a user agent could allow the
- user only to view the live video; however, a better user agent would
- buffer everything and allow the user to seek through the earlier
- material, pause it, play it forwards and backwards, etc.</p>
+ <p>Similarly, while implementations are allowed to drop buffered data at any time (there is no
+ requirement that a user agent keep all the media data obtained for the lifetime of the media
+ element), it is again a quality of implementation issue: user agents with sufficient resources to
+ keep all the data around are encouraged to do so, as this allows for a better user experience. For
+ example, if the user is watching a live stream, a user agent could allow the user only to view the
+ live video; however, a better user agent would buffer everything and allow the user to seek
+ through the earlier material, pause it, play it forwards and backwards, etc.</p>
- <p>When multiple tracks are synchronised with a
- <code><a href=#mediacontroller>MediaController</a></code>, it is possible for scripts to add and
- remove media elements from the <code><a href=#mediacontroller>MediaController</a></code>'s list
- of <a href=#slaved-media-elements>slaved media elements</a>, even while these tracks are
- playing. How smoothly the media plays back in such situations is
- another quality-of-implementation issue.</p>
+ <p>When multiple tracks are synchronised with a <code><a href=#mediacontroller>MediaController</a></code>, it is possible for
+ scripts to add and remove media elements from the <code><a href=#mediacontroller>MediaController</a></code>'s list of
+ <a href=#slaved-media-elements>slaved media elements</a>, even while these tracks are playing. How smoothly the media
+ plays back in such situations is another quality-of-implementation issue.</p>
- <hr><p>When a <a href=#media-element>media element</a> that is paused is <a href=#remove-an-element-from-a-document title="remove an element from a document">removed from a
- document</a> and not reinserted before the next time the
- <a href=#event-loop>event loop</a> spins, implementations that are resource
- constrained are encouraged to take that opportunity to release all
- hardware resources (like video planes, networking resources, and
- data buffers) used by the <a href=#media-element>media element</a>. (User agents
- still have to keep track of the playback position and so forth,
- though, in case playback is later restarted.)</p>
+ <hr><p>When a <a href=#media-element>media element</a> that is paused is <a href=#remove-an-element-from-a-document title="remove an element from a
+ document">removed from a document</a> and not reinserted before the next time the <a href=#event-loop>event
+ loop</a> spins, implementations that are resource constrained are encouraged to take that
+ opportunity to release all hardware resources (like video planes, networking resources, and data
+ buffers) used by the <a href=#media-element>media element</a>. (User agents still have to keep track of the
+ playback position and so forth, though, in case playback is later restarted.)</p>
</div>
@@ -37509,15 +37422,15 @@
instructions to the <a href=#scratch-bitmap>scratch bitmap</a>'s <a href=#list-of-pending-interface-actions>list of pending interface actions</a>
that run the following steps:</p>
- <ol><li><p>Let <var title="">the specified rectangle</var> be the
- rectangle of the bounding box of the intended path.</li>
+ <ol><li><p>Let <var title="">the specified rectangle</var> be the rectangle of the bounding box of
+ the intended path.</li>
- <li><p>Let <var title="">notional child</var> be a hypothetical
- element that is a rendered child of the <code><a href=#the-canvas-element>canvas</a></code> element
- whose dimensions are those of <var title="">the specified
+ <li><p>Let <var title="">notional child</var> be a hypothetical element that is a rendered child
+ of the <code><a href=#the-canvas-element>canvas</a></code> element whose dimensions are those of <var title="">the specified
rectangle</var>.</li>
- <li><p><a href=#scroll-an-element-into-view title="scroll an element into view">Scroll <var title="">notional child</var> into view</a> with the <var title="">align to top flag</var> set.</p>
+ <li><p><a href=#scroll-an-element-into-view title="scroll an element into view">Scroll <var title="">notional child</var> into
+ view</a> with the <var title="">align to top flag</var> set.</p>
<li><p>Optionally, <a href=#inform>inform the user</a> that the caret or selection (or both)
cover <var title="">the specified rectangle</var> of the canvas. If the
@@ -37525,17 +37438,14 @@
until the next time the <a href=#event-loop>event loop</a> reaches its "update the rendering" step to
optionally inform the user.</li>
- </ol><p class=note id=inform>"Inform the user", as used in this
- section, could mean calling a system accessibility API, which would
- notify assistive technologies such as magnification tools. To
- properly drive magnification based on a focus change, a system
- accessibility API driving a screen magnifier needs the bounds for
- the newly focused object. The methods above are intended to enable
- this by allowing the user agent to report the bounding box of the
- path used to render the focus ring as the bounds of the <var title="">element</var> element passed as an argument, if that
- element is focused, and the bounding box of the area to which the
- user agent is scrolling as the bounding box of the current
- selection.</p>
+ </ol><p class=note id=inform>"Inform the user", as used in this section, could mean calling a
+ system accessibility API, which would notify assistive technologies such as magnification tools.
+ To properly drive magnification based on a focus change, a system accessibility API driving a
+ screen magnifier needs the bounds for the newly focused object. The methods above are intended to
+ enable this by allowing the user agent to report the bounding box of the path used to render the
+ focus ring as the bounds of the <var title="">element</var> element passed as an argument, if that
+ element is focused, and the bounding box of the area to which the user agent is scrolling as the
+ bounding box of the current selection.</p>
<hr><p>The <dfn id=dom-context-2d-clip title=dom-context-2d-clip><code>clip()</code></dfn> method must create a new
<dfn id=clipping-region>clipping region</dfn> by calculating the intersection of the current clipping region and the
@@ -37543,9 +37453,8 @@
be implicitly closed when computing the clipping region, without affecting the actual subpaths.
The new clipping region replaces the current clipping region.</p>
- <p>When the context is initialized, the clipping region must be set
- to the rectangle with the top left corner at (0,0) and the width and
- height of the coordinate space.</p>
+ <p>When the context is initialized, the clipping region must be set to the rectangle with the top
+ left corner at (0,0) and the width and height of the coordinate space.</p>
<!-- v6
Jordan OSETE suggests:
@@ -68883,110 +68792,97 @@
<div class=impl>
- <p>A <code><a href=#document>Document</a></code> has a <dfn id=concept-document-salvageable title=concept-document-salvageable><var>salvageable</var></dfn>
- state, which must initially be true, a <dfn id=fired-unload>fired unload</dfn> flag,
- which must initially be false, and a <dfn id=page-showing>page showing</dfn> flag,
- which must initially be false.</p>
+ <p>A <code><a href=#document>Document</a></code> has a <dfn id=concept-document-salvageable title=concept-document-salvageable><var>salvageable</var></dfn> state, which must initially be
+ true, a <dfn id=fired-unload>fired unload</dfn> flag, which must initially be false, and a <dfn id=page-showing>page showing</dfn>
+ flag, which must initially be false.</p>
- <p><a href=#event-loop title="event loop">Event loops</a> have a
- <dfn id=termination-nesting-level>termination nesting level</dfn> counter, which must initially
- be zero.</p>
+ <p><a href=#event-loop title="event loop">Event loops</a> have a <dfn id=termination-nesting-level>termination nesting level</dfn>
+ counter, which must initially be zero.</p>
- <p>When a user agent is to <dfn id=prompt-to-unload-a-document>prompt to unload a document</dfn>,
- it must run the following steps.</p>
+ <p>When a user agent is to <dfn id=prompt-to-unload-a-document>prompt to unload a document</dfn>, it must run the following
+ steps.</p>
- <ol><li><p>Increase the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination
- nesting level</a> by one.</li>
+ <ol><li><p>Increase the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination nesting level</a> by
+ one.</li>
- <li><p>Increase the <code><a href=#document>Document</a></code>'s
- <a href=#ignore-opens-during-unload-counter>ignore-opens-during-unload counter</a> by one.</li>
+ <li><p>Increase the <code><a href=#document>Document</a></code>'s <a href=#ignore-opens-during-unload-counter>ignore-opens-during-unload counter</a> by
+ one.</li>
<li><p>Let <var title="">event</var> be a new <a href=#concept-events-trusted title=concept-events-trusted>trusted</a>
<code><a href=#beforeunloadevent>BeforeUnloadEvent</a></code> event object with the name <code title=event-beforeunload>beforeunload</code>, which does not bubble but is cancelable.</li>
<li><p><i>Dispatch</i>: <a href=#concept-event-dispatch title=concept-event-dispatch>Dispatch</a> <var title="">event</var> at the <code><a href=#document>Document</a></code>'s <code><a href=#window>Window</a></code> object.</li>
- <li><p>Decrease the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination
- nesting level</a> by one.</li>
+ <li><p>Decrease the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination nesting level</a> by
+ one.</li>
<li><p>Release the <a href=#storage-mutex>storage mutex</a>.</li>
- <li><p>If any event listeners were triggered by the earlier
- <i>dispatch</i> step, then set the <code><a href=#document>Document</a></code>'s <var title=concept-document-salvageable><a href=#concept-document-salvageable>salvageable</a></var> state to
+ <li><p>If any event listeners were triggered by the earlier <i>dispatch</i> step, then set the
+ <code><a href=#document>Document</a></code>'s <var title=concept-document-salvageable><a href=#concept-document-salvageable>salvageable</a></var> state to
false.</li>
<li>
- <p>If the <code title=dom-BeforeUnloadEvent-returnValue><a href=#dom-beforeunloadevent-returnvalue>returnValue</a></code>
- attribute of the <var title="">event</var> object is not the empty
- string, or if the event was canceled, then the user agent should
- ask the user to confirm that they wish to unload the document.</p>
+ <p>If the <code title=dom-BeforeUnloadEvent-returnValue><a href=#dom-beforeunloadevent-returnvalue>returnValue</a></code> attribute of the
+ <var title="">event</var> object is not the empty string, or if the event was canceled, then the
+ user agent should ask the user to confirm that they wish to unload the document.</p>
- <p>The prompt shown by the user agent may include the string of
- the <code title=dom-BeforeUnloadEvent-returnValue><a href=#dom-beforeunloadevent-returnvalue>returnValue</a></code>
- attribute, or some leading subset thereof. (A user agent may want
- to truncate the string to 1024 characters for display, for
+ <p>The prompt shown by the user agent may include the string of the <code title=dom-BeforeUnloadEvent-returnValue><a href=#dom-beforeunloadevent-returnvalue>returnValue</a></code> attribute, or some leading subset
+ thereof. (A user agent may want to truncate the string to 1024 characters for display, for
instance.)</p>
- <p>The user agent must <a href=#pause>pause</a> while waiting for the
- user's response.</p>
+ <p>The user agent must <a href=#pause>pause</a> while waiting for the user's response.</p>
- <p>If the user did not confirm the page navigation, then the user
- agent <dfn id=refused-to-allow-the-document-to-be-unloaded>refused to allow the document to be unloaded</dfn>.</p>
+ <p>If the user did not confirm the page navigation, then the user agent <dfn id=refused-to-allow-the-document-to-be-unloaded>refused to allow
+ the document to be unloaded</dfn>.</p>
</li>
- <li><p>If this algorithm was invoked by another instance of the
- "prompt to unload a document" algorithm (i.e. through the steps
- below that invoke this algorithm for all descendant browsing
+ <li><p>If this algorithm was invoked by another instance of the "prompt to unload a document"
+ algorithm (i.e. through the steps below that invoke this algorithm for all descendant browsing
contexts), then jump to the step labeled <i>end</i>.</li>
- <li><p>Let <var title="">descendants</var> be the <a href=#list-of-the-descendant-browsing-contexts>list of the
- descendant browsing contexts</a> of the
- <code><a href=#document>Document</a></code>.</li>
+ <li><p>Let <var title="">descendants</var> be the <a href=#list-of-the-descendant-browsing-contexts>list of the descendant browsing
+ contexts</a> of the <code><a href=#document>Document</a></code>.</li>
<li>
- <p>If <var title="">descendants</var> is not an empty list, then
- for each <a href=#browsing-context>browsing context</a> <var title="">b</var> in
- <var title="">descendants</var> run the following substeps:</p>
+ <p>If <var title="">descendants</var> is not an empty list, then for each <a href=#browsing-context>browsing
+ context</a> <var title="">b</var> in <var title="">descendants</var> run the following
+ substeps:</p>
- <ol><li><p><a href=#prompt-to-unload-a-document title="prompt to unload a document">Prompt to
- unload</a> the <a href=#active-document>active document</a> of the
- <a href=#browsing-context>browsing context</a> <var title="">b</var>. If the user
- <a href=#refused-to-allow-the-document-to-be-unloaded>refused to allow the document to be unloaded</a>, then
- the user implicitly also <a href=#refused-to-allow-the-document-to-be-unloaded title="refused to allow the
- document to be unloaded">refused to allow <em>this</em> document
- to be unloaded</a>; jump to the step labeled <i>end</i>.</p>
+ <ol><li><p><a href=#prompt-to-unload-a-document title="prompt to unload a document">Prompt to unload</a> the <a href=#active-document>active
+ document</a> of the <a href=#browsing-context>browsing context</a> <var title="">b</var>. If the user
+ <a href=#refused-to-allow-the-document-to-be-unloaded>refused to allow the document to be unloaded</a>, then the user implicitly also <a href=#refused-to-allow-the-document-to-be-unloaded title="refused to allow the document to be unloaded">refused to allow <em>this</em> document to
+ be unloaded</a>; jump to the step labeled <i>end</i>.</p>
- <li><p>If <var title=concept-document-salvageable><a href=#concept-document-salvageable>salvageable</a></var> state of
- the <a href=#active-document>active document</a> of the <a href=#browsing-context>browsing
- context</a> <var title="">b</var> is false, then set the <var title=concept-document-salvageable><a href=#concept-document-salvageable>salvageable</a></var> state of
- <em>this</em> document to false also.</li>
+ <li><p>If <var title=concept-document-salvageable><a href=#concept-document-salvageable>salvageable</a></var> state of the <a href=#active-document>active
+ document</a> of the <a href=#browsing-context>browsing context</a> <var title="">b</var> is false, then set
+ the <var title=concept-document-salvageable><a href=#concept-document-salvageable>salvageable</a></var> state of <em>this</em> document
+ to false also.</li>
</ol></li>
- <li><p><i>End</i>: Decrease the <code><a href=#document>Document</a></code>'s
- <a href=#ignore-opens-during-unload-counter>ignore-opens-during-unload counter</a> by one.</li>
+ <li><p><i>End</i>: Decrease the <code><a href=#document>Document</a></code>'s <a href=#ignore-opens-during-unload-counter>ignore-opens-during-unload
+ counter</a> by one.</li>
- </ol><p>When a user agent is to <dfn id=unload-a-document>unload a document</dfn>, it must run
- the following steps. These steps are passed an argument, <var title="">recycle</var>, which is either true or false, indicating
- whether the <code><a href=#document>Document</a></code> object is going to be
- re-used. (This is set by the <code title=dom-document-open><a href=#dom-document-open>document.open()</a></code> method.)</p>
+ </ol><p>When a user agent is to <dfn id=unload-a-document>unload a document</dfn>, it must run the following steps. These
+ steps are passed an argument, <var title="">recycle</var>, which is either true or false,
+ indicating whether the <code><a href=#document>Document</a></code> object is going to be re-used. (This is set by the
+ <code title=dom-document-open><a href=#dom-document-open>document.open()</a></code> method.)</p>
- <ol><li><p>Increase the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination
- nesting level</a> by one.</li>
+ <ol><li><p>Increase the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination nesting level</a> by
+ one.</li>
- <li><p>Increase the <code><a href=#document>Document</a></code>'s
- <a href=#ignore-opens-during-unload-counter>ignore-opens-during-unload counter</a> by one.</li>
+ <li><p>Increase the <code><a href=#document>Document</a></code>'s <a href=#ignore-opens-during-unload-counter>ignore-opens-during-unload counter</a> by
+ one.</li>
- <li><p>If the <code><a href=#document>Document</a></code>'s <a href=#page-showing>page showing</a>
- flag is false, then jump to the step labeled <i>unload event</i>
- below (i.e. skip firing the <code title=event-pagehide><a href=#event-pagehide>pagehide</a></code> even and don't rerun the
- <a href=#unloading-document-visibility-change-steps>unloading document visibility change steps</a>).</li>
+ <li><p>If the <code><a href=#document>Document</a></code>'s <a href=#page-showing>page showing</a> flag is false, then jump to the
+ step labeled <i>unload event</i> below (i.e. skip firing the <code title=event-pagehide><a href=#event-pagehide>pagehide</a></code> even and don't rerun the <a href=#unloading-document-visibility-change-steps>unloading document
+ visibility change steps</a>).</li>
- <li><p>Set the <code><a href=#document>Document</a></code>'s <a href=#page-showing>page showing</a>
- flag to false.</li>
+ <li><p>Set the <code><a href=#document>Document</a></code>'s <a href=#page-showing>page showing</a> flag to false.</li>
<li><p><a href=#concept-event-fire title=concept-event-fire>Fire</a> a <a href=#concept-events-trusted title=concept-events-trusted>trusted</a> event with the name <code title=event-pagehide><a href=#event-pagehide>pagehide</a></code> at the <code><a href=#window>Window</a></code> object of the
<code><a href=#document>Document</a></code>, but with its <code title=dom-event-target><a href=#dom-event-target>target</a></code> set to the
@@ -68997,59 +68893,51 @@
<li>
- <p>Run any <dfn id=unloading-document-visibility-change-steps>unloading document visibility change steps</dfn>
- for <code><a href=#document>Document</a></code> that are defined by <a href=#other-applicable-specifications>other
- applicable specifications</a>.</p>
+ <p>Run any <dfn id=unloading-document-visibility-change-steps>unloading document visibility change steps</dfn> for <code><a href=#document>Document</a></code> that
+ are defined by <a href=#other-applicable-specifications>other applicable specifications</a>.</p>
- <p class=note>This is specifically intended for use by the Page
- Visibility specification. <a href=#refsPAGEVIS>[PAGEVIS]</a></p>
+ <p class=note>This is specifically intended for use by the Page Visibility specification. <a href=#refsPAGEVIS>[PAGEVIS]</a></p>
</li>
- <li><p><i>Unload event</i>: If the <code><a href=#document>Document</a></code>'s
- <a href=#fired-unload>fired unload</a> flag is false, <a href=#fire-a-simple-event>fire a simple
- event</a> named <code title=event-unload>unload</code> at the
+ <li><p><i>Unload event</i>: If the <code><a href=#document>Document</a></code>'s <a href=#fired-unload>fired unload</a> flag is
+ false, <a href=#fire-a-simple-event>fire a simple event</a> named <code title=event-unload>unload</code> at the
<code><a href=#document>Document</a></code>'s <code><a href=#window>Window</a></code> object.</li>
- <li><p>Decrease the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination
- nesting level</a> by one.</li>
+ <li><p>Decrease the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination nesting level</a> by
+ one.</li>
<li><p>Release the <a href=#storage-mutex>storage mutex</a>.</li>
- <li><p>If any event listeners were triggered by the earlier
- <i>unload event</i> step, then set the <code><a href=#document>Document</a></code>
- object's <var title=concept-document-salvageable><a href=#concept-document-salvageable>salvageable</a></var> state to
- false and set the <code><a href=#document>Document</a></code>'s <a href=#fired-unload>fired unload</a>
- flag to true.</li>
+ <li><p>If any event listeners were triggered by the earlier <i>unload event</i> step, then set
+ the <code><a href=#document>Document</a></code> object's <var title=concept-document-salvageable><a href=#concept-document-salvageable>salvageable</a></var>
+ state to false and set the <code><a href=#document>Document</a></code>'s <a href=#fired-unload>fired unload</a> flag to
+ true.</li>
- <li><p>Run any <a href=#unloading-document-cleanup-steps>unloading document cleanup steps</a> for
- <code><a href=#document>Document</a></code> that are defined by this specification and
- <a href=#other-applicable-specifications>other applicable specifications</a>.</li>
+ <li><p>Run any <a href=#unloading-document-cleanup-steps>unloading document cleanup steps</a> for <code><a href=#document>Document</a></code> that are
+ defined by this specification and <a href=#other-applicable-specifications>other applicable specifications</a>.</li>
- <li><p>If this algorithm was invoked by another instance of the
- "unload a document" algorithm (i.e. by the steps below that invoke
- this algorithm for all descendant browsing contexts), then jump to
- the step labeled <i>end</i>.</li>
+ <li><p>If this algorithm was invoked by another instance of the "unload a document" algorithm
+ (i.e. by the steps below that invoke this algorithm for all descendant browsing contexts), then
+ jump to the step labeled <i>end</i>.</li>
- <li><p>Let <var title="">descendants</var> be the <a href=#list-of-the-descendant-browsing-contexts>list of the
- descendant browsing contexts</a> of the
- <code><a href=#document>Document</a></code>.</li>
+ <li><p>Let <var title="">descendants</var> be the <a href=#list-of-the-descendant-browsing-contexts>list of the descendant browsing
+ contexts</a> of the <code><a href=#document>Document</a></code>.</li>
<li>
- <p>If <var title="">descendants</var> is not an empty list, then
- for each <a href=#browsing-context>browsing context</a> <var title="">b</var> in
- <var title="">descendants</var> run the following substeps:</p>
+ <p>If <var title="">descendants</var> is not an empty list, then for each <a href=#browsing-context>browsing
+ context</a> <var title="">b</var> in <var title="">descendants</var> run the following
+ substeps:</p>
- <ol><li><p><a href=#unload-a-document title="unload a document">Unload</a> the
- <a href=#active-document>active document</a> of the <a href=#browsing-context>browsing context</a>
- <var title="">b</var> with the <var title="">recycle</var>
+ <ol><li><p><a href=#unload-a-document title="unload a document">Unload</a> the <a href=#active-document>active document</a> of the
+ <a href=#browsing-context>browsing context</a> <var title="">b</var> with the <var title="">recycle</var>
parameter set to false.</li>
- <li><p>If <var title=concept-document-salvageable><a href=#concept-document-salvageable>salvageable</a></var> state of
- the <a href=#active-document>active document</a> of the <a href=#browsing-context>browsing
- context</a> <var title="">b</var> is false, then set the <var title=concept-document-salvageable><a href=#concept-document-salvageable>salvageable</a></var> state of
- <em>this</em> document to false also.</li>
+ <li><p>If <var title=concept-document-salvageable><a href=#concept-document-salvageable>salvageable</a></var> state of the <a href=#active-document>active
+ document</a> of the <a href=#browsing-context>browsing context</a> <var title="">b</var> is false, then set
+ the <var title=concept-document-salvageable><a href=#concept-document-salvageable>salvageable</a></var> state of <em>this</em> document
+ to false also.</li>
</ol></li>
@@ -71856,51 +71744,44 @@
<h5 id=definitions-1><span class=secno>7.1.4.1 </span>Definitions</h5>
- <p>To coordinate events, user interaction, scripts, rendering,
- networking, and so forth, user agents must use <dfn id=event-loop title="event
- loop">event loops</dfn> as described in this section.</p>
+ <p>To coordinate events, user interaction, scripts, rendering, networking, and so forth, user
+ agents must use <dfn id=event-loop title="event loop">event loops</dfn> as described in this section.</p>
- <p>There must be at least one <a href=#event-loop>event loop</a> per user
- agent, and at most one <a href=#event-loop>event loop</a> per <a href=#unit-of-related-similar-origin-browsing-contexts>unit of
- related similar-origin browsing contexts</a>.</p>
+ <p>There must be at least one <a href=#event-loop>event loop</a> per user agent, and at most one <a href=#event-loop>event
+ loop</a> per <a href=#unit-of-related-similar-origin-browsing-contexts>unit of related similar-origin browsing contexts</a>.</p>
- <p class=note>When there is more than one <a href=#event-loop>event loop</a>
- for a <a href=#unit-of-related-browsing-contexts>unit of related browsing contexts</a>, complications
- arise when a <a href=#browsing-context>browsing context</a> in that group is <a href=#navigate title=navigate>navigated</a> such that it switches from one
- <a href=#unit-of-related-similar-origin-browsing-contexts>unit of related similar-origin browsing contexts</a> to
- another. This specification does not currently describe how to
- handle these complications.</p>
+ <p class=note>When there is more than one <a href=#event-loop>event loop</a> for a <a href=#unit-of-related-browsing-contexts>unit of related
+ browsing contexts</a>, complications arise when a <a href=#browsing-context>browsing context</a> in that group
+ is <a href=#navigate title=navigate>navigated</a> such that it switches from one <a href=#unit-of-related-similar-origin-browsing-contexts>unit of related
+ similar-origin browsing contexts</a> to another. This specification does not currently describe
+ how to handle these complications.</p>
- <p>An <a href=#event-loop>event loop</a> always has at least one <a href=#browsing-context>browsing
- context</a>. If an <a href=#event-loop>event loop</a>'s <a href=#browsing-context title="browsing context">browsing contexts</a> all go away, then
- the <a href=#event-loop>event loop</a> goes away as well. A <a href=#browsing-context>browsing
- context</a> always has an <a href=#event-loop>event loop</a> coordinating
- its activities.</p>
+ <p>An <a href=#event-loop>event loop</a> always has at least one <a href=#browsing-context>browsing context</a>. If an
+ <a href=#event-loop>event loop</a>'s <a href=#browsing-context title="browsing context">browsing contexts</a> all go away,
+ then the <a href=#event-loop>event loop</a> goes away as well. A <a href=#browsing-context>browsing context</a> always has an
+ <a href=#event-loop>event loop</a> coordinating its activities.</p>
+ <p>An <a href=#event-loop>event loop</a> has one or more <dfn id=task-queue title="task queue">task queues</dfn>. A
+ <a href=#task-queue>task queue</a> is an ordered list of <dfn id=concept-task title=concept-task>tasks</dfn>, which can
+ be:</p>
- <p>An <a href=#event-loop>event loop</a> has one or more <dfn id=task-queue title="task
- queue">task queues</dfn>. A <a href=#task-queue>task queue</a> is an ordered
- list of <dfn id=concept-task title=concept-task>tasks</dfn>, which can be:</p>
-
<dl><dt>Events</dt>
<dd>
- <p>Asynchronously dispatching an <code><a href=#event>Event</a></code> object at a
- particular <code><a href=#eventtarget>EventTarget</a></code> object is a task.</p>
+ <p>Asynchronously dispatching an <code><a href=#event>Event</a></code> object at a particular
+ <code><a href=#eventtarget>EventTarget</a></code> object is a task.</p>
- <p class=note>Not all events are dispatched using the <a href=#task-queue>task
- queue</a>, many are dispatched synchronously during other
- tasks.</p>
+ <p class=note>Not all events are dispatched using the <a href=#task-queue>task queue</a>, many are
+ dispatched synchronously during other tasks.</p>
</dd>
<dt>Parsing</dt>
- <dd><p>The <a href=#html-parser>HTML parser</a> tokenizing one or more bytes,
- and then processing any resulting tokens, is typically a
- task.</dd>
+ <dd><p>The <a href=#html-parser>HTML parser</a> tokenizing one or more bytes, and then processing any
+ resulting tokens, is typically a task.</dd>
<dt>Callbacks</dt>
@@ -71910,81 +71791,64 @@
<dt>Using a resource</dt>
- <dd><p>When an algorithm <a href=#fetch title=fetch>fetches</a> a
- resource, if the fetching occurs asynchronously then the processing
- of the resource once some or all of the resource is available is a
- task.</dd>
+ <dd><p>When an algorithm <a href=#fetch title=fetch>fetches</a> a resource, if the fetching occurs
+ asynchronously then the processing of the resource once some or all of the resource is available
+ is a task.</dd>
<dt>Reacting to DOM manipulation</dt>
- <dd><p>Some elements have tasks that trigger in response to DOM
- manipulation, e.g. when that element is <a href=#insert-an-element-into-a-document title="insert an
- element into a document">inserted into the document</a>.</p>
+ <dd><p>Some elements have tasks that trigger in response to DOM manipulation, e.g. when that
+ element is <a href=#insert-an-element-into-a-document title="insert an element into a document">inserted into the document</a>.</p>
- </dl><p>When a user agent is to <dfn id=queue-a-task>queue a task</dfn>, it must add the
- given task to one of the <a href=#task-queue title="task queue">task queues</a>
- of the relevant <a href=#event-loop>event loop</a>. All the tasks from one
- particular <dfn id=task-source>task source</dfn> (e.g. the callbacks generated by
- timers, the events fired for mouse movements, the tasks queued for
- the parser) must always be added to the same <a href=#task-queue>task
- queue</a>, but tasks from different <a href=#task-source title="task
- source">task sources</a> may be placed in different <a href=#task-queue title="task queue">task queues</a>.</p>
+ </dl><p>When a user agent is to <dfn id=queue-a-task>queue a task</dfn>, it must add the given task to one of the <a href=#task-queue title="task queue">task queues</a> of the relevant <a href=#event-loop>event loop</a>. All the tasks from
+ one particular <dfn id=task-source>task source</dfn> (e.g. the callbacks generated by timers, the events fired
+ for mouse movements, the tasks queued for the parser) must always be added to the same <a href=#task-queue>task
+ queue</a>, but tasks from different <a href=#task-source title="task source">task sources</a> may be placed
+ in different <a href=#task-queue title="task queue">task queues</a>.</p>
- <p class=example>For example, a user agent could have one
- <a href=#task-queue>task queue</a> for mouse and key events (the <a href=#user-interaction-task-source>user
- interaction task source</a>), and another for everything
- else. The user agent could then give keyboard and mouse events
- preference over other tasks three quarters of the time, keeping the
- interface responsive but not starving other task queues, and never
- processing events from any one <a href=#task-source>task source</a> out of
- order.</p>
+ <p class=example>For example, a user agent could have one <a href=#task-queue>task queue</a> for mouse and
+ key events (the <a href=#user-interaction-task-source>user interaction task source</a>), and another for everything else. The
+ user agent could then give keyboard and mouse events preference over other tasks three quarters of
+ the time, keeping the interface responsive but not starving other task queues, and never
+ processing events from any one <a href=#task-source>task source</a> out of order.</p>
- <p>Each <a href=#concept-task title=concept-task>task</a> that is <a href=#queue-a-task title="queue a task">queued</a> onto a <a href=#task-queue>task queue</a> of
- an <a href=#event-loop>event loop</a> defined by this specification is
- associated with a <code><a href=#document>Document</a></code>; if the task was queued in
- the context of an element, then it is the element's
- <code><a href=#document>Document</a></code>; if the task was queued in the context of a
- <a href=#browsing-context>browsing context</a>, then it is the <a href=#browsing-context>browsing
- context</a>'s <a href=#active-document>active document</a> at the time the task
- was queued; if the task was queued by or for a <a href=#concept-script title=concept-script>script</a> then the document is the
- <a href="#script's-document">script's document</a>.</p>
+ <p>Each <a href=#concept-task title=concept-task>task</a> that is <a href=#queue-a-task title="queue a task">queued</a>
+ onto a <a href=#task-queue>task queue</a> of an <a href=#event-loop>event loop</a> defined by this specification is
+ associated with a <code><a href=#document>Document</a></code>; if the task was queued in the context of an element, then
+ it is the element's <code><a href=#document>Document</a></code>; if the task was queued in the context of a
+ <a href=#browsing-context>browsing context</a>, then it is the <a href=#browsing-context>browsing context</a>'s <a href=#active-document>active
+ document</a> at the time the task was queued; if the task was queued by or for a <a href=#concept-script title=concept-script>script</a> then the document is the <a href="#script's-document">script's document</a>.</p>
- <p>A user agent may have one <dfn id=storage-mutex>storage mutex</dfn>. This mutex is
- used to control access to shared state like cookies. At any one
- point, the <a href=#storage-mutex>storage mutex</a> is either free, or owned by a
- particular <a href=#event-loop>event loop</a> or instance of the <a href=#fetch title=fetch>fetching</a> algorithm.</p>
+ <p>A user agent may have one <dfn id=storage-mutex>storage mutex</dfn>. This mutex is used to control access to
+ shared state like cookies. At any one point, the <a href=#storage-mutex>storage mutex</a> is either free, or
+ owned by a particular <a href=#event-loop>event loop</a> or instance of the <a href=#fetch title=fetch>fetching</a> algorithm.</p>
- <p>If a user agent does not implement a <a href=#storage-mutex>storage mutex</a>,
- it is exempt from implementing the requirements that require it to
- acquire or release it.</p>
+ <p>If a user agent does not implement a <a href=#storage-mutex>storage mutex</a>, it is exempt from implementing
+ the requirements that require it to acquire or release it.</p>
- <p class=note>User agent implementors have to make a choice
- between two evils. On the one hand, not implementing the storage
- mutex means that there is a risk of data corruption: a site could,
- for instance, try to read a cookie, increment its value, then write
- it back out, using the new value of the cookie as a unique
- identifier for the session; if the site does this twice in two
- different browser windows at the same time, it might end up using
- the same "unique" identifier for both sessions, with potentially
- disastrous effects. On the other hand, implementing the storage
- mutex has potentially serious performance implications: whenever a
- site uses Web Storage or cookies, all other sites that try to use
- Web Storage or cookies are blocked until the first site finishes.</p>
+ <p class=note>User agent implementors have to make a choice between two evils. On the one hand,
+ not implementing the storage mutex means that there is a risk of data corruption: a site could,
+ for instance, try to read a cookie, increment its value, then write it back out, using the new
+ value of the cookie as a unique identifier for the session; if the site does this twice in two
+ different browser windows at the same time, it might end up using the same "unique" identifier for
+ both sessions, with potentially disastrous effects. On the other hand, implementing the storage
+ mutex has potentially serious performance implications: whenever a site uses Web Storage or
+ cookies, all other sites that try to use Web Storage or cookies are blocked until the first site
+ finishes.</p>
- <p>Whenever a <a href=#concept-script title=concept-script>script</a> calls into
- a <a href=#plugin>plugin</a>, and whenever a <a href=#plugin>plugin</a> calls into
- a <a href=#concept-script title=concept-script>script</a>, the user agent must
- release the <a href=#storage-mutex>storage mutex</a>.</p>
+ <p>Whenever a <a href=#concept-script title=concept-script>script</a> calls into a <a href=#plugin>plugin</a>, and
+ whenever a <a href=#plugin>plugin</a> calls into a <a href=#concept-script title=concept-script>script</a>, the user
+ agent must release the <a href=#storage-mutex>storage mutex</a>.</p>
<h5 id=processing-model-4><span class=secno>7.1.4.2 </span>Processing model</h5>
- <p>An <a href=#event-loop>event loop</a> must continually run through the
- following steps for as long as it exists:</p>
+ <p>An <a href=#event-loop>event loop</a> must continually run through the following steps for as long as it
+ exists:</p>
<ol><!-- if you add a step here, make sure to go through the spec updating references to the "first
- step" of the event loop --><li><p>Run the oldest <a href=#concept-task title=concept-task>task</a> on one of the <a href=#event-loop>event
+ step" or "step 1" of the event loop --><li><p>Run the oldest <a href=#concept-task title=concept-task>task</a> on one of the <a href=#event-loop>event
loop</a>'s <a href=#task-queue title="task queue">task queues</a>, if any, ignoring tasks whose
associated <code><a href=#document>Document</a></code>s are not <a href=#fully-active>fully active</a>. The user agent may pick any
<a href=#task-queue>task queue</a>.</li>
@@ -72002,28 +71866,23 @@
<li><p><a href=#provide-a-stable-state>Provide a stable state</a>.</li>
- <li><p>If necessary, update the rendering or user interface of any
- <code><a href=#document>Document</a></code> or <a href=#browsing-context>browsing context</a> to reflect
- the current state.</li>
+ <li><p>If necessary, update the rendering or user interface of any <code><a href=#document>Document</a></code> or
+ <a href=#browsing-context>browsing context</a> to reflect the current state.</li>
- <li><p>Return to the first step of the <a href=#event-loop>event
- loop</a>.</li>
+ <li><p>Return to the first step of the <a href=#event-loop>event loop</a>.</li>
- </ol><hr><p>When a user agent is to <dfn id=perform-a-microtask-checkpoint>perform a microtask
- checkpoint</dfn>, if the <a href=#running-mutation-observers>running mutation observers</a>
- flag is false, then the user agent must run the following steps:</p>
+ </ol><hr><p>When a user agent is to <dfn id=perform-a-microtask-checkpoint>perform a microtask checkpoint</dfn>, if the <a href=#running-mutation-observers>running
+ mutation observers</a> flag is false, then the user agent must run the following steps:</p>
- <ol><li><p>Let the <a href=#running-mutation-observers>running mutation observers</a> flag be
- true.</li>
+ <ol><li><p>Let the <a href=#running-mutation-observers>running mutation observers</a> flag be true.</li>
<li><p><a href=#sort-the-tables-with-pending-sorts>Sort the tables with pending sorts</a>.</li>
<li>
- <p><a href=#concept-mo-invoke title=concept-mo-invoke>Invoke
- <code>MutationObserver</code> objects</a> for the <a href=#unit-of-related-similar-origin-browsing-contexts>unit
- of related similar-origin browsing contexts</a> to which the
- <a href="#script's-browsing-context">script's browsing context</a> belongs.</p>
+ <p><a href=#concept-mo-invoke title=concept-mo-invoke>Invoke <code>MutationObserver</code> objects</a> for the
+ <a href=#unit-of-related-similar-origin-browsing-contexts>unit of related similar-origin browsing contexts</a> to which the <a href="#script's-browsing-context">script's
+ browsing context</a> belongs.</p>
<p class=note>This will typically invoke scripted callbacks, which calls the <a href=#jump-to-a-code-entry-point>jump to a
code entry-point</a> algorithm, which calls this <a href=#perform-a-microtask-checkpoint>perform a microtask checkpoint</a>
@@ -72032,8 +71891,7 @@
</li>
- <li><p>Let the <a href=#running-mutation-observers>running mutation observers</a> flag be
- false.</li>
+ <li><p>Let the <a href=#running-mutation-observers>running mutation observers</a> flag be false.</li>
</ol><hr><p>When the user agent is to <dfn id=provide-a-stable-state>provide a stable state</dfn>, if any asynchronously-running
algorithms are <dfn id=await-a-stable-state title="await a stable state">awaiting a stable state</dfn>, then the user
@@ -72046,66 +71904,52 @@
<p class=note>Steps in <a href=#synchronous-section title="synchronous section">synchronous sections</a> are marked
with ⌛.</p>
- <hr><p>When an algorithm says to <dfn id=spin-the-event-loop>spin the event loop</dfn> until
- a condition <var title="">goal</var> is met, the user agent must run
- the following steps:</p>
+ <hr><p>When an algorithm says to <dfn id=spin-the-event-loop>spin the event loop</dfn> until a condition <var title="">goal</var> is met, the user agent must run the following steps:</p>
- <ol><li><p>Let <var title="">task source</var> be the <a href=#task-source>task
- source</a> of the currently running <a href=#concept-task title=concept-task>task</a>.</li>
+ <ol><li><p>Let <var title="">task source</var> be the <a href=#task-source>task source</a> of the currently
+ running <a href=#concept-task title=concept-task>task</a>.</li>
<li>
<p>Stop the currently running <a href=#concept-task title=concept-task>task</a>, allowing the <a href=#event-loop>event
- loop</a> to resume, but continue these steps
- asynchronously.</p>
+ loop</a> to resume, but continue these steps asynchronously.</p>
- <p class=note>This causes the <a href=#event-loop>event loop</a> to move on
- to the second step of its processing model (defined above).</p>
+ <p class=note>This causes the <a href=#event-loop>event loop</a> to move on to the second step of its
+ processing model (defined above).</p>
</li>
- <li><p>Wait until the condition <var title="">goal</var> is
- met.</li>
+ <li><p>Wait until the condition <var title="">goal</var> is met.</li>
- <li><p><a href=#queue-a-task>Queue a task</a> to continue running these steps,
- using the <a href=#task-source>task source</a> <var title="">task
- source</var>. Wait until this task runs before continuing these
+ <li><p><a href=#queue-a-task>Queue a task</a> to continue running these steps, using the <a href=#task-source>task
+ source</a> <var title="">task source</var>. Wait until this task runs before continuing these
steps.</li>
<li><p>Return to the caller.</li>
- </ol><hr><p>Some of the algorithms in this specification, for historical
- reasons, require the user agent to <dfn id=pause>pause</dfn> while running a
- <a href=#concept-task title=concept-task>task</a> until a condition <var title="">goal</var> is met. This means running the following
- steps:</p>
+ </ol><hr><p>Some of the algorithms in this specification, for historical reasons, require the user agent to
+ <dfn id=pause>pause</dfn> while running a <a href=#concept-task title=concept-task>task</a> until a condition <var title="">goal</var> is met. This means running the following steps:</p>
- <ol><li><p>If any asynchronously-running algorithms are <a href=#await-a-stable-state title="await a stable state">awaiting a stable state</a>, then
- run their <a href=#synchronous-section>synchronous section</a> and then resume running
- their asynchronous algorithm. (See the <a href=#event-loop>event loop</a>
- processing model definition above for details.)</p>
+ <ol><li><p>If any asynchronously-running algorithms are <a href=#await-a-stable-state title="await a stable state">awaiting a
+ stable state</a>, then run their <a href=#synchronous-section>synchronous section</a> and then resume running
+ their asynchronous algorithm. (See the <a href=#event-loop>event loop</a> processing model definition above
+ for details.)</p>
- <li><p>If necessary, update the rendering or user interface of any
- <code><a href=#document>Document</a></code> or <a href=#browsing-context>browsing context</a> to reflect
- the current state.</li>
+ <li><p>If necessary, update the rendering or user interface of any <code><a href=#document>Document</a></code> or
+ <a href=#browsing-context>browsing context</a> to reflect the current state.</li>
- <li><p>Wait until the condition <var title="">goal</var> is met.
- While a user agent has a paused <a href=#concept-task title=concept-task>task</a>, the corresponding <a href=#event-loop>event
- loop</a> must not run further <a href=#concept-task title=concept-task>tasks</a>, and any script in the currently
- running <a href=#concept-task title=concept-task>task</a> must block. User
- agents should remain responsive to user input while paused,
- however, albeit in a reduced capacity since the <a href=#event-loop>event
- loop</a> will not be doing anything.</li>
+ <li><p>Wait until the condition <var title="">goal</var> is met. While a user agent has a paused
+ <a href=#concept-task title=concept-task>task</a>, the corresponding <a href=#event-loop>event loop</a> must not run
+ further <a href=#concept-task title=concept-task>tasks</a>, and any script in the currently running <a href=#concept-task title=concept-task>task</a> must block. User agents should remain responsive to user input
+ while paused, however, albeit in a reduced capacity since the <a href=#event-loop>event loop</a> will not be
+ doing anything.</li>
- </ol><hr><p>When a user agent is to <dfn id=obtain-the-storage-mutex>obtain the storage mutex</dfn> as
- part of running a <a href=#concept-task title=concept-task>task</a>, it must
- run through the following steps:</p>
+ </ol><hr><p>When a user agent is to <dfn id=obtain-the-storage-mutex>obtain the storage mutex</dfn> as part of running a <a href=#concept-task title=concept-task>task</a>, it must run through the following steps:</p>
- <ol><li><p>If the <a href=#storage-mutex>storage mutex</a> is already owned by this
- <a href=#concept-task title=concept-task>task</a>'s <a href=#event-loop>event loop</a>,
- then abort these steps.</li>
+ <ol><li><p>If the <a href=#storage-mutex>storage mutex</a> is already owned by this <a href=#concept-task title=concept-task>task</a>'s <a href=#event-loop>event loop</a>, then abort these steps.</li>
- <li><p>Otherwise, <a href=#pause>pause</a> until the <a href=#storage-mutex>storage
- mutex</a> can be taken by the <a href=#event-loop>event loop</a>.</li>
+ <li><p>Otherwise, <a href=#pause>pause</a> until the <a href=#storage-mutex>storage mutex</a> can be taken by the
+ <a href=#event-loop>event loop</a>.</li>
<li><p>Take ownership of the <a href=#storage-mutex>storage mutex</a>.</li>
@@ -72116,17 +71960,15 @@
<h5 id=generic-task-sources><span class=secno>7.1.4.3 </span>Generic task sources</h5>
- <p>The following <a href=#task-source title="task source">task sources</a> are
- used by a number of mostly unrelated features in this and other
- specifications.</p>
+ <p>The following <a href=#task-source title="task source">task sources</a> are used by a number of mostly
+ unrelated features in this and other specifications.</p>
<dl><dt>The <dfn id=dom-manipulation-task-source>DOM manipulation task source</dfn></dt>
<dd>
- <p>This <a href=#task-source>task source</a> is used for features that react
- to DOM manipulations, such as things that happen asynchronously
- when an element is <a href=#insert-an-element-into-a-document title="insert an element into a
+ <p>This <a href=#task-source>task source</a> is used for features that react to DOM manipulations, such as
+ things that happen asynchronously when an element is <a href=#insert-an-element-into-a-document title="insert an element into a
document">inserted into the document</a>.</p>
</dd>
@@ -72135,14 +71977,12 @@
<dd>
- <p>This <a href=#task-source>task source</a> is used for features that react
- to user interaction, for example keyboard or mouse input.</p>
+ <p>This <a href=#task-source>task source</a> is used for features that react to user interaction, for
+ example keyboard or mouse input.</p>
- <p>Asynchronous events sent in response to user input (e.g. <code title=event-click><a href=#event-click>click</a></code> events) must be fired using
- <a href=#concept-task title=concept-task>tasks</a> <a href=#queue-a-task title="queue a
- task">queued</a> with the <a href=#user-interaction-task-source>user interaction task
- source</a>. <a href=#refsDOMEVENTS>[DOMEVENTS]</a></p>
- <!-- user interaction events integration point -->
+ <p>Asynchronous events sent in response to user input (e.g. <code title=event-click><a href=#event-click>click</a></code> events) must be fired using <a href=#concept-task title=concept-task>tasks</a> <a href=#queue-a-task title="queue a task">queued</a> with the <a href=#user-interaction-task-source>user
+ interaction task source</a>. <a href=#refsDOMEVENTS>[DOMEVENTS]</a></p> <!-- user
+ interaction events integration point -->
</dd>
@@ -72150,19 +71990,16 @@
<dd>
- <p>This <a href=#task-source>task source</a> is used for features that trigger
- in response to network activity.</p>
+ <p>This <a href=#task-source>task source</a> is used for features that trigger in response to network
+ activity.</p>
- <!-- XHR should use this -->
-
</dd>
<dt>The <dfn id=history-traversal-task-source>history traversal task source</dfn></dt>
<dd>
- <p>This <a href=#task-source>task source</a> is used to queue calls to <code title=dom-history-back><a href=#dom-history-back>history.back()</a></code> and similar
- APIs.</p>
+ <p>This <a href=#task-source>task source</a> is used to queue calls to <code title=dom-history-back><a href=#dom-history-back>history.back()</a></code> and similar APIs.</p>
</dd>
@@ -73558,11 +73395,11 @@
</dl><div class=impl>
- <p>The <dfn id=dom-alert title=dom-alert><code>alert(<var title="">message</var>)</code></dfn> method, when invoked, must run
- the following steps:</p>
+ <p>The <dfn id=dom-alert title=dom-alert><code>alert(<var title="">message</var>)</code></dfn> method, when
+ invoked, must run the following steps:</p>
- <ol><li><p>If the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination nesting
- level</a> is non-zero, optionally abort these steps.</li>
+ <ol><li><p>If the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination nesting level</a> is non-zero,
+ optionally abort these steps.</li>
<li><p>Release the <a href=#storage-mutex>storage mutex</a>.</li>
@@ -73570,18 +73407,16 @@
to ignore all alerts, and would thus abort at this step whenever the method was
invoked.)</li>
- <li><p>Show the given <var title="">message</var> to the
- user.</li>
+ <li><p>Show the given <var title="">message</var> to the user.</li>
- <li><p>Optionally, <a href=#pause>pause</a> while waiting for for the
- user to acknowledge the message.</li>
+ <li><p>Optionally, <a href=#pause>pause</a> while waiting for for the user to acknowledge the
+ message.</li>
- </ol><p>The <dfn id=dom-confirm title=dom-confirm><code>confirm(<var title="">message</var>)</code></dfn> method, when invoked, must run
- the following steps:</p>
+ </ol><p>The <dfn id=dom-confirm title=dom-confirm><code>confirm(<var title="">message</var>)</code></dfn> method,
+ when invoked, must run the following steps:</p>
- <ol><li><p>If the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination nesting
- level</a> is non-zero, optionally abort these steps, returning
- false.</li>
+ <ol><li><p>If the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination nesting level</a> is non-zero,
+ optionally abort these steps, returning false.</li>
<li><p>Release the <a href=#storage-mutex>storage mutex</a>.</li>
@@ -73589,22 +73424,18 @@
the user the option to ignore all prompts, and would thus abort at this step whenever the method
was invoked.)</li>
- <li><p>Show the given <var title="">message</var> to the user, and
- ask the user to respond with a positive or negative
- response.</li>
+ <li><p>Show the given <var title="">message</var> to the user, and ask the user to respond with a
+ positive or negative response.</li>
- <li><p><a href=#pause>Pause</a> until the user responds either positively
- or negatively.</li>
+ <li><p><a href=#pause>Pause</a> until the user responds either positively or negatively.</li>
- <li><p>If the user responded positively, return true; otherwise,
- the user responded negatively: return false.</li>
+ <li><p>If the user responded positively, return true; otherwise, the user responded negatively:
+ return false.</li>
- </ol><p>The <dfn id=dom-prompt title=dom-prompt><code>prompt(<var title="">message</var>, <var title="">default</var>)</code></dfn>
- method, when invoked, must run the following steps:</p>
+ </ol><p>The <dfn id=dom-prompt title=dom-prompt><code>prompt(<var title="">message</var>, <var title="">default</var>)</code></dfn> method, when invoked, must run the following steps:</p>
- <ol><li><p>If the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination nesting
- level</a> is non-zero, optionally abort these steps, returning
- null.</li>
+ <ol><li><p>If the <a href=#event-loop>event loop</a>'s <a href=#termination-nesting-level>termination nesting level</a> is non-zero,
+ optionally abort these steps, returning null.</li>
<li><p>Release the <a href=#storage-mutex>storage mutex</a>.</li>
@@ -73612,16 +73443,14 @@
user the option to ignore all prompts, and would thus abort at this step whenever the method was
invoked.)</li>
- <li><p>Show the given <var title="">message</var> to the user, and
- ask the user to either respond with a string value or abort. The
- second argument is optional. If the second argument (<var title="">default</var>) is present, then the response must be
- defaulted to the value given by <var title="">default</var>.</li>
+ <li><p>Show the given <var title="">message</var> to the user, and ask the user to either respond
+ with a string value or abort. The second argument is optional. If the second argument (<var title="">default</var>) is present, then the response must be defaulted to the value given by
+ <var title="">default</var>.</li>
- <li><p><a href=#pause>Pause</a> while waiting for the user's
- response.</li>
+ <li><p><a href=#pause>Pause</a> while waiting for the user's response.</li>
- <li><p>If the user aborts, then return null; otherwise, return the
- string that the user responded with.</li>
+ <li><p>If the user aborts, then return null; otherwise, return the string that the user responded
+ with.</li>
</ol></div>
@@ -73766,29 +73595,22 @@
<li>
- <p>If the user agent is configured such that this invocation of
- <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> is
- somehow disabled, then return the empty string and abort these
- steps.</p>
+ <p>If the user agent is configured such that this invocation of <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> is somehow disabled, then return the empty
+ string and abort these steps.</p>
- <p class=note>User agents are expected to disable this method in
- certain cases to avoid user annoyance (e.g. as part of their popup
- blocker feature). For instance, a user agent could require that a
- site be white-listed before enabling this method, or the user
- agent could be configured to only allow one modal dialog at a
- time.</p>
+ <p class=note>User agents are expected to disable this method in certain cases to avoid user
+ annoyance (e.g. as part of their popup blocker feature). For instance, a user agent could
+ require that a site be white-listed before enabling this method, or the user agent could be
+ configured to only allow one modal dialog at a time.</p>
</li>
<li>
- <p>If the <a href=#active-sandboxing-flag-set>active sandboxing flag set</a>
- of the <a href=#active-document>active document</a>
- of the <a href="#script's-browsing-context" title="script's browsing context">browsing context</a>
- of the <a href=#concept-script title=concept-script>script</a> that invoked the method
- has its
- <a href=#sandboxed-auxiliary-navigation-browsing-context-flag>sandboxed auxiliary navigation browsing context flag</a>
- set, then return the empty string and abort these steps.</p>
+ <p>If the <a href=#active-sandboxing-flag-set>active sandboxing flag set</a> of the <a href=#active-document>active document</a> of the
+ <a href="#script's-browsing-context" title="script's browsing context">browsing context</a> of the <a href=#concept-script title=concept-script>script</a> that invoked the method has its <a href=#sandboxed-auxiliary-navigation-browsing-context-flag>sandboxed auxiliary
+ navigation browsing context flag</a> set, then return the empty string and abort these
+ steps.</p>
</li>
@@ -73797,17 +73619,13 @@
<p>Let <var title="">the list of background browsing
contexts</var> be a list of all the browsing contexts that:</p>
- <ul><li>are part of the same <a href=#unit-of-related-browsing-contexts>unit of related browsing
- contexts</a> as the browsing context of the
- <code><a href=#window>Window</a></code> object on which the <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> method was
- called, and that</li>
+ <ul><li>are part of the same <a href=#unit-of-related-browsing-contexts>unit of related browsing contexts</a> as the browsing context
+ of the <code><a href=#window>Window</a></code> object on which the <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> method was called, and that</li>
- <li>have an <a href=#active-document>active document</a> whose
- <a href=#origin>origin</a> is the <a href=#same-origin title="same origin">same</a>
- as the <a href=#origin>origin</a> of the <a href=#concept-script title=concept-script>script</a> that called the <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> method at
- the time the method was called,</li> <!-- Note that changing
- document.domain to talk to another domain doesn't make you able
- to block that domain -->
+ <li>have an <a href=#active-document>active document</a> whose <a href=#origin>origin</a> is the <a href=#same-origin title="same
+ origin">same</a> as the <a href=#origin>origin</a> of the <a href=#concept-script title=concept-script>script</a> that called the <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> method at the time the method was
+ called,</li> <!-- Note that changing document.domain to talk to another domain doesn't make you
+ able to block that domain -->
</ul><p>...as well as any browsing contexts that are nested inside any
of the browsing contexts matching those conditions.</p>
@@ -73816,105 +73634,87 @@
<li>
- <p>Disable the user interface for all the browsing contexts in
- <var title="">the list of background browsing contexts</var>. This
- should prevent the user from navigating those browsing contexts,
- causing events to be sent to those browsing context, or editing
- any content in those browsing contexts. However, it does not
- prevent those browsing contexts from receiving events from sources
- other than the user, from running scripts, from running
- animations, and so forth.</p>
+ <p>Disable the user interface for all the browsing contexts in <var title="">the list of
+ background browsing contexts</var>. This should prevent the user from navigating those browsing
+ contexts, causing events to be sent to those browsing context, or editing any content in those
+ browsing contexts. However, it does not prevent those browsing contexts from receiving events
+ from sources other than the user, from running scripts, from running animations, and so
+ forth.</p>
</li>
<li>
- <p>Create a new <a href=#auxiliary-browsing-context>auxiliary browsing context</a>, with the
- <a href=#opener-browsing-context>opener browsing context</a> being the browsing context of
- the <code><a href=#window>Window</a></code> object on which the <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> method was
- called. The new auxiliary browsing context has no name.</p>
+ <p>Create a new <a href=#auxiliary-browsing-context>auxiliary browsing context</a>, with the <a href=#opener-browsing-context>opener browsing
+ context</a> being the browsing context of the <code><a href=#window>Window</a></code> object on which the <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> method was called. The new auxiliary
+ browsing context has no name.</p>
- <p class=note>This <a href=#browsing-context>browsing context</a>'s
- <code><a href=#document>Document</a></code>s' <code><a href=#window>Window</a></code> objects all implement
- the <code><a href=#windowmodal>WindowModal</a></code> interface.</p>
+ <p class=note>This <a href=#browsing-context>browsing context</a>'s <code><a href=#document>Document</a></code>s' <code><a href=#window>Window</a></code>
+ objects all implement the <code><a href=#windowmodal>WindowModal</a></code> interface.</p>
</li>
<li>
- <p>Set all the flags
- in the new browsing context's <a href=#popup-sandboxing-flag-set>popup sandboxing flag set</a>
- that are set in the
- <a href=#active-sandboxing-flag-set>active sandboxing flag set</a>
- of the <a href=#active-document>active document</a>
- of the <a href="#script's-browsing-context" title="script's browsing context">browsing context</a>
- of the <a href=#concept-script title=concept-script>script</a> that invoked the method.
- The <a href="#script's-browsing-context" title="script's browsing context">browsing context</a>
- of the <a href=#concept-script title=concept-script>script</a> that invoked the method
- must be set as the new browsing context's
- <a href=#one-permitted-sandboxed-navigator>one permitted sandboxed navigator</a>.</p>
+ <p>Set all the flags in the new browsing context's <a href=#popup-sandboxing-flag-set>popup sandboxing flag set</a> that
+ are set in the <a href=#active-sandboxing-flag-set>active sandboxing flag set</a> of the <a href=#active-document>active document</a> of
+ the <a href="#script's-browsing-context" title="script's browsing context">browsing context</a> of the <a href=#concept-script title=concept-script>script</a> that invoked the method. The <a href="#script's-browsing-context" title="script's browsing
+ context">browsing context</a> of the <a href=#concept-script title=concept-script>script</a> that invoked
+ the method must be set as the new browsing context's <a href=#one-permitted-sandboxed-navigator>one permitted sandboxed
+ navigator</a>.</p>
</li>
<li>
- <p>Let the <a href=#dialog-arguments>dialog arguments</a> of the new browsing
- context be set to the value of <var title="">argument</var>, or
- the 'undefined' value if the argument was omitted.</p>
+ <p>Let the <a href=#dialog-arguments>dialog arguments</a> of the new browsing context be set to the value of <var title="">argument</var>, or the 'undefined' value if the argument was omitted.</p>
</li>
<li>
- <p>Let the <a href="#dialog-arguments'-origin">dialog arguments' origin</a> be the
- <a href=#origin>origin</a> of the <a href=#concept-script title=concept-script>script</a> that called the <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> method.</p>
+ <p>Let the <a href="#dialog-arguments'-origin">dialog arguments' origin</a> be the <a href=#origin>origin</a> of the <a href=#concept-script title=concept-script>script</a> that called the <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> method.</p>
</li>
<li>
- <p><a href=#navigate>Navigate</a><!--DONAV showModalDialog--> the new
- <a href=#browsing-context>browsing context</a> to the <a href=#absolute-url>absolute URL</a>
- that resulted from <a href=#resolve-a-url title="resolve a url">resolving</a>
- <var title="">url</var> earlier, with <a href=#replacement-enabled>replacement
- enabled</a>, and with the <a href="#script's-browsing-context" title="script's browsing
- context">browsing context</a> of the <a href=#concept-script title=concept-script>script</a> that invoked the method as
- the <a href=#source-browsing-context>source browsing context</a>.</p>
+ <p><a href=#navigate>Navigate</a><!--DONAV showModalDialog--> the new <a href=#browsing-context>browsing context</a> to
+ the <a href=#absolute-url>absolute URL</a> that resulted from <a href=#resolve-a-url title="resolve a url">resolving</a>
+ <var title="">url</var> earlier, with <a href=#replacement-enabled>replacement enabled</a>, and with the <a href="#script's-browsing-context" title="script's browsing context">browsing context</a> of the <a href=#concept-script title=concept-script>script</a> that invoked the method as the <a href=#source-browsing-context>source browsing
+ context</a>.</p>
</li>
<li>
- <p><a href=#spin-the-event-loop>Spin the event loop</a> until the new <a href=#browsing-context>browsing
- context</a> is closed. (The user agent must allow the user to
- indicate that the <a href=#browsing-context>browsing context</a> is to be
+ <p><a href=#spin-the-event-loop>Spin the event loop</a> until the new <a href=#browsing-context>browsing context</a> is closed. (The
+ user agent must allow the user to indicate that the <a href=#browsing-context>browsing context</a> is to be
closed.)</p>
</li>
<li>
- <p>Reenable the user interface for all the browsing contexts in
- <var title="">the list of background browsing contexts</var>.</p>
+ <p>Reenable the user interface for all the browsing contexts in <var title="">the list of
+ background browsing contexts</var>.</p>
</li>
<li>
- <p>Return the <a href=#auxiliary-browsing-context>auxiliary browsing context</a>'s
- <a href=#return-value>return value</a>.</p>
+ <p>Return the <a href=#auxiliary-browsing-context>auxiliary browsing context</a>'s <a href=#return-value>return value</a>.</p>
</li>
- </ol><p>The <code><a href=#window>Window</a></code> objects of <code><a href=#document>Document</a></code>s hosted
- by <a href=#browsing-context title="browsing context">browsing contexts</a> created
- by the above algorithm must also implement the
+ </ol><p>The <code><a href=#window>Window</a></code> objects of <code><a href=#document>Document</a></code>s hosted by <a href=#browsing-context title="browsing
+ context">browsing contexts</a> created by the above algorithm must also implement the
<code><a href=#windowmodal>WindowModal</a></code> interface.</p>
- <p class=note>When this happens, the members of the
- <code><a href=#windowmodal>WindowModal</a></code> interface, in JavaScript environments,
- appear to actually be part of the <code><a href=#window>Window</a></code> interface
- (e.g. they are on the same prototype chain as the <code title=dom-alert><a href=#dom-alert>window.alert()</a></code> method).</p>
+ <p class=note>When this happens, the members of the <code><a href=#windowmodal>WindowModal</a></code> interface, in
+ JavaScript environments, appear to actually be part of the <code><a href=#window>Window</a></code> interface (e.g.
+ they are on the same prototype chain as the <code title=dom-alert><a href=#dom-alert>window.alert()</a></code>
+ method).</p>
</div>
@@ -73927,8 +73727,7 @@
<dd>
- <p>Returns the <var title="">argument</var> argument that was
- passed to the <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> method.</p>
+ <p>Returns the <var title="">argument</var> argument that was passed to the <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> method.</p>
</dd>
@@ -73938,45 +73737,36 @@
<p>Returns the current return value for the window.</p>
- <p>Can be set, to change the value that will be returned by the
- <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code>
- method.</p>
+ <p>Can be set, to change the value that will be returned by the <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> method.</p>
</dd>
</dl><div class=impl>
- <p>Such browsing contexts have associated <dfn id=dialog-arguments>dialog
- arguments</dfn>, which are stored along with the <dfn id="dialog-arguments'-origin">dialog
- arguments' origin</dfn>. These values are set by the <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> method in the
- algorithm above, when the browsing context is created, based on the
- arguments provided to the method.</p>
+ <p>Such browsing contexts have associated <dfn id=dialog-arguments>dialog arguments</dfn>, which are stored along with
+ the <dfn id="dialog-arguments'-origin">dialog arguments' origin</dfn>. These values are set by the <code title=dom-showModalDialog><a href=#dom-showmodaldialog>showModalDialog()</a></code> method in the algorithm above, when the
+ browsing context is created, based on the arguments provided to the method.</p>
- <p>The <dfn id=dom-windowmodal-dialogarguments title=dom-WindowModal-dialogArguments><code>dialogArguments</code></dfn>
- IDL attribute, on getting, must check whether its browsing context's
- <a href=#active-document>active document</a>'s <a href=#origin>origin</a> is the <a href=#same-origin title="same origin">same</a> as the <a href="#dialog-arguments'-origin">dialog arguments'
- origin</a>. If it is, then the browsing context's <a href=#dialog-arguments>dialog
- arguments</a> must be returned unchanged. Otherwise, if the
- <a href=#dialog-arguments>dialog arguments</a> are an object, then the empty string
- must be returned, and if the <a href=#dialog-arguments>dialog arguments</a> are not
- an object, then the stringification of the <a href=#dialog-arguments>dialog
- arguments</a> must be returned.
+ <p>The <dfn id=dom-windowmodal-dialogarguments title=dom-WindowModal-dialogArguments><code>dialogArguments</code></dfn> IDL
+ attribute, on getting, must check whether its browsing context's <a href=#active-document>active document</a>'s
+ <a href=#origin>origin</a> is the <a href=#same-origin title="same origin">same</a> as the <a href="#dialog-arguments'-origin">dialog arguments'
+ origin</a>. If it is, then the browsing context's <a href=#dialog-arguments>dialog arguments</a> must be
+ returned unchanged. Otherwise, if the <a href=#dialog-arguments>dialog arguments</a> are an object, then the empty
+ string must be returned, and if the <a href=#dialog-arguments>dialog arguments</a> are not an object, then the
+ stringification of the <a href=#dialog-arguments>dialog arguments</a> must be returned.
- <p>These browsing contexts also have an associated <dfn id=return-value>return
- value</dfn>. The <a href=#return-value>return value</a> of a browsing context
- must be initialized to the empty string when the browsing context is
- created.</p>
+ <p>These browsing contexts also have an associated <dfn id=return-value>return value</dfn>. The <a href=#return-value>return
+ value</a> of a browsing context must be initialized to the empty string when the browsing
+ context is created.</p>
- <p>The <dfn id=dom-windowmodal-returnvalue title=dom-WindowModal-returnValue><code>returnValue</code></dfn>
- IDL attribute, on getting, must return the <a href=#return-value>return value</a>
- of its browsing context, and on setting, must set the <a href=#return-value>return
- value</a> to the given new value.</p>
+ <p>The <dfn id=dom-windowmodal-returnvalue title=dom-WindowModal-returnValue><code>returnValue</code></dfn> IDL attribute, on
+ getting, must return the <a href=#return-value>return value</a> of its browsing context, and on setting, must
+ set the <a href=#return-value>return value</a> to the given new value.</p>
</div>
<p class=note>The <code title=dom-window-close><a href=#dom-window-close>window.close()</a></code> method can be used to
close the browsing context.</p>
-<!--TOPIC:HTML-->
<!--TOPIC:DOM APIs-->
@@ -73986,12 +73776,10 @@
<div class=impl>
- <p>The <dfn id=dom-navigator title=dom-navigator><code>navigator</code></dfn>
- attribute of the <code><a href=#window>Window</a></code> interface must return an
- instance of the <code><a href=#navigator>Navigator</a></code> interface, which represents
- the identity and state of the user agent (the client), and allows
- Web pages to register themselves as potential protocol and content
- handlers:</p>
+ <p>The <dfn id=dom-navigator title=dom-navigator><code>navigator</code></dfn> attribute of the
+ <code><a href=#window>Window</a></code> interface must return an instance of the <code><a href=#navigator>Navigator</a></code> interface,
+ which represents the identity and state of the user agent (the client), and allows Web pages to
+ register themselves as potential protocol and content handlers:</p>
</div>
@@ -74013,9 +73801,8 @@
<div class=impl>
- <p>These interfaces are defined separately so that other
- specifications can re-use parts of the <code><a href=#navigator>Navigator</a></code>
- interface.</p>
+ <p>These interfaces are defined separately so that other specifications can re-use parts of the
+ <code><a href=#navigator>Navigator</a></code> interface.</p>
</div>
@@ -74787,11 +74574,10 @@
</dl><div class=impl>
- <p>The <dfn id=dom-navigator-yieldforstorageupdates title=dom-navigator-yieldForStorageUpdates><code>yieldForStorageUpdates()</code></dfn>
- method, when invoked, must, if the <a href=#storage-mutex>storage mutex</a> is
- owned by the <a href=#event-loop>event loop</a> of the <a href=#concept-task title=concept-task>task</a> that resulted in the method being
- called, release the <a href=#storage-mutex>storage mutex</a> so that it is once
- again free. Otherwise, it must do nothing.</p>
+ <p>The <dfn id=dom-navigator-yieldforstorageupdates title=dom-navigator-yieldForStorageUpdates><code>yieldForStorageUpdates()</code></dfn> method,
+ when invoked, must, if the <a href=#storage-mutex>storage mutex</a> is owned by the <a href=#event-loop>event loop</a> of
+ the <a href=#concept-task title=concept-task>task</a> that resulted in the method being called, release the
+ <a href=#storage-mutex>storage mutex</a> so that it is once again free. Otherwise, it must do nothing.</p>
</div>
@@ -74800,10 +74586,9 @@
<div class=impl>
- <p>The <dfn id=dom-external title=dom-external><code>external</code></dfn>
- attribute of the <code><a href=#window>Window</a></code> interface must return an
- instance of the <code><a href=#external>External</a></code> interface. The same object
- must be returned each time.</p>
+ <p>The <dfn id=dom-external title=dom-external><code>external</code></dfn> attribute of the <code><a href=#window>Window</a></code>
+ interface must return an instance of the <code><a href=#external>External</a></code> interface. The same object must be
+ returned each time.</p>
</div>
@@ -80083,38 +79868,32 @@
attribute <a href=#eventhandler>EventHandler</a> <a href=#handler-workerglobalscope-ononline title=handler-WorkerGlobalScope-ononline>ononline</a>;
};</pre>
- <p>The <dfn id=dom-workerglobalscope-self title=dom-WorkerGlobalScope-self><code>self</code></dfn> attribute
- must return the <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object itself.</p>
+ <p>The <dfn id=dom-workerglobalscope-self title=dom-WorkerGlobalScope-self><code>self</code></dfn> attribute must return the
+ <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object itself.</p>
- <p>The <dfn id=dom-workerglobalscope-location title=dom-WorkerGlobalScope-location><code>location</code></dfn>
- attribute must return the <code><a href=#workerlocation>WorkerLocation</a></code> object created
- for the <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object when the worker was
- created. It represents the <a href=#absolute-url>absolute URL</a> of the script
- that was used to initialize the worker, after any redirects.</p>
+ <p>The <dfn id=dom-workerglobalscope-location title=dom-WorkerGlobalScope-location><code>location</code></dfn> attribute must
+ return the <code><a href=#workerlocation>WorkerLocation</a></code> object created for the <code><a href=#workerglobalscope>WorkerGlobalScope</a></code>
+ object when the worker was created. It represents the <a href=#absolute-url>absolute URL</a> of the script that
+ was used to initialize the worker, after any redirects.</p>
<hr><p>When a script invokes the <dfn id=dom-workerglobalscope-close title=dom-WorkerGlobalScope-close><code>close()</code></dfn>
- method on a <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object, the user agent
- must run the following steps (atomically):</p>
+ method on a <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object, the user agent must run the following steps
+ (atomically):</p>
- <ol><li><p>Discard any <a href=#concept-task title=concept-task>tasks</a> that
- have been added to the <a href=#event-loop>event loop</a>'s <a href=#task-queue title="task
- queue">task queues</a>.</p>
+ <ol><li><p>Discard any <a href=#concept-task title=concept-task>tasks</a> that have been added to the
+ <a href=#event-loop>event loop</a>'s <a href=#task-queue title="task queue">task queues</a>.</p>
<!-- v2-onclose
- <li><p><span>Queue a task</span> to <span>fire a simple
- event</span> named <code title="event-worker-close">close</code> at the
- <code>WorkerGlobalScope</code> object.</p></li>
+ <li><p><span>Queue a task</span> to <span>fire a simple event</span> named <code
+ title="event-worker-close">close</code> at the <code>WorkerGlobalScope</code> object.</p></li>
-->
- <li><p>Set the worker's <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object's
- <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag to
- true. (This prevents any further tasks from being queued.)</li>
+ <li><p>Set the worker's <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object's <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag to true. (This prevents any further
+ tasks from being queued.)</li>
- </ol><hr><p>The following are the <a href=#event-handlers>event handlers</a> (and their
- corresponding <a href=#event-handler-event-type title="event handler event type">event handler
- event types</a>) that must be supported, as IDL attributes, by
- objects implementing the <code><a href=#workerglobalscope>WorkerGlobalScope</a></code>
- interface:</p>
+ </ol><hr><p>The following are the <a href=#event-handlers>event handlers</a> (and their corresponding <a href=#event-handler-event-type title="event
+ handler event type">event handler event types</a>) that must be supported, as IDL attributes,
+ by objects implementing the <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> interface:</p>
<table><thead><tr><th><a href=#event-handlers title="event handlers">Event handler</a> <th><a href=#event-handler-event-type>Event handler event type</a>
<tbody><!-- v2-onclose <tr><td><dfn title="handler-WorkerGlobalScope-onclose"><code>onclose</code></dfn> <td> <code title="event-worker-close">close</code> --><tr><td><dfn id=handler-workerglobalscope-onerror title=handler-WorkerGlobalScope-onerror><code>onerror</code></dfn> <td> <code title=event-error>error</code>
@@ -80223,191 +80002,159 @@
<h4 id=the-event-loop><span class=secno>9.2.2 </span>The event loop</h4>
- <p>Each <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object has an <a href=#event-loop>event
- loop</a> distinct from those defined for <a href=#unit-of-related-similar-origin-browsing-contexts title="unit of
- related similar-origin browsing contexts">units of related
- similar-origin browsing contexts</a>. This <a href=#event-loop>event
- loop</a> has no associated <a href=#browsing-context>browsing context</a>, and its
- <a href=#task-queue title="task queue">task queues</a> only have events,
- callbacks, and networking activity as <a href=#concept-task title=concept-task>tasks</a>. The processing model of these
- <a href=#event-loop title="event loop">event loops</a> is defined below in the
+ <p>Each <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object has an <a href=#event-loop>event loop</a> distinct from those
+ defined for <a href=#unit-of-related-similar-origin-browsing-contexts title="unit of related similar-origin browsing contexts">units of related
+ similar-origin browsing contexts</a>. This <a href=#event-loop>event loop</a> has no associated
+ <a href=#browsing-context>browsing context</a>, and its <a href=#task-queue title="task queue">task queues</a> only have
+ events, callbacks, and networking activity as <a href=#concept-task title=concept-task>tasks</a>. The
+ processing model of these <a href=#event-loop title="event loop">event loops</a> is defined below in the
<a href=#run-a-worker>run a worker</a> algorithm.</p>
- <p>Each <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object also has a <dfn id=dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</dfn> flag, which must
- initially be false, but which can get set to true by the algorithms
- in the processing model section below.</p>
+ <p>Each <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object also has a <dfn id=dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</dfn> flag, which must initially be false, but which
+ can get set to true by the algorithms in the processing model section below.</p>
- <p>Once the <code><a href=#workerglobalscope>WorkerGlobalScope</a></code>'s <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is set to
- true, the <a href=#event-loop>event loop</a>'s <a href=#task-queue title="task queue">task
- queues</a> must discard any further <a href=#concept-task title=concept-task>tasks</a> that would be added to them (tasks
- already on the queue are unaffected except where otherwise
- specified). Effectively, once the <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is true,
- timers stop firing, notifications for all pending asynchronous
- operations are dropped, etc.</p>
+ <p>Once the <code><a href=#workerglobalscope>WorkerGlobalScope</a></code>'s <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is set to true, the <a href=#event-loop>event
+ loop</a>'s <a href=#task-queue title="task queue">task queues</a> must discard any further <a href=#concept-task title=concept-task>tasks</a> that would be added to them (tasks already on the queue are
+ unaffected except where otherwise specified). Effectively, once the <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is true, timers stop firing,
+ notifications for all pending asynchronous operations are dropped, etc.</p>
<h4 id="the-worker's-lifetime"><span class=secno>9.2.3 </span>The worker's lifetime</h4>
- <p>Workers communicate with other workers and with <a href=#browsing-context title="browsing context">browsing contexts</a> through <a href=#channel-messaging title="channel messaging">message channels</a> and their
+ <p>Workers communicate with other workers and with <a href=#browsing-context title="browsing context">browsing
+ contexts</a> through <a href=#channel-messaging title="channel messaging">message channels</a> and their
<code><a href=#messageport>MessagePort</a></code> objects.</p>
- <p>Each <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> <var title="">worker global
- scope</var> has a list of <dfn id="the-worker's-ports">the worker's ports</dfn>, which
- consists of all the <code><a href=#messageport>MessagePort</a></code> objects that are
- entangled with another port and that have one (but only one) port
- owned by <var title="">worker global scope</var>. This list includes
- <!--all the <code>MessagePort</code> objects that are in events
- pending in the <span>event loop</span>, as well as (commented out
- because in practice it makes no difference either way as far as I
- can tell, and it would be hard to strictly implement since these
- ports might not yet be across the thread boundary)--> the implicit
- <code><a href=#messageport>MessagePort</a></code> in the case of <a href=#dedicatedworkerglobalscope title=DedicatedWorkerGlobalScope>dedicated workers</a>.</p>
+ <p>Each <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> <var title="">worker global scope</var> has a list of
+ <dfn id="the-worker's-ports">the worker's ports</dfn>, which consists of all the <code><a href=#messageport>MessagePort</a></code> objects that are
+ entangled with another port and that have one (but only one) port owned by <var title="">worker
+ global scope</var>. This list includes <!--all the <code>MessagePort</code> objects that are in
+ events pending in the <span>event loop</span>, as well as (commented out because in practice it
+ makes no difference either way as far as I can tell, and it would be hard to strictly implement
+ since these ports might not yet be across the thread boundary)--> the implicit
+ <code><a href=#messageport>MessagePort</a></code> in the case of <a href=#dedicatedworkerglobalscope title=DedicatedWorkerGlobalScope>dedicated
+ workers</a>.</p>
- <p>Each <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> also has a list of <dfn id="the-worker's-workers">the
- worker's workers</dfn>. Initially this list is empty; it is
- populated when the worker creates or obtains further workers.</p>
+ <p>Each <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> also has a list of <dfn id="the-worker's-workers">the worker's workers</dfn>.
+ Initially this list is empty; it is populated when the worker creates or obtains further
+ workers.</p>
- <p>Finally, each <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> also has a list of
- <dfn id="the-worker's-documents">the worker's <code>Document</code>s</dfn>. Initially this list
- is empty; it is populated when the worker is created.</p>
+ <p>Finally, each <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> also has a list of <dfn id="the-worker's-documents">the worker's
+ <code>Document</code>s</dfn>. Initially this list is empty; it is populated when the worker is
+ created.</p>
- <p>Whenever a <code><a href=#document>Document</a></code> <var title="">d</var> is <dfn id="add-a-document-to-the-worker's-documents" title="add a document to the worker's documents">added to the
- worker's <code>Document</code>s</dfn>, the user agent must, for each
- worker <var title="">q</var> in the list of <a href="#the-worker's-workers">the worker's
- workers</a> whose list of <a href="#the-worker's-documents">the worker's
- <code>Document</code>s</a> does not contain <var title="">d</var>, <a href="#add-a-document-to-the-worker's-documents" title="add a document to the worker's
- documents">add <var title="">d</var> to <var title="">q</var>'s
- <code>WorkerGlobalScope</code> owner's list of <span>the worker's
- <code>Document</code>s</span></a>.</p> <!-- suggestions welcome
- on making this sentence into understandable English -->
+ <p>Whenever a <code><a href=#document>Document</a></code> <var title="">d</var> is <dfn id="add-a-document-to-the-worker's-documents" title="add a document to the
+ worker's documents">added to the worker's <code>Document</code>s</dfn>, the user agent must, for
+ each worker <var title="">q</var> in the list of <a href="#the-worker's-workers">the worker's workers</a> whose list of
+ <a href="#the-worker's-documents">the worker's <code>Document</code>s</a> does not contain <var title="">d</var>, <a href="#add-a-document-to-the-worker's-documents" title="add a document to the worker's documents">add <var title="">d</var> to <var title="">q</var>'s <code>WorkerGlobalScope</code> owner's list of <span>the worker's
+ <code>Document</code>s</span></a>.</p> <!-- suggestions welcome on making this sentence into
+ understandable English -->
- <p>Whenever a <code><a href=#document>Document</a></code> object is <a href=#discard-a-document title="discard a
- Document">discarded</a>, it must be removed from the list of
- <a href="#the-worker's-documents">the worker's <code>Document</code>s</a> of each worker
- whose list contains that <code><a href=#document>Document</a></code>.</p>
+ <p>Whenever a <code><a href=#document>Document</a></code> object is <a href=#discard-a-document title="discard a Document">discarded</a>,
+ it must be removed from the list of <a href="#the-worker's-documents">the worker's <code>Document</code>s</a> of each
+ worker whose list contains that <code><a href=#document>Document</a></code>.</p>
- <p>Given a <a href="#script's-global-object">script's global object</a> <var title="">o</var>
- when creating or obtaining a worker, the <dfn id=list-of-relevant-document-objects-to-add>list of relevant
- <code>Document</code> objects to add</dfn> depends on the type of
- <var title="">o</var>. If <var title="">o</var> is a
- <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object (i.e. if we are creating a
- nested worker), then the relevant <code><a href=#document>Document</a></code>s are the
- <code><a href=#document>Document</a></code>s that are in <var title="">o</var>'s own list
- of <a href="#the-worker's-documents">the worker's <code>Document</code>s</a>. Otherwise, <var title="">o</var> is a <code><a href=#window>Window</a></code> object, and the relevant
- <code><a href=#document>Document</a></code> is just the <code><a href=#document>Document</a></code> that is the
- <a href=#active-document>active document</a> of the <code><a href=#window>Window</a></code> object <var title="">o</var>.</p>
+ <p>Given a <a href="#script's-global-object">script's global object</a> <var title="">o</var> when creating or obtaining a
+ worker, the <dfn id=list-of-relevant-document-objects-to-add>list of relevant <code>Document</code> objects to add</dfn> depends on the type
+ of <var title="">o</var>. If <var title="">o</var> is a <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object
+ (i.e. if we are creating a nested worker), then the relevant <code><a href=#document>Document</a></code>s are the
+ <code><a href=#document>Document</a></code>s that are in <var title="">o</var>'s own list of <a href="#the-worker's-documents">the worker's
+ <code>Document</code>s</a>. Otherwise, <var title="">o</var> is a <code><a href=#window>Window</a></code> object,
+ and the relevant <code><a href=#document>Document</a></code> is just the <code><a href=#document>Document</a></code> that is the <a href=#active-document>active
+ document</a> of the <code><a href=#window>Window</a></code> object <var title="">o</var>.</p>
- <hr><p>A worker is said to be a <dfn id=permissible-worker>permissible worker</dfn> if its
- list of <a href="#the-worker's-documents">the worker's <code>Document</code>s</a> is not
- empty.</p>
+ <hr><p>A worker is said to be a <dfn id=permissible-worker>permissible worker</dfn> if its list of <a href="#the-worker's-documents">the worker's
+ <code>Document</code>s</a> is not empty.</p>
- <p>A worker is said to be a <dfn id=protected-worker>protected worker</dfn> if it is a
- <a href=#permissible-worker>permissible worker</a> and either it has outstanding
- timers, database transactions, or network connections, or its list
- of <a href="#the-worker's-ports">the worker's ports</a> is not empty, or its
- <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> is actually a
- <code><a href=#sharedworkerglobalscope>SharedWorkerGlobalScope</a></code> object (i.e. the worker is a
- shared worker).</p>
+ <p>A worker is said to be a <dfn id=protected-worker>protected worker</dfn> if it is a <a href=#permissible-worker>permissible worker</a>
+ and either it has outstanding timers, database transactions, or network connections, or its list
+ of <a href="#the-worker's-ports">the worker's ports</a> is not empty, or its <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> is actually
+ a <code><a href=#sharedworkerglobalscope>SharedWorkerGlobalScope</a></code> object (i.e. the worker is a shared worker).</p>
- <p>A worker is said to be an <dfn id=active-needed-worker>active needed worker</dfn> if any
- of the <code><a href=#document>Document</a></code> objects in <a href="#the-worker's-documents">the worker's
- <code>Document</code>s</a> are <a href=#fully-active>fully active</a>.</p>
+ <p>A worker is said to be an <dfn id=active-needed-worker>active needed worker</dfn> if any of the <code><a href=#document>Document</a></code>
+ objects in <a href="#the-worker's-documents">the worker's <code>Document</code>s</a> are <a href=#fully-active>fully active</a>.</p>
- <p>A worker is said to be a <dfn id=suspendable-worker>suspendable worker</dfn> if it is
- not an <a href=#active-needed-worker>active needed worker</a> but it is a
- <a href=#permissible-worker>permissible worker</a>.</p>
+ <p>A worker is said to be a <dfn id=suspendable-worker>suspendable worker</dfn> if it is not an <a href=#active-needed-worker>active needed
+ worker</a> but it is a <a href=#permissible-worker>permissible worker</a>.</p>
<h4 id=processing-model-6><span class=secno>9.2.4 </span>Processing model</h4>
- <p>When a user agent is to <dfn id=run-a-worker>run a worker</dfn> for a script with
- <a href=#url>URL</a> <var title="">url</var>, a <a href=#browsing-context>browsing
- context</a> <var title="">owner browsing context</var>, a
- <code><a href=#document>Document</a></code> <var title="">owner document</var>, an
- <a href=#origin>origin</a> <var title="">owner origin</var>, and with
- global scope <var title="">worker global scope</var>, it must run
- the following steps:</p>
+ <p>When a user agent is to <dfn id=run-a-worker>run a worker</dfn> for a script with <a href=#url>URL</a> <var title="">url</var>, a <a href=#browsing-context>browsing context</a> <var title="">owner browsing context</var>, a
+ <code><a href=#document>Document</a></code> <var title="">owner document</var>, an <a href=#origin>origin</a> <var title="">owner origin</var>, and with global scope <var title="">worker global scope</var>, it
+ must run the following steps:</p>
<ol><li>
- <p>Create a separate parallel execution environment (i.e. a
- separate thread or process or equivalent construct), and run the
- rest of these steps asynchronously in that context.</p>
+ <p>Create a separate parallel execution environment (i.e. a separate thread or process or
+ equivalent construct), and run the rest of these steps asynchronously in that context.</p>
</li>
<li><p>If <var title="">worker global scope</var> is actually a
- <code><a href=#sharedworkerglobalscope>SharedWorkerGlobalScope</a></code> object (i.e. the worker is a
- shared worker), and there are any <a href=#relevant-application-cache title="relevant application
- cache">relevant application caches</a> that are identified by a
- manifest URL with the <a href=#same-origin>same origin</a> as <var title="">url</var> and that have <var title="">url</var> as one of
- their entries, <em>not</em> excluding entries marked as <a href=#concept-appcache-foreign title=concept-appcache-foreign>foreign</a>, then associate the
- <var title="">worker global scope</var> with the <a href=#concept-appcache-selection title=concept-appcache-selection>most appropriate application
+ <code><a href=#sharedworkerglobalscope>SharedWorkerGlobalScope</a></code> object (i.e. the worker is a shared worker), and there are
+ any <a href=#relevant-application-cache title="relevant application cache">relevant application caches</a> that are
+ identified by a manifest URL with the <a href=#same-origin>same origin</a> as <var title="">url</var> and
+ that have <var title="">url</var> as one of their entries, <em>not</em> excluding entries marked
+ as <a href=#concept-appcache-foreign title=concept-appcache-foreign>foreign</a>, then associate the <var title="">worker
+ global scope</var> with the <a href=#concept-appcache-selection title=concept-appcache-selection>most appropriate application
cache</a> of those that match.</li>
<li>
- <p>Attempt to <a href=#fetch>fetch</a><!--FETCH--> the resource
- identified by <var title="">url</var>, from the <var title="">owner origin</var>, using <var title="">owner
- document</var> as the <a href=#referrer-source>referrer source</a>, with the
- <i>synchronous flag</i> set and the <i>force same-origin flag</i>
- set.</p> <!-- not http-origin privacy sensitive (looking forward
- to CORS) -->
+ <p>Attempt to <a href=#fetch>fetch</a><!--FETCH--> the resource identified by <var title="">url</var>,
+ from the <var title="">owner origin</var>, using <var title="">owner document</var> as the
+ <a href=#referrer-source>referrer source</a>, with the <i>synchronous flag</i> set and the <i>force same-origin
+ flag</i> set.</p> <!-- not http-origin privacy sensitive (looking forward to CORS) -->
- <p>If the attempt fails, then for each <code><a href=#worker>Worker</a></code> or
- <code><a href=#sharedworker>SharedWorker</a></code> object associated with <var title="">worker global scope</var>, <a href=#queue-a-task>queue a task</a> to
- <a href=#fire-a-simple-event>fire a simple event</a> named <code title=event-error>error</code> at that object. Abort these
+ <p>If the attempt fails, then for each <code><a href=#worker>Worker</a></code> or <code><a href=#sharedworker>SharedWorker</a></code> object
+ associated with <var title="">worker global scope</var>, <a href=#queue-a-task>queue a task</a> to <a href=#fire-a-simple-event>fire
+ a simple event</a> named <code title=event-error>error</code> at that object. Abort these
steps.</p>
- <p>If the attempt succeeds, then let <var title="">source</var> be
- the script resource <a href=#decoded-as-utf-8,-with-error-handling>decoded as UTF-8, with error
- handling</a>.
+ <p>If the attempt succeeds, then let <var title="">source</var> be the script resource
+ <a href=#decoded-as-utf-8,-with-error-handling>decoded as UTF-8, with error handling</a>.
</p>
<p>Let <var title="">language</var> be JavaScript.</p>
- <p class=note>As with <code><a href=#the-script-element>script</a></code> elements, the MIME
- type of the script is ignored. Unlike with <code><a href=#the-script-element>script</a></code>
- elements, there is no way to override the type. It's always
+ <p class=note>As with <code><a href=#the-script-element>script</a></code> elements, the MIME type of the script is ignored.
+ Unlike with <code><a href=#the-script-element>script</a></code> elements, there is no way to override the type. It's always
assumed to be JavaScript.</p>
</li>
- <li><p>In the newly created execution environment, create a
- <a href=#javascript-global-environment>JavaScript global environment</a> whose <i>global
- object</i> is <var title="">worker global scope</var>. If <var title="">worker global scope</var> is a
- <code><a href=#dedicatedworkerglobalscope>DedicatedWorkerGlobalScope</a></code> object, then this is a
- <a href=#dedicated-worker-environment>dedicated worker environment</a>. Otherwise, <var title="">worker global scope</var> is a
- <code><a href=#sharedworkerglobalscope>SharedWorkerGlobalScope</a></code> object, and this is a
- <a href=#shared-worker-environment>shared worker environment</a>. (In either case, by
- definition, it is a <a href=#worker-environment>worker environment</a>.)</li>
+ <li><p>In the newly created execution environment, create a <a href=#javascript-global-environment>JavaScript global
+ environment</a> whose <i>global object</i> is <var title="">worker global scope</var>. If <var title="">worker global scope</var> is a <code><a href=#dedicatedworkerglobalscope>DedicatedWorkerGlobalScope</a></code> object, then this
+ is a <a href=#dedicated-worker-environment>dedicated worker environment</a>. Otherwise, <var title="">worker global
+ scope</var> is a <code><a href=#sharedworkerglobalscope>SharedWorkerGlobalScope</a></code> object, and this is a <a href=#shared-worker-environment>shared worker
+ environment</a>. (In either case, by definition, it is a <a href=#worker-environment>worker
+ environment</a>.)</li>
<li>
- <p>A new <a href=#concept-script title=concept-script>script</a> is now
- created, as follows.</p>
+ <p>A new <a href=#concept-script title=concept-script>script</a> is now created, as follows.</p>
- <p>Create a new <a href=#script-execution-environment>script execution environment</a>
- set up as appropriate for the scripting language <var title="">language</var>.</p>
+ <p>Create a new <a href=#script-execution-environment>script execution environment</a> set up as appropriate for the
+ scripting language <var title="">language</var>.</p>
- <p>Parse/compile/initialize <var title="">source</var> using that
- <a href=#script-execution-environment>script execution environment</a>, as appropriate for <var title="">language</var>, and thus obtain a <a href=#list-of-code-entry-points>list of code
- entry-points</a>; set the <i><a href=#initial-code-entry-point>initial code entry-point</a></i> to
- the entry-point for any executable code to be immediately run.</p>
+ <p>Parse/compile/initialize <var title="">source</var> using that <a href=#script-execution-environment>script execution
+ environment</a>, as appropriate for <var title="">language</var>, and thus obtain a
+ <a href=#list-of-code-entry-points>list of code entry-points</a>; set the <i><a href=#initial-code-entry-point>initial code entry-point</a></i> to the
+ entry-point for any executable code to be immediately run.</p>
<p>Set the <a href="#script's-global-object">script's global object</a> to <var title="">worker global scope</var>.</p>
- <p>Set the <a href="#script's-browsing-context">script's browsing context</a> to <var title="">owner browsing context</var>.</p>
+ <p>Set the <a href="#script's-browsing-context">script's browsing context</a> to <var title="">owner browsing
+ context</var>.</p>
- <p>Set the <a href="#script's-document">script's document</a> to <var title="">owner
- document</var>.</p>
+ <p>Set the <a href="#script's-document">script's document</a> to <var title="">owner document</var>.</p>
<p>Set the <a href="#script's-referrer-source">script's referrer source</a> to <var title="">url</var>.</p>
- <p>Set the <a href="#script's-url-character-encoding">script's URL character encoding</a> to
- UTF-8. (This is just used for encoding non-ASCII characters in the
- query component of URLs.)</p>
+ <p>Set the <a href="#script's-url-character-encoding">script's URL character encoding</a> to UTF-8. (This is just used for
+ encoding non-ASCII characters in the query component of URLs.)</p>
<p>Set the <a href="#script's-base-url">script's base URL</a> to <var title="">url</var>.</p>
@@ -80415,198 +80162,163 @@
<li>
- <p><strong>Closing orphan workers</strong>: Start monitoring the
- worker such that no sooner than it stops being either a
- <a href=#protected-worker>protected worker</a> or a <a href=#suspendable-worker>suspendable
- worker</a>, and no later than it stops being a
- <a href=#permissible-worker>permissible worker</a>, <var title="">worker global
- scope</var>'s <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is set
- to true<!-- v2-onclose and <span title="queue a task">a task is
- queued</span> to <span>fire a simple event</span> named <code
- title="event-worker-close">close</code> at <var title="">worker global
+ <p><strong>Closing orphan workers</strong>: Start monitoring the worker such that no sooner than
+ it stops being either a <a href=#protected-worker>protected worker</a> or a <a href=#suspendable-worker>suspendable worker</a>, and
+ no later than it stops being a <a href=#permissible-worker>permissible worker</a>, <var title="">worker global
+ scope</var>'s <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is set to true<!--
+ v2-onclose and <span title="queue a task">a task is queued</span> to <span>fire a simple
+ event</span> named <code title="event-worker-close">close</code> at <var title="">worker global
scope</var>-->.</p>
</li>
<li>
- <p><strong>Suspending workers</strong>: Start monitoring the
- worker, such that whenever <var title="">worker global
- scope</var>'s <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is false
- and the worker is a <a href=#suspendable-worker>suspendable worker</a>, the user
- agent suspends execution of script in that worker until such time
- as either the <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag switches
- to true or the worker stops being a <a href=#suspendable-worker>suspendable
- worker</a>.</p>
+ <p><strong>Suspending workers</strong>: Start monitoring the worker, such that whenever <var title="">worker global scope</var>'s <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a>
+ flag is false and the worker is a <a href=#suspendable-worker>suspendable worker</a>, the user agent suspends
+ execution of script in that worker until such time as either the <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag switches to true or the worker stops
+ being a <a href=#suspendable-worker>suspendable worker</a>.</p>
</li>
<li>
- <p><a href=#jump-to-a-code-entry-point title="jump to a code entry-point">Jump</a> to the
- <a href=#concept-script title=concept-script>script</a>'s <i><a href=#initial-code-entry-point>initial code
- entry-point</a></i>, and let that run until it either returns, fails
- to catch an exception, or gets prematurely aborted by the
- "<a href=#kill-a-worker>kill a worker</a>" or "<a href=#terminate-a-worker>terminate a worker</a>"
- algorithms defined below.</p>
+ <p><a href=#jump-to-a-code-entry-point title="jump to a code entry-point">Jump</a> to the <a href=#concept-script title=concept-script>script</a>'s <i><a href=#initial-code-entry-point>initial code entry-point</a></i>, and let that run until
+ it either returns, fails to catch an exception, or gets prematurely aborted by the "<a href=#kill-a-worker>kill a
+ worker</a>" or "<a href=#terminate-a-worker>terminate a worker</a>" algorithms defined below.</p>
<!-- v2-onclose
- <p class="note">If the script gets aborted by the "<span>kill a
- worker</span>" algorithm, then that same algorithm will cause
- there to only be a single <span title="concept-task">task</span>
- in the <span>event loop</span> at the next step, namely the task
- for the <code title="message-close">close</code> event. The
- "<span>terminate a worker</span>" algorithm removes all the
- events.</p>
+ <p class="note">If the script gets aborted by the "<span>kill a worker</span>" algorithm, then
+ that same algorithm will cause there to only be a single <span title="concept-task">task</span>
+ in the <span>event loop</span> at the next step, namely the task for the <code
+ title="message-close">close</code> event. The "<span>terminate a worker</span>" algorithm
+ removes all the events.</p>
-->
</li>
<li><p>If <var title="">worker global scope</var> is actually a
- <code><a href=#dedicatedworkerglobalscope>DedicatedWorkerGlobalScope</a></code> object (i.e. the worker is
- a dedicated worker), then enable the <a href=#port-message-queue>port message
- queue</a> of the worker's implicit port.</li>
+ <code><a href=#dedicatedworkerglobalscope>DedicatedWorkerGlobalScope</a></code> object (i.e. the worker is a dedicated worker), then
+ enable the <a href=#port-message-queue>port message queue</a> of the worker's implicit port.</li>
<li>
- <p><i title="">Event loop</i>: Wait until either there is a <a href=#concept-task title=concept-task>task</a> in one of the <a href=#event-loop>event
- loop</a>'s <a href=#task-queue title="task queue">task queues</a> or <var title="">worker global scope</var>'s <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is set
- to true.</p>
+ <p><i title="">Event loop</i>: Wait until either there is a <a href=#concept-task title=concept-task>task</a> in one of the <a href=#event-loop>event loop</a>'s <a href=#task-queue title="task
+ queue">task queues</a> or <var title="">worker global scope</var>'s <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is set to true.</p>
</li>
<li>
- <p>Run the oldest task on one of the <a href=#event-loop>event loop</a>'s
- <a href=#task-queue title="task queue">task queues</a>, if any. The user
- agent may pick any <a href=#task-queue>task queue</a>.</p>
+ <p>Run the oldest task on one of the <a href=#event-loop>event loop</a>'s <a href=#task-queue title="task queue">task
+ queues</a>, if any. The user agent may pick any <a href=#task-queue>task queue</a>.</p>
- <p class=note>The handling of events or the execution of
- callbacks might get prematurely aborted by the "<a href=#kill-a-worker>kill a
- worker</a>" or "<a href=#terminate-a-worker>terminate a worker</a>" algorithms
+ <p class=note>The handling of events or the execution of callbacks might get prematurely
+ aborted by the "<a href=#kill-a-worker>kill a worker</a>" or "<a href=#terminate-a-worker>terminate a worker</a>" algorithms
defined below.</p>
</li>
<li>
- <p>If the <a href=#storage-mutex>storage mutex</a> is now owned by the worker's
- <a href=#event-loop>event loop</a>, release it so that it is once again
- free.</p>
+ <p>If the <a href=#storage-mutex>storage mutex</a> is now owned by the worker's <a href=#event-loop>event loop</a>,
+ release it so that it is once again free.</p>
</li>
<li>
- <p>Remove the task just run in the earlier step, if any, from its
- <a href=#task-queue>task queue</a>.</p>
+ <p>Remove the task just run in the earlier step, if any, from its <a href=#task-queue>task queue</a>.</p>
</li>
<li>
- <p>If there are any more events in the <a href=#event-loop>event loop</a>'s
- <a href=#task-queue title="task queue">task queues</a> or if <var title="">worker global scope</var>'s <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is set
- to false, then jump back to the step above labeled <i><a href=#event-loop>event
- loop</a></i>.</p>
+ <p>If there are any more events in the <a href=#event-loop>event loop</a>'s <a href=#task-queue title="task queue">task
+ queues</a> or if <var title="">worker global scope</var>'s <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag is set to false, then jump back to the
+ step above labeled <i><a href=#event-loop>event loop</a></i>.</p>
</li>
<li>
- <p>Empty the <var title="">worker global scope</var>'s <a href=#list-of-active-timers>list
- of active timers</a>.</p>
+ <p>Empty the <var title="">worker global scope</var>'s <a href=#list-of-active-timers>list of active timers</a>.</p>
</li>
<li>
- <p>Disentangle all the ports in the list of <a href="#the-worker's-ports">the worker's
- ports</a>.</p>
+ <p>Disentangle all the ports in the list of <a href="#the-worker's-ports">the worker's ports</a>.</p>
</li>
<!-- v2-onclose
<li>
- <p>For each <code>Worker</code> or <code>SharedWorker</code>
- object associated with <var title="">worker global scope</var>,
- <span>queue a task</span> to <span>fire a simple event</span>
- named <code title="event-worker-close">close</code> at that object.</p>
+ <p>For each <code>Worker</code> or <code>SharedWorker</code> object associated with <var
+ title="">worker global scope</var>, <span>queue a task</span> to <span>fire a simple
+ event</span> named <code title="event-worker-close">close</code> at that object.</p>
</li>
-->
- </ol><hr><p>When a user agent is to <dfn id=kill-a-worker>kill a worker</dfn> it must
- run the following steps in parallel with the worker's main loop (the
- "<a href=#run-a-worker>run a worker</a>" processing model defined above):</p>
+ </ol><hr><p>When a user agent is to <dfn id=kill-a-worker>kill a worker</dfn> it must run the following steps in parallel
+ with the worker's main loop (the "<a href=#run-a-worker>run a worker</a>" processing model defined above):</p>
<ol><!-- v2-onclose
- <li><p>If the worker's <code>WorkerGlobalScope</code> object's
- <span title="dom-WorkerGlobalScope-closing">closing</span> flag is
- false, <span>queue a task</span> to <span>fire a simple
- event</span> named <code title="event-worker-close">close</code> at the
+ <li><p>If the worker's <code>WorkerGlobalScope</code> object's <span
+ title="dom-WorkerGlobalScope-closing">closing</span> flag is false, <span>queue a task</span> to
+ <span>fire a simple event</span> named <code title="event-worker-close">close</code> at the
worker's <code>WorkerGlobalScope</code> object.</p></li>
---><li><p>Set the worker's <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object's <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag to
- true.</li>
+--><li><p>Set the worker's <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object's <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag to true.</li>
<!-- v2-onclose
- <li><p>Wait a user-agent-defined amount of time. If the "<span>run
- a worker</span>" processing model defined above immediately starts
- running event listeners registered for the <code
- title="event-worker-close">close</code> event, this time should not be
- zero — the idea is that the <code
- title="event-worker-close">close</code> event can be used to clean up
- when shutting down unexpectedly.</p></li>
+ <li><p>Wait a user-agent-defined amount of time. If the "<span>run a worker</span>" processing
+ model defined above immediately starts running event listeners registered for the <code
+ title="event-worker-close">close</code> event, this time should not be zero — the idea is
+ that the <code title="event-worker-close">close</code> event can be used to clean up when
+ shutting down unexpectedly.</p></li>
-->
- <li><p>If there are any <a href=#concept-task title=concept-task>tasks</a>
- queued in the <a href=#event-loop>event loop</a>'s <a href=#task-queue title="task
- queue">task queues</a><!-- v2-onclose other than the <code
- title="event-worker-close">close</code> event that this algorithm just
- added-->, discard them without processing them.</li>
+ <li><p>If there are any <a href=#concept-task title=concept-task>tasks</a> queued in the <a href=#event-loop>event
+ loop</a>'s <a href=#task-queue title="task queue">task queues</a><!-- v2-onclose other than the <code
+ title="event-worker-close">close</code> event that this algorithm just added-->, discard them
+ without processing them.</li>
<!-- v2-onclose
- <li><p>If the <code title="event-worker-close">close</code> event that
- this algorithm just queued hasn't yet been dispatched, then abort
- the script currently running in the worker.</p></li>
+ <li><p>If the <code title="event-worker-close">close</code> event that this algorithm just queued
+ hasn't yet been dispatched, then abort the script currently running in the worker.</p></li>
-->
<li><p>Wait a user-agent-defined amount of time.</li>
- <li><p>Abort the script currently running in the worker<!--
- v2-onclose (if any script is running, then it will be a handler for
- the <code title="event-worker-close">close</code> event)-->.</li>
+ <li><p>Abort the script currently running in the worker<!-- v2-onclose (if any script is running,
+ then it will be a handler for the <code title="event-worker-close">close</code>
+ event)-->.</li>
- </ol><p>User agents may invoke the "<a href=#kill-a-worker>kill a worker</a>"
- processing model on a worker at any time, e.g. in response to user
- requests, in response to CPU quota management, or when a worker
- stops being an <a href=#active-needed-worker>active needed worker</a> if the worker
- continues executing even after its <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag was
- set to true.</p>
+ </ol><p>User agents may invoke the "<a href=#kill-a-worker>kill a worker</a>" processing model on a worker at any
+ time, e.g. in response to user requests, in response to CPU quota management, or when a worker
+ stops being an <a href=#active-needed-worker>active needed worker</a> if the worker continues executing even after its
+ <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag was set to true.</p>
- <hr><p>When a user agent is to <dfn id=terminate-a-worker>terminate a worker</dfn> it must run
- the following steps in parallel with the worker's main loop (the
- "<a href=#run-a-worker>run a worker</a>" processing model defined above):</p>
+ <hr><p>When a user agent is to <dfn id=terminate-a-worker>terminate a worker</dfn> it must run the following steps in
+ parallel with the worker's main loop (the "<a href=#run-a-worker>run a worker</a>" processing model defined
+ above):</p>
- <ol><li><p>Set the worker's <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object's
- <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag to
- true.</li>
+ <ol><li><p>Set the worker's <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object's <a href=#dom-workerglobalscope-closing title=dom-WorkerGlobalScope-closing>closing</a> flag to true.</li>
- <li><p>If there are any <a href=#concept-task title=concept-task>tasks</a>
- queued in the <a href=#event-loop>event loop</a>'s <a href=#task-queue title="task
- queue">task queues</a>, discard them without processing
+ <li><p>If there are any <a href=#concept-task title=concept-task>tasks</a> queued in the <a href=#event-loop>event
+ loop</a>'s <a href=#task-queue title="task queue">task queues</a>, discard them without processing
them.</li>
<li><p>Abort the script currently running in the worker.</li>
- <li><p>If the worker's <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object is
- actually a <code><a href=#dedicatedworkerglobalscope>DedicatedWorkerGlobalScope</a></code> object (i.e. the
- worker is a dedicated worker), then empty the <a href=#port-message-queue>port message
- queue</a> of the port that the worker's implicit port is
+ <li><p>If the worker's <code><a href=#workerglobalscope>WorkerGlobalScope</a></code> object is actually a
+ <code><a href=#dedicatedworkerglobalscope>DedicatedWorkerGlobalScope</a></code> object (i.e. the worker is a dedicated worker), then
+ empty the <a href=#port-message-queue>port message queue</a> of the port that the worker's implicit port is
entangled with.</li>
- </ol><hr><p>The <a href=#task-source>task source</a> for the tasks mentioned above is the
- <a href=#dom-manipulation-task-source>DOM manipulation task source</a>.</p>
+ </ol><hr><p>The <a href=#task-source>task source</a> for the tasks mentioned above is the <a href=#dom-manipulation-task-source>DOM manipulation task
+ source</a>.</p>
<h4 id=runtime-script-errors-0><span class=secno>9.2.5 </span>Runtime script errors</h4>
@@ -80618,9 +80330,9 @@
<code title=handler-WorkerGlobalScope-onerror><a href=#handler-workerglobalscope-onerror>onerror</a></code> attribute.
</p>
- <p>For shared workers, if the error is still <i title=concept-error-nothandled><a href=#concept-error-nothandled>not handled</a></i> afterwards, or if
- the error occurred while handling a previous script error, the error
- may be reported to the user.
+ <p>For shared workers, if the error is still <i title=concept-error-nothandled><a href=#concept-error-nothandled>not handled</a></i>
+ afterwards, or if the error occurred while handling a previous script error, the error may be
+ reported to the user.
</p>
<p>For dedicated workers, if the error is still <i title=concept-error-nothandled><a href=#concept-error-nothandled>not
@@ -80633,20 +80345,18 @@
error had occurred in the global scope that the <code><a href=#worker>Worker</a></code> object is in, thus repeating
the entire runtime script error reporting process one level up.</p>
- <p>If the implicit port connecting the worker to its
- <code><a href=#worker>Worker</a></code> object has been disentangled (i.e. if the parent
- worker has been terminated), then the user agent must act as if the
- <code><a href=#worker>Worker</a></code> object had no <code title=event-error>error</code> event handler and as if that
- worker's <code title=handler-WorkerGlobalScope-onerror><a href=#handler-workerglobalscope-onerror>onerror</a></code> attribute
- was null, but must otherwise act as described above.</p>
+ <p>If the implicit port connecting the worker to its <code><a href=#worker>Worker</a></code> object has been
+ disentangled (i.e. if the parent worker has been terminated), then the user agent must act as if
+ the <code><a href=#worker>Worker</a></code> object had no <code title=event-error>error</code> event handler and as
+ if that worker's <code title=handler-WorkerGlobalScope-onerror><a href=#handler-workerglobalscope-onerror>onerror</a></code> attribute was
+ null, but must otherwise act as described above.</p>
- <p class=note>Thus, error reports propagate up to the chain of
- dedicated workers up to the original <code><a href=#document>Document</a></code>, even if
- some of the workers along this chain have been terminated and
- garbage collected.</p>
+ <p class=note>Thus, error reports propagate up to the chain of dedicated workers up to the
+ original <code><a href=#document>Document</a></code>, even if some of the workers along this chain have been terminated
+ and garbage collected.</p>
- <p>The <a href=#task-source>task source</a> for the task mentioned above is the
- <a href=#dom-manipulation-task-source>DOM manipulation task source</a>.</p>
+ <p>The <a href=#task-source>task source</a> for the task mentioned above is the <a href=#dom-manipulation-task-source>DOM manipulation task
+ source</a>.</p>
<hr><pre class=idl>[Constructor(DOMString type, optional <a href=#erroreventinit>ErrorEventInit</a> eventInitDict)]
interface <dfn id=errorevent>ErrorEvent</dfn> : <a href=#event>Event</a> {
@@ -82626,26 +82336,23 @@
</dl></li>
- </ol><hr><p>The <dfn id=dom-websocket-bufferedamount title=dom-WebSocket-bufferedAmount><code>bufferedAmount</code></dfn>
- attribute must return the number of bytes of application data (UTF-8
- text and binary data) that have been queued using <code title=dom-WebSocket-send><a href=#dom-websocket-send>send()</a></code> but that, as of the last
- time the <a href=#event-loop>event loop</a> started executing a <a href=#concept-task title=concept-task>task</a>, had not yet been transmitted to
- the network. (This thus includes any text sent during the execution
- of the current task, regardless of whether the user agent is able to
- transmit text asynchronously with script execution.) This does not
- include framing overhead incurred by the protocol, or buffering done
- by the operating system or network hardware. If the connection is
- closed, this attribute's value will only increase with each call to
- the <code title=dom-WebSocket-send><a href=#dom-websocket-send>send()</a></code> method (the
+ </ol><hr><p>The <dfn id=dom-websocket-bufferedamount title=dom-WebSocket-bufferedAmount><code>bufferedAmount</code></dfn> attribute must
+ return the number of bytes of application data (UTF-8 text and binary data) that have been queued
+ using <code title=dom-WebSocket-send><a href=#dom-websocket-send>send()</a></code> but that, as of the last time the <a href=#event-loop>event
+ loop</a> started executing a <a href=#concept-task title=concept-task>task</a>, had not yet been
+ transmitted to the network. (This thus includes any text sent during the execution of the current
+ task, regardless of whether the user agent is able to transmit text asynchronously with script
+ execution.) This does not include framing overhead incurred by the protocol, or buffering done by
+ the operating system or network hardware. If the connection is closed, this attribute's value will
+ only increase with each call to the <code title=dom-WebSocket-send><a href=#dom-websocket-send>send()</a></code> method (the
number does not reset to zero once the connection closes).</p>
<div class=example>
<p>In this simple example, the <code title=dom-WebSocket-bufferedAmount><a href=#dom-websocket-bufferedamount>bufferedAmount</a></code>
- attribute is used to ensure that updates are sent either at the
- rate of one update every 50ms, if the network can handle that rate,
- or at whatever rate the network <em>can</em> handle, if that is too
- fast.</p>
+ attribute is used to ensure that updates are sent either at the rate of one update every 50ms, if
+ the network can handle that rate, or at whatever rate the network <em>can</em> handle, if that is
+ too fast.</p>
<pre>var socket = new WebSocket('ws://game.example.com:12010/updates');
socket.onopen = function () {
@@ -82655,60 +82362,46 @@
}, 50);
};</pre>
- <p>The <code title=dom-WebSocket-bufferedAmount><a href=#dom-websocket-bufferedamount>bufferedAmount</a></code>
- attribute can also be used to saturate the network without sending
- the data at a higher rate than the network can handle, though this
- requires more careful monitoring of the value of the attribute over
- time.</p>
+ <p>The <code title=dom-WebSocket-bufferedAmount><a href=#dom-websocket-bufferedamount>bufferedAmount</a></code> attribute can also be
+ used to saturate the network without sending the data at a higher rate than the network can
+ handle, though this requires more careful monitoring of the value of the attribute over time.</p>
</div>
- <hr><p>When a <code><a href=#websocket>WebSocket</a></code> object is created, its <dfn id=dom-websocket-binarytype title=dom-WebSocket-binaryType><code>binaryType</code></dfn> IDL
- attribute must be set to the string "<code title="">blob</code>". On
- getting, it must return the last value it was set to. On setting,
- the user agent must set the IDL attribute to the new value.</p>
+ <hr><p>When a <code><a href=#websocket>WebSocket</a></code> object is created, its <dfn id=dom-websocket-binarytype title=dom-WebSocket-binaryType><code>binaryType</code></dfn> IDL attribute must be set to the
+ string "<code title="">blob</code>". On getting, it must return the last value it was set to. On
+ setting, the user agent must set the IDL attribute to the new value.</p>
- <p class=note>This attribute allows authors to control how binary
- data is exposed to scripts. By setting the attribute to "<code title="">blob</code>", binary data is returned in <code><a href=#blob>Blob</a></code>
- form; by setting it to "<code title="">arraybuffer</code>", it is
- returned in <code><a href=#arraybuffer>ArrayBuffer</a></code> form. User agents can use this
- as a hint for how to handle incoming binary data: if the attribute
- is set to "<code title="">blob</code>", it is safe to spool it to
- disk, and if it is set to "<code title="">arraybuffer</code>", it is
- likely more efficient to keep the data in memory. Naturally, user
- agents are encouraged to use more subtle heuristics to decide
- whether to keep incoming data in memory or not, e.g. based on how
- big the data is or how common it is for a script to change the
- attribute at the last minute. This latter aspect is important in
- particular because it is quite possible for the attribute to be
- changed after the user agent has received the data but before the
- user agent has fired the event for it.</p>
+ <p class=note>This attribute allows authors to control how binary data is exposed to scripts. By
+ setting the attribute to "<code title="">blob</code>", binary data is returned in
+ <code><a href=#blob>Blob</a></code> form; by setting it to "<code title="">arraybuffer</code>", it is returned in
+ <code><a href=#arraybuffer>ArrayBuffer</a></code> form. User agents can use this as a hint for how to handle incoming
+ binary data: if the attribute is set to "<code title="">blob</code>", it is safe to spool it to
+ disk, and if it is set to "<code title="">arraybuffer</code>", it is likely more efficient to keep
+ the data in memory. Naturally, user agents are encouraged to use more subtle heuristics to decide
+ whether to keep incoming data in memory or not, e.g. based on how big the data is or how common it
+ is for a script to change the attribute at the last minute. This latter aspect is important in
+ particular because it is quite possible for the attribute to be changed after the user agent has
+ received the data but before the user agent has fired the event for it.</p>
- <p>The <dfn id=dom-websocket-send title=dom-WebSocket-send><code>send(<var title="">data</var>)</code></dfn> method transmits data using the
- connection. If the <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code> attribute is
- <code title=dom-WebSocket-CONNECTING><a href=#dom-websocket-connecting>CONNECTING</a></code>, it must
- throw an <code><a href=#invalidstateerror>InvalidStateError</a></code> exception. Otherwise, the
- user agent must run the appropriate set of steps from the following
- list:</p>
+ <p>The <dfn id=dom-websocket-send title=dom-WebSocket-send><code>send(<var title="">data</var>)</code></dfn> method
+ transmits data using the connection. If the <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code> attribute is <code title=dom-WebSocket-CONNECTING><a href=#dom-websocket-connecting>CONNECTING</a></code>, it must throw an
+ <code><a href=#invalidstateerror>InvalidStateError</a></code> exception. Otherwise, the user agent must run the appropriate set
+ of steps from the following list:</p>
<dl><dt>If the argument is a string</dt>
<dd>
- <p>Let <var title="">data</var> be the result of <a href=#convert-a-domstring-to-a-sequence-of-unicode-characters title="convert a DOMString to a sequence of Unicode
- characters">converting the <var title="">data</var> argument to a
- sequence of Unicode characters</a>. If <i><a href=#the-websocket-connection-is-established>the WebSocket
- connection is established</a></i> and <i title="the WebSocket closing
- handshake is started"><a href=#the-websocket-closing-handshake-is-started>the WebSocket closing handshake has not yet
- started</a></i>, then the user agent must <i>send a WebSocket
- Message</i> comprised of <var title="">data</var> using a text
- frame opcode; if the data cannot be sent, e.g. because it would
- need to be buffered but the buffer is full, the user agent must
- <i><a href=#close-the-websocket-connection>close the WebSocket connection</a></i> <a href=#concept-websocket-close-fail title=concept-websocket-close-fail>with prejudice</a>. Any
- invocation of this method with a string argument that does not
- throw an exception must increase the <code title=dom-WebSocket-bufferedAmount><a href=#dom-websocket-bufferedamount>bufferedAmount</a></code>
- attribute by the number of bytes needed to express the argument as
- UTF-8. <a href=#refsUNICODE>[UNICODE]</a> <a href=#refsRFC3629>[RFC3629]</a> <a href=#refsWSP>[WSP]</a></p>
+ <p>Let <var title="">data</var> be the result of <a href=#convert-a-domstring-to-a-sequence-of-unicode-characters title="convert a DOMString to a sequence
+ of Unicode characters">converting the <var title="">data</var> argument to a sequence of Unicode
+ characters</a>. If <i><a href=#the-websocket-connection-is-established>the WebSocket connection is established</a></i> and <i title="the WebSocket
+ closing handshake is started"><a href=#the-websocket-closing-handshake-is-started>the WebSocket closing handshake has not yet started</a></i>, then the
+ user agent must <i>send a WebSocket Message</i> comprised of <var title="">data</var> using a
+ text frame opcode; if the data cannot be sent, e.g. because it would need to be buffered but the
+ buffer is full, the user agent must <i><a href=#close-the-websocket-connection>close the WebSocket connection</a></i> <a href=#concept-websocket-close-fail title=concept-websocket-close-fail>with prejudice</a>. Any invocation of this method with a
+ string argument that does not throw an exception must increase the <code title=dom-WebSocket-bufferedAmount><a href=#dom-websocket-bufferedamount>bufferedAmount</a></code> attribute by the number of bytes
+ needed to express the argument as UTF-8. <a href=#refsUNICODE>[UNICODE]</a> <a href=#refsRFC3629>[RFC3629]</a> <a href=#refsWSP>[WSP]</a></p>
</dd>
@@ -82717,19 +82410,15 @@
<dd>
- <p>If <i><a href=#the-websocket-connection-is-established>the WebSocket connection is established</a></i>, and <i title="the WebSocket closing handshake is started"><a href=#the-websocket-closing-handshake-is-started>the WebSocket
- closing handshake has not yet started</a></i>, then the user agent
- must <i>send a WebSocket Message</i> comprised of <var title="">data</var> using a binary frame opcode; if the data
- cannot be sent, e.g. because it would need to be buffered but the
- buffer is full, the user agent must <i><a href=#close-the-websocket-connection>close the WebSocket
- connection</a></i> <a href=#concept-websocket-close-fail title=concept-websocket-close-fail>with
- prejudice</a>. The data to be sent is the raw data represented
- by the <code><a href=#blob>Blob</a></code> object. <!-- that sentence is meant to
- invoke "This interface represents immutable raw data." --> Any
- invocation of this method with a <code><a href=#blob>Blob</a></code> argument that
- does not throw an exception must increase the <code title=dom-WebSocket-bufferedAmount><a href=#dom-websocket-bufferedamount>bufferedAmount</a></code>
- attribute by the size of the <code><a href=#blob>Blob</a></code> object's raw data,
- in bytes. <!-- that sentence is meant to invoke the same as
+ <p>If <i><a href=#the-websocket-connection-is-established>the WebSocket connection is established</a></i>, and <i title="the WebSocket closing
+ handshake is started"><a href=#the-websocket-closing-handshake-is-started>the WebSocket closing handshake has not yet started</a></i>, then the user
+ agent must <i>send a WebSocket Message</i> comprised of <var title="">data</var> using a binary
+ frame opcode; if the data cannot be sent, e.g. because it would need to be buffered but the
+ buffer is full, the user agent must <i><a href=#close-the-websocket-connection>close the WebSocket connection</a></i> <a href=#concept-websocket-close-fail title=concept-websocket-close-fail>with prejudice</a>. The data to be sent is the raw data
+ represented by the <code><a href=#blob>Blob</a></code> object. <!-- that sentence is meant to invoke "This
+ interface represents immutable raw data." --> Any invocation of this method with a
+ <code><a href=#blob>Blob</a></code> argument that does not throw an exception must increase the <code title=dom-WebSocket-bufferedAmount><a href=#dom-websocket-bufferedamount>bufferedAmount</a></code> attribute by the size of the
+ <code><a href=#blob>Blob</a></code> object's raw data, in bytes. <!-- that sentence is meant to invoke the same as
Blob.size --> <a href=#refsWSP>[WSP]</a> <a href=#refsFILEAPI>[FILEAPI]</a></p>
</dd>
@@ -82739,24 +82428,19 @@
<dd>
- <p>If <i><a href=#the-websocket-connection-is-established>the WebSocket connection is established</a></i>, and <i title="the WebSocket closing handshake is started"><a href=#the-websocket-closing-handshake-is-started>the WebSocket
- closing handshake has not yet started</a></i>, then the user agent
- must <i>send a WebSocket Message</i> comprised of <var title="">data</var> using a binary frame opcode; if the data
- cannot be sent, e.g. because it would need to be buffered but the
- buffer is full, the user agent must <i><a href=#close-the-websocket-connection>close the WebSocket
- connection</a></i> <a href=#concept-websocket-close-fail title=concept-websocket-close-fail>with
- prejudice</a>. The data to be sent is the data stored in the
- buffer described by the <code><a href=#arraybuffer>ArrayBuffer</a></code> object. <!-- that
- sentence is meant to invoke "The ArrayBuffer type describes a
- buffer used to store data for the array buffer views." at the top
- of the Typed Array spec, and "Optional byteOffset and length can
- be used to limit the section of the buffer referenced" in the
- definition of the TypedArray constructor --> Any invocation of
- this method with an <code><a href=#arraybuffer>ArrayBuffer</a></code> argument that does
- not throw an exception must increase the <code title=dom-WebSocket-bufferedAmount><a href=#dom-websocket-bufferedamount>bufferedAmount</a></code>
- attribute by the length of the <code><a href=#arraybuffer>ArrayBuffer</a></code> in bytes.
- <!-- that sentence is meant to invoke the same as
- ArrayBuffer.byteLength --> <a href=#refsWSP>[WSP]</a> <a href=#refsTYPEDARRAY>[TYPEDARRAY]</a></p>
+ <p>If <i><a href=#the-websocket-connection-is-established>the WebSocket connection is established</a></i>, and <i title="the WebSocket closing
+ handshake is started"><a href=#the-websocket-closing-handshake-is-started>the WebSocket closing handshake has not yet started</a></i>, then the user
+ agent must <i>send a WebSocket Message</i> comprised of <var title="">data</var> using a binary
+ frame opcode; if the data cannot be sent, e.g. because it would need to be buffered but the
+ buffer is full, the user agent must <i><a href=#close-the-websocket-connection>close the WebSocket connection</a></i> <a href=#concept-websocket-close-fail title=concept-websocket-close-fail>with prejudice</a>. The data to be sent is the data
+ stored in the buffer described by the <code><a href=#arraybuffer>ArrayBuffer</a></code> object. <!-- that sentence is
+ meant to invoke "The ArrayBuffer type describes a buffer used to store data for the array buffer
+ views." at the top of the Typed Array spec, and "Optional byteOffset and length can be used to
+ limit the section of the buffer referenced" in the definition of the TypedArray constructor -->
+ Any invocation of this method with an <code><a href=#arraybuffer>ArrayBuffer</a></code> argument that does not throw an
+ exception must increase the <code title=dom-WebSocket-bufferedAmount><a href=#dom-websocket-bufferedamount>bufferedAmount</a></code>
+ attribute by the length of the <code><a href=#arraybuffer>ArrayBuffer</a></code> in bytes. <!-- that sentence is meant to
+ invoke the same as ArrayBuffer.byteLength --> <a href=#refsWSP>[WSP]</a> <a href=#refsTYPEDARRAY>[TYPEDARRAY]</a></p>
</dd>
@@ -82765,32 +82449,26 @@
<dd>
- <p>If <i><a href=#the-websocket-connection-is-established>the WebSocket connection is established</a></i>, and <i title="the WebSocket closing handshake is started"><a href=#the-websocket-closing-handshake-is-started>the WebSocket
- closing handshake has not yet started</a></i>, then the user agent
- must <i>send a WebSocket Message</i> comprised of <var title="">data</var> using a binary frame opcode; if the data
- cannot be sent, e.g. because it would need to be buffered but the
- buffer is full, the user agent must <i><a href=#close-the-websocket-connection>close the WebSocket
- connection</a></i> <a href=#concept-websocket-close-fail title=concept-websocket-close-fail>with
- prejudice</a>. The data to be sent is the data stored in the
- section of the buffer described by the <code><a href=#arraybuffer>ArrayBuffer</a></code>
- object that the <code><a href=#arraybufferview>ArrayBufferView</a></code> object references.
- <!-- that sentence is meant to invoke "The ArrayBuffer type
- describes a buffer used to store data for the array buffer views."
- at the top of the Typed Array spec, and "Optional byteOffset and
- length can be used to limit the section of the buffer referenced"
- in the definition of the TypedArray constructor --> Any invocation
- of this method with an <code><a href=#arraybufferview>ArrayBufferView</a></code> argument that
- does not throw an exception must increase the <code title=dom-WebSocket-bufferedAmount><a href=#dom-websocket-bufferedamount>bufferedAmount</a></code>
- attribute by the length of the <code><a href=#arraybufferview>ArrayBufferView</a></code> in
- bytes. <!-- that sentence is meant to invoke the same as
- ArrayBufferView.byteLength --> <a href=#refsWSP>[WSP]</a> <a href=#refsTYPEDARRAY>[TYPEDARRAY]</a></p>
+ <p>If <i><a href=#the-websocket-connection-is-established>the WebSocket connection is established</a></i>, and <i title="the WebSocket closing
+ handshake is started"><a href=#the-websocket-closing-handshake-is-started>the WebSocket closing handshake has not yet started</a></i>, then the user
+ agent must <i>send a WebSocket Message</i> comprised of <var title="">data</var> using a binary
+ frame opcode; if the data cannot be sent, e.g. because it would need to be buffered but the
+ buffer is full, the user agent must <i><a href=#close-the-websocket-connection>close the WebSocket connection</a></i> <a href=#concept-websocket-close-fail title=concept-websocket-close-fail>with prejudice</a>. The data to be sent is the data
+ stored in the section of the buffer described by the <code><a href=#arraybuffer>ArrayBuffer</a></code> object that the
+ <code><a href=#arraybufferview>ArrayBufferView</a></code> object references. <!-- that sentence is meant to invoke "The
+ ArrayBuffer type describes a buffer used to store data for the array buffer views." at the top
+ of the Typed Array spec, and "Optional byteOffset and length can be used to limit the section of
+ the buffer referenced" in the definition of the TypedArray constructor --> Any invocation of
+ this method with an <code><a href=#arraybufferview>ArrayBufferView</a></code> argument that does not throw an exception must
+ increase the <code title=dom-WebSocket-bufferedAmount><a href=#dom-websocket-bufferedamount>bufferedAmount</a></code> attribute by the
+ length of the <code><a href=#arraybufferview>ArrayBufferView</a></code> in bytes. <!-- that sentence is meant to invoke the
+ same as ArrayBufferView.byteLength --> <a href=#refsWSP>[WSP]</a> <a href=#refsTYPEDARRAY>[TYPEDARRAY]</a></p>
</dd>
- </dl><hr><p>The following are the <a href=#event-handlers>event handlers</a> (and their
- corresponding <a href=#event-handler-event-type title="event handler event type">event handler
- event types</a>) that must be supported, as IDL attributes, by
- all objects implementing the <code><a href=#websocket>WebSocket</a></code> interface:</p>
+ </dl><hr><p>The following are the <a href=#event-handlers>event handlers</a> (and their corresponding <a href=#event-handler-event-type title="event
+ handler event type">event handler event types</a>) that must be supported, as IDL attributes,
+ by all objects implementing the <code><a href=#websocket>WebSocket</a></code> interface:</p>
<table><thead><tr><th><a href=#event-handlers title="event handlers">Event handler</a> <th><a href=#event-handler-event-type>Event handler event type</a>
<tbody><tr><td><dfn id=handler-websocket-onopen title=handler-WebSocket-onopen><code>onopen</code></dfn> <td> <code title=event-open>open</code>
@@ -82799,34 +82477,32 @@
<tr><td><dfn id=handler-websocket-onclose title=handler-WebSocket-onclose><code>onclose</code></dfn> <td> <code title=event-socket-close>close</code>
</table><h4 id=feedback-from-the-protocol><span class=secno>10.3.3 </span>Feedback from the protocol</h4>
- <p>When <i><a href=#the-websocket-connection-is-established>the WebSocket connection is established</a></i>, the user
- agent must <a href=#queue-a-task>queue a task</a> to run these steps:</p>
+ <p>When <i><a href=#the-websocket-connection-is-established>the WebSocket connection is established</a></i>, the user agent must <a href=#queue-a-task>queue a
+ task</a> to run these steps:</p>
- <ol><li><p>Change the <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code> attribute's
- value to <code title=dom-WebSocket-OPEN><a href=#dom-websocket-open>OPEN</a></code> (1).</li>
+ <ol><li><p>Change the <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code> attribute's value to
+ <code title=dom-WebSocket-OPEN><a href=#dom-websocket-open>OPEN</a></code> (1).</li>
- <li><p>Change the <code title=dom-WebSocket-extensions><a href=#dom-websocket-extensions>extensions</a></code> attribute's
- value to the <i><a href=#extensions-in-use>extensions in use</a></i>, if is not the null value. <a href=#refsWSP>[WSP]</a></li>
+ <li><p>Change the <code title=dom-WebSocket-extensions><a href=#dom-websocket-extensions>extensions</a></code> attribute's value to
+ the <i><a href=#extensions-in-use>extensions in use</a></i>, if is not the null value. <a href=#refsWSP>[WSP]</a></li>
- <li><p>Change the <code title=dom-WebSocket-protocol><a href=#dom-websocket-protocol>protocol</a></code> attribute's value to
- the <i><a href=#subprotocol-in-use>subprotocol in use</a></i>, if is not the null value. <a href=#refsWSP>[WSP]</a></li>
+ <li><p>Change the <code title=dom-WebSocket-protocol><a href=#dom-websocket-protocol>protocol</a></code> attribute's value to the
+ <i><a href=#subprotocol-in-use>subprotocol in use</a></i>, if is not the null value. <a href=#refsWSP>[WSP]</a></li>
- <li><p>Act as if the user agent had <a href=#receives-a-set-cookie-string title="receives a
- set-cookie-string">received a set-cookie-string</a> consisting
- of the <i><a href="#cookies-set-during-the-server's-opening-handshake">cookies set during the server's opening handshake</a></i>,
- for the URL <var title="">url</var> given to the <code title=dom-WebSocket><a href=#dom-websocket>WebSocket()</a></code> constructor. <a href=#refsCOOKIES>[COOKIES]</a> <a href=#refsRFC3629>[RFC3629]</a> <a href=#refsWSP>[WSP]</a></li>
+ <li><p>Act as if the user agent had <a href=#receives-a-set-cookie-string title="receives a set-cookie-string">received a
+ set-cookie-string</a> consisting of the <i><a href="#cookies-set-during-the-server's-opening-handshake">cookies set during the server's opening
+ handshake</a></i>, for the URL <var title="">url</var> given to the <code title=dom-WebSocket><a href=#dom-websocket>WebSocket()</a></code> constructor. <a href=#refsCOOKIES>[COOKIES]</a> <a href=#refsRFC3629>[RFC3629]</a> <a href=#refsWSP>[WSP]</a></li>
- <li><p><a href=#fire-a-simple-event>Fire a simple event</a> named <code title=event-open>open</code> at the <code><a href=#websocket>WebSocket</a></code>
- object.</p>
+ <li><p><a href=#fire-a-simple-event>Fire a simple event</a> named <code title=event-open>open</code> at the
+ <code><a href=#websocket>WebSocket</a></code> object.</p>
- </ol><hr><p>When <i><a href=#a-websocket-message-has-been-received>a WebSocket message has been received</a></i> with type <var title="">type</var> and data <var title="">data</var>, the user
- agent must <a href=#queue-a-task>queue a task</a> to follow these steps: <a href=#refsWSP>[WSP]</a></p>
+ </ol><hr><p>When <i><a href=#a-websocket-message-has-been-received>a WebSocket message has been received</a></i> with type <var title="">type</var> and data
+ <var title="">data</var>, the user agent must <a href=#queue-a-task>queue a task</a> to follow these steps: <a href=#refsWSP>[WSP]</a></p>
<ol><li>
- <p>If the <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code>
- attribute's value is not <code title=dom-WebSocket-OPEN><a href=#dom-websocket-open>OPEN</a></code> (1), then abort these
- steps.</p>
+ <p>If the <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code> attribute's value is not
+ <code title=dom-WebSocket-OPEN><a href=#dom-websocket-open>OPEN</a></code> (1), then abort these steps.</p>
</li>
@@ -82839,27 +82515,21 @@
</li>
- <li><p>Initialize <var title="">event</var>'s <code title=dom-MessageEvent-origin><a href=#dom-messageevent-origin>origin</a></code> attribute to the
- <a href=#unicode-serialization-of-an-origin title="Unicode serialization of an origin">Unicode
- serialization</a> of the <a href=#origin>origin</a> of the
- <a href=#url>URL</a> that was passed to the <code><a href=#websocket>WebSocket</a></code>
+ <li><p>Initialize <var title="">event</var>'s <code title=dom-MessageEvent-origin><a href=#dom-messageevent-origin>origin</a></code>
+ attribute to the <a href=#unicode-serialization-of-an-origin title="Unicode serialization of an origin">Unicode serialization</a> of
+ the <a href=#origin>origin</a> of the <a href=#url>URL</a> that was passed to the <code><a href=#websocket>WebSocket</a></code>
object's constructor.</li>
<li>
- <p>If <var title="">type</var> indicates that the data is Text,
- then initialize <var title="">event</var>'s <code title=dom-MessageEvent-data><a href=#dom-messageevent-data>data</a></code> attribute to <var title="">data</var>.
+ <p>If <var title="">type</var> indicates that the data is Text, then initialize <var title="">event</var>'s <code title=dom-MessageEvent-data><a href=#dom-messageevent-data>data</a></code> attribute to <var title="">data</var>.
- <p>If <var title="">type</var> indicates that the data is Binary,
- and <code title=dom-WebSocket-binaryType><a href=#dom-websocket-binarytype>binaryType</a></code> is
- set to "<code title="">blob</code>", then initialize <var title="">event</var>'s <code title=dom-MessageEvent-data><a href=#dom-messageevent-data>data</a></code> attribute to a new
- <code><a href=#blob>Blob</a></code> object that represents <var title="">data</var>
- as its raw data. <a href=#refsFILEAPI>[FILEAPI]</a></p>
+ <p>If <var title="">type</var> indicates that the data is Binary, and <code title=dom-WebSocket-binaryType><a href=#dom-websocket-binarytype>binaryType</a></code> is set to "<code title="">blob</code>", then
+ initialize <var title="">event</var>'s <code title=dom-MessageEvent-data><a href=#dom-messageevent-data>data</a></code> attribute
+ to a new <code><a href=#blob>Blob</a></code> object that represents <var title="">data</var> as its raw data. <a href=#refsFILEAPI>[FILEAPI]</a></p>
- <p>If <var title="">type</var> indicates that the data is Binary,
- and <code title=dom-WebSocket-binaryType><a href=#dom-websocket-binarytype>binaryType</a></code> is
- set to "<code title="">arraybuffer</code>", then initialize <var title="">event</var>'s <code title=dom-MessageEvent-data><a href=#dom-messageevent-data>data</a></code> attribute to a new
- read-only <code><a href=#arraybuffer>ArrayBuffer</a></code> object whose contents are <var title="">data</var>. <a href=#refsTYPEDARRAY>[TYPEDARRAY]</a></p>
+ <p>If <var title="">type</var> indicates that the data is Binary, and <code title=dom-WebSocket-binaryType><a href=#dom-websocket-binarytype>binaryType</a></code> is set to "<code title="">arraybuffer</code>", then initialize <var title="">event</var>'s <code title=dom-MessageEvent-data><a href=#dom-messageevent-data>data</a></code> attribute to a new read-only <code><a href=#arraybuffer>ArrayBuffer</a></code>
+ object whose contents are <var title="">data</var>. <a href=#refsTYPEDARRAY>[TYPEDARRAY]</a></p>
</li>
@@ -82870,21 +82540,17 @@
</li>
- </ol><p class=note>User agents are encouraged to check if they can
- perform the above steps efficiently before they run the task,
- picking tasks from other <a href=#task-queue title="task queue">task queues</a>
- while they prepare the buffers if not. For example, if the <code title=dom-WebSocket-binaryType><a href=#dom-websocket-binarytype>binaryType</a></code> attribute was set
- to "<code title="">blob</code>" when the data arrived, and the user
- agent spooled all the data to disk, but just before running the
- above <a href=#concept-task title=concept-task>task</a> for this particular
- message the script switched <code title=dom-WebSocket-binaryType><a href=#dom-websocket-binarytype>binaryType</a></code> to "<code title="">arraybuffer</code>", the user agent would want to page the
- data back to RAM before running this <a href=#concept-task title=concept-task>task</a> so as to avoid stalling the main
- thread while it created the <code><a href=#arraybuffer>ArrayBuffer</a></code> object.</p>
+ </ol><p class=note>User agents are encouraged to check if they can perform the above steps
+ efficiently before they run the task, picking tasks from other <a href=#task-queue title="task queue">task
+ queues</a> while they prepare the buffers if not. For example, if the <code title=dom-WebSocket-binaryType><a href=#dom-websocket-binarytype>binaryType</a></code> attribute was set to "<code title="">blob</code>" when the data arrived, and the user agent spooled all the data to disk, but
+ just before running the above <a href=#concept-task title=concept-task>task</a> for this particular message
+ the script switched <code title=dom-WebSocket-binaryType><a href=#dom-websocket-binarytype>binaryType</a></code> to "<code title="">arraybuffer</code>", the user agent would want to page the data back to RAM before
+ running this <a href=#concept-task title=concept-task>task</a> so as to avoid stalling the main thread while
+ it created the <code><a href=#arraybuffer>ArrayBuffer</a></code> object.</p>
<div class=example>
- <p>Here is an example of how to define a handler for the <code title=event-message><a href=#event-message>message</a></code> event in the case of text
- frames:</p>
+ <p>Here is an example of how to define a handler for the <code title=event-message><a href=#event-message>message</a></code> event in the case of text frames:</p>
<pre>mysocket.onmessage = function (event) {
if (event.data == 'on') {
@@ -82894,31 +82560,24 @@
}
};</pre>
- <p>The protocol here is a trivial one, with the server just sending
- "on" or "off" messages.</p>
+ <p>The protocol here is a trivial one, with the server just sending "on" or "off" messages.</p>
</div>
- <hr><p>When <i><a href=#the-websocket-closing-handshake-is-started>the WebSocket closing handshake is started</a></i>, the user
- agent must <a href=#queue-a-task>queue a task</a> to change the <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code> attribute's value
- to <code title=dom-WebSocket-CLOSING><a href=#dom-websocket-closing>CLOSING</a></code> (2). (If the
- <code title=dom-WebSocket-close><a href=#dom-websocket-close>close()</a></code> method was called,
- the <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code>
- attribute's value will already be set to <code title=dom-WebSocket-CLOSING><a href=#dom-websocket-closing>CLOSING</a></code> (2) when this task
- runs.) <a href=#refsWSP>[WSP]</a></p>
+ <hr><p>When <i><a href=#the-websocket-closing-handshake-is-started>the WebSocket closing handshake is started</a></i>, the user agent must <a href=#queue-a-task>queue a
+ task</a> to change the <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code> attribute's
+ value to <code title=dom-WebSocket-CLOSING><a href=#dom-websocket-closing>CLOSING</a></code> (2). (If the <code title=dom-WebSocket-close><a href=#dom-websocket-close>close()</a></code> method was called, the <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code> attribute's value will already be set to <code title=dom-WebSocket-CLOSING><a href=#dom-websocket-closing>CLOSING</a></code> (2) when this task runs.) <a href=#refsWSP>[WSP]</a></p>
- <hr><p id=closeWebSocket>When <i><a href=#the-websocket-connection-is-closed>the WebSocket connection is
- closed</a></i>, possibly <i title="">cleanly</i>, the user agent must
- <a href=#queue-a-task>queue a task</a> to run the following substeps:</p>
+ <hr><p id=closeWebSocket>When <i><a href=#the-websocket-connection-is-closed>the WebSocket connection is closed</a></i>, possibly <i title="">cleanly</i>, the user agent must <a href=#queue-a-task>queue a task</a> to run the following
+ substeps:</p>
- <ol><li><p>Change the <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code> attribute's
- value to <code title=dom-WebSocket-CLOSED><a href=#dom-websocket-closed>CLOSED</a></code>
- (3).</li>
+ <ol><li><p>Change the <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code> attribute's value to
+ <code title=dom-WebSocket-CLOSED><a href=#dom-websocket-closed>CLOSED</a></code> (3).</li>
- <li><p>If the user agent was required to <i><a href=#fail-the-websocket-connection>fail the WebSocket
- connection</a></i> or <i><a href=#the-websocket-connection-is-closed>the WebSocket connection is closed</a></i> <dfn id=concept-websocket-close-fail title=concept-websocket-close-fail>with prejudice</dfn>,
- <a href=#fire-a-simple-event>fire a simple event</a> named <code title="">error</code>
- at the <code><a href=#websocket>WebSocket</a></code> object. <a href=#refsWSP>[WSP]</a></li>
+ <li><p>If the user agent was required to <i><a href=#fail-the-websocket-connection>fail the WebSocket connection</a></i> or <i><a href=#the-websocket-connection-is-closed>the WebSocket
+ connection is closed</a></i> <dfn id=concept-websocket-close-fail title=concept-websocket-close-fail>with prejudice</dfn>,
+ <a href=#fire-a-simple-event>fire a simple event</a> named <code title="">error</code> at the <code><a href=#websocket>WebSocket</a></code>
+ object. <a href=#refsWSP>[WSP]</a></li>
<li><p>Create a <a href=#concept-events-trusted title=concept-events-trusted>trusted</a> event that uses the
<code><a href=#closeevent>CloseEvent</a></code> interface, with the event type <code title=event-socket-close>close</code>, which does not bubble, is not cancelable, has no default
@@ -82931,9 +82590,8 @@
</ol><div class=warning>
- <p>User agents must not convey any failure information to scripts
- in a way that would allow a script to distinguish the following
- situations:</p>
+ <p>User agents must not convey any failure information to scripts in a way that would allow a
+ script to distinguish the following situations:</p>
<ul><li>A server whose host name could not be resolved.
@@ -82941,37 +82599,32 @@
<li>A server that refused the connection on the specified port.
- <li>A server that failed to correctly perform a TLS handshake
- (e.g., the server certificate can't be verified).
+ <li>A server that failed to correctly perform a TLS handshake (e.g., the server certificate
+ can't be verified).
- <li>A server that did not complete the opening handshake (e.g.
- because it was not a WebSocket server).
+ <li>A server that did not complete the opening handshake (e.g. because it was not a WebSocket
+ server).
- <li>A WebSocket server that sent a correct opening handshake, but
- that specified options that caused the client to drop the
- connection (e.g. the server specified a subprotocol that the
+ <li>A WebSocket server that sent a correct opening handshake, but that specified options that
+ caused the client to drop the connection (e.g. the server specified a subprotocol that the
client did not offer).
- <li>A WebSocket server that abruptly closed the connection after
- successfully completing the opening handshake.
+ <li>A WebSocket server that abruptly closed the connection after successfully completing the
+ opening handshake.
- </ul><p>In all of these cases, the <i><a href=#the-websocket-connection-close-code>the WebSocket connection close
- code</a></i> would be 1006, as required by the WebSocket Protocol
- specification. <a href=#refsWSP>[WSP]</a></p>
+ </ul><p>In all of these cases, the <i><a href=#the-websocket-connection-close-code>the WebSocket connection close code</a></i> would be 1006, as
+ required by the WebSocket Protocol specification. <a href=#refsWSP>[WSP]</a></p>
- <p>Allowing a script to distinguish these cases would allow a
- script to probe the user's local network in preparation for an
- attack.</p>
+ <p>Allowing a script to distinguish these cases would allow a script to probe the user's local
+ network in preparation for an attack.</p>
- <p class=note>In particular, this means the code 1015 is not used
- by the user agent (unless the server erroneously uses it in its
- close frame, of course).</p>
+ <p class=note>In particular, this means the code 1015 is not used by the user agent (unless the
+ server erroneously uses it in its close frame, of course).</p>
</div>
- <hr><p>The <a href=#task-source>task source</a> for all <a href=#concept-task title=concept-task>tasks</a> <a href=#queue-a-task title="queue a
- task">queued</a> in this section is the <dfn id=websocket-task-source>WebSocket task
- source</dfn>.</p>
+ <hr><p>The <a href=#task-source>task source</a> for all <a href=#concept-task title=concept-task>tasks</a> <a href=#queue-a-task title="queue
+ a task">queued</a> in this section is the <dfn id=websocket-task-source>WebSocket task source</dfn>.</p>
<h4 id=ping-and-pong-frames><span class=secno>10.3.4 </span>Ping and Pong frames</h4>
@@ -83092,38 +82745,33 @@
<h4 id=garbage-collection-1><span class=secno>10.3.7 </span>Garbage collection</h4>
- <p>A <code><a href=#websocket>WebSocket</a></code> object whose <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code> attribute's value
- was set to <code title=dom-WebSocket-CONNECTING><a href=#dom-websocket-connecting>CONNECTING</a></code>
- (0) as of the last time the <a href=#event-loop>event loop</a> started
- executing a <a href=#concept-task title=concept-task>task</a> must not be
- garbage collected if there are any event listeners registered for
- <code title=event-open>open</code> events, <code title=event-message><a href=#event-message>message</a></code> events, <code title=event-error>error</code> events, or <code title=event-socket-close>close</code> events.</p>
+ <p>A <code><a href=#websocket>WebSocket</a></code> object whose <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code>
+ attribute's value was set to <code title=dom-WebSocket-CONNECTING><a href=#dom-websocket-connecting>CONNECTING</a></code> (0) as of
+ the last time the <a href=#event-loop>event loop</a> started executing a <a href=#concept-task title=concept-task>task</a> must not be garbage collected if there are any event listeners
+ registered for <code title=event-open>open</code> events, <code title=event-message><a href=#event-message>message</a></code> events, <code title=event-error>error</code> events, or
+ <code title=event-socket-close>close</code> events.</p>
- <p>A <code><a href=#websocket>WebSocket</a></code> object whose <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code> attribute's value
- was set to <code title=dom-WebSocket-OPEN><a href=#dom-websocket-open>OPEN</a></code> (1) as of
- the last time the <a href=#event-loop>event loop</a> started executing a <a href=#concept-task title=concept-task>task</a> must not be garbage collected if
- there are any event listeners registered for <code title=event-message><a href=#event-message>message</a></code> events, <code title=event-error>error</code>, or <code title=event-socket-close>close</code> events.</p>
+ <p>A <code><a href=#websocket>WebSocket</a></code> object whose <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code>
+ attribute's value was set to <code title=dom-WebSocket-OPEN><a href=#dom-websocket-open>OPEN</a></code> (1) as of the last time
+ the <a href=#event-loop>event loop</a> started executing a <a href=#concept-task title=concept-task>task</a> must not be
+ garbage collected if there are any event listeners registered for <code title=event-message><a href=#event-message>message</a></code> events, <code title=event-error>error</code>, or <code title=event-socket-close>close</code> events.</p>
- <p>A <code><a href=#websocket>WebSocket</a></code> object whose <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code> attribute's value
- was set to <code title=dom-WebSocket-CLOSING><a href=#dom-websocket-closing>CLOSING</a></code> (2) as
- of the last time the <a href=#event-loop>event loop</a> started executing a
- <a href=#concept-task title=concept-task>task</a> must not be garbage collected
- if there are any event listeners registered for <code title=event-error>error</code> or <code title=event-socket-close>close</code> events.</p>
+ <p>A <code><a href=#websocket>WebSocket</a></code> object whose <code title=dom-WebSocket-readyState><a href=#dom-websocket-readystate>readyState</a></code>
+ attribute's value was set to <code title=dom-WebSocket-CLOSING><a href=#dom-websocket-closing>CLOSING</a></code> (2) as of the last
+ time the <a href=#event-loop>event loop</a> started executing a <a href=#concept-task title=concept-task>task</a> must
+ not be garbage collected if there are any event listeners registered for <code title=event-error>error</code> or <code title=event-socket-close>close</code> events.</p>
- <p>A <code><a href=#websocket>WebSocket</a></code> object with <i title="the WebSocket
- connection is established"><a href=#the-websocket-connection-is-established>an established connection</a></i> that has
- data queued to be transmitted to the network must not be garbage
- collected. <a href=#refsWSP>[WSP]</a></p>
+ <p>A <code><a href=#websocket>WebSocket</a></code> object with <i title="the WebSocket connection is established"><a href=#the-websocket-connection-is-established>an
+ established connection</a></i> that has data queued to be transmitted to the network must not be
+ garbage collected. <a href=#refsWSP>[WSP]</a></p>
- <p>If a <code><a href=#websocket>WebSocket</a></code> object is garbage collected while its
- connection is still open, the user agent must <i><a href=#start-the-websocket-closing-handshake>start the
- WebSocket closing handshake</a></i>, with no status code<!--CLOSE
- CODE--> for the Close message. <a href=#refsWSP>[WSP]</a></p>
+ <p>If a <code><a href=#websocket>WebSocket</a></code> object is garbage collected while its connection is still open, the
+ user agent must <i><a href=#start-the-websocket-closing-handshake>start the WebSocket closing handshake</a></i>, with no status code<!--CLOSE CODE-->
+ for the Close message. <a href=#refsWSP>[WSP]</a></p>
- <hr><p>If a user agent is to <dfn id=make-disappear>make disappear</dfn> a
- <code><a href=#websocket>WebSocket</a></code> object (this happens when a
- <code><a href=#document>Document</a></code> object goes away), the user agent must follow
- the first appropriate set of steps from the following list:</p>
+ <hr><p>If a user agent is to <dfn id=make-disappear>make disappear</dfn> a <code><a href=#websocket>WebSocket</a></code> object (this happens
+ when a <code><a href=#document>Document</a></code> object goes away), the user agent must follow the first appropriate
+ set of steps from the following list:</p>
<dl class=switch><dt>If the WebSocket connection is not yet <i title="the WebSocket
connection is established"><a href=#the-websocket-connection-is-established>established</a></i> <a href=#refsWSP>[WSP]</a></dt>
@@ -83800,16 +83448,13 @@
</dl><div class=impl>
- <p>Each <code><a href=#messageport>MessagePort</a></code> object can be entangled with
- another (a symmetric relationship). Each <code><a href=#messageport>MessagePort</a></code>
- object also has a <a href=#task-source>task source</a> called the <dfn id=port-message-queue>port
- message queue</dfn>, initially empty. A <a href=#port-message-queue>port message
- queue</a> can be enabled or disabled, and is initially
- disabled. Once enabled, a port can never be disabled again (though
- messages in the queue can get moved to another queue or removed
- altogether, which has much the same effect).
- A <code><a href=#messageport>MessagePort</a></code> also has a <dfn id=has-been-shipped>has been shipped</dfn> flag. It must initially be
- false.</p>
+ <p>Each <code><a href=#messageport>MessagePort</a></code> object can be entangled with another (a symmetric relationship).
+ Each <code><a href=#messageport>MessagePort</a></code> object also has a <a href=#task-source>task source</a> called the <dfn id=port-message-queue>port
+ message queue</dfn>, initially empty. A <a href=#port-message-queue>port message queue</a> can be enabled or
+ disabled, and is initially disabled. Once enabled, a port can never be disabled again (though
+ messages in the queue can get moved to another queue or removed altogether, which has much the
+ same effect). A <code><a href=#messageport>MessagePort</a></code> also has a <dfn id=has-been-shipped>has been shipped</dfn> flag. It must
+ initially be false.</p>
<p>Each <a href=#event-loop>event loop</a> has a <a href=#task-source>task source</a> called the <dfn id=unshipped-port-message-queue>unshipped port
message queue</dfn>. This is a virtual <a href=#task-source>task source</a>: it must act as if it contained
@@ -83828,15 +83473,12 @@
is true, its <a href=#port-message-queue>port message queue</a> acts as a first-class <a href=#task-source>task source</a>,
unaffected to any <a href=#unshipped-port-message-queue>unshipped port message queue</a>.</p>
- <p>When the user agent is to <dfn id=create-a-new-messageport-object>create a new
- <code>MessagePort</code> object</dfn> owned by a <a href="#script's-global-object">script's
- global object</a> object <var title="">owner</var>, it must
- instantiate a new <code><a href=#messageport>MessagePort</a></code> object, and let its owner
- be <var title="">owner</var>.</p>
+ <p>When the user agent is to <dfn id=create-a-new-messageport-object>create a new <code>MessagePort</code> object</dfn> owned by a
+ <a href="#script's-global-object">script's global object</a> object <var title="">owner</var>, it must instantiate a new
+ <code><a href=#messageport>MessagePort</a></code> object, and let its owner be <var title="">owner</var>.</p>
- <p>When the user agent is to <dfn id=entangle>entangle</dfn> two
- <code><a href=#messageport>MessagePort</a></code> objects, it must run the following
- steps:</p>
+ <p>When the user agent is to <dfn id=entangle>entangle</dfn> two <code><a href=#messageport>MessagePort</a></code> objects, it must run
+ the following steps:</p>
<ol><li>
@@ -84090,29 +83732,24 @@
title="">target port</var>.</p></li>
</ol>
---><hr><p>The <dfn id=dom-messageport-start title=dom-MessagePort-start><code>start()</code></dfn>
- method must enable its port's <a href=#port-message-queue>port message queue</a>, if it
- is not already enabled.</p>
+--><hr><p>The <dfn id=dom-messageport-start title=dom-MessagePort-start><code>start()</code></dfn> method must enable its port's
+ <a href=#port-message-queue>port message queue</a>, if it is not already enabled.</p>
- <p>When a port's <a href=#port-message-queue>port message queue</a> is enabled, the
- <a href=#event-loop>event loop</a> must use it as one of its <a href=#task-source title="task
- source">task sources</a>.</p>
+ <p>When a port's <a href=#port-message-queue>port message queue</a> is enabled, the <a href=#event-loop>event loop</a> must use
+ it as one of its <a href=#task-source title="task source">task sources</a>.</p>
- <p class=note>If the <code><a href=#document>Document</a></code> of the port's event
- listeners' <a href="#script's-global-object" title="script's global object">global object</a>
- is not <a href=#fully-active>fully active</a>, then the messages are lost.</p>
- <!-- because of the jump-to-entry-point algorithm first step -->
+ <p class=note>If the <code><a href=#document>Document</a></code> of the port's event listeners' <a href="#script's-global-object" title="script's
+ global object">global object</a> is not <a href=#fully-active>fully active</a>, then the messages are
+ lost.</p> <!-- because of the jump-to-entry-point algorithm first step -->
- <hr><p>The <dfn id=dom-messageport-close title=dom-MessagePort-close><code>close()</code></dfn>
- method, when called on a port <var title="">local port</var> that is
- entangled with another port, must cause the user agents to
- disentangle the two ports. If the method is called on a port that is
- not entangled, then the method must do nothing.</p>
+ <hr><p>The <dfn id=dom-messageport-close title=dom-MessagePort-close><code>close()</code></dfn> method, when called on a port
+ <var title="">local port</var> that is entangled with another port, must cause the user agents to
+ disentangle the two ports. If the method is called on a port that is not entangled, then the
+ method must do nothing.</p>
- <hr><p>The following are the <a href=#event-handlers>event handlers</a> (and their
- corresponding <a href=#event-handler-event-type title="event handler event type">event handler
- event types</a>) that must be supported, as IDL attributes, by
- all objects implementing the <code><a href=#messageport>MessagePort</a></code> interface:</p>
+ <hr><p>The following are the <a href=#event-handlers>event handlers</a> (and their corresponding <a href=#event-handler-event-type title="event
+ handler event type">event handler event types</a>) that must be supported, as IDL attributes,
+ by all objects implementing the <code><a href=#messageport>MessagePort</a></code> interface:</p>
<table><thead><tr><th><a href=#event-handlers title="event handlers">Event handler</a> <th><a href=#event-handler-event-type>Event handler event type</a>
<tbody><tr><td><dfn id=handler-messageport-onmessage title=handler-MessagePort-onmessage><code>onmessage</code></dfn> <td> <code title=event-message><a href=#event-message>message</a></code>
@@ -84655,27 +84292,20 @@
<p>The <a href=#task-source>task source</a> for these tasks is the <a href=#dom-manipulation-task-source>DOM manipulation task
source</a>.</p>
- <p>If the event is being fired due to an invocation of the <code title=dom-Storage-setItem><a href=#dom-storage-setitem>setItem()</a></code> or <code title=dom-Storage-removeItem><a href=#dom-storage-removeitem>removeItem()</a></code> methods, the
- event must have its <code title=dom-StorageEvent-key><a href=#dom-storageevent-key>key</a></code>
- attribute initialized to the name of the key in question, its <code title=dom-StorageEvent-oldValue><a href=#dom-storageevent-oldvalue>oldValue</a></code> attribute initialized to
- the old value of the key in question, or null if the key is newly
- added, and its <code title=dom-StorageEvent-newValue><a href=#dom-storageevent-newvalue>newValue</a></code> attribute initialized to
- the new value of the key in question, or null if the key was
- removed.</p>
+ <p>If the event is being fired due to an invocation of the <code title=dom-Storage-setItem><a href=#dom-storage-setitem>setItem()</a></code> or <code title=dom-Storage-removeItem><a href=#dom-storage-removeitem>removeItem()</a></code> methods, the event must have its <code title=dom-StorageEvent-key><a href=#dom-storageevent-key>key</a></code> attribute initialized to the name of the key in question,
+ its <code title=dom-StorageEvent-oldValue><a href=#dom-storageevent-oldvalue>oldValue</a></code> attribute initialized to the old value
+ of the key in question, or null if the key is newly added, and its <code title=dom-StorageEvent-newValue><a href=#dom-storageevent-newvalue>newValue</a></code> attribute initialized to the new value of the
+ key in question, or null if the key was removed.</p>
- <p>Otherwise, if the event is being fired due to an invocation of
- the <code title=dom-Storage-clear><a href=#dom-storage-clear>clear()</a></code> method, the event
- must have its <code title=dom-StorageEvent-key><a href=#dom-storageevent-key>key</a></code>, <code title=dom-StorageEvent-oldValue><a href=#dom-storageevent-oldvalue>oldValue</a></code>, and <code title=dom-StorageEvent-newValue><a href=#dom-storageevent-newvalue>newValue</a></code> attributes
- initialized to null.</p>
+ <p>Otherwise, if the event is being fired due to an invocation of the <code title=dom-Storage-clear><a href=#dom-storage-clear>clear()</a></code> method, the event must have its <code title=dom-StorageEvent-key><a href=#dom-storageevent-key>key</a></code>, <code title=dom-StorageEvent-oldValue><a href=#dom-storageevent-oldvalue>oldValue</a></code>,
+ and <code title=dom-StorageEvent-newValue><a href=#dom-storageevent-newvalue>newValue</a></code> attributes initialized to null.</p>
- <p>In addition, the event must have its <code title=dom-StorageEvent-url><a href=#dom-storageevent-url>url</a></code> attribute initialized to
- <a href="#the-document's-address" title="the document's address">the address of the
- document</a> whose <code><a href=#storage-0>Storage</a></code> object was affected; and
- its <code title=dom-StorageEvent-storageArea><a href=#dom-storageevent-storagearea>storageArea</a></code>
- attribute initialized to the <code><a href=#storage-0>Storage</a></code> object from the
- <code><a href=#window>Window</a></code> object of the target <code><a href=#document>Document</a></code> that
- represents the same kind of <code><a href=#storage-0>Storage</a></code> area as was
- affected (i.e. session or local).</p>
+ <p>In addition, the event must have its <code title=dom-StorageEvent-url><a href=#dom-storageevent-url>url</a></code> attribute
+ initialized to <a href="#the-document's-address" title="the document's address">the address of the document</a> whose
+ <code><a href=#storage-0>Storage</a></code> object was affected; and its <code title=dom-StorageEvent-storageArea><a href=#dom-storageevent-storagearea>storageArea</a></code> attribute initialized to the
+ <code><a href=#storage-0>Storage</a></code> object from the <code><a href=#window>Window</a></code> object of the target
+ <code><a href=#document>Document</a></code> that represents the same kind of <code><a href=#storage-0>Storage</a></code> area as was affected
+ (i.e. session or local).</p>
<h5 id=event-definition-0><span class=secno>11.2.4.1 </span>Event definition</h5>
@@ -91636,48 +91266,39 @@
<p>Run these steps:</p>
- <ol><li><p>Let <var title="">the script</var> be the <a href=#pending-parsing-blocking-script>pending
- parsing-blocking script</a>. There is no longer a <a href=#pending-parsing-blocking-script>pending
- parsing-blocking script</a>.</li>
+ <ol><li><p>Let <var title="">the script</var> be the <a href=#pending-parsing-blocking-script>pending parsing-blocking
+ script</a>. There is no longer a <a href=#pending-parsing-blocking-script>pending parsing-blocking script</a>.</li>
- <li><p>Block the <a href=#tokenization title=tokenization>tokenizer</a>
- for this instance of the <a href=#html-parser>HTML parser</a>, such that
- the <a href=#event-loop>event loop</a> will not run <a href=#concept-task title=concept-task>tasks</a> that invoke the <a href=#tokenization title=tokenization>tokenizer</a>.</li>
+ <li><p>Block the <a href=#tokenization title=tokenization>tokenizer</a> for this instance of the
+ <a href=#html-parser>HTML parser</a>, such that the <a href=#event-loop>event loop</a> will not run <a href=#concept-task title=concept-task>tasks</a> that invoke the <a href=#tokenization title=tokenization>tokenizer</a>.</li>
- <li><p>If the parser's <code><a href=#document>Document</a></code> <a href=#has-a-style-sheet-that-is-blocking-scripts>has a style
- sheet that is blocking scripts</a> or <var title="">the
- script</var>'s <a href=#ready-to-be-parser-executed>"ready to be parser-executed"</a> flag
- is not set: <a href=#spin-the-event-loop>spin the event loop</a> until the parser's
- <code><a href=#document>Document</a></code> <a href=#has-no-style-sheet-that-is-blocking-scripts>has no style sheet that is blocking
- scripts</a> and <var title="">the script</var>'s
- <a href=#ready-to-be-parser-executed>"ready to be parser-executed"</a> flag is
- set.</li>
+ <li><p>If the parser's <code><a href=#document>Document</a></code> <a href=#has-a-style-sheet-that-is-blocking-scripts>has a style sheet that is blocking
+ scripts</a> or <var title="">the script</var>'s <a href=#ready-to-be-parser-executed>"ready to be parser-executed"</a>
+ flag is not set: <a href=#spin-the-event-loop>spin the event loop</a> until the parser's <code><a href=#document>Document</a></code>
+ <a href=#has-no-style-sheet-that-is-blocking-scripts>has no style sheet that is blocking scripts</a> and <var title="">the script</var>'s
+ <a href=#ready-to-be-parser-executed>"ready to be parser-executed"</a> flag is set.</li>
- <li><p>Unblock the <a href=#tokenization title=tokenization>tokenizer</a>
- for this instance of the <a href=#html-parser>HTML parser</a>, such that
- <a href=#concept-task title=concept-task>tasks</a> that invoke the <a href=#tokenization title=tokenization>tokenizer</a> can again be
- run.</li>
+ <li><p>Unblock the <a href=#tokenization title=tokenization>tokenizer</a> for this instance of the
+ <a href=#html-parser>HTML parser</a>, such that <a href=#concept-task title=concept-task>tasks</a> that invoke the
+ <a href=#tokenization title=tokenization>tokenizer</a> can again be run.</li>
- <li><p>Let the <a href=#insertion-point>insertion point</a> be just before the
- <a href=#next-input-character>next input character</a>.</li>
+ <li><p>Let the <a href=#insertion-point>insertion point</a> be just before the <a href=#next-input-character>next input
+ character</a>.</li>
- <li><p>Increment the parser's <a href=#script-nesting-level>script nesting level</a>
- by one (it should be zero before this step, so this sets it to
- one).</li>
+ <li><p>Increment the parser's <a href=#script-nesting-level>script nesting level</a> by one (it should be zero
+ before this step, so this sets it to one).</li>
- <li><p><a href=#execute-the-script-block title="execute the script block">Execute</a>
- <var title="">the script</var>.</li>
+ <li><p><a href=#execute-the-script-block title="execute the script block">Execute</a> <var title="">the
+ script</var>.</li>
- <li><p>Decrement the parser's <a href=#script-nesting-level>script nesting level</a>
- by one. If the parser's <a href=#script-nesting-level>script nesting level</a> is
- zero (which it always should be at this point), then set the
- <a href=#parser-pause-flag>parser pause flag</a> to false.</p>
+ <li><p>Decrement the parser's <a href=#script-nesting-level>script nesting level</a> by one. If the parser's
+ <a href=#script-nesting-level>script nesting level</a> is zero (which it always should be at this point), then set
+ the <a href=#parser-pause-flag>parser pause flag</a> to false.</p>
- <li><p>Let the <a href=#insertion-point>insertion point</a> be undefined
- again.</li>
+ <li><p>Let the <a href=#insertion-point>insertion point</a> be undefined again.</li>
- <li><p>If there is once again a <a href=#pending-parsing-blocking-script>pending parsing-blocking
- script</a>, then repeat these steps from step 1.</li>
+ <li><p>If there is once again a <a href=#pending-parsing-blocking-script>pending parsing-blocking script</a>, then repeat
+ these steps from step 1.</li>
</ol></dd>
@@ -93065,56 +92686,44 @@
<p>Once the user agent <dfn id=stop-parsing title="stop parsing">stops parsing</dfn>
the document, the user agent must run the following steps:</p>
- <ol><!-- this happens as part of one of the tasks that runs the parser --><li><p>Set the <a href=#current-document-readiness>current document readiness</a> to "<code title="">interactive</code>" <!-- this also synchronously fires an
- event --> and the <a href=#insertion-point>insertion point</a> to
+ <ol><!-- this happens as part of one of the tasks that runs the parser --><li><p>Set the <a href=#current-document-readiness>current document readiness</a> to "<code title="">interactive</code>"
+ <!-- this also synchronously fires an event --> and the <a href=#insertion-point>insertion point</a> to
undefined.</li>
- <li><p>Pop <em>all</em> the nodes off the <a href=#stack-of-open-elements>stack of open
- elements</a>.</li>
+ <li><p>Pop <em>all</em> the nodes off the <a href=#stack-of-open-elements>stack of open elements</a>.</li>
- <li><p>If the <a href=#list-of-scripts-that-will-execute-when-the-document-has-finished-parsing>list of scripts that will execute when the
- document has finished parsing</a> is not empty, run these
- substeps:</p>
+ <li><p>If the <a href=#list-of-scripts-that-will-execute-when-the-document-has-finished-parsing>list of scripts that will execute when the document has finished
+ parsing</a> is not empty, run these substeps:</p>
- <ol><li><p><a href=#spin-the-event-loop>Spin the event loop</a> until the first
- <code><a href=#the-script-element>script</a></code> in the <a href=#list-of-scripts-that-will-execute-when-the-document-has-finished-parsing>list of scripts that will
- execute when the document has finished parsing</a> has its
- <a href=#ready-to-be-parser-executed>"ready to be parser-executed"</a> flag set <em>and</em>
- the parser's <code><a href=#document>Document</a></code> <a href=#has-no-style-sheet-that-is-blocking-scripts>has no style sheet that
- is blocking scripts</a>.</li>
+ <ol><li><p><a href=#spin-the-event-loop>Spin the event loop</a> until the first <code><a href=#the-script-element>script</a></code> in the <a href=#list-of-scripts-that-will-execute-when-the-document-has-finished-parsing>list
+ of scripts that will execute when the document has finished parsing</a> has its <a href=#ready-to-be-parser-executed>"ready
+ to be parser-executed"</a> flag set <em>and</em> the parser's <code><a href=#document>Document</a></code>
+ <a href=#has-no-style-sheet-that-is-blocking-scripts>has no style sheet that is blocking scripts</a>.</li>
- <li><p><a href=#execute-the-script-block title="execute the script block">Execute</a> the
- first <code><a href=#the-script-element>script</a></code> in the <a href=#list-of-scripts-that-will-execute-when-the-document-has-finished-parsing>list of scripts that will
- execute when the document has finished parsing</a>.</li>
+ <li><p><a href=#execute-the-script-block title="execute the script block">Execute</a> the first <code><a href=#the-script-element>script</a></code> in
+ the <a href=#list-of-scripts-that-will-execute-when-the-document-has-finished-parsing>list of scripts that will execute when the document has finished
+ parsing</a>.</li>
- <li><p>Remove the first <code><a href=#the-script-element>script</a></code> element from the
- <a href=#list-of-scripts-that-will-execute-when-the-document-has-finished-parsing>list of scripts that will execute when the document has
- finished parsing</a> (i.e. shift out the first entry in the
+ <li><p>Remove the first <code><a href=#the-script-element>script</a></code> element from the <a href=#list-of-scripts-that-will-execute-when-the-document-has-finished-parsing>list of scripts that will
+ execute when the document has finished parsing</a> (i.e. shift out the first entry in the
list).</li>
- <li><p>If the <a href=#list-of-scripts-that-will-execute-when-the-document-has-finished-parsing>list of scripts that will execute when the
- document has finished parsing</a> is still not empty, repeat
- these substeps again from substep 1.</p>
+ <li><p>If the <a href=#list-of-scripts-that-will-execute-when-the-document-has-finished-parsing>list of scripts that will execute when the document has finished
+ parsing</a> is still not empty, repeat these substeps again from substep 1.</p>
</ol></li>
- <li><p><a href=#queue-a-task>Queue a task</a> to <a href=#fire-a-simple-event>fire a simple
- event</a> that bubbles named <code title=event-DOMContentLoaded>DOMContentLoaded</code> at the
- <code><a href=#document>Document</a></code>.</li>
+ <li><p><a href=#queue-a-task>Queue a task</a> to <a href=#fire-a-simple-event>fire a simple event</a> that bubbles named <code title=event-DOMContentLoaded>DOMContentLoaded</code> at the <code><a href=#document>Document</a></code>.</li>
- <li><p><a href=#spin-the-event-loop>Spin the event loop</a> until the <a href=#set-of-scripts-that-will-execute-as-soon-as-possible>set of
- scripts that will execute as soon as possible</a> and the
- <a href=#list-of-scripts-that-will-execute-in-order-as-soon-as-possible>list of scripts that will execute in order as soon as
- possible</a> are empty.</li> <!-- this step is not redundant
- with the next one, since <script> nodes delay the load event of the
- document they are in, but they might change document between being
- added to one document's set/list and executing those scripts, so
- they might be delaying another document but still be in this
- document's set/list. -->
+ <li><p><a href=#spin-the-event-loop>Spin the event loop</a> until the <a href=#set-of-scripts-that-will-execute-as-soon-as-possible>set of scripts that will execute as soon
+ as possible</a> and the <a href=#list-of-scripts-that-will-execute-in-order-as-soon-as-possible>list of scripts that will execute in order as soon as
+ possible</a> are empty.</li> <!-- this step is not redundant with the next one, since
+ <script> nodes delay the load event of the document they are in, but they might change document
+ between being added to one document's set/list and executing those scripts, so they might be
+ delaying another document but still be in this document's set/list. -->
- <li><p><a href=#spin-the-event-loop>Spin the event loop</a> until there is nothing that
- <dfn id=delay-the-load-event title="delay the load event">delays the load event</dfn> in
- the <code><a href=#document>Document</a></code>.</li>
+ <li><p><a href=#spin-the-event-loop>Spin the event loop</a> until there is nothing that <dfn id=delay-the-load-event title="delay the load
+ event">delays the load event</dfn> in the <code><a href=#document>Document</a></code>.</li>
<li>
@@ -94118,17 +93727,14 @@
<li><code title="">-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN</code></li>
<li><code title="">-//W3C//DTD MathML 2.0//EN</code></li>
<li><code title="">-//WAPFORUM//DTD XHTML Mobile 1.0//EN</code></li>
- </ul><p>Furthermore, user agents should attempt to retrieve the above
- external entity's content when one of the above public identifiers
- is used, and should not attempt to retrieve any other external
+ </ul><p>Furthermore, user agents should attempt to retrieve the above external entity's content when
+ one of the above public identifiers is used, and should not attempt to retrieve any other external
entity's content.</p>
- <p class=note>This is not strictly a <a href=#willful-violation title="willful
- violation">violation</a> of the XML specification, but it does
- contradict the spirit of the XML specification's requirements. This
- is motivated by a desire for user agents to all handle entities in
- an interoperable fashion without requiring any network access for
- handling external subsets. <a href=#refsXML>[XML]</a></p>
+ <p class=note>This is not strictly a <a href=#willful-violation title="willful violation">violation</a> of the XML
+ specification, but it does contradict the spirit of the XML specification's requirements. This is
+ motivated by a desire for user agents to all handle entities in an interoperable fashion without
+ requiring any network access for handling external subsets. <a href=#refsXML>[XML]</a></p>
<p id=scriptTagXML>When an <a href=#xml-parser>XML parser</a> creates a <code><a href=#the-script-element>script</a></code> element, it
must be marked as being <a href=#parser-inserted>"parser-inserted"</a> and its <a href=#force-async>"force-async"</a> flag
@@ -94139,45 +93745,36 @@
<code><a href=#the-script-element>script</a></code> element. If this causes there to be a <a href=#pending-parsing-blocking-script>pending parsing-blocking
script</a>, then the user agent must run the following steps:</p>
- <ol><li><p>Block this instance of the <a href=#xml-parser>XML parser</a>, such
- that the <a href=#event-loop>event loop</a> will not run <a href=#concept-task title=concept-task>tasks</a> that invoke it.</li>
+ <ol><li><p>Block this instance of the <a href=#xml-parser>XML parser</a>, such that the <a href=#event-loop>event loop</a>
+ will not run <a href=#concept-task title=concept-task>tasks</a> that invoke it.</li>
- <li><p><a href=#spin-the-event-loop>Spin the event loop</a> until the parser's
- <code><a href=#document>Document</a></code> <a href=#has-no-style-sheet-that-is-blocking-scripts>has no style sheet that is blocking
- scripts</a> and the <a href=#pending-parsing-blocking-script>pending parsing-blocking
- script</a>'s <a href=#ready-to-be-parser-executed>"ready to be parser-executed"</a> flag is
- set.</li>
+ <li><p><a href=#spin-the-event-loop>Spin the event loop</a> until the parser's <code><a href=#document>Document</a></code> <a href=#has-no-style-sheet-that-is-blocking-scripts>has no
+ style sheet that is blocking scripts</a> and the <a href=#pending-parsing-blocking-script>pending parsing-blocking
+ script</a>'s <a href=#ready-to-be-parser-executed>"ready to be parser-executed"</a> flag is set.</li>
- <li><p>Unblock this instance of the <a href=#xml-parser>XML parser</a>, such
- that <a href=#concept-task title=concept-task>tasks</a> that invoke it can
- again be run.</li>
+ <li><p>Unblock this instance of the <a href=#xml-parser>XML parser</a>, such that <a href=#concept-task title=concept-task>tasks</a> that invoke it can again be run.</li>
- <li><p><a href=#execute-the-script-block title="execute the script block">Execute</a> the
- <a href=#pending-parsing-blocking-script>pending parsing-blocking script</a>.</li>
-
- <li><p>There is no longer a <a href=#pending-parsing-blocking-script>pending parsing-blocking
+ <li><p><a href=#execute-the-script-block title="execute the script block">Execute</a> the <a href=#pending-parsing-blocking-script>pending parsing-blocking
script</a>.</li>
+ <li><p>There is no longer a <a href=#pending-parsing-blocking-script>pending parsing-blocking script</a>.</li>
+
</ol><p class=note>Since the <code title=dom-document-write><a href=#dom-document-write>document.write()</a></code> API is not
- available for <a href=#xml-documents>XML documents</a>, much of the complexity in
- the <a href=#html-parser>HTML parser</a> is not needed in the <a href=#xml-parser>XML
- parser</a>.</p>
+ available for <a href=#xml-documents>XML documents</a>, much of the complexity in the <a href=#html-parser>HTML parser</a>
+ is not needed in the <a href=#xml-parser>XML parser</a>.</p>
- <p>Certain algorithms in this specification <dfn id=feed-the-parser title="feed the
- parser">spoon-feed the parser</dfn> characters one string at a
- time. In such cases, the <a href=#xml-parser>XML parser</a> must act as it
- would have if faced with a single string consisting of the
- concatenation of all those characters.</p>
+ <p>Certain algorithms in this specification <dfn id=feed-the-parser title="feed the parser">spoon-feed the
+ parser</dfn> characters one string at a time. In such cases, the <a href=#xml-parser>XML parser</a> must act
+ as it would have if faced with a single string consisting of the concatenation of all those
+ characters.</p>
- <p>When an <a href=#xml-parser>XML parser</a> reaches the end of its input, it
- must <a href=#stop-parsing>stop parsing</a>, following the same rules as the
- <a href=#html-parser>HTML parser</a>. An <a href=#xml-parser>XML parser</a> can also be
- <a href=#abort-a-parser title="abort a parser">aborted</a>, which must again by
- done in the same way as for an <a href=#html-parser>HTML parser</a>.</p>
+ <p>When an <a href=#xml-parser>XML parser</a> reaches the end of its input, it must <a href=#stop-parsing>stop
+ parsing</a>, following the same rules as the <a href=#html-parser>HTML parser</a>. An <a href=#xml-parser>XML
+ parser</a> can also be <a href=#abort-a-parser title="abort a parser">aborted</a>, which must again by done in
+ the same way as for an <a href=#html-parser>HTML parser</a>.</p>
- <p>For the purposes of conformance checkers, if a resource is
- determined to be in <a href=#the-xhtml-syntax>the XHTML syntax</a>, then it is an
- <a href=#xml-documents title="XML documents">XML document</a>.</p>
+ <p>For the purposes of conformance checkers, if a resource is determined to be in <a href=#the-xhtml-syntax>the XHTML
+ syntax</a>, then it is an <a href=#xml-documents title="XML documents">XML document</a>.</p>
Modified: source
===================================================================
--- source 2013-02-05 20:33:00 UTC (rev 7694)
+++ source 2013-02-05 22:23:45 UTC (rev 7695)
@@ -12720,30 +12720,24 @@
<h3>Interactions with XPath and XSLT</h3>
- <p id="xpath-1.0-processors">Implementations of XPath 1.0 that
- operate on <span>HTML documents</span> parsed or created in the
- manners described in this specification (e.g. as part of the <code
- title="">document.evaluate()</code> API) must act as if the
- following edit was applied to the XPath 1.0 specification.</p>
+ <p id="xpath-1.0-processors">Implementations of XPath 1.0 that operate on <span>HTML
+ documents</span> parsed or created in the manners described in this specification (e.g. as part of
+ the <code title="">document.evaluate()</code> API) must act as if the following edit was applied
+ to the XPath 1.0 specification.</p>
<p>First, remove this paragraph:</p>
<blockquote cite="http://www.w3.org/TR/1999/REC-xpath-19991116#node-tests">
- <p>A <a
- href="http://www.w3.org/TR/REC-xml-names#NT-QName">QName</a> in the
- node test is expanded into an <a
- href="http://www.w3.org/TR/1999/REC-xpath-19991116#dt-expanded-name">expanded-name</a>
- using the namespace declarations from the expression context. This
- is the same way expansion is done for element type names in start
- and end-tags except that the default namespace declared with <code
- title="">xmlns</code> is not used: if the <a
- href="http://www.w3.org/TR/REC-xml-names#NT-QName">QName</a> does
- not have a prefix, then the namespace URI is null (this is the same
- way attribute names are expanded). It is an error if the <a
- href="http://www.w3.org/TR/REC-xml-names#NT-QName">QName</a> has a
- prefix for which there is no namespace declaration in the
- expression context.</p>
+ <p>A <a href="http://www.w3.org/TR/REC-xml-names#NT-QName">QName</a> in the node test is expanded
+ into an <a href="http://www.w3.org/TR/1999/REC-xpath-19991116#dt-expanded-name">expanded-name</a>
+ using the namespace declarations from the expression context. This is the same way expansion is
+ done for element type names in start and end-tags except that the default namespace declared with
+ <code title="">xmlns</code> is not used: if the <a
+ href="http://www.w3.org/TR/REC-xml-names#NT-QName">QName</a> does not have a prefix, then the
+ namespace URI is null (this is the same way attribute names are expanded). It is an error if the
+ <a href="http://www.w3.org/TR/REC-xml-names#NT-QName">QName</a> has a prefix for which there is
+ no namespace declaration in the expression context.</p>
</blockquote>
@@ -12751,99 +12745,80 @@
<blockquote cite="http://www.w3.org/Bugs/Public/show_bug.cgi?id=7059#c37">
- <p>A QName in the node test is expanded into an expanded-name using
- the namespace declarations from the expression context. If the
- QName has a prefix, then there must be a<!-- added 2009-10-27 -
- http://www.w3.org/Bugs/Public/show_bug.cgi?id=8062 --> namespace
- declaration for this prefix in the expression context, and the
- corresponding<!-- typo fixed 2009-10-27 -
- http://www.w3.org/Bugs/Public/show_bug.cgi?id=8063 --> namespace
- URI is the one that is associated with this prefix. It is an error
- if the QName has a prefix for which there is no namespace
- declaration in the expression context. </p>
+ <p>A QName in the node test is expanded into an expanded-name using the namespace declarations
+ from the expression context. If the QName has a prefix, then there must be a<!-- added 2009-10-27
+ - http://www.w3.org/Bugs/Public/show_bug.cgi?id=8062 --> namespace declaration for this prefix in
+ the expression context, and the corresponding<!-- typo fixed 2009-10-27 -
+ http://www.w3.org/Bugs/Public/show_bug.cgi?id=8063 --> namespace URI is the one that is
+ associated with this prefix. It is an error if the QName has a prefix for which there is no
+ namespace declaration in the expression context. </p>
- <p>If the QName has no prefix and the principal node type of the
- axis is element, then the default element namespace is
- used. Otherwise if the QName has no prefix, the namespace URI is
- null. The default element namespace is a member of the context for
- the XPath expression. The value of the default element namespace
- when executing an XPath expression through the DOM3 XPath API is
- determined in the following way:</p>
+ <p>If the QName has no prefix and the principal node type of the axis is element, then the
+ default element namespace is used. Otherwise if the QName has no prefix, the namespace URI is
+ null. The default element namespace is a member of the context for the XPath expression. The
+ value of the default element namespace when executing an XPath expression through the DOM3 XPath
+ API is determined in the following way:</p>
<ol>
- <li>If the context node is from an HTML DOM, the default element
- namespace is "http://www.w3.org/1999/xhtml".</li>
+ <li>If the context node is from an HTML DOM, the default element namespace is
+ "http://www.w3.org/1999/xhtml".</li>
<li>Otherwise, the default element namespace URI is null.</li>
</ol>
- <p class="note">This is equivalent to adding the default element
- namespace feature of XPath 2.0 to XPath 1.0, and using the HTML
- namespace as the default element namespace for HTML documents. It
- is motivated by the desire to have implementations be compatible
- with legacy HTML content while still supporting the changes that
- this specification introduces to HTML regarding the namespace used
- for HTML elements, and by the desire to use XPath 1.0 rather than
- XPath 2.0.</p>
+ <p class="note">This is equivalent to adding the default element namespace feature of XPath 2.0
+ to XPath 1.0, and using the HTML namespace as the default element namespace for HTML documents.
+ It is motivated by the desire to have implementations be compatible with legacy HTML content
+ while still supporting the changes that this specification introduces to HTML regarding the
+ namespace used for HTML elements, and by the desire to use XPath 1.0 rather than XPath 2.0.</p>
</blockquote>
- <p class="note">This change is a <span>willful violation</span> of
- the XPath 1.0 specification, motivated by desire to have
- implementations be compatible with legacy content while still
- supporting the changes that this specification introduces to HTML
- regarding which namespace is used for HTML elements. <a
- href="#refsXPATH10">[XPATH10]</a></p> <!-- note: version matters for
+ <p class="note">This change is a <span>willful violation</span> of the XPath 1.0 specification,
+ motivated by desire to have implementations be compatible with legacy content while still
+ supporting the changes that this specification introduces to HTML regarding which namespace is
+ used for HTML elements. <a href="#refsXPATH10">[XPATH10]</a></p> <!-- note: version matters for
this ref -->
<hr>
- <p id="dom-based-xslt-1.0-processors">XSLT 1.0 processors outputting
- to a DOM when the output method is "html" (either explicitly or via
- the defaulting rule in XSLT 1.0) are affected as follows:</p>
+ <p id="dom-based-xslt-1.0-processors">XSLT 1.0 processors outputting to a DOM when the output
+ method is "html" (either explicitly or via the defaulting rule in XSLT 1.0) are affected as
+ follows:</p>
- <p>If the transformation program outputs an element in no namespace,
- the processor must, prior to constructing the corresponding DOM
- element node, change the namespace of the element to the <span>HTML
- namespace</span>, <span title="converted to ASCII
- lowercase">ASCII-lowercase</span> the element's local name, and
- <span title="converted to ASCII lowercase">ASCII-lowercase</span>
- the names of any non-namespaced attributes on the element.</p>
+ <p>If the transformation program outputs an element in no namespace, the processor must, prior to
+ constructing the corresponding DOM element node, change the namespace of the element to the
+ <span>HTML namespace</span>, <span title="converted to ASCII lowercase">ASCII-lowercase</span> the
+ element's local name, and <span title="converted to ASCII lowercase">ASCII-lowercase</span> the
+ names of any non-namespaced attributes on the element.</p>
- <p class="note">This requirement is a <span>willful violation</span>
- of the XSLT 1.0 specification, required because this specification
- changes the namespaces and case-sensitivity rules of HTML in a
- manner that would otherwise be incompatible with DOM-based XSLT
- transformations. (Processors that serialize the output are
- unaffected.) <a href="#refsXSLT10">[XSLT10]</a></p> <!-- note:
- version matters for this ref -->
+ <p class="note">This requirement is a <span>willful violation</span> of the XSLT 1.0
+ specification, required because this specification changes the namespaces and case-sensitivity
+ rules of HTML in a manner that would otherwise be incompatible with DOM-based XSLT
+ transformations. (Processors that serialize the output are unaffected.) <a
+ href="#refsXSLT10">[XSLT10]</a></p> <!-- note: version matters for this ref -->
<hr>
- <p>This specification does not specify precisely how XSLT processing
- interacts with the <span>HTML parser</span> infrastructure (for
- example, whether an XSLT processor acts as if it puts any elements
- into a <span>stack of open elements</span>). However, XSLT
- processors must <span>stop parsing</span> if they successfully
- complete, and must set the <span>current document readiness</span>
- first to "<code title="">interactive</code>"<!-- this synchronously
- fires an event --> and then to "<code title="">complete</code>"<!--
- this also synchronously fires an event --> if they are aborted.</p>
+ <p>This specification does not specify precisely how XSLT processing interacts with the <span>HTML
+ parser</span> infrastructure (for example, whether an XSLT processor acts as if it puts any
+ elements into a <span>stack of open elements</span>). However, XSLT processors must <span>stop
+ parsing</span> if they successfully complete, and must set the <span>current document
+ readiness</span> first to "<code title="">interactive</code>"<!-- this synchronously fires an
+ event --> and then to "<code title="">complete</code>"<!-- this also synchronously fires an event
+ --> if they are aborted.</p>
<hr>
- <p>This specification does not specify how XSLT interacts with the
- <span title="navigate">navigation</span> algorithm, how it fits in
- with the <span>event loop</span>, nor how error pages are to be
- handled (e.g. whether XSLT errors are to replace an incremental XSLT
+ <p>This specification does not specify how XSLT interacts with the <span
+ title="navigate">navigation</span> algorithm, how it fits in with the <span>event loop</span>, nor
+ how error pages are to be handled (e.g. whether XSLT errors are to replace an incremental XSLT
output, or are rendered inline, etc).</p>
- <p class="note">There are also additional non-normative comments
- regarding the interaction of XSLT and HTML <a
- href="#scriptTagXSLT">in the <code>script</code> element
- section</a>.</p>
+ <p class="note">There are also additional non-normative comments regarding the interaction of XSLT
+ and HTML <a href="#scriptTagXSLT">in the <code>script</code> element section</a>.</p>
</div>
@@ -13109,29 +13084,27 @@
<div class="impl">
- <p>The <dfn title="dom-document-close"><code>close()</code></dfn>
- method must run the following steps:</p>
+ <p>The <dfn title="dom-document-close"><code>close()</code></dfn> method must run the following
+ steps:</p>
<ol>
- <li><p>If the <code>Document</code> object is not flagged as an
- <span title="HTML documents">HTML document</span>, throw an
- <code>InvalidStateError</code> exception and abort these
+ <li><p>If the <code>Document</code> object is not flagged as an <span title="HTML documents">HTML
+ document</span>, throw an <code>InvalidStateError</code> exception and abort these
steps.</p></li>
- <li><p>If there is no <span>script-created parser</span> associated
- with the document, then abort these steps.</p></li>
+ <li><p>If there is no <span>script-created parser</span> associated with the document, then abort
+ these steps.</p></li>
- <li><p>Insert an <span>explicit "EOF" character</span> at the end
- of the parser's <span>input stream</span>.</p></li>
+ <li><p>Insert an <span>explicit "EOF" character</span> at the end of the parser's <span>input
+ stream</span>.</p></li>
- <li><p>If there is a <span>pending parsing-blocking script</span>,
- then abort these steps.</p></li>
+ <li><p>If there is a <span>pending parsing-blocking script</span>, then abort these
+ steps.</p></li>
- <li><p>Run the tokenizer, processing resulting tokens as they are
- emitted, and stopping when the tokenizer reaches the <span>explicit
- "EOF" character</span> or <span title="spin the event loop">spins
- the event loop</span>.</p></li>
+ <li><p>Run the tokenizer, processing resulting tokens as they are emitted, and stopping when the
+ tokenizer reaches the <span>explicit "EOF" character</span> or <span title="spin the event
+ loop">spins the event loop</span>.</p></li>
</ol>
@@ -15347,16 +15320,13 @@
<h4 id="styling"><dfn title="styling processing model">Styling</dfn></h4>
- <p>The <code>link</code> and <code>style</code> elements can provide
- styling information for the user agent to use when rendering the
- document. The CSS and CSSOM specifications specify what styling
- information is to be used by the user agent and how it is to be
- used. <a href="#refsCSS">[CSS]</a> <a
- href="#refsCSSOM">[CSSOM]</a></p>
+ <p>The <code>link</code> and <code>style</code> elements can provide styling information for the
+ user agent to use when rendering the document. The CSS and CSSOM specifications specify what
+ styling information is to be used by the user agent and how it is to be used. <a
+ href="#refsCSS">[CSS]</a> <a href="#refsCSSOM">[CSSOM]</a></p>
- <p>The <code>style</code> and <code>link</code> elements implement
- the <code>LinkStyle</code> interface. <a
- href="#refsCSSOM">[CSSOM]</a></p>
+ <p>The <code>style</code> and <code>link</code> elements implement the <code>LinkStyle</code>
+ interface. <a href="#refsCSSOM">[CSSOM]</a></p>
<div class="impl">
@@ -15383,136 +15353,105 @@
<dt>The style sheet type</dt>
- <dd><p>The style sheet type must be the same as the style's specified
- type. For <code>style</code> elements, this is the same as the
- <code title="attr-style-type">type</code> content attribute's
- value, or <code title="">text/css</code> if that is omitted. For
- <code>link</code> elements, this is the <span
- title="Content-Type">Content-Type metadata of the specified
- resource</span>.</p></dd>
+ <dd><p>The style sheet type must be the same as the style's specified type. For
+ <code>style</code> elements, this is the same as the <code title="attr-style-type">type</code>
+ content attribute's value, or <code title="">text/css</code> if that is omitted. For
+ <code>link</code> elements, this is the <span title="Content-Type">Content-Type metadata of the
+ specified resource</span>.</p></dd>
<dt>The style sheet location</dt>
- <dd><p>For <code>link</code> elements, the location must be the
- result of <span title="resolve a url">resolving</span> the
- <span>URL</span> given by the element's <code
- title="attr-link-href">href</code> content attribute, relative to
- the element, or the empty string if that fails. For
- <code>style</code> elements, there is no location.</p></dd> <!--
- note that this might not match the style sheet URL, if the base URL
- has changed for instance -->
+ <dd><p>For <code>link</code> elements, the location must be the result of <span title="resolve a
+ url">resolving</span> the <span>URL</span> given by the element's <code
+ title="attr-link-href">href</code> content attribute, relative to the element, or the empty
+ string if that fails. For <code>style</code> elements, there is no location.</p></dd> <!-- note
+ that this might not match the style sheet URL, if the base URL has changed for instance -->
<dt>The style sheet media</dt>
- <dd><p>The media must be the same as the value of the element's
- <code title="">media</code> content attribute, or the empty string,
- if the attribute is omitted.</p></dd>
+ <dd><p>The media must be the same as the value of the element's <code title="">media</code>
+ content attribute, or the empty string, if the attribute is omitted.</p></dd>
<dt>The style sheet title</dt>
- <dd><p>The title must be the same as the value of the element's
- <code title="dom-title">title</code> content attribute, if the
- attribute is present and has a non-empty value. If the attribute is
- absent or its value is the empty string, then the style sheet does
- not have a title (it is the empty string). The title is used for
- defining <span>alternative style sheet sets</span>.</p></dd>
+ <dd><p>The title must be the same as the value of the element's <code
+ title="dom-title">title</code> content attribute, if the attribute is present and has a non-empty
+ value. If the attribute is absent or its value is the empty string, then the style sheet does not
+ have a title (it is the empty string). The title is used for defining <span>alternative style
+ sheet sets</span>.</p></dd>
<dt>The style sheet alternate flag</dt>
- <dd><p>For <code>link</code> elements, true if <span>the link is an
- alternative stylesheet</span>. In all other cases, false.</p></dd>
+ <dd><p>For <code>link</code> elements, true if <span>the link is an alternative
+ stylesheet</span>. In all other cases, false.</p></dd>
<!--
- <dt>The style sheet disabled flag</dt>
- (not included, because I assume CSSOM will change to not require
- this spec to initialise the value, but will instead initialise it
- based on the other values)
+ <dt>The style sheet disabled flag</dt> (not included, because I assume CSSOM will change to not
+ require this spec to initialise the value, but will instead initialise it based on the other
+ values)
-->
</dl>
<p>The same object must be returned each time.</p>
- <p>The <dfn
- title="dom-LinkStyle-disabled"><code>disabled</code></dfn> IDL
- attribute on <code>link</code> and <code>style</code> elements must
- return false and do nothing on setting, if the <code
- title="dom-linkstyle-sheet">sheet</code> attribute of their
- <code>LinkStyle</code> interface is null. Otherwise, it must return
- the value of the <code>StyleSheet</code> interface's <code
- title="dom-stylesheet-disabled">disabled</code> attribute on
- getting, and forward the new value to that same attribute on
- setting.</p>
+ <p>The <dfn title="dom-LinkStyle-disabled"><code>disabled</code></dfn> IDL attribute on
+ <code>link</code> and <code>style</code> elements must return false and do nothing on setting, if
+ the <code title="dom-linkstyle-sheet">sheet</code> attribute of their <code>LinkStyle</code>
+ interface is null. Otherwise, it must return the value of the <code>StyleSheet</code> interface's
+ <code title="dom-stylesheet-disabled">disabled</code> attribute on getting, and forward the new
+ value to that same attribute on setting.</p>
- <!-- [CSSOM] covers the following: the term "alternative style sheet
- sets", the term "default style sheet set", preferred stylesheets,
- alternative stylesheets, persistent stylesheets, ordering of
- stylesheets, dynamic additions/removals, window.styleSheets, style
- sheets given by HTTP Link: headers, and the alternative style sheet
- API -->
+ <!-- [CSSOM] covers the following: the term "alternative style sheet sets", the term "default
+ style sheet set", preferred stylesheets, alternative stylesheets, persistent stylesheets, ordering
+ of stylesheets, dynamic additions/removals, window.styleSheets, style sheets given by HTTP Link:
+ headers, and the alternative style sheet API -->
- <p id="alternate-style-sheets">The rules for handling alternative
- style sheets are defined in the CSS object model specification. <a
- href="#refsCSSOM">[CSSOM]</a></p>
+ <p id="alternate-style-sheets">The rules for handling alternative style sheets are defined in the
+ CSS object model specification. <a href="#refsCSSOM">[CSSOM]</a></p>
<hr>
- <p>Style sheets, whether added by a <code>link</code> element, a
- <code>style</code> element, an <code><?xml-stylesheet></code> PI,
- an HTTP <code title="http-link">Link:</code> header, or some other
- mechanism, have a <dfn>style sheet ready</dfn> flag, which is
- initially unset.</p>
+ <p>Style sheets, whether added by a <code>link</code> element, a <code>style</code> element, an
+ <code><?xml-stylesheet></code> PI, an HTTP <code title="http-link">Link:</code> header, or some
+ other mechanism, have a <dfn>style sheet ready</dfn> flag, which is initially unset.</p>
- <p>When a style sheet is ready to be applied, its <span>style sheet
- ready</span> flag must be set. If the style sheet referenced no
- other resources (e.g. it was an internal style sheet given by a
- <code>style</code> element with no <code title="">@import</code>
- rules), then the style rules must be synchronously made available to
- script; otherwise, the style rules must only be made available to
- script once the <span>event loop</span> reaches its "update the
- rendering" step.</p>
+ <p>When a style sheet is ready to be applied, its <span>style sheet ready</span> flag must be set.
+ If the style sheet referenced no other resources (e.g. it was an internal style sheet given by a
+ <code>style</code> element with no <code title="">@import</code> rules), then the style rules must
+ be synchronously made available to script; otherwise, the style rules must only be made available
+ to script once the <span>event loop</span> reaches its "update the rendering" step.</p>
- <p>A style sheet in the context of the <code>Document</code> of an
- <span>HTML parser</span> or <span>XML parser</span> is said to be
- <dfn>a style sheet that is blocking scripts</dfn> if the element was
- created by that <code>Document</code>'s parser, and the element is
- either a <code>style</code> element or a <code>link</code> element
- that was an <span title="rel-stylesheet">external resource link that
- contributes to the styling processing model</span> when the element
- was created by the parser, and the element's style sheet was enabled
- when the element was created by the parser, and the element's
- <span>style sheet ready</span> flag is not yet set, and, the last
- time the <span>event loop</span> reached step 1, the element was
- <span title="in a document">in that <code>Document</code></span>,
- and the user agent hasn't given up on that particular style sheet
- yet. A user agent may give up on a style sheet at any time.</p>
+ <p>A style sheet in the context of the <code>Document</code> of an <span>HTML parser</span> or
+ <span>XML parser</span> is said to be <dfn>a style sheet that is blocking scripts</dfn> if the
+ element was created by that <code>Document</code>'s parser, and the element is either a
+ <code>style</code> element or a <code>link</code> element that was an <span
+ title="rel-stylesheet">external resource link that contributes to the styling processing
+ model</span> when the element was created by the parser, and the element's style sheet was enabled
+ when the element was created by the parser, and the element's <span>style sheet ready</span> flag
+ is not yet set, and, the last time the <span>event loop</span> reached step 1, the element was
+ <span title="in a document">in that <code>Document</code></span>, and the user agent hasn't given
+ up on that particular style sheet yet. A user agent may give up on a style sheet at any time.</p>
- <p class="note">Giving up on a style sheet before the style sheet
- loads, if the style sheet eventually does still load, means that the
- script might end up operating with incorrect information. For
- example, if a style sheet sets the color of an element to green, but
- a script that inspects the resulting style is executed before the
- sheet is loaded, the script will find that the element is black (or
- whatever the default color is), and might thus make poor choices
- (e.g. deciding to use black as the color elsewhere on the page,
- instead of green). Implementors have to balance the likelihood of a
- script using incorrect information with the performance impact of
- doing nothing while waiting for a slow network request to
- finish.</p>
+ <p class="note">Giving up on a style sheet before the style sheet loads, if the style sheet
+ eventually does still load, means that the script might end up operating with incorrect
+ information. For example, if a style sheet sets the color of an element to green, but a script
+ that inspects the resulting style is executed before the sheet is loaded, the script will find
+ that the element is black (or whatever the default color is), and might thus make poor choices
+ (e.g. deciding to use black as the color elsewhere on the page, instead of green). Implementors
+ have to balance the likelihood of a script using incorrect information with the performance impact
+ of doing nothing while waiting for a slow network request to finish.</p>
- <p>A <code>Document</code> <dfn>has a style sheet that is blocking
- scripts</dfn> if there is either <span>a style sheet that is
- blocking scripts</span> in the context of that
- <code>Document</code>, or if that <code>Document</code> is in a
- <span>browsing context</span> that has a <span>parent browsing
- context</span>, and the <span>active document</span> of that
- <span>parent browsing context</span> itself <span>has a style sheet
- that is blocking scripts</span>.</p>
+ <p>A <code>Document</code> <dfn>has a style sheet that is blocking scripts</dfn> if there is
+ either <span>a style sheet that is blocking scripts</span> in the context of that
+ <code>Document</code>, or if that <code>Document</code> is in a <span>browsing context</span> that
+ has a <span>parent browsing context</span>, and the <span>active document</span> of that
+ <span>parent browsing context</span> itself <span>has a style sheet that is blocking
+ scripts</span>.</p>
- <p>A <code>Document</code> <dfn>has no style sheet that is blocking
- scripts</dfn> if it does not <span title="has a style sheet that is
- blocking scripts">have a style sheet that is blocking scripts</span>
- as defined in the previous paragraph.</p>
+ <p>A <code>Document</code> <dfn>has no style sheet that is blocking scripts</dfn> if it does not
+ <span title="has a style sheet that is blocking scripts">have a style sheet that is blocking
+ scripts</span> as defined in the previous paragraph.</p>
</div>
@@ -30886,8 +30825,8 @@
<p><span>Queue a task</span> to <span>fire a simple event</span> named <code
title="event-media-loadedmetadata">loadedmetadata</code> at the element.</p>
- <p class="note">Before this task is run, as part of the event loop mechanism, the rendering
- will have been updated to resize the <code>video</code> element if appropriate.</p>
+ <p class="note">Before this task is run, as part of the <span>event loop</span> mechanism, the
+ rendering will have been updated to resize the <code>video</code> element if appropriate.</p>
</dd>
@@ -34664,75 +34603,59 @@
</dl>
- <p>If the <span>text track mode</span> of the <span>text
- track</span> that the <code>TextTrack</code> object represents is
- not the <span>text track disabled</span> mode, then the <dfn
- title="dom-TextTrack-cues"><code>cues</code></dfn> attribute must
- return a <span>live</span> <code>TextTrackCueList</code> object that
- represents the subset of the <span>text track list of cues</span> of
- the <span>text track</span> that the <code>TextTrack</code> object
- represents whose <span title="text track cue end time">end
- times</span> occur at or after the <span>earliest possible position
- when the script started</span>, in <span>text track cue
- order</span>. Otherwise, it must return null. When an object is
- returned, the same object must be returned each time.</p>
+ <p>If the <span>text track mode</span> of the <span>text track</span> that the
+ <code>TextTrack</code> object represents is not the <span>text track disabled</span> mode, then
+ the <dfn title="dom-TextTrack-cues"><code>cues</code></dfn> attribute must return a
+ <span>live</span> <code>TextTrackCueList</code> object that represents the subset of the
+ <span>text track list of cues</span> of the <span>text track</span> that the
+ <code>TextTrack</code> object represents whose <span title="text track cue end time">end
+ times</span> occur at or after the <span>earliest possible position when the script
+ started</span>, in <span>text track cue order</span>. Otherwise, it must return null. When an
+ object is returned, the same object must be returned each time.</p>
- <p>The <dfn>earliest possible position when the script started</dfn>
- is whatever the <span>earliest possible position</span> was the last
- time the <span>event loop</span> reached step 1.</p>
+ <p>The <dfn>earliest possible position when the script started</dfn> is whatever the
+ <span>earliest possible position</span> was the last time the <span>event loop</span> reached step
+ 1.</p>
- <p>If the <span>text track mode</span> of the <span>text
- track</span> that the <code>TextTrack</code> object represents is
- not the <span>text track disabled</span> mode, then the <dfn
- title="dom-TextTrack-activeCues"><code>activeCues</code></dfn>
- attribute must return a <span>live</span>
- <code>TextTrackCueList</code> object that represents the subset of
- the <span>text track list of cues</span> of the <span>text
- track</span> that the <code>TextTrack</code> object represents
- whose <span>active flag was set when the script started</span>, in
- <span>text track cue order</span>. Otherwise, it must return
- null. When an object is returned, the same object must be returned
- each time.</p>
+ <p>If the <span>text track mode</span> of the <span>text track</span> that the
+ <code>TextTrack</code> object represents is not the <span>text track disabled</span> mode, then
+ the <dfn title="dom-TextTrack-activeCues"><code>activeCues</code></dfn> attribute must return a
+ <span>live</span> <code>TextTrackCueList</code> object that represents the subset of the
+ <span>text track list of cues</span> of the <span>text track</span> that the
+ <code>TextTrack</code> object represents whose <span>active flag was set when the script
+ started</span>, in <span>text track cue order</span>. Otherwise, it must return null. When an
+ object is returned, the same object must be returned each time.</p>
- <p>A <span>text track cue</span>'s <dfn>active flag was set when
- the script started</dfn> if its <span>text track cue active
- flag</span> was set the last time the <span>event loop</span>
- reached step 1.</p>
+ <p>A <span>text track cue</span>'s <dfn>active flag was set when the script started</dfn> if its
+ <span>text track cue active flag</span> was set the last time the <span>event loop</span> reached
+ step 1.</p>
<hr>
- <p>The <dfn title="dom-TextTrack-addCue"><code>addCue(<var
- title="">cue</var>)</code></dfn> method of <code>TextTrack</code>
- objects, when invoked, must run the following steps:</p>
+ <p>The <dfn title="dom-TextTrack-addCue"><code>addCue(<var title="">cue</var>)</code></dfn> method
+ of <code>TextTrack</code> objects, when invoked, must run the following steps:</p>
<ol>
- <li><p>If the given <var title="">cue</var> is in a <span>text
- track list of cues</span>, then remove <var title="">cue</var> from
- that <span>text track list of cues</span>.</p></li>
+ <li><p>If the given <var title="">cue</var> is in a <span>text track list of cues</span>, then
+ remove <var title="">cue</var> from that <span>text track list of cues</span>.</p></li>
- <li><p>Add <var title="">cue</var> to the method's
- <code>TextTrack</code> object's <span>text track</span>'s
- <span>text track list of cues</span>.</p></li>
+ <li><p>Add <var title="">cue</var> to the method's <code>TextTrack</code> object's <span>text
+ track</span>'s <span>text track list of cues</span>.</p></li>
</ol>
- <p>The <dfn
- title="dom-TextTrack-removeCue"><code>removeCue(<var
- title="">cue</var>)</code></dfn> method of
- <code>TextTrack</code> objects, when invoked, must run the
- following steps:</p>
+ <p>The <dfn title="dom-TextTrack-removeCue"><code>removeCue(<var title="">cue</var>)</code></dfn>
+ method of <code>TextTrack</code> objects, when invoked, must run the following steps:</p>
<ol>
- <li><p>If the given <var title="">cue</var> is not currently listed
- in the method's <code>TextTrack</code> object's <span>text
- track</span>'s <span>text track list of cues</span>, then throw a
- <code>NotFoundError</code> exception.</p></li>
+ <li><p>If the given <var title="">cue</var> is not currently listed in the method's
+ <code>TextTrack</code> object's <span>text track</span>'s <span>text track list of cues</span>,
+ then throw a <code>NotFoundError</code> exception.</p></li>
- <li><p>Remove <var title="">cue</var> from the method's
- <code>TextTrack</code> object's <span>text track</span>'s
- <span>text track list of cues</span>.</p></li>
+ <li><p>Remove <var title="">cue</var> from the method's <code>TextTrack</code> object's
+ <span>text track</span>'s <span>text track list of cues</span>.</p></li>
</ol>
@@ -34740,13 +34663,11 @@
<div class="example">
- <p>In this example, an <code>audio</code> element is used to play a
- specific sound-effect from a sound file containing many sound
- effects. A cue is used to pause the audio, so that it ends exactly
- at the end of the clip, even if the browser is busy running some
- script. If the page had relied on script to pause the audio, then
- the start of the next clip might be heard if the browser was not
- able to run the script at the exact time specified.</p>
+ <p>In this example, an <code>audio</code> element is used to play a specific sound-effect from a
+ sound file containing many sound effects. A cue is used to pause the audio, so that it ends
+ exactly at the end of the clip, even if the browser is busy running some script. If the page had
+ relied on script to pause the audio, then the start of the next clip might be heard if the
+ browser was not able to run the script at the exact time specified.</p>
<pre>var sfx = new Audio('sfx.wav');
var sounds = sfx.addTextTrack('metadata');
@@ -34808,38 +34729,29 @@
<div class="impl">
- <p>A <code>TextTrackCueList</code> object represents a dynamically
- updating list of <span title="text track cue">text track
- cues</span> in a given order.</p>
+ <p>A <code>TextTrackCueList</code> object represents a dynamically updating list of <span
+ title="text track cue">text track cues</span> in a given order.</p>
- <p>The <dfn
- title="dom-TextTrackCueList-length"><code>length</code></dfn>
- attribute must return the number of <span title="text track
- cue">cues</span> in the list represented by the
+ <p>The <dfn title="dom-TextTrackCueList-length"><code>length</code></dfn> attribute must return
+ the number of <span title="text track cue">cues</span> in the list represented by the
<code>TextTrackCueList</code> object.</p>
- <p>The <span>supported property indices</span> of a
- <code>TextTrackCueList</code> object at any instant are the numbers
- from zero to the number of <span title="text track cue">cues</span>
- in the list represented by the <code>TextTrackCueList</code> object
- minus one, if any. If there are no <span title="text track
- cue">cues</span> in the list, there are no <span>supported property
+ <p>The <span>supported property indices</span> of a <code>TextTrackCueList</code> object at any
+ instant are the numbers from zero to the number of <span title="text track cue">cues</span> in the
+ list represented by the <code>TextTrackCueList</code> object minus one, if any. If there are no
+ <span title="text track cue">cues</span> in the list, there are no <span>supported property
indices</span>.</p>
- <p>To <span>determine the value of an indexed property</span> for a
- given index <var title="">index</var>, the user agent must return
- the <var title="">index</var>th <span>text track cue</span> in the
- list represented by the <code>TextTrackCueList</code> object.</p>
+ <p>To <span>determine the value of an indexed property</span> for a given index <var
+ title="">index</var>, the user agent must return the <var title="">index</var>th <span>text track
+ cue</span> in the list represented by the <code>TextTrackCueList</code> object.</p>
- <p>The <dfn
- title="dom-TextTrackCueList-getCueById"><code>getCueById(<var
- title="">id</var>)</code></dfn> method, when called with an argument
- other than the empty string, must return the first <span>text track
- cue</span> in the list represented by the
- <code>TextTrackCueList</code> object whose <span>text track cue
- identifier</span> is <var title="">id</var>, if any, or null
- otherwise. If the argument is the empty string, then the method must
- return null.</p>
+ <p>The <dfn title="dom-TextTrackCueList-getCueById"><code>getCueById(<var
+ title="">id</var>)</code></dfn> method, when called with an argument other than the empty string,
+ must return the first <span>text track cue</span> in the list represented by the
+ <code>TextTrackCueList</code> object whose <span>text track cue identifier</span> is <var
+ title="">id</var>, if any, or null otherwise. If the argument is the empty string, then the method
+ must return null.</p>
</div>
@@ -38606,62 +38518,48 @@
<!--END dev-html--><p><i>This section is non-normative.</i></p><!--START dev-html-->
- <p>How accurately various aspects of the <span>media element</span>
- API are implemented is considered a quality-of-implementation issue.</p>
+ <p>How accurately various aspects of the <span>media element</span> API are implemented is
+ considered a quality-of-implementation issue.</p>
- <p>For example, when implementing the <code
- title="attr-media-buffered">buffered</code> attribute, how precise
- an implementation reports the ranges that have been buffered depends
- on how carefully the user agent inspects the data. Since the API
- reports ranges as times, but the data is obtained in byte streams, a
- user agent receiving a variable-bit-rate stream might only be able
- to determine precise times by actually decoding all of the data.
- User agents aren't required to do this, however; they can instead
- return estimates (e.g. based on the average bit rate seen so far)
- which get revised as more information becomes available.</p>
+ <p>For example, when implementing the <code title="attr-media-buffered">buffered</code> attribute,
+ how precise an implementation reports the ranges that have been buffered depends on how carefully
+ the user agent inspects the data. Since the API reports ranges as times, but the data is obtained
+ in byte streams, a user agent receiving a variable-bit-rate stream might only be able to determine
+ precise times by actually decoding all of the data. User agents aren't required to do this,
+ however; they can instead return estimates (e.g. based on the average bit rate seen so far) which
+ get revised as more information becomes available.</p>
- <p>As a general rule, user agents are urged to be conservative
- rather than optimistic. For example, it would be bad to report that
- everything had been buffered when it had not.</p>
+ <p>As a general rule, user agents are urged to be conservative rather than optimistic. For
+ example, it would be bad to report that everything had been buffered when it had not.</p>
- <p>Another quality-of-implementation issue would be playing a video
- backwards when the codec is designed only for forward playback (e.g.
- there aren't many key frames, and they are far apart, and the
- intervening frames only have deltas from the previous frame). User
- agents could do a poor job, e.g. only showing key frames; however,
- better implementations would do more work and thus do a better job,
- e.g. actually decoding parts of the video forwards, storing the
- complete frames, and then playing the frames backwards.</p>
+ <p>Another quality-of-implementation issue would be playing a video backwards when the codec is
+ designed only for forward playback (e.g. there aren't many key frames, and they are far apart, and
+ the intervening frames only have deltas from the previous frame). User agents could do a poor job,
+ e.g. only showing key frames; however, better implementations would do more work and thus do a
+ better job, e.g. actually decoding parts of the video forwards, storing the complete frames, and
+ then playing the frames backwards.</p>
- <p>Similarly, while implementations are allowed to drop buffered
- data at any time (there is no requirement that a user agent keep all
- the media data obtained for the lifetime of the media element), it
- is again a quality of implementation issue: user agents with
- sufficient resources to keep all the data around are encouraged to
- do so, as this allows for a better user experience. For example, if
- the user is watching a live stream, a user agent could allow the
- user only to view the live video; however, a better user agent would
- buffer everything and allow the user to seek through the earlier
- material, pause it, play it forwards and backwards, etc.</p>
+ <p>Similarly, while implementations are allowed to drop buffered data at any time (there is no
+ requirement that a user agent keep all the media data obtained for the lifetime of the media
+ element), it is again a quality of implementation issue: user agents with sufficient resources to
+ keep all the data around are encouraged to do so, as this allows for a better user experience. For
+ example, if the user is watching a live stream, a user agent could allow the user only to view the
+ live video; however, a better user agent would buffer everything and allow the user to seek
+ through the earlier material, pause it, play it forwards and backwards, etc.</p>
- <p>When multiple tracks are synchronised with a
- <code>MediaController</code>, it is possible for scripts to add and
- remove media elements from the <code>MediaController</code>'s list
- of <span>slaved media elements</span>, even while these tracks are
- playing. How smoothly the media plays back in such situations is
- another quality-of-implementation issue.</p>
+ <p>When multiple tracks are synchronised with a <code>MediaController</code>, it is possible for
+ scripts to add and remove media elements from the <code>MediaController</code>'s list of
+ <span>slaved media elements</span>, even while these tracks are playing. How smoothly the media
+ plays back in such situations is another quality-of-implementation issue.</p>
<hr>
- <p>When a <span>media element</span> that is paused is <span
- title="remove an element from a document">removed from a
- document</span> and not reinserted before the next time the
- <span>event loop</span> spins, implementations that are resource
- constrained are encouraged to take that opportunity to release all
- hardware resources (like video planes, networking resources, and
- data buffers) used by the <span>media element</span>. (User agents
- still have to keep track of the playback position and so forth,
- though, in case playback is later restarted.)</p>
+ <p>When a <span>media element</span> that is paused is <span title="remove an element from a
+ document">removed from a document</span> and not reinserted before the next time the <span>event
+ loop</span> spins, implementations that are resource constrained are encouraged to take that
+ opportunity to release all hardware resources (like video planes, networking resources, and data
+ buffers) used by the <span>media element</span>. (User agents still have to keep track of the
+ playback position and so forth, though, in case playback is later restarted.)</p>
</div>
@@ -43837,17 +43735,15 @@
<ol>
- <li><p>Let <var title="">the specified rectangle</var> be the
- rectangle of the bounding box of the intended path.</p></li>
+ <li><p>Let <var title="">the specified rectangle</var> be the rectangle of the bounding box of
+ the intended path.</p></li>
- <li><p>Let <var title="">notional child</var> be a hypothetical
- element that is a rendered child of the <code>canvas</code> element
- whose dimensions are those of <var title="">the specified
+ <li><p>Let <var title="">notional child</var> be a hypothetical element that is a rendered child
+ of the <code>canvas</code> element whose dimensions are those of <var title="">the specified
rectangle</var>.</p></li>
- <li><p><span title="scroll an element into view">Scroll <var
- title="">notional child</var> into view</span> with the <var
- title="">align to top flag</var> set.</p>
+ <li><p><span title="scroll an element into view">Scroll <var title="">notional child</var> into
+ view</span> with the <var title="">align to top flag</var> set.</p>
<li><p>Optionally, <a href="#inform">inform the user</a> that the caret or selection (or both)
cover <var title="">the specified rectangle</var> of the canvas. If the
@@ -43859,18 +43755,14 @@
</ol>
- <p class="note" id="inform">"Inform the user", as used in this
- section, could mean calling a system accessibility API, which would
- notify assistive technologies such as magnification tools. To
- properly drive magnification based on a focus change, a system
- accessibility API driving a screen magnifier needs the bounds for
- the newly focused object. The methods above are intended to enable
- this by allowing the user agent to report the bounding box of the
- path used to render the focus ring as the bounds of the <var
- title="">element</var> element passed as an argument, if that
- element is focused, and the bounding box of the area to which the
- user agent is scrolling as the bounding box of the current
- selection.</p>
+ <p class="note" id="inform">"Inform the user", as used in this section, could mean calling a
+ system accessibility API, which would notify assistive technologies such as magnification tools.
+ To properly drive magnification based on a focus change, a system accessibility API driving a
+ screen magnifier needs the bounds for the newly focused object. The methods above are intended to
+ enable this by allowing the user agent to report the bounding box of the path used to render the
+ focus ring as the bounds of the <var title="">element</var> element passed as an argument, if that
+ element is focused, and the bounding box of the area to which the user agent is scrolling as the
+ bounding box of the current selection.</p>
<hr>
@@ -43880,9 +43772,8 @@
be implicitly closed when computing the clipping region, without affecting the actual subpaths.
The new clipping region replaces the current clipping region.</p>
- <p>When the context is initialized, the clipping region must be set
- to the rectangle with the top left corner at (0,0) and the width and
- height of the coordinate space.</p>
+ <p>When the context is initialized, the clipping region must be set to the rectangle with the top
+ left corner at (0,0) and the width and height of the coordinate space.</p>
<!-- v6
Jordan OSETE suggests:
@@ -80577,25 +80468,23 @@
<div class="impl">
<p>A <code>Document</code> has a <dfn
- title="concept-document-salvageable"><var>salvageable</var></dfn>
- state, which must initially be true, a <dfn>fired unload</dfn> flag,
- which must initially be false, and a <dfn>page showing</dfn> flag,
- which must initially be false.</p>
+ title="concept-document-salvageable"><var>salvageable</var></dfn> state, which must initially be
+ true, a <dfn>fired unload</dfn> flag, which must initially be false, and a <dfn>page showing</dfn>
+ flag, which must initially be false.</p>
- <p><span title="event loop">Event loops</span> have a
- <dfn>termination nesting level</dfn> counter, which must initially
- be zero.</p>
+ <p><span title="event loop">Event loops</span> have a <dfn>termination nesting level</dfn>
+ counter, which must initially be zero.</p>
- <p>When a user agent is to <dfn>prompt to unload a document</dfn>,
- it must run the following steps.</p>
+ <p>When a user agent is to <dfn>prompt to unload a document</dfn>, it must run the following
+ steps.</p>
<ol>
- <li><p>Increase the <span>event loop</span>'s <span>termination
- nesting level</span> by one.</p></li>
+ <li><p>Increase the <span>event loop</span>'s <span>termination nesting level</span> by
+ one.</p></li>
- <li><p>Increase the <code>Document</code>'s
- <span>ignore-opens-during-unload counter</span> by one.</p></li>
+ <li><p>Increase the <code>Document</code>'s <span>ignore-opens-during-unload counter</span> by
+ one.</p></li>
<li><p>Let <var title="">event</var> be a new <span title="concept-events-trusted">trusted</span>
<code>BeforeUnloadEvent</code> event object with the name <code
@@ -80604,103 +80493,87 @@
<li><p><i>Dispatch</i>: <span title="concept-event-dispatch">Dispatch</span> <var
title="">event</var> at the <code>Document</code>'s <code>Window</code> object.</p></li>
- <li><p>Decrease the <span>event loop</span>'s <span>termination
- nesting level</span> by one.</p></li>
+ <li><p>Decrease the <span>event loop</span>'s <span>termination nesting level</span> by
+ one.</p></li>
<li><p>Release the <span>storage mutex</span>.</p></li>
- <li><p>If any event listeners were triggered by the earlier
- <i>dispatch</i> step, then set the <code>Document</code>'s <var
- title="concept-document-salvageable">salvageable</var> state to
+ <li><p>If any event listeners were triggered by the earlier <i>dispatch</i> step, then set the
+ <code>Document</code>'s <var title="concept-document-salvageable">salvageable</var> state to
false.</p></li>
<li>
- <p>If the <code
- title="dom-BeforeUnloadEvent-returnValue">returnValue</code>
- attribute of the <var title="">event</var> object is not the empty
- string, or if the event was canceled, then the user agent should
- ask the user to confirm that they wish to unload the document.</p>
+ <p>If the <code title="dom-BeforeUnloadEvent-returnValue">returnValue</code> attribute of the
+ <var title="">event</var> object is not the empty string, or if the event was canceled, then the
+ user agent should ask the user to confirm that they wish to unload the document.</p>
- <p>The prompt shown by the user agent may include the string of
- the <code
- title="dom-BeforeUnloadEvent-returnValue">returnValue</code>
- attribute, or some leading subset thereof. (A user agent may want
- to truncate the string to 1024 characters for display, for
+ <p>The prompt shown by the user agent may include the string of the <code
+ title="dom-BeforeUnloadEvent-returnValue">returnValue</code> attribute, or some leading subset
+ thereof. (A user agent may want to truncate the string to 1024 characters for display, for
instance.)</p>
- <p>The user agent must <span>pause</span> while waiting for the
- user's response.</p>
+ <p>The user agent must <span>pause</span> while waiting for the user's response.</p>
- <p>If the user did not confirm the page navigation, then the user
- agent <dfn>refused to allow the document to be unloaded</dfn>.</p>
+ <p>If the user did not confirm the page navigation, then the user agent <dfn>refused to allow
+ the document to be unloaded</dfn>.</p>
</li>
- <li><p>If this algorithm was invoked by another instance of the
- "prompt to unload a document" algorithm (i.e. through the steps
- below that invoke this algorithm for all descendant browsing
+ <li><p>If this algorithm was invoked by another instance of the "prompt to unload a document"
+ algorithm (i.e. through the steps below that invoke this algorithm for all descendant browsing
contexts), then jump to the step labeled <i>end</i>.</p></li>
- <li><p>Let <var title="">descendants</var> be the <span>list of the
- descendant browsing contexts</span> of the
- <code>Document</code>.</p></li>
+ <li><p>Let <var title="">descendants</var> be the <span>list of the descendant browsing
+ contexts</span> of the <code>Document</code>.</p></li>
<li>
- <p>If <var title="">descendants</var> is not an empty list, then
- for each <span>browsing context</span> <var title="">b</var> in
- <var title="">descendants</var> run the following substeps:</p>
+ <p>If <var title="">descendants</var> is not an empty list, then for each <span>browsing
+ context</span> <var title="">b</var> in <var title="">descendants</var> run the following
+ substeps:</p>
<ol>
- <li><p><span title="prompt to unload a document">Prompt to
- unload</span> the <span>active document</span> of the
- <span>browsing context</span> <var title="">b</var>. If the user
- <span>refused to allow the document to be unloaded</span>, then
- the user implicitly also <span title="refused to allow the
- document to be unloaded">refused to allow <em>this</em> document
- to be unloaded</span>; jump to the step labeled <i>end</i>.</p>
+ <li><p><span title="prompt to unload a document">Prompt to unload</span> the <span>active
+ document</span> of the <span>browsing context</span> <var title="">b</var>. If the user
+ <span>refused to allow the document to be unloaded</span>, then the user implicitly also <span
+ title="refused to allow the document to be unloaded">refused to allow <em>this</em> document to
+ be unloaded</span>; jump to the step labeled <i>end</i>.</p>
- <li><p>If <var
- title="concept-document-salvageable">salvageable</var> state of
- the <span>active document</span> of the <span>browsing
- context</span> <var title="">b</var> is false, then set the <var
- title="concept-document-salvageable">salvageable</var> state of
- <em>this</em> document to false also.</p></li>
+ <li><p>If <var title="concept-document-salvageable">salvageable</var> state of the <span>active
+ document</span> of the <span>browsing context</span> <var title="">b</var> is false, then set
+ the <var title="concept-document-salvageable">salvageable</var> state of <em>this</em> document
+ to false also.</p></li>
</ol>
</li>
- <li><p><i>End</i>: Decrease the <code>Document</code>'s
- <span>ignore-opens-during-unload counter</span> by one.</p></li>
+ <li><p><i>End</i>: Decrease the <code>Document</code>'s <span>ignore-opens-during-unload
+ counter</span> by one.</p></li>
</ol>
- <p>When a user agent is to <dfn>unload a document</dfn>, it must run
- the following steps. These steps are passed an argument, <var
- title="">recycle</var>, which is either true or false, indicating
- whether the <code>Document</code> object is going to be
- re-used. (This is set by the <code
- title="dom-document-open">document.open()</code> method.)</p>
+ <p>When a user agent is to <dfn>unload a document</dfn>, it must run the following steps. These
+ steps are passed an argument, <var title="">recycle</var>, which is either true or false,
+ indicating whether the <code>Document</code> object is going to be re-used. (This is set by the
+ <code title="dom-document-open">document.open()</code> method.)</p>
<ol>
- <li><p>Increase the <span>event loop</span>'s <span>termination
- nesting level</span> by one.</p></li>
+ <li><p>Increase the <span>event loop</span>'s <span>termination nesting level</span> by
+ one.</p></li>
- <li><p>Increase the <code>Document</code>'s
- <span>ignore-opens-during-unload counter</span> by one.</p></li>
+ <li><p>Increase the <code>Document</code>'s <span>ignore-opens-during-unload counter</span> by
+ one.</p></li>
- <li><p>If the <code>Document</code>'s <span>page showing</span>
- flag is false, then jump to the step labeled <i>unload event</i>
- below (i.e. skip firing the <code
- title="event-pagehide">pagehide</code> even and don't rerun the
- <span>unloading document visibility change steps</span>).</p></li>
+ <li><p>If the <code>Document</code>'s <span>page showing</span> flag is false, then jump to the
+ step labeled <i>unload event</i> below (i.e. skip firing the <code
+ title="event-pagehide">pagehide</code> even and don't rerun the <span>unloading document
+ visibility change steps</span>).</p></li>
- <li><p>Set the <code>Document</code>'s <span>page showing</span>
- flag to false.</p></li>
+ <li><p>Set the <code>Document</code>'s <span>page showing</span> flag to false.</p></li>
<li><p><span title="concept-event-fire">Fire</span> a <span
title="concept-events-trusted">trusted</span> event with the name <code
@@ -80713,64 +80586,54 @@
<li>
- <p>Run any <dfn>unloading document visibility change steps</dfn>
- for <code>Document</code> that are defined by <span>other
- applicable specifications</span>.</p>
+ <p>Run any <dfn>unloading document visibility change steps</dfn> for <code>Document</code> that
+ are defined by <span>other applicable specifications</span>.</p>
- <p class="note">This is specifically intended for use by the Page
- Visibility specification. <a href="#refsPAGEVIS">[PAGEVIS]</a></p>
+ <p class="note">This is specifically intended for use by the Page Visibility specification. <a
+ href="#refsPAGEVIS">[PAGEVIS]</a></p>
</li>
- <li><p><i>Unload event</i>: If the <code>Document</code>'s
- <span>fired unload</span> flag is false, <span>fire a simple
- event</span> named <code title="event-unload">unload</code> at the
+ <li><p><i>Unload event</i>: If the <code>Document</code>'s <span>fired unload</span> flag is
+ false, <span>fire a simple event</span> named <code title="event-unload">unload</code> at the
<code>Document</code>'s <code>Window</code> object.</p></li>
- <li><p>Decrease the <span>event loop</span>'s <span>termination
- nesting level</span> by one.</p></li>
+ <li><p>Decrease the <span>event loop</span>'s <span>termination nesting level</span> by
+ one.</p></li>
<li><p>Release the <span>storage mutex</span>.</p></li>
- <li><p>If any event listeners were triggered by the earlier
- <i>unload event</i> step, then set the <code>Document</code>
- object's <var
- title="concept-document-salvageable">salvageable</var> state to
- false and set the <code>Document</code>'s <span>fired unload</span>
- flag to true.</p></li>
+ <li><p>If any event listeners were triggered by the earlier <i>unload event</i> step, then set
+ the <code>Document</code> object's <var title="concept-document-salvageable">salvageable</var>
+ state to false and set the <code>Document</code>'s <span>fired unload</span> flag to
+ true.</p></li>
- <li><p>Run any <span>unloading document cleanup steps</span> for
- <code>Document</code> that are defined by this specification and
- <span>other applicable specifications</span>.</p></li>
+ <li><p>Run any <span>unloading document cleanup steps</span> for <code>Document</code> that are
+ defined by this specification and <span>other applicable specifications</span>.</p></li>
- <li><p>If this algorithm was invoked by another instance of the
- "unload a document" algorithm (i.e. by the steps below that invoke
- this algorithm for all descendant browsing contexts), then jump to
- the step labeled <i>end</i>.</p></li>
+ <li><p>If this algorithm was invoked by another instance of the "unload a document" algorithm
+ (i.e. by the steps below that invoke this algorithm for all descendant browsing contexts), then
+ jump to the step labeled <i>end</i>.</p></li>
- <li><p>Let <var title="">descendants</var> be the <span>list of the
- descendant browsing contexts</span> of the
- <code>Document</code>.</p></li>
+ <li><p>Let <var title="">descendants</var> be the <span>list of the descendant browsing
+ contexts</span> of the <code>Document</code>.</p></li>
<li>
- <p>If <var title="">descendants</var> is not an empty list, then
- for each <span>browsing context</span> <var title="">b</var> in
- <var title="">descendants</var> run the following substeps:</p>
+ <p>If <var title="">descendants</var> is not an empty list, then for each <span>browsing
+ context</span> <var title="">b</var> in <var title="">descendants</var> run the following
+ substeps:</p>
<ol>
- <li><p><span title="unload a document">Unload</span> the
- <span>active document</span> of the <span>browsing context</span>
- <var title="">b</var> with the <var title="">recycle</var>
+ <li><p><span title="unload a document">Unload</span> the <span>active document</span> of the
+ <span>browsing context</span> <var title="">b</var> with the <var title="">recycle</var>
parameter set to false.</p></li>
- <li><p>If <var
- title="concept-document-salvageable">salvageable</var> state of
- the <span>active document</span> of the <span>browsing
- context</span> <var title="">b</var> is false, then set the <var
- title="concept-document-salvageable">salvageable</var> state of
- <em>this</em> document to false also.</p></li>
+ <li><p>If <var title="concept-document-salvageable">salvageable</var> state of the <span>active
+ document</span> of the <span>browsing context</span> <var title="">b</var> is false, then set
+ the <var title="concept-document-salvageable">salvageable</var> state of <em>this</em> document
+ to false also.</p></li>
</ol>
@@ -84039,60 +83902,46 @@
<h5>Definitions</h5>
- <p>To coordinate events, user interaction, scripts, rendering,
- networking, and so forth, user agents must use <dfn title="event
- loop">event loops</dfn> as described in this section.</p>
+ <p>To coordinate events, user interaction, scripts, rendering, networking, and so forth, user
+ agents must use <dfn title="event loop">event loops</dfn> as described in this section.</p>
- <p>There must be at least one <span>event loop</span> per user
- agent, and at most one <span>event loop</span> per <span>unit of
- related similar-origin browsing contexts</span>.</p>
+ <p>There must be at least one <span>event loop</span> per user agent, and at most one <span>event
+ loop</span> per <span>unit of related similar-origin browsing contexts</span>.</p>
- <p class="note">When there is more than one <span>event loop</span>
- for a <span>unit of related browsing contexts</span>, complications
- arise when a <span>browsing context</span> in that group is <span
- title="navigate">navigated</span> such that it switches from one
- <span>unit of related similar-origin browsing contexts</span> to
- another. This specification does not currently describe how to
- handle these complications.</p>
+ <p class="note">When there is more than one <span>event loop</span> for a <span>unit of related
+ browsing contexts</span>, complications arise when a <span>browsing context</span> in that group
+ is <span title="navigate">navigated</span> such that it switches from one <span>unit of related
+ similar-origin browsing contexts</span> to another. This specification does not currently describe
+ how to handle these complications.</p>
- <p>An <span>event loop</span> always has at least one <span>browsing
- context</span>. If an <span>event loop</span>'s <span
- title="browsing context">browsing contexts</span> all go away, then
- the <span>event loop</span> goes away as well. A <span>browsing
- context</span> always has an <span>event loop</span> coordinating
- its activities.</p>
+ <p>An <span>event loop</span> always has at least one <span>browsing context</span>. If an
+ <span>event loop</span>'s <span title="browsing context">browsing contexts</span> all go away,
+ then the <span>event loop</span> goes away as well. A <span>browsing context</span> always has an
+ <span>event loop</span> coordinating its activities.</p>
- <!--END complete-->
- <p class="note">Other specifications can define new kinds of event
- loops that aren't associated with browsing contexts; in particular,
- the Web Workers specification does so.</p>
- <!--START complete-->
+ <p>An <span>event loop</span> has one or more <dfn title="task queue">task queues</dfn>. A
+ <span>task queue</span> is an ordered list of <dfn title="concept-task">tasks</dfn>, which can
+ be:</p>
- <p>An <span>event loop</span> has one or more <dfn title="task
- queue">task queues</dfn>. A <span>task queue</span> is an ordered
- list of <dfn title="concept-task">tasks</dfn>, which can be:</p>
-
<dl>
<dt>Events</dt>
<dd>
- <p>Asynchronously dispatching an <code>Event</code> object at a
- particular <code>EventTarget</code> object is a task.</p>
+ <p>Asynchronously dispatching an <code>Event</code> object at a particular
+ <code>EventTarget</code> object is a task.</p>
- <p class="note">Not all events are dispatched using the <span>task
- queue</span>, many are dispatched synchronously during other
- tasks.</p>
+ <p class="note">Not all events are dispatched using the <span>task queue</span>, many are
+ dispatched synchronously during other tasks.</p>
</dd>
<dt>Parsing</dt>
- <dd><p>The <span>HTML parser</span> tokenizing one or more bytes,
- and then processing any resulting tokens, is typically a
- task.</p></dd>
+ <dd><p>The <span>HTML parser</span> tokenizing one or more bytes, and then processing any
+ resulting tokens, is typically a task.</p></dd>
<dt>Callbacks</dt>
@@ -84102,89 +83951,71 @@
<dt>Using a resource</dt>
- <dd><p>When an algorithm <span title="fetch">fetches</span> a
- resource, if the fetching occurs asynchronously then the processing
- of the resource once some or all of the resource is available is a
- task.</p></dd>
+ <dd><p>When an algorithm <span title="fetch">fetches</span> a resource, if the fetching occurs
+ asynchronously then the processing of the resource once some or all of the resource is available
+ is a task.</p></dd>
<dt>Reacting to DOM manipulation</dt>
- <dd><p>Some elements have tasks that trigger in response to DOM
- manipulation, e.g. when that element is <span title="insert an
- element into a document">inserted into the document</span>.</p>
+ <dd><p>Some elements have tasks that trigger in response to DOM manipulation, e.g. when that
+ element is <span title="insert an element into a document">inserted into the document</span>.</p>
</dl>
- <p>When a user agent is to <dfn>queue a task</dfn>, it must add the
- given task to one of the <span title="task queue">task queues</span>
- of the relevant <span>event loop</span>. All the tasks from one
- particular <dfn>task source</dfn> (e.g. the callbacks generated by
- timers, the events fired for mouse movements, the tasks queued for
- the parser) must always be added to the same <span>task
- queue</span>, but tasks from different <span title="task
- source">task sources</span> may be placed in different <span
- title="task queue">task queues</span>.</p>
+ <p>When a user agent is to <dfn>queue a task</dfn>, it must add the given task to one of the <span
+ title="task queue">task queues</span> of the relevant <span>event loop</span>. All the tasks from
+ one particular <dfn>task source</dfn> (e.g. the callbacks generated by timers, the events fired
+ for mouse movements, the tasks queued for the parser) must always be added to the same <span>task
+ queue</span>, but tasks from different <span title="task source">task sources</span> may be placed
+ in different <span title="task queue">task queues</span>.</p>
- <p class="example">For example, a user agent could have one
- <span>task queue</span> for mouse and key events (the <span>user
- interaction task source</span>), and another for everything
- else. The user agent could then give keyboard and mouse events
- preference over other tasks three quarters of the time, keeping the
- interface responsive but not starving other task queues, and never
- processing events from any one <span>task source</span> out of
- order.</p>
+ <p class="example">For example, a user agent could have one <span>task queue</span> for mouse and
+ key events (the <span>user interaction task source</span>), and another for everything else. The
+ user agent could then give keyboard and mouse events preference over other tasks three quarters of
+ the time, keeping the interface responsive but not starving other task queues, and never
+ processing events from any one <span>task source</span> out of order.</p>
- <p>Each <span title="concept-task">task</span> that is <span
- title="queue a task">queued</span> onto a <span>task queue</span> of
- an <span>event loop</span> defined by this specification is
- associated with a <code>Document</code>; if the task was queued in
- the context of an element, then it is the element's
- <code>Document</code>; if the task was queued in the context of a
- <span>browsing context</span>, then it is the <span>browsing
- context</span>'s <span>active document</span> at the time the task
- was queued; if the task was queued by or for a <span
- title="concept-script">script</span> then the document is the
- <span>script's document</span>.</p>
+ <p>Each <span title="concept-task">task</span> that is <span title="queue a task">queued</span>
+ onto a <span>task queue</span> of an <span>event loop</span> defined by this specification is
+ associated with a <code>Document</code>; if the task was queued in the context of an element, then
+ it is the element's <code>Document</code>; if the task was queued in the context of a
+ <span>browsing context</span>, then it is the <span>browsing context</span>'s <span>active
+ document</span> at the time the task was queued; if the task was queued by or for a <span
+ title="concept-script">script</span> then the document is the <span>script's document</span>.</p>
- <p>A user agent may have one <dfn>storage mutex</dfn>. This mutex is
- used to control access to shared state like cookies. At any one
- point, the <span>storage mutex</span> is either free, or owned by a
- particular <span>event loop</span> or instance of the <span
+ <p>A user agent may have one <dfn>storage mutex</dfn>. This mutex is used to control access to
+ shared state like cookies. At any one point, the <span>storage mutex</span> is either free, or
+ owned by a particular <span>event loop</span> or instance of the <span
title="fetch">fetching</span> algorithm.</p>
- <p>If a user agent does not implement a <span>storage mutex</span>,
- it is exempt from implementing the requirements that require it to
- acquire or release it.</p>
+ <p>If a user agent does not implement a <span>storage mutex</span>, it is exempt from implementing
+ the requirements that require it to acquire or release it.</p>
- <p class="note">User agent implementors have to make a choice
- between two evils. On the one hand, not implementing the storage
- mutex means that there is a risk of data corruption: a site could,
- for instance, try to read a cookie, increment its value, then write
- it back out, using the new value of the cookie as a unique
- identifier for the session; if the site does this twice in two
- different browser windows at the same time, it might end up using
- the same "unique" identifier for both sessions, with potentially
- disastrous effects. On the other hand, implementing the storage
- mutex has potentially serious performance implications: whenever a
- site uses Web Storage or cookies, all other sites that try to use
- Web Storage or cookies are blocked until the first site finishes.</p>
+ <p class="note">User agent implementors have to make a choice between two evils. On the one hand,
+ not implementing the storage mutex means that there is a risk of data corruption: a site could,
+ for instance, try to read a cookie, increment its value, then write it back out, using the new
+ value of the cookie as a unique identifier for the session; if the site does this twice in two
+ different browser windows at the same time, it might end up using the same "unique" identifier for
+ both sessions, with potentially disastrous effects. On the other hand, implementing the storage
+ mutex has potentially serious performance implications: whenever a site uses Web Storage or
+ cookies, all other sites that try to use Web Storage or cookies are blocked until the first site
+ finishes.</p>
- <p>Whenever a <span title="concept-script">script</span> calls into
- a <span>plugin</span>, and whenever a <span>plugin</span> calls into
- a <span title="concept-script">script</span>, the user agent must
- release the <span>storage mutex</span>.</p>
+ <p>Whenever a <span title="concept-script">script</span> calls into a <span>plugin</span>, and
+ whenever a <span>plugin</span> calls into a <span title="concept-script">script</span>, the user
+ agent must release the <span>storage mutex</span>.</p>
<h5>Processing model</h5>
- <p>An <span>event loop</span> must continually run through the
- following steps for as long as it exists:</p>
+ <p>An <span>event loop</span> must continually run through the following steps for as long as it
+ exists:</p>
<ol>
<!-- if you add a step here, make sure to go through the spec updating references to the "first
- step" of the event loop -->
+ step" or "step 1" of the event loop -->
<li><p>Run the oldest <span title="concept-task">task</span> on one of the <span>event
loop</span>'s <span title="task queue">task queues</span>, if any, ignoring tasks whose
@@ -84204,34 +84035,29 @@
<li><p><span>Provide a stable state</span>.</p></li>
- <li><p>If necessary, update the rendering or user interface of any
- <code>Document</code> or <span>browsing context</span> to reflect
- the current state.</p></li>
+ <li><p>If necessary, update the rendering or user interface of any <code>Document</code> or
+ <span>browsing context</span> to reflect the current state.</p></li>
- <li><p>Return to the first step of the <span>event
- loop</span>.</p></li>
+ <li><p>Return to the first step of the <span>event loop</span>.</p></li>
</ol>
<hr>
- <p>When a user agent is to <dfn>perform a microtask
- checkpoint</dfn>, if the <span>running mutation observers</span>
- flag is false, then the user agent must run the following steps:</p>
+ <p>When a user agent is to <dfn>perform a microtask checkpoint</dfn>, if the <span>running
+ mutation observers</span> flag is false, then the user agent must run the following steps:</p>
<ol>
- <li><p>Let the <span>running mutation observers</span> flag be
- true.</p></li>
+ <li><p>Let the <span>running mutation observers</span> flag be true.</p></li>
<li><p><span>Sort the tables with pending sorts</span>.</p></li>
<li>
- <p><span title="concept-mo-invoke">Invoke
- <code>MutationObserver</code> objects</span> for the <span>unit
- of related similar-origin browsing contexts</span> to which the
- <span>script's browsing context</span> belongs.</p>
+ <p><span title="concept-mo-invoke">Invoke <code>MutationObserver</code> objects</span> for the
+ <span>unit of related similar-origin browsing contexts</span> to which the <span>script's
+ browsing context</span> belongs.</p>
<p class="note">This will typically invoke scripted callbacks, which calls the <span>jump to a
code entry-point</span> algorithm, which calls this <span>perform a microtask checkpoint</span>
@@ -84240,8 +84066,7 @@
</li>
- <li><p>Let the <span>running mutation observers</span> flag be
- false.</p></li>
+ <li><p>Let the <span>running mutation observers</span> flag be false.</p></li>
</ol>
@@ -84261,34 +84086,28 @@
<hr>
- <p>When an algorithm says to <dfn>spin the event loop</dfn> until
- a condition <var title="">goal</var> is met, the user agent must run
- the following steps:</p>
+ <p>When an algorithm says to <dfn>spin the event loop</dfn> until a condition <var
+ title="">goal</var> is met, the user agent must run the following steps:</p>
<ol>
- <li><p>Let <var title="">task source</var> be the <span>task
- source</span> of the currently running <span
- title="concept-task">task</span>.</p></li>
+ <li><p>Let <var title="">task source</var> be the <span>task source</span> of the currently
+ running <span title="concept-task">task</span>.</p></li>
<li>
- <p>Stop the currently running <span
- title="concept-task">task</span>, allowing the <span>event
- loop</span> to resume, but continue these steps
- asynchronously.</p>
+ <p>Stop the currently running <span title="concept-task">task</span>, allowing the <span>event
+ loop</span> to resume, but continue these steps asynchronously.</p>
- <p class="note">This causes the <span>event loop</span> to move on
- to the second step of its processing model (defined above).</p>
+ <p class="note">This causes the <span>event loop</span> to move on to the second step of its
+ processing model (defined above).</p>
</li>
- <li><p>Wait until the condition <var title="">goal</var> is
- met.</p></li>
+ <li><p>Wait until the condition <var title="">goal</var> is met.</p></li>
- <li><p><span>Queue a task</span> to continue running these steps,
- using the <span>task source</span> <var title="">task
- source</var>. Wait until this task runs before continuing these
+ <li><p><span>Queue a task</span> to continue running these steps, using the <span>task
+ source</span> <var title="">task source</var>. Wait until this task runs before continuing these
steps.</p></li>
<li><p>Return to the caller.</p></li>
@@ -84297,50 +84116,41 @@
<hr>
- <p>Some of the algorithms in this specification, for historical
- reasons, require the user agent to <dfn>pause</dfn> while running a
- <span title="concept-task">task</span> until a condition <var
- title="">goal</var> is met. This means running the following
- steps:</p>
+ <p>Some of the algorithms in this specification, for historical reasons, require the user agent to
+ <dfn>pause</dfn> while running a <span title="concept-task">task</span> until a condition <var
+ title="">goal</var> is met. This means running the following steps:</p>
<ol>
- <li><p>If any asynchronously-running algorithms are <span
- title="await a stable state">awaiting a stable state</span>, then
- run their <span>synchronous section</span> and then resume running
- their asynchronous algorithm. (See the <span>event loop</span>
- processing model definition above for details.)</p>
+ <li><p>If any asynchronously-running algorithms are <span title="await a stable state">awaiting a
+ stable state</span>, then run their <span>synchronous section</span> and then resume running
+ their asynchronous algorithm. (See the <span>event loop</span> processing model definition above
+ for details.)</p>
- <li><p>If necessary, update the rendering or user interface of any
- <code>Document</code> or <span>browsing context</span> to reflect
- the current state.</p></li>
+ <li><p>If necessary, update the rendering or user interface of any <code>Document</code> or
+ <span>browsing context</span> to reflect the current state.</p></li>
- <li><p>Wait until the condition <var title="">goal</var> is met.
- While a user agent has a paused <span
- title="concept-task">task</span>, the corresponding <span>event
- loop</span> must not run further <span
- title="concept-task">tasks</span>, and any script in the currently
- running <span title="concept-task">task</span> must block. User
- agents should remain responsive to user input while paused,
- however, albeit in a reduced capacity since the <span>event
- loop</span> will not be doing anything.</p></li>
+ <li><p>Wait until the condition <var title="">goal</var> is met. While a user agent has a paused
+ <span title="concept-task">task</span>, the corresponding <span>event loop</span> must not run
+ further <span title="concept-task">tasks</span>, and any script in the currently running <span
+ title="concept-task">task</span> must block. User agents should remain responsive to user input
+ while paused, however, albeit in a reduced capacity since the <span>event loop</span> will not be
+ doing anything.</p></li>
</ol>
<hr>
- <p>When a user agent is to <dfn>obtain the storage mutex</dfn> as
- part of running a <span title="concept-task">task</span>, it must
- run through the following steps:</p>
+ <p>When a user agent is to <dfn>obtain the storage mutex</dfn> as part of running a <span
+ title="concept-task">task</span>, it must run through the following steps:</p>
<ol>
- <li><p>If the <span>storage mutex</span> is already owned by this
- <span title="concept-task">task</span>'s <span>event loop</span>,
- then abort these steps.</p></li>
+ <li><p>If the <span>storage mutex</span> is already owned by this <span
+ title="concept-task">task</span>'s <span>event loop</span>, then abort these steps.</p></li>
- <li><p>Otherwise, <span>pause</span> until the <span>storage
- mutex</span> can be taken by the <span>event loop</span>.</p></li>
+ <li><p>Otherwise, <span>pause</span> until the <span>storage mutex</span> can be taken by the
+ <span>event loop</span>.</p></li>
<li><p>Take ownership of the <span>storage mutex</span>.</p></li>
@@ -84353,9 +84163,8 @@
<h5>Generic task sources</h5>
- <p>The following <span title="task source">task sources</span> are
- used by a number of mostly unrelated features in this and other
- specifications.</p>
+ <p>The following <span title="task source">task sources</span> are used by a number of mostly
+ unrelated features in this and other specifications.</p>
<dl>
@@ -84363,9 +84172,8 @@
<dd>
- <p>This <span>task source</span> is used for features that react
- to DOM manipulations, such as things that happen asynchronously
- when an element is <span title="insert an element into a
+ <p>This <span>task source</span> is used for features that react to DOM manipulations, such as
+ things that happen asynchronously when an element is <span title="insert an element into a
document">inserted into the document</span>.</p>
</dd>
@@ -84374,15 +84182,14 @@
<dd>
- <p>This <span>task source</span> is used for features that react
- to user interaction, for example keyboard or mouse input.</p>
+ <p>This <span>task source</span> is used for features that react to user interaction, for
+ example keyboard or mouse input.</p>
<p>Asynchronous events sent in response to user input (e.g. <code
- title="event-click">click</code> events) must be fired using
- <span title="concept-task">tasks</span> <span title="queue a
- task">queued</span> with the <span>user interaction task
- source</span>. <a href="#refsDOMEVENTS">[DOMEVENTS]</a></p>
- <!-- user interaction events integration point -->
+ title="event-click">click</code> events) must be fired using <span
+ title="concept-task">tasks</span> <span title="queue a task">queued</span> with the <span>user
+ interaction task source</span>. <a href="#refsDOMEVENTS">[DOMEVENTS]</a></p> <!-- user
+ interaction events integration point -->
</dd>
@@ -84390,11 +84197,9 @@
<dd>
- <p>This <span>task source</span> is used for features that trigger
- in response to network activity.</p>
+ <p>This <span>task source</span> is used for features that trigger in response to network
+ activity.</p>
- <!-- XHR should use this -->
-
</dd>
<dt>The <dfn>history traversal task source</dfn></dt>
@@ -84402,8 +84207,7 @@
<dd>
<p>This <span>task source</span> is used to queue calls to <code
- title="dom-history-back">history.back()</code> and similar
- APIs.</p>
+ title="dom-history-back">history.back()</code> and similar APIs.</p>
</dd>
@@ -86019,14 +85823,13 @@
<div class="impl">
- <p>The <dfn title="dom-alert"><code>alert(<var
- title="">message</var>)</code></dfn> method, when invoked, must run
- the following steps:</p>
+ <p>The <dfn title="dom-alert"><code>alert(<var title="">message</var>)</code></dfn> method, when
+ invoked, must run the following steps:</p>
<ol>
- <li><p>If the <span>event loop</span>'s <span>termination nesting
- level</span> is non-zero, optionally abort these steps.</p></li>
+ <li><p>If the <span>event loop</span>'s <span>termination nesting level</span> is non-zero,
+ optionally abort these steps.</p></li>
<li><p>Release the <span>storage mutex</span>.</p></li>
@@ -86034,23 +85837,20 @@
to ignore all alerts, and would thus abort at this step whenever the method was
invoked.)</p></li>
- <li><p>Show the given <var title="">message</var> to the
- user.</p></li>
+ <li><p>Show the given <var title="">message</var> to the user.</p></li>
- <li><p>Optionally, <span>pause</span> while waiting for for the
- user to acknowledge the message.</p></li>
+ <li><p>Optionally, <span>pause</span> while waiting for for the user to acknowledge the
+ message.</p></li>
</ol>
- <p>The <dfn title="dom-confirm"><code>confirm(<var
- title="">message</var>)</code></dfn> method, when invoked, must run
- the following steps:</p>
+ <p>The <dfn title="dom-confirm"><code>confirm(<var title="">message</var>)</code></dfn> method,
+ when invoked, must run the following steps:</p>
<ol>
- <li><p>If the <span>event loop</span>'s <span>termination nesting
- level</span> is non-zero, optionally abort these steps, returning
- false.</p></li>
+ <li><p>If the <span>event loop</span>'s <span>termination nesting level</span> is non-zero,
+ optionally abort these steps, returning false.</p></li>
<li><p>Release the <span>storage mutex</span>.</p></li>
@@ -86058,27 +85858,23 @@
the user the option to ignore all prompts, and would thus abort at this step whenever the method
was invoked.)</p></li>
- <li><p>Show the given <var title="">message</var> to the user, and
- ask the user to respond with a positive or negative
- response.</p></li>
+ <li><p>Show the given <var title="">message</var> to the user, and ask the user to respond with a
+ positive or negative response.</p></li>
- <li><p><span>Pause</span> until the user responds either positively
- or negatively.</p></li>
+ <li><p><span>Pause</span> until the user responds either positively or negatively.</p></li>
- <li><p>If the user responded positively, return true; otherwise,
- the user responded negatively: return false.</p></li>
+ <li><p>If the user responded positively, return true; otherwise, the user responded negatively:
+ return false.</p></li>
</ol>
- <p>The <dfn title="dom-prompt"><code>prompt(<var
- title="">message</var>, <var title="">default</var>)</code></dfn>
- method, when invoked, must run the following steps:</p>
+ <p>The <dfn title="dom-prompt"><code>prompt(<var title="">message</var>, <var
+ title="">default</var>)</code></dfn> method, when invoked, must run the following steps:</p>
<ol>
- <li><p>If the <span>event loop</span>'s <span>termination nesting
- level</span> is non-zero, optionally abort these steps, returning
- null.</p></li>
+ <li><p>If the <span>event loop</span>'s <span>termination nesting level</span> is non-zero,
+ optionally abort these steps, returning null.</p></li>
<li><p>Release the <span>storage mutex</span>.</p></li>
@@ -86086,18 +85882,15 @@
user the option to ignore all prompts, and would thus abort at this step whenever the method was
invoked.)</p></li>
- <li><p>Show the given <var title="">message</var> to the user, and
- ask the user to either respond with a string value or abort. The
- second argument is optional. If the second argument (<var
- title="">default</var>) is present, then the response must be
- defaulted to the value given by <var
- title="">default</var>.</p></li>
+ <li><p>Show the given <var title="">message</var> to the user, and ask the user to either respond
+ with a string value or abort. The second argument is optional. If the second argument (<var
+ title="">default</var>) is present, then the response must be defaulted to the value given by
+ <var title="">default</var>.</p></li>
- <li><p><span>Pause</span> while waiting for the user's
- response.</p></li>
+ <li><p><span>Pause</span> while waiting for the user's response.</p></li>
- <li><p>If the user aborts, then return null; otherwise, return the
- string that the user responded with.</p></li>
+ <li><p>If the user aborts, then return null; otherwise, return the string that the user responded
+ with.</p></li>
</ol>
@@ -86264,29 +86057,24 @@
<li>
- <p>If the user agent is configured such that this invocation of
- <code title="dom-showModalDialog">showModalDialog()</code> is
- somehow disabled, then return the empty string and abort these
- steps.</p>
+ <p>If the user agent is configured such that this invocation of <code
+ title="dom-showModalDialog">showModalDialog()</code> is somehow disabled, then return the empty
+ string and abort these steps.</p>
- <p class="note">User agents are expected to disable this method in
- certain cases to avoid user annoyance (e.g. as part of their popup
- blocker feature). For instance, a user agent could require that a
- site be white-listed before enabling this method, or the user
- agent could be configured to only allow one modal dialog at a
- time.</p>
+ <p class="note">User agents are expected to disable this method in certain cases to avoid user
+ annoyance (e.g. as part of their popup blocker feature). For instance, a user agent could
+ require that a site be white-listed before enabling this method, or the user agent could be
+ configured to only allow one modal dialog at a time.</p>
</li>
<li>
- <p>If the <span>active sandboxing flag set</span>
- of the <span>active document</span>
- of the <span title="script's browsing context">browsing context</span>
- of the <span title="concept-script">script</span> that invoked the method
- has its
- <span>sandboxed auxiliary navigation browsing context flag</span>
- set, then return the empty string and abort these steps.</p>
+ <p>If the <span>active sandboxing flag set</span> of the <span>active document</span> of the
+ <span title="script's browsing context">browsing context</span> of the <span
+ title="concept-script">script</span> that invoked the method has its <span>sandboxed auxiliary
+ navigation browsing context flag</span> set, then return the empty string and abort these
+ steps.</p>
</li>
@@ -86297,20 +86085,16 @@
<ul>
- <li>are part of the same <span>unit of related browsing
- contexts</span> as the browsing context of the
- <code>Window</code> object on which the <code
- title="dom-showModalDialog">showModalDialog()</code> method was
- called, and that</li>
+ <li>are part of the same <span>unit of related browsing contexts</span> as the browsing context
+ of the <code>Window</code> object on which the <code
+ title="dom-showModalDialog">showModalDialog()</code> method was called, and that</li>
- <li>have an <span>active document</span> whose
- <span>origin</span> is the <span title="same origin">same</span>
- as the <span>origin</span> of the <span
+ <li>have an <span>active document</span> whose <span>origin</span> is the <span title="same
+ origin">same</span> as the <span>origin</span> of the <span
title="concept-script">script</span> that called the <code
- title="dom-showModalDialog">showModalDialog()</code> method at
- the time the method was called,</li> <!-- Note that changing
- document.domain to talk to another domain doesn't make you able
- to block that domain -->
+ title="dom-showModalDialog">showModalDialog()</code> method at the time the method was
+ called,</li> <!-- Note that changing document.domain to talk to another domain doesn't make you
+ able to block that domain -->
</ul>
@@ -86321,59 +86105,49 @@
<li>
- <p>Disable the user interface for all the browsing contexts in
- <var title="">the list of background browsing contexts</var>. This
- should prevent the user from navigating those browsing contexts,
- causing events to be sent to those browsing context, or editing
- any content in those browsing contexts. However, it does not
- prevent those browsing contexts from receiving events from sources
- other than the user, from running scripts, from running
- animations, and so forth.</p>
+ <p>Disable the user interface for all the browsing contexts in <var title="">the list of
+ background browsing contexts</var>. This should prevent the user from navigating those browsing
+ contexts, causing events to be sent to those browsing context, or editing any content in those
+ browsing contexts. However, it does not prevent those browsing contexts from receiving events
+ from sources other than the user, from running scripts, from running animations, and so
+ forth.</p>
</li>
<li>
- <p>Create a new <span>auxiliary browsing context</span>, with the
- <span>opener browsing context</span> being the browsing context of
- the <code>Window</code> object on which the <code
- title="dom-showModalDialog">showModalDialog()</code> method was
- called. The new auxiliary browsing context has no name.</p>
+ <p>Create a new <span>auxiliary browsing context</span>, with the <span>opener browsing
+ context</span> being the browsing context of the <code>Window</code> object on which the <code
+ title="dom-showModalDialog">showModalDialog()</code> method was called. The new auxiliary
+ browsing context has no name.</p>
- <p class="note">This <span>browsing context</span>'s
- <code>Document</code>s' <code>Window</code> objects all implement
- the <code>WindowModal</code> interface.</p>
+ <p class="note">This <span>browsing context</span>'s <code>Document</code>s' <code>Window</code>
+ objects all implement the <code>WindowModal</code> interface.</p>
</li>
<li>
- <p>Set all the flags
- in the new browsing context's <span>popup sandboxing flag set</span>
- that are set in the
- <span>active sandboxing flag set</span>
- of the <span>active document</span>
- of the <span title="script's browsing context">browsing context</span>
- of the <span title="concept-script">script</span> that invoked the method.
- The <span title="script's browsing context">browsing context</span>
- of the <span title="concept-script">script</span> that invoked the method
- must be set as the new browsing context's
- <span>one permitted sandboxed navigator</span>.</p>
+ <p>Set all the flags in the new browsing context's <span>popup sandboxing flag set</span> that
+ are set in the <span>active sandboxing flag set</span> of the <span>active document</span> of
+ the <span title="script's browsing context">browsing context</span> of the <span
+ title="concept-script">script</span> that invoked the method. The <span title="script's browsing
+ context">browsing context</span> of the <span title="concept-script">script</span> that invoked
+ the method must be set as the new browsing context's <span>one permitted sandboxed
+ navigator</span>.</p>
</li>
<li>
- <p>Let the <span>dialog arguments</span> of the new browsing
- context be set to the value of <var title="">argument</var>, or
- the 'undefined' value if the argument was omitted.</p>
+ <p>Let the <span>dialog arguments</span> of the new browsing context be set to the value of <var
+ title="">argument</var>, or the 'undefined' value if the argument was omitted.</p>
</li>
<li>
- <p>Let the <span>dialog arguments' origin</span> be the
- <span>origin</span> of the <span
+ <p>Let the <span>dialog arguments' origin</span> be the <span>origin</span> of the <span
title="concept-script">script</span> that called the <code
title="dom-showModalDialog">showModalDialog()</code> method.</p>
@@ -86381,52 +86155,46 @@
<li>
- <p><span>Navigate</span><!--DONAV showModalDialog--> the new
- <span>browsing context</span> to the <span>absolute URL</span>
- that resulted from <span title="resolve a url">resolving</span>
- <var title="">url</var> earlier, with <span>replacement
- enabled</span>, and with the <span title="script's browsing
- context">browsing context</span> of the <span
- title="concept-script">script</span> that invoked the method as
- the <span>source browsing context</span>.</p>
+ <p><span>Navigate</span><!--DONAV showModalDialog--> the new <span>browsing context</span> to
+ the <span>absolute URL</span> that resulted from <span title="resolve a url">resolving</span>
+ <var title="">url</var> earlier, with <span>replacement enabled</span>, and with the <span
+ title="script's browsing context">browsing context</span> of the <span
+ title="concept-script">script</span> that invoked the method as the <span>source browsing
+ context</span>.</p>
</li>
<li>
- <p><span>Spin the event loop</span> until the new <span>browsing
- context</span> is closed. (The user agent must allow the user to
- indicate that the <span>browsing context</span> is to be
+ <p><span>Spin the event loop</span> until the new <span>browsing context</span> is closed. (The
+ user agent must allow the user to indicate that the <span>browsing context</span> is to be
closed.)</p>
</li>
<li>
- <p>Reenable the user interface for all the browsing contexts in
- <var title="">the list of background browsing contexts</var>.</p>
+ <p>Reenable the user interface for all the browsing contexts in <var title="">the list of
+ background browsing contexts</var>.</p>
</li>
<li>
- <p>Return the <span>auxiliary browsing context</span>'s
- <span>return value</span>.</p>
+ <p>Return the <span>auxiliary browsing context</span>'s <span>return value</span>.</p>
</li>
</ol>
- <p>The <code>Window</code> objects of <code>Document</code>s hosted
- by <span title="browsing context">browsing contexts</span> created
- by the above algorithm must also implement the
+ <p>The <code>Window</code> objects of <code>Document</code>s hosted by <span title="browsing
+ context">browsing contexts</span> created by the above algorithm must also implement the
<code>WindowModal</code> interface.</p>
- <p class="note">When this happens, the members of the
- <code>WindowModal</code> interface, in JavaScript environments,
- appear to actually be part of the <code>Window</code> interface
- (e.g. they are on the same prototype chain as the <code
- title="dom-alert">window.alert()</code> method).</p>
+ <p class="note">When this happens, the members of the <code>WindowModal</code> interface, in
+ JavaScript environments, appear to actually be part of the <code>Window</code> interface (e.g.
+ they are on the same prototype chain as the <code title="dom-alert">window.alert()</code>
+ method).</p>
</div>
@@ -86441,8 +86209,7 @@
<dd>
- <p>Returns the <var title="">argument</var> argument that was
- passed to the <code
+ <p>Returns the <var title="">argument</var> argument that was passed to the <code
title="dom-showModalDialog">showModalDialog()</code> method.</p>
</dd>
@@ -86453,9 +86220,8 @@
<p>Returns the current return value for the window.</p>
- <p>Can be set, to change the value that will be returned by the
- <code title="dom-showModalDialog">showModalDialog()</code>
- method.</p>
+ <p>Can be set, to change the value that will be returned by the <code
+ title="dom-showModalDialog">showModalDialog()</code> method.</p>
</dd>
@@ -86463,42 +86229,31 @@
<div class="impl">
- <p>Such browsing contexts have associated <dfn>dialog
- arguments</dfn>, which are stored along with the <dfn>dialog
- arguments' origin</dfn>. These values are set by the <code
- title="dom-showModalDialog">showModalDialog()</code> method in the
- algorithm above, when the browsing context is created, based on the
- arguments provided to the method.</p>
+ <p>Such browsing contexts have associated <dfn>dialog arguments</dfn>, which are stored along with
+ the <dfn>dialog arguments' origin</dfn>. These values are set by the <code
+ title="dom-showModalDialog">showModalDialog()</code> method in the algorithm above, when the
+ browsing context is created, based on the arguments provided to the method.</p>
- <p>The <dfn
- title="dom-WindowModal-dialogArguments"><code>dialogArguments</code></dfn>
- IDL attribute, on getting, must check whether its browsing context's
- <span>active document</span>'s <span>origin</span> is the <span
- title="same origin">same</span> as the <span>dialog arguments'
- origin</span>. If it is, then the browsing context's <span>dialog
- arguments</span> must be returned unchanged. Otherwise, if the
- <span>dialog arguments</span> are an object, then the empty string
- must be returned, and if the <span>dialog arguments</span> are not
- an object, then the stringification of the <span>dialog
- arguments</span> must be returned.
+ <p>The <dfn title="dom-WindowModal-dialogArguments"><code>dialogArguments</code></dfn> IDL
+ attribute, on getting, must check whether its browsing context's <span>active document</span>'s
+ <span>origin</span> is the <span title="same origin">same</span> as the <span>dialog arguments'
+ origin</span>. If it is, then the browsing context's <span>dialog arguments</span> must be
+ returned unchanged. Otherwise, if the <span>dialog arguments</span> are an object, then the empty
+ string must be returned, and if the <span>dialog arguments</span> are not an object, then the
+ stringification of the <span>dialog arguments</span> must be returned.
- <p>These browsing contexts also have an associated <dfn>return
- value</dfn>. The <span>return value</span> of a browsing context
- must be initialized to the empty string when the browsing context is
- created.</p>
+ <p>These browsing contexts also have an associated <dfn>return value</dfn>. The <span>return
+ value</span> of a browsing context must be initialized to the empty string when the browsing
+ context is created.</p>
- <p>The <dfn
- title="dom-WindowModal-returnValue"><code>returnValue</code></dfn>
- IDL attribute, on getting, must return the <span>return value</span>
- of its browsing context, and on setting, must set the <span>return
- value</span> to the given new value.</p>
+ <p>The <dfn title="dom-WindowModal-returnValue"><code>returnValue</code></dfn> IDL attribute, on
+ getting, must return the <span>return value</span> of its browsing context, and on setting, must
+ set the <span>return value</span> to the given new value.</p>
</div>
- <p class="note">The <code
- title="dom-window-close">window.close()</code> method can be used to
+ <p class="note">The <code title="dom-window-close">window.close()</code> method can be used to
close the browsing context.</p>
-<!--TOPIC:HTML-->
<!--TOPIC:DOM APIs-->
@@ -86508,12 +86263,10 @@
<div class="impl">
- <p>The <dfn title="dom-navigator"><code>navigator</code></dfn>
- attribute of the <code>Window</code> interface must return an
- instance of the <code>Navigator</code> interface, which represents
- the identity and state of the user agent (the client), and allows
- Web pages to register themselves as potential protocol and content
- handlers:</p>
+ <p>The <dfn title="dom-navigator"><code>navigator</code></dfn> attribute of the
+ <code>Window</code> interface must return an instance of the <code>Navigator</code> interface,
+ which represents the identity and state of the user agent (the client), and allows Web pages to
+ register themselves as potential protocol and content handlers:</p>
</div>
@@ -86535,9 +86288,8 @@
<div class="impl">
- <p>These interfaces are defined separately so that other
- specifications can re-use parts of the <code>Navigator</code>
- interface.</p>
+ <p>These interfaces are defined separately so that other specifications can re-use parts of the
+ <code>Navigator</code> interface.</p>
</div>
@@ -87420,12 +87172,10 @@
<div class="impl">
<p>The <dfn
- title="dom-navigator-yieldForStorageUpdates"><code>yieldForStorageUpdates()</code></dfn>
- method, when invoked, must, if the <span>storage mutex</span> is
- owned by the <span>event loop</span> of the <span
- title="concept-task">task</span> that resulted in the method being
- called, release the <span>storage mutex</span> so that it is once
- again free. Otherwise, it must do nothing.</p>
+ title="dom-navigator-yieldForStorageUpdates"><code>yieldForStorageUpdates()</code></dfn> method,
+ when invoked, must, if the <span>storage mutex</span> is owned by the <span>event loop</span> of
+ the <span title="concept-task">task</span> that resulted in the method being called, release the
+ <span>storage mutex</span> so that it is once again free. Otherwise, it must do nothing.</p>
</div>
@@ -87434,10 +87184,9 @@
<div class="impl">
- <p>The <dfn title="dom-external"><code>external</code></dfn>
- attribute of the <code>Window</code> interface must return an
- instance of the <code>External</code> interface. The same object
- must be returned each time.</p>
+ <p>The <dfn title="dom-external"><code>external</code></dfn> attribute of the <code>Window</code>
+ interface must return an instance of the <code>External</code> interface. The same object must be
+ returned each time.</p>
</div>
@@ -92857,49 +92606,41 @@
attribute <span>EventHandler</span> <span title="handler-WorkerGlobalScope-ononline">ononline</span>;
};</pre>
- <p>The <dfn
- title="dom-WorkerGlobalScope-self"><code>self</code></dfn> attribute
- must return the <code>WorkerGlobalScope</code> object itself.</p>
+ <p>The <dfn title="dom-WorkerGlobalScope-self"><code>self</code></dfn> attribute must return the
+ <code>WorkerGlobalScope</code> object itself.</p>
- <p>The <dfn
- title="dom-WorkerGlobalScope-location"><code>location</code></dfn>
- attribute must return the <code>WorkerLocation</code> object created
- for the <code>WorkerGlobalScope</code> object when the worker was
- created. It represents the <span>absolute URL</span> of the script
- that was used to initialize the worker, after any redirects.</p>
+ <p>The <dfn title="dom-WorkerGlobalScope-location"><code>location</code></dfn> attribute must
+ return the <code>WorkerLocation</code> object created for the <code>WorkerGlobalScope</code>
+ object when the worker was created. It represents the <span>absolute URL</span> of the script that
+ was used to initialize the worker, after any redirects.</p>
<hr>
- <p>When a script invokes the <dfn
- title="dom-WorkerGlobalScope-close"><code>close()</code></dfn>
- method on a <code>WorkerGlobalScope</code> object, the user agent
- must run the following steps (atomically):</p>
+ <p>When a script invokes the <dfn title="dom-WorkerGlobalScope-close"><code>close()</code></dfn>
+ method on a <code>WorkerGlobalScope</code> object, the user agent must run the following steps
+ (atomically):</p>
<ol>
- <li><p>Discard any <span title="concept-task">tasks</span> that
- have been added to the <span>event loop</span>'s <span title="task
- queue">task queues</span>.</p>
+ <li><p>Discard any <span title="concept-task">tasks</span> that have been added to the
+ <span>event loop</span>'s <span title="task queue">task queues</span>.</p>
<!-- v2-onclose
- <li><p><span>Queue a task</span> to <span>fire a simple
- event</span> named <code title="event-worker-close">close</code> at the
- <code>WorkerGlobalScope</code> object.</p></li>
+ <li><p><span>Queue a task</span> to <span>fire a simple event</span> named <code
+ title="event-worker-close">close</code> at the <code>WorkerGlobalScope</code> object.</p></li>
-->
- <li><p>Set the worker's <code>WorkerGlobalScope</code> object's
- <span title="dom-WorkerGlobalScope-closing">closing</span> flag to
- true. (This prevents any further tasks from being queued.)</p></li>
+ <li><p>Set the worker's <code>WorkerGlobalScope</code> object's <span
+ title="dom-WorkerGlobalScope-closing">closing</span> flag to true. (This prevents any further
+ tasks from being queued.)</p></li>
</ol>
<hr>
- <p>The following are the <span>event handlers</span> (and their
- corresponding <span title="event handler event type">event handler
- event types</span>) that must be supported, as IDL attributes, by
- objects implementing the <code>WorkerGlobalScope</code>
- interface:</p>
+ <p>The following are the <span>event handlers</span> (and their corresponding <span title="event
+ handler event type">event handler event types</span>) that must be supported, as IDL attributes,
+ by objects implementing the <code>WorkerGlobalScope</code> interface:</p>
<table>
<thead>
@@ -93030,168 +92771,131 @@
<h4>The event loop</h4>
- <p>Each <code>WorkerGlobalScope</code> object has an <span>event
- loop</span> distinct from those defined for <span title="unit of
- related similar-origin browsing contexts">units of related
- similar-origin browsing contexts</span>. This <span>event
- loop</span> has no associated <span>browsing context</span>, and its
- <span title="task queue">task queues</span> only have events,
- callbacks, and networking activity as <span
- title="concept-task">tasks</span>. The processing model of these
- <span title="event loop">event loops</span> is defined below in the
+ <p>Each <code>WorkerGlobalScope</code> object has an <span>event loop</span> distinct from those
+ defined for <span title="unit of related similar-origin browsing contexts">units of related
+ similar-origin browsing contexts</span>. This <span>event loop</span> has no associated
+ <span>browsing context</span>, and its <span title="task queue">task queues</span> only have
+ events, callbacks, and networking activity as <span title="concept-task">tasks</span>. The
+ processing model of these <span title="event loop">event loops</span> is defined below in the
<span>run a worker</span> algorithm.</p>
<p>Each <code>WorkerGlobalScope</code> object also has a <dfn
- title="dom-WorkerGlobalScope-closing">closing</dfn> flag, which must
- initially be false, but which can get set to true by the algorithms
- in the processing model section below.</p>
+ title="dom-WorkerGlobalScope-closing">closing</dfn> flag, which must initially be false, but which
+ can get set to true by the algorithms in the processing model section below.</p>
<p>Once the <code>WorkerGlobalScope</code>'s <span
- title="dom-WorkerGlobalScope-closing">closing</span> flag is set to
- true, the <span>event loop</span>'s <span title="task queue">task
- queues</span> must discard any further <span
- title="concept-task">tasks</span> that would be added to them (tasks
- already on the queue are unaffected except where otherwise
- specified). Effectively, once the <span
- title="dom-WorkerGlobalScope-closing">closing</span> flag is true,
- timers stop firing, notifications for all pending asynchronous
- operations are dropped, etc.</p>
+ title="dom-WorkerGlobalScope-closing">closing</span> flag is set to true, the <span>event
+ loop</span>'s <span title="task queue">task queues</span> must discard any further <span
+ title="concept-task">tasks</span> that would be added to them (tasks already on the queue are
+ unaffected except where otherwise specified). Effectively, once the <span
+ title="dom-WorkerGlobalScope-closing">closing</span> flag is true, timers stop firing,
+ notifications for all pending asynchronous operations are dropped, etc.</p>
<h4>The worker's lifetime</h4>
- <p>Workers communicate with other workers and with <span
- title="browsing context">browsing contexts</span> through <span
- title="channel messaging">message channels</span> and their
+ <p>Workers communicate with other workers and with <span title="browsing context">browsing
+ contexts</span> through <span title="channel messaging">message channels</span> and their
<code>MessagePort</code> objects.</p>
- <p>Each <code>WorkerGlobalScope</code> <var title="">worker global
- scope</var> has a list of <dfn>the worker's ports</dfn>, which
- consists of all the <code>MessagePort</code> objects that are
- entangled with another port and that have one (but only one) port
- owned by <var title="">worker global scope</var>. This list includes
- <!--all the <code>MessagePort</code> objects that are in events
- pending in the <span>event loop</span>, as well as (commented out
- because in practice it makes no difference either way as far as I
- can tell, and it would be hard to strictly implement since these
- ports might not yet be across the thread boundary)--> the implicit
- <code>MessagePort</code> in the case of <span
- title="DedicatedWorkerGlobalScope">dedicated workers</span>.</p>
+ <p>Each <code>WorkerGlobalScope</code> <var title="">worker global scope</var> has a list of
+ <dfn>the worker's ports</dfn>, which consists of all the <code>MessagePort</code> objects that are
+ entangled with another port and that have one (but only one) port owned by <var title="">worker
+ global scope</var>. This list includes <!--all the <code>MessagePort</code> objects that are in
+ events pending in the <span>event loop</span>, as well as (commented out because in practice it
+ makes no difference either way as far as I can tell, and it would be hard to strictly implement
+ since these ports might not yet be across the thread boundary)--> the implicit
+ <code>MessagePort</code> in the case of <span title="DedicatedWorkerGlobalScope">dedicated
+ workers</span>.</p>
- <p>Each <code>WorkerGlobalScope</code> also has a list of <dfn>the
- worker's workers</dfn>. Initially this list is empty; it is
- populated when the worker creates or obtains further workers.</p>
+ <p>Each <code>WorkerGlobalScope</code> also has a list of <dfn>the worker's workers</dfn>.
+ Initially this list is empty; it is populated when the worker creates or obtains further
+ workers.</p>
- <p>Finally, each <code>WorkerGlobalScope</code> also has a list of
- <dfn>the worker's <code>Document</code>s</dfn>. Initially this list
- is empty; it is populated when the worker is created.</p>
+ <p>Finally, each <code>WorkerGlobalScope</code> also has a list of <dfn>the worker's
+ <code>Document</code>s</dfn>. Initially this list is empty; it is populated when the worker is
+ created.</p>
- <p>Whenever a <code>Document</code> <var title="">d</var> is <dfn
- title="add a document to the worker's documents">added to the
- worker's <code>Document</code>s</dfn>, the user agent must, for each
- worker <var title="">q</var> in the list of <span>the worker's
- workers</span> whose list of <span>the worker's
- <code>Document</code>s</span> does not contain <var
- title="">d</var>, <span title="add a document to the worker's
- documents">add <var title="">d</var> to <var title="">q</var>'s
- <code>WorkerGlobalScope</code> owner's list of <span>the worker's
- <code>Document</code>s</span></span>.</p> <!-- suggestions welcome
- on making this sentence into understandable English -->
+ <p>Whenever a <code>Document</code> <var title="">d</var> is <dfn title="add a document to the
+ worker's documents">added to the worker's <code>Document</code>s</dfn>, the user agent must, for
+ each worker <var title="">q</var> in the list of <span>the worker's workers</span> whose list of
+ <span>the worker's <code>Document</code>s</span> does not contain <var title="">d</var>, <span
+ title="add a document to the worker's documents">add <var title="">d</var> to <var
+ title="">q</var>'s <code>WorkerGlobalScope</code> owner's list of <span>the worker's
+ <code>Document</code>s</span></span>.</p> <!-- suggestions welcome on making this sentence into
+ understandable English -->
- <p>Whenever a <code>Document</code> object is <span title="discard a
- Document">discarded</span>, it must be removed from the list of
- <span>the worker's <code>Document</code>s</span> of each worker
- whose list contains that <code>Document</code>.</p>
+ <p>Whenever a <code>Document</code> object is <span title="discard a Document">discarded</span>,
+ it must be removed from the list of <span>the worker's <code>Document</code>s</span> of each
+ worker whose list contains that <code>Document</code>.</p>
- <p>Given a <span>script's global object</span> <var title="">o</var>
- when creating or obtaining a worker, the <dfn>list of relevant
- <code>Document</code> objects to add</dfn> depends on the type of
- <var title="">o</var>. If <var title="">o</var> is a
- <code>WorkerGlobalScope</code> object (i.e. if we are creating a
- nested worker), then the relevant <code>Document</code>s are the
- <code>Document</code>s that are in <var title="">o</var>'s own list
- of <span>the worker's <code>Document</code>s</span>. Otherwise, <var
- title="">o</var> is a <code>Window</code> object, and the relevant
- <code>Document</code> is just the <code>Document</code> that is the
- <span>active document</span> of the <code>Window</code> object <var
- title="">o</var>.</p>
+ <p>Given a <span>script's global object</span> <var title="">o</var> when creating or obtaining a
+ worker, the <dfn>list of relevant <code>Document</code> objects to add</dfn> depends on the type
+ of <var title="">o</var>. If <var title="">o</var> is a <code>WorkerGlobalScope</code> object
+ (i.e. if we are creating a nested worker), then the relevant <code>Document</code>s are the
+ <code>Document</code>s that are in <var title="">o</var>'s own list of <span>the worker's
+ <code>Document</code>s</span>. Otherwise, <var title="">o</var> is a <code>Window</code> object,
+ and the relevant <code>Document</code> is just the <code>Document</code> that is the <span>active
+ document</span> of the <code>Window</code> object <var title="">o</var>.</p>
<hr>
- <p>A worker is said to be a <dfn>permissible worker</dfn> if its
- list of <span>the worker's <code>Document</code>s</span> is not
- empty.</p>
+ <p>A worker is said to be a <dfn>permissible worker</dfn> if its list of <span>the worker's
+ <code>Document</code>s</span> is not empty.</p>
- <p>A worker is said to be a <dfn>protected worker</dfn> if it is a
- <span>permissible worker</span> and either it has outstanding
- timers, database transactions, or network connections, or its list
- of <span>the worker's ports</span> is not empty, or its
- <code>WorkerGlobalScope</code> is actually a
- <code>SharedWorkerGlobalScope</code> object (i.e. the worker is a
- shared worker).</p>
+ <p>A worker is said to be a <dfn>protected worker</dfn> if it is a <span>permissible worker</span>
+ and either it has outstanding timers, database transactions, or network connections, or its list
+ of <span>the worker's ports</span> is not empty, or its <code>WorkerGlobalScope</code> is actually
+ a <code>SharedWorkerGlobalScope</code> object (i.e. the worker is a shared worker).</p>
- <p>A worker is said to be an <dfn>active needed worker</dfn> if any
- of the <code>Document</code> objects in <span>the worker's
- <code>Document</code>s</span> are <span>fully active</span>.</p>
+ <p>A worker is said to be an <dfn>active needed worker</dfn> if any of the <code>Document</code>
+ objects in <span>the worker's <code>Document</code>s</span> are <span>fully active</span>.</p>
- <p>A worker is said to be a <dfn>suspendable worker</dfn> if it is
- not an <span>active needed worker</span> but it is a
- <span>permissible worker</span>.</p>
+ <p>A worker is said to be a <dfn>suspendable worker</dfn> if it is not an <span>active needed
+ worker</span> but it is a <span>permissible worker</span>.</p>
<h4>Processing model</h4>
- <p>When a user agent is to <dfn>run a worker</dfn> for a script with
- <span>URL</span> <var title="">url</var>, a <span>browsing
- context</span> <var title="">owner browsing context</var>, a
- <code>Document</code> <var title="">owner document</var>, an
- <span>origin</span> <var title="">owner origin</var>, and with
- global scope <var title="">worker global scope</var>, it must run
- the following steps:</p>
+ <p>When a user agent is to <dfn>run a worker</dfn> for a script with <span>URL</span> <var
+ title="">url</var>, a <span>browsing context</span> <var title="">owner browsing context</var>, a
+ <code>Document</code> <var title="">owner document</var>, an <span>origin</span> <var
+ title="">owner origin</var>, and with global scope <var title="">worker global scope</var>, it
+ must run the following steps:</p>
<ol>
<li>
- <p>Create a separate parallel execution environment (i.e. a
- separate thread or process or equivalent construct), and run the
- rest of these steps asynchronously in that context.</p>
+ <p>Create a separate parallel execution environment (i.e. a separate thread or process or
+ equivalent construct), and run the rest of these steps asynchronously in that context.</p>
</li>
<li><p>If <var title="">worker global scope</var> is actually a
- <code>SharedWorkerGlobalScope</code> object (i.e. the worker is a
- shared worker), and there are any <span title="relevant application
- cache">relevant application caches</span> that are identified by a
- manifest URL with the <span>same origin</span> as <var
- title="">url</var> and that have <var title="">url</var> as one of
- their entries, <em>not</em> excluding entries marked as <span
- title="concept-appcache-foreign">foreign</span>, then associate the
- <var title="">worker global scope</var> with the <span
- title="concept-appcache-selection">most appropriate application
+ <code>SharedWorkerGlobalScope</code> object (i.e. the worker is a shared worker), and there are
+ any <span title="relevant application cache">relevant application caches</span> that are
+ identified by a manifest URL with the <span>same origin</span> as <var title="">url</var> and
+ that have <var title="">url</var> as one of their entries, <em>not</em> excluding entries marked
+ as <span title="concept-appcache-foreign">foreign</span>, then associate the <var title="">worker
+ global scope</var> with the <span title="concept-appcache-selection">most appropriate application
cache</span> of those that match.</p></li>
<li>
- <p>Attempt to <span>fetch</span><!--FETCH--> the resource
- identified by <var title="">url</var>, from the <var
- title="">owner origin</var>, using <var title="">owner
- document</var> as the <span>referrer source</span>, with the
- <i>synchronous flag</i> set and the <i>force same-origin flag</i>
- set.</p> <!-- not http-origin privacy sensitive (looking forward
- to CORS) -->
+ <p>Attempt to <span>fetch</span><!--FETCH--> the resource identified by <var title="">url</var>,
+ from the <var title="">owner origin</var>, using <var title="">owner document</var> as the
+ <span>referrer source</span>, with the <i>synchronous flag</i> set and the <i>force same-origin
+ flag</i> set.</p> <!-- not http-origin privacy sensitive (looking forward to CORS) -->
- <p>If the attempt fails, then for each <code>Worker</code> or
- <code>SharedWorker</code> object associated with <var
- title="">worker global scope</var>, <span>queue a task</span> to
- <span>fire a simple event</span> named <code
- title="event-error">error</code> at that object. Abort these
+ <p>If the attempt fails, then for each <code>Worker</code> or <code>SharedWorker</code> object
+ associated with <var title="">worker global scope</var>, <span>queue a task</span> to <span>fire
+ a simple event</span> named <code title="event-error">error</code> at that object. Abort these
steps.</p>
- <p>If the attempt succeeds, then let <var title="">source</var> be
- the script resource <span>decoded as UTF-8, with error
- handling</span>.
+ <p>If the attempt succeeds, then let <var title="">source</var> be the script resource
+ <span>decoded as UTF-8, with error handling</span>.
<!--END complete-->
<a href="#refsHTML">[HTML]</a>
<!--START complete-->
@@ -93199,188 +92903,153 @@
<p>Let <var title="">language</var> be JavaScript.</p>
- <p class="note">As with <code>script</code> elements, the MIME
- type of the script is ignored. Unlike with <code>script</code>
- elements, there is no way to override the type. It's always
+ <p class="note">As with <code>script</code> elements, the MIME type of the script is ignored.
+ Unlike with <code>script</code> elements, there is no way to override the type. It's always
assumed to be JavaScript.</p>
</li>
- <li><p>In the newly created execution environment, create a
- <span>JavaScript global environment</span> whose <i>global
- object</i> is <var title="">worker global scope</var>. If <var
- title="">worker global scope</var> is a
- <code>DedicatedWorkerGlobalScope</code> object, then this is a
- <span>dedicated worker environment</span>. Otherwise, <var
- title="">worker global scope</var> is a
- <code>SharedWorkerGlobalScope</code> object, and this is a
- <span>shared worker environment</span>. (In either case, by
- definition, it is a <span>worker environment</span>.)</p></li>
+ <li><p>In the newly created execution environment, create a <span>JavaScript global
+ environment</span> whose <i>global object</i> is <var title="">worker global scope</var>. If <var
+ title="">worker global scope</var> is a <code>DedicatedWorkerGlobalScope</code> object, then this
+ is a <span>dedicated worker environment</span>. Otherwise, <var title="">worker global
+ scope</var> is a <code>SharedWorkerGlobalScope</code> object, and this is a <span>shared worker
+ environment</span>. (In either case, by definition, it is a <span>worker
+ environment</span>.)</p></li>
<li>
- <p>A new <span title="concept-script">script</span> is now
- created, as follows.</p>
+ <p>A new <span title="concept-script">script</span> is now created, as follows.</p>
- <p>Create a new <span>script execution environment</span>
- set up as appropriate for the scripting language <var
- title="">language</var>.</p>
+ <p>Create a new <span>script execution environment</span> set up as appropriate for the
+ scripting language <var title="">language</var>.</p>
- <p>Parse/compile/initialize <var title="">source</var> using that
- <span>script execution environment</span>, as appropriate for <var
- title="">language</var>, and thus obtain a <span>list of code
- entry-points</span>; set the <i>initial code entry-point</i> to
- the entry-point for any executable code to be immediately run.</p>
+ <p>Parse/compile/initialize <var title="">source</var> using that <span>script execution
+ environment</span>, as appropriate for <var title="">language</var>, and thus obtain a
+ <span>list of code entry-points</span>; set the <i>initial code entry-point</i> to the
+ entry-point for any executable code to be immediately run.</p>
- <p>Set the <span>script's global object</span> to <var
- title="">worker global scope</var>.</p>
+ <p>Set the <span>script's global object</span> to <var title="">worker global scope</var>.</p>
- <p>Set the <span>script's browsing context</span> to <var
- title="">owner browsing context</var>.</p>
+ <p>Set the <span>script's browsing context</span> to <var title="">owner browsing
+ context</var>.</p>
- <p>Set the <span>script's document</span> to <var title="">owner
- document</var>.</p>
+ <p>Set the <span>script's document</span> to <var title="">owner document</var>.</p>
<p>Set the <span>script's referrer source</span> to <var
title="">url</var>.</p>
- <p>Set the <span>script's URL character encoding</span> to
- UTF-8. (This is just used for encoding non-ASCII characters in the
- query component of URLs.)</p>
+ <p>Set the <span>script's URL character encoding</span> to UTF-8. (This is just used for
+ encoding non-ASCII characters in the query component of URLs.)</p>
- <p>Set the <span>script's base URL</span> to <var
- title="">url</var>.</p>
+ <p>Set the <span>script's base URL</span> to <var title="">url</var>.</p>
</li>
<li>
- <p><strong>Closing orphan workers</strong>: Start monitoring the
- worker such that no sooner than it stops being either a
- <span>protected worker</span> or a <span>suspendable
- worker</span>, and no later than it stops being a
- <span>permissible worker</span>, <var title="">worker global
- scope</var>'s <span
- title="dom-WorkerGlobalScope-closing">closing</span> flag is set
- to true<!-- v2-onclose and <span title="queue a task">a task is
- queued</span> to <span>fire a simple event</span> named <code
- title="event-worker-close">close</code> at <var title="">worker global
+ <p><strong>Closing orphan workers</strong>: Start monitoring the worker such that no sooner than
+ it stops being either a <span>protected worker</span> or a <span>suspendable worker</span>, and
+ no later than it stops being a <span>permissible worker</span>, <var title="">worker global
+ scope</var>'s <span title="dom-WorkerGlobalScope-closing">closing</span> flag is set to true<!--
+ v2-onclose and <span title="queue a task">a task is queued</span> to <span>fire a simple
+ event</span> named <code title="event-worker-close">close</code> at <var title="">worker global
scope</var>-->.</p>
</li>
<li>
- <p><strong>Suspending workers</strong>: Start monitoring the
- worker, such that whenever <var title="">worker global
- scope</var>'s <span
- title="dom-WorkerGlobalScope-closing">closing</span> flag is false
- and the worker is a <span>suspendable worker</span>, the user
- agent suspends execution of script in that worker until such time
- as either the <span
- title="dom-WorkerGlobalScope-closing">closing</span> flag switches
- to true or the worker stops being a <span>suspendable
- worker</span>.</p>
+ <p><strong>Suspending workers</strong>: Start monitoring the worker, such that whenever <var
+ title="">worker global scope</var>'s <span title="dom-WorkerGlobalScope-closing">closing</span>
+ flag is false and the worker is a <span>suspendable worker</span>, the user agent suspends
+ execution of script in that worker until such time as either the <span
+ title="dom-WorkerGlobalScope-closing">closing</span> flag switches to true or the worker stops
+ being a <span>suspendable worker</span>.</p>
</li>
<li>
- <p><span title="jump to a code entry-point">Jump</span> to the
- <span title="concept-script">script</span>'s <i>initial code
- entry-point</i>, and let that run until it either returns, fails
- to catch an exception, or gets prematurely aborted by the
- "<span>kill a worker</span>" or "<span>terminate a worker</span>"
- algorithms defined below.</p>
+ <p><span title="jump to a code entry-point">Jump</span> to the <span
+ title="concept-script">script</span>'s <i>initial code entry-point</i>, and let that run until
+ it either returns, fails to catch an exception, or gets prematurely aborted by the "<span>kill a
+ worker</span>" or "<span>terminate a worker</span>" algorithms defined below.</p>
<!-- v2-onclose
- <p class="note">If the script gets aborted by the "<span>kill a
- worker</span>" algorithm, then that same algorithm will cause
- there to only be a single <span title="concept-task">task</span>
- in the <span>event loop</span> at the next step, namely the task
- for the <code title="message-close">close</code> event. The
- "<span>terminate a worker</span>" algorithm removes all the
- events.</p>
+ <p class="note">If the script gets aborted by the "<span>kill a worker</span>" algorithm, then
+ that same algorithm will cause there to only be a single <span title="concept-task">task</span>
+ in the <span>event loop</span> at the next step, namely the task for the <code
+ title="message-close">close</code> event. The "<span>terminate a worker</span>" algorithm
+ removes all the events.</p>
-->
</li>
<li><p>If <var title="">worker global scope</var> is actually a
- <code>DedicatedWorkerGlobalScope</code> object (i.e. the worker is
- a dedicated worker), then enable the <span>port message
- queue</span> of the worker's implicit port.</p></li>
+ <code>DedicatedWorkerGlobalScope</code> object (i.e. the worker is a dedicated worker), then
+ enable the <span>port message queue</span> of the worker's implicit port.</p></li>
<li>
<p><i title="">Event loop</i>: Wait until either there is a <span
- title="concept-task">task</span> in one of the <span>event
- loop</span>'s <span title="task queue">task queues</span> or <var
- title="">worker global scope</var>'s <span
- title="dom-WorkerGlobalScope-closing">closing</span> flag is set
- to true.</p>
+ title="concept-task">task</span> in one of the <span>event loop</span>'s <span title="task
+ queue">task queues</span> or <var title="">worker global scope</var>'s <span
+ title="dom-WorkerGlobalScope-closing">closing</span> flag is set to true.</p>
</li>
<li>
- <p>Run the oldest task on one of the <span>event loop</span>'s
- <span title="task queue">task queues</span>, if any. The user
- agent may pick any <span>task queue</span>.</p>
+ <p>Run the oldest task on one of the <span>event loop</span>'s <span title="task queue">task
+ queues</span>, if any. The user agent may pick any <span>task queue</span>.</p>
- <p class="note">The handling of events or the execution of
- callbacks might get prematurely aborted by the "<span>kill a
- worker</span>" or "<span>terminate a worker</span>" algorithms
+ <p class="note">The handling of events or the execution of callbacks might get prematurely
+ aborted by the "<span>kill a worker</span>" or "<span>terminate a worker</span>" algorithms
defined below.</p>
</li>
<li>
- <p>If the <span>storage mutex</span> is now owned by the worker's
- <span>event loop</span>, release it so that it is once again
- free.</p>
+ <p>If the <span>storage mutex</span> is now owned by the worker's <span>event loop</span>,
+ release it so that it is once again free.</p>
</li>
<li>
- <p>Remove the task just run in the earlier step, if any, from its
- <span>task queue</span>.</p>
+ <p>Remove the task just run in the earlier step, if any, from its <span>task queue</span>.</p>
</li>
<li>
- <p>If there are any more events in the <span>event loop</span>'s
- <span title="task queue">task queues</span> or if <var
- title="">worker global scope</var>'s <span
- title="dom-WorkerGlobalScope-closing">closing</span> flag is set
- to false, then jump back to the step above labeled <i>event
- loop</i>.</p>
+ <p>If there are any more events in the <span>event loop</span>'s <span title="task queue">task
+ queues</span> or if <var title="">worker global scope</var>'s <span
+ title="dom-WorkerGlobalScope-closing">closing</span> flag is set to false, then jump back to the
+ step above labeled <i>event loop</i>.</p>
</li>
<li>
- <p>Empty the <var title="">worker global scope</var>'s <span>list
- of active timers</span>.</p>
+ <p>Empty the <var title="">worker global scope</var>'s <span>list of active timers</span>.</p>
</li>
<li>
- <p>Disentangle all the ports in the list of <span>the worker's
- ports</span>.</p>
+ <p>Disentangle all the ports in the list of <span>the worker's ports</span>.</p>
</li>
<!-- v2-onclose
<li>
- <p>For each <code>Worker</code> or <code>SharedWorker</code>
- object associated with <var title="">worker global scope</var>,
- <span>queue a task</span> to <span>fire a simple event</span>
- named <code title="event-worker-close">close</code> at that object.</p>
+ <p>For each <code>Worker</code> or <code>SharedWorker</code> object associated with <var
+ title="">worker global scope</var>, <span>queue a task</span> to <span>fire a simple
+ event</span> named <code title="event-worker-close">close</code> at that object.</p>
</li>
-->
@@ -93388,93 +93057,80 @@
<hr>
- <p>When a user agent is to <dfn>kill a worker</dfn> it must
- run the following steps in parallel with the worker's main loop (the
- "<span>run a worker</span>" processing model defined above):</p>
+ <p>When a user agent is to <dfn>kill a worker</dfn> it must run the following steps in parallel
+ with the worker's main loop (the "<span>run a worker</span>" processing model defined above):</p>
<ol>
<!-- v2-onclose
- <li><p>If the worker's <code>WorkerGlobalScope</code> object's
- <span title="dom-WorkerGlobalScope-closing">closing</span> flag is
- false, <span>queue a task</span> to <span>fire a simple
- event</span> named <code title="event-worker-close">close</code> at the
+ <li><p>If the worker's <code>WorkerGlobalScope</code> object's <span
+ title="dom-WorkerGlobalScope-closing">closing</span> flag is false, <span>queue a task</span> to
+ <span>fire a simple event</span> named <code title="event-worker-close">close</code> at the
worker's <code>WorkerGlobalScope</code> object.</p></li>
-->
<li><p>Set the worker's <code>WorkerGlobalScope</code> object's <span
- title="dom-WorkerGlobalScope-closing">closing</span> flag to
- true.</p></li>
+ title="dom-WorkerGlobalScope-closing">closing</span> flag to true.</p></li>
<!-- v2-onclose
- <li><p>Wait a user-agent-defined amount of time. If the "<span>run
- a worker</span>" processing model defined above immediately starts
- running event listeners registered for the <code
- title="event-worker-close">close</code> event, this time should not be
- zero — the idea is that the <code
- title="event-worker-close">close</code> event can be used to clean up
- when shutting down unexpectedly.</p></li>
+ <li><p>Wait a user-agent-defined amount of time. If the "<span>run a worker</span>" processing
+ model defined above immediately starts running event listeners registered for the <code
+ title="event-worker-close">close</code> event, this time should not be zero — the idea is
+ that the <code title="event-worker-close">close</code> event can be used to clean up when
+ shutting down unexpectedly.</p></li>
-->
- <li><p>If there are any <span title="concept-task">tasks</span>
- queued in the <span>event loop</span>'s <span title="task
- queue">task queues</span><!-- v2-onclose other than the <code
- title="event-worker-close">close</code> event that this algorithm just
- added-->, discard them without processing them.</p></li>
+ <li><p>If there are any <span title="concept-task">tasks</span> queued in the <span>event
+ loop</span>'s <span title="task queue">task queues</span><!-- v2-onclose other than the <code
+ title="event-worker-close">close</code> event that this algorithm just added-->, discard them
+ without processing them.</p></li>
<!-- v2-onclose
- <li><p>If the <code title="event-worker-close">close</code> event that
- this algorithm just queued hasn't yet been dispatched, then abort
- the script currently running in the worker.</p></li>
+ <li><p>If the <code title="event-worker-close">close</code> event that this algorithm just queued
+ hasn't yet been dispatched, then abort the script currently running in the worker.</p></li>
-->
<li><p>Wait a user-agent-defined amount of time.</p></li>
- <li><p>Abort the script currently running in the worker<!--
- v2-onclose (if any script is running, then it will be a handler for
- the <code title="event-worker-close">close</code> event)-->.</p></li>
+ <li><p>Abort the script currently running in the worker<!-- v2-onclose (if any script is running,
+ then it will be a handler for the <code title="event-worker-close">close</code>
+ event)-->.</p></li>
</ol>
- <p>User agents may invoke the "<span>kill a worker</span>"
- processing model on a worker at any time, e.g. in response to user
- requests, in response to CPU quota management, or when a worker
- stops being an <span>active needed worker</span> if the worker
- continues executing even after its <span
- title="dom-WorkerGlobalScope-closing">closing</span> flag was
- set to true.</p>
+ <p>User agents may invoke the "<span>kill a worker</span>" processing model on a worker at any
+ time, e.g. in response to user requests, in response to CPU quota management, or when a worker
+ stops being an <span>active needed worker</span> if the worker continues executing even after its
+ <span title="dom-WorkerGlobalScope-closing">closing</span> flag was set to true.</p>
<hr>
- <p>When a user agent is to <dfn>terminate a worker</dfn> it must run
- the following steps in parallel with the worker's main loop (the
- "<span>run a worker</span>" processing model defined above):</p>
+ <p>When a user agent is to <dfn>terminate a worker</dfn> it must run the following steps in
+ parallel with the worker's main loop (the "<span>run a worker</span>" processing model defined
+ above):</p>
<ol>
- <li><p>Set the worker's <code>WorkerGlobalScope</code> object's
- <span title="dom-WorkerGlobalScope-closing">closing</span> flag to
- true.</p></li>
+ <li><p>Set the worker's <code>WorkerGlobalScope</code> object's <span
+ title="dom-WorkerGlobalScope-closing">closing</span> flag to true.</p></li>
- <li><p>If there are any <span title="concept-task">tasks</span>
- queued in the <span>event loop</span>'s <span title="task
- queue">task queues</span>, discard them without processing
+ <li><p>If there are any <span title="concept-task">tasks</span> queued in the <span>event
+ loop</span>'s <span title="task queue">task queues</span>, discard them without processing
them.</p></li>
<li><p>Abort the script currently running in the worker.</p></li>
- <li><p>If the worker's <code>WorkerGlobalScope</code> object is
- actually a <code>DedicatedWorkerGlobalScope</code> object (i.e. the
- worker is a dedicated worker), then empty the <span>port message
- queue</span> of the port that the worker's implicit port is
+ <li><p>If the worker's <code>WorkerGlobalScope</code> object is actually a
+ <code>DedicatedWorkerGlobalScope</code> object (i.e. the worker is a dedicated worker), then
+ empty the <span>port message queue</span> of the port that the worker's implicit port is
entangled with.</p></li>
</ol>
<hr>
- <p>The <span>task source</span> for the tasks mentioned above is the
- <span>DOM manipulation task source</span>.</p>
+ <p>The <span>task source</span> for the tasks mentioned above is the <span>DOM manipulation task
+ source</span>.</p>
<h4>Runtime script errors</h4>
@@ -93489,10 +93145,9 @@
<!--START complete-->
</p>
- <p>For shared workers, if the error is still <i
- title="concept-error-nothandled">not handled</i> afterwards, or if
- the error occurred while handling a previous script error, the error
- may be reported to the user.
+ <p>For shared workers, if the error is still <i title="concept-error-nothandled">not handled</i>
+ afterwards, or if the error occurred while handling a previous script error, the error may be
+ reported to the user.
<!--END complete-->
<a href="#refsHTML">[HTML]</a>
<!--START complete-->
@@ -93511,22 +93166,18 @@
error had occurred in the global scope that the <code>Worker</code> object is in, thus repeating
the entire runtime script error reporting process one level up.</p>
- <p>If the implicit port connecting the worker to its
- <code>Worker</code> object has been disentangled (i.e. if the parent
- worker has been terminated), then the user agent must act as if the
- <code>Worker</code> object had no <code
- title="event-error">error</code> event handler and as if that
- worker's <code
- title="handler-WorkerGlobalScope-onerror">onerror</code> attribute
- was null, but must otherwise act as described above.</p>
+ <p>If the implicit port connecting the worker to its <code>Worker</code> object has been
+ disentangled (i.e. if the parent worker has been terminated), then the user agent must act as if
+ the <code>Worker</code> object had no <code title="event-error">error</code> event handler and as
+ if that worker's <code title="handler-WorkerGlobalScope-onerror">onerror</code> attribute was
+ null, but must otherwise act as described above.</p>
- <p class="note">Thus, error reports propagate up to the chain of
- dedicated workers up to the original <code>Document</code>, even if
- some of the workers along this chain have been terminated and
- garbage collected.</p>
+ <p class="note">Thus, error reports propagate up to the chain of dedicated workers up to the
+ original <code>Document</code>, even if some of the workers along this chain have been terminated
+ and garbage collected.</p>
- <p>The <span>task source</span> for the task mentioned above is the
- <span>DOM manipulation task source</span>.</p>
+ <p>The <span>task source</span> for the task mentioned above is the <span>DOM manipulation task
+ source</span>.</p>
<hr>
@@ -95864,30 +95515,23 @@
<hr>
- <p>The <dfn
- title="dom-WebSocket-bufferedAmount"><code>bufferedAmount</code></dfn>
- attribute must return the number of bytes of application data (UTF-8
- text and binary data) that have been queued using <code
- title="dom-WebSocket-send">send()</code> but that, as of the last
- time the <span>event loop</span> started executing a <span
- title="concept-task">task</span>, had not yet been transmitted to
- the network. (This thus includes any text sent during the execution
- of the current task, regardless of whether the user agent is able to
- transmit text asynchronously with script execution.) This does not
- include framing overhead incurred by the protocol, or buffering done
- by the operating system or network hardware. If the connection is
- closed, this attribute's value will only increase with each call to
- the <code title="dom-WebSocket-send">send()</code> method (the
+ <p>The <dfn title="dom-WebSocket-bufferedAmount"><code>bufferedAmount</code></dfn> attribute must
+ return the number of bytes of application data (UTF-8 text and binary data) that have been queued
+ using <code title="dom-WebSocket-send">send()</code> but that, as of the last time the <span>event
+ loop</span> started executing a <span title="concept-task">task</span>, had not yet been
+ transmitted to the network. (This thus includes any text sent during the execution of the current
+ task, regardless of whether the user agent is able to transmit text asynchronously with script
+ execution.) This does not include framing overhead incurred by the protocol, or buffering done by
+ the operating system or network hardware. If the connection is closed, this attribute's value will
+ only increase with each call to the <code title="dom-WebSocket-send">send()</code> method (the
number does not reset to zero once the connection closes).</p>
<div class="example">
- <p>In this simple example, the <code
- title="dom-WebSocket-bufferedAmount">bufferedAmount</code>
- attribute is used to ensure that updates are sent either at the
- rate of one update every 50ms, if the network can handle that rate,
- or at whatever rate the network <em>can</em> handle, if that is too
- fast.</p>
+ <p>In this simple example, the <code title="dom-WebSocket-bufferedAmount">bufferedAmount</code>
+ attribute is used to ensure that updates are sent either at the rate of one update every 50ms, if
+ the network can handle that rate, or at whatever rate the network <em>can</em> handle, if that is
+ too fast.</p>
<pre>var socket = new WebSocket('ws://game.example.com:12010/updates');
socket.onopen = function () {
@@ -95897,48 +95541,37 @@
}, 50);
};</pre>
- <p>The <code
- title="dom-WebSocket-bufferedAmount">bufferedAmount</code>
- attribute can also be used to saturate the network without sending
- the data at a higher rate than the network can handle, though this
- requires more careful monitoring of the value of the attribute over
- time.</p>
+ <p>The <code title="dom-WebSocket-bufferedAmount">bufferedAmount</code> attribute can also be
+ used to saturate the network without sending the data at a higher rate than the network can
+ handle, though this requires more careful monitoring of the value of the attribute over time.</p>
</div>
<hr>
<p>When a <code>WebSocket</code> object is created, its <dfn
- title="dom-WebSocket-binaryType"><code>binaryType</code></dfn> IDL
- attribute must be set to the string "<code title="">blob</code>". On
- getting, it must return the last value it was set to. On setting,
- the user agent must set the IDL attribute to the new value.</p>
+ title="dom-WebSocket-binaryType"><code>binaryType</code></dfn> IDL attribute must be set to the
+ string "<code title="">blob</code>". On getting, it must return the last value it was set to. On
+ setting, the user agent must set the IDL attribute to the new value.</p>
- <p class="note">This attribute allows authors to control how binary
- data is exposed to scripts. By setting the attribute to "<code
- title="">blob</code>", binary data is returned in <code>Blob</code>
- form; by setting it to "<code title="">arraybuffer</code>", it is
- returned in <code>ArrayBuffer</code> form. User agents can use this
- as a hint for how to handle incoming binary data: if the attribute
- is set to "<code title="">blob</code>", it is safe to spool it to
- disk, and if it is set to "<code title="">arraybuffer</code>", it is
- likely more efficient to keep the data in memory. Naturally, user
- agents are encouraged to use more subtle heuristics to decide
- whether to keep incoming data in memory or not, e.g. based on how
- big the data is or how common it is for a script to change the
- attribute at the last minute. This latter aspect is important in
- particular because it is quite possible for the attribute to be
- changed after the user agent has received the data but before the
- user agent has fired the event for it.</p>
+ <p class="note">This attribute allows authors to control how binary data is exposed to scripts. By
+ setting the attribute to "<code title="">blob</code>", binary data is returned in
+ <code>Blob</code> form; by setting it to "<code title="">arraybuffer</code>", it is returned in
+ <code>ArrayBuffer</code> form. User agents can use this as a hint for how to handle incoming
+ binary data: if the attribute is set to "<code title="">blob</code>", it is safe to spool it to
+ disk, and if it is set to "<code title="">arraybuffer</code>", it is likely more efficient to keep
+ the data in memory. Naturally, user agents are encouraged to use more subtle heuristics to decide
+ whether to keep incoming data in memory or not, e.g. based on how big the data is or how common it
+ is for a script to change the attribute at the last minute. This latter aspect is important in
+ particular because it is quite possible for the attribute to be changed after the user agent has
+ received the data but before the user agent has fired the event for it.</p>
- <p>The <dfn title="dom-WebSocket-send"><code>send(<var
- title="">data</var>)</code></dfn> method transmits data using the
- connection. If the <code
- title="dom-WebSocket-readyState">readyState</code> attribute is
- <code title="dom-WebSocket-CONNECTING">CONNECTING</code>, it must
- throw an <code>InvalidStateError</code> exception. Otherwise, the
- user agent must run the appropriate set of steps from the following
- list:</p>
+ <p>The <dfn title="dom-WebSocket-send"><code>send(<var title="">data</var>)</code></dfn> method
+ transmits data using the connection. If the <code
+ title="dom-WebSocket-readyState">readyState</code> attribute is <code
+ title="dom-WebSocket-CONNECTING">CONNECTING</code>, it must throw an
+ <code>InvalidStateError</code> exception. Otherwise, the user agent must run the appropriate set
+ of steps from the following list:</p>
<dl>
@@ -95946,23 +95579,17 @@
<dd>
- <p>Let <var title="">data</var> be the result of <span
- title="convert a DOMString to a sequence of Unicode
- characters">converting the <var title="">data</var> argument to a
- sequence of Unicode characters</span>. If <i>the WebSocket
- connection is established</i> and <i title="the WebSocket closing
- handshake is started">the WebSocket closing handshake has not yet
- started</i>, then the user agent must <i>send a WebSocket
- Message</i> comprised of <var title="">data</var> using a text
- frame opcode; if the data cannot be sent, e.g. because it would
- need to be buffered but the buffer is full, the user agent must
- <i>close the WebSocket connection</i> <span
- title="concept-websocket-close-fail">with prejudice</span>. Any
- invocation of this method with a string argument that does not
- throw an exception must increase the <code
- title="dom-WebSocket-bufferedAmount">bufferedAmount</code>
- attribute by the number of bytes needed to express the argument as
- UTF-8. <a href="#refsUNICODE">[UNICODE]</a> <a
+ <p>Let <var title="">data</var> be the result of <span title="convert a DOMString to a sequence
+ of Unicode characters">converting the <var title="">data</var> argument to a sequence of Unicode
+ characters</span>. If <i>the WebSocket connection is established</i> and <i title="the WebSocket
+ closing handshake is started">the WebSocket closing handshake has not yet started</i>, then the
+ user agent must <i>send a WebSocket Message</i> comprised of <var title="">data</var> using a
+ text frame opcode; if the data cannot be sent, e.g. because it would need to be buffered but the
+ buffer is full, the user agent must <i>close the WebSocket connection</i> <span
+ title="concept-websocket-close-fail">with prejudice</span>. Any invocation of this method with a
+ string argument that does not throw an exception must increase the <code
+ title="dom-WebSocket-bufferedAmount">bufferedAmount</code> attribute by the number of bytes
+ needed to express the argument as UTF-8. <a href="#refsUNICODE">[UNICODE]</a> <a
href="#refsRFC3629">[RFC3629]</a> <a href="#refsWSP">[WSP]</a></p>
</dd>
@@ -95972,24 +95599,18 @@
<dd>
- <p>If <i>the WebSocket connection is established</i>, and <i
- title="the WebSocket closing handshake is started">the WebSocket
- closing handshake has not yet started</i>, then the user agent
- must <i>send a WebSocket Message</i> comprised of <var
- title="">data</var> using a binary frame opcode; if the data
- cannot be sent, e.g. because it would need to be buffered but the
- buffer is full, the user agent must <i>close the WebSocket
- connection</i> <span title="concept-websocket-close-fail">with
- prejudice</span>. The data to be sent is the raw data represented
- by the <code>Blob</code> object. <!-- that sentence is meant to
- invoke "This interface represents immutable raw data." --> Any
- invocation of this method with a <code>Blob</code> argument that
- does not throw an exception must increase the <code
- title="dom-WebSocket-bufferedAmount">bufferedAmount</code>
- attribute by the size of the <code>Blob</code> object's raw data,
- in bytes. <!-- that sentence is meant to invoke the same as
- Blob.size --> <a href="#refsWSP">[WSP]</a> <a
- href="#refsFILEAPI">[FILEAPI]</a></p>
+ <p>If <i>the WebSocket connection is established</i>, and <i title="the WebSocket closing
+ handshake is started">the WebSocket closing handshake has not yet started</i>, then the user
+ agent must <i>send a WebSocket Message</i> comprised of <var title="">data</var> using a binary
+ frame opcode; if the data cannot be sent, e.g. because it would need to be buffered but the
+ buffer is full, the user agent must <i>close the WebSocket connection</i> <span
+ title="concept-websocket-close-fail">with prejudice</span>. The data to be sent is the raw data
+ represented by the <code>Blob</code> object. <!-- that sentence is meant to invoke "This
+ interface represents immutable raw data." --> Any invocation of this method with a
+ <code>Blob</code> argument that does not throw an exception must increase the <code
+ title="dom-WebSocket-bufferedAmount">bufferedAmount</code> attribute by the size of the
+ <code>Blob</code> object's raw data, in bytes. <!-- that sentence is meant to invoke the same as
+ Blob.size --> <a href="#refsWSP">[WSP]</a> <a href="#refsFILEAPI">[FILEAPI]</a></p>
</dd>
@@ -95998,27 +95619,20 @@
<dd>
- <p>If <i>the WebSocket connection is established</i>, and <i
- title="the WebSocket closing handshake is started">the WebSocket
- closing handshake has not yet started</i>, then the user agent
- must <i>send a WebSocket Message</i> comprised of <var
- title="">data</var> using a binary frame opcode; if the data
- cannot be sent, e.g. because it would need to be buffered but the
- buffer is full, the user agent must <i>close the WebSocket
- connection</i> <span title="concept-websocket-close-fail">with
- prejudice</span>. The data to be sent is the data stored in the
- buffer described by the <code>ArrayBuffer</code> object. <!-- that
- sentence is meant to invoke "The ArrayBuffer type describes a
- buffer used to store data for the array buffer views." at the top
- of the Typed Array spec, and "Optional byteOffset and length can
- be used to limit the section of the buffer referenced" in the
- definition of the TypedArray constructor --> Any invocation of
- this method with an <code>ArrayBuffer</code> argument that does
- not throw an exception must increase the <code
- title="dom-WebSocket-bufferedAmount">bufferedAmount</code>
- attribute by the length of the <code>ArrayBuffer</code> in bytes.
- <!-- that sentence is meant to invoke the same as
- ArrayBuffer.byteLength --> <a href="#refsWSP">[WSP]</a> <a
+ <p>If <i>the WebSocket connection is established</i>, and <i title="the WebSocket closing
+ handshake is started">the WebSocket closing handshake has not yet started</i>, then the user
+ agent must <i>send a WebSocket Message</i> comprised of <var title="">data</var> using a binary
+ frame opcode; if the data cannot be sent, e.g. because it would need to be buffered but the
+ buffer is full, the user agent must <i>close the WebSocket connection</i> <span
+ title="concept-websocket-close-fail">with prejudice</span>. The data to be sent is the data
+ stored in the buffer described by the <code>ArrayBuffer</code> object. <!-- that sentence is
+ meant to invoke "The ArrayBuffer type describes a buffer used to store data for the array buffer
+ views." at the top of the Typed Array spec, and "Optional byteOffset and length can be used to
+ limit the section of the buffer referenced" in the definition of the TypedArray constructor -->
+ Any invocation of this method with an <code>ArrayBuffer</code> argument that does not throw an
+ exception must increase the <code title="dom-WebSocket-bufferedAmount">bufferedAmount</code>
+ attribute by the length of the <code>ArrayBuffer</code> in bytes. <!-- that sentence is meant to
+ invoke the same as ArrayBuffer.byteLength --> <a href="#refsWSP">[WSP]</a> <a
href="#refsTYPEDARRAY">[TYPEDARRAY]</a></p>
</dd>
@@ -96028,28 +95642,21 @@
<dd>
- <p>If <i>the WebSocket connection is established</i>, and <i
- title="the WebSocket closing handshake is started">the WebSocket
- closing handshake has not yet started</i>, then the user agent
- must <i>send a WebSocket Message</i> comprised of <var
- title="">data</var> using a binary frame opcode; if the data
- cannot be sent, e.g. because it would need to be buffered but the
- buffer is full, the user agent must <i>close the WebSocket
- connection</i> <span title="concept-websocket-close-fail">with
- prejudice</span>. The data to be sent is the data stored in the
- section of the buffer described by the <code>ArrayBuffer</code>
- object that the <code>ArrayBufferView</code> object references.
- <!-- that sentence is meant to invoke "The ArrayBuffer type
- describes a buffer used to store data for the array buffer views."
- at the top of the Typed Array spec, and "Optional byteOffset and
- length can be used to limit the section of the buffer referenced"
- in the definition of the TypedArray constructor --> Any invocation
- of this method with an <code>ArrayBufferView</code> argument that
- does not throw an exception must increase the <code
- title="dom-WebSocket-bufferedAmount">bufferedAmount</code>
- attribute by the length of the <code>ArrayBufferView</code> in
- bytes. <!-- that sentence is meant to invoke the same as
- ArrayBufferView.byteLength --> <a href="#refsWSP">[WSP]</a> <a
+ <p>If <i>the WebSocket connection is established</i>, and <i title="the WebSocket closing
+ handshake is started">the WebSocket closing handshake has not yet started</i>, then the user
+ agent must <i>send a WebSocket Message</i> comprised of <var title="">data</var> using a binary
+ frame opcode; if the data cannot be sent, e.g. because it would need to be buffered but the
+ buffer is full, the user agent must <i>close the WebSocket connection</i> <span
+ title="concept-websocket-close-fail">with prejudice</span>. The data to be sent is the data
+ stored in the section of the buffer described by the <code>ArrayBuffer</code> object that the
+ <code>ArrayBufferView</code> object references. <!-- that sentence is meant to invoke "The
+ ArrayBuffer type describes a buffer used to store data for the array buffer views." at the top
+ of the Typed Array spec, and "Optional byteOffset and length can be used to limit the section of
+ the buffer referenced" in the definition of the TypedArray constructor --> Any invocation of
+ this method with an <code>ArrayBufferView</code> argument that does not throw an exception must
+ increase the <code title="dom-WebSocket-bufferedAmount">bufferedAmount</code> attribute by the
+ length of the <code>ArrayBufferView</code> in bytes. <!-- that sentence is meant to invoke the
+ same as ArrayBufferView.byteLength --> <a href="#refsWSP">[WSP]</a> <a
href="#refsTYPEDARRAY">[TYPEDARRAY]</a></p>
</dd>
@@ -96058,10 +95665,9 @@
<hr>
- <p>The following are the <span>event handlers</span> (and their
- corresponding <span title="event handler event type">event handler
- event types</span>) that must be supported, as IDL attributes, by
- all objects implementing the <code>WebSocket</code> interface:</p>
+ <p>The following are the <span>event handlers</span> (and their corresponding <span title="event
+ handler event type">event handler event types</span>) that must be supported, as IDL attributes,
+ by all objects implementing the <code>WebSocket</code> interface:</p>
<table>
<thead>
@@ -96077,55 +95683,43 @@
<h4>Feedback from the protocol</h4>
- <p>When <i>the WebSocket connection is established</i>, the user
- agent must <span>queue a task</span> to run these steps:</p>
+ <p>When <i>the WebSocket connection is established</i>, the user agent must <span>queue a
+ task</span> to run these steps:</p>
<ol>
- <li><p>Change the <code
- title="dom-WebSocket-readyState">readyState</code> attribute's
- value to <code title="dom-WebSocket-OPEN">OPEN</code> (1).</p></li>
+ <li><p>Change the <code title="dom-WebSocket-readyState">readyState</code> attribute's value to
+ <code title="dom-WebSocket-OPEN">OPEN</code> (1).</p></li>
- <li><p>Change the <code
- title="dom-WebSocket-extensions">extensions</code> attribute's
- value to the <i>extensions in use</i>, if is not the null value. <a
- href="#refsWSP">[WSP]</a></p></li>
+ <li><p>Change the <code title="dom-WebSocket-extensions">extensions</code> attribute's value to
+ the <i>extensions in use</i>, if is not the null value. <a href="#refsWSP">[WSP]</a></p></li>
- <li><p>Change the <code
- title="dom-WebSocket-protocol">protocol</code> attribute's value to
- the <i>subprotocol in use</i>, if is not the null value. <a
- href="#refsWSP">[WSP]</a></p></li>
+ <li><p>Change the <code title="dom-WebSocket-protocol">protocol</code> attribute's value to the
+ <i>subprotocol in use</i>, if is not the null value. <a href="#refsWSP">[WSP]</a></p></li>
- <li><p>Act as if the user agent had <span title="receives a
- set-cookie-string">received a set-cookie-string</span> consisting
- of the <i>cookies set during the server's opening handshake</i>,
- for the URL <var title="">url</var> given to the <code
- title="dom-WebSocket">WebSocket()</code> constructor. <a
- href="#refsCOOKIES">[COOKIES]</a> <a
- href="#refsRFC3629">[RFC3629]</a> <a
- href="#refsWSP">[WSP]</a></p></li>
+ <li><p>Act as if the user agent had <span title="receives a set-cookie-string">received a
+ set-cookie-string</span> consisting of the <i>cookies set during the server's opening
+ handshake</i>, for the URL <var title="">url</var> given to the <code
+ title="dom-WebSocket">WebSocket()</code> constructor. <a href="#refsCOOKIES">[COOKIES]</a> <a
+ href="#refsRFC3629">[RFC3629]</a> <a href="#refsWSP">[WSP]</a></p></li>
- <li><p><span>Fire a simple event</span> named <code
- title="event-open">open</code> at the <code>WebSocket</code>
- object.</p>
+ <li><p><span>Fire a simple event</span> named <code title="event-open">open</code> at the
+ <code>WebSocket</code> object.</p>
</ol>
<hr>
- <p>When <i>a WebSocket message has been received</i> with type <var
- title="">type</var> and data <var title="">data</var>, the user
- agent must <span>queue a task</span> to follow these steps: <a
+ <p>When <i>a WebSocket message has been received</i> with type <var title="">type</var> and data
+ <var title="">data</var>, the user agent must <span>queue a task</span> to follow these steps: <a
href="#refsWSP">[WSP]</a></p>
<ol>
<li>
- <p>If the <code title="dom-WebSocket-readyState">readyState</code>
- attribute's value is not <code
- title="dom-WebSocket-OPEN">OPEN</code> (1), then abort these
- steps.</p>
+ <p>If the <code title="dom-WebSocket-readyState">readyState</code> attribute's value is not
+ <code title="dom-WebSocket-OPEN">OPEN</code> (1), then abort these steps.</p>
</li>
@@ -96142,35 +95736,28 @@
</li>
- <li><p>Initialize <var title="">event</var>'s <code
- title="dom-MessageEvent-origin">origin</code> attribute to the
- <span title="Unicode serialization of an origin">Unicode
- serialization</span> of the <span>origin</span> of the
- <span>URL</span> that was passed to the <code>WebSocket</code>
+ <li><p>Initialize <var title="">event</var>'s <code title="dom-MessageEvent-origin">origin</code>
+ attribute to the <span title="Unicode serialization of an origin">Unicode serialization</span> of
+ the <span>origin</span> of the <span>URL</span> that was passed to the <code>WebSocket</code>
object's constructor.</p></li>
<li>
- <p>If <var title="">type</var> indicates that the data is Text,
- then initialize <var title="">event</var>'s <code
- title="dom-MessageEvent-data">data</code> attribute to <var
+ <p>If <var title="">type</var> indicates that the data is Text, then initialize <var
+ title="">event</var>'s <code title="dom-MessageEvent-data">data</code> attribute to <var
title="">data</var>.
- <p>If <var title="">type</var> indicates that the data is Binary,
- and <code title="dom-WebSocket-binaryType">binaryType</code> is
- set to "<code title="">blob</code>", then initialize <var
- title="">event</var>'s <code
- title="dom-MessageEvent-data">data</code> attribute to a new
- <code>Blob</code> object that represents <var title="">data</var>
- as its raw data. <a href="#refsFILEAPI">[FILEAPI]</a></p>
+ <p>If <var title="">type</var> indicates that the data is Binary, and <code
+ title="dom-WebSocket-binaryType">binaryType</code> is set to "<code title="">blob</code>", then
+ initialize <var title="">event</var>'s <code title="dom-MessageEvent-data">data</code> attribute
+ to a new <code>Blob</code> object that represents <var title="">data</var> as its raw data. <a
+ href="#refsFILEAPI">[FILEAPI]</a></p>
- <p>If <var title="">type</var> indicates that the data is Binary,
- and <code title="dom-WebSocket-binaryType">binaryType</code> is
- set to "<code title="">arraybuffer</code>", then initialize <var
- title="">event</var>'s <code
- title="dom-MessageEvent-data">data</code> attribute to a new
- read-only <code>ArrayBuffer</code> object whose contents are <var
- title="">data</var>. <a
+ <p>If <var title="">type</var> indicates that the data is Binary, and <code
+ title="dom-WebSocket-binaryType">binaryType</code> is set to "<code
+ title="">arraybuffer</code>", then initialize <var title="">event</var>'s <code
+ title="dom-MessageEvent-data">data</code> attribute to a new read-only <code>ArrayBuffer</code>
+ object whose contents are <var title="">data</var>. <a
href="#refsTYPEDARRAY">[TYPEDARRAY]</a></p>
</li>
@@ -96184,26 +95771,21 @@
</ol>
- <p class="note">User agents are encouraged to check if they can
- perform the above steps efficiently before they run the task,
- picking tasks from other <span title="task queue">task queues</span>
- while they prepare the buffers if not. For example, if the <code
- title="dom-WebSocket-binaryType">binaryType</code> attribute was set
- to "<code title="">blob</code>" when the data arrived, and the user
- agent spooled all the data to disk, but just before running the
- above <span title="concept-task">task</span> for this particular
- message the script switched <code
- title="dom-WebSocket-binaryType">binaryType</code> to "<code
- title="">arraybuffer</code>", the user agent would want to page the
- data back to RAM before running this <span
- title="concept-task">task</span> so as to avoid stalling the main
- thread while it created the <code>ArrayBuffer</code> object.</p>
+ <p class="note">User agents are encouraged to check if they can perform the above steps
+ efficiently before they run the task, picking tasks from other <span title="task queue">task
+ queues</span> while they prepare the buffers if not. For example, if the <code
+ title="dom-WebSocket-binaryType">binaryType</code> attribute was set to "<code
+ title="">blob</code>" when the data arrived, and the user agent spooled all the data to disk, but
+ just before running the above <span title="concept-task">task</span> for this particular message
+ the script switched <code title="dom-WebSocket-binaryType">binaryType</code> to "<code
+ title="">arraybuffer</code>", the user agent would want to page the data back to RAM before
+ running this <span title="concept-task">task</span> so as to avoid stalling the main thread while
+ it created the <code>ArrayBuffer</code> object.</p>
<div class="example">
<p>Here is an example of how to define a handler for the <code
- title="event-message">message</code> event in the case of text
- frames:</p>
+ title="event-message">message</code> event in the case of text frames:</p>
<pre>mysocket.onmessage = function (event) {
if (event.data == 'on') {
@@ -96213,42 +95795,35 @@
}
};</pre>
- <p>The protocol here is a trivial one, with the server just sending
- "on" or "off" messages.</p>
+ <p>The protocol here is a trivial one, with the server just sending "on" or "off" messages.</p>
</div>
<hr>
- <p>When <i>the WebSocket closing handshake is started</i>, the user
- agent must <span>queue a task</span> to change the <code
- title="dom-WebSocket-readyState">readyState</code> attribute's value
- to <code title="dom-WebSocket-CLOSING">CLOSING</code> (2). (If the
- <code title="dom-WebSocket-close">close()</code> method was called,
- the <code title="dom-WebSocket-readyState">readyState</code>
- attribute's value will already be set to <code
- title="dom-WebSocket-CLOSING">CLOSING</code> (2) when this task
- runs.) <a href="#refsWSP">[WSP]</a></p>
+ <p>When <i>the WebSocket closing handshake is started</i>, the user agent must <span>queue a
+ task</span> to change the <code title="dom-WebSocket-readyState">readyState</code> attribute's
+ value to <code title="dom-WebSocket-CLOSING">CLOSING</code> (2). (If the <code
+ title="dom-WebSocket-close">close()</code> method was called, the <code
+ title="dom-WebSocket-readyState">readyState</code> attribute's value will already be set to <code
+ title="dom-WebSocket-CLOSING">CLOSING</code> (2) when this task runs.) <a
+ href="#refsWSP">[WSP]</a></p>
<hr>
- <p id="closeWebSocket">When <i>the WebSocket connection is
- closed</i>, possibly <i title="">cleanly</i>, the user agent must
- <span>queue a task</span> to run the following substeps:</p>
+ <p id="closeWebSocket">When <i>the WebSocket connection is closed</i>, possibly <i
+ title="">cleanly</i>, the user agent must <span>queue a task</span> to run the following
+ substeps:</p>
<ol>
- <li><p>Change the <code
- title="dom-WebSocket-readyState">readyState</code> attribute's
- value to <code title="dom-WebSocket-CLOSED">CLOSED</code>
- (3).</p></li>
+ <li><p>Change the <code title="dom-WebSocket-readyState">readyState</code> attribute's value to
+ <code title="dom-WebSocket-CLOSED">CLOSED</code> (3).</p></li>
- <li><p>If the user agent was required to <i>fail the WebSocket
- connection</i> or <i>the WebSocket connection is closed</i> <dfn
- title="concept-websocket-close-fail">with prejudice</dfn>,
- <span>fire a simple event</span> named <code title="">error</code>
- at the <code>WebSocket</code> object. <a
- href="#refsWSP">[WSP]</a></p></li>
+ <li><p>If the user agent was required to <i>fail the WebSocket connection</i> or <i>the WebSocket
+ connection is closed</i> <dfn title="concept-websocket-close-fail">with prejudice</dfn>,
+ <span>fire a simple event</span> named <code title="">error</code> at the <code>WebSocket</code>
+ object. <a href="#refsWSP">[WSP]</a></p></li>
<li><p>Create a <span title="concept-events-trusted">trusted</span> event that uses the
<code>CloseEvent</code> interface, with the event type <code
@@ -96265,9 +95840,8 @@
<div class="warning">
- <p>User agents must not convey any failure information to scripts
- in a way that would allow a script to distinguish the following
- situations:</p>
+ <p>User agents must not convey any failure information to scripts in a way that would allow a
+ script to distinguish the following situations:</p>
<ul>
@@ -96277,42 +95851,36 @@
<li>A server that refused the connection on the specified port.
- <li>A server that failed to correctly perform a TLS handshake
- (e.g., the server certificate can't be verified).
+ <li>A server that failed to correctly perform a TLS handshake (e.g., the server certificate
+ can't be verified).
- <li>A server that did not complete the opening handshake (e.g.
- because it was not a WebSocket server).
+ <li>A server that did not complete the opening handshake (e.g. because it was not a WebSocket
+ server).
- <li>A WebSocket server that sent a correct opening handshake, but
- that specified options that caused the client to drop the
- connection (e.g. the server specified a subprotocol that the
+ <li>A WebSocket server that sent a correct opening handshake, but that specified options that
+ caused the client to drop the connection (e.g. the server specified a subprotocol that the
client did not offer).
- <li>A WebSocket server that abruptly closed the connection after
- successfully completing the opening handshake.
+ <li>A WebSocket server that abruptly closed the connection after successfully completing the
+ opening handshake.
</ul>
- <p>In all of these cases, the <i>the WebSocket connection close
- code</i> would be 1006, as required by the WebSocket Protocol
- specification. <a href="#refsWSP">[WSP]</a></p>
+ <p>In all of these cases, the <i>the WebSocket connection close code</i> would be 1006, as
+ required by the WebSocket Protocol specification. <a href="#refsWSP">[WSP]</a></p>
- <p>Allowing a script to distinguish these cases would allow a
- script to probe the user's local network in preparation for an
- attack.</p>
+ <p>Allowing a script to distinguish these cases would allow a script to probe the user's local
+ network in preparation for an attack.</p>
- <p class="note">In particular, this means the code 1015 is not used
- by the user agent (unless the server erroneously uses it in its
- close frame, of course).</p>
+ <p class="note">In particular, this means the code 1015 is not used by the user agent (unless the
+ server erroneously uses it in its close frame, of course).</p>
</div>
<hr>
- <p>The <span>task source</span> for all <span
- title="concept-task">tasks</span> <span title="queue a
- task">queued</span> in this section is the <dfn>WebSocket task
- source</dfn>.</p>
+ <p>The <span>task source</span> for all <span title="concept-task">tasks</span> <span title="queue
+ a task">queued</span> in this section is the <dfn>WebSocket task source</dfn>.</p>
<h4>Ping and Pong frames</h4>
@@ -96452,52 +96020,40 @@
<h4>Garbage collection</h4>
- <p>A <code>WebSocket</code> object whose <code
- title="dom-WebSocket-readyState">readyState</code> attribute's value
- was set to <code title="dom-WebSocket-CONNECTING">CONNECTING</code>
- (0) as of the last time the <span>event loop</span> started
- executing a <span title="concept-task">task</span> must not be
- garbage collected if there are any event listeners registered for
- <code title="event-open">open</code> events, <code
- title="event-message">message</code> events, <code
- title="event-error">error</code> events, or <code
- title="event-socket-close">close</code> events.</p>
-
- <p>A <code>WebSocket</code> object whose <code
- title="dom-WebSocket-readyState">readyState</code> attribute's value
- was set to <code title="dom-WebSocket-OPEN">OPEN</code> (1) as of
+ <p>A <code>WebSocket</code> object whose <code title="dom-WebSocket-readyState">readyState</code>
+ attribute's value was set to <code title="dom-WebSocket-CONNECTING">CONNECTING</code> (0) as of
the last time the <span>event loop</span> started executing a <span
- title="concept-task">task</span> must not be garbage collected if
- there are any event listeners registered for <code
- title="event-message">message</code> events, <code
- title="event-error">error</code>, or <code
- title="event-socket-close">close</code> events.</p>
+ title="concept-task">task</span> must not be garbage collected if there are any event listeners
+ registered for <code title="event-open">open</code> events, <code
+ title="event-message">message</code> events, <code title="event-error">error</code> events, or
+ <code title="event-socket-close">close</code> events.</p>
- <p>A <code>WebSocket</code> object whose <code
- title="dom-WebSocket-readyState">readyState</code> attribute's value
- was set to <code title="dom-WebSocket-CLOSING">CLOSING</code> (2) as
- of the last time the <span>event loop</span> started executing a
- <span title="concept-task">task</span> must not be garbage collected
- if there are any event listeners registered for <code
- title="event-error">error</code> or <code
+ <p>A <code>WebSocket</code> object whose <code title="dom-WebSocket-readyState">readyState</code>
+ attribute's value was set to <code title="dom-WebSocket-OPEN">OPEN</code> (1) as of the last time
+ the <span>event loop</span> started executing a <span title="concept-task">task</span> must not be
+ garbage collected if there are any event listeners registered for <code
+ title="event-message">message</code> events, <code title="event-error">error</code>, or <code
title="event-socket-close">close</code> events.</p>
- <p>A <code>WebSocket</code> object with <i title="the WebSocket
- connection is established">an established connection</i> that has
- data queued to be transmitted to the network must not be garbage
- collected. <a href="#refsWSP">[WSP]</a></p>
+ <p>A <code>WebSocket</code> object whose <code title="dom-WebSocket-readyState">readyState</code>
+ attribute's value was set to <code title="dom-WebSocket-CLOSING">CLOSING</code> (2) as of the last
+ time the <span>event loop</span> started executing a <span title="concept-task">task</span> must
+ not be garbage collected if there are any event listeners registered for <code
+ title="event-error">error</code> or <code title="event-socket-close">close</code> events.</p>
- <p>If a <code>WebSocket</code> object is garbage collected while its
- connection is still open, the user agent must <i>start the
- WebSocket closing handshake</i>, with no status code<!--CLOSE
- CODE--> for the Close message. <a href="#refsWSP">[WSP]</a></p>
+ <p>A <code>WebSocket</code> object with <i title="the WebSocket connection is established">an
+ established connection</i> that has data queued to be transmitted to the network must not be
+ garbage collected. <a href="#refsWSP">[WSP]</a></p>
+ <p>If a <code>WebSocket</code> object is garbage collected while its connection is still open, the
+ user agent must <i>start the WebSocket closing handshake</i>, with no status code<!--CLOSE CODE-->
+ for the Close message. <a href="#refsWSP">[WSP]</a></p>
+
<hr>
- <p>If a user agent is to <dfn>make disappear</dfn> a
- <code>WebSocket</code> object (this happens when a
- <code>Document</code> object goes away), the user agent must follow
- the first appropriate set of steps from the following list:</p>
+ <p>If a user agent is to <dfn>make disappear</dfn> a <code>WebSocket</code> object (this happens
+ when a <code>Document</code> object goes away), the user agent must follow the first appropriate
+ set of steps from the following list:</p>
<dl class="switch">
@@ -97278,16 +96834,13 @@
<div class="impl">
- <p>Each <code>MessagePort</code> object can be entangled with
- another (a symmetric relationship). Each <code>MessagePort</code>
- object also has a <span>task source</span> called the <dfn>port
- message queue</dfn>, initially empty. A <span>port message
- queue</span> can be enabled or disabled, and is initially
- disabled. Once enabled, a port can never be disabled again (though
- messages in the queue can get moved to another queue or removed
- altogether, which has much the same effect).
- A <code>MessagePort</code> also has a <dfn>has been shipped</dfn> flag. It must initially be
- false.</p>
+ <p>Each <code>MessagePort</code> object can be entangled with another (a symmetric relationship).
+ Each <code>MessagePort</code> object also has a <span>task source</span> called the <dfn>port
+ message queue</dfn>, initially empty. A <span>port message queue</span> can be enabled or
+ disabled, and is initially disabled. Once enabled, a port can never be disabled again (though
+ messages in the queue can get moved to another queue or removed altogether, which has much the
+ same effect). A <code>MessagePort</code> also has a <dfn>has been shipped</dfn> flag. It must
+ initially be false.</p>
<p>Each <span>event loop</span> has a <span>task source</span> called the <dfn>unshipped port
message queue</dfn>. This is a virtual <span>task source</span>: it must act as if it contained
@@ -97307,15 +96860,12 @@
is true, its <span>port message queue</span> acts as a first-class <span>task source</span>,
unaffected to any <span>unshipped port message queue</span>.</p>
- <p>When the user agent is to <dfn>create a new
- <code>MessagePort</code> object</dfn> owned by a <span>script's
- global object</span> object <var title="">owner</var>, it must
- instantiate a new <code>MessagePort</code> object, and let its owner
- be <var title="">owner</var>.</p>
+ <p>When the user agent is to <dfn>create a new <code>MessagePort</code> object</dfn> owned by a
+ <span>script's global object</span> object <var title="">owner</var>, it must instantiate a new
+ <code>MessagePort</code> object, and let its owner be <var title="">owner</var>.</p>
- <p>When the user agent is to <dfn>entangle</dfn> two
- <code>MessagePort</code> objects, it must run the following
- steps:</p>
+ <p>When the user agent is to <dfn>entangle</dfn> two <code>MessagePort</code> objects, it must run
+ the following steps:</p>
<ol>
@@ -97630,33 +97180,28 @@
-->
<hr>
- <p>The <dfn title="dom-MessagePort-start"><code>start()</code></dfn>
- method must enable its port's <span>port message queue</span>, if it
- is not already enabled.</p>
+ <p>The <dfn title="dom-MessagePort-start"><code>start()</code></dfn> method must enable its port's
+ <span>port message queue</span>, if it is not already enabled.</p>
- <p>When a port's <span>port message queue</span> is enabled, the
- <span>event loop</span> must use it as one of its <span title="task
- source">task sources</span>.</p>
+ <p>When a port's <span>port message queue</span> is enabled, the <span>event loop</span> must use
+ it as one of its <span title="task source">task sources</span>.</p>
- <p class="note">If the <code>Document</code> of the port's event
- listeners' <span title="script's global object">global object</span>
- is not <span>fully active</span>, then the messages are lost.</p>
- <!-- because of the jump-to-entry-point algorithm first step -->
+ <p class="note">If the <code>Document</code> of the port's event listeners' <span title="script's
+ global object">global object</span> is not <span>fully active</span>, then the messages are
+ lost.</p> <!-- because of the jump-to-entry-point algorithm first step -->
<hr>
- <p>The <dfn title="dom-MessagePort-close"><code>close()</code></dfn>
- method, when called on a port <var title="">local port</var> that is
- entangled with another port, must cause the user agents to
- disentangle the two ports. If the method is called on a port that is
- not entangled, then the method must do nothing.</p>
+ <p>The <dfn title="dom-MessagePort-close"><code>close()</code></dfn> method, when called on a port
+ <var title="">local port</var> that is entangled with another port, must cause the user agents to
+ disentangle the two ports. If the method is called on a port that is not entangled, then the
+ method must do nothing.</p>
<hr>
- <p>The following are the <span>event handlers</span> (and their
- corresponding <span title="event handler event type">event handler
- event types</span>) that must be supported, as IDL attributes, by
- all objects implementing the <code>MessagePort</code> interface:</p>
+ <p>The following are the <span>event handlers</span> (and their corresponding <span title="event
+ handler event type">event handler event types</span>) that must be supported, as IDL attributes,
+ by all objects implementing the <code>MessagePort</code> interface:</p>
<table>
<thead>
@@ -98255,32 +97800,25 @@
<p>If the event is being fired due to an invocation of the <code
title="dom-Storage-setItem">setItem()</code> or <code
- title="dom-Storage-removeItem">removeItem()</code> methods, the
- event must have its <code title="dom-StorageEvent-key">key</code>
- attribute initialized to the name of the key in question, its <code
- title="dom-StorageEvent-oldValue">oldValue</code> attribute initialized to
- the old value of the key in question, or null if the key is newly
- added, and its <code
- title="dom-StorageEvent-newValue">newValue</code> attribute initialized to
- the new value of the key in question, or null if the key was
- removed.</p>
+ title="dom-Storage-removeItem">removeItem()</code> methods, the event must have its <code
+ title="dom-StorageEvent-key">key</code> attribute initialized to the name of the key in question,
+ its <code title="dom-StorageEvent-oldValue">oldValue</code> attribute initialized to the old value
+ of the key in question, or null if the key is newly added, and its <code
+ title="dom-StorageEvent-newValue">newValue</code> attribute initialized to the new value of the
+ key in question, or null if the key was removed.</p>
- <p>Otherwise, if the event is being fired due to an invocation of
- the <code title="dom-Storage-clear">clear()</code> method, the event
- must have its <code title="dom-StorageEvent-key">key</code>, <code
- title="dom-StorageEvent-oldValue">oldValue</code>, and <code
- title="dom-StorageEvent-newValue">newValue</code> attributes
- initialized to null.</p>
+ <p>Otherwise, if the event is being fired due to an invocation of the <code
+ title="dom-Storage-clear">clear()</code> method, the event must have its <code
+ title="dom-StorageEvent-key">key</code>, <code title="dom-StorageEvent-oldValue">oldValue</code>,
+ and <code title="dom-StorageEvent-newValue">newValue</code> attributes initialized to null.</p>
- <p>In addition, the event must have its <code
- title="dom-StorageEvent-url">url</code> attribute initialized to
- <span title="the document's address">the address of the
- document</span> whose <code>Storage</code> object was affected; and
- its <code title="dom-StorageEvent-storageArea">storageArea</code>
- attribute initialized to the <code>Storage</code> object from the
- <code>Window</code> object of the target <code>Document</code> that
- represents the same kind of <code>Storage</code> area as was
- affected (i.e. session or local).</p>
+ <p>In addition, the event must have its <code title="dom-StorageEvent-url">url</code> attribute
+ initialized to <span title="the document's address">the address of the document</span> whose
+ <code>Storage</code> object was affected; and its <code
+ title="dom-StorageEvent-storageArea">storageArea</code> attribute initialized to the
+ <code>Storage</code> object from the <code>Window</code> object of the target
+ <code>Document</code> that represents the same kind of <code>Storage</code> area as was affected
+ (i.e. session or local).</p>
<h6>Event definition</h6>
@@ -106164,51 +105702,41 @@
<ol>
- <li><p>Let <var title="">the script</var> be the <span>pending
- parsing-blocking script</span>. There is no longer a <span>pending
- parsing-blocking script</span>.</p></li>
+ <li><p>Let <var title="">the script</var> be the <span>pending parsing-blocking
+ script</span>. There is no longer a <span>pending parsing-blocking script</span>.</p></li>
- <li><p>Block the <span title="tokenization">tokenizer</span>
- for this instance of the <span>HTML parser</span>, such that
- the <span>event loop</span> will not run <span
+ <li><p>Block the <span title="tokenization">tokenizer</span> for this instance of the
+ <span>HTML parser</span>, such that the <span>event loop</span> will not run <span
title="concept-task">tasks</span> that invoke the <span
title="tokenization">tokenizer</span>.</p></li>
- <li><p>If the parser's <code>Document</code> <span>has a style
- sheet that is blocking scripts</span> or <var title="">the
- script</var>'s <span>"ready to be parser-executed"</span> flag
- is not set: <span>spin the event loop</span> until the parser's
- <code>Document</code> <span>has no style sheet that is blocking
- scripts</span> and <var title="">the script</var>'s
- <span>"ready to be parser-executed"</span> flag is
- set.</p></li>
+ <li><p>If the parser's <code>Document</code> <span>has a style sheet that is blocking
+ scripts</span> or <var title="">the script</var>'s <span>"ready to be parser-executed"</span>
+ flag is not set: <span>spin the event loop</span> until the parser's <code>Document</code>
+ <span>has no style sheet that is blocking scripts</span> and <var title="">the script</var>'s
+ <span>"ready to be parser-executed"</span> flag is set.</p></li>
- <li><p>Unblock the <span title="tokenization">tokenizer</span>
- for this instance of the <span>HTML parser</span>, such that
- <span title="concept-task">tasks</span> that invoke the <span
- title="tokenization">tokenizer</span> can again be
- run.</p></li>
+ <li><p>Unblock the <span title="tokenization">tokenizer</span> for this instance of the
+ <span>HTML parser</span>, such that <span title="concept-task">tasks</span> that invoke the
+ <span title="tokenization">tokenizer</span> can again be run.</p></li>
- <li><p>Let the <span>insertion point</span> be just before the
- <span>next input character</span>.</p></li>
+ <li><p>Let the <span>insertion point</span> be just before the <span>next input
+ character</span>.</p></li>
- <li><p>Increment the parser's <span>script nesting level</span>
- by one (it should be zero before this step, so this sets it to
- one).</p></li>
+ <li><p>Increment the parser's <span>script nesting level</span> by one (it should be zero
+ before this step, so this sets it to one).</p></li>
- <li><p><span title="execute the script block">Execute</span>
- <var title="">the script</var>.</p></li>
+ <li><p><span title="execute the script block">Execute</span> <var title="">the
+ script</var>.</p></li>
- <li><p>Decrement the parser's <span>script nesting level</span>
- by one. If the parser's <span>script nesting level</span> is
- zero (which it always should be at this point), then set the
- <span>parser pause flag</span> to false.</p>
+ <li><p>Decrement the parser's <span>script nesting level</span> by one. If the parser's
+ <span>script nesting level</span> is zero (which it always should be at this point), then set
+ the <span>parser pause flag</span> to false.</p>
- <li><p>Let the <span>insertion point</span> be undefined
- again.</p></li>
+ <li><p>Let the <span>insertion point</span> be undefined again.</p></li>
- <li><p>If there is once again a <span>pending parsing-blocking
- script</span>, then repeat these steps from step 1.</p></li>
+ <li><p>If there is once again a <span>pending parsing-blocking script</span>, then repeat
+ these steps from step 1.</p></li>
</ol>
@@ -107742,62 +107270,49 @@
<!-- this happens as part of one of the tasks that runs the parser -->
- <li><p>Set the <span>current document readiness</span> to "<code
- title="">interactive</code>" <!-- this also synchronously fires an
- event --> and the <span>insertion point</span> to
+ <li><p>Set the <span>current document readiness</span> to "<code title="">interactive</code>"
+ <!-- this also synchronously fires an event --> and the <span>insertion point</span> to
undefined.</p></li>
- <li><p>Pop <em>all</em> the nodes off the <span>stack of open
- elements</span>.</p></li>
+ <li><p>Pop <em>all</em> the nodes off the <span>stack of open elements</span>.</p></li>
- <li><p>If the <span>list of scripts that will execute when the
- document has finished parsing</span> is not empty, run these
- substeps:</p>
+ <li><p>If the <span>list of scripts that will execute when the document has finished
+ parsing</span> is not empty, run these substeps:</p>
<ol>
- <li><p><span>Spin the event loop</span> until the first
- <code>script</code> in the <span>list of scripts that will
- execute when the document has finished parsing</span> has its
- <span>"ready to be parser-executed"</span> flag set <em>and</em>
- the parser's <code>Document</code> <span>has no style sheet that
- is blocking scripts</span>.</p></li>
+ <li><p><span>Spin the event loop</span> until the first <code>script</code> in the <span>list
+ of scripts that will execute when the document has finished parsing</span> has its <span>"ready
+ to be parser-executed"</span> flag set <em>and</em> the parser's <code>Document</code>
+ <span>has no style sheet that is blocking scripts</span>.</p></li>
- <li><p><span title="execute the script block">Execute</span> the
- first <code>script</code> in the <span>list of scripts that will
- execute when the document has finished parsing</span>.</p></li>
+ <li><p><span title="execute the script block">Execute</span> the first <code>script</code> in
+ the <span>list of scripts that will execute when the document has finished
+ parsing</span>.</p></li>
- <li><p>Remove the first <code>script</code> element from the
- <span>list of scripts that will execute when the document has
- finished parsing</span> (i.e. shift out the first entry in the
+ <li><p>Remove the first <code>script</code> element from the <span>list of scripts that will
+ execute when the document has finished parsing</span> (i.e. shift out the first entry in the
list).</p></li>
- <li><p>If the <span>list of scripts that will execute when the
- document has finished parsing</span> is still not empty, repeat
- these substeps again from substep 1.</p>
+ <li><p>If the <span>list of scripts that will execute when the document has finished
+ parsing</span> is still not empty, repeat these substeps again from substep 1.</p>
</ol>
</li>
- <li><p><span>Queue a task</span> to <span>fire a simple
- event</span> that bubbles named <code
- title="event-DOMContentLoaded">DOMContentLoaded</code> at the
- <code>Document</code>.</p></li>
+ <li><p><span>Queue a task</span> to <span>fire a simple event</span> that bubbles named <code
+ title="event-DOMContentLoaded">DOMContentLoaded</code> at the <code>Document</code>.</p></li>
- <li><p><span>Spin the event loop</span> until the <span>set of
- scripts that will execute as soon as possible</span> and the
- <span>list of scripts that will execute in order as soon as
- possible</span> are empty.</p></li> <!-- this step is not redundant
- with the next one, since <script> nodes delay the load event of the
- document they are in, but they might change document between being
- added to one document's set/list and executing those scripts, so
- they might be delaying another document but still be in this
- document's set/list. -->
+ <li><p><span>Spin the event loop</span> until the <span>set of scripts that will execute as soon
+ as possible</span> and the <span>list of scripts that will execute in order as soon as
+ possible</span> are empty.</p></li> <!-- this step is not redundant with the next one, since
+ <script> nodes delay the load event of the document they are in, but they might change document
+ between being added to one document's set/list and executing those scripts, so they might be
+ delaying another document but still be in this document's set/list. -->
- <li><p><span>Spin the event loop</span> until there is nothing that
- <dfn title="delay the load event">delays the load event</dfn> in
- the <code>Document</code>.</p></li>
+ <li><p><span>Spin the event loop</span> until there is nothing that <dfn title="delay the load
+ event">delays the load event</dfn> in the <code>Document</code>.</p></li>
<li>
@@ -108972,17 +108487,14 @@
<li><code title="">-//WAPFORUM//DTD XHTML Mobile 1.0//EN</code></li>
</ul>
- <p>Furthermore, user agents should attempt to retrieve the above
- external entity's content when one of the above public identifiers
- is used, and should not attempt to retrieve any other external
+ <p>Furthermore, user agents should attempt to retrieve the above external entity's content when
+ one of the above public identifiers is used, and should not attempt to retrieve any other external
entity's content.</p>
- <p class="note">This is not strictly a <span title="willful
- violation">violation</span> of the XML specification, but it does
- contradict the spirit of the XML specification's requirements. This
- is motivated by a desire for user agents to all handle entities in
- an interoperable fashion without requiring any network access for
- handling external subsets. <a href="#refsXML">[XML]</a></p>
+ <p class="note">This is not strictly a <span title="willful violation">violation</span> of the XML
+ specification, but it does contradict the spirit of the XML specification's requirements. This is
+ motivated by a desire for user agents to all handle entities in an interoperable fashion without
+ requiring any network access for handling external subsets. <a href="#refsXML">[XML]</a></p>
<p id="scriptTagXML">When an <span>XML parser</span> creates a <code>script</code> element, it
must be marked as being <span>"parser-inserted"</span> and its <span>"force-async"</span> flag
@@ -108995,49 +108507,39 @@
<ol>
- <li><p>Block this instance of the <span>XML parser</span>, such
- that the <span>event loop</span> will not run <span
- title="concept-task">tasks</span> that invoke it.</p></li>
+ <li><p>Block this instance of the <span>XML parser</span>, such that the <span>event loop</span>
+ will not run <span title="concept-task">tasks</span> that invoke it.</p></li>
- <li><p><span>Spin the event loop</span> until the parser's
- <code>Document</code> <span>has no style sheet that is blocking
- scripts</span> and the <span>pending parsing-blocking
- script</span>'s <span>"ready to be parser-executed"</span> flag is
- set.</p></li>
+ <li><p><span>Spin the event loop</span> until the parser's <code>Document</code> <span>has no
+ style sheet that is blocking scripts</span> and the <span>pending parsing-blocking
+ script</span>'s <span>"ready to be parser-executed"</span> flag is set.</p></li>
- <li><p>Unblock this instance of the <span>XML parser</span>, such
- that <span title="concept-task">tasks</span> that invoke it can
- again be run.</p></li>
+ <li><p>Unblock this instance of the <span>XML parser</span>, such that <span
+ title="concept-task">tasks</span> that invoke it can again be run.</p></li>
- <li><p><span title="execute the script block">Execute</span> the
- <span>pending parsing-blocking script</span>.</p></li>
-
- <li><p>There is no longer a <span>pending parsing-blocking
+ <li><p><span title="execute the script block">Execute</span> the <span>pending parsing-blocking
script</span>.</p></li>
+ <li><p>There is no longer a <span>pending parsing-blocking script</span>.</p></li>
+
</ol>
- <p class="note">Since the <code
- title="dom-document-write">document.write()</code> API is not
- available for <span>XML documents</span>, much of the complexity in
- the <span>HTML parser</span> is not needed in the <span>XML
- parser</span>.</p>
+ <p class="note">Since the <code title="dom-document-write">document.write()</code> API is not
+ available for <span>XML documents</span>, much of the complexity in the <span>HTML parser</span>
+ is not needed in the <span>XML parser</span>.</p>
- <p>Certain algorithms in this specification <dfn title="feed the
- parser">spoon-feed the parser</dfn> characters one string at a
- time. In such cases, the <span>XML parser</span> must act as it
- would have if faced with a single string consisting of the
- concatenation of all those characters.</p>
+ <p>Certain algorithms in this specification <dfn title="feed the parser">spoon-feed the
+ parser</dfn> characters one string at a time. In such cases, the <span>XML parser</span> must act
+ as it would have if faced with a single string consisting of the concatenation of all those
+ characters.</p>
- <p>When an <span>XML parser</span> reaches the end of its input, it
- must <span>stop parsing</span>, following the same rules as the
- <span>HTML parser</span>. An <span>XML parser</span> can also be
- <span title="abort a parser">aborted</span>, which must again by
- done in the same way as for an <span>HTML parser</span>.</p>
+ <p>When an <span>XML parser</span> reaches the end of its input, it must <span>stop
+ parsing</span>, following the same rules as the <span>HTML parser</span>. An <span>XML
+ parser</span> can also be <span title="abort a parser">aborted</span>, which must again by done in
+ the same way as for an <span>HTML parser</span>.</p>
- <p>For the purposes of conformance checkers, if a resource is
- determined to be in <span>the XHTML syntax</span>, then it is an
- <span title="XML documents">XML document</span>.</p>
+ <p>For the purposes of conformance checkers, if a resource is determined to be in <span>the XHTML
+ syntax</span>, then it is an <span title="XML documents">XML document</span>.</p>
More information about the Commit-Watchers
mailing list