Skip to content

Commit

Permalink
Introduce browsing context groups
Browse files Browse the repository at this point in the history
The grouping concepts unit of related browsing contexts and unit of similar-origin browsing contexts were not accurate, due to browsing contexts being able to hold a sequence of (potentially cross-site) documents.

Fixes #4198.
  • Loading branch information
annevk committed Feb 22, 2019
1 parent bc58c77 commit 30bcffd
Showing 1 changed file with 105 additions and 33 deletions.
138 changes: 105 additions & 33 deletions source
Original file line number Diff line number Diff line change
Expand Up @@ -2637,6 +2637,7 @@ a.setAttribute('href', 'https://example.com/'); // change the content attribute
<ul class="brief">
<li><dfn data-x="concept-host" data-x-href="https://url.spec.whatwg.org/#concept-host">host</dfn></li>
<li><dfn data-x-href="https://url.spec.whatwg.org/#host-public-suffix">public suffix</dfn></li>
<li><dfn data-x-href="https://url.spec.whatwg.org/#host-same-site">same site</dfn></li>
<li><dfn data-x="concept-domain" data-x-href="https://url.spec.whatwg.org/#concept-domain">domain</dfn></li>
<li><dfn data-x-href="https://url.spec.whatwg.org/#concept-ipv4">IPv4 address</dfn></li>
<li><dfn data-x-href="https://url.spec.whatwg.org/#concept-ipv6">IPv6 address</dfn></li>
Expand Down Expand Up @@ -77192,7 +77193,11 @@ dictionary <dfn>DragEventInit</dfn> : <span>MouseEventInit</span> {
context</dfn>:</p>

<ol>
<li><p>Return the result of <span>creating a new browsing context</span> with null.</p></li>
<li><p>Let <var>group</var> be the result of <span>creating a new browsing context
group</span>.</p></li>

<li><p>Return <var>group</var>'s <span data-x="bcg browsing contexts">browsing
contexts</span>[0].</p></li>
</ol>

<p class="note">This creates a <span>top-level browsing context</span>.</p>
Expand All @@ -77204,6 +77209,9 @@ dictionary <dfn>DragEventInit</dfn> : <span>MouseEventInit</span> {
<li><p>Let <var>browsingContext</var> be the result of <span>creating a new browsing
context</span> with <var>opener</var>'s <span>active document</span>.</p></li>

<li><p><span data-x="bcg append">Append</span> <var>browsingContext</var> to <var>opener</var>'s
<span>top-level browsing context</span>'s <span data-x="tlbc group">group</span>.</p></li>

<li><p>Set <var>browsingContext</var>'s <span>opener browsing context</span> to
<var>opener</var>.</p></li>

Expand Down Expand Up @@ -77293,6 +77301,9 @@ dictionary <dfn>DragEventInit</dfn> : <span>MouseEventInit</span> {
data-export="">top-level browsing context</dfn> for itself and all of the browsing contexts for
which it is an <span>ancestor browsing context</span>.</p>

<p>A <span>top-level browsing context</span> has an associated <dfn data-x="tlbc
group">group</dfn> (null or a <span>browsing context group</span>). It is initially null.</p>

<p>It is possible to create new browsing contexts that are related to a <span>top-level browsing
context</span> without being nested through an element. Such browsing contexts are called <dfn
data-x="auxiliary browsing context" data-lt="auxiliary browsing context" data-export="">auxiliary
Expand Down Expand Up @@ -77684,36 +77695,60 @@ console.assert(iframeWindow.frameElement === null);

<h4>Groupings of browsing contexts</h4>

<p>Each <span>browsing context</span> is defined as having a list of one or more <dfn>directly
reachable browsing contexts</dfn>. These are:</p>
<p>A user agent holds a <dfn>browsing context group set</dfn> (a <span>set</span> of <span
data-x="browsing context group">browsing context groups</span>).</p>

<ul>
<p>A <dfn>browsing context group</dfn> holds <dfn data-x="bcg browsing contexts">browsing
contexts</dfn> (a <span>set</span> of <span data-x="top-level browsing context">top-level browsing
contexts</span>).</p>

<li>The <span>browsing context</span> itself.</li>
<p>To <dfn>create a new browsing context group</dfn>, run these steps:</p>

<li>All the <span>browsing context</span>'s <span data-x="child browsing context">child browsing
contexts</span>.</li>
<ol>
<li><p>Let <var>group</var> be a new <span>browsing context group</span>.</p></li>

<li>The <span>browsing context</span>'s <span>parent browsing context</span>.</li>
<li><p><span data-x="set append">Append</span> <var>group</var> to user agent's <span>browsing
context group set</span>.</p></li>

<li>All the <span data-x="browsing context">browsing contexts</span> that have the <span>browsing
context</span> as their <span>opener browsing context</span>.</li>
<li><p><span data-x="bcg append">Append</span> the result of <span>creating a new browsing
context</span> with null to <var>group</var>.</p></li>

<li>The <span>browsing context</span>'s <span>opener browsing context</span>.</li>
<li><p>Return <var>group</var>.</p></li>
</ol>

</ul>
<p>To <dfn data-x="bcg append">append</dfn> a <span>top-level browsing context</span>
<var>browsingContext</var> to a <span>browsing context group</span> <var>group</var>, run these
steps:</p>

<p>The transitive closure of all the <span data-x="browsing context">browsing contexts</span> that
are <span>directly reachable browsing contexts</span> forms a <dfn>unit of related browsing
contexts</dfn>.</p>
<ol>
<li><p><span data-x="set append">Append</span> <var>browsingContext</var> to <var>group</var>'s
<span data-x="bcg browsing contexts">browsing contexts</span>.</p></li>

<p>Each <span>unit of related browsing contexts</span> is then further divided into the smallest
number of groups such that every member of each group has an <span>active document</span> with an
<span>origin</span> that, through appropriate manipulation of the <code
data-x="dom-document-domain">document.domain</code> attribute, could be made to be <span>same
origin-domain</span> with other members of the group, but could not be made the same as members of
any other group. Each such group is a <dfn data-export="">unit of related similar-origin browsing
contexts</dfn>.</p>
<li><p>Set <var>browsingContext</var>'s <span data-x="tlbc group">group</span> to
<var>group</var>.</p></li>
</ol>

<p>To <dfn data-x="bcg remove">remove</dfn> a <span>top-level browsing context</span>
<var>browsingContext</var>, run these steps:</p>

<ol>
<li><p>Let <var>group</var> be <var>browsingContext</var>'s <span data-x="tlbc
group">group</span>.</p></li>

<li><p>Set <var>browsingContext</var>'s <span data-x="tlbc group">group</span> to null.</p></li>

<li><p><span data-x="list remove">Remove</span> <var>browsingContext</var> from
<var>group</var>'s <span data-x="bcg browsing contexts">browsing contexts</span>.</p></li>

<li><p>If <var>group</var>'s <span data-x="bcg browsing contexts">browsing contexts</span> <span
data-x="list is empty">is empty</span>, then <span data-x="list remove">remove</span>
<var>group</var> from user agent's <span>browsing context group set</span>.</p></li>
</ol>

<p class="note">The HTML Standard used to define <span id="unit-of-related-browsing-contexts">unit
of related browsing contexts</span> and <span
id="unit-of-related-similar-origin-browsing-contexts">unit of related similar-origin browsing
contexts</span>. These have been removed as they were not adequate.</p>

</div>

Expand Down Expand Up @@ -77909,7 +77944,7 @@ console.assert(iframeWindow.frameElement === null);
most recently focused, or more closely related.</p>

<p class="&#x0058;&#x0058;&#x0058;">This will be made more precise in <a
href="https://github.com/whatwg/html/issues/1440">issue #1440</a>.</p>
href="https://github.com/whatwg/html/issues/313">issue #313</a>.</p>
</li>

<li>
Expand Down Expand Up @@ -79046,14 +79081,20 @@ dictionary <dfn>WindowPostMessageOptions</dfn> : <span>PostMessageOptions</span>

</ol>

<p>When <dfn data-export="">a <em>browsing context</em> is discarded</dfn>, the strong reference
from the user agent itself to the <span>browsing context</span> must be severed, and all the
<code>Document</code> objects for all the entries in the <span>browsing context</span>'s session
history must be <span data-x="discard a document">discarded</span> as well.</p>
<p>To <dfn data-export="" data-x="a browsing context is discarded">discard</dfn> a <span>browsing
context</span> <var>browsingContext</var>, run these steps:</p>

<ol>
<li><p><span data-x="discard a document">Discard</span> all <code>Document</code> objects for all
the entries in <var>browsingContext</var>'s session history.</p></li>

<li><p>If <var>browsingContext</var> is a <span>top-level browsing context</span>, then
<span data-x="bcg remove">remove</span> <var>browsingContext</var>.</p></li>
</ol>

<p>User agents may <span data-x="a browsing context is discarded">discard</span> <span
data-x="top-level browsing context">top-level browsing contexts</span> at any time (typically, in
response to user requests, e.g. when a user force-closes a window containing one or more <span
response to user requests, e.g., when a user force-closes a window containing one or more <span
data-x="top-level browsing context">top-level browsing contexts</span>). Other <span
data-x="browsing context">browsing contexts</span> must be discarded once their
<code>WindowProxy</code> object is eligible for garbage collection, in addition to the other
Expand Down Expand Up @@ -89043,19 +89084,50 @@ import "https://example.com/foo/../module2.mjs";</code></pre>
data-x="agent">agents</span> and <span data-x="agent cluster">agent clusters</span> are
created.</p>

<p>To determine whether a <code>Window</code> object <var>A</var> and a <code>Window</code> object
<var>B</var> are considered <dfn>same-agent <code>Window</code> objects</dfn>, run
these steps:</p>

<ol>
<li><p>If <var>A</var>'s <span>relevant settings object</span>'s <span>responsible browsing
context</span>'s <span>top-level browsing context</span> <span data-x="tlbc group">group</span>
is not <var>B</var>'s <span>relevant settings object</span>'s <span>responsible browsing
context</span>'s <span>top-level browsing context</span> <span data-x="tlbc group">group</span>,
then return false.</p></li>

<li><p>Let <var>originA</var> be <var>A</var>'s <span>relevant settings object</span>'s <span
data-x="concept-settings-object-origin">origin</span> and <var>originB</var> be <var>B</var>'s
<span>relevant settings object</span>'s <span
data-x="concept-settings-object-origin">origin</span>.</p></li>

<li><p>If <var>originA</var> is <span>same origin</span> with <var>originB</var>, then return
true.</p></li>

<li><p>If <var>originA</var> or <var>originB</var> is not a <span
data-x="concept-origin-tuple">tuple origin</span>, then return false.</p></li>

<li><p>If <var>originA</var>'s <span data-x="concept-origin-scheme">scheme</span> is not
<var>originB</var>'s <span data-x="concept-origin-scheme">scheme</span>, then return
false.</p></li>

<li><p>If <var>originA</var>'s <span data-x="concept-origin-host">host</span> is <span>same
site</span> with <var>originB</var>'s <span data-x="concept-origin-host">host</span>, then return
true.</p></li>

<li><p>Return false.</p></li>
</ol>

<dl>
<dt><dfn data-export="">Similar-origin window agent</dfn></dt>
<dd>
<p>An <span>agent</span> whose [[CanBlock]] is false and whose set of <span
data-x="JavaScript realm">realms</span> consists of all <span
data-x="concept-global-object-realm">realms</span> of <code>Window</code> objects whose
<span>relevant settings object</span>'s <span>responsible browsing context</span> is in the same
<span>unit of related similar-origin browsing contexts</span>.</p>
data-x="concept-global-object-realm">realms</span> of all <span>same-agent <code>Window</code>
objects</span>.</p>

<p class="note">Two <code>Window</code> objects that are <span>same origin</span> can be in
different <span data-x="similar-origin window agent">similar-origin window agents</span>, for
instance if they are each in their own <span>unit of related similar-origin browsing
contexts</span>.</p>
instance if they are each in their own <span>browsing context group</span>.</p>
</dd>

<dt><dfn data-export="">Dedicated worker agent</dfn></dt>
Expand Down

0 comments on commit 30bcffd

Please sign in to comment.