diff --git a/core/fpdftext/cpdf_linkextract.cpp b/core/fpdftext/cpdf_linkextract.cpp
index 4f4c5a6..ab6c395 100644
--- a/core/fpdftext/cpdf_linkextract.cpp
+++ b/core/fpdftext/cpdf_linkextract.cpp
@@ -263,7 +263,7 @@
   if (!aPos.has_value() || aPos.value() == 0)
     return false;
 
-  str->TrimRight(L'.');
+  str->TrimBack(L'.');
   // At least one '.' in domain name, but not at the beginning.
   // TODO(weili): RFC5322 allows domain names to be a local name without '.'.
   // Check whether we should remove this check.
diff --git a/core/fxcrt/bytestring.cpp b/core/fxcrt/bytestring.cpp
index c07218a..1b78d08 100644
--- a/core/fxcrt/bytestring.cpp
+++ b/core/fxcrt/bytestring.cpp
@@ -355,16 +355,16 @@
 }
 
 void ByteString::TrimWhitespace() {
-  TrimWhitespaceRight();
-  TrimWhitespaceLeft();
+  TrimWhitespaceBack();
+  TrimWhitespaceFront();
 }
 
-void ByteString::TrimWhitespaceLeft() {
-  TrimLeft(kTrimChars);
+void ByteString::TrimWhitespaceFront() {
+  TrimFront(kTrimChars);
 }
 
-void ByteString::TrimWhitespaceRight() {
-  TrimRight(kTrimChars);
+void ByteString::TrimWhitespaceBack() {
+  TrimBack(kTrimChars);
 }
 std::ostream& operator<<(std::ostream& os, const ByteString& str) {
   return os.write(str.c_str(), str.GetLength());
diff --git a/core/fxcrt/bytestring.h b/core/fxcrt/bytestring.h
index 027d1d0..677884e 100644
--- a/core/fxcrt/bytestring.h
+++ b/core/fxcrt/bytestring.h
@@ -110,8 +110,8 @@
 
   // Remove a canonical set of characters from the string.
   void TrimWhitespace();
-  void TrimWhitespaceRight();
-  void TrimWhitespaceLeft();
+  void TrimWhitespaceBack();
+  void TrimWhitespaceFront();
 
   uint32_t GetID() const { return AsStringView().GetID(); }
 
diff --git a/core/fxcrt/bytestring_unittest.cpp b/core/fxcrt/bytestring_unittest.cpp
index 3db0d1d..7c2a665 100644
--- a/core/fxcrt/bytestring_unittest.cpp
+++ b/core/fxcrt/bytestring_unittest.cpp
@@ -865,40 +865,40 @@
   EXPECT_EQ("BCCB", abc);
 }
 
-TEST(ByteString, TrimLeft) {
+TEST(ByteString, TrimFront) {
   ByteString fred("  FRED  ");
-  fred.TrimWhitespaceLeft();
+  fred.TrimWhitespaceFront();
   EXPECT_EQ("FRED  ", fred);
-  fred.TrimLeft('E');
+  fred.TrimFront('E');
   EXPECT_EQ("FRED  ", fred);
-  fred.TrimLeft('F');
+  fred.TrimFront('F');
   EXPECT_EQ("RED  ", fred);
-  fred.TrimLeft("ERP");
+  fred.TrimFront("ERP");
   EXPECT_EQ("D  ", fred);
 
   ByteString blank("   ");
-  blank.TrimLeft("ERP");
+  blank.TrimFront("ERP");
   EXPECT_EQ("   ", blank);
-  blank.TrimLeft('E');
+  blank.TrimFront('E');
   EXPECT_EQ("   ", blank);
-  blank.TrimWhitespaceLeft();
+  blank.TrimWhitespaceFront();
   EXPECT_EQ("", blank);
 
   ByteString empty;
-  empty.TrimLeft("ERP");
+  empty.TrimFront("ERP");
   EXPECT_EQ("", empty);
-  empty.TrimLeft('E');
+  empty.TrimFront('E');
   EXPECT_EQ("", empty);
-  empty.TrimWhitespaceLeft();
+  empty.TrimWhitespaceFront();
   EXPECT_EQ("", empty);
 }
 
-TEST(ByteString, TrimLeftCopies) {
+TEST(ByteString, TrimFrontCopies) {
   {
     // With a single reference, no copy takes place.
     ByteString fred("  FRED  ");
     const char* old_buffer = fred.c_str();
-    fred.TrimWhitespaceLeft();
+    fred.TrimWhitespaceFront();
     EXPECT_EQ("FRED  ", fred);
     EXPECT_EQ(old_buffer, fred.c_str());
   }
@@ -907,7 +907,7 @@
     ByteString fred("  FRED  ");
     ByteString other_fred = fred;
     const char* old_buffer = fred.c_str();
-    fred.TrimWhitespaceLeft();
+    fred.TrimWhitespaceFront();
     EXPECT_EQ("FRED  ", fred);
     EXPECT_EQ("  FRED  ", other_fred);
     EXPECT_NE(old_buffer, fred.c_str());
@@ -917,47 +917,47 @@
     ByteString fred("FRED");
     ByteString other_fred = fred;
     const char* old_buffer = fred.c_str();
-    fred.TrimWhitespaceLeft();
+    fred.TrimWhitespaceFront();
     EXPECT_EQ("FRED", fred);
     EXPECT_EQ("FRED", other_fred);
     EXPECT_EQ(old_buffer, fred.c_str());
   }
 }
 
-TEST(ByteString, TrimRight) {
+TEST(ByteString, TrimBack) {
   ByteString fred("  FRED  ");
-  fred.TrimWhitespaceRight();
+  fred.TrimWhitespaceBack();
   EXPECT_EQ("  FRED", fred);
-  fred.TrimRight('E');
+  fred.TrimBack('E');
   EXPECT_EQ("  FRED", fred);
-  fred.TrimRight('D');
+  fred.TrimBack('D');
   EXPECT_EQ("  FRE", fred);
-  fred.TrimRight("ERP");
+  fred.TrimBack("ERP");
   EXPECT_EQ("  F", fred);
 
   ByteString blank("   ");
-  blank.TrimRight("ERP");
+  blank.TrimBack("ERP");
   EXPECT_EQ("   ", blank);
-  blank.TrimRight('E');
+  blank.TrimBack('E');
   EXPECT_EQ("   ", blank);
-  blank.TrimWhitespaceRight();
+  blank.TrimWhitespaceBack();
   EXPECT_EQ("", blank);
 
   ByteString empty;
-  empty.TrimRight("ERP");
+  empty.TrimBack("ERP");
   EXPECT_EQ("", empty);
-  empty.TrimRight('E');
+  empty.TrimBack('E');
   EXPECT_EQ("", empty);
-  empty.TrimWhitespaceRight();
+  empty.TrimWhitespaceBack();
   EXPECT_EQ("", empty);
 }
 
-TEST(ByteString, TrimRightCopies) {
+TEST(ByteString, TrimBackCopies) {
   {
     // With a single reference, no copy takes place.
     ByteString fred("  FRED  ");
     const char* old_buffer = fred.c_str();
-    fred.TrimWhitespaceRight();
+    fred.TrimWhitespaceBack();
     EXPECT_EQ("  FRED", fred);
     EXPECT_EQ(old_buffer, fred.c_str());
   }
@@ -966,7 +966,7 @@
     ByteString fred("  FRED  ");
     ByteString other_fred = fred;
     const char* old_buffer = fred.c_str();
-    fred.TrimWhitespaceRight();
+    fred.TrimWhitespaceBack();
     EXPECT_EQ("  FRED", fred);
     EXPECT_EQ("  FRED  ", other_fred);
     EXPECT_NE(old_buffer, fred.c_str());
@@ -976,7 +976,7 @@
     ByteString fred("FRED");
     ByteString other_fred = fred;
     const char* old_buffer = fred.c_str();
-    fred.TrimWhitespaceRight();
+    fred.TrimWhitespaceBack();
     EXPECT_EQ("FRED", fred);
     EXPECT_EQ("FRED", other_fred);
     EXPECT_EQ(old_buffer, fred.c_str());
diff --git a/core/fxcrt/string_template.cpp b/core/fxcrt/string_template.cpp
index 5915315..672f7cb 100644
--- a/core/fxcrt/string_template.cpp
+++ b/core/fxcrt/string_template.cpp
@@ -228,28 +228,28 @@
 
 template <typename T>
 void StringTemplate<T>::Trim(T ch) {
-  TrimLeft(ch);
-  TrimRight(ch);
+  TrimFront(ch);
+  TrimBack(ch);
 }
 
 template <typename T>
-void StringTemplate<T>::TrimLeft(T ch) {
-  TrimLeft(StringView(ch));
+void StringTemplate<T>::TrimFront(T ch) {
+  TrimFront(StringView(ch));
 }
 
 template <typename T>
-void StringTemplate<T>::TrimRight(T ch) {
-  TrimRight(StringView(ch));
+void StringTemplate<T>::TrimBack(T ch) {
+  TrimBack(StringView(ch));
 }
 
 template <typename T>
 void StringTemplate<T>::Trim(StringView targets) {
-  TrimLeft(targets);
-  TrimRight(targets);
+  TrimFront(targets);
+  TrimBack(targets);
 }
 
 template <typename T>
-void StringTemplate<T>::TrimLeft(StringView targets) {
+void StringTemplate<T>::TrimFront(StringView targets) {
   if (!m_pData || targets.IsEmpty()) {
     return;
   }
@@ -284,7 +284,7 @@
 }
 
 template <typename T>
-void StringTemplate<T>::TrimRight(StringView targets) {
+void StringTemplate<T>::TrimBack(StringView targets) {
   if (!m_pData || targets.IsEmpty()) {
     return;
   }
diff --git a/core/fxcrt/string_template.h b/core/fxcrt/string_template.h
index 1923c87..9c9ec84 100644
--- a/core/fxcrt/string_template.h
+++ b/core/fxcrt/string_template.h
@@ -136,13 +136,13 @@
 
   // Remove character `ch` from  both/front/back of string.
   void Trim(T ch);
-  void TrimLeft(T ch);
-  void TrimRight(T ch);
+  void TrimFront(T ch);
+  void TrimBack(T ch);
 
   // Remove all characters in `targets` from both/front/back of string.
   void Trim(StringView targets);
-  void TrimLeft(StringView targets);
-  void TrimRight(StringView targets);
+  void TrimFront(StringView targets);
+  void TrimBack(StringView targets);
 
  protected:
   using StringData = StringDataTemplate<T>;
diff --git a/core/fxcrt/widestring.cpp b/core/fxcrt/widestring.cpp
index 8af383b..b8ca793 100644
--- a/core/fxcrt/widestring.cpp
+++ b/core/fxcrt/widestring.cpp
@@ -773,16 +773,16 @@
 }
 
 void WideString::TrimWhitespace() {
-  TrimWhitespaceRight();
-  TrimWhitespaceLeft();
+  TrimWhitespaceBack();
+  TrimWhitespaceFront();
 }
 
-void WideString::TrimWhitespaceLeft() {
-  TrimLeft(kWideTrimChars);
+void WideString::TrimWhitespaceFront() {
+  TrimFront(kWideTrimChars);
 }
 
-void WideString::TrimWhitespaceRight() {
-  TrimRight(kWideTrimChars);
+void WideString::TrimWhitespaceBack() {
+  TrimBack(kWideTrimChars);
 }
 int WideString::GetInteger() const {
   return m_pData ? FXSYS_wtoi(m_pData->m_String) : 0;
diff --git a/core/fxcrt/widestring.h b/core/fxcrt/widestring.h
index 9a2e231..26a4eb0 100644
--- a/core/fxcrt/widestring.h
+++ b/core/fxcrt/widestring.h
@@ -119,8 +119,8 @@
 
   // Trim a canonical set of characters from the widestring.
   void TrimWhitespace();
-  void TrimWhitespaceLeft();
-  void TrimWhitespaceRight();
+  void TrimWhitespaceFront();
+  void TrimWhitespaceBack();
 
   int GetInteger() const;
 
diff --git a/core/fxcrt/widestring_unittest.cpp b/core/fxcrt/widestring_unittest.cpp
index 267f5e5..e913f1e 100644
--- a/core/fxcrt/widestring_unittest.cpp
+++ b/core/fxcrt/widestring_unittest.cpp
@@ -856,40 +856,40 @@
   EXPECT_EQ(L"BCCB", abc);
 }
 
-TEST(WideString, TrimLeft) {
+TEST(WideString, TrimFront) {
   WideString fred(L"  FRED  ");
-  fred.TrimWhitespaceLeft();
+  fred.TrimWhitespaceFront();
   EXPECT_EQ(L"FRED  ", fred);
-  fred.TrimLeft(L'E');
+  fred.TrimFront(L'E');
   EXPECT_EQ(L"FRED  ", fred);
-  fred.TrimLeft(L'F');
+  fred.TrimFront(L'F');
   EXPECT_EQ(L"RED  ", fred);
-  fred.TrimLeft(L"ERP");
+  fred.TrimFront(L"ERP");
   EXPECT_EQ(L"D  ", fred);
 
   WideString blank(L"   ");
-  blank.TrimLeft(L"ERP");
+  blank.TrimFront(L"ERP");
   EXPECT_EQ(L"   ", blank);
-  blank.TrimLeft(L'E');
+  blank.TrimFront(L'E');
   EXPECT_EQ(L"   ", blank);
-  blank.TrimWhitespaceLeft();
+  blank.TrimWhitespaceFront();
   EXPECT_EQ(L"", blank);
 
   WideString empty;
-  empty.TrimLeft(L"ERP");
+  empty.TrimFront(L"ERP");
   EXPECT_EQ(L"", empty);
-  empty.TrimLeft(L'E');
+  empty.TrimFront(L'E');
   EXPECT_EQ(L"", empty);
-  empty.TrimWhitespaceLeft();
+  empty.TrimWhitespaceFront();
   EXPECT_EQ(L"", empty);
 }
 
-TEST(WideString, TrimLeftCopies) {
+TEST(WideString, TrimFrontCopies) {
   {
     // With a single reference, no copy takes place.
     WideString fred(L"  FRED  ");
     const wchar_t* old_buffer = fred.c_str();
-    fred.TrimWhitespaceLeft();
+    fred.TrimWhitespaceFront();
     EXPECT_EQ(L"FRED  ", fred);
     EXPECT_EQ(old_buffer, fred.c_str());
   }
@@ -898,7 +898,7 @@
     WideString fred(L"  FRED  ");
     WideString other_fred = fred;
     const wchar_t* old_buffer = fred.c_str();
-    fred.TrimWhitespaceLeft();
+    fred.TrimWhitespaceFront();
     EXPECT_EQ(L"FRED  ", fred);
     EXPECT_EQ(L"  FRED  ", other_fred);
     EXPECT_NE(old_buffer, fred.c_str());
@@ -908,47 +908,47 @@
     WideString fred(L"FRED");
     WideString other_fred = fred;
     const wchar_t* old_buffer = fred.c_str();
-    fred.TrimWhitespaceLeft();
+    fred.TrimWhitespaceFront();
     EXPECT_EQ(L"FRED", fred);
     EXPECT_EQ(L"FRED", other_fred);
     EXPECT_EQ(old_buffer, fred.c_str());
   }
 }
 
-TEST(WideString, TrimRight) {
+TEST(WideString, TrimBack) {
   WideString fred(L"  FRED  ");
-  fred.TrimWhitespaceRight();
+  fred.TrimWhitespaceBack();
   EXPECT_EQ(L"  FRED", fred);
-  fred.TrimRight(L'E');
+  fred.TrimBack(L'E');
   EXPECT_EQ(L"  FRED", fred);
-  fred.TrimRight(L'D');
+  fred.TrimBack(L'D');
   EXPECT_EQ(L"  FRE", fred);
-  fred.TrimRight(L"ERP");
+  fred.TrimBack(L"ERP");
   EXPECT_EQ(L"  F", fred);
 
   WideString blank(L"   ");
-  blank.TrimRight(L"ERP");
+  blank.TrimBack(L"ERP");
   EXPECT_EQ(L"   ", blank);
-  blank.TrimRight(L'E');
+  blank.TrimBack(L'E');
   EXPECT_EQ(L"   ", blank);
-  blank.TrimWhitespaceRight();
+  blank.TrimWhitespaceBack();
   EXPECT_EQ(L"", blank);
 
   WideString empty;
-  empty.TrimRight(L"ERP");
+  empty.TrimBack(L"ERP");
   EXPECT_EQ(L"", empty);
-  empty.TrimRight(L'E');
+  empty.TrimBack(L'E');
   EXPECT_EQ(L"", empty);
-  empty.TrimWhitespaceRight();
+  empty.TrimWhitespaceBack();
   EXPECT_EQ(L"", empty);
 }
 
-TEST(WideString, TrimRightCopies) {
+TEST(WideString, TrimBackCopies) {
   {
     // With a single reference, no copy takes place.
     WideString fred(L"  FRED  ");
     const wchar_t* old_buffer = fred.c_str();
-    fred.TrimWhitespaceRight();
+    fred.TrimWhitespaceBack();
     EXPECT_EQ(L"  FRED", fred);
     EXPECT_EQ(old_buffer, fred.c_str());
   }
@@ -957,7 +957,7 @@
     WideString fred(L"  FRED  ");
     WideString other_fred = fred;
     const wchar_t* old_buffer = fred.c_str();
-    fred.TrimWhitespaceRight();
+    fred.TrimWhitespaceBack();
     EXPECT_EQ(L"  FRED", fred);
     EXPECT_EQ(L"  FRED  ", other_fred);
     EXPECT_NE(old_buffer, fred.c_str());
@@ -967,7 +967,7 @@
     WideString fred(L"FRED");
     WideString other_fred = fred;
     const wchar_t* old_buffer = fred.c_str();
-    fred.TrimWhitespaceRight();
+    fred.TrimWhitespaceBack();
     EXPECT_EQ(L"FRED", fred);
     EXPECT_EQ(L"FRED", other_fred);
     EXPECT_EQ(old_buffer, fred.c_str());
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
index f6c5cab..5c037a6 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
@@ -659,7 +659,7 @@
                                         WideString& csSubject,
                                         WideString& csMsg) {
   WideString srcURL = csURL;
-  srcURL.TrimWhitespaceLeft();
+  srcURL.TrimWhitespaceFront();
   if (srcURL.Left(7).CompareNoCase(L"mailto:") != 0)
     return false;
 
diff --git a/fxjs/cjs_field.cpp b/fxjs/cjs_field.cpp
index e1b87da..317f78d 100644
--- a/fxjs/cjs_field.cpp
+++ b/fxjs/cjs_field.cpp
@@ -144,7 +144,7 @@
   WideString suffixal = field_name.Last(reverse_it - field_name.rbegin());
   int control_index = FXSYS_wtoi(suffixal.c_str());
   if (control_index == 0) {
-    suffixal.TrimRight(L' ');
+    suffixal.TrimBack(L' ');
     if (suffixal != L"0") {
       return std::nullopt;
     }
diff --git a/fxjs/cjs_publicmethods.cpp b/fxjs/cjs_publicmethods.cpp
index 6576821..798ecb5 100644
--- a/fxjs/cjs_publicmethods.cpp
+++ b/fxjs/cjs_publicmethods.cpp
@@ -1316,8 +1316,8 @@
         case FormFieldType::kTextField:
         case FormFieldType::kComboBox: {
           WideString trimmed = pFormField->GetValue();
-          trimmed.TrimWhitespaceRight();
-          trimmed.TrimWhitespaceLeft();
+          trimmed.TrimWhitespaceBack();
+          trimmed.TrimWhitespaceFront();
           dTemp = StringToDouble(trimmed.AsStringView());
           break;
         }
@@ -1331,8 +1331,8 @@
               continue;
 
             WideString trimmed = pFormCtrl->GetExportValue();
-            trimmed.TrimWhitespaceRight();
-            trimmed.TrimWhitespaceLeft();
+            trimmed.TrimWhitespaceBack();
+            trimmed.TrimWhitespaceFront();
             dTemp = StringToFloat(trimmed.AsStringView());
             break;
           }
@@ -1340,8 +1340,8 @@
         case FormFieldType::kListBox:
           if (pFormField->CountSelectedItems() <= 1) {
             WideString trimmed = pFormField->GetValue();
-            trimmed.TrimWhitespaceRight();
-            trimmed.TrimWhitespaceLeft();
+            trimmed.TrimWhitespaceBack();
+            trimmed.TrimWhitespaceFront();
             dTemp = StringToFloat(trimmed.AsStringView());
           }
           break;
diff --git a/fxjs/xfa/cfxjse_formcalc_context.cpp b/fxjs/xfa/cfxjse_formcalc_context.cpp
index 39bd24a..ac10df1 100644
--- a/fxjs/xfa/cfxjse_formcalc_context.cpp
+++ b/fxjs/xfa/cfxjse_formcalc_context.cpp
@@ -2892,7 +2892,7 @@
 
   ByteString bsValue =
       fxv8::ReentrantToByteStringHelper(info.GetIsolate(), argOne);
-  bsValue.TrimWhitespaceLeft();
+  bsValue.TrimWhitespaceFront();
   info.GetReturnValue().Set(static_cast<int>(!bsValue.IsEmpty()));
 }
 
@@ -3617,7 +3617,7 @@
   }
 
   ByteString bsSource = ValueToUTF8String(info.GetIsolate(), argOne);
-  bsSource.TrimWhitespaceLeft();
+  bsSource.TrimWhitespaceFront();
   info.GetReturnValue().Set(
       fxv8::NewStringHelper(info.GetIsolate(), bsSource.AsStringView()));
 }
@@ -3836,7 +3836,7 @@
   }
 
   ByteString bsSource = ValueToUTF8String(info.GetIsolate(), argOne);
-  bsSource.TrimWhitespaceRight();
+  bsSource.TrimWhitespaceBack();
   info.GetReturnValue().Set(
       fxv8::NewStringHelper(info.GetIsolate(), bsSource.AsStringView()));
 }
diff --git a/xfa/fgas/crt/cfgas_stringformatter.cpp b/xfa/fgas/crt/cfgas_stringformatter.cpp
index a72b043..23b694e 100644
--- a/xfa/fgas/crt/cfgas_stringformatter.cpp
+++ b/xfa/fgas/crt/cfgas_stringformatter.cpp
@@ -1867,7 +1867,7 @@
 
   pdfium::span<const wchar_t> spNumFormat = wsNumFormat.span();
   WideString wsSrcNum = wsInputNum;
-  wsSrcNum.TrimLeft('0');
+  wsSrcNum.TrimFront('0');
   if (wsSrcNum.IsEmpty() || wsSrcNum[0] == '.')
     wsSrcNum.InsertAtFront('0');
 
@@ -1930,8 +1930,8 @@
     wsSrcNum = decimal.ToWideString();
   }
   if (bTrimTailZeros && scale > 0 && iTreading > 0) {
-    wsSrcNum.TrimRight(L"0");
-    wsSrcNum.TrimRight(L".");
+    wsSrcNum.TrimBack(L"0");
+    wsSrcNum.TrimBack(L".");
   }
 
   WideString wsGroupSymbol = pLocale->GetGroupingSymbol();
diff --git a/xfa/fxfa/cxfa_textlayout.cpp b/xfa/fxfa/cxfa_textlayout.cpp
index 44278d2..152418a 100644
--- a/xfa/fxfa/cxfa_textlayout.cpp
+++ b/xfa/fxfa/cxfa_textlayout.cpp
@@ -47,7 +47,7 @@
   if (iLen == 0)
     return;
 
-  size_t iTrimLeft = 0;
+  size_t iTrimFront = 0;
   {
     // Span's lifetime must end before ReleaseBuffer() below.
     pdfium::span<wchar_t> psz = pText->GetBuffer(iLen);
@@ -60,10 +60,10 @@
         continue;
 
       wPrev = wch;
-      psz[iTrimLeft++] = wch;
+      psz[iTrimFront++] = wch;
     }
   }
-  pText->ReleaseBuffer(iTrimLeft);
+  pText->ReleaseBuffer(iTrimFront);
 }
 
 }  // namespace
@@ -719,7 +719,7 @@
   }
 
   WideString wsText = pNode->JSObject()->GetContent(false);
-  wsText.TrimRight(L" ");
+  wsText.TrimBack(L" ");
   bool bRet = AppendChar(wsText, pLinePos, fSpaceAbove, bSavePieces);
   if (bRet && m_pLoader)
     m_pLoader->pNode = pNode;
@@ -823,7 +823,7 @@
 
       if (m_pLoader) {
         if (wsText.GetLength() > 0 && m_pLoader->bFilterSpace) {
-          wsText.TrimLeft(L" ");
+          wsText.TrimFront(L" ");
         }
         if (CFX_CSSDisplay::Block == eDisplay) {
           m_pLoader->bFilterSpace = true;
diff --git a/xfa/fxfa/layout/cxfa_contentlayoutprocessor.cpp b/xfa/fxfa/layout/cxfa_contentlayoutprocessor.cpp
index 3f1a8cf..fe2785d 100644
--- a/xfa/fxfa/layout/cxfa_contentlayoutprocessor.cpp
+++ b/xfa/fxfa/layout/cxfa_contentlayoutprocessor.cpp
@@ -1189,7 +1189,7 @@
       pLayoutNode->JSObject()->GetCData(XFA_Attribute::ColumnWidths);
   if (!wsColumnWidths.IsEmpty()) {
     for (auto& width : SeparateStringOnSpace(wsColumnWidths.span())) {
-      width.TrimLeft(L' ');
+      width.TrimFront(L' ');
       if (width.IsEmpty())
         continue;
 
diff --git a/xfa/fxfa/parser/cxfa_document_builder.cpp b/xfa/fxfa/parser/cxfa_document_builder.cpp
index d6333e9..5897f3b 100644
--- a/xfa/fxfa/parser/cxfa_document_builder.cpp
+++ b/xfa/fxfa/parser/cxfa_document_builder.cpp
@@ -147,7 +147,7 @@
 }
 
 bool IsStringAllWhitespace(WideString wsText) {
-  wsText.TrimRight(L"\x20\x9\xD\xA");
+  wsText.TrimBack(L"\x20\x9\xD\xA");
   return wsText.IsEmpty();
 }
 
diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp
index 33f08f8..77dd49e 100644
--- a/xfa/fxfa/parser/cxfa_node.cpp
+++ b/xfa/fxfa/parser/cxfa_node.cpp
@@ -4960,11 +4960,11 @@
     return WideString();
 
   WideString wsOutput = wsValue;
-  wsOutput.TrimLeft('0');
+  wsOutput.TrimFront('0');
 
   if (!wsOutput.IsEmpty() && wsOutput.Contains('.') && GetFracDigits() != -1) {
-    wsOutput.TrimRight(L"0");
-    wsOutput.TrimRight(L".");
+    wsOutput.TrimBack(L"0");
+    wsOutput.TrimBack(L".");
   }
   if (wsOutput.IsEmpty() || wsOutput[0] == '.')
     wsOutput.InsertAtFront('0');
