diff --git a/core/fxcodec/BUILD.gn b/core/fxcodec/BUILD.gn
index 842695c..784dcce 100644
--- a/core/fxcodec/BUILD.gn
+++ b/core/fxcodec/BUILD.gn
@@ -107,12 +107,12 @@
         "gif/cfx_gif.h",
         "gif/cfx_gifcontext.cpp",
         "gif/cfx_gifcontext.h",
-        "gif/cfx_lzwdecompressor.cpp",
-        "gif/cfx_lzwdecompressor.h",
         "gif/gif_decoder.cpp",
         "gif/gif_decoder.h",
         "gif/gif_progressive_decoder.cpp",
         "gif/gif_progressive_decoder.h",
+        "gif/lzw_decompressor.cpp",
+        "gif/lzw_decompressor.h",
       ]
     }
     if (pdf_enable_xfa_png) {
@@ -155,7 +155,7 @@
     if (pdf_enable_xfa_gif) {
       sources += [
         "gif/cfx_gifcontext_unittest.cpp",
-        "gif/cfx_lzwdecompressor_unittest.cpp",
+        "gif/lzw_decompressor_unittest.cpp",
       ]
     }
   }
diff --git a/core/fxcodec/gif/cfx_gifcontext.cpp b/core/fxcodec/gif/cfx_gifcontext.cpp
index 42f6d9b..c1ec81a 100644
--- a/core/fxcodec/gif/cfx_gifcontext.cpp
+++ b/core/fxcodec/gif/cfx_gifcontext.cpp
@@ -234,33 +234,33 @@
       }
 
       if (!lzw_decompressor_.get()) {
-        lzw_decompressor_ = CFX_LZWDecompressor::Create(
-            GetPaletteExp(gif_image), gif_image->code_exp);
+        lzw_decompressor_ = LZWDecompressor::Create(GetPaletteExp(gif_image),
+                                                    gif_image->code_exp);
       }
       SaveDecodingStatus(GIF_D_STATUS_IMG_DATA);
       img_row_offset_ += img_row_avail_size_;
       img_row_avail_size_ = gif_img_row_bytes - img_row_offset_;
-      CFX_LZWDecompressor::Status ret =
+      LZWDecompressor::Status ret =
           lzw_decompressor_.get()
               ? lzw_decompressor_->Decode(
                     img_data.data(), img_data_size,
                     gif_image->row_buffer.data() + img_row_offset_,
                     &img_row_avail_size_)
