Changeset 270823 in webkit


Ignore:
Timestamp:
Dec 14, 2020 10:28:57 PM (19 months ago)
Author:
Chris Fleizach
Message:

AX: implement prefers-contrast: more
https://bugs.webkit.org/show_bug.cgi?id=215507
<rdar://problem/67077492>

Reviewed by Dean Jackson.

Source/WebCore:

Implement prefers-contrast as defined in
https://drafts.csswg.org/mediaqueries-5/#prefers-contrast

Tests: fast/media/mq-prefers-contrast-forced-value.html

fast/media/mq-prefers-contrast-live-update-for-listener.html
fast/media/mq-prefers-contrast-live-update.html
fast/media/mq-prefers-contrast-matchMedia.html
fast/media/mq-prefers-contrast.html

  • css/CSSValueKeywords.in:
  • css/MediaFeatureNames.h:
  • css/MediaQueryEvaluator.cpp:

(WebCore::isAccessibilitySettingsDependent):
(WebCore::prefersContrastEvaluate):

  • css/MediaQueryExpression.cpp:

(WebCore::featureWithValidIdent):
(WebCore::isFeatureValidWithoutValue):

  • page/Settings.yaml:
  • platform/Theme.cpp:

(WebCore::Theme::userPrefersContrast const):

  • platform/Theme.h:
  • platform/ios/ThemeIOS.h:
  • platform/ios/ThemeIOS.mm:

(WebCore::ThemeIOS::userPrefersContrast const):

  • platform/mac/ThemeMac.h:
  • platform/mac/ThemeMac.mm:

(WebCore::ThemeMac::userPrefersContrast const):

  • testing/InternalSettings.cpp:

(WebCore::InternalSettings::Backup::Backup):
(WebCore::InternalSettings::Backup::restoreTo):
(WebCore::InternalSettings::forcedPrefersContrastAccessibilityValue const):
(WebCore::InternalSettings::setForcedPrefersContrastAccessibilityValue):

  • testing/InternalSettings.h:
  • testing/InternalSettings.idl:
  • testing/Internals.cpp:

(WebCore::Internals::userPrefersContrast const):

  • testing/Internals.h:
  • testing/Internals.idl:
  • testing/Internals.mm:

(WebCore::Internals::userPrefersContrast const):

Source/WebCore/PAL:

  • pal/ios/UIKitSoftLink.h:

LayoutTests:

  • TestExpectations:
  • fast/media/mq-prefers-contrast-forced-value.html: Added.
  • fast/media/mq-prefers-contrast-live-update-for-listener-expected.txt: Added.
  • fast/media/mq-prefers-contrast-live-update-for-listener.html: Added.
  • fast/media/mq-prefers-contrast-live-update.html: Added.
  • fast/media/mq-prefers-contrast-matchMedia-expected.html: Added.
  • fast/media/mq-prefers-contrast-matchMedia.html: Added.
  • fast/media/mq-prefers-contrast.html: Added.
  • platform/ios-simulator/fast/media/mq-prefers-contrast-expected.html: Added.
  • platform/ios-simulator/fast/media/mq-prefers-contrast-forced-value-expected.html: Added.
  • platform/ios-simulator/fast/media/mq-prefers-contrast-live-update-expected.html: Added.
  • platform/ios-wk2/TestExpectations:
  • platform/mac-wk2/TestExpectations:
  • platform/mac/fast/media/mq-prefers-contrast-expected.html: Added.
  • platform/mac/fast/media/mq-prefers-contrast-forced-value-expected.html: Added.
  • platform/mac/fast/media/mq-prefers-contrast-live-update-expected.html: Added.
