Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 45434d689d024c7f54fbf5a316f2f7559af09f4b
      
https://github.com/WebKit/WebKit/commit/45434d689d024c7f54fbf5a316f2f7559af09f4b
  Author: Rupin Mittal <[email protected]>
  Date:   2026-08-12 (Wed, 12 Aug 2026)

  Changed paths:
    M LayoutTests/TestExpectations
    M 
LayoutTests/imported/w3c/web-platform-tests/html/dom/idlharness.https_exclude=(Document_Window_HTML._)-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/anchor-download-aborts-previous-navigation-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-intercept-precommitHandler-redirect_currententrychange-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-intercept-precommitHandler-redirect_no-currententrychange-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-intercept-precommitHandler-reject.tentative_currententrychange-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-intercept-precommitHandler-reject.tentative_no-currententrychange-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-intercept-precommitHandler_currententrychange-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-intercept-precommitHandler_no-currententrychange-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/multiple-intercept-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-addHandler-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-addHandler-throws-expected.txt
    A 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-back-and-forth-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-new-navigation-before-commit-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-push-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-redirect-options-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-redirect-push-changed-to-replace-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-redirect-push-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-redirect-replace-changed-to-push-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-redirect-replace-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-redirect-throws-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-reload-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-replace-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-traversal-window-stop-before-commit-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-traverse-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-uncancelable-expected.txt
    M 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-window-stop-before-commit-expected.txt
    M Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml
    M Source/WebCore/CMakeLists.txt
    M Source/WebCore/DerivedSources.make
    M Source/WebCore/Headers.cmake
    M Source/WebCore/Sources.txt
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    A Source/WebCore/bindings/js/JSNavigationPrecommitControllerCustom.cpp
    M Source/WebCore/bindings/js/WebCoreBuiltinNames.h
    M Source/WebCore/loader/FrameLoadRequest.h
    M Source/WebCore/loader/FrameLoader.h
    M Source/WebCore/loader/FrameLoaderTypes.h
    M Source/WebCore/loader/NavigationScheduler.h
    M Source/WebCore/page/History.h
    M Source/WebCore/page/NavigateEvent.cpp
    M Source/WebCore/page/NavigateEvent.h
    M Source/WebCore/page/NavigateEvent.idl
    M Source/WebCore/page/Navigation.cpp
    M Source/WebCore/page/Navigation.h
    M Source/WebCore/page/Navigation.idl
    M Source/WebCore/page/NavigationDestination.h
    A Source/WebCore/page/NavigationHistoryBehavior.h
    A Source/WebCore/page/NavigationHistoryBehavior.idl
    A Source/WebCore/page/NavigationNavigateOptions.h
    A Source/WebCore/page/NavigationNavigateOptions.idl
    A Source/WebCore/page/NavigationOptions.h
    A Source/WebCore/page/NavigationOptions.idl
    A Source/WebCore/page/NavigationPrecommitController.cpp
    A Source/WebCore/page/NavigationPrecommitController.h
    A Source/WebCore/page/NavigationPrecommitController.idl
    A Source/WebCore/page/NavigationPrecommitHandler.h
    A Source/WebCore/page/NavigationPrecommitHandler.idl
    A Source/WebCore/page/NavigationReloadOptions.h
    A Source/WebCore/page/NavigationReloadOptions.idl
    M Source/WebCore/page/NavigationTransition.cpp
    M Source/WebCore/page/NavigationTransition.h
    M Source/WebCore/page/NavigationTransition.idl

  Log Message:
  -----------
  [Navigation API] Implement Precommit Handler
https://bugs.webkit.org/show_bug.cgi?id=321260
rdar://184311803

Reviewed by Basuke Suzuki.

This patch implements the Precommit Handler of the Navigation API according
to https://html.spec.whatwg.org/multipage/nav-history-apis.html#navigation-api.

This is guarded behind the new NavigationAPIPrecommitHandler feature flag
which is currently marked as "testable". There are still a few tests that
are not passing yet. Once those are fixed, we will enable the flag in stable.

* LayoutTests/TestExpectations:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-addHandler-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-addHandler-throws-expected.txt:
 Added.
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-back-and-forth-expected.txt:
 Added.
