tor-browser

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

commit 62ef49b69a61ea57faf47232262aeb3ae680cf00
parent 896b57f2e72e189a651ba0837581f9f0d5931b96
Author: Tom Schuster <tschuster@mozilla.com>
Date:   Thu, 20 Nov 2025 10:14:42 +0000

Bug 2001129 - Add nsContentUtils::IPCImageToImage helper. r=tnikkel

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

Diffstat:
Mdom/base/nsContentUtils.cpp | 47++++++++++++++++++++++-------------------------
Mdom/base/nsContentUtils.h | 10++--------
Mdom/ipc/BrowserParent.cpp | 11++---------
Mimage/remote/RemoteImageProtocolHandler.cpp | 13+++----------
4 files changed, 29 insertions(+), 52 deletions(-)

diff --git a/dom/base/nsContentUtils.cpp b/dom/base/nsContentUtils.cpp @@ -8939,10 +8939,10 @@ nsresult nsContentUtils::IPCTransferableDataToTransferable( } case IPCTransferableDataType::TIPCTransferableDataImageContainer: { const auto& data = item.data().get_IPCTransferableDataImageContainer(); - nsCOMPtr<imgIContainer> container; - rv = DeserializeTransferableDataImageContainer( - data, getter_AddRefs(container)); - NS_ENSURE_SUCCESS(rv, rv); + nsCOMPtr<imgIContainer> container = IPCImageToImage(data.image()); + if (!container) { + return NS_ERROR_FAILURE; + } transferData = container; break; } @@ -9016,10 +9016,10 @@ nsresult nsContentUtils::IPCTransferableDataItemToVariant( } case IPCTransferableDataType::TIPCTransferableDataImageContainer: { const auto& data = aItem.data().get_IPCTransferableDataImageContainer(); - nsCOMPtr<imgIContainer> container; - nsresult rv = DeserializeTransferableDataImageContainer( - data, getter_AddRefs(container)); - NS_ENSURE_SUCCESS(rv, rv); + nsCOMPtr<imgIContainer> container = IPCImageToImage(data.image()); + if (!container) { + return NS_ERROR_FAILURE; + } return aVariant->SetAsISupports(container); } case IPCTransferableDataType::TIPCTransferableDataBlob: { @@ -9093,23 +9093,6 @@ static already_AddRefed<DataSourceSurface> BigBufferToDataSurface( aStride); } -nsresult nsContentUtils::DeserializeTransferableDataImageContainer( - const IPCTransferableDataImageContainer& aData, - imgIContainer** aContainer) { - RefPtr<DataSourceSurface> surface = IPCImageToSurface(aData.image()); - if (!surface) { - return NS_ERROR_FAILURE; - } - - RefPtr<gfxDrawable> drawable = - new gfxSurfaceDrawable(surface, surface->GetSize()); - nsCOMPtr<imgIContainer> imageContainer = - image::ImageOps::CreateFromDrawable(drawable); - imageContainer.forget(aContainer); - - return NS_OK; -} - bool nsContentUtils::IsFlavorImage(const nsACString& aFlavor) { return aFlavor.EqualsLiteral(kNativeImageMime) || aFlavor.EqualsLiteral(kJPEGImageMime) || @@ -9376,6 +9359,20 @@ already_AddRefed<DataSourceSurface> nsContentUtils::IPCImageToSurface( aImage.size().ToUnknownSize(), aImage.format()); } +already_AddRefed<imgIContainer> nsContentUtils::IPCImageToImage( + const IPCImage& aImage) { + RefPtr<DataSourceSurface> surface = IPCImageToSurface(aImage); + if (!surface) { + return nullptr; + } + + RefPtr<gfxDrawable> drawable = + new gfxSurfaceDrawable(surface, surface->GetSize()); + nsCOMPtr<imgIContainer> imageContainer = + image::ImageOps::CreateFromDrawable(drawable); + return imageContainer.forget(); +} + Modifiers nsContentUtils::GetWidgetModifiers(int32_t aModifiers) { Modifiers result = 0; if (aModifiers & nsIDOMWindowUtils::MODIFIER_SHIFT) { diff --git a/dom/base/nsContentUtils.h b/dom/base/nsContentUtils.h @@ -2975,14 +2975,6 @@ class nsContentUtils { aCallback); /** - * Given an IPCDataTransferImageContainer construct an imgIContainer for the - * image encoded by the transfer item. - */ - static nsresult DeserializeTransferableDataImageContainer( - const mozilla::dom::IPCTransferableDataImageContainer& aData, - imgIContainer** aContainer); - - /** * Given a flavor obtained from an IPCDataTransferItem or nsITransferable, * returns true if we should treat the data as an image. */ @@ -3031,6 +3023,8 @@ class nsContentUtils { mozilla::gfx::DataSourceSurface&); static already_AddRefed<mozilla::gfx::DataSourceSurface> IPCImageToSurface( const mozilla::dom::IPCImage&); + static already_AddRefed<imgIContainer> IPCImageToImage( + const mozilla::dom::IPCImage&); // Helpers shared by the implementations of nsContentUtils methods and // nsIDOMWindowUtils methods. diff --git a/dom/ipc/BrowserParent.cpp b/dom/ipc/BrowserParent.cpp @@ -106,14 +106,12 @@ #include "ColorPickerParent.h" #include "FilePickerParent.h" #include "IHistory.h" -#include "ImageOps.h" #include "MMPrinter.h" #include "PermissionMessageUtils.h" #include "ProcessPriorityManager.h" #include "StructuredCloneData.h" #include "UnitTransforms.h" #include "VsyncSource.h" -#include "gfxDrawable.h" #include "gfxUtils.h" #include "mozilla/NullPrincipal.h" #include "mozilla/ProfilerLabels.h" @@ -2371,15 +2369,10 @@ mozilla::ipc::IPCResult BrowserParent::RecvSetCursor( nsCOMPtr<imgIContainer> customCursorImage; if (aCustomCursor) { - RefPtr<gfx::DataSourceSurface> customCursorSurface = - nsContentUtils::IPCImageToSurface(*aCustomCursor); - if (!customCursorSurface) { + customCursorImage = nsContentUtils::IPCImageToImage(*aCustomCursor); + if (!customCursorImage) { return IPC_FAIL(this, "Invalid custom cursor data"); } - - RefPtr<gfxDrawable> drawable = new gfxSurfaceDrawable( - customCursorSurface, customCursorSurface->GetSize()); - customCursorImage = image::ImageOps::CreateFromDrawable(drawable); } mCursor = nsIWidget::Cursor{aCursor, diff --git a/image/remote/RemoteImageProtocolHandler.cpp b/image/remote/RemoteImageProtocolHandler.cpp @@ -5,8 +5,6 @@ #include "RemoteImageProtocolHandler.h" -#include "gfxDrawable.h" -#include "ImageOps.h" #include "imgITools.h" #include "nsContentUtils.h" #include "nsIPipe.h" @@ -71,17 +69,12 @@ static nsresult EncodeImage(const dom::IPCImage& aImage, do_GetService("@mozilla.org/image/tools;1", &rv); MOZ_TRY(rv); - RefPtr<gfx::DataSourceSurface> surface = - nsContentUtils::IPCImageToSurface(aImage); - if (!surface) { + nsCOMPtr<imgIContainer> imgContainer = + nsContentUtils::IPCImageToImage(aImage); + if (!imgContainer) { return NS_ERROR_FAILURE; } - RefPtr<gfxDrawable> drawable = - new gfxSurfaceDrawable(surface, surface->GetSize()); - nsCOMPtr<imgIContainer> imgContainer = - image::ImageOps::CreateFromDrawable(drawable); - nsCOMPtr<nsIInputStream> stream; MOZ_TRY(imgTools->EncodeImage(imgContainer, nsLiteralCString(IMAGE_PNG), u"png-zlib-level=0"_ns,