From 41e23e10dadb22a75df2bd62685935b6d4989bf8 Mon Sep 17 00:00:00 2001 From: Muki Kiboigo Date: Tue, 28 Apr 2026 07:23:04 -0700 Subject: [PATCH] add Network.clearBrowserCache CDP Method --- src/cdp/domains/network.zig | 38 +++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/cdp/domains/network.zig b/src/cdp/domains/network.zig index 773eeed5..27694afc 100644 --- a/src/cdp/domains/network.zig +++ b/src/cdp/domains/network.zig @@ -44,6 +44,7 @@ pub fn processMessage(cmd: *CDP.Command) !void { setUserAgentOverride, deleteCookies, clearBrowserCookies, + clearBrowserCache, setCookie, setCookies, getCookies, @@ -59,6 +60,7 @@ pub fn processMessage(cmd: *CDP.Command) !void { .setExtraHTTPHeaders => return setExtraHTTPHeaders(cmd), .deleteCookies => return deleteCookies(cmd), .clearBrowserCookies => return clearBrowserCookies(cmd), + .clearBrowserCache => return clearBrowserCache(cmd), .setCookie => return setCookie(cmd), .setCookies => return setCookies(cmd), .getCookies => return getCookies(cmd), @@ -162,6 +164,17 @@ fn clearBrowserCookies(cmd: *CDP.Command) !void { return cmd.sendResult(null, .{}); } +fn clearBrowserCache(cmd: *CDP.Command) !void { + // Network.clearBrowserCache takes no parameters per the CDP spec, but most + // CDP clients (chrome-remote-interface, chromedp, custom websocket clients) + // include an empty `"params":{}` object on every command for ergonomics. + // Chrome accepts that and clears the jar; reject only on truly malformed JSON. + const bc = cmd.browser_context orelse return error.BrowserContextNotLoaded; + const network = bc.cdp.browser.http_client.network; + if (network.cache) |*c| try c.clear(); + return cmd.sendResult(null, .{}); +} + fn setCookie(cmd: *CDP.Command) !void { const params = (try cmd.params( CdpStorage.CdpCookie, @@ -673,3 +686,28 @@ test "cdp.Network: getAllCookies returns whole jar regardless of current origin" }, }, .{ .id = 3 }); } + +test "cdp.Network: clearBrowserCache succeeds" { + var ctx = try testing.context(); + defer ctx.deinit(); + _ = try ctx.loadBrowserContext(.{ .id = "BID-CC1" }); + + try ctx.processMessage(.{ + .id = 1, + .method = "Network.clearBrowserCache", + }); + try ctx.expectSentResult(null, .{ .id = 1 }); +} + +test "cdp.Network: clearBrowserCache accepts empty params object" { + var ctx = try testing.context(); + defer ctx.deinit(); + _ = try ctx.loadBrowserContext(.{ .id = "BID-CC2" }); + + // Most CDP clients always include a `params` field on every command, + // even for methods that take none. Chrome ignores the empty object; we should too. + try ctx.processMessage( + \\{"id":1,"method":"Network.clearBrowserCache","params":{}} + ); + try ctx.expectSentResult(null, .{ .id = 1 }); +}