diff --git a/.playwright/scripts/__tests__/network-permissions.e2e.mjs b/.playwright/scripts/__tests__/network-permissions.e2e.mjs new file mode 100644 index 000000000..786dc5467 --- /dev/null +++ b/.playwright/scripts/__tests__/network-permissions.e2e.mjs @@ -0,0 +1,158 @@ +import { Buffer } from 'node:buffer' +import { once } from 'node:events' +import { createServer } from 'node:http' +import path from 'node:path' +import { DatabaseSync } from 'node:sqlite' +import { expect, test, useSyntheticCredentialStorage } from '../fixtures/electron.mjs' + +test('real network requests enforce saved access, file download, redirects and manual takeover', async ({ buddy }, testInfo) => { + const requests = [] + const hits = [] + const server = createServer(async (request, response) => { + if (request.method === 'GET') { + const pathname = new URL(request.url, 'http://permission.example.test').pathname + hits.push(pathname) + if (pathname === '/redirect') { + response.writeHead(302, { location: 'http://redirect.example.test/landing' }).end() + return + } + if (pathname === '/landing') { + response.writeHead(200, { 'content-type': 'text/html' }).end('
+ {{ t(draft ? 'desktop.browser.testDraftDescription' : 'desktop.browser.testHostDescription') }} +
++ {{ t('desktop.browser.invalidHost') }} +
++ {{ normalized }} · {{ matched ? t('desktop.browser.matchedRule', { pattern: matched.pattern }) : t('desktop.browser.matchedDefaults') }} +
++ {{ t('desktop.browser.networkPermissionsDescription') }} +
++ {{ t('desktop.browser.rulePriority') }} +
++ {{ t('desktop.browser.transferBoundary') }} +
++ {{ t('desktop.browser.permissionScope') }} +
++ {{ t('desktop.browser.permissionSaveFailed') }} +
++ {{ t('desktop.browser.ruleLimit') }} +
++ {{ persistentNotice }} +
{{ review.host }} · {{ review.port }}
+ {{ review.command }}
+