Make RenderDeviceDriverIface more const-correct

Change SetDIBits(), StretchDIBits(), and StartDIBits() to have truly
const bitmap parameters. Then change all the RenderDeviceDriverIface
implementations and associated code to use const bitmaps as well.

Bug: pdfium:2115
Change-Id: I07d6d6ed50ad6de14f3b228d3f3d0f7f11d70ca5
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/115411
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fxcodec/fax/faxmodule.cpp b/core/fxcodec/fax/faxmodule.cpp
index a904186..df97129 100644
--- a/core/fxcodec/fax/faxmodule.cpp
+++ b/core/fxcodec/fax/faxmodule.cpp
@@ -688,7 +688,7 @@
 
 class FaxEncoder {
  public:
-  explicit FaxEncoder(RetainPtr<CFX_DIBBase> src);
+  explicit FaxEncoder(RetainPtr<const CFX_DIBBase> src);
   ~FaxEncoder();
   DataVector<uint8_t> Encode();
 
@@ -698,7 +698,7 @@
   void AddBitStream(int data, int bitlen);
 
   // Must outlive `m_RefLineSpan`.
-  RetainPtr<CFX_DIBBase> const m_Src;
+  RetainPtr<const CFX_DIBBase> const m_Src;
   int m_DestBitpos = 0;
   const int m_Cols;
   const int m_Rows;
@@ -710,7 +710,7 @@
   pdfium::span<const uint8_t> m_RefLineSpan;
 };
 
-FaxEncoder::FaxEncoder(RetainPtr<CFX_DIBBase> src)
+FaxEncoder::FaxEncoder(RetainPtr<const CFX_DIBBase> src)
     : m_Src(std::move(src)),
       m_Cols(m_Src->GetWidth()),
       m_Rows(m_Src->GetHeight()),
@@ -825,7 +825,7 @@
 }  // namespace
 
 // static
-DataVector<uint8_t> FaxModule::FaxEncode(RetainPtr<CFX_DIBBase> src) {
+DataVector<uint8_t> FaxModule::FaxEncode(RetainPtr<const CFX_DIBBase> src) {
   DCHECK_EQ(1, src->GetBPP());
   FaxEncoder encoder(std::move(src));
   return encoder.Encode();
diff --git a/core/fxcodec/fax/faxmodule.h b/core/fxcodec/fax/faxmodule.h
index 2e7f5be..acc62d8 100644
--- a/core/fxcodec/fax/faxmodule.h
+++ b/core/fxcodec/fax/faxmodule.h
@@ -49,7 +49,7 @@
 
 #if BUILDFLAG(IS_WIN)
   // `src` must have a BPP value of 1.
-  static DataVector<uint8_t> FaxEncode(RetainPtr<CFX_DIBBase> src);
+  static DataVector<uint8_t> FaxEncode(RetainPtr<const CFX_DIBBase> src);
 #endif  // BUILDFLAG(IS_WIN)
 
   FaxModule() = delete;
diff --git a/core/fxcodec/jpeg/jpegmodule.cpp b/core/fxcodec/jpeg/jpegmodule.cpp
index 83f3e0b..7daefac 100644
--- a/core/fxcodec/jpeg/jpegmodule.cpp
+++ b/core/fxcodec/jpeg/jpegmodule.cpp
@@ -403,7 +403,7 @@
 }
 
 #if BUILDFLAG(IS_WIN)
-bool JpegModule::JpegEncode(const RetainPtr<CFX_DIBBase>& pSource,
+bool JpegModule::JpegEncode(const RetainPtr<const CFX_DIBBase>& pSource,
                             uint8_t** dest_buf,
                             size_t* dest_size) {
   jpeg_error_mgr jerr;
diff --git a/core/fxcodec/jpeg/jpegmodule.h b/core/fxcodec/jpeg/jpegmodule.h
index 0f61765..ac54fa8 100644
--- a/core/fxcodec/jpeg/jpegmodule.h
+++ b/core/fxcodec/jpeg/jpegmodule.h
@@ -46,7 +46,7 @@
       pdfium::span<const uint8_t> src_span);
 
 #if BUILDFLAG(IS_WIN)
-  static bool JpegEncode(const RetainPtr<CFX_DIBBase>& pSource,
+  static bool JpegEncode(const RetainPtr<const CFX_DIBBase>& pSource,
                          uint8_t** dest_buf,
                          size_t* dest_size);
 #endif  // BUILDFLAG(IS_WIN)
diff --git a/core/fxge/agg/fx_agg_driver.cpp b/core/fxge/agg/fx_agg_driver.cpp
index 70159ea..27515d1 100644
--- a/core/fxge/agg/fx_agg_driver.cpp
+++ b/core/fxge/agg/fx_agg_driver.cpp
@@ -1300,7 +1300,7 @@
   return m_pBackdropBitmap;
 }
 
-bool CFX_AggDeviceDriver::SetDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
+bool CFX_AggDeviceDriver::SetDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
                                     uint32_t argb,
                                     const FX_RECT& src_rect,
                                     int left,
@@ -1320,15 +1320,16 @@
       src_rect.top, blend_type, m_pClipRgn.get(), m_bRgbByteOrder);
 }
 
