| Index: ipc/ipc_message_utils.cc
|
| diff --git a/ipc/ipc_message_utils.cc b/ipc/ipc_message_utils.cc
|
| index e8aeee4bda4343ce5055e781136b2537ac61bd71..8179cd4dfb2adcab8a92a84ded845df2f9b784eb 100644
|
| --- a/ipc/ipc_message_utils.cc
|
| +++ b/ipc/ipc_message_utils.cc
|
| @@ -621,7 +621,7 @@ void ParamTraits<base::FileDescriptor>::GetSize(base::PickleSizer* sizer,
|
| void ParamTraits<base::FileDescriptor>::Write(base::Pickle* m,
|
| const param_type& p) {
|
| // This serialization must be kept in sync with
|
| - // nacl_ipc_adapater.cc:WriteHandle().
|
| + // nacl_message_scanner.cc:WriteHandle().
|
| const bool valid = p.fd >= 0;
|
| WriteParam(m, valid);
|
|
|
| @@ -676,158 +676,41 @@ void ParamTraits<base::FileDescriptor>::Log(const param_type& p,
|
| }
|
| #endif // defined(OS_POSIX)
|
|
|
| -#if defined(OS_MACOSX) && !defined(OS_IOS)
|
| void ParamTraits<base::SharedMemoryHandle>::GetSize(base::PickleSizer* sizer,
|
| const param_type& p) {
|
| GetParamSize(sizer, p.IsValid());
|
| - if (p.IsValid()) {
|
| - GetParamSize(sizer, p.GetMemoryObject());
|
| - GetParamSize(sizer, p.GetGUID());
|
| - uint32_t dummy = 0;
|
| - GetParamSize(sizer, dummy);
|
| - }
|
| -}
|
| -
|
| -void ParamTraits<base::SharedMemoryHandle>::Write(base::Pickle* m,
|
| - const param_type& p) {
|
| - const bool valid = p.IsValid();
|
| - WriteParam(m, valid);
|
| -
|
| - if (!valid)
|
| + if (!p.IsValid())
|
| return;
|
|
|
| - MachPortMac mach_port_mac(p.GetMemoryObject());
|
| - WriteParam(m, mach_port_mac);
|
| - DCHECK(!p.GetGUID().is_empty());
|
| - WriteParam(m, p.GetGUID());
|
| -
|
| - 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();
|
| -}
|
| -
|
| -bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m,
|
| - base::PickleIterator* iter,
|
| - param_type* r) {
|
| - *r = base::SharedMemoryHandle();
|
| -
|
| - bool valid;
|
| - if (!ReadParam(m, iter, &valid))
|
| - return false;
|
| - if (!valid)
|
| - return true;
|
| -
|
| - MachPortMac mach_port_mac;
|
| - if (!ReadParam(m, iter, &mach_port_mac))
|
| - return false;
|
| -
|
| - base::UnguessableToken guid;
|
| - if (!ReadParam(m, iter, &guid))
|
| - return false;
|
| -
|
| - uint32_t size;
|
| - if (!ParamTraits<uint32_t>::Read(m, iter, &size))
|
| - return false;
|
| -
|
| - *r = base::SharedMemoryHandle(mach_port_mac.get_mach_port(),
|
| - static_cast<size_t>(size), guid);
|
| - return true;
|
| -}
|
| -
|
| -void ParamTraits<base::SharedMemoryHandle>::Log(const param_type& p,
|
| - std::string* l) {
|
| - l->append("Mach port: ");
|
| - LogParam(p.GetMemoryObject(), l);
|
| - l->append("GUID: ");
|
| - ParamTraits<base::UnguessableToken>::Log(p.GetGUID(), l);
|
| -}
|
| -
|
| +#if defined(OS_MACOSX) && !defined(OS_IOS)
|
| + GetParamSize(sizer, p.GetMemoryObject());
|
| #elif defined(OS_WIN)
|
| -void ParamTraits<base::SharedMemoryHandle>::GetSize(base::PickleSizer* s,
|
| - const param_type& p) {
|
| - GetParamSize(s, p.IsValid());
|
| - if (p.IsValid()) {
|
| - GetParamSize(s, p.GetHandle());
|
| - GetParamSize(s, p.GetGUID());
|
| - }
|
| -}
|
| -
|
| -void ParamTraits<base::SharedMemoryHandle>::Write(base::Pickle* m,
|
| - const param_type& p) {
|
| - const bool valid = p.IsValid();
|
| - WriteParam(m, valid);
|
| -
|
| - if (!valid)
|
| - return;
|
| -
|
| - HandleWin handle_win(p.GetHandle(), HandleWin::DUPLICATE);
|
| - WriteParam(m, handle_win);
|
| -
|
| - // If the caller intended to pass ownership to the IPC stack, release a
|
| - // reference.
|
| - if (p.OwnershipPassesToIPC())
|
| - p.Close();
|
| -
|
| - DCHECK(!p.GetGUID().is_empty());
|
| - WriteParam(m, p.GetGUID());
|
| -}
|
| -
|
| -bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m,
|
| - base::PickleIterator* iter,
|
| - param_type* r) {
|
| - *r = base::SharedMemoryHandle();
|
| -
|
| - bool valid;
|
| - if (!ReadParam(m, iter, &valid))
|
| - return false;
|
| - if (!valid)
|
| - return true;
|
| -
|
| - HandleWin handle_win;
|
| - if (!ReadParam(m, iter, &handle_win))
|
| - return false;
|
| -
|
| - base::UnguessableToken guid;
|
| - if (!ReadParam(m, iter, &guid))
|
| - return false;
|
| -
|
| - *r = base::SharedMemoryHandle(handle_win.get_handle(), guid);
|
| - return true;
|
| -}
|
| + GetParamSize(sizer, p.GetHandle());
|
| +#else
|
| + sizer->AddAttachment();
|
| +#endif
|
|
|
| -void ParamTraits<base::SharedMemoryHandle>::Log(const param_type& p,
|
| - std::string* l) {
|
| - l->append("HANDLE: ");
|
| - LogParam(p.GetHandle(), l);
|
| - l->append("GUID: ");
|
| - ParamTraits<base::UnguessableToken>::Log(p.GetGUID(), l);
|
| -}
|
| -#elif defined(OS_POSIX)
|
| -void ParamTraits<base::SharedMemoryHandle>::GetSize(base::PickleSizer* sizer,
|
| - const param_type& p) {
|
| - GetParamSize(sizer, p.IsValid());
|
| - if (p.IsValid()) {
|
| - sizer->AddAttachment();
|
| - GetParamSize(sizer, p.GetGUID());
|
| - }
|
| + GetParamSize(sizer, p.GetGUID());
|
| + GetParamSize(sizer, static_cast<uint64_t>(p.GetSize()));
|
| }
|
|
|
| void ParamTraits<base::SharedMemoryHandle>::Write(base::Pickle* m,
|
| const param_type& p) {
|
| // This serialization must be kept in sync with
|
| - // nacl_ipc_adapater.cc:WriteHandle().
|
| + // nacl_message_scanner.cc:WriteHandle().
|
| const bool valid = p.IsValid();
|
| WriteParam(m, valid);
|
|
|
| if (!valid)
|
| return;
|
|
|
| +#if defined(OS_MACOSX) && !defined(OS_IOS)
|
| + MachPortMac mach_port_mac(p.GetMemoryObject());
|
| + WriteParam(m, mach_port_mac);
|
| +#elif defined(OS_WIN)
|
| + HandleWin handle_win(p.GetHandle(), HandleWin::DUPLICATE);
|
| + WriteParam(m, handle_win);
|
| +#else
|
| if (p.OwnershipPassesToIPC()) {
|
| if (!m->WriteAttachment(new internal::PlatformFileAttachment(
|
| base::ScopedFD(p.GetHandle()))))
|
| @@ -837,8 +720,18 @@ void ParamTraits<base::SharedMemoryHandle>::Write(base::Pickle* m,
|
| new internal::PlatformFileAttachment(p.GetHandle())))
|
| NOTREACHED();
|
| }
|
| +#endif
|
| +
|
| +#if (defined(OS_MACOSX) && !defined(OS_IOS)) || defined(OS_WIN)
|
| + // If the caller intended to pass ownership to the IPC stack, release a
|
| + // reference.
|
| + if (p.OwnershipPassesToIPC())
|
| + p.Close();
|
| +#endif
|
| +
|
| DCHECK(!p.GetGUID().is_empty());
|
| WriteParam(m, p.GetGUID());
|
| + WriteParam(m, static_cast<uint64_t>(p.GetSize()));
|
| }
|
|
|
| bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m,
|
| @@ -849,10 +742,18 @@ bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m,
|
| bool valid;
|
| if (!ReadParam(m, iter, &valid))
|
| return false;
|
| -
|
| if (!valid)
|
| return true;
|
|
|
| +#if defined(OS_MACOSX) && !defined(OS_IOS)
|
| + MachPortMac mach_port_mac;
|
| + if (!ReadParam(m, iter, &mach_port_mac))
|
| + return false;
|
| +#elif defined(OS_WIN)
|
| + HandleWin handle_win;
|
| + if (!ReadParam(m, iter, &handle_win))
|
| + return false;
|
| +#else
|
| scoped_refptr<base::Pickle::Attachment> attachment;
|
| if (!m->ReadAttachment(iter, &attachment))
|
| return false;
|
| @@ -861,31 +762,50 @@ bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m,
|
| MessageAttachment::Type::PLATFORM_FILE) {
|
| return false;
|
| }
|
| +#endif
|
|
|
| base::UnguessableToken guid;
|
| - if (!ReadParam(m, iter, &guid))
|
| + uint64_t size;
|
| + if (!ReadParam(m, iter, &guid) || !ReadParam(m, iter, &size)) {
|
| return false;
|
| + }
|
|
|
| +#if defined(OS_MACOSX) && !defined(OS_IOS)
|
| + *r = base::SharedMemoryHandle(mach_port_mac.get_mach_port(),
|
| + static_cast<size_t>(size), guid);
|
| +#elif defined(OS_WIN)
|
| + *r = base::SharedMemoryHandle(handle_win.get_handle(),
|
| + static_cast<size_t>(size), guid);
|
| +#else
|
| *r = base::SharedMemoryHandle(
|
| base::FileDescriptor(
|
| static_cast<internal::PlatformFileAttachment*>(attachment.get())
|
| ->TakePlatformFile(),
|
| true),
|
| - guid);
|
| + static_cast<size_t>(size), guid);
|
| +#endif
|
| +
|
| return true;
|
| }
|
|
|
| void ParamTraits<base::SharedMemoryHandle>::Log(const param_type& p,
|
| std::string* l) {
|
| - if (p.OwnershipPassesToIPC()) {
|
| - l->append(base::StringPrintf("FD(%d auto-close)", p.GetHandle()));
|
| - } else {
|
| - l->append(base::StringPrintf("FD(%d)", p.GetHandle()));
|
| - }
|
| +#if defined(OS_MACOSX) && !defined(OS_IOS)
|
| + l->append("Mach port: ");
|
| + LogParam(p.GetMemoryObject(), l);
|
| +#elif defined(OS_WIN)
|
| + l->append("HANDLE: ");
|
| + LogParam(p.GetHandle(), l);
|
| +#else
|
| + l->append("FD: ");
|
| + LogParam(p.GetHandle(), l);
|
| +#endif
|
| +
|
| l->append("GUID: ");
|
| - ParamTraits<base::UnguessableToken>::Log(p.GetGUID(), l);
|
| + LogParam(p.GetGUID(), l);
|
| + l->append("size: ");
|
| + LogParam(static_cast<uint64_t>(p.GetSize()), l);
|
| }
|
| -#endif // defined(OS_MACOSX) && !defined(OS_IOS)
|
|
|
| #if defined(OS_WIN)
|
| void ParamTraits<PlatformFileForTransit>::GetSize(base::PickleSizer* s,
|
| @@ -1143,7 +1063,7 @@ void ParamTraits<base::UnguessableToken>::Write(base::Pickle* m,
|
| DCHECK(!p.is_empty());
|
|
|
| // This serialization must be kept in sync with
|
| - // nacl_ipc_adapater.cc:WriteHandle().
|
| + // nacl_message_scanner.cc:WriteHandle().
|
| ParamTraits<uint64_t>::Write(m, p.GetHighForSerialization());
|
| ParamTraits<uint64_t>::Write(m, p.GetLowForSerialization());
|
| }
|
|
|