Disable view source for Developer Tools.
[chromium-blink-merge.git] / chrome / browser / chromeos / accessibility / sticky_keys_browsertest.cc
blobcb93170801cfd38a12eacd619858bf3f9f6ab96c
1 // Copyright 2013 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.
5 #include "ash/shell.h"
6 #include "ash/system/tray/system_tray.h"
7 #include "base/command_line.h"
8 #include "base/prefs/pref_service.h"
9 #include "chrome/browser/chromeos/accessibility/accessibility_manager.h"
10 #include "chrome/browser/profiles/profile.h"
11 #include "chrome/browser/ui/browser.h"
12 #include "chrome/browser/ui/tabs/tab_strip_model.h"
13 #include "chrome/browser/ui/view_ids.h"
14 #include "chrome/common/pref_names.h"
15 #include "chrome/test/base/in_process_browser_test.h"
16 #include "chrome/test/base/interactive_test_utils.h"
17 #include "ui/aura/root_window.h"
18 #include "ui/events/keycodes/keyboard_codes.h"
19 #include "ui/gfx/native_widget_types.h"
21 namespace chromeos {
23 class StickyKeysBrowserTest : public InProcessBrowserTest {
24 protected:
25 StickyKeysBrowserTest() {}
26 virtual ~StickyKeysBrowserTest() {}
28 void EnableStickyKeys() {
29 AccessibilityManager::Get()->EnableStickyKeys(true);
32 void DisableStickyKeys() {
33 AccessibilityManager::Get()->EnableStickyKeys(false);
36 ash::SystemTray* GetSystemTray() {
37 return ash::Shell::GetInstance()->GetPrimarySystemTray();
40 void SendKeyPress(ui::KeyboardCode key) {
41 gfx::NativeWindow root_window =
42 ash::Shell::GetInstance()->GetPrimaryRootWindow();
43 ASSERT_TRUE(
44 ui_test_utils::SendKeyPressToWindowSync(root_window,
45 key,
46 false, // control
47 false, // shift
48 false, // alt
49 false)); // command
52 content::NotificationRegistrar registrar_;
54 DISALLOW_COPY_AND_ASSIGN(StickyKeysBrowserTest);
57 IN_PROC_BROWSER_TEST_F(StickyKeysBrowserTest, OpenTrayMenu) {
58 EnableStickyKeys();
60 // Open system tray bubble with shortcut.
61 SendKeyPress(ui::VKEY_MENU); // alt key.
62 SendKeyPress(ui::VKEY_SHIFT);
63 SendKeyPress(ui::VKEY_S);
64 EXPECT_TRUE(GetSystemTray()->HasSystemBubble());
66 // Hide system bubble.
67 GetSystemTray()->CloseSystemBubble();
68 EXPECT_FALSE(GetSystemTray()->HasSystemBubble());
70 // Pressing S again should not reopen the bubble.
71 SendKeyPress(ui::VKEY_S);
72 EXPECT_FALSE(GetSystemTray()->HasSystemBubble());
74 // With sticky keys disabled, we will fail to perform the shortcut.
75 DisableStickyKeys();
76 SendKeyPress(ui::VKEY_MENU); // alt key.
77 SendKeyPress(ui::VKEY_SHIFT);
78 SendKeyPress(ui::VKEY_S);
79 EXPECT_FALSE(GetSystemTray()->HasSystemBubble());
82 IN_PROC_BROWSER_TEST_F(StickyKeysBrowserTest, OpenNewTabs) {
83 // Lock the modifier key.
84 EnableStickyKeys();
85 SendKeyPress(ui::VKEY_CONTROL);
86 SendKeyPress(ui::VKEY_CONTROL);
88 // In the locked state, pressing 't' should open a new tab each time.
89 TabStripModel* tab_strip_model = browser()->tab_strip_model();
90 int tab_count = 1;
91 for (; tab_count < 5; ++tab_count) {
92 EXPECT_EQ(tab_count, tab_strip_model->count());
93 SendKeyPress(ui::VKEY_T);
96 // Unlock the modifier key and shortcut should no longer activate.
97 SendKeyPress(ui::VKEY_CONTROL);
98 SendKeyPress(ui::VKEY_T);
99 EXPECT_EQ(tab_count, tab_strip_model->count());
101 // Shortcut should not work after disabling sticky keys.
102 DisableStickyKeys();
103 SendKeyPress(ui::VKEY_CONTROL);
104 SendKeyPress(ui::VKEY_CONTROL);
105 SendKeyPress(ui::VKEY_T);
106 EXPECT_EQ(tab_count, tab_strip_model->count());
109 IN_PROC_BROWSER_TEST_F(StickyKeysBrowserTest, CtrlClickHomeButton) {
110 // Show home page button.
111 browser()->profile()->GetPrefs()->SetBoolean(prefs::kShowHomeButton, true);
112 TabStripModel* tab_strip_model = browser()->tab_strip_model();
113 int tab_count = 1;
114 EXPECT_EQ(tab_count, tab_strip_model->count());
116 // Test sticky keys with modified mouse click action.
117 EnableStickyKeys();
118 SendKeyPress(ui::VKEY_CONTROL);
119 ui_test_utils::ClickOnView(browser(), VIEW_ID_HOME_BUTTON);
120 EXPECT_EQ(++tab_count, tab_strip_model->count());
121 ui_test_utils::ClickOnView(browser(), VIEW_ID_HOME_BUTTON);
122 EXPECT_EQ(tab_count, tab_strip_model->count());
124 // Test locked modifier key with mouse click.
125 SendKeyPress(ui::VKEY_CONTROL);
126 SendKeyPress(ui::VKEY_CONTROL);
127 for (; tab_count < 5; ++tab_count) {
128 EXPECT_EQ(tab_count, tab_strip_model->count());
129 ui_test_utils::ClickOnView(browser(), VIEW_ID_HOME_BUTTON);
131 SendKeyPress(ui::VKEY_CONTROL);
132 ui_test_utils::ClickOnView(browser(), VIEW_ID_HOME_BUTTON);
133 EXPECT_EQ(tab_count, tab_strip_model->count());
135 // Test disabling sticky keys prevent modified mouse click.
136 DisableStickyKeys();
137 SendKeyPress(ui::VKEY_CONTROL);
138 ui_test_utils::ClickOnView(browser(), VIEW_ID_HOME_BUTTON);
139 EXPECT_EQ(tab_count, tab_strip_model->count());
142 } // namespace chromeos