@@ -8084,18 +8084,16 @@ interface <dfn>DOMStringList</dfn> {
8084
8084
<p>If ! <span>IsSharedArrayBuffer</span>(<var>value</var>) is true, then:
8085
8085
8086
8086
<ol>
8087
- <li><p>Let <var>agentCluster</var> be the <span>surrounding agent</span>'s
8088
- <span>agent cluster</span>.</p></li>
8089
8087
<li>
8090
- <p>If <var>agentCluster</var >'s <span
8088
+ <p>If the <span>current settings object</span >'s <span
8091
8089
data-x="concept-settings-object-cross-origin-isolated-capability">cross-origin isolated
8092
- capability</span> is false, then throw a
8093
- <span>"<code>DataCloneError</code>"</span>< code>DOMException</code>.</p>
8090
+ capability</span> is false, then throw a <span>"<code>DataCloneError</code>"</span>
8091
+ <code>DOMException</code>.</p>
8094
8092
8095
8093
<p class="note">This check is only needed when serializing (and not when deserializing) as
8096
- <var data-x="concept-settings-object-cross-origin-isolated-capability">cross-origin isolated
8097
- </var > cannot change over time and a <code>SharedArrayBuffer</code> cannot leave an
8098
- <span>agent cluster</span>.</p>
8094
+ the <span data-x="concept-settings-object-cross-origin-isolated-capability">cross-origin
8095
+ isolated capability</span > cannot change over time and a <code>SharedArrayBuffer</code>
8096
+ cannot leave an <span>agent cluster</span>.</p>
8099
8097
</li>
8100
8098
8101
8099
<li><p>If <var>forStorage</var> is true, then throw a
@@ -77985,44 +77983,6 @@ console.assert(iframeWindow.frameElement === null);
77985
77983
keys</span> to <span data-x="agent cluster">agent clusters</span>). User agents are responsible
77986
77984
for collecting agent clusters when it is deemed that nothing can access them anymore.</p>
77987
77985
77988
- <p>A <span>browsing context group</span> has a <dfn><var
77989
- data-x="bcg-cross-origin-isolation">cross-origin-isolation</var></dfn> variable of type
77990
- <span>cross-origin-isolation</span>. Initially set to"<code
77991
- data-x="cross-origin-isolation-none">isolation-none</code>"</p>
77992
-
77993
- <p>A <dfn>cross-origin-isolation</dfn> type can take 3 possible values: </p>
77994
- <ul>
77995
- <li><dfn><code data-x="cross-origin-isolation-none">isolation-none</code></dfn></li>
77996
- <li><dfn><code data-x="cross-origin-isolation-logical">isolation-logical</code></dfn></li>
77997
- <li><dfn><code data-x="cross-origin-isolation-concrete">isolation-concrete</code></dfn></li>
77998
- </ul>
77999
-
78000
- <div class="note">
78001
- <p>
78002
- <code data-x="cross-origin-isolation-logical">isolation-logical</code> and
78003
- <code data-x="cross-origin-isolation-concrete">isolation-concrete</code> are similar. They are both used
78004
- for <span>browsing context group</span>, where:
78005
- </p>
78006
- <ul>
78007
- <li><p>Every top-level <span>Document</span> has `<code data-x="">
78008
- <span data-x="http-cross-origin-opener-policy">Cross-Origin-Opener-Policy</span>:
78009
- <span data-x="coop-same-origin">same-origin</span></code>`</p></li>
78010
-
78011
- <li><p>Every <span>Document</span> has
78012
- `<code data-x=""><span>Cross-Origin-Embedder-Policy</span>:
78013
- <span data-x="coep-require-corp">require-corp</span></code>`</p></li>
78014
- </ul>
78015
- <p>
78016
- On some platforms, it is difficult to provide the security properties required
78017
- by the <span data-x="concept-settings-object-cross-origin-isolated-capability">cross-origin
78018
- isolated capability</span>. As a result, only <code
78019
- data-x="cross-origin-isolation-concrete">isolation-concrete</code> can grant access to the <span
78020
- data-x="concept-settings-object-cross-origin-isolated-capability">cross-origin isolated
78021
- capability</span>. <code data-x="cross-origin-isolation-concrete">isolation-concrete</code> is
78022
- used on platform not supporting this capability.
78023
- </p>
78024
- </div>
78025
-
78026
77986
<p>A <span>browsing context group</span> has an associated <dfn>historical agent cluster key
78027
77987
map</dfn>, which is a <span data-x="ordered map">map</span> of <span
78028
77988
data-x="origin">origins</span> to <span data-x="agent cluster key">agent cluster keys</span>. This
@@ -78033,6 +77993,41 @@ console.assert(iframeWindow.frameElement === null);
78033
77993
<p class="note">The <span>historical agent cluster key map</span> only ever gains entries over the
78034
77994
lifetime of the browsing context group.</p>
78035
77995
77996
+ <p>A <span>browsing context group</span> has a <dfn
77997
+ data-x="bcg-cross-origin-isolation">cross-origin isolation mode</dfn>, which is a
77998
+ <span>cross-origin isolation mode</span>. It is initially "<code
77999
+ data-x="cross-origin-isolation-none">none</code>".</p>
78000
+
78001
+ <p>A <dfn>cross-origin isolation mode</dfn> is one of three possible values: "<dfn><code
78002
+ data-x="cross-origin-isolation-none">none</code></dfn>", "<dfn><code
78003
+ data-x="cross-origin-isolation-logical">logical</code></dfn>", or "<dfn><code
78004
+ data-x="cross-origin-isolation-concrete">concrete</code></dfn>".</p>
78005
+
78006
+ <div class="note">
78007
+ <p>"<code data-x="cross-origin-isolation-logical">logical</code>" and "<code
78008
+ data-x="cross-origin-isolation-concrete">concrete</code>" are similar. They are both used for
78009
+ <span data-x="browsing context group">browsing context groups</span> where:</p>
78010
+
78011
+ <ul>
78012
+ <li><p>every top-level <span>Document</span> has `<code data-x=""><span
78013
+ data-x="http-cross-origin-opener-policy">Cross-Origin-Opener-Policy</span>: <span
78014
+ data-x="coop-same-origin">same-origin</span></code>`, and</p></li>
78015
+
78016
+ <li><p>every <span>Document</span> has `<code
78017
+ data-x=""><span>Cross-Origin-Embedder-Policy</span>: <span
78018
+ data-x="coep-require-corp">require-corp</span></code>`.</p></li>
78019
+ </ul>
78020
+
78021
+ <p>On some platforms, it is difficult to provide the security properties required to grant safe
78022
+ access to the APIs gated by the <span
78023
+ data-x="concept-settings-object-cross-origin-isolated-capability">cross-origin isolated
78024
+ capability</span>. As a result, only "<code
78025
+ data-x="cross-origin-isolation-concrete">concrete</code>" can grant access that capability.
78026
+ "<code data-x="cross-origin-isolation-logical">logical</code>" is used on platform not supporting
78027
+ this capability, where various restrictions imposed by cross-origin isolation will still apply,
78028
+ but the capability is not granted.</p>
78029
+ </div>
78030
+
78036
78031
<p>To <dfn data-x="creating a new browsing context group">create a new browsing context
78037
78032
group</dfn>, run these steps:</p>
78038
78033
@@ -79681,16 +79676,17 @@ interface <dfn>BarProp</dfn> {
79681
79676
79682
79677
<dt>The <span data-x="concept-settings-object-cross-origin-isolated-capability">cross-origin
79683
79678
isolated capability</span></dt>
79684
- <dd><p>Return the logical conjunction of:</p>
79685
- <ol>
79686
- <li><p><var>realm</var>'s <span>agent cluster</span>'s <var
79687
- data-x="agent-cluster-cross-origin-isolation">cross-origin-isolation</var> is <code
79688
- data-x="cross-origin-isolation-concrete">isolation-concrete</code></p></li>
79679
+ <dd>
79680
+ <p>Return true if both of the following hold, and false otherwise:</p>
79681
+ <ol>
79682
+ <li><p><var>realm</var>'s <span>agent cluster</span>'s <span
79683
+ data-x="agent-cluster-cross-origin-isolation">cross-origin-isolation mode</span> is "<code
79684
+ data-x="cross-origin-isolation-concrete">concrete</code>", and</p></li>
79689
79685
79690
- <li><p><span data-x="concept-document-window">associated <code>Document</code></span> is
79691
- <span>allowed to use</span> the "<code
79692
- data-x="cross-origin-isolated-feature">cross-origin-isolated</code>" feature.</p>
79693
- </ol>
79686
+ <li><p><var>window</var>'s < span data-x="concept-document-window">associated
79687
+ <code>Document</code></span> is < span>allowed to use</span> the "<code
79688
+ data-x="cross-origin-isolated-feature">cross-origin-isolated</code>" feature.</p></li>
79689
+ </ol>
79694
79690
</dd>
79695
79691
</dl>
79696
79692
</li>
@@ -80466,9 +80462,9 @@ interface <dfn>BarProp</dfn> {
80466
80462
a registrable domain suffix of and is not equal to</span> <var>effectiveDomain</var>, then throw
80467
80463
a <span>"<code>SecurityError</code>"</span> <code>DOMException</code>.</p></li>
80468
80464
80469
- <li><p>If the <span>surrounding agent</span>'s <span>agent cluster</span>'s
80470
- <var data-x="agent-cluster-cross-origin-isolation">cross-origin- isolation</var > is not <code
80471
- data-x="cross-origin-isolation-none">isolation- none</code> then return.</p></li>
80465
+ <li><p>If the <span>surrounding agent</span>'s <span>agent cluster</span>'s <span
80466
+ data-x="agent-cluster-cross-origin-isolation">cross-origin isolation mode</span > is not " <code
80467
+ data-x="cross-origin-isolation-none">none</code>", then return.</p></li>
80472
80468
80473
80469
<li><p>If the <span>surrounding agent</span>'s <span>agent cluster</span>'s <span>is
80474
80470
origin-keyed</span> is true, then return.</p></li>
@@ -80577,9 +80573,9 @@ interface <dfn>BarProp</dfn> {
80577
80573
and the <code data-x="dom-originAgentCluster">originAgentCluster</code> getter will always return
80578
80574
true.</p>
80579
80575
80580
- <p class="note">Similarly, <code>Document</code>s with <span>agent cluster</span>'s
80581
- <var data-x="agent-cluster-cross-origin-isolation">cross-origin-isolated</var> not <code
80582
- data-x="cross-origin-isolation-none">isolation- none</code> are automatically origin-isolated . The
80576
+ <p class="note">Similarly, <code>Document</code>s whose <span>agent cluster</span>'s
80577
+ <span data-x="agent-cluster-cross-origin-isolation">cross-origin isolation mode</span> is not
80578
+ "<code data-x="cross-origin-isolation-none">none</code>" are automatically origin-keyed . The
80583
80579
`<code data-x="http-origin-agent-cluster">Origin-Agent-Cluster</code>` header might be useful as
80584
80580
an additional hint to implementations about resource allocation, since the `<code
80585
80581
data-x="http-cross-origin-opener-policy">Cross-Origin-Opener-Policy</code>` and
@@ -80945,9 +80941,9 @@ interface <dfn>BarProp</dfn> {
80945
80941
<dd>
80946
80942
<p>This behaves the same as "<code data-x="coop-same-origin">same-origin</code>", with the
80947
80943
addition that it sets the (new) <span>top-level browsing context</span>'s <span data-x="tlbc
80948
- group">group</span>'s <span data-x="bcg-cross-origin-isolation">cross-origin-isolation</span> to
80949
- < code data-x="cross-origin-isolation-logical">isolation- logical</code> or <code
80950
- data-x="cross-origin-isolation-concrete">isolation- concrete</code></p>
80944
+ group">group</span>'s <span data-x="bcg-cross-origin-isolation">cross-origin isolation
80945
+ mode</span> to one of "< code data-x="cross-origin-isolation-logical">logical</code>" or " <code
80946
+ data-x="cross-origin-isolation-concrete">concrete</code>". </p>
80951
80947
80952
80948
<p class="note">"<code data-x="coop-same-origin-plus-COEP">same-origin-plus-COEP</code>" cannot
80953
80949
be directly set via the `<code
@@ -81354,20 +81350,21 @@ interface <dfn>BarProp</dfn> {
81354
81350
<li><p>Let <var>newBrowsingContext</var> be the result of <span>creating a new top-level browsing
81355
81351
context</span>.</p></li>
81356
81352
81357
- <li><p>If <var>navigationCOOP</var>'s <span data-x="coop-struct-value">value</span> is "<code
81358
- data-x="coop-same-origin-plus-COEP">same-origin-plus-COEP</code>", then set
81359
- <var>newBrowsingContext</var>'s <span data-x="tlbc group">group</span>'s <span
81360
- data-x="bcg-cross-origin-isolation">cross-origin-isolation</span> to: <code
81361
- data-x="cross-origin-isolation-logical">isolation-logical</code> or <code
81362
- data-x="cross-origin-isolation-concrete">isolation-concrete</code>. The one used is
81363
- platform-specific. </p>
81353
+ <li>
81354
+ <p>If <var>navigationCOOP</var>'s <span data-x="coop-struct-value">value</span> is "<code
81355
+ data-x="coop-same-origin-plus-COEP">same-origin-plus-COEP</code>", then set
81356
+ <var>newBrowsingContext</var>'s <span data-x="tlbc group">group</span>'s <span
81357
+ data-x="bcg-cross-origin-isolation">cross-origin isolation mode</span> to either "<code
81358
+ data-x="cross-origin-isolation-logical">logical</code>" or "<code
81359
+ data-x="cross-origin-isolation-concrete">concrete</code>". The choice of which is
81360
+ <span>implementation-defined</span>.</p>
81364
81361
81365
- <p class="note">It is difficult on some platforms to provide the security properties required by
81366
- the <span data-x="concept-settings-object-cross-origin-isolated-capability">cross-origin isolated
81367
- capability</span>. Only the <code
81368
- data-x="cross-origin-isolation-concrete">isolation- concrete</code> might grant access to it.
81369
- <code data-x="cross-origin-isolation-logical">Isolation- logical</code> won't and is used for the
81370
- platforms not supporting it .</p>
81362
+ <p class="note">It is difficult on some platforms to provide the security properties required by
81363
+ the <span data-x="concept-settings-object-cross-origin-isolated-capability">cross-origin
81364
+ isolated capability</span>. Only " <code
81365
+ data-x="cross-origin-isolation-concrete">concrete</code>" might grant access to it. "<code
81366
+ data-x="cross-origin-isolation-logical">logical</code>" won't, and is used by implementations on
81367
+ other platforms .</p>
81371
81368
</li>
81372
81369
81373
81370
<li>
@@ -86799,9 +86796,9 @@ interface <dfn>BeforeUnloadEvent</dfn> : <span>Event</span> {
86799
86796
directly or by using <code data-x="dom-document-domain">document.domain</code>.</p>
86800
86797
86801
86798
<p>If the encompassing <span>agent cluster</span>'s <span
86802
- data-x="agent-cluster-cross-origin-isolation">cross-origin- isolation</span> is not <code
86803
- data-x="cross-origin-isolation-none">isolation- none</code>, then all the <code>Window</code>
86804
- objects will be <span>same origin</span>, can reach each other directly, and <code
86799
+ data-x="agent-cluster-cross-origin-isolation">cross-origin isolation mode </span> is not " <code
86800
+ data-x="cross-origin-isolation-none">none</code>" , then all the <code>Window</code> objects will
86801
+ be <span>same origin</span>, can reach each other directly, and <code
86805
86802
data-x="dom-document-domain">document.domain</code> will no-op.</p>
86806
86803
86807
86804
<p class="note">Two <code>Window</code> objects that are <span>same origin</span> can be in
@@ -86884,10 +86881,10 @@ interface <dfn>BeforeUnloadEvent</dfn> : <span>Event</span> {
86884
86881
86885
86882
<div w-nodev>
86886
86883
86887
- <p>An <span>agent cluster</span> has an associated <dfn><var
86888
- data-x="agent-cluster-cross-origin-isolation">cross-origin- isolation</var></ dfn> variable, of type
86889
- <span>cross-origin- isolation</span>. Initially set to <code
86890
- data-x="cross-origin-isolation-none">isolation- none</code>.
86884
+ <p>An <span>agent cluster</span> has an associated <dfn
86885
+ data-x="agent-cluster-cross-origin-isolation">cross-origin isolation mode</ dfn>, which is a
86886
+ <span>cross-origin isolation mode </span>. It is initially " <code
86887
+ data-x="cross-origin-isolation-none">none</code>".</p>
86891
86888
86892
86889
<p>An <span>agent cluster</span> has an associated <dfn>is origin-keyed</dfn> (a boolean), which
86893
86890
is initially false.</p>
@@ -86915,10 +86912,9 @@ interface <dfn>BeforeUnloadEvent</dfn> : <span>Event</span> {
86915
86912
86916
86913
<li><p>Let <var>key</var> be <var>site</var>.</p></li>
86917
86914
86918
- <li><p>If <var>group</var>'s <span
86919
- data-x="bcg-cross-origin-isolation">cross-origin-isolation</span> is not <code
86920
- data-x="cross-origin-isolation-none">isolation-none</code>, then set <var>key</var> to
86921
- <var>origin</var>.</p></li>
86915
+ <li><p>If <var>group</var>'s <span data-x="bcg-cross-origin-isolation">cross-origin isolation
86916
+ mode</span> is not "<code data-x="cross-origin-isolation-none">none</code>", then set
86917
+ <var>key</var> to <var>origin</var>.</p></li>
86922
86918
86923
86919
<li><p>Otherwise, if <var>group</var>'s <span>historical agent cluster key
86924
86920
map</span>[<var>origin</var>] <span data-x="map exists">exists</span>, then set <var>key</var> to
@@ -86943,9 +86939,10 @@ interface <dfn>BeforeUnloadEvent</dfn> : <span>Event</span> {
86943
86939
<ol>
86944
86940
<li><p>Let <var>agentCluster</var> be a new <span>agent cluster</span>.</p></li>
86945
86941
86946
- <li><p>Set <var>agentCluster</var>'s <var
86947
- data-x="agent-cluster-cross-origin-isolation">cross-origin-isolation</var> to <var>group</var>'s
86948
- <var data-x="bcg-cross-origin-isolation">cross-origin-isolation</var>.</p></li>
86942
+ <li><p>Set <var>agentCluster</var>'s <span
86943
+ data-x="agent-cluster-cross-origin-isolation">cross-origin isolation mode</span> to
86944
+ <var>group</var>'s <span data-x="bcg-cross-origin-isolation">cross-origin isolation
86945
+ mode</span>.</p></li>
86949
86946
86950
86947
<li><p>Set <var>agentCluster</var>'s <span>is origin-keyed</span> to true if <var>key</var>
86951
86948
equals <var>origin</var>; otherwise false.</p></li>
@@ -87326,9 +87323,9 @@ interface <dfn>BeforeUnloadEvent</dfn> : <span>Event</span> {
87326
87323
href="https://github.com/tc39/ecma262/issues/1357">tc39/ecma262#1357</a>.</span></p></li>
87327
87324
87328
87325
<li>
87329
- <p>If <var>agent</var>'s <span>agent cluster</span>'s <var
87330
- data-x="agent-cluster-cross-origin-isolation">cross-origin- isolation</var > is <code
87331
- data-x="cross-origin-isolation-none">isolation- none</code>, then:
87326
+ <p>If <var>agent</var>'s <span>agent cluster</span>'s <span
87327
+ data-x="agent-cluster-cross-origin-isolation">cross-origin isolation mode</span > is " <code
87328
+ data-x="cross-origin-isolation-none">none</code>" , then:</p>
87332
87329
87333
87330
<ol>
87334
87331
<li><p>Let <var>global</var> be <var>realm</var>'s <span data-x="concept-realm-global">global
@@ -99248,11 +99245,11 @@ interface <dfn>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span> {
99248
99245
<p>If <var>worker global scope</var>'s <span
99249
99246
data-x="concept-WorkerGlobalScope-embedder-policy">embedder policy</span> is "<code
99250
99247
data-x="coep-require-corp">require-corp</code>" and <var>is shared</var> is true, then set
99251
- <var>agent</var>'s <span>agent cluster</span>'s <var
99252
- data-x="agent-cluster-cross-origin-isolation">cross-origin-isolated</var > to <code
99253
- data-x="cross-origin-isolation-logical">isolation- logical</code> or <code
99254
- data-x="cross-origin-isolation-concrete">isolation- concrete</code>. The one chosen is
99255
- platform-specific .</p>
99248
+ <var>agent</var>'s <span>agent cluster</span>'s <span
99249
+ data-x="agent-cluster-cross-origin-isolation">cross-origin isolation mode</span > to " <code
99250
+ data-x="cross-origin-isolation-logical">logical</code>" or " <code
99251
+ data-x="cross-origin-isolation-concrete">concrete</code>" . The one chosen is
99252
+ <span>implementation-defined</span> .</p>
99256
99253
99257
99254
<p class="XXX">This really ought to be set when the agent cluster is created, which requires a
99258
99255
redesign of this section.</p>
@@ -99265,8 +99262,9 @@ interface <dfn>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span> {
99265
99262
99266
99263
<li><p>Set <var>worker global scope</var>'s <span
99267
99264
data-x="concept-WorkerGlobalScope-cross-origin-isolated-capability">cross-origin isolated
99268
- capability</span> to <var>agent</var>'s <span>agent cluster</span>'s <var
99269
- data-x="agent-cluster-cross-origin-isolation">cross-origin-isolation</var>.</p></li>
99265
+ capability</span> to true if <var>agent</var>'s <span>agent cluster</span>'s <span
99266
+ data-x="agent-cluster-cross-origin-isolation">cross-origin isolation mode</span> is "<code
99267
+ data-x="cross-origin-isolation-concrete">concrete</code>".</p></li>
99270
99268
99271
99269
<li><p>If <var>is shared</var> is false and <var>owner</var>'s <span
99272
99270
data-x="concept-settings-object-cross-origin-isolated-capability">cross-origin isolated
0 commit comments