Nest CXFA_TextParseContext as CXFA_TextParser::Context

This avoids writing make_unique<CXFA_TextParseContext>, as eventually
make_unique<CXFA_*> should be a code smell with classes thusly named
being garbage collected.

-- encapsulate members while at it.

Change-Id: I3ac38f030a16ae3a2202cb6af28b931ebf98b87c
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/73671
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/xfa/fxfa/BUILD.gn b/xfa/fxfa/BUILD.gn
index bb96f3b..fdb604f 100644
--- a/xfa/fxfa/BUILD.gn
+++ b/xfa/fxfa/BUILD.gn
@@ -75,8 +75,6 @@
     "cxfa_readynodeiterator.h",
     "cxfa_textlayout.cpp",
     "cxfa_textlayout.h",
-    "cxfa_textparsecontext.cpp",
-    "cxfa_textparsecontext.h",
     "cxfa_textparser.cpp",
     "cxfa_textparser.h",
     "cxfa_textprovider.cpp",
diff --git a/xfa/fxfa/cxfa_textlayout.cpp b/xfa/fxfa/cxfa_textlayout.cpp
index ea97aa8..6299497 100644
--- a/xfa/fxfa/cxfa_textlayout.cpp
+++ b/xfa/fxfa/cxfa_textlayout.cpp
@@ -27,7 +27,6 @@
 #include "xfa/fgas/layout/cfx_rtfbreak.h"
 #include "xfa/fgas/layout/cfx_textuserdata.h"
 #include "xfa/fxfa/cxfa_ffdoc.h"
-#include "xfa/fxfa/cxfa_textparsecontext.h"
 #include "xfa/fxfa/cxfa_textparser.h"
 #include "xfa/fxfa/cxfa_textprovider.h"
 #include "xfa/fxfa/cxfa_texttabstopscontext.h"
@@ -737,7 +736,7 @@
   if (!pXMLNode)
     return false;
 
-  CXFA_TextParseContext* pContext =
+  CXFA_TextParser::Context* pContext =
       m_pTextParser->GetParseContextFromMap(pXMLNode);
   CFX_CSSDisplay eDisplay = CFX_CSSDisplay::None;
   bool bContentNode = false;
diff --git a/xfa/fxfa/cxfa_textparsecontext.cpp b/xfa/fxfa/cxfa_textparsecontext.cpp
deleted file mode 100644
index b21173a..0000000
--- a/xfa/fxfa/cxfa_textparsecontext.cpp
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright 2017 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#include "xfa/fxfa/cxfa_textparsecontext.h"
-
-#include "core/fxcrt/css/cfx_csscomputedstyle.h"
-#include "core/fxcrt/css/cfx_cssdeclaration.h"
-#include "core/fxcrt/css/cfx_cssstyleselector.h"
-
-CXFA_TextParseContext::CXFA_TextParseContext() = default;
-
-CXFA_TextParseContext::~CXFA_TextParseContext() = default;
diff --git a/xfa/fxfa/cxfa_textparsecontext.h b/xfa/fxfa/cxfa_textparsecontext.h
deleted file mode 100644
index 985ba4e..0000000
--- a/xfa/fxfa/cxfa_textparsecontext.h
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright 2017 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef XFA_FXFA_CXFA_TEXTPARSECONTEXT_H_
-#define XFA_FXFA_CXFA_TEXTPARSECONTEXT_H_
-
-#include <utility>
-#include <vector>
-
-#include "core/fxcrt/css/cfx_css.h"
-#include "core/fxcrt/css/cfx_cssdeclaration.h"
-
-class CFX_CSSComputedStyle;
-
-class CXFA_TextParseContext {
- public:
-  CXFA_TextParseContext();
-  ~CXFA_TextParseContext();
-
-  void SetDisplay(CFX_CSSDisplay eDisplay) { m_eDisplay = eDisplay; }
-  CFX_CSSDisplay GetDisplay() const { return m_eDisplay; }
-
-  void SetDecls(std::vector<const CFX_CSSDeclaration*>&& decl) {
-    decls_ = std::move(decl);
-  }
-  const std::vector<const CFX_CSSDeclaration*>& GetDecls() { return decls_; }
-
-  RetainPtr<const CFX_CSSComputedStyle> m_pParentStyle;
-
- private:
-  std::vector<const CFX_CSSDeclaration*> decls_;
-  CFX_CSSDisplay m_eDisplay = CFX_CSSDisplay::None;
-};
-
-#endif  // XFA_FXFA_CXFA_TEXTPARSECONTEXT_H_
diff --git a/xfa/fxfa/cxfa_textparser.cpp b/xfa/fxfa/cxfa_textparser.cpp
index d9198f1..0128b30 100644
--- a/xfa/fxfa/cxfa_textparser.cpp
+++ b/xfa/fxfa/cxfa_textparser.cpp
@@ -11,6 +11,7 @@
 
 #include "core/fxcrt/css/cfx_css.h"
 #include "core/fxcrt/css/cfx_csscomputedstyle.h"
