diff options
Diffstat (limited to 'dom/webidl/ThreadSafeChromeUtils.webidl')
-rw-r--r-- | dom/webidl/ThreadSafeChromeUtils.webidl | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/dom/webidl/ThreadSafeChromeUtils.webidl b/dom/webidl/ThreadSafeChromeUtils.webidl new file mode 100644 index 000000000..8d0f21734 --- /dev/null +++ b/dom/webidl/ThreadSafeChromeUtils.webidl @@ -0,0 +1,140 @@ +/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +/** + * A collection of **thread-safe** static utility methods that are only exposed + * to Chrome. This interface is exposed in workers, while ChromeUtils is not. + */ +[ChromeOnly, Exposed=(Window,System,Worker)] +interface ThreadSafeChromeUtils { + /** + * Serialize a snapshot of the heap graph, as seen by |JS::ubi::Node| and + * restricted by |boundaries|, and write it to the provided file path. + * + * @param boundaries The portion of the heap graph to write. + * + * @returns The path to the file the heap snapshot was written + * to. This is guaranteed to be within the temp + * directory and its file name will match the regexp + * `\d+(\-\d+)?\.fxsnapshot`. + */ + [Throws] + static DOMString saveHeapSnapshot(optional HeapSnapshotBoundaries boundaries); + + /** + * Deserialize a core dump into a HeapSnapshot. + * + * @param filePath The file path to read the heap snapshot from. + */ + [Throws, NewObject] + static HeapSnapshot readHeapSnapshot(DOMString filePath); + + /** + * Return the keys in a weak map. This operation is + * non-deterministic because it is affected by the scheduling of the + * garbage collector and the cycle collector. + * + * @param aMap weak map or other JavaScript value + * @returns If aMap is a weak map object, return the keys of the weak + * map as an array. Otherwise, return undefined. + */ + [Throws, NewObject] + static any nondeterministicGetWeakMapKeys(any map); + + /** + * Return the keys in a weak set. This operation is + * non-deterministic because it is affected by the scheduling of the + * garbage collector and the cycle collector. + * + * @param aSet weak set or other JavaScript value + * @returns If aSet is a weak set object, return the keys of the weak + * set as an array. Otherwise, return undefined. + */ + [Throws, NewObject] + static any nondeterministicGetWeakSetKeys(any aSet); + + /** + * Converts a buffer to a Base64 URL-encoded string per RFC 4648. + * + * @param source The buffer to encode. + * @param options Additional encoding options. + * @returns The encoded string. + */ + [Throws] + static ByteString base64URLEncode(BufferSource source, + Base64URLEncodeOptions options); + + /** + * Decodes a Base64 URL-encoded string per RFC 4648. + * + * @param string The string to decode. + * @param options Additional decoding options. + * @returns The decoded buffer. + */ + [Throws, NewObject] + static ArrayBuffer base64URLDecode(ByteString string, + Base64URLDecodeOptions options); +}; + +/** + * A JS object whose properties specify what portion of the heap graph to + * write. The recognized properties are: + * + * * globals: [ global, ... ] + * Dump only nodes that either: + * - belong in the compartment of one of the given globals; + * - belong to no compartment, but do belong to a Zone that contains one of + * the given globals; + * - are referred to directly by one of the last two kinds of nodes; or + * - is the fictional root node, described below. + * + * * debugger: Debugger object + * Like "globals", but use the Debugger's debuggees as the globals. + * + * * runtime: true + * Dump the entire heap graph, starting with the JSRuntime's roots. + * + * One, and only one, of these properties must exist on the boundaries object. + * + * The root of the dumped graph is a fictional node whose ubi::Node type name is + * "CoreDumpRoot". If we are dumping the entire ubi::Node graph, this root node + * has an edge for each of the JSRuntime's roots. If we are dumping a selected + * set of globals, the root has an edge to each global, and an edge for each + * incoming JS reference to the selected Zones. + */ +dictionary HeapSnapshotBoundaries { + sequence<object> globals; + object debugger; + boolean runtime; +}; + +dictionary Base64URLEncodeOptions { + /** Specifies whether the output should be padded with "=" characters. */ + required boolean pad; +}; + +enum Base64URLDecodePadding { + /** + * Fails decoding if the input is unpadded. RFC 4648, section 3.2 requires + * padding, unless the referring specification prohibits it. + */ + "require", + + /** Tolerates padded and unpadded input. */ + "ignore", + + /** + * Fails decoding if the input is padded. This follows the strict base64url + * variant used in JWS (RFC 7515, Appendix C) and HTTP Encrypted + * Content-Encoding (draft-ietf-httpbis-encryption-encoding-01). + */ + "reject" +}; + +dictionary Base64URLDecodeOptions { + /** Specifies the padding mode for decoding the input. */ + required Base64URLDecodePadding padding; +}; |