Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #ifndef CHROME_BROWSER_MEDIA_ROUTER_MEDIA_CONTROLLER_H_ | |
| 6 #define CHROME_BROWSER_MEDIA_ROUTER_MEDIA_CONTROLLER_H_ | |
| 7 | |
| 8 #include "base/observer_list.h" | |
| 9 #include "base/values.h" | |
| 10 #include "chrome/browser/media/router/media_route_id.h" | |
| 11 | |
| 12 namespace media_router { | |
| 13 | |
| 14 // A summary of the current status of the media playing on a route that can be | |
| 15 // rendered for the user in the browser. | |
| 16 class MediaStatus { | |
|
mark a. foltz
2015/02/27 05:48:10
This entire file is based on the assumption that t
Kevin M
2015/02/27 18:42:17
Done.
| |
| 17 public: | |
| 18 explicit MediaStatus(const MediaRouteId& media_route_id) : | |
| 19 media_route_id_(media_route_id) {} | |
| 20 | |
| 21 ~MediaStatus() {} | |
| 22 | |
| 23 // The media route identifier. | |
| 24 MediaRouteId media_route_id() const { return media_route_id_; } | |
| 25 | |
| 26 bool operator==(const MediaStatus& other) const { | |
| 27 return media_route_id_ == other.media_route_id_; | |
| 28 } | |
| 29 | |
| 30 bool operator!=(const MediaStatus& other) const { | |
| 31 return !(*this == other); | |
| 32 } | |
| 33 | |
| 34 // TODO(mfoltz): Fill in. | |
| 35 | |
| 36 private: | |
| 37 MediaRouteId media_route_id_; | |
| 38 }; | |
| 39 | |
| 40 // Possible media commands that may or may not be supported by a media route. | |
| 41 // The sink selection dialog should know how to render these. A bitfield is | |
| 42 // used to represent the commands enabled for a route so the values must be | |
| 43 // powers of two. | |
| 44 // | |
| 45 // NOTE: In the future, add commands like ENQUEUE, DEQUEUE, etc. if we want to | |
| 46 // control queueing functionality from the browser (or an app). | |
| 47 enum MediaCommand { | |
| 48 MEDIA_COMMAND_PAUSE = 1, | |
| 49 MEDIA_COMMAND_PLAY = 1 << 1, | |
| 50 MEDIA_COMMAND_RESUME = 1 << 2, | |
| 51 MEDIA_COMMAND_STOP = 1 << 3, | |
| 52 MEDIA_COMMAND_NEXT = 1 << 4, | |
| 53 MEDIA_COMMAND_PREVIOUS = 1 << 5, | |
| 54 MEDIA_COMMAND_SEEK_ABSOLUTE = 1 << 6, | |
| 55 MEDIA_COMMAND_SEEK_RELATIVE = 1 << 7, | |
| 56 MEDIA_COMMAND_VOLUME_UP = 1 << 8, | |
| 57 MEDIA_COMMAND_VOLUME_DOWN = 1 << 9, | |
| 58 MEDIA_COMMAND_VOLUME_MUTE = 1 << 10, | |
| 59 MEDIA_COMMAND_VOLUME_UNMUTE = 1 << 11 | |
| 60 }; | |
| 61 | |
| 62 // Bitwise-OR of different MediaCommands. | |
| 63 typedef uint64 MediaControlsCapabilities; | |
| 64 | |
| 65 // Allows the browser to control media associated with a media route. | |
| 66 // - Is this 1:1 with a MediaRoute or do we allow multiple controllers? | |
| 67 // - The MediaController will need a way to forward commands to the relevant | |
| 68 // MRP. Most likely, there will be a Delegate interface whose implementation | |
| 69 // will be provided by the MR. | |
| 70 class MediaController { | |
| 71 public: | |
| 72 explicit MediaController(const MediaRouteId& media_route_id); | |
| 73 virtual ~MediaController(); | |
| 74 | |
| 75 // Interface for clients that wish to be notified of changes to media status | |
| 76 // or the set of media controls. | |
| 77 class Observer { | |
| 78 public: | |
| 79 // Called when the status of media playing on the route has changed. | |
| 80 // |current_status| contains the last reported status for the route. | |
| 81 virtual void OnMediaStatusChange( | |
| 82 const MediaController* controller, | |
| 83 const MediaStatus& current_status) = 0; | |
| 84 // Called when the set of supported media controls for the route has | |
| 85 // changed. |current_media_commands| contains the last reported media | |
| 86 // controls for the route. | |
| 87 virtual void OnMediaControlsCapabilitiesChange( | |
| 88 const MediaController* controller, | |
| 89 MediaControlsCapabilities current_capabilities) = 0; | |
| 90 }; | |
| 91 void AddObserver(MediaController::Observer* observer); | |
| 92 void RemoveObserver(MediaController::Observer* observer); | |
| 93 | |
| 94 // The id of the media route being controlled. | |
| 95 MediaRouteId media_route_id() const { return media_route_id_; } | |
| 96 | |
| 97 // Sends the media command to the MRP to control the media on the designated | |
| 98 // route. TODO: Return an error code for client side errors, e.g. unsupported | |
| 99 // command, route is closed, etc. | |
| 100 virtual void Pause() = 0; | |
| 101 virtual void Resume() = 0; | |
| 102 virtual void Play() = 0; | |
| 103 virtual void Stop() = 0; | |
| 104 virtual void Next() = 0; | |
| 105 virtual void Previous() = 0; | |
| 106 // Seeks the media to a position relative to the current play position. | |
| 107 // |seek_seconds| may be positive (to seek forward in the stream) or negative | |
| 108 // (to seek backward). | |
| 109 virtual void SeekRelative(double seek_seconds) = 0; | |
| 110 // Seeks the media to an absolute position in the stream. |seek_seconds| must | |
| 111 // be non-negative. Seeking to a position beyond the duration of the stream | |
| 112 // is an error. | |
| 113 virtual void SeekAbsolute(double seek_seconds) = 0; | |
| 114 virtual void VolumeUp() = 0; | |
| 115 virtual void VolumeDown() = 0; | |
| 116 virtual void Mute() = 0; | |
| 117 virtual void Unmute() = 0; | |
| 118 | |
| 119 // Returns true if the controller supports |command|, false otherwise. | |
| 120 bool SupportsCommand(MediaCommand command) const; | |
| 121 | |
| 122 // Sets the new MediaStatus. This will notify the observers. | |
| 123 void set_media_status(const MediaStatus& status); | |
| 124 // Sets the new set of control capabilities. This will notify the observers. | |
| 125 void set_media_controls_capabilities(MediaControlsCapabilities capabilities); | |
| 126 | |
| 127 // Maybe add a way for the browser to request media status. | |
| 128 // Or cache the last known status here. | |
| 129 private: | |
| 130 MediaRouteId media_route_id_; | |
| 131 MediaControlsCapabilities media_controls_capabilities_; | |
| 132 MediaStatus media_status_; | |
| 133 | |
| 134 ObserverList<MediaController::Observer> observers_; | |
| 135 }; | |
| 136 | |
| 137 } // namespace media_router | |
| 138 | |
| 139 #endif // CHROME_BROWSER_MEDIA_ROUTER_MEDIA_CONTROLLER_H_ | |
| OLD | NEW |