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

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: Include recent cleanup 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::EventPacket>::Write(Message* m, const param_type& p) {
26 WriteParam(m, p.id());
27 WriteParam(m, p.events());
28 }
29
30 bool ParamTraits<content::EventPacket>::Read(
31 const Message* m, PickleIterator* iter, param_type* p) {
32 int64 id;
33 content::EventPacket::InputEvents events;
34 if (!ReadParam(m, iter, &id) ||
35 !ReadParam(m, iter, &events))
36 return false;
37
38 p->set_id(id);
39 bool events_added_successfully = true;
40 for (size_t i = 0; i < events.size(); ++i) {
41 // Take ownership of all events.
42 scoped_ptr<content::InputEvent> event(events[i]);
43 if (!events_added_successfully)
44 continue;
45 if (!p->Add(event.Pass()))
46 events_added_successfully = false;
47 }
48 events.weak_clear();
49 return events_added_successfully;
50 }
51
52 void ParamTraits<content::EventPacket>::Log(
53 const param_type& p, std::string* l) {
54 l->append("EventPacket((");
55 LogParam(p.id(), l);
56 l->append("), Events(");
57 LogParam(p.events(), l);
58 l->append("))");
59 }
60
61 void ParamTraits<content::InputEvent>::Write(
62 Message* m, const param_type& p) {
63 WriteParam(m, p.id());
64 WriteParam(m, !!p.payload());
65 if (!p.valid())
66 return;
67
68 content::InputEvent::Payload::Type payload_type = p.payload()->GetType();
69 WriteParam(m, payload_type);
70 switch (payload_type) {
71 case content::InputEvent::Payload::IPC_MESSAGE:
72 WriteParam(m, *content::IPCInputEventPayload::Cast(p.payload()));
73 break;
74 case content::InputEvent::Payload::WEB_INPUT_EVENT:
75 WriteParam(m, *content::WebInputEventPayload::Cast(p.payload()));
76 break;
77 default:
78 break;
79 }
80 }
81
82 bool ParamTraits<content::InputEvent>::Read(
83 const Message* m, PickleIterator* iter, param_type* p) {
84 int64 id;
85 bool has_payload = false;
86 content::InputEvent::Payload::Type payload_type;
87 if (!ReadParam(m, iter, &id) ||
88 !ReadParam(m, iter, &has_payload) ||
89 !id ||
90 !has_payload ||
91 !ReadParam(m, iter, &payload_type))
92 return false;
93
94 scoped_ptr<content::InputEvent::Payload> payload;
95 switch (payload_type) {
96 case content::InputEvent::Payload::IPC_MESSAGE:
97 payload = ReadPayload<content::IPCInputEventPayload>(m, iter);
98 break;
99 case content::InputEvent::Payload::WEB_INPUT_EVENT:
100 payload = ReadPayload<content::WebInputEventPayload>(m, iter);
101 break;
102 default:
103 break;
palmer 2013/09/05 18:56:30 Does it make sense to try to Initialize for unknow
jdduke (slow) 2013/09/05 19:31:49 Yeah, I imagine it would also make sense to NOTREA
104 }
105 return p->Initialize(id, payload.Pass());
106 }
107
108 void ParamTraits<content::InputEvent>::Log(
109 const param_type& p, std::string* l) {
110 l->append("InputEvent((");
111 LogParam(p.id(), l);
112 l->append("), Payload (");
113 const content::InputEvent::Payload* payload = p.payload();
114 switch (payload->GetType()) {
115 case content::InputEvent::Payload::IPC_MESSAGE:
116 LogParam(*content::IPCInputEventPayload::Cast(payload), l);
117 break;
118 case content::InputEvent::Payload::WEB_INPUT_EVENT:
119 LogParam(*content::WebInputEventPayload::Cast(payload), l);
120 break;
121 default:
122 break;
palmer 2013/09/05 18:56:30 Similar question here. I don't know the semantical
jdduke (slow) 2013/09/05 19:31:49 Right, good catch.
123 }
124 l->append("))");
125 }
126
127 void ParamTraits<content::WebInputEventPayload>::Write(
128 Message* m, const param_type& p) {
129 bool valid_web_event = !!p.web_event();
130 WriteParam(m, valid_web_event);
131 if (valid_web_event)
132 WriteParam(m, p.web_event());
133 WriteParam(m, p.latency_info());
134 WriteParam(m, p.is_keyboard_shortcut());
135 }
136
137 bool ParamTraits<content::WebInputEventPayload>::Read(
138 const Message* m, PickleIterator* iter, param_type* p) {
139 bool valid_web_event;
140 WebInputEventPointer web_input_event_pointer;
141 ui::LatencyInfo latency_info;
142 bool is_keyboard_shortcut;
143 if (!ReadParam(m, iter, &valid_web_event) ||
144 !valid_web_event ||
145 !ReadParam(m, iter, &web_input_event_pointer) ||
146 !ReadParam(m, iter, &latency_info) ||
147 !ReadParam(m, iter, &is_keyboard_shortcut))
148 return false;
149
150 p->Initialize(*web_input_event_pointer,
151 latency_info,
152 is_keyboard_shortcut);
153 return true;
154 }
155
156 void ParamTraits<content::WebInputEventPayload>::Log(
157 const param_type& p, std::string* l) {
158 l->append("WebInputEventPayload(");
159 LogParam(p.web_event(), l);
160 l->append(", ");
161 LogParam(p.latency_info(), l);
162 l->append(", ");
163 LogParam(p.is_keyboard_shortcut(), l);
164 l->append(")");
165 }
166
167 } // namespace IPC
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698