Source code
Revision control
Copy as Markdown
Other Tools
/* 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
"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;