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

Unified Diff: content/browser/renderer_host/media/in_process_video_capture_provider.cc

Issue 2885653002: [Mojo Video Capture] Do not instantiate in-process VideoCaptureSystem when using service (Closed)
Patch Set: Use SEQUENCE_CHECKER macros and Rebase to May 19th Created 3 years, 7 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: content/browser/renderer_host/media/in_process_video_capture_provider.cc
diff --git a/content/browser/renderer_host/media/in_process_video_capture_provider.cc b/content/browser/renderer_host/media/in_process_video_capture_provider.cc
index ff639713e83a4dd1ccf983036f58017eb7997a0c..b615b4268138c8067c431158a10d4e9ddd4f8ce1 100644
--- a/content/browser/renderer_host/media/in_process_video_capture_provider.cc
+++ b/content/browser/renderer_host/media/in_process_video_capture_provider.cc
@@ -1,4 +1,4 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
+// Copyright 2017 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.
@@ -12,17 +12,46 @@ InProcessVideoCaptureProvider::InProcessVideoCaptureProvider(
std::unique_ptr<media::VideoCaptureSystem> video_capture_system,
scoped_refptr<base::SingleThreadTaskRunner> device_task_runner)
: video_capture_system_(std::move(video_capture_system)),
- device_task_runner_(std::move(device_task_runner)) {}
+ device_task_runner_(std::move(device_task_runner)) {
+ DETACH_FROM_SEQUENCE(sequence_checker_);
+}
+
+InProcessVideoCaptureProvider::~InProcessVideoCaptureProvider() {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+}
+
+// static
+std::unique_ptr<VideoCaptureProvider>
+InProcessVideoCaptureProvider::CreateInstanceForNonDeviceCapture(
+ scoped_refptr<base::SingleThreadTaskRunner> device_task_runner) {
+ return base::MakeUnique<InProcessVideoCaptureProvider>(
+ nullptr, std::move(device_task_runner));
+}
-InProcessVideoCaptureProvider::~InProcessVideoCaptureProvider() = default;
+// static
+std::unique_ptr<VideoCaptureProvider>
+InProcessVideoCaptureProvider::CreateInstance(
+ std::unique_ptr<media::VideoCaptureSystem> video_capture_system,
+ scoped_refptr<base::SingleThreadTaskRunner> device_task_runner) {
+ return base::MakeUnique<InProcessVideoCaptureProvider>(
+ std::move(video_capture_system), std::move(device_task_runner));
+}
-void InProcessVideoCaptureProvider::Uninitialize() {}
+void InProcessVideoCaptureProvider::Uninitialize() {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+}
void InProcessVideoCaptureProvider::GetDeviceInfosAsync(
- const base::Callback<void(
- const std::vector<media::VideoCaptureDeviceInfo>&)>& result_callback) {
- // Using Unretained() is safe because |this| owns |video_capture_system_| and
- // |result_callback| has ownership of |this|.
+ const GetDeviceInfosCallback& result_callback) {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
+ if (!video_capture_system_) {
+ std::vector<media::VideoCaptureDeviceInfo> empty_result;
+ result_callback.Run(empty_result);
+ return;
+ }
+ // Using Unretained() is safe because |this| owns
+ // |video_capture_system_| and |result_callback| has ownership of
+ // |this|.
device_task_runner_->PostTask(
FROM_HERE, base::Bind(&media::VideoCaptureSystem::GetDeviceInfosAsync,
base::Unretained(video_capture_system_.get()),
@@ -31,6 +60,7 @@ void InProcessVideoCaptureProvider::GetDeviceInfosAsync(
std::unique_ptr<VideoCaptureDeviceLauncher>
InProcessVideoCaptureProvider::CreateDeviceLauncher() {
+ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
return base::MakeUnique<InProcessVideoCaptureDeviceLauncher>(
device_task_runner_, video_capture_system_.get());
}

Powered by Google App Engine
This is Rietveld 408576698