Title: [279591] trunk/Source/WebKit
Revision
279591
Author
[email protected]
Date
2021-07-06 10:25:05 -0700 (Tue, 06 Jul 2021)

Log Message

Collect Accessibility preferences on a background queue
https://bugs.webkit.org/show_bug.cgi?id=227617
<rdar://80055168>

Reviewed by Brent Fulgham.

To avoid blocking the main thread of the UI process, collect Media Accessibility preferences on a background thread,
and send them to the WebContent process(es).

* Shared/AccessibilityPreferences.cpp:
(IPC::ArgumentCoder<WebKit::AccessibilityPreferences>::encode):
(IPC::ArgumentCoder<WebKit::AccessibilityPreferences>::decode):
* Shared/AccessibilityPreferences.h:
* UIProcess/Cocoa/WebProcessPoolCocoa.mm:
(WebKit::accessibilityPreferences):
(WebKit::WebProcessPool::setMediaAccessibilityPreferences):
(WebKit::WebProcessPool::mediaAccessibilityPreferencesChangedCallback):
(WebKit::WebProcessPool::registerNotificationObservers):
* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::initializeNewWebProcess):
* UIProcess/WebProcessPool.h:
* WebProcess/WebProcess.h:
* WebProcess/WebProcess.messages.in:
* WebProcess/cocoa/WebProcessCocoa.mm:
(WebKit::WebProcess::accessibilityPreferencesDidChange):
(WebKit::WebProcess::setMediaAccessibilityPreferences):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (279590 => 279591)


--- trunk/Source/WebKit/ChangeLog	2021-07-06 17:24:22 UTC (rev 279590)
+++ trunk/Source/WebKit/ChangeLog	2021-07-06 17:25:05 UTC (rev 279591)
@@ -1,3 +1,32 @@
+2021-07-06  Per Arne  <[email protected]>
+
+        Collect Accessibility preferences on a background queue
+        https://bugs.webkit.org/show_bug.cgi?id=227617
+        <rdar://80055168>
+
+        Reviewed by Brent Fulgham.
+
+        To avoid blocking the main thread of the UI process, collect Media Accessibility preferences on a background thread,
+        and send them to the WebContent process(es).
+
+        * Shared/AccessibilityPreferences.cpp:
+        (IPC::ArgumentCoder<WebKit::AccessibilityPreferences>::encode):
+        (IPC::ArgumentCoder<WebKit::AccessibilityPreferences>::decode):
+        * Shared/AccessibilityPreferences.h:
+        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
+        (WebKit::accessibilityPreferences):
+        (WebKit::WebProcessPool::setMediaAccessibilityPreferences):
+        (WebKit::WebProcessPool::mediaAccessibilityPreferencesChangedCallback):
+        (WebKit::WebProcessPool::registerNotificationObservers):
+        * UIProcess/WebProcessPool.cpp:
+        (WebKit::WebProcessPool::initializeNewWebProcess):
+        * UIProcess/WebProcessPool.h:
+        * WebProcess/WebProcess.h:
+        * WebProcess/WebProcess.messages.in:
+        * WebProcess/cocoa/WebProcessCocoa.mm:
+        (WebKit::WebProcess::accessibilityPreferencesDidChange):
+        (WebKit::WebProcess::setMediaAccessibilityPreferences):
+
 2021-07-06  Youenn Fablet  <[email protected]>
 
         REGRESSION: [iOS] ASSERTION FAILED: !m_messageReceiverMapCount under WebKit::RemoteRemoteCommandListener::~RemoteRemoteCommandListener()

Modified: trunk/Source/WebKit/Shared/AccessibilityPreferences.cpp (279590 => 279591)


--- trunk/Source/WebKit/Shared/AccessibilityPreferences.cpp	2021-07-06 17:24:22 UTC (rev 279590)
+++ trunk/Source/WebKit/Shared/AccessibilityPreferences.cpp	2021-07-06 17:25:05 UTC (rev 279591)
@@ -37,10 +37,6 @@
     encoder << preferences.darkenSystemColors;
     encoder << preferences.invertColorsEnabled;
 #endif
