From 2107ade3a5e15f4db961a6e7fc35f8d275f23b2c Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Sat, 21 Mar 2026 13:11:18 +0100 Subject: [PATCH] use a CapturedResponse struct for captured responses --- src/cdp/cdp.zig | 14 +++++++++++--- src/cdp/domains/network.zig | 10 +++------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/cdp/cdp.zig b/src/cdp/cdp.zig index 58ed11b9..4cf50876 100644 --- a/src/cdp/cdp.zig +++ b/src/cdp/cdp.zig @@ -324,6 +324,11 @@ pub fn BrowserContext(comptime CDP_T: type) type { const Node = @import("Node.zig"); const AXNode = @import("AXNode.zig"); + const CapturedResponse = struct { + encode: enum { none, base64 }, + data: std.ArrayList(u8), + }; + return struct { id: []const u8, cdp: *CDP_T, @@ -384,7 +389,7 @@ pub fn BrowserContext(comptime CDP_T: type) type { // ever streamed. So if CDP is the only thing that needs bodies in // memory for an arbitrary amount of time, then that's where we're going // to store the, - captured_responses: std.AutoHashMapUnmanaged(usize, std.ArrayList(u8)), + captured_responses: std.AutoHashMapUnmanaged(usize, CapturedResponse), notification: *Notification, @@ -648,9 +653,12 @@ pub fn BrowserContext(comptime CDP_T: type) type { const id = msg.transfer.id; const gop = try self.captured_responses.getOrPut(arena, id); if (!gop.found_existing) { - gop.value_ptr.* = .{}; + gop.value_ptr.* = .{ + .data = .empty, + .encode = .none, + }; } - try gop.value_ptr.appendSlice(arena, try arena.dupe(u8, msg.data)); + try gop.value_ptr.data.appendSlice(arena, try arena.dupe(u8, msg.data)); } pub fn onHttpRequestAuthRequired(ctx: *anyopaque, data: *const Notification.RequestAuthRequired) !void { diff --git a/src/cdp/domains/network.zig b/src/cdp/domains/network.zig index b9875737..8b143e32 100644 --- a/src/cdp/domains/network.zig +++ b/src/cdp/domains/network.zig @@ -208,15 +208,11 @@ fn getResponseBody(cmd: anytype) !void { const request_id = try idFromRequestId(params.requestId); const bc = cmd.browser_context orelse return error.BrowserContextNotLoaded; - const buf = bc.captured_responses.getPtr(request_id) orelse return error.RequestNotFound; - - const encoded_len = std.base64.standard.Encoder.calcSize(buf.items.len); - const encoded = try cmd.arena.alloc(u8, encoded_len); - _ = std.base64.standard.Encoder.encode(encoded, buf.items); + const resp = bc.captured_responses.getPtr(request_id) orelse return error.RequestNotFound; try cmd.sendResult(.{ - .body = encoded, - .base64Encoded = true, + .body = resp.data.items, + .base64Encoded = resp.encode == .base64, }, .{}); }