diff --git a/source b/source index 0201c6716a6..9677b1b3439 100644 --- a/source +++ b/source @@ -85117,107 +85117,122 @@ interface History {

A Document document can have its URL rewritten to a - URL url if the following algorithm returns true:

+ URL targetURL if the following algorithm returns true:

  1. Let documentURL be document's URL.

  2. -
  3. If url and documentURL differ in their

    If targetURL and documentURL differ in their scheme, username, password, host, or port components, then return false.

  4. -
  5. -

    If url's origin is not same - origin with document's origin, - and url and documentURL differ in their path or query - components, then return false.

    +
  6. If targetURL's scheme is an + HTTP(S) scheme, then return true. (Differences in path, query, and fragment are allowed for http: and https: URLs.)

  7. -

    Even when the previous step's condition passes, the origins can mismatch due to - sandboxing causing document's origin - to be opaque, or in cases where - document's origin is inherited from - its creator and doesn't match its URL.

    - +
  8. If targetURL's scheme is "file", and targetURL and documentURL differ in their + path component, then return false. (Differences in query and fragment + are allowed for file: URLs.)

  9. + +
  10. If targetURL and documentURL differ in their path component or query + components, then return false. (Only differences in fragment are allowed for other types of URLs.)

  11. Return true.

- - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + +
Document's origin - Document's URL - target URL - can have its URL rewritten -
("https", "example.com", null, null) - https://example.com/home - https://example.com/shop - ✅ -
("https", "example.com", null, null) - https://example.com/home - https://user:pass@example.com/home - ❌ -
("https", "example.com", null, null) - about:blank - about:blank#hash - ✅ -
("https", "example.com", null, null) - about:blank - about:blank?search - ❌ -
("https", "example.com", null, null) - about:blank - about:srcdoc - ❌ -
("https", "example.com", null, null) - blob:https://example.com/77becafe-657b-4fdc-8bd3-e83aaa5e8f43 - blob:https://example.com/anything - ✅ -
("https", "example.com", null, null) - blob:https://example.com/77becafe-657b-4fdc-8bd3-e83aaa5e8f43 - blob:https://example.org/anything - ❌ -
opaque - https://example.com/home - https://example.com/home#about - ✅ -
opaque - https://example.com/home - https://example.com/home?page=shop - ❌ -
opaque - https://example.com/home - https://example.com/shop - ❌ -
opaque - data:text/html,foo - data:text/html,foo#hash - ✅ -
opaque - data:text/html,foo - data:text/html,foo?search - ❌ -
opaque - data:text/html,foo - data:bar - ❌ +
document's URL + targetURL + can have its URL rewritten +
https://example.com/home + https://example.com/home#about + ✅ +
https://example.com/home + https://example.com/home?page=shop + ✅ +
https://example.com/home + https://example.com/shop + ✅ +
https://example.com/home + https://user:pass@example.com/home + ❌ +
https://example.com/home + http://example.com/home + ❌ +
file:///path/to/x + file:///path/to/x#hash + ✅ +
file:///path/to/x + file:///path/to/x?search + ✅ +
file:///path/to/x + file:///path/to/y + ❌ +
about:blank + about:blank#hash + ✅ +
about:blank + about:blank?search + ❌ +
about:blank + about:srcdoc + ❌ +
data:text/html,foo + data:text/html,foo#hash + ✅ +
data:text/html,foo + data:text/html,foo?search + ❌ +
data:text/html,foo + data:text/html,bar + ❌ +
data:text/html,foo + data:bar + ❌ +
blob:https://example.com/77becafe-657b-4fdc-8bd3-e83aaa5e8f43 + blob:https://example.com/77becafe-657b-4fdc-8bd3-e83aaa5e8f43#hash + ✅ +
blob:https://example.com/77becafe-657b-4fdc-8bd3-e83aaa5e8f43 + blob:https://example.com/77becafe-657b-4fdc-8bd3-e83aaa5e8f43?search + ❌ +
blob:https://example.com/77becafe-657b-4fdc-8bd3-e83aaa5e8f43 + blob:https://example.com/anything + ❌ +
blob:https://example.com/77becafe-657b-4fdc-8bd3-e83aaa5e8f43 + blob:path +