Bug 1326194 - Unlink observed targets as soon as DOMSlots gets unlinked. r=mrbkap

MozReview-Commit-ID: 4OnDvyc98S8

--HG--
extra : rebase_source : ff6336a0af81babf37f5a89a2809a515eb8430cc
This commit is contained in:
Tobias Schneider 2017-01-06 13:47:06 -08:00
Родитель bb41a5f2d8
Коммит 7bf1d2ce13
2 изменённых файлов: 7 добавлений и 10 удалений

Просмотреть файл

@ -1400,6 +1400,13 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(FragmentOrElement)
{
nsDOMSlots *slots = tmp->GetExistingDOMSlots();
if (slots) {
if (tmp->IsElement()) {
Element* elem = tmp->AsElement();
for (auto iter = slots->mRegisteredIntersectionObservers.Iter(); !iter.Done(); iter.Next()) {
DOMIntersectionObserver* observer = iter.Key();
observer->UnlinkTarget(*elem);
}
}
slots->Unlink(tmp->IsXULElement());
}
}

Просмотреть файл

@ -297,16 +297,6 @@ 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;
}