Home | History | Annotate | Download | only in proxy
      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