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/launcher/chrome_launcher_controller.h" | 5 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "ash/ash_switches.h" | 9 #include "ash/ash_switches.h" |
10 #include "ash/desktop_background/desktop_background_controller.h" | 10 #include "ash/desktop_background/desktop_background_controller.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/shelf/shelf.h" | 13 #include "ash/shelf/shelf.h" |
14 #include "ash/shelf/shelf_item_delegate_manager.h" | 14 #include "ash/shelf/shelf_item_delegate_manager.h" |
15 #include "ash/shelf/shelf_layout_manager.h" | 15 #include "ash/shelf/shelf_layout_manager.h" |
16 #include "ash/shelf/shelf_model.h" | 16 #include "ash/shelf/shelf_model.h" |
17 #include "ash/shelf/shelf_widget.h" | 17 #include "ash/shelf/shelf_widget.h" |
18 #include "ash/shell.h" | 18 #include "ash/shell.h" |
| 19 #include "ash/system/tray/system_tray_delegate.h" |
19 #include "ash/wm/window_util.h" | 20 #include "ash/wm/window_util.h" |
20 #include "base/command_line.h" | 21 #include "base/command_line.h" |
21 #include "base/prefs/scoped_user_pref_update.h" | 22 #include "base/prefs/scoped_user_pref_update.h" |
22 #include "base/strings/string_number_conversions.h" | 23 #include "base/strings/string_number_conversions.h" |
23 #include "base/strings/utf_string_conversions.h" | 24 #include "base/strings/utf_string_conversions.h" |
24 #include "base/values.h" | 25 #include "base/values.h" |
25 #include "chrome/browser/app_mode/app_mode_utils.h" | 26 #include "chrome/browser/app_mode/app_mode_utils.h" |
26 #include "chrome/browser/chrome_notification_types.h" | 27 #include "chrome/browser/chrome_notification_types.h" |
27 #include "chrome/browser/defaults.h" | 28 #include "chrome/browser/defaults.h" |
28 #include "chrome/browser/extensions/app_icon_loader_impl.h" | 29 #include "chrome/browser/extensions/app_icon_loader_impl.h" |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
80 #include "grit/ui_resources.h" | 81 #include "grit/ui_resources.h" |
81 #include "net/base/url_util.h" | 82 #include "net/base/url_util.h" |
82 #include "ui/aura/root_window.h" | 83 #include "ui/aura/root_window.h" |
83 #include "ui/aura/window.h" | 84 #include "ui/aura/window.h" |
84 #include "ui/base/l10n/l10n_util.h" | 85 #include "ui/base/l10n/l10n_util.h" |
85 #include "ui/views/corewm/window_animations.h" | 86 #include "ui/views/corewm/window_animations.h" |
86 | 87 |
87 #if defined(OS_CHROMEOS) | 88 #if defined(OS_CHROMEOS) |
88 #include "chrome/browser/browser_process.h" | 89 #include "chrome/browser/browser_process.h" |
89 #include "chrome/browser/chromeos/login/user_manager.h" | 90 #include "chrome/browser/chromeos/login/user_manager.h" |
90 #include "chrome/browser/chromeos/login/wallpaper_manager.h" | |
91 #include "chrome/browser/ui/ash/chrome_shell_delegate.h" | 91 #include "chrome/browser/ui/ash/chrome_shell_delegate.h" |
92 #include "chrome/browser/ui/ash/launcher/multi_profile_browser_status_monitor.h" | 92 #include "chrome/browser/ui/ash/launcher/multi_profile_browser_status_monitor.h" |
93 #include "chrome/browser/ui/ash/launcher/multi_profile_shell_window_launcher_con
troller.h" | 93 #include "chrome/browser/ui/ash/launcher/multi_profile_shell_window_launcher_con
troller.h" |
94 #endif | 94 #endif |
95 | 95 |
96 using extensions::Extension; | 96 using extensions::Extension; |
97 using extensions::UnloadedExtensionInfo; | 97 using extensions::UnloadedExtensionInfo; |
98 using extension_misc::kGmailAppId; | 98 using extension_misc::kGmailAppId; |
99 using content::WebContents; | 99 using content::WebContents; |
100 | 100 |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 // to postpone the notification until the ProfileManager lets us know that | 236 // to postpone the notification until the ProfileManager lets us know that |
237 // the profile for that newly added user was added to the ProfileManager. | 237 // the profile for that newly added user was added to the ProfileManager. |
238 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_ADDED, | 238 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_ADDED, |
239 content::NotificationService::AllSources()); | 239 content::NotificationService::AllSources()); |
240 } | 240 } |
241 virtual ~ChromeLauncherControllerUserSwitchObserverChromeOS() { | 241 virtual ~ChromeLauncherControllerUserSwitchObserverChromeOS() { |
242 chromeos::UserManager::Get()->RemoveSessionStateObserver(this); | 242 chromeos::UserManager::Get()->RemoveSessionStateObserver(this); |
243 } | 243 } |
244 | 244 |
245 // chromeos::UserManager::UserSessionStateObserver overrides: | 245 // chromeos::UserManager::UserSessionStateObserver overrides: |
246 virtual void ActiveUserChanged(const chromeos::User* active_user) OVERRIDE; | |
247 virtual void UserAddedToSession(const chromeos::User* added_user) OVERRIDE; | 246 virtual void UserAddedToSession(const chromeos::User* added_user) OVERRIDE; |
248 | 247 |
249 // content::NotificationObserver overrides: | 248 // content::NotificationObserver overrides: |
250 virtual void Observe(int type, | 249 virtual void Observe(int type, |
251 const content::NotificationSource& source, | 250 const content::NotificationSource& source, |
252 const content::NotificationDetails& details) OVERRIDE; | 251 const content::NotificationDetails& details) OVERRIDE; |
253 | 252 |
254 private: | 253 private: |
255 // Add a user to the session. | 254 // Add a user to the session. |
256 void AddUser(Profile* profile); | 255 void AddUser(Profile* profile); |
257 | 256 |
258 // The owning ChromeLauncherController. | 257 // The owning ChromeLauncherController. |
259 ChromeLauncherController* controller_; | 258 ChromeLauncherController* controller_; |
260 | 259 |
261 // The notification registrar to track the Profile creations after a user got | 260 // The notification registrar to track the Profile creations after a user got |
262 // added to the session (if required). | 261 // added to the session (if required). |
263 content::NotificationRegistrar registrar_; | 262 content::NotificationRegistrar registrar_; |
264 | 263 |
265 // Users which were just added to the system, but which profiles were not yet | 264 // Users which were just added to the system, but which profiles were not yet |
266 // (fully) loaded. | 265 // (fully) loaded. |
267 std::set<std::string> added_user_ids_waiting_for_profiles_; | 266 std::set<std::string> added_user_ids_waiting_for_profiles_; |
268 | 267 |
269 DISALLOW_COPY_AND_ASSIGN(ChromeLauncherControllerUserSwitchObserverChromeOS); | 268 DISALLOW_COPY_AND_ASSIGN(ChromeLauncherControllerUserSwitchObserverChromeOS); |
270 }; | 269 }; |
271 | 270 |
272 void ChromeLauncherControllerUserSwitchObserverChromeOS::ActiveUserChanged( | |
273 const chromeos::User* active_user) { | |
274 const std::string& user_email = active_user->email(); | |
275 // Forward the OS specific event to the ChromeLauncherController. | |
276 controller_->ActiveUserChanged(user_email); | |
277 // TODO(skuhne): At the moment the login screen does the wallpaper management | |
278 // and wallpapers are not synchronized across multiple desktops. | |
279 if (chromeos::WallpaperManager::Get()) | |
280 chromeos::WallpaperManager::Get()->SetUserWallpaperDelayed(user_email); | |
281 } | |
282 | |
283 void ChromeLauncherControllerUserSwitchObserverChromeOS::UserAddedToSession( | 271 void ChromeLauncherControllerUserSwitchObserverChromeOS::UserAddedToSession( |
284 const chromeos::User* active_user) { | 272 const chromeos::User* active_user) { |
285 Profile* profile = multi_user_util::GetProfileFromUserID( | 273 Profile* profile = multi_user_util::GetProfileFromUserID( |
286 active_user->email()); | 274 active_user->email()); |
287 // If we do not have a profile yet, we postpone forwarding the notification | 275 // If we do not have a profile yet, we postpone forwarding the notification |
288 // until it is loaded. | 276 // until it is loaded. |
289 if (!profile) | 277 if (!profile) |
290 added_user_ids_waiting_for_profiles_.insert(active_user->email()); | 278 added_user_ids_waiting_for_profiles_.insert(active_user->email()); |
291 else | 279 else |
292 AddUser(profile); | 280 AddUser(profile); |
(...skipping 867 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1160 // Switch the running applications to the new user. | 1148 // Switch the running applications to the new user. |
1161 shell_window_controller_->ActiveUserChanged(user_email); | 1149 shell_window_controller_->ActiveUserChanged(user_email); |
1162 // Update the user specific shell properties from the new user profile. | 1150 // Update the user specific shell properties from the new user profile. |
1163 UpdateAppLaunchersFromPref(); | 1151 UpdateAppLaunchersFromPref(); |
1164 SetShelfAlignmentFromPrefs(); | 1152 SetShelfAlignmentFromPrefs(); |
1165 SetShelfAutoHideBehaviorFromPrefs(); | 1153 SetShelfAutoHideBehaviorFromPrefs(); |
1166 SetShelfBehaviorsFromPrefs(); | 1154 SetShelfBehaviorsFromPrefs(); |
1167 // Restore the order of running, but unpinned applications for the activated | 1155 // Restore the order of running, but unpinned applications for the activated |
1168 // user. | 1156 // user. |
1169 RestoreUnpinnedRunningApplicationOrder(user_email); | 1157 RestoreUnpinnedRunningApplicationOrder(user_email); |
| 1158 // Inform the system tray of the change. |
| 1159 ash::Shell::GetInstance()->system_tray_delegate()->ActiveUserWasChanged(); |
1170 } | 1160 } |
1171 | 1161 |
1172 void ChromeLauncherController::AdditionalUserAddedToSession(Profile* profile) { | 1162 void ChromeLauncherController::AdditionalUserAddedToSession(Profile* profile) { |
1173 // Switch the running applications to the new user. | 1163 // Switch the running applications to the new user. |
1174 shell_window_controller_->AdditionalUserAddedToSession(profile); | 1164 shell_window_controller_->AdditionalUserAddedToSession(profile); |
1175 } | 1165 } |
1176 | 1166 |
1177 void ChromeLauncherController::Observe( | 1167 void ChromeLauncherController::Observe( |
1178 int type, | 1168 int type, |
1179 const content::NotificationSource& source, | 1169 const content::NotificationSource& source, |
(...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1683 const char* value = NULL; | 1673 const char* value = NULL; |
1684 switch (behavior) { | 1674 switch (behavior) { |
1685 case ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS: | 1675 case ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS: |
1686 value = ash::kShelfAutoHideBehaviorAlways; | 1676 value = ash::kShelfAutoHideBehaviorAlways; |
1687 break; | 1677 break; |
1688 case ash::SHELF_AUTO_HIDE_BEHAVIOR_NEVER: | 1678 case ash::SHELF_AUTO_HIDE_BEHAVIOR_NEVER: |
1689 value = ash::kShelfAutoHideBehaviorNever; | 1679 value = ash::kShelfAutoHideBehaviorNever; |
1690 break; | 1680 break; |
1691 case ash::SHELF_AUTO_HIDE_ALWAYS_HIDDEN: | 1681 case ash::SHELF_AUTO_HIDE_ALWAYS_HIDDEN: |
1692 // This one should not be a valid preference option for now. We only want | 1682 // This one should not be a valid preference option for now. We only want |
1693 // to completely hide it when we run app mode. | 1683 // to completely hide it when we run in app mode - or while we temporarily |
1694 NOTREACHED(); | 1684 // hide the shelf as part of an animation (e.g. the multi user change). |
1695 return; | 1685 return; |
1696 } | 1686 } |
1697 | 1687 |
1698 UpdatePerDisplayPref( | 1688 UpdatePerDisplayPref( |
1699 profile_->GetPrefs(), root_window, prefs::kShelfAutoHideBehavior, value); | 1689 profile_->GetPrefs(), root_window, prefs::kShelfAutoHideBehavior, value); |
1700 | 1690 |
1701 if (root_window == ash::Shell::GetPrimaryRootWindow()) { | 1691 if (root_window == ash::Shell::GetPrimaryRootWindow()) { |
1702 // See comment in |kShelfAlignment| about why we have two prefs here. | 1692 // See comment in |kShelfAlignment| about why we have two prefs here. |
1703 profile_->GetPrefs()->SetString(prefs::kShelfAutoHideBehaviorLocal, value); | 1693 profile_->GetPrefs()->SetString(prefs::kShelfAutoHideBehaviorLocal, value); |
1704 profile_->GetPrefs()->SetString(prefs::kShelfAutoHideBehavior, value); | 1694 profile_->GetPrefs()->SetString(prefs::kShelfAutoHideBehavior, value); |
(...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2063 } | 2053 } |
2064 | 2054 |
2065 void ChromeLauncherController::ReleaseProfile() { | 2055 void ChromeLauncherController::ReleaseProfile() { |
2066 if (app_sync_ui_state_) | 2056 if (app_sync_ui_state_) |
2067 app_sync_ui_state_->RemoveObserver(this); | 2057 app_sync_ui_state_->RemoveObserver(this); |
2068 | 2058 |
2069 PrefServiceSyncable::FromProfile(profile_)->RemoveObserver(this); | 2059 PrefServiceSyncable::FromProfile(profile_)->RemoveObserver(this); |
2070 | 2060 |
2071 pref_change_registrar_.RemoveAll(); | 2061 pref_change_registrar_.RemoveAll(); |
2072 } | 2062 } |
OLD | NEW |