make it a param
This commit is contained in:
parent
1931f16ed9
commit
2116f5f290
|
|
@ -1541,6 +1541,12 @@ Returns storage state for this browser context, contains current cookies, local
|
|||
### option: BrowserContext.storageState.path = %%-storagestate-option-path-%%
|
||||
* since: v1.8
|
||||
|
||||
### option: BrowserContext.storageState.indexedDB
|
||||
* since: v1.51
|
||||
- `indexedDB` ?<boolean>
|
||||
|
||||
Set to `false` to disable IndexedDB snapshot.
|
||||
|
||||
## property: BrowserContext.tracing
|
||||
* since: v1.12
|
||||
- type: <[Tracing]>
|
||||
|
|
|
|||
|
|
@ -425,8 +425,8 @@ export class BrowserContext extends ChannelOwner<channels.BrowserContextChannel>
|
|||
});
|
||||
}
|
||||
|
||||
async storageState(options: { path?: string } = {}): Promise<StorageState> {
|
||||
const state = await this._channel.storageState();
|
||||
async storageState(options: { path?: string, indexedDB?: boolean } = {}): Promise<StorageState> {
|
||||
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');
|
||||
|
|
|
|||
|
|
@ -992,7 +992,9 @@ scheme.BrowserContextSetOfflineParams = tObject({
|
|||
offline: tBoolean,
|
||||
});
|
||||
scheme.BrowserContextSetOfflineResult = tOptional(tObject({}));
|
||||
scheme.BrowserContextStorageStateParams = tOptional(tObject({}));
|
||||
scheme.BrowserContextStorageStateParams = tObject({
|
||||
indexedDB: tBoolean,
|
||||
});
|
||||
scheme.BrowserContextStorageStateResult = tObject({
|
||||
cookies: tArray(tType('NetworkCookie')),
|
||||
origins: tArray(tType('OriginStorage')),
|
||||
|
|
|
|||
|
|
@ -508,14 +508,14 @@ export abstract class BrowserContext extends SdkObject {
|
|||
this._origins.add(origin);
|
||||
}
|
||||
|
||||
async storageState(): Promise<channels.BrowserContextStorageStateResult> {
|
||||
async storageState(indexedDB: boolean): Promise<channels.BrowserContextStorageStateResult> {
|
||||
const result: channels.BrowserContextStorageStateResult = {
|
||||
cookies: await this.cookies(),
|
||||
origins: []
|
||||
};
|
||||
const originsToSave = new Set(this._origins);
|
||||
|
||||
const collectScript = `(${storageScript.collect})((${utilityScriptSerializers.source})(), ${this._browser.options.name === 'firefox'}, ${Boolean(process.env.PLAYWRIGHT_SKIP_INDEXEDDB)})`;
|
||||
const collectScript = `(${storageScript.collect})((${utilityScriptSerializers.source})(), ${this._browser.options.name === 'firefox'}, ${indexedDB})`;
|
||||
|
||||
// First try collecting storage stage from existing pages.
|
||||
for (const page of this.pages()) {
|
||||
|
|
|
|||
|
|
@ -291,7 +291,7 @@ export class BrowserContextDispatcher extends Dispatcher<BrowserContext, channel
|
|||
}
|
||||
|
||||
async storageState(params: channels.BrowserContextStorageStateParams, metadata: CallMetadata): Promise<channels.BrowserContextStorageStateResult> {
|
||||
return await this._context.storageState();
|
||||
return await this._context.storageState(params.indexedDB);
|
||||
}
|
||||
|
||||
async close(params: channels.BrowserContextCloseParams, metadata: CallMetadata): Promise<void> {
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ import type { source } from './isomorphic/utilityScriptSerializers';
|
|||
|
||||
export type Storage = Omit<channels.OriginStorage, 'origin'>;
|
||||
|
||||
export async function collect(serializers: ReturnType<typeof source>, isFirefox: boolean, skipIndexedDB: boolean): Promise<Storage> {
|
||||
export async function collect(serializers: ReturnType<typeof source>, isFirefox: boolean, recordIndexedDB: boolean): Promise<Storage> {
|
||||
async function collectDB(dbInfo: IDBDatabaseInfo) {
|
||||
if (!dbInfo.name)
|
||||
throw new Error('Database name is empty');
|
||||
|
|
@ -123,9 +123,9 @@ export async function collect(serializers: ReturnType<typeof source>, isFirefox:
|
|||
|
||||
return {
|
||||
localStorage: Object.keys(localStorage).map(name => ({ name, value: localStorage.getItem(name)! })),
|
||||
indexedDB: skipIndexedDB ? [] : await Promise.all((await indexedDB.databases()).map(collectDB)).catch(e => {
|
||||
indexedDB: recordIndexedDB ? await Promise.all((await indexedDB.databases()).map(collectDB)).catch(e => {
|
||||
throw new Error('Unable to serialize IndexedDB: ' + e.message);
|
||||
}),
|
||||
}) : [],
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
5
packages/playwright-core/types/types.d.ts
vendored
5
packages/playwright-core/types/types.d.ts
vendored
|
|
@ -9271,6 +9271,11 @@ export interface BrowserContext {
|
|||
* @param options
|
||||
*/
|
||||
storageState(options?: {
|
||||
/**
|
||||
* Set to `false` to disable IndexedDB snapshot.
|
||||
*/
|
||||
indexedDB?: boolean;
|
||||
|
||||
/**
|
||||
* The file path to save the storage state to. If
|
||||
* [`path`](https://playwright.dev/docs/api/class-browsercontext#browser-context-storage-state-option-path) is a
|
||||
|
|
|
|||
10
packages/protocol/src/channels.d.ts
vendored
10
packages/protocol/src/channels.d.ts
vendored
|
|
@ -1564,7 +1564,7 @@ export interface BrowserContextChannel extends BrowserContextEventTarget, EventT
|
|||
setNetworkInterceptionPatterns(params: BrowserContextSetNetworkInterceptionPatternsParams, metadata?: CallMetadata): Promise<BrowserContextSetNetworkInterceptionPatternsResult>;
|
||||
setWebSocketInterceptionPatterns(params: BrowserContextSetWebSocketInterceptionPatternsParams, metadata?: CallMetadata): Promise<BrowserContextSetWebSocketInterceptionPatternsResult>;
|
||||
setOffline(params: BrowserContextSetOfflineParams, metadata?: CallMetadata): Promise<BrowserContextSetOfflineResult>;
|
||||
storageState(params?: BrowserContextStorageStateParams, metadata?: CallMetadata): Promise<BrowserContextStorageStateResult>;
|
||||
storageState(params: BrowserContextStorageStateParams, metadata?: CallMetadata): Promise<BrowserContextStorageStateResult>;
|
||||
pause(params?: BrowserContextPauseParams, metadata?: CallMetadata): Promise<BrowserContextPauseResult>;
|
||||
enableRecorder(params: BrowserContextEnableRecorderParams, metadata?: CallMetadata): Promise<BrowserContextEnableRecorderResult>;
|
||||
newCDPSession(params: BrowserContextNewCDPSessionParams, metadata?: CallMetadata): Promise<BrowserContextNewCDPSessionResult>;
|
||||
|
|
@ -1797,8 +1797,12 @@ export type BrowserContextSetOfflineOptions = {
|
|||
|
||||
};
|
||||
export type BrowserContextSetOfflineResult = void;
|
||||
export type BrowserContextStorageStateParams = {};
|
||||
export type BrowserContextStorageStateOptions = {};
|
||||
export type BrowserContextStorageStateParams = {
|
||||
indexedDB: boolean,
|
||||
};
|
||||
export type BrowserContextStorageStateOptions = {
|
||||
|
||||
};
|
||||
export type BrowserContextStorageStateResult = {
|
||||
cookies: NetworkCookie[],
|
||||
origins: OriginStorage[],
|
||||
|
|
|
|||
|
|
@ -1234,6 +1234,8 @@ BrowserContext:
|
|||
offline: boolean
|
||||
|
||||
storageState:
|
||||
parameters:
|
||||
indexedDB: boolean
|
||||
returns:
|
||||
cookies:
|
||||
type: array
|
||||
|
|
|
|||
|
|
@ -436,4 +436,7 @@ it('should support IndexedDB', async ({ page, server, contextFactory }) => {
|
|||
- listitem:
|
||||
- text: /Pet the cat/
|
||||
`);
|
||||
|
||||
|
||||
expect(await context.storageState({ indexedDB: false })).toEqual({ cookies: [], origins: [] });
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue