Remove force_alpha parameter

Removes the force_alpha parameter from RealizeSkImage(), as this only
has an effect when the CFX_DIBBase is not in a mask format (k1bppMask or
k8bppMask). There is only one such case, which can be converted
trivially to use k8bppMask.

Also removes CFX_DefaultRenderDevice's SetBitsWithMask() overload, as
the implementation is equivalent to the one in CFX_RenderDevice.

Bug: pdfium:2034
Change-Id: I9f4ec7556b0132368063764b182e8a40e6e325e1
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/108710
Reviewed-by: Nigi <nigi@chromium.org>
Commit-Queue: K. Moon <kmoon@chromium.org>
diff --git a/core/fpdfapi/render/cpdf_imagerenderer.cpp b/core/fpdfapi/render/cpdf_imagerenderer.cpp
index 9a94a59..60d0fc1 100644
--- a/core/fpdfapi/render/cpdf_imagerenderer.cpp
+++ b/core/fpdfapi/render/cpdf_imagerenderer.cpp
@@ -364,6 +364,8 @@
   }
   CalculateDrawImage(&bitmap_device1, &bitmap_device2, m_pLoader->GetMask(),
                      new_matrix, rect);
+  DCHECK(!bitmap_device2.GetBitmap()->HasPalette());
+  bitmap_device2.GetBitmap()->ConvertFormat(FXDIB_Format::k8bppMask);
 #if defined(_SKIA_SUPPORT_)
   if (CFX_DefaultRenderDevice::SkiaIsDefaultRenderer()) {
     m_pRenderStatus->GetRenderDevice()->SetBitsWithMask(
@@ -372,7 +374,6 @@
     return false;
   }
 #endif
-  bitmap_device2.GetBitmap()->ConvertFormat(FXDIB_Format::k8bppMask);
   bitmap_device1.GetBitmap()->MultiplyAlpha(bitmap_device2.GetBitmap());
   if (m_BitmapAlpha < 255)
     bitmap_device1.GetBitmap()->MultiplyAlpha(m_BitmapAlpha);
diff --git a/core/fxge/cfx_defaultrenderdevice.h b/core/fxge/cfx_defaultrenderdevice.h
index 112c4c7..4d94b7a 100644
--- a/core/fxge/cfx_defaultrenderdevice.h
+++ b/core/fxge/cfx_defaultrenderdevice.h
@@ -35,12 +35,6 @@
 #if defined(_SKIA_SUPPORT_)
   bool AttachCanvas(SkCanvas* canvas);
   void Clear(uint32_t color);
-  bool SetBitsWithMask(const RetainPtr<CFX_DIBBase>& pBitmap,
-                       const RetainPtr<CFX_DIBBase>& pMask,
-                       int left,
-                       int top,
-                       int bitmap_alpha,
-                       BlendMode blend_type) override;
 #endif
 
   // Runtime check to see if Skia is the renderer variant in use.
diff --git a/core/fxge/cfx_renderdevice.h b/core/fxge/cfx_renderdevice.h
index e1d9487..5782f95 100644
--- a/core/fxge/cfx_renderdevice.h
+++ b/core/fxge/cfx_renderdevice.h
@@ -215,12 +215,12 @@
   bool MultiplyAlpha(const RetainPtr<CFX_DIBBase>& mask);
 
 #if defined(_SKIA_SUPPORT_)
-  virtual bool SetBitsWithMask(const RetainPtr<CFX_DIBBase>& pBitmap,
-                               const RetainPtr<CFX_DIBBase>& pMask,
-                               int left,
-                               int top,
-                               int bitmap_alpha,
-                               BlendMode blend_type);
+  bool SetBitsWithMask(const RetainPtr<CFX_DIBBase>& pBitmap,
+                       const RetainPtr<CFX_DIBBase>& pMask,
+                       int left,
+                       int top,
+                       int bitmap_alpha,
+                       BlendMode blend_type);
 #endif
 
  protected:
diff --git a/core/fxge/dib/cfx_dibbase.h b/core/fxge/dib/cfx_dibbase.h
index 4b8724d..5b1c6bf 100644
--- a/core/fxge/dib/cfx_dibbase.h
+++ b/core/fxge/dib/cfx_dibbase.h
@@ -90,12 +90,11 @@
                       const CFX_ClipRgn* pClipRgn) const;
 
 #if defined(_SKIA_SUPPORT_)
-  // Realizes an `SkImage` from this DIB. `force_alpha` forces gray images to be
-  // treated as 8-bit alpha.
+  // Realizes an `SkImage` from this DIB.
   //
   // This may share the underlying pixels, in which case, this DIB should not be
   // modified during the lifetime of the `SkImage`.
