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; }; }