diff --git a/source b/source index c8972b4e2ab..5d8fe00f9d8 100644 --- a/source +++ b/source @@ -2543,6 +2543,8 @@ a.setAttribute('href', 'https://example.com/'); // change the content attribute
Content-Language
` headerLast-Modified
` headerReferer
` headerStructured headers
'Structured header tokens
'The following terms are defined in HTTP State Management Mechanism:
@@ -2610,6 +2612,7 @@ a.setAttribute('href', 'https://example.com/'); // change the content attributeThe following features are defined in Cross-Origin Embedder Policy:
+ +The Document
has a cross-origin opener policy, which is a cross-origin
+ opener policy, initially "unsafe-none
".
DocumentOrShadowRoot
interfaceDOM defines the setting up a window environment settings object given realm
execution context and topLevelOrigin.
Let coop be "unsafe-none
".
If creator is non-null and creator's origin is + same origin with creator's relevant settings object's + top-level origin, then set coop to creator's top-level + browsing context's active document's cross-origin opener policy.
Let document be a new Document
, marked as an HTML document in quirks mode, whose content type is "text/html
",
origin is origin, active sandboxing flag set is
sandboxFlags, feature policy is
- feature policy, and which is both ready for post-load tasks and
- completely loaded immediately.
Ensure that document has a single child html
node, which itself
has two empty child nodes: a head
element, and a body
element.
A browsing context group has a cross-origin isolated boolean. It is initially false.
+ +The impact of cross-origin + isolated is under discussion in issue + #4734.
+To create a new browsing context group, run these steps:
@@ -77297,6 +77337,29 @@ console.assert(iframeWindow.frameElement === null);If current's top-level browsing context's active
+ document's cross-origin opener policy is
+ "same-origin
" or "same-origin-plus-COEP
",
+ then:
Let currentDocument be current's active + document.
If currentDocument's origin is not same origin
+ with currentDocument's relevant settings object's top-level
+ origin, then set noopener to true and name to "_blank
".
In the presence of a cross-origin opener policy, nested + documents that are cross-origin with their top-level browsing context's active document, + always set noopener to true.
+Set new to true.
If noopener is true, then set chosen to the result @@ -79731,6 +79794,177 @@ interface BarProp { +
A cross-origin opener policy allows a document which is navigated to in a + top-level browsing context to force the creation of a new top-level browsing + context and its group. It has one of the following + values:
+ +unsafe-none
"This is the (current) default and means that the document will occupy the same + top-level browsing context as its predecessor, unless that document specified a + different cross-origin opener policy.
same-origin-allow-popups
"This forces the creation of a new top-level browsing context for the + document, unless its predecessor specified the same cross-origin opener policy and + they are same origin.
same-origin
"This is equivalent to "same-origin-allow-popups
". Additionally, any
+ auxiliary browsing context created needs to contain same origin
+ documents that also have the same cross-origin opener policy or it will appear
+ closed to the opener.
same-origin-plus-COEP
"This is equivalent to "same-origin
". Additionally, it sets the (new)
+ top-level browsing context's group's cross-origin isolated to true.
"same-origin-plus-COEP
" cannot be directly set via the
+ `Cross-Origin-Opener-Policy
` header, but
+ results from a combination of setting both Cross-Origin-Opener-Policy: same-origin
and Cross-Origin-Embedder-Policy: require-corp
together.
To obtain a cross-origin opener policy from a response response and an environment + environment:
+ +Let securityState be the result of executing Is environment + settings object a secure context? on environment.
If securityState is "Not Secure
", then return "unsafe-none
".
Let parsedValue be the result of getting a structured header
+ from response's header list given
+ name `Cross-Origin-Opener-Policy
` and type
+ "item
".
If parsedValue is failure
or null
, then return "unsafe-none
".
If parsedValue bare item is not "same-origin
" or "same-origin-allow-popups
", then return "unsafe-none
".
If parsedValue bare item is "same-origin
", then:
Let coep be the result of obtaining a cross-origin embedder + policy from response.
If coep is "require-corp
", then return "same-origin-plus-COEP
".
Return parsedValue bare item.
To match cross-origin opener policies, given a + cross-origin opener policy A, an origin originA, a + cross-origin opener policy B, and an origin + originB:
+ +If A is "unsafe-none
" and B is "unsafe-none
", then return true.
If A or B is "unsafe-none
", then return
+ false.
If A is B and originA is same origin with + originB, then return true.
Return false.
To obtain a browsing context to use for a + navigation response, given a response + response, a browsing context + browsingContext, a sandboxing flag set sandboxFlags, two origins activeDocumentNavigationOrigin, + incumbentNavigationOrigin, and a cross-origin opener policy + navigationCOOP:
+ +Let incumbentCOOP be the + cross-origin opener policy of currentBrowsingContext's active + document.
If the result of matching + incumbentCOOP, incumbentNavigationOrigin, + navigationCOOP and activeDocumentNavigationOrigin is true, return + browsingContext.
If all of the following are true:
+ +currentBrowsingContext's only entry in its session history is
+ the about:blank
Document
that was added when
+ browsingContext was created.
activeDocumentCOOP is "same-origin-allow-popups
".
navigationCOOP is "unsafe-none
".
then return browsingContext.
+Let newBrowsingContextGroup be the result of creating a new + browsing context group.
If navigationCOOP is "same-origin-plus-COEP
", then set
+ newBrowsingContextGroup cross-origin
+ isolated to true.
Let newBrowsingContext be the result of creating a new browsingContext in newBrowsingContextGroup.
If sandboxFlags is not empty, then:
+Assert navigationCOOP is "unsafe-none
".
Set newBrowsingContext's sandboxing flag set to + sandboxFlags.
Discard + currentBrowsingContext.
+ +This does not close currentBrowsingContext's browsing context + group except if it was the sole top-level browsing context in which case it could be + collected
+Return newBrowsingContext.
The impact of swapping browsing context groups following a navigation is not + defined. It is currently under discussion in issue 5350.
+ + +If browsingContext is a top-level browsing context, then:
+ +Set navigationCOOP to the result of obtaining a + cross-origin opener policy given response and + reservedEnvironment.
If sandboxFlags is not empty and navigationCOOP is not "unsafe-none
", then display the inline
+ content with an appropriate error shown to the user, with the newly created
+ Document
object's origin set to a new opaque origin, run the environment discarding steps for reservedEnvironment, and
+ return.
This results in a network error as one cannot simultaneously provide a clean + slate to a response using cross-origin opener policy and sandbox the result of navigating to + that response.
+Let newBrowsingContext be the value of obtaining a browsing context for the navigation + response given response, browsingContext, sandboxFlags, + activeDocumentNavigationOrigin, incumbentNavigationOrigin, and + navigationCOOP.
Let browsingContextSwitch be false.
If newBrowsingContext is not equal to browsingContext, then set + browsingContextSwitch to true.
Set browsingContext to the value of newBrowsingContext.
If browsingContext's only entry in its session history is the
initial about:blank
Document
that was added when
browsingContext was created, and
@@ -82129,8 +82402,9 @@ interface Location { // but see also type is type, content type is contentType,
origin is origin, feature
- policy is featurePolicy, and active sandboxing flag set is
- finalSandboxFlags.
If request is non-null, then set document's URL to request's @@ -115746,6 +116020,43 @@ interface External { +
Cross-Origin-Opener-Policy
`This section describes a header for registration in the Permanent Message Header Field + Registry.
+ +The Cross-Origin-Opener-Policy
HTTP
+ response header field allows a server to declare an opener policy for a given document. It is a
+ Structured Header whose value MUST be a token. Its ABNF is:
Cross-Origin-Opener-Policy = sh-item
Valid Cross-Origin-Opener-Policy
values include "unsafe-none
", "same-origin-allow-popups
" and "same-origin
".
In order to support forward-compatibility with as-yet-unknown request types, user agents MUST
+ ignore this header if it contains an invalid value. Likewise, user agents MUST ignore this header if
+ the value cannot be parsed as a sh-token
.