Index: media/remoting/remoting_renderer_controller.cc |
diff --git a/media/remoting/remoting_renderer_controller.cc b/media/remoting/remoting_renderer_controller.cc |
index f1abc93d3a6b4531a8c22f7fdf8fae7f46e0fd76..40506d8251839278c751f63123a2e2ee45a1cd8f 100644 |
--- a/media/remoting/remoting_renderer_controller.cc |
+++ b/media/remoting/remoting_renderer_controller.cc |
@@ -43,9 +43,29 @@ void RemotingRendererController::OnSessionStateChanged() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
VLOG(1) << "OnSessionStateChanged: " << remoting_source_->state(); |
+ if (!sink_available_changed_cb_.is_null()) |
+ sink_available_changed_cb_.Run(IsRemoteSinkAvailable()); |
+ |
UpdateAndMaybeSwitch(); |
} |
+bool RemotingRendererController::IsRemoteSinkAvailable() { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ |
+ switch (remoting_source_->state()) { |
+ case SESSION_CAN_START: |
+ case SESSION_STARTING: |
+ case SESSION_STARTED: |
+ return true; |
+ case SESSION_UNAVAILABLE: |
+ case SESSION_STOPPING: |
+ case SESSION_PERMANENTLY_STOPPED: |
+ return false; |
+ } |
+ |
+ return false; // To suppress compile warning. |
+} |
+ |
void RemotingRendererController::OnEnteredFullscreen() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
@@ -96,6 +116,15 @@ void RemotingRendererController::SetSwitchRendererCallback( |
UpdateAndMaybeSwitch(); |
} |
+void RemotingRendererController::SetRemoteSinkAvailableChangedCallback( |
+ const base::Callback<void(bool)>& cb) { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ |
+ sink_available_changed_cb_ = cb; |
+ if (!sink_available_changed_cb_.is_null()) |
+ sink_available_changed_cb_.Run(IsRemoteSinkAvailable()); |
+} |
+ |
base::WeakPtr<remoting::RpcBroker> RemotingRendererController::GetRpcBroker() |
const { |
DCHECK(thread_checker_.CalledOnValidThread()); |