| Index: ppapi/proxy/flash_resource_unittest.cc
|
| diff --git a/ppapi/proxy/flash_resource_unittest.cc b/ppapi/proxy/flash_resource_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..901e8550b92e7b9afd174a29b18760cbc6576f6c
|
| --- /dev/null
|
| +++ b/ppapi/proxy/flash_resource_unittest.cc
|
| @@ -0,0 +1,103 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "ppapi/c/dev/ppb_video_capture_dev.h"
|
| +#include "ppapi/c/pp_errors.h"
|
| +#include "ppapi/c/private/ppb_flash.h"
|
| +#include "ppapi/proxy/ppapi_messages.h"
|
| +#include "ppapi/proxy/ppapi_proxy_test.h"
|
| +#include "ppapi/shared_impl/scoped_pp_resource.h"
|
| +#include "ppapi/thunk/thunk.h"
|
| +
|
| +namespace ppapi {
|
| +namespace proxy {
|
| +
|
| +namespace {
|
| +
|
| +typedef PluginProxyTest FlashResourceTest;
|
| +
|
| +// This simulates the creation reply message of a VideoCapture resource. This
|
| +// won't be necessary once VideoCapture is converted to the new-style proxy.
|
| +class VideoCaptureCreationHandler : public IPC::Listener {
|
| + public:
|
| + VideoCaptureCreationHandler(ResourceMessageTestSink* test_sink,
|
| + PP_Instance instance)
|
| + : test_sink_(test_sink),
|
| + instance_(instance) {
|
| + }
|
| + virtual ~VideoCaptureCreationHandler() {}
|
| +
|
| + virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE {
|
| + if (msg.type() != ::PpapiHostMsg_PPBVideoCapture_Create::ID)
|
| + return false;
|
| +
|
| + IPC::Message* reply_msg = IPC::SyncMessage::GenerateReply(&msg);
|
| + HostResource resource;
|
| + resource.SetHostResource(instance_, 12345);
|
| + PpapiHostMsg_PPBVideoCapture_Create::WriteReplyParams(reply_msg, resource);
|
| + test_sink_->SetSyncReplyMessage(reply_msg);
|
| + return true;
|
| + }
|
| + private:
|
| + ResourceMessageTestSink* test_sink_;
|
| + PP_Instance instance_;
|
| +};
|
| +
|
| +void* Unused(void* user_data, uint32_t element_count, uint32_t element_size) {
|
| + return NULL;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +// Does a test of EnumerateVideoCaptureDevices() and reply functionality in
|
| +// the plugin side using the public C interfaces.
|
| +TEST_F(FlashResourceTest, EnumerateVideoCaptureDevices) {
|
| + // TODO(raymes): This doesn't actually check that the data is converted from
|
| + // |ppapi::DeviceRefData| to |PPB_DeviceRef| correctly, just that the right
|
| + // messages are sent.
|
| +
|
| + // Set up a sync call handler that should return this message.
|
| + std::vector<ppapi::DeviceRefData> reply_device_ref_data;
|
| + int32_t expected_result = PP_OK;
|
| + PpapiPluginMsg_Flash_EnumerateVideoCaptureDevicesReply reply_msg(
|
| + reply_device_ref_data);
|
| + ResourceSyncCallHandler enumerate_video_devices_handler(
|
| + &sink(),
|
| + PpapiHostMsg_Flash_EnumerateVideoCaptureDevices::ID,
|
| + expected_result,
|
| + reply_msg);
|
| + sink().AddFilter(&enumerate_video_devices_handler);
|
| +
|
| + // Setup the handler to simulate creation of the video resource.
|
| + VideoCaptureCreationHandler video_creation_handler(&sink(), pp_instance());
|
| + sink().AddFilter(&video_creation_handler);
|
| +
|
| + // Set up the arguments to the call.
|
| + ScopedPPResource video_capture(ScopedPPResource::PassRef(),
|
| + ::ppapi::thunk::GetPPB_VideoCapture_Dev_0_2_Thunk()->Create(
|
| + pp_instance()));
|
| + std::vector<PP_Resource> unused;
|
| + PP_ArrayOutput output;
|
| + output.GetDataBuffer = &Unused;
|
| + output.user_data = &unused;
|
| +
|
| + // Make the call.
|
| + const PPB_Flash_12_6* flash_iface = ::ppapi::thunk::GetPPB_Flash_12_6_Thunk();
|
| + int32_t actual_result = flash_iface->EnumerateVideoCaptureDevices(
|
| + pp_instance(), video_capture.get(), output);
|
| +
|
| + // Check the result is as expected.
|
| + EXPECT_EQ(expected_result, actual_result);
|
| +
|
| + // Should have sent an "EnumerateVideoCaptureDevices" message.
|
| + ASSERT_TRUE(enumerate_video_devices_handler.last_handled_msg().type() ==
|
| + PpapiHostMsg_Flash_EnumerateVideoCaptureDevices::ID);
|
| +
|
| + // Remove the filter or it will be destroyed before the sink() is destroyed.
|
| + sink().RemoveFilter(&enumerate_video_devices_handler);
|
| + sink().RemoveFilter(&video_creation_handler);
|
| +}
|
| +
|
| +} // namespace proxy
|
| +} // namespace ppapi
|
|
|