* Source/WebCore/CMakeLists.txt:
* Source/WebCore/DerivedSources.make:
* Source/WebCore/Sources.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/bindings/js/JSNavigationPrecommitControllerCustom.cpp: Added.
(WebCore::JSNavigationPrecommitController::visitAdditionalChildrenInGCThread):
* Source/WebCore/bindings/js/WebCoreBuiltinNames.h:
* Source/WebCore/page/NavigateEvent.cpp:
(WebCore::NavigateEvent::setInfo):
(WebCore::NavigateEvent::intercept):
* Source/WebCore/page/NavigateEvent.h:
* Source/WebCore/page/NavigateEvent.idl:
* Source/WebCore/page/Navigation.cpp:
(WebCore::Navigation::documentCanHaveURLRewritten):
(WebCore::Navigation::createTransitionForInterception):
(WebCore::Navigation::setupInterceptionState):
(WebCore::Navigation::runNavigatePrecommitHandlers):
(WebCore::Navigation::innerDispatchNavigateEvent):
(WebCore::documentCanHaveURLRewritten): Deleted.
(WebCore::Navigation::reload):
(WebCore::Navigation::navigate):
(WebCore::Navigation::performTraversal):
(WebCore::Navigation::traverseTo):
(WebCore::Navigation::back):
(WebCore::Navigation::forward):
* Source/WebCore/page/Navigation.h:
(WebCore::NavigationAPIMethodTracker::setSerializedState):
* Source/WebCore/page/NavigationDestination.h:
* Source/WebCore/page/NavigationPrecommitController.cpp: Added.
(WebCore::NavigationPrecommitController::NavigationPrecommitController):
(WebCore::NavigationPrecommitController::redirect):
(WebCore::NavigationPrecommitController::addHandler):
* Source/WebCore/page/NavigationPrecommitController.h: Added.
* Source/WebCore/page/NavigationPrecommitController.idl: Added.
* Source/WebCore/page/NavigationPrecommitHandler.h: Copied from 
Source/WebCore/page/NavigationDestination.h.
(WebCore::NavigationPrecommitHandler::isJSNavigationPrecommitHandler const):
* Source/WebCore/page/NavigationPrecommitHandler.idl: Added.
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-intercept-precommitHandler-redirect_currententrychange-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-intercept-precommitHandler-redirect_no-currententrychange-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-intercept-precommitHandler-reject.tentative_currententrychange-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-intercept-precommitHandler-reject.tentative_no-currententrychange-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-intercept-precommitHandler_currententrychange-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/navigate-intercept-precommitHandler_no-currententrychange-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/multiple-intercept-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-new-navigation-before-commit-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-push-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-redirect-options-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-redirect-push-changed-to-replace-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-redirect-push-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-redirect-replace-changed-to-push-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-redirect-replace-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-redirect-throws-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-reload-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-replace-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-traversal-window-stop-before-commit-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-traverse-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-uncancelable-expected.txt:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/precommit-handler/precommitHandler-window-stop-before-commit-expected.txt:
* Source/WebCore/loader/FrameLoaderTypes.h:
* Source/WebCore/page/Navigation.idl:
* Source/WebCore/page/NavigationHistoryBehavior.h: Added.
* Source/WebCore/page/NavigationHistoryBehavior.idl: Added.
* Source/WebCore/page/NavigationNavigateOptions.h: Added.
* Source/WebCore/page/NavigationNavigateOptions.idl: Added.
* Source/WebCore/page/NavigationOptions.h: Added.
* Source/WebCore/page/NavigationOptions.idl: Added.
* Source/WebCore/page/NavigationReloadOptions.h: Added.
* Source/WebCore/page/NavigationReloadOptions.idl: Added.
* 
LayoutTests/imported/w3c/web-platform-tests/html/dom/idlharness.https_exclude=(Document_Window_HTML._)-expected.txt:
* Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml:
* Source/WebCore/Headers.cmake:
* Source/WebCore/loader/FrameLoadRequest.h:
* Source/WebCore/loader/FrameLoader.h:
* Source/WebCore/loader/NavigationScheduler.h:
* Source/WebCore/page/History.h:
* Source/WebCore/page/NavigationTransition.cpp:
(WebCore::NavigationTransition::create):
(WebCore::NavigationTransition::NavigationTransition):
(WebCore::NavigationTransition::resolveCommitted):
(WebCore::NavigationTransition::rejectPromise):
(WebCore::NavigationTransition::committed):
* Source/WebCore/page/NavigationTransition.h:
* Source/WebCore/page/NavigationTransition.idl:
* 
LayoutTests/imported/w3c/web-platform-tests/navigation-api/ordering-and-transition/anchor-download-aborts-previous-navigation-expected.txt:

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



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

Reply via email to