Index: media/remoting/remoting_renderer_controller.h |
diff --git a/media/remoting/remoting_renderer_controller.h b/media/remoting/remoting_renderer_controller.h |
deleted file mode 100644 |
index 4793ef199708a42203278113df365a1c1178ed92..0000000000000000000000000000000000000000 |
--- a/media/remoting/remoting_renderer_controller.h |
+++ /dev/null |
@@ -1,223 +0,0 @@ |
-// Copyright 2016 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef MEDIA_REMOTING_REMOTING_RENDERER_CONTROLLER_H_ |
-#define MEDIA_REMOTING_REMOTING_RENDERER_CONTROLLER_H_ |
- |
-#include "base/callback.h" |
-#include "base/memory/weak_ptr.h" |
-#include "base/optional.h" |
-#include "media/base/media_observer.h" |
-#include "media/remoting/metrics.h" |
-#include "media/remoting/remoting_interstitial_ui.h" |
-#include "media/remoting/remoting_source_impl.h" |
-#include "third_party/skia/include/core/SkBitmap.h" |
- |
-namespace media { |
- |
-namespace remoting { |
-class RpcBroker; |
-} |
- |
-// This class: |
-// 1) Implements the RemotingSourceImpl::Client; |
-// 2) Monitors player events as a MediaObserver; |
-// 3) May trigger the switch of the media renderer between local playback |
-// and remoting. |
-class RemotingRendererController final : public RemotingSourceImpl::Client, |
- public MediaObserver { |
- public: |
- explicit RemotingRendererController( |
- scoped_refptr<RemotingSourceImpl> remoting_source); |
- ~RemotingRendererController() override; |
- |
- // RemotingSourceImpl::Client implemenations. |
- void OnStarted(bool success) override; |
- void OnSessionStateChanged() override; |
- |
- // MediaObserver implementations. |
- void OnEnteredFullscreen() override; |
- void OnExitedFullscreen() override; |
- void OnBecameDominantVisibleContent(bool is_dominant) override; |
- void OnSetCdm(CdmContext* cdm_context) override; |
- void OnMetadataChanged(const PipelineMetadata& metadata) override; |
- void OnRemotePlaybackDisabled(bool disabled) override; |
- void OnPlaying() override; |
- void OnPaused() override; |
- void OnSetPoster(const GURL& poster) override; |
- |
- void SetSwitchRendererCallback(const base::Closure& cb); |
- void SetRemoteSinkAvailableChangedCallback( |
- const base::Callback<void(bool)>& cb); |
- |
- using ShowInterstitialCallback = |
- base::Callback<void(const base::Optional<SkBitmap>&, |
- const gfx::Size&, |
- RemotingInterstitialType type)>; |
- // Called by RemoteRendererImpl constructor to set the callback to draw and |
- // show remoting interstial. |
- void SetShowInterstitialCallback(const ShowInterstitialCallback& cb); |
- using DownloadPosterCallback = |
- base::Callback<void(const GURL&, |
- const base::Callback<void(const SkBitmap&)>&)>; |
- // Set the callback to download poster image. |
- void SetDownloadPosterCallback(const DownloadPosterCallback& cb); |
- |
- base::WeakPtr<RemotingRendererController> GetWeakPtr() { |
- return weak_factory_.GetWeakPtr(); |
- } |
- |
- // Used by RemotingRendererFactory to query whether to create Media Remoting |
- // Renderer. |
- bool remote_rendering_started() const { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- return remote_rendering_started_; |
- } |
- |
- void StartDataPipe( |
- std::unique_ptr<mojo::DataPipe> audio_data_pipe, |
- std::unique_ptr<mojo::DataPipe> video_data_pipe, |
- const RemotingSourceImpl::DataPipeStartCallback& done_callback); |
- |
- // Used by RemotingRendererImpl to query the session state. |
- RemotingSourceImpl* remoting_source() const { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- return remoting_source_.get(); |
- } |
- |
- base::WeakPtr<remoting::RpcBroker> GetRpcBroker() const; |
- |
- // Called by RemoteRendererImpl when it encountered a fatal error. This will |
- // cause remoting to shut down and never start back up for the lifetime of |
- // this controller. |
- void OnRendererFatalError(remoting::StopTrigger stop_trigger); |
- |
- private: |
- bool has_audio() const { |
- return pipeline_metadata_.has_audio && |
- pipeline_metadata_.audio_decoder_config.IsValidConfig(); |
- } |
- |
- bool has_video() const { |
- return pipeline_metadata_.has_video && |
- pipeline_metadata_.video_decoder_config.IsValidConfig(); |
- } |
- |
- // Called when the session availability state may have changed. Each call to |
- // this method could cause a remoting session to be started or stopped; and if |
- // that happens, the |start_trigger| or |stop_trigger| must be the reason. |
- void UpdateFromSessionState(remoting::StartTrigger start_trigger, |
- remoting::StopTrigger stop_trigger); |
- |
- bool IsVideoCodecSupported(); |
- bool IsAudioCodecSupported(); |
- bool IsRemoteSinkAvailable(); |
- |
- // Helper to decide whether to enter or leave Remoting mode. |
- bool ShouldBeRemoting(); |
- |
- // Determines whether to enter or leave Remoting mode and switches if |
- // necessary. Each call to this method could cause a remoting session to be |
- // started or stopped; and if that happens, the |start_trigger| or |
- // |stop_trigger| must be the reason. |
- void UpdateAndMaybeSwitch(remoting::StartTrigger start_trigger, |
- remoting::StopTrigger stop_trigger); |
- |
- // Called to download the poster image. Called when: |
- // 1. Poster URL changes. |
- // 2. ShowInterstitialCallback is set. |
- // 3. DownloadPosterCallback is set. |
- void DownloadPosterImage(); |
- |
- // Called when poster image is downloaded. |
- void OnPosterImageDownloaded(const GURL& download_url, |
- base::TimeTicks download_start_time, |
- const SkBitmap& image); |
- |
- // Update remoting interstitial with |image|. When |image| is not set, |
- // interstitial will be drawn on previously downloaded poster image (in |
- // RemoteRendererImpl) or black background if none was downloaded before. |
- // Call this when: |
- // 1. SetShowInterstitialCallback() is called (RemoteRendererImpl is created). |
- // 2. The remoting session is shut down (to update the status message in the |
- // interstitial). |
- // 3. The size of the canvas is changed (to update the background image and |
- // the position of the status message). |
- // 4. Poster image is downloaded (to update the background image). |
- void UpdateInterstitial(const base::Optional<SkBitmap>& image); |
- |
- // Indicates whether this media element is in full screen. |
- bool is_fullscreen_ = false; |
- |
- // Indicates whether remoting is started. |
- bool remote_rendering_started_ = false; |
- |
- // Indicates whether audio or video is encrypted. |
- bool is_encrypted_ = false; |
- |
- // Indicates whether remote playback is currently disabled. This starts out as |
- // true, and should be updated at least once via a call to |
- // OnRemotePlaybackDisabled() at some point in the future. A web page |
- // typically sets/removes the disableRemotePlayback attribute on a |
- // HTMLMediaElement to disable/enable remoting of its content. Please see the |
- // Remote Playback API spec for more details: |
- // https://w3c.github.io/remote-playback |
- bool is_remote_playback_disabled_ = true; |
- |
- // Indicates whether video is the dominant visible content in the tab. |
- bool is_dominant_content_ = false; |
- |
- // Indicates whether video is paused. |
- bool is_paused_ = true; |
- |
- // Indicates whether OnRendererFatalError() has been called. This indicates |
- // one of several possible problems: 1) An environmental problem such as |
- // out-of-memory, insufficient network bandwidth, etc. 2) The receiver may |
- // have been unable to play-out the content correctly (e.g., not capable of a |
- // high frame rate at a high resolution). 3) An implementation bug. In any |
- // case, once a renderer encounters a fatal error, remoting will be shut down |
- // and never start again for the lifetime of this controller. |
- bool encountered_renderer_fatal_error_ = false; |
- |
- // The callback to switch the media renderer. |
- base::Closure switch_renderer_cb_; |
- |
- // Called when remoting sink availability is changed. |
- base::Callback<void(bool)> sink_available_changed_cb_; |
- |
- // This is initially the RemotingSourceImpl passed to the ctor, and might be |
- // replaced with a different instance later if OnSetCdm() is called. |
- scoped_refptr<RemotingSourceImpl> remoting_source_; |
- |
- // This is used to check all the methods are called on the current thread in |
- // debug builds. |
- base::ThreadChecker thread_checker_; |
- |
- // Current pipeline metadata. |
- PipelineMetadata pipeline_metadata_; |
- |
- // The callback to show remoting interstitial. It is set when entering the |
- // remoting mode (RemotingRendererImpl is constructed) by calling |
- // SetShowInterstitialCallback(), and is reset when leaving the remoting mode. |
- ShowInterstitialCallback show_interstitial_cb_; |
- |
- // Current poster URL, whose image will feed into the local UI. |
- GURL poster_url_; |
- |
- // The callback to download the poster image. Called when |poster_url_| |
- // changes during a remoting session or the show interstial callback is set. |
- // OnPosterImageDownloaded() will be called when download completes. |
- DownloadPosterCallback download_poster_cb_; |
- |
- // Records session events of interest. |
- remoting::SessionMetricsRecorder metrics_recorder_; |
- |
- base::WeakPtrFactory<RemotingRendererController> weak_factory_; |
- |
- DISALLOW_COPY_AND_ASSIGN(RemotingRendererController); |
-}; |
- |
-} // namespace media |
- |
-#endif // MEDIA_REMOTING_REMOTING_RENDERER_CONTROLLER_H_ |