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 #ifndef PPAPI_PROXY_PPAPI_PARAM_TRAITS_H_ 6 #define PPAPI_PROXY_PPAPI_PARAM_TRAITS_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "ipc/ipc_message_utils.h" 12 #include "ipc/ipc_platform_file.h" 13 #include "ppapi/c/pp_completion_callback.h" 14 #include "ppapi/c/pp_rect.h" 15 #include "ppapi/c/pp_var.h" 16 #include "ppapi/proxy/ppapi_proxy_export.h" 17 #include "ppapi/shared_impl/file_path.h" 18 #include "ppapi/shared_impl/file_ref_create_info.h" 19 #include "ppapi/shared_impl/ppapi_permissions.h" 20 #include "ppapi/shared_impl/ppb_file_ref_shared.h" 21 #include "ppapi/shared_impl/socket_option_data.h" 22 23 struct PP_FileInfo; 24 struct PP_NetAddress_Private; 25 26 namespace ppapi { 27 28 class HostResource; 29 class PPB_X509Certificate_Fields; 30 31 namespace proxy { 32 33 struct PPBFlash_DrawGlyphs_Params; 34 struct PPBURLLoader_UpdateProgress_Params; 35 struct SerializedDirEntry; 36 struct SerializedFontDescription; 37 struct SerializedTrueTypeFontDesc; 38 class SerializedFlashMenu; 39 class SerializedHandle; 40 class SerializedVar; 41 42 } // namespace proxy 43 } // namespace ppapi 44 45 namespace IPC { 46 47 template<> 48 struct PPAPI_PROXY_EXPORT ParamTraits<PP_Bool> { 49 typedef PP_Bool param_type; 50 static void Write(Message* m, const param_type& p); 51 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 52 static void Log(const param_type& p, std::string* l); 53 }; 54 55 template<> 56 struct PPAPI_PROXY_EXPORT ParamTraits<PP_FileInfo> { 57 typedef PP_FileInfo param_type; 58 static void Write(Message* m, const param_type& p); 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 template <> 64 struct PPAPI_PROXY_EXPORT ParamTraits<PP_NetAddress_Private> { 65 typedef PP_NetAddress_Private param_type; 66 static void Write(Message* m, const param_type& p); 67 static bool Read(const Message* m, PickleIterator* iter, param_type* p); 68 static void Log(const param_type& p, std::string* l); 69 }; 70 71 template<> 72 struct PPAPI_PROXY_EXPORT ParamTraits< 73 ppapi::proxy::PPBFlash_DrawGlyphs_Params> { 74 typedef ppapi::proxy::PPBFlash_DrawGlyphs_Params param_type; 75 static void Write(Message* m, const param_type& p); 76 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 77 static void Log(const param_type& p, std::string* l); 78 }; 79 80 // TODO(teravest): Remove this when we've switched over to the new proxy. 81 template<> 82 struct PPAPI_PROXY_EXPORT ParamTraits<ppapi::PPB_FileRef_CreateInfo> { 83 typedef ppapi::PPB_FileRef_CreateInfo param_type; 84 static void Write(Message* m, const param_type& p); 85 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 86 static void Log(const param_type& p, std::string* l); 87 }; 88 89 template<> 90 struct PPAPI_PROXY_EXPORT ParamTraits< 91 ppapi::proxy::PPBURLLoader_UpdateProgress_Params> { 92 typedef ppapi::proxy::PPBURLLoader_UpdateProgress_Params param_type; 93 static void Write(Message* m, const param_type& p); 94 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 95 static void Log(const param_type& p, std::string* l); 96 }; 97 98 template<> 99 struct PPAPI_PROXY_EXPORT ParamTraits<ppapi::proxy::SerializedDirEntry> { 100 typedef ppapi::proxy::SerializedDirEntry param_type; 101 static void Write(Message* m, const param_type& p); 102 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 103 static void Log(const param_type& p, std::string* l); 104 }; 105 106 template<> 107 struct PPAPI_PROXY_EXPORT ParamTraits<ppapi::proxy::SerializedFontDescription> { 108 typedef ppapi::proxy::SerializedFontDescription param_type; 109 static void Write(Message* m, const param_type& p); 110 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 111 static void Log(const param_type& p, std::string* l); 112 }; 113 114 template<> 115 struct PPAPI_PROXY_EXPORT 116 ParamTraits<ppapi::proxy::SerializedTrueTypeFontDesc> { 117 typedef ppapi::proxy::SerializedTrueTypeFontDesc param_type; 118 static void Write(Message* m, const param_type& p); 119 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 120 static void Log(const param_type& p, std::string* l); 121 }; 122 123 template<> 124 struct PPAPI_PROXY_EXPORT ParamTraits<ppapi::proxy::SerializedHandle> { 125 typedef ppapi::proxy::SerializedHandle param_type; 126 static void Write(Message* m, const param_type& p); 127 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 128 static void Log(const param_type& p, std::string* l); 129 }; 130 131 template<> 132 struct PPAPI_PROXY_EXPORT ParamTraits<ppapi::HostResource> { 133 typedef ppapi::HostResource param_type; 134 static void Write(Message* m, const param_type& p); 135 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 136 static void Log(const param_type& p, std::string* l); 137 }; 138 139 template<> 140 struct PPAPI_PROXY_EXPORT ParamTraits<ppapi::proxy::SerializedVar> { 141 typedef ppapi::proxy::SerializedVar param_type; 142 static void Write(Message* m, const param_type& p); 143 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 144 static void Log(const param_type& p, std::string* l); 145 }; 146 147 template<> 148 struct PPAPI_PROXY_EXPORT ParamTraits< 149 std::vector<ppapi::proxy::SerializedVar> > { 150 typedef std::vector<ppapi::proxy::SerializedVar> param_type; 151 static void Write(Message* m, const param_type& p); 152 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 153 static void Log(const param_type& p, std::string* l); 154 }; 155 156 template<> 157 struct PPAPI_PROXY_EXPORT ParamTraits< std::vector< 158 ppapi::PPB_FileRef_CreateInfo> > { 159 typedef std::vector<ppapi::PPB_FileRef_CreateInfo> param_type; 160 static void Write(Message* m, const param_type& p); 161 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 162 static void Log(const param_type& p, std::string* l); 163 }; 164 165 template<> 166 struct PPAPI_PROXY_EXPORT ParamTraits<ppapi::PpapiPermissions> { 167 typedef ppapi::PpapiPermissions param_type; 168 static void Write(Message* m, const param_type& p); 169 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 170 static void Log(const param_type& p, std::string* l); 171 }; 172 173 #if !defined(OS_NACL) && !defined(NACL_WIN64) 174 template <> 175 struct ParamTraits<ppapi::PepperFilePath> { 176 typedef ppapi::PepperFilePath param_type; 177 static void Write(Message* m, const param_type& p); 178 static bool Read(const Message* m, PickleIterator* iter, param_type* p); 179 static void Log(const param_type& p, std::string* l); 180 }; 181 182 template<> 183 struct PPAPI_PROXY_EXPORT ParamTraits<ppapi::proxy::SerializedFlashMenu> { 184 typedef ppapi::proxy::SerializedFlashMenu param_type; 185 static void Write(Message* m, const param_type& p); 186 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 187 static void Log(const param_type& p, std::string* l); 188 }; 189 #endif // !defined(OS_NACL) && !defined(NACL_WIN64) 190 191 template<> 192 struct PPAPI_PROXY_EXPORT ParamTraits<ppapi::PPB_X509Certificate_Fields> { 193 typedef ppapi::PPB_X509Certificate_Fields param_type; 194 static void Write(Message* m, const param_type& p); 195 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 196 static void Log(const param_type& p, std::string* l); 197 }; 198 199 template<> 200 struct PPAPI_PROXY_EXPORT ParamTraits<ppapi::SocketOptionData> { 201 typedef ppapi::SocketOptionData param_type; 202 static void Write(Message* m, const param_type& p); 203 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 204 static void Log(const param_type& p, std::string* l); 205 }; 206 207 } // namespace IPC 208 209 #endif // PPAPI_PROXY_PPAPI_PARAM_TRAITS_H_ 210