Blame view

lib/jsdom/living/aborting/AbortSignal-impl.js 1.07 KB
858f2bdf5   Boyan Georgiev   fixes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
  "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(globalObject, args, privateData) {
      super(globalObject, args, privateData);
  
      // make event firing possible
      this._ownerDocument = globalObject.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
  };