[webkit-changes] [WebKit/WebKit] 24f5c6: Early return instead of terminating web process if...

Alex Christensen noreply at github.com
Mon Dec 16 11:02:29 PST 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 24f5c63d5933cc7d8df89f94c8882b88f750d92a
      https://github.com/WebKit/WebKit/commit/24f5c63d5933cc7d8df89f94c8882b88f750d92a
  Author: Alex Christensen <achristensen at apple.com>
  Date:   2024-12-16 (Mon, 16 Dec 2024)

  Changed paths:
    M Source/WebKit/UIProcess/WebPageProxy.cpp

  Log Message:
  -----------
  Early return instead of terminating web process if a frame no longer exists when receiving a message for it
https://bugs.webkit.org/show_bug.cgi?id=284686
rdar://141474694

Reviewed by Chris Dumez.

Site isolation introduces some new possible race conditions, such as when a load happens in a frame in one
process, then that load redirects to another process, then is removed from the DOM in another process.
If, before the UI process can tell the other processes that it was removed, those processes send a message
with an update about that frame, I'm currently hitting MESSAGE_CHECK_BASE and seeing the processes terminated.
This will make WebKit more robust against such newly necessary race conditions.  I verified that a complex
news website that hit these quite reliably with today's advertisements loads reliably after this change.

* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::didExplicitOpenForFrame):
(WebKit::WebPageProxy::willPerformClientRedirectForFrame):
(WebKit::WebPageProxy::didCancelClientRedirectForFrame):
(WebKit::WebPageProxy::didFailProvisionalLoadForFrame):
(WebKit::WebPageProxy::didCommitLoadForFrame):
(WebKit::WebPageProxy::didFinishDocumentLoadForFrame):
(WebKit::WebPageProxy::didFinishLoadForFrame):
(WebKit::WebPageProxy::didFailLoadForFrame):
(WebKit::WebPageProxy::didSameDocumentNavigationForFrame):
(WebKit::WebPageProxy::didSameDocumentNavigationForFrameViaJS):
(WebKit::WebPageProxy::didReceiveTitleForFrame):
(WebKit::WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame):
(WebKit::WebPageProxy::didDisplayInsecureContentForFrame):
(WebKit::WebPageProxy::didRunInsecureContentForFrame):
(WebKit::WebPageProxy::decidePolicyForNewWindowAction):
(WebKit::WebPageProxy::decidePolicyForResponse):
(WebKit::WebPageProxy::willSubmitForm):
(WebKit::WebPageProxy::didUpdateHistoryTitle):
(WebKit::WebPageProxy::runJavaScriptAlert):
(WebKit::WebPageProxy::runJavaScriptConfirm):
(WebKit::WebPageProxy::runJavaScriptPrompt):
(WebKit::WebPageProxy::runBeforeUnloadConfirmPanel):
(WebKit::WebPageProxy::runOpenPanel):
(WebKit::WebPageProxy::printFrame):
(WebKit::WebPageProxy::focusedFrameChanged):
(WebKit::WebPageProxy::requestGeolocationPermissionForFrame):
(WebKit::WebPageProxy::enumerateMediaDevicesForFrame):
(WebKit::WebPageProxy::shouldAllowDeviceOrientationAndMotionAccess):
(WebKit::WebPageProxy::didAccessWindowProxyPropertyViaOpenerForFrame):

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