[webkit-changes] [WebKit/WebKit] e6357e: Web content process gets killed when loading apart...
Sihui
noreply at github.com
Thu Jan 2 15:05:56 PST 2025
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: e6357e81a0403dcf89bf6b3048ce308c7450f2c6
https://github.com/WebKit/WebKit/commit/e6357e81a0403dcf89bf6b3048ce308c7450f2c6
Author: Sihui Liu <sihui_liu at apple.com>
Date: 2025-01-02 (Thu, 02 Jan 2025)
Changed paths:
M Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp
M Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h
M Source/WebKit/NetworkProcess/NetworkProcess.cpp
M Source/WebKit/NetworkProcess/NetworkProcess.h
M Source/WebKit/NetworkProcess/NetworkProcess.messages.in
M Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h
M Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.serialization.in
M Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp
M Source/WebKit/UIProcess/WebPreferences.cpp
M Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp
M Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h
Log Message:
-----------
Web content process gets killed when loading apartments.com
https://bugs.webkit.org/show_bug.cgi?id=285046
rdar://141734000
Reviewed by Ben Nham.
Web content process gets killed for sending `NotificationManagerMessageHandler` messages and failing message check (that
`NetworkProcess::builtInNotificationsEnabled()` must return true) in `NetworkConnectionToWebProcess::dispatchMessage()`.
The reason `NetworkProcess::builtInNotificationsEnabled()` returns false is UI process does not send correct value to
network process. In current implementation, UI process sets `NetworkProcess::builtInNotificationsEnabled()` only on
network process initialization (see `NetworkProcessProxy::sendCreationParametersToNewProcess`). The value in parameters
is decided based on `DeprecatedGlobalSettings::builtInNotificationsEnabled()` in UI process (see
`NetworkProcessProxy::sendCreationParametersToNewProcess`). `DeprecatedGlobalSettings::builtInNotificationsEnabled()` is
updated when `builtInNotificationsEnabled` preferences value is changed (see `WebPreferences::updateBoolValueForKey`).
However, if the default preferences value is true, `WebPreferences::updateBoolValueForKey()` is not invoked, so the
settings value will stay false. This means settings value (which network process uses) does not match preferences value
(which web content process uses).
Given that network process also tracks preferences in `NetworkConnectionToWebProcess::m_sharedPreferencesForWebProcess`,
we could just use that for message check, and this will fix the crash (as web process and network process have the same
`builtInNotificationsEnabled` value).
Regarding the problem that settings value does not match preferences value in UI process, this patch just replaces the
usage of settings value with preferences value. Instead of maintaining a global settings value and updating it when some
preferences object in UI process has change, we just compute a shared value based on all preferences (see
`WebsiteDataStore::builtInNotificationsEnabled()`). Also, UI process could include the value in message sent to network
process, so that network process does not need to maintain the state.
* Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp:
(WebKit::NetworkConnectionToWebProcess::dispatchMessage):
(WebKit::NetworkConnectionToWebProcess::dispatchSyncMessage):
* Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h:
* Source/WebKit/NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::initializeNetworkProcess):
(WebKit::NetworkProcess::processPushMessage):
* Source/WebKit/NetworkProcess/NetworkProcess.h:
* Source/WebKit/NetworkProcess/NetworkProcess.messages.in:
* Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.h:
* Source/WebKit/NetworkProcess/NetworkProcessCreationParameters.serialization.in:
* Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp:
(WebKit::NetworkProcessProxy::sendCreationParametersToNewProcess):
(WebKit::NetworkProcessProxy::processPushMessage):
* Source/WebKit/UIProcess/WebPreferences.cpp:
(WebKit::WebPreferences::updateBoolValueForKey):
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::builtInNotificationsEnabled const):
* Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h:
Canonical link: https://commits.webkit.org/288384@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