Move {Byte,Wide}String::Trim{,Left,Right}() into StringTemplate<>

Move the forms which take arguments, but leave the no-arg form in
the byte/wide string files to allow for potential differences in the
default characters to be stripped.

Rename the no-arg form to StripUsual*() to avoid having to use a
`using` statement to work around the C++ idiosyncrasies of name
hiding.

Change-Id: Ib5adba3b79e394e0ad7eaf0a528526bfc55aed3e
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/116677
Reviewed-by: Thomas Sepez <tsepez@google.com>
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxcrt/bytestring.cpp b/core/fxcrt/bytestring.cpp
index 716620f..c07218a 100644
--- a/core/fxcrt/bytestring.cpp
+++ b/core/fxcrt/bytestring.cpp
@@ -354,87 +354,18 @@
   return this_len < that_len ? -1 : 1;
 }
 
-void ByteString::Trim() {
-  TrimRight(kTrimChars);
+void ByteString::TrimWhitespace() {
+  TrimWhitespaceRight();
+  TrimWhitespaceLeft();
+}
+
+void ByteString::TrimWhitespaceLeft() {
   TrimLeft(kTrimChars);
 }
 
-void ByteString::Trim(char target) {
-  ByteStringView targets(target);
-  TrimRight(targets);
-  TrimLeft(targets);
-}
-
-void ByteString::Trim(ByteStringView targets) {
-  TrimRight(targets);
-  TrimLeft(targets);
-}
-
-void ByteString::TrimLeft() {
-  TrimLeft(kTrimChars);
-}
-
-void ByteString::TrimLeft(char target) {
-  TrimLeft(ByteStringView(target));
-}
-
-void ByteString::TrimLeft(ByteStringView targets) {
-  if (!m_pData || targets.IsEmpty())
-    return;
-
-  size_t len = GetLength();
-  if (len == 0)
-    return;
-
-  size_t pos = 0;
-  while (pos < len) {
-    size_t i = 0;
-    while (i < targets.GetLength() && targets[i] != m_pData->m_String[pos])
-      i++;
-    if (i == targets.GetLength())
-      break;
-    pos++;
-  }
-  if (pos) {
-    ReallocBeforeWrite(len);
-    size_t nDataLength = len - pos;
-    FXSYS_memmove(m_pData->m_String, m_pData->m_String + pos,
-                  (nDataLength + 1) * sizeof(char));
-    m_pData->m_nDataLength = nDataLength;
-  }
-}
-
-void ByteString::TrimRight() {
+void ByteString::TrimWhitespaceRight() {
   TrimRight(kTrimChars);
 }
-
-void ByteString::TrimRight(char target) {
-  TrimRight(ByteStringView(target));
-}
-
-void ByteString::TrimRight(ByteStringView targets) {
-  if (!m_pData || targets.IsEmpty())
-    return;
-
-  size_t pos = GetLength();
-  if (pos == 0)
-    return;
-
-  while (pos) {
-    size_t i = 0;
-    while (i < targets.GetLength() && targets[i] != m_pData->m_String[pos - 1])
-      i++;
-    if (i == targets.GetLength())
-      break;
-    pos--;
-  }
-  if (pos < m_pData->m_nDataLength) {
-    ReallocBeforeWrite(m_pData->m_nDataLength);
-    m_pData->m_String[pos] = 0;
-    m_pData->m_nDataLength = pos;
-  }
-}
-
 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 d6867be..027d1d0 100644
--- a/core/fxcrt/bytestring.h
+++ b/core/fxcrt/bytestring.h
@@ -108,17 +108,10 @@
   void MakeLower();
   void MakeUpper();
 
-  void Trim();
-  void Trim(char target);
-  void Trim(ByteStringView targets);
-
-  void TrimLeft();
-  void TrimLeft(char target);
-  void TrimLeft(ByteStringView targets);
-
-  void TrimRight();
-  void TrimRight(char target);
-  void TrimRight(ByteStringView targets);
+  // Remove a canonical set of characters from the string.
+  void TrimWhitespace();
+  void TrimWhitespaceRight();
+  void TrimWhitespaceLeft();
 
   uint32_t GetID() const { return AsStringView().GetID(); }
 
diff --git a/core/fxcrt/bytestring_unittest.cpp b/core/fxcrt/bytestring_unittest.cpp
index 7b086f0..b7bfd4e 100644
--- a/core/fxcrt/bytestring_unittest.cpp
+++ b/core/fxcrt/bytestring_unittest.cpp
@@ -833,7 +833,7 @@
 
 TEST(ByteString, Trim) {
   ByteString fred("  FRED  ");
-  fred.Trim();
+  fred.TrimWhitespace();
   EXPECT_EQ("FRED", fred);
   fred.Trim('E');
   EXPECT_EQ("FRED", fred);
@@ -847,7 +847,7 @@
   EXPECT_EQ("   ", blank);
   blank.Trim('E');
   EXPECT_EQ("   ", blank);
-  blank.Trim();
+  blank.TrimWhitespace();
   EXPECT_EQ("", blank);
 
   ByteString empty;
@@ -855,7 +855,7 @@
   EXPECT_EQ("", empty);
   empty.Trim('E');
   EXPECT_EQ("", empty);
-  empty.Trim();
+  empty.TrimWhitespace();
   EXPECT_EQ("", empty);
 
   ByteString abc("  ABCCBA  ");
@@ -867,7 +867,7 @@
 
 TEST(ByteString, TrimLeft) {
   ByteString fred("  FRED  ");
-  fred.TrimLeft();
+  fred.TrimWhitespaceLeft();
   EXPECT_EQ("FRED  ", fred);
   fred.TrimLeft('E');
   EXPECT_EQ("FRED  ", fred);
@@ -881,7 +881,7 @@
   EXPECT_EQ("   ", blank);
   blank.TrimLeft('E');
   EXPECT_EQ("   ", blank);
-  blank.TrimLeft();
+  blank.TrimWhitespaceLeft();
   EXPECT_EQ("", blank);
 
   ByteString empty;
@@ -889,7 +889,7 @@
   EXPECT_EQ("", empty);
   empty.TrimLeft('E');
   EXPECT_EQ("", empty);
-  empty.TrimLeft();
+  empty.TrimWhitespaceLeft();
   EXPECT_EQ("", empty);
 }
 
@@ -898,7 +898,7 @@
     // With a single reference, no copy takes place.
     ByteString fred("  FRED  ");
     const char* old_buffer = fred.c_str();
-    fred.TrimLeft();
+    fred.TrimWhitespaceLeft();
     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.TrimLeft();
+    fred.TrimWhitespaceLeft();
     EXPECT_EQ("FRED  ", fred);
     EXPECT_EQ("  FRED  ", other_fred);
     EXPECT_NE(old_buffer, fred.c_str());
@@ -917,7 +917,7 @@
     ByteString fred("FRED");
     ByteString other_fred = fred;
     const char* old_buffer = fred.c_str();
-    fred.TrimLeft();
+    fred.TrimWhitespaceLeft();
     EXPECT_EQ("FRED", fred);
     EXPECT_EQ("FRED", other_fred);
     EXPECT_EQ(old_buffer, fred.c_str());
@@ -926,7 +926,7 @@
 
 TEST(ByteString, TrimRight) {
   ByteString fred("  FRED  ");
-  fred.TrimRight();
+  fred.TrimWhitespaceRight();
   EXPECT_EQ("  FRED", fred);
   fred.TrimRight('E');
   EXPECT_EQ("  FRED", fred);
@@ -940,7 +940,7 @@
   EXPECT_EQ("   ", blank);
   blank.TrimRight('E');
   EXPECT_EQ("   ", blank);
-  blank.TrimRight();
+  blank.TrimWhitespaceRight();
   EXPECT_EQ("", blank);
 
   ByteString empty;
@@ -948,7 +948,7 @@
   EXPECT_EQ("", empty);
   empty.TrimRight('E');
   EXPECT_EQ("", empty);
-  empty.TrimRight();
+  empty.TrimWhitespaceRight();
   EXPECT_EQ("", empty);
 }
 
@@ -957,7 +957,7 @@
     // With a single reference, no copy takes place.
     ByteString fred("  FRED  ");
     const char* old_buffer = fred.c_str();
-    fred.TrimRight();
+    fred.TrimWhitespaceRight();
     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.TrimRight();
+    fred.TrimWhitespaceRight();
     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.TrimRight();
+    fred.TrimWhitespaceRight();
     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 7d22f46..5915315 100644
--- a/core/fxcrt/string_template.cpp
+++ b/core/fxcrt/string_template.cpp
@@ -227,6 +227,92 @@
 }
 
 template <typename T>
+void StringTemplate<T>::Trim(T ch) {
+  TrimLeft(ch);
+  TrimRight(ch);
+}
+
+template <typename T>
+void StringTemplate<T>::TrimLeft(T ch) {
+  TrimLeft(StringView(ch));
+}
+
+template <typename T>
+void StringTemplate<T>::TrimRight(T ch) {
+  TrimRight(StringView(ch));
+}
+
+template <typename T>
+void StringTemplate<T>::Trim(StringView targets) {
+  TrimLeft(targets);
+  TrimRight(targets);
+}
+
+template <typename T>
+void StringTemplate<T>::TrimLeft(StringView targets) {
+  if (!m_pData || targets.IsEmpty()) {
+    return;
+  }
+
+  size_t len = GetLength();
+  if (len == 0) {
+    return;
+  }
+
+  size_t pos = 0;
+  while (pos < len) {
+    size_t i = 0;
+    while (i < targets.GetLength() &&
+           targets.CharAt(i) != m_pData->m_String[pos]) {
+      i++;
+    }
+    if (i == targets.GetLength()) {
+      break;
+    }
+    pos++;
+  }
+  if (!pos) {
+    return;
+  }
+
+  ReallocBeforeWrite(len);
+  size_t nDataLength = len - pos;
+  // Move the terminating NUL as well.
+  fxcrt::spanmove(m_pData->capacity_span(),
+                  m_pData->capacity_span().subspan(pos, nDataLength + 1));
+  m_pData->m_nDataLength = nDataLength;
+}
+
+template <typename T>
+void StringTemplate<T>::TrimRight(StringView targets) {
+  if (!m_pData || targets.IsEmpty()) {
+    return;
+  }
+
+  size_t pos = GetLength();
+  if (pos == 0) {
+    return;
+  }
+
+  while (pos) {
+    size_t i = 0;
+    while (i < targets.GetLength() &&
+           targets.CharAt(i) != m_pData->m_String[pos - 1]) {
+      i++;
+    }
+    if (i == targets.GetLength()) {
+      break;
+    }
+    pos--;
+  }
+  if (pos < m_pData->m_nDataLength) {
+    ReallocBeforeWrite(m_pData->m_nDataLength);
+    m_pData->m_String[pos] = 0;
+    m_pData->m_nDataLength = pos;
+  }
+}
+
+template <typename T>
 void StringTemplate<T>::ReallocBeforeWrite(size_t nNewLength) {
   if (m_pData && m_pData->CanOperateInPlace(nNewLength)) {
     return;
diff --git a/core/fxcrt/string_template.h b/core/fxcrt/string_template.h
index 0e1af03..1923c87 100644
--- a/core/fxcrt/string_template.h
+++ b/core/fxcrt/string_template.h
@@ -134,6 +134,16 @@
 
   void Reserve(size_t len) { GetBuffer(len); }
 
+  // Remove character `ch` from  both/front/back of string.
+  void Trim(T ch);
+  void TrimLeft(T ch);
+  void TrimRight(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);
+
  protected:
   using StringData = StringDataTemplate<T>;
 
diff --git a/core/fxcrt/widestring.cpp b/core/fxcrt/widestring.cpp
index dfbae22..8af383b 100644
--- a/core/fxcrt/widestring.cpp
+++ b/core/fxcrt/widestring.cpp
@@ -772,84 +772,18 @@
   return (!str || str[0] == 0) ? 0 : -1;
 }
 
-void WideString::Trim() {
-  TrimRight(kWideTrimChars);
+void WideString::TrimWhitespace() {
+  TrimWhitespaceRight();
+  TrimWhitespaceLeft();
+}
+
+void WideString::TrimWhitespaceLeft() {
   TrimLeft(kWideTrimChars);
 }
 
-void WideString::Trim(wchar_t target) {
-  wchar_t str[2] = {target, 0};
-  TrimRight(str);
-  TrimLeft(str);
-}
-
-void WideString::Trim(WideStringView targets) {
-  TrimRight(targets);
-  TrimLeft(targets);
-}
-
-void WideString::TrimLeft() {
-  TrimLeft(kWideTrimChars);
-}
-
-void WideString::TrimLeft(wchar_t target) {
-  wchar_t str[2] = {target, 0};
-  TrimLeft(str);
-}
-
-void WideString::TrimLeft(WideStringView targets) {
-  if (!m_pData || targets.IsEmpty())
-    return;
-
-  size_t len = GetLength();
-  if (len == 0)
-    return;
-
-  size_t pos = 0;
-  while (pos < len) {
-    size_t i = 0;
-    while (i < targets.GetLength() &&
-           targets.CharAt(i) != m_pData->m_String[pos]) {
-      i++;
-    }
-    if (i == targets.GetLength())
-      break;
-    pos++;
-  }
-  if (!pos)
-    return;
-
-  ReallocBeforeWrite(len);
-  size_t nDataLength = len - pos;
-  memmove(m_pData->m_String, m_pData->m_String + pos,
-          (nDataLength + 1) * sizeof(wchar_t));
-  m_pData->m_nDataLength = nDataLength;
-}
-
-void WideString::TrimRight() {
+void WideString::TrimWhitespaceRight() {
   TrimRight(kWideTrimChars);
 }
-
-void WideString::TrimRight(wchar_t target) {
-  wchar_t str[2] = {target, 0};
-  TrimRight(str);
-}
-
-void WideString::TrimRight(WideStringView targets) {
-  if (IsEmpty() || targets.IsEmpty())
-    return;
-
-  size_t pos = GetLength();
-  while (pos && targets.Contains(m_pData->m_String[pos - 1]))
-    pos--;
-
-  if (pos < m_pData->m_nDataLength) {
-    ReallocBeforeWrite(m_pData->m_nDataLength);
-    m_pData->m_String[pos] = 0;
-    m_pData->m_nDataLength = pos;
-  }
-}
-
 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 22a821f..9a2e231 100644
--- a/core/fxcrt/widestring.h
+++ b/core/fxcrt/widestring.h
@@ -117,17 +117,10 @@
   void MakeLower();
   void MakeUpper();
 
-  void Trim();
-  void Trim(wchar_t target);
-  void Trim(WideStringView targets);
-
-  void TrimLeft();
-  void TrimLeft(wchar_t target);
-  void TrimLeft(WideStringView targets);
-
-  void TrimRight();
-  void TrimRight(wchar_t target);
-  void TrimRight(WideStringView targets);
+  // Trim a canonical set of characters from the widestring.
+  void TrimWhitespace();
+  void TrimWhitespaceLeft();
+  void TrimWhitespaceRight();
 
   int GetInteger() const;
 
diff --git a/core/fxcrt/widestring_unittest.cpp b/core/fxcrt/widestring_unittest.cpp
index f077516..8749eae 100644
--- a/core/fxcrt/widestring_unittest.cpp
+++ b/core/fxcrt/widestring_unittest.cpp
@@ -824,7 +824,7 @@
 
 TEST(WideString, Trim) {
   WideString fred(L"  FRED  ");
-  fred.Trim();
+  fred.TrimWhitespace();
   EXPECT_EQ(L"FRED", fred);
   fred.Trim(L'E');
   EXPECT_EQ(L"FRED", fred);
@@ -838,7 +838,7 @@
   EXPECT_EQ(L"   ", blank);
   blank.Trim(L'E');
   EXPECT_EQ(L"   ", blank);
-  blank.Trim();
+  blank.TrimWhitespace();
   EXPECT_EQ(L"", blank);
 
   WideString empty;
@@ -846,7 +846,7 @@
   EXPECT_EQ(L"", empty);
   empty.Trim(L'E');
   EXPECT_EQ(L"", empty);
-  empty.Trim();
+  empty.TrimWhitespace();
   EXPECT_EQ(L"", empty);
 
   WideString abc(L"  ABCCBA  ");
@@ -858,7 +858,7 @@
 
 TEST(WideString, TrimLeft) {
   WideString fred(L"  FRED  ");
-  fred.TrimLeft();
+  fred.TrimWhitespaceLeft();
   EXPECT_EQ(L"FRED  ", fred);
   fred.TrimLeft(L'E');
   EXPECT_EQ(L"FRED  ", fred);
@@ -872,7 +872,7 @@
   EXPECT_EQ(L"   ", blank);
   blank.TrimLeft(L'E');
   EXPECT_EQ(L"   ", blank);
-  blank.TrimLeft();
+  blank.TrimWhitespaceLeft();
   EXPECT_EQ(L"", blank);
 
   WideString empty;
@@ -880,7 +880,7 @@
   EXPECT_EQ(L"", empty);
   empty.TrimLeft(L'E');
   EXPECT_EQ(L"", empty);
-  empty.TrimLeft();
+  empty.TrimWhitespaceLeft();
   EXPECT_EQ(L"", empty);
 }
 
@@ -889,7 +889,7 @@
     // With a single reference, no copy takes place.
     WideString fred(L"  FRED  ");
     const wchar_t* old_buffer = fred.c_str();
-    fred.TrimLeft();
+    fred.TrimWhitespaceLeft();
     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.TrimLeft();
+    fred.TrimWhitespaceLeft();
     EXPECT_EQ(L"FRED  ", fred);
     EXPECT_EQ(L"  FRED  ", other_fred);
     EXPECT_NE(old_buffer, fred.c_str());
@@ -908,7 +908,7 @@
     WideString fred(L"FRED");
     WideString other_fred = fred;
     const wchar_t* old_buffer = fred.c_str();
-    fred.TrimLeft();
+    fred.TrimWhitespaceLeft();
     EXPECT_EQ(L"FRED", fred);
     EXPECT_EQ(L"FRED", other_fred);
     EXPECT_EQ(old_buffer, fred.c_str());
@@ -917,7 +917,7 @@
 
 TEST(WideString, TrimRight) {
   WideString fred(L"  FRED  ");
-  fred.TrimRight();
+  fred.TrimWhitespaceRight();
   EXPECT_EQ(L"  FRED", fred);
   fred.TrimRight(L'E');
   EXPECT_EQ(L"  FRED", fred);
@@ -931,7 +931,7 @@
   EXPECT_EQ(L"   ", blank);
   blank.TrimRight(L'E');
   EXPECT_EQ(L"   ", blank);
-  blank.TrimRight();
+  blank.TrimWhitespaceRight();
   EXPECT_EQ(L"", blank);
 
   WideString empty;
@@ -939,7 +939,7 @@
   EXPECT_EQ(L"", empty);
   empty.TrimRight(L'E');
   EXPECT_EQ(L"", empty);
-  empty.TrimRight();
+  empty.TrimWhitespaceRight();
   EXPECT_EQ(L"", empty);
 }
 
@@ -948,7 +948,7 @@
     // With a single reference, no copy takes place.
     WideString fred(L"  FRED  ");
     const wchar_t* old_buffer = fred.c_str();
-    fred.TrimRight();
+    fred.TrimWhitespaceRight();
     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.TrimRight();
+    fred.TrimWhitespaceRight();
     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.TrimRight();
+    fred.TrimWhitespaceRight();
     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 8800a0c..f6c5cab 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.TrimLeft();
+  srcURL.TrimWhitespaceLeft();
   if (srcURL.Left(7).CompareNoCase(L"mailto:") != 0)
     return false;
 
@@ -677,16 +677,16 @@
       tmp = srcURL.Left(pos.value());
       tmp = tmp.Right(tmp.GetLength() - 7);
     }
-    tmp.Trim();
+    tmp.TrimWhitespace();
     csToAddress = std::move(tmp);
   }
 
   srcURL = srcURL.Right(srcURL.GetLength() - (pos.value() + 1));
   while (!srcURL.IsEmpty()) {
-    srcURL.Trim();
+    srcURL.TrimWhitespace();
     pos = srcURL.Find(L'&');
     WideString tmp = (!pos.has_value()) ? srcURL : srcURL.Left(pos.value());
-    tmp.Trim();
+    tmp.TrimWhitespace();
     if (tmp.GetLength() >= 3 && tmp.Left(3).CompareNoCase(L"cc=") == 0) {
       tmp = tmp.Right(tmp.GetLength() - 3);
       if (!csCCAddress.IsEmpty())
@@ -920,7 +920,7 @@
   switch (submit->GetSubmitFormat()) {
     case XFA_AttributeValue::Xdp: {
       WideString csContent = submit->GetSubmitXDPContent();
-      csContent.Trim();
+      csContent.TrimWhitespace();
 
       WideString space = WideString::FromDefANSI(" ");
       csContent = space + csContent + space;
diff --git a/fxjs/cfx_globaldata.cpp b/fxjs/cfx_globaldata.cpp
index b07974e..99bb689 100644
--- a/fxjs/cfx_globaldata.cpp
+++ b/fxjs/cfx_globaldata.cpp
@@ -34,7 +34,7 @@
 
 // Returns true if non-empty, setting sPropName
 bool TrimPropName(ByteString* sPropName) {
-  sPropName->Trim();
+  sPropName->TrimWhitespace();
   return sPropName->GetLength() != 0;
 }
 
diff --git a/fxjs/cjs_document.cpp b/fxjs/cjs_document.cpp
index 93591b0..f5fab08 100644
--- a/fxjs/cjs_document.cpp
+++ b/fxjs/cjs_document.cpp
@@ -1246,7 +1246,7 @@
   }
 
   if (bStrip)
-    swRet.Trim();
+    swRet.TrimWhitespace();
   return CJS_Result::Success(pRuntime->NewString(swRet.AsStringView()));
 }
 
diff --git a/fxjs/cjs_publicmethods.cpp b/fxjs/cjs_publicmethods.cpp
index fb8c8af..6576821 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.TrimRight();
-          trimmed.TrimLeft();
+          trimmed.TrimWhitespaceRight();
+          trimmed.TrimWhitespaceLeft();
           dTemp = StringToDouble(trimmed.AsStringView());
           break;
         }
@@ -1331,8 +1331,8 @@
               continue;
 
             WideString trimmed = pFormCtrl->GetExportValue();
-            trimmed.TrimRight();
-            trimmed.TrimLeft();
+            trimmed.TrimWhitespaceRight();
+            trimmed.TrimWhitespaceLeft();
             dTemp = StringToFloat(trimmed.AsStringView());
             break;
           }
@@ -1340,8 +1340,8 @@
         case FormFieldType::kListBox:
           if (pFormField->CountSelectedItems() <= 1) {
             WideString trimmed = pFormField->GetValue();
-            trimmed.TrimRight();
-            trimmed.TrimLeft();
+            trimmed.TrimWhitespaceRight();
+            trimmed.TrimWhitespaceLeft();
             dTemp = StringToFloat(trimmed.AsStringView());
           }
           break;
diff --git a/fxjs/xfa/cfxjse_formcalc_context.cpp b/fxjs/xfa/cfxjse_formcalc_context.cpp
index 6dc2975..39bd24a 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.TrimLeft();
+  bsValue.TrimWhitespaceLeft();
   info.GetReturnValue().Set(static_cast<int>(!bsValue.IsEmpty()));
 }
 
@@ -3617,7 +3617,7 @@
   }
 
   ByteString bsSource = ValueToUTF8String(info.GetIsolate(), argOne);
-  bsSource.TrimLeft();
+  bsSource.TrimWhitespaceLeft();
   info.GetReturnValue().Set(
       fxv8::NewStringHelper(info.GetIsolate(), bsSource.AsStringView()));
 }
@@ -3836,7 +3836,7 @@
   }
 
   ByteString bsSource = ValueToUTF8String(info.GetIsolate(), argOne);
