This helps ensure that the object actors returned by the console actor evaluation RDP request are the same for the same JS values being processed and notified via the tracer ressources. This allows identifying same objects when doing a search per value. Differential Revision: https://phabricator.services.mozilla.com/D225237
205 lines
6.3 KiB
JavaScript
205 lines
6.3 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 {
|
|
types,
|
|
generateActorSpec,
|
|
RetVal,
|
|
Option,
|
|
Arg,
|
|
} = require("resource://devtools/shared/protocol.js");
|
|
|
|
types.addDictType("console.startlisteners", {
|
|
startedListeners: "array:string",
|
|
});
|
|
|
|
types.addDictType("console.stoplisteners", {
|
|
stoppedListeners: "array:string",
|
|
});
|
|
|
|
types.addDictType("console.autocomplete", {
|
|
matches: "array:string",
|
|
matchProp: "string",
|
|
});
|
|
|
|
types.addDictType("console.evaluatejsasync", {
|
|
resultID: "string",
|
|
});
|
|
|
|
types.addDictType("console.cachedmessages", {
|
|
// this type is a union of two potential return types:
|
|
// { error, message } and { _type, message, timeStamp }
|
|
error: "nullable:string",
|
|
message: "longstring",
|
|
_type: "nullable:string",
|
|
timeStamp: "nullable:string",
|
|
});
|
|
|
|
const webconsoleSpecPrototype = {
|
|
typeName: "console",
|
|
|
|
events: {
|
|
evaluationResult: {
|
|
resultID: Option(0, "string"),
|
|
awaitResult: Option(0, "nullable:boolean"),
|
|
errorMessageName: Option(0, "nullable:string"),
|
|
exception: Option(0, "nullable:json"),
|
|
exceptionMessage: Option(0, "nullable:string"),
|
|
exceptionDocURL: Option(0, "nullable:string"),
|
|
exceptionStack: Option(0, "nullable:json"),
|
|
hasException: Option(0, "nullable:boolean"),
|
|
frame: Option(0, "nullable:json"),
|
|
helperResult: Option(0, "nullable:json"),
|
|
input: Option(0, "nullable:string"),
|
|
notes: Option(0, "nullable:string"),
|
|
result: Option(0, "nullable:json"),
|
|
startTime: Option(0, "number"),
|
|
timestamp: Option(0, "number"),
|
|
topLevelAwaitRejected: Option(0, "nullable:boolean"),
|
|
},
|
|
fileActivity: {
|
|
uri: Option(0, "string"),
|
|
},
|
|
pageError: {
|
|
pageError: Option(0, "json"),
|
|
},
|
|
logMessage: {
|
|
message: Option(0, "json"),
|
|
timeStamp: Option(0, "string"),
|
|
},
|
|
consoleAPICall: {
|
|
message: Option(0, "json"),
|
|
clonedFromContentProcess: Option(0, "nullable:boolean"),
|
|
},
|
|
reflowActivity: {
|
|
interruptible: Option(0, "boolean"),
|
|
start: Option(0, "number"),
|
|
end: Option(0, "number"),
|
|
sourceURL: Option(0, "nullable:string"),
|
|
sourceLine: Option(0, "nullable:number"),
|
|
functionName: Option(0, "nullable:string"),
|
|
},
|
|
// This event is modified re-emitted on the client as "networkEvent".
|
|
// In order to avoid a naming collision, we rename the server event.
|
|
serverNetworkEvent: {
|
|
type: "networkEvent",
|
|
eventActor: Option(0, "json"),
|
|
},
|
|
inspectObject: {
|
|
objectActor: Option(0, "json"),
|
|
},
|
|
documentEvent: {
|
|
name: Option(0, "string"),
|
|
time: Option(0, "string"),
|
|
hasNativeConsoleAPI: Option(0, "boolean"),
|
|
},
|
|
},
|
|
|
|
methods: {
|
|
/**
|
|
* Start the given Web Console listeners.
|
|
*
|
|
* @see webconsoleFront LISTENERS
|
|
* @Arg array events
|
|
* Array of events you want to start. See this.LISTENERS for
|
|
* known events.
|
|
*/
|
|
startListeners: {
|
|
request: {
|
|
listeners: Arg(0, "array:string"),
|
|
},
|
|
response: RetVal("console.startlisteners"),
|
|
},
|
|
/**
|
|
* Stop the given Web Console listeners.
|
|
*
|
|
* @see webconsoleFront LISTENERS
|
|
* @Arg array events
|
|
* Array of events you want to stop. See this.LISTENERS for
|
|
* known events.
|
|
* @Arg function onResponse
|
|
* Function to invoke when the server response is received.
|
|
*/
|
|
stopListeners: {
|
|
request: {
|
|
listeners: Arg(0, "nullable:array:string"),
|
|
},
|
|
response: RetVal("console.stoplisteners"),
|
|
},
|
|
/**
|
|
* Retrieve the cached messages from the server.
|
|
*
|
|
* @see webconsoleFront CACHED_MESSAGES
|
|
* @Arg array types
|
|
* The array of message types you want from the server. See
|
|
* this.CACHED_MESSAGES for known types.
|
|
*/
|
|
getCachedMessages: {
|
|
request: {
|
|
messageTypes: Arg(0, "array:string"),
|
|
},
|
|
// the return value here has a field "string" which can either be a longStringActor
|
|
// or a plain string. Since we do not have union types, we cannot fully type this
|
|
// response
|
|
response: RetVal("console.cachedmessages"),
|
|
},
|
|
evaluateJSAsync: {
|
|
request: {
|
|
text: Option(0, "string"),
|
|
frameActor: Option(0, "string"),
|
|
url: Option(0, "string"),
|
|
selectedNodeActor: Option(0, "string"),
|
|
selectedObjectActor: Option(0, "string"),
|
|
innerWindowID: Option(0, "number"),
|
|
mapped: Option(0, "nullable:json"),
|
|
eager: Option(0, "nullable:boolean"),
|
|
disableBreaks: Option(0, "nullable:boolean"),
|
|
preferConsoleCommandsOverLocalSymbols: Option(0, "nullable:boolean"),
|
|
evalInTracer: Option(0, "nullable:boolean"),
|
|
},
|
|
response: RetVal("console.evaluatejsasync"),
|
|
},
|
|
/**
|
|
* Autocomplete a JavaScript expression.
|
|
*
|
|
* @Arg {String} string
|
|
* The code you want to autocomplete.
|
|
* @Arg {Number} cursor
|
|
* Cursor location inside the string. Index starts from 0.
|
|
* @Arg {String} frameActor
|
|
* The id of the frame actor that made the call.
|
|
* @Arg {String} selectedNodeActor: Actor id of the selected node in the inspector.
|
|
* @Arg {Array} authorizedEvaluations
|
|
* Array of the properties access which can be executed by the engine.
|
|
* Example: [["x", "myGetter"], ["x", "myGetter", "y", "anotherGetter"]] to
|
|
* retrieve properties of `x.myGetter.` and `x.myGetter.y.anotherGetter`.
|
|
*/
|
|
autocomplete: {
|
|
request: {
|
|
text: Arg(0, "string"),
|
|
cursor: Arg(1, "nullable:number"),
|
|
frameActor: Arg(2, "nullable:string"),
|
|
selectedNodeActor: Arg(3, "nullable:string"),
|
|
authorizedEvaluations: Arg(4, "nullable:json"),
|
|
expressionVars: Arg(5, "nullable:json"),
|
|
},
|
|
response: RetVal("console.autocomplete"),
|
|
},
|
|
|
|
/**
|
|
* Same as clearMessagesCache, but wait for the server response.
|
|
*/
|
|
clearMessagesCacheAsync: {
|
|
request: {},
|
|
},
|
|
},
|
|
};
|
|
|
|
const webconsoleSpec = generateActorSpec(webconsoleSpecPrototype);
|
|
|
|
exports.webconsoleSpecPrototype = webconsoleSpecPrototype;
|
|
exports.webconsoleSpec = webconsoleSpec;
|