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

Unified Diff: chrome/browser/chromeos/accessibility/magnification_manager.cc

Issue 11280287: Magnifier: Prevent useless operation in enabling/disabling magnifier. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years 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 side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698