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, 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, 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_ 88