Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions src/cdp/CDP.zig
Original file line number Diff line number Diff line change
Expand Up @@ -573,6 +573,10 @@ pub const BrowserContext = struct {
// Browser.setDownloadBehavior calls don't add duplicate listeners.
download_events_registered: bool = false,

// True once we've registered for the network notifications, so repeated
// Network.enable calls don't add duplicate listeners.
network_events_registered: bool = false,

// Extra headers to add to all requests.
extra_headers: std.ArrayList([*c]const u8) = .empty,

Expand Down Expand Up @@ -808,12 +812,16 @@ pub const BrowserContext = struct {
}

pub fn networkEnable(self: *BrowserContext) !void {
if (self.network_events_registered) return;
errdefer self.networkDisable();

try self.notification.register(.http_request_fail, self, onHttpRequestFail);
try self.notification.register(.http_request_start, self, onHttpRequestStart);
try self.notification.register(.http_request_done, self, onHttpRequestDone);
try self.notification.register(.http_response_data, self, onHttpResponseData);
try self.notification.register(.http_response_header_done, self, onHttpResponseHeadersDone);
try self.notification.register(.http_request_served_from_cache, self, onHttpRequestServedFromCache);
self.network_events_registered = true;
}

pub fn networkDisable(self: *BrowserContext) void {
Expand All @@ -823,6 +831,7 @@ pub const BrowserContext = struct {
self.notification.unregister(.http_response_data, self);
self.notification.unregister(.http_response_header_done, self);
self.notification.unregister(.http_request_served_from_cache, self);
self.network_events_registered = false;
}

pub fn fetchEnable(self: *BrowserContext, authRequests: bool) !void {
Expand Down
32 changes: 32 additions & 0 deletions src/cdp/domains/network.zig
Original file line number Diff line number Diff line change
Expand Up @@ -981,3 +981,35 @@ test "cdp.Network: configured CDP ignores setCacheDisabled" {
try ctx.expectSentResult(null, .{ .id = 2 });
try testing.expect(client.cache == &cache);
}

test "cdp.Network: repeated enable does not duplicate captured response bodies" {
var ctx = try testing.context();
defer ctx.deinit();

const cdp = ctx.cdp();
_ = try cdp.createBrowserContext();
var bc = &cdp.browser_context.?;
bc.id = "BID-NE";
bc.session_id = "SID-NE";
bc.target_id = "TID-NE-0000000".*;

try ctx.processMessage(.{ .id = 1, .method = "Network.enable" });
try ctx.processMessage(.{ .id = 2, .method = "Network.enable" });

const fixture_root = "http://127.0.0.1:9582/src/browser/tests/cdp/";
const page = try bc.session.createPage();
try page.navigate(fixture_root ++ "dom1.html", .{});
try testing.waitForPage(bc);

const expected = @embedFile("../../browser/tests/cdp/dom1.html");
var matches: usize = 0;
var responses = bc.captured_responses.valueIterator();
while (responses.next()) |response| {
if (std.mem.indexOf(u8, response.data.items, "<p>1</p>") == null) {
continue;
}
matches += 1;
try std.testing.expectEqualStrings(expected, response.data.items);
}
try testing.expectEqual(1, matches);
}
Loading