Index: media/remoting/renderer_controller.cc |
diff --git a/media/remoting/remoting_renderer_controller.cc b/media/remoting/renderer_controller.cc |
similarity index 63% |
rename from media/remoting/remoting_renderer_controller.cc |
rename to media/remoting/renderer_controller.cc |
index 515e08298ccd8e502f3be587800605d144722036..03f862de0a7ff73170698fea6fbf87388878228b 100644 |
--- a/media/remoting/remoting_renderer_controller.cc |
+++ b/media/remoting/renderer_controller.cc |
@@ -2,29 +2,30 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "media/remoting/remoting_renderer_controller.h" |
+#include "media/remoting/renderer_controller.h" |
#include "base/bind.h" |
#include "base/logging.h" |
#include "base/threading/thread_checker.h" |
#include "base/time/time.h" |
+#include "media/remoting/remoting_cdm.h" |
#include "media/remoting/remoting_cdm_context.h" |
namespace media { |
+namespace remoting { |
-RemotingRendererController::RemotingRendererController( |
- scoped_refptr<RemotingSourceImpl> remoting_source) |
- : remoting_source_(remoting_source), weak_factory_(this) { |
- remoting_source_->AddClient(this); |
+RendererController::RendererController(scoped_refptr<SharedSession> session) |
+ : session_(std::move(session)), weak_factory_(this) { |
+ session_->AddClient(this); |
} |
-RemotingRendererController::~RemotingRendererController() { |
+RendererController::~RendererController() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
- metrics_recorder_.WillStopSession(remoting::MEDIA_ELEMENT_DESTROYED); |
- remoting_source_->RemoveClient(this); |
+ metrics_recorder_.WillStopSession(MEDIA_ELEMENT_DESTROYED); |
+ session_->RemoveClient(this); |
} |
-void RemotingRendererController::OnStarted(bool success) { |
+void RendererController::OnStarted(bool success) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
if (success) { |
@@ -34,24 +35,23 @@ void RemotingRendererController::OnStarted(bool success) { |
DCHECK(!switch_renderer_cb_.is_null()); |
switch_renderer_cb_.Run(); |
} else { |
- remoting_source_->StopRemoting(this); |
+ session_->StopRemoting(this); |
} |
} else { |
VLOG(1) << "Failed to start remoting."; |
remote_rendering_started_ = false; |
- metrics_recorder_.WillStopSession(remoting::START_RACE); |
+ metrics_recorder_.WillStopSession(START_RACE); |
} |
} |
-void RemotingRendererController::OnSessionStateChanged() { |
+void RendererController::OnSessionStateChanged() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
- UpdateFromSessionState(remoting::SINK_AVAILABLE, remoting::ROUTE_TERMINATED); |
+ UpdateFromSessionState(SINK_AVAILABLE, ROUTE_TERMINATED); |
} |
-void RemotingRendererController::UpdateFromSessionState( |
- remoting::StartTrigger start_trigger, |
- remoting::StopTrigger stop_trigger) { |
- VLOG(1) << "UpdateFromSessionState: " << remoting_source_->state(); |
+void RendererController::UpdateFromSessionState(StartTrigger start_trigger, |
+ StopTrigger stop_trigger) { |
+ VLOG(1) << "UpdateFromSessionState: " << session_->state(); |
if (!sink_available_changed_cb_.is_null()) |
sink_available_changed_cb_.Run(IsRemoteSinkAvailable()); |
@@ -59,45 +59,43 @@ void RemotingRendererController::UpdateFromSessionState( |
UpdateAndMaybeSwitch(start_trigger, stop_trigger); |
} |
-bool RemotingRendererController::IsRemoteSinkAvailable() { |
+bool RendererController::IsRemoteSinkAvailable() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
- switch (remoting_source_->state()) { |
- case SESSION_CAN_START: |
- case SESSION_STARTING: |
- case SESSION_STARTED: |
+ switch (session_->state()) { |
+ case SharedSession::SESSION_CAN_START: |
+ case SharedSession::SESSION_STARTING: |
+ case SharedSession::SESSION_STARTED: |
return true; |
- case SESSION_UNAVAILABLE: |
- case SESSION_STOPPING: |
- case SESSION_PERMANENTLY_STOPPED: |
+ case SharedSession::SESSION_UNAVAILABLE: |
+ case SharedSession::SESSION_STOPPING: |
+ case SharedSession::SESSION_PERMANENTLY_STOPPED: |
return false; |
} |
- return false; // To suppress compile warning. |
+ NOTREACHED(); |
+ return false; // To suppress compiler warning on Windows. |
} |
-void RemotingRendererController::OnEnteredFullscreen() { |
+void RendererController::OnEnteredFullscreen() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
is_fullscreen_ = true; |
// See notes in OnBecameDominantVisibleContent() for why this is forced: |
is_dominant_content_ = true; |
- UpdateAndMaybeSwitch(remoting::ENTERED_FULLSCREEN, |
- remoting::UNKNOWN_STOP_TRIGGER); |
+ UpdateAndMaybeSwitch(ENTERED_FULLSCREEN, UNKNOWN_STOP_TRIGGER); |
} |
-void RemotingRendererController::OnExitedFullscreen() { |
+void RendererController::OnExitedFullscreen() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
is_fullscreen_ = false; |
// See notes in OnBecameDominantVisibleContent() for why this is forced: |
is_dominant_content_ = false; |
- UpdateAndMaybeSwitch(remoting::UNKNOWN_START_TRIGGER, |
- remoting::EXITED_FULLSCREEN); |
+ UpdateAndMaybeSwitch(UNKNOWN_START_TRIGGER, EXITED_FULLSCREEN); |
} |
-void RemotingRendererController::OnBecameDominantVisibleContent( |
- bool is_dominant) { |
+void RendererController::OnBecameDominantVisibleContent(bool is_dominant) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
// Two scenarios where "dominance" status mixes with fullscreen transitions: |
@@ -117,32 +115,31 @@ void RemotingRendererController::OnBecameDominantVisibleContent( |
return; |
is_dominant_content_ = is_dominant; |
- UpdateAndMaybeSwitch(remoting::BECAME_DOMINANT_CONTENT, |
- remoting::BECAME_AUXILIARY_CONTENT); |
+ UpdateAndMaybeSwitch(BECAME_DOMINANT_CONTENT, BECAME_AUXILIARY_CONTENT); |
} |
-void RemotingRendererController::OnSetCdm(CdmContext* cdm_context) { |
+void RendererController::OnSetCdm(CdmContext* cdm_context) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
auto* remoting_cdm_context = RemotingCdmContext::From(cdm_context); |
if (!remoting_cdm_context) |
return; |
- remoting_source_->RemoveClient(this); |
- remoting_source_ = remoting_cdm_context->GetRemotingSource(); |
- remoting_source_->AddClient(this); |
- UpdateFromSessionState(remoting::CDM_READY, remoting::DECRYPTION_ERROR); |
+ session_->RemoveClient(this); |
+ session_ = remoting_cdm_context->GetSharedSession(); |
+ session_->AddClient(this); |
+ UpdateFromSessionState(CDM_READY, DECRYPTION_ERROR); |
} |
-void RemotingRendererController::OnRemotePlaybackDisabled(bool disabled) { |
+void RendererController::OnRemotePlaybackDisabled(bool disabled) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
is_remote_playback_disabled_ = disabled; |
metrics_recorder_.OnRemotePlaybackDisabled(disabled); |
- UpdateAndMaybeSwitch(remoting::ENABLED_BY_PAGE, remoting::DISABLED_BY_PAGE); |
+ UpdateAndMaybeSwitch(ENABLED_BY_PAGE, DISABLED_BY_PAGE); |
} |
-void RemotingRendererController::OnSetPoster(const GURL& poster_url) { |
+void RendererController::OnSetPoster(const GURL& poster_url) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
if (poster_url != poster_url_) { |
@@ -154,19 +151,18 @@ void RemotingRendererController::OnSetPoster(const GURL& poster_url) { |
} |
} |
-void RemotingRendererController::SetSwitchRendererCallback( |
- const base::Closure& cb) { |
+void RendererController::SetSwitchRendererCallback(const base::Closure& cb) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
DCHECK(!cb.is_null()); |
switch_renderer_cb_ = cb; |
// Note: Not calling UpdateAndMaybeSwitch() here since this method should be |
- // called during the initialization phase of this RemotingRendererController; |
+ // called during the initialization phase of this RendererController; |
// and definitely before a whole lot of other things that are needed to |
// trigger a switch. |
} |
-void RemotingRendererController::SetRemoteSinkAvailableChangedCallback( |
+void RendererController::SetRemoteSinkAvailableChangedCallback( |
const base::Callback<void(bool)>& cb) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
@@ -175,25 +171,23 @@ void RemotingRendererController::SetRemoteSinkAvailableChangedCallback( |
sink_available_changed_cb_.Run(IsRemoteSinkAvailable()); |
} |
-base::WeakPtr<remoting::RpcBroker> RemotingRendererController::GetRpcBroker() |
- const { |
+base::WeakPtr<RpcBroker> RendererController::GetRpcBroker() const { |
DCHECK(thread_checker_.CalledOnValidThread()); |
- return remoting_source_->GetRpcBroker()->GetWeakPtr(); |
+ return session_->rpc_broker()->GetWeakPtr(); |
} |
-void RemotingRendererController::StartDataPipe( |
+void RendererController::StartDataPipe( |
std::unique_ptr<mojo::DataPipe> audio_data_pipe, |
std::unique_ptr<mojo::DataPipe> video_data_pipe, |
- const RemotingSourceImpl::DataPipeStartCallback& done_callback) { |
+ const SharedSession::DataPipeStartCallback& done_callback) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
- remoting_source_->StartDataPipe(std::move(audio_data_pipe), |
- std::move(video_data_pipe), done_callback); |
+ session_->StartDataPipe(std::move(audio_data_pipe), |
+ std::move(video_data_pipe), done_callback); |
} |
-void RemotingRendererController::OnMetadataChanged( |
- const PipelineMetadata& metadata) { |
+void RendererController::OnMetadataChanged(const PipelineMetadata& metadata) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
const gfx::Size old_size = pipeline_metadata_.natural_size; |
@@ -213,26 +207,26 @@ void RemotingRendererController::OnMetadataChanged( |
if (pipeline_metadata_.natural_size != old_size) |
UpdateInterstitial(base::nullopt); |
- remoting::StartTrigger start_trigger = remoting::UNKNOWN_START_TRIGGER; |
+ StartTrigger start_trigger = UNKNOWN_START_TRIGGER; |
if (!was_audio_codec_supported && is_audio_codec_supported) |
- start_trigger = remoting::SUPPORTED_AUDIO_CODEC; |
+ start_trigger = SUPPORTED_AUDIO_CODEC; |
if (!was_video_codec_supported && is_video_codec_supported) { |
- start_trigger = start_trigger == remoting::SUPPORTED_AUDIO_CODEC |
- ? remoting::SUPPORTED_AUDIO_AND_VIDEO_CODECS |
- : remoting::SUPPORTED_VIDEO_CODEC; |
+ start_trigger = start_trigger == SUPPORTED_AUDIO_CODEC |
+ ? SUPPORTED_AUDIO_AND_VIDEO_CODECS |
+ : SUPPORTED_VIDEO_CODEC; |
} |
- remoting::StopTrigger stop_trigger = remoting::UNKNOWN_STOP_TRIGGER; |
+ StopTrigger stop_trigger = UNKNOWN_STOP_TRIGGER; |
if (was_audio_codec_supported && !is_audio_codec_supported) |
- stop_trigger = remoting::UNSUPPORTED_AUDIO_CODEC; |
+ stop_trigger = UNSUPPORTED_AUDIO_CODEC; |
if (was_video_codec_supported && !is_video_codec_supported) { |
- stop_trigger = stop_trigger == remoting::UNSUPPORTED_AUDIO_CODEC |
- ? remoting::UNSUPPORTED_AUDIO_AND_VIDEO_CODECS |
- : remoting::UNSUPPORTED_VIDEO_CODEC; |
+ stop_trigger = stop_trigger == UNSUPPORTED_AUDIO_CODEC |
+ ? UNSUPPORTED_AUDIO_AND_VIDEO_CODECS |
+ : UNSUPPORTED_VIDEO_CODEC; |
} |
UpdateAndMaybeSwitch(start_trigger, stop_trigger); |
} |
-bool RemotingRendererController::IsVideoCodecSupported() { |
+bool RendererController::IsVideoCodecSupported() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
DCHECK(has_video()); |
@@ -247,7 +241,7 @@ bool RemotingRendererController::IsVideoCodecSupported() { |
} |
} |
-bool RemotingRendererController::IsAudioCodecSupported() { |
+bool RendererController::IsAudioCodecSupported() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
DCHECK(has_audio()); |
@@ -276,59 +270,59 @@ bool RemotingRendererController::IsAudioCodecSupported() { |
} |
} |
-void RemotingRendererController::OnPlaying() { |
+void RendererController::OnPlaying() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
is_paused_ = false; |
- UpdateAndMaybeSwitch(remoting::PLAY_COMMAND, remoting::UNKNOWN_STOP_TRIGGER); |
+ UpdateAndMaybeSwitch(PLAY_COMMAND, UNKNOWN_STOP_TRIGGER); |
} |
-void RemotingRendererController::OnPaused() { |
+void RendererController::OnPaused() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
is_paused_ = true; |
} |
-bool RemotingRendererController::ShouldBeRemoting() { |
+bool RendererController::ShouldBeRemoting() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
if (switch_renderer_cb_.is_null()) { |
DCHECK(!remote_rendering_started_); |
- return false; // No way to switch to a RemotingRenderImpl. |
+ return false; // No way to switch to the remoting renderer. |
} |
- const RemotingSessionState state = remoting_source_->state(); |
+ const SharedSession::SessionState state = session_->state(); |
if (is_encrypted_) { |
// Due to technical limitations when playing encrypted content, once a |
// remoting session has been started, always return true here to indicate |
- // that the RemotingRendererImpl should be used. In the stopped states, |
- // RemotingRendererImpl will display an interstitial to notify the user that |
- // local rendering cannot be resumed. |
+ // that the CourierRenderer should continue to be used. In the stopped |
+ // states, CourierRenderer will display an interstitial to notify the user |
+ // that local rendering cannot be resumed. |
// |
// TODO(miu): Revisit this once more of the encrypted-remoting impl is |
// in-place. For example, this will prevent metrics from recording session |
// stop reasons. |
- return state == RemotingSessionState::SESSION_STARTED || |
- state == RemotingSessionState::SESSION_STOPPING || |
- state == RemotingSessionState::SESSION_PERMANENTLY_STOPPED; |
+ return state == SharedSession::SESSION_STARTED || |
+ state == SharedSession::SESSION_STOPPING || |
+ state == SharedSession::SESSION_PERMANENTLY_STOPPED; |
} |
if (encountered_renderer_fatal_error_) |
return false; |
switch (state) { |
- case SESSION_UNAVAILABLE: |
+ case SharedSession::SESSION_UNAVAILABLE: |
return false; // Cannot remote media without a remote sink. |
- case SESSION_CAN_START: |
- case SESSION_STARTING: |
- case SESSION_STARTED: |
+ case SharedSession::SESSION_CAN_START: |
+ case SharedSession::SESSION_STARTING: |
+ case SharedSession::SESSION_STARTED: |
break; // Media remoting is possible, assuming other requirments are met. |
- case SESSION_STOPPING: |
- case SESSION_PERMANENTLY_STOPPED: |
+ case SharedSession::SESSION_STOPPING: |
+ case SharedSession::SESSION_PERMANENTLY_STOPPED: |
return false; // Use local rendering after stopping remoting. |
} |
- switch (remoting_source_->sink_capabilities()) { |
+ switch (session_->sink_capabilities()) { |
case mojom::RemotingSinkCapabilities::NONE: |
return false; |
case mojom::RemotingSinkCapabilities::RENDERING_ONLY: |
@@ -351,9 +345,8 @@ bool RemotingRendererController::ShouldBeRemoting() { |
return is_fullscreen_ || is_dominant_content_; |
} |
-void RemotingRendererController::UpdateAndMaybeSwitch( |
- remoting::StartTrigger start_trigger, |
- remoting::StopTrigger stop_trigger) { |
+void RendererController::UpdateAndMaybeSwitch(StartTrigger start_trigger, |
+ StopTrigger stop_trigger) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
bool should_be_remoting = ShouldBeRemoting(); |
@@ -374,30 +367,29 @@ void RemotingRendererController::UpdateAndMaybeSwitch( |
if (remote_rendering_started_) { |
DCHECK(!switch_renderer_cb_.is_null()); |
- if (remoting_source_->state() == |
- RemotingSessionState::SESSION_PERMANENTLY_STOPPED) { |
+ if (session_->state() == SharedSession::SESSION_PERMANENTLY_STOPPED) { |
switch_renderer_cb_.Run(); |
return; |
} |
- DCHECK_NE(start_trigger, remoting::UNKNOWN_START_TRIGGER); |
+ DCHECK_NE(start_trigger, UNKNOWN_START_TRIGGER); |
metrics_recorder_.WillStartSession(start_trigger); |
// |switch_renderer_cb_.Run()| will be called after remoting is started |
// successfully. |
- remoting_source_->StartRemoting(this); |
+ session_->StartRemoting(this); |
} else { |
// For encrypted content, it's only valid to switch to remoting renderer, |
// and never back to the local renderer. The RemotingCdmController will |
// force-stop the session when remoting has ended; so no need to call |
// StopRemoting() from here. |
DCHECK(!is_encrypted_); |
- DCHECK_NE(stop_trigger, remoting::UNKNOWN_STOP_TRIGGER); |
+ DCHECK_NE(stop_trigger, UNKNOWN_STOP_TRIGGER); |
metrics_recorder_.WillStopSession(stop_trigger); |
switch_renderer_cb_.Run(); |
- remoting_source_->StopRemoting(this); |
+ session_->StopRemoting(this); |
} |
} |
-void RemotingRendererController::SetShowInterstitialCallback( |
+void RendererController::SetShowInterstitialCallback( |
const ShowInterstitialCallback& cb) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
show_interstitial_cb_ = cb; |
@@ -406,7 +398,7 @@ void RemotingRendererController::SetShowInterstitialCallback( |
DownloadPosterImage(); |
} |
-void RemotingRendererController::SetDownloadPosterCallback( |
+void RendererController::SetDownloadPosterCallback( |
const DownloadPosterCallback& cb) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
DCHECK(download_poster_cb_.is_null()); |
@@ -415,32 +407,32 @@ void RemotingRendererController::SetDownloadPosterCallback( |
DownloadPosterImage(); |
} |
-void RemotingRendererController::UpdateInterstitial( |
+void RendererController::UpdateInterstitial( |
const base::Optional<SkBitmap>& image) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
if (show_interstitial_cb_.is_null() || |
pipeline_metadata_.natural_size.IsEmpty()) |
return; |
- RemotingInterstitialType type = RemotingInterstitialType::BETWEEN_SESSIONS; |
- switch (remoting_source_->state()) { |
- case SESSION_STARTED: |
- type = RemotingInterstitialType::IN_SESSION; |
+ InterstitialType type = InterstitialType::BETWEEN_SESSIONS; |
+ switch (session_->state()) { |
+ case SharedSession::SESSION_STARTED: |
+ type = InterstitialType::IN_SESSION; |
break; |
- case SESSION_PERMANENTLY_STOPPED: |
- type = RemotingInterstitialType::ENCRYPTED_MEDIA_FATAL_ERROR; |
+ case SharedSession::SESSION_PERMANENTLY_STOPPED: |
+ type = InterstitialType::ENCRYPTED_MEDIA_FATAL_ERROR; |
break; |
- case SESSION_UNAVAILABLE: |
- case SESSION_CAN_START: |
- case SESSION_STARTING: |
- case SESSION_STOPPING: |
+ case SharedSession::SESSION_UNAVAILABLE: |
+ case SharedSession::SESSION_CAN_START: |
+ case SharedSession::SESSION_STARTING: |
+ case SharedSession::SESSION_STOPPING: |
break; |
} |
show_interstitial_cb_.Run(image, pipeline_metadata_.natural_size, type); |
} |
-void RemotingRendererController::DownloadPosterImage() { |
+void RendererController::DownloadPosterImage() { |
if (download_poster_cb_.is_null() || show_interstitial_cb_.is_null()) |
return; |
DCHECK(!poster_url_.is_empty()); |
@@ -448,11 +440,11 @@ void RemotingRendererController::DownloadPosterImage() { |
const base::TimeTicks download_start_time = base::TimeTicks::Now(); |
download_poster_cb_.Run( |
poster_url_, |
- base::Bind(&RemotingRendererController::OnPosterImageDownloaded, |
+ base::Bind(&RendererController::OnPosterImageDownloaded, |
weak_factory_.GetWeakPtr(), poster_url_, download_start_time)); |
} |
-void RemotingRendererController::OnPosterImageDownloaded( |
+void RendererController::OnPosterImageDownloaded( |
const GURL& download_url, |
base::TimeTicks download_start_time, |
const SkBitmap& image) { |
@@ -465,8 +457,7 @@ void RemotingRendererController::OnPosterImageDownloaded( |
UpdateInterstitial(image); |
} |
-void RemotingRendererController::OnRendererFatalError( |
- remoting::StopTrigger stop_trigger) { |
+void RendererController::OnRendererFatalError(StopTrigger stop_trigger) { |
DCHECK(thread_checker_.CalledOnValidThread()); |
// Do not act on errors caused by things like Mojo pipes being closed during |
@@ -475,7 +466,8 @@ void RemotingRendererController::OnRendererFatalError( |
return; |
encountered_renderer_fatal_error_ = true; |
- UpdateAndMaybeSwitch(remoting::UNKNOWN_START_TRIGGER, stop_trigger); |
+ UpdateAndMaybeSwitch(UNKNOWN_START_TRIGGER, stop_trigger); |
} |
+} // namespace remoting |
} // namespace media |