Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[MQ] Negative resolutions in media queries should not be known
https://bugs.webkit.org/show_bug.cgi?id=258250
rdar://110948170

Reviewed by Darin Adler.

As per https://drafts.csswg.org/css-values-4/#resolution-value negative
resolutions are always invalid, even in media queries.

Sync relevant WPT from commit: web-platform-tests/wpt@79cb3ca

* LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/mq-negative-range-001.html:
* LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/mq-negative-range-002.html:
* LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/test_media_queries-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/mediaqueries/test_media_queries.html:
* Source/WebCore/css/query/GenericMediaQueryParser.cpp:
(WebCore::MQ::GenericMediaQueryParserBase::validateFeatureAgainstSchema):

Canonical link: https://commits.webkit.org/265279@main
  • Loading branch information
nt1m committed Jun 18, 2023
1 parent d447cfd commit a62f8b0
Show file tree
Hide file tree
Showing 5 changed files with 15 additions and 11 deletions.
Expand Up @@ -18,8 +18,6 @@
and
(min-height: -100px)
and
(min-resolution: -1dpi)
and
(min-color: -10)
and
(min-color-index: -10)
Expand Down
Expand Up @@ -18,8 +18,6 @@
and
(not (max-height: -100px))
and
(not (max-resolution: -1dpi))
and
(not (max-color: -10))
and
(not (max-color-index: -10))
Expand Down
Expand Up @@ -1144,9 +1144,11 @@ PASS expression_should_be_known: resolution: 1.5dppx
PASS expression_should_be_known: resolution: 1.5x
PASS expression_should_be_known: resolution: 2.0dppx
PASS expression_should_be_known: resolution: 0dpi
PASS expression_should_be_known: resolution: -3dpi
PASS expression_should_be_known: resolution: 0dppx
PASS expression_should_be_known: resolution: 0x
PASS expression_should_be_known: resolution: calc(6x / 2)
PASS expression_should_be_parseable: resolution: -3dpi
PASS expression_should_be_unknown: resolution: -3dpi
PASS expression_should_be_known: min-resolution: 3dpi
PASS expression_should_be_known: min-resolution:3dpi
PASS expression_should_be_known: min-resolution: 3.0dpi
Expand All @@ -1158,9 +1160,11 @@ PASS expression_should_be_known: min-resolution: 1.5dppx
PASS expression_should_be_known: min-resolution: 1.5x
PASS expression_should_be_known: min-resolution: 2.0dppx
PASS expression_should_be_known: min-resolution: 0dpi
PASS expression_should_be_known: min-resolution: -3dpi
PASS expression_should_be_known: min-resolution: 0dppx
PASS expression_should_be_known: min-resolution: 0x
PASS expression_should_be_known: min-resolution: calc(6x / 2)
PASS expression_should_be_parseable: min-resolution: -3dpi
PASS expression_should_be_unknown: min-resolution: -3dpi
PASS expression_should_be_known: max-resolution: 3dpi
PASS expression_should_be_known: max-resolution:3dpi
PASS expression_should_be_known: max-resolution: 3.0dpi
Expand All @@ -1172,9 +1176,11 @@ PASS expression_should_be_known: max-resolution: 1.5dppx
PASS expression_should_be_known: max-resolution: 1.5x
PASS expression_should_be_known: max-resolution: 2.0dppx
PASS expression_should_be_known: max-resolution: 0dpi
PASS expression_should_be_known: max-resolution: -3dpi
PASS expression_should_be_known: max-resolution: 0dppx
PASS expression_should_be_known: max-resolution: 0x
PASS expression_should_be_known: max-resolution: calc(6x / 2)
PASS expression_should_be_parseable: max-resolution: -3dpi
PASS expression_should_be_unknown: max-resolution: -3dpi
PASS find_resolution
PASS resolution is exact: should_apply: (resolution: ${resolution}dpi)
PASS resolution is exact: should_apply: (resolution: ${Math.floor(resolution/96)}dppx)
Expand Down Expand Up @@ -1260,7 +1266,8 @@ PASS expression_should_be_known: overflow-block
PASS expression_should_be_known: overflow-block: none
PASS expression_should_be_known: overflow-block: paged
PASS expression_should_be_known: overflow-block: scroll
FAIL expression_should_be_known: overflow-block: optional-paged assert_true: expected true got false
PASS expression_should_be_parseable: overflow-block: optional-paged
PASS expression_should_be_unknown: overflow-block: optional-paged
PASS expression_should_be_parseable: overflow-block: some-random-invalid-thing
PASS expression_should_be_unknown: overflow-block: some-random-invalid-thing
PASS Sanity check for overflow-block
Expand Down
Expand Up @@ -463,9 +463,10 @@
expression_should_be_known(feature + ": 1.5x");
expression_should_be_known(feature + ": 2.0dppx");
expression_should_be_known(feature + ": 0dpi");
expression_should_be_known(feature + ": -3dpi");
expression_should_be_known(feature + ": 0dppx");
expression_should_be_known(feature + ": 0x");
expression_should_be_known(feature + ": calc(6x / 2)");
expression_should_be_unknown(feature + ": -3dpi");
}

// Find the resolution using max-resolution
Expand Down Expand Up @@ -589,7 +590,7 @@
expression_should_be_known("overflow-block: none")
expression_should_be_known("overflow-block: paged")
expression_should_be_known("overflow-block: scroll")
expression_should_be_known("overflow-block: optional-paged")
expression_should_be_unknown("overflow-block: optional-paged")
expression_should_be_unknown("overflow-block: some-random-invalid-thing")

// Sanity check for overflow-block
Expand Down
2 changes: 1 addition & 1 deletion Source/WebCore/css/query/GenericMediaQueryParser.cpp
Expand Up @@ -250,7 +250,7 @@ bool GenericMediaQueryParserBase::validateFeatureAgainstSchema(Feature& feature,
return primitiveValue->isLength();

case FeatureSchema::ValueType::Resolution:
return primitiveValue && primitiveValue->isResolution();
return primitiveValue && primitiveValue->isResolution() && primitiveValue->doubleValue() >= 0;

case FeatureSchema::ValueType::Identifier:
return primitiveValue && primitiveValue->isValueID() && schema.valueIdentifiers.contains(primitiveValue->valueID());
Expand Down

0 comments on commit a62f8b0

Please sign in to comment.