Chromium Code Reviews| 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_video_capture_service_te st.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 // Tests that when requesting a second proxy for a device without closing the | |
| 15 // first one, the service revokes access to the first one by closing the | |
| 16 // connection. | |
| 17 TEST_F(FakeDeviceDescriptorVideoCaptureServiceTest, | |
| 18 AccessIsRevokedOnSecondAccess) { | |
| 19 mojom::DeviceAccessResultCode result_code_1 = | |
| 20 mojom::DeviceAccessResultCode::NOT_INITIALIZED; | |
| 21 mojom::DeviceAccessResultCode result_code_2 = | |
| 22 mojom::DeviceAccessResultCode::NOT_INITIALIZED; | |
| 23 | |
| 24 mojom::VideoCaptureDeviceProxyPtr device_proxy_1; | |
| 25 bool device_access_1_revoked = false; | |
| 26 factory_->CreateDeviceProxy( | |
| 27 fake_device_descriptor_->Clone(), mojo::GetProxy(&device_proxy_1), | |
| 28 base::Bind( | |
| 29 [](mojom::DeviceAccessResultCode* target, | |
| 30 mojom::DeviceAccessResultCode result_code) { | |
| 31 *target = result_code; | |
| 32 }, | |
| 33 &result_code_1)); | |
| 34 device_proxy_1.set_connection_error_handler( | |
| 35 base::Bind([](bool* access_revoked) { *access_revoked = true; }, | |
| 36 &device_access_1_revoked)); | |
| 37 | |
| 38 base::RunLoop wait_loop; | |
| 39 mojom::VideoCaptureDeviceProxyPtr device_proxy_2; | |
|
mcasas
2016/09/02 16:15:14
Insert in between l.38-39
ASSERT_FALSE(device_acce
chfremer
2016/09/02 17:44:31
Good observation. I am considering adding a new te
| |
| 40 bool device_access_2_revoked = false; | |
| 41 factory_->CreateDeviceProxy( | |
| 42 fake_device_descriptor_->Clone(), mojo::GetProxy(&device_proxy_2), | |
| 43 base::Bind( | |
| 44 [](base::RunLoop* wait_loop, mojom::DeviceAccessResultCode* target, | |
| 45 mojom::DeviceAccessResultCode result_code) { | |
| 46 *target = result_code; | |
| 47 wait_loop->Quit(); | |
| 48 }, | |
| 49 &wait_loop, &result_code_2)); | |
| 50 device_proxy_2.set_connection_error_handler( | |
| 51 base::Bind([](bool* access_revoked) { *access_revoked = true; }, | |
| 52 &device_access_2_revoked)); | |
| 53 wait_loop.Run(); | |
| 54 ASSERT_EQ(mojom::DeviceAccessResultCode::SUCCESS, result_code_1); | |
| 55 ASSERT_EQ(mojom::DeviceAccessResultCode::SUCCESS, result_code_2); | |
| 56 ASSERT_TRUE(device_access_1_revoked); | |
| 57 ASSERT_FALSE(device_access_2_revoked); | |
| 58 } | |
| 59 | |
| 60 // Tests that a second proxy requested for a device can be used successfully. | |
| 61 TEST_F(FakeDeviceDescriptorVideoCaptureServiceTest, | |
| 62 CanUseSecondRequestedProxy) { | |
| 63 mojom::VideoCaptureDeviceProxyPtr device_proxy_1; | |
| 64 factory_->CreateDeviceProxy( | |
| 65 fake_device_descriptor_->Clone(), mojo::GetProxy(&device_proxy_1), | |
| 66 base::Bind([](mojom::DeviceAccessResultCode result_code) {})); | |
| 67 | |
| 68 base::RunLoop wait_loop; | |
| 69 mojom::VideoCaptureDeviceProxyPtr device_proxy_2; | |
| 70 factory_->CreateDeviceProxy( | |
| 71 fake_device_descriptor_->Clone(), mojo::GetProxy(&device_proxy_2), | |
| 72 base::Bind( | |
| 73 [](base::RunLoop* wait_loop, | |
| 74 mojom::DeviceAccessResultCode result_code) { wait_loop->Quit(); }, | |
| 75 &wait_loop)); | |
|
mcasas
2016/09/02 16:15:15
I like the local lambda methods, but MOCKs would
a
chfremer
2016/09/02 17:44:32
Good point. I didn't think of it, because I tradit
| |
| 76 wait_loop.Run(); | |
| 77 | |
| 78 auto arbitrary_requested_format = mojom::VideoCaptureFormat::New(); | |
| 79 arbitrary_requested_format->frame_size.SetSize(640, 480); | |
| 80 arbitrary_requested_format->frame_rate = 15; | |
| 81 arbitrary_requested_format->pixel_format = media::mojom::VideoFormat::I420; | |
| 82 arbitrary_requested_format->pixel_storage = mojom::VideoPixelStorage::CPU; | |
| 83 | |
| 84 base::RunLoop wait_loop_2; | |
| 85 mojom::VideoCaptureDeviceClientPtr client_proxy; | |
| 86 MockVideoCaptureDeviceClient client(mojo::GetProxy(&client_proxy)); | |
| 87 EXPECT_CALL(client, OnFrameAvailablePtr(_)) | |
| 88 .WillRepeatedly( | |
| 89 InvokeWithoutArgs([&wait_loop_2]() { wait_loop_2.Quit(); })); | |
| 90 | |
| 91 device_proxy_2->Start(std::move(arbitrary_requested_format), | |
| 92 mojom::ResolutionChangePolicy::FIXED_RESOLUTION, | |
| 93 mojom::PowerLineFrequency::DEFAULT, | |
| 94 std::move(client_proxy)); | |
| 95 wait_loop_2.Run(); | |
| 96 } | |
| 97 | |
| 98 } // namespace video_capture | |
| OLD | NEW |