-bool CFX_AggDeviceDriver::StretchDIBits(const RetainPtr<CFX_DIBBase>& pSource,
-                                        uint32_t argb,
-                                        int dest_left,
-                                        int dest_top,
-                                        int dest_width,
-                                        int dest_height,
-                                        const FX_RECT* pClipRect,
-                                        const FXDIB_ResampleOptions& options,
-                                        BlendMode blend_type) {
+bool CFX_AggDeviceDriver::StretchDIBits(
+    const RetainPtr<const CFX_DIBBase>& pSource,
+    uint32_t argb,
+    int dest_left,
+    int dest_top,
+    int dest_width,
+    int dest_height,
+    const FX_RECT* pClipRect,
+    const FXDIB_ResampleOptions& options,
+    BlendMode blend_type) {
   if (m_pBitmap->GetBuffer().empty())
     return true;
 
@@ -1354,7 +1355,7 @@
 }
 
 bool CFX_AggDeviceDriver::StartDIBits(
-    const RetainPtr<CFX_DIBBase>& pSource,
+    const RetainPtr<const CFX_DIBBase>& pSource,
     int bitmap_alpha,
     uint32_t argb,
     const CFX_Matrix& matrix,
diff --git a/core/fxge/agg/fx_agg_driver.h b/core/fxge/agg/fx_agg_driver.h
index 523bb0c..1908691 100644
--- a/core/fxge/agg/fx_agg_driver.h
+++ b/core/fxge/agg/fx_agg_driver.h
@@ -67,13 +67,13 @@
                  int left,
                  int top) override;
   RetainPtr<CFX_DIBitmap> GetBackDrop() override;
-  bool SetDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
+  bool SetDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
                  uint32_t argb,
                  const FX_RECT& src_rect,
                  int left,
                  int top,
                  BlendMode blend_type) override;
