#include "content/browser/renderer_host/media/service_video_capture_provider.h"
#include <utility>
#include "base/functional/bind.h"
#include "base/functional/callback_helpers.h"
#include "base/metrics/histogram_functions.h"
#include "base/trace_event/common/trace_event_common.h"
#include "build/build_config.h"
#include "build/chromeos_buildflags.h"
#include "content/browser/child_process_host_impl.h"
#include "content/browser/renderer_host/media/service_video_capture_device_launcher.h"
#include "content/browser/renderer_host/media/virtual_video_capture_devices_changed_observer.h"
#include "content/browser/video_capture_service_impl.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/gpu_data_manager.h"
#include "content/public/browser/video_capture_service.h"
#include "content/public/common/content_features.h"
#include "gpu/config/gpu_info.h"
#include "mojo/public/cpp/bindings/callback_helpers.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "mojo/public/cpp/bindings/self_owned_receiver.h"
#include "services/video_capture/public/mojom/video_capture_service.mojom.h"
#if BUILDFLAG(IS_CHROMEOS_ASH)
#include "content/public/browser/chromeos/delegate_to_browser_gpu_service_accelerator_factory.h"
#endif
namespace {
GetSourceInfosResult;
#if BUILDFLAG(IS_CHROMEOS_ASH)
std::unique_ptr<video_capture::mojom::AcceleratorFactory>
CreateAcceleratorFactory() {
return std::make_unique<
content::DelegateToBrowserGpuServiceAcceleratorFactory>();
}
#endif
enum class GetDeviceInfosResult { … };
void LogGetDeviceInfosResult(
std::optional<GetSourceInfosResult> get_source_infos_result,
bool get_device_infos_retried) { … }
}
namespace content {
class ServiceVideoCaptureProvider::ServiceProcessObserver
: public ServiceProcessHost::Observer { … };
#if BUILDFLAG(IS_CHROMEOS_ASH)
ServiceVideoCaptureProvider::ServiceVideoCaptureProvider(
base::RepeatingCallback<void(const std::string&)> emit_log_message_cb)
: ServiceVideoCaptureProvider(base::NullCallback(),
std::move(emit_log_message_cb)) {}
ServiceVideoCaptureProvider::ServiceVideoCaptureProvider(
CreateAcceleratorFactoryCallback create_accelerator_factory_cb,
base::RepeatingCallback<void(const std::string&)> emit_log_message_cb)
: create_accelerator_factory_cb_(std::move(create_accelerator_factory_cb)),
emit_log_message_cb_(std::move(emit_log_message_cb)),
launcher_has_connected_to_source_provider_(false) {
#else
ServiceVideoCaptureProvider::ServiceVideoCaptureProvider(
base::RepeatingCallback<void(const std::string&)> emit_log_message_cb)
: … { … }
ServiceVideoCaptureProvider::~ServiceVideoCaptureProvider() { … }
void ServiceVideoCaptureProvider::GetDeviceInfosAsync(
GetDeviceInfosCallback result_callback) { … }
std::unique_ptr<VideoCaptureDeviceLauncher>
ServiceVideoCaptureProvider::CreateDeviceLauncher() { … }
void ServiceVideoCaptureProvider::OpenNativeScreenCapturePicker(
DesktopMediaID::Type type,
base::OnceCallback<void(webrtc::DesktopCapturer::Source)> picker_callback,
base::OnceCallback<void()> cancel_callback,
base::OnceCallback<void()> error_callback) { … }
void ServiceVideoCaptureProvider::CloseNativeScreenCapturePicker(
DesktopMediaID device_id) { … }
void ServiceVideoCaptureProvider::OnServiceStarted() { … }
void ServiceVideoCaptureProvider::OnServiceStopped() { … }
void ServiceVideoCaptureProvider::OnLauncherConnectingToSourceProvider(
scoped_refptr<RefCountedVideoSourceProvider>* out_provider) { … }
void ServiceVideoCaptureProvider::RegisterWithGpuDataManager() { … }
scoped_refptr<RefCountedVideoSourceProvider>
ServiceVideoCaptureProvider::LazyConnectToService() { … }
void ServiceVideoCaptureProvider::GetDeviceInfosAsyncForRetry() { … }
void ServiceVideoCaptureProvider::OnDeviceInfosReceived(
scoped_refptr<RefCountedVideoSourceProvider> service_connection,
GetSourceInfosResult result,
const std::vector<media::VideoCaptureDeviceInfo>& infos) { … }
void ServiceVideoCaptureProvider::OnDeviceInfosRequestDropped(
scoped_refptr<RefCountedVideoSourceProvider> service_connection) { … }
void ServiceVideoCaptureProvider::OnLostConnectionToSourceProvider() { … }
void ServiceVideoCaptureProvider::OnServiceConnectionClosed(
ReasonForDisconnect reason) { … }
void ServiceVideoCaptureProvider::OnGpuInfoUpdate() { … }
}