mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-25 11:58:55 +00:00
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:
parent
15334e611e
commit
5f4990c6aa
@ -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();
|
||||
|
@ -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;
|
||||
|
@ -33,6 +33,7 @@ class MediaMetadataBase {
|
||||
nsString mTitle;
|
||||
nsString mArtist;
|
||||
nsString mAlbum;
|
||||
nsCString mUrl;
|
||||
CopyableTArray<MediaImage> mArtwork;
|
||||
};
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user