Commit cd94fd4f authored by Gyuyoung Kim's avatar Gyuyoung Kim Committed by Commit Bot

Migrate VideoSourceProvider to new Mojo types more

This CL applies new Mojo types to VideoSourceProvider interface.

 - Replace MakeStrongBinding with MakeSelfOwnedReceiver.
 - Convert FooRequest to mojo::PendingReceiver.
 - Convert FooPtr to mojo::PendingRemote or mojo::Remote.
 - Replace std::find_if with a for-loop.
 - Replace mojo::Binding with mojo::Receiver

Bug: 955171
Change-Id: I9ce0a8a075b84ce4f65a6ebd79e025e598faa3eb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1863795Reviewed-by: default avatarGuido Urdaneta <guidou@chromium.org>
Reviewed-by: default avatarKen Rockot <rockot@google.com>
Reviewed-by: default avatarDominick Ng <dominickn@chromium.org>
Commit-Queue: Gyuyoung Kim <gyuyoung@igalia.com>
Cr-Commit-Position: refs/heads/master@{#708184}
parent fa6cf8fa
...@@ -157,10 +157,10 @@ void ServiceVideoCaptureProvider::OnServiceStarted() { ...@@ -157,10 +157,10 @@ void ServiceVideoCaptureProvider::OnServiceStarted() {
// change events when virtual devices are added to or removed from the // change events when virtual devices are added to or removed from the
// service. // service.
auto service_connection = LazyConnectToService(); auto service_connection = LazyConnectToService();
video_capture::mojom::DevicesChangedObserverPtr observer; mojo::PendingRemote<video_capture::mojom::DevicesChangedObserver> observer;
mojo::MakeStrongBinding( mojo::MakeSelfOwnedReceiver(
std::make_unique<VirtualVideoCaptureDevicesChangedObserver>(), std::make_unique<VirtualVideoCaptureDevicesChangedObserver>(),
mojo::MakeRequest(&observer)); observer.InitWithNewPipeAndPassReceiver());
service_connection->source_provider()->RegisterVirtualDevicesChangedObserver( service_connection->source_provider()->RegisterVirtualDevicesChangedObserver(
std::move(observer), std::move(observer),
true /*raise_event_if_virtual_devices_already_present*/); true /*raise_event_if_virtual_devices_already_present*/);
......
...@@ -14,7 +14,8 @@ ...@@ -14,7 +14,8 @@
#include "content/public/test/content_browser_test_utils.h" #include "content/public/test/content_browser_test_utils.h"
#include "content/shell/browser/shell.h" #include "content/shell/browser/shell.h"
#include "media/base/media_switches.h" #include "media/base/media_switches.h"
#include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "net/test/embedded_test_server/embedded_test_server.h" #include "net/test/embedded_test_server/embedded_test_server.h"
#include "services/video_capture/public/cpp/mock_producer.h" #include "services/video_capture/public/cpp/mock_producer.h"
#include "services/video_capture/public/mojom/device_factory.mojom.h" #include "services/video_capture/public/mojom/device_factory.mojom.h"
...@@ -64,16 +65,16 @@ class WebRtcVideoCaptureServiceEnumerationBrowserTest ...@@ -64,16 +65,16 @@ class WebRtcVideoCaptureServiceEnumerationBrowserTest
public testing::WithParamInterface<TestParams>, public testing::WithParamInterface<TestParams>,
public video_capture::mojom::DevicesChangedObserver { public video_capture::mojom::DevicesChangedObserver {
public: public:
WebRtcVideoCaptureServiceEnumerationBrowserTest() WebRtcVideoCaptureServiceEnumerationBrowserTest() {
: devices_changed_observer_binding_(this) {
scoped_feature_list_.InitAndEnableFeature(features::kMojoVideoCapture); scoped_feature_list_.InitAndEnableFeature(features::kMojoVideoCapture);
} }
~WebRtcVideoCaptureServiceEnumerationBrowserTest() override {} ~WebRtcVideoCaptureServiceEnumerationBrowserTest() override {}
void ConnectToService() { void ConnectToService() {
video_capture::mojom::DevicesChangedObserverPtr observer; mojo::PendingRemote<video_capture::mojom::DevicesChangedObserver> observer;
devices_changed_observer_binding_.Bind(mojo::MakeRequest(&observer)); devices_changed_observer_receiver_.Bind(
observer.InitWithNewPipeAndPassReceiver());
switch (GetParam().api_to_use) { switch (GetParam().api_to_use) {
case ServiceApi::kSingleClient: case ServiceApi::kSingleClient:
GetVideoCaptureService().ConnectToDeviceFactory( GetVideoCaptureService().ConnectToDeviceFactory(
...@@ -225,8 +226,8 @@ class WebRtcVideoCaptureServiceEnumerationBrowserTest ...@@ -225,8 +226,8 @@ class WebRtcVideoCaptureServiceEnumerationBrowserTest
shared_memory_devices_by_id_; shared_memory_devices_by_id_;
private: private:
mojo::Binding<video_capture::mojom::DevicesChangedObserver> mojo::Receiver<video_capture::mojom::DevicesChangedObserver>
devices_changed_observer_binding_; devices_changed_observer_receiver_{this};
base::test::ScopedFeatureList scoped_feature_list_; base::test::ScopedFeatureList scoped_feature_list_;
video_capture::mojom::DeviceFactoryPtr factory_; video_capture::mojom::DeviceFactoryPtr factory_;
video_capture::mojom::VideoSourceProviderPtr video_source_provider_; video_capture::mojom::VideoSourceProviderPtr video_source_provider_;
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
#include "base/strings/stringprintf.h" #include "base/strings/stringprintf.h"
#include "media/capture/video/fake_video_capture_device.h" #include "media/capture/video/fake_video_capture_device.h"
#include "media/capture/video/video_capture_device_info.h" #include "media/capture/video/video_capture_device_info.h"
#include "mojo/public/cpp/bindings/strong_binding.h" #include "mojo/public/cpp/bindings/pending_remote.h"
#include "services/video_capture/device_media_to_mojo_adapter.h" #include "services/video_capture/device_media_to_mojo_adapter.h"
#include "services/video_capture/public/mojom/producer.mojom.h" #include "services/video_capture/public/mojom/producer.mojom.h"
#include "services/video_capture/public/uma/video_capture_service_event.h" #include "services/video_capture/public/uma/video_capture_service_event.h"
...@@ -157,7 +157,7 @@ void DeviceFactoryMediaToMojoAdapter::AddTextureVirtualDevice( ...@@ -157,7 +157,7 @@ void DeviceFactoryMediaToMojoAdapter::AddTextureVirtualDevice(
} }
void DeviceFactoryMediaToMojoAdapter::RegisterVirtualDevicesChangedObserver( void DeviceFactoryMediaToMojoAdapter::RegisterVirtualDevicesChangedObserver(
mojom::DevicesChangedObserverPtr observer, mojo::PendingRemote<mojom::DevicesChangedObserver> observer,
bool raise_event_if_virtual_devices_already_present) { bool raise_event_if_virtual_devices_already_present) {
NOTIMPLEMENTED(); NOTIMPLEMENTED();
} }
......
...@@ -56,8 +56,9 @@ class DeviceFactoryMediaToMojoAdapter : public DeviceFactory { ...@@ -56,8 +56,9 @@ class DeviceFactoryMediaToMojoAdapter : public DeviceFactory {
mojo::PendingReceiver<mojom::TextureVirtualDevice> mojo::PendingReceiver<mojom::TextureVirtualDevice>
virtual_device_receiver) override; virtual_device_receiver) override;
void RegisterVirtualDevicesChangedObserver( void RegisterVirtualDevicesChangedObserver(
mojom::DevicesChangedObserverPtr observer, mojo::PendingRemote<mojom::DevicesChangedObserver> observer,
bool raise_event_if_virtual_devices_already_present) override; bool raise_event_if_virtual_devices_already_present) override;
private: private:
struct ActiveDeviceEntry { struct ActiveDeviceEntry {
ActiveDeviceEntry(); ActiveDeviceEntry();
......
...@@ -34,7 +34,8 @@ class MockDeviceFactory : public video_capture::mojom::DeviceFactory { ...@@ -34,7 +34,8 @@ class MockDeviceFactory : public video_capture::mojom::DeviceFactory {
mojo::PendingReceiver<video_capture::mojom::TextureVirtualDevice> mojo::PendingReceiver<video_capture::mojom::TextureVirtualDevice>
virtual_device_receiver) override; virtual_device_receiver) override;
void RegisterVirtualDevicesChangedObserver( void RegisterVirtualDevicesChangedObserver(
video_capture::mojom::DevicesChangedObserverPtr observer, mojo::PendingRemote<video_capture::mojom::DevicesChangedObserver>
observer,
bool raise_event_if_virtual_devices_already_present) override { bool raise_event_if_virtual_devices_already_present) override {
NOTIMPLEMENTED(); NOTIMPLEMENTED();
} }
......
...@@ -38,7 +38,8 @@ class MockVideoSourceProvider ...@@ -38,7 +38,8 @@ class MockVideoSourceProvider
mojo::PendingReceiver<video_capture::mojom::TextureVirtualDevice> mojo::PendingReceiver<video_capture::mojom::TextureVirtualDevice>
virtual_device_receiver) override; virtual_device_receiver) override;
void RegisterVirtualDevicesChangedObserver( void RegisterVirtualDevicesChangedObserver(
video_capture::mojom::DevicesChangedObserverPtr observer, mojo::PendingRemote<video_capture::mojom::DevicesChangedObserver>
observer,
bool raise_event_if_virtual_devices_already_present) override { bool raise_event_if_virtual_devices_already_present) override {
NOTIMPLEMENTED(); NOTIMPLEMENTED();
} }
......
...@@ -70,6 +70,6 @@ interface DeviceFactory { ...@@ -70,6 +70,6 @@ interface DeviceFactory {
// monitored outside the video capture service, and therefore the service // monitored outside the video capture service, and therefore the service
// does not offer such monitoring. // does not offer such monitoring.
RegisterVirtualDevicesChangedObserver( RegisterVirtualDevicesChangedObserver(
DevicesChangedObserver observer, pending_remote<DevicesChangedObserver> observer,
bool raise_event_if_virtual_devices_already_present); bool raise_event_if_virtual_devices_already_present);
}; };
...@@ -48,7 +48,7 @@ interface VideoSourceProvider { ...@@ -48,7 +48,7 @@ interface VideoSourceProvider {
// monitored outside the video capture service, and therefore the service // monitored outside the video capture service, and therefore the service
// does not offer such monitoring. // does not offer such monitoring.
RegisterVirtualDevicesChangedObserver( RegisterVirtualDevicesChangedObserver(
DevicesChangedObserver observer, pending_remote<DevicesChangedObserver> observer,
bool raise_event_if_virtual_devices_already_present); bool raise_event_if_virtual_devices_already_present);
// Closes the connection and allows clients to wait until the disconnect has // Closes the connection and allows clients to wait until the disconnect has
......
...@@ -5,7 +5,8 @@ ...@@ -5,7 +5,8 @@
#include "base/memory/ref_counted.h" #include "base/memory/ref_counted.h"
#include "base/run_loop.h" #include "base/run_loop.h"
#include "base/test/mock_callback.h" #include "base/test/mock_callback.h"
#include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "services/video_capture/public/cpp/mock_producer.h" #include "services/video_capture/public/cpp/mock_producer.h"
#include "services/video_capture/public/mojom/constants.mojom.h" #include "services/video_capture/public/mojom/constants.mojom.h"
#include "services/video_capture/public/mojom/device.mojom.h" #include "services/video_capture/public/mojom/device.mojom.h"
...@@ -78,10 +79,10 @@ TEST_F(VideoCaptureServiceTest, VirtualDeviceEnumeratedAfterAdd) { ...@@ -78,10 +79,10 @@ TEST_F(VideoCaptureServiceTest, VirtualDeviceEnumeratedAfterAdd) {
TEST_F(VideoCaptureServiceTest, TEST_F(VideoCaptureServiceTest,
AddingAndRemovingVirtualDevicesRaisesDevicesChangedEvent) { AddingAndRemovingVirtualDevicesRaisesDevicesChangedEvent) {
mojom::DevicesChangedObserverPtr observer; mojo::PendingRemote<mojom::DevicesChangedObserver> observer;
MockDevicesChangedObserver mock_observer; MockDevicesChangedObserver mock_observer;
mojo::Binding<mojom::DevicesChangedObserver> observer_binding( mojo::Receiver<mojom::DevicesChangedObserver> observer_receiver(
&mock_observer, mojo::MakeRequest(&observer)); &mock_observer, observer.InitWithNewPipeAndPassReceiver());
factory_->RegisterVirtualDevicesChangedObserver( factory_->RegisterVirtualDevicesChangedObserver(
std::move(observer), std::move(observer),
false /*raise_event_if_virtual_devices_already_present*/); false /*raise_event_if_virtual_devices_already_present*/);
...@@ -125,16 +126,16 @@ TEST_F(VideoCaptureServiceTest, ...@@ -125,16 +126,16 @@ TEST_F(VideoCaptureServiceTest,
// crash or bad state. // crash or bad state.
TEST_F(VideoCaptureServiceTest, TEST_F(VideoCaptureServiceTest,
AddAndRemoveVirtualDeviceAfterObserverHasDisconnected) { AddAndRemoveVirtualDeviceAfterObserverHasDisconnected) {
mojom::DevicesChangedObserverPtr observer; mojo::PendingRemote<mojom::DevicesChangedObserver> observer;
MockDevicesChangedObserver mock_observer; MockDevicesChangedObserver mock_observer;
mojo::Binding<mojom::DevicesChangedObserver> observer_binding( mojo::Receiver<mojom::DevicesChangedObserver> observer_receiver(
&mock_observer, mojo::MakeRequest(&observer)); &mock_observer, observer.InitWithNewPipeAndPassReceiver());
factory_->RegisterVirtualDevicesChangedObserver( factory_->RegisterVirtualDevicesChangedObserver(
std::move(observer), std::move(observer),
false /*raise_event_if_virtual_devices_already_present*/); false /*raise_event_if_virtual_devices_already_present*/);
// Disconnect observer // Disconnect observer
observer_binding.Close(); observer_receiver.reset();
auto device_context = AddTextureVirtualDevice("TestDevice"); auto device_context = AddTextureVirtualDevice("TestDevice");
device_context = nullptr; device_context = nullptr;
......
...@@ -72,7 +72,7 @@ void VideoSourceProviderImpl::AddTextureVirtualDevice( ...@@ -72,7 +72,7 @@ void VideoSourceProviderImpl::AddTextureVirtualDevice(
} }
void VideoSourceProviderImpl::RegisterVirtualDevicesChangedObserver( void VideoSourceProviderImpl::RegisterVirtualDevicesChangedObserver(
mojom::DevicesChangedObserverPtr observer, mojo::PendingRemote<mojom::DevicesChangedObserver> observer,
bool raise_event_if_virtual_devices_already_present) { bool raise_event_if_virtual_devices_already_present) {
device_factory_->RegisterVirtualDevicesChangedObserver( device_factory_->RegisterVirtualDevicesChangedObserver(
std::move(observer), raise_event_if_virtual_devices_already_present); std::move(observer), raise_event_if_virtual_devices_already_present);
......
...@@ -41,7 +41,7 @@ class VideoSourceProviderImpl : public mojom::VideoSourceProvider { ...@@ -41,7 +41,7 @@ class VideoSourceProviderImpl : public mojom::VideoSourceProvider {
mojo::PendingReceiver<mojom::TextureVirtualDevice> mojo::PendingReceiver<mojom::TextureVirtualDevice>
virtual_device_receiver) override; virtual_device_receiver) override;
void RegisterVirtualDevicesChangedObserver( void RegisterVirtualDevicesChangedObserver(
mojom::DevicesChangedObserverPtr observer, mojo::PendingRemote<mojom::DevicesChangedObserver> observer,
bool raise_event_if_virtual_devices_already_present) override; bool raise_event_if_virtual_devices_already_present) override;
void Close(CloseCallback callback) override; void Close(CloseCallback callback) override;
......
...@@ -7,6 +7,9 @@ ...@@ -7,6 +7,9 @@
#include "base/bind.h" #include "base/bind.h"
#include "base/logging.h" #include "base/logging.h"
#include "media/capture/video/video_capture_device_info.h" #include "media/capture/video/video_capture_device_info.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "services/video_capture/device_factory.h" #include "services/video_capture/device_factory.h"
#include "services/video_capture/shared_memory_virtual_device_mojo_adapter.h" #include "services/video_capture/shared_memory_virtual_device_mojo_adapter.h"
#include "services/video_capture/texture_virtual_device_mojo_adapter.h" #include "services/video_capture/texture_virtual_device_mojo_adapter.h"
...@@ -18,44 +21,45 @@ class VirtualDeviceEnabledDeviceFactory::VirtualDeviceEntry { ...@@ -18,44 +21,45 @@ class VirtualDeviceEnabledDeviceFactory::VirtualDeviceEntry {
VirtualDeviceEntry( VirtualDeviceEntry(
const media::VideoCaptureDeviceInfo& device_info, const media::VideoCaptureDeviceInfo& device_info,
std::unique_ptr<SharedMemoryVirtualDeviceMojoAdapter> device, std::unique_ptr<SharedMemoryVirtualDeviceMojoAdapter> device,
std::unique_ptr<mojo::Binding<mojom::SharedMemoryVirtualDevice>> std::unique_ptr<mojo::Receiver<mojom::SharedMemoryVirtualDevice>>
producer_binding) producer_receiver)
: device_info_(device_info), : device_info_(device_info),
device_type_(DeviceType::kSharedMemory), device_type_(DeviceType::kSharedMemory),
shared_memory_device_(std::move(device)), shared_memory_device_(std::move(device)),
shared_memory_producer_binding_(std::move(producer_binding)) {} shared_memory_producer_receiver_(std::move(producer_receiver)) {}
VirtualDeviceEntry(const media::VideoCaptureDeviceInfo& device_info, VirtualDeviceEntry(
const media::VideoCaptureDeviceInfo& device_info,
std::unique_ptr<TextureVirtualDeviceMojoAdapter> device, std::unique_ptr<TextureVirtualDeviceMojoAdapter> device,
std::unique_ptr<mojo::Binding<mojom::TextureVirtualDevice>> std::unique_ptr<mojo::Receiver<mojom::TextureVirtualDevice>>
producer_binding) producer_receiver)
: device_info_(device_info), : device_info_(device_info),
device_type_(DeviceType::kTexture), device_type_(DeviceType::kTexture),
texture_device_(std::move(device)), texture_device_(std::move(device)),
texture_producer_binding_(std::move(producer_binding)) {} texture_producer_receiver_(std::move(producer_receiver)) {}
VirtualDeviceEntry(VirtualDeviceEntry&& other) = default; VirtualDeviceEntry(VirtualDeviceEntry&& other) = default;
VirtualDeviceEntry& operator=(VirtualDeviceEntry&& other) = default; VirtualDeviceEntry& operator=(VirtualDeviceEntry&& other) = default;
bool HasConsumerBinding() { return consumer_binding_ != nullptr; } bool HasConsumerBinding() { return consumer_receiver_ != nullptr; }
void EstablishConsumerBinding(mojom::DeviceRequest device_request, void EstablishConsumerBinding(mojom::DeviceRequest device_request,
base::OnceClosure connection_error_handler) { base::OnceClosure connection_error_handler) {
switch (device_type_) { switch (device_type_) {
case DeviceType::kSharedMemory: case DeviceType::kSharedMemory:
consumer_binding_ = std::make_unique<mojo::Binding<mojom::Device>>( consumer_receiver_ = std::make_unique<mojo::Receiver<mojom::Device>>(
shared_memory_device_.get(), std::move(device_request)); shared_memory_device_.get(), std::move(device_request));
break; break;
case DeviceType::kTexture: case DeviceType::kTexture:
consumer_binding_ = std::make_unique<mojo::Binding<mojom::Device>>( consumer_receiver_ = std::make_unique<mojo::Receiver<mojom::Device>>(
texture_device_.get(), std::move(device_request)); texture_device_.get(), std::move(device_request));
break; break;
} }
consumer_binding_->set_connection_error_handler( consumer_receiver_->set_disconnect_handler(
std::move(connection_error_handler)); std::move(connection_error_handler));
} }
void ResetConsumerBinding() { consumer_binding_.reset(); } void ResetConsumerBinding() { consumer_receiver_.reset(); }
void StopDevice() { void StopDevice() {
if (shared_memory_device_) if (shared_memory_device_)
...@@ -74,15 +78,15 @@ class VirtualDeviceEnabledDeviceFactory::VirtualDeviceEntry { ...@@ -74,15 +78,15 @@ class VirtualDeviceEnabledDeviceFactory::VirtualDeviceEntry {
// Only valid for |device_type_ == kSharedMemory| // Only valid for |device_type_ == kSharedMemory|
std::unique_ptr<SharedMemoryVirtualDeviceMojoAdapter> shared_memory_device_; std::unique_ptr<SharedMemoryVirtualDeviceMojoAdapter> shared_memory_device_;
std::unique_ptr<mojo::Binding<mojom::SharedMemoryVirtualDevice>> std::unique_ptr<mojo::Receiver<mojom::SharedMemoryVirtualDevice>>
shared_memory_producer_binding_; shared_memory_producer_receiver_;
// Only valid for |device_type_ == kTexture| // Only valid for |device_type_ == kTexture|
std::unique_ptr<TextureVirtualDeviceMojoAdapter> texture_device_; std::unique_ptr<TextureVirtualDeviceMojoAdapter> texture_device_;
std::unique_ptr<mojo::Binding<mojom::TextureVirtualDevice>> std::unique_ptr<mojo::Receiver<mojom::TextureVirtualDevice>>
texture_producer_binding_; texture_producer_receiver_;
std::unique_ptr<mojo::Binding<mojom::Device>> consumer_binding_; std::unique_ptr<mojo::Receiver<mojom::Device>> consumer_receiver_;
}; };
VirtualDeviceEnabledDeviceFactory::VirtualDeviceEnabledDeviceFactory( VirtualDeviceEnabledDeviceFactory::VirtualDeviceEnabledDeviceFactory(
...@@ -147,15 +151,15 @@ void VirtualDeviceEnabledDeviceFactory::AddSharedMemoryVirtualDevice( ...@@ -147,15 +151,15 @@ void VirtualDeviceEnabledDeviceFactory::AddSharedMemoryVirtualDevice(
auto device = std::make_unique<SharedMemoryVirtualDeviceMojoAdapter>( auto device = std::make_unique<SharedMemoryVirtualDeviceMojoAdapter>(
std::move(producer), std::move(producer),
send_buffer_handles_to_producer_as_raw_file_descriptors); send_buffer_handles_to_producer_as_raw_file_descriptors);
auto producer_binding = auto producer_receiver =
std::make_unique<mojo::Binding<mojom::SharedMemoryVirtualDevice>>( std::make_unique<mojo::Receiver<mojom::SharedMemoryVirtualDevice>>(
device.get(), std::move(virtual_device_receiver)); device.get(), std::move(virtual_device_receiver));
producer_binding->set_connection_error_handler( producer_receiver->set_disconnect_handler(
base::BindOnce(&VirtualDeviceEnabledDeviceFactory:: base::BindOnce(&VirtualDeviceEnabledDeviceFactory::
OnVirtualDeviceProducerConnectionErrorOrClose, OnVirtualDeviceProducerConnectionErrorOrClose,
base::Unretained(this), device_id)); base::Unretained(this), device_id));
VirtualDeviceEntry device_entry(device_info, std::move(device), VirtualDeviceEntry device_entry(device_info, std::move(device),
std::move(producer_binding)); std::move(producer_receiver));
virtual_devices_by_id_.insert( virtual_devices_by_id_.insert(
std::make_pair(device_id, std::move(device_entry))); std::make_pair(device_id, std::move(device_entry)));
EmitDevicesChangedEvent(); EmitDevicesChangedEvent();
...@@ -174,24 +178,26 @@ void VirtualDeviceEnabledDeviceFactory::AddTextureVirtualDevice( ...@@ -174,24 +178,26 @@ void VirtualDeviceEnabledDeviceFactory::AddTextureVirtualDevice(
} }
auto device = std::make_unique<TextureVirtualDeviceMojoAdapter>(); auto device = std::make_unique<TextureVirtualDeviceMojoAdapter>();
auto producer_binding = auto producer_receiver =
std::make_unique<mojo::Binding<mojom::TextureVirtualDevice>>( std::make_unique<mojo::Receiver<mojom::TextureVirtualDevice>>(
device.get(), std::move(virtual_device_receiver)); device.get(), std::move(virtual_device_receiver));
producer_binding->set_connection_error_handler( producer_receiver->set_disconnect_handler(
base::BindOnce(&VirtualDeviceEnabledDeviceFactory:: base::BindOnce(&VirtualDeviceEnabledDeviceFactory::
OnVirtualDeviceProducerConnectionErrorOrClose, OnVirtualDeviceProducerConnectionErrorOrClose,
base::Unretained(this), device_id)); base::Unretained(this), device_id));
VirtualDeviceEntry device_entry(device_info, std::move(device), VirtualDeviceEntry device_entry(device_info, std::move(device),
std::move(producer_binding)); std::move(producer_receiver));
virtual_devices_by_id_.insert( virtual_devices_by_id_.insert(
std::make_pair(device_id, std::move(device_entry))); std::make_pair(device_id, std::move(device_entry)));
EmitDevicesChangedEvent(); EmitDevicesChangedEvent();
} }
void VirtualDeviceEnabledDeviceFactory::RegisterVirtualDevicesChangedObserver( void VirtualDeviceEnabledDeviceFactory::RegisterVirtualDevicesChangedObserver(
mojom::DevicesChangedObserverPtr observer, mojo::PendingRemote<mojom::DevicesChangedObserver> observer_pending_remote,
bool raise_event_if_virtual_devices_already_present) { bool raise_event_if_virtual_devices_already_present) {
observer.set_connection_error_handler(base::BindOnce( mojo::Remote<mojom::DevicesChangedObserver> observer(
std::move(observer_pending_remote));
observer.set_disconnect_handler(base::BindOnce(
&VirtualDeviceEnabledDeviceFactory::OnDevicesChangedObserverDisconnected, &VirtualDeviceEnabledDeviceFactory::OnDevicesChangedObserverDisconnected,
weak_factory_.GetWeakPtr(), observer.get())); weak_factory_.GetWeakPtr(), observer.get()));
if (!virtual_devices_by_id_.empty() && if (!virtual_devices_by_id_.empty() &&
...@@ -234,16 +240,13 @@ void VirtualDeviceEnabledDeviceFactory::EmitDevicesChangedEvent() { ...@@ -234,16 +240,13 @@ void VirtualDeviceEnabledDeviceFactory::EmitDevicesChangedEvent() {
void VirtualDeviceEnabledDeviceFactory::OnDevicesChangedObserverDisconnected( void VirtualDeviceEnabledDeviceFactory::OnDevicesChangedObserverDisconnected(
mojom::DevicesChangedObserverPtr::Proxy* observer) { mojom::DevicesChangedObserverPtr::Proxy* observer) {
auto iter = std::find_if( for (auto iter = devices_changed_observers_.begin();
devices_changed_observers_.begin(), devices_changed_observers_.end(), iter != devices_changed_observers_.end(); ++iter) {
[observer](const mojom::DevicesChangedObserverPtr& entry) { if (iter->get() == observer) {
return entry.get() == observer;
});
if (iter == devices_changed_observers_.end()) {
DCHECK(false);
return;
}
devices_changed_observers_.erase(iter); devices_changed_observers_.erase(iter);
break;
}
}
} }
} // namespace video_capture } // namespace video_capture
...@@ -8,9 +8,9 @@ ...@@ -8,9 +8,9 @@
#include <map> #include <map>
#include <utility> #include <utility>
#include "mojo/public/cpp/bindings/binding.h"
#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "services/video_capture/device_factory.h" #include "services/video_capture/device_factory.h"
#include "services/video_capture/public/mojom/device.mojom.h" #include "services/video_capture/public/mojom/device.mojom.h"
#include "services/video_capture/public/mojom/devices_changed_observer.mojom.h" #include "services/video_capture/public/mojom/devices_changed_observer.mojom.h"
...@@ -41,8 +41,9 @@ class VirtualDeviceEnabledDeviceFactory : public DeviceFactory { ...@@ -41,8 +41,9 @@ class VirtualDeviceEnabledDeviceFactory : public DeviceFactory {
mojo::PendingReceiver<mojom::TextureVirtualDevice> mojo::PendingReceiver<mojom::TextureVirtualDevice>
virtual_device_receiver) override; virtual_device_receiver) override;
void RegisterVirtualDevicesChangedObserver( void RegisterVirtualDevicesChangedObserver(
mojom::DevicesChangedObserverPtr observer, mojo::PendingRemote<mojom::DevicesChangedObserver> observer,
bool raise_event_if_virtual_devices_already_present) override; bool raise_event_if_virtual_devices_already_present) override;
private: private:
class VirtualDeviceEntry; class VirtualDeviceEntry;
...@@ -60,7 +61,8 @@ class VirtualDeviceEnabledDeviceFactory : public DeviceFactory { ...@@ -60,7 +61,8 @@ class VirtualDeviceEnabledDeviceFactory : public DeviceFactory {
std::map<std::string, VirtualDeviceEntry> virtual_devices_by_id_; std::map<std::string, VirtualDeviceEntry> virtual_devices_by_id_;
const std::unique_ptr<DeviceFactory> device_factory_; const std::unique_ptr<DeviceFactory> device_factory_;
std::vector<mojom::DevicesChangedObserverPtr> devices_changed_observers_; std::vector<mojo::Remote<mojom::DevicesChangedObserver>>
devices_changed_observers_;
base::WeakPtrFactory<VirtualDeviceEnabledDeviceFactory> weak_factory_{this}; base::WeakPtrFactory<VirtualDeviceEnabledDeviceFactory> weak_factory_{this};
DISALLOW_COPY_AND_ASSIGN(VirtualDeviceEnabledDeviceFactory); DISALLOW_COPY_AND_ASSIGN(VirtualDeviceEnabledDeviceFactory);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment