• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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/c/dev/ppb_video_capture_dev.h"
6 #include "ppapi/c/pp_errors.h"
7 #include "ppapi/c/private/ppb_flash.h"
8 #include "ppapi/proxy/locking_resource_releaser.h"
9 #include "ppapi/proxy/ppapi_messages.h"
10 #include "ppapi/proxy/ppapi_proxy_test.h"
11 #include "ppapi/thunk/thunk.h"
12 
13 namespace ppapi {
14 namespace proxy {
15 
16 namespace {
17 
18 typedef PluginProxyTest FlashResourceTest;
19 
Unused(void * user_data,uint32_t element_count,uint32_t element_size)20 void* Unused(void* user_data, uint32_t element_count, uint32_t element_size) {
21   return NULL;
22 }
23 
24 }  // namespace
25 
26 // Does a test of EnumerateVideoCaptureDevices() and reply functionality in
27 // the plugin side using the public C interfaces.
TEST_F(FlashResourceTest,EnumerateVideoCaptureDevices)28 TEST_F(FlashResourceTest, EnumerateVideoCaptureDevices) {
29   // TODO(raymes): This doesn't actually check that the data is converted from
30   // |ppapi::DeviceRefData| to |PPB_DeviceRef| correctly, just that the right
31   // messages are sent.
32 
33   // Set up a sync call handler that should return this message.
34   std::vector<ppapi::DeviceRefData> reply_device_ref_data;
35   int32_t expected_result = PP_OK;
36   PpapiPluginMsg_DeviceEnumeration_EnumerateDevicesReply reply_msg(
37       reply_device_ref_data);
38   ResourceSyncCallHandler enumerate_video_devices_handler(
39       &sink(),
40       PpapiHostMsg_DeviceEnumeration_EnumerateDevices::ID,
41       expected_result,
42       reply_msg);
43   sink().AddFilter(&enumerate_video_devices_handler);
44 
45   // Set up the arguments to the call.
46   LockingResourceReleaser video_capture(
47       ::ppapi::thunk::GetPPB_VideoCapture_Dev_0_3_Thunk()->Create(
48           pp_instance()));
49   std::vector<PP_Resource> unused;
50   PP_ArrayOutput output;
51   output.GetDataBuffer = &Unused;
52   output.user_data = &unused;
53 
54   // Make the call.
55   const PPB_Flash_12_6* flash_iface = ::ppapi::thunk::GetPPB_Flash_12_6_Thunk();
56   int32_t actual_result = flash_iface->EnumerateVideoCaptureDevices(
57       pp_instance(), video_capture.get(), output);
58 
59   // Check the result is as expected.
60   EXPECT_EQ(expected_result, actual_result);
61 
62   // Should have sent an "DeviceEnumeration_EnumerateDevices" message.
63   ASSERT_TRUE(enumerate_video_devices_handler.last_handled_msg().type() ==
64       PpapiHostMsg_DeviceEnumeration_EnumerateDevices::ID);
65 
66   // Remove the filter or it will be destroyed before the sink() is destroyed.
67   sink().RemoveFilter(&enumerate_video_devices_handler);
68 }
69 
70 }  // namespace proxy
71 }  // namespace ppapi
72