@@ -80244,9 +80244,8 @@ console.assert(iframeWindow.frameElement === null);
8024480244 data-x="http-cross-origin-opener-policy">Cross-Origin-Opener-Policy</span>: <span
8024580245 data-x="coop-same-origin">same-origin</span></code>`, and</p></li>
8024680246
80247- <li><p>every <span>Document</span> has `<code
80248- data-x=""><span>Cross-Origin-Embedder-Policy</span>: <span
80249- data-x="coep-require-corp">require-corp</span></code>`.</p></li>
80247+ <li><p>every <span>Document</span> has a `<code>Cross-Origin-Embedder-Policy</code>` header
80248+ whose value is <span>compatible with cross-origin isolation</span>.</p></li>
8025080249 </ul>
8025180250
8025280251 <p>On some platforms, it is difficult to provide the security properties required to grant safe
@@ -83303,8 +83302,9 @@ interface <dfn interface>BarProp</dfn> {
8330383302 data-x="http-cross-origin-opener-policy">Cross-Origin-Opener-Policy</code>` header, but results
8330483303 from a combination of setting both `<code data-x=""><span
8330583304 data-x="http-cross-origin-opener-policy">Cross-Origin-Opener-Policy</span>: <span
83306- data-x="coop-same-origin">same-origin</span></code>` and `<code
83307- data-x=""><span>Cross-Origin-Embedder-Policy</span>: require-corp</code>` together.</p>
83305+ data-x="coop-same-origin">same-origin</span></code>` and a
83306+ `<code>Cross-Origin-Embedder-Policy</code>` header whose value is <span>compatible with
83307+ cross-origin isolation</span> together.<p>
8330883308 </dd>
8330983309 </dl>
8331083310
@@ -83393,8 +83393,8 @@ interface <dfn interface>BarProp</dfn> {
8339383393 policy">obtaining a cross-origin embedder policy</span> from <var>response</var> and
8339483394 <var>reservedEnvironment</var>.</p></li>
8339583395
83396- <li><p>If <var>coep</var>'s <span data-x="embedder-policy-value">value</span> is "<code
83397- data-x="coep-require-corp">require-corp</code>" , then set <var>policy</var>'s <span
83396+ <li><p>If <var>coep</var>'s <span data-x="embedder-policy-value">value</span> is
83397+ <span>compatible with cross-origin isolation</span> , then set <var>policy</var>'s <span
8339883398 data-x="coop-struct-value">value</span> to "<code
8339983399 data-x="coop-same-origin-plus-COEP">same-origin-plus-COEP</code>".</p></li>
8340083400
@@ -83435,10 +83435,10 @@ interface <dfn interface>BarProp</dfn> {
8343583435 <var>reservedEnvironment</var>.</p></li>
8343683436
8343783437 <li>
83438- <p>If <var>coep</var>'s <span data-x="embedder-policy-value">value</span> is "<code
83439- data-x="coep-require-corp">require-corp</code>" or <var>coep</var>'s <span
83440- data-x="embedder-policy-report-only-value">report-only value</span> is "<code
83441- data-x="coep-require-corp">require-corp</code>" , then set <var>policy</var>'s <span
83438+ <p>If <var>coep</var>'s <span data-x="embedder-policy-value">value</span> is
83439+ <span>compatible with cross-origin isolation</span> or <var>coep</var>'s <span
83440+ data-x="embedder-policy-report-only-value">report-only value</span> is <span>compatible with
83441+ cross-origin isolation</span> , then set <var>policy</var>'s <span
8344283442 data-x="coop-struct-report-only-value">report-only value</span> to "<code
8344383443 data-x="coop-same-origin-plus-COEP">same-origin-plus-COEP</code>".</p>
8344483444
@@ -84451,8 +84451,8 @@ interface <dfn interface>BarProp</dfn> {
8445184451
8445284452 <h3 id="coep">Cross-origin embedder policies</h3>
8445384453
84454- <p>An <dfn export>embedder policy value</dfn> controls the fetching of cross-origin resources
84455- without explicit permission from resource owners. There are two such values: </p>
84454+ <p>An <dfn export>embedder policy value</dfn> is one of three strings that controls the fetching
84455+ of cross-origin resources without explicit permission from resource owners.</p>
8445684456
8445784457 <dl>
8445884458 <dt>"<dfn data-x="coep-unsafe-none" export for="embedder policy value"><code
@@ -84466,8 +84466,34 @@ interface <dfn interface>BarProp</dfn> {
8446684466 <dd><p>When this value is used, fetching cross-origin resources requires the server's
8446784467 explicit permission through the <span>CORS protocol</span> or the
8446884468 `<code>Cross-Origin-Resource-Policy</code>` header.</p></dd>
84469+
84470+ <dt>"<dfn data-x="coep-credentialless" export for="embedder policy value"><code
84471+ data-x="">credentialless</code></dfn>"</dt>
84472+ <dd><p>When this value is used, fetching cross-origin no-CORS resources omits credentials. In
84473+ exchange, an explicit `<code>Cross-Origin-Resource-Policy</code>` header is not required. Other
84474+ requests sent with credentials require the server's explicit permission through the <span>CORS
84475+ protocol</span> or the `<code>Cross-Origin-Resource-Policy</code>` header.</p></dd>
8446984476 </dl>
8447084477
84478+ <div class="warning">
84479+ <p>Before supporting "<code data-x="coep-credentialless">credentialless</code>", implementers are
84480+ strongly encouraged to support both:
84481+
84482+ <ul class="brief">
84483+ <li><a href="https://wicg.github.io/private-network-access/">Private Network Access</a></li>
84484+ <li><a href="https://github.com/annevk/orb">Opaque Response Blocking</a></li>
84485+ </ul>
84486+
84487+ <p>Otherwise, it would allow attackers to leverage the client's network position to read non
84488+ public resources, using the <span
84489+ data-x="concept-settings-object-cross-origin-isolated-capability">cross-origin isolated
84490+ capability</span>.</p>
84491+ </div>
84492+
84493+ <p>An <span>embedder policy value</span> is <dfn>compatible with cross-origin isolation</dfn> if
84494+ it is "<code data-x="coep-credentialless">credentialless</code>" or "<code
84495+ data-x="coep-require-corp">require-corp</code>".</p>
84496+
8447184497 <p>An <dfn export>embedder policy</dfn> consists of:</p>
8447284498
8447384499 <ul>
@@ -84572,17 +84598,17 @@ interface <dfn interface>BarProp</dfn> {
8457284598 <var>response</var>'s <span data-x="concept-response-header-list">header list</span>.</p></li>
8457384599
8457484600 <li>
84575- <p>If <var>parsedItem</var> is non-null and <var>parsedItem</var>[0] is "<code
84576- data-x="">require-corp</code>" :</p>
84601+ <p>If <var>parsedItem</var> is non-null and <var>parsedItem</var>[0] is <span>compatible with
84602+ cross-origin isolation</span> :</p>
8457784603
8457884604 <ol>
84579- <li><p>Set <var>policy</var>'s <span data-x="embedder-policy-value">value</span> to "<code
84580- data-x="coep-require-corp">require-corp</code>" .</p></li>.
84605+ <li><p>Set <var>policy</var>'s <span data-x="embedder-policy-value">value</span> to
84606+ <var>parsedItem</var>[0] .</p></li>
8458184607
8458284608 <li><p>If <var>parsedItem</var>[1]["<code data-x="coep-report-to">report-to</code>"] <span
8458384609 data-x="map exists">exists</span>, then set <var>policy</var>'s <span
84584- data-x="embedder-policy-reporting-endpoint">endpoint</span> to <var>parsedItem</var>[1]["<code
84585- data-x="coep-report-to">report-to</code>"].</p></li>
84610+ data-x="embedder-policy-reporting-endpoint">endpoint</span> to
84611+ <var>parsedItem</var>[1]["<code data-x="coep-report-to">report-to</code>"].</p></li>
8458684612 </ol>
8458784613 </li>
8458884614
@@ -84592,17 +84618,17 @@ interface <dfn interface>BarProp</dfn> {
8459284618 list</span>.</p></li>
8459384619
8459484620 <li>
84595- <p>If <var>parsedItem</var> is non-null and <var>parsedItem</var>[0] is "<code
84596- data-x="">require-corp</code>" :</p>
84621+ <p>If <var>parsedItem</var> is non-null and <var>parsedItem</var>[0] is <span>compatible with
84622+ cross-origin isolation</span> :</p>
8459784623
8459884624 <ol>
84599- <li><p>Set <var>policy</var>'s <span data-x="embedder-policy-report-only-value">report-only
84600- value</span> to "<code data-x="coep-require-corp">require-corp</code>" .</p></li>.
84625+ <li><p>Set <var>policy</var>'s <span
84626+ data-x="embedder-policy-report-only- value">value </span> to <var>parsedItem</var>[0] .</p></li>
8460184627
8460284628 <li><p>If <var>parsedItem</var>[1]["<code data-x="coep-report-to">report-to</code>"] <span
84603- data-x="map exists">exists</span>, then set <var>policy</var>'s <span
84604- data-x="embedder-policy-report-only-reporting-endpoint">report-only reporting endpoint</span>
84605- to <var>parsedItem</var>[1]["<code data-x="coep-report-to">report-to</code>"].</p></li>
84629+ data-x="map exists">exists</span>, then set <var>policy</var>'s <span
84630+ data-x="embedder-policy-report-only-reporting-endpoint">endpoint</span> to
84631+ <var>parsedItem</var>[1]["<code data-x="coep-report-to">report-to</code>"].</p></li>
8460684632 </ol>
8460784633 </li>
8460884634
@@ -84625,19 +84651,19 @@ interface <dfn interface>BarProp</dfn> {
8462584651 data-x="policy-container-embedder-policy">embedder policy</span>.</p></li>
8462684652
8462784653 <li><p>If <var>parentPolicy</var>'s <span data-x="embedder-policy-report-only-value">report-only
84628- value</span> is "<code data-x="coep-require-corp">require-corp</code>" and
84629- <var>responsePolicy</var>'s <span data-x="embedder-policy-value">value</span> is "<code
84630- data-x="coep-unsafe-none">unsafe-none</code>", then < span>queue a cross-origin embedder policy
84631- inheritance violation</span> with <var>response</var>, "<code data-x="">navigation</code>",
84632- <var>parentPolicy</var>'s <span data-x="embedder-policy-report-only-reporting-endpoint">report
84633- only reporting endpoint</span>, "<code data-x="">reporting</code>", and <var>target</var>'s <span
84654+ value</span> is <span>compatible with cross-origin isolation</span> and
84655+ <var>responsePolicy</var>'s <span data-x="embedder-policy-value">value</span> is not, then
84656+ < span>queue a cross-origin embedder policy inheritance violation</span> with <var>response</var>,
84657+ "<code data-x="">navigation</code>", <var>parentPolicy</var>'s <span
84658+ data-x="embedder-policy-report-only-reporting-endpoint">report only reporting endpoint</span>,
84659+ "<code data-x="">reporting</code>", and <var>target</var>'s <span
8463484660 data-x="bc-container-document">container document</span>'s <span>relevant settings
8463584661 object</span>.</p></li>
8463684662
84637- <li><p>If <var>parentPolicy</var>'s <span data-x="embedder-policy-value">value</span> is "<code
84638- data-x="coep-unsafe-none">unsafe-none</code>" or <var>responsePolicy</var>'s <span
84639- data-x="embedder-policy-value">value</span> is "<code
84640- data-x="coep-require-corp">require-corp</code>" , then return true.</p></li>
84663+ <li><p>If <var>parentPolicy</var>'s <span data-x="embedder-policy-value">value</span> is not
84664+ <span>compatible with cross-origin isolation</span> or <var>responsePolicy</var>'s <span
84665+ data-x="embedder-policy-value">value</span> is <span>compatible with cross-origin
84666+ isolation</span> , then return true.</p></li>
8464184667
8464284668 <li><p><span>Queue a cross-origin embedder policy inheritance violation</span> with
8464384669 <var>response</var>, "<code data-x="">navigation</code>", <var>parentPolicy</var>'s <span
@@ -84665,18 +84691,17 @@ interface <dfn interface>BarProp</dfn> {
8466584691 data-x="policy-container-embedder-policy">embedder policy</span>.
8466684692
8466784693 <li><p>If <var>ownerPolicy</var>'s <span data-x="embedder-policy-report-only-value">report-only
84668- value</span> is "<code data-x="coep-require-corp">require-corp</code>" and <var>policy</var>'s
84669- <span data-x="embedder-policy-value">value</span> is "<code
84670- data-x="coep-unsafe-none">unsafe-none</code>", then <span>queue a cross-origin embedder policy
84671- inheritance violation</span> with <var>response</var>, "<code data-x="">worker
84694+ value</span> is <span>compatible with cross-origin isolation</span> and <var>policy</var>'s
84695+ <span data-x="embedder-policy-value">value</span> is not, then <span>queue a cross-origin
84696+ embedder policy inheritance violation</span> with <var>response</var>, "<code data-x="">worker
8467284697 initialization</code>", <var>owner's policy</var>'s <span
8467384698 data-x="embedder-policy-report-only-reporting-endpoint">report only reporting endpoint</span>,
8467484699 "<code data-x="">reporting</code>", and <var>owner</var>.</p></li>
8467584700
84676- <li><p>If <var>ownerPolicy</var>'s <span data-x="embedder-policy-value">value</span> is "<code
84677- data-x="coep-unsafe-none">unsafe-none</code>" or <var>policy</var>'s <span
84678- data-x="embedder-policy-value">value</span> is "<code
84679- data-x="coep-require-corp">require-corp</code>" , then return true.</p></li>
84701+ <li><p>If <var>ownerPolicy</var>'s <span data-x="embedder-policy-value">value</span> is not
84702+ <span>compatible with cross-origin isolation</span> or <var>policy</var>'s <span
84703+ data-x="embedder-policy-value">value</span> is <span>compatible with cross-origin
84704+ isolation</span> , then return true.</p></li>
8468084705
8468184706 <li><p><span>Queue a cross-origin embedder policy inheritance violation</span> with
8468284707 <var>response</var>, "<code data-x="">worker initialization</code>", <var>owner's policy</var>'s
@@ -102561,11 +102586,11 @@ interface <dfn interface>SharedWorkerGlobalScope</dfn> : <span>WorkerGlobalScope
102561102586
102562102587 <li>
102563102588 <p>If <var>worker global scope</var>'s <span
102564- data-x="concept-WorkerGlobalScope-embedder-policy">embedder policy</span> is "<code
102565- data-x="coep-require-corp">require-corp</code>" and <var> is shared</var> is true, then set
102566- < var>agent </var>'s <span >agent cluster</span >'s <span
102567- data-x="agent-cluster-cross-origin-isolation">cross-origin isolation mode</span> to "<code
102568- data-x="cross-origin-isolation-logical">logical</code>" or "<code
102589+ data-x="concept-WorkerGlobalScope-embedder-policy">embedder policy</span>'s <span
102590+ data-x="embedder-policy-value">value</span> is <span>compatible with cross-origin
102591+ isolation</span> and < var>is shared </var> is true, then set <var >agent</var >'s <span>agent
102592+ cluster</span>'s <span data-x="agent-cluster-cross-origin-isolation">cross-origin isolation
102593+ mode</span> to "<code data-x="cross-origin-isolation-logical">logical</code>" or "<code
102569102594 data-x="cross-origin-isolation-concrete">concrete</code>". The one chosen is
102570102595 <span>implementation-defined</span>.</p>
102571102596
0 commit comments