From 9d91b7caf51003cb5c11ec0cdeb8431ca0411aa9 Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Wed, 13 Dec 2023 09:34:20 -0800 Subject: [PATCH] fix(route): silently catch errors when handling route on server (#28612) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is a follow-up to 119afdf788f4fec0eaae0def91a95aee84971eae Since continue/fulfill/abort now may throw on the server after page has been closed, we need to catch the errors manually. On the client it's fixed by the original change. This fixes errors in the existing tests: ``` 1) [chromium] › library/browsercontext-route.spec.ts:172:3 › should support Set-Cookie header ──── Error: at ../packages/playwright-core/src/server/chromium/crConnection.ts:147 145 | const id = this._connection._rawSend(this._sessionId, method, params); 146 | return new Promise((resolve, reject) => { > 147 | this._callbacks.set(id, { resolve, reject, error: new ProtocolError('error', method) }); | ^ 148 | }); 149 | } 150 | at /Users/yurys/playwright/packages/playwright-core/src/server/chromium/crConnection.ts:147:57 at new Promise () at CRSession.send (/Users/yurys/playwright/packages/playwright-core/src/server/chromium/crConnection.ts:146:12) at RouteImpl.continue (/Users/yurys/playwright/packages/playwright-core/src/server/chromium/crNetworkManager.ts:566:25) at FrameManager.requestStarted (/Users/yurys/playwright/packages/playwright-core/src/server/frames.ts:299:23) at CRNetworkManager._onRequest (/Users/yurys/playwright/packages/playwright-core/src/server/chromium/crNetworkManager.ts:314:57) at CRNetworkManager._onRequestPaused (/Users/yurys/playwright/packages/playwright-core/src/server/chromium/crNetworkManager.ts:202:12) at CRSession.emit (node:events:517:28) at /Users/yurys/playwright/packages/playwright-core/src/server/chromium/crConnection.ts:172:14 at runNextTicks (node:internal/process/task_queues:60:5) at processImmediate (node:internal/timers:447:9) ``` ![image](https://github.com/microsoft/playwright/assets/9798949/1c436dc2-f113-4ba6-952c-dca5a8c5fa62) Reference https://github.com/microsoft/playwright/issues/28490 --- .../playwright-core/src/server/chromium/crServiceWorker.ts | 2 +- packages/playwright-core/src/server/frames.ts | 4 ++-- packages/playwright-core/src/server/recorder/recorderApp.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/playwright-core/src/server/chromium/crServiceWorker.ts b/packages/playwright-core/src/server/chromium/crServiceWorker.ts index b75f9922e9..11d6385356 100644 --- a/packages/playwright-core/src/server/chromium/crServiceWorker.ts +++ b/packages/playwright-core/src/server/chromium/crServiceWorker.ts @@ -119,7 +119,7 @@ export class CRServiceWorker extends Worker { const r = new network.Route(request, route); if (this._browserContext._requestInterceptor?.(r, request)) return; - r.continue({ isFallback: true }); + r.continue({ isFallback: true }).catch(() => {}); } } diff --git a/packages/playwright-core/src/server/frames.ts b/packages/playwright-core/src/server/frames.ts index 68430aaeb3..6631da6d69 100644 --- a/packages/playwright-core/src/server/frames.ts +++ b/packages/playwright-core/src/server/frames.ts @@ -296,7 +296,7 @@ export class FrameManager { frame.setPendingDocument({ documentId: request._documentId, request }); if (request._isFavicon) { if (route) - route.continue(request, { isFallback: true }); + route.continue(request, { isFallback: true }).catch(() => {}); return; } this._page.emitOnContext(BrowserContext.Events.Request, request); @@ -308,7 +308,7 @@ export class FrameManager { return; if (this._page._browserContext._requestInterceptor?.(r, request)) return; - r.continue({ isFallback: true }); + r.continue({ isFallback: true }).catch(() => {}); } } diff --git a/packages/playwright-core/src/server/recorder/recorderApp.ts b/packages/playwright-core/src/server/recorder/recorderApp.ts index 1324393a06..40637302a0 100644 --- a/packages/playwright-core/src/server/recorder/recorderApp.ts +++ b/packages/playwright-core/src/server/recorder/recorderApp.ts @@ -97,7 +97,7 @@ export class RecorderApp extends EventEmitter implements IRecorderApp { ], body: buffer.toString('base64'), isBase64: true - }); + }).catch(() => {}); }); return true; });