diff --git a/core/fxcrt/css/cfx_css.h b/core/fxcrt/css/cfx_css.h
index b2b0121..a6e3109 100644
--- a/core/fxcrt/css/cfx_css.h
+++ b/core/fxcrt/css/cfx_css.h
@@ -164,13 +164,13 @@
   SmallCaps,
 };
 
-enum CFX_CSSTEXTDECORATION {
-  CFX_CSSTEXTDECORATION_None = 0,
-  CFX_CSSTEXTDECORATION_Underline = 1 << 0,
-  CFX_CSSTEXTDECORATION_Overline = 1 << 1,
-  CFX_CSSTEXTDECORATION_LineThrough = 1 << 2,
-  CFX_CSSTEXTDECORATION_Blink = 1 << 3,
-  CFX_CSSTEXTDECORATION_Double = 1 << 4,
+enum class CFX_CSSTEXTDECORATION : uint8_t {
+  kNone = 0,
+  kUnderline = 1 << 0,
+  kOverline = 1 << 1,
+  kLineThrough = 1 << 2,
+  kBlink = 1 << 3,
+  kDouble = 1 << 4,
 };
 
 class CFX_CSSLength {
diff --git a/core/fxcrt/css/cfx_csscomputedstyle.cpp b/core/fxcrt/css/cfx_csscomputedstyle.cpp
index dcd7cc1..87cf08a 100644
--- a/core/fxcrt/css/cfx_csscomputedstyle.cpp
+++ b/core/fxcrt/css/cfx_csscomputedstyle.cpp
@@ -126,7 +126,7 @@
   return m_NonInheritedData.m_fVerticalAlign;
 }
 
-uint32_t CFX_CSSComputedStyle::GetTextDecoration() const {
+Mask<CFX_CSSTEXTDECORATION> CFX_CSSComputedStyle::GetTextDecoration() const {
   return m_NonInheritedData.m_dwTextDecoration;
 }
 
@@ -151,7 +151,8 @@
   m_NonInheritedData.m_fVerticalAlign = fAlign;
 }
 
-void CFX_CSSComputedStyle::SetTextDecoration(uint32_t dwTextDecoration) {
+void CFX_CSSComputedStyle::SetTextDecoration(
+    Mask<CFX_CSSTEXTDECORATION> dwTextDecoration) {
   m_NonInheritedData.m_dwTextDecoration = dwTextDecoration;
 }
 
diff --git a/core/fxcrt/css/cfx_csscomputedstyle.h b/core/fxcrt/css/cfx_csscomputedstyle.h
index 4da15a7..921c66c 100644
--- a/core/fxcrt/css/cfx_csscomputedstyle.h
+++ b/core/fxcrt/css/cfx_csscomputedstyle.h
@@ -12,6 +12,7 @@
 #include "core/fxcrt/css/cfx_css.h"
 #include "core/fxcrt/css/cfx_csscustomproperty.h"
 #include "core/fxcrt/fx_string.h"
+#include "core/fxcrt/mask.h"
 #include "core/fxcrt/retain_ptr.h"
 #include "core/fxge/dib/fx_dib.h"
 #include "third_party/base/optional.h"
@@ -52,7 +53,7 @@
     float m_fVerticalAlign = 0.0f;
     CFX_CSSDisplay m_eDisplay = CFX_CSSDisplay::Inline;
     CFX_CSSVerticalAlign m_eVerticalAlignType = CFX_CSSVerticalAlign::Baseline;
-    uint8_t m_dwTextDecoration = 0;
+    Mask<CFX_CSSTEXTDECORATION> m_dwTextDecoration;
     bool m_bHasMargin = false;
     bool m_bHasBorder = false;
     bool m_bHasPadding = false;
@@ -85,13 +86,13 @@
   CFX_CSSTextAlign GetTextAlign() const;
   CFX_CSSVerticalAlign GetVerticalAlign() const;
   float GetNumberVerticalAlign() const;
-  uint32_t GetTextDecoration() const;
+  Mask<CFX_CSSTEXTDECORATION> GetTextDecoration() const;
   const CFX_CSSLength& GetLetterSpacing() const;
   void SetLineHeight(float fLineHeight);
   void SetTextIndent(const CFX_CSSLength& textIndent);
   void SetTextAlign(CFX_CSSTextAlign eTextAlign);
   void SetNumberVerticalAlign(float fAlign);
-  void SetTextDecoration(uint32_t dwTextDecoration);
+  void SetTextDecoration(Mask<CFX_CSSTEXTDECORATION> dwTextDecoration);
   void SetLetterSpacing(const CFX_CSSLength& letterSpacing);
   void AddCustomStyle(const CFX_CSSCustomProperty& prop);
 
diff --git a/core/fxcrt/css/cfx_cssstyleselector.cpp b/core/fxcrt/css/cfx_cssstyleselector.cpp
index 8c7dcb0..a60d131 100644
--- a/core/fxcrt/css/cfx_cssstyleselector.cpp
+++ b/core/fxcrt/css/cfx_cssstyleselector.cpp
@@ -560,9 +560,9 @@
   }
 }
 
