Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / system / tray_accessibility_browsertest.cc
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.
4
5 #include "ash/magnifier/magnification_controller.h"
6 #include "ash/shell.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"
38
39 using testing::Return;
40 using testing::_;
41 using testing::WithParamInterface;
42
43 namespace chromeos {
44
45 enum PrefSettingMechanism {
46   PREF_SERVICE,
47   POLICY,
48 };
49
50 void SetMagnifierEnabled(bool enabled) {
51   MagnificationManager::Get()->SetMagnifierEnabled(enabled);
52 }
53
54 class TrayAccessibilityTest
55     : public InProcessBrowserTest,
56       public WithParamInterface<PrefSettingMechanism> {
57  protected:
58   TrayAccessibilityTest() {}
59   virtual ~TrayAccessibilityTest() {}
60
61   // The profile which should be used by tese tests.
62   Profile* GetProfile() { return ProfileManager::GetActiveUserProfile(); }
63
64   virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
65     EXPECT_CALL(provider_, IsInitializationComplete(_))
66         .WillRepeatedly(Return(true));
67     policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
68   }
69
70   virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
71     command_line->AppendSwitch(switches::kLoginManager);
72     command_line->AppendSwitchASCII(switches::kLoginProfile,
73                                     TestingProfile::kTestUserProfileDir);
74   }
75
76   virtual void SetUpOnMainThread() OVERRIDE {
77     AccessibilityManager::Get()->SetProfileForTest(GetProfile());
78     MagnificationManager::Get()->SetProfileForTest(GetProfile());
79   }
80
81   virtual void RunTestOnMainThreadLoop() OVERRIDE {
82     // Need to mark oobe completed to show detailed views.
83     StartupUtils::MarkOobeCompleted();
84     InProcessBrowserTest::RunTestOnMainThreadLoop();
85   }
86
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),
97                      NULL);
98       provider_.UpdateChromePolicy(policy_map);
99       base::RunLoop().RunUntilIdle();
100     } else {
101       FAIL() << "Unknown test parameterization";
102     }
103   }
104
105   ash::internal::TrayAccessibility* tray() {
106     return ash::Shell::GetInstance()->GetPrimarySystemTray()->
107         GetTrayAccessibilityForTest();
108   }
109
110   bool IsTrayIconVisible() {
111     return tray()->tray_icon_visible_;
112   }
113
114   views::View* CreateMenuItem() {
115     return tray()->CreateDefaultView(GetLoginStatus());
116   }
117
118   void DestroyMenuItem() {
119     return tray()->DestroyDefaultView();
120   }
121
122   bool CanCreateMenuItem() {
123     views::View* menu_item_view = CreateMenuItem();
124     DestroyMenuItem();
125     return menu_item_view != NULL;
126   }
127
128   void SetLoginStatus(ash::user::LoginStatus status) {
129     tray()->UpdateAfterLoginStatusChange(status);
130   }
131
132   ash::user::LoginStatus GetLoginStatus() {
133     return tray()->login_;
134   }
135
136   bool CreateDetailedMenu() {
137     tray()->PopupDetailedView(0, false);
138     return tray()->detailed_menu_ != NULL;
139   }
140
141   void CloseDetailMenu() {
142     CHECK(tray()->detailed_menu_);
143     tray()->DestroyDetailedView();
144     tray()->detailed_menu_ = NULL;
145   }
146
147   void ClickSpokenFeedbackOnDetailMenu() {
148     views::View* button = tray()->detailed_menu_->spoken_feedback_view_;
149     ASSERT_TRUE(button);
150     tray()->detailed_menu_->OnViewClicked(button);
151   }
152
153   void ClickHighContrastOnDetailMenu() {
154     views::View* button = tray()->detailed_menu_->high_contrast_view_;
155     ASSERT_TRUE(button);
156     tray()->detailed_menu_->OnViewClicked(button);
157   }
158
159   void ClickScreenMagnifierOnDetailMenu() {
160     views::View* button = tray()->detailed_menu_->screen_magnifier_view_;
161     ASSERT_TRUE(button);
162     tray()->detailed_menu_->OnViewClicked(button);
163   }
164
165   void ClickAutoclickOnDetailMenu() {
166     views::View* button = tray()->detailed_menu_->autoclick_view_;
167     ASSERT_TRUE(button);
168     tray()->detailed_menu_->OnViewClicked(button);
169   }
170
171   void ClickVirtualKeyboardOnDetailMenu() {
172     views::View* button = tray()->detailed_menu_->virtual_keyboard_view_;
173     ASSERT_TRUE(button);
174     tray()->detailed_menu_->OnViewClicked(button);
175   }
176
177   bool IsSpokenFeedbackEnabledOnDetailMenu() {
178     return tray()->detailed_menu_->spoken_feedback_enabled_;
179   }
180
181   bool IsHighContrastEnabledOnDetailMenu() {
182     return tray()->detailed_menu_->high_contrast_enabled_;
183   }
184
185   bool IsScreenMagnifierEnabledOnDetailMenu() {
186     return tray()->detailed_menu_->screen_magnifier_enabled_;
187   }
188
189   bool IsLargeCursorEnabledOnDetailMenu() {
190     return tray()->detailed_menu_->large_cursor_enabled_;
191   }
192
193   bool IsAutoclickEnabledOnDetailMenu() {
194     return tray()->detailed_menu_->autoclick_enabled_;
195   }
196
197   bool IsVirtualKeyboardEnabledOnDetailMenu() {
198     return tray()->detailed_menu_->virtual_keyboard_enabled_;
199   }
200
201   bool IsSpokenFeedbackMenuShownOnDetailMenu() {
202     return tray()->detailed_menu_->spoken_feedback_view_;
203   }
204
205   bool IsHighContrastMenuShownOnDetailMenu() {
206     return tray()->detailed_menu_->high_contrast_view_;
207   }
208
209   bool IsScreenMagnifierMenuShownOnDetailMenu() {
210     return tray()->detailed_menu_->screen_magnifier_view_;
211   }
212
213   bool IsLargeCursorMenuShownOnDetailMenu() {
214     return tray()->detailed_menu_->large_cursor_view_;
215   }
216
217   bool IsAutoclickMenuShownOnDetailMenu() {
218     return tray()->detailed_menu_->autoclick_view_;
219   }
220
221   bool IsVirtualKeyboardMenuShownOnDetailMenu() {
222     return tray()->detailed_menu_->virtual_keyboard_view_;
223   }
224
225   policy::MockConfigurationPolicyProvider provider_;
226 };
227
228 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, LoginStatus) {
229   EXPECT_EQ(ash::user::LOGGED_IN_NONE, GetLoginStatus());
230
231   UserManager::Get()->UserLoggedIn(
232       "owner@invalid.domain", "owner@invalid.domain", true);
233   UserManager::Get()->SessionStarted();
234
235   EXPECT_EQ(ash::user::LOGGED_IN_USER, GetLoginStatus());
236 }
237
238 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, ShowTrayIcon) {
239   SetLoginStatus(ash::user::LOGGED_IN_NONE);
240
241   // Confirms that the icon is invisible before login.
242   EXPECT_FALSE(IsTrayIconVisible());
243
244   UserManager::Get()->UserLoggedIn(
245       "owner@invalid.domain", "owner@invalid.domain", true);
246   UserManager::Get()->SessionStarted();
247
248   // Confirms that the icon is invisible just after login.
249   EXPECT_FALSE(IsTrayIconVisible());
250
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());
258
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());
264
265   // Toggling magnifier the visibility of the icon.
266   SetMagnifierEnabled(true);
267   EXPECT_TRUE(IsTrayIconVisible());
268   SetMagnifierEnabled(false);
269   EXPECT_FALSE(IsTrayIconVisible());
270
271   // Toggling the virtual keyboard setting changes the visibility of the a11y
272   // icon.
273   AccessibilityManager::Get()->EnableVirtualKeyboard(true);
274   EXPECT_TRUE(IsTrayIconVisible());
275   AccessibilityManager::Get()->EnableVirtualKeyboard(false);
276   EXPECT_FALSE(IsTrayIconVisible());
277
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());
297
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());
305 }
306
307 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, ShowMenu) {
308   // Login
309   UserManager::Get()->UserLoggedIn(
310       "owner@invalid.domain", "owner@invalid.domain", true);
311   UserManager::Get()->SessionStarted();
312
313   SetShowAccessibilityOptionsInSystemTrayMenu(false);
314
315   // Confirms that the menu is hidden.
316   EXPECT_FALSE(CanCreateMenuItem());
317
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());
325
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());
331
332   // Toggling screen magnifier changes the visibility of the menu.
333   SetMagnifierEnabled(true);
334   EXPECT_TRUE(CanCreateMenuItem());
335   SetMagnifierEnabled(false);
336   EXPECT_FALSE(CanCreateMenuItem());
337
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());
343
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());
349
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());
373 }
374
375 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, ShowMenuWithShowMenuOption) {
376   // Login
377   UserManager::Get()->UserLoggedIn(
378       "owner@invalid.domain", "owner@invalid.domain", true);
379   UserManager::Get()->SessionStarted();
380
381   SetShowAccessibilityOptionsInSystemTrayMenu(true);
382
383   // Confirms that the menu is visible.
384   EXPECT_TRUE(CanCreateMenuItem());
385
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());
393
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());
399
400   // The menu remains visible regardless of toggling screen magnifier.
401   SetMagnifierEnabled(true);
402   EXPECT_TRUE(CanCreateMenuItem());
403   SetMagnifierEnabled(false);
404   EXPECT_TRUE(CanCreateMenuItem());
405
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());
411
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());
417
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());
441
442   SetShowAccessibilityOptionsInSystemTrayMenu(false);
443
444   // Confirms that the menu is invisible.
445   EXPECT_FALSE(CanCreateMenuItem());
446 }
447
448 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, ShowMenuWithShowOnLoginScreen) {
449   SetLoginStatus(ash::user::LOGGED_IN_NONE);
450
451   // Confirms that the menu is visible.
452   EXPECT_TRUE(CanCreateMenuItem());
453
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());
461
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());
467
468   // The menu remains visible regardless of toggling screen magnifier.
469   SetMagnifierEnabled(true);
470   EXPECT_TRUE(CanCreateMenuItem());
471   SetMagnifierEnabled(false);
472   EXPECT_TRUE(CanCreateMenuItem());
473
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());
479
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());
499
500   SetShowAccessibilityOptionsInSystemTrayMenu(true);
501
502   // Confirms that the menu remains visible.
503   EXPECT_TRUE(CanCreateMenuItem());
504
505   SetShowAccessibilityOptionsInSystemTrayMenu(false);
506
507   // Confirms that the menu remains visible.
508   EXPECT_TRUE(CanCreateMenuItem());
509 }
510
511 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, KeepMenuVisibilityOnLockScreen) {
512   // Enables high contrast mode.
513   AccessibilityManager::Get()->EnableHighContrast(true);
514   EXPECT_TRUE(CanCreateMenuItem());
515
516   // Locks the screen.
517   SetLoginStatus(ash::user::LOGGED_IN_LOCKED);
518   EXPECT_TRUE(CanCreateMenuItem());
519
520   // Disables high contrast mode.
521   AccessibilityManager::Get()->EnableHighContrast(false);
522
523   // Confirms that the menu is still visible.
524   EXPECT_TRUE(CanCreateMenuItem());
525 }
526
527 #if defined(OS_CHROMEOS)
528 #define MAYBE_ClickDetailMenu DISABLED_ClickDetailMenu
529 #else
530 #define MAYBE_ClickDetailMenu ClickDetailMenu
531 #endif
532
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());
536
537   EXPECT_TRUE(CreateDetailedMenu());
538   ClickSpokenFeedbackOnDetailMenu();
539   EXPECT_TRUE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled());
540
541   EXPECT_TRUE(CreateDetailedMenu());
542   ClickSpokenFeedbackOnDetailMenu();
543   EXPECT_FALSE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled());
544
545   // Confirms that the check item toggles the high contrast.
546   EXPECT_FALSE(AccessibilityManager::Get()->IsHighContrastEnabled());
547
548   EXPECT_TRUE(CreateDetailedMenu());
549   ClickHighContrastOnDetailMenu();
550   EXPECT_TRUE(AccessibilityManager::Get()->IsHighContrastEnabled());
551
552   EXPECT_TRUE(CreateDetailedMenu());
553   ClickHighContrastOnDetailMenu();
554   EXPECT_FALSE(AccessibilityManager::Get()->IsHighContrastEnabled());
555
556   // Confirms that the check item toggles the magnifier.
557   EXPECT_FALSE(AccessibilityManager::Get()->IsHighContrastEnabled());
558
559   EXPECT_FALSE(MagnificationManager::Get()->IsMagnifierEnabled());
560   EXPECT_TRUE(CreateDetailedMenu());
561   ClickScreenMagnifierOnDetailMenu();
562   EXPECT_TRUE(MagnificationManager::Get()->IsMagnifierEnabled());
563
564   EXPECT_TRUE(CreateDetailedMenu());
565   ClickScreenMagnifierOnDetailMenu();
566   EXPECT_FALSE(MagnificationManager::Get()->IsMagnifierEnabled());
567
568   // Confirms that the check item toggles autoclick.
569   EXPECT_FALSE(AccessibilityManager::Get()->IsAutoclickEnabled());
570
571   EXPECT_TRUE(CreateDetailedMenu());
572   ClickAutoclickOnDetailMenu();
573   EXPECT_TRUE(AccessibilityManager::Get()->IsAutoclickEnabled());
574
575   EXPECT_TRUE(CreateDetailedMenu());
576   ClickAutoclickOnDetailMenu();
577   EXPECT_FALSE(AccessibilityManager::Get()->IsAutoclickEnabled());
578
579   // Confirms that the check item toggles on-screen keyboard.
580   EXPECT_FALSE(AccessibilityManager::Get()->IsVirtualKeyboardEnabled());
581
582   EXPECT_TRUE(CreateDetailedMenu());
583   ClickVirtualKeyboardOnDetailMenu();
584   EXPECT_TRUE(AccessibilityManager::Get()->IsVirtualKeyboardEnabled());
585
586   EXPECT_TRUE(CreateDetailedMenu());
587   ClickVirtualKeyboardOnDetailMenu();
588   EXPECT_FALSE(AccessibilityManager::Get()->IsVirtualKeyboardEnabled());
589 }
590
591 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, CheckMarksOnDetailMenu) {
592   SetLoginStatus(ash::user::LOGGED_IN_NONE);
593
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());
602   CloseDetailMenu();
603
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());
614   CloseDetailMenu();
615
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());
626   CloseDetailMenu();
627
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());
637   CloseDetailMenu();
638
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());
648   CloseDetailMenu();
649
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());
659   CloseDetailMenu();
660
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());
670   CloseDetailMenu();
671
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());
681   CloseDetailMenu();
682
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());
692   CloseDetailMenu();
693
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());
703   CloseDetailMenu();
704
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());
714   CloseDetailMenu();
715
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());
730   CloseDetailMenu();
731
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());
746   CloseDetailMenu();
747
748   // Autoclick is disabled on login screen.
749   SetLoginStatus(ash::user::LOGGED_IN_USER);
750
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());
760   CloseDetailMenu();
761
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());
771   CloseDetailMenu();
772 }
773
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());
783   CloseDetailMenu();
784
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());
793   CloseDetailMenu();
794
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());
803   CloseDetailMenu();
804 }
805
806 INSTANTIATE_TEST_CASE_P(TrayAccessibilityTestInstance,
807                         TrayAccessibilityTest,
808                         testing::Values(PREF_SERVICE,
809                                         POLICY));
810
811 }  // namespace chromeos