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

Side by Side Diff: ipc/ipc_message_utils.cc

Issue 1659003003: IPC::Message -> base::Pickle (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: export base::Pickle::Attachment Created 4 years, 10 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ipc/ipc_message_utils.h" 5 #include "ipc/ipc_message_utils.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 base::StringPrintf("[%02X]", static_cast<unsigned char>(data[i]))); 60 base::StringPrintf("[%02X]", static_cast<unsigned char>(data[i])));
61 } 61 }
62 if (data.size() > kMaxBytesToLog) { 62 if (data.size() > kMaxBytesToLog) {
63 out->append(base::StringPrintf( 63 out->append(base::StringPrintf(
64 " and %u more bytes", 64 " and %u more bytes",
65 static_cast<unsigned>(data.size() - kMaxBytesToLog))); 65 static_cast<unsigned>(data.size() - kMaxBytesToLog)));
66 } 66 }
67 #endif 67 #endif
68 } 68 }
69 69
70 bool ReadValue(const Message* m, 70 bool ReadValue(const base::Pickle* m,
71 base::PickleIterator* iter, 71 base::PickleIterator* iter,
72 base::Value** value, 72 base::Value** value,
73 int recursion); 73 int recursion);
74 74
75 void WriteValue(Message* m, const base::Value* value, int recursion) { 75 void WriteValue(base::Pickle* m, const base::Value* value, int recursion) {
76 bool result; 76 bool result;
77 if (recursion > kMaxRecursionDepth) { 77 if (recursion > kMaxRecursionDepth) {
78 LOG(WARNING) << "Max recursion depth hit in WriteValue."; 78 LOG(WARNING) << "Max recursion depth hit in WriteValue.";
79 return; 79 return;
80 } 80 }
81 81
82 m->WriteInt(value->GetType()); 82 m->WriteInt(value->GetType());
83 83
84 switch (value->GetType()) { 84 switch (value->GetType()) {
85 case base::Value::TYPE_NULL: 85 case base::Value::TYPE_NULL:
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 it != list->end(); ++it) { 138 it != list->end(); ++it) {
139 WriteValue(m, *it, recursion + 1); 139 WriteValue(m, *it, recursion + 1);
140 } 140 }
141 break; 141 break;
142 } 142 }
143 } 143 }
144 } 144 }
145 145
146 // Helper for ReadValue that reads a DictionaryValue into a pre-allocated 146 // Helper for ReadValue that reads a DictionaryValue into a pre-allocated
147 // object. 147 // object.
148 bool ReadDictionaryValue(const Message* m, 148 bool ReadDictionaryValue(const base::Pickle* m,
149 base::PickleIterator* iter, 149 base::PickleIterator* iter,
150 base::DictionaryValue* value, 150 base::DictionaryValue* value,
151 int recursion) { 151 int recursion) {
152 int size; 152 int size;
153 if (!ReadParam(m, iter, &size)) 153 if (!ReadParam(m, iter, &size))
154 return false; 154 return false;
155 155
156 for (int i = 0; i < size; ++i) { 156 for (int i = 0; i < size; ++i) {
157 std::string key; 157 std::string key;
158 base::Value* subval; 158 base::Value* subval;
159 if (!ReadParam(m, iter, &key) || 159 if (!ReadParam(m, iter, &key) ||
160 !ReadValue(m, iter, &subval, recursion + 1)) 160 !ReadValue(m, iter, &subval, recursion + 1))
161 return false; 161 return false;
162 value->SetWithoutPathExpansion(key, subval); 162 value->SetWithoutPathExpansion(key, subval);
163 } 163 }
164 164
165 return true; 165 return true;
166 } 166 }
167 167
168 // Helper for ReadValue that reads a ReadListValue into a pre-allocated 168 // Helper for ReadValue that reads a ReadListValue into a pre-allocated
169 // object. 169 // object.
170 bool ReadListValue(const Message* m, 170 bool ReadListValue(const base::Pickle* m,
171 base::PickleIterator* iter, 171 base::PickleIterator* iter,
172 base::ListValue* value, 172 base::ListValue* value,
173 int recursion) { 173 int recursion) {
174 int size; 174 int size;
175 if (!ReadParam(m, iter, &size)) 175 if (!ReadParam(m, iter, &size))
176 return false; 176 return false;
177 177
178 for (int i = 0; i < size; ++i) { 178 for (int i = 0; i < size; ++i) {
179 base::Value* subval; 179 base::Value* subval;
180 if (!ReadValue(m, iter, &subval, recursion + 1)) 180 if (!ReadValue(m, iter, &subval, recursion + 1))
181 return false; 181 return false;
182 value->Set(i, subval); 182 value->Set(i, subval);
183 } 183 }
184 184
185 return true; 185 return true;
186 } 186 }
187 187
188 bool ReadValue(const Message* m, 188 bool ReadValue(const base::Pickle* m,
189 base::PickleIterator* iter, 189 base::PickleIterator* iter,
190 base::Value** value, 190 base::Value** value,
191 int recursion) { 191 int recursion) {
192 if (recursion > kMaxRecursionDepth) { 192 if (recursion > kMaxRecursionDepth) {
193 LOG(WARNING) << "Max recursion depth hit in ReadValue."; 193 LOG(WARNING) << "Max recursion depth hit in ReadValue.";
194 return false; 194 return false;
195 } 195 }
196 196
197 int type; 197 int type;
198 if (!ReadParam(m, iter, &type)) 198 if (!ReadParam(m, iter, &type))
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 dispatch(0) { 271 dispatch(0) {
272 } 272 }
273 273
274 LogData::~LogData() { 274 LogData::~LogData() {
275 } 275 }
276 276
277 void ParamTraits<bool>::Log(const param_type& p, std::string* l) { 277 void ParamTraits<bool>::Log(const param_type& p, std::string* l) {
278 l->append(p ? "true" : "false"); 278 l->append(p ? "true" : "false");
279 } 279 }
280 280
281 void ParamTraits<signed char>::Write(Message* m, const param_type& p) { 281 void ParamTraits<signed char>::Write(base::Pickle* m, const param_type& p) {
282 m->WriteBytes(&p, sizeof(param_type)); 282 m->WriteBytes(&p, sizeof(param_type));
283 } 283 }
284 284
285 bool ParamTraits<signed char>::Read(const Message* m, 285 bool ParamTraits<signed char>::Read(const base::Pickle* m,
286 base::PickleIterator* iter, 286 base::PickleIterator* iter,
287 param_type* r) { 287 param_type* r) {
288 const char* data; 288 const char* data;
289 if (!iter->ReadBytes(&data, sizeof(param_type))) 289 if (!iter->ReadBytes(&data, sizeof(param_type)))
290 return false; 290 return false;
291 memcpy(r, data, sizeof(param_type)); 291 memcpy(r, data, sizeof(param_type));
292 return true; 292 return true;
293 } 293 }
294 294
295 void ParamTraits<signed char>::Log(const param_type& p, std::string* l) { 295 void ParamTraits<signed char>::Log(const param_type& p, std::string* l) {
296 l->append(base::IntToString(p)); 296 l->append(base::IntToString(p));
297 } 297 }
298 298
299 void ParamTraits<unsigned char>::Write(Message* m, const param_type& p) { 299 void ParamTraits<unsigned char>::Write(base::Pickle* m, const param_type& p) {
300 m->WriteBytes(&p, sizeof(param_type)); 300 m->WriteBytes(&p, sizeof(param_type));
301 } 301 }
302 302
303 bool ParamTraits<unsigned char>::Read(const Message* m, 303 bool ParamTraits<unsigned char>::Read(const base::Pickle* m,
304 base::PickleIterator* iter, 304 base::PickleIterator* iter,
305 param_type* r) { 305 param_type* r) {
306 const char* data; 306 const char* data;
307 if (!iter->ReadBytes(&data, sizeof(param_type))) 307 if (!iter->ReadBytes(&data, sizeof(param_type)))
308 return false; 308 return false;
309 memcpy(r, data, sizeof(param_type)); 309 memcpy(r, data, sizeof(param_type));
310 return true; 310 return true;
311 } 311 }
312 312
313 void ParamTraits<unsigned char>::Log(const param_type& p, std::string* l) { 313 void ParamTraits<unsigned char>::Log(const param_type& p, std::string* l) {
314 l->append(base::UintToString(p)); 314 l->append(base::UintToString(p));
315 } 315 }
316 316
317 void ParamTraits<unsigned short>::Write(Message* m, const param_type& p) { 317 void ParamTraits<unsigned short>::Write(base::Pickle* m, const param_type& p) {
318 m->WriteBytes(&p, sizeof(param_type)); 318 m->WriteBytes(&p, sizeof(param_type));
319 } 319 }
320 320
321 bool ParamTraits<unsigned short>::Read(const Message* m, 321 bool ParamTraits<unsigned short>::Read(const base::Pickle* m,
322 base::PickleIterator* iter, 322 base::PickleIterator* iter,
323 param_type* r) { 323 param_type* r) {
324 const char* data; 324 const char* data;
325 if (!iter->ReadBytes(&data, sizeof(param_type))) 325 if (!iter->ReadBytes(&data, sizeof(param_type)))
326 return false; 326 return false;
327 memcpy(r, data, sizeof(param_type)); 327 memcpy(r, data, sizeof(param_type));
328 return true; 328 return true;
329 } 329 }
330 330
331 void ParamTraits<unsigned short>::Log(const param_type& p, std::string* l) { 331 void ParamTraits<unsigned short>::Log(const param_type& p, std::string* l) {
(...skipping 21 matching lines...) Expand all
353 } 353 }
354 354
355 void ParamTraits<unsigned long long>::Log(const param_type& p, std::string* l) { 355 void ParamTraits<unsigned long long>::Log(const param_type& p, std::string* l) {
356 l->append(base::Uint64ToString(p)); 356 l->append(base::Uint64ToString(p));
357 } 357 }
358 358
359 void ParamTraits<float>::Log(const param_type& p, std::string* l) { 359 void ParamTraits<float>::Log(const param_type& p, std::string* l) {
360 l->append(base::StringPrintf("%e", p)); 360 l->append(base::StringPrintf("%e", p));
361 } 361 }
362 362
363 void ParamTraits<double>::Write(Message* m, const param_type& p) { 363 void ParamTraits<double>::Write(base::Pickle* m, const param_type& p) {
364 m->WriteBytes(reinterpret_cast<const char*>(&p), sizeof(param_type)); 364 m->WriteBytes(reinterpret_cast<const char*>(&p), sizeof(param_type));
365 } 365 }
366 366
367 bool ParamTraits<double>::Read(const Message* m, 367 bool ParamTraits<double>::Read(const base::Pickle* m,
368 base::PickleIterator* iter, 368 base::PickleIterator* iter,
369 param_type* r) { 369 param_type* r) {
370 const char *data; 370 const char *data;
371 if (!iter->ReadBytes(&data, sizeof(*r))) { 371 if (!iter->ReadBytes(&data, sizeof(*r))) {
372 NOTREACHED(); 372 NOTREACHED();
373 return false; 373 return false;
374 } 374 }
375 memcpy(r, data, sizeof(param_type)); 375 memcpy(r, data, sizeof(param_type));
376 return true; 376 return true;
377 } 377 }
378 378
379 void ParamTraits<double>::Log(const param_type& p, std::string* l) { 379 void ParamTraits<double>::Log(const param_type& p, std::string* l) {
380 l->append(base::StringPrintf("%e", p)); 380 l->append(base::StringPrintf("%e", p));
381 } 381 }
382 382
383 383
384 void ParamTraits<std::string>::Log(const param_type& p, std::string* l) { 384 void ParamTraits<std::string>::Log(const param_type& p, std::string* l) {
385 l->append(p); 385 l->append(p);
386 } 386 }
387 387
388 void ParamTraits<base::string16>::Log(const param_type& p, std::string* l) { 388 void ParamTraits<base::string16>::Log(const param_type& p, std::string* l) {
389 l->append(base::UTF16ToUTF8(p)); 389 l->append(base::UTF16ToUTF8(p));
390 } 390 }
391 391
392 void ParamTraits<std::vector<char> >::Write(Message* m, const param_type& p) { 392 void ParamTraits<std::vector<char>>::Write(base::Pickle* m,
393 const param_type& p) {
393 if (p.empty()) { 394 if (p.empty()) {
394 m->WriteData(NULL, 0); 395 m->WriteData(NULL, 0);
395 } else { 396 } else {
396 m->WriteData(&p.front(), static_cast<int>(p.size())); 397 m->WriteData(&p.front(), static_cast<int>(p.size()));
397 } 398 }
398 } 399 }
399 400
400 bool ParamTraits<std::vector<char>>::Read(const Message* m, 401 bool ParamTraits<std::vector<char>>::Read(const base::Pickle* m,
401 base::PickleIterator* iter, 402 base::PickleIterator* iter,
402 param_type* r) { 403 param_type* r) {
403 const char *data; 404 const char *data;
404 int data_size = 0; 405 int data_size = 0;
405 if (!iter->ReadData(&data, &data_size) || data_size < 0) 406 if (!iter->ReadData(&data, &data_size) || data_size < 0)
406 return false; 407 return false;
407 r->resize(data_size); 408 r->resize(data_size);
408 if (data_size) 409 if (data_size)
409 memcpy(&r->front(), data, data_size); 410 memcpy(&r->front(), data, data_size);
410 return true; 411 return true;
411 } 412 }
412 413
413 void ParamTraits<std::vector<char> >::Log(const param_type& p, std::string* l) { 414 void ParamTraits<std::vector<char> >::Log(const param_type& p, std::string* l) {
414 LogBytes(p, l); 415 LogBytes(p, l);
415 } 416 }
416 417
417 void ParamTraits<std::vector<unsigned char> >::Write(Message* m, 418 void ParamTraits<std::vector<unsigned char>>::Write(base::Pickle* m,
418 const param_type& p) { 419 const param_type& p) {
419 if (p.empty()) { 420 if (p.empty()) {
420 m->WriteData(NULL, 0); 421 m->WriteData(NULL, 0);
421 } else { 422 } else {
422 m->WriteData(reinterpret_cast<const char*>(&p.front()), 423 m->WriteData(reinterpret_cast<const char*>(&p.front()),
423 static_cast<int>(p.size())); 424 static_cast<int>(p.size()));
424 } 425 }
425 } 426 }
426 427
427 bool ParamTraits<std::vector<unsigned char>>::Read(const Message* m, 428 bool ParamTraits<std::vector<unsigned char>>::Read(const base::Pickle* m,
428 base::PickleIterator* iter, 429 base::PickleIterator* iter,
429 param_type* r) { 430 param_type* r) {
430 const char *data; 431 const char *data;
431 int data_size = 0; 432 int data_size = 0;
432 if (!iter->ReadData(&data, &data_size) || data_size < 0) 433 if (!iter->ReadData(&data, &data_size) || data_size < 0)
433 return false; 434 return false;
434 r->resize(data_size); 435 r->resize(data_size);
435 if (data_size) 436 if (data_size)
436 memcpy(&r->front(), data, data_size); 437 memcpy(&r->front(), data, data_size);
437 return true; 438 return true;
438 } 439 }
439 440
440 void ParamTraits<std::vector<unsigned char> >::Log(const param_type& p, 441 void ParamTraits<std::vector<unsigned char> >::Log(const param_type& p,
441 std::string* l) { 442 std::string* l) {
442 LogBytes(p, l); 443 LogBytes(p, l);
443 } 444 }
444 445
445 void ParamTraits<std::vector<bool> >::Write(Message* m, const param_type& p) { 446 void ParamTraits<std::vector<bool>>::Write(base::Pickle* m,
447 const param_type& p) {
446 WriteParam(m, static_cast<int>(p.size())); 448 WriteParam(m, static_cast<int>(p.size()));
447 // Cast to bool below is required because libc++'s 449 // Cast to bool below is required because libc++'s
448 // vector<bool>::const_reference is different from bool, and we want to avoid 450 // vector<bool>::const_reference is different from bool, and we want to avoid
449 // writing an extra specialization of ParamTraits for it. 451 // writing an extra specialization of ParamTraits for it.
450 for (size_t i = 0; i < p.size(); i++) 452 for (size_t i = 0; i < p.size(); i++)
451 WriteParam(m, static_cast<bool>(p[i])); 453 WriteParam(m, static_cast<bool>(p[i]));
452 } 454 }
453 455
454 bool ParamTraits<std::vector<bool>>::Read(const Message* m, 456 bool ParamTraits<std::vector<bool>>::Read(const base::Pickle* m,
455 base::PickleIterator* iter, 457 base::PickleIterator* iter,
456 param_type* r) { 458 param_type* r) {
457 int size; 459 int size;
458 // ReadLength() checks for < 0 itself. 460 // ReadLength() checks for < 0 itself.
459 if (!iter->ReadLength(&size)) 461 if (!iter->ReadLength(&size))
460 return false; 462 return false;
461 r->resize(size); 463 r->resize(size);
462 for (int i = 0; i < size; i++) { 464 for (int i = 0; i < size; i++) {
463 bool value; 465 bool value;
464 if (!ReadParam(m, iter, &value)) 466 if (!ReadParam(m, iter, &value))
465 return false; 467 return false;
466 (*r)[i] = value; 468 (*r)[i] = value;
467 } 469 }
468 return true; 470 return true;
469 } 471 }
470 472
471 void ParamTraits<std::vector<bool> >::Log(const param_type& p, std::string* l) { 473 void ParamTraits<std::vector<bool> >::Log(const param_type& p, std::string* l) {
472 for (size_t i = 0; i < p.size(); ++i) { 474 for (size_t i = 0; i < p.size(); ++i) {
473 if (i != 0) 475 if (i != 0)
474 l->push_back(' '); 476 l->push_back(' ');
475 LogParam(static_cast<bool>(p[i]), l); 477 LogParam(static_cast<bool>(p[i]), l);
476 } 478 }
477 } 479 }
478 480
479 void ParamTraits<BrokerableAttachment::AttachmentId>::Write( 481 void ParamTraits<BrokerableAttachment::AttachmentId>::Write(
480 Message* m, 482 base::Pickle* m,
481 const param_type& p) { 483 const param_type& p) {
482 m->WriteBytes(p.nonce, BrokerableAttachment::kNonceSize); 484 m->WriteBytes(p.nonce, BrokerableAttachment::kNonceSize);
483 } 485 }
484 486
485 bool ParamTraits<BrokerableAttachment::AttachmentId>::Read( 487 bool ParamTraits<BrokerableAttachment::AttachmentId>::Read(
486 const Message* m, 488 const base::Pickle* m,
487 base::PickleIterator* iter, 489 base::PickleIterator* iter,
488 param_type* r) { 490 param_type* r) {
489 const char* data; 491 const char* data;
490 if (!iter->ReadBytes(&data, BrokerableAttachment::kNonceSize)) 492 if (!iter->ReadBytes(&data, BrokerableAttachment::kNonceSize))
491 return false; 493 return false;
492 memcpy(r->nonce, data, BrokerableAttachment::kNonceSize); 494 memcpy(r->nonce, data, BrokerableAttachment::kNonceSize);
493 return true; 495 return true;
494 } 496 }
495 497
496 void ParamTraits<BrokerableAttachment::AttachmentId>::Log(const param_type& p, 498 void ParamTraits<BrokerableAttachment::AttachmentId>::Log(const param_type& p,
497 std::string* l) { 499 std::string* l) {
498 l->append(base::HexEncode(p.nonce, BrokerableAttachment::kNonceSize)); 500 l->append(base::HexEncode(p.nonce, BrokerableAttachment::kNonceSize));
499 } 501 }
500 502
501 void ParamTraits<base::DictionaryValue>::Write(Message* m, 503 void ParamTraits<base::DictionaryValue>::Write(base::Pickle* m,
502 const param_type& p) { 504 const param_type& p) {
503 WriteValue(m, &p, 0); 505 WriteValue(m, &p, 0);
504 } 506 }
505 507
506 bool ParamTraits<base::DictionaryValue>::Read(const Message* m, 508 bool ParamTraits<base::DictionaryValue>::Read(const base::Pickle* m,
507 base::PickleIterator* iter, 509 base::PickleIterator* iter,
508 param_type* r) { 510 param_type* r) {
509 int type; 511 int type;
510 if (!ReadParam(m, iter, &type) || type != base::Value::TYPE_DICTIONARY) 512 if (!ReadParam(m, iter, &type) || type != base::Value::TYPE_DICTIONARY)
511 return false; 513 return false;
512 514
513 return ReadDictionaryValue(m, iter, r, 0); 515 return ReadDictionaryValue(m, iter, r, 0);
514 } 516 }
515 517
516 void ParamTraits<base::DictionaryValue>::Log(const param_type& p, 518 void ParamTraits<base::DictionaryValue>::Log(const param_type& p,
517 std::string* l) { 519 std::string* l) {
518 std::string json; 520 std::string json;
519 base::JSONWriter::Write(p, &json); 521 base::JSONWriter::Write(p, &json);
520 l->append(json); 522 l->append(json);
521 } 523 }
522 524
523 #if defined(OS_POSIX) 525 #if defined(OS_POSIX)
524 void ParamTraits<base::FileDescriptor>::Write(Message* m, const param_type& p) { 526 void ParamTraits<base::FileDescriptor>::Write(base::Pickle* m,
527 const param_type& p) {
525 const bool valid = p.fd >= 0; 528 const bool valid = p.fd >= 0;
526 WriteParam(m, valid); 529 WriteParam(m, valid);
527 530
528 if (!valid) 531 if (!valid)
529 return; 532 return;
530 533
531 if (p.auto_close) { 534 if (p.auto_close) {
532 if (!m->WriteAttachment( 535 if (!m->WriteAttachment(
533 new internal::PlatformFileAttachment(base::ScopedFD(p.fd)))) 536 new internal::PlatformFileAttachment(base::ScopedFD(p.fd))))
534 NOTREACHED(); 537 NOTREACHED();
535 } else { 538 } else {
536 if (!m->WriteAttachment(new internal::PlatformFileAttachment(p.fd))) 539 if (!m->WriteAttachment(new internal::PlatformFileAttachment(p.fd)))
537 NOTREACHED(); 540 NOTREACHED();
538 } 541 }
539 } 542 }
540 543
541 bool ParamTraits<base::FileDescriptor>::Read(const Message* m, 544 bool ParamTraits<base::FileDescriptor>::Read(const base::Pickle* m,
542 base::PickleIterator* iter, 545 base::PickleIterator* iter,
543 param_type* r) { 546 param_type* r) {
544 *r = base::FileDescriptor(); 547 *r = base::FileDescriptor();
545 548
546 bool valid; 549 bool valid;
547 if (!ReadParam(m, iter, &valid)) 550 if (!ReadParam(m, iter, &valid))
548 return false; 551 return false;
549 552
550 // TODO(morrita): Seems like this should return false. 553 // TODO(morrita): Seems like this should return false.
551 if (!valid) 554 if (!valid)
552 return true; 555 return true;
553 556
554 scoped_refptr<MessageAttachment> attachment; 557 scoped_refptr<base::Pickle::Attachment> attachment;
555 if (!m->ReadAttachment(iter, &attachment)) 558 if (!m->ReadAttachment(iter, &attachment))
556 return false; 559 return false;
557 560
558 *r = base::FileDescriptor(attachment->TakePlatformFile(), true); 561 *r = base::FileDescriptor(
562 static_cast<MessageAttachment*>(attachment.get())->TakePlatformFile(),
563 true);
559 return true; 564 return true;
560 } 565 }
561 566
562 void ParamTraits<base::FileDescriptor>::Log(const param_type& p, 567 void ParamTraits<base::FileDescriptor>::Log(const param_type& p,
563 std::string* l) { 568 std::string* l) {
564 if (p.auto_close) { 569 if (p.auto_close) {
565 l->append(base::StringPrintf("FD(%d auto-close)", p.fd)); 570 l->append(base::StringPrintf("FD(%d auto-close)", p.fd));
566 } else { 571 } else {
567 l->append(base::StringPrintf("FD(%d)", p.fd)); 572 l->append(base::StringPrintf("FD(%d)", p.fd));
568 } 573 }
569 } 574 }
570 #endif // defined(OS_POSIX) 575 #endif // defined(OS_POSIX)
571 576
572 #if defined(OS_MACOSX) && !defined(OS_IOS) 577 #if defined(OS_MACOSX) && !defined(OS_IOS)
573 void ParamTraits<base::SharedMemoryHandle>::Write(Message* m, 578 void ParamTraits<base::SharedMemoryHandle>::Write(base::Pickle* m,
574 const param_type& p) { 579 const param_type& p) {
575 m->WriteInt(p.GetType()); 580 m->WriteInt(p.GetType());
576 581
577 switch (p.GetType()) { 582 switch (p.GetType()) {
578 case base::SharedMemoryHandle::POSIX: 583 case base::SharedMemoryHandle::POSIX:
579 ParamTraits<base::FileDescriptor>::Write(m, p.GetFileDescriptor()); 584 ParamTraits<base::FileDescriptor>::Write(m, p.GetFileDescriptor());
580 break; 585 break;
581 case base::SharedMemoryHandle::MACH: 586 case base::SharedMemoryHandle::MACH:
582 MachPortMac mach_port_mac(p.GetMemoryObject()); 587 MachPortMac mach_port_mac(p.GetMemoryObject());
583 ParamTraits<MachPortMac>::Write(m, mach_port_mac); 588 ParamTraits<MachPortMac>::Write(m, mach_port_mac);
584 size_t size = 0; 589 size_t size = 0;
585 bool result = p.GetSize(&size); 590 bool result = p.GetSize(&size);
586 DCHECK(result); 591 DCHECK(result);
587 ParamTraits<size_t>::Write(m, size); 592 ParamTraits<size_t>::Write(m, size);
588 593
589 // If the caller intended to pass ownership to the IPC stack, release a 594 // If the caller intended to pass ownership to the IPC stack, release a
590 // reference. 595 // reference.
591 if (p.OwnershipPassesToIPC()) 596 if (p.OwnershipPassesToIPC())
592 p.Close(); 597 p.Close();
593 598
594 break; 599 break;
595 } 600 }
596 } 601 }
597 602
598 bool ParamTraits<base::SharedMemoryHandle>::Read(const Message* m, 603 bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m,
599 base::PickleIterator* iter, 604 base::PickleIterator* iter,
600 param_type* r) { 605 param_type* r) {
601 base::SharedMemoryHandle::TypeWireFormat type; 606 base::SharedMemoryHandle::TypeWireFormat type;
602 if (!iter->ReadInt(&type)) 607 if (!iter->ReadInt(&type))
603 return false; 608 return false;
604 609
605 base::SharedMemoryHandle::Type shm_type = base::SharedMemoryHandle::POSIX; 610 base::SharedMemoryHandle::Type shm_type = base::SharedMemoryHandle::POSIX;
606 switch (type) { 611 switch (type) {
607 case base::SharedMemoryHandle::POSIX: 612 case base::SharedMemoryHandle::POSIX:
608 case base::SharedMemoryHandle::MACH: { 613 case base::SharedMemoryHandle::MACH: {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
651 ParamTraits<base::FileDescriptor>::Log(p.GetFileDescriptor(), l); 656 ParamTraits<base::FileDescriptor>::Log(p.GetFileDescriptor(), l);
652 break; 657 break;
653 case base::SharedMemoryHandle::MACH: 658 case base::SharedMemoryHandle::MACH:
654 l->append("Mach port: "); 659 l->append("Mach port: ");
655 LogParam(p.GetMemoryObject(), l); 660 LogParam(p.GetMemoryObject(), l);
656 break; 661 break;
657 } 662 }
658 } 663 }
659 664
660 #elif defined(OS_WIN) 665 #elif defined(OS_WIN)
661 void ParamTraits<base::SharedMemoryHandle>::Write(Message* m, 666 void ParamTraits<base::SharedMemoryHandle>::Write(base::Pickle* m,
662 const param_type& p) { 667 const param_type& p) {
663 m->WriteBool(p.NeedsBrokering()); 668 m->WriteBool(p.NeedsBrokering());
664 669
665 if (p.NeedsBrokering()) { 670 if (p.NeedsBrokering()) {
666 HandleWin handle_win(p.GetHandle(), HandleWin::DUPLICATE); 671 HandleWin handle_win(p.GetHandle(), HandleWin::DUPLICATE);
667 ParamTraits<HandleWin>::Write(m, handle_win); 672 ParamTraits<HandleWin>::Write(m, handle_win);
668 673
669 // If the caller intended to pass ownership to the IPC stack, release a 674 // If the caller intended to pass ownership to the IPC stack, release a
670 // reference. 675 // reference.
671 if (p.OwnershipPassesToIPC()) 676 if (p.OwnershipPassesToIPC())
672 p.Close(); 677 p.Close();
673 } else { 678 } else {
674 m->WriteInt(HandleToLong(p.GetHandle())); 679 m->WriteInt(HandleToLong(p.GetHandle()));
675 } 680 }
676 } 681 }
677 682
678 bool ParamTraits<base::SharedMemoryHandle>::Read(const Message* m, 683 bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m,
679 base::PickleIterator* iter, 684 base::PickleIterator* iter,
680 param_type* r) { 685 param_type* r) {
681 bool needs_brokering; 686 bool needs_brokering;
682 if (!iter->ReadBool(&needs_brokering)) 687 if (!iter->ReadBool(&needs_brokering))
683 return false; 688 return false;
684 689
685 if (needs_brokering) { 690 if (needs_brokering) {
686 HandleWin handle_win; 691 HandleWin handle_win;
687 if (!ParamTraits<HandleWin>::Read(m, iter, &handle_win)) 692 if (!ParamTraits<HandleWin>::Read(m, iter, &handle_win))
688 return false; 693 return false;
(...skipping 11 matching lines...) Expand all
700 } 705 }
701 706
702 void ParamTraits<base::SharedMemoryHandle>::Log(const param_type& p, 707 void ParamTraits<base::SharedMemoryHandle>::Log(const param_type& p,
703 std::string* l) { 708 std::string* l) {
704 LogParam(p.GetHandle(), l); 709 LogParam(p.GetHandle(), l);
705 l->append(" needs brokering: "); 710 l->append(" needs brokering: ");
706 LogParam(p.NeedsBrokering(), l); 711 LogParam(p.NeedsBrokering(), l);
707 } 712 }
708 #endif // defined(OS_MACOSX) && !defined(OS_IOS) 713 #endif // defined(OS_MACOSX) && !defined(OS_IOS)
709 714
710 void ParamTraits<base::FilePath>::Write(Message* m, const param_type& p) { 715 void ParamTraits<base::FilePath>::Write(base::Pickle* m, const param_type& p) {
711 p.WriteToPickle(m); 716 p.WriteToPickle(m);
712 } 717 }
713 718
714 bool ParamTraits<base::FilePath>::Read(const Message* m, 719 bool ParamTraits<base::FilePath>::Read(const base::Pickle* m,
715 base::PickleIterator* iter, 720 base::PickleIterator* iter,
716 param_type* r) { 721 param_type* r) {
717 return r->ReadFromPickle(iter); 722 return r->ReadFromPickle(iter);
718 } 723 }
719 724
720 void ParamTraits<base::FilePath>::Log(const param_type& p, std::string* l) { 725 void ParamTraits<base::FilePath>::Log(const param_type& p, std::string* l) {
721 ParamTraits<base::FilePath::StringType>::Log(p.value(), l); 726 ParamTraits<base::FilePath::StringType>::Log(p.value(), l);
722 } 727 }
723 728
724 void ParamTraits<base::ListValue>::Write(Message* m, const param_type& p) { 729 void ParamTraits<base::ListValue>::Write(base::Pickle* m, const param_type& p) {
725 WriteValue(m, &p, 0); 730 WriteValue(m, &p, 0);
726 } 731 }
727 732
728 bool ParamTraits<base::ListValue>::Read(const Message* m, 733 bool ParamTraits<base::ListValue>::Read(const base::Pickle* m,
729 base::PickleIterator* iter, 734 base::PickleIterator* iter,
730 param_type* r) { 735 param_type* r) {
731 int type; 736 int type;
732 if (!ReadParam(m, iter, &type) || type != base::Value::TYPE_LIST) 737 if (!ReadParam(m, iter, &type) || type != base::Value::TYPE_LIST)
733 return false; 738 return false;
734 739
735 return ReadListValue(m, iter, r, 0); 740 return ReadListValue(m, iter, r, 0);
736 } 741 }
737 742
738 void ParamTraits<base::ListValue>::Log(const param_type& p, std::string* l) { 743 void ParamTraits<base::ListValue>::Log(const param_type& p, std::string* l) {
739 std::string json; 744 std::string json;
740 base::JSONWriter::Write(p, &json); 745 base::JSONWriter::Write(p, &json);
741 l->append(json); 746 l->append(json);
742 } 747 }
743 748
744 void ParamTraits<base::NullableString16>::Write(Message* m, 749 void ParamTraits<base::NullableString16>::Write(base::Pickle* m,
745 const param_type& p) { 750 const param_type& p) {
746 WriteParam(m, p.string()); 751 WriteParam(m, p.string());
747 WriteParam(m, p.is_null()); 752 WriteParam(m, p.is_null());
748 } 753 }
749 754
750 bool ParamTraits<base::NullableString16>::Read(const Message* m, 755 bool ParamTraits<base::NullableString16>::Read(const base::Pickle* m,
751 base::PickleIterator* iter, 756 base::PickleIterator* iter,
752 param_type* r) { 757 param_type* r) {
753 base::string16 string; 758 base::string16 string;
754 if (!ReadParam(m, iter, &string)) 759 if (!ReadParam(m, iter, &string))
755 return false; 760 return false;
756 bool is_null; 761 bool is_null;
757 if (!ReadParam(m, iter, &is_null)) 762 if (!ReadParam(m, iter, &is_null))
758 return false; 763 return false;
759 *r = base::NullableString16(string, is_null); 764 *r = base::NullableString16(string, is_null);
760 return true; 765 return true;
761 } 766 }
762 767
763 void ParamTraits<base::NullableString16>::Log(const param_type& p, 768 void ParamTraits<base::NullableString16>::Log(const param_type& p,
764 std::string* l) { 769 std::string* l) {
765 l->append("("); 770 l->append("(");
766 LogParam(p.string(), l); 771 LogParam(p.string(), l);
767 l->append(", "); 772 l->append(", ");
768 LogParam(p.is_null(), l); 773 LogParam(p.is_null(), l);
769 l->append(")"); 774 l->append(")");
770 } 775 }
771 776
772 void ParamTraits<base::File::Info>::Write(Message* m, 777 void ParamTraits<base::File::Info>::Write(base::Pickle* m,
773 const param_type& p) { 778 const param_type& p) {
774 WriteParam(m, p.size); 779 WriteParam(m, p.size);
775 WriteParam(m, p.is_directory); 780 WriteParam(m, p.is_directory);
776 WriteParam(m, p.last_modified.ToDoubleT()); 781 WriteParam(m, p.last_modified.ToDoubleT());
777 WriteParam(m, p.last_accessed.ToDoubleT()); 782 WriteParam(m, p.last_accessed.ToDoubleT());
778 WriteParam(m, p.creation_time.ToDoubleT()); 783 WriteParam(m, p.creation_time.ToDoubleT());
779 } 784 }
780 785
781 bool ParamTraits<base::File::Info>::Read(const Message* m, 786 bool ParamTraits<base::File::Info>::Read(const base::Pickle* m,
782 base::PickleIterator* iter, 787 base::PickleIterator* iter,
783 param_type* p) { 788 param_type* p) {
784 double last_modified, last_accessed, creation_time; 789 double last_modified, last_accessed, creation_time;
785 if (!ReadParam(m, iter, &p->size) || 790 if (!ReadParam(m, iter, &p->size) ||
786 !ReadParam(m, iter, &p->is_directory) || 791 !ReadParam(m, iter, &p->is_directory) ||
787 !ReadParam(m, iter, &last_modified) || 792 !ReadParam(m, iter, &last_modified) ||
788 !ReadParam(m, iter, &last_accessed) || 793 !ReadParam(m, iter, &last_accessed) ||
789 !ReadParam(m, iter, &creation_time)) 794 !ReadParam(m, iter, &creation_time))
790 return false; 795 return false;
791 p->last_modified = base::Time::FromDoubleT(last_modified); 796 p->last_modified = base::Time::FromDoubleT(last_modified);
(...skipping 10 matching lines...) Expand all
802 LogParam(p.is_directory, l); 807 LogParam(p.is_directory, l);
803 l->append(","); 808 l->append(",");
804 LogParam(p.last_modified.ToDoubleT(), l); 809 LogParam(p.last_modified.ToDoubleT(), l);
805 l->append(","); 810 l->append(",");
806 LogParam(p.last_accessed.ToDoubleT(), l); 811 LogParam(p.last_accessed.ToDoubleT(), l);
807 l->append(","); 812 l->append(",");
808 LogParam(p.creation_time.ToDoubleT(), l); 813 LogParam(p.creation_time.ToDoubleT(), l);
809 l->append(")"); 814 l->append(")");
810 } 815 }
811 816
812 void ParamTraits<base::Time>::Write(Message* m, const param_type& p) { 817 void ParamTraits<base::Time>::Write(base::Pickle* m, const param_type& p) {
813 ParamTraits<int64_t>::Write(m, p.ToInternalValue()); 818 ParamTraits<int64_t>::Write(m, p.ToInternalValue());
814 } 819 }
815 820
816 bool ParamTraits<base::Time>::Read(const Message* m, 821 bool ParamTraits<base::Time>::Read(const base::Pickle* m,
817 base::PickleIterator* iter, 822 base::PickleIterator* iter,
818 param_type* r) { 823 param_type* r) {
819 int64_t value; 824 int64_t value;
820 if (!ParamTraits<int64_t>::Read(m, iter, &value)) 825 if (!ParamTraits<int64_t>::Read(m, iter, &value))
821 return false; 826 return false;
822 *r = base::Time::FromInternalValue(value); 827 *r = base::Time::FromInternalValue(value);
823 return true; 828 return true;
824 } 829 }
825 830
826 void ParamTraits<base::Time>::Log(const param_type& p, std::string* l) { 831 void ParamTraits<base::Time>::Log(const param_type& p, std::string* l) {
827 ParamTraits<int64_t>::Log(p.ToInternalValue(), l); 832 ParamTraits<int64_t>::Log(p.ToInternalValue(), l);
828 } 833 }
829 834
830 void ParamTraits<base::TimeDelta>::Write(Message* m, const param_type& p) { 835 void ParamTraits<base::TimeDelta>::Write(base::Pickle* m, const param_type& p) {
831 ParamTraits<int64_t>::Write(m, p.ToInternalValue()); 836 ParamTraits<int64_t>::Write(m, p.ToInternalValue());
832 } 837 }
833 838
834 bool ParamTraits<base::TimeDelta>::Read(const Message* m, 839 bool ParamTraits<base::TimeDelta>::Read(const base::Pickle* m,
835 base::PickleIterator* iter, 840 base::PickleIterator* iter,
836 param_type* r) { 841 param_type* r) {
837 int64_t value; 842 int64_t value;
838 bool ret = ParamTraits<int64_t>::Read(m, iter, &value); 843 bool ret = ParamTraits<int64_t>::Read(m, iter, &value);
839 if (ret) 844 if (ret)
840 *r = base::TimeDelta::FromInternalValue(value); 845 *r = base::TimeDelta::FromInternalValue(value);
841 846
842 return ret; 847 return ret;
843 } 848 }
844 849
845 void ParamTraits<base::TimeDelta>::Log(const param_type& p, std::string* l) { 850 void ParamTraits<base::TimeDelta>::Log(const param_type& p, std::string* l) {
846 ParamTraits<int64_t>::Log(p.ToInternalValue(), l); 851 ParamTraits<int64_t>::Log(p.ToInternalValue(), l);
847 } 852 }
848 853
849 void ParamTraits<base::TimeTicks>::Write(Message* m, const param_type& p) { 854 void ParamTraits<base::TimeTicks>::Write(base::Pickle* m, const param_type& p) {
850 ParamTraits<int64_t>::Write(m, p.ToInternalValue()); 855 ParamTraits<int64_t>::Write(m, p.ToInternalValue());
851 } 856 }
852 857
853 bool ParamTraits<base::TimeTicks>::Read(const Message* m, 858 bool ParamTraits<base::TimeTicks>::Read(const base::Pickle* m,
854 base::PickleIterator* iter, 859 base::PickleIterator* iter,
855 param_type* r) { 860 param_type* r) {
856 int64_t value; 861 int64_t value;
857 bool ret = ParamTraits<int64_t>::Read(m, iter, &value); 862 bool ret = ParamTraits<int64_t>::Read(m, iter, &value);
858 if (ret) 863 if (ret)
859 *r = base::TimeTicks::FromInternalValue(value); 864 *r = base::TimeTicks::FromInternalValue(value);
860 865
861 return ret; 866 return ret;
862 } 867 }
863 868
864 void ParamTraits<base::TimeTicks>::Log(const param_type& p, std::string* l) { 869 void ParamTraits<base::TimeTicks>::Log(const param_type& p, std::string* l) {
865 ParamTraits<int64_t>::Log(p.ToInternalValue(), l); 870 ParamTraits<int64_t>::Log(p.ToInternalValue(), l);
866 } 871 }
867 872
868 void ParamTraits<IPC::ChannelHandle>::Write(Message* m, const param_type& p) { 873 void ParamTraits<IPC::ChannelHandle>::Write(base::Pickle* m,
874 const param_type& p) {
869 #if defined(OS_WIN) 875 #if defined(OS_WIN)
870 // On Windows marshalling pipe handle is not supported. 876 // On Windows marshalling pipe handle is not supported.
871 DCHECK(p.pipe.handle == NULL); 877 DCHECK(p.pipe.handle == NULL);
872 #endif // defined (OS_WIN) 878 #endif // defined (OS_WIN)
873 WriteParam(m, p.name); 879 WriteParam(m, p.name);
874 #if defined(OS_POSIX) 880 #if defined(OS_POSIX)
875 WriteParam(m, p.socket); 881 WriteParam(m, p.socket);
876 #endif 882 #endif
877 } 883 }
878 884
879 bool ParamTraits<IPC::ChannelHandle>::Read(const Message* m, 885 bool ParamTraits<IPC::ChannelHandle>::Read(const base::Pickle* m,
880 base::PickleIterator* iter, 886 base::PickleIterator* iter,
881 param_type* r) { 887 param_type* r) {
882 return ReadParam(m, iter, &r->name) 888 return ReadParam(m, iter, &r->name)
883 #if defined(OS_POSIX) 889 #if defined(OS_POSIX)
884 && ReadParam(m, iter, &r->socket) 890 && ReadParam(m, iter, &r->socket)
885 #endif 891 #endif
886 ; 892 ;
887 } 893 }
888 894
889 void ParamTraits<IPC::ChannelHandle>::Log(const param_type& p, 895 void ParamTraits<IPC::ChannelHandle>::Log(const param_type& p,
890 std::string* l) { 896 std::string* l) {
891 l->append(base::StringPrintf("ChannelHandle(%s", p.name.c_str())); 897 l->append(base::StringPrintf("ChannelHandle(%s", p.name.c_str()));
892 #if defined(OS_POSIX) 898 #if defined(OS_POSIX)
893 l->append(", "); 899 l->append(", ");
894 ParamTraits<base::FileDescriptor>::Log(p.socket, l); 900 ParamTraits<base::FileDescriptor>::Log(p.socket, l);
895 #endif 901 #endif
896 l->append(")"); 902 l->append(")");
897 } 903 }
898 904
899 void ParamTraits<LogData>::Write(Message* m, const param_type& p) { 905 void ParamTraits<LogData>::Write(base::Pickle* m, const param_type& p) {
900 WriteParam(m, p.channel); 906 WriteParam(m, p.channel);
901 WriteParam(m, p.routing_id); 907 WriteParam(m, p.routing_id);
902 WriteParam(m, p.type); 908 WriteParam(m, p.type);
903 WriteParam(m, p.flags); 909 WriteParam(m, p.flags);
904 WriteParam(m, p.sent); 910 WriteParam(m, p.sent);
905 WriteParam(m, p.receive); 911 WriteParam(m, p.receive);
906 WriteParam(m, p.dispatch); 912 WriteParam(m, p.dispatch);
907 WriteParam(m, p.message_name); 913 WriteParam(m, p.message_name);
908 WriteParam(m, p.params); 914 WriteParam(m, p.params);
909 } 915 }
910 916
911 bool ParamTraits<LogData>::Read(const Message* m, 917 bool ParamTraits<LogData>::Read(const base::Pickle* m,
912 base::PickleIterator* iter, 918 base::PickleIterator* iter,
913 param_type* r) { 919 param_type* r) {
914 return 920 return
915 ReadParam(m, iter, &r->channel) && 921 ReadParam(m, iter, &r->channel) &&
916 ReadParam(m, iter, &r->routing_id) && 922 ReadParam(m, iter, &r->routing_id) &&
917 ReadParam(m, iter, &r->type) && 923 ReadParam(m, iter, &r->type) &&
918 ReadParam(m, iter, &r->flags) && 924 ReadParam(m, iter, &r->flags) &&
919 ReadParam(m, iter, &r->sent) && 925 ReadParam(m, iter, &r->sent) &&
920 ReadParam(m, iter, &r->receive) && 926 ReadParam(m, iter, &r->receive) &&
921 ReadParam(m, iter, &r->dispatch) && 927 ReadParam(m, iter, &r->dispatch) &&
922 ReadParam(m, iter, &r->message_name) && 928 ReadParam(m, iter, &r->message_name) &&
923 ReadParam(m, iter, &r->params); 929 ReadParam(m, iter, &r->params);
924 } 930 }
925 931
926 void ParamTraits<LogData>::Log(const param_type& p, std::string* l) { 932 void ParamTraits<LogData>::Log(const param_type& p, std::string* l) {
927 // Doesn't make sense to implement this! 933 // Doesn't make sense to implement this!
928 } 934 }
929 935
930 void ParamTraits<Message>::Write(Message* m, const Message& p) { 936 void ParamTraits<Message>::Write(base::Pickle* m, const Message& p) {
931 #if defined(OS_POSIX) 937 #if defined(OS_POSIX)
932 // We don't serialize the file descriptors in the nested message, so there 938 // We don't serialize the file descriptors in the nested message, so there
933 // better not be any. 939 // better not be any.
934 DCHECK(!p.HasAttachments()); 940 DCHECK(!p.HasAttachments());
935 #endif 941 #endif
936 942
937 // Don't just write out the message. This is used to send messages between 943 // Don't just write out the message. This is used to send messages between
938 // NaCl (Posix environment) and the browser (could be on Windows). The message 944 // NaCl (Posix environment) and the browser (could be on Windows). The message
939 // header formats differ between these systems (so does handle sharing, but 945 // header formats differ between these systems (so does handle sharing, but
940 // we already asserted we don't have any handles). So just write out the 946 // we already asserted we don't have any handles). So just write out the
941 // parts of the header we use. 947 // parts of the header we use.
942 // 948 //
943 // Be careful also to use only explicitly-sized types. The NaCl environment 949 // Be careful also to use only explicitly-sized types. The NaCl environment
944 // could be 64-bit and the host browser could be 32-bits. The nested message 950 // could be 64-bit and the host browser could be 32-bits. The nested message
945 // may or may not be safe to send between 32-bit and 64-bit systems, but we 951 // may or may not be safe to send between 32-bit and 64-bit systems, but we
946 // leave that up to the code sending the message to ensure. 952 // leave that up to the code sending the message to ensure.
947 m->WriteUInt32(static_cast<uint32_t>(p.routing_id())); 953 m->WriteUInt32(static_cast<uint32_t>(p.routing_id()));
948 m->WriteUInt32(p.type()); 954 m->WriteUInt32(p.type());
949 m->WriteUInt32(p.flags()); 955 m->WriteUInt32(p.flags());
950 m->WriteData(p.payload(), static_cast<uint32_t>(p.payload_size())); 956 m->WriteData(p.payload(), static_cast<uint32_t>(p.payload_size()));
951 } 957 }
952 958
953 bool ParamTraits<Message>::Read(const Message* m, 959 bool ParamTraits<Message>::Read(const base::Pickle* m,
954 base::PickleIterator* iter, 960 base::PickleIterator* iter,
955 Message* r) { 961 Message* r) {
956 uint32_t routing_id, type, flags; 962 uint32_t routing_id, type, flags;
957 if (!iter->ReadUInt32(&routing_id) || 963 if (!iter->ReadUInt32(&routing_id) ||
958 !iter->ReadUInt32(&type) || 964 !iter->ReadUInt32(&type) ||
959 !iter->ReadUInt32(&flags)) 965 !iter->ReadUInt32(&flags))
960 return false; 966 return false;
961 967
962 int payload_size; 968 int payload_size;
963 const char* payload; 969 const char* payload;
964 if (!iter->ReadData(&payload, &payload_size)) 970 if (!iter->ReadData(&payload, &payload_size))
965 return false; 971 return false;
966 972
967 r->SetHeaderValues(static_cast<int32_t>(routing_id), type, flags); 973 r->SetHeaderValues(static_cast<int32_t>(routing_id), type, flags);
968 return r->WriteBytes(payload, payload_size); 974 return r->WriteBytes(payload, payload_size);
969 } 975 }
970 976
971 void ParamTraits<Message>::Log(const Message& p, std::string* l) { 977 void ParamTraits<Message>::Log(const Message& p, std::string* l) {
972 l->append("<IPC::Message>"); 978 l->append("<IPC::Message>");
973 } 979 }
974 980
975 #if defined(OS_WIN) 981 #if defined(OS_WIN)
976 // Note that HWNDs/HANDLE/HCURSOR/HACCEL etc are always 32 bits, even on 64 982 // Note that HWNDs/HANDLE/HCURSOR/HACCEL etc are always 32 bits, even on 64
977 // bit systems. That's why we use the Windows macros to convert to 32 bits. 983 // bit systems. That's why we use the Windows macros to convert to 32 bits.
978 void ParamTraits<HANDLE>::Write(Message* m, const param_type& p) { 984 void ParamTraits<HANDLE>::Write(base::Pickle* m, const param_type& p) {
979 m->WriteInt(HandleToLong(p)); 985 m->WriteInt(HandleToLong(p));
980 } 986 }
981 987
982 bool ParamTraits<HANDLE>::Read(const Message* m, 988 bool ParamTraits<HANDLE>::Read(const base::Pickle* m,
983 base::PickleIterator* iter, 989 base::PickleIterator* iter,
984 param_type* r) { 990 param_type* r) {
985 int32_t temp; 991 int32_t temp;
986 if (!iter->ReadInt(&temp)) 992 if (!iter->ReadInt(&temp))
987 return false; 993 return false;
988 *r = LongToHandle(temp); 994 *r = LongToHandle(temp);
989 return true; 995 return true;
990 } 996 }
991 997
992 void ParamTraits<HANDLE>::Log(const param_type& p, std::string* l) { 998 void ParamTraits<HANDLE>::Log(const param_type& p, std::string* l) {
993 l->append(base::StringPrintf("0x%p", p)); 999 l->append(base::StringPrintf("0x%p", p));
994 } 1000 }
995 1001
996 void ParamTraits<LOGFONT>::Write(Message* m, const param_type& p) { 1002 void ParamTraits<LOGFONT>::Write(base::Pickle* m, const param_type& p) {
997 m->WriteData(reinterpret_cast<const char*>(&p), sizeof(LOGFONT)); 1003 m->WriteData(reinterpret_cast<const char*>(&p), sizeof(LOGFONT));
998 } 1004 }
999 1005
1000 bool ParamTraits<LOGFONT>::Read(const Message* m, 1006 bool ParamTraits<LOGFONT>::Read(const base::Pickle* m,
1001 base::PickleIterator* iter, 1007 base::PickleIterator* iter,
1002 param_type* r) { 1008 param_type* r) {
1003 const char *data; 1009 const char *data;
1004 int data_size = 0; 1010 int data_size = 0;
1005 if (iter->ReadData(&data, &data_size) && data_size == sizeof(LOGFONT)) { 1011 if (iter->ReadData(&data, &data_size) && data_size == sizeof(LOGFONT)) {
1006 const LOGFONT *font = reinterpret_cast<LOGFONT*>(const_cast<char*>(data)); 1012 const LOGFONT *font = reinterpret_cast<LOGFONT*>(const_cast<char*>(data));
1007 if (_tcsnlen(font->lfFaceName, LF_FACESIZE) < LF_FACESIZE) { 1013 if (_tcsnlen(font->lfFaceName, LF_FACESIZE) < LF_FACESIZE) {
1008 memcpy(r, data, sizeof(LOGFONT)); 1014 memcpy(r, data, sizeof(LOGFONT));
1009 return true; 1015 return true;
1010 } 1016 }
1011 } 1017 }
1012 1018
1013 NOTREACHED(); 1019 NOTREACHED();
1014 return false; 1020 return false;
1015 } 1021 }
1016 1022
1017 void ParamTraits<LOGFONT>::Log(const param_type& p, std::string* l) { 1023 void ParamTraits<LOGFONT>::Log(const param_type& p, std::string* l) {
1018 l->append(base::StringPrintf("<LOGFONT>")); 1024 l->append(base::StringPrintf("<LOGFONT>"));
1019 } 1025 }
1020 1026
1021 void ParamTraits<MSG>::Write(Message* m, const param_type& p) { 1027 void ParamTraits<MSG>::Write(base::Pickle* m, const param_type& p) {
1022 m->WriteData(reinterpret_cast<const char*>(&p), sizeof(MSG)); 1028 m->WriteData(reinterpret_cast<const char*>(&p), sizeof(MSG));
1023 } 1029 }
1024 1030
1025 bool ParamTraits<MSG>::Read(const Message* m, 1031 bool ParamTraits<MSG>::Read(const base::Pickle* m,
1026 base::PickleIterator* iter, 1032 base::PickleIterator* iter,
1027 param_type* r) { 1033 param_type* r) {
1028 const char *data; 1034 const char *data;
1029 int data_size = 0; 1035 int data_size = 0;
1030 bool result = iter->ReadData(&data, &data_size); 1036 bool result = iter->ReadData(&data, &data_size);
1031 if (result && data_size == sizeof(MSG)) { 1037 if (result && data_size == sizeof(MSG)) {
1032 memcpy(r, data, sizeof(MSG)); 1038 memcpy(r, data, sizeof(MSG));
1033 } else { 1039 } else {
1034 result = false; 1040 result = false;
1035 NOTREACHED(); 1041 NOTREACHED();
1036 } 1042 }
1037 1043
1038 return result; 1044 return result;
1039 } 1045 }
1040 1046
1041 void ParamTraits<MSG>::Log(const param_type& p, std::string* l) { 1047 void ParamTraits<MSG>::Log(const param_type& p, std::string* l) {
1042 l->append("<MSG>"); 1048 l->append("<MSG>");
1043 } 1049 }
1044 1050
1045 #endif // OS_WIN 1051 #endif // OS_WIN
1046 1052
1047 } // namespace IPC 1053 } // namespace IPC
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698