Web Animations: Fix effect change calculation when player is cancelled but not held

Review URL: https://codereview.chromium.org/235503010

git-svn-id: svn://svn.chromium.org/blink/trunk@171439 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent a551cb3d
...@@ -347,11 +347,13 @@ bool AnimationPlayer::update(UpdateReason reason) ...@@ -347,11 +347,13 @@ bool AnimationPlayer::update(UpdateReason reason)
double AnimationPlayer::timeToEffectChange() double AnimationPlayer::timeToEffectChange()
{ {
ASSERT(!m_outdated); ASSERT(!m_outdated);
if (!m_content || m_held) if (m_held || !hasStartTime())
return std::numeric_limits<double>::infinity(); return std::numeric_limits<double>::infinity();
if (!m_content)
return -currentTime() / m_playbackRate;
if (m_playbackRate > 0) if (m_playbackRate > 0)
return m_content->timeToForwardsEffectChange() / m_playbackRate; return m_content->timeToForwardsEffectChange() / m_playbackRate;
return m_content->timeToReverseEffectChange() / std::abs(m_playbackRate); return m_content->timeToReverseEffectChange() / -m_playbackRate;
} }
void AnimationPlayer::cancel() void AnimationPlayer::cancel()
......
...@@ -686,6 +686,26 @@ TEST_F(AnimationAnimationPlayerTest, TimeToNextEffectWhenPaused) ...@@ -686,6 +686,26 @@ TEST_F(AnimationAnimationPlayerTest, TimeToNextEffectWhenPaused)
EXPECT_EQ(std::numeric_limits<double>::infinity(), player->timeToEffectChange()); EXPECT_EQ(std::numeric_limits<double>::infinity(), player->timeToEffectChange());
} }
TEST_F(AnimationAnimationPlayerTest, TimeToNextEffectWhenCancelledBeforeStart)
{
EXPECT_EQ(0, player->timeToEffectChange());
player->setCurrentTime(-8);
player->setPlaybackRate(2);
player->cancel();
player->update(AnimationPlayer::UpdateOnDemand);
EXPECT_EQ(4, player->timeToEffectChange());
}
TEST_F(AnimationAnimationPlayerTest, TimeToNextEffectWhenCancelledBeforeStartReverse)
{
EXPECT_EQ(0, player->timeToEffectChange());
player->setCurrentTime(9);
player->setPlaybackRate(-3);
player->cancel();
player->update(AnimationPlayer::UpdateOnDemand);
EXPECT_EQ(3, player->timeToEffectChange());
}
TEST_F(AnimationAnimationPlayerTest, AttachedAnimationPlayers) TEST_F(AnimationAnimationPlayerTest, AttachedAnimationPlayers)
{ {
RefPtr<Element> element = document->createElement("foo", ASSERT_NO_EXCEPTION); RefPtr<Element> element = document->createElement("foo", ASSERT_NO_EXCEPTION);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment