commit 01d56417ef9c72252ffe694010c2d7cf96adb2b9
parent 029db33aba3296b4345d92b3d8fd85f5694e1949
Author: Tom Schuster <tschuster@mozilla.com>
Date: Mon, 10 Nov 2025 11:36:55 +0000
Bug 1944033 - Add MediaImageData. r=media-playback-reviewers,aosmond
Differential Revision: https://phabricator.services.mozilla.com/D271044
Diffstat:
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);