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

Unified Diff: content/common/input/input_param_traits.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 side-by-side diff with in-line comments
Download patch
Index: content/common/input/input_param_traits.cc
diff --git a/content/common/input/input_param_traits.cc b/content/common/input/input_param_traits.cc
new file mode 100644
index 0000000000000000000000000000000000000000..f1869440fa0b85200e43c8af3c800fce3f777780
--- /dev/null
+++ b/content/common/input/input_param_traits.cc
@@ -0,0 +1,134 @@
+// 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/content_param_traits.h"
+#include "content/common/input/input_event_disposition.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"
+
+namespace IPC {
+namespace {
+template<typename PayloadType>
+scoped_ptr<content::InputEvent::Payload> ReadPayload(const Message* m,
+ PickleIterator* iter) {
+ scoped_ptr<PayloadType> event = PayloadType::Create();
+ if (!ReadParam(m, iter, event.get()))
+ return scoped_ptr<content::InputEvent::Payload>();
+ return event.template PassAs<content::InputEvent::Payload>();
+}
+} // namespace
+
+void ParamTraits<content::InputEvent>::Write(
+ Message* m, const param_type& p) {
+ WriteParam(m, p.id());
+ WriteParam(m, !!p.payload());
+ if (!p.payload())
+ return;
+
+ content::InputEvent::Payload::Type payload_type = p.payload()->GetType();
+ WriteParam(m, payload_type);
+ switch (payload_type) {
+ case content::InputEvent::Payload::IPC_MESSAGE:
+ WriteParam(m, *content::IPCInputEventPayload::Cast(p.payload()));
+ break;
+ case content::InputEvent::Payload::WEB_INPUT_EVENT:
+ WriteParam(m, *content::WebInputEventPayload::Cast(p.payload()));
+ break;
+ default:
+ break;
+ }
+}
+
+bool ParamTraits<content::InputEvent>::Read(
+ const Message* m, PickleIterator* iter, param_type* p) {
+ int64 id;
+ bool has_payload = false;
+ content::InputEvent::Payload::Type payload_type;
+ if (!ReadParam(m, iter, &id) ||
+ !ReadParam(m, iter, &has_payload) ||
+ !has_payload ||
+ !ReadParam(m, iter, &payload_type))
+ return false;
+
+ scoped_ptr<content::InputEvent::Payload> payload;
+ switch (payload_type) {
+ case content::InputEvent::Payload::IPC_MESSAGE:
+ payload = ReadPayload<content::IPCInputEventPayload>(m, iter);
+ break;
+ case content::InputEvent::Payload::WEB_INPUT_EVENT:
+ payload = ReadPayload<content::WebInputEventPayload>(m, iter);
+ break;
+ default:
+ break;
+ }
+ if (!payload)
+ return false;
+
+ p->Initialize(id, payload.Pass());
+ return true;
+}
+
+void ParamTraits<content::InputEvent>::Log(
+ const param_type& p, std::string* l) {
+ l->append("InputEvent((");
+ LogParam(p.id(), l);
+ l->append("), Payload (");
+ const content::InputEvent::Payload* payload = p.payload();
+ switch (payload->GetType()) {
+ case content::InputEvent::Payload::IPC_MESSAGE:
+ LogParam(*content::IPCInputEventPayload::Cast(payload), l);
+ break;
+ case content::InputEvent::Payload::WEB_INPUT_EVENT:
+ LogParam(*content::WebInputEventPayload::Cast(payload), l);
+ break;
+ default:
+ break;
+ }
+ l->append("))");
aelias_OOO_until_Jul13 2013/09/03 22:31:10 Nit: unbalanced parens
jdduke (slow) 2013/09/03 22:52:14 Hmm, I think this is balanced, we just have Payloa
+}
+
+void ParamTraits<content::WebInputEventPayload>::Write(
+ Message* m, const param_type& p) {
+ bool valid_web_event = !!p.web_event();
+ WriteParam(m, valid_web_event);
+ if (valid_web_event)
+ WriteParam(m, p.web_event());
+ WriteParam(m, p.latency_info());
+ WriteParam(m, p.is_keyboard_shortcut());
+}
+
+bool ParamTraits<content::WebInputEventPayload>::Read(
+ const Message* m, PickleIterator* iter, param_type* p) {
+ bool valid_web_event;
+ WebInputEventPointer web_input_event_pointer;
+ ui::LatencyInfo latency_info;
+ bool is_keyboard_shortcut;
+ if (!ReadParam(m, iter, &valid_web_event) ||
+ !valid_web_event ||
+ !ReadParam(m, iter, &web_input_event_pointer) ||
+ !ReadParam(m, iter, &latency_info) ||
+ !ReadParam(m, iter, &is_keyboard_shortcut))
+ return false;
+
+ p->Initialize(*web_input_event_pointer,
+ latency_info,
+ is_keyboard_shortcut);
+ return true;
+}
+
+void ParamTraits<content::WebInputEventPayload>::Log(
+ const param_type& p, std::string* l) {
+ l->append("WebInputEventPayload(");
+ LogParam(p.web_event(), l);
+ l->append(", ");
+ LogParam(p.latency_info(), l);
+ l->append(", ");
+ LogParam(p.is_keyboard_shortcut(), l);
+ l->append(")");
+}
+
+} // namespace IPC

Powered by Google App Engine
This is Rietveld 408576698