214 lines
5 KiB
JavaScript
214 lines
5 KiB
JavaScript
/* 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;
|