From 53f073d97c7cd56068e72008ebeeae2654cdf15e Mon Sep 17 00:00:00 2001 From: Mickael Meausoone Date: Tue, 20 Jul 2021 09:11:43 +0100 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 2da787d6388603..c1b8bbcf283dc5 100644 --- a/lib/internal/event_target.js +++ b/lib/internal/event_target.js @@ -164,6 +164,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); }