Commit 9d04333f authored by xhwang's avatar xhwang Committed by Commit bot

media: Use mojo::StrongBinding in mojo media services.

BUG=489756
TEST=Mojo media services still working in html_viewer and chrome browser.

Review URL: https://codereview.chromium.org/1134003009

Cr-Commit-Position: refs/heads/master@{#330790}
parent 131615b8
...@@ -1521,8 +1521,8 @@ void RenderFrameHostImpl::OnHidePopup() { ...@@ -1521,8 +1521,8 @@ void RenderFrameHostImpl::OnHidePopup() {
#if defined(ENABLE_MEDIA_MOJO_RENDERER) #if defined(ENABLE_MEDIA_MOJO_RENDERER)
static void CreateMediaRendererService( static void CreateMediaRendererService(
mojo::InterfaceRequest<mojo::MediaRenderer> request) { mojo::InterfaceRequest<mojo::MediaRenderer> request) {
media::MojoRendererService* service = new media::MojoRendererService(); // The created object is owned by the pipe.
mojo::BindToRequest(service, &request); new media::MojoRendererService(request.Pass());
} }
#endif #endif
......
...@@ -19,8 +19,10 @@ namespace media { ...@@ -19,8 +19,10 @@ namespace media {
typedef MojoCdmPromise<> SimpleMojoCdmPromise; typedef MojoCdmPromise<> SimpleMojoCdmPromise;
typedef MojoCdmPromise<std::string> NewSessionMojoCdmPromise; typedef MojoCdmPromise<std::string> NewSessionMojoCdmPromise;
MojoCdmService::MojoCdmService(const mojo::String& key_system) MojoCdmService::MojoCdmService(
: weak_factory_(this) { const mojo::String& key_system,
mojo::InterfaceRequest<mojo::ContentDecryptionModule> request)
: binding_(this, request.Pass()), weak_factory_(this) {
base::WeakPtr<MojoCdmService> weak_this = weak_factory_.GetWeakPtr(); base::WeakPtr<MojoCdmService> weak_this = weak_factory_.GetWeakPtr();
if (CanUseAesDecryptor(key_system)) { if (CanUseAesDecryptor(key_system)) {
......
...@@ -11,15 +11,15 @@ ...@@ -11,15 +11,15 @@
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "media/base/media_keys.h" #include "media/base/media_keys.h"
#include "media/mojo/interfaces/content_decryption_module.mojom.h" #include "media/mojo/interfaces/content_decryption_module.mojom.h"
#include "third_party/mojo/src/mojo/public/cpp/bindings/interface_impl.h" #include "third_party/mojo/src/mojo/public/cpp/bindings/strong_binding.h"
namespace media { namespace media {
// A mojo::ContentDecryptionModule implementation backed by a media::MediaKeys. // A mojo::ContentDecryptionModule implementation backed by a media::MediaKeys.
class MojoCdmService class MojoCdmService : public mojo::ContentDecryptionModule {
: public mojo::InterfaceImpl<mojo::ContentDecryptionModule> {
public: public:
MojoCdmService(const mojo::String& key_system); MojoCdmService(const mojo::String& key_system,
mojo::InterfaceRequest<mojo::ContentDecryptionModule> request);
~MojoCdmService() final; ~MojoCdmService() final;
// mojo::ContentDecryptionModule implementation. // mojo::ContentDecryptionModule implementation.
...@@ -67,6 +67,8 @@ class MojoCdmService ...@@ -67,6 +67,8 @@ class MojoCdmService
uint32_t system_code, uint32_t system_code,
const std::string& error_message); const std::string& error_message);
mojo::StrongBinding<mojo::ContentDecryptionModule> binding_;
scoped_ptr<MediaKeys> cdm_; scoped_ptr<MediaKeys> cdm_;
mojo::ContentDecryptionModuleClientPtr client_; mojo::ContentDecryptionModuleClientPtr client_;
......
...@@ -13,8 +13,10 @@ ...@@ -13,8 +13,10 @@
namespace media { namespace media {
MojoDemuxerStreamImpl::MojoDemuxerStreamImpl(media::DemuxerStream* stream) MojoDemuxerStreamImpl::MojoDemuxerStreamImpl(
: stream_(stream), weak_factory_(this) { media::DemuxerStream* stream,
mojo::InterfaceRequest<mojo::DemuxerStream> request)
: binding_(this, request.Pass()), stream_(stream), weak_factory_(this) {
} }
MojoDemuxerStreamImpl::~MojoDemuxerStreamImpl() { MojoDemuxerStreamImpl::~MojoDemuxerStreamImpl() {
......
...@@ -9,18 +9,19 @@ ...@@ -9,18 +9,19 @@
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "media/base/demuxer_stream.h" #include "media/base/demuxer_stream.h"
#include "media/mojo/interfaces/demuxer_stream.mojom.h" #include "media/mojo/interfaces/demuxer_stream.mojom.h"
#include "third_party/mojo/src/mojo/public/cpp/bindings/interface_impl.h" #include "third_party/mojo/src/mojo/public/cpp/bindings/strong_binding.h"
namespace media { namespace media {
class DemuxerStream; class DemuxerStream;
// This class wraps a media::DemuxerStream and exposes it as a // This class wraps a media::DemuxerStream and exposes it as a
// mojo::DemuxerStream for use as a proxy from remote applications. // mojo::DemuxerStream for use as a proxy from remote applications.
class MojoDemuxerStreamImpl : public mojo::InterfaceImpl<mojo::DemuxerStream> { class MojoDemuxerStreamImpl : public mojo::DemuxerStream {
public: public:
// |stream| is the underlying DemuxerStream we are proxying for. // |stream| is the underlying DemuxerStream we are proxying for.
// Note: |this| does not take ownership of |stream|. // Note: |this| does not take ownership of |stream|.
explicit MojoDemuxerStreamImpl(media::DemuxerStream* stream); MojoDemuxerStreamImpl(media::DemuxerStream* stream,
mojo::InterfaceRequest<mojo::DemuxerStream> request);
~MojoDemuxerStreamImpl() override; ~MojoDemuxerStreamImpl() override;
// mojo::DemuxerStream implementation. // mojo::DemuxerStream implementation.
...@@ -33,6 +34,8 @@ class MojoDemuxerStreamImpl : public mojo::InterfaceImpl<mojo::DemuxerStream> { ...@@ -33,6 +34,8 @@ class MojoDemuxerStreamImpl : public mojo::InterfaceImpl<mojo::DemuxerStream> {
media::DemuxerStream::Status status, media::DemuxerStream::Status status,
const scoped_refptr<media::DecoderBuffer>& buffer); const scoped_refptr<media::DecoderBuffer>& buffer);
mojo::StrongBinding<mojo::DemuxerStream> binding_;
// See constructor. We do not own |stream_|. // See constructor. We do not own |stream_|.
media::DemuxerStream* stream_; media::DemuxerStream* stream_;
......
...@@ -35,7 +35,8 @@ class MojoMediaApplication ...@@ -35,7 +35,8 @@ class MojoMediaApplication
// mojo::InterfaceFactory<mojo::MediaRenderer> implementation. // mojo::InterfaceFactory<mojo::MediaRenderer> implementation.
void Create(mojo::ApplicationConnection* connection, void Create(mojo::ApplicationConnection* connection,
mojo::InterfaceRequest<mojo::MediaRenderer> request) override { mojo::InterfaceRequest<mojo::MediaRenderer> request) override {
mojo::BindToRequest(new MojoRendererService(), &request); // The created object is owned by the pipe.
new MojoRendererService(request.Pass());
} }
}; };
......
...@@ -61,11 +61,11 @@ void MojoRendererImpl::Initialize( ...@@ -61,11 +61,11 @@ void MojoRendererImpl::Initialize(
mojo::DemuxerStreamPtr audio_stream; mojo::DemuxerStreamPtr audio_stream;
if (audio) if (audio)
mojo::BindToProxy(new MojoDemuxerStreamImpl(audio), &audio_stream); new MojoDemuxerStreamImpl(audio, GetProxy(&audio_stream));
mojo::DemuxerStreamPtr video_stream; mojo::DemuxerStreamPtr video_stream;
if (video) if (video)
mojo::BindToProxy(new MojoDemuxerStreamImpl(video), &video_stream); new MojoDemuxerStreamImpl(video, GetProxy(&video_stream));
mojo::MediaRendererClientPtr client_ptr; mojo::MediaRendererClientPtr client_ptr;
binding_.Bind(GetProxy(&client_ptr)); binding_.Bind(GetProxy(&client_ptr));
......
...@@ -26,8 +26,10 @@ namespace media { ...@@ -26,8 +26,10 @@ namespace media {
// Time interval to update media time. // Time interval to update media time.
const int kTimeUpdateIntervalMs = 50; const int kTimeUpdateIntervalMs = 50;
MojoRendererService::MojoRendererService() MojoRendererService::MojoRendererService(
: state_(STATE_UNINITIALIZED), mojo::InterfaceRequest<mojo::MediaRenderer> request)
: binding_(this, request.Pass()),
state_(STATE_UNINITIALIZED),
last_media_time_usec_(0), last_media_time_usec_(0),
weak_factory_(this) { weak_factory_(this) {
weak_this_ = weak_factory_.GetWeakPtr(); weak_this_ = weak_factory_.GetWeakPtr();
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
#include "media/base/media_export.h" #include "media/base/media_export.h"
#include "media/base/pipeline_status.h" #include "media/base/pipeline_status.h"
#include "media/mojo/interfaces/media_renderer.mojom.h" #include "media/mojo/interfaces/media_renderer.mojom.h"
#include "third_party/mojo/src/mojo/public/cpp/bindings/interface_impl.h" #include "third_party/mojo/src/mojo/public/cpp/bindings/strong_binding.h"
namespace mojo { namespace mojo {
class ApplicationConnection; class ApplicationConnection;
...@@ -32,9 +32,10 @@ class VideoRendererSink; ...@@ -32,9 +32,10 @@ class VideoRendererSink;
// A mojo::MediaRenderer implementation that uses media::AudioRenderer to // A mojo::MediaRenderer implementation that uses media::AudioRenderer to
// decode and render audio to a sink obtained from the ApplicationConnection. // decode and render audio to a sink obtained from the ApplicationConnection.
class MEDIA_EXPORT MojoRendererService class MEDIA_EXPORT MojoRendererService
: NON_EXPORTED_BASE(public mojo::InterfaceImpl<mojo::MediaRenderer>) { : NON_EXPORTED_BASE(mojo::MediaRenderer) {
public: public:
MojoRendererService(); explicit MojoRendererService(
mojo::InterfaceRequest<mojo::MediaRenderer> request);
~MojoRendererService() override; ~MojoRendererService() override;
// mojo::MediaRenderer implementation. // mojo::MediaRenderer implementation.
...@@ -87,6 +88,8 @@ class MEDIA_EXPORT MojoRendererService ...@@ -87,6 +88,8 @@ class MEDIA_EXPORT MojoRendererService
// Callback executed once Flush() completes. // Callback executed once Flush() completes.
void OnFlushCompleted(const mojo::Closure& callback); void OnFlushCompleted(const mojo::Closure& callback);
mojo::StrongBinding<mojo::MediaRenderer> binding_;
State state_; State state_;
scoped_refptr<AudioRendererSink> audio_renderer_sink_; scoped_refptr<AudioRendererSink> audio_renderer_sink_;
......
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