Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: f8b48e173616feeff41c1015c5d9406dac9c2f83 https://github.com/WebKit/WebKit/commit/f8b48e173616feeff41c1015c5d9406dac9c2f83 Author: Ryosuke Niwa <rn...@webkit.org> 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 webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes