Use CPDF_Type3Char::FormIface rather than CPDF_Form in cpdf_type3font.cpp

In turn, this shows one omission in the callback interface, where
we don't want to virtualize a base class method, so wrap it instead.

Separated out from future CL since it can go by itself.

Change-Id: I59e325d53bf99dbc0300012ad45594871360cfae
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/58031
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/font/cpdf_type3char.h b/core/fpdfapi/font/cpdf_type3char.h
index a7d855e..25b3838 100644
--- a/core/fpdfapi/font/cpdf_type3char.h
+++ b/core/fpdfapi/font/cpdf_type3char.h
@@ -23,6 +23,7 @@
     virtual ~FormIface() {}
 
     virtual void ParseContentForType3Char(CPDF_Type3Char* pChar) = 0;
+    virtual bool HasPageObjects() const = 0;
     virtual const CPDF_ImageObject* GetSoleImageOfForm() const = 0;
     virtual CFX_FloatRect CalcBoundingBox() const = 0;
   };
diff --git a/core/fpdfapi/font/cpdf_type3font.cpp b/core/fpdfapi/font/cpdf_type3font.cpp
index 5787dc9..f7c58c2 100644
--- a/core/fpdfapi/font/cpdf_type3font.cpp
+++ b/core/fpdfapi/font/cpdf_type3font.cpp
@@ -110,10 +110,11 @@
   if (!pStream)
     return nullptr;
 
-  auto pForm = pdfium::MakeUnique<CPDF_Form>(
-      m_pDocument.Get(),
-      m_pFontResources ? m_pFontResources.Get() : m_pPageResources.Get(),
-      pStream);
+  std::unique_ptr<CPDF_Type3Char::FormIface> pForm =
+      pdfium::MakeUnique<CPDF_Form>(
+          m_pDocument.Get(),
+          m_pFontResources ? m_pFontResources.Get() : m_pPageResources.Get(),
+          pStream);
 
   auto pNewChar = pdfium::MakeUnique<CPDF_Type3Char>();
 
@@ -130,7 +131,7 @@
     return it->second.get();
 
   pNewChar->Transform(pForm.get(), m_FontMatrix);
-  if (pForm->GetPageObjectCount() != 0)
+  if (pForm->HasPageObjects())
     pNewChar->SetForm(std::move(pForm));
 
   CPDF_Type3Char* pCachedChar = pNewChar.get();
diff --git a/core/fpdfapi/page/cpdf_form.cpp b/core/fpdfapi/page/cpdf_form.cpp
index cef03d0..3033f1c 100644
--- a/core/fpdfapi/page/cpdf_form.cpp
+++ b/core/fpdfapi/page/cpdf_form.cpp
@@ -105,6 +105,10 @@
   return m_pFormStream.Get();
 }
 
+bool CPDF_Form::HasPageObjects() const {
+  return GetPageObjectCount() != 0;
+}
+
 const CPDF_ImageObject* CPDF_Form::GetSoleImageOfForm() const {
   return GetPageObjectCount() == 1 ? (*begin())->AsImage() : nullptr;
 }
diff --git a/core/fpdfapi/page/cpdf_form.h b/core/fpdfapi/page/cpdf_form.h
index f9b2e2e..7b94dde 100644
--- a/core/fpdfapi/page/cpdf_form.h
+++ b/core/fpdfapi/page/cpdf_form.h
@@ -40,6 +40,7 @@
 
   // CPDF_Type3Char::FormIface:
   void ParseContentForType3Char(CPDF_Type3Char* pType3Char) override;
+  bool HasPageObjects() const override;
   const CPDF_ImageObject* GetSoleImageOfForm() const override;
   CFX_FloatRect CalcBoundingBox() const override;