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