| Index: ui/compositor/layer_animation_element_unittest.cc
 | 
| diff --git a/ui/compositor/layer_animation_element_unittest.cc b/ui/compositor/layer_animation_element_unittest.cc
 | 
| index 5912023739a61de922c7fb819bcd73d90bb98e1a..9964436929d7c6d4c1870807fbb0e1864961f621 100644
 | 
| --- a/ui/compositor/layer_animation_element_unittest.cc
 | 
| +++ b/ui/compositor/layer_animation_element_unittest.cc
 | 
| @@ -34,14 +34,20 @@ TEST(LayerAnimationElementTest, TransformElement) {
 | 
|  
 | 
|    for (int i = 0; i < 2; ++i) {
 | 
|      start_time += delta;
 | 
| -    element->set_start_time(start_time);
 | 
| +    element->set_requested_start_time(start_time);
 | 
|      delegate.SetTransformFromAnimation(start_transform);
 | 
| +    element->Start(&delegate, 1);
 | 
|      element->Progress(start_time, &delegate);
 | 
|      CheckApproximatelyEqual(start_transform,
 | 
|                              delegate.GetTransformForAnimation());
 | 
|      element->Progress(start_time + delta/2, &delegate);
 | 
|      CheckApproximatelyEqual(middle_transform,
 | 
|                              delegate.GetTransformForAnimation());
 | 
| +
 | 
| +    base::TimeDelta element_duration;
 | 
| +    EXPECT_TRUE(element->IsFinished(start_time + delta, &element_duration));
 | 
| +    EXPECT_EQ(delta, element_duration);
 | 
| +
 | 
|      element->Progress(start_time + delta, &delegate);
 | 
|      CheckApproximatelyEqual(target_transform,
 | 
|                              delegate.GetTransformForAnimation());
 | 
| @@ -50,10 +56,6 @@ TEST(LayerAnimationElementTest, TransformElement) {
 | 
|    LayerAnimationElement::TargetValue target_value(&delegate);
 | 
|    element->GetTargetValue(&target_value);
 | 
|    CheckApproximatelyEqual(target_transform, target_value.transform);
 | 
| -
 | 
| -  base::TimeDelta element_duration;
 | 
| -  EXPECT_TRUE(element->IsFinished(start_time + delta, &element_duration));
 | 
| -  EXPECT_EQ(delta, element_duration);
 | 
|  }
 | 
|  
 | 
|  // Check that the bounds element progresses the delegate as expected and
 | 
| @@ -72,12 +74,18 @@ TEST(LayerAnimationElementTest, BoundsElement) {
 | 
|  
 | 
|    for (int i = 0; i < 2; ++i) {
 | 
|      start_time += delta;
 | 
| -    element->set_start_time(start_time);
 | 
| +    element->set_requested_start_time(start_time);
 | 
|      delegate.SetBoundsFromAnimation(start);
 | 
| +    element->Start(&delegate, 1);
 | 
|      element->Progress(start_time, &delegate);
 | 
|      CheckApproximatelyEqual(start, delegate.GetBoundsForAnimation());
 | 
|      element->Progress(start_time + delta/2, &delegate);
 | 
|      CheckApproximatelyEqual(middle, delegate.GetBoundsForAnimation());
 | 
| +
 | 
| +    base::TimeDelta element_duration;
 | 
| +    EXPECT_TRUE(element->IsFinished(start_time + delta, &element_duration));
 | 
| +    EXPECT_EQ(delta, element_duration);
 | 
| +
 | 
|      element->Progress(start_time + delta, &delegate);
 | 
|      CheckApproximatelyEqual(target, delegate.GetBoundsForAnimation());
 | 
|    }
 | 
| @@ -85,10 +93,6 @@ TEST(LayerAnimationElementTest, BoundsElement) {
 | 
|    LayerAnimationElement::TargetValue target_value(&delegate);
 | 
|    element->GetTargetValue(&target_value);
 | 
|    CheckApproximatelyEqual(target, target_value.bounds);
 | 
| -
 | 
| -  base::TimeDelta element_duration;
 | 
| -  EXPECT_TRUE(element->IsFinished(start_time + delta, &element_duration));
 | 
| -  EXPECT_EQ(delta, element_duration);
 | 
|  }
 | 
|  
 | 
|  // Check that the opacity element progresses the delegate as expected and
 | 
| @@ -99,29 +103,38 @@ TEST(LayerAnimationElementTest, OpacityElement) {
 | 
|    float middle = 0.5;
 | 
|    float target = 1.0;
 | 
|    base::TimeTicks start_time;
 | 
| +  base::TimeTicks effective_start_time;
 | 
|    base::TimeDelta delta = base::TimeDelta::FromSeconds(1);
 | 
|    scoped_ptr<LayerAnimationElement> element(
 | 
|        LayerAnimationElement::CreateOpacityElement(target, delta));
 | 
|  
 | 
|    for (int i = 0; i < 2; ++i) {
 | 
| -    start_time += delta;
 | 
| -    element->set_start_time(start_time);
 | 
| +    start_time = effective_start_time + delta;
 | 
| +    element->set_requested_start_time(start_time);
 | 
|      delegate.SetOpacityFromAnimation(start);
 | 
| +    element->Start(&delegate, 1);
 | 
|      element->Progress(start_time, &delegate);
 | 
| -    EXPECT_FLOAT_EQ(start, delegate.GetOpacityForAnimation());
 | 
| -    element->Progress(start_time + delta/2, &delegate);
 | 
| -    EXPECT_FLOAT_EQ(middle, delegate.GetOpacityForAnimation());
 | 
| -    element->Progress(start_time + delta, &delegate);
 | 
| +    EXPECT_FLOAT_EQ(start, element->last_progressed_fraction());
 | 
| +    effective_start_time = start_time + delta;
 | 
| +    element->set_effective_start_time(effective_start_time);
 | 
| +    element->Progress(effective_start_time, &delegate);
 | 
| +    EXPECT_FLOAT_EQ(start, element->last_progressed_fraction());
 | 
| +    element->Progress(effective_start_time + delta/2, &delegate);
 | 
| +    EXPECT_FLOAT_EQ(middle, element->last_progressed_fraction());
 | 
| +
 | 
| +    base::TimeDelta element_duration;
 | 
| +    EXPECT_TRUE(element->IsFinished(effective_start_time + delta,
 | 
| +                                    &element_duration));
 | 
| +    EXPECT_EQ(2 * delta, element_duration);
 | 
| +
 | 
| +    element->Progress(effective_start_time + delta, &delegate);
 | 
| +    EXPECT_FLOAT_EQ(target, element->last_progressed_fraction());
 | 
|      EXPECT_FLOAT_EQ(target, delegate.GetOpacityForAnimation());
 | 
|    }
 | 
|  
 | 
|    LayerAnimationElement::TargetValue target_value(&delegate);
 | 
|    element->GetTargetValue(&target_value);
 | 
|    EXPECT_FLOAT_EQ(target, target_value.opacity);
 | 
| -
 | 
| -  base::TimeDelta element_duration;
 | 
| -  EXPECT_TRUE(element->IsFinished(start_time + delta, &element_duration));
 | 
| -  EXPECT_EQ(delta, element_duration);
 | 
|  }
 | 
|  
 | 
|  // Check that the visibility element progresses the delegate as expected and
 | 
| @@ -137,12 +150,18 @@ TEST(LayerAnimationElementTest, VisibilityElement) {
 | 
|  
 | 
|    for (int i = 0; i < 2; ++i) {
 | 
|      start_time += delta;
 | 
| -    element->set_start_time(start_time);
 | 
| +    element->set_requested_start_time(start_time);
 | 
|      delegate.SetVisibilityFromAnimation(start);
 | 
| +    element->Start(&delegate, 1);
 | 
|      element->Progress(start_time, &delegate);
 | 
|      EXPECT_TRUE(delegate.GetVisibilityForAnimation());
 | 
|      element->Progress(start_time + delta/2, &delegate);
 | 
|      EXPECT_TRUE(delegate.GetVisibilityForAnimation());
 | 
| +
 | 
| +    base::TimeDelta element_duration;
 | 
| +    EXPECT_TRUE(element->IsFinished(start_time + delta, &element_duration));
 | 
| +    EXPECT_EQ(delta, element_duration);
 | 
| +
 | 
|      element->Progress(start_time + delta, &delegate);
 | 
|      EXPECT_FALSE(delegate.GetVisibilityForAnimation());
 | 
|    }
 | 
| @@ -150,10 +169,6 @@ TEST(LayerAnimationElementTest, VisibilityElement) {
 | 
|    LayerAnimationElement::TargetValue target_value(&delegate);
 | 
|    element->GetTargetValue(&target_value);
 | 
|    EXPECT_FALSE(target_value.visibility);
 | 
| -
 | 
| -  base::TimeDelta element_duration;
 | 
| -  EXPECT_TRUE(element->IsFinished(start_time + delta, &element_duration));
 | 
| -  EXPECT_EQ(delta, element_duration);
 | 
|  }
 | 
|  
 | 
|  // Check that the Brightness element progresses the delegate as expected and
 | 
| @@ -170,12 +185,18 @@ TEST(LayerAnimationElementTest, BrightnessElement) {
 | 
|  
 | 
|    for (int i = 0; i < 2; ++i) {
 | 
|      start_time += delta;
 | 
| -    element->set_start_time(start_time);
 | 
| +    element->set_requested_start_time(start_time);
 | 
|      delegate.SetBrightnessFromAnimation(start);
 | 
| +    element->Start(&delegate, 1);
 | 
|      element->Progress(start_time, &delegate);
 | 
|      EXPECT_FLOAT_EQ(start, delegate.GetBrightnessForAnimation());
 | 
|      element->Progress(start_time + delta/2, &delegate);
 | 
|      EXPECT_FLOAT_EQ(middle, delegate.GetBrightnessForAnimation());
 | 
| +
 | 
| +    base::TimeDelta element_duration;
 | 
| +    EXPECT_TRUE(element->IsFinished(start_time + delta, &element_duration));
 | 
| +    EXPECT_EQ(delta, element_duration);
 | 
| +
 | 
|      element->Progress(start_time + delta, &delegate);
 | 
|      EXPECT_FLOAT_EQ(target, delegate.GetBrightnessForAnimation());
 | 
|    }
 | 
| @@ -183,10 +204,6 @@ TEST(LayerAnimationElementTest, BrightnessElement) {
 | 
|    LayerAnimationElement::TargetValue target_value(&delegate);
 | 
|    element->GetTargetValue(&target_value);
 | 
|    EXPECT_FLOAT_EQ(target, target_value.brightness);
 | 
| -
 | 
| -  base::TimeDelta element_duration;
 | 
| -  EXPECT_TRUE(element->IsFinished(start_time + delta, &element_duration));
 | 
| -  EXPECT_EQ(delta, element_duration);
 | 
|  }
 | 
|  
 | 
|  // Check that the Grayscale element progresses the delegate as expected and
 | 
| @@ -203,12 +220,18 @@ TEST(LayerAnimationElementTest, GrayscaleElement) {
 | 
|  
 | 
|    for (int i = 0; i < 2; ++i) {
 | 
|      start_time += delta;
 | 
| -    element->set_start_time(start_time);
 | 
| +    element->set_requested_start_time(start_time);
 | 
|      delegate.SetGrayscaleFromAnimation(start);
 | 
| +    element->Start(&delegate, 1);
 | 
|      element->Progress(start_time, &delegate);
 | 
|      EXPECT_FLOAT_EQ(start, delegate.GetGrayscaleForAnimation());
 | 
|      element->Progress(start_time + delta/2, &delegate);
 | 
|      EXPECT_FLOAT_EQ(middle, delegate.GetGrayscaleForAnimation());
 | 
| +
 | 
| +    base::TimeDelta element_duration;
 | 
| +    EXPECT_TRUE(element->IsFinished(start_time + delta, &element_duration));
 | 
| +    EXPECT_EQ(delta, element_duration);
 | 
| +
 | 
|      element->Progress(start_time + delta, &delegate);
 | 
|      EXPECT_FLOAT_EQ(target, delegate.GetGrayscaleForAnimation());
 | 
|    }
 | 
| @@ -216,10 +239,6 @@ TEST(LayerAnimationElementTest, GrayscaleElement) {
 | 
|    LayerAnimationElement::TargetValue target_value(&delegate);
 | 
|    element->GetTargetValue(&target_value);
 | 
|    EXPECT_FLOAT_EQ(target, target_value.grayscale);
 | 
| -
 | 
| -  base::TimeDelta element_duration;
 | 
| -  EXPECT_TRUE(element->IsFinished(start_time + delta, &element_duration));
 | 
| -  EXPECT_EQ(delta, element_duration);
 | 
|  }
 | 
|  
 | 
|  // Check that the pause element progresses the delegate as expected and
 | 
| @@ -241,7 +260,14 @@ TEST(LayerAnimationElementTest, PauseElement) {
 | 
|    TestLayerAnimationDelegate copy = delegate;
 | 
|  
 | 
|    start_time += delta;
 | 
| -  element->set_start_time(start_time);
 | 
| +  element->set_requested_start_time(start_time);
 | 
| +  element->Start(&delegate, 1);
 | 
| +
 | 
| +  // Pause should last for |delta|.
 | 
| +  base::TimeDelta element_duration;
 | 
| +  EXPECT_TRUE(element->IsFinished(start_time + delta, &element_duration));
 | 
| +  EXPECT_EQ(delta, element_duration);
 | 
| +
 | 
|    element->Progress(start_time + delta, &delegate);
 | 
|  
 | 
|    // Nothing should have changed.
 | 
| @@ -255,11 +281,6 @@ TEST(LayerAnimationElementTest, PauseElement) {
 | 
|                    copy.GetBrightnessForAnimation());
 | 
|    EXPECT_FLOAT_EQ(delegate.GetGrayscaleForAnimation(),
 | 
|                    copy.GetGrayscaleForAnimation());
 | 
| -
 | 
| -  // Pause should last for |delta|.
 | 
| -  base::TimeDelta element_duration;
 | 
| -  EXPECT_TRUE(element->IsFinished(start_time + delta, &element_duration));
 | 
| -  EXPECT_EQ(delta, element_duration);
 | 
|  }
 | 
|  
 | 
|  } // namespace
 | 
| 
 |