From 557b11b7657e1628082c271a9cece550b3c496fc Mon Sep 17 00:00:00 2001 From: Marcos Casagrande Date: Tue, 8 Aug 2023 12:05:42 +0200 Subject: fix(ext/abort): trigger AbortSignal events in correct order (#20095) This PR ensures that the original signal event is fired before any dependent signal events. --- The enabled tests fail on `main`: ``` assert_array_equals: Abort events fired in correct order expected property 0 to be "original-aborted" but got "clone-aborted" (expected array ["original-aborted", "clone-aborted"] got ["clone-aborted", "original-aborted"]) ``` --- ext/web/03_abort_signal.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'ext/web') diff --git a/ext/web/03_abort_signal.js b/ext/web/03_abort_signal.js index 4c6230e52..2cc64189b 100644 --- a/ext/web/03_abort_signal.js +++ b/ext/web/03_abort_signal.js @@ -86,15 +86,17 @@ class AbortSignal extends EventTarget { return; } this[abortReason] = reason; - if (this[abortAlgos] !== null) { - for (const algorithm of new SafeSetIterator(this[abortAlgos])) { - algorithm(); - } - this[abortAlgos] = null; - } + const algos = this[abortAlgos]; + this[abortAlgos] = null; + const event = new Event("abort"); setIsTrusted(event, true); this.dispatchEvent(event); + if (algos !== null) { + for (const algorithm of new SafeSetIterator(algos)) { + algorithm(); + } + } } [remove](algorithm) { -- cgit v1.2.3