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)
double AnimationPlayer::timeToEffectChange()
{
ASSERT(!m_outdated);
if (!m_content || m_held)
if (m_held || !hasStartTime())
return std::numeric_limits<double>::infinity();
if (!m_content)
return -currentTime() / m_playbackRate;
if (m_playbackRate > 0)
return m_content->timeToForwardsEffectChange() / m_playbackRate;
return m_content->timeToReverseEffectChange() / std::abs(m_playbackRate);
return m_content->timeToReverseEffectChange() / -m_playbackRate;
}
void AnimationPlayer::cancel()
......
......@@ -686,6 +686,26 @@ TEST_F(AnimationAnimationPlayerTest, TimeToNextEffectWhenPaused)
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)
{
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