Bug 1053898 - Update WalkerActor to return ::after,::before in children() of host element;r=bgrins draft
authorJulian Descottes <jdescottes@mozilla.com>
Wed, 07 Mar 2018 12:38:54 +0100
changeset 773669 31e8cb68519893a371504885fe34ee3e58372cfd
parent 773668 bf3a2d42ddb07b5bac08fc95226e9751874c1f7a
child 773670 232795c1ee91a41ec667c8bcdc21eb73bcfcbf9a
push id104269
push userjdescottes@mozilla.com
push dateWed, 28 Mar 2018 08:16:27 +0000
reviewersbgrins
bugs1053898
milestone61.0a1
Bug 1053898 - Update WalkerActor to return ::after,::before in children() of host element;r=bgrins MozReview-Commit-ID: jCRQ49ZWa2
devtools/server/actors/inspector/walker.js
--- 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.