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 |