From 9201c0ce16d76b79291370814d8dff2222541236 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?T=C3=82CHES?= Date: Tue, 17 Mar 2026 18:33:00 -0600 Subject: [PATCH] fix: document silent catch handlers in browser-tools (#1037) Add descriptive comments to all empty catch blocks explaining why the error is intentionally swallowed. Covers networkidle timeouts, optional screenshots, best-effort file writes, response body reads, route cleanup, and page metadata refreshes. Co-authored-by: Claude Opus 4.6 (1M context) --- src/resources/extensions/browser-tools/lifecycle.ts | 4 ++-- src/resources/extensions/browser-tools/tools/navigation.ts | 4 ++-- src/resources/extensions/browser-tools/tools/network-mock.ts | 2 +- src/resources/extensions/browser-tools/tools/pages.ts | 2 +- .../extensions/browser-tools/tools/state-persistence.ts | 2 +- src/resources/extensions/browser-tools/tools/visual-diff.ts | 2 +- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/resources/extensions/browser-tools/lifecycle.ts b/src/resources/extensions/browser-tools/lifecycle.ts index 7885f878a..5ae8a5546 100644 --- a/src/resources/extensions/browser-tools/lifecycle.ts +++ b/src/resources/extensions/browser-tools/lifecycle.ts @@ -103,10 +103,10 @@ export function attachPageListeners(p: Page, pageId: number): void { try { const body = await response.text(); entry.responseBody = body.slice(0, 2000); - } catch {} + } catch { /* non-fatal — response body may be unavailable or already consumed */ } } logPusher(networkLogs, entry); - } catch {} + } catch { /* non-fatal — request may have been aborted or page closed */ } }); p.on("requestfailed", (request) => { diff --git a/src/resources/extensions/browser-tools/tools/navigation.ts b/src/resources/extensions/browser-tools/tools/navigation.ts index 878a40888..e1d5545dc 100644 --- a/src/resources/extensions/browser-tools/tools/navigation.ts +++ b/src/resources/extensions/browser-tools/tools/navigation.ts @@ -60,7 +60,7 @@ export function registerNavigationTools(pi: ExtensionAPI, deps: ToolDeps): void let buf = await p.screenshot({ type: "jpeg", quality: 80, scale: "css" }); buf = await deps.constrainScreenshot(p, buf, "image/jpeg", 80); screenshotContent = [{ type: "image", data: buf.toString("base64"), mimeType: "image/jpeg" }]; - } catch {} + } catch { /* non-fatal — screenshot is optional, navigation result is still valid */ } } return { @@ -207,7 +207,7 @@ export function registerNavigationTools(pi: ExtensionAPI, deps: ToolDeps): void data: buf.toString("base64"), mimeType: "image/jpeg", }]; - } catch {} + } catch { /* non-fatal — screenshot is optional, reload result is still valid */ } return { content: [ diff --git a/src/resources/extensions/browser-tools/tools/network-mock.ts b/src/resources/extensions/browser-tools/tools/network-mock.ts index 936f4e919..1122efc8f 100644 --- a/src/resources/extensions/browser-tools/tools/network-mock.ts +++ b/src/resources/extensions/browser-tools/tools/network-mock.ts @@ -161,7 +161,7 @@ export function registerNetworkMockTools(pi: ExtensionAPI, deps: ToolDeps): void const cleanup = async () => { try { await p.unroute(pattern, handler); - } catch {} + } catch { /* cleanup — route may already be removed or page closed */ } }; const routeInfo: ActiveRoute = { diff --git a/src/resources/extensions/browser-tools/tools/pages.ts b/src/resources/extensions/browser-tools/tools/pages.ts index 8b2e301ec..dcaeef47e 100644 --- a/src/resources/extensions/browser-tools/tools/pages.ts +++ b/src/resources/extensions/browser-tools/tools/pages.ts @@ -137,7 +137,7 @@ export function registerPageTools(pi: ExtensionAPI, deps: ToolDeps): void { try { remaining.title = await remaining.page.title(); remaining.url = remaining.page.url(); - } catch {} + } catch { /* non-fatal — page may have been closed or navigated away */ } } const pages = registryListPages(pageRegistry); const lines = pages.map((p: any) => { diff --git a/src/resources/extensions/browser-tools/tools/state-persistence.ts b/src/resources/extensions/browser-tools/tools/state-persistence.ts index 497e51c46..792284ffd 100644 --- a/src/resources/extensions/browser-tools/tools/state-persistence.ts +++ b/src/resources/extensions/browser-tools/tools/state-persistence.ts @@ -69,7 +69,7 @@ export function registerStatePersistenceTools(pi: ExtensionAPI, deps: ToolDeps): // Ensure .gitignore covers the state dir const gitignorePath = path.resolve(process.cwd(), STATE_DIR, ".gitignore"); - await writeFile(gitignorePath, "*\n!.gitignore\n").catch(() => {}); + await writeFile(gitignorePath, "*\n!.gitignore\n").catch(() => { /* best-effort — .gitignore may already exist or dir may be read-only */ }); const cookieCount = storageState.cookies?.length ?? 0; const localStorageOrigins = storageState.origins?.length ?? 0; diff --git a/src/resources/extensions/browser-tools/tools/visual-diff.ts b/src/resources/extensions/browser-tools/tools/visual-diff.ts index f13b88bb9..760ba8244 100644 --- a/src/resources/extensions/browser-tools/tools/visual-diff.ts +++ b/src/resources/extensions/browser-tools/tools/visual-diff.ts @@ -55,7 +55,7 @@ export function registerVisualDiffTools(pi: ExtensionAPI, deps: ToolDeps): void // Ensure .gitignore const gitignorePath = pathMod.join(baselineDir, ".gitignore"); - await writeFile(gitignorePath, "*\n!.gitignore\n").catch(() => {}); + await writeFile(gitignorePath, "*\n!.gitignore\n").catch(() => { /* best-effort — .gitignore may already exist or dir may be read-only */ }); // Generate baseline name const url = p.url();