diff options
Diffstat (limited to 'runtime/js')
-rw-r--r-- | runtime/js/01_web_util.js | 77 | ||||
-rw-r--r-- | runtime/js/11_workers.js | 2 | ||||
-rw-r--r-- | runtime/js/99_main.js | 16 |
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, |