mirror of
https://github.com/lightpanda-io/browser.git
synced 2025-10-29 07:03:29 +00:00
Merge pull request #1156 from lightpanda-io/report_error
add window.reportError
This commit is contained in:
@@ -74,7 +74,7 @@ pub const Event = struct {
|
|||||||
.custom_event => .{ .CustomEvent = @as(*CustomEvent, @ptrCast(evt)).* },
|
.custom_event => .{ .CustomEvent = @as(*CustomEvent, @ptrCast(evt)).* },
|
||||||
.progress_event => .{ .ProgressEvent = @as(*ProgressEvent, @ptrCast(evt)).* },
|
.progress_event => .{ .ProgressEvent = @as(*ProgressEvent, @ptrCast(evt)).* },
|
||||||
.mouse_event => .{ .MouseEvent = @as(*parser.MouseEvent, @ptrCast(evt)) },
|
.mouse_event => .{ .MouseEvent = @as(*parser.MouseEvent, @ptrCast(evt)) },
|
||||||
.error_event => .{ .ErrorEvent = @as(*ErrorEvent, @ptrCast(evt)).* },
|
.error_event => .{ .ErrorEvent = (@as(*ErrorEvent, @fieldParentPtr("proto", evt))).* },
|
||||||
.message_event => .{ .MessageEvent = @as(*MessageEvent, @ptrCast(evt)).* },
|
.message_event => .{ .MessageEvent = @as(*MessageEvent, @ptrCast(evt)).* },
|
||||||
.keyboard_event => .{ .KeyboardEvent = @as(*parser.KeyboardEvent, @ptrCast(evt)) },
|
.keyboard_event => .{ .KeyboardEvent = @as(*parser.KeyboardEvent, @ptrCast(evt)) },
|
||||||
.pop_state => .{ .PopStateEvent = @as(*PopStateEvent, @ptrCast(evt)).* },
|
.pop_state => .{ .PopStateEvent = @as(*PopStateEvent, @ptrCast(evt)).* },
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ pub const ErrorEvent = struct {
|
|||||||
const event = try parser.eventCreate();
|
const event = try parser.eventCreate();
|
||||||
defer parser.eventDestroy(event);
|
defer parser.eventDestroy(event);
|
||||||
try parser.eventInit(event, event_type, .{});
|
try parser.eventInit(event, event_type, .{});
|
||||||
parser.eventSetInternalType(event, .event);
|
parser.eventSetInternalType(event, .error_event);
|
||||||
|
|
||||||
const o = opts orelse ErrorEventInit{};
|
const o = opts orelse ErrorEventInit{};
|
||||||
|
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ const Request = @import("../fetch/Request.zig");
|
|||||||
const fetchFn = @import("../fetch/fetch.zig").fetch;
|
const fetchFn = @import("../fetch/fetch.zig").fetch;
|
||||||
|
|
||||||
const storage = @import("../storage/storage.zig");
|
const storage = @import("../storage/storage.zig");
|
||||||
|
const ErrorEvent = @import("error_event.zig").ErrorEvent;
|
||||||
|
|
||||||
// https://dom.spec.whatwg.org/#interface-window-extensions
|
// https://dom.spec.whatwg.org/#interface-window-extensions
|
||||||
// https://html.spec.whatwg.org/multipage/nav-history-apis.html#window
|
// https://html.spec.whatwg.org/multipage/nav-history-apis.html#window
|
||||||
@@ -281,6 +282,25 @@ pub const Window = struct {
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn _reportError(self: *Window, err: js.Object, page: *Page) !void {
|
||||||
|
var error_event = try ErrorEvent.constructor("error", .{
|
||||||
|
.@"error" = err,
|
||||||
|
});
|
||||||
|
_ = try parser.eventTargetDispatchEvent(
|
||||||
|
parser.toEventTarget(Window, self),
|
||||||
|
@as(*parser.Event, &error_event.proto),
|
||||||
|
);
|
||||||
|
|
||||||
|
if (parser.eventDefaultPrevented(&error_event.proto) == false) {
|
||||||
|
const err_string = err.toString() catch "Unknown error";
|
||||||
|
log.info(.user_script, "error", .{
|
||||||
|
.err = err_string,
|
||||||
|
.stack = page.stackTrace() catch "???",
|
||||||
|
.source = "window.reportError",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const CreateTimeoutOpts = struct {
|
const CreateTimeoutOpts = struct {
|
||||||
name: []const u8,
|
name: []const u8,
|
||||||
args: []js.Object = &.{},
|
args: []js.Object = &.{},
|
||||||
|
|||||||
@@ -149,3 +149,19 @@
|
|||||||
|
|
||||||
testing.eventually(() => testing.expectEqual(true, isWindowTarget));
|
testing.eventually(() => testing.expectEqual(true, isWindowTarget));
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<script id=reportError>
|
||||||
|
let errorEventFired = false;
|
||||||
|
let capturedError = null;
|
||||||
|
|
||||||
|
window.addEventListener('error', (e) => {
|
||||||
|
errorEventFired = true;
|
||||||
|
capturedError = e.error;
|
||||||
|
});
|
||||||
|
|
||||||
|
const testError = new Error('Test error message');
|
||||||
|
window.reportError(testError);
|
||||||
|
|
||||||
|
testing.expectEqual(true, errorEventFired);
|
||||||
|
testing.expectEqual(testError, capturedError);
|
||||||
|
</script>
|
||||||
|
|||||||
Reference in New Issue
Block a user