From 5b18bea7e3742084d1de0500365a5cfe499b2905 Mon Sep 17 00:00:00 2001 From: Felix Rieseberg Date: Sat, 18 Nov 2017 10:59:09 -0800 Subject: [PATCH] :wrench: Alex has good ideas --- lib/browser/api/web-contents.js | 10 +++------- spec/api-browser-window-spec.js | 24 ++++++++++++------------ 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/lib/browser/api/web-contents.js b/lib/browser/api/web-contents.js index 36f43aafc437..61b37f773317 100644 --- a/lib/browser/api/web-contents.js +++ b/lib/browser/api/web-contents.js @@ -130,13 +130,9 @@ const asyncWebFrameMethods = function (requestId, method, callback, ...args) { if (typeof callback === 'function') callback(result) resolve(result) } else { - if (error && error.__ELECTRON_SERIALIZED_ERROR__) { - let rehydratedError = error - - if (errorConstructors[error.name]) { - rehydratedError = new errorConstructors[error.name](error.message) - rehydratedError.stack = error.stack - } + if (error.__ELECTRON_SERIALIZED_ERROR__ && errorConstructors[error.name]) { + const rehydratedError = new errorConstructors[error.name](error.message) + rehydratedError.stack = error.stack reject(rehydratedError) } else { diff --git a/spec/api-browser-window-spec.js b/spec/api-browser-window-spec.js index c1e2f6cbb739..fea4c3a739d0 100644 --- a/spec/api-browser-window-spec.js +++ b/spec/api-browser-window-spec.js @@ -2514,15 +2514,15 @@ describe('BrowserWindow module', () => { const code = `(() => "${expected}")()` const asyncCode = `(() => new Promise(r => setTimeout(() => r("${expected}"), 500)))()` const badAsyncCode = `(() => new Promise((r, e) => setTimeout(() => e("${expectedErrorMsg}"), 500)))()` - const errorCodes = { - Error: 'Promise.reject(new Error("Wamp-wamp"))', - ReferenceError: 'Promise.reject(new ReferenceError("Wamp-wamp"))', - EvalError: 'Promise.reject(new EvalError("Wamp-wamp"))', - RangeError: 'Promise.reject(new RangeError("Wamp-wamp"))', - SyntaxError: 'Promise.reject(new SyntaxError("Wamp-wamp"))', - TypeError: 'Promise.reject(new TypeError("Wamp-wamp"))', - URIError: 'Promise.reject(new URIError("Wamp-wamp"))' - } + const errorTypes = new Set([ + Error, + ReferenceError, + EvalError, + RangeError, + SyntaxError, + TypeError, + URIError + ]) it('doesnt throw when no calback is provided', () => { const result = ipcRenderer.sendSync('executeJavaScript', code, false) @@ -2571,11 +2571,11 @@ describe('BrowserWindow module', () => { }) }) it('rejects the returned promise with an error if an Error.prototype is thrown', async () => { - for (const errorKey in errorCodes) { + for (const error in errorTypes) { await new Promise((resolve) => { - ipcRenderer.send('executeJavaScript', errorCodes[errorKey], true) + ipcRenderer.send('executeJavaScript', `Promise.reject(new ${error.name}("Wamp-wamp")`, true) ipcRenderer.once('executeJavaScript-promise-error-name', (event, name) => { - assert.equal(name, errorKey) + assert.equal(name, error.name) resolve() }) })