mirror of
https://github.com/denoland/deno.git
synced 2024-12-22 23:34:47 -05:00
feat(op_crates/web) EventTarget signal support (#8616)
Fixes: https://github.com/denoland/deno/issues/8606
This commit is contained in:
parent
ae21a9569b
commit
71ef5a9cd3
3 changed files with 35 additions and 3 deletions
|
@ -693,7 +693,7 @@
|
|||
for (let i = 0; i < handlers.length; i++) {
|
||||
const listener = handlers[i];
|
||||
|
||||
let capture, once, passive;
|
||||
let capture, once, passive, signal;
|
||||
if (typeof listener.options === "boolean") {
|
||||
capture = listener.options;
|
||||
once = false;
|
||||
|
@ -895,7 +895,19 @@
|
|||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (options?.signal) {
|
||||
const signal = options?.signal;
|
||||
if (signal.aborted) {
|
||||
// If signal is not null and its aborted flag is set, then return.
|
||||
return;
|
||||
} else {
|
||||
// If listener’s signal is not null, then add the following abort
|
||||
// abort steps to it: Remove an event listener.
|
||||
signal.addEventListener("abort", () => {
|
||||
this.removeEventListener(type, callback, options);
|
||||
});
|
||||
}
|
||||
}
|
||||
listeners[type].push({ callback, options });
|
||||
}
|
||||
|
||||
|
|
|
@ -106,6 +106,25 @@ function eventIsTrustedGetterName() {
|
|||
assert(e.message.includes("not a constructor"));
|
||||
}
|
||||
}
|
||||
function eventAbortSignal() {
|
||||
let count = 0;
|
||||
function handler() {
|
||||
count++;
|
||||
}
|
||||
const et = new EventTarget();
|
||||
const controller = new AbortController();
|
||||
et.addEventListener("test", handler, { signal: controller.signal });
|
||||
et.dispatchEvent(new Event("test"));
|
||||
assert(count === 1);
|
||||
et.dispatchEvent(new Event("test"));
|
||||
assert(count === 2);
|
||||
controller.abort();
|
||||
et.dispatchEvent(new Event("test"));
|
||||
assert(count === 2);
|
||||
et.addEventListener("test", handler, { signal: controller.signal });
|
||||
et.dispatchEvent(new Event("test"));
|
||||
assert(count === 2);
|
||||
}
|
||||
function main() {
|
||||
eventInitializedWithType();
|
||||
eventInitializedWithTypeAndDict();
|
||||
|
@ -116,6 +135,7 @@ function main() {
|
|||
eventInitializedWithNonStringType();
|
||||
eventIsTrusted();
|
||||
eventIsTrustedGetterName();
|
||||
eventAbortSignal();
|
||||
}
|
||||
|
||||
main();
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 8f49014513d9508f0495977be44ec60c6f4c8e06
|
||||
Subproject commit 4c7517f6cc5aa3bd7cf405be7dfb8ec1cac6d2de
|
Loading…
Reference in a new issue