Skip to content

Commit

Permalink
Move worker's close() to dedicated and shared worker
Browse files Browse the repository at this point in the history
As WorkerGlobalScope's close() method should not be exposed to one of its derived interfaces, ServiceWorkerGlobalScope, close() needs to be moved to the derived interfaces which explicitly require it. This commit moves close() to DedicatedWorkerGlobalScope and SharedWorkerGlobalScope.

Related issue: w3c/ServiceWorker#865.
  • Loading branch information
jungkees authored and annevk committed Apr 27, 2016
1 parent 2749fa5 commit 4081f12
Showing 1 changed file with 50 additions and 23 deletions.
73 changes: 50 additions & 23 deletions source
Original file line number Diff line number Diff line change
Expand Up @@ -96156,8 +96156,6 @@ interface <dfn>WorkerGlobalScope</dfn> : <span>EventTarget</span> {
readonly attribute <span>WorkerNavigator</span> <span data-x="dom-worker-navigator">navigator</span>;
void <span data-x="dom-WorkerGlobalScope-importScripts">importScripts</span>(DOMString... urls);

void <span data-x="dom-WorkerGlobalScope-close">close</span>();

attribute <span>OnErrorEventHandler</span> <span data-x="handler-WorkerGlobalScope-onerror">onerror</span>;
attribute <span>EventHandler</span> <span data-x="handler-WorkerGlobalScope-onlanguagechange">onlanguagechange</span>;
attribute <span>EventHandler</span> <span data-x="handler-WorkerGlobalScope-onoffline">onoffline</span>;
Expand Down Expand Up @@ -96199,9 +96197,6 @@ interface <dfn>WorkerGlobalScope</dfn> : <span>EventTarget</span> {
<dt><var>workerGlobal</var> . <code subdfn data-x="dom-WorkerGlobalScope-importScripts">importScripts</code>(<var>urls</var>...)</dt>
<dd>Fetches each <span>URL</span> in <var>urls</var>, executes them one-by-one in the order they
are passed, and then returns (or throws if something went amiss).</dd>

<dt><var>workerGlobal</var> . <code subdfn data-x="dom-WorkerGlobalScope-close">close</code>()</dt>
<dd>Aborts <var>workerGlobal</var>.</dd>
</dl>

<div w-nodev>
Expand All @@ -96218,24 +96213,6 @@ interface <dfn>WorkerGlobalScope</dfn> : <span>EventTarget</span> {
<code>WorkerGlobalScope</code> object, this is not problematic as it cannot be observed from
script.</p>

<hr>

<p>When a script invokes the <dfn><code data-x="dom-WorkerGlobalScope-close">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 data-x="concept-task">tasks</span> that have been added to the
<code>WorkerGlobalScope</code> object's <span>event loop</span>'s <span data-x="task queue">task
queues</span>.</p>

<li><p>Set the worker's <code>WorkerGlobalScope</code> object's <span
data-x="dom-WorkerGlobalScope-closing">closing</span> flag to true. (This prevents any further
tasks from being queued.)</p></li>

</ol>

</div>

<hr>
Expand All @@ -96262,6 +96239,9 @@ interface <dfn>WorkerGlobalScope</dfn> : <span>EventTarget</span> {
<pre class="idl">[Global=(Worker,DedicatedWorker),Exposed=DedicatedWorker]
/*sealed*/ interface <dfn>DedicatedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span> {
void <span data-x="dom-DedicatedWorkerGlobalScope-postMessage">postMessage</span>(any message, optional sequence&lt;<span data-x="idl-object">object</span>&gt; transfer = []);

void <span data-x="dom-DedicatedWorkerGlobalScope-close">close</span>();

attribute <span>EventHandler</span> <span data-x="handler-DedicatedWorkerGlobalScope-onmessage">onmessage</span>;
};</pre>

Expand All @@ -96273,11 +96253,45 @@ interface <dfn>WorkerGlobalScope</dfn> : <span>EventTarget</span> {
<p>All messages received by that port must immediately be retargeted at the
<code>DedicatedWorkerGlobalScope</code> object.</p>

<dl class="domintro">
<dt><var>dedicatedWorkerGlobal</var> . <code subdfn
data-x="dom-DedicatedWorkerGlobalScope-postMessage">postMessage</code>(<var>message</var> [,
<var>transfer</var> ])</dt>
<dd>Clones <var>message</var> and transmits it to the <code>Worker</code> object associated with
<var>dedicatedWorkerGlobal</var>. <var>transfer</var> can be passed as a list of objects that are
to be transfered rather than cloned.</dd>

<dt><var>dedicatedWorkerGlobal</var> . <code subdfn
data-x="dom-DedicatedWorkerGlobalScope-close">close</code>()</dt>
<dd>Aborts <var>dedicatedWorkerGlobal</var>.</dd>
</dl>

<p>The <dfn><code data-x="dom-DedicatedWorkerGlobalScope-postMessage">postMessage()</code></dfn>
method on <code>DedicatedWorkerGlobalScope</code> objects must act as if, when invoked, it
immediately invoked <span data-x="dom-MessagePort-postMessage">the method of the same name</span>
on the port, with the same arguments, and returned the same return value.</p>

<div w-nodev>

<p>To <dfn>close a worker</dfn>, given a <var>workerGlobal</var>, run these steps:</p>

<ol>
<li><p>Discard any <span data-x="concept-task">tasks</span> that have been added to
<var>workerGlobal</var>'s <span>event loop</span>'s <span data-x="task queue">task
queues</span>.</p>

<li><p>Set <var>workerGlobal</var>'s <span data-x="dom-WorkerGlobalScope-closing">closing</span>
flag to true. (This prevents any further tasks from being queued.)</p></li>
</ol>

<p>The <dfn><code data-x="dom-DedicatedWorkerGlobalScope-close">close()</code></dfn> method, when
invoked, must <span>close a worker</span> with this <code>DedicatedWorkerGlobalScope</code>
object.</p>

</div>

<hr>

<p>The following are the <span>event handlers</span> (and their corresponding <span data-x="event
handler event type">event handler event types</span>) that must be supported, as <span>event
handler IDL attributes</span>, by objects implementing the <code>DedicatedWorkerGlobalScope</code>
Expand All @@ -96301,6 +96315,9 @@ interface <dfn>WorkerGlobalScope</dfn> : <span>EventTarget</span> {
/*sealed*/ interface <dfn>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span> {
readonly attribute DOMString <span data-x="dom-SharedWorkerGlobalScope-name">name</span>;
readonly attribute <span>ApplicationCache</span> <span data-x="dom-SharedWorkerGlobalScope-applicationCache">applicationCache</span>; // deprecated

void <span data-x="dom-SharedWorkerGlobalScope-close">close</span>();

attribute <span>EventHandler</span> <span data-x="handler-SharedWorkerGlobalScope-onconnect">onconnect</span>;
};</pre>

Expand All @@ -96318,6 +96335,10 @@ interface <dfn>WorkerGlobalScope</dfn> : <span>EventTarget</span> {
<dt><var>sharedWorkerGlobal</var> . <code subdfn data-x="dom-SharedWorkerGlobalScope-name">name</code></dt>
<dd>Returns <var>sharedWorkerGlobal</var>'s <span
data-x="concept-SharedWorkerGlobalScope-name">name</span>.</dd>

<dt><var>sharedWorkerGlobal</var> . <code subdfn
data-x="dom-SharedWorkerGlobalScope-close">close</code>()</dt>
<dd>Aborts <var>sharedWorkerGlobal</var>.</dd>
</dl>

<div w-nodev>
Expand All @@ -96327,8 +96348,14 @@ interface <dfn>WorkerGlobalScope</dfn> : <span>EventTarget</span> {
data-x="concept-SharedWorkerGlobalScope-name">name</span>. Its value represents the name that can
be used to obtain a reference to the worker using the <code>SharedWorker</code> constructor.</p>

<p>The <dfn><code data-x="dom-SharedWorkerGlobalScope-close">close()</code></dfn> method, when
invoked, must <span>close a worker</span> with this <code>SharedWorkerGlobalScope</code>
object.</p>

</div>

<hr>

<p>The following are the <span>event handlers</span> (and their corresponding <span data-x="event
handler event type">event handler event types</span>) that must be supported, as <span>event
handler IDL attributes</span>, by objects implementing the <code>SharedWorkerGlobalScope</code>
Expand Down

0 comments on commit 4081f12

Please sign in to comment.