mirror of
https://github.com/denoland/deno.git
synced 2025-09-24 19:32:30 +00:00
experiment(ext/web): Don't expose event classes during the bootstrap phase (#16213)
This commit is contained in:
parent
5828ce7675
commit
dbcbf53ab5
16 changed files with 74 additions and 49 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue