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/profiles/profile.h"
24 #include "chrome/browser/profiles/profile_manager.h"
25 #include "chrome/common/chrome_switches.h"
26 #include "chrome/common/pref_names.h"
27 #include "chrome/test/base/in_process_browser_test.h"
28 #include "chrome/test/base/testing_profile.h"
29 #include "chromeos/chromeos_switches.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
SetMagnifierEnabled(bool enabled)50 void SetMagnifierEnabled(bool enabled) {
51 MagnificationManager::Get()->SetMagnifierEnabled(enabled);
52 }
53
54 class TrayAccessibilityTest
55 : public InProcessBrowserTest,
56 public WithParamInterface<PrefSettingMechanism> {
57 protected:
TrayAccessibilityTest()58 TrayAccessibilityTest() {}
~TrayAccessibilityTest()59 virtual ~TrayAccessibilityTest() {}
60
61 // The profile which should be used by tese tests.
GetProfile()62 Profile* GetProfile() { return ProfileManager::GetActiveUserProfile(); }
63
SetUpInProcessBrowserTestFixture()64 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
65 EXPECT_CALL(provider_, IsInitializationComplete(_))
66 .WillRepeatedly(Return(true));
67 policy::BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_);
68 }
69
SetUpCommandLine(CommandLine * command_line)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
SetUpOnMainThread()76 virtual void SetUpOnMainThread() OVERRIDE {
77 AccessibilityManager::Get()->SetProfileForTest(GetProfile());
78 MagnificationManager::Get()->SetProfileForTest(GetProfile());
79 }
80
RunTestOnMainThreadLoop()81 virtual void RunTestOnMainThreadLoop() OVERRIDE {
82 // Need to mark oobe completed to show detailed views.
83 StartupUtils::MarkOobeCompleted();
84 InProcessBrowserTest::RunTestOnMainThreadLoop();
85 }
86
SetShowAccessibilityOptionsInSystemTrayMenu(bool value)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
tray()105 ash::internal::TrayAccessibility* tray() {
106 return ash::Shell::GetInstance()->GetPrimarySystemTray()->
107 GetTrayAccessibilityForTest();
108 }
109
IsTrayIconVisible()110 bool IsTrayIconVisible() {
111 return tray()->tray_icon_visible_;
112 }
113
CreateMenuItem()114 views::View* CreateMenuItem() {
115 return tray()->CreateDefaultView(GetLoginStatus());
116 }
117
DestroyMenuItem()118 void DestroyMenuItem() {
119 return tray()->DestroyDefaultView();
120 }
121
CanCreateMenuItem()122 bool CanCreateMenuItem() {
123 views::View* menu_item_view = CreateMenuItem();
124 DestroyMenuItem();
125 return menu_item_view != NULL;
126 }
127
SetLoginStatus(ash::user::LoginStatus status)128 void SetLoginStatus(ash::user::LoginStatus status) {
129 tray()->UpdateAfterLoginStatusChange(status);
130 }
131
GetLoginStatus()132 ash::user::LoginStatus GetLoginStatus() {
133 return tray()->login_;
134 }
135
CreateDetailedMenu()136 bool CreateDetailedMenu() {
137 tray()->PopupDetailedView(0, false);
138 return tray()->detailed_menu_ != NULL;
139 }
140
CloseDetailMenu()141 void CloseDetailMenu() {
142 CHECK(tray()->detailed_menu_);
143 tray()->DestroyDetailedView();
144 tray()->detailed_menu_ = NULL;
145 }
146
ClickSpokenFeedbackOnDetailMenu()147 void ClickSpokenFeedbackOnDetailMenu() {
148 views::View* button = tray()->detailed_menu_->spoken_feedback_view_;
149 tray()->detailed_menu_->OnViewClicked(button);
150 }
151
ClickHighContrastOnDetailMenu()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
ClickScreenMagnifierOnDetailMenu()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
ClickAutoclickOnDetailMenu()164 void ClickAutoclickOnDetailMenu() {
165 views::View* button = tray()->detailed_menu_->autoclick_view_;
166 EXPECT_TRUE(button);
167 tray()->detailed_menu_->OnViewClicked(button);
168 }
169
IsSpokenFeedbackEnabledOnDetailMenu()170 bool IsSpokenFeedbackEnabledOnDetailMenu() {
171 return tray()->detailed_menu_->spoken_feedback_enabled_;
172 }
173
IsHighContrastEnabledOnDetailMenu()174 bool IsHighContrastEnabledOnDetailMenu() {
175 return tray()->detailed_menu_->high_contrast_enabled_;
176 }
177
IsScreenMagnifierEnabledOnDetailMenu()178 bool IsScreenMagnifierEnabledOnDetailMenu() {
179 return tray()->detailed_menu_->screen_magnifier_enabled_;
180 }
181
IsLargeCursorEnabledOnDetailMenu()182 bool IsLargeCursorEnabledOnDetailMenu() {
183 return tray()->detailed_menu_->large_cursor_enabled_;
184 }
185
IsAutoclickEnabledOnDetailMenu()186 bool IsAutoclickEnabledOnDetailMenu() {
187 return tray()->detailed_menu_->autoclick_enabled_;
188 }
IsSpokenFeedbackMenuShownOnDetailMenu()189 bool IsSpokenFeedbackMenuShownOnDetailMenu() {
190 return tray()->detailed_menu_->spoken_feedback_view_;
191 }
192
IsHighContrastMenuShownOnDetailMenu()193 bool IsHighContrastMenuShownOnDetailMenu() {
194 return tray()->detailed_menu_->high_contrast_view_;
195 }
196
IsScreenMagnifierMenuShownOnDetailMenu()197 bool IsScreenMagnifierMenuShownOnDetailMenu() {
198 return tray()->detailed_menu_->screen_magnifier_view_;
199 }
200
IsLargeCursorMenuShownOnDetailMenu()201 bool IsLargeCursorMenuShownOnDetailMenu() {
202 return tray()->detailed_menu_->large_cursor_view_;
203 }
204
IsAutoclickMenuShownOnDetailMenu()205 bool IsAutoclickMenuShownOnDetailMenu() {
206 return tray()->detailed_menu_->autoclick_view_;
207 }
208
209 policy::MockConfigurationPolicyProvider provider_;
210 };
211
IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest,LoginStatus)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
IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest,ShowTrayIcon)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
IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest,ShowMenu)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
IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest,ShowMenuWithShowMenuOption)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
IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest,ShowMenuWithShowOnLoginScreen)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
IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest,KeepMenuVisibilityOnLockScreen)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
IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest,MAYBE_ClickDetailMenu)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
IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest,CheckMarksOnDetailMenu)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
IN_PROC_BROWSER_TEST_P(TrayAccessibilityTest,CheckMenuVisibilityOnDetailMenu)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
705