Chromium Code Reviews| Index: chrome/browser/chromeos/accessibility/magnification_manager.cc |
| diff --git a/chrome/browser/chromeos/accessibility/magnification_manager.cc b/chrome/browser/chromeos/accessibility/magnification_manager.cc |
| index 30519080d722aa042dda0d6582f0f27865858209..15bfea332e39e09d517c66974d228ee02970d479 100644 |
| --- a/chrome/browser/chromeos/accessibility/magnification_manager.cc |
| +++ b/chrome/browser/chromeos/accessibility/magnification_manager.cc |
| @@ -8,6 +8,7 @@ |
| #include "ash/magnifier/magnification_controller.h" |
| #include "ash/magnifier/partial_magnification_controller.h" |
| +#include "ash/session_state_delegate.h" |
| #include "ash/shell.h" |
| #include "ash/shell_delegate.h" |
| #include "ash/system/tray/system_tray_notifier.h" |
| @@ -35,7 +36,8 @@ static MagnificationManager* g_magnification_manager = NULL; |
| } |
| class MagnificationManagerImpl : public MagnificationManager, |
| - public content::NotificationObserver { |
| + public content::NotificationObserver, |
| + public ash::SessionStateObserver { |
| public: |
| MagnificationManagerImpl() |
| : first_time_update_(true), |
| @@ -44,7 +46,8 @@ class MagnificationManagerImpl : public MagnificationManager, |
| magnifier_type_pref_handler_(prefs::kScreenMagnifierType), |
| magnifier_scale_pref_handler_(prefs::kScreenMagnifierScale), |
| type_(ash::kDefaultMagnifierType), |
| - enabled_(false) { |
| + enabled_(false), |
| + session_state_observer_installed_(false) { |
| registrar_.Add(this, |
| chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE, |
| content::NotificationService::AllSources()); |
| @@ -58,6 +61,9 @@ class MagnificationManagerImpl : public MagnificationManager, |
| virtual ~MagnificationManagerImpl() { |
| CHECK(this == g_magnification_manager); |
| + if (session_state_observer_installed_) |
|
dmazzoni
2013/12/13 16:15:07
Nit: {}
Mr4D (OOO till 08-26)
2013/12/13 17:21:13
Done.
|
| + ash::Shell::GetInstance()->session_state_delegate()-> |
| + RemoveSessionStateObserver(this); |
| } |
| // MagnificationManager implimentation: |
| @@ -105,6 +111,11 @@ class MagnificationManagerImpl : public MagnificationManager, |
| SetProfile(profile); |
| } |
| + // SessionStateObserver overrides: |
| + virtual void ActiveUserChanged(const std::string& user_id) OVERRIDE { |
| + SetProfile(ProfileManager::GetActiveUserProfile()); |
| + } |
| + |
| private: |
| void SetProfile(Profile* profile) { |
| pref_change_registrar_.reset(); |
| @@ -209,6 +220,13 @@ class MagnificationManagerImpl : public MagnificationManager, |
| case chrome::NOTIFICATION_SESSION_STARTED: |
| // Update |profile_| when entering a session. |
| SetProfile(ProfileManager::GetDefaultProfile()); |
| + |
| + // Add a session state observer to be able to monitor session changes. |
| + if (!session_state_observer_installed_ && ash::Shell::HasInstance()) { |
| + session_state_observer_installed_ = true; |
| + ash::Shell::GetInstance()->session_state_delegate()-> |
| + AddSessionStateObserver(this); |
| + } |
| break; |
| case chrome::NOTIFICATION_PROFILE_DESTROYED: { |
| // Update |profile_| when exiting a session or shutting down. |
| @@ -229,6 +247,10 @@ class MagnificationManagerImpl : public MagnificationManager, |
| ash::MagnifierType type_; |
| bool enabled_; |
| + |
| + // True when the session state observer was installed. |
| + bool session_state_observer_installed_; |
| + |
| content::NotificationRegistrar registrar_; |
| scoped_ptr<PrefChangeRegistrar> pref_change_registrar_; |