Rename page.id to page._frame_id

This field was recently added and is used to generate correct frameIds in CDP
messages. They remain the same during a navigation event, so calling them
page.id might cause surprises since navigation events create new pages, but
retain the original id. Hence, frame_id is more accurate and hopefully less
surprising.

(This is a small cleanup prior to doing some iframe navigation work).
This commit is contained in:
Karl Seguin
2026-03-02 16:21:29 +08:00
parent 552831364d
commit 10ad5d763e
11 changed files with 70 additions and 70 deletions

View File

@@ -105,7 +105,7 @@ pub const PageRemove = struct {};
pub const PageNavigate = struct { pub const PageNavigate = struct {
req_id: u32, req_id: u32,
page_id: u32, frame_id: u32,
timestamp: u64, timestamp: u64,
url: [:0]const u8, url: [:0]const u8,
opts: Page.NavigateOpts, opts: Page.NavigateOpts,
@@ -113,7 +113,7 @@ pub const PageNavigate = struct {
pub const PageNavigated = struct { pub const PageNavigated = struct {
req_id: u32, req_id: u32,
page_id: u32, frame_id: u32,
timestamp: u64, timestamp: u64,
url: [:0]const u8, url: [:0]const u8,
opts: Page.NavigatedOpts, opts: Page.NavigatedOpts,
@@ -121,18 +121,18 @@ pub const PageNavigated = struct {
pub const PageNetworkIdle = struct { pub const PageNetworkIdle = struct {
req_id: u32, req_id: u32,
page_id: u32, frame_id: u32,
timestamp: u64, timestamp: u64,
}; };
pub const PageNetworkAlmostIdle = struct { pub const PageNetworkAlmostIdle = struct {
req_id: u32, req_id: u32,
page_id: u32, frame_id: u32,
timestamp: u64, timestamp: u64,
}; };
pub const PageFrameCreated = struct { pub const PageFrameCreated = struct {
page_id: u32, frame_id: u32,
parent_id: u32, parent_id: u32,
timestamp: u64, timestamp: u64,
}; };
@@ -319,7 +319,7 @@ test "Notification" {
// noop // noop
notifier.dispatch(.page_navigate, &.{ notifier.dispatch(.page_navigate, &.{
.page_id = 0, .frame_id = 0,
.req_id = 1, .req_id = 1,
.timestamp = 4, .timestamp = 4,
.url = undefined, .url = undefined,
@@ -330,7 +330,7 @@ test "Notification" {
try notifier.register(.page_navigate, &tc, TestClient.pageNavigate); try notifier.register(.page_navigate, &tc, TestClient.pageNavigate);
notifier.dispatch(.page_navigate, &.{ notifier.dispatch(.page_navigate, &.{
.page_id = 0, .frame_id = 0,
.req_id = 1, .req_id = 1,
.timestamp = 4, .timestamp = 4,
.url = undefined, .url = undefined,
@@ -340,7 +340,7 @@ test "Notification" {
notifier.unregisterAll(&tc); notifier.unregisterAll(&tc);
notifier.dispatch(.page_navigate, &.{ notifier.dispatch(.page_navigate, &.{
.page_id = 0, .frame_id = 0,
.req_id = 1, .req_id = 1,
.timestamp = 10, .timestamp = 10,
.url = undefined, .url = undefined,
@@ -351,25 +351,25 @@ test "Notification" {
try notifier.register(.page_navigate, &tc, TestClient.pageNavigate); try notifier.register(.page_navigate, &tc, TestClient.pageNavigate);
try notifier.register(.page_navigated, &tc, TestClient.pageNavigated); try notifier.register(.page_navigated, &tc, TestClient.pageNavigated);
notifier.dispatch(.page_navigate, &.{ notifier.dispatch(.page_navigate, &.{
.page_id = 0, .frame_id = 0,
.req_id = 1, .req_id = 1,
.timestamp = 10, .timestamp = 10,
.url = undefined, .url = undefined,
.opts = .{}, .opts = .{},
}); });
notifier.dispatch(.page_navigated, &.{ .page_id = 0, .req_id = 1, .timestamp = 6, .url = undefined, .opts = .{} }); notifier.dispatch(.page_navigated, &.{ .frame_id = 0, .req_id = 1, .timestamp = 6, .url = undefined, .opts = .{} });
try testing.expectEqual(14, tc.page_navigate); try testing.expectEqual(14, tc.page_navigate);
try testing.expectEqual(6, tc.page_navigated); try testing.expectEqual(6, tc.page_navigated);
notifier.unregisterAll(&tc); notifier.unregisterAll(&tc);
notifier.dispatch(.page_navigate, &.{ notifier.dispatch(.page_navigate, &.{
.page_id = 0, .frame_id = 0,
.req_id = 1, .req_id = 1,
.timestamp = 100, .timestamp = 100,
.url = undefined, .url = undefined,
.opts = .{}, .opts = .{},
}); });
notifier.dispatch(.page_navigated, &.{ .page_id = 0, .req_id = 1, .timestamp = 100, .url = undefined, .opts = .{} }); notifier.dispatch(.page_navigated, &.{ .frame_id = 0, .req_id = 1, .timestamp = 100, .url = undefined, .opts = .{} });
try testing.expectEqual(14, tc.page_navigate); try testing.expectEqual(14, tc.page_navigate);
try testing.expectEqual(6, tc.page_navigated); try testing.expectEqual(6, tc.page_navigated);
@@ -377,27 +377,27 @@ test "Notification" {
// unregister // unregister
try notifier.register(.page_navigate, &tc, TestClient.pageNavigate); try notifier.register(.page_navigate, &tc, TestClient.pageNavigate);
try notifier.register(.page_navigated, &tc, TestClient.pageNavigated); try notifier.register(.page_navigated, &tc, TestClient.pageNavigated);
notifier.dispatch(.page_navigate, &.{ .page_id = 0, .req_id = 1, .timestamp = 100, .url = undefined, .opts = .{} }); notifier.dispatch(.page_navigate, &.{ .frame_id = 0, .req_id = 1, .timestamp = 100, .url = undefined, .opts = .{} });
notifier.dispatch(.page_navigated, &.{ .page_id = 0, .req_id = 1, .timestamp = 1000, .url = undefined, .opts = .{} }); notifier.dispatch(.page_navigated, &.{ .frame_id = 0, .req_id = 1, .timestamp = 1000, .url = undefined, .opts = .{} });
try testing.expectEqual(114, tc.page_navigate); try testing.expectEqual(114, tc.page_navigate);
try testing.expectEqual(1006, tc.page_navigated); try testing.expectEqual(1006, tc.page_navigated);
notifier.unregister(.page_navigate, &tc); notifier.unregister(.page_navigate, &tc);
notifier.dispatch(.page_navigate, &.{ .page_id = 0, .req_id = 1, .timestamp = 100, .url = undefined, .opts = .{} }); notifier.dispatch(.page_navigate, &.{ .frame_id = 0, .req_id = 1, .timestamp = 100, .url = undefined, .opts = .{} });
notifier.dispatch(.page_navigated, &.{ .page_id = 0, .req_id = 1, .timestamp = 1000, .url = undefined, .opts = .{} }); notifier.dispatch(.page_navigated, &.{ .frame_id = 0, .req_id = 1, .timestamp = 1000, .url = undefined, .opts = .{} });
try testing.expectEqual(114, tc.page_navigate); try testing.expectEqual(114, tc.page_navigate);
try testing.expectEqual(2006, tc.page_navigated); try testing.expectEqual(2006, tc.page_navigated);
notifier.unregister(.page_navigated, &tc); notifier.unregister(.page_navigated, &tc);
notifier.dispatch(.page_navigate, &.{ .page_id = 0, .req_id = 1, .timestamp = 100, .url = undefined, .opts = .{} }); notifier.dispatch(.page_navigate, &.{ .frame_id = 0, .req_id = 1, .timestamp = 100, .url = undefined, .opts = .{} });
notifier.dispatch(.page_navigated, &.{ .page_id = 0, .req_id = 1, .timestamp = 1000, .url = undefined, .opts = .{} }); notifier.dispatch(.page_navigated, &.{ .frame_id = 0, .req_id = 1, .timestamp = 1000, .url = undefined, .opts = .{} });
try testing.expectEqual(114, tc.page_navigate); try testing.expectEqual(114, tc.page_navigate);
try testing.expectEqual(2006, tc.page_navigated); try testing.expectEqual(2006, tc.page_navigated);
// already unregistered, try anyways // already unregistered, try anyways
notifier.unregister(.page_navigated, &tc); notifier.unregister(.page_navigated, &tc);
notifier.dispatch(.page_navigate, &.{ .page_id = 0, .req_id = 1, .timestamp = 100, .url = undefined, .opts = .{} }); notifier.dispatch(.page_navigate, &.{ .frame_id = 0, .req_id = 1, .timestamp = 100, .url = undefined, .opts = .{} });
notifier.dispatch(.page_navigated, &.{ .page_id = 0, .req_id = 1, .timestamp = 1000, .url = undefined, .opts = .{} }); notifier.dispatch(.page_navigated, &.{ .frame_id = 0, .req_id = 1, .timestamp = 1000, .url = undefined, .opts = .{} });
try testing.expectEqual(114, tc.page_navigate); try testing.expectEqual(114, tc.page_navigate);
try testing.expectEqual(2006, tc.page_navigated); try testing.expectEqual(2006, tc.page_navigated);
} }

View File

@@ -81,7 +81,7 @@ const Page = @This();
// This is the "id" of the frame. It can be re-used from page-to-page, e.g. // This is the "id" of the frame. It can be re-used from page-to-page, e.g.
// when navigating. // when navigating.
id: u32, _frame_id: u32,
_session: *Session, _session: *Session,
@@ -242,7 +242,7 @@ _type: enum { root, frame }, // only used for logs right now
_req_id: u32 = 0, _req_id: u32 = 0,
_navigated_options: ?NavigatedOpts = null, _navigated_options: ?NavigatedOpts = null,
pub fn init(self: *Page, id: u32, session: *Session, parent: ?*Page) !void { pub fn init(self: *Page, frame_id: u32, session: *Session, parent: ?*Page) !void {
if (comptime IS_DEBUG) { if (comptime IS_DEBUG) {
log.debug(.page, "page.init", .{}); log.debug(.page, "page.init", .{});
} }
@@ -262,7 +262,6 @@ pub fn init(self: *Page, id: u32, session: *Session, parent: ?*Page) !void {
})).asDocument(); })).asDocument();
self.* = .{ self.* = .{
.id = id,
.js = undefined, .js = undefined,
.parent = parent, .parent = parent,
.arena = page_arena, .arena = page_arena,
@@ -270,6 +269,7 @@ pub fn init(self: *Page, id: u32, session: *Session, parent: ?*Page) !void {
.window = undefined, .window = undefined,
.arena_pool = arena_pool, .arena_pool = arena_pool,
.call_arena = call_arena, .call_arena = call_arena,
._frame_id = frame_id,
._session = session, ._session = session,
._factory = factory, ._factory = factory,
._pending_loads = 1, // always 1 for the ScriptManager ._pending_loads = 1, // always 1 for the ScriptManager
@@ -465,7 +465,7 @@ pub fn navigate(self: *Page, request_url: [:0]const u8, opts: NavigateOpts) !voi
self.documentIsComplete(); self.documentIsComplete();
session.notification.dispatch(.page_navigate, &.{ session.notification.dispatch(.page_navigate, &.{
.page_id = self.id, .frame_id = self._frame_id,
.req_id = req_id, .req_id = req_id,
.opts = opts, .opts = opts,
.url = request_url, .url = request_url,
@@ -481,7 +481,7 @@ pub fn navigate(self: *Page, request_url: [:0]const u8, opts: NavigateOpts) !voi
}); });
session.notification.dispatch(.page_navigated, &.{ session.notification.dispatch(.page_navigated, &.{
.page_id = self.id, .frame_id = self._frame_id,
.req_id = req_id, .req_id = req_id,
.opts = .{ .opts = .{
.cdp_id = opts.cdp_id, .cdp_id = opts.cdp_id,
@@ -517,7 +517,7 @@ pub fn navigate(self: *Page, request_url: [:0]const u8, opts: NavigateOpts) !voi
// We dispatch page_navigate event before sending the request. // We dispatch page_navigate event before sending the request.
// It ensures the event page_navigated is not dispatched before this one. // It ensures the event page_navigated is not dispatched before this one.
session.notification.dispatch(.page_navigate, &.{ session.notification.dispatch(.page_navigate, &.{
.page_id = self.id, .frame_id = self._frame_id,
.req_id = req_id, .req_id = req_id,
.opts = opts, .opts = opts,
.url = self.url, .url = self.url,
@@ -535,7 +535,7 @@ pub fn navigate(self: *Page, request_url: [:0]const u8, opts: NavigateOpts) !voi
http_client.request(.{ http_client.request(.{
.ctx = self, .ctx = self,
.url = self.url, .url = self.url,
.page_id = self.id, .frame_id = self._frame_id,
.method = opts.method, .method = opts.method,
.headers = headers, .headers = headers,
.body = opts.body, .body = opts.body,
@@ -712,7 +712,7 @@ pub fn documentIsComplete(self: *Page) void {
} }
self._session.notification.dispatch(.page_navigated, &.{ self._session.notification.dispatch(.page_navigated, &.{
.page_id = self.id, .frame_id = self._frame_id,
.req_id = self._req_id, .req_id = self._req_id,
.opts = self._navigated_options.?, .opts = self._navigated_options.?,
.url = self.url, .url = self.url,
@@ -968,17 +968,17 @@ pub fn iframeAddedCallback(self: *Page, iframe: *Element.Html.IFrame) !void {
iframe._executed = true; iframe._executed = true;
const session = self._session; const session = self._session;
const page_id = session.nextPageId(); const frame_id = session.nextFrameId();
const page_frame = try self.arena.create(Page); const page_frame = try self.arena.create(Page);
try Page.init(page_frame, page_id, session, self); try Page.init(page_frame, frame_id, session, self);
self._pending_loads += 1; self._pending_loads += 1;
page_frame.iframe = iframe; page_frame.iframe = iframe;
iframe._content_window = page_frame.window; iframe._content_window = page_frame.window;
self._session.notification.dispatch(.page_frame_created, &.{ self._session.notification.dispatch(.page_frame_created, &.{
.page_id = page_id, .frame_id = frame_id,
.parent_id = self.id, .parent_id = self._frame_id,
.timestamp = timestamp(.monotonic), .timestamp = timestamp(.monotonic),
}); });
@@ -1331,8 +1331,8 @@ pub fn deliverSlotchangeEvents(self: *Page) void {
pub fn notifyNetworkIdle(self: *Page) void { pub fn notifyNetworkIdle(self: *Page) void {
lp.assert(self._notified_network_idle == .done, "Page.notifyNetworkIdle", .{}); lp.assert(self._notified_network_idle == .done, "Page.notifyNetworkIdle", .{});
self._session.notification.dispatch(.page_network_idle, &.{ self._session.notification.dispatch(.page_network_idle, &.{
.page_id = self.id,
.req_id = self._req_id, .req_id = self._req_id,
.frame_id = self._frame_id,
.timestamp = timestamp(.monotonic), .timestamp = timestamp(.monotonic),
}); });
} }
@@ -1340,8 +1340,8 @@ pub fn notifyNetworkIdle(self: *Page) void {
pub fn notifyNetworkAlmostIdle(self: *Page) void { pub fn notifyNetworkAlmostIdle(self: *Page) void {
lp.assert(self._notified_network_almost_idle == .done, "Page.notifyNetworkAlmostIdle", .{}); lp.assert(self._notified_network_almost_idle == .done, "Page.notifyNetworkAlmostIdle", .{});
self._session.notification.dispatch(.page_network_almost_idle, &.{ self._session.notification.dispatch(.page_network_almost_idle, &.{
.page_id = self.id,
.req_id = self._req_id, .req_id = self._req_id,
.frame_id = self._frame_id,
.timestamp = timestamp(.monotonic), .timestamp = timestamp(.monotonic),
}); });
} }

View File

@@ -265,7 +265,7 @@ pub fn addFromElement(self: *ScriptManager, comptime from_parser: bool, script_e
.url = url, .url = url,
.ctx = script, .ctx = script,
.method = .GET, .method = .GET,
.page_id = page.id, .frame_id = page._frame_id,
.headers = try self.getHeaders(url), .headers = try self.getHeaders(url),
.blocking = is_blocking, .blocking = is_blocking,
.cookie_jar = &page._session.cookie_jar, .cookie_jar = &page._session.cookie_jar,
@@ -384,7 +384,7 @@ pub fn preloadImport(self: *ScriptManager, url: [:0]const u8, referrer: []const
.url = url, .url = url,
.ctx = script, .ctx = script,
.method = .GET, .method = .GET,
.page_id = page.id, .frame_id = page._frame_id,
.headers = try self.getHeaders(url), .headers = try self.getHeaders(url),
.cookie_jar = &page._session.cookie_jar, .cookie_jar = &page._session.cookie_jar,
.resource_type = .script, .resource_type = .script,
@@ -487,7 +487,7 @@ pub fn getAsyncImport(self: *ScriptManager, url: [:0]const u8, cb: ImportAsync.C
try self.client.request(.{ try self.client.request(.{
.url = url, .url = url,
.method = .GET, .method = .GET,
.page_id = page.id, .frame_id = page._frame_id,
.headers = try self.getHeaders(url), .headers = try self.getHeaders(url),
.ctx = script, .ctx = script,
.resource_type = .script, .resource_type = .script,

View File

@@ -54,7 +54,7 @@ navigation: Navigation,
page: ?Page, page: ?Page,
page_id_gen: u32, frame_id_gen: u32,
pub fn init(self: *Session, browser: *Browser, notification: *Notification) !void { pub fn init(self: *Session, browser: *Browser, notification: *Notification) !void {
const allocator = browser.app.allocator; const allocator = browser.app.allocator;
@@ -65,7 +65,7 @@ pub fn init(self: *Session, browser: *Browser, notification: *Notification) !voi
.page = null, .page = null,
.arena = arena, .arena = arena,
.history = .{}, .history = .{},
.page_id_gen = 0, .frame_id_gen = 0,
// The prototype (EventTarget) for Navigation is created when a Page is created. // The prototype (EventTarget) for Navigation is created when a Page is created.
.navigation = .{ ._proto = undefined }, .navigation = .{ ._proto = undefined },
.storage_shed = .{}, .storage_shed = .{},
@@ -93,7 +93,7 @@ pub fn createPage(self: *Session) !*Page {
self.page = @as(Page, undefined); self.page = @as(Page, undefined);
const page = &self.page.?; const page = &self.page.?;
try Page.init(page, self.nextPageId(), self, null); try Page.init(page, self.nextFrameId(), self, null);
// Creates a new NavigationEventTarget for this page. // Creates a new NavigationEventTarget for this page.
try self.navigation.onNewPage(page); try self.navigation.onNewPage(page);
@@ -131,7 +131,7 @@ pub fn replacePage(self: *Session) !*Page {
lp.assert(self.page != null, "Session.replacePage null page", .{}); lp.assert(self.page != null, "Session.replacePage null page", .{});
var current = self.page.?; var current = self.page.?;
const page_id = current.id; const frame_id = current._frame_id;
const parent = current.parent; const parent = current.parent;
current.deinit(); current.deinit();
@@ -139,7 +139,7 @@ pub fn replacePage(self: *Session) !*Page {
self.page = @as(Page, undefined); self.page = @as(Page, undefined);
const page = &self.page.?; const page = &self.page.?;
try Page.init(page, page_id, self, parent); try Page.init(page, frame_id, self, parent);
return page; return page;
} }
@@ -153,9 +153,9 @@ pub const WaitResult = enum {
cdp_socket, cdp_socket,
}; };
pub fn findPage(self: *Session, id: u32) ?*Page { pub fn findPage(self: *Session, frame_id: u32) ?*Page {
const page = self.currentPage() orelse return null; const page = self.currentPage() orelse return null;
return if (page.id == id) page else null; return if (page._frame_id == frame_id) page else null;
} }
pub fn wait(self: *Session, wait_ms: u32) WaitResult { pub fn wait(self: *Session, wait_ms: u32) WaitResult {
@@ -347,20 +347,20 @@ fn processScheduledNavigation(self: *Session, current_page: *Page) !*Page {
current_page._queued_navigation = null; current_page._queued_navigation = null;
defer browser.arena_pool.release(qn.arena); defer browser.arena_pool.release(qn.arena);
const page_id, const parent = blk: { const frame_id, const parent = blk: {
const page = &self.page.?; const page = &self.page.?;
const page_id = page.id; const frame_id = page._frame_id;
const parent = page.parent; const parent = page.parent;
browser.http_client.abort(); browser.http_client.abort();
self.removePage(); self.removePage();
break :blk .{ page_id, parent }; break :blk .{ frame_id, parent };
}; };
self.page = @as(Page, undefined); self.page = @as(Page, undefined);
const page = &self.page.?; const page = &self.page.?;
try Page.init(page, page_id, self, parent); try Page.init(page, frame_id, self, parent);
// Creates a new NavigationEventTarget for this page. // Creates a new NavigationEventTarget for this page.
try self.navigation.onNewPage(page); try self.navigation.onNewPage(page);
@@ -377,8 +377,8 @@ fn processScheduledNavigation(self: *Session, current_page: *Page) !*Page {
return page; return page;
} }
pub fn nextPageId(self: *Session) u32 { pub fn nextFrameId(self: *Session) u32 {
const id = self.page_id_gen +% 1; const id = self.frame_id_gen +% 1;
self.page_id_gen = id; self.frame_id_gen = id;
return id; return id;
} }

View File

@@ -72,9 +72,9 @@ pub fn init(input: Input, options: ?InitOpts, page: *Page) !js.Promise {
try http_client.request(.{ try http_client.request(.{
.ctx = fetch, .ctx = fetch,
.page_id = page.id,
.url = request._url, .url = request._url,
.method = request._method, .method = request._method,
.frame_id = page._frame_id,
.body = request._body, .body = request._body,
.headers = headers, .headers = headers,
.resource_type = .fetch, .resource_type = .fetch,

View File

@@ -223,9 +223,9 @@ pub fn send(self: *XMLHttpRequest, body_: ?[]const u8) !void {
try http_client.request(.{ try http_client.request(.{
.ctx = self, .ctx = self,
.url = self._url, .url = self._url,
.page_id = page.id,
.method = self._method, .method = self._method,
.headers = headers, .headers = headers,
.frame_id = page._frame_id,
.body = self._request_body, .body = self._request_body,
.cookie_jar = if (cookie_support) &page._session.cookie_jar else null, .cookie_jar = if (cookie_support) &page._session.cookie_jar else null,
.resource_type = .xhr, .resource_type = .xhr,

View File

@@ -193,7 +193,7 @@ pub fn requestIntercept(bc: anytype, intercept: *const Notification.RequestInter
try bc.cdp.sendEvent("Fetch.requestPaused", .{ try bc.cdp.sendEvent("Fetch.requestPaused", .{
.requestId = &id.toInterceptId(transfer.id), .requestId = &id.toInterceptId(transfer.id),
.frameId = &id.toFrameId(transfer.req.page_id), .frameId = &id.toFrameId(transfer.req.frame_id),
.request = network.TransferAsRequestWriter.init(transfer), .request = network.TransferAsRequestWriter.init(transfer),
.resourceType = switch (transfer.req.resource_type) { .resourceType = switch (transfer.req.resource_type) {
.script => "Script", .script => "Script",
@@ -397,7 +397,7 @@ pub fn requestAuthRequired(bc: anytype, intercept: *const Notification.RequestAu
try bc.cdp.sendEvent("Fetch.authRequired", .{ try bc.cdp.sendEvent("Fetch.authRequired", .{
.requestId = &id.toInterceptId(transfer.id), .requestId = &id.toInterceptId(transfer.id),
.frameId = &id.toFrameId(transfer.req.page_id), .frameId = &id.toFrameId(transfer.req.frame_id),
.request = network.TransferAsRequestWriter.init(transfer), .request = network.TransferAsRequestWriter.init(transfer),
.resourceType = switch (transfer.req.resource_type) { .resourceType = switch (transfer.req.resource_type) {
.script => "Script", .script => "Script",

View File

@@ -237,8 +237,8 @@ pub fn httpRequestStart(bc: anytype, msg: *const Notification.RequestStart) !voi
const transfer = msg.transfer; const transfer = msg.transfer;
const req = &transfer.req; const req = &transfer.req;
const page_id = req.page_id; const frame_id = req.frame_id;
const page = bc.session.findPage(page_id) orelse return; const page = bc.session.findPage(frame_id) orelse return;
// Modify request with extra CDP headers // Modify request with extra CDP headers
for (bc.extra_headers.items) |extra| { for (bc.extra_headers.items) |extra| {
@@ -249,7 +249,7 @@ pub fn httpRequestStart(bc: anytype, msg: *const Notification.RequestStart) !voi
try bc.cdp.sendEvent("Network.requestWillBeSent", .{ try bc.cdp.sendEvent("Network.requestWillBeSent", .{
.loaderId = &id.toLoaderId(transfer.id), .loaderId = &id.toLoaderId(transfer.id),
.requestId = &id.toRequestId(transfer.id), .requestId = &id.toRequestId(transfer.id),
.frameId = &id.toFrameId(page_id), .frameId = &id.toFrameId(frame_id),
.type = req.resource_type.string(), .type = req.resource_type.string(),
.documentURL = page.url, .documentURL = page.url,
.request = TransferAsRequestWriter.init(transfer), .request = TransferAsRequestWriter.init(transfer),
@@ -270,7 +270,7 @@ pub fn httpResponseHeaderDone(arena: Allocator, bc: anytype, msg: *const Notific
try bc.cdp.sendEvent("Network.responseReceived", .{ try bc.cdp.sendEvent("Network.responseReceived", .{
.loaderId = &id.toLoaderId(transfer.id), .loaderId = &id.toLoaderId(transfer.id),
.requestId = &id.toRequestId(transfer.id), .requestId = &id.toRequestId(transfer.id),
.frameId = &id.toFrameId(transfer.req.page_id), .frameId = &id.toFrameId(transfer.req.frame_id),
.response = TransferAsResponseWriter.init(arena, msg.transfer), .response = TransferAsResponseWriter.init(arena, msg.transfer),
.hasExtraInfo = false, // TODO change after adding Network.responseReceivedExtraInfo .hasExtraInfo = false, // TODO change after adding Network.responseReceivedExtraInfo
}, .{ .session_id = session_id }); }, .{ .session_id = session_id });

View File

@@ -105,7 +105,7 @@ fn setLifecycleEventsEnabled(cmd: anytype) !void {
const page = bc.session.currentPage() orelse return error.PageNotLoaded; const page = bc.session.currentPage() orelse return error.PageNotLoaded;
if (page._load_state == .complete) { if (page._load_state == .complete) {
const frame_id = &id.toFrameId(page.id); const frame_id = &id.toFrameId(page._frame_id);
const loader_id = &id.toLoaderId(page._req_id); const loader_id = &id.toLoaderId(page._req_id);
const now = timestampF(.monotonic); const now = timestampF(.monotonic);
@@ -239,7 +239,7 @@ pub fn pageNavigate(bc: anytype, event: *const Notification.PageNavigate) !void
const session_id = bc.session_id orelse return; const session_id = bc.session_id orelse return;
bc.reset(); bc.reset();
const frame_id = &id.toFrameId(event.page_id); const frame_id = &id.toFrameId(event.frame_id);
const loader_id = &id.toLoaderId(event.req_id); const loader_id = &id.toLoaderId(event.req_id);
var cdp = bc.cdp; var cdp = bc.cdp;
@@ -308,7 +308,7 @@ pub fn pageFrameCreated(bc: anytype, event: *const Notification.PageFrameCreated
const session_id = bc.session_id orelse return; const session_id = bc.session_id orelse return;
const cdp = bc.cdp; const cdp = bc.cdp;
const frame_id = &id.toFrameId(event.page_id); const frame_id = &id.toFrameId(event.frame_id);
try cdp.sendEvent("Page.frameAttached", .{ .params = .{ try cdp.sendEvent("Page.frameAttached", .{ .params = .{
.frameId = frame_id, .frameId = frame_id,
@@ -319,7 +319,7 @@ pub fn pageFrameCreated(bc: anytype, event: *const Notification.PageFrameCreated
try cdp.sendEvent("Page.lifecycleEvent", LifecycleEvent{ try cdp.sendEvent("Page.lifecycleEvent", LifecycleEvent{
.name = "init", .name = "init",
.frameId = frame_id, .frameId = frame_id,
.loaderId = &id.toLoaderId(event.page_id), .loaderId = &id.toLoaderId(event.frame_id),
.timestamp = event.timestamp, .timestamp = event.timestamp,
}, .{ .session_id = session_id }); }, .{ .session_id = session_id });
} }
@@ -331,7 +331,7 @@ pub fn pageNavigated(arena: Allocator, bc: anytype, event: *const Notification.P
const session_id = bc.session_id orelse return; const session_id = bc.session_id orelse return;
const timestamp = event.timestamp; const timestamp = event.timestamp;
const frame_id = &id.toFrameId(event.page_id); const frame_id = &id.toFrameId(event.frame_id);
const loader_id = &id.toLoaderId(event.req_id); const loader_id = &id.toLoaderId(event.req_id);
var cdp = bc.cdp; var cdp = bc.cdp;
@@ -478,11 +478,11 @@ pub fn pageNavigated(arena: Allocator, bc: anytype, event: *const Notification.P
} }
pub fn pageNetworkIdle(bc: anytype, event: *const Notification.PageNetworkIdle) !void { pub fn pageNetworkIdle(bc: anytype, event: *const Notification.PageNetworkIdle) !void {
return sendPageLifecycle(bc, "networkIdle", event.timestamp, &id.toFrameId(event.page_id), &id.toLoaderId(event.req_id)); return sendPageLifecycle(bc, "networkIdle", event.timestamp, &id.toFrameId(event.frame_id), &id.toLoaderId(event.req_id));
} }
pub fn pageNetworkAlmostIdle(bc: anytype, event: *const Notification.PageNetworkAlmostIdle) !void { pub fn pageNetworkAlmostIdle(bc: anytype, event: *const Notification.PageNetworkAlmostIdle) !void {
return sendPageLifecycle(bc, "networkAlmostIdle", event.timestamp, &id.toFrameId(event.page_id), &id.toLoaderId(event.req_id)); return sendPageLifecycle(bc, "networkAlmostIdle", event.timestamp, &id.toFrameId(event.frame_id), &id.toLoaderId(event.req_id));
} }
fn sendPageLifecycle(bc: anytype, name: []const u8, timestamp: u64, frame_id: []const u8, loader_id: []const u8) !void { fn sendPageLifecycle(bc: anytype, name: []const u8, timestamp: u64, frame_id: []const u8, loader_id: []const u8) !void {

View File

@@ -177,7 +177,7 @@ fn createTarget(cmd: anytype) !void {
const page = try bc.session.createPage(); const page = try bc.session.createPage();
// the target_id == the frame_id of the "root" page // the target_id == the frame_id of the "root" page
const frame_id = id.toFrameId(page.id); const frame_id = id.toFrameId(page._frame_id);
bc.target_id = frame_id; bc.target_id = frame_id;
const target_id = &bc.target_id.?; const target_id = &bc.target_id.?;
{ {
@@ -421,7 +421,7 @@ fn setAutoAttach(cmd: anytype) !void {
if (bc.target_id == null) { if (bc.target_id == null) {
if (bc.session.currentPage()) |page| { if (bc.session.currentPage()) |page| {
// the target_id == the frame_id of the "root" page // the target_id == the frame_id of the "root" page
bc.target_id = id.toFrameId(page.id); bc.target_id = id.toFrameId(page._frame_id);
try doAttachtoTarget(cmd, &bc.target_id.?); try doAttachtoTarget(cmd, &bc.target_id.?);
} }
} }

View File

@@ -320,7 +320,7 @@ fn fetchRobotsThenProcessRequest(self: *Client, robots_url: [:0]const u8, req: R
.method = .GET, .method = .GET,
.headers = headers, .headers = headers,
.blocking = false, .blocking = false,
.page_id = req.page_id, .frame_id = req.frame_id,
.cookie_jar = req.cookie_jar, .cookie_jar = req.cookie_jar,
.notification = req.notification, .notification = req.notification,
.resource_type = .fetch, .resource_type = .fetch,
@@ -855,7 +855,7 @@ pub const RequestCookie = struct {
}; };
pub const Request = struct { pub const Request = struct {
page_id: u32, frame_id: u32,
method: Method, method: Method,
url: [:0]const u8, url: [:0]const u8,
headers: Net.Headers, headers: Net.Headers,