Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make named window lookup more precise and correct BCG swap logic #10818

Merged
merged 6 commits into from
Dec 12, 2024

Conversation

kjmcnee
Copy link
Contributor

@kjmcnee kjmcnee commented Dec 4, 2024

In "the rules for choosing a navigable," the method to find an existing navigable by name is vague. This updates the definition to accurately reflect what the major implementations do. There are some differences between implementations, so there remains in the spec some optional/implementation-defined behavior, but it's much narrower. In particular, note that lookups are now explicitly scoped to browsing context groups. The previous language in the named lookup about "the user agent determines that the two browsing contexts are related enough" is now no longer a part of the lookup logic, but a consequence of the BCG swap decisions.

In "obtain a browsing context to use for a navigation response," the existing spec only mentions COOP enforcement as a reason to do a browsing context group swap. Some implementations perform a swap for additional security and performance reasons. This is now reflected in the spec.

For context, see:

This closes #313, but we have opened the following issues to track the remaining implementation-defined interop gaps: #6356, #10842, #10848, #10849, #10850.

(See WHATWG Working Mode: Changes for more details.)


/acknowledgements.html ( diff )
/browsers.html ( diff )
/browsing-the-web.html ( diff )
/document-lifecycle.html ( diff )
/document-sequences.html ( diff )

@domenic
Copy link
Member

domenic commented Dec 4, 2024

Oh my goodness, what a great early Christmas gift!!

@annevk, do you want to take a look? I can help with editorial review and tweaks but I'd like to know how you feel about the approach to normative algorithm and strategy.

@kjmcnee, do you think there are web platform tests we could write for this, despite the remaining implementation-defined behavior?

Copy link
Member

@annevk annevk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wow, thanks for improving this! Overall this seems solid. I wouldn't mind us being a bit more opinionated here and there to guide implementations in a certain direction, but that can also be follow-up.

@farre can hopefully also make some time to review this.

source Outdated Show resolved Hide resolved
source Outdated Show resolved Hide resolved
source Outdated Show resolved Hide resolved
source Outdated Show resolved Hide resolved
In "the rules for choosing a navigable," the method to find an existing
navigable by name is vague. This updates the definition to accurately
reflect what the major implementations do. There are some differences
between implementations, so there remains in the spec some
optional/implementation-defined behaviour, but it's much narrower.
In particular, note that lookups are now explicitly scoped to
browsing context groups. The previous language in the named lookup
about "the user agent determines that the two browsing contexts are
related enough" is now no longer a part of the lookup logic, but a
consequence of the BCG swap decisions.

In "obtain a browsing context to use for a navigation response," the
existing spec only mentions COOP enforcement as a reason to do a
browsing context group swap. Some implementations perform a swap for
additional security and performance reasons. This is now reflected
in the spec.
@kjmcnee
Copy link
Contributor Author

kjmcnee commented Dec 10, 2024

do you think there are web platform tests we could write for this, despite the remaining implementation-defined behavior?

Yeah, there are some common behaviours that can be tested. I've sent you a CL here: https://chromium-review.googlesource.com/c/chromium/src/+/6081814

@kjmcnee
Copy link
Contributor Author

kjmcnee commented Dec 10, 2024

Scheduling note: I'll be OOO from the 11th to January. If there are no issues, feel free to merge while I'm out.

chromium-wpt-export-bot pushed a commit to web-platform-tests/wpt that referenced this pull request Dec 10, 2024
These tests verify the behaviour discussed here:
whatwg/html#10818

While there is some implementation defined behaviour, we can add tests
for the behaviour that's consistent between the major implementations,
namely that proactive browsing context group swaps can't be done while
another context exists in the group, that named lookups are scoped to
browsing context groups, and the lookup order in the case of multiple
contexts with the same name.

Bug: None
Change-Id: I515f527fb94a711bdd8eeb6610df2127571dcc3c
aarongable pushed a commit to chromium/chromium that referenced this pull request Dec 11, 2024
These tests verify the behaviour discussed here:
whatwg/html#10818

