summaryrefslogtreecommitdiff
path: root/ext/web/02_event.js
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2022-01-18 00:13:14 +0100
committerGitHub <noreply@github.com>2022-01-18 00:13:14 +0100
commitb10563cb2083f7af9d4320662d6aa1897b6db23e (patch)
tree9c1d83c7806aad7783e2ac7bbff3b26b92fa3065 /ext/web/02_event.js
parentbc666e42a89f2f6ab104e5f1c1298ec590a99ce9 (diff)
fix(runtime): don't crash when window is deleted (#13392)
This commit fixes an error when user deletes "window" global JS variable. Instead of relying on "window" or "globalThis" to dispatch "load" and "unload" events, we are default to global scope of the worker.
Diffstat (limited to 'ext/web/02_event.js')
-rw-r--r--ext/web/02_event.js6
1 files changed, 5 insertions, 1 deletions
diff --git a/ext/web/02_event.js b/ext/web/02_event.js
index f9a69c625..7ba5afa27 100644
--- a/ext/web/02_event.js
+++ b/ext/web/02_event.js
@@ -970,7 +970,11 @@
webidl.requiredArguments(arguments.length, 1, {
prefix: "Failed to execute 'dispatchEvent' on 'EventTarget'",
});
- const self = this ?? globalThis;
+ // If `this` is not present, then fallback to global scope. We don't use
+ // `globalThis` directly here, because it could be deleted by user.
+ // Instead use saved reference to global scope when the script was
+ // executed.
+ const self = this ?? window;
const { listeners } = self[eventTargetData];
if (!(event.type in listeners)) {