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

Side by Side Diff: ipc/ipc_message_utils.cc

Issue 1896443002: Revert of mac: Remove POSIX shared memory. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@temp50_base
Patch Set: Created 4 years, 8 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 665 matching lines...) Expand 10 before | Expand all | Expand 10 after
676 l->append(base::StringPrintf("FD(%d auto-close)", p.fd)); 676 l->append(base::StringPrintf("FD(%d auto-close)", p.fd));
677 } else { 677 } else {
678 l->append(base::StringPrintf("FD(%d)", p.fd)); 678 l->append(base::StringPrintf("FD(%d)", p.fd));
679 } 679 }
680 } 680 }
681 #endif // defined(OS_POSIX) 681 #endif // defined(OS_POSIX)
682 682
683 #if defined(OS_MACOSX) && !defined(OS_IOS) 683 #if defined(OS_MACOSX) && !defined(OS_IOS)
684 void ParamTraits<base::SharedMemoryHandle>::Write(base::Pickle* m, 684 void ParamTraits<base::SharedMemoryHandle>::Write(base::Pickle* m,
685 const param_type& p) { 685 const param_type& p) {
686 MachPortMac mach_port_mac(p.GetMemoryObject()); 686 m->WriteInt(p.GetType());
687 ParamTraits<MachPortMac>::Write(m, mach_port_mac);
688 size_t size = 0;
689 bool result = p.GetSize(&size);
690 DCHECK(result);
691 ParamTraits<uint32_t>::Write(m, static_cast<uint32_t>(size));
692 687
693 // If the caller intended to pass ownership to the IPC stack, release a 688 switch (p.GetType()) {
694 // reference. 689 case base::SharedMemoryHandle::POSIX:
695 if (p.OwnershipPassesToIPC()) 690 ParamTraits<base::FileDescriptor>::Write(m, p.GetFileDescriptor());
696 p.Close(); 691 break;
692 case base::SharedMemoryHandle::MACH:
693 MachPortMac mach_port_mac(p.GetMemoryObject());
694 ParamTraits<MachPortMac>::Write(m, mach_port_mac);
695 size_t size = 0;
696 bool result = p.GetSize(&size);
697 DCHECK(result);
698 ParamTraits<uint32_t>::Write(m, static_cast<uint32_t>(size));
699
700 // If the caller intended to pass ownership to the IPC stack, release a
701 // reference.
702 if (p.OwnershipPassesToIPC())
703 p.Close();
704
705 break;
706 }
697 } 707 }
698 708
699 bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m, 709 bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m,
700 base::PickleIterator* iter, 710 base::PickleIterator* iter,
701 param_type* r) { 711 param_type* r) {
702 MachPortMac mach_port_mac; 712 base::SharedMemoryHandle::TypeWireFormat type;
703 if (!ParamTraits<MachPortMac>::Read(m, iter, &mach_port_mac)) 713 if (!iter->ReadInt(&type))
704 return false; 714 return false;
705 715
706 uint32_t size; 716 base::SharedMemoryHandle::Type shm_type = base::SharedMemoryHandle::POSIX;
707 if (!ParamTraits<uint32_t>::Read(m, iter, &size)) 717 switch (type) {
708 return false; 718 case base::SharedMemoryHandle::POSIX:
719 case base::SharedMemoryHandle::MACH: {
720 shm_type = static_cast<base::SharedMemoryHandle::Type>(type);
721 break;
722 }
723 default: {
724 return false;
725 }
726 }
709 727
710 *r = base::SharedMemoryHandle(mach_port_mac.get_mach_port(), 728 switch (shm_type) {
711 static_cast<size_t>(size), 729 case base::SharedMemoryHandle::POSIX: {
712 base::GetCurrentProcId()); 730 base::FileDescriptor file_descriptor;
713 return true; 731
732 bool success =
733 ParamTraits<base::FileDescriptor>::Read(m, iter, &file_descriptor);
734 if (!success)
735 return false;
736
737 *r = base::SharedMemoryHandle(file_descriptor.fd,
738 file_descriptor.auto_close);
739 return true;
740 }
741 case base::SharedMemoryHandle::MACH: {
742 MachPortMac mach_port_mac;
743 if (!ParamTraits<MachPortMac>::Read(m, iter, &mach_port_mac))
744 return false;
745
746 uint32_t size;
747 if (!ParamTraits<uint32_t>::Read(m, iter, &size))
748 return false;
749
750 *r = base::SharedMemoryHandle(mach_port_mac.get_mach_port(),
751 static_cast<size_t>(size),
752 base::GetCurrentProcId());
753 return true;
754 }
755 }
714 } 756 }
715 757
716 void ParamTraits<base::SharedMemoryHandle>::Log(const param_type& p, 758 void ParamTraits<base::SharedMemoryHandle>::Log(const param_type& p,
717 std::string* l) { 759 std::string* l) {
718 l->append("Mach port: "); 760 switch (p.GetType()) {
719 LogParam(p.GetMemoryObject(), l); 761 case base::SharedMemoryHandle::POSIX:
762 l->append("POSIX Fd: ");
763 ParamTraits<base::FileDescriptor>::Log(p.GetFileDescriptor(), l);
764 break;
765 case base::SharedMemoryHandle::MACH:
766 l->append("Mach port: ");
767 LogParam(p.GetMemoryObject(), l);
768 break;
769 }
720 } 770 }
721 771
722 #elif defined(OS_WIN) 772 #elif defined(OS_WIN)
723 void ParamTraits<base::SharedMemoryHandle>::Write(base::Pickle* m, 773 void ParamTraits<base::SharedMemoryHandle>::Write(base::Pickle* m,
724 const param_type& p) { 774 const param_type& p) {
725 m->WriteBool(p.NeedsBrokering()); 775 m->WriteBool(p.NeedsBrokering());
726 776
727 if (p.NeedsBrokering()) { 777 if (p.NeedsBrokering()) {
728 HandleWin handle_win(p.GetHandle(), HandleWin::DUPLICATE); 778 HandleWin handle_win(p.GetHandle(), HandleWin::DUPLICATE);
729 ParamTraits<HandleWin>::Write(m, handle_win); 779 ParamTraits<HandleWin>::Write(m, handle_win);
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after
1168 return result; 1218 return result;
1169 } 1219 }
1170 1220
1171 void ParamTraits<MSG>::Log(const param_type& p, std::string* l) { 1221 void ParamTraits<MSG>::Log(const param_type& p, std::string* l) {
1172 l->append("<MSG>"); 1222 l->append("<MSG>");
1173 } 1223 }
1174 1224
1175 #endif // OS_WIN 1225 #endif // OS_WIN
1176 1226
1177 } // namespace IPC 1227 } // namespace IPC
OLDNEW
« no previous file with comments | « content/renderer/media/video_capture_message_filter_unittest.cc ('k') | mojo/edk/embedder/embedder_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698