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
FakeVarArrayInterface(FakeVarManager * manager)10 FakeVarArrayInterface::FakeVarArrayInterface(FakeVarManager* manager)
11 : manager_(manager) {}
12
13
Create()14 PP_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
Get(PP_Var var,uint32_t index)23 PP_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
Set(PP_Var var,uint32_t index,PP_Var value)37 PP_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
GetLength(PP_Var var)50 uint32_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
SetLength(PP_Var var,uint32_t length)57 PP_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