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/compositor_layer_data.h" 18#include "ppapi/shared_impl/file_path.h" 19#include "ppapi/shared_impl/file_ref_create_info.h" 20#include "ppapi/shared_impl/media_stream_video_track_shared.h" 21#include "ppapi/shared_impl/ppapi_permissions.h" 22#include "ppapi/shared_impl/socket_option_data.h" 23 24struct PP_NetAddress_Private; 25 26namespace ppapi { 27 28class HostResource; 29class PPB_X509Certificate_Fields; 30 31namespace proxy { 32 33struct PPBFlash_DrawGlyphs_Params; 34struct PPBURLLoader_UpdateProgress_Params; 35struct SerializedDirEntry; 36struct SerializedFontDescription; 37struct SerializedTrueTypeFontDesc; 38class SerializedFlashMenu; 39class SerializedHandle; 40class SerializedVar; 41 42} // namespace proxy 43} // namespace ppapi 44 45namespace IPC { 46 47template<> 48struct 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 55template <> 56struct PPAPI_PROXY_EXPORT ParamTraits<PP_NetAddress_Private> { 57 typedef PP_NetAddress_Private param_type; 58 static void Write(Message* m, const param_type& p); 59 static bool Read(const Message* m, PickleIterator* iter, param_type* p); 60 static void Log(const param_type& p, std::string* l); 61}; 62 63template<> 64struct PPAPI_PROXY_EXPORT ParamTraits< 65 ppapi::proxy::PPBFlash_DrawGlyphs_Params> { 66 typedef ppapi::proxy::PPBFlash_DrawGlyphs_Params param_type; 67 static void Write(Message* m, const param_type& p); 68 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 69 static void Log(const param_type& p, std::string* l); 70}; 71 72template<> 73struct PPAPI_PROXY_EXPORT ParamTraits< 74 ppapi::proxy::PPBURLLoader_UpdateProgress_Params> { 75 typedef ppapi::proxy::PPBURLLoader_UpdateProgress_Params param_type; 76 static void Write(Message* m, const param_type& p); 77 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 78 static void Log(const param_type& p, std::string* l); 79}; 80 81template<> 82struct PPAPI_PROXY_EXPORT ParamTraits<ppapi::proxy::SerializedDirEntry> { 83 typedef ppapi::proxy::SerializedDirEntry 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 89template<> 90struct PPAPI_PROXY_EXPORT ParamTraits<ppapi::proxy::SerializedFontDescription> { 91 typedef ppapi::proxy::SerializedFontDescription param_type; 92 static void Write(Message* m, const param_type& p); 93 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 94 static void Log(const param_type& p, std::string* l); 95}; 96 97template<> 98struct PPAPI_PROXY_EXPORT 99 ParamTraits<ppapi::proxy::SerializedTrueTypeFontDesc> { 100 typedef ppapi::proxy::SerializedTrueTypeFontDesc 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 106template<> 107struct PPAPI_PROXY_EXPORT ParamTraits<ppapi::proxy::SerializedHandle> { 108 typedef ppapi::proxy::SerializedHandle 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 114template<> 115struct PPAPI_PROXY_EXPORT ParamTraits<ppapi::HostResource> { 116 typedef ppapi::HostResource param_type; 117 static void Write(Message* m, const param_type& p); 118 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 119 static void Log(const param_type& p, std::string* l); 120}; 121 122template<> 123struct PPAPI_PROXY_EXPORT ParamTraits<ppapi::proxy::SerializedVar> { 124 typedef ppapi::proxy::SerializedVar param_type; 125 static void Write(Message* m, const param_type& p); 126 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 127 static void Log(const param_type& p, std::string* l); 128}; 129 130template<> 131struct PPAPI_PROXY_EXPORT ParamTraits< 132 std::vector<ppapi::proxy::SerializedVar> > { 133 typedef std::vector<ppapi::proxy::SerializedVar> 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 139template<> 140struct PPAPI_PROXY_EXPORT ParamTraits<ppapi::PpapiPermissions> { 141 typedef ppapi::PpapiPermissions 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#if !defined(OS_NACL) && !defined(NACL_WIN64) 148template <> 149struct ParamTraits<ppapi::PepperFilePath> { 150 typedef ppapi::PepperFilePath param_type; 151 static void Write(Message* m, const param_type& p); 152 static bool Read(const Message* m, PickleIterator* iter, param_type* p); 153 static void Log(const param_type& p, std::string* l); 154}; 155 156template<> 157struct PPAPI_PROXY_EXPORT ParamTraits<ppapi::proxy::SerializedFlashMenu> { 158 typedef ppapi::proxy::SerializedFlashMenu param_type; 159 static void Write(Message* m, const param_type& p); 160 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 161 static void Log(const param_type& p, std::string* l); 162}; 163#endif // !defined(OS_NACL) && !defined(NACL_WIN64) 164 165template<> 166struct PPAPI_PROXY_EXPORT ParamTraits<ppapi::PPB_X509Certificate_Fields> { 167 typedef ppapi::PPB_X509Certificate_Fields 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 173template<> 174struct PPAPI_PROXY_EXPORT ParamTraits<ppapi::SocketOptionData> { 175 typedef ppapi::SocketOptionData param_type; 176 static void Write(Message* m, const param_type& p); 177 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 178 static void Log(const param_type& p, std::string* l); 179}; 180 181template<> 182struct PPAPI_PROXY_EXPORT ParamTraits<ppapi::CompositorLayerData::Transform> { 183 typedef ppapi::CompositorLayerData::Transform param_type; 184 static void Write(Message* m, const param_type& p); 185 static bool Read(const Message* m, PickleIterator* iter, param_type* r); 186 static void Log(const param_type& p, std::string* l); 187}; 188 189} // namespace IPC 190 191#endif // PPAPI_PROXY_PPAPI_PARAM_TRAITS_H_ 192