Bug 1712147 - Add more missing MOZ_JXL checks r=tnikkel

This removes the check from static prefs, mainly since it's hard to check MOZ_JXL in JS side. It can be a bit confusing but generally shouldn't be harmful.

Differential Revision: https://phabricator.services.mozilla.com/D115704
This commit is contained in:
Kagami Sascha Rosylight 2021-05-22 05:33:48 +00:00
Родитель f1987ffe07
Коммит abd3d9776e
10 изменённых файлов: 51 добавлений и 29 удалений

Просмотреть файл

@ -58,10 +58,8 @@ nsresult mozilla::image::EnsureModuleInitialized() {
static ImageEnablementCookie kAVIFCookie = {
mozilla::StaticPrefs::image_avif_enabled, "image/avif"_ns};
#ifdef MOZ_JXL
static ImageEnablementCookie kJXLCookie = {
mozilla::StaticPrefs::image_jxl_enabled, "image/jxl"_ns};
#endif
static ImageEnablementCookie kWebPCookie = {
mozilla::StaticPrefs::image_webp_enabled, "image/webp"_ns};
Preferences::RegisterCallbackAndCall(UpdateContentViewerRegistration,

Просмотреть файл

@ -135,7 +135,9 @@ static int RunDecodeToSurfaceFuzzingJXL(nsCOMPtr<nsIInputStream> inputStream) {
int FuzzingInitImage(int* argc, char*** argv) {
Preferences::SetBool("image.avif.enabled", true);
#ifdef MOZ_JXL
Preferences::SetBool("image.jxl.enabled", true);
#endif
nsCOMPtr<imgITools> imgTools =
do_CreateInstance("@mozilla.org/image/tools;1");
@ -168,5 +170,7 @@ MOZ_FUZZING_INTERFACE_STREAM(FuzzingInitImage, RunDecodeToSurfaceFuzzingWebP,
MOZ_FUZZING_INTERFACE_STREAM(FuzzingInitImage, RunDecodeToSurfaceFuzzingAVIF,
ImageAVIF);
#ifdef MOZ_JXL
MOZ_FUZZING_INTERFACE_STREAM(FuzzingInitImage, RunDecodeToSurfaceFuzzingJXL,
ImageJXL);
#endif

Просмотреть файл

@ -47,9 +47,11 @@ AutoInitializeImageLib::AutoInitializeImageLib() {
rv = Preferences::SetBool("image.avif.enabled", true);
EXPECT_TRUE(rv == NS_OK);
#ifdef MOZ_JXL
// Ensure JXL is enabled to run decoder tests.
rv = Preferences::SetBool("image.jxl.enabled", true);
EXPECT_TRUE(rv == NS_OK);
#endif
// Ensure that ImageLib services are initialized.
nsCOMPtr<imgITools> imgTools =
@ -442,10 +444,6 @@ ImageTestCase GreenAVIFTestCase() {
.WithSurfaceFlags(SurfaceFlags::TO_SRGB_COLORSPACE);
}
ImageTestCase GreenJXLTestCase() {
return ImageTestCase("green.jxl", "image/jxl", IntSize(100, 100));
}
// Forcing sRGB is required until nsAVIFDecoder supports ICC profiles
// See bug 1634741
ImageTestCase Transparent10bit420AVIFTestCase() {
@ -824,11 +822,6 @@ ImageTestCase LargeAVIFTestCase() {
TEST_CASE_IGNORE_OUTPUT);
}
ImageTestCase LargeJXLTestCase() {
return ImageTestCase("large.jxl", "image/jxl", IntSize(1200, 660),
TEST_CASE_IGNORE_OUTPUT);
}
ImageTestCase GreenWebPIccSrgbTestCase() {
return ImageTestCase("green.icc_srgb.webp", "image/webp", IntSize(100, 100));
}
@ -925,11 +918,6 @@ ImageTestCase TransparentWebPTestCase() {
return test;
}
ImageTestCase TransparentJXLTestCase() {
return ImageTestCase("transparent.jxl", "image/jxl", IntSize(1200, 1200),
TEST_CASE_IS_TRANSPARENT);
}
ImageTestCase TransparentNoAlphaHeaderWebPTestCase() {
ImageTestCase test("transparent-no-alpha-header.webp", "image/webp",
IntSize(100, 100), TEST_CASE_IS_FUZZY);
@ -1019,11 +1007,6 @@ ImageTestCase DownscaledAVIFTestCase() {
IntSize(20, 20));
}
ImageTestCase DownscaledJXLTestCase() {
return ImageTestCase("downscaled.jxl", "image/jxl", IntSize(100, 100),
IntSize(20, 20));
}
ImageTestCase DownscaledTransparentICOWithANDMaskTestCase() {
// This test case is an ICO with AND mask transparency. We want to ensure that
// we can downscale it without crashing or triggering ASAN failures, but its
@ -1106,6 +1089,27 @@ ImageTestCase PerfRgbGIFTestCase() {
return ImageTestCase("perf_srgb.gif", "image/gif", IntSize(1000, 1000));
}
#ifdef MOZ_JXL
ImageTestCase GreenJXLTestCase() {
return ImageTestCase("green.jxl", "image/jxl", IntSize(100, 100));
}
ImageTestCase DownscaledJXLTestCase() {
return ImageTestCase("downscaled.jxl", "image/jxl", IntSize(100, 100),
IntSize(20, 20));
}
ImageTestCase LargeJXLTestCase() {
return ImageTestCase("large.jxl", "image/jxl", IntSize(1200, 660),
TEST_CASE_IGNORE_OUTPUT);
}
ImageTestCase TransparentJXLTestCase() {
return ImageTestCase("transparent.jxl", "image/jxl", IntSize(1200, 1200),
TEST_CASE_IS_TRANSPARENT);
}
#endif
ImageTestCase ExifResolutionTestCase() {
return ImageTestCase("exif_resolution.jpg", "image/jpeg", IntSize(100, 50));
}

Просмотреть файл

@ -476,7 +476,6 @@ ImageTestCase GreenICOTestCase();
ImageTestCase GreenIconTestCase();
ImageTestCase GreenWebPTestCase();
ImageTestCase GreenAVIFTestCase();
ImageTestCase GreenJXLTestCase();
ImageTestCase Transparent10bit420AVIFTestCase();
ImageTestCase Transparent10bit422AVIFTestCase();
@ -516,7 +515,6 @@ ImageTestCase Gray12bitFullRangeGrayscaleAVIFTestCase();
ImageTestCase StackCheckAVIFTestCase();
ImageTestCase LargeWebPTestCase();
ImageTestCase LargeJXLTestCase();
ImageTestCase GreenWebPIccSrgbTestCase();
ImageTestCase GreenFirstFrameAnimatedGIFTestCase();
@ -536,7 +534,6 @@ ImageTestCase CorruptICOWithBadBppTestCase();
ImageTestCase TransparentPNGTestCase();
ImageTestCase TransparentGIFTestCase();
ImageTestCase TransparentWebPTestCase();
ImageTestCase TransparentJXLTestCase();
ImageTestCase TransparentNoAlphaHeaderWebPTestCase();
ImageTestCase FirstFramePaddingGIFTestCase();
ImageTestCase TransparentIfWithinICOBMPTestCase(TestCaseFlags aFlags);
@ -554,7 +551,6 @@ ImageTestCase DownscaledBMPTestCase();
ImageTestCase DownscaledICOTestCase();
ImageTestCase DownscaledIconTestCase();
ImageTestCase DownscaledWebPTestCase();
ImageTestCase DownscaledJXLTestCase();
ImageTestCase DownscaledTransparentICOWithANDMaskTestCase();
ImageTestCase TruncatedSmallGIFTestCase();
@ -582,6 +578,13 @@ ImageTestCase LargeAVIFTestCase();
ImageTestCase MultiLayerAVIFTestCase();
ImageTestCase TransparentAVIFTestCase();
#ifdef MOZ_JXL
ImageTestCase GreenJXLTestCase();
ImageTestCase DownscaledJXLTestCase();
ImageTestCase LargeJXLTestCase();
ImageTestCase TransparentJXLTestCase();
#endif
ImageTestCase ExifResolutionTestCase();
RefPtr<Image> TestCaseToDecodedImage(const ImageTestCase&);

Просмотреть файл

@ -680,7 +680,9 @@ IMAGE_GTEST_DECODER_BASE_F(BMP)
IMAGE_GTEST_DECODER_BASE_F(ICO)
IMAGE_GTEST_DECODER_BASE_F(Icon)
IMAGE_GTEST_DECODER_BASE_F(WebP)
#ifdef MOZ_JXL
IMAGE_GTEST_DECODER_BASE_F(JXL)
#endif
TEST_F(ImageDecoders, ICOWithANDMaskDownscaleDuringDecode) {
CheckDownscaleDuringDecode(DownscaledTransparentICOWithANDMaskTestCase());
@ -865,9 +867,11 @@ TEST_F(ImageDecoders, AVIFDownscaleDuringDecode) {
CheckDownscaleDuringDecode(DownscaledAVIFTestCase());
}
#ifdef MOZ_JXL
TEST_F(ImageDecoders, JXLLargeMultiChunk) {
CheckDecoderMultiChunk(LargeJXLTestCase(), /* aChunkSize */ 64);
}
#endif
TEST_F(ImageDecoders, AnimatedGIFSingleChunk) {
CheckDecoderSingleChunk(GreenFirstFrameAnimatedGIFTestCase());

Просмотреть файл

@ -87,6 +87,7 @@ TEST_F(ImageLoader, DetectAVIFCompatibleBrand) {
CheckMimeType(buffer, sizeof(buffer), IMAGE_AVIF);
}
#ifdef MOZ_JXL
TEST_F(ImageLoader, DetectJXLCodestream) {
const char buffer[] = "\xff\x0a";
CheckMimeType(buffer, sizeof(buffer), IMAGE_JXL);
@ -99,6 +100,7 @@ TEST_F(ImageLoader, DetectJXLContainer) {
"\x0d\x0a\x87\x0a";
CheckMimeType(buffer, sizeof(buffer), IMAGE_JXL);
}
#endif
TEST_F(ImageLoader, DetectNonImageMP4) {
const char buffer[] =

Просмотреть файл

@ -153,10 +153,13 @@ TEST_F(ImageDecoderMetadata, BMP) { CheckMetadata(GreenBMPTestCase()); }
TEST_F(ImageDecoderMetadata, ICO) { CheckMetadata(GreenICOTestCase()); }
TEST_F(ImageDecoderMetadata, Icon) { CheckMetadata(GreenIconTestCase()); }
TEST_F(ImageDecoderMetadata, WebP) { CheckMetadata(GreenWebPTestCase()); }
#ifdef MOZ_JXL
TEST_F(ImageDecoderMetadata, JXL) { CheckMetadata(GreenJXLTestCase()); }
TEST_F(ImageDecoderMetadata, TransparentJXL) {
CheckMetadata(TransparentJXLTestCase());
}
#endif
TEST_F(ImageDecoderMetadata, AnimatedGIF) {
CheckMetadata(GreenFirstFrameAnimatedGIFTestCase());

Просмотреть файл

@ -29,7 +29,7 @@ skip-if(Android&&webrender) include ico/reftest.list
include jpeg/reftest.list
# JXL tests
skip-if(Android) include jxl/reftest.list
skip-if(Android||!jxl) include jxl/reftest.list
# GIF tests
include gif/reftest.list

Просмотреть файл

@ -528,7 +528,7 @@ function BuildConditionSandbox(aURL) {
// that isn't available to drawSnapshot (like any sort of
// compositor feature such as async scrolling).
sandbox.unsupportedWithDrawSnapshot = g.useDrawSnapshot;
sandbox.retainedDisplayList =
prefs.getBoolPref("layout.display-list.retain") && !sandbox.useDrawSnapshot;
@ -569,6 +569,12 @@ function BuildConditionSandbox(aURL) {
sandbox.webrtc = false;
#endif
#if MOZ_JXL
sandbox.jxl = true;
#else
sandbox.jxl = false;
#endif
let retainedDisplayListsEnabled = prefs.getBoolPref("layout.display-list.retain", false);
sandbox.retainedDisplayLists = retainedDisplayListsEnabled && !g.compareRetainedDisplayLists && !sandbox.useDrawSnapshot;
sandbox.compareRetainedDisplayLists = g.compareRetainedDisplayLists;

Просмотреть файл

@ -5513,13 +5513,11 @@
value: true
mirror: always
#ifdef MOZ_JXL
# Whether we attempt to decode JXL images or not.
- name: image.jxl.enabled
type: RelaxedAtomicBool
value: false
mirror: always
#endif
#---------------------------------------------------------------------------
# Prefs starting with "intl."