From b2f8e8dd2813b90f5db9de1eb6fbe668d2fe3930 Mon Sep 17 00:00:00 2001 From: Daijiro Wachi Date: Sat, 31 Oct 2020 07:38:26 +0900 Subject: [PATCH] lib: let abort_controller target be EventTarget MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The AbortController abort event should have EventTarget as a target property of the argument event. PR-URL: https://github.com/nodejs/node/pull/35869 Backport-PR-URL: https://github.com/nodejs/node/pull/38386 Refs: https://github.com/web-platform-tests/wpt/blob/master/dom/abort/event.any.js Reviewed-By: Rich Trott Reviewed-By: Michaƫl Zasso Reviewed-By: Benjamin Gruenbaum --- lib/internal/abort_controller.js | 16 +++++++++------- lib/internal/event_target.js | 5 ++--- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/lib/internal/abort_controller.js b/lib/internal/abort_controller.js index 63fc31dac4dbd3..8507935d198bc7 100644 --- a/lib/internal/abort_controller.js +++ b/lib/internal/abort_controller.js @@ -9,6 +9,7 @@ const { } = primordials; const { + defineEventHandler, EventTarget, Event, kTrustEvent @@ -52,21 +53,22 @@ function abortSignal(signal) { const event = new Event('abort', { [kTrustEvent]: true }); - if (typeof signal.onabort === 'function') { - signal.onabort(event); - } signal.dispatchEvent(event); } +// TODO(joyeecheung): V8 snapshot does not support instance member +// initializers for now: +// https://bugs.chromium.org/p/v8/issues/detail?id=10704 +const kSignal = Symbol('signal'); class AbortController { - #signal = new AbortSignal(); - constructor() { + this[kSignal] = new AbortSignal(); emitExperimentalWarning('AbortController'); + defineEventHandler(this[kSignal], 'abort'); } - get signal() { return this.#signal; } - abort() { abortSignal(this.#signal); } + get signal() { return this[kSignal]; } + abort() { abortSignal(this[kSignal]); } [customInspectSymbol](depth, options) { return customInspect(this, { diff --git a/lib/internal/event_target.js b/lib/internal/event_target.js index 7345219e5a845a..a684c270ceba11 100644 --- a/lib/internal/event_target.js +++ b/lib/internal/event_target.js @@ -333,14 +333,13 @@ class EventTarget { } return event; }; + if (event !== undefined) + event[kTarget] = this; const root = this[kEvents].get(type); if (root === undefined || root.next === undefined) return true; - if (event !== undefined) - event[kTarget] = this; - let handler = root.next; let next;