From c4739fadb55b656deb97410e4312de2ebd0b59d2 Mon Sep 17 00:00:00 2001 From: Mickael Meausoone Date: Sat, 22 Jul 2023 08:59:49 +0200 Subject: [PATCH] events: add stop propagation flag to Event.stopImmediatePropagation Spec mention stopImmediatePropagation should set both flags: "stop propagation" and "stop immediate propagation". So the second is not supported by Node as there is no hierarchy and bubbling, but the flags are both present as well as stopPropagation. It would makes sense to follow specs on that. Refs: https://dom.spec.whatwg.org/#dom-event-stopimmediatepropagation --- lib/internal/event_target.js | 4 ++++ test/parallel/test-eventtarget.js | 2 ++ 2 files changed, 6 insertions(+) diff --git a/lib/internal/event_target.js b/lib/internal/event_target.js index c6fbc81a27b4f2..2e232bfbded6e0 100644 --- a/lib/internal/event_target.js +++ b/lib/internal/event_target.js @@ -160,6 +160,10 @@ class Event { stopImmediatePropagation() { if (!isEvent(this)) throw new ERR_INVALID_THIS('Event'); + // Spec mention "stopImmediatePropagation should set both "stop propagation" + // and "stop immediate propagation" flags" + // cf: from https://dom.spec.whatwg.org/#dom-event-stopimmediatepropagation + this.stopPropagation(); this[kStop] = true; } diff --git a/test/parallel/test-eventtarget.js b/test/parallel/test-eventtarget.js index 016d357c9d7c91..9de7c2c41cbd30 100644 --- a/test/parallel/test-eventtarget.js +++ b/test/parallel/test-eventtarget.js @@ -345,7 +345,9 @@ let asyncTest = Promise.resolve(); { const target = new EventTarget(); const event = new Event('foo'); + strictEqual(event.cancelBubble, false); event.stopImmediatePropagation(); + strictEqual(event.cancelBubble, true); target.addEventListener('foo', common.mustNotCall()); target.dispatchEvent(event); }