Mypal/devtools/shared/specs/call-watcher.js

80 lines
1.8 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 protocol = require("devtools/shared/protocol");
const { Arg, RetVal, Option, generateActorSpec } = protocol;
/**
* Type describing a single function call in a stack trace.
*/
protocol.types.addDictType("call-stack-item", {
name: "string",
file: "string",
line: "number"
});
/**
* Type describing an overview of a function call.
*/
protocol.types.addDictType("call-details", {
type: "number",
name: "string",
stack: "array:call-stack-item"
});
const functionCallSpec = generateActorSpec({
typeName: "function-call",
methods: {
getDetails: {
response: { info: RetVal("call-details") }
},
},
});
exports.functionCallSpec = functionCallSpec;
const callWatcherSpec = generateActorSpec({
typeName: "call-watcher",
events: {
/**
* Events emitted when the `onCall` function isn't provided.
*/
"call": {
type: "call",
function: Arg(0, "function-call")
}
},
methods: {
setup: {
request: {
tracedGlobals: Option(0, "nullable:array:string"),
tracedFunctions: Option(0, "nullable:array:string"),
startRecording: Option(0, "boolean"),
performReload: Option(0, "boolean"),
holdWeak: Option(0, "boolean"),
storeCalls: Option(0, "boolean")
},
oneway: true
},
finalize: {
oneway: true
},
isRecording: {
response: RetVal("boolean")
},
initTimestampEpoch: {},
resumeRecording: {},
pauseRecording: {
response: { calls: RetVal("array:function-call") }
},
eraseRecording: {},
}
});
exports.callWatcherSpec = callWatcherSpec;