feat(playwright-core): add remove cookies api

Fix review comments
This commit is contained in:
PaulTriandafilov 2024-03-01 21:39:59 +02:00
parent 32fd26cdff
commit c3f0319942
9 changed files with 21 additions and 19 deletions

View file

@ -1014,6 +1014,7 @@ Returns all open pages in the context.
* since: v1.43 * since: v1.43
Removes cookies from context. Removes cookies from context.
The method will throw an error if either name, domain or path has not been passed.
**Usage** **Usage**
@ -1024,9 +1025,9 @@ await browserContext.removeCookies({ path: '/api/v1' });
await browserContext.removeCookies({ name: 'session-id', domain: 'my-origin.com' }); await browserContext.removeCookies({ name: 'session-id', domain: 'my-origin.com' });
``` ```
### param: BrowserContext.removeCookies.criteria ### param: BrowserContext.removeCookies.filter
* since: v1.43 * since: v1.43
- `criteria` <[Object]> - `filter` <[Object]>
- `name` ?<[string]> - `name` ?<[string]>
- `domain` ?<[string]> - `domain` ?<[string]>
- `path` ?<[string]> - `path` ?<[string]>

View file

@ -269,8 +269,8 @@ export class BrowserContext extends ChannelOwner<channels.BrowserContextChannel>
await this._channel.clearCookies(); await this._channel.clearCookies();
} }
async removeCookies(criteria: network.RemoveNetworkCookieParam): Promise<void> { async removeCookies(filter: network.RemoveNetworkCookieParam): Promise<void> {
await this._channel.removeCookies({ criteria }); await this._channel.removeCookies({ filter });
} }
async grantPermissions(permissions: string[], options?: { origin?: string }): Promise<void> { async grantPermissions(permissions: string[], options?: { origin?: string }): Promise<void> {

View file

@ -829,7 +829,7 @@ scheme.BrowserContextAddInitScriptResult = tOptional(tObject({}));
scheme.BrowserContextClearCookiesParams = tOptional(tObject({})); scheme.BrowserContextClearCookiesParams = tOptional(tObject({}));
scheme.BrowserContextClearCookiesResult = tOptional(tObject({})); scheme.BrowserContextClearCookiesResult = tOptional(tObject({}));
scheme.BrowserContextRemoveCookiesParams = tObject({ scheme.BrowserContextRemoveCookiesParams = tObject({
criteria: tObject({ filter: tObject({
name: tOptional(tString), name: tOptional(tString),
domain: tOptional(tString), domain: tOptional(tString),
path: tOptional(tString), path: tOptional(tString),

View file

@ -276,16 +276,16 @@ export abstract class BrowserContext extends SdkObject {
return await this.doGetCookies(urls as string[]); return await this.doGetCookies(urls as string[]);
} }
async removeCookies(criteria: {name?: string, domain?: string, path?: string}): Promise<void> { async removeCookies(filter: {name?: string, domain?: string, path?: string}): Promise<void> {
if (!criteria.name && !criteria.domain && !criteria.path) if (!filter.name && !filter.domain && !filter.path)
return; throw new Error(`Either name, domain or path are required`);
const currentCookies = await this.cookies(); const currentCookies = await this.cookies();
const cookiesToKeep = currentCookies.filter(cookie => { const cookiesToKeep = currentCookies.filter(cookie => {
return !((!criteria.name || criteria.name === cookie.name) && return !((!filter.name || filter.name === cookie.name) &&
(!criteria.domain || criteria.domain === cookie.domain) && (!filter.domain || filter.domain === cookie.domain) &&
(!criteria.path || criteria.path === cookie.path)); (!filter.path || filter.path === cookie.path));
}); });
await this.clearCookies(); await this.clearCookies();

View file

@ -225,7 +225,7 @@ export class BrowserContextDispatcher extends Dispatcher<BrowserContext, channel
} }
async removeCookies(params: channels.BrowserContextRemoveCookiesParams): Promise<void> { async removeCookies(params: channels.BrowserContextRemoveCookiesParams): Promise<void> {
await this._context.removeCookies(params.criteria); await this._context.removeCookies(params.filter);
} }
async grantPermissions(params: channels.BrowserContextGrantPermissionsParams): Promise<void> { async grantPermissions(params: channels.BrowserContextGrantPermissionsParams): Promise<void> {

View file

@ -8439,7 +8439,7 @@ export interface BrowserContext {
pages(): Array<Page>; pages(): Array<Page>;
/** /**
* Removes cookies from context. * Removes cookies from context. The method will throw an error if either name, domain or path has not been passed.
* *
* **Usage** * **Usage**
* *
@ -8450,9 +8450,9 @@ export interface BrowserContext {
* await browserContext.removeCookies({ name: 'session-id', domain: 'my-origin.com' }); * await browserContext.removeCookies({ name: 'session-id', domain: 'my-origin.com' });
* ``` * ```
* *
* @param criteria * @param filter
*/ */
removeCookies(criteria: { removeCookies(filter: {
name?: string; name?: string;
domain?: string; domain?: string;

View file

@ -1525,7 +1525,7 @@ export type BrowserContextClearCookiesParams = {};
export type BrowserContextClearCookiesOptions = {}; export type BrowserContextClearCookiesOptions = {};
export type BrowserContextClearCookiesResult = void; export type BrowserContextClearCookiesResult = void;
export type BrowserContextRemoveCookiesParams = { export type BrowserContextRemoveCookiesParams = {
criteria: { filter: {
name?: string, name?: string,
domain?: string, domain?: string,
path?: string, path?: string,

View file

@ -1034,7 +1034,7 @@ BrowserContext:
removeCookies: removeCookies:
parameters: parameters:
criteria: filter:
type: object type: object
properties: properties:
name: string? name: string?

View file

@ -209,7 +209,7 @@ it('should remove cookies by name, domain and path', async ({ context, page, ser
expect(await page.evaluate('document.cookie')).toBe('cookie1=1'); expect(await page.evaluate('document.cookie')).toBe('cookie1=1');
}); });
it('should not remove cookies when empty object passed', async ({ context, page, server }) => { it('should throw if empty object is passed', async ({ context, page, server }) => {
await context.addCookies([{ await context.addCookies([{
name: 'cookie1', name: 'cookie1',
value: '1', value: '1',
@ -225,6 +225,7 @@ it('should not remove cookies when empty object passed', async ({ context, page,
]); ]);
await page.goto('https://www.example.com/'); await page.goto('https://www.example.com/');
expect(await page.evaluate('document.cookie')).toBe('cookie1=1; cookie2=2'); expect(await page.evaluate('document.cookie')).toBe('cookie1=1; cookie2=2');
await context.removeCookies({ }); const error = await context.removeCookies({ }).catch(e => e);
expect(error.message).toContain(`Either name, domain or path are required`);
expect(await page.evaluate('document.cookie')).toBe('cookie1=1; cookie2=2'); expect(await page.evaluate('document.cookie')).toBe('cookie1=1; cookie2=2');
}); });