Actually unlink targets from registered intersection observers.

When a node is released/removed, and it has an intersection observer
attached to it, that observer should be unlinked at the time of release.

This resolves #935.
This commit is contained in:
wolfbeast 2019-01-19 11:36:47 +01:00 committed by Roy Tam
commit 7798af3c14

View file

@ -297,6 +297,16 @@ nsNodeUtils::LastRelease(nsINode* aNode)
NodeWillBeDestroyed, (aNode));
}
if (aNode->IsElement()) {
Element* elem = aNode->AsElement();
FragmentOrElement::nsDOMSlots* domSlots =
static_cast<FragmentOrElement::nsDOMSlots*>(slots);
for (auto iter = domSlots->mRegisteredIntersectionObservers.Iter(); !iter.Done(); iter.Next()) {
DOMIntersectionObserver* observer = iter.Key();
observer->UnlinkTarget(*elem);
}
}
delete slots;
aNode->mSlots = nullptr;
}