diff --git a/xfa/fxfa/cxfa_ffpushbutton.cpp b/xfa/fxfa/cxfa_ffpushbutton.cpp
index 9e0ad1b..4cdc045 100644
--- a/xfa/fxfa/cxfa_ffpushbutton.cpp
+++ b/xfa/fxfa/cxfa_ffpushbutton.cpp
@@ -146,7 +146,7 @@
     if (!m_pRollProvider) {
       m_pRollProvider = cppgc::MakeGarbageCollected<CXFA_TextProvider>(
           GetDoc()->GetHeap()->GetAllocationHandle(), m_pNode.Get(),
-          XFA_TEXTPROVIDERTYPE_Rollover);
+          CXFA_TextProvider::Type::kRollover);
     }
     m_pRolloverTextLayout = cppgc::MakeGarbageCollected<CXFA_TextLayout>(
         GetDoc()->GetHeap()->GetAllocationHandle(), GetDoc(), m_pRollProvider);
@@ -155,7 +155,7 @@
     if (!m_pDownProvider) {
       m_pDownProvider = cppgc::MakeGarbageCollected<CXFA_TextProvider>(
           GetDoc()->GetHeap()->GetAllocationHandle(), m_pNode.Get(),
-          XFA_TEXTPROVIDERTYPE_Down);
+          CXFA_TextProvider::Type::kDown);
     }
     m_pDownTextLayout = cppgc::MakeGarbageCollected<CXFA_TextLayout>(
         GetDoc()->GetHeap()->GetAllocationHandle(), GetDoc(), m_pDownProvider);
diff --git a/xfa/fxfa/cxfa_textprovider.cpp b/xfa/fxfa/cxfa_textprovider.cpp
index a9e9cb8..58f8494 100644
--- a/xfa/fxfa/cxfa_textprovider.cpp
+++ b/xfa/fxfa/cxfa_textprovider.cpp
@@ -32,8 +32,7 @@
 #include "xfa/fxfa/parser/cxfa_value.h"
 #include "xfa/fxfa/parser/xfa_utils.h"
 
-CXFA_TextProvider::CXFA_TextProvider(CXFA_Node* pNode,
-                                     XFA_TEXTPROVIDERTYPE eType)
+CXFA_TextProvider::CXFA_TextProvider(CXFA_Node* pNode, Type eType)
     : m_pNode(pNode), m_eType(eType) {
   DCHECK(m_pNode);
 }
