summaryrefslogtreecommitdiffstats
path: root/devtools/shared/specs/object.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--devtools/shared/specs/object.js214
1 files changed, 214 insertions, 0 deletions
diff --git a/devtools/shared/specs/object.js b/devtools/shared/specs/object.js
new file mode 100644
index 0000000000..7af82cc419
--- /dev/null
+++ b/devtools/shared/specs/object.js
@@ -0,0 +1,214 @@
+/* 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/. */
+
+"use strict";
+
+const {
+ generateActorSpec,
+ Arg,
+ RetVal,
+ types,
+} = require("resource://devtools/shared/protocol.js");
+
+types.addDictType("object.descriptor", {
+ configurable: "boolean",
+ enumerable: "boolean",
+ // Can be null if there is a getter for the property.
+ value: "nullable:json",
+ // Only set `value` exists.
+ writable: "nullable:boolean",
+ // Only set when `value` does not exist and there is a getter for the property.
+ get: "nullable:json",
+ // Only set when `value` does not exist and there is a setter for the property.
+ set: "nullable:json",
+});
+
+types.addDictType("object.completion", {
+ return: "nullable:json",
+ throw: "nullable:json",
+});
+
+types.addDictType("object.prototypeproperties", {
+ prototype: "object.descriptor",
+ ownProperties: "nullable:json",
+ ownSymbols: "nullable:array:object.descriptor",
+ safeGetterValues: "nullable:json",
+});
+
+types.addDictType("object.prototype", {
+ prototype: "object.descriptor",
+});
+
+types.addDictType("object.property", {
+ descriptor: "nullable:object.descriptor",
+});
+
+types.addDictType("object.propertyValue", {
+ value: "nullable:object.completion",
+});
+
+types.addDictType("object.apply", {
+ value: "nullable:object.completion",
+});
+
+types.addDictType("object.bindings", {
+ arguments: "array:json",
+ variables: "json",
+});
+
+types.addDictType("object.enumProperties.Options", {
+ enumEntries: "nullable:boolean",
+ ignoreNonIndexedProperties: "nullable:boolean",
+ ignoreIndexedProperties: "nullable:boolean",
+ query: "nullable:string",
+ sort: "nullable:boolean",
+});
+
+types.addDictType("object.dependentPromises", {
+ promises: "array:object.descriptor",
+});
+
+types.addDictType("object.originalSourceLocation", {
+ source: "source",
+ line: "number",
+ column: "number",
+ functionDisplayName: "string",
+});
+
+types.addDictType("object.promiseState", {
+ state: "string",
+ value: "nullable:object.descriptor",
+ reason: "nullable:object.descriptor",
+ creationTimestamp: "number",
+ timeToSettle: "nullable:number",
+});
+
+types.addDictType("object.proxySlots", {
+ proxyTarget: "object.descriptor",
+ proxyHandler: "object.descriptor",
+});
+
+types.addDictType("object.customFormatterBody", {
+ customFormatterBody: "json",
+});
+
+const objectSpec = generateActorSpec({
+ typeName: "obj",
+ methods: {
+ allocationStack: {
+ request: {},
+ response: {
+ allocationStack: RetVal("array:object.originalSourceLocation"),
+ },
+ },
+ dependentPromises: {
+ request: {},
+ response: RetVal("object.dependentPromises"),
+ },
+ enumEntries: {
+ request: {},
+ response: {
+ iterator: RetVal("propertyIterator"),
+ },
+ },
+ enumProperties: {
+ request: {
+ options: Arg(0, "nullable:object.enumProperties.Options"),
+ },
+ response: {
+ iterator: RetVal("propertyIterator"),
+ },
+ },
+ enumPrivateProperties: {
+ request: {},
+ response: {
+ iterator: RetVal("privatePropertiesIterator"),
+ },
+ },
+ enumSymbols: {
+ request: {},
+ response: {
+ iterator: RetVal("symbolIterator"),
+ },
+ },
+ fulfillmentStack: {
+ request: {},
+ response: {
+ fulfillmentStack: RetVal("array:object.originalSourceLocation"),
+ },
+ },
+ prototypeAndProperties: {
+ request: {},
+ response: RetVal("object.prototypeproperties"),
+ },
+ prototype: {
+ request: {},
+ response: RetVal("object.prototype"),
+ },
+ property: {
+ request: {
+ name: Arg(0, "string"),
+ },
+ response: RetVal("object.property"),
+ },
+ propertyValue: {
+ request: {
+ name: Arg(0, "string"),
+ receiverId: Arg(1, "nullable:string"),
+ },
+ response: RetVal("object.propertyValue"),
+ },
+ apply: {
+ request: {
+ context: Arg(0, "nullable:json"),
+ arguments: Arg(1, "nullable:array:json"),
+ },
+ response: RetVal("object.apply"),
+ },
+ rejectionStack: {
+ request: {},
+ response: {
+ rejectionStack: RetVal("array:object.originalSourceLocation"),
+ },
+ },
+ promiseState: {
+ request: {},
+ response: RetVal("object.promiseState"),
+ },
+ proxySlots: {
+ request: {},
+ response: RetVal("object.proxySlots"),
+ },
+ customFormatterBody: {
+ request: {},
+ response: RetVal("object.customFormatterBody"),
+ },
+ addWatchpoint: {
+ request: {
+ property: Arg(0, "string"),
+ label: Arg(1, "string"),
+ watchpointType: Arg(2, "string"),
+ },
+ oneway: true,
+ },
+ removeWatchpoint: {
+ request: {
+ property: Arg(0, "string"),
+ },
+ oneway: true,
+ },
+ removeWatchpoints: {
+ request: {},
+ oneway: true,
+ },
+ release: { release: true },
+ // Needed for the PauseScopedObjectActor which extends the ObjectActor.
+ threadGrip: {
+ request: {},
+ response: {},
+ },
+ },
+});
+
+exports.objectSpec = objectSpec;