From b776cf1647322514b17a72bc5d88b0d4819dd4ed Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Tue, 18 Nov 2025 16:14:51 +0100 Subject: [PATCH 1/2] 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 fcee29d35..41d5dcd38 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| { From b764a7a0dc91984e17930fce0243fa06ce655d41 Mon Sep 17 00:00:00 2001 From: Pierre Tachoire Date: Wed, 19 Nov 2025 15:58:52 +0100 Subject: [PATCH 2/2] cdp: return valid url and title for getTargets --- src/cdp/domains/target.zig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cdp/domains/target.zig b/src/cdp/domains/target.zig index 41d5dcd38..94eae592b 100644 --- a/src/cdp/domains/target.zig +++ b/src/cdp/domains/target.zig @@ -71,8 +71,8 @@ fn getTargets(cmd: anytype) !void { .targetInfos = [_]TargetInfo{.{ .targetId = target_id, .type = "page", - .title = "", - .url = "", + .title = bc.getTitle() orelse "about:blank", + .url = bc.getURL() orelse "about:blank", .attached = true, .canAccessOpener = false, }},