-  bool StretchDIBits(const RetainPtr<CFX_DIBBase>& pSource,
+  bool StretchDIBits(const RetainPtr<const CFX_DIBBase>& pSource,
                      uint32_t argb,
                      int dest_left,
                      int dest_top,
@@ -82,7 +82,7 @@
                      const FX_RECT* pClipRect,
                      const FXDIB_ResampleOptions& options,
                      BlendMode blend_type) override;
-  bool StartDIBits(const RetainPtr<CFX_DIBBase>& pSource,
+  bool StartDIBits(const RetainPtr<const CFX_DIBBase>& pSource,
                    int bitmap_alpha,
                    uint32_t argb,
                    const CFX_Matrix& matrix,
diff --git a/core/fxge/cfx_renderdevice.cpp b/core/fxge/cfx_renderdevice.cpp
index e0025de..0fec8e9 100644
--- a/core/fxge/cfx_renderdevice.cpp
+++ b/core/fxge/cfx_renderdevice.cpp
@@ -888,10 +888,11 @@
   return m_pDeviceDriver->GetBackDrop();
 }
 
-bool CFX_RenderDevice::SetDIBitsWithBlend(const RetainPtr<CFX_DIBBase>& pBitmap,
-                                          int left,
-                                          int top,
-                                          BlendMode blend_mode) {
+bool CFX_RenderDevice::SetDIBitsWithBlend(
+    const RetainPtr<const CFX_DIBBase>& pBitmap,
+    int left,
+    int top,
+    BlendMode blend_mode) {
   DCHECK(!pBitmap->IsMaskFormat());
   FX_RECT dest_rect(left, top, left + pBitmap->GetWidth(),
                     top + pBitmap->GetHeight());
@@ -931,7 +932,7 @@
 }
 
 bool CFX_RenderDevice::StretchDIBitsWithFlagsAndBlend(
-    const RetainPtr<CFX_DIBBase>& pBitmap,
+    const RetainPtr<const CFX_DIBBase>& pBitmap,
     int left,
     int top,
     int dest_width,
diff --git a/core/fxge/cfx_renderdevice.h b/core/fxge/cfx_renderdevice.h
index fdc577d..4e24b23 100644
--- a/core/fxge/cfx_renderdevice.h
+++ b/core/fxge/cfx_renderdevice.h
@@ -95,14 +95,16 @@
 
   RetainPtr<CFX_DIBitmap> GetBackDrop();
   bool GetDIBits(const RetainPtr<CFX_DIBitmap>& pBitmap, int left, int top);
-  bool SetDIBits(const RetainPtr<CFX_DIBBase>& pBitmap, int left, int top) {
+  bool SetDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
+                 int left,
+                 int top) {
     return SetDIBitsWithBlend(pBitmap, left, top, BlendMode::kNormal);
   }
-  bool SetDIBitsWithBlend(const RetainPtr<CFX_DIBBase>& pBitmap,
+  bool SetDIBitsWithBlend(const RetainPtr<const CFX_DIBBase>& pBitmap,
                           int left,
                           int top,
                           BlendMode blend_mode);
-  bool StretchDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
+  bool StretchDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
                      int left,
                      int top,
                      int dest_width,
@@ -111,13 +113,14 @@
                                           dest_height, FXDIB_ResampleOptions(),
                                           BlendMode::kNormal);
   }
-  bool StretchDIBitsWithFlagsAndBlend(const RetainPtr<CFX_DIBBase>& pBitmap,
-                                      int left,
-                                      int top,
-                                      int dest_width,
-                                      int dest_height,
-                                      const FXDIB_ResampleOptions& options,
-                                      BlendMode blend_mode);
+  bool StretchDIBitsWithFlagsAndBlend(
+      const RetainPtr<const CFX_DIBBase>& pBitmap,
+      int left,
+      int top,
+      int dest_width,
+      int dest_height,
+      const FXDIB_ResampleOptions& options,
+      BlendMode blend_mode);
   bool SetBitMask(const RetainPtr<CFX_DIBBase>& pBitmap,
                   int left,
                   int top,
diff --git a/core/fxge/dib/cfx_dibitmap.cpp b/core/fxge/dib/cfx_dibitmap.cpp
index e4bb777..0d5c4d7 100644
--- a/core/fxge/dib/cfx_dibitmap.cpp
+++ b/core/fxge/dib/cfx_dibitmap.cpp
@@ -769,7 +769,7 @@
                                  int dest_top,
                                  int width,
                                  int height,
-                                 const RetainPtr<CFX_DIBBase>& pMask,
+                                 const RetainPtr<const CFX_DIBBase>& pMask,
                                  uint32_t color,
                                  int src_left,
                                  int src_top,
diff --git a/core/fxge/dib/cfx_dibitmap.h b/core/fxge/dib/cfx_dibitmap.h
index ee3b202..e19d32a 100644
--- a/core/fxge/dib/cfx_dibitmap.h
+++ b/core/fxge/dib/cfx_dibitmap.h
@@ -91,7 +91,7 @@
                      int dest_top,
                      int width,
                      int height,
-                     const RetainPtr<CFX_DIBBase>& pMask,
+                     const RetainPtr<const CFX_DIBBase>& pMask,
                      uint32_t color,
                      int src_left,
                      int src_top,
diff --git a/core/fxge/dib/cfx_imagerenderer.cpp b/core/fxge/dib/cfx_imagerenderer.cpp
index 2e7f496..5abd96c 100644
--- a/core/fxge/dib/cfx_imagerenderer.cpp
+++ b/core/fxge/dib/cfx_imagerenderer.cpp
@@ -15,14 +15,15 @@
 #include "core/fxge/dib/cfx_imagestretcher.h"
 #include "core/fxge/dib/cfx_imagetransformer.h"
 
-CFX_ImageRenderer::CFX_ImageRenderer(const RetainPtr<CFX_DIBitmap>& pDevice,
-                                     const CFX_ClipRgn* pClipRgn,
-                                     const RetainPtr<CFX_DIBBase>& pSource,
-                                     int bitmap_alpha,
-                                     uint32_t mask_color,
-                                     const CFX_Matrix& matrix,
-                                     const FXDIB_ResampleOptions& options,
-                                     bool bRgbByteOrder)
+CFX_ImageRenderer::CFX_ImageRenderer(
+    const RetainPtr<CFX_DIBitmap>& pDevice,
+    const CFX_ClipRgn* pClipRgn,
+    const RetainPtr<const CFX_DIBBase>& pSource,
+    int bitmap_alpha,
+    uint32_t mask_color,
+    const CFX_Matrix& matrix,
+    const FXDIB_ResampleOptions& options,
+    bool bRgbByteOrder)
     : m_pDevice(pDevice),
       m_pClipRgn(pClipRgn),
       m_Matrix(matrix),
diff --git a/core/fxge/dib/cfx_imagerenderer.h b/core/fxge/dib/cfx_imagerenderer.h
index 9c31e05..c851017 100644
--- a/core/fxge/dib/cfx_imagerenderer.h
+++ b/core/fxge/dib/cfx_imagerenderer.h
@@ -24,7 +24,7 @@
  public:
   CFX_ImageRenderer(const RetainPtr<CFX_DIBitmap>& pDevice,
                     const CFX_ClipRgn* pClipRgn,
-                    const RetainPtr<CFX_DIBBase>& pSource,
+                    const RetainPtr<const CFX_DIBBase>& pSource,
                     int bitmap_alpha,
                     uint32_t mask_color,
                     const CFX_Matrix& matrix,
diff --git a/core/fxge/renderdevicedriver_iface.h b/core/fxge/renderdevicedriver_iface.h
index bfa4fb7..eb942e0 100644
--- a/core/fxge/renderdevicedriver_iface.h
+++ b/core/fxge/renderdevicedriver_iface.h
@@ -72,13 +72,13 @@
                          int left,
                          int top);
   virtual RetainPtr<CFX_DIBitmap> GetBackDrop();
-  virtual bool SetDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
+  virtual bool SetDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
                          uint32_t color,
                          const FX_RECT& src_rect,
                          int dest_left,
                          int dest_top,
                          BlendMode blend_type) = 0;
-  virtual bool StretchDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
+  virtual bool StretchDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
                              uint32_t color,
                              int dest_left,
                              int dest_top,
@@ -87,7 +87,7 @@
                              const FX_RECT* pClipRect,
                              const FXDIB_ResampleOptions& options,
                              BlendMode blend_type) = 0;
-  virtual bool StartDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
+  virtual bool StartDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
                            int bitmap_alpha,
                            uint32_t color,
                            const CFX_Matrix& matrix,
diff --git a/core/fxge/skia/fx_skia_device.cpp b/core/fxge/skia/fx_skia_device.cpp
index 7c31bcf..d533d4d 100644
--- a/core/fxge/skia/fx_skia_device.cpp
+++ b/core/fxge/skia/fx_skia_device.cpp
@@ -1383,12 +1383,13 @@
   return m_pBackdropBitmap;
 }
 
-bool CFX_SkiaDeviceDriver::SetDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
-                                     uint32_t color,
-                                     const FX_RECT& src_rect,
-                                     int left,
-                                     int top,
-                                     BlendMode blend_type) {
+bool CFX_SkiaDeviceDriver::SetDIBits(
+    const RetainPtr<const CFX_DIBBase>& pBitmap,
+    uint32_t color,
+    const FX_RECT& src_rect,
+    int left,
+    int top,
+    BlendMode blend_type) {
   if (m_pBitmap->GetBuffer().empty()) {
     return true;
   }
@@ -1404,15 +1405,16 @@
                          blend_type);
 }
 
