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 mozilla {
|
||||||
namespace dom {
|
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)
|
MediaSessionController::MediaSessionController(uint64_t aContextId)
|
||||||
: mTopLevelBCId(aContextId) {
|
: mTopLevelBCId(aContextId) {
|
||||||
MOZ_DIAGNOSTIC_ASSERT(XRE_IsParentProcess(),
|
MOZ_DIAGNOSTIC_ASSERT(XRE_IsParentProcess(),
|
||||||
@ -51,13 +64,18 @@ void MediaSessionController::NotifySessionDestroyed(
|
|||||||
UpdateActiveMediaSessionContextId();
|
UpdateActiveMediaSessionContextId();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MediaSessionController::UpdateMetadata(uint64_t aSessionContextId,
|
void MediaSessionController::UpdateMetadata(
|
||||||
MediaMetadataBase& aMetadata) {
|
uint64_t aSessionContextId, const Maybe<MediaMetadataBase>& aMetadata) {
|
||||||
if (!mMetadataMap.Contains(aSessionContextId)) {
|
if (!mMetadataMap.Contains(aSessionContextId)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
LOG("Update metadata for session %" PRId64, aSessionContextId);
|
if (IsMetadataEmpty(aMetadata)) {
|
||||||
mMetadataMap.GetValue(aSessionContextId)->emplace(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() {
|
void MediaSessionController::UpdateActiveMediaSessionContextId() {
|
||||||
|
@ -46,7 +46,8 @@ class MediaSessionController {
|
|||||||
|
|
||||||
// Use this function to store the media metadata when media session updated
|
// Use this function to store the media metadata when media session updated
|
||||||
// its metadata in the content process.
|
// 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
|
// Return active media session's metadata if active media session exists and
|
||||||
// it has already set its metadata. Otherwise, return default media metadata
|
// it has already set its metadata. Otherwise, return default media metadata
|
||||||
|
Loading…
Reference in New Issue
Block a user