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

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: 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/generic_input_event.h"
9 #include "content/common/input/input_event_disposition.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.dispositions.size());
16
17 WriteParam(m, p.id);
18 WriteParam(m, p.dispositions);
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 WriteParam(m, event->type);
24 switch (event->type) {
25 case content::InputEvent::GENERIC:
26 WriteParam(m, *content::GenericInputEvent::EventCast(event));
27 break;
28 case content::InputEvent::WEB_PLATFORM:
29 WriteParam(m, *content::WebPlatformInputEvent::EventCast(event));
30 break;
31 default:
32 break;
33 }
34 }
35 }
36
37 template<typename InputEventType>
38 static scoped_ptr<content::InputEvent> ReadInputEvent(const Message* m,
39 PickleIterator* iter) {
40 scoped_ptr<InputEventType> event = InputEventType::Create();
41 if (!ReadParam(m, iter, event.get()))
42 return scoped_ptr<content::InputEvent>();
43 return event.template PassAs<content::InputEvent>();
44 }
45
46 bool ParamTraits<content::EventPacket>::Read(
47 const Message* m, PickleIterator* iter, param_type* p) {
48 int64 id;
49 std::vector<content::InputEventDisposition> dispositions;
50 size_t event_count;
51 if (!ReadParam(m, iter, &id) ||
52 !ReadParam(m, iter, &dispositions) ||
53 !ReadParam(m, iter, &event_count))
54 return false;
55
56 if (dispositions.size() != event_count)
57 return false;
58
59 ScopedVector<content::InputEvent> events;
60 for (size_t i = 0; i < event_count; ++i) {
61 content::InputEvent::Type type;
62 if (!ReadParam(m, iter, &type))
63 return false;
64
65 scoped_ptr<content::InputEvent> event;
66 switch (type) {
67 case content::InputEvent::GENERIC:
68 event = ReadInputEvent<content::GenericInputEvent>(m, iter);
69 break;
70 case content::InputEvent::WEB_PLATFORM:
71 event = ReadInputEvent<content::WebPlatformInputEvent>(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->dispositions.swap(dispositions);
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("), Dispositions [");
93 LogParam(p.dispositions, l);
94 l->append("], Events [");
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::GenericInputEvent::EventCast(event), l);
102 break;
103 case content::InputEvent::WEB_PLATFORM:
104 LogParam(*content::WebPlatformInputEvent::EventCast(event), l);
105 break;
106 default:
107 break;
108 }
109 }
110 l->append("])");
111 }
112
113 void ParamTraits<content::WebPlatformInputEvent>::Write(
114 Message* m, const param_type& p) {
115 ParamTraits<content::InputEvent>::Write(m, p);
116 bool valid_web_event = !!p.event;
117 DCHECK(valid_web_event);
118 WriteParam(m, valid_web_event);
119 if (valid_web_event)
120 WriteParam(m, static_cast<WebInputEventPointer>(p.event.get()));
121 WriteParam(m, p.latency_info);
122 WriteParam(m, p.is_keyboard_shortcut);
123 }
124
125 bool ParamTraits<content::WebPlatformInputEvent>::Read(
126 const Message* m, PickleIterator* iter, param_type* p) {
127 if (!ParamTraits<content::InputEvent>::Read(m, iter, p))
128 return false;
129 if (p->type != content::InputEvent::WEB_PLATFORM)
130 return false;
131
132 bool valid_web_event;
133 WebInputEventPointer web_input_event_pointer;
134 ui::LatencyInfo latency_info;
135 bool is_keyboard_shortcut;
136 if (!ReadParam(m, iter, &valid_web_event) ||
137 !valid_web_event ||
138 !ReadParam(m, iter, &web_input_event_pointer) ||
139 !ReadParam(m, iter, &latency_info) ||
140 !ReadParam(m, iter, &is_keyboard_shortcut))
141 return false;
142
143 p->Initialize(*web_input_event_pointer,
144 latency_info,
145 is_keyboard_shortcut);
146 return true;
147 }
148
149 void ParamTraits<content::WebPlatformInputEvent>::Log(
150 const param_type& p, std::string* l) {
151 l->append("(");
152 ParamTraits<content::InputEvent>::Log(p, l);
153 l->append(", WebPlatformInputEvent(");
154 LogParam(static_cast<WebInputEventPointer>(p.event.get()), l);
155 l->append(", ");
156 LogParam(p.latency_info, l);
157 l->append(", ");
158 LogParam(p.is_keyboard_shortcut, 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