diff --git a/Libraries/LibWeb/HTML/HTMLCanvasElement.cpp b/Libraries/LibWeb/HTML/HTMLCanvasElement.cpp
index 0b3a630d437..0e9fc291561 100644
--- a/Libraries/LibWeb/HTML/HTMLCanvasElement.cpp
+++ b/Libraries/LibWeb/HTML/HTMLCanvasElement.cpp
@@ -375,8 +375,8 @@ WebIDL::ExceptionOr HTMLCanvasElement::to_blob(GC::Refbuffer, TRY_OR_THROW_OOM(vm(), String::from_utf8(file_result->mime_type)));
- // 2. Invoke callback with « result ».
- TRY(WebIDL::invoke_callback(*callback, {}, move(blob_result)));
+ // 2. Invoke callback with « result » and "report".
+ TRY(WebIDL::invoke_callback(*callback, {}, WebIDL::ExceptionBehavior::Report, move(blob_result)));
return {};
});
if (maybe_error.is_throw_completion())
diff --git a/Libraries/LibWeb/HTML/UniversalGlobalScope.cpp b/Libraries/LibWeb/HTML/UniversalGlobalScope.cpp
index a655e333a21..3199611b7fe 100644
--- a/Libraries/LibWeb/HTML/UniversalGlobalScope.cpp
+++ b/Libraries/LibWeb/HTML/UniversalGlobalScope.cpp
@@ -84,11 +84,9 @@ void UniversalGlobalScopeMixin::queue_microtask(WebIDL::CallbackType& callback)
if (is(this_impl()))
document = &static_cast(this_impl()).associated_document();
- // The queueMicrotask(callback) method must queue a microtask to invoke callback, and if callback throws an exception, report the exception.
- HTML::queue_a_microtask(document, GC::create_function(realm.heap(), [&callback, &realm] {
- auto result = WebIDL::invoke_callback(callback, {});
- if (result.is_error())
- HTML::report_exception(result, realm);
+ // The queueMicrotask(callback) method must queue a microtask to invoke callback with « » and "report".
+ HTML::queue_a_microtask(document, GC::create_function(realm.heap(), [&callback] {
+ (void)WebIDL::invoke_callback(callback, {}, WebIDL::ExceptionBehavior::Report);
}));
}
diff --git a/Tests/LibWeb/Text/expected/wpt-import/html/semantics/embedded-content/the-canvas-element/toBlob-cross-realm-callback-report-exception.txt b/Tests/LibWeb/Text/expected/wpt-import/html/semantics/embedded-content/the-canvas-element/toBlob-cross-realm-callback-report-exception.txt
new file mode 100644
index 00000000000..b03164168bb
--- /dev/null
+++ b/Tests/LibWeb/Text/expected/wpt-import/html/semantics/embedded-content/the-canvas-element/toBlob-cross-realm-callback-report-exception.txt
@@ -0,0 +1,6 @@
+Harness status: OK
+
+Found 1 tests
+
+1 Pass
+Pass toBlob() reports the exception from its callback in the callback's global object
\ No newline at end of file
diff --git a/Tests/LibWeb/Text/expected/wpt-import/html/webappapis/microtask-queuing/queue-microtask-cross-realm-callback-report-exception.txt b/Tests/LibWeb/Text/expected/wpt-import/html/webappapis/microtask-queuing/queue-microtask-cross-realm-callback-report-exception.txt
new file mode 100644
index 00000000000..1519c3376f6
--- /dev/null
+++ b/Tests/LibWeb/Text/expected/wpt-import/html/webappapis/microtask-queuing/queue-microtask-cross-realm-callback-report-exception.txt
@@ -0,0 +1,6 @@
+Harness status: OK
+
+Found 1 tests
+
+1 Pass
+Pass queueMicrotask() reports the exception from its callback in the callback's global object
\ No newline at end of file
diff --git a/Tests/LibWeb/Text/input/wpt-import/html/semantics/embedded-content/the-canvas-element/toBlob-cross-realm-callback-report-exception.html b/Tests/LibWeb/Text/input/wpt-import/html/semantics/embedded-content/the-canvas-element/toBlob-cross-realm-callback-report-exception.html
new file mode 100644
index 00000000000..9e7faad6ff9
--- /dev/null
+++ b/Tests/LibWeb/Text/input/wpt-import/html/semantics/embedded-content/the-canvas-element/toBlob-cross-realm-callback-report-exception.html
@@ -0,0 +1,29 @@
+
+
+toBlob() reports the exception from its callback in the callback's global object
+
+
+
+
+
+
diff --git a/Tests/LibWeb/Text/input/wpt-import/html/webappapis/microtask-queuing/queue-microtask-cross-realm-callback-report-exception.html b/Tests/LibWeb/Text/input/wpt-import/html/webappapis/microtask-queuing/queue-microtask-cross-realm-callback-report-exception.html
new file mode 100644
index 00000000000..9c1113eab8a
--- /dev/null
+++ b/Tests/LibWeb/Text/input/wpt-import/html/webappapis/microtask-queuing/queue-microtask-cross-realm-callback-report-exception.html
@@ -0,0 +1,28 @@
+
+
+queueMicrotask() reports the exception from its callback in the callback's global object
+
+
+
+
+
+