Upstream version 5.34.92.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     tray()->detailed_menu_->OnViewClicked(button);
150   }
151
152   void ClickHighContrastOnDetailMenu() {
153     views::View* button = tray()->detailed_menu_->high_contrast_view_;
154     EXPECT_TRUE(button);
155     tray()->detailed_menu_->OnViewClicked(button);
156   }
157
158   void ClickScreenMagnifierOnDetailMenu() {
159     views::View* button = tray()->detailed_menu_->screen_magnifier_view_;
160     EXPECT_TRUE(button);
161     tray()->detailed_menu_->OnViewClicked(button);
162   }
163
164   void ClickAutoclickOnDetailMenu() {
165     views::View* button = tray()->detailed_menu_->autoclick_view_;
166     EXPECT_TRUE(button);
167     tray()->detailed_menu_->OnViewClicked(button);
168   }
169
170   bool IsSpokenFeedbackEnabledOnDetailMenu() {
171     return tray()->detailed_menu_->spoken_feedback_enabled_;
172   }
173
174   bool IsHighContrastEnabledOnDetailMenu() {
175     return tray()->detailed_menu_->high_contrast_enabled_;
176   }
177
178   bool IsScreenMagnifierEnabledOnDetailMenu() {
179     return tray()->detailed_menu_->screen_magnifier_enabled_;
180   }
181
182   bool IsLargeCursorEnabledOnDetailMenu() {
183     return tray()->detailed_menu_->large_cursor_enabled_;
184   }
185
186   bool IsAutoclickEnabledOnDetailMenu() {
187     return tray()->detailed_menu_->autoclick_enabled_;
188   }
189   bool IsSpokenFeedbackMenuShownOnDetailMenu() {
190     return tray()->detailed_menu_->spoken_feedback_view_;
191   }
192
193   bool IsHighContrastMenuShownOnDetailMenu() {
194     return tray()->detailed_menu_->high_contrast_view_;
195   }
196
197   bool IsScreenMagnifierMenuShownOnDetailMenu() {
198     return tray()->detailed_menu_->screen_magnifier_view_;
199   }
200
201   bool IsLargeCursorMenuShownOnDetailMenu() {
202     return tray()->detailed_menu_->large_cursor_view_;
203   }
204
205   bool IsAutoclickMenuShownOnDetailMenu() {
206     return tray()->detailed_menu_->autoclick_view_;
207   }
208
209   policy::MockConfigurationPolicyProvider provider_;
210 };
211
212 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, LoginStatus) {
213   EXPECT_EQ(ash::user::LOGGED_IN_NONE, GetLoginStatus());
214
215   UserManager::Get()->UserLoggedIn(
216       "owner@invalid.domain", "owner@invalid.domain", true);
217   UserManager::Get()->SessionStarted();
218
219   EXPECT_EQ(ash::user::LOGGED_IN_USER, GetLoginStatus());
220 }
221
222 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, ShowTrayIcon) {
223   SetLoginStatus(ash::user::LOGGED_IN_NONE);
224
225   // Confirms that the icon is invisible before login.
226   EXPECT_FALSE(IsTrayIconVisible());
227
228   UserManager::Get()->UserLoggedIn(
229       "owner@invalid.domain", "owner@invalid.domain", true);
230   UserManager::Get()->SessionStarted();
231
232   // Confirms that the icon is invisible just after login.
233   EXPECT_FALSE(IsTrayIconVisible());
234
235   // Toggling spoken feedback changes the visibillity of the icon.
236   AccessibilityManager::Get()->EnableSpokenFeedback(
237       true, ash::A11Y_NOTIFICATION_NONE);
238   EXPECT_TRUE(IsTrayIconVisible());
239   AccessibilityManager::Get()->EnableSpokenFeedback(
240       false, ash::A11Y_NOTIFICATION_NONE);
241   EXPECT_FALSE(IsTrayIconVisible());
242
243   // Toggling high contrast the visibillity of the icon.
244   AccessibilityManager::Get()->EnableHighContrast(true);
245   EXPECT_TRUE(IsTrayIconVisible());
246   AccessibilityManager::Get()->EnableHighContrast(false);
247   EXPECT_FALSE(IsTrayIconVisible());
248
249   // Toggling magnifier the visibility of the icon.
250   SetMagnifierEnabled(true);
251   EXPECT_TRUE(IsTrayIconVisible());
252   SetMagnifierEnabled(false);
253   EXPECT_FALSE(IsTrayIconVisible());
254
255   // Enabling all accessibility features.
256   SetMagnifierEnabled(true);
257   EXPECT_TRUE(IsTrayIconVisible());
258   AccessibilityManager::Get()->EnableHighContrast(true);
259   EXPECT_TRUE(IsTrayIconVisible());
260   AccessibilityManager::Get()->EnableSpokenFeedback(
261       true, ash::A11Y_NOTIFICATION_NONE);
262   EXPECT_TRUE(IsTrayIconVisible());
263   AccessibilityManager::Get()->EnableSpokenFeedback(
264       false, ash::A11Y_NOTIFICATION_NONE);
265   EXPECT_TRUE(IsTrayIconVisible());
266   AccessibilityManager::Get()->EnableHighContrast(false);
267   EXPECT_TRUE(IsTrayIconVisible());
268   SetMagnifierEnabled(false);
269   EXPECT_FALSE(IsTrayIconVisible());
270
271   // Confirms that prefs::kShouldAlwaysShowAccessibilityMenu doesn't affect
272   // the icon on the tray.
273   SetShowAccessibilityOptionsInSystemTrayMenu(true);
274   AccessibilityManager::Get()->EnableHighContrast(true);
275   EXPECT_TRUE(IsTrayIconVisible());
276   AccessibilityManager::Get()->EnableHighContrast(false);
277   EXPECT_FALSE(IsTrayIconVisible());
278 }
279
280 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, ShowMenu) {
281   // Login
282   UserManager::Get()->UserLoggedIn(
283       "owner@invalid.domain", "owner@invalid.domain", true);
284   UserManager::Get()->SessionStarted();
285
286   SetShowAccessibilityOptionsInSystemTrayMenu(false);
287
288   // Confirms that the menu is hidden.
289   EXPECT_FALSE(CanCreateMenuItem());
290
291   // Toggling spoken feedback changes the visibillity of the menu.
292   AccessibilityManager::Get()->EnableSpokenFeedback(
293       true, ash::A11Y_NOTIFICATION_NONE);
294   EXPECT_TRUE(CanCreateMenuItem());
295   AccessibilityManager::Get()->EnableSpokenFeedback(
296       false, ash::A11Y_NOTIFICATION_NONE);
297   EXPECT_FALSE(CanCreateMenuItem());
298
299   // Toggling high contrast changes the visibillity of the menu.
300   AccessibilityManager::Get()->EnableHighContrast(true);
301   EXPECT_TRUE(CanCreateMenuItem());
302   AccessibilityManager::Get()->EnableHighContrast(false);
303   EXPECT_FALSE(CanCreateMenuItem());
304
305   // Toggling screen magnifier changes the visibility of the menu.
306   SetMagnifierEnabled(true);
307   EXPECT_TRUE(CanCreateMenuItem());
308   SetMagnifierEnabled(false);
309   EXPECT_FALSE(CanCreateMenuItem());
310
311   // Toggling autoclick changes the visibility of the menu.
312   AccessibilityManager::Get()->EnableAutoclick(true);
313   EXPECT_TRUE(CanCreateMenuItem());
314   AccessibilityManager::Get()->EnableAutoclick(false);
315   EXPECT_FALSE(CanCreateMenuItem());
316
317   // Enabling all accessibility features.
318   SetMagnifierEnabled(true);
319   EXPECT_TRUE(CanCreateMenuItem());
320   AccessibilityManager::Get()->EnableHighContrast(true);
321   EXPECT_TRUE(CanCreateMenuItem());
322   AccessibilityManager::Get()->EnableSpokenFeedback(
323       true, ash::A11Y_NOTIFICATION_NONE);
324   EXPECT_TRUE(CanCreateMenuItem());
325   AccessibilityManager::Get()->EnableAutoclick(true);
326   EXPECT_TRUE(CanCreateMenuItem());
327   AccessibilityManager::Get()->EnableAutoclick(false);
328   EXPECT_TRUE(CanCreateMenuItem());
329   AccessibilityManager::Get()->EnableSpokenFeedback(
330       false, ash::A11Y_NOTIFICATION_NONE);
331   EXPECT_TRUE(CanCreateMenuItem());
332   AccessibilityManager::Get()->EnableHighContrast(false);
333   EXPECT_TRUE(CanCreateMenuItem());
334   SetMagnifierEnabled(false);
335   EXPECT_FALSE(CanCreateMenuItem());
336 }
337
338 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, ShowMenuWithShowMenuOption) {
339   // Login
340   UserManager::Get()->UserLoggedIn(
341       "owner@invalid.domain", "owner@invalid.domain", true);
342   UserManager::Get()->SessionStarted();
343
344   SetShowAccessibilityOptionsInSystemTrayMenu(true);
345
346   // Confirms that the menu is visible.
347   EXPECT_TRUE(CanCreateMenuItem());
348
349   // The menu is keeping visible regardless of toggling spoken feedback.
350   AccessibilityManager::Get()->EnableSpokenFeedback(
351       true, ash::A11Y_NOTIFICATION_NONE);
352   EXPECT_TRUE(CanCreateMenuItem());
353   AccessibilityManager::Get()->EnableSpokenFeedback(
354       false, ash::A11Y_NOTIFICATION_NONE);
355   EXPECT_TRUE(CanCreateMenuItem());
356
357   // The menu is keeping visible regardless of toggling high contrast.
358   AccessibilityManager::Get()->EnableHighContrast(true);
359   EXPECT_TRUE(CanCreateMenuItem());
360   AccessibilityManager::Get()->EnableHighContrast(false);
361   EXPECT_TRUE(CanCreateMenuItem());
362
363   // The menu is keeping visible regardless of toggling screen magnifier.
364   SetMagnifierEnabled(true);
365   EXPECT_TRUE(CanCreateMenuItem());
366   SetMagnifierEnabled(false);
367   EXPECT_TRUE(CanCreateMenuItem());
368
369   // The menu is keeping visible regardless of toggling autoclick.
370   AccessibilityManager::Get()->EnableAutoclick(true);
371   EXPECT_TRUE(CanCreateMenuItem());
372   AccessibilityManager::Get()->EnableAutoclick(false);
373   EXPECT_TRUE(CanCreateMenuItem());
374
375   // Enabling all accessibility features.
376   SetMagnifierEnabled(true);
377   EXPECT_TRUE(CanCreateMenuItem());
378   AccessibilityManager::Get()->EnableHighContrast(true);
379   EXPECT_TRUE(CanCreateMenuItem());
380   AccessibilityManager::Get()->EnableSpokenFeedback(
381       true, ash::A11Y_NOTIFICATION_NONE);
382   EXPECT_TRUE(CanCreateMenuItem());
383   AccessibilityManager::Get()->EnableAutoclick(true);
384   EXPECT_TRUE(CanCreateMenuItem());
385   AccessibilityManager::Get()->EnableAutoclick(false);
386   EXPECT_TRUE(CanCreateMenuItem());
387   AccessibilityManager::Get()->EnableSpokenFeedback(
388       false, ash::A11Y_NOTIFICATION_NONE);
389   EXPECT_TRUE(CanCreateMenuItem());
390   AccessibilityManager::Get()->EnableHighContrast(false);
391   EXPECT_TRUE(CanCreateMenuItem());
392   SetMagnifierEnabled(false);
393   EXPECT_TRUE(CanCreateMenuItem());
394
395   SetShowAccessibilityOptionsInSystemTrayMenu(false);
396
397   // Confirms that the menu is invisible.
398   EXPECT_FALSE(CanCreateMenuItem());
399 }
400
401 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, ShowMenuWithShowOnLoginScreen) {
402   SetLoginStatus(ash::user::LOGGED_IN_NONE);
403
404   // Confirms that the menu is visible.
405   EXPECT_TRUE(CanCreateMenuItem());
406
407   // The menu is keeping visible regardless of toggling spoken feedback.
408   AccessibilityManager::Get()->EnableSpokenFeedback(
409       true, ash::A11Y_NOTIFICATION_NONE);
410   EXPECT_TRUE(CanCreateMenuItem());
411   AccessibilityManager::Get()->EnableSpokenFeedback(
412       false, ash::A11Y_NOTIFICATION_NONE);
413   EXPECT_TRUE(CanCreateMenuItem());
414
415   // The menu is keeping visible regardless of toggling high contrast.
416   AccessibilityManager::Get()->EnableHighContrast(true);
417   EXPECT_TRUE(CanCreateMenuItem());
418   AccessibilityManager::Get()->EnableHighContrast(false);
419   EXPECT_TRUE(CanCreateMenuItem());
420
421   // The menu is keeping visible regardless of toggling screen magnifier.
422   SetMagnifierEnabled(true);
423   EXPECT_TRUE(CanCreateMenuItem());
424   SetMagnifierEnabled(false);
425   EXPECT_TRUE(CanCreateMenuItem());
426
427   // Enabling all accessibility features.
428   SetMagnifierEnabled(true);
429   EXPECT_TRUE(CanCreateMenuItem());
430   AccessibilityManager::Get()->EnableHighContrast(true);
431   EXPECT_TRUE(CanCreateMenuItem());
432   AccessibilityManager::Get()->EnableSpokenFeedback(
433       true, ash::A11Y_NOTIFICATION_NONE);
434   EXPECT_TRUE(CanCreateMenuItem());
435   AccessibilityManager::Get()->EnableSpokenFeedback(
436       false, ash::A11Y_NOTIFICATION_NONE);
437   EXPECT_TRUE(CanCreateMenuItem());
438   AccessibilityManager::Get()->EnableHighContrast(false);
439   EXPECT_TRUE(CanCreateMenuItem());
440   SetMagnifierEnabled(false);
441   EXPECT_TRUE(CanCreateMenuItem());
442
443   SetShowAccessibilityOptionsInSystemTrayMenu(true);
444
445   // Confirms that the menu is keeping visible.
446   EXPECT_TRUE(CanCreateMenuItem());
447
448   SetShowAccessibilityOptionsInSystemTrayMenu(false);
449
450   // Confirms that the menu is keeping visible.
451   EXPECT_TRUE(CanCreateMenuItem());
452 }
453
454 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, KeepMenuVisibilityOnLockScreen) {
455   // Enables high contrast mode.
456   AccessibilityManager::Get()->EnableHighContrast(true);
457   EXPECT_TRUE(CanCreateMenuItem());
458
459   // Locks the screen.
460   SetLoginStatus(ash::user::LOGGED_IN_LOCKED);
461   EXPECT_TRUE(CanCreateMenuItem());
462
463   // Disables high contrast mode.
464   AccessibilityManager::Get()->EnableHighContrast(false);
465
466   // Confirms that the menu is still visible.
467   EXPECT_TRUE(CanCreateMenuItem());
468 }
469
470 #if defined(OS_CHROMEOS)
471 #define MAYBE_ClickDetailMenu DISABLED_ClickDetailMenu
472 #else
473 #define MAYBE_ClickDetailMenu ClickDetailMenu
474 #endif
475
476 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, MAYBE_ClickDetailMenu) {
477   // Confirms that the check item toggles the spoken feedback.
478   EXPECT_FALSE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled());
479
480   EXPECT_TRUE(CreateDetailedMenu());
481   ClickSpokenFeedbackOnDetailMenu();
482   EXPECT_TRUE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled());
483
484   EXPECT_TRUE(CreateDetailedMenu());
485   ClickSpokenFeedbackOnDetailMenu();
486   EXPECT_FALSE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled());
487
488   // Confirms that the check item toggles the high contrast.
489   EXPECT_FALSE(AccessibilityManager::Get()->IsHighContrastEnabled());
490
491   EXPECT_TRUE(CreateDetailedMenu());
492   ClickHighContrastOnDetailMenu();
493   EXPECT_TRUE(AccessibilityManager::Get()->IsHighContrastEnabled());
494
495   EXPECT_TRUE(CreateDetailedMenu());
496   ClickHighContrastOnDetailMenu();
497   EXPECT_FALSE(AccessibilityManager::Get()->IsHighContrastEnabled());
498
499   // Confirms that the check item toggles the magnifier.
500   EXPECT_FALSE(AccessibilityManager::Get()->IsHighContrastEnabled());
501
502   EXPECT_FALSE(MagnificationManager::Get()->IsMagnifierEnabled());
503   EXPECT_TRUE(CreateDetailedMenu());
504   ClickScreenMagnifierOnDetailMenu();
505   EXPECT_TRUE(MagnificationManager::Get()->IsMagnifierEnabled());
506
507   EXPECT_TRUE(CreateDetailedMenu());
508   ClickScreenMagnifierOnDetailMenu();
509   EXPECT_FALSE(MagnificationManager::Get()->IsMagnifierEnabled());
510
511   // Confirms that the check item toggles autoclick.
512   EXPECT_FALSE(AccessibilityManager::Get()->IsAutoclickEnabled());
513
514   EXPECT_TRUE(CreateDetailedMenu());
515   ClickAutoclickOnDetailMenu();
516   EXPECT_TRUE(AccessibilityManager::Get()->IsAutoclickEnabled());
517
518   EXPECT_TRUE(CreateDetailedMenu());
519   ClickAutoclickOnDetailMenu();
520   EXPECT_FALSE(AccessibilityManager::Get()->IsAutoclickEnabled());
521 }
522
523 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, CheckMarksOnDetailMenu) {
524   SetLoginStatus(ash::user::LOGGED_IN_NONE);
525
526   // At first, all of the check is unchecked.
527   EXPECT_TRUE(CreateDetailedMenu());
528   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
529   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
530   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
531   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
532   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
533   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
534   CloseDetailMenu();
535
536   // Enabling spoken feedback.
537   AccessibilityManager::Get()->EnableSpokenFeedback(
538       true, ash::A11Y_NOTIFICATION_NONE);
539   EXPECT_TRUE(CreateDetailedMenu());
540   EXPECT_TRUE(IsSpokenFeedbackEnabledOnDetailMenu());
541   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
542   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
543   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
544   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
545   CloseDetailMenu();
546
547   // Disabling spoken feedback.
548   AccessibilityManager::Get()->EnableSpokenFeedback(
549       false, ash::A11Y_NOTIFICATION_NONE);
550   EXPECT_TRUE(CreateDetailedMenu());
551   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
552   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
553   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
554   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
555   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
556   CloseDetailMenu();
557
558   // Enabling high contrast.
559   AccessibilityManager::Get()->EnableHighContrast(true);
560   EXPECT_TRUE(CreateDetailedMenu());
561   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
562   EXPECT_TRUE(IsHighContrastEnabledOnDetailMenu());
563   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
564   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
565   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
566   CloseDetailMenu();
567
568   // Disabling high contrast.
569   AccessibilityManager::Get()->EnableHighContrast(false);
570   EXPECT_TRUE(CreateDetailedMenu());
571   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
572   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
573   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
574   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
575   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
576   CloseDetailMenu();
577
578   // Enabling full screen magnifier.
579   SetMagnifierEnabled(true);
580   EXPECT_TRUE(CreateDetailedMenu());
581   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
582   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
583   EXPECT_TRUE(IsScreenMagnifierEnabledOnDetailMenu());
584   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
585   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
586   CloseDetailMenu();
587
588   // Disabling screen magnifier.
589   SetMagnifierEnabled(false);
590   EXPECT_TRUE(CreateDetailedMenu());
591   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
592   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
593   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
594   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
595   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
596   CloseDetailMenu();
597
598   // Enabling large cursor.
599   AccessibilityManager::Get()->EnableLargeCursor(true);
600   EXPECT_TRUE(CreateDetailedMenu());
601   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
602   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
603   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
604   EXPECT_TRUE(IsLargeCursorEnabledOnDetailMenu());
605   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
606   CloseDetailMenu();
607
608   // Disabling large cursor.
609   AccessibilityManager::Get()->EnableLargeCursor(false);
610   EXPECT_TRUE(CreateDetailedMenu());
611   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
612   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
613   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
614   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
615   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
616   CloseDetailMenu();
617
618   // Enabling all of the a11y features.
619   AccessibilityManager::Get()->EnableSpokenFeedback(
620       true, ash::A11Y_NOTIFICATION_NONE);
621   AccessibilityManager::Get()->EnableHighContrast(true);
622   SetMagnifierEnabled(true);
623   AccessibilityManager::Get()->EnableLargeCursor(true);
624   EXPECT_TRUE(CreateDetailedMenu());
625   EXPECT_TRUE(IsSpokenFeedbackEnabledOnDetailMenu());
626   EXPECT_TRUE(IsHighContrastEnabledOnDetailMenu());
627   EXPECT_TRUE(IsScreenMagnifierEnabledOnDetailMenu());
628   EXPECT_TRUE(IsLargeCursorEnabledOnDetailMenu());
629   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
630   CloseDetailMenu();
631
632   // Disabling all of the a11y features.
633   AccessibilityManager::Get()->EnableSpokenFeedback(
634       false, ash::A11Y_NOTIFICATION_NONE);
635   AccessibilityManager::Get()->EnableHighContrast(false);
636   SetMagnifierEnabled(false);
637   AccessibilityManager::Get()->EnableLargeCursor(false);
638   EXPECT_TRUE(CreateDetailedMenu());
639   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
640   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
641   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
642   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
643   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
644   CloseDetailMenu();
645
646   // Autoclick is disabled on login screen.
647   SetLoginStatus(ash::user::LOGGED_IN_USER);
648
649   // Enabling autoclick.
650   AccessibilityManager::Get()->EnableAutoclick(true);
651   EXPECT_TRUE(CreateDetailedMenu());
652   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
653   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
654   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
655   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
656   EXPECT_TRUE(IsAutoclickEnabledOnDetailMenu());
657   CloseDetailMenu();
658
659   // Disabling autoclick.
660   AccessibilityManager::Get()->EnableAutoclick(false);
661   EXPECT_TRUE(CreateDetailedMenu());
662   EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
663   EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
664   EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
665   EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
666   EXPECT_FALSE(IsAutoclickEnabledOnDetailMenu());
667   CloseDetailMenu();
668 }
669
670 IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, CheckMenuVisibilityOnDetailMenu) {
671   SetLoginStatus(ash::user::LOGGED_IN_NONE);
672   EXPECT_TRUE(CreateDetailedMenu());
673   EXPECT_TRUE(IsSpokenFeedbackMenuShownOnDetailMenu());
674   EXPECT_TRUE(IsHighContrastMenuShownOnDetailMenu());
675   EXPECT_TRUE(IsScreenMagnifierMenuShownOnDetailMenu());
676   EXPECT_TRUE(IsLargeCursorMenuShownOnDetailMenu());
677   EXPECT_FALSE(IsAutoclickMenuShownOnDetailMenu());
678   CloseDetailMenu();
679
680   SetLoginStatus(ash::user::LOGGED_IN_USER);
681   EXPECT_TRUE(CreateDetailedMenu());
682   EXPECT_TRUE(IsSpokenFeedbackMenuShownOnDetailMenu());
683   EXPECT_TRUE(IsHighContrastMenuShownOnDetailMenu());
684   EXPECT_TRUE(IsScreenMagnifierMenuShownOnDetailMenu());
685   EXPECT_FALSE(IsLargeCursorMenuShownOnDetailMenu());
686   EXPECT_TRUE(IsAutoclickMenuShownOnDetailMenu());
687   CloseDetailMenu();
688
689   SetLoginStatus(ash::user::LOGGED_IN_LOCKED);
690   EXPECT_TRUE(CreateDetailedMenu());
691   EXPECT_TRUE(IsSpokenFeedbackMenuShownOnDetailMenu());
692   EXPECT_TRUE(IsHighContrastMenuShownOnDetailMenu());
693   EXPECT_TRUE(IsScreenMagnifierMenuShownOnDetailMenu());
694   EXPECT_FALSE(IsLargeCursorMenuShownOnDetailMenu());
695   EXPECT_TRUE(IsAutoclickMenuShownOnDetailMenu());
696   CloseDetailMenu();
697 }
698
699 INSTANTIATE_TEST_CASE_P(TrayAccessibilityTestInstance,
700                         TrayAccessibilityTest,
701                         testing::Values(PREF_SERVICE,
702                                         POLICY));
703
704 }  // namespace chromeos