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

Side by Side Diff: content/common/input/input_param_traits_unittest.cc

Issue 19624005: Add InputEvent and EventPacket types for batched input delivery (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Cleanup Created 7 years, 3 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
(Empty)
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/common/input/input_param_traits.h"
6
7 #include "content/common/input/event_packet.h"
8 #include "content/common/input/generic_input_event.h"
9 #include "content/common/input/input_event.h"
10 #include "content/common/input_messages.h"
11 #include "ipc/ipc_message.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13 #include "third_party/WebKit/public/web/WebInputEvent.h"
14
15 namespace content {
16 namespace {
17
18 class InputParamTraitsTest : public testing::Test {
19 protected:
20 void Compare(const WebPlatformInputEvent* a, const WebPlatformInputEvent* b) {
21 EXPECT_EQ(!!a->event, !!b->event);
22 if (a->event && b->event) {
23 ASSERT_EQ(a->event->size, b->event->size);
24 EXPECT_EQ(0, memcmp(a->event.get(), b->event.get(), a->event->size));
25 }
26 EXPECT_EQ(a->latency_info.latency_components.size(),
27 b->latency_info.latency_components.size());
28 EXPECT_EQ(a->is_keyboard_shortcut, b->is_keyboard_shortcut);
29 }
30
31 void Compare(const GenericInputEvent* a, const GenericInputEvent* b) {
32 EXPECT_EQ(!!a->message, !!b->message);
33 if (a->message && b->message) {
34 EXPECT_EQ(a->message->type(), b->message->type());
35 EXPECT_EQ(a->message->routing_id(), b->message->routing_id());
36 }
37 }
38
39 void Compare(const InputEvent* a, const InputEvent* b) {
40 ASSERT_EQ(a->type, b->type);
41 EXPECT_EQ(a->ack_type, b->ack_type);
42 EXPECT_EQ(a->id, b->id);
43 switch (a->type) {
44 case InputEvent::GENERIC:
45 Compare(GenericInputEvent::EventCast(a),
46 GenericInputEvent::EventCast(b));
47 break;
48 case InputEvent::WEB_PLATFORM:
49 Compare(WebPlatformInputEvent::EventCast(a),
50 WebPlatformInputEvent::EventCast(b));
51 default:
52 break;
53 }
54 }
55
56 void Compare(const EventPacket* a, const EventPacket* b) {
57 EXPECT_EQ(a->id, b->id);
58 EXPECT_EQ(a->dispositions, b->dispositions);
59 ASSERT_EQ(a->events.size(), b->events.size());
60 for (size_t i = 0; i < a->events.size(); ++i)
61 Compare(a->events[i], b->events[i]);
62 }
63
64 void Verify(const EventPacket& packet_in) {
65 ASSERT_EQ(packet_in.events.size(), packet_in.dispositions.size());
66
67 IPC::Message msg;
68 IPC::ParamTraits<EventPacket>::Write(&msg, packet_in);
69
70 EventPacket packet_out;
71 PickleIterator iter(msg);
72 EXPECT_TRUE(IPC::ParamTraits<EventPacket>::Read(&msg, &iter, &packet_out));
73
74 Compare(&packet_in, &packet_out);
75
76 // Perform a sanity check that logging doesn't explode.
77 std::string packet_in_string;
78 IPC::ParamTraits<EventPacket>::Log(packet_in, &packet_in_string);
79 std::string packet_out_string;
80 IPC::ParamTraits<EventPacket>::Log(packet_out, &packet_out_string);
81 ASSERT_FALSE(packet_in_string.empty());
82 EXPECT_EQ(packet_in_string, packet_out_string);
83 }
84 };
85
86 TEST_F(InputParamTraitsTest, EventPacketEmpty) {
87 EventPacket packet_in;
88 IPC::Message msg;
89 IPC::ParamTraits<EventPacket>::Write(&msg, packet_in);
90
91 EventPacket packet_out;
92 PickleIterator iter(msg);
93 EXPECT_TRUE(IPC::ParamTraits<EventPacket>::Read(&msg, &iter, &packet_out));
94
95 Compare(&packet_in, &packet_out);
96 }
97
98 #ifdef NDEBUG // This test triggers a DCHECK.
99 TEST_F(InputParamTraitsTest, EventPacketUninitializedEvents) {
100 EventPacket packet_in;
101 packet_in.id = 1;
102 packet_in.Add(GenericInputEvent::Create(), INPUT_EVENT_UNHANDLED);
103 packet_in.Add(WebPlatformInputEvent::Create(), INPUT_EVENT_UNHANDLED);
104
105 IPC::Message msg;
106 IPC::ParamTraits<EventPacket>::Write(&msg, packet_in);
107
108 EventPacket packet_out;
109 PickleIterator iter(msg);
110 EXPECT_FALSE(IPC::ParamTraits<EventPacket>::Read(&msg, &iter, &packet_out));
111 }
112 #endif
113
114 TEST_F(InputParamTraitsTest, EventPacketGenericEvents) {
115 EventPacket packet_in;
116 packet_in.id = 1;
117
118 packet_in.Add(
119 GenericInputEvent::Create(
120 1, scoped_ptr<IPC::Message>(new InputMsg_Undo(1))),
121 INPUT_EVENT_UNHANDLED);
122
123 Verify(packet_in);
124 }
125
126 TEST_F(InputParamTraitsTest, EventPacketWebPlatformEvents) {
127 EventPacket packet_in;
128 packet_in.id = 1;
129
130 ui::LatencyInfo latency;
131
132 WebKit::WebKeyboardEvent key_event;
133 key_event.type = WebKit::WebInputEvent::RawKeyDown;
134 key_event.nativeKeyCode = 5;
135 packet_in.Add(
136 WebPlatformInputEvent::Create(1, key_event, latency, true, false),
137 INPUT_EVENT_UNHANDLED);
138
139 WebKit::WebMouseWheelEvent wheel_event;
140 wheel_event.type = WebKit::WebInputEvent::MouseWheel;
141 wheel_event.deltaX = 10;
142 latency.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_RWH_COMPONENT, 1, 1);
143 packet_in.Add(
144 WebPlatformInputEvent::Create(2, wheel_event, latency, false, false),
145 INPUT_EVENT_UNHANDLED);
146
147 WebKit::WebMouseEvent mouse_event;
148 mouse_event.type = WebKit::WebInputEvent::MouseDown;
149 mouse_event.x = 10;
150 latency.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_UI_COMPONENT, 2, 2);
151 packet_in.Add(
152 WebPlatformInputEvent::Create(3, mouse_event, latency, false, false),
153 INPUT_EVENT_UNHANDLED);
154
155 WebKit::WebGestureEvent gesture_event;
156 gesture_event.type = WebKit::WebInputEvent::GestureScrollBegin;
157 gesture_event.x = -1;
158 packet_in.Add(
159 WebPlatformInputEvent::Create(4, gesture_event, latency, false, false),
160 INPUT_EVENT_UNHANDLED);
161
162 WebKit::WebTouchEvent touch_event;
163 touch_event.type = WebKit::WebInputEvent::TouchStart;
164 touch_event.touchesLength = 1;
165 touch_event.touches[0].radiusX = 1;
166 packet_in.Add(
167 WebPlatformInputEvent::Create(5, touch_event, latency, false, false),
168 INPUT_EVENT_COULD_NOT_DELIVER);
169
170 Verify(packet_in);
171 }
172
173 TEST_F(InputParamTraitsTest, EventPacketMixedEvents) {
174 EventPacket packet_in;
175 packet_in.id = 1;
176
177 // Add some valid GenericEvents.
178 packet_in.Add(
179 GenericInputEvent::Create(
180 1, scoped_ptr<IPC::Message>(new InputMsg_Undo(1))),
181 INPUT_EVENT_UNHANDLED);
182
183 ui::LatencyInfo latency;
184
185 WebKit::WebKeyboardEvent key_event;
186 key_event.type = WebKit::WebInputEvent::RawKeyDown;
187 key_event.nativeKeyCode = 5;
188 packet_in.Add(
189 WebPlatformInputEvent::Create(2, key_event, latency, true, false),
190 INPUT_EVENT_UNHANDLED);
191
192 packet_in.Add(GenericInputEvent::Create(
193 3, scoped_ptr<IPC::Message>(new InputMsg_SetFocus(2, true))),
194 INPUT_EVENT_UNHANDLED);
195
196 WebKit::WebMouseWheelEvent wheel_event;
197 wheel_event.type = WebKit::WebInputEvent::MouseWheel;
198 wheel_event.deltaX = 10;
199 packet_in.Add(
200 WebPlatformInputEvent::Create(4, wheel_event, latency, false, false),
201 INPUT_EVENT_UNHANDLED);
202
203 Verify(packet_in);
204 }
205
206 } // namespace
207 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698