From 9a2d103e7f30c8bcb9a23069965a0667cfd4eb49 Mon Sep 17 00:00:00 2001 From: Felix Rieseberg Date: Sat, 18 Nov 2017 00:51:14 -0800 Subject: [PATCH] :thinking_face: What if we made it an Error again? --- lib/browser/api/web-contents.js | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/browser/api/web-contents.js b/lib/browser/api/web-contents.js index 4e3ec332ae..7485a71958 100644 --- a/lib/browser/api/web-contents.js +++ b/lib/browser/api/web-contents.js @@ -112,6 +112,16 @@ const webFrameMethods = [ ] const webFrameMethodsWithResult = [] +const errorConstructors = { + Error, + EvalError, + RangeError, + ReferenceError, + SyntaxError, + TypeError, + URIError +} + const asyncWebFrameMethods = function (requestId, method, callback, ...args) { return new Promise((resolve, reject) => { this.send('ELECTRON_INTERNAL_RENDERER_ASYNC_WEB_FRAME_METHOD', requestId, method, args) @@ -120,7 +130,18 @@ const asyncWebFrameMethods = function (requestId, method, callback, ...args) { if (typeof callback === 'function') callback(result) resolve(result) } else { - reject(error) + if (error && error.__ELECTRON_SERIALIZED_ERROR__) { + let rehydratedError = error + + if (errorConstructors[error.name]) { + rehydratedError = new errorConstructors[error.name](error.message) + rehydratedError.stack = error.stack + } + + reject(rehydratedError); + } else { + reject(error) + } } }) })