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