flash_resource.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
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/proxy/flash_resource.h"
6
7#include "ipc/ipc_message.h"
8#include "ppapi/c/pp_errors.h"
9#include "ppapi/proxy/dispatch_reply_message.h"
10#include "ppapi/proxy/ppapi_messages.h"
11#include "ppapi/shared_impl/array_writer.h"
12#include "ppapi/thunk/enter.h"
13
14namespace ppapi {
15namespace proxy {
16
17FlashResource::FlashResource(Connection connection, PP_Instance instance)
18    : PluginResource(connection, instance) {
19  SendCreate(RENDERER, PpapiHostMsg_Flash_Create());
20}
21
22FlashResource::~FlashResource() {
23}
24
25thunk::PPB_Flash_Functions_API* FlashResource::AsPPB_Flash_Functions_API() {
26  return this;
27}
28
29int32_t FlashResource::EnumerateVideoCaptureDevices(
30    PP_Instance instance,
31    PP_Resource video_capture,
32    const PP_ArrayOutput& devices) {
33  ArrayWriter output;
34  output.set_pp_array_output(devices);
35  if (!output.is_valid())
36    return PP_ERROR_BADARGUMENT;
37
38  thunk::EnterResourceNoLock<thunk::PPB_VideoCapture_API> enter(video_capture,
39                                                                true);
40  if (enter.failed())
41    return PP_ERROR_NOINTERFACE;
42
43  std::vector<ppapi::DeviceRefData> device_ref_data;
44  int32_t result =
45      SyncCall<PpapiPluginMsg_Flash_EnumerateVideoCaptureDevicesReply>(
46          RENDERER,
47          PpapiHostMsg_Flash_EnumerateVideoCaptureDevices(
48              enter.resource()->host_resource()),
49          &device_ref_data);
50  if (result != PP_OK)
51    return result;
52
53  std::vector<scoped_refptr<Resource> > device_resources;
54  for (size_t i = 0; i < device_ref_data.size(); ++i) {
55    scoped_refptr<Resource> resource(new PPB_DeviceRef_Shared(
56        OBJECT_IS_PROXY, instance, device_ref_data[i]));
57    device_resources.push_back(resource);
58  }
59
60  if (!output.StoreResourceVector(device_resources))
61    return PP_ERROR_FAILED;
62
63  return PP_OK;
64}
65
66}  // namespace proxy
67}  // namespace ppapi
68