tor-browser

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

commit b46b09b3a730031227a46f200b82ebf7fe99b925
parent cf92280990d50fa532124ec1b848ddd4965a3d17
Author: Tom Schuster <tschuster@mozilla.com>
Date:   Mon, 10 Nov 2025 14:09:16 +0000

Bug 1944033 - Remove FetchImageHelper. r=media-playback-reviewers,aosmond

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

Diffstat:
Ddom/media/mediacontrol/FetchImageHelper.cpp | 164-------------------------------------------------------------------------------
Ddom/media/mediacontrol/FetchImageHelper.h | 82-------------------------------------------------------------------------------
Mdom/media/mediacontrol/moz.build | 2--
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",