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

Unified Diff: chrome/common/safe_browsing/ipc_protobuf_message_macros.h

Issue 1004323003: Add support for sending protobuf messages over IPC. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@zip
Patch Set: remove todo and enable for cros Created 5 years, 9 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: chrome/common/safe_browsing/ipc_protobuf_message_macros.h
diff --git a/chrome/common/safe_browsing/ipc_protobuf_message_macros.h b/chrome/common/safe_browsing/ipc_protobuf_message_macros.h
new file mode 100644
index 0000000000000000000000000000000000000000..2771480caaf613445485d7b76f41ae084ea1b923
--- /dev/null
+++ b/chrome/common/safe_browsing/ipc_protobuf_message_macros.h
@@ -0,0 +1,57 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Protobuf Messages over IPC
+//
+// Protobuf messages are registered with IPC_PROTOBUF_MESSAGE_TRAITS_BEGIN() and
+// friends in much the same way as other externally-defined structs (see
+// ipc/ipc_message_macros.h). These macros also cause only registration of the
+// protobuf message type IPC with message generation. Within matching calls to
+// _BEGIN() and _END(), one may use:
+// - IPC_PROTOBUF_MESSAGE_TRAITS_OPTIONAL_FUNDAMENTAL_MEMBER() to register an
+// optional field of fundamental type (any scalar message field type save
+// "string" and "bytes").
+// - IPC_PROTOBUF_MESSAGE_TRAITS_OPTIONAL_COMPLEX_MEMBER() to register an
+// optional field of complex type (scalar message field type "string" or
+// "bytes", or another message type).
+// - IPC_PROTOBUF_MESSAGE_TRAITS_REPEATED_COMPLEX_MEMBER() to register a
+// repeated field of complex type (scalar message field type "string" or
+// "bytes", or another message type).
+//
+// Enum types in protobuf messages are registered with
+// IPC_ENUM_TRAITS_VALIDATE() as with any other enum. In this case, the
+// validation expression should be the _IsValid() function provided by the
+// generated protobuf code. For example:
+//
+// IPC_ENUM_TRAITS_VALIDATE(MyEnumType, MyEnumType_IsValid(value))
+
+#ifndef CHROME_COMMON_SAFE_BROWSING_IPC_PROTOBUF_MESSAGE_MACROS_H_
+#define CHROME_COMMON_SAFE_BROWSING_IPC_PROTOBUF_MESSAGE_MACROS_H_
+
+#include <string>
+
+#define IPC_PROTOBUF_MESSAGE_TRAITS_BEGIN(message_name) \
+ namespace IPC { \
+ template <> \
+ struct IPC_MESSAGE_EXPORT ParamTraits<message_name> { \
+ typedef message_name param_type; \
+ static void Write(Message* m, const param_type& p); \
+ static bool Read(const Message* m, PickleIterator* iter, param_type* p); \
+ static void Log(const param_type& p, std::string* l); \
+ \
+ private: \
+ template <class P> \
+ static bool ReadParamF(const Message* m, \
+ PickleIterator* iter, \
+ param_type* p, \
+ void (param_type::*setter_function)(P)); \
+ }; \
+ } // namespace IPC
+
+#define IPC_PROTOBUF_MESSAGE_TRAITS_OPTIONAL_FUNDAMENTAL_MEMBER(name)
+#define IPC_PROTOBUF_MESSAGE_TRAITS_OPTIONAL_COMPLEX_MEMBER(name)
+#define IPC_PROTOBUF_MESSAGE_TRAITS_REPEATED_COMPLEX_MEMBER(name)
+#define IPC_PROTOBUF_MESSAGE_TRAITS_END()
+
+#endif // CHROME_COMMON_SAFE_BROWSING_IPC_PROTOBUF_MESSAGE_MACROS_H_

Powered by Google App Engine
This is Rietveld 408576698