tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 1977203ccdbe0fa2714e63174bafb8ffbd081cdc
parent 1ba924db4f5170942397430e5f76e2303623dd0b
Author: Tom Schuster <tschuster@mozilla.com>
Date:   Mon, 10 Nov 2025 14:09:15 +0000

Bug 1944033 - Add MediaImageData. r=media-playback-reviewers,aosmond

Differential Revision: https://phabricator.services.mozilla.com/D271044

Diffstat:
Mdom/media/mediasession/MediaMetadata.cpp | 22++++++++++++++++------
Mdom/media/mediasession/MediaMetadata.h | 15++++++++++++++-
Mdom/media/mediasession/MediaSessionIPCUtils.h | 4++--
3 files changed, 32 insertions(+), 9 deletions(-)

diff --git a/dom/media/mediasession/MediaMetadata.cpp b/dom/media/mediasession/MediaMetadata.cpp @@ -14,6 +14,14 @@ namespace mozilla::dom { +MediaImage MediaImageData::ToMediaImage() const { + MediaImage image; + image.mSizes = mSizes; + image.mSrc = mSrc; + image.mType = mType; + return image; +} + // Only needed for refcounted objects. NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(MediaMetadata, mParent) NS_IMPL_CYCLE_COLLECTING_ADDREF(MediaMetadata) @@ -73,7 +81,7 @@ void MediaMetadata::GetArtwork(JSContext* aCx, nsTArray<JSObject*>& aRetVal, for (size_t i = 0; i < mArtwork.Length(); ++i) { JS::Rooted<JS::Value> value(aCx); - if (!ToJSValue(aCx, mArtwork[i], &value)) { + if (!ToJSValue(aCx, mArtwork[i].ToMediaImage(), &value)) { aRv.NoteJSContextException(aCx); return; } @@ -138,17 +146,19 @@ static nsresult ResolveURL(nsString& aURL, nsIURI* aBaseURI) { void MediaMetadata::SetArtworkInternal(const Sequence<MediaImage>& aArtwork, ErrorResult& aRv) { - nsTArray<MediaImage> artwork; - artwork.Assign(aArtwork); - nsCOMPtr<nsIURI> baseURI = GetEntryBaseURL(); - for (MediaImage& image : artwork) { - nsresult rv = ResolveURL(image.mSrc, baseURI); + + nsTArray<MediaImageData> artwork; + for (const MediaImage& image : aArtwork) { + MediaImageData imageData(image); + nsresult rv = ResolveURL(imageData.mSrc, baseURI); if (NS_WARN_IF(NS_FAILED(rv))) { aRv.ThrowTypeError<MSG_INVALID_URL>(NS_ConvertUTF16toUTF8(image.mSrc)); return; } + artwork.AppendElement(std::move(imageData)); } + mArtwork = std::move(artwork); } diff --git a/dom/media/mediasession/MediaMetadata.h b/dom/media/mediasession/MediaMetadata.h @@ -20,6 +20,19 @@ class ErrorResult; namespace dom { +class MediaImageData { + public: + MediaImageData() = default; + explicit MediaImageData(const MediaImage& aImage) + : mSizes(aImage.mSizes), mSrc(aImage.mSrc), mType(aImage.mType) {} + + MediaImage ToMediaImage() const; + + nsString mSizes; + nsString mSrc; + nsString mType; +}; + class MediaMetadataBase { public: MediaMetadataBase() = default; @@ -33,7 +46,7 @@ class MediaMetadataBase { nsString mArtist; nsString mAlbum; nsCString mUrl; - CopyableTArray<MediaImage> mArtwork; + CopyableTArray<MediaImageData> mArtwork; }; class MediaMetadata final : public nsISupports, diff --git a/dom/media/mediasession/MediaSessionIPCUtils.h b/dom/media/mediasession/MediaSessionIPCUtils.h @@ -23,8 +23,8 @@ typedef Maybe<MediaMetadataBase> MaybeMediaMetadataBase; namespace IPC { template <> -struct ParamTraits<mozilla::dom::MediaImage> { - typedef mozilla::dom::MediaImage paramType; +struct ParamTraits<mozilla::dom::MediaImageData> { + typedef mozilla::dom::MediaImageData paramType; static void Write(MessageWriter* aWriter, const paramType& aParam) { WriteParam(aWriter, aParam.mSizes);