While there is some implementation defined behaviour, we can add tests
for the behaviour that's consistent between the major implementations,
namely that proactive browsing context group swaps can't be done while
another context exists in the group, that named lookups are scoped to
browsing context groups, and the lookup order in the case of multiple
contexts with the same name.

Bug: None
Change-Id: I515f527fb94a711bdd8eeb6610df2127571dcc3c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6081814
Reviewed-by: Domenic Denicola <[email protected]>
Commit-Queue: Kevin McNee <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1394596}
chromium-wpt-export-bot pushed a commit to web-platform-tests/wpt that referenced this pull request Dec 11, 2024
These tests verify the behaviour discussed here:
whatwg/html#10818

While there is some implementation defined behaviour, we can add tests
for the behaviour that's consistent between the major implementations,
namely that proactive browsing context group swaps can't be done while
another context exists in the group, that named lookups are scoped to
browsing context groups, and the lookup order in the case of multiple
contexts with the same name.

Bug: None
Change-Id: I515f527fb94a711bdd8eeb6610df2127571dcc3c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6081814
Reviewed-by: Domenic Denicola <[email protected]>
Commit-Queue: Kevin McNee <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1394596}
chromium-wpt-export-bot pushed a commit to web-platform-tests/wpt that referenced this pull request Dec 11, 2024
These tests verify the behaviour discussed here:
whatwg/html#10818

While there is some implementation defined behaviour, we can add tests
for the behaviour that's consistent between the major implementations,
namely that proactive browsing context group swaps can't be done while
another context exists in the group, that named lookups are scoped to
browsing context groups, and the lookup order in the case of multiple
contexts with the same name.

Bug: None
Change-Id: I515f527fb94a711bdd8eeb6610df2127571dcc3c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6081814
Reviewed-by: Domenic Denicola <[email protected]>
Commit-Queue: Kevin McNee <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1394596}
Copy link
Member

@domenic domenic left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did a more detailed review, and this is looking great. I guess we might have missed you, so we'll probably have to finish this ourselves, but if you're able to help, one thing that would be very nice would be a clearer documentation of the implementation-defined cases.

From what I can see we have the following:

  • sourceOrigin or destinationOrigin are non-HTTP(S), BCG swap is optional. Force a browsing context group swap when navigating to and from file: URLs #10842
  • "browser UI", BCG swap is optional. Part of What kind of new 'session' is created on manual navigation? #6356 although that's broader
  • BCG size is 1. The spec has clear notes about this one.
  • subtreesToSearch choice is either (top, window) or (top, ..., window). Can you give us more detail on why this is implementation-defined? Like, does Chromium choose differently depending on certain circumstances, and if so, which circumstances? Do you know what would motivate one choice or another?
  • Optionally check "allowed by sandboxing to navigate" (in two places). Why is this optional?
  • Implementation-defined order for searching through the BCG by name. This is pretty clear from the spec, but in the interest of maybe nailing this down in the future, can you tell us what Chromium picks?

source Outdated Show resolved Hide resolved
source Outdated Show resolved Hide resolved
@kjmcnee
Copy link
Contributor Author

kjmcnee commented Dec 11, 2024

I did a more detailed review, and this is looking great. I guess we might have missed you, so we'll probably have to finish this ourselves, but if you're able to help, one thing that would be very nice would be a clearer documentation of the implementation-defined cases.

Hi. I'm no longer at my work computer, but I can comment on the implementation differences.

  • subtreesToSearch choice is either (top, window) or (top, ..., window). Can you give us more detail on why this is implementation-defined? Like, does Chromium choose differently depending on certain circumstances, and if so, which circumstances? Do you know what would motivate one choice or another?

WebKit and Chromium search the requesting window's subtree then search from the top. Firefox iterates and searches from each ancestor. If there's a way to express in the spec that the implementation-defined behavior is fixed for the instance of the user agent, then that'd be appropriate here.

  • Optionally check "allowed by sandboxing to navigate" (in two places). Why is this optional?

Firefox and Chromium do this. WebKit does not. Similarly, the choice is fixed for the implementation.

  • Implementation-defined order for searching through the BCG by name. This is pretty clear from the spec, but in the interest of maybe nailing this down in the future, can you tell us what Chromium picks?

