diff --git a/package.json b/package.json index 35d2f0609a..2abe96a618 100644 --- a/package.json +++ b/package.json @@ -110,6 +110,7 @@ "is-ci": "^1.0.10", "is-docker": "^2.0.0", "is-glob": "^2.0.1", + "is-podman": "^1.0.1", "is-stream": "^2.0.0", "json5": "^2.1.0", "lodash": "^4.17.13", diff --git a/src/browser/provider/built-in/dedicated/chrome/build-chrome-args.js b/src/browser/provider/built-in/dedicated/chrome/build-chrome-args.js index 98d04612c1..f438d5b0bc 100644 --- a/src/browser/provider/built-in/dedicated/chrome/build-chrome-args.js +++ b/src/browser/provider/built-in/dedicated/chrome/build-chrome-args.js @@ -1,6 +1,6 @@ -export const IN_DOCKER_FLAGS = ['--no-sandbox', '--disable-dev-shm-usage']; +export const CONTAINERIZED_CHROME_FLAGS = ['--no-sandbox', '--disable-dev-shm-usage']; -export function buildChromeArgs ({ config, cdpPort, platformArgs, tempProfileDir, inDocker }) { +export function buildChromeArgs ({ config, cdpPort, platformArgs, tempProfileDir, isContainerized }) { let chromeArgs = [] .concat( cdpPort ? [`--remote-debugging-port=${cdpPort}`] : [], @@ -11,10 +11,10 @@ export function buildChromeArgs ({ config, cdpPort, platformArgs, tempProfileDir ) .join(' '); - if (inDocker) { - IN_DOCKER_FLAGS.forEach(inDockerFlag => { - if (!chromeArgs.includes(inDockerFlag)) - chromeArgs = chromeArgs.concat(' ', inDockerFlag); + if (isContainerized) { + CONTAINERIZED_CHROME_FLAGS.forEach(flag => { + if (!chromeArgs.includes(flag)) + chromeArgs = chromeArgs.concat(' ', flag); }); } diff --git a/src/browser/provider/built-in/dedicated/chrome/index.js b/src/browser/provider/built-in/dedicated/chrome/index.js index 8541aeb110..e7bc279a86 100644 --- a/src/browser/provider/built-in/dedicated/chrome/index.js +++ b/src/browser/provider/built-in/dedicated/chrome/index.js @@ -68,7 +68,7 @@ export default { }; //NOTE: A not-working tab is opened when the browser start in the docker so we should create a new tab. - if (runtimeInfo.inDocker) + if (runtimeInfo.isContainerized) await startLocalChromeOnDocker(pageUrl, runtimeInfo); else await startLocalChrome(pageUrl, runtimeInfo); diff --git a/src/browser/provider/built-in/dedicated/chrome/local-chrome.js b/src/browser/provider/built-in/dedicated/chrome/local-chrome.js index c63f9d5187..677f6f400d 100644 --- a/src/browser/provider/built-in/dedicated/chrome/local-chrome.js +++ b/src/browser/provider/built-in/dedicated/chrome/local-chrome.js @@ -11,11 +11,11 @@ const browserStarter = new BrowserStarter(); const LIST_TABS_TIMEOUT = 10000; const LIST_TABS_DELAY = 500; -export async function start (pageUrl, { browserName, config, cdpPort, tempProfileDir, inDocker }) { +export async function start (pageUrl, { browserName, config, cdpPort, tempProfileDir, isContainerized }) { const chromeInfo = await browserTools.getBrowserInfo(config.path || browserName); const chromeOpenParameters = Object.assign({}, chromeInfo); - chromeOpenParameters.cmd = buildChromeArgs({ config, cdpPort, platformArgs: chromeOpenParameters.cmd, tempProfileDir, inDocker }); + chromeOpenParameters.cmd = buildChromeArgs({ config, cdpPort, platformArgs: chromeOpenParameters.cmd, tempProfileDir, isContainerized }); await browserStarter.startBrowser(chromeOpenParameters, pageUrl); } @@ -29,8 +29,8 @@ async function tryListTabs (cdpPort) { } } -export async function startOnDocker (pageUrl, { browserName, config, cdpPort, tempProfileDir, inDocker }) { - await start('', { browserName, config, cdpPort, tempProfileDir, inDocker }); +export async function startOnDocker (pageUrl, { browserName, config, cdpPort, tempProfileDir, isContainerized }) { + await start('', { browserName, config, cdpPort, tempProfileDir, isContainerized }); let { tabs, error } = await tryListTabs(cdpPort); const timer = new Timer(LIST_TABS_TIMEOUT); diff --git a/src/browser/provider/built-in/dedicated/chrome/runtime-info.ts b/src/browser/provider/built-in/dedicated/chrome/runtime-info.ts index aa97e4bb2c..3a27809a35 100644 --- a/src/browser/provider/built-in/dedicated/chrome/runtime-info.ts +++ b/src/browser/provider/built-in/dedicated/chrome/runtime-info.ts @@ -1,6 +1,7 @@ import { getFreePort } from 'endpoint-utils'; import createTempProfile from './create-temp-profile'; import isDocker from 'is-docker'; +import isPodman from 'is-podman'; import TempDirectory from '../../../../../utils/temp-directory'; import { Config } from './interfaces'; @@ -8,14 +9,14 @@ export default class ChromeRuntimeInfo { public config: Config; public tempProfileDir: null | TempDirectory; public cdpPort: number; - public inDocker: boolean; + public isContainerized: boolean; public browserName?: string; protected constructor (config: Config) { - this.config = config; - this.tempProfileDir = null; - this.cdpPort = this.config.cdpPort; - this.inDocker = isDocker(); + this.config = config; + this.tempProfileDir = null; + this.cdpPort = this.config.cdpPort; + this.isContainerized = isDocker() || isPodman(); } protected async createTempProfile (proxyHostName: string, disableMultipleWindows: boolean): Promise { diff --git a/test/server/util-test.js b/test/server/util-test.js index 84fec03afc..3f840d6810 100644 --- a/test/server/util-test.js +++ b/test/server/util-test.js @@ -31,7 +31,7 @@ const { } = require('../../lib/errors/test-run/utils'); const { buildChromeArgs, - IN_DOCKER_FLAGS, + CONTAINERIZED_CHROME_FLAGS, } = require('../../lib/browser/provider/built-in/dedicated/chrome/build-chrome-args'); describe('Utils', () => { @@ -586,26 +586,32 @@ describe('Utils', () => { let chromeArgs = ''; - const IN_DOCKER_FLAGS_RE = new RegExp(IN_DOCKER_FLAGS.join(' ')); + const IN_DOCKER_FLAGS_RE = new RegExp(CONTAINERIZED_CHROME_FLAGS.join(' ')); const SANDBOX_FLAG_RE = new RegExp('--no-sandbox'); const DISABLE_DEV_SHM_USAGE_RE = new RegExp('--disable-dev-shm-usage'); - let inDockerFlagMatch = null; - chromeArgs = buildChromeArgs({ config, cdpPort, platformArgs, tempProfileDir, inDocker: false }); - inDockerFlagMatch = chromeArgs.match(IN_DOCKER_FLAGS_RE); - expect(inDockerFlagMatch).eql(null); + let containerizedChromeFlags = null; - chromeArgs = buildChromeArgs({ config, cdpPort, platformArgs, tempProfileDir, inDocker: true }); - inDockerFlagMatch = chromeArgs.match(IN_DOCKER_FLAGS_RE); - expect(inDockerFlagMatch.length).eql(1); + chromeArgs = buildChromeArgs({ config, cdpPort, platformArgs, tempProfileDir, isContainerized: false }); + containerizedChromeFlags = chromeArgs.match(IN_DOCKER_FLAGS_RE); + + expect(containerizedChromeFlags).eql(null); + + chromeArgs = buildChromeArgs({ config, cdpPort, platformArgs, tempProfileDir, isContainerized: true }); + containerizedChromeFlags = chromeArgs.match(IN_DOCKER_FLAGS_RE); + + expect(containerizedChromeFlags.length).eql(1); // NOTE: Flag should not be duplicated - config.userArgs = '--no-sandbox --disable-dev-shm-usage'; - chromeArgs = buildChromeArgs({ config, cdpPort, platformArgs, tempProfileDir, inDocker: true }); - inDockerFlagMatch = chromeArgs.match(SANDBOX_FLAG_RE); - expect(inDockerFlagMatch.length).eql(1); - inDockerFlagMatch = chromeArgs.match(DISABLE_DEV_SHM_USAGE_RE); - expect(inDockerFlagMatch.length).eql(1); + config.userArgs = '--no-sandbox --disable-dev-shm-usage'; + chromeArgs = buildChromeArgs({ config, cdpPort, platformArgs, tempProfileDir, isContainerized: true }); + containerizedChromeFlags = chromeArgs.match(SANDBOX_FLAG_RE); + + expect(containerizedChromeFlags.length).eql(1); + + containerizedChromeFlags = chromeArgs.match(DISABLE_DEV_SHM_USAGE_RE); + + expect(containerizedChromeFlags.length).eql(1); }); describe('Create temporary profile for the Google Chrome browser', () => {