Bug 1582508 - part1 : implement 'MediaSessionPlaybackState'. r=webidl,chunmin,Ehsan

Implement `playbackstate`[1] attribute for media session interface.

[1] https://w3c.github.io/mediasession/#dom-mediasession-playbackstate

Differential Revision: https://phabricator.services.mozilla.com/D66338

--HG--
extra : moz-landing-system : lando
This commit is contained in:
alwu 2020-03-13 23:31:16 +00:00
Родитель 0913d9141d
Коммит 9bf5424e0e
3 изменённых файлов: 30 добавлений и 2 удалений

Просмотреть файл

@ -39,6 +39,20 @@ void MediaSession::SetMetadata(MediaMetadata* aMetadata) {
NotifyMetadataUpdated();
}
void MediaSession::SetPlaybackState(
const MediaSessionPlaybackState& aPlaybackState) {
if (mDeclaredPlaybackState == aPlaybackState) {
return;
}
mDeclaredPlaybackState = aPlaybackState;
// TODO : propagate declared state to the media controller in chrome process
// in order to call `media session actions update algorithm`.
}
MediaSessionPlaybackState MediaSession::PlaybackState() const {
return mDeclaredPlaybackState;
}
void MediaSession::SetActionHandler(MediaSessionAction aAction,
MediaSessionActionHandler* aHandler) {
size_t index = static_cast<size_t>(aAction);

Просмотреть файл

@ -39,6 +39,10 @@ class MediaSession final : public nsISupports, public nsWrapperCache {
void SetMetadata(MediaMetadata* aMetadata);
void SetPlaybackState(const MediaSessionPlaybackState& aPlaybackState);
MediaSessionPlaybackState PlaybackState() const;
void SetActionHandler(MediaSessionAction aAction,
MediaSessionActionHandler* aHandler);
@ -72,6 +76,12 @@ class MediaSession final : public nsISupports, public nsWrapperCache {
RefPtr<MediaMetadata> mMediaMetadata;
static const size_t ACTIONS = MediaSessionActionValues::Count;
RefPtr<MediaSessionActionHandler> mActionHandlers[ACTIONS] = {nullptr};
// This is used as is a hint for the user agent to determine whether the
// browsing context is playing or paused.
// https://w3c.github.io/mediasession/#declared-playback-state
MediaSessionPlaybackState mDeclaredPlaybackState =
MediaSessionPlaybackState::None;
};
} // namespace dom

Просмотреть файл

@ -7,7 +7,11 @@
* https://w3c.github.io/mediasession/#idl-index
*/
// TODO: Implement MediaSessionPlaybackState (bug 1582508)
enum MediaSessionPlaybackState {
"none",
"paused",
"playing"
};
// TODO: Implement the missing seek* (bug 1580623) and skipad (bug 1582569) actions
enum MediaSessionAction {
@ -24,7 +28,7 @@ callback MediaSessionActionHandler = void(MediaSessionActionDetails details);
interface MediaSession {
attribute MediaMetadata? metadata;
// TODO: attribute MediaSessionPlaybackState playbackState; (bug 1582508)
attribute MediaSessionPlaybackState playbackState;
void setActionHandler(MediaSessionAction action, MediaSessionActionHandler? handler);