Bug 985517 - Remove pseudo class locks of children to prevent ending up with broken pseudo class state. r=pbro draft
authorAlexandre Poirot <poirot.alex@gmail.com>
Wed, 02 Nov 2016 06:44:48 -0700
changeset 435043 e8871dc37652747ce318d5f2446472c6d76de8f0
parent 435042 45cede998137263fbcba72e34d28c1f84057b1ef
child 536196 7aa757be914bef89d7b54d3c50f254d8e8cc48d8
push id34913
push userbmo:poirot.alex@gmail.com
push dateMon, 07 Nov 2016 22:46:48 +0000
reviewerspbro
bugs985517
milestone52.0a1
Bug 985517 - Remove pseudo class locks of children to prevent ending up with broken pseudo class state. r=pbro MozReview-Commit-ID: LAh6HdKKJsk
devtools/server/actors/inspector.js
--- a/devtools/server/actors/inspector.js
+++ b/devtools/server/actors/inspector.js
@@ -1839,16 +1839,25 @@ var WalkerActor = protocol.ActorClassWit
    */
   removePseudoClassLock: function (node, pseudo, options = {}) {
     if (isNodeDead(node)) {
       return;
     }
 
     this._removePseudoClassLock(node, pseudo);
 
+    // Remove pseudo class for children as we don't want to allow
+    // turning it on for some childs without setting it on some parents
+    for (let locked of this._activePseudoClassLocks) {
+      if (node.rawNode.contains(locked.rawNode) &&
+          DOMUtils.hasPseudoClassLock(locked.rawNode, pseudo)) {
+        this._removePseudoClassLock(locked, pseudo);
+      }
+    }
+
     if (!options.parents) {
       return;
     }
 
     let walker = this.getDocumentWalker(node.rawNode);
     let cur;
     while ((cur = walker.parentNode())) {
       let curNode = this._ref(cur);