@@ -79989,9 +79989,8 @@ console.assert(iframeWindow.frameElement === null);
7998979989 data-x="http-cross-origin-opener-policy">Cross-Origin-Opener-Policy</span>: <span
7999079990 data-x="coop-same-origin">same-origin</span></code>`, and</p></li>
7999179991
79992- <li><p>every <span>Document</span> has `<code
79993- data-x=""><span>Cross-Origin-Embedder-Policy</span>: <span
79994- data-x="coep-require-corp">require-corp</span></code>`.</p></li>
79992+ <li><p>every <span>Document</span> has a `<code>Cross-Origin-Embedder-Policy</code>` header
79993+ whose value is <span>compatible with cross-origin isolation</span>.</p></li>
7999579994 </ul>
7999679995
7999779996 <p>On some platforms, it is difficult to provide the security properties required to grant safe
@@ -83048,8 +83047,9 @@ interface <dfn interface>BarProp</dfn> {
8304883047 data-x="http-cross-origin-opener-policy">Cross-Origin-Opener-Policy</code>` header, but results
8304983048 from a combination of setting both `<code data-x=""><span
8305083049 data-x="http-cross-origin-opener-policy">Cross-Origin-Opener-Policy</span>: <span
83051- data-x="coop-same-origin">same-origin</span></code>` and `<code
83052- data-x=""><span>Cross-Origin-Embedder-Policy</span>: require-corp</code>` together.</p>
83050+ data-x="coop-same-origin">same-origin</span></code>` and a
83051+ `<code>Cross-Origin-Embedder-Policy</code>` header whose value is <span>compatible with
83052+ cross-origin isolation</span> together.<p>
8305383053 </dd>
8305483054 </dl>
8305583055
@@ -83138,8 +83138,8 @@ interface <dfn interface>BarProp</dfn> {
8313883138 policy">obtaining a cross-origin embedder policy</span> from <var>response</var> and
8313983139 <var>reservedEnvironment</var>.</p></li>
8314083140
83141- <li><p>If <var>coep</var>'s <span data-x="embedder-policy-value">value</span> is "<code
83142- data-x="coep-require-corp">require-corp</code>" , then set <var>policy</var>'s <span
83141+ <li><p>If <var>coep</var>'s <span data-x="embedder-policy-value">value</span> is
83142+ <span>compatible with cross-origin isolation</span> , then set <var>policy</var>'s <span
8314383143 data-x="coop-struct-value">value</span> to "<code
8314483144 data-x="coop-same-origin-plus-COEP">same-origin-plus-COEP</code>".</p></li>
8314583145
@@ -83180,10 +83180,10 @@ interface <dfn interface>BarProp</dfn> {
8318083180 <var>reservedEnvironment</var>.</p></li>
8318183181
8318283182 <li>
83183- <p>If <var>coep</var>'s <span data-x="embedder-policy-value">value</span> is "<code
83184- data-x="coep-require-corp">require-corp</code>" or <var>coep</var>'s <span
83185- data-x="embedder-policy-report-only-value">report-only value</span> is "<code
83186- data-x="coep-require-corp">require-corp</code>" , then set <var>policy</var>'s <span
83183+ <p>If <var>coep</var>'s <span data-x="embedder-policy-value">value</span> is
83184+ <span>compatible with cross-origin isolation</span> or <var>coep</var>'s <span
83185+ data-x="embedder-policy-report-only-value">report-only value</span> is <span>compatible with
83186+ cross-origin isolation</span> , then set <var>policy</var>'s <span
8318783187 data-x="coop-struct-report-only-value">report-only value</span> to "<code
8318883188 data-x="coop-same-origin-plus-COEP">same-origin-plus-COEP</code>".</p>
8318983189
@@ -84196,8 +84196,8 @@ interface <dfn interface>BarProp</dfn> {
8419684196
8419784197 <h3 id="coep">Cross-origin embedder policies</h3>
8419884198
84199- <p>An <dfn export>embedder policy value</dfn> controls the fetching of cross-origin resources
84200- without explicit permission from resource owners. There are two such values: </p>
84199+ <p>An <dfn export>embedder policy value</dfn> is one of three strings that controls the fetching
84200+ of cross-origin resources without explicit permission from resource owners.</p>
8420184201
8420284202 <dl>
8420384203 <dt>"<dfn data-x="coep-unsafe-none" export for="embedder policy value"><code
@@ -84211,8 +84211,34 @@ interface <dfn interface>BarProp</dfn> {
8421184211 <dd><p>When this value is used, fetching cross-origin resources requires the server's
8421284212 explicit permission through the <span>CORS protocol</span> or the
8421384213 `<code>Cross-Origin-Resource-Policy</code>` header.</p></dd>
84214+
84215+ <dt>"<dfn data-x="coep-credentialless" export for="embedder policy value"><code
84216+ data-x="">credentialless</code></dfn>"</dt>
84217+ <dd><p>When this value is used, fetching cross-origin no-CORS resources omits credentials. In
84218+ exchange, an explicit `<code>Cross-Origin-Resource-Policy</code>` header is not required. Other
84219+ requests sent with credentials require the server's explicit permission through the <span>CORS
84220+ protocol</span> or the `<code>Cross-Origin-Resource-Policy</code>` header.</p></dd>
8421484221 </dl>
8421584222
84223+ <div class="warning">
84224+ <p>Before supporting "<code data-x="coep-credentialless">credentialless</code>", implementers are
84225+ strongly encouraged to support both:
84226+
84227+ <ul class="brief">
84228+ <li><a href="https://wicg.github.io/private-network-access/">Private Network Access</a></li>
84229+ <li><a href="https://github.com/annevk/orb">Opaque Response Blocking</a></li>
84230+ </ul>
84231+
84232+ <p>Otherwise, it would allow attackers to leverage the client's network position to read non
84233+ public resources, using the <span
84234+ data-x="concept-settings-object-cross-origin-isolated-capability">cross-origin isolated
84235+ capability</span>.</p>
84236+ </div>
84237+
84238+ <p>An <span>embedder policy value</span> is <dfn>compatible with cross-origin isolation</dfn> if
84239+ it is "<code data-x="coep-credentialless">credentialless</code>" or "<code
84240+ data-x="coep-require-corp">require-corp</code>".</p>
84241+
8421684242 <p>An <dfn export>embedder policy</dfn> consists of:</p>
8421784243
8421884244 <ul>
@@ -84317,17 +84343,17 @@ interface <dfn interface>BarProp</dfn> {
8431784343 <var>response</var>'s <span data-x="concept-response-header-list">header list</span>.</p></li>
8431884344
8431984345 <li>
84320- <p>If <var>parsedItem</var> is non-null and <var>parsedItem</var>[0] is "<code
84321- data-x="">require-corp</code>" :</p>
84346+ <p>If <var>parsedItem</var> is non-null and <var>parsedItem</var>[0] is <span>compatible with
84347+ cross-origin isolation</span> :</p>
8432284348
8432384349 <ol>
84324- <li><p>Set <var>policy</var>'s <span data-x="embedder-policy-value">value</span> to "<code
84325- data-x="coep-require-corp">require-corp</code>" .</p></li>.
84350+ <li><p>Set <var>policy</var>'s <span data-x="embedder-policy-value">value</span> to
84351+ <var>parsedItem</var>[0] .</p></li>
8432684352
8432784353 <li><p>If <var>parsedItem</var>[1]["<code data-x="coep-report-to">report-to</code>"] <span
8432884354 data-x="map exists">exists</span>, then set <var>policy</var>'s <span
84329- data-x="embedder-policy-reporting-endpoint">endpoint</span> to <var>parsedItem</var>[1]["<code
84330- data-x="coep-report-to">report-to</code>"].</p></li>
84355+ data-x="embedder-policy-reporting-endpoint">endpoint</span> to
84356+ <var>parsedItem</var>[1]["<code data-x="coep-report-to">report-to</code>"].</p></li>
8433184357 </ol>
8433284358 </li>
8433384359
@@ -84337,17 +84363,17 @@ interface <dfn interface>BarProp</dfn> {
8433784363 list</span>.</p></li>
8433884364
8433984365 <li>
84340- <p>If <var>parsedItem</var> is non-null and <var>parsedItem</var>[0] is "<code
84341- data-x="">require-corp</code>" :</p>
84366+ <p>If <var>parsedItem</var> is non-null and <var>parsedItem</var>[0] is <span>compatible with
84367+ cross-origin isolation</span> :</p>
8434284368
8434384369 <ol>
84344- <li><p>Set <var>policy</var>'s <span data-x="embedder-policy-report-only-value">report-only
84345- value</span> to "<code data-x="coep-require-corp">require-corp</code>" .</p></li>.
84370+ <li><p>Set <var>policy</var>'s <span
84371+ data-x="embedder-policy-report-only- value">value </span> to <var>parsedItem</var>[0] .</p></li>
8434684372
8434784373 <li><p>If <var>parsedItem</var>[1]["<code data-x="coep-report-to">report-to</code>"] <span
84348- data-x="map exists">exists</span>, then set <var>policy</var>'s <span
84349- data-x="embedder-policy-report-only-reporting-endpoint">report-only reporting endpoint</span>
84350- to <var>parsedItem</var>[1]["<code data-x="coep-report-to">report-to</code>"].</p></li>
84374+ data-x="map exists">exists</span>, then set <var>policy</var>'s <span
84375+ data-x="embedder-policy-report-only-reporting-endpoint">endpoint</span> to
84376+ <var>parsedItem</var>[1]["<code data-x="coep-report-to">report-to</code>"].</p></li>
8435184377 </ol>
8435284378 </li>
8435384379
@@ -84370,19 +84396,19 @@ interface <dfn interface>BarProp</dfn> {
8437084396 data-x="policy-container-embedder-policy">embedder policy</span>.</p></li>
8437184397
8437284398 <li><p>If <var>parentPolicy</var>'s <span data-x="embedder-policy-report-only-value">report-only
84373- value</span> is "<code data-x="coep-require-corp">require-corp</code>" and
84374- <var>responsePolicy</var>'s <span data-x="embedder-policy-value">value</span> is "<code
84375- data-x="coep-unsafe-none">unsafe-none</code>", then < span>queue a cross-origin embedder policy
84376- inheritance violation</span> with <var>response</var>, "<code data-x="">navigation</code>",
84377- <var>parentPolicy</var>'s <span data-x="embedder-policy-report-only-reporting-endpoint">report
84378- only reporting endpoint</span>, "<code data-x="">reporting</code>", and <var>target</var>'s <span
84399+ value</span> is <span>compatible with cross-origin isolation</span> and
84400+ <var>responsePolicy</var>'s <span data-x="embedder-policy-value">value</span> is not, then
84401+ < span>queue a cross-origin embedder policy inheritance violation</span> with <var>response</var>,
84402+ "<code data-x="">navigation</code>", <var>parentPolicy</var>'s <span
84403+ data-x="embedder-policy-report-only-reporting-endpoint">report only reporting endpoint</span>,
84404+ "<code data-x="">reporting</code>", and <var>target</var>'s <span
8437984405 data-x="bc-container-document">container document</span>'s <span>relevant settings
8438084406 object</span>.</p></li>
8438184407
84382- <li><p>If <var>parentPolicy</var>'s <span data-x="embedder-policy-value">value</span> is "<code
84383- data-x="coep-unsafe-none">unsafe-none</code>" or <var>responsePolicy</var>'s <span
84384- data-x="embedder-policy-value">value</span> is "<code
84385- data-x="coep-require-corp">require-corp</code>" , then return true.</p></li>
84408+ <li><p>If <var>parentPolicy</var>'s <span data-x="embedder-policy-value">value</span> is not
84409+ <span>compatible with cross-origin isolation</span> or <var>responsePolicy</var>'s <span
84410+ data-x="embedder-policy-value">value</span> is <span>compatible with cross-origin
84411+ isolation</span> , then return true.</p></li>
8438684412
8438784413 <li><p><span>Queue a cross-origin embedder policy inheritance violation</span> with
8438884414 <var>response</var>, "<code data-x="">navigation</code>", <var>parentPolicy</var>'s <span
@@ -84410,18 +84436,17 @@ interface <dfn interface>BarProp</dfn> {
8441084436 data-x="policy-container-embedder-policy">embedder policy</span>.
8441184437
8441284438 <li><p>If <var>ownerPolicy</var>'s <span data-x="embedder-policy-report-only-value">report-only
84413- value</span> is "<code data-x="coep-require-corp">require-corp</code>" and <var>policy</var>'s
84414- <span data-x="embedder-policy-value">value</span> is "<code
84415- data-x="coep-unsafe-none">unsafe-none</code>", then <span>queue a cross-origin embedder policy
84416- inheritance violation</span> with <var>response</var>, "<code data-x="">worker
84439+ value</span> is <span>compatible with cross-origin isolation</span> and <var>policy</var>'s
84440+ <span data-x="embedder-policy-value">value</span> is not, then <span>queue a cross-origin
84441+ embedder policy inheritance violation</span> with <var>response</var>, "<code data-x="">worker
8441784442 initialization</code>", <var>owner's policy</var>'s <span
8441884443 data-x="embedder-policy-report-only-reporting-endpoint">report only reporting endpoint</span>,
8441984444 "<code data-x="">reporting</code>", and <var>owner</var>.</p></li>
8442084445
84421- <li><p>If <var>ownerPolicy</var>'s <span data-x="embedder-policy-value">value</span> is "<code
84422- data-x="coep-unsafe-none">unsafe-none</code>" or <var>policy</var>'s <span
84423- data-x="embedder-policy-value">value</span> is "<code
84424- data-x="coep-require-corp">require-corp</code>" , then return true.</p></li>
84446+ <li><p>If <var>ownerPolicy</var>'s <span data-x="embedder-policy-value">value</span> is not
84447+ <span>compatible with cross-origin isolation</span> or <var>policy</var>'s <span
84448+ data-x="embedder-policy-value">value</span> is <span>compatible with cross-origin
84449+ isolation</span> , then return true.</p></li>
8442584450
8442684451 <li><p><span>Queue a cross-origin embedder policy inheritance violation</span> with
8442784452 <var>response</var>, "<code data-x="">worker initialization</code>", <var>owner's policy</var>'s
@@ -102308,11 +102333,11 @@ interface <dfn interface>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope
102308102333
102309102334 <li>
102310102335 <p>If <var>worker global scope</var>'s <span
102311- data-x="concept-WorkerGlobalScope-embedder-policy">embedder policy</span> is "<code
102312- data-x="coep-require-corp">require-corp</code>" and <var> is shared</var> is true, then set
102313- < var>agent </var>'s <span >agent cluster</span >'s <span
102314- data-x="agent-cluster-cross-origin-isolation">cross-origin isolation mode</span> to "<code
102315- data-x="cross-origin-isolation-logical">logical</code>" or "<code
102336+ data-x="concept-WorkerGlobalScope-embedder-policy">embedder policy</span>'s <span
102337+ data-x="embedder-policy-value">value</span> is <span>compatible with cross-origin
102338+ isolation</span> and < var>is shared </var> is true, then set <var >agent</var >'s <span>agent
102339+ cluster</span>'s <span data-x="agent-cluster-cross-origin-isolation">cross-origin isolation
102340+ mode</span> to "<code data-x="cross-origin-isolation-logical">logical</code>" or "<code
102316102341 data-x="cross-origin-isolation-concrete">concrete</code>". The one chosen is
102317102342 <span>implementation-defined</span>.</p>
102318102343
0 commit comments