1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/image/build/nsImageModule.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,122 @@ 1.4 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- 1.5 + * 1.6 + * This Source Code Form is subject to the terms of the Mozilla Public 1.7 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.8 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.9 + 1.10 +#include "nsImageModule.h" 1.11 + 1.12 +#include "mozilla/ModuleUtils.h" 1.13 +#include "nsMimeTypes.h" 1.14 + 1.15 +#include "ImageFactory.h" 1.16 +#include "RasterImage.h" 1.17 +#include "SurfaceCache.h" 1.18 + 1.19 +#include "imgLoader.h" 1.20 +#include "imgRequest.h" 1.21 +#include "imgRequestProxy.h" 1.22 +#include "imgTools.h" 1.23 +#include "DiscardTracker.h" 1.24 + 1.25 +#include "nsICOEncoder.h" 1.26 +#include "nsPNGEncoder.h" 1.27 +#include "nsJPEGEncoder.h" 1.28 +#include "nsBMPEncoder.h" 1.29 + 1.30 +// objects that just require generic constructors 1.31 +using namespace mozilla::image; 1.32 + 1.33 +NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(imgLoader, Init) 1.34 +NS_GENERIC_FACTORY_CONSTRUCTOR(imgRequestProxy) 1.35 +NS_GENERIC_FACTORY_CONSTRUCTOR(imgTools) 1.36 +NS_GENERIC_FACTORY_CONSTRUCTOR(nsICOEncoder) 1.37 +NS_GENERIC_FACTORY_CONSTRUCTOR(nsJPEGEncoder) 1.38 +NS_GENERIC_FACTORY_CONSTRUCTOR(nsPNGEncoder) 1.39 +NS_GENERIC_FACTORY_CONSTRUCTOR(nsBMPEncoder) 1.40 +NS_DEFINE_NAMED_CID(NS_IMGLOADER_CID); 1.41 +NS_DEFINE_NAMED_CID(NS_IMGREQUESTPROXY_CID); 1.42 +NS_DEFINE_NAMED_CID(NS_IMGTOOLS_CID); 1.43 +NS_DEFINE_NAMED_CID(NS_ICOENCODER_CID); 1.44 +NS_DEFINE_NAMED_CID(NS_JPEGENCODER_CID); 1.45 +NS_DEFINE_NAMED_CID(NS_PNGENCODER_CID); 1.46 +NS_DEFINE_NAMED_CID(NS_BMPENCODER_CID); 1.47 + 1.48 +static const mozilla::Module::CIDEntry kImageCIDs[] = { 1.49 + { &kNS_IMGLOADER_CID, false, nullptr, imgLoaderConstructor, }, 1.50 + { &kNS_IMGREQUESTPROXY_CID, false, nullptr, imgRequestProxyConstructor, }, 1.51 + { &kNS_IMGTOOLS_CID, false, nullptr, imgToolsConstructor, }, 1.52 + { &kNS_ICOENCODER_CID, false, nullptr, nsICOEncoderConstructor, }, 1.53 + { &kNS_JPEGENCODER_CID, false, nullptr, nsJPEGEncoderConstructor, }, 1.54 + { &kNS_PNGENCODER_CID, false, nullptr, nsPNGEncoderConstructor, }, 1.55 + { &kNS_BMPENCODER_CID, false, nullptr, nsBMPEncoderConstructor, }, 1.56 + { nullptr } 1.57 +}; 1.58 + 1.59 +static const mozilla::Module::ContractIDEntry kImageContracts[] = { 1.60 + { "@mozilla.org/image/cache;1", &kNS_IMGLOADER_CID }, 1.61 + { "@mozilla.org/image/loader;1", &kNS_IMGLOADER_CID }, 1.62 + { "@mozilla.org/image/request;1", &kNS_IMGREQUESTPROXY_CID }, 1.63 + { "@mozilla.org/image/tools;1", &kNS_IMGTOOLS_CID }, 1.64 + { "@mozilla.org/image/encoder;2?type=" IMAGE_ICO_MS, &kNS_ICOENCODER_CID }, 1.65 + { "@mozilla.org/image/encoder;2?type=" IMAGE_JPEG, &kNS_JPEGENCODER_CID }, 1.66 + { "@mozilla.org/image/encoder;2?type=" IMAGE_PNG, &kNS_PNGENCODER_CID }, 1.67 + { "@mozilla.org/image/encoder;2?type=" IMAGE_BMP, &kNS_BMPENCODER_CID }, 1.68 + { nullptr } 1.69 +}; 1.70 + 1.71 +static const mozilla::Module::CategoryEntry kImageCategories[] = { 1.72 + { "Gecko-Content-Viewers", IMAGE_GIF, "@mozilla.org/content/document-loader-factory;1" }, 1.73 + { "Gecko-Content-Viewers", IMAGE_JPEG, "@mozilla.org/content/document-loader-factory;1" }, 1.74 + { "Gecko-Content-Viewers", IMAGE_PJPEG, "@mozilla.org/content/document-loader-factory;1" }, 1.75 + { "Gecko-Content-Viewers", IMAGE_JPG, "@mozilla.org/content/document-loader-factory;1" }, 1.76 + { "Gecko-Content-Viewers", IMAGE_ICO, "@mozilla.org/content/document-loader-factory;1" }, 1.77 + { "Gecko-Content-Viewers", IMAGE_ICO_MS, "@mozilla.org/content/document-loader-factory;1" }, 1.78 + { "Gecko-Content-Viewers", IMAGE_BMP, "@mozilla.org/content/document-loader-factory;1" }, 1.79 + { "Gecko-Content-Viewers", IMAGE_BMP_MS, "@mozilla.org/content/document-loader-factory;1" }, 1.80 + { "Gecko-Content-Viewers", IMAGE_ICON_MS, "@mozilla.org/content/document-loader-factory;1" }, 1.81 + { "Gecko-Content-Viewers", IMAGE_PNG, "@mozilla.org/content/document-loader-factory;1" }, 1.82 + { "Gecko-Content-Viewers", IMAGE_X_PNG, "@mozilla.org/content/document-loader-factory;1" }, 1.83 + { "content-sniffing-services", "@mozilla.org/image/loader;1", "@mozilla.org/image/loader;1" }, 1.84 + { nullptr } 1.85 +}; 1.86 + 1.87 +static bool sInitialized = false; 1.88 +nsresult 1.89 +mozilla::image::InitModule() 1.90 +{ 1.91 + mozilla::image::DiscardTracker::Initialize(); 1.92 + mozilla::image::ImageFactory::Initialize(); 1.93 + mozilla::image::RasterImage::Initialize(); 1.94 + mozilla::image::SurfaceCache::Initialize(); 1.95 + imgLoader::GlobalInit(); 1.96 + sInitialized = true; 1.97 + return NS_OK; 1.98 +} 1.99 + 1.100 +void 1.101 +mozilla::image::ShutdownModule() 1.102 +{ 1.103 + if (!sInitialized) { 1.104 + return; 1.105 + } 1.106 + imgLoader::Shutdown(); 1.107 + mozilla::image::SurfaceCache::Shutdown(); 1.108 + mozilla::image::DiscardTracker::Shutdown(); 1.109 + sInitialized = false; 1.110 +} 1.111 + 1.112 +static const mozilla::Module kImageModule = { 1.113 + mozilla::Module::kVersion, 1.114 + kImageCIDs, 1.115 + kImageContracts, 1.116 + kImageCategories, 1.117 + nullptr, 1.118 + mozilla::image::InitModule, 1.119 + // We need to be careful about shutdown ordering to avoid intermittent crashes 1.120 + // when hashtable enumeration decides to destroy modules in an unfortunate 1.121 + // order. So our shutdown is invoked explicitly during layout module shutdown. 1.122 + nullptr 1.123 +}; 1.124 + 1.125 +NSMODULE_DEFN(nsImageLib2Module) = &kImageModule;