OLD | NEW |
| (Empty) |
1 // Copyright 2013 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_CHILD_PLUGIN_PARAM_TRAITS_H_ | |
15 #define CONTENT_CHILD_PLUGIN_PARAM_TRAITS_H_ | |
16 | |
17 #include <string> | |
18 | |
19 #include "content/child/npapi/npruntime_util.h" | |
20 #include "ipc/ipc_message.h" | |
21 #include "ipc/ipc_param_traits.h" | |
22 | |
23 namespace content { | |
24 | |
25 // Define the NPVariant_Param struct and its enum here since it needs manual | |
26 // serialization code. | |
27 enum NPVariant_ParamEnum { | |
28 NPVARIANT_PARAM_VOID, | |
29 NPVARIANT_PARAM_NULL, | |
30 NPVARIANT_PARAM_BOOL, | |
31 NPVARIANT_PARAM_INT, | |
32 NPVARIANT_PARAM_DOUBLE, | |
33 NPVARIANT_PARAM_STRING, | |
34 // Used when when the NPObject is running in the caller's process, so we | |
35 // create an NPObjectProxy in the other process. To support object ownership | |
36 // tracking the routing-Id of the NPObject's owning plugin instance is | |
37 // passed alongside that of the object itself. | |
38 NPVARIANT_PARAM_SENDER_OBJECT_ROUTING_ID, | |
39 // Used when the NPObject we're sending is running in the callee's process | |
40 // (i.e. we have an NPObjectProxy for it). In that case we want the callee | |
41 // to just use the raw pointer. | |
42 NPVARIANT_PARAM_RECEIVER_OBJECT_ROUTING_ID, | |
43 }; | |
44 | |
45 struct NPVariant_Param { | |
46 NPVariant_Param(); | |
47 ~NPVariant_Param(); | |
48 | |
49 NPVariant_ParamEnum type; | |
50 bool bool_value; | |
51 int int_value; | |
52 double double_value; | |
53 std::string string_value; | |
54 int npobject_routing_id; | |
55 int npobject_owner_id; | |
56 }; | |
57 | |
58 struct NPIdentifier_Param { | |
59 NPIdentifier_Param(); | |
60 ~NPIdentifier_Param(); | |
61 | |
62 NPIdentifier identifier; | |
63 }; | |
64 | |
65 } // namespace content | |
66 | |
67 namespace IPC { | |
68 | |
69 template <> | |
70 struct ParamTraits<content::NPVariant_Param> { | |
71 typedef content::NPVariant_Param param_type; | |
72 static void Write(Message* m, const param_type& p); | |
73 static bool Read(const Message* m, base::PickleIterator* iter, param_type* r); | |
74 static void Log(const param_type& p, std::string* l); | |
75 }; | |
76 | |
77 template <> | |
78 struct ParamTraits<content::NPIdentifier_Param> { | |
79 typedef content::NPIdentifier_Param param_type; | |
80 static void Write(Message* m, const param_type& p); | |
81 static bool Read(const Message* m, base::PickleIterator* iter, param_type* r); | |
82 static void Log(const param_type& p, std::string* l); | |
83 }; | |
84 | |
85 } // namespace IPC | |
86 | |
87 #endif // CONTENT_CHILD_PLUGIN_PARAM_TRAITS_H_ | |
OLD | NEW |