Make CFX_RenderDevice::GetDeviceDriver() a protected method

Add DrawShading() wrapper method for the one public caller.

-- Rework test to create driver directly.

Change-Id: I036f455863eadff5ea2ec4417d00c0007068f10a
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/99990
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/render/cpdf_rendershading.cpp b/core/fpdfapi/render/cpdf_rendershading.cpp
index df6e23d..1a50e61 100644
--- a/core/fpdfapi/render/cpdf_rendershading.cpp
+++ b/core/fpdfapi/render/cpdf_rendershading.cpp
@@ -907,8 +907,8 @@
   }
   bool bAlphaMode = options.ColorModeIs(CPDF_RenderOptions::kAlpha);
   if (pDevice->GetDeviceCaps(FXDC_RENDER_CAPS) & FXRC_SHADING &&
-      pDevice->GetDeviceDriver()->DrawShading(
-          pPattern, &mtMatrix, clip_rect_bbox, alpha, bAlphaMode)) {
+      pDevice->DrawShading(pPattern, &mtMatrix, clip_rect_bbox, alpha,
+                           bAlphaMode)) {
     return;
   }
   CPDF_DeviceBuffer buffer(pContext, pDevice, clip_rect_bbox, pCurObj, 150);
diff --git a/core/fxge/cfx_renderdevice.cpp b/core/fxge/cfx_renderdevice.cpp
index 23793f7..9e40642 100644
--- a/core/fxge/cfx_renderdevice.cpp
+++ b/core/fxge/cfx_renderdevice.cpp
@@ -1354,6 +1354,15 @@
   }
 }
 
+bool CFX_RenderDevice::DrawShading(const CPDF_ShadingPattern* pPattern,
+                                   const CFX_Matrix* pMatrix,
+                                   const FX_RECT& clip_rect,
+                                   int alpha,
+                                   bool bAlphaMode) {
+  return m_pDeviceDriver->DrawShading(pPattern, pMatrix, clip_rect, alpha,
+                                      bAlphaMode);
+}
+
 void CFX_RenderDevice::DrawBorder(const CFX_Matrix* pUser2Device,
                                   const CFX_FloatRect& rect,
                                   float fWidth,
diff --git a/core/fxge/cfx_renderdevice.h b/core/fxge/cfx_renderdevice.h
index 0076b2f..e0a15f0 100644
--- a/core/fxge/cfx_renderdevice.h
+++ b/core/fxge/cfx_renderdevice.h
@@ -54,10 +54,6 @@
                                   float left,
                                   float top);
 
-  RenderDeviceDriverIface* GetDeviceDriver() const {
-    return m_pDeviceDriver.get();
-  }
-
   void SaveState();
   void RestoreState(bool bKeepSaved);
 
@@ -206,6 +202,11 @@
                   int32_t nTransparency,
                   int32_t nStartGray,
                   int32_t nEndGray);
+  bool DrawShading(const CPDF_ShadingPattern* pPattern,
+                   const CFX_Matrix* pMatrix,
+                   const FX_RECT& clip_rect,
+                   int alpha,
+                   bool bAlphaMode);
 
 #if defined(_SKIA_SUPPORT_)
   virtual void DebugVerifyBitmapIsPreMultiplied() const;
@@ -224,6 +225,9 @@
   CFX_RenderDevice();
 
   void SetDeviceDriver(std::unique_ptr<RenderDeviceDriverIface> pDriver);
+  RenderDeviceDriverIface* GetDeviceDriver() const {
+    return m_pDeviceDriver.get();
+  }
 
  private:
   void InitDeviceInfo();
diff --git a/core/fxge/skia/fx_skia_device_embeddertest.cpp b/core/fxge/skia/fx_skia_device_embeddertest.cpp
index 4060e0a..afa875a 100644
--- a/core/fxge/skia/fx_skia_device_embeddertest.cpp
+++ b/core/fxge/skia/fx_skia_device_embeddertest.cpp
@@ -2,6 +2,10 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "core/fxge/skia/fx_skia_device.h"
+
+#include <memory>
+
 #include "core/fxge/cfx_defaultrenderdevice.h"
 #include "core/fxge/cfx_fillrenderoptions.h"
 #include "core/fxge/cfx_font.h"
@@ -9,7 +13,6 @@
 #include "core/fxge/cfx_path.h"
 #include "core/fxge/cfx_renderdevice.h"
 #include "core/fxge/cfx_textrenderoptions.h"
-#include "core/fxge/skia/fx_skia_device.h"
 #include "core/fxge/text_char_pos.h"
 #include "fpdfsdk/cpdfsdk_helpers.h"
 #include "public/cpp/fpdf_scopers.h"
@@ -130,18 +133,13 @@
   ScopedFPDFBitmap bitmap(FPDFBitmap_Create(kWidth, kHeight, 1));
   ASSERT_TRUE(bitmap);
   FPDFBitmap_FillRect(bitmap.get(), 0, 0, kWidth, kHeight, 0x00000000);
-  CFX_DefaultRenderDevice device;
   RetainPtr<CFX_DIBitmap> pBitmap(CFXDIBitmapFromFPDFBitmap(bitmap.get()));
-  device.Attach(pBitmap);
-  auto* driver = static_cast<CFX_SkiaDeviceDriver*>(device.GetDeviceDriver());
-  (*Test)(driver, state);
+  auto driver =
+      std::make_unique<CFX_SkiaDeviceDriver>(pBitmap, false, nullptr, false);
+  (*Test)(driver.get(), state);
   driver->Flush();
   uint32_t pixel = pBitmap->GetPixel(0, 0);
   EXPECT_EQ(state.m_pixel, pixel);
-#ifdef SK_DEBUG
-  if (!driver)  // force dump to be linked in so it can be called from debugger
-    driver->Dump();
-#endif
 }
 
 }  // namespace