-              : CFX_LZWDecompressor::Status::kError;
-      if (ret == CFX_LZWDecompressor::Status::kError) {
+              : LZWDecompressor::Status::kError;
+      if (ret == LZWDecompressor::Status::kError) {
         DecodingFailureAtTailCleanup(gif_image);
         return GifDecoder::Status::kError;
       }
 
-      while (ret != CFX_LZWDecompressor::Status::kError) {
-        if (ret == CFX_LZWDecompressor::Status::kSuccess) {
+      while (ret != LZWDecompressor::Status::kError) {
+        if (ret == LZWDecompressor::Status::kSuccess) {
           ReadScanline(gif_image->row_num, gif_image->row_buffer.data());
           gif_image->row_buffer.clear();
           SaveDecodingStatus(GIF_D_STATUS_TAIL);
           return GifDecoder::Status::kSuccess;
         }
 
-        if (ret == CFX_LZWDecompressor::Status::kUnfinished) {
+        if (ret == LZWDecompressor::Status::kUnfinished) {
           read_marker = input_buffer_->GetPosition();
           if (!ReadAllOrNone(&img_data_size, sizeof(img_data_size)))
             return GifDecoder::Status::kUnfinished;
@@ -273,7 +273,7 @@
             }
 
             if (!lzw_decompressor_.get()) {
-              lzw_decompressor_ = CFX_LZWDecompressor::Create(
+              lzw_decompressor_ = LZWDecompressor::Create(
                   GetPaletteExp(gif_image), gif_image->code_exp);
             }
             SaveDecodingStatus(GIF_D_STATUS_IMG_DATA);
@@ -284,11 +284,11 @@
                             img_data.data(), img_data_size,
                             gif_image->row_buffer.data() + img_row_offset_,
                             &img_row_avail_size_)
-                      : CFX_LZWDecompressor::Status::kError;
+                      : LZWDecompressor::Status::kError;
           }
         }
 
-        if (ret == CFX_LZWDecompressor::Status::kInsufficientDestSize) {
+        if (ret == LZWDecompressor::Status::kInsufficientDestSize) {
           if (gif_image->image_info.local_flags.interlace) {
             ReadScanline(gif_image->row_num, gif_image->row_buffer.data());
             gif_image->row_num += kGifInterlaceStep[img_pass_num_];
@@ -311,11 +311,11 @@
                           img_data.data(), img_data_size,
                           gif_image->row_buffer.data() + img_row_offset_,
                           &img_row_avail_size_)
-                    : CFX_LZWDecompressor::Status::kError;
+                    : LZWDecompressor::Status::kError;
         }
 
-        if (ret == CFX_LZWDecompressor::Status::kInsufficientDestSize ||
-            ret == CFX_LZWDecompressor::Status::kError) {
+        if (ret == LZWDecompressor::Status::kInsufficientDestSize ||
+            ret == LZWDecompressor::Status::kError) {
           DecodingFailureAtTailCleanup(gif_image);
           return GifDecoder::Status::kError;
         }
diff --git a/core/fxcodec/gif/cfx_gifcontext.h b/core/fxcodec/gif/cfx_gifcontext.h
index 27d882f..050125a 100644
--- a/core/fxcodec/gif/cfx_gifcontext.h
+++ b/core/fxcodec/gif/cfx_gifcontext.h
@@ -11,8 +11,8 @@
 #include <vector>
 
 #include "core/fxcodec/gif/cfx_gif.h"
-#include "core/fxcodec/gif/cfx_lzwdecompressor.h"
 #include "core/fxcodec/gif/gif_decoder.h"
+#include "core/fxcodec/gif/lzw_decompressor.h"
 #include "core/fxcrt/retain_ptr.h"
 #include "core/fxcrt/unowned_ptr.h"
 
@@ -54,7 +54,7 @@
   int32_t decode_status_ = GIF_D_STATUS_SIG;
   std::unique_ptr<CFX_GifGraphicControlExtension> graphic_control_extension_;
   std::vector<std::unique_ptr<CFX_GifImage>> images_;
-  std::unique_ptr<CFX_LZWDecompressor> lzw_decompressor_;
+  std::unique_ptr<LZWDecompressor> lzw_decompressor_;
   int width_ = 0;
   int height_ = 0;
   uint8_t bc_index_ = 0;
diff --git a/core/fxcodec/gif/cfx_lzwdecompressor.cpp b/core/fxcodec/gif/lzw_decompressor.cpp
similarity index 83%
rename from core/fxcodec/gif/cfx_lzwdecompressor.cpp
rename to core/fxcodec/gif/lzw_decompressor.cpp
index 144dca6..12b30fc 100644
--- a/core/fxcodec/gif/cfx_lzwdecompressor.cpp
+++ b/core/fxcodec/gif/lzw_decompressor.cpp
@@ -4,7 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "core/fxcodec/gif/cfx_lzwdecompressor.h"
+#include "core/fxcodec/gif/lzw_decompressor.h"
 
 #include <algorithm>
 #include <cstring>
@@ -15,30 +15,31 @@
 #include "third_party/base/numerics/safe_math.h"
 #include "third_party/base/ptr_util.h"
 
-std::unique_ptr<CFX_LZWDecompressor> CFX_LZWDecompressor::Create(
-    uint8_t color_exp,
-    uint8_t code_exp) {
+namespace fxcodec {
+
+std::unique_ptr<LZWDecompressor> LZWDecompressor::Create(uint8_t color_exp,
+                                                         uint8_t code_exp) {
   // |color_exp| generates 2^(n + 1) codes, where as the code_exp reserves 2^n.
   // This is a quirk of the GIF spec.
   if (code_exp > GIF_MAX_LZW_EXP || code_exp < color_exp + 1)
     return nullptr;
 
   // Private ctor.
-  return pdfium::WrapUnique(new CFX_LZWDecompressor(color_exp, code_exp));
+  return pdfium::WrapUnique(new LZWDecompressor(color_exp, code_exp));
 }
 
-CFX_LZWDecompressor::CFX_LZWDecompressor(uint8_t color_exp, uint8_t code_exp)
+LZWDecompressor::LZWDecompressor(uint8_t color_exp, uint8_t code_exp)
     : code_size_(code_exp),
       code_color_end_(static_cast<uint16_t>(1 << (color_exp + 1))),
       code_clear_(static_cast<uint16_t>(1 << code_exp)),
       code_end_(static_cast<uint16_t>((1 << code_exp) + 1)) {}
 
-CFX_LZWDecompressor::~CFX_LZWDecompressor() = default;
+LZWDecompressor::~LZWDecompressor() = default;
 
-CFX_LZWDecompressor::Status CFX_LZWDecompressor::Decode(const uint8_t* src_buf,
-                                                        uint32_t src_size,
-                                                        uint8_t* dest_buf,
-                                                        uint32_t* dest_size) {
+LZWDecompressor::Status LZWDecompressor::Decode(const uint8_t* src_buf,
+                                                uint32_t src_size,
+                                                uint8_t* dest_buf,
+                                                uint32_t* dest_size) {
   if (!src_buf || src_size == 0 || !dest_buf || !dest_size)
     return Status::kError;
 
@@ -131,7 +132,7 @@
   return Status::kUnfinished;
 }
 
-void CFX_LZWDecompressor::ClearTable() {
+void LZWDecompressor::ClearTable() {
   code_size_cur_ = code_size_ + 1;
   code_next_ = code_end_ + 1;
   code_old_ = static_cast<uint16_t>(-1);
@@ -142,7 +143,7 @@
   decompressed_next_ = 0;
 }
 
-void CFX_LZWDecompressor::AddCode(uint16_t prefix_code, uint8_t append_char) {
+void LZWDecompressor::AddCode(uint16_t prefix_code, uint8_t append_char) {
   if (code_next_ == GIF_MAX_LZW_CODE)
     return;
 
@@ -154,7 +155,7 @@
   }
 }
 
-bool CFX_LZWDecompressor::DecodeString(uint16_t code) {
+bool LZWDecompressor::DecodeString(uint16_t code) {
   decompressed_.resize(code_next_ - code_clear_ + 1);
   decompressed_next_ = 0;
 
@@ -175,8 +176,7 @@
   return true;
 }
 
-uint32_t CFX_LZWDecompressor::ExtractData(uint8_t* dest_buf,
-                                          uint32_t dest_size) {
+uint32_t LZWDecompressor::ExtractData(uint8_t* dest_buf, uint32_t dest_size) {
   if (dest_size == 0)
     return 0;
 
@@ -188,3 +188,5 @@
   decompressed_next_ -= copy_size;
   return copy_size;
 }
+
+}  // namespace fxcodec
diff --git a/core/fxcodec/gif/cfx_lzwdecompressor.h b/core/fxcodec/gif/lzw_decompressor.h
similarity index 79%
rename from core/fxcodec/gif/cfx_lzwdecompressor.h
rename to core/fxcodec/gif/lzw_decompressor.h
index f1628ac..390cedb 100644
--- a/core/fxcodec/gif/cfx_lzwdecompressor.h
+++ b/core/fxcodec/gif/lzw_decompressor.h
@@ -4,8 +4,8 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef CORE_FXCODEC_GIF_CFX_LZWDECOMPRESSOR_H_
-#define CORE_FXCODEC_GIF_CFX_LZWDECOMPRESSOR_H_
+#ifndef CORE_FXCODEC_GIF_LZW_DECOMPRESSOR_H_
+#define CORE_FXCODEC_GIF_LZW_DECOMPRESSOR_H_
 
 #include <memory>
 #include <vector>
@@ -13,7 +13,9 @@
 #include "core/fxcodec/gif/cfx_gif.h"
 #include "core/fxcrt/fx_memory_wrappers.h"
 
-class CFX_LZWDecompressor {
+namespace fxcodec {
+
+class LZWDecompressor {
  public:
   enum class Status {
     kError,
@@ -28,9 +30,9 @@
   };
 
   // Returns nullptr on error
-  static std::unique_ptr<CFX_LZWDecompressor> Create(uint8_t color_exp,
-                                                     uint8_t code_exp);
-  ~CFX_LZWDecompressor();
+  static std::unique_ptr<LZWDecompressor> Create(uint8_t color_exp,
+                                                 uint8_t code_exp);
+  ~LZWDecompressor();
 
   Status Decode(const uint8_t* src_buf,
                 uint32_t src_size,
@@ -49,7 +51,7 @@
 
  private:
   // Use Create() instead.
-  CFX_LZWDecompressor(uint8_t color_exp, uint8_t code_exp);
+  LZWDecompressor(uint8_t color_exp, uint8_t code_exp);
 
   void ClearTable();
   void AddCode(uint16_t prefix_code, uint8_t append_char);
@@ -73,4 +75,8 @@
   CodeEntry code_table_[GIF_MAX_LZW_CODE];
 };
 
-#endif  // CORE_FXCODEC_GIF_CFX_LZWDECOMPRESSOR_H_
+}  // namespace fxcodec
+
+using LZWDecompressor = fxcodec::LZWDecompressor;
+
+#endif  // CORE_FXCODEC_GIF_LZW_DECOMPRESSOR_H_
diff --git a/core/fxcodec/gif/cfx_lzwdecompressor_unittest.cpp b/core/fxcodec/gif/lzw_decompressor_unittest.cpp
similarity index 83%
rename from core/fxcodec/gif/cfx_lzwdecompressor_unittest.cpp
rename to core/fxcodec/gif/lzw_decompressor_unittest.cpp
index 1e42c1b..3434beb 100644
--- a/core/fxcodec/gif/cfx_lzwdecompressor_unittest.cpp
+++ b/core/fxcodec/gif/lzw_decompressor_unittest.cpp
@@ -2,21 +2,21 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "core/fxcodec/gif/cfx_lzwdecompressor.h"
+#include "core/fxcodec/gif/lzw_decompressor.h"
 
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/base/stl_util.h"
 
-TEST(CFX_LZWDecompressor, CreateBadParams) {
-  EXPECT_EQ(nullptr, CFX_LZWDecompressor::Create(0x10, 0x02));
-  EXPECT_EQ(nullptr, CFX_LZWDecompressor::Create(0x04, 0x0F));
-  EXPECT_EQ(nullptr, CFX_LZWDecompressor::Create(0x02, 0x02));
+TEST(LZWDecompressor, CreateBadParams) {
+  EXPECT_EQ(nullptr, LZWDecompressor::Create(0x10, 0x02));
+  EXPECT_EQ(nullptr, LZWDecompressor::Create(0x04, 0x0F));
+  EXPECT_EQ(nullptr, LZWDecompressor::Create(0x02, 0x02));
 }
 
-TEST(CFX_LZWDecompressor, ExtractData) {
+TEST(LZWDecompressor, ExtractData) {
   uint8_t palette_exp = 0x1;
   uint8_t code_exp = 0x2;
-  auto decompressor = CFX_LZWDecompressor::Create(palette_exp, code_exp);
+  auto decompressor = LZWDecompressor::Create(palette_exp, code_exp);
   ASSERT_NE(nullptr, decompressor);
 
   // Check that 0 length extract does nothing
@@ -79,10 +79,10 @@
   }
 }
 
-TEST(CFX_LZWDecompressor, DecodeBadParams) {
+TEST(LZWDecompressor, DecodeBadParams) {
   uint8_t palette_exp = 0x0;
   uint8_t code_exp = 0x2;
-  auto decompressor = CFX_LZWDecompressor::Create(palette_exp, code_exp);
+  auto decompressor = LZWDecompressor::Create(palette_exp, code_exp);
   ASSERT_NE(nullptr, decompressor);
 
   uint8_t image_data[10];
@@ -92,26 +92,26 @@
   uint32_t output_size = pdfium::size(output_data);
 
   EXPECT_EQ(
-      CFX_LZWDecompressor::Status::kError,
+      LZWDecompressor::Status::kError,
       decompressor->Decode(nullptr, image_size, output_data, &output_size));
-  EXPECT_EQ(CFX_LZWDecompressor::Status::kError,
+  EXPECT_EQ(LZWDecompressor::Status::kError,
             decompressor->Decode(image_data, 0, output_data, &output_size));
   EXPECT_EQ(
-      CFX_LZWDecompressor::Status::kError,
+      LZWDecompressor::Status::kError,
       decompressor->Decode(image_data, image_size, nullptr, &output_size));
-  EXPECT_EQ(CFX_LZWDecompressor::Status::kError,
+  EXPECT_EQ(LZWDecompressor::Status::kError,
             decompressor->Decode(image_data, image_size, output_data, nullptr));
 
   output_size = 0;
   EXPECT_EQ(
-      CFX_LZWDecompressor::Status::kInsufficientDestSize,
+      LZWDecompressor::Status::kInsufficientDestSize,
       decompressor->Decode(image_data, image_size, output_data, &output_size));
 }
 
-TEST(CFX_LZWDecompressor, Decode1x1SingleColour) {
+TEST(LZWDecompressor, Decode1x1SingleColour) {
   uint8_t palette_exp = 0x0;
   uint8_t code_exp = 0x2;
-  auto decompressor = CFX_LZWDecompressor::Create(palette_exp, code_exp);
+  auto decompressor = LZWDecompressor::Create(palette_exp, code_exp);
   ASSERT_NE(nullptr, decompressor);
 
   uint8_t image_data[] = {0x44, 0x01};
@@ -123,17 +123,17 @@
   uint32_t output_size = pdfium::size(output_data);
 
   EXPECT_EQ(
-      CFX_LZWDecompressor::Status::kSuccess,
+      LZWDecompressor::Status::kSuccess,
       decompressor->Decode(image_data, image_size, output_data, &output_size));
 
   EXPECT_EQ(pdfium::size(output_data), output_size);
   EXPECT_TRUE(0 == memcmp(expected_data, output_data, sizeof(expected_data)));
 }
 
-TEST(CFX_LZWDecompressor, Decode10x10SingleColour) {
+TEST(LZWDecompressor, Decode10x10SingleColour) {
   uint8_t palette_exp = 0x0;
   uint8_t code_exp = 0x2;
-  auto decompressor = CFX_LZWDecompressor::Create(palette_exp, code_exp);
+  auto decompressor = LZWDecompressor::Create(palette_exp, code_exp);
   ASSERT_NE(nullptr, decompressor);
 
   static constexpr uint8_t kImageData[] = {0x84, 0x8F, 0xA9, 0xCB,
@@ -155,17 +155,17 @@
   uint32_t output_size = pdfium::size(output_data);
 
   EXPECT_EQ(
-      CFX_LZWDecompressor::Status::kSuccess,
+      LZWDecompressor::Status::kSuccess,
       decompressor->Decode(kImageData, image_size, output_data, &output_size));
 
   EXPECT_EQ(pdfium::size(output_data), output_size);
   EXPECT_TRUE(0 == memcmp(kExpectedData, output_data, sizeof(kExpectedData)));
 }
 
-TEST(CFX_LZWDecompressor, Decode10x10MultipleColour) {
+TEST(LZWDecompressor, Decode10x10MultipleColour) {
   uint8_t palette_exp = 0x1;
   uint8_t code_exp = 0x2;
-  auto decompressor = CFX_LZWDecompressor::Create(palette_exp, code_exp);
+  auto decompressor = LZWDecompressor::Create(palette_exp, code_exp);
   ASSERT_NE(nullptr, decompressor);
 
   static constexpr uint8_t kImageData[] = {
@@ -189,18 +189,18 @@
   uint32_t output_size = pdfium::size(output_data);
 
   EXPECT_EQ(
-      CFX_LZWDecompressor::Status::kSuccess,
+      LZWDecompressor::Status::kSuccess,
       decompressor->Decode(kImageData, image_size, output_data, &output_size));
 
   EXPECT_EQ(pdfium::size(output_data), output_size);
   EXPECT_TRUE(0 == memcmp(kExpectedData, output_data, sizeof(kExpectedData)));
 }
 
-TEST(CFX_LZWDecompressor, HandleColourCodeOutOfPalette) {
+TEST(LZWDecompressor, HandleColourCodeOutOfPalette) {
   uint8_t palette_exp = 0x2;  // Image uses 10 colours, so the palette exp
                               // should be 3, 2^(3+1) = 16 colours.
   uint8_t code_exp = 0x4;
-  auto decompressor = CFX_LZWDecompressor::Create(palette_exp, code_exp);
+  auto decompressor = LZWDecompressor::Create(palette_exp, code_exp);
   ASSERT_NE(nullptr, decompressor);
 
   static constexpr uint8_t kImageData[] = {
@@ -214,6 +214,6 @@
   uint32_t output_size = pdfium::size(output_data);
 
   EXPECT_EQ(
-      CFX_LZWDecompressor::Status::kError,
+      LZWDecompressor::Status::kError,
       decompressor->Decode(kImageData, image_size, output_data, &output_size));
 }
diff --git a/testing/fuzzers/pdf_lzw_fuzzer.cc b/testing/fuzzers/pdf_lzw_fuzzer.cc
index 9ab5886..196841a 100644
--- a/testing/fuzzers/pdf_lzw_fuzzer.cc
+++ b/testing/fuzzers/pdf_lzw_fuzzer.cc
@@ -4,7 +4,7 @@
 
 #include <vector>
 
-#include "core/fxcodec/gif/cfx_lzwdecompressor.h"
+#include "core/fxcodec/gif/lzw_decompressor.h"
 #include "third_party/base/numerics/safe_conversions.h"
 
 // Between 2x and 5x is a standard range for LZW according to a quick
@@ -16,8 +16,8 @@
              size_t src_size,
              uint8_t color_exp,
              uint8_t code_exp) {
-  std::unique_ptr<CFX_LZWDecompressor> decompressor =
-      CFX_LZWDecompressor::Create(color_exp, code_exp);
+  std::unique_ptr<LZWDecompressor> decompressor =
+      LZWDecompressor::Create(color_exp, code_exp);
   if (!decompressor)
     return;
 
@@ -27,7 +27,7 @@
     // This cast should be safe since the caller is checking for overflow on
     // the initial data.
     uint32_t dest_size = static_cast<uint32_t>(dest_buf.size());
-    if (CFX_LZWDecompressor::Status::kInsufficientDestSize !=
+    if (LZWDecompressor::Status::kInsufficientDestSize !=
         decompressor->Decode(src_buf, src_size, dest_buf.data(), &dest_size)) {
       return;
     }
