diff options
author | Luca Casonato <lucacasonato@yahoo.com> | 2021-04-07 15:22:14 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-07 15:22:14 +0200 |
commit | 966ce7de8a23f63d0f30b1748fe69ccaf07519e0 (patch) | |
tree | 3275ca96a835fe91a62a73d5a4c83bf6ca917b66 /op_crates/file/03_blob_url.js | |
parent | 2865f39bec6da135a2d2d679a65e7ff139131bd7 (diff) |
feat: blob URL support (#10045)
This commit adds blob URL support. Blob URLs are stored in a process
global storage, that can be accessed from all workers, and the module
loader. Blob URLs can be created using `URL.createObjectURL` and revoked
using `URL.revokeObjectURL`.
This commit does not add support for `fetch`ing blob URLs. This will be
added in a follow up commit.
Diffstat (limited to 'op_crates/file/03_blob_url.js')
-rw-r--r-- | op_crates/file/03_blob_url.js | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/op_crates/file/03_blob_url.js b/op_crates/file/03_blob_url.js new file mode 100644 index 000000000..29019cd84 --- /dev/null +++ b/op_crates/file/03_blob_url.js @@ -0,0 +1,63 @@ +// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. + +// @ts-check +/// <reference no-default-lib="true" /> +/// <reference path="../../core/lib.deno_core.d.ts" /> +/// <reference path="../webidl/internal.d.ts" /> +/// <reference path="../web/internal.d.ts" /> +/// <reference path="../web/lib.deno_web.d.ts" /> +/// <reference path="../url/internal.d.ts" /> +/// <reference path="../url/lib.deno_url.d.ts" /> +/// <reference path="./internal.d.ts" /> +/// <reference path="./lib.deno_file.d.ts" /> +/// <reference lib="esnext" /> +"use strict"; + +((window) => { + const core = Deno.core; + // const webidl = window.__bootstrap.webidl; + const { _byteSequence } = window.__bootstrap.file; + const { URL } = window.__bootstrap.url; + + /** + * @param {Blob} blob + * @returns {string} + */ + function createObjectURL(blob) { + // const prefix = "Failed to execute 'createObjectURL' on 'URL'"; + // webidl.requiredArguments(arguments.length, 1, { prefix }); + // blob = webidl.converters["Blob"](blob, { + // context: "Argument 1", + // prefix, + // }); + + const url = core.jsonOpSync( + "op_file_create_object_url", + blob.type, + blob[_byteSequence], + ); + + return url; + } + + /** + * @param {string} url + * @returns {void} + */ + function revokeObjectURL(url) { + // const prefix = "Failed to execute 'revokeObjectURL' on 'URL'"; + // webidl.requiredArguments(arguments.length, 1, { prefix }); + // url = webidl.converters["DOMString"](url, { + // context: "Argument 1", + // prefix, + // }); + + core.jsonOpSync( + "op_file_revoke_object_url", + url, + ); + } + + URL.createObjectURL = createObjectURL; + URL.revokeObjectURL = revokeObjectURL; +})(globalThis); |