summaryrefslogtreecommitdiff
path: root/op_crates/web/02_abort_signal.js
diff options
context:
space:
mode:
authorLuca Casonato <lucacasonato@yahoo.com>2021-02-13 15:58:12 +0100
committerGitHub <noreply@github.com>2021-02-13 15:58:12 +0100
commitaf460fc464562566dc1534c0f61f53c2976b9bd7 (patch)
tree74ac43e5574711f71d5ee90bbc020740e41bdf69 /op_crates/web/02_abort_signal.js
parentd2d7dc8d675d70f0061bdaf99ae4a08d84156aa9 (diff)
fix: webidl utils and align `Event` to spec (#9470)
Diffstat (limited to 'op_crates/web/02_abort_signal.js')
-rw-r--r--op_crates/web/02_abort_signal.js116
1 files changed, 0 insertions, 116 deletions
diff --git a/op_crates/web/02_abort_signal.js b/op_crates/web/02_abort_signal.js
deleted file mode 100644
index 3090513eb..000000000
--- a/op_crates/web/02_abort_signal.js
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
-"use strict";
-
-((window) => {
- const { setIsTrusted } = window.__bootstrap.event;
-
- const add = Symbol("add");
- const signalAbort = Symbol("signalAbort");
- const remove = Symbol("remove");
-
- const illegalConstructorKey = Symbol("illegalConstructorKey");
-
- class AbortSignal extends EventTarget {
- #aborted = false;
- #abortAlgorithms = new Set();
-
- [add](algorithm) {
- this.#abortAlgorithms.add(algorithm);
- }
-
- [signalAbort]() {
- if (this.#aborted) {
- return;
- }
- this.#aborted = true;
- for (const algorithm of this.#abortAlgorithms) {
- algorithm();
- }
- this.#abortAlgorithms.clear();
- const event = new Event("abort");
- setIsTrusted(event, true);
- this.dispatchEvent(event);
- }
-
- [remove](algorithm) {
- this.#abortAlgorithms.delete(algorithm);
- }
-
- constructor(key = null) {
- if (key != illegalConstructorKey) {
- throw new TypeError("Illegal constructor.");
- }
- super();
- }
-
- get aborted() {
- return Boolean(this.#aborted);
- }
-
- get [Symbol.toStringTag]() {
- return "AbortSignal";
- }
- }
- defineEventHandler(AbortSignal.prototype, "abort");
- class AbortController {
- #signal = new AbortSignal(illegalConstructorKey);
-
- get signal() {
- return this.#signal;
- }
-
- abort() {
- this.#signal[signalAbort]();
- }
-
- get [Symbol.toStringTag]() {
- return "AbortController";
- }
- }
-
- const handlerSymbol = Symbol("eventHandlers");
-
- function makeWrappedHandler(handler) {
- function wrappedHandler(...args) {
- if (typeof wrappedHandler.handler !== "function") {
- return;
- }
- return wrappedHandler.handler.call(this, ...args);
- }
- wrappedHandler.handler = handler;
- return wrappedHandler;
- }
- // TODO(benjamingr) reuse this here and websocket where possible
- function defineEventHandler(emitter, name) {
- // HTML specification section 8.1.5.1
- Object.defineProperty(emitter, `on${name}`, {
- get() {
- return this[handlerSymbol]?.get(name)?.handler;
- },
- set(value) {
- if (!this[handlerSymbol]) {
- this[handlerSymbol] = new Map();
- }
- let handlerWrapper = this[handlerSymbol]?.get(name);
- if (handlerWrapper) {
- handlerWrapper.handler = value;
- } else {
- handlerWrapper = makeWrappedHandler(value);
- this.addEventListener(name, handlerWrapper);
- }
- this[handlerSymbol].set(name, handlerWrapper);
- },
- configurable: true,
- enumerable: true,
- });
- }
-
- window.AbortSignal = AbortSignal;
- window.AbortController = AbortController;
- window.__bootstrap = window.__bootstrap || {};
- window.__bootstrap.abortSignal = {
- add,
- signalAbort,
- remove,
- };
-})(this);