LibWeb: Bring parse_as_sizes_attribute() up to date with the spec

The following spec algorithms had changed since we implemented them:
- "parse a sizes attribute"
- "update the source set"
- "create a source set"

This commit brings them up to date, as well as adding some additional
logging when parsing the sizes attribute fails in some way.
This commit is contained in:
Sam Atkins 2024-09-11 16:41:18 +01:00 committed by Andreas Kling
parent 99718653e2
commit 2a0f6fd23e
Notes: github-actions[bot] 2024-09-12 05:40:06 +00:00
5 changed files with 80 additions and 33 deletions

View file

@ -990,7 +990,12 @@ static void update_the_source_set(DOM::Element& element)
});
}
// 4. For each child in elements:
// 4. Let img be el if el is an img element, otherwise null.
HTMLImageElement* img = nullptr;
if (is<HTMLImageElement>(element))
img = static_cast<HTMLImageElement*>(&element);
// 5. For each child in elements:
for (auto child : elements) {
// 1. If child is el:
if (child == &element) {
@ -1039,11 +1044,13 @@ static void update_the_source_set(DOM::Element& element)
default_source = href_value.release_value();
}
// 10. Let el's source set be the result of creating a source set given default source, srcset, and sizes.
// 10. Let el's source set be the result of creating a source set given default source, srcset, sizes, and img.
if (is<HTMLImageElement>(element))
static_cast<HTMLImageElement&>(element).set_source_set(SourceSet::create(element, default_source, srcset, sizes));
static_cast<HTMLImageElement&>(element).set_source_set(SourceSet::create(element, default_source, srcset, sizes, img));
else if (is<HTMLLinkElement>(element))
TODO();
// 11. Return.
return;
}
// 2. If child is not a source element, then continue.
@ -1070,8 +1077,8 @@ static void update_the_source_set(DOM::Element& element)
}
}
// 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->get_attribute_value(HTML::AttributeNames::sizes));
// 7. Parse child's sizes attribute with img, and let source set's source size be the returned value.
source_set.m_source_size = parse_a_sizes_attribute(element, child->get_attribute_value(HTML::AttributeNames::sizes), img);
// 8. If child has a type attribute, and its value is an unknown or unsupported MIME type, continue to the next child.
if (child->has_attribute(HTML::AttributeNames::type)) {