From 5d4d256ddffb357f4201c71cda2d8b3bc2591df3 Mon Sep 17 00:00:00 2001 From: Tony Date: Fri, 1 Nov 2024 17:09:22 -0500 Subject: [PATCH] Add missing grantable permissions to Chromium browsers --- docs/src/api/class-browsercontext.md | 5 ++++ .../src/server/chromium/crBrowser.ts | 27 ++++++++++++------- packages/playwright-core/types/types.d.ts | 5 ++++ 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/docs/src/api/class-browsercontext.md b/docs/src/api/class-browsercontext.md index 8d6c57a3e3..923a3277c5 100644 --- a/docs/src/api/class-browsercontext.md +++ b/docs/src/api/class-browsercontext.md @@ -971,8 +971,11 @@ A permission or an array of permissions to grant. Permissions can be one of the * `'camera'` * `'clipboard-read'` * `'clipboard-write'` +* `'display-capture'` * `'geolocation'` * `'gyroscope'` +* `'idle-detection'` +* `'local-fonts'` * `'magnetometer'` * `'microphone'` * `'midi-sysex'` (system-exclusive midi) @@ -980,6 +983,8 @@ A permission or an array of permissions to grant. Permissions can be one of the * `'notifications'` * `'payment-handler'` * `'storage-access'` +* `'usb'` +* `'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 e0409c1b16..4ebb10ed28 100644 --- a/packages/playwright-core/src/server/chromium/crBrowser.ts +++ b/packages/playwright-core/src/server/chromium/crBrowser.ts @@ -418,23 +418,30 @@ export class CRBrowserContext extends BrowserContext { async doGrantPermissions(origin: string, permissions: string[]) { const webPermissionToProtocol = new Map([ - ['geolocation', 'geolocation'], - ['midi', 'midi'], - ['notifications', 'notifications'], - ['camera', 'videoCapture'], - ['microphone', 'audioCapture'], - ['background-sync', 'backgroundSync'], - ['ambient-light-sensor', 'sensors'], + // General permissions ['accelerometer', 'sensors'], - ['gyroscope', 'sensors'], - ['magnetometer', 'sensors'], ['accessibility-events', 'accessibilityEvents'], + ['ambient-light-sensor', 'sensors'], + ['background-sync', 'backgroundSync'], + ['camera', 'videoCapture'], ['clipboard-read', 'clipboardReadWrite'], ['clipboard-write', 'clipboardSanitizedWrite'], + ['display-capture', 'displayCapture'], + ['geolocation', 'geolocation'], + ['gyroscope', 'sensors'], + ['magnetometer', 'sensors'], + ['microphone', 'audioCapture'], + ['midi', 'midi'], + ['notifications', 'notifications'], ['payment-handler', 'paymentHandler'], - // chrome-specific permissions we have. + + // Chrome-specific permissions we have. + ['idle-detection', 'idleDetection'], + ['local-fonts', 'localFonts'], ['midi-sysex', 'midiSysex'], ['storage-access', 'storageAccess'], + ['usb', 'usb'], + ['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 2d4ecc2b7c..f7a752e1c7 100644 --- a/packages/playwright-core/types/types.d.ts +++ b/packages/playwright-core/types/types.d.ts @@ -8969,8 +8969,11 @@ export interface BrowserContext { * - `'camera'` * - `'clipboard-read'` * - `'clipboard-write'` + * - `'display-capture'` * - `'geolocation'` * - `'gyroscope'` + * - `'idle-detection'` + * - `'local-fonts'` * - `'magnetometer'` * - `'microphone'` * - `'midi-sysex'` (system-exclusive midi) @@ -8978,6 +8981,8 @@ export interface BrowserContext { * - `'notifications'` * - `'payment-handler'` * - `'storage-access'` + * - `'usb'` + * - `'window-management'` * @param options */ grantPermissions(permissions: ReadonlyArray, options?: {