[webkit-changes] [WebKit/WebKit] 9d5253: [Site Isolation] Ignore WebPageProxy::didFinishLoa...

Alex Christensen noreply at github.com
Mon Jun 3 20:06:23 PDT 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 9d5253e0766c46f85fe597f82eeb7ed824194c62
      https://github.com/WebKit/WebKit/commit/9d5253e0766c46f85fe597f82eeb7ed824194c62
  Author: Alex Christensen <achristensen at apple.com>
  Date:   2024-06-03 (Mon, 03 Jun 2024)

  Changed paths:
    M Source/WebKit/UIProcess/RemotePageProxy.cpp
    M Source/WebKit/UIProcess/WebPageProxy.cpp
    M Source/WebKit/UIProcess/WebPageProxy.h
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/SiteIsolation.mm

  Log Message:
  -----------
  [Site Isolation] Ignore WebPageProxy::didFinishLoadForFrame message if a load has started in another process
https://bugs.webkit.org/show_bug.cgi?id=275084
rdar://129192839

Reviewed by Charlie Wolfe.

When starting a provisional load in one process then cancelling it to start a provisional load in a different process,
site isolation introduces an unavoidable race condition between the WebPage::DestroyProvisionalFrame message going to
the process that had the first provisional load and the WebPageProxy::DidFinishLoadForFrame message that may be coming
from that same process at the same time.  To solve this, the UI process should ignore such messages coming from a process
that is not the most recent process it has started a provisional load in.

A similar message ignoring exists in the WebPageProxy::didStartProvisionalLoadForFrameShared message receiver for the same reason.

This is the cause of the flaky asserts in debug builds when running the test http/tests/site-isolation/window-open-with-name-cross-site.html
I spent several hours today learning that it's basically impossible to hit this condition reliably in an API test, so I removed
my note to add such a test.  We already have a test that is flaky when this change is not made.

Somewhat related, I changed RemotePageProxy::didCommitLoadForFrame to call WebPageProxy::didCommitLoadForFrame instead of
WebFrameProxy::commitProvisionalFrame to keep the purity of RemotePageProxy as a message forwarder instead of a decision
maker.

* Source/WebKit/UIProcess/RemotePageProxy.cpp:
(WebKit::RemotePageProxy::didCommitLoadForFrame):
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::didFinishLoadForFrame):
* Source/WebKit/UIProcess/WebPageProxy.h:

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