[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