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

Side by Side Diff: content/public/common/webkit_param_traits.h

Issue 10980010: Cleanup the IPC param traits structure (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: fix android Created 8 years, 2 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 | Annotate | Revision Log
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 // This file is used to define IPC::ParamTraits<> specializations for a number
6 // of WebKit types so that they can be serialized over IPC. IPC::ParamTraits<>
7 // specializations for basic types (like int and std::string) and types in the
8 // 'base' project can be found in ipc/ipc_message_utils.h. This file contains
9 // specializations for types that are used by the content code, and which need
10 // manual serialization code. This is usually because they're not structs with
11 // public members.
12
13 #ifndef CONTENT_PUBLIC_COMMON_WEBKIT_PARAM_TRAITS_H_
14 #define CONTENT_PUBLIC_COMMON_WEBKIT_PARAM_TRAITS_H_
15
16 #include <string>
17
18 #include "base/memory/ref_counted.h"
19 #include "content/common/content_export.h"
20 #include "ipc/ipc_message_utils.h"
21 #include "third_party/WebKit/Source/Platform/chromium/public/WebData.h"
22 #include "third_party/WebKit/Source/Platform/chromium/public/WebTransformationMa trix.h"
23 #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h"
24 #include "third_party/WebKit/Source/WebKit/chromium/public/WebTextDirection.h"
25 #include "webkit/blob/blob_data.h"
26 #include "webkit/glue/npruntime_util.h"
27 #include "webkit/glue/resource_type.h"
28 #include "webkit/glue/webcursor.h"
29 #include "webkit/glue/window_open_disposition.h"
30 #include "webkit/plugins/webplugininfo.h"
31
32 namespace webkit {
33 namespace forms {
34 struct PasswordForm;
35 }
36 }
37
38 namespace webkit_glue {
39 struct ResourceDevToolsInfo;
40 struct ResourceLoadTimingInfo;
41 }
42
43 // Define the NPVariant_Param struct and its enum here since it needs manual
44 // serialization code.
45 enum NPVariant_ParamEnum {
46 NPVARIANT_PARAM_VOID,
47 NPVARIANT_PARAM_NULL,
48 NPVARIANT_PARAM_BOOL,
49 NPVARIANT_PARAM_INT,
50 NPVARIANT_PARAM_DOUBLE,
51 NPVARIANT_PARAM_STRING,
52 // Used when when the NPObject is running in the caller's process, so we
53 // create an NPObjectProxy in the other process.
54 NPVARIANT_PARAM_SENDER_OBJECT_ROUTING_ID,
55 // Used when the NPObject we're sending is running in the callee's process
56 // (i.e. we have an NPObjectProxy for it). In that case we want the callee
57 // to just use the raw pointer.
58 NPVARIANT_PARAM_RECEIVER_OBJECT_ROUTING_ID,
59 };
60
61 struct NPVariant_Param {
62 NPVariant_Param();
63 ~NPVariant_Param();
64
65 NPVariant_ParamEnum type;
66 bool bool_value;
67 int int_value;
68 double double_value;
69 std::string string_value;
70 int npobject_routing_id;
71 };
72
73 struct NPIdentifier_Param {
74 NPIdentifier_Param();
75 ~NPIdentifier_Param();
76
77 NPIdentifier identifier;
78 };
79
80 namespace IPC {
81
82 template <>
83 struct ParamTraits<WebKit::WebData> {
84 typedef WebKit::WebData param_type;
85 static void Write(Message* m, const param_type& p);
86 static bool Read(const Message* m, PickleIterator* iter, param_type* r);
87 static void Log(const param_type& p, std::string* l);
88 };
89
90 template <>
91 struct ParamTraits<WebKit::WebTransformationMatrix> {
92 typedef WebKit::WebTransformationMatrix param_type;
93 static void Write(Message* m, const param_type& p);
94 static bool Read(const Message* m, PickleIterator* iter, param_type* r);
95 static void Log(const param_type& p, std::string* l);
96 };
97
98 template <>
99 struct ParamTraits<webkit_glue::ResourceLoadTimingInfo> {
100 typedef webkit_glue::ResourceLoadTimingInfo param_type;
101 static void Write(Message* m, const param_type& p);
102 static bool Read(const Message* m, PickleIterator* iter, param_type* r);
103 static void Log(const param_type& p, std::string* l);
104 };
105
106 template <>
107 struct ParamTraits<scoped_refptr<webkit_glue::ResourceDevToolsInfo> > {
108 typedef scoped_refptr<webkit_glue::ResourceDevToolsInfo> param_type;
109 static void Write(Message* m, const param_type& p);
110 static bool Read(const Message* m, PickleIterator* iter, param_type* r);
111 static void Log(const param_type& p, std::string* l);
112 };
113
114 template <>
115 struct ParamTraits<NPVariant_Param> {
116 typedef NPVariant_Param param_type;
117 static void Write(Message* m, const param_type& p);
118 static bool Read(const Message* m, PickleIterator* iter, param_type* r);
119 static void Log(const param_type& p, std::string* l);
120 };
121
122 template <>
123 struct ParamTraits<NPIdentifier_Param> {
124 typedef NPIdentifier_Param param_type;
125 static void Write(Message* m, const param_type& p);
126 static bool Read(const Message* m, PickleIterator* iter, param_type* r);
127 static void Log(const param_type& p, std::string* l);
128 };
129
130 template <>
131 struct ParamTraits<webkit::WebPluginMimeType> {
132 typedef webkit::WebPluginMimeType param_type;
133 static void Write(Message* m, const param_type& p);
134 static bool Read(const Message* m, PickleIterator* iter, param_type* r);
135 static void Log(const param_type& p, std::string* l);
136 };
137
138 template <>
139 struct CONTENT_EXPORT ParamTraits<webkit::WebPluginInfo> {
140 typedef webkit::WebPluginInfo param_type;
141 static void Write(Message* m, const param_type& p);
142 static bool Read(const Message* m, PickleIterator* iter, param_type* r);
143 static void Log(const param_type& p, std::string* l);
144 };
145
146 template <>
147 struct ParamTraits<WebCursor> {
148 typedef WebCursor param_type;
149 static void Write(Message* m, const param_type& p) {
150 p.Serialize(m);
151 }
152 static bool Read(const Message* m, PickleIterator* iter, param_type* r) {
153 return r->Deserialize(iter);
154 }
155 static void Log(const param_type& p, std::string* l) {
156 l->append("<WebCursor>");
157 }
158 };
159
160 template <>
161 struct ParamTraits<WebKit::WebInputEvent::Type> {
162 typedef WebKit::WebInputEvent::Type param_type;
163 static void Write(Message* m, const param_type& p) {
164 m->WriteInt(p);
165 }
166 static bool Read(const Message* m, PickleIterator* iter, param_type* p) {
167 int type;
168 if (!m->ReadInt(iter, &type))
169 return false;
170 *p = static_cast<WebKit::WebInputEvent::Type>(type);
171 return true;
172 }
173 static void Log(const param_type& p, std::string* l) {
174 const char* type;
175 switch (p) {
176 case WebKit::WebInputEvent::MouseDown:
177 type = "MouseDown";
178 break;
179 case WebKit::WebInputEvent::MouseUp:
180 type = "MouseUp";
181 break;
182 case WebKit::WebInputEvent::MouseMove:
183 type = "MouseMove";
184 break;
185 case WebKit::WebInputEvent::MouseLeave:
186 type = "MouseLeave";
187 break;
188 case WebKit::WebInputEvent::MouseEnter:
189 type = "MouseEnter";
190 break;
191 case WebKit::WebInputEvent::MouseWheel:
192 type = "MouseWheel";
193 break;
194 case WebKit::WebInputEvent::RawKeyDown:
195 type = "RawKeyDown";
196 break;
197 case WebKit::WebInputEvent::KeyDown:
198 type = "KeyDown";
199 break;
200 case WebKit::WebInputEvent::KeyUp:
201 type = "KeyUp";
202 break;
203 default:
204 type = "None";
205 break;
206 }
207 LogParam(std::string(type), l);
208 }
209 };
210
211 typedef const WebKit::WebInputEvent* WebInputEventPointer;
212 template <>
213 struct ParamTraits<WebInputEventPointer> {
214 typedef WebInputEventPointer param_type;
215 static void Write(Message* m, const param_type& p) {
216 m->WriteData(reinterpret_cast<const char*>(p), p->size);
217 }
218 // Note: upon read, the event has the lifetime of the message.
219 static bool Read(const Message* m, PickleIterator* iter, param_type* r) {
220 const char* data;
221 int data_length;
222 if (!m->ReadData(iter, &data, &data_length)) {
223 NOTREACHED();
224 return false;
225 }
226 if (data_length < static_cast<int>(sizeof(WebKit::WebInputEvent))) {
227 NOTREACHED();
228 return false;
229 }
230 param_type event = reinterpret_cast<param_type>(data);
231 // Check that the data size matches that of the event (we check the latter
232 // in the delegate).
233 if (data_length != static_cast<int>(event->size)) {
234 NOTREACHED();
235 return false;
236 }
237 *r = event;
238 return true;
239 }
240 static void Log(const param_type& p, std::string* l) {
241 l->append("(");
242 LogParam(p->size, l);
243 l->append(", ");
244 LogParam(p->type, l);
245 l->append(", ");
246 LogParam(p->timeStampSeconds, l);
247 l->append(")");
248 }
249 };
250
251 template <>
252 struct SimilarTypeTraits<WebKit::WebTextDirection> {
253 typedef int Type;
254 };
255
256 template <>
257 struct SimilarTypeTraits<WindowOpenDisposition> {
258 typedef int Type;
259 };
260
261 template <>
262 struct CONTENT_EXPORT ParamTraits<webkit::forms::PasswordForm> {
263 typedef webkit::forms::PasswordForm param_type;
264 static void Write(Message* m, const param_type& p);
265 static bool Read(const Message* m, PickleIterator* iter, param_type* p);
266 static void Log(const param_type& p, std::string* l);
267 };
268
269 } // namespace IPC
270
271 #endif // CONTENT_PUBLIC_COMMON_WEBKIT_PARAM_TRAITS_H_
OLDNEW
« no previous file with comments | « content/public/common/common_param_traits_macros.h ('k') | content/public/common/webkit_param_traits.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698