From 6a78fc735e956054fc4657e39892874f99ea0c94 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Thu, 13 Aug 2020 20:59:51 +0200 Subject: [PATCH 1/2] quic: use AbortController with correct name/message On the web, `AbortError` is the error name, not the error message. Change the code to match that. --- lib/internal/quic/core.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/internal/quic/core.js b/lib/internal/quic/core.js index 11515ebf5fa476..037718b896e35c 100644 --- a/lib/internal/quic/core.js +++ b/lib/internal/quic/core.js @@ -253,10 +253,10 @@ let warnedVerifyHostnameIdentity = false; let DOMException; -const lazyDOMException = hideStackFrames((message) => { +const lazyDOMException = hideStackFrames((message, name) => { if (DOMException === undefined) DOMException = internalBinding('messaging').DOMException; - return new DOMException(message); + return new DOMException(message, name); }); assert(process.versions.ngtcp2 !== undefined); @@ -664,10 +664,10 @@ class QuicEndpoint { if (signal != null && !('aborted' in signal)) throw new ERR_INVALID_ARG_TYPE('options.signal', 'AbortSignal', signal); - // If an AbotSignal was passed in, check to make sure it is not already + // If an AbortSignal was passed in, check to make sure it is not already // aborted before we continue on to do any work. if (signal && signal.aborted) - throw new lazyDOMException('AbortError'); + throw new lazyDOMException('The operation was aborted', 'AbortError'); state.state = kSocketPending; @@ -685,7 +685,7 @@ class QuicEndpoint { // while we were waiting. if (signal && signal.aborted) { state.state = kSocketUnbound; - throw new lazyDOMException('AbortError'); + throw new lazyDOMException('The operation was aborted', 'AbortError'); } // From here on, any errors are fatal for the QuicEndpoint. Keep in @@ -1064,7 +1064,7 @@ class QuicSocket extends EventEmitter { // If an AbotSignal was passed in, check to make sure it is not already // aborted before we continue on to do any work. if (signal && signal.aborted) - throw new lazyDOMException('AbortError'); + throw new lazyDOMException('The operation was aborted', 'AbortError'); state.state = kSocketPending; @@ -1086,7 +1086,7 @@ class QuicSocket extends EventEmitter { // Some number of endpoints may have successfully bound, while // others have not if (signal && signal.aborted) - throw lazyDOMException('AbortError'); + throw lazyDOMException('The operation was aborted', 'AbortError'); state.state = kSocketBound; From a515a3176c00047bb73afb8830134876670ac9c1 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Thu, 13 Aug 2020 21:00:55 +0200 Subject: [PATCH 2/2] timers: use AbortController with correct name/message On the web, `AbortError` is the error name, not the error message. Change the code to match that. --- lib/timers/promises.js | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/lib/timers/promises.js b/lib/timers/promises.js index 78197fe86f6e22..ef1e6437d4f6ca 100644 --- a/lib/timers/promises.js +++ b/lib/timers/promises.js @@ -18,10 +18,10 @@ const { let DOMException; -const lazyDOMException = hideStackFrames((message) => { +const lazyDOMException = hideStackFrames((message, name) => { if (DOMException === undefined) DOMException = internalBinding('messaging').DOMException; - return new DOMException(message); + return new DOMException(message, name); }); function setTimeout(after, value, options = {}) { @@ -54,8 +54,10 @@ function setTimeout(after, value, options = {}) { // TODO(@jasnell): If a decision is made that this cannot be backported // to 12.x, then this can be converted to use optional chaining to // simplify the check. - if (signal && signal.aborted) - return PromiseReject(lazyDOMException('AbortError')); + if (signal && signal.aborted) { + return PromiseReject( + lazyDOMException('The operation was aborted', 'AbortError')); + } return new Promise((resolve, reject) => { const timeout = new Timeout(resolve, after, args, false, true); if (!ref) timeout.unref(); @@ -65,7 +67,7 @@ function setTimeout(after, value, options = {}) { if (!timeout._destroyed) { // eslint-disable-next-line no-undef clearTimeout(timeout); - reject(lazyDOMException('AbortError')); + reject(lazyDOMException('The operation was aborted', 'AbortError')); } }, { once: true }); } @@ -101,8 +103,10 @@ function setImmediate(value, options = {}) { // TODO(@jasnell): If a decision is made that this cannot be backported // to 12.x, then this can be converted to use optional chaining to // simplify the check. - if (signal && signal.aborted) - return PromiseReject(lazyDOMException('AbortError')); + if (signal && signal.aborted) { + return PromiseReject( + lazyDOMException('The operation was aborted', 'AbortError')); + } return new Promise((resolve, reject) => { const immediate = new Immediate(resolve, [value]); if (!ref) immediate.unref(); @@ -111,7 +115,7 @@ function setImmediate(value, options = {}) { if (!immediate._destroyed) { // eslint-disable-next-line no-undef clearImmediate(immediate); - reject(lazyDOMException('AbortError')); + reject(lazyDOMException('The operation was aborted', 'AbortError')); } }, { once: true }); }