Bug 1453206: Look in XBL anon content too for stale style data. r=smaug draft
authorEmilio Cobos Álvarez <emilio@crisal.io>
Fri, 13 Apr 2018 18:30:47 +0200
changeset 781839 7905fa5fcdfca8ad55da83cc78f27a4e4ff63b61
parent 781838 47e45132a5494f9ec6560d476de7b5448675db6f
child 781840 c68f717e25a50ffe59cd7fed6828e481b15d2443
push id106425
push userbmo:emilio@crisal.io
push dateFri, 13 Apr 2018 18:20:06 +0000
reviewerssmaug
bugs1453206
milestone61.0a1
Bug 1453206: Look in XBL anon content too for stale style data. r=smaug This would've caught it earlier. Need to do the GetFirstNode(), ... dance because well, <content>. MozReview-Commit-ID: 8F35GRO99M4
dom/base/nsDocument.cpp
--- a/dom/base/nsDocument.cpp
+++ b/dom/base/nsDocument.cpp
@@ -3838,23 +3838,34 @@ nsDocument::TryChannelCharset(nsIChannel
     }
   }
 }
 
 static inline void
 AssertNoStaleServoDataIn(const nsINode& aSubtreeRoot)
 {
 #ifdef DEBUG
-  for (const nsINode* node = aSubtreeRoot.GetFirstChild();
+  for (const nsINode* node = &aSubtreeRoot;
        node;
-       node = node->GetNextNode()) {
-    if (node->IsElement()) {
-      MOZ_ASSERT(!node->AsElement()->HasServoData());
-      if (auto* shadow = node->AsElement()->GetShadowRoot()) {
-        AssertNoStaleServoDataIn(*shadow);
+       node = node->GetNextNode(&aSubtreeRoot)) {
+    if (!node->IsElement()) {
+      continue;
+    }
+    MOZ_ASSERT(!node->AsElement()->HasServoData());
+    if (auto* shadow = node->AsElement()->GetShadowRoot()) {
+      AssertNoStaleServoDataIn(*shadow);
+    }
+    if (nsXBLBinding* binding = node->AsElement()->GetXBLBinding()) {
+      if (nsIContent* content = binding->GetAnonymousContent()) {
+        MOZ_ASSERT(!content->AsElement()->HasServoData());
+        for (nsINode* child = content->GetFirstChild();
+             child;
+             child = child->GetNextSibling()) {
+          AssertNoStaleServoDataIn(*child);
+        }
       }
     }
   }
 #endif
 }
 
 already_AddRefed<nsIPresShell>
 nsIDocument::CreateShell(nsPresContext* aContext,