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

Side by Side Diff: chrome/browser/ui/ash/multi_user/user_switch_animator_chromeos.cc

Issue 1428213004: This CL replaces std::string user_id in ash/* with AccountId. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Update after review. 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 "chrome/browser/ui/ash/multi_user/user_switch_animator_chromeos.h" 5 #include "chrome/browser/ui/ash/multi_user/user_switch_animator_chromeos.h"
6 6
7 #include "ash/desktop_background/user_wallpaper_delegate.h" 7 #include "ash/desktop_background/user_wallpaper_delegate.h"
8 #include "ash/root_window_controller.h" 8 #include "ash/root_window_controller.h"
9 #include "ash/shelf/shelf_layout_manager.h" 9 #include "ash/shelf/shelf_layout_manager.h"
10 #include "ash/shelf/shelf_widget.h" 10 #include "ash/shelf/shelf_widget.h"
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 if (itr != window_list->end()) { 95 if (itr != window_list->end()) {
96 window_list->erase(itr); 96 window_list->erase(itr);
97 window_list->push_back(active_window); 97 window_list->push_back(active_window);
98 } 98 }
99 } 99 }
100 100
101 } // namespace 101 } // namespace
102 102
103 UserSwitchAnimatorChromeOS::UserSwitchAnimatorChromeOS( 103 UserSwitchAnimatorChromeOS::UserSwitchAnimatorChromeOS(
104 MultiUserWindowManagerChromeOS* owner, 104 MultiUserWindowManagerChromeOS* owner,
105 const std::string& new_user_id, 105 const AccountId& new_account_id,
106 int animation_speed_ms) 106 int animation_speed_ms)
107 : owner_(owner), 107 : owner_(owner),
108 new_user_id_(new_user_id), 108 new_account_id_(new_account_id),
109 animation_speed_ms_(animation_speed_ms), 109 animation_speed_ms_(animation_speed_ms),
110 animation_step_(ANIMATION_STEP_HIDE_OLD_USER), 110 animation_step_(ANIMATION_STEP_HIDE_OLD_USER),
111 screen_cover_(GetScreenCover(NULL)), 111 screen_cover_(GetScreenCover(NULL)),
112 windows_by_user_id_() { 112 windows_by_account_id_() {
113 BuildUserToWindowsListMap(); 113 BuildUserToWindowsListMap();
114 AdvanceUserTransitionAnimation(); 114 AdvanceUserTransitionAnimation();
115 115
116 if (!animation_speed_ms_) { 116 if (!animation_speed_ms_) {
117 FinalizeAnimation(); 117 FinalizeAnimation();
118 } else { 118 } else {
119 user_changed_animation_timer_.reset(new base::Timer( 119 user_changed_animation_timer_.reset(new base::Timer(
120 FROM_HERE, 120 FROM_HERE,
121 base::TimeDelta::FromMilliseconds(animation_speed_ms_), 121 base::TimeDelta::FromMilliseconds(animation_speed_ms_),
122 base::Bind( 122 base::Bind(
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 ash::UserWallpaperDelegate* wallpaper_delegate = 186 ash::UserWallpaperDelegate* wallpaper_delegate =
187 ash::Shell::GetInstance()->user_wallpaper_delegate(); 187 ash::Shell::GetInstance()->user_wallpaper_delegate();
188 if (animation_step == ANIMATION_STEP_HIDE_OLD_USER) { 188 if (animation_step == ANIMATION_STEP_HIDE_OLD_USER) {
189 // Set the wallpaper cross dissolve animation duration to our complete 189 // Set the wallpaper cross dissolve animation duration to our complete
190 // animation cycle for a fade in and fade out. 190 // animation cycle for a fade in and fade out.
191 int duration = 191 int duration =
192 NO_USER_COVERS_SCREEN == screen_cover_ ? (2 * animation_speed_ms_) : 0; 192 NO_USER_COVERS_SCREEN == screen_cover_ ? (2 * animation_speed_ms_) : 0;
193 wallpaper_delegate->SetAnimationDurationOverride( 193 wallpaper_delegate->SetAnimationDurationOverride(
194 std::max(duration, kMinimalAnimationTimeMS)); 194 std::max(duration, kMinimalAnimationTimeMS));
195 if (screen_cover_ != NEW_USER_COVERS_SCREEN) { 195 if (screen_cover_ != NEW_USER_COVERS_SCREEN) {
196 chromeos::WallpaperManager::Get()->SetUserWallpaperNow(new_user_id_); 196 chromeos::WallpaperManager::Get()->SetUserWallpaperNow(
197 wallpaper_user_id_ = 197 new_account_id_.GetUserEmail());
198 wallpaper_user_id_for_test_ =
198 (NO_USER_COVERS_SCREEN == screen_cover_ ? "->" : "") + 199 (NO_USER_COVERS_SCREEN == screen_cover_ ? "->" : "") +
199 new_user_id_; 200 new_account_id_.GetUserEmail();
200 } 201 }
201 } else if (animation_step == ANIMATION_STEP_FINALIZE) { 202 } else if (animation_step == ANIMATION_STEP_FINALIZE) {
202 // Revert the wallpaper cross dissolve animation duration back to the 203 // Revert the wallpaper cross dissolve animation duration back to the
203 // default. 204 // default.
204 if (screen_cover_ == NEW_USER_COVERS_SCREEN) 205 if (screen_cover_ == NEW_USER_COVERS_SCREEN)
205 chromeos::WallpaperManager::Get()->SetUserWallpaperNow(new_user_id_); 206 chromeos::WallpaperManager::Get()->SetUserWallpaperNow(
207 new_account_id_.GetUserEmail());
206 208
207 // Coming here the wallpaper user id is the final result. No matter how we 209 // Coming here the wallpaper user id is the final result. No matter how we
208 // got here. 210 // got here.
209 wallpaper_user_id_ = new_user_id_; 211 wallpaper_user_id_for_test_ = new_account_id_.GetUserEmail();
210 wallpaper_delegate->SetAnimationDurationOverride(0); 212 wallpaper_delegate->SetAnimationDurationOverride(0);
211 } 213 }
212 } 214 }
213 215
214 void UserSwitchAnimatorChromeOS::TransitionUserShelf( 216 void UserSwitchAnimatorChromeOS::TransitionUserShelf(
215 AnimationStep animation_step) { 217 AnimationStep animation_step) {
216 ChromeLauncherController* chrome_launcher_controller = 218 ChromeLauncherController* chrome_launcher_controller =
217 ChromeLauncherController::instance(); 219 ChromeLauncherController::instance();
218 // The shelf animation duration override. 220 // The shelf animation duration override.
219 int duration_override = animation_speed_ms_; 221 int duration_override = animation_speed_ms_;
220 // Handle the shelf order of items. This is done once the old user is hidden. 222 // Handle the shelf order of items. This is done once the old user is hidden.
221 if (animation_step == ANIMATION_STEP_SHOW_NEW_USER) { 223 if (animation_step == ANIMATION_STEP_SHOW_NEW_USER) {
222 // Some unit tests have no ChromeLauncherController. 224 // Some unit tests have no ChromeLauncherController.
223 if (chrome_launcher_controller) 225 if (chrome_launcher_controller)
224 chrome_launcher_controller->ActiveUserChanged(new_user_id_); 226 chrome_launcher_controller->ActiveUserChanged(
227 new_account_id_.GetUserEmail());
225 // Hide the black rectangle on top of each shelf again. 228 // Hide the black rectangle on top of each shelf again.
226 aura::Window::Windows root_windows = ash::Shell::GetAllRootWindows(); 229 aura::Window::Windows root_windows = ash::Shell::GetAllRootWindows();
227 for (aura::Window::Windows::const_iterator iter = root_windows.begin(); 230 for (aura::Window::Windows::const_iterator iter = root_windows.begin();
228 iter != root_windows.end(); ++iter) { 231 iter != root_windows.end(); ++iter) {
229 ash::ShelfWidget* shelf = 232 ash::ShelfWidget* shelf =
230 ash::RootWindowController::ForWindow(*iter)->shelf(); 233 ash::RootWindowController::ForWindow(*iter)->shelf();
231 shelf->HideShelfBehindBlackBar(false, duration_override); 234 shelf->HideShelfBehindBlackBar(false, duration_override);
232 } 235 }
233 // We kicked off the shelf animation above and the override can be 236 // We kicked off the shelf animation above and the override can be
234 // removed. 237 // removed.
(...skipping 23 matching lines...) Expand all
258 iter != root_windows.end(); ++iter) { 261 iter != root_windows.end(); ++iter) {
259 // Hiding the shelf will cause a resize on a maximized window. 262 // Hiding the shelf will cause a resize on a maximized window.
260 // If the shelf is then shown for the following user in the same location, 263 // If the shelf is then shown for the following user in the same location,
261 // the window gets resized again. Since each resize can cause a considerable 264 // the window gets resized again. Since each resize can cause a considerable
262 // CPU usage and therefore effect jank, we should avoid hiding the shelf if 265 // CPU usage and therefore effect jank, we should avoid hiding the shelf if
263 // the start and end location are the same and cover the shelf instead with 266 // the start and end location are the same and cover the shelf instead with
264 // a black rectangle on top. 267 // a black rectangle on top.
265 if (GetScreenCover(*iter) != NO_USER_COVERS_SCREEN && 268 if (GetScreenCover(*iter) != NO_USER_COVERS_SCREEN &&
266 (!chrome_launcher_controller || 269 (!chrome_launcher_controller ||
267 !chrome_launcher_controller->ShelfBoundsChangesProbablyWithUser( 270 !chrome_launcher_controller->ShelfBoundsChangesProbablyWithUser(
268 *iter, new_user_id_))) { 271 *iter, new_account_id_.GetUserEmail()))) {
269 ash::ShelfWidget* shelf = 272 ash::ShelfWidget* shelf =
270 ash::RootWindowController::ForWindow(*iter)->shelf(); 273 ash::RootWindowController::ForWindow(*iter)->shelf();
271 shelf->HideShelfBehindBlackBar(true, duration_override); 274 shelf->HideShelfBehindBlackBar(true, duration_override);
272 } else { 275 } else {
273 // This shelf change is only part of the animation and will be updated by 276 // This shelf change is only part of the animation and will be updated by
274 // ChromeLauncherController::ActiveUserChanged() to the new users value. 277 // ChromeLauncherController::ActiveUserChanged() to the new users value.
275 // Note that the user preference will not be changed. 278 // Note that the user preference will not be changed.
276 ash::Shell::GetInstance()->SetShelfAutoHideBehavior( 279 ash::Shell::GetInstance()->SetShelfAutoHideBehavior(
277 ash::SHELF_AUTO_HIDE_ALWAYS_HIDDEN, *iter); 280 ash::SHELF_AUTO_HIDE_ALWAYS_HIDDEN, *iter);
278 } 281 }
279 } 282 }
280 } 283 }
281 284
282 void UserSwitchAnimatorChromeOS::TransitionWindows( 285 void UserSwitchAnimatorChromeOS::TransitionWindows(
283 AnimationStep animation_step) { 286 AnimationStep animation_step) {
284 // Disable the window position manager and the MRU window tracker temporarily. 287 // Disable the window position manager and the MRU window tracker temporarily.
285 UserChangeActionDisabler disabler; 288 UserChangeActionDisabler disabler;
286 289
287 // Animation duration. 290 // Animation duration.
288 int duration = std::max(kMinimalAnimationTimeMS, 2 * animation_speed_ms_); 291 int duration = std::max(kMinimalAnimationTimeMS, 2 * animation_speed_ms_);
289 292
290 switch (animation_step) { 293 switch (animation_step) {
291 case ANIMATION_STEP_HIDE_OLD_USER: { 294 case ANIMATION_STEP_HIDE_OLD_USER: {
292 // Hide the old users. 295 // Hide the old users.
293 for (auto& user_pair : windows_by_user_id_) { 296 for (auto& user_pair : windows_by_account_id_) {
294 auto& show_for_user_id = user_pair.first; 297 auto& show_for_account_id = user_pair.first;
295 if (show_for_user_id == new_user_id_) 298 if (show_for_account_id == new_account_id_)
296 continue; 299 continue;
297 300
298 bool found_foreground_maximized_window = false; 301 bool found_foreground_maximized_window = false;
299 302
300 // We hide the windows such that the MRU window is the last one to be 303 // We hide the windows such that the MRU window is the last one to be
301 // hidden, at which point all other windows have already been hidden, 304 // hidden, at which point all other windows have already been hidden,
302 // and hence the FocusController will not be able to find a next 305 // and hence the FocusController will not be able to find a next
303 // activateable window to restore focus to, and so we don't change 306 // activateable window to restore focus to, and so we don't change
304 // window order (crbug.com/424307). 307 // window order (crbug.com/424307).
305 PutMruWindowLast(&(user_pair.second)); 308 PutMruWindowLast(&(user_pair.second));
306 for (auto& window : user_pair.second) { 309 for (auto& window : user_pair.second) {
307 auto window_state = ash::wm::GetWindowState(window); 310 auto window_state = ash::wm::GetWindowState(window);
308 311
309 // Minimized visiting windows (minimized windows with an owner 312 // Minimized visiting windows (minimized windows with an owner
310 // different than that of the for_show_user_id) should retrun to their 313 // different than that of the for_show_account_id) should retrun to
314 // their
311 // original owners' desktops. 315 // original owners' desktops.
312 MultiUserWindowManagerChromeOS::WindowToEntryMap::const_iterator itr = 316 MultiUserWindowManagerChromeOS::WindowToEntryMap::const_iterator itr =
313 owner_->window_to_entry().find(window); 317 owner_->window_to_entry().find(window);
314 DCHECK(itr != owner_->window_to_entry().end()); 318 DCHECK(itr != owner_->window_to_entry().end());
315 if (show_for_user_id != itr->second->owner() && 319 if (show_for_account_id != itr->second->owner() &&
316 window_state->IsMinimized()) { 320 window_state->IsMinimized()) {
317 owner_->ShowWindowForUserIntern(window, itr->second->owner()); 321 owner_->ShowWindowForUserIntern(window, itr->second->owner());
318 window_state->Unminimize(); 322 window_state->Unminimize();
319 continue; 323 continue;
320 } 324 }
321 325
322 if (!found_foreground_maximized_window && CoversScreen(window) && 326 if (!found_foreground_maximized_window && CoversScreen(window) &&
323 screen_cover_ == BOTH_USERS_COVER_SCREEN) { 327 screen_cover_ == BOTH_USERS_COVER_SCREEN) {
324 // Maximized windows should be hidden, but visually kept visible 328 // Maximized windows should be hidden, but visually kept visible
325 // in order to prevent showing the background while the animation is 329 // in order to prevent showing the background while the animation is
326 // in progress. Therefore we detach the old layer and recreate fresh 330 // in progress. Therefore we detach the old layer and recreate fresh
327 // ones. The old layers will be destructed at the animation step 331 // ones. The old layers will be destructed at the animation step
328 // |ANIMATION_STEP_FINALIZE|. 332 // |ANIMATION_STEP_FINALIZE|.
329 // old_layers_.push_back(wm::RecreateLayers(window)); 333 // old_layers_.push_back(wm::RecreateLayers(window));
330 // We only want to do this for the first (foreground) maximized 334 // We only want to do this for the first (foreground) maximized
331 // window we encounter. 335 // window we encounter.
332 found_foreground_maximized_window = true; 336 found_foreground_maximized_window = true;
333 ui::LayerTreeOwner* old_layer = 337 ui::LayerTreeOwner* old_layer =
334 wm::RecreateLayers(window).release(); 338 wm::RecreateLayers(window).release();
335 window->layer()->parent()->StackAtBottom(old_layer->root()); 339 window->layer()->parent()->StackAtBottom(old_layer->root());
336 new MaximizedWindowAnimationWatcher(window->layer()->GetAnimator(), 340 new MaximizedWindowAnimationWatcher(window->layer()->GetAnimator(),
337 old_layer); 341 old_layer);
338 } 342 }
339 343
340 owner_->SetWindowVisibility(window, false, duration); 344 owner_->SetWindowVisibility(window, false, duration);
341 } 345 }
342 } 346 }
343 347
344 // Show new user. 348 // Show new user.
345 auto new_user_itr = windows_by_user_id_.find(new_user_id_); 349 auto new_user_itr = windows_by_account_id_.find(new_account_id_);
346 if (new_user_itr == windows_by_user_id_.end()) 350 if (new_user_itr == windows_by_account_id_.end())
347 return; 351 return;
348 352
349 for (auto& window : new_user_itr->second) { 353 for (auto& window : new_user_itr->second) {
350 auto entry = owner_->window_to_entry().find(window); 354 auto entry = owner_->window_to_entry().find(window);
351 DCHECK(entry != owner_->window_to_entry().end()); 355 DCHECK(entry != owner_->window_to_entry().end());
352 356
353 if (entry->second->show()) 357 if (entry->second->show())
354 owner_->SetWindowVisibility(window, true, duration); 358 owner_->SetWindowVisibility(window, true, duration);
355 } 359 }
356 360
357 break; 361 break;
358 } 362 }
359 case ANIMATION_STEP_SHOW_NEW_USER: { 363 case ANIMATION_STEP_SHOW_NEW_USER: {
360 // In order to make the animation look better, we had to move the code 364 // In order to make the animation look better, we had to move the code
361 // that shows the new user to the previous step. Hence, we do nothing 365 // that shows the new user to the previous step. Hence, we do nothing
362 // here. 366 // here.
363 break; 367 break;
364 } 368 }
365 case ANIMATION_STEP_FINALIZE: { 369 case ANIMATION_STEP_FINALIZE: {
366 // Reactivate the MRU window of the new user. 370 // Reactivate the MRU window of the new user.
367 ash::MruWindowTracker::WindowList mru_list = 371 ash::MruWindowTracker::WindowList mru_list =
368 ash::Shell::GetInstance()->mru_window_tracker()->BuildMruWindowList(); 372 ash::Shell::GetInstance()->mru_window_tracker()->BuildMruWindowList();
369 if (!mru_list.empty()) { 373 if (!mru_list.empty()) {
370 aura::Window* window = mru_list[0]; 374 aura::Window* window = mru_list[0];
371 ash::wm::WindowState* window_state = ash::wm::GetWindowState(window); 375 ash::wm::WindowState* window_state = ash::wm::GetWindowState(window);
372 if (owner_->IsWindowOnDesktopOfUser(window, new_user_id_) && 376 if (owner_->IsWindowOnDesktopOfUser(window, new_account_id_) &&
373 !window_state->IsMinimized()) { 377 !window_state->IsMinimized()) {
374 // Several unit tests come here without an activation client. 378 // Several unit tests come here without an activation client.
375 aura::client::ActivationClient* client = 379 aura::client::ActivationClient* client =
376 aura::client::GetActivationClient(window->GetRootWindow()); 380 aura::client::GetActivationClient(window->GetRootWindow());
377 if (client) 381 if (client)
378 client->ActivateWindow(window); 382 client->ActivateWindow(window);
379 } 383 }
380 } else { 384 } else {
381 // If the new user has no windows at all in his MRU windows list, we 385 // If the new user has no windows at all in his MRU windows list, we
382 // must deactivate any active window (by setting the active window to 386 // must deactivate any active window (by setting the active window to
383 // |nullptr|). 387 // |nullptr|).
384 aura::Window* root_window = ash::Shell::GetPrimaryRootWindow(); 388 aura::Window* root_window = ash::Shell::GetPrimaryRootWindow();
385 aura::client::ActivationClient* client = 389 aura::client::ActivationClient* client =
386 aura::client::GetActivationClient(root_window); 390 aura::client::GetActivationClient(root_window);
387 if (client) 391 if (client)
388 client->ActivateWindow(nullptr); 392 client->ActivateWindow(nullptr);
389 } 393 }
390 394
391 owner_->notification_blocker()->ActiveUserChanged(new_user_id_); 395 owner_->notification_blocker()->ActiveUserChanged(new_account_id_);
392 break; 396 break;
393 } 397 }
394 case ANIMATION_STEP_ENDED: 398 case ANIMATION_STEP_ENDED:
395 NOTREACHED(); 399 NOTREACHED();
396 break; 400 break;
397 } 401 }
398 } 402 }
399 403
400 UserSwitchAnimatorChromeOS::TransitioningScreenCover 404 UserSwitchAnimatorChromeOS::TransitioningScreenCover
401 UserSwitchAnimatorChromeOS::GetScreenCover(aura::Window* root_window) { 405 UserSwitchAnimatorChromeOS::GetScreenCover(aura::Window* root_window) {
402 TransitioningScreenCover cover = NO_USER_COVERS_SCREEN; 406 TransitioningScreenCover cover = NO_USER_COVERS_SCREEN;
403 for (MultiUserWindowManagerChromeOS::WindowToEntryMap::const_iterator it_map = 407 for (MultiUserWindowManagerChromeOS::WindowToEntryMap::const_iterator it_map =
404 owner_->window_to_entry().begin(); 408 owner_->window_to_entry().begin();
405 it_map != owner_->window_to_entry().end(); 409 it_map != owner_->window_to_entry().end();
406 ++it_map) { 410 ++it_map) {
407 aura::Window* window = it_map->first; 411 aura::Window* window = it_map->first;
408 if (root_window && window->GetRootWindow() != root_window) 412 if (root_window && window->GetRootWindow() != root_window)
409 continue; 413 continue;
410 if (window->IsVisible() && CoversScreen(window)) { 414 if (window->IsVisible() && CoversScreen(window)) {
411 if (cover == NEW_USER_COVERS_SCREEN) 415 if (cover == NEW_USER_COVERS_SCREEN)
412 return BOTH_USERS_COVER_SCREEN; 416 return BOTH_USERS_COVER_SCREEN;
413 else 417 else
414 cover = OLD_USER_COVERS_SCREEN; 418 cover = OLD_USER_COVERS_SCREEN;
415 } else if (owner_->IsWindowOnDesktopOfUser(window, new_user_id_) && 419 } else if (owner_->IsWindowOnDesktopOfUser(window, new_account_id_) &&
416 CoversScreen(window)) { 420 CoversScreen(window)) {
417 if (cover == OLD_USER_COVERS_SCREEN) 421 if (cover == OLD_USER_COVERS_SCREEN)
418 return BOTH_USERS_COVER_SCREEN; 422 return BOTH_USERS_COVER_SCREEN;
419 else 423 else
420 cover = NEW_USER_COVERS_SCREEN; 424 cover = NEW_USER_COVERS_SCREEN;
421 } 425 }
422 } 426 }
423 return cover; 427 return cover;
424 } 428 }
425 429
426 void UserSwitchAnimatorChromeOS::BuildUserToWindowsListMap() { 430 void UserSwitchAnimatorChromeOS::BuildUserToWindowsListMap() {
427 // This is to be called only at the time this animation is constructed. 431 // This is to be called only at the time this animation is constructed.
428 DCHECK(windows_by_user_id_.empty()); 432 DCHECK(windows_by_account_id_.empty());
429 433
430 // For each unique parent window, we enumerate its children windows, and 434 // For each unique parent window, we enumerate its children windows, and
431 // for each child if it's in the |window_to_entry()| map, we add it to the 435 // for each child if it's in the |window_to_entry()| map, we add it to the
432 // |windows_by_user_id_| map. 436 // |windows_by_account_id_| map.
433 // This gives us a list of windows per each user that is in the same order 437 // This gives us a list of windows per each user that is in the same order
434 // they were created in their parent windows. 438 // they were created in their parent windows.
435 std::set<aura::Window*> parent_windows; 439 std::set<aura::Window*> parent_windows;
436 auto& window_to_entry_map = owner_->window_to_entry(); 440 auto& window_to_entry_map = owner_->window_to_entry();
437 for (auto& window_entry_pair : window_to_entry_map) { 441 for (auto& window_entry_pair : window_to_entry_map) {
438 aura::Window* parent_window = window_entry_pair.first->parent(); 442 aura::Window* parent_window = window_entry_pair.first->parent();
439 if (parent_windows.find(parent_window) == parent_windows.end()) { 443 if (parent_windows.find(parent_window) == parent_windows.end()) {
440 parent_windows.insert(parent_window); 444 parent_windows.insert(parent_window);
441 for (auto& child_window : parent_window->children()) { 445 for (auto& child_window : parent_window->children()) {
442 auto itr = window_to_entry_map.find(child_window); 446 auto itr = window_to_entry_map.find(child_window);
443 if (itr != window_to_entry_map.end()) { 447 if (itr != window_to_entry_map.end()) {
444 windows_by_user_id_[itr->second->show_for_user()].push_back( 448 windows_by_account_id_[itr->second->show_for_user()].push_back(
445 child_window); 449 child_window);
446 } 450 }
447 } 451 }
448 } 452 }
449 } 453 }
450 } 454 }
451 455
452 } // namespace chrome 456 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698