1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-01-03 04:48:52 -05:00

feat(workers): "crypto" global accessible in Worker scope (#5121)

This commit is contained in:
Oliver Lenehan 2020-05-08 22:30:53 +10:00 committed by GitHub
parent c0e8bae498
commit a08a4abac1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 43 additions and 24 deletions

View file

@ -6,6 +6,7 @@ import * as abortController from "./web/abort_controller.ts";
import * as abortSignal from "./web/abort_signal.ts";
import * as blob from "./web/blob.ts";
import * as consoleTypes from "./web/console.ts";
import * as csprng from "./ops/get_random_values.ts";
import * as promiseTypes from "./web/promise.ts";
import * as customEvent from "./web/custom_event.ts";
import * as domException from "./web/dom_exception.ts";
@ -222,6 +223,7 @@ export const windowOrWorkerGlobalScopeProperties = {
queuingStrategy.ByteLengthQueuingStrategyImpl
),
CountQueuingStrategy: nonEnumerable(queuingStrategy.CountQueuingStrategyImpl),
crypto: readOnly(csprng),
File: nonEnumerable(domFile.DomFileImpl),
CustomEvent: nonEnumerable(customEvent.CustomEventImpl),
DOMException: nonEnumerable(domException.DOMExceptionImpl),

View file

@ -192,6 +192,7 @@ declare function clearInterval(id?: number): void;
declare function queueMicrotask(func: Function): void;
declare var console: Console;
declare var crypto: Crypto;
declare function addEventListener(
type: string,
@ -578,6 +579,26 @@ declare class Console {
static [Symbol.hasInstance](instance: Console): boolean;
}
declare interface Crypto {
readonly subtle: null;
getRandomValues<
T extends
| Int8Array
| Int16Array
| Int32Array
| Uint8Array
| Uint16Array
| Uint32Array
| Uint8ClampedArray
| Float32Array
| Float64Array
| DataView
| null
>(
array: T
): T;
}
type FormDataEntryValue = File | string;
/** Provides a way to easily construct a set of key/value pairs representing

View file

@ -12,7 +12,6 @@ declare interface Window extends EventTarget {
readonly self: Window & typeof globalThis;
onload: ((this: Window, ev: Event) => any) | null;
onunload: ((this: Window, ev: Event) => any) | null;
crypto: Crypto;
close: () => void;
readonly closed: boolean;
Deno: typeof Deno;
@ -22,26 +21,5 @@ declare const window: Window & typeof globalThis;
declare const self: Window & typeof globalThis;
declare const onload: ((this: Window, ev: Event) => any) | null;
declare const onunload: ((this: Window, ev: Event) => any) | null;
declare const crypto: Crypto;
declare interface Crypto {
readonly subtle: null;
getRandomValues<
T extends
| Int8Array
| Int16Array
| Int32Array
| Uint8Array
| Uint16Array
| Uint32Array
| Uint8ClampedArray
| Float32Array
| Float64Array
| DataView
| null
>(
array: T
): T;
}
/* eslint-enable @typescript-eslint/no-explicit-any */

View file

@ -9,7 +9,6 @@
import * as denoNs from "./deno.ts";
import * as denoUnstableNs from "./deno_unstable.ts";
import * as csprng from "./ops/get_random_values.ts";
import { exit } from "./ops/os.ts";
import {
readOnly,
@ -57,7 +56,6 @@ function windowClose(): void {
export const mainRuntimeGlobalProperties = {
window: readOnly(globalThis),
self: readOnly(globalThis),
crypto: readOnly(csprng),
// 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: writable(null),

View file

@ -0,0 +1,3 @@
onmessage = function () {
postMessage(!!self.crypto);
};

View file

@ -290,3 +290,20 @@ Deno.test({
await promise2;
},
});
Deno.test({
name: "worker with crypto in scope",
fn: async function (): Promise<void> {
const promise = createResolvable();
const w = new Worker("../tests/subdir/worker_crypto.js", {
type: "module",
});
w.onmessage = (e): void => {
assertEquals(e.data, true);
promise.resolve();
};
w.postMessage(null);
await promise;
w.terminate();
},
});