summaryrefslogtreecommitdiffstats
path: root/ash
diff options
context:
space:
mode:
authorflackr@chromium.org <flackr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-18 12:14:01 +0000
committerflackr@chromium.org <flackr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-18 12:14:01 +0000
commit6086a145feb10d81cf087649f4b66a6cd43a1328 (patch)
treec0134a154841d3d4a8c84fc7d1dc6cbffa13e582 /ash
parent8d158e097c0b6fd39f4b0b41110c3c7b5083eb72 (diff)
downloadchromium_src-6086a145feb10d81cf087649f4b66a6cd43a1328.zip
chromium_src-6086a145feb10d81cf087649f4b66a6cd43a1328.tar.gz
chromium_src-6086a145feb10d81cf087649f4b66a6cd43a1328.tar.bz2
Copy the children list while hiding windows as it changes on hide.
BUG=306277 TEST=WindowSelectorTest.CyclePanelVisibility Review URL: https://codereview.chromium.org/27706002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@229374 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash')
-rw-r--r--ash/wm/overview/window_overview.cc7
-rw-r--r--ash/wm/overview/window_selector_unittest.cc14
2 files changed, 18 insertions, 3 deletions
diff --git a/ash/wm/overview/window_overview.cc b/ash/wm/overview/window_overview.cc
index a805c7d..03d973c 100644
--- a/ash/wm/overview/window_overview.cc
+++ b/ash/wm/overview/window_overview.cc
@@ -295,9 +295,10 @@ void WindowOverview::HideAndTrackNonOverviewWindows() {
for (size_t i = 0; i < kSwitchableWindowContainerIdsLength; ++i) {
aura::Window* container = Shell::GetContainer(*root_iter,
kSwitchableWindowContainerIds[i]);
- for (aura::Window::Windows::const_iterator iter =
- container->children().begin(); iter != container->children().end();
- ++iter) {
+ // Copy the children list as it can change during iteration.
+ aura::Window::Windows children(container->children());
+ for (aura::Window::Windows::const_iterator iter = children.begin();
+ iter != children.end(); ++iter) {
if (GetTargetedWindow(*iter) || !(*iter)->IsVisible())
continue;
ui::ScopedLayerAnimationSettings settings(
diff --git a/ash/wm/overview/window_selector_unittest.cc b/ash/wm/overview/window_selector_unittest.cc
index 1eb5a17..a2bd8ea 100644
--- a/ash/wm/overview/window_selector_unittest.cc
+++ b/ash/wm/overview/window_selector_unittest.cc
@@ -351,6 +351,20 @@ TEST_F(WindowSelectorTest, CyclePanels) {
EXPECT_TRUE(wm::IsActiveWindow(panel1.get()));
}
+// Tests the visibility of panel windows during cycling.
+TEST_F(WindowSelectorTest, CyclePanelVisibility) {
+ gfx::Rect bounds(0, 0, 400, 400);
+ scoped_ptr<aura::Window> window1(CreateWindow(bounds));
+ scoped_ptr<aura::Window> panel1(CreatePanelWindow(bounds));
+ wm::ActivateWindow(panel1.get());
+ wm::ActivateWindow(window1.get());
+
+ Cycle(WindowSelector::FORWARD);
+ FireOverviewStartTimer();
+ EXPECT_EQ(1.0f, panel1->layer()->GetTargetOpacity());
+ StopCycling();
+}
+
// Tests cycles between panel and normal windows.
TEST_F(WindowSelectorTest, CyclePanelsDestroyed) {
gfx::Rect bounds(0, 0, 400, 400);