De-duplicate code in CPDF_GenerateAP::GenerateFormAP()

-- pass provider to CPDF_VariableText constructor.

Change-Id: I88725921cc62ff17d1f552b73fdd1fb7078f28f8
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/95810
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfdoc/cpdf_generateap.cpp b/core/fpdfdoc/cpdf_generateap.cpp
index 0f1b674..c05b141 100644
--- a/core/fpdfdoc/cpdf_generateap.cpp
+++ b/core/fpdfdoc/cpdf_generateap.cpp
@@ -376,8 +376,7 @@
 
   CPVT_FontMap map(pDoc, nullptr, pDefFont, sFontName);
   CPVT_VariableText::Provider prd(&map);
-  CPVT_VariableText vt;
-  vt.SetProvider(&prd);
+  CPVT_VariableText vt(&prd);
   vt.SetPlateRect(pAnnotDict.GetRectFor(pdfium::annotation::kRect));
   vt.SetFontSize(12);
   vt.SetAutoReturn(true);
@@ -1096,6 +1095,12 @@
     pStreamDict->SetMatrixFor("Matrix", matrix);
     pStreamDict->SetRectFor("BBox", rcBBox);
   }
+  CPVT_FontMap map(
+      pDoc,
+      pStreamDict ? pStreamDict->GetMutableDictFor("Resources").Get() : nullptr,
+      pDefFont, font_name);
+  CPVT_VariableText::Provider prd(&map);
+
   switch (type) {
     case CPDF_GenerateAP::kTextField: {
       const CPDF_Object* pV =
@@ -1109,14 +1114,7 @@
       const CPDF_Object* pMaxLen =
           CPDF_FormField::GetFieldAttr(pAnnotDict, "MaxLen");
       uint32_t dwMaxLen = pMaxLen ? pMaxLen->GetInteger() : 0;
-      CPVT_FontMap map(pDoc,
-                       pStreamDict
-                           ? pStreamDict->GetMutableDictFor("Resources").Get()
-                           : nullptr,
-                       pDefFont, font_name);
-      CPVT_VariableText::Provider prd(&map);
-      CPVT_VariableText vt;
-      vt.SetProvider(&prd);
+      CPVT_VariableText vt(&prd);
       vt.SetPlateRect(rcBody);
       vt.SetAlignment(nAlign);
       if (FXSYS_IsFloatZero(fFontSize))
@@ -1171,14 +1169,7 @@
       const CPDF_Object* pV =
           CPDF_FormField::GetFieldAttr(pAnnotDict, pdfium::form_fields::kV);
       WideString swValue = pV ? pV->GetUnicodeText() : WideString();
-      CPVT_FontMap map(pDoc,
-                       pStreamDict
-                           ? pStreamDict->GetMutableDictFor("Resources").Get()
-                           : nullptr,
-                       pDefFont, font_name);
-      CPVT_VariableText::Provider prd(&map);
-      CPVT_VariableText vt;
-      vt.SetProvider(&prd);
+      CPVT_VariableText vt(&prd);
       CFX_FloatRect rcButton = rcBody;
       rcButton.left = rcButton.right - 13;
       rcButton.Normalize();
@@ -1242,12 +1233,6 @@
       break;
     }
     case CPDF_GenerateAP::kListBox: {
-      CPVT_FontMap map(pDoc,
-                       pStreamDict
-                           ? pStreamDict->GetMutableDictFor("Resources").Get()
-                           : nullptr,
-                       pDefFont, font_name);
-      CPVT_VariableText::Provider prd(&map);
       CPDF_Array* pOpts =
           ToArray(CPDF_FormField::GetFieldAttr(pAnnotDict, "Opt"));
       CPDF_Array* pSels =
@@ -1280,15 +1265,14 @@
                 }
               }
             }
-            CPVT_VariableText vt;
-            vt.SetProvider(&prd);
+            CPVT_VariableText vt(&prd);
             vt.SetPlateRect(
                 CFX_FloatRect(rcBody.left, 0.0f, rcBody.right, 0.0f));
             vt.SetFontSize(FXSYS_IsFloatZero(fFontSize) ? 12.0f : fFontSize);
-
             vt.Initialize();
             vt.SetText(swItem);
             vt.RearrangeAll();
+
             float fItemHeight = vt.GetContentRect().Height();
             if (bSelected) {
               CFX_FloatRect rcItem = CFX_FloatRect(
diff --git a/core/fpdfdoc/cpvt_variabletext.cpp b/core/fpdfdoc/cpvt_variabletext.cpp
index 19da19f..d985b5b 100644
--- a/core/fpdfdoc/cpvt_variabletext.cpp
+++ b/core/fpdfdoc/cpvt_variabletext.cpp
@@ -166,7 +166,8 @@
   return true;
 }
 
-CPVT_VariableText::CPVT_VariableText() = default;
+CPVT_VariableText::CPVT_VariableText(Provider* pProvider)
+    : m_pVTProvider(pProvider) {}
 
 CPVT_VariableText::~CPVT_VariableText() = default;
 
@@ -865,7 +866,7 @@
   return m_pVTIterator.get();
 }
 
-void CPVT_VariableText::SetProvider(CPVT_VariableText::Provider* pProvider) {
+void CPVT_VariableText::SetProvider(Provider* pProvider) {
   m_pVTProvider = pProvider;
 }
 
diff --git a/core/fpdfdoc/cpvt_variabletext.h b/core/fpdfdoc/cpvt_variabletext.h
index bdaedf2..77984b5 100644
--- a/core/fpdfdoc/cpvt_variabletext.h
+++ b/core/fpdfdoc/cpvt_variabletext.h
@@ -66,10 +66,10 @@
     UnownedPtr<IPVT_FontMap> const m_pFontMap;
   };
 
-  CPVT_VariableText();
+  explicit CPVT_VariableText(Provider* Provider);
   ~CPVT_VariableText();
 
-  void SetProvider(CPVT_VariableText::Provider* pProvider);
+  void SetProvider(Provider* pProvider);
   CPVT_VariableText::Iterator* GetIterator();
 
   CFX_FloatRect GetContentRect() const;
diff --git a/fpdfsdk/pwl/cpwl_edit_impl.cpp b/fpdfsdk/pwl/cpwl_edit_impl.cpp
index 3cd89a2..77eeee9 100644
--- a/fpdfsdk/pwl/cpwl_edit_impl.cpp
+++ b/fpdfsdk/pwl/cpwl_edit_impl.cpp
@@ -680,7 +680,8 @@
   }
 }
 
-CPWL_EditImpl::CPWL_EditImpl() : m_pVT(std::make_unique<CPVT_VariableText>()) {}
+CPWL_EditImpl::CPWL_EditImpl()
+    : m_pVT(std::make_unique<CPVT_VariableText>(nullptr)) {}
 
 CPWL_EditImpl::~CPWL_EditImpl() = default;