Skip to content

Commit

Permalink
Define how data URLs affect workers
Browse files Browse the repository at this point in the history
Fixes #1243. Basically, data URLs create (shared) workers that have a
unique opaque origin.
  • Loading branch information
annevk authored and domenic committed Oct 10, 2016
1 parent 7204ca9 commit c592f62
Showing 1 changed file with 40 additions and 16 deletions.
56 changes: 40 additions & 16 deletions source
Expand Up @@ -96549,7 +96549,9 @@ 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-url">constructor url</dfn> and <dfn
data-x="concept-SharedWorkerGlobalScope-constructor-origin">constructor origin</dfn>, <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>
Expand Down Expand Up @@ -96762,6 +96764,11 @@ interface <dfn>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span> {
<p>If <var>is shared</var> is true, then:</p>

<ol>
<li><p>Set <var>worker global scope</var>'s <span
data-x="concept-SharedWorkerGlobalScope-constructor-origin">constructor origin</span> to
<var>outside settings</var>'s <span
data-x="concept-settings-object-origin">origin</span>.</p></li>

<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>
Expand Down Expand Up @@ -97142,7 +97149,7 @@ interface <dfn>AbstractWorker</dfn> {
<dt>The <span>API URL character encoding</span></dt>
<dd>

<p>Return UTF-8.</p>
<p>Return <span>UTF-8</span>.</p>

</dd>

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

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

</dd>

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

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

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

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

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

<li><p>If there exists a <code>SharedWorkerGlobalScope</code> object whose <span
data-x="dom-WorkerGlobalScope-closing">closing</span> flag is false, whose <span
data-x="concept-SharedWorkerGlobalScope-name">name</span> is exactly equal to <var>name</var>,
whose <span data-x="concept-SharedWorkerGlobalScope-constructor-url">constructor url</span>
<span data-x="concept-url-equals">equals</span> <var>urlRecord</var>, and whose <span>relevant
settings object</span>'s <span data-x="concept-settings-object-origin">origin</span> is
<span>same origin</span> with <var>outside settings</var>'s <span
data-x="concept-settings-object-origin">origin</span>, then set <var>worker global scope</var>
to that <code>SharedWorkerGlobalScope</code> object.</p></li>
<li>
<p>If there exists a <code>SharedWorkerGlobalScope</code> object whose <span
data-x="dom-WorkerGlobalScope-closing">closing</span> flag is false, <span
data-x="concept-SharedWorkerGlobalScope-constructor-origin">constructor origin</span> is
<span>same origin</span> with <var>outside settings</var>'s <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>

<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
data-x="concept-SharedWorkerGlobalScope-constructor-origin">constructor origin</span> and
<span data-x="concept-SharedWorkerGlobalScope-constructor-url">constructor url</span> are
compared so the same <code data-x="data protocol">data:</code> URL can be used within an
<span>origin</span> to get to the same <code>SharedWorkerGlobalScope</code> object, but cannot
be used to bypass the <span>same origin</span> restriction.</p>
</li>

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

0 comments on commit c592f62

Please sign in to comment.