From bb0bdff8155adb5a065bd1eb4b0a23b977a97401 Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Thu, 6 Mar 2025 12:42:40 +0100 Subject: [PATCH] chore: hide indexedDB in BrowserContext.storageState() by default (#35045) --- packages/playwright-core/src/protocol/validator.ts | 2 +- packages/playwright-core/src/server/browserContext.ts | 4 ++-- packages/playwright-core/src/server/storageScript.ts | 4 ++-- packages/protocol/src/channels.d.ts | 2 +- packages/protocol/src/protocol.yml | 2 +- tests/library/browsercontext-storage-state.spec.ts | 2 -- 6 files changed, 7 insertions(+), 9 deletions(-) diff --git a/packages/playwright-core/src/protocol/validator.ts b/packages/playwright-core/src/protocol/validator.ts index f4944d6e09..eda99fbc6c 100644 --- a/packages/playwright-core/src/protocol/validator.ts +++ b/packages/playwright-core/src/protocol/validator.ts @@ -173,7 +173,7 @@ scheme.SetOriginStorage = tObject({ scheme.OriginStorage = tObject({ origin: tString, localStorage: tArray(tType('NameValue')), - indexedDB: tArray(tType('IndexedDBDatabase')), + indexedDB: tOptional(tArray(tType('IndexedDBDatabase'))), }); scheme.SerializedError = tObject({ error: tOptional(tObject({ diff --git a/packages/playwright-core/src/server/browserContext.ts b/packages/playwright-core/src/server/browserContext.ts index b2bf4bf202..261513c8c6 100644 --- a/packages/playwright-core/src/server/browserContext.ts +++ b/packages/playwright-core/src/server/browserContext.ts @@ -527,7 +527,7 @@ export abstract class BrowserContext extends SdkObject { continue; try { const storage: storageScript.Storage = await page.mainFrame().nonStallingEvaluateInExistingContext(collectScript, 'utility'); - if (storage.localStorage.length || storage.indexedDB.length) + if (storage.localStorage.length || storage.indexedDB?.length) result.origins.push({ origin, localStorage: storage.localStorage, indexedDB: storage.indexedDB }); originsToSave.delete(origin); } catch { @@ -547,7 +547,7 @@ export abstract class BrowserContext extends SdkObject { const frame = page.mainFrame(); await frame.goto(internalMetadata, origin); const storage: storageScript.Storage = await frame.evaluateExpression(collectScript, { world: 'utility' }); - if (storage.localStorage.length || storage.indexedDB.length) + if (storage.localStorage.length || storage.indexedDB?.length) result.origins.push({ origin, localStorage: storage.localStorage, indexedDB: storage.indexedDB }); } await page.close(internalMetadata); diff --git a/packages/playwright-core/src/server/storageScript.ts b/packages/playwright-core/src/server/storageScript.ts index fb4ca02082..6ed162587b 100644 --- a/packages/playwright-core/src/server/storageScript.ts +++ b/packages/playwright-core/src/server/storageScript.ts @@ -73,7 +73,7 @@ export async function collect(serializers: ReturnType, isFirefox: const keys = await idbRequestToPromise(objectStore.getAllKeys()); const records = await Promise.all(keys.map(async key => { - const record: channels.OriginStorage['indexedDB'][0]['stores'][0]['records'][0] = {}; + const record: channels.IndexedDBDatabase['stores'][0]['records'][0] = {}; if (objectStore.keyPath === null) { const { encoded, trivial } = trySerialize(key); @@ -125,7 +125,7 @@ export async function collect(serializers: ReturnType, isFirefox: localStorage: Object.keys(localStorage).map(name => ({ name, value: localStorage.getItem(name)! })), indexedDB: recordIndexedDB ? await Promise.all((await indexedDB.databases()).map(collectDB)).catch(e => { throw new Error('Unable to serialize IndexedDB: ' + e.message); - }) : [], + }) : undefined, }; } diff --git a/packages/protocol/src/channels.d.ts b/packages/protocol/src/channels.d.ts index 1c5a201c40..137bc6238f 100644 --- a/packages/protocol/src/channels.d.ts +++ b/packages/protocol/src/channels.d.ts @@ -304,7 +304,7 @@ export type SetOriginStorage = { export type OriginStorage = { origin: string, localStorage: NameValue[], - indexedDB: IndexedDBDatabase[], + indexedDB?: IndexedDBDatabase[], }; export type SerializedError = { diff --git a/packages/protocol/src/protocol.yml b/packages/protocol/src/protocol.yml index 5b2f136386..e45b01ddeb 100644 --- a/packages/protocol/src/protocol.yml +++ b/packages/protocol/src/protocol.yml @@ -279,7 +279,7 @@ OriginStorage: type: array items: NameValue indexedDB: - type: array + type: array? items: IndexedDBDatabase SerializedError: diff --git a/tests/library/browsercontext-storage-state.spec.ts b/tests/library/browsercontext-storage-state.spec.ts index e22c66f23c..abb8b368da 100644 --- a/tests/library/browsercontext-storage-state.spec.ts +++ b/tests/library/browsercontext-storage-state.spec.ts @@ -40,14 +40,12 @@ it('should capture local storage', async ({ contextFactory }) => { name: 'name2', value: 'value2' }], - indexedDB: [], }, { origin: 'https://www.example.com', localStorage: [{ name: 'name1', value: 'value1' }], - indexedDB: [], }]); });