summaryrefslogtreecommitdiffstats
path: root/devtools/shared/specs/webconsole.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/shared/specs/webconsole.js')
-rw-r--r--devtools/shared/specs/webconsole.js265
1 files changed, 265 insertions, 0 deletions
diff --git a/devtools/shared/specs/webconsole.js b/devtools/shared/specs/webconsole.js
new file mode 100644
index 0000000000..ea8f1d7634
--- /dev/null
+++ b/devtools/shared/specs/webconsole.js
@@ -0,0 +1,265 @@
+/* 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("devtools/shared/protocol");
+
+types.addDictType("console.traits", {
+ evaluateJSAsync: "boolean",
+});
+
+types.addDictType("console.startlisteners", {
+ startedListeners: "array:string",
+ nativeConsoleAPI: "nullable:boolean",
+ traits: "console.traits",
+});
+
+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, "string"),
+ 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"),
+ },
+ 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"),
+ },
+ lastPrivateContextExited: {},
+ documentEvent: {
+ name: Option(0, "string"),
+ time: Option(0, "string"),
+ },
+ },
+
+ 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"),
+ },
+ 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"),
+ },
+ /**
+ * Clear the cache of messages (page errors and console API calls) expects no response.
+ */
+ clearMessagesCache: {
+ oneway: true,
+ },
+ /**
+ * Get Web Console-related preferences on the server.
+ *
+ * @Arg array preferences
+ * An array with the preferences you want to retrieve.
+ */
+ getPreferences: {
+ request: {
+ preferences: Arg(0, "array:string"),
+ },
+ response: RetVal("json"),
+ },
+ /**
+ * Set Web Console-related preferences on the server.
+ *
+ * @Arg object preferences
+ * An object with the preferences you want to change.
+ */
+ setPreferences: {
+ request: {
+ preferences: Arg(0, "json"),
+ },
+ response: RetVal("json"),
+ },
+ /**
+ * Send a HTTP request with the given data.
+ *
+ * @Arg object data
+ * The details of the HTTP request.
+ */
+ sendHTTPRequest: {
+ request: {
+ request: Arg(0, "json"),
+ },
+ response: RetVal("json"),
+ },
+
+ blockRequest: {
+ request: {
+ filter: Arg(0, "json"),
+ },
+ },
+
+ unblockRequest: {
+ request: {
+ filter: Arg(0, "json"),
+ },
+ },
+
+ setBlockedUrls: {
+ request: {
+ url: Arg(0, "json"),
+ },
+ },
+ getBlockedUrls: {
+ request: {},
+ response: {
+ blockedUrls: RetVal("array:string"),
+ },
+ },
+ },
+};
+
+const webconsoleSpec = generateActorSpec(webconsoleSpecPrototype);
+
+exports.webconsoleSpecPrototype = webconsoleSpecPrototype;
+exports.webconsoleSpec = webconsoleSpec;