diff --git a/packages/playwright-core/src/server/dispatchers/browserContextDispatcher.ts b/packages/playwright-core/src/server/dispatchers/browserContextDispatcher.ts index 3170e5e7d0c11..38ddae5ce3b8b 100644 --- a/packages/playwright-core/src/server/dispatchers/browserContextDispatcher.ts +++ b/packages/playwright-core/src/server/dispatchers/browserContextDispatcher.ts @@ -230,15 +230,25 @@ export class BrowserContextDispatcher extends Dispatcher { + + const streams: fs.WriteStream[] = []; + try { + const writableStreams = await Promise.all(params.items.map(async item => { const itemPath = throwingResolveWithinRoot(tempDirWithRootName, item.name); await progress.race(fs.promises.mkdir(path.dirname(itemPath), { recursive: true })); const file = fs.createWriteStream(itemPath); + streams.push(file); return new WritableStreamDispatcher(this, file, item.lastModifiedMs); - })) - }; + })); + return { + rootDir: params.rootDirName ? new WritableStreamDispatcher(this, tempDirWithRootName) : undefined, + writableStreams, + }; + } catch (e) { + for (const stream of streams) + stream.destroy(); + throw e; + } } async exposeBinding(params: channels.BrowserContextExposeBindingParams, progress: Progress): Promise {