Revert "Don't implement CPDF_DIB::GetBuffer()"

This reverts commit f608b5d3a9a941dd102668f1b8156671e1082a20.

Reason for revert: CGdiDeviceDriver::GDI_StretchDIBits() doesn't handle this correctly

Note that CGdiDeviceDriver::GDI_StretchDIBits() still behaves incorrectly, it just won't be as incorrect as often.

Original change's description:
> Don't implement CPDF_DIB::GetBuffer()
>
> Stops returning a non-empty buffer from CPDF_DIB::GetBuffer(), as
> CPDF_DIB currently does not fulfill the contract that GetBuffer() and
> GetScanline() return equivalent data.
>
> Bug: pdfium:2050
> Change-Id: I92fdad47bcce8cd726ec7031de8c51c2a0cee5c7
> Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/108850
> Reviewed-by: Lei Zhang <thestig@chromium.org>
> Commit-Queue: K. Moon <kmoon@chromium.org>

# Not skipping CQ checks because original CL landed > 1 day ago.

Bug: pdfium:2050
Fixed: 1455782
Change-Id: Iadb6fc0e0b5631ac73e183fd3eae604ed7d6cb79
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/108870
Commit-Queue: Nigi <nigi@chromium.org>
Auto-Submit: K. Moon <kmoon@chromium.org>
Reviewed-by: Nigi <nigi@chromium.org>
diff --git a/core/fpdfapi/page/cpdf_dib.cpp b/core/fpdfapi/page/cpdf_dib.cpp
index 7559eeb..f1c2755 100644
--- a/core/fpdfapi/page/cpdf_dib.cpp
+++ b/core/fpdfapi/page/cpdf_dib.cpp
@@ -1133,10 +1133,8 @@
 }
 
 pdfium::span<const uint8_t> CPDF_DIB::GetBuffer() const {
-  // TODO(crbug.com/pdfium/2050): Reuse buffer from `m_pCachedBitmap`. This
-  // doesn't work right now because `LoadJpxBitmap()` doesn't generate a bitmap
-  // in the same format as `GetScanline()`.
-  return pdfium::span<const uint8_t>();
+  return m_pCachedBitmap ? m_pCachedBitmap->GetBuffer()
+                         : pdfium::span<const uint8_t>();
 }
 
 pdfium::span<const uint8_t> CPDF_DIB::GetScanline(int line) const {
diff --git a/core/fpdfapi/page/cpdf_pageimagecache.cpp b/core/fpdfapi/page/cpdf_pageimagecache.cpp
index cba999b..e470169 100644
--- a/core/fpdfapi/page/cpdf_pageimagecache.cpp
+++ b/core/fpdfapi/page/cpdf_pageimagecache.cpp
@@ -110,8 +110,11 @@
                                        bool realize_hint) {
 #if defined(_SKIA_SUPPORT_)
   if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
-    // Ignore `realize_hint`, as `RealizeSkImage()` doesn't benefit from it.
-    return pdfium::MakeRetain<CachedImage>(std::move(image));
+    // TODO(crbug.com/pdfium/2050): Ignore `realize_hint`, as `RealizeSkImage()`
+    // doesn't benefit from it. The current behavior masks a bug in `CPDF_DIB`
+    // in which `GetBuffer()` and `GetScanline()` don't give the same answer.
+    return pdfium::MakeRetain<CachedImage>(realize_hint ? image->Realize()
+                                                        : std::move(image));
   }
 #endif  // defined(_SKIA_SUPPORT_)
   return realize_hint ? image->Realize() : image;