1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "ash/magnifier/magnification_controller.h"
7 #include "ash/system/tray/system_tray.h"
8 #include "ash/system/tray_accessibility.h"
9 #include "ash/system/user/login_status.h"
10 #include "base/callback.h"
11 #include "base/command_line.h"
12 #include "base/prefs/pref_service.h"
13 #include "chrome/browser/browser_process.h"
14 #include "chrome/browser/chrome_notification_types.h"
15 #include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
16 #include "chrome/browser/chromeos/accessibility/magnification_manager.h"
17 #include "chrome/browser/chromeos/login/helper.h"
18 #include "chrome/browser/chromeos/login/login_utils.h"
19 #include "chrome/browser/chromeos/login/startup_utils.h"
20 #include "chrome/browser/chromeos/login/user_manager.h"
21 #include "chrome/browser/chromeos/login/user_manager_impl.h"
22 #include "chrome/browser/profiles/profile.h"
23 #include "chrome/browser/profiles/profile_manager.h"
24 #include "chrome/common/chrome_switches.h"
25 #include "chrome/common/pref_names.h"
26 #include "chrome/test/base/in_process_browser_test.h"
27 #include "chrome/test/base/testing_profile.h"
28 #include "chromeos/chromeos_switches.h"
29 #include "components/policy/core/browser/browser_policy_connector.h"
30 #include "components/policy/core/common/external_data_fetcher.h"
31 #include "components/policy/core/common/mock_configuration_policy_provider.h"
32 #include "components/policy/core/common/policy_map.h"
33 #include "components/policy/core/common/policy_types.h"
34 #include "content/public/test/test_utils.h"
35 #include "policy/policy_constants.h"
36 #include "testing/gtest/include/gtest/gtest.h"
37 #include "ui/views/widget/widget.h"
39 using testing::Return;
41 using testing::WithParamInterface;
45 enum PrefSettingMechanism {
50 void SetMagnifierEnabled(bool enabled) {
51 MagnificationManager::Get()->SetMagnifierEnabled(enabled);
54 class TrayAccessibilityTest
55 : public InProcessBrowserTest,
56 public WithParamInterface<PrefSettingMechanism> {
58 TrayAccessibilityTest() {}
59 virtual ~TrayAccessibilityTest() {}
61 // The profile which should be used by tese tests.
62 Profile* GetProfile() { return ProfileManager::GetActiveUserProfile(); }
64 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
65 EXPECT_CALL(provider_, IsInitializationComplete(_))
66 .WillRepeatedly(Return(true));
67 policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
70 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
71 command_line->AppendSwitch(switches::kLoginManager);
72 command_line->AppendSwitchASCII(switches::kLoginProfile,
73 TestingProfile::kTestUserProfileDir);
76 virtual void SetUpOnMainThread() OVERRIDE {
77 AccessibilityManager::Get()->SetProfileForTest(GetProfile());
78 MagnificationManager::Get()->SetProfileForTest(GetProfile());
81 virtual void RunTestOnMainThreadLoop() OVERRIDE {
82 // Need to mark oobe completed to show detailed views.
83 StartupUtils::MarkOobeCompleted();
84 InProcessBrowserTest::RunTestOnMainThreadLoop();
87 void SetShowAccessibilityOptionsInSystemTrayMenu(bool value) {
88 if (GetParam() == PREF_SERVICE) {
89 PrefService* prefs = GetProfile()->GetPrefs();
90 prefs->SetBoolean(prefs::kShouldAlwaysShowAccessibilityMenu, value);
91 } else if (GetParam() == POLICY) {
92 policy::PolicyMap policy_map;
93 policy_map.Set(policy::key::kShowAccessibilityOptionsInSystemTrayMenu,
94 policy::POLICY_LEVEL_MANDATORY,
95 policy::POLICY_SCOPE_USER,
96 base::Value::CreateBooleanValue(value),
98 provider_.UpdateChromePolicy(policy_map);
99 base::RunLoop().RunUntilIdle();
101 FAIL() << "Unknown test parameterization";
105 ash::internal::TrayAccessibility* tray() {
106 return ash::Shell::GetInstance()->GetPrimarySystemTray()->
107 GetTrayAccessibilityForTest();
110 bool IsTrayIconVisible() {
111 return tray()->tray_icon_visible_;
114 views::View* CreateMenuItem() {
115 return tray()->CreateDefaultView(GetLoginStatus());
118 void DestroyMenuItem() {
119 return tray()->DestroyDefaultView();
122 bool CanCreateMenuItem() {
123 views::View* menu_item_view = CreateMenuItem();
125 return menu_item_view != NULL;
128 void SetLoginStatus(ash::user::LoginStatus status) {
129 tray()->UpdateAfterLoginStatusChange(status);
132 ash::user::LoginStatus GetLoginStatus() {
133 return tray()->login_;
136 bool CreateDetailedMenu() {
137 tray()->PopupDetailedView(0, false);
138 return tray()->detailed_menu_ != NULL;
141 void CloseDetailMenu() {
142 CHECK(tray()->detailed_menu_);
143 tray()->DestroyDetailedView();
144 tray()->detailed_menu_ = NULL;
147 void ClickSpokenFeedbackOnDetailMenu() {
148 views::View* button = tray()->detailed_menu_->spoken_feedback_view_;
150 tray()->detailed_menu_->OnViewClicked(button);
153 void ClickHighContrastOnDetailMenu() {
154 views::View* button = tray()->detailed_menu_->high_contrast_view_;
156 tray()->detailed_menu_->OnViewClicked(button);
159 void ClickScreenMagnifierOnDetailMenu() {
160 views::View* button = tray()->detailed_menu_->screen_magnifier_view_;
162 tray()->detailed_menu_->OnViewClicked(button);
165 void ClickAutoclickOnDetailMenu() {
166 views::View* button = tray()->detailed_menu_->autoclick_view_;
168 tray()->detailed_menu_->OnViewClicked(button);
171 void ClickVirtualKeyboardOnDetailMenu() {
172 views::View* button = tray()->detailed_menu_->virtual_keyboard_view_;
174 tray()->detailed_menu_->OnViewClicked(button);
177 bool IsSpokenFeedbackEnabledOnDetailMenu() {
178 return tray()->detailed_menu_->spoken_feedback_enabled_;
181 bool IsHighContrastEnabledOnDetailMenu() {
182 return tray()->detailed_menu_->high_contrast_enabled_;
185 bool IsScreenMagnifierEnabledOnDetailMenu() {
186 return tray()->detailed_menu_->screen_magnifier_enabled_;
189 bool IsLargeCursorEnabledOnDetailMenu() {
190 return tray()->detailed_menu_->large_cursor_enabled_;
193 bool IsAutoclickEnabledOnDetailMenu() {
194 return tray()->detailed_menu_->autoclick_enabled_;
197 bool IsVirtualKeyboardEnabledOnDetailMenu() {
198 return tray()->detailed_menu_->virtual_keyboard_enabled_;
201 bool IsSpokenFeedbackMenuShownOnDetailMenu() {
202 return tray()->detailed_menu_->spoken_feedback_view_;
205 bool IsHighContrastMenuShownOnDetailMenu() {
206 return tray()->detailed_menu_->high_contrast_view_;
209 bool IsScreenMagnifierMenuShownOnDetailMenu() {
210 return tray()->detailed_menu_->screen_magnifier_view_;
213 bool IsLargeCursorMenuShownOnDetailMenu() {
214 return tray()->detailed_menu_->large_cursor_view_;
217 bool IsAutoclickMenuShownOnDetailMenu() {
218 return tray()->detailed_menu_->autoclick_view_;
221 bool IsVirtualKeyboardMenuShownOnDetailMenu() {
222 return tray()->detailed_menu_->virtual_keyboard_view_;
225 policy::MockConfigurationPolicyProvider provider_;
228 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, LoginStatus) {
229 EXPECT_EQ(ash::user::LOGGED_IN_NONE, GetLoginStatus());
231 UserManager::Get()->UserLoggedIn(
232 "owner@invalid.domain", "owner@invalid.domain", true);
233 UserManager::Get()->SessionStarted();
235 EXPECT_EQ(ash::user::LOGGED_IN_USER, GetLoginStatus());
238 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, ShowTrayIcon) {
239 SetLoginStatus(ash::user::LOGGED_IN_NONE);
241 // Confirms that the icon is invisible before login.
242 EXPECT_FALSE(IsTrayIconVisible());
244 UserManager::Get()->UserLoggedIn(
245 "owner@invalid.domain", "owner@invalid.domain", true);
246 UserManager::Get()->SessionStarted();
248 // Confirms that the icon is invisible just after login.
249 EXPECT_FALSE(IsTrayIconVisible());
251 // Toggling spoken feedback changes the visibillity of the icon.
252 AccessibilityManager::Get()->EnableSpokenFeedback(
253 true, ash::A11Y_NOTIFICATION_NONE);
254 EXPECT_TRUE(IsTrayIconVisible());
255 AccessibilityManager::Get()->EnableSpokenFeedback(
256 false, ash::A11Y_NOTIFICATION_NONE);
257 EXPECT_FALSE(IsTrayIconVisible());
259 // Toggling high contrast the visibillity of the icon.
260 AccessibilityManager::Get()->EnableHighContrast(true);
261 EXPECT_TRUE(IsTrayIconVisible());
262 AccessibilityManager::Get()->EnableHighContrast(false);
263 EXPECT_FALSE(IsTrayIconVisible());
265 // Toggling magnifier the visibility of the icon.
266 SetMagnifierEnabled(true);
267 EXPECT_TRUE(IsTrayIconVisible());
268 SetMagnifierEnabled(false);
269 EXPECT_FALSE(IsTrayIconVisible());
271 // Toggling the virtual keyboard setting changes the visibility of the a11y
273 AccessibilityManager::Get()->EnableVirtualKeyboard(true);
274 EXPECT_TRUE(IsTrayIconVisible());
275 AccessibilityManager::Get()->EnableVirtualKeyboard(false);
276 EXPECT_FALSE(IsTrayIconVisible());
278 // Enabling all accessibility features.
279 SetMagnifierEnabled(true);
280 EXPECT_TRUE(IsTrayIconVisible());
281 AccessibilityManager::Get()->EnableHighContrast(true);
282 EXPECT_TRUE(IsTrayIconVisible());
283 AccessibilityManager::Get()->EnableSpokenFeedback(
284 true, ash::A11Y_NOTIFICATION_NONE);
285 EXPECT_TRUE(IsTrayIconVisible());
286 AccessibilityManager::Get()->EnableVirtualKeyboard(true);
287 EXPECT_TRUE(IsTrayIconVisible());
288 AccessibilityManager::Get()->EnableSpokenFeedback(
289 false, ash::A11Y_NOTIFICATION_NONE);
290 EXPECT_TRUE(IsTrayIconVisible());
291 AccessibilityManager::Get()->EnableHighContrast(false);
292 EXPECT_TRUE(IsTrayIconVisible());
293 SetMagnifierEnabled(false);
294 EXPECT_TRUE(IsTrayIconVisible());
295 AccessibilityManager::Get()->EnableVirtualKeyboard(false);
296 EXPECT_FALSE(IsTrayIconVisible());
298 // Confirms that prefs::kShouldAlwaysShowAccessibilityMenu doesn't affect
299 // the icon on the tray.
300 SetShowAccessibilityOptionsInSystemTrayMenu(true);
301 AccessibilityManager::Get()->EnableHighContrast(true);
302 EXPECT_TRUE(IsTrayIconVisible());
303 AccessibilityManager::Get()->EnableHighContrast(false);
304 EXPECT_FALSE(IsTrayIconVisible());
307 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, ShowMenu) {
309 UserManager::Get()->UserLoggedIn(
310 "owner@invalid.domain", "owner@invalid.domain", true);
311 UserManager::Get()->SessionStarted();
313 SetShowAccessibilityOptionsInSystemTrayMenu(false);
315 // Confirms that the menu is hidden.
316 EXPECT_FALSE(CanCreateMenuItem());
318 // Toggling spoken feedback changes the visibillity of the menu.
319 AccessibilityManager::Get()->EnableSpokenFeedback(
320 true, ash::A11Y_NOTIFICATION_NONE);
321 EXPECT_TRUE(CanCreateMenuItem());
322 AccessibilityManager::Get()->EnableSpokenFeedback(
323 false, ash::A11Y_NOTIFICATION_NONE);
324 EXPECT_FALSE(CanCreateMenuItem());
326 // Toggling high contrast changes the visibillity of the menu.
327 AccessibilityManager::Get()->EnableHighContrast(true);
328 EXPECT_TRUE(CanCreateMenuItem());
329 AccessibilityManager::Get()->EnableHighContrast(false);
330 EXPECT_FALSE(CanCreateMenuItem());
332 // Toggling screen magnifier changes the visibility of the menu.
333 SetMagnifierEnabled(true);
334 EXPECT_TRUE(CanCreateMenuItem());
335 SetMagnifierEnabled(false);
336 EXPECT_FALSE(CanCreateMenuItem());
338 // Toggling autoclick changes the visibility of the menu.
339 AccessibilityManager::Get()->EnableAutoclick(true);
340 EXPECT_TRUE(CanCreateMenuItem());
341 AccessibilityManager::Get()->EnableAutoclick(false);
342 EXPECT_FALSE(CanCreateMenuItem());
344 // Toggling virtual keyboard changes the visibility of the menu.
345 AccessibilityManager::Get()->EnableVirtualKeyboard(true);
346 EXPECT_TRUE(CanCreateMenuItem());
347 AccessibilityManager::Get()->EnableVirtualKeyboard(false);
348 EXPECT_FALSE(CanCreateMenuItem());
350 // Enabling all accessibility features.
351 SetMagnifierEnabled(true);
352 EXPECT_TRUE(CanCreateMenuItem());
353 AccessibilityManager::Get()->EnableHighContrast(true);
354 EXPECT_TRUE(CanCreateMenuItem());
355 AccessibilityManager::Get()->EnableSpokenFeedback(
356 true, ash::A11Y_NOTIFICATION_NONE);
357 EXPECT_TRUE(CanCreateMenuItem());
358 AccessibilityManager::Get()->EnableAutoclick(true);
359 EXPECT_TRUE(CanCreateMenuItem());
360 AccessibilityManager::Get()->EnableVirtualKeyboard(true);
361 EXPECT_TRUE(CanCreateMenuItem());
362 AccessibilityManager::Get()->EnableVirtualKeyboard(false);
363 EXPECT_TRUE(CanCreateMenuItem());
364 AccessibilityManager::Get()->EnableAutoclick(false);
365 EXPECT_TRUE(CanCreateMenuItem());
366 AccessibilityManager::Get()->EnableSpokenFeedback(
367 false, ash::A11Y_NOTIFICATION_NONE);
368 EXPECT_TRUE(CanCreateMenuItem());
369 AccessibilityManager::Get()->EnableHighContrast(false);
370 EXPECT_TRUE(CanCreateMenuItem());
371 SetMagnifierEnabled(false);
372 EXPECT_FALSE(CanCreateMenuItem());
375 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, ShowMenuWithShowMenuOption) {
377 UserManager::Get()->UserLoggedIn(
378 "owner@invalid.domain", "owner@invalid.domain", true);
379 UserManager::Get()->SessionStarted();
381 SetShowAccessibilityOptionsInSystemTrayMenu(true);
383 // Confirms that the menu is visible.
384 EXPECT_TRUE(CanCreateMenuItem());
386 // The menu remains visible regardless of toggling spoken feedback.
387 AccessibilityManager::Get()->EnableSpokenFeedback(
388 true, ash::A11Y_NOTIFICATION_NONE);
389 EXPECT_TRUE(CanCreateMenuItem());
390 AccessibilityManager::Get()->EnableSpokenFeedback(
391 false, ash::A11Y_NOTIFICATION_NONE);
392 EXPECT_TRUE(CanCreateMenuItem());
394 // The menu remains visible regardless of toggling high contrast.
395 AccessibilityManager::Get()->EnableHighContrast(true);
396 EXPECT_TRUE(CanCreateMenuItem());
397 AccessibilityManager::Get()->EnableHighContrast(false);
398 EXPECT_TRUE(CanCreateMenuItem());
400 // The menu remains visible regardless of toggling screen magnifier.
401 SetMagnifierEnabled(true);
402 EXPECT_TRUE(CanCreateMenuItem());
403 SetMagnifierEnabled(false);
404 EXPECT_TRUE(CanCreateMenuItem());
406 // The menu remains visible regardless of toggling autoclick.
407 AccessibilityManager::Get()->EnableAutoclick(true);
408 EXPECT_TRUE(CanCreateMenuItem());
409 AccessibilityManager::Get()->EnableAutoclick(false);
410 EXPECT_TRUE(CanCreateMenuItem());
412 // The menu remains visible regardless of toggling on-screen keyboard.
413 AccessibilityManager::Get()->EnableVirtualKeyboard(true);
414 EXPECT_TRUE(CanCreateMenuItem());
415 AccessibilityManager::Get()->EnableVirtualKeyboard(false);
416 EXPECT_TRUE(CanCreateMenuItem());
418 // Enabling all accessibility features.
419 SetMagnifierEnabled(true);
420 EXPECT_TRUE(CanCreateMenuItem());
421 AccessibilityManager::Get()->EnableHighContrast(true);
422 EXPECT_TRUE(CanCreateMenuItem());
423 AccessibilityManager::Get()->EnableSpokenFeedback(
424 true, ash::A11Y_NOTIFICATION_NONE);
425 EXPECT_TRUE(CanCreateMenuItem());
426 AccessibilityManager::Get()->EnableAutoclick(true);
427 EXPECT_TRUE(CanCreateMenuItem());
428 AccessibilityManager::Get()->EnableVirtualKeyboard(true);
429 EXPECT_TRUE(CanCreateMenuItem());
430 AccessibilityManager::Get()->EnableVirtualKeyboard(false);
431 EXPECT_TRUE(CanCreateMenuItem());
432 AccessibilityManager::Get()->EnableAutoclick(false);
433 EXPECT_TRUE(CanCreateMenuItem());
434 AccessibilityManager::Get()->EnableSpokenFeedback(
435 false, ash::A11Y_NOTIFICATION_NONE);
436 EXPECT_TRUE(CanCreateMenuItem());
437 AccessibilityManager::Get()->EnableHighContrast(false);
438 EXPECT_TRUE(CanCreateMenuItem());
439 SetMagnifierEnabled(false);
440 EXPECT_TRUE(CanCreateMenuItem());
442 SetShowAccessibilityOptionsInSystemTrayMenu(false);
444 // Confirms that the menu is invisible.
445 EXPECT_FALSE(CanCreateMenuItem());
448 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, ShowMenuWithShowOnLoginScreen) {
449 SetLoginStatus(ash::user::LOGGED_IN_NONE);
451 // Confirms that the menu is visible.
452 EXPECT_TRUE(CanCreateMenuItem());
454 // The menu remains visible regardless of toggling spoken feedback.
455 AccessibilityManager::Get()->EnableSpokenFeedback(
456 true, ash::A11Y_NOTIFICATION_NONE);
457 EXPECT_TRUE(CanCreateMenuItem());
458 AccessibilityManager::Get()->EnableSpokenFeedback(
459 false, ash::A11Y_NOTIFICATION_NONE);
460 EXPECT_TRUE(CanCreateMenuItem());
462 // The menu remains visible regardless of toggling high contrast.
463 AccessibilityManager::Get()->EnableHighContrast(true);
464 EXPECT_TRUE(CanCreateMenuItem());
465 AccessibilityManager::Get()->EnableHighContrast(false);
466 EXPECT_TRUE(CanCreateMenuItem());
468 // The menu remains visible regardless of toggling screen magnifier.
469 SetMagnifierEnabled(true);
470 EXPECT_TRUE(CanCreateMenuItem());
471 SetMagnifierEnabled(false);
472 EXPECT_TRUE(CanCreateMenuItem());
474 // The menu remains visible regardless of toggling on-screen keyboard.
475 AccessibilityManager::Get()->EnableVirtualKeyboard(true);
476 EXPECT_TRUE(CanCreateMenuItem());
477 AccessibilityManager::Get()->EnableVirtualKeyboard(false);
478 EXPECT_TRUE(CanCreateMenuItem());
480 // Enabling all accessibility features.
481 SetMagnifierEnabled(true);
482 EXPECT_TRUE(CanCreateMenuItem());
483 AccessibilityManager::Get()->EnableHighContrast(true);
484 EXPECT_TRUE(CanCreateMenuItem());
485 AccessibilityManager::Get()->EnableSpokenFeedback(
486 true, ash::A11Y_NOTIFICATION_NONE);
487 EXPECT_TRUE(CanCreateMenuItem());
488 AccessibilityManager::Get()->EnableVirtualKeyboard(true);
489 EXPECT_TRUE(CanCreateMenuItem());
490 AccessibilityManager::Get()->EnableVirtualKeyboard(false);
491 EXPECT_TRUE(CanCreateMenuItem());
492 AccessibilityManager::Get()->EnableSpokenFeedback(
493 false, ash::A11Y_NOTIFICATION_NONE);
494 EXPECT_TRUE(CanCreateMenuItem());
495 AccessibilityManager::Get()->EnableHighContrast(false);
496 EXPECT_TRUE(CanCreateMenuItem());
497 SetMagnifierEnabled(false);
498 EXPECT_TRUE(CanCreateMenuItem());
500 SetShowAccessibilityOptionsInSystemTrayMenu(true);
502 // Confirms that the menu remains visible.
503 EXPECT_TRUE(CanCreateMenuItem());
505 SetShowAccessibilityOptionsInSystemTrayMenu(false);
507 // Confirms that the menu remains visible.
508 EXPECT_TRUE(CanCreateMenuItem());
511 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, KeepMenuVisibilityOnLockScreen) {
512 // Enables high contrast mode.
513 AccessibilityManager::Get()->EnableHighContrast(true);
514 EXPECT_TRUE(CanCreateMenuItem());
517 SetLoginStatus(ash::user::LOGGED_IN_LOCKED);
518 EXPECT_TRUE(CanCreateMenuItem());
520 // Disables high contrast mode.
521 AccessibilityManager::Get()->EnableHighContrast(false);
523 // Confirms that the menu is still visible.
524 EXPECT_TRUE(CanCreateMenuItem());
527 #if defined(OS_CHROMEOS)
528 #define MAYBE_ClickDetailMenu DISABLED_ClickDetailMenu
530 #define MAYBE_ClickDetailMenu ClickDetailMenu
533 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, MAYBE_ClickDetailMenu) {
534 // Confirms that the check item toggles the spoken feedback.
535 EXPECT_FALSE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled());
537 EXPECT_TRUE(CreateDetailedMenu());
538 ClickSpokenFeedbackOnDetailMenu();
539 EXPECT_TRUE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled());
541 EXPECT_TRUE(CreateDetailedMenu());
542 ClickSpokenFeedbackOnDetailMenu();
543 EXPECT_FALSE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled());
545 // Confirms that the check item toggles the high contrast.
546 EXPECT_FALSE(AccessibilityManager::Get()->IsHighContrastEnabled());
548 EXPECT_TRUE(CreateDetailedMenu());
549 ClickHighContrastOnDetailMenu();
550 EXPECT_TRUE(AccessibilityManager::Get()->IsHighContrastEnabled());
552 EXPECT_TRUE(CreateDetailedMenu());
553 ClickHighContrastOnDetailMenu();
554 EXPECT_FALSE(AccessibilityManager::Get()->IsHighContrastEnabled());
556 // Confirms that the check item toggles the magnifier.
557 EXPECT_FALSE(AccessibilityManager::Get()->IsHighContrastEnabled());
559 EXPECT_FALSE(MagnificationManager::Get()->IsMagnifierEnabled());
560 EXPECT_TRUE(CreateDetailedMenu());
561 ClickScreenMagnifierOnDetailMenu();
562 EXPECT_TRUE(MagnificationManager::Get()->IsMagnifierEnabled());
564 EXPECT_TRUE(CreateDetailedMenu());
565 ClickScreenMagnifierOnDetailMenu();
566 EXPECT_FALSE(MagnificationManager::Get()->IsMagnifierEnabled());
568 // Confirms that the check item toggles autoclick.
569 EXPECT_FALSE(AccessibilityManager::Get()->IsAutoclickEnabled());
571 EXPECT_TRUE(CreateDetailedMenu());
572 ClickAutoclickOnDetailMenu();
573 EXPECT_TRUE(AccessibilityManager::Get()->IsAutoclickEnabled());
575 EXPECT_TRUE(CreateDetailedMenu());
576 ClickAutoclickOnDetailMenu();
577 EXPECT_FALSE(AccessibilityManager::Get()->IsAutoclickEnabled());
579 // Confirms that the check item toggles on-screen keyboard.
580 EXPECT_FALSE(AccessibilityManager::Get()->IsVirtualKeyboardEnabled());
582 EXPECT_TRUE(CreateDetailedMenu());
583 ClickVirtualKeyboardOnDetailMenu();
584 EXPECT_TRUE(AccessibilityManager::Get()->IsVirtualKeyboardEnabled());
586 EXPECT_TRUE(CreateDetailedMenu());
587 ClickVirtualKeyboardOnDetailMenu();
588 EXPECT_FALSE(AccessibilityManager::Get()->IsVirtualKeyboardEnabled());
591 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, CheckMarksOnDetailMenu) {
592 SetLoginStatus(ash::user::LOGGED_IN_NONE);
594 // At first, all of the check is unchecked.
595 EXPECT_TRUE(CreateDetailedMenu());
596 EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
597 EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
598 EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
599 EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
600 EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
601 EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
604 // Enabling spoken feedback.
605 AccessibilityManager::Get()->EnableSpokenFeedback(
606 true, ash::A11Y_NOTIFICATION_NONE);
607 EXPECT_TRUE(CreateDetailedMenu());
608 EXPECT_TRUE(IsSpokenFeedbackEnabledOnDetailMenu());
609 EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
610 EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
611 EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
612 EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
613 EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
616 // Disabling spoken feedback.
617 AccessibilityManager::Get()->EnableSpokenFeedback(
618 false, ash::A11Y_NOTIFICATION_NONE);
619 EXPECT_TRUE(CreateDetailedMenu());
620 EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
621 EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
622 EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
623 EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
624 EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
625 EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
628 // Enabling high contrast.
629 AccessibilityManager::Get()->EnableHighContrast(true);
630 EXPECT_TRUE(CreateDetailedMenu());
631 EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
632 EXPECT_TRUE(IsHighContrastEnabledOnDetailMenu());
633 EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
634 EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
635 EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
636 EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
639 // Disabling high contrast.
640 AccessibilityManager::Get()->EnableHighContrast(false);
641 EXPECT_TRUE(CreateDetailedMenu());
642 EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
643 EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
644 EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
645 EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
646 EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
647 EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
650 // Enabling full screen magnifier.
651 SetMagnifierEnabled(true);
652 EXPECT_TRUE(CreateDetailedMenu());
653 EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
654 EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
655 EXPECT_TRUE(IsScreenMagnifierEnabledOnDetailMenu());
656 EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
657 EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
658 EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
661 // Disabling screen magnifier.
662 SetMagnifierEnabled(false);
663 EXPECT_TRUE(CreateDetailedMenu());
664 EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
665 EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
666 EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
667 EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
668 EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
669 EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
672 // Enabling large cursor.
673 AccessibilityManager::Get()->EnableLargeCursor(true);
674 EXPECT_TRUE(CreateDetailedMenu());
675 EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
676 EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
677 EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
678 EXPECT_TRUE(IsLargeCursorEnabledOnDetailMenu());
679 EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
680 EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
683 // Disabling large cursor.
684 AccessibilityManager::Get()->EnableLargeCursor(false);
685 EXPECT_TRUE(CreateDetailedMenu());
686 EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
687 EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
688 EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
689 EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
690 EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
691 EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
694 // Enable on-screen keyboard.
695 AccessibilityManager::Get()->EnableVirtualKeyboard(true);
696 EXPECT_TRUE(CreateDetailedMenu());
697 EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
698 EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
699 EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
700 EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
701 EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
702 EXPECT_TRUE(IsVirtualKeyboardEnabledOnDetailMenu());
705 // Disable on-screen keyboard.
706 AccessibilityManager::Get()->EnableVirtualKeyboard(false);
707 EXPECT_TRUE(CreateDetailedMenu());
708 EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
709 EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
710 EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
711 EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
712 EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
713 EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
716 // Enabling all of the a11y features.
717 AccessibilityManager::Get()->EnableSpokenFeedback(
718 true, ash::A11Y_NOTIFICATION_NONE);
719 AccessibilityManager::Get()->EnableHighContrast(true);
720 SetMagnifierEnabled(true);
721 AccessibilityManager::Get()->EnableLargeCursor(true);
722 AccessibilityManager::Get()->EnableVirtualKeyboard(true);
723 EXPECT_TRUE(CreateDetailedMenu());
724 EXPECT_TRUE(IsSpokenFeedbackEnabledOnDetailMenu());
725 EXPECT_TRUE(IsHighContrastEnabledOnDetailMenu());
726 EXPECT_TRUE(IsScreenMagnifierEnabledOnDetailMenu());
727 EXPECT_TRUE(IsLargeCursorEnabledOnDetailMenu());
728 EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
729 EXPECT_TRUE(IsVirtualKeyboardEnabledOnDetailMenu());
732 // Disabling all of the a11y features.
733 AccessibilityManager::Get()->EnableSpokenFeedback(
734 false, ash::A11Y_NOTIFICATION_NONE);
735 AccessibilityManager::Get()->EnableHighContrast(false);
736 SetMagnifierEnabled(false);
737 AccessibilityManager::Get()->EnableLargeCursor(false);
738 AccessibilityManager::Get()->EnableVirtualKeyboard(false);
739 EXPECT_TRUE(CreateDetailedMenu());
740 EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
741 EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
742 EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
743 EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
744 EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
745 EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
748 // Autoclick is disabled on login screen.
749 SetLoginStatus(ash::user::LOGGED_IN_USER);
751 // Enabling autoclick.
752 AccessibilityManager::Get()->EnableAutoclick(true);
753 EXPECT_TRUE(CreateDetailedMenu());
754 EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
755 EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
756 EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
757 EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
758 EXPECT_TRUE(IsAutoclickEnabledOnDetailMenu());
759 EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
762 // Disabling autoclick.
763 AccessibilityManager::Get()->EnableAutoclick(false);
764 EXPECT_TRUE(CreateDetailedMenu());
765 EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
766 EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
767 EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
768 EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
769 EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
770 EXPECT_FALSE(IsVirtualKeyboardEnabledOnDetailMenu());
774 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, CheckMenuVisibilityOnDetailMenu) {
775 SetLoginStatus(ash::user::LOGGED_IN_NONE);
776 EXPECT_TRUE(CreateDetailedMenu());
777 EXPECT_TRUE(IsSpokenFeedbackMenuShownOnDetailMenu());
778 EXPECT_TRUE(IsHighContrastMenuShownOnDetailMenu());
779 EXPECT_TRUE(IsScreenMagnifierMenuShownOnDetailMenu());
780 EXPECT_TRUE(IsLargeCursorMenuShownOnDetailMenu());
781 EXPECT_FALSE(IsAutoclickMenuShownOnDetailMenu());
782 EXPECT_TRUE(IsVirtualKeyboardMenuShownOnDetailMenu());
785 SetLoginStatus(ash::user::LOGGED_IN_USER);
786 EXPECT_TRUE(CreateDetailedMenu());
787 EXPECT_TRUE(IsSpokenFeedbackMenuShownOnDetailMenu());
788 EXPECT_TRUE(IsHighContrastMenuShownOnDetailMenu());
789 EXPECT_TRUE(IsScreenMagnifierMenuShownOnDetailMenu());
790 EXPECT_FALSE(IsLargeCursorMenuShownOnDetailMenu());
791 EXPECT_TRUE(IsAutoclickMenuShownOnDetailMenu());
792 EXPECT_TRUE(IsVirtualKeyboardMenuShownOnDetailMenu());
795 SetLoginStatus(ash::user::LOGGED_IN_LOCKED);
796 EXPECT_TRUE(CreateDetailedMenu());
797 EXPECT_TRUE(IsSpokenFeedbackMenuShownOnDetailMenu());
798 EXPECT_TRUE(IsHighContrastMenuShownOnDetailMenu());
799 EXPECT_TRUE(IsScreenMagnifierMenuShownOnDetailMenu());
800 EXPECT_FALSE(IsLargeCursorMenuShownOnDetailMenu());
801 EXPECT_TRUE(IsAutoclickMenuShownOnDetailMenu());
802 EXPECT_TRUE(IsVirtualKeyboardMenuShownOnDetailMenu());
806 INSTANTIATE_TEST_CASE_P(TrayAccessibilityTestInstance,
807 TrayAccessibilityTest,
808 testing::Values(PREF_SERVICE,
811 } // namespace chromeos