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 56819a49185111854b35d3347b13cb7ddf6a0dbe..e5b84cc3cedc787959e47b2b354ffc073ab04207 100644 |
--- a/chrome/browser/chromeos/accessibility/magnification_manager.cc |
+++ b/chrome/browser/chromeos/accessibility/magnification_manager.cc |
@@ -27,10 +27,8 @@ namespace chromeos { |
class MagnificationManagerImpl : public MagnificationManager, |
public content::NotificationObserver { |
public: |
- MagnificationManagerImpl() { |
- DCHECK(!instance_); |
- instance_ = this; |
- |
+ MagnificationManagerImpl() : profile_(NULL), |
+ type_(ash::MAGNIFIER_OFF) { |
registrar_.Add(this, |
chrome::NOTIFICATION_SESSION_STARTED, |
content::NotificationService::AllSources()); |
@@ -40,18 +38,26 @@ class MagnificationManagerImpl : public MagnificationManager, |
registrar_.Add(this, |
chrome::NOTIFICATION_LOGIN_WEBUI_VISIBLE, |
content::NotificationService::AllSources()); |
+ } |
+ virtual void Initialize() OVERRIDE { |
Profile* profile = ProfileManager::GetDefaultProfileOrOffTheRecord(); |
SetProfile(profile); |
} |
- virtual ~MagnificationManagerImpl() {} |
+ |
+ virtual ~MagnificationManagerImpl() { |
+ } |
static MagnificationManagerImpl* GetInstance() { |
- return instance_; |
+ return Singleton<MagnificationManagerImpl>::get(); |
Daniel Erat
2012/12/04 01:06:36
the Singleton template causes more trouble than it
stevenjb
2012/12/04 01:35:34
I would agree. Specifically, this class has a Prof
yoshiki
2012/12/04 08:30:20
Thanks, I removed Singleton and and use Initialize
|
} |
// MagnificationManager implimentation: |
ash::MagnifierType GetMagnifierType() OVERRIDE { |
+ return type_; |
+ } |
+ |
+ ash::MagnifierType GetMagnifierTypeFromPref() { |
if (!profile_) |
return ash::MAGNIFIER_OFF; |
@@ -64,6 +70,11 @@ class MagnificationManagerImpl : public MagnificationManager, |
} |
void SetMagnifier(ash::MagnifierType type) OVERRIDE { |
+ if (type_ == type) |
+ return; |
+ |
+ type_ = type; |
+ |
PrefService* prefs = profile_->GetPrefs(); |
if (prefs) { |
std::string typeString = accessibility::ScreenMagnifierNameFromType(type); |
@@ -73,16 +84,28 @@ class MagnificationManagerImpl : public MagnificationManager, |
} |
} |
- ash::Shell::GetInstance()->system_tray_notifier()-> |
- NotifyAccessibilityModeChanged(); |
- |
ash::Shell::GetInstance()->magnification_controller()->SetEnabled( |
type == ash::MAGNIFIER_FULL); |
ash::Shell::GetInstance()->partial_magnification_controller()->SetEnabled( |
type == ash::MAGNIFIER_PARTIAL); |
+ |
+ NotifyMagnifierTypeChanged(type); |
+ } |
+ |
+ void AddObserver(MagnificationObserver* observer) OVERRIDE { |
+ observers_.AddObserver(observer); |
+ } |
+ |
+ void RemoveObserver(MagnificationObserver* observer) OVERRIDE { |
+ observers_.RemoveObserver(observer); |
} |
private: |
+ void NotifyMagnifierTypeChanged(ash::MagnifierType new_type) { |
+ FOR_EACH_OBSERVER(MagnificationObserver, observers_, |
+ OnMagnifierTypeChanged(new_type)); |
+ } |
+ |
void SetProfile(Profile* profile) { |
if (pref_change_registrar_) { |
pref_change_registrar_.reset(); |
@@ -108,11 +131,12 @@ class MagnificationManagerImpl : public MagnificationManager, |
} else if (manager && !manager->IsSessionStarted()) { |
SetMagnifier(ash::MAGNIFIER_FULL); |
} else { |
- ash::MagnifierType type = GetMagnifierType(); |
+ ash::MagnifierType type = GetMagnifierTypeFromPref(); |
SetMagnifier(type); |
} |
} |
+ // content::NotificationObserver implimentation: |
virtual void Observe(int type, |
const content::NotificationSource& source, |
const content::NotificationDetails& details) OVERRIDE { |
@@ -126,27 +150,19 @@ class MagnificationManagerImpl : public MagnificationManager, |
} |
} |
- static MagnificationManagerImpl* instance_; |
- |
Profile* profile_; |
+ ash::MagnifierType type_; |
content::NotificationRegistrar registrar_; |
scoped_ptr<PrefChangeRegistrar> pref_change_registrar_; |
+ ObserverList<MagnificationObserver> observers_; |
+ |
friend struct DefaultSingletonTraits<MagnificationManagerImpl>; |
DISALLOW_COPY_AND_ASSIGN(MagnificationManagerImpl); |
}; |
-MagnificationManagerImpl* MagnificationManagerImpl::instance_ = NULL; |
- |
MagnificationManager* MagnificationManager::GetInstance() { |
return MagnificationManagerImpl::GetInstance(); |
} |
-MagnificationManager* MagnificationManager::CreateInstance() { |
- // Makes sure that this is not called more than once. |
- CHECK(!GetInstance()); |
- |
- return new MagnificationManagerImpl(); |
-} |
- |
} // namespace chromeos |