From d521cb7246646e2eda4e6ee523b00331422c0bfd Mon Sep 17 00:00:00 2001 From: Noemi Erli Date: Sat, 25 Feb 2023 07:41:14 +0200 Subject: [PATCH] Backed out 2 changesets (bug 1818329) for causing wpt failures Backed out changeset af4cdf10aafd (bug 1818329) Backed out changeset 8c7eb3fca5a8 (bug 1818329) --- layout/style/GeckoBindings.h | 4 +- layout/style/nsMediaFeatures.cpp | 8 +- .../test/test_css_parse_error_smoketest.html | 4 +- layout/style/test/test_media_queries.html | 22 +- .../components/style/gecko/media_features.rs | 6 +- servo/components/style/queries/feature.rs | 2 +- .../style/queries/feature_expression.rs | 10 +- .../style/values/specified/resolution.rs | 4 + .../min-width-tables-001.html.ini | 1 + .../mq-dynamic-empty-children.html.ini | 3 + .../mq-negative-range-001.html.ini | 2 + .../mq-negative-range-002.html.ini | 2 + .../mediaqueries/prefers-contrast.html.ini | 2 + .../prefers-reduced-motion.html.ini | 3 + .../mediaqueries/test_media_queries.html.ini | 287 ++++++++++++++++++ ...e-set-invalid-resolution-rendering-2.html} | 8 +- ...age-set-invalid-resolution-rendering.html} | 6 +- 17 files changed, 338 insertions(+), 36 deletions(-) create mode 100644 testing/web-platform/meta/css/mediaqueries/min-width-tables-001.html.ini create mode 100644 testing/web-platform/meta/css/mediaqueries/mq-dynamic-empty-children.html.ini create mode 100644 testing/web-platform/meta/css/mediaqueries/mq-negative-range-001.html.ini create mode 100644 testing/web-platform/meta/css/mediaqueries/mq-negative-range-002.html.ini create mode 100644 testing/web-platform/meta/css/mediaqueries/prefers-reduced-motion.html.ini create mode 100644 testing/web-platform/meta/css/mediaqueries/test_media_queries.html.ini rename testing/web-platform/tests/css/css-images/image-set/{image-set-zero-resolution-rendering-2.html => image-set-invalid-resolution-rendering-2.html} (72%) rename testing/web-platform/tests/css/css-images/image-set/{image-set-zero-resolution-rendering.html => image-set-invalid-resolution-rendering.html} (71%) diff --git a/layout/style/GeckoBindings.h b/layout/style/GeckoBindings.h index f87b235a68ba..8bbbc8766802 100644 --- a/layout/style/GeckoBindings.h +++ b/layout/style/GeckoBindings.h @@ -611,8 +611,8 @@ bool Gecko_MediaFeatures_WindowsNonNativeMenus(const mozilla::dom::Document*); bool Gecko_MediaFeatures_ShouldAvoidNativeTheme(const mozilla::dom::Document*); bool Gecko_MediaFeatures_UseOverlayScrollbars(const mozilla::dom::Document*); -int32_t Gecko_MediaFeatures_GetColorDepth(const mozilla::dom::Document*); -int32_t Gecko_MediaFeatures_GetMonochromeBitsPerPixel( +uint32_t Gecko_MediaFeatures_GetColorDepth(const mozilla::dom::Document*); +uint32_t Gecko_MediaFeatures_GetMonochromeBitsPerPixel( const mozilla::dom::Document*); mozilla::dom::ScreenColorGamut Gecko_MediaFeatures_ColorGamut( const mozilla::dom::Document*); diff --git a/layout/style/nsMediaFeatures.cpp b/layout/style/nsMediaFeatures.cpp index 3e1201e8877d..84511fad824a 100644 --- a/layout/style/nsMediaFeatures.cpp +++ b/layout/style/nsMediaFeatures.cpp @@ -131,12 +131,12 @@ void Gecko_MediaFeatures_GetDeviceSize(const Document* aDocument, *aHeight = size.height; } -int32_t Gecko_MediaFeatures_GetMonochromeBitsPerPixel( +uint32_t Gecko_MediaFeatures_GetMonochromeBitsPerPixel( const Document* aDocument) { // The default bits per pixel for a monochrome device. We could propagate this // further to nsIPrintSettings, but Gecko doesn't actually know this value // from the hardware, so it seems silly to do so. - static constexpr int32_t kDefaultMonochromeBpp = 8; + static constexpr uint32_t kDefaultMonochromeBpp = 8; nsPresContext* pc = aDocument->GetPresContext(); if (!pc) { @@ -162,7 +162,7 @@ dom::ScreenColorGamut Gecko_MediaFeatures_ColorGamut( return colorGamut; } -int32_t Gecko_MediaFeatures_GetColorDepth(const Document* aDocument) { +uint32_t Gecko_MediaFeatures_GetColorDepth(const Document* aDocument) { if (Gecko_MediaFeatures_GetMonochromeBitsPerPixel(aDocument) != 0) { // If we're a monochrome device, then the color depth is zero. return 0; @@ -170,7 +170,7 @@ int32_t Gecko_MediaFeatures_GetColorDepth(const Document* aDocument) { // Use depth of 24 when resisting fingerprinting, or when we're not being // rendered. - int32_t depth = 24; + uint32_t depth = 24; if (!aDocument->ShouldResistFingerprinting()) { if (nsDeviceContext* dx = GetDeviceContextFor(aDocument)) { diff --git a/layout/style/test/test_css_parse_error_smoketest.html b/layout/style/test/test_css_parse_error_smoketest.html index 96d8edce3a29..ecb9fa23ed88 100644 --- a/layout/style/test/test_css_parse_error_smoketest.html +++ b/layout/style/test/test_css_parse_error_smoketest.html @@ -96,10 +96,10 @@ css: "@media (min-width >= 3px) {}", error: "Unexpected operator in media list.", }, { - css: "@media (device-height: three) {}", + css: "@media (device-height: -1px) {}", error: "Found invalid value for media feature.", }, { - css: "@media (min-width: foo) {}", + css: "@media (min-width: -1px) {}", error: "Found invalid value for media feature.", }, { css: "@media (min-resolution: 2) {}", diff --git a/layout/style/test/test_media_queries.html b/layout/style/test/test_media_queries.html index 58c3e35558f2..ed39b41d165f 100644 --- a/layout/style/test/test_media_queries.html +++ b/layout/style/test/test_media_queries.html @@ -248,19 +248,12 @@ function run() { expression_should_be_known(feature + " " + separator + " 1px"); expression_should_be_known(feature + " " + separator + " 0.001mm"); expression_should_be_known(feature + " " + separator + " 100000px"); - expression_should_be_known(feature + " " + separator + " -1px"); if (separator == ":") { expression_should_be_known("min-" + feature + " " + separator + " -0"); expression_should_be_known("max-" + feature + " " + separator + " -0"); - expression_should_be_known("min-" + feature + " " + separator + " -1px"); - expression_should_be_known("max-" + feature + " " + separator + " -1px"); - expression_should_be_known(feature + " " + separator + " -0.00001mm"); - expression_should_be_known(feature + " " + separator + " -100000em"); } else { expression_should_not_be_known("min-" + feature + " " + separator + " -0"); expression_should_not_be_known("max-" + feature + " " + separator + " -0"); - expression_should_not_be_known("min-" + feature + " " + separator + " -1px"); - expression_should_not_be_known("max-" + feature + " " + separator + " -1px"); let multi_range = "0px " + separator + " " + feature + " " + separator + " 100000px" if (separator == "=") { expression_should_not_be_known(multi_range); @@ -273,6 +266,11 @@ function run() { } else if (separator == "<=") { expression_should_not_be_known(feature + " < = 0px"); } + expression_should_not_be_known(feature + " " + separator + " -1px"); + expression_should_not_be_known("min-" + feature + " " + separator + " -1px"); + expression_should_not_be_known("max-" + feature + " " + separator + " -1px"); + expression_should_not_be_known(feature + " " + separator + " -0.00001mm"); + expression_should_not_be_known(feature + " " + separator + " -100000em"); } } @@ -589,8 +587,8 @@ function run() { expression_should_be_known(feature + ": 1"); expression_should_be_known(feature + ": 327"); expression_should_be_known(feature + ": 0"); - expression_should_be_known(feature + ": -1"); expression_should_not_be_known(feature + ": 1.0"); + expression_should_not_be_known(feature + ": -1"); expression_should_not_be_known(feature + ": 1/1"); } @@ -617,10 +615,10 @@ function run() { expression_should_be_known(feature + ": 1.5dppx"); 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_not_be_known(feature + ": 0dpi"); + expression_should_not_be_known(feature + ": -3dpi"); + expression_should_not_be_known(feature + ": 0dppx"); + expression_should_not_be_known(feature + ": 0x"); } // Find the resolution using max-resolution diff --git a/servo/components/style/gecko/media_features.rs b/servo/components/style/gecko/media_features.rs index 35d573460347..7751b8dd1628 100644 --- a/servo/components/style/gecko/media_features.rs +++ b/servo/components/style/gecko/media_features.rs @@ -126,18 +126,18 @@ fn eval_scan(_: &Context, _: Option) -> bool { } /// https://drafts.csswg.org/mediaqueries-4/#color -fn eval_color(context: &Context) -> i32 { +fn eval_color(context: &Context) -> u32 { unsafe { bindings::Gecko_MediaFeatures_GetColorDepth(context.device().document()) } } /// https://drafts.csswg.org/mediaqueries-4/#color-index -fn eval_color_index(_: &Context) -> i32 { +fn eval_color_index(_: &Context) -> u32 { // We should return zero if the device does not use a color lookup table. 0 } /// https://drafts.csswg.org/mediaqueries-4/#monochrome -fn eval_monochrome(context: &Context) -> i32 { +fn eval_monochrome(context: &Context) -> u32 { // For color devices we should return 0. unsafe { bindings::Gecko_MediaFeatures_GetMonochromeBitsPerPixel(context.device().document()) } } diff --git a/servo/components/style/queries/feature.rs b/servo/components/style/queries/feature.rs index 3658cb349985..c2bfee7db419 100644 --- a/servo/components/style/queries/feature.rs +++ b/servo/components/style/queries/feature.rs @@ -36,7 +36,7 @@ pub type KeywordParser = for<'a, 'i, 't> fn( pub enum Evaluator { Length(QueryFeatureGetter), OptionalLength(QueryFeatureGetter>), - Integer(QueryFeatureGetter), + Integer(QueryFeatureGetter), Float(QueryFeatureGetter), BoolInteger(QueryFeatureGetter), /// A non-negative number ratio, such as the one from device-pixel-ratio. diff --git a/servo/components/style/queries/feature_expression.rs b/servo/components/style/queries/feature_expression.rs index 6c7eb8d7f4f4..e7105d10183a 100644 --- a/servo/components/style/queries/feature_expression.rs +++ b/servo/components/style/queries/feature_expression.rs @@ -663,8 +663,8 @@ impl QueryFeatureExpression { pub enum QueryExpressionValue { /// A length. Length(Length), - /// An integer. - Integer(i32), + /// A (non-negative) integer. + Integer(u32), /// A floating point value. Float(CSSFloat), /// A boolean value, specified as an integer (i.e., either 0 or 1). @@ -705,12 +705,12 @@ impl QueryExpressionValue { ) -> Result> { Ok(match for_feature.evaluator { Evaluator::OptionalLength(..) | Evaluator::Length(..) => { - let length = Length::parse(context, input)?; + let length = Length::parse_non_negative(context, input)?; QueryExpressionValue::Length(length) }, Evaluator::Integer(..) => { - let integer = Integer::parse(context, input)?; - QueryExpressionValue::Integer(integer.value()) + let integer = Integer::parse_non_negative(context, input)?; + QueryExpressionValue::Integer(integer.value() as u32) }, Evaluator::BoolInteger(..) => { let integer = Integer::parse_non_negative(context, input)?; diff --git a/servo/components/style/values/specified/resolution.rs b/servo/components/style/values/specified/resolution.rs index bc9df592cb36..5ed642f98183 100644 --- a/servo/components/style/values/specified/resolution.rs +++ b/servo/components/style/values/specified/resolution.rs @@ -60,6 +60,10 @@ impl Parse for Resolution { ref t => return Err(location.new_unexpected_token_error(t.clone())), }; + if value <= 0. { + return Err(location.new_custom_error(StyleParseErrorKind::UnspecifiedError)); + } + match_ignore_ascii_case! { &unit, "dpi" => Ok(Resolution::Dpi(value)), "dppx" => Ok(Resolution::Dppx(value)), diff --git a/testing/web-platform/meta/css/mediaqueries/min-width-tables-001.html.ini b/testing/web-platform/meta/css/mediaqueries/min-width-tables-001.html.ini new file mode 100644 index 000000000000..abaa6f94f90a --- /dev/null +++ b/testing/web-platform/meta/css/mediaqueries/min-width-tables-001.html.ini @@ -0,0 +1 @@ +[min-width-tables-001.html] diff --git a/testing/web-platform/meta/css/mediaqueries/mq-dynamic-empty-children.html.ini b/testing/web-platform/meta/css/mediaqueries/mq-dynamic-empty-children.html.ini new file mode 100644 index 000000000000..3527e23fb7b7 --- /dev/null +++ b/testing/web-platform/meta/css/mediaqueries/mq-dynamic-empty-children.html.ini @@ -0,0 +1,3 @@ +[mq-dynamic-empty-children.html] + expected: + if (os == "android") and fission: [TIMEOUT, OK] diff --git a/testing/web-platform/meta/css/mediaqueries/mq-negative-range-001.html.ini b/testing/web-platform/meta/css/mediaqueries/mq-negative-range-001.html.ini new file mode 100644 index 000000000000..9da03462e6ac --- /dev/null +++ b/testing/web-platform/meta/css/mediaqueries/mq-negative-range-001.html.ini @@ -0,0 +1,2 @@ +[mq-negative-range-001.html] + expected: FAIL diff --git a/testing/web-platform/meta/css/mediaqueries/mq-negative-range-002.html.ini b/testing/web-platform/meta/css/mediaqueries/mq-negative-range-002.html.ini new file mode 100644 index 000000000000..161d3c837340 --- /dev/null +++ b/testing/web-platform/meta/css/mediaqueries/mq-negative-range-002.html.ini @@ -0,0 +1,2 @@ +[mq-negative-range-002.html] + expected: FAIL diff --git a/testing/web-platform/meta/css/mediaqueries/prefers-contrast.html.ini b/testing/web-platform/meta/css/mediaqueries/prefers-contrast.html.ini index 2a805c0e37b7..139e6fa6e1f2 100644 --- a/testing/web-platform/meta/css/mediaqueries/prefers-contrast.html.ini +++ b/testing/web-platform/meta/css/mediaqueries/prefers-contrast.html.ini @@ -1,2 +1,4 @@ [prefers-contrast.html] prefs: [layout.css.prefers-contrast.enabled:true] + expected: + if (os == "android") and fission: [OK, TIMEOUT] diff --git a/testing/web-platform/meta/css/mediaqueries/prefers-reduced-motion.html.ini b/testing/web-platform/meta/css/mediaqueries/prefers-reduced-motion.html.ini new file mode 100644 index 000000000000..6127ab84e23f --- /dev/null +++ b/testing/web-platform/meta/css/mediaqueries/prefers-reduced-motion.html.ini @@ -0,0 +1,3 @@ +[prefers-reduced-motion.html] + expected: + if (os == "android") and fission: [OK, TIMEOUT] diff --git a/testing/web-platform/meta/css/mediaqueries/test_media_queries.html.ini b/testing/web-platform/meta/css/mediaqueries/test_media_queries.html.ini new file mode 100644 index 000000000000..5170f6734c2f --- /dev/null +++ b/testing/web-platform/meta/css/mediaqueries/test_media_queries.html.ini @@ -0,0 +1,287 @@ +[test_media_queries.html] + expected: + if (os == "android") and fission: [OK, TIMEOUT] + [expression_should_be_known: width : -1px] + expected: FAIL + + [expression_should_be_known: min-width : -1px] + expected: FAIL + + [expression_should_be_known: max-width : -1px] + expected: FAIL + + [expression_should_be_known: width : -0.00001mm] + expected: FAIL + + [expression_should_be_known: width : -100000em] + expected: FAIL + + [expression_should_be_known: width > -1px] + expected: FAIL + + [expression_should_be_known: width > -0.00001mm] + expected: FAIL + + [expression_should_be_known: width > -100000em] + expected: FAIL + + [expression_should_be_known: width >= -1px] + expected: FAIL + + [expression_should_be_known: width >= -0.00001mm] + expected: FAIL + + [expression_should_be_known: width >= -100000em] + expected: FAIL + + [expression_should_be_known: width = -1px] + expected: FAIL + + [expression_should_be_known: width = -0.00001mm] + expected: FAIL + + [expression_should_be_known: width = -100000em] + expected: FAIL + + [expression_should_be_known: width <= -1px] + expected: FAIL + + [expression_should_be_known: width <= -0.00001mm] + expected: FAIL + + [expression_should_be_known: width <= -100000em] + expected: FAIL + + [expression_should_be_known: width < -1px] + expected: FAIL + + [expression_should_be_known: width < -0.00001mm] + expected: FAIL + + [expression_should_be_known: width < -100000em] + expected: FAIL + + [expression_should_be_known: height : -1px] + expected: FAIL + + [expression_should_be_known: min-height : -1px] + expected: FAIL + + [expression_should_be_known: max-height : -1px] + expected: FAIL + + [expression_should_be_known: height : -0.00001mm] + expected: FAIL + + [expression_should_be_known: height : -100000em] + expected: FAIL + + [expression_should_be_known: height > -1px] + expected: FAIL + + [expression_should_be_known: height > -0.00001mm] + expected: FAIL + + [expression_should_be_known: height > -100000em] + expected: FAIL + + [expression_should_be_known: height >= -1px] + expected: FAIL + + [expression_should_be_known: height >= -0.00001mm] + expected: FAIL + + [expression_should_be_known: height >= -100000em] + expected: FAIL + + [expression_should_be_known: height = -1px] + expected: FAIL + + [expression_should_be_known: height = -0.00001mm] + expected: FAIL + + [expression_should_be_known: height = -100000em] + expected: FAIL + + [expression_should_be_known: height <= -1px] + expected: FAIL + + [expression_should_be_known: height <= -0.00001mm] + expected: FAIL + + [expression_should_be_known: height <= -100000em] + expected: FAIL + + [expression_should_be_known: height < -1px] + expected: FAIL + + [expression_should_be_known: height < -0.00001mm] + expected: FAIL + + [expression_should_be_known: height < -100000em] + expected: FAIL + + [expression_should_be_known: device-width : -1px] + expected: FAIL + + [expression_should_be_known: min-device-width : -1px] + expected: FAIL + + [expression_should_be_known: max-device-width : -1px] + expected: FAIL + + [expression_should_be_known: device-width : -0.00001mm] + expected: FAIL + + [expression_should_be_known: device-width : -100000em] + expected: FAIL + + [expression_should_be_known: device-width > -1px] + expected: FAIL + + [expression_should_be_known: device-width > -0.00001mm] + expected: FAIL + + [expression_should_be_known: device-width > -100000em] + expected: FAIL + + [expression_should_be_known: device-width >= -1px] + expected: FAIL + + [expression_should_be_known: device-width >= -0.00001mm] + expected: FAIL + + [expression_should_be_known: device-width >= -100000em] + expected: FAIL + + [expression_should_be_known: device-width = -1px] + expected: FAIL + + [expression_should_be_known: device-width = -0.00001mm] + expected: FAIL + + [expression_should_be_known: device-width = -100000em] + expected: FAIL + + [expression_should_be_known: device-width <= -1px] + expected: FAIL + + [expression_should_be_known: device-width <= -0.00001mm] + expected: FAIL + + [expression_should_be_known: device-width <= -100000em] + expected: FAIL + + [expression_should_be_known: device-width < -1px] + expected: FAIL + + [expression_should_be_known: device-width < -0.00001mm] + expected: FAIL + + [expression_should_be_known: device-width < -100000em] + expected: FAIL + + [expression_should_be_known: device-height : -1px] + expected: FAIL + + [expression_should_be_known: min-device-height : -1px] + expected: FAIL + + [expression_should_be_known: max-device-height : -1px] + expected: FAIL + + [expression_should_be_known: device-height : -0.00001mm] + expected: FAIL + + [expression_should_be_known: device-height : -100000em] + expected: FAIL + + [expression_should_be_known: device-height > -1px] + expected: FAIL + + [expression_should_be_known: device-height > -0.00001mm] + expected: FAIL + + [expression_should_be_known: device-height > -100000em] + expected: FAIL + + [expression_should_be_known: device-height >= -1px] + expected: FAIL + + [expression_should_be_known: device-height >= -0.00001mm] + expected: FAIL + + [expression_should_be_known: device-height >= -100000em] + expected: FAIL + + [expression_should_be_known: device-height = -1px] + expected: FAIL + + [expression_should_be_known: device-height = -0.00001mm] + expected: FAIL + + [expression_should_be_known: device-height = -100000em] + expected: FAIL + + [expression_should_be_known: device-height <= -1px] + expected: FAIL + + [expression_should_be_known: device-height <= -0.00001mm] + expected: FAIL + + [expression_should_be_known: device-height <= -100000em] + expected: FAIL + + [expression_should_be_known: device-height < -1px] + expected: FAIL + + [expression_should_be_known: device-height < -0.00001mm] + expected: FAIL + + [expression_should_be_known: device-height < -100000em] + expected: FAIL + + [expression_should_be_known: color: -1] + expected: FAIL + + [expression_should_be_known: min-monochrome: -1] + expected: FAIL + + [expression_should_be_known: max-color-index: -1] + expected: FAIL + + [expression_should_be_known: resolution: 0dpi] + expected: FAIL + + [expression_should_be_known: resolution: -3dpi] + expected: FAIL + + [expression_should_be_known: resolution: 0dppx] + expected: FAIL + + [expression_should_be_known: resolution: 0x] + expected: FAIL + + [expression_should_be_known: min-resolution: 0dpi] + expected: FAIL + + [expression_should_be_known: min-resolution: -3dpi] + expected: FAIL + + [expression_should_be_known: min-resolution: 0dppx] + expected: FAIL + + [expression_should_be_known: min-resolution: 0x] + expected: FAIL + + [expression_should_be_known: max-resolution: 0dpi] + expected: FAIL + + [expression_should_be_known: max-resolution: -3dpi] + expected: FAIL + + [expression_should_be_known: max-resolution: 0dppx] + expected: FAIL + + [expression_should_be_known: max-resolution: 0x] + expected: FAIL diff --git a/testing/web-platform/tests/css/css-images/image-set/image-set-zero-resolution-rendering-2.html b/testing/web-platform/tests/css/css-images/image-set/image-set-invalid-resolution-rendering-2.html similarity index 72% rename from testing/web-platform/tests/css/css-images/image-set/image-set-zero-resolution-rendering-2.html rename to testing/web-platform/tests/css/css-images/image-set/image-set-invalid-resolution-rendering-2.html index 5c835a3fbcc8..c8b560b7fcb3 100644 --- a/testing/web-platform/tests/css/css-images/image-set/image-set-zero-resolution-rendering-2.html +++ b/testing/web-platform/tests/css/css-images/image-set/image-set-invalid-resolution-rendering-2.html @@ -4,13 +4,13 @@ - +