From c52d517d134af15b58f110aba4986b9bf7fe5de4 Mon Sep 17 00:00:00 2001 From: Michelle Tilley Date: Thu, 21 Sep 2017 14:50:41 -0700 Subject: [PATCH] Limit argument parsing when --url-handler is set --- spec/main-process/parse-command-line.test.js | 27 ++++++++++++++++++++ src/main-process/parse-command-line.js | 24 ++++++++++++++--- 2 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 spec/main-process/parse-command-line.test.js diff --git a/spec/main-process/parse-command-line.test.js b/spec/main-process/parse-command-line.test.js new file mode 100644 index 000000000..8b33ebea9 --- /dev/null +++ b/spec/main-process/parse-command-line.test.js @@ -0,0 +1,27 @@ +/** @babel */ + +import parseCommandLine from '../../src/main-process/parse-command-line' + +describe('parseCommandLine', function () { + describe('when --url-handler is not passed', function () { + it('parses arguments as normal', function () { + const args = parseCommandLine(['-d', '--safe', '--test', 'atom://test/url', 'atom://other/url', '/some/path']) + assert.isTrue(args.devMode) + assert.isTrue(args.safeMode) + assert.isTrue(args.test) + assert.deepEqual(args.urlsToOpen, ['atom://test/url', 'atom://other/url']) + assert.deepEqual(args.pathsToOpen, ['/some/path']) + }) + }) + + describe('when --url-handler is passed', function () { + it('ignores other arguments and limits to one URL', function () { + const args = parseCommandLine(['-d', '--url-handler', '--safe', '--test', 'atom://test/url', 'atom://other/url', '/some/path']) + assert.isUndefined(args.devMode) + assert.isUndefined(args.safeMode) + assert.isUndefined(args.test) + assert.deepEqual(args.urlsToOpen, ['atom://test/url']) + assert.deepEqual(args.pathsToOpen, []) + }) + }) +}) diff --git a/src/main-process/parse-command-line.js b/src/main-process/parse-command-line.js index 6c5349437..c2e91d737 100644 --- a/src/main-process/parse-command-line.js +++ b/src/main-process/parse-command-line.js @@ -58,8 +58,18 @@ module.exports = function parseCommandLine (processArgs) { options.string('user-data-dir') options.boolean('clear-window-state').describe('clear-window-state', 'Delete all Atom environment state.') options.boolean('enable-electron-logging').describe('enable-electron-logging', 'Enable low-level logging messages from Electron.') + options.boolean('url-handler') - const args = options.argv + let args = options.argv + + // If --url-handler is set, then we parse NOTHING else + if (args.urlHandler) { + args = { + urlHandler: true, + 'url-handler': true, + _: args._ + } + } if (args.help) { process.stdout.write(options.help()) @@ -101,8 +111,8 @@ module.exports = function parseCommandLine (processArgs) { const userDataDir = args['user-data-dir'] const profileStartup = args['profile-startup'] const clearWindowState = args['clear-window-state'] - const pathsToOpen = [] - const urlsToOpen = [] + let pathsToOpen = [] + let urlsToOpen = [] let devMode = args['dev'] let devResourcePath = process.env.ATOM_DEV_RESOURCE_PATH || path.join(app.getPath('home'), 'github', 'atom') let resourcePath = null @@ -115,6 +125,14 @@ module.exports = function parseCommandLine (processArgs) { } } + // When performing as a URL handler, only accept one URL and no paths + if (args.urlHandler) { + pathsToOpen = [] + if (urlsToOpen.length > 1) { + urlsToOpen.length = 1 + } + } + if (args['resource-path']) { devMode = true devResourcePath = args['resource-path']