diff options
author | flackr@chromium.org <flackr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-18 12:14:01 +0000 |
---|---|---|
committer | flackr@chromium.org <flackr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-18 12:14:01 +0000 |
commit | 6086a145feb10d81cf087649f4b66a6cd43a1328 (patch) | |
tree | c0134a154841d3d4a8c84fc7d1dc6cbffa13e582 /ash | |
parent | 8d158e097c0b6fd39f4b0b41110c3c7b5083eb72 (diff) | |
download | chromium_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.cc | 7 | ||||
-rw-r--r-- | ash/wm/overview/window_selector_unittest.cc | 14 |
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); |