diff --git a/Tests/LibWeb/Layout/expected/picture-source-media-query.txt b/Tests/LibWeb/Layout/expected/picture-source-media-query.txt new file mode 100644 index 00000000000..7049945dd6d --- /dev/null +++ b/Tests/LibWeb/Layout/expected/picture-source-media-query.txt @@ -0,0 +1,13 @@ +Viewport <#document> at (0,0) content-size 800x600 children: not-inline + BlockContainer at (0,0) content-size 800x416 [BFC] children: not-inline + BlockContainer at (8,8) content-size 784x400 children: inline + line 0 width: 400, height: 400, bottom: 400, baseline: 400 + frag 0 from ImageBox start: 0, length: 0, rect: [8,8 400x400] + TextNode <#text> + InlineNode + TextNode <#text> + InlineNode + TextNode <#text> + ImageBox at (8,8) content-size 400x400 children: not-inline + TextNode <#text> + TextNode <#text> diff --git a/Tests/LibWeb/Layout/input/120.png b/Tests/LibWeb/Layout/input/120.png new file mode 100644 index 00000000000..c021943f7fa Binary files /dev/null and b/Tests/LibWeb/Layout/input/120.png differ diff --git a/Tests/LibWeb/Layout/input/400.png b/Tests/LibWeb/Layout/input/400.png new file mode 100644 index 00000000000..adbdc225610 Binary files /dev/null and b/Tests/LibWeb/Layout/input/400.png differ diff --git a/Tests/LibWeb/Layout/input/picture-source-media-query.html b/Tests/LibWeb/Layout/input/picture-source-media-query.html new file mode 100644 index 00000000000..fbc76603377 --- /dev/null +++ b/Tests/LibWeb/Layout/input/picture-source-media-query.html @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Userland/Libraries/LibWeb/HTML/HTMLImageElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLImageElement.cpp index b4961372127..363cd056876 100644 --- a/Userland/Libraries/LibWeb/HTML/HTMLImageElement.cpp +++ b/Userland/Libraries/LibWeb/HTML/HTMLImageElement.cpp @@ -741,7 +741,14 @@ static void update_the_source_set(DOM::Element& element) if (source_set.is_empty()) continue; - // FIXME: 6. If child has a media attribute, and its value does not match the environment, continue to the next child. + // 6. If child has a media attribute, and its value does not match the environment, continue to the next child. + if (child->has_attribute(HTML::AttributeNames::media)) { + auto media_query = parse_media_query(CSS::Parser::ParsingContext { element.document() }, + child->attribute(HTML::AttributeNames::media)); + if (!media_query || !media_query->evaluate(element.document().window())) { + continue; + } + } // 7. Parse child's sizes attribute, and let source set's source size be the returned value. source_set.m_source_size = parse_a_sizes_attribute(element.document(), child->attribute(HTML::AttributeNames::sizes));