Skip to content

Commit d1088a2

Browse files
committed
Define how data URLs affect workers
Fixes #1243. Basically, data URLs create (shared) workers that have a unique opaque origin.
1 parent a61e36d commit d1088a2

File tree

1 file changed

+40
-16
lines changed

1 file changed

+40
-16
lines changed

source

Lines changed: 40 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -96549,7 +96549,9 @@ interface <dfn>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span> {
9654996549

9655096550
<p>A <code>SharedWorkerGlobalScope</code> object has an associated <dfn
9655196551
data-dfn-for="SharedWorkerGlobalScope"
96552-
data-x="concept-SharedWorkerGlobalScope-constructor-url">constructor url</dfn> and <dfn
96552+
data-x="concept-SharedWorkerGlobalScope-constructor-origin">constructor origin</dfn>, <dfn
96553+
data-dfn-for="SharedWorkerGlobalScope"
96554+
data-x="concept-SharedWorkerGlobalScope-constructor-url">constructor url</dfn>, and <dfn
9655396555
data-dfn-for="SharedWorkerGlobalScope"
9655496556
data-x="concept-SharedWorkerGlobalScope-name">name</dfn>. They are initialized when the
9655596557
<code>SharedWorkerGlobalScope</code> object is created, in the <span>run a worker</span>
@@ -96762,6 +96764,11 @@ interface <dfn>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span> {
9676296764
<p>If <var>is shared</var> is true, then:</p>
9676396765

9676496766
<ol>
96767+
<li><p>Set <var>worker global scope</var>'s <span
96768+
data-x="concept-SharedWorkerGlobalScope-constructor-origin">constructor origin</span> to
96769+
<var>outside settings</var>'s <span
96770+
data-x="concept-settings-object-origin">origin</span>.</p></li>
96771+
9676596772
<li><p>Set <var>worker global scope</var>'s <span
9676696773
data-x="concept-SharedWorkerGlobalScope-constructor-url">constructor url</span> to
9676796774
<var>url</var>.</p></li>
@@ -97142,7 +97149,7 @@ interface <dfn>AbstractWorker</dfn> {
9714297149
<dt>The <span>API URL character encoding</span></dt>
9714397150
<dd>
9714497151

97145-
<p>Return UTF-8.</p>
97152+
<p>Return <span>UTF-8</span>.</p>
9714697153

9714797154
</dd>
9714897155

@@ -97157,7 +97164,10 @@ interface <dfn>AbstractWorker</dfn> {
9715797164
<dt>The <span data-x="concept-settings-object-origin">origin</span></dt>
9715897165
<dd>
9715997166

97160-
<p>Return <var>inherited origin</var>.</p>
97167+
<p>Return a unique <span data-x="concept-origin-opaque">opaque origin</span> if <var>worker
97168+
global scope</var>'s <span data-x="concept-WorkerGlobalScope-url">url</span>'s <span
97169+
data-x="concept-url-scheme">scheme</span> is "<code data-x="">data</code>", and <var>inherited
97170+
origin</var> otherwise.</p>
9716197171

9716297172
</dd>
9716397173

@@ -97298,8 +97308,10 @@ enum <dfn>WorkerType</dfn> { "classic", "module" };
9729897308
<li>
9729997309
<p>Let <var>worker URL</var> be the <span>resulting URL record</span>.</p>
9730097310

97301-
<p class="note">Any <span data-x="same origin">same-origin</span> URL will do, including <code
97302-
data-x="blob protocol">blob:</code> URLs.</p>
97311+
<p class="note">Any <span data-x="same origin">same-origin</span> URL (including <code
97312+
data-x="blob protocol">blob:</code> URLs) can be used. <code data-x="data protocol">data:</code>
97313+
URLs can also be used, but they create a worker with an <span
97314+
data-x="concept-origin-opaque">opaque origin</span>.</p>
9730397315
</li>
9730497316

9730597317
<li><p>Let <var>worker</var> be a new <code>Worker</code> object.</p></li>
@@ -97373,8 +97385,10 @@ interface <dfn>SharedWorker</dfn> : <span>EventTarget</span> {
9737397385
<li>
9737497386
<p>Otherwise, let <var>urlRecord</var> be the <span>resulting URL record</span>.</p>
9737597387

97376-
<p class="note">Any <span data-x="same origin">same-origin</span> URL will do, including <code
97377-
data-x="blob protocol">blob:</code> URLs.</p>
97388+
<p class="note">Any <span data-x="same origin">same-origin</span> URL (including <code
97389+
data-x="blob protocol">blob:</code> URLs) can be used. <code data-x="data protocol">data:</code>
97390+
URLs can also be used, but they create a worker with an <span
97391+
data-x="concept-origin-opaque">opaque origin</span>.</p>
9737897392
</li>
9737997393

9738097394
<li><p>Let <var>worker</var> be a new <code>SharedWorker</code> object.</p></li>
@@ -97395,15 +97409,25 @@ interface <dfn>SharedWorker</dfn> : <span>EventTarget</span> {
9739597409
<ol>
9739697410
<li><p>Let <var>worker global scope</var> be null.</p></li>
9739797411

97398-
<li><p>If there exists a <code>SharedWorkerGlobalScope</code> object whose <span
97399-
data-x="dom-WorkerGlobalScope-closing">closing</span> flag is false, whose <span
97400-
data-x="concept-SharedWorkerGlobalScope-name">name</span> is exactly equal to <var>name</var>,
97401-
whose <span data-x="concept-SharedWorkerGlobalScope-constructor-url">constructor url</span>
97402-
<span data-x="concept-url-equals">equals</span> <var>urlRecord</var>, and whose <span>relevant
97403-
settings object</span>'s <span data-x="concept-settings-object-origin">origin</span> is
97404-
<span>same origin</span> with <var>outside settings</var>'s <span
97405-
data-x="concept-settings-object-origin">origin</span>, then set <var>worker global scope</var>
97406-
to that <code>SharedWorkerGlobalScope</code> object.</p></li>
97412+
<li>
97413+
<p>If there exists a <code>SharedWorkerGlobalScope</code> object whose <span
97414+
data-x="dom-WorkerGlobalScope-closing">closing</span> flag is false, <span
97415+
data-x="concept-SharedWorkerGlobalScope-constructor-origin">constructor origin</span> is
97416+
<span>same origin</span> with <var>outside settings</var>'s <span
97417+
data-x="concept-settings-object-origin">origin</span>, <span
97418+
data-x="concept-SharedWorkerGlobalScope-constructor-url">constructor url</span> <span
97419+
data-x="concept-url-equals">equals</span> <var>urlRecord</var>, and <span
97420+
data-x="concept-SharedWorkerGlobalScope-name">name</span> is <var>name</var>, then set
97421+
<var>worker global scope</var> to that <code>SharedWorkerGlobalScope</code> object.</p>
97422+
97423+
<p class="note"><code data-x="data protocol">data:</code> URLs create a worker with an <span
97424+
data-x="concept-origin-opaque">opaque origin</span>. Both the <span
97425+
data-x="concept-SharedWorkerGlobalScope-constructor-origin">constructor origin</span> and
97426+
<span data-x="concept-SharedWorkerGlobalScope-constructor-url">constructor url</span> are
97427+
compared so the same <code data-x="data protocol">data:</code> URL can be used within an
97428+
<span>origin</span> to get to the same <code>SharedWorkerGlobalScope</code> object, but cannot
97429+
be used to bypass the <span>same origin</span> restriction.</p>
97430+
</li>
9740797431

9740897432
<li>
9740997433
<p>If <var>worker global scope</var> is not null, but the user agent has been

0 commit comments

Comments
 (0)