@@ -8017,7 +8017,7 @@ interface <dfn>DOMStringList</dfn> {
8017
8017
8018
8018
<h4 id="structuredserializeinternal" noexport data-lt="StructuredSerializeInternal"
8019
8019
abstract-op><dfn>StructuredSerializeInternal</dfn> ( <var>value</var>, <var>forStorage</var> [ ,
8020
- <var>memory</var> ] )</h4>
8020
+ <var>memory</var> ])</h4>
8021
8021
8022
8022
<p>The <span>StructuredSerializeInternal</span> abstract operation takes as input a JavaScript
8023
8023
value <var>value</var> and serializes it to a <span data-x="JavaScript
@@ -8088,15 +8088,6 @@ interface <dfn>DOMStringList</dfn> {
8088
8088
<li><p>Let <var>agentCluster</var> be the <span>surrounding agent</span>'s
8089
8089
<span>agent cluster</span>.</p></li>
8090
8090
8091
- <li>
8092
- <p>If <var>agentCluster</var>'s <span>cross-origin isolated</span> is false, then throw a
8093
- <span>"<code>DataCloneError</code>"</span> <code>DOMException</code>.</p>
8094
-
8095
- <p class="note">This check is only needed when serializing (and not when deserializing) as
8096
- <span>cross-origin isolated</span> cannot change over time and a
8097
- <code>SharedArrayBuffer</code> cannot leave an <span>agent cluster</span>.</p>
8098
- </li>
8099
-
8100
8091
<li><p>If <var>forStorage</var> is true, then throw a
8101
8092
<span>"<code>DataCloneError</code>"</span> <code>DOMException</code>.</p></li>
8102
8093
@@ -8513,6 +8504,18 @@ o.myself = o;</code></pre>
8513
8504
<var>serialized</var>.[[AgentCluster]], then then throw a
8514
8505
<span>"<code>DataCloneError</code>"</span> <code>DOMException</code>.</p></li>
8515
8506
8507
+ <li><p>If <var>targetRealm</var>'s <span
8508
+ data-x="concept-settings-object-cross-origin-isolated-capability"
8509
+ >cross-origin isolated capability</span> is false, then throw
8510
+ <span>"<code>DataCloneError</code>"</span> <code>DOMException</code>.</p>
8511
+
8512
+ <p class="note">This check is only needed when deserializing (and not when serializing) as
8513
+ <span data-x="concept-settings-object-cross-origin-isolated-capability">
8514
+ cross-origin isolated capability</span> cannot change over time and a
8515
+ <code>SharedArrayBuffer</code> cannot leave an <span>agent
8516
+ cluster</span>.</p>
8517
+ </li>
8518
+
8516
8519
<li><p>Otherwise, set <var>value</var> to a new SharedArrayBuffer object in
8517
8520
<var>targetRealm</var> whose [[ArrayBufferData]] internal slot value is
8518
8521
<var>serialized</var>.[[ArrayBufferData]] and whose [[ArrayBufferByteLength]] internal slot
@@ -77984,8 +77987,43 @@ console.assert(iframeWindow.frameElement === null);
77984
77987
keys</span> to <span data-x="agent cluster">agent clusters</span>). User agents are responsible
77985
77988
for collecting agent clusters when it is deemed that nothing can access them anymore.</p>
77986
77989
77987
- <p>A <span>browsing context group</span> has a <dfn data-x="bcg cross-origin
77988
- isolated">cross-origin isolated</dfn> boolean. It is initially false.</p>
77990
+ <p>A <span>browsing context group</span> has a <dfn><var
77991
+ data-x="bcg-cross-origin-isolation">cross-origin-isolation</var></dfn> variable of type
77992
+ <span>cross-origin-isolation</span>. Initially "<code
77993
+ data-x="cross-origin-isolation-none">isolation-none</code>"</p>
77994
+
77995
+ <p>A <dfn>cross-origin-isolation</dfn> type can take 3 possible values: </p>
77996
+ <ul>
77997
+ <li><dfn><code data-x="cross-origin-isolation-none">isolation-none</code></dfn></li>
77998
+ <li><dfn><code data-x="cross-origin-isolation-logical">isolation-logical</code></dfn></li>
77999
+ <li><dfn><code data-x="cross-origin-isolation-concrete">isolation-concrete</code></dfn></li>
78000
+ </ul>
78001
+
78002
+ <div class="note">
78003
+ <p>
78004
+ <code data-x="cross-origin-isolation-logical">isolation-logical</code> and
78005
+ <code data-x="cross-origin-isolation-concrete">isolation-concrete</code> are similar. They are both used
78006
+ for <span>browsing context group</span>, where:
78007
+ </p>
78008
+ <ul>
78009
+ <li><p>Every top-level <span>Document</span> has `<code data-x="">
78010
+ <span data-x="http-cross-origin-opener-policy">Cross-Origin-Opener-Policy</span>:
78011
+ <span data-x="coop-same-origin">same-origin</span></code>`</p></li>
78012
+
78013
+ <li><p>Every <span>Document</span> has
78014
+ `<code data-x=""><span>Cross-Origin-Embedder-Policy</span>:
78015
+ <span data-x="coep-require-corp">require-corp</span></code>`</p></li>
78016
+ </ul>
78017
+ <p>
78018
+ On some platforms, it is difficult to provide the security properties required
78019
+ by the <span data-x="concept-settings-object-cross-origin-isolated-capability">cross-origin
78020
+ isolated capability</span>. As a result, only <code
78021
+ data-x="cross-origin-isolation-concrete">isolation-concrete</code> can grant access to the <span
78022
+ data-x="concept-settings-object-cross-origin-isolated-capability">cross-origin isolated
78023
+ capability</span>. <code data-x="cross-origin-isolation-concrete">isolation-concrete</code> is
78024
+ used on platform not supporting this capability.
78025
+ </p>
78026
+ </div>
77989
78027
77990
78028
<p>A <span>browsing context group</span> has an associated <dfn>historical agent cluster key
77991
78029
map</dfn>, which is a <span data-x="ordered map">map</span> of <span
@@ -79645,11 +79683,17 @@ interface <dfn>BarProp</dfn> {
79645
79683
79646
79684
<dt>The <span data-x="concept-settings-object-cross-origin-isolated-capability">cross-origin
79647
79685
isolated capability</span></dt>
79648
- <dd><p>Return the logical conjunction of <var>realm</var>'s <span>agent cluster</span>'s
79649
- <span>cross-origin isolated</span> and whether <var>window</var>'s <span
79650
- data-x="concept-document-window">associated <code>Document</code></span> is <span>allowed to
79651
- use</span> the "<code data-x="cross-origin-isolated-feature">cross-origin-isolated</code>"
79652
- feature.</p></dd>
79686
+ <dd><p>Return the logical conjunction of:</p>
79687
+ <ol>
79688
+ <li><p><var>realm</var>'s <span>agent cluster</span>'s <var
79689
+ data-x="agent-cluster-cross-origin-isolation">cross-origin-isolation</var> is <code
79690
+ data-x="cross-origin-isolation-concrete">isolation-concrete</code></p></li>
79691
+
79692
+ <li><p><span data-x="concept-document-window">associated <code>Document</code></span> is
79693
+ <span>allowed to use</span> the "<code
79694
+ data-x="cross-origin-isolated-feature">cross-origin-isolated</code>" feature.</p>
79695
+ </ol>
79696
+ </dd>
79653
79697
</dl>
79654
79698
</li>
79655
79699
@@ -80424,8 +80468,9 @@ interface <dfn>BarProp</dfn> {
80424
80468
a registrable domain suffix of and is not equal to</span> <var>effectiveDomain</var>, then throw
80425
80469
a <span>"<code>SecurityError</code>"</span> <code>DOMException</code>.</p></li>
80426
80470
80427
- <li><p>If the <span>surrounding agent</span>'s <span>agent cluster</span>'s <span>cross-origin
80428
- isolated</span> is true, then return.</p></li>
80471
+ <li><p>If the <span>surrounding agent</span>'s <span>agent cluster</span>'s
80472
+ <var data-x="agent-cluster-cross-origin-isolation">cross-origin-isolation</var> is not <code
80473
+ data-x="cross-origin-isolation-none">isolation-none</code> then return.</p></li>
80429
80474
80430
80475
<li><p>If the <span>surrounding agent</span>'s <span>agent cluster</span>'s <span>is
80431
80476
origin-keyed</span> is true, then return.</p></li>
@@ -80534,17 +80579,16 @@ interface <dfn>BarProp</dfn> {
80534
80579
and the <code data-x="dom-originAgentCluster">originAgentCluster</code> getter will always return
80535
80580
true.</p>
80536
80581
80537
- <p class="note">Similarly, <code>Document</code>s in a <span>cross-origin isolated</span>
80538
- <span>agent cluster</span> are automatically origin-keyed. The `<code
80539
- data-x="http-origin-agent-cluster">Origin-Agent-Cluster</code>` header might be useful as an
80540
- additional hint to implementations about resource allocation, since the `<code
80582
+ <p class="note">Similarly, <code>Document</code>s with <span>agent cluster</span>'s
80583
+ <var data-x="agent-cluster-cross-origin-isolation">cross-origin-isolated</var> not <code
80584
+ data-x="cross-origin-isolation-none">isolation-none</code> are automatically origin-isolated. The
80585
+ `<code data-x="http-origin-agent-cluster">Origin-Agent-Cluster</code>` header might be useful as
80586
+ an additional hint to implementations about resource allocation, since the `<code
80541
80587
data-x="http-cross-origin-opener-policy">Cross-Origin-Opener-Policy</code>` and
80542
80588
`<code>Cross-Origin-Embedder-Policy</code>` headers used to achieve cross-origin isolation are
80543
80589
more about ensuring that everything in the same address space opts in to being there. But adding
80544
80590
it would have no additional observable effects on author code.</p>
80545
80591
80546
-
80547
-
80548
80592
<h3>Sandboxing</h3>
80549
80593
80550
80594
<p>A <dfn export>sandboxing flag set</dfn> is a set of zero or more of the following flags, which
@@ -80901,8 +80945,9 @@ interface <dfn>BarProp</dfn> {
80901
80945
<dd>
80902
80946
<p>This behaves the same as "<code data-x="coop-same-origin">same-origin</code>", with the
80903
80947
addition that it sets the (new) <span>top-level browsing context</span>'s <span data-x="tlbc
80904
- group">group</span>'s <span data-x="bcg cross-origin isolated">cross-origin isolated</span> to
80905
- true.</p>
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>
80906
80951
80907
80952
<p class="note">"<code data-x="coop-same-origin-plus-COEP">same-origin-plus-COEP</code>" cannot
80908
80953
be directly set via the `<code
@@ -81311,8 +81356,19 @@ interface <dfn>BarProp</dfn> {
81311
81356
81312
81357
<li><p>If <var>navigationCOOP</var>'s <span data-x="coop-struct-value">value</span> is "<code
81313
81358
data-x="coop-same-origin-plus-COEP">same-origin-plus-COEP</code>", then set
81314
- <var>newBrowsingContext</var>'s <span data-x="tlbc group">group</span>'s <span data-x="bcg
81315
- cross-origin isolated">cross-origin isolated</span> to true.</p></li>
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>
81364
+
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>
81371
+ </li>
81316
81372
81317
81373
<li>
81318
81374
<p>If <var>sandboxFlags</var> is not empty, then:</p>
@@ -86779,9 +86835,11 @@ interface <dfn>BeforeUnloadEvent</dfn> : <span>Event</span> {
86779
86835
<p>Contains various <code>Window</code> objects which can potentially reach each other, either
86780
86836
directly or by using <code data-x="dom-document-domain">document.domain</code>.</p>
86781
86837
86782
- <p>If the encompassing <span>agent cluster</span>'s <span>cross-origin isolated</span> is true,
86783
- then all the <code>Window</code> objects will be <span>same origin</span>, can reach each other
86784
- directly, and <code data-x="dom-document-domain">document.domain</code> will no-op.</p>
86838
+ <p>If the encompassing <span>agent cluster</span>'s <span
86839
+ data-x="agent-cluster-cross-origin-isolation">cross-origin-isolation</span> is not <code
86840
+ data-x="cross-origin-isolation-none">isolation-none</code>, then all the <code>Window</code>
86841
+ objects will be <span>same origin</span>, can reach each other directly, and <code
86842
+ data-x="dom-document-domain">document.domain</code> will no-op.</p>
86785
86843
86786
86844
<p class="note">Two <code>Window</code> objects that are <span>same origin</span> can be in
86787
86845
different <span data-x="similar-origin window agent">similar-origin window agents</span>, for
@@ -86863,8 +86921,10 @@ interface <dfn>BeforeUnloadEvent</dfn> : <span>Event</span> {
86863
86921
86864
86922
<div w-nodev>
86865
86923
86866
- <p>An <span>agent cluster</span> has an associated <dfn>cross-origin isolated</dfn> (a boolean),
86867
- which is initially false.</p>
86924
+ <p>An <span>agent cluster</span> has an associated <dfn><var
86925
+ data-x="agent-cluster-cross-origin-isolation">cross-origin-isolation</var></dfn> variable, of type
86926
+ <span>cross-origin-isolation</span>. Initially set to <code
86927
+ data-x="cross-origin-isolation-none">isolation-none</code>.
86868
86928
86869
86929
<p>An <span>agent cluster</span> has an associated <dfn>is origin-keyed</dfn> (a boolean), which
86870
86930
is initially false.</p>
@@ -86892,8 +86952,10 @@ interface <dfn>BeforeUnloadEvent</dfn> : <span>Event</span> {
86892
86952
86893
86953
<li><p>Let <var>key</var> be <var>site</var>.</p></li>
86894
86954
86895
- <li><p>If <var>group</var>'s <span data-x="bcg cross-origin isolated">cross-origin
86896
- isolated</span> is true, then set <var>key</var> to <var>origin</var>.</p></li>
86955
+ <li><p>If <var>group</var>'s <span
86956
+ data-x="bcg-cross-origin-isolation">cross-origin-isolation</span> is not <code
86957
+ data-x="cross-origin-isolation-none">isolation-none</code>, then set <var>key</var> to
86958
+ <var>origin</var>.</p></li>
86897
86959
86898
86960
<li><p>Otherwise, if <var>group</var>'s <span>historical agent cluster key
86899
86961
map</span>[<var>origin</var>] <span data-x="map exists">exists</span>, then set <var>key</var> to
@@ -86918,8 +86980,9 @@ interface <dfn>BeforeUnloadEvent</dfn> : <span>Event</span> {
86918
86980
<ol>
86919
86981
<li><p>Let <var>agentCluster</var> be a new <span>agent cluster</span>.</p></li>
86920
86982
86921
- <li><p>Set <var>agentCluster</var>'s <span>cross-origin isolated</span> to <var>group</var>'s
86922
- <span data-x="bcg cross-origin isolated">cross-origin isolated</span>.</p></li>
86983
+ <li><p>Set <var>agentCluster</var>'s <var
86984
+ data-x="agent-cluster-cross-origin-isolation">cross-origin-isolation</var> to <var>group</var>'s
86985
+ <var data-x="bcg-cross-origin-isolation">cross-origin-isolation</var>.</p></li>
86923
86986
86924
86987
<li><p>Set <var>agentCluster</var>'s <span>is origin-keyed</span> to true if <var>key</var>
86925
86988
equals <var>origin</var>; otherwise false.</p></li>
@@ -87300,8 +87363,9 @@ interface <dfn>BeforeUnloadEvent</dfn> : <span>Event</span> {
87300
87363
href="https://github.com/tc39/ecma262/issues/1357">tc39/ecma262#1357</a>.</span></p></li>
87301
87364
87302
87365
<li>
87303
- <p>If <var>agent</var>'s <span>agent cluster</span>'s <span>cross-origin isolated</span> is
87304
- false, then:</p>
87366
+ <p>If <var>agent</var>'s <span>agent cluster</span>'s <var
87367
+ data-x="agent-cluster-cross-origin-isolation">cross-origin-isolation</var> is <code
87368
+ data-x="cross-origin-isolation-none">isolation-none</code>, then:
87305
87369
87306
87370
<ol>
87307
87371
<li><p>Let <var>global</var> be <var>realm</var>'s <span data-x="concept-realm-global">global
@@ -99221,8 +99285,11 @@ interface <dfn>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span> {
99221
99285
<p>If <var>worker global scope</var>'s <span
99222
99286
data-x="concept-WorkerGlobalScope-embedder-policy">embedder policy</span> is "<code
99223
99287
data-x="coep-require-corp">require-corp</code>" and <var>is shared</var> is true, then set
99224
- <var>agent</var>'s <span>agent cluster</span>'s <span>cross-origin isolated</span> to
99225
- true.</p>
99288
+ <var>agent</var>'s <span>agent cluster</span>'s <var
99289
+ data-x="agent-cluster-cross-origin-isolation">cross-origin-isolated</var> to <code
99290
+ data-x="cross-origin-isolation-logical">isolation-logical</code> or <code
99291
+ data-x="cross-origin-isolation-concrete">isolation-concrete</code>. The one chosen is
99292
+ platform-specific.</p>
99226
99293
99227
99294
<p class="XXX">This really ought to be set when the agent cluster is created, which requires a
99228
99295
redesign of this section.</p>
@@ -99235,8 +99302,8 @@ interface <dfn>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope</span> {
99235
99302
99236
99303
<li><p>Set <var>worker global scope</var>'s <span
99237
99304
data-x="concept-WorkerGlobalScope-cross-origin-isolated-capability">cross-origin isolated
99238
- capability</span> to <var>agent</var>'s <span>agent cluster</span>'s <span>cross-origin
99239
- isolated</span >.</p></li>
99305
+ capability</span> to <var>agent</var>'s <span>agent cluster</span>'s <var
99306
+ data-x="agent-cluster-cross-origin-isolation">cross-origin-isolation</var >.</p></li>
99240
99307
99241
99308
<li><p>If <var>is shared</var> is false and <var>owner</var>'s <span
99242
99309
data-x="concept-settings-object-cross-origin-isolated-capability">cross-origin isolated
0 commit comments