Move CCodec_ModuleMgr ownership to CPDF_ModuleMgr.

More straight forward than CFX_GEModule owning in and CPDF_ModuleMgr
holding a pointer to it.

Remove assumptions that the codec modules may return nullptr, and do
IWYU.

Change-Id: Iba7fc3c7ec223fd6d29a1ab74ed13d35689bc5d5
Reviewed-on: https://pdfium-review.googlesource.com/5654
Commit-Queue: dsinclair <dsinclair@chromium.org>
Reviewed-by: dsinclair <dsinclair@chromium.org>
diff --git a/core/fpdfapi/cpdf_modulemgr.cpp b/core/fpdfapi/cpdf_modulemgr.cpp
index 8e39bdd..678997a8 100644
--- a/core/fpdfapi/cpdf_modulemgr.cpp
+++ b/core/fpdfapi/cpdf_modulemgr.cpp
@@ -45,10 +45,17 @@
   g_pDefaultMgr = nullptr;
 }
 
-CPDF_ModuleMgr::CPDF_ModuleMgr() : m_pCodecModule(nullptr) {}
+CPDF_ModuleMgr::CPDF_ModuleMgr() {}
 
 CPDF_ModuleMgr::~CPDF_ModuleMgr() {}
 
+void CPDF_ModuleMgr::Init() {
+  InitCodecModule();
+  InitPageModule();
+  LoadEmbeddedMaps();
+  LoadCodecModules();
+}
+
 void CPDF_ModuleMgr::LoadEmbeddedMaps() {
   LoadEmbeddedGB1CMaps();
   LoadEmbeddedJapan1CMaps();
@@ -74,30 +81,34 @@
 #endif
 }
 
+void CPDF_ModuleMgr::InitCodecModule() {
+  m_pCodecModule = pdfium::MakeUnique<CCodec_ModuleMgr>();
+}
+
 void CPDF_ModuleMgr::InitPageModule() {
   m_pPageModule = pdfium::MakeUnique<CPDF_PageModule>();
 }
 
 CCodec_FaxModule* CPDF_ModuleMgr::GetFaxModule() {
-  return m_pCodecModule ? m_pCodecModule->GetFaxModule() : nullptr;
+  return m_pCodecModule->GetFaxModule();
 }
 
 CCodec_JpegModule* CPDF_ModuleMgr::GetJpegModule() {
-  return m_pCodecModule ? m_pCodecModule->GetJpegModule() : nullptr;
+  return m_pCodecModule->GetJpegModule();
 }
 
 CCodec_JpxModule* CPDF_ModuleMgr::GetJpxModule() {
-  return m_pCodecModule ? m_pCodecModule->GetJpxModule() : nullptr;
+  return m_pCodecModule->GetJpxModule();
 }
 
 CCodec_Jbig2Module* CPDF_ModuleMgr::GetJbig2Module() {
-  return m_pCodecModule ? m_pCodecModule->GetJbig2Module() : nullptr;
+  return m_pCodecModule->GetJbig2Module();
 }
 
 CCodec_IccModule* CPDF_ModuleMgr::GetIccModule() {
-  return m_pCodecModule ? m_pCodecModule->GetIccModule() : nullptr;
+  return m_pCodecModule->GetIccModule();
 }
 
 CCodec_FlateModule* CPDF_ModuleMgr::GetFlateModule() {
-  return m_pCodecModule ? m_pCodecModule->GetFlateModule() : nullptr;
+  return m_pCodecModule->GetFlateModule();
 }
diff --git a/core/fpdfapi/cpdf_modulemgr.h b/core/fpdfapi/cpdf_modulemgr.h
index 898b6ea..82566ba 100644
--- a/core/fpdfapi/cpdf_modulemgr.h
+++ b/core/fpdfapi/cpdf_modulemgr.h
@@ -38,11 +38,7 @@
   static void Destroy();
   static const int kFileBufSize = 512;
 
-  void SetCodecModule(CCodec_ModuleMgr* pModule) { m_pCodecModule = pModule; }
-  CCodec_ModuleMgr* GetCodecModule() { return m_pCodecModule; }
-
-  void InitPageModule();
-  CPDF_PageModule* GetPageModule() const { return m_pPageModule.get(); }
+  void Init();
 
   void SetUnsupportInfoAdapter(
       std::unique_ptr<CFSDK_UnsupportInfo_Adapter> pAdapter) {
@@ -52,8 +48,8 @@
     return m_pUnsupportInfoAdapter.get();
   }
 
-  void LoadEmbeddedMaps();
-  void LoadCodecModules();
+  CCodec_ModuleMgr* GetCodecModule() const { return m_pCodecModule.get(); }
+  CPDF_PageModule* GetPageModule() const { return m_pPageModule.get(); }
 
   CCodec_FaxModule* GetFaxModule();
   CCodec_JpegModule* GetJpegModule();
@@ -66,12 +62,17 @@
   CPDF_ModuleMgr();
   ~CPDF_ModuleMgr();
 
+  void InitCodecModule();
+  void InitPageModule();
+  void LoadEmbeddedMaps();
+  void LoadCodecModules();
+
   void LoadEmbeddedGB1CMaps();
   void LoadEmbeddedCNS1CMaps();
   void LoadEmbeddedJapan1CMaps();
   void LoadEmbeddedKorea1CMaps();
 
