LCOV - code coverage report
Current view: top level - image/build - nsImageModule.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 15 26 57.7 %
Date: 2017-07-14 16:53:18 Functions: 3 9 33.3 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
       2             :  *
       3             :  * This Source Code Form is subject to the terms of the Mozilla Public
       4             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       5             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
       6             : 
       7             : #include "nsImageModule.h"
       8             : 
       9             : #include "mozilla/ModuleUtils.h"
      10             : #include "nsMimeTypes.h"
      11             : 
      12             : #include "DecodePool.h"
      13             : #include "ImageFactory.h"
      14             : #include "ShutdownTracker.h"
      15             : #include "SurfaceCache.h"
      16             : #include "SurfacePipe.h"
      17             : 
      18             : #include "gfxPrefs.h"
      19             : #include "imgLoader.h"
      20             : #include "imgRequest.h"
      21             : #include "imgRequestProxy.h"
      22             : #include "imgTools.h"
      23             : 
      24             : #include "nsICOEncoder.h"
      25             : #include "nsPNGEncoder.h"
      26             : #include "nsJPEGEncoder.h"
      27             : #include "nsBMPEncoder.h"
      28             : 
      29             : // objects that just require generic constructors
      30             : using namespace mozilla::image;
      31             : 
      32             : // XXX We would like to get rid of the imgLoader factory constructor.  See the
      33             : // comment documenting the imgLoader constructor.
      34           2 : NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(imgLoader, Init)
      35           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(imgRequestProxy)
      36           6 : NS_GENERIC_FACTORY_CONSTRUCTOR(imgTools)
      37           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsICOEncoder)
      38           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsJPEGEncoder)
      39           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsPNGEncoder)
      40           0 : NS_GENERIC_FACTORY_CONSTRUCTOR(nsBMPEncoder)
      41             : NS_DEFINE_NAMED_CID(NS_IMGLOADER_CID);
      42             : NS_DEFINE_NAMED_CID(NS_IMGREQUESTPROXY_CID);
      43             : NS_DEFINE_NAMED_CID(NS_IMGTOOLS_CID);
      44             : NS_DEFINE_NAMED_CID(NS_ICOENCODER_CID);
      45             : NS_DEFINE_NAMED_CID(NS_JPEGENCODER_CID);
      46             : NS_DEFINE_NAMED_CID(NS_PNGENCODER_CID);
      47             : NS_DEFINE_NAMED_CID(NS_BMPENCODER_CID);
      48             : 
      49             : static const mozilla::Module::CIDEntry kImageCIDs[] = {
      50             :   { &kNS_IMGLOADER_CID, false, nullptr, imgLoaderConstructor, },
      51             :   { &kNS_IMGREQUESTPROXY_CID, false, nullptr, imgRequestProxyConstructor, },
      52             :   { &kNS_IMGTOOLS_CID, false, nullptr, imgToolsConstructor, },
      53             :   { &kNS_ICOENCODER_CID, false, nullptr, nsICOEncoderConstructor, },
      54             :   { &kNS_JPEGENCODER_CID, false, nullptr, nsJPEGEncoderConstructor, },
      55             :   { &kNS_PNGENCODER_CID, false, nullptr, nsPNGEncoderConstructor, },
      56             :   { &kNS_BMPENCODER_CID, false, nullptr, nsBMPEncoderConstructor, },
      57             :   { nullptr }
      58             : };
      59             : 
      60             : static const mozilla::Module::ContractIDEntry kImageContracts[] = {
      61             :   { "@mozilla.org/image/cache;1", &kNS_IMGLOADER_CID },
      62             :   { "@mozilla.org/image/loader;1", &kNS_IMGLOADER_CID },
      63             :   { "@mozilla.org/image/request;1", &kNS_IMGREQUESTPROXY_CID },
      64             :   { "@mozilla.org/image/tools;1", &kNS_IMGTOOLS_CID },
      65             :   { "@mozilla.org/image/encoder;2?type=" IMAGE_ICO_MS, &kNS_ICOENCODER_CID },
      66             :   { "@mozilla.org/image/encoder;2?type=" IMAGE_JPEG, &kNS_JPEGENCODER_CID },
      67             :   { "@mozilla.org/image/encoder;2?type=" IMAGE_PNG, &kNS_PNGENCODER_CID },
      68             :   { "@mozilla.org/image/encoder;2?type=" IMAGE_BMP, &kNS_BMPENCODER_CID },
      69             :   { nullptr }
      70             : };
      71             : 
      72             : static const mozilla::Module::CategoryEntry kImageCategories[] = {
      73             :   { "Gecko-Content-Viewers", IMAGE_GIF, "@mozilla.org/content/document-loader-factory;1" },
      74             :   { "Gecko-Content-Viewers", IMAGE_JPEG, "@mozilla.org/content/document-loader-factory;1" },
      75             :   { "Gecko-Content-Viewers", IMAGE_PJPEG, "@mozilla.org/content/document-loader-factory;1" },
      76             :   { "Gecko-Content-Viewers", IMAGE_JPG, "@mozilla.org/content/document-loader-factory;1" },
      77             :   { "Gecko-Content-Viewers", IMAGE_ICO, "@mozilla.org/content/document-loader-factory;1" },
      78             :   { "Gecko-Content-Viewers", IMAGE_ICO_MS, "@mozilla.org/content/document-loader-factory;1" },
      79             :   { "Gecko-Content-Viewers", IMAGE_BMP, "@mozilla.org/content/document-loader-factory;1" },
      80             :   { "Gecko-Content-Viewers", IMAGE_BMP_MS, "@mozilla.org/content/document-loader-factory;1" },
      81             :   { "Gecko-Content-Viewers", IMAGE_ICON_MS, "@mozilla.org/content/document-loader-factory;1" },
      82             :   { "Gecko-Content-Viewers", IMAGE_PNG, "@mozilla.org/content/document-loader-factory;1" },
      83             :   { "Gecko-Content-Viewers", IMAGE_APNG, "@mozilla.org/content/document-loader-factory;1" },
      84             :   { "Gecko-Content-Viewers", IMAGE_X_PNG, "@mozilla.org/content/document-loader-factory;1" },
      85             :   { "content-sniffing-services", "@mozilla.org/image/loader;1", "@mozilla.org/image/loader;1" },
      86             :   { nullptr }
      87             : };
      88             : 
      89             : static bool sInitialized = false;
      90             : nsresult
      91           4 : mozilla::image::EnsureModuleInitialized()
      92             : {
      93           4 :   MOZ_ASSERT(NS_IsMainThread());
      94             : 
      95           4 :   if (sInitialized) {
      96           1 :     return NS_OK;
      97             :   }
      98             : 
      99             :   // Make sure the preferences are initialized
     100           3 :   gfxPrefs::GetSingleton();
     101             : 
     102           3 :   mozilla::image::ShutdownTracker::Initialize();
     103           3 :   mozilla::image::ImageFactory::Initialize();
     104           3 :   mozilla::image::DecodePool::Initialize();
     105           3 :   mozilla::image::SurfaceCache::Initialize();
     106           3 :   mozilla::image::SurfacePipe::Initialize();
     107           3 :   imgLoader::GlobalInit();
     108           3 :   sInitialized = true;
     109           3 :   return NS_OK;
     110             : }
     111             : 
     112             : void
     113           0 : mozilla::image::ShutdownModule()
     114             : {
     115           0 :   if (!sInitialized) {
     116           0 :     return;
     117             :   }
     118           0 :   imgLoader::Shutdown();
     119           0 :   mozilla::image::SurfaceCache::Shutdown();
     120           0 :   sInitialized = false;
     121             : }
     122             : 
     123             : static const mozilla::Module kImageModule = {
     124             :   mozilla::Module::kVersion,
     125             :   kImageCIDs,
     126             :   kImageContracts,
     127             :   kImageCategories,
     128             :   nullptr,
     129             :   mozilla::image::EnsureModuleInitialized,
     130             :   // We need to be careful about shutdown ordering to avoid intermittent crashes
     131             :   // when hashtable enumeration decides to destroy modules in an unfortunate
     132             :   // order. So our shutdown is invoked explicitly during layout module shutdown.
     133             :   nullptr
     134             : };
     135             : 
     136             : NSMODULE_DEFN(nsImageLib2Module) = &kImageModule;

Generated by: LCOV version 1.13