From a163a3cb8ac6c73b53d2c67a6dbc7581e5173951 Mon Sep 17 00:00:00 2001 From: Sina Kh Date: Wed, 22 Sep 2021 08:19:28 +0200 Subject: [PATCH 1/7] bug-1979 partial fix --- src/extension-runners/chromium.js | 41 ++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/src/extension-runners/chromium.js b/src/extension-runners/chromium.js index 4fad5d4c81..400e014c8f 100644 --- a/src/extension-runners/chromium.js +++ b/src/extension-runners/chromium.js @@ -217,9 +217,18 @@ export class ChromiumExtensionRunner { if (this.params.startUrl) { const startingUrls = Array.isArray(this.params.startUrl) ? this.params.startUrl : [this.params.startUrl]; + + var isStartUrlExtensions = false; + for (let i = 0; i < startingUrls.length; i++) { + if (startingUrls[i].toLowerCase() === 'chrome://extensions') { + isStartUrlExtensions = true; + startingUrls.splice(i, 1) + } + } + startingUrl = startingUrls.shift(); chromeFlags.push(...startingUrls); - } + } this.chromiumInstance = await this.chromiumLaunch({ enableExtensions: true, @@ -231,6 +240,10 @@ export class ChromiumExtensionRunner { ignoreDefaultFlags: true, }); + if (isStartUrlExtensions) { + await this.openTabWithExtensionsUrl() + } + this.chromiumInstance.process.once('close', () => { this.chromiumInstance = null; @@ -341,6 +354,14 @@ export class ChromiumExtensionRunner { await Promise.all(devExtensions.map(ext => reloadExtension(ext.id))); ws.send(JSON.stringify({ type: 'webExtReloadExtensionComplete' })); } + if (msg.type === 'webExtOpenTabWithExtensionsUrl') { + chrome.tabs.create({ + url: 'chrome://extensions' + }); + + ws.send(JSON.stringify({ type: 'webExtReloadExtensionForURLComplete' })); + } + }; })()`; @@ -366,6 +387,24 @@ export class ChromiumExtensionRunner { return [{runnerName}]; } + /** + * Opens a new tab in chrome with url chrome://extensions by communicating with bg extension + */ + async openTabWithExtensionsUrl(): Promise> { + + const runnerName = this.getName(); + + await this.wssBroadcast({ + type: 'webExtOpenTabWithExtensionsUrl', + }); + + process.stdout.write( + `\rExtension opened with tab for chrome://extension URL: ${(new Date()).toTimeString()}`); + log.debug('\n'); + + return [{runnerName}]; + } + /** * Reloads a single extension, collect any reload error and resolves to * an array composed by a single ExtensionRunnerReloadResult object. From 2f86d4a552c54bcaab5a7d990594c34635ecb14a Mon Sep 17 00:00:00 2001 From: Sina Kh Date: Tue, 28 Sep 2021 19:52:11 +0200 Subject: [PATCH 2/7] fix: Fixed Chrome Not Opening Extensions Pages provided in URL --- src/extension-runners/chromium.js | 77 ++++++++++++++----------------- 1 file changed, 35 insertions(+), 42 deletions(-) diff --git a/src/extension-runners/chromium.js b/src/extension-runners/chromium.js index 400e014c8f..d1f46eba6c 100644 --- a/src/extension-runners/chromium.js +++ b/src/extension-runners/chromium.js @@ -150,8 +150,28 @@ export class ChromiumExtensionRunner { }); }); + const chromeFlags = [...DEFAULT_CHROME_FLAGS]; + let startingUrl; + var specialStartingUrls = ''; + if (this.params.startUrl) { + const startingUrls = Array.isArray(this.params.startUrl) ? + this.params.startUrl : [this.params.startUrl]; + + // Remove URLs starting with chrome:// from startingUrls and let bg.js open them instead + for (let i = 0; i < startingUrls.length; i++) { + if (startingUrls[i].toLowerCase().startsWith('chrome://')) { + specialStartingUrls += startingUrls[i] + " " + startingUrls.splice(i, 1) + } + } + + startingUrl = startingUrls.shift(); + + chromeFlags.push(...startingUrls); + } + // Create the extension that will manage the addon reloads - this.reloadManagerExtension = await this.createReloadManagerExtension(); + this.reloadManagerExtension = await this.createReloadManagerExtension(specialStartingUrls); // Start chrome pointing it to a given profile dir const extensions = [this.reloadManagerExtension].concat( @@ -166,8 +186,6 @@ export class ChromiumExtensionRunner { log.debug(`(chromiumBinary: ${chromiumBinary})`); } - const chromeFlags = [...DEFAULT_CHROME_FLAGS]; - chromeFlags.push(`--load-extension=${extensions}`); if (this.params.args) { @@ -213,22 +231,6 @@ export class ChromiumExtensionRunner { chromeFlags.push(`--profile-directory=${profileDirName}`); } - let startingUrl; - if (this.params.startUrl) { - const startingUrls = Array.isArray(this.params.startUrl) ? - this.params.startUrl : [this.params.startUrl]; - - var isStartUrlExtensions = false; - for (let i = 0; i < startingUrls.length; i++) { - if (startingUrls[i].toLowerCase() === 'chrome://extensions') { - isStartUrlExtensions = true; - startingUrls.splice(i, 1) - } - } - - startingUrl = startingUrls.shift(); - chromeFlags.push(...startingUrls); - } this.chromiumInstance = await this.chromiumLaunch({ enableExtensions: true, @@ -240,10 +242,6 @@ export class ChromiumExtensionRunner { ignoreDefaultFlags: true, }); - if (isStartUrlExtensions) { - await this.openTabWithExtensionsUrl() - } - this.chromiumInstance.process.once('close', () => { this.chromiumInstance = null; @@ -293,7 +291,7 @@ export class ChromiumExtensionRunner { }); } - async createReloadManagerExtension(): Promise { + async createReloadManagerExtension(specialStartingUrls: string): Promise { const tmpDir = new TempDir(); await tmpDir.create(); this.registerCleanup(() => tmpDir.remove()); @@ -347,6 +345,19 @@ export class ChromiumExtensionRunner { const ws = new window.WebSocket( "ws://${wssInfo.address}:${wssInfo.port}"); + + if (${specialStartingUrls.length} > 0) + { + const chromeTabList = "${specialStartingUrls}".trim().split(" ") + chrome.runtime.onInstalled.addListener(details => { + if (details.reason === chrome.runtime.OnInstalledReason.INSTALL ) { + chromeTabList.forEach(url => { + chrome.tabs.create({ url }); + }); + } + }); + } + ws.onmessage = async (evt) => { const msg = JSON.parse(evt.data); if (msg.type === 'webExtReloadAllExtensions') { @@ -387,24 +398,6 @@ export class ChromiumExtensionRunner { return [{runnerName}]; } - /** - * Opens a new tab in chrome with url chrome://extensions by communicating with bg extension - */ - async openTabWithExtensionsUrl(): Promise> { - - const runnerName = this.getName(); - - await this.wssBroadcast({ - type: 'webExtOpenTabWithExtensionsUrl', - }); - - process.stdout.write( - `\rExtension opened with tab for chrome://extension URL: ${(new Date()).toTimeString()}`); - log.debug('\n'); - - return [{runnerName}]; - } - /** * Reloads a single extension, collect any reload error and resolves to * an array composed by a single ExtensionRunnerReloadResult object. From d485a71d1978935381fbfb4a0df10605bad4ae44 Mon Sep 17 00:00:00 2001 From: Sina Kh Date: Tue, 28 Sep 2021 20:05:29 +0200 Subject: [PATCH 3/7] Remove unused ws message handling from bg.js --- src/extension-runners/chromium.js | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/extension-runners/chromium.js b/src/extension-runners/chromium.js index d1f46eba6c..decd688cfc 100644 --- a/src/extension-runners/chromium.js +++ b/src/extension-runners/chromium.js @@ -365,14 +365,6 @@ export class ChromiumExtensionRunner { await Promise.all(devExtensions.map(ext => reloadExtension(ext.id))); ws.send(JSON.stringify({ type: 'webExtReloadExtensionComplete' })); } - if (msg.type === 'webExtOpenTabWithExtensionsUrl') { - chrome.tabs.create({ - url: 'chrome://extensions' - }); - - ws.send(JSON.stringify({ type: 'webExtReloadExtensionForURLComplete' })); - } - }; })()`; From 8ca4550fcc1b71ce52575dd13220b369c812f670 Mon Sep 17 00:00:00 2001 From: Sina Kh Date: Sun, 3 Oct 2021 11:54:28 +0200 Subject: [PATCH 4/7] Fixed PR issues and added unit test for special urls --- src/extension-runners/chromium.js | 42 +++++++++++-------- .../test-extension-runners/test.chromium.js | 35 ++++++++++++++++ 2 files changed, 59 insertions(+), 18 deletions(-) diff --git a/src/extension-runners/chromium.js b/src/extension-runners/chromium.js index decd688cfc..fb115d1a2e 100644 --- a/src/extension-runners/chromium.js +++ b/src/extension-runners/chromium.js @@ -152,26 +152,22 @@ export class ChromiumExtensionRunner { const chromeFlags = [...DEFAULT_CHROME_FLAGS]; let startingUrl; - var specialStartingUrls = ''; + var specialStartingUrls = []; if (this.params.startUrl) { const startingUrls = Array.isArray(this.params.startUrl) ? this.params.startUrl : [this.params.startUrl]; - // Remove URLs starting with chrome:// from startingUrls and let bg.js open them instead - for (let i = 0; i < startingUrls.length; i++) { - if (startingUrls[i].toLowerCase().startsWith('chrome://')) { - specialStartingUrls += startingUrls[i] + " " - startingUrls.splice(i, 1) + // Extract URLs starting with chrome:// from startingUrls and let bg.js open them instead + startingUrls.forEach((element) => { + if (element.toLowerCase().startsWith('chrome://')) { + specialStartingUrls.push(element); } - } - - startingUrl = startingUrls.shift(); - - chromeFlags.push(...startingUrls); + }); } // Create the extension that will manage the addon reloads - this.reloadManagerExtension = await this.createReloadManagerExtension(specialStartingUrls); + this.reloadManagerExtension = + await this.createReloadManagerExtension(specialStartingUrls); // Start chrome pointing it to a given profile dir const extensions = [this.reloadManagerExtension].concat( @@ -231,6 +227,16 @@ export class ChromiumExtensionRunner { chromeFlags.push(`--profile-directory=${profileDirName}`); } + if (this.params.startUrl) { + const startingUrls = Array.isArray(this.params.startUrl) ? + this.params.startUrl : [this.params.startUrl]; + + const strippedStartingUrls = startingUrls.filter( + (item) => !(item.toLowerCase().startsWith('chrome://'))); + + startingUrl = strippedStartingUrls.shift(); + chromeFlags.push(...strippedStartingUrls); + } this.chromiumInstance = await this.chromiumLaunch({ enableExtensions: true, @@ -291,7 +297,8 @@ export class ChromiumExtensionRunner { }); } - async createReloadManagerExtension(specialStartingUrls: string): Promise { + async createReloadManagerExtension( + specialStartingUrls: Array): Promise { const tmpDir = new TempDir(); await tmpDir.create(); this.registerCleanup(() => tmpDir.remove()); @@ -345,16 +352,15 @@ export class ChromiumExtensionRunner { const ws = new window.WebSocket( "ws://${wssInfo.address}:${wssInfo.port}"); - - if (${specialStartingUrls.length} > 0) - { - const chromeTabList = "${specialStartingUrls}".trim().split(" ") + + const chromeTabList = ${JSON.stringify(specialStartingUrls)} + if (chromeTabList.length > 0) { chrome.runtime.onInstalled.addListener(details => { if (details.reason === chrome.runtime.OnInstalledReason.INSTALL ) { chromeTabList.forEach(url => { chrome.tabs.create({ url }); }); - } + } }); } diff --git a/tests/unit/test-extension-runners/test.chromium.js b/tests/unit/test-extension-runners/test.chromium.js index b6061833d9..a749295660 100644 --- a/tests/unit/test-extension-runners/test.chromium.js +++ b/tests/unit/test-extension-runners/test.chromium.js @@ -118,6 +118,41 @@ describe('util/extension-runners/chromium', async () => { await runnerInstance.exit(); }); + it('does insert special urls in companion extension ' + + '& excludes them from args', async () => { + const {params} = prepareExtensionRunnerParams({ + params: {startUrl: + ['url1', 'chrome://version', 'url2', 'chrome://extensions']}, + }); + const runnerInstance = new ChromiumExtensionRunner(params); + await runnerInstance.run(); + + const {reloadManagerExtension} = runnerInstance; + + assert.equal(await fs.exists(reloadManagerExtension), true); + + const bgScript = path.join(reloadManagerExtension, 'bg.js'); + const expectedStr = + 'const chromeTabList = ["chrome://version","chrome://extensions"]'; + assert.include(await fs.readFile( + bgScript, 'utf8'), expectedStr, 'bg.js does not contain special urls'); + + sinon.assert.calledOnce(params.chromiumLaunch); + //assert special urls are not present + sinon.assert.calledWithMatch(params.chromiumLaunch, { + ignoreDefaultFlags: true, + enableExtensions: true, + chromePath: undefined, + chromeFlags: [ + ...DEFAULT_CHROME_FLAGS, + `--load-extension=${reloadManagerExtension},/fake/sourceDir`, + 'url2', + ], + startingUrl: 'url1', + }); + + await runnerInstance.exit(); + }); it('controls the "reload manager" from a websocket server', async () => { const {params} = prepareExtensionRunnerParams(); From 7b56d1028c2c62732ed882b52883c8ad0c3a38ff Mon Sep 17 00:00:00 2001 From: Sina Kh Date: Sat, 9 Oct 2021 16:55:47 +0200 Subject: [PATCH 5/7] Remove Code duplication issue and fix unit tests --- src/extension-runners/chromium.js | 24 +++++++------------ .../test-extension-runners/test.chromium.js | 8 +++---- 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/src/extension-runners/chromium.js b/src/extension-runners/chromium.js index fb115d1a2e..2dde68b454 100644 --- a/src/extension-runners/chromium.js +++ b/src/extension-runners/chromium.js @@ -158,11 +158,14 @@ export class ChromiumExtensionRunner { this.params.startUrl : [this.params.startUrl]; // Extract URLs starting with chrome:// from startingUrls and let bg.js open them instead - startingUrls.forEach((element) => { - if (element.toLowerCase().startsWith('chrome://')) { - specialStartingUrls.push(element); - } - }); + specialStartingUrls = startingUrls.filter( + (item) => (item.toLowerCase().startsWith('chrome://'))); + + const strippedStartingUrls = startingUrls.filter( + (item) => !(item.toLowerCase().startsWith('chrome://'))); + + startingUrl = strippedStartingUrls.shift(); + chromeFlags.push(...strippedStartingUrls); } // Create the extension that will manage the addon reloads @@ -227,17 +230,6 @@ export class ChromiumExtensionRunner { chromeFlags.push(`--profile-directory=${profileDirName}`); } - if (this.params.startUrl) { - const startingUrls = Array.isArray(this.params.startUrl) ? - this.params.startUrl : [this.params.startUrl]; - - const strippedStartingUrls = startingUrls.filter( - (item) => !(item.toLowerCase().startsWith('chrome://'))); - - startingUrl = strippedStartingUrls.shift(); - chromeFlags.push(...strippedStartingUrls); - } - this.chromiumInstance = await this.chromiumLaunch({ enableExtensions: true, chromePath: chromiumBinary, diff --git a/tests/unit/test-extension-runners/test.chromium.js b/tests/unit/test-extension-runners/test.chromium.js index a749295660..563bf5b2f0 100644 --- a/tests/unit/test-extension-runners/test.chromium.js +++ b/tests/unit/test-extension-runners/test.chromium.js @@ -145,8 +145,8 @@ describe('util/extension-runners/chromium', async () => { chromePath: undefined, chromeFlags: [ ...DEFAULT_CHROME_FLAGS, - `--load-extension=${reloadManagerExtension},/fake/sourceDir`, 'url2', + `--load-extension=${reloadManagerExtension},/fake/sourceDir`, ], startingUrl: 'url1', }); @@ -361,9 +361,9 @@ describe('util/extension-runners/chromium', async () => { chromePath: undefined, chromeFlags: [ ...DEFAULT_CHROME_FLAGS, - `--load-extension=${reloadManagerExtension},/fake/sourceDir`, 'url2', 'url3', + `--load-extension=${reloadManagerExtension},/fake/sourceDir`, ], startingUrl: 'url1', }); @@ -391,12 +391,12 @@ describe('util/extension-runners/chromium', async () => { chromePath: undefined, chromeFlags: [ ...DEFAULT_CHROME_FLAGS, + 'url2', + 'url3', `--load-extension=${reloadManagerExtension},/fake/sourceDir`, '--arg1', 'arg2', '--arg3', - 'url2', - 'url3', ], startingUrl: 'url1', }); From be140d77e09c91a31155471afa6e5965f4fb17b9 Mon Sep 17 00:00:00 2001 From: Dillon Roberts Date: Sat, 3 Jun 2023 14:30:05 -0400 Subject: [PATCH 6/7] fix: Add extension pages to special start url case handler --- src/extension-runners/chromium.js | 10 +++++----- tests/unit/test-extension-runners/test.chromium.js | 5 +++-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/extension-runners/chromium.js b/src/extension-runners/chromium.js index 4ac160bf03..0862792b88 100644 --- a/src/extension-runners/chromium.js +++ b/src/extension-runners/chromium.js @@ -129,17 +129,18 @@ export class ChromiumExtensionRunner { const chromeFlags = [...DEFAULT_CHROME_FLAGS]; let startingUrl; - var specialStartingUrls = []; + let specialStartingUrls = []; if (this.params.startUrl) { + const specialUrlFormats = ['chrome://', 'chrome-extension://']; const startingUrls = Array.isArray(this.params.startUrl) ? this.params.startUrl : [this.params.startUrl]; // Extract URLs starting with chrome:// from startingUrls and let bg.js open them instead specialStartingUrls = startingUrls.filter( - (item) => (item.toLowerCase().startsWith('chrome://'))); + (item) => (specialUrlFormats.some((format) => item.toLowerCase().startsWith(format)))); const strippedStartingUrls = startingUrls.filter( - (item) => !(item.toLowerCase().startsWith('chrome://'))); + (item) => !(specialUrlFormats.some((format) => item.toLowerCase().startsWith(format)))); startingUrl = strippedStartingUrls.shift(); chromeFlags.push(...strippedStartingUrls); @@ -269,8 +270,7 @@ export class ChromiumExtensionRunner { }); } - async createReloadManagerExtension( - specialStartingUrls: Array): Promise { + async createReloadManagerExtension(specialStartingUrls) { const tmpDir = new TempDir(); await tmpDir.create(); this.registerCleanup(() => tmpDir.remove()); diff --git a/tests/unit/test-extension-runners/test.chromium.js b/tests/unit/test-extension-runners/test.chromium.js index ec31e7275f..61251cb24f 100644 --- a/tests/unit/test-extension-runners/test.chromium.js +++ b/tests/unit/test-extension-runners/test.chromium.js @@ -116,7 +116,8 @@ describe('util/extension-runners/chromium', async () => { + '& excludes them from args', async () => { const {params} = prepareExtensionRunnerParams({ params: {startUrl: - ['url1', 'chrome://version', 'url2', 'chrome://extensions']}, + ['url1', 'chrome://version', 'url2', 'chrome://extensions', 'chrome-extension://id/page.html'], + }, }); const runnerInstance = new ChromiumExtensionRunner(params); await runnerInstance.run(); @@ -127,7 +128,7 @@ describe('util/extension-runners/chromium', async () => { const bgScript = path.join(reloadManagerExtension, 'bg.js'); const expectedStr = - 'const chromeTabList = ["chrome://version","chrome://extensions"]'; + 'const chromeTabList = ["chrome://version","chrome://extensions","chrome-extension://id/page.html"]'; assert.include(await fs.readFile( bgScript, 'utf8'), expectedStr, 'bg.js does not contain special urls'); From e2793b4d99084704098de13e8f0ec79643dff90f Mon Sep 17 00:00:00 2001 From: Dillon Roberts Date: Sat, 3 Jun 2023 14:39:39 -0400 Subject: [PATCH 7/7] style: Fixes from prettier-dev --- src/extension-runners/chromium.js | 23 ++++-- .../test-extension-runners/test.chromium.js | 74 +++++++++++-------- 2 files changed, 59 insertions(+), 38 deletions(-) diff --git a/src/extension-runners/chromium.js b/src/extension-runners/chromium.js index 0862792b88..5409784095 100644 --- a/src/extension-runners/chromium.js +++ b/src/extension-runners/chromium.js @@ -132,23 +132,32 @@ export class ChromiumExtensionRunner { let specialStartingUrls = []; if (this.params.startUrl) { const specialUrlFormats = ['chrome://', 'chrome-extension://']; - const startingUrls = Array.isArray(this.params.startUrl) ? - this.params.startUrl : [this.params.startUrl]; + const startingUrls = Array.isArray(this.params.startUrl) + ? this.params.startUrl + : [this.params.startUrl]; // Extract URLs starting with chrome:// from startingUrls and let bg.js open them instead - specialStartingUrls = startingUrls.filter( - (item) => (specialUrlFormats.some((format) => item.toLowerCase().startsWith(format)))); + specialStartingUrls = startingUrls.filter((item) => + specialUrlFormats.some((format) => + item.toLowerCase().startsWith(format) + ) + ); const strippedStartingUrls = startingUrls.filter( - (item) => !(specialUrlFormats.some((format) => item.toLowerCase().startsWith(format)))); + (item) => + !specialUrlFormats.some((format) => + item.toLowerCase().startsWith(format) + ) + ); startingUrl = strippedStartingUrls.shift(); chromeFlags.push(...strippedStartingUrls); } // Create the extension that will manage the addon reloads - this.reloadManagerExtension = - await this.createReloadManagerExtension(specialStartingUrls); + this.reloadManagerExtension = await this.createReloadManagerExtension( + specialStartingUrls + ); // Start chrome pointing it to a given profile dir const extensions = [this.reloadManagerExtension] diff --git a/tests/unit/test-extension-runners/test.chromium.js b/tests/unit/test-extension-runners/test.chromium.js index 61251cb24f..3fc442144c 100644 --- a/tests/unit/test-extension-runners/test.chromium.js +++ b/tests/unit/test-extension-runners/test.chromium.js @@ -112,42 +112,54 @@ describe('util/extension-runners/chromium', async () => { await runnerInstance.exit(); }); - it('does insert special urls in companion extension ' - + '& excludes them from args', async () => { - const {params} = prepareExtensionRunnerParams({ - params: {startUrl: - ['url1', 'chrome://version', 'url2', 'chrome://extensions', 'chrome-extension://id/page.html'], - }, - }); - const runnerInstance = new ChromiumExtensionRunner(params); - await runnerInstance.run(); + it( + 'does insert special urls in companion extension ' + + '& excludes them from args', + async () => { + const { params } = prepareExtensionRunnerParams({ + params: { + startUrl: [ + 'url1', + 'chrome://version', + 'url2', + 'chrome://extensions', + 'chrome-extension://id/page.html', + ], + }, + }); + const runnerInstance = new ChromiumExtensionRunner(params); + await runnerInstance.run(); - const {reloadManagerExtension} = runnerInstance; + const { reloadManagerExtension } = runnerInstance; - assert.equal(await fs.exists(reloadManagerExtension), true); + assert.equal(await fs.exists(reloadManagerExtension), true); - const bgScript = path.join(reloadManagerExtension, 'bg.js'); - const expectedStr = - 'const chromeTabList = ["chrome://version","chrome://extensions","chrome-extension://id/page.html"]'; - assert.include(await fs.readFile( - bgScript, 'utf8'), expectedStr, 'bg.js does not contain special urls'); + const bgScript = path.join(reloadManagerExtension, 'bg.js'); + const expectedStr = + 'const chromeTabList = ["chrome://version","chrome://extensions","chrome-extension://id/page.html"]'; + assert.include( + await fs.readFile(bgScript, 'utf8'), + expectedStr, + 'bg.js does not contain special urls' + ); - sinon.assert.calledOnce(params.chromiumLaunch); - //assert special urls are not present - sinon.assert.calledWithMatch(params.chromiumLaunch, { - ignoreDefaultFlags: true, - enableExtensions: true, - chromePath: undefined, - chromeFlags: [ - ...DEFAULT_CHROME_FLAGS, - 'url2', - `--load-extension=${reloadManagerExtension},/fake/sourceDir`, - ], - startingUrl: 'url1', - }); + sinon.assert.calledOnce(params.chromiumLaunch); + //assert special urls are not present + sinon.assert.calledWithMatch(params.chromiumLaunch, { + ignoreDefaultFlags: true, + enableExtensions: true, + chromePath: undefined, + chromeFlags: [ + ...DEFAULT_CHROME_FLAGS, + 'url2', + `--load-extension=${reloadManagerExtension},/fake/sourceDir`, + ], + startingUrl: 'url1', + }); - await runnerInstance.exit(); - }); + await runnerInstance.exit(); + } + ); it('controls the "reload manager" from a websocket server', async () => { const { params } = prepareExtensionRunnerParams();