Changeset 277971 in webkit


Ignore:
Timestamp:
May 24, 2021 3:27:01 PM (14 months ago)
Author:
Chris Fleizach
Message:

AX: Settings: Increase contrast isn't detected in browser until an additional setting is applied
https://bugs.webkit.org/show_bug.cgi?id=225909

Reviewed by Per Arne Vollan.

Source/WebCore/PAL:

  • pal/spi/mac/HIServicesSPI.h:

Source/WebKit:

Tests: accessibility/mac/media-query-values-change.html

1) WebContent blocks access to distributed notification center, so we can't rely on that to re-post notifications
2) AppKit caches the values of these AX settings, so we need to invalidate that cache directly

  • Platform/spi/mac/AppKitSPI.h:
  • WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:

(WKAccessibilityTestingInjectPreference):

  • WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
  • WebProcess/cocoa/WebProcessCocoa.mm:

(WebKit::invertColorsPreferenceKey):
(WebKit::dispatchSimulatedNotificationsForPreferenceChange):
(WebKit::setPreferenceValue):
(WebKit::reduceMotionPreferenceKey): Deleted.

Tools:

  • WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:

(WTR::AccessibilityController::injectAccessibilityPreference):

  • WebKitTestRunner/InjectedBundle/AccessibilityController.h:
  • WebKitTestRunner/InjectedBundle/Bindings/AccessibilityController.idl:
  • WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:

(WTR::AccessibilityController::injectAccessibilityPreference):

LayoutTests:

  • accessibility/mac/media-query-values-change-expected.txt: Added.
  • accessibility/mac/media-query-values-change.html: Added.
