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

Reply via email to