gecko-dev/devtools/shared/specs/thread.js

215 строки
4.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 {
Arg,
Option,
RetVal,
generateActorSpec,
types,
} = require("devtools/shared/protocol");
types.addDictType("available-breakpoint-group", {
name: "string",
events: "array:available-breakpoint-event",
});
types.addDictType("available-breakpoint-event", {
id: "string",
name: "string",
});
types.addDictType("thread.frames", {
frames: "array:frame",
});
types.addDictType("paused-reason", {
type: "string",
// Used for any pause type that wants to describe why the pause happened.
message: "nullable:string",
// Used for the stepping pause types.
frameFinished: "nullable:json",
// Used for the "exception" pause type.
exception: "nullable:json",
// Used for the "interrupted" pause type.
onNext: "nullable:boolean",
// Used for the "eventBreakpoint" pause type.
breakpoint: "nullable:json",
// Used for the "mutationBreakpoint" pause type.
mutationType: "nullable:string",
});
const threadSpec = generateActorSpec({
typeName: "thread",
events: {
paused: {
actor: Option(0, "nullable:string"),
frame: Option(0, "frame"),
why: Option(0, "paused-reason"),
poppedFrames: Option(0, "nullable:json"),
error: Option(0, "nullable:json"),
recordingEndpoint: Option(0, "nullable:json"),
executionPoint: Option(0, "nullable:json"),
},
resumed: {},
detached: {},
willInterrupt: {},
newSource: {
source: Option(0, "json"),
},
progress: {
recording: Option(0, "json"),
executionPoint: Option(0, "json"),
unscannedRegions: Option(0, "json"),
cachedPoints: Option(0, "json"),
},
replayFramePositions: {
positions: Option(0, "array:json"),
frame: Option(0, "string"),
thread: Option(0, "string"),
},
},
methods: {
attach: {
request: {
options: Arg(0, "json"),
},
response: RetVal("nullable:json"),
},
detach: {
request: {},
response: {},
},
reconfigure: {
request: {
options: Arg(0, "json"),
},
response: {},
},
resume: {
request: {
resumeLimit: Arg(0, "nullable:json"),
rewind: Arg(1, "boolean"),
},
response: RetVal("nullable:json"),
},
frames: {
request: {
start: Arg(0, "number"),
count: Arg(1, "number"),
},
response: RetVal("thread.frames"),
},
interrupt: {
request: {
when: Arg(0, "json"),
},
},
sources: {
response: RetVal("array:json"),
},
skipBreakpoints: {
request: {
skip: Arg(0, "json"),
},
response: {
skip: Arg(0, "json"),
},
},
fetchAncestorFramePositions: {
request: {
index: Arg(0, "number"),
},
},
dumpThread: {
request: {},
response: RetVal("json"),
},
setBreakpoint: {
request: {
location: Arg(0, "json"),
options: Arg(1, "json"),
},
},
removeBreakpoint: {
request: {
location: Arg(0, "json"),
},
},
setXHRBreakpoint: {
request: {
path: Arg(0, "string"),
method: Arg(1, "string"),
},
response: {
value: RetVal("boolean"),
},
},
removeXHRBreakpoint: {
request: {
path: Arg(0, "string"),
method: Arg(1, "string"),
},
response: {
value: RetVal("boolean"),
},
},
getAvailableEventBreakpoints: {
response: {
value: RetVal("array:available-breakpoint-group"),
},
},
getActiveEventBreakpoints: {
response: {
ids: RetVal("array:string"),
},
},
setActiveEventBreakpoints: {
request: {
ids: Arg(0, "array:string"),
},
},
pauseOnExceptions: {
request: {
pauseOnExceptions: Arg(0, "string"),
ignoreCaughtExceptions: Arg(1, "string"),
},
},
paint: {
request: {
point: Arg(0, "json"),
},
},
paintCurrentPoint: {
request: {},
},
toggleEventLogging: {
request: {
logEventBreakpoints: Arg(0, "string"),
},
},
// For testing.
debuggerRequests: {
response: {
value: RetVal("array:json"),
},
},
},
});
exports.threadSpec = threadSpec;