diff --git a/Userland/Libraries/LibWeb/HTML/HTMLImageElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLImageElement.cpp
index d894147746..c1ee553898 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLImageElement.cpp
+++ b/Userland/Libraries/LibWeb/HTML/HTMLImageElement.cpp
@@ -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())
diff --git a/Userland/Libraries/LibWeb/HTML/HTMLImageElement.h b/Userland/Libraries/LibWeb/HTML/HTMLImageElement.h
index b7a3d8f33c..cb67feb645 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLImageElement.h
+++ b/Userland/Libraries/LibWeb/HTML/HTMLImageElement.h
@@ -9,6 +9,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -54,6 +55,8 @@ private:
virtual JS::GCPtr create_layout_node(NonnullRefPtr) override;
ImageLoader m_image_loader;
+
+ Optional m_load_event_delayer;
};
}