aboutsummaryrefslogtreecommitdiff
path: root/src/cdp/window-binding.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/cdp/window-binding.ts')
-rw-r--r--src/cdp/window-binding.ts15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/cdp/window-binding.ts b/src/cdp/window-binding.ts
new file mode 100644
index 0000000..4ae1ac3
--- /dev/null
+++ b/src/cdp/window-binding.ts
@@ -0,0 +1,15 @@
+import type { BrowserClient } from "../client";
+
+/**
+ * Capture the real Chrome windowId of a freshly-created harness window and bind
+ * it as the session's durable window identity. Best-effort: a failed CDP call
+ * leaves the previous binding untouched. Call this on every code path that
+ * spawns a NEW dedicated window (newWindow:true), so the windowId never points
+ * at a window that has since been replaced.
+ */
+export const bindHarnessWindowId = async (client: BrowserClient, targetId: string): Promise<void> => {
+ const r = await client.session().callBrowser("Browser.getWindowForTarget", { targetId });
+ if (!r.success) return;
+ const wid = (r.data as { windowId?: number }).windowId;
+ if (typeof wid === "number") client.ownership().setHarnessWindowId(wid);
+};