mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-22 09:45:41 +00:00
Bug 1592037 - part1 : do not update empty metadata to media session controller. r=MeFisto94
If new coming metadata is `null` (when setting `MediaSession.metadata=null`) or an empty metadata [1], then we would like to reset the `Maybe` in `MediaSessionController` in order to use the default metadata when someone asks for the current metadata. [1] https://w3c.github.io/mediasession/#empty-metadata Differential Revision: https://phabricator.services.mozilla.com/D64844 --HG-- extra : moz-landing-system : lando
This commit is contained in:
parent
814194b463
commit
568289aac7
@ -25,6 +25,19 @@ mozilla::LazyLogModule gMediaSession("MediaSession");
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
static bool IsMetadataEmpty(const Maybe<MediaMetadataBase>& aMetadata) {
|
||||
// Media session's metadata is null.
|
||||
if (!aMetadata) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// All attirbutes in metadata are empty.
|
||||
// https://w3c.github.io/mediasession/#empty-metadata
|
||||
const MediaMetadataBase& metadata = *aMetadata;
|
||||
return metadata.mTitle.IsEmpty() && metadata.mArtist.IsEmpty() &&
|
||||
metadata.mAlbum.IsEmpty() && metadata.mArtwork.IsEmpty();
|
||||
}
|
||||
|
||||
MediaSessionController::MediaSessionController(uint64_t aContextId)
|
||||
: mTopLevelBCId(aContextId) {
|
||||
MOZ_DIAGNOSTIC_ASSERT(XRE_IsParentProcess(),
|
||||
@ -51,13 +64,18 @@ void MediaSessionController::NotifySessionDestroyed(
|
||||
UpdateActiveMediaSessionContextId();
|
||||
}
|
||||
|
||||
void MediaSessionController::UpdateMetadata(uint64_t aSessionContextId,
|
||||
MediaMetadataBase& aMetadata) {
|
||||
void MediaSessionController::UpdateMetadata(
|
||||
uint64_t aSessionContextId, const Maybe<MediaMetadataBase>& aMetadata) {
|
||||
if (!mMetadataMap.Contains(aSessionContextId)) {
|
||||
return;
|
||||
}
|
||||
LOG("Update metadata for session %" PRId64, aSessionContextId);
|
||||
mMetadataMap.GetValue(aSessionContextId)->emplace(aMetadata);
|
||||
if (IsMetadataEmpty(aMetadata)) {
|
||||
LOG("Reset metadata for session %" PRId64, aSessionContextId);
|
||||
mMetadataMap.GetValue(aSessionContextId)->reset();
|
||||
} else {
|
||||
LOG("Update metadata for session %" PRId64, aSessionContextId);
|
||||
mMetadataMap.GetValue(aSessionContextId)->emplace(*aMetadata);
|
||||
}
|
||||
}
|
||||
|
||||
void MediaSessionController::UpdateActiveMediaSessionContextId() {
|
||||
|
@ -46,7 +46,8 @@ class MediaSessionController {
|
||||
|
||||
// Use this function to store the media metadata when media session updated
|
||||
// its metadata in the content process.
|
||||
void UpdateMetadata(uint64_t aSessionContextId, MediaMetadataBase& aMetadata);
|
||||
void UpdateMetadata(uint64_t aSessionContextId,
|
||||
const Maybe<MediaMetadataBase>& aMetadata);
|
||||
|
||||
// Return active media session's metadata if active media session exists and
|
||||
// it has already set its metadata. Otherwise, return default media metadata
|
||||
|
Loading…
Reference in New Issue
Block a user