Index: ash/wm/window_animations.cc |
=================================================================== |
--- ash/wm/window_animations.cc (revision 153309) |
+++ ash/wm/window_animations.cc (working copy) |
@@ -50,6 +50,7 @@ |
namespace { |
const float kWindowAnimation_Vertical_TranslateY = 15.f; |
+bool delayed_old_layer_deletion_in_cross_fade_for_test_ = false; |
} |
DEFINE_WINDOW_PROPERTY_KEY(WindowVisibilityAnimationType, |
@@ -663,7 +664,13 @@ |
// ui::ImplicitAnimationObserver overrides: |
virtual void OnImplicitAnimationsCompleted() OVERRIDE { |
- delete this; |
+ // ImplicitAnimationObserver's base class uses the object after |
+ // calling this function, so we cannot delete |this|. The |layer_| |
+ // may be gone by the next message loop run when shutting down, so |
+ // clean them up now. |
+ if (!delayed_old_layer_deletion_in_cross_fade_for_test_) |
+ Cleanup(); |
+ MessageLoop::current()->DeleteSoon(FROM_HERE, this); |
} |
private: |
@@ -975,5 +982,9 @@ |
} |
} |
+void SetDelayedOldLayerDeletionInCrossFadeForTest(bool value) { |
+ delayed_old_layer_deletion_in_cross_fade_for_test_ = value; |
+} |
+ |
} // namespace internal |
} // namespace ash |