[webkit-changes] [WebKit/WebKit] 76a11d: [Navigation] Dispatch NavigateEvent on reload

Rob Buis noreply at github.com
Fri Sep 13 01:16:28 PDT 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 76a11dfefffc787445970c5150db31e82cca32de
      https://github.com/WebKit/WebKit/commit/76a11dfefffc787445970c5150db31e82cca32de
  Author: Rob Buis <rbuis at igalia.com>
  Date:   2024-09-13 (Fri, 13 Sep 2024)

  Changed paths:
    M LayoutTests/TestExpectations
    M LayoutTests/imported/w3c/web-platform-tests/navigation-api/currententrychange-event/navigation-reload-intercept-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigate-event/navigate-destination-getState-reload-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigation-history-entry/key-id-location-reload-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigation-methods/reload-info-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigation-methods/reload-no-args-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigation-methods/reload-state-and-info-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigation-methods/reload-state-undefined-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigation-methods/return-value/reload-detach-in-onnavigate-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigation-methods/return-value/reload-intercept-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigation-methods/return-value/reload-intercept-rejected-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigation-methods/return-value/reload-preventDefault-expected.txt
    R LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigation-methods/return-value/reload-rejection-order-unload-unserializablestate-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/navigation-api/per-entry-events/dispose-same-document-reload-with-intercept-expected.txt
    M Source/WebCore/loader/DocumentWriter.cpp
    M Source/WebCore/loader/FrameLoader.cpp
    M Source/WebCore/loader/FrameLoader.h
    M Source/WebCore/page/Navigation.cpp
    M Source/WebCore/page/Navigation.h
    M Source/WebCore/page/NavigationHistoryEntry.cpp
    M Source/WebCore/page/NavigationHistoryEntry.h

  Log Message:
  -----------
  [Navigation] Dispatch NavigateEvent on reload
https://bugs.webkit.org/show_bug.cgi?id=273688

Reviewed by Alex Christensen.

Various kinds of reloads, such as navigation.reload() and location.reload() need to dispatch the NavigateEvent [1]. Since a reload triggered
by browser UI (i.e. clicking the reload button on the crome UI) should not dispatch the NavigateEvent, put the logic in FrameLoader::loadFrameRequest
and not in FrameLoader::reload. And for the same reason, make Navigation::reload go through FrameLoader::changeLocation and thus FrameLoader::loadFrameRequest.

This PR also introduces logic to deal with a reload causing an existing window, and matching navigation, to be discarded in favour of a new window and navigation
combination, in that case we have to copy over the navigation entries from the previous Navigation instance.

[1] https://html.spec.whatwg.org/multipage/browsing-the-web.html#reloading-and-traversing:fire-a-push/replace/reload-navigate-event

* LayoutTests/TestExpectations:
* LayoutTests/imported/w3c/web-platform-tests/navigation-api/currententrychange-event/navigation-reload-intercept-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigate-event/navigate-destination-getState-reload-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigation-history-entry/key-id-location-reload-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigation-methods/reload-info-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigation-methods/reload-no-args-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigation-methods/reload-state-and-info-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigation-methods/reload-state-undefined-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigation-methods/return-value/reload-detach-in-onnavigate-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigation-methods/return-value/reload-intercept-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigation-methods/return-value/reload-intercept-rejected-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigation-methods/return-value/reload-preventDefault-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/navigation-api/navigation-methods/return-value/reload-rejection-order-unload-unserializablestate-expected.txt: Removed.
* LayoutTests/imported/w3c/web-platform-tests/navigation-api/per-entry-events/dispose-same-document-reload-with-intercept-expected.txt:
* Source/WebCore/loader/DocumentWriter.cpp:
(WebCore::DocumentWriter::begin):
* Source/WebCore/loader/FrameLoader.cpp:
(WebCore::FrameLoader::didBeginDocument):
(WebCore::FrameLoader::loadFrameRequest):
(WebCore::FrameLoader::loadURL):
(WebCore::FrameLoader::loadPostRequest):
(WebCore::FrameLoader::dispatchNavigateEvent):
(WebCore::FrameLoader::updateNavigationAPIEntries): Deleted.
* Source/WebCore/loader/FrameLoader.h:
* Source/WebCore/page/Navigation.cpp:
(WebCore::Navigation::initializeForNewWindow):
(WebCore::Navigation::reload):
(WebCore::Navigation::notifyCommittedToEntry):
(WebCore::Navigation::abortOngoingNavigation):
(WebCore::Navigation::innerDispatchNavigateEvent):
(WebCore::Navigation::initializeEntries): Deleted.
* Source/WebCore/page/Navigation.h:
* Source/WebCore/page/NavigationHistoryEntry.cpp:
(WebCore::NavigationHistoryEntry::NavigationHistoryEntry):
(WebCore::NavigationHistoryEntry::create):
(WebCore::NavigationHistoryEntry::getState const):
(WebCore::NavigationHistoryEntry::setState):
* Source/WebCore/page/NavigationHistoryEntry.h:

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



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


More information about the webkit-changes mailing list