You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.0 KiB
49 lines
1.0 KiB
|
3 years ago
|
"use strict";
|
||
|
|
|
||
|
|
const { setupForSimpleEventAccessors } = require("../helpers/create-event-accessor");
|
||
|
|
const { fireAnEvent } = require("../helpers/events");
|
||
|
|
const EventTargetImpl = require("../events/EventTarget-impl").implementation;
|
||
|
|
|
||
|
|
class AbortSignalImpl extends EventTargetImpl {
|
||
|
|
constructor(args, privateData) {
|
||
|
|
super();
|
||
|
|
|
||
|
|
// make event firing possible
|
||
|
|
this._ownerDocument = privateData.window.document;
|
||
|
|
|
||
|
|
this.aborted = false;
|
||
|
|
this.abortAlgorithms = new Set();
|
||
|
|
}
|
||
|
|
|
||
|
|
_signalAbort() {
|
||
|
|
if (this.aborted) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
this.aborted = true;
|
||
|
|
|
||
|
|
for (const algorithm of this.abortAlgorithms) {
|
||
|
|
algorithm();
|
||
|
|
}
|
||
|
|
this.abortAlgorithms.clear();
|
||
|
|
|
||
|
|
fireAnEvent("abort", this);
|
||
|
|
}
|
||
|
|
|
||
|
|
_addAlgorithm(algorithm) {
|
||
|
|
if (this.aborted) {
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
this.abortAlgorithms.add(algorithm);
|
||
|
|
}
|
||
|
|
|
||
|
|
_removeAlgorithm(algorithm) {
|
||
|
|
this.abortAlgorithms.delete(algorithm);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
setupForSimpleEventAccessors(AbortSignalImpl.prototype, ["abort"]);
|
||
|
|
|
||
|
|
module.exports = {
|
||
|
|
implementation: AbortSignalImpl
|
||
|
|
};
|