mirror of
https://github.com/Tencent/BrowserSkill.git
synced 2026-09-10 13:01:23 +08:00
fix(extension): retry console capture when a domain enable fails
`enableConsoleDomains` marked the tab in `consoleDomainsAttemptedTabs` before issuing `Runtime.enable`/`Log.enable` and swallowed any errors, so a transient failure (e.g. a restricted page during attach) permanently disabled console capture for that tab: every later `ensureConsoleCapture` was a no-op and the agent silently got an empty console buffer with no indication that capture was broken. This was inconsistent with `enableNetworkDomain`, which records the tab only after `Network.enable` succeeds (and is explicitly tested as "retries and surfaces failures"). Bring `enableConsoleDomains` in line: mark the tab only after both domains enable successfully, so a later `ensureConsoleCapture` can recover from a transient failure. Renamed the flag `consoleDomainsAttemptedTabs` -> `consoleDomainsEnabledTabs` to match `networkDomainsEnabledTabs` and reflect the new semantics. Attach remains best-effort (it still succeeds when a domain can't be enabled). Adds a regression test asserting `ensureConsoleCapture` retries after a failed enable; it fails (no retry) on the previous code. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -132,11 +132,33 @@ describe("ChromiumCdp", () => {
|
||||
expect(cdp.isAttached(12)).toBe(true);
|
||||
expect(api.sendCommand).toHaveBeenCalledWith({ tabId: 12 }, "Runtime.enable", {});
|
||||
expect(api.sendCommand).toHaveBeenCalledWith({ tabId: 12 }, "Log.enable", {});
|
||||
await cdp.ensureConsoleCapture(12);
|
||||
const enableCalls = (api.sendCommand as ReturnType<typeof vi.fn>).mock.calls.filter(
|
||||
});
|
||||
|
||||
it("retries console capture after a domain enable fails during attach", async () => {
|
||||
const { api } = fakeApi();
|
||||
(api.sendCommand as ReturnType<typeof vi.fn>).mockImplementation(
|
||||
async (_target, method: string) => {
|
||||
if (method === "Log.enable") throw new Error("restricted");
|
||||
return {};
|
||||
},
|
||||
);
|
||||
const cdp = new ChromiumCdp(api);
|
||||
// Attach is best-effort: Log.enable fails but attach still succeeds,
|
||||
// leaving the tab unmarked so capture can be retried.
|
||||
await cdp.ensureAttached(12);
|
||||
const afterAttach = (api.sendCommand as ReturnType<typeof vi.fn>).mock.calls.filter(
|
||||
([, method]) => method === "Runtime.enable" || method === "Log.enable",
|
||||
);
|
||||
expect(enableCalls).toHaveLength(2);
|
||||
expect(afterAttach).toHaveLength(2);
|
||||
|
||||
// Before the fix the "attempted" flag was set before success, so this
|
||||
// was a no-op and the tab silently returned no console output forever.
|
||||
// Now it retries both domains.
|
||||
await cdp.ensureConsoleCapture(12);
|
||||
const afterRetry = (api.sendCommand as ReturnType<typeof vi.fn>).mock.calls.filter(
|
||||
([, method]) => method === "Runtime.enable" || method === "Log.enable",
|
||||
);
|
||||
expect(afterRetry).toHaveLength(4);
|
||||
});
|
||||
|
||||
it("retries and surfaces Network.enable failures for explicit capture", async () => {
|
||||
|
||||
Reference in New Issue
Block a user