From 338282f74d3f9a2421db821f673be32c4e7eed38 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Fri, 16 May 2025 20:15:07 +0100 Subject: [PATCH] LibWeb/CSS: Treat x resolution unit separately from dppx Tests show that we need to preserve whether x or dppx units were used, so the simplest way is to treat them separately. --- Libraries/LibWeb/CSS/Resolution.cpp | 12 ++++++++---- Libraries/LibWeb/CSS/Resolution.h | 1 + .../css/mediaqueries/match-media-parsing.txt | 10 +++++----- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/Libraries/LibWeb/CSS/Resolution.cpp b/Libraries/LibWeb/CSS/Resolution.cpp index 4a16d554994..17ee98db2fb 100644 --- a/Libraries/LibWeb/CSS/Resolution.cpp +++ b/Libraries/LibWeb/CSS/Resolution.cpp @@ -35,6 +35,7 @@ double Resolution::to_dots_per_pixel() const case Type::Dpcm: return m_value / (96.0 / 2.54); // 1cm = 96px/2.54 case Type::Dppx: + case Type::X: return m_value; } VERIFY_NOT_REACHED(); @@ -49,19 +50,22 @@ StringView Resolution::unit_name() const return "dpcm"sv; case Type::Dppx: return "dppx"sv; + case Type::X: + return "x"sv; } VERIFY_NOT_REACHED(); } Optional Resolution::unit_from_name(StringView name) { - if (name.equals_ignoring_ascii_case("dpi"sv)) { + if (name.equals_ignoring_ascii_case("dpi"sv)) return Type::Dpi; - } else if (name.equals_ignoring_ascii_case("dpcm"sv)) { + if (name.equals_ignoring_ascii_case("dpcm"sv)) return Type::Dpcm; - } else if (name.equals_ignoring_ascii_case("dppx"sv) || name.equals_ignoring_ascii_case("x"sv)) { + if (name.equals_ignoring_ascii_case("dppx"sv)) return Type::Dppx; - } + if (name.equals_ignoring_ascii_case("x"sv)) + return Type::X; return {}; } diff --git a/Libraries/LibWeb/CSS/Resolution.h b/Libraries/LibWeb/CSS/Resolution.h index f62012b6107..ef80fd8b5c7 100644 --- a/Libraries/LibWeb/CSS/Resolution.h +++ b/Libraries/LibWeb/CSS/Resolution.h @@ -17,6 +17,7 @@ public: Dpi, Dpcm, Dppx, + X, }; static Optional unit_from_name(StringView); diff --git a/Tests/LibWeb/Text/expected/wpt-import/css/mediaqueries/match-media-parsing.txt b/Tests/LibWeb/Text/expected/wpt-import/css/mediaqueries/match-media-parsing.txt index 9d4b9a5453d..066feea908f 100644 --- a/Tests/LibWeb/Text/expected/wpt-import/css/mediaqueries/match-media-parsing.txt +++ b/Tests/LibWeb/Text/expected/wpt-import/css/mediaqueries/match-media-parsing.txt @@ -2,8 +2,8 @@ Harness status: OK Found 34 tests -27 Pass -7 Fail +30 Pass +4 Fail Pass Test parsing '' with matchMedia Pass Test parsing ' ' with matchMedia Pass Test parsing 'all' with matchMedia @@ -25,11 +25,11 @@ Pass Test parsing ' , ' with matchMedia Fail Test parsing ',,' with matchMedia Pass Test parsing ' , , ' with matchMedia Fail Test parsing ' foo,' with matchMedia -Fail Test parsing '(min-resolution: 1x)' with matchMedia +Pass Test parsing '(min-resolution: 1x)' with matchMedia Pass Test parsing '(min-resolution: calc(1x))' with matchMedia -Fail Test parsing '(resolution: 2x)' with matchMedia +Pass Test parsing '(resolution: 2x)' with matchMedia Pass Test parsing '(resolution: calc(2x))' with matchMedia -Fail Test parsing '(max-resolution: 7x)' with matchMedia +Pass Test parsing '(max-resolution: 7x)' with matchMedia Pass Test parsing '(max-resolution: calc(7x))' with matchMedia Pass Test parsing '(resolution: 2dppx)' with matchMedia Pass Test parsing '(resolution: 600dpi)' with matchMedia