Bug 1815783 - Expose media URL in MPRIS metadata r=media-playback-reviewers,padenot

Differential Revision: https://phabricator.services.mozilla.com/D219160
This commit is contained in:
delthas 2024-09-04 16:16:56 +00:00
parent 15334e611e
commit 5f4990c6aa
6 changed files with 38 additions and 0 deletions

View File

@ -199,6 +199,7 @@ bool MediaStatusManager::IsSessionOwningAudioFocus(
MediaMetadataBase MediaStatusManager::CreateDefaultMetadata() const {
MediaMetadataBase metadata;
metadata.mTitle = GetDefaultTitle();
metadata.mUrl = GetUrl();
metadata.mArtwork.AppendElement()->mSrc = GetDefaultFaviconURL();
LOG("Default media metadata, title=%s, album src=%s",
@ -236,6 +237,32 @@ nsString MediaStatusManager::GetDefaultTitle() const {
return documentTitle.IsEmpty() ? defaultTitle : documentTitle;
}
nsCString MediaStatusManager::GetUrl() const {
nsCString defaultUrl;
RefPtr<CanonicalBrowsingContext> bc =
CanonicalBrowsingContext::Get(mTopLevelBrowsingContextId);
if (!bc) {
return defaultUrl;
}
RefPtr<WindowGlobalParent> globalParent = bc->GetCurrentWindowGlobal();
if (!globalParent) {
return defaultUrl;
}
if (IsInPrivateBrowsing()) {
return defaultUrl;
}
nsIURI* documentURI = globalParent->GetDocumentURI();
if (!documentURI) {
return defaultUrl;
}
return documentURI->GetSpecOrDefault();
}
nsString MediaStatusManager::GetDefaultFaviconURL() const {
#ifdef MOZ_PLACES
nsCOMPtr<nsIURI> faviconURI;
@ -446,6 +473,7 @@ MediaMetadataBase MediaStatusManager::GetCurrentMediaMetadata() const {
}
MediaMetadataBase& metadata = *(info.mMetadata);
FillMissingTitleAndArtworkIfNeeded(metadata);
metadata.mUrl = GetUrl();
return metadata;
}
return CreateDefaultMetadata();

View File

@ -230,6 +230,7 @@ class MediaStatusManager : public IMediaInfoUpdater {
private:
nsString GetDefaultFaviconURL() const;
nsString GetDefaultTitle() const;
nsCString GetUrl() const;
MediaMetadataBase CreateDefaultMetadata() const;
bool IsInPrivateBrowsing() const;
void FillMissingTitleAndArtworkIfNeeded(MediaMetadataBase& aMetadata) const;

View File

@ -33,6 +33,7 @@ class MediaMetadataBase {
nsString mTitle;
nsString mArtist;
nsString mAlbum;
nsCString mUrl;
CopyableTArray<MediaImage> mArtwork;
};

View File

@ -50,6 +50,7 @@ struct ParamTraits<mozilla::dom::MediaMetadataBase> {
WriteParam(aWriter, aParam.mTitle);
WriteParam(aWriter, aParam.mArtist);
WriteParam(aWriter, aParam.mAlbum);
WriteParam(aWriter, aParam.mUrl);
WriteParam(aWriter, aParam.mArtwork);
}
@ -57,6 +58,7 @@ struct ParamTraits<mozilla::dom::MediaMetadataBase> {
if (!ReadParam(aReader, &(aResult->mTitle)) ||
!ReadParam(aReader, &(aResult->mArtist)) ||
!ReadParam(aReader, &(aResult->mAlbum)) ||
!ReadParam(aReader, &(aResult->mUrl)) ||
!ReadParam(aReader, &(aResult->mArtwork))) {
return false;
}

View File

@ -846,6 +846,11 @@ GVariant* MPRISServiceHandler::GetMetadataAsGVariant() const {
g_variant_new_string(static_cast<const gchar*>(
mMPRISMetadata.mArtUrl.get())));
}
if (!mMPRISMetadata.mUrl.IsEmpty()) {
g_variant_builder_add(&builder, "{sv}", "xesam:url",
g_variant_new_string(static_cast<const gchar*>(
mMPRISMetadata.mUrl.get())));
}
if (mPositionState.isSome()) {
CheckedInt64 length =
CheckedInt64((int64_t)mPositionState.value().mDuration) * 1000000;

View File

@ -124,6 +124,7 @@ class MPRISServiceHandler final : public dom::MediaControlKeySource {
mTitle = aMetadata.mTitle;
mArtist = aMetadata.mArtist;
mAlbum = aMetadata.mAlbum;
mUrl = aMetadata.mUrl;
mArtwork = aMetadata.mArtwork;
}
void Clear() {