Changeset 277039 in webkit


Ignore:
Timestamp:
May 5, 2021 1:41:43 PM (15 months ago)
Author:
ntim@apple.com
Message:

Invalid media query keyword values should not be parsable
https://bugs.webkit.org/show_bug.cgi?id=225282

Reviewed by Dean Jackson.

Updated WPT expectations.

LayoutTests/imported/w3c:

  • web-platform-tests/css/mediaqueries/prefers-color-scheme-expected.txt:
  • web-platform-tests/css/mediaqueries/prefers-reduced-motion-expected.txt:

Source/WebCore:

  • css/MediaQueryExpression.cpp:

(WebCore::isValidValueForIdentMediaFeature):
(WebCore::featureWithValidIdent):

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r277023 r277039  
     12021-05-05  Tim Nguyen  <ntim@apple.com>
     2
     3        Invalid media query keyword values should not be parsable
     4        https://bugs.webkit.org/show_bug.cgi?id=225282
     5
     6        Reviewed by Dean Jackson.
     7
     8        Updated WPT expectations.
     9
     10        * web-platform-tests/css/mediaqueries/prefers-color-scheme-expected.txt:
     11        * web-platform-tests/css/mediaqueries/prefers-reduced-motion-expected.txt:
     12
    1132021-05-05  Chris Lord  <clord@igalia.com>
    214
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/prefers-color-scheme-expected.txt

    r267650 r277039  
    44PASS Should be parseable in a CSS stylesheet: '(prefers-color-scheme: dark)'
    55PASS Should not be parseable in a CSS stylesheet: '(prefers-color-scheme: 0)'
    6 FAIL Should not be parseable in a CSS stylesheet: '(prefers-color-scheme: none)' assert_false: expected false got true
     6PASS Should not be parseable in a CSS stylesheet: '(prefers-color-scheme: none)'
    77PASS Should not be parseable in a CSS stylesheet: '(prefers-color-scheme: 10px)'
    88PASS Should not be parseable in a CSS stylesheet: '(prefers-color-scheme: dark 0)'
    99PASS Should not be parseable in a CSS stylesheet: '(prefers-color-scheme: dark light)'
    1010PASS Should not be parseable in a CSS stylesheet: '(prefers-color-scheme: light/dark)'
    11 FAIL Should not be parseable in a CSS stylesheet: '(prefers-color-scheme: no-preference)' assert_false: expected false got true
     11PASS Should not be parseable in a CSS stylesheet: '(prefers-color-scheme: no-preference)'
    1212PASS Should be parseable in JS: '(prefers-color-scheme)'
    1313PASS Should be parseable in JS: '(prefers-color-scheme: light)'
    1414PASS Should be parseable in JS: '(prefers-color-scheme: dark)'
    1515PASS Should not be parseable in JS: '(prefers-color-scheme: 0)'
    16 FAIL Should not be parseable in JS: '(prefers-color-scheme: none)' assert_false: expected false got true
     16PASS Should not be parseable in JS: '(prefers-color-scheme: none)'
    1717PASS Should not be parseable in JS: '(prefers-color-scheme: 10px)'
    1818PASS Should not be parseable in JS: '(prefers-color-scheme: dark 0)'
    1919PASS Should not be parseable in JS: '(prefers-color-scheme: dark light)'
    2020PASS Should not be parseable in JS: '(prefers-color-scheme: light/dark)'
    21 FAIL Should not be parseable in JS: '(prefers-color-scheme: no-preference)' assert_false: expected false got true
     21PASS Should not be parseable in JS: '(prefers-color-scheme: no-preference)'
    2222PASS Check that prefer-color-scheme evaluates to true in the boolean context
    2323
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/prefers-reduced-motion-expected.txt

    r267650 r277039  
    44PASS Should be parseable in a CSS stylesheet: '(prefers-reduced-motion: reduce)'
    55PASS Should not be parseable in a CSS stylesheet: '(prefers-reduced-motion: 0)'
    6 FAIL Should not be parseable in a CSS stylesheet: '(prefers-reduced-motion: none)' assert_false: expected false got true
     6PASS Should not be parseable in a CSS stylesheet: '(prefers-reduced-motion: none)'
    77PASS Should not be parseable in a CSS stylesheet: '(prefers-reduced-motion: 10px)'
    88PASS Should not be parseable in a CSS stylesheet: '(prefers-reduced-motion: no-preference reduce)'
    9 FAIL Should not be parseable in a CSS stylesheet: '(prefers-reduced-motion: reduced)' assert_false: expected false got true
     9PASS Should not be parseable in a CSS stylesheet: '(prefers-reduced-motion: reduced)'
    1010PASS Should not be parseable in a CSS stylesheet: '(prefers-reduced-motion: no-preference/reduce)'
    1111PASS Should be parseable in JS: '(prefers-reduced-motion)'
     
    1313PASS Should be parseable in JS: '(prefers-reduced-motion: reduce)'
    1414PASS Should not be parseable in JS: '(prefers-reduced-motion: 0)'
    15 FAIL Should not be parseable in JS: '(prefers-reduced-motion: none)' assert_false: expected false got true
     15PASS Should not be parseable in JS: '(prefers-reduced-motion: none)'
    1616PASS Should not be parseable in JS: '(prefers-reduced-motion: 10px)'
    1717PASS Should not be parseable in JS: '(prefers-reduced-motion: no-preference reduce)'
  • trunk/Source/WebCore/ChangeLog

    r277038 r277039  
     12021-05-05  Tim Nguyen  <ntim@apple.com>
     2
     3        Invalid media query keyword values should not be parsable
     4        https://bugs.webkit.org/show_bug.cgi?id=225282
     5
     6        Reviewed by Dean Jackson.
     7
     8        Updated WPT expectations.
     9
     10        * css/MediaQueryExpression.cpp:
     11        (WebCore::isValidValueForIdentMediaFeature):
     12        (WebCore::featureWithValidIdent):
     13
    1142021-05-05  Alex Christensen  <achristensen@webkit.org>
    215
  • trunk/Source/WebCore/css/MediaQueryExpression.cpp

    r276550 r277039  
    3939namespace WebCore {
    4040
     41static inline bool isValidValueForIdentMediaFeature(const AtomString& feature, const CSSPrimitiveValue& value)
     42{
     43    auto valueID = value.valueID();
     44
     45    if (feature == MediaFeatureNames::orientation)
     46        return valueID == CSSValuePortrait || valueID == CSSValueLandscape;
     47    if (feature == MediaFeatureNames::colorGamut)
     48        return valueID == CSSValueSRGB || valueID == CSSValueP3 || valueID == CSSValueRec2020;
     49    if (feature == MediaFeatureNames::anyHover || feature == MediaFeatureNames::hover) // FIXME: remove `on-demand` that's no longer in the spec.
     50        return valueID == CSSValueOnDemand || valueID == CSSValueHover || valueID == CSSValueNone;
     51    if (feature == MediaFeatureNames::anyPointer || feature == MediaFeatureNames::pointer)
     52        return valueID == CSSValueFine || valueID == CSSValueCoarse || valueID == CSSValueNone;
     53    if (feature == MediaFeatureNames::invertedColors)
     54        return valueID == CSSValueInverted || valueID == CSSValueNone;
     55#if ENABLE(APPLICATION_MANIFEST)
     56    if (feature == MediaFeatureNames::displayMode)
     57        return valueID == CSSValueFullscreen || valueID == CSSValueStandalone || valueID == CSSValueMinimalUi || valueID == CSSValueBrowser;
     58#endif
     59#if ENABLE(DARK_MODE_CSS)
     60    if (feature == MediaFeatureNames::prefersColorScheme)
     61        return valueID == CSSValueLight || valueID == CSSValueDark;
     62#endif
     63    if (feature == MediaFeatureNames::prefersContrast) // FIXME: remove `forced` that's no longer in the spec.
     64        return valueID == CSSValueNoPreference || valueID == CSSValueMore || valueID == CSSValueLess || valueID == CSSValueForced;
     65    if (feature == MediaFeatureNames::prefersReducedMotion)
     66        return valueID == CSSValueNoPreference || valueID == CSSValueReduce;
     67    if (feature == MediaFeatureNames::prefersDarkInterface)
     68        return valueID == CSSValuePrefers || valueID == CSSValueNoPreference;
     69    if (feature == MediaFeatureNames::dynamicRange)
     70        return valueID == CSSValueHigh || valueID == CSSValueStandard;
     71
     72    return false;
     73}
     74
    4175static inline bool featureWithValidIdent(const AtomString& mediaFeature, const CSSPrimitiveValue& value, const MediaQueryParserContext& context)
    4276{
    43     if (value.primitiveType() != CSSUnitType::CSS_IDENT)
     77    if (value.primitiveType() != CSSUnitType::CSS_IDENT || !isValidValueForIdentMediaFeature(mediaFeature, value))
    4478        return false;
    4579
     
    5589#endif
    5690#if ENABLE(DARK_MODE_CSS)
    57     || (mediaFeature == MediaFeatureNames::prefersColorScheme)
     91    || mediaFeature == MediaFeatureNames::prefersColorScheme
    5892#endif
    5993    || mediaFeature == MediaFeatureNames::prefersContrast
Note: See TracChangeset for help on using the changeset viewer.