Title: [277039] trunk
Revision
277039
Author
[email protected]
Date
2021-05-05 13:41:43 -0700 (Wed, 05 May 2021)

Log 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):

Modified Paths

Diff

Modified: trunk/LayoutTests/imported/w3c/ChangeLog (277038 => 277039)


--- trunk/LayoutTests/imported/w3c/ChangeLog	2021-05-05 20:34:53 UTC (rev 277038)
+++ trunk/LayoutTests/imported/w3c/ChangeLog	2021-05-05 20:41:43 UTC (rev 277039)
@@ -1,3 +1,15 @@
+2021-05-05  Tim Nguyen  <[email protected]>
+
+        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.
+
+        * web-platform-tests/css/mediaqueries/prefers-color-scheme-expected.txt:
+        * web-platform-tests/css/mediaqueries/prefers-reduced-motion-expected.txt:
+
 2021-05-05  Chris Lord  <[email protected]>
 
         Update WPT OffscreenCanvas tests to respect [EnforceRange]

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/prefers-color-scheme-expected.txt (277038 => 277039)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/prefers-color-scheme-expected.txt	2021-05-05 20:34:53 UTC (rev 277038)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/prefers-color-scheme-expected.txt	2021-05-05 20:41:43 UTC (rev 277039)
@@ -3,21 +3,21 @@
 PASS Should be parseable in a CSS stylesheet: '(prefers-color-scheme: light)'
 PASS Should be parseable in a CSS stylesheet: '(prefers-color-scheme: dark)'
 PASS Should not be parseable in a CSS stylesheet: '(prefers-color-scheme: 0)'
-FAIL Should not be parseable in a CSS stylesheet: '(prefers-color-scheme: none)' assert_false: expected false got true
+PASS Should not be parseable in a CSS stylesheet: '(prefers-color-scheme: none)'
 PASS Should not be parseable in a CSS stylesheet: '(prefers-color-scheme: 10px)'
 PASS Should not be parseable in a CSS stylesheet: '(prefers-color-scheme: dark 0)'
 PASS Should not be parseable in a CSS stylesheet: '(prefers-color-scheme: dark light)'
 PASS Should not be parseable in a CSS stylesheet: '(prefers-color-scheme: light/dark)'
-FAIL Should not be parseable in a CSS stylesheet: '(prefers-color-scheme: no-preference)' assert_false: expected false got true
+PASS Should not be parseable in a CSS stylesheet: '(prefers-color-scheme: no-preference)'
 PASS Should be parseable in JS: '(prefers-color-scheme)'
 PASS Should be parseable in JS: '(prefers-color-scheme: light)'
 PASS Should be parseable in JS: '(prefers-color-scheme: dark)'
 PASS Should not be parseable in JS: '(prefers-color-scheme: 0)'
-FAIL Should not be parseable in JS: '(prefers-color-scheme: none)' assert_false: expected false got true
+PASS Should not be parseable in JS: '(prefers-color-scheme: none)'
 PASS Should not be parseable in JS: '(prefers-color-scheme: 10px)'
 PASS Should not be parseable in JS: '(prefers-color-scheme: dark 0)'
 PASS Should not be parseable in JS: '(prefers-color-scheme: dark light)'
 PASS Should not be parseable in JS: '(prefers-color-scheme: light/dark)'
-FAIL Should not be parseable in JS: '(prefers-color-scheme: no-preference)' assert_false: expected false got true
+PASS Should not be parseable in JS: '(prefers-color-scheme: no-preference)'
 PASS Check that prefer-color-scheme evaluates to true in the boolean context
 

Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/prefers-reduced-motion-expected.txt (277038 => 277039)


--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/prefers-reduced-motion-expected.txt	2021-05-05 20:34:53 UTC (rev 277038)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/prefers-reduced-motion-expected.txt	2021-05-05 20:41:43 UTC (rev 277039)
@@ -3,16 +3,16 @@
 PASS Should be parseable in a CSS stylesheet: '(prefers-reduced-motion: no-preference)'
 PASS Should be parseable in a CSS stylesheet: '(prefers-reduced-motion: reduce)'
 PASS Should not be parseable in a CSS stylesheet: '(prefers-reduced-motion: 0)'
-FAIL Should not be parseable in a CSS stylesheet: '(prefers-reduced-motion: none)' assert_false: expected false got true
+PASS Should not be parseable in a CSS stylesheet: '(prefers-reduced-motion: none)'
 PASS Should not be parseable in a CSS stylesheet: '(prefers-reduced-motion: 10px)'
 PASS Should not be parseable in a CSS stylesheet: '(prefers-reduced-motion: no-preference reduce)'
-FAIL Should not be parseable in a CSS stylesheet: '(prefers-reduced-motion: reduced)' assert_false: expected false got true
+PASS Should not be parseable in a CSS stylesheet: '(prefers-reduced-motion: reduced)'
 PASS Should not be parseable in a CSS stylesheet: '(prefers-reduced-motion: no-preference/reduce)'
 PASS Should be parseable in JS: '(prefers-reduced-motion)'
 PASS Should be parseable in JS: '(prefers-reduced-motion: no-preference)'
 PASS Should be parseable in JS: '(prefers-reduced-motion: reduce)'
 PASS Should not be parseable in JS: '(prefers-reduced-motion: 0)'
