Index: ash/wm/panels/panel_layout_manager.cc |
diff --git a/ash/wm/panels/panel_layout_manager.cc b/ash/wm/panels/panel_layout_manager.cc |
index a19c24568ab7383d1f2629a73e998014ec12810a..bf69c2c06d349518f2533258192adcfcf38e40b6 100644 |
--- a/ash/wm/panels/panel_layout_manager.cc |
+++ b/ash/wm/panels/panel_layout_manager.cc |
@@ -551,10 +551,14 @@ void PanelLayoutManager::WillChangeVisibilityState( |
return; |
scoped_ptr<aura::WindowTracker> minimized_windows(new aura::WindowTracker); |
for (PanelList::iterator iter = panel_windows_.begin(); |
- iter != panel_windows_.end(); ++iter) { |
- if (iter->window->IsVisible()) { |
- minimized_windows->Add(iter->window); |
- wm::GetWindowState(iter->window)->Minimize(); |
+ iter != panel_windows_.end();) { |
+ aura::Window* window = iter->window; |
+ // Minimizing a panel window may remove it from the panel_windows_ list. |
+ // Advance the iterator before minimizing it: http://crbug.com/393047. |
+ ++iter; |
+ if (window != dragged_panel_ && window->IsVisible()) { |
+ minimized_windows->Add(window); |
+ wm::GetWindowState(window)->Minimize(); |
} |
} |
restore_windows_on_shelf_visible_ = minimized_windows.Pass(); |