OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/run_loop.h" | 5 #include "base/run_loop.h" |
6 #include "services/video_capture/fake_device_descriptor_test.h" | 6 #include "services/video_capture/fake_device_descriptor_test.h" |
7 #include "services/video_capture/mock_video_frame_receiver.h" | 7 #include "services/video_capture/mock_video_frame_receiver.h" |
8 | 8 |
9 using testing::_; | 9 using testing::_; |
10 using testing::InvokeWithoutArgs; | 10 using testing::InvokeWithoutArgs; |
11 | 11 |
12 namespace video_capture { | 12 namespace video_capture { |
13 | 13 |
14 class MockCreateDeviceProxyCallback { | 14 class MockCreateDeviceProxyCallback { |
15 public: | 15 public: |
16 MOCK_METHOD1(Run, void(mojom::DeviceAccessResultCode result_code)); | 16 MOCK_METHOD1(Run, void(mojom::DeviceAccessResultCode result_code)); |
17 }; | 17 }; |
18 | 18 |
19 // Tests that when requesting a second proxy for a device without closing the | 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 | 20 // first one, the service revokes access to the first one by closing the |
21 // connection. | 21 // connection. |
22 TEST_F(FakeDeviceDescriptorTest, AccessIsRevokedOnSecondAccess) { | 22 TEST_F(FakeDeviceDescriptorTest, AccessIsRevokedOnSecondAccess) { |
23 mojom::VideoCaptureDeviceProxyPtr device_proxy_1; | 23 mojom::VideoCaptureDeviceProxyPtr device_proxy_1; |
24 bool device_access_1_revoked = false; | 24 bool device_access_1_revoked = false; |
25 MockCreateDeviceProxyCallback create_device_proxy_callback_1; | 25 MockCreateDeviceProxyCallback create_device_proxy_callback_1; |
26 EXPECT_CALL(create_device_proxy_callback_1, | 26 EXPECT_CALL(create_device_proxy_callback_1, |
27 Run(mojom::DeviceAccessResultCode::SUCCESS)) | 27 Run(mojom::DeviceAccessResultCode::SUCCESS)) |
28 .Times(1); | 28 .Times(1); |
29 factory_->CreateDeviceProxy( | 29 factory_->CreateDeviceProxy( |
30 fake_device_descriptor_->Clone(), mojo::GetProxy(&device_proxy_1), | 30 fake_device_descriptor_, mojo::GetProxy(&device_proxy_1), |
31 base::Bind(&MockCreateDeviceProxyCallback::Run, | 31 base::Bind(&MockCreateDeviceProxyCallback::Run, |
32 base::Unretained(&create_device_proxy_callback_1))); | 32 base::Unretained(&create_device_proxy_callback_1))); |
33 device_proxy_1.set_connection_error_handler( | 33 device_proxy_1.set_connection_error_handler( |
34 base::Bind([](bool* access_revoked) { *access_revoked = true; }, | 34 base::Bind([](bool* access_revoked) { *access_revoked = true; }, |
35 &device_access_1_revoked)); | 35 &device_access_1_revoked)); |
36 | 36 |
37 base::RunLoop wait_loop; | 37 base::RunLoop wait_loop; |
38 mojom::VideoCaptureDeviceProxyPtr device_proxy_2; | 38 mojom::VideoCaptureDeviceProxyPtr device_proxy_2; |
39 bool device_access_2_revoked = false; | 39 bool device_access_2_revoked = false; |
40 MockCreateDeviceProxyCallback create_device_proxy_callback_2; | 40 MockCreateDeviceProxyCallback create_device_proxy_callback_2; |
41 EXPECT_CALL(create_device_proxy_callback_2, | 41 EXPECT_CALL(create_device_proxy_callback_2, |
42 Run(mojom::DeviceAccessResultCode::SUCCESS)) | 42 Run(mojom::DeviceAccessResultCode::SUCCESS)) |
43 .Times(1) | 43 .Times(1) |
44 .WillOnce(InvokeWithoutArgs([&wait_loop]() { wait_loop.Quit(); })); | 44 .WillOnce(InvokeWithoutArgs([&wait_loop]() { wait_loop.Quit(); })); |
45 factory_->CreateDeviceProxy( | 45 factory_->CreateDeviceProxy( |
46 fake_device_descriptor_->Clone(), mojo::GetProxy(&device_proxy_2), | 46 fake_device_descriptor_, mojo::GetProxy(&device_proxy_2), |
47 base::Bind(&MockCreateDeviceProxyCallback::Run, | 47 base::Bind(&MockCreateDeviceProxyCallback::Run, |
48 base::Unretained(&create_device_proxy_callback_2))); | 48 base::Unretained(&create_device_proxy_callback_2))); |
49 device_proxy_2.set_connection_error_handler( | 49 device_proxy_2.set_connection_error_handler( |
50 base::Bind([](bool* access_revoked) { *access_revoked = true; }, | 50 base::Bind([](bool* access_revoked) { *access_revoked = true; }, |
51 &device_access_2_revoked)); | 51 &device_access_2_revoked)); |
52 wait_loop.Run(); | 52 wait_loop.Run(); |
53 ASSERT_TRUE(device_access_1_revoked); | 53 ASSERT_TRUE(device_access_1_revoked); |
54 ASSERT_FALSE(device_access_2_revoked); | 54 ASSERT_FALSE(device_access_2_revoked); |
55 } | 55 } |
56 | 56 |
57 // Tests that a second proxy requested for a device can be used successfully. | 57 // Tests that a second proxy requested for a device can be used successfully. |
58 TEST_F(FakeDeviceDescriptorTest, CanUseSecondRequestedProxy) { | 58 TEST_F(FakeDeviceDescriptorTest, CanUseSecondRequestedProxy) { |
59 mojom::VideoCaptureDeviceProxyPtr device_proxy_1; | 59 mojom::VideoCaptureDeviceProxyPtr device_proxy_1; |
60 factory_->CreateDeviceProxy( | 60 factory_->CreateDeviceProxy( |
61 fake_device_descriptor_->Clone(), mojo::GetProxy(&device_proxy_1), | 61 fake_device_descriptor_, mojo::GetProxy(&device_proxy_1), |
62 base::Bind([](mojom::DeviceAccessResultCode result_code) {})); | 62 base::Bind([](mojom::DeviceAccessResultCode result_code) {})); |
63 | 63 |
64 base::RunLoop wait_loop; | 64 base::RunLoop wait_loop; |
65 mojom::VideoCaptureDeviceProxyPtr device_proxy_2; | 65 mojom::VideoCaptureDeviceProxyPtr device_proxy_2; |
66 factory_->CreateDeviceProxy( | 66 factory_->CreateDeviceProxy( |
67 fake_device_descriptor_->Clone(), mojo::GetProxy(&device_proxy_2), | 67 fake_device_descriptor_, mojo::GetProxy(&device_proxy_2), |
68 base::Bind( | 68 base::Bind( |
69 [](base::RunLoop* wait_loop, | 69 [](base::RunLoop* wait_loop, |
70 mojom::DeviceAccessResultCode result_code) { wait_loop->Quit(); }, | 70 mojom::DeviceAccessResultCode result_code) { wait_loop->Quit(); }, |
71 &wait_loop)); | 71 &wait_loop)); |
72 wait_loop.Run(); | 72 wait_loop.Run(); |
73 | 73 |
74 auto arbitrary_requested_settings = mojom::VideoCaptureSettings::New(); | 74 media::VideoCaptureParams arbitrary_requested_settings; |
75 arbitrary_requested_settings->format = mojom::VideoCaptureFormat::New(); | 75 arbitrary_requested_settings.requested_format.frame_size.SetSize(640, 480); |
76 arbitrary_requested_settings->format->frame_size.SetSize(640, 480); | 76 arbitrary_requested_settings.requested_format.frame_rate = 15; |
77 arbitrary_requested_settings->format->frame_rate = 15; | 77 arbitrary_requested_settings.resolution_change_policy = |
78 arbitrary_requested_settings->resolution_change_policy = | 78 media::RESOLUTION_POLICY_FIXED_RESOLUTION; |
79 mojom::ResolutionChangePolicy::FIXED_RESOLUTION; | 79 arbitrary_requested_settings.power_line_frequency = |
80 arbitrary_requested_settings->power_line_frequency = | 80 media::PowerLineFrequency::FREQUENCY_DEFAULT; |
81 mojom::PowerLineFrequency::DEFAULT; | |
82 | 81 |
83 base::RunLoop wait_loop_2; | 82 base::RunLoop wait_loop_2; |
84 mojom::VideoFrameReceiverPtr receiver_proxy; | 83 mojom::VideoFrameReceiverPtr receiver_proxy; |
85 MockVideoFrameReceiver receiver(mojo::GetProxy(&receiver_proxy)); | 84 MockVideoFrameReceiver receiver(mojo::GetProxy(&receiver_proxy)); |
86 EXPECT_CALL(receiver, OnIncomingCapturedVideoFramePtr(_)) | 85 EXPECT_CALL(receiver, OnIncomingCapturedVideoFramePtr(_)) |
87 .WillRepeatedly( | 86 .WillRepeatedly( |
88 InvokeWithoutArgs([&wait_loop_2]() { wait_loop_2.Quit(); })); | 87 InvokeWithoutArgs([&wait_loop_2]() { wait_loop_2.Quit(); })); |
89 | 88 |
90 device_proxy_2->Start(std::move(arbitrary_requested_settings), | 89 device_proxy_2->Start(std::move(arbitrary_requested_settings), |
91 std::move(receiver_proxy)); | 90 std::move(receiver_proxy)); |
92 wait_loop_2.Run(); | 91 wait_loop_2.Run(); |
93 } | 92 } |
94 | 93 |
95 } // namespace video_capture | 94 } // namespace video_capture |
OLD | NEW |