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

Side by Side Diff: content/browser/renderer_host/input/gesture_event_filter_unittest.cc

Issue 43203004: Remove GestureEventFilter and clean up related bits assuming that we turn on Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 1 month 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 <vector> 5 #include <vector>
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
11 #include "base/time/time.h" 11 #include "base/time/time.h"
12 #include "content/browser/renderer_host/input/gesture_event_filter.h" 12 #include "content/browser/renderer_host/input/base_gesture_event_filter.h"
13 #include "content/browser/renderer_host/input/mock_web_input_event_builders.h" 13 #include "content/browser/renderer_host/input/mock_web_input_event_builders.h"
14 #include "content/browser/renderer_host/input/touchpad_tap_suppression_controlle r.h"
15 #include "content/port/common/input_event_ack_state.h" 14 #include "content/port/common/input_event_ack_state.h"
16 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
17 #include "third_party/WebKit/public/web/WebInputEvent.h" 16 #include "third_party/WebKit/public/web/WebInputEvent.h"
18 17
19 using base::TimeDelta; 18 using base::TimeDelta;
20 using WebKit::WebGestureEvent; 19 using WebKit::WebGestureEvent;
21 using WebKit::WebInputEvent; 20 using WebKit::WebInputEvent;
22 21
23 namespace content { 22 namespace content {
24 23
25 class GestureEventFilterTest : public testing::Test, 24 class GestureEventFilterTest : public testing::Test,
26 public GestureEventFilterClient, 25 public GestureEventFilterClient {
27 public TouchpadTapSuppressionControllerClient {
28 public: 26 public:
29 GestureEventFilterTest() 27 GestureEventFilterTest()
30 : acked_gesture_event_count_(0), 28 : acked_gesture_event_count_(0),
31 sent_gesture_event_count_(0) {} 29 sent_gesture_event_count_(0) {}
32 30
33 virtual ~GestureEventFilterTest() {} 31 virtual ~GestureEventFilterTest() {}
34 32
35 // testing::Test 33 // testing::Test
36 virtual void SetUp() OVERRIDE { 34 virtual void SetUp() OVERRIDE {
37 filter_.reset(new GestureEventFilter(this, this)); 35 filter_.reset(new BaseGestureEventFilter(this));
38 } 36 }
39 37
40 virtual void TearDown() OVERRIDE { 38 virtual void TearDown() OVERRIDE {
41 // Process all pending tasks to avoid leaks. 39 // Process all pending tasks to avoid leaks.
42 RunUntilIdle(); 40 RunUntilIdle();
43 filter_.reset(); 41 filter_.reset();
44 } 42 }
45 43
46 // GestureEventFilterClient 44 // GestureEventFilterClient
47 virtual void SendGestureEventImmediately( 45 virtual void SendGestureEventImmediately(
48 const GestureEventWithLatencyInfo& event) OVERRIDE { 46 const GestureEventWithLatencyInfo& event) OVERRIDE {
49 ++sent_gesture_event_count_; 47 ++sent_gesture_event_count_;
50 last_immediately_sent_gesture_event_ = event.event; 48 last_immediately_sent_gesture_event_ = event.event;
51 } 49 }
52 50
53 virtual void OnGestureEventAck( 51 virtual void OnGestureEventAck(
54 const GestureEventWithLatencyInfo& event, 52 const GestureEventWithLatencyInfo& event,
55 InputEventAckState ack_result) OVERRIDE { 53 InputEventAckState ack_result) OVERRIDE {
56 ++acked_gesture_event_count_; 54 ++acked_gesture_event_count_;
57 } 55 }
58 56
59 // TouchpadTapSuppressionControllerClient
60 virtual void SendMouseEventImmediately(
61 const MouseEventWithLatencyInfo& event) OVERRIDE {
62 }
63
64 protected: 57 protected:
65 58
66 // Returns the result of |GestureEventFilter::ShouldForward()|. 59 // Returns the result of |GestureEventFilter::ShouldForward()|.
67 bool SimulateGestureEvent(const WebGestureEvent& gesture) { 60 bool SimulateGestureEvent(const WebGestureEvent& gesture) {
68 GestureEventWithLatencyInfo gesture_with_latency(gesture, 61 GestureEventWithLatencyInfo gesture_with_latency(gesture,
69 ui::LatencyInfo()); 62 ui::LatencyInfo());
70 if (filter()->ShouldForward(gesture_with_latency)) { 63 if (filter()->ShouldForward(gesture_with_latency)) {
71 ++sent_gesture_event_count_; 64 ++sent_gesture_event_count_;
72 return true; 65 return true;
73 } 66 }
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 } 145 }
153 146
154 WebGestureEvent GestureEventQueueEventAt(int i) { 147 WebGestureEvent GestureEventQueueEventAt(int i) {
155 return filter()->coalesced_gesture_events_.at(i).event; 148 return filter()->coalesced_gesture_events_.at(i).event;
156 } 149 }
157 150
158 bool ScrollingInProgress() { 151 bool ScrollingInProgress() {
159 return filter()->scrolling_in_progress_; 152 return filter()->scrolling_in_progress_;
160 } 153 }
161 154
162 bool FlingInProgress() {
163 return filter()->fling_in_progress_;
164 }
165
166 bool WillIgnoreNextACK() { 155 bool WillIgnoreNextACK() {
167 return filter()->ignore_next_ack_; 156 return filter()->ignore_next_ack_;
168 } 157 }
169 158
170 GestureEventFilter* filter() const { 159 BaseGestureEventFilter* filter() const {
171 return filter_.get(); 160 return filter_.get();
172 } 161 }
173 162
174 private: 163 private:
175 scoped_ptr<GestureEventFilter> filter_; 164 scoped_ptr<BaseGestureEventFilter> filter_;
176 size_t acked_gesture_event_count_; 165 size_t acked_gesture_event_count_;
177 size_t sent_gesture_event_count_; 166 size_t sent_gesture_event_count_;
178 WebGestureEvent last_immediately_sent_gesture_event_; 167 WebGestureEvent last_immediately_sent_gesture_event_;
179 base::MessageLoopForUI message_loop_; 168 base::MessageLoopForUI message_loop_;
180 }; 169 };
181 170
182 #if GTEST_HAS_PARAM_TEST 171 #if GTEST_HAS_PARAM_TEST
183 // This is for tests that are to be run for all source devices. 172 // This is for tests that are to be run for all source devices.
184 class GestureEventFilterWithSourceTest 173 class GestureEventFilterWithSourceTest
185 : public GestureEventFilterTest, 174 : public GestureEventFilterTest,
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 456
468 // Check that the queue is empty after ACK and no events get sent. 457 // Check that the queue is empty after ACK and no events get sent.
469 SendInputEventACK(WebInputEvent::GestureScrollUpdate, 458 SendInputEventACK(WebInputEvent::GestureScrollUpdate,
470 INPUT_EVENT_ACK_STATE_CONSUMED); 459 INPUT_EVENT_ACK_STATE_CONSUMED);
471 RunUntilIdle(); 460 RunUntilIdle();
472 EXPECT_EQ(0U, GetAndResetSentGestureEventCount()); 461 EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
473 EXPECT_EQ(0U, GestureEventLastQueueEventSize()); 462 EXPECT_EQ(0U, GestureEventLastQueueEventSize());
474 } 463 }
475 464
476 #if GTEST_HAS_PARAM_TEST 465 #if GTEST_HAS_PARAM_TEST
477 TEST_P(GestureEventFilterWithSourceTest, GestureFlingCancelsFiltered) {
478 WebGestureEvent::SourceDevice source_device = GetParam();
479
480 // Turn off debounce handling for test isolation.
481 set_debounce_interval_time_ms(0);
482 // GFC without previous GFS is dropped.
483 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device);
484 EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
485 EXPECT_EQ(0U, GestureEventLastQueueEventSize());
486
487 // GFC after previous GFS is dispatched and acked.
488 SimulateGestureFlingStartEvent(0, -10, source_device);
489 EXPECT_TRUE(FlingInProgress());
490 SendInputEventACK(WebInputEvent::GestureFlingStart,
491 INPUT_EVENT_ACK_STATE_CONSUMED);
492 RunUntilIdle();
493 EXPECT_EQ(1U, GetAndResetAckedGestureEventCount());
494 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device);
495 EXPECT_FALSE(FlingInProgress());
496 EXPECT_EQ(2U, GetAndResetSentGestureEventCount());
497 SendInputEventACK(WebInputEvent::GestureFlingCancel,
498 INPUT_EVENT_ACK_STATE_CONSUMED);
499 RunUntilIdle();
500 EXPECT_EQ(1U, GetAndResetAckedGestureEventCount());
501 EXPECT_EQ(0U, GestureEventLastQueueEventSize());
502
503 // GFC before previous GFS is acked.
504 SimulateGestureFlingStartEvent(0, -10, source_device);
505 EXPECT_TRUE(FlingInProgress());
506 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device);
507 EXPECT_FALSE(FlingInProgress());
508 EXPECT_EQ(1U, GetAndResetSentGestureEventCount());
509 EXPECT_EQ(2U, GestureEventLastQueueEventSize());
510
511 // Advance state realistically.
512 SendInputEventACK(WebInputEvent::GestureFlingStart,
513 INPUT_EVENT_ACK_STATE_CONSUMED);
514 RunUntilIdle();
515 EXPECT_EQ(1U, GetAndResetSentGestureEventCount());
516 SendInputEventACK(WebInputEvent::GestureFlingCancel,
517 INPUT_EVENT_ACK_STATE_CONSUMED);
518 RunUntilIdle();
519 EXPECT_EQ(2U, GetAndResetAckedGestureEventCount());
520 EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
521 EXPECT_EQ(0U, GestureEventLastQueueEventSize());
522
523 // GFS is added to the queue if another event is pending
524 SimulateGestureScrollUpdateEvent(8, -7, 0);
525 SimulateGestureFlingStartEvent(0, -10, source_device);
526 EXPECT_EQ(2U, GestureEventLastQueueEventSize());
527 EXPECT_EQ(1U, GetAndResetSentGestureEventCount());
528 WebGestureEvent merged_event = GestureEventLastQueueEvent();
529 EXPECT_EQ(WebInputEvent::GestureFlingStart, merged_event.type);
530 EXPECT_TRUE(FlingInProgress());
531 EXPECT_EQ(2U, GestureEventLastQueueEventSize());
532
533 // GFS in queue means that a GFC is added to the queue
534 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device);
535 merged_event =GestureEventLastQueueEvent();
536 EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type);
537 EXPECT_FALSE(FlingInProgress());
538 EXPECT_EQ(3U, GestureEventLastQueueEventSize());
539
540 // Adding a second GFC is dropped.
541 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device);
542 EXPECT_FALSE(FlingInProgress());
543 EXPECT_EQ(3U, GestureEventLastQueueEventSize());
544
545 // Adding another GFS will add it to the queue.
546 SimulateGestureFlingStartEvent(0, -10, source_device);
547 merged_event = GestureEventLastQueueEvent();
548 EXPECT_EQ(WebInputEvent::GestureFlingStart, merged_event.type);
549 EXPECT_TRUE(FlingInProgress());
550 EXPECT_EQ(4U, GestureEventLastQueueEventSize());
551
552 // GFS in queue means that a GFC is added to the queue
553 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device);
554 merged_event = GestureEventLastQueueEvent();
555 EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type);
556 EXPECT_FALSE(FlingInProgress());
557 EXPECT_EQ(5U, GestureEventLastQueueEventSize());
558
559 // Adding another GFC with a GFC already there is dropped.
560 SimulateGestureEvent(WebInputEvent::GestureFlingCancel, source_device);
561 merged_event = GestureEventLastQueueEvent();
562 EXPECT_EQ(WebInputEvent::GestureFlingCancel, merged_event.type);
563 EXPECT_FALSE(FlingInProgress());
564 EXPECT_EQ(5U, GestureEventLastQueueEventSize());
565 }
566
567 INSTANTIATE_TEST_CASE_P(AllSources, 466 INSTANTIATE_TEST_CASE_P(AllSources,
568 GestureEventFilterWithSourceTest, 467 GestureEventFilterWithSourceTest,
569 testing::Values(WebGestureEvent::Touchscreen, 468 testing::Values(WebGestureEvent::Touchscreen,
570 WebGestureEvent::Touchpad)); 469 WebGestureEvent::Touchpad));
571 #endif // GTEST_HAS_PARAM_TEST 470 #endif // GTEST_HAS_PARAM_TEST
572 471
573 // Test that GestureShowPress events don't wait for ACKs. 472 // Test that GestureShowPress events don't wait for ACKs.
574 TEST_F(GestureEventFilterTest, GestureShowPressIsAsync) { 473 TEST_F(GestureEventFilterTest, GestureShowPressIsAsync) {
575 SimulateGestureEvent(WebInputEvent::GestureShowPress, 474 SimulateGestureEvent(WebInputEvent::GestureShowPress,
576 WebGestureEvent::Touchscreen); 475 WebGestureEvent::Touchscreen);
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
721 WebInputEvent::GestureScrollUpdate, 620 WebInputEvent::GestureScrollUpdate,
722 WebInputEvent::GestureScrollUpdate}; 621 WebInputEvent::GestureScrollUpdate};
723 622
724 for (unsigned i = 0; i < sizeof(expected) / sizeof(WebInputEvent::Type); 623 for (unsigned i = 0; i < sizeof(expected) / sizeof(WebInputEvent::Type);
725 i++) { 624 i++) {
726 WebGestureEvent merged_event = GestureEventQueueEventAt(i); 625 WebGestureEvent merged_event = GestureEventQueueEventAt(i);
727 EXPECT_EQ(expected[i], merged_event.type); 626 EXPECT_EQ(expected[i], merged_event.type);
728 } 627 }
729 } 628 }
730 629
731 TEST_F(GestureEventFilterTest, DropZeroVelocityFlings) {
732 WebGestureEvent gesture_event;
733 gesture_event.type = WebInputEvent::GestureFlingStart;
734 gesture_event.sourceDevice = WebGestureEvent::Touchpad;
735 gesture_event.data.flingStart.velocityX = 0.f;
736 gesture_event.data.flingStart.velocityY = 0.f;
737 ASSERT_EQ(0U, GetAndResetSentGestureEventCount());
738 ASSERT_EQ(0U, GestureEventLastQueueEventSize());
739 EXPECT_FALSE(SimulateGestureEvent(gesture_event));
740 EXPECT_EQ(0U, GetAndResetSentGestureEventCount());
741 EXPECT_EQ(0U, GestureEventLastQueueEventSize());
742 }
743
744 } // namespace content 630 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698