Skip to content

Commit b2f8e8d

Browse files
watildetargos
authored andcommitted
lib: let abort_controller target be EventTarget
The AbortController abort event should have EventTarget as a target property of the argument event. PR-URL: #35869 Backport-PR-URL: #38386 Refs: https://github.com/web-platform-tests/wpt/blob/master/dom/abort/event.any.js Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
1 parent bf728b5 commit b2f8e8d

File tree

2 files changed

+11
-10
lines changed

2 files changed

+11
-10
lines changed

lib/internal/abort_controller.js

+9-7
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const {
99
} = primordials;
1010

1111
const {
12+
defineEventHandler,
1213
EventTarget,
1314
Event,
1415
kTrustEvent
@@ -52,21 +53,22 @@ function abortSignal(signal) {
5253
const event = new Event('abort', {
5354
[kTrustEvent]: true
5455
});
55-
if (typeof signal.onabort === 'function') {
56-
signal.onabort(event);
57-
}
5856
signal.dispatchEvent(event);
5957
}
6058

59+
// TODO(joyeecheung): V8 snapshot does not support instance member
60+
// initializers for now:
61+
// https://bugs.chromium.org/p/v8/issues/detail?id=10704
62+
const kSignal = Symbol('signal');
6163
class AbortController {
62-
#signal = new AbortSignal();
63-
6464
constructor() {
65+
this[kSignal] = new AbortSignal();
6566
emitExperimentalWarning('AbortController');
67+
defineEventHandler(this[kSignal], 'abort');
6668
}
6769

68-
get signal() { return this.#signal; }
69-
abort() { abortSignal(this.#signal); }
70+
get signal() { return this[kSignal]; }
71+
abort() { abortSignal(this[kSignal]); }
7072

7173
[customInspectSymbol](depth, options) {
7274
return customInspect(this, {

lib/internal/event_target.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -333,14 +333,13 @@ class EventTarget {
333333
}
334334
return event;
335335
};
336+
if (event !== undefined)
337+
event[kTarget] = this;
336338

337339
const root = this[kEvents].get(type);
338340
if (root === undefined || root.next === undefined)
339341
return true;
340342

341-
if (event !== undefined)
342-
event[kTarget] = this;
343-
344343
let handler = root.next;
345344
let next;
346345

0 commit comments

Comments
 (0)