summaryrefslogtreecommitdiff
path: root/runtime/js
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/js')
-rw-r--r--runtime/js/01_web_util.js77
-rw-r--r--runtime/js/11_workers.js2
-rw-r--r--runtime/js/99_main.js16
3 files changed, 7 insertions, 88 deletions
diff --git a/runtime/js/01_web_util.js b/runtime/js/01_web_util.js
index 9b51021f9..ca3d74826 100644
--- a/runtime/js/01_web_util.js
+++ b/runtime/js/01_web_util.js
@@ -2,15 +2,7 @@
"use strict";
((window) => {
- const {
- FunctionPrototypeCall,
- Map,
- MapPrototypeGet,
- MapPrototypeSet,
- ObjectDefineProperty,
- TypeError,
- Symbol,
- } = window.__bootstrap.primordials;
+ const { TypeError, Symbol } = window.__bootstrap.primordials;
const illegalConstructorKey = Symbol("illegalConstructorKey");
function requiredArguments(
@@ -26,75 +18,8 @@
}
}
- const handlerSymbol = Symbol("eventHandlers");
- function makeWrappedHandler(handler, isSpecialErrorEventHandler) {
- function wrappedHandler(...args) {
- if (typeof wrappedHandler.handler !== "function") {
- return;
- }
- if (isSpecialErrorEventHandler) {
- const evt = args[0];
- if (evt instanceof ErrorEvent && evt.type === "error") {
- const ret = FunctionPrototypeCall(
- wrappedHandler.handler,
- this,
- evt.message,
- evt.filename,
- evt.lineno,
- evt.colno,
- evt.error,
- );
- if (ret === true) {
- evt.preventDefault();
- }
- return;
- }
- }
-
- return FunctionPrototypeCall(wrappedHandler.handler, this, ...args);
- }
- wrappedHandler.handler = handler;
- return wrappedHandler;
- }
- function defineEventHandler(
- emitter,
- name,
- defaultValue = undefined,
- isSpecialErrorEventHandler = false,
- ) {
- // HTML specification section 8.1.5.1
- ObjectDefineProperty(emitter, `on${name}`, {
- get() {
- if (!this[handlerSymbol]) {
- return defaultValue;
- }
-
- return MapPrototypeGet(this[handlerSymbol], name)?.handler ??
- defaultValue;
- },
- set(value) {
- if (!this[handlerSymbol]) {
- this[handlerSymbol] = new Map();
- }
- let handlerWrapper = MapPrototypeGet(this[handlerSymbol], name);
- if (handlerWrapper) {
- handlerWrapper.handler = value;
- } else {
- handlerWrapper = makeWrappedHandler(
- value,
- isSpecialErrorEventHandler,
- );
- this.addEventListener(name, handlerWrapper);
- }
- MapPrototypeSet(this[handlerSymbol], name, handlerWrapper);
- },
- configurable: true,
- enumerable: true,
- });
- }
window.__bootstrap.webUtil = {
illegalConstructorKey,
requiredArguments,
- defineEventHandler,
};
})(this);
diff --git a/runtime/js/11_workers.js b/runtime/js/11_workers.js
index 59ae7371d..53b256334 100644
--- a/runtime/js/11_workers.js
+++ b/runtime/js/11_workers.js
@@ -16,7 +16,7 @@
const { URL } = window.__bootstrap.url;
const { getLocationHref } = window.__bootstrap.location;
const { log, pathFromURL } = window.__bootstrap.util;
- const { defineEventHandler } = window.__bootstrap.webUtil;
+ const { defineEventHandler } = window.__bootstrap.event;
const { deserializeJsMessageData, serializeJsMessageData } =
window.__bootstrap.messagePort;
diff --git a/runtime/js/99_main.js b/runtime/js/99_main.js
index 4f21655d6..117200a28 100644
--- a/runtime/js/99_main.js
+++ b/runtime/js/99_main.js
@@ -59,7 +59,7 @@ delete Object.prototype.__proto__;
const errors = window.__bootstrap.errors.errors;
const webidl = window.__bootstrap.webidl;
const domException = window.__bootstrap.domException;
- const { defineEventHandler } = window.__bootstrap.webUtil;
+ const { defineEventHandler } = window.__bootstrap.event;
const { deserializeJsMessageData, serializeJsMessageData } =
window.__bootstrap.messagePort;
@@ -479,10 +479,6 @@ delete Object.prototype.__proto__;
enumerable: true,
get: () => navigator,
},
- // TODO(bartlomieju): from MDN docs (https://developer.mozilla.org/en-US/docs/Web/API/WorkerGlobalScope)
- // it seems those two properties should be available to workers as well
- onload: util.writable(null),
- onunload: util.writable(null),
close: util.writable(windowClose),
closed: util.getterOnly(() => windowIsClosing),
alert: util.writable(prompt.alert),
@@ -514,8 +510,6 @@ delete Object.prototype.__proto__;
get: () => workerNavigator,
},
self: util.readOnly(globalThis),
- onmessage: util.writable(null),
- onerror: util.writable(null),
// TODO(bartlomieju): should be readonly?
close: util.nonEnumerable(workerClose),
postMessage: util.writable(postMessage),
@@ -548,8 +542,8 @@ delete Object.prototype.__proto__;
eventTarget.setEventTargetData(globalThis);
- defineEventHandler(window, "load", null);
- defineEventHandler(window, "unload", null);
+ defineEventHandler(window, "load");
+ defineEventHandler(window, "unload");
const isUnloadDispatched = SymbolFor("isUnloadDispatched");
// Stores the flag for checking whether unload is dispatched or not.
@@ -646,8 +640,8 @@ delete Object.prototype.__proto__;
eventTarget.setEventTargetData(globalThis);
- defineEventHandler(self, "message", null);
- defineEventHandler(self, "error", null, true);
+ defineEventHandler(self, "message");
+ defineEventHandler(self, "error", undefined, true);
runtimeStart(
runtimeOptions,