- add sources.
[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/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"
38
39 using testing::AnyNumber;
40 using testing::Return;
41 using testing::_;
42 using testing::WithParamInterface;
43
44 namespace chromeos {
45
46 enum PrefSettingMechanism {
47   PREF_SERVICE,
48   POLICY,
49 };
50
51 void SetMagnifierEnabled(bool enabled) {
52   MagnificationManager::Get()->SetMagnifierEnabled(enabled);
53 }
54
55 class TrayAccessibilityTest
56     : public InProcessBrowserTest,
57       public WithParamInterface<PrefSettingMechanism> {
58  protected:
59   TrayAccessibilityTest() {}
60   virtual ~TrayAccessibilityTest() {}
61
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_);
67   }
68
69   virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
70     command_line->AppendSwitch(switches::kLoginManager);
71     command_line->AppendSwitchASCII(switches::kLoginProfile,
72                                     TestingProfile::kTestUserProfileDir);
73   }
74
75   virtual void SetUpOnMainThread() OVERRIDE {
76     AccessibilityManager::Get()->SetProfileForTest(
77         ProfileManager::GetDefaultProfile());
78     MagnificationManager::Get()->SetProfileForTest(
79         ProfileManager::GetDefaultProfile());
80   }
81
82   virtual void RunTestOnMainThreadLoop() OVERRIDE {
83     // Need to mark oobe completed to show detailed views.
84     StartupUtils::MarkOobeCompleted();
85     InProcessBrowserTest::RunTestOnMainThreadLoop();
86   }
87
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),
99                      NULL);
100       provider_.UpdateChromePolicy(policy_map);
101       base::RunLoop().RunUntilIdle();
102     } else {
103       FAIL() << "Unknown test parameterization";
104     }
105   }
106
107   ash::internal::TrayAccessibility* tray() {
108     return ash::Shell::GetInstance()->GetPrimarySystemTray()->
109         GetTrayAccessibilityForTest();
110   }
111
112   bool IsTrayIconVisible() {
113     return tray()->tray_icon_visible_;
114   }
115
116   views::View* CreateMenuItem() {
117     return tray()->CreateDefaultView(GetLoginStatus());
118   }
119
120   void DestroyMenuItem() {
121     return tray()->DestroyDefaultView();
122   }
123
124   bool CanCreateMenuItem() {
125     views::View* menu_item_view = CreateMenuItem();
126     DestroyMenuItem();
127     return menu_item_view != NULL;
128   }
129
130   void SetLoginStatus(ash::user::LoginStatus status) {
131     tray()->UpdateAfterLoginStatusChange(status);
132   }
133
134   ash::user::LoginStatus GetLoginStatus() {
135     return tray()->login_;
136   }
137
138   bool CreateDetailedMenu() {
139     tray()->PopupDetailedView(0, false);
140     return tray()->detailed_menu_ != NULL;
141   }
142
143   void CloseDetailMenu() {
144     CHECK(tray()->detailed_menu_);
145     tray()->DestroyDetailedView();
146     tray()->detailed_menu_ = NULL;
147   }
148
149   void ClickSpokenFeedbackOnDetailMenu() {
150     views::View* button = tray()->detailed_menu_->spoken_feedback_view_;
151     tray()->detailed_menu_->OnViewClicked(button);
152   }
153
154   void ClickHighContrastOnDetailMenu() {
155     views::View* button = tray()->detailed_menu_->high_contrast_view_;
156     EXPECT_TRUE(button);
157     tray()->detailed_menu_->OnViewClicked(button);
158   }
159
160   void ClickScreenMagnifierOnDetailMenu() {
161     views::View* button = tray()->detailed_menu_->screen_magnifier_view_;
162     EXPECT_TRUE(button);
163     tray()->detailed_menu_->OnViewClicked(button);
164   }
165
166   void ClickAutoclickOnDetailMenu() {
167     views::View* button = tray()->detailed_menu_->autoclick_view_;
168     EXPECT_TRUE(button);
169     tray()->detailed_menu_->OnViewClicked(button);
170   }
171
172   bool IsSpokenFeedbackEnabledOnDetailMenu() {
173     return tray()->detailed_menu_->spoken_feedback_enabled_;
174   }
175
176   bool IsHighContrastEnabledOnDetailMenu() {
177     return tray()->detailed_menu_->high_contrast_enabled_;
178   }
179
180   bool IsScreenMagnifierEnabledOnDetailMenu() {
181     return tray()->detailed_menu_->screen_magnifier_enabled_;
182   }
183
184   bool IsLargeCursorEnabledOnDetailMenu() {
185     return tray()->detailed_menu_->large_cursor_enabled_;
186   }
187
188   bool IsAutoclickEnabledOnDetailMenu() {
189     return tray()->detailed_menu_->autoclick_enabled_;
190   }
191   bool IsSpokenFeedbackMenuShownOnDetailMenu() {
192     return tray()->detailed_menu_->spoken_feedback_view_;
193   }
194
195   bool IsHighContrastMenuShownOnDetailMenu() {
196     return tray()->detailed_menu_->high_contrast_view_;
197   }
198
199   bool IsScreenMagnifierMenuShownOnDetailMenu() {
200     return tray()->detailed_menu_->screen_magnifier_view_;
201   }
202
203   bool IsLargeCursorMenuShownOnDetailMenu() {
204     return tray()->detailed_menu_->large_cursor_view_;
205   }
206
207   bool IsAutoclickMenuShownOnDetailMenu() {
208     return tray()->detailed_menu_->autoclick_view_;
209   }
210
211   policy::MockConfigurationPolicyProvider provider_;
212 };
213
214 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, LoginStatus) {
215   EXPECT_EQ(ash::user::LOGGED_IN_NONE, GetLoginStatus());
216
217   UserManager::Get()->UserLoggedIn(
218       "owner@invalid.domain", "owner@invalid.domain", true);
219   UserManager::Get()->SessionStarted();
220
221   EXPECT_EQ(ash::user::LOGGED_IN_USER, GetLoginStatus());
222 }
223
224 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, ShowTrayIcon) {
225   SetLoginStatus(ash::user::LOGGED_IN_NONE);
226
227   // Confirms that the icon is invisible before login.
228   EXPECT_FALSE(IsTrayIconVisible());
229
230   UserManager::Get()->UserLoggedIn(
231       "owner@invalid.domain", "owner@invalid.domain", true);
232   UserManager::Get()->SessionStarted();
233
234   // Confirms that the icon is invisible just after login.
235   EXPECT_FALSE(IsTrayIconVisible());
236
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());
244
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());
250
251   // Toggling magnifier the visibility of the icon.
252   SetMagnifierEnabled(true);
253   EXPECT_TRUE(IsTrayIconVisible());
254   SetMagnifierEnabled(false);
255   EXPECT_FALSE(IsTrayIconVisible());
256
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());
272
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());
280 }
281
282 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, ShowMenu) {
283   // Login
284   UserManager::Get()->UserLoggedIn(
285       "owner@invalid.domain", "owner@invalid.domain", true);
286   UserManager::Get()->SessionStarted();
287
288   SetShowAccessibilityOptionsInSystemTrayMenu(false);
289
290   // Confirms that the menu is hidden.
291   EXPECT_FALSE(CanCreateMenuItem());
292
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());
300
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());
306
307   // Toggling screen magnifier changes the visibility of the menu.
308   SetMagnifierEnabled(true);
309   EXPECT_TRUE(CanCreateMenuItem());
310   SetMagnifierEnabled(false);
311   EXPECT_FALSE(CanCreateMenuItem());
312
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());
318
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());
338 }
339
340 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, ShowMenuWithShowMenuOption) {
341   // Login
342   UserManager::Get()->UserLoggedIn(
343       "owner@invalid.domain", "owner@invalid.domain", true);
344   UserManager::Get()->SessionStarted();
345
346   SetShowAccessibilityOptionsInSystemTrayMenu(true);
347
348   // Confirms that the menu is visible.
349   EXPECT_TRUE(CanCreateMenuItem());
350
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());
358
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());
364
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());
370
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());
376
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());
396
397   SetShowAccessibilityOptionsInSystemTrayMenu(false);
398
399   // Confirms that the menu is invisible.
400   EXPECT_FALSE(CanCreateMenuItem());
401 }
402
403 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, ShowMenuWithShowOnLoginScreen) {
404   SetLoginStatus(ash::user::LOGGED_IN_NONE);
405
406   // Confirms that the menu is visible.
407   EXPECT_TRUE(CanCreateMenuItem());
408
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());
416
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());
422
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());
428
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());
444
445   SetShowAccessibilityOptionsInSystemTrayMenu(true);
446
447   // Confirms that the menu is keeping visible.
448   EXPECT_TRUE(CanCreateMenuItem());
449
450   SetShowAccessibilityOptionsInSystemTrayMenu(false);
451
452   // Confirms that the menu is keeping visible.
453   EXPECT_TRUE(CanCreateMenuItem());
454 }
455
456 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, KeepMenuVisibilityOnLockScreen) {
457   // Enables high contrast mode.
458   AccessibilityManager::Get()->EnableHighContrast(true);
459   EXPECT_TRUE(CanCreateMenuItem());
460
461   // Locks the screen.
462   SetLoginStatus(ash::user::LOGGED_IN_LOCKED);
463   EXPECT_TRUE(CanCreateMenuItem());
464
465   // Disables high contrast mode.
466   AccessibilityManager::Get()->EnableHighContrast(false);
467
468   // Confirms that the menu is still visible.
469   EXPECT_TRUE(CanCreateMenuItem());
470 }
471
472 #if defined(OS_CHROMEOS)
473 #define MAYBE_ClickDetailMenu DISABLED_ClickDetailMenu
474 #else
475 #define MAYBE_ClickDetailMenu ClickDetailMenu
476 #endif
477
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());
481
482   EXPECT_TRUE(CreateDetailedMenu());
483   ClickSpokenFeedbackOnDetailMenu();
484   EXPECT_TRUE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled());
485
486   EXPECT_TRUE(CreateDetailedMenu());
487   ClickSpokenFeedbackOnDetailMenu();
488   EXPECT_FALSE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled());
489
490   // Confirms that the check item toggles the high contrast.
491   EXPECT_FALSE(AccessibilityManager::Get()->IsHighContrastEnabled());
492
493   EXPECT_TRUE(CreateDetailedMenu());
494   ClickHighContrastOnDetailMenu();
495   EXPECT_TRUE(AccessibilityManager::Get()->IsHighContrastEnabled());
496
497   EXPECT_TRUE(CreateDetailedMenu());
498   ClickHighContrastOnDetailMenu();
499   EXPECT_FALSE(AccessibilityManager::Get()->IsHighContrastEnabled());
500
501   // Confirms that the check item toggles the magnifier.
502   EXPECT_FALSE(AccessibilityManager::Get()->IsHighContrastEnabled());
503
504   EXPECT_FALSE(MagnificationManager::Get()->IsMagnifierEnabled());
505   EXPECT_TRUE(CreateDetailedMenu());
506   ClickScreenMagnifierOnDetailMenu();
507   EXPECT_TRUE(MagnificationManager::Get()->IsMagnifierEnabled());
508
509   EXPECT_TRUE(CreateDetailedMenu());
510   ClickScreenMagnifierOnDetailMenu();
511   EXPECT_FALSE(MagnificationManager::Get()->IsMagnifierEnabled());
512
513   // Confirms that the check item toggles autoclick.
514   EXPECT_FALSE(AccessibilityManager::Get()->IsAutoclickEnabled());
515
516   EXPECT_TRUE(CreateDetailedMenu());
517   ClickAutoclickOnDetailMenu();
518   EXPECT_TRUE(AccessibilityManager::Get()->IsAutoclickEnabled());
519
520   EXPECT_TRUE(CreateDetailedMenu());
521   ClickAutoclickOnDetailMenu();
522   EXPECT_FALSE(AccessibilityManager::Get()->IsAutoclickEnabled());
523 }
524
525 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, CheckMarksOnDetailMenu) {
526   SetLoginStatus(ash::user::LOGGED_IN_NONE);
527
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());
536   CloseDetailMenu();
537
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());
547   CloseDetailMenu();
548
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());
558   CloseDetailMenu();
559
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());
568   CloseDetailMenu();
569
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());
578   CloseDetailMenu();
579
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());
588   CloseDetailMenu();
589
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());
598   CloseDetailMenu();
599
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());
608   CloseDetailMenu();
609
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());
618   CloseDetailMenu();
619
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());
632   CloseDetailMenu();
633
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());
646   CloseDetailMenu();
647
648   // Autoclick is disabled on login screen.
649   SetLoginStatus(ash::user::LOGGED_IN_USER);
650
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());
659   CloseDetailMenu();
660
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());
669   CloseDetailMenu();
670 }
671
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());
680   CloseDetailMenu();
681
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());
689   CloseDetailMenu();
690
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());
698   CloseDetailMenu();
699 }
700
701 INSTANTIATE_TEST_CASE_P(TrayAccessibilityTestInstance,
702                         TrayAccessibilityTest,
703                         testing::Values(PREF_SERVICE,
704                                         POLICY));
705
706 }  // namespace chromeos