From c942d17e246274f22385e3254a43088eee3f7dbd Mon Sep 17 00:00:00 2001 From: Jimmy Moon Date: Fri, 21 Jul 2017 08:57:56 +0900 Subject: [PATCH] launcher: support enabling extension loading (#2650) --- chrome-launcher/README.md | 4 ++++ chrome-launcher/chrome-launcher.ts | 9 ++++++++- chrome-launcher/test/chrome-launcher-test.ts | 20 ++++++++++++++++++++ chrome-launcher/tsconfig.json | 2 +- 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/chrome-launcher/README.md b/chrome-launcher/README.md index 11db9da16079..d658c7ed5ae1 100644 --- a/chrome-launcher/README.md +++ b/chrome-launcher/README.md @@ -57,6 +57,10 @@ npm install chrome-launcher // (optional) Logging level: verbose, info, error, silent // Default: 'info' logLevel: string; + + // (optional) Enable extension loading + // Default: false + enableExtensions: boolean }; ``` diff --git a/chrome-launcher/chrome-launcher.ts b/chrome-launcher/chrome-launcher.ts index 851f9ef51033..ad622c73c97a 100644 --- a/chrome-launcher/chrome-launcher.ts +++ b/chrome-launcher/chrome-launcher.ts @@ -31,6 +31,7 @@ export interface Options { chromePath?: string; userDataDir?: string; logLevel?: string; + enableExtensions?: boolean; } export interface LaunchedChrome { @@ -71,6 +72,7 @@ export class Launcher { private outFile?: number; private errFile?: number; private chromePath?: string; + private enableExtensions?: boolean; private chromeFlags: string[]; private requestedPort?: number; private chrome?: childProcess.ChildProcess; @@ -94,15 +96,20 @@ export class Launcher { this.chromeFlags = defaults(this.opts.chromeFlags, []); this.requestedPort = defaults(this.opts.port, 0); this.chromePath = this.opts.chromePath; + this.enableExtensions = defaults(this.opts.enableExtensions, false); } private get flags() { - const flags = DEFAULT_FLAGS.concat([ + let flags = DEFAULT_FLAGS.concat([ `--remote-debugging-port=${this.port}`, // Place Chrome profile in a custom location we'll rm -rf later `--user-data-dir=${this.userDataDir}` ]); + if (this.enableExtensions) { + flags = flags.filter(flag => flag !== '--disable-extensions'); + } + if (process.platform === 'linux') { flags.push('--disable-setuid-sandbox'); } diff --git a/chrome-launcher/test/chrome-launcher-test.ts b/chrome-launcher/test/chrome-launcher-test.ts index 6de82327e570..a49582893975 100644 --- a/chrome-launcher/test/chrome-launcher-test.ts +++ b/chrome-launcher/test/chrome-launcher-test.ts @@ -102,4 +102,24 @@ describe('Launcher', () => { assert.strictEqual(pid, chromeInstance.pid); await chromeInstance.kill(); }); + + it('removes --disable-extensions from flags on enableExtensions', async () => { + const spawnStub = stub().returns({pid: 'some_pid'}); + + const chromeInstance = new Launcher( + {enableExtensions: true}, + {fs: fsMock as any, rimraf: spy() as any, spawn: spawnStub as any}); + stub(chromeInstance, 'waitUntilReady').returns(Promise.resolve()); + + chromeInstance.prepare(); + + try { + await chromeInstance.launch(); + } catch (err) { + return Promise.reject(err); + } + + const chromeFlags = spawnStub.getCall(0).args[1] as string[]; + assert.ok(!chromeFlags.includes('--disable-extensions')); + }); }); diff --git a/chrome-launcher/tsconfig.json b/chrome-launcher/tsconfig.json index 3df62d2b6176..9c07c8c37b62 100644 --- a/chrome-launcher/tsconfig.json +++ b/chrome-launcher/tsconfig.json @@ -1,7 +1,7 @@ { "compilerOptions": { "module": "commonjs", - "target": "es6", + "target": "es2016", "noImplicitAny": true, "inlineSourceMap": true, "noEmitOnError": false,