From 9adcf4429d36716fb3fd70ef0a230e725865d8be Mon Sep 17 00:00:00 2001 From: wolfbeast Date: Sat, 19 Jan 2019 11:36:47 +0100 Subject: 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. --- dom/base/nsNodeUtils.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'dom/base') diff --git a/dom/base/nsNodeUtils.cpp b/dom/base/nsNodeUtils.cpp index ecea95dc1..75d408151 100644 --- a/dom/base/nsNodeUtils.cpp +++ b/dom/base/nsNodeUtils.cpp @@ -297,6 +297,16 @@ nsNodeUtils::LastRelease(nsINode* aNode) NodeWillBeDestroyed, (aNode)); } + if (aNode->IsElement()) { + Element* elem = aNode->AsElement(); + FragmentOrElement::nsDOMSlots* domSlots = + static_cast(slots); + for (auto iter = domSlots->mRegisteredIntersectionObservers.Iter(); !iter.Done(); iter.Next()) { + DOMIntersectionObserver* observer = iter.Key(); + observer->UnlinkTarget(*elem); + } + } + delete slots; aNode->mSlots = nullptr; } -- cgit v1.2.3