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..a4bd5b423e6c74a90a8de0ea4da80c1bf34fbbae 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(); |
} |