-bool CFX_SkiaDeviceDriver::StretchDIBits(const RetainPtr<CFX_DIBBase>& pSource,
-                                         uint32_t color,
-                                         int dest_left,
-                                         int dest_top,
-                                         int dest_width,
-                                         int dest_height,
-                                         const FX_RECT* pClipRect,
-                                         const FXDIB_ResampleOptions& options,
-                                         BlendMode blend_type) {
+bool CFX_SkiaDeviceDriver::StretchDIBits(
+    const RetainPtr<const CFX_DIBBase>& pSource,
+    uint32_t color,
+    int dest_left,
+    int dest_top,
+    int dest_width,
+    int dest_height,
+    const FX_RECT* pClipRect,
+    const FXDIB_ResampleOptions& options,
+    BlendMode blend_type) {
   if (m_pBitmap->GetBuffer().empty())
     return true;
 
@@ -1433,7 +1435,7 @@
 }
 
 bool CFX_SkiaDeviceDriver::StartDIBits(
-    const RetainPtr<CFX_DIBBase>& pSource,
+    const RetainPtr<const CFX_DIBBase>& pSource,
     int bitmap_alpha,
     uint32_t color,
     const CFX_Matrix& matrix,
@@ -1568,7 +1570,7 @@
 }
 
 bool CFX_SkiaDeviceDriver::StartDIBitsSkia(
-    const RetainPtr<CFX_DIBBase>& pSource,
+    const RetainPtr<const CFX_DIBBase>& pSource,
     const FX_RECT& src_rect,
     int bitmap_alpha,
     uint32_t color,
diff --git a/core/fxge/skia/fx_skia_device.h b/core/fxge/skia/fx_skia_device.h
index 9d32931..81ab061 100644
--- a/core/fxge/skia/fx_skia_device.h
+++ b/core/fxge/skia/fx_skia_device.h
@@ -95,7 +95,7 @@
 
   RetainPtr<CFX_DIBitmap> GetBackDrop() override;
 
-  bool SetDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
+  bool SetDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
                  uint32_t color,
                  const FX_RECT& src_rect,
                  int dest_left,
@@ -110,7 +110,7 @@
   void SetGroupKnockout(bool group_knockout) override;
   bool SyncInternalBitmaps() override;
 
-  bool StretchDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
+  bool StretchDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
                      uint32_t color,
                      int dest_left,
                      int dest_top,
@@ -120,7 +120,7 @@
                      const FXDIB_ResampleOptions& options,
                      BlendMode blend_type) override;
 
-  bool StartDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
+  bool StartDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
                    int bitmap_alpha,
                    uint32_t color,
                    const CFX_Matrix& matrix,
@@ -207,7 +207,7 @@
                    uint32_t color,
                    const CFX_TextRenderOptions& options);
 
