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

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: Separate InputEvent types for events based on WebKit::WebInputEvent Created 7 years, 4 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) 2012 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/generic_event.h"
9 #include "content/common/input/input_event_state.h"
10
11 namespace IPC {
12
13 void ParamTraits<content::EventPacket>::Write(
14 Message* m, const param_type& p) {
15 DCHECK_EQ(p.events.size(), p.event_states.size());
16
17 WriteParam(m, p.id);
18 WriteParam(m, p.event_states);
19 WriteParam(m, p.events.size());
20
21 for (size_t i = 0; i < p.events.size(); ++i) {
22 const content::InputEvent* event = p.events[i];
23 switch (event->type) {
24 case content::InputEvent::GENERIC:
25 WriteParam(m, *content::GenericEvent::EventCast(event));
26 break;
27 case content::InputEvent::WEB:
28 WriteParam(m, *content::WebEvent::EventCast(event));
29 break;
30 default:
31 break;
32 }
33 }
34 }
35
36 template<typename InputEventType>
37 static scoped_ptr<content::InputEvent> ReadInputEvent(const Message* m,
38 PickleIterator* iter) {
39 scoped_ptr<InputEventType> event = InputEventType::Create();
40 if (!ReadParam(m, iter, event.get()))
41 return scoped_ptr<InputEventType>().template PassAs<content::InputEvent>();
42 return event.template PassAs<content::InputEvent>();
43 }
44
45 bool ParamTraits<content::EventPacket>::Read(
46 const Message* m, PickleIterator* iter, param_type* p) {
47 int64 id;
48 std::vector<content::InputEventState> event_states;
49 size_t event_list_size;
50 if (!ReadParam(m, iter, &id) ||
51 !ReadParam(m, iter, &event_states) ||
52 !ReadParam(m, iter, &event_list_size))
53 return false;
54
55 if (event_states.size() != event_list_size)
56 return false;
57
58 ScopedVector<content::InputEvent> events;
59 for (size_t i = 0; i < event_list_size; ++i) {
60 content::InputEvent::Type type;
61 PickleIterator temp_iter = *iter;
62 if (!ReadParam(m, &temp_iter, &type))
63 return false;
64
65 scoped_ptr<content::InputEvent> event;
66 switch (type) {
67 case content::InputEvent::GENERIC:
68 event = ReadInputEvent<content::GenericEvent>(m, iter);
69 break;
70 case content::InputEvent::WEB:
71 event = ReadInputEvent<content::WebEvent>(m, iter);
72 break;
73 default:
74 break;
75 }
76 if (!event)
77 return false;
78
79 events.push_back(event.release());
80 }
81
82 p->id = id;
83 p->events.swap(events);
84 p->event_states.swap(event_states);
85 return true;
86 }
87
88 void ParamTraits<content::EventPacket>::Log(
89 const param_type& p, std::string* l) {
90 l->append("EventPacket((");
91 LogParam(p.id, l);
92 l->append("), ");
93 LogParam(p.event_states, l);
94 l->append("[");
95 for (size_t i = 0; i < p.events.size(); ++i) {
96 if (i)
97 l->append(", ");
98 const content::InputEvent* event = p.events[i];
99 switch (event->type) {
100 case content::InputEvent::GENERIC:
101 LogParam(*content::GenericEvent::EventCast(event), l);
102 break;
103 case content::InputEvent::WEB:
104 LogParam(*content::WebEvent::EventCast(event), l);
105 break;
106 default:
107 break;
108 }
109 }
110 l->append("])");
111 }
112
113 void ParamTraits<content::WebEvent>::Write(
114 Message* m, const param_type& p) {
115 ParamTraits<content::InputEvent>::Write(m, p);
116 WriteParam(m, static_cast<WebInputEventPointer>(p.event.get()));
117 WriteParam(m, p.latency_info);
118 WriteParam(m, p.is_keyboard_shortcut);
119 WriteParam(m, p.creates_followup_events);
120 }
121
122
123 bool ParamTraits<content::WebEvent>::Read(
124 const Message* m, PickleIterator* iter, param_type* p) {
125 if (!ParamTraits<content::InputEvent>::Read(m, iter, p))
126 return false;
127 if (p->type != content::InputEvent::WEB)
128 return false;
129
130 WebInputEventPointer web_input_event_pointer;
131 ui::LatencyInfo latency_info;
132 bool is_keyboard_shortcut;
133 bool creates_followup_events;
134 if (!ReadParam(m, iter, &web_input_event_pointer) ||
135 !ReadParam(m, iter, &latency_info) ||
136 !ReadParam(m, iter, &is_keyboard_shortcut) ||
137 !ReadParam(m, iter, &creates_followup_events))
138 return false;
139
140 p->SetAll(*web_input_event_pointer,
141 latency_info,
142 is_keyboard_shortcut,
143 creates_followup_events);
144 return true;
145 }
146
147 void ParamTraits<content::WebEvent>::Log(
148 const param_type& p, std::string* l) {
149 l->append("(");
150 ParamTraits<content::InputEvent>::Log(p, l);
151 l->append(", WebEvent(");
152 LogParam(static_cast<WebInputEventPointer>(p.event.get()), l);
153 l->append(", ");
154 LogParam(p.latency_info, l);
155 l->append(", ");
156 LogParam(p.is_keyboard_shortcut, l);
157 l->append(", ");
158 LogParam(p.creates_followup_events, l);
159 l->append("))");
160 }
161
162 } // namespace IPC
163
164 // Generate param traits write methods.
165 #include "ipc/param_traits_write_macros.h"
166 namespace IPC {
167 #undef CONTENT_COMMON_INPUT_INPUT_PARAM_TRAITS_MACROS_H_
168 #include "content/common/input/input_param_traits_macros.h"
169 } // namespace IPC
170
171 // Generate param traits read methods.
172 #include "ipc/param_traits_read_macros.h"
173 namespace IPC {
174 #undef CONTENT_COMMON_INPUT_INPUT_PARAM_TRAITS_MACROS_H_
175 #include "content/common/input/input_param_traits_macros.h"
176 } // namespace IPC
177
178 // Generate param traits log methods.
179 #include "ipc/param_traits_log_macros.h"
180 namespace IPC {
181 #undef CONTENT_COMMON_INPUT_INPUT_PARAM_TRAITS_MACROS_H_
182 #include "content/common/input/input_param_traits_macros.h"
183 } // namespace IPC
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698