Skip to content

Commit f07234d

Browse files
cherry-pick(#39036): fix(msedge): fix local network permissions (#39053)
Co-authored-by: Pavel Feldman <pavel.feldman@gmail.com>
1 parent ab8136c commit f07234d

2 files changed

Lines changed: 19 additions & 8 deletions

File tree

packages/playwright-core/src/server/chromium/crBrowser.ts

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -452,13 +452,25 @@ export class CRBrowserContext extends BrowserContext<CREventsMap> {
452452
['local-fonts', 'localFonts'],
453453
['local-network-access', ['localNetworkAccess', 'localNetwork', 'loopbackNetwork']],
454454
]);
455-
const filtered = permissions.flatMap(permission => {
456-
const protocolPermission = webPermissionToProtocol.get(permission);
457-
if (!protocolPermission)
458-
throw new Error('Unknown permission: ' + permission);
459-
return typeof protocolPermission === 'string' ? [protocolPermission] : protocolPermission;
460-
});
461-
await this._browser._session.send('Browser.grantPermissions', { origin: origin === '*' ? undefined : origin, browserContextId: this._browserContextId, permissions: filtered });
455+
456+
const grantPermissions = async (mapping: Map<string, Protocol.Browser.PermissionType | Protocol.Browser.PermissionType[]>) => {
457+
const filtered = permissions.flatMap(permission => {
458+
const protocolPermission = mapping.get(permission);
459+
if (!protocolPermission)
460+
throw new Error('Unknown permission: ' + permission);
461+
return typeof protocolPermission === 'string' ? [protocolPermission] : protocolPermission;
462+
});
463+
await this._browser._session.send('Browser.grantPermissions', { origin: origin === '*' ? undefined : origin, browserContextId: this._browserContextId, permissions: filtered });
464+
};
465+
466+
try {
467+
await grantPermissions(webPermissionToProtocol);
468+
} catch (e) {
469+
// Old stable browsers dislike the new permission name, so we use the fallback mapping.
470+
const fallbackMapping = new Map(webPermissionToProtocol);
471+
fallbackMapping.set('local-network-access', ['localNetworkAccess']);
472+
await grantPermissions(fallbackMapping);
473+
}
462474
}
463475

464476
async doClearPermissions() {

tests/library/permissions.spec.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,6 @@ it('local network request is allowed from public origin', {
258258
annotation: { type: 'issue', description: 'https://github.com/microsoft/playwright/issues/37861' }
259259
}, async ({ page, context, server, browserName, channel, browserMajorVersion }) => {
260260
it.skip(browserName === 'webkit');
261-
it.skip(channel?.startsWith('msedge'));
262261
it.skip(browserName === 'chromium' && browserMajorVersion < 145, 'local-network-access permission support has changed between versions');
263262

264263
if (browserName === 'chromium')

0 commit comments

Comments
 (0)