From 0c04bd66764dfbe8f6da515d09b076683c61e93c Mon Sep 17 00:00:00 2001 From: Benjamin Bjerken Date: Wed, 16 Oct 2024 16:31:05 +0200 Subject: [PATCH] LibWeb: Add SVGImageElement load and error events This resolves all WPT timeouts in html/canvas/element/manual/imagebitmap We can now run an additional 6 tests and 126 subtests :) This also adds regression tests for this behavior. --- .../SVGImageElement-load-and-error-events.txt | 3 ++ ...SVGImageElement-load-and-error-events.html | 41 +++++++++++++++++++ .../Libraries/LibWeb/SVG/SVGImageElement.cpp | 5 +++ 3 files changed, 49 insertions(+) create mode 100644 Tests/LibWeb/Text/expected/HTML/SVGImageElement-load-and-error-events.txt create mode 100644 Tests/LibWeb/Text/input/HTML/SVGImageElement-load-and-error-events.html diff --git a/Tests/LibWeb/Text/expected/HTML/SVGImageElement-load-and-error-events.txt b/Tests/LibWeb/Text/expected/HTML/SVGImageElement-load-and-error-events.txt new file mode 100644 index 00000000000..3752f8bc397 --- /dev/null +++ b/Tests/LibWeb/Text/expected/HTML/SVGImageElement-load-and-error-events.txt @@ -0,0 +1,3 @@ +SUCCESS: "data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" +FAIL: "file:///i-do-not-exist" +FAIL: "https://something.invalid" diff --git a/Tests/LibWeb/Text/input/HTML/SVGImageElement-load-and-error-events.html b/Tests/LibWeb/Text/input/HTML/SVGImageElement-load-and-error-events.html new file mode 100644 index 00000000000..db7a9e6182d --- /dev/null +++ b/Tests/LibWeb/Text/input/HTML/SVGImageElement-load-and-error-events.html @@ -0,0 +1,41 @@ + + + diff --git a/Userland/Libraries/LibWeb/SVG/SVGImageElement.cpp b/Userland/Libraries/LibWeb/SVG/SVGImageElement.cpp index a0e2e726784..a684d51708c 100644 --- a/Userland/Libraries/LibWeb/SVG/SVGImageElement.cpp +++ b/Userland/Libraries/LibWeb/SVG/SVGImageElement.cpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -161,9 +162,13 @@ void SVGImageElement::fetch_the_document(URL::URL const& url) } set_needs_style_update(true); document().set_needs_layout(); + + dispatch_event(DOM::Event::create(realm(), HTML::EventNames::load)); }, [this] { m_load_event_delayer.clear(); + + dispatch_event(DOM::Event::create(realm(), HTML::EventNames::error)); }); if (m_resource_request->needs_fetching()) {