-  virtual sk_sp<SkImage> RealizeSkImage(bool force_alpha) const;
+  virtual sk_sp<SkImage> RealizeSkImage() const;
 #endif  // defined(_SKIA_SUPPORT_)
 
  protected:
diff --git a/core/fxge/skia/cfx_dibbase_skia.cpp b/core/fxge/skia/cfx_dibbase_skia.cpp
index 73179ef..d655641 100644
--- a/core/fxge/skia/cfx_dibbase_skia.cpp
+++ b/core/fxge/skia/cfx_dibbase_skia.cpp
@@ -218,10 +218,7 @@
 
 }  // namespace
 
-sk_sp<SkImage> CFX_DIBBase::RealizeSkImage(bool force_alpha) const {
-  const SkColorType color_type = force_alpha || IsMaskFormat()
-                                     ? SkColorType::kAlpha_8_SkColorType
-                                     : SkColorType::kGray_8_SkColorType;
+sk_sp<SkImage> CFX_DIBBase::RealizeSkImage() const {
   switch (GetBPP()) {
     case 1: {
       // By default, the two colors for grayscale are 0xFF and 0x00 unless they
@@ -247,7 +244,8 @@
       }
 
       return CreateSkiaImageFromTransformedDib</*source_bits_per_pixel=*/1>(
-          *this, color_type, kPremul_SkAlphaType,
+          *this, IsMaskFormat() ? kAlpha_8_SkColorType : kGray_8_SkColorType,
+          kPremul_SkAlphaType,
           [color0, color1](bool bit) { return bit ? color1 : color0; });
     }
 
@@ -264,7 +262,9 @@
               return palette[index];
             });
       }
-      return CreateSkiaImageFromDib(this, color_type, kPremul_SkAlphaType);
+      return CreateSkiaImageFromDib(
+          this, IsMaskFormat() ? kAlpha_8_SkColorType : kGray_8_SkColorType,
+          kPremul_SkAlphaType);
 
     case 24:
       return CreateSkiaImageFromTransformedDib</*source_bits_per_pixel=*/24>(
diff --git a/core/fxge/skia/fx_skia_device.cpp b/core/fxge/skia/fx_skia_device.cpp
index ff2c8eb..1e803bf 100644
--- a/core/fxge/skia/fx_skia_device.cpp
+++ b/core/fxge/skia/fx_skia_device.cpp
@@ -956,10 +956,11 @@
     return false;
   }
 
-  sk_sp<SkImage> skia_mask = mask->RealizeSkImage(/*force_alpha=*/true);
+  sk_sp<SkImage> skia_mask = mask->RealizeSkImage();
   if (!skia_mask) {
     return false;
   }
+  DCHECK_EQ(skia_mask->colorType(), kAlpha_8_SkColorType);
 
   SkPaint paint;
   paint.setBlendMode(SkBlendMode::kDstIn);
@@ -1487,15 +1488,17 @@
     BlendMode blend_type) {
   DebugValidate(m_pBitmap, m_pBackdropBitmap);
 
-  sk_sp<SkImage> skia_source = pSource->RealizeSkImage(/*force_alpha=*/false);
+  sk_sp<SkImage> skia_source = pSource->RealizeSkImage();
   if (!skia_source) {
     return false;
   }
 
-  sk_sp<SkImage> skia_mask = pMask->RealizeSkImage(/*force_alpha=*/true);
+  DCHECK(pMask->IsMaskFormat());
+  sk_sp<SkImage> skia_mask = pMask->RealizeSkImage();
   if (!skia_mask) {
     return false;
   }
+  DCHECK_EQ(skia_mask->colorType(), kAlpha_8_SkColorType);
 
   {
     SkAutoCanvasRestore scoped_save_restore(m_pCanvas, /*doSave=*/true);
@@ -1556,7 +1559,7 @@
     BlendMode blend_type) {
   DebugValidate(m_pBitmap, m_pBackdropBitmap);
 
-  sk_sp<SkImage> skia_source = pSource->RealizeSkImage(/*force_alpha=*/false);
+  sk_sp<SkImage> skia_source = pSource->RealizeSkImage();
   if (!skia_source) {
     return false;
   }
@@ -1653,14 +1656,3 @@
   SetDeviceDriver(std::move(driver));
   return true;
 }
-
-bool CFX_DefaultRenderDevice::SetBitsWithMask(
-    const RetainPtr<CFX_DIBBase>& pBitmap,
-    const RetainPtr<CFX_DIBBase>& pMask,
-    int left,
-    int top,
-    int bitmap_alpha,
-    BlendMode blend_type) {
-  return static_cast<CFX_SkiaDeviceDriver*>(GetDeviceDriver())
-      ->SetBitsWithMask(pBitmap, pMask, left, top, bitmap_alpha, blend_type);
-}