I can't remember the details, but I think Chromium and Firefox are based on creation order, or maybe reverse creation order. WebKit's ordering is arbitrary as it iterates over a hash set.

@domenic
Copy link
Member

domenic commented Dec 11, 2024

Amazing, thank you so much Kevin.

I've filed follow-up issues for all of those. I will now push edits to the spec that take care of source formatting, and point to those follow-up issues. Then @annevk can review.

This uncovered a couple places where it was missing
We named that parameter "userInvolvementForNavigateEvents" specifically because we left it null in cases where navigate events don't happen. But, there are cases where we need to consult user involvement for the BCG swap. So we need to thread it through more.

This is probably better anyways as it's more consistent.
@domenic domenic added interop Implementations are not interoperable with each other topic: frames/navigables/browsing contexts labels Dec 11, 2024
@domenic
Copy link
Member

domenic commented Dec 11, 2024

This is ready for review. I'd like @annevk or @domfarolino as additional reviewers, if possible, given the changes I made.

Almost all of them were related to threading the "user navigation involvement" through more thoroughly. Kevin's initial draft left it as the default of "none" in some cases (e.g. error pages) that implementations might care about, and it reused userInvolvementForNavigateEvents which was often set to null. I'm not sure if the latter cases actually overlap with cases where the UA would care, but it seemed better to fix it up. So a lot of changed lines are just related to that.

I'm also going OOO within the next day or two so any help getting this over the finish line is much appreciated.

picking a specific ordering, to achieve interoperability.</p>

<ol>
<li><p>If <var>currentTopLevelBrowsingContext</var> equals <var>topLevelBrowsingContext</var>,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: maybe this should use "is".

@domenic domenic merged commit f23f559 into whatwg:main Dec 12, 2024
2 checks passed
moz-v2v-gh pushed a commit to mozilla/gecko-dev that referenced this pull request Dec 13, 2024
… swap limits, a=testonly

Automatic update from web-platform-tests
Add WPTs for named window lookup and BCG swap limits

These tests verify the behaviour discussed here:
whatwg/html#10818

While there is some implementation defined behaviour, we can add tests
for the behaviour that's consistent between the major implementations,
namely that proactive browsing context group swaps can't be done while
another context exists in the group, that named lookups are scoped to
browsing context groups, and the lookup order in the case of multiple
contexts with the same name.

Bug: None
Change-Id: I515f527fb94a711bdd8eeb6610df2127571dcc3c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6081814
Reviewed-by: Domenic Denicola <[email protected]>
Commit-Queue: Kevin McNee <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1394596}

--

wpt-commits: 1f7679ad01691ea3885537b8b19e1b88a0e7f152
wpt-pr: 49631
i3roly pushed a commit to i3roly/firefox-dynasty that referenced this pull request Dec 14, 2024
… swap limits, a=testonly

Automatic update from web-platform-tests
Add WPTs for named window lookup and BCG swap limits

These tests verify the behaviour discussed here:
whatwg/html#10818

While there is some implementation defined behaviour, we can add tests
for the behaviour that's consistent between the major implementations,
namely that proactive browsing context group swaps can't be done while
another context exists in the group, that named lookups are scoped to
browsing context groups, and the lookup order in the case of multiple
contexts with the same name.

Bug: None
Change-Id: I515f527fb94a711bdd8eeb6610df2127571dcc3c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6081814
Reviewed-by: Domenic Denicola <[email protected]>
Commit-Queue: Kevin McNee <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1394596}

--

wpt-commits: 1f7679ad01691ea3885537b8b19e1b88a0e7f152
wpt-pr: 49631
gecko-dev-updater pushed a commit to marco-c/gecko-dev-wordified-and-comments-removed that referenced this pull request Dec 16, 2024
… swap limits, a=testonly

Automatic update from web-platform-tests
Add WPTs for named window lookup and BCG swap limits

These tests verify the behaviour discussed here:
whatwg/html#10818

