| Index: ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_var.cc
|
| diff --git a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_var.cc b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_var.cc
|
| index 65823c837545283883e941515dce85676f8c752d..c00266b908a5f08769516cfbdd0818c5c6516651 100644
|
| --- a/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_var.cc
|
| +++ b/ppapi/native_client/src/shared/ppapi_proxy/plugin_ppb_var.cc
|
| @@ -13,6 +13,7 @@
|
| #include "native_client/src/include/nacl_macros.h"
|
| #include "native_client/src/include/portability.h"
|
| #include "native_client/src/include/portability_io.h"
|
| +#include "native_client/src/shared/ppapi_proxy/array_buffer_proxy_var.h"
|
| #include "native_client/src/shared/ppapi_proxy/proxy_var_cache.h"
|
| #include "native_client/src/shared/ppapi_proxy/string_proxy_var.h"
|
| #include "native_client/src/shared/ppapi_proxy/utility.h"
|
| @@ -83,6 +84,41 @@ int64_t GetVarId(PP_Var var) {
|
| }
|
| }
|
|
|
| +PP_Var CreateArrayBuffer(uint32_t size_in_bytes) {
|
| + DebugPrintf("PPB_VarArrayBuffer::Create: size_in_bytes=%"NACL_PRIu32"\n",
|
| + size_in_bytes);
|
| + SharedProxyVar proxy_var(new ArrayBufferProxyVar(size_in_bytes));
|
| + ProxyVarCache::GetInstance().RetainSharedProxyVar(proxy_var);
|
| + PP_Var var;
|
| + var.type = PP_VARTYPE_ARRAY_BUFFER;
|
| + var.value.as_id = proxy_var->id();
|
| + // Increment the reference count for the return to the caller.
|
| + AddRef(var);
|
| + DebugPrintf("PPB_VarArrayBuffer::Create: as_id=%"NACL_PRId64"\n",
|
| + var.value.as_id);
|
| + return var;
|
| +}
|
| +
|
| +uint32_t ByteLength(PP_Var var) {
|
| + DebugPrintf("PPB_VarArrayBuffer::ByteLength: var=PPB_Var(%s)\n",
|
| + PluginVar::DebugString(var).c_str());
|
| + SharedArrayBufferProxyVar buffer_var = ArrayBufferProxyVar::CastFromProxyVar(
|
| + ProxyVarCache::GetInstance().SharedProxyVarForVar(var));
|
| + uint32_t len = buffer_var->buffer_length();
|
| + DebugPrintf("PPB_VarArrayBuffer::ByteLength: length=%"NACL_PRIu32"\n", len);
|
| + return len;
|
| +}
|
| +
|
| +void* Map(PP_Var var) {
|
| + DebugPrintf("PPB_VarArrayBuffer::Map: var=PPB_Var(%s)\n",
|
| + PluginVar::DebugString(var).c_str());
|
| + SharedArrayBufferProxyVar buffer_var = ArrayBufferProxyVar::CastFromProxyVar(
|
| + ProxyVarCache::GetInstance().SharedProxyVarForVar(var));
|
| + void* data = buffer_var->buffer();
|
| + DebugPrintf("PPB_VarArrayBuffer::Map: buffer=%p\n", data);
|
| + return data;
|
| +}
|
| +
|
| } // namespace
|
|
|
| const PPB_Var* PluginVar::GetInterface() {
|
| @@ -105,6 +141,15 @@ const PPB_Var_1_0* PluginVar::GetInterface1_0() {
|
| return &var_interface;
|
| }
|
|
|
| +const PPB_VarArrayBuffer_Dev* PluginVar::GetArrayBufferInterface() {
|
| + static const PPB_VarArrayBuffer_Dev interface = {
|
| + CreateArrayBuffer,
|
| + ByteLength,
|
| + Map
|
| + };
|
| + return &interface;
|
| +}
|
| +
|
| std::string PluginVar::DebugString(const PP_Var& var) {
|
| switch (var.type) {
|
| case PP_VARTYPE_UNDEFINED:
|
| @@ -137,12 +182,18 @@ std::string PluginVar::DebugString(const PP_Var& var) {
|
| {
|
| char buf[32];
|
| const size_t kBufSize = sizeof(buf);
|
| - SNPRINTF(buf, kBufSize, "%"NACL_PRIu64"", GetVarId(var));
|
| + SNPRINTF(buf, kBufSize, "%"NACL_PRId64"", GetVarId(var));
|
| return std::string("##OBJECT##") + buf + "##";
|
| }
|
| + case PP_VARTYPE_ARRAY_BUFFER:
|
| + {
|
| + char buf[32];
|
| + const size_t kBufSize = sizeof(buf);
|
| + SNPRINTF(buf, kBufSize, "%"NACL_PRId64"", GetVarId(var));
|
| + return std::string("##ARRAYBUFFER##") + buf + "##";
|
| + }
|
| case PP_VARTYPE_ARRAY:
|
| case PP_VARTYPE_DICTIONARY:
|
| - case PP_VARTYPE_ARRAY_BUFFER:
|
| NACL_NOTREACHED();
|
| break;
|
| }
|
|
|