1515#include " base/location.h"
1616#include " base/logging.h"
1717#include " base/memory/raw_ptr.h"
18+ #include " base/memory/scoped_refptr.h"
1819#include " base/metrics/histogram_functions.h"
1920#include " base/observer_list.h"
2021#include " base/ranges/algorithm.h"
@@ -62,12 +63,14 @@ namespace content {
6263class VideoCaptureManager ::CaptureDeviceStartRequest {
6364 public:
6465 CaptureDeviceStartRequest (
65- VideoCaptureController* controller,
66+ scoped_refptr< VideoCaptureController> controller,
6667 const media::VideoCaptureSessionId& session_id,
6768 const media::VideoCaptureParams& params,
6869 mojo::PendingRemote<video_effects::mojom::VideoEffectsProcessor>
6970 video_effects_processor);
70- VideoCaptureController* controller () const { return controller_; }
71+ scoped_refptr<VideoCaptureController> controller () const {
72+ return controller_;
73+ }
7174 const base::UnguessableToken& session_id () const { return session_id_; }
7275 media::VideoCaptureParams params () const { return params_; }
7376
@@ -77,20 +80,20 @@ class VideoCaptureManager::CaptureDeviceStartRequest {
7780 }
7881
7982 private:
80- const raw_ptr <VideoCaptureController> controller_;
83+ const scoped_refptr <VideoCaptureController> controller_;
8184 const base::UnguessableToken session_id_;
8285 const media::VideoCaptureParams params_;
8386 mojo::PendingRemote<video_effects::mojom::VideoEffectsProcessor>
8487 video_effects_processor_;
8588};
8689
8790VideoCaptureManager::CaptureDeviceStartRequest::CaptureDeviceStartRequest (
88- VideoCaptureController* controller,
91+ scoped_refptr< VideoCaptureController> controller,
8992 const media::VideoCaptureSessionId& session_id,
9093 const media::VideoCaptureParams& params,
9194 mojo::PendingRemote<video_effects::mojom::VideoEffectsProcessor>
9295 video_effects_processor)
93- : controller_(controller),
96+ : controller_(std::move( controller) ),
9497 session_id_ (session_id),
9598 params_(params),
9699 video_effects_processor_(std::move(video_effects_processor)) {}
@@ -265,14 +268,15 @@ void VideoCaptureManager::ApplySubCaptureTarget(
265268
266269void VideoCaptureManager::QueueStartDevice (
267270 const media::VideoCaptureSessionId& session_id,
268- VideoCaptureController* controller,
271+ scoped_refptr< VideoCaptureController> controller,
269272 const media::VideoCaptureParams& params,
270273 mojo::PendingRemote<video_effects::mojom::VideoEffectsProcessor>
271274 video_effects_processor) {
272275 DCHECK_CURRENTLY_ON (BrowserThread::IO);
273276 DCHECK (lock_time_.is_null ());
274- device_start_request_queue_.push_back (CaptureDeviceStartRequest (
275- controller, session_id, params, std::move (video_effects_processor)));
277+ device_start_request_queue_.push_back (
278+ CaptureDeviceStartRequest (std::move (controller), session_id, params,
279+ std::move (video_effects_processor)));
276280 if (device_start_request_queue_.size () == 1 )
277281 ProcessDeviceStartRequestQueue ();
278282}
@@ -318,7 +322,8 @@ void VideoCaptureManager::ProcessDeviceStartRequestQueue() {
318322 if (request == device_start_request_queue_.end ())
319323 return ;
320324
321- VideoCaptureController* const controller = request->controller ();
325+ scoped_refptr<VideoCaptureController> const controller =
326+ request->controller ();
322327
323328 EmitLogMessage (" VideoCaptureManager::ProcessDeviceStartRequestQueue" , 3 );
324329 // The unit test VideoCaptureManagerTest.OpenNotExisting requires us to fail
@@ -336,7 +341,7 @@ void VideoCaptureManager::ProcessDeviceStartRequestQueue() {
336341 GetDeviceInfoById (controller->device_id ());
337342 if (!device_info) {
338343 OnDeviceLaunchFailed (
339- controller,
344+ controller. get () ,
340345 media::VideoCaptureError::
341346 kVideoCaptureManagerProcessDeviceStartQueueDeviceInfoNotFound );
342347 return ;
@@ -357,7 +362,7 @@ void VideoCaptureManager::ProcessDeviceStartRequestQueue() {
357362 base::BindOnce ([](scoped_refptr<VideoCaptureManager>,
358363 scoped_refptr<VideoCaptureController>) {},
359364 scoped_refptr<VideoCaptureManager>(this ),
360- GetControllerSharedRef (controller)),
365+ std::move (controller)),
361366 request->TakeVideoEffectsProcessor ());
362367}
363368
@@ -459,7 +464,7 @@ void VideoCaptureManager::ConnectClient(
459464 EmitLogMessage (string_stream.str (), 1 );
460465 }
461466
462- VideoCaptureController* controller =
467+ scoped_refptr< VideoCaptureController> controller =
463468 GetOrCreateController (session_id, params);
464469 if (!controller) {
465470 std::move (done_cb).Run (nullptr );
@@ -949,7 +954,8 @@ media::VideoCaptureDeviceInfo* VideoCaptureManager::GetDeviceInfoById(
949954 return nullptr ;
950955}
951956
952- VideoCaptureController* VideoCaptureManager::GetOrCreateController (
957+ scoped_refptr<VideoCaptureController>
958+ VideoCaptureManager::GetOrCreateController (
953959 const media::VideoCaptureSessionId& capture_session_id,
954960 const media::VideoCaptureParams& params) {
955961 DCHECK_CURRENTLY_ON (BrowserThread::IO);
@@ -971,10 +977,12 @@ VideoCaptureController* VideoCaptureManager::GetOrCreateController(
971977 return existing_device;
972978 }
973979
974- VideoCaptureController* new_controller = new VideoCaptureController (
975- device_info.id , device_info.type , params,
976- video_capture_provider_->CreateDeviceLauncher (), emit_log_message_cb_);
977- controllers_.emplace_back (new_controller);
980+ scoped_refptr<VideoCaptureController> new_controller =
981+ base::MakeRefCounted<VideoCaptureController>(
982+ device_info.id , device_info.type , params,
983+ video_capture_provider_->CreateDeviceLauncher (),
984+ emit_log_message_cb_);
985+ controllers_.push_back (new_controller);
978986 return new_controller;
979987}
980988
0 commit comments