Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 38c5d28581eaffca013a946062c56e0bf8f5f5f1
      
https://github.com/WebKit/WebKit/commit/38c5d28581eaffca013a946062c56e0bf8f5f5f1
  Author: Basuke Suzuki <[email protected]>
  Date:   2026-07-14 (Tue, 14 Jul 2026)

  Changed paths:
    M LayoutTests/TestExpectations
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/focus-reset/autofocus_same-checkpoint-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/anchor-download-intercept-reject_currententrychange-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/anchor-download-intercept-reject_no-currententrychange-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/anchor-download-intercept_currententrychange-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/anchor-download-intercept_no-currententrychange-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/location-href-intercept-reject_currententrychange-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/location-href-intercept-reject_no-currententrychange-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/location-href-intercept_currententrychange-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/location-href-intercept_no-currententrychange-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-204-205-download-then-same-document-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-in-transition-finished_currententrychange-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-in-transition-finished_no-currententrychange-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-intercept_currententrychange-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-intercept_no-currententrychange-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-same-document-intercept-reject_currententrychange-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-same-document-intercept-reject_no-currententrychange-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-same-document_currententrychange-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-same-document_no-currententrychange-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/reload-intercept-reject_currententrychange-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/reload-intercept-reject_no-currententrychange-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/reload-intercept_currententrychange-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/reload-intercept_no-currententrychange-expected.txt
    M Source/WebCore/page/Navigation.cpp

  Log Message:
  -----------
  [Navigation API] Fix wait-for-all implementation to not use wrapper promise
https://bugs.webkit.org/show_bug.cgi?id=311968
rdar://174350133

Reviewed by Rupin Mittal.

The Navigation API spec settles intercept handler promises with #wait-for-all
(WebIDL 3.2.24.1), which invokes the success/failure steps directly from the
handler promises' reactions. PromiseSettlementObserver instead resolved a
wrapper DeferredPromise and had the caller react to it, which is
navigatesuccess was dispatched after the committed promise's reactions instead
of before, breaking the event/promise ordering for push, replace and reload
same-document navigations.

Refactor PromiseSettlementObserver to take success/failure callbacks and invoke
them directly, matching #wait-for-all. The observer's lifetime is kept by the
Ref captures in the per-promise reaction handlers (and the empty-list
microtask).

For traverse navigations the committed-to entry is notified earlier, so its
committed promise reactions must run before navigatesuccess. Delay only the
navigatesuccess dispatch (and the finished-promise resolution that follows it)
by one microtask for traverse; the focus reset and scroll restoration in
NavigateEvent::finish() still run promptly.

This fixes the ordering for the imported WPT navigation-api 
ordering-and-transition
tests, so their baselines are updated to all-PASS, and reload-no-popstate.html 
is
unskipped.

* Source/WebCore/page/Navigation.cpp:
(WebCore::PromiseSettlementObserver::create):
(WebCore::PromiseSettlementObserver::waitForAll):
(WebCore::PromiseSettlementObserver::PromiseSettlementObserver):
(WebCore::PromiseSettlementObserver::resolve):
(WebCore::PromiseSettlementObserver::reject):
(WebCore::PromiseSettlementObserver::handleResult):
(WebCore::PromiseSettlementObserver::waitForAllPromises): Deleted.
(WebCore::PromiseSettlementObserver::isSettled): Deleted.
(WebCore::PromiseSettlementObserver::consumeWrapper): Deleted.
(WebCore::Navigation::handleSameDocumentNavigation):
(WebCore::PromiseSettlementObserver::registerPromises):
(WebCore::PromiseSettlementObserver::wait):
(WebCore::PromiseSettlementObserver::isSettled const): Deleted.
* LayoutTests/TestExpectations:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/focus-reset/autofocus_same-checkpoint-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/anchor-download-intercept_currententrychange-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/anchor-download-intercept_no-currententrychange-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/anchor-download-intercept-reject_currententrychange-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/anchor-download-intercept-reject_no-currententrychange-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/location-href-intercept_currententrychange-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/location-href-intercept_no-currententrychange-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/location-href-intercept-reject_currententrychange-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/location-href-intercept-reject_no-currententrychange-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-204-205-download-then-same-document-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-in-transition-finished_currententrychange-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-in-transition-finished_no-currententrychange-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-intercept_currententrychange-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-intercept_no-currententrychange-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-same-document_currententrychange-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-same-document_no-currententrychange-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-same-document-intercept-reject_currententrychange-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-same-document-intercept-reject_no-currententrychange-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/reload-intercept_currententrychange-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/reload-intercept_no-currententrychange-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/reload-intercept-reject_currententrychange-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/reload-intercept-reject_no-currententrychange-expected.txt:

Canonical link: https://commits.webkit.org/317203@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to