Get rid of CCodec_ModuleMgr::GetFlateModule().

The CCodec_FlateModule class consists of a set of methods that can all
be static. Make the methods static, and make sure CCodec_FlateModule
cannot be instantiated. Then CCodec_ModuleMgr::GetFlateModule() becomes
pointless and all the callers can just call CCodec_FlateModule directly.

Change-Id: I4ad3b9a414eb6ec7355450739269300f1df99c21
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/55010
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfapi/cpdf_modulemgr.cpp b/core/fpdfapi/cpdf_modulemgr.cpp
index 34fe049..5c907d9 100644
--- a/core/fpdfapi/cpdf_modulemgr.cpp
+++ b/core/fpdfapi/cpdf_modulemgr.cpp
@@ -80,10 +80,6 @@
   return m_pCodecModule->GetIccModule();
 }
 
-CCodec_FlateModule* CPDF_ModuleMgr::GetFlateModule() {
-  return m_pCodecModule->GetFlateModule();
-}
-
 void CPDF_ModuleMgr::InitPageModule() {
   m_pPageModule = pdfium::MakeUnique<CPDF_PageModule>();
 }
diff --git a/core/fpdfapi/parser/fpdf_parser_decode.cpp b/core/fpdfapi/parser/fpdf_parser_decode.cpp
index e90e740..05784df 100644
--- a/core/fpdfapi/parser/fpdf_parser_decode.cpp
+++ b/core/fpdfapi/parser/fpdf_parser_decode.cpp
@@ -337,9 +337,9 @@
     if (!CheckFlateDecodeParams(Colors, BitsPerComponent, Columns))
       return nullptr;
   }
-  return CPDF_ModuleMgr::Get()->GetFlateModule()->CreateDecoder(
-      src_span, width, height, nComps, bpc, predictor, Colors, BitsPerComponent,
-      Columns);
+  return CCodec_FlateModule::CreateDecoder(src_span, width, height, nComps, bpc,
+                                           predictor, Colors, BitsPerComponent,
+                                           Columns);
 }
 
 uint32_t FlateOrLZWDecode(bool bLZW,
@@ -362,7 +362,7 @@
     if (!CheckFlateDecodeParams(Colors, BitsPerComponent, Columns))
       return FX_INVALID_OFFSET;
   }
-  return CPDF_ModuleMgr::Get()->GetFlateModule()->FlateOrLZWDecode(
+  return CCodec_FlateModule::FlateOrLZWDecode(
       bLZW, src_span, bEarlyChange, predictor, Colors, BitsPerComponent,
       Columns, estimated_size, dest_buf, dest_size);
 }
@@ -587,15 +587,13 @@
 bool FlateEncode(pdfium::span<const uint8_t> src_span,
                  std::unique_ptr<uint8_t, FxFreeDeleter>* dest_buf,
                  uint32_t* dest_size) {
-  CCodec_ModuleMgr* pEncoders = CPDF_ModuleMgr::Get()->GetCodecModule();
-  return pEncoders->GetFlateModule()->Encode(src_span.data(), src_span.size(),
-                                             dest_buf, dest_size);
+  return CCodec_FlateModule::Encode(src_span.data(), src_span.size(), dest_buf,
+                                    dest_size);
 }
 
 uint32_t FlateDecode(pdfium::span<const uint8_t> src_span,
                      std::unique_ptr<uint8_t, FxFreeDeleter>* dest_buf,
                      uint32_t* dest_size) {
-  CCodec_ModuleMgr* pEncoders = CPDF_ModuleMgr::Get()->GetCodecModule();
-  return pEncoders->GetFlateModule()->FlateOrLZWDecode(
-      false, src_span, false, 0, 0, 0, 0, 0, dest_buf, dest_size);
+  return CCodec_FlateModule::FlateOrLZWDecode(false, src_span, false, 0, 0, 0,
+                                              0, 0, dest_buf, dest_size);
 }
diff --git a/core/fxcodec/codec/ccodec_flatemodule.cpp b/core/fxcodec/codec/ccodec_flatemodule.cpp
index f447ec5..47bf80a 100644
--- a/core/fxcodec/codec/ccodec_flatemodule.cpp
+++ b/core/fxcodec/codec/ccodec_flatemodule.cpp
@@ -761,6 +761,7 @@
 
 }  // namespace
 
+// static
 std::unique_ptr<CCodec_ScanlineDecoder> CCodec_FlateModule::CreateDecoder(
     pdfium::span<const uint8_t> src_span,
     int width,
@@ -781,6 +782,7 @@
       BitsPerComponent, Columns);
 }
 
