diff options
author | erg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-10 18:02:03 +0000 |
---|---|---|
committer | erg@google.com <erg@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-10 18:02:03 +0000 |
commit | 6edce23f84fe2b88e4dfe8e101b05e60a3646b80 (patch) | |
tree | 5a7ad67cc6f35469d5abab6090fcbd7424da91ba /ipc/ipc_message_utils.h | |
parent | a31c66d79a124782bbaa16870bffbc83bdb639f8 (diff) | |
download | chromium_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.h | 54 |
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; |