aboutsummaryrefslogtreecommitdiff
path: root/src/cdp/window-binding.ts
diff options
context:
space:
mode:
authorAman Kumar <145339995+amankumarsingh77@users.noreply.github.com>2026-07-22 00:59:58 +0530
committerGitHub <noreply@github.com>2026-07-22 00:59:58 +0530
commitfe00d3361dece3d35f788d3eeb1c750eedbf6294 (patch)
treea51b8ffe3cddb1aa8d457784f71cc1b2b0b61d56 /src/cdp/window-binding.ts
parent7de0beaf2cf713afc50c573e941fa279ec6df9d9 (diff)
feat: add forms domain and durable window binding (v0.9.0) (#14)
- Add forms domain with a universal field setter that auto-detects element type and fires framework-compatible input events (React native-setter trick) - Add window-binding helper to capture and bind the real Chrome windowId as the session's durable window identity on every new-window code path - Wire supporting changes across CDP session/ownership, client, navigate, isolated-tab, prompt, and state - Add manual tests for forms and window binding - Bump version 0.8.3 -> 0.9.0 Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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);
+};