+// static
 uint32_t CCodec_FlateModule::FlateOrLZWDecode(
     bool bLZW,
     pdfium::span<const uint8_t> src_span,
@@ -834,6 +836,7 @@
   return ret ? offset : FX_INVALID_OFFSET;
 }
 
+// static
 bool CCodec_FlateModule::Encode(
     const uint8_t* src_buf,
     uint32_t src_size,
diff --git a/core/fxcodec/codec/ccodec_flatemodule.h b/core/fxcodec/codec/ccodec_flatemodule.h
index d58c184..9f16193 100644
--- a/core/fxcodec/codec/ccodec_flatemodule.h
+++ b/core/fxcodec/codec/ccodec_flatemodule.h
@@ -17,7 +17,7 @@
 
 class CCodec_FlateModule {
  public:
-  std::unique_ptr<CCodec_ScanlineDecoder> CreateDecoder(
+  static std::unique_ptr<CCodec_ScanlineDecoder> CreateDecoder(
       pdfium::span<const uint8_t> src_buf,
       int width,
       int height,
@@ -28,21 +28,26 @@
       int BitsPerComponent,
       int Columns);
 
-  uint32_t FlateOrLZWDecode(bool bLZW,
-                            pdfium::span<const uint8_t> src_buf,
-                            bool bEarlyChange,
-                            int predictor,
-                            int Colors,
-                            int BitsPerComponent,
-                            int Columns,
-                            uint32_t estimated_size,
-                            std::unique_ptr<uint8_t, FxFreeDeleter>* dest_buf,
-                            uint32_t* dest_size);
+  static uint32_t FlateOrLZWDecode(
+      bool bLZW,
+      pdfium::span<const uint8_t> src_buf,
+      bool bEarlyChange,
+      int predictor,
+      int Colors,
+      int BitsPerComponent,
+      int Columns,
+      uint32_t estimated_size,
+      std::unique_ptr<uint8_t, FxFreeDeleter>* dest_buf,
+      uint32_t* dest_size);
 
-  bool Encode(const uint8_t* src_buf,
-              uint32_t src_size,
-              std::unique_ptr<uint8_t, FxFreeDeleter>* dest_buf,
-              uint32_t* dest_size);
+  static bool Encode(const uint8_t* src_buf,
+                     uint32_t src_size,
+                     std::unique_ptr<uint8_t, FxFreeDeleter>* dest_buf,
+                     uint32_t* dest_size);
+
+  CCodec_FlateModule() = delete;
+  CCodec_FlateModule(const CCodec_FlateModule&) = delete;
+  CCodec_FlateModule& operator=(const CCodec_FlateModule&) = delete;
 };
 
 #endif  // CORE_FXCODEC_CODEC_CCODEC_FLATEMODULE_H_
diff --git a/core/fxcodec/codec/fx_codec.cpp b/core/fxcodec/codec/fx_codec.cpp
index b907d5d..0a34a1d 100644
--- a/core/fxcodec/codec/fx_codec.cpp
+++ b/core/fxcodec/codec/fx_codec.cpp
@@ -13,7 +13,6 @@
 
 #include "core/fxcodec/codec/ccodec_basicmodule.h"
 #include "core/fxcodec/codec/ccodec_faxmodule.h"
-#include "core/fxcodec/codec/ccodec_flatemodule.h"
 #include "core/fxcodec/codec/ccodec_iccmodule.h"
 #include "core/fxcodec/codec/ccodec_jbig2module.h"
 #include "core/fxcodec/codec/ccodec_jpegmodule.h"
@@ -31,10 +30,9 @@
       m_pJpegModule(pdfium::MakeUnique<CCodec_JpegModule>()),
       m_pJpxModule(pdfium::MakeUnique<CCodec_JpxModule>()),
       m_pJbig2Module(pdfium::MakeUnique<CCodec_Jbig2Module>()),
-      m_pIccModule(pdfium::MakeUnique<CCodec_IccModule>()),
-      m_pFlateModule(pdfium::MakeUnique<CCodec_FlateModule>()) {}
+      m_pIccModule(pdfium::MakeUnique<CCodec_IccModule>()) {}
 
-CCodec_ModuleMgr::~CCodec_ModuleMgr() {}
+CCodec_ModuleMgr::~CCodec_ModuleMgr() = default;
 
 bool CCodec_BasicModule::RunLengthEncode(
     pdfium::span<const uint8_t> src_span,
diff --git a/core/fxcodec/fx_codec.h b/core/fxcodec/fx_codec.h
index 10792ec..bb332e9 100644
--- a/core/fxcodec/fx_codec.h
+++ b/core/fxcodec/fx_codec.h
@@ -36,7 +36,6 @@
 
 class CCodec_BasicModule;
 class CCodec_FaxModule;
-class CCodec_FlateModule;
 class CCodec_IccModule;
 class CCodec_Jbig2Module;
 class CCodec_JpegModule;
@@ -71,7 +70,6 @@
   CCodec_JpxModule* GetJpxModule() const { return m_pJpxModule.get(); }
   CCodec_Jbig2Module* GetJbig2Module() const { return m_pJbig2Module.get(); }
   CCodec_IccModule* GetIccModule() const { return m_pIccModule.get(); }
-  CCodec_FlateModule* GetFlateModule() const { return m_pFlateModule.get(); }
 
 #ifdef PDF_ENABLE_XFA
   std::unique_ptr<CCodec_ProgressiveDecoder> CreateProgressiveDecoder();
@@ -130,8 +128,6 @@
   std::unique_ptr<CCodec_TiffModule> m_pTiffModule;
 #endif  // PDF_ENABLE_XFA_TIFF
 #endif  // PDF_ENABLE_XFA
-
-  std::unique_ptr<CCodec_FlateModule> m_pFlateModule;
 };
 
 void ReverseRGB(uint8_t* pDestBuf, const uint8_t* pSrcBuf, int pixels);
diff --git a/core/fxcodec/jbig2/JBig2_GrdProc.cpp b/core/fxcodec/jbig2/JBig2_GrdProc.cpp
index 278b5c0..2394183 100644
--- a/core/fxcodec/jbig2/JBig2_GrdProc.cpp
+++ b/core/fxcodec/jbig2/JBig2_GrdProc.cpp
@@ -11,7 +11,6 @@
 #include <utility>
 
 #include "core/fxcodec/codec/ccodec_faxmodule.h"
-#include "core/fxcodec/fx_codec.h"
 #include "core/fxcodec/jbig2/JBig2_ArithDecoder.h"
 #include "core/fxcodec/jbig2/JBig2_BitStream.h"
 #include "core/fxcodec/jbig2/JBig2_Image.h"
diff --git a/core/fxge/win32/cfx_psrenderer.cpp b/core/fxge/win32/cfx_psrenderer.cpp
index cb83a82..d1aedf2 100644
--- a/core/fxge/win32/cfx_psrenderer.cpp
+++ b/core/fxge/win32/cfx_psrenderer.cpp
@@ -63,8 +63,8 @@
   uint32_t dest_size = src_size;
   if (PSLevel >= 3) {
     std::unique_ptr<uint8_t, FxFreeDeleter> dest_buf_unique;
-    if (pEncoders->GetFlateModule()->Encode(src_buf, src_size, &dest_buf_unique,
-                                            &dest_size)) {
+    if (CCodec_FlateModule::Encode(src_buf, src_size, &dest_buf_unique,
+                                   &dest_size)) {
       dest_buf = dest_buf_unique.release();
       *filter = "/FlateDecode filter ";
     }
diff --git a/xfa/fxfa/parser/cxfa_localemgr.cpp b/xfa/fxfa/parser/cxfa_localemgr.cpp
index fbfc560..1ddadcd 100644
--- a/xfa/fxfa/parser/cxfa_localemgr.cpp
+++ b/xfa/fxfa/parser/cxfa_localemgr.cpp
@@ -13,7 +13,6 @@
 
 #include "core/fpdfapi/cpdf_modulemgr.h"
 #include "core/fxcodec/codec/ccodec_flatemodule.h"
-#include "core/fxcodec/fx_codec.h"
 #include "fxjs/xfa/cjx_object.h"
 #include "third_party/base/ptr_util.h"
 #include "xfa/fxfa/parser/cxfa_acrobat.h"
@@ -1073,9 +1072,8 @@
 
   std::unique_ptr<uint8_t, FxFreeDeleter> output;
   uint32_t dwSize;
-  CCodec_ModuleMgr* pCodecMgr = CPDF_ModuleMgr::Get()->GetCodecModule();
-  pCodecMgr->GetFlateModule()->FlateOrLZWDecode(false, src_span, true, 0, 0, 0,
-                                                0, 0, &output, &dwSize);
+  CCodec_FlateModule::FlateOrLZWDecode(false, src_span, true, 0, 0, 0, 0, 0,
+                                       &output, &dwSize);
   if (!output)
     return nullptr;