-  CCodec_ModuleMgr* m_pCodecModule;
+  std::unique_ptr<CCodec_ModuleMgr> m_pCodecModule;
   std::unique_ptr<CPDF_PageModule> m_pPageModule;
   std::unique_ptr<CFSDK_UnsupportInfo_Adapter> m_pUnsupportInfoAdapter;
 };
diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
index b08dd8a..1f2d216 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
@@ -19,9 +19,7 @@
 
 class CPDF_PageContentGeneratorTest : public testing::Test {
  protected:
-  void SetUp() override {
-    CPDF_ModuleMgr::Get()->InitPageModule();
-  }
+  void SetUp() override { CPDF_ModuleMgr::Get()->Init(); }
 
   void TearDown() override {
     CPDF_ModuleMgr::Destroy();
diff --git a/core/fpdfapi/page/fpdf_page_colors.cpp b/core/fpdfapi/page/fpdf_page_colors.cpp
index e30c780..3ba833f 100644
--- a/core/fpdfapi/page/fpdf_page_colors.cpp
+++ b/core/fpdfapi/page/fpdf_page_colors.cpp
@@ -226,13 +226,11 @@
     m_nSrcComponents = 3;
     return;
   }
+  uint32_t nSrcComps = 0;
   auto* pIccModule = CPDF_ModuleMgr::Get()->GetIccModule();
-  if (pIccModule) {
-    uint32_t nSrcComps = 0;
-    m_pTransform = pIccModule->CreateTransform_sRGB(pData, dwSize, nSrcComps);
-    if (m_pTransform)
-      m_nSrcComponents = nSrcComps;
-  }
+  m_pTransform = pIccModule->CreateTransform_sRGB(pData, dwSize, nSrcComps);
+  if (m_pTransform)
+    m_nSrcComponents = nSrcComps;
 }
 
 CPDF_IccProfile::~CPDF_IccProfile() {
diff --git a/core/fpdfapi/parser/cpdf_document_unittest.cpp b/core/fpdfapi/parser/cpdf_document_unittest.cpp
index f052af3..2715508 100644
--- a/core/fpdfapi/parser/cpdf_document_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_document_unittest.cpp
@@ -153,10 +153,7 @@
 
 class cpdf_document_test : public testing::Test {
  public:
-  void SetUp() override {
-    CPDF_ModuleMgr* module_mgr = CPDF_ModuleMgr::Get();
-    module_mgr->InitPageModule();
-  }
+  void SetUp() override { CPDF_ModuleMgr::Get()->Init(); }
   void TearDown() override { CPDF_ModuleMgr::Destroy(); }
 };
 
diff --git a/core/fpdfapi/parser/fpdf_parser_decode.cpp b/core/fpdfapi/parser/fpdf_parser_decode.cpp
index 64831e9..561b662 100644
--- a/core/fpdfapi/parser/fpdf_parser_decode.cpp
+++ b/core/fpdfapi/parser/fpdf_parser_decode.cpp
@@ -549,8 +549,7 @@
                  uint8_t** dest_buf,
                  uint32_t* dest_size) {
   CCodec_ModuleMgr* pEncoders = CPDF_ModuleMgr::Get()->GetCodecModule();
-  return pEncoders &&
-         pEncoders->GetFlateModule()->Encode(src_buf, src_size, dest_buf,
+  return pEncoders->GetFlateModule()->Encode(src_buf, src_size, dest_buf,
                                              dest_size);
 }
 
@@ -559,8 +558,7 @@
                uint8_t** dest_buf,
                uint32_t* dest_size) {
   CCodec_ModuleMgr* pEncoders = CPDF_ModuleMgr::Get()->GetCodecModule();
-  return pEncoders &&
-         pEncoders->GetFlateModule()->PngEncode(src_buf, src_size, dest_buf,
+  return pEncoders->GetFlateModule()->PngEncode(src_buf, src_size, dest_buf,
                                                 dest_size);
 }
 
@@ -569,9 +567,6 @@
                      uint8_t*& dest_buf,
                      uint32_t& dest_size) {
   CCodec_ModuleMgr* pEncoders = CPDF_ModuleMgr::Get()->GetCodecModule();
-  if (pEncoders) {
-    return pEncoders->GetFlateModule()->FlateOrLZWDecode(
-        false, src_buf, src_size, false, 0, 0, 0, 0, 0, dest_buf, dest_size);
-  }
-  return 0;
+  return pEncoders->GetFlateModule()->FlateOrLZWDecode(
+      false, src_buf, src_size, false, 0, 0, 0, 0, 0, dest_buf, dest_size);
 }
