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

Side by Side Diff: ui/aura/gestures/gesture_recognizer_unittest.cc

Issue 503883004: Don't pass touches to gesture recognizer for async acks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 5 years, 10 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "base/command_line.h" 5 #include "base/command_line.h"
6 #include "base/memory/scoped_vector.h" 6 #include "base/memory/scoped_vector.h"
7 #include "base/run_loop.h" 7 #include "base/run_loop.h"
8 #include "base/strings/string_number_conversions.h" 8 #include "base/strings/string_number_conversions.h"
9 #include "base/timer/timer.h" 9 #include "base/timer/timer.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 ui::EventType wait_until_event_; 330 ui::EventType wait_until_event_;
331 331
332 DISALLOW_COPY_AND_ASSIGN(GestureEventConsumeDelegate); 332 DISALLOW_COPY_AND_ASSIGN(GestureEventConsumeDelegate);
333 }; 333 };
334 334
335 class QueueTouchEventDelegate : public GestureEventConsumeDelegate { 335 class QueueTouchEventDelegate : public GestureEventConsumeDelegate {
336 public: 336 public:
337 explicit QueueTouchEventDelegate(WindowEventDispatcher* dispatcher) 337 explicit QueueTouchEventDelegate(WindowEventDispatcher* dispatcher)
338 : window_(NULL), 338 : window_(NULL),
339 dispatcher_(dispatcher), 339 dispatcher_(dispatcher),
340 queue_events_(true), 340 synchronous_ack_for_next_event_(AckState::PENDING) {}
341 synchronous_ack_for_next_event_(AckState::PENDING) { 341
342 } 342 ~QueueTouchEventDelegate() override {}
343 ~QueueTouchEventDelegate() override {
344 while(!queue_.empty()) {
345 delete queue_.front();
346 queue_.pop();
347 }
348 }
349 343
350 void OnTouchEvent(ui::TouchEvent* event) override { 344 void OnTouchEvent(ui::TouchEvent* event) override {
351 event->DisableSynchronousHandling(); 345 event->DisableSynchronousHandling();
352 if (synchronous_ack_for_next_event_ != AckState::PENDING) { 346 if (synchronous_ack_for_next_event_ != AckState::PENDING) {
353 ui::GestureRecognizer::Get()->AckSyncTouchEvent( 347 ui::GestureRecognizer::Get()->AckSyncTouchEvent(
354 event->unique_event_id(), 348 event->unique_event_id(),
355 synchronous_ack_for_next_event_ == AckState::CONSUMED 349 synchronous_ack_for_next_event_ == AckState::CONSUMED
356 ? ui::ER_CONSUMED 350 ? ui::ER_CONSUMED
357 : ui::ER_UNHANDLED, 351 : ui::ER_UNHANDLED,
358 window_); 352 window_);
359 synchronous_ack_for_next_event_ = AckState::PENDING; 353 synchronous_ack_for_next_event_ = AckState::PENDING;
360 } 354 }
361 if (queue_events_)
362 queue_.push(new ui::TouchEvent(*event, window_, window_));
363 } 355 }
364 356
365 void ReceivedAck() { 357 void ReceivedAck() {
366 ReceivedAckImpl(false); 358 ReceivedAckImpl(false);
367 } 359 }
368 360
369 void ReceivedAckPreventDefaulted() { 361 void ReceivedAckPreventDefaulted() {
370 ReceivedAckImpl(true); 362 ReceivedAckImpl(true);
371 } 363 }
372 364
373 void set_window(Window* w) { window_ = w; } 365 void set_window(Window* w) { window_ = w; }
374 void set_queue_events(bool queue) { queue_events_ = queue; }
375 void set_synchronous_ack_for_next_event(bool consumed) { 366 void set_synchronous_ack_for_next_event(bool consumed) {
376 DCHECK(synchronous_ack_for_next_event_ == AckState::PENDING); 367 DCHECK(synchronous_ack_for_next_event_ == AckState::PENDING);
377 synchronous_ack_for_next_event_ = 368 synchronous_ack_for_next_event_ =
378 consumed ? AckState::CONSUMED : AckState::UNCONSUMED; 369 consumed ? AckState::CONSUMED : AckState::UNCONSUMED;
379 } 370 }
380 371
381 private: 372 private:
382 enum class AckState { 373 enum class AckState {
383 PENDING, 374 PENDING,
384 CONSUMED, 375 CONSUMED,
385 UNCONSUMED, 376 UNCONSUMED,
386 }; 377 };
387 378
388 void ReceivedAckImpl(bool prevent_defaulted) { 379 void ReceivedAckImpl(bool prevent_defaulted) {
389 scoped_ptr<ui::TouchEvent> event(queue_.front()); 380 dispatcher_->ProcessedTouchEvent(
390 dispatcher_->ProcessedTouchEvent(event.get(), window_, 381 window_, prevent_defaulted ? ui::ER_HANDLED : ui::ER_UNHANDLED);
391 prevent_defaulted ? ui::ER_HANDLED : ui::ER_UNHANDLED);
392 queue_.pop();
393 } 382 }
394 383
395 std::queue<ui::TouchEvent*> queue_;
396 Window* window_; 384 Window* window_;
397 WindowEventDispatcher* dispatcher_; 385 WindowEventDispatcher* dispatcher_;
398 bool queue_events_;
399 AckState synchronous_ack_for_next_event_; 386 AckState synchronous_ack_for_next_event_;
400 387
401 DISALLOW_COPY_AND_ASSIGN(QueueTouchEventDelegate); 388 DISALLOW_COPY_AND_ASSIGN(QueueTouchEventDelegate);
402 }; 389 };
403 390
404 // A delegate that ignores gesture events but keeps track of [synthetic] mouse 391 // A delegate that ignores gesture events but keeps track of [synthetic] mouse
405 // events. 392 // events.
406 class GestureEventSynthDelegate : public TestWindowDelegate { 393 class GestureEventSynthDelegate : public TestWindowDelegate {
407 public: 394 public:
408 GestureEventSynthDelegate() 395 GestureEventSynthDelegate()
(...skipping 4020 matching lines...) Expand 10 before | Expand all | Expand 10 after
4429 // The synchronous ack is stuck behind the pending touch move. 4416 // The synchronous ack is stuck behind the pending touch move.
4430 EXPECT_0_EVENTS(delegate->events()); 4417 EXPECT_0_EVENTS(delegate->events());
4431 4418
4432 delegate->ReceivedAck(); 4419 delegate->ReceivedAck();
4433 EXPECT_2_EVENTS(delegate->events(), ui::ET_GESTURE_SCROLL_UPDATE, 4420 EXPECT_2_EVENTS(delegate->events(), ui::ET_GESTURE_SCROLL_UPDATE,
4434 ui::ET_GESTURE_SCROLL_UPDATE); 4421 ui::ET_GESTURE_SCROLL_UPDATE);
4435 } 4422 }
4436 4423
4437 } // namespace test 4424 } // namespace test
4438 } // namespace aura 4425 } // namespace aura
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698