[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