diff --git a/core/fxcodec/gif/cfx_gifcontext.cpp b/core/fxcodec/gif/cfx_gifcontext.cpp
index 66dea4b..42f6d9b 100644
--- a/core/fxcodec/gif/cfx_gifcontext.cpp
+++ b/core/fxcodec/gif/cfx_gifcontext.cpp
@@ -240,27 +240,27 @@
       SaveDecodingStatus(GIF_D_STATUS_IMG_DATA);
       img_row_offset_ += img_row_avail_size_;
       img_row_avail_size_ = gif_img_row_bytes - img_row_offset_;
-      GifDecoder::Status ret =
+      CFX_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_)
-              : GifDecoder::Status::kError;
-      if (ret == GifDecoder::Status::kError) {
+              : CFX_LZWDecompressor::Status::kError;
+      if (ret == CFX_LZWDecompressor::Status::kError) {
         DecodingFailureAtTailCleanup(gif_image);
         return GifDecoder::Status::kError;
       }
 
-      while (ret != GifDecoder::Status::kError) {
-        if (ret == GifDecoder::Status::kSuccess) {
+      while (ret != CFX_LZWDecompressor::Status::kError) {
+        if (ret == CFX_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 == GifDecoder::Status::kUnfinished) {
+        if (ret == CFX_LZWDecompressor::Status::kUnfinished) {
           read_marker = input_buffer_->GetPosition();
           if (!ReadAllOrNone(&img_data_size, sizeof(img_data_size)))
             return GifDecoder::Status::kUnfinished;
@@ -284,11 +284,11 @@
                             img_data.data(), img_data_size,
                             gif_image->row_buffer.data() + img_row_offset_,
                             &img_row_avail_size_)
-                      : GifDecoder::Status::kError;
+                      : CFX_LZWDecompressor::Status::kError;
           }
         }
 
-        if (ret == GifDecoder::Status::kInsufficientDestSize) {
+        if (ret == CFX_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_)
-                    : GifDecoder::Status::kError;
+                    : CFX_LZWDecompressor::Status::kError;
         }
 
-        if (ret == GifDecoder::Status::kInsufficientDestSize ||
-            ret == GifDecoder::Status::kError) {
+        if (ret == CFX_LZWDecompressor::Status::kInsufficientDestSize ||
+            ret == CFX_LZWDecompressor::Status::kError) {
           DecodingFailureAtTailCleanup(gif_image);
           return GifDecoder::Status::kError;
         }
diff --git a/core/fxcodec/gif/cfx_lzwdecompressor.cpp b/core/fxcodec/gif/cfx_lzwdecompressor.cpp
index 3b8fa62..144dca6 100644
--- a/core/fxcodec/gif/cfx_lzwdecompressor.cpp
+++ b/core/fxcodec/gif/cfx_lzwdecompressor.cpp
@@ -35,15 +35,15 @@
 
 CFX_LZWDecompressor::~CFX_LZWDecompressor() = default;
 
-GifDecoder::Status CFX_LZWDecompressor::Decode(const uint8_t* src_buf,
-                                               uint32_t src_size,
-                                               uint8_t* dest_buf,
-                                               uint32_t* dest_size) {
+CFX_LZWDecompressor::Status CFX_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 GifDecoder::Status::kError;
+    return Status::kError;
 
   if (*dest_size == 0)
-    return GifDecoder::Status::kInsufficientDestSize;
+    return Status::kInsufficientDestSize;
 
   next_in_ = src_buf;
   avail_in_ = src_size;
@@ -54,7 +54,7 @@
   if (decompressed_next_ != 0) {
     uint32_t extracted_size = ExtractData(dest_buf, *dest_size);
     if (decompressed_next_ != 0)
-      return GifDecoder::Status::kInsufficientDestSize;
+      return Status::kInsufficientDestSize;
 
     dest_buf += extracted_size;
     i += extracted_size;
@@ -62,17 +62,17 @@
 
   while (i <= *dest_size && (avail_in_ > 0 || bits_left_ >= code_size_cur_)) {
     if (code_size_cur_ > GIF_MAX_LZW_EXP)
-      return GifDecoder::Status::kError;
+      return Status::kError;
 
     if (avail_in_ > 0) {
       if (bits_left_ > 31)
-        return GifDecoder::Status::kError;
+        return Status::kError;
 
       FX_SAFE_UINT32 safe_code = *next_in_++;
       safe_code <<= bits_left_;
       safe_code |= code_store_;
       if (!safe_code.IsValid())
-        return GifDecoder::Status::kError;
+        return Status::kError;
 
       code_store_ = safe_code.ValueOrDie();
       --avail_in_;
@@ -90,7 +90,7 @@
       }
       if (code == code_end_) {
         *dest_size = i;
-        return GifDecoder::Status::kSuccess;
+        return Status::kSuccess;
       }
 
       if (code_old_ != static_cast<uint16_t>(-1)) {
@@ -98,12 +98,12 @@
           if (code == code_next_) {
             AddCode(code_old_, code_first_);
             if (!DecodeString(code))
-              return GifDecoder::Status::kError;
+              return Status::kError;
           } else if (code > code_next_) {
-            return GifDecoder::Status::kError;
+            return Status::kError;
           } else {
             if (!DecodeString(code))
-              return GifDecoder::Status::kError;
+              return Status::kError;
 
             uint8_t append_char = decompressed_[decompressed_next_ - 1];
             AddCode(code_old_, append_char);
@@ -111,13 +111,13 @@
         }
       } else {
         if (!DecodeString(code))
-          return GifDecoder::Status::kError;
+          return Status::kError;
       }
 
       code_old_ = code;
       uint32_t extracted_size = ExtractData(dest_buf, *dest_size - i);
       if (decompressed_next_ != 0)
-        return GifDecoder::Status::kInsufficientDestSize;
+        return Status::kInsufficientDestSize;
 
       dest_buf += extracted_size;
       i += extracted_size;
@@ -125,10 +125,10 @@
   }
 
   if (avail_in_ != 0)
-    return GifDecoder::Status::kError;
+    return Status::kError;
 
   *dest_size = i;
-  return GifDecoder::Status::kUnfinished;
+  return Status::kUnfinished;
 }
 
 void CFX_LZWDecompressor::ClearTable() {
diff --git a/core/fxcodec/gif/cfx_lzwdecompressor.h b/core/fxcodec/gif/cfx_lzwdecompressor.h
index 979686c..f1628ac 100644
--- a/core/fxcodec/gif/cfx_lzwdecompressor.h
+++ b/core/fxcodec/gif/cfx_lzwdecompressor.h
@@ -11,11 +11,17 @@
 #include <vector>
 
 #include "core/fxcodec/gif/cfx_gif.h"
-#include "core/fxcodec/gif/gif_decoder.h"
 #include "core/fxcrt/fx_memory_wrappers.h"
 
 class CFX_LZWDecompressor {
  public:
+  enum class Status {
+    kError,
+    kSuccess,
+    kUnfinished,
+    kInsufficientDestSize,
+  };
+
   struct CodeEntry {
     uint16_t prefix;
     uint8_t suffix;
@@ -26,10 +32,10 @@
                                                      uint8_t code_exp);
   ~CFX_LZWDecompressor();
 
-  GifDecoder::Status Decode(const uint8_t* src_buf,
-                            uint32_t src_size,
-                            uint8_t* dest_buf,
-                            uint32_t* dest_size);
+  Status Decode(const uint8_t* src_buf,
+                uint32_t src_size,
+                uint8_t* dest_buf,
+                uint32_t* dest_size);
 
   // Used by unittests, should not be called in production code.
   uint32_t ExtractDataForTest(uint8_t* dest_buf, uint32_t dest_size) {
diff --git a/core/fxcodec/gif/cfx_lzwdecompressor_unittest.cpp b/core/fxcodec/gif/cfx_lzwdecompressor_unittest.cpp
index e952fa0..1e42c1b 100644
--- a/core/fxcodec/gif/cfx_lzwdecompressor_unittest.cpp
+++ b/core/fxcodec/gif/cfx_lzwdecompressor_unittest.cpp
@@ -92,19 +92,19 @@
   uint32_t output_size = pdfium::size(output_data);
 
   EXPECT_EQ(
-      GifDecoder::Status::kError,
+      CFX_LZWDecompressor::Status::kError,
       decompressor->Decode(nullptr, image_size, output_data, &output_size));
-  EXPECT_EQ(GifDecoder::Status::kError,
+  EXPECT_EQ(CFX_LZWDecompressor::Status::kError,
             decompressor->Decode(image_data, 0, output_data, &output_size));
   EXPECT_EQ(
-      GifDecoder::Status::kError,
+      CFX_LZWDecompressor::Status::kError,
       decompressor->Decode(image_data, image_size, nullptr, &output_size));
-  EXPECT_EQ(GifDecoder::Status::kError,
+  EXPECT_EQ(CFX_LZWDecompressor::Status::kError,
             decompressor->Decode(image_data, image_size, output_data, nullptr));
 
   output_size = 0;
   EXPECT_EQ(
-      GifDecoder::Status::kInsufficientDestSize,
+      CFX_LZWDecompressor::Status::kInsufficientDestSize,
       decompressor->Decode(image_data, image_size, output_data, &output_size));
 }
 
@@ -123,7 +123,7 @@
   uint32_t output_size = pdfium::size(output_data);
 
   EXPECT_EQ(
-      GifDecoder::Status::kSuccess,
+      CFX_LZWDecompressor::Status::kSuccess,
       decompressor->Decode(image_data, image_size, output_data, &output_size));
 
   EXPECT_EQ(pdfium::size(output_data), output_size);
@@ -155,7 +155,7 @@
   uint32_t output_size = pdfium::size(output_data);
 
   EXPECT_EQ(
-      GifDecoder::Status::kSuccess,
+      CFX_LZWDecompressor::Status::kSuccess,
       decompressor->Decode(kImageData, image_size, output_data, &output_size));
 
   EXPECT_EQ(pdfium::size(output_data), output_size);
@@ -189,7 +189,7 @@
   uint32_t output_size = pdfium::size(output_data);
 
   EXPECT_EQ(
-      GifDecoder::Status::kSuccess,
+      CFX_LZWDecompressor::Status::kSuccess,
       decompressor->Decode(kImageData, image_size, output_data, &output_size));
 
   EXPECT_EQ(pdfium::size(output_data), output_size);
@@ -214,6 +214,6 @@
   uint32_t output_size = pdfium::size(output_data);
 
   EXPECT_EQ(
-      GifDecoder::Status::kError,
+      CFX_LZWDecompressor::Status::kError,
       decompressor->Decode(kImageData, image_size, output_data, &output_size));
 }
diff --git a/core/fxcodec/gif/gif_decoder.h b/core/fxcodec/gif/gif_decoder.h
index 9a4df57..53b665a 100644
--- a/core/fxcodec/gif/gif_decoder.h
+++ b/core/fxcodec/gif/gif_decoder.h
@@ -28,7 +28,6 @@
     kError,
     kSuccess,
     kUnfinished,
-    kInsufficientDestSize,  // Only used internally by CGifLZWDecoder::Decode()
   };
 
   class Delegate {
diff --git a/testing/fuzzers/pdf_lzw_fuzzer.cc b/testing/fuzzers/pdf_lzw_fuzzer.cc
index e868ae4..9ab5886 100644
--- a/testing/fuzzers/pdf_lzw_fuzzer.cc
+++ b/testing/fuzzers/pdf_lzw_fuzzer.cc
@@ -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 (GifDecoder::Status::kInsufficientDestSize !=
+    if (CFX_LZWDecompressor::Status::kInsufficientDestSize !=
         decompressor->Decode(src_buf, src_size, dest_buf.data(), &dest_size)) {
       return;
     }