-#if HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK)
-    encoder << preferences.captionDisplayMode;
-    encoder << preferences.preferredLanguages;
-#endif
 }
 
 std::optional<WebKit::AccessibilityPreferences> ArgumentCoder<WebKit::AccessibilityPreferences>::decode(Decoder& decoder)
@@ -58,12 +54,6 @@
     if (!decoder.decode(preferences.invertColorsEnabled))
         return std::nullopt;
 #endif
-#if HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK)
-    if (!decoder.decode(preferences.captionDisplayMode))
-        return std::nullopt;
-    if (!decoder.decode(preferences.preferredLanguages))
-        return std::nullopt;
-#endif
     return preferences;
 }
 

Modified: trunk/Source/WebKit/Shared/AccessibilityPreferences.h (279590 => 279591)


--- trunk/Source/WebKit/Shared/AccessibilityPreferences.h	2021-07-06 17:24:22 UTC (rev 279590)
+++ trunk/Source/WebKit/Shared/AccessibilityPreferences.h	2021-07-06 17:25:05 UTC (rev 279591)
@@ -27,10 +27,6 @@
 
 #include "ArgumentCoders.h"
 
-#if HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK)
-#include <WebCore/CaptionUserPreferences.h>
-#endif
-
 #if HAVE(PER_APP_ACCESSIBILITY_PREFERENCES)
 #include "AccessibilitySupportSPI.h"
 #endif
@@ -45,10 +41,6 @@
     AXValueState darkenSystemColors { AXValueStateEmpty };
     AXValueState invertColorsEnabled { AXValueStateEmpty };
 #endif
-#if HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK)
-    WebCore::CaptionUserPreferences::CaptionDisplayMode captionDisplayMode;
-    Vector<String> preferredLanguages;
-#endif
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm (279590 => 279591)


--- trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm	2021-07-06 17:24:22 UTC (rev 279590)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm	2021-07-06 17:25:05 UTC (rev 279591)
@@ -168,6 +168,35 @@
     return m_bundleParameters.get();
 }
 
+static AccessibilityPreferences accessibilityPreferences()
+{
+    AccessibilityPreferences preferences;
+#if HAVE(PER_APP_ACCESSIBILITY_PREFERENCES)
+    auto appId = WebCore::applicationBundleIdentifier().createCFString();
+
+    preferences.reduceMotionEnabled = _AXSReduceMotionEnabledApp(appId.get());
+    preferences.increaseButtonLegibility = _AXSIncreaseButtonLegibilityApp(appId.get());
+    preferences.enhanceTextLegibility = _AXSEnhanceTextLegibilityEnabledApp(appId.get());
+    preferences.darkenSystemColors = _AXDarkenSystemColorsApp(appId.get());
+    preferences.invertColorsEnabled = _AXSInvertColorsEnabledApp(appId.get());
+#endif
+    return preferences;
+}
+
+#if HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK)
+void WebProcessPool::setMediaAccessibilityPreferences(WebProcessProxy& process)
+{
+    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), [weakProcess = makeWeakPtr(process)] {
+        auto captionDisplayMode = WebCore::CaptionUserPreferencesMediaAF::platformCaptionDisplayMode();
+        auto preferredLanguages = WebCore::CaptionUserPreferencesMediaAF::platformPreferredLanguages();
+        callOnMainRunLoop([weakProcess, captionDisplayMode, preferredLanguages] {
+            if (weakProcess)
+                weakProcess->send(Messages::WebProcess::SetMediaAccessibilityPreferences(captionDisplayMode, preferredLanguages), 0);
+        });
+    });
+}
+#endif
+
 void WebProcessPool::platformInitialize()
 {
     registerUserDefaultsIfNeeded();
@@ -273,25 +302,6 @@
 #endif
 }
 
