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_BLINK_H_
6#define MOJO_PUBLIC_CPP_BINDINGS_TESTS_PICKLED_TYPES_BLINK_H_
7
8#include <stddef.h>
9
10#include <string>
11
12#include "base/logging.h"
13#include "base/macros.h"
14#include "ipc/ipc_message_macros.h"
15#include "ipc/ipc_param_traits.h"
16
17namespace base {
18class Pickle;
19class PickleIterator;
20class PickleSizer;
21}
22
23namespace mojo {
24namespace test {
25
26// Implementation of types with IPC::ParamTraits for consumers in Blink.
27
28enum class PickledEnumBlink { VALUE_0, VALUE_1 };
29
30// To make things slightly more interesting, this variation of the type doesn't
31// support negative values. It'll DCHECK if you try to construct it with any,
32// and it will fail deserialization if negative values are decoded.
33class PickledStructBlink {
34 public:
35  PickledStructBlink();
36  PickledStructBlink(int foo, int bar);
37  PickledStructBlink(PickledStructBlink&& other) = default;
38  ~PickledStructBlink();
39
40  PickledStructBlink& operator=(PickledStructBlink&& other) = default;
41
42  int foo() const { return foo_; }
43  void set_foo(int foo) {
44    DCHECK_GE(foo, 0);
45    foo_ = foo;
46  }
47
48  int bar() const { return bar_; }
49  void set_bar(int bar) {
50    DCHECK_GE(bar, 0);
51    bar_ = bar;
52  }
53
54 private:
55  int foo_ = 0;
56  int bar_ = 0;
57
58  DISALLOW_COPY_AND_ASSIGN(PickledStructBlink);
59};
60
61}  // namespace test
62}  // namespace mojo
63
64namespace IPC {
65
66template <>
67struct ParamTraits<mojo::test::PickledStructBlink> {
68  using param_type = mojo::test::PickledStructBlink;
69
70  static void GetSize(base::PickleSizer* sizer, const param_type& p);
71  static void Write(base::Pickle* m, const param_type& p);
72  static bool Read(const base::Pickle* m,
73                   base::PickleIterator* iter,
74                   param_type* r);
75  static void Log(const param_type& p, std::string* l) {}
76};
77
78}  // namespace IPC
79
80IPC_ENUM_TRAITS_MAX_VALUE(mojo::test::PickledEnumBlink,
81                          mojo::test::PickledEnumBlink::VALUE_1)
82
83#endif  // MOJO_PUBLIC_CPP_BINDINGS_TESTS_PICKLED_TYPES_BLINK_H_
84