1// Copyright 2014 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 "fake_ppapi/fake_var_array_interface.h" 6 7#include "fake_ppapi/fake_var_manager.h" 8#include "gtest/gtest.h" 9 10FakeVarArrayInterface::FakeVarArrayInterface(FakeVarManager* manager) 11 : manager_(manager) {} 12 13 14PP_Var FakeVarArrayInterface::Create() { 15 FakeVarData* var_data = manager_->CreateVarData(); 16 var_data->type = PP_VARTYPE_ARRAY; 17 18 struct PP_Var result = {PP_VARTYPE_ARRAY, 0, {PP_FALSE}}; 19 result.value.as_id = var_data->id; 20 return result; 21} 22 23PP_Var FakeVarArrayInterface::Get(PP_Var var, uint32_t index) { 24 EXPECT_EQ(var.type, PP_VARTYPE_ARRAY); 25 FakeVarData* data = manager_->GetVarData(var); 26 EXPECT_NE(static_cast<FakeVarData*>(NULL), data); 27 if (index >= data->array_value.size()) 28 return PP_MakeUndefined(); 29 30 // Return the item at the given index, after first incrementing 31 // its refcount. It is up the callee to then call Release. 32 PP_Var result = data->array_value[index]; 33 manager_->AddRef(result); 34 return result; 35} 36 37PP_Bool FakeVarArrayInterface::Set(PP_Var var, uint32_t index, PP_Var value) { 38 EXPECT_EQ(var.type, PP_VARTYPE_ARRAY); 39 FakeVarData* data = manager_->GetVarData(var); 40 EXPECT_NE(static_cast<FakeVarData*>(NULL), data); 41 if (index >= data->array_value.size()) 42 data->array_value.resize(index+1); 43 else 44 manager_->Release(data->array_value[index]); 45 data->array_value[index] = value; 46 manager_->AddRef(value); 47 return PP_TRUE; 48} 49 50uint32_t FakeVarArrayInterface::GetLength(PP_Var var) { 51 EXPECT_EQ(var.type, PP_VARTYPE_ARRAY); 52 FakeVarData* data = manager_->GetVarData(var); 53 EXPECT_NE(static_cast<FakeVarData*>(NULL), data); 54 return data->array_value.size(); 55} 56 57PP_Bool FakeVarArrayInterface::SetLength(PP_Var var, uint32_t length) { 58 EXPECT_EQ(var.type, PP_VARTYPE_ARRAY); 59 FakeVarData* data = manager_->GetVarData(var); 60 EXPECT_NE(static_cast<FakeVarData*>(NULL), data); 61 data->array_value.resize(length); 62 return PP_TRUE; 63} 64