diff --git a/core/fxcrt/css/cfx_csscomputedstyle.cpp b/core/fxcrt/css/cfx_csscomputedstyle.cpp
index 506305c..b4a84aa 100644
--- a/core/fxcrt/css/cfx_csscomputedstyle.cpp
+++ b/core/fxcrt/css/cfx_csscomputedstyle.cpp
@@ -25,13 +25,13 @@
   return false;
 }
 
-int32_t CFX_CSSComputedStyle::CountFontFamilies() const {
+size_t CFX_CSSComputedStyle::CountFontFamilies() const {
   return m_InheritedData.m_pFontFamily
              ? m_InheritedData.m_pFontFamily->CountValues()
              : 0;
 }
 
-const WideString CFX_CSSComputedStyle::GetFontFamily(int32_t index) const {
+const WideString CFX_CSSComputedStyle::GetFontFamily(size_t index) const {
   return m_InheritedData.m_pFontFamily->GetValue(index)
       .As<CFX_CSSStringValue>()
       ->Value();
diff --git a/core/fxcrt/css/cfx_csscomputedstyle.h b/core/fxcrt/css/cfx_csscomputedstyle.h
index 7be2cb4..b751c4e 100644
--- a/core/fxcrt/css/cfx_csscomputedstyle.h
+++ b/core/fxcrt/css/cfx_csscomputedstyle.h
@@ -58,8 +58,8 @@
 
   CONSTRUCT_VIA_MAKE_RETAIN;
 
-  int32_t CountFontFamilies() const;
-  const WideString GetFontFamily(int32_t index) const;
+  size_t CountFontFamilies() const;
+  const WideString GetFontFamily(size_t index) const;
   uint16_t GetFontWeight() const;
   CFX_CSSFontVariant GetFontVariant() const;
   CFX_CSSFontStyle GetFontStyle() const;
diff --git a/core/fxcrt/css/cfx_cssstyleselector.cpp b/core/fxcrt/css/cfx_cssstyleselector.cpp
index b567fef..74ec374 100644
--- a/core/fxcrt/css/cfx_cssstyleselector.cpp
+++ b/core/fxcrt/css/cfx_cssstyleselector.cpp
@@ -392,8 +392,7 @@
     }
   } else if (pValue->GetType() == CFX_CSSPrimitiveType::List) {
     RetainPtr<CFX_CSSValueList> pList = pValue.As<CFX_CSSValueList>();
-    int32_t iCount = pList->CountValues();
-    if (iCount > 0) {
+    if (pList->CountValues() > 0) {
       switch (eProperty) {
         case CFX_CSSProperty::FontFamily:
           pComputedStyle->m_InheritedData.m_pFontFamily = pList;
@@ -561,8 +560,9 @@
 uint32_t CFX_CSSStyleSelector::ToTextDecoration(
     const RetainPtr<CFX_CSSValueList>& pValue) {
   uint32_t dwDecoration = 0;
-  for (int32_t i = pValue->CountValues() - 1; i >= 0; --i) {
-    const RetainPtr<CFX_CSSValue> pVal = pValue->GetValue(i);
+  size_t count = pValue->CountValues();
+  for (size_t i = 0; i < count; ++i) {
+    const RetainPtr<CFX_CSSValue> pVal = pValue->GetValue(count - i - 1);
     if (pVal->GetType() != CFX_CSSPrimitiveType::Enum)
       continue;
 
diff --git a/core/fxcrt/css/cfx_cssstylesheet_unittest.cpp b/core/fxcrt/css/cfx_cssstylesheet_unittest.cpp
index 35f6c2c..6c9df1f 100644
--- a/core/fxcrt/css/cfx_cssstylesheet_unittest.cpp
+++ b/core/fxcrt/css/cfx_cssstylesheet_unittest.cpp
@@ -15,7 +15,6 @@
 #include "core/fxcrt/css/cfx_cssstylerule.h"
 #include "core/fxcrt/css/cfx_cssvaluelist.h"
 #include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/base/stl_util.h"
 
 class CFX_CSSStyleSheetTest : public testing::Test {
  public:
@@ -82,7 +81,7 @@
     RetainPtr<CFX_CSSValueList> list =
         decl_->GetProperty(prop, &important).As<CFX_CSSValueList>();
     ASSERT_TRUE(list);
-    EXPECT_EQ(list->CountValues(), pdfium::CollectionSize<int32_t>(values));
+    EXPECT_EQ(list->CountValues(), values.size());
 
     for (size_t i = 0; i < values.size(); i++) {
       RetainPtr<CFX_CSSValue> val = list->GetValue(i);
diff --git a/core/fxcrt/css/cfx_cssvaluelist.cpp b/core/fxcrt/css/cfx_cssvaluelist.cpp
index 3a8821a..7118fec 100644
--- a/core/fxcrt/css/cfx_cssvaluelist.cpp
+++ b/core/fxcrt/css/cfx_cssvaluelist.cpp
@@ -15,10 +15,10 @@
 
 CFX_CSSValueList::~CFX_CSSValueList() = default;
 
-int32_t CFX_CSSValueList::CountValues() const {
+size_t CFX_CSSValueList::CountValues() const {
   return m_ppList.size();
 }
 
-RetainPtr<CFX_CSSValue> CFX_CSSValueList::GetValue(int32_t index) const {
+RetainPtr<CFX_CSSValue> CFX_CSSValueList::GetValue(size_t index) const {
   return m_ppList[index];
 }
diff --git a/core/fxcrt/css/cfx_cssvaluelist.h b/core/fxcrt/css/cfx_cssvaluelist.h
index 4b87f4c..79de9a4 100644
--- a/core/fxcrt/css/cfx_cssvaluelist.h
+++ b/core/fxcrt/css/cfx_cssvaluelist.h
@@ -16,8 +16,8 @@
   explicit CFX_CSSValueList(std::vector<RetainPtr<CFX_CSSValue>>& list);
   ~CFX_CSSValueList() override;
 
-  int32_t CountValues() const;
-  RetainPtr<CFX_CSSValue> GetValue(int32_t index) const;
+  size_t CountValues() const;
+  RetainPtr<CFX_CSSValue> GetValue(size_t index) const;
 
  private:
   std::vector<RetainPtr<CFX_CSSValue>> m_ppList;
diff --git a/xfa/fxfa/cxfa_textparser.cpp b/xfa/fxfa/cxfa_textparser.cpp
index 9ba21cc..15f56c7 100644
--- a/xfa/fxfa/cxfa_textparser.cpp
+++ b/xfa/fxfa/cxfa_textparser.cpp
@@ -349,9 +349,9 @@
   }
 
   if (pStyle) {
-    int32_t iCount = pStyle->CountFontFamilies();
-    if (iCount > 0)
-      wsFamily = pStyle->GetFontFamily(iCount - 1).AsStringView();
+    size_t count = pStyle->CountFontFamilies();
+    if (count > 0)
+      wsFamily = pStyle->GetFontFamily(count - 1).AsStringView();
 
     dwStyle = 0;
     if (pStyle->GetFontWeight() > FXFONT_FW_NORMAL)
