| Index: media/remoting/remote_renderer_impl.cc
|
| diff --git a/media/remoting/remote_renderer_impl.cc b/media/remoting/remote_renderer_impl.cc
|
| index b87b7f61cc334864e86c48abd6e0afa2cf1aafd3..b814b00cbc0dcfb159f6d67e54529ae2e994f7e1 100644
|
| --- a/media/remoting/remote_renderer_impl.cc
|
| +++ b/media/remoting/remote_renderer_impl.cc
|
| @@ -35,14 +35,14 @@ RemoteRendererImpl::RemoteRendererImpl(
|
| rpc_broker_(remoting_renderer_controller_->GetRpcBroker()),
|
| rpc_handle_(rpc_broker_->GetUniqueHandle()),
|
| remote_renderer_handle_(remoting::kInvalidHandle),
|
| - interstitial_ui_(video_renderer_sink,
|
| - remoting_renderer_controller->pipeline_metadata()),
|
| + video_renderer_sink_(video_renderer_sink),
|
| weak_factory_(this) {
|
| VLOG(2) << __func__;
|
| // The constructor is running on the main thread.
|
| - DCHECK(remoting_renderer_controller);
|
| -
|
| - UpdateInterstitial();
|
| + DCHECK(remoting_renderer_controller_);
|
| + remoting_renderer_controller_->SetShowInterstitialCallback(
|
| + base::Bind(&RemoteRendererImpl::RequestUpdateInterstitialOnMainThread,
|
| + media_task_runner_, weak_factory_.GetWeakPtr()));
|
|
|
| const remoting::RpcBroker::ReceiveMessageCallback receive_callback =
|
| base::Bind(&RemoteRendererImpl::OnMessageReceivedOnMainThread,
|
| @@ -53,6 +53,17 @@ RemoteRendererImpl::RemoteRendererImpl(
|
| RemoteRendererImpl::~RemoteRendererImpl() {
|
| VLOG(2) << __func__;
|
| DCHECK(media_task_runner_->BelongsToCurrentThread());
|
| +
|
| + UpdateInterstitial(interstitial_background_, canvas_size_,
|
| + RemotingInterstitialType::BETWEEN_SESSIONS);
|
| +
|
| + // Post task on main thread to unset the interstial callback.
|
| + main_task_runner_->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&RemotingRendererController::SetShowInterstitialCallback,
|
| + remoting_renderer_controller_,
|
| + RemotingRendererController::ShowInterstitialCallback()));
|
| +
|
| // Post task on main thread to unregister message receiver.
|
| main_task_runner_->PostTask(
|
| FROM_HERE,
|
| @@ -597,10 +608,6 @@ void RemoteRendererImpl::OnFatalError(PipelineStatus error) {
|
|
|
| VLOG(2) << __func__ << " with PipelineStatus error=" << error;
|
|
|
| - main_task_runner_->PostTask(
|
| - FROM_HERE, base::Bind(&RemoteRendererImpl::UpdateInterstitial,
|
| - weak_factory_.GetWeakPtr()));
|
| -
|
| const State old_state = state_;
|
| state_ = STATE_ERROR;
|
|
|
| @@ -618,12 +625,29 @@ void RemoteRendererImpl::OnFatalError(PipelineStatus error) {
|
| client_->OnError(error);
|
| }
|
|
|
| -void RemoteRendererImpl::UpdateInterstitial() {
|
| - DCHECK(main_task_runner_->BelongsToCurrentThread());
|
| +// static
|
| +void RemoteRendererImpl::RequestUpdateInterstitialOnMainThread(
|
| + scoped_refptr<base::SingleThreadTaskRunner> media_task_runner,
|
| + base::WeakPtr<RemoteRendererImpl> remote_renderer_impl,
|
| + const SkBitmap& background_image,
|
| + const gfx::Size& canvas_size,
|
| + RemotingInterstitialType interstitial_type) {
|
| + media_task_runner->PostTask(
|
| + FROM_HERE,
|
| + base::Bind(&RemoteRendererImpl::UpdateInterstitial, remote_renderer_impl,
|
| + background_image, canvas_size, interstitial_type));
|
| +}
|
|
|
| - interstitial_ui_.ShowInterstitial(
|
| - remoting_renderer_controller_->remoting_source()->state() ==
|
| - RemotingSessionState::SESSION_STARTED);
|
| +void RemoteRendererImpl::UpdateInterstitial(
|
| + const SkBitmap& background_image,
|
| + const gfx::Size& canvas_size,
|
| + RemotingInterstitialType interstitial_type) {
|
| + DCHECK(media_task_runner_->BelongsToCurrentThread());
|
| + if (!background_image.drawsNothing())
|
| + interstitial_background_ = background_image;
|
| + canvas_size_ = canvas_size;
|
| + PaintRemotingInterstitial(interstitial_background_, canvas_size_,
|
| + interstitial_type, video_renderer_sink_);
|
| }
|
|
|
| } // namespace media
|
|
|