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

Unified Diff: ipc/ipc_message_utils.cc

Issue 2859843002: Add a GUID to base::SharedMemoryHandle. (Closed)
Patch Set: Compile fixes. 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
Index: ipc/ipc_message_utils.cc
diff --git a/ipc/ipc_message_utils.cc b/ipc/ipc_message_utils.cc
index a173226180bbaaac51b926fba76ca9962c0a80b6..c6b40a34a91e48fefed1c614b9dd686348b0a61b 100644
--- a/ipc/ipc_message_utils.cc
+++ b/ipc/ipc_message_utils.cc
@@ -678,7 +678,12 @@ void ParamTraits<base::FileDescriptor>::Log(const param_type& p,
void ParamTraits<base::SharedMemoryHandle>::GetSize(base::PickleSizer* sizer,
const param_type& p) {
GetParamSize(sizer, p.GetMemoryObject());
- uint32_t dummy = 0;
+ ParamTraits<base::UnguessableToken>::GetSize(sizer, p.GetGUID());
+
+ // Size of p.GetSize().
+ uint64_t dummy = 0;
+ static_assert(sizeof(dummy) == sizeof(size_t),
+ "The dummy size must match the size written in ::Write");
GetParamSize(sizer, dummy);
}
@@ -686,6 +691,8 @@ 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);
+ ParamTraits<base::UnguessableToken>::Write(m, p.GetGUID());
Will Harris 2017/05/04 17:50:51 should there be a DCHECK here that guid is not emp
erikchen 2017/05/04 19:21:13 Yes, done.
+
size_t size = 0;
bool result = p.GetSize(&size);
DCHECK(result);
@@ -704,12 +711,16 @@ bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m,
if (!ParamTraits<MachPortMac>::Read(m, iter, &mach_port_mac))
return false;
+ base::UnguessableToken guid;
+ if (!ParamTraits<base::UnguessableToken>::Read(m, iter, &guid))
Ken Rockot(use gerrit already) 2017/05/04 17:54:50 We have templated helper functions for this in ipc
erikchen 2017/05/04 19:21:13 Done.
+ 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));
+ static_cast<size_t>(size), guid);
return true;
}
@@ -717,14 +728,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());
+ ParamTraits<base::UnguessableToken>::GetSize(sizer, p.GetGUID());
+ }
}
void ParamTraits<base::SharedMemoryHandle>::Write(base::Pickle* m,
@@ -742,6 +757,8 @@ void ParamTraits<base::SharedMemoryHandle>::Write(base::Pickle* m,
// reference.
if (p.OwnershipPassesToIPC())
p.Close();
+
+ ParamTraits<base::UnguessableToken>::Write(m, p.GetGUID());
}
bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m,
@@ -758,20 +775,30 @@ bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m,
HandleWin handle_win;
if (!ParamTraits<HandleWin>::Read(m, iter, &handle_win))
return false;
- *r = base::SharedMemoryHandle(handle_win.get_handle());
+
+ base::UnguessableToken guid;
+ if (!ParamTraits<base::UnguessableToken>::Read(m, iter, &guid))
+ return false;
+
+ *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();
+ ParamTraits<base::UnguessableToken>::GetSize(sizer, p.GetGUID());
+ }
}
void ParamTraits<base::SharedMemoryHandle>::Write(base::Pickle* m,
@@ -791,6 +818,7 @@ void ParamTraits<base::SharedMemoryHandle>::Write(base::Pickle* m,
new internal::PlatformFileAttachment(p.GetHandle())))
NOTREACHED();
}
+ ParamTraits<base::UnguessableToken>::Write(m, p.GetGUID());
}
bool ParamTraits<base::SharedMemoryHandle>::Read(const base::Pickle* m,
@@ -814,10 +842,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 (!ParamTraits<base::UnguessableToken>::Read(m, iter, &guid))
+ return false;
+
+ *r = base::SharedMemoryHandle(
+ base::FileDescriptor(
+ static_cast<internal::PlatformFileAttachment*>(attachment.get())
+ ->TakePlatformFile(),
+ true),
+ guid);
return true;
}
@@ -828,6 +862,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)

Powered by Google App Engine
This is Rietveld 408576698