-static AccessibilityPreferences accessibilityPreferences()
-{
-    AccessibilityPreferences preferences;
-#if HAVE(PER_APP_ACCESSIBILITY_PREFERENCES)
-    auto appId = WebCore::applicationBundleIdentifier().createCFString();
-
-    preferences.reduceMotionEnabled = _AXSReduceMotionEnabledApp(appId.get());
-    preferences.increaseButtonLegibility = _AXSIncreaseButtonLegibilityApp(appId.get());
-    preferences.enhanceTextLegibility = _AXSEnhanceTextLegibilityEnabledApp(appId.get());
-    preferences.darkenSystemColors = _AXDarkenSystemColorsApp(appId.get());
-    preferences.invertColorsEnabled = _AXSInvertColorsEnabledApp(appId.get());
-#endif
-#if HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK)
-    preferences.captionDisplayMode = WebCore::CaptionUserPreferencesMediaAF::platformCaptionDisplayMode();
-    preferences.preferredLanguages = WebCore::CaptionUserPreferencesMediaAF::platformPreferredLanguages();
-#endif
-    return preferences;
-}
-
 void WebProcessPool::platformInitializeWebProcess(const WebProcessProxy& process, WebProcessCreationParameters& parameters)
 {
     parameters.mediaMIMETypes = process.mediaMIMETypes();
@@ -598,6 +608,16 @@
     pool->sendToAllProcesses(Messages::WebProcess::AccessibilityPreferencesDidChange(accessibilityPreferences()));
 }
 
+#if HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK)
+void WebProcessPool::mediaAccessibilityPreferencesChangedCallback(CFNotificationCenterRef, void *observer, CFStringRef name, const void *, CFDictionaryRef userInfo)
+{
+    auto* pool = reinterpret_cast<WebProcessPool*>(observer);
+    auto captionDisplayMode = WebCore::CaptionUserPreferencesMediaAF::platformCaptionDisplayMode();
+    auto preferredLanguages = WebCore::CaptionUserPreferencesMediaAF::platformPreferredLanguages();
+    pool->sendToAllProcesses(Messages::WebProcess::SetMediaAccessibilityPreferences(captionDisplayMode, preferredLanguages));
+}
+#endif
+
 #if PLATFORM(MAC)
 void WebProcessPool::colorPreferencesDidChangeCallback(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo)
 {
@@ -735,7 +755,7 @@
     CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), this, accessibilityPreferencesChangedCallback, kAXSInvertColorsEnabledNotification, nullptr, CFNotificationSuspensionBehaviorCoalesce);
 #endif
 #if HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK)
-    CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), this, accessibilityPreferencesChangedCallback, kMAXCaptionAppearanceSettingsChangedNotification, nullptr, CFNotificationSuspensionBehaviorCoalesce);
+    CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), this, mediaAccessibilityPreferencesChangedCallback, kMAXCaptionAppearanceSettingsChangedNotification, nullptr, CFNotificationSuspensionBehaviorCoalesce);
 #endif
 }
 

Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (279590 => 279591)


--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2021-07-06 17:24:22 UTC (rev 279590)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2021-07-06 17:25:05 UTC (rev 279591)
@@ -814,6 +814,10 @@
 
     process.send(Messages::WebProcess::InitializeWebProcess(parameters), 0);
 
+#if HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK)
+    setMediaAccessibilityPreferences(process);
+#endif
+
     if (m_automationSession)
         process.send(Messages::WebProcess::EnsureAutomationSessionProxy(m_automationSession->sessionIdentifier()), 0);
 

Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.h (279590 => 279591)


--- trunk/Source/WebKit/UIProcess/WebProcessPool.h	2021-07-06 17:24:22 UTC (rev 279590)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.h	2021-07-06 17:25:05 UTC (rev 279591)
@@ -575,6 +575,10 @@
     static void accessibilityPreferencesChangedCallback(CFNotificationCenterRef, void *observer, CFStringRef name, const void *, CFDictionaryRef userInfo);
 #endif
 
