Move write APIs from CFX_DIBBase to CFX_DIBitmap

Moves the GetWritableBuffer() and GetWritableScanline() APIs from
CFX_DIBBase to CFX_DIBitmap. Callers that need writable pixel memory
always have a CFX_DIBitmap, rather than just a CFX_DIBBase, so we can
remove these APIs from CFX_DIBBase and make CFX_DIBBase read-only.

Bug: pdfium:2034
Change-Id: Iaeda5786b88edd16a9a7d4276f5a7f661d4778a6
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/108372
Reviewed-by: Nigi <nigi@chromium.org>
Commit-Queue: K. Moon <kmoon@chromium.org>
diff --git a/core/fxge/dib/cfx_dibbase.h b/core/fxge/dib/cfx_dibbase.h
index 589e20d..bfe4534 100644
--- a/core/fxge/dib/cfx_dibbase.h
+++ b/core/fxge/dib/cfx_dibbase.h
@@ -33,17 +33,7 @@
   static constexpr uint32_t kPaletteSize = 256;
 
   virtual pdfium::span<const uint8_t> GetBuffer() const;
-  pdfium::span<uint8_t> GetWritableBuffer() {
-    pdfium::span<const uint8_t> src = GetBuffer();
-    return {const_cast<uint8_t*>(src.data()), src.size()};
-  }
-
   virtual pdfium::span<const uint8_t> GetScanline(int line) const = 0;
-  pdfium::span<uint8_t> GetWritableScanline(int line) {
-    pdfium::span<const uint8_t> src = GetScanline(line);
-    return {const_cast<uint8_t*>(src.data()), src.size()};
-  }
-
   virtual bool SkipToScanline(int line, PauseIndicatorIface* pPause) const;
   virtual size_t GetEstimatedImageMemoryBurden() const;
 
diff --git a/core/fxge/dib/cfx_dibitmap.h b/core/fxge/dib/cfx_dibitmap.h
index 5abf34b..206ebcc 100644
--- a/core/fxge/dib/cfx_dibitmap.h
+++ b/core/fxge/dib/cfx_dibitmap.h
@@ -13,6 +13,7 @@
 #include "core/fxge/dib/cfx_dibbase.h"
 #include "core/fxge/dib/fx_dib.h"
 #include "third_party/abseil-cpp/absl/types/optional.h"
+#include "third_party/base/span.h"
 
 class CFX_DIBitmap final : public CFX_DIBBase {
  public:
@@ -37,6 +38,16 @@
   pdfium::span<const uint8_t> GetScanline(int line) const override;
   size_t GetEstimatedImageMemoryBurden() const override;
 
+  pdfium::span<uint8_t> GetWritableBuffer() {
+    pdfium::span<const uint8_t> src = GetBuffer();
+    return {const_cast<uint8_t*>(src.data()), src.size()};
+  }
+
+  pdfium::span<uint8_t> GetWritableScanline(int line) {
+    pdfium::span<const uint8_t> src = GetScanline(line);
+    return {const_cast<uint8_t*>(src.data()), src.size()};
+  }
+
   void TakeOver(RetainPtr<CFX_DIBitmap>&& pSrcBitmap);
   bool ConvertFormat(FXDIB_Format format);
   void Clear(uint32_t color);