This source file includes following definitions.
- observed_type_
- observed
- observed_enabled
- observed_type
- reset
- OnAccessibilityStatusChanged
- SetLargeCursorEnabled
- IsLargeCursorEnabled
- ShouldShowAccessibilityMenu
- SetHighContrastEnabled
- IsHighContrastEnabled
- SetSpokenFeedbackEnabled
- IsSpokenFeedbackEnabled
- SetAutoclickEnabled
- IsAutoclickEnabled
- SetAutoclickDelay
- GetAutoclickDelay
- SetVirtualKeyboardEnabled
- IsVirtualKeyboardEnabled
- GetProfile
- GetPrefs
- SetLargeCursorEnabledPref
- SetHighContrastEnabledPref
- SetSpokenFeedbackEnabledPref
- SetAutoclickEnabledPref
- SetAutoclickDelayPref
- SetVirtualKeyboardEnabledPref
- GetLargeCursorEnabledFromPref
- GetHighContrastEnabledFromPref
- GetSpokenFeedbackEnabledFromPref
- GetAutoclickEnabledFromPref
- GetAutoclickDelayFromPref
- SetUpCommandLine
- SetUpInProcessBrowserTestFixture
- SetUpOnMainThread
- CleanUpOnMainThread
- default_autoclick_delay
- IN_PROC_BROWSER_TEST_F
- IN_PROC_BROWSER_TEST_F
- IN_PROC_BROWSER_TEST_F
- IN_PROC_BROWSER_TEST_F
- IN_PROC_BROWSER_TEST_F
- IN_PROC_BROWSER_TEST_F
- IN_PROC_BROWSER_TEST_P
- IN_PROC_BROWSER_TEST_F
#include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
#include "ash/magnifier/magnification_controller.h"
#include "ash/shell.h"
#include "base/command_line.h"
#include "base/prefs/pref_service.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/chromeos/accessibility/magnification_manager.h"
#include "chrome/browser/chromeos/login/helper.h"
#include "chrome/browser/chromeos/login/login_utils.h"
#include "chrome/browser/chromeos/login/user_manager.h"
#include "chrome/browser/chromeos/login/user_manager_impl.h"
#include "chrome/browser/chromeos/profiles/profile_helper.h"
#include "chrome/browser/extensions/api/braille_display_private/mock_braille_controller.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/common/pref_names.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/testing_profile.h"
#include "chromeos/chromeos_switches.h"
#include "content/public/browser/notification_service.h"
#include "testing/gtest/include/gtest/gtest.h"
using extensions::api::braille_display_private::BrailleObserver;
using extensions::api::braille_display_private::DisplayState;
using extensions::api::braille_display_private::MockBrailleController;
namespace chromeos {
namespace {
const char kTestUserName[] = "owner@invalid.domain";
const int kTestAutoclickDelayMs = 2000;
const char kTestLocallyManagedUserName[] = "test@locally-managed.localhost";
class MockAccessibilityObserver {
public:
MockAccessibilityObserver() : observed_(false),
observed_enabled_(false),
observed_type_(-1)
{
AccessibilityManager* accessibility_manager = AccessibilityManager::Get();
CHECK(accessibility_manager);
accessibility_subscription_ = accessibility_manager->RegisterCallback(
base::Bind(&MockAccessibilityObserver::OnAccessibilityStatusChanged,
base::Unretained(this)));
}
virtual ~MockAccessibilityObserver() {}
bool observed() const { return observed_; }
bool observed_enabled() const { return observed_enabled_; }
int observed_type() const { return observed_type_; }
void reset() { observed_ = false; }
private:
void OnAccessibilityStatusChanged(
const AccessibilityStatusEventDetails& details) {
if (details.notification_type != ACCESSIBILITY_TOGGLE_SCREEN_MAGNIFIER) {
observed_type_ = details.notification_type;
observed_enabled_ = details.enabled;
observed_ = true;
}
}
bool observed_;
bool observed_enabled_;
int observed_type_;
scoped_ptr<AccessibilityStatusSubscription> accessibility_subscription_;
DISALLOW_COPY_AND_ASSIGN(MockAccessibilityObserver);
};
void SetLargeCursorEnabled(bool enabled) {
return AccessibilityManager::Get()->EnableLargeCursor(enabled);
}
bool IsLargeCursorEnabled() {
return AccessibilityManager::Get()->IsLargeCursorEnabled();
}
bool ShouldShowAccessibilityMenu() {
return AccessibilityManager::Get()->ShouldShowAccessibilityMenu();
}
void SetHighContrastEnabled(bool enabled) {
return AccessibilityManager::Get()->EnableHighContrast(enabled);
}
bool IsHighContrastEnabled() {
return AccessibilityManager::Get()->IsHighContrastEnabled();
}
void SetSpokenFeedbackEnabled(bool enabled) {
return AccessibilityManager::Get()->EnableSpokenFeedback(
enabled, ash::A11Y_NOTIFICATION_NONE);
}
bool IsSpokenFeedbackEnabled() {
return AccessibilityManager::Get()->IsSpokenFeedbackEnabled();
}
void SetAutoclickEnabled(bool enabled) {
return AccessibilityManager::Get()->EnableAutoclick(enabled);
}
bool IsAutoclickEnabled() {
return AccessibilityManager::Get()->IsAutoclickEnabled();
}
void SetAutoclickDelay(int delay_ms) {
return AccessibilityManager::Get()->SetAutoclickDelay(delay_ms);
}
int GetAutoclickDelay() {
return AccessibilityManager::Get()->GetAutoclickDelay();
}
void SetVirtualKeyboardEnabled(bool enabled) {
return AccessibilityManager::Get()->EnableVirtualKeyboard(enabled);
}
bool IsVirtualKeyboardEnabled() {
return AccessibilityManager::Get()->IsVirtualKeyboardEnabled();
}
Profile* GetProfile() {
Profile* profile = ProfileManager::GetActiveUserProfile();
DCHECK(profile);
return profile;
}
PrefService* GetPrefs() {
return GetProfile()->GetPrefs();
}
void SetLargeCursorEnabledPref(bool enabled) {
GetPrefs()->SetBoolean(prefs::kLargeCursorEnabled, enabled);
}
void SetHighContrastEnabledPref(bool enabled) {
GetPrefs()->SetBoolean(prefs::kHighContrastEnabled, enabled);
}
void SetSpokenFeedbackEnabledPref(bool enabled) {
GetPrefs()->SetBoolean(prefs::kSpokenFeedbackEnabled, enabled);
}
void SetAutoclickEnabledPref(bool enabled) {
GetPrefs()->SetBoolean(prefs::kAutoclickEnabled, enabled);
}
void SetAutoclickDelayPref(int delay_ms) {
GetPrefs()->SetInteger(prefs::kAutoclickDelayMs, delay_ms);
}
void SetVirtualKeyboardEnabledPref(bool enabled) {
GetPrefs()->SetBoolean(prefs::kVirtualKeyboardEnabled, enabled);
}
bool GetLargeCursorEnabledFromPref() {
return GetPrefs()->GetBoolean(prefs::kLargeCursorEnabled);
}
bool GetHighContrastEnabledFromPref() {
return GetPrefs()->GetBoolean(prefs::kHighContrastEnabled);
}
bool GetSpokenFeedbackEnabledFromPref() {
return GetPrefs()->GetBoolean(prefs::kSpokenFeedbackEnabled);
}
bool GetAutoclickEnabledFromPref() {
return GetPrefs()->GetBoolean(prefs::kAutoclickEnabled);
}
int GetAutoclickDelayFromPref() {
return GetPrefs()->GetInteger(prefs::kAutoclickDelayMs);
}
}
class AccessibilityManagerTest : public InProcessBrowserTest {
protected:
AccessibilityManagerTest() : default_autoclick_delay_(0) {}
virtual ~AccessibilityManagerTest() {}
virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
command_line->AppendSwitch(chromeos::switches::kLoginManager);
command_line->AppendSwitchASCII(chromeos::switches::kLoginProfile,
TestingProfile::kTestUserProfileDir);
}
virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
AccessibilityManager::SetBrailleControllerForTest(&braille_controller_);
}
virtual void SetUpOnMainThread() OVERRIDE {
AccessibilityManager::Get()->
SetProfileForTest(ProfileHelper::GetSigninProfile());
default_autoclick_delay_ = GetAutoclickDelay();
}
virtual void CleanUpOnMainThread() OVERRIDE {
AccessibilityManager::SetBrailleControllerForTest(NULL);
}
int default_autoclick_delay() const { return default_autoclick_delay_; }
int default_autoclick_delay_;
content::NotificationRegistrar registrar_;
MockBrailleController braille_controller_;
DISALLOW_COPY_AND_ASSIGN(AccessibilityManagerTest);
};
IN_PROC_BROWSER_TEST_F(AccessibilityManagerTest, Login) {
EXPECT_FALSE(IsLargeCursorEnabled());
EXPECT_FALSE(IsSpokenFeedbackEnabled());
EXPECT_FALSE(IsHighContrastEnabled());
EXPECT_FALSE(IsAutoclickEnabled());
EXPECT_FALSE(IsVirtualKeyboardEnabled());
EXPECT_EQ(default_autoclick_delay(), GetAutoclickDelay());
UserManager::Get()->UserLoggedIn(kTestUserName, kTestUserName, true);
EXPECT_FALSE(IsLargeCursorEnabled());
EXPECT_FALSE(IsSpokenFeedbackEnabled());
EXPECT_FALSE(IsHighContrastEnabled());
EXPECT_FALSE(IsAutoclickEnabled());
EXPECT_FALSE(IsVirtualKeyboardEnabled());
EXPECT_EQ(default_autoclick_delay(), GetAutoclickDelay());
UserManager::Get()->SessionStarted();
EXPECT_FALSE(IsLargeCursorEnabled());
EXPECT_FALSE(IsSpokenFeedbackEnabled());
EXPECT_FALSE(IsHighContrastEnabled());
EXPECT_FALSE(IsAutoclickEnabled());
EXPECT_FALSE(IsVirtualKeyboardEnabled());
EXPECT_EQ(default_autoclick_delay(), GetAutoclickDelay());
SetLargeCursorEnabled(true);
EXPECT_TRUE(IsLargeCursorEnabled());
SetSpokenFeedbackEnabled(true);
EXPECT_TRUE(IsSpokenFeedbackEnabled());
SetHighContrastEnabled(true);
EXPECT_TRUE(IsHighContrastEnabled());
SetAutoclickEnabled(true);
EXPECT_TRUE(IsAutoclickEnabled());
SetAutoclickDelay(kTestAutoclickDelayMs);
EXPECT_EQ(kTestAutoclickDelayMs, GetAutoclickDelay());
SetVirtualKeyboardEnabled(true);
EXPECT_TRUE(IsVirtualKeyboardEnabled());
}
IN_PROC_BROWSER_TEST_F(AccessibilityManagerTest, BrailleOnLoginScreen) {
EXPECT_FALSE(IsSpokenFeedbackEnabled());
braille_controller_.SetAvailable(true);
braille_controller_.GetObserver()->OnDisplayStateChanged(
*braille_controller_.GetDisplayState());
EXPECT_TRUE(IsSpokenFeedbackEnabled());
}
IN_PROC_BROWSER_TEST_F(AccessibilityManagerTest, TypePref) {
UserManager::Get()->UserLoggedIn(kTestUserName, kTestUserName, true);
UserManager::Get()->SessionStarted();
EXPECT_FALSE(IsLargeCursorEnabled());
EXPECT_FALSE(IsSpokenFeedbackEnabled());
EXPECT_FALSE(IsHighContrastEnabled());
EXPECT_FALSE(IsAutoclickEnabled());
EXPECT_EQ(default_autoclick_delay(), GetAutoclickDelay());
EXPECT_FALSE(IsVirtualKeyboardEnabled());
SetLargeCursorEnabledPref(true);
EXPECT_TRUE(IsLargeCursorEnabled());
SetSpokenFeedbackEnabledPref(true);
EXPECT_TRUE(IsSpokenFeedbackEnabled());
SetHighContrastEnabledPref(true);
EXPECT_TRUE(IsHighContrastEnabled());
SetAutoclickEnabledPref(true);
EXPECT_TRUE(IsAutoclickEnabled());
SetAutoclickDelayPref(kTestAutoclickDelayMs);
EXPECT_EQ(kTestAutoclickDelayMs, GetAutoclickDelay());
SetVirtualKeyboardEnabledPref(true);
EXPECT_TRUE(IsVirtualKeyboardEnabled());
SetLargeCursorEnabledPref(false);
EXPECT_FALSE(IsLargeCursorEnabled());
SetSpokenFeedbackEnabledPref(false);
EXPECT_FALSE(IsSpokenFeedbackEnabled());
SetHighContrastEnabledPref(false);
EXPECT_FALSE(IsHighContrastEnabled());
SetAutoclickEnabledPref(false);
EXPECT_FALSE(IsAutoclickEnabled());
SetVirtualKeyboardEnabledPref(false);
EXPECT_FALSE(IsVirtualKeyboardEnabled());
}
IN_PROC_BROWSER_TEST_F(AccessibilityManagerTest, ResumeSavedPref) {
UserManager::Get()->UserLoggedIn(kTestUserName, kTestUserName, true);
SetLargeCursorEnabledPref(true);
EXPECT_FALSE(IsLargeCursorEnabled());
SetSpokenFeedbackEnabledPref(true);
EXPECT_FALSE(IsSpokenFeedbackEnabled());
SetHighContrastEnabledPref(true);
EXPECT_FALSE(IsHighContrastEnabled());
SetAutoclickEnabledPref(true);
EXPECT_FALSE(IsAutoclickEnabled());
SetAutoclickDelayPref(kTestAutoclickDelayMs);
EXPECT_EQ(default_autoclick_delay(), GetAutoclickDelay());
SetVirtualKeyboardEnabledPref(true);
EXPECT_FALSE(IsVirtualKeyboardEnabled());
UserManager::Get()->SessionStarted();
EXPECT_TRUE(IsLargeCursorEnabled());
EXPECT_TRUE(IsSpokenFeedbackEnabled());
EXPECT_TRUE(IsHighContrastEnabled());
EXPECT_TRUE(IsAutoclickEnabled());
EXPECT_EQ(kTestAutoclickDelayMs, GetAutoclickDelay());
EXPECT_TRUE(IsVirtualKeyboardEnabled());
}
IN_PROC_BROWSER_TEST_F(AccessibilityManagerTest,
ChangingTypeInvokesNotification) {
MockAccessibilityObserver observer;
UserManager::Get()->UserLoggedIn(kTestUserName, kTestUserName, true);
UserManager::Get()->SessionStarted();
EXPECT_FALSE(observer.observed());
observer.reset();
SetSpokenFeedbackEnabled(true);
EXPECT_TRUE(observer.observed());
EXPECT_TRUE(observer.observed_enabled());
EXPECT_EQ(observer.observed_type(),
ACCESSIBILITY_TOGGLE_SPOKEN_FEEDBACK);
EXPECT_TRUE(IsSpokenFeedbackEnabled());
observer.reset();
SetSpokenFeedbackEnabled(false);
EXPECT_TRUE(observer.observed());
EXPECT_FALSE(observer.observed_enabled());
EXPECT_EQ(observer.observed_type(),
ACCESSIBILITY_TOGGLE_SPOKEN_FEEDBACK);
EXPECT_FALSE(IsSpokenFeedbackEnabled());
observer.reset();
SetHighContrastEnabled(true);
EXPECT_TRUE(observer.observed());
EXPECT_TRUE(observer.observed_enabled());
EXPECT_EQ(observer.observed_type(),
ACCESSIBILITY_TOGGLE_HIGH_CONTRAST_MODE);
EXPECT_TRUE(IsHighContrastEnabled());
observer.reset();
SetHighContrastEnabled(false);
EXPECT_TRUE(observer.observed());
EXPECT_FALSE(observer.observed_enabled());
EXPECT_EQ(observer.observed_type(),
ACCESSIBILITY_TOGGLE_HIGH_CONTRAST_MODE);
EXPECT_FALSE(IsHighContrastEnabled());
observer.reset();
SetVirtualKeyboardEnabled(true);
EXPECT_TRUE(observer.observed());
EXPECT_TRUE(observer.observed_enabled());
EXPECT_EQ(observer.observed_type(),
ACCESSIBILITY_TOGGLE_VIRTUAL_KEYBOARD);
EXPECT_TRUE(IsVirtualKeyboardEnabled());
observer.reset();
SetVirtualKeyboardEnabled(false);
EXPECT_TRUE(observer.observed());
EXPECT_FALSE(observer.observed_enabled());
EXPECT_EQ(observer.observed_type(),
ACCESSIBILITY_TOGGLE_VIRTUAL_KEYBOARD);
EXPECT_FALSE(IsVirtualKeyboardEnabled());
}
IN_PROC_BROWSER_TEST_F(AccessibilityManagerTest,
ChangingTypePrefInvokesNotification) {
MockAccessibilityObserver observer;
UserManager::Get()->UserLoggedIn(kTestUserName, kTestUserName, true);
UserManager::Get()->SessionStarted();
EXPECT_FALSE(observer.observed());
observer.reset();
SetSpokenFeedbackEnabledPref(true);
EXPECT_TRUE(observer.observed());
EXPECT_TRUE(observer.observed_enabled());
EXPECT_EQ(observer.observed_type(),
ACCESSIBILITY_TOGGLE_SPOKEN_FEEDBACK);
EXPECT_TRUE(IsSpokenFeedbackEnabled());
observer.reset();
SetSpokenFeedbackEnabledPref(false);
EXPECT_TRUE(observer.observed());
EXPECT_FALSE(observer.observed_enabled());
EXPECT_EQ(observer.observed_type(),
ACCESSIBILITY_TOGGLE_SPOKEN_FEEDBACK);
EXPECT_FALSE(IsSpokenFeedbackEnabled());
observer.reset();
SetHighContrastEnabledPref(true);
EXPECT_TRUE(observer.observed());
EXPECT_TRUE(observer.observed_enabled());
EXPECT_EQ(observer.observed_type(),
ACCESSIBILITY_TOGGLE_HIGH_CONTRAST_MODE);
EXPECT_TRUE(IsHighContrastEnabled());
observer.reset();
SetHighContrastEnabledPref(false);
EXPECT_TRUE(observer.observed());
EXPECT_FALSE(observer.observed_enabled());
EXPECT_EQ(observer.observed_type(),
ACCESSIBILITY_TOGGLE_HIGH_CONTRAST_MODE);
EXPECT_FALSE(IsHighContrastEnabled());
observer.reset();
SetVirtualKeyboardEnabledPref(true);
EXPECT_TRUE(observer.observed());
EXPECT_TRUE(observer.observed_enabled());
EXPECT_EQ(observer.observed_type(),
ACCESSIBILITY_TOGGLE_VIRTUAL_KEYBOARD);
EXPECT_TRUE(IsVirtualKeyboardEnabled());
observer.reset();
SetVirtualKeyboardEnabledPref(false);
EXPECT_TRUE(observer.observed());
EXPECT_FALSE(observer.observed_enabled());
EXPECT_EQ(observer.observed_type(),
ACCESSIBILITY_TOGGLE_VIRTUAL_KEYBOARD);
EXPECT_FALSE(IsVirtualKeyboardEnabled());
}
class AccessibilityManagerUserTypeTest
: public AccessibilityManagerTest,
public ::testing::WithParamInterface<const char*> {
protected:
AccessibilityManagerUserTypeTest() {}
virtual ~AccessibilityManagerUserTypeTest() {}
DISALLOW_COPY_AND_ASSIGN(AccessibilityManagerUserTypeTest);
};
INSTANTIATE_TEST_CASE_P(
UserTypeInstantiation,
AccessibilityManagerUserTypeTest,
::testing::Values(kTestUserName,
UserManager::kGuestUserName,
kTestLocallyManagedUserName));
IN_PROC_BROWSER_TEST_P(AccessibilityManagerUserTypeTest,
EnableOnLoginScreenAndLogin) {
SetLargeCursorEnabled(true);
EXPECT_TRUE(IsLargeCursorEnabled());
SetSpokenFeedbackEnabled(true);
EXPECT_TRUE(IsSpokenFeedbackEnabled());
SetHighContrastEnabled(true);
EXPECT_TRUE(IsHighContrastEnabled());
SetAutoclickEnabled(true);
EXPECT_TRUE(IsAutoclickEnabled());
SetAutoclickDelay(kTestAutoclickDelayMs);
EXPECT_EQ(kTestAutoclickDelayMs, GetAutoclickDelay());
const char* user_name = GetParam();
UserManager::Get()->UserLoggedIn(user_name, user_name, true);
EXPECT_TRUE(IsLargeCursorEnabled());
EXPECT_TRUE(IsSpokenFeedbackEnabled());
EXPECT_TRUE(IsHighContrastEnabled());
EXPECT_TRUE(IsAutoclickEnabled());
EXPECT_EQ(kTestAutoclickDelayMs, GetAutoclickDelay());
UserManager::Get()->SessionStarted();
EXPECT_TRUE(IsLargeCursorEnabled());
EXPECT_TRUE(IsSpokenFeedbackEnabled());
EXPECT_TRUE(IsHighContrastEnabled());
EXPECT_TRUE(IsAutoclickEnabled());
EXPECT_EQ(kTestAutoclickDelayMs, GetAutoclickDelay());
EXPECT_TRUE(GetLargeCursorEnabledFromPref());
EXPECT_TRUE(GetSpokenFeedbackEnabledFromPref());
EXPECT_TRUE(GetHighContrastEnabledFromPref());
EXPECT_TRUE(GetAutoclickEnabledFromPref());
EXPECT_EQ(kTestAutoclickDelayMs, GetAutoclickDelayFromPref());
}
IN_PROC_BROWSER_TEST_F(AccessibilityManagerTest, AcessibilityMenuVisibility) {
UserManager::Get()->UserLoggedIn(kTestUserName, kTestUserName, true);
UserManager::Get()->SessionStarted();
EXPECT_FALSE(IsLargeCursorEnabled());
EXPECT_FALSE(IsSpokenFeedbackEnabled());
EXPECT_FALSE(IsHighContrastEnabled());
EXPECT_FALSE(IsAutoclickEnabled());
EXPECT_FALSE(ShouldShowAccessibilityMenu());
EXPECT_FALSE(IsVirtualKeyboardEnabled());
SetLargeCursorEnabled(true);
EXPECT_TRUE(ShouldShowAccessibilityMenu());
SetLargeCursorEnabled(false);
EXPECT_FALSE(ShouldShowAccessibilityMenu());
SetSpokenFeedbackEnabled(true);
EXPECT_TRUE(ShouldShowAccessibilityMenu());
SetSpokenFeedbackEnabled(false);
EXPECT_FALSE(ShouldShowAccessibilityMenu());
SetHighContrastEnabled(true);
EXPECT_TRUE(ShouldShowAccessibilityMenu());
SetHighContrastEnabled(false);
EXPECT_FALSE(ShouldShowAccessibilityMenu());
SetAutoclickEnabled(true);
EXPECT_TRUE(ShouldShowAccessibilityMenu());
SetAutoclickEnabled(false);
EXPECT_FALSE(ShouldShowAccessibilityMenu());
SetVirtualKeyboardEnabled(true);
EXPECT_TRUE(ShouldShowAccessibilityMenu());
SetVirtualKeyboardEnabled(false);
EXPECT_FALSE(ShouldShowAccessibilityMenu());
}
}