From b776cf1647322514b17a72bc5d88b0d4819dd4ed Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Tue, 18 Nov 2025 16:14:51 +0100 Subject: [PATCH] cdp: add getTargets --- src/cdp/domains/target.zig | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/src/cdp/domains/target.zig b/src/cdp/domains/target.zig index fcee29d3..41d5dcd3 100644 --- a/src/cdp/domains/target.zig +++ b/src/cdp/domains/target.zig @@ -24,6 +24,7 @@ const LOADER_ID = "LOADERID42AA389647D702B4D805F49A"; pub fn processMessage(cmd: anytype) !void { const action = std.meta.stringToEnum(enum { + getTargets, attachToTarget, closeTarget, createBrowserContext, @@ -38,6 +39,7 @@ pub fn processMessage(cmd: anytype) !void { }, cmd.input.action) orelse return error.UnknownMethod; switch (action) { + .getTargets => return getTargets(cmd), .attachToTarget => return attachToTarget(cmd), .closeTarget => return closeTarget(cmd), .createBrowserContext => return createBrowserContext(cmd), @@ -52,6 +54,31 @@ pub fn processMessage(cmd: anytype) !void { } } +fn getTargets(cmd: anytype) !void { + // Some clients like Stagehand expects to have an existing context. + const bc = cmd.browser_context orelse cmd.createBrowserContext() catch |err| switch (err) { + error.AlreadyExists => unreachable, + else => return err, + }; + + const target_id = bc.target_id orelse { + return cmd.sendResult(.{ + .targetInfos = [_]TargetInfo{}, + }, .{ .include_session_id = false }); + }; + + return cmd.sendResult(.{ + .targetInfos = [_]TargetInfo{.{ + .targetId = target_id, + .type = "page", + .title = "", + .url = "", + .attached = true, + .canAccessOpener = false, + }}, + }, .{ .include_session_id = false }); +} + fn getBrowserContexts(cmd: anytype) !void { var browser_context_ids: []const []const u8 = undefined; if (cmd.browser_context) |bc| {