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

Side by Side Diff: ipc/ipc_message_utils.cc

Issue 1897623002: Remove POSIX shared memory. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase against https://codereview.chromium.org/1890043002/. 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 672 matching lines...) Expand 10 before | Expand all | Expand 10 after
683 l->append(base::StringPrintf("FD(%d auto-close)", p.fd)); 683 l->append(base::StringPrintf("FD(%d auto-close)", p.fd));
684 } else { 684 } else {
685 l->append(base::StringPrintf("FD(%d)", p.fd)); 685 l->append(base::StringPrintf("FD(%d)", p.fd));
686 } 686 }
687 } 687 }
688 #endif // defined(OS_POSIX) 688 #endif // defined(OS_POSIX)
689 689
690 #if defined(OS_MACOSX) && !defined(OS_IOS) 690 #if defined(OS_MACOSX) && !defined(OS_IOS)
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 m->WriteInt(p.GetType()); 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));
694 699
695 switch (p.GetType()) { 700 // If the caller intended to pass ownership to the IPC stack, release a
696 case base::SharedMemoryHandle::POSIX: 701 // reference.
697 ParamTraits<base::FileDescriptor>::Write(m, p.GetFileDescriptor()); 702 if (p.OwnershipPassesToIPC())
698 break; 703 p.Close();
699 case base::SharedMemoryHandle::MACH:
700 MachPortMac mach_port_mac(p.GetMemoryObject());
701 ParamTraits<MachPortMac>::Write(m, mach_port_mac);
702 size_t size = 0;
703 bool result = p.GetSize(&size);
704 DCHECK(result);
705 ParamTraits<uint32_t>::Write(m, static_cast<uint32_t>(size));
706
707 // If the caller intended to pass ownership to the IPC stack, release a
708 // reference.
709 if (p.OwnershipPassesToIPC())
710 p.Close();
711
712 break;
713 }
714 } 704 }
715 705
716 bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m, 706 bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m,
717 base::PickleIterator* iter, 707 base::PickleIterator* iter,
718 param_type* r) { 708 param_type* r) {
719 base::SharedMemoryHandle::TypeWireFormat type; 709 MachPortMac mach_port_mac;
720 if (!iter->ReadInt(&type)) 710 if (!ParamTraits<MachPortMac>::Read(m, iter, &mach_port_mac))
721 return false; 711 return false;
722 712
723 base::SharedMemoryHandle::Type shm_type = base::SharedMemoryHandle::POSIX; 713 uint32_t size;
724 switch (type) { 714 if (!ParamTraits<uint32_t>::Read(m, iter, &size))
725 case base::SharedMemoryHandle::POSIX: 715 return false;
726 case base::SharedMemoryHandle::MACH: {
727 shm_type = static_cast<base::SharedMemoryHandle::Type>(type);
728 break;
729 }
730 default: {
731 return false;
732 }
733 }
734 716
735 switch (shm_type) { 717 *r = base::SharedMemoryHandle(mach_port_mac.get_mach_port(),
736 case base::SharedMemoryHandle::POSIX: { 718 static_cast<size_t>(size),
737 base::FileDescriptor file_descriptor; 719 base::GetCurrentProcId());
738 720 return true;
739 bool success =
740 ParamTraits<base::FileDescriptor>::Read(m, iter, &file_descriptor);
741 if (!success)
742 return false;
743
744 *r = base::SharedMemoryHandle(file_descriptor.fd,
745 file_descriptor.auto_close);
746 return true;
747 }
748 case base::SharedMemoryHandle::MACH: {
749 MachPortMac mach_port_mac;
750 if (!ParamTraits<MachPortMac>::Read(m, iter, &mach_port_mac))
751 return false;
752
753 uint32_t size;
754 if (!ParamTraits<uint32_t>::Read(m, iter, &size))
755 return false;
756
757 *r = base::SharedMemoryHandle(mach_port_mac.get_mach_port(),
758 static_cast<size_t>(size),
759 base::GetCurrentProcId());
760 return true;
761 }
762 }
763 } 721 }
764 722
765 void ParamTraits<base::SharedMemoryHandle>::Log(const param_type& p, 723 void ParamTraits<base::SharedMemoryHandle>::Log(const param_type& p,
766 std::string* l) { 724 std::string* l) {
767 switch (p.GetType()) { 725 l->append("Mach port: ");
768 case base::SharedMemoryHandle::POSIX: 726 LogParam(p.GetMemoryObject(), l);
769 l->append("POSIX Fd: ");
770 ParamTraits<base::FileDescriptor>::Log(p.GetFileDescriptor(), l);
771 break;
772 case base::SharedMemoryHandle::MACH:
773 l->append("Mach port: ");
774 LogParam(p.GetMemoryObject(), l);
775 break;
776 }
777 } 727 }
778 728
779 #elif defined(OS_WIN) 729 #elif defined(OS_WIN)
780 void ParamTraits<base::SharedMemoryHandle>::Write(base::Pickle* m, 730 void ParamTraits<base::SharedMemoryHandle>::Write(base::Pickle* m,
781 const param_type& p) { 731 const param_type& p) {
782 m->WriteBool(p.NeedsBrokering()); 732 m->WriteBool(p.NeedsBrokering());
783 733
784 if (p.NeedsBrokering()) { 734 if (p.NeedsBrokering()) {
785 HandleWin handle_win(p.GetHandle(), HandleWin::DUPLICATE); 735 HandleWin handle_win(p.GetHandle(), HandleWin::DUPLICATE);
786 ParamTraits<HandleWin>::Write(m, handle_win); 736 ParamTraits<HandleWin>::Write(m, handle_win);
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after
1225 return result; 1175 return result;
1226 } 1176 }
1227 1177
1228 void ParamTraits<MSG>::Log(const param_type& p, std::string* l) { 1178 void ParamTraits<MSG>::Log(const param_type& p, std::string* l) {
1229 l->append("<MSG>"); 1179 l->append("<MSG>");
1230 } 1180 }
1231 1181
1232 #endif // OS_WIN 1182 #endif // OS_WIN
1233 1183
1234 } // namespace IPC 1184 } // namespace IPC
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698