Use factory method for CFX_SkiaDeviceDriver ctor.

Make a CFX_SkiaDeviceDriver ctor private and create a factory method
CFX_SkiaDeviceDriver::Create() around it. This will help notify errors
if error handling is needed in the future.

Change-Id: I0a5b301d7f652e430e96d1e777179d3b87d98666
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/103075
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Nigi <nigi@chromium.org>
diff --git a/core/fxge/skia/fx_skia_device.cpp b/core/fxge/skia/fx_skia_device.cpp
index ed75214..76e99be 100644
--- a/core/fxge/skia/fx_skia_device.cpp
+++ b/core/fxge/skia/fx_skia_device.cpp
@@ -47,6 +47,7 @@
 #include "third_party/base/cxx17_backports.h"
 #include "third_party/base/notreached.h"
 #include "third_party/base/numerics/safe_conversions.h"
+#include "third_party/base/ptr_util.h"
 #include "third_party/base/span.h"
 #include "third_party/skia/include/core/SkBitmap.h"
 #include "third_party/skia/include/core/SkCanvas.h"
@@ -1333,6 +1334,18 @@
   spaint->setStrokeJoin(join);
 }
 
+// static
+std::unique_ptr<CFX_SkiaDeviceDriver> CFX_SkiaDeviceDriver::Create(
+    RetainPtr<CFX_DIBitmap> pBitmap,
+    bool bRgbByteOrder,
+    RetainPtr<CFX_DIBitmap> pBackdropBitmap,
+    bool bGroupKnockout) {
+  auto driver = pdfium::WrapUnique(
+      new CFX_SkiaDeviceDriver(std::move(pBitmap), bRgbByteOrder,
+                               std::move(pBackdropBitmap), bGroupKnockout));
+  return driver;
+}
+
 CFX_SkiaDeviceDriver::CFX_SkiaDeviceDriver(
     RetainPtr<CFX_DIBitmap> pBitmap,
     bool bRgbByteOrder,
@@ -2205,9 +2218,10 @@
   if (!pBitmap)
     return false;
   SetBitmap(pBitmap);
-  SetDeviceDriver(std::make_unique<CFX_SkiaDeviceDriver>(
-      std::move(pBitmap), bRgbByteOrder, std::move(pBackdropBitmap),
-      bGroupKnockout));
+  auto driver =
+      CFX_SkiaDeviceDriver::Create(std::move(pBitmap), bRgbByteOrder,
+                                   std::move(pBackdropBitmap), bGroupKnockout);
+  SetDeviceDriver(std::move(driver));
   return true;
 }
 
@@ -2228,8 +2242,9 @@
     return false;
 
   SetBitmap(pBitmap);
-  SetDeviceDriver(std::make_unique<CFX_SkiaDeviceDriver>(
-      std::move(pBitmap), false, std::move(pBackdropBitmap), false));
+  auto driver = CFX_SkiaDeviceDriver::Create(std::move(pBitmap), false,
+                                             std::move(pBackdropBitmap), false);
+  SetDeviceDriver(std::move(driver));
   return true;
 }
 
diff --git a/core/fxge/skia/fx_skia_device.h b/core/fxge/skia/fx_skia_device.h
index 8ddee6c..06ff5ba 100644
--- a/core/fxge/skia/fx_skia_device.h
+++ b/core/fxge/skia/fx_skia_device.h
@@ -21,10 +21,12 @@
 
 class CFX_SkiaDeviceDriver final : public RenderDeviceDriverIface {
  public:
-  CFX_SkiaDeviceDriver(RetainPtr<CFX_DIBitmap> pBitmap,
-                       bool bRgbByteOrder,
-                       RetainPtr<CFX_DIBitmap> pBackdropBitmap,
-                       bool bGroupKnockout);
+  static std::unique_ptr<CFX_SkiaDeviceDriver> Create(
+      RetainPtr<CFX_DIBitmap> pBitmap,
+      bool bRgbByteOrder,
+      RetainPtr<CFX_DIBitmap> pBackdropBitmap,
+      bool bGroupKnockout);
+
   explicit CFX_SkiaDeviceDriver(SkPictureRecorder* recorder);
   ~CFX_SkiaDeviceDriver() override;
 
@@ -151,6 +153,11 @@
   bool GetGroupKnockout() const { return m_bGroupKnockout; }
 
  private:
+  CFX_SkiaDeviceDriver(RetainPtr<CFX_DIBitmap> pBitmap,
+                       bool bRgbByteOrder,
+                       RetainPtr<CFX_DIBitmap> pBackdropBitmap,
+                       bool bGroupKnockout);
+
   bool StartDIBitsSkia(const RetainPtr<CFX_DIBBase>& pBitmap,
                        int bitmap_alpha,
                        uint32_t color,
diff --git a/core/fxge/skia/fx_skia_device_embeddertest.cpp b/core/fxge/skia/fx_skia_device_embeddertest.cpp
index 8258db2..dc51c1f 100644
--- a/core/fxge/skia/fx_skia_device_embeddertest.cpp
+++ b/core/fxge/skia/fx_skia_device_embeddertest.cpp
@@ -134,8 +134,7 @@
   ASSERT_TRUE(bitmap);
   FPDFBitmap_FillRect(bitmap.get(), 0, 0, kWidth, kHeight, 0x00000000);
   RetainPtr<CFX_DIBitmap> pBitmap(CFXDIBitmapFromFPDFBitmap(bitmap.get()));
-  auto driver =
-      std::make_unique<CFX_SkiaDeviceDriver>(pBitmap, false, nullptr, false);
+  auto driver = CFX_SkiaDeviceDriver::Create(pBitmap, false, nullptr, false);
   (*Test)(driver.get(), state);
   driver->Flush();
   uint32_t pixel = pBitmap->GetPixel(0, 0);