summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser')
-rw-r--r--chrome/browser/chromeos/accessibility/accessibility_util.cc35
-rw-r--r--chrome/browser/chromeos/accessibility/accessibility_util.h16
-rw-r--r--chrome/browser/chromeos/accessibility/magnification_manager.cc132
-rw-r--r--chrome/browser/chromeos/accessibility/magnification_manager.h16
-rw-r--r--chrome/browser/chromeos/accessibility/magnification_manager_browsertest.cc396
-rw-r--r--chrome/browser/chromeos/preferences.cc8
-rw-r--r--chrome/browser/chromeos/preferences.h1
-rw-r--r--chrome/browser/chromeos/system/tray_accessibility_browsertest.cc53
-rw-r--r--chrome/browser/resources/options/browser_options.html4
-rw-r--r--chrome/browser/ui/ash/ash_init.cc10
-rw-r--r--chrome/browser/ui/ash/chrome_shell_delegate.cc22
-rw-r--r--chrome/browser/ui/ash/chrome_shell_delegate.h4
-rw-r--r--chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc8
-rw-r--r--chrome/browser/ui/webui/options/browser_options_handler.cc17
14 files changed, 483 insertions, 239 deletions
diff --git a/chrome/browser/chromeos/accessibility/accessibility_util.cc b/chrome/browser/chromeos/accessibility/accessibility_util.cc
index faa58f9..86778d6 100644
--- a/chrome/browser/chromeos/accessibility/accessibility_util.cc
+++ b/chrome/browser/chromeos/accessibility/accessibility_util.cc
@@ -50,10 +50,6 @@ using content::RenderViewHost;
namespace chromeos {
namespace accessibility {
-const char kScreenMagnifierOff[] = "";
-const char kScreenMagnifierFull[] = "full";
-const char kScreenMagnifierPartial[] = "partial";
-
// Helper class that directly loads an extension's content scripts into
// all of the frames corresponding to a given RenderViewHost.
class ContentScriptLoader {
@@ -123,10 +119,14 @@ void UpdateChromeOSAccessibilityHistograms() {
IsHighContrastEnabled());
UMA_HISTOGRAM_BOOLEAN("Accessibility.CrosVirtualKeyboard",
IsVirtualKeyboardEnabled());
- if (MagnificationManager::Get())
+ if (MagnificationManager::Get()) {
+ uint32 type = MagnificationManager::Get()->IsMagnifierEnabled() ?
+ MagnificationManager::Get()->GetMagnifierType() : 0;
+ // '0' means magnifier is disabled.
UMA_HISTOGRAM_ENUMERATION("Accessibility.CrosScreenMagnifier",
- MagnificationManager::Get()->GetMagnifierType(),
- 3);
+ type,
+ ash::kMaxMagnifierType + 1);
+ }
}
void Initialize() {
@@ -290,27 +290,6 @@ bool IsVirtualKeyboardEnabled() {
return virtual_keyboard_enabled;
}
-ash::MagnifierType MagnifierTypeFromName(const char type_name[]) {
- if (0 == strcmp(type_name, kScreenMagnifierFull))
- return ash::MAGNIFIER_FULL;
- else if (0 == strcmp(type_name, kScreenMagnifierPartial))
- return ash::MAGNIFIER_PARTIAL;
- else
- return ash::MAGNIFIER_OFF;
-}
-
-const char* ScreenMagnifierNameFromType(ash::MagnifierType type) {
- switch (type) {
- case ash::MAGNIFIER_OFF:
- return kScreenMagnifierOff;
- case ash::MAGNIFIER_FULL:
- return kScreenMagnifierFull;
- case ash::MAGNIFIER_PARTIAL:
- return kScreenMagnifierPartial;
- }
- return kScreenMagnifierOff;
-}
-
void MaybeSpeak(const std::string& utterance) {
if (IsSpokenFeedbackEnabled())
Speak(utterance);
diff --git a/chrome/browser/chromeos/accessibility/accessibility_util.h b/chrome/browser/chromeos/accessibility/accessibility_util.h
index e672b5d..e70d60d 100644
--- a/chrome/browser/chromeos/accessibility/accessibility_util.h
+++ b/chrome/browser/chromeos/accessibility/accessibility_util.h
@@ -24,9 +24,19 @@ struct AccessibilityStatusEventDetails {
AccessibilityStatusEventDetails(
bool enabled, ash::AccessibilityNotificationVisibility notify)
: enabled(enabled),
+ magnifier_type(ash::kDefaultMagnifierType),
+ notify(notify) {}
+
+ AccessibilityStatusEventDetails(
+ bool enabled,
+ ash::MagnifierType magnifier_type,
+ ash::AccessibilityNotificationVisibility notify)
+ : enabled(enabled),
+ magnifier_type(magnifier_type),
notify(notify) {}
bool enabled;
+ ash::MagnifierType magnifier_type;
ash::AccessibilityNotificationVisibility notify;
};
@@ -64,12 +74,6 @@ bool IsHighContrastEnabled();
// Returns true if the Virtual Keyboard is enabled, or false if not.
bool IsVirtualKeyboardEnabled();
-// Translates from a string to MagnifierType.
-ash::MagnifierType MagnifierTypeFromName(const char type_name[]);
-
-// Translates from a MagnifierType to type string.
-const char* ScreenMagnifierNameFromType(ash::MagnifierType type);
-
// Speaks the given text if the accessibility pref is already set.
void MaybeSpeak(const std::string& utterance);
diff --git a/chrome/browser/chromeos/accessibility/magnification_manager.cc b/chrome/browser/chromeos/accessibility/magnification_manager.cc
index 25d4879..38d4f9e 100644
--- a/chrome/browser/chromeos/accessibility/magnification_manager.cc
+++ b/chrome/browser/chromeos/accessibility/magnification_manager.cc
@@ -34,7 +34,8 @@ class MagnificationManagerImpl : public MagnificationManager,
public:
MagnificationManagerImpl() : first_time_update_(true),
profile_(NULL),
- type_(ash::MAGNIFIER_OFF) {
+ type_(ash::kDefaultMagnifierType),
+ enabled_(false) {
registrar_.Add(this,
chrome::NOTIFICATION_PROFILE_CREATED,
content::NotificationService::AllSources());
@@ -54,64 +55,114 @@ class MagnificationManagerImpl : public MagnificationManager,
}
// MagnificationManager implimentation:
- ash::MagnifierType GetMagnifierType() OVERRIDE {
+ bool IsMagnifierEnabled() const OVERRIDE {
+ return enabled_;
+ }
+
+ ash::MagnifierType GetMagnifierType() const OVERRIDE {
return type_;
}
- void SetMagnifier(ash::MagnifierType type) OVERRIDE {
- if (type == type_ && type == ash::MAGNIFIER_OFF)
+ void SetMagnifierEnabled(bool enabled) OVERRIDE {
+ // This method may be invoked even when the other magnifier settings (e.g.
+ // type or scale) are changed, so we need to call magnification controller
+ // even if |enabled| is unchanged. Only if |enabled| is false and the
+ // magnifier is already disabled, we are sure that we don't need to reflect
+ // the new settings right now because the magnifier keeps disabled.
+ if (!enabled && !enabled_)
return;
- type_ = type;
+ enabled_ = enabled;
if (profile_) {
PrefService* prefs = profile_->GetPrefs();
- if (prefs) {
- bool enabled = (type != ash::MAGNIFIER_OFF);
- if (enabled != prefs->GetBoolean(prefs::kScreenMagnifierEnabled)) {
- prefs->SetBoolean(prefs::kScreenMagnifierEnabled, enabled);
- prefs->CommitPendingWrite();
- }
+ DCHECK(prefs);
+ if (enabled != prefs->GetBoolean(prefs::kScreenMagnifierEnabled)) {
+ prefs->SetBoolean(prefs::kScreenMagnifierEnabled, enabled);
+ prefs->CommitPendingWrite();
}
}
- accessibility::AccessibilityStatusEventDetails details(
- type != ash::MAGNIFIER_OFF, ash::A11Y_NOTIFICATION_NONE);
- content::NotificationService::current()->Notify(
- chrome::NOTIFICATION_CROS_ACCESSIBILITY_TOGGLE_SCREEN_MAGNIFIER,
- content::NotificationService::AllSources(),
- content::Details<accessibility::AccessibilityStatusEventDetails>(
- &details));
-
- ash::Shell::GetInstance()->magnification_controller()->SetEnabled(
- type == ash::MAGNIFIER_FULL);
- ash::Shell::GetInstance()->partial_magnification_controller()->SetEnabled(
- type == ash::MAGNIFIER_PARTIAL);
+ NotifyMagnifierChanged();
+
+ if (type_ == ash::MAGNIFIER_FULL) {
+ ash::Shell::GetInstance()->magnification_controller()->SetEnabled(
+ enabled_);
+ } else {
+ ash::Shell::GetInstance()->partial_magnification_controller()->SetEnabled(
+ enabled_);
+ }
+ }
+
+ void SetMagnifierType(ash::MagnifierType type) OVERRIDE {
+ if (type_ == type)
+ return;
+
+ DCHECK(type == ash::MAGNIFIER_FULL || type == ash::MAGNIFIER_PARTIAL);
+ type_ = type;
+
+ if (profile_) {
+ PrefService* prefs = profile_->GetPrefs();
+ DCHECK(prefs);
+ prefs->SetInteger(prefs::kScreenMagnifierType, type);
+ prefs->CommitPendingWrite();
+ }
+
+ NotifyMagnifierChanged();
+
+ if (enabled_) {
+ ash::Shell::GetInstance()->magnification_controller()->SetEnabled(
+ type_ == ash::MAGNIFIER_FULL);
+ ash::Shell::GetInstance()->partial_magnification_controller()->SetEnabled(
+ type_ == ash::MAGNIFIER_PARTIAL);
+ }
}
void SaveScreenMagnifierScale(double scale) OVERRIDE {
Profile* profile = ProfileManager::GetDefaultProfileOrOffTheRecord();
+ DCHECK(profile->GetPrefs());
profile->GetPrefs()->SetDouble(prefs::kScreenMagnifierScale, scale);
}
- double GetSavedScreenMagnifierScale() OVERRIDE {
+ double GetSavedScreenMagnifierScale() const OVERRIDE {
Profile* profile = ProfileManager::GetDefaultProfileOrOffTheRecord();
+ DCHECK(profile->GetPrefs());
if (profile->GetPrefs()->HasPrefPath(prefs::kScreenMagnifierScale))
return profile->GetPrefs()->GetDouble(prefs::kScreenMagnifierScale);
return std::numeric_limits<double>::min();
}
private:
+ void NotifyMagnifierChanged() {
+ accessibility::AccessibilityStatusEventDetails details(
+ enabled_, type_, ash::A11Y_NOTIFICATION_NONE);
+ content::NotificationService::current()->Notify(
+ chrome::NOTIFICATION_CROS_ACCESSIBILITY_TOGGLE_SCREEN_MAGNIFIER,
+ content::NotificationService::AllSources(),
+ content::Details<accessibility::AccessibilityStatusEventDetails>(
+ &details));
+ }
+
+ bool IsMagnifierEnabledFromPref() {
+ if (!profile_)
+ return false;
+
+ DCHECK(profile_->GetPrefs());
+ return profile_->GetPrefs()->GetBoolean(prefs::kScreenMagnifierEnabled);
+ }
+
ash::MagnifierType GetMagnifierTypeFromPref() {
if (!profile_)
- return ash::MAGNIFIER_OFF;
+ return ash::kDefaultMagnifierType;
+
+ DCHECK(profile_->GetPrefs());
+ ash::MagnifierType type = static_cast<ash::MagnifierType>(
+ profile_->GetPrefs()->GetInteger(prefs::kScreenMagnifierType));
- PrefService* prefs = profile_->GetPrefs();
- if (!prefs)
- return ash::MAGNIFIER_OFF;
+ if (type == ash::MAGNIFIER_FULL || type == ash::MAGNIFIER_PARTIAL)
+ return type;
- return prefs->GetBoolean(prefs::kScreenMagnifierEnabled) ?
- ash::MAGNIFIER_FULL : ash::MAGNIFIER_OFF;
+ return ash::kDefaultMagnifierType;
}
void SetProfile(Profile* profile) {
@@ -124,17 +175,27 @@ class MagnificationManagerImpl : public MagnificationManager,
pref_change_registrar_->Init(profile->GetPrefs());
pref_change_registrar_->Add(
prefs::kScreenMagnifierEnabled,
- base::Bind(&MagnificationManagerImpl::UpdateMagnifierStatus,
+ base::Bind(&MagnificationManagerImpl::UpdateMagnifierStatusFromPref,
+ base::Unretained(this)));
+ pref_change_registrar_->Add(
+ prefs::kScreenMagnifierType,
+ base::Bind(&MagnificationManagerImpl::UpdateMagnifierStatusFromPref,
base::Unretained(this)));
}
profile_ = profile;
- UpdateMagnifierStatus();
+ UpdateMagnifierStatusFromPref();
}
- void UpdateMagnifierStatus() {
- ash::MagnifierType type = GetMagnifierTypeFromPref();
- SetMagnifier(type);
+ void UpdateMagnifierStatusFromPref() {
+ bool enabled = IsMagnifierEnabledFromPref();
+ if (!enabled) {
+ SetMagnifierEnabled(enabled);
+ SetMagnifierType(GetMagnifierTypeFromPref());
+ } else {
+ SetMagnifierType(GetMagnifierTypeFromPref());
+ SetMagnifierEnabled(enabled);
+ }
}
// content::NotificationObserver implimentation:
@@ -168,6 +229,7 @@ class MagnificationManagerImpl : public MagnificationManager,
bool first_time_update_;
Profile* profile_;
ash::MagnifierType type_;
+ bool enabled_;
content::NotificationRegistrar registrar_;
scoped_ptr<PrefChangeRegistrar> pref_change_registrar_;
diff --git a/chrome/browser/chromeos/accessibility/magnification_manager.h b/chrome/browser/chromeos/accessibility/magnification_manager.h
index 680b7fc..f323e0a 100644
--- a/chrome/browser/chromeos/accessibility/magnification_manager.h
+++ b/chrome/browser/chromeos/accessibility/magnification_manager.h
@@ -24,20 +24,30 @@ class MagnificationManager {
// Returns the existing instance. If there is no instance, creates one.
// because only one instance should exist at the same time.
static void Initialize();
+
// Deletes the existing instance of MagnificationManager.
static void Shutdown();
+
// Returns the existing instance. If there is no instance, returns NULL.
static MagnificationManager* Get();
+ // Returns if the screen magnifier is enabled.
+ virtual bool IsMagnifierEnabled() const = 0;
+
// Returns the current type of the screen magnifier.
- virtual ash::MagnifierType GetMagnifierType() = 0;
+ virtual ash::MagnifierType GetMagnifierType() const = 0;
+
+ // Enables the screen magnifier.
+ virtual void SetMagnifierEnabled(bool enabled) = 0;
+
// Changes the type of the screen magnifier.
- virtual void SetMagnifier(ash::MagnifierType type) = 0;
+ virtual void SetMagnifierType(ash::MagnifierType type) = 0;
// Saves the magnifier scale to the pref.
virtual void SaveScreenMagnifierScale(double scale) = 0;
+
// Loads the magnifier scale from the pref.
- virtual double GetSavedScreenMagnifierScale() = 0;
+ virtual double GetSavedScreenMagnifierScale() const = 0;
protected:
virtual ~MagnificationManager() {}
diff --git a/chrome/browser/chromeos/accessibility/magnification_manager_browsertest.cc b/chrome/browser/chromeos/accessibility/magnification_manager_browsertest.cc
index 6a1a89a..c99202a 100644
--- a/chrome/browser/chromeos/accessibility/magnification_manager_browsertest.cc
+++ b/chrome/browser/chromeos/accessibility/magnification_manager_browsertest.cc
@@ -24,11 +24,67 @@
namespace chromeos {
+namespace {
+
+void SetMagnifierEnabled(bool enabled) {
+ MagnificationManager::Get()->SetMagnifierEnabled(enabled);
+}
+
+void SetMagnifierType(ash::MagnifierType type) {
+ MagnificationManager::Get()->SetMagnifierType(type);
+}
+
+void SetFullScreenMagnifierScale(double scale) {
+ ash::Shell::GetInstance()->
+ magnification_controller()->SetScale(scale, false);
+}
+
+double GetFullScreenMagnifierScale() {
+ return ash::Shell::GetInstance()->magnification_controller()->GetScale();
+}
+
+void SetSavedFullScreenMagnifierScale(double scale) {
+ MagnificationManager::Get()->SaveScreenMagnifierScale(scale);
+}
+
+double GetSavedFullScreenMagnifierScale() {
+ return MagnificationManager::Get()->GetSavedScreenMagnifierScale();
+}
+
+ash::MagnifierType GetMagnifierType() {
+ return MagnificationManager::Get()->GetMagnifierType();
+}
+
+bool IsMagnifierEnabled() {
+ return MagnificationManager::Get()->IsMagnifierEnabled();
+}
+
+Profile* profile() {
+ Profile* profile = ProfileManager::GetDefaultProfileOrOffTheRecord();
+ DCHECK(profile);
+ return profile;
+}
+
+PrefServiceBase* prefs() {
+ return PrefServiceBase::FromBrowserContext(profile());
+}
+
+void EnableScreenManagnifierToPref(bool enabled) {
+ prefs()->SetBoolean(prefs::kScreenMagnifierEnabled, enabled);
+}
+
+void SetScreenManagnifierTypeToPref(ash::MagnifierType type) {
+ prefs()->SetInteger(prefs::kScreenMagnifierType, type);
+}
+
+} // anonymouse namespace
+
class MagnificationManagerTest : public CrosInProcessBrowserTest,
public content::NotificationObserver {
protected:
MagnificationManagerTest() : observed_(false),
- observed_type_(ash::MAGNIFIER_OFF) {}
+ observed_enabled_(false),
+ observed_type_(ash::kDefaultMagnifierType) {}
virtual ~MagnificationManagerTest() {}
virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
@@ -37,16 +93,6 @@ class MagnificationManagerTest : public CrosInProcessBrowserTest,
TestingProfile::kTestUserProfileDir);
}
- Profile* profile() {
- Profile* profile = ProfileManager::GetDefaultProfileOrOffTheRecord();
- DCHECK(profile);
- return profile;
- }
-
- PrefServiceBase* prefs() {
- return PrefServiceBase::FromBrowserContext(profile());
- }
-
virtual void SetUpOnMainThread() OVERRIDE {
registrar_.Add(
this,
@@ -54,37 +100,6 @@ class MagnificationManagerTest : public CrosInProcessBrowserTest,
content::NotificationService::AllSources());
}
- void SetScreenManagnifierType(ash::MagnifierType type) {
- MagnificationManager::Get()->SetMagnifier(type);
- }
-
- void SetScreenManagnifierTypeToPref(ash::MagnifierType type) {
- prefs()->SetBoolean(prefs::kScreenMagnifierEnabled,
- (type != ash::MAGNIFIER_OFF) ? true : false);
- }
-
- void SetFullScreenMagnifierScale(double scale) {
- ash::Shell::GetInstance()->
- magnification_controller()->SetScale(scale, false);
- }
-
- double GetFullScreenMagnifierScale() {
- return ash::Shell::GetInstance()->magnification_controller()->GetScale();
- }
-
- void SetSavedFullScreenMagnifierScale(double scale) {
- MagnificationManager::Get()->SaveScreenMagnifierScale(scale);
- }
-
- double GetSavedFullScreenMagnifierScale() {
- return MagnificationManager::Get()->GetSavedScreenMagnifierScale();
- }
-
- void CheckCurrentMagnifierType(
- ash::MagnifierType type) {
- EXPECT_EQ(MagnificationManager::Get()->GetMagnifierType(), type);
- }
-
// content::NotificationObserver implementation.
virtual void Observe(int type,
const content::NotificationSource& source,
@@ -96,14 +111,15 @@ class MagnificationManagerTest : public CrosInProcessBrowserTest,
details).ptr();
observed_ = true;
- observed_type_ = accessibility_status->enabled ? ash::MAGNIFIER_FULL :
- ash::MAGNIFIER_OFF;
+ observed_enabled_ = accessibility_status->enabled;
+ observed_type_ = accessibility_status->magnifier_type;
break;
}
}
}
bool observed_;
+ bool observed_enabled_;
ash::MagnifierType observed_type_;
content::NotificationRegistrar registrar_;
DISALLOW_COPY_AND_ASSIGN(MagnificationManagerTest);
@@ -111,121 +127,200 @@ class MagnificationManagerTest : public CrosInProcessBrowserTest,
IN_PROC_BROWSER_TEST_F(MagnificationManagerTest, LoginOffToOff) {
// Confirms that magnifier is disabled on the login screen.
- CheckCurrentMagnifierType(ash::MAGNIFIER_OFF);
+ EXPECT_FALSE(IsMagnifierEnabled());
// Logs in.
UserManager::Get()->UserLoggedIn("owner@invalid.domain", true);
// Confirms that magnifier is still disabled just after login.
- CheckCurrentMagnifierType(ash::MAGNIFIER_OFF);
+ EXPECT_FALSE(IsMagnifierEnabled());
UserManager::Get()->SessionStarted();
// Confirms that magnifier is still disabled just after login.
- CheckCurrentMagnifierType(ash::MAGNIFIER_OFF);
+ EXPECT_FALSE(IsMagnifierEnabled());
// Enables magnifier.
- SetScreenManagnifierType(ash::MAGNIFIER_FULL);
+ SetMagnifierEnabled(true);
// Confirms that magnifier is enabled.
- CheckCurrentMagnifierType(ash::MAGNIFIER_FULL);
+ EXPECT_TRUE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_FULL, GetMagnifierType());
}
IN_PROC_BROWSER_TEST_F(MagnificationManagerTest, LoginFullToOff) {
// Confirms that magnifier is disabled on the login screen.
- CheckCurrentMagnifierType(ash::MAGNIFIER_OFF);
+ EXPECT_FALSE(IsMagnifierEnabled());
// Enables magnifier on login scren.
- SetScreenManagnifierType(ash::MAGNIFIER_FULL);
+ SetMagnifierEnabled(true);
// Logs in (but the session is not started yet).
UserManager::Get()->UserLoggedIn("owner@invalid.domain", true);
// Confirms that magnifier is keeping enabled.
- CheckCurrentMagnifierType(ash::MAGNIFIER_FULL);
+ EXPECT_TRUE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_FULL, GetMagnifierType());
UserManager::Get()->SessionStarted();
// Confirms that magnifier is disabled just after login.
- CheckCurrentMagnifierType(ash::MAGNIFIER_OFF);
+ EXPECT_FALSE(IsMagnifierEnabled());
}
IN_PROC_BROWSER_TEST_F(MagnificationManagerTest, LoginOffToFull) {
// Changes to full screen magnifier again and confirms that.
- SetScreenManagnifierType(ash::MAGNIFIER_OFF);
- CheckCurrentMagnifierType(ash::MAGNIFIER_OFF);
+ SetMagnifierEnabled(false);
+ EXPECT_FALSE(IsMagnifierEnabled());
// Logs in (but the session is not started yet).
UserManager::Get()->UserLoggedIn("owner@invalid.domain", true);
// Confirms that magnifier is keeping disabled.
- CheckCurrentMagnifierType(ash::MAGNIFIER_OFF);
+ EXPECT_FALSE(IsMagnifierEnabled());
// Enable magnifier on the pref.
+ EnableScreenManagnifierToPref(true);
SetScreenManagnifierTypeToPref(ash::MAGNIFIER_FULL);
SetSavedFullScreenMagnifierScale(2.5);
UserManager::Get()->SessionStarted();
// Confirms that the prefs are successfully loaded.
- CheckCurrentMagnifierType(ash::MAGNIFIER_FULL);
+ EXPECT_TRUE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_FULL, GetMagnifierType());
EXPECT_EQ(2.5, GetFullScreenMagnifierScale());
}
+IN_PROC_BROWSER_TEST_F(MagnificationManagerTest, LoginOffToPartial) {
+ // Changes to full screen magnifier again and confirms that.
+ SetMagnifierEnabled(false);
+ EXPECT_FALSE(IsMagnifierEnabled());
+
+ // Logs in (but the session is not started yet).
+ UserManager::Get()->UserLoggedIn("owner@invalid.domain", true);
+
+ // Confirms that magnifier is keeping disabled.
+ EXPECT_FALSE(IsMagnifierEnabled());
+ // Enable magnifier on the pref.
+ EnableScreenManagnifierToPref(true);
+ SetScreenManagnifierTypeToPref(ash::MAGNIFIER_PARTIAL);
+
+ UserManager::Get()->SessionStarted();
+
+ // Confirms that the prefs are successfully loaded.
+ EXPECT_TRUE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_PARTIAL, GetMagnifierType());
+
+ // Full screen magnifier scale is 1.0x since it's 'partial' magnifier.
+ EXPECT_EQ(1.0, GetFullScreenMagnifierScale());
+}
+
IN_PROC_BROWSER_TEST_F(MagnificationManagerTest, LoginFullToFull) {
// Changes to full screen magnifier again and confirms that.
- SetScreenManagnifierType(ash::MAGNIFIER_FULL);
- CheckCurrentMagnifierType(ash::MAGNIFIER_FULL);
+ SetMagnifierType(ash::MAGNIFIER_FULL);
+ SetMagnifierEnabled(true);
+ EXPECT_TRUE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_FULL, GetMagnifierType());
// Logs in (but the session is not started yet).
UserManager::Get()->UserLoggedIn("owner@invalid.domain", true);
// Confirms that magnifier is keeping enabled.
- CheckCurrentMagnifierType(ash::MAGNIFIER_FULL);
+ EXPECT_TRUE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_FULL, GetMagnifierType());
// Enable magnifier on the pref.
+ EnableScreenManagnifierToPref(true);
SetScreenManagnifierTypeToPref(ash::MAGNIFIER_FULL);
SetSavedFullScreenMagnifierScale(2.5);
UserManager::Get()->SessionStarted();
// Confirms that the prefs are successfully loaded.
- CheckCurrentMagnifierType(ash::MAGNIFIER_FULL);
+ EXPECT_TRUE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_FULL, GetMagnifierType());
EXPECT_EQ(2.5, GetFullScreenMagnifierScale());
}
-IN_PROC_BROWSER_TEST_F(MagnificationManagerTest, ChangeMagnifierType) {
- // Changes to full screen magnifier and confirms that.
- SetScreenManagnifierType(ash::MAGNIFIER_FULL);
- CheckCurrentMagnifierType(ash::MAGNIFIER_FULL);
-
- // Changes to partial screen magnifier and confirms that.
- SetScreenManagnifierType(ash::MAGNIFIER_PARTIAL);
- CheckCurrentMagnifierType(ash::MAGNIFIER_PARTIAL);
-
- // Disable magnifier and confirms that.
- SetScreenManagnifierType(ash::MAGNIFIER_OFF);
- CheckCurrentMagnifierType(ash::MAGNIFIER_OFF);
-
+IN_PROC_BROWSER_TEST_F(MagnificationManagerTest, LoginFullToPartial) {
// Changes to full screen magnifier again and confirms that.
- SetScreenManagnifierType(ash::MAGNIFIER_FULL);
- CheckCurrentMagnifierType(ash::MAGNIFIER_FULL);
+ SetMagnifierType(ash::MAGNIFIER_FULL);
+ SetMagnifierEnabled(true);
+ EXPECT_TRUE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_FULL, GetMagnifierType());
- // Logs in
+ // Logs in (but the session is not started yet).
UserManager::Get()->UserLoggedIn("owner@invalid.domain", true);
- UserManager::Get()->SessionStarted();
- // Changes to full screen magnifier and confirms that.
- SetScreenManagnifierType(ash::MAGNIFIER_FULL);
- CheckCurrentMagnifierType(ash::MAGNIFIER_FULL);
+ // Confirms that magnifier is keeping enabled.
+ EXPECT_TRUE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_FULL, GetMagnifierType());
+ // Enable magnifier on the pref.
+ EnableScreenManagnifierToPref(true);
+ SetScreenManagnifierTypeToPref(ash::MAGNIFIER_PARTIAL);
- // Changes to partial screen magnifier and confirms that.
- SetScreenManagnifierType(ash::MAGNIFIER_PARTIAL);
- CheckCurrentMagnifierType(ash::MAGNIFIER_PARTIAL);
+ UserManager::Get()->SessionStarted();
- // Disable magnifier and confirms that.
- SetScreenManagnifierType(ash::MAGNIFIER_OFF);
- CheckCurrentMagnifierType(ash::MAGNIFIER_OFF);
+ // Confirms that the prefs are successfully loaded.
+ EXPECT_TRUE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_PARTIAL, GetMagnifierType());
- // Changes to full screen magnifier again and confirms that.
- SetScreenManagnifierType(ash::MAGNIFIER_FULL);
- CheckCurrentMagnifierType(ash::MAGNIFIER_FULL);
+ // Full screen magnifier scale is 1.0x since it's 'partial' magnifier.
+ EXPECT_EQ(1.0, GetFullScreenMagnifierScale());
+}
+
+IN_PROC_BROWSER_TEST_F(MagnificationManagerTest, ChangeMagnifierType) {
+ // Enables/disables full screen magnifier.
+ SetMagnifierEnabled(false);
+ SetMagnifierType(ash::MAGNIFIER_FULL);
+ EXPECT_FALSE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_FULL, GetMagnifierType());
+
+ SetMagnifierEnabled(true);
+ EXPECT_TRUE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_FULL, GetMagnifierType());
+
+ SetMagnifierEnabled(false);
+ EXPECT_FALSE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_FULL, GetMagnifierType());
+
+ // Enables/disables partial screen magnifier.
+ SetMagnifierType(ash::MAGNIFIER_PARTIAL);
+ EXPECT_FALSE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_PARTIAL, GetMagnifierType());
+
+ SetMagnifierEnabled(true);
+ EXPECT_TRUE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_PARTIAL, GetMagnifierType());
+
+ SetMagnifierEnabled(false);
+ EXPECT_FALSE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_PARTIAL, GetMagnifierType());
+
+ // Changes the magnifier type when the magnifier is enabled.
+ SetMagnifierType(ash::MAGNIFIER_FULL);
+ SetMagnifierEnabled(true);
+ EXPECT_TRUE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_FULL, GetMagnifierType());
+
+ SetMagnifierType(ash::MAGNIFIER_PARTIAL);
+ EXPECT_TRUE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_PARTIAL, GetMagnifierType());
+
+ SetMagnifierType(ash::MAGNIFIER_FULL);
+ EXPECT_TRUE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_FULL, GetMagnifierType());
+
+ // Changes the magnifier type when the magnifier is disabled.
+ SetMagnifierEnabled(false);
+ SetMagnifierType(ash::MAGNIFIER_FULL);
+ EXPECT_FALSE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_FULL, GetMagnifierType());
+
+ SetMagnifierType(ash::MAGNIFIER_PARTIAL);
+ EXPECT_FALSE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_PARTIAL, GetMagnifierType());
+
+ SetMagnifierType(ash::MAGNIFIER_FULL);
+ EXPECT_FALSE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_FULL, GetMagnifierType());
}
IN_PROC_BROWSER_TEST_F(MagnificationManagerTest, TypePref) {
@@ -234,48 +329,75 @@ IN_PROC_BROWSER_TEST_F(MagnificationManagerTest, TypePref) {
UserManager::Get()->SessionStarted();
// Confirms that magnifier is disabled just after login.
- CheckCurrentMagnifierType(ash::MAGNIFIER_OFF);
+ EXPECT_FALSE(IsMagnifierEnabled());
// Sets the pref as true to enable magnifier.
SetScreenManagnifierTypeToPref(ash::MAGNIFIER_FULL);
+ EnableScreenManagnifierToPref(true);
// Confirms that magnifier is enabled.
- CheckCurrentMagnifierType(ash::MAGNIFIER_FULL);
+ EXPECT_TRUE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_FULL, GetMagnifierType());
+
+ SetScreenManagnifierTypeToPref(ash::MAGNIFIER_PARTIAL);
+ EXPECT_TRUE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_PARTIAL, GetMagnifierType());
// Sets the pref as false to disabled magnifier.
- SetScreenManagnifierTypeToPref(ash::MAGNIFIER_OFF);
+ EnableScreenManagnifierToPref(false);
// Confirms that magnifier is disabled.
- CheckCurrentMagnifierType(ash::MAGNIFIER_OFF);
+ EXPECT_FALSE(IsMagnifierEnabled());
// Sets the pref as true to enable magnifier again.
- SetScreenManagnifierTypeToPref(ash::MAGNIFIER_FULL);
+ EnableScreenManagnifierToPref(true);
// Confirms that magnifier is enabled.
- CheckCurrentMagnifierType(ash::MAGNIFIER_FULL);
+ EXPECT_TRUE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_PARTIAL, GetMagnifierType());
}
-IN_PROC_BROWSER_TEST_F(MagnificationManagerTest, ResumeSavedTypePref) {
+IN_PROC_BROWSER_TEST_F(MagnificationManagerTest, ResumeSavedTypeFullPref) {
// Loads the profile of the user.
UserManager::Get()->UserLoggedIn("owner@invalid.domain", true);
// Sets the pref as true to enable magnifier before login.
+ EnableScreenManagnifierToPref(true);
SetScreenManagnifierTypeToPref(ash::MAGNIFIER_FULL);
// Logs in.
UserManager::Get()->SessionStarted();
// Confirms that magnifier is enabled just after login.
- CheckCurrentMagnifierType(ash::MAGNIFIER_FULL);
+ EXPECT_TRUE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_FULL, GetMagnifierType());
+}
+
+IN_PROC_BROWSER_TEST_F(MagnificationManagerTest, ResumeSavedTypePartialPref) {
+ // Loads the profile of the user.
+ UserManager::Get()->UserLoggedIn("owner@invalid.domain", true);
+
+ // Sets the pref as true to enable magnifier before login.
+ EnableScreenManagnifierToPref(true);
+ SetScreenManagnifierTypeToPref(ash::MAGNIFIER_PARTIAL);
+
+ // Logs in.
+ UserManager::Get()->SessionStarted();
+
+ // Confirms that magnifier is enabled just after login.
+ EXPECT_TRUE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_PARTIAL, GetMagnifierType());
}
IN_PROC_BROWSER_TEST_F(MagnificationManagerTest, ScalePref) {
- SetScreenManagnifierType(ash::MAGNIFIER_OFF);
- CheckCurrentMagnifierType(ash::MAGNIFIER_OFF);
+ SetMagnifierEnabled(false);
+ EXPECT_FALSE(IsMagnifierEnabled());
// Sets 2.5x to the pref.
SetSavedFullScreenMagnifierScale(2.5);
// Enables full screen magnifier.
- SetScreenManagnifierType(ash::MAGNIFIER_FULL);
- CheckCurrentMagnifierType(ash::MAGNIFIER_FULL);
+ SetMagnifierType(ash::MAGNIFIER_FULL);
+ SetMagnifierEnabled(true);
+ EXPECT_TRUE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_FULL, GetMagnifierType());
// Confirms that 2.5x is restored.
EXPECT_EQ(2.5, GetFullScreenMagnifierScale());
@@ -286,30 +408,33 @@ IN_PROC_BROWSER_TEST_F(MagnificationManagerTest, ScalePref) {
}
IN_PROC_BROWSER_TEST_F(MagnificationManagerTest, InvalidScalePref) {
- // TEST 1: too small scale
- SetScreenManagnifierType(ash::MAGNIFIER_OFF);
- CheckCurrentMagnifierType(ash::MAGNIFIER_OFF);
+ // TEST 1: Sets too small scale
+ SetMagnifierEnabled(false);
+ EXPECT_FALSE(IsMagnifierEnabled());
// Sets too small value to the pref.
SetSavedFullScreenMagnifierScale(0.5);
// Enables full screen magnifier.
- SetScreenManagnifierType(ash::MAGNIFIER_FULL);
- CheckCurrentMagnifierType(ash::MAGNIFIER_FULL);
+ SetMagnifierType(ash::MAGNIFIER_FULL);
+ SetMagnifierEnabled(true);
+ EXPECT_TRUE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_FULL, GetMagnifierType());
// Confirms that the actual scale is set to the minimum scale.
EXPECT_EQ(1.0, GetFullScreenMagnifierScale());
- // TEST 2: too large scale
- SetScreenManagnifierType(ash::MAGNIFIER_OFF);
- CheckCurrentMagnifierType(ash::MAGNIFIER_OFF);
+ // TEST 2: Sets too large scale
+ SetMagnifierEnabled(false);
+ EXPECT_FALSE(IsMagnifierEnabled());
// Sets too large value to the pref.
SetSavedFullScreenMagnifierScale(50.0);
// Enables full screen magnifier.
- SetScreenManagnifierType(ash::MAGNIFIER_FULL);
- CheckCurrentMagnifierType(ash::MAGNIFIER_FULL);
+ SetMagnifierEnabled(true);
+ EXPECT_TRUE(IsMagnifierEnabled());
+ EXPECT_EQ(ash::MAGNIFIER_FULL, GetMagnifierType());
// Confirms that the actual scale is set to the maximum scale.
EXPECT_EQ(4.0, GetFullScreenMagnifierScale());
@@ -321,30 +446,53 @@ IN_PROC_BROWSER_TEST_F(MagnificationManagerTest,
UserManager::Get()->UserLoggedIn("owner@invalid.domain", true);
UserManager::Get()->SessionStarted();
- // Before the test, sets to full magnifier.
- SetScreenManagnifierTypeToPref(ash::MAGNIFIER_FULL);
- CheckCurrentMagnifierType(ash::MAGNIFIER_FULL);
+ // Enable magnifier (without type)
+ EnableScreenManagnifierToPref(true);
+ EXPECT_TRUE(observed_);
// Disables magnifier and confirms observer is invoked.
observed_ = false;
- SetScreenManagnifierTypeToPref(ash::MAGNIFIER_OFF);
+ SetMagnifierEnabled(false);
EXPECT_TRUE(observed_);
- EXPECT_EQ(observed_type_, ash::MAGNIFIER_OFF);
- CheckCurrentMagnifierType(ash::MAGNIFIER_OFF);
+
+ // Disables magnifier again and confirms observer is not invoked.
+ observed_ = false;
+ SetMagnifierEnabled(false);
+ EXPECT_FALSE(observed_);
// Enables full screen magnifier and confirms observer is invoked.
observed_ = false;
- SetScreenManagnifierTypeToPref(ash::MAGNIFIER_FULL);
+ SetMagnifierType(ash::MAGNIFIER_FULL);
+ SetMagnifierEnabled(true);
+ EXPECT_TRUE(observed_);
+
+ // Enables full screen magnifier again and confirms observer is invoked.
+ observed_ = false;
+ SetMagnifierEnabled(true);
+ EXPECT_TRUE(observed_);
+ EXPECT_TRUE(observed_enabled_);
+ EXPECT_EQ(ash::MAGNIFIER_FULL, observed_type_);
+
+ // Switches to partial screen magnifier and confirms observer is invoked.
+ observed_ = false;
+ SetMagnifierType(ash::MAGNIFIER_PARTIAL);
+ EXPECT_TRUE(observed_);
+ EXPECT_TRUE(observed_enabled_);
+ EXPECT_EQ(ash::MAGNIFIER_PARTIAL, observed_type_);
+
+ // Switches to partial screen magnifier and confirms observer is invoked.
+ observed_ = false;
+ SetMagnifierType(ash::MAGNIFIER_FULL);
EXPECT_TRUE(observed_);
- EXPECT_EQ(observed_type_, ash::MAGNIFIER_FULL);
- CheckCurrentMagnifierType(ash::MAGNIFIER_FULL);
+ EXPECT_TRUE(observed_enabled_);
+ EXPECT_EQ(ash::MAGNIFIER_FULL, observed_type_);
// Disables magnifier again and confirms observer is invoked.
observed_ = false;
- SetScreenManagnifierTypeToPref(ash::MAGNIFIER_OFF);
+ SetMagnifierEnabled(false);
EXPECT_TRUE(observed_);
- EXPECT_EQ(observed_type_, ash::MAGNIFIER_OFF);
- CheckCurrentMagnifierType(ash::MAGNIFIER_OFF);
+ EXPECT_FALSE(observed_enabled_);
+ EXPECT_FALSE(IsMagnifierEnabled());
}
} // namespace chromeos
diff --git a/chrome/browser/chromeos/preferences.cc b/chrome/browser/chromeos/preferences.cc
index 8ee9f98..5aa9e7f 100644
--- a/chrome/browser/chromeos/preferences.cc
+++ b/chrome/browser/chromeos/preferences.cc
@@ -4,6 +4,7 @@
#include "chrome/browser/chromeos/preferences.h"
+#include "ash/magnifier/magnifier_constants.h"
#include "base/chromeos/chromeos_version.h"
#include "base/command_line.h"
#include "base/i18n/time_formatting.h"
@@ -13,6 +14,7 @@
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/browser_process.h"
+#include "chrome/browser/chromeos/accessibility/magnification_manager.h"
#include "chrome/browser/chromeos/drive/drive_file_system_util.h"
#include "chrome/browser/chromeos/input_method/input_method_configuration.h"
#include "chrome/browser/chromeos/input_method/input_method_manager.h"
@@ -114,6 +116,9 @@ void Preferences::RegisterUserPrefs(PrefServiceSyncable* prefs) {
prefs->RegisterBooleanPref(prefs::kScreenMagnifierEnabled,
false,
PrefServiceSyncable::SYNCABLE_PREF);
+ prefs->RegisterIntegerPref(prefs::kScreenMagnifierType,
+ ash::kDefaultMagnifierType,
+ PrefServiceSyncable::SYNCABLE_PREF);
prefs->RegisterDoublePref(prefs::kScreenMagnifierScale,
std::numeric_limits<double>::min(),
PrefServiceSyncable::UNSYNCABLE_PREF);
@@ -304,13 +309,14 @@ void Preferences::InitUserPrefs(PrefServiceSyncable* prefs) {
accessibility_enabled_.Init(prefs::kSpokenFeedbackEnabled, prefs, callback);
screen_magnifier_enabled_.Init(prefs::kScreenMagnifierEnabled,
prefs, callback);
+ screen_magnifier_type_.Init(prefs::kScreenMagnifierType, prefs, callback);
screen_magnifier_scale_.Init(prefs::kScreenMagnifierScale, prefs, callback);
mouse_sensitivity_.Init(prefs::kMouseSensitivity, prefs, callback);
touchpad_sensitivity_.Init(prefs::kTouchpadSensitivity, prefs, callback);
use_24hour_clock_.Init(prefs::kUse24HourClock, prefs, callback);
disable_drive_.Init(prefs::kDisableDrive, prefs, callback);
disable_drive_over_cellular_.Init(prefs::kDisableDriveOverCellular,
- prefs, callback);
+ prefs, callback);
disable_drive_hosted_files_.Init(prefs::kDisableDriveHostedFiles,
prefs, callback);
download_default_directory_.Init(prefs::kDownloadDefaultDirectory,
diff --git a/chrome/browser/chromeos/preferences.h b/chrome/browser/chromeos/preferences.h
index d00b66e..cb18e44 100644
--- a/chrome/browser/chromeos/preferences.h
+++ b/chrome/browser/chromeos/preferences.h
@@ -111,6 +111,7 @@ class Preferences : public PrefServiceObserver {
BooleanPrefMember vert_edge_scroll_enabled_;
BooleanPrefMember accessibility_enabled_;
BooleanPrefMember screen_magnifier_enabled_;
+ IntegerPrefMember screen_magnifier_type_;
DoublePrefMember screen_magnifier_scale_;
IntegerPrefMember speed_factor_;
IntegerPrefMember mouse_sensitivity_;
diff --git a/chrome/browser/chromeos/system/tray_accessibility_browsertest.cc b/chrome/browser/chromeos/system/tray_accessibility_browsertest.cc
index 220d928..23adfd6 100644
--- a/chrome/browser/chromeos/system/tray_accessibility_browsertest.cc
+++ b/chrome/browser/chromeos/system/tray_accessibility_browsertest.cc
@@ -30,8 +30,8 @@
namespace chromeos {
-namespace {
- ui::MouseEvent& dummyEvent = *((ui::MouseEvent*)0);
+void SetMagnifierEnabled(bool enabled) {
+ MagnificationManager::Get()->SetMagnifierEnabled(enabled);
}
class TrayAccessibilityTest : public CrosInProcessBrowserTest {
@@ -150,13 +150,13 @@ IN_PROC_BROWSER_TEST_F(TrayAccessibilityTest, ShowTrayIcon) {
EXPECT_FALSE(IsTrayIconVisible());
// Toggling magnifier the visibillity of the icon.
- MagnificationManager::Get()->SetMagnifier(ash::MAGNIFIER_FULL);
+ SetMagnifierEnabled(true);
EXPECT_TRUE(IsTrayIconVisible());
- MagnificationManager::Get()->SetMagnifier(ash::MAGNIFIER_OFF);
+ SetMagnifierEnabled(false);
EXPECT_FALSE(IsTrayIconVisible());
// Enabling all accessibility features.
- MagnificationManager::Get()->SetMagnifier(ash::MAGNIFIER_FULL);
+ SetMagnifierEnabled(true);
EXPECT_TRUE(IsTrayIconVisible());
accessibility::EnableHighContrast(true);
EXPECT_TRUE(IsTrayIconVisible());
@@ -166,7 +166,7 @@ IN_PROC_BROWSER_TEST_F(TrayAccessibilityTest, ShowTrayIcon) {
EXPECT_TRUE(IsTrayIconVisible());
accessibility::EnableHighContrast(false);
EXPECT_TRUE(IsTrayIconVisible());
- MagnificationManager::Get()->SetMagnifier(ash::MAGNIFIER_OFF);
+ SetMagnifierEnabled(false);
EXPECT_FALSE(IsTrayIconVisible());
// Confirms that prefs::kShouldAlwaysShowAccessibilityMenu doesn't affect
@@ -208,13 +208,13 @@ IN_PROC_BROWSER_TEST_F(TrayAccessibilityTest, ShowMenu) {
EXPECT_FALSE(CanCreateMenuItem());
// Toggling screen magnifier changes the visibillity of the menu.
- MagnificationManager::Get()->SetMagnifier(ash::MAGNIFIER_FULL);
+ SetMagnifierEnabled(true);
EXPECT_TRUE(CanCreateMenuItem());
- MagnificationManager::Get()->SetMagnifier(ash::MAGNIFIER_OFF);
+ SetMagnifierEnabled(false);
EXPECT_FALSE(CanCreateMenuItem());
// Enabling all accessibility features.
- MagnificationManager::Get()->SetMagnifier(ash::MAGNIFIER_FULL);
+ SetMagnifierEnabled(true);
EXPECT_TRUE(CanCreateMenuItem());
accessibility::EnableHighContrast(true);
EXPECT_TRUE(CanCreateMenuItem());
@@ -224,7 +224,7 @@ IN_PROC_BROWSER_TEST_F(TrayAccessibilityTest, ShowMenu) {
EXPECT_TRUE(CanCreateMenuItem());
accessibility::EnableHighContrast(false);
EXPECT_TRUE(CanCreateMenuItem());
- MagnificationManager::Get()->SetMagnifier(ash::MAGNIFIER_OFF);
+ SetMagnifierEnabled(false);
EXPECT_FALSE(CanCreateMenuItem());
}
@@ -255,13 +255,13 @@ IN_PROC_BROWSER_TEST_F(TrayAccessibilityTest, ShowMenuWithShowMenuOption) {
EXPECT_TRUE(CanCreateMenuItem());
// The menu is keeping visible regardless of toggling screen magnifier.
- MagnificationManager::Get()->SetMagnifier(ash::MAGNIFIER_FULL);
+ SetMagnifierEnabled(true);
EXPECT_TRUE(CanCreateMenuItem());
- MagnificationManager::Get()->SetMagnifier(ash::MAGNIFIER_OFF);
+ SetMagnifierEnabled(false);
EXPECT_TRUE(CanCreateMenuItem());
// Enabling all accessibility features.
- MagnificationManager::Get()->SetMagnifier(ash::MAGNIFIER_FULL);
+ SetMagnifierEnabled(true);
EXPECT_TRUE(CanCreateMenuItem());
accessibility::EnableHighContrast(true);
EXPECT_TRUE(CanCreateMenuItem());
@@ -271,7 +271,7 @@ IN_PROC_BROWSER_TEST_F(TrayAccessibilityTest, ShowMenuWithShowMenuOption) {
EXPECT_TRUE(CanCreateMenuItem());
accessibility::EnableHighContrast(false);
EXPECT_TRUE(CanCreateMenuItem());
- MagnificationManager::Get()->SetMagnifier(ash::MAGNIFIER_OFF);
+ SetMagnifierEnabled(false);
EXPECT_TRUE(CanCreateMenuItem());
// Sets prefs::kShouldAlwaysShowAccessibilityMenu = true.
@@ -300,13 +300,13 @@ IN_PROC_BROWSER_TEST_F(TrayAccessibilityTest, ShowMenuWithShowOnLoginScreen) {
EXPECT_TRUE(CanCreateMenuItem());
// The menu is keeping visible regardless of toggling screen magnifier.
- MagnificationManager::Get()->SetMagnifier(ash::MAGNIFIER_FULL);
+ SetMagnifierEnabled(true);
EXPECT_TRUE(CanCreateMenuItem());
- MagnificationManager::Get()->SetMagnifier(ash::MAGNIFIER_OFF);
+ SetMagnifierEnabled(false);
EXPECT_TRUE(CanCreateMenuItem());
// Enabling all accessibility features.
- MagnificationManager::Get()->SetMagnifier(ash::MAGNIFIER_FULL);
+ SetMagnifierEnabled(true);
EXPECT_TRUE(CanCreateMenuItem());
accessibility::EnableHighContrast(true);
EXPECT_TRUE(CanCreateMenuItem());
@@ -316,7 +316,7 @@ IN_PROC_BROWSER_TEST_F(TrayAccessibilityTest, ShowMenuWithShowOnLoginScreen) {
EXPECT_TRUE(CanCreateMenuItem());
accessibility::EnableHighContrast(false);
EXPECT_TRUE(CanCreateMenuItem());
- MagnificationManager::Get()->SetMagnifier(ash::MAGNIFIER_OFF);
+ SetMagnifierEnabled(false);
EXPECT_TRUE(CanCreateMenuItem());
// Sets prefs::kShouldAlwaysShowAccessibilityMenu = true.
@@ -362,17 +362,14 @@ IN_PROC_BROWSER_TEST_F(TrayAccessibilityTest, ClickDetailMenu) {
// Confirms that the check item toggles the magnifier.
EXPECT_FALSE(accessibility::IsHighContrastEnabled());
- EXPECT_EQ(ash::MAGNIFIER_OFF,
- MagnificationManager::Get()->GetMagnifierType());
+ EXPECT_FALSE(MagnificationManager::Get()->IsMagnifierEnabled());
EXPECT_TRUE(CreateDetailedMenu());
ClickScreenMagnifierOnDetailMenu();
- EXPECT_EQ(ash::MAGNIFIER_FULL,
- MagnificationManager::Get()->GetMagnifierType());
+ EXPECT_TRUE(MagnificationManager::Get()->IsMagnifierEnabled());
EXPECT_TRUE(CreateDetailedMenu());
ClickScreenMagnifierOnDetailMenu();
- EXPECT_EQ(ash::MAGNIFIER_OFF,
- MagnificationManager::Get()->GetMagnifierType());
+ EXPECT_FALSE(MagnificationManager::Get()->IsMagnifierEnabled());
}
IN_PROC_BROWSER_TEST_F(TrayAccessibilityTest, CheckMarksOnDetailMenu) {
@@ -416,7 +413,7 @@ IN_PROC_BROWSER_TEST_F(TrayAccessibilityTest, CheckMarksOnDetailMenu) {
CloseDetailMenu();
// Enabling full screen magnifier.
- MagnificationManager::Get()->SetMagnifier(ash::MAGNIFIER_FULL);
+ SetMagnifierEnabled(true);
EXPECT_TRUE(CreateDetailedMenu());
EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
@@ -424,7 +421,7 @@ IN_PROC_BROWSER_TEST_F(TrayAccessibilityTest, CheckMarksOnDetailMenu) {
CloseDetailMenu();
// Disabling screen magnifier.
- MagnificationManager::Get()->SetMagnifier(ash::MAGNIFIER_OFF);
+ SetMagnifierEnabled(false);
EXPECT_TRUE(CreateDetailedMenu());
EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
@@ -434,7 +431,7 @@ IN_PROC_BROWSER_TEST_F(TrayAccessibilityTest, CheckMarksOnDetailMenu) {
// Enabling all of the a11y features.
accessibility::EnableSpokenFeedback(true, NULL, ash::A11Y_NOTIFICATION_NONE);
accessibility::EnableHighContrast(true);
- MagnificationManager::Get()->SetMagnifier(ash::MAGNIFIER_FULL);
+ SetMagnifierEnabled(true);
EXPECT_TRUE(CreateDetailedMenu());
EXPECT_TRUE(IsSpokenFeedbackEnabledOnDetailMenu());
EXPECT_TRUE(IsHighContrastEnabledOnDetailMenu());
@@ -444,7 +441,7 @@ IN_PROC_BROWSER_TEST_F(TrayAccessibilityTest, CheckMarksOnDetailMenu) {
// Disabling all of the a11y features.
accessibility::EnableSpokenFeedback(false, NULL, ash::A11Y_NOTIFICATION_NONE);
accessibility::EnableHighContrast(false);
- MagnificationManager::Get()->SetMagnifier(ash::MAGNIFIER_OFF);
+ SetMagnifierEnabled(false);
EXPECT_TRUE(CreateDetailedMenu());
EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
diff --git a/chrome/browser/resources/options/browser_options.html b/chrome/browser/resources/options/browser_options.html
index 9a1bf83..7c26ef9 100644
--- a/chrome/browser/resources/options/browser_options.html
+++ b/chrome/browser/resources/options/browser_options.html
@@ -637,6 +637,10 @@
pref="settings.a11y.screen_magnifier" type="checkbox">
<span i18n-content="accessibilityScreenMagnifier"></span>
</label>
+ <select id="accessibility-screen-magnifier-type-select"
+ class="control" i18n-options="magnifierList" data-type="number"
+ pref="settings.a11y.screen_magnifier_type2">
+ </select>
</div>
</div>
<div class="option-name" id="accessibility-tap-dragging">
diff --git a/chrome/browser/ui/ash/ash_init.cc b/chrome/browser/ui/ash/ash_init.cc
index 0f50c6b..ef9d18a 100644
--- a/chrome/browser/ui/ash/ash_init.cc
+++ b/chrome/browser/ui/ash/ash_init.cc
@@ -96,12 +96,14 @@ void OpenAsh() {
chromeos::accessibility::IsHighContrastEnabled());
DCHECK(chromeos::MagnificationManager::Get());
+ bool magnifier_enabled =
+ chromeos::MagnificationManager::Get()->IsMagnifierEnabled();
ash::MagnifierType magnifier_type =
chromeos::MagnificationManager::Get()->GetMagnifierType();
- ash::Shell::GetInstance()->magnification_controller()->SetEnabled(
- magnifier_type == ash::MAGNIFIER_FULL);
- ash::Shell::GetInstance()->partial_magnification_controller()->SetEnabled(
- magnifier_type == ash::MAGNIFIER_PARTIAL);
+ ash::Shell::GetInstance()->magnification_controller()->
+ SetEnabled(magnifier_enabled && magnifier_type == ash::MAGNIFIER_FULL);
+ ash::Shell::GetInstance()->partial_magnification_controller()->
+ SetEnabled(magnifier_enabled && magnifier_type == ash::MAGNIFIER_PARTIAL);
if (!CommandLine::ForCurrentProcess()->HasSwitch(
switches::kDisableZeroBrowsersOpenForTests)) {
diff --git a/chrome/browser/ui/ash/chrome_shell_delegate.cc b/chrome/browser/ui/ash/chrome_shell_delegate.cc
index 5354516..b784036 100644
--- a/chrome/browser/ui/ash/chrome_shell_delegate.cc
+++ b/chrome/browser/ui/ash/chrome_shell_delegate.cc
@@ -355,19 +355,35 @@ void ChromeShellDelegate::ToggleHighContrast() {
#endif
}
+bool ChromeShellDelegate::IsMagnifierEnabled() const {
+#if defined(OS_CHROMEOS)
+ DCHECK(chromeos::MagnificationManager::Get());
+ return chromeos::MagnificationManager::Get()->IsMagnifierEnabled();
+#else
+ return false;
+#endif
+}
+
ash::MagnifierType ChromeShellDelegate::GetMagnifierType() const {
#if defined(OS_CHROMEOS)
DCHECK(chromeos::MagnificationManager::Get());
return chromeos::MagnificationManager::Get()->GetMagnifierType();
#else
- return ash::MAGNIFIER_OFF;
+ return ash::kDefaultMagnifierType;
+#endif
+}
+
+void ChromeShellDelegate::SetMagnifierEnabled(bool enabled) {
+#if defined(OS_CHROMEOS)
+ DCHECK(chromeos::MagnificationManager::Get());
+ return chromeos::MagnificationManager::Get()->SetMagnifierEnabled(enabled);
#endif
}
-void ChromeShellDelegate::SetMagnifier(ash::MagnifierType type) {
+void ChromeShellDelegate::SetMagnifierType(ash::MagnifierType type) {
#if defined(OS_CHROMEOS)
DCHECK(chromeos::MagnificationManager::Get());
- return chromeos::MagnificationManager::Get()->SetMagnifier(type);
+ return chromeos::MagnificationManager::Get()->SetMagnifierType(type);
#endif
}
diff --git a/chrome/browser/ui/ash/chrome_shell_delegate.h b/chrome/browser/ui/ash/chrome_shell_delegate.h
index 401bcb53..7270a37 100644
--- a/chrome/browser/ui/ash/chrome_shell_delegate.h
+++ b/chrome/browser/ui/ash/chrome_shell_delegate.h
@@ -61,7 +61,9 @@ class ChromeShellDelegate : public ash::ShellDelegate,
virtual void ToggleSpokenFeedback(
ash::AccessibilityNotificationVisibility notify) OVERRIDE;
virtual bool IsHighContrastEnabled() const OVERRIDE;
- virtual void SetMagnifier(ash::MagnifierType type) OVERRIDE;
+ virtual void SetMagnifierEnabled(bool enabled) OVERRIDE;
+ virtual void SetMagnifierType(ash::MagnifierType type) OVERRIDE;
+ virtual bool IsMagnifierEnabled() const OVERRIDE;
virtual ash::MagnifierType GetMagnifierType() const OVERRIDE;
virtual bool ShouldAlwaysShowAccessibilityMenu() const OVERRIDE;
virtual app_list::AppListViewDelegate* CreateAppListViewDelegate() OVERRIDE;
diff --git a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc
index 82784e49..34dc189 100644
--- a/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc
+++ b/chrome/browser/ui/webui/chromeos/login/core_oobe_handler.cc
@@ -149,10 +149,8 @@ void CoreOobeHandler::HandleEnableScreenMagnifier(const base::ListValue* args) {
return;
}
// TODO(nkostylev): Add support for partial screen magnifier.
- ash::MagnifierType type = enabled ? ash::MAGNIFIER_FULL :
- ash::MAGNIFIER_OFF;
DCHECK(MagnificationManager::Get());
- MagnificationManager::Get()->SetMagnifier(type);
+ MagnificationManager::Get()->SetMagnifierEnabled(enabled);
}
void CoreOobeHandler::HandleEnableSpokenFeedback(const base::ListValue* args) {
@@ -173,15 +171,13 @@ void CoreOobeHandler::ShowOobeUI(bool show) {
void CoreOobeHandler::UpdateA11yState() {
DCHECK(MagnificationManager::Get());
- ash::MagnifierType type = MagnificationManager::Get()->GetMagnifierType();
-
base::DictionaryValue a11y_info;
a11y_info.SetBoolean("highContrastEnabled",
accessibility::IsHighContrastEnabled());
a11y_info.SetBoolean("spokenFeedbackEnabled",
accessibility::IsSpokenFeedbackEnabled());
a11y_info.SetBoolean("screenMagnifierEnabled",
- type != ash::MAGNIFIER_OFF);
+ MagnificationManager::Get()->IsMagnifierEnabled());
web_ui()->CallJavascriptFunction("cr.ui.Oobe.refreshA11yInfo", a11y_info);
}
diff --git a/chrome/browser/ui/webui/options/browser_options_handler.cc b/chrome/browser/ui/webui/options/browser_options_handler.cc
index c4a25d7..7b00522 100644
--- a/chrome/browser/ui/webui/options/browser_options_handler.cc
+++ b/chrome/browser/ui/webui/options/browser_options_handler.cc
@@ -85,6 +85,7 @@
#endif
#if defined(OS_CHROMEOS)
+#include "ash/magnifier/magnifier_constants.h"
#include "chrome/browser/chromeos/accessibility/accessibility_util.h"
#include "chrome/browser/chromeos/extensions/wallpaper_manager_util.h"
#include "chrome/browser/chromeos/login/user_manager.h"
@@ -423,6 +424,22 @@ void BrowserOptionsHandler::GetLocalizedValues(DictionaryValue* values) {
values->SetString("accessibilityLearnMoreURL",
chrome::kChromeAccessibilityHelpURL);
+
+ // Creates magnifierList.
+ base::ListValue* magnifierList = new base::ListValue();
+ base::ListValue* option_full = new base::ListValue();
+ option_full->Append(base::Value::CreateIntegerValue(ash::MAGNIFIER_FULL));
+ option_full->Append(new base::StringValue(l10n_util::GetStringUTF16(
+ IDS_OPTIONS_SETTINGS_ACCESSIBILITY_SCREEN_MAGNIFIER_FULL)));
+ base::ListValue* option_partial = new base::ListValue();
+ option_partial->Append(base::Value::CreateIntegerValue(
+ ash::MAGNIFIER_PARTIAL));
+ option_partial->Append(new base::StringValue(l10n_util::GetStringUTF16(
+ IDS_OPTIONS_SETTINGS_ACCESSIBILITY_SCREEN_MAGNIFIER_PARTIAL)));
+ magnifierList->Append(option_full);
+ magnifierList->Append(option_partial);
+ values->Set("magnifierList", magnifierList);
+
#endif
#if defined(OS_MACOSX)
values->SetString("macPasswordsWarning",