| // Copyright 2021 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SERVICES_VIDEO_CAPTURE_ASH_VIDEO_CAPTURE_DEVICE_FACTORY_ASH_H_ |
| #define SERVICES_VIDEO_CAPTURE_ASH_VIDEO_CAPTURE_DEVICE_FACTORY_ASH_H_ |
| |
| #include <string> |
| |
| #include "base/containers/flat_map.h" |
| #include "base/memory/raw_ptr.h" |
| #include "chromeos/crosapi/mojom/video_capture.mojom.h" |
| #include "mojo/public/cpp/bindings/pending_receiver.h" |
| #include "mojo/public/cpp/bindings/receiver_set.h" |
| #include "mojo/public/cpp/bindings/remote.h" |
| |
| namespace video_capture { |
| class DeviceFactory; |
| } // namespace video_capture |
| |
| namespace crosapi { |
| |
| class VideoCaptureDeviceAsh; |
| |
| // This class is the ash-chrome implementation of the VideoCaptureDeviceFactory |
| // interface. |
| // It is used as a proxy between Lacros-Chrome and actual |
| // video_capture::DeviceFactory in Ash-Chrome and also responsible for |
| // translating structures between crosapi and other components. |
| // (e.g. gfx, media, video_capture) |
| // It must be destroyed before the passed video_capture::DeviceFactory. |
| class VideoCaptureDeviceFactoryAsh |
| : public crosapi::mojom::VideoCaptureDeviceFactory { |
| public: |
| explicit VideoCaptureDeviceFactoryAsh( |
| raw_ptr<video_capture::DeviceFactory> device_factory); |
| VideoCaptureDeviceFactoryAsh(const VideoCaptureDeviceFactoryAsh&) = delete; |
| VideoCaptureDeviceFactoryAsh& operator=(const VideoCaptureDeviceFactoryAsh&) = |
| delete; |
| ~VideoCaptureDeviceFactoryAsh() override; |
| |
| // crosapi::mojom::VideoCaptureDeviceFactory: |
| void GetDeviceInfos(GetDeviceInfosCallback callback) override; |
| void CreateDevice( |
| const std::string& device_id, |
| mojo::PendingReceiver<crosapi::mojom::VideoCaptureDevice> device_receiver, |
| CreateDeviceCallback callback) override; |
| |
| private: |
| // It will be triggered once the connection to the client of |
| // video_capture::mojom::Device in Lacros-Chrome is dropped. |
| void OnClientConnectionErrorOrClose(const std::string& device_id); |
| |
| raw_ptr<video_capture::DeviceFactory> device_factory_; |
| |
| // The key is the device id used in blink::MediaStreamDevice. |
| base::flat_map<std::string, std::unique_ptr<VideoCaptureDeviceAsh>> devices_; |
| |
| mojo::ReceiverSet<crosapi::mojom::VideoCaptureDeviceFactory> receivers_; |
| }; |
| |
| } // namespace crosapi |
| |
| #endif // SERVICES_VIDEO_CAPTURE_ASH_VIDEO_CAPTURE_DEVICE_FACTORY_ASH_H_ |