fix: align DedicatedWorkerGlobalScope event handlers to spec (#11353)

This commit is contained in:
Andreu Botella 2021-07-10 23:32:10 +02:00 committed by GitHub
parent 67c9937e66
commit eea6000ef6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 81 additions and 32 deletions

View file

@ -88,11 +88,6 @@ delete Object.prototype.__proto__;
core.opSync("op_worker_close");
}
// TODO(bartlomieju): remove these functions
// Stuff for workers
const onmessage = () => {};
const onerror = () => {};
function postMessage(message, transferOrOptions = {}) {
const prefix =
"Failed to execute 'postMessage' on 'DedicatedWorkerGlobalScope'";
@ -144,39 +139,19 @@ delete Object.prototype.__proto__;
});
try {
if (globalThis.onmessage) {
await globalThis.onmessage(msgEvent);
}
globalDispatchEvent(msgEvent);
} catch (e) {
let handled = false;
const errorEvent = new ErrorEvent("error", {
cancelable: true,
message: e.message,
lineno: e.lineNumber ? e.lineNumber + 1 : undefined,
colno: e.columnNumber ? e.columnNumber + 1 : undefined,
filename: e.fileName,
error: null,
error: e,
});
if (globalThis["onerror"]) {
const ret = globalThis.onerror(
e.message,
e.fileName,
e.lineNumber,
e.columnNumber,
e,
);
handled = ret === true;
}
globalDispatchEvent(errorEvent);
if (errorEvent.defaultPrevented) {
handled = true;
}
if (!handled) {
if (!errorEvent.defaultPrevented) {
core.opSync(
"op_worker_unhandled_error",
e.message,
@ -465,8 +440,8 @@ delete Object.prototype.__proto__;
get: () => workerNavigator,
},
self: util.readOnly(globalThis),
onmessage: util.writable(onmessage),
onerror: util.writable(onerror),
onmessage: util.writable(null),
onerror: util.writable(null),
// TODO(bartlomieju): should be readonly?
close: util.nonEnumerable(workerClose),
postMessage: util.writable(postMessage),
@ -585,6 +560,9 @@ delete Object.prototype.__proto__;
eventTarget.setEventTargetData(globalThis);
defineEventHandler(self, "message", null);
defineEventHandler(self, "error", null, true);
runtimeStart(
runtimeOptions,
internalName ?? name,