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

Unified 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: Win export fix 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/common/input/input_param_traits.cc ('k') | content/common/input/ipc_input_event_payload.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/common/input/input_param_traits_unittest.cc
diff --git a/content/common/input/input_param_traits_unittest.cc b/content/common/input/input_param_traits_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..b00fbad44877adb9c3b9f5ba9ab6688642d01014
--- /dev/null
+++ b/content/common/input/input_param_traits_unittest.cc
@@ -0,0 +1,211 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/common/input/input_param_traits.h"
+
+#include "content/common/input/event_packet.h"
+#include "content/common/input/input_event.h"
+#include "content/common/input/ipc_input_event_payload.h"
+#include "content/common/input/web_input_event_payload.h"
+#include "content/common/input_messages.h"
+#include "ipc/ipc_message.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/WebKit/public/web/WebInputEvent.h"
+
+namespace content {
+namespace {
+
+class InputParamTraitsTest : public testing::Test {
+ protected:
+ void Compare(const WebInputEventPayload* a, const WebInputEventPayload* b) {
+ EXPECT_EQ(!!a->web_event(), !!b->web_event());
+ if (a->web_event() && b->web_event()) {
+ const size_t a_size = a->web_event()->size;
+ ASSERT_EQ(a_size, b->web_event()->size);
+ EXPECT_EQ(0, memcmp(a->web_event(), b->web_event(), a_size));
+ }
+ EXPECT_EQ(a->latency_info().latency_components.size(),
+ b->latency_info().latency_components.size());
+ EXPECT_EQ(a->is_keyboard_shortcut(), b->is_keyboard_shortcut());
+ }
+
+ void Compare(const IPCInputEventPayload* a, const IPCInputEventPayload* b) {
+ EXPECT_EQ(!!a->message, !!b->message);
+ if (a->message && b->message) {
+ EXPECT_EQ(a->message->type(), b->message->type());
+ EXPECT_EQ(a->message->routing_id(), b->message->routing_id());
+ }
+ }
+
+ void Compare(const InputEvent::Payload* a, const InputEvent::Payload* b) {
+ ASSERT_EQ(!!a, !!b);
+ if (!a)
+ return;
+ switch (a->GetType()) {
+ case InputEvent::Payload::IPC_MESSAGE:
+ Compare(IPCInputEventPayload::Cast(a), IPCInputEventPayload::Cast(b));
+ break;
+ case InputEvent::Payload::WEB_INPUT_EVENT:
+ Compare(WebInputEventPayload::Cast(a), WebInputEventPayload::Cast(b));
+ default:
+ break;
+ }
+ }
+
+ void Compare(const InputEvent* a, const InputEvent* b) {
+ EXPECT_EQ(a->id(), b->id());
+ EXPECT_EQ(a->valid(), b->valid());
+ Compare(a->payload(), b->payload());
+ }
+
+ void Compare(const EventPacket* a, const EventPacket* b) {
+ EXPECT_EQ(a->id(), b->id());
+ ASSERT_EQ(a->size(), b->size());
+ for (size_t i = 0; i < a->size(); ++i)
+ Compare(a->events()[i], b->events()[i]);
+ }
+
+ void Verify(const EventPacket& packet_in) {
+ IPC::Message msg;
+ IPC::ParamTraits<EventPacket>::Write(&msg, packet_in);
+
+ EventPacket packet_out;
+ PickleIterator iter(msg);
+ EXPECT_TRUE(IPC::ParamTraits<EventPacket>::Read(&msg, &iter, &packet_out));
+
+ Compare(&packet_in, &packet_out);
+
+ // Perform a sanity check that logging doesn't explode.
+ std::string packet_in_string;
+ IPC::ParamTraits<EventPacket>::Log(packet_in, &packet_in_string);
+ std::string packet_out_string;
+ IPC::ParamTraits<EventPacket>::Log(packet_out, &packet_out_string);
+ ASSERT_FALSE(packet_in_string.empty());
+ EXPECT_EQ(packet_in_string, packet_out_string);
+ }
+};
+
+TEST_F(InputParamTraitsTest, EventPacketEmpty) {
+ EventPacket packet_in;
+ IPC::Message msg;
+ IPC::ParamTraits<EventPacket>::Write(&msg, packet_in);
+
+ EventPacket packet_out;
+ PickleIterator iter(msg);
+ EXPECT_TRUE(IPC::ParamTraits<EventPacket>::Read(&msg, &iter, &packet_out));
+
+ Compare(&packet_in, &packet_out);
+}
+
+TEST_F(InputParamTraitsTest, EventPacketUninitializedEvents) {
+ EventPacket packet_in;
+ packet_in.set_id(1);
+ packet_in.Add(InputEvent::Create(1, WebInputEventPayload::Create()));
+ packet_in.Add(InputEvent::Create(2, IPCInputEventPayload::Create()));
+
+ IPC::Message msg;
+ IPC::ParamTraits<EventPacket>::Write(&msg, packet_in);
+
+ EventPacket packet_out;
+ PickleIterator iter(msg);
+ EXPECT_FALSE(IPC::ParamTraits<EventPacket>::Read(&msg, &iter, &packet_out));
+}
+
+TEST_F(InputParamTraitsTest, EventPacketIPCEvents) {
+ EventPacket packet_in;
+ packet_in.set_id(1);
+
+ packet_in.Add(
+ InputEvent::Create(1,
+ IPCInputEventPayload::Create(
+ scoped_ptr<IPC::Message>(new InputMsg_Undo(1)))));
+ packet_in.Add(InputEvent::Create(
+ 1,
+ IPCInputEventPayload::Create(
+ scoped_ptr<IPC::Message>(new InputMsg_SetFocus(2, true)))));
+ Verify(packet_in);
+}
+
+TEST_F(InputParamTraitsTest, EventPacketWebInputEvents) {
+ EventPacket packet_in;
+ packet_in.set_id(1);
+
+ ui::LatencyInfo latency;
+
+ int64 next_event_id = 1;
+ WebKit::WebKeyboardEvent key_event;
+ key_event.type = WebKit::WebInputEvent::RawKeyDown;
+ key_event.nativeKeyCode = 5;
+ packet_in.Add(InputEvent::Create(
+ ++next_event_id, WebInputEventPayload::Create(key_event, latency, true)));
+
+ WebKit::WebMouseWheelEvent wheel_event;
+ wheel_event.type = WebKit::WebInputEvent::MouseWheel;
+ wheel_event.deltaX = 10;
+ latency.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_RWH_COMPONENT, 1, 1);
+ packet_in.Add(InputEvent::Create(
+ ++next_event_id,
+ WebInputEventPayload::Create(wheel_event, latency, false)));
+
+ WebKit::WebMouseEvent mouse_event;
+ mouse_event.type = WebKit::WebInputEvent::MouseDown;
+ mouse_event.x = 10;
+ latency.AddLatencyNumber(ui::INPUT_EVENT_LATENCY_UI_COMPONENT, 2, 2);
+ packet_in.Add(InputEvent::Create(
+ ++next_event_id,
+ WebInputEventPayload::Create(mouse_event, latency, false)));
+
+ WebKit::WebGestureEvent gesture_event;
+ gesture_event.type = WebKit::WebInputEvent::GestureScrollBegin;
+ gesture_event.x = -1;
+ packet_in.Add(InputEvent::Create(
+ ++next_event_id,
+ WebInputEventPayload::Create(gesture_event, latency, false)));
+
+ WebKit::WebTouchEvent touch_event;
+ touch_event.type = WebKit::WebInputEvent::TouchStart;
+ touch_event.touchesLength = 1;
+ touch_event.touches[0].radiusX = 1;
+ packet_in.Add(InputEvent::Create(
+ ++next_event_id,
+ WebInputEventPayload::Create(touch_event, latency, false)));
+
+ Verify(packet_in);
+}
+
+TEST_F(InputParamTraitsTest, EventPacketMixedEvents) {
+ EventPacket packet_in;
+ packet_in.set_id(1);
+ int64 next_event_id = 1;
+
+ // Add a mix of IPC and WebInputEvents.
+ packet_in.Add(
+ InputEvent::Create(++next_event_id,
+ IPCInputEventPayload::Create(
+ scoped_ptr<IPC::Message>(new InputMsg_Undo(1)))));
+
+ ui::LatencyInfo latency;
+ WebKit::WebKeyboardEvent key_event;
+ key_event.type = WebKit::WebInputEvent::RawKeyDown;
+ key_event.nativeKeyCode = 5;
+ packet_in.Add(InputEvent::Create(
+ ++next_event_id, WebInputEventPayload::Create(key_event, latency, true)));
+
+ packet_in.Add(InputEvent::Create(
+ ++next_event_id,
+ IPCInputEventPayload::Create(
+ scoped_ptr<IPC::Message>(new InputMsg_SetFocus(2, true)))));
+
+ WebKit::WebMouseWheelEvent wheel_event;
+ wheel_event.type = WebKit::WebInputEvent::MouseWheel;
+ wheel_event.deltaX = 10;
+ packet_in.Add(InputEvent::Create(
+ ++next_event_id,
+ WebInputEventPayload::Create(wheel_event, latency, false)));
+
+ Verify(packet_in);
+}
+
+} // namespace
+} // namespace content
« no previous file with comments | « content/common/input/input_param_traits.cc ('k') | content/common/input/ipc_input_event_payload.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698