summaryrefslogtreecommitdiffstats
path: root/ipc/ipc_message_utils.h
diff options
context:
space:
mode:
authorerg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-10 18:02:03 +0000
committererg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-10 18:02:03 +0000
commit6edce23f84fe2b88e4dfe8e101b05e60a3646b80 (patch)
tree5a7ad67cc6f35469d5abab6090fcbd7424da91ba /ipc/ipc_message_utils.h
parenta31c66d79a124782bbaa16870bffbc83bdb639f8 (diff)
downloadchromium_src-6edce23f84fe2b88e4dfe8e101b05e60a3646b80.zip
chromium_src-6edce23f84fe2b88e4dfe8e101b05e60a3646b80.tar.gz
chromium_src-6edce23f84fe2b88e4dfe8e101b05e60a3646b80.tar.bz2
FBTF: Reapplies r55259, the first new IPC definition patch.
This moves MessageWithTuple::Read() back into the main ipc_message_utils.h header from the private ipc_messsage_utils_impl.h header. In release mode, this was causing link failures. BUG=51411 TEST=none Review URL: http://codereview.chromium.org/3069034 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@55587 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ipc/ipc_message_utils.h')
-rw-r--r--ipc/ipc_message_utils.h54
1 files changed, 26 insertions, 28 deletions
diff --git a/ipc/ipc_message_utils.h b/ipc/ipc_message_utils.h
index 4667d4b..cdad102 100644
--- a/ipc/ipc_message_utils.h
+++ b/ipc/ipc_message_utils.h
@@ -18,7 +18,7 @@
#include "base/string16.h"
#include "base/string_number_conversions.h"
#include "base/string_util.h"
-#include "base/time.h"
+#include "base/utf_string_conversions.h"
#include "base/tuple.h"
#include "base/utf_string_conversions.h"
#include "base/values.h"
@@ -67,6 +67,13 @@ enum IPCMessageStart {
LastMsgIndex
};
+class DictionaryValue;
+class ListValue;
+
+namespace base {
+class Time;
+}
+
namespace IPC {
//-----------------------------------------------------------------------------
@@ -306,19 +313,9 @@ struct ParamTraits<wchar_t> {
template <>
struct ParamTraits<base::Time> {
typedef base::Time param_type;
- static void Write(Message* m, const param_type& p) {
- ParamTraits<int64>::Write(m, p.ToInternalValue());
- }
- static bool Read(const Message* m, void** iter, param_type* r) {
- int64 value;
- if (!ParamTraits<int64>::Read(m, iter, &value))
- return false;
- *r = base::Time::FromInternalValue(value);
- return true;
- }
- static void Log(const param_type& p, std::wstring* l) {
- ParamTraits<int64>::Log(p.ToInternalValue(), l);
- }
+ static void Write(Message* m, const param_type& p);
+ static bool Read(const Message* m, void** iter, param_type* r);
+ static void Log(const param_type& p, std::wstring* l);
};
#if defined(OS_WIN)
@@ -365,6 +362,9 @@ struct ParamTraits<MSG> {
return result;
}
+ static void Log(const param_type& p, std::wstring* l) {
+ l->append(L"<MSG>");
+ }
};
#endif // defined(OS_WIN)
@@ -1026,13 +1026,17 @@ template <class ParamType>
class MessageWithTuple : public Message {
public:
typedef ParamType Param;
- typedef typename ParamType::ParamTuple RefParam;
+ typedef typename TupleTypes<ParamType>::ParamTuple RefParam;
- MessageWithTuple(int32 routing_id, uint32 type, const RefParam& p)
- : Message(routing_id, type, PRIORITY_NORMAL) {
- WriteParam(this, p);
- }
+ // The constructor and the Read() method's templated implementations are in
+ // ipc_message_utils_impl.h. The subclass constructor and Log() methods call
+ // the templated versions of these and make sure there are instantiations in
+ // those translation units.
+ MessageWithTuple(int32 routing_id, uint32 type, const RefParam& p);
+ // TODO(erg): Migrate this method into ipc_message_utils_impl.h once I figure
+ // out why just having the template in that file and the forward declaration
+ // here breaks the release build.
static bool Read(const Message* msg, Param* p) {
void* iter = NULL;
if (ReadParam(msg, &iter, p))
@@ -1111,12 +1115,6 @@ class MessageWithTuple : public Message {
return false;
}
- static void Log(const Message* msg, std::wstring* l) {
- Param p;
- if (Read(msg, &p))
- LogParam(p, l);
- }
-
// Functions used to do manual unpacking. Only used by the automation code,
// these should go away once that code uses SyncChannel.
template<typename TA, typename TB>
@@ -1189,7 +1187,7 @@ template <class SendParamType, class ReplyParamType>
class MessageWithReply : public SyncMessage {
public:
typedef SendParamType SendParam;
- typedef typename SendParam::ParamTuple RefSendParam;
+ typedef typename TupleTypes<SendParam>::ParamTuple RefSendParam;
typedef ReplyParamType ReplyParam;
MessageWithReply(int32 routing_id, uint32 type,
@@ -1216,7 +1214,7 @@ class MessageWithReply : public SyncMessage {
} else {
// This is an outgoing reply. Now that we have the output parameters, we
// can finally log the message.
- typename ReplyParam::ValueTuple p;
+ typename TupleTypes<ReplyParam>::ValueTuple p;
void* iter = SyncMessage::GetDataIterator(msg);
if (ReadParam(msg, &iter, &p))
LogParam(p, l);
@@ -1230,7 +1228,7 @@ class MessageWithReply : public SyncMessage {
Message* reply = GenerateReply(msg);
bool error;
if (ReadParam(msg, &iter, &send_params)) {
- typename ReplyParam::ValueTuple reply_params;
+ typename TupleTypes<ReplyParam>::ValueTuple reply_params;
DispatchToMethod(obj, func, send_params, &reply_params);
WriteParam(reply, reply_params);
error = false;