Index: ui/compositor/layer_animation_observer.cc |
diff --git a/ui/compositor/layer_animation_observer.cc b/ui/compositor/layer_animation_observer.cc |
index b41676aef27376915e93978f5dc11660eb015ecf..a70eb582ebecdd04f268adde9fa4db17feb77e42 100644 |
--- a/ui/compositor/layer_animation_observer.cc |
+++ b/ui/compositor/layer_animation_observer.cc |
@@ -56,10 +56,14 @@ void LayerAnimationObserver::DetachedFromSequence( |
// ImplicitAnimationObserver |
ImplicitAnimationObserver::ImplicitAnimationObserver() |
- : active_(false) { |
+ : active_(false), |
+ destroyed_(NULL) { |
} |
-ImplicitAnimationObserver::~ImplicitAnimationObserver() {} |
+ImplicitAnimationObserver::~ImplicitAnimationObserver() { |
+ if (destroyed_) |
+ *destroyed_ = true; |
+} |
void ImplicitAnimationObserver::SetActive(bool active) { |
active_ = active; |
@@ -73,7 +77,12 @@ void ImplicitAnimationObserver::StopObservingImplicitAnimations() { |
void ImplicitAnimationObserver::OnLayerAnimationEnded( |
LayerAnimationSequence* sequence) { |
+ bool destroyed = false; |
+ destroyed_ = &destroyed; |
sequence->RemoveObserver(this); |
+ if (destroyed) |
+ return; |
+ destroyed_ = NULL; |
DCHECK(attached_sequences().find(sequence) == attached_sequences().end()); |
CheckCompleted(); |
} |
@@ -101,8 +110,8 @@ void ImplicitAnimationObserver::OnDetachedFromSequence( |
void ImplicitAnimationObserver::CheckCompleted() { |
if (active_ && attached_sequences().empty()) { |
- OnImplicitAnimationsCompleted(); |
active_ = false; |
+ OnImplicitAnimationsCompleted(); |
} |
} |