Skip to content

Commit

Permalink
fix: expose puppeteer.Permission type (#6856)
Browse files Browse the repository at this point in the history
* fix: expose puppeteer.Permission type

A regression in our own types when compared to @types/puppeteer - we
needed to expose the permissons.
  • Loading branch information
jackfranklin committed Feb 11, 2021
1 parent ad59357 commit a5e174f
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 26 deletions.
76 changes: 50 additions & 26 deletions src/common/Browser.ts
Expand Up @@ -26,6 +26,52 @@ import { Viewport } from './PuppeteerViewport.js';

type BrowserCloseCallback = () => Promise<void> | 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
*/
Expand Down Expand Up @@ -650,34 +696,12 @@ export class BrowserContext extends EventEmitter {
*/
async overridePermissions(
origin: string,
permissions: string[]
permissions: Permission[]
): Promise<void> {
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;
Expand Down
1 change: 1 addition & 0 deletions test/page.spec.ts
Expand Up @@ -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');
Expand Down
7 changes: 7 additions & 0 deletions utils/doclint/check_public_api/index.js
Expand Up @@ -857,6 +857,13 @@ function compareDocumentations(actual, expected) {
'"none"|"achromatopsia"|"blurredVision"|"deuteranopia"|"protanopia"|"tritanopia"',
},
],
[
'Method BrowserContext.overridePermissions() permissions',
{
actualName: 'Array<string>',
expectedName: 'Array<Permission>',
},
],
]);

const expectedForSource = expectedNamingMismatches.get(source);
Expand Down

0 comments on commit a5e174f

Please sign in to comment.