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