| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "native_client/src/shared/ppapi_proxy/plugin_ppb_var.h" | 5 #include "native_client/src/shared/ppapi_proxy/plugin_ppb_var.h" |
| 6 | 6 |
| 7 #include <stdio.h> | 7 #include <stdio.h> |
| 8 | 8 |
| 9 #include <string> | 9 #include <string> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 PluginVar::DebugString(var).c_str()); | 28 PluginVar::DebugString(var).c_str()); |
| 29 ProxyVarCache::GetInstance().RetainProxyVar(var); | 29 ProxyVarCache::GetInstance().RetainProxyVar(var); |
| 30 } | 30 } |
| 31 | 31 |
| 32 void Release(PP_Var var) { | 32 void Release(PP_Var var) { |
| 33 DebugPrintf("PPB_Var::Release: var=PPB_Var(%s)\n", | 33 DebugPrintf("PPB_Var::Release: var=PPB_Var(%s)\n", |
| 34 PluginVar::DebugString(var).c_str()); | 34 PluginVar::DebugString(var).c_str()); |
| 35 ProxyVarCache::GetInstance().ReleaseProxyVar(var); | 35 ProxyVarCache::GetInstance().ReleaseProxyVar(var); |
| 36 } | 36 } |
| 37 | 37 |
| 38 PP_Var VarFromUtf8(PP_Module module_id, const char* data, uint32_t len) { | 38 PP_Var VarFromUtf8(const char* data, uint32_t len) { |
| 39 DebugPrintf("PPB_Var::VarFromUtf8: data='%.*s'\n", len, data); | 39 DebugPrintf("PPB_Var::VarFromUtf8: data='%.*s'\n", len, data); |
| 40 UNREFERENCED_PARAMETER(module_id); | |
| 41 if (!StringIsUtf8(data, len)) { | 40 if (!StringIsUtf8(data, len)) { |
| 42 DebugPrintf("PPB_Var::VarFromUtf8: not UTF8\n"); | 41 DebugPrintf("PPB_Var::VarFromUtf8: not UTF8\n"); |
| 43 return PP_MakeNull(); | 42 return PP_MakeNull(); |
| 44 } | 43 } |
| 45 SharedProxyVar proxy_var(new StringProxyVar(data, len)); | 44 SharedProxyVar proxy_var(new StringProxyVar(data, len)); |
| 46 ProxyVarCache::GetInstance().RetainSharedProxyVar(proxy_var); | 45 ProxyVarCache::GetInstance().RetainSharedProxyVar(proxy_var); |
| 47 PP_Var var; | 46 PP_Var var; |
| 48 var.type = PP_VARTYPE_STRING; | 47 var.type = PP_VARTYPE_STRING; |
| 49 var.value.as_id = proxy_var->id(); | 48 var.value.as_id = proxy_var->id(); |
| 50 // Increment the reference count for the return to the caller. | 49 // Increment the reference count for the return to the caller. |
| 51 AddRef(var); | 50 AddRef(var); |
| 52 DebugPrintf("PPB_Var::VarFromUtf8: as_id=%"NACL_PRId64"\n", var.value.as_id); | 51 DebugPrintf("PPB_Var::VarFromUtf8: as_id=%"NACL_PRId64"\n", var.value.as_id); |
| 53 return var; | 52 return var; |
| 54 } | 53 } |
| 55 | 54 |
| 55 PP_Var VarFromUtf8_1_0(PP_Module /*module*/, const char* data, uint32_t len) { |
| 56 return VarFromUtf8(data, len); |
| 57 } |
| 58 |
| 56 const char* VarToUtf8(PP_Var var, uint32_t* len) { | 59 const char* VarToUtf8(PP_Var var, uint32_t* len) { |
| 57 DebugPrintf("PPB_Var::VarToUtf8: as_id=%"NACL_PRId64"\n", var.value.as_id); | 60 DebugPrintf("PPB_Var::VarToUtf8: as_id=%"NACL_PRId64"\n", var.value.as_id); |
| 58 SharedStringProxyVar string_var = StringProxyVar::CastFromProxyVar( | 61 SharedStringProxyVar string_var = StringProxyVar::CastFromProxyVar( |
| 59 ProxyVarCache::GetInstance().SharedProxyVarForVar(var)); | 62 ProxyVarCache::GetInstance().SharedProxyVarForVar(var)); |
| 60 const char* data = NULL; | 63 const char* data = NULL; |
| 61 if (string_var == NULL) { | 64 if (string_var == NULL) { |
| 62 *len = 0; | 65 *len = 0; |
| 63 } else { | 66 } else { |
| 64 *len = static_cast<uint32_t>(string_var->contents().size()); | 67 *len = static_cast<uint32_t>(string_var->contents().size()); |
| 65 // Mimics PPAPI implementation: as long as SharedStringProxyVar is alive, | 68 // Mimics PPAPI implementation: as long as SharedStringProxyVar is alive, |
| (...skipping 19 matching lines...) Expand all Loading... |
| 85 const PPB_Var* PluginVar::GetInterface() { | 88 const PPB_Var* PluginVar::GetInterface() { |
| 86 static const PPB_Var var_interface = { | 89 static const PPB_Var var_interface = { |
| 87 AddRef, | 90 AddRef, |
| 88 Release, | 91 Release, |
| 89 VarFromUtf8, | 92 VarFromUtf8, |
| 90 VarToUtf8 | 93 VarToUtf8 |
| 91 }; | 94 }; |
| 92 return &var_interface; | 95 return &var_interface; |
| 93 } | 96 } |
| 94 | 97 |
| 98 const PPB_Var_1_0* PluginVar::GetInterface1_0() { |
| 99 static const PPB_Var_1_0 var_interface = { |
| 100 AddRef, |
| 101 Release, |
| 102 VarFromUtf8_1_0, |
| 103 VarToUtf8 |
| 104 }; |
| 105 return &var_interface; |
| 106 } |
| 107 |
| 95 std::string PluginVar::DebugString(const PP_Var& var) { | 108 std::string PluginVar::DebugString(const PP_Var& var) { |
| 96 switch (var.type) { | 109 switch (var.type) { |
| 97 case PP_VARTYPE_UNDEFINED: | 110 case PP_VARTYPE_UNDEFINED: |
| 98 return "##UNDEFINED##"; | 111 return "##UNDEFINED##"; |
| 99 case PP_VARTYPE_NULL: | 112 case PP_VARTYPE_NULL: |
| 100 return "##NULL##"; | 113 return "##NULL##"; |
| 101 case PP_VARTYPE_BOOL: | 114 case PP_VARTYPE_BOOL: |
| 102 return (var.value.as_bool ? "true" : "false"); | 115 return (var.value.as_bool ? "true" : "false"); |
| 103 case PP_VARTYPE_INT32: | 116 case PP_VARTYPE_INT32: |
| 104 { | 117 { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 129 } | 142 } |
| 130 case PP_VARTYPE_ARRAY: | 143 case PP_VARTYPE_ARRAY: |
| 131 case PP_VARTYPE_DICTIONARY: | 144 case PP_VARTYPE_DICTIONARY: |
| 132 NACL_NOTREACHED(); | 145 NACL_NOTREACHED(); |
| 133 break; | 146 break; |
| 134 } | 147 } |
| 135 ASSERT_MSG(0, "Unexpected type seen"); | 148 ASSERT_MSG(0, "Unexpected type seen"); |
| 136 return "##ERROR##"; | 149 return "##ERROR##"; |
| 137 } | 150 } |
| 138 | 151 |
| 139 PP_Var PluginVar::StringToPPVar(PP_Module module_id, const std::string& str) { | 152 PP_Var PluginVar::StringToPPVar(const std::string& str) { |
| 140 static const PPB_Var* ppb_var = NULL; | 153 static const PPB_Var* ppb_var = NULL; |
| 141 if (ppb_var == NULL) { | 154 if (ppb_var == NULL) { |
| 142 ppb_var = static_cast<const PPB_Var*>( | 155 ppb_var = static_cast<const PPB_Var*>( |
| 143 ppapi_proxy::PluginVar::GetInterface()); | 156 ppapi_proxy::PluginVar::GetInterface()); |
| 144 } | 157 } |
| 145 if (ppb_var == NULL) { | 158 if (ppb_var == NULL) { |
| 146 return PP_MakeUndefined(); | 159 return PP_MakeUndefined(); |
| 147 } | 160 } |
| 148 return ppb_var->VarFromUtf8( | 161 return ppb_var->VarFromUtf8(str.c_str(), |
| 149 module_id, str.c_str(), nacl::assert_cast<uint32_t>(str.size())); | 162 nacl::assert_cast<uint32_t>(str.size())); |
| 150 } | 163 } |
| 151 | 164 |
| 152 std::string PluginVar::PPVarToString(const PP_Var& var) { | 165 std::string PluginVar::PPVarToString(const PP_Var& var) { |
| 153 static const PPB_Var* ppb_var = NULL; | 166 static const PPB_Var* ppb_var = NULL; |
| 154 if (ppb_var == NULL) { | 167 if (ppb_var == NULL) { |
| 155 ppb_var = static_cast<const PPB_Var*>( | 168 ppb_var = static_cast<const PPB_Var*>( |
| 156 ppapi_proxy::PluginVar::GetInterface()); | 169 ppapi_proxy::PluginVar::GetInterface()); |
| 157 } | 170 } |
| 158 if (ppb_var == NULL || var.type != PP_VARTYPE_STRING) { | 171 if (ppb_var == NULL || var.type != PP_VARTYPE_STRING) { |
| 159 return ""; | 172 return ""; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 190 DebugPrintf("PP_Var(object: %"NACL_PRIu64")", GetVarId(var)); | 203 DebugPrintf("PP_Var(object: %"NACL_PRIu64")", GetVarId(var)); |
| 191 break; | 204 break; |
| 192 case PP_VARTYPE_ARRAY: | 205 case PP_VARTYPE_ARRAY: |
| 193 case PP_VARTYPE_DICTIONARY: | 206 case PP_VARTYPE_DICTIONARY: |
| 194 NACL_NOTREACHED(); | 207 NACL_NOTREACHED(); |
| 195 break; | 208 break; |
| 196 } | 209 } |
| 197 } | 210 } |
| 198 | 211 |
| 199 } // namespace ppapi_proxy | 212 } // namespace ppapi_proxy |
| OLD | NEW |