Index: ui/compositor/layer_animator_unittest.cc |
diff --git a/ui/compositor/layer_animator_unittest.cc b/ui/compositor/layer_animator_unittest.cc |
index b01256be117a04a4f1477d384623e8980215cdb4..d60fc319fceb3deab9f64cd1fda4dbb0c9dc69c8 100644 |
--- a/ui/compositor/layer_animator_unittest.cc |
+++ b/ui/compositor/layer_animator_unittest.cc |
@@ -78,13 +78,14 @@ class DeletingLayerAnimationObserver : public LayerAnimationObserver { |
class TestLayerAnimator : public LayerAnimator { |
public: |
TestLayerAnimator() : LayerAnimator(base::TimeDelta::FromSeconds(0)) {} |
- virtual ~TestLayerAnimator() {} |
protected: |
- virtual bool ProgressAnimation(LayerAnimationSequence* sequence, |
+ virtual ~TestLayerAnimator() {} |
+ |
+ virtual void ProgressAnimation(LayerAnimationSequence* sequence, |
base::TimeDelta delta) OVERRIDE { |
EXPECT_TRUE(HasAnimation(sequence)); |
- return LayerAnimator::ProgressAnimation(sequence, delta); |
+ LayerAnimator::ProgressAnimation(sequence, delta); |
} |
private: |
@@ -117,7 +118,8 @@ class TestLayerAnimationSequence : public LayerAnimationSequence { |
// Checks that setting a property on an implicit animator causes an animation to |
// happen. |
TEST(LayerAnimatorTest, ImplicitAnimation) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateImplicitAnimator()); |
+ scoped_refptr<LayerAnimator> animator( |
+ LayerAnimator::CreateImplicitAnimator()); |
AnimationContainerElement* element = animator.get(); |
animator->set_disable_timer_for_test(true); |
TestLayerAnimationDelegate delegate; |
@@ -132,7 +134,7 @@ TEST(LayerAnimatorTest, ImplicitAnimation) { |
// Checks that if the animator is a default animator, that implicit animations |
// are not started. |
TEST(LayerAnimatorTest, NoImplicitAnimation) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
+ scoped_refptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
animator->set_disable_timer_for_test(true); |
TestLayerAnimationDelegate delegate; |
animator->SetDelegate(&delegate); |
@@ -144,7 +146,8 @@ TEST(LayerAnimatorTest, NoImplicitAnimation) { |
// Checks that StopAnimatingProperty stops animation for that property, and also |
// skips the stopped animation to the end. |
TEST(LayerAnimatorTest, StopAnimatingProperty) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateImplicitAnimator()); |
+ scoped_refptr<LayerAnimator> animator( |
+ LayerAnimator::CreateImplicitAnimator()); |
animator->set_disable_timer_for_test(true); |
TestLayerAnimationDelegate delegate; |
animator->SetDelegate(&delegate); |
@@ -163,7 +166,8 @@ TEST(LayerAnimatorTest, StopAnimatingProperty) { |
// Checks that multiple running animation for separate properties can be stopped |
// simultaneously and that all animations are advanced to their target values. |
TEST(LayerAnimatorTest, StopAnimating) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateImplicitAnimator()); |
+ scoped_refptr<LayerAnimator> animator( |
+ LayerAnimator::CreateImplicitAnimator()); |
animator->set_disable_timer_for_test(true); |
TestLayerAnimationDelegate delegate; |
animator->SetDelegate(&delegate); |
@@ -181,7 +185,7 @@ TEST(LayerAnimatorTest, StopAnimating) { |
// Schedule an animation that can run immediately. This is the trivial case and |
// should result in the animation being started immediately. |
TEST(LayerAnimatorTest, ScheduleAnimationThatCanRunImmediately) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
+ scoped_refptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
AnimationContainerElement* element = animator.get(); |
animator->set_disable_timer_for_test(true); |
TestLayerAnimationDelegate delegate; |
@@ -218,7 +222,7 @@ TEST(LayerAnimatorTest, ScheduleAnimationThatCanRunImmediately) { |
// Schedule two animations on separate properties. Both animations should |
// start immediately and should progress in lock step. |
TEST(LayerAnimatorTest, ScheduleTwoAnimationsThatCanRunImmediately) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
+ scoped_refptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
AnimationContainerElement* element = animator.get(); |
animator->set_disable_timer_for_test(true); |
TestLayerAnimationDelegate delegate; |
@@ -268,7 +272,7 @@ TEST(LayerAnimatorTest, ScheduleTwoAnimationsThatCanRunImmediately) { |
// Schedule two animations on the same property. In this case, the two |
// animations should run one after another. |
TEST(LayerAnimatorTest, ScheduleTwoAnimationsOnSameProperty) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
+ scoped_refptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
AnimationContainerElement* element = animator.get(); |
animator->set_disable_timer_for_test(true); |
TestLayerAnimationDelegate delegate; |
@@ -320,7 +324,7 @@ TEST(LayerAnimatorTest, ScheduleTwoAnimationsOnSameProperty) { |
// is, ensure that all animations targetting a particular property are run in |
// order. |
TEST(LayerAnimatorTest, ScheduleBlockedAnimation) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
+ scoped_refptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
AnimationContainerElement* element = animator.get(); |
animator->set_disable_timer_for_test(true); |
TestLayerAnimationDelegate delegate; |
@@ -398,7 +402,7 @@ TEST(LayerAnimatorTest, ScheduleBlockedAnimation) { |
// ScheduleTogether is being used, the bounds animation should not start until |
// the second opacity animation starts. |
TEST(LayerAnimatorTest, ScheduleTogether) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
+ scoped_refptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
AnimationContainerElement* element = animator.get(); |
animator->set_disable_timer_for_test(true); |
TestLayerAnimationDelegate delegate; |
@@ -451,7 +455,7 @@ TEST(LayerAnimatorTest, ScheduleTogether) { |
// Start animation (that can run immediately). This is the trivial case (see |
// the trival case for ScheduleAnimation). |
TEST(LayerAnimatorTest, StartAnimationThatCanRunImmediately) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
+ scoped_refptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
AnimationContainerElement* element = animator.get(); |
animator->set_disable_timer_for_test(true); |
TestLayerAnimationDelegate delegate; |
@@ -487,7 +491,7 @@ TEST(LayerAnimatorTest, StartAnimationThatCanRunImmediately) { |
// Preempt by immediately setting new target. |
TEST(LayerAnimatorTest, PreemptBySettingNewTarget) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
+ scoped_refptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
animator->set_disable_timer_for_test(true); |
TestLayerAnimationDelegate delegate; |
animator->SetDelegate(&delegate); |
@@ -515,7 +519,7 @@ TEST(LayerAnimatorTest, PreemptBySettingNewTarget) { |
// Preempt by animating to new target. |
TEST(LayerAnimatorTest, PreemptByImmediatelyAnimatingToNewTarget) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
+ scoped_refptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
AnimationContainerElement* element = animator.get(); |
animator->set_disable_timer_for_test(true); |
TestLayerAnimationDelegate delegate; |
@@ -567,7 +571,7 @@ TEST(LayerAnimatorTest, PreemptByImmediatelyAnimatingToNewTarget) { |
// Preempt by enqueuing the new animation. |
TEST(LayerAnimatorTest, PreemptEnqueueNewAnimation) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
+ scoped_refptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
AnimationContainerElement* element = animator.get(); |
animator->set_disable_timer_for_test(true); |
TestLayerAnimationDelegate delegate; |
@@ -620,7 +624,7 @@ TEST(LayerAnimatorTest, PreemptEnqueueNewAnimation) { |
// case, all pending and running animations should be finished, and the new |
// animation started. |
TEST(LayerAnimatorTest, PreemptyByReplacingQueuedAnimations) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
+ scoped_refptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
AnimationContainerElement* element = animator.get(); |
animator->set_disable_timer_for_test(true); |
TestLayerAnimationDelegate delegate; |
@@ -675,7 +679,7 @@ TEST(LayerAnimatorTest, PreemptyByReplacingQueuedAnimations) { |
// Test that cyclic sequences continue to animate. |
TEST(LayerAnimatorTest, CyclicSequences) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
+ scoped_refptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
AnimationContainerElement* element = animator.get(); |
animator->set_disable_timer_for_test(true); |
TestLayerAnimationDelegate delegate; |
@@ -734,7 +738,7 @@ TEST(LayerAnimatorTest, CyclicSequences) { |
} |
TEST(LayerAnimatorTest, AddObserverExplicit) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
+ scoped_refptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
AnimationContainerElement* element = animator.get(); |
animator->set_disable_timer_for_test(true); |
TestLayerAnimationObserver observer; |
@@ -768,7 +772,7 @@ TEST(LayerAnimatorTest, AddObserverExplicit) { |
animator->StartAnimation(sequence); |
- animator.reset(); |
+ animator = NULL; |
EXPECT_EQ(observer.last_aborted_sequence(), sequence); |
} |
@@ -776,7 +780,7 @@ TEST(LayerAnimatorTest, AddObserverExplicit) { |
// Tests that an observer added to a scoped settings object is still notified |
// when the object goes out of scope. |
TEST(LayerAnimatorTest, ImplicitAnimationObservers) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
+ scoped_refptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
AnimationContainerElement* element = animator.get(); |
animator->set_disable_timer_for_test(true); |
TestImplicitAnimationObserver observer(false); |
@@ -802,7 +806,7 @@ TEST(LayerAnimatorTest, ImplicitAnimationObservers) { |
// Tests that an observer added to a scoped settings object is still notified |
// when the object goes out of scope due to the animation being interrupted. |
TEST(LayerAnimatorTest, InterruptedImplicitAnimationObservers) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
+ scoped_refptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
animator->set_disable_timer_for_test(true); |
TestImplicitAnimationObserver observer(false); |
TestLayerAnimationDelegate delegate; |
@@ -828,7 +832,7 @@ TEST(LayerAnimatorTest, InterruptedImplicitAnimationObservers) { |
// Tests that an observer added to a scoped settings object is not notified |
// when the animator is destroyed unless explicitly requested. |
TEST(LayerAnimatorTest, ImplicitObserversAtAnimatorDestruction) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
+ scoped_refptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
animator->set_disable_timer_for_test(true); |
TestImplicitAnimationObserver observer_notify(true); |
TestImplicitAnimationObserver observer_do_not_notify(false); |
@@ -849,14 +853,14 @@ TEST(LayerAnimatorTest, ImplicitObserversAtAnimatorDestruction) { |
EXPECT_FALSE(observer_notify.animations_completed()); |
EXPECT_FALSE(observer_do_not_notify.animations_completed()); |
- animator.reset(NULL); |
+ animator = NULL; |
EXPECT_TRUE(observer_notify.animations_completed()); |
EXPECT_FALSE(observer_do_not_notify.animations_completed()); |
} |
TEST(LayerAnimatorTest, RemoveObserverShouldRemoveFromSequences) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
+ scoped_refptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
AnimationContainerElement* element = animator.get(); |
animator->set_disable_timer_for_test(true); |
TestLayerAnimationObserver observer; |
@@ -891,7 +895,7 @@ TEST(LayerAnimatorTest, RemoveObserverShouldRemoveFromSequences) { |
} |
TEST(LayerAnimatorTest, ObserverReleasedBeforeAnimationSequenceEnds) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
+ scoped_refptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
animator->set_disable_timer_for_test(true); |
scoped_ptr<TestLayerAnimationObserver> observer( |
@@ -919,7 +923,7 @@ TEST(LayerAnimatorTest, ObserverReleasedBeforeAnimationSequenceEnds) { |
} |
TEST(LayerAnimatorTest, ObserverAttachedAfterAnimationStarted) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
+ scoped_refptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
AnimationContainerElement* element = animator.get(); |
animator->set_disable_timer_for_test(true); |
@@ -952,7 +956,7 @@ TEST(LayerAnimatorTest, ObserverAttachedAfterAnimationStarted) { |
} |
TEST(LayerAnimatorTest, ObserverDetachedBeforeAnimationFinished) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
+ scoped_refptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
AnimationContainerElement* element = animator.get(); |
animator->set_disable_timer_for_test(true); |
@@ -989,7 +993,7 @@ TEST(LayerAnimatorTest, ObserverDetachedBeforeAnimationFinished) { |
// animation. |
TEST(LayerAnimatorTest, ObserverDeletesAnimations) { |
LayerAnimator::set_disable_animations_for_test(false); |
- scoped_ptr<LayerAnimator> animator(new TestLayerAnimator()); |
+ scoped_refptr<LayerAnimator> animator(new TestLayerAnimator()); |
AnimationContainerElement* element = animator.get(); |
animator->set_disable_timer_for_test(true); |
TestLayerAnimationDelegate delegate; |
@@ -1032,7 +1036,7 @@ TEST(LayerAnimatorTest, ObserverDeletesAnimations) { |
// Check that setting a property during an animation with a default animator |
// cancels the original animation. |
TEST(LayerAnimatorTest, SettingPropertyDuringAnAnimation) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
+ scoped_refptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
animator->set_disable_timer_for_test(true); |
TestLayerAnimationDelegate delegate; |
animator->SetDelegate(&delegate); |
@@ -1059,7 +1063,7 @@ TEST(LayerAnimatorTest, SettingPropertyDuringAnAnimation) { |
// Tests that the preemption mode IMMEDIATELY_SET_NEW_TARGET, doesn't cause the |
// second sequence to be leaked. |
TEST(LayerAnimatorTest, ImmediatelySettingNewTargetDoesNotLeak) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
+ scoped_refptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
animator->set_preemption_strategy(LayerAnimator::IMMEDIATELY_SET_NEW_TARGET); |
animator->set_disable_timer_for_test(true); |
TestLayerAnimationDelegate delegate; |
@@ -1099,7 +1103,7 @@ TEST(LayerAnimatorTest, ImmediatelySettingNewTargetDoesNotLeak) { |
// Verifies GetTargetOpacity() works when multiple sequences are scheduled. |
TEST(LayerAnimatorTest, GetTargetOpacity) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
+ scoped_refptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
animator->set_preemption_strategy(LayerAnimator::ENQUEUE_NEW_ANIMATION); |
animator->set_disable_timer_for_test(true); |
TestLayerAnimationDelegate delegate; |
@@ -1120,7 +1124,7 @@ TEST(LayerAnimatorTest, GetTargetOpacity) { |
// Verifies GetTargetBrightness() works when multiple sequences are scheduled. |
TEST(LayerAnimatorTest, GetTargetBrightness) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
+ scoped_refptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
animator->set_preemption_strategy(LayerAnimator::ENQUEUE_NEW_ANIMATION); |
animator->set_disable_timer_for_test(true); |
TestLayerAnimationDelegate delegate; |
@@ -1141,7 +1145,7 @@ TEST(LayerAnimatorTest, GetTargetBrightness) { |
// Verifies GetTargetGrayscale() works when multiple sequences are scheduled. |
TEST(LayerAnimatorTest, GetTargetGrayscale) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
+ scoped_refptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
animator->set_preemption_strategy(LayerAnimator::ENQUEUE_NEW_ANIMATION); |
animator->set_disable_timer_for_test(true); |
TestLayerAnimationDelegate delegate; |
@@ -1162,7 +1166,7 @@ TEST(LayerAnimatorTest, GetTargetGrayscale) { |
// Verifies SchedulePauseForProperties(). |
TEST(LayerAnimatorTest, SchedulePauseForProperties) { |
- scoped_ptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
+ scoped_refptr<LayerAnimator> animator(LayerAnimator::CreateDefaultAnimator()); |
animator->set_preemption_strategy(LayerAnimator::ENQUEUE_NEW_ANIMATION); |
animator->SchedulePauseForProperties(base::TimeDelta::FromMilliseconds(100), |
LayerAnimationElement::TRANSFORM, |
@@ -1172,4 +1176,222 @@ TEST(LayerAnimatorTest, SchedulePauseForProperties) { |
EXPECT_FALSE(animator->IsAnimatingProperty(LayerAnimationElement::OPACITY)); |
} |
+ |
+class AnimatorOwner { |
+public: |
+ AnimatorOwner() |
+ : animator_(LayerAnimator::CreateDefaultAnimator()) { |
+ } |
+ |
+ LayerAnimator* animator() { return animator_.get(); } |
+ |
+private: |
+ scoped_refptr<LayerAnimator> animator_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(AnimatorOwner); |
+}; |
+ |
+class DeletingObserver : public LayerAnimationObserver { |
+public: |
+ DeletingObserver(bool* was_deleted) |
+ : animator_owner_(new AnimatorOwner), |
+ delete_on_animation_ended_(false), |
+ delete_on_animation_aborted_(false), |
+ delete_on_animation_scheduled_(false), |
+ was_deleted_(was_deleted) { |
+ animator()->AddObserver(this); |
+ } |
+ |
+ ~DeletingObserver() { |
+ animator()->RemoveObserver(this); |
+ *was_deleted_ = true; |
+ } |
+ |
+ LayerAnimator* animator() { return animator_owner_->animator(); } |
+ |
+ bool delete_on_animation_ended() const { |
+ return delete_on_animation_ended_; |
+ } |
+ void set_delete_on_animation_ended(bool enabled) { |
+ delete_on_animation_ended_ = enabled; |
+ } |
+ |
+ bool delete_on_animation_aborted() const { |
+ return delete_on_animation_aborted_; |
+ } |
+ void set_delete_on_animation_aborted(bool enabled) { |
+ delete_on_animation_aborted_ = enabled; |
+ } |
+ |
+ bool delete_on_animation_scheduled() const { |
+ return delete_on_animation_scheduled_; |
+ } |
+ void set_delete_on_animation_scheduled(bool enabled) { |
+ delete_on_animation_scheduled_ = enabled; |
+ } |
+ |
+ // LayerAnimationObserver implementation. |
+ virtual void OnLayerAnimationEnded( |
+ LayerAnimationSequence* sequence) OVERRIDE { |
+ if (delete_on_animation_ended_) |
+ delete this; |
+ } |
+ |
+ virtual void OnLayerAnimationAborted( |
+ LayerAnimationSequence* sequence) OVERRIDE { |
+ if (delete_on_animation_aborted_) |
+ delete this; |
+ } |
+ |
+ virtual void OnLayerAnimationScheduled( |
+ LayerAnimationSequence* sequence) { |
+ if (delete_on_animation_scheduled_) |
+ delete this; |
+ } |
+ |
+private: |
+ scoped_ptr<AnimatorOwner> animator_owner_; |
+ bool delete_on_animation_ended_; |
+ bool delete_on_animation_aborted_; |
+ bool delete_on_animation_scheduled_; |
+ bool* was_deleted_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(DeletingObserver); |
+}; |
+ |
+TEST(LayerAnimatorTest, ObserverDeletesAnimatorAfterFinishingAnimation) { |
+ bool observer_was_deleted = false; |
+ DeletingObserver* observer = new DeletingObserver(&observer_was_deleted); |
+ observer->set_delete_on_animation_ended(true); |
+ observer->set_delete_on_animation_aborted(true); |
+ LayerAnimator* animator = observer->animator(); |
+ AnimationContainerElement* element = observer->animator(); |
+ animator->set_disable_timer_for_test(true); |
+ TestLayerAnimationDelegate delegate; |
+ animator->SetDelegate(&delegate); |
+ |
+ delegate.SetOpacityFromAnimation(0.0f); |
+ |
+ gfx::Rect start_bounds(0, 0, 50, 50); |
+ gfx::Rect target_bounds(10, 10, 100, 100); |
+ |
+ delegate.SetBoundsFromAnimation(start_bounds); |
+ |
+ base::TimeDelta delta = base::TimeDelta::FromSeconds(1); |
+ LayerAnimationSequence* opacity_sequence = new LayerAnimationSequence( |
+ LayerAnimationElement::CreateOpacityElement(1.0f, delta)); |
+ animator->StartAnimation(opacity_sequence); |
+ |
+ delta = base::TimeDelta::FromSeconds(2); |
+ LayerAnimationSequence* bounds_sequence = new LayerAnimationSequence( |
+ LayerAnimationElement::CreateBoundsElement(target_bounds, delta)); |
+ animator->StartAnimation(bounds_sequence); |
+ |
+ base::TimeTicks start_time = animator->last_step_time(); |
+ element->Step(start_time + base::TimeDelta::FromMilliseconds(1500)); |
+ |
+ EXPECT_TRUE(observer_was_deleted); |
+} |
+ |
+TEST(LayerAnimatorTest, ObserverDeletesAnimatorAfterStoppingAnimating) { |
+ bool observer_was_deleted = false; |
+ DeletingObserver* observer = new DeletingObserver(&observer_was_deleted); |
+ observer->set_delete_on_animation_ended(true); |
+ observer->set_delete_on_animation_aborted(true); |
+ LayerAnimator* animator = observer->animator(); |
+ animator->set_disable_timer_for_test(true); |
+ TestLayerAnimationDelegate delegate; |
+ animator->SetDelegate(&delegate); |
+ |
+ delegate.SetOpacityFromAnimation(0.0f); |
+ |
+ gfx::Rect start_bounds(0, 0, 50, 50); |
+ gfx::Rect target_bounds(10, 10, 100, 100); |
+ |
+ delegate.SetBoundsFromAnimation(start_bounds); |
+ |
+ base::TimeDelta delta = base::TimeDelta::FromSeconds(1); |
+ LayerAnimationSequence* opacity_sequence = new LayerAnimationSequence( |
+ LayerAnimationElement::CreateOpacityElement(1.0f, delta)); |
+ animator->StartAnimation(opacity_sequence); |
+ |
+ delta = base::TimeDelta::FromSeconds(2); |
+ LayerAnimationSequence* bounds_sequence = new LayerAnimationSequence( |
+ LayerAnimationElement::CreateBoundsElement(target_bounds, delta)); |
+ animator->StartAnimation(bounds_sequence); |
+ |
+ animator->StopAnimating(); |
+ |
+ EXPECT_TRUE(observer_was_deleted); |
+} |
+ |
+TEST(LayerAnimatorTest, ObserverDeletesAnimatorAfterScheduling) { |
+ bool observer_was_deleted = false; |
+ DeletingObserver* observer = new DeletingObserver(&observer_was_deleted); |
+ observer->set_delete_on_animation_scheduled(true); |
+ LayerAnimator* animator = observer->animator(); |
+ animator->set_disable_timer_for_test(true); |
+ TestLayerAnimationDelegate delegate; |
+ animator->SetDelegate(&delegate); |
+ |
+ delegate.SetOpacityFromAnimation(0.0f); |
+ |
+ gfx::Rect start_bounds(0, 0, 50, 50); |
+ gfx::Rect target_bounds(10, 10, 100, 100); |
+ |
+ delegate.SetBoundsFromAnimation(start_bounds); |
+ |
+ std::vector<LayerAnimationSequence*> to_start; |
+ |
+ base::TimeDelta delta = base::TimeDelta::FromSeconds(1); |
+ to_start.push_back(new LayerAnimationSequence( |
+ LayerAnimationElement::CreateOpacityElement(1.0f, delta))); |
+ |
+ delta = base::TimeDelta::FromSeconds(2); |
+ to_start.push_back(new LayerAnimationSequence( |
+ LayerAnimationElement::CreateBoundsElement(target_bounds, delta))); |
+ |
+ animator->ScheduleTogether(to_start); |
+ |
+ EXPECT_TRUE(observer_was_deleted); |
+} |
+ |
+TEST(LayerAnimatorTest, ObserverDeletesAnimatorAfterAborted) { |
+ bool observer_was_deleted = false; |
+ DeletingObserver* observer = new DeletingObserver(&observer_was_deleted); |
+ observer->set_delete_on_animation_aborted(true); |
+ LayerAnimator* animator = observer->animator(); |
+ animator->set_preemption_strategy( |
+ LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); |
+ animator->set_disable_timer_for_test(true); |
+ TestLayerAnimationDelegate delegate; |
+ animator->SetDelegate(&delegate); |
+ |
+ delegate.SetOpacityFromAnimation(0.0f); |
+ |
+ gfx::Rect start_bounds(0, 0, 50, 50); |
+ gfx::Rect target_bounds(10, 10, 100, 100); |
+ |
+ delegate.SetBoundsFromAnimation(start_bounds); |
+ |
+ std::vector<LayerAnimationSequence*> to_start; |
+ |
+ base::TimeDelta delta = base::TimeDelta::FromSeconds(1); |
+ to_start.push_back(new LayerAnimationSequence( |
+ LayerAnimationElement::CreateOpacityElement(1.0f, delta))); |
+ |
+ delta = base::TimeDelta::FromSeconds(2); |
+ to_start.push_back(new LayerAnimationSequence( |
+ LayerAnimationElement::CreateBoundsElement(target_bounds, delta))); |
+ |
+ animator->ScheduleTogether(to_start); |
+ |
+ EXPECT_FALSE(observer_was_deleted); |
+ |
+ animator->StartAnimation(new LayerAnimationSequence( |
+ LayerAnimationElement::CreateOpacityElement(1.0f, delta))); |
+ |
+ EXPECT_TRUE(observer_was_deleted); |
+} |
+ |
} // namespace ui |