From a724d4f127ac31d64033409e8748ed15d244c234 Mon Sep 17 00:00:00 2001 From: Zach Bloomquist Date: Tue, 24 Sep 2019 10:48:33 -0400 Subject: [PATCH] depromisify things that were promisified b/t electron 5 <=> 6 Revert "update shell.openExternal to promisified" This reverts commit 8b6460d015eb85d10a38d4e234fff99b7da91e01. Revert "update dialog.showOpenDialog to promisified" This reverts commit 5f178b075bcb46daab8564736e0a318c2d21a431. Revert "update webContents.session.setProxy to promisified" This reverts commit 727df3a4e5469effcab9796acd07c45b18262c33. --- packages/server/lib/browsers/electron.coffee | 40 +++++++++---------- packages/server/lib/gui/auth.js | 5 ++- packages/server/lib/gui/dialog.coffee | 9 +++-- packages/server/lib/gui/windows.coffee | 9 +++-- packages/server/test/unit/gui/auth_spec.js | 12 +++--- .../server/test/unit/gui/dialog_spec.coffee | 10 ++--- 6 files changed, 44 insertions(+), 41 deletions(-) diff --git a/packages/server/lib/browsers/electron.coffee b/packages/server/lib/browsers/electron.coffee index e25cfd3e6841..338a6fb1c7d2 100644 --- a/packages/server/lib/browsers/electron.coffee +++ b/packages/server/lib/browsers/electron.coffee @@ -93,7 +93,7 @@ getAutomation = (win) -> .then -> cookieToBeCleared when "is:automation:client:connected" - tryToCall(win, 'isDestroyed') == false + true when "take:screenshot" tryToCall(win, 'capturePage') .then _.partialRight(_.invoke, 'toDataURL') @@ -194,18 +194,16 @@ module.exports = { _attachDebugger: (webContents) -> originalSendCommand = webContents.debugger.sendCommand - webContents.debugger.sendCommand = (message, data = {}) -> - debug('debugger: sending %s %o', message, data) - - originalSendCommand - .call(webContents.debugger, message, data) - .then (result) => - debug("debugger: received response for %s: result: %o", message, result) - result - .catch (err) => - debug("debugger: received error on %s: result: %o", message, err) - throw err + webContents.debugger.sendCommand = (message, data = {}) -> + new Promise (resolve, reject) => + debug('debugger: sending %s %o', message, data) + + originalSendCommand.call webContents.debugger, message, data, (err, result) => + debug("debugger: received response for %s: %o", message, { err, result }) + if _.isEmpty(err) + return resolve(result) + reject(err) try webContents.debugger.attach() debug("debugger attached") @@ -240,7 +238,8 @@ module.exports = { _clearCache: (webContents) -> debug("clearing cache") - webContents.session.clearCache() + Promise.fromCallback (cb) => + webContents.session.clearCache(cb) _setUserAgent: (webContents, userAgent) -> debug("setting user agent to:", userAgent) @@ -249,13 +248,14 @@ module.exports = { webContents.session.setUserAgent(userAgent) _setProxy: (webContents, proxyServer) -> - webContents.session.setProxy({ - proxyRules: proxyServer - ## this should really only be necessary when - ## running Chromium versions >= 72 - ## https://github.com/cypress-io/cypress/issues/1872 - proxyBypassRules: "<-loopback>" - }) + Promise.fromCallback (cb) => + webContents.session.setProxy({ + proxyRules: proxyServer + ## this should really only be necessary when + ## running Chromium versions >= 72 + ## https://github.com/cypress-io/cypress/issues/1872 + proxyBypassRules: "<-loopback>" + }, cb) open: (browser, url, options = {}, automation) -> { projectRoot, isTextTerminal } = options diff --git a/packages/server/lib/gui/auth.js b/packages/server/lib/gui/auth.js index 79f14a0446fc..99882e628b6d 100644 --- a/packages/server/lib/gui/auth.js +++ b/packages/server/lib/gui/auth.js @@ -190,7 +190,10 @@ const _launchNativeAuth = Promise.method((loginUrl, sendMessage) => { openExternalAttempted = true - return shell.openExternal(loginUrl) + // wrap openExternal here in case `electron.shell` is not available (during tests) + return Promise.fromCallback((cb) => { + shell.openExternal(loginUrl, {}, cb) + }) .catch((err) => { debug('Error launching native auth: %o', { err }) warnCouldNotLaunch() diff --git a/packages/server/lib/gui/dialog.coffee b/packages/server/lib/gui/dialog.coffee index 2531c09d044c..c95cddd2ad8b 100644 --- a/packages/server/lib/gui/dialog.coffee +++ b/packages/server/lib/gui/dialog.coffee @@ -15,7 +15,10 @@ module.exports = { properties: ["openDirectory"] } - dialog.showOpenDialog(props) - .then ({ filePaths }) -> - return filePaths[0] + new Promise (resolve, reject) -> + dialog.showOpenDialog props, (paths = []) -> + process.nextTick -> + ## return the first path since there can only ever + ## be a single directory selection + resolve(paths[0]) } diff --git a/packages/server/lib/gui/windows.coffee b/packages/server/lib/gui/windows.coffee index 1667200ae68c..2210888e5fce 100644 --- a/packages/server/lib/gui/windows.coffee +++ b/packages/server/lib/gui/windows.coffee @@ -34,10 +34,11 @@ setWindowProxy = (win) -> if not process.env.HTTP_PROXY return - win.webContents.session.setProxy({ - proxyRules: process.env.HTTP_PROXY - proxyBypassRules: process.env.NO_PROXY - }) + return new Promise (resolve) -> + win.webContents.session.setProxy({ + proxyRules: process.env.HTTP_PROXY + proxyBypassRules: process.env.NO_PROXY + }, resolve) module.exports = { reset: -> diff --git a/packages/server/test/unit/gui/auth_spec.js b/packages/server/test/unit/gui/auth_spec.js index 51c09ef967fd..98a329b52195 100644 --- a/packages/server/test/unit/gui/auth_spec.js +++ b/packages/server/test/unit/gui/auth_spec.js @@ -88,23 +88,21 @@ describe('lib/gui/auth', function () { }) it('returns a promise that is fulfilled when openExternal succeeds', function () { - sinon.stub(electron.shell, 'openExternal').resolves() - const sendWarning = sinon.stub() + sinon.stub(electron.shell, 'openExternal').callsArg(2) - return auth._launchNativeAuth(REDIRECT_URL, sendWarning) + return auth._launchNativeAuth(REDIRECT_URL) .then(() => { - expect(electron.shell.openExternal).to.be.calledWithMatch(REDIRECT_URL) - expect(sendWarning).to.not.be.called + expect(electron.shell.openExternal).to.be.calledWithMatch(REDIRECT_URL, {}, sinon.match.func) }) }) it('is still fulfilled when openExternal fails, but sendWarning is called', function () { - sinon.stub(electron.shell, 'openExternal').rejects(new Error) + sinon.stub(electron.shell, 'openExternal').callsArgWith(2, new Error) const sendWarning = sinon.stub() return auth._launchNativeAuth(REDIRECT_URL, sendWarning) .then(() => { - expect(electron.shell.openExternal).to.be.calledWithMatch(REDIRECT_URL) + expect(electron.shell.openExternal).to.be.calledWithMatch(REDIRECT_URL, {}, sinon.match.func) expect(sendWarning).to.be.calledWithMatch('warning', 'AUTH_COULD_NOT_LAUNCH_BROWSER', REDIRECT_URL) }) }) diff --git a/packages/server/test/unit/gui/dialog_spec.coffee b/packages/server/test/unit/gui/dialog_spec.coffee index 89133131770a..43a5d3eecdca 100644 --- a/packages/server/test/unit/gui/dialog_spec.coffee +++ b/packages/server/test/unit/gui/dialog_spec.coffee @@ -7,9 +7,7 @@ Windows = require("#{root}../lib/gui/windows") describe "gui/dialog", -> context ".show", -> beforeEach -> - @showOpenDialog = electron.dialog.showOpenDialog = sinon.stub().resolves({ - filePaths: [] - }) + @showOpenDialog = electron.dialog.showOpenDialog = sinon.stub() it "calls dialog.showOpenDialog with args", -> dialog.show() @@ -18,13 +16,13 @@ describe "gui/dialog", -> }) it "resolves with first path", -> - @showOpenDialog.resolves({ - filePaths: ["foo", "bar"] - }) + @showOpenDialog.yields(["foo", "bar"]) dialog.show().then (ret) -> expect(ret).to.eq("foo") it "handles null paths", -> + @showOpenDialog.yields(null) + dialog.show().then (ret) -> expect(ret).to.eq(undefined)