From 66b4d774d7579a2c1b5c9edea393c54573f0f936 Mon Sep 17 00:00:00 2001 From: Dmitry Gozman Date: Wed, 11 Feb 2026 14:46:56 +0000 Subject: [PATCH] feat: add "screen-wake-lock" permission --- docs/src/api/class-browsercontext.md | 1 + packages/playwright-client/types/types.d.ts | 1 + .../playwright-core/src/server/chromium/crBrowser.ts | 1 + packages/playwright-core/src/server/firefox/ffBrowser.ts | 3 ++- packages/playwright-core/src/server/webkit/wkPage.ts | 1 + packages/playwright-core/types/types.d.ts | 1 + tests/library/permissions.spec.ts | 9 +++++++++ 7 files changed, 16 insertions(+), 1 deletion(-) diff --git a/docs/src/api/class-browsercontext.md b/docs/src/api/class-browsercontext.md index 8c4ec83ff4963..384ae34abba0a 100644 --- a/docs/src/api/class-browsercontext.md +++ b/docs/src/api/class-browsercontext.md @@ -957,6 +957,7 @@ Here are some permissions that may be supported by some browsers: * `'notifications'` * `'payment-handler'` * `'storage-access'` +* `'screen-wake-lock'` ### option: BrowserContext.grantPermissions.origin * since: v1.8 diff --git a/packages/playwright-client/types/types.d.ts b/packages/playwright-client/types/types.d.ts index 18f9f5e3e5e3d..53e2e81d8b166 100644 --- a/packages/playwright-client/types/types.d.ts +++ b/packages/playwright-client/types/types.d.ts @@ -9339,6 +9339,7 @@ export interface BrowserContext { * - `'notifications'` * - `'payment-handler'` * - `'storage-access'` + * - `'screen-wake-lock'` * @param options */ grantPermissions(permissions: ReadonlyArray, options?: { diff --git a/packages/playwright-core/src/server/chromium/crBrowser.ts b/packages/playwright-core/src/server/chromium/crBrowser.ts index 83cb12d2eec47..af659066a15f8 100644 --- a/packages/playwright-core/src/server/chromium/crBrowser.ts +++ b/packages/playwright-core/src/server/chromium/crBrowser.ts @@ -451,6 +451,7 @@ export class CRBrowserContext extends BrowserContext { ['storage-access', 'storageAccess'], ['local-fonts', 'localFonts'], ['local-network-access', ['localNetworkAccess', 'localNetwork', 'loopbackNetwork']], + ['screen-wake-lock', 'wakeLockScreen'], ]); const grantPermissions = async (mapping: Map) => { diff --git a/packages/playwright-core/src/server/firefox/ffBrowser.ts b/packages/playwright-core/src/server/firefox/ffBrowser.ts index 1e2cd07d15fd7..6777e982bed70 100644 --- a/packages/playwright-core/src/server/firefox/ffBrowser.ts +++ b/packages/playwright-core/src/server/firefox/ffBrowser.ts @@ -290,11 +290,12 @@ export class FFBrowserContext extends BrowserContext { } async doGrantPermissions(origin: string, permissions: string[]) { - const webPermissionToProtocol = new Map([ + const webPermissionToProtocol = new Map([ ['geolocation', 'geo'], ['persistent-storage', 'persistent-storage'], ['push', 'push'], ['notifications', 'desktop-notification'], + ['screen-wake-lock', 'screen-wake-lock'], ]); const filtered = permissions.map(permission => { const protocolPermission = webPermissionToProtocol.get(permission); diff --git a/packages/playwright-core/src/server/webkit/wkPage.ts b/packages/playwright-core/src/server/webkit/wkPage.ts index 04de0bda667e6..f5738b703ff8e 100644 --- a/packages/playwright-core/src/server/webkit/wkPage.ts +++ b/packages/playwright-core/src/server/webkit/wkPage.ts @@ -1213,6 +1213,7 @@ export class WKPage implements PageDelegate { ['geolocation', 'geolocation'], ['notifications', 'notifications'], ['clipboard-read', 'clipboard-read'], + ['screen-wake-lock', 'screen-wake-lock'], ]); 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 18f9f5e3e5e3d..53e2e81d8b166 100644 --- a/packages/playwright-core/types/types.d.ts +++ b/packages/playwright-core/types/types.d.ts @@ -9339,6 +9339,7 @@ export interface BrowserContext { * - `'notifications'` * - `'payment-handler'` * - `'storage-access'` + * - `'screen-wake-lock'` * @param options */ grantPermissions(permissions: ReadonlyArray, options?: { diff --git a/tests/library/permissions.spec.ts b/tests/library/permissions.spec.ts index c62e90f6baf92..3e849c24be72f 100644 --- a/tests/library/permissions.spec.ts +++ b/tests/library/permissions.spec.ts @@ -316,3 +316,12 @@ it('local network request is allowed from public origin', { `POST ${server.CROSS_PROCESS_PREFIX}/cors`, ]); }); + +it('can request screen-wake-lock', { + annotation: { type: 'issue', description: 'https://github.com/microsoft/playwright/issues/39115' } +}, async ({ page, context }) => { + await context.grantPermissions(['screen-wake-lock']); + await page.route('**/*', route => route.fulfill({ status: 200, body: '
Hello there!
', contentType: 'text/html' })); + await page.goto('https://example.com'); + await page.evaluate(() => navigator.wakeLock.request('screen')); +});