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_resource_array_shared.h"
6
7#include "base/logging.h"
8#include "ppapi/shared_impl/ppapi_globals.h"
9#include "ppapi/shared_impl/resource_tracker.h"
10
11using ppapi::thunk::PPB_ResourceArray_API;
12
13namespace ppapi {
14
15PPB_ResourceArray_Shared::PPB_ResourceArray_Shared(ResourceObjectType type,
16                                                   PP_Instance instance,
17                                                   const PP_Resource elements[],
18                                                   uint32_t size)
19    : Resource(type, instance) {
20  DCHECK(resources_.empty());
21
22  resources_.reserve(size);
23  for (uint32_t index = 0; index < size; ++index) {
24    PP_Resource element = elements[index];
25    if (element)
26      PpapiGlobals::Get()->GetResourceTracker()->AddRefResource(element);
27    resources_.push_back(element);
28  }
29}
30
31PPB_ResourceArray_Shared::~PPB_ResourceArray_Shared() {
32  for (std::vector<PP_Resource>::iterator iter = resources_.begin();
33       iter != resources_.end(); ++iter) {
34    if (*iter)
35      PpapiGlobals::Get()->GetResourceTracker()->ReleaseResource(*iter);
36  }
37}
38
39PPB_ResourceArray_API* PPB_ResourceArray_Shared::AsPPB_ResourceArray_API() {
40  return this;
41}
42
43uint32_t PPB_ResourceArray_Shared::GetSize() {
44  return static_cast<uint32_t>(resources_.size());
45}
46
47PP_Resource PPB_ResourceArray_Shared::GetAt(uint32_t index) {
48  return index < resources_.size() ? resources_[index] : 0;
49}
50
51}  // namespace ppapi
52