+#if HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK)
+    static void mediaAccessibilityPreferencesChangedCallback(CFNotificationCenterRef, void *observer, CFStringRef name, const void *, CFDictionaryRef userInfo);
+#endif
+
 #if PLATFORM(MAC)
     static void colorPreferencesDidChangeCallback(CFNotificationCenterRef, void *observer, CFStringRef name, const void *, CFDictionaryRef userInfo);
 #endif
@@ -591,6 +595,10 @@
     void systemDidWake() final;
 #endif
 
+#if HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK)
+    void setMediaAccessibilityPreferences(WebProcessProxy&);
+#endif
+
     Ref<API::ProcessPoolConfiguration> m_configuration;
 
     IPC::MessageReceiverMap m_messageReceiverMap;

Modified: trunk/Source/WebKit/WebProcess/WebProcess.h (279590 => 279591)


--- trunk/Source/WebKit/WebProcess/WebProcess.h	2021-07-06 17:24:22 UTC (rev 279590)
+++ trunk/Source/WebKit/WebProcess/WebProcess.h	2021-07-06 17:25:05 UTC (rev 279591)
@@ -71,6 +71,10 @@
 #include <WebCore/PlatformDisplayLibWPE.h>
 #endif
 
+#if HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK)
+#include <WebCore/CaptionUserPreferences.h>
+#endif
+
 namespace API {
 class Object;
 }
@@ -567,6 +571,9 @@
 #endif
 
     void accessibilityPreferencesDidChange(const AccessibilityPreferences&);
+#if HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK)
+    void setMediaAccessibilityPreferences(WebCore::CaptionUserPreferences::CaptionDisplayMode, const Vector<String>&);
+#endif
 
 #if PLATFORM(MAC) || PLATFORM(MACCATALYST)
     void colorPreferencesDidChange();

Modified: trunk/Source/WebKit/WebProcess/WebProcess.messages.in (279590 => 279591)


--- trunk/Source/WebKit/WebProcess/WebProcess.messages.in	2021-07-06 17:24:22 UTC (rev 279590)
+++ trunk/Source/WebKit/WebProcess/WebProcess.messages.in	2021-07-06 17:25:05 UTC (rev 279591)
@@ -202,4 +202,8 @@
     ConsumeAudioComponentRegistrations(IPC::SharedBufferDataReference registrationData)
     AccessibilityPreferencesDidChange(struct WebKit::AccessibilityPreferences accessibilityPreferences)
 #endif
+
+#if HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK)
+    SetMediaAccessibilityPreferences(WebCore::CaptionUserPreferences::CaptionDisplayMode displayMode, Vector<String> languages)
+#endif
 }

Modified: trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm (279590 => 279591)


--- trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm	2021-07-06 17:24:22 UTC (rev 279590)
+++ trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm	2021-07-06 17:25:05 UTC (rev 279591)
@@ -1111,11 +1111,15 @@
     if (_AXSInvertColorsEnabledApp(appID) != invertColorsEnabled)
         _AXSInvertColorsSetEnabledApp(invertColorsEnabled, appID);
 #endif
+}
+
 #if HAVE(MEDIA_ACCESSIBILITY_FRAMEWORK)
-    WebCore::CaptionUserPreferencesMediaAF::setCachedCaptionDisplayMode(preferences.captionDisplayMode);
-    WebCore::CaptionUserPreferencesMediaAF::setCachedPreferredLanguages(preferences.preferredLanguages);
+void WebProcess::setMediaAccessibilityPreferences(WebCore::CaptionUserPreferences::CaptionDisplayMode captionDisplayMode, const Vector<String>& preferredLanguages)
+{
+    WebCore::CaptionUserPreferencesMediaAF::setCachedCaptionDisplayMode(captionDisplayMode);
+    WebCore::CaptionUserPreferencesMediaAF::setCachedPreferredLanguages(preferredLanguages);
+}
 #endif
-}
 
 #if PLATFORM(MAC) || PLATFORM(MACCATALYST)
 void WebProcess::colorPreferencesDidChange()
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to