- From: CVS User ihickson <cvsmail@w3.org>
- Date: Wed, 30 Oct 2013 23:18:19 +0000
- To: public-html-commits@w3.org
Update of /sources/public/html5/workers In directory roscoe:/tmp/cvs-serv31151 Modified Files: Overview.html Log Message: The bulk of this is editorial: refactoring how scripts are defined so that all the common stuff is in a shared 'settings object' rather than being duplicated per script. But this also cleans up how postMessage() interacts with the event loop and a few other things I've since forgotten. (whatwg r8247) --- /sources/public/html5/workers/Overview.html 2013/10/23 22:07:26 1.397 +++ /sources/public/html5/workers/Overview.html 2013/10/30 23:18:19 1.398 @@ -216,7 +216,7 @@ <h1>Web Workers</h1> - <h2 class="no-num no-toc" id="editor-s-draft-23-october-2013">Editor's Draft 23 October 2013</h2> + <h2 class="no-num no-toc" id="editor-s-draft-30-october-2013">Editor's Draft 30 October 2013</h2> <dl><dt>Latest Published Version:</dt> <dd><a href="http://www.w3.org/TR/workers/">http://www.w3.org/TR/workers/</a></dd> <dt>Latest Editor's Draft:</dt> @@ -353,7 +353,7 @@ </dl><p>The W3C <a href="http://www.w3.org/2008/webapps/">Web Applications Working Group</a> is the W3C working group responsible for this specification's progress along the W3C Recommendation track. - This specification is the 23 October 2013 Editor's Draft. + This specification is the 30 October 2013 Editor's Draft. </p> @@ -405,8 +405,9 @@ <li><a href="#creating-workers"><span class="secno">4.6 </span>Creating workers</a> <ol> <li><a href="#the-abstractworker-abstract-interface"><span class="secno">4.6.1 </span>The <code>AbstractWorker</code> abstract interface</a></li> - <li><a href="#dedicated-workers-and-the-worker-interface"><span class="secno">4.6.2 </span>Dedicated workers and the <code>Worker</code> interface</a></li> - <li><a href="#shared-workers-and-the-sharedworker-interface"><span class="secno">4.6.3 </span>Shared workers and the <code>SharedWorker</code> interface</a></ol></ol></li> + <li><a href="#script-settings-for-workers"><span class="secno">4.6.2 </span>Script settings for workers</a></li> + <li><a href="#dedicated-workers-and-the-worker-interface"><span class="secno">4.6.3 </span>Dedicated workers and the <code>Worker</code> interface</a></li> + <li><a href="#shared-workers-and-the-sharedworker-interface"><span class="secno">4.6.4 </span>Shared workers and the <code>SharedWorker</code> interface</a></ol></ol></li> <li><a href="#apis-available-to-workers"><span class="secno">5 </span>APIs available to workers</a> <ol> <li><a href="#importing-scripts-and-libraries"><span class="secno">5.1 </span>Importing scripts and libraries</a></li> @@ -1408,7 +1409,7 @@ JavaScript</span> if the <span>JavaScript global environment</span> is a <span>shared worker environment</span>.</p> - <p>Shared workers receive message ports through <code title="event-WorkerGlobalScope-connect">connect</code> events on their global object for each + <p>Shared workers receive message ports through <code title="event-WorkerGlobalScope-connect">connect</code> events on their <code><a href="#sharedworkerglobalscope">SharedWorkerGlobalScope</a></code> object for each connection.</p> <p>The <dfn id="dom-sharedworkerglobalscope-name" title="dom-SharedWorkerGlobalScope-name"><code>name</code></dfn> attribute must return @@ -1479,14 +1480,15 @@ 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>Document</code>.</p> - <p>Given a <span>script's global object</span> <var title="">o</var> when creating or obtaining a + + <p>Given a <span>settings object</span> <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 + of <span>global object</span> specified by <var title="">o</var>'s. If <var title="">o</var> + specifies a <span>global object</span> that is a <code><a href="#workerglobalscope">WorkerGlobalScope</a></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 <a href="#the-worker-s-documents">the worker's - <code>Document</code>s</a>. 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> + <a href="#the-worker-s-documents">the worker's <code>Document</code>s</a> of the <span>global object</span> specified by + <var title="">o</var>. Otherwise, <var title="">o</var> specifies a <span>global object</span> that is a <code>Window</code> object, + and the relevant <code>Document</code> is just the <span>responsible document</span> specified by <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> @@ -1505,8 +1507,9 @@ <h3 id="processing-model"><span class="secno">4.4 </span>Processing model</h3> - <p>When a user agent is to <dfn id="run-a-worker">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 + + <p>When a user agent is to <dfn id="run-a-worker">run a worker</dfn> for a script with <span>URL</span> <var title="">url</var>, a <span>script settings object</span> <var title="">settings object</var>, + and an <span>origin</span> <var title="">owner origin</var>, it must run the following steps:</p> <ol><li id="worker-processing-model-top"> @@ -1519,6 +1522,9 @@ </li> + <li><p>Let <var title="">worker global scope</var> be the <span>global object</span> specified + by <var title="">settings object</var>.</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 <span title="relevant application cache">relevant application caches</span> that are @@ -1531,8 +1537,8 @@ <li> <p>Attempt to <span>fetch</span> 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 + from the <var title="">owner origin</var>, using the <span>responsible document</span> specified by <var title="">settings object</var> as the + <span>referrer source</span> (not the specified <span>API referrer source</span>!), with the <i>synchronous flag</i> set and the <i>force same-origin flag</i> set.</p> <p>If the attempt fails, then for each <code><a href="#worker">Worker</a></code> or <code><a href="#sharedworker">SharedWorker</a></code> object @@ -1560,28 +1566,17 @@ <li><!-- SCRIPT EXEC --> - <p>A new <span title="concept-script">script</span> is now created, as follows.</p> + <p>Let <var title="">script</var> be a new <span title="concept-script">script</span>.</p> - <p>Create a new <span>script execution environment</span> set up as appropriate for the - scripting language <var title="">language</var>.</p> + <p>Obtain the appropriate <span>script execution environment</span> for the scripting language + <var title="">language</var> from <var title="">settings object</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>code entry-point</span>.</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 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 base URL</span> to <var title="">url</var>.</p> + <p>Let <var title="">script</var>'s <span>settings object</span> be <var title="">settings + object</var>.</p> </li> @@ -1619,8 +1614,8 @@ <li> - <p><strong>Event loop</strong>: Create a new <span>event - loop</span>, and run it until it is destroyed.</p> + <p><strong>Event loop</strong>: Run the <span>responsible + event loop</span> specified by <var title="">settings object</var> until it is destroyed.</p> <p class="note">The handling of events or the execution of callbacks by <span title="concept-task">tasks</span> run by the <span>event loop</span> 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 @@ -1750,7 +1745,97 @@ <table><thead><tr><th><span title="event handlers">Event handler</span> <th><span>Event handler event type</span> <tbody><tr><td><dfn id="handler-abstractworker-onerror" title="handler-AbstractWorker-onerror"><code>onerror</code></dfn> <td> <code title="event-error">error</code> - </table><h4 id="dedicated-workers-and-the-worker-interface"><span class="secno">4.6.2 </span>Dedicated workers and the <code><a href="#worker">Worker</a></code> interface</h4> + </table><h4 id="script-settings-for-workers"><span class="secno">4.6.2 </span>Script settings for workers</h4> + + <p>When the user agent is required to <dfn id="set-up-a-worker-script-settings-object">set up a worker script settings object</dfn>, given a + <var title="">worker global scope</var>, it must run the following steps:</p> + + <ol><li><p>Let <var title="">inherited responsible browsing context</var> be the <span>responsible + browsing context</span> specified by the <span>incumbent script</span>'s <span>settings + object</span>.</li> + + <li><p>Let <var title="">inherited responsible document</var> be the <span>responsible + document</span> specified by the <span>incumbent script</span>'s <span>settings + object</span>.</li> + + <li><p>Let <var title="">worker event loop</var> be a newly created <span>event + loop</span>.</li> + + <li> + + <p>Let <var title="">settings object</var> be a new <span>script settings object</span> whose + algorithms are defined as follows:</p> + + <dl><dt>The <span title="script execution environment">script execution environments</span></dt> + <dd> + + <p>When the <span>script settings object</span> is created, for each language supported by the + user agent, create an appropriate execution environment as defined by the relevant + specification.</p> + + <p>When a <span>script execution environment</span> is needed, return the appropriate one from + those created when the <span>script settings object</span> was created.</p> + + <p class="note">Currently, workers only support JavaScript, so only a JavaScript execution + environment is actually needed here.</p> + + </dd> + + <dt>The <span>global object</span></dt> + <dd> + + <p>Return <var title="">worker global scope</var>.</p> + + </dd> + + <dt>The <span>responsible browsing context</span></dt> + <dd> + + <p>Return <var title="">inherited responsible browsing context</var>.</p> + + </dd> + + <dt>The <span>responsible document</span></dt> + <dd> + + <p>Return <var title="">inherited responsible document</var>.</p> + + </dd> + + <dt>The <span>responsible event loop</span></dt> + <dd> + + <p>Return <var title="">worker event loop</var>.</p> + + </dd> + + <dt>The <span>API referrer source</span></dt> + <dd> + + <p>Return the <code>Document</code> with which the <code>Window</code> is currently + associated.</p> + + </dd> + + <dt>The <span>API URL character encoding</span></dt> + <dd> + + <p>Return UTF-8.</p> + + </dd> + + <dt>The <span>API base URL</span></dt> + <dd> + + <p>Return <var title="">worker URL</var>.</p> + + </dd> + + </dl></li> + + <li><p>Return <var title="">settings object</var>.</li> + + </ol><h4 id="dedicated-workers-and-the-worker-interface"><span class="secno">4.6.3 </span>Dedicated workers and the <code><a href="#worker">Worker</a></code> interface</h4> <pre class="idl">[<a href="#dom-worker" title="dom-Worker">Constructor</a>(DOMString scriptURL)] interface <dfn id="worker">Worker</dfn> : <span>EventTarget</span> { @@ -1800,17 +1885,21 @@ the request violates a policy decision (e.g. if the user agent is configured to not allow the page to start dedicated workers).</li> + <li><p><span title="resolve a url">Resolve</span> the <var title="">scriptURL</var> argument - relative to the <span>entry script</span>'s <span title="script's base URL">base URL</span>, when - the method is invoked.</li> + relative to the <span>API base URL</span> specified by the <span>entry script</span>'s <span>settings object</span> when + the method was invoked.</li> <li><p>If this fails, throw a <code>SyntaxError</code> exception and abort these steps.</li> + <li><p>Let <var title="">worker URL</var> be the resulting <span>absolute URL</span>.</li> + <li> - <p>If the <span title="concept-url-scheme">scheme</span> component of the resulting <span>parsed - URL</span> is not "<code title="data-protocol">data</code>", and the <span>origin</span> of the - resulting <span>absolute URL</span> is not the <span title="same origin">same</span> as the + + <p>If the <span title="concept-url-scheme">scheme</span> component of <var title="">worker URL</var> + is not "<code title="data-protocol">data</code>", and the <span>origin</span> of <var title="">worker URL</var> + is not the <span title="same origin">same</span> as the origin of the <span>entry script</span>, then throw a <code>SecurityError</code> exception and abort these steps.</p> @@ -1825,16 +1914,22 @@ origin</a> is the origin of the <span>entry script</span>. Let <var title="">worker global scope</var> be this new object.</li> + <li><p><a href="#set-up-a-worker-script-settings-object">Set up a worker script settings object</a> with <var title="">worker global + scope</var>, and let <var title="">settings object</var> be the result.</li> + <li><p>Create a new <code><a href="#worker">Worker</a></code> object, associated with <var title="">worker global scope</var>. Let <var title="">worker</var> be this new object.</li> - <li><p><span>Create a new <code>MessagePort</code> object</span> owned by the <span title="script's global object">global object</span> of the <span>incumbent script</span>. Let + + <li><p><span>Create a new <code>MessagePort</code> object</span> whose <span title="concept-port-owner">owner</span> + is the <span>settings object</span> of the <span>incumbent script</span>. Let this be the <var title="">outside port</var>.</li> <li><p>Associate the <var title="">outside port</var> with <var title="">worker</var>.</li> - <li><p><span>Create a new <code>MessagePort</code> object</span> owned by <var title="">worker - global scope</var>. Let <var title="">inside port</var> be this new object.</li> + + <li><p><span>Create a new <code>MessagePort</code> object</span> whose <span title="concept-port-owner">owner</span> is <var title="">script settings</var> + Let <var title="">inside port</var> be this new object.</li> <li><p>Associate <var title="">inside port</var> with <var title="">worker global scope</var>.</li> @@ -1850,8 +1945,9 @@ <li> + <p>Let <var title="">docs</var> be the <a href="#list-of-relevant-document-objects-to-add">list of relevant <code>Document</code> objects to - add</a> given the <span title="script's global object">global object</span> of the + add</a> given the <span>settings object</span> of the <span>incumbent script</span>.</p> </li> @@ -1866,25 +1962,24 @@ <li> - <p>If the <span title="script's global object">global object</span> of the <span>incumbent - script</span> is a <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> object (i.e. we are creating a nested worker), + + <p>If the <span>global object</span> specified by the <span>incumbent + script</span>'s <span>settings object</span> is a <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> object (i.e. we are creating a nested worker), add <var title="">worker global scope</var> to the list of <a href="#the-worker-s-workers">the worker's workers</a> of - the <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> object that is the <span title="script's global - object">global object</span> of the <span>incumbent script</span>.</p> + the <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> object that is the <span>global object</span> of the <span>incumbent script</span>'s <span>settings object</span>.</p> </li> <li> - <p><a href="#run-a-worker">Run a worker</a> for the resulting <span>absolute URL</span>, with the - <span>script's browsing context</span> of the <span>incumbent script</span> as the <var title="">owner browsing context</var>, with the <span>script's document</span> of the - <span>incumbent script</span> as the <var title="">owner document</var>, with the - <span>origin</span> of the <span>entry script</span> as the <var title="">owner origin</var>, - and with <var title="">worker global scope</var> as the global scope.</p> + <p><a href="#run-a-worker">Run a worker</a> for the script with <span>URL</span> <var title="">worker + URL</var>, the <span>script settings object</span> <var title="">settings object</var>, and the + <span>origin</span> of the <span>entry script</span> as the <var title="">owner + origin</var>.</p> </li> - </ol><h4 id="shared-workers-and-the-sharedworker-interface"><span class="secno">4.6.3 </span>Shared workers and the <code><a href="#sharedworker">SharedWorker</a></code> interface</h4> + </ol><h4 id="shared-workers-and-the-sharedworker-interface"><span class="secno">4.6.4 </span>Shared workers and the <code><a href="#sharedworker">SharedWorker</a></code> interface</h4> <pre class="idl">[<a href="#dom-sharedworker" title="dom-SharedWorker">Constructor</a>(DOMString scriptURL, optional DOMString name)] interface <dfn id="sharedworker">SharedWorker</dfn> : <span>EventTarget</span> { @@ -1931,7 +2026,7 @@ <li> <p>Let <var title="">docs</var> be the <a href="#list-of-relevant-document-objects-to-add">list of relevant <code>Document</code> objects to - add</a> given the <span title="script's global object">global object</span> of the + add</a> given the <span>settings object</span> of the <span>incumbent script</span>.</p> </li> @@ -1943,7 +2038,9 @@ <ol><li><p>Create a new <code><a href="#sharedworker">SharedWorker</a></code> object, which will shortly be associated with a <code><a href="#sharedworkerglobalscope">SharedWorkerGlobalScope</a></code> object. Let this <code><a href="#sharedworker">SharedWorker</a></code> object be <var title="">worker</var>.</li> - <li><p><span>Create a new <code>MessagePort</code> object</span> owned by the <span title="script's global object">global object</span> of the <span>incumbent script</span>. Let + + <li><p><span>Create a new <code>MessagePort</code> object</span> whose <span title="concept-port-owner">owner</span> + is the <span>settings object</span> of the <span>incumbent script</span>. Let this be the <var title="">outside port</var>.</li> <li><p>Assign <var title="">outside port</var> to the <code title="dom-SharedWorker-port"><a href="#dom-sharedworker-port">port</a></code> attribute of <var title="">worker</var>.</li> @@ -1988,7 +2085,12 @@ <li><p>Associate <var title="">worker</var> with <var title="">worker global scope</var>.</li> - <li><p><span>Create a new <code>MessagePort</code> object</span> owned by <var title="">worker global scope</var>. Let this be the <var title="">inside port</var>.</li> + <li><p>Let <var title="">settings object</var> be the <span>script settings object</span> + whose <span>global object</span> is <var title="">worker global scope</var>.</li> + + + <li><p><span>Create a new <code>MessagePort</code> object</span> whose <span title="concept-port-owner">owner</span> + is <var title="">settings object</var>. Let this be the <var title="">inside port</var>.</li> <li><p><span>Entangle</span> <var title="">outside port</var> and <var title="">inside port</var>.</li> @@ -2012,11 +2114,12 @@ <li> - <p>If the <span title="script's global object">global object</span> of the <span>incumbent - script</span> is a <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> object, add <var title="">worker global + + <p>If the <span>global object</span> specified by the <span>incumbent + script</span>'s <span>settings object</span> is a <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> object, add <var title="">worker global scope</var> to the list of <a href="#the-worker-s-workers">the worker's workers</a> of the - <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> object that is the <span title="script's global - object">global object</span> of the <span>incumbent script</span>.</p> + <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> object that is the <span>global + object</span> specified by the <span>incumbent script</span>'s <span>settings object</span>.</p> </li> @@ -2024,17 +2127,23 @@ </ol></li> + <!-- OTHERWISE: --> + <li><p>Create a new <code><a href="#sharedworkerglobalscope">SharedWorkerGlobalScope</a></code> object whose <a href="#worker-origin">worker origin</a> is the origin of the <span>entry script</span>. Let <var title="">worker global scope</var> be this new object.</li> [86 lines skipped]
Received on Wednesday, 30 October 2013 23:18:25 UTC