IPC::Message -> base::Pickle

This changes consumers of IPC::Message to generally refer
refer to base::Pickle instead when performing serialization
and deserialization operations. The few specific instances
where the IPC::Message interface (Read/WriteAttachent) is
needed can safely be static_cast'd, as IPC::Message is the
only public subclass of base::Pickle.

The purpose of this change is to facilitate the transition
to Mojo IPC, as we've trained the Mojo bindings layer to
use existing ParamTraits<T> parameterized over base::Pickle.

To support this base::Pickle has had some stub interfaces
added for WriteAttachment and ReadAttachment, along with a
Pickle::Attachment.

A follow-up patch will add sizing traits to the standard
IPC_STRUCT macros, enabling the majority of Chrome IPC
structs to be carried over Mojo message pipes as-is.

BUG=577685
[email protected]

Review URL: https://codereview.chromium.org/1659003003

Cr-Commit-Position: refs/heads/master@{#373323}
diff --git a/ipc/param_traits_read_macros.h b/ipc/param_traits_read_macros.h
index a66c89a..45e6352 100644
--- a/ipc/param_traits_read_macros.h
+++ b/ipc/param_traits_read_macros.h
@@ -22,25 +22,25 @@
 #undef IPC_STRUCT_TRAITS_MEMBER
 #undef IPC_STRUCT_TRAITS_PARENT
 #undef IPC_STRUCT_TRAITS_END
-#define IPC_STRUCT_TRAITS_BEGIN(struct_name) \
-  bool ParamTraits<struct_name>:: \
-      Read(const Message* m, base::PickleIterator* iter, param_type* p) { \
-    return
+#define IPC_STRUCT_TRAITS_BEGIN(struct_name)                              \
+  bool ParamTraits<struct_name>::Read(                                    \
+      const base::Pickle* m, base::PickleIterator* iter, param_type* p) { \
+  return
 #define IPC_STRUCT_TRAITS_MEMBER(name) ReadParam(m, iter, &p->name) &&
 #define IPC_STRUCT_TRAITS_PARENT(type) ParamTraits<type>::Read(m, iter, p) &&
 #define IPC_STRUCT_TRAITS_END() 1; }
 
 #undef IPC_ENUM_TRAITS_VALIDATE
-#define IPC_ENUM_TRAITS_VALIDATE(enum_name, validation_expression)    \
-  bool ParamTraits<enum_name>:: \
-      Read(const Message* m, base::PickleIterator* iter, param_type* p) { \
-    int value; \
-    if (!iter->ReadInt(&value)) \
-      return false; \
-    if (!(validation_expression)) \
-      return false; \
-    *p = static_cast<param_type>(value); \
-    return true; \
+#define IPC_ENUM_TRAITS_VALIDATE(enum_name, validation_expression)        \
+  bool ParamTraits<enum_name>::Read(                                      \
+      const base::Pickle* m, base::PickleIterator* iter, param_type* p) { \
+    int value;                                                            \
+    if (!iter->ReadInt(&value))                                           \
+      return false;                                                       \
+    if (!(validation_expression))                                         \
+      return false;                                                       \
+    *p = static_cast<param_type>(value);                                  \
+    return true;                                                          \
   }
 
 #endif  // IPC_PARAM_TRAITS_READ_MACROS_H_