commit 7e5eaaabc7b4ed3d23f8732f3ca93ed8057b283a parent 585dbdc65e01eadb60d3c32776304b7288872917 Author: Tom Ritter <tom@mozilla.com> Date: Mon, 6 Oct 2025 02:09:45 +0000 Bug 1980264: Plumb metatadata down to the Image Encoders r=tnikkel Image Encoders will be able to make use of a metadata (aka randomization) key that will influence the resulting output image. This patch just adds that variable into all the API surfaces it will need to be in to be accessible at the correct layer where we will use it. Differential Revision: https://phabricator.services.mozilla.com/D267097 Diffstat:
22 files changed, 92 insertions(+), 65 deletions(-)
diff --git a/dom/base/ImageEncoder.cpp b/dom/base/ImageEncoder.cpp @@ -152,7 +152,7 @@ class EncodingRunnable : public Runnable { EncodingCompleteEvent* aEncodingCompleteEvent, int32_t aFormat, const CSSIntSize aSize, CanvasUtils::ImageExtraction aExtractionBehavior, - bool aUsingCustomOptions) + const nsCString& aRandomizationKey, bool aUsingCustomOptions) : Runnable("EncodingRunnable"), mType(aType), mOptions(aOptions), @@ -163,22 +163,23 @@ class EncodingRunnable : public Runnable { mFormat(aFormat), mSize(aSize), mExtractionBehavior(aExtractionBehavior), + mRandomizationKey(aRandomizationKey), mUsingCustomOptions(aUsingCustomOptions) {} nsresult ProcessImageData(uint64_t* aImgSize, void** aImgData) { nsCOMPtr<nsIInputStream> stream; nsresult rv = ImageEncoder::ExtractDataInternal( mType, mOptions, mImageBuffer.get(), mFormat, mSize, - mExtractionBehavior, mImage, nullptr, nullptr, getter_AddRefs(stream), - mEncoder); + mExtractionBehavior, mRandomizationKey, mImage, nullptr, nullptr, + getter_AddRefs(stream), mEncoder); // If there are unrecognized custom parse options, we should fall back to // the default values for the encoder without any options at all. if (rv == NS_ERROR_INVALID_ARG && mUsingCustomOptions) { rv = ImageEncoder::ExtractDataInternal( mType, u""_ns, mImageBuffer.get(), mFormat, mSize, - mExtractionBehavior, mImage, nullptr, nullptr, getter_AddRefs(stream), - mEncoder); + mExtractionBehavior, mRandomizationKey, mImage, nullptr, nullptr, + getter_AddRefs(stream), mEncoder); } NS_ENSURE_SUCCESS(rv, rv); @@ -221,6 +222,7 @@ class EncodingRunnable : public Runnable { int32_t mFormat; const CSSIntSize mSize; CanvasUtils::ImageExtraction mExtractionBehavior; + nsCString mRandomizationKey; bool mUsingCustomOptions; }; @@ -228,6 +230,7 @@ class EncodingRunnable : public Runnable { nsresult ImageEncoder::ExtractData( nsAString& aType, const nsAString& aOptions, const CSSIntSize aSize, CanvasUtils::ImageExtraction aExtractionBehavior, + const nsCString& aRandomizationKey, nsICanvasRenderingContextInternal* aContext, OffscreenCanvasDisplayHelper* aOffscreenDisplay, nsIInputStream** aStream) { nsCOMPtr<imgIEncoder> encoder = ImageEncoder::GetImageEncoder(aType); @@ -236,14 +239,15 @@ nsresult ImageEncoder::ExtractData( } return ExtractDataInternal(aType, aOptions, nullptr, 0, aSize, - aExtractionBehavior, nullptr, aContext, - aOffscreenDisplay, aStream, encoder); + aExtractionBehavior, aRandomizationKey, nullptr, + aContext, aOffscreenDisplay, aStream, encoder); } /* static */ nsresult ImageEncoder::ExtractDataFromLayersImageAsync( nsAString& aType, const nsAString& aOptions, bool aUsingCustomOptions, layers::Image* aImage, CanvasUtils::ImageExtraction aExtractionBehavior, + const nsCString& aRandomizationKey, EncodeCompleteCallback* aEncodeCallback) { nsCOMPtr<imgIEncoder> encoder = ImageEncoder::GetImageEncoder(aType); if (!encoder) { @@ -254,10 +258,10 @@ nsresult ImageEncoder::ExtractDataFromLayersImageAsync( new EncodingCompleteEvent(aEncodeCallback); CSSIntSize size = CSSIntSize::FromUnknownSize(aImage->GetSize()); - nsCOMPtr<nsIRunnable> event = - new EncodingRunnable(aType, aOptions, nullptr, aImage, encoder, - completeEvent, imgIEncoder::INPUT_FORMAT_HOSTARGB, - size, aExtractionBehavior, aUsingCustomOptions); + nsCOMPtr<nsIRunnable> event = new EncodingRunnable( + aType, aOptions, nullptr, aImage, encoder, completeEvent, + imgIEncoder::INPUT_FORMAT_HOSTARGB, size, aExtractionBehavior, + VoidCString(), aUsingCustomOptions); return NS_DispatchBackgroundTask(event.forget()); } @@ -266,6 +270,7 @@ nsresult ImageEncoder::ExtractDataAsync( nsAString& aType, const nsAString& aOptions, bool aUsingCustomOptions, UniquePtr<uint8_t[]> aImageBuffer, int32_t aFormat, const CSSIntSize aSize, CanvasUtils::ImageExtraction aExtractionBehavior, + const nsCString& aRandomizationKey, EncodeCompleteCallback* aEncodeCallback) { nsCOMPtr<imgIEncoder> encoder = ImageEncoder::GetImageEncoder(aType); if (!encoder) { @@ -277,7 +282,8 @@ nsresult ImageEncoder::ExtractDataAsync( nsCOMPtr<nsIRunnable> event = new EncodingRunnable( aType, aOptions, std::move(aImageBuffer), nullptr, encoder, completeEvent, - aFormat, aSize, aExtractionBehavior, aUsingCustomOptions); + aFormat, aSize, aExtractionBehavior, aRandomizationKey, + aUsingCustomOptions); return NS_DispatchBackgroundTask(event.forget()); } @@ -286,10 +292,11 @@ nsresult ImageEncoder::GetInputStream(int32_t aWidth, int32_t aHeight, uint8_t* aImageBuffer, int32_t aFormat, imgIEncoder* aEncoder, const nsAString& aEncoderOptions, + const nsACString& aRandomizationKey, nsIInputStream** aStream) { - nsresult rv = - aEncoder->InitFromData(aImageBuffer, aWidth * aHeight * 4, aWidth, - aHeight, aWidth * 4, aFormat, aEncoderOptions); + nsresult rv = aEncoder->InitFromData(aImageBuffer, aWidth * aHeight * 4, + aWidth, aHeight, aWidth * 4, aFormat, + aEncoderOptions, aRandomizationKey); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<imgIEncoder> encoder(aEncoder); @@ -301,7 +308,8 @@ nsresult ImageEncoder::GetInputStream(int32_t aWidth, int32_t aHeight, nsresult ImageEncoder::ExtractDataInternal( const nsAString& aType, const nsAString& aOptions, uint8_t* aImageBuffer, int32_t aFormat, const CSSIntSize aSize, - CanvasUtils::ImageExtraction aExtractionBehavior, layers::Image* aImage, + CanvasUtils::ImageExtraction aExtractionBehavior, + const nsCString& aRandomizationKey, layers::Image* aImage, nsICanvasRenderingContextInternal* aContext, OffscreenCanvasDisplayHelper* aOffscreenDisplay, nsIInputStream** aStream, imgIEncoder* aEncoder) { @@ -344,7 +352,8 @@ nsresult ImageEncoder::ExtractDataInternal( } rv = aEncoder->InitFromData(map.mData, aSize.width * aSize.height * 4, aSize.width, aSize.height, aSize.width * 4, - imgIEncoder::INPUT_FORMAT_HOSTARGB, aOptions); + imgIEncoder::INPUT_FORMAT_HOSTARGB, aOptions, + VoidCString()); emptyCanvas->Unmap(); if (NS_SUCCEEDED(rv)) { imgStream = aEncoder; @@ -354,13 +363,13 @@ nsresult ImageEncoder::ExtractDataInternal( return NS_ERROR_INVALID_ARG; } - rv = ImageEncoder::GetInputStream(aSize.width, aSize.height, aImageBuffer, - aFormat, aEncoder, aOptions, - getter_AddRefs(imgStream)); + rv = ImageEncoder::GetInputStream( + aSize.width, aSize.height, aImageBuffer, aFormat, aEncoder, aOptions, + aRandomizationKey, getter_AddRefs(imgStream)); } else if (aContext) { NS_ConvertUTF16toUTF8 encoderType(aType); rv = aContext->GetInputStream(encoderType.get(), aOptions, - aExtractionBehavior, + aExtractionBehavior, aRandomizationKey, getter_AddRefs(imgStream)); } else if (aOffscreenDisplay) { const NS_ConvertUTF16toUTF8 encoderType(aType); @@ -387,7 +396,8 @@ nsresult ImageEncoder::ExtractDataInternal( auto size = data->GetSize(); rv = aEncoder->InitFromData(map.mData, size.width * size.height * 4, size.width, size.height, size.width * 4, - imgIEncoder::INPUT_FORMAT_HOSTARGB, aOptions); + imgIEncoder::INPUT_FORMAT_HOSTARGB, aOptions, + VoidCString()); data->Unmap(); } if (NS_SUCCEEDED(rv)) { @@ -417,10 +427,10 @@ nsresult ImageEncoder::ExtractDataInternal( return rv; } - rv = aEncoder->InitFromData(data.Elements(), - aSize.width * aSize.height * 4, aSize.width, - aSize.height, aSize.width * 4, - imgIEncoder::INPUT_FORMAT_HOSTARGB, aOptions); + rv = aEncoder->InitFromData( + data.Elements(), aSize.width * aSize.height * 4, aSize.width, + aSize.height, aSize.width * 4, imgIEncoder::INPUT_FORMAT_HOSTARGB, + aOptions, VoidCString()); } else { if (BufferSizeFromDimensions(aSize.width, aSize.height, 4) == 0) { return NS_ERROR_INVALID_ARG; @@ -437,7 +447,8 @@ nsresult ImageEncoder::ExtractDataInternal( auto size = dataSurface->GetSize(); rv = aEncoder->InitFromData(map.mData, size.width * size.height * 4, size.width, size.height, size.width * 4, - imgIEncoder::INPUT_FORMAT_HOSTARGB, aOptions); + imgIEncoder::INPUT_FORMAT_HOSTARGB, aOptions, + VoidCString()); dataSurface->Unmap(); } diff --git a/dom/base/ImageEncoder.h b/dom/base/ImageEncoder.h @@ -40,6 +40,7 @@ class ImageEncoder { static nsresult ExtractData(nsAString& aType, const nsAString& aOptions, const CSSIntSize aSize, CanvasUtils::ImageExtraction aExtractionBehavior, + const nsCString& aRandomizationKey, nsICanvasRenderingContextInternal* aContext, OffscreenCanvasDisplayHelper* aOffscreenDisplay, nsIInputStream** aStream); @@ -59,6 +60,7 @@ class ImageEncoder { nsAString& aType, const nsAString& aOptions, bool aUsingCustomOptions, UniquePtr<uint8_t[]> aImageBuffer, int32_t aFormat, const CSSIntSize aSize, CanvasUtils::ImageExtraction aExtractionBehavior, + const nsCString& aRandomizationKey, EncodeCompleteCallback* aEncodeCallback); // Extract an Image asynchronously. Its function is same as ExtractDataAsync @@ -69,6 +71,7 @@ class ImageEncoder { static nsresult ExtractDataFromLayersImageAsync( nsAString& aType, const nsAString& aOptions, bool aUsingCustomOptions, layers::Image* aImage, CanvasUtils::ImageExtraction aExtractionBehavior, + const nsCString& aRandomizationKey, EncodeCompleteCallback* aEncodeCallback); // Gives you a stream containing the image represented by aImageBuffer. @@ -78,6 +81,7 @@ class ImageEncoder { uint8_t* aImageBuffer, int32_t aFormat, imgIEncoder* aEncoder, const nsAString& aEncoderOptions, + const nsACString& aRandomizationKey, nsIInputStream** aStream); private: @@ -85,7 +89,8 @@ class ImageEncoder { static nsresult ExtractDataInternal( const nsAString& aType, const nsAString& aOptions, uint8_t* aImageBuffer, int32_t aFormat, const CSSIntSize aSize, - CanvasUtils::ImageExtraction aExtractionBehavior, layers::Image* aImage, + CanvasUtils::ImageExtraction aExtractionBehavior, + const nsCString& aRandomizationKey, layers::Image* aImage, nsICanvasRenderingContextInternal* aContext, OffscreenCanvasDisplayHelper* aOffscreenDisplay, nsIInputStream** aStream, imgIEncoder* aEncoder); diff --git a/dom/canvas/CanvasRenderingContext2D.cpp b/dom/canvas/CanvasRenderingContext2D.cpp @@ -2293,7 +2293,7 @@ NS_IMETHODIMP CanvasRenderingContext2D::GetInputStream( const char* aMimeType, const nsAString& aEncoderOptions, mozilla::CanvasUtils::ImageExtraction aExtractionBehavior, - nsIInputStream** aStream) { + const nsACString& aRandomizationKey, nsIInputStream** aStream) { nsCString enccid("@mozilla.org/image/encoder;2?type="); enccid += aMimeType; nsCOMPtr<imgIEncoder> encoder = do_CreateInstance(enccid.get()); @@ -2309,9 +2309,9 @@ CanvasRenderingContext2D::GetInputStream( return NS_ERROR_FAILURE; } - return ImageEncoder::GetInputStream(imageSize.width, imageSize.height, - imageBuffer.get(), format, encoder, - aEncoderOptions, aStream); + return ImageEncoder::GetInputStream( + imageSize.width, imageSize.height, imageBuffer.get(), format, encoder, + aEncoderOptions, aRandomizationKey, aStream); } already_AddRefed<mozilla::gfx::SourceSurface> diff --git a/dom/canvas/CanvasRenderingContext2D.h b/dom/canvas/CanvasRenderingContext2D.h @@ -502,7 +502,7 @@ class CanvasRenderingContext2D : public nsICanvasRenderingContextInternal, NS_IMETHOD GetInputStream( const char* aMimeType, const nsAString& aEncoderOptions, mozilla::CanvasUtils::ImageExtraction aExtractionBehavior, - nsIInputStream** aStream) override; + const nsACString& aRandomizationKey, nsIInputStream** aStream) override; already_AddRefed<mozilla::gfx::SourceSurface> GetOptimizedSnapshot( mozilla::gfx::DrawTarget* aTarget, gfxAlphaType* aOutAlphaType) override; diff --git a/dom/canvas/CanvasRenderingContextHelper.cpp b/dom/canvas/CanvasRenderingContextHelper.cpp @@ -62,6 +62,7 @@ void CanvasRenderingContextHelper::ToBlob( } } + nsCString randomizationKeyStr = VoidCString(); int32_t format = 0; auto imageSize = gfx::IntSize{elementSize.width, elementSize.height}; UniquePtr<uint8_t[]> imageBuffer = @@ -71,7 +72,7 @@ void CanvasRenderingContextHelper::ToBlob( aRv = ImageEncoder::ExtractDataAsync( aType, aEncodeOptions, aUsingCustomOptions, std::move(imageBuffer), format, CSSIntSize::FromUnknownSize(imageSize), aExtractionBehavior, - callback); + randomizationKeyStr, callback); } UniquePtr<uint8_t[]> CanvasRenderingContextHelper::GetImageBuffer( diff --git a/dom/canvas/ClientWebGLContext.cpp b/dom/canvas/ClientWebGLContext.cpp @@ -1358,8 +1358,8 @@ UniquePtr<uint8_t[]> ClientWebGLContext::GetImageBuffer( NS_IMETHODIMP ClientWebGLContext::GetInputStream( const char* mimeType, const nsAString& encoderOptions, - mozilla::CanvasUtils::ImageExtraction spoofing, - nsIInputStream** out_stream) { + mozilla::CanvasUtils::ImageExtraction extractionBehavior, + const nsACString& randomizationKey, nsIInputStream** out_stream) { // Use GetSurfaceSnapshot() to make sure that appropriate y-flip gets applied gfxAlphaType any; RefPtr<gfx::SourceSurface> snapshot = GetSurfaceSnapshot(&any); diff --git a/dom/canvas/ClientWebGLContext.h b/dom/canvas/ClientWebGLContext.h @@ -1009,10 +1009,10 @@ class ClientWebGLContext final : public nsICanvasRenderingContextInternal, UniquePtr<uint8_t[]> GetImageBuffer( mozilla::CanvasUtils::ImageExtraction aExtractionBehavior, int32_t* out_format, gfx::IntSize* out_imageSize) override; - NS_IMETHOD GetInputStream(const char* mimeType, - const nsAString& encoderOptions, - mozilla::CanvasUtils::ImageExtraction spoofing, - nsIInputStream** out_stream) override; + NS_IMETHOD GetInputStream( + const char* mimeType, const nsAString& encoderOptions, + mozilla::CanvasUtils::ImageExtraction extractionBehavior, + const nsACString& randomizationKey, nsIInputStream** out_stream) override; already_AddRefed<mozilla::gfx::SourceSurface> GetSurfaceSnapshot( gfxAlphaType* out_alphaType) override; diff --git a/dom/canvas/ImageBitmapRenderingContext.cpp b/dom/canvas/ImageBitmapRenderingContext.cpp @@ -209,7 +209,7 @@ NS_IMETHODIMP ImageBitmapRenderingContext::GetInputStream( const char* aMimeType, const nsAString& aEncoderOptions, mozilla::CanvasUtils::ImageExtraction aExtractionBehavior, - nsIInputStream** aStream) { + const nsACString& aRandomizationKey, nsIInputStream** aStream) { nsCString enccid("@mozilla.org/image/encoder;2?type="); enccid += aMimeType; nsCOMPtr<imgIEncoder> encoder = do_CreateInstance(enccid.get()); @@ -225,9 +225,9 @@ ImageBitmapRenderingContext::GetInputStream( return NS_ERROR_FAILURE; } - return ImageEncoder::GetInputStream(imageSize.width, imageSize.height, - imageBuffer.get(), format, encoder, - aEncoderOptions, aStream); + return ImageEncoder::GetInputStream( + imageSize.width, imageSize.height, imageBuffer.get(), format, encoder, + aEncoderOptions, aRandomizationKey, aStream); } already_AddRefed<mozilla::gfx::SourceSurface> diff --git a/dom/canvas/ImageBitmapRenderingContext.h b/dom/canvas/ImageBitmapRenderingContext.h @@ -75,7 +75,7 @@ class ImageBitmapRenderingContext final NS_IMETHOD GetInputStream( const char* aMimeType, const nsAString& aEncoderOptions, mozilla::CanvasUtils::ImageExtraction aExtractionBehavior, - nsIInputStream** aStream) override; + const nsACString& aRandomizationKey, nsIInputStream** aStream) override; virtual already_AddRefed<mozilla::gfx::SourceSurface> GetSurfaceSnapshot( gfxAlphaType* aOutAlphaType) override; diff --git a/dom/canvas/nsICanvasRenderingContextInternal.h b/dom/canvas/nsICanvasRenderingContextInternal.h @@ -122,10 +122,10 @@ class nsICanvasRenderingContextInternal : public nsISupports, // If the image format does not support transparency or includeTransparency // is false, alpha will be discarded and the result will be the image // composited on black. - NS_IMETHOD GetInputStream(const char* mimeType, - const nsAString& encoderOptions, - mozilla::CanvasUtils::ImageExtraction spoofing, - nsIInputStream** stream) = 0; + NS_IMETHOD GetInputStream( + const char* mimeType, const nsAString& encoderOptions, + mozilla::CanvasUtils::ImageExtraction extractionBehavior, + const nsACString& randomizationKey, nsIInputStream** stream) = 0; // This gets an Azure SourceSurface for the canvas, this will be a snapshot // of the canvas at the time it was called. diff --git a/dom/html/HTMLCanvasElement.cpp b/dom/html/HTMLCanvasElement.cpp @@ -941,7 +941,9 @@ nsresult HTMLCanvasElement::ExtractData(JSContext* aCx, OwnerDoc()->RecordCanvasUsage(usage); } - return ImageEncoder::ExtractData(aType, aOptions, GetSize(), spoofing, + nsCString randomizationKey = VoidCString(); + return ImageEncoder::ExtractData(aType, aOptions, GetSize(), + extractionBehaviour, randomizationKey, mCurrentContext, mOffscreenDisplay, aStream); } diff --git a/dom/media/imagecapture/CaptureTask.cpp b/dom/media/imagecapture/CaptureTask.cpp @@ -162,7 +162,7 @@ void CaptureTask::NotifyRealtimeTrackData(MediaTrackGraph* aGraph, nsAutoString options; rv = dom::ImageEncoder::ExtractDataFromLayersImageAsync( type, options, false, image, CanvasUtils::ImageExtraction::Unrestricted, - new EncodeComplete(this)); + VoidCString(), new EncodeComplete(this)); if (NS_FAILED(rv)) { PostTrackEndEvent(); } diff --git a/dom/webgpu/CanvasContext.cpp b/dom/webgpu/CanvasContext.cpp @@ -355,7 +355,7 @@ mozilla::UniquePtr<uint8_t[]> CanvasContext::GetImageBuffer( NS_IMETHODIMP CanvasContext::GetInputStream( const char* aMimeType, const nsAString& aEncoderOptions, mozilla::CanvasUtils::ImageExtraction aExtractionBehavior, - nsIInputStream** aStream) { + const nsACString& aRandomizationKey, nsIInputStream** aStream) { gfxAlphaType any; RefPtr<gfx::SourceSurface> snapshot = GetSurfaceSnapshot(&any); if (!snapshot) { diff --git a/dom/webgpu/CanvasContext.h b/dom/webgpu/CanvasContext.h @@ -60,7 +60,7 @@ class CanvasContext final : public nsICanvasRenderingContextInternal, NS_IMETHOD GetInputStream( const char* aMimeType, const nsAString& aEncoderOptions, mozilla::CanvasUtils::ImageExtraction aExtractionBehavior, - nsIInputStream** aStream) override; + const nsACString& aRandomizationKey, nsIInputStream** aStream) override; already_AddRefed<gfx::SourceSurface> GetSurfaceSnapshot( gfxAlphaType* aOutAlphaType) override; diff --git a/gfx/thebes/gfxUtils.cpp b/gfx/thebes/gfxUtils.cpp @@ -1126,7 +1126,7 @@ nsresult gfxUtils::EncodeSourceSurfaceAsStream(SourceSurface* aSurface, nsresult rv = encoder->InitFromData( map.mData, BufferSizeFromStrideAndHeight(map.mStride, size.height), size.width, size.height, map.mStride, imgIEncoder::INPUT_FORMAT_HOSTARGB, - aOutputOptions); + aOutputOptions, VoidCString()); dataSurface->Unmap(); if (NS_FAILED(rv)) { return NS_ERROR_FAILURE; @@ -1645,7 +1645,7 @@ nsresult gfxUtils::GetInputStream(gfx::DataSourceSurface* aSurface, return dom::ImageEncoder::GetInputStream( aSurface->GetSize().width, aSurface->GetSize().height, imageBuffer.get(), - format, encoder, aEncoderOptions, outStream); + format, encoder, aEncoderOptions, VoidCString(), outStream); } /* static */ @@ -1676,7 +1676,7 @@ nsresult gfxUtils::GetInputStreamWithRandomNoise( return dom::ImageEncoder::GetInputStream( aSurface->GetSize().width, aSurface->GetSize().height, imageBuffer.get(), - format, encoder, aEncoderOptions, outStream); + format, encoder, aEncoderOptions, VoidCString(), outStream); } class GetFeatureStatusWorkerRunnable final diff --git a/image/encoders/bmp/nsBMPEncoder.cpp b/image/encoders/bmp/nsBMPEncoder.cpp @@ -52,7 +52,8 @@ nsBMPEncoder::InitFromData(const uint8_t* aData, uint32_t aLength, // (unused, req'd by JS) uint32_t aWidth, uint32_t aHeight, uint32_t aStride, uint32_t aInputFormat, - const nsAString& aOutputOptions) { + const nsAString& aOutputOptions, + const nsACString& aRandomizationKey) { // validate input format if (aInputFormat != INPUT_FORMAT_RGB && aInputFormat != INPUT_FORMAT_RGBA && aInputFormat != INPUT_FORMAT_HOSTARGB) { diff --git a/image/encoders/ico/nsICOEncoder.cpp b/image/encoders/ico/nsICOEncoder.cpp @@ -45,7 +45,8 @@ NS_IMETHODIMP nsICOEncoder::InitFromData(const uint8_t* aData, uint32_t aLength, uint32_t aWidth, uint32_t aHeight, uint32_t aStride, uint32_t aInputFormat, - const nsAString& aOutputOptions) { + const nsAString& aOutputOptions, + const nsACString& aRandomizationKey) { // validate input format if (aInputFormat != INPUT_FORMAT_RGB && aInputFormat != INPUT_FORMAT_RGBA && aInputFormat != INPUT_FORMAT_HOSTARGB) { @@ -100,7 +101,8 @@ nsICOEncoder::AddImageFrame(const uint8_t* aData, uint32_t aLength, nsresult rv; nsAutoString noParams; rv = mContainedEncoder->InitFromData(aData, aLength, aWidth, aHeight, - aStride, aInputFormat, noParams); + aStride, aInputFormat, noParams, + VoidCString()); NS_ENSURE_SUCCESS(rv, rv); uint32_t PNGImageBufferSize; @@ -131,7 +133,8 @@ nsICOEncoder::AddImageFrame(const uint8_t* aData, uint32_t aLength, params.AppendInt(mICODirEntry.mBitCount); rv = mContainedEncoder->InitFromData(aData, aLength, aWidth, aHeight, - aStride, aInputFormat, params); + aStride, aInputFormat, params, + VoidCString()); NS_ENSURE_SUCCESS(rv, rv); uint32_t andMaskSize = ((GetRealWidth() + 31) / 32) * 4 * // row AND mask diff --git a/image/encoders/jpeg/nsJPEGEncoder.cpp b/image/encoders/jpeg/nsJPEGEncoder.cpp @@ -97,7 +97,8 @@ nsJPEGEncoder::InitFromData(const uint8_t* aData, uint32_t aLength, // (unused, req'd by JS) uint32_t aWidth, uint32_t aHeight, uint32_t aStride, uint32_t aInputFormat, - const nsAString& aOutputOptions) { + const nsAString& aOutputOptions, + const nsACString& aRandomizationKey) { NS_ENSURE_ARG(aData); // validate input format diff --git a/image/encoders/png/nsPNGEncoder.cpp b/image/encoders/png/nsPNGEncoder.cpp @@ -60,7 +60,8 @@ nsPNGEncoder::InitFromData(const uint8_t* aData, uint32_t aLength, // (unused, req'd by JS) uint32_t aWidth, uint32_t aHeight, uint32_t aStride, uint32_t aInputFormat, - const nsAString& aOutputOptions) { + const nsAString& aOutputOptions, + const nsACString& aRandomizationKey) { NS_ENSURE_ARG(aData); nsresult rv; diff --git a/image/encoders/webp/nsWebPEncoder.cpp b/image/encoders/webp/nsWebPEncoder.cpp @@ -50,7 +50,8 @@ nsWebPEncoder::InitFromData(const uint8_t* aData, uint32_t aLength, // (unused, req'd by JS) uint32_t aWidth, uint32_t aHeight, uint32_t aStride, uint32_t aInputFormat, - const nsAString& aOutputOptions) { + const nsAString& aOutputOptions, + const nsACString& aRandomizationKey) { NS_ENSURE_ARG(aData); // validate input format diff --git a/image/imgIEncoder.idl b/image/imgIEncoder.idl @@ -111,7 +111,8 @@ interface imgIEncoder : nsIAsyncInputStream in uint32_t height, in uint32_t stride, in uint32_t inputFormat, - in AString outputOptions); + in AString outputOptions, + in ACString randomizationKey); /* * For encoding images which may contain multiple frames, the 1-shot diff --git a/image/imgTools.cpp b/image/imgTools.cpp @@ -441,7 +441,7 @@ static nsresult EncodeImageData(DataSourceSurface* aDataSurface, // Encode the bitmap nsresult rv = encoder->InitFromData( aMap.GetData(), dataLength, size.width, size.height, aMap.GetStride(), - imgIEncoder::INPUT_FORMAT_HOSTARGB, aOutputOptions); + imgIEncoder::INPUT_FORMAT_HOSTARGB, aOutputOptions, VoidCString()); NS_ENSURE_SUCCESS(rv, rv); encoder.forget(aStream);