1// Copyright 2015 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef MOJO_PUBLIC_CPP_BINDINGS_TESTS_PICKLED_TYPES_CHROMIUM_H_
6#define MOJO_PUBLIC_CPP_BINDINGS_TESTS_PICKLED_TYPES_CHROMIUM_H_
7
8#include <stddef.h>
9
10#include <string>
11
12#include "base/macros.h"
13#include "ipc/ipc_message_macros.h"
14#include "ipc/ipc_param_traits.h"
15
16namespace base {
17class Pickle;
18class PickleIterator;
19class PickleSizer;
20}
21
22namespace mojo {
23namespace test {
24
25// Implementation of types with IPC::ParamTraits for consumers in the greater
26// Chromium tree.
27
28enum class PickledEnumChromium { VALUE_0, VALUE_1, VALUE_2 };
29
30class PickledStructChromium {
31 public:
32  PickledStructChromium();
33  PickledStructChromium(int foo, int bar);
34  PickledStructChromium(PickledStructChromium&& other) = default;
35  ~PickledStructChromium();
36
37  PickledStructChromium& operator=(PickledStructChromium&& other) = default;
38
39  int foo() const { return foo_; }
40  void set_foo(int foo) { foo_ = foo; }
41
42  int bar() const { return bar_; }
43  void set_bar(int bar) { bar_ = bar; }
44
45  // The |baz| field should never be serialized.
46  int baz() const { return baz_; }
47  void set_baz(int baz) { baz_ = baz; }
48
49 private:
50  int foo_ = 0;
51  int bar_ = 0;
52  int baz_ = 0;
53
54  DISALLOW_COPY_AND_ASSIGN(PickledStructChromium);
55};
56
57bool operator==(const PickledStructChromium& a, const PickledStructChromium& b);
58
59}  // namespace test
60}  // namespace mojo
61
62namespace IPC {
63
64template <>
65struct ParamTraits<mojo::test::PickledStructChromium> {
66  using param_type = mojo::test::PickledStructChromium;
67
68  static void GetSize(base::PickleSizer* sizer, const param_type& p);
69  static void Write(base::Pickle* m, const param_type& p);
70  static bool Read(const base::Pickle* m,
71                   base::PickleIterator* iter,
72                   param_type* r);
73  static void Log(const param_type& p, std::string* l) {}
74};
75
76}  // namespace IPC
77
78IPC_ENUM_TRAITS_MAX_VALUE(mojo::test::PickledEnumChromium,
79                          mojo::test::PickledEnumChromium::VALUE_2)
80
81#endif  // MOJO_PUBLIC_CPP_BINDINGS_TESTS_PICKLED_TYPES_CHROMIUM_H_
82