| Index: ipc/ipc_message_utils.cc | 
| diff --git a/ipc/ipc_message_utils.cc b/ipc/ipc_message_utils.cc | 
| index be83e5a236bb2322e66b36d13aa0640759cdc691..d96266f6f27edb8299f856e411cb5e41730d5283 100644 | 
| --- a/ipc/ipc_message_utils.cc | 
| +++ b/ipc/ipc_message_utils.cc | 
| @@ -690,22 +690,43 @@ void ParamTraits<base::SharedMemoryHandle>::GetSize(base::PickleSizer* sizer, | 
|  | 
| void ParamTraits<base::SharedMemoryHandle>::Write(base::Pickle* m, | 
| const param_type& p) { | 
| -  MachPortMac mach_port_mac(p.GetMemoryObject()); | 
| -  ParamTraits<MachPortMac>::Write(m, mach_port_mac); | 
| -  size_t size = 0; | 
| -  bool result = p.GetSize(&size); | 
| -  DCHECK(result); | 
| -  ParamTraits<uint32_t>::Write(m, static_cast<uint32_t>(size)); | 
| +  m->WriteInt(p.GetType()); | 
|  | 
| -  // If the caller intended to pass ownership to the IPC stack, release a | 
| -  // reference. | 
| -  if (p.OwnershipPassesToIPC()) | 
| -    p.Close(); | 
| +  switch (p.GetType()) { | 
| +    case base::SharedMemoryHandle::POSIX: | 
| +      // We should never pass POSIX shared memory over IPC. | 
| +      CHECK(false); | 
| +      break; | 
| +    case base::SharedMemoryHandle::MACH: | 
| +      MachPortMac mach_port_mac(p.GetMemoryObject()); | 
| +      ParamTraits<MachPortMac>::Write(m, mach_port_mac); | 
| +      size_t size = 0; | 
| +      bool result = p.GetSize(&size); | 
| +      DCHECK(result); | 
| +      ParamTraits<uint32_t>::Write(m, static_cast<uint32_t>(size)); | 
| + | 
| +      // If the caller intended to pass ownership to the IPC stack, release a | 
| +      // reference. | 
| +      if (p.OwnershipPassesToIPC()) | 
| +        p.Close(); | 
| + | 
| +      break; | 
| +  } | 
| } | 
|  | 
| bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m, | 
| base::PickleIterator* iter, | 
| param_type* r) { | 
| +  base::SharedMemoryHandle::TypeWireFormat type; | 
| +  if (!iter->ReadInt(&type)) | 
| +    return false; | 
| + | 
| +  if (type == base::SharedMemoryHandle::POSIX) { | 
| +    // We should never pass POSIX shared memory over IPC. | 
| +    CHECK(false); | 
| +    return false; | 
| +  } | 
| + | 
| MachPortMac mach_port_mac; | 
| if (!ParamTraits<MachPortMac>::Read(m, iter, &mach_port_mac)) | 
| return false; | 
| @@ -722,8 +743,16 @@ bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m, | 
|  | 
| void ParamTraits<base::SharedMemoryHandle>::Log(const param_type& p, | 
| std::string* l) { | 
| -  l->append("Mach port: "); | 
| -  LogParam(p.GetMemoryObject(), l); | 
| +  switch (p.GetType()) { | 
| +    case base::SharedMemoryHandle::POSIX: | 
| +      // We should never pass POSIX shared memory over IPC. | 
| +      CHECK(false); | 
| +      break; | 
| +    case base::SharedMemoryHandle::MACH: | 
| +      l->append("Mach port: "); | 
| +      LogParam(p.GetMemoryObject(), l); | 
| +      break; | 
| +  } | 
| } | 
|  | 
| #elif defined(OS_WIN) | 
|  |