| 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)
|
| }
|
|
|
|
|