| 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 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 EXPECT_FALSE(main_task_runner_->HasPendingTask()); | 147 EXPECT_FALSE(main_task_runner_->HasPendingTask()); |
| 148 EXPECT_EQ(0u, event_queue().size()); | 148 EXPECT_EQ(0u, event_queue().size()); |
| 149 EXPECT_EQ(3u, handled_events_.size()); | 149 EXPECT_EQ(3u, handled_events_.size()); |
| 150 | 150 |
| 151 EXPECT_EQ(kEvents[0].size, handled_events_.at(0)->size); | 151 EXPECT_EQ(kEvents[0].size, handled_events_.at(0)->size); |
| 152 EXPECT_EQ(kEvents[0].type, handled_events_.at(0)->type); | 152 EXPECT_EQ(kEvents[0].type, handled_events_.at(0)->type); |
| 153 const WebTouchEvent* last_touch_event = | 153 const WebTouchEvent* last_touch_event = |
| 154 static_cast<const WebTouchEvent*>(handled_events_.at(0).get()); | 154 static_cast<const WebTouchEvent*>(handled_events_.at(0).get()); |
| 155 kEvents[0].dispatchType = | 155 kEvents[0].dispatchType = |
| 156 WebInputEvent::DispatchType::ListenersNonBlockingPassive; | 156 WebInputEvent::DispatchType::ListenersNonBlockingPassive; |
| 157 kEvents[0].touchStartOrFirstTouchMove = true; |
| 157 EXPECT_EQ(kEvents[0], *last_touch_event); | 158 EXPECT_EQ(kEvents[0], *last_touch_event); |
| 158 | 159 |
| 159 EXPECT_EQ(kEvents[1].size, handled_events_.at(1)->size); | 160 EXPECT_EQ(kEvents[1].size, handled_events_.at(1)->size); |
| 160 EXPECT_EQ(kEvents[1].type, handled_events_.at(1)->type); | 161 EXPECT_EQ(kEvents[1].type, handled_events_.at(1)->type); |
| 161 last_touch_event = | 162 last_touch_event = |
| 162 static_cast<const WebTouchEvent*>(handled_events_.at(1).get()); | 163 static_cast<const WebTouchEvent*>(handled_events_.at(1).get()); |
| 163 kEvents[1].dispatchType = | 164 kEvents[1].dispatchType = |
| 164 WebInputEvent::DispatchType::ListenersNonBlockingPassive; | 165 WebInputEvent::DispatchType::ListenersNonBlockingPassive; |
| 166 kEvents[1].touchStartOrFirstTouchMove = true; |
| 165 EXPECT_EQ(kEvents[1], *last_touch_event); | 167 EXPECT_EQ(kEvents[1], *last_touch_event); |
| 166 | 168 |
| 167 EXPECT_EQ(kEvents[2].size, handled_events_.at(1)->size); | 169 EXPECT_EQ(kEvents[2].size, handled_events_.at(1)->size); |
| 168 EXPECT_EQ(kEvents[2].type, handled_events_.at(2)->type); | 170 EXPECT_EQ(kEvents[2].type, handled_events_.at(2)->type); |
| 169 last_touch_event = | 171 last_touch_event = |
| 170 static_cast<const WebTouchEvent*>(handled_events_.at(2).get()); | 172 static_cast<const WebTouchEvent*>(handled_events_.at(2).get()); |
| 171 WebTouchEvent coalesced_event = kEvents[2]; | 173 WebTouchEvent coalesced_event = kEvents[2]; |
| 172 internal::Coalesce(kEvents[3], &coalesced_event); | 174 internal::Coalesce(kEvents[3], &coalesced_event); |
| 173 coalesced_event.dispatchType = | 175 coalesced_event.dispatchType = |
| 174 WebInputEvent::DispatchType::ListenersNonBlockingPassive; | 176 WebInputEvent::DispatchType::ListenersNonBlockingPassive; |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 246 WebInputEvent::DispatchType::ListenersNonBlockingPassive; | 248 WebInputEvent::DispatchType::ListenersNonBlockingPassive; |
| 247 EXPECT_EQ(coalesced_event, *last_wheel_event); | 249 EXPECT_EQ(coalesced_event, *last_wheel_event); |
| 248 } | 250 } |
| 249 { | 251 { |
| 250 EXPECT_EQ(kTouchEvents[0].size, handled_events_.at(1)->size); | 252 EXPECT_EQ(kTouchEvents[0].size, handled_events_.at(1)->size); |
| 251 EXPECT_EQ(kTouchEvents[0].type, handled_events_.at(1)->type); | 253 EXPECT_EQ(kTouchEvents[0].type, handled_events_.at(1)->type); |
| 252 const WebTouchEvent* last_touch_event = | 254 const WebTouchEvent* last_touch_event = |
| 253 static_cast<const WebTouchEvent*>(handled_events_.at(1).get()); | 255 static_cast<const WebTouchEvent*>(handled_events_.at(1).get()); |
| 254 WebTouchEvent coalesced_event = kTouchEvents[0]; | 256 WebTouchEvent coalesced_event = kTouchEvents[0]; |
| 255 internal::Coalesce(kTouchEvents[1], &coalesced_event); | 257 internal::Coalesce(kTouchEvents[1], &coalesced_event); |
| 256 coalesced_event.dispatchType = | 258 coalesced_event.dispatchType = WebInputEvent::ListenersNonBlockingPassive; |
| 257 WebInputEvent::DispatchType::ListenersNonBlockingPassive; | |
| 258 EXPECT_EQ(coalesced_event, *last_touch_event); | 259 EXPECT_EQ(coalesced_event, *last_touch_event); |
| 259 } | 260 } |
| 260 } | 261 } |
| 261 | 262 |
| 263 TEST_F(MainThreadEventQueueTest, BlockingTouchesDuringFling) { |
| 264 SyntheticWebTouchEvent kEvents[1]; |
| 265 kEvents[0].PressPoint(10, 10); |
| 266 queue_->set_is_flinging(true); |
| 267 |
| 268 EXPECT_FALSE(main_task_runner_->HasPendingTask()); |
| 269 EXPECT_EQ(0u, event_queue().size()); |
| 270 queue_->HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, |
| 271 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 272 EXPECT_EQ(1u, event_queue().size()); |
| 273 EXPECT_TRUE(main_task_runner_->HasPendingTask()); |
| 274 main_task_runner_->RunUntilIdle(); |
| 275 EXPECT_FALSE(main_task_runner_->HasPendingTask()); |
| 276 EXPECT_EQ(0u, event_queue().size()); |
| 277 EXPECT_EQ(1u, handled_events_.size()); |
| 278 EXPECT_EQ(kEvents[0].size, handled_events_.at(0)->size); |
| 279 EXPECT_EQ(kEvents[0].type, handled_events_.at(0)->type); |
| 280 const WebTouchEvent* last_touch_event = |
| 281 static_cast<const WebTouchEvent*>(handled_events_.at(0).get()); |
| 282 kEvents[0].dispatchedDuringFling = true; |
| 283 kEvents[0].touchStartOrFirstTouchMove = true; |
| 284 kEvents[0].dispatchType = |
| 285 WebInputEvent::ListenersForcedNonBlockingPassiveDueToFling; |
| 286 EXPECT_EQ(kEvents[0], *last_touch_event); |
| 287 |
| 288 kEvents[0].MovePoint(0, 30, 30); |
| 289 queue_->HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, |
| 290 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 291 EXPECT_EQ(1u, event_queue().size()); |
| 292 EXPECT_TRUE(main_task_runner_->HasPendingTask()); |
| 293 main_task_runner_->RunUntilIdle(); |
| 294 EXPECT_FALSE(main_task_runner_->HasPendingTask()); |
| 295 EXPECT_EQ(0u, event_queue().size()); |
| 296 EXPECT_EQ(2u, handled_events_.size()); |
| 297 EXPECT_EQ(kEvents[0].size, handled_events_.at(1)->size); |
| 298 EXPECT_EQ(kEvents[0].type, handled_events_.at(1)->type); |
| 299 last_touch_event = |
| 300 static_cast<const WebTouchEvent*>(handled_events_.at(1).get()); |
| 301 kEvents[0].dispatchedDuringFling = true; |
| 302 kEvents[0].touchStartOrFirstTouchMove = true; |
| 303 kEvents[0].dispatchType = |
| 304 WebInputEvent::ListenersForcedNonBlockingPassiveDueToFling; |
| 305 EXPECT_EQ(kEvents[0], *last_touch_event); |
| 306 |
| 307 kEvents[0].MovePoint(0, 50, 50); |
| 308 queue_->HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, |
| 309 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 310 EXPECT_EQ(1u, event_queue().size()); |
| 311 EXPECT_TRUE(main_task_runner_->HasPendingTask()); |
| 312 main_task_runner_->RunUntilIdle(); |
| 313 EXPECT_FALSE(main_task_runner_->HasPendingTask()); |
| 314 EXPECT_EQ(0u, event_queue().size()); |
| 315 EXPECT_EQ(3u, handled_events_.size()); |
| 316 EXPECT_EQ(kEvents[0].size, handled_events_.at(2)->size); |
| 317 EXPECT_EQ(kEvents[0].type, handled_events_.at(2)->type); |
| 318 EXPECT_TRUE(kEvents[0].dispatchedDuringFling); |
| 319 EXPECT_EQ(kEvents[0].dispatchType, WebInputEvent::Blocking); |
| 320 last_touch_event = |
| 321 static_cast<const WebTouchEvent*>(handled_events_.at(2).get()); |
| 322 kEvents[0].touchStartOrFirstTouchMove = false; |
| 323 EXPECT_EQ(kEvents[0], *last_touch_event); |
| 324 |
| 325 kEvents[0].ReleasePoint(0); |
| 326 queue_->HandleEvent(&kEvents[0], ui::LatencyInfo(), DISPATCH_TYPE_BLOCKING, |
| 327 INPUT_EVENT_ACK_STATE_NOT_CONSUMED); |
| 328 EXPECT_EQ(1u, event_queue().size()); |
| 329 EXPECT_TRUE(main_task_runner_->HasPendingTask()); |
| 330 main_task_runner_->RunUntilIdle(); |
| 331 EXPECT_FALSE(main_task_runner_->HasPendingTask()); |
| 332 EXPECT_EQ(0u, event_queue().size()); |
| 333 EXPECT_EQ(4u, handled_events_.size()); |
| 334 EXPECT_EQ(kEvents[0].size, handled_events_.at(3)->size); |
| 335 EXPECT_EQ(kEvents[0].type, handled_events_.at(3)->type); |
| 336 EXPECT_TRUE(kEvents[0].dispatchedDuringFling); |
| 337 EXPECT_EQ(kEvents[0].dispatchType, WebInputEvent::Blocking); |
| 338 last_touch_event = |
| 339 static_cast<const WebTouchEvent*>(handled_events_.at(3).get()); |
| 340 kEvents[0].touchStartOrFirstTouchMove = false; |
| 341 EXPECT_EQ(kEvents[0], *last_touch_event); |
| 342 } |
| 343 |
| 262 } // namespace content | 344 } // namespace content |
| OLD | NEW |