From fc59a0f6ab0a0a241b3fb6690853eb1b21bc50c5 Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Tue, 28 Jan 2025 15:46:13 +0100 Subject: [PATCH 1/2] cdp: send empty param instead of void Sending void parameters generated unmarshal errors with chromedp client. Empty struct is required. --- src/cdp/page.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cdp/page.zig b/src/cdp/page.zig index d453e9d5..2079f106 100644 --- a/src/cdp/page.zig +++ b/src/cdp/page.zig @@ -329,7 +329,7 @@ fn navigate( // Send Runtime.executionContextsCleared event // TODO: noop event, we have no env context at this point, is it necesarry? - try sendEvent(alloc, ctx, "Runtime.executionContextsCleared", void, {}, input.sessionId); + try sendEvent(alloc, ctx, "Runtime.executionContextsCleared", struct {}, .{}, input.sessionId); // Launch navigate, the page must have been created by a // target.createTarget. From 8aac26a33133b289695df0c76689c60be9474ece Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Tue, 28 Jan 2025 16:01:47 +0100 Subject: [PATCH 2/2] cdp: check parameter's type on sendEvent Disallow void type. --- src/cdp/cdp.zig | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/cdp/cdp.zig b/src/cdp/cdp.zig index 5c056763..7fcdeeb4 100644 --- a/src/cdp/cdp.zig +++ b/src/cdp/cdp.zig @@ -206,6 +206,9 @@ pub fn sendEvent( params: T, sessionID: ?[]const u8, ) !void { + // some clients like chromedp expects empty parameters structs. + if (T == void) @compileError("sendEvent: use struct{} instead of void for empty parameters"); + log_cdp.debug("Event > method {s}, sessionID {?s}", .{ name, sessionID }); const Resp = struct { method: []const u8,