Bug 1429959 - Make nsBindingManager::EnumerateBoundContentBindings yield each binding only once. r?bholley
MozReview-Commit-ID: LxiF2RngJmq
--- a/dom/xbl/nsBindingManager.cpp
+++ b/dom/xbl/nsBindingManager.cpp
@@ -717,21 +717,28 @@ nsBindingManager::WalkRules(nsIStyleRule
bool
nsBindingManager::EnumerateBoundContentBindings(
const BoundContentBindingCallback& aCallback) const
{
if (!mBoundContentSet) {
return true;
}
+ nsTHashtable<nsPtrHashKey<nsXBLBinding>> bindings;
for (auto iter = mBoundContentSet->Iter(); !iter.Done(); iter.Next()) {
nsIContent* boundContent = iter.Get()->GetKey();
for (nsXBLBinding* binding = boundContent->GetXBLBinding();
binding;
binding = binding->GetBaseBinding()) {
+ // If we have already invoked the callback with a binding, we
+ // should have also invoked it for all its base bindings, so we
+ // don't need to continue this loop anymore.
+ if (!bindings.EnsureInserted(binding)) {
+ break;
+ }
if (!aCallback(binding)) {
return false;
}
}
}
return true;
}