1 // Copyright 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.
5 #include "content/common/input/input_param_traits.h"
7 #include "content/common/content_param_traits.h"
8 #include "content/common/input/synthetic_pinch_gesture_params.h"
9 #include "content/common/input/synthetic_smooth_scroll_gesture_params.h"
10 #include "content/common/input/web_input_event_traits.h"
11 #include "content/common/input_messages.h"
15 template<typename GestureType
>
16 scoped_ptr
<content::SyntheticGestureParams
> ReadGestureParams(
20 scoped_ptr
<GestureType
> gesture_params(new GestureType
);
21 if (!ReadParam(m
, iter
, gesture_params
.get()))
22 return scoped_ptr
<content::SyntheticGestureParams
>();
24 return gesture_params
.template PassAs
<content::SyntheticGestureParams
>();
28 void ParamTraits
<content::ScopedWebInputEvent
>::Write(Message
* m
,
29 const param_type
& p
) {
30 bool valid_web_event
= !!p
;
31 WriteParam(m
, valid_web_event
);
33 WriteParam(m
, static_cast<WebInputEventPointer
>(p
.get()));
36 bool ParamTraits
<content::ScopedWebInputEvent
>::Read(const Message
* m
,
39 bool valid_web_event
= false;
40 WebInputEventPointer web_event_pointer
= NULL
;
41 if (!ReadParam(m
, iter
, &valid_web_event
) ||
43 !ReadParam(m
, iter
, &web_event_pointer
) ||
47 (*p
) = content::WebInputEventTraits::Clone(*web_event_pointer
);
51 void ParamTraits
<content::ScopedWebInputEvent
>::Log(const param_type
& p
,
53 LogParam(static_cast<WebInputEventPointer
>(p
.get()), l
);
56 void ParamTraits
<content::SyntheticGesturePacket
>::Write(Message
* m
,
57 const param_type
& p
) {
58 DCHECK(p
.gesture_params());
59 WriteParam(m
, p
.gesture_params()->GetGestureType());
60 switch (p
.gesture_params()->GetGestureType()) {
61 case content::SyntheticGestureParams::SMOOTH_SCROLL_GESTURE
:
62 WriteParam(m
, *content::SyntheticSmoothScrollGestureParams::Cast(
65 case content::SyntheticGestureParams::PINCH_GESTURE
:
66 WriteParam(m
, *content::SyntheticPinchGestureParams::Cast(
69 case content::SyntheticGestureParams::TAP_GESTURE
:
70 WriteParam(m
, *content::SyntheticTapGestureParams::Cast(
76 bool ParamTraits
<content::SyntheticGesturePacket
>::Read(const Message
* m
,
79 content::SyntheticGestureParams::GestureType gesture_type
;
80 if (!ReadParam(m
, iter
, &gesture_type
))
82 scoped_ptr
<content::SyntheticGestureParams
> gesture_params
;
83 switch (gesture_type
) {
84 case content::SyntheticGestureParams::SMOOTH_SCROLL_GESTURE
:
86 ReadGestureParams
<content::SyntheticSmoothScrollGestureParams
>(m
,
89 case content::SyntheticGestureParams::PINCH_GESTURE
:
91 ReadGestureParams
<content::SyntheticPinchGestureParams
>(m
, iter
);
93 case content::SyntheticGestureParams::TAP_GESTURE
:
95 ReadGestureParams
<content::SyntheticTapGestureParams
>(m
, iter
);
101 p
->set_gesture_params(gesture_params
.Pass());
102 return p
->gesture_params() != NULL
;
105 void ParamTraits
<content::SyntheticGesturePacket
>::Log(const param_type
& p
,
107 DCHECK(p
.gesture_params());
108 switch (p
.gesture_params()->GetGestureType()) {
109 case content::SyntheticGestureParams::SMOOTH_SCROLL_GESTURE
:
111 *content::SyntheticSmoothScrollGestureParams::Cast(
115 case content::SyntheticGestureParams::PINCH_GESTURE
:
117 *content::SyntheticPinchGestureParams::Cast(p
.gesture_params()),
120 case content::SyntheticGestureParams::TAP_GESTURE
:
122 *content::SyntheticTapGestureParams::Cast(p
.gesture_params()),