+#include "core/fxcrt/css/cfx_cssdeclaration.h"
 #include "core/fxcrt/css/cfx_cssstyleselector.h"
 #include "core/fxcrt/css/cfx_cssstylesheet.h"
 #include "core/fxcrt/fx_codepage.h"
@@ -22,7 +23,6 @@
 #include "xfa/fxfa/cxfa_ffapp.h"
 #include "xfa/fxfa/cxfa_ffdoc.h"
 #include "xfa/fxfa/cxfa_fontmgr.h"
-#include "xfa/fxfa/cxfa_textparsecontext.h"
 #include "xfa/fxfa/cxfa_textprovider.h"
 #include "xfa/fxfa/cxfa_texttabstopscontext.h"
 #include "xfa/fxfa/parser/cxfa_font.h"
@@ -199,11 +199,11 @@
   if (it == m_mapXMLNodeToParseContext.end())
     return nullptr;
 
-  CXFA_TextParseContext* pContext = it->second.get();
+  Context* pContext = it->second.get();
   if (!pContext)
     return nullptr;
 
-  pContext->m_pParentStyle.Reset(pParentStyle);
+  pContext->SetParentStyle(pParentStyle);
 
   auto tagProvider = ParseTagInfo(pXMLNode);
   if (tagProvider->m_bContent)
