Index: ash/wm/overview/window_selector_unittest.cc |
diff --git a/ash/wm/overview/window_selector_unittest.cc b/ash/wm/overview/window_selector_unittest.cc |
index 9042d0eaddbee8c86c176ccbb45c84e2a53f063e..64a6e3d5d4af720067d419af363dd0d54fe110a9 100644 |
--- a/ash/wm/overview/window_selector_unittest.cc |
+++ b/ash/wm/overview/window_selector_unittest.cc |
@@ -60,6 +60,7 @@ |
#include "ui/display/manager/display_layout.h" |
#include "ui/events/event_utils.h" |
#include "ui/events/test/event_generator.h" |
+#include "ui/gfx/animation/slide_animation.h" |
#include "ui/gfx/geometry/point_conversions.h" |
#include "ui/gfx/geometry/rect_conversions.h" |
#include "ui/gfx/geometry/safe_integer_conversions.h" |
@@ -273,6 +274,13 @@ class WindowSelectorTest |
return *iter; |
} |
+ gfx::SlideAnimation* GetBackgroundViewAnimationForWindow( |
+ int grid_index, |
+ aura::Window* window) { |
+ return GetWindowItemForWindow(grid_index, window) |
+ ->GetBackgroundViewAnimation(); |
+ } |
+ |
// Selects |window| in the active overview session by cycling through all |
// windows in overview until it is found. Returns true if |window| was found, |
// false otherwise. |
@@ -1286,6 +1294,38 @@ TEST_P(WindowSelectorTest, DISABLED_MinimizedWindowVisibility) { |
} |
} |
+// Tests that it is safe to destroy a window while the overview header animation |
+// is still active. See http://crbug.com/646350. |
+TEST_P(WindowSelectorTest, SafeToDestroyWindowDuringAnimation) { |
+ gfx::Rect bounds(0, 0, 400, 400); |
+ { |
+ // Quickly enter and exit overview mode to activate header animations. |
+ std::unique_ptr<aura::Window> window(CreateWindow(bounds)); |
+ ui::ScopedAnimationDurationScaleMode test_duration_mode( |
+ ui::ScopedAnimationDurationScaleMode::NON_ZERO_DURATION); |
+ ToggleOverview(); |
+ EXPECT_TRUE(IsSelecting()); |
+ |
+ gfx::SlideAnimation* animation = |
+ GetBackgroundViewAnimationForWindow(0, window.get()); |
+ if (ash::MaterialDesignController::IsOverviewMaterial()) |
+ ASSERT_NE(nullptr, animation); |
+ ToggleOverview(); |
+ EXPECT_FALSE(IsSelecting()); |
+ if (animation) |
+ EXPECT_TRUE(animation->is_animating()); |
+ |
+ // Close the window while the overview header animation is active. |
+ window.reset(); |
+ |
+ // Progress animation to the end - should not crash. |
+ if (animation) { |
+ animation->SetCurrentValue(1.0); |
+ animation->Reset(1.0); |
+ } |
+ } |
+} |
+ |
// Tests that a bounds change during overview is corrected for. |
TEST_P(WindowSelectorTest, BoundsChangeDuringOverview) { |
std::unique_ptr<aura::Window> window(CreateWindow(gfx::Rect(0, 0, 400, 400))); |