-FAIL Should not be parseable in JS: '(prefers-reduced-motion: none)' assert_false: expected false got true
+PASS Should not be parseable in JS: '(prefers-reduced-motion: none)'
 PASS Should not be parseable in JS: '(prefers-reduced-motion: 10px)'
 PASS Should not be parseable in JS: '(prefers-reduced-motion: no-preference reduce)'
 PASS Should not be parseable in JS: '(prefers-reduced-motion: reduced)'

Modified: trunk/Source/WebCore/ChangeLog (277038 => 277039)


--- trunk/Source/WebCore/ChangeLog	2021-05-05 20:34:53 UTC (rev 277038)
+++ trunk/Source/WebCore/ChangeLog	2021-05-05 20:41:43 UTC (rev 277039)
@@ -1,3 +1,16 @@
+2021-05-05  Tim Nguyen  <[email protected]>
+
+        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.
+
+        * css/MediaQueryExpression.cpp:
+        (WebCore::isValidValueForIdentMediaFeature):
+        (WebCore::featureWithValidIdent):
+
 2021-05-05  Alex Christensen  <[email protected]>
 
         Add WebKitAdditions stubs for new NetworkLoadMetrics

Modified: trunk/Source/WebCore/css/MediaQueryExpression.cpp (277038 => 277039)


--- trunk/Source/WebCore/css/MediaQueryExpression.cpp	2021-05-05 20:34:53 UTC (rev 277038)
+++ trunk/Source/WebCore/css/MediaQueryExpression.cpp	2021-05-05 20:41:43 UTC (rev 277039)
@@ -38,9 +38,43 @@
 
 namespace WebCore {
 
+static inline bool isValidValueForIdentMediaFeature(const AtomString& feature, const CSSPrimitiveValue& value)
+{
+    auto valueID = value.valueID();
+
+    if (feature == MediaFeatureNames::orientation)
+        return valueID == CSSValuePortrait || valueID == CSSValueLandscape;
+    if (feature == MediaFeatureNames::colorGamut)
+        return valueID == CSSValueSRGB || valueID == CSSValueP3 || valueID == CSSValueRec2020;
+    if (feature == MediaFeatureNames::anyHover || feature == MediaFeatureNames::hover) // FIXME: remove `on-demand` that's no longer in the spec.
+        return valueID == CSSValueOnDemand || valueID == CSSValueHover || valueID == CSSValueNone;
+    if (feature == MediaFeatureNames::anyPointer || feature == MediaFeatureNames::pointer)
+        return valueID == CSSValueFine || valueID == CSSValueCoarse || valueID == CSSValueNone;
+    if (feature == MediaFeatureNames::invertedColors)
+        return valueID == CSSValueInverted || valueID == CSSValueNone;
+#if ENABLE(APPLICATION_MANIFEST)
+    if (feature == MediaFeatureNames::displayMode)
+        return valueID == CSSValueFullscreen || valueID == CSSValueStandalone || valueID == CSSValueMinimalUi || valueID == CSSValueBrowser;
+#endif
+#if ENABLE(DARK_MODE_CSS)
+    if (feature == MediaFeatureNames::prefersColorScheme)
+        return valueID == CSSValueLight || valueID == CSSValueDark;
+#endif
+    if (feature == MediaFeatureNames::prefersContrast) // FIXME: remove `forced` that's no longer in the spec.
+        return valueID == CSSValueNoPreference || valueID == CSSValueMore || valueID == CSSValueLess || valueID == CSSValueForced;
+    if (feature == MediaFeatureNames::prefersReducedMotion)
+        return valueID == CSSValueNoPreference || valueID == CSSValueReduce;
+    if (feature == MediaFeatureNames::prefersDarkInterface)
+        return valueID == CSSValuePrefers || valueID == CSSValueNoPreference;
+    if (feature == MediaFeatureNames::dynamicRange)
+        return valueID == CSSValueHigh || valueID == CSSValueStandard;
+
+    return false;
+}
+
 static inline bool featureWithValidIdent(const AtomString& mediaFeature, const CSSPrimitiveValue& value, const MediaQueryParserContext& context)
 {
-    if (value.primitiveType() != CSSUnitType::CSS_IDENT)
+    if (value.primitiveType() != CSSUnitType::CSS_IDENT || !isValidValueForIdentMediaFeature(mediaFeature, value))
         return false;
 
     return mediaFeature == MediaFeatureNames::orientation
@@ -54,7 +88,7 @@
     || mediaFeature == MediaFeatureNames::displayMode
 #endif
 #if ENABLE(DARK_MODE_CSS)
-    || (mediaFeature == MediaFeatureNames::prefersColorScheme)
+    || mediaFeature == MediaFeatureNames::prefersColorScheme
 #endif
     || mediaFeature == MediaFeatureNames::prefersContrast
     || mediaFeature == MediaFeatureNames::prefersReducedMotion
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to