summaryrefslogtreecommitdiffstats
path: root/devtools/shared/specs/call-watcher.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/shared/specs/call-watcher.js')
-rw-r--r--devtools/shared/specs/call-watcher.js79
1 files changed, 79 insertions, 0 deletions
diff --git a/devtools/shared/specs/call-watcher.js b/devtools/shared/specs/call-watcher.js
new file mode 100644
index 000000000..34d63111a
--- /dev/null
+++ b/devtools/shared/specs/call-watcher.js
@@ -0,0 +1,79 @@
+/* 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;