Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(508)

Side by Side Diff: services/video_capture/fake_device_descriptor_video_capture_service_unittest.cc

Issue 2244773002: Video Capture Mojo (1.4c): Handle Subsequent Access (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@FillServicePart2
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698