summaryrefslogtreecommitdiff
path: root/runtime/js/99_main.js
diff options
context:
space:
mode:
authorAndreu Botella <andreu@andreubotella.com>2022-10-24 16:14:17 +0200
committerGitHub <noreply@github.com>2022-10-24 16:14:17 +0200
commitdbcbf53ab5168ad9c5d6ca8b4c7740db98b270a6 (patch)
tree063e79f57b443ccdd0b3e4369c0133cbf21b60a3 /runtime/js/99_main.js
parent5828ce76759e0937541d2fc0e465829b37ddd094 (diff)
experiment(ext/web): Don't expose event classes during the bootstrap phase (#16213)
Diffstat (limited to 'runtime/js/99_main.js')
-rw-r--r--runtime/js/99_main.js44
1 files changed, 27 insertions, 17 deletions
diff --git a/runtime/js/99_main.js b/runtime/js/99_main.js
index 9934ddcd3..afacd9b34 100644
--- a/runtime/js/99_main.js
+++ b/runtime/js/99_main.js
@@ -39,6 +39,7 @@ delete Intl.v8BreakIterator;
WeakMapPrototypeSet,
} = window.__bootstrap.primordials;
const util = window.__bootstrap.util;
+ const event = window.__bootstrap.event;
const eventTarget = window.__bootstrap.eventTarget;
const globalInterfaces = window.__bootstrap.globalInterfaces;
const location = window.__bootstrap.location;
@@ -78,6 +79,7 @@ delete Intl.v8BreakIterator;
const errors = window.__bootstrap.errors.errors;
const webidl = window.__bootstrap.webidl;
const domException = window.__bootstrap.domException;
+ const abortSignal = window.__bootstrap.abortSignal;
const { defineEventHandler, reportException } = window.__bootstrap.event;
const { deserializeJsMessageData, serializeJsMessageData } =
window.__bootstrap.messagePort;
@@ -156,7 +158,7 @@ delete Intl.v8BreakIterator;
const message = v[0];
const transferables = v[1];
- const msgEvent = new MessageEvent("message", {
+ const msgEvent = new event.MessageEvent("message", {
cancelable: false,
data: message,
ports: transferables.filter((t) =>
@@ -167,7 +169,7 @@ delete Intl.v8BreakIterator;
try {
globalDispatchEvent(msgEvent);
} catch (e) {
- const errorEvent = new ErrorEvent("error", {
+ const errorEvent = new event.ErrorEvent("error", {
cancelable: true,
message: e.message,
lineno: e.lineNumber ? e.lineNumber + 1 : undefined,
@@ -432,33 +434,35 @@ delete Intl.v8BreakIterator;
// https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope
const windowOrWorkerGlobalScope = {
+ AbortController: util.nonEnumerable(abortSignal.AbortController),
+ AbortSignal: util.nonEnumerable(abortSignal.AbortSignal),
Blob: util.nonEnumerable(file.Blob),
ByteLengthQueuingStrategy: util.nonEnumerable(
streams.ByteLengthQueuingStrategy,
),
- CloseEvent: util.nonEnumerable(CloseEvent),
+ CloseEvent: util.nonEnumerable(event.CloseEvent),
CompressionStream: util.nonEnumerable(compression.CompressionStream),
CountQueuingStrategy: util.nonEnumerable(
streams.CountQueuingStrategy,
),
CryptoKey: util.nonEnumerable(crypto.CryptoKey),
- CustomEvent: util.nonEnumerable(CustomEvent),
+ CustomEvent: util.nonEnumerable(event.CustomEvent),
DecompressionStream: util.nonEnumerable(compression.DecompressionStream),
DOMException: util.nonEnumerable(domException.DOMException),
- ErrorEvent: util.nonEnumerable(ErrorEvent),
- Event: util.nonEnumerable(Event),
- EventTarget: util.nonEnumerable(EventTarget),
+ ErrorEvent: util.nonEnumerable(event.ErrorEvent),
+ Event: util.nonEnumerable(event.Event),
+ EventTarget: util.nonEnumerable(eventTarget.EventTarget),
File: util.nonEnumerable(file.File),
FileReader: util.nonEnumerable(fileReader.FileReader),
FormData: util.nonEnumerable(formData.FormData),
Headers: util.nonEnumerable(headers.Headers),
- MessageEvent: util.nonEnumerable(MessageEvent),
+ MessageEvent: util.nonEnumerable(event.MessageEvent),
Performance: util.nonEnumerable(performance.Performance),
PerformanceEntry: util.nonEnumerable(performance.PerformanceEntry),
PerformanceMark: util.nonEnumerable(performance.PerformanceMark),
PerformanceMeasure: util.nonEnumerable(performance.PerformanceMeasure),
- PromiseRejectionEvent: util.nonEnumerable(PromiseRejectionEvent),
- ProgressEvent: util.nonEnumerable(ProgressEvent),
+ PromiseRejectionEvent: util.nonEnumerable(event.PromiseRejectionEvent),
+ ProgressEvent: util.nonEnumerable(event.ProgressEvent),
ReadableStream: util.nonEnumerable(streams.ReadableStream),
ReadableStreamDefaultReader: util.nonEnumerable(
streams.ReadableStreamDefaultReader,
@@ -518,9 +522,12 @@ delete Intl.v8BreakIterator;
SubtleCrypto: util.nonEnumerable(crypto.SubtleCrypto),
fetch: util.writable(fetch.fetch),
performance: util.writable(performance.performance),
+ reportError: util.writable(event.reportError),
setInterval: util.writable(timers.setInterval),
setTimeout: util.writable(timers.setTimeout),
structuredClone: util.writable(messagePort.structuredClone),
+ // Branding as a WebIDL object
+ [webidl.brand]: util.nonEnumerable(webidl.brand),
};
const unstableWindowOrWorkerGlobalScope = {
@@ -648,11 +655,14 @@ delete Intl.v8BreakIterator;
continue;
}
- const event = new PromiseRejectionEvent("unhandledrejection", {
- cancelable: true,
- promise,
- reason,
- });
+ const rejectionEvent = new event.PromiseRejectionEvent(
+ "unhandledrejection",
+ {
+ cancelable: true,
+ promise,
+ reason,
+ },
+ );
const errorEventCb = (event) => {
if (event.error === reason) {
@@ -663,12 +673,12 @@ delete Intl.v8BreakIterator;
// if error is thrown during dispatch of "unhandledrejection"
// event.
globalThis.addEventListener("error", errorEventCb);
- globalThis.dispatchEvent(event);
+ globalThis.dispatchEvent(rejectionEvent);
globalThis.removeEventListener("error", errorEventCb);
// If event was not prevented (or "unhandledrejection" listeners didn't
// throw) we will let Rust side handle it.
- if (event.defaultPrevented) {
+ if (rejectionEvent.defaultPrevented) {
ops.op_remove_pending_promise_exception(promise);
}
}