400 lines
8.7 KiB
JavaScript
400 lines
8.7 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("resource://devtools/shared/protocol.js");
|
|
|
|
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",
|
|
});
|
|
|
|
// 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"),
|
|
},
|
|
response: RetVal(
|
|
types.addDictType("domtraversalarray", {
|
|
nodes: "array:domnode",
|
|
})
|
|
),
|
|
};
|
|
|
|
var traversalMethod = {
|
|
request: {
|
|
node: Arg(0, "domnode"),
|
|
},
|
|
response: {
|
|
node: RetVal("nullable:domnode"),
|
|
},
|
|
};
|
|
|
|
const walkerSpec = generateActorSpec({
|
|
typeName: "domwalker",
|
|
|
|
events: {
|
|
"new-mutations": {
|
|
type: "newMutations",
|
|
},
|
|
"root-available": {
|
|
type: "root-available",
|
|
node: Arg(0, "nullable:domnode"),
|
|
},
|
|
"root-destroyed": {
|
|
type: "root-destroyed",
|
|
node: Arg(0, "nullable:domnode"),
|
|
},
|
|
"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",
|
|
},
|
|
"display-change": {
|
|
type: "display-change",
|
|
nodes: Arg(0, "array:domnode"),
|
|
},
|
|
"scrollable-change": {
|
|
type: "scrollable-change",
|
|
nodes: Arg(0, "array:domnode"),
|
|
},
|
|
"overflow-change": {
|
|
type: "overflow-change",
|
|
nodes: Arg(0, "array:domnode"),
|
|
},
|
|
"container-type-change": {
|
|
type: "container-type-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,
|
|
},
|
|
document: {
|
|
request: { node: Arg(0, "nullable:domnode") },
|
|
response: { node: RetVal("domnode") },
|
|
},
|
|
documentElement: {
|
|
request: { node: Arg(0, "nullable:domnode") },
|
|
response: { node: RetVal("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,
|
|
nextSibling: traversalMethod,
|
|
previousSibling: traversalMethod,
|
|
findInspectingNode: {
|
|
request: {},
|
|
response: RetVal("disconnectedNode"),
|
|
},
|
|
querySelector: {
|
|
request: {
|
|
node: Arg(0, "domnode"),
|
|
selector: Arg(1),
|
|
},
|
|
response: RetVal("disconnectedNode"),
|
|
},
|
|
getIdrefNode: {
|
|
request: {
|
|
node: Arg(0, "domnode"),
|
|
id: Arg(1),
|
|
},
|
|
response: RetVal("disconnectedNode"),
|
|
},
|
|
querySelectorAll: {
|
|
request: {
|
|
node: Arg(0, "domnode"),
|
|
selector: Arg(1),
|
|
},
|
|
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),
|
|
enabled: Option(2, "boolean"),
|
|
},
|
|
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") },
|
|
},
|
|
getNodeActorFromWindowID: {
|
|
request: {
|
|
windowID: Arg(0, "string"),
|
|
},
|
|
response: {
|
|
nodeFront: RetVal("nullable:disconnectedNode"),
|
|
},
|
|
},
|
|
getNodeActorFromContentDomReference: {
|
|
request: {
|
|
contentDomReference: Arg(0, "json"),
|
|
},
|
|
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"),
|
|
},
|
|
},
|
|
getParentGridNode: {
|
|
request: {
|
|
node: Arg(0, "nullable:domnode"),
|
|
},
|
|
response: {
|
|
node: RetVal("nullable:domnode"),
|
|
},
|
|
},
|
|
getOffsetParent: {
|
|
request: {
|
|
node: Arg(0, "nullable:domnode"),
|
|
},
|
|
response: {
|
|
node: RetVal("nullable:domnode"),
|
|
},
|
|
},
|
|
setMutationBreakpoints: {
|
|
request: {
|
|
node: Arg(0, "nullable:domnode"),
|
|
subtree: Option(1, "nullable:boolean"),
|
|
removal: Option(1, "nullable:boolean"),
|
|
attribute: Option(1, "nullable:boolean"),
|
|
},
|
|
response: {},
|
|
},
|
|
getEmbedderElement: {
|
|
request: {
|
|
browsingContextID: Arg(0, "string"),
|
|
},
|
|
response: {
|
|
nodeFront: RetVal("disconnectedNode"),
|
|
},
|
|
},
|
|
pick: {
|
|
request: {
|
|
doFocus: Arg(0, "nullable:boolean"),
|
|
isLocalTab: Arg(1, "nullable:boolean"),
|
|
},
|
|
},
|
|
cancelPick: {
|
|
request: {},
|
|
response: {},
|
|
},
|
|
clearPicker: {
|
|
request: {},
|
|
oneway: true,
|
|
},
|
|
watchRootNode: {
|
|
request: {},
|
|
response: {},
|
|
},
|
|
getOverflowCausingElements: {
|
|
request: {
|
|
node: Arg(0, "domnode"),
|
|
},
|
|
response: {
|
|
list: RetVal("disconnectedNodeArray"),
|
|
},
|
|
},
|
|
getScrollableAncestorNode: {
|
|
request: {
|
|
node: Arg(0, "domnode"),
|
|
},
|
|
response: {
|
|
node: RetVal("nullable:domnode"),
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
exports.walkerSpec = walkerSpec;
|