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

Unified Diff: ipc/ipc_message_utils.cc

Issue 2859843002: Add a GUID to base::SharedMemoryHandle. (Closed)
Patch Set: fix guid on android. 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 | « chrome/gpu/arc_gpu_video_decode_accelerator.cc ('k') | mojo/edk/embedder/platform_shared_buffer.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 a173226180bbaaac51b926fba76ca9962c0a80b6..e8aeee4bda4343ce5055e781136b2537ac61bd71 100644
--- a/ipc/ipc_message_utils.cc
+++ b/ipc/ipc_message_utils.cc
@@ -620,6 +620,8 @@ 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().
const bool valid = p.fd >= 0;
WriteParam(m, valid);
@@ -677,15 +679,28 @@ void ParamTraits<base::FileDescriptor>::Log(const param_type& p,
#if defined(OS_MACOSX) && !defined(OS_IOS)
void ParamTraits<base::SharedMemoryHandle>::GetSize(base::PickleSizer* sizer,
const param_type& p) {
- GetParamSize(sizer, p.GetMemoryObject());
- uint32_t dummy = 0;
- GetParamSize(sizer, dummy);
+ 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)
+ return;
+
MachPortMac mach_port_mac(p.GetMemoryObject());
- ParamTraits<MachPortMac>::Write(m, mach_port_mac);
+ 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);
@@ -700,8 +715,20 @@ void ParamTraits<base::SharedMemoryHandle>::Write(base::Pickle* m,
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 (!ParamTraits<MachPortMac>::Read(m, iter, &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;
@@ -709,7 +736,7 @@ bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m,
return false;
*r = base::SharedMemoryHandle(mach_port_mac.get_mach_port(),
- static_cast<size_t>(size));
+ static_cast<size_t>(size), guid);
return true;
}
@@ -717,14 +744,18 @@ 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);
}
#elif defined(OS_WIN)
void ParamTraits<base::SharedMemoryHandle>::GetSize(base::PickleSizer* s,
const param_type& p) {
GetParamSize(s, p.IsValid());
- if (p.IsValid())
+ if (p.IsValid()) {
GetParamSize(s, p.GetHandle());
+ GetParamSize(s, p.GetGUID());
+ }
}
void ParamTraits<base::SharedMemoryHandle>::Write(base::Pickle* m,
@@ -736,12 +767,15 @@ void ParamTraits<base::SharedMemoryHandle>::Write(base::Pickle* m,
return;
HandleWin handle_win(p.GetHandle(), HandleWin::DUPLICATE);
- ParamTraits<HandleWin>::Write(m, handle_win);
+ 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,
@@ -756,26 +790,38 @@ bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m,
return true;
HandleWin handle_win;
- if (!ParamTraits<HandleWin>::Read(m, iter, &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());
+
+ *r = base::SharedMemoryHandle(handle_win.get_handle(), guid);
return true;
}
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())
+ if (p.IsValid()) {
sizer->AddAttachment();
+ GetParamSize(sizer, p.GetGUID());
+ }
}
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().
const bool valid = p.IsValid();
WriteParam(m, valid);
@@ -791,6 +837,8 @@ void ParamTraits<base::SharedMemoryHandle>::Write(base::Pickle* m,
new internal::PlatformFileAttachment(p.GetHandle())))
NOTREACHED();
}
+ DCHECK(!p.GetGUID().is_empty());
+ WriteParam(m, p.GetGUID());
}
bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m,
@@ -814,10 +862,16 @@ bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m,
return false;
}
- *r = base::SharedMemoryHandle(base::FileDescriptor(
- static_cast<internal::PlatformFileAttachment*>(attachment.get())
- ->TakePlatformFile(),
- true));
+ base::UnguessableToken guid;
+ if (!ReadParam(m, iter, &guid))
+ return false;
+
+ *r = base::SharedMemoryHandle(
+ base::FileDescriptor(
+ static_cast<internal::PlatformFileAttachment*>(attachment.get())
+ ->TakePlatformFile(),
+ true),
+ guid);
return true;
}
@@ -828,6 +882,8 @@ void ParamTraits<base::SharedMemoryHandle>::Log(const param_type& p,
} else {
l->append(base::StringPrintf("FD(%d)", p.GetHandle()));
}
+ l->append("GUID: ");
+ ParamTraits<base::UnguessableToken>::Log(p.GetGUID(), l);
}
#endif // defined(OS_MACOSX) && !defined(OS_IOS)
@@ -1086,6 +1142,8 @@ void ParamTraits<base::UnguessableToken>::Write(base::Pickle* m,
const param_type& p) {
DCHECK(!p.is_empty());
+ // This serialization must be kept in sync with
+ // nacl_ipc_adapater.cc:WriteHandle().
ParamTraits<uint64_t>::Write(m, p.GetHighForSerialization());
ParamTraits<uint64_t>::Write(m, p.GetLowForSerialization());
}
« no previous file with comments | « chrome/gpu/arc_gpu_video_decode_accelerator.cc ('k') | mojo/edk/embedder/platform_shared_buffer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698