OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/chromeos/accessibility/select_to_speak_event_handler.h" | 5 #include "chrome/browser/chromeos/accessibility/select_to_speak_event_handler.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 | 8 |
9 #include "ash/shell.h" | 9 #include "ash/shell.h" |
10 #include "ash/test/ash_test_base.h" | 10 #include "ash/test/ash_test_base.h" |
11 #include "ash/test/ash_test_helper.h" | 11 #include "ash/test/ash_test_helper.h" |
12 #include "ash/test/ash_test_views_delegate.h" | 12 #include "ash/test/ash_test_views_delegate.h" |
13 #include "base/macros.h" | 13 #include "base/macros.h" |
14 #include "chrome/browser/chromeos/accessibility/speech_monitor.h" | 14 #include "chrome/browser/chromeos/accessibility/speech_monitor.h" |
15 #include "chrome/browser/ui/aura/accessibility/automation_manager_aura.h" | 15 #include "chrome/browser/ui/aura/accessibility/automation_manager_aura.h" |
16 #include "chrome/test/base/testing_profile.h" | 16 #include "chrome/test/base/testing_profile.h" |
17 #include "ui/aura/window.h" | 17 #include "ui/aura/window.h" |
18 #include "ui/events/event.h" | 18 #include "ui/events/event.h" |
19 #include "ui/events/event_constants.h" | 19 #include "ui/events/event_constants.h" |
20 #include "ui/events/test/event_generator.h" | 20 #include "ui/events/test/event_generator.h" |
21 #include "ui/views/views_delegate.h" | |
22 | 21 |
23 using chromeos::SelectToSpeakEventHandler; | 22 using chromeos::SelectToSpeakEventHandler; |
24 | 23 |
25 namespace { | 24 namespace { |
26 | 25 |
27 // Records all key events. | 26 // Records all key events. |
28 class EventCapturer : public ui::EventHandler { | 27 class EventCapturer : public ui::EventHandler { |
29 public: | 28 public: |
30 EventCapturer() {} | 29 EventCapturer() {} |
31 ~EventCapturer() override {} | 30 ~EventCapturer() override {} |
(...skipping 13 matching lines...) Expand all Loading... |
45 void OnKeyEvent(ui::KeyEvent* event) override { | 44 void OnKeyEvent(ui::KeyEvent* event) override { |
46 last_key_event_.reset(new ui::KeyEvent(*event)); | 45 last_key_event_.reset(new ui::KeyEvent(*event)); |
47 } | 46 } |
48 | 47 |
49 std::unique_ptr<ui::KeyEvent> last_key_event_; | 48 std::unique_ptr<ui::KeyEvent> last_key_event_; |
50 std::unique_ptr<ui::MouseEvent> last_mouse_event_; | 49 std::unique_ptr<ui::MouseEvent> last_mouse_event_; |
51 | 50 |
52 DISALLOW_COPY_AND_ASSIGN(EventCapturer); | 51 DISALLOW_COPY_AND_ASSIGN(EventCapturer); |
53 }; | 52 }; |
54 | 53 |
55 class SelectToSpeakAccessibilityEventDelegate | 54 class SelectToSpeakMouseEventDelegate |
56 : public ash::test::TestAccessibilityEventDelegate { | 55 : public chromeos::SelectToSpeakForwardedEventDelegateForTesting { |
57 public: | 56 public: |
58 SelectToSpeakAccessibilityEventDelegate() {} | 57 SelectToSpeakMouseEventDelegate() {} |
59 ~SelectToSpeakAccessibilityEventDelegate() override {} | |
60 | 58 |
61 void Reset() { events_captured_.clear(); } | 59 void Reset() { events_captured_.clear(); } |
62 | 60 |
63 bool CapturedAXEvent(ui::AXEvent event_type) { | 61 bool CapturedMouseEvent(ui::EventType event_type) { |
64 return events_captured_.find(event_type) != events_captured_.end(); | 62 return events_captured_.find(event_type) != events_captured_.end(); |
65 } | 63 } |
66 | 64 |
67 // Overriden from TestAccessibilityEventDelegate. | 65 // Overriden from SelectToSpeakForwardedEventDelegateForTesting |
68 void NotifyAccessibilityEvent(views::View* view, | 66 void OnForwardEventToSelectToSpeakExtension( |
69 ui::AXEvent event_type) override { | 67 const ui::MouseEvent& event) override { |
70 events_captured_.insert(event_type); | 68 events_captured_.insert(event.type()); |
71 } | 69 } |
72 | 70 |
73 private: | 71 private: |
74 std::set<ui::AXEvent> events_captured_; | 72 std::set<ui::EventType> events_captured_; |
75 | 73 |
76 DISALLOW_COPY_AND_ASSIGN(SelectToSpeakAccessibilityEventDelegate); | 74 DISALLOW_COPY_AND_ASSIGN(SelectToSpeakMouseEventDelegate); |
77 }; | 75 }; |
78 | 76 |
79 class SelectToSpeakEventHandlerTest : public ash::test::AshTestBase { | 77 class SelectToSpeakEventHandlerTest : public ash::test::AshTestBase { |
80 public: | 78 public: |
81 SelectToSpeakEventHandlerTest() | 79 SelectToSpeakEventHandlerTest() |
82 : generator_(nullptr), | 80 : generator_(nullptr), |
83 select_to_speak_event_handler_(new SelectToSpeakEventHandler()) {} | 81 select_to_speak_event_handler_(new SelectToSpeakEventHandler()) {} |
84 | 82 |
85 void SetUp() override { | 83 void SetUp() override { |
86 ash::test::AshTestBase::SetUp(); | 84 ash::test::AshTestBase::SetUp(); |
87 event_delegate_.reset(new SelectToSpeakAccessibilityEventDelegate()); | 85 mouse_event_delegate_.reset(new SelectToSpeakMouseEventDelegate()); |
88 ash_test_helper() | 86 select_to_speak_event_handler_->CaptureForwardedEventsForTesting( |
89 ->test_views_delegate() | 87 mouse_event_delegate_.get()); |
90 ->set_test_accessibility_event_delegate(event_delegate_.get()); | |
91 generator_ = &AshTestBase::GetEventGenerator(); | 88 generator_ = &AshTestBase::GetEventGenerator(); |
92 CurrentContext()->AddPreTargetHandler(select_to_speak_event_handler_.get()); | 89 CurrentContext()->AddPreTargetHandler(select_to_speak_event_handler_.get()); |
93 CurrentContext()->AddPreTargetHandler(&event_capturer_); | 90 CurrentContext()->AddPreTargetHandler(&event_capturer_); |
94 AutomationManagerAura::GetInstance()->Enable(&profile_); | 91 AutomationManagerAura::GetInstance()->Enable(&profile_); |
95 } | 92 } |
96 | 93 |
97 void TearDown() override { | 94 void TearDown() override { |
98 CurrentContext()->RemovePreTargetHandler( | 95 CurrentContext()->RemovePreTargetHandler( |
99 select_to_speak_event_handler_.get()); | 96 select_to_speak_event_handler_.get()); |
100 CurrentContext()->RemovePreTargetHandler(&event_capturer_); | 97 CurrentContext()->RemovePreTargetHandler(&event_capturer_); |
101 generator_ = nullptr; | 98 generator_ = nullptr; |
102 ash::test::AshTestBase::TearDown(); | 99 ash::test::AshTestBase::TearDown(); |
103 } | 100 } |
104 | 101 |
105 protected: | 102 protected: |
106 ui::test::EventGenerator* generator_; | 103 ui::test::EventGenerator* generator_; |
107 EventCapturer event_capturer_; | 104 EventCapturer event_capturer_; |
108 TestingProfile profile_; | 105 TestingProfile profile_; |
109 std::unique_ptr<SelectToSpeakAccessibilityEventDelegate> event_delegate_; | 106 std::unique_ptr<SelectToSpeakMouseEventDelegate> mouse_event_delegate_; |
110 | 107 |
111 private: | 108 private: |
112 std::unique_ptr<SelectToSpeakEventHandler> select_to_speak_event_handler_; | 109 std::unique_ptr<SelectToSpeakEventHandler> select_to_speak_event_handler_; |
113 | 110 |
114 DISALLOW_COPY_AND_ASSIGN(SelectToSpeakEventHandlerTest); | 111 DISALLOW_COPY_AND_ASSIGN(SelectToSpeakEventHandlerTest); |
115 }; | 112 }; |
116 | 113 |
117 } // namespace | 114 } // namespace |
118 | 115 |
119 namespace chromeos { | 116 namespace chromeos { |
120 | 117 |
121 TEST_F(SelectToSpeakEventHandlerTest, PressAndReleaseSearchNotHandled) { | 118 TEST_F(SelectToSpeakEventHandlerTest, PressAndReleaseSearchNotHandled) { |
122 // If the user presses and releases the Search key, with no mouse | 119 // If the user presses and releases the Search key, with no mouse |
123 // presses, the key events won't be handled by the SelectToSpeakEventHandler | 120 // presses, the key events won't be handled by the SelectToSpeakEventHandler |
124 // and the normal behavior will occur. | 121 // and the normal behavior will occur. |
125 | 122 |
126 EXPECT_FALSE(event_capturer_.last_key_event()); | 123 EXPECT_FALSE(event_capturer_.last_key_event()); |
127 | 124 |
128 generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); | 125 generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); |
129 ASSERT_TRUE(event_capturer_.last_key_event()); | 126 ASSERT_TRUE(event_capturer_.last_key_event()); |
130 EXPECT_FALSE(event_capturer_.last_key_event()->handled()); | 127 EXPECT_FALSE(event_capturer_.last_key_event()->handled()); |
131 | 128 |
132 event_capturer_.Reset(); | 129 event_capturer_.Reset(); |
133 generator_->ReleaseKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); | 130 generator_->ReleaseKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); |
134 ASSERT_TRUE(event_capturer_.last_key_event()); | 131 ASSERT_TRUE(event_capturer_.last_key_event()); |
135 EXPECT_FALSE(event_capturer_.last_key_event()->handled()); | 132 EXPECT_FALSE(event_capturer_.last_key_event()->handled()); |
136 } | 133 } |
137 | 134 |
| 135 // Note: when running these tests locally on desktop Linux, you may need |
| 136 // to use xvfb-run, otherwise simulating the Search key press may not work. |
138 TEST_F(SelectToSpeakEventHandlerTest, SearchPlusClick) { | 137 TEST_F(SelectToSpeakEventHandlerTest, SearchPlusClick) { |
139 // If the user holds the Search key and then clicks the mouse button, | 138 // If the user holds the Search key and then clicks the mouse button, |
140 // the mouse events and the key release event get hancled by the | 139 // the mouse events and the key release event get handled by the |
141 // SelectToSpeakEventHandler, and accessibility events are generated. | 140 // SelectToSpeakEventHandler, and mouse events are forwarded to the extension. |
142 | 141 |
143 generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); | 142 generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); |
144 ASSERT_TRUE(event_capturer_.last_key_event()); | 143 ASSERT_TRUE(event_capturer_.last_key_event()); |
145 EXPECT_FALSE(event_capturer_.last_key_event()->handled()); | 144 EXPECT_FALSE(event_capturer_.last_key_event()->handled()); |
146 | 145 |
147 generator_->set_current_location(gfx::Point(100, 12)); | 146 generator_->set_current_location(gfx::Point(100, 12)); |
148 generator_->PressLeftButton(); | 147 generator_->PressLeftButton(); |
149 EXPECT_FALSE(event_capturer_.last_mouse_event()); | 148 EXPECT_FALSE(event_capturer_.last_mouse_event()); |
150 | 149 |
151 EXPECT_TRUE(event_delegate_->CapturedAXEvent(ui::AX_EVENT_MOUSE_PRESSED)); | 150 EXPECT_TRUE(mouse_event_delegate_->CapturedMouseEvent(ui::ET_MOUSE_PRESSED)); |
152 | 151 |
153 generator_->ReleaseLeftButton(); | 152 generator_->ReleaseLeftButton(); |
154 EXPECT_FALSE(event_capturer_.last_mouse_event()); | 153 EXPECT_FALSE(event_capturer_.last_mouse_event()); |
155 | 154 |
156 EXPECT_TRUE(event_delegate_->CapturedAXEvent(ui::AX_EVENT_MOUSE_RELEASED)); | 155 EXPECT_TRUE(mouse_event_delegate_->CapturedMouseEvent(ui::ET_MOUSE_RELEASED)); |
157 | 156 |
158 event_capturer_.Reset(); | 157 event_capturer_.Reset(); |
159 generator_->ReleaseKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); | 158 generator_->ReleaseKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); |
160 EXPECT_FALSE(event_capturer_.last_key_event()); | 159 EXPECT_FALSE(event_capturer_.last_key_event()); |
161 } | 160 } |
162 | 161 |
163 TEST_F(SelectToSpeakEventHandlerTest, RepeatSearchKey) { | 162 TEST_F(SelectToSpeakEventHandlerTest, RepeatSearchKey) { |
164 // Holding the Search key may generate key repeat events. Make sure it's | 163 // Holding the Search key may generate key repeat events. Make sure it's |
165 // still treated as if the search key is down. | 164 // still treated as if the search key is down. |
166 generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); | 165 generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); |
167 generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); | 166 generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); |
168 | 167 |
169 generator_->set_current_location(gfx::Point(100, 12)); | 168 generator_->set_current_location(gfx::Point(100, 12)); |
170 generator_->PressLeftButton(); | 169 generator_->PressLeftButton(); |
171 EXPECT_FALSE(event_capturer_.last_mouse_event()); | 170 EXPECT_FALSE(event_capturer_.last_mouse_event()); |
172 | 171 |
173 EXPECT_TRUE(event_delegate_->CapturedAXEvent(ui::AX_EVENT_MOUSE_PRESSED)); | 172 EXPECT_TRUE(mouse_event_delegate_->CapturedMouseEvent(ui::ET_MOUSE_PRESSED)); |
174 | 173 |
175 generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); | 174 generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); |
176 generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); | 175 generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); |
177 | 176 |
178 generator_->ReleaseLeftButton(); | 177 generator_->ReleaseLeftButton(); |
179 EXPECT_FALSE(event_capturer_.last_mouse_event()); | 178 EXPECT_FALSE(event_capturer_.last_mouse_event()); |
180 | 179 |
181 EXPECT_TRUE(event_delegate_->CapturedAXEvent(ui::AX_EVENT_MOUSE_RELEASED)); | 180 EXPECT_TRUE(mouse_event_delegate_->CapturedMouseEvent(ui::ET_MOUSE_RELEASED)); |
182 | 181 |
183 event_capturer_.Reset(); | 182 event_capturer_.Reset(); |
184 generator_->ReleaseKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); | 183 generator_->ReleaseKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); |
185 EXPECT_FALSE(event_capturer_.last_key_event()); | 184 EXPECT_FALSE(event_capturer_.last_key_event()); |
186 } | 185 } |
187 | 186 |
188 TEST_F(SelectToSpeakEventHandlerTest, SearchPlusClickTwice) { | 187 TEST_F(SelectToSpeakEventHandlerTest, SearchPlusClickTwice) { |
189 // Same as SearchPlusClick, above, but test that the user can keep | 188 // Same as SearchPlusClick, above, but test that the user can keep |
190 // holding down Search and click again. | 189 // holding down Search and click again. |
191 | 190 |
192 generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); | 191 generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); |
193 ASSERT_TRUE(event_capturer_.last_key_event()); | 192 ASSERT_TRUE(event_capturer_.last_key_event()); |
194 EXPECT_FALSE(event_capturer_.last_key_event()->handled()); | 193 EXPECT_FALSE(event_capturer_.last_key_event()->handled()); |
195 | 194 |
196 generator_->set_current_location(gfx::Point(100, 12)); | 195 generator_->set_current_location(gfx::Point(100, 12)); |
197 generator_->PressLeftButton(); | 196 generator_->PressLeftButton(); |
198 EXPECT_FALSE(event_capturer_.last_mouse_event()); | 197 EXPECT_FALSE(event_capturer_.last_mouse_event()); |
199 EXPECT_TRUE(event_delegate_->CapturedAXEvent(ui::AX_EVENT_MOUSE_PRESSED)); | 198 EXPECT_TRUE(mouse_event_delegate_->CapturedMouseEvent(ui::ET_MOUSE_PRESSED)); |
200 | 199 |
201 generator_->ReleaseLeftButton(); | 200 generator_->ReleaseLeftButton(); |
202 EXPECT_FALSE(event_capturer_.last_mouse_event()); | 201 EXPECT_FALSE(event_capturer_.last_mouse_event()); |
203 EXPECT_TRUE(event_delegate_->CapturedAXEvent(ui::AX_EVENT_MOUSE_RELEASED)); | 202 EXPECT_TRUE(mouse_event_delegate_->CapturedMouseEvent(ui::ET_MOUSE_RELEASED)); |
204 | 203 |
205 event_delegate_->Reset(); | 204 mouse_event_delegate_->Reset(); |
206 EXPECT_FALSE(event_delegate_->CapturedAXEvent(ui::AX_EVENT_MOUSE_PRESSED)); | 205 EXPECT_FALSE(mouse_event_delegate_->CapturedMouseEvent(ui::ET_MOUSE_PRESSED)); |
207 EXPECT_FALSE(event_delegate_->CapturedAXEvent(ui::AX_EVENT_MOUSE_RELEASED)); | 206 EXPECT_FALSE( |
| 207 mouse_event_delegate_->CapturedMouseEvent(ui::ET_MOUSE_RELEASED)); |
208 | 208 |
209 generator_->PressLeftButton(); | 209 generator_->PressLeftButton(); |
210 EXPECT_FALSE(event_capturer_.last_mouse_event()); | 210 EXPECT_FALSE(event_capturer_.last_mouse_event()); |
211 EXPECT_TRUE(event_delegate_->CapturedAXEvent(ui::AX_EVENT_MOUSE_PRESSED)); | 211 EXPECT_TRUE(mouse_event_delegate_->CapturedMouseEvent(ui::ET_MOUSE_PRESSED)); |
212 | 212 |
213 generator_->ReleaseLeftButton(); | 213 generator_->ReleaseLeftButton(); |
214 EXPECT_FALSE(event_capturer_.last_mouse_event()); | 214 EXPECT_FALSE(event_capturer_.last_mouse_event()); |
215 EXPECT_TRUE(event_delegate_->CapturedAXEvent(ui::AX_EVENT_MOUSE_RELEASED)); | 215 EXPECT_TRUE(mouse_event_delegate_->CapturedMouseEvent(ui::ET_MOUSE_RELEASED)); |
216 | 216 |
217 event_capturer_.Reset(); | 217 event_capturer_.Reset(); |
218 generator_->ReleaseKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); | 218 generator_->ReleaseKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); |
219 EXPECT_FALSE(event_capturer_.last_key_event()); | 219 EXPECT_FALSE(event_capturer_.last_key_event()); |
220 } | 220 } |
221 | 221 |
222 TEST_F(SelectToSpeakEventHandlerTest, SearchPlusKeyIgnoresClicks) { | 222 TEST_F(SelectToSpeakEventHandlerTest, SearchPlusKeyIgnoresClicks) { |
223 // If the user presses the Search key and then some other key, | 223 // If the user presses the Search key and then some other key, |
224 // we should assume the user does not want select-to-speak, and | 224 // we should assume the user does not want select-to-speak, and |
225 // click events should be ignored. | 225 // click events should be ignored. |
226 | 226 |
227 generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); | 227 generator_->PressKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); |
228 ASSERT_TRUE(event_capturer_.last_key_event()); | 228 ASSERT_TRUE(event_capturer_.last_key_event()); |
229 EXPECT_FALSE(event_capturer_.last_key_event()->handled()); | 229 EXPECT_FALSE(event_capturer_.last_key_event()->handled()); |
230 | 230 |
231 generator_->PressKey(ui::VKEY_I, ui::EF_COMMAND_DOWN); | 231 generator_->PressKey(ui::VKEY_I, ui::EF_COMMAND_DOWN); |
232 ASSERT_TRUE(event_capturer_.last_key_event()); | 232 ASSERT_TRUE(event_capturer_.last_key_event()); |
233 EXPECT_FALSE(event_capturer_.last_key_event()->handled()); | 233 EXPECT_FALSE(event_capturer_.last_key_event()->handled()); |
234 | 234 |
235 generator_->set_current_location(gfx::Point(100, 12)); | 235 generator_->set_current_location(gfx::Point(100, 12)); |
236 generator_->PressLeftButton(); | 236 generator_->PressLeftButton(); |
237 ASSERT_TRUE(event_capturer_.last_mouse_event()); | 237 ASSERT_TRUE(event_capturer_.last_mouse_event()); |
238 EXPECT_FALSE(event_capturer_.last_mouse_event()->handled()); | 238 EXPECT_FALSE(event_capturer_.last_mouse_event()->handled()); |
239 | 239 |
240 EXPECT_FALSE(event_delegate_->CapturedAXEvent(ui::AX_EVENT_MOUSE_PRESSED)); | 240 EXPECT_FALSE(mouse_event_delegate_->CapturedMouseEvent(ui::ET_MOUSE_PRESSED)); |
241 | 241 |
242 generator_->ReleaseLeftButton(); | 242 generator_->ReleaseLeftButton(); |
243 ASSERT_TRUE(event_capturer_.last_mouse_event()); | 243 ASSERT_TRUE(event_capturer_.last_mouse_event()); |
244 EXPECT_FALSE(event_capturer_.last_mouse_event()->handled()); | 244 EXPECT_FALSE(event_capturer_.last_mouse_event()->handled()); |
245 | 245 |
246 EXPECT_FALSE(event_delegate_->CapturedAXEvent(ui::AX_EVENT_MOUSE_RELEASED)); | 246 EXPECT_FALSE( |
| 247 mouse_event_delegate_->CapturedMouseEvent(ui::ET_MOUSE_RELEASED)); |
247 | 248 |
248 event_capturer_.Reset(); | 249 event_capturer_.Reset(); |
249 generator_->ReleaseKey(ui::VKEY_I, ui::EF_COMMAND_DOWN); | 250 generator_->ReleaseKey(ui::VKEY_I, ui::EF_COMMAND_DOWN); |
250 ASSERT_TRUE(event_capturer_.last_key_event()); | 251 ASSERT_TRUE(event_capturer_.last_key_event()); |
251 EXPECT_FALSE(event_capturer_.last_key_event()->handled()); | 252 EXPECT_FALSE(event_capturer_.last_key_event()->handled()); |
252 | 253 |
253 event_capturer_.Reset(); | 254 event_capturer_.Reset(); |
254 generator_->ReleaseKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); | 255 generator_->ReleaseKey(ui::VKEY_LWIN, ui::EF_COMMAND_DOWN); |
255 ASSERT_TRUE(event_capturer_.last_key_event()); | 256 ASSERT_TRUE(event_capturer_.last_key_event()); |
256 EXPECT_FALSE(event_capturer_.last_key_event()->handled()); | 257 EXPECT_FALSE(event_capturer_.last_key_event()->handled()); |
(...skipping 25 matching lines...) Expand all Loading... |
282 TEST_F(SelectToSpeakEventHandlerTest, PressingControlZDoesNotStopSpeech) { | 283 TEST_F(SelectToSpeakEventHandlerTest, PressingControlZDoesNotStopSpeech) { |
283 SpeechMonitor monitor; | 284 SpeechMonitor monitor; |
284 generator_->PressKey(ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN); | 285 generator_->PressKey(ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN); |
285 generator_->PressKey(ui::VKEY_Z, ui::EF_CONTROL_DOWN); | 286 generator_->PressKey(ui::VKEY_Z, ui::EF_CONTROL_DOWN); |
286 generator_->ReleaseKey(ui::VKEY_Z, ui::EF_CONTROL_DOWN); | 287 generator_->ReleaseKey(ui::VKEY_Z, ui::EF_CONTROL_DOWN); |
287 generator_->ReleaseKey(ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN); | 288 generator_->ReleaseKey(ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN); |
288 EXPECT_FALSE(monitor.DidStop()); | 289 EXPECT_FALSE(monitor.DidStop()); |
289 } | 290 } |
290 | 291 |
291 } // namespace chromeos | 292 } // namespace chromeos |
OLD | NEW |