@@ -239,7 +239,7 @@
   RetainPtr<CFX_CSSComputedStyle> pNewStyle;
   if (!(tagProvider->GetTagName().EqualsASCII("body") &&
         tagProvider->GetTagName().EqualsASCII("html"))) {
-    auto pTextContext = std::make_unique<CXFA_TextParseContext>();
+    auto pTextContext = std::make_unique<Context>();
     CFX_CSSDisplay eDisplay = CFX_CSSDisplay::Inline;
     if (!tagProvider->m_bContent) {
       auto declArray =
@@ -384,9 +384,9 @@
     while (pXMLNode) {
       auto it = m_mapXMLNodeToParseContext.find(pXMLNode);
       if (it != m_mapXMLNodeToParseContext.end()) {
-        CXFA_TextParseContext* pContext = it->second.get();
-        if (pContext && pContext->m_pParentStyle &&
-            pContext->m_pParentStyle->GetCustomStyle(
+        Context* pContext = it->second.get();
+        if (pContext && pContext->GetParentStyle() &&
+            pContext->GetParentStyle()->GetCustomStyle(
                 L"xfa-font-horizontal-scale", &wsValue)) {
           return wsValue.GetInteger();
         }
@@ -527,7 +527,7 @@
   return pTextProvider->GetEmbeddedObj(wsAttr);
 }
 
-CXFA_TextParseContext* CXFA_TextParser::GetParseContextFromMap(
+CXFA_TextParser::Context* CXFA_TextParser::GetParseContextFromMap(
     const CFX_XMLNode* pXMLNode) {
   auto it = m_mapXMLNodeToParseContext.find(pXMLNode);
   return it != m_mapXMLNodeToParseContext.end() ? it->second.get() : nullptr;
@@ -625,3 +625,17 @@
 CXFA_TextParser::TagProvider::TagProvider() = default;
 
 CXFA_TextParser::TagProvider::~TagProvider() = default;
+
+CXFA_TextParser::Context::Context() = default;
+
+CXFA_TextParser::Context::~Context() = default;
+
+void CXFA_TextParser::Context::SetParentStyle(
+    const CFX_CSSComputedStyle* style) {
+  m_pParentStyle.Reset(style);
+}
+
+void CXFA_TextParser::Context::SetDecls(
+    std::vector<const CFX_CSSDeclaration*>&& decl) {
+  decls_ = std::move(decl);
+}
diff --git a/xfa/fxfa/cxfa_textparser.h b/xfa/fxfa/cxfa_textparser.h
index c81bf6d..1a2f9fc 100644
--- a/xfa/fxfa/cxfa_textparser.h
+++ b/xfa/fxfa/cxfa_textparser.h
@@ -9,7 +9,10 @@
 
 #include <map>
 #include <memory>
+#include <vector>
 
+#include "core/fxcrt/css/cfx_css.h"
+#include "core/fxcrt/css/cfx_cssdeclaration.h"
 #include "core/fxcrt/fx_string.h"
 #include "core/fxcrt/fx_system.h"
 #include "core/fxcrt/retain_ptr.h"
@@ -25,12 +28,35 @@
 class CFX_CSSStyleSheet;
 class CFX_XMLNode;
 class CXFA_FFDoc;
-class CXFA_TextParseContext;
 class CXFA_TextProvider;
 class CXFA_TextTabstopsContext;
 
 class CXFA_TextParser : public cppgc::GarbageCollected<CXFA_TextParser> {
  public:
+  class Context {
+   public:
+    Context();
+    ~Context();
+
+    void SetParentStyle(const CFX_CSSComputedStyle* style);
+    const CFX_CSSComputedStyle* GetParentStyle() const {
+      return m_pParentStyle.Get();
+    }
+
+    void SetDisplay(CFX_CSSDisplay eDisplay) { m_eDisplay = eDisplay; }
+    CFX_CSSDisplay GetDisplay() const { return m_eDisplay; }
+
+    void SetDecls(std::vector<const CFX_CSSDeclaration*>&& decl);
+    const std::vector<const CFX_CSSDeclaration*>& GetDecls() const {
+      return decls_;
+    }
+
+   private:
+    RetainPtr<const CFX_CSSComputedStyle> m_pParentStyle;
+    CFX_CSSDisplay m_eDisplay = CFX_CSSDisplay::None;
+    std::vector<const CFX_CSSDeclaration*> decls_;
+  };
+
   CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
   virtual ~CXFA_TextParser();
 
@@ -85,7 +111,7 @@
 
   Optional<WideString> GetEmbeddedObj(const CXFA_TextProvider* pTextProvider,
                                       const CFX_XMLNode* pXMLNode);
-  CXFA_TextParseContext* GetParseContextFromMap(const CFX_XMLNode* pXMLNode);
+  Context* GetParseContextFromMap(const CFX_XMLNode* pXMLNode);
 
  protected:
   CXFA_TextParser();
@@ -130,7 +156,7 @@
   bool m_bParsed = false;
   bool m_cssInitialized = false;
   std::unique_ptr<CFX_CSSStyleSelector> m_pSelector;
-  std::map<const CFX_XMLNode*, std::unique_ptr<CXFA_TextParseContext>>
+  std::map<const CFX_XMLNode*, std::unique_ptr<Context>>
       m_mapXMLNodeToParseContext;
 };