commit 59332a010eb378b6656819bc798eb7477d70f2a6
parent 5d7b2b78ccbdd03698a47be1f9cff4eb335f00a2
Author: Tom Schuster <tschuster@mozilla.com>
Date: Mon, 10 Nov 2025 11:36:57 +0000
Bug 1944033 - Remove FetchImageHelper. r=media-playback-reviewers,aosmond
Differential Revision: https://phabricator.services.mozilla.com/D271204
Diffstat:
3 files changed, 0 insertions(+), 248 deletions(-)
diff --git a/dom/media/mediacontrol/FetchImageHelper.cpp b/dom/media/mediacontrol/FetchImageHelper.cpp
@@ -1,164 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#include "FetchImageHelper.h"
-
-#include "mozilla/Logging.h"
-#include "mozilla/NullPrincipal.h"
-#include "mozilla/gfx/2D.h"
-#include "nsIChannel.h"
-#include "nsNetUtil.h"
-
-mozilla::LazyLogModule gFetchImageLog("FetchImageHelper");
-
-#undef LOG
-#define LOG(msg, ...) \
- MOZ_LOG(gFetchImageLog, LogLevel::Debug, \
- ("FetchImageHelper=%p, " msg, this, ##__VA_ARGS__))
-
-using namespace mozilla::gfx;
-
-namespace mozilla::dom {
-
-FetchImageHelper::FetchImageHelper(const MediaImage& aImage)
- : mSrc(aImage.mSrc) {}
-
-FetchImageHelper::~FetchImageHelper() { AbortFetchingImage(); }
-
-RefPtr<ImagePromise> FetchImageHelper::FetchImage() {
- MOZ_ASSERT(NS_IsMainThread());
- if (IsFetchingImage()) {
- return mPromise.Ensure(__func__);
- }
-
- LOG("Start fetching image from %s", NS_ConvertUTF16toUTF8(mSrc).get());
- nsCOMPtr<nsIURI> uri;
- if (NS_FAILED(NS_NewURI(getter_AddRefs(uri), mSrc))) {
- LOG("Failed to create URI");
- return ImagePromise::CreateAndReject(false, __func__);
- }
-
- MOZ_ASSERT(!mListener);
- mListener = new ImageFetchListener();
- if (NS_FAILED(mListener->FetchDecodedImageFromURI(uri, this))) {
- LOG("Failed to decode image from async channel");
- return ImagePromise::CreateAndReject(false, __func__);
- }
- return mPromise.Ensure(__func__);
-}
-
-void FetchImageHelper::AbortFetchingImage() {
- MOZ_ASSERT(NS_IsMainThread());
- LOG("AbortFetchingImage");
- mPromise.RejectIfExists(false, __func__);
- ClearListenerIfNeeded();
-}
-
-void FetchImageHelper::ClearListenerIfNeeded() {
- if (mListener) {
- mListener->Clear();
- mListener = nullptr;
- }
-}
-
-bool FetchImageHelper::IsFetchingImage() const {
- MOZ_ASSERT(NS_IsMainThread());
- return !mPromise.IsEmpty() && mListener;
-}
-
-void FetchImageHelper::HandleFetchSuccess(imgIContainer* aImage) {
- MOZ_ASSERT(aImage);
- MOZ_ASSERT(NS_IsMainThread());
- MOZ_ASSERT(IsFetchingImage());
- LOG("Finished fetching image");
- mPromise.Resolve(aImage, __func__);
- ClearListenerIfNeeded();
-}
-
-void FetchImageHelper::HandleFetchFail() {
- MOZ_ASSERT(NS_IsMainThread());
- MOZ_ASSERT(IsFetchingImage());
- LOG("Reject the promise because of fetching failed");
- mPromise.RejectIfExists(false, __func__);
- ClearListenerIfNeeded();
-}
-
-/**
- * Implementation for FetchImageHelper::ImageFetchListener
- */
-NS_IMPL_ISUPPORTS(FetchImageHelper::ImageFetchListener, imgIContainerCallback)
-
-FetchImageHelper::ImageFetchListener::~ImageFetchListener() {
- MOZ_ASSERT(NS_IsMainThread());
- MOZ_ASSERT(!mHelper, "Cancel() should be called before desturction!");
-}
-
-nsresult FetchImageHelper::ImageFetchListener::FetchDecodedImageFromURI(
- nsIURI* aURI, FetchImageHelper* aHelper) {
- MOZ_ASSERT(!mHelper && !mChannel,
- "Should call Clear() berfore running another fetching process!");
- RefPtr<nsIPrincipal> nullPrincipal =
- NullPrincipal::CreateWithoutOriginAttributes();
- nsCOMPtr<nsIChannel> channel;
- nsresult rv =
- NS_NewChannel(getter_AddRefs(channel), aURI, nullPrincipal,
- nsILoadInfo::SEC_ALLOW_CROSS_ORIGIN_SEC_CONTEXT_IS_NULL,
- nsIContentPolicy::TYPE_INTERNAL_IMAGE, nullptr, nullptr,
- nullptr, nullptr, nsIRequest::LOAD_ANONYMOUS);
- if (NS_FAILED(rv)) {
- return rv;
- }
-
- nsCOMPtr<imgITools> imgTools = do_GetService("@mozilla.org/image/tools;1");
- if (!imgTools) {
- return NS_ERROR_FAILURE;
- }
-
- rv = imgTools->DecodeImageFromChannelAsync(aURI, channel, this, nullptr);
- if (NS_FAILED(rv)) {
- return NS_ERROR_FAILURE;
- }
- MOZ_ASSERT(aHelper);
- mHelper = aHelper;
- mChannel = channel;
- return NS_OK;
-}
-
-void FetchImageHelper::ImageFetchListener::Clear() {
- MOZ_ASSERT(NS_IsMainThread());
- if (mChannel) {
- mChannel->CancelWithReason(
- NS_BINDING_ABORTED, "FetchImageHelper::ImageFetchListener::Clear"_ns);
- mChannel = nullptr;
- }
- mHelper = nullptr;
-}
-
-bool FetchImageHelper::ImageFetchListener::IsFetchingImage() const {
- MOZ_ASSERT(NS_IsMainThread());
- return mHelper ? mHelper->IsFetchingImage() : false;
-}
-
-NS_IMETHODIMP FetchImageHelper::ImageFetchListener::OnImageReady(
- imgIContainer* aImage, nsresult aStatus) {
- MOZ_ASSERT(NS_IsMainThread());
- if (!IsFetchingImage()) {
- return NS_OK;
- }
- // We have received image, so we don't need the channel anymore.
- mChannel = nullptr;
-
- MOZ_ASSERT(mHelper);
- if (NS_FAILED(aStatus) || !aImage) {
- mHelper->HandleFetchFail();
- Clear();
- return aStatus;
- }
-
- mHelper->HandleFetchSuccess(aImage);
-
- return NS_OK;
-}
-
-} // namespace mozilla::dom
diff --git a/dom/media/mediacontrol/FetchImageHelper.h b/dom/media/mediacontrol/FetchImageHelper.h
@@ -1,82 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef DOM_MEDIA_MEDIACONTROL_FETCHIMAGEHELPER_H_
-#define DOM_MEDIA_MEDIACONTROL_FETCHIMAGEHELPER_H_
-
-#include "imgIContainer.h"
-#include "imgITools.h"
-#include "mozilla/MozPromise.h"
-#include "mozilla/dom/MediaSessionBinding.h"
-
-namespace mozilla::dom {
-/**
- * FetchImageHelper is used to fetch image data from MediaImage, and the fetched
- * image data would be used to show on the virtual control inferface. The URL of
- * MediaImage is defined by websites by using MediaSession API [1].
- *
- * By using `FetchImage()`, it would return a promise that would resolve with a
- * `imgIContainer`, then we can get the image data from the container.
- *
- * [1] https://w3c.github.io/mediasession/#dictdef-mediaimage
- */
-using ImagePromise = MozPromise<nsCOMPtr<imgIContainer>, bool,
- /* IsExclusive = */ true>;
-class FetchImageHelper final {
- public:
- explicit FetchImageHelper(const MediaImage& aImage);
- ~FetchImageHelper();
-
- // Return a promise which would be resolved with the decoded image surface
- // when we finish fetching and decoding image data, and it would be rejected
- // when we fail to fecth the image.
- RefPtr<ImagePromise> FetchImage();
-
- // Stop fetching and decoding image and reject the image promise. If we have
- // not started yet fetching image, then nothing would happen.
- void AbortFetchingImage();
-
- // Return true if we're fecthing image.
- bool IsFetchingImage() const;
-
- private:
- /**
- * ImageFetchListener is used to listen the notification of finishing fetching
- * image data (via `OnImageReady()`) and finishing decoding image data (via
- * `Notify()`).
- */
- class ImageFetchListener final : public imgIContainerCallback {
- public:
- NS_DECL_ISUPPORTS
- ImageFetchListener() = default;
-
- // Start an async channel to load the image, and return error if the channel
- // opens failed. It would use `aHelper::HandleFetchSuccess/Fail()` to notify
- // the result asynchronously.
- nsresult FetchDecodedImageFromURI(nsIURI* aURI, FetchImageHelper* aHelper);
- void Clear();
- bool IsFetchingImage() const;
-
- // Method of imgIContainerCallback
- NS_IMETHOD OnImageReady(imgIContainer* aImage, nsresult aStatus) override;
-
- private:
- ~ImageFetchListener();
-
- FetchImageHelper* MOZ_NON_OWNING_REF mHelper = nullptr;
- nsCOMPtr<nsIChannel> mChannel;
- };
-
- void ClearListenerIfNeeded();
- void HandleFetchSuccess(imgIContainer* aImage);
- void HandleFetchFail();
-
- nsString mSrc;
- MozPromiseHolder<ImagePromise> mPromise;
- RefPtr<ImageFetchListener> mListener;
-};
-
-} // namespace mozilla::dom
-
-#endif // DOM_MEDIA_MEDIACONTROL_FETCHIMAGEHELPER_H_
diff --git a/dom/media/mediacontrol/moz.build b/dom/media/mediacontrol/moz.build
@@ -7,7 +7,6 @@ EXPORTS.mozilla.dom += [
"AudioFocusManager.h",
"ContentMediaController.h",
"ContentPlaybackController.h",
- "FetchImageHelper.h",
"MediaControlKeyManager.h",
"MediaControlKeySource.h",
"MediaController.h",
@@ -25,7 +24,6 @@ UNIFIED_SOURCES += [
"AudioFocusManager.cpp",
"ContentMediaController.cpp",
"ContentPlaybackController.cpp",
- "FetchImageHelper.cpp",
"MediaControlKeyManager.cpp",
"MediaControlKeySource.cpp",
"MediaController.cpp",