Location:
trunk
Files:
3 added
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r277970 r277971  
     12021-05-24  Chris Fleizach  <cfleizach@apple.com>
     2
     3        AX: Settings: Increase contrast isn't detected in browser until an additional setting is applied
     4        https://bugs.webkit.org/show_bug.cgi?id=225909
     5
     6        Reviewed by Per Arne Vollan.
     7
     8        * accessibility/mac/media-query-values-change-expected.txt: Added.
     9        * accessibility/mac/media-query-values-change.html: Added.
     10
    1112021-05-24  Cameron McCormack  <heycam@apple.com>
    212
  • trunk/LayoutTests/platform/mac-wk1/TestExpectations

    r277691 r277971  
    213213# Color well is turned off.
    214214accessibility/color-well.html [ Skip ]
     215accessibility/mac/media-query-values-change.html [ Skip ]
    215216editing/pasteboard/drag-and-drop-color-input-events.html [ Skip ]
    216217editing/pasteboard/drag-and-drop-color-input.html [ Skip ]
  • trunk/Source/WebCore/PAL/ChangeLog

    r277961 r277971  
     12021-05-24  Chris Fleizach  <cfleizach@apple.com>
     2
     3        AX: Settings: Increase contrast isn't detected in browser until an additional setting is applied
     4        https://bugs.webkit.org/show_bug.cgi?id=225909
     5
     6        Reviewed by Per Arne Vollan.
     7
     8        * pal/spi/mac/HIServicesSPI.h:
     9
    1102021-05-24  Commit Queue  <commit-queue@webkit.org>
    211
  • trunk/Source/WebCore/PAL/pal/spi/mac/HIServicesSPI.h

    r269906 r277971  
    153153extern CFStringRef kAXInterfaceReduceMotionStatusDidChangeNotification;
    154154
     155extern CFStringRef kAXInterfaceIncreaseContrastKey;
     156
    155157WTF_EXTERN_C_END
    156158
  • trunk/Source/WebKit/ChangeLog

    r277967 r277971  
     12021-05-24  Chris Fleizach  <cfleizach@apple.com>
     2
     3        AX: Settings: Increase contrast isn't detected in browser until an additional setting is applied
     4        https://bugs.webkit.org/show_bug.cgi?id=225909
     5
     6        Reviewed by Per Arne Vollan.
     7
     8        Tests: accessibility/mac/media-query-values-change.html
     9
     10        1) WebContent blocks access to distributed notification center, so we can't rely on that to re-post notifications
     11        2) AppKit caches the values of these AX settings, so we need to invalidate that cache directly
     12
     13        * Platform/spi/mac/AppKitSPI.h:
     14        * WebProcess/InjectedBundle/API/c/WKBundlePage.cpp:
     15        (WKAccessibilityTestingInjectPreference):
     16        * WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h:
     17        * WebProcess/cocoa/WebProcessCocoa.mm:
     18        (WebKit::invertColorsPreferenceKey):
     19        (WebKit::dispatchSimulatedNotificationsForPreferenceChange):
     20        (WebKit::setPreferenceValue):
     21        (WebKit::reduceMotionPreferenceKey): Deleted.
     22
    1232021-05-24  Darin Adler  <darin@apple.com>
    224
  • trunk/Source/WebKit/Platform/spi/mac/AppKitSPI.h

    r277688 r277971  
    7575#endif
    7676
     77@interface NSWorkspace (NSWorkspaceAccessibilityDisplayInternal_IPI)
     78+ (void)_invalidateAccessibilityDisplayValues;
     79@end
     80
    7781@interface NSInspectorBar (IPI)
    7882- (void)_update;
  • trunk/Source/WebKit/WebProcess/InjectedBundle/API/c/WKBundlePage.cpp

    r277264 r277971  
    5757#include "WebPageGroupProxy.h"
    5858#include "WebPageOverlay.h"
     59#include "WebProcess.h"
    5960#include <WebCore/AXObjectCache.h>
    6061#include <WebCore/AccessibilityObjectInterface.h>
     
    229230{
    230231    WebKit::toImpl(pageRef)->insertNewlineInQuotedContent();
     232}
     233
     234void WKAccessibilityTestingInjectPreference(WKBundlePageRef pageRef, const String& domain, const String& key, const Optional<String>& encodedValue)
     235{
     236    if (!pageRef)
     237        return;
     238   
     239#if ENABLE(CFPREFS_DIRECT_MODE)
     240    WebKit::WebProcess::singleton().notifyPreferencesChanged(domain, key, encodedValue);
     241#endif
    231242}
    232243
  • trunk/Source/WebKit/WebProcess/InjectedBundle/API/c/WKBundlePagePrivate.h

    r265085 r277971  
    9797WK_EXPORT void* WKAccessibilityFocusedObject(WKBundlePageRef);
    9898WK_EXPORT bool WKAccessibilityCanUseSecondaryAXThread(WKBundlePageRef);
     99WK_EXPORT void WKAccessibilityTestingInjectPreference(WKBundlePageRef, const String& domain, const String& key, const Optional<String>& encodedValue);
    99100
    100101WK_EXPORT void WKAccessibilityEnableEnhancedAccessibility(bool);
  • trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm

    r277874 r277971  
    133133
    134134#if PLATFORM(MAC)
     135#import "AppKitSPI.h"
    135136#import "WKAccessibilityWebPageObjectMac.h"
    136137#import "WebSwitchingGPUClient.h"
     
    10681069}
    10691070
    1070 static const WTF::String& reduceMotionPreferenceKey()
    1071 {
    1072     static NeverDestroyed<WTF::String> key(MAKE_STATIC_STRING_IMPL("reduceMotion"));
     1071static const WTF::String& invertColorsPreferenceKey()
     1072{
     1073    static NeverDestroyed<WTF::String> key(MAKE_STATIC_STRING_IMPL("whiteOnBlack"));
    10731074    return key;
    10741075}
     
    10971098        [notificationCenter postNotificationName:@"NSSystemColorsWillChangeNotification" object:nil];
    10981099        [notificationCenter postNotificationName:NSSystemColorsDidChangeNotification object:nil];
    1099     } else if (key == reduceMotionPreferenceKey()) {
    1100         auto notificationCenter = CFNotificationCenterGetDistributedCenter();
    1101         CFNotificationCenterPostNotification(notificationCenter, kAXInterfaceReduceMotionStatusDidChangeNotification, nullptr, nullptr, true);
    11021100    }
    11031101#endif
     
    11341132            _AXSUpdateWebAccessibilitySettingsPtr()();
    11351133    }
     1134#endif
     1135   
     1136#if USE(APPKIT)
     1137    auto cfKey = key.createCFString();
     1138    if (CFEqual(cfKey.get(), kAXInterfaceReduceMotionKey) || CFEqual(cfKey.get(), kAXInterfaceIncreaseContrastKey) || key == invertColorsPreferenceKey())
     1139        [NSWorkspace _invalidateAccessibilityDisplayValues];
    11361140#endif
    11371141}
  • trunk/Tools/ChangeLog

    r277967 r277971  
     12021-05-24  Chris Fleizach  <cfleizach@apple.com>
     2
     3        AX: Settings: Increase contrast isn't detected in browser until an additional setting is applied
     4        https://bugs.webkit.org/show_bug.cgi?id=225909
     5
     6        Reviewed by Per Arne Vollan.
     7
     8        * WebKitTestRunner/InjectedBundle/AccessibilityController.cpp:
     9        (WTR::AccessibilityController::injectAccessibilityPreference):
     10        * WebKitTestRunner/InjectedBundle/AccessibilityController.h:
     11        * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityController.idl:
     12        * WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm:
     13        (WTR::AccessibilityController::injectAccessibilityPreference):
     14
    1152021-05-24  Darin Adler  <darin@apple.com>
    216
  • trunk/Tools/WebKitTestRunner/InjectedBundle/AccessibilityController.h

    r272970 r277971  
    7878    bool addNotificationListener(JSValueRef functionCallback);
    7979    bool removeNotificationListener();
     80    void injectAccessibilityPreference(JSStringRef domain, JSStringRef key, JSStringRef value);
    8081
    8182    // Here for consistency with DRT. Not implemented because they don't do anything on the Mac.
  • trunk/Tools/WebKitTestRunner/InjectedBundle/Bindings/AccessibilityController.idl

    r266311 r277971  
    3535    AccessibilityUIElement elementAtPoint(long x, long y);
    3636    AccessibilityUIElement accessibleElementById(DOMString id);
     37    undefined injectAccessibilityPreference(DOMString domain, DOMString key, DOMString value);
    3738   
    3839    boolean addNotificationListener(object functionCallback);
  • trunk/Tools/WebKitTestRunner/InjectedBundle/atk/AccessibilityControllerAtk.cpp

    r272970 r277971  
    101101}
    102102
     103void AccessibilityController::injectAccessibilityPreference(JSStringRef domain, JSStringRef key, JSStringRef value)
     104{
     105}
     106
    103107Ref<AccessibilityUIElement> AccessibilityController::rootElement()
    104108{
  • trunk/Tools/WebKitTestRunner/InjectedBundle/ios/AccessibilityControllerIOS.mm

    r273308 r277971  
    8989}
    9090
     91void AccessibilityController::injectAccessibilityPreference(JSStringRef, JSStringRef, JSStringRef)
     92{
     93}
     94
    9195RefPtr<AccessibilityUIElement> AccessibilityController::accessibleElementById(JSStringRef idAttribute)
    9296{
  • trunk/Tools/WebKitTestRunner/InjectedBundle/mac/AccessibilityControllerMac.mm

    r277911 r277971  
    9696}
    9797
     98void AccessibilityController::injectAccessibilityPreference(JSStringRef domain, JSStringRef key, JSStringRef value)
     99{
     100    NSNumber *numberValue = @([[NSString stringWithJSStringRef:value] integerValue]);
     101    NSData *encodedData = [NSKeyedArchiver archivedDataWithRootObject:numberValue requiringSecureCoding:YES error:nil];
     102    NSString *encodedString = [encodedData base64EncodedStringWithOptions:0];
     103    WKAccessibilityTestingInjectPreference(InjectedBundle::singleton().page()->page(), toWTFString(domain), toWTFString(key), (String)encodedString);
     104}
     105
    98106RefPtr<AccessibilityUIElement> AccessibilityController::accessibleElementById(JSStringRef idAttribute)
    99107{
  • trunk/Tools/WebKitTestRunner/InjectedBundle/win/AccessibilityControllerWin.cpp

    r272970 r277971  
    5151}
    5252
     53void AccessibilityController::injectAccessibilityPreference(JSStringRef domain, JSStringRef key, JSStringRef value)
     54{
     55    notImplemented();
     56}
     57
    5358Ref<AccessibilityUIElement> AccessibilityController::rootElement()
    5459{
Note: See TracChangeset for help on using the changeset viewer.