Commit 9a8df283 authored by Guohui Deng's avatar Guohui Deng Committed by Commit Bot

Replace ApplicationSessionIdManager

ApplicationSessionIdManager must be extended to provide more
media related information associated with application. Therefore
replace it with ApplicationMediaInfoManager.

No behavior change.

Bug: internal b/110233576
Test: Manual cast and Internal CQ.

Change-Id: I0b8a37f000d55933f740ca737ca1f88f21db5cc4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1555355
Commit-Queue: Guohui Deng <guohuideng@chromium.org>
Reviewed-by: default avatarKenneth MacKay <kmackay@chromium.org>
Reviewed-by: default avatarLuke Halliwell <halliwell@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Cr-Commit-Position: refs/heads/master@{#650404}
parent 9bcb57bf
...@@ -9,29 +9,34 @@ ...@@ -9,29 +9,34 @@
namespace chromecast { namespace chromecast {
namespace media { namespace media {
void CreateApplicationSessionIdManager( void CreateApplicationMediaInfoManager(
content::RenderFrameHost* render_frame_host, content::RenderFrameHost* render_frame_host,
std::string application_session_id, std::string application_session_id,
::media::mojom::ApplicationSessionIdManagerRequest request) { bool mixer_audio_enabled,
// The created CastApplicationSessionIdManager will return ::media::mojom::CastApplicationMediaInfoManagerRequest request) {
// the |application_session_id| that's passed in here. // The created ApplicationMediaInfoManager will be deleted on connection
// The object will be deleted on connection error, or when the frame navigates // error, or when the frame navigates away. See FrameServiceBase for details.
// away. See FrameServiceBase for details. new ApplicationMediaInfoManager(render_frame_host, std::move(request),
new CastApplicationSessionIdManager(render_frame_host, std::move(request), std::move(application_session_id),
std::move(application_session_id)); mixer_audio_enabled);
} }
CastApplicationSessionIdManager::CastApplicationSessionIdManager( ApplicationMediaInfoManager::ApplicationMediaInfoManager(
content::RenderFrameHost* render_frame_host, content::RenderFrameHost* render_frame_host,
::media::mojom::ApplicationSessionIdManagerRequest request, ::media::mojom::CastApplicationMediaInfoManagerRequest request,
std::string application_session_id) std::string application_session_id,
bool mixer_audio_enabled)
: FrameServiceBase(render_frame_host, std::move(request)), : FrameServiceBase(render_frame_host, std::move(request)),
application_session_id_(std::move(application_session_id)) {} application_session_id_(std::move(application_session_id)),
mixer_audio_enabled_(mixer_audio_enabled) {}
ApplicationMediaInfoManager::~ApplicationMediaInfoManager() = default;
void CastApplicationSessionIdManager::GetApplicationSessionId( void ApplicationMediaInfoManager::GetCastApplicationMediaInfo(
GetApplicationSessionIdCallback callback) { GetCastApplicationMediaInfoCallback callback) {
std::move(callback).Run(application_session_id_); std::move(callback).Run(::media::mojom::CastApplicationMediaInfo::New(
application_session_id_, mixer_audio_enabled_));
} }
} // namespace media } // namespace media
} // namespace chromecast } // namespace chromecast
\ No newline at end of file
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
#include "base/macros.h" #include "base/macros.h"
#include "content/public/browser/frame_service_base.h" #include "content/public/browser/frame_service_base.h"
#include "media/mojo/interfaces/application_session_id_manager.mojom.h" #include "media/mojo/interfaces/cast_application_media_info_manager.mojom.h"
namespace content { namespace content {
class RenderFrameHost; class RenderFrameHost;
...@@ -18,28 +18,33 @@ class RenderFrameHost; ...@@ -18,28 +18,33 @@ class RenderFrameHost;
namespace chromecast { namespace chromecast {
namespace media { namespace media {
class CastApplicationSessionIdManager class ApplicationMediaInfoManager
: public ::content::FrameServiceBase< : public ::content::FrameServiceBase<
::media::mojom::ApplicationSessionIdManager> { ::media::mojom::CastApplicationMediaInfoManager> {
public: public:
CastApplicationSessionIdManager( ApplicationMediaInfoManager(
content::RenderFrameHost* render_frame_host, content::RenderFrameHost* render_frame_host,
::media::mojom::ApplicationSessionIdManagerRequest request, ::media::mojom::CastApplicationMediaInfoManagerRequest request,
std::string application_session_id); std::string application_session_id,
bool mixer_audio_enabled);
~ApplicationMediaInfoManager() override;
private: private:
// ::media::mojom::ApplicationSessionIdManager implementation. // ::media::mojom::CastApplicationMediaInfoManager implementation:
void GetApplicationSessionId(GetApplicationSessionIdCallback callback) final; void GetCastApplicationMediaInfo(
GetCastApplicationMediaInfoCallback callback) final;
const std::string application_session_id_; const std::string application_session_id_;
bool mixer_audio_enabled_;
DISALLOW_COPY_AND_ASSIGN(CastApplicationSessionIdManager); DISALLOW_COPY_AND_ASSIGN(ApplicationMediaInfoManager);
}; };
void CreateApplicationSessionIdManager( void CreateApplicationMediaInfoManager(
content::RenderFrameHost* render_frame_host, content::RenderFrameHost* render_frame_host,
std::string application_session_id, std::string application_session_id,
::media::mojom::ApplicationSessionIdManagerRequest request); bool mixer_audio_enabled,
::media::mojom::CastApplicationMediaInfoManagerRequest request);
} // namespace media } // namespace media
} // namespace chromecast } // namespace chromecast
......
...@@ -805,8 +805,8 @@ void CastContentBrowserClient::ExposeInterfacesToMediaService( ...@@ -805,8 +805,8 @@ void CastContentBrowserClient::ExposeInterfacesToMediaService(
CastNavigationUIData::GetSessionIdForWebContents( CastNavigationUIData::GetSessionIdForWebContents(
content::WebContents::FromRenderFrameHost(render_frame_host)); content::WebContents::FromRenderFrameHost(render_frame_host));
registry->AddInterface(base::BindRepeating( registry->AddInterface(base::BindRepeating(
&media::CreateApplicationSessionIdManager, render_frame_host, &media::CreateApplicationMediaInfoManager, render_frame_host,
std::move(application_session_id))); std::move(application_session_id), true));
} }
void CastContentBrowserClient::HandleServiceRequest( void CastContentBrowserClient::HandleServiceRequest(
......
...@@ -99,63 +99,69 @@ void CastRenderer::Initialize(::media::MediaResource* media_resource, ...@@ -99,63 +99,69 @@ void CastRenderer::Initialize(::media::MediaResource* media_resource,
const ::media::PipelineStatusCB& init_cb) { const ::media::PipelineStatusCB& init_cb) {
LOG(INFO) << __FUNCTION__ << ": " << this; LOG(INFO) << __FUNCTION__ << ": " << this;
DCHECK(task_runner_->BelongsToCurrentThread()); DCHECK(task_runner_->BelongsToCurrentThread());
DCHECK(!application_session_id_manager_ptr_); DCHECK(!application_media_info_manager_ptr_);
// Retrieve application_session_id if it is available via // Retrieve application_media_info_manager_ptr_ if it is available via
// ApplicationSessionIdManager. // CastApplicationMediaInfoManager.
// If a CastRenderer is created for a purpose other than a web application,
// the ApplicationSessionIdManager interface is not available, and application
// session ID will be an empty string.
if (host_interfaces_) { if (host_interfaces_) {
service_manager::GetInterface<::media::mojom::ApplicationSessionIdManager>( service_manager::GetInterface<
host_interfaces_, &application_session_id_manager_ptr_); ::media::mojom::CastApplicationMediaInfoManager>(
host_interfaces_, &application_media_info_manager_ptr_);
} }
if (application_session_id_manager_ptr_) { if (application_media_info_manager_ptr_) {
application_session_id_manager_ptr_->GetApplicationSessionId(base::BindOnce( application_media_info_manager_ptr_->GetCastApplicationMediaInfo(
&CastRenderer::OnApplicationSessionIdReceived, base::BindOnce(&CastRenderer::OnApplicationMediaInfoReceived,
weak_factory_.GetWeakPtr(), media_resource, client, init_cb)); weak_factory_.GetWeakPtr(), media_resource, client,
init_cb));
} else { } else {
OnApplicationSessionIdReceived(media_resource, client, init_cb, // If a CastRenderer is created for a purpose other than a web application,
std::string()); // the CastApplicationMediaInfoManager interface is not available, and
// default CastApplicationMediaInfo value below will be used.
OnApplicationMediaInfoReceived(
media_resource, client, init_cb,
::media::mojom::CastApplicationMediaInfo::New(std::string(), true));
} }
} }
void CastRenderer::OnApplicationSessionIdReceived( void CastRenderer::OnApplicationMediaInfoReceived(
::media::MediaResource* media_resource, ::media::MediaResource* media_resource,
::media::RendererClient* client, ::media::RendererClient* client,
const ::media::PipelineStatusCB& init_cb, const ::media::PipelineStatusCB& init_cb,
const std::string& application_session_id) { ::media::mojom::CastApplicationMediaInfoPtr application_media_info) {
DCHECK(task_runner_->BelongsToCurrentThread()); DCHECK(task_runner_->BelongsToCurrentThread());
if (application_session_id.empty()) { if (application_media_info->application_session_id.empty()) {
OnGetMultiroomInfo(media_resource, client, init_cb, application_session_id, OnGetMultiroomInfo(media_resource, client, init_cb,
std::move(application_media_info),
chromecast::mojom::MultiroomInfo::New()); chromecast::mojom::MultiroomInfo::New());
return; return;
} }
connector_->BindInterface(chromecast::mojom::kChromecastServiceName, connector_->BindInterface(chromecast::mojom::kChromecastServiceName,
&multiroom_manager_); &multiroom_manager_);
multiroom_manager_.set_connection_error_handler( multiroom_manager_.set_connection_error_handler(base::BindOnce(
base::BindOnce(&CastRenderer::OnGetMultiroomInfo, base::Unretained(this), &CastRenderer::OnGetMultiroomInfo, base::Unretained(this), media_resource,
media_resource, client, init_cb, application_session_id, client, init_cb, application_media_info.Clone(),
chromecast::mojom::MultiroomInfo::New())); chromecast::mojom::MultiroomInfo::New()));
multiroom_manager_->GetMultiroomInfo( multiroom_manager_->GetMultiroomInfo(
application_session_id, application_media_info->application_session_id,
base::BindOnce(&CastRenderer::OnGetMultiroomInfo, base::Unretained(this), base::BindOnce(&CastRenderer::OnGetMultiroomInfo, base::Unretained(this),
media_resource, client, init_cb, application_session_id)); media_resource, client, init_cb,
std::move(application_media_info)));
} }
void CastRenderer::OnGetMultiroomInfo( void CastRenderer::OnGetMultiroomInfo(
::media::MediaResource* media_resource, ::media::MediaResource* media_resource,
::media::RendererClient* client, ::media::RendererClient* client,
const ::media::PipelineStatusCB& init_cb, const ::media::PipelineStatusCB& init_cb,
const std::string& application_session_id, ::media::mojom::CastApplicationMediaInfoPtr application_media_info,
chromecast::mojom::MultiroomInfoPtr multiroom_info) { chromecast::mojom::MultiroomInfoPtr multiroom_info) {
DCHECK(task_runner_->BelongsToCurrentThread()); DCHECK(task_runner_->BelongsToCurrentThread());
DCHECK(multiroom_info); DCHECK(multiroom_info);
LOG(INFO) << __FUNCTION__ << ": " << this LOG(INFO) << __FUNCTION__ << ": " << this
<< " session_id=" << application_session_id << " session_id=" << application_media_info->application_session_id
<< ", mixer_audio_enabled="
<< application_media_info->mixer_audio_enabled
<< ", multiroom=" << multiroom_info->multiroom << ", multiroom=" << multiroom_info->multiroom
<< ", audio_channel=" << multiroom_info->audio_channel; << ", audio_channel=" << multiroom_info->audio_channel;
// Close the MultiroomManager message pipe so that a connection error does not // Close the MultiroomManager message pipe so that a connection error does not
...@@ -185,7 +191,7 @@ void CastRenderer::OnGetMultiroomInfo( ...@@ -185,7 +191,7 @@ void CastRenderer::OnGetMultiroomInfo(
MediaPipelineDeviceParams params(sync_type, backend_task_runner_.get(), MediaPipelineDeviceParams params(sync_type, backend_task_runner_.get(),
content_type, audio_device_id_); content_type, audio_device_id_);
params.connector = connector_; params.connector = connector_;
params.session_id = application_session_id; params.session_id = application_media_info->application_session_id;
params.multiroom = multiroom_info->multiroom; params.multiroom = multiroom_info->multiroom;
params.audio_channel = multiroom_info->audio_channel; params.audio_channel = multiroom_info->audio_channel;
params.output_delay_us = multiroom_info->output_delay.InMicroseconds(); params.output_delay_us = multiroom_info->output_delay.InMicroseconds();
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
#include "chromecast/media/cma/backend/cma_backend_factory.h" #include "chromecast/media/cma/backend/cma_backend_factory.h"
#include "media/base/renderer.h" #include "media/base/renderer.h"
#include "media/base/waiting.h" #include "media/base/waiting.h"
#include "media/mojo/interfaces/application_session_id_manager.mojom.h" #include "media/mojo/interfaces/cast_application_media_info_manager.mojom.h"
#include "ui/gfx/geometry/size.h" #include "ui/gfx/geometry/size.h"
namespace base { namespace base {
...@@ -70,16 +70,17 @@ class CastRenderer : public ::media::Renderer, ...@@ -70,16 +70,17 @@ class CastRenderer : public ::media::Renderer,
private: private:
enum Stream { STREAM_AUDIO, STREAM_VIDEO }; enum Stream { STREAM_AUDIO, STREAM_VIDEO };
void OnApplicationSessionIdReceived( void OnApplicationMediaInfoReceived(
::media::MediaResource* media_resource, ::media::MediaResource* media_resource,
::media::RendererClient* client, ::media::RendererClient* client,
const ::media::PipelineStatusCB& init_cb, const ::media::PipelineStatusCB& init_cb,
const std::string& application_session_id); ::media::mojom::CastApplicationMediaInfoPtr application_media_info);
void OnGetMultiroomInfo(::media::MediaResource* media_resource, void OnGetMultiroomInfo(
::media::RendererClient* client, ::media::MediaResource* media_resource,
const ::media::PipelineStatusCB& init_cb, ::media::RendererClient* client,
const std::string& session_id, const ::media::PipelineStatusCB& init_cb,
chromecast::mojom::MultiroomInfoPtr multiroom_info); ::media::mojom::CastApplicationMediaInfoPtr application_media_info,
chromecast::mojom::MultiroomInfoPtr multiroom_info);
void OnError(::media::PipelineStatus status); void OnError(::media::PipelineStatus status);
void OnEnded(Stream stream); void OnEnded(Stream stream);
void OnStatisticsUpdate(const ::media::PipelineStatistics& stats); void OnStatisticsUpdate(const ::media::PipelineStatistics& stats);
...@@ -111,8 +112,8 @@ class CastRenderer : public ::media::Renderer, ...@@ -111,8 +112,8 @@ class CastRenderer : public ::media::Renderer,
bool eos_[2]; bool eos_[2];
gfx::Size video_res_; gfx::Size video_res_;
::media::mojom::ApplicationSessionIdManagerPtr ::media::mojom::CastApplicationMediaInfoManagerPtr
application_session_id_manager_ptr_; application_media_info_manager_ptr_;
chromecast::mojom::MultiroomManagerPtr multiroom_manager_; chromecast::mojom::MultiroomManagerPtr multiroom_manager_;
base::WeakPtrFactory<CastRenderer> weak_factory_; base::WeakPtrFactory<CastRenderer> weak_factory_;
......
...@@ -4,10 +4,19 @@ ...@@ -4,10 +4,19 @@
module media.mojom; module media.mojom;
struct CastApplicationMediaInfo {
// Used by multizone Playback.
// Can be empty string if WebContents isn't for a WebApplication.
string application_session_id;
// True if WebApplication has MIXER_AUDIO feature enabled.
// This value is set in Chromecast internal code.
bool mixer_audio_enabled;
};
// This is a service attached to RenderFrameHost. // This is a service attached to RenderFrameHost.
// This is only used for Chromecast. interface CastApplicationMediaInfoManager {
interface ApplicationSessionIdManager { // Returns the CastApplicationMediaInfo associated with the
// Returns the |application_session_id| associated with the // RenderFrameHost, i.e., the application.
// RenderFrameHost. GetCastApplicationMediaInfo() =>
GetApplicationSessionId() => (string application_session_id); (CastApplicationMediaInfo cast_application_media_info);
}; };
\ No newline at end of file
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