diff --git a/core/fxcodec/BUILD.gn b/core/fxcodec/BUILD.gn
index 6cc8bd1..c8cc854 100644
--- a/core/fxcodec/BUILD.gn
+++ b/core/fxcodec/BUILD.gn
@@ -99,8 +99,8 @@
     }
     if (pdf_enable_xfa_gif) {
       sources += [
-        "codec/ccodec_gifmodule.cpp",
-        "codec/ccodec_gifmodule.h",
+        "codec/gifmodule.cpp",
+        "codec/gifmodule.h",
         "gif/cfx_gif.cpp",
         "gif/cfx_gif.h",
         "gif/cfx_gifcontext.cpp",
diff --git a/core/fxcodec/codec/ccodec_progressivedecoder.cpp b/core/fxcodec/codec/ccodec_progressivedecoder.cpp
index fc010cd..d3705d3 100644
--- a/core/fxcodec/codec/ccodec_progressivedecoder.cpp
+++ b/core/fxcodec/codec/ccodec_progressivedecoder.cpp
@@ -851,7 +851,7 @@
 #endif  // PDF_ENABLE_XFA_BMP
 
 #ifdef PDF_ENABLE_XFA_GIF
-bool CCodec_ProgressiveDecoder::GifReadMoreData(CCodec_GifModule* pGifModule,
+bool CCodec_ProgressiveDecoder::GifReadMoreData(GifModule* pGifModule,
                                                 FXCODEC_STATUS& err_status) {
   if (!ReadMoreData(pGifModule, m_pGifContext.get(), m_InvalidateGifBuffer,
                     err_status)) {
@@ -862,7 +862,7 @@
 }
 
 bool CCodec_ProgressiveDecoder::GifDetectImageTypeInBuffer() {
-  CCodec_GifModule* pGifModule = m_pCodecMgr->GetGifModule();
+  GifModule* pGifModule = m_pCodecMgr->GetGifModule();
   if (!pGifModule) {
     m_status = FXCODEC_STATUS_ERR_MEMORY;
     return false;
@@ -896,7 +896,7 @@
 
 FXCODEC_STATUS CCodec_ProgressiveDecoder::GifStartDecode(
     const RetainPtr<CFX_DIBitmap>& pDIBitmap) {
-  CCodec_GifModule* pGifModule = m_pCodecMgr->GetGifModule();
+  GifModule* pGifModule = m_pCodecMgr->GetGifModule();
   if (!pGifModule) {
     m_pDeviceBitmap = nullptr;
     m_pFile = nullptr;
@@ -916,7 +916,7 @@
 }
 
 FXCODEC_STATUS CCodec_ProgressiveDecoder::GifContinueDecode() {
-  CCodec_GifModule* pGifModule = m_pCodecMgr->GetGifModule();
+  GifModule* pGifModule = m_pCodecMgr->GetGifModule();
   if (!pGifModule) {
     m_pDeviceBitmap = nullptr;
     m_pFile = nullptr;
@@ -2203,7 +2203,7 @@
       return {m_status, 1};
 #ifdef PDF_ENABLE_XFA_GIF
     case FXCODEC_IMAGE_GIF: {
-      CCodec_GifModule* pGifModule = m_pCodecMgr->GetGifModule();
+      GifModule* pGifModule = m_pCodecMgr->GetGifModule();
       if (!pGifModule) {
         m_status = FXCODEC_STATUS_ERR_MEMORY;
         return {m_status, 0};
diff --git a/core/fxcodec/codec/ccodec_progressivedecoder.h b/core/fxcodec/codec/ccodec_progressivedecoder.h
index b4ec639..ee4fb1f 100644
--- a/core/fxcodec/codec/ccodec_progressivedecoder.h
+++ b/core/fxcodec/codec/ccodec_progressivedecoder.h
@@ -23,7 +23,7 @@
 #endif  // PDF_ENABLE_XFA_BMP
 
 #ifdef PDF_ENABLE_XFA_GIF
-#include "core/fxcodec/codec/ccodec_gifmodule.h"
+#include "core/fxcodec/codec/gifmodule.h"
 #endif  // PDF_ENABLE_XFA_GIF
 
 #ifdef PDF_ENABLE_XFA_PNG
@@ -46,7 +46,7 @@
     public BmpModule::Delegate,
 #endif  // PDF_ENABLE_XFA_BMP
 #ifdef PDF_ENABLE_XFA_GIF
-    public CCodec_GifModule::Delegate,
+    public GifModule::Delegate,
 #endif  // PDF_ENABLE_XFA_GIF
 #ifdef PDF_ENABLE_XFA_PNG
     public CCodec_PngModule::Delegate,
@@ -158,7 +158,7 @@
 #endif  // PDF_ENABLE_XFA_PNG
 
 #ifdef PDF_ENABLE_XFA_GIF
-  // CCodec_GifModule::Delegate
+  // GifModule::Delegate
   void GifRecordCurrentPosition(uint32_t& cur_pos) override;
   bool GifInputRecordPositionBuf(uint32_t rcd_pos,
                                  const FX_RECT& img_rc,
@@ -190,8 +190,7 @@
 #endif  // PDF_ENABLE_XFA_BMP
 
 #ifdef PDF_ENABLE_XFA_GIF
-  bool GifReadMoreData(CCodec_GifModule* pGifModule,
-                       FXCODEC_STATUS& err_status);
+  bool GifReadMoreData(GifModule* pGifModule, FXCODEC_STATUS& err_status);
   bool GifDetectImageTypeInBuffer();
   FXCODEC_STATUS GifStartDecode(const RetainPtr<CFX_DIBitmap>& pDIBitmap);
   FXCODEC_STATUS GifContinueDecode();
diff --git a/core/fxcodec/codec/ccodec_progressivedecoder_unittest.cpp b/core/fxcodec/codec/ccodec_progressivedecoder_unittest.cpp
index 9384c16..ad7c321 100644
--- a/core/fxcodec/codec/ccodec_progressivedecoder_unittest.cpp
+++ b/core/fxcodec/codec/ccodec_progressivedecoder_unittest.cpp
@@ -12,7 +12,7 @@
 #include "third_party/base/span.h"
 
 #ifdef PDF_ENABLE_XFA_GIF
-#include "core/fxcodec/codec/ccodec_gifmodule.h"
+#include "core/fxcodec/codec/gifmodule.h"
 #endif  // PDF_ENABLE_XFA_GIF
 
 #ifdef PDF_ENABLE_XFA_GIF
@@ -370,7 +370,7 @@
 
   CCodec_ModuleMgr::Create();
   CCodec_ModuleMgr::GetInstance()->SetGifModule(
-      pdfium::MakeUnique<CCodec_GifModule>());
+      pdfium::MakeUnique<GifModule>());
   {
     std::unique_ptr<CCodec_ProgressiveDecoder> decoder =
         CCodec_ModuleMgr::GetInstance()->CreateProgressiveDecoder();
diff --git a/core/fxcodec/codec/fx_codec.cpp b/core/fxcodec/codec/fx_codec.cpp
index 192d87b..7342216 100644
--- a/core/fxcodec/codec/fx_codec.cpp
+++ b/core/fxcodec/codec/fx_codec.cpp
@@ -52,7 +52,7 @@
 #endif
 
 #ifdef PDF_ENABLE_XFA_GIF
-  SetGifModule(pdfium::MakeUnique<CCodec_GifModule>());
+  SetGifModule(pdfium::MakeUnique<GifModule>());
 #endif
 
 #ifdef PDF_ENABLE_XFA_PNG
diff --git a/core/fxcodec/codec/ccodec_gifmodule.cpp b/core/fxcodec/codec/gifmodule.cpp
similarity index 61%
rename from core/fxcodec/codec/ccodec_gifmodule.cpp
rename to core/fxcodec/codec/gifmodule.cpp
index a65393a..1c4733f 100644
--- a/core/fxcodec/codec/ccodec_gifmodule.cpp
+++ b/core/fxcodec/codec/gifmodule.cpp
@@ -4,7 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "core/fxcodec/codec/ccodec_gifmodule.h"
+#include "core/fxcodec/codec/gifmodule.h"
 
 #include "core/fxcodec/codec/cfx_codec_memory.h"
 #include "core/fxcodec/codec/codec_int.h"
@@ -14,21 +14,23 @@
 #include "core/fxge/fx_dib.h"
 #include "third_party/base/ptr_util.h"
 
-CCodec_GifModule::CCodec_GifModule() {}
+namespace fxcodec {
 
-CCodec_GifModule::~CCodec_GifModule() {}
+GifModule::GifModule() = default;
 
-std::unique_ptr<CodecModuleIface::Context> CCodec_GifModule::Start(
+GifModule::~GifModule() = default;
+
+std::unique_ptr<CodecModuleIface::Context> GifModule::Start(
     Delegate* pDelegate) {
   return pdfium::MakeUnique<CFX_GifContext>(this, pDelegate);
 }
 
-CFX_GifDecodeStatus CCodec_GifModule::ReadHeader(Context* pContext,
-                                                 int* width,
-                                                 int* height,
-                                                 int* pal_num,
-                                                 CFX_GifPalette** pal_pp,
-                                                 int* bg_index) {
+CFX_GifDecodeStatus GifModule::ReadHeader(Context* pContext,
+                                          int* width,
+                                          int* height,
+                                          int* pal_num,
+                                          CFX_GifPalette** pal_pp,
+                                          int* bg_index) {
   auto* context = static_cast<CFX_GifContext*>(pContext);
   CFX_GifDecodeStatus ret = context->ReadHeader();
   if (ret != CFX_GifDecodeStatus::Success)
@@ -43,7 +45,7 @@
   return CFX_GifDecodeStatus::Success;
 }
 
-std::pair<CFX_GifDecodeStatus, size_t> CCodec_GifModule::LoadFrameInfo(
+std::pair<CFX_GifDecodeStatus, size_t> GifModule::LoadFrameInfo(
     Context* pContext) {
   auto* context = static_cast<CFX_GifContext*>(pContext);
   CFX_GifDecodeStatus ret = context->GetFrame();
@@ -52,19 +54,20 @@
   return {CFX_GifDecodeStatus::Success, context->GetFrameNum()};
 }
 
-CFX_GifDecodeStatus CCodec_GifModule::LoadFrame(Context* pContext,
-                                                size_t frame_num) {
+CFX_GifDecodeStatus GifModule::LoadFrame(Context* pContext, size_t frame_num) {
   return static_cast<CFX_GifContext*>(pContext)->LoadFrame(frame_num);
 }
 
-FX_FILESIZE CCodec_GifModule::GetAvailInput(Context* pContext) const {
+FX_FILESIZE GifModule::GetAvailInput(Context* pContext) const {
   return static_cast<CFX_GifContext*>(pContext)->GetAvailInput();
 }
 
-bool CCodec_GifModule::Input(Context* pContext,
-                             RetainPtr<CFX_CodecMemory> codec_memory,
-                             CFX_DIBAttribute*) {
+bool GifModule::Input(Context* pContext,
+                      RetainPtr<CFX_CodecMemory> codec_memory,
+                      CFX_DIBAttribute*) {
   auto* ctx = static_cast<CFX_GifContext*>(pContext);
   ctx->SetInputBuffer(std::move(codec_memory));
   return true;
 }
+
+}  // namespace fxcodec
diff --git a/core/fxcodec/codec/ccodec_gifmodule.h b/core/fxcodec/codec/gifmodule.h
similarity index 86%
rename from core/fxcodec/codec/ccodec_gifmodule.h
rename to core/fxcodec/codec/gifmodule.h
index 7d0fd67..70bfb28 100644
--- a/core/fxcodec/codec/ccodec_gifmodule.h
+++ b/core/fxcodec/codec/gifmodule.h
@@ -4,8 +4,8 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef CORE_FXCODEC_CODEC_CCODEC_GIFMODULE_H_
-#define CORE_FXCODEC_CODEC_CCODEC_GIFMODULE_H_
+#ifndef CORE_FXCODEC_CODEC_GIFMODULE_H_
+#define CORE_FXCODEC_CODEC_GIFMODULE_H_
 
 #include <memory>
 #include <utility>
@@ -16,7 +16,9 @@
 
 class CFX_DIBAttribute;
 
-class CCodec_GifModule final : public CodecModuleIface {
+namespace fxcodec {
+
+class GifModule final : public CodecModuleIface {
  public:
   class Delegate {
    public:
@@ -33,8 +35,8 @@
     virtual void GifReadScanline(int32_t row_num, uint8_t* row_buf) = 0;
   };
 
-  CCodec_GifModule();
-  ~CCodec_GifModule() override;
+  GifModule();
+  ~GifModule() override;
 
   // CodecModuleIface:
   FX_FILESIZE GetAvailInput(Context* context) const override;
@@ -53,4 +55,8 @@
   CFX_GifDecodeStatus LoadFrame(Context* context, size_t frame_num);
 };
 
-#endif  // CORE_FXCODEC_CODEC_CCODEC_GIFMODULE_H_
+}  // namespace fxcodec
+
+using GifModule = fxcodec::GifModule;
+
+#endif  // CORE_FXCODEC_CODEC_GIFMODULE_H_
diff --git a/core/fxcodec/fx_codec.h b/core/fxcodec/fx_codec.h
index 2a0ad6d..4154f06 100644
--- a/core/fxcodec/fx_codec.h
+++ b/core/fxcodec/fx_codec.h
@@ -22,7 +22,7 @@
 #endif  // PDF_ENABLE_XFA_BMP
 
 #ifdef PDF_ENABLE_XFA_GIF
-#include "core/fxcodec/codec/ccodec_gifmodule.h"
+#include "core/fxcodec/codec/gifmodule.h"
 #endif  // PDF_ENABLE_XFA_GIF
 
 #ifdef PDF_ENABLE_XFA_PNG
@@ -73,8 +73,8 @@
 #endif  // PDF_ENABLE_XFA_BMP
 
 #ifdef PDF_ENABLE_XFA_GIF
-  CCodec_GifModule* GetGifModule() const { return m_pGifModule.get(); }
-  void SetGifModule(std::unique_ptr<CCodec_GifModule> module) {
+  GifModule* GetGifModule() const { return m_pGifModule.get(); }
+  void SetGifModule(std::unique_ptr<GifModule> module) {
     m_pGifModule = std::move(module);
   }
 #endif  // PDF_ENABLE_XFA_GIF
@@ -107,7 +107,7 @@
 #endif  // PDF_ENABLE_XFA_BMP
 
 #ifdef PDF_ENABLE_XFA_GIF
-  std::unique_ptr<CCodec_GifModule> m_pGifModule;
+  std::unique_ptr<GifModule> m_pGifModule;
 #endif  // PDF_ENABLE_XFA_GIF
 
 #ifdef PDF_ENABLE_XFA_PNG
diff --git a/core/fxcodec/gif/cfx_gifcontext.cpp b/core/fxcodec/gif/cfx_gifcontext.cpp
index 9c6aaf7..3b212a5 100644
--- a/core/fxcodec/gif/cfx_gifcontext.cpp
+++ b/core/fxcodec/gif/cfx_gifcontext.cpp
@@ -9,8 +9,8 @@
 #include <algorithm>
 #include <utility>
 
-#include "core/fxcodec/codec/ccodec_gifmodule.h"
 #include "core/fxcodec/codec/cfx_codec_memory.h"
+#include "core/fxcodec/codec/gifmodule.h"
 #include "core/fxcodec/gif/cfx_gif.h"
 #include "third_party/base/ptr_util.h"
 #include "third_party/base/stl_util.h"
@@ -21,8 +21,8 @@
 
 }  // namespace
 
-CFX_GifContext::CFX_GifContext(CCodec_GifModule* gif_module,
-                               CCodec_GifModule::Delegate* delegate)
+CFX_GifContext::CFX_GifContext(GifModule* gif_module,
+                               GifModule::Delegate* delegate)
     : gif_module_(gif_module), delegate_(delegate) {}
 
 CFX_GifContext::~CFX_GifContext() = default;
diff --git a/core/fxcodec/gif/cfx_gifcontext.h b/core/fxcodec/gif/cfx_gifcontext.h
index 3a1f72c..ce5e9d4 100644
--- a/core/fxcodec/gif/cfx_gifcontext.h
+++ b/core/fxcodec/gif/cfx_gifcontext.h
@@ -10,7 +10,7 @@
 #include <memory>
 #include <vector>
 
-#include "core/fxcodec/codec/ccodec_gifmodule.h"
+#include "core/fxcodec/codec/gifmodule.h"
 #include "core/fxcodec/gif/cfx_gif.h"
 #include "core/fxcodec/gif/cfx_lzwdecompressor.h"
 #include "core/fxcrt/fx_string.h"
@@ -20,8 +20,7 @@
 
 class CFX_GifContext : public CodecModuleIface::Context {
  public:
-  CFX_GifContext(CCodec_GifModule* gif_module,
-                 CCodec_GifModule::Delegate* delegate);
+  CFX_GifContext(GifModule* gif_module, GifModule::Delegate* delegate);
   ~CFX_GifContext() override;
 
   void RecordCurrentPosition(uint32_t* cur_pos);
@@ -45,8 +44,8 @@
   uint32_t GetAvailInput() const;
   size_t GetFrameNum() const { return images_.size(); }
 
-  UnownedPtr<CCodec_GifModule> const gif_module_;
-  UnownedPtr<CCodec_GifModule::Delegate> const delegate_;
+  UnownedPtr<GifModule> const gif_module_;
+  UnownedPtr<GifModule::Delegate> const delegate_;
   std::vector<CFX_GifPalette> global_palette_;
   uint8_t global_pal_exp_ = 0;
   uint32_t img_row_offset_ = 0;
diff --git a/core/fxcodec/gif/cfx_gifcontext_unittest.cpp b/core/fxcodec/gif/cfx_gifcontext_unittest.cpp
index c26d1cc..eaa8c09 100644
--- a/core/fxcodec/gif/cfx_gifcontext_unittest.cpp
+++ b/core/fxcodec/gif/cfx_gifcontext_unittest.cpp
@@ -11,8 +11,7 @@
 
 class CFX_GifContextForTest final : public CFX_GifContext {
  public:
-  CFX_GifContextForTest(CCodec_GifModule* gif_module,
-                        CCodec_GifModule::Delegate* delegate)
+  CFX_GifContextForTest(GifModule* gif_module, GifModule::Delegate* delegate)
       : CFX_GifContext(gif_module, delegate) {}
   ~CFX_GifContextForTest() override {}
 
