1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-06-28 22:32:07 +00:00

LibWeb: Make HTMLImageElement loads delay the document load event

This is something we're supposed to do according to the HTML spec.
Note that image loading is currently completely ad-hoc, and this just
adds a simple DocumentLoadEventDelayer to the existing implementation.

This will allow us to use images in layout tests, which rely on the
document load event firing at a predictable time.
This commit is contained in:
Andreas Kling 2023-04-01 15:15:23 +02:00
parent 3709d11212
commit 2413de7e10
2 changed files with 8 additions and 1 deletions

View file

@ -28,6 +28,7 @@ HTMLImageElement::HTMLImageElement(DOM::Document& document, DOM::QualifiedName q
this->document().set_needs_layout();
queue_an_element_task(HTML::Task::Source::DOMManipulation, [this] {
dispatch_event(DOM::Event::create(this->realm(), EventNames::load).release_value_but_fixme_should_propagate_errors());
m_load_event_delayer.clear();
});
};
@ -37,6 +38,7 @@ HTMLImageElement::HTMLImageElement(DOM::Document& document, DOM::QualifiedName q
this->document().set_needs_layout();
queue_an_element_task(HTML::Task::Source::DOMManipulation, [this] {
dispatch_event(DOM::Event::create(this->realm(), EventNames::error).release_value_but_fixme_should_propagate_errors());
m_load_event_delayer.clear();
});
};
@ -83,8 +85,10 @@ void HTMLImageElement::parse_attribute(DeprecatedFlyString const& name, Deprecat
{
HTMLElement::parse_attribute(name, value);
if (name == HTML::AttributeNames::src && !value.is_empty())
if (name == HTML::AttributeNames::src && !value.is_empty()) {
m_image_loader.load(document().parse_url(value));
m_load_event_delayer.emplace(document());
}
if (name == HTML::AttributeNames::alt) {
if (layout_node())