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

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: InputEvent with payload 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/input_event.h"
9 #include "content/common/input/ipc_input_event_payload.h"
10 #include "content/common/input/web_input_event_payload.h"
11 #include "content/common/input_messages.h"
12 #include "ipc/ipc_message.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14 #include "third_party/WebKit/public/web/WebInputEvent.h"
15
16 namespace content {
17 namespace {
18
19 class InputParamTraitsTest : public testing::Test {
20 protected:
21 void Compare(const WebInputEventPayload* a, const WebInputEventPayload* b) {
22 EXPECT_EQ(!!a->web_event(), !!b->web_event());
23 if (a->web_event() && b->web_event()) {
24 const unsigned a_size = a->web_event()->size;
aelias_OOO_until_Jul13 2013/09/03 22:31:10 nit: size_t
jdduke (slow) 2013/09/03 22:52:14 Done.
25 ASSERT_EQ(a_size, b->web_event()->size);
26 EXPECT_EQ(0, memcmp(a->web_event(), b->web_event(), a_size));
27 }
28 EXPECT_EQ(a->latency_info().latency_components.size(),
29 b->latency_info().latency_components.size());
30 EXPECT_EQ(a->is_keyboard_shortcut(), b->is_keyboard_shortcut());
31 }
32
33 void Compare(const IPCInputEventPayload* a, const IPCInputEventPayload* b) {
34 EXPECT_EQ(!!a->message, !!b->message);
35 if (a->message && b->message) {
36 EXPECT_EQ(a->message->type(), b->message->type());
37 EXPECT_EQ(a->message->routing_id(), b->message->routing_id());
38 }
39 }
40
41 void Compare(const InputEvent::Payload* a, const InputEvent::Payload* b) {
42 ASSERT_EQ(!!a, !!b);
43 if (!a)
44 return;
45 switch (a->GetType()) {
46 case InputEvent::Payload::IPC_MESSAGE:
47 Compare(IPCInputEventPayload::Cast(a),
48 IPCInputEventPayload::Cast(b));
49 break;
50 case InputEvent::Payload::WEB_INPUT_EVENT:
51 Compare(WebInputEventPayload::Cast(a),
52 WebInputEventPayload::Cast(b));
53 default:
54 break;
55 }
56 }
57
58 void Compare(const InputEvent* a, const InputEvent* b) {
59 EXPECT_EQ(a->id(), b->id());
60 EXPECT_EQ(a->valid(), b->valid());
61 Compare(a->payload(), b->payload());
62 }
63
64 void Compare(const EventPacket* a, const EventPacket* b) {
65 EXPECT_EQ(a->id, b->id);
66 ASSERT_EQ(a->events.size(), b->events.size());
67 for (size_t i = 0; i < a->events.size(); ++i)
68 Compare(a->events[i], b->events[i]);
69 }
70
71 void Verify(const EventPacket& packet_in) {
72 IPC::Message msg;
73 IPC::ParamTraits<EventPacket>::Write(&msg, packet_in);
74
75 EventPacket packet_out;
76 PickleIterator iter(msg);
77 EXPECT_TRUE(IPC::ParamTraits<EventPacket>::Read(&msg, &iter, &packet_out));
78
79 Compare(&packet_in, &packet_out);
80
81 // Perform a sanity check that logging doesn't explode.
82 std::string packet_in_string;
83 IPC::ParamTraits<EventPacket>::Log(packet_in, &packet_in_string);
84 std::string packet_out_string;
85 IPC::ParamTraits<EventPacket>::Log(packet_out, &packet_out_string);
86 ASSERT_FALSE(packet_in_string.empty());
87 EXPECT_EQ(packet_in_string, packet_out_string);
88 }
89 };
90
91 TEST_F(InputParamTraitsTest, EventPacketEmpty) {
92 EventPacket packet_in;
93 IPC::Message msg;
94 IPC::ParamTraits<EventPacket>::Write(&msg, packet_in);
95
96 EventPacket packet_out;
97 PickleIterator iter(msg);
98 EXPECT_TRUE(IPC::ParamTraits<EventPacket>::Read(&msg, &iter, &packet_out));
99
100 Compare(&packet_in, &packet_out);
101 }
102
103 #ifdef NDEBUG // This test triggers a DCHECK.
104 TEST_F(InputParamTraitsTest, EventPacketUninitializedEvents) {
105 EventPacket packet_in;
106 packet_in.id = 1;
107 packet_in.Add(InputEvent::Create(1, WebInputEventPayload::Create()));
108 packet_in.Add(InputEvent::Create(2, IPCInputEventPayload::Create()));
109
110 IPC::Message msg;
111 IPC::ParamTraits<EventPacket>::Write(&msg, packet_in);
112
113 EventPacket packet_out;
114 PickleIterator iter(msg);
115 EXPECT_FALSE(IPC::ParamTraits<EventPacket>::Read(&msg, &iter, &packet_out));
116 }
117 #endif
118
119 TEST_F(InputParamTraitsTest, EventPacketIPCEvents) {
120 EventPacket packet_in;
121 packet_in.id = 1;
122
123 packet_in.Add(InputEvent::Create(1, IPCInputEventPayload::Create(
124 scoped_ptr<IPC::Message>(new InputMsg_Undo(1)))));
125
126 Verify(packet_in);
127 }
128
129 TEST_F(InputParamTraitsTest, EventPacketWebPlatformEvents) {
130 EventPacket packet_in;
131 packet_in.id = 1;
132
133 ui::LatencyInfo latency;
134
135 int64 next_event_id = 1;
136 WebKit::WebKeyboardEvent key_event;
137 key_event.type = WebKit::WebInputEvent::RawKeyDown;
138 key_event.nativeKeyCode = 5;
139 packet_in.Add(InputEvent::Create(++next_event_id,
140 WebInputEventPayload::Create(key_event, latency, true)));
141
142 WebKit::WebMouseWheelEvent wheel_event;
143 wheel_event.type = WebKit::WebInputEvent::MouseWheel;
144 wheel_event.deltaX = 10;
145 latency.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_RWH_COMPONENT, 1, 1);
146 packet_in.Add(InputEvent::Create(++next_event_id,
147 WebInputEventPayload::Create(wheel_event, latency, false)));
148
149 WebKit::WebMouseEvent mouse_event;
150 mouse_event.type = WebKit::WebInputEvent::MouseDown;
151 mouse_event.x = 10;
152 latency.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_UI_COMPONENT, 2, 2);
153 packet_in.Add(InputEvent::Create(++next_event_id,
154 WebInputEventPayload::Create(mouse_event, latency, false)));
155
156 WebKit::WebGestureEvent gesture_event;
157 gesture_event.type = WebKit::WebInputEvent::GestureScrollBegin;
158 gesture_event.x = -1;
159 packet_in.Add(InputEvent::Create(++next_event_id,
160 WebInputEventPayload::Create(gesture_event, latency, false)));
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(InputEvent::Create(++next_event_id,
167 WebInputEventPayload::Create(touch_event, latency, false)));
168
169 Verify(packet_in);
170 }
171
172 TEST_F(InputParamTraitsTest, EventPacketMixedEvents) {
173 EventPacket packet_in;
174 packet_in.id = 1;
175 int64 next_event_id = 1;
176
177 // Add a mix of IPC and WebInputEvents.
178 packet_in.Add(InputEvent::Create(++next_event_id,
179 IPCInputEventPayload::Create(
180 scoped_ptr<IPC::Message>(new InputMsg_Undo(1)))));
181
182 ui::LatencyInfo latency;
183 WebKit::WebKeyboardEvent key_event;
184 key_event.type = WebKit::WebInputEvent::RawKeyDown;
185 key_event.nativeKeyCode = 5;
186 packet_in.Add(InputEvent::Create(++next_event_id,
187 WebInputEventPayload::Create(key_event, latency, true)));
188
189 packet_in.Add(InputEvent::Create(++next_event_id,
190 IPCInputEventPayload::Create(
191 scoped_ptr<IPC::Message>(new InputMsg_SetFocus(2, true)))));
192
193 WebKit::WebMouseWheelEvent wheel_event;
194 wheel_event.type = WebKit::WebInputEvent::MouseWheel;
195 wheel_event.deltaX = 10;
196 packet_in.Add(InputEvent::Create(++next_event_id,
197 WebInputEventPayload::Create(wheel_event, latency, false)));
198
199 Verify(packet_in);
200 }
201
202 } // namespace
203 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698