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

Side by Side Diff: ui/chromeos/touch_exploration_controller_unittest.cc

Issue 330763007: Swipe Gestures for Accessibility (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@gesture-vlogs
Patch Set: Removed line that Evy was working on Created 6 years, 6 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "ui/chromeos/touch_exploration_controller.h" 5 #include "ui/chromeos/touch_exploration_controller.h"
6 6
7 #include "base/test/simple_test_tick_clock.h" 7 #include "base/test/simple_test_tick_clock.h"
8 #include "base/time/time.h" 8 #include "base/time/time.h"
9 #include "ui/aura/client/cursor_client.h" 9 #include "ui/aura/client/cursor_client.h"
10 #include "ui/aura/test/aura_test_base.h" 10 #include "ui/aura/test/aura_test_base.h"
11 #include "ui/aura/test/event_generator.h" 11 #include "ui/aura/test/event_generator.h"
12 #include "ui/aura/test/test_cursor_client.h" 12 #include "ui/aura/test/test_cursor_client.h"
13 #include "ui/aura/window.h" 13 #include "ui/aura/window.h"
14 #include "ui/events/event.h" 14 #include "ui/events/event.h"
15 #include "ui/events/event_utils.h" 15 #include "ui/events/event_utils.h"
16 #include "ui/events/gestures/gesture_provider_aura.h"
16 #include "ui/gfx/geometry/point.h" 17 #include "ui/gfx/geometry/point.h"
17 #include "ui/gl/gl_implementation.h" 18 #include "ui/gl/gl_implementation.h"
18 #include "ui/gl/gl_surface.h" 19 #include "ui/gl/gl_surface.h"
19 20
20 namespace ui { 21 namespace ui {
21 22
22 namespace { 23 namespace {
23 // Records all mouse and touch events. 24 // Records all mouse, touch, gesture, and key events.
24 class EventCapturer : public ui::EventHandler { 25 class EventCapturer : public ui::EventHandler {
25 public: 26 public:
26 EventCapturer() {} 27 EventCapturer() {}
27 virtual ~EventCapturer() {} 28 virtual ~EventCapturer() {}
28 29
29 void Reset() { 30 void Reset() {
30 events_.clear(); 31 events_.clear();
31 } 32 }
32 33
33 virtual void OnEvent(ui::Event* event) OVERRIDE { 34 virtual void OnEvent(ui::Event* event) OVERRIDE {
34 if (event->IsMouseEvent()) { 35 if (event->IsMouseEvent()) {
35 events_.push_back( 36 events_.push_back(
36 new ui::MouseEvent(static_cast<ui::MouseEvent&>(*event))); 37 new ui::MouseEvent(static_cast<ui::MouseEvent&>(*event)));
37 } else if (event->IsTouchEvent()) { 38 } else if (event->IsTouchEvent()) {
38 events_.push_back( 39 events_.push_back(
39 new ui::TouchEvent(static_cast<ui::TouchEvent&>(*event))); 40 new ui::TouchEvent(static_cast<ui::TouchEvent&>(*event)));
41 } else if (event->IsGestureEvent()) {
42 events_.push_back(
43 new ui::GestureEvent(static_cast<ui::GestureEvent&>(*event)));
44 } else if (event->IsKeyEvent()) {
45 events_.push_back(new ui::KeyEvent(static_cast<ui::KeyEvent&>(*event)));
40 } else { 46 } else {
41 return; 47 return;
42 } 48 }
43 // Stop event propagation so we don't click on random stuff that 49 // Stop event propagation so we don't click on random stuff that
44 // might break test assumptions. 50 // might break test assumptions.
45 event->StopPropagation(); 51 event->StopPropagation();
46 // If there is a possibility that we're in an infinite loop, we should 52 // If there is a possibility that we're in an infinite loop, we should
47 // exit early with a sensible error rather than letting the test time out. 53 // exit early with a sensible error rather than letting the test time out.
48 ASSERT_LT(events_.size(), 100u); 54 ASSERT_LT(events_.size(), 100u);
49 } 55 }
50 const ScopedVector<ui::LocatedEvent>& captured_events() const { 56
51 return events_; 57 const ScopedVector<ui::Event>& captured_events() const { return events_; }
52 }
53 58
54 private: 59 private:
55 ScopedVector<ui::LocatedEvent> events_; 60 ScopedVector<ui::Event> events_;
56 61
57 DISALLOW_COPY_AND_ASSIGN(EventCapturer); 62 DISALLOW_COPY_AND_ASSIGN(EventCapturer);
58 }; 63 };
59 64
60 } // namespace 65 } // namespace
61 66
62 class TouchExplorationTest : public aura::test::AuraTestBase { 67 class TouchExplorationTest : public aura::test::AuraTestBase {
63 public: 68 public:
64 TouchExplorationTest() 69 TouchExplorationTest()
65 : simulated_clock_(new base::SimpleTestTickClock()) {} 70 : simulated_clock_(new base::SimpleTestTickClock()) {}
(...skipping 15 matching lines...) Expand all
81 virtual void TearDown() OVERRIDE { 86 virtual void TearDown() OVERRIDE {
82 root_window()->RemovePreTargetHandler(&event_capturer_); 87 root_window()->RemovePreTargetHandler(&event_capturer_);
83 SwitchTouchExplorationMode(false); 88 SwitchTouchExplorationMode(false);
84 cursor_client_.reset(); 89 cursor_client_.reset();
85 aura::test::AuraTestBase::TearDown(); 90 aura::test::AuraTestBase::TearDown();
86 } 91 }
87 92
88 protected: 93 protected:
89 aura::client::CursorClient* cursor_client() { return cursor_client_.get(); } 94 aura::client::CursorClient* cursor_client() { return cursor_client_.get(); }
90 95
91 const ScopedVector<ui::LocatedEvent>& GetCapturedEvents() { 96 const ScopedVector<ui::Event>& GetCapturedEvents() {
92 return event_capturer_.captured_events(); 97 return event_capturer_.captured_events();
93 } 98 }
94 99
95 std::vector<ui::LocatedEvent*> GetCapturedEventsOfType(int type) { 100 std::vector<ui::LocatedEvent*> GetCapturedLocatedEvents() {
96 const ScopedVector<ui::LocatedEvent>& all_events = GetCapturedEvents(); 101 const ScopedVector<ui::Event>& all_events = GetCapturedEvents();
97 std::vector<ui::LocatedEvent*> events; 102 std::vector<ui::LocatedEvent*> located_events;
103 for (size_t i = 0; i < all_events.size(); ++i) {
104 if (all_events[i]->IsMouseEvent() || all_events[i]->IsTouchEvent() ||
evy 2014/06/26 00:02:36 A previous comment from Dominic: When there are m
105 all_events[i]->IsGestureEvent()) {
106 located_events.push_back(static_cast<ui::LocatedEvent*>(all_events[i]));
107 }
108 }
109 return located_events;
110 }
111
112 std::vector<ui::Event*> GetCapturedEventsOfType(int type) {
113 const ScopedVector<ui::Event>& all_events = GetCapturedEvents();
114 std::vector<ui::Event*> events;
98 for (size_t i = 0; i < all_events.size(); ++i) { 115 for (size_t i = 0; i < all_events.size(); ++i) {
99 if (type == all_events[i]->type()) 116 if (type == all_events[i]->type())
100 events.push_back(all_events[i]); 117 events.push_back(all_events[i]);
101 } 118 }
102 return events; 119 return events;
103 } 120 }
104 121
122 std::vector<ui::LocatedEvent*> GetCapturedLocatedEventsOfType(int type) {
123 std::vector<ui::LocatedEvent*> located_events = GetCapturedLocatedEvents();
124 std::vector<ui::LocatedEvent*> events;
125 for (size_t i = 0; i < located_events.size(); ++i) {
126 if (type == located_events[i]->type())
127 events.push_back(located_events[i]);
128 }
129 return events;
130 }
131
105 void ClearCapturedEvents() { 132 void ClearCapturedEvents() {
106 event_capturer_.Reset(); 133 event_capturer_.Reset();
107 } 134 }
108 135
109 void AdvanceSimulatedTimePastTapDelay() { 136 void AdvanceSimulatedTimePastTapDelay() {
110 simulated_clock_->Advance(base::TimeDelta::FromMilliseconds(1000)); 137 simulated_clock_->Advance(base::TimeDelta::FromMilliseconds(1000));
111 touch_exploration_controller_->CallTapTimerNowForTesting(); 138 touch_exploration_controller_->CallTapTimerNowForTesting();
112 } 139 }
113 140
114 void SwitchTouchExplorationMode(bool on) { 141 void SwitchTouchExplorationMode(bool on) {
(...skipping 21 matching lines...) Expand all
136 aura::client::GetCursorClient(root_window()); 163 aura::client::GetCursorClient(root_window());
137 return cursor_client && 164 return cursor_client &&
138 cursor_client->IsMouseEventsEnabled() && 165 cursor_client->IsMouseEventsEnabled() &&
139 !cursor_client->IsCursorVisible(); 166 !cursor_client->IsCursorVisible();
140 } 167 }
141 168
142 bool IsInNoFingersDownState() { 169 bool IsInNoFingersDownState() {
143 return touch_exploration_controller_->IsInNoFingersDownStateForTesting(); 170 return touch_exploration_controller_->IsInNoFingersDownStateForTesting();
144 } 171 }
145 172
173 bool IsInGestureInProgressState() {
174 return touch_exploration_controller_
175 ->IsInGestureInProgressStateForTesting();
176 }
177
146 base::TimeDelta Now() { 178 base::TimeDelta Now() {
147 // This is the same as what EventTimeForNow() does, but here we do it 179 // This is the same as what EventTimeForNow() does, but here we do it
148 // with our simulated clock. 180 // with our simulated clock.
149 return base::TimeDelta::FromInternalValue( 181 return base::TimeDelta::FromInternalValue(
150 simulated_clock_->NowTicks().ToInternalValue()); 182 simulated_clock_->NowTicks().ToInternalValue());
151 } 183 }
152 184
153 scoped_ptr<aura::test::EventGenerator> generator_; 185 scoped_ptr<aura::test::EventGenerator> generator_;
154 ui::GestureDetector::Config gesture_detector_config_; 186 ui::GestureDetector::Config gesture_detector_config_;
155 // Owned by |generator_|. 187 // Owned by |generator_|.
(...skipping 27 matching lines...) Expand all
183 ASSERT_TRUE(e1->IsMouseEvent()); 215 ASSERT_TRUE(e1->IsMouseEvent());
184 ASSERT_TRUE(e2->IsMouseEvent()); 216 ASSERT_TRUE(e2->IsMouseEvent());
185 ui::MouseEvent* mouse_event1 = static_cast<ui::MouseEvent*>(e1); 217 ui::MouseEvent* mouse_event1 = static_cast<ui::MouseEvent*>(e1);
186 ui::MouseEvent* mouse_event2 = static_cast<ui::MouseEvent*>(e2); 218 ui::MouseEvent* mouse_event2 = static_cast<ui::MouseEvent*>(e2);
187 EXPECT_EQ(mouse_event1->type(), mouse_event2->type()); 219 EXPECT_EQ(mouse_event1->type(), mouse_event2->type());
188 EXPECT_EQ(mouse_event1->location(), mouse_event2->location()); 220 EXPECT_EQ(mouse_event1->location(), mouse_event2->location());
189 EXPECT_EQ(mouse_event1->root_location(), mouse_event2->root_location()); 221 EXPECT_EQ(mouse_event1->root_location(), mouse_event2->root_location());
190 EXPECT_EQ(mouse_event1->flags(), mouse_event2->flags()); 222 EXPECT_EQ(mouse_event1->flags(), mouse_event2->flags());
191 } 223 }
192 224
225 // Executes a number of assertions to confirm that |e1| and |e2| are key events
226 // and are equal to each other.
227 void ConfirmEventsAreKeyAndEqual(ui::Event* e1, ui::Event* e2) {
228 ASSERT_TRUE(e1->IsKeyEvent());
229 ASSERT_TRUE(e2->IsKeyEvent());
230 ui::KeyEvent* key_event1 = static_cast<ui::KeyEvent*>(e1);
231 ui::KeyEvent* key_event2 = static_cast<ui::KeyEvent*>(e2);
232 EXPECT_EQ(key_event1->type(), key_event2->type());
233 EXPECT_EQ(key_event1->key_code(), key_event2->key_code());
234 EXPECT_EQ(key_event1->code(), key_event2->code());
235 EXPECT_EQ(key_event1->flags(), key_event2->flags());
236 }
237
193 #define CONFIRM_EVENTS_ARE_TOUCH_AND_EQUAL(e1, e2) \ 238 #define CONFIRM_EVENTS_ARE_TOUCH_AND_EQUAL(e1, e2) \
194 ASSERT_NO_FATAL_FAILURE(ConfirmEventsAreTouchAndEqual(e1, e2)) 239 ASSERT_NO_FATAL_FAILURE(ConfirmEventsAreTouchAndEqual(e1, e2))
195 240
196 #define CONFIRM_EVENTS_ARE_MOUSE_AND_EQUAL(e1, e2) \ 241 #define CONFIRM_EVENTS_ARE_MOUSE_AND_EQUAL(e1, e2) \
197 ASSERT_NO_FATAL_FAILURE(ConfirmEventsAreMouseAndEqual(e1, e2)) 242 ASSERT_NO_FATAL_FAILURE(ConfirmEventsAreMouseAndEqual(e1, e2))
198 243
244 #define CONFIRM_EVENTS_ARE_KEY_AND_EQUAL(e1, e2) \
245 ASSERT_NO_FATAL_FAILURE(ConfirmEventsAreKeyAndEqual(e1, e2))
246
199 // TODO(mfomitchev): Need to investigate why we don't get mouse enter/exit 247 // TODO(mfomitchev): Need to investigate why we don't get mouse enter/exit
200 // events when running these tests as part of ui_unittests. We do get them when 248 // events when running these tests as part of ui_unittests. We do get them when
201 // the tests are run as part of ash unit tests. 249 // the tests are run as part of ash unit tests.
202 250
251 // If a swipe has been successfully completed, then six key events will be
252 // dispatched that correspond to shift+search+direction
253 void AssertDirectionalNavigationEvents(const ScopedVector<ui::Event>& events,
254 ui::KeyboardCode direction) {
255 ASSERT_EQ(6U, events.size());
256 std::vector<ui::KeyEvent> key_sequence;
257 ui::KeyEvent shift_pressed(
258 ui::ET_KEY_PRESSED, ui::VKEY_SHIFT, ui::EF_SHIFT_DOWN, false);
259 ui::KeyEvent search_pressed(
260 ui::ET_KEY_PRESSED, ui::VKEY_LWIN, ui::EF_SHIFT_DOWN, false);
261 ui::KeyEvent direction_pressed(
262 ui::ET_KEY_PRESSED, direction, ui::EF_SHIFT_DOWN, false);
263 ui::KeyEvent direction_released(
264 ui::ET_KEY_RELEASED, direction, ui::EF_SHIFT_DOWN, false);
265 ui::KeyEvent search_released(
266 ui::ET_KEY_RELEASED, VKEY_LWIN, ui::EF_SHIFT_DOWN, false);
267 ui::KeyEvent shift_released(
268 ui::ET_KEY_RELEASED, ui::VKEY_SHIFT, ui::EF_NONE, false);
269 CONFIRM_EVENTS_ARE_KEY_AND_EQUAL(&shift_pressed,
270 static_cast<ui::KeyEvent*>(events[0]));
271 CONFIRM_EVENTS_ARE_KEY_AND_EQUAL(&search_pressed,
272 static_cast<ui::KeyEvent*>(events[1]));
273 CONFIRM_EVENTS_ARE_KEY_AND_EQUAL(&direction_pressed,
274 static_cast<ui::KeyEvent*>(events[2]));
275 CONFIRM_EVENTS_ARE_KEY_AND_EQUAL(&direction_released,
276 static_cast<ui::KeyEvent*>(events[3]));
277 CONFIRM_EVENTS_ARE_KEY_AND_EQUAL(&search_released,
278 static_cast<ui::KeyEvent*>(events[4]));
279 CONFIRM_EVENTS_ARE_KEY_AND_EQUAL(&shift_released,
280 static_cast<ui::KeyEvent*>(events[5]));
281 }
282
203 TEST_F(TouchExplorationTest, EntersTouchToMouseModeAfterPressAndDelay) { 283 TEST_F(TouchExplorationTest, EntersTouchToMouseModeAfterPressAndDelay) {
204 SwitchTouchExplorationMode(true); 284 SwitchTouchExplorationMode(true);
205 EXPECT_FALSE(IsInTouchToMouseMode()); 285 EXPECT_FALSE(IsInTouchToMouseMode());
206 generator_->PressTouch(); 286 generator_->PressTouch();
207 AdvanceSimulatedTimePastTapDelay(); 287 AdvanceSimulatedTimePastTapDelay();
208 EXPECT_TRUE(IsInTouchToMouseMode()); 288 EXPECT_TRUE(IsInTouchToMouseMode());
209 } 289 }
210 290
211 TEST_F(TouchExplorationTest, EntersTouchToMouseModeAfterMoveOutsideSlop) { 291 TEST_F(TouchExplorationTest, EntersTouchToMouseModeAfterMoveOutsideSlop) {
212 int slop = gesture_detector_config_.touch_slop; 292 int slop = gesture_detector_config_.touch_slop;
213 int half_slop = slop / 2; 293 int half_slop = slop / 2;
214 294
215 SwitchTouchExplorationMode(true); 295 SwitchTouchExplorationMode(true);
216 EXPECT_FALSE(IsInTouchToMouseMode()); 296 EXPECT_FALSE(IsInTouchToMouseMode());
217 generator_->set_current_location(gfx::Point(11, 12)); 297 generator_->set_current_location(gfx::Point(11, 12));
218 generator_->PressTouch(); 298 generator_->PressTouch();
219 generator_->MoveTouch(gfx::Point(11 + half_slop, 12)); 299 generator_->MoveTouch(gfx::Point(11 + half_slop, 12));
220 EXPECT_FALSE(IsInTouchToMouseMode()); 300 EXPECT_FALSE(IsInTouchToMouseMode());
221 generator_->MoveTouch(gfx::Point(11, 12 + half_slop)); 301 generator_->MoveTouch(gfx::Point(11, 12 + half_slop));
222 EXPECT_FALSE(IsInTouchToMouseMode()); 302 EXPECT_FALSE(IsInTouchToMouseMode());
303 AdvanceSimulatedTimePastTapDelay();
223 generator_->MoveTouch(gfx::Point(11 + slop + 1, 12)); 304 generator_->MoveTouch(gfx::Point(11 + slop + 1, 12));
224 EXPECT_TRUE(IsInTouchToMouseMode()); 305 EXPECT_TRUE(IsInTouchToMouseMode());
225 } 306 }
226 307
227 TEST_F(TouchExplorationTest, OneFingerTap) { 308 TEST_F(TouchExplorationTest, OneFingerTap) {
228 SwitchTouchExplorationMode(true); 309 SwitchTouchExplorationMode(true);
229 gfx::Point location(11, 12); 310 gfx::Point location(11, 12);
230 generator_->set_current_location(location); 311 generator_->set_current_location(location);
231 generator_->PressTouch(); 312 generator_->PressTouch();
232 generator_->ReleaseTouch(); 313 generator_->ReleaseTouch();
233 AdvanceSimulatedTimePastTapDelay(); 314 AdvanceSimulatedTimePastTapDelay();
234 315
235 std::vector<ui::LocatedEvent*> events = 316 std::vector<ui::LocatedEvent*> events =
236 GetCapturedEventsOfType(ui::ET_MOUSE_MOVED); 317 GetCapturedLocatedEventsOfType(ui::ET_MOUSE_MOVED);
237 ASSERT_EQ(1U, events.size()); 318 ASSERT_EQ(1U, events.size());
238 319
239 EXPECT_EQ(location, events[0]->location()); 320 EXPECT_EQ(location, events[0]->location());
240 EXPECT_TRUE(events[0]->flags() & ui::EF_IS_SYNTHESIZED); 321 EXPECT_TRUE(events[0]->flags() & ui::EF_IS_SYNTHESIZED);
241 EXPECT_TRUE(events[0]->flags() & ui::EF_TOUCH_ACCESSIBILITY); 322 EXPECT_TRUE(events[0]->flags() & ui::EF_TOUCH_ACCESSIBILITY);
242 EXPECT_TRUE(IsInNoFingersDownState()); 323 EXPECT_TRUE(IsInNoFingersDownState());
243 } 324 }
244 325
245 TEST_F(TouchExplorationTest, ActualMouseMovesUnaffected) { 326 TEST_F(TouchExplorationTest, ActualMouseMovesUnaffected) {
246 SwitchTouchExplorationMode(true); 327 SwitchTouchExplorationMode(true);
247 328
248 gfx::Point location_start(11, 12); 329 gfx::Point location_start(11, 12);
249 gfx::Point location_end(13, 14); 330 gfx::Point location_end(13, 14);
250 generator_->set_current_location(location_start); 331 generator_->set_current_location(location_start);
251 generator_->PressTouch(); 332 generator_->PressTouch();
252 AdvanceSimulatedTimePastTapDelay(); 333 AdvanceSimulatedTimePastTapDelay();
253 generator_->MoveTouch(location_end); 334 generator_->MoveTouch(location_end);
254 335
255 gfx::Point location_real_mouse_move(15, 16); 336 gfx::Point location_real_mouse_move(15, 16);
256 ui::MouseEvent mouse_move(ui::ET_MOUSE_MOVED, 337 ui::MouseEvent mouse_move(ui::ET_MOUSE_MOVED,
257 location_real_mouse_move, 338 location_real_mouse_move,
258 location_real_mouse_move, 339 location_real_mouse_move,
259 0, 340 0,
260 0); 341 0);
261 generator_->Dispatch(&mouse_move); 342 generator_->Dispatch(&mouse_move);
262 generator_->ReleaseTouch(); 343 generator_->ReleaseTouch();
263 AdvanceSimulatedTimePastTapDelay(); 344 AdvanceSimulatedTimePastTapDelay();
264 345
265 std::vector<ui::LocatedEvent*> events = 346 std::vector<ui::LocatedEvent*> events =
266 GetCapturedEventsOfType(ui::ET_MOUSE_MOVED); 347 GetCapturedLocatedEventsOfType(ui::ET_MOUSE_MOVED);
267 ASSERT_EQ(4U, events.size()); 348 ASSERT_EQ(4U, events.size());
268 349
269 EXPECT_EQ(location_start, events[0]->location()); 350 EXPECT_EQ(location_start, events[0]->location());
270 EXPECT_TRUE(events[0]->flags() & ui::EF_IS_SYNTHESIZED); 351 EXPECT_TRUE(events[0]->flags() & ui::EF_IS_SYNTHESIZED);
271 EXPECT_TRUE(events[0]->flags() & ui::EF_TOUCH_ACCESSIBILITY); 352 EXPECT_TRUE(events[0]->flags() & ui::EF_TOUCH_ACCESSIBILITY);
272 353
273 EXPECT_EQ(location_end, events[1]->location()); 354 EXPECT_EQ(location_end, events[1]->location());
274 EXPECT_TRUE(events[1]->flags() & ui::EF_IS_SYNTHESIZED); 355 EXPECT_TRUE(events[1]->flags() & ui::EF_IS_SYNTHESIZED);
275 EXPECT_TRUE(events[1]->flags() & ui::EF_TOUCH_ACCESSIBILITY); 356 EXPECT_TRUE(events[1]->flags() & ui::EF_TOUCH_ACCESSIBILITY);
276 357
(...skipping 24 matching lines...) Expand all
301 // affected by the touch exploration mode, while the touch events from another 382 // affected by the touch exploration mode, while the touch events from another
302 // finger get rewritten. 383 // finger get rewritten.
303 SwitchTouchExplorationMode(true); 384 SwitchTouchExplorationMode(true);
304 ui::TouchEvent touch_move(ui::ET_TOUCH_MOVED, 385 ui::TouchEvent touch_move(ui::ET_TOUCH_MOVED,
305 gfx::Point(11, 12), 386 gfx::Point(11, 12),
306 1, 387 1,
307 Now()); 388 Now());
308 generator_->Dispatch(&touch_move); 389 generator_->Dispatch(&touch_move);
309 EXPECT_TRUE(cursor_client()->IsCursorVisible()); 390 EXPECT_TRUE(cursor_client()->IsCursorVisible());
310 EXPECT_FALSE(cursor_client()->IsMouseEventsEnabled()); 391 EXPECT_FALSE(cursor_client()->IsMouseEventsEnabled());
311 const ScopedVector<ui::LocatedEvent>& captured_events = GetCapturedEvents(); 392 std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents();
312 ASSERT_EQ(1u, captured_events.size()); 393 ASSERT_EQ(1u, captured_events.size());
313 CONFIRM_EVENTS_ARE_TOUCH_AND_EQUAL(captured_events[0], &touch_move); 394 CONFIRM_EVENTS_ARE_TOUCH_AND_EQUAL(captured_events[0], &touch_move);
314 ClearCapturedEvents(); 395 ClearCapturedEvents();
315 396
316 // The press from the second finger should get rewritten. 397 // The press from the second finger should get rewritten.
317 generator_->PressTouchId(2); 398 generator_->PressTouchId(2);
318 AdvanceSimulatedTimePastTapDelay(); 399 AdvanceSimulatedTimePastTapDelay();
319 EXPECT_TRUE(IsInTouchToMouseMode()); 400 EXPECT_TRUE(IsInTouchToMouseMode());
320 ScopedVector<ui::LocatedEvent>::const_iterator it; 401 captured_events = GetCapturedLocatedEvents();
402 std::vector<ui::LocatedEvent*>::const_iterator it;
321 for (it = captured_events.begin(); it != captured_events.end(); ++it) { 403 for (it = captured_events.begin(); it != captured_events.end(); ++it) {
322 if ((*it)->type() == ui::ET_MOUSE_MOVED) 404 if ((*it)->type() == ui::ET_MOUSE_MOVED)
323 break; 405 break;
324 } 406 }
325 EXPECT_NE(captured_events.end(), it); 407 EXPECT_NE(captured_events.end(), it);
326 ClearCapturedEvents(); 408 ClearCapturedEvents();
327 409
328 // The release of the first finger shouldn't be affected. 410 // The release of the first finger shouldn't be affected.
329 ui::TouchEvent touch_release(ui::ET_TOUCH_RELEASED, 411 ui::TouchEvent touch_release(ui::ET_TOUCH_RELEASED,
330 gfx::Point(11, 12), 412 gfx::Point(11, 12),
331 1, 413 1,
332 Now()); 414 Now());
333 generator_->Dispatch(&touch_release); 415 generator_->Dispatch(&touch_release);
416 captured_events = GetCapturedLocatedEvents();
334 ASSERT_EQ(1u, captured_events.size()); 417 ASSERT_EQ(1u, captured_events.size());
335 CONFIRM_EVENTS_ARE_TOUCH_AND_EQUAL(captured_events[0], &touch_release); 418 CONFIRM_EVENTS_ARE_TOUCH_AND_EQUAL(captured_events[0], &touch_release);
336 ClearCapturedEvents(); 419 ClearCapturedEvents();
337 420
338 // The move and release from the second finger should get rewritten. 421 // The move and release from the second finger should get rewritten.
339 generator_->MoveTouchId(gfx::Point(13, 14), 2); 422 generator_->MoveTouchId(gfx::Point(13, 14), 2);
340 generator_->ReleaseTouchId(2); 423 generator_->ReleaseTouchId(2);
341 AdvanceSimulatedTimePastTapDelay(); 424 AdvanceSimulatedTimePastTapDelay();
342 425 captured_events = GetCapturedLocatedEvents();
343 ASSERT_EQ(2u, captured_events.size()); 426 ASSERT_EQ(2u, captured_events.size());
344 EXPECT_EQ(ui::ET_MOUSE_MOVED, captured_events[0]->type()); 427 EXPECT_EQ(ui::ET_MOUSE_MOVED, captured_events[0]->type());
345 EXPECT_EQ(ui::ET_MOUSE_MOVED, captured_events[1]->type()); 428 EXPECT_EQ(ui::ET_MOUSE_MOVED, captured_events[1]->type());
346 EXPECT_TRUE(IsInNoFingersDownState()); 429 EXPECT_TRUE(IsInNoFingersDownState());
347 } 430 }
348 431
349 TEST_F(TouchExplorationTest, TwoFingerTouch) { 432 TEST_F(TouchExplorationTest, TwoFingerTouch) {
350 SwitchTouchExplorationMode(true); 433 SwitchTouchExplorationMode(true);
351 generator_->PressTouchId(1); 434 generator_->PressTouchId(1);
352 ClearCapturedEvents(); 435 ClearCapturedEvents();
353 436
354 // Confirm events from the second finger go through as is. 437 // Confirm events from the second finger go through as is.
355 ui::TouchEvent touch_press( 438 ui::TouchEvent touch_press(
356 ui::ET_TOUCH_PRESSED, 439 ui::ET_TOUCH_PRESSED,
357 gfx::Point(10, 11), 440 gfx::Point(10, 11),
358 2, 441 2,
359 Now()); 442 Now());
360 generator_->Dispatch(&touch_press); 443 generator_->Dispatch(&touch_press);
361 EXPECT_TRUE(cursor_client()->IsCursorVisible()); 444 EXPECT_TRUE(cursor_client()->IsCursorVisible());
362 EXPECT_FALSE(cursor_client()->IsMouseEventsEnabled()); 445 EXPECT_FALSE(cursor_client()->IsMouseEventsEnabled());
363 const ScopedVector<ui::LocatedEvent>& captured_events = GetCapturedEvents(); 446 std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents();
364 // TODO(mfomitchev): mouse enter/exit events 447 // TODO(mfomitchev): mouse enter/exit events
365 // There will be a ET_MOUSE_EXITED event synthesized when the mouse cursor is 448 // There will be a ET_MOUSE_EXITED event synthesized when the mouse cursor is
366 // hidden - ignore it. 449 // hidden - ignore it.
367 ScopedVector<ui::LocatedEvent>::const_iterator it; 450 std::vector<ui::LocatedEvent*>::const_iterator it;
368 for (it = captured_events.begin(); it != captured_events.end(); ++it) { 451 for (it = captured_events.begin(); it != captured_events.end(); ++it) {
369 if ((*it)->type() == ui::ET_TOUCH_PRESSED) { 452 if ((*it)->type() == ui::ET_TOUCH_PRESSED) {
370 CONFIRM_EVENTS_ARE_TOUCH_AND_EQUAL(*it, &touch_press); 453 CONFIRM_EVENTS_ARE_TOUCH_AND_EQUAL(*it, &touch_press);
371 break; 454 break;
372 } 455 }
373 } 456 }
374 EXPECT_NE(captured_events.end(), it); 457 EXPECT_NE(captured_events.end(), it);
375 ClearCapturedEvents(); 458 ClearCapturedEvents();
376 ui::TouchEvent touch_move( 459 ui::TouchEvent touch_move(
377 ui::ET_TOUCH_MOVED, 460 ui::ET_TOUCH_MOVED,
378 gfx::Point(20, 21), 461 gfx::Point(20, 21),
379 2, 462 2,
380 Now()); 463 Now());
381 generator_->Dispatch(&touch_move); 464 generator_->Dispatch(&touch_move);
465 captured_events = GetCapturedLocatedEvents();
382 ASSERT_EQ(1u, captured_events.size()); 466 ASSERT_EQ(1u, captured_events.size());
383 CONFIRM_EVENTS_ARE_TOUCH_AND_EQUAL(captured_events[0], &touch_move); 467 CONFIRM_EVENTS_ARE_TOUCH_AND_EQUAL(captured_events[0], &touch_move);
384 ClearCapturedEvents(); 468 ClearCapturedEvents();
385 469
386 // Confirm mouse moves go through unaffected. 470 // Confirm mouse moves go through unaffected.
387 ui::MouseEvent mouse_move(ui::ET_MOUSE_MOVED, 471 ui::MouseEvent mouse_move(ui::ET_MOUSE_MOVED,
388 gfx::Point(13, 14), 472 gfx::Point(13, 14),
389 gfx::Point(13, 14), 473 gfx::Point(13, 14),
390 0, 474 0,
391 0); 475 0);
392 generator_->Dispatch(&mouse_move); 476 generator_->Dispatch(&mouse_move);
393 // TODO(mfomitchev): mouse enter/exit events 477 // TODO(mfomitchev): mouse enter/exit events
394 // Ignore synthesized ET_MOUSE_ENTERED/ET_MOUSE_EXITED 478 // Ignore synthesized ET_MOUSE_ENTERED/ET_MOUSE_EXITED
479 captured_events = GetCapturedLocatedEvents();
395 for (it = captured_events.begin(); it != captured_events.end(); ++it) { 480 for (it = captured_events.begin(); it != captured_events.end(); ++it) {
396 if ((*it)->type() == ui::ET_MOUSE_MOVED) { 481 if ((*it)->type() == ui::ET_MOUSE_MOVED) {
397 CONFIRM_EVENTS_ARE_MOUSE_AND_EQUAL(*it, &mouse_move); 482 CONFIRM_EVENTS_ARE_MOUSE_AND_EQUAL(*it, &mouse_move);
398 break; 483 break;
399 } 484 }
400 } 485 }
401 EXPECT_NE(captured_events.end(), it); 486 EXPECT_NE(captured_events.end(), it);
402 ClearCapturedEvents(); 487 ClearCapturedEvents();
403 488
404 // Events from the first finger should not go through while the second finger 489 // Events from the first finger should not go through while the second finger
405 // is touching. 490 // is touching.
406 gfx::Point touch1_location = gfx::Point(15, 16); 491 gfx::Point touch1_location = gfx::Point(15, 16);
407 generator_->MoveTouchId(touch1_location, 1); 492 generator_->MoveTouchId(touch1_location, 1);
408 EXPECT_EQ(0u, GetCapturedEvents().size()); 493 captured_events = GetCapturedLocatedEvents();
494 EXPECT_EQ(0u, GetCapturedLocatedEvents().size());
tdresser 2014/06/26 13:31:49 It looks like you're caching |GetCapturedLocatedEv
409 495
410 EXPECT_TRUE(cursor_client()->IsCursorVisible()); 496 EXPECT_TRUE(cursor_client()->IsCursorVisible());
411 EXPECT_FALSE(cursor_client()->IsMouseEventsEnabled()); 497 EXPECT_FALSE(cursor_client()->IsMouseEventsEnabled());
412 498
413 // A release of the second finger should be rewritten as a mouse move 499 // A release of the second finger should be rewritten as a mouse move
414 // of that finger to the |touch1_location| and we stay in passthrough 500 // of that finger to the |touch1_location| and we stay in passthrough
415 // mode. 501 // mode.
416 ui::TouchEvent touch_release( 502 ui::TouchEvent touch_release(
417 ui::ET_TOUCH_RELEASED, 503 ui::ET_TOUCH_RELEASED,
418 gfx::Point(25, 26), 504 gfx::Point(25, 26),
419 2, 505 2,
420 Now()); 506 Now());
421 generator_->Dispatch(&touch_release); 507 generator_->Dispatch(&touch_release);
508 captured_events = GetCapturedLocatedEvents();
422 EXPECT_FALSE(IsInTouchToMouseMode()); 509 EXPECT_FALSE(IsInTouchToMouseMode());
423 ASSERT_EQ(captured_events.size(), 1u); 510 ASSERT_EQ(captured_events.size(), 1u);
424 EXPECT_EQ(touch1_location, captured_events[0]->location()); 511 EXPECT_EQ(touch1_location, captured_events[0]->location());
425 } 512 }
426 513
427 TEST_F(TouchExplorationTest, MultiFingerTouch) { 514 TEST_F(TouchExplorationTest, MultiFingerTouch) {
428 SwitchTouchExplorationMode(true); 515 SwitchTouchExplorationMode(true);
429 generator_->PressTouchId(1); 516 generator_->PressTouchId(1);
430 generator_->PressTouchId(2); 517 generator_->PressTouchId(2);
431 ClearCapturedEvents(); 518 ClearCapturedEvents();
(...skipping 28 matching lines...) Expand all
460 4, 547 4,
461 Now()); 548 Now());
462 generator_->Dispatch(&touch3_press); 549 generator_->Dispatch(&touch3_press);
463 generator_->Dispatch(&touch3_move1); 550 generator_->Dispatch(&touch3_move1);
464 generator_->Dispatch(&touch4_press); 551 generator_->Dispatch(&touch4_press);
465 generator_->Dispatch(&touch3_move2); 552 generator_->Dispatch(&touch3_move2);
466 generator_->Dispatch(&touch4_move); 553 generator_->Dispatch(&touch4_move);
467 generator_->Dispatch(&touch3_release); 554 generator_->Dispatch(&touch3_release);
468 generator_->Dispatch(&touch4_release); 555 generator_->Dispatch(&touch4_release);
469 556
470 const ScopedVector<ui::LocatedEvent>& captured_events = GetCapturedEvents(); 557 std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents();
471 ASSERT_EQ(7u, captured_events.size()); 558 ASSERT_EQ(7u, captured_events.size());
472 CONFIRM_EVENTS_ARE_TOUCH_AND_EQUAL(captured_events[0], &touch3_press); 559 CONFIRM_EVENTS_ARE_TOUCH_AND_EQUAL(captured_events[0], &touch3_press);
473 CONFIRM_EVENTS_ARE_TOUCH_AND_EQUAL(captured_events[1], &touch3_move1); 560 CONFIRM_EVENTS_ARE_TOUCH_AND_EQUAL(captured_events[1], &touch3_move1);
474 CONFIRM_EVENTS_ARE_TOUCH_AND_EQUAL(captured_events[2], &touch4_press); 561 CONFIRM_EVENTS_ARE_TOUCH_AND_EQUAL(captured_events[2], &touch4_press);
475 CONFIRM_EVENTS_ARE_TOUCH_AND_EQUAL(captured_events[3], &touch3_move2); 562 CONFIRM_EVENTS_ARE_TOUCH_AND_EQUAL(captured_events[3], &touch3_move2);
476 CONFIRM_EVENTS_ARE_TOUCH_AND_EQUAL(captured_events[4], &touch4_move); 563 CONFIRM_EVENTS_ARE_TOUCH_AND_EQUAL(captured_events[4], &touch4_move);
477 564
478 // The release of finger 3 is rewritten as a move to the former location 565 // The release of finger 3 is rewritten as a move to the former location
479 // of finger 1. 566 // of finger 1.
480 EXPECT_EQ(ui::ET_TOUCH_MOVED, captured_events[5]->type()); 567 EXPECT_EQ(ui::ET_TOUCH_MOVED, captured_events[5]->type());
481 CONFIRM_EVENTS_ARE_TOUCH_AND_EQUAL(captured_events[6], &touch4_release); 568 CONFIRM_EVENTS_ARE_TOUCH_AND_EQUAL(captured_events[6], &touch4_release);
482 } 569 }
483 570
484 // Test the case when there are multiple fingers on the screen and the first 571 // Test the case when there are multiple fingers on the screen and the first
485 // finger is released. This should be ignored, but then the second finger 572 // finger is released. This should be ignored, but then the second finger
486 // release should be passed through. 573 // release should be passed through.
487 TEST_F(TouchExplorationTest, FirstFingerLifted) { 574 TEST_F(TouchExplorationTest, FirstFingerLifted) {
488 SwitchTouchExplorationMode(true); 575 SwitchTouchExplorationMode(true);
489 generator_->PressTouchId(1); 576 generator_->PressTouchId(1);
490 generator_->PressTouchId(2); 577 generator_->PressTouchId(2);
491 gfx::Point touch2_location(10, 11); 578 gfx::Point touch2_location(10, 11);
492 generator_->MoveTouchId(touch2_location, 2); 579 generator_->MoveTouchId(touch2_location, 2);
493 generator_->PressTouchId(3); 580 generator_->PressTouchId(3);
494 gfx::Point touch3_location(20, 21); 581 gfx::Point touch3_location(20, 21);
495 generator_->MoveTouchId(touch3_location, 3); 582 generator_->MoveTouchId(touch3_location, 3);
496 ClearCapturedEvents(); 583 ClearCapturedEvents();
497 584
498 // Release of finger 1 should be ignored. 585 // Release of finger 1 should be ignored.
499 generator_->ReleaseTouchId(1); 586 generator_->ReleaseTouchId(1);
500 const ScopedVector<ui::LocatedEvent>& captured_events = GetCapturedEvents(); 587 std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents();
501 ASSERT_EQ(0u, captured_events.size()); 588 ASSERT_EQ(0u, captured_events.size());
502 589
503 // Move of finger 2 should be passed through. 590 // Move of finger 2 should be passed through.
504 gfx::Point touch2_new_location(20, 11); 591 gfx::Point touch2_new_location(20, 11);
505 generator_->MoveTouchId(touch2_new_location, 2); 592 generator_->MoveTouchId(touch2_new_location, 2);
593 captured_events = GetCapturedLocatedEvents();
506 ASSERT_EQ(1u, captured_events.size()); 594 ASSERT_EQ(1u, captured_events.size());
507 EXPECT_EQ(ui::ET_TOUCH_MOVED, captured_events[0]->type()); 595 EXPECT_EQ(ui::ET_TOUCH_MOVED, captured_events[0]->type());
508 EXPECT_EQ(touch2_new_location, captured_events[0]->location()); 596 EXPECT_EQ(touch2_new_location, captured_events[0]->location());
509 ClearCapturedEvents(); 597 ClearCapturedEvents();
510 598
511 // Release of finger 2 should be passed through. 599 // Release of finger 2 should be passed through.
512 ui::TouchEvent touch2_release( 600 ui::TouchEvent touch2_release(
513 ui::ET_TOUCH_RELEASED, 601 ui::ET_TOUCH_RELEASED,
514 gfx::Point(14, 15), 602 gfx::Point(14, 15),
515 2, 603 2,
516 Now()); 604 Now());
517 generator_->Dispatch(&touch2_release); 605 generator_->Dispatch(&touch2_release);
606 captured_events = GetCapturedLocatedEvents();
607
518 ASSERT_EQ(1u, captured_events.size()); 608 ASSERT_EQ(1u, captured_events.size());
609 EXPECT_EQ(touch2_release.type(), captured_events[0]->type());
610 EXPECT_EQ(touch2_release.touch_id(),
611 (static_cast<ui::TouchEvent*>(captured_events[0]))->touch_id());
519 CONFIRM_EVENTS_ARE_TOUCH_AND_EQUAL(captured_events[0], &touch2_release); 612 CONFIRM_EVENTS_ARE_TOUCH_AND_EQUAL(captured_events[0], &touch2_release);
520 } 613 }
521 614
522 // Test the case when there are multiple fingers on the screen and the 615 // Test the case when there are multiple fingers on the screen and the
523 // second finger is released. This should be rewritten as a move to the 616 // second finger is released. This should be rewritten as a move to the
524 // location of the first finger. 617 // location of the first finger.
525 TEST_F(TouchExplorationTest, SecondFingerLifted) { 618 TEST_F(TouchExplorationTest, SecondFingerLifted) {
526 SwitchTouchExplorationMode(true); 619 SwitchTouchExplorationMode(true);
527 gfx::Point touch1_location(0, 11); 620 gfx::Point touch1_location(0, 11);
528 generator_->set_current_location(touch1_location); 621 generator_->set_current_location(touch1_location);
529 generator_->PressTouchId(1); 622 generator_->PressTouchId(1);
530 generator_->PressTouchId(2); 623 generator_->PressTouchId(2);
531 gfx::Point touch2_location(10, 11); 624 gfx::Point touch2_location(10, 11);
532 generator_->MoveTouchId(touch2_location, 2); 625 generator_->MoveTouchId(touch2_location, 2);
533 generator_->PressTouchId(3); 626 generator_->PressTouchId(3);
534 gfx::Point touch3_location(20, 21); 627 gfx::Point touch3_location(20, 21);
535 generator_->MoveTouchId(touch3_location, 3); 628 generator_->MoveTouchId(touch3_location, 3);
536 ClearCapturedEvents(); 629 ClearCapturedEvents();
537 630
538 // Release of finger 2 should be rewritten as a move to the location 631 // Release of finger 2 should be rewritten as a move to the location
539 // of the first finger. 632 // of the first finger.
540 generator_->ReleaseTouchId(2); 633 generator_->ReleaseTouchId(2);
541 const ScopedVector<ui::LocatedEvent>& captured_events = GetCapturedEvents(); 634 std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents();
542 ASSERT_EQ(1u, captured_events.size()); 635 ASSERT_EQ(1u, captured_events.size());
543 EXPECT_EQ(ui::ET_TOUCH_MOVED, captured_events[0]->type()); 636 EXPECT_EQ(ui::ET_TOUCH_MOVED, captured_events[0]->type());
544 EXPECT_EQ(2, static_cast<ui::TouchEvent*>(captured_events[0])->touch_id()); 637 EXPECT_EQ(2, static_cast<ui::TouchEvent*>(captured_events[0])->touch_id());
545 EXPECT_EQ(touch1_location, captured_events[0]->location()); 638 EXPECT_EQ(touch1_location, captured_events[0]->location());
546 ClearCapturedEvents(); 639 ClearCapturedEvents();
547 640
548 // Move of finger 1 should be rewritten as a move of finger 2. 641 // Move of finger 1 should be rewritten as a move of finger 2.
549 gfx::Point touch1_new_location(0, 41); 642 gfx::Point touch1_new_location(0, 41);
550 generator_->MoveTouchId(touch1_new_location, 1); 643 generator_->MoveTouchId(touch1_new_location, 1);
644 captured_events = GetCapturedLocatedEvents();
551 ASSERT_EQ(1u, captured_events.size()); 645 ASSERT_EQ(1u, captured_events.size());
552 EXPECT_EQ(ui::ET_TOUCH_MOVED, captured_events[0]->type()); 646 EXPECT_EQ(ui::ET_TOUCH_MOVED, captured_events[0]->type());
553 EXPECT_EQ(2, static_cast<ui::TouchEvent*>(captured_events[0])->touch_id()); 647 EXPECT_EQ(2, static_cast<ui::TouchEvent*>(captured_events[0])->touch_id());
554 EXPECT_EQ(touch1_new_location, captured_events[0]->location()); 648 EXPECT_EQ(touch1_new_location, captured_events[0]->location());
555 ClearCapturedEvents(); 649 ClearCapturedEvents();
556 650
557 // Release of finger 1 should be rewritten as release of finger 2. 651 // Release of finger 1 should be rewritten as release of finger 2.
558 gfx::Point touch1_final_location(0, 41); 652 gfx::Point touch1_final_location(0, 41);
559 ui::TouchEvent touch1_release( 653 ui::TouchEvent touch1_release(
560 ui::ET_TOUCH_RELEASED, 654 ui::ET_TOUCH_RELEASED,
561 touch1_final_location, 655 touch1_final_location,
562 1, 656 1,
563 Now()); 657 Now());
564 generator_->Dispatch(&touch1_release); 658 generator_->Dispatch(&touch1_release);
659 captured_events = GetCapturedLocatedEvents();
565 ASSERT_EQ(1u, captured_events.size()); 660 ASSERT_EQ(1u, captured_events.size());
566 EXPECT_EQ(ui::ET_TOUCH_RELEASED, captured_events[0]->type()); 661 EXPECT_EQ(ui::ET_TOUCH_RELEASED, captured_events[0]->type());
567 EXPECT_EQ(2, static_cast<ui::TouchEvent*>(captured_events[0])->touch_id()); 662 EXPECT_EQ(2, static_cast<ui::TouchEvent*>(captured_events[0])->touch_id());
568 EXPECT_EQ(touch1_final_location, captured_events[0]->location()); 663 EXPECT_EQ(touch1_final_location, captured_events[0]->location());
569 } 664 }
570 665
571 // If an event is received after the double-tap timeout has elapsed, but 666 // If an event is received after the double-tap timeout has elapsed, but
572 // before the timer has fired, a mouse move should still be generated. 667 // before the timer has fired, a mouse move should still be generated.
573 TEST_F(TouchExplorationTest, TimerFiresLateDuringTouchExploration) { 668 TEST_F(TouchExplorationTest, TimerFiresLateDuringTouchExploration) {
574 SwitchTouchExplorationMode(true); 669 SwitchTouchExplorationMode(true);
575 670
576 // Send a press, then add another finger after the double-tap timeout. 671 // Send a press, then add another finger after the double-tap timeout.
577 generator_->PressTouchId(1); 672 generator_->PressTouchId(1);
578 simulated_clock_->Advance(base::TimeDelta::FromMilliseconds(1000)); 673 simulated_clock_->Advance(base::TimeDelta::FromMilliseconds(1000));
579 generator_->PressTouchId(2); 674 generator_->PressTouchId(2);
580 std::vector<ui::LocatedEvent*> events = 675 std::vector<ui::LocatedEvent*> events =
581 GetCapturedEventsOfType(ui::ET_MOUSE_MOVED); 676 GetCapturedLocatedEventsOfType(ui::ET_MOUSE_MOVED);
582 ASSERT_EQ(1U, events.size()); 677 ASSERT_EQ(1U, events.size());
583 EXPECT_TRUE(events[0]->flags() & ui::EF_IS_SYNTHESIZED); 678 EXPECT_TRUE(events[0]->flags() & ui::EF_IS_SYNTHESIZED);
584 EXPECT_TRUE(events[0]->flags() & ui::EF_TOUCH_ACCESSIBILITY); 679 EXPECT_TRUE(events[0]->flags() & ui::EF_TOUCH_ACCESSIBILITY);
585 680
586 generator_->ReleaseTouchId(2); 681 generator_->ReleaseTouchId(2);
587 generator_->ReleaseTouchId(1); 682 generator_->ReleaseTouchId(1);
588 AdvanceSimulatedTimePastTapDelay(); 683 AdvanceSimulatedTimePastTapDelay();
589 EXPECT_TRUE(IsInNoFingersDownState()); 684 EXPECT_TRUE(IsInNoFingersDownState());
590 } 685 }
591 686
(...skipping 12 matching lines...) Expand all
604 // Send a tap at location2, after the double-tap timeout, but before the 699 // Send a tap at location2, after the double-tap timeout, but before the
605 // timer fires. 700 // timer fires.
606 gfx::Point location1(33, 34); 701 gfx::Point location1(33, 34);
607 generator_->set_current_location(location1); 702 generator_->set_current_location(location1);
608 simulated_clock_->Advance(base::TimeDelta::FromMilliseconds(301)); 703 simulated_clock_->Advance(base::TimeDelta::FromMilliseconds(301));
609 generator_->PressTouch(); 704 generator_->PressTouch();
610 generator_->ReleaseTouch(); 705 generator_->ReleaseTouch();
611 AdvanceSimulatedTimePastTapDelay(); 706 AdvanceSimulatedTimePastTapDelay();
612 707
613 std::vector<ui::LocatedEvent*> events = 708 std::vector<ui::LocatedEvent*> events =
614 GetCapturedEventsOfType(ui::ET_MOUSE_MOVED); 709 GetCapturedLocatedEventsOfType(ui::ET_MOUSE_MOVED);
615 ASSERT_EQ(2U, events.size()); 710 ASSERT_EQ(2U, events.size());
616 EXPECT_EQ(location0, events[0]->location()); 711 EXPECT_EQ(location0, events[0]->location());
617 EXPECT_TRUE(events[0]->flags() & ui::EF_IS_SYNTHESIZED); 712 EXPECT_TRUE(events[0]->flags() & ui::EF_IS_SYNTHESIZED);
618 EXPECT_TRUE(events[0]->flags() & ui::EF_TOUCH_ACCESSIBILITY); 713 EXPECT_TRUE(events[0]->flags() & ui::EF_TOUCH_ACCESSIBILITY);
619 EXPECT_EQ(location1, events[1]->location()); 714 EXPECT_EQ(location1, events[1]->location());
620 EXPECT_TRUE(events[1]->flags() & ui::EF_IS_SYNTHESIZED); 715 EXPECT_TRUE(events[1]->flags() & ui::EF_IS_SYNTHESIZED);
621 EXPECT_TRUE(events[1]->flags() & ui::EF_TOUCH_ACCESSIBILITY); 716 EXPECT_TRUE(events[1]->flags() & ui::EF_TOUCH_ACCESSIBILITY);
622 EXPECT_TRUE(IsInNoFingersDownState()); 717 EXPECT_TRUE(IsInNoFingersDownState());
623 } 718 }
624 719
625 // Double-tapping should send a touch press and release through to the location 720 // Double-tapping should send a touch press and release through to the location
626 // of the last successful touch exploration. 721 // of the last successful touch exploration.
627 TEST_F(TouchExplorationTest, DoubleTap) { 722 TEST_F(TouchExplorationTest, DoubleTap) {
628 SwitchTouchExplorationMode(true); 723 SwitchTouchExplorationMode(true);
629 724
630 // Tap at one location, and get a mouse move event. 725 // Tap at one location, and get a mouse move event.
631 gfx::Point tap_location(11, 12); 726 gfx::Point tap_location(11, 12);
632 generator_->set_current_location(tap_location); 727 generator_->set_current_location(tap_location);
633 generator_->PressTouch(); 728 generator_->PressTouch();
634 generator_->ReleaseTouch(); 729 generator_->ReleaseTouch();
635 AdvanceSimulatedTimePastTapDelay(); 730 AdvanceSimulatedTimePastTapDelay();
636 731
637 std::vector<ui::LocatedEvent*> events = 732 std::vector<ui::LocatedEvent*> events =
638 GetCapturedEventsOfType(ui::ET_MOUSE_MOVED); 733 GetCapturedLocatedEventsOfType(ui::ET_MOUSE_MOVED);
639 ASSERT_EQ(1U, events.size()); 734 ASSERT_EQ(1U, events.size());
640 735
641 EXPECT_EQ(tap_location, events[0]->location()); 736 EXPECT_EQ(tap_location, events[0]->location());
642 EXPECT_TRUE(events[0]->flags() & ui::EF_IS_SYNTHESIZED); 737 EXPECT_TRUE(events[0]->flags() & ui::EF_IS_SYNTHESIZED);
643 EXPECT_TRUE(events[0]->flags() & ui::EF_TOUCH_ACCESSIBILITY); 738 EXPECT_TRUE(events[0]->flags() & ui::EF_TOUCH_ACCESSIBILITY);
644 ClearCapturedEvents(); 739 ClearCapturedEvents();
645 740
646 // Now double-tap at a different location. This should result in 741 // Now double-tap at a different location. This should result in
647 // a single touch press and release at the location of the tap, 742 // a single touch press and release at the location of the tap,
648 // not at the location of the double-tap. 743 // not at the location of the double-tap.
649 gfx::Point double_tap_location(33, 34); 744 gfx::Point double_tap_location(33, 34);
650 generator_->set_current_location(double_tap_location); 745 generator_->set_current_location(double_tap_location);
651 generator_->PressTouch(); 746 generator_->PressTouch();
652 generator_->ReleaseTouch(); 747 generator_->ReleaseTouch();
653 generator_->PressTouch(); 748 generator_->PressTouch();
654 generator_->ReleaseTouch(); 749 generator_->ReleaseTouch();
655 750
656 const ScopedVector<ui::LocatedEvent>& captured_events = GetCapturedEvents(); 751 std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents();
657 ASSERT_EQ(2U, captured_events.size()); 752 ASSERT_EQ(2U, captured_events.size());
658 EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type()); 753 EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type());
659 EXPECT_EQ(tap_location, captured_events[0]->location()); 754 EXPECT_EQ(tap_location, captured_events[0]->location());
660 EXPECT_EQ(ui::ET_TOUCH_RELEASED, captured_events[1]->type()); 755 EXPECT_EQ(ui::ET_TOUCH_RELEASED, captured_events[1]->type());
661 EXPECT_EQ(tap_location, captured_events[1]->location()); 756 EXPECT_EQ(tap_location, captured_events[1]->location());
662 EXPECT_TRUE(IsInNoFingersDownState()); 757 EXPECT_TRUE(IsInNoFingersDownState());
663 } 758 }
664 759
665 // Double-tapping where the user holds their finger down for the second time 760 // Double-tapping where the user holds their finger down for the second time
666 // for a longer press should send a touch press and released (right click) 761 // for a longer press should send a touch press and released (right click)
667 // to the location of the last successful touch exploration. 762 // to the location of the last successful touch exploration.
668 TEST_F(TouchExplorationTest, DoubleTapLongPress) { 763 TEST_F(TouchExplorationTest, DoubleTapLongPress) {
669 SwitchTouchExplorationMode(true); 764 SwitchTouchExplorationMode(true);
670 765
671 // Tap at one location, and get a mouse move event. 766 // Tap at one location, and get a mouse move event.
672 gfx::Point tap_location(11, 12); 767 gfx::Point tap_location(11, 12);
673 generator_->set_current_location(tap_location); 768 generator_->set_current_location(tap_location);
674 generator_->PressTouch(); 769 generator_->PressTouch();
675 generator_->ReleaseTouch(); 770 generator_->ReleaseTouch();
676 AdvanceSimulatedTimePastTapDelay(); 771 AdvanceSimulatedTimePastTapDelay();
677 772
678 std::vector<ui::LocatedEvent*> events = 773 std::vector<ui::LocatedEvent*> events =
679 GetCapturedEventsOfType(ui::ET_MOUSE_MOVED); 774 GetCapturedLocatedEventsOfType(ui::ET_MOUSE_MOVED);
680 ASSERT_EQ(1U, events.size()); 775 ASSERT_EQ(1U, events.size());
681 776
682 EXPECT_EQ(tap_location, events[0]->location()); 777 EXPECT_EQ(tap_location, events[0]->location());
683 EXPECT_TRUE(events[0]->flags() & ui::EF_IS_SYNTHESIZED); 778 EXPECT_TRUE(events[0]->flags() & ui::EF_IS_SYNTHESIZED);
684 EXPECT_TRUE(events[0]->flags() & ui::EF_TOUCH_ACCESSIBILITY); 779 EXPECT_TRUE(events[0]->flags() & ui::EF_TOUCH_ACCESSIBILITY);
685 ClearCapturedEvents(); 780 ClearCapturedEvents();
686 781
687 // Now double-tap and hold at a different location. 782 // Now double-tap and hold at a different location.
688 // This should result in a single touch long press and release 783 // This should result in a single touch long press and release
689 // at the location of the tap, not at the location of the double-tap. 784 // at the location of the tap, not at the location of the double-tap.
690 // There should be a time delay between the touch press and release. 785 // There should be a time delay between the touch press and release.
691 gfx::Point first_tap_location(33, 34); 786 gfx::Point first_tap_location(33, 34);
692 generator_->set_current_location(first_tap_location); 787 generator_->set_current_location(first_tap_location);
693 generator_->PressTouch(); 788 generator_->PressTouch();
694 generator_->ReleaseTouch(); 789 generator_->ReleaseTouch();
695 gfx::Point second_tap_location(23, 24); 790 gfx::Point second_tap_location(23, 24);
696 generator_->set_current_location(second_tap_location); 791 generator_->set_current_location(second_tap_location);
697 generator_->PressTouch(); 792 generator_->PressTouch();
698 simulated_clock_->Advance(gesture_detector_config_.longpress_timeout); 793 simulated_clock_->Advance(gesture_detector_config_.longpress_timeout);
699 generator_->ReleaseTouch(); 794 generator_->ReleaseTouch();
700 795
701 const ScopedVector<ui::LocatedEvent>& captured_events = GetCapturedEvents(); 796 std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents();
702 ASSERT_EQ(2U, captured_events.size()); 797 ASSERT_EQ(2U, captured_events.size());
703 EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type()); 798 EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type());
704 EXPECT_EQ(tap_location, captured_events[0]->location()); 799 EXPECT_EQ(tap_location, captured_events[0]->location());
705 base::TimeDelta pressed_time = captured_events[0]->time_stamp(); 800 base::TimeDelta pressed_time = captured_events[0]->time_stamp();
706 EXPECT_EQ(ui::ET_TOUCH_RELEASED, captured_events[1]->type()); 801 EXPECT_EQ(ui::ET_TOUCH_RELEASED, captured_events[1]->type());
707 EXPECT_EQ(tap_location, captured_events[1]->location()); 802 EXPECT_EQ(tap_location, captured_events[1]->location());
708 base::TimeDelta released_time = captured_events[1]->time_stamp(); 803 base::TimeDelta released_time = captured_events[1]->time_stamp();
709 EXPECT_EQ(gesture_detector_config_.longpress_timeout, 804 EXPECT_EQ(gesture_detector_config_.longpress_timeout,
710 released_time - pressed_time); 805 released_time - pressed_time);
711 } 806 }
712 807
713 // Single-tapping should send a touch press and release through to the location 808 // Single-tapping should send a touch press and release through to the location
714 // of the last successful touch exploration if the grace period has not 809 // of the last successful touch exploration if the grace period has not
715 // elapsed. 810 // elapsed.
716 TEST_F(TouchExplorationTest, SingleTap) { 811 TEST_F(TouchExplorationTest, SingleTap) {
717 SwitchTouchExplorationMode(true); 812 SwitchTouchExplorationMode(true);
718 813
719 // Tap once to simulate a mouse moved event. 814 // Tap once to simulate a mouse moved event.
720 gfx::Point initial_location(11, 12); 815 gfx::Point initial_location(11, 12);
721 generator_->set_current_location(initial_location); 816 generator_->set_current_location(initial_location);
722 generator_->PressTouch(); 817 generator_->PressTouch();
818 AdvanceSimulatedTimePastTapDelay();
819 ClearCapturedEvents();
723 820
724 // Move to another location for single tap 821 // Move to another location for single tap
725 gfx::Point tap_location(22, 23); 822 gfx::Point tap_location(22, 23);
726 generator_->MoveTouch(tap_location); 823 generator_->MoveTouch(tap_location);
727 generator_->ReleaseTouch(); 824 generator_->ReleaseTouch();
728 825
729 // Allow time to pass within the grace period of releasing before 826 // Allow time to pass within the grace period of releasing before
730 // tapping again. 827 // tapping again.
731 gfx::Point final_location(33, 34); 828 gfx::Point final_location(33, 34);
732 generator_->set_current_location(final_location); 829 generator_->set_current_location(final_location);
733 simulated_clock_->Advance(base::TimeDelta::FromMilliseconds(250)); 830 simulated_clock_->Advance(base::TimeDelta::FromMilliseconds(250));
734 generator_->PressTouch(); 831 generator_->PressTouch();
735 generator_->ReleaseTouch(); 832 generator_->ReleaseTouch();
736 833
737 const ScopedVector<ui::LocatedEvent>& captured_events = GetCapturedEvents(); 834 std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents();
738 ASSERT_EQ(4U, captured_events.size()); 835 ASSERT_EQ(4U, captured_events.size());
739 EXPECT_EQ(ui::ET_MOUSE_MOVED, captured_events[0]->type()); 836 EXPECT_EQ(ui::ET_MOUSE_MOVED, captured_events[0]->type());
740 EXPECT_EQ(ui::ET_MOUSE_MOVED, captured_events[1]->type()); 837 EXPECT_EQ(ui::ET_MOUSE_MOVED, captured_events[1]->type());
741 EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[2]->type()); 838 EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[2]->type());
742 EXPECT_EQ(tap_location, captured_events[2]->location()); 839 EXPECT_EQ(tap_location, captured_events[2]->location());
743 EXPECT_EQ(ui::ET_TOUCH_RELEASED, captured_events[3]->type()); 840 EXPECT_EQ(ui::ET_TOUCH_RELEASED, captured_events[3]->type());
744 EXPECT_EQ(tap_location, captured_events[3]->location()); 841 EXPECT_EQ(tap_location, captured_events[3]->location());
745 } 842 }
746 843
747 // Double-tapping without coming from touch exploration (no previous touch 844 // Double-tapping without coming from touch exploration (no previous touch
748 // exploration event) should not generate any events. 845 // exploration event) should not generate any events.
749 TEST_F(TouchExplorationTest, DoubleTapNoTouchExplore) { 846 TEST_F(TouchExplorationTest, DoubleTapNoTouchExplore) {
750 SwitchTouchExplorationMode(true); 847 SwitchTouchExplorationMode(true);
751 848
752 // Double-tap without any previous touch. 849 // Double-tap without any previous touch.
753 // Touch exploration mode has not been entered, so there is no previous 850 // Touch exploration mode has not been entered, so there is no previous
754 // touch exploration event. The double-tap should be discarded, and no events 851 // touch exploration event. The double-tap should be discarded, and no events
755 // should be generated at all. 852 // should be generated at all.
756 gfx::Point double_tap_location(33, 34); 853 gfx::Point double_tap_location(33, 34);
757 generator_->set_current_location(double_tap_location); 854 generator_->set_current_location(double_tap_location);
758 generator_->PressTouch(); 855 generator_->PressTouch();
759 generator_->ReleaseTouch(); 856 generator_->ReleaseTouch();
760 generator_->PressTouch(); 857 generator_->PressTouch();
761 generator_->ReleaseTouch(); 858 generator_->ReleaseTouch();
762 859
763 const ScopedVector<ui::LocatedEvent>& captured_events = GetCapturedEvents(); 860 std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents();
764 ASSERT_EQ(0U, captured_events.size()); 861 ASSERT_EQ(0U, captured_events.size());
765 } 862 }
766 863
767 // Tapping and releasing with a second finger when in touch exploration mode 864 // Tapping and releasing with a second finger when in touch exploration mode
768 // should send a touch press and released to the location of the last 865 // should send a touch press and released to the location of the last
769 // successful touch exploration and return to touch explore. 866 // successful touch exploration and return to touch explore.
770 TEST_F(TouchExplorationTest, SplitTap) { 867 TEST_F(TouchExplorationTest, SplitTap) {
771 SwitchTouchExplorationMode(true); 868 SwitchTouchExplorationMode(true);
772 gfx::Point initial_touch_location(11, 12); 869 gfx::Point initial_touch_location(11, 12);
773 gfx::Point second_touch_location(33, 34); 870 gfx::Point second_touch_location(33, 34);
774 871
775 // Tap and hold at one location, and get a mouse move event in touch explore. 872 // Tap and hold at one location, and get a mouse move event in touch explore.
776 EnterTouchExplorationModeAtLocation(initial_touch_location); 873 EnterTouchExplorationModeAtLocation(initial_touch_location);
777 std::vector<ui::LocatedEvent*> events = 874 std::vector<ui::LocatedEvent*> events =
778 GetCapturedEventsOfType(ui::ET_MOUSE_MOVED); 875 GetCapturedLocatedEventsOfType(ui::ET_MOUSE_MOVED);
779 ASSERT_EQ(1U, events.size()); 876 ASSERT_EQ(1U, events.size());
780 877
781 EXPECT_EQ(initial_touch_location, events[0]->location()); 878 EXPECT_EQ(initial_touch_location, events[0]->location());
782 EXPECT_TRUE(events[0]->flags() & ui::EF_IS_SYNTHESIZED); 879 EXPECT_TRUE(events[0]->flags() & ui::EF_IS_SYNTHESIZED);
783 EXPECT_TRUE(events[0]->flags() & ui::EF_TOUCH_ACCESSIBILITY); 880 EXPECT_TRUE(events[0]->flags() & ui::EF_TOUCH_ACCESSIBILITY);
784 ClearCapturedEvents(); 881 ClearCapturedEvents();
785 882
786 // Now tap and release at a different location. This should result in a 883 // Now tap and release at a different location. This should result in a
787 // single touch and release at the location of the first (held) tap, 884 // single touch and release at the location of the first (held) tap,
788 // not at the location of the second tap and release. 885 // not at the location of the second tap and release.
789 // After the release, there is still a finger in touch explore mode. 886 // After the release, there is still a finger in touch explore mode.
790 ui::TouchEvent split_tap_press( 887 ui::TouchEvent split_tap_press(
791 ui::ET_TOUCH_PRESSED, second_touch_location, 1, Now()); 888 ui::ET_TOUCH_PRESSED, second_touch_location, 1, Now());
792 generator_->Dispatch(&split_tap_press); 889 generator_->Dispatch(&split_tap_press);
793 ui::TouchEvent split_tap_release( 890 ui::TouchEvent split_tap_release(
794 ui::ET_TOUCH_RELEASED, second_touch_location, 1, Now()); 891 ui::ET_TOUCH_RELEASED, second_touch_location, 1, Now());
795 generator_->Dispatch(&split_tap_release); 892 generator_->Dispatch(&split_tap_release);
796 EXPECT_FALSE(IsInNoFingersDownState()); 893 EXPECT_FALSE(IsInNoFingersDownState());
797 894
798 const ScopedVector<ui::LocatedEvent>& captured_events = GetCapturedEvents(); 895 std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents();
799 ASSERT_EQ(2U, captured_events.size()); 896 ASSERT_EQ(2U, captured_events.size());
800 EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type()); 897 EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type());
801 EXPECT_EQ(initial_touch_location, captured_events[0]->location()); 898 EXPECT_EQ(initial_touch_location, captured_events[0]->location());
802 EXPECT_EQ(ui::ET_TOUCH_RELEASED, captured_events[1]->type()); 899 EXPECT_EQ(ui::ET_TOUCH_RELEASED, captured_events[1]->type());
803 EXPECT_EQ(initial_touch_location, captured_events[1]->location()); 900 EXPECT_EQ(initial_touch_location, captured_events[1]->location());
804 } 901 }
805 902
806 // If split tap is started but the touch explore finger is released first, 903 // If split tap is started but the touch explore finger is released first,
807 // there should still be a touch press and release sent to the location of 904 // there should still be a touch press and release sent to the location of
808 // the last successful touch exploration. 905 // the last successful touch exploration.
809 // Both fingers should be released after the click goes through. 906 // Both fingers should be released after the click goes through.
810 TEST_F(TouchExplorationTest, SplitTapRelease) { 907 TEST_F(TouchExplorationTest, SplitTapRelease) {
811 SwitchTouchExplorationMode(true); 908 SwitchTouchExplorationMode(true);
812 909
813 gfx::Point initial_touch_location(11, 12); 910 gfx::Point initial_touch_location(11, 12);
814 gfx::Point second_touch_location(33, 34); 911 gfx::Point second_touch_location(33, 34);
815 912
816 // Tap and hold at one location, and get a mouse move event in touch explore. 913 // Tap and hold at one location, and get a mouse move event in touch explore.
817 EnterTouchExplorationModeAtLocation(initial_touch_location); 914 EnterTouchExplorationModeAtLocation(initial_touch_location);
818 915
819 std::vector<ui::LocatedEvent*> events = 916 std::vector<ui::LocatedEvent*> events =
820 GetCapturedEventsOfType(ui::ET_MOUSE_MOVED); 917 GetCapturedLocatedEventsOfType(ui::ET_MOUSE_MOVED);
821 ASSERT_EQ(1U, events.size()); 918 ASSERT_EQ(1U, events.size());
822 919
823 ClearCapturedEvents(); 920 ClearCapturedEvents();
824 921
825 // Now tap at a different location. Release at the first location, 922 // Now tap at a different location. Release at the first location,
826 // then release at the second. This should result in a 923 // then release at the second. This should result in a
827 // single touch and release at the location of the first (held) tap, 924 // single touch and release at the location of the first (held) tap,
828 // not at the location of the second tap and release. 925 // not at the location of the second tap and release.
829 ui::TouchEvent split_tap_press( 926 ui::TouchEvent split_tap_press(
830 ui::ET_TOUCH_PRESSED, second_touch_location, 1, Now()); 927 ui::ET_TOUCH_PRESSED, second_touch_location, 1, Now());
831 generator_->Dispatch(&split_tap_press); 928 generator_->Dispatch(&split_tap_press);
832 ui::TouchEvent touch_explore_release( 929 ui::TouchEvent touch_explore_release(
833 ui::ET_TOUCH_RELEASED, initial_touch_location, 0, Now()); 930 ui::ET_TOUCH_RELEASED, initial_touch_location, 0, Now());
834 generator_->Dispatch(&touch_explore_release); 931 generator_->Dispatch(&touch_explore_release);
835 ui::TouchEvent split_tap_release( 932 ui::TouchEvent split_tap_release(
836 ui::ET_TOUCH_RELEASED, second_touch_location , 1, Now()); 933 ui::ET_TOUCH_RELEASED, second_touch_location , 1, Now());
837 generator_->Dispatch(&split_tap_release); 934 generator_->Dispatch(&split_tap_release);
838 EXPECT_TRUE(IsInNoFingersDownState()); 935 EXPECT_TRUE(IsInNoFingersDownState());
839 936
840 const ScopedVector<ui::LocatedEvent>& captured_events = GetCapturedEvents(); 937 std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents();
841 ASSERT_EQ(2U, captured_events.size()); 938 ASSERT_EQ(2U, captured_events.size());
842 EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type()); 939 EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type());
843 EXPECT_EQ(initial_touch_location, captured_events[0]->location()); 940 EXPECT_EQ(initial_touch_location, captured_events[0]->location());
844 EXPECT_EQ(ui::ET_TOUCH_RELEASED, captured_events[1]->type()); 941 EXPECT_EQ(ui::ET_TOUCH_RELEASED, captured_events[1]->type());
845 EXPECT_EQ(initial_touch_location, captured_events[1]->location()); 942 EXPECT_EQ(initial_touch_location, captured_events[1]->location());
846 } 943 }
847 944
848 // When in touch exploration mode, making a long press with a second finger 945 // When in touch exploration mode, making a long press with a second finger
849 // should send a touch press and released to the location of the last 946 // should send a touch press and released to the location of the last
850 // successful touch exploration. There should be a delay between the 947 // successful touch exploration. There should be a delay between the
851 // touch and release events (right click). 948 // touch and release events (right click).
852 TEST_F(TouchExplorationTest, SplitTapLongPress) { 949 TEST_F(TouchExplorationTest, SplitTapLongPress) {
853 SwitchTouchExplorationMode(true); 950 SwitchTouchExplorationMode(true);
854 gfx::Point initial_touch_location(11, 12); 951 gfx::Point initial_touch_location(11, 12);
855 gfx::Point second_touch_location(33, 34); 952 gfx::Point second_touch_location(33, 34);
856 953
857 // Tap and hold at one location, and get a mouse move event in touch explore. 954 // Tap and hold at one location, and get a mouse move event in touch explore.
858 EnterTouchExplorationModeAtLocation(initial_touch_location); 955 EnterTouchExplorationModeAtLocation(initial_touch_location);
859 std::vector<ui::LocatedEvent*> events = 956 std::vector<ui::LocatedEvent*> events =
860 GetCapturedEventsOfType(ui::ET_MOUSE_MOVED); 957 GetCapturedLocatedEventsOfType(ui::ET_MOUSE_MOVED);
861 ASSERT_EQ(1U, events.size()); 958 ASSERT_EQ(1U, events.size());
862 959
863 ClearCapturedEvents(); 960 ClearCapturedEvents();
864 961
865 // Now tap and release at a different location. This should result in a 962 // Now tap and release at a different location. This should result in a
866 // single touch and release at the location of the first (held) tap, 963 // single touch and release at the location of the first (held) tap,
867 // not at the location of the second tap and release. 964 // not at the location of the second tap and release.
868 // After the release, there is still a finger in touch explore mode. 965 // After the release, there is still a finger in touch explore mode.
869 ui::TouchEvent split_tap_press( 966 ui::TouchEvent split_tap_press(
870 ui::ET_TOUCH_PRESSED, second_touch_location, 1, Now()); 967 ui::ET_TOUCH_PRESSED, second_touch_location, 1, Now());
871 generator_->Dispatch(&split_tap_press); 968 generator_->Dispatch(&split_tap_press);
872 simulated_clock_->Advance(gesture_detector_config_.longpress_timeout); 969 simulated_clock_->Advance(gesture_detector_config_.longpress_timeout);
873 ui::TouchEvent split_tap_release( 970 ui::TouchEvent split_tap_release(
874 ui::ET_TOUCH_RELEASED, second_touch_location, 1, Now()); 971 ui::ET_TOUCH_RELEASED, second_touch_location, 1, Now());
875 generator_->Dispatch(&split_tap_release); 972 generator_->Dispatch(&split_tap_release);
876 EXPECT_FALSE(IsInNoFingersDownState()); 973 EXPECT_FALSE(IsInNoFingersDownState());
877 974
878 const ScopedVector<ui::LocatedEvent>& captured_events = GetCapturedEvents(); 975 std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents();
879 ASSERT_EQ(2U, captured_events.size()); 976 ASSERT_EQ(2U, captured_events.size());
880 EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type()); 977 EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type());
881 EXPECT_EQ(initial_touch_location, captured_events[0]->location()); 978 EXPECT_EQ(initial_touch_location, captured_events[0]->location());
882 base::TimeDelta pressed_time = captured_events[0]->time_stamp(); 979 base::TimeDelta pressed_time = captured_events[0]->time_stamp();
883 EXPECT_EQ(ui::ET_TOUCH_RELEASED, captured_events[1]->type()); 980 EXPECT_EQ(ui::ET_TOUCH_RELEASED, captured_events[1]->type());
884 EXPECT_EQ(initial_touch_location, captured_events[1]->location()); 981 EXPECT_EQ(initial_touch_location, captured_events[1]->location());
885 base::TimeDelta released_time = captured_events[1]->time_stamp(); 982 base::TimeDelta released_time = captured_events[1]->time_stamp();
886 EXPECT_EQ(gesture_detector_config_.longpress_timeout, 983 EXPECT_EQ(gesture_detector_config_.longpress_timeout,
887 released_time - pressed_time); 984 released_time - pressed_time);
888 } 985 }
889 986
890 // If split tap is started but the touch explore finger is released first, 987 // If split tap is started but the touch explore finger is released first,
891 // there should still be a touch press and release sent to the location of 988 // there should still be a touch press and release sent to the location of
892 // the last successful touch exploration. If the remaining finger is held 989 // the last successful touch exploration. If the remaining finger is held
893 // as a longpress, there should be a delay between the sent touch and release 990 // as a longpress, there should be a delay between the sent touch and release
894 // events (right click).All fingers should be released after the click 991 // events (right click).All fingers should be released after the click
895 // goes through. 992 // goes through.
896 TEST_F(TouchExplorationTest, SplitTapReleaseLongPress) { 993 TEST_F(TouchExplorationTest, SplitTapReleaseLongPress) {
897 SwitchTouchExplorationMode(true); 994 SwitchTouchExplorationMode(true);
898 gfx::Point initial_touch_location(11, 12); 995 gfx::Point initial_touch_location(11, 12);
899 gfx::Point second_touch_location(33, 34); 996 gfx::Point second_touch_location(33, 34);
900 997
901 // Tap and hold at one location, and get a mouse move event in touch explore. 998 // Tap and hold at one location, and get a mouse move event in touch explore.
902 EnterTouchExplorationModeAtLocation(initial_touch_location); 999 EnterTouchExplorationModeAtLocation(initial_touch_location);
903 std::vector<ui::LocatedEvent*> events = 1000 std::vector<ui::LocatedEvent*> events =
904 GetCapturedEventsOfType(ui::ET_MOUSE_MOVED); 1001 GetCapturedLocatedEventsOfType(ui::ET_MOUSE_MOVED);
905 ASSERT_EQ(1U, events.size()); 1002 ASSERT_EQ(1U, events.size());
906 ClearCapturedEvents(); 1003 ClearCapturedEvents();
907 1004
908 // Now tap at a different location. Release at the first location, 1005 // Now tap at a different location. Release at the first location,
909 // then release at the second. This should result in a 1006 // then release at the second. This should result in a
910 // single touch and release at the location of the first (held) tap, 1007 // single touch and release at the location of the first (held) tap,
911 // not at the location of the second tap and release. 1008 // not at the location of the second tap and release.
912 // After the release, TouchToMouseMode should still be on. 1009 // After the release, TouchToMouseMode should still be on.
913 ui::TouchEvent split_tap_press( 1010 ui::TouchEvent split_tap_press(
914 ui::ET_TOUCH_PRESSED, second_touch_location, 1, Now()); 1011 ui::ET_TOUCH_PRESSED, second_touch_location, 1, Now());
915 generator_->Dispatch(&split_tap_press); 1012 generator_->Dispatch(&split_tap_press);
916 ui::TouchEvent touch_explore_release( 1013 ui::TouchEvent touch_explore_release(
917 ui::ET_TOUCH_RELEASED, initial_touch_location, 0, Now()); 1014 ui::ET_TOUCH_RELEASED, initial_touch_location, 0, Now());
918 generator_->Dispatch(&touch_explore_release); 1015 generator_->Dispatch(&touch_explore_release);
919 simulated_clock_->Advance(gesture_detector_config_.longpress_timeout); 1016 simulated_clock_->Advance(gesture_detector_config_.longpress_timeout);
920 ui::TouchEvent split_tap_release( 1017 ui::TouchEvent split_tap_release(
921 ui::ET_TOUCH_RELEASED, second_touch_location, 1, Now()); 1018 ui::ET_TOUCH_RELEASED, second_touch_location, 1, Now());
922 generator_->Dispatch(&split_tap_release); 1019 generator_->Dispatch(&split_tap_release);
923 EXPECT_TRUE(IsInTouchToMouseMode()); 1020 EXPECT_TRUE(IsInTouchToMouseMode());
924 1021
925 const ScopedVector<ui::LocatedEvent>& captured_events = GetCapturedEvents(); 1022 std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents();
926 ASSERT_EQ(2U, captured_events.size()); 1023 ASSERT_EQ(2U, captured_events.size());
927 EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type()); 1024 EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type());
928 EXPECT_EQ(initial_touch_location, captured_events[0]->location()); 1025 EXPECT_EQ(initial_touch_location, captured_events[0]->location());
929 base::TimeDelta pressed_time = captured_events[0]->time_stamp(); 1026 base::TimeDelta pressed_time = captured_events[0]->time_stamp();
930 EXPECT_EQ(ui::ET_TOUCH_RELEASED, captured_events[1]->type()); 1027 EXPECT_EQ(ui::ET_TOUCH_RELEASED, captured_events[1]->type());
931 EXPECT_EQ(initial_touch_location, captured_events[1]->location()); 1028 EXPECT_EQ(initial_touch_location, captured_events[1]->location());
932 base::TimeDelta released_time = captured_events[1]->time_stamp(); 1029 base::TimeDelta released_time = captured_events[1]->time_stamp();
933 EXPECT_EQ(gesture_detector_config_.longpress_timeout, 1030 EXPECT_EQ(gesture_detector_config_.longpress_timeout,
934 released_time - pressed_time); 1031 released_time - pressed_time);
935 } 1032 }
936 1033
937 TEST_F(TouchExplorationTest, SplitTapLongPressMultiFinger) { 1034 TEST_F(TouchExplorationTest, SplitTapLongPressMultiFinger) {
938 SwitchTouchExplorationMode(true); 1035 SwitchTouchExplorationMode(true);
939 gfx::Point initial_touch_location(11, 12); 1036 gfx::Point initial_touch_location(11, 12);
940 gfx::Point second_touch_location(33, 34); 1037 gfx::Point second_touch_location(33, 34);
941 gfx::Point third_touch_location(16, 17); 1038 gfx::Point third_touch_location(16, 17);
942 1039
943 // Tap and hold at one location, and get a mouse move event in touch explore. 1040 // Tap and hold at one location, and get a mouse move event in touch explore.
944 EnterTouchExplorationModeAtLocation(initial_touch_location); 1041 EnterTouchExplorationModeAtLocation(initial_touch_location);
945 1042
946 std::vector<ui::LocatedEvent*> events = 1043 std::vector<ui::LocatedEvent*> events =
947 GetCapturedEventsOfType(ui::ET_MOUSE_MOVED); 1044 GetCapturedLocatedEventsOfType(ui::ET_MOUSE_MOVED);
948 ASSERT_EQ(1U, events.size()); 1045 ASSERT_EQ(1U, events.size());
949 1046
950 EXPECT_EQ(initial_touch_location, events[0]->location()); 1047 EXPECT_EQ(initial_touch_location, events[0]->location());
951 EXPECT_TRUE(events[0]->flags() & ui::EF_IS_SYNTHESIZED); 1048 EXPECT_TRUE(events[0]->flags() & ui::EF_IS_SYNTHESIZED);
952 EXPECT_TRUE(events[0]->flags() & ui::EF_TOUCH_ACCESSIBILITY); 1049 EXPECT_TRUE(events[0]->flags() & ui::EF_TOUCH_ACCESSIBILITY);
953 ClearCapturedEvents(); 1050 ClearCapturedEvents();
954 1051
955 // Now tap at a different location and hold for long press. 1052 // Now tap at a different location and hold for long press.
956 ui::TouchEvent split_tap_press( 1053 ui::TouchEvent split_tap_press(
957 ui::ET_TOUCH_PRESSED, second_touch_location, 1, Now()); 1054 ui::ET_TOUCH_PRESSED, second_touch_location, 1, Now());
(...skipping 11 matching lines...) Expand all
969 ui::TouchEvent touch_explore_release( 1066 ui::TouchEvent touch_explore_release(
970 ui::ET_TOUCH_RELEASED, initial_touch_location, 0, Now()); 1067 ui::ET_TOUCH_RELEASED, initial_touch_location, 0, Now());
971 generator_->Dispatch(&touch_explore_release); 1068 generator_->Dispatch(&touch_explore_release);
972 ui::TouchEvent split_tap_release( 1069 ui::TouchEvent split_tap_release(
973 ui::ET_TOUCH_RELEASED, second_touch_location, 1, Now()); 1070 ui::ET_TOUCH_RELEASED, second_touch_location, 1, Now());
974 generator_->Dispatch(&split_tap_release); 1071 generator_->Dispatch(&split_tap_release);
975 ui::TouchEvent third_tap_release( 1072 ui::TouchEvent third_tap_release(
976 ui::ET_TOUCH_RELEASED, third_touch_location, 2, Now()); 1073 ui::ET_TOUCH_RELEASED, third_touch_location, 2, Now());
977 generator_->Dispatch(&third_tap_release); 1074 generator_->Dispatch(&third_tap_release);
978 1075
979 const ScopedVector<ui::LocatedEvent>& captured_events = GetCapturedEvents(); 1076 std::vector<ui::LocatedEvent*> captured_events = GetCapturedLocatedEvents();
980 ASSERT_EQ(2U, captured_events.size()); 1077 ASSERT_EQ(2U, captured_events.size());
981 EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type()); 1078 EXPECT_EQ(ui::ET_TOUCH_PRESSED, captured_events[0]->type());
982 EXPECT_EQ(initial_touch_location, captured_events[0]->location()); 1079 EXPECT_EQ(initial_touch_location, captured_events[0]->location());
983 base::TimeDelta pressed_time = captured_events[0]->time_stamp(); 1080 base::TimeDelta pressed_time = captured_events[0]->time_stamp();
984 EXPECT_EQ(ui::ET_TOUCH_RELEASED, captured_events[1]->type()); 1081 EXPECT_EQ(ui::ET_TOUCH_RELEASED, captured_events[1]->type());
985 EXPECT_EQ(initial_touch_location, captured_events[1]->location()); 1082 EXPECT_EQ(initial_touch_location, captured_events[1]->location());
986 base::TimeDelta released_time = captured_events[1]->time_stamp(); 1083 base::TimeDelta released_time = captured_events[1]->time_stamp();
987 EXPECT_EQ(gesture_detector_config_.longpress_timeout, 1084 EXPECT_EQ(gesture_detector_config_.longpress_timeout,
988 released_time - pressed_time); 1085 released_time - pressed_time);
989 EXPECT_TRUE(IsInNoFingersDownState()); 1086 EXPECT_TRUE(IsInNoFingersDownState());
990 } 1087 }
991 1088
1089 // Finger must have moved more than slop, faster than the minimum swipe
1090 // velocity, and before the tap timer fires in order to enter
1091 // GestureInProgress state. Otherwise, if the tap timer fires before the a
1092 // gesture is completed, enter touch exploration.
1093 TEST_F(TouchExplorationTest, EnterGestureInProgressState) {
1094 SwitchTouchExplorationMode(true);
1095 EXPECT_FALSE(IsInTouchToMouseMode());
1096 EXPECT_FALSE(IsInGestureInProgressState());
1097 float delta_distance = gesture_detector_config_.touch_slop + 1;
1098 ui::TouchEvent first_press(ui::ET_TOUCH_PRESSED, gfx::Point(0, 1), 0, Now());
1099 generator_->Dispatch(&first_press);
1100 gfx::Point second_location(delta_distance, 1);
1101 simulated_clock_->Advance(base::TimeDelta::FromMilliseconds(10));
1102 generator_->MoveTouch(second_location);
1103 EXPECT_TRUE(IsInGestureInProgressState());
1104 EXPECT_FALSE(IsInTouchToMouseMode());
1105 const ScopedVector<ui::Event>& captured_events = GetCapturedEvents();
1106 ASSERT_EQ(0U, captured_events.size());
1107
1108 // Exit out of gesture mode once grace period is over and enter touch
1109 // exploration.
1110 AdvanceSimulatedTimePastTapDelay();
1111 ASSERT_EQ(1U, captured_events.size());
1112 EXPECT_EQ(ui::ET_MOUSE_MOVED, captured_events[0]->type());
1113 EXPECT_TRUE(IsInTouchToMouseMode());
1114 EXPECT_FALSE(IsInGestureInProgressState());
1115 }
1116
1117 // A swipe+direction gesture should trigger a Shift+Search+Direction
1118 // keyboard event.
1119 TEST_F(TouchExplorationTest, GestureSwipe) {
1120 SwitchTouchExplorationMode(true);
1121 std::vector<ui::KeyboardCode> directions;
1122 directions.push_back(ui::VKEY_RIGHT);
1123 directions.push_back(ui::VKEY_LEFT);
1124 directions.push_back(ui::VKEY_UP);
1125 directions.push_back(ui::VKEY_DOWN);
1126
1127 for (std::vector<ui::KeyboardCode>::const_iterator it = directions.begin();
1128 it != directions.end();
1129 ++it) {
1130 int x = 30;
1131 int y = 31;
1132 ui::TouchEvent origin(ui::ET_TOUCH_PRESSED, gfx::Point(x, y), 0, Now());
1133 generator_->Dispatch(&origin);
1134
1135 ui::KeyboardCode direction = *it;
1136 float delta_distance = gesture_detector_config_.touch_slop + 1;
1137 scoped_ptr<gfx::Point> swipe;
1138 switch (direction) {
1139 case ui::VKEY_RIGHT:
1140 swipe.reset(new gfx::Point(x + delta_distance, y));
1141 break;
1142 case ui::VKEY_LEFT:
1143 swipe.reset(new gfx::Point(x - delta_distance, y));
1144 break;
1145 case ui::VKEY_UP:
1146 swipe.reset(new gfx::Point(x, y - delta_distance));
1147 break;
1148 case ui::VKEY_DOWN:
1149 swipe.reset(new gfx::Point(x, y + delta_distance));
1150 break;
1151 default:
1152 return;
1153 }
1154
1155 // A swipe is made when a fling starts
1156 float delta_time =
1157 delta_distance / gesture_detector_config_.maximum_fling_velocity;
1158 simulated_clock_->Advance(base::TimeDelta::FromSecondsD(delta_time));
1159 generator_->MoveTouch(*swipe);
1160 EXPECT_TRUE(IsInGestureInProgressState());
1161 EXPECT_FALSE(IsInTouchToMouseMode());
1162 const ScopedVector<ui::Event>& captured_events = GetCapturedEvents();
1163 ASSERT_EQ(0U, captured_events.size());
1164 generator_->ReleaseTouch();
1165
1166 // The swipe registered and sent the appropriate key events.
1167 AssertDirectionalNavigationEvents(captured_events, direction);
1168 EXPECT_TRUE(IsInNoFingersDownState());
1169 EXPECT_FALSE(IsInTouchToMouseMode());
1170 EXPECT_FALSE(IsInGestureInProgressState());
1171 ClearCapturedEvents();
1172 }
1173 }
1174
992 } // namespace ui 1175 } // namespace ui
OLDNEW
« ui/chromeos/touch_exploration_controller.h ('K') | « ui/chromeos/touch_exploration_controller.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698