-  bool StartDIBitsSkia(const RetainPtr<CFX_DIBBase>& pSource,
+  bool StartDIBitsSkia(const RetainPtr<const CFX_DIBBase>& pSource,
                        const FX_RECT& src_rect,
                        int bitmap_alpha,
                        uint32_t color,
diff --git a/core/fxge/win32/cfx_psrenderer.cpp b/core/fxge/win32/cfx_psrenderer.cpp
index 2815d28..e8068bd 100644
--- a/core/fxge/win32/cfx_psrenderer.cpp
+++ b/core/fxge/win32/cfx_psrenderer.cpp
@@ -478,7 +478,7 @@
   WriteStream(buf);
 }
 
-bool CFX_PSRenderer::SetDIBits(const RetainPtr<CFX_DIBBase>& pSource,
+bool CFX_PSRenderer::SetDIBits(const RetainPtr<const CFX_DIBBase>& pSource,
                                uint32_t color,
                                int left,
                                int top) {
@@ -488,7 +488,7 @@
   return DrawDIBits(pSource, color, matrix, FXDIB_ResampleOptions());
 }
 
-bool CFX_PSRenderer::StretchDIBits(const RetainPtr<CFX_DIBBase>& pSource,
+bool CFX_PSRenderer::StretchDIBits(const RetainPtr<const CFX_DIBBase>& pSource,
                                    uint32_t color,
                                    int dest_left,
                                    int dest_top,
@@ -501,7 +501,7 @@
   return DrawDIBits(pSource, color, matrix, options);
 }
 
-bool CFX_PSRenderer::DrawDIBits(const RetainPtr<CFX_DIBBase>& pSource,
+bool CFX_PSRenderer::DrawDIBits(const RetainPtr<const CFX_DIBBase>& pSource,
                                 uint32_t color,
                                 const CFX_Matrix& matrix,
                                 const FXDIB_ResampleOptions& options) {
@@ -553,7 +553,7 @@
     WriteStream(buf);
     WritePSBinary(compress_result.data);
   } else {
-    RetainPtr<CFX_DIBBase> pConverted = pSource;
+    RetainPtr<const CFX_DIBBase> pConverted = pSource;
     switch (pSource->GetFormat()) {
       case FXDIB_Format::k1bppRgb:
       case FXDIB_Format::kRgb32:
@@ -837,7 +837,7 @@
 }
 
 CFX_PSRenderer::FaxCompressResult CFX_PSRenderer::FaxCompressData(
-    RetainPtr<CFX_DIBBase> src) const {
+    RetainPtr<const CFX_DIBBase> src) const {
   DCHECK_EQ(1, src->GetBPP());
 
   FaxCompressResult result;
diff --git a/core/fxge/win32/cfx_psrenderer.h b/core/fxge/win32/cfx_psrenderer.h
index ad914be..aa73abb 100644
--- a/core/fxge/win32/cfx_psrenderer.h
+++ b/core/fxge/win32/cfx_psrenderer.h
@@ -37,9 +37,9 @@
 
 struct EncoderIface {
   DataVector<uint8_t> (*pA85EncodeFunc)(pdfium::span<const uint8_t> src_span);
-  DataVector<uint8_t> (*pFaxEncodeFunc)(RetainPtr<CFX_DIBBase> src);
+  DataVector<uint8_t> (*pFaxEncodeFunc)(RetainPtr<const CFX_DIBBase> src);
   DataVector<uint8_t> (*pFlateEncodeFunc)(pdfium::span<const uint8_t> src_span);
-  bool (*pJpegEncodeFunc)(const RetainPtr<CFX_DIBBase>& pSource,
+  bool (*pJpegEncodeFunc)(const RetainPtr<const CFX_DIBBase>& pSource,
                           uint8_t** dest_buf,
                           size_t* dest_size);
   DataVector<uint8_t> (*pRunLengthEncodeFunc)(
@@ -77,18 +77,18 @@
                 uint32_t fill_color,
                 uint32_t stroke_color,
                 const CFX_FillRenderOptions& fill_options);
-  bool SetDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
+  bool SetDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
                  uint32_t color,
                  int dest_left,
                  int dest_top);
-  bool StretchDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
+  bool StretchDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
                      uint32_t color,
                      int dest_left,
                      int dest_top,
                      int dest_width,
                      int dest_height,
                      const FXDIB_ResampleOptions& options);
-  bool DrawDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
+  bool DrawDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
                   uint32_t color,
                   const CFX_Matrix& matrix,
                   const FXDIB_ResampleOptions& options);
@@ -156,7 +156,7 @@
                             CFX_Font* font,
                             float font_size,
                             fxcrt::ostringstream& buf);
-  FaxCompressResult FaxCompressData(RetainPtr<CFX_DIBBase> src) const;
+  FaxCompressResult FaxCompressData(RetainPtr<const CFX_DIBBase> src) const;
   absl::optional<PSCompressResult> PSCompressData(
       pdfium::span<const uint8_t> src_span) const;
   void WritePreambleString(ByteStringView str);
diff --git a/core/fxge/win32/cgdi_device_driver.cpp b/core/fxge/win32/cgdi_device_driver.cpp
index b315a09..1c836cb 100644
--- a/core/fxge/win32/cgdi_device_driver.cpp
+++ b/core/fxge/win32/cgdi_device_driver.cpp
@@ -389,7 +389,7 @@
     SaveDC(m_hDC);
 }
 
-bool CGdiDeviceDriver::GDI_SetDIBits(const RetainPtr<CFX_DIBBase>& source,
+bool CGdiDeviceDriver::GDI_SetDIBits(const RetainPtr<const CFX_DIBBase>& source,
                                      const FX_RECT& src_rect,
                                      int left,
                                      int top) {
@@ -427,12 +427,13 @@
   return true;
 }
 
-bool CGdiDeviceDriver::GDI_StretchDIBits(const RetainPtr<CFX_DIBBase>& source,
-                                         int dest_left,
-                                         int dest_top,
-                                         int dest_width,
-                                         int dest_height,
-                                         const FXDIB_ResampleOptions& options) {
+bool CGdiDeviceDriver::GDI_StretchDIBits(
+    const RetainPtr<const CFX_DIBBase>& source,
+    int dest_left,
+    int dest_top,
+    int dest_width,
+    int dest_height,
+    const FXDIB_ResampleOptions& options) {
   if (!source || dest_width == 0 || dest_height == 0) {
     return false;
   }
@@ -467,12 +468,13 @@
   return true;
 }
 
-bool CGdiDeviceDriver::GDI_StretchBitMask(const RetainPtr<CFX_DIBBase>& source,
-                                          int dest_left,
-                                          int dest_top,
-                                          int dest_width,
-                                          int dest_height,
-                                          uint32_t bitmap_color) {
+bool CGdiDeviceDriver::GDI_StretchBitMask(
+    const RetainPtr<const CFX_DIBBase>& source,
+    int dest_left,
+    int dest_top,
+    int dest_width,
+    int dest_height,
+    uint32_t bitmap_color) {
   if (!source || dest_width == 0 || dest_height == 0) {
     return false;
   }
diff --git a/core/fxge/win32/cgdi_device_driver.h b/core/fxge/win32/cgdi_device_driver.h
index de8c41e..ee67cbd 100644
--- a/core/fxge/win32/cgdi_device_driver.h
+++ b/core/fxge/win32/cgdi_device_driver.h
@@ -52,17 +52,17 @@
 
   void DrawLine(float x1, float y1, float x2, float y2);
 
-  bool GDI_SetDIBits(const RetainPtr<CFX_DIBBase>& source,
+  bool GDI_SetDIBits(const RetainPtr<const CFX_DIBBase>& source,
                      const FX_RECT& src_rect,
                      int left,
                      int top);
-  bool GDI_StretchDIBits(const RetainPtr<CFX_DIBBase>& source,
+  bool GDI_StretchDIBits(const RetainPtr<const CFX_DIBBase>& source,
                          int dest_left,
                          int dest_top,
                          int dest_width,
                          int dest_height,
                          const FXDIB_ResampleOptions& options);
-  bool GDI_StretchBitMask(const RetainPtr<CFX_DIBBase>& source,
+  bool GDI_StretchBitMask(const RetainPtr<const CFX_DIBBase>& source,
                           int dest_left,
                           int dest_top,
                           int dest_width,
diff --git a/core/fxge/win32/cgdi_display_driver.cpp b/core/fxge/win32/cgdi_display_driver.cpp
index 763e300..a9f2434 100644
--- a/core/fxge/win32/cgdi_display_driver.cpp
+++ b/core/fxge/win32/cgdi_display_driver.cpp
@@ -73,7 +73,7 @@
   return ret;
 }
 
-bool CGdiDisplayDriver::SetDIBits(const RetainPtr<CFX_DIBBase>& pSource,
+bool CGdiDisplayDriver::SetDIBits(const RetainPtr<const CFX_DIBBase>& pSource,
                                   uint32_t color,
                                   const FX_RECT& src_rect,
                                   int left,
@@ -119,7 +119,7 @@
 }
 
 bool CGdiDisplayDriver::UseFoxitStretchEngine(
-    const RetainPtr<CFX_DIBBase>& pSource,
+    const RetainPtr<const CFX_DIBBase>& pSource,
     uint32_t color,
     int dest_left,
     int dest_top,
@@ -145,15 +145,16 @@
                    BlendMode::kNormal);
 }
 
-bool CGdiDisplayDriver::StretchDIBits(const RetainPtr<CFX_DIBBase>& pSource,
-                                      uint32_t color,
-                                      int dest_left,
-                                      int dest_top,
-                                      int dest_width,
-                                      int dest_height,
-                                      const FX_RECT* pClipRect,
-                                      const FXDIB_ResampleOptions& options,
-                                      BlendMode blend_type) {
+bool CGdiDisplayDriver::StretchDIBits(
+    const RetainPtr<const CFX_DIBBase>& pSource,
+    uint32_t color,
+    int dest_left,
+    int dest_top,
+    int dest_width,
+    int dest_height,
+    const FX_RECT* pClipRect,
+    const FXDIB_ResampleOptions& options,
+    BlendMode blend_type) {
   DCHECK(pSource);
   DCHECK(pClipRect);
 
@@ -207,7 +208,7 @@
                            dest_height, FXDIB_ResampleOptions());
 }
 
-bool CGdiDisplayDriver::StartDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
+bool CGdiDisplayDriver::StartDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
                                     int bitmap_alpha,
                                     uint32_t color,
                                     const CFX_Matrix& matrix,
diff --git a/core/fxge/win32/cgdi_display_driver.h b/core/fxge/win32/cgdi_display_driver.h
index 2e43194..a3e544d 100644
--- a/core/fxge/win32/cgdi_display_driver.h
+++ b/core/fxge/win32/cgdi_display_driver.h
@@ -30,13 +30,13 @@
   bool GetDIBits(const RetainPtr<CFX_DIBitmap>& pBitmap,
                  int left,
                  int top) override;
-  bool SetDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
+  bool SetDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
                  uint32_t color,
                  const FX_RECT& src_rect,
                  int left,
                  int top,
                  BlendMode blend_type) override;
-  bool StretchDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
+  bool StretchDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
                      uint32_t color,
                      int dest_left,
                      int dest_top,
@@ -45,7 +45,7 @@
                      const FX_RECT* pClipRect,
                      const FXDIB_ResampleOptions& options,
                      BlendMode blend_type) override;
-  bool StartDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
+  bool StartDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
                    int bitmap_alpha,
                    uint32_t color,
                    const CFX_Matrix& matrix,
@@ -53,7 +53,7 @@
                    std::unique_ptr<CFX_ImageRenderer>* handle,
                    BlendMode blend_type) override;
 
-  bool UseFoxitStretchEngine(const RetainPtr<CFX_DIBBase>& pSource,
+  bool UseFoxitStretchEngine(const RetainPtr<const CFX_DIBBase>& pSource,
                              uint32_t color,
                              int dest_left,
                              int dest_top,
diff --git a/core/fxge/win32/cgdi_plus_ext.cpp b/core/fxge/win32/cgdi_plus_ext.cpp
index c491350..00d6319 100644
--- a/core/fxge/win32/cgdi_plus_ext.cpp
+++ b/core/fxge/win32/cgdi_plus_ext.cpp
@@ -204,7 +204,7 @@
 }
 
 void OutputImage(Gdiplus::GpGraphics* pGraphics,
-                 const RetainPtr<CFX_DIBBase>& source,
+                 const RetainPtr<const CFX_DIBBase>& source,
                  const FX_RECT& src_rect,
                  int dest_left,
                  int dest_top,
@@ -588,7 +588,7 @@
 }
 
 bool CGdiplusExt::StretchDIBits(HDC hDC,
-                                const RetainPtr<CFX_DIBBase>& source,
+                                const RetainPtr<const CFX_DIBBase>& source,
                                 int dest_left,
                                 int dest_top,
                                 int dest_width,
diff --git a/core/fxge/win32/cgdi_plus_ext.h b/core/fxge/win32/cgdi_plus_ext.h
index 6a93179..339e10b 100644
--- a/core/fxge/win32/cgdi_plus_ext.h
+++ b/core/fxge/win32/cgdi_plus_ext.h
@@ -31,7 +31,7 @@
   void Load();
   bool IsAvailable() { return !!gdiplus_module_; }
   bool StretchDIBits(HDC hDC,
-                     const RetainPtr<CFX_DIBBase>& source,
+                     const RetainPtr<const CFX_DIBBase>& source,
                      int dest_left,
                      int dest_top,
                      int dest_width,
diff --git a/core/fxge/win32/cgdi_printer_driver.cpp b/core/fxge/win32/cgdi_printer_driver.cpp
index 28bc516..3e6b41c 100644
--- a/core/fxge/win32/cgdi_printer_driver.cpp
+++ b/core/fxge/win32/cgdi_printer_driver.cpp
@@ -39,7 +39,7 @@
   return CGdiDeviceDriver::GetDeviceCaps(caps_id);
 }
 
-bool CGdiPrinterDriver::SetDIBits(const RetainPtr<CFX_DIBBase>& pSource,
+bool CGdiPrinterDriver::SetDIBits(const RetainPtr<const CFX_DIBBase>& pSource,
                                   uint32_t color,
                                   const FX_RECT& src_rect,
                                   int left,
@@ -62,15 +62,16 @@
   return GDI_SetDIBits(pSource, src_rect, left, top);
 }
 
-bool CGdiPrinterDriver::StretchDIBits(const RetainPtr<CFX_DIBBase>& pSource,
-                                      uint32_t color,
-                                      int dest_left,
-                                      int dest_top,
-                                      int dest_width,
-                                      int dest_height,
-                                      const FX_RECT* pClipRect,
-                                      const FXDIB_ResampleOptions& options,
-                                      BlendMode blend_type) {
+bool CGdiPrinterDriver::StretchDIBits(
+    const RetainPtr<const CFX_DIBBase>& pSource,
+    uint32_t color,
+    int dest_left,
+    int dest_top,
+    int dest_width,
+    int dest_height,
+    const FX_RECT* pClipRect,
+    const FXDIB_ResampleOptions& options,
+    BlendMode blend_type) {
   if (pSource->IsMaskFormat()) {
     int alpha = FXARGB_A(color);
     if (pSource->GetBPP() != 1 || alpha != 255)
@@ -117,7 +118,7 @@
                            dest_height, options);
 }
 
-bool CGdiPrinterDriver::StartDIBits(const RetainPtr<CFX_DIBBase>& pSource,
+bool CGdiPrinterDriver::StartDIBits(const RetainPtr<const CFX_DIBBase>& pSource,
                                     int bitmap_alpha,
                                     uint32_t color,
                                     const CFX_Matrix& matrix,
diff --git a/core/fxge/win32/cgdi_printer_driver.h b/core/fxge/win32/cgdi_printer_driver.h
index 5c4cfc0..2477399 100644
--- a/core/fxge/win32/cgdi_printer_driver.h
+++ b/core/fxge/win32/cgdi_printer_driver.h
@@ -21,13 +21,13 @@
  private:
   // CGdiPrinterDriver:
   int GetDeviceCaps(int caps_id) const override;
-  bool SetDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
+  bool SetDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
                  uint32_t color,
                  const FX_RECT& src_rect,
                  int left,
                  int top,
                  BlendMode blend_type) override;
-  bool StretchDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
+  bool StretchDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
                      uint32_t color,
                      int dest_left,
                      int dest_top,
@@ -36,7 +36,7 @@
                      const FX_RECT* pClipRect,
                      const FXDIB_ResampleOptions& options,
                      BlendMode blend_type) override;
-  bool StartDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
+  bool StartDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
                    int bitmap_alpha,
                    uint32_t color,
                    const CFX_Matrix& matrix,
diff --git a/core/fxge/win32/cps_printer_driver.cpp b/core/fxge/win32/cps_printer_driver.cpp
index f30b80d..6f03b2c 100644
--- a/core/fxge/win32/cps_printer_driver.cpp
+++ b/core/fxge/win32/cps_printer_driver.cpp
@@ -157,7 +157,7 @@
   return true;
 }
 
-bool CPSPrinterDriver::SetDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
+bool CPSPrinterDriver::SetDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
                                  uint32_t color,
                                  const FX_RECT& src_rect,
                                  int left,
@@ -168,22 +168,23 @@
   return m_PSRenderer.SetDIBits(pBitmap, color, left, top);
 }
 
-bool CPSPrinterDriver::StretchDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
-                                     uint32_t color,
-                                     int dest_left,
-                                     int dest_top,
-                                     int dest_width,
-                                     int dest_height,
-                                     const FX_RECT* pClipRect,
-                                     const FXDIB_ResampleOptions& options,
-                                     BlendMode blend_type) {
+bool CPSPrinterDriver::StretchDIBits(
+    const RetainPtr<const CFX_DIBBase>& pBitmap,
+    uint32_t color,
+    int dest_left,
+    int dest_top,
+    int dest_width,
+    int dest_height,
+    const FX_RECT* pClipRect,
+    const FXDIB_ResampleOptions& options,
+    BlendMode blend_type) {
   if (blend_type != BlendMode::kNormal)
     return false;
   return m_PSRenderer.StretchDIBits(pBitmap, color, dest_left, dest_top,
                                     dest_width, dest_height, options);
 }
 
-bool CPSPrinterDriver::StartDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
+bool CPSPrinterDriver::StartDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
                                    int bitmap_alpha,
                                    uint32_t color,
                                    const CFX_Matrix& matrix,
diff --git a/core/fxge/win32/cps_printer_driver.h b/core/fxge/win32/cps_printer_driver.h
index 4e28497..d709c5d 100644
--- a/core/fxge/win32/cps_printer_driver.h
+++ b/core/fxge/win32/cps_printer_driver.h
@@ -45,13 +45,13 @@
                 const CFX_FillRenderOptions& fill_options,
                 BlendMode blend_type) override;
   bool GetClipBox(FX_RECT* pRect) override;
-  bool SetDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
+  bool SetDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
                  uint32_t color,
                  const FX_RECT& src_rect,
                  int left,
                  int top,
                  BlendMode blend_type) override;
-  bool StretchDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
+  bool StretchDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
                      uint32_t color,
                      int dest_left,
                      int dest_top,
@@ -60,7 +60,7 @@
                      const FX_RECT* pClipRect,
                      const FXDIB_ResampleOptions& options,
                      BlendMode blend_type) override;
-  bool StartDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
+  bool StartDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
                    int bitmap_alpha,
                    uint32_t color,
                    const CFX_Matrix& matrix,
diff --git a/core/fxge/win32/ctext_only_printer_driver.cpp b/core/fxge/win32/ctext_only_printer_driver.cpp
index 7689f3f..3e0fe61 100644
--- a/core/fxge/win32/ctext_only_printer_driver.cpp
+++ b/core/fxge/win32/ctext_only_printer_driver.cpp
@@ -83,12 +83,13 @@
   return false;
 }
 
-bool CTextOnlyPrinterDriver::SetDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
-                                       uint32_t color,
-                                       const FX_RECT& src_rect,
-                                       int left,
-                                       int top,
-                                       BlendMode blend_type) {
+bool CTextOnlyPrinterDriver::SetDIBits(
+    const RetainPtr<const CFX_DIBBase>& pBitmap,
+    uint32_t color,
+    const FX_RECT& src_rect,
+    int left,
+    int top,
+    BlendMode blend_type) {
   return false;
 }
 
@@ -101,7 +102,7 @@
 }
 
 bool CTextOnlyPrinterDriver::StretchDIBits(
-    const RetainPtr<CFX_DIBBase>& pBitmap,
+    const RetainPtr<const CFX_DIBBase>& pBitmap,
     uint32_t color,
     int dest_left,
     int dest_top,
@@ -114,7 +115,7 @@
 }
 
 bool CTextOnlyPrinterDriver::StartDIBits(
-    const RetainPtr<CFX_DIBBase>& pBitmap,
+    const RetainPtr<const CFX_DIBBase>& pBitmap,
     int bitmap_alpha,
     uint32_t color,
     const CFX_Matrix& matrix,
diff --git a/core/fxge/win32/ctext_only_printer_driver.h b/core/fxge/win32/ctext_only_printer_driver.h
index e029a7c..67264aa 100644
--- a/core/fxge/win32/ctext_only_printer_driver.h
+++ b/core/fxge/win32/ctext_only_printer_driver.h
@@ -36,13 +36,13 @@
                 const CFX_FillRenderOptions& fill_options,
                 BlendMode blend_type) override;
   bool GetClipBox(FX_RECT* pRect) override;
-  bool SetDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
+  bool SetDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
                  uint32_t color,
                  const FX_RECT& src_rect,
                  int left,
                  int top,
                  BlendMode blend_type) override;
-  bool StretchDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
+  bool StretchDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
                      uint32_t color,
                      int dest_left,
                      int dest_top,
@@ -51,7 +51,7 @@
                      const FX_RECT* pClipRect,
                      const FXDIB_ResampleOptions& options,
                      BlendMode blend_type) override;
-  bool StartDIBits(const RetainPtr<CFX_DIBBase>& pBitmap,
+  bool StartDIBits(const RetainPtr<const CFX_DIBBase>& pBitmap,
                    int bitmap_alpha,
                    uint32_t color,
                    const CFX_Matrix& matrix,