diff options
Diffstat (limited to 'chromium/chrome/common/safe_browsing/ipc_protobuf_message_macros.h')
-rw-r--r-- | chromium/chrome/common/safe_browsing/ipc_protobuf_message_macros.h | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/chromium/chrome/common/safe_browsing/ipc_protobuf_message_macros.h b/chromium/chrome/common/safe_browsing/ipc_protobuf_message_macros.h new file mode 100644 index 00000000000..db17241ad7f --- /dev/null +++ b/chromium/chrome/common/safe_browsing/ipc_protobuf_message_macros.h @@ -0,0 +1,59 @@ +// 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(base::Pickle* m, const param_type& p); \ + static bool Read(const base::Pickle* m, \ + base::PickleIterator* iter, \ + param_type* p); \ + static void Log(const param_type& p, std::string* l); \ + \ + private: \ + template <class P> \ + static bool ReadParamF(const base::Pickle* m, \ + base::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_ |