Use UnownedPtr in CPDF_VariableText

Re-arrange order of some variables so that the lifetime
constraints are not violated, even temporarilly.

Change-Id: I859f1217d5af0f4c703a3d8ed742c1f144cc1c61
Reviewed-on: https://pdfium-review.googlesource.com/40950
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfdoc/cpdf_variabletext.cpp b/core/fpdfdoc/cpdf_variabletext.cpp
index 31f09c9..ddc3bb4 100644
--- a/core/fpdfdoc/cpdf_variabletext.cpp
+++ b/core/fpdfdoc/cpdf_variabletext.cpp
@@ -178,22 +178,9 @@
   return true;
 }
 
-CPDF_VariableText::CPDF_VariableText()
-    : m_nLimitChar(0),
-      m_nCharArray(0),
-      m_bMultiLine(false),
-      m_bLimitWidth(false),
-      m_bAutoFontSize(false),
-      m_nAlignment(0),
-      m_fLineLeading(0.0f),
-      m_fCharSpace(0.0f),
-      m_nHorzScale(100),
-      m_wSubWord(0),
-      m_fFontSize(0.0f),
-      m_bInitialized(false),
-      m_pVTProvider(nullptr) {}
+CPDF_VariableText::CPDF_VariableText() = default;
 
-CPDF_VariableText::~CPDF_VariableText() {}
+CPDF_VariableText::~CPDF_VariableText() = default;
 
 void CPDF_VariableText::Initialize() {
   if (m_bInitialized)
diff --git a/core/fpdfdoc/cpdf_variabletext.h b/core/fpdfdoc/cpdf_variabletext.h
index 786ad10..c97d303 100644
--- a/core/fpdfdoc/cpdf_variabletext.h
+++ b/core/fpdfdoc/cpdf_variabletext.h
@@ -18,6 +18,7 @@
 #include "core/fxcrt/fx_coordinates.h"
 #include "core/fxcrt/fx_string.h"
 #include "core/fxcrt/fx_system.h"
+#include "core/fxcrt/unowned_ptr.h"
 
 class CPVT_Word;
 class CSection;
@@ -28,7 +29,6 @@
 
 class CPDF_VariableText {
  public:
-
   class Iterator {
    public:
     explicit Iterator(CPDF_VariableText* pVT);
@@ -63,7 +63,7 @@
     virtual int32_t GetDefaultFontIndex();
 
    private:
-    IPVT_FontMap* const m_pFontMap;
+    UnownedPtr<IPVT_FontMap> const m_pFontMap;
   };
 
   CPDF_VariableText();
@@ -196,20 +196,20 @@
   bool IsBigger(float fFontSize) const;
   CPVT_FloatRect RearrangeSections(const CPVT_WordRange& PlaceRange);
 
+  bool m_bInitialized = false;
+  bool m_bMultiLine = false;
+  bool m_bLimitWidth = false;
+  bool m_bAutoFontSize = false;
+  uint16_t m_wSubWord = 0;
+  int32_t m_nLimitChar = 0;
+  int32_t m_nCharArray = 0;
+  int32_t m_nAlignment = 0;
+  int32_t m_nHorzScale = 100;
+  float m_fLineLeading = 0.0f;
+  float m_fCharSpace = 0.0f;
+  float m_fFontSize = 0.0f;
   std::vector<std::unique_ptr<CSection>> m_SectionArray;
-  int32_t m_nLimitChar;
-  int32_t m_nCharArray;
-  bool m_bMultiLine;
-  bool m_bLimitWidth;
-  bool m_bAutoFontSize;
-  int32_t m_nAlignment;
-  float m_fLineLeading;
-  float m_fCharSpace;
-  int32_t m_nHorzScale;
-  uint16_t m_wSubWord;
-  float m_fFontSize;
-  bool m_bInitialized;
-  CPDF_VariableText::Provider* m_pVTProvider;
+  UnownedPtr<CPDF_VariableText::Provider> m_pVTProvider;
   std::unique_ptr<CPDF_VariableText::Iterator> m_pVTIterator;
   CFX_FloatRect m_rcPlate;
   CPVT_FloatRect m_rcContent;