Merge pull request #1278 from lightpanda-io/cdp-page-close

cdp: add page.Close
This commit is contained in:
Pierre Tachoire
2025-12-18 13:12:20 +01:00
committed by GitHub

View File

@@ -33,6 +33,7 @@ pub fn processMessage(cmd: anytype) !void {
createIsolatedWorld,
navigate,
stopLoading,
close,
}, cmd.input.action) orelse return error.UnknownMethod;
switch (action) {
@@ -43,6 +44,7 @@ pub fn processMessage(cmd: anytype) !void {
.createIsolatedWorld => return createIsolatedWorld(cmd),
.navigate => return navigate(cmd),
.stopLoading => return cmd.sendResult(null, .{}),
.close => return close(cmd),
}
}
@@ -130,6 +132,43 @@ fn addScriptToEvaluateOnNewDocument(cmd: anytype) !void {
}, .{});
}
fn close(cmd: anytype) !void {
const bc = cmd.browser_context orelse return error.BrowserContextNotLoaded;
const target_id = bc.target_id orelse return error.TargetNotLoaded;
// can't be null if we have a target_id
std.debug.assert(bc.session.page != null);
try cmd.sendResult(.{}, .{});
// Following code is similar to target.closeTarget
//
// could be null, created but never attached
if (bc.session_id) |session_id| {
// Inspector.detached event
try cmd.sendEvent("Inspector.detached", .{
.reason = "Render process gone.",
}, .{ .session_id = session_id });
// detachedFromTarget event
try cmd.sendEvent("Target.detachedFromTarget", .{
.targetId = target_id,
.sessionId = session_id,
.reason = "Render process gone.",
}, .{});
bc.session_id = null;
}
bc.session.removePage();
for (bc.isolated_worlds.items) |*world| {
world.deinit();
}
bc.isolated_worlds.clearRetainingCapacity();
bc.target_id = null;
}
fn createIsolatedWorld(cmd: anytype) !void {
const params = (try cmd.params(struct {
frameId: []const u8,