feat(chromium): storage-access permission (#31239)
Fixes https://github.com/microsoft/playwright/issues/31227
This commit is contained in:
parent
f95b4e0ac8
commit
c08000b967
|
|
@ -1044,21 +1044,22 @@ specified.
|
||||||
- `permissions` <[Array]<[string]>>
|
- `permissions` <[Array]<[string]>>
|
||||||
|
|
||||||
A permission or an array of permissions to grant. Permissions can be one of the following values:
|
A permission or an array of permissions to grant. Permissions can be one of the following values:
|
||||||
* `'geolocation'`
|
|
||||||
* `'midi'`
|
|
||||||
* `'midi-sysex'` (system-exclusive midi)
|
|
||||||
* `'notifications'`
|
|
||||||
* `'camera'`
|
|
||||||
* `'microphone'`
|
|
||||||
* `'background-sync'`
|
|
||||||
* `'ambient-light-sensor'`
|
|
||||||
* `'accelerometer'`
|
* `'accelerometer'`
|
||||||
* `'gyroscope'`
|
|
||||||
* `'magnetometer'`
|
|
||||||
* `'accessibility-events'`
|
* `'accessibility-events'`
|
||||||
|
* `'ambient-light-sensor'`
|
||||||
|
* `'background-sync'`
|
||||||
|
* `'camera'`
|
||||||
* `'clipboard-read'`
|
* `'clipboard-read'`
|
||||||
* `'clipboard-write'`
|
* `'clipboard-write'`
|
||||||
|
* `'geolocation'`
|
||||||
|
* `'gyroscope'`
|
||||||
|
* `'magnetometer'`
|
||||||
|
* `'microphone'`
|
||||||
|
* `'midi-sysex'` (system-exclusive midi)
|
||||||
|
* `'midi'`
|
||||||
|
* `'notifications'`
|
||||||
* `'payment-handler'`
|
* `'payment-handler'`
|
||||||
|
* `'storage-access'`
|
||||||
|
|
||||||
### option: BrowserContext.grantPermissions.origin
|
### option: BrowserContext.grantPermissions.origin
|
||||||
* since: v1.8
|
* since: v1.8
|
||||||
|
|
|
||||||
|
|
@ -433,6 +433,7 @@ export class CRBrowserContext extends BrowserContext {
|
||||||
['payment-handler', 'paymentHandler'],
|
['payment-handler', 'paymentHandler'],
|
||||||
// chrome-specific permissions we have.
|
// chrome-specific permissions we have.
|
||||||
['midi-sysex', 'midiSysex'],
|
['midi-sysex', 'midiSysex'],
|
||||||
|
['storage-access', 'storageAccess'],
|
||||||
]);
|
]);
|
||||||
const filtered = permissions.map(permission => {
|
const filtered = permissions.map(permission => {
|
||||||
const protocolPermission = webPermissionToProtocol.get(permission);
|
const protocolPermission = webPermissionToProtocol.get(permission);
|
||||||
|
|
|
||||||
21
packages/playwright-core/types/types.d.ts
vendored
21
packages/playwright-core/types/types.d.ts
vendored
|
|
@ -8516,21 +8516,22 @@ export interface BrowserContext {
|
||||||
* Grants specified permissions to the browser context. Only grants corresponding permissions to the given origin if
|
* Grants specified permissions to the browser context. Only grants corresponding permissions to the given origin if
|
||||||
* specified.
|
* specified.
|
||||||
* @param permissions A permission or an array of permissions to grant. Permissions can be one of the following values:
|
* @param permissions A permission or an array of permissions to grant. Permissions can be one of the following values:
|
||||||
* - `'geolocation'`
|
|
||||||
* - `'midi'`
|
|
||||||
* - `'midi-sysex'` (system-exclusive midi)
|
|
||||||
* - `'notifications'`
|
|
||||||
* - `'camera'`
|
|
||||||
* - `'microphone'`
|
|
||||||
* - `'background-sync'`
|
|
||||||
* - `'ambient-light-sensor'`
|
|
||||||
* - `'accelerometer'`
|
* - `'accelerometer'`
|
||||||
* - `'gyroscope'`
|
|
||||||
* - `'magnetometer'`
|
|
||||||
* - `'accessibility-events'`
|
* - `'accessibility-events'`
|
||||||
|
* - `'ambient-light-sensor'`
|
||||||
|
* - `'background-sync'`
|
||||||
|
* - `'camera'`
|
||||||
* - `'clipboard-read'`
|
* - `'clipboard-read'`
|
||||||
* - `'clipboard-write'`
|
* - `'clipboard-write'`
|
||||||
|
* - `'geolocation'`
|
||||||
|
* - `'gyroscope'`
|
||||||
|
* - `'magnetometer'`
|
||||||
|
* - `'microphone'`
|
||||||
|
* - `'midi-sysex'` (system-exclusive midi)
|
||||||
|
* - `'midi'`
|
||||||
|
* - `'notifications'`
|
||||||
* - `'payment-handler'`
|
* - `'payment-handler'`
|
||||||
|
* - `'storage-access'`
|
||||||
* @param options
|
* @param options
|
||||||
*/
|
*/
|
||||||
grantPermissions(permissions: ReadonlyArray<string>, options?: {
|
grantPermissions(permissions: ReadonlyArray<string>, options?: {
|
||||||
|
|
|
||||||
|
|
@ -172,3 +172,29 @@ it('should support clipboard read', async ({ page, context, server, browserName,
|
||||||
await page.evaluate(() => navigator.clipboard.writeText('test content'));
|
await page.evaluate(() => navigator.clipboard.writeText('test content'));
|
||||||
expect(await page.evaluate(() => navigator.clipboard.readText())).toBe('test content');
|
expect(await page.evaluate(() => navigator.clipboard.readText())).toBe('test content');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('storage access', {
|
||||||
|
annotation: { type: 'issue', description: 'https://github.com/microsoft/playwright/issues/31227' }
|
||||||
|
}, async ({ page, context, server, browserName }) => {
|
||||||
|
it.fixme(browserName !== 'chromium');
|
||||||
|
await context.grantPermissions(['storage-access']);
|
||||||
|
expect(await getPermission(page, 'storage-access')).toBe('granted');
|
||||||
|
server.setRoute('/set-cookie.html', (req, res) => {
|
||||||
|
res.setHeader('Set-Cookie', 'name=value; Path=/; SameSite=Strict; Secure');
|
||||||
|
res.end();
|
||||||
|
});
|
||||||
|
server.setRoute('/my-frame.html', (req, res) => {
|
||||||
|
res.setHeader('Content-type', 'text/html');
|
||||||
|
res.end(`<iframe src="${server.CROSS_PROCESS_PREFIX + '/empty.html'}"></iframe>`);
|
||||||
|
});
|
||||||
|
|
||||||
|
// Navigate once to the domain as top level.
|
||||||
|
await page.goto(server.CROSS_PROCESS_PREFIX + '/set-cookie.html');
|
||||||
|
await page.goto(server.PREFIX + '/my-frame.html');
|
||||||
|
|
||||||
|
const frame = page.frames()[1];
|
||||||
|
expect(await getPermission(frame, 'storage-access')).toBe('granted');
|
||||||
|
const access = await frame.evaluate(() => document.requestStorageAccess().then(() => true, () => false));
|
||||||
|
expect(access).toBe(true);
|
||||||
|
expect(await frame.evaluate(() => document.hasStorageAccess())).toBe(true);
|
||||||
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue