summaryrefslogtreecommitdiffstats
path: root/image/build/nsImageModule.cpp
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 19:33:14 +0000
commit36d22d82aa202bb199967e9512281e9a53db42c9 (patch)
tree105e8c98ddea1c1e4784a60a5a6410fa416be2de /image/build/nsImageModule.cpp
parentInitial commit. (diff)
downloadfirefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz
firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip
Adding upstream version 115.7.0esr.upstream/115.7.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'image/build/nsImageModule.cpp')
-rw-r--r--image/build/nsImageModule.cpp88
1 files changed, 88 insertions, 0 deletions
diff --git a/image/build/nsImageModule.cpp b/image/build/nsImageModule.cpp
new file mode 100644
index 0000000000..28fb8bb330
--- /dev/null
+++ b/image/build/nsImageModule.cpp
@@ -0,0 +1,88 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
+ *
+ * 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 "nsImageModule.h"
+
+#include "mozilla/ModuleUtils.h"
+#include "mozilla/Preferences.h"
+#include "mozilla/StaticPrefs_image.h"
+
+#include "DecodePool.h"
+#include "ImageFactory.h"
+#include "nsICategoryManager.h"
+#include "nsServiceManagerUtils.h"
+#include "ShutdownTracker.h"
+#include "SurfaceCache.h"
+#include "imgLoader.h"
+
+using namespace mozilla::image;
+
+struct ImageEnablementCookie {
+ bool (*mIsEnabled)();
+ const nsLiteralCString mMimeType;
+};
+
+static void UpdateContentViewerRegistration(const char* aPref, void* aData) {
+ auto* cookie = static_cast<ImageEnablementCookie*>(aData);
+
+ nsCOMPtr<nsICategoryManager> catMan =
+ do_GetService(NS_CATEGORYMANAGER_CONTRACTID);
+ if (!catMan) {
+ return;
+ }
+
+ static nsLiteralCString kCategory = "Gecko-Content-Viewers"_ns;
+ static nsLiteralCString kContractId =
+ "@mozilla.org/content/plugin/document-loader-factory;1"_ns;
+
+ if (cookie->mIsEnabled()) {
+ catMan->AddCategoryEntry(kCategory, cookie->mMimeType, kContractId,
+ false /* aPersist */, true /* aReplace */);
+ } else {
+ catMan->DeleteCategoryEntry(
+ kCategory, cookie->mMimeType, false /* aPersist */
+ );
+ }
+}
+
+static bool sInitialized = false;
+nsresult mozilla::image::EnsureModuleInitialized() {
+ MOZ_ASSERT(NS_IsMainThread());
+
+ if (sInitialized) {
+ return NS_OK;
+ }
+
+ static ImageEnablementCookie kAVIFCookie = {
+ mozilla::StaticPrefs::image_avif_enabled, "image/avif"_ns};
+ static ImageEnablementCookie kJXLCookie = {
+ mozilla::StaticPrefs::image_jxl_enabled, "image/jxl"_ns};
+ static ImageEnablementCookie kWebPCookie = {
+ mozilla::StaticPrefs::image_webp_enabled, "image/webp"_ns};
+ Preferences::RegisterCallbackAndCall(UpdateContentViewerRegistration,
+ "image.avif.enabled", &kAVIFCookie);
+ Preferences::RegisterCallbackAndCall(UpdateContentViewerRegistration,
+ "image.jxl.enabled", &kJXLCookie);
+ Preferences::RegisterCallbackAndCall(UpdateContentViewerRegistration,
+ "image.webp.enabled", &kWebPCookie);
+
+ mozilla::image::ShutdownTracker::Initialize();
+ mozilla::image::ImageFactory::Initialize();
+ mozilla::image::DecodePool::Initialize();
+ mozilla::image::SurfaceCache::Initialize();
+ imgLoader::GlobalInit();
+ sInitialized = true;
+ return NS_OK;
+}
+
+void mozilla::image::ShutdownModule() {
+ if (!sInitialized) {
+ return;
+ }
+ imgLoader::Shutdown();
+ mozilla::image::SurfaceCache::Shutdown();
+ sInitialized = false;
+}