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

Side by Side Diff: ui/events/blink/blink_event_util_unittest.cc

Issue 2605193002: Fix mouse wheel over-scrolls when display is scaled and scroll is paginated (Closed)
Patch Set: More unittests. Created 3 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 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 "ui/events/blink/blink_event_util.h" 5 #include "ui/events/blink/blink_event_util.h"
6 6
7 #include "base/time/time.h" 7 #include "base/time/time.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 #include "third_party/WebKit/public/platform/WebGestureEvent.h" 9 #include "third_party/WebKit/public/platform/WebGestureEvent.h"
10 #include "third_party/WebKit/public/platform/WebInputEvent.h" 10 #include "third_party/WebKit/public/platform/WebInputEvent.h"
11 #include "third_party/WebKit/public/platform/WebMouseWheelEvent.h"
11 #include "ui/events/gesture_event_details.h" 12 #include "ui/events/gesture_event_details.h"
12 13
13 namespace ui { 14 namespace ui {
14 15
15 using BlinkEventUtilTest = testing::Test; 16 using BlinkEventUtilTest = testing::Test;
16 17
17 TEST(BlinkEventUtilTest, NoScalingWith1DSF) { 18 TEST(BlinkEventUtilTest, NoScalingWith1DSF) {
18 ui::GestureEventDetails details(ui::ET_GESTURE_SCROLL_UPDATE, 1, 1); 19 ui::GestureEventDetails details(ui::ET_GESTURE_SCROLL_UPDATE, 1, 1);
19 details.set_device_type(ui::GestureDeviceType::DEVICE_TOUCHSCREEN); 20 details.set_device_type(ui::GestureDeviceType::DEVICE_TOUCHSCREEN);
20 auto event = 21 auto event =
21 CreateWebGestureEvent(details, 22 CreateWebGestureEvent(details,
22 base::TimeTicks(), 23 base::TimeTicks(),
23 gfx::PointF(1.f, 1.f), 24 gfx::PointF(1.f, 1.f),
24 gfx::PointF(1.f, 1.f), 25 gfx::PointF(1.f, 1.f),
25 0, 26 0,
26 0U); 27 0U);
27 EXPECT_FALSE(ScaleWebInputEvent(event, 1.f)); 28 EXPECT_FALSE(ScaleWebInputEvent(event, 1.f));
28 EXPECT_TRUE(ScaleWebInputEvent(event, 2.f)); 29 EXPECT_TRUE(ScaleWebInputEvent(event, 2.f));
29 } 30 }
30 31
32 TEST(BlinkEventUtilTest, NonPaginatedWebMouseWheelEvent) {
33 blink::WebMouseWheelEvent event(blink::WebInputEvent::MouseWheel,
34 blink::WebInputEvent::NoModifiers,
35 blink::WebInputEvent::TimeStampForTesting);
36 event.deltaX = 1.f;
37 event.deltaY = 1.f;
38 event.wheelTicksX = 1.f;
39 event.wheelTicksY = 1.f;
40 event.scrollByPage = false;
41 std::unique_ptr<blink::WebInputEvent> webEvent =
42 ScaleWebInputEvent(event, 2.f);
43 EXPECT_TRUE(webEvent);
44 blink::WebMouseWheelEvent* mouseWheelEvent =
45 static_cast<blink::WebMouseWheelEvent*>(webEvent.get());
46 EXPECT_EQ(2.f, mouseWheelEvent->deltaX);
47 EXPECT_EQ(2.f, mouseWheelEvent->deltaY);
48 EXPECT_EQ(2.f, mouseWheelEvent->wheelTicksX);
49 EXPECT_EQ(2.f, mouseWheelEvent->wheelTicksY);
50 }
51
52 TEST(BlinkEventUtilTest, PaginatedWebMouseWheelEvent) {
53 blink::WebMouseWheelEvent event(blink::WebInputEvent::MouseWheel,
54 blink::WebInputEvent::NoModifiers,
55 blink::WebInputEvent::TimeStampForTesting);
56 event.deltaX = 1.f;
57 event.deltaY = 1.f;
58 event.wheelTicksX = 1.f;
59 event.wheelTicksY = 1.f;
60 event.scrollByPage = true;
61 std::unique_ptr<blink::WebInputEvent> webEvent =
62 ScaleWebInputEvent(event, 2.f);
63 EXPECT_TRUE(webEvent);
64 blink::WebMouseWheelEvent* mouseWheelEvent =
65 static_cast<blink::WebMouseWheelEvent*>(webEvent.get());
66 EXPECT_EQ(1.f, mouseWheelEvent->deltaX);
67 EXPECT_EQ(1.f, mouseWheelEvent->deltaY);
68 EXPECT_EQ(1.f, mouseWheelEvent->wheelTicksX);
69 EXPECT_EQ(1.f, mouseWheelEvent->wheelTicksY);
70 }
71
72 TEST(BlinkEventUtilTest, NonPaginatedScrollBeginEvent) {
73 ui::GestureEventDetails details(ui::ET_GESTURE_SCROLL_BEGIN, 1, 1);
74 details.set_device_type(ui::GestureDeviceType::DEVICE_TOUCHSCREEN);
75 auto event =
76 CreateWebGestureEvent(details, base::TimeTicks(), gfx::PointF(1.f, 1.f),
77 gfx::PointF(1.f, 1.f), 0, 0U);
78 std::unique_ptr<blink::WebInputEvent> webEvent =
79 ScaleWebInputEvent(event, 2.f);
80 EXPECT_TRUE(webEvent);
81 blink::WebGestureEvent* gestureEvent =
82 static_cast<blink::WebGestureEvent*>(webEvent.get());
83 EXPECT_EQ(2.f, gestureEvent->data.scrollBegin.deltaXHint);
84 EXPECT_EQ(2.f, gestureEvent->data.scrollBegin.deltaYHint);
85 }
86
87 TEST(BlinkEventUtilTest, PaginatedScrollBeginEvent) {
88 ui::GestureEventDetails details(ui::ET_GESTURE_SCROLL_BEGIN, 1, 1,
89 ui::GestureEventDetails::ScrollUnits::PAGE);
90 details.set_device_type(ui::GestureDeviceType::DEVICE_TOUCHSCREEN);
91 auto event =
92 CreateWebGestureEvent(details, base::TimeTicks(), gfx::PointF(1.f, 1.f),
93 gfx::PointF(1.f, 1.f), 0, 0U);
94 std::unique_ptr<blink::WebInputEvent> webEvent =
95 ScaleWebInputEvent(event, 2.f);
96 EXPECT_TRUE(webEvent);
97 blink::WebGestureEvent* gestureEvent =
98 static_cast<blink::WebGestureEvent*>(webEvent.get());
99 EXPECT_EQ(1.f, gestureEvent->data.scrollBegin.deltaXHint);
100 EXPECT_EQ(1.f, gestureEvent->data.scrollBegin.deltaYHint);
101 }
102
103 TEST(BlinkEventUtilTest, NonPaginatedScrollUpdateEvent) {
104 ui::GestureEventDetails details(ui::ET_GESTURE_SCROLL_UPDATE, 1, 1);
105 details.set_device_type(ui::GestureDeviceType::DEVICE_TOUCHSCREEN);
106 auto event =
107 CreateWebGestureEvent(details, base::TimeTicks(), gfx::PointF(1.f, 1.f),
108 gfx::PointF(1.f, 1.f), 0, 0U);
109 std::unique_ptr<blink::WebInputEvent> webEvent =
110 ScaleWebInputEvent(event, 2.f);
111 EXPECT_TRUE(webEvent);
112 blink::WebGestureEvent* gestureEvent =
113 static_cast<blink::WebGestureEvent*>(webEvent.get());
114 EXPECT_EQ(2.f, gestureEvent->data.scrollUpdate.deltaX);
115 EXPECT_EQ(2.f, gestureEvent->data.scrollUpdate.deltaY);
116 }
117
118 TEST(BlinkEventUtilTest, PaginatedScrollUpdateEvent) {
119 ui::GestureEventDetails details(ui::ET_GESTURE_SCROLL_UPDATE, 1, 1,
120 ui::GestureEventDetails::ScrollUnits::PAGE);
121 details.set_device_type(ui::GestureDeviceType::DEVICE_TOUCHSCREEN);
122 auto event =
123 CreateWebGestureEvent(details, base::TimeTicks(), gfx::PointF(1.f, 1.f),
124 gfx::PointF(1.f, 1.f), 0, 0U);
125 std::unique_ptr<blink::WebInputEvent> webEvent =
126 ScaleWebInputEvent(event, 2.f);
127 EXPECT_TRUE(webEvent);
128 blink::WebGestureEvent* gestureEvent =
129 static_cast<blink::WebGestureEvent*>(webEvent.get());
130 EXPECT_EQ(1.f, gestureEvent->data.scrollUpdate.deltaX);
131 EXPECT_EQ(1.f, gestureEvent->data.scrollUpdate.deltaY);
132 }
133
31 TEST(BlinkEventUtilTest, TouchEventCoalescing) { 134 TEST(BlinkEventUtilTest, TouchEventCoalescing) {
32 blink::WebTouchPoint touch_point; 135 blink::WebTouchPoint touch_point;
33 touch_point.id = 1; 136 touch_point.id = 1;
34 touch_point.state = blink::WebTouchPoint::StateMoved; 137 touch_point.state = blink::WebTouchPoint::StateMoved;
35 138
36 blink::WebTouchEvent coalesced_event; 139 blink::WebTouchEvent coalesced_event;
37 coalesced_event.setType(blink::WebInputEvent::TouchMove); 140 coalesced_event.setType(blink::WebInputEvent::TouchMove);
38 touch_point.movementX = 5; 141 touch_point.movementX = 5;
39 touch_point.movementY = 10; 142 touch_point.movementY = 10;
40 coalesced_event.touches[coalesced_event.touchesLength++] = touch_point; 143 coalesced_event.touches[coalesced_event.touchesLength++] = touch_point;
41 144
42 blink::WebTouchEvent event_to_be_coalesced; 145 blink::WebTouchEvent event_to_be_coalesced;
43 event_to_be_coalesced.setType(blink::WebInputEvent::TouchMove); 146 event_to_be_coalesced.setType(blink::WebInputEvent::TouchMove);
44 touch_point.movementX = 3; 147 touch_point.movementX = 3;
45 touch_point.movementY = -4; 148 touch_point.movementY = -4;
46 event_to_be_coalesced.touches[event_to_be_coalesced.touchesLength++] = 149 event_to_be_coalesced.touches[event_to_be_coalesced.touchesLength++] =
47 touch_point; 150 touch_point;
48 151
49 EXPECT_TRUE(CanCoalesce(event_to_be_coalesced, coalesced_event)); 152 EXPECT_TRUE(CanCoalesce(event_to_be_coalesced, coalesced_event));
50 Coalesce(event_to_be_coalesced, &coalesced_event); 153 Coalesce(event_to_be_coalesced, &coalesced_event);
51 EXPECT_EQ(8, coalesced_event.touches[0].movementX); 154 EXPECT_EQ(8, coalesced_event.touches[0].movementX);
52 EXPECT_EQ(6, coalesced_event.touches[0].movementY); 155 EXPECT_EQ(6, coalesced_event.touches[0].movementY);
53 } 156 }
54 157
55 } // namespace ui 158 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698