Skip to content

Commit 3bb6521

Browse files
authored
Add a name to dedicated workers, for debugging
Closes #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
1 parent 71f75ef commit 3bb6521

File tree

1 file changed

+69
-33
lines changed

1 file changed

+69
-33
lines changed

source

Lines changed: 69 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -96939,6 +96939,19 @@ interface <dfn>WorkerGlobalScope</dfn> : <span>EventTarget</span> {
9693996939
data-dfn-for="WorkerGlobalScope" data-x="concept-WorkerGlobalScope-url">url</dfn> (null or a
9694096940
<span>URL</span>). It is initially null.
9694196941

96942+
<p>A <code>WorkerGlobalScope</code> object has an associated <dfn data-export=""
96943+
data-dfn-for="WorkerGlobalScope" data-x="concept-WorkerGlobalScope-name">name</dfn> (a string). It
96944+
is set during creation.
96945+
96946+
<p class="note">The <span data-x="concept-WorkerGlobalScope-name">name</span> can have different
96947+
semantics for each subclass of of <code>WorkerGlobalScope</code>. For
96948+
<code>DedicatedWorkerGlobalScope</code> instances, it is simply a developer-supplied name, useful
96949+
mostly for debugging purposes. For <code>SharedWorkerGlobalScope</code> instances, it allows
96950+
obtaining a reference to a common shared worker via the <code
96951+
data-x="dom-SharedWorker">SharedWorker()</code> constructor. For
96952+
<code>ServiceWorkerGlobalScope</code> objects, it doesn't make sense (and as such isn't exposed
96953+
through the JavaScript API at all).</p>
96954+
9694296955
<p>A <code>WorkerGlobalScope</code> object has an associated <dfn data-export=""
9694396956
data-dfn-for="WorkerGlobalScope" data-x="concept-WorkerGlobalScope-https-state">HTTPS state</dfn>
9694496957
(an <span>HTTPS state value</span>). It is initially "<code data-x="">none</code>".
@@ -97009,6 +97022,8 @@ interface <dfn>WorkerGlobalScope</dfn> : <span>EventTarget</span> {
9700997022

9701097023
<pre class="idl">[Global=(Worker,DedicatedWorker),Exposed=DedicatedWorker]
9701197024
interface <dfn>DedicatedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span> {
97025+
readonly attribute DOMString <span data-x="dom-DedicatedWorkerGlobalScope-name">name</span>;
97026+
9701297027
void <span data-x="dom-DedicatedWorkerGlobalScope-postMessage">postMessage</span>(any message, optional sequence&lt;<span data-x="idl-object">object</span>&gt; transfer = []);
9701397028

9701497029
void <span data-x="dom-DedicatedWorkerGlobalScope-close">close</span>();
@@ -97026,6 +97041,10 @@ interface <dfn>DedicatedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span>
9702697041
<code>DedicatedWorkerGlobalScope</code> object.</p>
9702797042

9702897043
<dl class="domintro">
97044+
<dt><var>dedicatedWorkerGlobal</var> . <code subdfn data-x="dom-DedicatedWorkerGlobalScope-name">name</code></dt>
97045+
<dd>Returns <var>dedicatedWorkerGlobal</var>'s <span
97046+
data-x="concept-WorkerGlobalScope-name">name</span>.</dd>
97047+
9702997048
<dt><var>dedicatedWorkerGlobal</var> . <code subdfn
9703097049
data-x="dom-DedicatedWorkerGlobalScope-postMessage">postMessage</code>(<var>message</var> [,
9703197050
<var>transfer</var> ])</dt>
@@ -97038,6 +97057,11 @@ interface <dfn>DedicatedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span>
9703897057
<dd>Aborts <var>dedicatedWorkerGlobal</var>.</dd>
9703997058
</dl>
9704097059

97060+
<p>The <dfn><code data-x="dom-DedicatedWorkerGlobalScope-name">name</code></dfn> attribute must
97061+
return the <code>DedicatedWorkerGlobalScope</code> object's <span
97062+
data-x="concept-WorkerGlobalScope-name">name</span>. Its value represents the name given to the
97063+
worker using the <code>Worker</code> constructor, used primarily for debugging purposes.</p>
97064+
9704197065
<p>The <dfn><code data-x="dom-DedicatedWorkerGlobalScope-postMessage">postMessage()</code></dfn>
9704297066
method on <code>DedicatedWorkerGlobalScope</code> objects must act as if, when invoked, it
9704397067
immediately invoked <span data-x="dom-MessagePort-postMessage">the method of the same name</span>
@@ -97096,13 +97120,11 @@ interface <dfn>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span> {
9709697120

9709797121
<p>A <code>SharedWorkerGlobalScope</code> object has an associated <dfn
9709897122
data-dfn-for="SharedWorkerGlobalScope"
97099-
data-x="concept-SharedWorkerGlobalScope-constructor-origin">constructor origin</dfn>, <dfn
97123+
data-x="concept-SharedWorkerGlobalScope-constructor-origin">constructor origin</dfn>, and <dfn
9710097124
data-dfn-for="SharedWorkerGlobalScope"
97101-
data-x="concept-SharedWorkerGlobalScope-constructor-url">constructor url</dfn>, and <dfn
97102-
data-dfn-for="SharedWorkerGlobalScope"
97103-
data-x="concept-SharedWorkerGlobalScope-name">name</dfn>. They are initialized when the
97104-
<code>SharedWorkerGlobalScope</code> object is created, in the <span>run a worker</span>
97105-
algorithm.
97125+
data-x="concept-SharedWorkerGlobalScope-constructor-url">constructor url</dfn>. They are
97126+
initialized when the <code>SharedWorkerGlobalScope</code> object is created, in the <span>run a
97127+
worker</span> algorithm.
9710697128

9710797129
<p>Shared workers receive message ports through <code
9710897130
data-x="event-WorkerGlobalScope-connect">connect</code> events on their <code>SharedWorkerGlobalScope</code> object for each
@@ -97111,7 +97133,7 @@ interface <dfn>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span> {
9711197133
<dl class="domintro">
9711297134
<dt><var>sharedWorkerGlobal</var> . <code subdfn data-x="dom-SharedWorkerGlobalScope-name">name</code></dt>
9711397135
<dd>Returns <var>sharedWorkerGlobal</var>'s <span
97114-
data-x="concept-SharedWorkerGlobalScope-name">name</span>.</dd>
97136+
data-x="concept-WorkerGlobalScope-name">name</span>.</dd>
9711597137

9711697138
<dt><var>sharedWorkerGlobal</var> . <code subdfn
9711797139
data-x="dom-SharedWorkerGlobalScope-close">close</code>()</dt>
@@ -97122,7 +97144,7 @@ interface <dfn>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span> {
9712297144

9712397145
<p>The <dfn><code data-x="dom-SharedWorkerGlobalScope-name">name</code></dfn> attribute must
9712497146
return the <code>SharedWorkerGlobalScope</code> object's <span
97125-
data-x="concept-SharedWorkerGlobalScope-name">name</span>. Its value represents the name that can
97147+
data-x="concept-WorkerGlobalScope-name">name</span>. Its value represents the name that can
9712697148
be used to obtain a reference to the worker using the <code>SharedWorker</code> constructor.</p>
9712797149

9712897150
<p>The <dfn><code data-x="dom-SharedWorkerGlobalScope-close">close()</code></dfn> method, when
@@ -97234,9 +97256,8 @@ interface <dfn>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span> {
9723497256
<p>When a user agent is to <dfn data-export="">run a worker</dfn> for a script with
9723597257
<code>Worker</code> or <code>SharedWorker</code> object <var>worker</var>, <span>URL</span>
9723697258
<var>url</var>, <span>environment settings object</span> <var>outside settings</var>,
97237-
<code>MessagePort</code> <var>outside port</var>, a <code>WorkerOptions</code> dictionary
97238-
<var>options</var>, and an optional string <var>name</var>, it must run the following steps.
97239-
(<var>name</var> is always provided when <var>worker</var> is a <code>SharedWorker</code>.)</p>
97259+
<code>MessagePort</code> <var>outside port</var>, and a <code>WorkerOptions</code> dictionary
97260+
<var>options</var>, it must run the following steps.</p>
9724097261

9724197262
<ol>
9724297263

@@ -97281,6 +97302,10 @@ interface <dfn>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span> {
9728197302
context</var> and <var>outside settings</var>, and let <var>inside settings</var> be the
9728297303
result.</p></li>
9728397304

97305+
<li><p>Set <var>worker global scope</var>'s <span
97306+
data-x="concept-WorkerGlobalScope-name">name</span> to the value of <var>options</var>'s
97307+
<code data-x="">name</code> member.</p></li>
97308+
9728497309
<li>
9728597310
<p>If <var>is shared</var> is true, then:</p>
9728697311

@@ -97293,9 +97318,6 @@ interface <dfn>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span> {
9729397318
<li><p>Set <var>worker global scope</var>'s <span
9729497319
data-x="concept-SharedWorkerGlobalScope-constructor-url">constructor url</span> to
9729597320
<var>url</var>.</p></li>
97296-
97297-
<li><p>Set <var>worker global scope</var>'s <span
97298-
data-x="concept-SharedWorkerGlobalScope-name">name</span> to <var>name</var>.</p></li>
9729997321
</ol>
9730097322
</li>
9730197323

@@ -97716,6 +97738,7 @@ interface <dfn>Worker</dfn> : <span>EventTarget</span> {
9771697738
dictionary <dfn>WorkerOptions</dfn> {
9771797739
<span>WorkerType</span> type = "classic";
9771897740
<span>RequestCredentials</span> credentials = "omit"; // credentials is only used if type is "module"
97741+
DOMString name = "";
9771997742
};
9772097743

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

9773497759
<dt><var>worker</var> . <code subdfn data-x="dom-Worker-terminate">terminate</code>()</dt>
9773597760
<dd>Aborts <var>worker</var>'s associated global environment.</dd>
@@ -97832,21 +97857,28 @@ enum <dfn>WorkerType</dfn> { "classic", "module" };
9783297857

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

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

9784197867
<dl class="domintro">
97842-
<dt><var>sharedWorker</var> = new <code subdfn data-x="dom-SharedWorker">SharedWorker</code>(<var>scriptURL</var> [, <var>name</var> [, <var>options</var> ]])</dt>
97868+
<dt><var>sharedWorker</var> = new <code subdfn data-x="dom-SharedWorker">SharedWorker</code>(<var>scriptURL</var> [, <var>name</var> ])</dt>
9784397869
<dd>Returns a new <code>SharedWorker</code> object. <var>scriptURL</var> will be fetched and
9784497870
executed in the background, creating a new global environment for which <var>sharedWorker</var>
9784597871
represents the communication channel. <var>name</var> can be used to define the <span
97846-
data-x="concept-SharedWorkerGlobalScope-name">name</span> of that global environment.
97847-
<var>options</var> can be used to ensure this new global environment
97848-
supports JavaScript modules (specify <code data-x="">type: "module"</code>) and if that is
97849-
specified, can also be used to specify how <var>scriptURL</var> is fetched through the <code
97872+
data-x="concept-WorkerGlobalScope-name">name</span> of that global environment.</dd>
97873+
97874+
<dt><var>sharedWorker</var> = new <code data-x="dom-SharedWorker">SharedWorker</code>(<var>scriptURL</var> [, <var>options</var> ])</dt>
97875+
<dd>Returns a new <code>SharedWorker</code> object. <var>scriptURL</var> will be fetched and
97876+
executed in the background, creating a new global environment for which <var>sharedWorker</var>
97877+
represents the communication channel. <var>options</var> can be used to define the <span
97878+
data-x="concept-WorkerGlobalScope-name">name</span> of that global environment via the <code
97879+
data-x="">name</code> option. It can also ensure this new global environment supports JavaScript
97880+
modules (specify <code data-x="">type: "module"</code>), and if that is specified, can also be
97881+
used to specify how <var>scriptURL</var> is fetched through the <code
9785097882
data-x="">credentials</code> option.</dd>
9785197883

9785297884
<dt><var>sharedWorker</var> . <code subdfn data-x="dom-SharedWorker-port">port</code></dt>
@@ -97861,13 +97893,17 @@ interface <dfn>SharedWorker</dfn> : <span>EventTarget</span> {
9786197893
communicating with the shared worker.</p>
9786297894

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

9786797898
<ol>
97868-
<li><p>The user agent may throw a <span>"<code>SecurityError</code>"</span>
97869-
<code>DOMException</code> and abort these steps if the request violates a policy decision (e.g.
97870-
if the user agent is configured to not allow the page to start shared workers).</p></li>
97899+
<li><p>Optionally, throw a <span>"<code>SecurityError</code>"</span> <code>DOMException</code>
97900+
and abort these steps if the request violates a policy decision (e.g. if the user agent is
97901+
configured to not allow the page to start shared workers).</p></li>
97902+
97903+
<li><p>If <var>options</var> is a <code data-x="idl-DOMString">DOMString</code>, set
97904+
<var>options</var> to a new <code>WorkerOptions</code> dictionary whose <code
97905+
data-x="">name</code> member is set to the value of <var>options</var> and whose other members
97906+
are set to their default values.</p></li>
9787197907

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

@@ -97912,8 +97948,9 @@ interface <dfn>SharedWorker</dfn> : <span>EventTarget</span> {
9791297948
data-x="concept-settings-object-origin">origin</span>, <span
9791397949
data-x="concept-SharedWorkerGlobalScope-constructor-url">constructor url</span> <span
9791497950
data-x="concept-url-equals">equals</span> <var>urlRecord</var>, and <span
97915-
data-x="concept-SharedWorkerGlobalScope-name">name</span> is <var>name</var>, then set
97916-
<var>worker global scope</var> to that <code>SharedWorkerGlobalScope</code> object.</p>
97951+
data-x="concept-WorkerGlobalScope-name">name</span> equals the value of <var>options</var>'s
97952+
<code data-x="">name</code> member, then set <var>worker global scope</var> to that
97953+
<code>SharedWorkerGlobalScope</code> object.</p>
9791797954

9791897955
<p class="note"><code data-x="data protocol">data:</code> URLs create a worker with an <span
9791997956
data-x="concept-origin-opaque">opaque origin</span>. Both the <span
@@ -97981,8 +98018,7 @@ interface <dfn>SharedWorker</dfn> : <span>EventTarget</span> {
9798198018
</li>
9798298019

9798398020
<li><p>Otherwise, <span>run a worker</span> given <var>worker</var>, <var>urlRecord</var>,
97984-
<var>outside settings</var>, <var>outside port</var>, <var>options</var>, and
97985-
<var>name</var>.</p></li>
98021+
<var>outside settings</var>, <var>outside port</var>, and <var>options</var>.</p></li>
9798698022
</ol>
9798798023
</li>
9798898024

0 commit comments

Comments
 (0)