diff options
Diffstat (limited to 'devtools/shared/specs/object.js')
-rw-r--r-- | devtools/shared/specs/object.js | 214 |
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; |