Skip to content

Commit

Permalink
Add a name to dedicated workers, for debugging
Browse files Browse the repository at this point in the history
Closes whatwg#2477. This also changes the SharedWorker constructor to allow
passing the name via an options bag, e.g. SharedWorker(url, { name }),
in addition to directly as a string. This new url-plus-options form
supersedes the previous signature of SharedWorker(url, name, options),
where previously options was only used for module-worker-related
options, which haven't shipped in implementations yet.

Tests: web-platform-tests/wpt#5880
  • Loading branch information
domenic authored and Alice Boxhall committed Jan 7, 2019
1 parent d51e614 commit e85c8c8
Showing 1 changed file with 69 additions and 33 deletions.
102 changes: 69 additions & 33 deletions source
Original file line number Diff line number Diff line change
Expand Up @@ -96954,6 +96954,19 @@ interface <dfn>WorkerGlobalScope</dfn> : <span>EventTarget</span> {
data-dfn-for="WorkerGlobalScope" data-x="concept-WorkerGlobalScope-url">url</dfn> (null or a
<span>URL</span>). It is initially null.

<p>A <code>WorkerGlobalScope</code> object has an associated <dfn data-export=""
data-dfn-for="WorkerGlobalScope" data-x="concept-WorkerGlobalScope-name">name</dfn> (a string). It
is set during creation.

<p class="note">The <span data-x="concept-WorkerGlobalScope-name">name</span> can have different
semantics for each subclass of of <code>WorkerGlobalScope</code>. For
<code>DedicatedWorkerGlobalScope</code> instances, it is simply a developer-supplied name, useful
mostly for debugging purposes. For <code>SharedWorkerGlobalScope</code> instances, it allows
obtaining a reference to a common shared worker via the <code
data-x="dom-SharedWorker">SharedWorker()</code> constructor. For
<code>ServiceWorkerGlobalScope</code> objects, it doesn't make sense (and as such isn't exposed
through the JavaScript API at all).</p>

