Bug 1053898 - Update WalkerActor to return ::after,::before in children() of host element;r=bgrins
MozReview-Commit-ID: jCRQ49ZWa2
--- a/devtools/server/actors/inspector/walker.js
+++ b/devtools/server/actors/inspector/walker.js
@@ -708,27 +708,45 @@ var WalkerActor = protocol.ActorClassWit
hasLast = nodes[nodes.length - 1].rawNode == lastChild;
} else {
// If nodes is still an empty array, we are on a host element with a shadow root but
// no direct children.
hasFirst = hasLast = true;
}
if (isShadowHost) {
+ let {before, after} = this._getBeforeAfterElements(node.rawNode);
nodes = [
// #shadow-root
this._ref(node.rawNode.shadowRoot),
+ // ::before
+ ...(before ? [before] : []),
// shadow host direct children
...nodes,
+ // ::after
+ ...(after ? [after] : []),
];
}
return { hasFirst, hasLast, nodes };
},
+ _getBeforeAfterElements: function(node) {
+ let firstChildWalker = this.getDocumentWalker(node);
+ let before = this._ref(firstChildWalker.firstChild());
+
+ let lastChildWalker = this.getDocumentWalker(node);
+ let after = this._ref(lastChildWalker.lastChild());
+
+ return {
+ before: before.isBeforePseudoElement ? before : undefined,
+ after: after.isAfterPseudoElement ? after : undefined,
+ };
+ },
+
/**
* Get the next sibling of a given node. Getting nodes one at a time
* might be inefficient, be careful.
*
* @param object options
* Named options:
* `whatToShow`: A bitmask of node types that should be included. See
* https://developer.mozilla.org/en-US/docs/Web/API/NodeFilter.