Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1052)

Unified Diff: third_party/WebKit/Source/modules/mediasession/MediaSession.cpp

Issue 2583463002: [MediaSession] Add playbackState attribute to Blink MediaSession and use it to determine playback s… (Closed)
Patch Set: rebased Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/mediasession/MediaSession.cpp
diff --git a/third_party/WebKit/Source/modules/mediasession/MediaSession.cpp b/third_party/WebKit/Source/modules/mediasession/MediaSession.cpp
index e4579cbef0a803d6f2506b0999b0c8820e6110cc..a1d0e462e4638bdc5dfb0cec0dc7fe2aeccd38a0 100644
--- a/third_party/WebKit/Source/modules/mediasession/MediaSession.cpp
+++ b/third_party/WebKit/Source/modules/mediasession/MediaSession.cpp
@@ -29,8 +29,6 @@ const AtomicString& mojomActionToEventName(MediaSessionAction action) {
return EventTypeNames::play;
case MediaSessionAction::PAUSE:
return EventTypeNames::pause;
- case MediaSessionAction::PLAY_PAUSE:
- return EventTypeNames::playpause;
case MediaSessionAction::PREVIOUS_TRACK:
return EventTypeNames::previoustrack;
case MediaSessionAction::NEXT_TRACK:
@@ -51,8 +49,6 @@ WTF::Optional<MediaSessionAction> eventNameToMojomAction(
return MediaSessionAction::PLAY;
if (EventTypeNames::pause == eventName)
return MediaSessionAction::PAUSE;
- if (EventTypeNames::playpause == eventName)
- return MediaSessionAction::PLAY_PAUSE;
if (EventTypeNames::previoustrack == eventName)
return MediaSessionAction::PREVIOUS_TRACK;
if (EventTypeNames::nexttrack == eventName)
@@ -66,10 +62,40 @@ WTF::Optional<MediaSessionAction> eventNameToMojomAction(
return WTF::nullopt;
}
+const AtomicString& mediaSessionPlaybackStateToString(
+ mojom::blink::MediaSessionPlaybackState state) {
+ DEFINE_STATIC_LOCAL(const AtomicString, noneValue, ("none"));
+ DEFINE_STATIC_LOCAL(const AtomicString, pausedValue, ("paused"));
+ DEFINE_STATIC_LOCAL(const AtomicString, playingValue, ("playing"));
+
+ switch (state) {
+ case mojom::blink::MediaSessionPlaybackState::NONE:
+ return noneValue;
+ case mojom::blink::MediaSessionPlaybackState::PAUSED:
+ return pausedValue;
+ case mojom::blink::MediaSessionPlaybackState::PLAYING:
+ return playingValue;
+ }
+ NOTREACHED();
+ return WTF::emptyAtom;
+}
+
+mojom::blink::MediaSessionPlaybackState stringToMediaSessionPlaybackState(
+ const String& stateName) {
+ if (stateName == "none")
+ return mojom::blink::MediaSessionPlaybackState::NONE;
+ if (stateName == "paused")
+ return mojom::blink::MediaSessionPlaybackState::PAUSED;
+ DCHECK_EQ(stateName, "playing");
+ return mojom::blink::MediaSessionPlaybackState::PLAYING;
+}
+
} // anonymous namespace
MediaSession::MediaSession(ExecutionContext* executionContext)
- : ContextLifecycleObserver(executionContext), m_clientBinding(this) {}
+ : ContextLifecycleObserver(executionContext),
+ m_playbackState(mojom::blink::MediaSessionPlaybackState::NONE),
+ m_clientBinding(this) {}
MediaSession* MediaSession::create(ExecutionContext* executionContext) {
return new MediaSession(executionContext);
@@ -79,6 +105,17 @@ void MediaSession::dispose() {
m_clientBinding.Close();
}
+void MediaSession::setPlaybackState(const String& playbackState) {
+ m_playbackState = stringToMediaSessionPlaybackState(playbackState);
+ mojom::blink::MediaSessionService* service = getService();
+ if (service)
+ service->SetPlaybackState(m_playbackState);
+}
+
+String MediaSession::playbackState() {
+ return mediaSessionPlaybackStateToString(m_playbackState);
+}
+
void MediaSession::setMetadata(MediaMetadata* metadata) {
if (metadata)
metadata->setSession(this);

Powered by Google App Engine
This is Rietveld 408576698