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