Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: f8b48e173616feeff41c1015c5d9406dac9c2f83
https://github.com/WebKit/WebKit/commit/f8b48e173616feeff41c1015c5d9406dac9c2f83
Author: Ryosuke Niwa <[email protected]>
Date: 2024-07-25 (Thu, 25 Jul 2024)
Changed paths:
M Source/WTF/Scripts/GeneratePreferences.rb
M Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml
M Source/WebKit/CMakeLists.txt
M Source/WebKit/DerivedSources-input.xcfilelist
M Source/WebKit/DerivedSources-output.xcfilelist
M Source/WebKit/DerivedSources.make
M Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp
M Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h
M Source/WebKit/GPUProcess/GPUConnectionToWebProcess.messages.in
M Source/WebKit/GPUProcess/GPUProcess.cpp
M Source/WebKit/GPUProcess/GPUProcess.h
M Source/WebKit/GPUProcess/GPUProcess.messages.in
A
Source/WebKit/Scripts/PreferencesTemplates/SharedPreferencesForWebProcess.cpp.erb
A
Source/WebKit/Scripts/PreferencesTemplates/SharedPreferencesForWebProcess.h.erb
A
Source/WebKit/Scripts/PreferencesTemplates/SharedPreferencesForWebProcess.serialization.in.erb
M Source/WebKit/Scripts/webkit/parser.py
M Source/WebKit/Shared/GPUProcessConnectionParameters.h
M Source/WebKit/Shared/GPUProcessConnectionParameters.serialization.in
R Source/WebKit/Shared/GPUProcessPreferencesForWebProcess.h
R Source/WebKit/Shared/GPUProcessPreferencesForWebProcess.serialization.in
M Source/WebKit/UIProcess/API/APIPageConfiguration.cpp
M Source/WebKit/UIProcess/API/APIPageConfiguration.h
M Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
M Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp
M Source/WebKit/UIProcess/GPU/GPUProcessProxy.h
M Source/WebKit/UIProcess/WebPageProxy.cpp
M Source/WebKit/UIProcess/WebPageProxy.h
M Source/WebKit/UIProcess/WebProcessProxy.cpp
M Source/WebKit/UIProcess/WebProcessProxy.h
M Source/WebKit/UIProcess/WebProcessProxy.messages.in
M Source/WebKit/WebKit.xcodeproj/project.pbxproj
M Source/WebKit/WebProcess/WebPage/WebPage.cpp
M Source/WebKit/WebProcess/WebPage/WebPage.h
M Source/WebKit/WebProcess/WebPage/WebPage.messages.in
Log Message:
-----------
Add a mechanism to filter IPC messages by feature flags
https://bugs.webkit.org/show_bug.cgi?id=276415
Reviewed by Chris Dumez.
This PR adds a filtering mechanism for IPC messages based on which features are
enabled at runtime.
To do this, this PR adds the code to generate
SharedPreferencesForWebProcess.h/cpp/serialization.in,
which consists of a simple struct with a bunch of booleans indicating which
preference is enabled
in a given WebContent process. UnifiedWebPreferences.yaml is now annotated with
"sharedPreferenceForWebProcess" flag per preference, and messages.in files now
support "EnabledBy=X"
attribute which filters IPC messages by the preferences.
The set of preferences for a given WebContent process is synchronized at the
time of constructing
GPUConnectionToWebProcess as a part of GPUProcessConnectionParameters, and
updated via
GPUProcessProxy::filteringDidChangeForWebProcess. Because multiple WebPageProxy
can share a single
WebContent process, the set is the union of all preferences enabled across
those pages.
When a preference is updated, WebPageProxy::preferencesDidChange calls
WebProcessProxy's
updateSharedPreferencesForWebProcess, which in turn determines if the shared
preferences for this
WebProcessProxy has changed or not. If it did, it returns the updated
SharedPreferencesForWebProcess,
which is then relayed to the GPU process via
GPUProcess::sharedPreferencesForWebProcessDidChange.
Finally, WebPage::preferencesDidChange in WebProcess synchronously waits for
SharedPreferencesForWebProcess to be propagated to the GPU process. For this
purpose,
each SharedPreferencesForWebProcessDidChange contains a uint64_t version, which
gets incremented
whenever the preferences is updated.
* Source/WTF/Scripts/GeneratePreferences.rb:
* Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml:
* Source/WebKit/CMakeLists.txt:
* Source/WebKit/DerivedSources-input.xcfilelist:
* Source/WebKit/DerivedSources-output.xcfilelist:
* Source/WebKit/DerivedSources.make:
* Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp:
(WebKit::m_sharedPreferencesForWebProcess):
(WebKit::GPUConnectionToWebProcess::allowsExitUnderMemoryPressure const):
(WebKit::GPUConnectionToWebProcess::createGPU):
(WebKit::m_preferences): Deleted.
* Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h:
(WebKit::GPUConnectionToWebProcess::sharedPreferencesForWebProcess const):
(WebKit::GPUConnectionToWebProcess::updateSharedPreferencesForWebProcess):
(WebKit::GPUConnectionToWebProcess::isWebXREnabled const):
(WebKit::GPUConnectionToWebProcess::isDynamicContentScalingEnabled const):
(WebKit::GPUConnectionToWebProcess::isWebGPUEnabled const): Deleted.
(WebKit::GPUConnectionToWebProcess::isWebGLEnabled const): Deleted.
* Source/WebKit/GPUProcess/GPUConnectionToWebProcess.messages.in:
* Source/WebKit/GPUProcess/GPUProcess.cpp:
(WebKit::GPUProcess::sharedPreferencesForWebProcessDidChange):
* Source/WebKit/GPUProcess/GPUProcess.h:
* Source/WebKit/GPUProcess/GPUProcess.messages.in:
*
Source/WebKit/Scripts/PreferencesTemplates/SharedPreferencesForWebProcess.cpp.erb:
Added.
*
Source/WebKit/Scripts/PreferencesTemplates/SharedPreferencesForWebProcess.h.erb:
Added.
*
Source/WebKit/Scripts/PreferencesTemplates/SharedPreferencesForWebProcess.serialization.in.erb:
Added.
* Source/WebKit/Scripts/webkit/parser.py:
(parse):
* Source/WebKit/Shared/GPUProcessConnectionParameters.h:
* Source/WebKit/Shared/GPUProcessConnectionParameters.serialization.in:
* Source/WebKit/Shared/GPUProcessPreferencesForWebProcess.serialization.in:
Removed.
* Source/WebKit/UIProcess/API/APIPageConfiguration.cpp:
(API::PageConfiguration::preferencesForGPUProcess const): Deleted.
* Source/WebKit/UIProcess/API/APIPageConfiguration.h:
* Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _setupPageConfiguration:]):
* Source/WebKit/UIProcess/GPU/GPUProcessProxy.cpp:
(WebKit::GPUProcessProxy::sharedPreferencesForWebProcessDidChange):
* Source/WebKit/UIProcess/GPU/GPUProcessProxy.h:
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::hasSameGPUAndNetworkProcessPreferencesAs const):
(WebKit::WebPageProxy::preferencesDidChange):
(WebKit::WebPageProxy::preferencesForGPUProcess const): Deleted.
* Source/WebKit/UIProcess/WebPageProxy.h:
* Source/WebKit/UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::~WebProcessProxy):
(WebKit::WebProcessProxy::initializePreferencesForGPUAndNetworkProcesses):
(WebKit::WebProcessProxy::hasSameGPUAndNetworkProcessPreferencesAs const):
(WebKit::WebProcessProxy::createGPUProcessConnection):
(WebKit::WebProcessProxy::updateSharedPreferencesForWebProcess):
(WebKit::WebProcessProxy::didSyncSharedPreferencesForWebProcess):
(WebKit::WebProcessProxy::waitForSharedPreferencesForWebProcessToSync):
* Source/WebKit/UIProcess/WebProcessProxy.h:
(WebKit::WebProcessProxy::sharedPreferencesForWebProcess const):
(WebKit::WebProcessProxy::preferencesForGPUProcess const): Deleted.
* Source/WebKit/UIProcess/WebProcessProxy.messages.in:
* Source/WebKit/WebKit.xcodeproj/project.pbxproj:
* Source/WebKit/WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::preferencesDidChange):
* Source/WebKit/WebProcess/WebPage/WebPage.h:
(WebKit::WebPage::preferencesDidChangeDuringDOMPrintOperation):
* Source/WebKit/WebProcess/WebPage/WebPage.messages.in:
Canonical link: https://commits.webkit.org/281360@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes