Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(707)

Side by Side Diff: chrome/browser/chromeos/accessibility/select_to_speak_event_handler_unittest.cc

Issue 2814213002: Refactor Select-to-speak so that mouse events are forwarded to the extension. (Closed)
Patch Set: Tests updated, ready for review Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698