From 321d93351117657d31c1b99f52c97b0ac884d22d Mon Sep 17 00:00:00 2001 From: Ryan Manuel Date: Sat, 11 Oct 2025 15:10:58 -0500 Subject: [PATCH 1/5] fix: improve the performance of resetting the browser state by removing file_systems which is not something we need to reset --- packages/server/lib/browsers/cdp_automation.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/server/lib/browsers/cdp_automation.ts b/packages/server/lib/browsers/cdp_automation.ts index b923c334101..ad71252aeb2 100644 --- a/packages/server/lib/browsers/cdp_automation.ts +++ b/packages/server/lib/browsers/cdp_automation.ts @@ -639,7 +639,7 @@ export class CdpAutomation implements CDPClient, AutomationMiddleware { }) case 'reset:browser:state': return Promise.all([ - this.sendDebuggerCommandFn('Storage.clearDataForOrigin', { origin: '*', storageTypes: 'all' }), + this.sendDebuggerCommandFn('Storage.clearDataForOrigin', { origin: '*', storageTypes: 'cookies,indexeddb,local_storage,shader_cache,service_workers,cache_storage,interest_groups,shared_storage' }), this.sendDebuggerCommandFn('Network.clearBrowserCache'), ]) case 'reset:browser:tabs:for:next:spec': From 29fddd6bac5df3563b724fea59dffa73961d6068 Mon Sep 17 00:00:00 2001 From: Ryan Manuel Date: Sat, 11 Oct 2025 16:51:57 -0500 Subject: [PATCH 2/5] fix test --- packages/server/test/unit/browsers/cdp_automation_spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/server/test/unit/browsers/cdp_automation_spec.ts b/packages/server/test/unit/browsers/cdp_automation_spec.ts index bc33de48b5d..71f3422edf1 100644 --- a/packages/server/test/unit/browsers/cdp_automation_spec.ts +++ b/packages/server/test/unit/browsers/cdp_automation_spec.ts @@ -560,12 +560,12 @@ context('lib/browsers/cdp_automation', () => { describe('reset:browser:state', function () { it('sends Storage.clearDataForOrigin and Network.clearBrowserCache', async function () { - this.sendDebuggerCommand.withArgs('Storage.clearDataForOrigin', { origin: '*', storageTypes: 'all' }).resolves() + this.sendDebuggerCommand.withArgs('Storage.clearDataForOrigin', { origin: '*', storageTypes: 'cookies,indexeddb,local_storage,shader_cache,service_workers,cache_storage,interest_groups,shared_storage' }).resolves() this.sendDebuggerCommand.withArgs('Network.clearBrowserCache').resolves() await this.onRequest('reset:browser:state') - expect(this.sendDebuggerCommand).to.be.calledWith('Storage.clearDataForOrigin', { origin: '*', storageTypes: 'all' }) + expect(this.sendDebuggerCommand).to.be.calledWith('Storage.clearDataForOrigin', { origin: '*', storageTypes: 'cookies,indexeddb,local_storage,shader_cache,service_workers,cache_storage,interest_groups,shared_storage' }) expect(this.sendDebuggerCommand).to.be.calledWith('Network.clearBrowserCache') }) }) From 66d26828595f47f48d5c9da23c32445115ab1790 Mon Sep 17 00:00:00 2001 From: Ryan Manuel Date: Mon, 13 Oct 2025 10:56:14 -0500 Subject: [PATCH 3/5] add changelog entry --- cli/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/cli/CHANGELOG.md b/cli/CHANGELOG.md index 74210136b8a..324cb98628b 100644 --- a/cli/CHANGELOG.md +++ b/cli/CHANGELOG.md @@ -6,6 +6,7 @@ _Released 10/21/2025 (PENDING)_ **Bugfixes:** - An error is no longer thrown during command execution when the application under test overwrites the `window.$` property with a non-function. Fixes [#1502](https://github.com/cypress-io/cypress/issues/1502). Fixed in [#32682](https://github.com/cypress-io/cypress/pull/32682). +- Improve performance of time between specs by not resetting the `file_systems` `StorageType` state when executing the CDP command `Storage.clearDataForOrigin`. Fixed in [#32703](https://github.com/cypress-io/cypress/pull/32703). **Misc:** From 28786afc4729aede56c9368347e13d5e2d3e22bc Mon Sep 17 00:00:00 2001 From: Ryan Manuel Date: Tue, 14 Oct 2025 08:04:24 -0500 Subject: [PATCH 4/5] fix electron --- packages/server/lib/browsers/electron.ts | 2 +- packages/server/test/unit/browsers/electron_spec.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/server/lib/browsers/electron.ts b/packages/server/lib/browsers/electron.ts index fb75f9d7593..a4af725689a 100644 --- a/packages/server/lib/browsers/electron.ts +++ b/packages/server/lib/browsers/electron.ts @@ -341,7 +341,7 @@ export = { this._handleDownloads(win, options.downloadsFolder, automation), utils.initializeCDP(pageCriClient, automation), // Ensure to clear browser state in between runs. This is handled differently in browsers when we launch new tabs, but we don't have that concept in electron - pageCriClient.send('Storage.clearDataForOrigin', { origin: '*', storageTypes: 'all' }), + pageCriClient.send('Storage.clearDataForOrigin', { origin: '*', storageTypes: 'cookies,indexeddb,local_storage,shader_cache,service_workers,cache_storage,interest_groups,shared_storage' }), pageCriClient.send('Network.clearBrowserCache'), ]) } diff --git a/packages/server/test/unit/browsers/electron_spec.js b/packages/server/test/unit/browsers/electron_spec.js index 5c679f250d8..7a9cc9f89bb 100644 --- a/packages/server/test/unit/browsers/electron_spec.js +++ b/packages/server/test/unit/browsers/electron_spec.js @@ -517,7 +517,7 @@ describe('lib/browsers/electron', () => { it('expects the browser to be reset', function () { return electron._launch(this.win, this.url, this.automation, this.options, undefined, undefined, { attachCDPClient: sinon.stub() }) .then(() => { - expect(this.pageCriClient.send).to.be.calledWith('Storage.clearDataForOrigin', { origin: '*', storageTypes: 'all' }) + expect(this.pageCriClient.send).to.be.calledWith('Storage.clearDataForOrigin', { origin: '*', storageTypes: 'cookies,indexeddb,local_storage,shader_cache,service_workers,cache_storage,interest_groups,shared_storage' }) expect(this.pageCriClient.send).to.be.calledWith('Network.clearBrowserCache') }) }) From beaf039f45502db9abf54107ed650bcd9d0fd6e5 Mon Sep 17 00:00:00 2001 From: Ryan Manuel Date: Tue, 14 Oct 2025 11:24:30 -0500 Subject: [PATCH 5/5] Apply suggestions from code review --- packages/server/lib/browsers/cdp_automation.ts | 2 ++ packages/server/lib/browsers/electron.ts | 2 ++ 2 files changed, 4 insertions(+) diff --git a/packages/server/lib/browsers/cdp_automation.ts b/packages/server/lib/browsers/cdp_automation.ts index 6efd285be97..388005feebc 100644 --- a/packages/server/lib/browsers/cdp_automation.ts +++ b/packages/server/lib/browsers/cdp_automation.ts @@ -639,6 +639,8 @@ export class CdpAutomation implements CDPClient, AutomationMiddleware { }) case 'reset:browser:state': return Promise.all([ + // Note that we are omitting `file_systems` as it is very non-performant to clear: + // https://github.com/cypress-io/cypress/pull/32703 this.sendDebuggerCommandFn('Storage.clearDataForOrigin', { origin: '*', storageTypes: 'cookies,indexeddb,local_storage,shader_cache,service_workers,cache_storage,interest_groups,shared_storage' }), this.sendDebuggerCommandFn('Network.clearBrowserCache'), ]) diff --git a/packages/server/lib/browsers/electron.ts b/packages/server/lib/browsers/electron.ts index a4af725689a..803ecc8521c 100644 --- a/packages/server/lib/browsers/electron.ts +++ b/packages/server/lib/browsers/electron.ts @@ -341,6 +341,8 @@ export = { this._handleDownloads(win, options.downloadsFolder, automation), utils.initializeCDP(pageCriClient, automation), // Ensure to clear browser state in between runs. This is handled differently in browsers when we launch new tabs, but we don't have that concept in electron + // Note that we are omitting `file_systems` as it is very non-performant to clear: + // https://github.com/cypress-io/cypress/pull/32703 pageCriClient.send('Storage.clearDataForOrigin', { origin: '*', storageTypes: 'cookies,indexeddb,local_storage,shader_cache,service_workers,cache_storage,interest_groups,shared_storage' }), pageCriClient.send('Network.clearBrowserCache'), ])