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

Side by Side 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 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/content_param_traits.h"
8 #include "content/common/input/input_event_disposition.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
13 namespace IPC {
14 namespace {
15 template<typename PayloadType>
16 scoped_ptr<content::InputEvent::Payload> ReadPayload(const Message* m,
17 PickleIterator* iter) {
18 scoped_ptr<PayloadType> event = PayloadType::Create();
19 if (!ReadParam(m, iter, event.get()))
20 return scoped_ptr<content::InputEvent::Payload>();
21 return event.template PassAs<content::InputEvent::Payload>();
22 }
23 } // namespace
24
25 void ParamTraits<content::InputEvent>::Write(
26 Message* m, const param_type& p) {
27 WriteParam(m, p.id());
28 WriteParam(m, !!p.payload());
29 if (!p.payload())
30 return;
31
32 content::InputEvent::Payload::Type payload_type = p.payload()->GetType();
33 WriteParam(m, payload_type);
34 switch (payload_type) {
35 case content::InputEvent::Payload::IPC_MESSAGE:
36 WriteParam(m, *content::IPCInputEventPayload::Cast(p.payload()));
37 break;
38 case content::InputEvent::Payload::WEB_INPUT_EVENT:
39 WriteParam(m, *content::WebInputEventPayload::Cast(p.payload()));
40 break;
41 default:
42 break;
43 }
44 }
45
46 bool ParamTraits<content::InputEvent>::Read(
47 const Message* m, PickleIterator* iter, param_type* p) {
48 int64 id;
49 bool has_payload = false;
50 content::InputEvent::Payload::Type payload_type;
51 if (!ReadParam(m, iter, &id) ||
52 !ReadParam(m, iter, &has_payload) ||
53 !has_payload ||
54 !ReadParam(m, iter, &payload_type))
55 return false;
56
57 scoped_ptr<content::InputEvent::Payload> payload;
58 switch (payload_type) {
59 case content::InputEvent::Payload::IPC_MESSAGE:
60 payload = ReadPayload<content::IPCInputEventPayload>(m, iter);
61 break;
62 case content::InputEvent::Payload::WEB_INPUT_EVENT:
63 payload = ReadPayload<content::WebInputEventPayload>(m, iter);
64 break;
65 default:
66 break;
67 }
68 if (!payload)
69 return false;
70
71 p->Initialize(id, payload.Pass());
72 return true;
73 }
74
75 void ParamTraits<content::InputEvent>::Log(
76 const param_type& p, std::string* l) {
77 l->append("InputEvent((");
78 LogParam(p.id(), l);
79 l->append("), Payload (");
80 const content::InputEvent::Payload* payload = p.payload();
81 switch (payload->GetType()) {
82 case content::InputEvent::Payload::IPC_MESSAGE:
83 LogParam(*content::IPCInputEventPayload::Cast(payload), l);
84 break;
85 case content::InputEvent::Payload::WEB_INPUT_EVENT:
86 LogParam(*content::WebInputEventPayload::Cast(payload), l);
87 break;
88 default:
89 break;
90 }
91 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
92 }
93
94 void ParamTraits<content::WebInputEventPayload>::Write(
95 Message* m, const param_type& p) {
96 bool valid_web_event = !!p.web_event();
97 WriteParam(m, valid_web_event);
98 if (valid_web_event)
99 WriteParam(m, p.web_event());
100 WriteParam(m, p.latency_info());
101 WriteParam(m, p.is_keyboard_shortcut());
102 }
103
104 bool ParamTraits<content::WebInputEventPayload>::Read(
105 const Message* m, PickleIterator* iter, param_type* p) {
106 bool valid_web_event;
107 WebInputEventPointer web_input_event_pointer;
108 ui::LatencyInfo latency_info;
109 bool is_keyboard_shortcut;
110 if (!ReadParam(m, iter, &valid_web_event) ||
111 !valid_web_event ||
112 !ReadParam(m, iter, &web_input_event_pointer) ||
113 !ReadParam(m, iter, &latency_info) ||
114 !ReadParam(m, iter, &is_keyboard_shortcut))
115 return false;
116
117 p->Initialize(*web_input_event_pointer,
118 latency_info,
119 is_keyboard_shortcut);
120 return true;
121 }
122
123 void ParamTraits<content::WebInputEventPayload>::Log(
124 const param_type& p, std::string* l) {
125 l->append("WebInputEventPayload(");
126 LogParam(p.web_event(), l);
127 l->append(", ");
128 LogParam(p.latency_info(), l);
129 l->append(", ");
130 LogParam(p.is_keyboard_shortcut(), l);
131 l->append(")");
132 }
133
134 } // namespace IPC
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698