From b248cb72650d55e0f309919fab29fb8b80c5a484 Mon Sep 17 00:00:00 2001 From: Simon Knott Date: Thu, 6 Feb 2025 13:10:47 +0100 Subject: [PATCH] add to apirequestcontext --- docs/src/api/class-apirequestcontext.md | 6 ++++++ docs/src/api/class-browsercontext.md | 2 +- packages/playwright-core/src/client/fetch.ts | 4 ++-- packages/playwright-core/src/protocol/validator.ts | 4 +++- packages/playwright-core/src/server/fetch.ts | 10 +++++----- packages/playwright-core/types/types.d.ts | 7 ++++++- packages/protocol/src/channels.d.ts | 10 +++++++--- packages/protocol/src/protocol.yml | 2 ++ 8 files changed, 32 insertions(+), 13 deletions(-) diff --git a/docs/src/api/class-apirequestcontext.md b/docs/src/api/class-apirequestcontext.md index b8c179de4f..ad3c8555c8 100644 --- a/docs/src/api/class-apirequestcontext.md +++ b/docs/src/api/class-apirequestcontext.md @@ -909,3 +909,9 @@ Returns storage state for this request context, contains current cookies and loc ### option: APIRequestContext.storageState.path = %%-storagestate-option-path-%% * since: v1.16 + +### option: APIRequestContext.storageState.indexedDB +* since: v1.51 +- `indexedDB` ? + +Set to `false` to omit IndexedDB from snapshot. diff --git a/docs/src/api/class-browsercontext.md b/docs/src/api/class-browsercontext.md index ff40212983..9343fcb61c 100644 --- a/docs/src/api/class-browsercontext.md +++ b/docs/src/api/class-browsercontext.md @@ -1545,7 +1545,7 @@ Returns storage state for this browser context, contains current cookies, local * since: v1.51 - `indexedDB` ? -Set to `false` to disable IndexedDB snapshot. +Set to `false` to omit IndexedDB from snapshot. ## property: BrowserContext.tracing * since: v1.12 diff --git a/packages/playwright-core/src/client/fetch.ts b/packages/playwright-core/src/client/fetch.ts index 58928532ac..cb71b38c81 100644 --- a/packages/playwright-core/src/client/fetch.ts +++ b/packages/playwright-core/src/client/fetch.ts @@ -260,8 +260,8 @@ export class APIRequestContext extends ChannelOwner { - const state = await this._channel.storageState(); + async storageState(options: { path?: string, indexedDB?: boolean } = {}): Promise { + const state = await this._channel.storageState({ indexedDB: options.indexedDB ?? true }); if (options.path) { await mkdirIfNeeded(options.path); await fs.promises.writeFile(options.path, JSON.stringify(state, undefined, 2), 'utf8'); diff --git a/packages/playwright-core/src/protocol/validator.ts b/packages/playwright-core/src/protocol/validator.ts index ec5e167f8a..bd686114d8 100644 --- a/packages/playwright-core/src/protocol/validator.ts +++ b/packages/playwright-core/src/protocol/validator.ts @@ -234,7 +234,9 @@ scheme.APIRequestContextFetchLogParams = tObject({ scheme.APIRequestContextFetchLogResult = tObject({ log: tArray(tString), }); -scheme.APIRequestContextStorageStateParams = tOptional(tObject({})); +scheme.APIRequestContextStorageStateParams = tObject({ + indexedDB: tBoolean, +}); scheme.APIRequestContextStorageStateResult = tObject({ cookies: tArray(tType('NetworkCookie')), origins: tArray(tType('OriginStorage')), diff --git a/packages/playwright-core/src/server/fetch.ts b/packages/playwright-core/src/server/fetch.ts index 44602e0c82..0ecff57a5f 100644 --- a/packages/playwright-core/src/server/fetch.ts +++ b/packages/playwright-core/src/server/fetch.ts @@ -133,7 +133,7 @@ export abstract class APIRequestContext extends SdkObject { abstract _defaultOptions(): FetchRequestOptions; abstract _addCookies(cookies: channels.NetworkCookie[]): Promise; abstract _cookies(url: URL): Promise; - abstract storageState(): Promise; + abstract storageState(indexedDB: boolean): Promise; private _storeResponseBody(body: Buffer): string { const uid = createGuid(); @@ -618,8 +618,8 @@ export class BrowserContextAPIRequestContext extends APIRequestContext { return await this._context.cookies(url.toString()); } - override async storageState(): Promise { - return this._context.storageState(); + override async storageState(indexedDB: boolean): Promise { + return this._context.storageState(indexedDB); } } @@ -684,10 +684,10 @@ export class GlobalAPIRequestContext extends APIRequestContext { return this._cookieStore.cookies(url); } - override async storageState(): Promise { + override async storageState(indexedDB: boolean): Promise { return { cookies: this._cookieStore.allCookies(), - origins: this._origins || [] + origins: (this._origins || []).map(origin => ({ ...origin, indexedDB: indexedDB ? origin.indexedDB : [] })), }; } } diff --git a/packages/playwright-core/types/types.d.ts b/packages/playwright-core/types/types.d.ts index 6db87e13d4..9b928e7217 100644 --- a/packages/playwright-core/types/types.d.ts +++ b/packages/playwright-core/types/types.d.ts @@ -9272,7 +9272,7 @@ export interface BrowserContext { */ storageState(options?: { /** - * Set to `false` to disable IndexedDB snapshot. + * Set to `false` to omit IndexedDB from snapshot. */ indexedDB?: boolean; @@ -18536,6 +18536,11 @@ export interface APIRequestContext { * @param options */ storageState(options?: { + /** + * Set to `false` to omit IndexedDB from snapshot. + */ + indexedDB?: boolean; + /** * The file path to save the storage state to. If * [`path`](https://playwright.dev/docs/api/class-apirequestcontext#api-request-context-storage-state-option-path) is diff --git a/packages/protocol/src/channels.d.ts b/packages/protocol/src/channels.d.ts index 9c57586284..ed3365796c 100644 --- a/packages/protocol/src/channels.d.ts +++ b/packages/protocol/src/channels.d.ts @@ -346,7 +346,7 @@ export interface APIRequestContextChannel extends APIRequestContextEventTarget, fetch(params: APIRequestContextFetchParams, metadata?: CallMetadata): Promise; fetchResponseBody(params: APIRequestContextFetchResponseBodyParams, metadata?: CallMetadata): Promise; fetchLog(params: APIRequestContextFetchLogParams, metadata?: CallMetadata): Promise; - storageState(params?: APIRequestContextStorageStateParams, metadata?: CallMetadata): Promise; + storageState(params: APIRequestContextStorageStateParams, metadata?: CallMetadata): Promise; disposeAPIResponse(params: APIRequestContextDisposeAPIResponseParams, metadata?: CallMetadata): Promise; dispose(params: APIRequestContextDisposeParams, metadata?: CallMetadata): Promise; } @@ -402,8 +402,12 @@ export type APIRequestContextFetchLogOptions = { export type APIRequestContextFetchLogResult = { log: string[], }; -export type APIRequestContextStorageStateParams = {}; -export type APIRequestContextStorageStateOptions = {}; +export type APIRequestContextStorageStateParams = { + indexedDB: boolean, +}; +export type APIRequestContextStorageStateOptions = { + +}; export type APIRequestContextStorageStateResult = { cookies: NetworkCookie[], origins: OriginStorage[], diff --git a/packages/protocol/src/protocol.yml b/packages/protocol/src/protocol.yml index 5134d5e405..d2eb339d1e 100644 --- a/packages/protocol/src/protocol.yml +++ b/packages/protocol/src/protocol.yml @@ -376,6 +376,8 @@ APIRequestContext: items: string storageState: + parameters: + indexedDB: boolean returns: cookies: type: array