| OLD | NEW |
| 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 Loading... |
| 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); | |
| 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 | 694 |
| 700 // If the caller intended to pass ownership to the IPC stack, release a | 695 switch (p.GetType()) { |
| 701 // reference. | 696 case base::SharedMemoryHandle::POSIX: |
| 702 if (p.OwnershipPassesToIPC()) | 697 // We should never pass POSIX shared memory over IPC. |
| 703 p.Close(); | 698 CHECK(false); |
| 699 break; |
| 700 case base::SharedMemoryHandle::MACH: |
| 701 MachPortMac mach_port_mac(p.GetMemoryObject()); |
| 702 ParamTraits<MachPortMac>::Write(m, mach_port_mac); |
| 703 size_t size = 0; |
| 704 bool result = p.GetSize(&size); |
| 705 DCHECK(result); |
| 706 ParamTraits<uint32_t>::Write(m, static_cast<uint32_t>(size)); |
| 707 |
| 708 // If the caller intended to pass ownership to the IPC stack, release a |
| 709 // reference. |
| 710 if (p.OwnershipPassesToIPC()) |
| 711 p.Close(); |
| 712 |
| 713 break; |
| 714 } |
| 704 } | 715 } |
| 705 | 716 |
| 706 bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m, | 717 bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m, |
| 707 base::PickleIterator* iter, | 718 base::PickleIterator* iter, |
| 708 param_type* r) { | 719 param_type* r) { |
| 720 base::SharedMemoryHandle::TypeWireFormat type; |
| 721 if (!iter->ReadInt(&type)) |
| 722 return false; |
| 723 |
| 724 if (type == base::SharedMemoryHandle::POSIX) { |
| 725 // We should never pass POSIX shared memory over IPC. |
| 726 CHECK(false); |
| 727 return false; |
| 728 } |
| 729 |
| 709 MachPortMac mach_port_mac; | 730 MachPortMac mach_port_mac; |
| 710 if (!ParamTraits<MachPortMac>::Read(m, iter, &mach_port_mac)) | 731 if (!ParamTraits<MachPortMac>::Read(m, iter, &mach_port_mac)) |
| 711 return false; | 732 return false; |
| 712 | 733 |
| 713 uint32_t size; | 734 uint32_t size; |
| 714 if (!ParamTraits<uint32_t>::Read(m, iter, &size)) | 735 if (!ParamTraits<uint32_t>::Read(m, iter, &size)) |
| 715 return false; | 736 return false; |
| 716 | 737 |
| 717 *r = base::SharedMemoryHandle(mach_port_mac.get_mach_port(), | 738 *r = base::SharedMemoryHandle(mach_port_mac.get_mach_port(), |
| 718 static_cast<size_t>(size), | 739 static_cast<size_t>(size), |
| 719 base::GetCurrentProcId()); | 740 base::GetCurrentProcId()); |
| 720 return true; | 741 return true; |
| 721 } | 742 } |
| 722 | 743 |
| 723 void ParamTraits<base::SharedMemoryHandle>::Log(const param_type& p, | 744 void ParamTraits<base::SharedMemoryHandle>::Log(const param_type& p, |
| 724 std::string* l) { | 745 std::string* l) { |
| 725 l->append("Mach port: "); | 746 switch (p.GetType()) { |
| 726 LogParam(p.GetMemoryObject(), l); | 747 case base::SharedMemoryHandle::POSIX: |
| 748 // We should never pass POSIX shared memory over IPC. |
| 749 CHECK(false); |
| 750 break; |
| 751 case base::SharedMemoryHandle::MACH: |
| 752 l->append("Mach port: "); |
| 753 LogParam(p.GetMemoryObject(), l); |
| 754 break; |
| 755 } |
| 727 } | 756 } |
| 728 | 757 |
| 729 #elif defined(OS_WIN) | 758 #elif defined(OS_WIN) |
| 730 void ParamTraits<base::SharedMemoryHandle>::GetSize(base::PickleSizer* s, | 759 void ParamTraits<base::SharedMemoryHandle>::GetSize(base::PickleSizer* s, |
| 731 const param_type& p) { | 760 const param_type& p) { |
| 732 GetParamSize(s, p.NeedsBrokering()); | 761 GetParamSize(s, p.NeedsBrokering()); |
| 733 if (p.NeedsBrokering()) { | 762 if (p.NeedsBrokering()) { |
| 734 GetParamSize(s, p.GetHandle()); | 763 GetParamSize(s, p.GetHandle()); |
| 735 } else { | 764 } else { |
| 736 GetParamSize(s, HandleToLong(p.GetHandle())); | 765 GetParamSize(s, HandleToLong(p.GetHandle())); |
| (...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1231 return result; | 1260 return result; |
| 1232 } | 1261 } |
| 1233 | 1262 |
| 1234 void ParamTraits<MSG>::Log(const param_type& p, std::string* l) { | 1263 void ParamTraits<MSG>::Log(const param_type& p, std::string* l) { |
| 1235 l->append("<MSG>"); | 1264 l->append("<MSG>"); |
| 1236 } | 1265 } |
| 1237 | 1266 |
| 1238 #endif // OS_WIN | 1267 #endif // OS_WIN |
| 1239 | 1268 |
| 1240 } // namespace IPC | 1269 } // namespace IPC |
| OLD | NEW |