void nsSMILInstanceTime::HandleChangedInterval( const nsSMILTimeContainer* aSrcContainer, PRBool aBeginObjectChanged, PRBool aEndObjectChanged) { NS_ABORT_IF_FALSE(mBaseInterval, "Got call to HandleChangedInterval on an independent instance time."); NS_ABORT_IF_FALSE(mCreator, "Base interval is set but creator is not."); if (mVisited) { // Break the cycle here Unlink(); return; } PRBool objectChanged = mCreator->DependsOnBegin() ? aBeginObjectChanged : aEndObjectChanged; AutoBoolSetter setVisited(mVisited); nsRefPtr<nsSMILInstanceTime> deathGrip(this); mCreator->HandleChangedInstanceTime(*GetBaseTime(), aSrcContainer, *this, objectChanged); }
void nsSMILInstanceTime::HandleChangedInterval( const nsSMILTimeContainer* aSrcContainer, bool aBeginObjectChanged, bool aEndObjectChanged) { // It's possible a sequence of notifications might cause our base interval to // be updated and then deleted. Furthermore, the delete might happen whilst // we're still in the queue to be notified of the change. In any case, if we // don't have a base interval, just ignore the change. if (!mBaseInterval) return; NS_ABORT_IF_FALSE(mCreator, "Base interval is set but creator is not."); if (mVisited) { // Break the cycle here Unlink(); return; } bool objectChanged = mCreator->DependsOnBegin() ? aBeginObjectChanged : aEndObjectChanged; mozilla::AutoRestore<bool> setVisited(mVisited); mVisited = true; nsRefPtr<nsSMILInstanceTime> deathGrip(this); mCreator->HandleChangedInstanceTime(*GetBaseTime(), aSrcContainer, *this, objectChanged); }
NS_IMETHODIMP SimpleTimer::Notify(nsITimer *timer) { RefPtr<SimpleTimer> deathGrip(this); if (mTask) { mTask->Run(); mTask = nullptr; } return NS_OK; }
void nsSMILInstanceTime::Unlink() { nsRefPtr<nsSMILInstanceTime> deathGrip(this); if (mBaseInterval) { mBaseInterval->RemoveDependentTime(*this); mBaseInterval = nsnull; } mCreator = nsnull; }
void nsSMILInstanceTime::HandleDeletedInterval() { NS_ABORT_IF_FALSE(mBaseInterval, "Got call to HandleDeletedInterval on an independent instance time"); NS_ABORT_IF_FALSE(mCreator, "Base interval is set but creator is not"); mBaseInterval = nsnull; mFlags &= ~kMayUpdate; // Can't update without a base interval nsRefPtr<nsSMILInstanceTime> deathGrip(this); mCreator->HandleDeletedInstanceTime(*this); mCreator = nsnull; }
void nsSMILInstanceTime::HandleDeletedInterval() { MOZ_ASSERT(mBaseInterval, "Got call to HandleDeletedInterval on an independent instance " "time"); MOZ_ASSERT(mCreator, "Base interval is set but creator is not"); mBaseInterval = nullptr; mFlags &= ~kMayUpdate; // Can't update without a base interval nsRefPtr<nsSMILInstanceTime> deathGrip(this); mCreator->HandleDeletedInstanceTime(*this); mCreator = nullptr; }