| // Copyright 2018 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_BASE_FLINGING_CONTROLLER_H_ |
| #define MEDIA_BASE_FLINGING_CONTROLLER_H_ |
| |
| #include "base/time/time.h" |
| #include "media/base/media_controller.h" |
| #include "media/base/media_status_observer.h" |
| |
| namespace media { |
| |
| // Interface that groups all the necessary hooks to control media that is being |
| // flung to a cast device, as part of RemotePlayback. |
| // TODO(https://crbug.com/820277): Rename this interface to MediaRouteController |
| // and change media_router::MediaRouteController to MojoMediaRouteController. |
| class FlingingController { |
| public: |
| virtual ~FlingingController() = default; |
| |
| // Gets a MediaContoller owned by |this| to issue simple commands. |
| virtual MediaController* GetMediaController() = 0; |
| |
| // Subscribe or un-subscribe to changes in the media status. |
| virtual void AddMediaStatusObserver(MediaStatusObserver* observer) = 0; |
| virtual void RemoveMediaStatusObserver(MediaStatusObserver* observer) = 0; |
| |
| // Gets the current media playback time. Implementers may sacrifice precision |
| // to avoid a round-trip query to cast devices (see |
| // RemoteMediaPlayer.getApproximateStreamPosition() for example). |
| virtual base::TimeDelta GetApproximateCurrentTime() = 0; |
| }; |
| |
| } // namespace media |
| |
| #endif // MEDIA_BASE_FLINGING_CONTROLLER_H_ |