Location:
trunk
Files:
15 added
26 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r270822 r270823  
     12020-12-14  Chris Fleizach  <cfleizach@apple.com>
     2
     3        AX: implement prefers-contrast: more
     4        https://bugs.webkit.org/show_bug.cgi?id=215507
     5        <rdar://problem/67077492>
     6
     7        Reviewed by Dean Jackson.
     8
     9        * TestExpectations:
     10        * fast/media/mq-prefers-contrast-forced-value.html: Added.
     11        * fast/media/mq-prefers-contrast-live-update-for-listener-expected.txt: Added.
     12        * fast/media/mq-prefers-contrast-live-update-for-listener.html: Added.
     13        * fast/media/mq-prefers-contrast-live-update.html: Added.
     14        * fast/media/mq-prefers-contrast-matchMedia-expected.html: Added.
     15        * fast/media/mq-prefers-contrast-matchMedia.html: Added.
     16        * fast/media/mq-prefers-contrast.html: Added.
     17        * platform/ios-simulator/fast/media/mq-prefers-contrast-expected.html: Added.
     18        * platform/ios-simulator/fast/media/mq-prefers-contrast-forced-value-expected.html: Added.
     19        * platform/ios-simulator/fast/media/mq-prefers-contrast-live-update-expected.html: Added.
     20        * platform/ios-wk2/TestExpectations:
     21        * platform/mac-wk2/TestExpectations:
     22        * platform/mac/fast/media/mq-prefers-contrast-expected.html: Added.
     23        * platform/mac/fast/media/mq-prefers-contrast-forced-value-expected.html: Added.
     24        * platform/mac/fast/media/mq-prefers-contrast-live-update-expected.html: Added.
     25
    1262020-12-14  Diego Pino Garcia  <dpino@igalia.com>
    227
  • trunk/LayoutTests/TestExpectations

    r270618 r270823  
    219219fast/media/mq-monochrome-live-update.html [ Skip ]
    220220fast/media/mq-prefers-reduced-motion-live-update.html [ Skip ]
     221fast/media/mq-prefers-contrast.html [ Skip ]
     222fast/media/mq-prefers-contrast-live-update.html [ Skip ]
    221223http/tests/loading/basic-auth-remove-credentials.html [ Skip ]
    222224http/tests/security/strip-referrer-to-origin-for-third-party-redirects-in-private-mode.html [ Skip ]
  • trunk/LayoutTests/platform/ios-wk2/TestExpectations

    r270574 r270823  
    3838fast/media/mq-monochrome-live-update.html [ Pass ]
    3939fast/media/mq-prefers-reduced-motion-live-update.html [ Pass ]
     40fast/media/mq-prefers-contrast.html [ Pass ]
     41fast/media/mq-prefers-contrast-live-update.html [ Pass ]
    4042
    4143fast/repaint/placeholder-after-caps-lock-hidden.html [ Pass ]
  • trunk/LayoutTests/platform/mac-wk2/TestExpectations

    r270434 r270823  
    4040fast/media/mq-monochrome-live-update.html [ Pass ]
    4141fast/media/mq-prefers-reduced-motion-live-update.html [ Pass ]
     42fast/media/mq-prefers-contrast-live-update.html [ Pass ]
     43fast/media/mq-prefers-contrast.html [ Pass ]
    4244
    4345http/tests/ssl/applepay [ Pass ]
  • trunk/Source/WebCore/ChangeLog

    r270819 r270823  
     12020-12-14  Chris Fleizach  <cfleizach@apple.com>
     2
     3        AX: implement prefers-contrast: more
     4        https://bugs.webkit.org/show_bug.cgi?id=215507
     5        <rdar://problem/67077492>
     6
     7        Reviewed by Dean Jackson.
     8
     9        Implement prefers-contrast as defined in
     10        https://drafts.csswg.org/mediaqueries-5/#prefers-contrast
     11
     12        Tests: fast/media/mq-prefers-contrast-forced-value.html
     13               fast/media/mq-prefers-contrast-live-update-for-listener.html
     14               fast/media/mq-prefers-contrast-live-update.html
     15               fast/media/mq-prefers-contrast-matchMedia.html
     16               fast/media/mq-prefers-contrast.html
     17
     18        * css/CSSValueKeywords.in:
     19        * css/MediaFeatureNames.h:
     20        * css/MediaQueryEvaluator.cpp:
     21        (WebCore::isAccessibilitySettingsDependent):
     22        (WebCore::prefersContrastEvaluate):
     23        * css/MediaQueryExpression.cpp:
     24        (WebCore::featureWithValidIdent):
     25        (WebCore::isFeatureValidWithoutValue):
     26        * page/Settings.yaml:
     27        * platform/Theme.cpp:
     28        (WebCore::Theme::userPrefersContrast const):
     29        * platform/Theme.h:
     30        * platform/ios/ThemeIOS.h:
     31        * platform/ios/ThemeIOS.mm:
     32        (WebCore::ThemeIOS::userPrefersContrast const):
     33        * platform/mac/ThemeMac.h:
     34        * platform/mac/ThemeMac.mm:
     35        (WebCore::ThemeMac::userPrefersContrast const):
     36        * testing/InternalSettings.cpp:
     37        (WebCore::InternalSettings::Backup::Backup):
     38        (WebCore::InternalSettings::Backup::restoreTo):
     39        (WebCore::InternalSettings::forcedPrefersContrastAccessibilityValue const):
     40        (WebCore::InternalSettings::setForcedPrefersContrastAccessibilityValue):
     41        * testing/InternalSettings.h:
     42        * testing/InternalSettings.idl:
     43        * testing/Internals.cpp:
     44        (WebCore::Internals::userPrefersContrast const):
     45        * testing/Internals.h:
     46        * testing/Internals.idl:
     47        * testing/Internals.mm:
     48        (WebCore::Internals::userPrefersContrast const):
     49
    1502020-12-14  Peng Liu  <peng.liu6@apple.com>
    251
  • trunk/Source/WebCore/PAL/ChangeLog

    r270798 r270823  
     12020-12-14  Chris Fleizach  <cfleizach@apple.com>
     2
     3        AX: implement prefers-contrast: more
     4        https://bugs.webkit.org/show_bug.cgi?id=215507
     5        <rdar://problem/67077492>
     6
     7        Reviewed by Dean Jackson.
     8
     9        * pal/ios/UIKitSoftLink.h:
     10
    1112020-12-14  Tim Horton  <timothy_horton@apple.com>
    212
  • trunk/Source/WebCore/PAL/pal/ios/UIKitSoftLink.h

    r262209 r270823  
    6767SOFT_LINK_FUNCTION_FOR_HEADER(PAL, UIKit, UIAccessibilityIsInvertColorsEnabled, BOOL, (void), ())
    6868SOFT_LINK_FUNCTION_FOR_HEADER(PAL, UIKit, UIAccessibilityIsReduceMotionEnabled, BOOL, (void), ())
     69SOFT_LINK_FUNCTION_FOR_HEADER(PAL, UIKit, UIAccessibilityDarkerSystemColorsEnabled, BOOL, (void), ())
    6970SOFT_LINK_FUNCTION_FOR_HEADER(PAL, UIKit, UIAccessibilityPostNotification, void, (UIAccessibilityNotifications n, id argument), (n, argument))
    7071SOFT_LINK_FUNCTION_FOR_HEADER(PAL, UIKit, UIGraphicsGetCurrentContext, CGContextRef, (void), ())
  • trunk/Source/WebCore/PAL/pal/ios/UIKitSoftLink.mm

    r262209 r270823  
    6767SOFT_LINK_FUNCTION_FOR_SOURCE(PAL, UIKit, UIAccessibilityIsInvertColorsEnabled, BOOL, (void), ())
    6868SOFT_LINK_FUNCTION_FOR_SOURCE_WITH_EXPORT(PAL, UIKit, UIAccessibilityIsReduceMotionEnabled, BOOL, (void), (), PAL_EXPORT)
     69SOFT_LINK_FUNCTION_FOR_SOURCE_WITH_EXPORT(PAL, UIKit, UIAccessibilityDarkerSystemColorsEnabled, BOOL, (void), (), PAL_EXPORT)
    6970SOFT_LINK_FUNCTION_FOR_SOURCE(PAL, UIKit, UIAccessibilityPostNotification, void, (UIAccessibilityNotifications n, id argument), (n, argument))
    7071SOFT_LINK_FUNCTION_FOR_SOURCE(PAL, UIKit, UIGraphicsGetCurrentContext, CGContextRef, (void), ())
  • trunk/Source/WebCore/css/CSSValueKeywords.in

    r270613 r270823  
    14151415no-preference
    14161416
     1417// prefers-contrast
     1418forced
     1419more
     1420less
     1421// no-preference
     1422
    14171423#if defined(ENABLE_DARK_MODE_CSS) && ENABLE_DARK_MODE_CSS
    14181424// prefers-color-scheme
  • trunk/Source/WebCore/css/MediaFeatureNames.h

    r252762 r270823  
    7878    macro(orientation, "orientation") \
    7979    macro(pointer, "pointer") \
     80    macro(prefersContrast, "prefers-contrast") \
    8081    macro(prefersDarkInterface, "prefers-dark-interface") \
    8182    macro(prefersReducedMotion, "prefers-reduced-motion") \
  • trunk/Source/WebCore/css/MediaQueryEvaluator.cpp

    r269888 r270823  
    8484        || mediaFeature == MediaFeatureNames::minMonochrome
    8585        || mediaFeature == MediaFeatureNames::monochrome
    86         || mediaFeature == MediaFeatureNames::prefersReducedMotion;
     86        || mediaFeature == MediaFeatureNames::prefersReducedMotion
     87        || mediaFeature == MediaFeatureNames::prefersContrast;
    8788}
    8889
     
    821822#endif
    822823
     824static bool prefersContrastEvaluate(CSSValue* value, const CSSToLengthConversionData&, Frame& frame, MediaFeaturePrefix)
     825{
     826    bool userPrefersContrast = false;
     827
     828    switch (frame.settings().forcedPrefersContrastAccessibilityValue()) {
     829    case ForcedAccessibilityValue::On:
     830        userPrefersContrast = true;
     831        break;
     832    case ForcedAccessibilityValue::Off:
     833        break;
     834    case ForcedAccessibilityValue::System:
     835#if PLATFORM(MAC) || PLATFORM(IOS_FAMILY)
     836        userPrefersContrast = Theme::singleton().userPrefersContrast();
     837#endif
     838        break;
     839    }
     840
     841    if (!value)
     842        return userPrefersContrast;
     843
     844    // Apple platforms: less and forced are ignored and only "more" is mapped to the user's preference.
     845    return downcast<CSSPrimitiveValue>(*value).valueID() == (userPrefersContrast ? CSSValueMore : CSSValueNoPreference);
     846}
     847
    823848static bool prefersReducedMotionEvaluate(CSSValue* value, const CSSToLengthConversionData&, Frame& frame, MediaFeaturePrefix)
    824849{
  • trunk/Source/WebCore/css/MediaQueryExpression.cpp

    r252762 r270823  
    5757    || (mediaFeature == MediaFeatureNames::prefersColorScheme)
    5858#endif
     59    || mediaFeature == MediaFeatureNames::prefersContrast
    5960    || mediaFeature == MediaFeatureNames::prefersReducedMotion
    6061    || (mediaFeature == MediaFeatureNames::prefersDarkInterface && (context.useSystemAppearance || isUASheetBehavior(context.mode)))
     
    166167        || mediaFeature == MediaFeatureNames::invertedColors
    167168        || mediaFeature == MediaFeatureNames::pointer
     169        || mediaFeature == MediaFeatureNames::prefersContrast
    168170        || mediaFeature == MediaFeatureNames::prefersReducedMotion
    169171        || (mediaFeature == MediaFeatureNames::prefersDarkInterface && (context.useSystemAppearance || isUASheetBehavior(context.mode)))
  • trunk/Source/WebCore/page/Settings.yaml

    r270762 r270823  
    186186      default: false
    187187
     188ForcedPrefersContrastAccessibilityValue:
     189  type: uint32_t
     190  refinedType: ForcedAccessibilityValue
     191  defaultValue:
     192    WebCore:
     193      default: ForcedAccessibilityValue::System
     194
    188195ForcedColorsAreInvertedAccessibilityValue:
    189196  type: uint32_t
  • trunk/Source/WebCore/platform/Theme.cpp

    r257631 r270823  
    7171    return false;
    7272}
     73
     74bool Theme::userPrefersContrast() const
     75{
     76    return false;
     77}
     78
    7379
    7480LengthBox Theme::controlBorder(ControlPart part, const FontCascade&, const LengthBox& zoomedBox, float) const
  • trunk/Source/WebCore/platform/Theme.h

    r257631 r270823  
    7878    virtual void drawNamedImage(const String&, GraphicsContext&, const FloatRect&) const;
    7979
     80    virtual bool userPrefersContrast() const;
    8081    virtual bool userPrefersReducedMotion() const;
    8182
  • trunk/Source/WebCore/platform/ios/ThemeIOS.h

    r237266 r270823  
    3535private:
    3636    bool userPrefersReducedMotion() const final;
     37    bool userPrefersContrast() const final;
    3738};
    3839
  • trunk/Source/WebCore/platform/ios/ThemeIOS.mm

    r240168 r270823  
    4747}
    4848
     49bool ThemeIOS::userPrefersContrast() const
     50{
     51    return PAL::softLink_UIKit_UIAccessibilityDarkerSystemColorsEnabled();
     52}
     53
    4954}
    5055
  • trunk/Source/WebCore/platform/mac/ThemeMac.h

    r263255 r270823  
    6262
    6363    bool userPrefersReducedMotion() const final;
     64    bool userPrefersContrast() const final;
    6465};
    6566
  • trunk/Source/WebCore/platform/mac/ThemeMac.mm

    r265870 r270823  
    972972}
    973973
     974bool ThemeMac::userPrefersContrast() const
     975{
     976    return [[NSWorkspace sharedWorkspace] accessibilityDisplayShouldIncreaseContrast];
     977}
     978
    974979#if HAVE(LARGE_CONTROL_SIZE)
    975980
  • trunk/Source/WebCore/testing/InternalSettings.cpp

    r270627 r270823  
    5959    , m_forcedColorsAreInvertedAccessibilityValue(settings.forcedColorsAreInvertedAccessibilityValue())
    6060    , m_forcedDisplayIsMonochromeAccessibilityValue(settings.forcedDisplayIsMonochromeAccessibilityValue())
     61    , m_forcedPrefersContrastAccessibilityValue(settings.forcedPrefersContrastAccessibilityValue())
    6162    , m_forcedPrefersReducedMotionAccessibilityValue(settings.forcedPrefersReducedMotionAccessibilityValue())
    6263    , m_fontLoadTimingOverride(settings.fontLoadTimingOverride())
     
    117118    settings.setForcedColorsAreInvertedAccessibilityValue(m_forcedColorsAreInvertedAccessibilityValue);
    118119    settings.setForcedDisplayIsMonochromeAccessibilityValue(m_forcedDisplayIsMonochromeAccessibilityValue);
     120    settings.setForcedPrefersContrastAccessibilityValue(m_forcedPrefersContrastAccessibilityValue);
    119121    settings.setForcedPrefersReducedMotionAccessibilityValue(m_forcedPrefersReducedMotionAccessibilityValue);
    120122    settings.setFontLoadTimingOverride(m_fontLoadTimingOverride);
     
    394396{
    395397    settings().setForcedDisplayIsMonochromeAccessibilityValue(value);
     398}
     399
     400InternalSettings::ForcedAccessibilityValue InternalSettings::forcedPrefersContrastAccessibilityValue() const
     401{
     402    return settings().forcedPrefersContrastAccessibilityValue();
     403}
     404
     405void InternalSettings::setForcedPrefersContrastAccessibilityValue(InternalSettings::ForcedAccessibilityValue value)
     406{
     407    settings().setForcedPrefersContrastAccessibilityValue(value);
    396408}
    397409
  • trunk/Source/WebCore/testing/InternalSettings.h

    r270627 r270823  
    8383    ForcedAccessibilityValue forcedDisplayIsMonochromeAccessibilityValue() const;
    8484    void setForcedDisplayIsMonochromeAccessibilityValue(ForcedAccessibilityValue);
     85    ForcedAccessibilityValue forcedPrefersContrastAccessibilityValue() const;
     86    void setForcedPrefersContrastAccessibilityValue(ForcedAccessibilityValue);
    8587    ForcedAccessibilityValue forcedPrefersReducedMotionAccessibilityValue() const;
    8688    void setForcedPrefersReducedMotionAccessibilityValue(ForcedAccessibilityValue);
     
    153155        WebCore::ForcedAccessibilityValue m_forcedColorsAreInvertedAccessibilityValue;
    154156        WebCore::ForcedAccessibilityValue m_forcedDisplayIsMonochromeAccessibilityValue;
     157        WebCore::ForcedAccessibilityValue m_forcedPrefersContrastAccessibilityValue;
    155158        WebCore::ForcedAccessibilityValue m_forcedPrefersReducedMotionAccessibilityValue;
    156159        WebCore::FontLoadTimingOverride m_fontLoadTimingOverride;
  • trunk/Source/WebCore/testing/InternalSettings.idl

    r270627 r270823  
    6161    attribute ForcedAccessibilityValue forcedColorsAreInvertedAccessibilityValue;
    6262    attribute ForcedAccessibilityValue forcedDisplayIsMonochromeAccessibilityValue;
     63    attribute ForcedAccessibilityValue forcedPrefersContrastAccessibilityValue;
    6364    attribute ForcedAccessibilityValue forcedPrefersReducedMotionAccessibilityValue;
    6465    attribute ForcedAccessibilityValue forcedSupportsHighDynamicRangeValue;
  • trunk/Source/WebCore/testing/Internals.cpp

    r270532 r270823  
    48694869}
    48704870
     4871bool Internals::userPrefersContrast() const
     4872{
     4873    return false;
     4874}
     4875
    48714876#if ENABLE(VIDEO)
    48724877double Internals::privatePlayerVolume(const HTMLMediaElement&)
  • trunk/Source/WebCore/testing/Internals.h

    r270532 r270823  
    746746    void setUserInterfaceLayoutDirection(UserInterfaceLayoutDirection);
    747747
     748    bool userPrefersContrast() const;
    748749    bool userPrefersReducedMotion() const;
    749750
  • trunk/Source/WebCore/testing/Internals.idl

    r270532 r270823  
    772772    undefined setBaseWritingDirection(BaseWritingDirection direction);
    773773
     774    boolean userPrefersContrast();
    774775    boolean userPrefersReducedMotion();
    775    
     776
    776777    undefined reportBacktrace();
    777778
  • trunk/Source/WebCore/testing/Internals.mm

    r264247 r270823  
    5252{
    5353    return WTF::userVisibleString(url.href());
     54}
     55
     56bool Internals::userPrefersContrast() const
     57{
     58#if PLATFORM(IOS_FAMILY)
     59    return PAL::softLink_UIKit_UIAccessibilityDarkerSystemColorsEnabled();
     60#else
     61    return [[NSWorkspace sharedWorkspace] accessibilityDisplayShouldIncreaseContrast];
     62#endif
    5463}
    5564
Note: See TracChangeset for help on using the changeset viewer.