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 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. 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