Bug 1249212 part 3 - Fix active duration calculation when iteration duration is infinity; r=boris

With the added tests in part 4 we crash without this change because we end up
trying to multiply an infinite iteration duration by a zero iteration count
which trips an assertion in StickyTimeDuration. Hence we fix this behavior
before adding the tests.
This commit is contained in:
Brian Birtles 2016-02-19 08:37:31 +09:00
parent bc7586045e
commit be6b653854

View File

@ -367,18 +367,19 @@ KeyframeEffectReadOnly::GetComputedTimingAt(
}
StickyTimeDuration
KeyframeEffectReadOnly::ActiveDuration(const StickyTimeDuration& aIterationDuration,
double aIterationCount)
KeyframeEffectReadOnly::ActiveDuration(
const StickyTimeDuration& aIterationDuration,
double aIterationCount)
{
if (IsInfinite(aIterationCount)) {
// An animation that repeats forever has an infinite active duration
// unless its iteration duration is zero, in which case it has a zero
// active duration.
const StickyTimeDuration zeroDuration;
return aIterationDuration == zeroDuration ?
zeroDuration :
StickyTimeDuration::Forever();
// If either the iteration duration or iteration count is zero,
// Web Animations says that the active duration is zero. This is to
// ensure that the result is defined when the other argument is Infinity.
const StickyTimeDuration zeroDuration;
if (aIterationDuration == zeroDuration ||
aIterationCount == 0.0) {
return zeroDuration;
}
return aIterationDuration.MultDouble(aIterationCount);
}