-  bsSource.TrimRight();
+  bsSource.TrimWhitespaceRight();
   info.GetReturnValue().Set(
       fxv8::NewStringHelper(info.GetIsolate(), bsSource.AsStringView()));
 }
diff --git a/fxjs/xfa/cfxjse_resolveprocessor.cpp b/fxjs/xfa/cfxjse_resolveprocessor.cpp
index fad97d3..0535845 100644
--- a/fxjs/xfa/cfxjse_resolveprocessor.cpp
+++ b/fxjs/xfa/cfxjse_resolveprocessor.cpp
@@ -573,8 +573,8 @@
   }
   wsName.ReleaseBuffer(nNameCount);
   wsCondition.ReleaseBuffer(nConditionCount);
-  wsName.Trim();
-  wsCondition.Trim();
+  wsName.TrimWhitespace();
+  wsCondition.TrimWhitespace();
   rnd.m_uHashName =
       static_cast<XFA_HashCode>(FX_HashCode_GetW(wsName.AsStringView()));
   return nStart;
@@ -650,7 +650,7 @@
   }
 
   size_t iFoundCount = pRnd->m_Result.objects.size();
-  wsCondition.Trim();
+  wsCondition.TrimWhitespace();
 
   const size_t nLen = wsCondition.GetLength();
   if (nLen == 0) {
diff --git a/fxjs/xfa/cjx_hostpseudomodel.cpp b/fxjs/xfa/cjx_hostpseudomodel.cpp
index 656e997..21843b7 100644
--- a/fxjs/xfa/cjx_hostpseudomodel.cpp
+++ b/fxjs/xfa/cjx_hostpseudomodel.cpp
@@ -42,7 +42,7 @@
     }
   }
   wsFilter.ReleaseBuffer(nCount);
-  wsFilter.Trim();
+  wsFilter.TrimWhitespace();
   return nStart;
 }
 
diff --git a/xfa/fxfa/layout/cxfa_viewlayoutprocessor.cpp b/xfa/fxfa/layout/cxfa_viewlayoutprocessor.cpp
index e3c30ed..f61924f 100644
--- a/xfa/fxfa/layout/cxfa_viewlayoutprocessor.cpp
+++ b/xfa/fxfa/layout/cxfa_viewlayoutprocessor.cpp
@@ -171,7 +171,7 @@
   if (pTargetAll->IsEmpty())
     return nullptr;
 
-  pTargetAll->Trim();
+  pTargetAll->TrimWhitespace();
   size_t iSplitIndex = 0;
   bool bTargetAllFind = true;
   while (true) {