- From: poot <cvsmail@w3.org>
- Date: Thu, 28 May 2009 16:02:18 +0900 (JST)
- To: public-html-diffs@w3.org
Big changes to Workers and SharedWorkers to make their lifetime model
easier. Move 'close' events to v2. Also, fix some omissions and xref
problems that I ran across. (whatwg r3143)
Diffs for this change per section:
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#permissible-worker
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#dom-workerglobalscope-self
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#base-urls-and-origins-of-workers
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#dom-sharedworker
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#add-a-document-to-the-worker-s-documents
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#editor-s-draft-date-1-january-1970
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#handler-abstractworker-onerror
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#dom-dedicatedworkerglobalscope-postmessage
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#terminate-a-worker
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#dom-sharedworkerglobalscope-name
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#dom-worker
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#dedicated-workers-and-the-worker-interface
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#dom-workerglobalscope-location
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#handler-sharedworkerglobalscope-onconnect
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#kill-a-worker
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#active-needed-worker
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#dedicated-workers-and-the-dedicatedworkerglobalscope-interface
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#worker
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#dom-sharedworkerglobalscope-applicationcache
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#handler-dedicatedworkerglobalscope-onmessage
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#suspendable-worker
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#protected-worker
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#creating-workers
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#status-of-this-document
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#the-worker-s-documents
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#the-global-scope
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#processing-model
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#fire-a-worker-error-event
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#the-worker-s-ports-0
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#dom-errorevent-lineno
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#list-of-relevant-document-objects-to-add
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#runtime-script-errors
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#dom-workerglobalscope-close
http://people.w3.org/mike/diffs/html5/workers/Overview.1.123.html#handler-workerglobalscope-onerror
http://people.w3.org/mike/diffs/html5/workers/Overview.diff.html
http://dev.w3.org/cvsweb/html5/workers/Overview.html?r1=1.122&r2=1.123&f=h
http://html5.org/tools/web-apps-tracker?from=3142&to=3143
===================================================================
RCS file: /sources/public/html5/workers/Overview.html,v
retrieving revision 1.122
retrieving revision 1.123
diff -u -d -r1.122 -r1.123
--- Overview.html 23 May 2009 09:09:24 -0000 1.122
+++ Overview.html 28 May 2009 07:01:53 -0000 1.123
@@ -151,7 +151,7 @@
<h1>Web Workers</h1>
<!--ZZZ:-->
<!--<h2 class="no-num no-toc">W3C Working Draft 23 April 2009</h2>-->
- <h2 class="no-num no-toc" id="editor-s-draft-date-1-january-1970">Editor's Draft 23 May 2009</h2>
+ <h2 class="no-num no-toc" id="editor-s-draft-date-1-january-1970">Editor's Draft 28 May 2009</h2>
<!--:ZZZ-->
<dl><!-- ZZZ: update the month/day (twice), (un)comment out
<dt>This Version:</dt>
@@ -219,7 +219,7 @@
specification's progress along the W3C Recommendation track.
<!--ZZZ:-->
<!--This specification is the 23 April 2009 Working Draft.-->
- This specification is the 23 May 2009 Editor's Draft.
+ This specification is the 28 May 2009 Editor's Draft.
<!--:ZZZ-->
</p><!-- UNDER NO CIRCUMSTANCES IS THE PRECEDING PARAGRAPH TO BE REMOVED OR EDITED WITHOUT TALKING TO IAN FIRST --><!-- relationship to other work (required) --><p>This specification is also being produced by the <a href="http://www.whatwg.org/">WHATWG</a>. The two specifications are
identical from the table of contents onwards.</p><!-- UNDER NO CIRCUMSTANCES IS THE FOLLOWING PARAGRAPH TO BE REMOVED OR EDITED WITHOUT TALKING TO IAN FIRST --><!-- UNDER NO CIRCUMSTANCES IS THE PRECEDING PARAGRAPH TO BE REMOVED OR EDITED WITHOUT TALKING TO IAN FIRST --><!-- context and rationale (required) --><p>This specification is intended to specify a part of the Web
@@ -921,9 +921,6 @@
var s = e.data;
postMessage(_encrypt(key, s));
}
- e.ports[0].onclose = function (e) {
- close();
- }
}
function _encrypt(k, s) {
@@ -934,9 +931,6 @@
var s = e.data;
postMessage(_decrypt(key, s));
}
- e.ports[0].onclose = function (e) {
- close();
- }
}
function _decrypt(k, s) {
@@ -1006,35 +1000,37 @@
// also implements everything on <a href="#workerutils">WorkerUtils</a>
void <a href="#dom-workerglobalscope-close" title="dom-WorkerGlobalScope-close">close</a>();
- attribute <span>EventListener</span> <a href="#handler-workerglobalscope-onclose" title="handler-WorkerGlobalScope-onclose">onclose</a>;
- attribute <span>EventListener</span> <a href="#handler-workerglobalscope-onerror" title="handler-WorkerGlobalScope-onerror">onerror</a>;
+<!-- v2-onclose attribute <span>EventListener</span> <span title="handler-WorkerGlobalScope-onclose">onclose</span>;
+--> attribute <span>EventListener</span> <a href="#handler-workerglobalscope-onerror" title="handler-WorkerGlobalScope-onerror">onerror</a>;
};</pre><p>Objects implementing the <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> interface
must also implement the <code>EventTarget</code> interface.<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>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 <span>absolute URL</span> of the script
- that was used to initialize the worker.<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:<ol><li><p><span>Queue a task</span> to <span>fire a simple
+ that was used to initialize the worker.<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):<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>
+
+<!-- v2-onclose
+ <li><p><span>Queue a task</span> to <span>fire a simple
event</span> called <code title="event-close">close</code> at the
- <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> object.</li>
+ <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>
+ true. (This prevents any further tasks from being queued.)</li>
- <li><p>For each <code>MessagePort</code> object that is entangled
- with another port and that has one (but only one) port whose owner
- is the <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> object on which the method
- was invoked (this would include, for instance, the implicit port in
- used for dedicated workers), disentangle the two ports.</li>
+ <li><p>Disentangle all the ports in the list of <a href="#the-worker-s-ports-0">the worker's
+ ports</a>.</li>
</ol><p>The following are the <span>event handler attributes</span> (and their corresponding <span title="event handler event type">event handler event types</span>)
that must be supported, as DOM attributes, by objects implementing
the <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> interface:<table><thead><tr><th><span title="event handler attributes">event handler attribute</span> <th><span>Event handler event type</span>
- <tbody><tr><td><dfn id="handler-workerglobalscope-onclose" title="handler-WorkerGlobalScope-onclose"><code>onclose</code></dfn> <td> <code title="event-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>
+ <tbody><!-- v2-onclose <tr><td><dfn title="handler-WorkerGlobalScope-onclose"><code>onclose</code></dfn> <td> <code title="event-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>
</table><h4 id="dedicated-workers-and-the-dedicatedworkerglobalscope-interface"><span class="secno">4.1.2 </span>Dedicated workers and the <code><a href="#dedicatedworkerglobalscope">DedicatedWorkerGlobalScope</a></code> interface</h4><!-- the XXX below is for collapsing this interface onto WorkerGlobalScope so it looks like just one interface - the inheritance is a spec fiction only --><pre class="idl">[NoInterfaceObject, XXX] interface <dfn id="dedicatedworkerglobalscope">DedicatedWorkerGlobalScope</dfn> : <a href="#workerglobalscope">WorkerGlobalScope</a> {
void <a href="#dom-dedicatedworkerglobalscope-postmessage" title="dom-DedicatedWorkerGlobalScope-postMessage">postMessage</a>(in any message, [Optional] in <span>MessagePortArray</span> ports);<!--
<span>MessagePort</span> <span title="dom-DedicatedWorkerGlobalScope-startConversation">startConversation</span>(in any message);-->
@@ -1051,9 +1047,11 @@
<code><a href="#dedicatedworkerglobalscope">DedicatedWorkerGlobalScope</a></code> objects must act as if, when
invoked, it<!--/they (startConversation)--> immediately invoked the
method of the same name on the port, with the same arguments, and
- returned the same return value.<p>The following are the <span>event handler attributes</span> (and their corresponding <span title="event handler event type">event handler event types</span>)
- that must be supported, as DOM attributes, by objects implementing
- the <code><a href="#dedicatedworkerglobalscope">DedicatedWorkerGlobalScope</a></code> interface:<table><thead><tr><th><span title="event handler attributes">event handler attribute</span> <th><span>Event handler event type</span>
+ returned the same return value.<p>The following are the <span>event handler attributes</span> (and
+ their corresponding <span title="event handler event type">event
+ handler event types</span>) that must be supported, as DOM
+ attributes, by objects implementing the
+ <code><a href="#dedicatedworkerglobalscope">DedicatedWorkerGlobalScope</a></code> interface:<table><thead><tr><th><span title="event handler attributes">event handler attribute</span> <th><span>Event handler event type</span>
<tbody><tr><td><dfn id="handler-dedicatedworkerglobalscope-onmessage" title="handler-DedicatedWorkerGlobalScope-onmessage"><code>onmessage</code></dfn> <td> <code title="event-message">message</code>
</table><p>For the purposes of the <span>offline application cache</span>
networking model, a dedicated worker is an extension of the
@@ -1067,15 +1065,17 @@
<code><a href="#sharedworkerglobalscope">SharedWorkerGlobalScope</a></code> object was created by the
"<a href="#run-a-worker">run a worker</a>" algorithm. Its value represents the name
that can be used to obtain a reference to the worker using the
- <code><a href="#sharedworker">SharedWorker</a></code> constructor.<p>The following are the <span>event handler attributes</span> (and their corresponding <span title="event handler event type">event handler event types</span>)
- that must be supported, as DOM attributes, by objects implementing
- the <code><a href="#sharedworkerglobalscope">SharedWorkerGlobalScope</a></code> interface:<table><thead><tr><th><span title="event handler attributes">event handler attribute</span> <th><span>Event handler event type</span>
+ <code><a href="#sharedworker">SharedWorker</a></code> constructor.<p>The following are the <span>event handler attributes</span> (and
+ their corresponding <span title="event handler event type">event
+ handler event types</span>) that must be supported, as DOM
+ attributes, by objects implementing the
+ <code><a href="#sharedworkerglobalscope">SharedWorkerGlobalScope</a></code> interface:<table><thead><tr><th><span title="event handler attributes">event handler attribute</span> <th><span>Event handler event type</span>
<tbody><tr><td><dfn id="handler-sharedworkerglobalscope-onconnect" title="handler-SharedWorkerGlobalScope-onconnect"><code>onconnect</code></dfn> <td> <code title="event-connect">connect</code>
</table><p>For the purposes of the <span>offline application cache</span>
networking model, a shared worker is its own <span>cache
host</span>. The <a href="#run-a-worker">run a worker</a> algorithm takes care of
associating the worker with an <span>application cache</span>.<p class="note">The <dfn id="dom-sharedworkerglobalscope-applicationcache" title="dom-SharedWorkerGlobalScope-applicationCache"><code>applicationCache</code></dfn>
- returns the <code>ApplicationCache</code> object for the
+ attribute returns the <code>ApplicationCache</code> object for the
worker.</p><!-- normative conf criteria is in the appcache section
--><h3 id="base-urls-and-origins-of-workers"><span class="secno">4.2 </span>Base URLs and origins of workers</h3><p>Both the <span>origin</span> and <span>effective script
origin</span> of scripts running in workers are the
@@ -1174,56 +1174,42 @@
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 <a href="#dedicatedworkerglobalscope" title="DedicatedWorkerGlobalScope">dedicated workers</a>.<hr><p>A worker is said to be a <dfn id="permissible-worker">permissible worker</dfn> if
- either:<ul><li>at some point past or present a <code>MessagePort</code> owned
- by the worker was entangled with a <code>MessagePort</code> <var title="">p</var> whose owner is a <code>Window</code> object whose
- <span>active document</span> is the <code>Document</code> that was
- that <span>browsing context</span>'s <span>active document</span>
- when <var title="">p</var> was created, and that
- <code>Document</code> is <span>fully active</span>, or</li>
-
- <li>at some point past or present a <code>MessagePort</code> owned
- by the worker was entangled with a <code>MessagePort</code> owned
- by another worker that is currently a <a href="#permissible-worker">permissible
- worker</a>.</li>
-
- </ul><hr><p>A worker is said to be a <dfn id="protected-worker">protected worker</dfn> if
- either:<ul><li>it has outstanding timers, database transactions, or network
- connections, and is a <a href="#permissible-worker">permissible worker</a>, or</li>
-
- <li>there is a <a href="#protected-worker">protected worker</a> that at some point
- past or present owned a <code>MessagePort</code> that was entangled
- with a <code>MessagePort</code> owned by this worker.</li>
-
- </ul><hr><p>A worker is said to be an <dfn id="active-needed-worker">active needed worker</dfn> if either:
-
- <ul><li>the worker is a <a href="#protected-worker">protected worker</a>, or</li>
-
- <li>at least one of the <a href="#the-worker-s-ports-0">the worker's ports</a> is
- entangled with a <code>MessagePort</code> <var title="">p</var>
- whose owner is a <code>Window</code> object whose <span>active
- document</span> is the <code>Document</code> that was that
- <span>browsing context</span>'s <span>active document</span> when
- that <code>MessagePort</code> <var title="">p</var> was created,
- and that <code>Document</code> is <span>fully active</span>,
- or</li>
-
- <li>at least one of the <a href="#the-worker-s-ports-0">the worker's ports</a> has an
- entangled <code>MessagePort</code> owned by a
- <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> object that is itself an
- <a href="#active-needed-worker">active needed worker</a>.</li>
-
- </ul><hr><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 either:<ul><li>at least one of the <a href="#the-worker-s-ports-0">the worker's ports</a> has an
- entangled <code>MessagePort</code> owned by a <code>Window</code>
- object, or</li>
-
- <li>at least one of the <a href="#the-worker-s-ports-0">the worker's ports</a> has an
- entangled <code>MessagePort</code> owned by a
- <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> object that is itself a <span>needed
- worker</span>.</li>
-
- </ul><h3 id="processing-model"><span class="secno">4.6 </span>Processing model</h3><p>When a user agent is to <dfn id="run-a-worker">run a worker</dfn> for a script with
+ <code>MessagePort</code> in the case of <a href="#dedicatedworkerglobalscope" title="DedicatedWorkerGlobalScope">dedicated workers</a>.<p>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>Whenever a <code>Document</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
+ port in the list of <a href="#the-worker-s-ports-0">the worker's ports</a> that is
+ entangled with a second port <var title="">p</var> whose owner is a
+ <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> object 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>Document</code> object is <span title="discard a
+ Document">discarded</span>, 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>Given a <span>script's global scope</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 (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>.<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>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-0">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>A worker is said to be an <dfn id="active-needed-worker">active needed worker</dfn> if any
+ of the <code>Document</code> objects in <a href="#the-worker-s-documents">the worker's
+ <code>Document</code>s</a> are <span>fully active</span>.<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>.<h3 id="processing-model"><span class="secno">4.6 </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 browsing context <var title="">owner browsing context</var>, and with global scope <var title="">worker global scope</var>, it must run the following
steps:<ol><li>
@@ -1287,18 +1273,20 @@
<p>Set the <span>script's base URL</span> to <var title="">url</var>.</p>
- <p>Create a new <span>script group</span> and add the <span title="concept-script">script</span> to it.</p>
-
</li>
<li>
<p><strong>Closing orphan workers</strong>: Start monitoring the
- worker such that as soon as it stops being either an <a href="#active-needed-worker">active
- needed worker</a> or a <a href="#suspendable-worker">suspendable 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 and <span title="queue a task">a task is queued</span> to
- <span>fire a simple event</span> called <code title="event-close">close</code> at <var title="">worker global
- scope</var>.</p>
+ worker such that no sooner than it stops being either an
+ <a href="#active-needed-worker">active needed 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> called <code
+ title="event-close">close</code> at <var title="">worker global
+ scope</var>-->.</p>
</li>
@@ -1378,51 +1366,70 @@
<li>
- <p>Freeze the <span>script group</span>.</p>
+ <p>If there are any outstanding transactions that have callbacks
+ that involve <span title="concept-script">scripts</span> whose
+ <span title="script's global object">global object</span> is the
+ <var title="">worker global scope</var>, roll them back (without
+ invoking any of the callbacks).</p>
- <p class="note">This kills timers, database transactions, etc.</p>
+ </li>
+
+ <li>
+
+ <p>Empty the <var title="">worker global scope</var>'s <span>list
+ of active timeouts</span> and its <span>list of active
+ intervals</span>.</p>
</li>
+<!-- v2-onclose
<li>
- <p>For each <code><a href="#worker">Worker</a></code> or <code><a href="#sharedworker">SharedWorker</a></code>
+ <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>
called <code title="event-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):<ol><li><p>If the worker's <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> object's
- <a href="#dom-workerglobalscope-closing" title="dom-WorkerGlobalScope-closing">closing</a> flag is
+ "<a href="#run-a-worker">run a worker</a>" processing model defined above):<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> called <code title="event-close">close</code> at the
- worker's <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> object.</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
+ 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>Wait a user-agent-defined amount of time. If the "<a href="#run-a-worker">run
- a worker</a>" processing model defined above immediately starts
- running event listeners registered for the <code title="event-close">close</code> event, this time should not be
- zero — the idea is that the <code title="event-close">close</code> event can be used to clean up
- when shutting down unexpectedly.</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-close">close</code> event, this time should not be
+ zero — the idea is that the <code
+ title="event-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> other than the <code title="event-close">close</code> event that this algorithm just
- added, discard them without processing them.</li>
+ queue">task queues</span><!-- v2-onclose other than the <code
+ title="event-close">close</code> event that this algorithm just
+ added-->, discard them without processing them.</li>
+<!-- v2-onclose
<li><p>If the <code title="event-close">close</code> event that
this algorithm just queued hasn't yet been dispatched, then abort
- the script currently running in the worker.</li>
+ 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 (if any
- script is running, then it will be a handler for the <code title="event-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-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
@@ -1450,15 +1457,15 @@
</ol><h3 id="runtime-script-errors"><span class="secno">4.7 </span>Runtime script errors</h3><p>Whenever a runtime script error occurs in one of the worker's
scripts, if the error did not occur while handling a previous script
- error, the user agent must <span>queue a task</span> to <span>fire a
- simple event</span> called <code title="event-error">error</code> at
- the <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> object.<p>For shared workers, if the error is still <i title="">not
- handled</i> afterwards, or if the error occured while handling a
- previous script error, the error should be reported to the user.<p>For dedicated workers, if the error is still <i title="">not
- handled</i> afterwards, or if the error occured while handling a
- previous script error, the user agent must further <span>queue a
- task</span> to <a href="#fire-a-worker-error-event">fire a worker error event</a> at the
- <code><a href="#worker">Worker</a></code> object associated with the worker.<p>When the user agent is to <dfn id="fire-a-worker-error-event">fire a worker error event</dfn> at
+ error, the user agent must <span>report the error</span> using the
+ <code><a href="#workerglobalscope">WorkerGlobalScope</a></code> object's <code title="handler-WorkerGlobalScope-onerror"><a href="#handler-workerglobalscope-onerror">onerror</a></code>
+ attribute.<p>For shared workers, if the error is still <i title="concept-error-nothandled">not handled</i> afterwards, or if
+ the error occured while handling a previous script error, the error
+ should be reported to the user.<p>For dedicated workers, if the error is still <i title="concept-error-nothandled">not handled</i> afterwards, or if
+ the error occured while handling a previous script error, the user
+ agent must <span>queue a task</span> to <a href="#fire-a-worker-error-event">fire a worker error
+ event</a> at the <code><a href="#worker">Worker</a></code> object associated with the
+ worker.<p>When the user agent is to <dfn id="fire-a-worker-error-event">fire a worker error event</dfn> at
a <code><a href="#worker">Worker</a></code> object, it must dispatch an event that uses
the <code><a href="#errorevent">ErrorEvent</a></code> interface, with the name <code title="event-error">error</code>, that doesn't bubble and is
cancelable, with its <code title="dom-ErrorEvent-message"><a href="#dom-errorevent-message">message</a></code>, <code title="dom-ErrorEvent-filename"><a href="#dom-errorevent-filename">filename</a></code>, and <code title="dom-ErrorEvent-lineno"><a href="#dom-errorevent-lineno">lineno</a></code> attributes set
@@ -1484,13 +1491,13 @@
attribute represents the line number where the error occured in the
script.<h3 id="creating-workers"><span class="secno">4.8 </span>Creating workers</h3><h4 id="the-abstractworker-abstract-interface"><span class="secno">4.8.1 </span>The <code><a href="#abstractworker">AbstractWorker</a></code> abstract interface</h4><pre class="idl">interface <dfn id="abstractworker">AbstractWorker</dfn> {
attribute <span>EventListener</span> <a href="#handler-abstractworker-onerror" title="handler-AbstractWorker-onerror">onerror</a>;
- attribute <span>EventListener</span> <a href="#handler-abstractworker-onclose" title="handler-AbstractWorker-onclose">onclose</a>;
+<!-- v2-onclose attribute <span>EventListener</span> <span title="handler-AbstractWorker-onclose">onclose</span>; -->
};</pre><p>Objects implementing the <code><a href="#abstractworker">AbstractWorker</a></code> interface
must also implement the <code>EventTarget</code> interface.<p>The following are the <span>event handler attributes</span> (and their corresponding <span title="event handler event type">event handler event types</span>)
that must be supported, as DOM attributes, by objects implementing
the <code><a href="#abstractworker">AbstractWorker</a></code> interface:<table><thead><tr><th><span title="event handler attributes">event handler attribute</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>
- <tr><td><dfn id="handler-abstractworker-onclose" title="handler-AbstractWorker-onclose"><code>onclose</code></dfn> <td> <code title="event-close">close</code>
+<!-- v2-onclose <tr><td><dfn title="handler-AbstractWorker-onclose"><code>onclose</code></dfn> <td> <code title="event-close">close</code> -->
</table><h4 id="dedicated-workers-and-the-worker-interface"><span class="secno">4.8.2 </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>(in DOMString scriptURL)]
interface <dfn id="worker">Worker</dfn> : <a href="#abstractworker">AbstractWorker</a> {
void <a href="#dom-worker-terminate" title="dom-Worker-terminate">terminate</a>();
@@ -1524,8 +1531,9 @@
<li><p>If the <span>origin</span> of the resulting <span>absolute
URL</span> is not the <span title="same origin">same</span> as the
- origin of the script that invoked the constructor, then throw a
- <span>security exception</span>.</li>
+ origin of the <span title="concept-script">script</span> that
+ invoked the constructor, then throw a <span>security
+ exception</span>.</li>
<li><p><span>Create a new <code><a href="#dedicatedworkerglobalscope">DedicatedWorkerGlobalScope</a></code>
object</span>. Let <var title="">worker global scope</var> be this
@@ -1535,8 +1543,9 @@
<var title="">worker global scope</var>. Let <var title="">worker</var> be this new object.</li>
<li><p><span>Create a <code>MessagePort</code> object</span> owned
- by the <span>script execution context</span> of the script that
- invoked the method. Let this be the <var title="">outside
+ by the <span title="script's global scope">global scope</span> of
+ the <span title="concept-script">script</span> that invoked the
+ constructor. 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>
@@ -1560,6 +1569,23 @@
<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 scope">global scope</span> of the <span title="concept-script">script</span> that invoked the
+ constructor.</p>
+
+ </li>
+
+ <li>
+
+ <p><a href="#add-a-document-to-the-worker-s-documents" title="add a document to the worker's documents">Add to
+ <var title="">worker global scope</var>'s list of <span>the
+ worker's <code>Document</code>s</span></a> the
+ <code>Document</code> objects in <var title="">docs</var>.</p>
+
+ </li>
+
+ <li>
+
<p><a href="#run-a-worker">Run a worker</a> for the resulting <span>absolute
URL</span>, with the <span>script browsing context</span> of the
script that invoked the method as the <var title="">owner browsing
@@ -1588,16 +1614,24 @@
<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 scope">global scope</span> of the <span title="concept-script">script</span> that invoked the
+ constructor.</p>
+
+ </li>
+
+ <li>
+
<p>Execute the following substeps atomically:</p>
<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 <code>MessagePort</code> object</span> owned
- by the <span>script execution context</span> of the script that
- invoked the method. Let this be the <var title="">outside
- port</var>.</li>
+ <li><p><span>Create a <code>MessagePort</code> object</span>
+ owned by the <span title="script's global scope">global
+ scope</span> of the script that invoked the method. 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>
@@ -1640,6 +1674,15 @@
value is an array containing only the newly created port, and
<span>queue a task</span> to dispatch the event at <var title="">worker global scope</var>.</li>
+ <li>
+
+ <p><a href="#add-a-document-to-the-worker-s-documents" title="add a document to the worker's documents">Add to
+ <var title="">worker global scope</var>'s list of <span>the
+ worker's <code>Document</code>s</span></a> the
+ <code>Document</code> objects in <var title="">docs</var>.</p>
+
+ </li>
+
<li><p>Abort all these steps.</li>
</ol></li>
@@ -1661,8 +1704,8 @@
</ol></li>
- <li><p>Return <var title="">worker</var> and perform the next step
- asynchronously.</li>
+ <li><p>Return <var title="">worker</var> and perform the remaining
+ steps asynchronously.</li>
<li><p>Create an event that uses the <code>MessageEvent</code>
interface, with the name <code title="event-connect">connect</code>, which does not bubble, is not
@@ -1674,6 +1717,15 @@
<li>
+ <p><a href="#add-a-document-to-the-worker-s-documents" title="add a document to the worker's documents">Add to
+ <var title="">worker global scope</var>'s list of <span>the
+ worker's <code>Document</code>s</span></a> the
+ <code>Document</code> objects in <var title="">docs</var>.</p>
+
+ </li>
+
+ <li>
+
<p><a href="#run-a-worker">Run a worker</a> for the resulting <span>absolute
URL</span>, with the <span>script browsing context</span> of the
script that invoked the method as the <var title="">owner browsing
Received on Thursday, 28 May 2009 07:02:54 UTC