-uint32_t CFX_CSSStyleSelector::ToTextDecoration(
+Mask<CFX_CSSTEXTDECORATION> CFX_CSSStyleSelector::ToTextDecoration(
     const RetainPtr<CFX_CSSValueList>& pValue) {
-  uint32_t dwDecoration = 0;
+  Mask<CFX_CSSTEXTDECORATION> dwDecoration;
   for (const RetainPtr<CFX_CSSValue>& val :
        pdfium::base::Reversed(pValue->values())) {
     if (val->GetType() != CFX_CSSValue::PrimitiveType::kEnum)
@@ -570,19 +570,19 @@
 
     switch (val.As<CFX_CSSEnumValue>()->Value()) {
       case CFX_CSSPropertyValue::Underline:
-        dwDecoration |= CFX_CSSTEXTDECORATION_Underline;
+        dwDecoration |= CFX_CSSTEXTDECORATION::kUnderline;
         break;
       case CFX_CSSPropertyValue::LineThrough:
-        dwDecoration |= CFX_CSSTEXTDECORATION_LineThrough;
+        dwDecoration |= CFX_CSSTEXTDECORATION::kLineThrough;
         break;
       case CFX_CSSPropertyValue::Overline:
-        dwDecoration |= CFX_CSSTEXTDECORATION_Overline;
+        dwDecoration |= CFX_CSSTEXTDECORATION::kOverline;
         break;
       case CFX_CSSPropertyValue::Blink:
-        dwDecoration |= CFX_CSSTEXTDECORATION_Blink;
+        dwDecoration |= CFX_CSSTEXTDECORATION::kBlink;
         break;
       case CFX_CSSPropertyValue::Double:
-        dwDecoration |= CFX_CSSTEXTDECORATION_Double;
+        dwDecoration |= CFX_CSSTEXTDECORATION::kDouble;
         break;
       default:
         break;
diff --git a/core/fxcrt/css/cfx_cssstyleselector.h b/core/fxcrt/css/cfx_cssstyleselector.h
index 94a0b8d..eebfc3d 100644
--- a/core/fxcrt/css/cfx_cssstyleselector.h
+++ b/core/fxcrt/css/cfx_cssstyleselector.h
@@ -15,6 +15,7 @@
 #include "core/fxcrt/css/cfx_css.h"
 #include "core/fxcrt/css/cfx_cssrulecollection.h"
 #include "core/fxcrt/css/cfx_cssvalue.h"
+#include "core/fxcrt/mask.h"
 #include "core/fxcrt/retain_ptr.h"
 
 class CFX_CSSComputedStyle;
@@ -74,7 +75,8 @@
   uint16_t ToFontWeight(CFX_CSSPropertyValue eValue);
   CFX_CSSFontStyle ToFontStyle(CFX_CSSPropertyValue eValue);
   CFX_CSSVerticalAlign ToVerticalAlign(CFX_CSSPropertyValue eValue);
-  uint32_t ToTextDecoration(const RetainPtr<CFX_CSSValueList>& pList);
+  Mask<CFX_CSSTEXTDECORATION> ToTextDecoration(
+      const RetainPtr<CFX_CSSValueList>& pList);
   CFX_CSSFontVariant ToFontVariant(CFX_CSSPropertyValue eValue);
 
   float m_fDefaultFontSize = 12.0f;
diff --git a/xfa/fxfa/cxfa_textparser.cpp b/xfa/fxfa/cxfa_textparser.cpp
index 40d8134..227c044 100644
--- a/xfa/fxfa/cxfa_textparser.cpp
+++ b/xfa/fxfa/cxfa_textparser.cpp
@@ -158,13 +158,13 @@
     CFX_CSSLength letterSpacing;
     letterSpacing.Set(CFX_CSSLengthUnit::Point, font->GetLetterSpacing());
     pStyle->SetLetterSpacing(letterSpacing);
-    uint32_t dwDecoration = 0;
+    Mask<CFX_CSSTEXTDECORATION> dwDecoration;
     if (font->GetLineThrough() > 0)
-      dwDecoration |= CFX_CSSTEXTDECORATION_LineThrough;
+      dwDecoration |= CFX_CSSTEXTDECORATION::kLineThrough;
     if (font->GetUnderline() > 1)
-      dwDecoration |= CFX_CSSTEXTDECORATION_Double;
+      dwDecoration |= CFX_CSSTEXTDECORATION::kDouble;
     else if (font->GetUnderline() > 0)
-      dwDecoration |= CFX_CSSTEXTDECORATION_Underline;
+      dwDecoration |= CFX_CSSTEXTDECORATION::kUnderline;
 
     pStyle->SetTextDecoration(dwDecoration);
   }
@@ -180,7 +180,7 @@
   if (!pParentStyle)
     return pNewStyle;
 
-  uint32_t dwDecoration = pParentStyle->GetTextDecoration();
+  Mask<CFX_CSSTEXTDECORATION> dwDecoration = pParentStyle->GetTextDecoration();
   float fBaseLine = 0;
   if (pParentStyle->GetVerticalAlign() == CFX_CSSVerticalAlign::Number)
     fBaseLine = pParentStyle->GetNumberVerticalAlign();
@@ -420,10 +420,10 @@
   if (!pStyle)
     return font ? font->GetUnderline() : 0;
 
-  const uint32_t dwDecoration = pStyle->GetTextDecoration();
-  if (dwDecoration & CFX_CSSTEXTDECORATION_Double)
+  const Mask<CFX_CSSTEXTDECORATION> dwDecoration = pStyle->GetTextDecoration();
+  if (dwDecoration & CFX_CSSTEXTDECORATION::kDouble)
     return 2;
-  if (dwDecoration & CFX_CSSTEXTDECORATION_Underline)
+  if (dwDecoration & CFX_CSSTEXTDECORATION::kUnderline)
     return 1;
   return 0;
 }
@@ -444,8 +444,9 @@
     CXFA_TextProvider* pTextProvider,
     const CFX_CSSComputedStyle* pStyle) const {
   if (pStyle) {
-    const uint32_t dwDecoration = pStyle->GetTextDecoration();
-    return (dwDecoration & CFX_CSSTEXTDECORATION_LineThrough) ? 1 : 0;
+    const Mask<CFX_CSSTEXTDECORATION> dwDecoration =
+        pStyle->GetTextDecoration();
+    return (dwDecoration & CFX_CSSTEXTDECORATION::kLineThrough) ? 1 : 0;
   }
   CXFA_Font* font = pTextProvider->GetFontIfExists();
   return font ? font->GetLineThrough() : 0;
