| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/multi_user_window_manager_chromeos.h" | 5 #include "chrome/browser/ui/ash/multi_user/multi_user_window_manager_chromeos.h" |
| 6 | 6 |
| 7 #include "apps/shell_window.h" | 7 #include "apps/app_window.h" |
| 8 #include "apps/shell_window_registry.h" | 8 #include "apps/app_window_registry.h" |
| 9 #include "ash/ash_switches.h" | 9 #include "ash/ash_switches.h" |
| 10 #include "ash/desktop_background/user_wallpaper_delegate.h" | 10 #include "ash/desktop_background/user_wallpaper_delegate.h" |
| 11 #include "ash/multi_profile_uma.h" | 11 #include "ash/multi_profile_uma.h" |
| 12 #include "ash/root_window_controller.h" | 12 #include "ash/root_window_controller.h" |
| 13 #include "ash/session_state_delegate.h" | 13 #include "ash/session_state_delegate.h" |
| 14 #include "ash/shelf/shelf.h" | 14 #include "ash/shelf/shelf.h" |
| 15 #include "ash/shelf/shelf_layout_manager.h" | 15 #include "ash/shelf/shelf_layout_manager.h" |
| 16 #include "ash/shell.h" | 16 #include "ash/shell.h" |
| 17 #include "ash/shell_delegate.h" | 17 #include "ash/shell_delegate.h" |
| 18 #include "ash/shell_window_ids.h" | 18 #include "ash/shell_window_ids.h" |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 } else if (browser->is_type_popup()) { | 116 } else if (browser->is_type_popup()) { |
| 117 window_type = ash::MultiProfileUMA::TELEPORT_WINDOW_POPUP; | 117 window_type = ash::MultiProfileUMA::TELEPORT_WINDOW_POPUP; |
| 118 } else { | 118 } else { |
| 119 window_type = ash::MultiProfileUMA::TELEPORT_WINDOW_BROWSER; | 119 window_type = ash::MultiProfileUMA::TELEPORT_WINDOW_BROWSER; |
| 120 } | 120 } |
| 121 } else { | 121 } else { |
| 122 // Unit tests might come here without a profile manager. | 122 // Unit tests might come here without a profile manager. |
| 123 if (!g_browser_process->profile_manager()) | 123 if (!g_browser_process->profile_manager()) |
| 124 return; | 124 return; |
| 125 // If it is not a browser, it is probably be a V2 application. In that case | 125 // If it is not a browser, it is probably be a V2 application. In that case |
| 126 // one of the ShellWindowRegistries should know about it. | 126 // one of the AppWindowRegistry instances should know about it. |
| 127 apps::ShellWindow* shell_window = NULL; | 127 apps::AppWindow* app_window = NULL; |
| 128 std::vector<Profile*> profiles = | 128 std::vector<Profile*> profiles = |
| 129 g_browser_process->profile_manager()->GetLoadedProfiles(); | 129 g_browser_process->profile_manager()->GetLoadedProfiles(); |
| 130 for (std::vector<Profile*>::iterator it = profiles.begin(); | 130 for (std::vector<Profile*>::iterator it = profiles.begin(); |
| 131 it != profiles.end() && shell_window == NULL; it++) { | 131 it != profiles.end() && app_window == NULL; |
| 132 shell_window = apps::ShellWindowRegistry::Get( | 132 it++) { |
| 133 *it)->GetShellWindowForNativeWindow(window); | 133 app_window = apps::AppWindowRegistry::Get(*it) |
| 134 ->GetAppWindowForNativeWindow(window); |
| 134 } | 135 } |
| 135 if (shell_window) { | 136 if (app_window) { |
| 136 if (shell_window->window_type() == | 137 if (app_window->window_type() == apps::AppWindow::WINDOW_TYPE_PANEL || |
| 137 apps::ShellWindow::WINDOW_TYPE_PANEL || | 138 app_window->window_type() == apps::AppWindow::WINDOW_TYPE_V1_PANEL) { |
| 138 shell_window->window_type() == | |
| 139 apps::ShellWindow::WINDOW_TYPE_V1_PANEL) { | |
| 140 window_type = ash::MultiProfileUMA::TELEPORT_WINDOW_PANEL; | 139 window_type = ash::MultiProfileUMA::TELEPORT_WINDOW_PANEL; |
| 141 } else { | 140 } else { |
| 142 window_type = ash::MultiProfileUMA::TELEPORT_WINDOW_V2_APP; | 141 window_type = ash::MultiProfileUMA::TELEPORT_WINDOW_V2_APP; |
| 143 } | 142 } |
| 144 } | 143 } |
| 145 } | 144 } |
| 146 ash::MultiProfileUMA::RecordTeleportWindowType(window_type); | 145 ash::MultiProfileUMA::RecordTeleportWindowType(window_type); |
| 147 } | 146 } |
| 148 | 147 |
| 149 } // namespace | 148 } // namespace |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 203 } | 202 } |
| 204 private: | 203 private: |
| 205 | 204 |
| 206 DISALLOW_COPY_AND_ASSIGN(UserChangeActionDisabler); | 205 DISALLOW_COPY_AND_ASSIGN(UserChangeActionDisabler); |
| 207 }; | 206 }; |
| 208 | 207 |
| 209 // This class keeps track of all applications which were started for a user. | 208 // This class keeps track of all applications which were started for a user. |
| 210 // When an app gets created, the window will be tagged for that user. Note | 209 // When an app gets created, the window will be tagged for that user. Note |
| 211 // that the destruction does not need to be tracked here since the universal | 210 // that the destruction does not need to be tracked here since the universal |
| 212 // window observer will take care of that. | 211 // window observer will take care of that. |
| 213 class AppObserver : public apps::ShellWindowRegistry::Observer { | 212 class AppObserver : public apps::AppWindowRegistry::Observer { |
| 214 public: | 213 public: |
| 215 explicit AppObserver(const std::string& user_id) : user_id_(user_id) {} | 214 explicit AppObserver(const std::string& user_id) : user_id_(user_id) {} |
| 216 virtual ~AppObserver() {} | 215 virtual ~AppObserver() {} |
| 217 | 216 |
| 218 // ShellWindowRegistry::Observer overrides: | 217 // AppWindowRegistry::Observer overrides: |
| 219 virtual void OnShellWindowAdded(apps::ShellWindow* shell_window) OVERRIDE { | 218 virtual void OnAppWindowAdded(apps::AppWindow* app_window) OVERRIDE { |
| 220 aura::Window* window = shell_window->GetNativeWindow(); | 219 aura::Window* window = app_window->GetNativeWindow(); |
| 221 DCHECK(window); | 220 DCHECK(window); |
| 222 MultiUserWindowManagerChromeOS::GetInstance()->SetWindowOwner(window, | 221 MultiUserWindowManagerChromeOS::GetInstance()->SetWindowOwner(window, |
| 223 user_id_); | 222 user_id_); |
| 224 } | 223 } |
| 225 virtual void OnShellWindowIconChanged(apps::ShellWindow* shell_window) | 224 virtual void OnAppWindowIconChanged(apps::AppWindow* app_window) OVERRIDE {} |
| 226 OVERRIDE {} | 225 virtual void OnAppWindowRemoved(apps::AppWindow* app_window) OVERRIDE {} |
| 227 virtual void OnShellWindowRemoved(apps::ShellWindow* shell_window) | |
| 228 OVERRIDE {} | |
| 229 | 226 |
| 230 private: | 227 private: |
| 231 std::string user_id_; | 228 std::string user_id_; |
| 232 | 229 |
| 233 DISALLOW_COPY_AND_ASSIGN(AppObserver); | 230 DISALLOW_COPY_AND_ASSIGN(AppObserver); |
| 234 }; | 231 }; |
| 235 | 232 |
| 236 MultiUserWindowManagerChromeOS::MultiUserWindowManagerChromeOS( | 233 MultiUserWindowManagerChromeOS::MultiUserWindowManagerChromeOS( |
| 237 const std::string& current_user_id) | 234 const std::string& current_user_id) |
| 238 : current_user_id_(current_user_id), | 235 : current_user_id_(current_user_id), |
| (...skipping 19 matching lines...) Expand all Loading... |
| 258 | 255 |
| 259 MultiUserWindowManagerChromeOS::~MultiUserWindowManagerChromeOS() { | 256 MultiUserWindowManagerChromeOS::~MultiUserWindowManagerChromeOS() { |
| 260 // Remove all window observers. | 257 // Remove all window observers. |
| 261 WindowToEntryMap::iterator window = window_to_entry_.begin(); | 258 WindowToEntryMap::iterator window = window_to_entry_.begin(); |
| 262 while (window != window_to_entry_.end()) { | 259 while (window != window_to_entry_.end()) { |
| 263 OnWindowDestroyed(window->first); | 260 OnWindowDestroyed(window->first); |
| 264 window = window_to_entry_.begin(); | 261 window = window_to_entry_.begin(); |
| 265 } | 262 } |
| 266 | 263 |
| 267 // Remove all app observers. | 264 // Remove all app observers. |
| 268 UserIDToShellWindowObserver::iterator app_observer_iterator = | 265 UserIDToAppWindowObserver::iterator app_observer_iterator = |
| 269 user_id_to_app_observer_.begin(); | 266 user_id_to_app_observer_.begin(); |
| 270 while (app_observer_iterator != user_id_to_app_observer_.end()) { | 267 while (app_observer_iterator != user_id_to_app_observer_.end()) { |
| 271 Profile* profile = multi_user_util::GetProfileFromUserID( | 268 Profile* profile = multi_user_util::GetProfileFromUserID( |
| 272 app_observer_iterator->first); | 269 app_observer_iterator->first); |
| 273 DCHECK(profile); | 270 DCHECK(profile); |
| 274 apps::ShellWindowRegistry::Get(profile)->RemoveObserver( | 271 apps::AppWindowRegistry::Get(profile) |
| 275 app_observer_iterator->second); | 272 ->RemoveObserver(app_observer_iterator->second); |
| 276 delete app_observer_iterator->second; | 273 delete app_observer_iterator->second; |
| 277 user_id_to_app_observer_.erase(app_observer_iterator); | 274 user_id_to_app_observer_.erase(app_observer_iterator); |
| 278 app_observer_iterator = user_id_to_app_observer_.begin(); | 275 app_observer_iterator = user_id_to_app_observer_.begin(); |
| 279 } | 276 } |
| 280 | 277 |
| 281 if (ash::Shell::HasInstance()) | 278 if (ash::Shell::HasInstance()) |
| 282 ash::Shell::GetInstance()->session_state_delegate()-> | 279 ash::Shell::GetInstance()->session_state_delegate()-> |
| 283 RemoveSessionStateObserver(this); | 280 RemoveSessionStateObserver(this); |
| 284 } | 281 } |
| 285 | 282 |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 375 // Otherwise we ask the object for its desktop. | 372 // Otherwise we ask the object for its desktop. |
| 376 return it->second->show_for_user(); | 373 return it->second->show_for_user(); |
| 377 } | 374 } |
| 378 | 375 |
| 379 void MultiUserWindowManagerChromeOS::AddUser(Profile* profile) { | 376 void MultiUserWindowManagerChromeOS::AddUser(Profile* profile) { |
| 380 const std::string& user_id = multi_user_util::GetUserIDFromProfile(profile); | 377 const std::string& user_id = multi_user_util::GetUserIDFromProfile(profile); |
| 381 if (user_id_to_app_observer_.find(user_id) != user_id_to_app_observer_.end()) | 378 if (user_id_to_app_observer_.find(user_id) != user_id_to_app_observer_.end()) |
| 382 return; | 379 return; |
| 383 | 380 |
| 384 user_id_to_app_observer_[user_id] = new AppObserver(user_id); | 381 user_id_to_app_observer_[user_id] = new AppObserver(user_id); |
| 385 apps::ShellWindowRegistry::Get(profile)->AddObserver( | 382 apps::AppWindowRegistry::Get(profile) |
| 386 user_id_to_app_observer_[user_id]); | 383 ->AddObserver(user_id_to_app_observer_[user_id]); |
| 387 | 384 |
| 388 // Account all existing application windows of this user accordingly. | 385 // Account all existing application windows of this user accordingly. |
| 389 const apps::ShellWindowRegistry::ShellWindowList& shell_windows = | 386 const apps::AppWindowRegistry::AppWindowList& app_windows = |
| 390 apps::ShellWindowRegistry::Get(profile)->shell_windows(); | 387 apps::AppWindowRegistry::Get(profile)->app_windows(); |
| 391 apps::ShellWindowRegistry::ShellWindowList::const_iterator it = | 388 apps::AppWindowRegistry::AppWindowList::const_iterator it = |
| 392 shell_windows.begin(); | 389 app_windows.begin(); |
| 393 for (; it != shell_windows.end(); ++it) | 390 for (; it != app_windows.end(); ++it) |
| 394 user_id_to_app_observer_[user_id]->OnShellWindowAdded(*it); | 391 user_id_to_app_observer_[user_id]->OnAppWindowAdded(*it); |
| 395 | 392 |
| 396 // Account all existing browser windows of this user accordingly. | 393 // Account all existing browser windows of this user accordingly. |
| 397 BrowserList* browser_list = BrowserList::GetInstance(HOST_DESKTOP_TYPE_ASH); | 394 BrowserList* browser_list = BrowserList::GetInstance(HOST_DESKTOP_TYPE_ASH); |
| 398 BrowserList::const_iterator browser_it = browser_list->begin(); | 395 BrowserList::const_iterator browser_it = browser_list->begin(); |
| 399 for (; browser_it != browser_list->end(); ++browser_it) { | 396 for (; browser_it != browser_list->end(); ++browser_it) { |
| 400 if ((*browser_it)->profile()->GetOriginalProfile() == profile) | 397 if ((*browser_it)->profile()->GetOriginalProfile() == profile) |
| 401 AddBrowserWindow(*browser_it); | 398 AddBrowserWindow(*browser_it); |
| 402 } | 399 } |
| 403 } | 400 } |
| 404 | 401 |
| (...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 867 window->Show(); | 864 window->Show(); |
| 868 else | 865 else |
| 869 window->Hide(); | 866 window->Hide(); |
| 870 | 867 |
| 871 // Make sure that animations have no influence on the window state after the | 868 // Make sure that animations have no influence on the window state after the |
| 872 // call. | 869 // call. |
| 873 DCHECK_EQ(visible, window->IsVisible()); | 870 DCHECK_EQ(visible, window->IsVisible()); |
| 874 } | 871 } |
| 875 | 872 |
| 876 } // namespace chrome | 873 } // namespace chrome |
| OLD | NEW |