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.
5 #include "ppapi/shared_impl/ppb_device_ref_shared.h"
7 #include "base/memory/scoped_ptr.h"
8 #include "ppapi/shared_impl/host_resource.h"
9 #include "ppapi/shared_impl/ppapi_globals.h"
10 #include "ppapi/shared_impl/ppb_resource_array_shared.h"
11 #include "ppapi/shared_impl/resource_tracker.h"
12 #include "ppapi/shared_impl/var.h"
14 using ppapi::thunk::PPB_DeviceRef_API
;
18 DeviceRefData::DeviceRefData()
19 : type(PP_DEVICETYPE_DEV_INVALID
) {
22 PPB_DeviceRef_Shared::PPB_DeviceRef_Shared(ResourceObjectType type
,
24 const DeviceRefData
& data
)
25 : Resource(type
, instance
),
29 PPB_DeviceRef_API
* PPB_DeviceRef_Shared::AsPPB_DeviceRef_API() {
33 const DeviceRefData
& PPB_DeviceRef_Shared::GetDeviceRefData() const {
37 PP_DeviceType_Dev
PPB_DeviceRef_Shared::GetType() {
41 PP_Var
PPB_DeviceRef_Shared::GetName() {
42 return StringVar::StringToPPVar(data_
.name
);
46 PP_Resource
PPB_DeviceRef_Shared::CreateResourceArray(
47 ResourceObjectType type
,
49 const std::vector
<DeviceRefData
>& devices
) {
50 scoped_ptr
<PP_Resource
[]> elements
;
51 size_t size
= devices
.size();
53 elements
.reset(new PP_Resource
[size
]);
54 for (size_t index
= 0; index
< size
; ++index
) {
55 PPB_DeviceRef_Shared
* device_object
=
56 new PPB_DeviceRef_Shared(type
, instance
, devices
[index
]);
57 elements
[index
] = device_object
->GetReference();
60 PPB_ResourceArray_Shared
* array_object
=
61 new PPB_ResourceArray_Shared(type
, instance
, elements
.get(),
62 static_cast<uint32_t>(size
));
64 for (size_t index
= 0; index
< size
; ++index
)
65 PpapiGlobals::Get()->GetResourceTracker()->ReleaseResource(elements
[index
]);
67 return array_object
->GetReference();