diff --git a/src/browser/tests/event/report_error.html b/src/browser/tests/event/report_error.html new file mode 100644 index 00000000..353dc29e --- /dev/null +++ b/src/browser/tests/event/report_error.html @@ -0,0 +1,38 @@ + + + + + + + + diff --git a/src/browser/webapi/Window.zig b/src/browser/webapi/Window.zig index 099cad65..1d12677c 100644 --- a/src/browser/webapi/Window.zig +++ b/src/browser/webapi/Window.zig @@ -343,7 +343,11 @@ pub fn reportError(self: *Window, err: js.Value, page: *Page) !void { const event = error_event.asEvent(); event._prevent_default = prevent_default; - try page._event_manager.dispatch(self.asEventTarget(), event); + // Pass null as handler: onerror was already called above with 5 args. + // We still dispatch so that addEventListener('error', ...) listeners fire. + try page._event_manager.dispatchDirect(self.asEventTarget(), event, null, .{ + .context = "window.reportError", + }); if (comptime builtin.is_test == false) { if (!event._prevent_default) { @@ -874,3 +878,7 @@ test "WebApi: Window" { test "WebApi: Window scroll" { try testing.htmlRunner("window_scroll.html", .{}); } + +test "WebApi: Window.onerror" { + try testing.htmlRunner("event/report_error.html", .{}); +}