ppb_var_shared.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
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#include "ppapi/shared_impl/ppb_var_shared.h" 6 7#include <limits> 8 9#include "ppapi/c/ppb_var.h" 10#include "ppapi/c/ppb_var_array_buffer.h" 11#include "ppapi/c/pp_var.h" 12#include "ppapi/shared_impl/ppapi_globals.h" 13#include "ppapi/shared_impl/proxy_lock.h" 14#include "ppapi/shared_impl/var.h" 15#include "ppapi/shared_impl/var_tracker.h" 16 17using ppapi::PpapiGlobals; 18using ppapi::StringVar; 19 20namespace ppapi { 21namespace { 22 23 24// PPB_Var methods ------------------------------------------------------------- 25 26void AddRefVar(PP_Var var) { 27 ppapi::ProxyAutoLock lock; 28 PpapiGlobals::Get()->GetVarTracker()->AddRefVar(var); 29} 30 31void ReleaseVar(PP_Var var) { 32 ppapi::ProxyAutoLock lock; 33 PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(var); 34} 35 36PP_Var VarFromUtf8(const char* data, uint32_t len) { 37 ppapi::ProxyAutoLock lock; 38 return StringVar::StringToPPVar(data, len); 39} 40 41PP_Var VarFromUtf8_1_0(PP_Module /*module*/, const char* data, uint32_t len) { 42 return VarFromUtf8(data, len); 43} 44 45const char* VarToUtf8(PP_Var var, uint32_t* len) { 46 ppapi::ProxyAutoLock lock; 47 StringVar* str = StringVar::FromPPVar(var); 48 if (str) { 49 *len = static_cast<uint32_t>(str->value().size()); 50 return str->value().c_str(); 51 } 52 *len = 0; 53 return NULL; 54} 55 56const PPB_Var var_interface = { 57 &AddRefVar, 58 &ReleaseVar, 59 &VarFromUtf8, 60 &VarToUtf8 61}; 62 63const PPB_Var_1_0 var_interface1_0 = { 64 &AddRefVar, 65 &ReleaseVar, 66 &VarFromUtf8_1_0, 67 &VarToUtf8 68}; 69 70 71// PPB_VarArrayBuffer methods -------------------------------------------------- 72 73PP_Var CreateArrayBufferVar(uint32_t size_in_bytes) { 74 return PpapiGlobals::Get()->GetVarTracker()->MakeArrayBufferPPVar( 75 size_in_bytes); 76} 77 78PP_Bool ByteLength(PP_Var array, uint32_t* byte_length) { 79 ArrayBufferVar* buffer = ArrayBufferVar::FromPPVar(array); 80 if (!buffer) 81 return PP_FALSE; 82 *byte_length = buffer->ByteLength(); 83 return PP_TRUE; 84} 85 86void* Map(PP_Var array) { 87 ArrayBufferVar* buffer = ArrayBufferVar::FromPPVar(array); 88 if (!buffer) 89 return NULL; 90 return buffer->Map(); 91} 92 93void Unmap(PP_Var array) { 94 ArrayBufferVar* buffer = ArrayBufferVar::FromPPVar(array); 95 if (buffer) 96 buffer->Unmap(); 97} 98 99const PPB_VarArrayBuffer_1_0 var_arraybuffer_interface = { 100 &CreateArrayBufferVar, 101 &ByteLength, 102 &Map, 103 &Unmap 104}; 105 106} // namespace 107 108// static 109const PPB_Var_1_1* PPB_Var_Shared::GetVarInterface1_1() { 110 return &var_interface; 111} 112 113// static 114const PPB_Var_1_0* PPB_Var_Shared::GetVarInterface1_0() { 115 return &var_interface1_0; 116} 117 118// static 119const PPB_VarArrayBuffer_1_0* PPB_Var_Shared::GetVarArrayBufferInterface1_0() { 120 return &var_arraybuffer_interface; 121} 122 123} // namespace ppapi 124