OLD | NEW |
| (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 // NOTE: New trait definitions that will be used by Chrome Frame must be placed | |
6 // in common_param_traits2.cc. | |
7 | |
8 #include "content/public/common/webkit_param_traits.h" | |
9 | |
10 #include "base/string_number_conversions.h" | |
11 #include "content/public/common/common_param_traits.h" | |
12 #include "content/public/common/content_constants.h" | |
13 #include "third_party/WebKit/Source/WebKit/chromium/public/WebBindings.h" | |
14 #include "webkit/forms/password_form.h" | |
15 #include "webkit/glue/resource_loader_bridge.h" | |
16 #include "webkit/plugins/npapi/plugin_host.h" | |
17 | |
18 NPIdentifier_Param::NPIdentifier_Param() | |
19 : identifier() { | |
20 } | |
21 | |
22 NPIdentifier_Param::~NPIdentifier_Param() { | |
23 } | |
24 | |
25 NPVariant_Param::NPVariant_Param() | |
26 : type(NPVARIANT_PARAM_VOID), | |
27 bool_value(false), | |
28 int_value(0), | |
29 double_value(0), | |
30 npobject_routing_id(-1) { | |
31 } | |
32 | |
33 NPVariant_Param::~NPVariant_Param() { | |
34 } | |
35 | |
36 namespace IPC { | |
37 | |
38 void ParamTraits<WebKit::WebData>::Write(Message* m, const param_type& p) { | |
39 if (p.isEmpty()) { | |
40 m->WriteData(NULL, 0); | |
41 } else { | |
42 m->WriteData(p.data(), p.size()); | |
43 } | |
44 } | |
45 | |
46 bool ParamTraits<WebKit::WebData>::Read( | |
47 const Message* m, PickleIterator* iter, param_type* r) { | |
48 const char *data = NULL; | |
49 int data_size = 0; | |
50 if (!m->ReadData(iter, &data, &data_size) || data_size < 0) | |
51 return false; | |
52 if (data_size) | |
53 r->assign(data, data_size); | |
54 else | |
55 r->reset(); | |
56 return true; | |
57 } | |
58 | |
59 void ParamTraits<WebKit::WebData>::Log(const param_type& p, std::string* l) { | |
60 l->append("(WebData of size "); | |
61 LogParam(p.size(), l); | |
62 l->append(")"); | |
63 } | |
64 | |
65 void ParamTraits<WebKit::WebTransformationMatrix>::Write( | |
66 Message* m, const param_type& p) { | |
67 WriteParam(m, p.m11()); | |
68 WriteParam(m, p.m12()); | |
69 WriteParam(m, p.m13()); | |
70 WriteParam(m, p.m14()); | |
71 WriteParam(m, p.m21()); | |
72 WriteParam(m, p.m22()); | |
73 WriteParam(m, p.m23()); | |
74 WriteParam(m, p.m24()); | |
75 WriteParam(m, p.m31()); | |
76 WriteParam(m, p.m32()); | |
77 WriteParam(m, p.m33()); | |
78 WriteParam(m, p.m34()); | |
79 WriteParam(m, p.m41()); | |
80 WriteParam(m, p.m42()); | |
81 WriteParam(m, p.m43()); | |
82 WriteParam(m, p.m44()); | |
83 } | |
84 | |
85 bool ParamTraits<WebKit::WebTransformationMatrix>::Read( | |
86 const Message* m, PickleIterator* iter, param_type* r) { | |
87 double m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, | |
88 m41, m42, m43, m44; | |
89 bool success = | |
90 ReadParam(m, iter, &m11) && | |
91 ReadParam(m, iter, &m12) && | |
92 ReadParam(m, iter, &m13) && | |
93 ReadParam(m, iter, &m14) && | |
94 ReadParam(m, iter, &m21) && | |
95 ReadParam(m, iter, &m22) && | |
96 ReadParam(m, iter, &m23) && | |
97 ReadParam(m, iter, &m24) && | |
98 ReadParam(m, iter, &m31) && | |
99 ReadParam(m, iter, &m32) && | |
100 ReadParam(m, iter, &m33) && | |
101 ReadParam(m, iter, &m34) && | |
102 ReadParam(m, iter, &m41) && | |
103 ReadParam(m, iter, &m42) && | |
104 ReadParam(m, iter, &m43) && | |
105 ReadParam(m, iter, &m44); | |
106 | |
107 if (success) { | |
108 r->setM11(m11); | |
109 r->setM12(m12); | |
110 r->setM13(m13); | |
111 r->setM14(m14); | |
112 r->setM21(m21); | |
113 r->setM22(m22); | |
114 r->setM23(m23); | |
115 r->setM24(m24); | |
116 r->setM31(m31); | |
117 r->setM32(m32); | |
118 r->setM33(m33); | |
119 r->setM34(m34); | |
120 r->setM41(m41); | |
121 r->setM42(m42); | |
122 r->setM43(m43); | |
123 r->setM44(m44); | |
124 } | |
125 | |
126 return success; | |
127 } | |
128 | |
129 void ParamTraits<WebKit::WebTransformationMatrix>::Log( | |
130 const param_type& p, std::string* l) { | |
131 l->append("("); | |
132 LogParam(p.m11(), l); | |
133 l->append(", "); | |
134 LogParam(p.m12(), l); | |
135 l->append(", "); | |
136 LogParam(p.m13(), l); | |
137 l->append(", "); | |
138 LogParam(p.m14(), l); | |
139 l->append(", "); | |
140 LogParam(p.m21(), l); | |
141 l->append(", "); | |
142 LogParam(p.m22(), l); | |
143 l->append(", "); | |
144 LogParam(p.m23(), l); | |
145 l->append(", "); | |
146 LogParam(p.m24(), l); | |
147 l->append(", "); | |
148 LogParam(p.m31(), l); | |
149 l->append(", "); | |
150 LogParam(p.m32(), l); | |
151 l->append(", "); | |
152 LogParam(p.m33(), l); | |
153 l->append(", "); | |
154 LogParam(p.m34(), l); | |
155 l->append(", "); | |
156 LogParam(p.m41(), l); | |
157 l->append(", "); | |
158 LogParam(p.m42(), l); | |
159 l->append(", "); | |
160 LogParam(p.m43(), l); | |
161 l->append(", "); | |
162 LogParam(p.m44(), l); | |
163 l->append(") "); | |
164 } | |
165 | |
166 void ParamTraits<webkit_glue::ResourceLoadTimingInfo>::Write( | |
167 Message* m, const param_type& p) { | |
168 WriteParam(m, p.base_time.is_null()); | |
169 if (p.base_time.is_null()) | |
170 return; | |
171 WriteParam(m, p.base_ticks); | |
172 WriteParam(m, p.base_time); | |
173 WriteParam(m, p.proxy_start); | |
174 WriteParam(m, p.proxy_end); | |
175 WriteParam(m, p.dns_start); | |
176 WriteParam(m, p.dns_end); | |
177 WriteParam(m, p.connect_start); | |
178 WriteParam(m, p.connect_end); | |
179 WriteParam(m, p.ssl_start); | |
180 WriteParam(m, p.ssl_end); | |
181 WriteParam(m, p.send_start); | |
182 WriteParam(m, p.send_end); | |
183 WriteParam(m, p.receive_headers_start); | |
184 WriteParam(m, p.receive_headers_end); | |
185 } | |
186 | |
187 bool ParamTraits<webkit_glue::ResourceLoadTimingInfo>::Read( | |
188 const Message* m, PickleIterator* iter, param_type* r) { | |
189 bool is_null; | |
190 if (!ReadParam(m, iter, &is_null)) | |
191 return false; | |
192 if (is_null) | |
193 return true; | |
194 | |
195 return | |
196 ReadParam(m, iter, &r->base_ticks) && | |
197 ReadParam(m, iter, &r->base_time) && | |
198 ReadParam(m, iter, &r->proxy_start) && | |
199 ReadParam(m, iter, &r->proxy_end) && | |
200 ReadParam(m, iter, &r->dns_start) && | |
201 ReadParam(m, iter, &r->dns_end) && | |
202 ReadParam(m, iter, &r->connect_start) && | |
203 ReadParam(m, iter, &r->connect_end) && | |
204 ReadParam(m, iter, &r->ssl_start) && | |
205 ReadParam(m, iter, &r->ssl_end) && | |
206 ReadParam(m, iter, &r->send_start) && | |
207 ReadParam(m, iter, &r->send_end) && | |
208 ReadParam(m, iter, &r->receive_headers_start) && | |
209 ReadParam(m, iter, &r->receive_headers_end); | |
210 } | |
211 | |
212 void ParamTraits<webkit_glue::ResourceLoadTimingInfo>::Log(const param_type& p, | |
213 std::string* l) { | |
214 l->append("("); | |
215 LogParam(p.base_ticks, l); | |
216 l->append(", "); | |
217 LogParam(p.base_time, l); | |
218 l->append(", "); | |
219 LogParam(p.proxy_start, l); | |
220 l->append(", "); | |
221 LogParam(p.proxy_end, l); | |
222 l->append(", "); | |
223 LogParam(p.dns_start, l); | |
224 l->append(", "); | |
225 LogParam(p.dns_end, l); | |
226 l->append(", "); | |
227 LogParam(p.connect_start, l); | |
228 l->append(", "); | |
229 LogParam(p.connect_end, l); | |
230 l->append(", "); | |
231 LogParam(p.ssl_start, l); | |
232 l->append(", "); | |
233 LogParam(p.ssl_end, l); | |
234 l->append(", "); | |
235 LogParam(p.send_start, l); | |
236 l->append(", "); | |
237 LogParam(p.send_end, l); | |
238 l->append(", "); | |
239 LogParam(p.receive_headers_start, l); | |
240 l->append(", "); | |
241 LogParam(p.receive_headers_end, l); | |
242 l->append(")"); | |
243 } | |
244 | |
245 void ParamTraits<scoped_refptr<webkit_glue::ResourceDevToolsInfo> >::Write( | |
246 Message* m, const param_type& p) { | |
247 WriteParam(m, p.get() != NULL); | |
248 if (p.get()) { | |
249 WriteParam(m, p->http_status_code); | |
250 WriteParam(m, p->http_status_text); | |
251 WriteParam(m, p->request_headers); | |
252 WriteParam(m, p->response_headers); | |
253 WriteParam(m, p->request_headers_text); | |
254 WriteParam(m, p->response_headers_text); | |
255 } | |
256 } | |
257 | |
258 bool ParamTraits<scoped_refptr<webkit_glue::ResourceDevToolsInfo> >::Read( | |
259 const Message* m, PickleIterator* iter, param_type* r) { | |
260 bool has_object; | |
261 if (!ReadParam(m, iter, &has_object)) | |
262 return false; | |
263 if (!has_object) | |
264 return true; | |
265 *r = new webkit_glue::ResourceDevToolsInfo(); | |
266 return | |
267 ReadParam(m, iter, &(*r)->http_status_code) && | |
268 ReadParam(m, iter, &(*r)->http_status_text) && | |
269 ReadParam(m, iter, &(*r)->request_headers) && | |
270 ReadParam(m, iter, &(*r)->response_headers) && | |
271 ReadParam(m, iter, &(*r)->request_headers_text) && | |
272 ReadParam(m, iter, &(*r)->response_headers_text); | |
273 } | |
274 | |
275 void ParamTraits<scoped_refptr<webkit_glue::ResourceDevToolsInfo> >::Log( | |
276 const param_type& p, std::string* l) { | |
277 l->append("("); | |
278 if (p) { | |
279 LogParam(p->request_headers, l); | |
280 l->append(", "); | |
281 LogParam(p->response_headers, l); | |
282 } | |
283 l->append(")"); | |
284 } | |
285 | |
286 void ParamTraits<NPVariant_Param>::Write(Message* m, const param_type& p) { | |
287 WriteParam(m, static_cast<int>(p.type)); | |
288 if (p.type == NPVARIANT_PARAM_BOOL) { | |
289 WriteParam(m, p.bool_value); | |
290 } else if (p.type == NPVARIANT_PARAM_INT) { | |
291 WriteParam(m, p.int_value); | |
292 } else if (p.type == NPVARIANT_PARAM_DOUBLE) { | |
293 WriteParam(m, p.double_value); | |
294 } else if (p.type == NPVARIANT_PARAM_STRING) { | |
295 WriteParam(m, p.string_value); | |
296 } else if (p.type == NPVARIANT_PARAM_SENDER_OBJECT_ROUTING_ID || | |
297 p.type == NPVARIANT_PARAM_RECEIVER_OBJECT_ROUTING_ID) { | |
298 // This is the routing id used to connect NPObjectProxy in the other | |
299 // process with NPObjectStub in this process or to identify the raw | |
300 // npobject pointer to be used in the callee process. | |
301 WriteParam(m, p.npobject_routing_id); | |
302 } else { | |
303 DCHECK(p.type == NPVARIANT_PARAM_VOID || p.type == NPVARIANT_PARAM_NULL); | |
304 } | |
305 } | |
306 | |
307 bool ParamTraits<NPVariant_Param>::Read(const Message* m, | |
308 PickleIterator* iter, | |
309 param_type* r) { | |
310 int type; | |
311 if (!ReadParam(m, iter, &type)) | |
312 return false; | |
313 | |
314 bool result = false; | |
315 r->type = static_cast<NPVariant_ParamEnum>(type); | |
316 if (r->type == NPVARIANT_PARAM_BOOL) { | |
317 result = ReadParam(m, iter, &r->bool_value); | |
318 } else if (r->type == NPVARIANT_PARAM_INT) { | |
319 result = ReadParam(m, iter, &r->int_value); | |
320 } else if (r->type == NPVARIANT_PARAM_DOUBLE) { | |
321 result = ReadParam(m, iter, &r->double_value); | |
322 } else if (r->type == NPVARIANT_PARAM_STRING) { | |
323 result = ReadParam(m, iter, &r->string_value); | |
324 } else if (r->type == NPVARIANT_PARAM_SENDER_OBJECT_ROUTING_ID || | |
325 r->type == NPVARIANT_PARAM_RECEIVER_OBJECT_ROUTING_ID) { | |
326 result = ReadParam(m, iter, &r->npobject_routing_id); | |
327 } else if ((r->type == NPVARIANT_PARAM_VOID) || | |
328 (r->type == NPVARIANT_PARAM_NULL)) { | |
329 result = true; | |
330 } else { | |
331 NOTREACHED(); | |
332 } | |
333 | |
334 return result; | |
335 } | |
336 | |
337 void ParamTraits<NPVariant_Param>::Log(const param_type& p, std::string* l) { | |
338 l->append(StringPrintf("NPVariant_Param(%d, ", static_cast<int>(p.type))); | |
339 if (p.type == NPVARIANT_PARAM_BOOL) { | |
340 LogParam(p.bool_value, l); | |
341 } else if (p.type == NPVARIANT_PARAM_INT) { | |
342 LogParam(p.int_value, l); | |
343 } else if (p.type == NPVARIANT_PARAM_DOUBLE) { | |
344 LogParam(p.double_value, l); | |
345 } else if (p.type == NPVARIANT_PARAM_STRING) { | |
346 LogParam(p.string_value, l); | |
347 } else if (p.type == NPVARIANT_PARAM_SENDER_OBJECT_ROUTING_ID || | |
348 p.type == NPVARIANT_PARAM_RECEIVER_OBJECT_ROUTING_ID) { | |
349 LogParam(p.npobject_routing_id, l); | |
350 } else { | |
351 l->append("<none>"); | |
352 } | |
353 l->append(")"); | |
354 } | |
355 | |
356 void ParamTraits<NPIdentifier_Param>::Write(Message* m, const param_type& p) { | |
357 webkit_glue::SerializeNPIdentifier(p.identifier, m); | |
358 } | |
359 | |
360 bool ParamTraits<NPIdentifier_Param>::Read(const Message* m, | |
361 PickleIterator* iter, | |
362 param_type* r) { | |
363 return webkit_glue::DeserializeNPIdentifier(iter, &r->identifier); | |
364 } | |
365 | |
366 void ParamTraits<NPIdentifier_Param>::Log(const param_type& p, std::string* l) { | |
367 if (WebKit::WebBindings::identifierIsString(p.identifier)) { | |
368 NPUTF8* str = WebKit::WebBindings::utf8FromIdentifier(p.identifier); | |
369 l->append(str); | |
370 webkit::npapi::PluginHost::Singleton()->host_functions()->memfree(str); | |
371 } else { | |
372 l->append(base::IntToString( | |
373 WebKit::WebBindings::intFromIdentifier(p.identifier))); | |
374 } | |
375 } | |
376 | |
377 void ParamTraits<webkit::WebPluginMimeType>::Write(Message* m, | |
378 const param_type& p) { | |
379 WriteParam(m, p.mime_type); | |
380 WriteParam(m, p.file_extensions); | |
381 WriteParam(m, p.description); | |
382 WriteParam(m, p.additional_param_names); | |
383 WriteParam(m, p.additional_param_values); | |
384 } | |
385 | |
386 bool ParamTraits<webkit::WebPluginMimeType>::Read(const Message* m, | |
387 PickleIterator* iter, | |
388 param_type* p) { | |
389 return | |
390 ReadParam(m, iter, &p->mime_type) && | |
391 ReadParam(m, iter, &p->file_extensions) && | |
392 ReadParam(m, iter, &p->description) && | |
393 ReadParam(m, iter, &p->additional_param_names) && | |
394 ReadParam(m, iter, &p->additional_param_values); | |
395 } | |
396 | |
397 void ParamTraits<webkit::WebPluginMimeType>::Log( | |
398 const param_type& p, std::string* l) { | |
399 l->append("("); | |
400 LogParam(p.mime_type, l); l->append(", "); | |
401 LogParam(p.file_extensions, l); l->append(", "); | |
402 LogParam(p.description, l); l->append(", "); | |
403 LogParam(p.additional_param_names, l); l->append(", "); | |
404 LogParam(p.additional_param_values, l); | |
405 l->append(")"); | |
406 } | |
407 | |
408 void ParamTraits<webkit::WebPluginInfo>::Write(Message* m, | |
409 const param_type& p) { | |
410 WriteParam(m, p.name); | |
411 WriteParam(m, p.path); | |
412 WriteParam(m, p.version); | |
413 WriteParam(m, p.desc); | |
414 WriteParam(m, p.mime_types); | |
415 WriteParam(m, p.type); | |
416 } | |
417 | |
418 bool ParamTraits<webkit::WebPluginInfo>::Read(const Message* m, | |
419 PickleIterator* iter, | |
420 param_type* p) { | |
421 return | |
422 ReadParam(m, iter, &p->name) && | |
423 ReadParam(m, iter, &p->path) && | |
424 ReadParam(m, iter, &p->version) && | |
425 ReadParam(m, iter, &p->desc) && | |
426 ReadParam(m, iter, &p->mime_types) && | |
427 ReadParam(m, iter, &p->type); | |
428 } | |
429 void ParamTraits<webkit::WebPluginInfo>::Log(const param_type& p, | |
430 std::string* l) { | |
431 l->append("("); | |
432 LogParam(p.name, l); l->append(", "); | |
433 LogParam(p.path, l); l->append(", "); | |
434 LogParam(p.version, l); l->append(", "); | |
435 LogParam(p.desc, l); l->append(", "); | |
436 LogParam(p.mime_types, l); l->append(", "); | |
437 LogParam(p.type, l); | |
438 l->append(")"); | |
439 } | |
440 | |
441 void ParamTraits<webkit::forms::PasswordForm>::Write(Message* m, | |
442 const param_type& p) { | |
443 WriteParam(m, p.signon_realm); | |
444 WriteParam(m, p.origin); | |
445 WriteParam(m, p.action); | |
446 WriteParam(m, p.submit_element); | |
447 WriteParam(m, p.username_element); | |
448 WriteParam(m, p.username_value); | |
449 WriteParam(m, p.password_element); | |
450 WriteParam(m, p.password_value); | |
451 WriteParam(m, p.old_password_element); | |
452 WriteParam(m, p.old_password_value); | |
453 WriteParam(m, p.ssl_valid); | |
454 WriteParam(m, p.preferred); | |
455 WriteParam(m, p.blacklisted_by_user); | |
456 } | |
457 | |
458 bool ParamTraits<webkit::forms::PasswordForm>::Read(const Message* m, | |
459 PickleIterator* iter, | |
460 param_type* p) { | |
461 return | |
462 ReadParam(m, iter, &p->signon_realm) && | |
463 ReadParam(m, iter, &p->origin) && | |
464 ReadParam(m, iter, &p->action) && | |
465 ReadParam(m, iter, &p->submit_element) && | |
466 ReadParam(m, iter, &p->username_element) && | |
467 ReadParam(m, iter, &p->username_value) && | |
468 ReadParam(m, iter, &p->password_element) && | |
469 ReadParam(m, iter, &p->password_value) && | |
470 ReadParam(m, iter, &p->old_password_element) && | |
471 ReadParam(m, iter, &p->old_password_value) && | |
472 ReadParam(m, iter, &p->ssl_valid) && | |
473 ReadParam(m, iter, &p->preferred) && | |
474 ReadParam(m, iter, &p->blacklisted_by_user); | |
475 } | |
476 void ParamTraits<webkit::forms::PasswordForm>::Log(const param_type& p, | |
477 std::string* l) { | |
478 l->append("<PasswordForm>"); | |
479 } | |
480 | |
481 } // namespace IPC | |
OLD | NEW |