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 25 matching lines...) Expand all Loading... |
130 case PP_VARTYPE_ARRAY: | 143 case PP_VARTYPE_ARRAY: |
131 case PP_VARTYPE_DICTIONARY: | 144 case PP_VARTYPE_DICTIONARY: |
132 case PP_VARTYPE_ARRAY_BUFFER: | 145 case PP_VARTYPE_ARRAY_BUFFER: |
133 NACL_NOTREACHED(); | 146 NACL_NOTREACHED(); |
134 break; | 147 break; |
135 } | 148 } |
136 ASSERT_MSG(0, "Unexpected type seen"); | 149 ASSERT_MSG(0, "Unexpected type seen"); |
137 return "##ERROR##"; | 150 return "##ERROR##"; |
138 } | 151 } |
139 | 152 |
140 PP_Var PluginVar::StringToPPVar(PP_Module module_id, const std::string& str) { | 153 PP_Var PluginVar::StringToPPVar(const std::string& str) { |
141 static const PPB_Var* ppb_var = NULL; | 154 static const PPB_Var* ppb_var = NULL; |
142 if (ppb_var == NULL) { | 155 if (ppb_var == NULL) { |
143 ppb_var = static_cast<const PPB_Var*>( | 156 ppb_var = static_cast<const PPB_Var*>( |
144 ppapi_proxy::PluginVar::GetInterface()); | 157 ppapi_proxy::PluginVar::GetInterface()); |
145 } | 158 } |
146 if (ppb_var == NULL) { | 159 if (ppb_var == NULL) { |
147 return PP_MakeUndefined(); | 160 return PP_MakeUndefined(); |
148 } | 161 } |
149 return ppb_var->VarFromUtf8( | 162 return ppb_var->VarFromUtf8(str.c_str(), |
150 module_id, str.c_str(), nacl::assert_cast<uint32_t>(str.size())); | 163 nacl::assert_cast<uint32_t>(str.size())); |
151 } | 164 } |
152 | 165 |
153 std::string PluginVar::PPVarToString(const PP_Var& var) { | 166 std::string PluginVar::PPVarToString(const PP_Var& var) { |
154 static const PPB_Var* ppb_var = NULL; | 167 static const PPB_Var* ppb_var = NULL; |
155 if (ppb_var == NULL) { | 168 if (ppb_var == NULL) { |
156 ppb_var = static_cast<const PPB_Var*>( | 169 ppb_var = static_cast<const PPB_Var*>( |
157 ppapi_proxy::PluginVar::GetInterface()); | 170 ppapi_proxy::PluginVar::GetInterface()); |
158 } | 171 } |
159 if (ppb_var == NULL || var.type != PP_VARTYPE_STRING) { | 172 if (ppb_var == NULL || var.type != PP_VARTYPE_STRING) { |
160 return ""; | 173 return ""; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 break; | 205 break; |
193 case PP_VARTYPE_ARRAY: | 206 case PP_VARTYPE_ARRAY: |
194 case PP_VARTYPE_DICTIONARY: | 207 case PP_VARTYPE_DICTIONARY: |
195 case PP_VARTYPE_ARRAY_BUFFER: | 208 case PP_VARTYPE_ARRAY_BUFFER: |
196 NACL_NOTREACHED(); | 209 NACL_NOTREACHED(); |
197 break; | 210 break; |
198 } | 211 } |
199 } | 212 } |
200 | 213 |
201 } // namespace ppapi_proxy | 214 } // namespace ppapi_proxy |
OLD | NEW |