| OLD | NEW |
| (Empty) | |
| 1 // Copyright 2016 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 "base/run_loop.h" |
| 6 #include "services/video_capture/fake_device_descriptor_test.h" |
| 7 #include "services/video_capture/mock_video_capture_device_client.h" |
| 8 |
| 9 using testing::_; |
| 10 using testing::InvokeWithoutArgs; |
| 11 |
| 12 namespace video_capture { |
| 13 |
| 14 class MockCreateDeviceProxyCallback { |
| 15 public: |
| 16 MOCK_METHOD1(Run, void(mojom::DeviceAccessResultCode result_code)); |
| 17 }; |
| 18 |
| 19 // Tests that when requesting a second proxy for a device without closing the |
| 20 // first one, the service revokes access to the first one by closing the |
| 21 // connection. |
| 22 TEST_F(FakeDeviceDescriptorTest, AccessIsRevokedOnSecondAccess) { |
| 23 mojom::VideoCaptureDeviceProxyPtr device_proxy_1; |
| 24 bool device_access_1_revoked = false; |
| 25 MockCreateDeviceProxyCallback create_device_proxy_callback_1; |
| 26 EXPECT_CALL(create_device_proxy_callback_1, |
| 27 Run(mojom::DeviceAccessResultCode::SUCCESS)) |
| 28 .Times(1); |
| 29 factory_->CreateDeviceProxy( |
| 30 fake_device_descriptor_->Clone(), mojo::GetProxy(&device_proxy_1), |
| 31 base::Bind(&MockCreateDeviceProxyCallback::Run, |
| 32 base::Unretained(&create_device_proxy_callback_1))); |
| 33 device_proxy_1.set_connection_error_handler( |
| 34 base::Bind([](bool* access_revoked) { *access_revoked = true; }, |
| 35 &device_access_1_revoked)); |
| 36 |
| 37 base::RunLoop wait_loop; |
| 38 mojom::VideoCaptureDeviceProxyPtr device_proxy_2; |
| 39 bool device_access_2_revoked = false; |
| 40 MockCreateDeviceProxyCallback create_device_proxy_callback_2; |
| 41 EXPECT_CALL(create_device_proxy_callback_2, |
| 42 Run(mojom::DeviceAccessResultCode::SUCCESS)) |
| 43 .Times(1) |
| 44 .WillOnce(InvokeWithoutArgs([&wait_loop]() { wait_loop.Quit(); })); |
| 45 factory_->CreateDeviceProxy( |
| 46 fake_device_descriptor_->Clone(), mojo::GetProxy(&device_proxy_2), |
| 47 base::Bind(&MockCreateDeviceProxyCallback::Run, |
| 48 base::Unretained(&create_device_proxy_callback_2))); |
| 49 device_proxy_2.set_connection_error_handler( |
| 50 base::Bind([](bool* access_revoked) { *access_revoked = true; }, |
| 51 &device_access_2_revoked)); |
| 52 wait_loop.Run(); |
| 53 ASSERT_TRUE(device_access_1_revoked); |
| 54 ASSERT_FALSE(device_access_2_revoked); |
| 55 } |
| 56 |
| 57 // Tests that a second proxy requested for a device can be used successfully. |
| 58 TEST_F(FakeDeviceDescriptorTest, CanUseSecondRequestedProxy) { |
| 59 mojom::VideoCaptureDeviceProxyPtr device_proxy_1; |
| 60 factory_->CreateDeviceProxy( |
| 61 fake_device_descriptor_->Clone(), mojo::GetProxy(&device_proxy_1), |
| 62 base::Bind([](mojom::DeviceAccessResultCode result_code) {})); |
| 63 |
| 64 base::RunLoop wait_loop; |
| 65 mojom::VideoCaptureDeviceProxyPtr device_proxy_2; |
| 66 factory_->CreateDeviceProxy( |
| 67 fake_device_descriptor_->Clone(), mojo::GetProxy(&device_proxy_2), |
| 68 base::Bind( |
| 69 [](base::RunLoop* wait_loop, |
| 70 mojom::DeviceAccessResultCode result_code) { wait_loop->Quit(); }, |
| 71 &wait_loop)); |
| 72 wait_loop.Run(); |
| 73 |
| 74 auto arbitrary_requested_format = mojom::VideoCaptureFormat::New(); |
| 75 arbitrary_requested_format->frame_size.SetSize(640, 480); |
| 76 arbitrary_requested_format->frame_rate = 15; |
| 77 arbitrary_requested_format->pixel_format = media::mojom::VideoFormat::I420; |
| 78 arbitrary_requested_format->pixel_storage = mojom::VideoPixelStorage::CPU; |
| 79 |
| 80 base::RunLoop wait_loop_2; |
| 81 mojom::VideoCaptureDeviceClientPtr client_proxy; |
| 82 MockVideoCaptureDeviceClient client(mojo::GetProxy(&client_proxy)); |
| 83 EXPECT_CALL(client, OnFrameAvailablePtr(_)) |
| 84 .WillRepeatedly( |
| 85 InvokeWithoutArgs([&wait_loop_2]() { wait_loop_2.Quit(); })); |
| 86 |
| 87 device_proxy_2->Start(std::move(arbitrary_requested_format), |
| 88 mojom::ResolutionChangePolicy::FIXED_RESOLUTION, |
| 89 mojom::PowerLineFrequency::DEFAULT, |
| 90 std::move(client_proxy)); |
| 91 wait_loop_2.Run(); |
| 92 } |
| 93 |
| 94 } // namespace video_capture |
| OLD | NEW |