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