@@ -46,7 +45,7 @@
 
 CXFA_Node* CXFA_TextProvider::GetTextNode(bool* bRichText) {
   *bRichText = false;
-  if (m_eType == XFA_TEXTPROVIDERTYPE_Text) {
+  if (m_eType == Type::kText) {
     CXFA_Value* pValueNode =
         m_pNode->GetChild<CXFA_Value>(0, XFA_Element::Value, false);
     if (!pValueNode)
@@ -64,21 +63,7 @@
     return pChildNode;
   }
 
-  if (m_eType == XFA_TEXTPROVIDERTYPE_Datasets) {
-    CXFA_Node* pBind = m_pNode->GetBindData();
-    CFX_XMLNode* pXMLNode = pBind->GetXMLMappingNode();
-    for (CFX_XMLNode* pXMLChild = pXMLNode->GetFirstChild(); pXMLChild;
-         pXMLChild = pXMLChild->GetNextSibling()) {
-      CFX_XMLElement* pElement = ToXMLElement(pXMLChild);
-      if (pElement && XFA_RecognizeRichText(pElement)) {
-        *bRichText = true;
-        break;
-      }
-    }
-    return pBind;
-  }
-
-  if (m_eType == XFA_TEXTPROVIDERTYPE_Caption) {
+  if (m_eType == Type::kCaption) {
     CXFA_Caption* pCaptionNode =
         m_pNode->GetChild<CXFA_Caption>(0, XFA_Element::Caption, false);
     if (!pCaptionNode)
@@ -109,11 +94,10 @@
   CXFA_Node* pNode = pItemNode->GetFirstChild();
   while (pNode) {
     WideString wsName = pNode->JSObject()->GetCData(XFA_Attribute::Name);
-    if (m_eType == XFA_TEXTPROVIDERTYPE_Rollover &&
-        wsName.EqualsASCII("rollover")) {
+    if (m_eType == Type::kRollover && wsName.EqualsASCII("rollover")) {
       return pNode;
     }
-    if (m_eType == XFA_TEXTPROVIDERTYPE_Down && wsName.EqualsASCII("down"))
+    if (m_eType == Type::kDown && wsName.EqualsASCII("down"))
       return pNode;
 
     pNode = pNode->GetNextSibling();
@@ -122,7 +106,7 @@
 }
 
 CXFA_Para* CXFA_TextProvider::GetParaIfExists() {
-  if (m_eType == XFA_TEXTPROVIDERTYPE_Text)
+  if (m_eType == Type::kText)
     return m_pNode->GetParaIfExists();
 
   CXFA_Caption* pNode =
@@ -131,7 +115,7 @@
 }
 
 CXFA_Font* CXFA_TextProvider::GetFontIfExists() {
-  if (m_eType == XFA_TEXTPROVIDERTYPE_Text)
+  if (m_eType == Type::kText)
     return m_pNode->GetFontIfExists();
 
   CXFA_Caption* pNode =
@@ -148,7 +132,7 @@
 
 Optional<WideString> CXFA_TextProvider::GetEmbeddedObj(
     const WideString& wsAttr) const {
-  if (m_eType != XFA_TEXTPROVIDERTYPE_Text)
+  if (m_eType != Type::kText)
     return pdfium::nullopt;
 
   CXFA_Node* pParent = m_pNode->GetParent();
diff --git a/xfa/fxfa/cxfa_textprovider.h b/xfa/fxfa/cxfa_textprovider.h
index e0aae86..138e429 100644
--- a/xfa/fxfa/cxfa_textprovider.h
+++ b/xfa/fxfa/cxfa_textprovider.h
@@ -19,16 +19,15 @@
 class CXFA_Node;
 class CXFA_Para;
 
-enum XFA_TEXTPROVIDERTYPE {
-  XFA_TEXTPROVIDERTYPE_Text,
-  XFA_TEXTPROVIDERTYPE_Datasets,
-  XFA_TEXTPROVIDERTYPE_Caption,
-  XFA_TEXTPROVIDERTYPE_Rollover,
-  XFA_TEXTPROVIDERTYPE_Down,
-};
-
 class CXFA_TextProvider : public cppgc::GarbageCollected<CXFA_TextProvider> {
  public:
+  enum class Type : uint8_t {
+    kText,
+    kCaption,
+    kRollover,
+    kDown,
+  };
+
   CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
   ~CXFA_TextProvider();
 
@@ -41,10 +40,10 @@
   Optional<WideString> GetEmbeddedObj(const WideString& wsAttr) const;
 
  private:
-  CXFA_TextProvider(CXFA_Node* pNode, XFA_TEXTPROVIDERTYPE eType);
+  CXFA_TextProvider(CXFA_Node* pNode, Type eType);
 
   cppgc::Member<CXFA_Node> m_pNode;
-  XFA_TEXTPROVIDERTYPE m_eType;
+  const Type m_eType;
 };
 
 #endif  // XFA_FXFA_CXFA_TEXTPROVIDER_H_
diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp
index 44f2e11..b3b4445 100644
--- a/xfa/fxfa/parser/cxfa_node.cpp
+++ b/xfa/fxfa/parser/cxfa_node.cpp
@@ -848,7 +848,7 @@
 
     m_pTextProvider = cppgc::MakeGarbageCollected<CXFA_TextProvider>(
         doc->GetHeap()->GetAllocationHandle(), pNode,
-        XFA_TEXTPROVIDERTYPE_Text);
+        CXFA_TextProvider::Type::kText);
     m_pTextLayout = cppgc::MakeGarbageCollected<CXFA_TextLayout>(
         doc->GetHeap()->GetAllocationHandle(), doc, m_pTextProvider);
   }
@@ -917,7 +917,7 @@
 
     m_pCapTextProvider = cppgc::MakeGarbageCollected<CXFA_TextProvider>(
         doc->GetHeap()->GetAllocationHandle(), pNode,
-        XFA_TEXTPROVIDERTYPE_Caption);
+        CXFA_TextProvider::Type::kCaption);
     m_pCapTextLayout = cppgc::MakeGarbageCollected<CXFA_TextLayout>(
         doc->GetHeap()->GetAllocationHandle(), doc, m_pCapTextProvider);
     return true;
