Skip to content

Commit a6d8d17

Browse files
authored
Restore data: URL matching for shared workers via constructor storage key
When the shared worker lookup was changed to compare storage keys (5aa1a59), the SharedWorkerGlobalScope constructor origin comparison was dropped. The replacement derived the worker storage key from the worker's own settings object, but a data: URL worker has a unique opaque origin, so its storage key could never equal the creating environment's. This meant a data: URL shared worker could never be found and reused, even by the page that created it, and it left the constructor origin concept referenced only by a now-inaccurate note. Replace the constructor origin concept with a constructor storage key, initialized from the creating environment's storage key, and compare that against the outside storage key during lookup. This restores data: URL reuse while respecting storage key partitioning (origin and top-level site), and fixes the note.
1 parent 88ae68c commit a6d8d17

1 file changed

Lines changed: 21 additions & 20 deletions

File tree

source

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -135088,12 +135088,13 @@ interface <dfn interface>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope
135088135088

135089135089
<div w-nodev>
135090135090

135091-
<p>A <code>SharedWorkerGlobalScope</code> object has associated <dfn
135092-
data-x="concept-SharedWorkerGlobalScope-constructor-origin">constructor origin</dfn> (an
135093-
<span>origin</span>), <dfn data-x="concept-SharedWorkerGlobalScope-constructor-url">constructor
135094-
URL</dfn> (a <span>URL record</span>), and <dfn
135095-
data-x="concept-SharedWorkerGlobalScope-credentials">credentials</dfn> (a <span
135096-
data-x="concept-request-credentials-mode">credentials mode</span>), and <dfn
135091+
<p id="concept-sharedworkerglobalscope-constructor-origin">A <code>SharedWorkerGlobalScope</code>
135092+
object has associated <dfn
135093+
data-x="concept-SharedWorkerGlobalScope-constructor-storage-key">constructor storage key</dfn> (a
135094+
<span>storage key</span>), <dfn
135095+
data-x="concept-SharedWorkerGlobalScope-constructor-url">constructor URL</dfn> (a <span>URL
135096+
record</span>), and <dfn data-x="concept-SharedWorkerGlobalScope-credentials">credentials</dfn> (a
135097+
<span data-x="concept-request-credentials-mode">credentials mode</span>), and <dfn
135097135098
data-x="concept-SharedWorkerGlobalScope-extended-lifetime">extended lifetime</dfn> (a boolean).
135098135099
They are initialized when the <code>SharedWorkerGlobalScope</code> object is created, in the
135099135100
<span>run a worker</span> algorithm.</p>
@@ -135502,9 +135503,9 @@ interface <dfn interface>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope
135502135503

135503135504
<ol>
135504135505
<li><p>Set <var>worker global scope</var>'s <span
135505-
data-x="concept-SharedWorkerGlobalScope-constructor-origin">constructor origin</span> to
135506-
<var>outside settings</var>'s <span
135507-
data-x="concept-settings-object-origin">origin</span>.</p></li>
135506+
data-x="concept-SharedWorkerGlobalScope-constructor-storage-key">constructor storage key</span>
135507+
to the result of running <span>obtain a storage key for non-storage purposes</span> given
135508+
<var>outside settings</var>.</p></li>
135508135509

135509135510
<li><p>Set <var>worker global scope</var>'s <span
135510135511
data-x="concept-SharedWorkerGlobalScope-constructor-url">constructor URL</span> to
@@ -136224,15 +136225,13 @@ dictionary <dfn dictionary>SharedWorkerOptions</dfn> : <span>WorkerOptions</span
136224136225
<code>SharedWorkerGlobalScope</code> objects:</p>
136225136226

136226136227
<ol>
136227-
<li><p>Let <var>workerStorageKey</var> be the result of running <span>obtain a storage key
136228-
for non-storage purposes</span> given <var>scope</var>'s <span>relevant settings
136229-
object</span>.</p></li>
136230-
136231136228
<li>
136232136229
<p>If all of the following are true:</p>
136233136230

136234136231
<ul>
136235-
<li><var>workerStorageKey</var> <span data-x="storage key equal">equals</span>
136232+
<li><var>scope</var>'s <span
136233+
data-x="concept-SharedWorkerGlobalScope-constructor-storage-key">constructor storage
136234+
key</span> <span data-x="storage key equal">equals</span>
136236136235
<var>outsideStorageKey</var>;</li>
136237136236

136238136237
<li><var>scope</var>'s <span data-x="dom-WorkerGlobalScope-closing">closing</span> flag is
@@ -136257,12 +136256,14 @@ dictionary <dfn dictionary>SharedWorkerOptions</dfn> : <span>WorkerOptions</span
136257136256
</ol>
136258136257

136259136258
<p class="note"><code data-x="data protocol">data:</code> URLs create a worker with an <span
136260-
data-x="concept-origin-opaque">opaque origin</span>. Both the <span
136261-
data-x="concept-SharedWorkerGlobalScope-constructor-origin">constructor origin</span> and
136262-
<span data-x="concept-SharedWorkerGlobalScope-constructor-url">constructor URL</span> are
136263-
compared so the same <code data-x="data protocol">data:</code> URL can be used within an
136264-
<span>origin</span> to get to the same <code>SharedWorkerGlobalScope</code> object, but cannot
136265-
be used to bypass the <span>same origin</span> restriction.</p>
136259+
data-x="concept-origin-opaque">opaque origin</span>, which would prevent such a worker from
136260+
ever being matched if its own <span>storage key</span> were used. Instead, the <span
136261+
data-x="concept-SharedWorkerGlobalScope-constructor-storage-key">constructor storage
136262+
key</span> (derived from the creating environment) and <span
136263+
data-x="concept-SharedWorkerGlobalScope-constructor-url">constructor URL</span> are compared,
136264+
so the same <code data-x="data protocol">data:</code> URL can be used within a <span>storage
136265+
key</span> to get to the same <code>SharedWorkerGlobalScope</code> object, but cannot be used
136266+
to bypass the <span>storage key</span> restriction.</p>
136266136267
</li>
136267136268

136268136269
<li>

0 commit comments

Comments
 (0)