@@ -79986,9 +79986,8 @@ console.assert(iframeWindow.frameElement === null);
7998679986 data-x="http-cross-origin-opener-policy">Cross-Origin-Opener-Policy</span>: <span
7998779987 data-x="coop-same-origin">same-origin</span></code>`, and</p></li>
7998879988
79989- <li><p>every <span>Document</span> has `<code
79990- data-x=""><span>Cross-Origin-Embedder-Policy</span>: <span
79991- data-x="coep-require-corp">require-corp</span></code>`.</p></li>
79989+ <li><p>every <span>Document</span> has a `<code>Cross-Origin-Embedder-Policy</code>` header
79990+ whose value is <span>compatible with cross-origin isolation</span>.</p></li>
7999279991 </ul>
7999379992
7999479993 <p>On some platforms, it is difficult to provide the security properties required to grant safe
@@ -83045,8 +83044,9 @@ interface <dfn interface>BarProp</dfn> {
8304583044 data-x="http-cross-origin-opener-policy">Cross-Origin-Opener-Policy</code>` header, but results
8304683045 from a combination of setting both `<code data-x=""><span
8304783046 data-x="http-cross-origin-opener-policy">Cross-Origin-Opener-Policy</span>: <span
83048- data-x="coop-same-origin">same-origin</span></code>` and `<code
83049- data-x=""><span>Cross-Origin-Embedder-Policy</span>: require-corp</code>` together.</p>
83047+ data-x="coop-same-origin">same-origin</span></code>` and a
83048+ `<code>Cross-Origin-Embedder-Policy</code>` header whose value is <span>compatible with
83049+ cross-origin isolation</span> together.<p>
8305083050 </dd>
8305183051 </dl>
8305283052
@@ -83135,8 +83135,8 @@ interface <dfn interface>BarProp</dfn> {
8313583135 policy">obtaining a cross-origin embedder policy</span> from <var>response</var> and
8313683136 <var>reservedEnvironment</var>.</p></li>
8313783137
83138- <li><p>If <var>coep</var>'s <span data-x="embedder-policy-value">value</span> is "<code
83139- data-x="coep-require-corp">require-corp</code>" , then set <var>policy</var>'s <span
83138+ <li><p>If <var>coep</var>'s <span data-x="embedder-policy-value">value</span> is
83139+ <span>compatible with cross-origin isolation</span> , then set <var>policy</var>'s <span
8314083140 data-x="coop-struct-value">value</span> to "<code
8314183141 data-x="coop-same-origin-plus-COEP">same-origin-plus-COEP</code>".</p></li>
8314283142
@@ -83177,10 +83177,10 @@ interface <dfn interface>BarProp</dfn> {
8317783177 <var>reservedEnvironment</var>.</p></li>
8317883178
8317983179 <li>
83180- <p>If <var>coep</var>'s <span data-x="embedder-policy-value">value</span> is "<code
83181- data-x="coep-require-corp">require-corp</code>" or <var>coep</var>'s <span
83182- data-x="embedder-policy-report-only-value">report-only value</span> is "<code
83183- data-x="coep-require-corp">require-corp</code>" , then set <var>policy</var>'s <span
83180+ <p>If <var>coep</var>'s <span data-x="embedder-policy-value">value</span> is
83181+ <span>compatible with cross-origin isolation</span> or <var>coep</var>'s <span
83182+ data-x="embedder-policy-report-only-value">report-only value</span> is <span>compatible with
83183+ cross-origin isolation</span> , then set <var>policy</var>'s <span
8318483184 data-x="coop-struct-report-only-value">report-only value</span> to "<code
8318583185 data-x="coop-same-origin-plus-COEP">same-origin-plus-COEP</code>".</p>
8318683186
@@ -84193,8 +84193,8 @@ interface <dfn interface>BarProp</dfn> {
8419384193
8419484194 <h3 id="coep">Cross-origin embedder policies</h3>
8419584195
84196- <p>An <dfn export>embedder policy value</dfn> controls the fetching of cross-origin resources
84197- without explicit permission from resource owners. There are two such values: </p>
84196+ <p>An <dfn export>embedder policy value</dfn> is one of three strings that controls the fetching
84197+ of cross-origin resources without explicit permission from resource owners.</p>
8419884198
8419984199 <dl>
8420084200 <dt>"<dfn data-x="coep-unsafe-none" export for="embedder policy value"><code
@@ -84208,8 +84208,34 @@ interface <dfn interface>BarProp</dfn> {
8420884208 <dd><p>When this value is used, fetching cross-origin resources requires the server's
8420984209 explicit permission through the <span>CORS protocol</span> or the
8421084210 `<code>Cross-Origin-Resource-Policy</code>` header.</p></dd>
84211+
84212+ <dt>"<dfn data-x="coep-credentialless" export for="embedder policy value"><code
84213+ data-x="">credentialless</code></dfn>"</dt>
84214+ <dd><p>When this value is used, fetching cross-origin no-CORS resources omits credentials. In
84215+ exchange, an explicit `<code>Cross-Origin-Resource-Policy</code>` header is not required. Other
84216+ requests sent with credentials require the server's explicit permission through the <span>CORS
84217+ protocol</span> or the `<code>Cross-Origin-Resource-Policy</code>` header.</p></dd>
8421184218 </dl>
8421284219
84220+ <div class="warning">
84221+ <p>Before supporting "<code data-x="coep-credentialless">credentialless</code>", implementers are
84222+ strongly encouraged to support both:
84223+
84224+ <ul class="brief">
84225+ <li><a href="https://wicg.github.io/private-network-access/">Private Network Access</a></li>
84226+ <li><a href="https://github.com/annevk/orb">Opaque Response Blocking</a></li>
84227+ </ul>
84228+
84229+ <p>Otherwise, it would allow attackers to leverage the client's network position to read non
84230+ public resources, using the <span
84231+ data-x="concept-settings-object-cross-origin-isolated-capability">cross-origin isolated
84232+ capability</span>.</p>
84233+ </div>
84234+
84235+ <p>An <span>embedder policy value</span> is <dfn>compatible with cross-origin isolation</dfn> if
84236+ it is "<code data-x="coep-credentialless">credentialless</code>" or "<code
84237+ data-x="coep-require-corp">require-corp</code>".</p>
84238+
8421384239 <p>An <dfn export>embedder policy</dfn> consists of:</p>
8421484240
8421584241 <ul>
@@ -84314,17 +84340,17 @@ interface <dfn interface>BarProp</dfn> {
8431484340 <var>response</var>'s <span data-x="concept-response-header-list">header list</span>.</p></li>
8431584341
8431684342 <li>
84317- <p>If <var>parsedItem</var> is non-null and <var>parsedItem</var>[0] is "<code
84318- data-x="">require-corp</code>" :</p>
84343+ <p>If <var>parsedItem</var> is non-null and <var>parsedItem</var>[0] is <span>compatible with
84344+ cross-origin isolation</span> :</p>
8431984345
8432084346 <ol>
84321- <li><p>Set <var>policy</var>'s <span data-x="embedder-policy-value">value</span> to "<code
84322- data-x="coep-require-corp">require-corp</code>" .</p></li>.
84347+ <li><p>Set <var>policy</var>'s <span data-x="embedder-policy-value">value</span> to
84348+ <var>parsedItem</var>[0] .</p></li>
8432384349
8432484350 <li><p>If <var>parsedItem</var>[1]["<code data-x="coep-report-to">report-to</code>"] <span
8432584351 data-x="map exists">exists</span>, then set <var>policy</var>'s <span
84326- data-x="embedder-policy-reporting-endpoint">endpoint</span> to <var>parsedItem</var>[1]["<code
84327- data-x="coep-report-to">report-to</code>"].</p></li>
84352+ data-x="embedder-policy-reporting-endpoint">endpoint</span> to
84353+ <var>parsedItem</var>[1]["<code data-x="coep-report-to">report-to</code>"].</p></li>
8432884354 </ol>
8432984355 </li>
8433084356
@@ -84334,17 +84360,17 @@ interface <dfn interface>BarProp</dfn> {
8433484360 list</span>.</p></li>
8433584361
8433684362 <li>
84337- <p>If <var>parsedItem</var> is non-null and <var>parsedItem</var>[0] is "<code
84338- data-x="">require-corp</code>" :</p>
84363+ <p>If <var>parsedItem</var> is non-null and <var>parsedItem</var>[0] is <span>compatible with
84364+ cross-origin isolation</span> :</p>
8433984365
8434084366 <ol>
84341- <li><p>Set <var>policy</var>'s <span data-x="embedder-policy-report-only-value">report-only
84342- value</span> to "<code data-x="coep-require-corp">require-corp</code>" .</p></li>.
84367+ <li><p>Set <var>policy</var>'s <span
84368+ data-x="embedder-policy-report-only- value">value </span> to <var>parsedItem</var>[0] .</p></li>
8434384369
8434484370 <li><p>If <var>parsedItem</var>[1]["<code data-x="coep-report-to">report-to</code>"] <span
84345- data-x="map exists">exists</span>, then set <var>policy</var>'s <span
84346- data-x="embedder-policy-report-only-reporting-endpoint">report-only reporting endpoint</span>
84347- to <var>parsedItem</var>[1]["<code data-x="coep-report-to">report-to</code>"].</p></li>
84371+ data-x="map exists">exists</span>, then set <var>policy</var>'s <span
84372+ data-x="embedder-policy-report-only-reporting-endpoint">endpoint</span> to
84373+ <var>parsedItem</var>[1]["<code data-x="coep-report-to">report-to</code>"].</p></li>
8434884374 </ol>
8434984375 </li>
8435084376
@@ -84367,19 +84393,19 @@ interface <dfn interface>BarProp</dfn> {
8436784393 data-x="policy-container-embedder-policy">embedder policy</span>.</p></li>
8436884394
8436984395 <li><p>If <var>parentPolicy</var>'s <span data-x="embedder-policy-report-only-value">report-only
84370- value</span> is "<code data-x="coep-require-corp">require-corp</code>" and
84371- <var>responsePolicy</var>'s <span data-x="embedder-policy-value">value</span> is "<code
84372- data-x="coep-unsafe-none">unsafe-none</code>", then < span>queue a cross-origin embedder policy
84373- inheritance violation</span> with <var>response</var>, "<code data-x="">navigation</code>",
84374- <var>parentPolicy</var>'s <span data-x="embedder-policy-report-only-reporting-endpoint">report
84375- only reporting endpoint</span>, "<code data-x="">reporting</code>", and <var>target</var>'s <span
84396+ value</span> is <span>compatible with cross-origin isolation</span> and
84397+ <var>responsePolicy</var>'s <span data-x="embedder-policy-value">value</span> is not, then
84398+ < span>queue a cross-origin embedder policy inheritance violation</span> with <var>response</var>,
84399+ "<code data-x="">navigation</code>", <var>parentPolicy</var>'s <span
84400+ data-x="embedder-policy-report-only-reporting-endpoint">report only reporting endpoint</span>,
84401+ "<code data-x="">reporting</code>", and <var>target</var>'s <span
8437684402 data-x="bc-container-document">container document</span>'s <span>relevant settings
8437784403 object</span>.</p></li>
8437884404
84379- <li><p>If <var>parentPolicy</var>'s <span data-x="embedder-policy-value">value</span> is "<code
84380- data-x="coep-unsafe-none">unsafe-none</code>" or <var>responsePolicy</var>'s <span
84381- data-x="embedder-policy-value">value</span> is "<code
84382- data-x="coep-require-corp">require-corp</code>" , then return true.</p></li>
84405+ <li><p>If <var>parentPolicy</var>'s <span data-x="embedder-policy-value">value</span> is not
84406+ <span>compatible with cross-origin isolation</span> or <var>responsePolicy</var>'s <span
84407+ data-x="embedder-policy-value">value</span> is <span>compatible with cross-origin
84408+ isolation</span> , then return true.</p></li>
8438384409
8438484410 <li><p><span>Queue a cross-origin embedder policy inheritance violation</span> with
8438584411 <var>response</var>, "<code data-x="">navigation</code>", <var>parentPolicy</var>'s <span
@@ -84407,18 +84433,17 @@ interface <dfn interface>BarProp</dfn> {
8440784433 data-x="policy-container-embedder-policy">embedder policy</span>.
8440884434
8440984435 <li><p>If <var>ownerPolicy</var>'s <span data-x="embedder-policy-report-only-value">report-only
84410- value</span> is "<code data-x="coep-require-corp">require-corp</code>" and <var>policy</var>'s
84411- <span data-x="embedder-policy-value">value</span> is "<code
84412- data-x="coep-unsafe-none">unsafe-none</code>", then <span>queue a cross-origin embedder policy
84413- inheritance violation</span> with <var>response</var>, "<code data-x="">worker
84436+ value</span> is <span>compatible with cross-origin isolation</span> and <var>policy</var>'s
84437+ <span data-x="embedder-policy-value">value</span> is not, then <span>queue a cross-origin
84438+ embedder policy inheritance violation</span> with <var>response</var>, "<code data-x="">worker
8441484439 initialization</code>", <var>owner's policy</var>'s <span
8441584440 data-x="embedder-policy-report-only-reporting-endpoint">report only reporting endpoint</span>,
8441684441 "<code data-x="">reporting</code>", and <var>owner</var>.</p></li>
8441784442
84418- <li><p>If <var>ownerPolicy</var>'s <span data-x="embedder-policy-value">value</span> is "<code
84419- data-x="coep-unsafe-none">unsafe-none</code>" or <var>policy</var>'s <span
84420- data-x="embedder-policy-value">value</span> is "<code
84421- data-x="coep-require-corp">require-corp</code>" , then return true.</p></li>
84443+ <li><p>If <var>ownerPolicy</var>'s <span data-x="embedder-policy-value">value</span> is not
84444+ <span>compatible with cross-origin isolation</span> or <var>policy</var>'s <span
84445+ data-x="embedder-policy-value">value</span> is <span>compatible with cross-origin
84446+ isolation</span> , then return true.</p></li>
8442284447
8442384448 <li><p><span>Queue a cross-origin embedder policy inheritance violation</span> with
8442484449 <var>response</var>, "<code data-x="">worker initialization</code>", <var>owner's policy</var>'s
@@ -102303,11 +102328,11 @@ interface <dfn interface>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope
102303102328
102304102329 <li>
102305102330 <p>If <var>worker global scope</var>'s <span
102306- data-x="concept-WorkerGlobalScope-embedder-policy">embedder policy</span> is "<code
102307- data-x="coep-require-corp">require-corp</code>" and <var> is shared</var> is true, then set
102308- < var>agent </var>'s <span >agent cluster</span >'s <span
102309- data-x="agent-cluster-cross-origin-isolation">cross-origin isolation mode</span> to "<code
102310- data-x="cross-origin-isolation-logical">logical</code>" or "<code
102331+ data-x="concept-WorkerGlobalScope-embedder-policy">embedder policy</span>'s <span
102332+ data-x="embedder-policy-value">value</span> is <span>compatible with cross-origin
102333+ isolation</span> and < var>is shared </var> is true, then set <var >agent</var >'s <span>agent
102334+ cluster</span>'s <span data-x="agent-cluster-cross-origin-isolation">cross-origin isolation
102335+ mode</span> to "<code data-x="cross-origin-isolation-logical">logical</code>" or "<code
102311102336 data-x="cross-origin-isolation-concrete">concrete</code>". The one chosen is
102312102337 <span>implementation-defined</span>.</p>
102313102338
0 commit comments