// 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_