diff --git a/core/fpdfapi/render/cpdf_dibsource.cpp b/core/fpdfapi/render/cpdf_dibsource.cpp
index f1c5803..3bb91ec 100644
--- a/core/fpdfapi/render/cpdf_dibsource.cpp
+++ b/core/fpdfapi/render/cpdf_dibsource.cpp
@@ -531,11 +531,9 @@
     m_pDecoder = FPDFAPI_CreateFlateDecoder(
         src_data, src_size, m_Width, m_Height, m_nComponents, m_bpc, pParams);
   } else if (decoder == "RunLengthDecode") {
-    m_pDecoder = CPDF_ModuleMgr::Get()
-                     ->GetCodecModule()
-                     ->GetBasicModule()
-                     ->CreateRunLengthDecoder(src_data, src_size, m_Width,
-                                              m_Height, m_nComponents, m_bpc);
+    CCodec_ModuleMgr* pEncoders = CPDF_ModuleMgr::Get()->GetCodecModule();
+    m_pDecoder = pEncoders->GetBasicModule()->CreateRunLengthDecoder(
+        src_data, src_size, m_Width, m_Height, m_nComponents, m_bpc);
   } else if (decoder == "DCTDecode") {
     if (!CreateDCTDecoder(src_data, src_size, pParams))
       return 0;
@@ -559,7 +557,8 @@
 bool CPDF_DIBSource::CreateDCTDecoder(const uint8_t* src_data,
                                       uint32_t src_size,
                                       const CPDF_Dictionary* pParams) {
-  m_pDecoder = CPDF_ModuleMgr::Get()->GetJpegModule()->CreateDecoder(
+  CCodec_JpegModule* pJpegModule = CPDF_ModuleMgr::Get()->GetJpegModule();
+  m_pDecoder = pJpegModule->CreateDecoder(
       src_data, src_size, m_Width, m_Height, m_nComponents,
       !pParams || pParams->GetIntegerFor("ColorTransform", 1));
   if (m_pDecoder)
@@ -568,7 +567,6 @@
   bool bTransform = false;
   int comps;
   int bpc;
-  CCodec_JpegModule* pJpegModule = CPDF_ModuleMgr::Get()->GetJpegModule();
   if (!pJpegModule->LoadInfo(src_data, src_size, &m_Width, &m_Height, &comps,
                              &bpc, &bTransform)) {
     return false;
@@ -576,7 +574,7 @@
 
   if (m_nComponents == static_cast<uint32_t>(comps)) {
     m_bpc = bpc;
-    m_pDecoder = CPDF_ModuleMgr::Get()->GetJpegModule()->CreateDecoder(
+    m_pDecoder = pJpegModule->CreateDecoder(
         src_data, src_size, m_Width, m_Height, m_nComponents, bTransform);
     return true;
   }
@@ -624,16 +622,13 @@
     return false;
 
   m_bpc = bpc;
-  m_pDecoder = CPDF_ModuleMgr::Get()->GetJpegModule()->CreateDecoder(
-      src_data, src_size, m_Width, m_Height, m_nComponents, bTransform);
+  m_pDecoder = pJpegModule->CreateDecoder(src_data, src_size, m_Width, m_Height,
+                                          m_nComponents, bTransform);
   return true;
 }
 
 void CPDF_DIBSource::LoadJpxBitmap() {
   CCodec_JpxModule* pJpxModule = CPDF_ModuleMgr::Get()->GetJpxModule();
-  if (!pJpxModule)
-    return;
-
   auto context = pdfium::MakeUnique<JpxBitMapContext>(pJpxModule);
   context->set_decoder(pJpxModule->CreateDecoder(
       m_pStreamAcc->GetData(), m_pStreamAcc->GetSize(), m_pColorSpace));
diff --git a/core/fxcodec/codec/fx_codec_progress.cpp b/core/fxcodec/codec/fx_codec_progress.cpp
index 4cbae5c..84ab6a1 100644
--- a/core/fxcodec/codec/fx_codec_progress.cpp
+++ b/core/fxcodec/codec/fx_codec_progress.cpp
@@ -1068,10 +1068,6 @@
     }
     case FXCODEC_IMAGE_JPG: {
       CCodec_JpegModule* pJpegModule = m_pCodecMgr->GetJpegModule();
-      if (!pJpegModule) {
-        m_status = FXCODEC_STATUS_ERR_MEMORY;
-        return false;
-      }
       m_pJpegContext = pJpegModule->Start();
       if (!m_pJpegContext) {
         m_status = FXCODEC_STATUS_ERR_MEMORY;
@@ -1873,9 +1869,9 @@
   }
   switch (m_imagType) {
     case FXCODEC_IMAGE_JPG: {
-      CCodec_JpegModule* pJpegModule = m_pCodecMgr->GetJpegModule();
       int down_scale = 1;
       GetDownScale(down_scale);
+      CCodec_JpegModule* pJpegModule = m_pCodecMgr->GetJpegModule();
       bool bStart = pJpegModule->StartScanline(m_pJpegContext, down_scale);
       while (!bStart) {
         FXCODEC_STATUS error_status = FXCODEC_STATUS_ERROR;
diff --git a/core/fxge/agg/fx_agg_driver.cpp b/core/fxge/agg/fx_agg_driver.cpp
index 08a6e09..6174f6e 100644
--- a/core/fxge/agg/fx_agg_driver.cpp
+++ b/core/fxge/agg/fx_agg_driver.cpp
@@ -11,7 +11,6 @@
 
 #include "core/fxcodec/fx_codec.h"
 #include "core/fxge/cfx_defaultrenderdevice.h"
-#include "core/fxge/cfx_gemodule.h"
 #include "core/fxge/cfx_graphstatedata.h"
 #include "core/fxge/cfx_pathdata.h"
 #include "core/fxge/dib/cfx_imagerenderer.h"
diff --git a/core/fxge/apple/fx_quartz_device.cpp b/core/fxge/apple/fx_quartz_device.cpp
index 5151b02..ad09f91 100644
--- a/core/fxge/apple/fx_quartz_device.cpp
+++ b/core/fxge/apple/fx_quartz_device.cpp
@@ -11,7 +11,6 @@
 #endif
 
 #include "core/fxcrt/fx_memory.h"
-#include "core/fxge/cfx_gemodule.h"
 #include "core/fxge/cfx_graphstatedata.h"
 #include "core/fxge/cfx_pathdata.h"
 #include "core/fxge/cfx_renderdevice.h"
diff --git a/core/fxge/cfx_gemodule.h b/core/fxge/cfx_gemodule.h
index 429f7d9..2816ca9 100644
--- a/core/fxge/cfx_gemodule.h
+++ b/core/fxge/cfx_gemodule.h
@@ -12,7 +12,6 @@
 #include "core/fxge/cfx_fontmgr.h"
 #include "core/fxge/fx_font.h"
 
-class CCodec_ModuleMgr;
 class CFX_FontCache;
 class CFX_FontMgr;
 
@@ -25,7 +24,6 @@
   CFX_FontCache* GetFontCache();
   CFX_FontMgr* GetFontMgr() { return m_pFontMgr.get(); }
 
-  CCodec_ModuleMgr* GetCodecModule() { return m_pCodecModule.get(); }
   void* GetPlatformData() { return m_pPlatformData; }
 
  private:
@@ -37,7 +35,6 @@
 
   std::unique_ptr<CFX_FontCache> m_pFontCache;
   std::unique_ptr<CFX_FontMgr> m_pFontMgr;
-  std::unique_ptr<CCodec_ModuleMgr> m_pCodecModule;
   void* m_pPlatformData;
   const char** m_pUserFontPaths;
 };
diff --git a/core/fxge/cfx_renderdevice.h b/core/fxge/cfx_renderdevice.h
index 6aa4528..4d8b407 100644
--- a/core/fxge/cfx_renderdevice.h
+++ b/core/fxge/cfx_renderdevice.h
@@ -9,7 +9,6 @@
 
 #include <memory>
 
-#include "core/fxge/cfx_gemodule.h"
 #include "core/fxge/fx_dib.h"
 #include "core/fxge/fx_font.h"
 
diff --git a/core/fxge/dib/cfx_bitmapcomposer.cpp b/core/fxge/dib/cfx_bitmapcomposer.cpp
index 604c0c2..3f75fae 100644
--- a/core/fxge/dib/cfx_bitmapcomposer.cpp
+++ b/core/fxge/dib/cfx_bitmapcomposer.cpp
@@ -7,7 +7,6 @@
 #include "core/fxge/dib/cfx_bitmapcomposer.h"
 
 #include "core/fxcodec/fx_codec.h"
-#include "core/fxge/cfx_gemodule.h"
 #include "core/fxge/dib/cfx_dibitmap.h"
 #include "core/fxge/ge/cfx_cliprgn.h"
 
diff --git a/core/fxge/dib/cfx_dibitmap.cpp b/core/fxge/dib/cfx_dibitmap.cpp
index 4cba073..48cbc32 100644
--- a/core/fxge/dib/cfx_dibitmap.cpp
+++ b/core/fxge/dib/cfx_dibitmap.cpp
@@ -11,7 +11,6 @@
 #include <utility>
 
 #include "core/fxcodec/fx_codec.h"
-#include "core/fxge/cfx_gemodule.h"
 #include "core/fxge/dib/cfx_scanlinecompositor.h"
 #include "core/fxge/ge/cfx_cliprgn.h"
 #include "third_party/base/ptr_util.h"
diff --git a/core/fxge/dib/cfx_scanlinecompositor.cpp b/core/fxge/dib/cfx_scanlinecompositor.cpp
index 8a0185f..5bd654b 100644
--- a/core/fxge/dib/cfx_scanlinecompositor.cpp
+++ b/core/fxge/dib/cfx_scanlinecompositor.cpp
@@ -9,7 +9,6 @@
 #include <algorithm>
 
 #include "core/fxcodec/fx_codec.h"
-#include "core/fxge/cfx_gemodule.h"
 
 #define FX_CCOLOR(val) (255 - (val))
 #define FXDIB_ALPHA_UNION(dest, src) ((dest) + (src) - (dest) * (src) / 255)
diff --git a/core/fxge/ge/cfx_gemodule.cpp b/core/fxge/ge/cfx_gemodule.cpp
index d7ae098..4516d61 100644
--- a/core/fxge/ge/cfx_gemodule.cpp
+++ b/core/fxge/ge/cfx_gemodule.cpp
@@ -6,7 +6,6 @@
 
 #include "core/fxge/cfx_gemodule.h"
 
-#include "core/fxcodec/fx_codec.h"
 #include "core/fxge/cfx_fontcache.h"
 #include "core/fxge/cfx_fontmgr.h"
 #include "core/fxge/ge/cfx_folderfontinfo.h"
@@ -21,7 +20,6 @@
 
 CFX_GEModule::CFX_GEModule()
     : m_pFontMgr(pdfium::MakeUnique<CFX_FontMgr>()),
-      m_pCodecModule(pdfium::MakeUnique<CCodec_ModuleMgr>()),
       m_pPlatformData(nullptr),
       m_pUserFontPaths(nullptr) {}
 
diff --git a/core/fxge/ge/cfx_renderdevice.cpp b/core/fxge/ge/cfx_renderdevice.cpp
index d2924bb..3949837 100644
--- a/core/fxge/ge/cfx_renderdevice.cpp
+++ b/core/fxge/ge/cfx_renderdevice.cpp
@@ -14,6 +14,7 @@
 #include "core/fxcrt/fx_safe_types.h"
 #include "core/fxge/cfx_defaultrenderdevice.h"
 #include "core/fxge/cfx_facecache.h"
+#include "core/fxge/cfx_gemodule.h"
 #include "core/fxge/cfx_graphstatedata.h"
 #include "core/fxge/cfx_pathdata.h"
 #include "core/fxge/dib/cfx_imagerenderer.h"
diff --git a/core/fxge/skia/fx_skia_device.cpp b/core/fxge/skia/fx_skia_device.cpp
index ca5a98c..dd48045 100644
--- a/core/fxge/skia/fx_skia_device.cpp
+++ b/core/fxge/skia/fx_skia_device.cpp
@@ -15,7 +15,6 @@
 #include "core/fxcodec/fx_codec.h"
 #include "core/fxcrt/fx_memory.h"
 #include "core/fxge/cfx_defaultrenderdevice.h"
-#include "core/fxge/cfx_gemodule.h"
 #include "core/fxge/cfx_graphstatedata.h"
 #include "core/fxge/cfx_pathdata.h"
 #include "core/fxge/cfx_renderdevice.h"
diff --git a/core/fxge/win32/cfx_psrenderer.cpp b/core/fxge/win32/cfx_psrenderer.cpp
index ba027ba..400babd 100644
--- a/core/fxge/win32/cfx_psrenderer.cpp
+++ b/core/fxge/win32/cfx_psrenderer.cpp
@@ -8,10 +8,12 @@
 
 #include <memory>
 
+#include "core/fpdfapi/cpdf_modulemgr.h"
 #include "core/fxcodec/fx_codec.h"
 #include "core/fxcrt/cfx_maybe_owned.h"
 #include "core/fxge/cfx_facecache.h"
 #include "core/fxge/cfx_fontcache.h"
+#include "core/fxge/cfx_gemodule.h"
 #include "core/fxge/cfx_pathdata.h"
 #include "core/fxge/cfx_renderdevice.h"
 #include "core/fxge/dib/cfx_dibextractor.h"
@@ -48,17 +50,17 @@
   if (src_size < 1024)
     return;
 
-  CCodec_ModuleMgr* pEncoders = CFX_GEModule::Get()->GetCodecModule();
+  CCodec_ModuleMgr* pEncoders = CPDF_ModuleMgr::Get()->GetCodecModule();
   uint8_t* dest_buf = nullptr;
   uint32_t dest_size = src_size;
   if (PSLevel >= 3) {
-    if (pEncoders && pEncoders->GetFlateModule()->Encode(
-                         src_buf, src_size, &dest_buf, &dest_size)) {
+    if (pEncoders->GetFlateModule()->Encode(src_buf, src_size, &dest_buf,
+                                            &dest_size)) {
       *filter = "/FlateDecode filter ";
     }
   } else {
-    if (pEncoders && pEncoders->GetBasicModule()->RunLengthEncode(
-                         src_buf, src_size, &dest_buf, &dest_size)) {
+    if (pEncoders->GetBasicModule()->RunLengthEncode(src_buf, src_size,
+                                                     &dest_buf, &dest_size)) {
       *filter = "/RunLengthDecode filter ";
     }
   }
@@ -681,9 +683,8 @@
 void CFX_PSRenderer::WritePSBinary(const uint8_t* data, int len) {
   uint8_t* dest_buf;
   uint32_t dest_size;
-  CCodec_ModuleMgr* pEncoders = CFX_GEModule::Get()->GetCodecModule();
-  if (pEncoders &&
-      pEncoders->GetBasicModule()->A85Encode(data, len, &dest_buf,
+  CCodec_ModuleMgr* pEncoders = CPDF_ModuleMgr::Get()->GetCodecModule();
+  if (pEncoders->GetBasicModule()->A85Encode(data, len, &dest_buf,
                                              &dest_size)) {
     m_pStream->WriteBlock(dest_buf, dest_size);
     FX_Free(dest_buf);
diff --git a/core/fxge/win32/fx_win32_device.cpp b/core/fxge/win32/fx_win32_device.cpp
index 2747339..b495251 100644
--- a/core/fxge/win32/fx_win32_device.cpp
+++ b/core/fxge/win32/fx_win32_device.cpp
@@ -15,6 +15,7 @@
 #include "core/fxcrt/fx_codepage.h"
 #include "core/fxcrt/fx_memory.h"
 #include "core/fxcrt/fx_system.h"
+#include "core/fxge/cfx_gemodule.h"
 #include "core/fxge/cfx_windowsrenderdevice.h"
 #include "core/fxge/dib/cfx_dibextractor.h"
 #include "core/fxge/dib/cfx_imagerenderer.h"
diff --git a/fpdfsdk/fpdfdoc_unittest.cpp b/fpdfsdk/fpdfdoc_unittest.cpp
index c63d6c2..449121d 100644
--- a/fpdfsdk/fpdfdoc_unittest.cpp
+++ b/fpdfsdk/fpdfdoc_unittest.cpp
@@ -58,10 +58,7 @@
   };
 
   void SetUp() override {
-    // We don't need page module or render module, but
-    // initialize them to keep the code sane.
-    CPDF_ModuleMgr* module_mgr = CPDF_ModuleMgr::Get();
-    module_mgr->InitPageModule();
+    CPDF_ModuleMgr::Get()->Init();
 
     m_pDoc = pdfium::MakeUnique<CPDF_TestPdfDocument>();
     m_pIndirectObjs = m_pDoc->GetHolder();
diff --git a/fpdfsdk/fpdfeditimg_unittest.cpp b/fpdfsdk/fpdfeditimg_unittest.cpp
index da6930c..0ff3db8 100644
--- a/fpdfsdk/fpdfeditimg_unittest.cpp
+++ b/fpdfsdk/fpdfeditimg_unittest.cpp
@@ -8,10 +8,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 
 class PDFEditTest : public testing::Test {
-  void SetUp() override {
-    CPDF_ModuleMgr* module_mgr = CPDF_ModuleMgr::Get();
-    module_mgr->InitPageModule();
-  }
+  void SetUp() override { CPDF_ModuleMgr::Get()->Init(); }
 
   void TearDown() override { CPDF_ModuleMgr::Destroy(); }
 };
diff --git a/fpdfsdk/fpdfview.cpp b/fpdfsdk/fpdfview.cpp
index 2bf6dfc..76913ce 100644
--- a/fpdfsdk/fpdfview.cpp
+++ b/fpdfsdk/fpdfview.cpp
@@ -360,10 +360,7 @@
   pModule->Init(cfg ? cfg->m_pUserFontPaths : nullptr);
 
   CPDF_ModuleMgr* pModuleMgr = CPDF_ModuleMgr::Get();
-  pModuleMgr->SetCodecModule(pModule->GetCodecModule());
-  pModuleMgr->InitPageModule();
-  pModuleMgr->LoadEmbeddedMaps();
-  pModuleMgr->LoadCodecModules();
+  pModuleMgr->Init();
 
 #ifdef PDF_ENABLE_XFA
   FXJSE_Initialize();
diff --git a/fxbarcode/oned/BC_OneDimWriter.cpp b/fxbarcode/oned/BC_OneDimWriter.cpp
index 66d62ca..a7539e4 100644
--- a/fxbarcode/oned/BC_OneDimWriter.cpp
+++ b/fxbarcode/oned/BC_OneDimWriter.cpp
@@ -27,7 +27,6 @@
 #include <vector>
 
 #include "core/fxge/cfx_defaultrenderdevice.h"
-#include "core/fxge/cfx_gemodule.h"
 #include "core/fxge/cfx_graphstatedata.h"
 #include "core/fxge/cfx_pathdata.h"
 #include "core/fxge/cfx_renderdevice.h"
diff --git a/fxbarcode/oned/BC_OnedEAN13Writer.cpp b/fxbarcode/oned/BC_OnedEAN13Writer.cpp
index 054d7a1..bae43b4 100644
--- a/fxbarcode/oned/BC_OnedEAN13Writer.cpp
+++ b/fxbarcode/oned/BC_OnedEAN13Writer.cpp
@@ -28,7 +28,6 @@
 #include <vector>
 
 #include "core/fxge/cfx_defaultrenderdevice.h"
-#include "core/fxge/cfx_gemodule.h"
 #include "fxbarcode/BC_Writer.h"
 #include "fxbarcode/oned/BC_OneDimWriter.h"
 
diff --git a/fxbarcode/oned/BC_OnedEAN8Writer.cpp b/fxbarcode/oned/BC_OnedEAN8Writer.cpp
index 3eb1ff8..49d77b7 100644
--- a/fxbarcode/oned/BC_OnedEAN8Writer.cpp
+++ b/fxbarcode/oned/BC_OnedEAN8Writer.cpp
@@ -28,7 +28,6 @@
 #include <vector>
 
 #include "core/fxge/cfx_defaultrenderdevice.h"
-#include "core/fxge/cfx_gemodule.h"
 #include "fxbarcode/BC_Writer.h"
 #include "fxbarcode/common/BC_CommonBitMatrix.h"
 #include "fxbarcode/oned/BC_OneDimWriter.h"
diff --git a/fxbarcode/oned/BC_OnedUPCAWriter.cpp b/fxbarcode/oned/BC_OnedUPCAWriter.cpp
index aaf0c52..614268e 100644
--- a/fxbarcode/oned/BC_OnedUPCAWriter.cpp
+++ b/fxbarcode/oned/BC_OnedUPCAWriter.cpp
@@ -25,7 +25,6 @@
 #include <vector>
 
 #include "core/fxge/cfx_defaultrenderdevice.h"
-#include "core/fxge/cfx_gemodule.h"
 #include "fxbarcode/BC_Writer.h"
 #include "fxbarcode/oned/BC_OneDimWriter.h"
 #include "fxbarcode/oned/BC_OnedEAN13Writer.h"
diff --git a/xfa/DEPS b/xfa/DEPS
index cc3061d..2dd4ef3 100644
--- a/xfa/DEPS
+++ b/xfa/DEPS
@@ -1,7 +1,5 @@
 include_rules = [
-  '+core/fpdfapi/parser',
-  '+core/fxcrt',
-  '+core/fxge',
+  '+core',
   '+fxbarcode',
   '+third_party/bigint'
 ]
diff --git a/xfa/fde/cfde_renderdevice.cpp b/xfa/fde/cfde_renderdevice.cpp
index 9236dc7..ec1fc2f 100644
--- a/xfa/fde/cfde_renderdevice.cpp
+++ b/xfa/fde/cfde_renderdevice.cpp
@@ -10,7 +10,6 @@
 #include <memory>
 #include <utility>
 
-#include "core/fxge/cfx_gemodule.h"
 #include "core/fxge/cfx_graphstatedata.h"
 #include "core/fxge/cfx_renderdevice.h"
 #include "core/fxge/cfx_substfont.h"
diff --git a/xfa/fgas/layout/cfx_rtfbreak_unittest.cpp b/xfa/fgas/layout/cfx_rtfbreak_unittest.cpp
index c8ffc4e..cef215f 100644
--- a/xfa/fgas/layout/cfx_rtfbreak_unittest.cpp
+++ b/xfa/fgas/layout/cfx_rtfbreak_unittest.cpp
@@ -8,6 +8,7 @@
 
 #include <memory>
 
+#include "core/fxge/cfx_gemodule.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/test_support.h"
 #include "third_party/base/ptr_util.h"
diff --git a/xfa/fxfa/DEPS b/xfa/fxfa/DEPS
index 97e9f52..886ee8e 100644
--- a/xfa/fxfa/DEPS
+++ b/xfa/fxfa/DEPS
@@ -1,8 +1,3 @@
 include_rules = [
-  '+core/fdrm/crypto',
-  '+core/fpdfapi/font',
-  '+core/fpdfapi/page',
-  '+core/fpdfdoc',
-  '+core/fxcodec',
   '+fxjs',
 ]
diff --git a/xfa/fxfa/app/DEPS b/xfa/fxfa/app/DEPS
deleted file mode 100644
index f722184..0000000
--- a/xfa/fxfa/app/DEPS
+++ /dev/null
@@ -1,3 +0,0 @@
-include_rules = [
-  '+core/fdrm/crypto',
-]
diff --git a/xfa/fxfa/cxfa_ffwidget.cpp b/xfa/fxfa/cxfa_ffwidget.cpp
index 7bbb8c8..2ea30b5 100644
--- a/xfa/fxfa/cxfa_ffwidget.cpp
+++ b/xfa/fxfa/cxfa_ffwidget.cpp
@@ -10,12 +10,12 @@
 #include <memory>
 #include <vector>
 
+#include "core/fpdfapi/cpdf_modulemgr.h"
 #include "core/fpdfapi/page/cpdf_pageobjectholder.h"
 #include "core/fxcodec/codec/ccodec_progressivedecoder.h"
 #include "core/fxcodec/fx_codec.h"
 #include "core/fxcrt/cfx_maybe_owned.h"
 #include "core/fxcrt/cfx_memorystream.h"
-#include "core/fxge/cfx_gemodule.h"
 #include "core/fxge/cfx_pathdata.h"
 #include "core/fxge/cfx_renderdevice.h"
 #include "core/fxge/dib/cfx_imagerenderer.h"
@@ -1120,18 +1120,11 @@
     FXCODEC_IMAGE_TYPE type,
     int32_t& iImageXDpi,
     int32_t& iImageYDpi) {
-  CFX_GEModule* pGeModule = CFX_GEModule::Get();
-  if (!pGeModule)
-    return nullptr;
-
-  CCodec_ModuleMgr* pCodecMgr = pGeModule->GetCodecModule();
-  if (!pCodecMgr)
-    return nullptr;
-
-  CFX_DIBAttribute dibAttr;
-  CFX_RetainPtr<CFX_DIBitmap> pBitmap;
+  CCodec_ModuleMgr* pCodecMgr = CPDF_ModuleMgr::Get()->GetCodecModule();
   std::unique_ptr<CCodec_ProgressiveDecoder> pProgressiveDecoder =
       pCodecMgr->CreateProgressiveDecoder();
+
+  CFX_DIBAttribute dibAttr;
   pProgressiveDecoder->LoadImageInfo(pImageFileRead, type, &dibAttr, false);
   switch (dibAttr.m_wDPIUnit) {
     case FXCODEC_RESUNIT_CENTIMETER:
@@ -1147,24 +1140,26 @@
   }
   iImageXDpi = dibAttr.m_nXDPI > 1 ? dibAttr.m_nXDPI : (96);
   iImageYDpi = dibAttr.m_nYDPI > 1 ? dibAttr.m_nYDPI : (96);
-  if (pProgressiveDecoder->GetWidth() > 0 &&
-      pProgressiveDecoder->GetHeight() > 0) {
-    type = pProgressiveDecoder->GetType();
-    int32_t iComponents = pProgressiveDecoder->GetNumComponents();
-    int32_t iBpc = pProgressiveDecoder->GetBPC();
-    FXDIB_Format dibFormat = XFA_GetDIBFormat(type, iComponents, iBpc);
-    pBitmap = pdfium::MakeRetain<CFX_DIBitmap>();
-    pBitmap->Create(pProgressiveDecoder->GetWidth(),
-                    pProgressiveDecoder->GetHeight(), dibFormat);
-    pBitmap->Clear(0xffffffff);
-    int32_t nFrames;
-    if ((pProgressiveDecoder->GetFrames(nFrames) ==
-         FXCODEC_STATUS_DECODE_READY) &&
-        (nFrames > 0)) {
-      pProgressiveDecoder->StartDecode(pBitmap, 0, 0, pBitmap->GetWidth(),
-                                       pBitmap->GetHeight());
-      pProgressiveDecoder->ContinueDecode();
-    }
+  if (pProgressiveDecoder->GetWidth() <= 0 ||
+      pProgressiveDecoder->GetHeight() <= 0) {
+    return nullptr;
+  }
+
+  type = pProgressiveDecoder->GetType();
+  int32_t iComponents = pProgressiveDecoder->GetNumComponents();
+  int32_t iBpc = pProgressiveDecoder->GetBPC();
+  FXDIB_Format dibFormat = XFA_GetDIBFormat(type, iComponents, iBpc);
+  CFX_RetainPtr<CFX_DIBitmap> pBitmap = pdfium::MakeRetain<CFX_DIBitmap>();
+  pBitmap->Create(pProgressiveDecoder->GetWidth(),
+                  pProgressiveDecoder->GetHeight(), dibFormat);
+  pBitmap->Clear(0xffffffff);
+  int32_t nFrames;
+  if ((pProgressiveDecoder->GetFrames(nFrames) ==
+       FXCODEC_STATUS_DECODE_READY) &&
+      (nFrames > 0)) {
+    pProgressiveDecoder->StartDecode(pBitmap, 0, 0, pBitmap->GetWidth(),
+                                     pBitmap->GetHeight());
+    pProgressiveDecoder->ContinueDecode();
   }
   return pBitmap;
 }
diff --git a/xfa/fxfa/parser/cxfa_localemgr.cpp b/xfa/fxfa/parser/cxfa_localemgr.cpp
index 0a691a6..fbb12e2 100644
--- a/xfa/fxfa/parser/cxfa_localemgr.cpp
+++ b/xfa/fxfa/parser/cxfa_localemgr.cpp
@@ -11,9 +11,9 @@
 #include <memory>
 #include <utility>
 
+#include "core/fpdfapi/cpdf_modulemgr.h"
 #include "core/fxcodec/fx_codec.h"
 #include "core/fxcrt/xml/cxml_element.h"
-#include "core/fxge/cfx_gemodule.h"
 #include "third_party/base/ptr_util.h"
 #include "xfa/fxfa/parser/cxfa_node.h"
 #include "xfa/fxfa/parser/cxfa_nodelocale.h"
@@ -1056,23 +1056,17 @@
                                                            int nBufLen) {
   if (!pBuf || nBufLen <= 0)
     return nullptr;
-  CFX_GEModule* pGeModule = CFX_GEModule::Get();
-  if (!pGeModule)
-    return nullptr;
 
-  CCodec_ModuleMgr* pCodecMgr = pGeModule->GetCodecModule();
-  if (!pCodecMgr)
-    return nullptr;
-
-  std::unique_ptr<CXML_Element> pLocale;
   uint8_t* pOut = nullptr;
   uint32_t dwSize;
+  CCodec_ModuleMgr* pCodecMgr = CPDF_ModuleMgr::Get()->GetCodecModule();
   pCodecMgr->GetFlateModule()->FlateOrLZWDecode(false, pBuf, nBufLen, true, 0,
                                                 0, 0, 0, 0, pOut, dwSize);
-  if (pOut) {
-    pLocale = CXML_Element::Parse(pOut, dwSize);
-    FX_Free(pOut);
-  }
+  if (!pOut)
+    return nullptr;
+
+  std::unique_ptr<CXML_Element> pLocale = CXML_Element::Parse(pOut, dwSize);
+  FX_Free(pOut);
   return pLocale ? pdfium::MakeUnique<CXFA_XMLLocale>(std::move(pLocale))
                  : nullptr;
 }
diff --git a/xfa/fxgraphics/cfx_graphics.cpp b/xfa/fxgraphics/cfx_graphics.cpp
index 79e4b7a..a67932f 100644
--- a/xfa/fxgraphics/cfx_graphics.cpp
+++ b/xfa/fxgraphics/cfx_graphics.cpp
@@ -9,7 +9,6 @@
 #include <memory>
 
 #include "core/fxge/cfx_defaultrenderdevice.h"
-#include "core/fxge/cfx_gemodule.h"
 #include "core/fxge/cfx_renderdevice.h"
 #include "core/fxge/cfx_unicodeencoding.h"
 #include "third_party/base/ptr_util.h"