While there is some implementation defined behaviour, we can add tests
for the behaviour that's consistent between the major implementations,
namely that proactive browsing context group swaps can't be done while
another context exists in the group, that named lookups are scoped to
browsing context groups, and the lookup order in the case of multiple
contexts with the same name.

Bug: None
Change-Id: I515f527fb94a711bdd8eeb6610df2127571dcc3c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6081814
Reviewed-by: Domenic Denicola <domenicchromium.org>
Commit-Queue: Kevin McNee <mcneechromium.org>
Cr-Commit-Position: refs/heads/main{#1394596}

--

wpt-commits: 1f7679ad01691ea3885537b8b19e1b88a0e7f152
wpt-pr: 49631

UltraBlame original commit: 7c930d5bca8252fcec21396df3f9ecc6a7ae3e02
gecko-dev-updater pushed a commit to marco-c/gecko-dev-comments-removed that referenced this pull request Dec 16, 2024
… swap limits, a=testonly

Automatic update from web-platform-tests
Add WPTs for named window lookup and BCG swap limits

These tests verify the behaviour discussed here:
whatwg/html#10818

While there is some implementation defined behaviour, we can add tests
for the behaviour that's consistent between the major implementations,
namely that proactive browsing context group swaps can't be done while
another context exists in the group, that named lookups are scoped to
browsing context groups, and the lookup order in the case of multiple
contexts with the same name.

Bug: None
Change-Id: I515f527fb94a711bdd8eeb6610df2127571dcc3c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6081814
Reviewed-by: Domenic Denicola <domenicchromium.org>
Commit-Queue: Kevin McNee <mcneechromium.org>
Cr-Commit-Position: refs/heads/main{#1394596}

--

wpt-commits: 1f7679ad01691ea3885537b8b19e1b88a0e7f152
wpt-pr: 49631

UltraBlame original commit: 7c930d5bca8252fcec21396df3f9ecc6a7ae3e02
gecko-dev-updater pushed a commit to marco-c/gecko-dev-wordified that referenced this pull request Dec 16, 2024
… swap limits, a=testonly

Automatic update from web-platform-tests
Add WPTs for named window lookup and BCG swap limits

These tests verify the behaviour discussed here:
whatwg/html#10818

While there is some implementation defined behaviour, we can add tests
for the behaviour that's consistent between the major implementations,
namely that proactive browsing context group swaps can't be done while
another context exists in the group, that named lookups are scoped to
browsing context groups, and the lookup order in the case of multiple
contexts with the same name.

Bug: None
Change-Id: I515f527fb94a711bdd8eeb6610df2127571dcc3c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6081814
Reviewed-by: Domenic Denicola <domenicchromium.org>
Commit-Queue: Kevin McNee <mcneechromium.org>
Cr-Commit-Position: refs/heads/main{#1394596}

--

wpt-commits: 1f7679ad01691ea3885537b8b19e1b88a0e7f152
wpt-pr: 49631

UltraBlame original commit: 7c930d5bca8252fcec21396df3f9ecc6a7ae3e02
ErichDonGubler pushed a commit to erichdongubler-mozilla/firefox that referenced this pull request Dec 19, 2024
… swap limits, a=testonly

Automatic update from web-platform-tests
Add WPTs for named window lookup and BCG swap limits

These tests verify the behaviour discussed here:
whatwg/html#10818

While there is some implementation defined behaviour, we can add tests
for the behaviour that's consistent between the major implementations,
namely that proactive browsing context group swaps can't be done while
another context exists in the group, that named lookups are scoped to
browsing context groups, and the lookup order in the case of multiple
contexts with the same name.

Bug: None
Change-Id: I515f527fb94a711bdd8eeb6610df2127571dcc3c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6081814
Reviewed-by: Domenic Denicola <[email protected]>
Commit-Queue: Kevin McNee <[email protected]>
Cr-Commit-Position: refs/heads/main@{#1394596}

--

wpt-commits: 1f7679ad01691ea3885537b8b19e1b88a0e7f152
wpt-pr: 49631
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
interop Implementations are not interoperable with each other topic: frames/navigables/browsing contexts
Development

Successfully merging this pull request may close these issues.

Disowning owner should perhaps affect link targeting
3 participants