diff --git a/docs/src/api/class-browsercontext.md b/docs/src/api/class-browsercontext.md index 48542a2603..e5ccf7b5ce 100644 --- a/docs/src/api/class-browsercontext.md +++ b/docs/src/api/class-browsercontext.md @@ -980,6 +980,7 @@ A permission or an array of permissions to grant. Permissions can be one of the * `'notifications'` * `'payment-handler'` * `'storage-access'` +* `'window-management'` ### option: BrowserContext.grantPermissions.origin * since: v1.8 diff --git a/packages/playwright-core/src/server/chromium/crBrowser.ts b/packages/playwright-core/src/server/chromium/crBrowser.ts index 777ff2eee8..9d1e672132 100644 --- a/packages/playwright-core/src/server/chromium/crBrowser.ts +++ b/packages/playwright-core/src/server/chromium/crBrowser.ts @@ -434,6 +434,7 @@ export class CRBrowserContext extends BrowserContext { // chrome-specific permissions we have. ['midi-sysex', 'midiSysex'], ['storage-access', 'storageAccess'], + ['window-management', 'windowManagement'] ]); const filtered = permissions.map(permission => { const protocolPermission = webPermissionToProtocol.get(permission); diff --git a/packages/playwright-core/types/types.d.ts b/packages/playwright-core/types/types.d.ts index f9e25c8c40..fc468defe0 100644 --- a/packages/playwright-core/types/types.d.ts +++ b/packages/playwright-core/types/types.d.ts @@ -8472,6 +8472,7 @@ export interface BrowserContext { * - `'notifications'` * - `'payment-handler'` * - `'storage-access'` + * - `'window-management'` * @param options */ grantPermissions(permissions: ReadonlyArray, options?: { diff --git a/tests/library/permissions.spec.ts b/tests/library/permissions.spec.ts index ac2ec7a0b5..7e77bba10f 100644 --- a/tests/library/permissions.spec.ts +++ b/tests/library/permissions.spec.ts @@ -48,6 +48,14 @@ it.describe('permissions', () => { expect(await getPermission(page, 'geolocation')).toBe('granted'); }); + it('should grant window-management permission when origin is listed', async ({ page, context, server, browserName }) => { + it.fail(browserName === 'firefox'); + + await page.goto(server.EMPTY_PAGE); + await context.grantPermissions(['window-management'], { origin: server.EMPTY_PAGE }); + expect(await getPermission(page, 'window-management')).toBe('granted'); + }); + it('should prompt for geolocation permission when origin is not listed', async ({ page, context, server }) => { await page.goto(server.EMPTY_PAGE); await context.grantPermissions(['geolocation'], { origin: server.EMPTY_PAGE });