diff --git a/lib/internal/event_target.js b/lib/internal/event_target.js index c60e80d5c5d4c7..a539a7188c77ed 100644 --- a/lib/internal/event_target.js +++ b/lib/internal/event_target.js @@ -34,7 +34,7 @@ const { ERR_INVALID_THIS, } } = require('internal/errors'); -const { validateObject, validateString, validateInternalField } = require('internal/validators'); +const { validateAbortSignal, validateObject, validateString, validateInternalField } = require('internal/validators'); const { customInspectSymbol, @@ -575,6 +575,8 @@ class EventTarget { } type = String(type); + validateAbortSignal(signal, 'options.signal'); + if (signal) { if (signal.aborted) { return; diff --git a/test/parallel/test-whatwg-events-add-event-listener-options-signal.js b/test/parallel/test-whatwg-events-add-event-listener-options-signal.js index dfe5810180d90e..460d2ee3f27652 100644 --- a/test/parallel/test-whatwg-events-add-event-listener-options-signal.js +++ b/test/parallel/test-whatwg-events-add-event-listener-options-signal.js @@ -4,6 +4,7 @@ require('../common'); const { strictEqual, + throws, } = require('assert'); // Manually ported from: wpt@dom/events/AddEventListenerOptions-signal.any.js @@ -157,3 +158,11 @@ const { }, { once: true }); et.dispatchEvent(new Event('foo')); } +{ + const et = new EventTarget(); + [1, 1n, {}, [], null, true, 'hi', Symbol(), () => {}].forEach((signal) => { + throws(() => et.addEventListener('foo', () => {}, { signal }), { + name: 'TypeError', + }); + }); +} diff --git a/test/wpt/status/dom/events.json b/test/wpt/status/dom/events.json index 012b73f70001ae..607ac32ee4528f 100644 --- a/test/wpt/status/dom/events.json +++ b/test/wpt/status/dom/events.json @@ -11,7 +11,6 @@ "AddEventListenerOptions-signal.any.js": { "fail": { "expected": [ - "Passing null as the signal should throw", "Passing null as the signal should throw (listener is also null)" ] }