| Index: chrome/common/ipc_message_utils.h
|
| ===================================================================
|
| --- chrome/common/ipc_message_utils.h (revision 9131)
|
| +++ chrome/common/ipc_message_utils.h (working copy)
|
| @@ -34,43 +34,70 @@
|
| struct WebApplicationInfo;
|
| } // namespace webkit_glue
|
|
|
| -// Used by IPC_BEGIN_MESSAGES so that each message class starts from a unique
|
| -// base. Messages have unique IDs across channels in order for the IPC logging
|
| -// code to figure out the message class from its ID.
|
| -enum IPCMessageStart {
|
| - // By using a start value of 0 for automation messages, we keep backward
|
| - // compatibility with old builds.
|
| - AutomationMsgStart = 0,
|
| - ViewMsgStart,
|
| - ViewHostMsgStart,
|
| - PluginProcessMsgStart,
|
| - PluginProcessHostMsgStart,
|
| - PluginMsgStart,
|
| - PluginHostMsgStart,
|
| - NPObjectMsgStart,
|
| - TestMsgStart,
|
| - // NOTE: When you add a new message class, also update
|
| - // IPCStatusView::IPCStatusView to ensure logging works.
|
| - // NOTE: this enum is used by IPC_MESSAGE_MACRO to generate a unique message
|
| - // id. Only 4 bits are used for the message type, so if this enum needs more
|
| - // than 16 entries, that code needs to be updated.
|
| - LastMsgIndex
|
| -};
|
| +namespace IPC {
|
|
|
| -COMPILE_ASSERT(LastMsgIndex <= 16, need_to_update_IPC_MESSAGE_MACRO);
|
| +// Used by the message macros to register a logging function based on the
|
| +// message class.
|
| +typedef void (LogFunction)(uint16 type,
|
| + std::wstring* name,
|
| + const IPC::Message* msg,
|
| + std::wstring* params);
|
| +void RegisterMessageLogger(int msg_start, LogFunction* func);
|
|
|
| +
|
| //-----------------------------------------------------------------------------
|
| +// An iterator class for reading the fields contained within a Message.
|
| +
|
| +class MessageIterator {
|
| + public:
|
| + explicit MessageIterator(const Message& m) : msg_(m), iter_(NULL) {
|
| + }
|
| + int NextInt() const {
|
| + int val;
|
| + if (!msg_.ReadInt(&iter_, &val))
|
| + NOTREACHED();
|
| + return val;
|
| + }
|
| + intptr_t NextIntPtr() const {
|
| + intptr_t val;
|
| + if (!msg_.ReadIntPtr(&iter_, &val))
|
| + NOTREACHED();
|
| + return val;
|
| + }
|
| + const std::string NextString() const {
|
| + std::string val;
|
| + if (!msg_.ReadString(&iter_, &val))
|
| + NOTREACHED();
|
| + return val;
|
| + }
|
| + const std::wstring NextWString() const {
|
| + std::wstring val;
|
| + if (!msg_.ReadWString(&iter_, &val))
|
| + NOTREACHED();
|
| + return val;
|
| + }
|
| + const void NextData(const char** data, int* length) const {
|
| + if (!msg_.ReadData(&iter_, data, length)) {
|
| + NOTREACHED();
|
| + }
|
| + }
|
| + private:
|
| + const Message& msg_;
|
| + mutable void* iter_;
|
| +};
|
| +
|
| +//-----------------------------------------------------------------------------
|
| // ParamTraits specializations, etc.
|
|
|
| template <class P> struct ParamTraits {};
|
|
|
| template <class P>
|
| -static inline void WriteParam(IPC::Message* m, const P& p) {
|
| +static inline void WriteParam(Message* m, const P& p) {
|
| ParamTraits<P>::Write(m, p);
|
| }
|
|
|
| template <class P>
|
| -static inline bool ReadParam(const IPC::Message* m, void** iter, P* p) {
|
| +static inline bool ReadParam(const Message* m, void** iter, P* p) {
|
| return ParamTraits<P>::Read(m, iter, p);
|
| }
|
|
|
| @@ -82,10 +109,10 @@
|
| template <>
|
| struct ParamTraits<bool> {
|
| typedef bool param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| m->WriteBool(p);
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| return m->ReadBool(iter, r);
|
| }
|
| static void Log(const param_type& p, std::wstring* l) {
|
| @@ -96,10 +123,10 @@
|
| template <>
|
| struct ParamTraits<int> {
|
| typedef int param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| m->WriteInt(p);
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| return m->ReadInt(iter, r);
|
| }
|
| static void Log(const param_type& p, std::wstring* l) {
|
| @@ -110,10 +137,10 @@
|
| template <>
|
| struct ParamTraits<long> {
|
| typedef long param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| m->WriteLong(p);
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| return m->ReadLong(iter, r);
|
| }
|
| static void Log(const param_type& p, std::wstring* l) {
|
| @@ -124,10 +151,10 @@
|
| template <>
|
| struct ParamTraits<size_t> {
|
| typedef size_t param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| m->WriteSize(p);
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| return m->ReadSize(iter, r);
|
| }
|
| static void Log(const param_type& p, std::wstring* l) {
|
| @@ -141,10 +168,10 @@
|
| template <>
|
| struct ParamTraits<uint32> {
|
| typedef uint32 param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| m->WriteUInt32(p);
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| return m->ReadUInt32(iter, r);
|
| }
|
| static void Log(const param_type& p, std::wstring* l) {
|
| @@ -156,10 +183,10 @@
|
| template <>
|
| struct ParamTraits<int64> {
|
| typedef int64 param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| m->WriteInt64(p);
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| return m->ReadInt64(iter, r);
|
| }
|
| static void Log(const param_type& p, std::wstring* l) {
|
| @@ -170,10 +197,10 @@
|
| template <>
|
| struct ParamTraits<uint64> {
|
| typedef uint64 param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| m->WriteInt64(static_cast<int64>(p));
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| return m->ReadInt64(iter, reinterpret_cast<int64*>(r));
|
| }
|
| static void Log(const param_type& p, std::wstring* l) {
|
| @@ -184,10 +211,10 @@
|
| template <>
|
| struct ParamTraits<double> {
|
| typedef double param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| m->WriteData(reinterpret_cast<const char*>(&p), sizeof(param_type));
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| const char *data;
|
| int data_size = 0;
|
| bool result = m->ReadData(iter, &data, &data_size);
|
| @@ -208,10 +235,10 @@
|
| template <>
|
| struct ParamTraits<wchar_t> {
|
| typedef wchar_t param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| m->WriteData(reinterpret_cast<const char*>(&p), sizeof(param_type));
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| const char *data;
|
| int data_size = 0;
|
| bool result = m->ReadData(iter, &data, &data_size);
|
| @@ -232,10 +259,10 @@
|
| template <>
|
| struct ParamTraits<base::Time> {
|
| typedef base::Time param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| ParamTraits<int64>::Write(m, p.ToInternalValue());
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| int64 value;
|
| if (!ParamTraits<int64>::Read(m, iter, &value))
|
| return false;
|
| @@ -251,10 +278,10 @@
|
| template <>
|
| struct ParamTraits<LOGFONT> {
|
| typedef LOGFONT param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| m->WriteData(reinterpret_cast<const char*>(&p), sizeof(LOGFONT));
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| const char *data;
|
| int data_size = 0;
|
| bool result = m->ReadData(iter, &data, &data_size);
|
| @@ -275,10 +302,10 @@
|
| template <>
|
| struct ParamTraits<MSG> {
|
| typedef MSG param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| m->WriteData(reinterpret_cast<const char*>(&p), sizeof(MSG));
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| const char *data;
|
| int data_size = 0;
|
| bool result = m->ReadData(iter, &data, &data_size);
|
| @@ -297,11 +324,11 @@
|
| template <>
|
| struct ParamTraits<SkBitmap> {
|
| typedef SkBitmap param_type;
|
| - static void Write(IPC::Message* m, const param_type& p);
|
| + static void Write(Message* m, const param_type& p);
|
|
|
| // Note: This function expects parameter |r| to be of type &SkBitmap since
|
| // r->SetConfig() and r->SetPixels() are called.
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r);
|
| + static bool Read(const Message* m, void** iter, param_type* r);
|
|
|
| static void Log(const param_type& p, std::wstring* l);
|
| };
|
| @@ -309,10 +336,10 @@
|
| template <>
|
| struct ParamTraits<std::string> {
|
| typedef std::string param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| m->WriteString(p);
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| return m->ReadString(iter, r);
|
| }
|
| static void Log(const param_type& p, std::wstring* l) {
|
| @@ -323,7 +350,7 @@
|
| template <>
|
| struct ParamTraits<std::vector<unsigned char> > {
|
| typedef std::vector<unsigned char> param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| if (p.size() == 0) {
|
| m->WriteData(NULL, 0);
|
| } else {
|
| @@ -331,7 +358,7 @@
|
| static_cast<int>(p.size()));
|
| }
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| const char *data;
|
| int data_size = 0;
|
| if (!m->ReadData(iter, &data, &data_size) || data_size < 0)
|
| @@ -350,14 +377,14 @@
|
| template <>
|
| struct ParamTraits<std::vector<char> > {
|
| typedef std::vector<char> param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| if (p.size() == 0) {
|
| m->WriteData(NULL, 0);
|
| } else {
|
| m->WriteData(&p.front(), static_cast<int>(p.size()));
|
| }
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| const char *data;
|
| int data_size = 0;
|
| if (!m->ReadData(iter, &data, &data_size) || data_size < 0)
|
| @@ -376,12 +403,12 @@
|
| template <class P>
|
| struct ParamTraits<std::vector<P> > {
|
| typedef std::vector<P> param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| WriteParam(m, static_cast<int>(p.size()));
|
| for (size_t i = 0; i < p.size(); i++)
|
| WriteParam(m, p[i]);
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| int size;
|
| if (!m->ReadLength(iter, &size))
|
| return false;
|
| @@ -415,7 +442,7 @@
|
| template <class K, class V>
|
| struct ParamTraits<std::map<K, V> > {
|
| typedef std::map<K, V> param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| WriteParam(m, static_cast<int>(p.size()));
|
| typename param_type::const_iterator iter;
|
| for (iter = p.begin(); iter != p.end(); ++iter) {
|
| @@ -423,7 +450,7 @@
|
| WriteParam(m, iter->second);
|
| }
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| int size;
|
| if (!ReadParam(m, iter, &size) || size < 0)
|
| return false;
|
| @@ -445,10 +472,10 @@
|
| template <>
|
| struct ParamTraits<std::wstring> {
|
| typedef std::wstring param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| m->WriteWString(p);
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| return m->ReadWString(iter, r);
|
| }
|
| static void Log(const param_type& p, std::wstring* l) {
|
| @@ -459,8 +486,8 @@
|
| template <>
|
| struct ParamTraits<GURL> {
|
| typedef GURL param_type;
|
| - static void Write(IPC::Message* m, const param_type& p);
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* p);
|
| + static void Write(Message* m, const param_type& p);
|
| + static bool Read(const Message* m, void** iter, param_type* p);
|
| static void Log(const param_type& p, std::wstring* l);
|
| };
|
|
|
| @@ -469,10 +496,10 @@
|
| template <>
|
| struct ParamTraits<HANDLE> {
|
| typedef HANDLE param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| m->WriteIntPtr(reinterpret_cast<intptr_t>(p));
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| DCHECK_EQ(sizeof(param_type), sizeof(intptr_t));
|
| return m->ReadIntPtr(iter, reinterpret_cast<intptr_t*>(r));
|
| }
|
| @@ -484,10 +511,10 @@
|
| template <>
|
| struct ParamTraits<HCURSOR> {
|
| typedef HCURSOR param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| m->WriteIntPtr(reinterpret_cast<intptr_t>(p));
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| DCHECK_EQ(sizeof(param_type), sizeof(intptr_t));
|
| return m->ReadIntPtr(iter, reinterpret_cast<intptr_t*>(r));
|
| }
|
| @@ -499,10 +526,10 @@
|
| template <>
|
| struct ParamTraits<HWND> {
|
| typedef HWND param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| m->WriteIntPtr(reinterpret_cast<intptr_t>(p));
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| DCHECK_EQ(sizeof(param_type), sizeof(intptr_t));
|
| return m->ReadIntPtr(iter, reinterpret_cast<intptr_t*>(r));
|
| }
|
| @@ -514,7 +541,7 @@
|
| template <>
|
| struct ParamTraits<HRGN> {
|
| typedef HRGN param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| int data_size = GetRegionData(p, 0, NULL);
|
| if (data_size) {
|
| char* bytes = new char[data_size];
|
| @@ -525,7 +552,7 @@
|
| m->WriteData(NULL, 0);
|
| }
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| bool res = FALSE;
|
| const char *data;
|
| int data_size = 0;
|
| @@ -547,10 +574,10 @@
|
| template <>
|
| struct ParamTraits<HACCEL> {
|
| typedef HACCEL param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| m->WriteIntPtr(reinterpret_cast<intptr_t>(p));
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| DCHECK_EQ(sizeof(param_type), sizeof(intptr_t));
|
| return m->ReadIntPtr(iter, reinterpret_cast<intptr_t*>(r));
|
| }
|
| @@ -559,11 +586,11 @@
|
| template <>
|
| struct ParamTraits<POINT> {
|
| typedef POINT param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| m->WriteInt(p.x);
|
| m->WriteInt(p.y);
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| int x, y;
|
| if (!m->ReadInt(iter, &x) || !m->ReadInt(iter, &y))
|
| return false;
|
| @@ -580,10 +607,10 @@
|
| template <>
|
| struct ParamTraits<FilePath> {
|
| typedef FilePath param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| ParamTraits<FilePath::StringType>::Write(m, p.value());
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| FilePath::StringType value;
|
| if (!ParamTraits<FilePath::StringType>::Read(m, iter, &value))
|
| return false;
|
| @@ -598,44 +625,44 @@
|
| template <>
|
| struct ParamTraits<gfx::Point> {
|
| typedef gfx::Point param_type;
|
| - static void Write(IPC::Message* m, const param_type& p);
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r);
|
| + 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);
|
| };
|
|
|
| template <>
|
| struct ParamTraits<gfx::Rect> {
|
| typedef gfx::Rect param_type;
|
| - static void Write(IPC::Message* m, const param_type& p);
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r);
|
| + 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);
|
| };
|
|
|
| template <>
|
| struct ParamTraits<gfx::Size> {
|
| typedef gfx::Size param_type;
|
| - static void Write(IPC::Message* m, const param_type& p);
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r);
|
| + 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);
|
| };
|
|
|
| template<>
|
| struct ParamTraits<ThumbnailScore> {
|
| typedef ThumbnailScore param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| - ParamTraits<double>::Write(m, p.boring_score);
|
| - ParamTraits<bool>::Write(m, p.good_clipping);
|
| - ParamTraits<bool>::Write(m, p.at_top);
|
| - ParamTraits<base::Time>::Write(m, p.time_at_snapshot);
|
| + static void Write(Message* m, const param_type& p) {
|
| + IPC::ParamTraits<double>::Write(m, p.boring_score);
|
| + IPC::ParamTraits<bool>::Write(m, p.good_clipping);
|
| + IPC::ParamTraits<bool>::Write(m, p.at_top);
|
| + IPC::ParamTraits<base::Time>::Write(m, p.time_at_snapshot);
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| double boring_score;
|
| bool good_clipping, at_top;
|
| base::Time time_at_snapshot;
|
| - if (!ParamTraits<double>::Read(m, iter, &boring_score) ||
|
| - !ParamTraits<bool>::Read(m, iter, &good_clipping) ||
|
| - !ParamTraits<bool>::Read(m, iter, &at_top) ||
|
| - !ParamTraits<base::Time>::Read(m, iter, &time_at_snapshot))
|
| + if (!IPC::ParamTraits<double>::Read(m, iter, &boring_score) ||
|
| + !IPC::ParamTraits<bool>::Read(m, iter, &good_clipping) ||
|
| + !IPC::ParamTraits<bool>::Read(m, iter, &at_top) ||
|
| + !IPC::ParamTraits<base::Time>::Read(m, iter, &time_at_snapshot))
|
| return false;
|
|
|
| r->boring_score = boring_score;
|
| @@ -653,10 +680,10 @@
|
| template <>
|
| struct ParamTraits<WindowOpenDisposition> {
|
| typedef WindowOpenDisposition param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| m->WriteInt(p);
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| int temp;
|
| bool res = m->ReadInt(iter, &temp);
|
| *r = static_cast<WindowOpenDisposition>(temp);
|
| @@ -670,10 +697,10 @@
|
| template <>
|
| struct ParamTraits<ConsoleMessageLevel> {
|
| typedef ConsoleMessageLevel param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| m->WriteInt(p);
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| int temp;
|
| bool res = m->ReadInt(iter, &temp);
|
| *r = static_cast<ConsoleMessageLevel>(temp);
|
| @@ -687,13 +714,13 @@
|
| template <>
|
| struct ParamTraits<CacheManager::ResourceTypeStat> {
|
| typedef CacheManager::ResourceTypeStat param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| WriteParam(m, p.count);
|
| WriteParam(m, p.size);
|
| WriteParam(m, p.live_size);
|
| WriteParam(m, p.decoded_size);
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| bool result =
|
| ReadParam(m, iter, &r->count) &&
|
| ReadParam(m, iter, &r->size) &&
|
| @@ -710,14 +737,14 @@
|
| template <>
|
| struct ParamTraits<CacheManager::ResourceTypeStats> {
|
| typedef CacheManager::ResourceTypeStats param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| WriteParam(m, p.images);
|
| WriteParam(m, p.css_stylesheets);
|
| WriteParam(m, p.scripts);
|
| WriteParam(m, p.xsl_stylesheets);
|
| WriteParam(m, p.fonts);
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| bool result =
|
| ReadParam(m, iter, &r->images) &&
|
| ReadParam(m, iter, &r->css_stylesheets) &&
|
| @@ -741,10 +768,10 @@
|
| template <>
|
| struct ParamTraits<XFORM> {
|
| typedef XFORM param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| m->WriteData(reinterpret_cast<const char*>(&p), sizeof(XFORM));
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| const char *data;
|
| int data_size = 0;
|
| bool result = m->ReadData(iter, &data, &data_size);
|
| @@ -766,10 +793,10 @@
|
| template <>
|
| struct ParamTraits<WebCursor> {
|
| typedef WebCursor param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| p.Serialize(m);
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| return r->Deserialize(m, iter);
|
| }
|
| static void Log(const param_type& p, std::wstring* l) {
|
| @@ -777,8 +804,6 @@
|
| }
|
| };
|
|
|
| -namespace IPC {
|
| -
|
| struct LogData {
|
| std::wstring channel;
|
| uint16 type;
|
| @@ -791,12 +816,10 @@
|
| std::wstring params;
|
| };
|
|
|
| -}
|
| -
|
| template <>
|
| -struct ParamTraits<IPC::LogData> {
|
| - typedef IPC::LogData param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| +struct ParamTraits<LogData> {
|
| + typedef LogData param_type;
|
| + static void Write(Message* m, const param_type& p) {
|
| WriteParam(m, p.channel);
|
| WriteParam(m, static_cast<int>(p.type));
|
| WriteParam(m, p.flags);
|
| @@ -805,7 +828,7 @@
|
| WriteParam(m, p.dispatch);
|
| WriteParam(m, p.params);
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| int type;
|
| bool result =
|
| ReadParam(m, iter, &r->channel) &&
|
| @@ -826,9 +849,9 @@
|
| template <>
|
| struct ParamTraits<Tuple0> {
|
| typedef Tuple0 param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| return true;
|
| }
|
| static void Log(const param_type& p, std::wstring* l) {
|
| @@ -838,10 +861,10 @@
|
| template <class A>
|
| struct ParamTraits< Tuple1<A> > {
|
| typedef Tuple1<A> param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| WriteParam(m, p.a);
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| return ReadParam(m, iter, &r->a);
|
| }
|
| static void Log(const param_type& p, std::wstring* l) {
|
| @@ -852,11 +875,11 @@
|
| template <class A, class B>
|
| struct ParamTraits< Tuple2<A, B> > {
|
| typedef Tuple2<A, B> param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| WriteParam(m, p.a);
|
| WriteParam(m, p.b);
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| return (ReadParam(m, iter, &r->a) &&
|
| ReadParam(m, iter, &r->b));
|
| }
|
| @@ -870,12 +893,12 @@
|
| template <class A, class B, class C>
|
| struct ParamTraits< Tuple3<A, B, C> > {
|
| typedef Tuple3<A, B, C> param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| WriteParam(m, p.a);
|
| WriteParam(m, p.b);
|
| WriteParam(m, p.c);
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| return (ReadParam(m, iter, &r->a) &&
|
| ReadParam(m, iter, &r->b) &&
|
| ReadParam(m, iter, &r->c));
|
| @@ -892,13 +915,13 @@
|
| template <class A, class B, class C, class D>
|
| struct ParamTraits< Tuple4<A, B, C, D> > {
|
| typedef Tuple4<A, B, C, D> param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| WriteParam(m, p.a);
|
| WriteParam(m, p.b);
|
| WriteParam(m, p.c);
|
| WriteParam(m, p.d);
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| return (ReadParam(m, iter, &r->a) &&
|
| ReadParam(m, iter, &r->b) &&
|
| ReadParam(m, iter, &r->c) &&
|
| @@ -918,14 +941,14 @@
|
| template <class A, class B, class C, class D, class E>
|
| struct ParamTraits< Tuple5<A, B, C, D, E> > {
|
| typedef Tuple5<A, B, C, D, E> param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| WriteParam(m, p.a);
|
| WriteParam(m, p.b);
|
| WriteParam(m, p.c);
|
| WriteParam(m, p.d);
|
| WriteParam(m, p.e);
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| return (ReadParam(m, iter, &r->a) &&
|
| ReadParam(m, iter, &r->b) &&
|
| ReadParam(m, iter, &r->c) &&
|
| @@ -948,7 +971,7 @@
|
| template <class A, class B, class C, class D, class E, class F>
|
| struct ParamTraits< Tuple6<A, B, C, D, E, F> > {
|
| typedef Tuple6<A, B, C, D, E, F> param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| + static void Write(Message* m, const param_type& p) {
|
| WriteParam(m, p.a);
|
| WriteParam(m, p.b);
|
| WriteParam(m, p.c);
|
| @@ -956,7 +979,7 @@
|
| WriteParam(m, p.e);
|
| WriteParam(m, p.f);
|
| }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r) {
|
| + static bool Read(const Message* m, void** iter, param_type* r) {
|
| return (ReadParam(m, iter, &r->a) &&
|
| ReadParam(m, iter, &r->b) &&
|
| ReadParam(m, iter, &r->c) &&
|
| @@ -982,79 +1005,13 @@
|
| template <>
|
| struct ParamTraits<webkit_glue::WebApplicationInfo> {
|
| typedef webkit_glue::WebApplicationInfo param_type;
|
| - static void Write(IPC::Message* m, const param_type& p);
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* r);
|
| + 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);
|
| };
|
|
|
| -// Traits for ViewMsg_FindInPageMsg_Request structure to pack/unpack.
|
| -template <>
|
| -struct ParamTraits<FindInPageRequest> {
|
| - typedef FindInPageRequest param_type;
|
| - static void Write(IPC::Message* m, const param_type& p) {
|
| - WriteParam(m, p.request_id);
|
| - WriteParam(m, p.search_string);
|
| - WriteParam(m, p.forward);
|
| - WriteParam(m, p.match_case);
|
| - WriteParam(m, p.find_next);
|
| - }
|
| - static bool Read(const IPC::Message* m, void** iter, param_type* p) {
|
| - return
|
| - ReadParam(m, iter, &p->request_id) &&
|
| - ReadParam(m, iter, &p->search_string) &&
|
| - ReadParam(m, iter, &p->forward) &&
|
| - ReadParam(m, iter, &p->match_case) &&
|
| - ReadParam(m, iter, &p->find_next);
|
| - }
|
| - static void Log(const param_type& p, std::wstring* l) {
|
| - l->append(L"<FindInPageRequest>");
|
| - }
|
| -};
|
|
|
| -namespace IPC {
|
| -
|
| //-----------------------------------------------------------------------------
|
| -// An iterator class for reading the fields contained within a Message.
|
| -
|
| -class MessageIterator {
|
| - public:
|
| - explicit MessageIterator(const Message& m) : msg_(m), iter_(NULL) {
|
| - }
|
| - int NextInt() const {
|
| - int val;
|
| - if (!msg_.ReadInt(&iter_, &val))
|
| - NOTREACHED();
|
| - return val;
|
| - }
|
| - intptr_t NextIntPtr() const {
|
| - intptr_t val;
|
| - if (!msg_.ReadIntPtr(&iter_, &val))
|
| - NOTREACHED();
|
| - return val;
|
| - }
|
| - const std::string NextString() const {
|
| - std::string val;
|
| - if (!msg_.ReadString(&iter_, &val))
|
| - NOTREACHED();
|
| - return val;
|
| - }
|
| - const std::wstring NextWString() const {
|
| - std::wstring val;
|
| - if (!msg_.ReadWString(&iter_, &val))
|
| - NOTREACHED();
|
| - return val;
|
| - }
|
| - const void NextData(const char** data, int* length) const {
|
| - if (!msg_.ReadData(&iter_, data, length)) {
|
| - NOTREACHED();
|
| - }
|
| - }
|
| - private:
|
| - const Message& msg_;
|
| - mutable void* iter_;
|
| -};
|
| -
|
| -//-----------------------------------------------------------------------------
|
| // Generic message subclasses
|
|
|
| // Used for asynchronous messages.
|
| @@ -1068,7 +1025,7 @@
|
| WriteParam(this, p);
|
| }
|
|
|
| - static bool Read(const IPC::Message* msg, Param* p) {
|
| + static bool Read(const Message* msg, Param* p) {
|
| void* iter = NULL;
|
| bool rv = ReadParam(msg, &iter, p);
|
| DCHECK(rv) << "Error deserializing message " << msg->type();
|
| @@ -1077,7 +1034,7 @@
|
|
|
| // Generic dispatcher. Should cover most cases.
|
| template<class T, class Method>
|
| - static bool Dispatch(const IPC::Message* msg, T* obj, Method func) {
|
| + static bool Dispatch(const Message* msg, T* obj, Method func) {
|
| Param p;
|
| if (Read(msg, &p)) {
|
| DispatchToMethod(obj, func, p);
|
| @@ -1090,7 +1047,7 @@
|
| // needs the message as well. They assume that "Param" is a type of Tuple
|
| // (except the one arg case, as there is no Tuple1).
|
| template<class T, typename TA>
|
| - static bool Dispatch(const IPC::Message* msg, T* obj,
|
| + static bool Dispatch(const Message* msg, T* obj,
|
| void (T::*func)(const Message&, TA)) {
|
| Param p;
|
| if (Read(msg, &p)) {
|
| @@ -1101,7 +1058,7 @@
|
| }
|
|
|
| template<class T, typename TA, typename TB>
|
| - static bool Dispatch(const IPC::Message* msg, T* obj,
|
| + static bool Dispatch(const Message* msg, T* obj,
|
| void (T::*func)(const Message&, TA, TB)) {
|
| Param p;
|
| if (Read(msg, &p)) {
|
| @@ -1112,7 +1069,7 @@
|
| }
|
|
|
| template<class T, typename TA, typename TB, typename TC>
|
| - static bool Dispatch(const IPC::Message* msg, T* obj,
|
| + static bool Dispatch(const Message* msg, T* obj,
|
| void (T::*func)(const Message&, TA, TB, TC)) {
|
| Param p;
|
| if (Read(msg, &p)) {
|
| @@ -1123,7 +1080,7 @@
|
| }
|
|
|
| template<class T, typename TA, typename TB, typename TC, typename TD>
|
| - static bool Dispatch(const IPC::Message* msg, T* obj,
|
| + static bool Dispatch(const Message* msg, T* obj,
|
| void (T::*func)(const Message&, TA, TB, TC, TD)) {
|
| Param p;
|
| if (Read(msg, &p)) {
|
| @@ -1135,7 +1092,7 @@
|
|
|
| template<class T, typename TA, typename TB, typename TC, typename TD,
|
| typename TE>
|
| - static bool Dispatch(const IPC::Message* msg, T* obj,
|
| + static bool Dispatch(const Message* msg, T* obj,
|
| void (T::*func)(const Message&, TA, TB, TC, TD, TE)) {
|
| Param p;
|
| if (Read(msg, &p)) {
|
| @@ -1145,59 +1102,11 @@
|
| return false;
|
| }
|
|
|
| - static void Log(const IPC::Message* msg, std::wstring* l) {
|
| + 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>
|
| - static bool Read(const IPC::Message* msg, TA* a, TB* b) {
|
| - ParamType params;
|
| - if (!Read(msg, ¶ms))
|
| - return false;
|
| - *a = params.a;
|
| - *b = params.b;
|
| - return true;
|
| - }
|
| -
|
| - template<typename TA, typename TB, typename TC>
|
| - static bool Read(const IPC::Message* msg, TA* a, TB* b, TC* c) {
|
| - ParamType params;
|
| - if (!Read(msg, ¶ms))
|
| - return false;
|
| - *a = params.a;
|
| - *b = params.b;
|
| - *c = params.c;
|
| - return true;
|
| - }
|
| -
|
| - template<typename TA, typename TB, typename TC, typename TD>
|
| - static bool Read(const IPC::Message* msg, TA* a, TB* b, TC* c, TD* d) {
|
| - ParamType params;
|
| - if (!Read(msg, ¶ms))
|
| - return false;
|
| - *a = params.a;
|
| - *b = params.b;
|
| - *c = params.c;
|
| - *d = params.d;
|
| - return true;
|
| - }
|
| -
|
| - template<typename TA, typename TB, typename TC, typename TD, typename TE>
|
| - static bool Read(const IPC::Message* msg, TA* a, TB* b, TC* c, TD* d, TE* e) {
|
| - ParamType params;
|
| - if (!Read(msg, ¶ms))
|
| - return false;
|
| - *a = params.a;
|
| - *b = params.b;
|
| - *c = params.c;
|
| - *d = params.d;
|
| - *e = params.e;
|
| - return true;
|
| - }
|
| };
|
|
|
| // This class assumes that its template argument is a RefTuple (a Tuple with
|
| @@ -1229,7 +1138,7 @@
|
| WriteParam(this, send);
|
| }
|
|
|
| - static void Log(const IPC::Message* msg, std::wstring* l) {
|
| + static void Log(const Message* msg, std::wstring* l) {
|
| if (msg->is_sync()) {
|
| SendParam p;
|
| void* iter = SyncMessage::GetDataIterator(msg);
|
| @@ -1254,7 +1163,7 @@
|
| }
|
|
|
| template<class T, class Method>
|
| - static bool Dispatch(const IPC::Message* msg, T* obj, Method func) {
|
| + static bool Dispatch(const Message* msg, T* obj, Method func) {
|
| SendParam send_params;
|
| void* iter = GetDataIterator(msg);
|
| Message* reply = GenerateReply(msg);
|
| @@ -1282,7 +1191,7 @@
|
| }
|
|
|
| template<class T, class Method>
|
| - static bool DispatchDelayReply(const IPC::Message* msg, T* obj, Method func) {
|
| + static bool DispatchDelayReply(const Message* msg, T* obj, Method func) {
|
| SendParam send_params;
|
| void* iter = GetDataIterator(msg);
|
| Message* reply = GenerateReply(msg);
|
| @@ -1343,6 +1252,32 @@
|
| }
|
| };
|
|
|
| +// Traits for ViewMsg_FindInPageMsg_Request structure to pack/unpack.
|
| +template <>
|
| +struct ParamTraits<FindInPageRequest> {
|
| + typedef FindInPageRequest param_type;
|
| + static void Write(Message* m, const param_type& p) {
|
| + WriteParam(m, p.request_id);
|
| + WriteParam(m, p.search_string);
|
| + WriteParam(m, p.forward);
|
| + WriteParam(m, p.match_case);
|
| + WriteParam(m, p.find_next);
|
| + }
|
| + static bool Read(const Message* m, void** iter, param_type* p) {
|
| + return
|
| + ReadParam(m, iter, &p->request_id) &&
|
| + ReadParam(m, iter, &p->search_string) &&
|
| + ReadParam(m, iter, &p->forward) &&
|
| + ReadParam(m, iter, &p->match_case) &&
|
| + ReadParam(m, iter, &p->find_next);
|
| + }
|
| + static void Log(const param_type& p, std::wstring* l) {
|
| + l->append(L"<FindInPageRequest>");
|
| + }
|
| +};
|
| +
|
| +//-----------------------------------------------------------------------------
|
| +
|
| } // namespace IPC
|
|
|
| #endif // CHROME_COMMON_IPC_MESSAGE_UTILS_H_
|
|
|