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/policy/browser_policy_connector.h"
23 #include "chrome/browser/policy/external_data_fetcher.h"
24 #include "chrome/browser/policy/mock_configuration_policy_provider.h"
25 #include "chrome/browser/policy/policy_map.h"
26 #include "chrome/browser/policy/policy_types.h"
27 #include "chrome/browser/profiles/profile.h"
28 #include "chrome/browser/profiles/profile_manager.h"
29 #include "chrome/common/chrome_switches.h"
30 #include "chrome/common/pref_names.h"
31 #include "chrome/test/base/in_process_browser_test.h"
32 #include "chrome/test/base/testing_profile.h"
33 #include "chromeos/chromeos_switches.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::AnyNumber;
40 using testing::Return;
42 using testing::WithParamInterface;
46 enum PrefSettingMechanism {
51 void SetMagnifierEnabled(bool enabled) {
52 MagnificationManager::Get()->SetMagnifierEnabled(enabled);
55 class TrayAccessibilityTest
56 : public InProcessBrowserTest,
57 public WithParamInterface<PrefSettingMechanism> {
59 TrayAccessibilityTest() {}
60 virtual ~TrayAccessibilityTest() {}
62 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
63 EXPECT_CALL(provider_, IsInitializationComplete(_))
64 .WillRepeatedly(Return(true));
65 EXPECT_CALL(provider_, RegisterPolicyDomain(_)).Times(AnyNumber());
66 policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
69 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
70 command_line->AppendSwitch(switches::kLoginManager);
71 command_line->AppendSwitchASCII(switches::kLoginProfile,
72 TestingProfile::kTestUserProfileDir);
75 virtual void SetUpOnMainThread() OVERRIDE {
76 AccessibilityManager::Get()->SetProfileForTest(
77 ProfileManager::GetDefaultProfile());
78 MagnificationManager::Get()->SetProfileForTest(
79 ProfileManager::GetDefaultProfile());
82 virtual void RunTestOnMainThreadLoop() OVERRIDE {
83 // Need to mark oobe completed to show detailed views.
84 StartupUtils::MarkOobeCompleted();
85 InProcessBrowserTest::RunTestOnMainThreadLoop();
88 void SetShowAccessibilityOptionsInSystemTrayMenu(bool value) {
89 if (GetParam() == PREF_SERVICE) {
90 Profile* profile = ProfileManager::GetDefaultProfile();
91 PrefService* prefs = profile->GetPrefs();
92 prefs->SetBoolean(prefs::kShouldAlwaysShowAccessibilityMenu, value);
93 } else if (GetParam() == POLICY) {
94 policy::PolicyMap policy_map;
95 policy_map.Set(policy::key::kShowAccessibilityOptionsInSystemTrayMenu,
96 policy::POLICY_LEVEL_MANDATORY,
97 policy::POLICY_SCOPE_USER,
98 base::Value::CreateBooleanValue(value),
100 provider_.UpdateChromePolicy(policy_map);
101 base::RunLoop().RunUntilIdle();
103 FAIL() << "Unknown test parameterization";
107 ash::internal::TrayAccessibility* tray() {
108 return ash::Shell::GetInstance()->GetPrimarySystemTray()->
109 GetTrayAccessibilityForTest();
112 bool IsTrayIconVisible() {
113 return tray()->tray_icon_visible_;
116 views::View* CreateMenuItem() {
117 return tray()->CreateDefaultView(GetLoginStatus());
120 void DestroyMenuItem() {
121 return tray()->DestroyDefaultView();
124 bool CanCreateMenuItem() {
125 views::View* menu_item_view = CreateMenuItem();
127 return menu_item_view != NULL;
130 void SetLoginStatus(ash::user::LoginStatus status) {
131 tray()->UpdateAfterLoginStatusChange(status);
134 ash::user::LoginStatus GetLoginStatus() {
135 return tray()->login_;
138 bool CreateDetailedMenu() {
139 tray()->PopupDetailedView(0, false);
140 return tray()->detailed_menu_ != NULL;
143 void CloseDetailMenu() {
144 CHECK(tray()->detailed_menu_);
145 tray()->DestroyDetailedView();
146 tray()->detailed_menu_ = NULL;
149 void ClickSpokenFeedbackOnDetailMenu() {
150 views::View* button = tray()->detailed_menu_->spoken_feedback_view_;
151 tray()->detailed_menu_->OnViewClicked(button);
154 void ClickHighContrastOnDetailMenu() {
155 views::View* button = tray()->detailed_menu_->high_contrast_view_;
157 tray()->detailed_menu_->OnViewClicked(button);
160 void ClickScreenMagnifierOnDetailMenu() {
161 views::View* button = tray()->detailed_menu_->screen_magnifier_view_;
163 tray()->detailed_menu_->OnViewClicked(button);
166 void ClickAutoclickOnDetailMenu() {
167 views::View* button = tray()->detailed_menu_->autoclick_view_;
169 tray()->detailed_menu_->OnViewClicked(button);
172 bool IsSpokenFeedbackEnabledOnDetailMenu() {
173 return tray()->detailed_menu_->spoken_feedback_enabled_;
176 bool IsHighContrastEnabledOnDetailMenu() {
177 return tray()->detailed_menu_->high_contrast_enabled_;
180 bool IsScreenMagnifierEnabledOnDetailMenu() {
181 return tray()->detailed_menu_->screen_magnifier_enabled_;
184 bool IsLargeCursorEnabledOnDetailMenu() {
185 return tray()->detailed_menu_->large_cursor_enabled_;
188 bool IsAutoclickEnabledOnDetailMenu() {
189 return tray()->detailed_menu_->autoclick_enabled_;
191 bool IsSpokenFeedbackMenuShownOnDetailMenu() {
192 return tray()->detailed_menu_->spoken_feedback_view_;
195 bool IsHighContrastMenuShownOnDetailMenu() {
196 return tray()->detailed_menu_->high_contrast_view_;
199 bool IsScreenMagnifierMenuShownOnDetailMenu() {
200 return tray()->detailed_menu_->screen_magnifier_view_;
203 bool IsLargeCursorMenuShownOnDetailMenu() {
204 return tray()->detailed_menu_->large_cursor_view_;
207 bool IsAutoclickMenuShownOnDetailMenu() {
208 return tray()->detailed_menu_->autoclick_view_;
211 policy::MockConfigurationPolicyProvider provider_;
214 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, LoginStatus) {
215 EXPECT_EQ(ash::user::LOGGED_IN_NONE, GetLoginStatus());
217 UserManager::Get()->UserLoggedIn(
218 "owner@invalid.domain", "owner@invalid.domain", true);
219 UserManager::Get()->SessionStarted();
221 EXPECT_EQ(ash::user::LOGGED_IN_USER, GetLoginStatus());
224 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, ShowTrayIcon) {
225 SetLoginStatus(ash::user::LOGGED_IN_NONE);
227 // Confirms that the icon is invisible before login.
228 EXPECT_FALSE(IsTrayIconVisible());
230 UserManager::Get()->UserLoggedIn(
231 "owner@invalid.domain", "owner@invalid.domain", true);
232 UserManager::Get()->SessionStarted();
234 // Confirms that the icon is invisible just after login.
235 EXPECT_FALSE(IsTrayIconVisible());
237 // Toggling spoken feedback changes the visibillity of the icon.
238 AccessibilityManager::Get()->EnableSpokenFeedback(
239 true, ash::A11Y_NOTIFICATION_NONE);
240 EXPECT_TRUE(IsTrayIconVisible());
241 AccessibilityManager::Get()->EnableSpokenFeedback(
242 false, ash::A11Y_NOTIFICATION_NONE);
243 EXPECT_FALSE(IsTrayIconVisible());
245 // Toggling high contrast the visibillity of the icon.
246 AccessibilityManager::Get()->EnableHighContrast(true);
247 EXPECT_TRUE(IsTrayIconVisible());
248 AccessibilityManager::Get()->EnableHighContrast(false);
249 EXPECT_FALSE(IsTrayIconVisible());
251 // Toggling magnifier the visibility of the icon.
252 SetMagnifierEnabled(true);
253 EXPECT_TRUE(IsTrayIconVisible());
254 SetMagnifierEnabled(false);
255 EXPECT_FALSE(IsTrayIconVisible());
257 // Enabling all accessibility features.
258 SetMagnifierEnabled(true);
259 EXPECT_TRUE(IsTrayIconVisible());
260 AccessibilityManager::Get()->EnableHighContrast(true);
261 EXPECT_TRUE(IsTrayIconVisible());
262 AccessibilityManager::Get()->EnableSpokenFeedback(
263 true, ash::A11Y_NOTIFICATION_NONE);
264 EXPECT_TRUE(IsTrayIconVisible());
265 AccessibilityManager::Get()->EnableSpokenFeedback(
266 false, ash::A11Y_NOTIFICATION_NONE);
267 EXPECT_TRUE(IsTrayIconVisible());
268 AccessibilityManager::Get()->EnableHighContrast(false);
269 EXPECT_TRUE(IsTrayIconVisible());
270 SetMagnifierEnabled(false);
271 EXPECT_FALSE(IsTrayIconVisible());
273 // Confirms that prefs::kShouldAlwaysShowAccessibilityMenu doesn't affect
274 // the icon on the tray.
275 SetShowAccessibilityOptionsInSystemTrayMenu(true);
276 AccessibilityManager::Get()->EnableHighContrast(true);
277 EXPECT_TRUE(IsTrayIconVisible());
278 AccessibilityManager::Get()->EnableHighContrast(false);
279 EXPECT_FALSE(IsTrayIconVisible());
282 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, ShowMenu) {
284 UserManager::Get()->UserLoggedIn(
285 "owner@invalid.domain", "owner@invalid.domain", true);
286 UserManager::Get()->SessionStarted();
288 SetShowAccessibilityOptionsInSystemTrayMenu(false);
290 // Confirms that the menu is hidden.
291 EXPECT_FALSE(CanCreateMenuItem());
293 // Toggling spoken feedback changes the visibillity of the menu.
294 AccessibilityManager::Get()->EnableSpokenFeedback(
295 true, ash::A11Y_NOTIFICATION_NONE);
296 EXPECT_TRUE(CanCreateMenuItem());
297 AccessibilityManager::Get()->EnableSpokenFeedback(
298 false, ash::A11Y_NOTIFICATION_NONE);
299 EXPECT_FALSE(CanCreateMenuItem());
301 // Toggling high contrast changes the visibillity of the menu.
302 AccessibilityManager::Get()->EnableHighContrast(true);
303 EXPECT_TRUE(CanCreateMenuItem());
304 AccessibilityManager::Get()->EnableHighContrast(false);
305 EXPECT_FALSE(CanCreateMenuItem());
307 // Toggling screen magnifier changes the visibility of the menu.
308 SetMagnifierEnabled(true);
309 EXPECT_TRUE(CanCreateMenuItem());
310 SetMagnifierEnabled(false);
311 EXPECT_FALSE(CanCreateMenuItem());
313 // Toggling autoclick changes the visibility of the menu.
314 AccessibilityManager::Get()->EnableAutoclick(true);
315 EXPECT_TRUE(CanCreateMenuItem());
316 AccessibilityManager::Get()->EnableAutoclick(false);
317 EXPECT_FALSE(CanCreateMenuItem());
319 // Enabling all accessibility features.
320 SetMagnifierEnabled(true);
321 EXPECT_TRUE(CanCreateMenuItem());
322 AccessibilityManager::Get()->EnableHighContrast(true);
323 EXPECT_TRUE(CanCreateMenuItem());
324 AccessibilityManager::Get()->EnableSpokenFeedback(
325 true, ash::A11Y_NOTIFICATION_NONE);
326 EXPECT_TRUE(CanCreateMenuItem());
327 AccessibilityManager::Get()->EnableAutoclick(true);
328 EXPECT_TRUE(CanCreateMenuItem());
329 AccessibilityManager::Get()->EnableAutoclick(false);
330 EXPECT_TRUE(CanCreateMenuItem());
331 AccessibilityManager::Get()->EnableSpokenFeedback(
332 false, ash::A11Y_NOTIFICATION_NONE);
333 EXPECT_TRUE(CanCreateMenuItem());
334 AccessibilityManager::Get()->EnableHighContrast(false);
335 EXPECT_TRUE(CanCreateMenuItem());
336 SetMagnifierEnabled(false);
337 EXPECT_FALSE(CanCreateMenuItem());
340 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, ShowMenuWithShowMenuOption) {
342 UserManager::Get()->UserLoggedIn(
343 "owner@invalid.domain", "owner@invalid.domain", true);
344 UserManager::Get()->SessionStarted();
346 SetShowAccessibilityOptionsInSystemTrayMenu(true);
348 // Confirms that the menu is visible.
349 EXPECT_TRUE(CanCreateMenuItem());
351 // The menu is keeping visible regardless of toggling spoken feedback.
352 AccessibilityManager::Get()->EnableSpokenFeedback(
353 true, ash::A11Y_NOTIFICATION_NONE);
354 EXPECT_TRUE(CanCreateMenuItem());
355 AccessibilityManager::Get()->EnableSpokenFeedback(
356 false, ash::A11Y_NOTIFICATION_NONE);
357 EXPECT_TRUE(CanCreateMenuItem());
359 // The menu is keeping visible regardless of toggling high contrast.
360 AccessibilityManager::Get()->EnableHighContrast(true);
361 EXPECT_TRUE(CanCreateMenuItem());
362 AccessibilityManager::Get()->EnableHighContrast(false);
363 EXPECT_TRUE(CanCreateMenuItem());
365 // The menu is keeping visible regardless of toggling screen magnifier.
366 SetMagnifierEnabled(true);
367 EXPECT_TRUE(CanCreateMenuItem());
368 SetMagnifierEnabled(false);
369 EXPECT_TRUE(CanCreateMenuItem());
371 // The menu is keeping visible regardless of toggling autoclick.
372 AccessibilityManager::Get()->EnableAutoclick(true);
373 EXPECT_TRUE(CanCreateMenuItem());
374 AccessibilityManager::Get()->EnableAutoclick(false);
375 EXPECT_TRUE(CanCreateMenuItem());
377 // Enabling all accessibility features.
378 SetMagnifierEnabled(true);
379 EXPECT_TRUE(CanCreateMenuItem());
380 AccessibilityManager::Get()->EnableHighContrast(true);
381 EXPECT_TRUE(CanCreateMenuItem());
382 AccessibilityManager::Get()->EnableSpokenFeedback(
383 true, ash::A11Y_NOTIFICATION_NONE);
384 EXPECT_TRUE(CanCreateMenuItem());
385 AccessibilityManager::Get()->EnableAutoclick(true);
386 EXPECT_TRUE(CanCreateMenuItem());
387 AccessibilityManager::Get()->EnableAutoclick(false);
388 EXPECT_TRUE(CanCreateMenuItem());
389 AccessibilityManager::Get()->EnableSpokenFeedback(
390 false, ash::A11Y_NOTIFICATION_NONE);
391 EXPECT_TRUE(CanCreateMenuItem());
392 AccessibilityManager::Get()->EnableHighContrast(false);
393 EXPECT_TRUE(CanCreateMenuItem());
394 SetMagnifierEnabled(false);
395 EXPECT_TRUE(CanCreateMenuItem());
397 SetShowAccessibilityOptionsInSystemTrayMenu(false);
399 // Confirms that the menu is invisible.
400 EXPECT_FALSE(CanCreateMenuItem());
403 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, ShowMenuWithShowOnLoginScreen) {
404 SetLoginStatus(ash::user::LOGGED_IN_NONE);
406 // Confirms that the menu is visible.
407 EXPECT_TRUE(CanCreateMenuItem());
409 // The menu is keeping visible regardless of toggling spoken feedback.
410 AccessibilityManager::Get()->EnableSpokenFeedback(
411 true, ash::A11Y_NOTIFICATION_NONE);
412 EXPECT_TRUE(CanCreateMenuItem());
413 AccessibilityManager::Get()->EnableSpokenFeedback(
414 false, ash::A11Y_NOTIFICATION_NONE);
415 EXPECT_TRUE(CanCreateMenuItem());
417 // The menu is keeping visible regardless of toggling high contrast.
418 AccessibilityManager::Get()->EnableHighContrast(true);
419 EXPECT_TRUE(CanCreateMenuItem());
420 AccessibilityManager::Get()->EnableHighContrast(false);
421 EXPECT_TRUE(CanCreateMenuItem());
423 // The menu is keeping visible regardless of toggling screen magnifier.
424 SetMagnifierEnabled(true);
425 EXPECT_TRUE(CanCreateMenuItem());
426 SetMagnifierEnabled(false);
427 EXPECT_TRUE(CanCreateMenuItem());
429 // Enabling all accessibility features.
430 SetMagnifierEnabled(true);
431 EXPECT_TRUE(CanCreateMenuItem());
432 AccessibilityManager::Get()->EnableHighContrast(true);
433 EXPECT_TRUE(CanCreateMenuItem());
434 AccessibilityManager::Get()->EnableSpokenFeedback(
435 true, ash::A11Y_NOTIFICATION_NONE);
436 EXPECT_TRUE(CanCreateMenuItem());
437 AccessibilityManager::Get()->EnableSpokenFeedback(
438 false, ash::A11Y_NOTIFICATION_NONE);
439 EXPECT_TRUE(CanCreateMenuItem());
440 AccessibilityManager::Get()->EnableHighContrast(false);
441 EXPECT_TRUE(CanCreateMenuItem());
442 SetMagnifierEnabled(false);
443 EXPECT_TRUE(CanCreateMenuItem());
445 SetShowAccessibilityOptionsInSystemTrayMenu(true);
447 // Confirms that the menu is keeping visible.
448 EXPECT_TRUE(CanCreateMenuItem());
450 SetShowAccessibilityOptionsInSystemTrayMenu(false);
452 // Confirms that the menu is keeping visible.
453 EXPECT_TRUE(CanCreateMenuItem());
456 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, KeepMenuVisibilityOnLockScreen) {
457 // Enables high contrast mode.
458 AccessibilityManager::Get()->EnableHighContrast(true);
459 EXPECT_TRUE(CanCreateMenuItem());
462 SetLoginStatus(ash::user::LOGGED_IN_LOCKED);
463 EXPECT_TRUE(CanCreateMenuItem());
465 // Disables high contrast mode.
466 AccessibilityManager::Get()->EnableHighContrast(false);
468 // Confirms that the menu is still visible.
469 EXPECT_TRUE(CanCreateMenuItem());
472 #if defined(OS_CHROMEOS)
473 #define MAYBE_ClickDetailMenu DISABLED_ClickDetailMenu
475 #define MAYBE_ClickDetailMenu ClickDetailMenu
478 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, MAYBE_ClickDetailMenu) {
479 // Confirms that the check item toggles the spoken feedback.
480 EXPECT_FALSE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled());
482 EXPECT_TRUE(CreateDetailedMenu());
483 ClickSpokenFeedbackOnDetailMenu();
484 EXPECT_TRUE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled());
486 EXPECT_TRUE(CreateDetailedMenu());
487 ClickSpokenFeedbackOnDetailMenu();
488 EXPECT_FALSE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled());
490 // Confirms that the check item toggles the high contrast.
491 EXPECT_FALSE(AccessibilityManager::Get()->IsHighContrastEnabled());
493 EXPECT_TRUE(CreateDetailedMenu());
494 ClickHighContrastOnDetailMenu();
495 EXPECT_TRUE(AccessibilityManager::Get()->IsHighContrastEnabled());
497 EXPECT_TRUE(CreateDetailedMenu());
498 ClickHighContrastOnDetailMenu();
499 EXPECT_FALSE(AccessibilityManager::Get()->IsHighContrastEnabled());
501 // Confirms that the check item toggles the magnifier.
502 EXPECT_FALSE(AccessibilityManager::Get()->IsHighContrastEnabled());
504 EXPECT_FALSE(MagnificationManager::Get()->IsMagnifierEnabled());
505 EXPECT_TRUE(CreateDetailedMenu());
506 ClickScreenMagnifierOnDetailMenu();
507 EXPECT_TRUE(MagnificationManager::Get()->IsMagnifierEnabled());
509 EXPECT_TRUE(CreateDetailedMenu());
510 ClickScreenMagnifierOnDetailMenu();
511 EXPECT_FALSE(MagnificationManager::Get()->IsMagnifierEnabled());
513 // Confirms that the check item toggles autoclick.
514 EXPECT_FALSE(AccessibilityManager::Get()->IsAutoclickEnabled());
516 EXPECT_TRUE(CreateDetailedMenu());
517 ClickAutoclickOnDetailMenu();
518 EXPECT_TRUE(AccessibilityManager::Get()->IsAutoclickEnabled());
520 EXPECT_TRUE(CreateDetailedMenu());
521 ClickAutoclickOnDetailMenu();
522 EXPECT_FALSE(AccessibilityManager::Get()->IsAutoclickEnabled());
525 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, CheckMarksOnDetailMenu) {
526 SetLoginStatus(ash::user::LOGGED_IN_NONE);
528 // At first, all of the check is unchecked.
529 EXPECT_TRUE(CreateDetailedMenu());
530 EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
531 EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
532 EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
533 EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
534 EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
535 EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
538 // Enabling spoken feedback.
539 AccessibilityManager::Get()->EnableSpokenFeedback(
540 true, ash::A11Y_NOTIFICATION_NONE);
541 EXPECT_TRUE(CreateDetailedMenu());
542 EXPECT_TRUE(IsSpokenFeedbackEnabledOnDetailMenu());
543 EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
544 EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
545 EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
546 EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
549 // Disabling spoken feedback.
550 AccessibilityManager::Get()->EnableSpokenFeedback(
551 false, ash::A11Y_NOTIFICATION_NONE);
552 EXPECT_TRUE(CreateDetailedMenu());
553 EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
554 EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
555 EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
556 EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
557 EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
560 // Enabling high contrast.
561 AccessibilityManager::Get()->EnableHighContrast(true);
562 EXPECT_TRUE(CreateDetailedMenu());
563 EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
564 EXPECT_TRUE(IsHighContrastEnabledOnDetailMenu());
565 EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
566 EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
567 EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
570 // Disabling high contrast.
571 AccessibilityManager::Get()->EnableHighContrast(false);
572 EXPECT_TRUE(CreateDetailedMenu());
573 EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
574 EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
575 EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
576 EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
577 EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
580 // Enabling full screen magnifier.
581 SetMagnifierEnabled(true);
582 EXPECT_TRUE(CreateDetailedMenu());
583 EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
584 EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
585 EXPECT_TRUE(IsScreenMagnifierEnabledOnDetailMenu());
586 EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
587 EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
590 // Disabling screen magnifier.
591 SetMagnifierEnabled(false);
592 EXPECT_TRUE(CreateDetailedMenu());
593 EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
594 EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
595 EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
596 EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
597 EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
600 // Enabling large cursor.
601 AccessibilityManager::Get()->EnableLargeCursor(true);
602 EXPECT_TRUE(CreateDetailedMenu());
603 EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
604 EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
605 EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
606 EXPECT_TRUE(IsLargeCursorEnabledOnDetailMenu());
607 EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
610 // Disabling large cursor.
611 AccessibilityManager::Get()->EnableLargeCursor(false);
612 EXPECT_TRUE(CreateDetailedMenu());
613 EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
614 EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
615 EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
616 EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
617 EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
620 // Enabling all of the a11y features.
621 AccessibilityManager::Get()->EnableSpokenFeedback(
622 true, ash::A11Y_NOTIFICATION_NONE);
623 AccessibilityManager::Get()->EnableHighContrast(true);
624 SetMagnifierEnabled(true);
625 AccessibilityManager::Get()->EnableLargeCursor(true);
626 EXPECT_TRUE(CreateDetailedMenu());
627 EXPECT_TRUE(IsSpokenFeedbackEnabledOnDetailMenu());
628 EXPECT_TRUE(IsHighContrastEnabledOnDetailMenu());
629 EXPECT_TRUE(IsScreenMagnifierEnabledOnDetailMenu());
630 EXPECT_TRUE(IsLargeCursorEnabledOnDetailMenu());
631 EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
634 // Disabling all of the a11y features.
635 AccessibilityManager::Get()->EnableSpokenFeedback(
636 false, ash::A11Y_NOTIFICATION_NONE);
637 AccessibilityManager::Get()->EnableHighContrast(false);
638 SetMagnifierEnabled(false);
639 AccessibilityManager::Get()->EnableLargeCursor(false);
640 EXPECT_TRUE(CreateDetailedMenu());
641 EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
642 EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
643 EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
644 EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
645 EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
648 // Autoclick is disabled on login screen.
649 SetLoginStatus(ash::user::LOGGED_IN_USER);
651 // Enabling autoclick.
652 AccessibilityManager::Get()->EnableAutoclick(true);
653 EXPECT_TRUE(CreateDetailedMenu());
654 EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
655 EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
656 EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
657 EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
658 EXPECT_TRUE(IsAutoclickEnabledOnDetailMenu());
661 // Disabling autoclick.
662 AccessibilityManager::Get()->EnableAutoclick(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());
672 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, CheckMenuVisibilityOnDetailMenu) {
673 SetLoginStatus(ash::user::LOGGED_IN_NONE);
674 EXPECT_TRUE(CreateDetailedMenu());
675 EXPECT_TRUE(IsSpokenFeedbackMenuShownOnDetailMenu());
676 EXPECT_TRUE(IsHighContrastMenuShownOnDetailMenu());
677 EXPECT_TRUE(IsScreenMagnifierMenuShownOnDetailMenu());
678 EXPECT_TRUE(IsLargeCursorMenuShownOnDetailMenu());
679 EXPECT_FALSE(IsAutoclickMenuShownOnDetailMenu());
682 SetLoginStatus(ash::user::LOGGED_IN_USER);
683 EXPECT_TRUE(CreateDetailedMenu());
684 EXPECT_TRUE(IsSpokenFeedbackMenuShownOnDetailMenu());
685 EXPECT_TRUE(IsHighContrastMenuShownOnDetailMenu());
686 EXPECT_TRUE(IsScreenMagnifierMenuShownOnDetailMenu());
687 EXPECT_FALSE(IsLargeCursorMenuShownOnDetailMenu());
688 EXPECT_TRUE(IsAutoclickMenuShownOnDetailMenu());
691 SetLoginStatus(ash::user::LOGGED_IN_LOCKED);
692 EXPECT_TRUE(CreateDetailedMenu());
693 EXPECT_TRUE(IsSpokenFeedbackMenuShownOnDetailMenu());
694 EXPECT_TRUE(IsHighContrastMenuShownOnDetailMenu());
695 EXPECT_TRUE(IsScreenMagnifierMenuShownOnDetailMenu());
696 EXPECT_FALSE(IsLargeCursorMenuShownOnDetailMenu());
697 EXPECT_TRUE(IsAutoclickMenuShownOnDetailMenu());
701 INSTANTIATE_TEST_CASE_P(TrayAccessibilityTestInstance,
702 TrayAccessibilityTest,
703 testing::Values(PREF_SERVICE,
706 } // namespace chromeos