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

Side by Side Diff: blimp/common/input/input_event_conversions.cc

Issue 1426993008: Serialize a subset of WebInputEvents to protobufs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed comments. Created 5 years, 1 month 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 2015 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 "blimp/common/input/input_event_conversions.h"
6
7 #include "base/logging.h"
8 #include "blimp/common/proto/input.pb.h"
9 #include "third_party/WebKit/public/platform/WebGestureDevice.h"
10 #include "third_party/WebKit/public/web/WebInputEvent.h"
11
12 namespace blimp {
13
14 namespace {
15
16 blink::WebInputEvent::Type ProtoToWebInputEventType(InputMessage::Type type) {
17 switch (type) {
18 case InputMessage::Type_GestureScrollBegin:
19 return blink::WebInputEvent::Type::GestureScrollBegin;
20 case InputMessage::Type_GestureScrollEnd:
21 return blink::WebInputEvent::Type::GestureScrollEnd;
22 case InputMessage::Type_GestureScrollUpdate:
23 return blink::WebInputEvent::Type::GestureScrollUpdate;
24 case InputMessage::Type_GestureFlingStart:
25 return blink::WebInputEvent::Type::GestureFlingStart;
26 case InputMessage::Type_GestureFlingCancel:
27 return blink::WebInputEvent::Type::GestureFlingCancel;
28 case InputMessage::Type_GestureShowPress:
29 return blink::WebInputEvent::Type::GestureShowPress;
30 case InputMessage::Type_GestureTap:
31 return blink::WebInputEvent::Type::GestureTap;
32 case InputMessage::Type_GestureTapUnconfirmed:
33 return blink::WebInputEvent::Type::GestureTapUnconfirmed;
34 case InputMessage::Type_GestureTapDown:
35 return blink::WebInputEvent::Type::GestureTapDown;
36 case InputMessage::Type_GestureTapCancel:
37 return blink::WebInputEvent::Type::GestureTapCancel;
38 case InputMessage::Type_GestureDoubleTap:
39 return blink::WebInputEvent::Type::GestureDoubleTap;
40 case InputMessage::Type_GestureTwoFingerTap:
41 return blink::WebInputEvent::Type::GestureTwoFingerTap;
42 case InputMessage::Type_GestureLongPress:
43 return blink::WebInputEvent::Type::GestureLongPress;
44 case InputMessage::Type_GestureLongTap:
45 return blink::WebInputEvent::Type::GestureLongTap;
46 case InputMessage::Type_GesturePinchBegin:
47 return blink::WebInputEvent::Type::GesturePinchBegin;
48 case InputMessage::Type_GesturePinchEnd:
49 return blink::WebInputEvent::Type::GesturePinchEnd;
50 case InputMessage::Type_GesturePinchUpdate:
51 return blink::WebInputEvent::Type::GesturePinchUpdate;
52 case InputMessage::Type_Undefined:
53 default:
54 return blink::WebInputEvent::Type::Undefined;
55 }
56 }
57
58 InputMessage::Type WebInputEventTypeToProto(blink::WebInputEvent::Type type) {
59 switch (type) {
60 case blink::WebInputEvent::Type::GestureScrollBegin:
61 return InputMessage::Type_GestureScrollBegin;
62 case blink::WebInputEvent::Type::GestureScrollEnd:
63 return InputMessage::Type_GestureScrollEnd;
64 case blink::WebInputEvent::Type::GestureScrollUpdate:
65 return InputMessage::Type_GestureScrollUpdate;
66 case blink::WebInputEvent::Type::GestureFlingStart:
67 return InputMessage::Type_GestureFlingStart;
68 case blink::WebInputEvent::Type::GestureFlingCancel:
69 return InputMessage::Type_GestureFlingCancel;
70 case blink::WebInputEvent::Type::GestureShowPress:
71 return InputMessage::Type_GestureShowPress;
72 case blink::WebInputEvent::Type::GestureTap:
73 return InputMessage::Type_GestureTap;
74 case blink::WebInputEvent::Type::GestureTapUnconfirmed:
75 return InputMessage::Type_GestureTapUnconfirmed;
76 case blink::WebInputEvent::Type::GestureTapDown:
77 return InputMessage::Type_GestureTapDown;
78 case blink::WebInputEvent::Type::GestureTapCancel:
79 return InputMessage::Type_GestureTapCancel;
80 case blink::WebInputEvent::Type::GestureDoubleTap:
81 return InputMessage::Type_GestureDoubleTap;
82 case blink::WebInputEvent::Type::GestureTwoFingerTap:
83 return InputMessage::Type_GestureTwoFingerTap;
84 case blink::WebInputEvent::Type::GestureLongPress:
85 return InputMessage::Type_GestureLongPress;
86 case blink::WebInputEvent::Type::GestureLongTap:
87 return InputMessage::Type_GestureLongTap;
88 case blink::WebInputEvent::Type::GesturePinchBegin:
89 return InputMessage::Type_GesturePinchBegin;
90 case blink::WebInputEvent::Type::GesturePinchEnd:
91 return InputMessage::Type_GesturePinchEnd;
92 case blink::WebInputEvent::Type::GesturePinchUpdate:
93 return InputMessage::Type_GesturePinchUpdate;
94 case blink::WebInputEvent::Type::Undefined:
95 default:
96 return InputMessage::Type_Undefined;
97 }
98 }
99
100 blink::WebGestureDevice ProtoToWebGestureDevice(
101 const blimp::WebGestureDevice& type) {
102 switch (type) {
103 case WebGestureDevice::WebGestureDevice_Uninitialized:
104 return blink::WebGestureDevice::WebGestureDeviceUninitialized;
105 case WebGestureDevice::WebGestureDevice_Touchpad:
106 return blink::WebGestureDevice::WebGestureDeviceTouchpad;
107 case WebGestureDevice::WebGestureDevice_Touchscreen:
108 return blink::WebGestureDevice::WebGestureDeviceTouchscreen;
109 }
110 return blink::WebGestureDevice::WebGestureDeviceUninitialized;
111 }
112
113 blimp::WebGestureDevice WebGestureDeviceToProto(
114 const blink::WebGestureDevice& type) {
115 switch (type) {
116 case blink::WebGestureDevice::WebGestureDeviceUninitialized:
117 return WebGestureDevice::WebGestureDevice_Uninitialized;
118 case blink::WebGestureDevice::WebGestureDeviceTouchpad:
119 return WebGestureDevice::WebGestureDevice_Touchpad;
120 case blink::WebGestureDevice::WebGestureDeviceTouchscreen:
121 return WebGestureDevice::WebGestureDevice_Touchscreen;
122 }
123 return WebGestureDevice::WebGestureDevice_Uninitialized;
124 }
125
126 void WebGestureEventToProto(const blink::WebGestureEvent& event,
127 GestureArgs* proto) {
128 proto->set_x(event.x);
129 proto->set_y(event.y);
130 proto->set_global_x(event.globalX);
131 proto->set_global_y(event.globalY);
132 proto->set_source_device(WebGestureDeviceToProto(event.sourceDevice));
133
134 if (event.type == blink::WebInputEvent::GestureTap ||
135 event.type == blink::WebInputEvent::GestureTapUnconfirmed ||
136 event.type == blink::WebInputEvent::GestureDoubleTap) {
137 GestureArgs::Tap* args = proto->mutable_tap();
138 args->set_tap_count(event.data.tap.tapCount);
139 args->set_width(event.data.tap.width);
140 args->set_height(event.data.tap.height);
141 } else if (event.type == blink::WebInputEvent::GestureTapDown) {
142 GestureArgs::TapDown* args = proto->mutable_tap_down();
143 args->set_width(event.data.tapDown.width);
144 args->set_height(event.data.tapDown.height);
145 } else if (event.type == blink::WebInputEvent::GestureShowPress) {
146 GestureArgs::ShowPress* args = proto->mutable_show_press();
147 args->set_width(event.data.showPress.width);
148 args->set_height(event.data.showPress.height);
149 } else if (event.type == blink::WebInputEvent::GestureLongPress) {
150 GestureArgs::LongPress* args = proto->mutable_long_press();
151 args->set_width(event.data.longPress.width);
152 args->set_height(event.data.longPress.height);
153 } else if (event.type == blink::WebInputEvent::GestureTwoFingerTap) {
154 GestureArgs::TwoFingerTap* args = proto->mutable_two_finger_tap();
155 args->set_first_finger_width(event.data.twoFingerTap.firstFingerWidth);
156 args->set_first_finger_height(
157 event.data.twoFingerTap.firstFingerHeight);
158 } else if (event.type == blink::WebInputEvent::GestureScrollBegin) {
159 GestureArgs::ScrollBegin* args = proto->mutable_scroll_begin();
160 args->set_delta_x_hint(event.data.scrollBegin.deltaXHint);
161 args->set_delta_y_hint(event.data.scrollBegin.deltaYHint);
162 args->set_target_viewport(event.data.scrollBegin.targetViewport);
163 } else if (event.type == blink::WebInputEvent::GestureScrollUpdate) {
164 GestureArgs::ScrollUpdate* args = proto->mutable_scroll_update();
165 args->set_delta_x(event.data.scrollUpdate.deltaX);
166 args->set_delta_y(event.data.scrollUpdate.deltaY);
167 args->set_velocity_x(event.data.scrollUpdate.velocityX);
168 args->set_velocity_y(event.data.scrollUpdate.velocityY);
169 args->set_previous_update_in_sequence_prevented(
170 event.data.scrollUpdate.previousUpdateInSequencePrevented);
171 args->set_prevent_propagation(
172 event.data.scrollUpdate.preventPropagation);
173 args->set_inertial(event.data.scrollUpdate.inertial);
174 } else if (event.type == blink::WebInputEvent::GestureFlingStart) {
175 GestureArgs::FlingStart* args = proto->mutable_fling_start();
176 args->set_velocity_x(event.data.flingStart.velocityX);
177 args->set_velocity_y(event.data.flingStart.velocityY);
178 args->set_target_viewport(event.data.flingStart.targetViewport);
179 } else if (event.type == blink::WebInputEvent::GestureFlingCancel) {
180 GestureArgs::FlingCancel* args = proto->mutable_fling_cancel();
181 args->set_prevent_boosting(event.data.flingCancel.preventBoosting);
182 } else if (event.type == blink::WebInputEvent::GesturePinchUpdate) {
183 GestureArgs::PinchUpdate* args = proto->mutable_pinch_update();
184 args->set_zoom_disabled(event.data.pinchUpdate.zoomDisabled);
185 args->set_scale(event.data.pinchUpdate.scale);
186 }
187 }
188
189 scoped_ptr<blink::WebInputEvent> ProtoToWebGestureEvent(
190 const GestureArgs& proto) {
191 scoped_ptr<blink::WebGestureEvent> event(new blink::WebGestureEvent);
192 event->x = proto.x();
193 event->y = proto.y();
194 event->globalX = proto.global_x();
195 event->globalY = proto.global_y();
196 event->sourceDevice = ProtoToWebGestureDevice(proto.source_device());
197
198 if (proto.has_tap()) {
199 event->data.tap.tapCount = proto.tap().tap_count();
200 event->data.tap.width = proto.tap().width();
201 event->data.tap.height = proto.tap().height();
202 } else if (proto.has_tap_down()) {
203 event->data.tapDown.width = proto.tap_down().width();
204 event->data.tapDown.height = proto.tap_down().height();
205 } else if (proto.has_show_press()) {
206 event->data.showPress.width = proto.show_press().width();
207 event->data.showPress.height = proto.show_press().height();
208 } else if (proto.has_long_press()) {
209 event->data.longPress.width = proto.long_press().width();
210 event->data.longPress.height = proto.long_press().height();
211 } else if (proto.has_two_finger_tap()) {
212 event->data.twoFingerTap.firstFingerWidth =
213 proto.two_finger_tap().first_finger_width();
214 event->data.twoFingerTap.firstFingerHeight =
215 proto.two_finger_tap().first_finger_height();
216 } else if (proto.has_scroll_begin()) {
217 event->data.scrollBegin.deltaXHint = proto.scroll_begin().delta_x_hint();
218 event->data.scrollBegin.deltaYHint = proto.scroll_begin().delta_y_hint();
219 event->data.scrollBegin.targetViewport =
220 proto.scroll_begin().target_viewport();
221 } else if (proto.has_scroll_update()) {
222 event->data.scrollUpdate.deltaX = proto.scroll_update().delta_x();
223 event->data.scrollUpdate.deltaY = proto.scroll_update().delta_y();
224 event->data.scrollUpdate.velocityX = proto.scroll_update().velocity_x();
225 event->data.scrollUpdate.velocityY = proto.scroll_update().velocity_y();
226 event->data.scrollUpdate.previousUpdateInSequencePrevented =
227 proto.scroll_update().previous_update_in_sequence_prevented();
228 event->data.scrollUpdate.preventPropagation =
229 proto.scroll_update().prevent_propagation();
230 event->data.scrollUpdate.inertial = proto.scroll_update().inertial();
231 } else if (proto.has_fling_start()) {
232 event->data.flingStart.velocityX = proto.fling_start().velocity_x();
233 event->data.flingStart.velocityY = proto.fling_start().velocity_y();
234 event->data.flingStart.targetViewport =
235 proto.fling_start().target_viewport();
236 } else if (proto.has_fling_cancel()) {
237 event->data.flingCancel.preventBoosting =
238 proto.fling_cancel().prevent_boosting();
239 } else if (proto.has_pinch_update()) {
240 event->data.pinchUpdate.zoomDisabled = proto.pinch_update().zoom_disabled();
241 event->data.pinchUpdate.scale = proto.pinch_update().scale();
242 }
243
244 return event.Pass();
245 }
246
247 } // namespace
248
249 void WebInputEventToProto(const blink::WebInputEvent& event,
250 InputMessage* proto) {
251 // Serialize the common WebInputEvent fields.
252 proto->set_type(WebInputEventTypeToProto(event.type));
253 proto->set_timestamp_seconds(event.timeStampSeconds);
254
255 // Serialize the specific WebInputEvent fields.
256 if (event.type >= blink::WebInputEvent::Type::GestureTypeFirst &&
257 event.type <= blink::WebInputEvent::Type::GestureTypeLast) {
258 WebGestureEventToProto(*static_cast<const blink::WebGestureEvent*>(&event),
259 proto->mutable_gesture());
260 } else {
261 NOTIMPLEMENTED();
262 }
263 }
264
265 scoped_ptr<blink::WebInputEvent> ProtoToWebInputEvent(
266 const InputMessage& proto) {
267 blink::WebInputEvent::Type type = ProtoToWebInputEventType(proto.type());
268
269 scoped_ptr<blink::WebInputEvent> event;
270
271 // Build the specific type of WebInputEvent and deserialize the specific
272 // fields.
273 if (type >= blink::WebInputEvent::Type::GestureTypeFirst &&
274 type <= blink::WebInputEvent::Type::GestureTypeLast) {
275 DCHECK(proto.has_gesture());
276 event = ProtoToWebGestureEvent(proto.gesture()).Pass();
277 } else {
278 NOTIMPLEMENTED();
279 return nullptr;
280 }
281
282 // Deserialize the common WebInputEvent fields.
283 event->type = type;
284 event->timeStampSeconds = proto.timestamp_seconds();
285
286 return event;
287 }
288
289 } // namespace blimp
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698