Index: Source/core/animation/AnimationPlayer.cpp |
diff --git a/Source/core/animation/AnimationPlayer.cpp b/Source/core/animation/AnimationPlayer.cpp |
index 6d4e287345dd835980d56907164d16d1f4faa32a..68fb4c3e711dcd877b1b0176bc4ea27703ee5f6f 100644 |
--- a/Source/core/animation/AnimationPlayer.cpp |
+++ b/Source/core/animation/AnimationPlayer.cpp |
@@ -305,7 +305,7 @@ void AnimationPlayer::setCurrentTime(double newCurrentTime) |
void AnimationPlayer::setStartTime(double startTime) |
{ |
- if (m_paused) // FIXME: Should this throw an exception? |
+ if (m_paused || m_idle) |
return; |
if (!std::isfinite(startTime)) |
return; |
@@ -458,18 +458,8 @@ void AnimationPlayer::reverse() |
} |
uncancel(); |
- |
- if (m_content) { |
- if (m_playbackRate > 0 && currentTimeInternal() > sourceEnd()) { |
- setCurrentTimeInternal(sourceEnd(), TimingUpdateOnDemand); |
- ASSERT(finished()); |
- } else if (m_playbackRate < 0 && currentTimeInternal() < 0) { |
- setCurrentTimeInternal(0, TimingUpdateOnDemand); |
- ASSERT(finished()); |
- } |
- } |
setPlaybackRate(-m_playbackRate); |
- unpauseInternal(); |
+ play(); |
} |
void AnimationPlayer::finish(ExceptionState& exceptionState) |
@@ -486,13 +476,14 @@ void AnimationPlayer::finish(ExceptionState& exceptionState) |
} |
uncancel(); |
- m_startTime = 0; |
- if (m_playbackRate < 0) { |
- setCurrentTimeInternal(0, TimingUpdateOnDemand); |
- } else { |
- setCurrentTimeInternal(sourceEnd(), TimingUpdateOnDemand); |
+ double newCurrentTime = m_playbackRate < 0 ? 0 : sourceEnd(); |
+ setCurrentTimeInternal(newCurrentTime, TimingUpdateOnDemand); |
+ if (!paused()) { |
+ m_startTime = calculateStartTime(newCurrentTime); |
} |
+ |
+ m_currentTimePending = false; |
ASSERT(finished()); |
} |
@@ -532,7 +523,7 @@ void AnimationPlayer::setPlaybackRate(double playbackRate) |
return; |
setCompositorPending(); |
- if (!finished() && !paused()) |
+ if (!finished() && !paused() && hasStartTime()) |
m_currentTimePending = true; |
double storedCurrentTime = currentTimeInternal(); |
@@ -649,6 +640,7 @@ void AnimationPlayer::cancel() |
m_held = true; |
m_idle = true; |
m_startTime = nullValue(); |
+ m_currentTimePending = false; |
setCompositorPending(); |
} |