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