Index: media/mojo/services/interface_factory_impl.cc |
diff --git a/media/mojo/services/interface_factory_impl.cc b/media/mojo/services/interface_factory_impl.cc |
index 83290d356fc1238b59949c704f7b59c37375ceed..ce31c048d3b3dbb0379148cc61296d71a1543fae 100644 |
--- a/media/mojo/services/interface_factory_impl.cc |
+++ b/media/mojo/services/interface_factory_impl.cc |
@@ -20,6 +20,7 @@ |
#endif // defined(ENABLE_MOJO_VIDEO_DECODER) |
#if defined(ENABLE_MOJO_RENDERER) |
+#include "base/bind_helpers.h" |
#include "media/base/audio_renderer_sink.h" |
#include "media/base/renderer_factory.h" |
#include "media/base/video_renderer_sink.h" |
@@ -68,7 +69,7 @@ void InterfaceFactoryImpl::CreateAudioDecoder( |
return; |
} |
- mojo::MakeStrongBinding( |
+ audio_decoder_bindings_.AddBinding( |
base::MakeUnique<MojoAudioDecoderService>( |
cdm_service_context_.GetWeakPtr(), std::move(audio_decoder)), |
std::move(request)); |
@@ -78,7 +79,7 @@ void InterfaceFactoryImpl::CreateAudioDecoder( |
void InterfaceFactoryImpl::CreateVideoDecoder( |
mojom::VideoDecoderRequest request) { |
#if defined(ENABLE_MOJO_VIDEO_DECODER) |
- mojo::MakeStrongBinding( |
+ video_decoder_bindings_.AddBinding( |
base::MakeUnique<MojoVideoDecoderService>(mojo_media_client_), |
std::move(request)); |
#endif // defined(ENABLE_MOJO_VIDEO_DECODER) |
@@ -105,10 +106,23 @@ void InterfaceFactoryImpl::CreateRenderer( |
return; |
} |
- MojoRendererService::Create( |
- cdm_service_context_.GetWeakPtr(), std::move(audio_sink), |
- std::move(video_sink), std::move(renderer), |
- MojoRendererService::InitiateSurfaceRequestCB(), std::move(request)); |
+ std::unique_ptr<MojoRendererService> mojo_renderer_service = |
+ base::MakeUnique<MojoRendererService>( |
+ cdm_service_context_.GetWeakPtr(), std::move(audio_sink), |
+ std::move(video_sink), std::move(renderer), |
+ MojoRendererService::InitiateSurfaceRequestCB()); |
+ |
+ MojoRendererService* mojo_renderer_service_ptr = mojo_renderer_service.get(); |
+ |
+ StrongBindingSet<mojom::Renderer>::BindingId binding_id = |
+ renderer_bindings_.AddBinding(std::move(mojo_renderer_service), |
+ std::move(request)); |
+ |
+ // base::Unretained() is safe because the callback will be fired by |
+ // |mojo_renderer_service|, which is owned by |renderer_bindings_|. |
+ mojo_renderer_service_ptr->set_bad_message_cb(base::Bind( |
+ base::IgnoreResult(&StrongBindingSet<mojom::Renderer>::RemoveBinding), |
+ base::Unretained(&renderer_bindings_), binding_id)); |
#endif // defined(ENABLE_MOJO_RENDERER) |
} |
@@ -119,9 +133,9 @@ void InterfaceFactoryImpl::CreateCdm( |
if (!cdm_factory) |
return; |
- mojo::MakeStrongBinding(base::MakeUnique<MojoCdmService>( |
- cdm_service_context_.GetWeakPtr(), cdm_factory), |
- std::move(request)); |
+ cdm_bindings_.AddBinding(base::MakeUnique<MojoCdmService>( |
+ cdm_service_context_.GetWeakPtr(), cdm_factory), |
+ std::move(request)); |
#endif // defined(ENABLE_MOJO_CDM) |
} |