2015-05-28 17:37:42 +03:00
|
|
|
/* -*- 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/.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
2017-11-08 08:25:33 +03:00
|
|
|
* A collection of static utility methods that are only exposed to system code.
|
|
|
|
* This is exposed in all the system globals where we can expose stuff by
|
|
|
|
* default, so should only include methods that are **thread-safe**.
|
2015-05-28 17:37:42 +03:00
|
|
|
*/
|
2017-11-08 08:25:33 +03:00
|
|
|
[ChromeOnly, Exposed=(Window,System,Worker)]
|
|
|
|
namespace ChromeUtils {
|
|
|
|
/**
|
|
|
|
* 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]
|
|
|
|
DOMString saveHeapSnapshot(optional HeapSnapshotBoundaries boundaries);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This is the same as saveHeapSnapshot, but with a different return value.
|
|
|
|
*
|
|
|
|
* @returns The snapshot ID of the file. This is the file name
|
|
|
|
* without the temp directory or the trailing
|
|
|
|
* `.fxsnapshot`.
|
|
|
|
*/
|
|
|
|
[Throws]
|
|
|
|
DOMString saveHeapSnapshotGetId(optional HeapSnapshotBoundaries boundaries);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Deserialize a core dump into a HeapSnapshot.
|
|
|
|
*
|
|
|
|
* @param filePath The file path to read the heap snapshot from.
|
|
|
|
*/
|
|
|
|
[Throws, NewObject]
|
|
|
|
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]
|
|
|
|
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]
|
|
|
|
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]
|
|
|
|
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]
|
|
|
|
ArrayBuffer base64URLDecode(ByteString string,
|
|
|
|
Base64URLDecodeOptions options);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* IF YOU ADD NEW METHODS HERE, MAKE SURE THEY ARE THREAD-SAFE.
|
|
|
|
*/
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Additional ChromeUtils methods that are _not_ thread-safe, and hence not
|
|
|
|
* exposed in workers.
|
|
|
|
*/
|
|
|
|
[Exposed=(Window,System)]
|
|
|
|
partial namespace ChromeUtils {
|
2015-06-24 23:34:54 +03:00
|
|
|
/**
|
|
|
|
* A helper that converts OriginAttributesDictionary to a opaque suffix string.
|
|
|
|
*
|
|
|
|
* @param originAttrs The originAttributes from the caller.
|
|
|
|
*/
|
2017-11-08 08:25:33 +03:00
|
|
|
ByteString
|
2015-06-24 23:34:54 +03:00
|
|
|
originAttributesToSuffix(optional OriginAttributesDictionary originAttrs);
|
2015-07-09 21:36:35 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns true if the members of |originAttrs| match the provided members
|
|
|
|
* of |pattern|.
|
|
|
|
*
|
|
|
|
* @param originAttrs The originAttributes under consideration.
|
|
|
|
* @param pattern The pattern to use for matching.
|
|
|
|
*/
|
2017-11-08 08:25:33 +03:00
|
|
|
boolean
|
2015-07-09 21:36:35 +03:00
|
|
|
originAttributesMatchPattern(optional OriginAttributesDictionary originAttrs,
|
|
|
|
optional OriginAttributesPatternDictionary pattern);
|
2016-01-06 13:08:30 +03:00
|
|
|
|
2016-02-29 14:26:00 +03:00
|
|
|
/**
|
|
|
|
* Returns an OriginAttributesDictionary with values from the |origin| suffix
|
|
|
|
* and unspecified attributes added and assigned default values.
|
|
|
|
*
|
|
|
|
* @param origin The origin URI to create from.
|
|
|
|
* @returns An OriginAttributesDictionary with values from
|
|
|
|
* the origin suffix and unspecified attributes
|
|
|
|
* added and assigned default values.
|
2016-01-06 13:08:30 +03:00
|
|
|
*/
|
|
|
|
[Throws]
|
2017-11-08 08:25:33 +03:00
|
|
|
OriginAttributesDictionary
|
2016-02-29 14:26:00 +03:00
|
|
|
createOriginAttributesFromOrigin(DOMString origin);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns an OriginAttributesDictionary that is a copy of |originAttrs| with
|
|
|
|
* unspecified attributes added and assigned default values.
|
|
|
|
*
|
|
|
|
* @param originAttrs The origin attributes to copy.
|
|
|
|
* @returns An OriginAttributesDictionary copy of |originAttrs|
|
|
|
|
* with unspecified attributes added and assigned
|
|
|
|
* default values.
|
|
|
|
*/
|
2017-11-08 08:25:33 +03:00
|
|
|
OriginAttributesDictionary
|
2016-04-04 13:20:00 +03:00
|
|
|
fillNonDefaultOriginAttributes(optional OriginAttributesDictionary originAttrs);
|
2016-02-25 18:41:13 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Returns true if the 2 OriginAttributes are equal.
|
|
|
|
*/
|
2017-11-08 08:25:33 +03:00
|
|
|
boolean
|
2016-02-25 18:41:13 +03:00
|
|
|
isOriginAttributesEqual(optional OriginAttributesDictionary aA,
|
|
|
|
optional OriginAttributesDictionary aB);
|
2017-03-17 05:10:40 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Loads and compiles the script at the given URL and returns an object
|
|
|
|
* which may be used to execute it repeatedly, in different globals, without
|
|
|
|
* re-parsing.
|
|
|
|
*/
|
2017-11-08 08:25:33 +03:00
|
|
|
[NewObject]
|
|
|
|
Promise<PrecompiledScript>
|
2017-03-17 05:10:40 +03:00
|
|
|
compileScript(DOMString url, optional CompileScriptOptionsDictionary options);
|
2017-08-18 21:10:10 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Waive Xray on a given value. Identity op for primitives.
|
|
|
|
*/
|
|
|
|
[Throws]
|
2017-11-08 08:25:33 +03:00
|
|
|
any waiveXrays(any val);
|
2017-08-18 21:10:10 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Strip off Xray waivers on a given value. Identity op for primitives.
|
|
|
|
*/
|
|
|
|
[Throws]
|
2017-11-08 08:25:33 +03:00
|
|
|
any unwaiveXrays(any val);
|
2017-08-18 21:10:10 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Gets the name of the JSClass of the object.
|
|
|
|
*
|
|
|
|
* if |unwrap| is true, all wrappers are unwrapped first. Unless you're
|
|
|
|
* specifically trying to detect whether the object is a proxy, this is
|
|
|
|
* probably what you want.
|
|
|
|
*/
|
2017-11-08 08:25:33 +03:00
|
|
|
DOMString getClassName(object obj, optional boolean unwrap = true);
|
2017-08-24 23:33:40 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Clones the properties of the given object into a new object in the given
|
|
|
|
* target compartment (or the caller compartment if no target is provided).
|
|
|
|
* Property values themeselves are not cloned.
|
|
|
|
*
|
|
|
|
* Ignores non-enumerable properties, properties on prototypes, and properties
|
|
|
|
* with getters or setters.
|
|
|
|
*/
|
|
|
|
[Throws]
|
2017-11-08 08:25:33 +03:00
|
|
|
object shallowClone(object obj, optional object? target = null);
|
2017-09-24 08:12:32 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Dispatches the given callback to the main thread when it would be
|
|
|
|
* otherwise idle. Similar to Window.requestIdleCallback, but not bound to a
|
|
|
|
* particular DOM windw.
|
|
|
|
*/
|
|
|
|
[Throws]
|
2017-11-08 08:25:33 +03:00
|
|
|
void idleDispatch(IdleRequestCallback callback,
|
|
|
|
optional IdleRequestOptions options);
|
2015-05-28 17:37:42 +03:00
|
|
|
};
|
|
|
|
|
2015-06-03 09:35:09 +03:00
|
|
|
/**
|
|
|
|
* Used by principals and the script security manager to represent origin
|
2015-07-09 21:36:35 +03:00
|
|
|
* attributes. The first dictionary is designed to contain the full set of
|
|
|
|
* OriginAttributes, the second is used for pattern-matching (i.e. does this
|
|
|
|
* OriginAttributesDictionary match the non-empty attributes in this pattern).
|
2015-06-03 09:35:09 +03:00
|
|
|
*
|
2015-07-09 21:36:35 +03:00
|
|
|
* IMPORTANT: If you add any members here, you need to do the following:
|
|
|
|
* (1) Add them to both dictionaries.
|
|
|
|
* (2) Update the methods on mozilla::OriginAttributes, including equality,
|
2015-11-03 04:50:54 +03:00
|
|
|
* serialization, deserialization, and inheritance.
|
2015-07-09 21:36:35 +03:00
|
|
|
* (3) Update the methods on mozilla::OriginAttributesPattern, including matching.
|
2015-06-03 09:35:09 +03:00
|
|
|
*/
|
|
|
|
dictionary OriginAttributesDictionary {
|
|
|
|
unsigned long appId = 0;
|
2015-07-29 00:32:00 +03:00
|
|
|
unsigned long userContextId = 0;
|
2016-02-05 04:42:44 +03:00
|
|
|
boolean inIsolatedMozBrowser = false;
|
2016-06-03 00:02:29 +03:00
|
|
|
unsigned long privateBrowsingId = 0;
|
2016-08-09 11:34:53 +03:00
|
|
|
DOMString firstPartyDomain = "";
|
2015-06-03 09:35:09 +03:00
|
|
|
};
|
2015-07-09 21:36:35 +03:00
|
|
|
dictionary OriginAttributesPatternDictionary {
|
|
|
|
unsigned long appId;
|
2015-07-29 00:32:00 +03:00
|
|
|
unsigned long userContextId;
|
2016-02-05 04:42:44 +03:00
|
|
|
boolean inIsolatedMozBrowser;
|
2016-06-03 00:02:29 +03:00
|
|
|
unsigned long privateBrowsingId;
|
2016-08-09 11:34:53 +03:00
|
|
|
DOMString firstPartyDomain;
|
2015-07-09 21:36:35 +03:00
|
|
|
};
|
2017-03-17 05:10:40 +03:00
|
|
|
|
|
|
|
dictionary CompileScriptOptionsDictionary {
|
|
|
|
/**
|
|
|
|
* The character set from which to decode the script.
|
|
|
|
*/
|
|
|
|
DOMString charset = "utf-8";
|
|
|
|
|
|
|
|
/**
|
|
|
|
* If true, certain parts of the script may be parsed lazily, the first time
|
|
|
|
* they are used, rather than eagerly parsed at load time.
|
|
|
|
*/
|
|
|
|
boolean lazilyParse = false;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* If true, the script will be compiled so that its last expression will be
|
|
|
|
* returned as the value of its execution. This makes certain types of
|
|
|
|
* optimization impossible, and disables the JIT in many circumstances, so
|
|
|
|
* should not be used when not absolutely necessary.
|
|
|
|
*/
|
|
|
|
boolean hasReturnValue = false;
|
|
|
|
};
|
2017-11-08 08:25:33 +03:00
|
|
|
|
|
|
|
/**
|
|
|
|
* 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;
|
|
|
|
};
|