Bug 1315837 - Crash in mozilla::dom::Element::UpdateIntersectionObservation. r=mrbkap

This commit is contained in:
Tobias Schneider
2016-11-15 15:49:00 +01:00
parent 6fff8f8c60
commit 28ff83be24
3 changed files with 34 additions and 11 deletions

View File

@@ -159,15 +159,23 @@ DOMIntersectionObserver::Observe(Element& aTarget)
void
DOMIntersectionObserver::Unobserve(Element& aTarget)
{
if (!mObservationTargets.Contains(&aTarget)) {
return;
if (UnlinkTarget(aTarget)) {
aTarget.UnregisterIntersectionObserver(this);
}
if (mObservationTargets.Count() == 1) {
Disconnect();
return;
}
aTarget.UnregisterIntersectionObserver(this);
mObservationTargets.RemoveEntry(&aTarget);
}
bool
DOMIntersectionObserver::UnlinkTarget(Element& aTarget)
{
if (!mObservationTargets.Contains(&aTarget)) {
return false;
}
if (mObservationTargets.Count() == 1) {
Disconnect();
return false;
}
mObservationTargets.RemoveEntry(&aTarget);
return true;
}
void
@@ -192,8 +200,10 @@ DOMIntersectionObserver::Disconnect()
target->UnregisterIntersectionObserver(this);
}
mObservationTargets.Clear();
nsIDocument* document = mOwner->GetExtantDoc();
document->RemoveIntersectionObserver(this);
if (mOwner) {
nsIDocument* document = mOwner->GetExtantDoc();
document->RemoveIntersectionObserver(this);
}
mConnected = false;
}