1// Copyright (c) 2012 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// This file is used to define IPC::ParamTraits<> specializations for a number
6// of types so that they can be serialized over IPC.  IPC::ParamTraits<>
7// specializations for basic types (like int and std::string) and types in the
8// 'base' project can be found in ipc/ipc_message_utils.h.  This file contains
9// specializations for types that are used by the content code, and which need
10// manual serialization code.  This is usually because they're not structs with
11// public members, or because the same type is being used in multiple
12// *_messages.h headers.
13
14#ifndef CONTENT_COMMON_CONTENT_PARAM_TRAITS_H_
15#define CONTENT_COMMON_CONTENT_PARAM_TRAITS_H_
16
17#include "content/common/content_param_traits_macros.h"
18#include "content/common/cursors/webcursor.h"
19#include "third_party/WebKit/public/web/WebInputEvent.h"
20
21namespace gfx {
22class Range;
23}
24
25namespace net {
26class IPEndPoint;
27}
28
29namespace IPC {
30
31template <>
32struct ParamTraits<gfx::Range> {
33  typedef gfx::Range param_type;
34  static void Write(Message* m, const param_type& p);
35  static bool Read(const Message* m, PickleIterator* iter, param_type* r);
36  static void Log(const param_type& p, std::string* l);
37};
38
39template <>
40struct ParamTraits<content::WebCursor> {
41  typedef content::WebCursor param_type;
42  static void Write(Message* m, const param_type& p) {
43    p.Serialize(m);
44  }
45  static bool Read(const Message* m, PickleIterator* iter, param_type* r)  {
46    return r->Deserialize(iter);
47  }
48  static void Log(const param_type& p, std::string* l) {
49    l->append("<WebCursor>");
50  }
51};
52
53typedef const blink::WebInputEvent* WebInputEventPointer;
54template <>
55struct ParamTraits<WebInputEventPointer> {
56  typedef WebInputEventPointer param_type;
57  static void Write(Message* m, const param_type& p);
58  // Note: upon read, the event has the lifetime of the message.
59  static bool Read(const Message* m, PickleIterator* iter, param_type* r);
60  static void Log(const param_type& p, std::string* l);
61};
62
63}  // namespace IPC
64
65#endif  // CONTENT_COMMON_CONTENT_PARAM_TRAITS_H_
66