diff options
author | Andreu Botella <andreu@andreubotella.com> | 2022-10-24 16:14:17 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-10-24 16:14:17 +0200 |
commit | dbcbf53ab5168ad9c5d6ca8b4c7740db98b270a6 (patch) | |
tree | 063e79f57b443ccdd0b3e4369c0133cbf21b60a3 /runtime/js | |
parent | 5828ce76759e0937541d2fc0e465829b37ddd094 (diff) |
experiment(ext/web): Don't expose event classes during the bootstrap phase (#16213)
Diffstat (limited to 'runtime/js')
-rw-r--r-- | runtime/js/10_permissions.js | 10 | ||||
-rw-r--r-- | runtime/js/11_workers.js | 4 | ||||
-rw-r--r-- | runtime/js/30_os.js | 4 | ||||
-rw-r--r-- | runtime/js/99_main.js | 44 |
4 files changed, 37 insertions, 25 deletions
diff --git a/runtime/js/10_permissions.js b/runtime/js/10_permissions.js index 6aad0677d..f048a5d62 100644 --- a/runtime/js/10_permissions.js +++ b/runtime/js/10_permissions.js @@ -2,13 +2,11 @@ "use strict"; ((window) => { - const { - Event, - EventTarget, - Deno: { core: { ops } }, - __bootstrap: { webUtil: { illegalConstructorKey } }, - } = window; + const { ops } = Deno.core; + const { Event } = window.__bootstrap.event; + const { EventTarget } = window.__bootstrap.eventTarget; const { pathFromURL } = window.__bootstrap.util; + const { illegalConstructorKey } = window.__bootstrap.webUtil; const { ArrayIsArray, ArrayPrototypeIncludes, diff --git a/runtime/js/11_workers.js b/runtime/js/11_workers.js index 5e3253dff..0d05ac671 100644 --- a/runtime/js/11_workers.js +++ b/runtime/js/11_workers.js @@ -17,7 +17,9 @@ const { getLocationHref } = window.__bootstrap.location; const { serializePermissions } = window.__bootstrap.permissions; const { log } = window.__bootstrap.util; - const { defineEventHandler } = window.__bootstrap.event; + const { ErrorEvent, MessageEvent, defineEventHandler } = + window.__bootstrap.event; + const { EventTarget } = window.__bootstrap.eventTarget; const { deserializeJsMessageData, serializeJsMessageData, diff --git a/runtime/js/30_os.js b/runtime/js/30_os.js index c3addd043..4fa71fa83 100644 --- a/runtime/js/30_os.js +++ b/runtime/js/30_os.js @@ -4,12 +4,14 @@ ((window) => { const core = window.Deno.core; const ops = core.ops; + const { Event } = window.__bootstrap.event; + const { EventTarget } = window.__bootstrap.eventTarget; const { Error, SymbolFor, } = window.__bootstrap.primordials; - const windowDispatchEvent = window.dispatchEvent.bind(window); + const windowDispatchEvent = EventTarget.prototype.dispatchEvent.bind(window); function loadavg() { return ops.op_loadavg(); 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); } } |