Index: third_party/WebKit/Source/core/animation/TimingCalculations.h |
diff --git a/third_party/WebKit/Source/core/animation/TimingCalculations.h b/third_party/WebKit/Source/core/animation/TimingCalculations.h |
index 0ba2110c7be33af19adaad3654af7704d4927e03..c9f550b18ec87d95064d2edee8c51776f138e270 100644 |
--- a/third_party/WebKit/Source/core/animation/TimingCalculations.h |
+++ b/third_party/WebKit/Source/core/animation/TimingCalculations.h |
@@ -89,7 +89,7 @@ static inline double calculateActiveTime(double activeDuration, Timing::FillMode |
return nullValue(); |
case AnimationEffect::PhaseAfter: |
if (fillMode == Timing::FillModeForwards || fillMode == Timing::FillModeBoth) |
- return activeDuration; |
+ return std::max(0.0, std::min(activeDuration, activeDuration + specified.endDelay)); |
return nullValue(); |
case AnimationEffect::PhaseNone: |
ASSERT(isNull(localTime)); |
@@ -125,7 +125,8 @@ static inline bool endsOnIterationBoundary(double iterationCount, double iterati |
return !fmod(iterationCount + iterationStart, 1); |
} |
-static inline double calculateIterationTime(double iterationDuration, double repeatedDuration, double scaledActiveTime, double startOffset, const Timing& specified) |
+// TODO(alancutter): Align this function with current Web Animations spec text. |
suzyh_UTC10 (ex-contributor)
2016/07/25 00:51:09
Let's start making sure all our TODOs have bugs at
alancutter (OOO until 2018)
2016/07/25 01:44:32
Done.
|
+static inline double calculateIterationTime(double iterationDuration, double repeatedDuration, double scaledActiveTime, double startOffset, AnimationEffect::Phase phase, const Timing& specified) |
{ |
ASSERT(iterationDuration > 0); |
ASSERT(repeatedDuration == multiplyZeroAlwaysGivesZero(iterationDuration, specified.iterationCount)); |
@@ -141,7 +142,17 @@ static inline double calculateIterationTime(double iterationDuration, double rep |
return iterationDuration; |
ASSERT(std::isfinite(scaledActiveTime)); |
- return fmod(scaledActiveTime, iterationDuration); |
+ double iterationTime = fmod(scaledActiveTime, iterationDuration); |
+ |
+ // This implements step 3 of |
+ // http://w3c.github.io/web-animations/#calculating-the-simple-iteration-progress |
+ if (iterationTime == 0 |
+ && phase == AnimationEffect::PhaseAfter |
+ && repeatedDuration != 0 |
+ && scaledActiveTime != 0) |
+ return iterationDuration; |
+ |
+ return iterationTime; |
} |
static inline double calculateCurrentIteration(double iterationDuration, double iterationTime, double scaledActiveTime, const Timing& specified) |