feat(remote): send browser/channel/headless in a header (#12205)

This commit is contained in:
Dmitry Gozman 2022-02-18 07:54:33 -08:00 committed by GitHub
parent 34eec7eae7
commit edac84d072
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 15 additions and 7 deletions

View file

@ -141,9 +141,9 @@ class Connection {
if (browser)
return await this._initPreLaunchedBrowserMode(scope, browser);
const url = new URL('http://localhost' + (request.url || ''));
const browserHeader = request.headers['X-Playwright-Browser'];
const browserHeader = request.headers['x-playwright-browser'];
const browserAlias = url.searchParams.get('browser') || (Array.isArray(browserHeader) ? browserHeader[0] : browserHeader);
const proxyHeader = request.headers['X-Playwright-Proxy'];
const proxyHeader = request.headers['x-playwright-proxy'];
const proxyValue = url.searchParams.get('proxy') || (Array.isArray(proxyHeader) ? proxyHeader[0] : proxyHeader);
if (!browserAlias)
return await this._initPlaywrightConnectMode(scope, enableSocksProxy && proxyValue === '*');

View file

@ -106,11 +106,18 @@ export const test = _baseTest.extend<TestFixtures, WorkerFixtures>({
(browserType as any)._defaultLaunchOptions = undefined;
}, { scope: 'worker', auto: true }],
browser: [async ({ playwright, browserName, connectOptions }, use) => {
browser: [async ({ playwright, browserName, channel, headless, connectOptions }, use) => {
if (!['chromium', 'firefox', 'webkit'].includes(browserName))
throw new Error(`Unexpected browserName "${browserName}", must be one of "chromium", "firefox" or "webkit"`);
if (connectOptions) {
const browser = await playwright[browserName].connect(connectOptions);
const browser = await playwright[browserName].connect({
wsEndpoint: connectOptions.wsEndpoint,
headers: {
'x-playwright-browser': channel || browserName,
'x-playwright-headless': headless ? '1' : '0',
...connectOptions.headers,
}
});
await use(browser);
await browser.close();
return;

View file

@ -59,6 +59,7 @@ const config: Config<CoverageWorkerOptions & PlaywrightWorkerOptions & Playwrigh
['html', { open: 'on-failure' }]
],
projects: [],
use: {},
};
if (mode === 'service') {
@ -75,6 +76,9 @@ if (mode === 'service2') {
port: 3333,
reuseExistingServer: true,
};
config.use.connectOptions = {
wsEndpoint: 'ws://localhost:3333/',
};
}
const browserNames = ['chromium', 'webkit', 'firefox'] as BrowserName[];
@ -101,9 +105,6 @@ for (const browserName of browserNames) {
},
trace: trace ? 'on' : undefined,
coverageName: browserName,
connectOptions: mode === 'service2' ? {
wsEndpoint: 'ws://localhost:3333/?browser=' + (channel || browserName),
} : undefined,
},
metadata: {
platform: process.platform,