[webkit-changes] [WebKit/WebKit] 025e1d: Begin implementing provisional navigation cancelli...

Alex Christensen noreply at github.com
Fri May 10 13:06:27 PDT 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 025e1d2fda31b65326961d5c99039356b2eb7ece
      https://github.com/WebKit/WebKit/commit/025e1d2fda31b65326961d5c99039356b2eb7ece
  Author: Alex Christensen <achristensen at apple.com>
  Date:   2024-05-10 (Fri, 10 May 2024)

  Changed paths:
    M Source/WebKit/UIProcess/RemotePageProxy.cpp
    M Source/WebKit/UIProcess/RemotePageProxy.h
    M Source/WebKit/UIProcess/WebFrameProxy.cpp
    M Source/WebKit/UIProcess/WebFrameProxy.h
    M Source/WebKit/UIProcess/WebPageProxy.cpp
    M Source/WebKit/WebProcess/WebCoreSupport/WebLocalFrameLoaderClient.cpp
    M Source/WebKit/WebProcess/WebPage/WebFrame.cpp
    M Source/WebKit/WebProcess/WebPage/WebFrame.h
    M Source/WebKit/WebProcess/WebPage/WebPage.cpp
    M Source/WebKit/WebProcess/WebPage/WebPage.h
    M Source/WebKit/WebProcess/WebPage/WebPage.messages.in
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/SiteIsolation.mm

  Log Message:
  -----------
  Begin implementing provisional navigation cancelling with site isolation
https://bugs.webkit.org/show_bug.cgi?id=273971
rdar://127836397

Reviewed by Charlie Wolfe.

When more than two processes are involved, there is an unavoidable time between when
the UI process tells one web process to start a provisional load and when it tells another
web process to start another provisional load that the first web process may have sent a
message to the UI process saying the provisional load has started.  If we don't ignore this
message, the UI process accounting of which frames are in a provisional load state and in
which process gets messed up.  In addition, when starting the second provisional load, we
need to tell the first provisional load process to destroy its provisional frame.

I renamed "prepareForProvisionalNavigationInProcess" to "prepareForProvisionalLoadInProcess"
because "Navigation" is a term we use mostly consistently to refer to a main frame load.

I renamed "provisionalLoadFailed" to "destroyProvisionalFrame" because it is now used for
more than just when a provisional load fails.  It's now used for when a provisional load
is intentionally cancelled.

This is just what it took to get the most controlled case of provisional load cancelling
working reliably with a test.  There's still more work to be done in this area, so I left
a FIXME comment in the test indicating how to test those cases.  I think we'll eventually
have to come up with something better than using Navigation::currentRequestIsCrossSiteRedirect.

* Source/WebKit/UIProcess/FrameLoadState.cpp:
(WebKit::FrameLoadState::didStartProvisionalLoad):
(WebKit::FrameLoadState::didFailProvisionalLoad):
(WebKit::FrameLoadState::didCommitLoad):
(WebKit::FrameLoadState::didFinishLoad):
(WebKit::FrameLoadState::didFailLoad):
* Source/WebKit/UIProcess/RemotePageProxy.cpp:
(WebKit::RemotePageProxy::didReceiveMessage):
(WebKit::RemotePageProxy::didStartProvisionalLoadForFrame):
* Source/WebKit/UIProcess/RemotePageProxy.h:
* Source/WebKit/UIProcess/WebFrameProxy.cpp:
(WebKit::WebFrameProxy::prepareForProvisionalNavigationInProcess):
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::receivedNavigationActionPolicyDecision):
(WebKit::WebPageProxy::continueNavigationInNewProcess):
(WebKit::WebPageProxy::didStartProvisionalLoadForFrameShared):
* Source/WebKit/WebProcess/WebCoreSupport/WebLocalFrameLoaderClient.cpp:
(WebKit::WebLocalFrameLoaderClient::dispatchDidStartProvisionalLoad):
* Source/WebKit/WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::loadRequest):
* Tools/TestWebKitAPI/Tests/WebKitCocoa/SiteIsolation.mm:
(TestWebKitAPI::TEST(SiteIsolation, CancelProvisionalLoad)):

Canonical link: https://commits.webkit.org/278624@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