Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef IPC_IPC_MESSAGE_UTILS_H_ | 5 #ifndef IPC_IPC_MESSAGE_UTILS_H_ |
| 6 #define IPC_IPC_MESSAGE_UTILS_H_ | 6 #define IPC_IPC_MESSAGE_UTILS_H_ |
| 7 | 7 |
| 8 #include <limits.h> | 8 #include <limits.h> |
| 9 #include <stddef.h> | 9 #include <stddef.h> |
| 10 #include <stdint.h> | 10 #include <stdint.h> |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 175 } | 175 } |
| 176 static void Write(base::Pickle* m, const param_type& p) { m->WriteInt(p); } | 176 static void Write(base::Pickle* m, const param_type& p) { m->WriteInt(p); } |
| 177 static bool Read(const base::Pickle* m, | 177 static bool Read(const base::Pickle* m, |
| 178 base::PickleIterator* iter, | 178 base::PickleIterator* iter, |
| 179 param_type* r) { | 179 param_type* r) { |
| 180 return iter->ReadInt(reinterpret_cast<int*>(r)); | 180 return iter->ReadInt(reinterpret_cast<int*>(r)); |
| 181 } | 181 } |
| 182 IPC_EXPORT static void Log(const param_type& p, std::string* l); | 182 IPC_EXPORT static void Log(const param_type& p, std::string* l); |
| 183 }; | 183 }; |
| 184 | 184 |
| 185 // long isn't safe to send over IPC because it's 4 bytes on 32 bit builds but | |
| 186 // 8 bytes on 64 bit builds. So if a 32 bit and 64 bit process have a channel | |
| 187 // that would cause problem. | |
| 188 // We need to keep this on for a few configs: | |
| 189 // 1) Windows because DWORD is typedef'd to it, which is fine because we have | |
| 190 // very few IPCs that cross this boundary. | |
| 191 // 2) We also need to keep it for Linux for two reasons: int64_t is typedef'd | |
| 192 // to long, and gfx::PluginWindow is long and is used in one GPU IPC. | |
| 193 // 3) Android 64 bit also has int64_t typedef'd to long. | |
| 194 // Since we want to support Android 32<>64 bit IPC, as long as we don't have | |
| 195 // these traits for 32 bit ARM then that'll catch any errors. | |
| 196 #if defined(OS_WIN) || defined(OS_LINUX) || defined(ARCH_CPU_ARM64) | |
|
Tom Sepez
2016/02/10 18:00:07
nit: you might want to define a IPC_ALLOW_LONG her
jam
2016/02/10 18:19:41
i think in practice this won't really change. if i
| |
| 185 template <> | 197 template <> |
| 186 struct ParamTraits<long> { | 198 struct ParamTraits<long> { |
| 187 typedef long param_type; | 199 typedef long param_type; |
| 188 static void GetSize(base::PickleSizer* sizer, const param_type& p) { | 200 static void GetSize(base::PickleSizer* sizer, const param_type& p) { |
| 189 sizer->AddLongUsingDangerousNonPortableLessPersistableForm(); | 201 sizer->AddLong(); |
| 190 } | 202 } |
| 191 static void Write(base::Pickle* m, const param_type& p) { | 203 static void Write(base::Pickle* m, const param_type& p) { |
| 192 m->WriteLongUsingDangerousNonPortableLessPersistableForm(p); | 204 m->WriteLong(p); |
| 193 } | 205 } |
| 194 static bool Read(const base::Pickle* m, | 206 static bool Read(const base::Pickle* m, |
| 195 base::PickleIterator* iter, | 207 base::PickleIterator* iter, |
| 196 param_type* r) { | 208 param_type* r) { |
| 197 return iter->ReadLong(r); | 209 return iter->ReadLong(r); |
| 198 } | 210 } |
| 199 IPC_EXPORT static void Log(const param_type& p, std::string* l); | 211 IPC_EXPORT static void Log(const param_type& p, std::string* l); |
| 200 }; | 212 }; |
| 201 | 213 |
| 202 template <> | 214 template <> |
| 203 struct ParamTraits<unsigned long> { | 215 struct ParamTraits<unsigned long> { |
| 204 typedef unsigned long param_type; | 216 typedef unsigned long param_type; |
| 205 static void GetSize(base::PickleSizer* sizer, const param_type& p) { | 217 static void GetSize(base::PickleSizer* sizer, const param_type& p) { |
| 206 sizer->AddLongUsingDangerousNonPortableLessPersistableForm(); | 218 sizer->AddLong(); |
| 207 } | 219 } |
| 208 static void Write(base::Pickle* m, const param_type& p) { | 220 static void Write(base::Pickle* m, const param_type& p) { |
| 209 m->WriteLongUsingDangerousNonPortableLessPersistableForm(p); | 221 m->WriteLong(p); |
| 210 } | 222 } |
| 211 static bool Read(const base::Pickle* m, | 223 static bool Read(const base::Pickle* m, |
| 212 base::PickleIterator* iter, | 224 base::PickleIterator* iter, |
| 213 param_type* r) { | 225 param_type* r) { |
| 214 return iter->ReadLong(reinterpret_cast<long*>(r)); | 226 return iter->ReadLong(reinterpret_cast<long*>(r)); |
| 215 } | 227 } |
| 216 IPC_EXPORT static void Log(const param_type& p, std::string* l); | 228 IPC_EXPORT static void Log(const param_type& p, std::string* l); |
| 217 }; | 229 }; |
| 230 #endif | |
| 218 | 231 |
| 219 template <> | 232 template <> |
| 220 struct ParamTraits<long long> { | 233 struct ParamTraits<long long> { |
| 221 typedef long long param_type; | 234 typedef long long param_type; |
| 222 static void GetSize(base::PickleSizer* sizer, const param_type& p) { | 235 static void GetSize(base::PickleSizer* sizer, const param_type& p) { |
| 223 sizer->AddInt64(); | 236 sizer->AddInt64(); |
| 224 } | 237 } |
| 225 static void Write(base::Pickle* m, const param_type& p) { | 238 static void Write(base::Pickle* m, const param_type& p) { |
| 226 m->WriteInt64(static_cast<int64_t>(p)); | 239 m->WriteInt64(static_cast<int64_t>(p)); |
| 227 } | 240 } |
| (...skipping 842 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1070 template <class ReplyParamType> | 1083 template <class ReplyParamType> |
| 1071 inline void LogReplyParamsToMessage(const ReplyParamType& reply_params, | 1084 inline void LogReplyParamsToMessage(const ReplyParamType& reply_params, |
| 1072 const Message* msg) {} | 1085 const Message* msg) {} |
| 1073 | 1086 |
| 1074 inline void ConnectMessageAndReply(const Message* msg, Message* reply) {} | 1087 inline void ConnectMessageAndReply(const Message* msg, Message* reply) {} |
| 1075 #endif | 1088 #endif |
| 1076 | 1089 |
| 1077 } // namespace IPC | 1090 } // namespace IPC |
| 1078 | 1091 |
| 1079 #endif // IPC_IPC_MESSAGE_UTILS_H_ | 1092 #endif // IPC_IPC_MESSAGE_UTILS_H_ |
| OLD | NEW |