tray_accessibility_browsertest.cc revision 5e3f23d412006dc4db4e659864679f29341e113f
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/command_line.h"
11#include "base/prefs/pref_service.h"
12#include "chrome/browser/browser_process.h"
13#include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
14#include "chrome/browser/chromeos/accessibility/magnification_manager.h"
15#include "chrome/browser/chromeos/cros/cros_in_process_browser_test.h"
16#include "chrome/browser/chromeos/login/helper.h"
17#include "chrome/browser/chromeos/login/login_utils.h"
18#include "chrome/browser/chromeos/login/startup_utils.h"
19#include "chrome/browser/chromeos/login/user_manager.h"
20#include "chrome/browser/chromeos/login/user_manager_impl.h"
21#include "chrome/browser/policy/browser_policy_connector.h"
22#include "chrome/browser/policy/mock_configuration_policy_provider.h"
23#include "chrome/browser/policy/policy_map.h"
24#include "chrome/browser/policy/policy_types.h"
25#include "chrome/browser/profiles/profile.h"
26#include "chrome/browser/profiles/profile_manager.h"
27#include "chrome/common/chrome_notification_types.h"
28#include "chrome/common/chrome_switches.h"
29#include "chrome/common/pref_names.h"
30#include "chrome/test/base/testing_profile.h"
31#include "chromeos/chromeos_switches.h"
32#include "chromeos/login/login_state.h"
33#include "content/public/test/test_utils.h"
34#include "policy/policy_constants.h"
35#include "testing/gtest/include/gtest/gtest.h"
36#include "ui/views/widget/widget.h"
37
38using testing::AnyNumber;
39using testing::Return;
40using testing::_;
41using testing::WithParamInterface;
42
43namespace chromeos {
44
45enum PrefSettingMechanism {
46  PREF_SERVICE,
47  POLICY,
48};
49
50void SetMagnifierEnabled(bool enabled) {
51  MagnificationManager::Get()->SetMagnifierEnabled(enabled);
52}
53
54class TrayAccessibilityTest
55    : public CrosInProcessBrowserTest,
56      public WithParamInterface<PrefSettingMechanism> {
57 protected:
58  TrayAccessibilityTest() {}
59  virtual ~TrayAccessibilityTest() {}
60
61  virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
62    EXPECT_CALL(provider_, IsInitializationComplete(_))
63        .WillRepeatedly(Return(true));
64    EXPECT_CALL(provider_, RegisterPolicyDomain(_)).Times(AnyNumber());
65    policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
66  }
67
68  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
69    command_line->AppendSwitch(switches::kLoginManager);
70    command_line->AppendSwitchASCII(switches::kLoginProfile,
71                                    TestingProfile::kTestUserProfileDir);
72  }
73
74  virtual void SetUpOnMainThread() OVERRIDE {
75    AccessibilityManager::Get()->SetProfileForTest(
76        ProfileManager::GetDefaultProfile());
77    MagnificationManager::Get()->SetProfileForTest(
78        ProfileManager::GetDefaultProfile());
79  }
80
81  virtual void RunTestOnMainThreadLoop() OVERRIDE {
82    // Need to mark oobe completed to show detailed views.
83    StartupUtils::MarkOobeCompleted();
84    CrosInProcessBrowserTest::RunTestOnMainThreadLoop();
85  }
86
87  void SetShowAccessibilityOptionsInSystemTrayMenu(bool value) {
88    if (GetParam() == PREF_SERVICE) {
89      Profile* profile = ProfileManager::GetDefaultProfile();
90      PrefService* prefs = profile->GetPrefs();
91      prefs->SetBoolean(prefs::kShouldAlwaysShowAccessibilityMenu, value);
92    } else if (GetParam() == POLICY) {
93      policy::PolicyMap policy_map;
94      policy_map.Set(policy::key::kShowAccessibilityOptionsInSystemTrayMenu,
95                     policy::POLICY_LEVEL_MANDATORY,
96                     policy::POLICY_SCOPE_USER,
97                     base::Value::CreateBooleanValue(value));
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  bool IsSpokenFeedbackEnabledOnDetailMenu() {
165    return tray()->detailed_menu_->spoken_feedback_enabled_;
166  }
167
168  bool IsHighContrastEnabledOnDetailMenu() {
169    return tray()->detailed_menu_->high_contrast_enabled_;
170  }
171
172  bool IsScreenMagnifierEnabledOnDetailMenu() {
173    return tray()->detailed_menu_->screen_magnifier_enabled_;
174  }
175
176  bool IsLargeCursorEnabledOnDetailMenu() {
177    return tray()->detailed_menu_->large_cursor_enabled_;
178  }
179
180  bool IsSpokenFeedbackMenuShownOnDetailMenu() {
181    return tray()->detailed_menu_->spoken_feedback_view_;
182  }
183
184  bool IsHighContrastMenuShownOnDetailMenu() {
185    return tray()->detailed_menu_->high_contrast_view_;
186  }
187
188  bool IsScreenMagnifierMenuShownOnDetailMenu() {
189    return tray()->detailed_menu_->screen_magnifier_view_;
190  }
191
192  bool IsLargeCursorMenuShownOnDetailMenu() {
193    return tray()->detailed_menu_->large_cursor_view_;
194  }
195
196  policy::MockConfigurationPolicyProvider provider_;
197};
198
199IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, LoginStatus) {
200  EXPECT_EQ(ash::user::LOGGED_IN_NONE, GetLoginStatus());
201
202  UserManager::Get()->UserLoggedIn(
203      "owner@invalid.domain", "owner@invalid.domain", true);
204  UserManager::Get()->SessionStarted();
205
206  EXPECT_EQ(ash::user::LOGGED_IN_USER, GetLoginStatus());
207}
208
209IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, ShowTrayIcon) {
210  SetLoginStatus(ash::user::LOGGED_IN_NONE);
211
212  // Confirms that the icon is invisible before login.
213  EXPECT_FALSE(IsTrayIconVisible());
214
215  UserManager::Get()->UserLoggedIn(
216      "owner@invalid.domain", "owner@invalid.domain", true);
217  UserManager::Get()->SessionStarted();
218
219  // Confirms that the icon is invisible just after login.
220  EXPECT_FALSE(IsTrayIconVisible());
221
222  // Toggling spoken feedback changes the visibillity of the icon.
223  AccessibilityManager::Get()->EnableSpokenFeedback(
224      true, ash::A11Y_NOTIFICATION_NONE);
225  EXPECT_TRUE(IsTrayIconVisible());
226  AccessibilityManager::Get()->EnableSpokenFeedback(
227      false, ash::A11Y_NOTIFICATION_NONE);
228  EXPECT_FALSE(IsTrayIconVisible());
229
230  // Toggling high contrast the visibillity of the icon.
231  AccessibilityManager::Get()->EnableHighContrast(true);
232  EXPECT_TRUE(IsTrayIconVisible());
233  AccessibilityManager::Get()->EnableHighContrast(false);
234  EXPECT_FALSE(IsTrayIconVisible());
235
236  // Toggling magnifier the visibility of the icon.
237  SetMagnifierEnabled(true);
238  EXPECT_TRUE(IsTrayIconVisible());
239  SetMagnifierEnabled(false);
240  EXPECT_FALSE(IsTrayIconVisible());
241
242  // Enabling all accessibility features.
243  SetMagnifierEnabled(true);
244  EXPECT_TRUE(IsTrayIconVisible());
245  AccessibilityManager::Get()->EnableHighContrast(true);
246  EXPECT_TRUE(IsTrayIconVisible());
247  AccessibilityManager::Get()->EnableSpokenFeedback(
248      true, ash::A11Y_NOTIFICATION_NONE);
249  EXPECT_TRUE(IsTrayIconVisible());
250  AccessibilityManager::Get()->EnableSpokenFeedback(
251      false, ash::A11Y_NOTIFICATION_NONE);
252  EXPECT_TRUE(IsTrayIconVisible());
253  AccessibilityManager::Get()->EnableHighContrast(false);
254  EXPECT_TRUE(IsTrayIconVisible());
255  SetMagnifierEnabled(false);
256  EXPECT_FALSE(IsTrayIconVisible());
257
258  // Confirms that prefs::kShouldAlwaysShowAccessibilityMenu doesn't affect
259  // the icon on the tray.
260  SetShowAccessibilityOptionsInSystemTrayMenu(true);
261  AccessibilityManager::Get()->EnableHighContrast(true);
262  EXPECT_TRUE(IsTrayIconVisible());
263  AccessibilityManager::Get()->EnableHighContrast(false);
264  EXPECT_FALSE(IsTrayIconVisible());
265}
266
267IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, ShowMenu) {
268  // Login
269  UserManager::Get()->UserLoggedIn(
270      "owner@invalid.domain", "owner@invalid.domain", true);
271  UserManager::Get()->SessionStarted();
272
273  SetShowAccessibilityOptionsInSystemTrayMenu(false);
274
275  // Confirms that the menu is hidden.
276  EXPECT_FALSE(CanCreateMenuItem());
277
278  // Toggling spoken feedback changes the visibillity of the menu.
279  AccessibilityManager::Get()->EnableSpokenFeedback(
280      true, ash::A11Y_NOTIFICATION_NONE);
281  EXPECT_TRUE(CanCreateMenuItem());
282  AccessibilityManager::Get()->EnableSpokenFeedback(
283      false, ash::A11Y_NOTIFICATION_NONE);
284  EXPECT_FALSE(CanCreateMenuItem());
285
286  // Toggling high contrast changes the visibillity of the menu.
287  AccessibilityManager::Get()->EnableHighContrast(true);
288  EXPECT_TRUE(CanCreateMenuItem());
289  AccessibilityManager::Get()->EnableHighContrast(false);
290  EXPECT_FALSE(CanCreateMenuItem());
291
292  // Toggling screen magnifier changes the visibility of the menu.
293  SetMagnifierEnabled(true);
294  EXPECT_TRUE(CanCreateMenuItem());
295  SetMagnifierEnabled(false);
296  EXPECT_FALSE(CanCreateMenuItem());
297
298  // Enabling all accessibility features.
299  SetMagnifierEnabled(true);
300  EXPECT_TRUE(CanCreateMenuItem());
301  AccessibilityManager::Get()->EnableHighContrast(true);
302  EXPECT_TRUE(CanCreateMenuItem());
303  AccessibilityManager::Get()->EnableSpokenFeedback(
304      true, ash::A11Y_NOTIFICATION_NONE);
305  EXPECT_TRUE(CanCreateMenuItem());
306  AccessibilityManager::Get()->EnableSpokenFeedback(
307      false, ash::A11Y_NOTIFICATION_NONE);
308  EXPECT_TRUE(CanCreateMenuItem());
309  AccessibilityManager::Get()->EnableHighContrast(false);
310  EXPECT_TRUE(CanCreateMenuItem());
311  SetMagnifierEnabled(false);
312  EXPECT_FALSE(CanCreateMenuItem());
313}
314
315IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, ShowMenuWithShowMenuOption) {
316  // Login
317  UserManager::Get()->UserLoggedIn(
318      "owner@invalid.domain", "owner@invalid.domain", true);
319  UserManager::Get()->SessionStarted();
320
321  SetShowAccessibilityOptionsInSystemTrayMenu(true);
322
323  // Confirms that the menu is visible.
324  EXPECT_TRUE(CanCreateMenuItem());
325
326  // The menu is keeping visible regardless of toggling spoken feedback.
327  AccessibilityManager::Get()->EnableSpokenFeedback(
328      true, ash::A11Y_NOTIFICATION_NONE);
329  EXPECT_TRUE(CanCreateMenuItem());
330  AccessibilityManager::Get()->EnableSpokenFeedback(
331      false, ash::A11Y_NOTIFICATION_NONE);
332  EXPECT_TRUE(CanCreateMenuItem());
333
334  // The menu is keeping visible regardless of toggling high contrast.
335  AccessibilityManager::Get()->EnableHighContrast(true);
336  EXPECT_TRUE(CanCreateMenuItem());
337  AccessibilityManager::Get()->EnableHighContrast(false);
338  EXPECT_TRUE(CanCreateMenuItem());
339
340  // The menu is keeping visible regardless of toggling screen magnifier.
341  SetMagnifierEnabled(true);
342  EXPECT_TRUE(CanCreateMenuItem());
343  SetMagnifierEnabled(false);
344  EXPECT_TRUE(CanCreateMenuItem());
345
346  // Enabling all accessibility features.
347  SetMagnifierEnabled(true);
348  EXPECT_TRUE(CanCreateMenuItem());
349  AccessibilityManager::Get()->EnableHighContrast(true);
350  EXPECT_TRUE(CanCreateMenuItem());
351  AccessibilityManager::Get()->EnableSpokenFeedback(
352      true, ash::A11Y_NOTIFICATION_NONE);
353  EXPECT_TRUE(CanCreateMenuItem());
354  AccessibilityManager::Get()->EnableSpokenFeedback(
355      false, ash::A11Y_NOTIFICATION_NONE);
356  EXPECT_TRUE(CanCreateMenuItem());
357  AccessibilityManager::Get()->EnableHighContrast(false);
358  EXPECT_TRUE(CanCreateMenuItem());
359  SetMagnifierEnabled(false);
360  EXPECT_TRUE(CanCreateMenuItem());
361
362  SetShowAccessibilityOptionsInSystemTrayMenu(false);
363
364  // Confirms that the menu is invisible.
365  EXPECT_FALSE(CanCreateMenuItem());
366}
367
368IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, ShowMenuWithShowOnLoginScreen) {
369  SetLoginStatus(ash::user::LOGGED_IN_NONE);
370
371  // Confirms that the menu is visible.
372  EXPECT_TRUE(CanCreateMenuItem());
373
374  // The menu is keeping visible regardless of toggling spoken feedback.
375  AccessibilityManager::Get()->EnableSpokenFeedback(
376      true, ash::A11Y_NOTIFICATION_NONE);
377  EXPECT_TRUE(CanCreateMenuItem());
378  AccessibilityManager::Get()->EnableSpokenFeedback(
379      false, ash::A11Y_NOTIFICATION_NONE);
380  EXPECT_TRUE(CanCreateMenuItem());
381
382  // The menu is keeping visible regardless of toggling high contrast.
383  AccessibilityManager::Get()->EnableHighContrast(true);
384  EXPECT_TRUE(CanCreateMenuItem());
385  AccessibilityManager::Get()->EnableHighContrast(false);
386  EXPECT_TRUE(CanCreateMenuItem());
387
388  // The menu is keeping visible regardless of toggling screen magnifier.
389  SetMagnifierEnabled(true);
390  EXPECT_TRUE(CanCreateMenuItem());
391  SetMagnifierEnabled(false);
392  EXPECT_TRUE(CanCreateMenuItem());
393
394  // Enabling all accessibility features.
395  SetMagnifierEnabled(true);
396  EXPECT_TRUE(CanCreateMenuItem());
397  AccessibilityManager::Get()->EnableHighContrast(true);
398  EXPECT_TRUE(CanCreateMenuItem());
399  AccessibilityManager::Get()->EnableSpokenFeedback(
400      true, ash::A11Y_NOTIFICATION_NONE);
401  EXPECT_TRUE(CanCreateMenuItem());
402  AccessibilityManager::Get()->EnableSpokenFeedback(
403      false, ash::A11Y_NOTIFICATION_NONE);
404  EXPECT_TRUE(CanCreateMenuItem());
405  AccessibilityManager::Get()->EnableHighContrast(false);
406  EXPECT_TRUE(CanCreateMenuItem());
407  SetMagnifierEnabled(false);
408  EXPECT_TRUE(CanCreateMenuItem());
409
410  SetShowAccessibilityOptionsInSystemTrayMenu(true);
411
412  // Confirms that the menu is keeping visible.
413  EXPECT_TRUE(CanCreateMenuItem());
414
415  SetShowAccessibilityOptionsInSystemTrayMenu(false);
416
417  // Confirms that the menu is keeping visible.
418  EXPECT_TRUE(CanCreateMenuItem());
419}
420
421IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, KeepMenuVisibilityOnLockScreen) {
422  // Enables high contrast mode.
423  AccessibilityManager::Get()->EnableHighContrast(true);
424  EXPECT_TRUE(CanCreateMenuItem());
425
426  // Locks the screen.
427  SetLoginStatus(ash::user::LOGGED_IN_LOCKED);
428  EXPECT_TRUE(CanCreateMenuItem());
429
430  // Disables high contrast mode.
431  AccessibilityManager::Get()->EnableHighContrast(false);
432
433  // Confirms that the menu is still visible.
434  EXPECT_TRUE(CanCreateMenuItem());
435}
436
437#if defined(OS_CHROMEOS)
438#define MAYBE_ClickDetailMenu DISABLED_ClickDetailMenu
439#else
440#define MAYBE_ClickDetailMenu ClickDetailMenu
441#endif
442
443IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, MAYBE_ClickDetailMenu) {
444  // Confirms that the check item toggles the spoken feedback.
445  EXPECT_FALSE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled());
446
447  EXPECT_TRUE(CreateDetailedMenu());
448  ClickSpokenFeedbackOnDetailMenu();
449  EXPECT_TRUE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled());
450
451  EXPECT_TRUE(CreateDetailedMenu());
452  ClickSpokenFeedbackOnDetailMenu();
453  EXPECT_FALSE(AccessibilityManager::Get()->IsSpokenFeedbackEnabled());
454
455  // Confirms that the check item toggles the high contrast.
456  EXPECT_FALSE(AccessibilityManager::Get()->IsHighContrastEnabled());
457
458  EXPECT_TRUE(CreateDetailedMenu());
459  ClickHighContrastOnDetailMenu();
460  EXPECT_TRUE(AccessibilityManager::Get()->IsHighContrastEnabled());
461
462  EXPECT_TRUE(CreateDetailedMenu());
463  ClickHighContrastOnDetailMenu();
464  EXPECT_FALSE(AccessibilityManager::Get()->IsHighContrastEnabled());
465
466  // Confirms that the check item toggles the magnifier.
467  EXPECT_FALSE(AccessibilityManager::Get()->IsHighContrastEnabled());
468
469  EXPECT_FALSE(MagnificationManager::Get()->IsMagnifierEnabled());
470  EXPECT_TRUE(CreateDetailedMenu());
471  ClickScreenMagnifierOnDetailMenu();
472  EXPECT_TRUE(MagnificationManager::Get()->IsMagnifierEnabled());
473
474  EXPECT_TRUE(CreateDetailedMenu());
475  ClickScreenMagnifierOnDetailMenu();
476  EXPECT_FALSE(MagnificationManager::Get()->IsMagnifierEnabled());
477}
478
479IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, CheckMarksOnDetailMenu) {
480  SetLoginStatus(ash::user::LOGGED_IN_NONE);
481
482  // At first, all of the check is unchecked.
483  EXPECT_TRUE(CreateDetailedMenu());
484  EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
485  EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
486  EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
487  EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
488  CloseDetailMenu();
489
490  // Enabling spoken feedback.
491  AccessibilityManager::Get()->EnableSpokenFeedback(
492      true, ash::A11Y_NOTIFICATION_NONE);
493  EXPECT_TRUE(CreateDetailedMenu());
494  EXPECT_TRUE(IsSpokenFeedbackEnabledOnDetailMenu());
495  EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
496  EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
497  EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
498  CloseDetailMenu();
499
500  // Disabling spoken feedback.
501  AccessibilityManager::Get()->EnableSpokenFeedback(
502      false, ash::A11Y_NOTIFICATION_NONE);
503  EXPECT_TRUE(CreateDetailedMenu());
504  EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
505  EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
506  EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
507  EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
508  CloseDetailMenu();
509
510  // Enabling high contrast.
511  AccessibilityManager::Get()->EnableHighContrast(true);
512  EXPECT_TRUE(CreateDetailedMenu());
513  EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
514  EXPECT_TRUE(IsHighContrastEnabledOnDetailMenu());
515  EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
516  EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
517  CloseDetailMenu();
518
519  // Disabling high contrast.
520  AccessibilityManager::Get()->EnableHighContrast(false);
521  EXPECT_TRUE(CreateDetailedMenu());
522  EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
523  EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
524  EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
525  EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
526  CloseDetailMenu();
527
528  // Enabling full screen magnifier.
529  SetMagnifierEnabled(true);
530  EXPECT_TRUE(CreateDetailedMenu());
531  EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
532  EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
533  EXPECT_TRUE(IsScreenMagnifierEnabledOnDetailMenu());
534  EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
535  CloseDetailMenu();
536
537  // Disabling screen magnifier.
538  SetMagnifierEnabled(false);
539  EXPECT_TRUE(CreateDetailedMenu());
540  EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
541  EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
542  EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
543  EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
544  CloseDetailMenu();
545
546  // Enabling large cursor.
547  AccessibilityManager::Get()->EnableLargeCursor(true);
548  EXPECT_TRUE(CreateDetailedMenu());
549  EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
550  EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
551  EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
552  EXPECT_TRUE(IsLargeCursorEnabledOnDetailMenu());
553  CloseDetailMenu();
554
555  // Disabling large cursor.
556  AccessibilityManager::Get()->EnableLargeCursor(false);
557  EXPECT_TRUE(CreateDetailedMenu());
558  EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
559  EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
560  EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
561  EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
562  CloseDetailMenu();
563
564  // Enabling all of the a11y features.
565  AccessibilityManager::Get()->EnableSpokenFeedback(
566      true, ash::A11Y_NOTIFICATION_NONE);
567  AccessibilityManager::Get()->EnableHighContrast(true);
568  SetMagnifierEnabled(true);
569  AccessibilityManager::Get()->EnableLargeCursor(true);
570  EXPECT_TRUE(CreateDetailedMenu());
571  EXPECT_TRUE(IsSpokenFeedbackEnabledOnDetailMenu());
572  EXPECT_TRUE(IsHighContrastEnabledOnDetailMenu());
573  EXPECT_TRUE(IsScreenMagnifierEnabledOnDetailMenu());
574  EXPECT_TRUE(IsLargeCursorEnabledOnDetailMenu());
575  CloseDetailMenu();
576
577  // Disabling all of the a11y features.
578  AccessibilityManager::Get()->EnableSpokenFeedback(
579      false, ash::A11Y_NOTIFICATION_NONE);
580  AccessibilityManager::Get()->EnableHighContrast(false);
581  SetMagnifierEnabled(false);
582  AccessibilityManager::Get()->EnableLargeCursor(false);
583  EXPECT_TRUE(CreateDetailedMenu());
584  EXPECT_FALSE(IsSpokenFeedbackEnabledOnDetailMenu());
585  EXPECT_FALSE(IsHighContrastEnabledOnDetailMenu());
586  EXPECT_FALSE(IsScreenMagnifierEnabledOnDetailMenu());
587  EXPECT_FALSE(IsLargeCursorEnabledOnDetailMenu());
588  CloseDetailMenu();
589}
590
591IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest, CheckMenuVisibilityOnDetailMenu) {
592  SetLoginStatus(ash::user::LOGGED_IN_NONE);
593  EXPECT_TRUE(CreateDetailedMenu());
594  EXPECT_TRUE(IsSpokenFeedbackMenuShownOnDetailMenu());
595  EXPECT_TRUE(IsHighContrastMenuShownOnDetailMenu());
596  EXPECT_TRUE(IsScreenMagnifierMenuShownOnDetailMenu());
597  EXPECT_TRUE(IsLargeCursorMenuShownOnDetailMenu());
598  CloseDetailMenu();
599
600  SetLoginStatus(ash::user::LOGGED_IN_USER);
601  EXPECT_TRUE(CreateDetailedMenu());
602  EXPECT_TRUE(IsSpokenFeedbackMenuShownOnDetailMenu());
603  EXPECT_TRUE(IsHighContrastMenuShownOnDetailMenu());
604  EXPECT_TRUE(IsScreenMagnifierMenuShownOnDetailMenu());
605  EXPECT_FALSE(IsLargeCursorMenuShownOnDetailMenu());
606  CloseDetailMenu();
607
608  SetLoginStatus(ash::user::LOGGED_IN_LOCKED);
609  EXPECT_TRUE(CreateDetailedMenu());
610  EXPECT_TRUE(IsSpokenFeedbackMenuShownOnDetailMenu());
611  EXPECT_TRUE(IsHighContrastMenuShownOnDetailMenu());
612  EXPECT_TRUE(IsScreenMagnifierMenuShownOnDetailMenu());
613  EXPECT_FALSE(IsLargeCursorMenuShownOnDetailMenu());
614  CloseDetailMenu();
615}
616
617INSTANTIATE_TEST_CASE_P(TrayAccessibilityTestInstance,
618                        TrayAccessibilityTest,
619                        testing::Values(PREF_SERVICE,
620                                        POLICY));
621
622}  // namespace chromeos
623