Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(619)

Unified Diff: media/mojo/services/interface_factory_impl.cc

Issue 2530613003: media: Fix lifetime of InterfaceFactoryImpl and created impls (Closed)
Patch Set: comments addressed Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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)
}

Powered by Google App Engine
This is Rietveld 408576698