Commit 4da45e4b authored by Gyuyoung Kim's avatar Gyuyoung Kim Committed by Commit Bot

Migrate InterfaceFactory to new Mojo types further

This CL applies the new Mojo types to CreateMediaPlayerRenderer
and CreateFlingRenderer in InterfaceFactory interface.

  - Convert FooRequest to mojo::PendingReceiver.
  - Convert FooPtr to mojo::PendingRemote or mojo::Remote.
  - Replace MakeStrongBinding with MakeSelfOwnedReceiver.

Bug: 955171
Change-Id: I8dabcba8ebe6e53dd3a561d786c8bd5bf1edb257
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1880988
Commit-Queue: Gyuyoung Kim <gyuyoung@igalia.com>
Reviewed-by: default avatarThomas Guilbert <tguilbert@chromium.org>
Reviewed-by: default avatarKen Rockot <rockot@google.com>
Reviewed-by: default avatarSam McNally <sammc@chromium.org>
Cr-Commit-Position: refs/heads/master@{#709795}
parent 59e5d6ff
...@@ -38,14 +38,15 @@ MediaPlayerRenderer::MediaPlayerRenderer( ...@@ -38,14 +38,15 @@ MediaPlayerRenderer::MediaPlayerRenderer(
int process_id, int process_id,
int routing_id, int routing_id,
WebContents* web_contents, WebContents* web_contents,
RendererExtensionRequest renderer_extension_request, mojo::PendingReceiver<RendererExtension> renderer_extension_receiver,
ClientExtensionPtr client_extension_ptr) mojo::PendingRemote<ClientExtension> client_extension_remote)
: client_extension_(std::move(client_extension_ptr)), : client_extension_(std::move(client_extension_remote)),
render_process_id_(process_id), render_process_id_(process_id),
routing_id_(routing_id), routing_id_(routing_id),
has_error_(false), has_error_(false),
volume_(kDefaultVolume), volume_(kDefaultVolume),
renderer_extension_binding_(this, std::move(renderer_extension_request)) { renderer_extension_receiver_(this,
std::move(renderer_extension_receiver)) {
DCHECK_EQ(static_cast<RenderFrameHostImpl*>( DCHECK_EQ(static_cast<RenderFrameHostImpl*>(
RenderFrameHost::FromID(process_id, routing_id)) RenderFrameHost::FromID(process_id, routing_id))
->delegate() ->delegate()
......
...@@ -17,7 +17,10 @@ ...@@ -17,7 +17,10 @@
#include "media/base/renderer.h" #include "media/base/renderer.h"
#include "media/base/renderer_client.h" #include "media/base/renderer_client.h"
#include "media/mojo/mojom/renderer_extensions.mojom.h" #include "media/mojo/mojom/renderer_extensions.mojom.h"
#include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "url/gurl.h" #include "url/gurl.h"
namespace content { namespace content {
...@@ -36,20 +39,19 @@ class CONTENT_EXPORT MediaPlayerRenderer ...@@ -36,20 +39,19 @@ class CONTENT_EXPORT MediaPlayerRenderer
public media::mojom::MediaPlayerRendererExtension, public media::mojom::MediaPlayerRendererExtension,
public media::MediaPlayerBridge::Client { public media::MediaPlayerBridge::Client {
public: public:
using RendererExtensionRequest = using RendererExtension = media::mojom::MediaPlayerRendererExtension;
media::mojom::MediaPlayerRendererExtensionRequest; using ClientExtension = media::mojom::MediaPlayerRendererClientExtension;
using ClientExtensionPtr =
media::mojom::MediaPlayerRendererClientExtensionPtr;
// Permits embedders to handle custom urls. // Permits embedders to handle custom urls.
static void RegisterMediaUrlInterceptor( static void RegisterMediaUrlInterceptor(
media::MediaUrlInterceptor* media_url_interceptor); media::MediaUrlInterceptor* media_url_interceptor);
MediaPlayerRenderer(int process_id, MediaPlayerRenderer(
int routing_id, int process_id,
WebContents* web_contents, int routing_id,
RendererExtensionRequest renderer_extension_request, WebContents* web_contents,
ClientExtensionPtr client_extension_ptr); mojo::PendingReceiver<RendererExtension> renderer_extension_receiver,
mojo::PendingRemote<ClientExtension> client_extension_remote);
~MediaPlayerRenderer() override; ~MediaPlayerRenderer() override;
...@@ -105,7 +107,7 @@ class CONTENT_EXPORT MediaPlayerRenderer ...@@ -105,7 +107,7 @@ class CONTENT_EXPORT MediaPlayerRenderer
void UpdateVolume(); void UpdateVolume();
ClientExtensionPtr client_extension_; mojo::Remote<ClientExtension> client_extension_;
// Identifiers to find the RenderFrameHost that created |this|. // Identifiers to find the RenderFrameHost that created |this|.
// NOTE: We store these IDs rather than a RenderFrameHost* because we do not // NOTE: We store these IDs rather than a RenderFrameHost* because we do not
...@@ -133,7 +135,7 @@ class CONTENT_EXPORT MediaPlayerRenderer ...@@ -133,7 +135,7 @@ class CONTENT_EXPORT MediaPlayerRenderer
MediaPlayerRendererWebContentsObserver* web_contents_observer_; MediaPlayerRendererWebContentsObserver* web_contents_observer_;
float volume_; float volume_;
mojo::Binding<MediaPlayerRendererExtension> renderer_extension_binding_; mojo::Receiver<MediaPlayerRendererExtension> renderer_extension_receiver_;
// NOTE: Weak pointers must be invalidated before all other member variables. // NOTE: Weak pointers must be invalidated before all other member variables.
base::WeakPtrFactory<MediaPlayerRenderer> weak_factory_{this}; base::WeakPtrFactory<MediaPlayerRenderer> weak_factory_{this};
......
...@@ -18,7 +18,7 @@ namespace content { ...@@ -18,7 +18,7 @@ namespace content {
FlingingRenderer::FlingingRenderer( FlingingRenderer::FlingingRenderer(
std::unique_ptr<media::FlingingController> controller, std::unique_ptr<media::FlingingController> controller,
ClientExtensionPtr client_extension) mojo::PendingRemote<ClientExtension> client_extension)
: client_extension_(std::move(client_extension)), : client_extension_(std::move(client_extension)),
controller_(std::move(controller)) { controller_(std::move(controller)) {
controller_->AddMediaStatusObserver(this); controller_->AddMediaStatusObserver(this);
...@@ -32,7 +32,7 @@ FlingingRenderer::~FlingingRenderer() { ...@@ -32,7 +32,7 @@ FlingingRenderer::~FlingingRenderer() {
std::unique_ptr<FlingingRenderer> FlingingRenderer::Create( std::unique_ptr<FlingingRenderer> FlingingRenderer::Create(
RenderFrameHost* render_frame_host, RenderFrameHost* render_frame_host,
const std::string& presentation_id, const std::string& presentation_id,
ClientExtensionPtr client_extension) { mojo::PendingRemote<ClientExtension> client_extension) {
DVLOG(1) << __func__; DVLOG(1) << __func__;
ContentClient* content_client = GetContentClient(); ContentClient* content_client = GetContentClient();
......
...@@ -13,6 +13,8 @@ ...@@ -13,6 +13,8 @@
#include "media/base/renderer.h" #include "media/base/renderer.h"
#include "media/base/renderer_client.h" #include "media/base/renderer_client.h"
#include "media/mojo/mojom/renderer_extensions.mojom.h" #include "media/mojo/mojom/renderer_extensions.mojom.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "url/gurl.h" #include "url/gurl.h"
namespace content { namespace content {
...@@ -28,7 +30,7 @@ class RenderFrameHost; ...@@ -28,7 +30,7 @@ class RenderFrameHost;
class CONTENT_EXPORT FlingingRenderer : public media::Renderer, class CONTENT_EXPORT FlingingRenderer : public media::Renderer,
media::MediaStatusObserver { media::MediaStatusObserver {
public: public:
using ClientExtensionPtr = media::mojom::FlingingRendererClientExtensionPtr; using ClientExtension = media::mojom::FlingingRendererClientExtension;
// Helper method to create a FlingingRenderer from an already existing // Helper method to create a FlingingRenderer from an already existing
// presentation ID. // presentation ID.
...@@ -37,7 +39,7 @@ class CONTENT_EXPORT FlingingRenderer : public media::Renderer, ...@@ -37,7 +39,7 @@ class CONTENT_EXPORT FlingingRenderer : public media::Renderer,
static std::unique_ptr<FlingingRenderer> Create( static std::unique_ptr<FlingingRenderer> Create(
RenderFrameHost* render_frame_host, RenderFrameHost* render_frame_host,
const std::string& presentation_id, const std::string& presentation_id,
ClientExtensionPtr client_extension); mojo::PendingRemote<ClientExtension> client_extension);
~FlingingRenderer() override; ~FlingingRenderer() override;
...@@ -62,7 +64,7 @@ class CONTENT_EXPORT FlingingRenderer : public media::Renderer, ...@@ -62,7 +64,7 @@ class CONTENT_EXPORT FlingingRenderer : public media::Renderer,
explicit FlingingRenderer( explicit FlingingRenderer(
std::unique_ptr<media::FlingingController> controller, std::unique_ptr<media::FlingingController> controller,
ClientExtensionPtr client_extension); mojo::PendingRemote<ClientExtension> client_extension);
void SetExpectedPlayState(PlayState state); void SetExpectedPlayState(PlayState state);
...@@ -80,7 +82,7 @@ class CONTENT_EXPORT FlingingRenderer : public media::Renderer, ...@@ -80,7 +82,7 @@ class CONTENT_EXPORT FlingingRenderer : public media::Renderer,
media::RendererClient* client_; media::RendererClient* client_;
ClientExtensionPtr client_extension_; mojo::Remote<ClientExtension> client_extension_;
std::unique_ptr<media::FlingingController> controller_; std::unique_ptr<media::FlingingController> controller_;
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "base/version.h" #include "base/version.h"
#include "media/base/media_controller.h" #include "media/base/media_controller.h"
#include "media/base/mock_filters.h" #include "media/base/mock_filters.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
...@@ -54,7 +55,7 @@ class FlingingRendererTest : public testing::Test { ...@@ -54,7 +55,7 @@ class FlingingRendererTest : public testing::Test {
renderer_ = base::WrapUnique(new FlingingRenderer( renderer_ = base::WrapUnique(new FlingingRenderer(
std::unique_ptr<media::FlingingController>(flinging_controller_), std::unique_ptr<media::FlingingController>(flinging_controller_),
nullptr)); mojo::NullRemote()));
renderer_->Initialize(nullptr, &renderer_client_, base::DoNothing()); renderer_->Initialize(nullptr, &renderer_client_, base::DoNothing());
} }
......
...@@ -190,8 +190,9 @@ void MediaInterfaceProxy::CreateCastRenderer( ...@@ -190,8 +190,9 @@ void MediaInterfaceProxy::CreateCastRenderer(
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
void MediaInterfaceProxy::CreateFlingingRenderer( void MediaInterfaceProxy::CreateFlingingRenderer(
const std::string& presentation_id, const std::string& presentation_id,
media::mojom::FlingingRendererClientExtensionPtr client_extension, mojo::PendingRemote<media::mojom::FlingingRendererClientExtension>
media::mojom::RendererRequest request) { client_extension,
mojo::PendingReceiver<media::mojom::Renderer> receiver) {
DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(thread_checker_.CalledOnValidThread());
std::unique_ptr<FlingingRenderer> flinging_renderer = std::unique_ptr<FlingingRenderer> flinging_renderer =
...@@ -202,14 +203,15 @@ void MediaInterfaceProxy::CreateFlingingRenderer( ...@@ -202,14 +203,15 @@ void MediaInterfaceProxy::CreateFlingingRenderer(
return; return;
media::MojoRendererService::Create(nullptr, std::move(flinging_renderer), media::MojoRendererService::Create(nullptr, std::move(flinging_renderer),
std::move(request)); std::move(receiver));
} }
void MediaInterfaceProxy::CreateMediaPlayerRenderer( void MediaInterfaceProxy::CreateMediaPlayerRenderer(
media::mojom::MediaPlayerRendererClientExtensionPtr client_extension_ptr, mojo::PendingRemote<media::mojom::MediaPlayerRendererClientExtension>
media::mojom::RendererRequest request, client_extension_remote,
media::mojom::MediaPlayerRendererExtensionRequest mojo::PendingReceiver<media::mojom::Renderer> receiver,
renderer_extension_request) { mojo::PendingReceiver<media::mojom::MediaPlayerRendererExtension>
renderer_extension_receiver) {
DCHECK(thread_checker_.CalledOnValidThread()); DCHECK(thread_checker_.CalledOnValidThread());
media::MojoRendererService::Create( media::MojoRendererService::Create(
...@@ -220,9 +222,9 @@ void MediaInterfaceProxy::CreateMediaPlayerRenderer( ...@@ -220,9 +222,9 @@ void MediaInterfaceProxy::CreateMediaPlayerRenderer(
static_cast<RenderFrameHostImpl*>(render_frame_host_) static_cast<RenderFrameHostImpl*>(render_frame_host_)
->delegate() ->delegate()
->GetAsWebContents(), ->GetAsWebContents(),
std::move(renderer_extension_request), std::move(renderer_extension_receiver),
std::move(client_extension_ptr)), std::move(client_extension_remote)),
std::move(request)); std::move(receiver));
} }
#endif #endif
......
...@@ -65,12 +65,14 @@ class MediaInterfaceProxy : public media::mojom::InterfaceFactory { ...@@ -65,12 +65,14 @@ class MediaInterfaceProxy : public media::mojom::InterfaceFactory {
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
void CreateFlingingRenderer( void CreateFlingingRenderer(
const std::string& presentation_id, const std::string& presentation_id,
media::mojom::FlingingRendererClientExtensionPtr client_extension, mojo::PendingRemote<media::mojom::FlingingRendererClientExtension>
media::mojom::RendererRequest request) final; client_extension,
mojo::PendingReceiver<media::mojom::Renderer> receiver) final;
void CreateMediaPlayerRenderer( void CreateMediaPlayerRenderer(
media::mojom::MediaPlayerRendererClientExtensionPtr client_extension_ptr, mojo::PendingRemote<media::mojom::MediaPlayerRendererClientExtension>
media::mojom::RendererRequest request, client_extension_remote,
media::mojom::MediaPlayerRendererExtensionRequest mojo::PendingReceiver<media::mojom::Renderer> receiver,
mojo::PendingReceiver<media::mojom::MediaPlayerRendererExtension>
renderer_extension_request) final; renderer_extension_request) final;
#endif // defined(OS_ANDROID) #endif // defined(OS_ANDROID)
void CreateCdm(const std::string& key_system, void CreateCdm(const std::string& key_system,
......
...@@ -55,14 +55,16 @@ void VideoDecoderProxy::CreateCastRenderer( ...@@ -55,14 +55,16 @@ void VideoDecoderProxy::CreateCastRenderer(
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
void VideoDecoderProxy::CreateFlingingRenderer( void VideoDecoderProxy::CreateFlingingRenderer(
const std::string& audio_device_id, const std::string& audio_device_id,
media::mojom::FlingingRendererClientExtensionPtr client_extenion, mojo::PendingRemote<media::mojom::FlingingRendererClientExtension>
media::mojom::RendererRequest request) {} client_extenion,
mojo::PendingReceiver<media::mojom::Renderer> receiver) {}
void VideoDecoderProxy::CreateMediaPlayerRenderer( void VideoDecoderProxy::CreateMediaPlayerRenderer(
media::mojom::MediaPlayerRendererClientExtensionPtr client_extension_ptr, mojo::PendingRemote<media::mojom::MediaPlayerRendererClientExtension>
media::mojom::RendererRequest request, client_extension_remote,
media::mojom::MediaPlayerRendererExtensionRequest mojo::PendingReceiver<media::mojom::Renderer> receiver,
renderer_extension_request) {} mojo::PendingReceiver<media::mojom::MediaPlayerRendererExtension>
renderer_extension_receiver) {}
#endif // defined(OS_ANDROID) #endif // defined(OS_ANDROID)
void VideoDecoderProxy::CreateCdm( void VideoDecoderProxy::CreateCdm(
......
...@@ -46,14 +46,16 @@ class CONTENT_EXPORT VideoDecoderProxy : public media::mojom::InterfaceFactory { ...@@ -46,14 +46,16 @@ class CONTENT_EXPORT VideoDecoderProxy : public media::mojom::InterfaceFactory {
#endif #endif
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
void CreateMediaPlayerRenderer( void CreateMediaPlayerRenderer(
media::mojom::MediaPlayerRendererClientExtensionPtr client_extension_ptr, mojo::PendingRemote<media::mojom::MediaPlayerRendererClientExtension>
media::mojom::RendererRequest request, client_extension_remote,
media::mojom::MediaPlayerRendererExtensionRequest mojo::PendingReceiver<media::mojom::Renderer> receiver,
renderer_extension_request) final; mojo::PendingReceiver<media::mojom::MediaPlayerRendererExtension>
renderer_extension_receiver) final;
void CreateFlingingRenderer( void CreateFlingingRenderer(
const std::string& presentation_id, const std::string& presentation_id,
media::mojom::FlingingRendererClientExtensionPtr client_extension, mojo::PendingRemote<media::mojom::FlingingRendererClientExtension>
media::mojom::RendererRequest request) final; client_extension,
mojo::PendingReceiver<media::mojom::Renderer> receiver) final;
#endif // defined(OS_ANDROID) #endif // defined(OS_ANDROID)
void CreateCdm(const std::string& key_system, void CreateCdm(const std::string& key_system,
media::mojom::ContentDecryptionModuleRequest request) final; media::mojom::ContentDecryptionModuleRequest request) final;
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "media/mojo/clients/mojo_renderer.h" #include "media/mojo/clients/mojo_renderer.h"
#include "media/mojo/clients/mojo_renderer_factory.h" #include "media/mojo/clients/mojo_renderer_factory.h"
#include "media/mojo/mojom/renderer_extensions.mojom.h" #include "media/mojo/mojom/renderer_extensions.mojom.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
namespace content { namespace content {
...@@ -36,16 +37,18 @@ std::unique_ptr<media::Renderer> FlingingRendererClientFactory::CreateRenderer( ...@@ -36,16 +37,18 @@ std::unique_ptr<media::Renderer> FlingingRendererClientFactory::CreateRenderer(
// Used to send messages from the FlingingRenderer (Browser process), // Used to send messages from the FlingingRenderer (Browser process),
// to the FlingingRendererClient (Renderer process). The // to the FlingingRendererClient (Renderer process). The
// |client_extension_request| will be bound in FlingingRendererClient. // |client_extension_receiver| will be bound in FlingingRendererClient.
media::mojom::FlingingRendererClientExtensionPtr client_extension_ptr; mojo::PendingRemote<media::mojom::FlingingRendererClientExtension>
auto client_extension_request = mojo::MakeRequest(&client_extension_ptr); client_extension_remote;
auto client_extension_receiver =
client_extension_remote.InitWithNewPipeAndPassReceiver();
auto mojo_renderer = mojo_flinging_factory_->CreateFlingingRenderer( auto mojo_renderer = mojo_flinging_factory_->CreateFlingingRenderer(
GetActivePresentationId(), std::move(client_extension_ptr), GetActivePresentationId(), std::move(client_extension_remote),
media_task_runner, video_renderer_sink); media_task_runner, video_renderer_sink);
return std::make_unique<FlingingRendererClient>( return std::make_unique<FlingingRendererClient>(
std::move(client_extension_request), media_task_runner, std::move(client_extension_receiver), media_task_runner,
std::move(mojo_renderer), remote_play_state_change_cb_); std::move(mojo_renderer), remote_play_state_change_cb_);
} }
......
...@@ -11,8 +11,8 @@ ...@@ -11,8 +11,8 @@
namespace content { namespace content {
MediaPlayerRendererClient::MediaPlayerRendererClient( MediaPlayerRendererClient::MediaPlayerRendererClient(
RendererExtentionPtr renderer_extension_ptr, mojo::PendingRemote<RendererExtention> renderer_extension_remote,
ClientExtentionRequest client_extension_request, mojo::PendingReceiver<ClientExtention> client_extension_receiver,
scoped_refptr<base::SingleThreadTaskRunner> media_task_runner, scoped_refptr<base::SingleThreadTaskRunner> media_task_runner,
scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner, scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner,
std::unique_ptr<media::MojoRenderer> mojo_renderer, std::unique_ptr<media::MojoRenderer> mojo_renderer,
...@@ -24,11 +24,10 @@ MediaPlayerRendererClient::MediaPlayerRendererClient( ...@@ -24,11 +24,10 @@ MediaPlayerRendererClient::MediaPlayerRendererClient(
sink_(sink), sink_(sink),
media_task_runner_(std::move(media_task_runner)), media_task_runner_(std::move(media_task_runner)),
compositor_task_runner_(std::move(compositor_task_runner)), compositor_task_runner_(std::move(compositor_task_runner)),
delayed_bind_client_extension_request_( delayed_bind_client_extension_receiver_(
std::move(client_extension_request)), std::move(client_extension_receiver)),
delayed_bind_renderer_extention_ptr_info_( delayed_bind_renderer_extention_remote_(
renderer_extension_ptr.PassInterface()), std::move(renderer_extension_remote)) {}
client_extension_binding_(this) {}
MediaPlayerRendererClient::~MediaPlayerRendererClient() { MediaPlayerRendererClient::~MediaPlayerRendererClient() {
// Clearing the STW's callback into |this| must happen first. Otherwise, the // Clearing the STW's callback into |this| must happen first. Otherwise, the
...@@ -45,12 +44,12 @@ void MediaPlayerRendererClient::Initialize( ...@@ -45,12 +44,12 @@ void MediaPlayerRendererClient::Initialize(
DCHECK(media_task_runner_->BelongsToCurrentThread()); DCHECK(media_task_runner_->BelongsToCurrentThread());
DCHECK(!init_cb_); DCHECK(!init_cb_);
// Consume and bind the delayed Request and PtrInfo now that we are on // Consume and bind the delayed PendingRemote and PendingReceiver now that we
// |media_task_runner_|. // are on |media_task_runner_|.
renderer_extension_ptr_.Bind( renderer_extension_remote_.Bind(
std::move(delayed_bind_renderer_extention_ptr_info_), media_task_runner_); std::move(delayed_bind_renderer_extention_remote_), media_task_runner_);
client_extension_binding_.Bind( client_extension_receiver_.Bind(
std::move(delayed_bind_client_extension_request_), media_task_runner_); std::move(delayed_bind_client_extension_receiver_), media_task_runner_);
media_resource_ = media_resource; media_resource_ = media_resource;
client_ = client; client_ = client;
...@@ -112,7 +111,7 @@ void MediaPlayerRendererClient::OnRemoteRendererInitialized( ...@@ -112,7 +111,7 @@ void MediaPlayerRendererClient::OnRemoteRendererInitialized(
if (status == media::PIPELINE_OK) { if (status == media::PIPELINE_OK) {
// TODO(tguilbert): Measure and smooth out the initialization's ordering to // TODO(tguilbert): Measure and smooth out the initialization's ordering to
// have the lowest total initialization time. // have the lowest total initialization time.
renderer_extension_ptr_->InitiateScopedSurfaceRequest( renderer_extension_remote_->InitiateScopedSurfaceRequest(
base::Bind(&MediaPlayerRendererClient::OnScopedSurfaceRequested, base::Bind(&MediaPlayerRendererClient::OnScopedSurfaceRequested,
weak_factory_.GetWeakPtr())); weak_factory_.GetWeakPtr()));
......
...@@ -20,7 +20,10 @@ ...@@ -20,7 +20,10 @@
#include "media/mojo/clients/mojo_renderer.h" #include "media/mojo/clients/mojo_renderer.h"
#include "media/mojo/clients/mojo_renderer_wrapper.h" #include "media/mojo/clients/mojo_renderer_wrapper.h"
#include "media/mojo/mojom/renderer_extensions.mojom.h" #include "media/mojo/mojom/renderer_extensions.mojom.h"
#include "mojo/public/cpp/bindings/binding.h" #include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h"
namespace content { namespace content {
...@@ -38,15 +41,12 @@ class CONTENT_EXPORT MediaPlayerRendererClient ...@@ -38,15 +41,12 @@ class CONTENT_EXPORT MediaPlayerRendererClient
: public media::mojom::MediaPlayerRendererClientExtension, : public media::mojom::MediaPlayerRendererClientExtension,
public media::MojoRendererWrapper { public media::MojoRendererWrapper {
public: public:
using RendererExtentionPtr = media::mojom::MediaPlayerRendererExtensionPtr; using RendererExtention = media::mojom::MediaPlayerRendererExtension;
using RendererExtentionPtrInfo = using ClientExtention = media::mojom::MediaPlayerRendererClientExtension;
media::mojom::MediaPlayerRendererExtensionPtrInfo;
using ClientExtentionRequest =
media::mojom::MediaPlayerRendererClientExtensionRequest;
MediaPlayerRendererClient( MediaPlayerRendererClient(
RendererExtentionPtr renderer_extension_ptr, mojo::PendingRemote<RendererExtention> renderer_extension_remote,
ClientExtentionRequest client_extension_request, mojo::PendingReceiver<ClientExtention> client_extension_receiver,
scoped_refptr<base::SingleThreadTaskRunner> media_task_runner, scoped_refptr<base::SingleThreadTaskRunner> media_task_runner,
scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner, scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner,
std::unique_ptr<media::MojoRenderer> mojo_renderer, std::unique_ptr<media::MojoRenderer> mojo_renderer,
...@@ -104,14 +104,17 @@ class CONTENT_EXPORT MediaPlayerRendererClient ...@@ -104,14 +104,17 @@ class CONTENT_EXPORT MediaPlayerRendererClient
// |renderer_extension_ptr_| and |client_extension_binding_|, until we are on // |renderer_extension_ptr_| and |client_extension_binding_|, until we are on
// |media_task_runner_|. // |media_task_runner_|.
// Both are set in the constructor, and consumed in Initialize(). // Both are set in the constructor, and consumed in Initialize().
ClientExtentionRequest delayed_bind_client_extension_request_; mojo::PendingReceiver<ClientExtention>
RendererExtentionPtrInfo delayed_bind_renderer_extention_ptr_info_; delayed_bind_client_extension_receiver_;
mojo::PendingRemote<RendererExtention>
delayed_bind_renderer_extention_remote_;
// Used to call methods on the MediaPlayerRenderer in the browser process. // Used to call methods on the MediaPlayerRenderer in the browser process.
RendererExtentionPtr renderer_extension_ptr_; mojo::Remote<RendererExtention> renderer_extension_remote_;
// Used to receive events from MediaPlayerRenderer in the browser process. // Used to receive events from MediaPlayerRenderer in the browser process.
mojo::Binding<MediaPlayerRendererClientExtension> client_extension_binding_; mojo::Receiver<MediaPlayerRendererClientExtension> client_extension_receiver_{
this};
// NOTE: Weak pointers must be invalidated before all other member variables. // NOTE: Weak pointers must be invalidated before all other member variables.
base::WeakPtrFactory<MediaPlayerRendererClient> weak_factory_{this}; base::WeakPtrFactory<MediaPlayerRendererClient> weak_factory_{this};
......
...@@ -32,27 +32,32 @@ MediaPlayerRendererClientFactory::CreateRenderer( ...@@ -32,27 +32,32 @@ MediaPlayerRendererClientFactory::CreateRenderer(
// Used to send messages from the MPRC (Renderer process), to the MPR (Browser // Used to send messages from the MPRC (Renderer process), to the MPR (Browser
// process). The |renderer_extension_request| will be bound in // process). The |renderer_extension_request| will be bound in
// MediaPlayerRenderer. // MediaPlayerRenderer.
media::mojom::MediaPlayerRendererExtensionPtr renderer_extension_ptr; mojo::PendingRemote<media::mojom::MediaPlayerRendererExtension>
auto renderer_extension_request = mojo::MakeRequest(&renderer_extension_ptr); renderer_extension_remote;
auto renderer_extension_receiver =
renderer_extension_remote.InitWithNewPipeAndPassReceiver();
// Used to send messages from the MPR (Browser process), to the MPRC (Renderer // Used to send messages from the MPR (Browser process), to the MPRC (Renderer
// process). The |client_extension_request| will be bound in // process). The |client_extension_request| will be bound in
// MediaPlayerRendererClient. // MediaPlayerRendererClient.
media::mojom::MediaPlayerRendererClientExtensionPtr client_extension_ptr; mojo::PendingRemote<media::mojom::MediaPlayerRendererClientExtension>
auto client_extension_request = mojo::MakeRequest(&client_extension_ptr); client_extension_remote;
auto client_extension_receiver =
client_extension_remote.InitWithNewPipeAndPassReceiver();
std::unique_ptr<media::MojoRenderer> mojo_renderer = std::unique_ptr<media::MojoRenderer> mojo_renderer =
mojo_renderer_factory_->CreateMediaPlayerRenderer( mojo_renderer_factory_->CreateMediaPlayerRenderer(
std::move(renderer_extension_request), std::move(renderer_extension_receiver),
std::move(client_extension_ptr), media_task_runner, std::move(client_extension_remote), media_task_runner,
video_renderer_sink); video_renderer_sink);
media::ScopedStreamTextureWrapper stream_texture_wrapper = media::ScopedStreamTextureWrapper stream_texture_wrapper =
get_stream_texture_wrapper_cb_.Run(); get_stream_texture_wrapper_cb_.Run();
return std::make_unique<MediaPlayerRendererClient>( return std::make_unique<MediaPlayerRendererClient>(
std::move(renderer_extension_ptr), std::move(client_extension_request), std::move(renderer_extension_remote),
media_task_runner, compositor_task_runner_, std::move(mojo_renderer), std::move(client_extension_receiver), media_task_runner,
compositor_task_runner_, std::move(mojo_renderer),
std::move(stream_texture_wrapper), video_renderer_sink); std::move(stream_texture_wrapper), video_renderer_sink);
} }
......
...@@ -88,42 +88,44 @@ void MediaInterfaceFactory::CreateCastRenderer( ...@@ -88,42 +88,44 @@ void MediaInterfaceFactory::CreateCastRenderer(
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
void MediaInterfaceFactory::CreateMediaPlayerRenderer( void MediaInterfaceFactory::CreateMediaPlayerRenderer(
media::mojom::MediaPlayerRendererClientExtensionPtr client_extension_ptr, mojo::PendingRemote<media::mojom::MediaPlayerRendererClientExtension>
media::mojom::RendererRequest request, client_extension_remote,
media::mojom::MediaPlayerRendererExtensionRequest mojo::PendingReceiver<media::mojom::Renderer> receiver,
renderer_extension_request) { mojo::PendingReceiver<media::mojom::MediaPlayerRendererExtension>
renderer_extension_receiver) {
if (!task_runner_->BelongsToCurrentThread()) { if (!task_runner_->BelongsToCurrentThread()) {
task_runner_->PostTask( task_runner_->PostTask(
FROM_HERE, FROM_HERE,
base::BindOnce(&MediaInterfaceFactory::CreateMediaPlayerRenderer, base::BindOnce(&MediaInterfaceFactory::CreateMediaPlayerRenderer,
weak_this_, std::move(client_extension_ptr), weak_this_, std::move(client_extension_remote),
std::move(request), std::move(receiver),
std::move(renderer_extension_request))); std::move(renderer_extension_receiver)));
return; return;
} }
DVLOG(1) << __func__; DVLOG(1) << __func__;
GetMediaInterfaceFactory()->CreateMediaPlayerRenderer( GetMediaInterfaceFactory()->CreateMediaPlayerRenderer(
std::move(client_extension_ptr), std::move(request), std::move(client_extension_remote), std::move(receiver),
std::move(renderer_extension_request)); std::move(renderer_extension_receiver));
} }
void MediaInterfaceFactory::CreateFlingingRenderer( void MediaInterfaceFactory::CreateFlingingRenderer(
const std::string& presentation_id, const std::string& presentation_id,
media::mojom::FlingingRendererClientExtensionPtr client_extension, mojo::PendingRemote<media::mojom::FlingingRendererClientExtension>
media::mojom::RendererRequest request) { client_extension,
mojo::PendingReceiver<media::mojom::Renderer> receiver) {
if (!task_runner_->BelongsToCurrentThread()) { if (!task_runner_->BelongsToCurrentThread()) {
task_runner_->PostTask( task_runner_->PostTask(
FROM_HERE, FROM_HERE,
base::BindOnce(&MediaInterfaceFactory::CreateFlingingRenderer, base::BindOnce(&MediaInterfaceFactory::CreateFlingingRenderer,
weak_this_, presentation_id, std::move(client_extension), weak_this_, presentation_id, std::move(client_extension),
std::move(request))); std::move(receiver)));
return; return;
} }
DVLOG(1) << __func__; DVLOG(1) << __func__;
GetMediaInterfaceFactory()->CreateFlingingRenderer( GetMediaInterfaceFactory()->CreateFlingingRenderer(
presentation_id, std::move(client_extension), std::move(request)); presentation_id, std::move(client_extension), std::move(receiver));
} }
#endif // defined(OS_ANDROID) #endif // defined(OS_ANDROID)
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "media/mojo/buildflags.h" #include "media/mojo/buildflags.h"
#include "media/mojo/mojom/interface_factory.mojom.h" #include "media/mojo/mojom/interface_factory.mojom.h"
#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "url/gurl.h" #include "url/gurl.h"
namespace service_manager { namespace service_manager {
...@@ -48,13 +49,15 @@ class CONTENT_EXPORT MediaInterfaceFactory ...@@ -48,13 +49,15 @@ class CONTENT_EXPORT MediaInterfaceFactory
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
void CreateFlingingRenderer( void CreateFlingingRenderer(
const std::string& presentation_id, const std::string& presentation_id,
media::mojom::FlingingRendererClientExtensionPtr client_extension, mojo::PendingRemote<media::mojom::FlingingRendererClientExtension>
media::mojom::RendererRequest request) final; client_extension,
mojo::PendingReceiver<media::mojom::Renderer> receiver) final;
void CreateMediaPlayerRenderer( void CreateMediaPlayerRenderer(
media::mojom::MediaPlayerRendererClientExtensionPtr client_extension_ptr, mojo::PendingRemote<media::mojom::MediaPlayerRendererClientExtension>
media::mojom::RendererRequest request, client_extension_remote,
media::mojom::MediaPlayerRendererExtensionRequest mojo::PendingReceiver<media::mojom::Renderer> receiver,
renderer_extension_request) final; mojo::PendingReceiver<media::mojom::MediaPlayerRendererExtension>
renderer_extension_receiver) final;
#endif // defined(OS_ANDROID) #endif // defined(OS_ANDROID)
void CreateCdm(const std::string& key_system, void CreateCdm(const std::string& key_system,
media::mojom::ContentDecryptionModuleRequest request) final; media::mojom::ContentDecryptionModuleRequest request) final;
......
...@@ -24,11 +24,11 @@ MojoRenderer::MojoRenderer( ...@@ -24,11 +24,11 @@ MojoRenderer::MojoRenderer(
const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
std::unique_ptr<VideoOverlayFactory> video_overlay_factory, std::unique_ptr<VideoOverlayFactory> video_overlay_factory,
VideoRendererSink* video_renderer_sink, VideoRendererSink* video_renderer_sink,
mojom::RendererPtr remote_renderer) mojo::PendingRemote<mojom::Renderer> remote_renderer)
: task_runner_(task_runner), : task_runner_(task_runner),
video_overlay_factory_(std::move(video_overlay_factory)), video_overlay_factory_(std::move(video_overlay_factory)),
video_renderer_sink_(video_renderer_sink), video_renderer_sink_(video_renderer_sink),
remote_renderer_info_(remote_renderer.PassInterface()), remote_renderer_pending_remote_(std::move(remote_renderer)),
client_binding_(this), client_binding_(this),
media_time_interpolator_(base::DefaultTickClock::GetInstance()) { media_time_interpolator_(base::DefaultTickClock::GetInstance()) {
DVLOG(1) << __func__; DVLOG(1) << __func__;
...@@ -336,14 +336,14 @@ void MojoRenderer::BindRemoteRendererIfNeeded() { ...@@ -336,14 +336,14 @@ void MojoRenderer::BindRemoteRendererIfNeeded() {
if (remote_renderer_.is_bound()) if (remote_renderer_.is_bound())
return; return;
// Bind |remote_renderer_| to the |task_runner_|. // Bind |remote_renderer_| to the |remote_renderer_pending_remote_|.
remote_renderer_.Bind(std::move(remote_renderer_info_)); remote_renderer_.Bind(std::move(remote_renderer_pending_remote_));
// Otherwise, set an error handler to catch the connection error. // Otherwise, set an error handler to catch the connection error.
// Using base::Unretained(this) is safe because |this| owns // Using base::Unretained(this) is safe because |this| owns
// |remote_renderer_|, and the error handler can't be invoked once // |remote_renderer_|, and the error handler can't be invoked once
// |remote_renderer_| is destroyed. // |remote_renderer_| is destroyed.
remote_renderer_.set_connection_error_handler( remote_renderer_.set_disconnect_handler(
base::Bind(&MojoRenderer::OnConnectionError, base::Unretained(this))); base::Bind(&MojoRenderer::OnConnectionError, base::Unretained(this)));
} }
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
#include "media/base/time_delta_interpolator.h" #include "media/base/time_delta_interpolator.h"
#include "media/mojo/mojom/renderer.mojom.h" #include "media/mojo/mojom/renderer.mojom.h"
#include "mojo/public/cpp/bindings/associated_binding.h" #include "mojo/public/cpp/bindings/associated_binding.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/remote.h"
namespace base { namespace base {
class SingleThreadTaskRunner; class SingleThreadTaskRunner;
...@@ -46,7 +48,7 @@ class MojoRenderer : public Renderer, public mojom::RendererClient { ...@@ -46,7 +48,7 @@ class MojoRenderer : public Renderer, public mojom::RendererClient {
MojoRenderer(const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, MojoRenderer(const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
std::unique_ptr<VideoOverlayFactory> video_overlay_factory, std::unique_ptr<VideoOverlayFactory> video_overlay_factory,
VideoRendererSink* video_renderer_sink, VideoRendererSink* video_renderer_sink,
mojom::RendererPtr remote_renderer); mojo::PendingRemote<mojom::Renderer> remote_renderer);
~MojoRenderer() override; ~MojoRenderer() override;
// Renderer implementation. // Renderer implementation.
...@@ -133,12 +135,13 @@ class MojoRenderer : public Renderer, public mojom::RendererClient { ...@@ -133,12 +135,13 @@ class MojoRenderer : public Renderer, public mojom::RendererClient {
std::vector<std::unique_ptr<MojoDemuxerStreamImpl>> streams_; std::vector<std::unique_ptr<MojoDemuxerStreamImpl>> streams_;
// This class is constructed on one thread and used exclusively on another // This class is constructed on one thread and used exclusively on another
// thread. This member is used to safely pass the RendererPtr from one thread // thread. This member is used to safely pass the PendingRemote from one
// to another. It is set in the constructor and is consumed in Initialize(). // thread to another. It is set in the constructor and is consumed in
mojom::RendererPtrInfo remote_renderer_info_; // Initialize().
mojo::PendingRemote<mojom::Renderer> remote_renderer_pending_remote_;
// Remote Renderer, bound to |task_runner_| during Initialize(). // Remote Renderer, bound to |task_runner_| during Initialize().
mojom::RendererPtr remote_renderer_; mojo::Remote<mojom::Renderer> remote_renderer_;
// Binding for RendererClient, bound to the |task_runner_|. // Binding for RendererClient, bound to the |task_runner_|.
mojo::AssociatedBinding<RendererClient> client_binding_; mojo::AssociatedBinding<RendererClient> client_binding_;
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "media/renderers/decrypting_renderer.h" #include "media/renderers/decrypting_renderer.h"
#include "media/renderers/video_overlay_factory.h" #include "media/renderers/video_overlay_factory.h"
#include "mojo/public/cpp/bindings/interface_request.h" #include "mojo/public/cpp/bindings/interface_request.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "services/service_manager/public/cpp/connect.h" #include "services/service_manager/public/cpp/connect.h"
#include "services/service_manager/public/cpp/interface_provider.h" #include "services/service_manager/public/cpp/interface_provider.h"
...@@ -37,13 +38,13 @@ std::unique_ptr<Renderer> MojoRendererFactory::CreateRenderer( ...@@ -37,13 +38,13 @@ std::unique_ptr<Renderer> MojoRendererFactory::CreateRenderer(
auto overlay_factory = std::make_unique<VideoOverlayFactory>(); auto overlay_factory = std::make_unique<VideoOverlayFactory>();
mojom::RendererPtr renderer_ptr; mojo::PendingRemote<mojom::Renderer> renderer_remote;
interface_factory_->CreateDefaultRenderer(std::string(), interface_factory_->CreateDefaultRenderer(
mojo::MakeRequest(&renderer_ptr)); std::string(), renderer_remote.InitWithNewPipeAndPassReceiver());
return std::make_unique<MojoRenderer>( return std::make_unique<MojoRenderer>(
media_task_runner, std::move(overlay_factory), video_renderer_sink, media_task_runner, std::move(overlay_factory), video_renderer_sink,
std::move(renderer_ptr)); std::move(renderer_remote));
} }
#if BUILDFLAG(ENABLE_CAST_RENDERER) #if BUILDFLAG(ENABLE_CAST_RENDERER)
...@@ -54,47 +55,54 @@ std::unique_ptr<MojoRenderer> MojoRendererFactory::CreateCastRenderer( ...@@ -54,47 +55,54 @@ std::unique_ptr<MojoRenderer> MojoRendererFactory::CreateCastRenderer(
auto overlay_factory = std::make_unique<VideoOverlayFactory>(); auto overlay_factory = std::make_unique<VideoOverlayFactory>();
mojom::RendererPtr renderer_ptr; mojo::PendingRemote<mojom::Renderer> renderer_remote;
interface_factory_->CreateCastRenderer(overlay_factory->overlay_plane_id(), interface_factory_->CreateCastRenderer(
mojo::MakeRequest(&renderer_ptr)); overlay_factory->overlay_plane_id(),
renderer_remote.InitWithNewPipeAndPassReceiver());
return std::make_unique<MojoRenderer>( return std::make_unique<MojoRenderer>(
media_task_runner, std::move(overlay_factory), video_renderer_sink, media_task_runner, std::move(overlay_factory), video_renderer_sink,
std::move(renderer_ptr)); std::move(renderer_remote));
} }
#endif // BUILDFLAG(ENABLE_CAST_RENDERER) #endif // BUILDFLAG(ENABLE_CAST_RENDERER)
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
std::unique_ptr<MojoRenderer> MojoRendererFactory::CreateFlingingRenderer( std::unique_ptr<MojoRenderer> MojoRendererFactory::CreateFlingingRenderer(
const std::string& presentation_id, const std::string& presentation_id,
mojom::FlingingRendererClientExtensionPtr client_extension_ptr, mojo::PendingRemote<mojom::FlingingRendererClientExtension>
client_extension_remote,
const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
VideoRendererSink* video_renderer_sink) { VideoRendererSink* video_renderer_sink) {
DCHECK(interface_factory_); DCHECK(interface_factory_);
mojom::RendererPtr renderer_ptr; mojo::PendingRemote<mojom::Renderer> renderer_remote;
interface_factory_->CreateFlingingRenderer(presentation_id, interface_factory_->CreateFlingingRenderer(
std::move(client_extension_ptr), presentation_id, std::move(client_extension_remote),
mojo::MakeRequest(&renderer_ptr)); renderer_remote.InitWithNewPipeAndPassReceiver());
return std::make_unique<MojoRenderer>( return std::make_unique<MojoRenderer>(media_task_runner, nullptr,
media_task_runner, nullptr, video_renderer_sink, std::move(renderer_ptr)); video_renderer_sink,
std::move(renderer_remote));
} }
std::unique_ptr<MojoRenderer> MojoRendererFactory::CreateMediaPlayerRenderer( std::unique_ptr<MojoRenderer> MojoRendererFactory::CreateMediaPlayerRenderer(
mojom::MediaPlayerRendererExtensionRequest renderer_extension_request, mojo::PendingReceiver<mojom::MediaPlayerRendererExtension>
mojom::MediaPlayerRendererClientExtensionPtr client_extension_ptr, renderer_extension_receiver,
mojo::PendingRemote<mojom::MediaPlayerRendererClientExtension>
client_extension_remote,
const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
VideoRendererSink* video_renderer_sink) { VideoRendererSink* video_renderer_sink) {
DCHECK(interface_factory_); DCHECK(interface_factory_);
mojom::RendererPtr renderer_ptr; mojo::PendingRemote<mojom::Renderer> renderer_remote;
interface_factory_->CreateMediaPlayerRenderer( interface_factory_->CreateMediaPlayerRenderer(
std::move(client_extension_ptr), mojo::MakeRequest(&renderer_ptr), std::move(client_extension_remote),
std::move(renderer_extension_request)); renderer_remote.InitWithNewPipeAndPassReceiver(),
std::move(renderer_extension_receiver));
return std::make_unique<MojoRenderer>( return std::make_unique<MojoRenderer>(media_task_runner, nullptr,
media_task_runner, nullptr, video_renderer_sink, std::move(renderer_ptr)); video_renderer_sink,
std::move(renderer_remote));
} }
#endif // defined(OS_ANDROID) #endif // defined(OS_ANDROID)
......
...@@ -14,6 +14,8 @@ ...@@ -14,6 +14,8 @@
#include "media/mojo/buildflags.h" #include "media/mojo/buildflags.h"
#include "media/mojo/mojom/interface_factory.mojom.h" #include "media/mojo/mojom/interface_factory.mojom.h"
#include "media/mojo/mojom/renderer.mojom.h" #include "media/mojo/mojom/renderer.mojom.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
namespace service_manager { namespace service_manager {
class InterfaceProvider; class InterfaceProvider;
...@@ -57,13 +59,16 @@ class MojoRendererFactory : public RendererFactory { ...@@ -57,13 +59,16 @@ class MojoRendererFactory : public RendererFactory {
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
std::unique_ptr<MojoRenderer> CreateFlingingRenderer( std::unique_ptr<MojoRenderer> CreateFlingingRenderer(
const std::string& presentation_id, const std::string& presentation_id,
mojom::FlingingRendererClientExtensionPtr client_extenion_ptr, mojo::PendingRemote<mojom::FlingingRendererClientExtension>
client_extenion_ptr,
const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
VideoRendererSink* video_renderer_sink); VideoRendererSink* video_renderer_sink);
std::unique_ptr<MojoRenderer> CreateMediaPlayerRenderer( std::unique_ptr<MojoRenderer> CreateMediaPlayerRenderer(
mojom::MediaPlayerRendererExtensionRequest renderer_extension_request, mojo::PendingReceiver<mojom::MediaPlayerRendererExtension>
mojom::MediaPlayerRendererClientExtensionPtr client_extension_ptr, renderer_extension_receiver,
mojo::PendingRemote<mojom::MediaPlayerRendererClientExtension>
client_extension_remote,
const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner,
VideoRendererSink* video_renderer_sink); VideoRendererSink* video_renderer_sink);
#endif // defined (OS_ANDROID) #endif // defined (OS_ANDROID)
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include "media/mojo/services/mojo_renderer_service.h" #include "media/mojo/services/mojo_renderer_service.h"
#include "media/renderers/video_overlay_factory.h" #include "media/renderers/video_overlay_factory.h"
#include "mojo/public/cpp/bindings/interface_request.h" #include "mojo/public/cpp/bindings/interface_request.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/strong_binding.h" #include "mojo/public/cpp/bindings/strong_binding.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
#include "url/gurl.h" #include "url/gurl.h"
...@@ -70,15 +71,15 @@ class MojoRendererTest : public ::testing::Test { ...@@ -70,15 +71,15 @@ class MojoRendererTest : public ::testing::Test {
new StrictMock<MockRenderer>()); new StrictMock<MockRenderer>());
mock_renderer_ = mock_renderer.get(); mock_renderer_ = mock_renderer.get();
mojom::RendererPtr remote_renderer; mojo::PendingRemote<mojom::Renderer> remote_renderer_remote;
renderer_binding_ = MojoRendererService::Create( renderer_binding_ = MojoRendererService::Create(
&mojo_cdm_service_context_, std::move(mock_renderer), &mojo_cdm_service_context_, std::move(mock_renderer),
mojo::MakeRequest(&remote_renderer)); remote_renderer_remote.InitWithNewPipeAndPassReceiver());
mojo_renderer_.reset( mojo_renderer_.reset(
new MojoRenderer(message_loop_.task_runner(), new MojoRenderer(message_loop_.task_runner(),
std::unique_ptr<VideoOverlayFactory>(nullptr), nullptr, std::unique_ptr<VideoOverlayFactory>(nullptr), nullptr,
std::move(remote_renderer))); std::move(remote_renderer_remote)));
// CreateAudioStream() and CreateVideoStream() overrides expectations for // CreateAudioStream() and CreateVideoStream() overrides expectations for
// expected non-NULL streams. // expected non-NULL streams.
......
...@@ -43,17 +43,19 @@ interface InterfaceFactory { ...@@ -43,17 +43,19 @@ interface InterfaceFactory {
// from MediaPlayerRendererClient. // from MediaPlayerRendererClient.
// - |client_extension| is bound in MediaPlayerRendererClient, and receives // - |client_extension| is bound in MediaPlayerRendererClient, and receives
// calls from the MediaPlayerRenderer. // calls from the MediaPlayerRenderer.
CreateMediaPlayerRenderer(MediaPlayerRendererClientExtension client_extension, CreateMediaPlayerRenderer(
Renderer& renderer, pending_remote<MediaPlayerRendererClientExtension> client_extension,
MediaPlayerRendererExtension& renderer_extension); pending_receiver<Renderer> renderer,
pending_receiver<MediaPlayerRendererExtension> renderer_extension);
[EnableIf=is_android] [EnableIf=is_android]
// Creates a FlingingRenderer (FlingingRendererFactory). // Creates a FlingingRenderer (FlingingRendererFactory).
// The |presentation_id| is used to find an already set-up RemotePlayback // The |presentation_id| is used to find an already set-up RemotePlayback
// session (see blink::RemotePlayback). // session (see blink::RemotePlayback).
CreateFlingingRenderer(string presentation_id, CreateFlingingRenderer(
FlingingRendererClientExtension client_extension, string presentation_id,
Renderer& renderer); pending_remote<FlingingRendererClientExtension> client_extension,
pending_receiver<Renderer> renderer);
// Creates a CDM based on the |key_system| provided. A |key_system| is a // Creates a CDM based on the |key_system| provided. A |key_system| is a
// generic term for a decryption mechanism and/or content protection provider. // generic term for a decryption mechanism and/or content protection provider.
......
...@@ -157,16 +157,19 @@ void InterfaceFactoryImpl::CreateCastRenderer( ...@@ -157,16 +157,19 @@ void InterfaceFactoryImpl::CreateCastRenderer(
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
void InterfaceFactoryImpl::CreateMediaPlayerRenderer( void InterfaceFactoryImpl::CreateMediaPlayerRenderer(
mojom::MediaPlayerRendererClientExtensionPtr client_extension_ptr, mojo::PendingRemote<mojom::MediaPlayerRendererClientExtension>
mojom::RendererRequest request, client_extension_ptr,
mojom::MediaPlayerRendererExtensionRequest renderer_extension_request) { mojo::PendingReceiver<mojom::Renderer> receiver,
mojo::PendingReceiver<mojom::MediaPlayerRendererExtension>
renderer_extension_receiver) {
NOTREACHED(); NOTREACHED();
} }
void InterfaceFactoryImpl::CreateFlingingRenderer( void InterfaceFactoryImpl::CreateFlingingRenderer(
const std::string& audio_device_id, const std::string& audio_device_id,
mojom::FlingingRendererClientExtensionPtr client_extension, mojo::PendingRemote<mojom::FlingingRendererClientExtension>
mojo::InterfaceRequest<mojom::Renderer> request) { client_extension,
mojo::PendingReceiver<mojom::Renderer> receiver) {
NOTREACHED(); NOTREACHED();
} }
#endif // defined(OS_ANDROID) #endif // defined(OS_ANDROID)
......
...@@ -56,14 +56,16 @@ class InterfaceFactoryImpl : public DeferredDestroy<mojom::InterfaceFactory> { ...@@ -56,14 +56,16 @@ class InterfaceFactoryImpl : public DeferredDestroy<mojom::InterfaceFactory> {
#endif #endif
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
void CreateMediaPlayerRenderer( void CreateMediaPlayerRenderer(
mojom::MediaPlayerRendererClientExtensionPtr client_extension_ptr, mojo::PendingRemote<mojom::MediaPlayerRendererClientExtension>
mojom::RendererRequest request, client_extension_remote,
mojom::MediaPlayerRendererExtensionRequest renderer_extension_request) mojo::PendingReceiver<mojom::Renderer> receiver,
final; mojo::PendingReceiver<mojom::MediaPlayerRendererExtension>
renderer_extension_receiver) final;
void CreateFlingingRenderer( void CreateFlingingRenderer(
const std::string& presentation_id, const std::string& presentation_id,
mojom::FlingingRendererClientExtensionPtr client_extension, mojo::PendingRemote<mojom::FlingingRendererClientExtension>
mojom::RendererRequest request) final; client_extension,
mojo::PendingReceiver<mojom::Renderer> receiver) final;
#endif // defined(OS_ANDROID) #endif // defined(OS_ANDROID)
void CreateCdm(const std::string& key_system, void CreateCdm(const std::string& key_system,
mojom::ContentDecryptionModuleRequest request) final; mojom::ContentDecryptionModuleRequest request) final;
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "media/mojo/common/media_type_converters.h" #include "media/mojo/common/media_type_converters.h"
#include "media/mojo/services/media_resource_shim.h" #include "media/mojo/services/media_resource_shim.h"
#include "media/mojo/services/mojo_cdm_service_context.h" #include "media/mojo/services/mojo_cdm_service_context.h"
#include "mojo/public/cpp/bindings/self_owned_receiver.h"
namespace media { namespace media {
...@@ -35,13 +36,13 @@ const int kTimeUpdateIntervalMs = 50; ...@@ -35,13 +36,13 @@ const int kTimeUpdateIntervalMs = 50;
mojo::StrongBindingPtr<mojom::Renderer> MojoRendererService::Create( mojo::StrongBindingPtr<mojom::Renderer> MojoRendererService::Create(
MojoCdmServiceContext* mojo_cdm_service_context, MojoCdmServiceContext* mojo_cdm_service_context,
std::unique_ptr<media::Renderer> renderer, std::unique_ptr<media::Renderer> renderer,
mojo::InterfaceRequest<mojom::Renderer> request) { mojo::PendingReceiver<mojom::Renderer> receiver) {
MojoRendererService* service = MojoRendererService* service =
new MojoRendererService(mojo_cdm_service_context, std::move(renderer)); new MojoRendererService(mojo_cdm_service_context, std::move(renderer));
mojo::StrongBindingPtr<mojom::Renderer> binding = mojo::StrongBindingPtr<mojom::Renderer> binding =
mojo::MakeStrongBinding<mojom::Renderer>(base::WrapUnique(service), mojo::MakeSelfOwnedReceiver<mojom::Renderer>(base::WrapUnique(service),
std::move(request)); std::move(receiver));
service->set_bad_message_cb(base::Bind(&CloseBindingOnBadMessage, binding)); service->set_bad_message_cb(base::Bind(&CloseBindingOnBadMessage, binding));
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
#include "media/base/renderer_client.h" #include "media/base/renderer_client.h"
#include "media/mojo/mojom/renderer.mojom.h" #include "media/mojo/mojom/renderer.mojom.h"
#include "media/mojo/services/media_mojo_export.h" #include "media/mojo/services/media_mojo_export.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/strong_binding.h" #include "mojo/public/cpp/bindings/strong_binding.h"
namespace media { namespace media {
...@@ -40,7 +41,7 @@ class MEDIA_MOJO_EXPORT MojoRendererService : public mojom::Renderer, ...@@ -40,7 +41,7 @@ class MEDIA_MOJO_EXPORT MojoRendererService : public mojom::Renderer,
static mojo::StrongBindingPtr<mojom::Renderer> Create( static mojo::StrongBindingPtr<mojom::Renderer> Create(
MojoCdmServiceContext* mojo_cdm_service_context, MojoCdmServiceContext* mojo_cdm_service_context,
std::unique_ptr<media::Renderer> renderer, std::unique_ptr<media::Renderer> renderer,
mojo::InterfaceRequest<mojom::Renderer> request); mojo::PendingReceiver<mojom::Renderer> receiver);
// |mojo_cdm_service_context| can be used to find the CDM to support // |mojo_cdm_service_context| can be used to find the CDM to support
// encrypted media. If null, encrypted media is not supported. // encrypted media. If null, encrypted media is not supported.
......
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