diff --git a/core/fxcrt/css/cfx_csscomputedstyle.cpp b/core/fxcrt/css/cfx_csscomputedstyle.cpp
index b4a84aa..8c37321 100644
--- a/core/fxcrt/css/cfx_csscomputedstyle.cpp
+++ b/core/fxcrt/css/cfx_csscomputedstyle.cpp
@@ -27,12 +27,12 @@
 
 size_t CFX_CSSComputedStyle::CountFontFamilies() const {
   return m_InheritedData.m_pFontFamily
-             ? m_InheritedData.m_pFontFamily->CountValues()
+             ? m_InheritedData.m_pFontFamily->values().size()
              : 0;
 }
 
 const WideString CFX_CSSComputedStyle::GetFontFamily(size_t index) const {
-  return m_InheritedData.m_pFontFamily->GetValue(index)
+  return m_InheritedData.m_pFontFamily->values()[index]
       .As<CFX_CSSStringValue>()
       ->Value();
 }
diff --git a/core/fxcrt/css/cfx_cssstyleselector.cpp b/core/fxcrt/css/cfx_cssstyleselector.cpp
index 74ec374..bf8b3a7 100644
--- a/core/fxcrt/css/cfx_cssstyleselector.cpp
+++ b/core/fxcrt/css/cfx_cssstyleselector.cpp
@@ -392,7 +392,7 @@
     }
   } else if (pValue->GetType() == CFX_CSSPrimitiveType::List) {
     RetainPtr<CFX_CSSValueList> pList = pValue.As<CFX_CSSValueList>();
-    if (pList->CountValues() > 0) {
+    if (!pList->values().empty()) {
       switch (eProperty) {
         case CFX_CSSProperty::FontFamily:
           pComputedStyle->m_InheritedData.m_pFontFamily = pList;
@@ -560,9 +560,9 @@
 uint32_t CFX_CSSStyleSelector::ToTextDecoration(
     const RetainPtr<CFX_CSSValueList>& pValue) {
   uint32_t dwDecoration = 0;
-  size_t count = pValue->CountValues();
-  for (size_t i = 0; i < count; ++i) {
-    const RetainPtr<CFX_CSSValue> pVal = pValue->GetValue(count - i - 1);
+  for (auto it = pValue->values().rbegin(); it != pValue->values().rend();
+       ++it) {
+    const RetainPtr<CFX_CSSValue> pVal = *it;
     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 6c9df1f..038495e 100644
--- a/core/fxcrt/css/cfx_cssstylesheet_unittest.cpp
+++ b/core/fxcrt/css/cfx_cssstylesheet_unittest.cpp
@@ -74,19 +74,20 @@
   }
 
   void VerifyList(CFX_CSSProperty prop,
-                  std::vector<CFX_CSSPropertyValue> values) {
+                  std::vector<CFX_CSSPropertyValue> expected_values) {
     ASSERT(decl_);
 
     bool important;
     RetainPtr<CFX_CSSValueList> list =
         decl_->GetProperty(prop, &important).As<CFX_CSSValueList>();
     ASSERT_TRUE(list);
-    EXPECT_EQ(list->CountValues(), values.size());
+    const std::vector<RetainPtr<CFX_CSSValue>>& values = list->values();
+    ASSERT_EQ(values.size(), expected_values.size());
 
-    for (size_t i = 0; i < values.size(); i++) {
-      RetainPtr<CFX_CSSValue> val = list->GetValue(i);
+    for (size_t i = 0; i < expected_values.size(); ++i) {
+      const auto& val = values[i];
       EXPECT_EQ(val->GetType(), CFX_CSSPrimitiveType::Enum);
-      EXPECT_EQ(val.As<CFX_CSSEnumValue>()->Value(), values[i]);
+      EXPECT_EQ(val.As<CFX_CSSEnumValue>()->Value(), expected_values[i]);
     }
   }
 
diff --git a/core/fxcrt/css/cfx_cssvaluelist.cpp b/core/fxcrt/css/cfx_cssvaluelist.cpp
index 7118fec..529d387 100644
--- a/core/fxcrt/css/cfx_cssvaluelist.cpp
+++ b/core/fxcrt/css/cfx_cssvaluelist.cpp
@@ -11,14 +11,6 @@
 #include "core/fxcrt/css/cfx_css.h"
 
 CFX_CSSValueList::CFX_CSSValueList(std::vector<RetainPtr<CFX_CSSValue>>& list)
-    : CFX_CSSValue(CFX_CSSPrimitiveType::List), m_ppList(std::move(list)) {}
+    : CFX_CSSValue(CFX_CSSPrimitiveType::List), list_(std::move(list)) {}
 
 CFX_CSSValueList::~CFX_CSSValueList() = default;
-
-size_t CFX_CSSValueList::CountValues() const {
-  return m_ppList.size();
-}
-
-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 79de9a4..328b7d2 100644
--- a/core/fxcrt/css/cfx_cssvaluelist.h
+++ b/core/fxcrt/css/cfx_cssvaluelist.h
@@ -16,11 +16,10 @@
   explicit CFX_CSSValueList(std::vector<RetainPtr<CFX_CSSValue>>& list);
   ~CFX_CSSValueList() override;
 
-  size_t CountValues() const;
-  RetainPtr<CFX_CSSValue> GetValue(size_t index) const;
+  const std::vector<RetainPtr<CFX_CSSValue>>& values() const { return list_; }
 
  private:
-  std::vector<RetainPtr<CFX_CSSValue>> m_ppList;
+  std::vector<RetainPtr<CFX_CSSValue>> list_;
 };
 
 #endif  // CORE_FXCRT_CSS_CFX_CSSVALUELIST_H_
