summaryrefslogtreecommitdiff
path: root/op_crates
diff options
context:
space:
mode:
Diffstat (limited to 'op_crates')
-rw-r--r--op_crates/web/02_abort_signal.js9
-rw-r--r--op_crates/web/abort_controller_test.js20
2 files changed, 27 insertions, 2 deletions
diff --git a/op_crates/web/02_abort_signal.js b/op_crates/web/02_abort_signal.js
index 908e85ac9..2b51ef1ea 100644
--- a/op_crates/web/02_abort_signal.js
+++ b/op_crates/web/02_abort_signal.js
@@ -5,6 +5,8 @@
const signalAbort = Symbol("signalAbort");
const remove = Symbol("remove");
+ const illegalConstructorKey = Symbol("illegalConstructorKey");
+
class AbortSignal extends EventTarget {
#aborted = false;
#abortAlgorithms = new Set();
@@ -29,7 +31,10 @@
this.#abortAlgorithms.delete(algorithm);
}
- constructor() {
+ constructor(key) {
+ if (key != illegalConstructorKey) {
+ throw new TypeError("Illegal constructor.");
+ }
super();
this.onabort = null;
this.addEventListener("abort", (evt) => {
@@ -50,7 +55,7 @@
}
class AbortController {
- #signal = new AbortSignal();
+ #signal = new AbortSignal(illegalConstructorKey);
get signal() {
return this.#signal;
diff --git a/op_crates/web/abort_controller_test.js b/op_crates/web/abort_controller_test.js
index a2fb12c65..0243c6628 100644
--- a/op_crates/web/abort_controller_test.js
+++ b/op_crates/web/abort_controller_test.js
@@ -9,6 +9,19 @@ function assertEquals(left, right) {
assert(left === right);
}
+function assertThrows(fn) {
+ let error = null;
+ try {
+ fn();
+ } catch (error_) {
+ error = error_;
+ }
+ if (error == null) {
+ throw new Error("Didn't throw.");
+ }
+ return error;
+}
+
function basicAbortController() {
controller = new AbortController();
assert(controller);
@@ -64,12 +77,19 @@ function controllerHasProperToString() {
assertEquals(actual, "[object AbortController]");
}
+function abortSignalIllegalConstructor() {
+ const error = assertThrows(() => new AbortSignal());
+ assert(error instanceof TypeError);
+ assertEquals(error.message, "Illegal constructor.");
+}
+
function main() {
basicAbortController();
signalCallsOnabort();
signalEventListener();
onlyAbortsOnce();
controllerHasProperToString();
+ abortSignalIllegalConstructor();
}
main();