diff --git a/core/fxge/dib/cfx_dibitmap.cpp b/core/fxge/dib/cfx_dibitmap.cpp
index f3d70e4..e4bb777 100644
--- a/core/fxge/dib/cfx_dibitmap.cpp
+++ b/core/fxge/dib/cfx_dibitmap.cpp
@@ -68,7 +68,7 @@
   return true;
 }
 
-bool CFX_DIBitmap::Copy(const RetainPtr<CFX_DIBBase>& pSrc) {
+bool CFX_DIBitmap::Copy(const RetainPtr<const CFX_DIBBase>& pSrc) {
   if (m_pBuffer)
     return false;
 
@@ -191,13 +191,14 @@
   }
 }
 
-bool CFX_DIBitmap::TransferBitmap(int dest_left,
-                                  int dest_top,
-                                  int width,
-                                  int height,
-                                  const RetainPtr<CFX_DIBBase>& pSrcBitmap,
-                                  int src_left,
-                                  int src_top) {
+bool CFX_DIBitmap::TransferBitmap(
+    int dest_left,
+    int dest_top,
+    int width,
+    int height,
+    const RetainPtr<const CFX_DIBBase>& pSrcBitmap,
+    int src_left,
+    int src_top) {
   if (!m_pBuffer)
     return false;
 
@@ -231,7 +232,7 @@
     int dest_top,
     int width,
     int height,
-    const RetainPtr<CFX_DIBBase>& pSrcBitmap,
+    const RetainPtr<const CFX_DIBBase>& pSrcBitmap,
     int src_left,
     int src_top) {
   if (HasPalette())
@@ -258,7 +259,7 @@
     int dest_top,
     int width,
     int height,
-    const RetainPtr<CFX_DIBBase>& pSrcBitmap,
+    const RetainPtr<const CFX_DIBBase>& pSrcBitmap,
     int src_left,
     int src_top) {
   int Bpp = GetBPP() / 8;
@@ -276,7 +277,7 @@
     int dest_top,
     int width,
     int height,
-    const RetainPtr<CFX_DIBBase>& pSrcBitmap,
+    const RetainPtr<const CFX_DIBBase>& pSrcBitmap,
     int src_left,
     int src_top) {
   for (int row = 0; row < height; ++row) {
@@ -295,11 +296,11 @@
 
 bool CFX_DIBitmap::SetChannelFromBitmap(
     Channel destChannel,
-    const RetainPtr<CFX_DIBBase>& pSrcBitmap) {
+    const RetainPtr<const CFX_DIBBase>& pSrcBitmap) {
   if (!m_pBuffer)
     return false;
 
-  RetainPtr<CFX_DIBBase> pSrcClone = pSrcBitmap;
+  RetainPtr<const CFX_DIBBase> pSrcClone = pSrcBitmap;
   if (!pSrcBitmap->IsAlphaFormat() && !pSrcBitmap->IsMaskFormat())
     return false;
 
@@ -362,11 +363,12 @@
 }
 
 bool CFX_DIBitmap::SetAlphaFromBitmap(
-    const RetainPtr<CFX_DIBBase>& pSrcBitmap) {
+    const RetainPtr<const CFX_DIBBase>& pSrcBitmap) {
   return SetChannelFromBitmap(Channel::kAlpha, pSrcBitmap);
 }
 
-bool CFX_DIBitmap::SetRedFromBitmap(const RetainPtr<CFX_DIBBase>& pSrcBitmap) {
+bool CFX_DIBitmap::SetRedFromBitmap(
+    const RetainPtr<const CFX_DIBBase>& pSrcBitmap) {
   return SetChannelFromBitmap(Channel::kRed, pSrcBitmap);
 }
 
@@ -397,7 +399,8 @@
   return true;
 }
 
-bool CFX_DIBitmap::MultiplyAlpha(const RetainPtr<CFX_DIBBase>& pSrcBitmap) {
+bool CFX_DIBitmap::MultiplyAlpha(
+    const RetainPtr<const CFX_DIBBase>& pSrcBitmap) {
   CHECK(pSrcBitmap->IsMaskFormat());
 
   if (!m_pBuffer) {
@@ -407,7 +410,7 @@
   if (IsOpaqueImage())
     return SetAlphaFromBitmap(pSrcBitmap);
 
-  RetainPtr<CFX_DIBitmap> pSrcClone = pSrcBitmap.As<CFX_DIBitmap>();
+  RetainPtr<const CFX_DIBitmap> pSrcClone = pSrcBitmap.As<const CFX_DIBitmap>();
   if (pSrcBitmap->GetWidth() != m_Width ||
       pSrcBitmap->GetHeight() != m_Height) {
     pSrcClone = pSrcBitmap->StretchTo(m_Width, m_Height,
@@ -698,16 +701,17 @@
   return PitchAndSize{pitch, safe_size.ValueOrDie()};
 }
 
-bool CFX_DIBitmap::CompositeBitmap(int dest_left,
-                                   int dest_top,
-                                   int width,
-                                   int height,
-                                   const RetainPtr<CFX_DIBBase>& pSrcBitmap,
-                                   int src_left,
-                                   int src_top,
-                                   BlendMode blend_type,
-                                   const CFX_ClipRgn* pClipRgn,
-                                   bool bRgbByteOrder) {
+bool CFX_DIBitmap::CompositeBitmap(
+    int dest_left,
+    int dest_top,
+    int width,
+    int height,
+    const RetainPtr<const CFX_DIBBase>& pSrcBitmap,
+    int src_left,
+    int src_top,
+    BlendMode blend_type,
+    const CFX_ClipRgn* pClipRgn,
+    bool bRgbByteOrder) {
   // Should have called CompositeMask().
   CHECK(!pSrcBitmap->IsMaskFormat());
 
@@ -823,13 +827,14 @@
   return true;
 }
 
-void CFX_DIBitmap::CompositeOneBPPMask(int dest_left,
-                                       int dest_top,
-                                       int width,
-                                       int height,
-                                       const RetainPtr<CFX_DIBBase>& pSrcBitmap,
-                                       int src_left,
-                                       int src_top) {
+void CFX_DIBitmap::CompositeOneBPPMask(
+    int dest_left,
+    int dest_top,
+    int width,
+    int height,
+    const RetainPtr<const CFX_DIBBase>& pSrcBitmap,
+    int src_left,
+    int src_top) {
   if (GetBPP() != 1) {
     return;
   }
diff --git a/core/fxge/dib/cfx_dibitmap.h b/core/fxge/dib/cfx_dibitmap.h
index f603aa5..ee3b202 100644
--- a/core/fxge/dib/cfx_dibitmap.h
+++ b/core/fxge/dib/cfx_dibitmap.h
@@ -31,7 +31,7 @@
               uint8_t* pBuffer,
               uint32_t pitch);
 
-  bool Copy(const RetainPtr<CFX_DIBBase>& pSrc);
+  bool Copy(const RetainPtr<const CFX_DIBBase>& pSrc);
 
   // CFX_DIBBase
   pdfium::span<const uint8_t> GetScanline(int line) const override;
@@ -60,19 +60,19 @@
   void SetPixel(int x, int y, uint32_t color);
 #endif  // defined(PDF_USE_SKIA)
 
-  bool SetRedFromBitmap(const RetainPtr<CFX_DIBBase>& pSrcBitmap);
-  bool SetAlphaFromBitmap(const RetainPtr<CFX_DIBBase>& pSrcBitmap);
+  bool SetRedFromBitmap(const RetainPtr<const CFX_DIBBase>& pSrcBitmap);
+  bool SetAlphaFromBitmap(const RetainPtr<const CFX_DIBBase>& pSrcBitmap);
   bool SetUniformOpaqueAlpha();
 
   // TODO(crbug.com/pdfium/2007): Migrate callers to `CFX_RenderDevice`.
   bool MultiplyAlpha(int alpha);
-  bool MultiplyAlpha(const RetainPtr<CFX_DIBBase>& pSrcBitmap);
+  bool MultiplyAlpha(const RetainPtr<const CFX_DIBBase>& pSrcBitmap);
 
   bool TransferBitmap(int dest_left,
                       int dest_top,
                       int width,
                       int height,
-                      const RetainPtr<CFX_DIBBase>& pSrcBitmap,
+                      const RetainPtr<const CFX_DIBBase>& pSrcBitmap,
                       int src_left,
                       int src_top);
 
@@ -80,7 +80,7 @@
                        int dest_top,
                        int width,
                        int height,
-                       const RetainPtr<CFX_DIBBase>& pSrcBitmap,
+                       const RetainPtr<const CFX_DIBBase>& pSrcBitmap,
                        int src_left,
                        int src_top,
                        BlendMode blend_type,
@@ -103,7 +103,7 @@
                            int dest_top,
                            int width,
                            int height,
-                           const RetainPtr<CFX_DIBBase>& pSrcBitmap,
+                           const RetainPtr<const CFX_DIBBase>& pSrcBitmap,
                            int src_left,
                            int src_top);
 
@@ -153,30 +153,32 @@
   ~CFX_DIBitmap() override;
 
   bool SetChannelFromBitmap(Channel destChannel,
-                            const RetainPtr<CFX_DIBBase>& pSrcBitmap);
+                            const RetainPtr<const CFX_DIBBase>& pSrcBitmap);
   void ConvertBGRColorScale(uint32_t forecolor, uint32_t backcolor);
-  bool TransferWithUnequalFormats(FXDIB_Format dest_format,
-                                  int dest_left,
-                                  int dest_top,
-                                  int width,
-                                  int height,
-                                  const RetainPtr<CFX_DIBBase>& pSrcBitmap,
-                                  int src_left,
-                                  int src_top);
+  bool TransferWithUnequalFormats(
+      FXDIB_Format dest_format,
+      int dest_left,
+      int dest_top,
+      int width,
+      int height,
+      const RetainPtr<const CFX_DIBBase>& pSrcBitmap,
+      int src_left,
+      int src_top);
   void TransferWithMultipleBPP(int dest_left,
                                int dest_top,
                                int width,
                                int height,
-                               const RetainPtr<CFX_DIBBase>& pSrcBitmap,
+                               const RetainPtr<const CFX_DIBBase>& pSrcBitmap,
                                int src_left,
                                int src_top);
-  void TransferEqualFormatsOneBPP(int dest_left,
-                                  int dest_top,
-                                  int width,
-                                  int height,
-                                  const RetainPtr<CFX_DIBBase>& pSrcBitmap,
-                                  int src_left,
-                                  int src_top);
+  void TransferEqualFormatsOneBPP(
+      int dest_left,
+      int dest_top,
+      int width,
+      int height,
+      const RetainPtr<const CFX_DIBBase>& pSrcBitmap,
+      int src_left,
+      int src_top);
 
   MaybeOwned<uint8_t, FxFreeDeleter> m_pBuffer;
 #if defined(PDF_USE_SKIA)
