diff --git a/src/common/Browser.ts b/src/common/Browser.ts index e3b6a241194ba..a61ccc5160e03 100644 --- a/src/common/Browser.ts +++ b/src/common/Browser.ts @@ -26,6 +26,52 @@ import { Viewport } from './PuppeteerViewport.js'; type BrowserCloseCallback = () => Promise | void; +const WEB_PERMISSION_TO_PROTOCOL_PERMISSION = new Map< + Permission, + Protocol.Browser.PermissionType +>([ + ['geolocation', 'geolocation'], + ['midi', 'midi'], + ['notifications', 'notifications'], + // TODO: push isn't a valid type? + // ['push', 'push'], + ['camera', 'videoCapture'], + ['microphone', 'audioCapture'], + ['background-sync', 'backgroundSync'], + ['ambient-light-sensor', 'sensors'], + ['accelerometer', 'sensors'], + ['gyroscope', 'sensors'], + ['magnetometer', 'sensors'], + ['accessibility-events', 'accessibilityEvents'], + ['clipboard-read', 'clipboardReadWrite'], + ['clipboard-write', 'clipboardReadWrite'], + ['payment-handler', 'paymentHandler'], + ['idle-detection', 'idleDetection'], + // chrome-specific permissions we have. + ['midi-sysex', 'midiSysex'], +]); + +/** + * @public + */ +export type Permission = + | 'geolocation' + | 'midi' + | 'notifications' + | 'camera' + | 'microphone' + | 'background-sync' + | 'ambient-light-sensor' + | 'accelerometer' + | 'gyroscope' + | 'magnetometer' + | 'accessibility-events' + | 'clipboard-read' + | 'clipboard-write' + | 'payment-handler' + | 'idle-detection' + | 'midi-sysex'; + /** * @public */ @@ -650,34 +696,12 @@ export class BrowserContext extends EventEmitter { */ async overridePermissions( origin: string, - permissions: string[] + permissions: Permission[] ): Promise { - const webPermissionToProtocol = new Map< - string, - Protocol.Browser.PermissionType - >([ - ['geolocation', 'geolocation'], - ['midi', 'midi'], - ['notifications', 'notifications'], - // TODO: push isn't a valid type? - // ['push', 'push'], - ['camera', 'videoCapture'], - ['microphone', 'audioCapture'], - ['background-sync', 'backgroundSync'], - ['ambient-light-sensor', 'sensors'], - ['accelerometer', 'sensors'], - ['gyroscope', 'sensors'], - ['magnetometer', 'sensors'], - ['accessibility-events', 'accessibilityEvents'], - ['clipboard-read', 'clipboardReadWrite'], - ['clipboard-write', 'clipboardReadWrite'], - ['payment-handler', 'paymentHandler'], - ['idle-detection', 'idleDetection'], - // chrome-specific permissions we have. - ['midi-sysex', 'midiSysex'], - ]); const protocolPermissions = permissions.map((permission) => { - const protocolPermission = webPermissionToProtocol.get(permission); + const protocolPermission = WEB_PERMISSION_TO_PROTOCOL_PERMISSION.get( + permission + ); if (!protocolPermission) throw new Error('Unknown permission: ' + permission); return protocolPermission; diff --git a/test/page.spec.ts b/test/page.spec.ts index b190518fcc7b5..ca41d9d25ed27 100644 --- a/test/page.spec.ts +++ b/test/page.spec.ts @@ -260,6 +260,7 @@ describe('Page', function () { await page.goto(server.EMPTY_PAGE); let error = null; await context + // @ts-expect-error purposeful bad input for test .overridePermissions(server.EMPTY_PAGE, ['foo']) .catch((error_) => (error = error_)); expect(error.message).toBe('Unknown permission: foo'); diff --git a/utils/doclint/check_public_api/index.js b/utils/doclint/check_public_api/index.js index 13900c7637914..bc0bf9ec3e755 100644 --- a/utils/doclint/check_public_api/index.js +++ b/utils/doclint/check_public_api/index.js @@ -857,6 +857,13 @@ function compareDocumentations(actual, expected) { '"none"|"achromatopsia"|"blurredVision"|"deuteranopia"|"protanopia"|"tritanopia"', }, ], + [ + 'Method BrowserContext.overridePermissions() permissions', + { + actualName: 'Array', + expectedName: 'Array', + }, + ], ]); const expectedForSource = expectedNamingMismatches.get(source);