Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(473)

Side by Side Diff: ui/wm/core/transient_window_manager.cc

Issue 1464433002: Check that child window was not destroyed inside UpdateTransientChildVisibility. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/wm/core/transient_window_manager.h" 5 #include "ui/wm/core/transient_window_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <functional> 8 #include <functional>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 } 155 }
156 } 156 }
157 157
158 void TransientWindowManager::OnWindowVisibilityChanged(Window* window, 158 void TransientWindowManager::OnWindowVisibilityChanged(Window* window,
159 bool visible) { 159 bool visible) {
160 if (window_ != window) 160 if (window_ != window)
161 return; 161 return;
162 162
163 // If the window has transient children, updates the transient children's 163 // If the window has transient children, updates the transient children's
164 // visiblity as well. 164 // visiblity as well.
165 for (Window* child : transient_children_) 165 Windows transient_children = transient_children_;
166 Get(child)->UpdateTransientChildVisibility(visible); 166 for (Window* child : transient_children) {
167 // Child window can be removed inside UpdateTransientChildVisibility call.
168 if (std::find(transient_children_.begin(), transient_children_.end(),
169 child) != transient_children_.end())
oshima 2015/11/19 18:05:40 you need {} in this case
170 Get(child)->UpdateTransientChildVisibility(visible);
171 }
167 172
168 // Remember the show request in |show_on_parent_visible_| and hide it again 173 // Remember the show request in |show_on_parent_visible_| and hide it again
169 // if the following conditions are met 174 // if the following conditions are met
170 // - |parent_controls_visibility| is set to true. 175 // - |parent_controls_visibility| is set to true.
171 // - the window is hidden while the transient parent is not visible. 176 // - the window is hidden while the transient parent is not visible.
172 // - Show/Hide was NOT called from TransientWindowManager. 177 // - Show/Hide was NOT called from TransientWindowManager.
173 if (ignore_visibility_changed_event_ || 178 if (ignore_visibility_changed_event_ ||
174 !transient_parent_ || !parent_controls_visibility_) { 179 !transient_parent_ || !parent_controls_visibility_) {
175 return; 180 return;
176 } 181 }
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 218
214 // Destroy transient children, only after we've removed ourselves from our 219 // Destroy transient children, only after we've removed ourselves from our
215 // parent, as destroying an active transient child may otherwise attempt to 220 // parent, as destroying an active transient child may otherwise attempt to
216 // refocus us. 221 // refocus us.
217 Windows transient_children(transient_children_); 222 Windows transient_children(transient_children_);
218 STLDeleteElements(&transient_children); 223 STLDeleteElements(&transient_children);
219 DCHECK(transient_children_.empty()); 224 DCHECK(transient_children_.empty());
220 } 225 }
221 226
222 } // namespace wm 227 } // namespace wm
OLDNEW
« no previous file with comments | « no previous file | ui/wm/core/transient_window_manager_unittest.cc » ('j') | ui/wm/core/transient_window_manager_unittest.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698