diff --git a/Tests/LibWeb/Layout/expected/media-query-empty.txt b/Tests/LibWeb/Layout/expected/media-query-empty.txt new file mode 100644 index 0000000000..faed14c1aa --- /dev/null +++ b/Tests/LibWeb/Layout/expected/media-query-empty.txt @@ -0,0 +1,26 @@ +Viewport <#document> at (0,0) content-size 800x600 children: not-inline + BlockContainer at (0,0) content-size 800x600 [BFC] children: not-inline + BlockContainer at (8,8) content-size 784x34 children: not-inline + BlockContainer at (8,8) content-size 784x17 children: inline + frag 0 from TextNode start: 0, length: 5, rect: [8,8 42.140625x17] baseline: 13.296875 + "First" + TextNode <#text> + BlockContainer <(anonymous)> at (8,25) content-size 784x0 children: inline + TextNode <#text> + BlockContainer at (8,25) content-size 784x17 children: inline + frag 0 from TextNode start: 0, length: 6, rect: [8,25 57.40625x17] baseline: 13.296875 + "Second" + TextNode <#text> + BlockContainer <(anonymous)> at (8,42) content-size 784x0 children: inline + TextNode <#text> + TextNode <#text> + +ViewportPaintable (Viewport<#document>) [0,0 800x600] + PaintableWithLines (BlockContainer) [0,0 800x600] + PaintableWithLines (BlockContainer) [8,8 784x34] + PaintableWithLines (BlockContainer
.first) [8,8 784x17] + TextPaintable (TextNode<#text>) + PaintableWithLines (BlockContainer(anonymous)) [8,25 784x0] + PaintableWithLines (BlockContainer
.second) [8,25 784x17] + TextPaintable (TextNode<#text>) + PaintableWithLines (BlockContainer(anonymous)) [8,42 784x0] diff --git a/Tests/LibWeb/Layout/input/media-query-empty.html b/Tests/LibWeb/Layout/input/media-query-empty.html new file mode 100644 index 0000000000..54924c9ee9 --- /dev/null +++ b/Tests/LibWeb/Layout/input/media-query-empty.html @@ -0,0 +1,15 @@ + +
First
+
Second
+
Invalid
diff --git a/Userland/Libraries/LibWeb/CSS/MediaList.cpp b/Userland/Libraries/LibWeb/CSS/MediaList.cpp index 16db4ab544..c9446d99c5 100644 --- a/Userland/Libraries/LibWeb/CSS/MediaList.cpp +++ b/Userland/Libraries/LibWeb/CSS/MediaList.cpp @@ -100,9 +100,8 @@ bool MediaList::evaluate(HTML::Window const& window) bool MediaList::matches() const { - if (m_media.is_empty()) { + if (m_media.is_empty()) return true; - } for (auto& media : m_media) { if (media->matches()) diff --git a/Userland/Libraries/LibWeb/CSS/MediaQueryList.cpp b/Userland/Libraries/LibWeb/CSS/MediaQueryList.cpp index cb8b9de37d..fc774916a0 100644 --- a/Userland/Libraries/LibWeb/CSS/MediaQueryList.cpp +++ b/Userland/Libraries/LibWeb/CSS/MediaQueryList.cpp @@ -51,10 +51,14 @@ String MediaQueryList::media() const // https://drafts.csswg.org/cssom-view/#dom-mediaquerylist-matches bool MediaQueryList::matches() const { + if (m_media.is_empty()) + return true; + for (auto& media : m_media) { if (media->matches()) return true; } + return false; } @@ -64,6 +68,9 @@ bool MediaQueryList::evaluate() if (!window) return false; + if (m_media.is_empty()) + return true; + bool now_matches = false; for (auto& media : m_media) { now_matches = now_matches || media->evaluate(*window); diff --git a/Userland/Libraries/LibWeb/CSS/Parser/MediaParsing.cpp b/Userland/Libraries/LibWeb/CSS/Parser/MediaParsing.cpp index 2000409034..3234912903 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/MediaParsing.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/MediaParsing.cpp @@ -27,6 +27,12 @@ Vector> Parser::parse_a_media_query_list(TokenStream> media_queries; @@ -616,11 +622,6 @@ Optional Parser::parse_media_feature_value(MediaFeatureID med JS::GCPtr Parser::convert_to_media_rule(Rule& rule) { - if (rule.prelude().is_empty()) { - dbgln_if(CSS_PARSER_DEBUG, "Failed to parse @media rule: Empty prelude."); - return {}; - } - if (!rule.block()) { dbgln_if(CSS_PARSER_DEBUG, "Failed to parse @media rule: No block."); return {}; @@ -628,8 +629,6 @@ JS::GCPtr Parser::convert_to_media_rule(Rule& rule) auto media_query_tokens = TokenStream { rule.prelude() }; auto media_query_list = parse_a_media_query_list(media_query_tokens); - if (media_query_list.is_empty()) - return {}; auto child_tokens = TokenStream { rule.block()->values() }; auto parser_rules = parse_a_list_of_rules(child_tokens);