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

Unified Diff: ipc/ipc_message_utils.cc

Issue 2875453002: Add a size parameter to SharedMemoryHandle. (Closed)
Patch Set: Remove extraneous period. Created 3 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/exo/wayland/server.cc ('k') | ipc/ipc_message_utils_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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());
}
« no previous file with comments | « components/exo/wayland/server.cc ('k') | ipc/ipc_message_utils_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698