[webkit-changes] [WebKit/WebKit] fa3599: Isolated iframes that crash during load should not...

Alex Christensen noreply at github.com
Thu Jan 4 13:01:12 PST 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: fa35998e9caf2c45f333bdd7bfff310af2c06e56
      https://github.com/WebKit/WebKit/commit/fa35998e9caf2c45f333bdd7bfff310af2c06e56
  Author: Alex Christensen <achristensen at apple.com>
  Date:   2024-01-04 (Thu, 04 Jan 2024)

  Changed paths:
    A LayoutTests/http/tests/site-isolation/iframe-process-termination-expected.html
    A LayoutTests/http/tests/site-isolation/iframe-process-termination.html
    A LayoutTests/http/tests/site-isolation/resources/iframe-terminate-process-when-loaded.html
    M LayoutTests/platform/ios/TestExpectations
    M Source/WebCore/testing/Internals.cpp
    M Source/WebCore/testing/Internals.h
    M Source/WebCore/testing/Internals.idl
    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/UIProcess/WebProcessProxy.cpp

  Log Message:
  -----------
  Isolated iframes that crash during load should not delay load event of parent
https://bugs.webkit.org/show_bug.cgi?id=267089

Reviewed by Pascoe.

To accomplish this, I need to have each RemotePageProxy be informed when a process crashes,
and have each RemotePageProxy keep track of which WebFrameProxies are using it.  Then, we
need to send Messages::WebPage::DidFinishLoadInAnotherProcess to the parent process when a child
crashes if it has not already been sent.

I removed WebFrameProxy's m_webPageID because it was not used and not updated correctly when
the process of a frame changes, which likely causes a different PageIdentifier to be used in
the new process.

I moved the sending of the DidFinishLoadInAnotherProcess message to a shared function to reduce
duplicate code.

I removed the clearing of m_remotePageProxy in WebFrameProxy::prepareForProvisionalNavigationInProcess
because it would've needed some updating of frame content management with an additional removeFrame
call, but that is actually the wrong place to be clearing the RemotePageProxy.
WebFrameProxy::commitProvisionalFrame is the right time to be updating that.

* LayoutTests/http/tests/site-isolation/iframe-process-termination-expected.html: Added.
* LayoutTests/http/tests/site-isolation/iframe-process-termination.html: Added.
* LayoutTests/http/tests/site-isolation/resources/iframe-terminate-process-when-loaded.html: Added.
* LayoutTests/platform/ios/TestExpectations:
* Source/WebCore/testing/Internals.cpp:
(WebCore::Internals::terminateWebContentProcess):
* Source/WebCore/testing/Internals.h:
* Source/WebCore/testing/Internals.idl:
* Source/WebKit/UIProcess/RemotePageProxy.cpp:
(WebKit::RemotePageProxy::processDidTerminate):
(WebKit::RemotePageProxy::addFrame):
(WebKit::RemotePageProxy::removeFrame):
* Source/WebKit/UIProcess/RemotePageProxy.h:
* Source/WebKit/UIProcess/WebFrameProxy.cpp:
(WebKit::WebFrameProxy::WebFrameProxy):
(WebKit::WebFrameProxy::prepareForProvisionalNavigationInProcess):
(WebKit::WebFrameProxy::commitProvisionalFrame):
(WebKit::WebFrameProxy::remoteProcessDidTerminate):
(WebKit::WebFrameProxy::notifyParentOfLoadCompletion):
(WebKit::WebFrameProxy::webPageIDInCurrentProcess):
* Source/WebKit/UIProcess/WebFrameProxy.h:
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::didFailProvisionalLoadForFrameShared):
(WebKit::WebPageProxy::didFinishLoadForFrame):
* Source/WebKit/UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::processDidTerminateOrFailedToLaunch):

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




More information about the webkit-changes mailing list