From 7b2895ef081e06948221db025ce44d7151719144 Mon Sep 17 00:00:00 2001 From: Karl Seguin Date: Mon, 16 Mar 2026 17:33:12 +0800 Subject: [PATCH] click event dispastched from CDP should be trusted --- src/browser/Page.zig | 2 +- src/browser/webapi/event/MouseEvent.zig | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/browser/Page.zig b/src/browser/Page.zig index cb62cb31..f11ba35c 100644 --- a/src/browser/Page.zig +++ b/src/browser/Page.zig @@ -3255,7 +3255,7 @@ pub fn triggerMouseClick(self: *Page, x: f64, y: f64) !void { .type = self._type, }); } - const event = (try @import("webapi/event/MouseEvent.zig").init("click", .{ + const event = (try @import("webapi/event/MouseEvent.zig").initTrusted(comptime .wrap("click"), .{ .bubbles = true, .cancelable = true, .composed = true, diff --git a/src/browser/webapi/event/MouseEvent.zig b/src/browser/webapi/event/MouseEvent.zig index 6b032433..e13dc1b3 100644 --- a/src/browser/webapi/event/MouseEvent.zig +++ b/src/browser/webapi/event/MouseEvent.zig @@ -28,6 +28,8 @@ const EventTarget = @import("../EventTarget.zig"); const UIEvent = @import("UIEvent.zig"); const PointerEvent = @import("PointerEvent.zig"); +const Allocator = std.mem.Allocator; + const MouseEvent = @This(); pub const MouseButton = enum(u8) { @@ -83,12 +85,21 @@ pub fn init(typ: []const u8, _opts: ?Options, page: *Page) !*MouseEvent { const arena = try page.getArena(.{ .debug = "MouseEvent" }); errdefer page.releaseArena(arena); const type_string = try String.init(arena, typ, .{}); + return initWithTrusted(arena, type_string, _opts, false, page); +} +pub fn initTrusted(typ: String, _opts: ?Options, page: *Page) !*MouseEvent { + const arena = try page.getArena(.{ .debug = "MouseEvent.trusted" }); + errdefer page.releaseArena(arena); + return initWithTrusted(arena, typ, _opts, true, page); +} + +fn initWithTrusted(arena: Allocator, typ: String, _opts: ?Options, trusted: bool, page: *Page) !*MouseEvent { const opts = _opts orelse Options{}; const event = try page._factory.uiEvent( arena, - type_string, + typ, MouseEvent{ ._type = .generic, ._proto = undefined, @@ -106,7 +117,7 @@ pub fn init(typ: []const u8, _opts: ?Options, page: *Page) !*MouseEvent { }, ); - Event.populatePrototypes(event, opts, false); + Event.populatePrototypes(event, opts, trusted); return event; }