diff options
Diffstat (limited to 'devtools/shared/specs/inspector.js')
-rw-r--r-- | devtools/shared/specs/inspector.js | 445 |
1 files changed, 445 insertions, 0 deletions
diff --git a/devtools/shared/specs/inspector.js b/devtools/shared/specs/inspector.js new file mode 100644 index 000000000..28736ed34 --- /dev/null +++ b/devtools/shared/specs/inspector.js @@ -0,0 +1,445 @@ +/* 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"); +const { nodeSpec } = require("devtools/shared/specs/node"); +require("devtools/shared/specs/styles"); +require("devtools/shared/specs/highlighters"); +require("devtools/shared/specs/layout"); + +exports.nodeSpec = nodeSpec; + +/** + * 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" +}); + +types.addDictType("dommutation", {}); + +types.addDictType("searchresult", { + list: "domnodelist", + // Right now there is isn't anything required for metadata, + // but it's json so it can be extended with extra data. + metadata: "array:json" +}); + +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; + +// Some common request/response templates for the dom walker + +var nodeArrayMethod = { + request: { + node: Arg(0, "domnode"), + maxNodes: Option(1), + center: Option(1, "domnode"), + start: Option(1, "domnode"), + whatToShow: Option(1) + }, + response: RetVal(types.addDictType("domtraversalarray", { + nodes: "array:domnode" + })) +}; + +var traversalMethod = { + request: { + node: Arg(0, "domnode"), + whatToShow: Option(1) + }, + response: { + node: RetVal("nullable:domnode") + } +}; + +const walkerSpec = generateActorSpec({ + typeName: "domwalker", + + events: { + "new-mutations": { + type: "newMutations" + }, + "picker-node-picked": { + type: "pickerNodePicked", + node: Arg(0, "disconnectedNode") + }, + "picker-node-previewed": { + type: "pickerNodePreviewed", + node: Arg(0, "disconnectedNode") + }, + "picker-node-hovered": { + type: "pickerNodeHovered", + node: Arg(0, "disconnectedNode") + }, + "picker-node-canceled": { + type: "pickerNodeCanceled" + }, + "highlighter-ready": { + type: "highlighter-ready" + }, + "highlighter-hide": { + type: "highlighter-hide" + }, + "display-change": { + type: "display-change", + nodes: Arg(0, "array:domnode") + }, + // The walker actor emits a useful "resize" event to its front to let + // clients know when the browser window gets resized. This may be useful + // for refreshing a DOM node's styles for example, since those may depend on + // media-queries. + "resize": { + type: "resize" + } + }, + + methods: { + release: { + release: true + }, + pick: { + request: {}, + response: RetVal("disconnectedNode") + }, + cancelPick: {}, + highlight: { + request: {node: Arg(0, "nullable:domnode")} + }, + document: { + request: { node: Arg(0, "nullable:domnode") }, + response: { node: RetVal("domnode") }, + }, + documentElement: { + request: { node: Arg(0, "nullable:domnode") }, + response: { node: RetVal("domnode") }, + }, + parents: { + request: { + node: Arg(0, "domnode"), + sameDocument: Option(1), + sameTypeRootTreeItem: Option(1) + }, + response: { + nodes: RetVal("array:domnode") + }, + }, + retainNode: { + request: { node: Arg(0, "domnode") }, + response: {} + }, + unretainNode: { + request: { node: Arg(0, "domnode") }, + response: {}, + }, + releaseNode: { + request: { + node: Arg(0, "domnode"), + force: Option(1) + } + }, + children: nodeArrayMethod, + siblings: nodeArrayMethod, + nextSibling: traversalMethod, + previousSibling: traversalMethod, + findInspectingNode: { + request: {}, + response: RetVal("disconnectedNode") + }, + querySelector: { + request: { + node: Arg(0, "domnode"), + selector: Arg(1) + }, + response: RetVal("disconnectedNode") + }, + querySelectorAll: { + request: { + node: Arg(0, "domnode"), + selector: Arg(1) + }, + response: { + list: RetVal("domnodelist") + } + }, + multiFrameQuerySelectorAll: { + request: { + selector: Arg(0) + }, + response: { + list: RetVal("domnodelist") + } + }, + search: { + request: { + query: Arg(0), + }, + response: { + list: RetVal("searchresult"), + } + }, + getSuggestionsForQuery: { + request: { + query: Arg(0), + completing: Arg(1), + selectorState: Arg(2) + }, + response: { + list: RetVal("array:array:string") + } + }, + addPseudoClassLock: { + request: { + node: Arg(0, "domnode"), + pseudoClass: Arg(1), + parents: Option(2) + }, + response: {} + }, + hideNode: { + request: { node: Arg(0, "domnode") } + }, + unhideNode: { + request: { node: Arg(0, "domnode") } + }, + removePseudoClassLock: { + request: { + node: Arg(0, "domnode"), + pseudoClass: Arg(1), + parents: Option(2) + }, + response: {} + }, + clearPseudoClassLocks: { + request: { + node: Arg(0, "nullable:domnode") + }, + response: {} + }, + innerHTML: { + request: { + node: Arg(0, "domnode") + }, + response: { + value: RetVal("longstring") + } + }, + setInnerHTML: { + request: { + node: Arg(0, "domnode"), + value: Arg(1, "string"), + }, + response: {} + }, + outerHTML: { + request: { + node: Arg(0, "domnode") + }, + response: { + value: RetVal("longstring") + } + }, + setOuterHTML: { + request: { + node: Arg(0, "domnode"), + value: Arg(1, "string"), + }, + response: {} + }, + insertAdjacentHTML: { + request: { + node: Arg(0, "domnode"), + position: Arg(1, "string"), + value: Arg(2, "string") + }, + response: RetVal("disconnectedNodeArray") + }, + duplicateNode: { + request: { + node: Arg(0, "domnode") + }, + response: {} + }, + removeNode: { + request: { + node: Arg(0, "domnode") + }, + response: { + nextSibling: RetVal("nullable:domnode") + } + }, + removeNodes: { + request: { + node: Arg(0, "array:domnode") + }, + response: {} + }, + insertBefore: { + request: { + node: Arg(0, "domnode"), + parent: Arg(1, "domnode"), + sibling: Arg(2, "nullable:domnode") + }, + response: {} + }, + editTagName: { + request: { + node: Arg(0, "domnode"), + tagName: Arg(1, "string") + }, + response: {} + }, + getMutations: { + request: { + cleanup: Option(0) + }, + response: { + mutations: RetVal("array:dommutation") + } + }, + isInDOMTree: { + request: { node: Arg(0, "domnode") }, + response: { attached: RetVal("boolean") } + }, + getNodeActorFromObjectActor: { + request: { + objectActorID: Arg(0, "string") + }, + response: { + nodeFront: RetVal("nullable:disconnectedNode") + } + }, + getStyleSheetOwnerNode: { + request: { + styleSheetActorID: Arg(0, "string") + }, + response: { + ownerNode: RetVal("nullable:disconnectedNode") + } + }, + getNodeFromActor: { + request: { + actorID: Arg(0, "string"), + path: Arg(1, "array:string") + }, + response: { + node: RetVal("nullable:disconnectedNode") + } + }, + getLayoutInspector: { + request: {}, + response: { + actor: RetVal("layout") + } + } + } +}); + +exports.walkerSpec = walkerSpec; + +const inspectorSpec = generateActorSpec({ + typeName: "inspector", + + events: { + "color-picked": { + type: "colorPicked", + color: Arg(0, "string") + }, + "color-pick-canceled": { + type: "colorPickCanceled" + } + }, + + methods: { + getWalker: { + request: { + options: Arg(0, "nullable:json") + }, + response: { + walker: RetVal("domwalker") + } + }, + getPageStyle: { + request: {}, + response: { + pageStyle: RetVal("pagestyle") + } + }, + getHighlighter: { + request: { + autohide: Arg(0, "boolean") + }, + response: { + highligter: RetVal("highlighter") + } + }, + getHighlighterByType: { + request: { + typeName: Arg(0) + }, + response: { + highlighter: RetVal("nullable:customhighlighter") + } + }, + getImageDataFromURL: { + request: {url: Arg(0), maxDim: Arg(1, "nullable:number")}, + response: RetVal("imageData") + }, + resolveRelativeURL: { + request: {url: Arg(0, "string"), node: Arg(1, "nullable:domnode")}, + response: {value: RetVal("string")} + }, + pickColorFromPage: { + request: {options: Arg(0, "nullable:json")}, + response: {} + }, + cancelPickColorFromPage: { + request: {}, + response: {} + } + } +}); + +exports.inspectorSpec = inspectorSpec; |