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

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: Code review 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 size_t a_size = a->web_event()->size;
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 packet_in.Add(InputEvent::Create(1, IPCInputEventPayload::Create(
126 scoped_ptr<IPC::Message>(new InputMsg_SetFocus(2, true)))));
127
128 Verify(packet_in);
129 }
130
131 TEST_F(InputParamTraitsTest, EventPacketWebInputEvents) {
132 EventPacket packet_in;
133 packet_in.id = 1;
134
135 ui::LatencyInfo latency;
136
137 int64 next_event_id = 1;
138 WebKit::WebKeyboardEvent key_event;
139 key_event.type = WebKit::WebInputEvent::RawKeyDown;
140 key_event.nativeKeyCode = 5;
141 packet_in.Add(InputEvent::Create(++next_event_id,
142 WebInputEventPayload::Create(key_event, latency, true)));
143
144 WebKit::WebMouseWheelEvent wheel_event;
145 wheel_event.type = WebKit::WebInputEvent::MouseWheel;
146 wheel_event.deltaX = 10;
147 latency.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_RWH_COMPONENT, 1, 1);
148 packet_in.Add(InputEvent::Create(++next_event_id,
149 WebInputEventPayload::Create(wheel_event, latency, false)));
150
151 WebKit::WebMouseEvent mouse_event;
152 mouse_event.type = WebKit::WebInputEvent::MouseDown;
153 mouse_event.x = 10;
154 latency.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_UI_COMPONENT, 2, 2);
155 packet_in.Add(InputEvent::Create(++next_event_id,
156 WebInputEventPayload::Create(mouse_event, latency, false)));
157
158 WebKit::WebGestureEvent gesture_event;
159 gesture_event.type = WebKit::WebInputEvent::GestureScrollBegin;
160 gesture_event.x = -1;
161 packet_in.Add(InputEvent::Create(++next_event_id,
162 WebInputEventPayload::Create(gesture_event, latency, false)));
163
164 WebKit::WebTouchEvent touch_event;
165 touch_event.type = WebKit::WebInputEvent::TouchStart;
166 touch_event.touchesLength = 1;
167 touch_event.touches[0].radiusX = 1;
168 packet_in.Add(InputEvent::Create(++next_event_id,
169 WebInputEventPayload::Create(touch_event, latency, false)));
170
171 Verify(packet_in);
172 }
173
174 TEST_F(InputParamTraitsTest, EventPacketMixedEvents) {
175 EventPacket packet_in;
176 packet_in.id = 1;
177 int64 next_event_id = 1;
178
179 // Add a mix of IPC and WebInputEvents.
180 packet_in.Add(InputEvent::Create(++next_event_id,
181 IPCInputEventPayload::Create(
182 scoped_ptr<IPC::Message>(new InputMsg_Undo(1)))));
183
184 ui::LatencyInfo latency;
185 WebKit::WebKeyboardEvent key_event;
186 key_event.type = WebKit::WebInputEvent::RawKeyDown;
187 key_event.nativeKeyCode = 5;
188 packet_in.Add(InputEvent::Create(++next_event_id,
189 WebInputEventPayload::Create(key_event, latency, true)));
190
191 packet_in.Add(InputEvent::Create(++next_event_id,
192 IPCInputEventPayload::Create(
193 scoped_ptr<IPC::Message>(new InputMsg_SetFocus(2, true)))));
194
195 WebKit::WebMouseWheelEvent wheel_event;
196 wheel_event.type = WebKit::WebInputEvent::MouseWheel;
197 wheel_event.deltaX = 10;
198 packet_in.Add(InputEvent::Create(++next_event_id,
199 WebInputEventPayload::Create(wheel_event, latency, false)));
200
201 Verify(packet_in);
202 }
203
204 } // namespace
205 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698