OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <stddef.h> | 5 #include <stddef.h> |
6 | 6 |
7 #include <new> | 7 #include <new> |
8 #include <utility> | 8 #include <utility> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
234 WebInputEvent::DispatchType::ListenersNonBlockingPassive; | 234 WebInputEvent::DispatchType::ListenersNonBlockingPassive; |
235 EXPECT_EQ(coalesced_event, *last_wheel_event); | 235 EXPECT_EQ(coalesced_event, *last_wheel_event); |
236 } | 236 } |
237 { | 237 { |
238 EXPECT_EQ(kTouchEvents[0].size, handled_events_.at(1)->size); | 238 EXPECT_EQ(kTouchEvents[0].size, handled_events_.at(1)->size); |
239 EXPECT_EQ(kTouchEvents[0].type, handled_events_.at(1)->type); | 239 EXPECT_EQ(kTouchEvents[0].type, handled_events_.at(1)->type); |
240 const WebTouchEvent* last_touch_event = | 240 const WebTouchEvent* last_touch_event = |
241 static_cast<const WebTouchEvent*>(handled_events_.at(1).get()); | 241 static_cast<const WebTouchEvent*>(handled_events_.at(1).get()); |
242 WebTouchEvent coalesced_event = kTouchEvents[0]; | 242 WebTouchEvent coalesced_event = kTouchEvents[0]; |
243 internal::Coalesce(kTouchEvents[1], &coalesced_event); | 243 internal::Coalesce(kTouchEvents[1], &coalesced_event); |
244 coalesced_event.dispatchType = | 244 coalesced_event.dispatchType = WebInputEvent::ListenersNonBlockingPassive; |
245 WebInputEvent::DispatchType::ListenersNonBlockingPassive; | |
246 EXPECT_EQ(coalesced_event, *last_touch_event); | 245 EXPECT_EQ(coalesced_event, *last_touch_event); |
247 } | 246 } |
248 } | 247 } |
249 | 248 |
| 249 TEST_F(MainThreadEventQueueTest, BlockingTouchesDuringFling) { |
| 250 SyntheticWebTouchEvent kEvents[1]; |
| 251 kEvents[0].PressPoint(10, 10); |
| 252 kEvents[0].touchStartOrFirstTouchMove = true; |
| 253 queue_->set_is_flinging(true); |
| 254 |
| 255 EXPECT_FALSE(main_task_runner_->HasPendingTask()); |
| 256 EXPECT_EQ(0u, event_queue().size()); |
| 257 HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 258 EXPECT_EQ(1u, event_queue().size()); |
| 259 EXPECT_TRUE(main_task_runner_->HasPendingTask()); |
| 260 main_task_runner_->RunUntilIdle(); |
| 261 EXPECT_FALSE(main_task_runner_->HasPendingTask()); |
| 262 EXPECT_EQ(0u, event_queue().size()); |
| 263 EXPECT_EQ(1u, handled_events_.size()); |
| 264 EXPECT_EQ(kEvents[0].size, handled_events_.at(0)->size); |
| 265 EXPECT_EQ(kEvents[0].type, handled_events_.at(0)->type); |
| 266 const WebTouchEvent* last_touch_event = |
| 267 static_cast<const WebTouchEvent*>(handled_events_.at(0).get()); |
| 268 kEvents[0].dispatchedDuringFling = true; |
| 269 kEvents[0].dispatchType = |
| 270 WebInputEvent::ListenersForcedNonBlockingPassiveDueToFling; |
| 271 EXPECT_EQ(kEvents[0], *last_touch_event); |
| 272 |
| 273 kEvents[0].MovePoint(0, 30, 30); |
| 274 HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 275 EXPECT_EQ(1u, event_queue().size()); |
| 276 EXPECT_TRUE(main_task_runner_->HasPendingTask()); |
| 277 main_task_runner_->RunUntilIdle(); |
| 278 EXPECT_FALSE(main_task_runner_->HasPendingTask()); |
| 279 EXPECT_EQ(0u, event_queue().size()); |
| 280 EXPECT_EQ(2u, handled_events_.size()); |
| 281 EXPECT_EQ(kEvents[0].size, handled_events_.at(1)->size); |
| 282 EXPECT_EQ(kEvents[0].type, handled_events_.at(1)->type); |
| 283 last_touch_event = |
| 284 static_cast<const WebTouchEvent*>(handled_events_.at(1).get()); |
| 285 kEvents[0].dispatchedDuringFling = true; |
| 286 kEvents[0].dispatchType = |
| 287 WebInputEvent::ListenersForcedNonBlockingPassiveDueToFling; |
| 288 EXPECT_EQ(kEvents[0], *last_touch_event); |
| 289 |
| 290 kEvents[0].MovePoint(0, 50, 50); |
| 291 kEvents[0].touchStartOrFirstTouchMove = false; |
| 292 HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 293 EXPECT_EQ(1u, event_queue().size()); |
| 294 EXPECT_TRUE(main_task_runner_->HasPendingTask()); |
| 295 main_task_runner_->RunUntilIdle(); |
| 296 EXPECT_FALSE(main_task_runner_->HasPendingTask()); |
| 297 EXPECT_EQ(0u, event_queue().size()); |
| 298 EXPECT_EQ(3u, handled_events_.size()); |
| 299 EXPECT_EQ(kEvents[0].size, handled_events_.at(2)->size); |
| 300 EXPECT_EQ(kEvents[0].type, handled_events_.at(2)->type); |
| 301 EXPECT_TRUE(kEvents[0].dispatchedDuringFling); |
| 302 EXPECT_EQ(kEvents[0].dispatchType, WebInputEvent::Blocking); |
| 303 last_touch_event = |
| 304 static_cast<const WebTouchEvent*>(handled_events_.at(2).get()); |
| 305 EXPECT_EQ(kEvents[0], *last_touch_event); |
| 306 |
| 307 kEvents[0].ReleasePoint(0); |
| 308 HandleEvent(kEvents[0], INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 309 EXPECT_EQ(1u, event_queue().size()); |
| 310 EXPECT_TRUE(main_task_runner_->HasPendingTask()); |
| 311 main_task_runner_->RunUntilIdle(); |
| 312 EXPECT_FALSE(main_task_runner_->HasPendingTask()); |
| 313 EXPECT_EQ(0u, event_queue().size()); |
| 314 EXPECT_EQ(4u, handled_events_.size()); |
| 315 EXPECT_EQ(kEvents[0].size, handled_events_.at(3)->size); |
| 316 EXPECT_EQ(kEvents[0].type, handled_events_.at(3)->type); |
| 317 EXPECT_TRUE(kEvents[0].dispatchedDuringFling); |
| 318 EXPECT_EQ(kEvents[0].dispatchType, WebInputEvent::Blocking); |
| 319 last_touch_event = |
| 320 static_cast<const WebTouchEvent*>(handled_events_.at(3).get()); |
| 321 EXPECT_EQ(kEvents[0], *last_touch_event); |
| 322 } |
| 323 |
250 } // namespace content | 324 } // namespace content |
OLD | NEW |