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

Side by Side Diff: ipc/ipc_message_utils.cc

Issue 883093003: IPC::Message Refactoring: Move POSIX specific bits to PlatformFileAttachment (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixing Windows build error Created 5 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
« no previous file with comments | « ipc/ipc_message_attachment_set_posix_unittest.cc ('k') | ipc/ipc_platform_file_attachment.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "base/files/file_path.h" 7 #include "base/files/file_path.h"
8 #include "base/json/json_writer.h" 8 #include "base/json/json_writer.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/strings/nullable_string16.h" 10 #include "base/strings/nullable_string16.h"
11 #include "base/strings/string_number_conversions.h" 11 #include "base/strings/string_number_conversions.h"
12 #include "base/strings/utf_string_conversions.h" 12 #include "base/strings/utf_string_conversions.h"
13 #include "base/time/time.h" 13 #include "base/time/time.h"
14 #include "base/values.h" 14 #include "base/values.h"
15 #include "ipc/ipc_channel_handle.h" 15 #include "ipc/ipc_channel_handle.h"
16 #include "ipc/ipc_message_attachment.h"
16 #include "ipc/ipc_message_attachment_set.h" 17 #include "ipc/ipc_message_attachment_set.h"
17 18
19 #if defined(OS_POSIX)
20 #include "ipc/ipc_platform_file_attachment_posix.h"
21 #endif
22
18 #if defined(OS_WIN) 23 #if defined(OS_WIN)
19 #include <tchar.h> 24 #include <tchar.h>
20 #endif 25 #endif
21 26
22 namespace IPC { 27 namespace IPC {
23 28
24 namespace { 29 namespace {
25 30
26 const int kMaxRecursionDepth = 100; 31 const int kMaxRecursionDepth = 100;
27 32
(...skipping 430 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 463
459 #if defined(OS_POSIX) 464 #if defined(OS_POSIX)
460 void ParamTraits<base::FileDescriptor>::Write(Message* m, const param_type& p) { 465 void ParamTraits<base::FileDescriptor>::Write(Message* m, const param_type& p) {
461 const bool valid = p.fd >= 0; 466 const bool valid = p.fd >= 0;
462 WriteParam(m, valid); 467 WriteParam(m, valid);
463 468
464 if (!valid) 469 if (!valid)
465 return; 470 return;
466 471
467 if (p.auto_close) { 472 if (p.auto_close) {
468 if (!m->WriteFile(base::ScopedFD(p.fd))) 473 if (!m->WriteAttachment(
474 new internal::PlatformFileAttachment(base::ScopedFD(p.fd))))
469 NOTREACHED(); 475 NOTREACHED();
470 } else { 476 } else {
471 if (!m->WriteBorrowingFile(p.fd)) 477 if (!m->WriteAttachment(new internal::PlatformFileAttachment(p.fd)))
472 NOTREACHED(); 478 NOTREACHED();
473 } 479 }
474 } 480 }
475 481
476 bool ParamTraits<base::FileDescriptor>::Read(const Message* m, 482 bool ParamTraits<base::FileDescriptor>::Read(const Message* m,
477 PickleIterator* iter, 483 PickleIterator* iter,
478 param_type* r) { 484 param_type* r) {
479 *r = base::FileDescriptor(); 485 *r = base::FileDescriptor();
480 486
481 bool valid; 487 bool valid;
482 if (!ReadParam(m, iter, &valid)) 488 if (!ReadParam(m, iter, &valid))
483 return false; 489 return false;
484 490
485 // TODO(morrita): Seems like this should return false. 491 // TODO(morrita): Seems like this should return false.
486 if (!valid) 492 if (!valid)
487 return true; 493 return true;
488 494
489 base::ScopedFD fd; 495 scoped_refptr<MessageAttachment> attachment;
490 if (!m->ReadFile(iter, &fd)) 496 if (!m->ReadAttachment(iter, &attachment))
491 return false; 497 return false;
492 498
493 *r = base::FileDescriptor(fd.release(), true); 499 *r = base::FileDescriptor(attachment->TakePlatformFile(), true);
494 return true; 500 return true;
495 } 501 }
496 502
497 void ParamTraits<base::FileDescriptor>::Log(const param_type& p, 503 void ParamTraits<base::FileDescriptor>::Log(const param_type& p,
498 std::string* l) { 504 std::string* l) {
499 if (p.auto_close) { 505 if (p.auto_close) {
500 l->append(base::StringPrintf("FD(%d auto-close)", p.fd)); 506 l->append(base::StringPrintf("FD(%d auto-close)", p.fd));
501 } else { 507 } else {
502 l->append(base::StringPrintf("FD(%d)", p.fd)); 508 l->append(base::StringPrintf("FD(%d)", p.fd));
503 } 509 }
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
719 } 725 }
720 726
721 void ParamTraits<LogData>::Log(const param_type& p, std::string* l) { 727 void ParamTraits<LogData>::Log(const param_type& p, std::string* l) {
722 // Doesn't make sense to implement this! 728 // Doesn't make sense to implement this!
723 } 729 }
724 730
725 void ParamTraits<Message>::Write(Message* m, const Message& p) { 731 void ParamTraits<Message>::Write(Message* m, const Message& p) {
726 #if defined(OS_POSIX) 732 #if defined(OS_POSIX)
727 // We don't serialize the file descriptors in the nested message, so there 733 // We don't serialize the file descriptors in the nested message, so there
728 // better not be any. 734 // better not be any.
729 DCHECK(!p.HasFileDescriptors()); 735 DCHECK(!p.HasAttachments());
730 #endif 736 #endif
731 737
732 // Don't just write out the message. This is used to send messages between 738 // Don't just write out the message. This is used to send messages between
733 // NaCl (Posix environment) and the browser (could be on Windows). The message 739 // NaCl (Posix environment) and the browser (could be on Windows). The message
734 // header formats differ between these systems (so does handle sharing, but 740 // header formats differ between these systems (so does handle sharing, but
735 // we already asserted we don't have any handles). So just write out the 741 // we already asserted we don't have any handles). So just write out the
736 // parts of the header we use. 742 // parts of the header we use.
737 // 743 //
738 // Be careful also to use only explicitly-sized types. The NaCl environment 744 // Be careful also to use only explicitly-sized types. The NaCl environment
739 // could be 64-bit and the host browser could be 32-bits. The nested message 745 // could be 64-bit and the host browser could be 32-bits. The nested message
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
829 return result; 835 return result;
830 } 836 }
831 837
832 void ParamTraits<MSG>::Log(const param_type& p, std::string* l) { 838 void ParamTraits<MSG>::Log(const param_type& p, std::string* l) {
833 l->append("<MSG>"); 839 l->append("<MSG>");
834 } 840 }
835 841
836 #endif // OS_WIN 842 #endif // OS_WIN
837 843
838 } // namespace IPC 844 } // namespace IPC
OLDNEW
« no previous file with comments | « ipc/ipc_message_attachment_set_posix_unittest.cc ('k') | ipc/ipc_platform_file_attachment.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698