From e641322587790e34e16553fd47a691b0cfa040e5 Mon Sep 17 00:00:00 2001 From: Pavel Feldman Date: Sat, 18 Apr 2026 08:23:05 -0700 Subject: [PATCH] fix(server): close browsers when PlaywrightServer shuts down In extension/reuse mode, PlaywrightServer launches browsers that intentionally outlive individual client connections (for reuse). But when the server itself closes, those browsers were never cleaned up, leaking browser processes. This caused worker teardown timeouts on Edge/macOS CI: the orphaned Edge process kept SmartScreen background connections alive, preventing clean shutdown of worker-scoped test fixtures. --- packages/playwright-core/src/remote/playwrightServer.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/playwright-core/src/remote/playwrightServer.ts b/packages/playwright-core/src/remote/playwrightServer.ts index c3b005859665f..7c45778cb9345 100644 --- a/packages/playwright-core/src/remote/playwrightServer.ts +++ b/packages/playwright-core/src/remote/playwrightServer.ts @@ -319,6 +319,10 @@ export class PlaywrightServer { async close() { await this._wsServer.close(); + // Close all browsers that were launched by this server (e.g. in reuse mode) + // to avoid leaking browser processes that may hold connections to test servers. + for (const browser of this._playwright.allBrowsers()) + await browser.close(nullProgress, { reason: 'Server closed' }); } }