<p>A <code>WorkerGlobalScope</code> object has an associated <dfn data-export=""
data-dfn-for="WorkerGlobalScope" data-x="concept-WorkerGlobalScope-https-state">HTTPS state</dfn>
(an <span>HTTPS state value</span>). It is initially "<code data-x="">none</code>".
Expand Down Expand Up @@ -97024,6 +97037,8 @@ interface <dfn>WorkerGlobalScope</dfn> : <span>EventTarget</span> {

<pre class="idl">[Global=(Worker,DedicatedWorker),Exposed=DedicatedWorker]
interface <dfn>DedicatedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span> {
readonly attribute DOMString <span data-x="dom-DedicatedWorkerGlobalScope-name">name</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>();
Expand All @@ -97041,6 +97056,10 @@ interface <dfn>DedicatedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span>
<code>DedicatedWorkerGlobalScope</code> object.</p>

<dl class="domintro">
<dt><var>dedicatedWorkerGlobal</var> . <code subdfn data-x="dom-DedicatedWorkerGlobalScope-name">name</code></dt>
<dd>Returns <var>dedicatedWorkerGlobal</var>'s <span
data-x="concept-WorkerGlobalScope-name">name</span>.</dd>

<dt><var>dedicatedWorkerGlobal</var> . <code subdfn
data-x="dom-DedicatedWorkerGlobalScope-postMessage">postMessage</code>(<var>message</var> [,
<var>transfer</var> ])</dt>
Expand All @@ -97053,6 +97072,11 @@ interface <dfn>DedicatedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span>
<dd>Aborts <var>dedicatedWorkerGlobal</var>.</dd>
</dl>

<p>The <dfn><code data-x="dom-DedicatedWorkerGlobalScope-name">name</code></dfn> attribute must
return the <code>DedicatedWorkerGlobalScope</code> object's <span
data-x="concept-WorkerGlobalScope-name">name</span>. Its value represents the name given to the
worker using the <code>Worker</code> constructor, used primarily for debugging purposes.</p>

<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>
Expand Down Expand Up @@ -97111,13 +97135,11 @@ interface <dfn>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span> {

<p>A <code>SharedWorkerGlobalScope</code> object has an associated <dfn
data-dfn-for="SharedWorkerGlobalScope"
data-x="concept-SharedWorkerGlobalScope-constructor-origin">constructor origin</dfn>, <dfn
data-x="concept-SharedWorkerGlobalScope-constructor-origin">constructor origin</dfn>, and <dfn
data-dfn-for="SharedWorkerGlobalScope"
data-x="concept-SharedWorkerGlobalScope-constructor-url">constructor url</dfn>, and <dfn
data-dfn-for="SharedWorkerGlobalScope"
data-x="concept-SharedWorkerGlobalScope-name">name</dfn>. They are initialized when the
<code>SharedWorkerGlobalScope</code> object is created, in the <span>run a worker</span>
algorithm.
data-x="concept-SharedWorkerGlobalScope-constructor-url">constructor url</dfn>. They are
initialized when the <code>SharedWorkerGlobalScope</code> object is created, in the <span>run a
worker</span> algorithm.

<p>Shared workers receive message ports through <code
data-x="event-WorkerGlobalScope-connect">connect</code> events on their <code>SharedWorkerGlobalScope</code> object for each
Expand All @@ -97126,7 +97148,7 @@ interface <dfn>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span> {
<dl class="domintro">
<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>
data-x="concept-WorkerGlobalScope-name">name</span>.</dd>

<dt><var>sharedWorkerGlobal</var> . <code subdfn
data-x="dom-SharedWorkerGlobalScope-close">close</code>()</dt>
Expand All @@ -97137,7 +97159,7 @@ interface <dfn>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span> {

<p>The <dfn><code data-x="dom-SharedWorkerGlobalScope-name">name</code></dfn> attribute must
return the <code>SharedWorkerGlobalScope</code> object's <span
data-x="concept-SharedWorkerGlobalScope-name">name</span>. Its value represents the name that can
data-x="concept-WorkerGlobalScope-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
Expand Down Expand Up @@ -97249,9 +97271,8 @@ interface <dfn>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span> {
<p>When a user agent is to <dfn data-export="">run a worker</dfn> for a script with
<code>Worker</code> or <code>SharedWorker</code> object <var>worker</var>, <span>URL</span>
<var>url</var>, <span>environment settings object</span> <var>outside settings</var>,
<code>MessagePort</code> <var>outside port</var>, a <code>WorkerOptions</code> dictionary
<var>options</var>, and an optional string <var>name</var>, it must run the following steps.
(<var>name</var> is always provided when <var>worker</var> is a <code>SharedWorker</code>.)</p>
<code>MessagePort</code> <var>outside port</var>, and a <code>WorkerOptions</code> dictionary
<var>options</var>, it must run the following steps.</p>

<ol>

Expand Down Expand Up @@ -97296,6 +97317,10 @@ interface <dfn>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span> {
context</var> and <var>outside settings</var>, and let <var>inside settings</var> be the
result.</p></li>

<li><p>Set <var>worker global scope</var>'s <span
data-x="concept-WorkerGlobalScope-name">name</span> to the value of <var>options</var>'s
<code data-x="">name</code> member.</p></li>

<li>
<p>If <var>is shared</var> is true, then:</p>

Expand All @@ -97308,9 +97333,6 @@ interface <dfn>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span> {
<li><p>Set <var>worker global scope</var>'s <span
data-x="concept-SharedWorkerGlobalScope-constructor-url">constructor url</span> to
<var>url</var>.</p></li>

<li><p>Set <var>worker global scope</var>'s <span
data-x="concept-SharedWorkerGlobalScope-name">name</span> to <var>name</var>.</p></li>
</ol>
</li>

Expand Down Expand Up @@ -97731,6 +97753,7 @@ interface <dfn>Worker</dfn> : <span>EventTarget</span> {
dictionary <dfn>WorkerOptions</dfn> {
<span>WorkerType</span> type = "classic";
<span>RequestCredentials</span> credentials = "omit"; // credentials is only used if type is "module"
DOMString name = "";
};

enum <dfn>WorkerType</dfn> { "classic", "module" };
Expand All @@ -97741,10 +97764,12 @@ enum <dfn>WorkerType</dfn> { "classic", "module" };
<dt><var>worker</var> = new <code subdfn data-x="dom-Worker">Worker</code>(<var>scriptURL</var> [, <var>options</var> ])</dt>
<dd>Returns a new <code>Worker</code> object. <var>scriptURL</var> will be fetched and executed
in the background, creating a new global environment for which <var>worker</var> represents the
communication channel. <var>options</var> can be used to ensure this new global environment
supports JavaScript modules (specify <code data-x="">type: "module"</code>) and if that is
specified, can also be used to specify how <var>scriptURL</var> is fetched through the <code
data-x="">credentials</code> option.</dd>
communication channel. <var>options</var> can be used to define the <span
data-x="concept-WorkerGlobalScope-name">name</span> of that global environment via the <code
data-x="">name</code> option, primarily for debugging purposes. It can also ensure this new
global environment supports JavaScript modules (specify <code data-x="">type: "module"</code>),
and if that is specified, can also be used to specify how <var>scriptURL</var> is fetched through
the <code data-x="">credentials</code> option.

<dt><var>worker</var> . <code subdfn data-x="dom-Worker-terminate">terminate</code>()</dt>
<dd>Aborts <var>worker</var>'s associated global environment.</dd>
Expand Down Expand Up @@ -97847,21 +97872,28 @@ enum <dfn>WorkerType</dfn> { "classic", "module" };

<h5>Shared workers and the <code>SharedWorker</code> interface</h5>

<pre class="idl">[<span data-x="dom-SharedWorker">Constructor</span>(USVString scriptURL, optional DOMString name = "", optional <span>WorkerOptions</span> options), Exposed=(Window,Worker)]
<pre class="idl">[<span data-x="dom-SharedWorker">Constructor</span>(USVString scriptURL, optional (DOMString or <span>WorkerOptions</span>) options),
Exposed=(Window,Worker)]
interface <dfn>SharedWorker</dfn> : <span>EventTarget</span> {
readonly attribute <span>MessagePort</span> <span data-x="dom-SharedWorker-port">port</span>;
};
<span>SharedWorker</span> implements <span>AbstractWorker</span>;</pre>

<dl class="domintro">
<dt><var>sharedWorker</var> = new <code subdfn data-x="dom-SharedWorker">SharedWorker</code>(<var>scriptURL</var> [, <var>name</var> [, <var>options</var> ]])</dt>
<dt><var>sharedWorker</var> = new <code subdfn data-x="dom-SharedWorker">SharedWorker</code>(<var>scriptURL</var> [, <var>name</var> ])</dt>
<dd>Returns a new <code>SharedWorker</code> object. <var>scriptURL</var> will be fetched and
executed in the background, creating a new global environment for which <var>sharedWorker</var>
represents the communication channel. <var>name</var> can be used to define the <span
data-x="concept-SharedWorkerGlobalScope-name">name</span> of that global environment.
<var>options</var> can be used to ensure this new global environment
supports JavaScript modules (specify <code data-x="">type: "module"</code>) and if that is
specified, can also be used to specify how <var>scriptURL</var> is fetched through the <code
data-x="concept-WorkerGlobalScope-name">name</span> of that global environment.</dd>

<dt><var>sharedWorker</var> = new <code data-x="dom-SharedWorker">SharedWorker</code>(<var>scriptURL</var> [, <var>options</var> ])</dt>
<dd>Returns a new <code>SharedWorker</code> object. <var>scriptURL</var> will be fetched and
executed in the background, creating a new global environment for which <var>sharedWorker</var>
represents the communication channel. <var>options</var> can be used to define the <span
data-x="concept-WorkerGlobalScope-name">name</span> of that global environment via the <code
data-x="">name</code> option. It can also ensure this new global environment supports JavaScript
modules (specify <code data-x="">type: "module"</code>), and if that is specified, can also be
used to specify how <var>scriptURL</var> is fetched through the <code
data-x="">credentials</code> option.</dd>

<dt><var>sharedWorker</var> . <code subdfn data-x="dom-SharedWorker-port">port</code></dt>
Expand All @@ -97876,13 +97908,17 @@ interface <dfn>SharedWorker</dfn> : <span>EventTarget</span> {
communicating with the shared worker.</p>

<p>When the <dfn><code data-x="dom-SharedWorker">SharedWorker(<var>scriptURL</var>,
<var>name</var>, <var>options</var>)</code></dfn> constructor is invoked, the user agent must run
the following steps:</p>
<var>optons</var>)</code></dfn> constructor is invoked:</p>

<ol>
<li><p>The user agent may throw a <span>"<code>SecurityError</code>"</span>
<code>DOMException</code> and abort these steps if the request violates a policy decision (e.g.
if the user agent is configured to not allow the page to start shared workers).</p></li>
<li><p>Optionally, throw a <span>"<code>SecurityError</code>"</span> <code>DOMException</code>
and abort these steps if the request violates a policy decision (e.g. if the user agent is
configured to not allow the page to start shared workers).</p></li>

<li><p>If <var>options</var> is a <code data-x="idl-DOMString">DOMString</code>, set
<var>options</var> to a new <code>WorkerOptions</code> dictionary whose <code
data-x="">name</code> member is set to the value of <var>options</var> and whose other members
are set to their default values.</p></li>

<li><p>Let <var>outside settings</var> be the <span>current settings object</span>.</p></li>

Expand Down Expand Up @@ -97927,8 +97963,9 @@ interface <dfn>SharedWorker</dfn> : <span>EventTarget</span> {
data-x="concept-settings-object-origin">origin</span>, <span
data-x="concept-SharedWorkerGlobalScope-constructor-url">constructor url</span> <span
data-x="concept-url-equals">equals</span> <var>urlRecord</var>, and <span
data-x="concept-SharedWorkerGlobalScope-name">name</span> is <var>name</var>, then set
<var>worker global scope</var> to that <code>SharedWorkerGlobalScope</code> object.</p>
data-x="concept-WorkerGlobalScope-name">name</span> equals the value of <var>options</var>'s
<code data-x="">name</code> member, then set <var>worker global scope</var> to that
<code>SharedWorkerGlobalScope</code> object.</p>

<p class="note"><code data-x="data protocol">data:</code> URLs create a worker with an <span
data-x="concept-origin-opaque">opaque origin</span>. Both the <span
Expand Down Expand Up @@ -97996,8 +98033,7 @@ interface <dfn>SharedWorker</dfn> : <span>EventTarget</span> {
</li>

<li><p>Otherwise, <span>run a worker</span> given <var>worker</var>, <var>urlRecord</var>,
<var>outside settings</var>, <var>outside port</var>, <var>options</var>, and
<var>name</var>.</p></li>
<var>outside settings</var>, <var>outside port</var>, and <var>options</var>.</p></li>
</ol>
</li>

Expand Down

0 comments on commit e85c8c8

Please sign in to comment.