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

Side by Side Diff: ipc/ipc_message_utils.cc

Issue 2550723002: Resurrect POSIX shared memory support on mac (Closed)
Patch Set: git cl format Created 4 years 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 672 matching lines...) Expand 10 before | Expand all | Expand 10 after
683 #if defined(OS_MACOSX) && !defined(OS_IOS) 683 #if defined(OS_MACOSX) && !defined(OS_IOS)
684 void ParamTraits<base::SharedMemoryHandle>::GetSize(base::PickleSizer* sizer, 684 void ParamTraits<base::SharedMemoryHandle>::GetSize(base::PickleSizer* sizer,
685 const param_type& p) { 685 const param_type& p) {
686 GetParamSize(sizer, p.GetMemoryObject()); 686 GetParamSize(sizer, p.GetMemoryObject());
687 uint32_t dummy = 0; 687 uint32_t dummy = 0;
688 GetParamSize(sizer, dummy); 688 GetParamSize(sizer, dummy);
689 } 689 }
690 690
691 void ParamTraits<base::SharedMemoryHandle>::Write(base::Pickle* m, 691 void ParamTraits<base::SharedMemoryHandle>::Write(base::Pickle* m,
692 const param_type& p) { 692 const param_type& p) {
693 MachPortMac mach_port_mac(p.GetMemoryObject()); 693 m->WriteInt(p.GetType());
694 ParamTraits<MachPortMac>::Write(m, mach_port_mac); 694 switch (p.GetType()) {
695 size_t size = 0; 695 case base::SharedMemoryHandle::POSIX:
696 bool result = p.GetSize(&size); 696 ParamTraits<base::FileDescriptor>::Write(m, p.GetFileDescriptor());
697 DCHECK(result); 697 break;
698 ParamTraits<uint32_t>::Write(m, static_cast<uint32_t>(size)); 698 case base::SharedMemoryHandle::MACH:
699 MachPortMac mach_port_mac(p.GetMemoryObject());
700 ParamTraits<MachPortMac>::Write(m, mach_port_mac);
701 size_t size = 0;
702 bool result = p.GetSize(&size);
703 DCHECK(result);
704 ParamTraits<uint32_t>::Write(m, static_cast<uint32_t>(size));
699 705
700 // If the caller intended to pass ownership to the IPC stack, release a 706 // If the caller intended to pass ownership to the IPC stack, release a
701 // reference. 707 // reference.
702 if (p.OwnershipPassesToIPC()) 708 if (p.OwnershipPassesToIPC())
703 p.Close(); 709 p.Close();
710 break;
711 }
704 } 712 }
705 713
706 bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m, 714 bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m,
707 base::PickleIterator* iter, 715 base::PickleIterator* iter,
708 param_type* r) { 716 param_type* r) {
709 MachPortMac mach_port_mac; 717 base::SharedMemoryHandle::TypeWireFormat type;
710 if (!ParamTraits<MachPortMac>::Read(m, iter, &mach_port_mac)) 718 if (!iter->ReadInt(&type))
711 return false; 719 return false;
712 720
713 uint32_t size; 721 base::SharedMemoryHandle::Type shm_type = base::SharedMemoryHandle::POSIX;
714 if (!ParamTraits<uint32_t>::Read(m, iter, &size)) 722 switch (type) {
715 return false; 723 case base::SharedMemoryHandle::POSIX:
724 case base::SharedMemoryHandle::MACH: {
725 shm_type = static_cast<base::SharedMemoryHandle::Type>(type);
726 break;
727 }
728 default: {
729 return false;
730 }
731 }
716 732
717 *r = base::SharedMemoryHandle(mach_port_mac.get_mach_port(), 733 switch(shm_type) {
718 static_cast<size_t>(size), 734 case base::SharedMemoryHandle::POSIX: {
719 base::GetCurrentProcId()); 735 base::FileDescriptor file_descriptor;
720 return true; 736
737 bool success =
738 ParamTraits<base::FileDescriptor>::Read(m, iter, &file_descriptor);
739 if (!success)
740 return false;
741
742 *r = base::SharedMemoryHandle(file_descriptor.fd,
743 file_descriptor.auto_close);
744 return true;
745 }
746 case base::SharedMemoryHandle::MACH: {
747 MachPortMac mach_port_mac;
748 if (!ParamTraits<MachPortMac>::Read(m, iter, &mach_port_mac))
749 return false;
750
751 uint32_t size;
752 if (!ParamTraits<uint32_t>::Read(m, iter, &size))
753 return false;
754
755 *r = base::SharedMemoryHandle(mach_port_mac.get_mach_port(),
756 static_cast<size_t>(size),
757 base::GetCurrentProcId());
758 return true;
759 }
760 }
721 } 761 }
722 762
723 void ParamTraits<base::SharedMemoryHandle>::Log(const param_type& p, 763 void ParamTraits<base::SharedMemoryHandle>::Log(const param_type& p,
724 std::string* l) { 764 std::string* l) {
725 l->append("Mach port: "); 765 switch (p.GetType()) {
726 LogParam(p.GetMemoryObject(), l); 766 case base::SharedMemoryHandle::POSIX:
767 l->append("POSIX Fd: ");
768 ParamTraits<base::FileDescriptor>::Log(p.GetFileDescriptor(), l);
769 break;
770 case base::SharedMemoryHandle::MACH:
771 l->append("Mach port: ");
772 LogParam(p.GetMemoryObject(), l);
773 break;
774 }
727 } 775 }
728 776
729 #elif defined(OS_WIN) 777 #elif defined(OS_WIN)
730 void ParamTraits<base::SharedMemoryHandle>::GetSize(base::PickleSizer* s, 778 void ParamTraits<base::SharedMemoryHandle>::GetSize(base::PickleSizer* s,
731 const param_type& p) { 779 const param_type& p) {
732 GetParamSize(s, p.NeedsBrokering()); 780 GetParamSize(s, p.NeedsBrokering());
733 if (p.NeedsBrokering()) { 781 if (p.NeedsBrokering()) {
734 GetParamSize(s, p.GetHandle()); 782 GetParamSize(s, p.GetHandle());
735 } else { 783 } else {
736 GetParamSize(s, HandleToLong(p.GetHandle())); 784 GetParamSize(s, HandleToLong(p.GetHandle()));
(...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after
1231 return result; 1279 return result;
1232 } 1280 }
1233 1281
1234 void ParamTraits<MSG>::Log(const param_type& p, std::string* l) { 1282 void ParamTraits<MSG>::Log(const param_type& p, std::string* l) {
1235 l->append("<MSG>"); 1283 l->append("<MSG>");
1236 } 1284 }
1237 1285
1238 #endif // OS_WIN 1286 #endif // OS_WIN
1239 1287
1240 } // namespace IPC 1288 } // namespace IPC
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698