fune/devtools/shared/specs/node.js
Nicolas Chevobbe a232d2448c Bug 1492497 - [devtools] Add a way to disable (and re-enable) event listener for a given node. r=ochameau,devtools-backward-compat-reviewers,bomsy.
This patch adds a checkbox at the end of each event listeners in the EventTooltip,
which allow the user to disable/re-enable a given event listener.

This is done by managing a Map of nsIEventListenerInfo object in the NodeActor,
which we populate from `getEventListenerInfo`. Each `nsIEventListenerInfo` is
assigned a generated id, which can then be used to call the new NodeActor
methods, `(enable|disable)EventListener`.

We don't support disabling jquery/React event listeners at the moment, so we
display the checkbox for them as well, but disabled.

Differential Revision: https://phabricator.services.mozilla.com/D135133
2022-01-12 12:42:48 +00:00

160 lines
3.4 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,
RetVal,
generateActorSpec,
types,
} = require("devtools/shared/protocol.js");
types.addDictType("imageData", {
// The image data
data: "nullable:longstring",
// The original image dimensions
size: "json",
});
types.addDictType("windowDimensions", {
// The window innerWidth
innerWidth: "nullable:number",
// The window innerHeight
innerHeight: "nullable:number",
});
/**
* Returned from any call that might return a node that isn't connected to root
* by nodes the child has seen, such as querySelector.
*/
types.addDictType("disconnectedNode", {
// The actual node to return
node: "domnode",
// Nodes that are needed to connect the node to a node the client has already
// seen
newParents: "array:domnode",
});
types.addDictType("disconnectedNodeArray", {
// The actual node list to return
nodes: "array:domnode",
// Nodes that are needed to connect those nodes to the root.
newParents: "array:domnode",
});
const nodeListSpec = generateActorSpec({
typeName: "domnodelist",
methods: {
item: {
request: { item: Arg(0) },
response: RetVal("disconnectedNode"),
},
items: {
request: {
start: Arg(0, "nullable:number"),
end: Arg(1, "nullable:number"),
},
response: RetVal("disconnectedNodeArray"),
},
release: {
release: true,
},
},
});
exports.nodeListSpec = nodeListSpec;
const nodeSpec = generateActorSpec({
typeName: "domnode",
methods: {
getNodeValue: {
request: {},
response: {
value: RetVal("longstring"),
},
},
setNodeValue: {
request: { value: Arg(0) },
response: {},
},
getUniqueSelector: {
request: {},
response: {
value: RetVal("string"),
},
},
getCssPath: {
request: {},
response: {
value: RetVal("string"),
},
},
getXPath: {
request: {},
response: {
value: RetVal("string"),
},
},
scrollIntoView: {
request: {},
response: {},
},
getImageData: {
request: { maxDim: Arg(0, "nullable:number") },
response: RetVal("imageData"),
},
getEventListenerInfo: {
request: {},
response: {
events: RetVal("json"),
},
},
enableEventListener: {
request: {
eventListenerInfoId: Arg(0),
},
response: {},
},
disableEventListener: {
request: {
eventListenerInfoId: Arg(0),
},
response: {},
},
modifyAttributes: {
request: {
modifications: Arg(0, "array:json"),
},
response: {},
},
getFontFamilyDataURL: {
request: { font: Arg(0, "string"), fillStyle: Arg(1, "nullable:string") },
response: RetVal("imageData"),
},
getClosestBackgroundColor: {
request: {},
response: {
value: RetVal("string"),
},
},
getBackgroundColor: {
request: {},
response: RetVal("json"),
},
getOwnerGlobalDimensions: {
request: {},
response: RetVal("windowDimensions"),
},
waitForFrameLoad: {
request: {},
response: {},
},
},
});
exports.nodeSpec = nodeSpec;