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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: services/video_capture/fake_device_descriptor_video_capture_service_unittest.cc
diff --git a/services/video_capture/fake_device_descriptor_video_capture_service_unittest.cc b/services/video_capture/fake_device_descriptor_video_capture_service_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..1c3e1b38367997c5ae2f82213db8f6685c640189
--- /dev/null
+++ b/services/video_capture/fake_device_descriptor_video_capture_service_unittest.cc
@@ -0,0 +1,98 @@
+// Copyright 2016 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 "base/run_loop.h"
+#include "services/video_capture/fake_device_descriptor_video_capture_service_test.h"
+#include "services/video_capture/mock_video_capture_device_client.h"
+
+using testing::_;
+using testing::InvokeWithoutArgs;
+
+namespace video_capture {
+
+// Tests that when requesting a second proxy for a device without closing the
+// first one, the service revokes access to the first one by closing the
+// connection.
+TEST_F(FakeDeviceDescriptorVideoCaptureServiceTest,
+ AccessIsRevokedOnSecondAccess) {
+ mojom::DeviceAccessResultCode result_code_1 =
+ mojom::DeviceAccessResultCode::NOT_INITIALIZED;
+ mojom::DeviceAccessResultCode result_code_2 =
+ mojom::DeviceAccessResultCode::NOT_INITIALIZED;
+
+ mojom::VideoCaptureDeviceProxyPtr device_proxy_1;
+ bool device_access_1_revoked = false;
+ factory_->CreateDeviceProxy(
+ fake_device_descriptor_->Clone(), mojo::GetProxy(&device_proxy_1),
+ base::Bind(
+ [](mojom::DeviceAccessResultCode* target,
+ mojom::DeviceAccessResultCode result_code) {
+ *target = result_code;
+ },
+ &result_code_1));
+ device_proxy_1.set_connection_error_handler(
+ base::Bind([](bool* access_revoked) { *access_revoked = true; },
+ &device_access_1_revoked));
+
+ base::RunLoop wait_loop;
+ 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
+ bool device_access_2_revoked = false;
+ factory_->CreateDeviceProxy(
+ fake_device_descriptor_->Clone(), mojo::GetProxy(&device_proxy_2),
+ base::Bind(
+ [](base::RunLoop* wait_loop, mojom::DeviceAccessResultCode* target,
+ mojom::DeviceAccessResultCode result_code) {
+ *target = result_code;
+ wait_loop->Quit();
+ },
+ &wait_loop, &result_code_2));
+ device_proxy_2.set_connection_error_handler(
+ base::Bind([](bool* access_revoked) { *access_revoked = true; },
+ &device_access_2_revoked));
+ wait_loop.Run();
+ ASSERT_EQ(mojom::DeviceAccessResultCode::SUCCESS, result_code_1);
+ ASSERT_EQ(mojom::DeviceAccessResultCode::SUCCESS, result_code_2);
+ ASSERT_TRUE(device_access_1_revoked);
+ ASSERT_FALSE(device_access_2_revoked);
+}
+
+// Tests that a second proxy requested for a device can be used successfully.
+TEST_F(FakeDeviceDescriptorVideoCaptureServiceTest,
+ CanUseSecondRequestedProxy) {
+ mojom::VideoCaptureDeviceProxyPtr device_proxy_1;
+ factory_->CreateDeviceProxy(
+ fake_device_descriptor_->Clone(), mojo::GetProxy(&device_proxy_1),
+ base::Bind([](mojom::DeviceAccessResultCode result_code) {}));
+
+ base::RunLoop wait_loop;
+ mojom::VideoCaptureDeviceProxyPtr device_proxy_2;
+ factory_->CreateDeviceProxy(
+ fake_device_descriptor_->Clone(), mojo::GetProxy(&device_proxy_2),
+ base::Bind(
+ [](base::RunLoop* wait_loop,
+ mojom::DeviceAccessResultCode result_code) { wait_loop->Quit(); },
+ &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
+ wait_loop.Run();
+
+ auto arbitrary_requested_format = mojom::VideoCaptureFormat::New();
+ arbitrary_requested_format->frame_size.SetSize(640, 480);
+ arbitrary_requested_format->frame_rate = 15;
+ arbitrary_requested_format->pixel_format = media::mojom::VideoFormat::I420;
+ arbitrary_requested_format->pixel_storage = mojom::VideoPixelStorage::CPU;
+
+ base::RunLoop wait_loop_2;
+ mojom::VideoCaptureDeviceClientPtr client_proxy;
+ MockVideoCaptureDeviceClient client(mojo::GetProxy(&client_proxy));
+ EXPECT_CALL(client, OnFrameAvailablePtr(_))
+ .WillRepeatedly(
+ InvokeWithoutArgs([&wait_loop_2]() { wait_loop_2.Quit(); }));
+
+ device_proxy_2->Start(std::move(arbitrary_requested_format),
+ mojom::ResolutionChangePolicy::FIXED_RESOLUTION,
+ mojom::PowerLineFrequency::DEFAULT,
+ std::move(client_proxy));
+ wait_loop_2.Run();
+}
+
+} // namespace video_capture

Powered by Google App Engine
This is Rietveld 408576698