Convert string class names

Automated using git grep & sed.
Replace StringC classes with StringView classes.
Remove the CFX_ prefix and put string classes in fxcrt namespace.
Change AsStringC() to AsStringView().
Rename tests from TEST(fxcrt, *String*Foo) to TEST(*String*,
Foo).
Couple of tests needed to have their names regularlized.

BUG=pdfium:894

Change-Id: I7ca038685c8d803795f3ed02545124f7a224c83d
Reviewed-on: https://pdfium-review.googlesource.com/14151
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Ryan Harrison <rharrison@chromium.org>
diff --git a/BUILD.gn b/BUILD.gn
index b4b93b5..8606748 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -803,13 +803,13 @@
 
 static_library("fxcrt") {
   sources = [
+    "core/fxcrt/bytestring.cpp",
+    "core/fxcrt/bytestring.h",
     "core/fxcrt/cfx_autorestorer.h",
     "core/fxcrt/cfx_binarybuf.cpp",
     "core/fxcrt/cfx_binarybuf.h",
     "core/fxcrt/cfx_bitstream.cpp",
     "core/fxcrt/cfx_bitstream.h",
-    "core/fxcrt/cfx_bytestring.cpp",
-    "core/fxcrt/cfx_bytestring.h",
     "core/fxcrt/cfx_datetime.cpp",
     "core/fxcrt/cfx_datetime.h",
     "core/fxcrt/cfx_fileaccess_posix.cpp",
@@ -823,15 +823,12 @@
     "core/fxcrt/cfx_observable.h",
     "core/fxcrt/cfx_retain_ptr.h",
     "core/fxcrt/cfx_shared_copy_on_write.h",
-    "core/fxcrt/cfx_string_c_template.h",
     "core/fxcrt/cfx_string_data_template.h",
     "core/fxcrt/cfx_string_pool_template.h",
     "core/fxcrt/cfx_unowned_ptr.h",
     "core/fxcrt/cfx_utf8decoder.cpp",
     "core/fxcrt/cfx_utf8decoder.h",
     "core/fxcrt/cfx_weak_ptr.h",
-    "core/fxcrt/cfx_widestring.cpp",
-    "core/fxcrt/cfx_widestring.h",
     "core/fxcrt/cfx_widetextbuf.cpp",
     "core/fxcrt/cfx_widetextbuf.h",
     "core/fxcrt/fx_bidi.cpp",
@@ -858,6 +855,9 @@
     "core/fxcrt/fx_unicode.h",
     "core/fxcrt/ifx_fileaccess.h",
     "core/fxcrt/ifx_pauseindicator.h",
+    "core/fxcrt/string_view_template.h",
+    "core/fxcrt/widestring.cpp",
+    "core/fxcrt/widestring.h",
     "core/fxcrt/xml/cxml_attritem.cpp",
     "core/fxcrt/xml/cxml_attritem.h",
     "core/fxcrt/xml/cxml_attrmap.cpp",
@@ -1917,7 +1917,7 @@
     "core/fxcodec/codec/fx_codec_rle_unittest.cpp",
     "core/fxcodec/jbig2/JBig2_BitStream_unittest.cpp",
     "core/fxcodec/jbig2/JBig2_Image_unittest.cpp",
-    "core/fxcrt/cfx_bytestring_unittest.cpp",
+    "core/fxcrt/bytestring_unittest.cpp",
     "core/fxcrt/cfx_maybe_owned_unittest.cpp",
     "core/fxcrt/cfx_observable_unittest.cpp",
     "core/fxcrt/cfx_retain_ptr_unittest.cpp",
@@ -1925,7 +1925,6 @@
     "core/fxcrt/cfx_string_pool_template_unittest.cpp",
     "core/fxcrt/cfx_unowned_ptr_unittest.cpp",
     "core/fxcrt/cfx_weak_ptr_unittest.cpp",
-    "core/fxcrt/cfx_widestring_unittest.cpp",
     "core/fxcrt/fx_bidi_unittest.cpp",
     "core/fxcrt/fx_coordinates_unittest.cpp",
     "core/fxcrt/fx_extension_unittest.cpp",
@@ -1933,6 +1932,7 @@
     "core/fxcrt/fx_random_unittest.cpp",
     "core/fxcrt/fx_string_unittest.cpp",
     "core/fxcrt/fx_system_unittest.cpp",
+    "core/fxcrt/widestring_unittest.cpp",
     "core/fxge/dib/cstretchengine_unittest.cpp",
     "fpdfsdk/fpdfdoc_unittest.cpp",
     "fpdfsdk/fpdfeditimg_unittest.cpp",
diff --git a/core/fpdfapi/cmaps/cmap_int.h b/core/fpdfapi/cmaps/cmap_int.h
index e84dc11..e661792 100644
--- a/core/fpdfapi/cmaps/cmap_int.h
+++ b/core/fpdfapi/cmaps/cmap_int.h
@@ -23,7 +23,7 @@
   int m_UseOffset;
 };
 
-void FPDFAPI_FindEmbeddedCMap(const CFX_ByteString& name,
+void FPDFAPI_FindEmbeddedCMap(const ByteString& name,
                               int charset,
                               int coding,
                               const FXCMAP_CMap*& pMap);
diff --git a/core/fpdfapi/cmaps/fpdf_cmaps.cpp b/core/fpdfapi/cmaps/fpdf_cmaps.cpp
index 80ebbde..01c8da9 100644
--- a/core/fpdfapi/cmaps/fpdf_cmaps.cpp
+++ b/core/fpdfapi/cmaps/fpdf_cmaps.cpp
@@ -53,7 +53,7 @@
 
 };  // extern "C"
 
-void FPDFAPI_FindEmbeddedCMap(const CFX_ByteString& bsName,
+void FPDFAPI_FindEmbeddedCMap(const ByteString& bsName,
                               int charset,
                               int coding,
                               const FXCMAP_CMap*& pMap) {
diff --git a/core/fpdfapi/edit/cpdf_creator.cpp b/core/fpdfapi/edit/cpdf_creator.cpp
index 38a21ba..c3143b5 100644
--- a/core/fpdfapi/edit/cpdf_creator.cpp
+++ b/core/fpdfapi/edit/cpdf_creator.cpp
@@ -33,7 +33,7 @@
   bool WriteBlock(const void* pBuf, size_t size) override;
   bool WriteByte(uint8_t byte) override;
   bool WriteDWord(uint32_t i) override;
-  bool WriteString(const CFX_ByteStringC& str) override;
+  bool WriteString(const ByteStringView& str) override;
 
   FX_FILESIZE CurrentOffset() const override { return offset_; }
 
@@ -105,7 +105,7 @@
   return WriteBlock(buf, static_cast<size_t>(FXSYS_strlen(buf)));
 }
 
-bool CFX_FileBufferArchive::WriteString(const CFX_ByteStringC& str) {
+bool CFX_FileBufferArchive::WriteString(const ByteStringView& str) {
   return WriteBlock(str.raw_str(), str.GetLength());
 }
 
@@ -220,7 +220,7 @@
       break;
 
     case CPDF_Object::STRING: {
-      CFX_ByteString str = pObj->GetString();
+      ByteString str = pObj->GetString();
       bool bHex = pObj->AsString()->IsHex();
       if (!m_pCryptoHandler || !bEncrypt) {
         if (!pObj->WriteTo(m_Archive.get()))
@@ -229,9 +229,9 @@
       }
       CPDF_Encryptor encryptor(m_pCryptoHandler.Get(), objnum,
                                (uint8_t*)str.c_str(), str.GetLength());
-      CFX_ByteString content = PDF_EncodeString(
-          CFX_ByteString(encryptor.GetData(), encryptor.GetSize()), bHex);
-      if (!m_Archive->WriteString(content.AsStringC()))
+      ByteString content = PDF_EncodeString(
+          ByteString(encryptor.GetData(), encryptor.GetSize()), bHex);
+      if (!m_Archive->WriteString(content.AsStringView()))
         return false;
       break;
     }
@@ -290,10 +290,10 @@
       bool bSignDict = p->IsSignatureDict();
       for (const auto& it : *p) {
         bool bSignValue = false;
-        const CFX_ByteString& key = it.first;
+        const ByteString& key = it.first;
         CPDF_Object* pValue = it.second.get();
         if (!m_Archive->WriteString("/") ||
-            !m_Archive->WriteString(PDF_NameEncode(key).AsStringC())) {
+            !m_Archive->WriteString(PDF_NameEncode(key).AsStringView())) {
           return false;
         }
 
@@ -521,11 +521,11 @@
     m_XrefStart = m_Archive->CurrentOffset();
     if (!IsIncremental() || !m_pParser->IsXRefStream()) {
       if (!IsIncremental() || m_pParser->GetLastXRefOffset() == 0) {
-        CFX_ByteString str;
+        ByteString str;
         str = pdfium::ContainsKey(m_ObjectOffsets, 1)
                   ? "xref\r\n"
                   : "xref\r\n0 1\r\n0000000000 65535 f\r\n";
-        if (!m_Archive->WriteString(str.AsStringC()))
+        if (!m_Archive->WriteString(str.AsStringView()))
           return -1;
 
         m_CurObjNum = 1;
@@ -542,7 +542,7 @@
     }
   }
   if (m_iStage == 81) {
-    CFX_ByteString str;
+    ByteString str;
     uint32_t i = m_CurObjNum;
     uint32_t j;
     while (i <= dwLastObjNum) {
@@ -575,7 +575,7 @@
     m_iStage = 90;
   }
   if (m_iStage == 82) {
-    CFX_ByteString str;
+    ByteString str;
     uint32_t iCount = pdfium::CollectionSize<uint32_t>(m_NewObjNumArray);
     uint32_t i = m_CurObjNum;
     while (i < iCount) {
@@ -627,7 +627,7 @@
   if (m_pParser) {
     CPDF_Dictionary* p = m_pParser->GetTrailer();
     for (const auto& it : *p) {
-      const CFX_ByteString& key = it.first;
+      const ByteString& key = it.first;
       CPDF_Object* pValue = it.second.get();
       if (key == "Encrypt" || key == "Size" || key == "Filter" ||
           key == "Index" || key == "Length" || key == "Prev" || key == "W" ||
@@ -635,7 +635,7 @@
         continue;
       }
       if (!m_Archive->WriteString(("/")) ||
-          !m_Archive->WriteString(PDF_NameEncode(key).AsStringC())) {
+          !m_Archive->WriteString(PDF_NameEncode(key).AsStringView())) {
         return -1;
       }
       if (!pValue->IsInline()) {
@@ -782,7 +782,7 @@
     } else {
       std::vector<uint8_t> buffer =
           GenerateFileID((uint32_t)(uintptr_t)this, m_dwLastObjNum);
-      CFX_ByteString bsBuffer(buffer.data(), buffer.size());
+      ByteString bsBuffer(buffer.data(), buffer.size());
       m_pIDArray->AddNew<CPDF_String>(bsBuffer, true);
     }
   }
@@ -795,7 +795,7 @@
     }
     std::vector<uint8_t> buffer =
         GenerateFileID((uint32_t)(uintptr_t)this, m_dwLastObjNum);
-    CFX_ByteString bsBuffer(buffer.data(), buffer.size());
+    ByteString bsBuffer(buffer.data(), buffer.size());
     m_pIDArray->AddNew<CPDF_String>(bsBuffer, true);
     return;
   }
@@ -803,7 +803,7 @@
   m_pIDArray->Add(m_pIDArray->GetObjectAt(0)->Clone());
   if (m_pEncryptDict && !pOldIDArray && m_pParser && !idArrayPreExisting) {
     if (m_pEncryptDict->GetStringFor("Filter") == "Standard") {
-      CFX_ByteString user_pass = m_pParser->GetPassword();
+      ByteString user_pass = m_pParser->GetPassword();
       uint32_t flag = PDF_ENCRYPT_CONTENT;
       CPDF_SecurityHandler handler;
       handler.OnCreate(m_pEncryptDict.Get(), m_pIDArray.get(),
diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
index 9153bf4..c0c6604 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator.cpp
@@ -121,9 +121,9 @@
                                        pStream->GetObjNum());
 }
 
-CFX_ByteString CPDF_PageContentGenerator::RealizeResource(
+ByteString CPDF_PageContentGenerator::RealizeResource(
     uint32_t dwResourceObjNum,
-    const CFX_ByteString& bsType) {
+    const ByteString& bsType) {
   ASSERT(dwResourceObjNum);
   if (!m_pObjHolder->m_pResources) {
     m_pObjHolder->m_pResources = m_pDocument->NewIndirect<CPDF_Dictionary>();
@@ -135,7 +135,7 @@
   if (!pResList)
     pResList = m_pObjHolder->m_pResources->SetNewFor<CPDF_Dictionary>(bsType);
 
-  CFX_ByteString name;
+  ByteString name;
   int idnum = 1;
   while (1) {
     name.Format("FX%c%d", bsType[0], idnum);
@@ -188,7 +188,7 @@
     pImage->ConvertStreamToIndirectObject();
 
   uint32_t dwObjNum = pStream->GetObjNum();
-  CFX_ByteString name = RealizeResource(dwObjNum, "XObject");
+  ByteString name = RealizeResource(dwObjNum, "XObject");
   if (bWasInline)
     pImageObj->SetImage(m_pDocument->GetPageData()->GetImage(dwObjNum));
 
@@ -295,7 +295,7 @@
     return;
   }
 
-  CFX_ByteString name;
+  ByteString name;
   auto it = m_pObjHolder->m_GraphicsMap.find(graphD);
   if (it != m_pObjHolder->m_GraphicsMap.end()) {
     name = it->second;
@@ -330,7 +330,7 @@
   defaultGraphics.strokeAlpha = 1.0f;
   defaultGraphics.blendType = FXDIB_BLEND_NORMAL;
   auto it = m_pObjHolder->m_GraphicsMap.find(defaultGraphics);
-  CFX_ByteString name;
+  ByteString name;
   if (it != m_pObjHolder->m_GraphicsMap.end()) {
     name = it->second;
   } else {
@@ -368,7 +368,7 @@
     return;
   fontD.baseFont = pFont->GetBaseFont();
   auto it = m_pObjHolder->m_FontsMap.find(fontD);
-  CFX_ByteString dictName;
+  ByteString dictName;
   if (it != m_pObjHolder->m_FontsMap.end()) {
     dictName = it->second;
   } else {
@@ -387,7 +387,7 @@
   }
   *buf << "/" << PDF_NameEncode(dictName) << " " << pTextObj->GetFontSize()
        << " Tf ";
-  CFX_ByteString text;
+  ByteString text;
   for (uint32_t charcode : pTextObj->m_CharCodes) {
     if (charcode != CPDF_Font::kInvalidCharCode)
       pFont->AppendChar(&text, charcode);
diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator.h b/core/fpdfapi/edit/cpdf_pagecontentgenerator.h
index 518d358..433ad33 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentgenerator.h
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator.h
@@ -37,8 +37,8 @@
   void ProcessGraphics(std::ostringstream* buf, CPDF_PageObject* pPageObj);
   void ProcessDefaultGraphics(std::ostringstream* buf);
   void ProcessText(std::ostringstream* buf, CPDF_TextObject* pTextObj);
-  CFX_ByteString RealizeResource(uint32_t dwResourceObjNum,
-                                 const CFX_ByteString& bsType);
+  ByteString RealizeResource(uint32_t dwResourceObjNum,
+                             const ByteString& bsType);
 
   CFX_UnownedPtr<CPDF_PageObjectHolder> const m_pObjHolder;
   CFX_UnownedPtr<CPDF_Document> const m_pDocument;
diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
index 1dd6d25..a0db869 100644
--- a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
+++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp
@@ -36,8 +36,8 @@
   }
 
   CPDF_Dictionary* TestGetResource(CPDF_PageContentGenerator* pGen,
-                                   const CFX_ByteString& type,
-                                   const CFX_ByteString& name) {
+                                   const ByteString& type,
+                                   const ByteString& name) {
     return pGen->m_pObjHolder->m_pResources->GetDictFor(type)->GetDictFor(name);
   }
 
@@ -58,7 +58,7 @@
   CPDF_PageContentGenerator generator(pTestPage.get());
   std::ostringstream buf;
   TestProcessPath(&generator, &buf, pPathObj.get());
-  EXPECT_EQ("q 1 0 0 1 0 0 cm 10 5 3 25 re B* Q\n", CFX_ByteString(buf));
+  EXPECT_EQ("q 1 0 0 1 0 0 cm 10 5 3 25 re B* Q\n", ByteString(buf));
 
   pPathObj = pdfium::MakeUnique<CPDF_PathObject>();
   pPathObj->m_Path.AppendPoint(CFX_PointF(0, 0), FXPT_TYPE::MoveTo, false);
@@ -71,7 +71,7 @@
   buf.str("");
 
   TestProcessPath(&generator, &buf, pPathObj.get());
-  EXPECT_EQ("q 1 0 0 1 0 0 cm 0 0 5.2 3.78 re n Q\n", CFX_ByteString(buf));
+  EXPECT_EQ("q 1 0 0 1 0 0 cm 0 0 5.2 3.78 re n Q\n", ByteString(buf));
 }
 
 TEST_F(CPDF_PageContentGeneratorTest, ProcessPath) {
@@ -105,7 +105,7 @@
   EXPECT_EQ(
       "q 1 0 0 1 0 0 cm 3.102 4.67 m 5.45 0.29 l 4.24 3.15 4.65 2.98 3.456 0.24"
       " c 10.6 11.15 l 11 12.5 l 11.46 12.67 11.84 12.96 12 13.64 c h f Q\n",
-      CFX_ByteString(buf));
+      ByteString(buf));
 }
 
 TEST_F(CPDF_PageContentGeneratorTest, ProcessGraphics) {
@@ -132,7 +132,7 @@
   CPDF_PageContentGenerator generator(pTestPage.get());
   std::ostringstream buf;
   TestProcessPath(&generator, &buf, pPathObj.get());
-  CFX_ByteString pathString(buf);
+  ByteString pathString(buf);
 
   // Color RGB values used are integers divided by 255.
   EXPECT_EQ("q 0.501961 0.701961 0.34902 rg 1 0.901961 0 RG /",
@@ -150,7 +150,7 @@
   pPathObj->m_GraphState.SetLineWidth(10.5f);
   buf.str("");
   TestProcessPath(&generator, &buf, pPathObj.get());
-  CFX_ByteString pathString2(buf);
+  ByteString pathString2(buf);
   EXPECT_EQ("q 0.501961 0.701961 0.34902 rg 1 0.901961 0 RG 10.5 w /",
             pathString2.Left(55));
   EXPECT_EQ(" gs 1 0 0 1 0 0 cm 1 2 m 3 4 l 5 6 l h B Q\n",
@@ -185,25 +185,25 @@
   pTextObj->SetText("Hello World");
   std::ostringstream buf;
   TestProcessText(&generator, &buf, pTextObj.get());
-  CFX_ByteString textString(buf);
+  ByteString textString(buf);
   auto firstResourceAt = textString.Find('/');
   ASSERT_TRUE(firstResourceAt.has_value());
   firstResourceAt = firstResourceAt.value() + 1;
   auto secondResourceAt = textString.ReverseFind('/');
   ASSERT_TRUE(secondResourceAt.has_value());
   secondResourceAt = secondResourceAt.value() + 1;
-  CFX_ByteString firstString = textString.Left(firstResourceAt.value());
-  CFX_ByteString midString =
+  ByteString firstString = textString.Left(firstResourceAt.value());
+  ByteString midString =
       textString.Mid(firstResourceAt.value(),
                      secondResourceAt.value() - firstResourceAt.value());
-  CFX_ByteString lastString =
+  ByteString lastString =
       textString.Right(textString.GetLength() - secondResourceAt.value());
   // q and Q must be outside the BT .. ET operations
-  CFX_ByteString compareString1 =
+  ByteString compareString1 =
       "q 0.501961 0.701961 0.34902 rg 1 0.901961 0 RG /";
   // Color RGB values used are integers divided by 255.
-  CFX_ByteString compareString2 = " gs BT 1 0 0 1 100 100 Tm /";
-  CFX_ByteString compareString3 = " 10 Tf <48656C6C6F20576F726C64> Tj ET Q\n";
+  ByteString compareString2 = " gs BT 1 0 0 1 100 100 Tm /";
+  ByteString compareString3 = " 10 Tf <48656C6C6F20576F726C64> Tj ET Q\n";
   EXPECT_LT(compareString1.GetLength() + compareString2.GetLength() +
                 compareString3.GetLength(),
             textString.GetLength());
@@ -257,17 +257,16 @@
     TestProcessText(&generator, &buf, pTextObj.get());
   }
 
-  CFX_ByteString textString(buf);
+  ByteString textString(buf);
   auto firstResourceAt = textString.Find('/');
   ASSERT_TRUE(firstResourceAt.has_value());
   firstResourceAt = firstResourceAt.value() + 1;
-  CFX_ByteString firstString = textString.Left(firstResourceAt.value());
-  CFX_ByteString lastString =
+  ByteString firstString = textString.Left(firstResourceAt.value());
+  ByteString lastString =
       textString.Right(textString.GetLength() - firstResourceAt.value());
   // q and Q must be outside the BT .. ET operations
-  CFX_ByteString compareString1 = "q BT 1 0 0 1 0 0 Tm /";
-  CFX_ByteString compareString2 =
-      " 15.5 Tf <4920616D20696E646972656374> Tj ET Q\n";
+  ByteString compareString1 = "q BT 1 0 0 1 0 0 Tm /";
+  ByteString compareString2 = " 15.5 Tf <4920616D20696E646972656374> Tj ET Q\n";
   EXPECT_LT(compareString1.GetLength() + compareString2.GetLength(),
             textString.GetLength());
   EXPECT_EQ(compareString1, textString.Left(compareString1.GetLength()));
@@ -305,7 +304,7 @@
   CPDF_PageContentGenerator generator(pTestForm.get());
   std::ostringstream buf;
   generator.ProcessPageObjects(&buf);
-  EXPECT_EQ("", CFX_ByteString(buf));
+  EXPECT_EQ("", ByteString(buf));
 }
 
 TEST_F(CPDF_PageContentGeneratorTest, ProcessFormWithPath) {
@@ -330,5 +329,5 @@
   CPDF_PageContentGenerator generator(pTestForm.get());
   std::ostringstream process_buf;
   generator.ProcessPageObjects(&process_buf);
-  EXPECT_EQ(content, CFX_ByteString(process_buf));
+  EXPECT_EQ(content, ByteString(process_buf));
 }
diff --git a/core/fpdfapi/font/cpdf_cidfont.cpp b/core/fpdfapi/font/cpdf_cidfont.cpp
index a67abd2..9b326f5 100644
--- a/core/fpdfapi/font/cpdf_cidfont.cpp
+++ b/core/fpdfapi/font/cpdf_cidfont.cpp
@@ -239,12 +239,12 @@
   return m_pCMap && m_pCMap->IsVertWriting();
 }
 
-CFX_WideString CPDF_CIDFont::UnicodeFromCharCode(uint32_t charcode) const {
-  CFX_WideString str = CPDF_Font::UnicodeFromCharCode(charcode);
+WideString CPDF_CIDFont::UnicodeFromCharCode(uint32_t charcode) const {
+  WideString str = CPDF_Font::UnicodeFromCharCode(charcode);
   if (!str.IsEmpty())
     return str;
   wchar_t ret = GetUnicodeFromCharCode(charcode);
-  return ret ? ret : CFX_WideString();
+  return ret ? ret : WideString();
 }
 
 wchar_t CPDF_CIDFont::GetUnicodeFromCharCode(uint32_t charcode) const {
@@ -356,12 +356,12 @@
   if (!pEncoding)
     return false;
 
-  CFX_ByteString subtype = pCIDFontDict->GetStringFor("Subtype");
+  ByteString subtype = pCIDFontDict->GetStringFor("Subtype");
   m_bType1 = (subtype == "CIDFontType0");
 
   CPDF_CMapManager& manager = GetFontGlobals()->m_CMapManager;
   if (pEncoding->IsName()) {
-    CFX_ByteString cmap = pEncoding->GetString();
+    ByteString cmap = pEncoding->GetString();
     bool bPromptCJK = m_pFontFile && m_bType1;
     m_pCMap = manager.GetPredefinedCMap(cmap, bPromptCJK);
     if (!m_pCMap)
@@ -380,7 +380,7 @@
     CPDF_Dictionary* pCIDInfo = pCIDFontDict->GetDictFor("CIDSystemInfo");
     if (pCIDInfo) {
       m_Charset = CPDF_CMapParser::CharsetFromOrdering(
-          pCIDInfo->GetStringFor("Ordering").AsStringC());
+          pCIDInfo->GetStringFor("Ordering").AsStringView());
     }
   }
   if (m_Charset != CIDSET_UNKNOWN) {
@@ -621,7 +621,7 @@
       if (m_Flags & FXFONT_SYMBOLIC)
         return cid;
 
-      CFX_WideString uni_str = UnicodeFromCharCode(charcode);
+      WideString uni_str = UnicodeFromCharCode(charcode);
       if (uni_str.IsEmpty())
         return cid;
 
@@ -633,7 +633,7 @@
       if (unicode == 0)
         unicode = GetUnicodeFromCharCode(charcode);
       if (unicode == 0) {
-        CFX_WideString unicode_str = UnicodeFromCharCode(charcode);
+        WideString unicode_str = UnicodeFromCharCode(charcode);
         if (!unicode_str.IsEmpty())
           unicode = unicode_str[0];
       }
@@ -651,8 +651,8 @@
         iBaseEncoding = PDFFONT_ENCODING_WINANSI;
       else if (bMacRoman)
         iBaseEncoding = PDFFONT_ENCODING_MACROMAN;
-      const char* name = GetAdobeCharName(
-          iBaseEncoding, std::vector<CFX_ByteString>(), charcode);
+      const char* name =
+          GetAdobeCharName(iBaseEncoding, std::vector<ByteString>(), charcode);
       if (!name)
         return charcode ? static_cast<int>(charcode) : -1;
 
@@ -729,7 +729,7 @@
     }
     if (FXFT_Get_Charmap_Encoding(FXFT_Get_Face_Charmap(m_Font.GetFace())) ==
         FXFT_ENCODING_UNICODE) {
-      CFX_WideString unicode_str = UnicodeFromCharCode(charcode);
+      WideString unicode_str = UnicodeFromCharCode(charcode);
       if (unicode_str.IsEmpty())
         return -1;
 
diff --git a/core/fpdfapi/font/cpdf_cidfont.h b/core/fpdfapi/font/cpdf_cidfont.h
index 07982a4..f4ddcfd 100644
--- a/core/fpdfapi/font/cpdf_cidfont.h
+++ b/core/fpdfapi/font/cpdf_cidfont.h
@@ -54,7 +54,7 @@
   bool IsVertWriting() const override;
   bool IsUnicodeCompatible() const override;
   bool Load() override;
-  CFX_WideString UnicodeFromCharCode(uint32_t charcode) const override;
+  WideString UnicodeFromCharCode(uint32_t charcode) const override;
   uint32_t CharCodeFromUnicode(wchar_t Unicode) const override;
 
   uint16_t CIDFromCharCode(uint32_t charcode) const;
diff --git a/core/fpdfapi/font/cpdf_cmap.cpp b/core/fpdfapi/font/cpdf_cmap.cpp
index 0d3745e..54f7b34 100644
--- a/core/fpdfapi/font/cpdf_cmap.cpp
+++ b/core/fpdfapi/font/cpdf_cmap.cpp
@@ -248,7 +248,7 @@
 CPDF_CMap::~CPDF_CMap() {}
 
 void CPDF_CMap::LoadPredefined(CPDF_CMapManager* pMgr,
-                               const CFX_ByteString& bsName,
+                               const ByteString& bsName,
                                bool bPromptCJK) {
   m_PredefinedCMap = bsName;
   if (m_PredefinedCMap == "Identity-H" || m_PredefinedCMap == "Identity-V") {
@@ -257,14 +257,14 @@
     m_bLoaded = true;
     return;
   }
-  CFX_ByteString cmapid = m_PredefinedCMap;
+  ByteString cmapid = m_PredefinedCMap;
   m_bVertical = cmapid.Last() == 'V';
   if (cmapid.GetLength() > 2) {
     cmapid = cmapid.Left(cmapid.GetLength() - 2);
   }
   const PredefinedCMap* map = nullptr;
   for (size_t i = 0; i < FX_ArraySize(g_PredefinedCMaps); ++i) {
-    if (cmapid == CFX_ByteStringC(g_PredefinedCMaps[i].m_pName)) {
+    if (cmapid == ByteStringView(g_PredefinedCMaps[i].m_pName)) {
       map = &g_PredefinedCMaps[i];
       break;
     }
@@ -295,7 +295,7 @@
   CPDF_CMapParser parser(this);
   CPDF_SimpleParser syntax(pData, size);
   while (1) {
-    CFX_ByteStringC word = syntax.GetWord();
+    ByteStringView word = syntax.GetWord();
     if (word.IsEmpty()) {
       break;
     }
diff --git a/core/fpdfapi/font/cpdf_cmap.h b/core/fpdfapi/font/cpdf_cmap.h
index f4d6ca9..3e23d03 100644
--- a/core/fpdfapi/font/cpdf_cmap.h
+++ b/core/fpdfapi/font/cpdf_cmap.h
@@ -51,7 +51,7 @@
   friend CFX_RetainPtr<T> pdfium::MakeRetain(Args&&... args);
 
   void LoadPredefined(CPDF_CMapManager* pMgr,
-                      const CFX_ByteString& name,
+                      const ByteString& name,
                       bool bPromptCJK);
   void LoadEmbedded(const uint8_t* pData, uint32_t dwSize);
 
@@ -70,7 +70,7 @@
   CPDF_CMap();
   ~CPDF_CMap() override;
 
-  CFX_ByteString m_PredefinedCMap;
+  ByteString m_PredefinedCMap;
   bool m_bLoaded;
   bool m_bVertical;
   CIDSet m_Charset;
diff --git a/core/fpdfapi/font/cpdf_cmapmanager.cpp b/core/fpdfapi/font/cpdf_cmapmanager.cpp
index 040af55..a449db6 100644
--- a/core/fpdfapi/font/cpdf_cmapmanager.cpp
+++ b/core/fpdfapi/font/cpdf_cmapmanager.cpp
@@ -17,7 +17,7 @@
 CPDF_CMapManager::~CPDF_CMapManager() {}
 
 CFX_RetainPtr<CPDF_CMap> CPDF_CMapManager::GetPredefinedCMap(
-    const CFX_ByteString& name,
+    const ByteString& name,
     bool bPromptCJK) {
   auto it = m_CMaps.find(name);
   if (it != m_CMaps.end())
@@ -31,7 +31,7 @@
 }
 
 CFX_RetainPtr<CPDF_CMap> CPDF_CMapManager::LoadPredefinedCMap(
-    const CFX_ByteString& name,
+    const ByteString& name,
     bool bPromptCJK) {
   const char* pname = name.c_str();
   if (*pname == '/')
diff --git a/core/fpdfapi/font/cpdf_cmapmanager.h b/core/fpdfapi/font/cpdf_cmapmanager.h
index 1bc1c6f..6a860e6 100644
--- a/core/fpdfapi/font/cpdf_cmapmanager.h
+++ b/core/fpdfapi/font/cpdf_cmapmanager.h
@@ -11,7 +11,7 @@
 #include <memory>
 
 #include "core/fpdfapi/font/cpdf_cidfont.h"
-#include "core/fxcrt/cfx_bytestring.h"
+#include "core/fxcrt/bytestring.h"
 #include "core/fxcrt/cfx_retain_ptr.h"
 
 class CPDF_CMapManager {
@@ -19,17 +19,17 @@
   CPDF_CMapManager();
   ~CPDF_CMapManager();
 
-  CFX_RetainPtr<CPDF_CMap> GetPredefinedCMap(const CFX_ByteString& name,
+  CFX_RetainPtr<CPDF_CMap> GetPredefinedCMap(const ByteString& name,
                                              bool bPromptCJK);
   CPDF_CID2UnicodeMap* GetCID2UnicodeMap(CIDSet charset, bool bPromptCJK);
 
  private:
-  CFX_RetainPtr<CPDF_CMap> LoadPredefinedCMap(const CFX_ByteString& name,
+  CFX_RetainPtr<CPDF_CMap> LoadPredefinedCMap(const ByteString& name,
                                               bool bPromptCJK);
   std::unique_ptr<CPDF_CID2UnicodeMap> LoadCID2UnicodeMap(CIDSet charset,
                                                           bool bPromptCJK);
 
-  std::map<CFX_ByteString, CFX_RetainPtr<CPDF_CMap>> m_CMaps;
+  std::map<ByteString, CFX_RetainPtr<CPDF_CMap>> m_CMaps;
   std::unique_ptr<CPDF_CID2UnicodeMap> m_CID2UnicodeMaps[6];
 };
 
diff --git a/core/fpdfapi/font/cpdf_cmapparser.cpp b/core/fpdfapi/font/cpdf_cmapparser.cpp
index 101ae5f..f7d4dc1 100644
--- a/core/fpdfapi/font/cpdf_cmapparser.cpp
+++ b/core/fpdfapi/font/cpdf_cmapparser.cpp
@@ -32,9 +32,9 @@
   return static_cast<CIDSet>(index);
 }
 
-CFX_ByteStringC CMap_GetString(const CFX_ByteStringC& word) {
+ByteStringView CMap_GetString(const ByteStringView& word) {
   if (word.GetLength() <= 2)
-    return CFX_ByteStringC();
+    return ByteStringView();
   return word.Right(word.GetLength() - 2);
 }
 
@@ -45,7 +45,7 @@
 
 CPDF_CMapParser::~CPDF_CMapParser() {}
 
-void CPDF_CMapParser::ParseWord(const CFX_ByteStringC& word) {
+void CPDF_CMapParser::ParseWord(const ByteStringView& word) {
   if (word.IsEmpty()) {
     return;
   }
@@ -126,7 +126,7 @@
       }
       if (m_CodeSeq % 2) {
         CPDF_CMap::CodeRange range;
-        if (CMap_GetCodeRange(range, m_LastWord.AsStringC(), word))
+        if (CMap_GetCodeRange(range, m_LastWord.AsStringView(), word))
           m_CodeRanges.push_back(range);
       }
       m_CodeSeq++;
@@ -136,7 +136,7 @@
 }
 
 // Static.
-uint32_t CPDF_CMapParser::CMap_GetCode(const CFX_ByteStringC& word) {
+uint32_t CPDF_CMapParser::CMap_GetCode(const ByteStringView& word) {
   if (word.IsEmpty())
     return 0;
   pdfium::base::CheckedNumeric<uint32_t> num = 0;
@@ -160,8 +160,8 @@
 
 // Static.
 bool CPDF_CMapParser::CMap_GetCodeRange(CPDF_CMap::CodeRange& range,
-                                        const CFX_ByteStringC& first,
-                                        const CFX_ByteStringC& second) {
+                                        const ByteStringView& first,
+                                        const ByteStringView& second) {
   if (first.GetLength() == 0 || first[0] != '<')
     return false;
 
@@ -193,7 +193,7 @@
 }
 
 // static
-CIDSet CPDF_CMapParser::CharsetFromOrdering(const CFX_ByteStringC& ordering) {
+CIDSet CPDF_CMapParser::CharsetFromOrdering(const ByteStringView& ordering) {
   for (size_t charset = 1; charset < FX_ArraySize(g_CharsetNames); ++charset) {
     if (ordering == g_CharsetNames[charset])
       return CIDSetFromSizeT(charset);
diff --git a/core/fpdfapi/font/cpdf_cmapparser.h b/core/fpdfapi/font/cpdf_cmapparser.h
index b0a0ced..b3c8326 100644
--- a/core/fpdfapi/font/cpdf_cmapparser.h
+++ b/core/fpdfapi/font/cpdf_cmapparser.h
@@ -20,7 +20,7 @@
   explicit CPDF_CMapParser(CPDF_CMap* pMap);
   ~CPDF_CMapParser();
 
-  void ParseWord(const CFX_ByteStringC& str);
+  void ParseWord(const ByteStringView& str);
   bool HasAdditionalMappings() const {
     return !m_AdditionalCharcodeToCIDMappings.empty();
   }
@@ -28,16 +28,16 @@
     return std::move(m_AdditionalCharcodeToCIDMappings);
   }
 
-  static CIDSet CharsetFromOrdering(const CFX_ByteStringC& ordering);
+  static CIDSet CharsetFromOrdering(const ByteStringView& ordering);
 
  private:
   friend class cpdf_cmapparser_CMap_GetCode_Test;
   friend class cpdf_cmapparser_CMap_GetCodeRange_Test;
 
-  static uint32_t CMap_GetCode(const CFX_ByteStringC& word);
+  static uint32_t CMap_GetCode(const ByteStringView& word);
   static bool CMap_GetCodeRange(CPDF_CMap::CodeRange& range,
-                                const CFX_ByteStringC& first,
-                                const CFX_ByteStringC& second);
+                                const ByteStringView& first,
+                                const ByteStringView& second);
 
   CFX_UnownedPtr<CPDF_CMap> const m_pCMap;
   int m_Status;
@@ -45,7 +45,7 @@
   uint32_t m_CodePoints[4];
   std::vector<CPDF_CMap::CodeRange> m_CodeRanges;
   std::vector<CPDF_CMap::CIDRange> m_AdditionalCharcodeToCIDMappings;
-  CFX_ByteString m_LastWord;
+  ByteString m_LastWord;
 };
 
 #endif  // CORE_FPDFAPI_FONT_CPDF_CMAPPARSER_H_
diff --git a/core/fpdfapi/font/cpdf_font.cpp b/core/fpdfapi/font/cpdf_font.cpp
index 0fd8b45..9aaaa27 100644
--- a/core/fpdfapi/font/cpdf_font.cpp
+++ b/core/fpdfapi/font/cpdf_font.cpp
@@ -37,7 +37,7 @@
                                         {0xB7, 0xC2, 0xCB, 0xCE, 0x00},
                                         {0xD0, 0xC2, 0xCB, 0xCE, 0x00}};
 
-void GetPredefinedEncoding(const CFX_ByteString& value, int* basemap) {
+void GetPredefinedEncoding(const ByteString& value, int* basemap) {
   if (value == "WinAnsiEncoding")
     *basemap = PDFFONT_ENCODING_WINANSI;
   else if (value == "MacRomanEncoding")
@@ -140,17 +140,17 @@
   return 1;
 }
 
-void CPDF_Font::AppendChar(CFX_ByteString* str, uint32_t charcode) const {
+void CPDF_Font::AppendChar(ByteString* str, uint32_t charcode) const {
   char buf[4];
   int len = AppendChar(buf, charcode);
-  *str += CFX_ByteStringC(buf, len);
+  *str += ByteStringView(buf, len);
 }
 
-CFX_WideString CPDF_Font::UnicodeFromCharCode(uint32_t charcode) const {
+WideString CPDF_Font::UnicodeFromCharCode(uint32_t charcode) const {
   if (!m_bToUnicodeLoaded)
     LoadUnicodeMap();
 
-  return m_pToUnicodeMap ? m_pToUnicodeMap->Lookup(charcode) : CFX_WideString();
+  return m_pToUnicodeMap ? m_pToUnicodeMap->Lookup(charcode) : WideString();
 }
 
 uint32_t CPDF_Font::CharCodeFromUnicode(wchar_t unicode) const {
@@ -297,8 +297,8 @@
 
 // static
 CPDF_Font* CPDF_Font::GetStockFont(CPDF_Document* pDoc,
-                                   const CFX_ByteStringC& name) {
-  CFX_ByteString fontname(name);
+                                   const ByteStringView& name) {
+  ByteString fontname(name);
   int font_id = PDF_GetStandardFontName(&fontname);
   if (font_id < 0)
     return nullptr;
@@ -319,12 +319,12 @@
 
 std::unique_ptr<CPDF_Font> CPDF_Font::Create(CPDF_Document* pDoc,
                                              CPDF_Dictionary* pFontDict) {
-  CFX_ByteString type = pFontDict->GetStringFor("Subtype");
+  ByteString type = pFontDict->GetStringFor("Subtype");
   std::unique_ptr<CPDF_Font> pFont;
   if (type == "TrueType") {
-    CFX_ByteString tag = pFontDict->GetStringFor("BaseFont").Left(4);
+    ByteString tag = pFontDict->GetStringFor("BaseFont").Left(4);
     for (size_t i = 0; i < FX_ArraySize(kChineseFontNames); ++i) {
-      if (tag == CFX_ByteString(kChineseFontNames[i], 4)) {
+      if (tag == ByteString(kChineseFontNames[i], 4)) {
         CPDF_Dictionary* pFontDesc = pFontDict->GetDictFor("FontDescriptor");
         if (!pFontDesc || !pFontDesc->KeyExist("FontFile2"))
           pFont = pdfium::MakeUnique<CPDF_CIDFont>();
@@ -358,7 +358,7 @@
 
 void CPDF_Font::LoadPDFEncoding(CPDF_Object* pEncoding,
                                 int& iBaseEncoding,
-                                std::vector<CFX_ByteString>* pCharNames,
+                                std::vector<ByteString>* pCharNames,
                                 bool bEmbedded,
                                 bool bTrueType) {
   if (!pEncoding) {
@@ -380,7 +380,7 @@
         iBaseEncoding = PDFFONT_ENCODING_ADOBE_SYMBOL;
       return;
     }
-    CFX_ByteString bsEncoding = pEncoding->GetString();
+    ByteString bsEncoding = pEncoding->GetString();
     if (bsEncoding.Compare("MacExpertEncoding") == 0) {
       bsEncoding = "WinAnsiEncoding";
     }
@@ -394,7 +394,7 @@
 
   if (iBaseEncoding != PDFFONT_ENCODING_ADOBE_SYMBOL &&
       iBaseEncoding != PDFFONT_ENCODING_ZAPFDINGBATS) {
-    CFX_ByteString bsEncoding = pDict->GetStringFor("BaseEncoding");
+    ByteString bsEncoding = pDict->GetStringFor("BaseEncoding");
     if (bsEncoding.Compare("MacExpertEncoding") == 0 && bTrueType) {
       bsEncoding = "WinAnsiEncoding";
     }
@@ -436,7 +436,7 @@
 
 const char* CPDF_Font::GetAdobeCharName(
     int iBaseEncoding,
-    const std::vector<CFX_ByteString>& charnames,
+    const std::vector<ByteString>& charnames,
     int charcode) {
   if (charcode < 0 || charcode >= 256) {
     NOTREACHED();
@@ -466,7 +466,7 @@
   if (!pdfium::IndexInBounds(m_FontFallbacks, fallbackFont))
     return -1;
 
-  CFX_WideString str = UnicodeFromCharCode(charcode);
+  WideString str = UnicodeFromCharCode(charcode);
   uint32_t unicode = !str.IsEmpty() ? str[0] : charcode;
   int glyph =
       FXFT_Get_Char_Index(m_FontFallbacks[fallbackFont]->GetFace(), unicode);
diff --git a/core/fpdfapi/font/cpdf_font.h b/core/fpdfapi/font/cpdf_font.h
index f705422..e92e2f2 100644
--- a/core/fpdfapi/font/cpdf_font.h
+++ b/core/fpdfapi/font/cpdf_font.h
@@ -32,7 +32,7 @@
   static std::unique_ptr<CPDF_Font> Create(CPDF_Document* pDoc,
                                            CPDF_Dictionary* pFontDict);
   static CPDF_Font* GetStockFont(CPDF_Document* pDoc,
-                                 const CFX_ByteStringC& fontname);
+                                 const ByteStringView& fontname);
   static const uint32_t kInvalidCharCode = static_cast<uint32_t>(-1);
 
   virtual ~CPDF_Font();
@@ -59,17 +59,17 @@
   virtual int AppendChar(char* buf, uint32_t charcode) const;
   virtual int GlyphFromCharCode(uint32_t charcode, bool* pVertGlyph) = 0;
   virtual int GlyphFromCharCodeExt(uint32_t charcode);
-  virtual CFX_WideString UnicodeFromCharCode(uint32_t charcode) const;
+  virtual WideString UnicodeFromCharCode(uint32_t charcode) const;
   virtual uint32_t CharCodeFromUnicode(wchar_t Unicode) const;
   virtual bool HasFontWidths() const;
 
-  const CFX_ByteString& GetBaseFont() const { return m_BaseFont; }
+  const ByteString& GetBaseFont() const { return m_BaseFont; }
   CFX_SubstFont* GetSubstFont() const { return m_Font.GetSubstFont(); }
   bool IsEmbedded() const { return IsType3Font() || m_pFontFile != nullptr; }
   CPDF_Dictionary* GetFontDict() const { return m_pFontDict; }
   bool IsStandardFont() const;
   FXFT_Face GetFace() const { return m_Font.GetFace(); }
-  void AppendChar(CFX_ByteString* str, uint32_t charcode) const;
+  void AppendChar(ByteString* str, uint32_t charcode) const;
 
   void GetFontBBox(FX_RECT& rect) const { rect = m_FontBBox; }
   int GetTypeAscent() const { return m_Ascent; }
@@ -97,20 +97,20 @@
   void LoadUnicodeMap() const;  // logically const only.
   void LoadPDFEncoding(CPDF_Object* pEncoding,
                        int& iBaseEncoding,
-                       std::vector<CFX_ByteString>* pCharNames,
+                       std::vector<ByteString>* pCharNames,
                        bool bEmbedded,
                        bool bTrueType);
   void LoadFontDescriptor(CPDF_Dictionary* pDict);
   void CheckFontMetrics();
 
   const char* GetAdobeCharName(int iBaseEncoding,
-                               const std::vector<CFX_ByteString>& charnames,
+                               const std::vector<ByteString>& charnames,
                                int charcode);
 
   CFX_UnownedPtr<CPDF_Document> m_pDocument;
   CFX_Font m_Font;
   std::vector<std::unique_ptr<CFX_Font>> m_FontFallbacks;
-  CFX_ByteString m_BaseFont;
+  ByteString m_BaseFont;
   CFX_RetainPtr<CPDF_StreamAcc> m_pFontFile;
   CPDF_Dictionary* m_pFontDict;
   mutable std::unique_ptr<CPDF_ToUnicodeMap> m_pToUnicodeMap;
diff --git a/core/fpdfapi/font/cpdf_fontencoding.cpp b/core/fpdfapi/font/cpdf_fontencoding.cpp
index 2cc6445..6290f20 100644
--- a/core/fpdfapi/font/cpdf_fontencoding.cpp
+++ b/core/fpdfapi/font/cpdf_fontencoding.cpp
@@ -1672,7 +1672,7 @@
 }
 
 std::unique_ptr<CPDF_Object> CPDF_FontEncoding::Realize(
-    CFX_WeakPtr<CFX_ByteStringPool> pPool) {
+    CFX_WeakPtr<ByteStringPool> pPool) {
   int predefined = 0;
   for (int cs = PDFFONT_ENCODING_WINANSI; cs < PDFFONT_ENCODING_ZAPFDINGBATS;
        cs++) {
@@ -1761,10 +1761,10 @@
   return (wchar_t)(FXFT_unicode_from_adobe_name(name) & 0x7FFFFFFF);
 }
 
-CFX_ByteString PDF_AdobeNameFromUnicode(wchar_t unicode) {
+ByteString PDF_AdobeNameFromUnicode(wchar_t unicode) {
   char glyph_name[64];
   FXFT_adobe_name_from_unicode(glyph_name, unicode);
-  return CFX_ByteString(glyph_name);
+  return ByteString(glyph_name);
 }
 
 const char* PDF_CharNameFromPredefinedCharSet(int encoding, uint8_t charcode) {
diff --git a/core/fpdfapi/font/cpdf_fontencoding.h b/core/fpdfapi/font/cpdf_fontencoding.h
index 7a94db9..075cc04 100644
--- a/core/fpdfapi/font/cpdf_fontencoding.h
+++ b/core/fpdfapi/font/cpdf_fontencoding.h
@@ -28,7 +28,7 @@
 wchar_t FT_UnicodeFromCharCode(int encoding, uint32_t charcode);
 
 wchar_t PDF_UnicodeFromAdobeName(const char* name);
-CFX_ByteString PDF_AdobeNameFromUnicode(wchar_t unicode);
+ByteString PDF_AdobeNameFromUnicode(wchar_t unicode);
 
 const uint16_t* PDF_UnicodesForPredefinedCharSet(int encoding);
 const char* PDF_CharNameFromPredefinedCharSet(int encoding, uint8_t charcode);
@@ -53,7 +53,7 @@
     m_Unicodes[charcode] = unicode;
   }
 
-  std::unique_ptr<CPDF_Object> Realize(CFX_WeakPtr<CFX_ByteStringPool> pPool);
+  std::unique_ptr<CPDF_Object> Realize(CFX_WeakPtr<ByteStringPool> pPool);
 
  public:
   wchar_t m_Unicodes[256];
diff --git a/core/fpdfapi/font/cpdf_simplefont.cpp b/core/fpdfapi/font/cpdf_simplefont.cpp
index 56a4b13..ccf514d 100644
--- a/core/fpdfapi/font/cpdf_simplefont.cpp
+++ b/core/fpdfapi/font/cpdf_simplefont.cpp
@@ -196,13 +196,13 @@
          m_BaseEncoding != PDFFONT_ENCODING_ZAPFDINGBATS;
 }
 
-CFX_WideString CPDF_SimpleFont::UnicodeFromCharCode(uint32_t charcode) const {
-  CFX_WideString unicode = CPDF_Font::UnicodeFromCharCode(charcode);
+WideString CPDF_SimpleFont::UnicodeFromCharCode(uint32_t charcode) const {
+  WideString unicode = CPDF_Font::UnicodeFromCharCode(charcode);
   if (!unicode.IsEmpty())
     return unicode;
   wchar_t ret = m_Encoding.UnicodeFromCharCode((uint8_t)charcode);
   if (ret == 0)
-    return CFX_WideString();
+    return WideString();
   return ret;
 }
 
diff --git a/core/fpdfapi/font/cpdf_simplefont.h b/core/fpdfapi/font/cpdf_simplefont.h
index 6a22f46..5291211 100644
--- a/core/fpdfapi/font/cpdf_simplefont.h
+++ b/core/fpdfapi/font/cpdf_simplefont.h
@@ -24,7 +24,7 @@
   FX_RECT GetCharBBox(uint32_t charcode) override;
   int GlyphFromCharCode(uint32_t charcode, bool* pVertGlyph) override;
   bool IsUnicodeCompatible() const override;
-  CFX_WideString UnicodeFromCharCode(uint32_t charcode) const override;
+  WideString UnicodeFromCharCode(uint32_t charcode) const override;
   uint32_t CharCodeFromUnicode(wchar_t Unicode) const override;
 
   CPDF_FontEncoding* GetEncoding() { return &m_Encoding; }
@@ -41,7 +41,7 @@
   CPDF_FontEncoding m_Encoding;
   uint16_t m_GlyphIndex[256];
   uint16_t m_ExtGID[256];
-  std::vector<CFX_ByteString> m_CharNames;
+  std::vector<ByteString> m_CharNames;
   int m_BaseEncoding;
   uint16_t m_CharWidth[256];
   FX_RECT m_CharBBox[256];
diff --git a/core/fpdfapi/font/cpdf_tounicodemap.cpp b/core/fpdfapi/font/cpdf_tounicodemap.cpp
index 9076f4a..354f506 100644
--- a/core/fpdfapi/font/cpdf_tounicodemap.cpp
+++ b/core/fpdfapi/font/cpdf_tounicodemap.cpp
@@ -14,7 +14,7 @@
 #include "core/fxcrt/fx_safe_types.h"
 #include "third_party/base/numerics/safe_conversions.h"
 
-CFX_WideString CPDF_ToUnicodeMap::Lookup(uint32_t charcode) const {
+WideString CPDF_ToUnicodeMap::Lookup(uint32_t charcode) const {
   auto it = m_Map.find(charcode);
   if (it != m_Map.end()) {
     uint32_t value = it->second;
@@ -25,22 +25,22 @@
     const wchar_t* buf = m_MultiCharBuf.GetBuffer();
     uint32_t buf_len = m_MultiCharBuf.GetLength();
     if (!buf || buf_len == 0) {
-      return CFX_WideString();
+      return WideString();
     }
     uint32_t index = value >> 16;
     if (index >= buf_len) {
-      return CFX_WideString();
+      return WideString();
     }
     uint32_t len = buf[index];
     if (index + len < index || index + len >= buf_len) {
-      return CFX_WideString();
+      return WideString();
     }
-    return CFX_WideString(buf + index + 1, len);
+    return WideString(buf + index + 1, len);
   }
   if (m_pBaseMap) {
     return m_pBaseMap->UnicodeFromCID((uint16_t)charcode);
   }
-  return CFX_WideString();
+  return WideString();
 }
 
 uint32_t CPDF_ToUnicodeMap::ReverseLookup(wchar_t unicode) const {
@@ -52,7 +52,7 @@
 }
 
 // Static.
-uint32_t CPDF_ToUnicodeMap::StringToCode(const CFX_ByteStringC& str) {
+uint32_t CPDF_ToUnicodeMap::StringToCode(const ByteStringView& str) {
   int len = str.GetLength();
   if (len == 0)
     return 0;
@@ -70,8 +70,8 @@
   return result;
 }
 
-static CFX_WideString StringDataAdd(CFX_WideString str) {
-  CFX_WideString ret;
+static WideString StringDataAdd(WideString str) {
+  WideString ret;
   int len = str.GetLength();
   wchar_t value = 1;
   for (int i = len - 1; i >= 0; --i) {
@@ -89,13 +89,12 @@
 }
 
 // Static.
-CFX_WideString CPDF_ToUnicodeMap::StringToWideString(
-    const CFX_ByteStringC& str) {
+WideString CPDF_ToUnicodeMap::StringToWideString(const ByteStringView& str) {
   int len = str.GetLength();
   if (len == 0)
-    return CFX_WideString();
+    return WideString();
 
-  CFX_WideString result;
+  WideString result;
   if (str[0] == '<') {
     int byte_pos = 0;
     wchar_t ch = 0;
@@ -129,7 +128,7 @@
   pAcc->LoadAllData(false);
   CPDF_SimpleParser parser(pAcc->GetData(), pAcc->GetSize());
   while (1) {
-    CFX_ByteStringC word = parser.GetWord();
+    ByteStringView word = parser.GetWord();
     if (word.IsEmpty()) {
       break;
     }
@@ -141,7 +140,7 @@
         }
         uint32_t srccode = StringToCode(word);
         word = parser.GetWord();
-        CFX_WideString destcode = StringToWideString(word);
+        WideString destcode = StringToWideString(word);
         int len = destcode.GetLength();
         if (len == 0) {
           continue;
@@ -156,23 +155,23 @@
       }
     } else if (word == "beginbfrange") {
       while (1) {
-        CFX_ByteString low, high;
+        ByteString low, high;
         low = parser.GetWord();
         if (low.IsEmpty() || low == "endbfrange") {
           break;
         }
         high = parser.GetWord();
-        uint32_t lowcode = StringToCode(low.AsStringC());
+        uint32_t lowcode = StringToCode(low.AsStringView());
         uint32_t highcode =
-            (lowcode & 0xffffff00) | (StringToCode(high.AsStringC()) & 0xff);
+            (lowcode & 0xffffff00) | (StringToCode(high.AsStringView()) & 0xff);
         if (highcode == (uint32_t)-1) {
           break;
         }
-        CFX_ByteString start(parser.GetWord());
+        ByteString start(parser.GetWord());
         if (start == "[") {
           for (uint32_t code = lowcode; code <= highcode; code++) {
-            CFX_ByteString dest(parser.GetWord());
-            CFX_WideString destcode = StringToWideString(dest.AsStringC());
+            ByteString dest(parser.GetWord());
+            WideString destcode = StringToWideString(dest.AsStringView());
             int len = destcode.GetLength();
             if (len == 0) {
               continue;
@@ -187,17 +186,17 @@
           }
           parser.GetWord();
         } else {
-          CFX_WideString destcode = StringToWideString(start.AsStringC());
+          WideString destcode = StringToWideString(start.AsStringView());
           int len = destcode.GetLength();
           uint32_t value = 0;
           if (len == 1) {
-            value = StringToCode(start.AsStringC());
+            value = StringToCode(start.AsStringView());
             for (uint32_t code = lowcode; code <= highcode; code++) {
               m_Map[code] = value++;
             }
           } else {
             for (uint32_t code = lowcode; code <= highcode; code++) {
-              CFX_WideString retcode;
+              WideString retcode;
               if (code == lowcode) {
                 retcode = destcode;
               } else {
diff --git a/core/fpdfapi/font/cpdf_tounicodemap.h b/core/fpdfapi/font/cpdf_tounicodemap.h
index 90a2638..4e11140 100644
--- a/core/fpdfapi/font/cpdf_tounicodemap.h
+++ b/core/fpdfapi/font/cpdf_tounicodemap.h
@@ -22,15 +22,15 @@
 
   void Load(CPDF_Stream* pStream);
 
-  CFX_WideString Lookup(uint32_t charcode) const;
+  WideString Lookup(uint32_t charcode) const;
   uint32_t ReverseLookup(wchar_t unicode) const;
 
  private:
   friend class cpdf_tounicodemap_StringToCode_Test;
   friend class cpdf_tounicodemap_StringToWideString_Test;
 
-  static uint32_t StringToCode(const CFX_ByteStringC& str);
-  static CFX_WideString StringToWideString(const CFX_ByteStringC& str);
+  static uint32_t StringToCode(const ByteStringView& str);
+  static WideString StringToWideString(const ByteStringView& str);
 
   uint32_t GetUnicode();
 
diff --git a/core/fpdfapi/font/cpdf_tounicodemap_unittest.cpp b/core/fpdfapi/font/cpdf_tounicodemap_unittest.cpp
index 299f4d9..4a5dc25 100644
--- a/core/fpdfapi/font/cpdf_tounicodemap_unittest.cpp
+++ b/core/fpdfapi/font/cpdf_tounicodemap_unittest.cpp
@@ -21,7 +21,7 @@
 
   EXPECT_EQ(L"", CPDF_ToUnicodeMap::StringToWideString("<c2"));
 
-  CFX_WideString res = L"\xc2ab";
+  WideString res = L"\xc2ab";
   EXPECT_EQ(res, CPDF_ToUnicodeMap::StringToWideString("<c2ab"));
   EXPECT_EQ(res, CPDF_ToUnicodeMap::StringToWideString("<c2abab"));
   EXPECT_EQ(res, CPDF_ToUnicodeMap::StringToWideString("<c2ab 1234"));
diff --git a/core/fpdfapi/font/cpdf_truetypefont.cpp b/core/fpdfapi/font/cpdf_truetypefont.cpp
index 5fde646..a0542ec 100644
--- a/core/fpdfapi/font/cpdf_truetypefont.cpp
+++ b/core/fpdfapi/font/cpdf_truetypefont.cpp
@@ -137,7 +137,7 @@
       if (m_GlyphIndex[charcode] != 0 || !bToUnicode)
         continue;
 
-      CFX_WideString wsUnicode = UnicodeFromCharCode(charcode);
+      WideString wsUnicode = UnicodeFromCharCode(charcode);
       if (!wsUnicode.IsEmpty()) {
         m_GlyphIndex[charcode] =
             FXFT_Get_Char_Index(m_Font.GetFace(), wsUnicode[0]);
diff --git a/core/fpdfapi/page/cpdf_allstates.cpp b/core/fpdfapi/page/cpdf_allstates.cpp
index cedc847..afc87a2 100644
--- a/core/fpdfapi/page/cpdf_allstates.cpp
+++ b/core/fpdfapi/page/cpdf_allstates.cpp
@@ -39,7 +39,7 @@
 void CPDF_AllStates::ProcessExtGS(CPDF_Dictionary* pGS,
                                   CPDF_StreamContentParser* pParser) {
   for (const auto& it : *pGS) {
-    const CFX_ByteString& key_str = it.first;
+    const ByteString& key_str = it.first;
     CPDF_Object* pElement = it.second.get();
     CPDF_Object* pObject = pElement ? pElement->GetDirect() : nullptr;
     if (!pObject)
diff --git a/core/fpdfapi/page/cpdf_colorspace.cpp b/core/fpdfapi/page/cpdf_colorspace.cpp
index aee7316..c37b5a4 100644
--- a/core/fpdfapi/page/cpdf_colorspace.cpp
+++ b/core/fpdfapi/page/cpdf_colorspace.cpp
@@ -198,7 +198,7 @@
   CFX_UnownedPtr<CPDF_CountedColorSpace> m_pCountedBaseCS;
   int m_nBaseComponents;
   int m_MaxIndex;
-  CFX_ByteString m_Table;
+  ByteString m_Table;
   float* m_pCompMinMax;
 };
 
@@ -364,8 +364,7 @@
 
 }  // namespace
 
-CPDF_ColorSpace* CPDF_ColorSpace::ColorspaceFromName(
-    const CFX_ByteString& name) {
+CPDF_ColorSpace* CPDF_ColorSpace::ColorspaceFromName(const ByteString& name) {
   if (name == "DeviceRGB" || name == "RGB")
     return CPDF_ColorSpace::GetStockCS(PDFCS_DEVICERGB);
   if (name == "DeviceGray" || name == "G")
@@ -422,7 +421,7 @@
   if (!pFamilyObj)
     return nullptr;
 
-  CFX_ByteString familyname = pFamilyObj->GetString();
+  ByteString familyname = pFamilyObj->GetString();
   if (pArray->GetCount() == 1)
     return std::unique_ptr<CPDF_ColorSpace>(ColorspaceFromName(familyname));
 
@@ -1029,7 +1028,7 @@
   } else if (CPDF_Stream* pStream = pTableObj->AsStream()) {
     auto pAcc = pdfium::MakeRetain<CPDF_StreamAcc>(pStream);
     pAcc->LoadAllData(false);
-    m_Table = CFX_ByteStringC(pAcc->GetData(), pAcc->GetSize());
+    m_Table = ByteStringView(pAcc->GetData(), pAcc->GetSize());
   }
   return true;
 }
@@ -1080,7 +1079,7 @@
 bool CPDF_SeparationCS::v_Load(CPDF_Document* pDoc,
                                CPDF_Array* pArray,
                                std::set<CPDF_Object*>* pVisited) {
-  CFX_ByteString name = pArray->GetStringAt(1);
+  ByteString name = pArray->GetStringAt(1);
   if (name == "None") {
     m_Type = None;
     return true;
diff --git a/core/fpdfapi/page/cpdf_colorspace.h b/core/fpdfapi/page/cpdf_colorspace.h
index 31dd326..d9f9a1d 100644
--- a/core/fpdfapi/page/cpdf_colorspace.h
+++ b/core/fpdfapi/page/cpdf_colorspace.h
@@ -42,7 +42,7 @@
 class CPDF_ColorSpace {
  public:
   static CPDF_ColorSpace* GetStockCS(int Family);
-  static CPDF_ColorSpace* ColorspaceFromName(const CFX_ByteString& name);
+  static CPDF_ColorSpace* ColorspaceFromName(const ByteString& name);
   static std::unique_ptr<CPDF_ColorSpace> Load(CPDF_Document* pDoc,
                                                CPDF_Object* pCSObj);
   static std::unique_ptr<CPDF_ColorSpace> Load(
diff --git a/core/fpdfapi/page/cpdf_contentmark.cpp b/core/fpdfapi/page/cpdf_contentmark.cpp
index 07f0bd9..7d411b2 100644
--- a/core/fpdfapi/page/cpdf_contentmark.cpp
+++ b/core/fpdfapi/page/cpdf_contentmark.cpp
@@ -36,7 +36,7 @@
   return pData ? pData->GetMCID() : -1;
 }
 
-void CPDF_ContentMark::AddMark(const CFX_ByteString& name,
+void CPDF_ContentMark::AddMark(const ByteString& name,
                                CPDF_Dictionary* pDict,
                                bool bDirect) {
   m_Ref.GetPrivateCopy()->AddMark(name, pDict, bDirect);
@@ -48,7 +48,7 @@
     m_Ref.SetNull();
 }
 
-bool CPDF_ContentMark::HasMark(const CFX_ByteStringC& mark) const {
+bool CPDF_ContentMark::HasMark(const ByteStringView& mark) const {
   const MarkData* pData = m_Ref.GetObject();
   if (!pData)
     return false;
@@ -60,7 +60,7 @@
   return false;
 }
 
-bool CPDF_ContentMark::LookupMark(const CFX_ByteStringC& mark,
+bool CPDF_ContentMark::LookupMark(const ByteStringView& mark,
                                   CPDF_Dictionary*& pDict) const {
   const MarkData* pData = m_Ref.GetObject();
   if (!pData)
@@ -105,7 +105,7 @@
   return -1;
 }
 
-void CPDF_ContentMark::MarkData::AddMark(const CFX_ByteString& name,
+void CPDF_ContentMark::MarkData::AddMark(const ByteString& name,
                                          CPDF_Dictionary* pDict,
                                          bool bDirect) {
   CPDF_ContentMarkItem item;
diff --git a/core/fpdfapi/page/cpdf_contentmark.h b/core/fpdfapi/page/cpdf_contentmark.h
index ab966c0..1b2fe79 100644
--- a/core/fpdfapi/page/cpdf_contentmark.h
+++ b/core/fpdfapi/page/cpdf_contentmark.h
@@ -27,11 +27,9 @@
   int CountItems() const;
   const CPDF_ContentMarkItem& GetItem(int i) const;
 
-  bool HasMark(const CFX_ByteStringC& mark) const;
-  bool LookupMark(const CFX_ByteStringC& mark, CPDF_Dictionary*& pDict) const;
-  void AddMark(const CFX_ByteString& name,
-               CPDF_Dictionary* pDict,
-               bool bDirect);
+  bool HasMark(const ByteStringView& mark) const;
+  bool LookupMark(const ByteStringView& mark, CPDF_Dictionary*& pDict) const;
+  void AddMark(const ByteString& name, CPDF_Dictionary* pDict, bool bDirect);
   void DeleteLastMark();
 
   bool HasRef() const { return !!m_Ref; }
@@ -48,7 +46,7 @@
     const CPDF_ContentMarkItem& GetItem(int index) const;
 
     int GetMCID() const;
-    void AddMark(const CFX_ByteString& name,
+    void AddMark(const ByteString& name,
                  CPDF_Dictionary* pDict,
                  bool bDictNeedClone);
     void DeleteLastMark();
diff --git a/core/fpdfapi/page/cpdf_contentmarkitem.h b/core/fpdfapi/page/cpdf_contentmarkitem.h
index afd2833..83c700f 100644
--- a/core/fpdfapi/page/cpdf_contentmarkitem.h
+++ b/core/fpdfapi/page/cpdf_contentmarkitem.h
@@ -26,17 +26,17 @@
 
   CPDF_ContentMarkItem& operator=(CPDF_ContentMarkItem&& other) = default;
 
-  CFX_ByteString GetName() const { return m_MarkName; }
+  ByteString GetName() const { return m_MarkName; }
   ParamType GetParamType() const { return m_ParamType; }
   CPDF_Dictionary* GetParam() const;
   bool HasMCID() const;
 
-  void SetName(const CFX_ByteString& name) { m_MarkName = name; }
+  void SetName(const ByteString& name) { m_MarkName = name; }
   void SetDirectDict(std::unique_ptr<CPDF_Dictionary> pDict);
   void SetPropertiesDict(CPDF_Dictionary* pDict);
 
  private:
-  CFX_ByteString m_MarkName;
+  ByteString m_MarkName;
   ParamType m_ParamType;
   CFX_UnownedPtr<CPDF_Dictionary> m_pPropertiesDict;
   std::unique_ptr<CPDF_Dictionary> m_pDirectDict;
diff --git a/core/fpdfapi/page/cpdf_docpagedata.cpp b/core/fpdfapi/page/cpdf_docpagedata.cpp
index 1af9d6e..08345da 100644
--- a/core/fpdfapi/page/cpdf_docpagedata.cpp
+++ b/core/fpdfapi/page/cpdf_docpagedata.cpp
@@ -144,7 +144,7 @@
   return pFontData->AddRef();
 }
 
-CPDF_Font* CPDF_DocPageData::GetStandardFont(const CFX_ByteString& fontName,
+CPDF_Font* CPDF_DocPageData::GetStandardFont(const ByteString& fontName,
                                              CPDF_FontEncoding* pEncoding) {
   if (fontName.IsEmpty())
     return nullptr;
@@ -228,7 +228,7 @@
   pdfium::ScopedSetInsertion<CPDF_Object*> insertion(pVisited, pCSObj);
 
   if (pCSObj->IsName()) {
-    CFX_ByteString name = pCSObj->GetString();
+    ByteString name = pCSObj->GetString();
     CPDF_ColorSpace* pCS = CPDF_ColorSpace::ColorspaceFromName(name);
     if (!pCS && pResources) {
       CPDF_Dictionary* pList = pResources->GetDictFor("ColorSpace");
@@ -422,7 +422,7 @@
   uint8_t digest[20];
   CRYPT_SHA1Generate(pAccessor->GetData(), pAccessor->GetSize(), digest);
 
-  CFX_ByteString bsDigest(digest, 20);
+  ByteString bsDigest(digest, 20);
   auto hash_it = m_HashProfileMap.find(bsDigest);
   if (hash_it != m_HashProfileMap.end()) {
     auto it_copied_stream = m_IccProfileMap.find(hash_it->second);
diff --git a/core/fpdfapi/page/cpdf_docpagedata.h b/core/fpdfapi/page/cpdf_docpagedata.h
index 40647bc..3f1d392 100644
--- a/core/fpdfapi/page/cpdf_docpagedata.h
+++ b/core/fpdfapi/page/cpdf_docpagedata.h
@@ -35,7 +35,7 @@
   bool IsForceClear() const { return m_bForceClear; }
 
   CPDF_Font* GetFont(CPDF_Dictionary* pFontDict);
-  CPDF_Font* GetStandardFont(const CFX_ByteString& fontName,
+  CPDF_Font* GetStandardFont(const ByteString& fontName,
                              CPDF_FontEncoding* pEncoding);
   void ReleaseFont(const CPDF_Dictionary* pFontDict);
 
@@ -70,7 +70,7 @@
 
   bool m_bForceClear;
   CFX_UnownedPtr<CPDF_Document> const m_pPDFDoc;
-  std::map<CFX_ByteString, CPDF_Stream*> m_HashProfileMap;
+  std::map<ByteString, CPDF_Stream*> m_HashProfileMap;
   std::map<const CPDF_Object*, CPDF_CountedColorSpace*> m_ColorSpaceMap;
   std::map<const CPDF_Stream*, CFX_RetainPtr<CPDF_StreamAcc>> m_FontFileMap;
   std::map<const CPDF_Dictionary*, CPDF_CountedFont*> m_FontMap;
diff --git a/core/fpdfapi/page/cpdf_generalstate.cpp b/core/fpdfapi/page/cpdf_generalstate.cpp
index 5407074..c5c259f 100644
--- a/core/fpdfapi/page/cpdf_generalstate.cpp
+++ b/core/fpdfapi/page/cpdf_generalstate.cpp
@@ -13,7 +13,7 @@
 
 namespace {
 
-int RI_StringToId(const CFX_ByteString& ri) {
+int RI_StringToId(const ByteString& ri) {
   uint32_t id = ri.GetID();
   if (id == FXBSTR_ID('A', 'b', 's', 'o'))
     return 1;
@@ -27,7 +27,7 @@
   return 0;
 }
 
-int GetBlendTypeInternal(const CFX_ByteString& mode) {
+int GetBlendTypeInternal(const ByteString& mode) {
   switch (mode.GetID()) {
     case FXBSTR_ID('N', 'o', 'r', 'm'):
     case FXBSTR_ID('C', 'o', 'm', 'p'):
@@ -75,45 +75,45 @@
 
 CPDF_GeneralState::~CPDF_GeneralState() {}
 
-void CPDF_GeneralState::SetRenderIntent(const CFX_ByteString& ri) {
+void CPDF_GeneralState::SetRenderIntent(const ByteString& ri) {
   m_Ref.GetPrivateCopy()->m_RenderIntent = RI_StringToId(ri);
 }
-CFX_ByteString CPDF_GeneralState::GetBlendMode() const {
+ByteString CPDF_GeneralState::GetBlendMode() const {
   switch (GetBlendType()) {
     case FXDIB_BLEND_NORMAL:
-      return CFX_ByteString("Normal");
+      return ByteString("Normal");
     case FXDIB_BLEND_MULTIPLY:
-      return CFX_ByteString("Multiply");
+      return ByteString("Multiply");
     case FXDIB_BLEND_SCREEN:
-      return CFX_ByteString("Screen");
+      return ByteString("Screen");
     case FXDIB_BLEND_OVERLAY:
-      return CFX_ByteString("Overlay");
+      return ByteString("Overlay");
     case FXDIB_BLEND_DARKEN:
-      return CFX_ByteString("Darken");
+      return ByteString("Darken");
     case FXDIB_BLEND_LIGHTEN:
-      return CFX_ByteString("Lighten");
+      return ByteString("Lighten");
     case FXDIB_BLEND_COLORDODGE:
-      return CFX_ByteString("ColorDodge");
+      return ByteString("ColorDodge");
     case FXDIB_BLEND_COLORBURN:
-      return CFX_ByteString("ColorBurn");
+      return ByteString("ColorBurn");
     case FXDIB_BLEND_HARDLIGHT:
-      return CFX_ByteString("HardLight");
+      return ByteString("HardLight");
     case FXDIB_BLEND_SOFTLIGHT:
-      return CFX_ByteString("SoftLight");
+      return ByteString("SoftLight");
     case FXDIB_BLEND_DIFFERENCE:
-      return CFX_ByteString("Difference");
+      return ByteString("Difference");
     case FXDIB_BLEND_EXCLUSION:
-      return CFX_ByteString("Exclusion");
+      return ByteString("Exclusion");
     case FXDIB_BLEND_HUE:
-      return CFX_ByteString("Hue");
+      return ByteString("Hue");
     case FXDIB_BLEND_SATURATION:
-      return CFX_ByteString("Saturation");
+      return ByteString("Saturation");
     case FXDIB_BLEND_COLOR:
-      return CFX_ByteString("Color");
+      return ByteString("Color");
     case FXDIB_BLEND_LUMINOSITY:
-      return CFX_ByteString("Luminosity");
+      return ByteString("Luminosity");
   }
-  return CFX_ByteString("Normal");
+  return ByteString("Normal");
 }
 
 int CPDF_GeneralState::GetBlendType() const {
@@ -171,7 +171,7 @@
   m_Ref.GetPrivateCopy()->m_pTransferFunc = pFunc;
 }
 
-void CPDF_GeneralState::SetBlendMode(const CFX_ByteString& mode) {
+void CPDF_GeneralState::SetBlendMode(const ByteString& mode) {
   StateData* pData = m_Ref.GetPrivateCopy();
   pData->m_BlendMode = mode;
   pData->m_BlendType = GetBlendTypeInternal(mode);
diff --git a/core/fpdfapi/page/cpdf_generalstate.h b/core/fpdfapi/page/cpdf_generalstate.h
index b5b48a9..95f5978 100644
--- a/core/fpdfapi/page/cpdf_generalstate.h
+++ b/core/fpdfapi/page/cpdf_generalstate.h
@@ -25,9 +25,9 @@
   void Emplace() { m_Ref.Emplace(); }
   bool HasRef() const { return !!m_Ref; }
 
-  void SetRenderIntent(const CFX_ByteString& ri);
+  void SetRenderIntent(const ByteString& ri);
 
-  CFX_ByteString GetBlendMode() const;
+  ByteString GetBlendMode() const;
   int GetBlendType() const;
   void SetBlendType(int type);
 
@@ -46,7 +46,7 @@
   CFX_RetainPtr<CPDF_TransferFunc> GetTransferFunc() const;
   void SetTransferFunc(const CFX_RetainPtr<CPDF_TransferFunc>& pFunc);
 
-  void SetBlendMode(const CFX_ByteString& mode);
+  void SetBlendMode(const ByteString& mode);
 
   const CFX_Matrix* GetSMaskMatrix() const;
   void SetSMaskMatrix(const CFX_Matrix& matrix);
@@ -83,7 +83,7 @@
     StateData(const StateData& that);
     ~StateData();
 
-    CFX_ByteString m_BlendMode;
+    ByteString m_BlendMode;
     int m_BlendType;
     CFX_UnownedPtr<CPDF_Object> m_pSoftMask;
     CFX_Matrix m_SMaskMatrix;
diff --git a/core/fpdfapi/page/cpdf_image.cpp b/core/fpdfapi/page/cpdf_image.cpp
index a551bd1..6e8c0e1 100644
--- a/core/fpdfapi/page/cpdf_image.cpp
+++ b/core/fpdfapi/page/cpdf_image.cpp
@@ -201,7 +201,7 @@
       pCS->AddNew<CPDF_Name>("Indexed");
       pCS->AddNew<CPDF_Name>("DeviceRGB");
       pCS->AddNew<CPDF_Number>(1);
-      CFX_ByteString ct;
+      ByteString ct;
       char* pBuf = ct.GetBuffer(6);
       pBuf[0] = (char)reset_r;
       pBuf[1] = (char)reset_g;
diff --git a/core/fpdfapi/page/cpdf_page.cpp b/core/fpdfapi/page/cpdf_page.cpp
index 6213e5f..148b30a 100644
--- a/core/fpdfapi/page/cpdf_page.cpp
+++ b/core/fpdfapi/page/cpdf_page.cpp
@@ -97,7 +97,7 @@
   m_pRenderContext = std::move(pContext);
 }
 
-CPDF_Object* CPDF_Page::GetPageAttr(const CFX_ByteString& name) const {
+CPDF_Object* CPDF_Page::GetPageAttr(const ByteString& name) const {
   CPDF_Dictionary* pPageDict = m_pFormDict.Get();
   std::set<CPDF_Dictionary*> visited;
   while (1) {
@@ -112,7 +112,7 @@
   return nullptr;
 }
 
-CFX_FloatRect CPDF_Page::GetBox(const CFX_ByteString& name) const {
+CFX_FloatRect CPDF_Page::GetBox(const ByteString& name) const {
   CFX_FloatRect box;
   CPDF_Array* pBox = ToArray(GetPageAttr(name));
   if (pBox) {
diff --git a/core/fpdfapi/page/cpdf_page.h b/core/fpdfapi/page/cpdf_page.h
index 47fba3c..e32a7f0 100644
--- a/core/fpdfapi/page/cpdf_page.h
+++ b/core/fpdfapi/page/cpdf_page.h
@@ -62,8 +62,8 @@
  private:
   void StartParse();
 
-  CPDF_Object* GetPageAttr(const CFX_ByteString& name) const;
-  CFX_FloatRect GetBox(const CFX_ByteString& name) const;
+  CPDF_Object* GetPageAttr(const ByteString& name) const;
+  CFX_FloatRect GetBox(const ByteString& name) const;
 
   float m_PageWidth;
   float m_PageHeight;
diff --git a/core/fpdfapi/page/cpdf_pageobjectholder.h b/core/fpdfapi/page/cpdf_pageobjectholder.h
index 9ac1a3b..c223d4b 100644
--- a/core/fpdfapi/page/cpdf_pageobjectholder.h
+++ b/core/fpdfapi/page/cpdf_pageobjectholder.h
@@ -37,8 +37,8 @@
 };
 
 struct FontData {
-  CFX_ByteString baseFont;
-  CFX_ByteString type;
+  ByteString baseFont;
+  ByteString type;
   bool operator<(const FontData& other) const;
 };
 
@@ -76,8 +76,8 @@
   CFX_UnownedPtr<CPDF_Document> m_pDocument;
   CFX_UnownedPtr<CPDF_Dictionary> m_pPageResources;
   CFX_UnownedPtr<CPDF_Dictionary> m_pResources;
-  std::map<GraphicsData, CFX_ByteString> m_GraphicsMap;
-  std::map<FontData, CFX_ByteString> m_FontsMap;
+  std::map<GraphicsData, ByteString> m_GraphicsMap;
+  std::map<FontData, ByteString> m_FontsMap;
   CFX_FloatRect m_BBox;
   int m_Transparency;
 
diff --git a/core/fpdfapi/page/cpdf_psengine.cpp b/core/fpdfapi/page/cpdf_psengine.cpp
index 658d73c..63560fc 100644
--- a/core/fpdfapi/page/cpdf_psengine.cpp
+++ b/core/fpdfapi/page/cpdf_psengine.cpp
@@ -133,7 +133,7 @@
 
 bool CPDF_PSEngine::Parse(const char* str, int size) {
   CPDF_SimpleParser parser(reinterpret_cast<const uint8_t*>(str), size);
-  CFX_ByteStringC word = parser.GetWord();
+  ByteStringView word = parser.GetWord();
   return word == "{" ? m_MainProc.Parse(&parser, 0) : false;
 }
 
@@ -142,7 +142,7 @@
     return false;
 
   while (1) {
-    CFX_ByteStringC word = parser->GetWord();
+    ByteStringView word = parser->GetWord();
     if (word.IsEmpty())
       return false;
 
@@ -158,7 +158,7 @@
 
     std::unique_ptr<CPDF_PSOP> op;
     for (const PDF_PSOpName& op_name : kPsOpNames) {
-      if (word == CFX_ByteStringC(op_name.name)) {
+      if (word == ByteStringView(op_name.name)) {
         op = pdfium::MakeUnique<CPDF_PSOP>(op_name.op);
         break;
       }
diff --git a/core/fpdfapi/page/cpdf_streamcontentparser.cpp b/core/fpdfapi/page/cpdf_streamcontentparser.cpp
index 3755b29..c58e456 100644
--- a/core/fpdfapi/page/cpdf_streamcontentparser.cpp
+++ b/core/fpdfapi/page/cpdf_streamcontentparser.cpp
@@ -156,18 +156,17 @@
 
 struct AbbrReplacementOp {
   bool is_replace_key;
-  CFX_ByteString key;
-  CFX_ByteStringC replacement;
+  ByteString key;
+  ByteStringView replacement;
 };
 
-CFX_ByteStringC FindFullName(const AbbrPair* table,
-                             size_t count,
-                             const CFX_ByteStringC& abbr) {
+ByteStringView FindFullName(const AbbrPair* table,
+                            size_t count,
+                            const ByteStringView& abbr) {
   auto* it = std::find_if(table, table + count, [abbr](const AbbrPair& pair) {
     return pair.abbr == abbr;
   });
-  return it != table + count ? CFX_ByteStringC(it->full_name)
-                             : CFX_ByteStringC();
+  return it != table + count ? ByteStringView(it->full_name) : ByteStringView();
 }
 
 void ReplaceAbbr(CPDF_Object* pObj) {
@@ -176,10 +175,10 @@
       CPDF_Dictionary* pDict = pObj->AsDictionary();
       std::vector<AbbrReplacementOp> replacements;
       for (const auto& it : *pDict) {
-        CFX_ByteString key = it.first;
+        ByteString key = it.first;
         CPDF_Object* value = it.second.get();
-        CFX_ByteStringC fullname = FindFullName(
-            InlineKeyAbbr, FX_ArraySize(InlineKeyAbbr), key.AsStringC());
+        ByteStringView fullname = FindFullName(
+            InlineKeyAbbr, FX_ArraySize(InlineKeyAbbr), key.AsStringView());
         if (!fullname.IsEmpty()) {
           AbbrReplacementOp op;
           op.is_replace_key = true;
@@ -190,9 +189,10 @@
         }
 
         if (value->IsName()) {
-          CFX_ByteString name = value->GetString();
-          fullname = FindFullName(
-              InlineValueAbbr, FX_ArraySize(InlineValueAbbr), name.AsStringC());
+          ByteString name = value->GetString();
+          fullname =
+              FindFullName(InlineValueAbbr, FX_ArraySize(InlineValueAbbr),
+                           name.AsStringView());
           if (!fullname.IsEmpty()) {
             AbbrReplacementOp op;
             op.is_replace_key = false;
@@ -206,9 +206,9 @@
       }
       for (const auto& op : replacements) {
         if (op.is_replace_key)
-          pDict->ReplaceKey(op.key, CFX_ByteString(op.replacement));
+          pDict->ReplaceKey(op.key, ByteString(op.replacement));
         else
-          pDict->SetNewFor<CPDF_Name>(op.key, CFX_ByteString(op.replacement));
+          pDict->SetNewFor<CPDF_Name>(op.key, ByteString(op.replacement));
       }
       break;
     }
@@ -217,11 +217,12 @@
       for (size_t i = 0; i < pArray->GetCount(); i++) {
         CPDF_Object* pElement = pArray->GetObjectAt(i);
         if (pElement->IsName()) {
-          CFX_ByteString name = pElement->GetString();
-          CFX_ByteStringC fullname = FindFullName(
-              InlineValueAbbr, FX_ArraySize(InlineValueAbbr), name.AsStringC());
+          ByteString name = pElement->GetString();
+          ByteStringView fullname =
+              FindFullName(InlineValueAbbr, FX_ArraySize(InlineValueAbbr),
+                           name.AsStringView());
           if (!fullname.IsEmpty())
-            pArray->SetNewAt<CPDF_Name>(i, CFX_ByteString(fullname));
+            pArray->SetNewAt<CPDF_Name>(i, ByteString(fullname));
         } else {
           ReplaceAbbr(pElement);
         }
@@ -307,7 +308,7 @@
   return index;
 }
 
-void CPDF_StreamContentParser::AddNameParam(const CFX_ByteStringC& bsName) {
+void CPDF_StreamContentParser::AddNameParam(const ByteStringView& bsName) {
   ContentParam& param = m_ParamBuf[GetNextParamPos()];
   if (bsName.GetLength() > 32) {
     param.m_Type = ContentParam::OBJECT;
@@ -316,7 +317,7 @@
   } else {
     param.m_Type = ContentParam::NAME;
     if (bsName.Contains('#')) {
-      CFX_ByteString str = PDF_NameDecode(bsName);
+      ByteString str = PDF_NameDecode(bsName);
       memcpy(param.m_Name.m_Buffer, str.c_str(), str.GetLength());
       param.m_Name.m_Len = str.GetLength();
     } else {
@@ -326,7 +327,7 @@
   }
 }
 
-void CPDF_StreamContentParser::AddNumberParam(const CFX_ByteStringC& str) {
+void CPDF_StreamContentParser::AddNumberParam(const ByteStringView& str) {
   ContentParam& param = m_ParamBuf[GetNextParamPos()];
   param.m_Type = ContentParam::NUMBER;
   param.m_Number.m_bInteger = FX_atonum(str, &param.m_Number.m_Integer);
@@ -373,7 +374,7 @@
     param.m_Type = ContentParam::OBJECT;
     param.m_pObject = pdfium::MakeUnique<CPDF_Name>(
         m_pDocument->GetByteStringPool(),
-        CFX_ByteString(param.m_Name.m_Buffer, param.m_Name.m_Len));
+        ByteString(param.m_Name.m_Buffer, param.m_Name.m_Len));
     return param.m_pObject.get();
   }
   if (param.m_Type == ContentParam::OBJECT)
@@ -383,9 +384,9 @@
   return nullptr;
 }
 
-CFX_ByteString CPDF_StreamContentParser::GetString(uint32_t index) {
+ByteString CPDF_StreamContentParser::GetString(uint32_t index) {
   if (index >= m_ParamCount) {
-    return CFX_ByteString();
+    return ByteString();
   }
   int real_index = m_ParamStartPos + m_ParamCount - index - 1;
   if (real_index >= kParamBufSize) {
@@ -393,12 +394,12 @@
   }
   ContentParam& param = m_ParamBuf[real_index];
   if (param.m_Type == ContentParam::NAME) {
-    return CFX_ByteString(param.m_Name.m_Buffer, param.m_Name.m_Len);
+    return ByteString(param.m_Name.m_Buffer, param.m_Name.m_Len);
   }
   if (param.m_Type == 0 && param.m_pObject) {
     return param.m_pObject->GetString();
   }
-  return CFX_ByteString();
+  return ByteString();
 }
 
 float CPDF_StreamContentParser::GetNumber(uint32_t index) {
@@ -559,7 +560,7 @@
   });
 }
 
-void CPDF_StreamContentParser::OnOperator(const CFX_ByteStringC& op) {
+void CPDF_StreamContentParser::OnOperator(const ByteStringView& op) {
   static const OpCodes s_OpCodes = InitializeOpCodes();
 
   auto it = s_OpCodes.find(op.GetID());
@@ -586,7 +587,7 @@
 }
 
 void CPDF_StreamContentParser::Handle_BeginMarkedContent_Dictionary() {
-  CFX_ByteString tag = GetString(1);
+  ByteString tag = GetString(1);
   CPDF_Object* pProperty = GetObject(0);
   if (!pProperty) {
     return;
@@ -619,7 +620,7 @@
       break;
     }
     auto word = m_pSyntax->GetWord();
-    CFX_ByteString key(word.Right(word.GetLength() - 1));
+    ByteString key(word.Right(word.GetLength() - 1));
     auto pObj = m_pSyntax->ReadNextObject(false, false, 0);
     if (!key.IsEmpty()) {
       uint32_t dwObjNum = pObj ? pObj->GetObjNum() : 0;
@@ -634,7 +635,7 @@
   if (pDict->KeyExist("ColorSpace")) {
     pCSObj = pDict->GetDirectObjectFor("ColorSpace");
     if (pCSObj->IsName()) {
-      CFX_ByteString name = pCSObj->GetString();
+      ByteString name = pCSObj->GetString();
       if (name != "DeviceRGB" && name != "DeviceGray" && name != "DeviceCMYK") {
         pCSObj = FindResourceObj("ColorSpace", name);
         if (pCSObj && pCSObj->IsInline())
@@ -727,7 +728,7 @@
 }
 
 void CPDF_StreamContentParser::Handle_ExecuteXObject() {
-  CFX_ByteString name = GetString(0);
+  ByteString name = GetString(0);
   if (name == m_LastImageName && m_pLastImage && m_pLastImage->GetStream() &&
       m_pLastImage->GetStream()->GetObjNum()) {
     CPDF_ImageObject* pObj = AddImage(m_pLastImage);
@@ -744,7 +745,7 @@
     return;
   }
 
-  CFX_ByteString type;
+  ByteString type;
   if (pXObject->GetDict())
     type = pXObject->GetDict()->GetStringFor("Subtype");
 
@@ -875,7 +876,7 @@
 }
 
 void CPDF_StreamContentParser::Handle_SetExtendGraphState() {
-  CFX_ByteString name = GetString(0);
+  ByteString name = GetString(0);
   CPDF_Dictionary* pGS = ToDictionary(FindResourceObj("ExtGState", name));
   if (!pGS) {
     m_bResourceMissing = true;
@@ -1155,9 +1156,8 @@
   }
 }
 
-CPDF_Object* CPDF_StreamContentParser::FindResourceObj(
-    const CFX_ByteString& type,
-    const CFX_ByteString& name) {
+CPDF_Object* CPDF_StreamContentParser::FindResourceObj(const ByteString& type,
+                                                       const ByteString& name) {
   if (!m_pResources)
     return nullptr;
   CPDF_Dictionary* pDict = m_pResources->GetDictFor(type);
@@ -1170,7 +1170,7 @@
   return pPageDict ? pPageDict->GetDirectObjectFor(name) : nullptr;
 }
 
-CPDF_Font* CPDF_StreamContentParser::FindFont(const CFX_ByteString& name) {
+CPDF_Font* CPDF_StreamContentParser::FindFont(const ByteString& name) {
   CPDF_Dictionary* pFontDict = ToDictionary(FindResourceObj("Font", name));
   if (!pFontDict) {
     m_bResourceMissing = true;
@@ -1186,12 +1186,12 @@
 }
 
 CPDF_ColorSpace* CPDF_StreamContentParser::FindColorSpace(
-    const CFX_ByteString& name) {
+    const ByteString& name) {
   if (name == "Pattern") {
     return CPDF_ColorSpace::GetStockCS(PDFCS_PATTERN);
   }
   if (name == "DeviceGray" || name == "DeviceCMYK" || name == "DeviceRGB") {
-    CFX_ByteString defname = "Default";
+    ByteString defname = "Default";
     defname += name.Right(name.GetLength() - 7);
     CPDF_Object* pDefObj = FindResourceObj("ColorSpace", defname);
     if (!pDefObj) {
@@ -1213,7 +1213,7 @@
   return m_pDocument->LoadColorSpace(pCSObj);
 }
 
-CPDF_Pattern* CPDF_StreamContentParser::FindPattern(const CFX_ByteString& name,
+CPDF_Pattern* CPDF_StreamContentParser::FindPattern(const ByteString& name,
                                                     bool bShading) {
   CPDF_Object* pPattern =
       FindResourceObj(bShading ? "Shading" : "Pattern", name);
@@ -1225,7 +1225,7 @@
                                   m_pCurStates->m_ParentMatrix);
 }
 
-void CPDF_StreamContentParser::AddTextObject(CFX_ByteString* pStrs,
+void CPDF_StreamContentParser::AddTextObject(ByteString* pStrs,
                                              float fInitKerning,
                                              float* pKerning,
                                              int nsegs) {
@@ -1290,7 +1290,7 @@
 }
 
 void CPDF_StreamContentParser::Handle_ShowText() {
-  CFX_ByteString str = GetString(0);
+  ByteString str = GetString(0);
   if (str.IsEmpty()) {
     return;
   }
@@ -1317,14 +1317,14 @@
     }
     return;
   }
-  std::vector<CFX_ByteString> strs(nsegs);
+  std::vector<ByteString> strs(nsegs);
   std::vector<float> kernings(nsegs);
   size_t iSegment = 0;
   float fInitKerning = 0;
   for (size_t i = 0; i < n; i++) {
     CPDF_Object* pObj = pArray->GetDirectObjectAt(i);
     if (pObj->IsString()) {
-      CFX_ByteString str = pObj->GetString();
+      ByteString str = pObj->GetString();
       if (str.IsEmpty())
         continue;
       strs[iSegment] = str;
@@ -1556,7 +1556,7 @@
       case CPDF_StreamParser::EndOfData:
         return;
       case CPDF_StreamParser::Keyword: {
-        CFX_ByteStringC strc = m_pSyntax->GetWord();
+        ByteStringView strc = m_pSyntax->GetWord();
         int len = strc.GetLength();
         if (len == 1) {
           switch (strc[0]) {
@@ -1631,14 +1631,14 @@
 }
 
 // static
-CFX_ByteStringC CPDF_StreamContentParser::FindKeyAbbreviationForTesting(
-    const CFX_ByteStringC& abbr) {
+ByteStringView CPDF_StreamContentParser::FindKeyAbbreviationForTesting(
+    const ByteStringView& abbr) {
   return FindFullName(InlineKeyAbbr, FX_ArraySize(InlineKeyAbbr), abbr);
 }
 
 // static
-CFX_ByteStringC CPDF_StreamContentParser::FindValueAbbreviationForTesting(
-    const CFX_ByteStringC& abbr) {
+ByteStringView CPDF_StreamContentParser::FindValueAbbreviationForTesting(
+    const ByteStringView& abbr) {
   return FindFullName(InlineValueAbbr, FX_ArraySize(InlineValueAbbr), abbr);
 }
 
diff --git a/core/fpdfapi/page/cpdf_streamcontentparser.h b/core/fpdfapi/page/cpdf_streamcontentparser.h
index a027129..c30c6b7 100644
--- a/core/fpdfapi/page/cpdf_streamcontentparser.h
+++ b/core/fpdfapi/page/cpdf_streamcontentparser.h
@@ -50,12 +50,12 @@
   CPDF_AllStates* GetCurStates() const { return m_pCurStates.get(); }
   bool IsColored() const { return m_bColored; }
   const float* GetType3Data() const { return m_Type3Data; }
-  CPDF_Font* FindFont(const CFX_ByteString& name);
+  CPDF_Font* FindFont(const ByteString& name);
 
-  static CFX_ByteStringC FindKeyAbbreviationForTesting(
-      const CFX_ByteStringC& abbr);
-  static CFX_ByteStringC FindValueAbbreviationForTesting(
-      const CFX_ByteStringC& abbr);
+  static ByteStringView FindKeyAbbreviationForTesting(
+      const ByteStringView& abbr);
+  static ByteStringView FindValueAbbreviationForTesting(
+      const ByteStringView& abbr);
 
  private:
   struct ContentParam {
@@ -84,17 +84,17 @@
   using OpCodes = std::map<uint32_t, void (CPDF_StreamContentParser::*)()>;
   static OpCodes InitializeOpCodes();
 
-  void AddNameParam(const CFX_ByteStringC& str);
-  void AddNumberParam(const CFX_ByteStringC& str);
+  void AddNameParam(const ByteStringView& str);
+  void AddNumberParam(const ByteStringView& str);
   void AddObjectParam(std::unique_ptr<CPDF_Object> pObj);
   int GetNextParamPos();
   void ClearAllParams();
   CPDF_Object* GetObject(uint32_t index);
-  CFX_ByteString GetString(uint32_t index);
+  ByteString GetString(uint32_t index);
   float GetNumber(uint32_t index);
   int GetInteger(uint32_t index) { return (int32_t)(GetNumber(index)); }
-  void OnOperator(const CFX_ByteStringC& op);
-  void AddTextObject(CFX_ByteString* pText,
+  void OnOperator(const ByteStringView& op);
+  void AddTextObject(ByteString* pText,
                      float fInitKerning,
                      float* pKerning,
                      int count);
@@ -113,10 +113,9 @@
                         bool bColor,
                         bool bText,
                         bool bGraph);
-  CPDF_ColorSpace* FindColorSpace(const CFX_ByteString& name);
-  CPDF_Pattern* FindPattern(const CFX_ByteString& name, bool bShading);
-  CPDF_Object* FindResourceObj(const CFX_ByteString& type,
-                               const CFX_ByteString& name);
+  CPDF_ColorSpace* FindColorSpace(const ByteString& name);
+  CPDF_Pattern* FindPattern(const ByteString& name, bool bShading);
+  CPDF_Object* FindResourceObj(const ByteString& type, const ByteString& name);
 
   // Takes ownership of |pImageObj|, returns unowned pointer to it.
   CPDF_ImageObject* AddImageObject(std::unique_ptr<CPDF_ImageObject> pImageObj);
@@ -217,7 +216,7 @@
   float m_PathCurrentX;
   float m_PathCurrentY;
   uint8_t m_PathClipType;
-  CFX_ByteString m_LastImageName;
+  ByteString m_LastImageName;
   CFX_RetainPtr<CPDF_Image> m_pLastImage;
   bool m_bColored;
   float m_Type3Data[6];
diff --git a/core/fpdfapi/page/cpdf_streamcontentparser_unittest.cpp b/core/fpdfapi/page/cpdf_streamcontentparser_unittest.cpp
index 6b43935..0f4fc1e 100644
--- a/core/fpdfapi/page/cpdf_streamcontentparser_unittest.cpp
+++ b/core/fpdfapi/page/cpdf_streamcontentparser_unittest.cpp
@@ -6,39 +6,39 @@
 #include "testing/gtest/include/gtest/gtest.h"
 
 TEST(cpdf_streamcontentparser, PDF_FindKeyAbbreviation) {
-  EXPECT_EQ(CFX_ByteStringC("BitsPerComponent"),
+  EXPECT_EQ(ByteStringView("BitsPerComponent"),
             CPDF_StreamContentParser::FindKeyAbbreviationForTesting(
-                CFX_ByteStringC("BPC")));
-  EXPECT_EQ(CFX_ByteStringC("Width"),
+                ByteStringView("BPC")));
+  EXPECT_EQ(ByteStringView("Width"),
             CPDF_StreamContentParser::FindKeyAbbreviationForTesting(
-                CFX_ByteStringC("W")));
-  EXPECT_EQ(CFX_ByteStringC(""),
+                ByteStringView("W")));
+  EXPECT_EQ(ByteStringView(""),
             CPDF_StreamContentParser::FindKeyAbbreviationForTesting(
-                CFX_ByteStringC("")));
-  EXPECT_EQ(CFX_ByteStringC(""),
+                ByteStringView("")));
+  EXPECT_EQ(ByteStringView(""),
             CPDF_StreamContentParser::FindKeyAbbreviationForTesting(
-                CFX_ByteStringC("NoInList")));
+                ByteStringView("NoInList")));
   // Prefix should not match.
-  EXPECT_EQ(CFX_ByteStringC(""),
+  EXPECT_EQ(ByteStringView(""),
             CPDF_StreamContentParser::FindKeyAbbreviationForTesting(
-                CFX_ByteStringC("WW")));
+                ByteStringView("WW")));
 }
 
 TEST(cpdf_streamcontentparser, PDF_FindValueAbbreviation) {
-  EXPECT_EQ(CFX_ByteStringC("DeviceGray"),
+  EXPECT_EQ(ByteStringView("DeviceGray"),
             CPDF_StreamContentParser::FindValueAbbreviationForTesting(
-                CFX_ByteStringC("G")));
-  EXPECT_EQ(CFX_ByteStringC("DCTDecode"),
+                ByteStringView("G")));
+  EXPECT_EQ(ByteStringView("DCTDecode"),
             CPDF_StreamContentParser::FindValueAbbreviationForTesting(
-                CFX_ByteStringC("DCT")));
-  EXPECT_EQ(CFX_ByteStringC(""),
+                ByteStringView("DCT")));
+  EXPECT_EQ(ByteStringView(""),
             CPDF_StreamContentParser::FindValueAbbreviationForTesting(
-                CFX_ByteStringC("")));
-  EXPECT_EQ(CFX_ByteStringC(""),
+                ByteStringView("")));
+  EXPECT_EQ(ByteStringView(""),
             CPDF_StreamContentParser::FindValueAbbreviationForTesting(
-                CFX_ByteStringC("NoInList")));
+                ByteStringView("NoInList")));
   // Prefix should not match.
-  EXPECT_EQ(CFX_ByteStringC(""),
+  EXPECT_EQ(ByteStringView(""),
             CPDF_StreamContentParser::FindValueAbbreviationForTesting(
-                CFX_ByteStringC("II")));
+                ByteStringView("II")));
 }
diff --git a/core/fpdfapi/page/cpdf_streamparser.cpp b/core/fpdfapi/page/cpdf_streamparser.cpp
index f745331..46cbfeb 100644
--- a/core/fpdfapi/page/cpdf_streamparser.cpp
+++ b/core/fpdfapi/page/cpdf_streamparser.cpp
@@ -64,7 +64,7 @@
                             uint32_t limit,
                             int width,
                             int height,
-                            const CFX_ByteString& decoder,
+                            const ByteString& decoder,
                             CPDF_Dictionary* pParam,
                             uint8_t** dest_buf,
                             uint32_t* dest_size) {
@@ -104,10 +104,9 @@
 CPDF_StreamParser::CPDF_StreamParser(const uint8_t* pData, uint32_t dwSize)
     : m_pBuf(pData), m_Size(dwSize), m_Pos(0), m_pPool(nullptr) {}
 
-CPDF_StreamParser::CPDF_StreamParser(
-    const uint8_t* pData,
-    uint32_t dwSize,
-    const CFX_WeakPtr<CFX_ByteStringPool>& pPool)
+CPDF_StreamParser::CPDF_StreamParser(const uint8_t* pData,
+                                     uint32_t dwSize,
+                                     const CFX_WeakPtr<ByteStringPool>& pPool)
     : m_pBuf(pData), m_Size(dwSize), m_Pos(0), m_pPool(pPool) {}
 
 CPDF_StreamParser::~CPDF_StreamParser() {}
@@ -122,7 +121,7 @@
   if (PDFCharIsWhitespace(m_pBuf[m_Pos]))
     m_Pos++;
 
-  CFX_ByteString Decoder;
+  ByteString Decoder;
   CPDF_Dictionary* pParam = nullptr;
   CPDF_Object* pFilter = pDict->GetDirectObjectFor("Filter");
   if (pFilter) {
@@ -312,18 +311,18 @@
   if (bIsNumber) {
     m_WordBuffer[m_WordSize] = 0;
     return pdfium::MakeUnique<CPDF_Number>(
-        CFX_ByteStringC(m_WordBuffer, m_WordSize));
+        ByteStringView(m_WordBuffer, m_WordSize));
   }
 
   int first_char = m_WordBuffer[0];
   if (first_char == '/') {
-    CFX_ByteString name =
-        PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1));
+    ByteString name =
+        PDF_NameDecode(ByteStringView(m_WordBuffer + 1, m_WordSize - 1));
     return pdfium::MakeUnique<CPDF_Name>(m_pPool, name);
   }
 
   if (first_char == '(') {
-    CFX_ByteString str = ReadString();
+    ByteString str = ReadString();
     return pdfium::MakeUnique<CPDF_String>(m_pPool, str, false);
   }
 
@@ -340,8 +339,8 @@
       if (!m_WordSize || m_WordBuffer[0] != '/')
         return nullptr;
 
-      CFX_ByteString key =
-          PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1));
+      ByteString key =
+          PDF_NameDecode(ByteStringView(m_WordBuffer + 1, m_WordSize - 1));
       std::unique_ptr<CPDF_Object> pObj =
           ReadNextObject(true, bInArray, dwRecursionLevel + 1);
       if (!pObj)
@@ -464,9 +463,9 @@
   }
 }
 
-CFX_ByteString CPDF_StreamParser::ReadString() {
+ByteString CPDF_StreamParser::ReadString() {
   if (!PositionIsInBounds())
-    return CFX_ByteString();
+    return ByteString();
 
   uint8_t ch = m_pBuf[m_Pos++];
   std::ostringstream buf;
@@ -478,9 +477,9 @@
       case 0:
         if (ch == ')') {
           if (parlevel == 0) {
-            return CFX_ByteString(buf.str().c_str(),
-                                  std::min(static_cast<FX_STRSIZE>(buf.tellp()),
-                                           kMaxStringLength));
+            return ByteString(buf.str().c_str(),
+                              std::min(static_cast<FX_STRSIZE>(buf.tellp()),
+                                       kMaxStringLength));
           }
           parlevel--;
           buf << ')';
@@ -555,14 +554,14 @@
   if (PositionIsInBounds())
     ++m_Pos;
 
-  return CFX_ByteString(
+  return ByteString(
       buf.str().c_str(),
       std::min(static_cast<FX_STRSIZE>(buf.tellp()), kMaxStringLength));
 }
 
-CFX_ByteString CPDF_StreamParser::ReadHexString() {
+ByteString CPDF_StreamParser::ReadHexString() {
   if (!PositionIsInBounds())
-    return CFX_ByteString();
+    return ByteString();
 
   std::ostringstream buf;
   bool bFirst = true;
@@ -588,7 +587,7 @@
   if (!bFirst)
     buf << static_cast<char>(code);
 
-  return CFX_ByteString(
+  return ByteString(
       buf.str().c_str(),
       std::min(static_cast<FX_STRSIZE>(buf.tellp()), kMaxStringLength));
 }
diff --git a/core/fpdfapi/page/cpdf_streamparser.h b/core/fpdfapi/page/cpdf_streamparser.h
index fdc418c..32001a8 100644
--- a/core/fpdfapi/page/cpdf_streamparser.h
+++ b/core/fpdfapi/page/cpdf_streamparser.h
@@ -24,12 +24,12 @@
   CPDF_StreamParser(const uint8_t* pData, uint32_t dwSize);
   CPDF_StreamParser(const uint8_t* pData,
                     uint32_t dwSize,
-                    const CFX_WeakPtr<CFX_ByteStringPool>& pPool);
+                    const CFX_WeakPtr<ByteStringPool>& pPool);
   ~CPDF_StreamParser();
 
   SyntaxType ParseNextElement();
-  CFX_ByteStringC GetWord() const {
-    return CFX_ByteStringC(m_WordBuffer, m_WordSize);
+  ByteStringView GetWord() const {
+    return ByteStringView(m_WordBuffer, m_WordSize);
   }
   uint32_t GetPos() const { return m_Pos; }
   void SetPos(uint32_t pos) { m_Pos = pos; }
@@ -46,8 +46,8 @@
   friend class cpdf_streamparser_ReadHexString_Test;
 
   void GetNextWord(bool& bIsNumber);
-  CFX_ByteString ReadString();
-  CFX_ByteString ReadHexString();
+  ByteString ReadString();
+  ByteString ReadHexString();
   bool PositionIsInBounds() const;
 
   const uint8_t* m_pBuf;
@@ -56,7 +56,7 @@
   uint8_t m_WordBuffer[256];
   uint32_t m_WordSize;
   std::unique_ptr<CPDF_Object> m_pLastObj;
-  CFX_WeakPtr<CFX_ByteStringPool> m_pPool;
+  CFX_WeakPtr<ByteStringPool> m_pPool;
 };
 
 #endif  // CORE_FPDFAPI_PAGE_CPDF_STREAMPARSER_H_
diff --git a/core/fpdfapi/page/cpdf_textobject.cpp b/core/fpdfapi/page/cpdf_textobject.cpp
index a4d714f..4baf61d 100644
--- a/core/fpdfapi/page/cpdf_textobject.cpp
+++ b/core/fpdfapi/page/cpdf_textobject.cpp
@@ -136,7 +136,7 @@
                     pTextMatrix[3], m_Pos.x, m_Pos.y);
 }
 
-void CPDF_TextObject::SetSegments(const CFX_ByteString* pStrs,
+void CPDF_TextObject::SetSegments(const ByteString* pStrs,
                                   const float* pKerning,
                                   int nsegs) {
   m_CharCodes.clear();
@@ -162,7 +162,7 @@
   }
 }
 
-void CPDF_TextObject::SetText(const CFX_ByteString& str) {
+void CPDF_TextObject::SetText(const ByteString& str) {
   SetSegments(&str, nullptr, 1);
   RecalcPositionData();
   SetDirty(true);
diff --git a/core/fpdfapi/page/cpdf_textobject.h b/core/fpdfapi/page/cpdf_textobject.h
index e08b728..5cffbd1 100644
--- a/core/fpdfapi/page/cpdf_textobject.h
+++ b/core/fpdfapi/page/cpdf_textobject.h
@@ -47,7 +47,7 @@
   CPDF_Font* GetFont() const;
   float GetFontSize() const;
 
-  void SetText(const CFX_ByteString& text);
+  void SetText(const ByteString& text);
   void SetPosition(float x, float y);
 
   void RecalcPositionData();
@@ -58,9 +58,7 @@
   friend class CPDF_TextRenderer;
   friend class CPDF_PageContentGenerator;
 
-  void SetSegments(const CFX_ByteString* pStrs,
-                   const float* pKerning,
-                   int nSegs);
+  void SetSegments(const ByteString* pStrs, const float* pKerning, int nSegs);
 
   CFX_PointF CalcPositionData(float horz_scale);
 
diff --git a/core/fpdfapi/parser/cfdf_document.cpp b/core/fpdfapi/parser/cfdf_document.cpp
index 41827db..1f84f56 100644
--- a/core/fpdfapi/parser/cfdf_document.cpp
+++ b/core/fpdfapi/parser/cfdf_document.cpp
@@ -52,7 +52,7 @@
   parser.InitParser(m_pFile, 0);
   while (1) {
     bool bNumber;
-    CFX_ByteString word = parser.GetNextWord(&bNumber);
+    ByteString word = parser.GetNextWord(&bNumber);
     if (bNumber) {
       uint32_t objnum = FXSYS_atoui(word.c_str());
       if (!objnum)
@@ -89,9 +89,9 @@
   }
 }
 
-CFX_ByteString CFDF_Document::WriteToString() const {
+ByteString CFDF_Document::WriteToString() const {
   if (!m_pRootDict)
-    return CFX_ByteString();
+    return ByteString();
 
   std::ostringstream buf;
   buf << "%FDF-1.2\r\n";
@@ -102,5 +102,5 @@
   buf << "trailer\r\n<</Root " << m_pRootDict->GetObjNum()
       << " 0 R>>\r\n%%EOF\r\n";
 
-  return CFX_ByteString(buf);
+  return ByteString(buf);
 }
diff --git a/core/fpdfapi/parser/cfdf_document.h b/core/fpdfapi/parser/cfdf_document.h
index d58f93c..a24415b 100644
--- a/core/fpdfapi/parser/cfdf_document.h
+++ b/core/fpdfapi/parser/cfdf_document.h
@@ -27,7 +27,7 @@
   CFDF_Document();
   ~CFDF_Document() override;
 
-  CFX_ByteString WriteToString() const;
+  ByteString WriteToString() const;
   CPDF_Dictionary* GetRoot() const { return m_pRootDict.Get(); }
 
  protected:
diff --git a/core/fpdfapi/parser/cpdf_array.cpp b/core/fpdfapi/parser/cpdf_array.cpp
index a0957b6..f4907ff 100644
--- a/core/fpdfapi/parser/cpdf_array.cpp
+++ b/core/fpdfapi/parser/cpdf_array.cpp
@@ -20,7 +20,7 @@
 
 CPDF_Array::CPDF_Array() {}
 
-CPDF_Array::CPDF_Array(const CFX_WeakPtr<CFX_ByteStringPool>& pPool)
+CPDF_Array::CPDF_Array(const CFX_WeakPtr<ByteStringPool>& pPool)
     : m_pPool(pPool) {}
 
 CPDF_Array::~CPDF_Array() {
@@ -100,15 +100,15 @@
   return m_Objects[i]->GetDirect();
 }
 
-CFX_ByteString CPDF_Array::GetStringAt(size_t i) const {
+ByteString CPDF_Array::GetStringAt(size_t i) const {
   if (i >= m_Objects.size())
-    return CFX_ByteString();
+    return ByteString();
   return m_Objects[i]->GetString();
 }
 
-CFX_WideString CPDF_Array::GetUnicodeTextAt(size_t i) const {
+WideString CPDF_Array::GetUnicodeTextAt(size_t i) const {
   if (i >= m_Objects.size())
-    return CFX_WideString();
+    return WideString();
   return m_Objects[i]->GetUnicodeText();
 }
 
diff --git a/core/fpdfapi/parser/cpdf_array.h b/core/fpdfapi/parser/cpdf_array.h
index d1be233..3b18025 100644
--- a/core/fpdfapi/parser/cpdf_array.h
+++ b/core/fpdfapi/parser/cpdf_array.h
@@ -24,7 +24,7 @@
       std::vector<std::unique_ptr<CPDF_Object>>::const_iterator;
 
   CPDF_Array();
-  explicit CPDF_Array(const CFX_WeakPtr<CFX_ByteStringPool>& pPool);
+  explicit CPDF_Array(const CFX_WeakPtr<ByteStringPool>& pPool);
   ~CPDF_Array() override;
 
   // CPDF_Object:
@@ -39,8 +39,8 @@
   size_t GetCount() const { return m_Objects.size(); }
   CPDF_Object* GetObjectAt(size_t index) const;
   CPDF_Object* GetDirectObjectAt(size_t index) const;
-  CFX_ByteString GetStringAt(size_t index) const;
-  CFX_WideString GetUnicodeTextAt(size_t index) const;
+  ByteString GetStringAt(size_t index) const;
+  WideString GetUnicodeTextAt(size_t index) const;
   int GetIntegerAt(size_t index) const;
   float GetNumberAt(size_t index) const;
   CPDF_Dictionary* GetDictAt(size_t index) const;
@@ -112,7 +112,7 @@
       std::set<const CPDF_Object*>* pVisited) const override;
 
   std::vector<std::unique_ptr<CPDF_Object>> m_Objects;
-  CFX_WeakPtr<CFX_ByteStringPool> m_pPool;
+  CFX_WeakPtr<ByteStringPool> m_pPool;
 };
 
 inline CPDF_Array* ToArray(CPDF_Object* obj) {
diff --git a/core/fpdfapi/parser/cpdf_boolean.cpp b/core/fpdfapi/parser/cpdf_boolean.cpp
index 2633c87..a1dc450 100644
--- a/core/fpdfapi/parser/cpdf_boolean.cpp
+++ b/core/fpdfapi/parser/cpdf_boolean.cpp
@@ -22,7 +22,7 @@
   return pdfium::MakeUnique<CPDF_Boolean>(m_bValue);
 }
 
-CFX_ByteString CPDF_Boolean::GetString() const {
+ByteString CPDF_Boolean::GetString() const {
   return m_bValue ? "true" : "false";
 }
 
@@ -30,7 +30,7 @@
   return m_bValue;
 }
 
-void CPDF_Boolean::SetString(const CFX_ByteString& str) {
+void CPDF_Boolean::SetString(const ByteString& str) {
   m_bValue = (str == "true");
 }
 
@@ -48,5 +48,5 @@
 
 bool CPDF_Boolean::WriteTo(IFX_ArchiveStream* archive) const {
   return archive->WriteString(" ") &&
-         archive->WriteString(GetString().AsStringC());
+         archive->WriteString(GetString().AsStringView());
 }
diff --git a/core/fpdfapi/parser/cpdf_boolean.h b/core/fpdfapi/parser/cpdf_boolean.h
index 2dd1486..c0a69d8 100644
--- a/core/fpdfapi/parser/cpdf_boolean.h
+++ b/core/fpdfapi/parser/cpdf_boolean.h
@@ -22,9 +22,9 @@
   // CPDF_Object:
   Type GetType() const override;
   std::unique_ptr<CPDF_Object> Clone() const override;
-  CFX_ByteString GetString() const override;
+  ByteString GetString() const override;
   int GetInteger() const override;
-  void SetString(const CFX_ByteString& str) override;
+  void SetString(const ByteString& str) override;
   bool IsBoolean() const override;
   CPDF_Boolean* AsBoolean() override;
   const CPDF_Boolean* AsBoolean() const override;
diff --git a/core/fpdfapi/parser/cpdf_crypto_handler.cpp b/core/fpdfapi/parser/cpdf_crypto_handler.cpp
index 74428ba..cae95f2 100644
--- a/core/fpdfapi/parser/cpdf_crypto_handler.cpp
+++ b/core/fpdfapi/parser/cpdf_crypto_handler.cpp
@@ -230,14 +230,14 @@
   return true;
 }
 
-CFX_ByteString CPDF_CryptoHandler::Decrypt(uint32_t objnum,
-                                           uint32_t gennum,
-                                           const CFX_ByteString& str) {
+ByteString CPDF_CryptoHandler::Decrypt(uint32_t objnum,
+                                       uint32_t gennum,
+                                       const ByteString& str) {
   CFX_BinaryBuf dest_buf;
   void* context = DecryptStart(objnum, gennum);
   DecryptStream(context, str.raw_str(), str.GetLength(), dest_buf);
   DecryptFinish(context, dest_buf);
-  return CFX_ByteString(dest_buf.GetBuffer(), dest_buf.GetSize());
+  return ByteString(dest_buf.GetBuffer(), dest_buf.GetSize());
 }
 
 void* CPDF_CryptoHandler::DecryptStart(uint32_t objnum, uint32_t gennum) {
diff --git a/core/fpdfapi/parser/cpdf_crypto_handler.h b/core/fpdfapi/parser/cpdf_crypto_handler.h
index adf0c6c..252f41c 100644
--- a/core/fpdfapi/parser/cpdf_crypto_handler.h
+++ b/core/fpdfapi/parser/cpdf_crypto_handler.h
@@ -28,9 +28,7 @@
             CPDF_SecurityHandler* pSecurityHandler);
   uint32_t DecryptGetSize(uint32_t src_size);
   void* DecryptStart(uint32_t objnum, uint32_t gennum);
-  CFX_ByteString Decrypt(uint32_t objnum,
-                         uint32_t gennum,
-                         const CFX_ByteString& str);
+  ByteString Decrypt(uint32_t objnum, uint32_t gennum, const ByteString& str);
   bool DecryptStream(void* context,
                      const uint8_t* src_buf,
                      uint32_t src_size,
diff --git a/core/fpdfapi/parser/cpdf_data_avail.cpp b/core/fpdfapi/parser/cpdf_data_avail.cpp
index b10029d..994d082 100644
--- a/core/fpdfapi/parser/cpdf_data_avail.cpp
+++ b/core/fpdfapi/parser/cpdf_data_avail.cpp
@@ -473,7 +473,7 @@
     if (!pObj->IsDictionary())
       continue;
 
-    CFX_ByteString type = pObj->GetDict()->GetStringFor("Type");
+    ByteString type = pObj->GetDict()->GetStringFor("Type");
     if (type == "Pages") {
       m_PagesArray.push_back(std::move(pObj));
       continue;
@@ -661,7 +661,7 @@
   m_syntaxParser.SetPos(pos);
 
   bool bIsNumber;
-  CFX_ByteString word = m_syntaxParser.GetNextWord(&bIsNumber);
+  ByteString word = m_syntaxParser.GetNextWord(&bIsNumber);
   if (!bIsNumber)
     return nullptr;
 
@@ -723,7 +723,7 @@
   m_syntaxParser.SetPos(m_syntaxParser.m_HeaderOffset + 9);
 
   bool bNumber;
-  CFX_ByteString wordObjNum = m_syntaxParser.GetNextWord(&bNumber);
+  ByteString wordObjNum = m_syntaxParser.GetNextWord(&bNumber);
   if (!bNumber)
     return false;
 
@@ -761,7 +761,7 @@
   m_syntaxParser.GetNextWord(nullptr);
 
   bool bNumber;
-  CFX_ByteString xrefpos_str = m_syntaxParser.GetNextWord(&bNumber);
+  ByteString xrefpos_str = m_syntaxParser.GetNextWord(&bNumber);
   if (!bNumber) {
     m_docStatus = PDF_DATAAVAIL_ERROR;
     return false;
@@ -781,7 +781,7 @@
   m_Pos = dwOffset;
 }
 
-bool CPDF_DataAvail::GetNextToken(CFX_ByteString* token) {
+bool CPDF_DataAvail::GetNextToken(ByteString* token) {
   uint8_t ch;
   if (!GetNextChar(ch))
     return false;
@@ -814,7 +814,7 @@
 
         if (!PDFCharIsOther(ch) && !PDFCharIsNumeric(ch)) {
           m_Pos--;
-          *token = CFX_ByteString(buffer, index);
+          *token = ByteString(buffer, index);
           return true;
         }
         if (index < sizeof(buffer))
@@ -837,7 +837,7 @@
       else
         m_Pos--;
     }
-    *token = CFX_ByteString(buffer, index);
+    *token = ByteString(buffer, index);
     return true;
   }
 
@@ -854,7 +854,7 @@
     }
   }
 
-  *token = CFX_ByteString(buffer, index);
+  *token = ByteString(buffer, index);
   return true;
 }
 
@@ -885,7 +885,7 @@
 }
 
 bool CPDF_DataAvail::CheckCrossRefItem() {
-  CFX_ByteString token;
+  ByteString token;
   while (1) {
     const CPDF_ReadValidator::Session read_session(GetValidator().Get());
     if (!GetNextToken(&token)) {
@@ -904,7 +904,7 @@
 
 bool CPDF_DataAvail::CheckCrossRef() {
   const CPDF_ReadValidator::Session read_session(GetValidator().Get());
-  CFX_ByteString token;
+  ByteString token;
   if (!GetNextToken(&token)) {
     if (!GetValidator()->has_read_problems())
       m_docStatus = PDF_DATAAVAIL_ERROR;
@@ -1046,7 +1046,7 @@
 
   pPageNode->m_dwPageNo = dwPageNo;
   CPDF_Dictionary* pDict = pPage->GetDict();
-  const CFX_ByteString type = pDict->GetStringFor("Type");
+  const ByteString type = pDict->GetStringFor("Type");
   if (type == "Page") {
     pPageNode->m_type = PDF_PAGENODE_PAGE;
     return true;
diff --git a/core/fpdfapi/parser/cpdf_data_avail.h b/core/fpdfapi/parser/cpdf_data_avail.h
index e2a4a20..850ceea 100644
--- a/core/fpdfapi/parser/cpdf_data_avail.h
+++ b/core/fpdfapi/parser/cpdf_data_avail.h
@@ -145,7 +145,7 @@
 
   bool IsLinearizedFile(uint8_t* pData, uint32_t dwLen);
   void SetStartOffset(FX_FILESIZE dwOffset);
-  bool GetNextToken(CFX_ByteString* token);
+  bool GetNextToken(ByteString* token);
   bool GetNextChar(uint8_t& ch);
   std::unique_ptr<CPDF_Object> ParseIndirectObjectAt(
       FX_FILESIZE pos,
@@ -200,7 +200,7 @@
   FX_FILESIZE m_Pos;
   FX_FILESIZE m_bufferOffset;
   uint32_t m_bufferSize;
-  CFX_ByteString m_WordBuf;
+  ByteString m_WordBuf;
   uint8_t m_bufferData[512];
   std::vector<uint32_t> m_XRefStreamList;
   std::vector<uint32_t> m_PageObjList;
diff --git a/core/fpdfapi/parser/cpdf_dictionary.cpp b/core/fpdfapi/parser/cpdf_dictionary.cpp
index 4c03587..570c57e 100644
--- a/core/fpdfapi/parser/cpdf_dictionary.cpp
+++ b/core/fpdfapi/parser/cpdf_dictionary.cpp
@@ -22,9 +22,9 @@
 #include "third_party/base/stl_util.h"
 
 CPDF_Dictionary::CPDF_Dictionary()
-    : CPDF_Dictionary(CFX_WeakPtr<CFX_ByteStringPool>()) {}
+    : CPDF_Dictionary(CFX_WeakPtr<ByteStringPool>()) {}
 
-CPDF_Dictionary::CPDF_Dictionary(const CFX_WeakPtr<CFX_ByteStringPool>& pPool)
+CPDF_Dictionary::CPDF_Dictionary(const CFX_WeakPtr<ByteStringPool>& pPool)
     : m_pPool(pPool) {}
 
 CPDF_Dictionary::~CPDF_Dictionary() {
@@ -78,58 +78,56 @@
   return std::move(pCopy);
 }
 
-CPDF_Object* CPDF_Dictionary::GetObjectFor(const CFX_ByteString& key) const {
+CPDF_Object* CPDF_Dictionary::GetObjectFor(const ByteString& key) const {
   auto it = m_Map.find(key);
   return it != m_Map.end() ? it->second.get() : nullptr;
 }
 
-CPDF_Object* CPDF_Dictionary::GetDirectObjectFor(
-    const CFX_ByteString& key) const {
+CPDF_Object* CPDF_Dictionary::GetDirectObjectFor(const ByteString& key) const {
   CPDF_Object* p = GetObjectFor(key);
   return p ? p->GetDirect() : nullptr;
 }
 
-CFX_ByteString CPDF_Dictionary::GetStringFor(const CFX_ByteString& key) const {
+ByteString CPDF_Dictionary::GetStringFor(const ByteString& key) const {
   CPDF_Object* p = GetObjectFor(key);
-  return p ? p->GetString() : CFX_ByteString();
+  return p ? p->GetString() : ByteString();
 }
 
-CFX_WideString CPDF_Dictionary::GetUnicodeTextFor(
-    const CFX_ByteString& key) const {
+WideString CPDF_Dictionary::GetUnicodeTextFor(const ByteString& key) const {
   CPDF_Object* p = GetObjectFor(key);
   if (CPDF_Reference* pRef = ToReference(p))
     p = pRef->GetDirect();
-  return p ? p->GetUnicodeText() : CFX_WideString();
+  return p ? p->GetUnicodeText() : WideString();
 }
 
-CFX_ByteString CPDF_Dictionary::GetStringFor(const CFX_ByteString& key,
-                                             const CFX_ByteString& def) const {
+ByteString CPDF_Dictionary::GetStringFor(const ByteString& key,
+                                         const ByteString& def) const {
   CPDF_Object* p = GetObjectFor(key);
-  return p ? p->GetString() : CFX_ByteString(def);
+  return p ? p->GetString() : ByteString(def);
 }
 
-int CPDF_Dictionary::GetIntegerFor(const CFX_ByteString& key) const {
+int CPDF_Dictionary::GetIntegerFor(const ByteString& key) const {
   CPDF_Object* p = GetObjectFor(key);
   return p ? p->GetInteger() : 0;
 }
 
-int CPDF_Dictionary::GetIntegerFor(const CFX_ByteString& key, int def) const {
+int CPDF_Dictionary::GetIntegerFor(const ByteString& key, int def) const {
   CPDF_Object* p = GetObjectFor(key);
   return p ? p->GetInteger() : def;
 }
 
-float CPDF_Dictionary::GetNumberFor(const CFX_ByteString& key) const {
+float CPDF_Dictionary::GetNumberFor(const ByteString& key) const {
   CPDF_Object* p = GetObjectFor(key);
   return p ? p->GetNumber() : 0;
 }
 
-bool CPDF_Dictionary::GetBooleanFor(const CFX_ByteString& key,
+bool CPDF_Dictionary::GetBooleanFor(const ByteString& key,
                                     bool bDefault) const {
   CPDF_Object* p = GetObjectFor(key);
   return ToBoolean(p) ? p->GetInteger() != 0 : bDefault;
 }
 
-CPDF_Dictionary* CPDF_Dictionary::GetDictFor(const CFX_ByteString& key) const {
+CPDF_Dictionary* CPDF_Dictionary::GetDictFor(const ByteString& key) const {
   CPDF_Object* p = GetDirectObjectFor(key);
   if (!p)
     return nullptr;
@@ -140,15 +138,15 @@
   return nullptr;
 }
 
-CPDF_Array* CPDF_Dictionary::GetArrayFor(const CFX_ByteString& key) const {
+CPDF_Array* CPDF_Dictionary::GetArrayFor(const ByteString& key) const {
   return ToArray(GetDirectObjectFor(key));
 }
 
-CPDF_Stream* CPDF_Dictionary::GetStreamFor(const CFX_ByteString& key) const {
+CPDF_Stream* CPDF_Dictionary::GetStreamFor(const ByteString& key) const {
   return ToStream(GetDirectObjectFor(key));
 }
 
-CFX_FloatRect CPDF_Dictionary::GetRectFor(const CFX_ByteString& key) const {
+CFX_FloatRect CPDF_Dictionary::GetRectFor(const ByteString& key) const {
   CFX_FloatRect rect;
   CPDF_Array* pArray = GetArrayFor(key);
   if (pArray)
@@ -156,7 +154,7 @@
   return rect;
 }
 
-CFX_Matrix CPDF_Dictionary::GetMatrixFor(const CFX_ByteString& key) const {
+CFX_Matrix CPDF_Dictionary::GetMatrixFor(const ByteString& key) const {
   CFX_Matrix matrix;
   CPDF_Array* pArray = GetArrayFor(key);
   if (pArray)
@@ -164,7 +162,7 @@
   return matrix;
 }
 
-bool CPDF_Dictionary::KeyExist(const CFX_ByteString& key) const {
+bool CPDF_Dictionary::KeyExist(const ByteString& key) const {
   return pdfium::ContainsKey(m_Map, key);
 }
 
@@ -175,7 +173,7 @@
   return pType && pType->GetString() == "Sig";
 }
 
-CPDF_Object* CPDF_Dictionary::SetFor(const CFX_ByteString& key,
+CPDF_Object* CPDF_Dictionary::SetFor(const ByteString& key,
                                      std::unique_ptr<CPDF_Object> pObj) {
   if (!pObj) {
     m_Map.erase(key);
@@ -188,7 +186,7 @@
 }
 
 void CPDF_Dictionary::ConvertToIndirectObjectFor(
-    const CFX_ByteString& key,
+    const ByteString& key,
     CPDF_IndirectObjectHolder* pHolder) {
   auto it = m_Map.find(key);
   if (it == m_Map.end() || it->second->IsReference())
@@ -198,8 +196,7 @@
   it->second = pdfium::MakeUnique<CPDF_Reference>(pHolder, pObj->GetObjNum());
 }
 
-std::unique_ptr<CPDF_Object> CPDF_Dictionary::RemoveFor(
-    const CFX_ByteString& key) {
+std::unique_ptr<CPDF_Object> CPDF_Dictionary::RemoveFor(const ByteString& key) {
   std::unique_ptr<CPDF_Object> result;
   auto it = m_Map.find(key);
   if (it != m_Map.end()) {
@@ -209,8 +206,8 @@
   return result;
 }
 
-void CPDF_Dictionary::ReplaceKey(const CFX_ByteString& oldkey,
-                                 const CFX_ByteString& newkey) {
+void CPDF_Dictionary::ReplaceKey(const ByteString& oldkey,
+                                 const ByteString& newkey) {
   auto old_it = m_Map.find(oldkey);
   if (old_it == m_Map.end())
     return;
@@ -223,7 +220,7 @@
   m_Map.erase(old_it);
 }
 
-void CPDF_Dictionary::SetRectFor(const CFX_ByteString& key,
+void CPDF_Dictionary::SetRectFor(const ByteString& key,
                                  const CFX_FloatRect& rect) {
   CPDF_Array* pArray = SetNewFor<CPDF_Array>(key);
   pArray->AddNew<CPDF_Number>(rect.left);
@@ -232,7 +229,7 @@
   pArray->AddNew<CPDF_Number>(rect.top);
 }
 
-void CPDF_Dictionary::SetMatrixFor(const CFX_ByteString& key,
+void CPDF_Dictionary::SetMatrixFor(const ByteString& key,
                                    const CFX_Matrix& matrix) {
   CPDF_Array* pArray = SetNewFor<CPDF_Array>(key);
   pArray->AddNew<CPDF_Number>(matrix.a);
@@ -243,7 +240,7 @@
   pArray->AddNew<CPDF_Number>(matrix.f);
 }
 
-CFX_ByteString CPDF_Dictionary::MaybeIntern(const CFX_ByteString& str) {
+ByteString CPDF_Dictionary::MaybeIntern(const ByteString& str) {
   return m_pPool ? m_pPool->Intern(str) : str;
 }
 
@@ -252,10 +249,10 @@
     return false;
 
   for (const auto& it : *this) {
-    const CFX_ByteString& key = it.first;
+    const ByteString& key = it.first;
     CPDF_Object* pValue = it.second.get();
     if (!archive->WriteString("/") ||
-        !archive->WriteString(PDF_NameEncode(key).AsStringC())) {
+        !archive->WriteString(PDF_NameEncode(key).AsStringView())) {
       return false;
     }
 
diff --git a/core/fpdfapi/parser/cpdf_dictionary.h b/core/fpdfapi/parser/cpdf_dictionary.h
index 31a09d9..93c00c8 100644
--- a/core/fpdfapi/parser/cpdf_dictionary.h
+++ b/core/fpdfapi/parser/cpdf_dictionary.h
@@ -24,10 +24,10 @@
 class CPDF_Dictionary : public CPDF_Object {
  public:
   using const_iterator =
-      std::map<CFX_ByteString, std::unique_ptr<CPDF_Object>>::const_iterator;
+      std::map<ByteString, std::unique_ptr<CPDF_Object>>::const_iterator;
 
   CPDF_Dictionary();
-  explicit CPDF_Dictionary(const CFX_WeakPtr<CFX_ByteStringPool>& pPool);
+  explicit CPDF_Dictionary(const CFX_WeakPtr<ByteStringPool>& pPool);
   ~CPDF_Dictionary() override;
 
   // CPDF_Object:
@@ -40,76 +40,73 @@
   bool WriteTo(IFX_ArchiveStream* archive) const override;
 
   size_t GetCount() const { return m_Map.size(); }
-  CPDF_Object* GetObjectFor(const CFX_ByteString& key) const;
-  CPDF_Object* GetDirectObjectFor(const CFX_ByteString& key) const;
-  CFX_ByteString GetStringFor(const CFX_ByteString& key) const;
-  CFX_ByteString GetStringFor(const CFX_ByteString& key,
-                              const CFX_ByteString& default_str) const;
-  CFX_WideString GetUnicodeTextFor(const CFX_ByteString& key) const;
-  int GetIntegerFor(const CFX_ByteString& key) const;
-  int GetIntegerFor(const CFX_ByteString& key, int default_int) const;
-  bool GetBooleanFor(const CFX_ByteString& key, bool bDefault = false) const;
-  float GetNumberFor(const CFX_ByteString& key) const;
-  CPDF_Dictionary* GetDictFor(const CFX_ByteString& key) const;
-  CPDF_Stream* GetStreamFor(const CFX_ByteString& key) const;
-  CPDF_Array* GetArrayFor(const CFX_ByteString& key) const;
-  CFX_FloatRect GetRectFor(const CFX_ByteString& key) const;
-  CFX_Matrix GetMatrixFor(const CFX_ByteString& key) const;
-  float GetFloatFor(const CFX_ByteString& key) const {
-    return GetNumberFor(key);
-  }
+  CPDF_Object* GetObjectFor(const ByteString& key) const;
+  CPDF_Object* GetDirectObjectFor(const ByteString& key) const;
+  ByteString GetStringFor(const ByteString& key) const;
+  ByteString GetStringFor(const ByteString& key,
+                          const ByteString& default_str) const;
+  WideString GetUnicodeTextFor(const ByteString& key) const;
+  int GetIntegerFor(const ByteString& key) const;
+  int GetIntegerFor(const ByteString& key, int default_int) const;
+  bool GetBooleanFor(const ByteString& key, bool bDefault = false) const;
+  float GetNumberFor(const ByteString& key) const;
+  CPDF_Dictionary* GetDictFor(const ByteString& key) const;
+  CPDF_Stream* GetStreamFor(const ByteString& key) const;
+  CPDF_Array* GetArrayFor(const ByteString& key) const;
+  CFX_FloatRect GetRectFor(const ByteString& key) const;
+  CFX_Matrix GetMatrixFor(const ByteString& key) const;
+  float GetFloatFor(const ByteString& key) const { return GetNumberFor(key); }
 
-  bool KeyExist(const CFX_ByteString& key) const;
+  bool KeyExist(const ByteString& key) const;
   bool IsSignatureDict() const;
 
   // Set* functions invalidate iterators for the element with the key |key|.
   // Takes ownership of |pObj|, returns an unowned pointer to it.
-  CPDF_Object* SetFor(const CFX_ByteString& key,
-                      std::unique_ptr<CPDF_Object> pObj);
+  CPDF_Object* SetFor(const ByteString& key, std::unique_ptr<CPDF_Object> pObj);
 
   // Creates a new object owned by the dictionary and returns an unowned
   // pointer to it.
   template <typename T, typename... Args>
   typename std::enable_if<!CanInternStrings<T>::value, T*>::type SetNewFor(
-      const CFX_ByteString& key,
+      const ByteString& key,
       Args&&... args) {
     return static_cast<T*>(
         SetFor(key, pdfium::MakeUnique<T>(std::forward<Args>(args)...)));
   }
   template <typename T, typename... Args>
   typename std::enable_if<CanInternStrings<T>::value, T*>::type SetNewFor(
-      const CFX_ByteString& key,
+      const ByteString& key,
       Args&&... args) {
     return static_cast<T*>(SetFor(
         key, pdfium::MakeUnique<T>(m_pPool, std::forward<Args>(args)...)));
   }
 
   // Convenience functions to convert native objects to array form.
-  void SetRectFor(const CFX_ByteString& key, const CFX_FloatRect& rect);
-  void SetMatrixFor(const CFX_ByteString& key, const CFX_Matrix& matrix);
+  void SetRectFor(const ByteString& key, const CFX_FloatRect& rect);
+  void SetMatrixFor(const ByteString& key, const CFX_Matrix& matrix);
 
-  void ConvertToIndirectObjectFor(const CFX_ByteString& key,
+  void ConvertToIndirectObjectFor(const ByteString& key,
                                   CPDF_IndirectObjectHolder* pHolder);
 
   // Invalidates iterators for the element with the key |key|.
-  std::unique_ptr<CPDF_Object> RemoveFor(const CFX_ByteString& key);
+  std::unique_ptr<CPDF_Object> RemoveFor(const ByteString& key);
 
   // Invalidates iterators for the element with the key |oldkey|.
-  void ReplaceKey(const CFX_ByteString& oldkey, const CFX_ByteString& newkey);
+  void ReplaceKey(const ByteString& oldkey, const ByteString& newkey);
 
   const_iterator begin() const { return m_Map.begin(); }
   const_iterator end() const { return m_Map.end(); }
 
-  CFX_WeakPtr<CFX_ByteStringPool> GetByteStringPool() const { return m_pPool; }
+  CFX_WeakPtr<ByteStringPool> GetByteStringPool() const { return m_pPool; }
 
  protected:
-  CFX_ByteString MaybeIntern(const CFX_ByteString& str);
+  ByteString MaybeIntern(const ByteString& str);
   std::unique_ptr<CPDF_Object> CloneNonCyclic(
       bool bDirect,
       std::set<const CPDF_Object*>* visited) const override;
 
-  CFX_WeakPtr<CFX_ByteStringPool> m_pPool;
-  std::map<CFX_ByteString, std::unique_ptr<CPDF_Object>> m_Map;
+  CFX_WeakPtr<ByteStringPool> m_pPool;
+  std::map<ByteString, std::unique_ptr<CPDF_Object>> m_Map;
 };
 
 inline CPDF_Dictionary* ToDictionary(CPDF_Object* obj) {
diff --git a/core/fpdfapi/parser/cpdf_document.cpp b/core/fpdfapi/parser/cpdf_document.cpp
index 4715517..f47551f 100644
--- a/core/fpdfapi/parser/cpdf_document.cpp
+++ b/core/fpdfapi/parser/cpdf_document.cpp
@@ -217,8 +217,8 @@
   InsertWidthArrayImpl(widths, size, pWidthArray);
 }
 
-CFX_ByteString FPDF_GetPSNameFromTT(HDC hDC) {
-  CFX_ByteString result;
+ByteString FPDF_GetPSNameFromTT(HDC hDC) {
+  ByteString result;
   DWORD size = ::GetFontData(hDC, 'eman', 0, nullptr, 0);
   if (size != GDI_ERROR) {
     LPBYTE buffer = FX_Alloc(BYTE, size);
@@ -299,7 +299,7 @@
 void ProcessNonbCJK(CPDF_Dictionary* pBaseDict,
                     bool bold,
                     bool italic,
-                    CFX_ByteString basefont,
+                    ByteString basefont,
                     std::unique_ptr<CPDF_Array> pWidths) {
   if (bold && italic)
     basefont += ",BoldItalic";
@@ -316,7 +316,7 @@
 
 std::unique_ptr<CPDF_Dictionary> CalculateFontDesc(
     CPDF_Document* pDoc,
-    CFX_ByteString basefont,
+    ByteString basefont,
     int flags,
     int italicangle,
     int ascend,
@@ -769,7 +769,7 @@
 
 CPDF_Font* CPDF_Document::AddStandardFont(const char* font,
                                           CPDF_FontEncoding* pEncoding) {
-  CFX_ByteString name(font);
+  ByteString name(font);
   if (PDF_GetStandardFontName(&name) < 0)
     return nullptr;
   return GetPageData()->GetStandardFont(name, pEncoding);
@@ -793,7 +793,7 @@
 
   const uint16_t* pUnicodes = g_FX_CharsetUnicodes[i].m_pUnicodes;
   for (int j = 0; j < 128; j++) {
-    CFX_ByteString name = PDF_AdobeNameFromUnicode(pUnicodes[j]);
+    ByteString name = PDF_AdobeNameFromUnicode(pUnicodes[j]);
     pArray->AddNew<CPDF_Name>(name.IsEmpty() ? ".notdef" : name);
   }
   pBaseDict->SetNewFor<CPDF_Reference>("Encoding", this,
@@ -805,11 +805,11 @@
     CPDF_Dictionary* pBaseDict,
     int charset,
     bool bVert,
-    CFX_ByteString basefont,
+    ByteString basefont,
     std::function<void(wchar_t, wchar_t, CPDF_Array*)> Insert) {
   CPDF_Dictionary* pFontDict = NewIndirect<CPDF_Dictionary>();
-  CFX_ByteString cmap;
-  CFX_ByteString ordering;
+  ByteString cmap;
+  ByteString ordering;
   int supplement = 0;
   CPDF_Array* pWidthArray = pFontDict->SetNewFor<CPDF_Array>("W");
   switch (charset) {
@@ -875,7 +875,7 @@
   bool bCJK = charset == FX_CHARSET_ChineseTraditional ||
               charset == FX_CHARSET_ChineseSimplified ||
               charset == FX_CHARSET_Hangul || charset == FX_CHARSET_ShiftJIS;
-  CFX_ByteString basefont = pFont->GetFamilyName();
+  ByteString basefont = pFont->GetFamilyName();
   basefont.Replace(" ", "");
   int flags =
       CalculateFlags(pFont->IsBold(), pFont->IsItalic(), pFont->IsFixedWidth(),
@@ -958,12 +958,12 @@
                                          bool bTranslateName) {
   LOGFONTA lfa;
   memcpy(&lfa, pLogFont, (char*)lfa.lfFaceName - (char*)&lfa);
-  CFX_ByteString face = CFX_ByteString::FromUnicode(pLogFont->lfFaceName);
+  ByteString face = ByteString::FromUnicode(pLogFont->lfFaceName);
   if (face.GetLength() >= LF_FACESIZE)
     return nullptr;
 
   strncpy(lfa.lfFaceName, face.c_str(),
-          (face.GetLength() + 1) * sizeof(CFX_ByteString::CharType));
+          (face.GetLength() + 1) * sizeof(ByteString::CharType));
   return AddWindowsFont(&lfa, bVert, bTranslateName);
 }
 
@@ -996,7 +996,7 @@
               pLogFont->lfCharSet == FX_CHARSET_ChineseSimplified ||
               pLogFont->lfCharSet == FX_CHARSET_Hangul ||
               pLogFont->lfCharSet == FX_CHARSET_ShiftJIS;
-  CFX_ByteString basefont;
+  ByteString basefont;
   if (bTranslateName && bCJK)
     basefont = FPDF_GetPSNameFromTT(hDC);
 
diff --git a/core/fpdfapi/parser/cpdf_document.h b/core/fpdfapi/parser/cpdf_document.h
index cc50763..ff80fa8 100644
--- a/core/fpdfapi/parser/cpdf_document.h
+++ b/core/fpdfapi/parser/cpdf_document.h
@@ -122,7 +122,7 @@
       CPDF_Dictionary* pBaseDict,
       int charset,
       bool bVert,
-      CFX_ByteString basefont,
+      ByteString basefont,
       std::function<void(wchar_t, wchar_t, CPDF_Array*)> Insert);
   bool InsertDeletePDFPage(CPDF_Dictionary* pPages,
                            int nPagesToGo,
diff --git a/core/fpdfapi/parser/cpdf_indirect_object_holder.cpp b/core/fpdfapi/parser/cpdf_indirect_object_holder.cpp
index 434470a..2a57411 100644
--- a/core/fpdfapi/parser/cpdf_indirect_object_holder.cpp
+++ b/core/fpdfapi/parser/cpdf_indirect_object_holder.cpp
@@ -23,7 +23,7 @@
 
 CPDF_IndirectObjectHolder::CPDF_IndirectObjectHolder()
     : m_LastObjNum(0),
-      m_pByteStringPool(pdfium::MakeUnique<CFX_ByteStringPool>()) {}
+      m_pByteStringPool(pdfium::MakeUnique<ByteStringPool>()) {}
 
 CPDF_IndirectObjectHolder::~CPDF_IndirectObjectHolder() {
   m_pByteStringPool.DeleteObject();  // Make weak.
diff --git a/core/fpdfapi/parser/cpdf_indirect_object_holder.h b/core/fpdfapi/parser/cpdf_indirect_object_holder.h
index b82377e..ab99dd5 100644
--- a/core/fpdfapi/parser/cpdf_indirect_object_holder.h
+++ b/core/fpdfapi/parser/cpdf_indirect_object_holder.h
@@ -58,7 +58,7 @@
   uint32_t GetLastObjNum() const { return m_LastObjNum; }
   void SetLastObjNum(uint32_t objnum) { m_LastObjNum = objnum; }
 
-  CFX_WeakPtr<CFX_ByteStringPool> GetByteStringPool() const {
+  CFX_WeakPtr<ByteStringPool> GetByteStringPool() const {
     return m_pByteStringPool;
   }
 
@@ -72,7 +72,7 @@
   uint32_t m_LastObjNum;
   std::map<uint32_t, std::unique_ptr<CPDF_Object>> m_IndirectObjs;
   std::vector<std::unique_ptr<CPDF_Object>> m_OrphanObjs;
-  CFX_WeakPtr<CFX_ByteStringPool> m_pByteStringPool;
+  CFX_WeakPtr<ByteStringPool> m_pByteStringPool;
 };
 
 #endif  // CORE_FPDFAPI_PARSER_CPDF_INDIRECT_OBJECT_HOLDER_H_
diff --git a/core/fpdfapi/parser/cpdf_name.cpp b/core/fpdfapi/parser/cpdf_name.cpp
index ae33bc7..0dd9890 100644
--- a/core/fpdfapi/parser/cpdf_name.cpp
+++ b/core/fpdfapi/parser/cpdf_name.cpp
@@ -10,8 +10,7 @@
 #include "core/fxcrt/fx_stream.h"
 #include "third_party/base/ptr_util.h"
 
-CPDF_Name::CPDF_Name(CFX_WeakPtr<CFX_ByteStringPool> pPool,
-                     const CFX_ByteString& str)
+CPDF_Name::CPDF_Name(CFX_WeakPtr<ByteStringPool> pPool, const ByteString& str)
     : m_Name(str) {
   if (pPool)
     m_Name = pPool->Intern(m_Name);
@@ -27,11 +26,11 @@
   return pdfium::MakeUnique<CPDF_Name>(nullptr, m_Name);
 }
 
-CFX_ByteString CPDF_Name::GetString() const {
+ByteString CPDF_Name::GetString() const {
   return m_Name;
 }
 
-void CPDF_Name::SetString(const CFX_ByteString& str) {
+void CPDF_Name::SetString(const ByteString& str) {
   m_Name = str;
 }
 
@@ -47,11 +46,11 @@
   return this;
 }
 
-CFX_WideString CPDF_Name::GetUnicodeText() const {
+WideString CPDF_Name::GetUnicodeText() const {
   return PDF_DecodeText(m_Name);
 }
 
 bool CPDF_Name::WriteTo(IFX_ArchiveStream* archive) const {
   return archive->WriteString("/") &&
-         archive->WriteString(PDF_NameEncode(GetString()).AsStringC());
+         archive->WriteString(PDF_NameEncode(GetString()).AsStringView());
 }
diff --git a/core/fpdfapi/parser/cpdf_name.h b/core/fpdfapi/parser/cpdf_name.h
index 616f35f..72a72a3 100644
--- a/core/fpdfapi/parser/cpdf_name.h
+++ b/core/fpdfapi/parser/cpdf_name.h
@@ -15,22 +15,22 @@
 
 class CPDF_Name : public CPDF_Object {
  public:
-  CPDF_Name(CFX_WeakPtr<CFX_ByteStringPool> pPool, const CFX_ByteString& str);
+  CPDF_Name(CFX_WeakPtr<ByteStringPool> pPool, const ByteString& str);
   ~CPDF_Name() override;
 
   // CPDF_Object:
   Type GetType() const override;
   std::unique_ptr<CPDF_Object> Clone() const override;
-  CFX_ByteString GetString() const override;
-  CFX_WideString GetUnicodeText() const override;
-  void SetString(const CFX_ByteString& str) override;
+  ByteString GetString() const override;
+  WideString GetUnicodeText() const override;
+  void SetString(const ByteString& str) override;
   bool IsName() const override;
   CPDF_Name* AsName() override;
   const CPDF_Name* AsName() const override;
   bool WriteTo(IFX_ArchiveStream* archive) const override;
 
  protected:
-  CFX_ByteString m_Name;
+  ByteString m_Name;
 };
 
 inline CPDF_Name* ToName(CPDF_Object* obj) {
diff --git a/core/fpdfapi/parser/cpdf_number.cpp b/core/fpdfapi/parser/cpdf_number.cpp
index 9afe30a..dac1f40 100644
--- a/core/fpdfapi/parser/cpdf_number.cpp
+++ b/core/fpdfapi/parser/cpdf_number.cpp
@@ -14,7 +14,7 @@
 
 CPDF_Number::CPDF_Number(float value) : m_bInteger(false), m_Float(value) {}
 
-CPDF_Number::CPDF_Number(const CFX_ByteStringC& str)
+CPDF_Number::CPDF_Number(const ByteStringView& str)
     : m_bInteger(FX_atonum(str, &m_Integer)) {}
 
 CPDF_Number::~CPDF_Number() {}
@@ -48,16 +48,16 @@
   return this;
 }
 
-void CPDF_Number::SetString(const CFX_ByteString& str) {
-  m_bInteger = FX_atonum(str.AsStringC(), &m_Integer);
+void CPDF_Number::SetString(const ByteString& str) {
+  m_bInteger = FX_atonum(str.AsStringView(), &m_Integer);
 }
 
-CFX_ByteString CPDF_Number::GetString() const {
-  return m_bInteger ? CFX_ByteString::FormatInteger(m_Integer)
-                    : CFX_ByteString::FormatFloat(m_Float);
+ByteString CPDF_Number::GetString() const {
+  return m_bInteger ? ByteString::FormatInteger(m_Integer)
+                    : ByteString::FormatFloat(m_Float);
 }
 
 bool CPDF_Number::WriteTo(IFX_ArchiveStream* archive) const {
   return archive->WriteString(" ") &&
-         archive->WriteString(GetString().AsStringC());
+         archive->WriteString(GetString().AsStringView());
 }
diff --git a/core/fpdfapi/parser/cpdf_number.h b/core/fpdfapi/parser/cpdf_number.h
index 57f8227..6611773 100644
--- a/core/fpdfapi/parser/cpdf_number.h
+++ b/core/fpdfapi/parser/cpdf_number.h
@@ -18,16 +18,16 @@
   CPDF_Number();
   explicit CPDF_Number(int value);
   explicit CPDF_Number(float value);
-  explicit CPDF_Number(const CFX_ByteStringC& str);
+  explicit CPDF_Number(const ByteStringView& str);
   ~CPDF_Number() override;
 
   // CPDF_Object:
   Type GetType() const override;
   std::unique_ptr<CPDF_Object> Clone() const override;
-  CFX_ByteString GetString() const override;
+  ByteString GetString() const override;
   float GetNumber() const override;
   int GetInteger() const override;
-  void SetString(const CFX_ByteString& str) override;
+  void SetString(const ByteString& str) override;
   bool IsNumber() const override;
   CPDF_Number* AsNumber() override;
   const CPDF_Number* AsNumber() const override;
diff --git a/core/fpdfapi/parser/cpdf_object.cpp b/core/fpdfapi/parser/cpdf_object.cpp
index b35c6e5..67632a0 100644
--- a/core/fpdfapi/parser/cpdf_object.cpp
+++ b/core/fpdfapi/parser/cpdf_object.cpp
@@ -39,12 +39,12 @@
   return Clone();
 }
 
-CFX_ByteString CPDF_Object::GetString() const {
-  return CFX_ByteString();
+ByteString CPDF_Object::GetString() const {
+  return ByteString();
 }
 
-CFX_WideString CPDF_Object::GetUnicodeText() const {
-  return CFX_WideString();
+WideString CPDF_Object::GetUnicodeText() const {
+  return WideString();
 }
 
 float CPDF_Object::GetNumber() const {
@@ -59,7 +59,7 @@
   return nullptr;
 }
 
-void CPDF_Object::SetString(const CFX_ByteString& str) {
+void CPDF_Object::SetString(const ByteString& str) {
   NOTREACHED();
 }
 
diff --git a/core/fpdfapi/parser/cpdf_object.h b/core/fpdfapi/parser/cpdf_object.h
index a07ba67..4d4279f 100644
--- a/core/fpdfapi/parser/cpdf_object.h
+++ b/core/fpdfapi/parser/cpdf_object.h
@@ -55,13 +55,13 @@
   virtual std::unique_ptr<CPDF_Object> CloneDirectObject() const;
 
   virtual CPDF_Object* GetDirect() const;
-  virtual CFX_ByteString GetString() const;
-  virtual CFX_WideString GetUnicodeText() const;
+  virtual ByteString GetString() const;
+  virtual WideString GetUnicodeText() const;
   virtual float GetNumber() const;
   virtual int GetInteger() const;
   virtual CPDF_Dictionary* GetDict() const;
 
-  virtual void SetString(const CFX_ByteString& str);
+  virtual void SetString(const ByteString& str);
 
   virtual bool IsArray() const;
   virtual bool IsBoolean() const;
diff --git a/core/fpdfapi/parser/cpdf_object_walker.cpp b/core/fpdfapi/parser/cpdf_object_walker.cpp
index c6e0f00..cb59a05 100644
--- a/core/fpdfapi/parser/cpdf_object_walker.cpp
+++ b/core/fpdfapi/parser/cpdf_object_walker.cpp
@@ -57,11 +57,11 @@
     dict_iterator_ = object()->GetDict()->begin();
   }
 
-  const CFX_ByteString& dict_key() const { return dict_key_; }
+  const ByteString& dict_key() const { return dict_key_; }
 
  private:
   CPDF_Dictionary::const_iterator dict_iterator_;
-  CFX_ByteString dict_key_;
+  ByteString dict_key_;
 };
 
 class ArrayIterator : public CPDF_ObjectWalker::SubobjectIterator {
@@ -149,11 +149,11 @@
       parent_object_ = it->object();
       dict_key_ = parent_object_->IsDictionary()
                       ? static_cast<DictionaryIterator*>(it)->dict_key()
-                      : CFX_ByteString();
+                      : ByteString();
       current_depth_ = stack_.size();
     }
   }
-  dict_key_ = CFX_ByteString();
+  dict_key_ = ByteString();
   current_depth_ = 0;
   return nullptr;
 }
diff --git a/core/fpdfapi/parser/cpdf_object_walker.h b/core/fpdfapi/parser/cpdf_object_walker.h
index 5590440..8cad3c3 100644
--- a/core/fpdfapi/parser/cpdf_object_walker.h
+++ b/core/fpdfapi/parser/cpdf_object_walker.h
@@ -41,7 +41,7 @@
 
   size_t current_depth() const { return current_depth_; }
   const CPDF_Object* GetParent() const { return parent_object_; }
-  const CFX_ByteString& dictionary_key() const { return dict_key_; }
+  const ByteString& dictionary_key() const { return dict_key_; }
 
  private:
   static std::unique_ptr<SubobjectIterator> MakeIterator(
@@ -50,7 +50,7 @@
   const CPDF_Object* next_object_;
   const CPDF_Object* parent_object_;
 
-  CFX_ByteString dict_key_;
+  ByteString dict_key_;
   size_t current_depth_;
 
   std::stack<std::unique_ptr<SubobjectIterator>> stack_;
diff --git a/core/fpdfapi/parser/cpdf_parser.cpp b/core/fpdfapi/parser/cpdf_parser.cpp
index a9cad02..b0a8126 100644
--- a/core/fpdfapi/parser/cpdf_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_parser.cpp
@@ -239,7 +239,7 @@
     m_pSyntax->GetKeyword();
 
     bool bNumber;
-    CFX_ByteString xrefpos_str = m_pSyntax->GetNextWord(&bNumber);
+    ByteString xrefpos_str = m_pSyntax->GetNextWord(&bNumber);
     if (!bNumber)
       return FORMAT_ERROR;
 
@@ -314,7 +314,7 @@
   }
 
   if (m_pEncryptDict) {
-    CFX_ByteString filter = m_pEncryptDict->GetStringFor("Filter");
+    ByteString filter = m_pEncryptDict->GetStringFor("Filter");
     if (filter != "Standard")
       return HANDLER_ERROR;
 
@@ -364,7 +364,7 @@
     FX_FILESIZE SavedPos = m_pSyntax->GetPos();
     m_pSyntax->SetPos(it.second.pos);
     bool is_num = false;
-    CFX_ByteString num_str = m_pSyntax->GetNextWord(&is_num);
+    ByteString num_str = m_pSyntax->GetNextWord(&is_num);
     m_pSyntax->SetPos(SavedPos);
     if (!is_num || num_str.IsEmpty() ||
         FXSYS_atoui(num_str.c_str()) != it.first) {
@@ -593,7 +593,7 @@
   while (1) {
     FX_FILESIZE SavedPos = m_pSyntax->GetPos();
     bool bIsNumber;
-    CFX_ByteString word = m_pSyntax->GetNextWord(&bIsNumber);
+    ByteString word = m_pSyntax->GetNextWord(&bIsNumber);
     if (word.IsEmpty()) {
       return false;
     }
@@ -884,7 +884,7 @@
                            m_ObjectInfo[pRef->GetRefObjNum()].pos != 0)) {
                         auto it = pTrailer->begin();
                         while (it != pTrailer->end()) {
-                          const CFX_ByteString& key = it->first;
+                          const ByteString& key = it->first;
                           CPDF_Object* pElement = it->second.get();
                           ++it;
                           uint32_t dwObjNum =
@@ -903,11 +903,10 @@
                                                         : std::move(pObj)));
 
                       FX_FILESIZE dwSavePos = m_pSyntax->GetPos();
-                      CFX_ByteString strWord = m_pSyntax->GetKeyword();
+                      ByteString strWord = m_pSyntax->GetKeyword();
                       if (!strWord.Compare("startxref")) {
                         bool bNumber;
-                        CFX_ByteString bsOffset =
-                            m_pSyntax->GetNextWord(&bNumber);
+                        ByteString bsOffset = m_pSyntax->GetNextWord(&bNumber);
                         if (bNumber)
                           m_LastXRefOffset = FXSYS_atoi(bsOffset.c_str());
                       }
@@ -1316,7 +1315,7 @@
 
   FX_FILESIZE SavedPos = m_pSyntax->GetPos();
   bool bIsNumber;
-  CFX_ByteString word = m_pSyntax->GetNextWord(&bIsNumber);
+  ByteString word = m_pSyntax->GetNextWord(&bIsNumber);
   if (!bIsNumber)
     return false;
 
diff --git a/core/fpdfapi/parser/cpdf_parser.h b/core/fpdfapi/parser/cpdf_parser.h
index b4d0bee..20bd6be 100644
--- a/core/fpdfapi/parser/cpdf_parser.h
+++ b/core/fpdfapi/parser/cpdf_parser.h
@@ -63,7 +63,7 @@
                              CPDF_Document* pDocument);
 
   void SetPassword(const char* password) { m_Password = password; }
-  CFX_ByteString GetPassword() { return m_Password; }
+  ByteString GetPassword() { return m_Password; }
   CPDF_Dictionary* GetTrailer() const;
   FX_FILESIZE GetLastXRefOffset() const { return m_LastXRefOffset; }
 
@@ -199,7 +199,7 @@
   CFX_UnownedPtr<CPDF_Dictionary> m_pEncryptDict;
   FX_FILESIZE m_LastXRefOffset;
   std::unique_ptr<CPDF_SecurityHandler> m_pSecurityHandler;
-  CFX_ByteString m_Password;
+  ByteString m_Password;
   std::unique_ptr<TrailerData> m_TrailerData;
   std::unique_ptr<CPDF_LinearizedHeader> m_pLinearized;
   uint32_t m_dwLinearizedFirstPageXRefStartObjNum;
diff --git a/core/fpdfapi/parser/cpdf_reference.cpp b/core/fpdfapi/parser/cpdf_reference.cpp
index ce4c308..2ca0bdd 100644
--- a/core/fpdfapi/parser/cpdf_reference.cpp
+++ b/core/fpdfapi/parser/cpdf_reference.cpp
@@ -20,9 +20,9 @@
   return REFERENCE;
 }
 
-CFX_ByteString CPDF_Reference::GetString() const {
+ByteString CPDF_Reference::GetString() const {
   CPDF_Object* obj = SafeGetDirect();
-  return obj ? obj->GetString() : CFX_ByteString();
+  return obj ? obj->GetString() : ByteString();
 }
 
 float CPDF_Reference::GetNumber() const {
diff --git a/core/fpdfapi/parser/cpdf_reference.h b/core/fpdfapi/parser/cpdf_reference.h
index ab16030..f564ab5 100644
--- a/core/fpdfapi/parser/cpdf_reference.h
+++ b/core/fpdfapi/parser/cpdf_reference.h
@@ -24,7 +24,7 @@
   Type GetType() const override;
   std::unique_ptr<CPDF_Object> Clone() const override;
   CPDF_Object* GetDirect() const override;
-  CFX_ByteString GetString() const override;
+  ByteString GetString() const override;
   float GetNumber() const override;
   int GetInteger() const override;
   CPDF_Dictionary* GetDict() const override;
diff --git a/core/fpdfapi/parser/cpdf_security_handler.cpp b/core/fpdfapi/parser/cpdf_security_handler.cpp
index 03b90ab..b838e9c 100644
--- a/core/fpdfapi/parser/cpdf_security_handler.cpp
+++ b/core/fpdfapi/parser/cpdf_security_handler.cpp
@@ -42,12 +42,12 @@
   CRYPT_md5_context md5;
   CRYPT_MD5Start(&md5);
   CRYPT_MD5Update(&md5, passcode, 32);
-  CFX_ByteString okey = pEncrypt->GetStringFor("O");
+  ByteString okey = pEncrypt->GetStringFor("O");
   CRYPT_MD5Update(&md5, (uint8_t*)okey.c_str(), okey.GetLength());
   uint32_t perm = pEncrypt->GetIntegerFor("P");
   CRYPT_MD5Update(&md5, (uint8_t*)&perm, 4);
   if (pIdArray) {
-    CFX_ByteString id = pIdArray->GetStringAt(0);
+    ByteString id = pIdArray->GetStringAt(0);
     CRYPT_MD5Update(&md5, (uint8_t*)id.c_str(), id.GetLength());
   }
   if (!bIgnoreMeta && revision >= 3 &&
@@ -97,7 +97,7 @@
 }
 
 bool CPDF_SecurityHandler::CheckSecurity(int32_t key_len) {
-  CFX_ByteString password = m_pParser->GetPassword();
+  ByteString password = m_pParser->GetPassword();
   if (!password.IsEmpty() &&
       CheckPassword(password.raw_str(), password.GetLength(), true,
                     m_EncryptKey, key_len)) {
@@ -113,7 +113,7 @@
 }
 
 static bool LoadCryptInfo(CPDF_Dictionary* pEncryptDict,
-                          const CFX_ByteString& name,
+                          const ByteString& name,
                           int& cipher,
                           int& keylen) {
   int Version = pEncryptDict->GetIntegerFor("V");
@@ -144,7 +144,7 @@
         nKeyBits *= 8;
       }
       keylen = nKeyBits / 8;
-      CFX_ByteString cipher_name = pDefFilter->GetStringFor("CFM");
+      ByteString cipher_name = pDefFilter->GetStringFor("CFM");
       if (cipher_name == "AESV2" || cipher_name == "AESV3") {
         cipher = FXCIPHER_AES;
       }
@@ -164,10 +164,10 @@
   m_Revision = pEncryptDict->GetIntegerFor("R");
   m_Permissions = pEncryptDict->GetIntegerFor("P", -1);
   if (m_Version < 4)
-    return LoadCryptInfo(pEncryptDict, CFX_ByteString(), m_Cipher, m_KeyLen);
+    return LoadCryptInfo(pEncryptDict, ByteString(), m_Cipher, m_KeyLen);
 
-  CFX_ByteString stmf_name = pEncryptDict->GetStringFor("StmF");
-  CFX_ByteString strf_name = pEncryptDict->GetStringFor("StrF");
+  ByteString stmf_name = pEncryptDict->GetStringFor("StmF");
+  ByteString strf_name = pEncryptDict->GetStringFor("StrF");
   if (stmf_name != strf_name)
     return false;
 
@@ -183,8 +183,8 @@
   m_Revision = pEncryptDict->GetIntegerFor("R");
   m_Permissions = pEncryptDict->GetIntegerFor("P", -1);
 
-  CFX_ByteString strf_name;
-  CFX_ByteString stmf_name;
+  ByteString strf_name;
+  ByteString stmf_name;
   if (m_Version >= 4) {
     stmf_name = pEncryptDict->GetStringFor("StmF");
     strf_name = pEncryptDict->GetStringFor("StrF");
@@ -310,11 +310,11 @@
   if (!m_pEncryptDict)
     return false;
 
-  CFX_ByteString okey = m_pEncryptDict->GetStringFor("O");
+  ByteString okey = m_pEncryptDict->GetStringFor("O");
   if (okey.GetLength() < 48)
     return false;
 
-  CFX_ByteString ukey = m_pEncryptDict->GetStringFor("U");
+  ByteString ukey = m_pEncryptDict->GetStringFor("U");
   if (ukey.GetLength() < 48)
     return false;
 
@@ -351,9 +351,9 @@
 
     CRYPT_SHA256Finish(&sha, digest);
   }
-  CFX_ByteString ekey = m_pEncryptDict
-                            ? m_pEncryptDict->GetStringFor(bOwner ? "OE" : "UE")
-                            : CFX_ByteString();
+  ByteString ekey = m_pEncryptDict
+                        ? m_pEncryptDict->GetStringFor(bOwner ? "OE" : "UE")
+                        : ByteString();
   if (ekey.GetLength() < 32)
     return false;
 
@@ -366,7 +366,7 @@
   CRYPT_AESDecrypt(&aes, key, ekey.raw_str(), 32);
   CRYPT_AESSetKey(&aes, 16, key, 32, false);
   CRYPT_AESSetIV(&aes, iv);
-  CFX_ByteString perms = m_pEncryptDict->GetStringFor("Perms");
+  ByteString perms = m_pEncryptDict->GetStringFor("Perms");
   if (perms.IsEmpty())
     return false;
 
@@ -415,8 +415,8 @@
                                              int32_t key_len) {
   CalcEncryptKey(m_pEncryptDict.Get(), password, pass_size, key, key_len,
                  bIgnoreEncryptMeta, m_pParser->GetIDArray());
-  CFX_ByteString ukey =
-      m_pEncryptDict ? m_pEncryptDict->GetStringFor("U") : CFX_ByteString();
+  ByteString ukey =
+      m_pEncryptDict ? m_pEncryptDict->GetStringFor("U") : ByteString();
   if (ukey.GetLength() < 16) {
     return false;
   }
@@ -443,7 +443,7 @@
     CRYPT_MD5Update(&md5, defpasscode, 32);
     CPDF_Array* pIdArray = m_pParser->GetIDArray();
     if (pIdArray) {
-      CFX_ByteString id = pIdArray->GetStringAt(0);
+      ByteString id = pIdArray->GetStringAt(0);
       CRYPT_MD5Update(&md5, (uint8_t*)id.c_str(), id.GetLength());
     }
     CRYPT_MD5Finish(&md5, ukeybuf);
@@ -452,10 +452,10 @@
   return memcmp(ukey.c_str(), ukeybuf, 16) == 0;
 }
 
-CFX_ByteString CPDF_SecurityHandler::GetUserPassword(const uint8_t* owner_pass,
-                                                     uint32_t pass_size,
-                                                     int32_t key_len) {
-  CFX_ByteString okey = m_pEncryptDict->GetStringFor("O");
+ByteString CPDF_SecurityHandler::GetUserPassword(const uint8_t* owner_pass,
+                                                 uint32_t pass_size,
+                                                 int32_t key_len) {
+  ByteString okey = m_pEncryptDict->GetStringFor("O");
   uint8_t passcode[32];
   for (uint32_t i = 0; i < 32; i++) {
     passcode[i] = i < pass_size ? owner_pass[i] : defpasscode[i - pass_size];
@@ -496,13 +496,13 @@
   while (len && defpasscode[len - 1] == okeybuf[len - 1]) {
     len--;
   }
-  return CFX_ByteString(okeybuf, len);
+  return ByteString(okeybuf, len);
 }
 bool CPDF_SecurityHandler::CheckOwnerPassword(const uint8_t* password,
                                               uint32_t pass_size,
                                               uint8_t* key,
                                               int32_t key_len) {
-  CFX_ByteString user_pass = GetUserPassword(password, pass_size, key_len);
+  ByteString user_pass = GetUserPassword(password, pass_size, key_len);
   if (CheckUserPassword(user_pass.raw_str(), user_pass.GetLength(), false, key,
                         key_len)) {
     return true;
@@ -575,8 +575,7 @@
         CRYPT_ArcFourCryptBlock(passcode, 32, tempkey, key_len);
       }
     }
-    pEncryptDict->SetNewFor<CPDF_String>("O", CFX_ByteString(passcode, 32),
-                                         false);
+    pEncryptDict->SetNewFor<CPDF_String>("O", ByteString(passcode, 32), false);
   }
   CalcEncryptKey(m_pEncryptDict.Get(), (uint8_t*)user_pass, user_size,
                  m_EncryptKey, key_len, false, pIdArray);
@@ -584,14 +583,13 @@
     uint8_t tempbuf[32];
     memcpy(tempbuf, defpasscode, 32);
     CRYPT_ArcFourCryptBlock(tempbuf, 32, m_EncryptKey, key_len);
-    pEncryptDict->SetNewFor<CPDF_String>("U", CFX_ByteString(tempbuf, 32),
-                                         false);
+    pEncryptDict->SetNewFor<CPDF_String>("U", ByteString(tempbuf, 32), false);
   } else {
     CRYPT_md5_context md5;
     CRYPT_MD5Start(&md5);
     CRYPT_MD5Update(&md5, defpasscode, 32);
     if (pIdArray) {
-      CFX_ByteString id = pIdArray->GetStringAt(0);
+      ByteString id = pIdArray->GetStringAt(0);
       CRYPT_MD5Update(&md5, (uint8_t*)id.c_str(), id.GetLength());
     }
     uint8_t digest[32];
@@ -605,8 +603,7 @@
       CRYPT_ArcFourCryptBlock(digest, 16, tempkey, key_len);
     }
     CRYPT_MD5Generate(digest, 16, digest + 16);
-    pEncryptDict->SetNewFor<CPDF_String>("U", CFX_ByteString(digest, 32),
-                                         false);
+    pEncryptDict->SetNewFor<CPDF_String>("U", ByteString(digest, 32), false);
   }
 }
 void CPDF_SecurityHandler::OnCreate(CPDF_Dictionary* pEncryptDict,
@@ -640,7 +637,7 @@
   uint8_t digest[20];
   CRYPT_SHA1Finish(&sha, digest);
 
-  CFX_ByteString ukey = pEncryptDict->GetStringFor("U");
+  ByteString ukey = pEncryptDict->GetStringFor("U");
   CRYPT_sha2_context sha2;
   uint8_t digest1[48];
   if (m_Revision >= 6) {
@@ -657,7 +654,7 @@
   }
   memcpy(digest1 + 32, digest, 16);
   pEncryptDict->SetNewFor<CPDF_String>(bOwner ? "O" : "U",
-                                       CFX_ByteString(digest1, 48), false);
+                                       ByteString(digest1, 48), false);
   if (m_Revision >= 6) {
     Revision6_Hash(password, size, digest + 8,
                    bOwner ? ukey.raw_str() : nullptr, digest1);
@@ -678,7 +675,7 @@
   CRYPT_AESSetIV(&aes, iv);
   CRYPT_AESEncrypt(&aes, digest1, key, 32);
   pEncryptDict->SetNewFor<CPDF_String>(bOwner ? "OE" : "UE",
-                                       CFX_ByteString(digest1, 32), false);
+                                       ByteString(digest1, 32), false);
 }
 
 void CPDF_SecurityHandler::AES256_SetPerms(CPDF_Dictionary* pEncryptDict,
@@ -709,6 +706,5 @@
 
   uint8_t buf1[16];
   CRYPT_AESEncrypt(&aes, buf1, buf, 16);
-  pEncryptDict->SetNewFor<CPDF_String>("Perms", CFX_ByteString(buf1, 16),
-                                       false);
+  pEncryptDict->SetNewFor<CPDF_String>("Perms", ByteString(buf1, 16), false);
 }
diff --git a/core/fpdfapi/parser/cpdf_security_handler.h b/core/fpdfapi/parser/cpdf_security_handler.h
index 27f7f7c..eb7d13f 100644
--- a/core/fpdfapi/parser/cpdf_security_handler.h
+++ b/core/fpdfapi/parser/cpdf_security_handler.h
@@ -46,9 +46,9 @@
                 uint32_t user_size,
                 uint32_t type = PDF_ENCRYPT_CONTENT);
 
-  CFX_ByteString GetUserPassword(const uint8_t* owner_pass,
-                                 uint32_t pass_size,
-                                 int32_t key_len);
+  ByteString GetUserPassword(const uint8_t* owner_pass,
+                             uint32_t pass_size,
+                             int32_t key_len);
   bool CheckPassword(const uint8_t* password,
                      uint32_t pass_size,
                      bool bOwner,
diff --git a/core/fpdfapi/parser/cpdf_simple_parser.cpp b/core/fpdfapi/parser/cpdf_simple_parser.cpp
index 650c216..d800796 100644
--- a/core/fpdfapi/parser/cpdf_simple_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_simple_parser.cpp
@@ -11,7 +11,7 @@
 CPDF_SimpleParser::CPDF_SimpleParser(const uint8_t* pData, uint32_t dwSize)
     : m_pData(pData), m_dwSize(dwSize), m_dwCurPos(0) {}
 
-CPDF_SimpleParser::CPDF_SimpleParser(const CFX_ByteStringC& str)
+CPDF_SimpleParser::CPDF_SimpleParser(const ByteStringView& str)
     : m_pData(str.raw_str()), m_dwSize(str.GetLength()), m_dwCurPos(0) {}
 
 void CPDF_SimpleParser::ParseWord(const uint8_t*& pStart, uint32_t& dwSize) {
@@ -91,7 +91,7 @@
   }
 }
 
-CFX_ByteStringC CPDF_SimpleParser::GetWord() {
+ByteStringView CPDF_SimpleParser::GetWord() {
   const uint8_t* pStart;
   uint32_t dwSize;
   ParseWord(pStart, dwSize);
@@ -102,8 +102,8 @@
     if (m_dwCurPos < m_dwSize) {
       m_dwCurPos++;
     }
-    return CFX_ByteStringC(pStart,
-                           (FX_STRSIZE)(m_dwCurPos - (pStart - m_pData)));
+    return ByteStringView(pStart,
+                          (FX_STRSIZE)(m_dwCurPos - (pStart - m_pData)));
   }
   if (dwSize == 1 && pStart[0] == '(') {
     int level = 1;
@@ -130,13 +130,13 @@
     if (m_dwCurPos < m_dwSize) {
       m_dwCurPos++;
     }
-    return CFX_ByteStringC(pStart,
-                           (FX_STRSIZE)(m_dwCurPos - (pStart - m_pData)));
+    return ByteStringView(pStart,
+                          (FX_STRSIZE)(m_dwCurPos - (pStart - m_pData)));
   }
-  return CFX_ByteStringC(pStart, dwSize);
+  return ByteStringView(pStart, dwSize);
 }
 
-bool CPDF_SimpleParser::FindTagParamFromStart(const CFX_ByteStringC& token,
+bool CPDF_SimpleParser::FindTagParamFromStart(const ByteStringView& token,
                                               int nParams) {
   nParams++;
   uint32_t* pBuf = FX_Alloc(uint32_t, nParams);
@@ -152,7 +152,7 @@
     if (buf_count > nParams) {
       buf_count = nParams;
     }
-    CFX_ByteStringC word = GetWord();
+    ByteStringView word = GetWord();
     if (word.IsEmpty()) {
       FX_Free(pBuf);
       return false;
diff --git a/core/fpdfapi/parser/cpdf_simple_parser.h b/core/fpdfapi/parser/cpdf_simple_parser.h
index 0ff6985..72cf700 100644
--- a/core/fpdfapi/parser/cpdf_simple_parser.h
+++ b/core/fpdfapi/parser/cpdf_simple_parser.h
@@ -13,13 +13,13 @@
 class CPDF_SimpleParser {
  public:
   CPDF_SimpleParser(const uint8_t* pData, uint32_t dwSize);
-  explicit CPDF_SimpleParser(const CFX_ByteStringC& str);
+  explicit CPDF_SimpleParser(const ByteStringView& str);
 
-  CFX_ByteStringC GetWord();
+  ByteStringView GetWord();
 
   // Find the token and its |nParams| parameters from the start of data,
   // and move the current position to the start of those parameters.
-  bool FindTagParamFromStart(const CFX_ByteStringC& token, int nParams);
+  bool FindTagParamFromStart(const ByteStringView& token, int nParams);
 
   // For testing only.
   uint32_t GetCurPos() const { return m_dwCurPos; }
diff --git a/core/fpdfapi/parser/cpdf_simple_parser_unittest.cpp b/core/fpdfapi/parser/cpdf_simple_parser_unittest.cpp
index bdb532d..a2f4338 100644
--- a/core/fpdfapi/parser/cpdf_simple_parser_unittest.cpp
+++ b/core/fpdfapi/parser/cpdf_simple_parser_unittest.cpp
@@ -50,7 +50,7 @@
   for (size_t i = 0; i < FX_ArraySize(test_data); ++i) {
     const pdfium::StrFuncTestData& data = test_data[i];
     CPDF_SimpleParser parser(data.input, data.input_size);
-    CFX_ByteStringC word = parser.GetWord();
+    ByteStringView word = parser.GetWord();
     EXPECT_EQ(std::string(reinterpret_cast<const char*>(data.expected),
                           data.expected_size),
               std::string(word.unterminated_c_str(), word.GetLength()))
diff --git a/core/fpdfapi/parser/cpdf_stream.cpp b/core/fpdfapi/parser/cpdf_stream.cpp
index fadaec1..c00096d 100644
--- a/core/fpdfapi/parser/cpdf_stream.cpp
+++ b/core/fpdfapi/parser/cpdf_stream.cpp
@@ -145,7 +145,7 @@
   return m_pDict && m_pDict->KeyExist("Filter");
 }
 
-CFX_WideString CPDF_Stream::GetUnicodeText() const {
+WideString CPDF_Stream::GetUnicodeText() const {
   auto pAcc = pdfium::MakeRetain<CPDF_StreamAcc>(this);
   pAcc->LoadAllData(false);
   return PDF_DecodeText(pAcc->GetData(), pAcc->GetSize());
diff --git a/core/fpdfapi/parser/cpdf_stream.h b/core/fpdfapi/parser/cpdf_stream.h
index 3c3b674..be70e05 100644
--- a/core/fpdfapi/parser/cpdf_stream.h
+++ b/core/fpdfapi/parser/cpdf_stream.h
@@ -30,7 +30,7 @@
   Type GetType() const override;
   std::unique_ptr<CPDF_Object> Clone() const override;
   CPDF_Dictionary* GetDict() const override;
-  CFX_WideString GetUnicodeText() const override;
+  WideString GetUnicodeText() const override;
   bool IsStream() const override;
   CPDF_Stream* AsStream() override;
   const CPDF_Stream* AsStream() const override;
diff --git a/core/fpdfapi/parser/cpdf_stream_acc.h b/core/fpdfapi/parser/cpdf_stream_acc.h
index bc03cb0..2161dd1 100644
--- a/core/fpdfapi/parser/cpdf_stream_acc.h
+++ b/core/fpdfapi/parser/cpdf_stream_acc.h
@@ -34,7 +34,7 @@
 
   const uint8_t* GetData() const;
   uint32_t GetSize() const;
-  const CFX_ByteString& GetImageDecoder() const { return m_ImageDecoder; }
+  const ByteString& GetImageDecoder() const { return m_ImageDecoder; }
   const CPDF_Dictionary* GetImageParam() const { return m_pImageParam; }
   std::unique_ptr<uint8_t, FxFreeDeleter> DetachData();
 
@@ -45,7 +45,7 @@
   uint8_t* m_pData;
   uint32_t m_dwSize;
   bool m_bNewBuf;
-  CFX_ByteString m_ImageDecoder;
+  ByteString m_ImageDecoder;
   CPDF_Dictionary* m_pImageParam;
   CFX_UnownedPtr<const CPDF_Stream> const m_pStream;
   uint8_t* m_pSrcData;
diff --git a/core/fpdfapi/parser/cpdf_string.cpp b/core/fpdfapi/parser/cpdf_string.cpp
index 6ce6bf3..1539861 100644
--- a/core/fpdfapi/parser/cpdf_string.cpp
+++ b/core/fpdfapi/parser/cpdf_string.cpp
@@ -14,16 +14,16 @@
 
 CPDF_String::CPDF_String() : m_bHex(false) {}
 
-CPDF_String::CPDF_String(CFX_WeakPtr<CFX_ByteStringPool> pPool,
-                         const CFX_ByteString& str,
+CPDF_String::CPDF_String(CFX_WeakPtr<ByteStringPool> pPool,
+                         const ByteString& str,
                          bool bHex)
     : m_String(str), m_bHex(bHex) {
   if (pPool)
     m_String = pPool->Intern(m_String);
 }
 
-CPDF_String::CPDF_String(CFX_WeakPtr<CFX_ByteStringPool> pPool,
-                         const CFX_WideString& str)
+CPDF_String::CPDF_String(CFX_WeakPtr<ByteStringPool> pPool,
+                         const WideString& str)
     : m_String(PDF_EncodeText(str)), m_bHex(false) {
   if (pPool)
     m_String = pPool->Intern(m_String);
@@ -42,11 +42,11 @@
   return std::move(pRet);
 }
 
-CFX_ByteString CPDF_String::GetString() const {
+ByteString CPDF_String::GetString() const {
   return m_String;
 }
 
-void CPDF_String::SetString(const CFX_ByteString& str) {
+void CPDF_String::SetString(const ByteString& str) {
   m_String = str;
 }
 
@@ -62,11 +62,11 @@
   return this;
 }
 
-CFX_WideString CPDF_String::GetUnicodeText() const {
+WideString CPDF_String::GetUnicodeText() const {
   return PDF_DecodeText(m_String);
 }
 
 bool CPDF_String::WriteTo(IFX_ArchiveStream* archive) const {
   return archive->WriteString(
-      PDF_EncodeString(GetString(), IsHex()).AsStringC());
+      PDF_EncodeString(GetString(), IsHex()).AsStringView());
 }
diff --git a/core/fpdfapi/parser/cpdf_string.h b/core/fpdfapi/parser/cpdf_string.h
index ccd6f53..9fd3e6a 100644
--- a/core/fpdfapi/parser/cpdf_string.h
+++ b/core/fpdfapi/parser/cpdf_string.h
@@ -18,18 +18,18 @@
 class CPDF_String : public CPDF_Object {
  public:
   CPDF_String();
-  CPDF_String(CFX_WeakPtr<CFX_ByteStringPool> pPool,
-              const CFX_ByteString& str,
+  CPDF_String(CFX_WeakPtr<ByteStringPool> pPool,
+              const ByteString& str,
               bool bHex);
-  CPDF_String(CFX_WeakPtr<CFX_ByteStringPool> pPool, const CFX_WideString& str);
+  CPDF_String(CFX_WeakPtr<ByteStringPool> pPool, const WideString& str);
   ~CPDF_String() override;
 
   // CPDF_Object:
   Type GetType() const override;
   std::unique_ptr<CPDF_Object> Clone() const override;
-  CFX_ByteString GetString() const override;
-  CFX_WideString GetUnicodeText() const override;
-  void SetString(const CFX_ByteString& str) override;
+  ByteString GetString() const override;
+  WideString GetUnicodeText() const override;
+  void SetString(const ByteString& str) override;
   bool IsString() const override;
   CPDF_String* AsString() override;
   const CPDF_String* AsString() const override;
@@ -38,7 +38,7 @@
   bool IsHex() const { return m_bHex; }
 
  protected:
-  CFX_ByteString m_String;
+  ByteString m_String;
   bool m_bHex;
 };
 
diff --git a/core/fpdfapi/parser/cpdf_syntax_parser.cpp b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
index 779bf81..4412105 100644
--- a/core/fpdfapi/parser/cpdf_syntax_parser.cpp
+++ b/core/fpdfapi/parser/cpdf_syntax_parser.cpp
@@ -41,10 +41,9 @@
 int CPDF_SyntaxParser::s_CurrentRecursionDepth = 0;
 
 CPDF_SyntaxParser::CPDF_SyntaxParser()
-    : CPDF_SyntaxParser(CFX_WeakPtr<CFX_ByteStringPool>()) {}
+    : CPDF_SyntaxParser(CFX_WeakPtr<ByteStringPool>()) {}
 
-CPDF_SyntaxParser::CPDF_SyntaxParser(
-    const CFX_WeakPtr<CFX_ByteStringPool>& pPool)
+CPDF_SyntaxParser::CPDF_SyntaxParser(const CFX_WeakPtr<ByteStringPool>& pPool)
     : m_MetadataObjnum(0),
       m_pFileAccess(nullptr),
       m_pFileBuf(nullptr),
@@ -187,10 +186,10 @@
   }
 }
 
-CFX_ByteString CPDF_SyntaxParser::ReadString() {
+ByteString CPDF_SyntaxParser::ReadString() {
   uint8_t ch;
   if (!GetNextChar(ch))
-    return CFX_ByteString();
+    return ByteString();
 
   std::ostringstream buf;
   int32_t parlevel = 0;
@@ -201,7 +200,7 @@
       case ReadStatus::Normal:
         if (ch == ')') {
           if (parlevel == 0)
-            return CFX_ByteString(buf);
+            return ByteString(buf);
           parlevel--;
         } else if (ch == '(') {
           parlevel++;
@@ -270,13 +269,13 @@
   }
 
   GetNextChar(ch);
-  return CFX_ByteString(buf);
+  return ByteString(buf);
 }
 
-CFX_ByteString CPDF_SyntaxParser::ReadHexString() {
+ByteString CPDF_SyntaxParser::ReadHexString() {
   uint8_t ch;
   if (!GetNextChar(ch))
-    return CFX_ByteString();
+    return ByteString();
 
   std::ostringstream buf;
   bool bFirst = true;
@@ -302,7 +301,7 @@
   if (!bFirst)
     buf << static_cast<char>(code);
 
-  return CFX_ByteString(buf);
+  return ByteString(buf);
 }
 
 void CPDF_SyntaxParser::ToNextLine() {
@@ -344,20 +343,20 @@
   m_Pos--;
 }
 
-CFX_ByteString CPDF_SyntaxParser::GetNextWord(bool* bIsNumber) {
+ByteString CPDF_SyntaxParser::GetNextWord(bool* bIsNumber) {
   const CPDF_ReadValidator::Session read_session(GetValidator().Get());
   GetNextWordInternal(bIsNumber);
   return GetValidator()->has_read_problems()
-             ? CFX_ByteString()
-             : CFX_ByteString((const char*)m_WordBuffer, m_WordSize);
+             ? ByteString()
+             : ByteString((const char*)m_WordBuffer, m_WordSize);
 }
 
-CFX_ByteString CPDF_SyntaxParser::PeekNextWord(bool* bIsNumber) {
+ByteString CPDF_SyntaxParser::PeekNextWord(bool* bIsNumber) {
   const CFX_AutoRestorer<FX_FILESIZE> save_pos(&m_Pos);
   return GetNextWord(bIsNumber);
 }
 
-CFX_ByteString CPDF_SyntaxParser::GetKeyword() {
+ByteString CPDF_SyntaxParser::GetKeyword() {
   return GetNextWord(nullptr);
 }
 
@@ -386,15 +385,15 @@
 
   FX_FILESIZE SavedObjPos = m_Pos;
   bool bIsNumber;
-  CFX_ByteString word = GetNextWord(&bIsNumber);
+  ByteString word = GetNextWord(&bIsNumber);
   if (word.GetLength() == 0)
     return nullptr;
 
   if (bIsNumber) {
     FX_FILESIZE SavedPos = m_Pos;
-    CFX_ByteString nextword = GetNextWord(&bIsNumber);
+    ByteString nextword = GetNextWord(&bIsNumber);
     if (bIsNumber) {
-      CFX_ByteString nextword2 = GetNextWord(nullptr);
+      ByteString nextword2 = GetNextWord(nullptr);
       if (nextword2 == "R") {
         uint32_t refnum = FXSYS_atoui(word.c_str());
         if (refnum == CPDF_Object::kInvalidObjNum)
@@ -403,7 +402,7 @@
       }
     }
     m_Pos = SavedPos;
-    return pdfium::MakeUnique<CPDF_Number>(word.AsStringC());
+    return pdfium::MakeUnique<CPDF_Number>(word.AsStringView());
   }
 
   if (word == "true" || word == "false")
@@ -413,13 +412,13 @@
     return pdfium::MakeUnique<CPDF_Null>();
 
   if (word == "(") {
-    CFX_ByteString str = ReadString();
+    ByteString str = ReadString();
     if (m_pCryptoHandler && bDecrypt)
       str = m_pCryptoHandler->Decrypt(objnum, gennum, str);
     return pdfium::MakeUnique<CPDF_String>(m_pPool, str, false);
   }
   if (word == "<") {
-    CFX_ByteString str = ReadHexString();
+    ByteString str = ReadHexString();
     if (m_pCryptoHandler && bDecrypt)
       str = m_pCryptoHandler->Decrypt(objnum, gennum, str);
     return pdfium::MakeUnique<CPDF_String>(m_pPool, str, true);
@@ -437,14 +436,14 @@
   if (word[0] == '/') {
     return pdfium::MakeUnique<CPDF_Name>(
         m_pPool,
-        PDF_NameDecode(CFX_ByteStringC(m_WordBuffer + 1, m_WordSize - 1)));
+        PDF_NameDecode(ByteStringView(m_WordBuffer + 1, m_WordSize - 1)));
   }
   if (word == "<<") {
     FX_FILESIZE dwSignValuePos = 0;
     std::unique_ptr<CPDF_Dictionary> pDict =
         pdfium::MakeUnique<CPDF_Dictionary>(m_pPool);
     while (1) {
-      CFX_ByteString key = GetNextWord(nullptr);
+      ByteString key = GetNextWord(nullptr);
       if (key.IsEmpty())
         return nullptr;
 
@@ -477,7 +476,7 @@
       }
 
       if (!key.IsEmpty()) {
-        CFX_ByteString keyNoSlash(key.raw_str() + 1, key.GetLength() - 1);
+        ByteString keyNoSlash(key.raw_str() + 1, key.GetLength() - 1);
         pDict->SetFor(keyNoSlash, std::move(pObj));
       }
     }
@@ -492,7 +491,7 @@
     }
 
     FX_FILESIZE SavedPos = m_Pos;
-    CFX_ByteString nextword = GetNextWord(nullptr);
+    ByteString nextword = GetNextWord(nullptr);
     if (nextword != "stream") {
       m_Pos = SavedPos;
       return std::move(pDict);
@@ -526,7 +525,7 @@
   const CPDF_ReadValidator::Session read_session(GetValidator().Get());
   const FX_FILESIZE saved_pos = GetPos();
   bool is_number = false;
-  CFX_ByteString word = GetNextWord(&is_number);
+  ByteString word = GetNextWord(&is_number);
   if (!is_number || word.IsEmpty()) {
     SetPos(saved_pos);
     return nullptr;
@@ -588,8 +587,8 @@
   ToNextLine();
   FX_FILESIZE streamStartPos = m_Pos;
 
-  const CFX_ByteStringC kEndStreamStr("endstream");
-  const CFX_ByteStringC kEndObjStr("endobj");
+  const ByteStringView kEndStreamStr("endstream");
+  const ByteStringView kEndObjStr("endobj");
 
   CPDF_CryptoHandler* pCryptoHandler =
       objnum == m_MetadataObjnum ? nullptr : m_pCryptoHandler.Get();
@@ -757,7 +756,7 @@
 
 bool CPDF_SyntaxParser::IsWholeWord(FX_FILESIZE startpos,
                                     FX_FILESIZE limit,
-                                    const CFX_ByteStringC& tag,
+                                    const ByteStringView& tag,
                                     bool checkKeyword) {
   const uint32_t taglen = tag.GetLength();
 
@@ -783,7 +782,7 @@
   return true;
 }
 
-bool CPDF_SyntaxParser::BackwardsSearchToWord(const CFX_ByteStringC& tag,
+bool CPDF_SyntaxParser::BackwardsSearchToWord(const ByteStringView& tag,
                                               FX_FILESIZE limit) {
   int32_t taglen = tag.GetLength();
   if (taglen == 0)
@@ -817,7 +816,7 @@
   }
 }
 
-FX_FILESIZE CPDF_SyntaxParser::FindTag(const CFX_ByteStringC& tag,
+FX_FILESIZE CPDF_SyntaxParser::FindTag(const ByteStringView& tag,
                                        FX_FILESIZE limit) {
   int32_t taglen = tag.GetLength();
   int32_t match = 0;
diff --git a/core/fpdfapi/parser/cpdf_syntax_parser.h b/core/fpdfapi/parser/cpdf_syntax_parser.h
index 179058e..4e28c2f 100644
--- a/core/fpdfapi/parser/cpdf_syntax_parser.h
+++ b/core/fpdfapi/parser/cpdf_syntax_parser.h
@@ -26,7 +26,7 @@
   enum class ParseType { kStrict, kLoose };
 
   CPDF_SyntaxParser();
-  explicit CPDF_SyntaxParser(const CFX_WeakPtr<CFX_ByteStringPool>& pPool);
+  explicit CPDF_SyntaxParser(const CFX_WeakPtr<ByteStringPool>& pPool);
   ~CPDF_SyntaxParser();
 
   void InitParser(const CFX_RetainPtr<IFX_SeekableReadStream>& pFileAccess,
@@ -56,16 +56,16 @@
       bool bDecrypt,
       ParseType parse_type);
 
-  CFX_ByteString GetKeyword();
+  ByteString GetKeyword();
   void ToNextLine();
   void ToNextWord();
-  bool BackwardsSearchToWord(const CFX_ByteStringC& word, FX_FILESIZE limit);
-  FX_FILESIZE FindTag(const CFX_ByteStringC& tag, FX_FILESIZE limit);
+  bool BackwardsSearchToWord(const ByteStringView& word, FX_FILESIZE limit);
+  FX_FILESIZE FindTag(const ByteStringView& tag, FX_FILESIZE limit);
   void SetEncrypt(const CFX_RetainPtr<CPDF_CryptoHandler>& pCryptoHandler);
   bool ReadBlock(uint8_t* pBuf, uint32_t size);
   bool GetCharAt(FX_FILESIZE pos, uint8_t& ch);
-  CFX_ByteString GetNextWord(bool* bIsNumber);
-  CFX_ByteString PeekNextWord(bool* bIsNumber);
+  ByteString GetNextWord(bool* bIsNumber);
+  ByteString PeekNextWord(bool* bIsNumber);
 
   CFX_RetainPtr<IFX_SeekableReadStream> GetFileAccess() const;
 
@@ -88,11 +88,11 @@
   void GetNextWordInternal(bool* bIsNumber);
   bool IsWholeWord(FX_FILESIZE startpos,
                    FX_FILESIZE limit,
-                   const CFX_ByteStringC& tag,
+                   const ByteStringView& tag,
                    bool checkKeyword);
 
-  CFX_ByteString ReadString();
-  CFX_ByteString ReadHexString();
+  ByteString ReadString();
+  ByteString ReadHexString();
   unsigned int ReadEOLMarkers(FX_FILESIZE pos);
   std::unique_ptr<CPDF_Stream> ReadStream(
       std::unique_ptr<CPDF_Dictionary> pDict,
@@ -122,7 +122,7 @@
   CFX_RetainPtr<CPDF_CryptoHandler> m_pCryptoHandler;
   uint8_t m_WordBuffer[257];
   uint32_t m_WordSize;
-  CFX_WeakPtr<CFX_ByteStringPool> m_pPool;
+  CFX_WeakPtr<ByteStringPool> m_pPool;
 };
 
 #endif  // CORE_FPDFAPI_PARSER_CPDF_SYNTAX_PARSER_H_
diff --git a/core/fpdfapi/parser/fpdf_parser_decode.cpp b/core/fpdfapi/parser/fpdf_parser_decode.cpp
index 77024f2..0180aaf 100644
--- a/core/fpdfapi/parser/fpdf_parser_decode.cpp
+++ b/core/fpdfapi/parser/fpdf_parser_decode.cpp
@@ -328,7 +328,7 @@
                     bool bImageAcc,
                     uint8_t** dest_buf,
                     uint32_t* dest_size,
-                    CFX_ByteString* ImageEncoding,
+                    ByteString* ImageEncoding,
                     CPDF_Dictionary** pImageParms) {
   CPDF_Object* pDecoder = pDict ? pDict->GetDirectObjectFor("Filter") : nullptr;
   if (!pDecoder || (!pDecoder->IsArray() && !pDecoder->IsName()))
@@ -337,7 +337,7 @@
   CPDF_Object* pParams =
       pDict ? pDict->GetDirectObjectFor("DecodeParms") : nullptr;
 
-  std::vector<std::pair<CFX_ByteString, CPDF_Object*>> DecoderArray;
+  std::vector<std::pair<ByteString, CPDF_Object*>> DecoderArray;
   if (CPDF_Array* pDecoders = pDecoder->AsArray()) {
     CPDF_Array* pParamsArray = ToArray(pParams);
     for (size_t i = 0; i < pDecoders->GetCount(); ++i) {
@@ -354,7 +354,7 @@
   int nSize = pdfium::CollectionSize<int>(DecoderArray);
   for (int i = 0; i < nSize; ++i) {
     int estimated_size = i == nSize - 1 ? last_estimated_size : 0;
-    CFX_ByteString decoder = DecoderArray[i].first;
+    ByteString decoder = DecoderArray[i].first;
     CPDF_Dictionary* pParam = ToDictionary(DecoderArray[i].second);
     uint8_t* new_buf = nullptr;
     uint32_t new_size = 0xFFFFFFFF;
@@ -415,8 +415,8 @@
   return true;
 }
 
-CFX_WideString PDF_DecodeText(const uint8_t* src_data, uint32_t src_len) {
-  CFX_WideString result;
+WideString PDF_DecodeText(const uint8_t* src_data, uint32_t src_len) {
+  WideString result;
   if (src_len >= 2 && ((src_data[0] == 0xfe && src_data[1] == 0xff) ||
                        (src_data[0] == 0xff && src_data[1] == 0xfe))) {
     bool bBE = src_data[0] == 0xfe;
@@ -455,16 +455,16 @@
   return result;
 }
 
-CFX_WideString PDF_DecodeText(const CFX_ByteString& bstr) {
+WideString PDF_DecodeText(const ByteString& bstr) {
   return PDF_DecodeText(reinterpret_cast<const uint8_t*>(bstr.c_str()),
                         bstr.GetLength());
 }
 
-CFX_ByteString PDF_EncodeText(const wchar_t* pString, int len) {
+ByteString PDF_EncodeText(const wchar_t* pString, int len) {
   if (len == -1)
     len = FXSYS_wcslen(pString);
 
-  CFX_ByteString result;
+  ByteString result;
   char* dest_buf1 = result.GetBuffer(len);
   int i;
   for (i = 0; i < len; ++i) {
@@ -502,11 +502,11 @@
   return result;
 }
 
-CFX_ByteString PDF_EncodeText(const CFX_WideString& str) {
+ByteString PDF_EncodeText(const WideString& str) {
   return PDF_EncodeText(str.c_str(), str.GetLength());
 }
 
-CFX_ByteString PDF_EncodeString(const CFX_ByteString& src, bool bHex) {
+ByteString PDF_EncodeString(const ByteString& src, bool bHex) {
   std::ostringstream result;
   int srclen = src.GetLength();
   if (bHex) {
@@ -518,7 +518,7 @@
       result << buf[1];
     }
     result << '>';
-    return CFX_ByteString(result);
+    return ByteString(result);
   }
   result << '(';
   for (int i = 0; i < srclen; ++i) {
@@ -536,7 +536,7 @@
     result << static_cast<char>(ch);
   }
   result << ')';
-  return CFX_ByteString(result);
+  return ByteString(result);
 }
 
 bool FlateEncode(const uint8_t* src_buf,
diff --git a/core/fpdfapi/parser/fpdf_parser_decode.h b/core/fpdfapi/parser/fpdf_parser_decode.h
index 23ca0a0..6650b68 100644
--- a/core/fpdfapi/parser/fpdf_parser_decode.h
+++ b/core/fpdfapi/parser/fpdf_parser_decode.h
@@ -17,14 +17,14 @@
 // Indexed by 8-bit char code, contains unicode code points.
 extern const uint16_t PDFDocEncoding[256];
 
-CFX_ByteString PDF_NameDecode(const CFX_ByteStringC& orig);
-CFX_ByteString PDF_NameDecode(const CFX_ByteString& orig);
-CFX_ByteString PDF_NameEncode(const CFX_ByteString& orig);
-CFX_ByteString PDF_EncodeString(const CFX_ByteString& src, bool bHex);
-CFX_WideString PDF_DecodeText(const uint8_t* pData, uint32_t size);
-CFX_WideString PDF_DecodeText(const CFX_ByteString& bstr);
-CFX_ByteString PDF_EncodeText(const wchar_t* pString, int len);
-CFX_ByteString PDF_EncodeText(const CFX_WideString& str);
+ByteString PDF_NameDecode(const ByteStringView& orig);
+ByteString PDF_NameDecode(const ByteString& orig);
+ByteString PDF_NameEncode(const ByteString& orig);
+ByteString PDF_EncodeString(const ByteString& src, bool bHex);
+WideString PDF_DecodeText(const uint8_t* pData, uint32_t size);
+WideString PDF_DecodeText(const ByteString& bstr);
+ByteString PDF_EncodeText(const wchar_t* pString, int len);
+ByteString PDF_EncodeText(const WideString& str);
 
 bool FlateEncode(const uint8_t* src_buf,
                  uint32_t src_size,
@@ -90,7 +90,7 @@
                     bool bImageAcc,
                     uint8_t** dest_buf,
                     uint32_t* dest_size,
-                    CFX_ByteString* ImageEncoding,
+                    ByteString* ImageEncoding,
                     CPDF_Dictionary** pImageParms);
 
 #endif  // CORE_FPDFAPI_PARSER_FPDF_PARSER_DECODE_H_
diff --git a/core/fpdfapi/parser/fpdf_parser_decode_unittest.cpp b/core/fpdfapi/parser/fpdf_parser_decode_unittest.cpp
index c8e0c7a..ae30959 100644
--- a/core/fpdfapi/parser/fpdf_parser_decode_unittest.cpp
+++ b/core/fpdfapi/parser/fpdf_parser_decode_unittest.cpp
@@ -99,7 +99,7 @@
 
   for (size_t i = 0; i < FX_ArraySize(test_data); ++i) {
     const auto& test_case = test_data[i];
-    CFX_ByteString output = PDF_EncodeText(test_case.input);
+    ByteString output = PDF_EncodeText(test_case.input);
     ASSERT_EQ(test_case.expected_length, output.GetLength()) << "for case "
                                                              << i;
     const char* str_ptr = output.c_str();
diff --git a/core/fpdfapi/parser/fpdf_parser_utility.cpp b/core/fpdfapi/parser/fpdf_parser_utility.cpp
index c6487f5..8280452 100644
--- a/core/fpdfapi/parser/fpdf_parser_utility.cpp
+++ b/core/fpdfapi/parser/fpdf_parser_utility.cpp
@@ -84,17 +84,17 @@
   return kInvalidHeaderOffset;
 }
 
-int32_t GetDirectInteger(CPDF_Dictionary* pDict, const CFX_ByteString& key) {
+int32_t GetDirectInteger(CPDF_Dictionary* pDict, const ByteString& key) {
   CPDF_Number* pObj = ToNumber(pDict->GetObjectFor(key));
   return pObj ? pObj->GetInteger() : 0;
 }
 
-CFX_ByteString PDF_NameDecode(const CFX_ByteStringC& bstr) {
+ByteString PDF_NameDecode(const ByteStringView& bstr) {
   if (!bstr.Contains('#'))
-    return CFX_ByteString(bstr);
+    return ByteString(bstr);
 
   int size = bstr.GetLength();
-  CFX_ByteString result;
+  ByteString result;
   char* pDestStart = result.GetBuffer(size);
   char* pDest = pDestStart;
   for (int i = 0; i < size; i++) {
@@ -110,11 +110,11 @@
   return result;
 }
 
-CFX_ByteString PDF_NameDecode(const CFX_ByteString& orig) {
-  return orig.Contains("#") ? PDF_NameDecode(orig.AsStringC()) : orig;
+ByteString PDF_NameDecode(const ByteString& orig) {
+  return orig.Contains("#") ? PDF_NameDecode(orig.AsStringView()) : orig;
 }
 
-CFX_ByteString PDF_NameEncode(const CFX_ByteString& orig) {
+ByteString PDF_NameEncode(const ByteString& orig) {
   uint8_t* src_buf = (uint8_t*)orig.c_str();
   int src_len = orig.GetLength();
   int dest_len = 0;
@@ -131,7 +131,7 @@
   if (dest_len == src_len)
     return orig;
 
-  CFX_ByteString res;
+  ByteString res;
   char* dest_buf = res.GetBuffer(dest_len);
   dest_len = 0;
   for (i = 0; i < src_len; i++) {
@@ -167,7 +167,7 @@
       buf << PDF_EncodeString(pObj->GetString(), pObj->AsString()->IsHex());
       break;
     case CPDF_Object::NAME: {
-      CFX_ByteString str = pObj->GetString();
+      ByteString str = pObj->GetString();
       buf << "/" << PDF_NameEncode(str);
       break;
     }
@@ -193,7 +193,7 @@
       const CPDF_Dictionary* p = pObj->AsDictionary();
       buf << "<<";
       for (const auto& it : *p) {
-        const CFX_ByteString& key = it.first;
+        const ByteString& key = it.first;
         CPDF_Object* pValue = it.second.get();
         buf << "/" << PDF_NameEncode(key);
         if (pValue && !pValue->IsInline()) {
diff --git a/core/fpdfapi/parser/fpdf_parser_utility.h b/core/fpdfapi/parser/fpdf_parser_utility.h
index 94ee1fc..5f85551 100644
--- a/core/fpdfapi/parser/fpdf_parser_utility.h
+++ b/core/fpdfapi/parser/fpdf_parser_utility.h
@@ -41,7 +41,7 @@
 // |kInvalidHeaderOffset|.
 int32_t GetHeaderOffset(const CFX_RetainPtr<IFX_SeekableReadStream>& pFile);
 
-int32_t GetDirectInteger(CPDF_Dictionary* pDict, const CFX_ByteString& key);
+int32_t GetDirectInteger(CPDF_Dictionary* pDict, const ByteString& key);
 
 std::ostream& operator<<(std::ostream& buf, const CPDF_Object* pObj);
 
diff --git a/core/fpdfapi/render/cpdf_charposlist.cpp b/core/fpdfapi/render/cpdf_charposlist.cpp
index f5882d9..f286474 100644
--- a/core/fpdfapi/render/cpdf_charposlist.cpp
+++ b/core/fpdfapi/render/cpdf_charposlist.cpp
@@ -37,7 +37,7 @@
     FXTEXT_CHARPOS& charpos = m_pCharPos[m_nChars++];
     if (pCIDFont)
       charpos.m_bFontStyle = true;
-    CFX_WideString unicode = pFont->UnicodeFromCharCode(CharCode);
+    WideString unicode = pFont->UnicodeFromCharCode(CharCode);
     charpos.m_Unicode = !unicode.IsEmpty() ? unicode[0] : CharCode;
     charpos.m_GlyphIndex = pFont->GlyphFromCharCode(CharCode, &bVert);
     uint32_t GlyphID = charpos.m_GlyphIndex;
diff --git a/core/fpdfapi/render/cpdf_dibsource.cpp b/core/fpdfapi/render/cpdf_dibsource.cpp
index 08bde6e..86a01c5 100644
--- a/core/fpdfapi/render/cpdf_dibsource.cpp
+++ b/core/fpdfapi/render/cpdf_dibsource.cpp
@@ -317,7 +317,7 @@
 int CPDF_DIBSource::ContinueLoadDIBSource(IFX_PauseIndicator* pPause) {
   FXCODEC_STATUS ret;
   if (m_Status == 1) {
-    const CFX_ByteString& decoder = m_pStreamAcc->GetImageDecoder();
+    const ByteString& decoder = m_pStreamAcc->GetImageDecoder();
     if (decoder == "JPXDecode") {
       return 0;
     }
@@ -397,7 +397,7 @@
     if (!m_bImageMask) {
       CPDF_Object* pFilter = m_pDict->GetDirectObjectFor("Filter");
       if (pFilter) {
-        CFX_ByteString filter;
+        ByteString filter;
         if (pFilter->IsName()) {
           filter = pFilter->GetString();
         } else if (CPDF_Array* pArray = pFilter->AsArray()) {
@@ -432,7 +432,7 @@
   m_Family = m_pColorSpace->GetFamily();
   m_nComponents = m_pColorSpace->CountComponents();
   if (m_Family == PDFCS_ICCBASED && pCSObj->IsName()) {
-    CFX_ByteString cs = pCSObj->GetString();
+    ByteString cs = pCSObj->GetString();
     if (cs == "DeviceGray")
       m_nComponents = 1;
     else if (cs == "DeviceRGB")
@@ -500,7 +500,7 @@
 }
 
 int CPDF_DIBSource::CreateDecoder() {
-  const CFX_ByteString& decoder = m_pStreamAcc->GetImageDecoder();
+  const ByteString& decoder = m_pStreamAcc->GetImageDecoder();
   if (decoder.IsEmpty())
     return 1;
 
@@ -841,7 +841,7 @@
   CPDF_Object* pFilter = m_pDict->GetDirectObjectFor("Filter");
   if (pFilter) {
     if (pFilter->IsName()) {
-      CFX_ByteString filter = pFilter->GetString();
+      ByteString filter = pFilter->GetString();
       if (filter == "CCITTFaxDecode" || filter == "JBIG2Decode") {
         m_bpc = 1;
         m_nComponents = 1;
@@ -853,7 +853,7 @@
         m_bpc = 8;
       }
     } else if (CPDF_Array* pArray = pFilter->AsArray()) {
-      CFX_ByteString filter = pArray->GetStringAt(pArray->GetCount() - 1);
+      ByteString filter = pArray->GetStringAt(pArray->GetCount() - 1);
       if (filter == "CCITTFaxDecode" || filter == "JBIG2Decode") {
         m_bpc = 1;
         m_nComponents = 1;
diff --git a/core/fpdfapi/render/cpdf_imagerenderer.cpp b/core/fpdfapi/render/cpdf_imagerenderer.cpp
index fafa18e..75a381c 100644
--- a/core/fpdfapi/render/cpdf_imagerenderer.cpp
+++ b/core/fpdfapi/render/cpdf_imagerenderer.cpp
@@ -556,7 +556,7 @@
     return;
 
   if (pFilters->IsName()) {
-    CFX_ByteString bsDecodeType = pFilters->GetString();
+    ByteString bsDecodeType = pFilters->GetString();
     if (bsDecodeType == "DCTDecode" || bsDecodeType == "JPXDecode")
       m_Flags |= FXRENDER_IMAGE_LOSSY;
     return;
@@ -567,7 +567,7 @@
     return;
 
   for (size_t i = 0; i < pArray->GetCount(); i++) {
-    CFX_ByteString bsDecodeType = pArray->GetStringAt(i);
+    ByteString bsDecodeType = pArray->GetStringAt(i);
     if (bsDecodeType == "DCTDecode" || bsDecodeType == "JPXDecode") {
       m_Flags |= FXRENDER_IMAGE_LOSSY;
       break;
diff --git a/core/fpdfapi/render/cpdf_textrenderer.cpp b/core/fpdfapi/render/cpdf_textrenderer.cpp
index 83e6147..283d994 100644
--- a/core/fpdfapi/render/cpdf_textrenderer.cpp
+++ b/core/fpdfapi/render/cpdf_textrenderer.cpp
@@ -76,7 +76,7 @@
                                        CPDF_Font* pFont,
                                        float font_size,
                                        const CFX_Matrix* pMatrix,
-                                       const CFX_ByteString& str,
+                                       const ByteString& str,
                                        FX_ARGB fill_argb,
                                        const CFX_GraphStateData* pGraphState,
                                        const CPDF_RenderOptions* pOptions) {
diff --git a/core/fpdfapi/render/cpdf_textrenderer.h b/core/fpdfapi/render/cpdf_textrenderer.h
index 31c44d9..ac8c8c5 100644
--- a/core/fpdfapi/render/cpdf_textrenderer.h
+++ b/core/fpdfapi/render/cpdf_textrenderer.h
@@ -28,7 +28,7 @@
                              CPDF_Font* pFont,
                              float font_size,
                              const CFX_Matrix* matrix,
-                             const CFX_ByteString& str,
+                             const ByteString& str,
                              FX_ARGB fill_argb,
                              const CFX_GraphStateData* pGraphState,
                              const CPDF_RenderOptions* pOptions);
diff --git a/core/fpdfapi/render/cpdf_type3cache.cpp b/core/fpdfapi/render/cpdf_type3cache.cpp
index f113e7a..b87b5ef 100644
--- a/core/fpdfapi/render/cpdf_type3cache.cpp
+++ b/core/fpdfapi/render/cpdf_type3cache.cpp
@@ -92,7 +92,7 @@
   keygen.Generate(
       4, FXSYS_round(pMatrix->a * 10000), FXSYS_round(pMatrix->b * 10000),
       FXSYS_round(pMatrix->c * 10000), FXSYS_round(pMatrix->d * 10000));
-  CFX_ByteString FaceGlyphsKey(keygen.m_Key, keygen.m_KeyLen);
+  ByteString FaceGlyphsKey(keygen.m_Key, keygen.m_KeyLen);
   CPDF_Type3Glyphs* pSizeCache;
   auto it = m_SizeMap.find(FaceGlyphsKey);
   if (it == m_SizeMap.end()) {
diff --git a/core/fpdfapi/render/cpdf_type3cache.h b/core/fpdfapi/render/cpdf_type3cache.h
index 36a1d6f..ab748ba 100644
--- a/core/fpdfapi/render/cpdf_type3cache.h
+++ b/core/fpdfapi/render/cpdf_type3cache.h
@@ -39,7 +39,7 @@
                                                float retinaScaleY);
 
   CFX_UnownedPtr<CPDF_Type3Font> const m_pFont;
-  std::map<CFX_ByteString, std::unique_ptr<CPDF_Type3Glyphs>> m_SizeMap;
+  std::map<ByteString, std::unique_ptr<CPDF_Type3Glyphs>> m_SizeMap;
 };
 
 #endif  // CORE_FPDFAPI_RENDER_CPDF_TYPE3CACHE_H_
diff --git a/core/fpdfdoc/cpdf_action.cpp b/core/fpdfdoc/cpdf_action.cpp
index 4d9e630..9d28bc1 100644
--- a/core/fpdfdoc/cpdf_action.cpp
+++ b/core/fpdfdoc/cpdf_action.cpp
@@ -33,7 +33,7 @@
   if (!m_pDict)
     return CPDF_Dest();
 
-  CFX_ByteString type = m_pDict->GetStringFor("S");
+  ByteString type = m_pDict->GetStringFor("S");
   if (type != "GoTo" && type != "GoToR")
     return CPDF_Dest();
 
@@ -54,7 +54,7 @@
   if (!m_pDict)
     return Unknown;
 
-  CFX_ByteString csType = m_pDict->GetStringFor("S");
+  ByteString csType = m_pDict->GetStringFor("S");
   if (csType.IsEmpty())
     return Unknown;
 
@@ -65,11 +65,11 @@
   return Unknown;
 }
 
-CFX_WideString CPDF_Action::GetFilePath() const {
-  CFX_ByteString type = m_pDict->GetStringFor("S");
+WideString CPDF_Action::GetFilePath() const {
+  ByteString type = m_pDict->GetStringFor("S");
   if (type != "GoToR" && type != "Launch" && type != "SubmitForm" &&
       type != "ImportData") {
-    return CFX_WideString();
+    return WideString();
   }
 
   CPDF_Object* pFile = m_pDict->GetDirectObjectFor("F");
@@ -79,14 +79,14 @@
   if (type == "Launch") {
     CPDF_Dictionary* pWinDict = m_pDict->GetDictFor("Win");
     if (pWinDict) {
-      return CFX_WideString::FromLocal(pWinDict->GetStringFor("F").AsStringC());
+      return WideString::FromLocal(pWinDict->GetStringFor("F").AsStringView());
     }
   }
-  return CFX_WideString();
+  return WideString();
 }
 
-CFX_ByteString CPDF_Action::GetURI(const CPDF_Document* pDoc) const {
-  CFX_ByteString csURI;
+ByteString CPDF_Action::GetURI(const CPDF_Document* pDoc) const {
+  ByteString csURI;
   if (!m_pDict)
     return csURI;
   if (m_pDict->GetStringFor("S") != "URI")
@@ -103,8 +103,8 @@
   return csURI;
 }
 
-CFX_WideString CPDF_Action::GetJavaScript() const {
-  CFX_WideString csJS;
+WideString CPDF_Action::GetJavaScript() const {
+  WideString csJS;
   if (!m_pDict)
     return csJS;
 
diff --git a/core/fpdfdoc/cpdf_action.h b/core/fpdfdoc/cpdf_action.h
index be4d461..b405f22 100644
--- a/core/fpdfdoc/cpdf_action.h
+++ b/core/fpdfdoc/cpdf_action.h
@@ -45,12 +45,12 @@
   CPDF_Dictionary* GetDict() const { return m_pDict.Get(); }
   ActionType GetType() const;
   CPDF_Dest GetDest(CPDF_Document* pDoc) const;
-  CFX_WideString GetFilePath() const;
-  CFX_ByteString GetURI(const CPDF_Document* pDoc) const;
+  WideString GetFilePath() const;
+  ByteString GetURI(const CPDF_Document* pDoc) const;
   bool GetHideStatus() const { return m_pDict->GetBooleanFor("H", true); }
-  CFX_ByteString GetNamedAction() const { return m_pDict->GetStringFor("N"); }
+  ByteString GetNamedAction() const { return m_pDict->GetStringFor("N"); }
   uint32_t GetFlags() const { return m_pDict->GetIntegerFor("Flags"); }
-  CFX_WideString GetJavaScript() const;
+  WideString GetJavaScript() const;
   size_t GetSubActionsCount() const;
   CPDF_Action GetSubAction(size_t iIndex) const;
 
diff --git a/core/fpdfdoc/cpdf_actionfields.cpp b/core/fpdfdoc/cpdf_actionfields.cpp
index f3c3f5e..cee256d 100644
--- a/core/fpdfdoc/cpdf_actionfields.cpp
+++ b/core/fpdfdoc/cpdf_actionfields.cpp
@@ -23,7 +23,7 @@
   if (!pDict)
     return 0;
 
-  CFX_ByteString csType = pDict->GetStringFor("S");
+  ByteString csType = pDict->GetStringFor("S");
   CPDF_Object* pFields = nullptr;
   if (csType == "Hide")
     pFields = pDict->GetDirectObjectFor("T");
@@ -50,7 +50,7 @@
   if (!pDict)
     return fields;
 
-  CFX_ByteString csType = pDict->GetStringFor("S");
+  ByteString csType = pDict->GetStringFor("S");
   CPDF_Object* pFields;
   if (csType == "Hide")
     pFields = pDict->GetDirectObjectFor("T");
@@ -80,7 +80,7 @@
   if (!pDict)
     return nullptr;
 
-  CFX_ByteString csType = pDict->GetStringFor("S");
+  ByteString csType = pDict->GetStringFor("S");
   CPDF_Object* pFields = nullptr;
   if (csType == "Hide")
     pFields = pDict->GetDirectObjectFor("T");
diff --git a/core/fpdfdoc/cpdf_annot.cpp b/core/fpdfdoc/cpdf_annot.cpp
index ea15436..1a85380 100644
--- a/core/fpdfdoc/cpdf_annot.cpp
+++ b/core/fpdfdoc/cpdf_annot.cpp
@@ -179,12 +179,12 @@
     return pStream;
 
   if (CPDF_Dictionary* pDict = psub->AsDictionary()) {
-    CFX_ByteString as = pAnnotDict->GetStringFor("AS");
+    ByteString as = pAnnotDict->GetStringFor("AS");
     if (as.IsEmpty()) {
-      CFX_ByteString value = pAnnotDict->GetStringFor("V");
+      ByteString value = pAnnotDict->GetStringFor("V");
       if (value.IsEmpty()) {
         CPDF_Dictionary* pParentDict = pAnnotDict->GetDictFor("Parent");
-        value = pParentDict ? pParentDict->GetStringFor("V") : CFX_ByteString();
+        value = pParentDict ? pParentDict->GetStringFor("V") : ByteString();
       }
       if (value.IsEmpty() || !pDict->KeyExist(value))
         as = "Off";
@@ -241,7 +241,7 @@
 
 // Static.
 CPDF_Annot::Subtype CPDF_Annot::StringToAnnotSubtype(
-    const CFX_ByteString& sSubtype) {
+    const ByteString& sSubtype) {
   if (sSubtype == "Text")
     return CPDF_Annot::Subtype::TEXT;
   if (sSubtype == "Link")
@@ -300,7 +300,7 @@
 }
 
 // Static.
-CFX_ByteString CPDF_Annot::AnnotSubtypeToString(CPDF_Annot::Subtype nSubtype) {
+ByteString CPDF_Annot::AnnotSubtypeToString(CPDF_Annot::Subtype nSubtype) {
   if (nSubtype == CPDF_Annot::Subtype::TEXT)
     return "Text";
   if (nSubtype == CPDF_Annot::Subtype::LINK)
@@ -456,7 +456,7 @@
       width = 1;
     }
   } else {
-    CFX_ByteString style = pBS->GetStringFor("S");
+    ByteString style = pBS->GetStringFor("S");
     pDashArray = pBS->GetArrayFor("D");
     style_char = style[1];
     width = pBS->GetNumberFor("W");
diff --git a/core/fpdfdoc/cpdf_annot.h b/core/fpdfdoc/cpdf_annot.h
index 4ca1941..cf1b304 100644
--- a/core/fpdfdoc/cpdf_annot.h
+++ b/core/fpdfdoc/cpdf_annot.h
@@ -69,9 +69,8 @@
   };
 
   static bool IsAnnotationHidden(CPDF_Dictionary* pAnnotDict);
-  static CPDF_Annot::Subtype StringToAnnotSubtype(
-      const CFX_ByteString& sSubtype);
-  static CFX_ByteString AnnotSubtypeToString(CPDF_Annot::Subtype nSubtype);
+  static CPDF_Annot::Subtype StringToAnnotSubtype(const ByteString& sSubtype);
+  static ByteString AnnotSubtypeToString(CPDF_Annot::Subtype nSubtype);
   static CFX_FloatRect RectFromQuadPoints(CPDF_Dictionary* pAnnotDict);
 
   // The second constructor does not take ownership of the dictionary.
diff --git a/core/fpdfdoc/cpdf_annotlist.cpp b/core/fpdfdoc/cpdf_annotlist.cpp
index df3b631..87e5ba7 100644
--- a/core/fpdfdoc/cpdf_annotlist.cpp
+++ b/core/fpdfdoc/cpdf_annotlist.cpp
@@ -35,7 +35,7 @@
 
   // TODO(jaepark): We shouldn't strip BOM for some strings and not for others.
   // See pdfium:593.
-  CFX_WideString sContents = pParentDict->GetUnicodeTextFor("Contents");
+  WideString sContents = pParentDict->GetUnicodeTextFor("Contents");
   if (sContents.IsEmpty())
     return nullptr;
 
@@ -92,7 +92,7 @@
     CPDF_Dictionary* pDict = ToDictionary(pAnnots->GetDirectObjectAt(i));
     if (!pDict)
       continue;
-    const CFX_ByteString subtype = pDict->GetStringFor("Subtype");
+    const ByteString subtype = pDict->GetStringFor("Subtype");
     if (subtype == "Popup") {
       // Skip creating Popup annotations in the PDF document since PDFium
       // provides its own Popup annotations.
diff --git a/core/fpdfdoc/cpdf_apsettings.cpp b/core/fpdfdoc/cpdf_apsettings.cpp
index ee205e0..0fc9c20 100644
--- a/core/fpdfdoc/cpdf_apsettings.cpp
+++ b/core/fpdfdoc/cpdf_apsettings.cpp
@@ -18,7 +18,7 @@
 
 CPDF_ApSettings::~CPDF_ApSettings() {}
 
-bool CPDF_ApSettings::HasMKEntry(const CFX_ByteString& csEntry) const {
+bool CPDF_ApSettings::HasMKEntry(const ByteString& csEntry) const {
   return m_pDict && m_pDict->KeyExist(csEntry);
 }
 
@@ -27,7 +27,7 @@
 }
 
 FX_ARGB CPDF_ApSettings::GetColor(int& iColorType,
-                                  const CFX_ByteString& csEntry) const {
+                                  const ByteString& csEntry) const {
   iColorType = COLORTYPE_TRANSPARENT;
   if (!m_pDict)
     return 0;
@@ -65,7 +65,7 @@
 }
 
 float CPDF_ApSettings::GetOriginalColor(int index,
-                                        const CFX_ByteString& csEntry) const {
+                                        const ByteString& csEntry) const {
   if (!m_pDict)
     return 0;
 
@@ -75,7 +75,7 @@
 
 void CPDF_ApSettings::GetOriginalColor(int& iColorType,
                                        float fc[4],
-                                       const CFX_ByteString& csEntry) const {
+                                       const ByteString& csEntry) const {
   iColorType = COLORTYPE_TRANSPARENT;
   for (int i = 0; i < 4; i++)
     fc[i] = 0;
@@ -105,12 +105,11 @@
   }
 }
 
-CFX_WideString CPDF_ApSettings::GetCaption(
-    const CFX_ByteString& csEntry) const {
-  return m_pDict ? m_pDict->GetUnicodeTextFor(csEntry) : CFX_WideString();
+WideString CPDF_ApSettings::GetCaption(const ByteString& csEntry) const {
+  return m_pDict ? m_pDict->GetUnicodeTextFor(csEntry) : WideString();
 }
 
-CPDF_Stream* CPDF_ApSettings::GetIcon(const CFX_ByteString& csEntry) const {
+CPDF_Stream* CPDF_ApSettings::GetIcon(const ByteString& csEntry) const {
   return m_pDict ? m_pDict->GetStreamFor(csEntry) : nullptr;
 }
 
diff --git a/core/fpdfdoc/cpdf_apsettings.h b/core/fpdfdoc/cpdf_apsettings.h
index 2f8f9e4..a2a1f91 100644
--- a/core/fpdfdoc/cpdf_apsettings.h
+++ b/core/fpdfdoc/cpdf_apsettings.h
@@ -23,7 +23,7 @@
   CPDF_ApSettings(const CPDF_ApSettings& that);
   ~CPDF_ApSettings();
 
-  bool HasMKEntry(const CFX_ByteString& csEntry) const;
+  bool HasMKEntry(const ByteString& csEntry) const;
   int GetRotation() const;
 
   FX_ARGB GetBorderColor(int& iColorType) const {
@@ -50,9 +50,9 @@
     GetOriginalColor(iColorType, fc, "BG");
   }
 
-  CFX_WideString GetNormalCaption() const { return GetCaption("CA"); }
-  CFX_WideString GetRolloverCaption() const { return GetCaption("RC"); }
-  CFX_WideString GetDownCaption() const { return GetCaption("AC"); }
+  WideString GetNormalCaption() const { return GetCaption("CA"); }
+  WideString GetRolloverCaption() const { return GetCaption("RC"); }
+  WideString GetDownCaption() const { return GetCaption("AC"); }
   CPDF_Stream* GetNormalIcon() const { return GetIcon("I"); }
   CPDF_Stream* GetRolloverIcon() const { return GetIcon("RI"); }
   CPDF_Stream* GetDownIcon() const { return GetIcon("IX"); }
@@ -62,14 +62,14 @@
  private:
   friend class CPDF_FormControl;
 
-  FX_ARGB GetColor(int& iColorType, const CFX_ByteString& csEntry) const;
-  float GetOriginalColor(int index, const CFX_ByteString& csEntry) const;
+  FX_ARGB GetColor(int& iColorType, const ByteString& csEntry) const;
+  float GetOriginalColor(int index, const ByteString& csEntry) const;
   void GetOriginalColor(int& iColorType,
                         float fc[4],
-                        const CFX_ByteString& csEntry) const;
+                        const ByteString& csEntry) const;
 
-  CFX_WideString GetCaption(const CFX_ByteString& csEntry) const;
-  CPDF_Stream* GetIcon(const CFX_ByteString& csEntry) const;
+  WideString GetCaption(const ByteString& csEntry) const;
+  CPDF_Stream* GetIcon(const ByteString& csEntry) const;
 
   CFX_UnownedPtr<CPDF_Dictionary> const m_pDict;
 };
diff --git a/core/fpdfdoc/cpdf_bookmark.cpp b/core/fpdfdoc/cpdf_bookmark.cpp
index e84001f..884c3cb 100644
--- a/core/fpdfdoc/cpdf_bookmark.cpp
+++ b/core/fpdfdoc/cpdf_bookmark.cpp
@@ -40,25 +40,25 @@
   return m_pDict ? m_pDict->GetIntegerFor("F") : 0;
 }
 
-CFX_WideString CPDF_Bookmark::GetTitle() const {
+WideString CPDF_Bookmark::GetTitle() const {
   if (!m_pDict)
-    return CFX_WideString();
+    return WideString();
 
   CPDF_String* pString = ToString(m_pDict->GetDirectObjectFor("Title"));
   if (!pString)
-    return CFX_WideString();
+    return WideString();
 
-  CFX_WideString title = pString->GetUnicodeText();
+  WideString title = pString->GetUnicodeText();
   int len = title.GetLength();
   if (!len)
-    return CFX_WideString();
+    return WideString();
 
   std::vector<wchar_t> buf(len);
   for (int i = 0; i < len; i++) {
     wchar_t w = title[i];
     buf[i] = w > 0x20 ? w : 0x20;
   }
-  return CFX_WideString(buf.data(), len);
+  return WideString(buf.data(), len);
 }
 
 CPDF_Dest CPDF_Bookmark::GetDest(CPDF_Document* pDocument) const {
diff --git a/core/fpdfdoc/cpdf_bookmark.h b/core/fpdfdoc/cpdf_bookmark.h
index b9a1ac6..88f47a9 100644
--- a/core/fpdfdoc/cpdf_bookmark.h
+++ b/core/fpdfdoc/cpdf_bookmark.h
@@ -25,7 +25,7 @@
   CPDF_Dictionary* GetDict() const { return m_pDict.Get(); }
   uint32_t GetColorRef() const;
   uint32_t GetFontStyle() const;
-  CFX_WideString GetTitle() const;
+  WideString GetTitle() const;
   CPDF_Dest GetDest(CPDF_Document* pDocument) const;
   CPDF_Action GetAction() const;
 
diff --git a/core/fpdfdoc/cpdf_defaultappearance.cpp b/core/fpdfdoc/cpdf_defaultappearance.cpp
index 28213aa..bd7ea1b 100644
--- a/core/fpdfdoc/cpdf_defaultappearance.cpp
+++ b/core/fpdfdoc/cpdf_defaultappearance.cpp
@@ -16,16 +16,16 @@
   if (m_csDA.IsEmpty())
     return false;
 
-  CPDF_SimpleParser syntax(m_csDA.AsStringC());
+  CPDF_SimpleParser syntax(m_csDA.AsStringView());
   return syntax.FindTagParamFromStart("Tf", 2);
 }
 
-CFX_ByteString CPDF_DefaultAppearance::GetFontString() {
-  CFX_ByteString csFont;
+ByteString CPDF_DefaultAppearance::GetFontString() {
+  ByteString csFont;
   if (m_csDA.IsEmpty())
     return csFont;
 
-  CPDF_SimpleParser syntax(m_csDA.AsStringC());
+  CPDF_SimpleParser syntax(m_csDA.AsStringView());
   if (syntax.FindTagParamFromStart("Tf", 2)) {
     csFont += syntax.GetWord();
     csFont += " ";
@@ -36,15 +36,15 @@
   return csFont;
 }
 
-CFX_ByteString CPDF_DefaultAppearance::GetFont(float* fFontSize) {
+ByteString CPDF_DefaultAppearance::GetFont(float* fFontSize) {
   *fFontSize = 0.0f;
   if (m_csDA.IsEmpty())
-    return CFX_ByteString();
+    return ByteString();
 
-  CFX_ByteString csFontNameTag;
-  CPDF_SimpleParser syntax(m_csDA.AsStringC());
+  ByteString csFontNameTag;
+  CPDF_SimpleParser syntax(m_csDA.AsStringView());
   if (syntax.FindTagParamFromStart("Tf", 2)) {
-    csFontNameTag = CFX_ByteString(syntax.GetWord());
+    csFontNameTag = ByteString(syntax.GetWord());
     csFontNameTag.Delete(0, 1);
     *fFontSize = FX_atof(syntax.GetWord());
   }
@@ -55,7 +55,7 @@
   if (m_csDA.IsEmpty())
     return false;
 
-  CPDF_SimpleParser syntax(m_csDA.AsStringC());
+  CPDF_SimpleParser syntax(m_csDA.AsStringView());
   if (syntax.FindTagParamFromStart(
           (nOperation == PaintOperation::STROKE ? "G" : "g"), 1)) {
     return true;
@@ -68,13 +68,12 @@
       (nOperation == PaintOperation::STROKE ? "K" : "k"), 4);
 }
 
-CFX_ByteString CPDF_DefaultAppearance::GetColorString(
-    PaintOperation nOperation) {
-  CFX_ByteString csColor;
+ByteString CPDF_DefaultAppearance::GetColorString(PaintOperation nOperation) {
+  ByteString csColor;
   if (m_csDA.IsEmpty())
     return csColor;
 
-  CPDF_SimpleParser syntax(m_csDA.AsStringC());
+  CPDF_SimpleParser syntax(m_csDA.AsStringView());
   if (syntax.FindTagParamFromStart(
           (nOperation == PaintOperation::STROKE ? "G" : "g"), 1)) {
     csColor += syntax.GetWord();
@@ -118,7 +117,7 @@
   if (m_csDA.IsEmpty())
     return;
 
-  CPDF_SimpleParser syntax(m_csDA.AsStringC());
+  CPDF_SimpleParser syntax(m_csDA.AsStringView());
   if (syntax.FindTagParamFromStart(
           (nOperation == PaintOperation::STROKE ? "G" : "g"), 1)) {
     iColorType = COLORTYPE_GRAY;
@@ -151,7 +150,7 @@
   if (m_csDA.IsEmpty())
     return;
 
-  CPDF_SimpleParser syntax(m_csDA.AsStringC());
+  CPDF_SimpleParser syntax(m_csDA.AsStringView());
   if (syntax.FindTagParamFromStart(
           (nOperation == PaintOperation::STROKE ? "G" : "g"), 1)) {
     iColorType = COLORTYPE_GRAY;
@@ -187,16 +186,16 @@
   if (m_csDA.IsEmpty())
     return false;
 
-  CPDF_SimpleParser syntax(m_csDA.AsStringC());
+  CPDF_SimpleParser syntax(m_csDA.AsStringView());
   return syntax.FindTagParamFromStart("Tm", 6);
 }
 
-CFX_ByteString CPDF_DefaultAppearance::GetTextMatrixString() {
-  CFX_ByteString csTM;
+ByteString CPDF_DefaultAppearance::GetTextMatrixString() {
+  ByteString csTM;
   if (m_csDA.IsEmpty())
     return csTM;
 
-  CPDF_SimpleParser syntax(m_csDA.AsStringC());
+  CPDF_SimpleParser syntax(m_csDA.AsStringView());
   if (syntax.FindTagParamFromStart("Tm", 6)) {
     for (int i = 0; i < 6; i++) {
       csTM += syntax.GetWord();
@@ -211,7 +210,7 @@
   if (m_csDA.IsEmpty())
     return CFX_Matrix();
 
-  CPDF_SimpleParser syntax(m_csDA.AsStringC());
+  CPDF_SimpleParser syntax(m_csDA.AsStringView());
   if (!syntax.FindTagParamFromStart("Tm", 6))
     return CFX_Matrix();
 
diff --git a/core/fpdfdoc/cpdf_defaultappearance.h b/core/fpdfdoc/cpdf_defaultappearance.h
index 3be06e2..33d4bfd 100644
--- a/core/fpdfdoc/cpdf_defaultappearance.h
+++ b/core/fpdfdoc/cpdf_defaultappearance.h
@@ -19,21 +19,20 @@
 class CPDF_DefaultAppearance {
  public:
   CPDF_DefaultAppearance() {}
-  explicit CPDF_DefaultAppearance(const CFX_ByteString& csDA) : m_csDA(csDA) {}
+  explicit CPDF_DefaultAppearance(const ByteString& csDA) : m_csDA(csDA) {}
 
   CPDF_DefaultAppearance(const CPDF_DefaultAppearance& cDA) {
     m_csDA = cDA.GetStr();
   }
 
-  CFX_ByteString GetStr() const { return m_csDA; }
+  ByteString GetStr() const { return m_csDA; }
 
   bool HasFont();
-  CFX_ByteString GetFontString();
-  CFX_ByteString GetFont(float* fFontSize);
+  ByteString GetFontString();
+  ByteString GetFont(float* fFontSize);
 
   bool HasColor(PaintOperation nOperation = PaintOperation::FILL);
-  CFX_ByteString GetColorString(
-      PaintOperation nOperation = PaintOperation::FILL);
+  ByteString GetColorString(PaintOperation nOperation = PaintOperation::FILL);
   void GetColor(int& iColorType,
                 float fc[4],
                 PaintOperation nOperation = PaintOperation::FILL);
@@ -42,11 +41,11 @@
                 PaintOperation nOperation = PaintOperation::FILL);
 
   bool HasTextMatrix();
-  CFX_ByteString GetTextMatrixString();
+  ByteString GetTextMatrixString();
   CFX_Matrix GetTextMatrix();
 
  private:
-  CFX_ByteString m_csDA;
+  ByteString m_csDA;
 };
 
 #endif  // CORE_FPDFDOC_CPDF_DEFAULTAPPEARANCE_H_
diff --git a/core/fpdfdoc/cpdf_dest.cpp b/core/fpdfdoc/cpdf_dest.cpp
index 3e1988d..ebe3834 100644
--- a/core/fpdfdoc/cpdf_dest.cpp
+++ b/core/fpdfdoc/cpdf_dest.cpp
@@ -65,7 +65,7 @@
   if (!pObj)
     return 0;
 
-  CFX_ByteString mode = pObj->GetString();
+  ByteString mode = pObj->GetString();
   for (int i = 0; g_sZoomModes[i]; ++i) {
     if (mode == g_sZoomModes[i])
       return i + 1;
@@ -126,6 +126,6 @@
   return pArray ? pArray->GetNumberAt(2 + index) : 0;
 }
 
-CFX_ByteString CPDF_Dest::GetRemoteName() {
-  return m_pObj ? m_pObj->GetString() : CFX_ByteString();
+ByteString CPDF_Dest::GetRemoteName() {
+  return m_pObj ? m_pObj->GetString() : ByteString();
 }
diff --git a/core/fpdfdoc/cpdf_dest.h b/core/fpdfdoc/cpdf_dest.h
index f029d4c..23964d7 100644
--- a/core/fpdfdoc/cpdf_dest.h
+++ b/core/fpdfdoc/cpdf_dest.h
@@ -22,7 +22,7 @@
   ~CPDF_Dest();
 
   CPDF_Object* GetObject() const { return m_pObj.Get(); }
-  CFX_ByteString GetRemoteName();
+  ByteString GetRemoteName();
   int GetPageIndex(CPDF_Document* pDoc);
   uint32_t GetPageObjNum();
   int GetZoomMode();
diff --git a/core/fpdfdoc/cpdf_docjsactions.cpp b/core/fpdfdoc/cpdf_docjsactions.cpp
index 669ed70..974ca33 100644
--- a/core/fpdfdoc/cpdf_docjsactions.cpp
+++ b/core/fpdfdoc/cpdf_docjsactions.cpp
@@ -18,9 +18,8 @@
   return name_tree.GetCount();
 }
 
-CPDF_Action CPDF_DocJSActions::GetJSActionAndName(
-    int index,
-    CFX_WideString* csName) const {
+CPDF_Action CPDF_DocJSActions::GetJSActionAndName(int index,
+                                                  WideString* csName) const {
   ASSERT(m_pDocument);
   CPDF_NameTree name_tree(m_pDocument.Get(), "JavaScript");
   CPDF_Object* pAction = name_tree.LookupValueAndName(index, csName);
@@ -28,7 +27,7 @@
                                : CPDF_Action();
 }
 
-CPDF_Action CPDF_DocJSActions::GetJSAction(const CFX_WideString& csName) const {
+CPDF_Action CPDF_DocJSActions::GetJSAction(const WideString& csName) const {
   ASSERT(m_pDocument);
   CPDF_NameTree name_tree(m_pDocument.Get(), "JavaScript");
   CPDF_Object* pAction = name_tree.LookupValue(csName);
@@ -36,7 +35,7 @@
                                : CPDF_Action();
 }
 
-int CPDF_DocJSActions::FindJSAction(const CFX_WideString& csName) const {
+int CPDF_DocJSActions::FindJSAction(const WideString& csName) const {
   ASSERT(m_pDocument);
   CPDF_NameTree name_tree(m_pDocument.Get(), "JavaScript");
   return name_tree.GetIndex(csName);
diff --git a/core/fpdfdoc/cpdf_docjsactions.h b/core/fpdfdoc/cpdf_docjsactions.h
index 73c0a1e..c2652d7 100644
--- a/core/fpdfdoc/cpdf_docjsactions.h
+++ b/core/fpdfdoc/cpdf_docjsactions.h
@@ -19,9 +19,9 @@
   ~CPDF_DocJSActions();
 
   int CountJSActions() const;
-  CPDF_Action GetJSActionAndName(int index, CFX_WideString* csName) const;
-  CPDF_Action GetJSAction(const CFX_WideString& csName) const;
-  int FindJSAction(const CFX_WideString& csName) const;
+  CPDF_Action GetJSActionAndName(int index, WideString* csName) const;
+  CPDF_Action GetJSAction(const WideString& csName) const;
+  int FindJSAction(const WideString& csName) const;
   CPDF_Document* GetDocument() const { return m_pDocument.Get(); }
 
  private:
diff --git a/core/fpdfdoc/cpdf_filespec.cpp b/core/fpdfdoc/cpdf_filespec.cpp
index e34f54e..803c414 100644
--- a/core/fpdfdoc/cpdf_filespec.cpp
+++ b/core/fpdfdoc/cpdf_filespec.cpp
@@ -20,8 +20,8 @@
 
 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_ || \
     _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
-CFX_WideString ChangeSlashToPlatform(const wchar_t* str) {
-  CFX_WideString result;
+WideString ChangeSlashToPlatform(const wchar_t* str) {
+  WideString result;
   while (*str) {
     if (*str == '/') {
 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
@@ -37,8 +37,8 @@
   return result;
 }
 
-CFX_WideString ChangeSlashToPDF(const wchar_t* str) {
-  CFX_WideString result;
+WideString ChangeSlashToPDF(const wchar_t* str) {
+  WideString result;
   while (*str) {
     if (*str == '\\' || *str == ':')
       result += L'/';
@@ -59,12 +59,12 @@
 
 CPDF_FileSpec::~CPDF_FileSpec() {}
 
-CFX_WideString CPDF_FileSpec::DecodeFileName(const CFX_WideString& filepath) {
+WideString CPDF_FileSpec::DecodeFileName(const WideString& filepath) {
   if (filepath.GetLength() <= 1)
-    return CFX_WideString();
+    return WideString();
 
 #if _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
-  if (filepath.Left(sizeof("/Mac") - 1) == CFX_WideStringC(L"/Mac"))
+  if (filepath.Left(sizeof("/Mac") - 1) == WideStringView(L"/Mac"))
     return ChangeSlashToPlatform(filepath.c_str() + 1);
   return ChangeSlashToPlatform(filepath.c_str());
 #elif _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
@@ -74,28 +74,28 @@
   if (filepath[1] == L'/')
     return ChangeSlashToPlatform(filepath.c_str() + 1);
   if (filepath[2] == L'/') {
-    CFX_WideString result;
+    WideString result;
     result += filepath[1];
     result += L':';
     result += ChangeSlashToPlatform(filepath.c_str() + 2);
     return result;
   }
-  CFX_WideString result;
+  WideString result;
   result += L'\\';
   result += ChangeSlashToPlatform(filepath.c_str());
   return result;
 #else
-  return CFX_WideString(filepath);
+  return WideString(filepath);
 #endif
 }
 
-CFX_WideString CPDF_FileSpec::GetFileName() const {
-  CFX_WideString csFileName;
+WideString CPDF_FileSpec::GetFileName() const {
+  WideString csFileName;
   if (CPDF_Dictionary* pDict = m_pObj->AsDictionary()) {
     csFileName = pDict->GetUnicodeTextFor("UF");
     if (csFileName.IsEmpty()) {
       csFileName =
-          CFX_WideString::FromLocal(pDict->GetStringFor("F").AsStringC());
+          WideString::FromLocal(pDict->GetStringFor("F").AsStringView());
     }
     if (pDict->GetStringFor("FS") == "URL")
       return csFileName;
@@ -105,13 +105,13 @@
       for (const auto* key : keys) {
         if (pDict->KeyExist(key)) {
           csFileName =
-              CFX_WideString::FromLocal(pDict->GetStringFor(key).AsStringC());
+              WideString::FromLocal(pDict->GetStringFor(key).AsStringView());
           break;
         }
       }
     }
   } else if (m_pObj->IsString()) {
-    csFileName = CFX_WideString::FromLocal(m_pObj->GetString().AsStringC());
+    csFileName = WideString::FromLocal(m_pObj->GetString().AsStringView());
   }
   return DecodeFileName(csFileName);
 }
@@ -131,7 +131,7 @@
   constexpr const char* keys[] = {"UF", "F", "DOS", "Mac", "Unix"};
   size_t end = pDict->GetStringFor("FS") == "URL" ? 2 : FX_ArraySize(keys);
   for (size_t i = 0; i < end; ++i) {
-    const CFX_ByteString& key = keys[i];
+    const ByteString& key = keys[i];
     if (!pDict->GetUnicodeTextFor(key).IsEmpty()) {
       CPDF_Stream* pStream = pFiles->GetStreamFor(key);
       if (pStream)
@@ -153,13 +153,13 @@
   return pDict->GetDictFor("Params");
 }
 
-CFX_WideString CPDF_FileSpec::EncodeFileName(const CFX_WideString& filepath) {
+WideString CPDF_FileSpec::EncodeFileName(const WideString& filepath) {
   if (filepath.GetLength() <= 1)
-    return CFX_WideString();
+    return WideString();
 
 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
   if (filepath[1] == L':') {
-    CFX_WideString result(L'/');
+    WideString result(L'/');
     result += filepath[0];
     if (filepath[2] != L'\\')
       result += L'/';
@@ -178,17 +178,16 @@
     return L'/' + ChangeSlashToPDF(filepath.c_str());
   return ChangeSlashToPDF(filepath.c_str());
 #else
-  return CFX_WideString(filepath);
+  return WideString(filepath);
 #endif
 }
 
-void CPDF_FileSpec::SetFileName(const CFX_WideString& wsFileName) {
-  CFX_WideString wsStr = EncodeFileName(wsFileName);
+void CPDF_FileSpec::SetFileName(const WideString& wsFileName) {
+  WideString wsStr = EncodeFileName(wsFileName);
   if (m_pObj->IsString()) {
-    m_pObj->SetString(CFX_ByteString::FromUnicode(wsStr));
+    m_pObj->SetString(ByteString::FromUnicode(wsStr));
   } else if (CPDF_Dictionary* pDict = m_pObj->AsDictionary()) {
-    pDict->SetNewFor<CPDF_String>("F", CFX_ByteString::FromUnicode(wsStr),
-                                  false);
+    pDict->SetNewFor<CPDF_String>("F", ByteString::FromUnicode(wsStr), false);
     pDict->SetNewFor<CPDF_String>("UF", PDF_EncodeText(wsStr), false);
   }
 }
diff --git a/core/fpdfdoc/cpdf_filespec.h b/core/fpdfdoc/cpdf_filespec.h
index 8640b2e..2cbbc15 100644
--- a/core/fpdfdoc/cpdf_filespec.h
+++ b/core/fpdfdoc/cpdf_filespec.h
@@ -22,18 +22,18 @@
   ~CPDF_FileSpec();
 
   // Convert a platform dependent file name into pdf format.
-  static CFX_WideString EncodeFileName(const CFX_WideString& filepath);
+  static WideString EncodeFileName(const WideString& filepath);
 
   // Convert a pdf file name into platform dependent format.
-  static CFX_WideString DecodeFileName(const CFX_WideString& filepath);
+  static WideString DecodeFileName(const WideString& filepath);
 
   CPDF_Object* GetObj() const { return m_pObj.Get(); }
-  CFX_WideString GetFileName() const;
+  WideString GetFileName() const;
   CPDF_Stream* GetFileStream() const;
   CPDF_Dictionary* GetParamsDict() const;
 
   // Set this file spec to refer to a file name (not a url).
-  void SetFileName(const CFX_WideString& wsFileName);
+  void SetFileName(const WideString& wsFileName);
 
  private:
   CFX_UnownedPtr<CPDF_Object> const m_pObj;
diff --git a/core/fpdfdoc/cpdf_formcontrol.cpp b/core/fpdfdoc/cpdf_formcontrol.cpp
index 555d196..62302fe 100644
--- a/core/fpdfdoc/cpdf_formcontrol.cpp
+++ b/core/fpdfdoc/cpdf_formcontrol.cpp
@@ -34,10 +34,10 @@
 
 CPDF_FormControl::~CPDF_FormControl() {}
 
-CFX_ByteString CPDF_FormControl::GetOnStateName() const {
+ByteString CPDF_FormControl::GetOnStateName() const {
   ASSERT(GetType() == CPDF_FormField::CheckBox ||
          GetType() == CPDF_FormField::RadioButton);
-  CFX_ByteString csOn;
+  ByteString csOn;
   CPDF_Dictionary* pAP = m_pWidgetDict->GetDictFor("AP");
   if (!pAP)
     return csOn;
@@ -50,19 +50,19 @@
     if (it.first != "Off")
       return it.first;
   }
-  return CFX_ByteString();
+  return ByteString();
 }
 
-void CPDF_FormControl::SetOnStateName(const CFX_ByteString& csOn) {
+void CPDF_FormControl::SetOnStateName(const ByteString& csOn) {
   ASSERT(GetType() == CPDF_FormField::CheckBox ||
          GetType() == CPDF_FormField::RadioButton);
-  CFX_ByteString csValue = csOn;
+  ByteString csValue = csOn;
   if (csValue.IsEmpty())
     csValue = "Yes";
   else if (csValue == "Off")
     csValue = "Yes";
 
-  CFX_ByteString csAS = m_pWidgetDict->GetStringFor("AS", "Off");
+  ByteString csAS = m_pWidgetDict->GetStringFor("AS", "Off");
   if (csAS != "Off")
     m_pWidgetDict->SetNewFor<CPDF_Name>("AS", csValue);
 
@@ -82,7 +82,7 @@
 
     auto subdict_it = pSubDict->begin();
     while (subdict_it != pSubDict->end()) {
-      const CFX_ByteString& csKey2 = subdict_it->first;
+      const ByteString& csKey2 = subdict_it->first;
       CPDF_Object* pObj2 = subdict_it->second.get();
       ++subdict_it;
       if (!pObj2)
@@ -95,10 +95,10 @@
   }
 }
 
-CFX_ByteString CPDF_FormControl::GetCheckedAPState() {
+ByteString CPDF_FormControl::GetCheckedAPState() {
   ASSERT(GetType() == CPDF_FormField::CheckBox ||
          GetType() == CPDF_FormField::RadioButton);
-  CFX_ByteString csOn = GetOnStateName();
+  ByteString csOn = GetOnStateName();
   if (GetType() == CPDF_FormField::RadioButton ||
       GetType() == CPDF_FormField::CheckBox) {
     if (ToArray(FPDF_GetFieldAttr(m_pField->GetDict(), "Opt"))) {
@@ -111,10 +111,10 @@
   return csOn;
 }
 
-CFX_WideString CPDF_FormControl::GetExportValue() const {
+WideString CPDF_FormControl::GetExportValue() const {
   ASSERT(GetType() == CPDF_FormField::CheckBox ||
          GetType() == CPDF_FormField::RadioButton);
-  CFX_ByteString csOn = GetOnStateName();
+  ByteString csOn = GetOnStateName();
   if (GetType() == CPDF_FormField::RadioButton ||
       GetType() == CPDF_FormField::CheckBox) {
     if (CPDF_Array* pArray =
@@ -131,8 +131,8 @@
 bool CPDF_FormControl::IsChecked() const {
   ASSERT(GetType() == CPDF_FormField::CheckBox ||
          GetType() == CPDF_FormField::RadioButton);
-  CFX_ByteString csOn = GetOnStateName();
-  CFX_ByteString csAS = m_pWidgetDict->GetStringFor("AS");
+  ByteString csOn = GetOnStateName();
+  ByteString csAS = m_pWidgetDict->GetStringFor("AS");
   return csAS == csOn;
 }
 
@@ -143,17 +143,17 @@
   if (!pDV)
     return false;
 
-  CFX_ByteString csDV = pDV->GetString();
-  CFX_ByteString csOn = GetOnStateName();
+  ByteString csDV = pDV->GetString();
+  ByteString csOn = GetOnStateName();
   return (csDV == csOn);
 }
 
 void CPDF_FormControl::CheckControl(bool bChecked) {
   ASSERT(GetType() == CPDF_FormField::CheckBox ||
          GetType() == CPDF_FormField::RadioButton);
-  CFX_ByteString csOn = GetOnStateName();
-  CFX_ByteString csOldAS = m_pWidgetDict->GetStringFor("AS", "Off");
-  CFX_ByteString csAS = "Off";
+  ByteString csOn = GetOnStateName();
+  ByteString csOldAS = m_pWidgetDict->GetStringFor("AS", "Off");
+  ByteString csAS = "Off";
   if (bChecked)
     csAS = csOn;
   if (csOldAS == csAS)
@@ -192,7 +192,7 @@
   if (!m_pWidgetDict)
     return Invert;
 
-  CFX_ByteString csH = m_pWidgetDict->GetStringFor("H", "I");
+  ByteString csH = m_pWidgetDict->GetStringFor("H", "I");
   for (size_t i = 0; i < FX_ArraySize(g_sHighlightingMode); ++i) {
     if (csH == g_sHighlightingMode[i])
       return static_cast<HighlightingMode>(i);
@@ -205,7 +205,7 @@
                                        : nullptr);
 }
 
-bool CPDF_FormControl::HasMKEntry(const CFX_ByteString& csEntry) const {
+bool CPDF_FormControl::HasMKEntry(const ByteString& csEntry) const {
   return GetMK().HasMKEntry(csEntry);
 }
 
@@ -213,27 +213,25 @@
   return GetMK().GetRotation();
 }
 
-FX_ARGB CPDF_FormControl::GetColor(int& iColorType,
-                                   const CFX_ByteString& csEntry) {
+FX_ARGB CPDF_FormControl::GetColor(int& iColorType, const ByteString& csEntry) {
   return GetMK().GetColor(iColorType, csEntry);
 }
 
-float CPDF_FormControl::GetOriginalColor(int index,
-                                         const CFX_ByteString& csEntry) {
+float CPDF_FormControl::GetOriginalColor(int index, const ByteString& csEntry) {
   return GetMK().GetOriginalColor(index, csEntry);
 }
 
 void CPDF_FormControl::GetOriginalColor(int& iColorType,
                                         float fc[4],
-                                        const CFX_ByteString& csEntry) {
+                                        const ByteString& csEntry) {
   GetMK().GetOriginalColor(iColorType, fc, csEntry);
 }
 
-CFX_WideString CPDF_FormControl::GetCaption(const CFX_ByteString& csEntry) {
+WideString CPDF_FormControl::GetCaption(const ByteString& csEntry) {
   return GetMK().GetCaption(csEntry);
 }
 
-CPDF_Stream* CPDF_FormControl::GetIcon(const CFX_ByteString& csEntry) {
+CPDF_Stream* CPDF_FormControl::GetIcon(const ByteString& csEntry) {
   return GetMK().GetIcon(csEntry);
 }
 
@@ -284,7 +282,7 @@
 CPDF_Font* CPDF_FormControl::GetDefaultControlFont() {
   float fFontSize;
   CPDF_DefaultAppearance cDA = GetDefaultAppearance();
-  CFX_ByteString csFontNameTag = cDA.GetFont(&fFontSize);
+  ByteString csFontNameTag = cDA.GetFont(&fFontSize);
   if (csFontNameTag.IsEmpty())
     return nullptr;
 
diff --git a/core/fpdfdoc/cpdf_formcontrol.h b/core/fpdfdoc/cpdf_formcontrol.h
index eb63b5b..4f686f4 100644
--- a/core/fpdfdoc/cpdf_formcontrol.h
+++ b/core/fpdfdoc/cpdf_formcontrol.h
@@ -61,14 +61,14 @@
                    CPDF_Annot::AppearanceMode mode,
                    const CPDF_RenderOptions* pOptions = nullptr);
 
-  CFX_ByteString GetCheckedAPState();
-  CFX_WideString GetExportValue() const;
+  ByteString GetCheckedAPState();
+  WideString GetExportValue() const;
 
   bool IsChecked() const;
   bool IsDefaultChecked() const;
 
   HighlightingMode GetHighlightingMode();
-  bool HasMKEntry(const CFX_ByteString& csEntry) const;
+  bool HasMKEntry(const ByteString& csEntry) const;
   int GetRotation();
 
   FX_ARGB GetBorderColor(int& iColorType) { return GetColor(iColorType, "BC"); }
@@ -93,9 +93,9 @@
     GetOriginalColor(iColorType, fc, "BG");
   }
 
-  CFX_WideString GetNormalCaption() { return GetCaption("CA"); }
-  CFX_WideString GetRolloverCaption() { return GetCaption("RC"); }
-  CFX_WideString GetDownCaption() { return GetCaption("AC"); }
+  WideString GetNormalCaption() { return GetCaption("CA"); }
+  WideString GetRolloverCaption() { return GetCaption("RC"); }
+  WideString GetDownCaption() { return GetCaption("AC"); }
 
   CPDF_Stream* GetNormalIcon() { return GetIcon("I"); }
   CPDF_Stream* GetRolloverIcon() { return GetIcon("RI"); }
@@ -114,17 +114,17 @@
   friend class CPDF_InterForm;
   friend class CPDF_FormField;
 
-  CFX_ByteString GetOnStateName() const;
-  void SetOnStateName(const CFX_ByteString& csOn);
+  ByteString GetOnStateName() const;
+  void SetOnStateName(const ByteString& csOn);
   void CheckControl(bool bChecked);
-  FX_ARGB GetColor(int& iColorType, const CFX_ByteString& csEntry);
-  float GetOriginalColor(int index, const CFX_ByteString& csEntry);
+  FX_ARGB GetColor(int& iColorType, const ByteString& csEntry);
+  float GetOriginalColor(int index, const ByteString& csEntry);
   void GetOriginalColor(int& iColorType,
                         float fc[4],
-                        const CFX_ByteString& csEntry);
+                        const ByteString& csEntry);
 
-  CFX_WideString GetCaption(const CFX_ByteString& csEntry);
-  CPDF_Stream* GetIcon(const CFX_ByteString& csEntry);
+  WideString GetCaption(const ByteString& csEntry);
+  CPDF_Stream* GetIcon(const ByteString& csEntry);
   CPDF_ApSettings GetMK() const;
 
   CPDF_FormField* const m_pField;
diff --git a/core/fpdfdoc/cpdf_formfield.cpp b/core/fpdfdoc/cpdf_formfield.cpp
index acb46a5..fec1945 100644
--- a/core/fpdfdoc/cpdf_formfield.cpp
+++ b/core/fpdfdoc/cpdf_formfield.cpp
@@ -65,13 +65,13 @@
   return FPDF_GetFieldAttr(pParent, name, nLevel + 1);
 }
 
-CFX_WideString FPDF_GetFullName(CPDF_Dictionary* pFieldDict) {
-  CFX_WideString full_name;
+WideString FPDF_GetFullName(CPDF_Dictionary* pFieldDict) {
+  WideString full_name;
   std::set<CPDF_Dictionary*> visited;
   CPDF_Dictionary* pLevel = pFieldDict;
   while (pLevel) {
     visited.insert(pLevel);
-    CFX_WideString short_name = pLevel->GetUnicodeTextFor("T");
+    WideString short_name = pLevel->GetUnicodeTextFor("T");
     if (!short_name.IsEmpty()) {
       if (full_name.IsEmpty())
         full_name = short_name;
@@ -98,7 +98,7 @@
 
 void CPDF_FormField::SyncFieldFlags() {
   CPDF_Object* ft_attr = FPDF_GetFieldAttr(m_pDict.Get(), "FT");
-  CFX_ByteString type_name = ft_attr ? ft_attr->GetString() : CFX_ByteString();
+  ByteString type_name = ft_attr ? ft_attr->GetString() : ByteString();
   CPDF_Object* ff_attr = FPDF_GetFieldAttr(m_pDict.Get(), "Ff");
   uint32_t flags = ff_attr ? ff_attr->GetInteger() : 0;
   m_Flags = 0;
@@ -154,7 +154,7 @@
   }
 }
 
-CFX_WideString CPDF_FormField::GetFullName() const {
+WideString CPDF_FormField::GetFullName() const {
   return FPDF_GetFullName(m_pDict.Get());
 }
 
@@ -180,7 +180,7 @@
     }
     case CPDF_FormField::ComboBox:
     case CPDF_FormField::ListBox: {
-      CFX_WideString csValue;
+      WideString csValue;
       ClearSelection();
       int iIndex = GetDefaultSelectedItem();
       if (iIndex >= 0)
@@ -199,12 +199,12 @@
     case CPDF_FormField::File:
     default: {
       CPDF_Object* pDV = FPDF_GetFieldAttr(m_pDict.Get(), "DV");
-      CFX_WideString csDValue;
+      WideString csDValue;
       if (pDV)
         csDValue = pDV->GetUnicodeText();
 
       CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict.Get(), "V");
-      CFX_WideString csValue;
+      WideString csValue;
       if (pV)
         csValue = pV->GetUnicodeText();
 
@@ -272,12 +272,12 @@
   return CPDF_AAction(pObj ? pObj->GetDict() : nullptr);
 }
 
-CFX_WideString CPDF_FormField::GetAlternateName() const {
+WideString CPDF_FormField::GetAlternateName() const {
   CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict.Get(), "TU");
   return pObj ? pObj->GetUnicodeText() : L"";
 }
 
-CFX_WideString CPDF_FormField::GetMappingName() const {
+WideString CPDF_FormField::GetMappingName() const {
   CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict.Get(), "TM");
   return pObj ? pObj->GetUnicodeText() : L"";
 }
@@ -287,17 +287,17 @@
   return pObj ? pObj->GetInteger() : 0;
 }
 
-CFX_ByteString CPDF_FormField::GetDefaultStyle() const {
+ByteString CPDF_FormField::GetDefaultStyle() const {
   CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict.Get(), "DS");
   return pObj ? pObj->GetString() : "";
 }
 
-CFX_WideString CPDF_FormField::GetRichTextString() const {
+WideString CPDF_FormField::GetRichTextString() const {
   CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict.Get(), "RV");
   return pObj ? pObj->GetUnicodeText() : L"";
 }
 
-CFX_WideString CPDF_FormField::GetValue(bool bDefault) const {
+WideString CPDF_FormField::GetValue(bool bDefault) const {
   if (GetType() == CheckBox || GetType() == RadioButton)
     return GetCheckValue(bDefault);
 
@@ -310,7 +310,7 @@
         pValue = FPDF_GetFieldAttr(m_pDict.Get(), "DV");
     }
     if (!pValue)
-      return CFX_WideString();
+      return WideString();
   }
 
   switch (pValue->GetType()) {
@@ -325,18 +325,18 @@
     default:
       break;
   }
-  return CFX_WideString();
+  return WideString();
 }
 
-CFX_WideString CPDF_FormField::GetValue() const {
+WideString CPDF_FormField::GetValue() const {
   return GetValue(false);
 }
 
-CFX_WideString CPDF_FormField::GetDefaultValue() const {
+WideString CPDF_FormField::GetDefaultValue() const {
   return GetValue(true);
 }
 
-bool CPDF_FormField::SetValue(const CFX_WideString& value,
+bool CPDF_FormField::SetValue(const WideString& value,
                               bool bDefault,
                               bool bNotify) {
   switch (m_Type) {
@@ -349,14 +349,14 @@
     case RichText:
     case Text:
     case ComboBox: {
-      CFX_WideString csValue = value;
+      WideString csValue = value;
       if (bNotify && !NotifyBeforeValueChange(csValue))
         return false;
 
-      CFX_ByteString key(bDefault ? "DV" : "V");
+      ByteString key(bDefault ? "DV" : "V");
       int iIndex = FindOptionValue(csValue);
       if (iIndex < 0) {
-        CFX_ByteString bsEncodeText = PDF_EncodeText(csValue);
+        ByteString bsEncodeText = PDF_EncodeText(csValue);
         m_pDict->SetNewFor<CPDF_String>(key, bsEncodeText, false);
         if (m_Type == RichText && !bDefault)
           m_pDict->SetNewFor<CPDF_String>("RV", bsEncodeText, false);
@@ -397,7 +397,7 @@
   return true;
 }
 
-bool CPDF_FormField::SetValue(const CFX_WideString& value, bool bNotify) {
+bool CPDF_FormField::SetValue(const WideString& value, bool bNotify) {
   return SetValue(value, false, bNotify);
 }
 
@@ -440,7 +440,7 @@
   if (pValue->IsNumber())
     return pValue->GetInteger();
 
-  CFX_WideString sel_value;
+  WideString sel_value;
   if (pValue->IsString()) {
     if (index != 0)
       return -1;
@@ -451,12 +451,11 @@
       return -1;
 
     CPDF_Object* elementValue = pArray->GetDirectObjectAt(index);
-    sel_value =
-        elementValue ? elementValue->GetUnicodeText() : CFX_WideString();
+    sel_value = elementValue ? elementValue->GetUnicodeText() : WideString();
   }
   if (index < CountSelectedOptions()) {
     int iOptIndex = GetSelectedOptionIndex(index);
-    CFX_WideString csOpt = GetOptionValue(iOptIndex);
+    WideString csOpt = GetOptionValue(iOptIndex);
     if (csOpt == sel_value)
       return iOptIndex;
   }
@@ -469,7 +468,7 @@
 
 bool CPDF_FormField::ClearSelection(bool bNotify) {
   if (bNotify && m_pForm->m_pFormNotify) {
-    CFX_WideString csValue;
+    WideString csValue;
     int iIndex = GetSelectedIndex(0);
     if (iIndex >= 0)
       csValue = GetOptionLabel(iIndex);
@@ -491,7 +490,7 @@
   if (IsOptionSelected(index))
     return true;
 
-  CFX_WideString opt_value = GetOptionValue(index);
+  WideString opt_value = GetOptionValue(index);
   CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict.Get(), "V");
   if (!pValue) {
     pValue = FPDF_GetFieldAttr(m_pDict.Get(), "I");
@@ -532,7 +531,7 @@
   if (index < 0 || index >= CountOptions())
     return false;
 
-  CFX_WideString opt_value = GetOptionValue(index);
+  WideString opt_value = GetOptionValue(index);
   if (bNotify && !NotifyListOrComboBoxBeforeChange(opt_value))
     return false;
 
@@ -598,7 +597,7 @@
   CPDF_Object* pValue = FPDF_GetFieldAttr(m_pDict.Get(), "DV");
   if (!pValue)
     return -1;
-  CFX_WideString csDV = pValue->GetUnicodeText();
+  WideString csDV = pValue->GetUnicodeText();
   if (csDV.IsEmpty())
     return -1;
   for (int i = 0; i < CountOptions(); i++) {
@@ -613,30 +612,30 @@
   return pArray ? pArray->GetCount() : 0;
 }
 
-CFX_WideString CPDF_FormField::GetOptionText(int index, int sub_index) const {
+WideString CPDF_FormField::GetOptionText(int index, int sub_index) const {
   CPDF_Array* pArray = ToArray(FPDF_GetFieldAttr(m_pDict.Get(), "Opt"));
   if (!pArray)
-    return CFX_WideString();
+    return WideString();
 
   CPDF_Object* pOption = pArray->GetDirectObjectAt(index);
   if (!pOption)
-    return CFX_WideString();
+    return WideString();
   if (CPDF_Array* pOptionArray = pOption->AsArray())
     pOption = pOptionArray->GetDirectObjectAt(sub_index);
 
   CPDF_String* pString = ToString(pOption);
-  return pString ? pString->GetUnicodeText() : CFX_WideString();
+  return pString ? pString->GetUnicodeText() : WideString();
 }
 
-CFX_WideString CPDF_FormField::GetOptionLabel(int index) const {
+WideString CPDF_FormField::GetOptionLabel(int index) const {
   return GetOptionText(index, 1);
 }
 
-CFX_WideString CPDF_FormField::GetOptionValue(int index) const {
+WideString CPDF_FormField::GetOptionValue(int index) const {
   return GetOptionText(index, 0);
 }
 
-int CPDF_FormField::FindOption(CFX_WideString csOptLabel) const {
+int CPDF_FormField::FindOption(WideString csOptLabel) const {
   for (int i = 0; i < CountOptions(); i++) {
     if (GetOptionValue(i) == csOptLabel)
       return i;
@@ -644,7 +643,7 @@
   return -1;
 }
 
-int CPDF_FormField::FindOptionValue(const CFX_WideString& csOptValue) const {
+int CPDF_FormField::FindOptionValue(const WideString& csOptValue) const {
   for (int i = 0; i < CountOptions(); i++) {
     if (GetOptionValue(i) == csOptValue)
       return i;
@@ -653,7 +652,7 @@
 }
 
 #ifdef PDF_ENABLE_XFA
-int CPDF_FormField::InsertOption(CFX_WideString csOptLabel,
+int CPDF_FormField::InsertOption(WideString csOptLabel,
                                  int index,
                                  bool bNotify) {
   if (csOptLabel.IsEmpty())
@@ -662,7 +661,7 @@
   if (bNotify && !NotifyListOrComboBoxBeforeChange(csOptLabel))
     return -1;
 
-  CFX_ByteString csStr = PDF_EncodeText(csOptLabel);
+  ByteString csStr = PDF_EncodeText(csOptLabel);
   CPDF_Array* pOpt = ToArray(FPDF_GetFieldAttr(m_pDict.Get(), "Opt"));
   if (!pOpt)
     pOpt = m_pDict->SetNewFor<CPDF_Array>("Opt");
@@ -682,7 +681,7 @@
 
 bool CPDF_FormField::ClearOptions(bool bNotify) {
   if (bNotify && m_pForm->m_pFormNotify) {
-    CFX_WideString csValue;
+    WideString csValue;
     int iIndex = GetSelectedIndex(0);
     if (iIndex >= 0)
       csValue = GetOptionLabel(iIndex);
@@ -713,14 +712,14 @@
   if (!bChecked && pControl->IsChecked() == bChecked)
     return false;
 
-  CFX_WideString csWExport = pControl->GetExportValue();
-  CFX_ByteString csBExport = PDF_EncodeText(csWExport);
+  WideString csWExport = pControl->GetExportValue();
+  ByteString csBExport = PDF_EncodeText(csWExport);
   int iCount = CountControls();
   bool bUnison = IsUnison(this);
   for (int i = 0; i < iCount; i++) {
     CPDF_FormControl* pCtrl = GetControl(i);
     if (bUnison) {
-      CFX_WideString csEValue = pCtrl->GetExportValue();
+      WideString csEValue = pCtrl->GetExportValue();
       if (csEValue == csWExport) {
         if (pCtrl->GetOnStateName() == pControl->GetOnStateName())
           pCtrl->CheckControl(bChecked);
@@ -742,7 +741,7 @@
     if (bChecked) {
       m_pDict->SetNewFor<CPDF_Name>("V", csBExport);
     } else {
-      CFX_ByteString csV;
+      ByteString csV;
       CPDF_Object* pV = FPDF_GetFieldAttr(m_pDict.Get(), "V");
       if (pV)
         csV = pV->GetString();
@@ -750,7 +749,7 @@
         m_pDict->SetNewFor<CPDF_Name>("V", "Off");
     }
   } else if (bChecked) {
-    CFX_ByteString csIndex;
+    ByteString csIndex;
     csIndex.Format("%d", iControlIndex);
     m_pDict->SetNewFor<CPDF_Name>("V", csIndex);
   }
@@ -759,9 +758,9 @@
   return true;
 }
 
-CFX_WideString CPDF_FormField::GetCheckValue(bool bDefault) const {
+WideString CPDF_FormField::GetCheckValue(bool bDefault) const {
   ASSERT(GetType() == CheckBox || GetType() == RadioButton);
-  CFX_WideString csExport = L"Off";
+  WideString csExport = L"Off";
   int iCount = CountControls();
   for (int i = 0; i < iCount; i++) {
     CPDF_FormControl* pControl = GetControl(i);
@@ -775,14 +774,14 @@
   return csExport;
 }
 
-bool CPDF_FormField::SetCheckValue(const CFX_WideString& value,
+bool CPDF_FormField::SetCheckValue(const WideString& value,
                                    bool bDefault,
                                    bool bNotify) {
   ASSERT(GetType() == CheckBox || GetType() == RadioButton);
   int iCount = CountControls();
   for (int i = 0; i < iCount; i++) {
     CPDF_FormControl* pControl = GetControl(i);
-    CFX_WideString csExport = pControl->GetExportValue();
+    WideString csExport = pControl->GetExportValue();
     bool val = csExport == value;
     if (!bDefault)
       CheckControl(GetControlIndex(pControl), val);
@@ -844,7 +843,7 @@
         return true;
 
       if (bNotify && m_pForm->m_pFormNotify) {
-        CFX_WideString csValue = GetOptionLabel(iOptIndex);
+        WideString csValue = GetOptionLabel(iOptIndex);
         if (!NotifyListOrComboBoxBeforeChange(csValue))
           return false;
       }
@@ -858,7 +857,7 @@
         continue;
 
       if (bNotify && m_pForm->m_pFormNotify) {
-        CFX_WideString csValue = GetOptionLabel(iOptIndex);
+        WideString csValue = GetOptionLabel(iOptIndex);
         if (!NotifyListOrComboBoxBeforeChange(csValue))
           return false;
       }
@@ -882,7 +881,7 @@
 
 bool CPDF_FormField::ClearSelectedOptions(bool bNotify) {
   if (bNotify && m_pForm->m_pFormNotify) {
-    CFX_WideString csValue;
+    WideString csValue;
     int iIndex = GetSelectedIndex(0);
     if (iIndex >= 0)
       csValue = GetOptionLabel(iIndex);
@@ -902,7 +901,7 @@
   if (!pFormDict)
     return;
 
-  CFX_ByteString DA;
+  ByteString DA;
   if (CPDF_Object* pObj = FPDF_GetFieldAttr(m_pDict.Get(), "DA"))
     DA = pObj->GetString();
 
@@ -920,9 +919,9 @@
   if (!pFont)
     return;
 
-  CPDF_SimpleParser syntax(DA.AsStringC());
+  CPDF_SimpleParser syntax(DA.AsStringView());
   syntax.FindTagParamFromStart("Tf", 2);
-  CFX_ByteString font_name(syntax.GetWord());
+  ByteString font_name(syntax.GetWord());
   CPDF_Dictionary* pFontDict = pFont->GetDictFor(font_name);
   if (!pFontDict)
     return;
@@ -931,7 +930,7 @@
   m_FontSize = FX_atof(syntax.GetWord());
 }
 
-bool CPDF_FormField::NotifyBeforeSelectionChange(const CFX_WideString& value) {
+bool CPDF_FormField::NotifyBeforeSelectionChange(const WideString& value) {
   if (!m_pForm->m_pFormNotify)
     return true;
   return m_pForm->m_pFormNotify->BeforeSelectionChange(this, value) >= 0;
@@ -943,7 +942,7 @@
   m_pForm->m_pFormNotify->AfterSelectionChange(this);
 }
 
-bool CPDF_FormField::NotifyBeforeValueChange(const CFX_WideString& value) {
+bool CPDF_FormField::NotifyBeforeValueChange(const WideString& value) {
   if (!m_pForm->m_pFormNotify)
     return true;
   return m_pForm->m_pFormNotify->BeforeValueChange(this, value) >= 0;
@@ -955,8 +954,7 @@
   m_pForm->m_pFormNotify->AfterValueChange(this);
 }
 
-bool CPDF_FormField::NotifyListOrComboBoxBeforeChange(
-    const CFX_WideString& value) {
+bool CPDF_FormField::NotifyListOrComboBoxBeforeChange(const WideString& value) {
   switch (GetType()) {
     case ListBox:
       return NotifyBeforeSelectionChange(value);
diff --git a/core/fpdfdoc/cpdf_formfield.h b/core/fpdfdoc/cpdf_formfield.h
index 417f9d1..6b4b725 100644
--- a/core/fpdfdoc/cpdf_formfield.h
+++ b/core/fpdfdoc/cpdf_formfield.h
@@ -40,7 +40,7 @@
 CPDF_Object* FPDF_GetFieldAttr(const CPDF_Dictionary* pFieldDict,
                                const char* name,
                                int nLevel = 0);
-CFX_WideString FPDF_GetFullName(CPDF_Dictionary* pFieldDict);
+WideString FPDF_GetFullName(CPDF_Dictionary* pFieldDict);
 
 class CPDF_FormField {
  public:
@@ -60,7 +60,7 @@
   CPDF_FormField(CPDF_InterForm* pForm, CPDF_Dictionary* pDict);
   ~CPDF_FormField();
 
-  CFX_WideString GetFullName() const;
+  WideString GetFullName() const;
 
   Type GetType() const { return m_Type; }
   uint32_t GetFlags() const { return m_Flags; }
@@ -82,16 +82,16 @@
   int GetFieldType() const;
 
   CPDF_AAction GetAdditionalAction() const;
-  CFX_WideString GetAlternateName() const;
-  CFX_WideString GetMappingName() const;
+  WideString GetAlternateName() const;
+  WideString GetMappingName() const;
 
   uint32_t GetFieldFlags() const;
-  CFX_ByteString GetDefaultStyle() const;
-  CFX_WideString GetRichTextString() const;
+  ByteString GetDefaultStyle() const;
+  WideString GetRichTextString() const;
 
-  CFX_WideString GetValue() const;
-  CFX_WideString GetDefaultValue() const;
-  bool SetValue(const CFX_WideString& value, bool bNotify = false);
+  WideString GetValue() const;
+  WideString GetDefaultValue() const;
+  bool SetValue(const WideString& value, bool bNotify = false);
 
   int GetMaxLen() const;
   int CountSelectedItems() const;
@@ -106,11 +106,11 @@
   int GetDefaultSelectedItem() const;
   int CountOptions() const;
 
-  CFX_WideString GetOptionLabel(int index) const;
-  CFX_WideString GetOptionValue(int index) const;
+  WideString GetOptionLabel(int index) const;
+  WideString GetOptionValue(int index) const;
 
-  int FindOption(CFX_WideString csOptLabel) const;
-  int FindOptionValue(const CFX_WideString& csOptValue) const;
+  int FindOption(WideString csOptLabel) const;
+  int FindOptionValue(const WideString& csOptValue) const;
 
   bool CheckControl(int iControlIndex, bool bChecked, bool bNotify = false);
 
@@ -127,9 +127,7 @@
 #ifdef PDF_ENABLE_XFA
   bool ClearOptions(bool bNotify = false);
 
-  int InsertOption(CFX_WideString csOptLabel,
-                   int index = -1,
-                   bool bNotify = false);
+  int InsertOption(WideString csOptLabel, int index = -1, bool bNotify = false);
 #endif  // PDF_ENABLE_XFA
 
   float GetFontSize() const { return m_FontSize; }
@@ -138,7 +136,7 @@
   const CPDF_Dictionary* GetDict() const { return m_pDict.Get(); }
   const CPDF_InterForm* GetForm() const { return m_pForm.Get(); }
 
-  CFX_WideString GetCheckValue(bool bDefault) const;
+  WideString GetCheckValue(bool bDefault) const;
 
   void AddFormControl(CPDF_FormControl* pFormControl) {
     m_ControlList.emplace_back(pFormControl);
@@ -149,23 +147,23 @@
   }
 
  private:
-  CFX_WideString GetValue(bool bDefault) const;
-  bool SetValue(const CFX_WideString& value, bool bDefault, bool bNotify);
+  WideString GetValue(bool bDefault) const;
+  bool SetValue(const WideString& value, bool bDefault, bool bNotify);
 
   void SyncFieldFlags();
   int FindListSel(CPDF_String* str);
-  CFX_WideString GetOptionText(int index, int sub_index) const;
+  WideString GetOptionText(int index, int sub_index) const;
 
   void LoadDA();
-  bool SetCheckValue(const CFX_WideString& value, bool bDefault, bool bNotify);
+  bool SetCheckValue(const WideString& value, bool bDefault, bool bNotify);
 
-  bool NotifyBeforeSelectionChange(const CFX_WideString& value);
+  bool NotifyBeforeSelectionChange(const WideString& value);
   void NotifyAfterSelectionChange();
 
-  bool NotifyBeforeValueChange(const CFX_WideString& value);
+  bool NotifyBeforeValueChange(const WideString& value);
   void NotifyAfterValueChange();
 
-  bool NotifyListOrComboBoxBeforeChange(const CFX_WideString& value);
+  bool NotifyListOrComboBoxBeforeChange(const WideString& value);
   void NotifyListOrComboBoxAfterChange();
 
   CPDF_FormField::Type m_Type;
diff --git a/core/fpdfdoc/cpdf_formfield_unittest.cpp b/core/fpdfdoc/cpdf_formfield_unittest.cpp
index 4aeda84..af5d15d 100644
--- a/core/fpdfdoc/cpdf_formfield_unittest.cpp
+++ b/core/fpdfdoc/cpdf_formfield_unittest.cpp
@@ -10,7 +10,7 @@
 #include "testing/gtest/include/gtest/gtest.h"
 
 TEST(cpdf_formfield, FPDF_GetFullName) {
-  CFX_WideString name = FPDF_GetFullName(nullptr);
+  WideString name = FPDF_GetFullName(nullptr);
   EXPECT_TRUE(name.IsEmpty());
 
   CPDF_IndirectObjectHolder obj_holder;
diff --git a/core/fpdfdoc/cpdf_iconfit.cpp b/core/fpdfdoc/cpdf_iconfit.cpp
index a28f3bc..20ed963 100644
--- a/core/fpdfdoc/cpdf_iconfit.cpp
+++ b/core/fpdfdoc/cpdf_iconfit.cpp
@@ -20,7 +20,7 @@
   if (!m_pDict)
     return Always;
 
-  CFX_ByteString csSW = m_pDict->GetStringFor("SW", "A");
+  ByteString csSW = m_pDict->GetStringFor("SW", "A");
   if (csSW == "B")
     return Bigger;
   if (csSW == "S")
diff --git a/core/fpdfdoc/cpdf_interform.cpp b/core/fpdfdoc/cpdf_interform.cpp
index 7e73f7e..3bbb50b 100644
--- a/core/fpdfdoc/cpdf_interform.cpp
+++ b/core/fpdfdoc/cpdf_interform.cpp
@@ -40,24 +40,24 @@
     {"UHC", 949},
 };
 
-CFX_WideString GetFieldValue(const CPDF_Dictionary& pFieldDict,
-                             const CFX_ByteString& bsEncoding) {
-  const CFX_ByteString csBValue = pFieldDict.GetStringFor("V");
+WideString GetFieldValue(const CPDF_Dictionary& pFieldDict,
+                         const ByteString& bsEncoding) {
+  const ByteString csBValue = pFieldDict.GetStringFor("V");
   for (const auto& encoding : g_fieldEncoding) {
     if (bsEncoding == encoding.m_name)
-      return CFX_WideString::FromCodePage(csBValue.AsStringC(),
-                                          encoding.m_codePage);
+      return WideString::FromCodePage(csBValue.AsStringView(),
+                                      encoding.m_codePage);
   }
-  CFX_ByteString csTemp = csBValue.Left(2);
+  ByteString csTemp = csBValue.Left(2);
   if (csTemp == "\xFF\xFE" || csTemp == "\xFE\xFF")
     return PDF_DecodeText(csBValue);
-  return CFX_WideString::FromLocal(csBValue.AsStringC());
+  return WideString::FromLocal(csBValue.AsStringView());
 }
 
 void AddFont(CPDF_Dictionary*& pFormDict,
              CPDF_Document* pDocument,
              const CPDF_Font* pFont,
-             CFX_ByteString* csNameTag);
+             ByteString* csNameTag);
 
 void InitDict(CPDF_Dictionary*& pFormDict, CPDF_Document* pDocument) {
   if (!pDocument)
@@ -69,17 +69,16 @@
                                                     pFormDict->GetObjNum());
   }
 
-  CFX_ByteString csDA;
+  ByteString csDA;
   if (!pFormDict->KeyExist("DR")) {
-    CFX_ByteString csBaseName;
+    ByteString csBaseName;
     uint8_t charSet = CPDF_InterForm::GetNativeCharSet();
     CPDF_Font* pFont = CPDF_InterForm::AddStandardFont(pDocument, "Helvetica");
     if (pFont)
       AddFont(pFormDict, pDocument, pFont, &csBaseName);
 
     if (charSet != FX_CHARSET_ANSI) {
-      CFX_ByteString csFontName =
-          CPDF_InterForm::GetNativeFont(charSet, nullptr);
+      ByteString csFontName = CPDF_InterForm::GetNativeFont(charSet, nullptr);
       if (!pFont || csFontName != "Helvetica") {
         pFont = CPDF_InterForm::AddNativeFont(pDocument);
         if (pFont) {
@@ -101,8 +100,8 @@
 
 CPDF_Font* GetFont(CPDF_Dictionary* pFormDict,
                    CPDF_Document* pDocument,
-                   const CFX_ByteString& csNameTag) {
-  CFX_ByteString csAlias = PDF_NameDecode(csNameTag);
+                   const ByteString& csNameTag) {
+  ByteString csAlias = PDF_NameDecode(csNameTag);
   if (!pFormDict || csAlias.IsEmpty())
     return nullptr;
 
@@ -126,7 +125,7 @@
 CPDF_Font* GetNativeFont(CPDF_Dictionary* pFormDict,
                          CPDF_Document* pDocument,
                          uint8_t charSet,
-                         CFX_ByteString* csNameTag) {
+                         ByteString* csNameTag) {
   if (!pFormDict)
     return nullptr;
 
@@ -139,7 +138,7 @@
     return nullptr;
 
   for (const auto& it : *pFonts) {
-    const CFX_ByteString& csKey = it.first;
+    const ByteString& csKey = it.first;
     if (!it.second)
       continue;
 
@@ -166,7 +165,7 @@
 
 bool FindFont(CPDF_Dictionary* pFormDict,
               const CPDF_Font* pFont,
-              CFX_ByteString* csNameTag) {
+              ByteString* csNameTag) {
   if (!pFormDict || !pFont)
     return false;
 
@@ -179,7 +178,7 @@
     return false;
 
   for (const auto& it : *pFonts) {
-    const CFX_ByteString& csKey = it.first;
+    const ByteString& csKey = it.first;
     if (!it.second)
       continue;
     CPDF_Dictionary* pElement = ToDictionary(it.second->GetDirect());
@@ -197,9 +196,9 @@
 
 bool FindFont(CPDF_Dictionary* pFormDict,
               CPDF_Document* pDocument,
-              CFX_ByteString csFontName,
+              ByteString csFontName,
               CPDF_Font*& pFont,
-              CFX_ByteString* csNameTag) {
+              ByteString* csNameTag) {
   if (!pFormDict)
     return false;
 
@@ -215,7 +214,7 @@
     csFontName.Remove(' ');
 
   for (const auto& it : *pFonts) {
-    const CFX_ByteString& csKey = it.first;
+    const ByteString& csKey = it.first;
     if (!it.second)
       continue;
 
@@ -228,7 +227,7 @@
     if (!pFont)
       continue;
 
-    CFX_ByteString csBaseFont;
+    ByteString csBaseFont;
     csBaseFont = pFont->GetBaseFont();
     csBaseFont.Remove(' ');
     if (csBaseFont == csFontName) {
@@ -242,13 +241,13 @@
 void AddFont(CPDF_Dictionary*& pFormDict,
              CPDF_Document* pDocument,
              const CPDF_Font* pFont,
-             CFX_ByteString* csNameTag) {
+             ByteString* csNameTag) {
   if (!pFont)
     return;
   if (!pFormDict)
     InitDict(pFormDict, pDocument);
 
-  CFX_ByteString csTag;
+  ByteString csTag;
   if (FindFont(pFormDict, pFont, &csTag)) {
     *csNameTag = csTag;
     return;
@@ -277,17 +276,17 @@
 CPDF_Font* AddNativeFont(CPDF_Dictionary*& pFormDict,
                          CPDF_Document* pDocument,
                          uint8_t charSet,
-                         CFX_ByteString* csNameTag) {
+                         ByteString* csNameTag) {
   if (!pFormDict)
     InitDict(pFormDict, pDocument);
 
-  CFX_ByteString csTemp;
+  ByteString csTemp;
   CPDF_Font* pFont = GetNativeFont(pFormDict, pDocument, charSet, &csTemp);
   if (pFont) {
     *csNameTag = csTemp;
     return pFont;
   }
-  CFX_ByteString csFontName = CPDF_InterForm::GetNativeFont(charSet, nullptr);
+  ByteString csFontName = CPDF_InterForm::GetNativeFont(charSet, nullptr);
   if (!csFontName.IsEmpty() &&
       FindFont(pFormDict, pDocument, csFontName, pFont, csNameTag)) {
     return pFont;
@@ -301,7 +300,7 @@
 
 class CFieldNameExtractor {
  public:
-  explicit CFieldNameExtractor(const CFX_WideString& full_name)
+  explicit CFieldNameExtractor(const WideString& full_name)
       : m_FullName(full_name) {
     m_pCur = m_FullName.c_str();
     m_pEnd = m_pCur + m_FullName.GetLength();
@@ -318,7 +317,7 @@
   }
 
  protected:
-  CFX_WideString m_FullName;
+  WideString m_FullName;
   const wchar_t* m_pCur;
   const wchar_t* m_pEnd;
 };
@@ -371,7 +370,7 @@
 }
 #endif  // _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
 
-int CompareFieldName(const CFX_WideString& name1, const CFX_WideString& name2) {
+int CompareFieldName(const WideString& name1, const WideString& name2) {
   const wchar_t* ptr1 = name1.c_str();
   const wchar_t* ptr2 = name2.c_str();
   if (name1.GetLength() == name2.GetLength())
@@ -394,7 +393,7 @@
   class Node {
    public:
     Node() : m_pField(nullptr), m_level(0) {}
-    Node(const CFX_WideString& short_name, int level)
+    Node(const WideString& short_name, int level)
         : m_ShortName(short_name), m_level(level) {}
     ~Node() {}
 
@@ -420,7 +419,7 @@
 
     CPDF_FormField* GetField() const { return m_pField.get(); }
 
-    const CFX_WideString& GetShortName() const { return m_ShortName; }
+    const WideString& GetShortName() const { return m_ShortName; }
 
     int GetLevel() const { return m_level; }
 
@@ -451,7 +450,7 @@
     }
 
     std::vector<std::unique_ptr<Node>> m_Children;
-    CFX_WideString m_ShortName;
+    WideString m_ShortName;
     std::unique_ptr<CPDF_FormField> m_pField;
     const int m_level;
   };
@@ -459,14 +458,14 @@
   CFieldTree();
   ~CFieldTree();
 
-  bool SetField(const CFX_WideString& full_name,
+  bool SetField(const WideString& full_name,
                 std::unique_ptr<CPDF_FormField> pField);
-  CPDF_FormField* GetField(const CFX_WideString& full_name);
+  CPDF_FormField* GetField(const WideString& full_name);
 
-  Node* FindNode(const CFX_WideString& full_name);
-  Node* AddChild(Node* pParent, const CFX_WideString& short_name);
+  Node* FindNode(const WideString& full_name);
+  Node* AddChild(Node* pParent, const WideString& short_name);
 
-  Node* Lookup(Node* pParent, const CFX_WideString& short_name);
+  Node* Lookup(Node* pParent, const WideString& short_name);
 
   Node m_Root;
 };
@@ -476,7 +475,7 @@
 CFieldTree::~CFieldTree() {}
 
 CFieldTree::Node* CFieldTree::AddChild(Node* pParent,
-                                       const CFX_WideString& short_name) {
+                                       const WideString& short_name) {
   if (!pParent)
     return nullptr;
 
@@ -491,7 +490,7 @@
 }
 
 CFieldTree::Node* CFieldTree::Lookup(Node* pParent,
-                                     const CFX_WideString& short_name) {
+                                     const WideString& short_name) {
   if (!pParent)
     return nullptr;
 
@@ -503,7 +502,7 @@
   return nullptr;
 }
 
-bool CFieldTree::SetField(const CFX_WideString& full_name,
+bool CFieldTree::SetField(const WideString& full_name,
                           std::unique_ptr<CPDF_FormField> pField) {
   if (full_name.IsEmpty())
     return false;
@@ -516,7 +515,7 @@
   Node* pLast = nullptr;
   while (nLength > 0) {
     pLast = pNode;
-    CFX_WideString name = CFX_WideString(pName, nLength);
+    WideString name = WideString(pName, nLength);
     pNode = Lookup(pLast, name);
     if (!pNode)
       pNode = AddChild(pLast, name);
@@ -532,7 +531,7 @@
   return true;
 }
 
-CPDF_FormField* CFieldTree::GetField(const CFX_WideString& full_name) {
+CPDF_FormField* CFieldTree::GetField(const WideString& full_name) {
   if (full_name.IsEmpty())
     return nullptr;
 
@@ -544,14 +543,14 @@
   Node* pLast = nullptr;
   while (nLength > 0 && pNode) {
     pLast = pNode;
-    CFX_WideString name = CFX_WideString(pName, nLength);
+    WideString name = WideString(pName, nLength);
     pNode = Lookup(pLast, name);
     name_extractor.GetNext(pName, nLength);
   }
   return pNode ? pNode->GetField() : nullptr;
 }
 
-CFieldTree::Node* CFieldTree::FindNode(const CFX_WideString& full_name) {
+CFieldTree::Node* CFieldTree::FindNode(const WideString& full_name) {
   if (full_name.IsEmpty())
     return nullptr;
 
@@ -563,7 +562,7 @@
   Node* pLast = nullptr;
   while (nLength > 0 && pNode) {
     pLast = pNode;
-    CFX_WideString name = CFX_WideString(pName, nLength);
+    WideString name = WideString(pName, nLength);
     pNode = Lookup(pLast, name);
     name_extractor.GetNext(pName, nLength);
   }
@@ -572,7 +571,7 @@
 
 CPDF_Font* AddNativeInterFormFont(CPDF_Dictionary*& pFormDict,
                                   CPDF_Document* pDocument,
-                                  CFX_ByteString* csNameTag) {
+                                  ByteString* csNameTag) {
   uint8_t charSet = CPDF_InterForm::GetNativeCharSet();
   return AddNativeFont(pFormDict, pDocument, charSet, csNameTag);
 }
@@ -671,13 +670,13 @@
   s_bUpdateAP = bUpdateAP;
 }
 
-CFX_ByteString CPDF_InterForm::GenerateNewResourceName(
+ByteString CPDF_InterForm::GenerateNewResourceName(
     const CPDF_Dictionary* pResDict,
     const char* csType,
     int iMinLen,
     const char* csPrefix) {
-  CFX_ByteString csStr = csPrefix;
-  CFX_ByteString csBType = csType;
+  ByteString csStr = csPrefix;
+  ByteString csBType = csType;
   if (csStr.IsEmpty()) {
     if (csBType == "ExtGState")
       csStr = "GS";
@@ -688,7 +687,7 @@
     else
       csStr = "Res";
   }
-  CFX_ByteString csTmp = csStr;
+  ByteString csTmp = csStr;
   int iCount = csStr.GetLength();
   int m = 0;
   if (iMinLen > 0) {
@@ -710,9 +709,9 @@
     return csTmp;
 
   int num = 0;
-  CFX_ByteString bsNum;
+  ByteString bsNum;
   while (true) {
-    CFX_ByteString csKey = csTmp + bsNum;
+    ByteString csKey = csTmp + bsNum;
     if (!pDict->KeyExist(csKey))
       return csKey;
     if (m < iCount)
@@ -726,7 +725,7 @@
 }
 
 CPDF_Font* CPDF_InterForm::AddStandardFont(CPDF_Document* pDocument,
-                                           CFX_ByteString csFontName) {
+                                           ByteString csFontName) {
   if (!pDocument || csFontName.IsEmpty())
     return nullptr;
 
@@ -737,8 +736,8 @@
   return pDocument->AddStandardFont(csFontName.c_str(), &encoding);
 }
 
-CFX_ByteString CPDF_InterForm::GetNativeFont(uint8_t charSet, void* pLogFont) {
-  CFX_ByteString csFontName;
+ByteString CPDF_InterForm::GetNativeFont(uint8_t charSet, void* pLogFont) {
+  ByteString csFontName;
 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
   LOGFONTA lf = {};
   if (charSet == FX_CHARSET_ANSI) {
@@ -786,7 +785,7 @@
 
 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
   LOGFONTA lf;
-  CFX_ByteString csFontName = GetNativeFont(charSet, &lf);
+  ByteString csFontName = GetNativeFont(charSet, &lf);
   if (!csFontName.IsEmpty()) {
     if (csFontName == "Helvetica")
       return AddStandardFont(pDocument, csFontName);
@@ -801,7 +800,7 @@
 }
 
 bool CPDF_InterForm::ValidateFieldName(
-    CFX_WideString& csNewFieldName,
+    WideString& csNewFieldName,
     int iType,
     const CPDF_FormField* pExcludedField,
     const CPDF_FormControl* pExcludedControl) const {
@@ -810,7 +809,7 @@
 
   int iPos = 0;
   int iLength = csNewFieldName.GetLength();
-  CFX_WideString csSub;
+  WideString csSub;
   while (true) {
     while (iPos < iLength &&
            (csNewFieldName[iPos] == L'.' || csNewFieldName[iPos] == L' ')) {
@@ -835,7 +834,7 @@
         if (!pExcludedControl || pField->CountControls() < 2)
           continue;
       }
-      CFX_WideString csFullName = pField->GetFullName();
+      WideString csFullName = pField->GetFullName();
       int iRet = CompareFieldName(csSub, csFullName);
       if (iRet == 1) {
         if (pField->GetFieldType() != iType)
@@ -858,7 +857,7 @@
   return true;
 }
 
-size_t CPDF_InterForm::CountFields(const CFX_WideString& csFieldName) const {
+size_t CPDF_InterForm::CountFields(const WideString& csFieldName) const {
   if (csFieldName.IsEmpty())
     return m_pFieldTree->m_Root.CountFields();
 
@@ -866,9 +865,8 @@
   return pNode ? pNode->CountFields() : 0;
 }
 
-CPDF_FormField* CPDF_InterForm::GetField(
-    uint32_t index,
-    const CFX_WideString& csFieldName) const {
+CPDF_FormField* CPDF_InterForm::GetField(uint32_t index,
+                                         const WideString& csFieldName) const {
   if (csFieldName.IsEmpty())
     return m_pFieldTree->m_Root.GetFieldAtIndex(index);
 
@@ -881,7 +879,7 @@
   if (!pFieldDict)
     return nullptr;
 
-  CFX_WideString csWName = FPDF_GetFullName(pFieldDict);
+  WideString csWName = FPDF_GetFullName(pFieldDict);
   return m_pFieldTree->GetField(csWName);
 }
 
@@ -960,7 +958,7 @@
   return -1;
 }
 
-CPDF_Font* CPDF_InterForm::GetFormFont(CFX_ByteString csNameTag) const {
+CPDF_Font* CPDF_InterForm::GetFormFont(ByteString csNameTag) const {
   return GetFont(m_pFormDict.Get(), m_pDocument.Get(), csNameTag);
 }
 
@@ -1070,7 +1068,7 @@
   }
 
   CPDF_Dictionary* pDict = pFieldDict;
-  CFX_WideString csWName = FPDF_GetFullName(pFieldDict);
+  WideString csWName = FPDF_GetFullName(pFieldDict);
   if (csWName.IsEmpty())
     return;
 
@@ -1177,7 +1175,7 @@
 }
 
 std::unique_ptr<CFDF_Document> CPDF_InterForm::ExportToFDF(
-    const CFX_WideString& pdf_path,
+    const WideString& pdf_path,
     bool bSimpleFileSpec) const {
   std::vector<CPDF_FormField*> fields;
   size_t nCount = m_pFieldTree->m_Root.CountFields();
@@ -1187,7 +1185,7 @@
 }
 
 std::unique_ptr<CFDF_Document> CPDF_InterForm::ExportToFDF(
-    const CFX_WideString& pdf_path,
+    const WideString& pdf_path,
     const std::vector<CPDF_FormField*>& fields,
     bool bIncludeOrExclude,
     bool bSimpleFileSpec) const {
@@ -1198,9 +1196,9 @@
   CPDF_Dictionary* pMainDict = pDoc->GetRoot()->GetDictFor("FDF");
   if (!pdf_path.IsEmpty()) {
     if (bSimpleFileSpec) {
-      CFX_WideString wsFilePath = CPDF_FileSpec::EncodeFileName(pdf_path);
+      WideString wsFilePath = CPDF_FileSpec::EncodeFileName(pdf_path);
       pMainDict->SetNewFor<CPDF_String>(
-          "F", CFX_ByteString::FromUnicode(wsFilePath), false);
+          "F", ByteString::FromUnicode(wsFilePath), false);
       pMainDict->SetNewFor<CPDF_String>("UF", PDF_EncodeText(wsFilePath),
                                         false);
     } else {
@@ -1230,14 +1228,14 @@
         continue;
       }
 
-      CFX_WideString fullname = FPDF_GetFullName(pField->GetFieldDict());
+      WideString fullname = FPDF_GetFullName(pField->GetFieldDict());
       auto pFieldDict =
           pdfium::MakeUnique<CPDF_Dictionary>(pDoc->GetByteStringPool());
       pFieldDict->SetNewFor<CPDF_String>("T", fullname);
       if (pField->GetType() == CPDF_FormField::CheckBox ||
           pField->GetType() == CPDF_FormField::RadioButton) {
-        CFX_WideString csExport = pField->GetCheckValue(false);
-        CFX_ByteString csBExport = PDF_EncodeText(csExport);
+        WideString csExport = pField->GetCheckValue(false);
+        ByteString csBExport = PDF_EncodeText(csExport);
         CPDF_Object* pOpt = FPDF_GetFieldAttr(pField->GetDict(), "Opt");
         if (pOpt)
           pFieldDict->SetNewFor<CPDF_String>("V", csBExport, false);
@@ -1255,10 +1253,10 @@
 }
 
 void CPDF_InterForm::FDF_ImportField(CPDF_Dictionary* pFieldDict,
-                                     const CFX_WideString& parent_name,
+                                     const WideString& parent_name,
                                      bool bNotify,
                                      int nLevel) {
-  CFX_WideString name;
+  WideString name;
   if (!parent_name.IsEmpty())
     name = parent_name + L".";
 
@@ -1281,7 +1279,7 @@
   if (!pField)
     return;
 
-  CFX_WideString csWValue = GetFieldValue(*pFieldDict, m_bsEncoding);
+  WideString csWValue = GetFieldValue(*pFieldDict, m_bsEncoding);
   int iType = pField->GetFieldType();
   if (bNotify && m_pFormNotify) {
     if (iType == FIELDTYPE_LISTBOX) {
diff --git a/core/fpdfdoc/cpdf_interform.h b/core/fpdfdoc/cpdf_interform.h
index 9dc0532..d3796e5 100644
--- a/core/fpdfdoc/cpdf_interform.h
+++ b/core/fpdfdoc/cpdf_interform.h
@@ -30,7 +30,7 @@
 
 CPDF_Font* AddNativeInterFormFont(CPDF_Dictionary*& pFormDict,
                                   CPDF_Document* pDocument,
-                                  CFX_ByteString* csNameTag);
+                                  ByteString* csNameTag);
 
 class CPDF_InterForm {
  public:
@@ -39,20 +39,19 @@
 
   static void SetUpdateAP(bool bUpdateAP);
   static bool IsUpdateAPEnabled();
-  static CFX_ByteString GenerateNewResourceName(const CPDF_Dictionary* pResDict,
-                                                const char* csType,
-                                                int iMinLen,
-                                                const char* csPrefix);
+  static ByteString GenerateNewResourceName(const CPDF_Dictionary* pResDict,
+                                            const char* csType,
+                                            int iMinLen,
+                                            const char* csPrefix);
   static CPDF_Font* AddStandardFont(CPDF_Document* pDocument,
-                                    CFX_ByteString csFontName);
-  static CFX_ByteString GetNativeFont(uint8_t iCharSet, void* pLogFont);
+                                    ByteString csFontName);
+  static ByteString GetNativeFont(uint8_t iCharSet, void* pLogFont);
   static uint8_t GetNativeCharSet();
   static CPDF_Font* AddNativeFont(uint8_t iCharSet, CPDF_Document* pDocument);
   static CPDF_Font* AddNativeFont(CPDF_Document* pDocument);
 
-  size_t CountFields(const CFX_WideString& csFieldName) const;
-  CPDF_FormField* GetField(uint32_t index,
-                           const CFX_WideString& csFieldName) const;
+  size_t CountFields(const WideString& csFieldName) const;
+  CPDF_FormField* GetField(uint32_t index, const WideString& csFieldName) const;
   CPDF_FormField* GetFieldByDict(CPDF_Dictionary* pFieldDict) const;
 
   CPDF_FormControl* GetControlAtPoint(CPDF_Page* pPage,
@@ -65,18 +64,18 @@
   CPDF_FormField* GetFieldInCalculationOrder(int index);
   int FindFieldInCalculationOrder(const CPDF_FormField* pField);
 
-  CPDF_Font* GetFormFont(CFX_ByteString csNameTag) const;
+  CPDF_Font* GetFormFont(ByteString csNameTag) const;
   CPDF_DefaultAppearance GetDefaultAppearance() const;
   int GetFormAlignment() const;
 
   bool CheckRequiredFields(const std::vector<CPDF_FormField*>* fields,
                            bool bIncludeOrExclude) const;
 
-  std::unique_ptr<CFDF_Document> ExportToFDF(const CFX_WideString& pdf_path,
+  std::unique_ptr<CFDF_Document> ExportToFDF(const WideString& pdf_path,
                                              bool bSimpleFileSpec) const;
 
   std::unique_ptr<CFDF_Document> ExportToFDF(
-      const CFX_WideString& pdf_path,
+      const WideString& pdf_path,
       const std::vector<CPDF_FormField*>& fields,
       bool bIncludeOrExclude,
       bool bSimpleFileSpec) const;
@@ -99,10 +98,10 @@
   CPDF_FormControl* AddControl(CPDF_FormField* pField,
                                CPDF_Dictionary* pWidgetDict);
   void FDF_ImportField(CPDF_Dictionary* pField,
-                       const CFX_WideString& parent_name,
+                       const WideString& parent_name,
                        bool bNotify = false,
                        int nLevel = 0);
-  bool ValidateFieldName(CFX_WideString& csNewFieldName,
+  bool ValidateFieldName(WideString& csNewFieldName,
                          int iType,
                          const CPDF_FormField* pExcludedField,
                          const CPDF_FormControl* pExcludedControl) const;
@@ -114,7 +113,7 @@
   std::map<const CPDF_Dictionary*, std::unique_ptr<CPDF_FormControl>>
       m_ControlMap;
   std::unique_ptr<CFieldTree> m_pFieldTree;
-  CFX_ByteString m_bsEncoding;
+  ByteString m_bsEncoding;
   CFX_UnownedPtr<IPDF_FormNotify> m_pFormNotify;
 };
 
diff --git a/core/fpdfdoc/cpdf_nametree.cpp b/core/fpdfdoc/cpdf_nametree.cpp
index d225d3f..bdbf8b4 100644
--- a/core/fpdfdoc/cpdf_nametree.cpp
+++ b/core/fpdfdoc/cpdf_nametree.cpp
@@ -19,11 +19,10 @@
 
 const int nMaxRecursion = 32;
 
-std::pair<CFX_WideString, CFX_WideString> GetNodeLimitsMaybeSwap(
-    CPDF_Array* pLimits) {
+std::pair<WideString, WideString> GetNodeLimitsMaybeSwap(CPDF_Array* pLimits) {
   ASSERT(pLimits);
-  CFX_WideString csLeft = pLimits->GetUnicodeTextAt(0);
-  CFX_WideString csRight = pLimits->GetUnicodeTextAt(1);
+  WideString csLeft = pLimits->GetUnicodeTextAt(0);
+  WideString csRight = pLimits->GetUnicodeTextAt(1);
   // If the lower limit is greater than the upper limit, swap them.
   if (csLeft.Compare(csRight) > 0) {
     pLimits->SetNewAt<CPDF_String>(0, csRight);
@@ -71,14 +70,14 @@
 // if needed, and any ancestors that are now empty will be removed.
 bool UpdateNodesAndLimitsUponDeletion(CPDF_Dictionary* pNode,
                                       const CPDF_Array* pFind,
-                                      const CFX_WideString& csName,
+                                      const WideString& csName,
                                       int nLevel) {
   if (nLevel > nMaxRecursion)
     return false;
 
   CPDF_Array* pLimits = pNode->GetArrayFor("Limits");
-  CFX_WideString csLeft;
-  CFX_WideString csRight;
+  WideString csLeft;
+  WideString csRight;
   if (pLimits)
     std::tie(csLeft, csRight) = GetNodeLimitsMaybeSwap(pLimits);
 
@@ -93,10 +92,10 @@
 
     // Since |csName| defines |pNode|'s limits, we need to loop through the
     // names to find the new lower and upper limits.
-    CFX_WideString csNewLeft = csRight;
-    CFX_WideString csNewRight = csLeft;
+    WideString csNewLeft = csRight;
+    WideString csNewRight = csLeft;
     for (size_t i = 0; i < pNames->GetCount() / 2; ++i) {
-      CFX_WideString wsName = pNames->GetUnicodeTextAt(i * 2);
+      WideString wsName = pNames->GetUnicodeTextAt(i * 2);
       if (wsName.Compare(csNewLeft) < 0)
         csNewLeft = wsName;
       if (wsName.Compare(csNewRight) > 0)
@@ -131,8 +130,8 @@
 
     // Since |csName| defines |pNode|'s limits, we need to loop through the
     // kids to find the new lower and upper limits.
-    CFX_WideString csNewLeft = csRight;
-    CFX_WideString csNewRight = csLeft;
+    WideString csNewLeft = csRight;
+    WideString csNewRight = csLeft;
     for (size_t j = 0; j < pKids->GetCount(); ++j) {
       CPDF_Array* pKidLimits = pKids->GetDictAt(j)->GetArrayFor("Limits");
       ASSERT(pKidLimits);
@@ -155,7 +154,7 @@
 // will be the leaf array that |csName| should be added to, and |pFindIndex|
 // will be the index that it should be added at.
 CPDF_Object* SearchNameNode(CPDF_Dictionary* pNode,
-                            const CFX_WideString& csName,
+                            const WideString& csName,
                             size_t& nIndex,
                             int nLevel,
                             CPDF_Array** ppFind,
@@ -166,8 +165,8 @@
   CPDF_Array* pLimits = pNode->GetArrayFor("Limits");
   CPDF_Array* pNames = pNode->GetArrayFor("Names");
   if (pLimits) {
-    CFX_WideString csLeft;
-    CFX_WideString csRight;
+    WideString csLeft;
+    WideString csRight;
     std::tie(csLeft, csRight) = GetNodeLimitsMaybeSwap(pLimits);
     // Skip this node if the name to look for is smaller than its lower limit.
     if (csName.Compare(csLeft) < 0)
@@ -189,7 +188,7 @@
   if (pNames) {
     size_t dwCount = pNames->GetCount() / 2;
     for (size_t i = 0; i < dwCount; i++) {
-      CFX_WideString csValue = pNames->GetUnicodeTextAt(i * 2);
+      WideString csValue = pNames->GetUnicodeTextAt(i * 2);
       int32_t iCompare = csValue.Compare(csName);
       if (iCompare > 0)
         break;
@@ -233,7 +232,7 @@
                             size_t nIndex,
                             size_t& nCurIndex,
                             int nLevel,
-                            CFX_WideString* csName,
+                            WideString* csName,
                             CPDF_Array** ppFind,
                             int* pFindIndex) {
   if (nLevel > nMaxRecursion)
@@ -300,7 +299,7 @@
 CPDF_NameTree::CPDF_NameTree(CPDF_Dictionary* pRoot) : m_pRoot(pRoot) {}
 
 CPDF_NameTree::CPDF_NameTree(const CPDF_Document* pDoc,
-                             const CFX_ByteString& category)
+                             const ByteString& category)
     : m_pRoot(nullptr) {
   const CPDF_Dictionary* pRoot = pDoc->GetRoot();
   if (!pRoot)
@@ -319,7 +318,7 @@
   return m_pRoot ? ::CountNames(m_pRoot.Get()) : 0;
 }
 
-int CPDF_NameTree::GetIndex(const CFX_WideString& csName) const {
+int CPDF_NameTree::GetIndex(const WideString& csName) const {
   if (!m_pRoot)
     return -1;
 
@@ -330,7 +329,7 @@
 }
 
 bool CPDF_NameTree::AddValueAndName(std::unique_ptr<CPDF_Object> pObj,
-                                    const CFX_WideString& name) {
+                                    const WideString& name) {
   if (!m_pRoot)
     return false;
 
@@ -347,7 +346,7 @@
   // |name| and |pObj|.
   if (!pFind) {
     size_t nCurIndex = 0;
-    CFX_WideString csName;
+    WideString csName;
     SearchNameNode(m_pRoot.Get(), 0, nCurIndex, 0, &csName, &pFind, nullptr);
   }
   ASSERT(pFind);
@@ -381,7 +380,7 @@
     return false;
 
   size_t nCurIndex = 0;
-  CFX_WideString csName;
+  WideString csName;
   CPDF_Array* pFind = nullptr;
   int nFindIndex = -1;
   // Fail if the tree does not contain |nIndex|.
@@ -400,7 +399,7 @@
 }
 
 CPDF_Object* CPDF_NameTree::LookupValueAndName(int nIndex,
-                                               CFX_WideString* csName) const {
+                                               WideString* csName) const {
   csName->clear();
   if (!m_pRoot)
     return nullptr;
@@ -410,7 +409,7 @@
                         nullptr);
 }
 
-CPDF_Object* CPDF_NameTree::LookupValue(const CFX_WideString& csName) const {
+CPDF_Object* CPDF_NameTree::LookupValue(const WideString& csName) const {
   if (!m_pRoot)
     return nullptr;
 
@@ -419,7 +418,7 @@
 }
 
 CPDF_Array* CPDF_NameTree::LookupNamedDest(CPDF_Document* pDoc,
-                                           const CFX_WideString& sName) {
+                                           const WideString& sName) {
   CPDF_Object* pValue = LookupValue(sName);
   if (!pValue) {
     CPDF_Dictionary* pDests = pDoc->GetRoot()->GetDictFor("Dests");
diff --git a/core/fpdfdoc/cpdf_nametree.h b/core/fpdfdoc/cpdf_nametree.h
index 4dc43fc..add62f1 100644
--- a/core/fpdfdoc/cpdf_nametree.h
+++ b/core/fpdfdoc/cpdf_nametree.h
@@ -20,18 +20,18 @@
 class CPDF_NameTree {
  public:
   explicit CPDF_NameTree(CPDF_Dictionary* pRoot);
-  CPDF_NameTree(const CPDF_Document* pDoc, const CFX_ByteString& category);
+  CPDF_NameTree(const CPDF_Document* pDoc, const ByteString& category);
   ~CPDF_NameTree();
 
   bool AddValueAndName(std::unique_ptr<CPDF_Object> pObj,
-                       const CFX_WideString& name);
+                       const WideString& name);
   bool DeleteValueAndName(int nIndex);
 
-  CPDF_Object* LookupValueAndName(int nIndex, CFX_WideString* csName) const;
-  CPDF_Object* LookupValue(const CFX_WideString& csName) const;
-  CPDF_Array* LookupNamedDest(CPDF_Document* pDoc, const CFX_WideString& sName);
+  CPDF_Object* LookupValueAndName(int nIndex, WideString* csName) const;
+  CPDF_Object* LookupValue(const WideString& csName) const;
+  CPDF_Array* LookupNamedDest(CPDF_Document* pDoc, const WideString& sName);
 
-  int GetIndex(const CFX_WideString& csName) const;
+  int GetIndex(const WideString& csName) const;
   size_t GetCount() const;
   CPDF_Dictionary* GetRoot() const { return m_pRoot.Get(); }
 
diff --git a/core/fpdfdoc/cpdf_nametree_unittest.cpp b/core/fpdfdoc/cpdf_nametree_unittest.cpp
index e6e188a..38c3140 100644
--- a/core/fpdfdoc/cpdf_nametree_unittest.cpp
+++ b/core/fpdfdoc/cpdf_nametree_unittest.cpp
@@ -84,17 +84,17 @@
   constexpr char kData[] = "\xFE\xFF\x00\x31";
   for (size_t i = 0; i < sizeof(kData); ++i)
     buf.put(kData[i]);
-  pNames->AddNew<CPDF_String>(CFX_ByteString(buf), true);
+  pNames->AddNew<CPDF_String>(ByteString(buf), true);
   pNames->AddNew<CPDF_Number>(100);
 
   // Check that the key is as expected.
   CPDF_NameTree nameTree(pRootDict.get());
-  CFX_WideString storedName;
+  WideString storedName;
   nameTree.LookupValueAndName(0, &storedName);
   EXPECT_STREQ(L"1", storedName.c_str());
 
   // Check that the correct value object can be obtained by looking up "1".
-  CFX_WideString matchName = L"1";
+  WideString matchName = L"1";
   CPDF_Object* pObj = nameTree.LookupValue(matchName);
   ASSERT_TRUE(pObj->IsNumber());
   EXPECT_EQ(100, pObj->AsNumber()->GetInteger());
@@ -232,7 +232,7 @@
 
   // Delete the name "9.txt", and check that its node gets deleted and its
   // parent node's limits get updated.
-  CFX_WideString csName;
+  WideString csName;
   ASSERT_TRUE(nameTree.LookupValue(L"9.txt"));
   EXPECT_EQ(999, nameTree.LookupValue(L"9.txt")->GetInteger());
   EXPECT_TRUE(nameTree.LookupValueAndName(4, &csName));
diff --git a/core/fpdfdoc/cpdf_occontext.cpp b/core/fpdfdoc/cpdf_occontext.cpp
index 7e746e0..069292c 100644
--- a/core/fpdfdoc/cpdf_occontext.cpp
+++ b/core/fpdfdoc/cpdf_occontext.cpp
@@ -24,13 +24,13 @@
 }
 
 bool HasIntent(const CPDF_Dictionary* pDict,
-               const CFX_ByteStringC& csElement,
-               const CFX_ByteStringC& csDef) {
+               const ByteStringView& csElement,
+               const ByteStringView& csDef) {
   CPDF_Object* pIntent = pDict->GetDirectObjectFor("Intent");
   if (!pIntent)
     return csElement == csDef;
 
-  CFX_ByteString bsIntent;
+  ByteString bsIntent;
   if (CPDF_Array* pArray = pIntent->AsArray()) {
     for (size_t i = 0; i < pArray->GetCount(); i++) {
       bsIntent = pArray->GetStringAt(i);
@@ -70,8 +70,8 @@
   return pConfig;
 }
 
-CFX_ByteString GetUsageTypeString(CPDF_OCContext::UsageType eType) {
-  CFX_ByteString csState;
+ByteString GetUsageTypeString(CPDF_OCContext::UsageType eType) {
+  ByteString csState;
   switch (eType) {
     case CPDF_OCContext::Design:
       csState = "Design";
@@ -99,7 +99,7 @@
 CPDF_OCContext::~CPDF_OCContext() {}
 
 bool CPDF_OCContext::LoadOCGStateFromConfig(
-    const CFX_ByteString& csConfig,
+    const ByteString& csConfig,
     const CPDF_Dictionary* pOCGDict) const {
   CPDF_Dictionary* pConfig = GetConfig(m_pDocument.Get(), pOCGDict);
   if (!pConfig)
@@ -120,7 +120,7 @@
   if (!pArray)
     return bState;
 
-  CFX_ByteString csFind = csConfig + "State";
+  ByteString csFind = csConfig + "State";
   for (size_t i = 0; i < pArray->GetCount(); i++) {
     CPDF_Dictionary* pUsage = pArray->GetDictAt(i);
     if (!pUsage)
@@ -149,12 +149,12 @@
   if (!HasIntent(pOCGDict, "View", "View"))
     return true;
 
-  CFX_ByteString csState = GetUsageTypeString(m_eUsageType);
+  ByteString csState = GetUsageTypeString(m_eUsageType);
   CPDF_Dictionary* pUsage = pOCGDict->GetDictFor("Usage");
   if (pUsage) {
     CPDF_Dictionary* pState = pUsage->GetDictFor(csState);
     if (pState) {
-      CFX_ByteString csFind = csState + "State";
+      ByteString csFind = csState + "State";
       if (pState->KeyExist(csFind))
         return pState->GetStringFor(csFind) != "OFF";
     }
@@ -196,7 +196,7 @@
   if (nLevel > 32 || !pExpression)
     return false;
 
-  CFX_ByteString csOperator = pExpression->GetStringAt(0);
+  ByteString csOperator = pExpression->GetStringAt(0);
   if (csOperator == "Not") {
     CPDF_Object* pOCGObj = pExpression->GetDirectObjectAt(1);
     if (!pOCGObj)
@@ -241,7 +241,7 @@
   if (pVE)
     return GetOCGVE(pVE, 0);
 
-  CFX_ByteString csP = pOCMDDict->GetStringFor("P", "AnyOn");
+  ByteString csP = pOCMDDict->GetStringFor("P", "AnyOn");
   CPDF_Object* pOCGObj = pOCMDDict->GetDirectObjectFor("OCGs");
   if (!pOCGObj)
     return true;
@@ -279,7 +279,7 @@
   if (!pOCGDict)
     return true;
 
-  CFX_ByteString csType = pOCGDict->GetStringFor("Type", "OCG");
+  ByteString csType = pOCGDict->GetStringFor("Type", "OCG");
   if (csType == "OCG")
     return GetOCGVisible(pOCGDict);
   return LoadOCMDState(pOCGDict);
diff --git a/core/fpdfdoc/cpdf_occontext.h b/core/fpdfdoc/cpdf_occontext.h
index ea8eea2..3c93ef1 100644
--- a/core/fpdfdoc/cpdf_occontext.h
+++ b/core/fpdfdoc/cpdf_occontext.h
@@ -31,7 +31,7 @@
   CPDF_OCContext(CPDF_Document* pDoc, UsageType eUsageType);
   ~CPDF_OCContext() override;
 
-  bool LoadOCGStateFromConfig(const CFX_ByteString& csConfig,
+  bool LoadOCGStateFromConfig(const ByteString& csConfig,
                               const CPDF_Dictionary* pOCGDict) const;
   bool LoadOCGState(const CPDF_Dictionary* pOCGDict) const;
   bool GetOCGVisible(const CPDF_Dictionary* pOCGDict);
diff --git a/core/fpdfdoc/cpdf_pagelabel.cpp b/core/fpdfdoc/cpdf_pagelabel.cpp
index 7b5e66e..5efb18e 100644
--- a/core/fpdfdoc/cpdf_pagelabel.cpp
+++ b/core/fpdfdoc/cpdf_pagelabel.cpp
@@ -13,16 +13,15 @@
 
 namespace {
 
-CFX_WideString MakeRoman(int num) {
+WideString MakeRoman(int num) {
   const int kArabic[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
-  const CFX_WideString kRoman[] = {L"m",  L"cm", L"d",  L"cd", L"c",
-                                   L"xc", L"l",  L"xl", L"x",  L"ix",
-                                   L"v",  L"iv", L"i"};
+  const WideString kRoman[] = {L"m",  L"cm", L"d",  L"cd", L"c",  L"xc", L"l",
+                               L"xl", L"x",  L"ix", L"v",  L"iv", L"i"};
   const int kMaxNum = 1000000;
 
   num %= kMaxNum;
   int i = 0;
-  CFX_WideString wsRomanNumber;
+  WideString wsRomanNumber;
   while (num > 0) {
     while (num >= kArabic[i]) {
       num = num - kArabic[i];
@@ -33,11 +32,11 @@
   return wsRomanNumber;
 }
 
-CFX_WideString MakeLetters(int num) {
+WideString MakeLetters(int num) {
   if (num == 0)
-    return CFX_WideString();
+    return WideString();
 
-  CFX_WideString wsLetters;
+  WideString wsLetters;
   const int nMaxCount = 1000;
   const int nLetterCount = 26;
   --num;
@@ -50,8 +49,8 @@
   return wsLetters;
 }
 
-CFX_WideString GetLabelNumPortion(int num, const CFX_ByteString& bsStyle) {
-  CFX_WideString wsNumPortion;
+WideString GetLabelNumPortion(int num, const ByteString& bsStyle) {
+  WideString wsNumPortion;
   if (bsStyle.IsEmpty())
     return wsNumPortion;
   if (bsStyle == "D") {
@@ -77,7 +76,7 @@
 
 CPDF_PageLabel::~CPDF_PageLabel() {}
 
-bool CPDF_PageLabel::GetLabel(int nPage, CFX_WideString* wsLabel) const {
+bool CPDF_PageLabel::GetLabel(int nPage, WideString* wsLabel) const {
   if (!m_pDocument)
     return false;
 
@@ -108,10 +107,9 @@
       if (pLabel->KeyExist("P"))
         *wsLabel += pLabel->GetUnicodeTextFor("P");
 
-      CFX_ByteString bsNumberingStyle = pLabel->GetStringFor("S", "");
+      ByteString bsNumberingStyle = pLabel->GetStringFor("S", "");
       int nLabelNum = nPage - n + pLabel->GetIntegerFor("St", 1);
-      CFX_WideString wsNumPortion =
-          GetLabelNumPortion(nLabelNum, bsNumberingStyle);
+      WideString wsNumPortion = GetLabelNumPortion(nLabelNum, bsNumberingStyle);
       *wsLabel += wsNumPortion;
       return true;
     }
@@ -120,7 +118,7 @@
   return true;
 }
 
-int32_t CPDF_PageLabel::GetPageByLabel(const CFX_ByteStringC& bsLabel) const {
+int32_t CPDF_PageLabel::GetPageByLabel(const ByteStringView& bsLabel) const {
   if (!m_pDocument)
     return -1;
 
@@ -130,19 +128,19 @@
 
   int nPages = m_pDocument->GetPageCount();
   for (int i = 0; i < nPages; i++) {
-    CFX_WideString str;
+    WideString str;
     if (!GetLabel(i, &str))
       continue;
     if (PDF_EncodeText(str).Compare(bsLabel))
       return i;
   }
 
-  int nPage = FXSYS_atoi(CFX_ByteString(bsLabel).c_str());  // NUL terminate.
+  int nPage = FXSYS_atoi(ByteString(bsLabel).c_str());  // NUL terminate.
   return nPage > 0 && nPage <= nPages ? nPage : -1;
 }
 
-int32_t CPDF_PageLabel::GetPageByLabel(const CFX_WideStringC& wsLabel) const {
+int32_t CPDF_PageLabel::GetPageByLabel(const WideStringView& wsLabel) const {
   // TODO(tsepez): check usage of c_str() below.
   return GetPageByLabel(
-      PDF_EncodeText(wsLabel.unterminated_c_str()).AsStringC());
+      PDF_EncodeText(wsLabel.unterminated_c_str()).AsStringView());
 }
diff --git a/core/fpdfdoc/cpdf_pagelabel.h b/core/fpdfdoc/cpdf_pagelabel.h
index 66324f8..1b21ca8 100644
--- a/core/fpdfdoc/cpdf_pagelabel.h
+++ b/core/fpdfdoc/cpdf_pagelabel.h
@@ -16,9 +16,9 @@
   explicit CPDF_PageLabel(CPDF_Document* pDocument);
   ~CPDF_PageLabel();
 
-  bool GetLabel(int nPage, CFX_WideString* wsLabel) const;
-  int32_t GetPageByLabel(const CFX_ByteStringC& bsLabel) const;
-  int32_t GetPageByLabel(const CFX_WideStringC& wsLabel) const;
+  bool GetLabel(int nPage, WideString* wsLabel) const;
+  int32_t GetPageByLabel(const ByteStringView& bsLabel) const;
+  int32_t GetPageByLabel(const WideStringView& wsLabel) const;
 
  private:
   CFX_UnownedPtr<CPDF_Document> const m_pDocument;
diff --git a/core/fpdfdoc/cpdf_structelement.cpp b/core/fpdfdoc/cpdf_structelement.cpp
index c5f2b6b..0b0b542 100644
--- a/core/fpdfdoc/cpdf_structelement.cpp
+++ b/core/fpdfdoc/cpdf_structelement.cpp
@@ -36,7 +36,7 @@
       m_Type(pDict->GetStringFor("S")),
       m_Title(pDict->GetStringFor("T")) {
   if (pTree->GetRoleMap()) {
-    CFX_ByteString mapped = pTree->GetRoleMap()->GetStringFor(m_Type);
+    ByteString mapped = pTree->GetRoleMap()->GetStringFor(m_Type);
     if (!mapped.IsEmpty())
       m_Type = mapped;
   }
@@ -102,7 +102,7 @@
   if (CPDF_Reference* pRef = ToReference(pKidDict->GetObjectFor("Pg")))
     PageObjNum = pRef->GetRefObjNum();
 
-  CFX_ByteString type = pKidDict->GetStringFor("Type");
+  ByteString type = pKidDict->GetStringFor("Type");
   if ((type == "MCR" || type == "OBJR") && m_pTree->GetPage() &&
       m_pTree->GetPage()->GetObjNum() != PageObjNum) {
     return;
diff --git a/core/fpdfdoc/cpdf_structelement.h b/core/fpdfdoc/cpdf_structelement.h
index 8fe73e5..b54487e 100644
--- a/core/fpdfdoc/cpdf_structelement.h
+++ b/core/fpdfdoc/cpdf_structelement.h
@@ -39,8 +39,8 @@
   template <typename T, typename... Args>
   friend CFX_RetainPtr<T> pdfium::MakeRetain(Args&&... args);
 
-  const CFX_ByteString& GetType() const { return m_Type; }
-  const CFX_ByteString& GetTitle() const { return m_Title; }
+  const ByteString& GetType() const { return m_Type; }
+  const ByteString& GetTitle() const { return m_Title; }
   CPDF_Dictionary* GetDict() const { return m_pDict.Get(); }
 
   int CountKids() const;
@@ -59,8 +59,8 @@
   CFX_UnownedPtr<CPDF_StructTree> const m_pTree;
   CFX_UnownedPtr<CPDF_StructElement> const m_pParent;
   CFX_UnownedPtr<CPDF_Dictionary> const m_pDict;
-  CFX_ByteString m_Type;
-  CFX_ByteString m_Title;
+  ByteString m_Type;
+  ByteString m_Title;
   std::vector<CPDF_StructKid> m_Kids;
 };
 
diff --git a/core/fpdfdoc/cpdf_variabletext.cpp b/core/fpdfdoc/cpdf_variabletext.cpp
index 877f8ca..d3de612 100644
--- a/core/fpdfdoc/cpdf_variabletext.cpp
+++ b/core/fpdfdoc/cpdf_variabletext.cpp
@@ -354,7 +354,7 @@
 
 CPVT_WordPlace CPDF_VariableText::InsertText(const CPVT_WordPlace& place,
                                              const wchar_t* text) {
-  CFX_WideString swText = text;
+  WideString swText = text;
   CPVT_WordPlace wp = place;
   for (int32_t i = 0, sz = swText.GetLength(); i < sz; i++) {
     CPVT_WordPlace oldwp = wp;
@@ -412,7 +412,7 @@
   return ClearLeftWord(AdjustLineHeader(place, true));
 }
 
-void CPDF_VariableText::SetText(const CFX_WideString& swText) {
+void CPDF_VariableText::SetText(const WideString& swText) {
   DeleteWords(CPVT_WordRange(GetBeginWordPlace(), GetEndWordPlace()));
   CPVT_WordPlace wp(0, 0, -1);
   CPVT_SectionInfo secinfo;
diff --git a/core/fpdfdoc/cpdf_variabletext.h b/core/fpdfdoc/cpdf_variabletext.h
index a226350..704408c 100644
--- a/core/fpdfdoc/cpdf_variabletext.h
+++ b/core/fpdfdoc/cpdf_variabletext.h
@@ -106,7 +106,7 @@
   void RearrangeAll();
   void RearrangePart(const CPVT_WordRange& PlaceRange);
   void ResetAll();
-  void SetText(const CFX_WideString& text);
+  void SetText(const WideString& text);
   CPVT_WordPlace InsertWord(const CPVT_WordPlace& place,
                             uint16_t word,
                             int32_t charset,
diff --git a/core/fpdfdoc/cpdf_viewerpreferences.cpp b/core/fpdfdoc/cpdf_viewerpreferences.cpp
index e25316b..e7fb141 100644
--- a/core/fpdfdoc/cpdf_viewerpreferences.cpp
+++ b/core/fpdfdoc/cpdf_viewerpreferences.cpp
@@ -34,13 +34,13 @@
   return pDict ? pDict->GetArrayFor("PrintPageRange") : nullptr;
 }
 
-CFX_ByteString CPDF_ViewerPreferences::Duplex() const {
+ByteString CPDF_ViewerPreferences::Duplex() const {
   CPDF_Dictionary* pDict = GetViewerPreferences();
-  return pDict ? pDict->GetStringFor("Duplex") : CFX_ByteString("None");
+  return pDict ? pDict->GetStringFor("Duplex") : ByteString("None");
 }
 
-bool CPDF_ViewerPreferences::GenericName(const CFX_ByteString& bsKey,
-                                         CFX_ByteString* bsVal) const {
+bool CPDF_ViewerPreferences::GenericName(const ByteString& bsKey,
+                                         ByteString* bsVal) const {
   ASSERT(bsVal);
   CPDF_Dictionary* pDict = GetViewerPreferences();
   if (!pDict)
diff --git a/core/fpdfdoc/cpdf_viewerpreferences.h b/core/fpdfdoc/cpdf_viewerpreferences.h
index 46428a2..bbe5d1a 100644
--- a/core/fpdfdoc/cpdf_viewerpreferences.h
+++ b/core/fpdfdoc/cpdf_viewerpreferences.h
@@ -24,12 +24,12 @@
   bool PrintScaling() const;
   int32_t NumCopies() const;
   CPDF_Array* PrintPageRange() const;
-  CFX_ByteString Duplex() const;
+  ByteString Duplex() const;
 
   // Gets the entry for |bsKey|. If the entry exists and it is of type name,
   // then this method writes the value into |bsVal| and returns true. Otherwise
   // returns false and |bsVal| is untouched. |bsVal| must not be NULL.
-  bool GenericName(const CFX_ByteString& bsKey, CFX_ByteString* bsVal) const;
+  bool GenericName(const ByteString& bsKey, ByteString* bsVal) const;
 
  private:
   CPDF_Dictionary* GetViewerPreferences() const;
diff --git a/core/fpdfdoc/cpvt_color.cpp b/core/fpdfdoc/cpvt_color.cpp
index 584a85a..914e416 100644
--- a/core/fpdfdoc/cpvt_color.cpp
+++ b/core/fpdfdoc/cpvt_color.cpp
@@ -9,8 +9,8 @@
 #include "core/fpdfapi/parser/cpdf_simple_parser.h"
 
 // Static.
-CPVT_Color CPVT_Color::ParseColor(const CFX_ByteString& str) {
-  CPDF_SimpleParser syntax(str.AsStringC());
+CPVT_Color CPVT_Color::ParseColor(const ByteString& str) {
+  CPDF_SimpleParser syntax(str.AsStringView());
   if (syntax.FindTagParamFromStart("g", 1))
     return CPVT_Color(CPVT_Color::kGray, FX_atof(syntax.GetWord()));
 
diff --git a/core/fpdfdoc/cpvt_color.h b/core/fpdfdoc/cpvt_color.h
index 2db3b83..a7e925b 100644
--- a/core/fpdfdoc/cpvt_color.h
+++ b/core/fpdfdoc/cpvt_color.h
@@ -31,7 +31,7 @@
   float fColor3;
   float fColor4;
 
-  static CPVT_Color ParseColor(const CFX_ByteString& str);
+  static CPVT_Color ParseColor(const ByteString& str);
   static CPVT_Color ParseColor(const CPDF_Array& array);
 };
 
diff --git a/core/fpdfdoc/cpvt_fontmap.cpp b/core/fpdfdoc/cpvt_fontmap.cpp
index 0edabd1..aaf8661 100644
--- a/core/fpdfdoc/cpvt_fontmap.cpp
+++ b/core/fpdfdoc/cpvt_fontmap.cpp
@@ -17,7 +17,7 @@
 CPVT_FontMap::CPVT_FontMap(CPDF_Document* pDoc,
                            CPDF_Dictionary* pResDict,
                            CPDF_Font* pDefFont,
-                           const CFX_ByteString& sDefFontAlias)
+                           const ByteString& sDefFontAlias)
     : m_pDocument(pDoc),
       m_pResDict(pResDict),
       m_pDefFont(pDefFont),
@@ -27,7 +27,7 @@
 
 CPDF_Font* CPVT_FontMap::GetAnnotSysPDFFont(CPDF_Document* pDoc,
                                             const CPDF_Dictionary* pResDict,
-                                            CFX_ByteString* sSysFontAlias) {
+                                            ByteString* sSysFontAlias) {
   if (!pDoc || !pResDict)
     return nullptr;
 
@@ -59,7 +59,7 @@
   }
 }
 
-CFX_ByteString CPVT_FontMap::GetPDFFontAlias(int32_t nFontIndex) {
+ByteString CPVT_FontMap::GetPDFFontAlias(int32_t nFontIndex) {
   switch (nFontIndex) {
     case 0:
       return m_sDefFontAlias;
@@ -70,7 +70,7 @@
       }
       return m_sSysFontAlias;
     default:
-      return CFX_ByteString();
+      return ByteString();
   }
 }
 
diff --git a/core/fpdfdoc/cpvt_fontmap.h b/core/fpdfdoc/cpvt_fontmap.h
index da69463..feca454 100644
--- a/core/fpdfdoc/cpvt_fontmap.h
+++ b/core/fpdfdoc/cpvt_fontmap.h
@@ -22,12 +22,12 @@
   CPVT_FontMap(CPDF_Document* pDoc,
                CPDF_Dictionary* pResDict,
                CPDF_Font* pDefFont,
-               const CFX_ByteString& sDefFontAlias);
+               const ByteString& sDefFontAlias);
   ~CPVT_FontMap() override;
 
   // IPVT_FontMap:
   CPDF_Font* GetPDFFont(int32_t nFontIndex) override;
-  CFX_ByteString GetPDFFontAlias(int32_t nFontIndex) override;
+  ByteString GetPDFFontAlias(int32_t nFontIndex) override;
   int32_t GetWordFontIndex(uint16_t word,
                            int32_t charset,
                            int32_t nFontIndex) override;
@@ -36,15 +36,15 @@
 
   static CPDF_Font* GetAnnotSysPDFFont(CPDF_Document* pDoc,
                                        const CPDF_Dictionary* pResDict,
-                                       CFX_ByteString* sSysFontAlias);
+                                       ByteString* sSysFontAlias);
 
  private:
   CFX_UnownedPtr<CPDF_Document> const m_pDocument;
   CFX_UnownedPtr<CPDF_Dictionary> const m_pResDict;
   CFX_UnownedPtr<CPDF_Font> const m_pDefFont;
   CFX_UnownedPtr<CPDF_Font> m_pSysFont;
-  const CFX_ByteString m_sDefFontAlias;
-  CFX_ByteString m_sSysFontAlias;
+  const ByteString m_sDefFontAlias;
+  ByteString m_sSysFontAlias;
 };
 
 #endif  // CORE_FPDFDOC_CPVT_FONTMAP_H_
diff --git a/core/fpdfdoc/cpvt_generateap.cpp b/core/fpdfdoc/cpvt_generateap.cpp
index 132e771..634864c 100644
--- a/core/fpdfdoc/cpvt_generateap.cpp
+++ b/core/fpdfdoc/cpvt_generateap.cpp
@@ -42,7 +42,7 @@
   if (!pFormDict)
     return false;
 
-  CFX_ByteString DA;
+  ByteString DA;
   if (CPDF_Object* pDAObj = FPDF_GetFieldAttr(pAnnotDict, "DA"))
     DA = pDAObj->GetString();
   if (DA.IsEmpty())
@@ -50,9 +50,9 @@
   if (DA.IsEmpty())
     return false;
 
-  CPDF_SimpleParser syntax(DA.AsStringC());
+  CPDF_SimpleParser syntax(DA.AsStringView());
   syntax.FindTagParamFromStart("Tf", 2);
-  CFX_ByteString sFontName(syntax.GetWord());
+  ByteString sFontName(syntax.GetWord());
   sFontName = PDF_NameDecode(sFontName);
   if (sFontName.IsEmpty())
     return false;
@@ -161,14 +161,13 @@
       crBG = CPVT_Color::ParseColor(*pArray);
   }
   std::ostringstream sAppStream;
-  CFX_ByteString sBG =
-      CPVT_GenerateAP::GenerateColorAP(crBG, PaintOperation::FILL);
+  ByteString sBG = CPVT_GenerateAP::GenerateColorAP(crBG, PaintOperation::FILL);
   if (sBG.GetLength() > 0) {
     sAppStream << "q\n" << sBG << rcBBox.left << " " << rcBBox.bottom << " "
                << rcBBox.Width() << " " << rcBBox.Height() << " re f\n"
                << "Q\n";
   }
-  CFX_ByteString sBorderStream = CPVT_GenerateAP::GenerateBorderAP(
+  ByteString sBorderStream = CPVT_GenerateAP::GenerateBorderAP(
       rcBBox, fBorderWidth, crBorder, crLeftTop, crRightBottom, nBorderStyle,
       dsBorder);
   if (sBorderStream.GetLength() > 0)
@@ -208,10 +207,10 @@
   }
   switch (nWidgetType) {
     case 0: {
-      CFX_WideString swValue =
+      WideString swValue =
           FPDF_GetFieldAttr(pAnnotDict, "V")
               ? FPDF_GetFieldAttr(pAnnotDict, "V")->GetUnicodeText()
-              : CFX_WideString();
+              : WideString();
       int32_t nAlign = FPDF_GetFieldAttr(pAnnotDict, "Q")
                            ? FPDF_GetFieldAttr(pAnnotDict, "Q")->GetInteger()
                            : 0;
@@ -260,7 +259,7 @@
         ptOffset =
             CFX_PointF(0.0f, (rcContent.Height() - rcBody.Height()) / 2.0f);
       }
-      CFX_ByteString sBody = CPVT_GenerateAP::GenerateEditAP(
+      ByteString sBody = CPVT_GenerateAP::GenerateEditAP(
           &map, vt.GetIterator(), ptOffset, !bCharArray, subWord);
       if (sBody.GetLength() > 0) {
         sAppStream << "/Tx BMC\n"
@@ -279,10 +278,10 @@
       }
     } break;
     case 1: {
-      CFX_WideString swValue =
+      WideString swValue =
           FPDF_GetFieldAttr(pAnnotDict, "V")
               ? FPDF_GetFieldAttr(pAnnotDict, "V")->GetUnicodeText()
-              : CFX_WideString();
+              : WideString();
       CPVT_FontMap map(
           pDoc, pStreamDict ? pStreamDict->GetDictFor("Resources") : nullptr,
           pDefFont, sFontName.Right(sFontName.GetLength() - 1));
@@ -307,8 +306,8 @@
       CFX_FloatRect rcContent = vt.GetContentRect();
       CFX_PointF ptOffset =
           CFX_PointF(0.0f, (rcContent.Height() - rcEdit.Height()) / 2.0f);
-      CFX_ByteString sEdit = CPVT_GenerateAP::GenerateEditAP(
-          &map, vt.GetIterator(), ptOffset, true, 0);
+      ByteString sEdit = CPVT_GenerateAP::GenerateEditAP(&map, vt.GetIterator(),
+                                                         ptOffset, true, 0);
       if (sEdit.GetLength() > 0) {
         sAppStream << "/Tx BMC\n"
                    << "q\n";
@@ -320,7 +319,7 @@
                    << sEdit << "ET\n"
                    << "Q\nEMC\n";
       }
-      CFX_ByteString sButton = CPVT_GenerateAP::GenerateColorAP(
+      ByteString sButton = CPVT_GenerateAP::GenerateColorAP(
           CPVT_Color(CPVT_Color::kRGB, 220.0f / 255.0f, 220.0f / 255.0f,
                      220.0f / 255.0f),
           PaintOperation::FILL);
@@ -329,7 +328,7 @@
         sAppStream << rcButton.left << " " << rcButton.bottom << " "
                    << rcButton.Width() << " " << rcButton.Height() << " re f\n";
         sAppStream << "Q\n";
-        CFX_ByteString sButtonBorder = CPVT_GenerateAP::GenerateBorderAP(
+        ByteString sButtonBorder = CPVT_GenerateAP::GenerateBorderAP(
             rcButton, 2, CPVT_Color(CPVT_Color::kGray, 0),
             CPVT_Color(CPVT_Color::kGray, 1),
             CPVT_Color(CPVT_Color::kGray, 0.5), BorderStyle::BEVELED,
@@ -368,7 +367,7 @@
             break;
 
           if (CPDF_Object* pOpt = pOpts->GetDirectObjectAt(i)) {
-            CFX_WideString swItem;
+            WideString swItem;
             if (pOpt->IsString())
               swItem = pOpt->GetUnicodeText();
             else if (CPDF_Array* pArray = pOpt->AsArray())
@@ -461,9 +460,9 @@
   return true;
 }
 
-CFX_ByteString GetColorStringWithDefault(CPDF_Array* pColor,
-                                         const CPVT_Color& crDefaultColor,
-                                         PaintOperation nOperation) {
+ByteString GetColorStringWithDefault(CPDF_Array* pColor,
+                                     const CPVT_Color& crDefaultColor,
+                                     PaintOperation nOperation) {
   if (pColor) {
     CPVT_Color color = CPVT_Color::ParseColor(*pColor);
     return CPVT_GenerateAP::GenerateColorAP(color, nOperation);
@@ -500,10 +499,10 @@
   return nullptr;
 }
 
-CFX_ByteString GetDashPatternString(const CPDF_Dictionary& pAnnotDict) {
+ByteString GetDashPatternString(const CPDF_Dictionary& pAnnotDict) {
   CPDF_Array* pDashArray = GetDashArray(pAnnotDict);
   if (!pDashArray || pDashArray->IsEmpty())
-    return CFX_ByteString();
+    return ByteString();
 
   // Support maximum of ten elements in the dash array.
   size_t pDashArrayCount = std::min<size_t>(pDashArray->GetCount(), 10);
@@ -514,14 +513,14 @@
     sDashStream << pDashArray->GetNumberAt(i) << " ";
   sDashStream << "] 0 d\n";
 
-  return CFX_ByteString(sDashStream);
+  return ByteString(sDashStream);
 }
 
-CFX_ByteString GetPopupContentsString(CPDF_Document* pDoc,
-                                      const CPDF_Dictionary& pAnnotDict,
-                                      CPDF_Font* pDefFont,
-                                      const CFX_ByteString& sFontName) {
-  CFX_WideString swValue(pAnnotDict.GetUnicodeTextFor("T"));
+ByteString GetPopupContentsString(CPDF_Document* pDoc,
+                                  const CPDF_Dictionary& pAnnotDict,
+                                  CPDF_Font* pDefFont,
+                                  const ByteString& sFontName) {
+  WideString swValue(pAnnotDict.GetUnicodeTextFor("T"));
   swValue += L'\n';
   swValue += pAnnotDict.GetUnicodeTextFor("Contents");
   CPVT_FontMap map(pDoc, nullptr, pDefFont, sFontName);
@@ -538,11 +537,11 @@
   vt.SetText(swValue);
   vt.RearrangeAll();
   CFX_PointF ptOffset(3.0f, -3.0f);
-  CFX_ByteString sContent = CPVT_GenerateAP::GenerateEditAP(
-      &map, vt.GetIterator(), ptOffset, false, 0);
+  ByteString sContent = CPVT_GenerateAP::GenerateEditAP(&map, vt.GetIterator(),
+                                                        ptOffset, false, 0);
 
   if (sContent.IsEmpty())
-    return CFX_ByteString();
+    return ByteString();
 
   std::ostringstream sAppStream;
   sAppStream << "BT\n"
@@ -550,12 +549,12 @@
                     CPVT_Color(CPVT_Color::kRGB, 0, 0, 0), PaintOperation::FILL)
              << sContent << "ET\n"
              << "Q\n";
-  return CFX_ByteString(sAppStream);
+  return ByteString(sAppStream);
 }
 
 std::unique_ptr<CPDF_Dictionary> GenerateResourceFontDict(
     CPDF_Document* pDoc,
-    const CFX_ByteString& sFontDictName) {
+    const ByteString& sFontDictName) {
   CPDF_Dictionary* pFontDict = pDoc->NewIndirect<CPDF_Dictionary>();
   pFontDict->SetNewFor<CPDF_Name>("Type", "Font");
   pFontDict->SetNewFor<CPDF_Name>("Subtype", "Type1");
@@ -569,13 +568,13 @@
   return pResourceFontDict;
 }
 
-CFX_ByteString GetPaintOperatorString(bool bIsStrokeRect, bool bIsFillRect) {
+ByteString GetPaintOperatorString(bool bIsStrokeRect, bool bIsFillRect) {
   if (bIsStrokeRect)
     return bIsFillRect ? "b" : "s";
   return bIsFillRect ? "f" : "n";
 }
 
-CFX_ByteString GenerateTextSymbolAP(const CFX_FloatRect& rect) {
+ByteString GenerateTextSymbolAP(const CFX_FloatRect& rect) {
   std::ostringstream sAppStream;
   sAppStream << CPVT_GenerateAP::GenerateColorAP(
       CPVT_Color(CPVT_Color::kRGB, 1, 1, 0), PaintOperation::FILL);
@@ -622,7 +621,7 @@
   }
   sAppStream << "B*\n";
 
-  return CFX_ByteString(sAppStream);
+  return ByteString(sAppStream);
 }
 
 }  // namespace
@@ -635,7 +634,7 @@
   if (!pFieldTypeObj)
     return false;
 
-  CFX_ByteString field_type = pFieldTypeObj->GetString();
+  ByteString field_type = pFieldTypeObj->GetString();
   if (field_type == "Tx")
     return CPVT_GenerateAP::GenerateTextFieldAP(pDoc, pAnnotDict);
 
@@ -684,7 +683,7 @@
 bool CPVT_GenerateAP::GenerateCircleAP(CPDF_Document* pDoc,
                                        CPDF_Dictionary* pAnnotDict) {
   std::ostringstream sAppStream;
-  CFX_ByteString sExtGSDictName = "GS";
+  ByteString sExtGSDictName = "GS";
   sAppStream << "/" << sExtGSDictName << " gs ";
 
   CPDF_Array* pInteriorColor = pAnnotDict->GetArrayFor("IC");
@@ -758,7 +757,7 @@
 bool CPVT_GenerateAP::GenerateHighlightAP(CPDF_Document* pDoc,
                                           CPDF_Dictionary* pAnnotDict) {
   std::ostringstream sAppStream;
-  CFX_ByteString sExtGSDictName = "GS";
+  ByteString sExtGSDictName = "GS";
   sAppStream << "/" << sExtGSDictName << " gs ";
 
   sAppStream << GetColorStringWithDefault(pAnnotDict->GetArrayFor("C"),
@@ -796,7 +795,7 @@
     return false;
 
   std::ostringstream sAppStream;
-  CFX_ByteString sExtGSDictName = "GS";
+  ByteString sExtGSDictName = "GS";
   sAppStream << "/" << sExtGSDictName << " gs ";
 
   sAppStream << GetColorStringWithDefault(pAnnotDict->GetArrayFor("C"),
@@ -840,7 +839,7 @@
 bool CPVT_GenerateAP::GenerateTextAP(CPDF_Document* pDoc,
                                      CPDF_Dictionary* pAnnotDict) {
   std::ostringstream sAppStream;
-  CFX_ByteString sExtGSDictName = "GS";
+  ByteString sExtGSDictName = "GS";
   sAppStream << "/" << sExtGSDictName << " gs ";
 
   CFX_FloatRect rect = pAnnotDict->GetRectFor("Rect");
@@ -863,7 +862,7 @@
 bool CPVT_GenerateAP::GenerateUnderlineAP(CPDF_Document* pDoc,
                                           CPDF_Dictionary* pAnnotDict) {
   std::ostringstream sAppStream;
-  CFX_ByteString sExtGSDictName = "GS";
+  ByteString sExtGSDictName = "GS";
   sAppStream << "/" << sExtGSDictName << " gs ";
 
   sAppStream << GetColorStringWithDefault(pAnnotDict->GetArrayFor("C"),
@@ -890,7 +889,7 @@
 bool CPVT_GenerateAP::GeneratePopupAP(CPDF_Document* pDoc,
                                       CPDF_Dictionary* pAnnotDict) {
   std::ostringstream sAppStream;
-  CFX_ByteString sExtGSDictName = "GS";
+  ByteString sExtGSDictName = "GS";
   sAppStream << "/" << sExtGSDictName << " gs\n";
 
   sAppStream << GenerateColorAP(CPVT_Color(CPVT_Color::kRGB, 1, 1, 0),
@@ -908,7 +907,7 @@
   sAppStream << rect.left << " " << rect.bottom << " " << rect.Width() << " "
              << rect.Height() << " re b\n";
 
-  CFX_ByteString sFontName = "FONT";
+  ByteString sFontName = "FONT";
   auto pResourceFontDict = GenerateResourceFontDict(pDoc, sFontName);
   CPDF_Font* pDefFont = pDoc->LoadFont(pResourceFontDict.get());
   if (!pDefFont)
@@ -928,7 +927,7 @@
 bool CPVT_GenerateAP::GenerateSquareAP(CPDF_Document* pDoc,
                                        CPDF_Dictionary* pAnnotDict) {
   std::ostringstream sAppStream;
-  CFX_ByteString sExtGSDictName = "GS";
+  ByteString sExtGSDictName = "GS";
   sAppStream << "/" << sExtGSDictName << " gs ";
 
   CPDF_Array* pInteriorColor = pAnnotDict->GetArrayFor("IC");
@@ -976,7 +975,7 @@
 bool CPVT_GenerateAP::GenerateSquigglyAP(CPDF_Document* pDoc,
                                          CPDF_Dictionary* pAnnotDict) {
   std::ostringstream sAppStream;
-  CFX_ByteString sExtGSDictName = "GS";
+  ByteString sExtGSDictName = "GS";
   sAppStream << "/" << sExtGSDictName << " gs ";
 
   sAppStream << GetColorStringWithDefault(pAnnotDict->GetArrayFor("C"),
@@ -1025,7 +1024,7 @@
 bool CPVT_GenerateAP::GenerateStrikeOutAP(CPDF_Document* pDoc,
                                           CPDF_Dictionary* pAnnotDict) {
   std::ostringstream sAppStream;
-  CFX_ByteString sExtGSDictName = "GS";
+  ByteString sExtGSDictName = "GS";
   sAppStream << "/" << sExtGSDictName << " gs ";
 
   sAppStream << GetColorStringWithDefault(pAnnotDict->GetArrayFor("C"),
@@ -1050,7 +1049,7 @@
 }
 
 // Static.
-CFX_ByteString CPVT_GenerateAP::GenerateEditAP(
+ByteString CPVT_GenerateAP::GenerateEditAP(
     IPVT_FontMap* pFontMap,
     CPDF_VariableText::Iterator* pIterator,
     const CFX_PointF& ptOffset,
@@ -1070,7 +1069,7 @@
     if (bContinuous) {
       if (place.LineCmp(oldplace) != 0) {
         if (sWords.tellp() > 0) {
-          sLineStream << GetWordRenderString(CFX_ByteString(sWords));
+          sLineStream << GetWordRenderString(ByteString(sWords));
           sEditStream << sLineStream.str();
           sLineStream.str("");
           sWords.str("");
@@ -1095,7 +1094,7 @@
       if (pIterator->GetWord(word)) {
         if (word.nFontIndex != nCurFontIndex) {
           if (sWords.tellp() > 0) {
-            sLineStream << GetWordRenderString(CFX_ByteString(sWords));
+            sLineStream << GetWordRenderString(ByteString(sWords));
             sWords.str("");
           }
           sLineStream << GetFontSetString(pFontMap, word.nFontIndex,
@@ -1126,24 +1125,23 @@
     }
   }
   if (sWords.tellp() > 0) {
-    sLineStream << GetWordRenderString(CFX_ByteString(sWords));
+    sLineStream << GetWordRenderString(ByteString(sWords));
     sEditStream << sLineStream.str();
     sWords.str("");
   }
-  return CFX_ByteString(sEditStream);
+  return ByteString(sEditStream);
 }
 
 // Static.
-CFX_ByteString CPVT_GenerateAP::GenerateBorderAP(
-    const CFX_FloatRect& rect,
-    float fWidth,
-    const CPVT_Color& color,
-    const CPVT_Color& crLeftTop,
-    const CPVT_Color& crRightBottom,
-    BorderStyle nStyle,
-    const CPVT_Dash& dash) {
+ByteString CPVT_GenerateAP::GenerateBorderAP(const CFX_FloatRect& rect,
+                                             float fWidth,
+                                             const CPVT_Color& color,
+                                             const CPVT_Color& crLeftTop,
+                                             const CPVT_Color& crRightBottom,
+                                             BorderStyle nStyle,
+                                             const CPVT_Dash& dash) {
   std::ostringstream sAppStream;
-  CFX_ByteString sColor;
+  ByteString sColor;
   float fLeft = rect.left;
   float fRight = rect.right;
   float fTop = rect.top;
@@ -1238,12 +1236,12 @@
         break;
     }
   }
-  return CFX_ByteString(sAppStream);
+  return ByteString(sAppStream);
 }
 
 // Static.
-CFX_ByteString CPVT_GenerateAP::GenerateColorAP(const CPVT_Color& color,
-                                                PaintOperation nOperation) {
+ByteString CPVT_GenerateAP::GenerateColorAP(const CPVT_Color& color,
+                                            PaintOperation nOperation) {
   std::ostringstream sColorStream;
   switch (color.nColorType) {
     case CPVT_Color::kRGB:
@@ -1266,14 +1264,14 @@
     case CPVT_Color::kTransparent:
       break;
   }
-  return CFX_ByteString(sColorStream);
+  return ByteString(sColorStream);
 }
 
 // Static.
 std::unique_ptr<CPDF_Dictionary> CPVT_GenerateAP::GenerateExtGStateDict(
     const CPDF_Dictionary& pAnnotDict,
-    const CFX_ByteString& sExtGSDictName,
-    const CFX_ByteString& sBlendMode) {
+    const ByteString& sExtGSDictName,
+    const ByteString& sBlendMode) {
   auto pGSDict =
       pdfium::MakeUnique<CPDF_Dictionary>(pAnnotDict.GetByteStringPool());
   pGSDict->SetNewFor<CPDF_String>("Type", "ExtGState", false);
@@ -1334,11 +1332,11 @@
 }
 
 // Static.
-CFX_ByteString CPVT_GenerateAP::GetPDFWordString(IPVT_FontMap* pFontMap,
-                                                 int32_t nFontIndex,
-                                                 uint16_t Word,
-                                                 uint16_t SubWord) {
-  CFX_ByteString sWord;
+ByteString CPVT_GenerateAP::GetPDFWordString(IPVT_FontMap* pFontMap,
+                                             int32_t nFontIndex,
+                                             uint16_t Word,
+                                             uint16_t SubWord) {
+  ByteString sWord;
   if (SubWord > 0) {
     sWord.Format("%c", SubWord);
     return sWord;
@@ -1361,22 +1359,21 @@
 }
 
 // Static.
-CFX_ByteString CPVT_GenerateAP::GetWordRenderString(
-    const CFX_ByteString& strWords) {
+ByteString CPVT_GenerateAP::GetWordRenderString(const ByteString& strWords) {
   if (strWords.GetLength() > 0)
     return PDF_EncodeString(strWords, false) + " Tj\n";
   return "";
 }
 
 // Static.
-CFX_ByteString CPVT_GenerateAP::GetFontSetString(IPVT_FontMap* pFontMap,
-                                                 int32_t nFontIndex,
-                                                 float fFontSize) {
+ByteString CPVT_GenerateAP::GetFontSetString(IPVT_FontMap* pFontMap,
+                                             int32_t nFontIndex,
+                                             float fFontSize) {
   std::ostringstream sRet;
   if (pFontMap) {
-    CFX_ByteString sFontAlias = pFontMap->GetPDFFontAlias(nFontIndex);
+    ByteString sFontAlias = pFontMap->GetPDFFontAlias(nFontIndex);
     if (sFontAlias.GetLength() > 0 && fFontSize > 0)
       sRet << "/" << sFontAlias << " " << fFontSize << " Tf\n";
   }
-  return CFX_ByteString(sRet);
+  return ByteString(sRet);
 }
diff --git a/core/fpdfdoc/cpvt_generateap.h b/core/fpdfdoc/cpvt_generateap.h
index cee96cd..2812b29 100644
--- a/core/fpdfdoc/cpvt_generateap.h
+++ b/core/fpdfdoc/cpvt_generateap.h
@@ -7,6 +7,8 @@
 #ifndef CORE_FPDFDOC_CPVT_GENERATEAP_H_
 #define CORE_FPDFDOC_CPVT_GENERATEAP_H_
 
+#include <memory>
+
 #include "core/fpdfdoc/cpdf_defaultappearance.h"
 #include "core/fpdfdoc/cpdf_variabletext.h"
 #include "core/fpdfdoc/cpvt_color.h"
@@ -46,24 +48,24 @@
                                   CPDF_Dictionary* pAnnotDict);
   static bool GenerateUnderlineAP(CPDF_Document* pDoc,
                                   CPDF_Dictionary* pAnnotDict);
-  static CFX_ByteString GenerateEditAP(IPVT_FontMap* pFontMap,
-                                       CPDF_VariableText::Iterator* pIterator,
-                                       const CFX_PointF& ptOffset,
-                                       bool bContinuous,
-                                       uint16_t SubWord);
-  static CFX_ByteString GenerateBorderAP(const CFX_FloatRect& rect,
-                                         float fWidth,
-                                         const CPVT_Color& color,
-                                         const CPVT_Color& crLeftTop,
-                                         const CPVT_Color& crRightBottom,
-                                         BorderStyle nStyle,
-                                         const CPVT_Dash& dash);
-  static CFX_ByteString GenerateColorAP(const CPVT_Color& color,
-                                        PaintOperation nOperation);
+  static ByteString GenerateEditAP(IPVT_FontMap* pFontMap,
+                                   CPDF_VariableText::Iterator* pIterator,
+                                   const CFX_PointF& ptOffset,
+                                   bool bContinuous,
+                                   uint16_t SubWord);
+  static ByteString GenerateBorderAP(const CFX_FloatRect& rect,
+                                     float fWidth,
+                                     const CPVT_Color& color,
+                                     const CPVT_Color& crLeftTop,
+                                     const CPVT_Color& crRightBottom,
+                                     BorderStyle nStyle,
+                                     const CPVT_Dash& dash);
+  static ByteString GenerateColorAP(const CPVT_Color& color,
+                                    PaintOperation nOperation);
   static std::unique_ptr<CPDF_Dictionary> GenerateExtGStateDict(
       const CPDF_Dictionary& pAnnotDict,
-      const CFX_ByteString& sExtGSDictName,
-      const CFX_ByteString& sBlendMode);
+      const ByteString& sExtGSDictName,
+      const ByteString& sBlendMode);
   static std::unique_ptr<CPDF_Dictionary> GenerateResourceDict(
       CPDF_Document* pDoc,
       std::unique_ptr<CPDF_Dictionary> pExtGStateDict,
@@ -75,14 +77,14 @@
       std::unique_ptr<CPDF_Dictionary> pResourceDict,
       bool bIsTextMarkupAnnotation);
 
-  static CFX_ByteString GetPDFWordString(IPVT_FontMap* pFontMap,
-                                         int32_t nFontIndex,
-                                         uint16_t Word,
-                                         uint16_t SubWord);
-  static CFX_ByteString GetWordRenderString(const CFX_ByteString& strWords);
-  static CFX_ByteString GetFontSetString(IPVT_FontMap* pFontMap,
-                                         int32_t nFontIndex,
-                                         float fFontSize);
+  static ByteString GetPDFWordString(IPVT_FontMap* pFontMap,
+                                     int32_t nFontIndex,
+                                     uint16_t Word,
+                                     uint16_t SubWord);
+  static ByteString GetWordRenderString(const ByteString& strWords);
+  static ByteString GetFontSetString(IPVT_FontMap* pFontMap,
+                                     int32_t nFontIndex,
+                                     float fFontSize);
 };
 
 #endif  // CORE_FPDFDOC_CPVT_GENERATEAP_H_
diff --git a/core/fpdfdoc/ipdf_formnotify.h b/core/fpdfdoc/ipdf_formnotify.h
index bf6127d..52e5cc9 100644
--- a/core/fpdfdoc/ipdf_formnotify.h
+++ b/core/fpdfdoc/ipdf_formnotify.h
@@ -17,10 +17,10 @@
   virtual ~IPDF_FormNotify() {}
 
   virtual int BeforeValueChange(CPDF_FormField* pField,
-                                const CFX_WideString& csValue) = 0;
+                                const WideString& csValue) = 0;
   virtual void AfterValueChange(CPDF_FormField* pField) = 0;
   virtual int BeforeSelectionChange(CPDF_FormField* pField,
-                                    const CFX_WideString& csValue) = 0;
+                                    const WideString& csValue) = 0;
   virtual void AfterSelectionChange(CPDF_FormField* pField) = 0;
   virtual void AfterCheckedStatusChange(CPDF_FormField* pField) = 0;
   virtual int BeforeFormReset(CPDF_InterForm* pForm) = 0;
diff --git a/core/fpdfdoc/ipvt_fontmap.h b/core/fpdfdoc/ipvt_fontmap.h
index 740cb19..31aa73b 100644
--- a/core/fpdfdoc/ipvt_fontmap.h
+++ b/core/fpdfdoc/ipvt_fontmap.h
@@ -18,7 +18,7 @@
   virtual ~IPVT_FontMap() {}
 
   virtual CPDF_Font* GetPDFFont(int32_t nFontIndex) = 0;
-  virtual CFX_ByteString GetPDFFontAlias(int32_t nFontIndex) = 0;
+  virtual ByteString GetPDFFontAlias(int32_t nFontIndex) = 0;
   virtual int32_t GetWordFontIndex(uint16_t word,
                                    int32_t charset,
                                    int32_t nFontIndex) = 0;
diff --git a/core/fpdftext/cpdf_linkextract.cpp b/core/fpdftext/cpdf_linkextract.cpp
index a5eafe6..9111671 100644
--- a/core/fpdftext/cpdf_linkextract.cpp
+++ b/core/fpdftext/cpdf_linkextract.cpp
@@ -19,7 +19,7 @@
 // |end|. The purpose of this function is to separate url from the surrounding
 // context characters, we do not intend to fully validate the url. |str|
 // contains lower case characters only.
-FX_STRSIZE FindWebLinkEnding(const CFX_WideString& str,
+FX_STRSIZE FindWebLinkEnding(const WideString& str,
                              FX_STRSIZE start,
                              FX_STRSIZE end) {
   if (str.Contains(L'/', start)) {
@@ -67,7 +67,7 @@
 // Remove characters from the end of |str|, delimited by |start| and |end|, up
 // to and including |charToFind|. No-op if |charToFind| is not present. Updates
 // |end| if characters were removed.
-void TrimBackwardsToChar(const CFX_WideString& str,
+void TrimBackwardsToChar(const WideString& str,
                          wchar_t charToFind,
                          FX_STRSIZE start,
                          FX_STRSIZE* end) {
@@ -83,7 +83,7 @@
 // |start| and |end| in |str|. Matches a closing bracket or quote for each
 // opening character and, if present, removes everything afterwards. Returns the
 // new end position for the string.
-FX_STRSIZE TrimExternalBracketsFromWebLink(const CFX_WideString& str,
+FX_STRSIZE TrimExternalBracketsFromWebLink(const WideString& str,
                                            FX_STRSIZE start,
                                            FX_STRSIZE end) {
   for (FX_STRSIZE pos = 0; pos < start; pos++) {
@@ -144,7 +144,7 @@
         pos++;
         continue;
       }
-      CFX_WideString strBeCheck;
+      WideString strBeCheck;
       strBeCheck = m_pTextPage->GetPageText(start, nCount);
       if (bLineBreak) {
         strBeCheck.Remove(TEXT_LINEFEED_CHAR);
@@ -187,7 +187,7 @@
   }
 }
 
-bool CPDF_LinkExtract::CheckWebLink(CFX_WideString* strBeCheck,
+bool CPDF_LinkExtract::CheckWebLink(WideString* strBeCheck,
                                     int32_t* nStart,
                                     int32_t* nCount) {
   static const wchar_t kHttpScheme[] = L"http";
@@ -195,7 +195,7 @@
   static const wchar_t kWWWAddrStart[] = L"www.";
   static const FX_STRSIZE kWWWAddrStartLen = FXSYS_len(kWWWAddrStart);
 
-  CFX_WideString str = *strBeCheck;
+  WideString str = *strBeCheck;
   str.MakeLower();
 
   FX_STRSIZE len = str.GetLength();
@@ -237,7 +237,7 @@
   return false;
 }
 
-bool CPDF_LinkExtract::CheckMailLink(CFX_WideString* str) {
+bool CPDF_LinkExtract::CheckMailLink(WideString* str) {
   auto aPos = str->Find(L'@');
   // Invalid when no '@' or when starts/ends with '@'.
   if (!aPos.has_value() || aPos.value() == 0 || aPos == str->GetLength() - 1)
@@ -305,7 +305,7 @@
   return true;
 }
 
-CFX_WideString CPDF_LinkExtract::GetURL(size_t index) const {
+WideString CPDF_LinkExtract::GetURL(size_t index) const {
   return index < m_LinkArray.size() ? m_LinkArray[index].m_strUrl : L"";
 }
 
diff --git a/core/fpdftext/cpdf_linkextract.h b/core/fpdftext/cpdf_linkextract.h
index 5c022d3..db82deb 100644
--- a/core/fpdftext/cpdf_linkextract.h
+++ b/core/fpdftext/cpdf_linkextract.h
@@ -22,23 +22,23 @@
 
   void ExtractLinks();
   size_t CountLinks() const { return m_LinkArray.size(); }
-  CFX_WideString GetURL(size_t index) const;
+  WideString GetURL(size_t index) const;
   std::vector<CFX_FloatRect> GetRects(size_t index) const;
 
  protected:
   void ParseLink();
-  bool CheckWebLink(CFX_WideString* str, int32_t* nStart, int32_t* nCount);
-  bool CheckMailLink(CFX_WideString* str);
+  bool CheckWebLink(WideString* str, int32_t* nStart, int32_t* nCount);
+  bool CheckMailLink(WideString* str);
 
  private:
   struct Link {
     int m_Start;
     int m_Count;
-    CFX_WideString m_strUrl;
+    WideString m_strUrl;
   };
 
   CFX_UnownedPtr<const CPDF_TextPage> const m_pTextPage;
-  CFX_WideString m_strPageText;
+  WideString m_strPageText;
   std::vector<Link> m_LinkArray;
 };
 
diff --git a/core/fpdftext/cpdf_linkextract_unittest.cpp b/core/fpdftext/cpdf_linkextract_unittest.cpp
index efeb53e..30438e6 100644
--- a/core/fpdftext/cpdf_linkextract_unittest.cpp
+++ b/core/fpdftext/cpdf_linkextract_unittest.cpp
@@ -32,7 +32,7 @@
   };
   for (size_t i = 0; i < FX_ArraySize(invalid_strs); ++i) {
     const wchar_t* const input = invalid_strs[i];
-    CFX_WideString text_str(input);
+    WideString text_str(input);
     EXPECT_FALSE(extractor.CheckMailLink(&text_str)) << input;
   }
 
@@ -53,8 +53,8 @@
   };
   for (size_t i = 0; i < FX_ArraySize(valid_strs); ++i) {
     const wchar_t* const input = valid_strs[i][0];
-    CFX_WideString text_str(input);
-    CFX_WideString expected_str(L"mailto:");
+    WideString text_str(input);
+    WideString expected_str(L"mailto:");
     expected_str += valid_strs[i][1];
     EXPECT_TRUE(extractor.CheckMailLink(&text_str)) << input;
     EXPECT_STREQ(expected_str.c_str(), text_str.c_str());
@@ -80,7 +80,7 @@
   const int32_t DEFAULT_VALUE = -42;
   for (size_t i = 0; i < FX_ArraySize(invalid_cases); ++i) {
     const wchar_t* const input = invalid_cases[i];
-    CFX_WideString text_str(input);
+    WideString text_str(input);
     int32_t start_offset = DEFAULT_VALUE;
     int32_t count = DEFAULT_VALUE;
     EXPECT_FALSE(extractor.CheckWebLink(&text_str, &start_offset, &count))
@@ -175,7 +175,7 @@
   };
   for (size_t i = 0; i < FX_ArraySize(valid_cases); ++i) {
     const wchar_t* const input = valid_cases[i].input_string;
-    CFX_WideString text_str(input);
+    WideString text_str(input);
     int32_t start_offset = DEFAULT_VALUE;
     int32_t count = DEFAULT_VALUE;
     EXPECT_TRUE(extractor.CheckWebLink(&text_str, &start_offset, &count))
diff --git a/core/fpdftext/cpdf_textpage.cpp b/core/fpdftext/cpdf_textpage.cpp
index ee1d51b..f73793c 100644
--- a/core/fpdftext/cpdf_textpage.cpp
+++ b/core/fpdftext/cpdf_textpage.cpp
@@ -348,14 +348,14 @@
   return pos < pdfium::CollectionSize<int>(m_CharList) ? pos : NearPos;
 }
 
-CFX_WideString CPDF_TextPage::GetTextByRect(const CFX_FloatRect& rect) const {
+WideString CPDF_TextPage::GetTextByRect(const CFX_FloatRect& rect) const {
   if (!m_bIsParsed)
-    return CFX_WideString();
+    return WideString();
 
   float posy = 0;
   bool IsContainPreChar = false;
   bool IsAddLineFeed = false;
-  CFX_WideString strText;
+  WideString strText;
   for (const auto& charinfo : m_CharList) {
     if (IsRectIntersect(rect, charinfo.m_CharBox)) {
       if (fabs(posy - charinfo.m_Origin.y) > 0 && !IsContainPreChar &&
@@ -436,7 +436,7 @@
   }
 }
 
-CFX_WideString CPDF_TextPage::GetPageText(int start, int nCount) const {
+WideString CPDF_TextPage::GetPageText(int start, int nCount) const {
   if (!m_bIsParsed || nCount == 0)
     return L"";
 
@@ -445,8 +445,8 @@
 
   if (nCount == -1) {
     nCount = pdfium::CollectionSize<int>(m_CharList) - start;
-    CFX_WideStringC wsTextBuf = m_TextBuf.AsStringC();
-    return CFX_WideString(wsTextBuf.Right(wsTextBuf.GetLength() - start));
+    WideStringView wsTextBuf = m_TextBuf.AsStringView();
+    return WideString(wsTextBuf.Right(wsTextBuf.GetLength() - start));
   }
   if (nCount <= 0 || m_CharList.empty())
     return L"";
@@ -478,7 +478,7 @@
   nCount = start + nCount - nCountOffset - startindex;
   if (nCount <= 0)
     return L"";
-  return CFX_WideString(m_TextBuf.AsStringC().Mid(startindex, nCount));
+  return WideString(m_TextBuf.AsStringView().Mid(startindex, nCount));
 }
 
 int CPDF_TextPage::CountRects(int start, int nCount) {
@@ -630,7 +630,7 @@
   if (int w = pFont->GetCharWidthF(charCode))
     return w;
 
-  CFX_ByteString str;
+  ByteString str;
   pFont->AppendChar(&str, charCode);
   if (int w = pFont->GetStringWidth(str.c_str(), 1))
     return w;
@@ -702,7 +702,7 @@
   if (m_TempCharList.empty())
     return;
 
-  CFX_WideString str = m_TempTextBuf.MakeString();
+  WideString str = m_TempTextBuf.MakeString();
   bool bPrevSpace = false;
   for (FX_STRSIZE i = 0; i < str.GetLength(); i++) {
     if (str[i] != ' ') {
@@ -814,7 +814,7 @@
   if (nContentMark < 1)
     return FPDFText_MarkedContent::Pass;
 
-  CFX_WideString actText;
+  WideString actText;
   bool bExist = false;
   CPDF_Dictionary* pDict = nullptr;
   int n = 0;
@@ -876,7 +876,7 @@
   if (nContentMark < 1)
     return;
 
-  CFX_WideString actText;
+  WideString actText;
   for (int n = 0; n < nContentMark; n++) {
     const CPDF_ContentMarkItem& item = pTextObj->m_ContentMark.GetItem(n);
     CPDF_Dictionary* pDict = item.GetParam();
@@ -941,13 +941,13 @@
 bool CPDF_TextPage::IsRightToLeft(const CPDF_TextObject* pTextObj,
                                   const CPDF_Font* pFont,
                                   int nItems) const {
-  CFX_WideString str;
+  WideString str;
   for (int32_t i = 0; i < nItems; i++) {
     CPDF_TextObjectItem item;
     pTextObj->GetItemInfo(i, &item);
     if (item.m_CharCode == static_cast<uint32_t>(-1))
       continue;
-    CFX_WideString wstrItem = pFont->UnicodeFromCharCode(item.m_CharCode);
+    WideString wstrItem = pFont->UnicodeFromCharCode(item.m_CharCode);
     wchar_t wChar = !wstrItem.IsEmpty() ? wstrItem[0] : 0;
     if (wChar == 0)
       wChar = item.m_CharCode;
@@ -1004,7 +1004,7 @@
         if (pTextObj->CountChars() == 1) {
           CPDF_TextObjectItem item;
           pTextObj->GetCharInfo(0, &item);
-          CFX_WideString wstrItem =
+          WideString wstrItem =
               pTextObj->GetFont()->UnicodeFromCharCode(item.m_CharCode);
           if (wstrItem.IsEmpty())
             wstrItem += (wchar_t)item.m_CharCode;
@@ -1013,7 +1013,7 @@
             return;
         }
         while (m_TempTextBuf.GetSize() > 0 &&
-               m_TempTextBuf.AsStringC()[m_TempTextBuf.GetLength() - 1] ==
+               m_TempTextBuf.AsStringView()[m_TempTextBuf.GetLength() - 1] ==
                    0x20) {
           m_TempTextBuf.Delete(m_TempTextBuf.GetLength() - 1, 1);
           m_TempCharList.pop_back();
@@ -1053,9 +1053,9 @@
     PAGECHAR_INFO charinfo;
     pTextObj->GetItemInfo(i, &item);
     if (item.m_CharCode == static_cast<uint32_t>(-1)) {
-      CFX_WideString str = m_TempTextBuf.MakeString();
+      WideString str = m_TempTextBuf.MakeString();
       if (str.IsEmpty())
-        str = m_TextBuf.AsStringC();
+        str = m_TextBuf.AsStringView();
       if (str.IsEmpty() || str[str.GetLength() - 1] == TEXT_SPACE_CHAR)
         continue;
 
@@ -1106,7 +1106,7 @@
         continue;
     }
     spacing = 0;
-    CFX_WideString wstrItem = pFont->UnicodeFromCharCode(item.m_CharCode);
+    WideString wstrItem = pFont->UnicodeFromCharCode(item.m_CharCode);
     bool bNoUnicode = false;
     if (wstrItem.IsEmpty() && item.m_CharCode) {
       wstrItem += static_cast<wchar_t>(item.m_CharCode);
@@ -1177,7 +1177,7 @@
           m_TempCharList.push_back(charinfo);
         }
       } else if (i == 0) {
-        CFX_WideString str = m_TempTextBuf.MakeString();
+        WideString str = m_TempTextBuf.MakeString();
         if (!str.IsEmpty() && str[str.GetLength() - 1] == TEXT_SPACE_CHAR) {
           m_TempTextBuf.Delete(m_TempTextBuf.GetLength() - 1, 1);
           m_TempCharList.pop_back();
@@ -1220,11 +1220,11 @@
 }
 
 bool CPDF_TextPage::IsHyphen(wchar_t curChar) const {
-  CFX_WideStringC curText;
+  WideStringView curText;
   if (!m_TempTextBuf.IsEmpty())
-    curText = m_TempTextBuf.AsStringC();
+    curText = m_TempTextBuf.AsStringView();
   else if (!m_TextBuf.IsEmpty())
-    curText = m_TextBuf.AsStringC();
+    curText = m_TextBuf.AsStringView();
   else
     return false;
 
@@ -1267,8 +1267,7 @@
   int nItem = m_pPreTextObj->CountItems();
   m_pPreTextObj->GetItemInfo(nItem - 1, &PrevItem);
   pObj->GetItemInfo(0, &item);
-  CFX_WideString wstrItem =
-      pObj->GetFont()->UnicodeFromCharCode(item.m_CharCode);
+  WideString wstrItem = pObj->GetFont()->UnicodeFromCharCode(item.m_CharCode);
   if (wstrItem.IsEmpty())
     wstrItem += static_cast<wchar_t>(item.m_CharCode);
   wchar_t curChar = wstrItem[0];
@@ -1356,7 +1355,7 @@
       IsHyphen(curChar)) {
     return GenerateCharacter::Hyphen;
   }
-  CFX_WideString PrevStr =
+  WideString PrevStr =
       m_pPreTextObj->GetFont()->UnicodeFromCharCode(PrevItem.m_CharCode);
   if (PrevStr.IsEmpty())
     return GenerateCharacter::None;
diff --git a/core/fpdftext/cpdf_textpage.h b/core/fpdftext/cpdf_textpage.h
index 41892ea..ef55ad0 100644
--- a/core/fpdftext/cpdf_textpage.h
+++ b/core/fpdftext/cpdf_textpage.h
@@ -106,8 +106,8 @@
   void GetCharInfo(int index, FPDF_CHAR_INFO* info) const;
   std::vector<CFX_FloatRect> GetRectArray(int start, int nCount) const;
   int GetIndexAtPos(const CFX_PointF& point, const CFX_SizeF& tolerance) const;
-  CFX_WideString GetTextByRect(const CFX_FloatRect& rect) const;
-  CFX_WideString GetPageText(int start = 0, int nCount = -1) const;
+  WideString GetTextByRect(const CFX_FloatRect& rect) const;
+  WideString GetPageText(int start = 0, int nCount = -1) const;
   int CountRects(int start, int nCount);
   void GetRect(int rectIndex,
                float& left,
diff --git a/core/fpdftext/cpdf_textpagefind.cpp b/core/fpdftext/cpdf_textpagefind.cpp
index 3678e42..f00b8a9 100644
--- a/core/fpdftext/cpdf_textpagefind.cpp
+++ b/core/fpdftext/cpdf_textpagefind.cpp
@@ -79,14 +79,14 @@
   return m_pTextPage->CharIndexFromTextIndex(index);
 }
 
-bool CPDF_TextPageFind::FindFirst(const CFX_WideString& findwhat,
+bool CPDF_TextPageFind::FindFirst(const WideString& findwhat,
                                   int flags,
                                   pdfium::Optional<FX_STRSIZE> startPos) {
   if (!m_pTextPage)
     return false;
   if (m_strText.IsEmpty() || m_bMatchCase != (flags & FPDFTEXT_MATCHCASE))
     m_strText = m_pTextPage->GetPageText();
-  CFX_WideString findwhatStr = findwhat;
+  WideString findwhatStr = findwhat;
   m_findWhat = findwhatStr;
   m_flags = flags;
   m_bMatchCase = flags & FPDFTEXT_MATCHCASE;
@@ -147,7 +147,7 @@
   FX_STRSIZE nStartPos = m_findNextStart.value();
   bool bSpaceStart = false;
   for (int iWord = 0; iWord < nCount; iWord++) {
-    CFX_WideString csWord = m_csFindWhatArray[iWord];
+    WideString csWord = m_csFindWhatArray[iWord];
     if (csWord.IsEmpty()) {
       if (iWord == nCount - 1) {
         wchar_t strInsert = m_strText[nStartPos];
@@ -175,7 +175,7 @@
     if (iWord != 0 && !bSpaceStart) {
       FX_STRSIZE PreResEndPos = nStartPos;
       int curChar = csWord[0];
-      CFX_WideString lastWord = m_csFindWhatArray[iWord - 1];
+      WideString lastWord = m_csFindWhatArray[iWord - 1];
       int lastChar = lastWord[lastWord.GetLength() - 1];
       if (nStartPos == nResultPos.value() &&
           !(IsIgnoreSpaceCharacter(lastChar) ||
@@ -275,12 +275,12 @@
   return m_IsFind;
 }
 
-void CPDF_TextPageFind::ExtractFindWhat(const CFX_WideString& findwhat) {
+void CPDF_TextPageFind::ExtractFindWhat(const WideString& findwhat) {
   if (findwhat.IsEmpty())
     return;
   int index = 0;
   while (1) {
-    CFX_WideString csWord = TEXT_EMPTY;
+    WideString csWord = TEXT_EMPTY;
     int ret =
         ExtractSubString(csWord, findwhat.c_str(), index, TEXT_SPACE_CHAR);
     if (csWord.IsEmpty()) {
@@ -294,7 +294,7 @@
     }
     FX_STRSIZE pos = 0;
     while (pos < csWord.GetLength()) {
-      CFX_WideString curStr = csWord.Mid(pos, 1);
+      WideString curStr = csWord.Mid(pos, 1);
       wchar_t curChar = csWord[pos];
       if (IsIgnoreSpaceCharacter(curChar)) {
         if (pos > 0 && curChar == 0x2019) {
@@ -320,7 +320,7 @@
   }
 }
 
-bool CPDF_TextPageFind::IsMatchWholeWord(const CFX_WideString& csPageText,
+bool CPDF_TextPageFind::IsMatchWholeWord(const WideString& csPageText,
                                          FX_STRSIZE startPos,
                                          FX_STRSIZE endPos) {
   if (startPos > endPos)
@@ -360,7 +360,7 @@
   return true;
 }
 
-bool CPDF_TextPageFind::ExtractSubString(CFX_WideString& rString,
+bool CPDF_TextPageFind::ExtractSubString(WideString& rString,
                                          const wchar_t* lpszFullString,
                                          int iSubString,
                                          wchar_t chSep) {
diff --git a/core/fpdftext/cpdf_textpagefind.h b/core/fpdftext/cpdf_textpagefind.h
index cf8d3d1..f9a28a0 100644
--- a/core/fpdftext/cpdf_textpagefind.h
+++ b/core/fpdftext/cpdf_textpagefind.h
@@ -22,7 +22,7 @@
   explicit CPDF_TextPageFind(const CPDF_TextPage* pTextPage);
   ~CPDF_TextPageFind();
 
-  bool FindFirst(const CFX_WideString& findwhat,
+  bool FindFirst(const WideString& findwhat,
                  int flags,
                  pdfium::Optional<FX_STRSIZE> startPos);
   bool FindNext();
@@ -31,11 +31,11 @@
   int GetMatchedCount() const;
 
  protected:
-  void ExtractFindWhat(const CFX_WideString& findwhat);
-  bool IsMatchWholeWord(const CFX_WideString& csPageText,
+  void ExtractFindWhat(const WideString& findwhat);
+  bool IsMatchWholeWord(const WideString& csPageText,
                         FX_STRSIZE startPos,
                         FX_STRSIZE endPos);
-  bool ExtractSubString(CFX_WideString& rString,
+  bool ExtractSubString(WideString& rString,
                         const wchar_t* lpszFullString,
                         int iSubString,
                         wchar_t chSep);
@@ -44,10 +44,10 @@
  private:
   std::vector<uint16_t> m_CharIndex;
   CFX_UnownedPtr<const CPDF_TextPage> m_pTextPage;
-  CFX_WideString m_strText;
-  CFX_WideString m_findWhat;
+  WideString m_strText;
+  WideString m_findWhat;
   int m_flags;
-  std::vector<CFX_WideString> m_csFindWhatArray;
+  std::vector<WideString> m_csFindWhatArray;
   pdfium::Optional<FX_STRSIZE> m_findNextStart;
   pdfium::Optional<FX_STRSIZE> m_findPreStart;
   bool m_bMatchCase;
diff --git a/core/fxcodec/codec/ccodec_gifmodule.cpp b/core/fxcodec/codec/ccodec_gifmodule.cpp
index 7570193..f7e3546 100644
--- a/core/fxcodec/codec/ccodec_gifmodule.cpp
+++ b/core/fxcodec/codec/ccodec_gifmodule.cpp
@@ -71,7 +71,7 @@
   if (len > 21) {
     uint8_t size = *buf++;
     if (size != 0)
-      pAttribute->m_strAuthor = CFX_ByteString(buf, size);
+      pAttribute->m_strAuthor = ByteString(buf, size);
     else
       pAttribute->m_strAuthor.clear();
   }
diff --git a/core/fxcodec/codec/ccodec_pngmodule.cpp b/core/fxcodec/codec/ccodec_pngmodule.cpp
index 8a3de3a..ae70389 100644
--- a/core/fxcodec/codec/ccodec_pngmodule.cpp
+++ b/core/fxcodec/codec/ccodec_pngmodule.cpp
@@ -86,8 +86,8 @@
         buf = "Author";
         if (!memcmp(buf, text[i].key, std::min(len, FXSYS_strlen(buf)))) {
           pAttribute->m_strAuthor =
-              CFX_ByteString(reinterpret_cast<uint8_t*>(text[i].text),
-                             static_cast<FX_STRSIZE>(text[i].text_length));
+              ByteString(reinterpret_cast<uint8_t*>(text[i].text),
+                         static_cast<FX_STRSIZE>(text[i].text_length));
         }
       }
     }
diff --git a/core/fxcodec/fx_codec.h b/core/fxcodec/fx_codec.h
index 2e83319..926a884 100644
--- a/core/fxcodec/fx_codec.h
+++ b/core/fxcodec/fx_codec.h
@@ -48,7 +48,7 @@
   int32_t m_nYDPI;
   float m_fAspectRatio;
   uint16_t m_wDPIUnit;
-  CFX_ByteString m_strAuthor;
+  ByteString m_strAuthor;
   int32_t m_nGifLeft;
   int32_t m_nGifTop;
   uint32_t* m_pGifLocalPalette;
diff --git a/core/fxcodec/lgif/cgifcontext.h b/core/fxcodec/lgif/cgifcontext.h
index 1bd6d46..03976a7 100644
--- a/core/fxcodec/lgif/cgifcontext.h
+++ b/core/fxcodec/lgif/cgifcontext.h
@@ -46,7 +46,7 @@
   uint32_t avail_in;
   int32_t decode_status;
   uint32_t skip_size;
-  CFX_ByteString cmt_data;
+  ByteString cmt_data;
   std::unique_ptr<GifGCE> m_GifGCE;
   uint8_t* next_in;
   std::vector<std::unique_ptr<GifImage>> m_Images;
diff --git a/core/fxcodec/lgif/fx_gif.cpp b/core/fxcodec/lgif/fx_gif.cpp
index cef4f9a..18385c3 100644
--- a/core/fxcodec/lgif/fx_gif.cpp
+++ b/core/fxcodec/lgif/fx_gif.cpp
@@ -61,7 +61,7 @@
           context->skip_size = skip_size_org;
           return GifDecodeStatus::Unfinished;
         }
-        context->cmt_data += CFX_ByteString(data_ptr, data_size);
+        context->cmt_data += ByteString(data_ptr, data_size);
       }
       break;
     }
diff --git a/core/fxcrt/cfx_bytestring.cpp b/core/fxcrt/bytestring.cpp
similarity index 76%
rename from core/fxcrt/cfx_bytestring.cpp
rename to core/fxcrt/bytestring.cpp
index 073591a..dd4dbd9 100644
--- a/core/fxcrt/cfx_bytestring.cpp
+++ b/core/fxcrt/bytestring.cpp
@@ -4,7 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "core/fxcrt/cfx_bytestring.h"
+#include "core/fxcrt/bytestring.h"
 
 #include <stddef.h>
 
@@ -21,9 +21,9 @@
 #include "third_party/base/stl_util.h"
 
 template class CFX_StringDataTemplate<char>;
-template class CFX_StringCTemplate<char>;
-template class CFX_StringPoolTemplate<CFX_ByteString>;
-template struct std::hash<CFX_ByteString>;
+template class fxcrt::StringViewTemplate<char>;
+template class CFX_StringPoolTemplate<ByteString>;
+template struct std::hash<ByteString>;
 
 namespace {
 
@@ -66,7 +66,7 @@
 }
 #endif
 
-CFX_ByteString GetByteString(uint16_t codepage, const CFX_WideStringC& wstr) {
+ByteString GetByteString(uint16_t codepage, const WideStringView& wstr) {
   ASSERT(IsValidCodePage(codepage));
 
   int src_len = wstr.GetLength();
@@ -74,9 +74,9 @@
       FXSYS_WideCharToMultiByte(codepage, 0, wstr.unterminated_c_str(), src_len,
                                 nullptr, 0, nullptr, nullptr);
   if (!dest_len)
-    return CFX_ByteString();
+    return ByteString();
 
-  CFX_ByteString bstr;
+  ByteString bstr;
   char* dest_buf = bstr.GetBuffer(dest_len);
   FXSYS_WideCharToMultiByte(codepage, 0, wstr.unterminated_c_str(), src_len,
                             dest_buf, dest_len, nullptr, nullptr);
@@ -86,45 +86,45 @@
 
 }  // namespace
 
-static_assert(sizeof(CFX_ByteString) <= sizeof(char*),
+namespace fxcrt {
+
+static_assert(sizeof(ByteString) <= sizeof(char*),
               "Strings must not require more space than pointers");
 
-CFX_ByteString::CFX_ByteString(const char* pStr, FX_STRSIZE nLen) {
+ByteString::ByteString(const char* pStr, FX_STRSIZE nLen) {
   if (nLen)
     m_pData.Reset(StringData::Create(pStr, nLen));
 }
 
-CFX_ByteString::CFX_ByteString(const uint8_t* pStr, FX_STRSIZE nLen) {
+ByteString::ByteString(const uint8_t* pStr, FX_STRSIZE nLen) {
   if (nLen)
     m_pData.Reset(
         StringData::Create(reinterpret_cast<const char*>(pStr), nLen));
 }
 
-CFX_ByteString::CFX_ByteString() {}
+ByteString::ByteString() {}
 
-CFX_ByteString::CFX_ByteString(const CFX_ByteString& other)
-    : m_pData(other.m_pData) {}
+ByteString::ByteString(const ByteString& other) : m_pData(other.m_pData) {}
 
-CFX_ByteString::CFX_ByteString(CFX_ByteString&& other) noexcept {
+ByteString::ByteString(ByteString&& other) noexcept {
   m_pData.Swap(other.m_pData);
 }
 
-CFX_ByteString::CFX_ByteString(char ch) {
+ByteString::ByteString(char ch) {
   m_pData.Reset(StringData::Create(1));
   m_pData->m_String[0] = ch;
 }
 
-CFX_ByteString::CFX_ByteString(const char* ptr)
-    : CFX_ByteString(ptr, ptr ? FXSYS_strlen(ptr) : 0) {}
+ByteString::ByteString(const char* ptr)
+    : ByteString(ptr, ptr ? FXSYS_strlen(ptr) : 0) {}
 
-CFX_ByteString::CFX_ByteString(const CFX_ByteStringC& stringSrc) {
+ByteString::ByteString(const ByteStringView& stringSrc) {
   if (!stringSrc.IsEmpty())
     m_pData.Reset(StringData::Create(stringSrc.unterminated_c_str(),
                                      stringSrc.GetLength()));
 }
 
-CFX_ByteString::CFX_ByteString(const CFX_ByteStringC& str1,
-                               const CFX_ByteStringC& str2) {
+ByteString::ByteString(const ByteStringView& str1, const ByteStringView& str2) {
   FX_SAFE_STRSIZE nSafeLen = str1.GetLength();
   nSafeLen += str2.GetLength();
 
@@ -138,8 +138,7 @@
                           str2.GetLength());
 }
 
-CFX_ByteString::CFX_ByteString(
-    const std::initializer_list<CFX_ByteStringC>& list) {
+ByteString::ByteString(const std::initializer_list<ByteStringView>& list) {
   FX_SAFE_STRSIZE nSafeLen = 0;
   for (const auto& item : list)
     nSafeLen += item.GetLength();
@@ -158,15 +157,15 @@
   }
 }
 
-CFX_ByteString::CFX_ByteString(const std::ostringstream& outStream) {
+ByteString::ByteString(const std::ostringstream& outStream) {
   std::string str = outStream.str();
   if (str.length() > 0)
     m_pData.Reset(StringData::Create(str.c_str(), str.length()));
 }
 
-CFX_ByteString::~CFX_ByteString() {}
+ByteString::~ByteString() {}
 
-const CFX_ByteString& CFX_ByteString::operator=(const char* pStr) {
+const ByteString& ByteString::operator=(const char* pStr) {
   if (!pStr || !pStr[0])
     clear();
   else
@@ -175,8 +174,7 @@
   return *this;
 }
 
-const CFX_ByteString& CFX_ByteString::operator=(
-    const CFX_ByteStringC& stringSrc) {
+const ByteString& ByteString::operator=(const ByteStringView& stringSrc) {
   if (stringSrc.IsEmpty())
     clear();
   else
@@ -185,41 +183,40 @@
   return *this;
 }
 
-const CFX_ByteString& CFX_ByteString::operator=(
-    const CFX_ByteString& stringSrc) {
+const ByteString& ByteString::operator=(const ByteString& stringSrc) {
   if (m_pData != stringSrc.m_pData)
     m_pData = stringSrc.m_pData;
 
   return *this;
 }
 
-const CFX_ByteString& CFX_ByteString::operator+=(const char* pStr) {
+const ByteString& ByteString::operator+=(const char* pStr) {
   if (pStr)
     Concat(pStr, FXSYS_strlen(pStr));
 
   return *this;
 }
 
-const CFX_ByteString& CFX_ByteString::operator+=(char ch) {
+const ByteString& ByteString::operator+=(char ch) {
   Concat(&ch, 1);
   return *this;
 }
 
-const CFX_ByteString& CFX_ByteString::operator+=(const CFX_ByteString& str) {
+const ByteString& ByteString::operator+=(const ByteString& str) {
   if (str.m_pData)
     Concat(str.m_pData->m_String, str.m_pData->m_nDataLength);
 
   return *this;
 }
 
-const CFX_ByteString& CFX_ByteString::operator+=(const CFX_ByteStringC& str) {
+const ByteString& ByteString::operator+=(const ByteStringView& str) {
   if (!str.IsEmpty())
     Concat(str.unterminated_c_str(), str.GetLength());
 
   return *this;
 }
 
-bool CFX_ByteString::operator==(const char* ptr) const {
+bool ByteString::operator==(const char* ptr) const {
   if (!m_pData)
     return !ptr || !ptr[0];
 
@@ -230,7 +227,7 @@
          memcmp(ptr, m_pData->m_String, m_pData->m_nDataLength) == 0;
 }
 
-bool CFX_ByteString::operator==(const CFX_ByteStringC& str) const {
+bool ByteString::operator==(const ByteStringView& str) const {
   if (!m_pData)
     return str.IsEmpty();
 
@@ -239,7 +236,7 @@
              0;
 }
 
-bool CFX_ByteString::operator==(const CFX_ByteString& other) const {
+bool ByteString::operator==(const ByteString& other) const {
   if (m_pData == other.m_pData)
     return true;
 
@@ -254,7 +251,7 @@
                 m_pData->m_nDataLength) == 0;
 }
 
-bool CFX_ByteString::operator<(const CFX_ByteString& str) const {
+bool ByteString::operator<(const ByteString& str) const {
   if (m_pData == str.m_pData)
     return false;
 
@@ -263,7 +260,7 @@
   return result < 0 || (result == 0 && GetLength() < str.GetLength());
 }
 
-bool CFX_ByteString::EqualNoCase(const CFX_ByteStringC& str) const {
+bool ByteString::EqualNoCase(const ByteStringView& str) const {
   if (!m_pData)
     return str.IsEmpty();
 
@@ -286,13 +283,13 @@
   return true;
 }
 
-void CFX_ByteString::AssignCopy(const char* pSrcData, FX_STRSIZE nSrcLen) {
+void ByteString::AssignCopy(const char* pSrcData, FX_STRSIZE nSrcLen) {
   AllocBeforeWrite(nSrcLen);
   m_pData->CopyContents(pSrcData, nSrcLen);
   m_pData->m_nDataLength = nSrcLen;
 }
 
-void CFX_ByteString::ReallocBeforeWrite(FX_STRSIZE nNewLength) {
+void ByteString::ReallocBeforeWrite(FX_STRSIZE nNewLength) {
   if (m_pData && m_pData->CanOperateInPlace(nNewLength))
     return;
 
@@ -313,7 +310,7 @@
   m_pData.Swap(pNewData);
 }
 
-void CFX_ByteString::AllocBeforeWrite(FX_STRSIZE nNewLength) {
+void ByteString::AllocBeforeWrite(FX_STRSIZE nNewLength) {
   if (m_pData && m_pData->CanOperateInPlace(nNewLength))
     return;
 
@@ -325,7 +322,7 @@
   m_pData.Reset(StringData::Create(nNewLength));
 }
 
-void CFX_ByteString::ReleaseBuffer(FX_STRSIZE nNewLength) {
+void ByteString::ReleaseBuffer(FX_STRSIZE nNewLength) {
   if (!m_pData)
     return;
 
@@ -341,16 +338,16 @@
   if (m_pData->m_nAllocLength - nNewLength >= 32) {
     // Over arbitrary threshold, so pay the price to relocate.  Force copy to
     // always occur by holding a second reference to the string.
-    CFX_ByteString preserve(*this);
+    ByteString preserve(*this);
     ReallocBeforeWrite(nNewLength);
   }
 }
 
-void CFX_ByteString::Reserve(FX_STRSIZE len) {
+void ByteString::Reserve(FX_STRSIZE len) {
   GetBuffer(len);
 }
 
-char* CFX_ByteString::GetBuffer(FX_STRSIZE nMinBufLength) {
+char* ByteString::GetBuffer(FX_STRSIZE nMinBufLength) {
   if (!m_pData) {
     if (nMinBufLength == 0)
       return nullptr;
@@ -375,7 +372,7 @@
   return m_pData->m_String;
 }
 
-FX_STRSIZE CFX_ByteString::Delete(FX_STRSIZE index, FX_STRSIZE count) {
+FX_STRSIZE ByteString::Delete(FX_STRSIZE index, FX_STRSIZE count) {
   if (!m_pData)
     return 0;
 
@@ -396,7 +393,7 @@
   return m_pData->m_nDataLength;
 }
 
-void CFX_ByteString::Concat(const char* pSrcData, FX_STRSIZE nSrcLen) {
+void ByteString::Concat(const char* pSrcData, FX_STRSIZE nSrcLen) {
   if (!pSrcData || nSrcLen == 0)
     return;
 
@@ -418,42 +415,42 @@
   m_pData.Swap(pNewData);
 }
 
-CFX_ByteString CFX_ByteString::Mid(FX_STRSIZE first, FX_STRSIZE count) const {
+ByteString ByteString::Mid(FX_STRSIZE first, FX_STRSIZE count) const {
   if (!m_pData)
-    return CFX_ByteString();
+    return ByteString();
 
   if (!IsValidIndex(first))
-    return CFX_ByteString();
+    return ByteString();
 
   if (count == 0 || !IsValidLength(count))
-    return CFX_ByteString();
+    return ByteString();
 
   if (!IsValidIndex(first + count - 1))
-    return CFX_ByteString();
+    return ByteString();
 
   if (first == 0 && count == m_pData->m_nDataLength)
     return *this;
 
-  CFX_ByteString dest;
+  ByteString dest;
   AllocCopy(dest, count, first);
   return dest;
 }
 
-CFX_ByteString CFX_ByteString::Left(FX_STRSIZE count) const {
+ByteString ByteString::Left(FX_STRSIZE count) const {
   if (count == 0 || !IsValidLength(count))
-    return CFX_ByteString();
+    return ByteString();
   return Mid(0, count);
 }
 
-CFX_ByteString CFX_ByteString::Right(FX_STRSIZE count) const {
+ByteString ByteString::Right(FX_STRSIZE count) const {
   if (count == 0 || !IsValidLength(count))
-    return CFX_ByteString();
+    return ByteString();
   return Mid(GetLength() - count, count);
 }
 
-void CFX_ByteString::AllocCopy(CFX_ByteString& dest,
-                               FX_STRSIZE nCopyLen,
-                               FX_STRSIZE nCopyIndex) const {
+void ByteString::AllocCopy(ByteString& dest,
+                           FX_STRSIZE nCopyLen,
+                           FX_STRSIZE nCopyIndex) const {
   if (nCopyLen == 0)
     return;
 
@@ -466,13 +463,13 @@
 #define FORCE_UNICODE 0x20000
 #define FORCE_INT64 0x40000
 
-CFX_ByteString CFX_ByteString::FormatInteger(int i) {
+ByteString ByteString::FormatInteger(int i) {
   char buf[32];
   FXSYS_snprintf(buf, 32, "%d", i);
-  return CFX_ByteString(buf);
+  return ByteString(buf);
 }
 
-void CFX_ByteString::FormatV(const char* pFormat, va_list argList) {
+void ByteString::FormatV(const char* pFormat, va_list argList) {
   va_list argListCopy;
   va_copy(argListCopy, argList);
   FX_STRSIZE nMaxLen = vsnprintf(nullptr, 0, pFormat, argListCopy);
@@ -491,20 +488,20 @@
   }
 }
 
-void CFX_ByteString::Format(const char* pFormat, ...) {
+void ByteString::Format(const char* pFormat, ...) {
   va_list argList;
   va_start(argList, pFormat);
   FormatV(pFormat, argList);
   va_end(argList);
 }
 
-void CFX_ByteString::SetAt(FX_STRSIZE index, char c) {
+void ByteString::SetAt(FX_STRSIZE index, char c) {
   ASSERT(IsValidIndex(index));
   ReallocBeforeWrite(m_pData->m_nDataLength);
   m_pData->m_String[index] = c;
 }
 
-FX_STRSIZE CFX_ByteString::Insert(FX_STRSIZE location, char ch) {
+FX_STRSIZE ByteString::Insert(FX_STRSIZE location, char ch) {
   const FX_STRSIZE cur_length = m_pData ? m_pData->m_nDataLength : 0;
   if (!IsValidLength(location))
     return cur_length;
@@ -518,8 +515,7 @@
   return new_length;
 }
 
-pdfium::Optional<FX_STRSIZE> CFX_ByteString::Find(char ch,
-                                                  FX_STRSIZE start) const {
+pdfium::Optional<FX_STRSIZE> ByteString::Find(char ch, FX_STRSIZE start) const {
   if (!m_pData)
     return pdfium::Optional<FX_STRSIZE>();
 
@@ -533,8 +529,8 @@
               : pdfium::Optional<FX_STRSIZE>();
 }
 
-pdfium::Optional<FX_STRSIZE> CFX_ByteString::Find(const CFX_ByteStringC& subStr,
-                                                  FX_STRSIZE start) const {
+pdfium::Optional<FX_STRSIZE> ByteString::Find(const ByteStringView& subStr,
+                                              FX_STRSIZE start) const {
   if (!m_pData)
     return pdfium::Optional<FX_STRSIZE>();
 
@@ -549,7 +545,7 @@
               : pdfium::Optional<FX_STRSIZE>();
 }
 
-pdfium::Optional<FX_STRSIZE> CFX_ByteString::ReverseFind(char ch) const {
+pdfium::Optional<FX_STRSIZE> ByteString::ReverseFind(char ch) const {
   if (!m_pData)
     return pdfium::Optional<FX_STRSIZE>();
 
@@ -561,7 +557,7 @@
   return pdfium::Optional<FX_STRSIZE>();
 }
 
-void CFX_ByteString::MakeLower() {
+void ByteString::MakeLower() {
   if (!m_pData)
     return;
 
@@ -569,7 +565,7 @@
   FXSYS_strlwr(m_pData->m_String);
 }
 
-void CFX_ByteString::MakeUpper() {
+void ByteString::MakeUpper() {
   if (!m_pData)
     return;
 
@@ -577,7 +573,7 @@
   FXSYS_strupr(m_pData->m_String);
 }
 
-FX_STRSIZE CFX_ByteString::Remove(char chRemove) {
+FX_STRSIZE ByteString::Remove(char chRemove) {
   if (!m_pData || m_pData->m_nDataLength < 1)
     return 0;
 
@@ -611,8 +607,8 @@
   return nCount;
 }
 
-FX_STRSIZE CFX_ByteString::Replace(const CFX_ByteStringC& pOld,
-                                   const CFX_ByteStringC& pNew) {
+FX_STRSIZE ByteString::Replace(const ByteStringView& pOld,
+                               const ByteStringView& pNew) {
   if (!m_pData || pOld.IsEmpty())
     return 0;
 
@@ -658,20 +654,20 @@
   return nCount;
 }
 
-CFX_WideString CFX_ByteString::UTF8Decode() const {
+WideString ByteString::UTF8Decode() const {
   CFX_UTF8Decoder decoder;
   for (FX_STRSIZE i = 0; i < GetLength(); i++) {
     decoder.Input(static_cast<uint8_t>(m_pData->m_String[i]));
   }
-  return CFX_WideString(decoder.GetResult());
+  return WideString(decoder.GetResult());
 }
 
 // static
-CFX_ByteString CFX_ByteString::FromUnicode(const CFX_WideString& str) {
-  return GetByteString(0, str.AsStringC());
+ByteString ByteString::FromUnicode(const WideString& str) {
+  return GetByteString(0, str.AsStringView());
 }
 
-int CFX_ByteString::Compare(const CFX_ByteStringC& str) const {
+int ByteString::Compare(const ByteStringView& str) const {
   if (!m_pData) {
     return str.IsEmpty() ? 0 : -1;
   }
@@ -695,7 +691,7 @@
   return 0;
 }
 
-void CFX_ByteString::TrimRight(const CFX_ByteStringC& pTargets) {
+void ByteString::TrimRight(const ByteStringView& pTargets) {
   if (!m_pData || pTargets.IsEmpty())
     return;
 
@@ -721,15 +717,15 @@
   }
 }
 
-void CFX_ByteString::TrimRight(char chTarget) {
-  TrimRight(CFX_ByteStringC(chTarget));
+void ByteString::TrimRight(char chTarget) {
+  TrimRight(ByteStringView(chTarget));
 }
 
-void CFX_ByteString::TrimRight() {
+void ByteString::TrimRight() {
   TrimRight("\x09\x0a\x0b\x0c\x0d\x20");
 }
 
-void CFX_ByteString::TrimLeft(const CFX_ByteStringC& pTargets) {
+void ByteString::TrimLeft(const ByteStringView& pTargets) {
   if (!m_pData || pTargets.IsEmpty())
     return;
 
@@ -757,24 +753,26 @@
   }
 }
 
-void CFX_ByteString::TrimLeft(char chTarget) {
-  TrimLeft(CFX_ByteStringC(chTarget));
+void ByteString::TrimLeft(char chTarget) {
+  TrimLeft(ByteStringView(chTarget));
 }
 
-void CFX_ByteString::TrimLeft() {
+void ByteString::TrimLeft() {
   TrimLeft("\x09\x0a\x0b\x0c\x0d\x20");
 }
 
-CFX_ByteString CFX_ByteString::FormatFloat(float d, int precision) {
+ByteString ByteString::FormatFloat(float d, int precision) {
   char buf[32];
   FX_STRSIZE len = FX_ftoa(d, buf);
-  return CFX_ByteString(buf, len);
+  return ByteString(buf, len);
 }
 
-std::ostream& operator<<(std::ostream& os, const CFX_ByteString& str) {
+std::ostream& operator<<(std::ostream& os, const ByteString& str) {
   return os.write(str.c_str(), str.GetLength());
 }
 
-std::ostream& operator<<(std::ostream& os, const CFX_ByteStringC& str) {
+std::ostream& operator<<(std::ostream& os, const ByteStringView& str) {
   return os.write(str.unterminated_c_str(), str.GetLength());
 }
+
+}  // namespace fxcrt
diff --git a/core/fxcrt/bytestring.h b/core/fxcrt/bytestring.h
new file mode 100644
index 0000000..0220e70
--- /dev/null
+++ b/core/fxcrt/bytestring.h
@@ -0,0 +1,279 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef CORE_FXCRT_BYTESTRING_H_
+#define CORE_FXCRT_BYTESTRING_H_
+
+#include <functional>
+#include <iterator>
+#include <sstream>
+#include <utility>
+
+#include "core/fxcrt/cfx_retain_ptr.h"
+#include "core/fxcrt/cfx_string_data_template.h"
+#include "core/fxcrt/fx_system.h"
+#include "core/fxcrt/string_view_template.h"
+#include "third_party/base/optional.h"
+
+class ByteString_Concat_Test;
+class fxcrt_ByteStringPool_Test;
+
+namespace fxcrt {
+
+class WideString;
+
+// A mutable string with shared buffers using copy-on-write semantics that
+// avoids the cost of std::string's iterator stability guarantees.
+class ByteString {
+ public:
+  using CharType = char;
+  using const_iterator = const CharType*;
+  using const_reverse_iterator = std::reverse_iterator<const_iterator>;
+
+  ByteString();
+  ByteString(const ByteString& other);
+  ByteString(ByteString&& other) noexcept;
+
+  // Deliberately implicit to avoid calling on every string literal.
+  // NOLINTNEXTLINE(runtime/explicit)
+  ByteString(char ch);
+  // NOLINTNEXTLINE(runtime/explicit)
+  ByteString(const char* ptr);
+
+  // No implicit conversions from wide strings.
+  // NOLINTNEXTLINE(runtime/explicit)
+  ByteString(wchar_t) = delete;
+
+  ByteString(const char* ptr, FX_STRSIZE len);
+  ByteString(const uint8_t* ptr, FX_STRSIZE len);
+
+  explicit ByteString(const ByteStringView& bstrc);
+  ByteString(const ByteStringView& bstrc1, const ByteStringView& bstrc2);
+  ByteString(const std::initializer_list<ByteStringView>& list);
+  explicit ByteString(const std::ostringstream& outStream);
+
+  ~ByteString();
+
+  void clear() { m_pData.Reset(); }
+
+  static ByteString FromUnicode(const WideString& str);
+
+  // Explicit conversion to C-style string.
+  // Note: Any subsequent modification of |this| will invalidate the result.
+  const char* c_str() const { return m_pData ? m_pData->m_String : ""; }
+
+  // Explicit conversion to uint8_t*.
+  // Note: Any subsequent modification of |this| will invalidate the result.
+  const uint8_t* raw_str() const {
+    return m_pData ? reinterpret_cast<const uint8_t*>(m_pData->m_String)
+                   : nullptr;
+  }
+
+  // Explicit conversion to ByteStringView.
+  // Note: Any subsequent modification of |this| will invalidate the result.
+  ByteStringView AsStringView() const {
+    return ByteStringView(raw_str(), GetLength());
+  }
+
+  // Note: Any subsequent modification of |this| will invalidate iterators.
+  const_iterator begin() const { return m_pData ? m_pData->m_String : nullptr; }
+  const_iterator end() const {
+    return m_pData ? m_pData->m_String + m_pData->m_nDataLength : nullptr;
+  }
+
+  // Note: Any subsequent modification of |this| will invalidate iterators.
+  const_reverse_iterator rbegin() const {
+    return const_reverse_iterator(end());
+  }
+  const_reverse_iterator rend() const {
+    return const_reverse_iterator(begin());
+  }
+
+  FX_STRSIZE GetLength() const { return m_pData ? m_pData->m_nDataLength : 0; }
+  FX_STRSIZE GetStringLength() const {
+    return m_pData ? FXSYS_strlen(m_pData->m_String) : 0;
+  }
+  bool IsEmpty() const { return !GetLength(); }
+  bool IsValidIndex(FX_STRSIZE index) const { return index < GetLength(); }
+  bool IsValidLength(FX_STRSIZE length) const { return length <= GetLength(); }
+
+  int Compare(const ByteStringView& str) const;
+  bool EqualNoCase(const ByteStringView& str) const;
+
+  bool operator==(const char* ptr) const;
+  bool operator==(const ByteStringView& str) const;
+  bool operator==(const ByteString& other) const;
+
+  bool operator!=(const char* ptr) const { return !(*this == ptr); }
+  bool operator!=(const ByteStringView& str) const { return !(*this == str); }
+  bool operator!=(const ByteString& other) const { return !(*this == other); }
+
+  bool operator<(const ByteString& str) const;
+
+  const ByteString& operator=(const char* str);
+  const ByteString& operator=(const ByteStringView& bstrc);
+  const ByteString& operator=(const ByteString& stringSrc);
+
+  const ByteString& operator+=(char ch);
+  const ByteString& operator+=(const char* str);
+  const ByteString& operator+=(const ByteString& str);
+  const ByteString& operator+=(const ByteStringView& bstrc);
+
+  CharType operator[](const FX_STRSIZE index) const {
+    ASSERT(IsValidIndex(index));
+    return m_pData ? m_pData->m_String[index] : 0;
+  }
+
+  CharType First() const { return GetLength() ? (*this)[0] : 0; }
+  CharType Last() const { return GetLength() ? (*this)[GetLength() - 1] : 0; }
+
+  void SetAt(FX_STRSIZE index, char c);
+
+  FX_STRSIZE Insert(FX_STRSIZE index, char ch);
+  FX_STRSIZE InsertAtFront(char ch) { return Insert(0, ch); }
+  FX_STRSIZE InsertAtBack(char ch) { return Insert(GetLength(), ch); }
+  FX_STRSIZE Delete(FX_STRSIZE index, FX_STRSIZE count = 1);
+
+  void Format(const char* lpszFormat, ...);
+  void FormatV(const char* lpszFormat, va_list argList);
+
+  void Reserve(FX_STRSIZE len);
+  char* GetBuffer(FX_STRSIZE len);
+  void ReleaseBuffer(FX_STRSIZE len);
+
+  ByteString Mid(FX_STRSIZE first, FX_STRSIZE count) const;
+  ByteString Left(FX_STRSIZE count) const;
+  ByteString Right(FX_STRSIZE count) const;
+
+  pdfium::Optional<FX_STRSIZE> Find(const ByteStringView& lpszSub,
+                                    FX_STRSIZE start = 0) const;
+  pdfium::Optional<FX_STRSIZE> Find(char ch, FX_STRSIZE start = 0) const;
+  pdfium::Optional<FX_STRSIZE> ReverseFind(char ch) const;
+
+  bool Contains(const ByteStringView& lpszSub, FX_STRSIZE start = 0) const {
+    return Find(lpszSub, start).has_value();
+  }
+
+  bool Contains(char ch, FX_STRSIZE start = 0) const {
+    return Find(ch, start).has_value();
+  }
+
+  void MakeLower();
+  void MakeUpper();
+
+  void TrimRight();
+  void TrimRight(char chTarget);
+  void TrimRight(const ByteStringView& lpszTargets);
+
+  void TrimLeft();
+  void TrimLeft(char chTarget);
+  void TrimLeft(const ByteStringView& lpszTargets);
+
+  FX_STRSIZE Replace(const ByteStringView& lpszOld,
+                     const ByteStringView& lpszNew);
+
+  FX_STRSIZE Remove(char ch);
+
+  WideString UTF8Decode() const;
+
+  uint32_t GetID() const { return AsStringView().GetID(); }
+
+  static ByteString FormatInteger(int i);
+  static ByteString FormatFloat(float f, int precision = 0);
+
+ protected:
+  using StringData = CFX_StringDataTemplate<char>;
+
+  void ReallocBeforeWrite(FX_STRSIZE nNewLen);
+  void AllocBeforeWrite(FX_STRSIZE nNewLen);
+  void AllocCopy(ByteString& dest,
+                 FX_STRSIZE nCopyLen,
+                 FX_STRSIZE nCopyIndex) const;
+  void AssignCopy(const char* pSrcData, FX_STRSIZE nSrcLen);
+  void Concat(const char* lpszSrcData, FX_STRSIZE nSrcLen);
+
+  CFX_RetainPtr<StringData> m_pData;
+
+  friend ByteString_Concat_Test;
+  friend fxcrt_ByteStringPool_Test;
+};
+
+inline bool operator==(const char* lhs, const ByteString& rhs) {
+  return rhs == lhs;
+}
+inline bool operator==(const ByteStringView& lhs, const ByteString& rhs) {
+  return rhs == lhs;
+}
+inline bool operator!=(const char* lhs, const ByteString& rhs) {
+  return rhs != lhs;
+}
+inline bool operator!=(const ByteStringView& lhs, const ByteString& rhs) {
+  return rhs != lhs;
+}
+
+inline ByteString operator+(const ByteStringView& str1,
+                            const ByteStringView& str2) {
+  return ByteString(str1, str2);
+}
+inline ByteString operator+(const ByteStringView& str1, const char* str2) {
+  return ByteString(str1, str2);
+}
+inline ByteString operator+(const char* str1, const ByteStringView& str2) {
+  return ByteString(str1, str2);
+}
+inline ByteString operator+(const ByteStringView& str1, char ch) {
+  return ByteString(str1, ByteStringView(ch));
+}
+inline ByteString operator+(char ch, const ByteStringView& str2) {
+  return ByteString(ch, str2);
+}
+inline ByteString operator+(const ByteString& str1, const ByteString& str2) {
+  return ByteString(str1.AsStringView(), str2.AsStringView());
+}
+inline ByteString operator+(const ByteString& str1, char ch) {
+  return ByteString(str1.AsStringView(), ByteStringView(ch));
+}
+inline ByteString operator+(char ch, const ByteString& str2) {
+  return ByteString(ch, str2.AsStringView());
+}
+inline ByteString operator+(const ByteString& str1, const char* str2) {
+  return ByteString(str1.AsStringView(), str2);
+}
+inline ByteString operator+(const char* str1, const ByteString& str2) {
+  return ByteString(str1, str2.AsStringView());
+}
+inline ByteString operator+(const ByteString& str1,
+                            const ByteStringView& str2) {
+  return ByteString(str1.AsStringView(), str2);
+}
+inline ByteString operator+(const ByteStringView& str1,
+                            const ByteString& str2) {
+  return ByteString(str1, str2.AsStringView());
+}
+
+std::ostream& operator<<(std::ostream& os, const ByteString& str);
+std::ostream& operator<<(std::ostream& os, const ByteStringView& str);
+
+}  // namespace fxcrt
+
+using ByteString = fxcrt::ByteString;
+
+uint32_t FX_HashCode_GetA(const ByteStringView& str, bool bIgnoreCase);
+
+namespace std {
+
+template <>
+struct hash<ByteString> {
+  std::size_t operator()(const ByteString& str) const {
+    return FX_HashCode_GetA(str.AsStringView(), false);
+  }
+};
+
+}  // namespace std
+
+extern template struct std::hash<ByteString>;
+
+#endif  // CORE_FXCRT_BYTESTRING_H_
diff --git a/core/fxcrt/cfx_bytestring_unittest.cpp b/core/fxcrt/bytestring_unittest.cpp
similarity index 77%
rename from core/fxcrt/cfx_bytestring_unittest.cpp
rename to core/fxcrt/bytestring_unittest.cpp
index 6bbe305..06ba1f4 100644
--- a/core/fxcrt/cfx_bytestring_unittest.cpp
+++ b/core/fxcrt/bytestring_unittest.cpp
@@ -2,17 +2,17 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "core/fxcrt/cfx_bytestring.h"
-#include "core/fxcrt/fx_string.h"
+#include "core/fxcrt/bytestring.h"
 
 #include <algorithm>
 #include <vector>
 
+#include "core/fxcrt/fx_string.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "third_party/base/stl_util.h"
 
-TEST(fxcrt, ByteStringElementAccess) {
-  const CFX_ByteString abc("abc");
+TEST(ByteString, ElementAccess) {
+  const ByteString abc("abc");
   EXPECT_EQ('a', abc[0]);
   EXPECT_EQ('b', abc[1]);
   EXPECT_EQ('c', abc[2]);
@@ -20,7 +20,7 @@
   EXPECT_DEATH({ abc[3]; }, ".*");
 #endif
 
-  CFX_ByteString mutable_abc = abc;
+  ByteString mutable_abc = abc;
   EXPECT_EQ(abc.c_str(), mutable_abc.c_str());
   EXPECT_EQ('a', mutable_abc[0]);
   EXPECT_EQ('b', mutable_abc[1]);
@@ -48,11 +48,11 @@
 #endif
 }
 
-TEST(fxcrt, ByteStringOperatorLT) {
-  CFX_ByteString empty;
-  CFX_ByteString a("a");
-  CFX_ByteString abc("abc");
-  CFX_ByteString def("def");
+TEST(ByteString, OperatorLT) {
+  ByteString empty;
+  ByteString a("a");
+  ByteString abc("abc");
+  ByteString def("def");
 
   EXPECT_FALSE(empty < empty);
   EXPECT_FALSE(a < a);
@@ -78,16 +78,16 @@
   EXPECT_FALSE(def < abc);
 }
 
-TEST(fxcrt, ByteStringOperatorEQ) {
-  CFX_ByteString null_string;
+TEST(ByteString, OperatorEQ) {
+  ByteString null_string;
   EXPECT_TRUE(null_string == null_string);
 
-  CFX_ByteString empty_string("");
+  ByteString empty_string("");
   EXPECT_TRUE(empty_string == empty_string);
   EXPECT_TRUE(empty_string == null_string);
   EXPECT_TRUE(null_string == empty_string);
 
-  CFX_ByteString deleted_string("hello");
+  ByteString deleted_string("hello");
   deleted_string.Delete(0, 5);
   EXPECT_TRUE(deleted_string == deleted_string);
   EXPECT_TRUE(deleted_string == null_string);
@@ -95,7 +95,7 @@
   EXPECT_TRUE(null_string == deleted_string);
   EXPECT_TRUE(empty_string == deleted_string);
 
-  CFX_ByteString byte_string("hello");
+  ByteString byte_string("hello");
   EXPECT_TRUE(byte_string == byte_string);
   EXPECT_FALSE(byte_string == null_string);
   EXPECT_FALSE(byte_string == empty_string);
@@ -104,17 +104,17 @@
   EXPECT_FALSE(empty_string == byte_string);
   EXPECT_FALSE(deleted_string == byte_string);
 
-  CFX_ByteString byte_string_same1("hello");
+  ByteString byte_string_same1("hello");
   EXPECT_TRUE(byte_string == byte_string_same1);
   EXPECT_TRUE(byte_string_same1 == byte_string);
 
-  CFX_ByteString byte_string_same2(byte_string);
+  ByteString byte_string_same2(byte_string);
   EXPECT_TRUE(byte_string == byte_string_same2);
   EXPECT_TRUE(byte_string_same2 == byte_string);
 
-  CFX_ByteString byte_string1("he");
-  CFX_ByteString byte_string2("hellp");
-  CFX_ByteString byte_string3("hellod");
+  ByteString byte_string1("he");
+  ByteString byte_string2("hellp");
+  ByteString byte_string3("hellod");
   EXPECT_FALSE(byte_string == byte_string1);
   EXPECT_FALSE(byte_string == byte_string2);
   EXPECT_FALSE(byte_string == byte_string3);
@@ -122,8 +122,8 @@
   EXPECT_FALSE(byte_string2 == byte_string);
   EXPECT_FALSE(byte_string3 == byte_string);
 
-  CFX_ByteStringC null_string_c;
-  CFX_ByteStringC empty_string_c("");
+  ByteStringView null_string_c;
+  ByteStringView empty_string_c("");
   EXPECT_TRUE(null_string == null_string_c);
   EXPECT_TRUE(null_string == empty_string_c);
   EXPECT_TRUE(empty_string == null_string_c);
@@ -137,13 +137,13 @@
   EXPECT_TRUE(null_string_c == deleted_string);
   EXPECT_TRUE(empty_string_c == deleted_string);
 
-  CFX_ByteStringC byte_string_c_same1("hello");
+  ByteStringView byte_string_c_same1("hello");
   EXPECT_TRUE(byte_string == byte_string_c_same1);
   EXPECT_TRUE(byte_string_c_same1 == byte_string);
 
-  CFX_ByteStringC byte_string_c1("he");
-  CFX_ByteStringC byte_string_c2("hellp");
-  CFX_ByteStringC byte_string_c3("hellod");
+  ByteStringView byte_string_c1("he");
+  ByteStringView byte_string_c2("hellp");
+  ByteStringView byte_string_c3("hellod");
   EXPECT_FALSE(byte_string == byte_string_c1);
   EXPECT_FALSE(byte_string == byte_string_c2);
   EXPECT_FALSE(byte_string == byte_string_c3);
@@ -181,16 +181,16 @@
   EXPECT_FALSE(c_string3 == byte_string);
 }
 
-TEST(fxcrt, ByteStringOperatorNE) {
-  CFX_ByteString null_string;
+TEST(ByteString, OperatorNE) {
+  ByteString null_string;
   EXPECT_FALSE(null_string != null_string);
 
-  CFX_ByteString empty_string("");
+  ByteString empty_string("");
   EXPECT_FALSE(empty_string != empty_string);
   EXPECT_FALSE(empty_string != null_string);
   EXPECT_FALSE(null_string != empty_string);
 
-  CFX_ByteString deleted_string("hello");
+  ByteString deleted_string("hello");
   deleted_string.Delete(0, 5);
   EXPECT_FALSE(deleted_string != deleted_string);
   EXPECT_FALSE(deleted_string != null_string);
@@ -200,7 +200,7 @@
   EXPECT_FALSE(empty_string != deleted_string);
   EXPECT_FALSE(deleted_string != deleted_string);
 
-  CFX_ByteString byte_string("hello");
+  ByteString byte_string("hello");
   EXPECT_FALSE(byte_string != byte_string);
   EXPECT_TRUE(byte_string != null_string);
   EXPECT_TRUE(byte_string != empty_string);
@@ -209,17 +209,17 @@
   EXPECT_TRUE(empty_string != byte_string);
   EXPECT_TRUE(deleted_string != byte_string);
 
-  CFX_ByteString byte_string_same1("hello");
+  ByteString byte_string_same1("hello");
   EXPECT_FALSE(byte_string != byte_string_same1);
   EXPECT_FALSE(byte_string_same1 != byte_string);
 
-  CFX_ByteString byte_string_same2(byte_string);
+  ByteString byte_string_same2(byte_string);
   EXPECT_FALSE(byte_string != byte_string_same2);
   EXPECT_FALSE(byte_string_same2 != byte_string);
 
-  CFX_ByteString byte_string1("he");
-  CFX_ByteString byte_string2("hellp");
-  CFX_ByteString byte_string3("hellod");
+  ByteString byte_string1("he");
+  ByteString byte_string2("hellp");
+  ByteString byte_string3("hellod");
   EXPECT_TRUE(byte_string != byte_string1);
   EXPECT_TRUE(byte_string != byte_string2);
   EXPECT_TRUE(byte_string != byte_string3);
@@ -227,8 +227,8 @@
   EXPECT_TRUE(byte_string2 != byte_string);
   EXPECT_TRUE(byte_string3 != byte_string);
 
-  CFX_ByteStringC null_string_c;
-  CFX_ByteStringC empty_string_c("");
+  ByteStringView null_string_c;
+  ByteStringView empty_string_c("");
   EXPECT_FALSE(null_string != null_string_c);
   EXPECT_FALSE(null_string != empty_string_c);
   EXPECT_FALSE(empty_string != null_string_c);
@@ -238,13 +238,13 @@
   EXPECT_FALSE(null_string_c != empty_string);
   EXPECT_FALSE(empty_string_c != empty_string);
 
-  CFX_ByteStringC byte_string_c_same1("hello");
+  ByteStringView byte_string_c_same1("hello");
   EXPECT_FALSE(byte_string != byte_string_c_same1);
   EXPECT_FALSE(byte_string_c_same1 != byte_string);
 
-  CFX_ByteStringC byte_string_c1("he");
-  CFX_ByteStringC byte_string_c2("hellp");
-  CFX_ByteStringC byte_string_c3("hellod");
+  ByteStringView byte_string_c1("he");
+  ByteStringView byte_string_c2("hellp");
+  ByteStringView byte_string_c3("hellod");
   EXPECT_TRUE(byte_string != byte_string_c1);
   EXPECT_TRUE(byte_string != byte_string_c2);
   EXPECT_TRUE(byte_string != byte_string_c3);
@@ -282,47 +282,47 @@
   EXPECT_TRUE(c_string3 != byte_string);
 }
 
-TEST(fxcrt, ByteStringCNull) {
-  CFX_ByteStringC null_string;
+TEST(ByteStringView, Null) {
+  ByteStringView null_string;
   EXPECT_FALSE(null_string.raw_str());
   EXPECT_EQ(0u, null_string.GetLength());
   EXPECT_TRUE(null_string.IsEmpty());
 
-  CFX_ByteStringC another_null_string;
+  ByteStringView another_null_string;
   EXPECT_EQ(null_string, another_null_string);
 
-  CFX_ByteStringC copied_null_string(null_string);
+  ByteStringView copied_null_string(null_string);
   EXPECT_FALSE(copied_null_string.raw_str());
   EXPECT_EQ(0u, copied_null_string.GetLength());
   EXPECT_TRUE(copied_null_string.IsEmpty());
   EXPECT_EQ(null_string, copied_null_string);
 
-  CFX_ByteStringC empty_string("");  // Pointer to NUL, not NULL pointer.
+  ByteStringView empty_string("");  // Pointer to NUL, not NULL pointer.
   EXPECT_TRUE(empty_string.raw_str());
   EXPECT_EQ(0u, empty_string.GetLength());
   EXPECT_TRUE(empty_string.IsEmpty());
   EXPECT_EQ(null_string, empty_string);
 
-  CFX_ByteStringC assigned_null_string("initially not nullptr");
+  ByteStringView assigned_null_string("initially not nullptr");
   assigned_null_string = null_string;
   EXPECT_FALSE(assigned_null_string.raw_str());
   EXPECT_EQ(0u, assigned_null_string.GetLength());
   EXPECT_TRUE(assigned_null_string.IsEmpty());
   EXPECT_EQ(null_string, assigned_null_string);
 
-  CFX_ByteStringC assigned_nullptr_string("initially not nullptr");
+  ByteStringView assigned_nullptr_string("initially not nullptr");
   assigned_nullptr_string = nullptr;
   EXPECT_FALSE(assigned_nullptr_string.raw_str());
   EXPECT_EQ(0u, assigned_nullptr_string.GetLength());
   EXPECT_TRUE(assigned_nullptr_string.IsEmpty());
   EXPECT_EQ(null_string, assigned_nullptr_string);
 
-  CFX_ByteStringC non_null_string("a");
+  ByteStringView non_null_string("a");
   EXPECT_NE(null_string, non_null_string);
 }
 
-TEST(fxcrt, ByteStringConcat) {
-  CFX_ByteString fred;
+TEST(ByteString, Concat) {
+  ByteString fred;
   fred.Concat("FRED", 4);
   EXPECT_EQ("FRED", fred);
 
@@ -335,14 +335,14 @@
   fred.Concat("D", 1);
   EXPECT_EQ("FRED", fred);
 
-  CFX_ByteString copy = fred;
+  ByteString copy = fred;
   fred.Concat("DY", 2);
   EXPECT_EQ("FREDDY", fred);
   EXPECT_EQ("FRED", copy);
 }
 
-TEST(fxcrt, ByteStringRemove) {
-  CFX_ByteString freed("FREED");
+TEST(ByteString, Remove) {
+  ByteString freed("FREED");
   freed.Remove('E');
   EXPECT_EQ("FRD", freed);
   freed.Remove('F');
@@ -354,13 +354,13 @@
   freed.Remove('R');
   EXPECT_EQ("", freed);
 
-  CFX_ByteString empty;
+  ByteString empty;
   empty.Remove('X');
   EXPECT_EQ("", empty);
 }
 
-TEST(fxcrt, ByteStringRemoveCopies) {
-  CFX_ByteString freed("FREED");
+TEST(ByteString, RemoveCopies) {
+  ByteString freed("FREED");
   const char* old_buffer = freed.c_str();
 
   // No change with single reference - no copy.
@@ -374,7 +374,7 @@
   EXPECT_EQ(old_buffer, freed.c_str());
 
   // No change with multiple references - no copy.
-  CFX_ByteString shared(freed);
+  ByteString shared(freed);
   freed.Remove('Q');
   EXPECT_EQ("FRD", freed);
   EXPECT_EQ(old_buffer, freed.c_str());
@@ -388,8 +388,8 @@
   EXPECT_EQ(old_buffer, shared.c_str());
 }
 
-TEST(fxcrt, ByteStringReplace) {
-  CFX_ByteString fred("FRED");
+TEST(ByteString, Replace) {
+  ByteString fred("FRED");
   fred.Replace("FR", "BL");
   EXPECT_EQ("BLED", fred);
   fred.Replace("D", "DDY");
@@ -406,8 +406,8 @@
   EXPECT_EQ("", fred);
 }
 
-TEST(fxcrt, ByteStringInsert) {
-  CFX_ByteString fred("FRED");
+TEST(ByteString, Insert) {
+  ByteString fred("FRED");
   EXPECT_EQ(5u, fred.Insert(0, 'S'));
   EXPECT_EQ("SFRED", fred);
   EXPECT_EQ(6u, fred.Insert(1, 'T'));
@@ -419,20 +419,20 @@
   EXPECT_EQ(8u, fred.Insert(12, 'P'));
   EXPECT_EQ("STFRUEDV", fred);
   {
-    CFX_ByteString empty;
+    ByteString empty;
     EXPECT_EQ(1u, empty.Insert(0, 'X'));
     EXPECT_EQ("X", empty);
   }
   {
-    CFX_ByteString empty;
+    ByteString empty;
     EXPECT_EQ(0u, empty.Insert(5, 'X'));
     EXPECT_NE("X", empty);
   }
 }
 
-TEST(fxcrt, ByteStringInsertAtFrontAndInsertAtBack) {
+TEST(ByteString, InsertAtFrontAndInsertAtBack) {
   {
-    CFX_ByteString empty;
+    ByteString empty;
     EXPECT_EQ(1u, empty.InsertAtFront('D'));
     EXPECT_EQ("D", empty);
     EXPECT_EQ(2u, empty.InsertAtFront('E'));
@@ -443,7 +443,7 @@
     EXPECT_EQ("FRED", empty);
   }
   {
-    CFX_ByteString empty;
+    ByteString empty;
     EXPECT_EQ(1u, empty.InsertAtBack('F'));
     EXPECT_EQ("F", empty);
     EXPECT_EQ(2u, empty.InsertAtBack('R'));
@@ -454,7 +454,7 @@
     EXPECT_EQ("FRED", empty);
   }
   {
-    CFX_ByteString empty;
+    ByteString empty;
     EXPECT_EQ(1u, empty.InsertAtBack('E'));
     EXPECT_EQ("E", empty);
     EXPECT_EQ(2u, empty.InsertAtFront('R'));
@@ -466,8 +466,8 @@
   }
 }
 
-TEST(fxcrt, ByteStringDelete) {
-  CFX_ByteString fred("FRED");
+TEST(ByteString, Delete) {
+  ByteString fred("FRED");
   EXPECT_EQ(4u, fred.Delete(0, 0));
   EXPECT_EQ("FRED", fred);
   EXPECT_EQ(2u, fred.Delete(0, 2));
@@ -479,15 +479,15 @@
   EXPECT_EQ(0u, fred.Delete(0));
   EXPECT_EQ("", fred);
 
-  CFX_ByteString empty;
+  ByteString empty;
   EXPECT_EQ(0u, empty.Delete(0));
   EXPECT_EQ("", empty);
   EXPECT_EQ(0u, empty.Delete(1));
   EXPECT_EQ("", empty);
 }
 
-TEST(fxcrt, ByteStringMid) {
-  CFX_ByteString fred("FRED");
+TEST(ByteString, Mid) {
+  ByteString fred("FRED");
   EXPECT_EQ("", fred.Mid(0, 0));
   EXPECT_EQ("", fred.Mid(3, 0));
   EXPECT_EQ("FRED", fred.Mid(0, 4));
@@ -505,12 +505,12 @@
   EXPECT_EQ("RED", fred.Mid(1, 3));
   EXPECT_EQ("", fred.Mid(4, 1));
 
-  CFX_ByteString empty;
+  ByteString empty;
   EXPECT_EQ("", empty.Mid(0, 0));
 }
 
-TEST(fxcrt, ByteStringLeft) {
-  CFX_ByteString fred("FRED");
+TEST(ByteString, Left) {
+  ByteString fred("FRED");
   EXPECT_EQ("", fred.Left(0));
   EXPECT_EQ("F", fred.Left(1));
   EXPECT_EQ("FR", fred.Left(2));
@@ -519,13 +519,13 @@
 
   EXPECT_EQ("", fred.Left(5));
 
-  CFX_ByteString empty;
+  ByteString empty;
   EXPECT_EQ("", empty.Left(0));
   EXPECT_EQ("", empty.Left(1));
 }
 
-TEST(fxcrt, ByteStringRight) {
-  CFX_ByteString fred("FRED");
+TEST(ByteString, Right) {
+  ByteString fred("FRED");
   EXPECT_EQ("", fred.Right(0));
   EXPECT_EQ("D", fred.Right(1));
   EXPECT_EQ("ED", fred.Right(2));
@@ -534,29 +534,29 @@
 
   EXPECT_EQ("", fred.Right(5));
 
-  CFX_ByteString empty;
+  ByteString empty;
   EXPECT_EQ("", empty.Right(0));
   EXPECT_EQ("", empty.Right(1));
 }
 
-TEST(fxcrt, ByteStringFind) {
-  CFX_ByteString null_string;
+TEST(ByteString, Find) {
+  ByteString null_string;
   EXPECT_FALSE(null_string.Find('a').has_value());
   EXPECT_FALSE(null_string.Find('\0').has_value());
 
-  CFX_ByteString empty_string("");
+  ByteString empty_string("");
   EXPECT_FALSE(empty_string.Find('a').has_value());
   EXPECT_FALSE(empty_string.Find('\0').has_value());
 
   pdfium::Optional<FX_STRSIZE> result;
-  CFX_ByteString single_string("a");
+  ByteString single_string("a");
   result = single_string.Find('a');
   ASSERT_TRUE(result.has_value());
   EXPECT_EQ(0u, result.value());
   EXPECT_FALSE(single_string.Find('b').has_value());
   EXPECT_FALSE(single_string.Find('\0').has_value());
 
-  CFX_ByteString longer_string("abccc");
+  ByteString longer_string("abccc");
   result = longer_string.Find('a');
   ASSERT_TRUE(result.has_value());
   EXPECT_EQ(0u, result.value());
@@ -580,7 +580,7 @@
   EXPECT_EQ(3u, result.value());
   EXPECT_FALSE(longer_string.Find("d").has_value());
 
-  CFX_ByteString hibyte_string(
+  ByteString hibyte_string(
       "ab\x8c"
       "def");
   result = hibyte_string.Find('\x8c');
@@ -588,24 +588,24 @@
   EXPECT_EQ(2u, result.value());
 }
 
-TEST(fxcrt, ByteStringReverseFind) {
-  CFX_ByteString null_string;
+TEST(ByteString, ReverseFind) {
+  ByteString null_string;
   EXPECT_FALSE(null_string.ReverseFind('a').has_value());
   EXPECT_FALSE(null_string.ReverseFind('\0').has_value());
 
-  CFX_ByteString empty_string("");
+  ByteString empty_string("");
   EXPECT_FALSE(empty_string.ReverseFind('a').has_value());
   EXPECT_FALSE(empty_string.ReverseFind('\0').has_value());
 
   pdfium::Optional<FX_STRSIZE> result;
-  CFX_ByteString single_string("a");
+  ByteString single_string("a");
   result = single_string.ReverseFind('a');
   ASSERT_TRUE(result.has_value());
   EXPECT_EQ(0u, result.value());
   EXPECT_FALSE(single_string.ReverseFind('b').has_value());
   EXPECT_FALSE(single_string.ReverseFind('\0').has_value());
 
-  CFX_ByteString longer_string("abccc");
+  ByteString longer_string("abccc");
   result = longer_string.ReverseFind('a');
   ASSERT_TRUE(result.has_value());
   EXPECT_EQ(0u, result.value());
@@ -614,7 +614,7 @@
   EXPECT_EQ(4u, result.value());
   EXPECT_FALSE(longer_string.ReverseFind('\0').has_value());
 
-  CFX_ByteString hibyte_string(
+  ByteString hibyte_string(
       "ab\x8c"
       "def");
   result = hibyte_string.ReverseFind('\x8c');
@@ -622,22 +622,22 @@
   EXPECT_EQ(2u, result.value());
 }
 
-TEST(fxcrt, ByteStringUpperLower) {
-  CFX_ByteString fred("F-Re.42D");
+TEST(ByteString, UpperLower) {
+  ByteString fred("F-Re.42D");
   fred.MakeLower();
   EXPECT_EQ("f-re.42d", fred);
   fred.MakeUpper();
   EXPECT_EQ("F-RE.42D", fred);
 
-  CFX_ByteString empty;
+  ByteString empty;
   empty.MakeLower();
   EXPECT_EQ("", empty);
   empty.MakeUpper();
   EXPECT_EQ("", empty);
 }
 
-TEST(fxcrt, ByteStringTrimRight) {
-  CFX_ByteString fred("  FRED  ");
+TEST(ByteString, TrimRight) {
+  ByteString fred("  FRED  ");
   fred.TrimRight();
   EXPECT_EQ("  FRED", fred);
   fred.TrimRight('E');
@@ -647,7 +647,7 @@
   fred.TrimRight("ERP");
   EXPECT_EQ("  F", fred);
 
-  CFX_ByteString blank("   ");
+  ByteString blank("   ");
   blank.TrimRight("ERP");
   EXPECT_EQ("   ", blank);
   blank.TrimRight('E');
@@ -655,7 +655,7 @@
   blank.TrimRight();
   EXPECT_EQ("", blank);
 
-  CFX_ByteString empty;
+  ByteString empty;
   empty.TrimRight("ERP");
   EXPECT_EQ("", empty);
   empty.TrimRight('E');
@@ -664,10 +664,10 @@
   EXPECT_EQ("", empty);
 }
 
-TEST(fxcrt, ByteStringTrimRightCopies) {
+TEST(ByteString, TrimRightCopies) {
   {
     // With a single reference, no copy takes place.
-    CFX_ByteString fred("  FRED  ");
+    ByteString fred("  FRED  ");
     const char* old_buffer = fred.c_str();
     fred.TrimRight();
     EXPECT_EQ("  FRED", fred);
@@ -675,8 +675,8 @@
   }
   {
     // With multiple references, we must copy.
-    CFX_ByteString fred("  FRED  ");
-    CFX_ByteString other_fred = fred;
+    ByteString fred("  FRED  ");
+    ByteString other_fred = fred;
     const char* old_buffer = fred.c_str();
     fred.TrimRight();
     EXPECT_EQ("  FRED", fred);
@@ -685,8 +685,8 @@
   }
   {
     // With multiple references, but no modifications, no copy.
-    CFX_ByteString fred("FRED");
-    CFX_ByteString other_fred = fred;
+    ByteString fred("FRED");
+    ByteString other_fred = fred;
     const char* old_buffer = fred.c_str();
     fred.TrimRight();
     EXPECT_EQ("FRED", fred);
@@ -695,8 +695,8 @@
   }
 }
 
-TEST(fxcrt, ByteStringTrimLeft) {
-  CFX_ByteString fred("  FRED  ");
+TEST(ByteString, TrimLeft) {
+  ByteString fred("  FRED  ");
   fred.TrimLeft();
   EXPECT_EQ("FRED  ", fred);
   fred.TrimLeft('E');
@@ -706,7 +706,7 @@
   fred.TrimLeft("ERP");
   EXPECT_EQ("D  ", fred);
 
-  CFX_ByteString blank("   ");
+  ByteString blank("   ");
   blank.TrimLeft("ERP");
   EXPECT_EQ("   ", blank);
   blank.TrimLeft('E');
@@ -714,7 +714,7 @@
   blank.TrimLeft();
   EXPECT_EQ("", blank);
 
-  CFX_ByteString empty;
+  ByteString empty;
   empty.TrimLeft("ERP");
   EXPECT_EQ("", empty);
   empty.TrimLeft('E');
@@ -723,10 +723,10 @@
   EXPECT_EQ("", empty);
 }
 
-TEST(fxcrt, ByteStringTrimLeftCopies) {
+TEST(ByteString, TrimLeftCopies) {
   {
     // With a single reference, no copy takes place.
-    CFX_ByteString fred("  FRED  ");
+    ByteString fred("  FRED  ");
     const char* old_buffer = fred.c_str();
     fred.TrimLeft();
     EXPECT_EQ("FRED  ", fred);
@@ -734,8 +734,8 @@
   }
   {
     // With multiple references, we must copy.
-    CFX_ByteString fred("  FRED  ");
-    CFX_ByteString other_fred = fred;
+    ByteString fred("  FRED  ");
+    ByteString other_fred = fred;
     const char* old_buffer = fred.c_str();
     fred.TrimLeft();
     EXPECT_EQ("FRED  ", fred);
@@ -744,8 +744,8 @@
   }
   {
     // With multiple references, but no modifications, no copy.
-    CFX_ByteString fred("FRED");
-    CFX_ByteString other_fred = fred;
+    ByteString fred("FRED");
+    ByteString other_fred = fred;
     const char* old_buffer = fred.c_str();
     fred.TrimLeft();
     EXPECT_EQ("FRED", fred);
@@ -754,9 +754,9 @@
   }
 }
 
-TEST(fxcrt, ByteStringReserve) {
+TEST(ByteString, Reserve) {
   {
-    CFX_ByteString str;
+    ByteString str;
     str.Reserve(6);
     const char* old_buffer = str.c_str();
     str += "ABCDEF";
@@ -765,7 +765,7 @@
     EXPECT_NE(old_buffer, str.c_str());
   }
   {
-    CFX_ByteString str("A");
+    ByteString str("A");
     str.Reserve(6);
     const char* old_buffer = str.c_str();
     str += "BCDEF";
@@ -775,9 +775,9 @@
   }
 }
 
-TEST(fxcrt, ByteStringGetBuffer) {
+TEST(ByteString, GetBuffer) {
   {
-    CFX_ByteString str;
+    ByteString str;
     char* buffer = str.GetBuffer(12);
     // NOLINTNEXTLINE(runtime/printf)
     strcpy(buffer, "clams");
@@ -785,7 +785,7 @@
     EXPECT_EQ("clams", str);
   }
   {
-    CFX_ByteString str("cl");
+    ByteString str("cl");
     char* buffer = str.GetBuffer(12);
     // NOLINTNEXTLINE(runtime/printf)
     strcpy(buffer + 2, "ams");
@@ -794,9 +794,9 @@
   }
 }
 
-TEST(fxcrt, ByteStringReleaseBuffer) {
+TEST(ByteString, ReleaseBuffer) {
   {
-    CFX_ByteString str;
+    ByteString str;
     str.Reserve(12);
     str += "clams";
     const char* old_buffer = str.c_str();
@@ -805,7 +805,7 @@
     EXPECT_EQ("clam", str);
   }
   {
-    CFX_ByteString str("c");
+    ByteString str("c");
     str.Reserve(12);
     str += "lams";
     const char* old_buffer = str.c_str();
@@ -814,7 +814,7 @@
     EXPECT_EQ("clam", str);
   }
   {
-    CFX_ByteString str;
+    ByteString str;
     str.Reserve(200);
     str += "clams";
     const char* old_buffer = str.c_str();
@@ -823,7 +823,7 @@
     EXPECT_EQ("clam", str);
   }
   {
-    CFX_ByteString str("c");
+    ByteString str("c");
     str.Reserve(200);
     str += "lams";
     const char* old_buffer = str.c_str();
@@ -833,16 +833,16 @@
   }
 }
 
-TEST(fxcrt, ByteStringEmptyReverseIterator) {
-  CFX_ByteString empty;
+TEST(ByteString, EmptyReverseIterator) {
+  ByteString empty;
   auto iter = empty.rbegin();
   EXPECT_TRUE(iter == empty.rend());
   EXPECT_FALSE(iter != empty.rend());
   EXPECT_FALSE(iter < empty.rend());
 }
 
-TEST(fxcrt, ByteStringOneCharReverseIterator) {
-  CFX_ByteString one_str("a");
+TEST(ByteString, OneCharReverseIterator) {
+  ByteString one_str("a");
   auto iter = one_str.rbegin();
   EXPECT_FALSE(iter == one_str.rend());
   EXPECT_TRUE(iter != one_str.rend());
@@ -855,8 +855,8 @@
   EXPECT_FALSE(iter < one_str.rend());
 }
 
-TEST(fxcrt, ByteStringMultiCharReverseIterator) {
-  CFX_ByteString multi_str("abcd");
+TEST(ByteString, MultiCharReverseIterator) {
+  ByteString multi_str("abcd");
   auto iter = multi_str.rbegin();
   EXPECT_FALSE(iter == multi_str.rend());
 
@@ -900,12 +900,12 @@
   EXPECT_TRUE(iter == multi_str.rbegin());
 }
 
-TEST(fxcrt, ByteStringCNotNull) {
-  CFX_ByteStringC string3("abc");
-  CFX_ByteStringC string6("abcdef");
-  CFX_ByteStringC alternate_string3("abcdef", 3);
-  CFX_ByteStringC embedded_nul_string7("abc\0def", 7);
-  CFX_ByteStringC illegal_string7("abcdef", 7);
+TEST(ByteStringView, NotNull) {
+  ByteStringView string3("abc");
+  ByteStringView string6("abcdef");
+  ByteStringView alternate_string3("abcdef", 3);
+  ByteStringView embedded_nul_string7("abc\0def", 7);
+  ByteStringView illegal_string7("abcdef", 7);
 
   EXPECT_EQ(3u, string3.GetLength());
   EXPECT_EQ(6u, string6.GetLength());
@@ -924,18 +924,18 @@
   EXPECT_NE(alternate_string3, illegal_string7);
   EXPECT_NE(embedded_nul_string7, illegal_string7);
 
-  CFX_ByteStringC copied_string3(string3);
-  CFX_ByteStringC copied_alternate_string3(alternate_string3);
-  CFX_ByteStringC copied_embedded_nul_string7(embedded_nul_string7);
+  ByteStringView copied_string3(string3);
+  ByteStringView copied_alternate_string3(alternate_string3);
+  ByteStringView copied_embedded_nul_string7(embedded_nul_string7);
 
   EXPECT_EQ(string3, copied_string3);
   EXPECT_EQ(alternate_string3, copied_alternate_string3);
   EXPECT_EQ(embedded_nul_string7, copied_embedded_nul_string7);
 
-  CFX_ByteStringC assigned_string3("intially something else");
-  CFX_ByteStringC assigned_alternate_string3("initally something else");
-  CFX_ByteStringC assigned_ptr_string3("initially something else");
-  CFX_ByteStringC assigned_embedded_nul_string7("initially something else");
+  ByteStringView assigned_string3("intially something else");
+  ByteStringView assigned_alternate_string3("initally something else");
+  ByteStringView assigned_ptr_string3("initially something else");
+  ByteStringView assigned_embedded_nul_string7("initially something else");
 
   assigned_string3 = string3;
   assigned_alternate_string3 = alternate_string3;
@@ -947,15 +947,15 @@
   EXPECT_EQ(embedded_nul_string7, assigned_embedded_nul_string7);
 }
 
-TEST(fxcrt, ByteStringCFromChar) {
-  CFX_ByteStringC null_string;
-  CFX_ByteStringC lower_a_string("a");
+TEST(ByteStringView, FromChar) {
+  ByteStringView null_string;
+  ByteStringView lower_a_string("a");
 
   // Must have lvalues that outlive the corresponding ByteStringC.
   char nul = '\0';
   char lower_a = 'a';
-  CFX_ByteStringC nul_string_from_char(nul);
-  CFX_ByteStringC lower_a_string_from_char(lower_a);
+  ByteStringView nul_string_from_char(nul);
+  ByteStringView lower_a_string_from_char(lower_a);
 
   // Pointer to nul, not nullptr ptr, hence length 1 ...
   EXPECT_EQ(1u, nul_string_from_char.GetLength());
@@ -965,60 +965,60 @@
   EXPECT_EQ(lower_a_string, lower_a_string_from_char);
   EXPECT_NE(nul_string_from_char, lower_a_string_from_char);
 
-  CFX_ByteStringC longer_string("ab");
+  ByteStringView longer_string("ab");
   EXPECT_NE(longer_string, lower_a_string_from_char);
 }
 
-TEST(fxcrt, ByteStringCFromVector) {
+TEST(ByteStringView, FromVector) {
   std::vector<uint8_t> null_vec;
-  CFX_ByteStringC null_string(null_vec);
+  ByteStringView null_string(null_vec);
   EXPECT_EQ(0u, null_string.GetLength());
 
   std::vector<uint8_t> lower_a_vec(10, static_cast<uint8_t>('a'));
-  CFX_ByteStringC lower_a_string(lower_a_vec);
+  ByteStringView lower_a_string(lower_a_vec);
   EXPECT_EQ(static_cast<FX_STRSIZE>(10), lower_a_string.GetLength());
   EXPECT_EQ("aaaaaaaaaa", lower_a_string);
 
   std::vector<uint8_t> cleared_vec;
   cleared_vec.push_back(42);
   cleared_vec.pop_back();
-  CFX_ByteStringC cleared_string(cleared_vec);
+  ByteStringView cleared_string(cleared_vec);
   EXPECT_EQ(0u, cleared_string.GetLength());
   EXPECT_EQ(nullptr, cleared_string.raw_str());
 }
 
-TEST(fxcrt, ByteStringCGetID) {
-  CFX_ByteStringC null_string;
+TEST(ByteStringView, GetID) {
+  ByteStringView null_string;
   EXPECT_EQ(0u, null_string.GetID());
 
-  CFX_ByteStringC empty_string("");
+  ByteStringView empty_string("");
   EXPECT_EQ(0u, empty_string.GetID());
 
-  CFX_ByteStringC short_string("ab");
+  ByteStringView short_string("ab");
   EXPECT_EQ(FXBSTR_ID('a', 'b', 0, 0), short_string.GetID());
 
-  CFX_ByteStringC longer_string("abcdef");
+  ByteStringView longer_string("abcdef");
   EXPECT_EQ(FXBSTR_ID('a', 'b', 'c', 'd'), longer_string.GetID());
 }
 
-TEST(fxcrt, ByteStringCFind) {
-  CFX_ByteStringC null_string;
+TEST(ByteStringView, Find) {
+  ByteStringView null_string;
   EXPECT_FALSE(null_string.Find('a').has_value());
   EXPECT_FALSE(null_string.Find('\0').has_value());
 
-  CFX_ByteStringC empty_string("");
+  ByteStringView empty_string("");
   EXPECT_FALSE(empty_string.Find('a').has_value());
   EXPECT_FALSE(empty_string.Find('\0').has_value());
 
   pdfium::Optional<FX_STRSIZE> result;
-  CFX_ByteStringC single_string("a");
+  ByteStringView single_string("a");
   result = single_string.Find('a');
   ASSERT_TRUE(result.has_value());
   EXPECT_EQ(0u, result.value());
   EXPECT_FALSE(single_string.Find('b').has_value());
   EXPECT_FALSE(single_string.Find('\0').has_value());
 
-  CFX_ByteStringC longer_string("abccc");
+  ByteStringView longer_string("abccc");
   result = longer_string.Find('a');
   ASSERT_TRUE(result.has_value());
   EXPECT_EQ(0u, result.value());
@@ -1028,7 +1028,7 @@
   EXPECT_FALSE(longer_string.Find('d').has_value());
   EXPECT_FALSE(longer_string.Find('\0').has_value());
 
-  CFX_ByteStringC hibyte_string(
+  ByteStringView hibyte_string(
       "ab\x8c"
       "def");
   result = hibyte_string.Find('\x8c');
@@ -1036,47 +1036,47 @@
   EXPECT_EQ(2u, result.value());
 }
 
-TEST(fxcrt, ByteStringCMid) {
-  CFX_ByteStringC null_string;
+TEST(ByteStringView, Mid) {
+  ByteStringView null_string;
   EXPECT_EQ(null_string, null_string.Mid(0, 1));
   EXPECT_EQ(null_string, null_string.Mid(1, 1));
 
-  CFX_ByteStringC empty_string("");
+  ByteStringView empty_string("");
   EXPECT_EQ("", empty_string.Mid(0, 1));
   EXPECT_EQ("", empty_string.Mid(1, 1));
 
-  CFX_ByteStringC single_character("a");
+  ByteStringView single_character("a");
   EXPECT_EQ("", single_character.Mid(0, 0));
   EXPECT_EQ(single_character, single_character.Mid(0, 1));
   EXPECT_EQ("", single_character.Mid(1, 0));
   EXPECT_EQ("", single_character.Mid(1, 1));
 
-  CFX_ByteStringC longer_string("abcdef");
+  ByteStringView longer_string("abcdef");
   EXPECT_EQ(longer_string, longer_string.Mid(0, 6));
   EXPECT_EQ("", longer_string.Mid(0, 187));
 
-  CFX_ByteStringC leading_substring("ab");
+  ByteStringView leading_substring("ab");
   EXPECT_EQ(leading_substring, longer_string.Mid(0, 2));
 
-  CFX_ByteStringC middle_substring("bcde");
+  ByteStringView middle_substring("bcde");
   EXPECT_EQ(middle_substring, longer_string.Mid(1, 4));
 
-  CFX_ByteStringC trailing_substring("ef");
+  ByteStringView trailing_substring("ef");
   EXPECT_EQ(trailing_substring, longer_string.Mid(4, 2));
   EXPECT_EQ("", longer_string.Mid(4, 3));
 }
 
-TEST(fxcrt, ByteStringCTrimmedRight) {
-  CFX_ByteStringC fred("FRED");
+TEST(ByteStringView, TrimmedRight) {
+  ByteStringView fred("FRED");
   EXPECT_EQ("FRED", fred.TrimmedRight('E'));
   EXPECT_EQ("FRE", fred.TrimmedRight('D'));
-  CFX_ByteStringC fredd("FREDD");
+  ByteStringView fredd("FREDD");
   EXPECT_EQ("FRE", fred.TrimmedRight('D'));
 }
 
-TEST(fxcrt, ByteStringCElementAccess) {
-  // CFX_ByteStringC includes the NUL terminator for non-empty strings.
-  CFX_ByteStringC abc("abc");
+TEST(ByteStringView, ElementAccess) {
+  // ByteStringView includes the NUL terminator for non-empty strings.
+  ByteStringView abc("abc");
   EXPECT_EQ('a', static_cast<char>(abc[0]));
   EXPECT_EQ('b', static_cast<char>(abc[1]));
   EXPECT_EQ('c', static_cast<char>(abc[2]));
@@ -1085,11 +1085,11 @@
 #endif
 }
 
-TEST(fxcrt, ByteStringCOperatorLT) {
-  CFX_ByteStringC empty;
-  CFX_ByteStringC a("a");
-  CFX_ByteStringC abc("abc");
-  CFX_ByteStringC def("def");
+TEST(ByteStringView, OperatorLT) {
+  ByteStringView empty;
+  ByteStringView a("a");
+  ByteStringView abc("abc");
+  ByteStringView def("def");
 
   EXPECT_FALSE(empty < empty);
   EXPECT_FALSE(a < a);
@@ -1115,21 +1115,21 @@
   EXPECT_FALSE(def < abc);
 }
 
-TEST(fxcrt, ByteStringCOperatorEQ) {
-  CFX_ByteStringC byte_string_c("hello");
+TEST(ByteStringView, OperatorEQ) {
+  ByteStringView byte_string_c("hello");
   EXPECT_TRUE(byte_string_c == byte_string_c);
 
-  CFX_ByteStringC byte_string_c_same1("hello");
+  ByteStringView byte_string_c_same1("hello");
   EXPECT_TRUE(byte_string_c == byte_string_c_same1);
   EXPECT_TRUE(byte_string_c_same1 == byte_string_c);
 
-  CFX_ByteStringC byte_string_c_same2(byte_string_c);
+  ByteStringView byte_string_c_same2(byte_string_c);
   EXPECT_TRUE(byte_string_c == byte_string_c_same2);
   EXPECT_TRUE(byte_string_c_same2 == byte_string_c);
 
-  CFX_ByteStringC byte_string_c1("he");
-  CFX_ByteStringC byte_string_c2("hellp");
-  CFX_ByteStringC byte_string_c3("hellod");
+  ByteStringView byte_string_c1("he");
+  ByteStringView byte_string_c2("hellp");
+  ByteStringView byte_string_c3("hellod");
   EXPECT_FALSE(byte_string_c == byte_string_c1);
   EXPECT_FALSE(byte_string_c == byte_string_c2);
   EXPECT_FALSE(byte_string_c == byte_string_c3);
@@ -1137,13 +1137,13 @@
   EXPECT_FALSE(byte_string_c2 == byte_string_c);
   EXPECT_FALSE(byte_string_c3 == byte_string_c);
 
-  CFX_ByteString byte_string_same1("hello");
+  ByteString byte_string_same1("hello");
   EXPECT_TRUE(byte_string_c == byte_string_same1);
   EXPECT_TRUE(byte_string_same1 == byte_string_c);
 
-  CFX_ByteString byte_string1("he");
-  CFX_ByteString byte_string2("hellp");
-  CFX_ByteString byte_string3("hellod");
+  ByteString byte_string1("he");
+  ByteString byte_string2("hellp");
+  ByteString byte_string3("hellod");
   EXPECT_FALSE(byte_string_c == byte_string1);
   EXPECT_FALSE(byte_string_c == byte_string2);
   EXPECT_FALSE(byte_string_c == byte_string3);
@@ -1167,21 +1167,21 @@
   EXPECT_FALSE(c_string3 == byte_string_c);
 }
 
-TEST(fxcrt, ByteStringCOperatorNE) {
-  CFX_ByteStringC byte_string_c("hello");
+TEST(ByteStringView, OperatorNE) {
+  ByteStringView byte_string_c("hello");
   EXPECT_FALSE(byte_string_c != byte_string_c);
 
-  CFX_ByteStringC byte_string_c_same1("hello");
+  ByteStringView byte_string_c_same1("hello");
   EXPECT_FALSE(byte_string_c != byte_string_c_same1);
   EXPECT_FALSE(byte_string_c_same1 != byte_string_c);
 
-  CFX_ByteStringC byte_string_c_same2(byte_string_c);
+  ByteStringView byte_string_c_same2(byte_string_c);
   EXPECT_FALSE(byte_string_c != byte_string_c_same2);
   EXPECT_FALSE(byte_string_c_same2 != byte_string_c);
 
-  CFX_ByteStringC byte_string_c1("he");
-  CFX_ByteStringC byte_string_c2("hellp");
-  CFX_ByteStringC byte_string_c3("hellod");
+  ByteStringView byte_string_c1("he");
+  ByteStringView byte_string_c2("hellp");
+  ByteStringView byte_string_c3("hellod");
   EXPECT_TRUE(byte_string_c != byte_string_c1);
   EXPECT_TRUE(byte_string_c != byte_string_c2);
   EXPECT_TRUE(byte_string_c != byte_string_c3);
@@ -1189,13 +1189,13 @@
   EXPECT_TRUE(byte_string_c2 != byte_string_c);
   EXPECT_TRUE(byte_string_c3 != byte_string_c);
 
-  CFX_ByteString byte_string_same1("hello");
+  ByteString byte_string_same1("hello");
   EXPECT_FALSE(byte_string_c != byte_string_same1);
   EXPECT_FALSE(byte_string_same1 != byte_string_c);
 
-  CFX_ByteString byte_string1("he");
-  CFX_ByteString byte_string2("hellp");
-  CFX_ByteString byte_string3("hellod");
+  ByteString byte_string1("he");
+  ByteString byte_string2("hellp");
+  ByteString byte_string3("hellod");
   EXPECT_TRUE(byte_string_c != byte_string1);
   EXPECT_TRUE(byte_string_c != byte_string2);
   EXPECT_TRUE(byte_string_c != byte_string3);
@@ -1219,8 +1219,8 @@
   EXPECT_TRUE(c_string3 != byte_string_c);
 }
 
-TEST(fxcrt, ByteStringCNullIterator) {
-  CFX_ByteStringC null_str;
+TEST(ByteStringView, NullIterator) {
+  ByteStringView null_str;
   int32_t sum = 0;
   bool any_present = false;
   for (const auto& c : null_str) {
@@ -1231,8 +1231,8 @@
   EXPECT_EQ(0, sum);
 }
 
-TEST(fxcrt, ByteStringCEmptyIterator) {
-  CFX_ByteStringC empty_str("");
+TEST(ByteStringView, EmptyIterator) {
+  ByteStringView empty_str("");
   int32_t sum = 0;
   bool any_present = false;
   for (const auto& c : empty_str) {
@@ -1243,8 +1243,8 @@
   EXPECT_EQ(0, sum);
 }
 
-TEST(fxcrt, ByteStringCOneCharIterator) {
-  CFX_ByteStringC one_str("a");
+TEST(ByteStringView, OneCharIterator) {
+  ByteStringView one_str("a");
   int32_t sum = 0;
   bool any_present = false;
   for (const auto& c : one_str) {
@@ -1255,8 +1255,8 @@
   EXPECT_EQ('a', sum);
 }
 
-TEST(fxcrt, ByteStringCMultiCharIterator) {
-  CFX_ByteStringC one_str("abc");
+TEST(ByteStringView, MultiCharIterator) {
+  ByteStringView one_str("abc");
   int32_t sum = 0;
   bool any_present = false;
   for (const auto& c : one_str) {
@@ -1267,16 +1267,16 @@
   EXPECT_EQ('a' + 'b' + 'c', sum);
 }
 
-TEST(fxcrt, ByteStringCEmptyReverseIterator) {
-  CFX_ByteStringC empty;
+TEST(ByteStringView, EmptyReverseIterator) {
+  ByteStringView empty;
   auto iter = empty.rbegin();
   EXPECT_TRUE(iter == empty.rend());
   EXPECT_FALSE(iter != empty.rend());
   EXPECT_FALSE(iter < empty.rend());
 }
 
-TEST(fxcrt, ByteStringCOneCharReverseIterator) {
-  CFX_ByteStringC one_str("a");
+TEST(ByteStringView, OneCharReverseIterator) {
+  ByteStringView one_str("a");
   auto iter = one_str.rbegin();
   EXPECT_FALSE(iter == one_str.rend());
   EXPECT_TRUE(iter != one_str.rend());
@@ -1289,8 +1289,8 @@
   EXPECT_FALSE(iter < one_str.rend());
 }
 
-TEST(fxcrt, ByteStringCMultiCharReverseIterator) {
-  CFX_ByteStringC multi_str("abcd");
+TEST(ByteStringView, MultiCharReverseIterator) {
+  ByteStringView multi_str("abcd");
   auto iter = multi_str.rbegin();
   EXPECT_FALSE(iter == multi_str.rend());
 
@@ -1334,8 +1334,8 @@
   EXPECT_TRUE(iter == multi_str.rbegin());
 }
 
-TEST(fxcrt, ByteStringCAnyAllNoneOf) {
-  CFX_ByteStringC str("aaaaaaaaaaaaaaaaab");
+TEST(ByteStringView, AnyAllNoneOf) {
+  ByteStringView str("aaaaaaaaaaaaaaaaab");
   EXPECT_FALSE(std::all_of(str.begin(), str.end(),
                            [](const char& c) { return c == 'a'; }));
 
@@ -1350,87 +1350,87 @@
   EXPECT_FALSE(pdfium::ContainsValue(str, 'z'));
 }
 
-TEST(fxcrt, ByteStringFormatWidth) {
+TEST(ByteString, FormatWidth) {
   {
-    CFX_ByteString str;
+    ByteString str;
     str.Format("%5d", 1);
     EXPECT_EQ("    1", str);
   }
 
   {
-    CFX_ByteString str;
+    ByteString str;
     str.Format("%d", 1);
     EXPECT_EQ("1", str);
   }
 
   {
-    CFX_ByteString str;
+    ByteString str;
     str.Format("%*d", 5, 1);
     EXPECT_EQ("    1", str);
   }
 
   {
-    CFX_ByteString str;
+    ByteString str;
     str.Format("%-1d", 1);
     EXPECT_EQ("1", str);
   }
 
   {
-    CFX_ByteString str;
+    ByteString str;
     str.Format("%0d", 1);
     EXPECT_EQ("1", str);
   }
 }
 
-TEST(fxcrt, ByteStringFormatPrecision) {
+TEST(ByteString, FormatPrecision) {
   {
-    CFX_ByteString str;
+    ByteString str;
     str.Format("%.2f", 1.12345);
     EXPECT_EQ("1.12", str);
   }
 
   {
-    CFX_ByteString str;
+    ByteString str;
     str.Format("%.*f", 3, 1.12345);
     EXPECT_EQ("1.123", str);
   }
 
   {
-    CFX_ByteString str;
+    ByteString str;
     str.Format("%f", 1.12345);
     EXPECT_EQ("1.123450", str);
   }
 
   {
-    CFX_ByteString str;
+    ByteString str;
     str.Format("%-1f", 1.12345);
     EXPECT_EQ("1.123450", str);
   }
 
   {
-    CFX_ByteString str;
+    ByteString str;
     str.Format("%0f", 1.12345);
     EXPECT_EQ("1.123450", str);
   }
 }
 
-TEST(fxcrt, EmptyByteString) {
-  CFX_ByteString empty_str;
+TEST(ByteString, Empty) {
+  ByteString empty_str;
   EXPECT_TRUE(empty_str.IsEmpty());
   EXPECT_EQ(0u, empty_str.GetLength());
   const char* cstr = empty_str.c_str();
   EXPECT_EQ(0u, FXSYS_strlen(cstr));
 }
 
-TEST(fxcrt, ByteStringInitializerList) {
-  CFX_ByteString many_str({"clams", " and ", "oysters"});
+TEST(ByteString, InitializerList) {
+  ByteString many_str({"clams", " and ", "oysters"});
   EXPECT_EQ("clams and oysters", many_str);
   many_str = {"fish", " and ", "chips", " and ", "soda"};
   EXPECT_EQ("fish and chips and soda", many_str);
 }
 
-TEST(fxcrt, ByteStringNullIterator) {
-  CFX_ByteString null_str;
+TEST(ByteString, NullIterator) {
+  ByteString null_str;
   int32_t sum = 0;
   bool any_present = false;
   for (const auto& c : null_str) {
@@ -1441,8 +1441,8 @@
   EXPECT_EQ(0, sum);
 }
 
-TEST(fxcrt, ByteStringEmptyIterator) {
-  CFX_ByteString empty_str("");
+TEST(ByteString, EmptyIterator) {
+  ByteString empty_str("");
   int32_t sum = 0;
   bool any_present = false;
   for (const auto& c : empty_str) {
@@ -1453,8 +1453,8 @@
   EXPECT_EQ(0, sum);
 }
 
-TEST(fxcrt, ByteStringOneCharIterator) {
-  CFX_ByteString one_str("a");
+TEST(ByteString, OneCharIterator) {
+  ByteString one_str("a");
   int32_t sum = 0;
   bool any_present = false;
   for (const auto& c : one_str) {
@@ -1465,8 +1465,8 @@
   EXPECT_EQ('a', sum);
 }
 
-TEST(fxcrt, ByteStringMultiCharIterator) {
-  CFX_ByteString one_str("abc");
+TEST(ByteString, MultiCharIterator) {
+  ByteString one_str("abc");
   int32_t sum = 0;
   bool any_present = false;
   for (const auto& c : one_str) {
@@ -1477,8 +1477,8 @@
   EXPECT_EQ('a' + 'b' + 'c', sum);
 }
 
-TEST(fxcrt, ByteStringAnyAllNoneOf) {
-  CFX_ByteString str("aaaaaaaaaaaaaaaaab");
+TEST(ByteString, AnyAllNoneOf) {
+  ByteString str("aaaaaaaaaaaaaaaaab");
   EXPECT_FALSE(std::all_of(str.begin(), str.end(),
                            [](const char& c) { return c == 'a'; }));
 
@@ -1493,8 +1493,8 @@
   EXPECT_FALSE(pdfium::ContainsValue(str, 'z'));
 }
 
-TEST(fxcrt, EqualNoCase) {
-  CFX_ByteString str("aaa");
+TEST(CFX_BytrString, EqualNoCase) {
+  ByteString str("aaa");
   EXPECT_TRUE(str.EqualNoCase("aaa"));
   EXPECT_TRUE(str.EqualNoCase("AAA"));
   EXPECT_TRUE(str.EqualNoCase("aaA"));
@@ -1506,11 +1506,11 @@
   EXPECT_FALSE(str.EqualNoCase(""));
 }
 
-TEST(fxcrt, OStreamByteStringOverload) {
+TEST(ByteString, OStreamOverload) {
   std::ostringstream stream;
 
   // Basic case, empty string
-  CFX_ByteString str;
+  ByteString str;
   stream << str;
   EXPECT_EQ("", stream.str());
 
@@ -1520,7 +1520,7 @@
   stream << "abc" << str << "ghi";
   EXPECT_EQ("abcdefghi", stream.str());
 
-  // Changing the CFX_ByteString does not change the stream it was written to.
+  // Changing the ByteString does not change the stream it was written to.
   str = "123";
   EXPECT_EQ("abcdefghi", stream.str());
 
@@ -1531,35 +1531,35 @@
 
   char stringWithNulls[]{'x', 'y', '\0', 'z'};
 
-  // Writing a CFX_ByteString with nulls and no specified length treats it as
+  // Writing a ByteString with nulls and no specified length treats it as
   // a C-style null-terminated string.
-  str = CFX_ByteString(stringWithNulls);
+  str = ByteString(stringWithNulls);
   EXPECT_EQ(2u, str.GetLength());
   stream.str("");
   stream << str;
   EXPECT_EQ(2u, stream.tellp());
 
-  // Writing a CFX_ByteString with nulls but specifying its length treats it as
+  // Writing a ByteString with nulls but specifying its length treats it as
   // a C++-style string.
-  str = CFX_ByteString(stringWithNulls, 4);
+  str = ByteString(stringWithNulls, 4);
   EXPECT_EQ(4u, str.GetLength());
   stream.str("");
   stream << str;
   EXPECT_EQ(4u, stream.tellp());
 
   // << operators can be chained.
-  CFX_ByteString str1("abc");
-  CFX_ByteString str2("def");
+  ByteString str1("abc");
+  ByteString str2("def");
   stream.str("");
   stream << str1 << str2;
   EXPECT_EQ("abcdef", stream.str());
 }
 
-TEST(fxcrt, OStreamByteStringCOverload) {
+TEST(ByteStringView, OStreamOverload) {
   // Basic case, empty string
   {
     std::ostringstream stream;
-    CFX_ByteStringC str;
+    ByteStringView str;
     stream << str;
     EXPECT_EQ("", stream.str());
   }
@@ -1567,15 +1567,15 @@
   // Basic case, non-empty string
   {
     std::ostringstream stream;
-    CFX_ByteStringC str("def");
+    ByteStringView str("def");
     stream << "abc" << str << "ghi";
     EXPECT_EQ("abcdefghi", stream.str());
   }
 
-  // Changing the CFX_ByteStringC does not change the stream it was written to.
+  // Changing the ByteStringView does not change the stream it was written to.
   {
     std::ostringstream stream;
-    CFX_ByteStringC str("abc");
+    ByteStringView str("abc");
     stream << str;
     str = "123";
     EXPECT_EQ("abc", stream.str());
@@ -1584,7 +1584,7 @@
   // Writing it again to the stream will use the latest value.
   {
     std::ostringstream stream;
-    CFX_ByteStringC str("abc");
+    ByteStringView str("abc");
     stream << str;
     stream.str("");
     str = "123";
@@ -1592,24 +1592,24 @@
     EXPECT_EQ("123", stream.str());
   }
 
-  // Writing a CFX_ByteStringC with nulls and no specified length treats it as
+  // Writing a ByteStringView with nulls and no specified length treats it as
   // a C-style null-terminated string.
   {
     std::ostringstream stream;
     char stringWithNulls[]{'x', 'y', '\0', 'z'};
-    CFX_ByteStringC str(stringWithNulls);
+    ByteStringView str(stringWithNulls);
     EXPECT_EQ(2u, str.GetLength());
     stream << str;
     EXPECT_EQ(2u, stream.tellp());
     str = "";
   }
 
-  // Writing a CFX_ByteStringC with nulls but specifying its length treats it as
+  // Writing a ByteStringView with nulls but specifying its length treats it as
   // a C++-style string.
   {
     std::ostringstream stream;
     char stringWithNulls[]{'x', 'y', '\0', 'z'};
-    CFX_ByteStringC str(stringWithNulls, 4);
+    ByteStringView str(stringWithNulls, 4);
     EXPECT_EQ(4u, str.GetLength());
     stream << str;
     EXPECT_EQ(4u, stream.tellp());
@@ -1619,24 +1619,24 @@
   // << operators can be chained.
   {
     std::ostringstream stream;
-    CFX_ByteStringC str1("abc");
-    CFX_ByteStringC str2("def");
+    ByteStringView str1("abc");
+    ByteStringView str2("def");
     stream << str1 << str2;
     EXPECT_EQ("abcdef", stream.str());
   }
 }
 
-TEST(fxcrt, ByteStringFormatInteger) {
+TEST(ByteString, FormatInteger) {
   // Base case of 0.
-  EXPECT_EQ("0", CFX_ByteString::FormatInteger(0));
+  EXPECT_EQ("0", ByteString::FormatInteger(0));
 
   // Positive ordinary number.
-  EXPECT_EQ("123456", CFX_ByteString::FormatInteger(123456));
+  EXPECT_EQ("123456", ByteString::FormatInteger(123456));
 
   // Negative ordinary number.
-  EXPECT_EQ("-123456", CFX_ByteString::FormatInteger(-123456));
+  EXPECT_EQ("-123456", ByteString::FormatInteger(-123456));
 
   // int limits.
-  EXPECT_EQ("2147483647", CFX_ByteString::FormatInteger(INT_MAX));
-  EXPECT_EQ("-2147483648", CFX_ByteString::FormatInteger(INT_MIN));
+  EXPECT_EQ("2147483647", ByteString::FormatInteger(INT_MAX));
+  EXPECT_EQ("-2147483648", ByteString::FormatInteger(INT_MIN));
 }
diff --git a/core/fxcrt/cfx_binarybuf.h b/core/fxcrt/cfx_binarybuf.h
index 4c795ed..186d8d1 100644
--- a/core/fxcrt/cfx_binarybuf.h
+++ b/core/fxcrt/cfx_binarybuf.h
@@ -27,7 +27,7 @@
   void Clear();
   void EstimateSize(FX_STRSIZE size, FX_STRSIZE alloc_step = 0);
   void AppendBlock(const void* pBuf, FX_STRSIZE size);
-  void AppendString(const CFX_ByteString& str) {
+  void AppendString(const ByteString& str) {
     AppendBlock(str.c_str(), str.GetLength());
   }
 
diff --git a/core/fxcrt/cfx_blockbuffer.cpp b/core/fxcrt/cfx_blockbuffer.cpp
index aeef565..13134f0 100644
--- a/core/fxcrt/cfx_blockbuffer.cpp
+++ b/core/fxcrt/cfx_blockbuffer.cpp
@@ -70,19 +70,19 @@
   m_DataLength -= count;
 }
 
-CFX_WideString CFX_BlockBuffer::GetTextData(size_t start, size_t length) const {
+WideString CFX_BlockBuffer::GetTextData(size_t start, size_t length) const {
   if (m_BufferSize <= m_StartPosition + 1 || length == 0)
-    return CFX_WideString();
+    return WideString();
 
   size_t maybeDataLength = m_BufferSize - 1 - m_StartPosition;
   if (start > maybeDataLength)
-    return CFX_WideString();
+    return WideString();
   length = std::min(length, maybeDataLength);
 
-  CFX_WideString wsTextData;
+  WideString wsTextData;
   wchar_t* pBuf = wsTextData.GetBuffer(length);
   if (!pBuf)
-    return CFX_WideString();
+    return WideString();
 
   size_t startBlock = 0;
   size_t startInner = 0;
diff --git a/core/fxcrt/cfx_blockbuffer.h b/core/fxcrt/cfx_blockbuffer.h
index 8674490..423aa68 100644
--- a/core/fxcrt/cfx_blockbuffer.h
+++ b/core/fxcrt/cfx_blockbuffer.h
@@ -37,7 +37,7 @@
 
   void SetTextChar(size_t iIndex, wchar_t ch);
   void DeleteTextChars(size_t iCount);
-  CFX_WideString GetTextData(size_t iStart, size_t iLength) const;
+  WideString GetTextData(size_t iStart, size_t iLength) const;
 
  private:
   std::pair<size_t, size_t> TextDataIndex2BufIndex(const size_t iIndex) const;
diff --git a/core/fxcrt/cfx_bytestring.h b/core/fxcrt/cfx_bytestring.h
deleted file mode 100644
index b976287..0000000
--- a/core/fxcrt/cfx_bytestring.h
+++ /dev/null
@@ -1,273 +0,0 @@
-// Copyright 2017 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef CORE_FXCRT_CFX_BYTESTRING_H_
-#define CORE_FXCRT_CFX_BYTESTRING_H_
-
-#include <functional>
-#include <iterator>
-#include <sstream>
-#include <utility>
-
-#include "core/fxcrt/cfx_retain_ptr.h"
-#include "core/fxcrt/cfx_string_c_template.h"
-#include "core/fxcrt/cfx_string_data_template.h"
-#include "core/fxcrt/fx_system.h"
-#include "third_party/base/optional.h"
-
-class CFX_WideString;
-
-// A mutable string with shared buffers using copy-on-write semantics that
-// avoids the cost of std::string's iterator stability guarantees.
-class CFX_ByteString {
- public:
-  using CharType = char;
-  using const_iterator = const CharType*;
-  using const_reverse_iterator = std::reverse_iterator<const_iterator>;
-
-  CFX_ByteString();
-  CFX_ByteString(const CFX_ByteString& other);
-  CFX_ByteString(CFX_ByteString&& other) noexcept;
-
-  // Deliberately implicit to avoid calling on every string literal.
-  // NOLINTNEXTLINE(runtime/explicit)
-  CFX_ByteString(char ch);
-  // NOLINTNEXTLINE(runtime/explicit)
-  CFX_ByteString(const char* ptr);
-
-  // No implicit conversions from wide strings.
-  // NOLINTNEXTLINE(runtime/explicit)
-  CFX_ByteString(wchar_t) = delete;
-
-  CFX_ByteString(const char* ptr, FX_STRSIZE len);
-  CFX_ByteString(const uint8_t* ptr, FX_STRSIZE len);
-
-  explicit CFX_ByteString(const CFX_ByteStringC& bstrc);
-  CFX_ByteString(const CFX_ByteStringC& bstrc1, const CFX_ByteStringC& bstrc2);
-  CFX_ByteString(const std::initializer_list<CFX_ByteStringC>& list);
-  explicit CFX_ByteString(const std::ostringstream& outStream);
-
-  ~CFX_ByteString();
-
-  void clear() { m_pData.Reset(); }
-
-  static CFX_ByteString FromUnicode(const CFX_WideString& str);
-
-  // Explicit conversion to C-style string.
-  // Note: Any subsequent modification of |this| will invalidate the result.
-  const char* c_str() const { return m_pData ? m_pData->m_String : ""; }
-
-  // Explicit conversion to uint8_t*.
-  // Note: Any subsequent modification of |this| will invalidate the result.
-  const uint8_t* raw_str() const {
-    return m_pData ? reinterpret_cast<const uint8_t*>(m_pData->m_String)
-                   : nullptr;
-  }
-
-  // Explicit conversion to CFX_ByteStringC.
-  // Note: Any subsequent modification of |this| will invalidate the result.
-  CFX_ByteStringC AsStringC() const {
-    return CFX_ByteStringC(raw_str(), GetLength());
-  }
-
-  // Note: Any subsequent modification of |this| will invalidate iterators.
-  const_iterator begin() const { return m_pData ? m_pData->m_String : nullptr; }
-  const_iterator end() const {
-    return m_pData ? m_pData->m_String + m_pData->m_nDataLength : nullptr;
-  }
-
-  // Note: Any subsequent modification of |this| will invalidate iterators.
-  const_reverse_iterator rbegin() const {
-    return const_reverse_iterator(end());
-  }
-  const_reverse_iterator rend() const {
-    return const_reverse_iterator(begin());
-  }
-
-  FX_STRSIZE GetLength() const { return m_pData ? m_pData->m_nDataLength : 0; }
-  FX_STRSIZE GetStringLength() const {
-    return m_pData ? FXSYS_strlen(m_pData->m_String) : 0;
-  }
-  bool IsEmpty() const { return !GetLength(); }
-  bool IsValidIndex(FX_STRSIZE index) const { return index < GetLength(); }
-  bool IsValidLength(FX_STRSIZE length) const { return length <= GetLength(); }
-
-  int Compare(const CFX_ByteStringC& str) const;
-  bool EqualNoCase(const CFX_ByteStringC& str) const;
-
-  bool operator==(const char* ptr) const;
-  bool operator==(const CFX_ByteStringC& str) const;
-  bool operator==(const CFX_ByteString& other) const;
-
-  bool operator!=(const char* ptr) const { return !(*this == ptr); }
-  bool operator!=(const CFX_ByteStringC& str) const { return !(*this == str); }
-  bool operator!=(const CFX_ByteString& other) const {
-    return !(*this == other);
-  }
-
-  bool operator<(const CFX_ByteString& str) const;
-
-  const CFX_ByteString& operator=(const char* str);
-  const CFX_ByteString& operator=(const CFX_ByteStringC& bstrc);
-  const CFX_ByteString& operator=(const CFX_ByteString& stringSrc);
-
-  const CFX_ByteString& operator+=(char ch);
-  const CFX_ByteString& operator+=(const char* str);
-  const CFX_ByteString& operator+=(const CFX_ByteString& str);
-  const CFX_ByteString& operator+=(const CFX_ByteStringC& bstrc);
-
-  CharType operator[](const FX_STRSIZE index) const {
-    ASSERT(IsValidIndex(index));
-    return m_pData ? m_pData->m_String[index] : 0;
-  }
-
-  CharType First() const { return GetLength() ? (*this)[0] : 0; }
-  CharType Last() const { return GetLength() ? (*this)[GetLength() - 1] : 0; }
-
-  void SetAt(FX_STRSIZE index, char c);
-
-  FX_STRSIZE Insert(FX_STRSIZE index, char ch);
-  FX_STRSIZE InsertAtFront(char ch) { return Insert(0, ch); }
-  FX_STRSIZE InsertAtBack(char ch) { return Insert(GetLength(), ch); }
-  FX_STRSIZE Delete(FX_STRSIZE index, FX_STRSIZE count = 1);
-
-  void Format(const char* lpszFormat, ...);
-  void FormatV(const char* lpszFormat, va_list argList);
-
-  void Reserve(FX_STRSIZE len);
-  char* GetBuffer(FX_STRSIZE len);
-  void ReleaseBuffer(FX_STRSIZE len);
-
-  CFX_ByteString Mid(FX_STRSIZE first, FX_STRSIZE count) const;
-  CFX_ByteString Left(FX_STRSIZE count) const;
-  CFX_ByteString Right(FX_STRSIZE count) const;
-
-  pdfium::Optional<FX_STRSIZE> Find(const CFX_ByteStringC& lpszSub,
-                                    FX_STRSIZE start = 0) const;
-  pdfium::Optional<FX_STRSIZE> Find(char ch, FX_STRSIZE start = 0) const;
-  pdfium::Optional<FX_STRSIZE> ReverseFind(char ch) const;
-
-  bool Contains(const CFX_ByteStringC& lpszSub, FX_STRSIZE start = 0) const {
-    return Find(lpszSub, start).has_value();
-  }
-
-  bool Contains(char ch, FX_STRSIZE start = 0) const {
-    return Find(ch, start).has_value();
-  }
-
-  void MakeLower();
-  void MakeUpper();
-
-  void TrimRight();
-  void TrimRight(char chTarget);
-  void TrimRight(const CFX_ByteStringC& lpszTargets);
-
-  void TrimLeft();
-  void TrimLeft(char chTarget);
-  void TrimLeft(const CFX_ByteStringC& lpszTargets);
-
-  FX_STRSIZE Replace(const CFX_ByteStringC& lpszOld,
-                     const CFX_ByteStringC& lpszNew);
-
-  FX_STRSIZE Remove(char ch);
-
-  CFX_WideString UTF8Decode() const;
-
-  uint32_t GetID() const { return AsStringC().GetID(); }
-
-  static CFX_ByteString FormatInteger(int i);
-  static CFX_ByteString FormatFloat(float f, int precision = 0);
-
- protected:
-  using StringData = CFX_StringDataTemplate<char>;
-
-  void ReallocBeforeWrite(FX_STRSIZE nNewLen);
-  void AllocBeforeWrite(FX_STRSIZE nNewLen);
-  void AllocCopy(CFX_ByteString& dest,
-                 FX_STRSIZE nCopyLen,
-                 FX_STRSIZE nCopyIndex) const;
-  void AssignCopy(const char* pSrcData, FX_STRSIZE nSrcLen);
-  void Concat(const char* lpszSrcData, FX_STRSIZE nSrcLen);
-
-  CFX_RetainPtr<StringData> m_pData;
-
-  friend class fxcrt_ByteStringConcat_Test;
-  friend class fxcrt_ByteStringPool_Test;
-};
-
-inline bool operator==(const char* lhs, const CFX_ByteString& rhs) {
-  return rhs == lhs;
-}
-inline bool operator==(const CFX_ByteStringC& lhs, const CFX_ByteString& rhs) {
-  return rhs == lhs;
-}
-inline bool operator!=(const char* lhs, const CFX_ByteString& rhs) {
-  return rhs != lhs;
-}
-inline bool operator!=(const CFX_ByteStringC& lhs, const CFX_ByteString& rhs) {
-  return rhs != lhs;
-}
-
-inline CFX_ByteString operator+(const CFX_ByteStringC& str1,
-                                const CFX_ByteStringC& str2) {
-  return CFX_ByteString(str1, str2);
-}
-inline CFX_ByteString operator+(const CFX_ByteStringC& str1, const char* str2) {
-  return CFX_ByteString(str1, str2);
-}
-inline CFX_ByteString operator+(const char* str1, const CFX_ByteStringC& str2) {
-  return CFX_ByteString(str1, str2);
-}
-inline CFX_ByteString operator+(const CFX_ByteStringC& str1, char ch) {
-  return CFX_ByteString(str1, CFX_ByteStringC(ch));
-}
-inline CFX_ByteString operator+(char ch, const CFX_ByteStringC& str2) {
-  return CFX_ByteString(ch, str2);
-}
-inline CFX_ByteString operator+(const CFX_ByteString& str1,
-                                const CFX_ByteString& str2) {
-  return CFX_ByteString(str1.AsStringC(), str2.AsStringC());
-}
-inline CFX_ByteString operator+(const CFX_ByteString& str1, char ch) {
-  return CFX_ByteString(str1.AsStringC(), CFX_ByteStringC(ch));
-}
-inline CFX_ByteString operator+(char ch, const CFX_ByteString& str2) {
-  return CFX_ByteString(ch, str2.AsStringC());
-}
-inline CFX_ByteString operator+(const CFX_ByteString& str1, const char* str2) {
-  return CFX_ByteString(str1.AsStringC(), str2);
-}
-inline CFX_ByteString operator+(const char* str1, const CFX_ByteString& str2) {
-  return CFX_ByteString(str1, str2.AsStringC());
-}
-inline CFX_ByteString operator+(const CFX_ByteString& str1,
-                                const CFX_ByteStringC& str2) {
-  return CFX_ByteString(str1.AsStringC(), str2);
-}
-inline CFX_ByteString operator+(const CFX_ByteStringC& str1,
-                                const CFX_ByteString& str2) {
-  return CFX_ByteString(str1, str2.AsStringC());
-}
-
-uint32_t FX_HashCode_GetA(const CFX_ByteStringC& str, bool bIgnoreCase);
-
-std::ostream& operator<<(std::ostream& os, const CFX_ByteString& str);
-std::ostream& operator<<(std::ostream& os, const CFX_ByteStringC& str);
-
-namespace std {
-
-template <>
-struct hash<CFX_ByteString> {
-  std::size_t operator()(const CFX_ByteString& str) const {
-    return FX_HashCode_GetA(str.AsStringC(), false);
-  }
-};
-
-}  // namespace std
-
-extern template struct std::hash<CFX_ByteString>;
-
-#endif  // CORE_FXCRT_CFX_BYTESTRING_H_
diff --git a/core/fxcrt/cfx_checksumcontext.cpp b/core/fxcrt/cfx_checksumcontext.cpp
index 3114016..c75e440 100644
--- a/core/fxcrt/cfx_checksumcontext.cpp
+++ b/core/fxcrt/cfx_checksumcontext.cpp
@@ -140,11 +140,11 @@
   }
 }
 
-CFX_ByteString CFX_ChecksumContext::GetChecksum() const {
+ByteString CFX_ChecksumContext::GetChecksum() const {
   return m_bsChecksum;
 }
 
-void CFX_ChecksumContext::Update(const CFX_ByteStringC& bsText) {
+void CFX_ChecksumContext::Update(const ByteStringView& bsText) {
   if (!m_pByteContext)
     return;
 
diff --git a/core/fxcrt/cfx_checksumcontext.h b/core/fxcrt/cfx_checksumcontext.h
index 8869c54..4231e09 100644
--- a/core/fxcrt/cfx_checksumcontext.h
+++ b/core/fxcrt/cfx_checksumcontext.h
@@ -18,17 +18,17 @@
   ~CFX_ChecksumContext();
 
   void StartChecksum();
-  void Update(const CFX_ByteStringC& bsText);
+  void Update(const ByteStringView& bsText);
   bool UpdateChecksum(const CFX_RetainPtr<IFX_SeekableReadStream>& pSrcFile,
                       FX_FILESIZE offset = 0,
                       size_t size = 0);
   void FinishChecksum();
-  CFX_ByteString GetChecksum() const;
+  ByteString GetChecksum() const;
 
  private:
   std::unique_ptr<CFX_SAXReader> m_pSAXReader;
   std::unique_ptr<CRYPT_sha1_context> m_pByteContext;
-  CFX_ByteString m_bsChecksum;
+  ByteString m_bsChecksum;
 };
 
 #endif  // CORE_FXCRT_CFX_CHECKSUMCONTEXT_H_
diff --git a/core/fxcrt/cfx_crtfileaccess.cpp b/core/fxcrt/cfx_crtfileaccess.cpp
index ddca68e..2479c95 100644
--- a/core/fxcrt/cfx_crtfileaccess.cpp
+++ b/core/fxcrt/cfx_crtfileaccess.cpp
@@ -6,7 +6,7 @@
 
 #include "core/fxcrt/cfx_crtfileaccess.h"
 
-CFX_CRTFileAccess::CFX_CRTFileAccess(const CFX_WideStringC& wsPath)
+CFX_CRTFileAccess::CFX_CRTFileAccess(const WideStringView& wsPath)
     : m_path(wsPath) {}
 
 CFX_CRTFileAccess::~CFX_CRTFileAccess() {}
diff --git a/core/fxcrt/cfx_crtfileaccess.h b/core/fxcrt/cfx_crtfileaccess.h
index cb2a034..3c63aa3 100644
--- a/core/fxcrt/cfx_crtfileaccess.h
+++ b/core/fxcrt/cfx_crtfileaccess.h
@@ -19,10 +19,10 @@
   CFX_RetainPtr<IFX_SeekableStream> CreateFileStream(uint32_t dwModes);
 
  private:
-  explicit CFX_CRTFileAccess(const CFX_WideStringC& wsPath);
+  explicit CFX_CRTFileAccess(const WideStringView& wsPath);
   ~CFX_CRTFileAccess() override;
 
-  CFX_WideString m_path;
+  WideString m_path;
 };
 
 #endif  // CORE_FXCRT_CFX_CRTFILEACCESS_H_
diff --git a/core/fxcrt/cfx_decimal.cpp b/core/fxcrt/cfx_decimal.cpp
index b900e06..45980db 100644
--- a/core/fxcrt/cfx_decimal.cpp
+++ b/core/fxcrt/cfx_decimal.cpp
@@ -294,7 +294,7 @@
   m_uFlags = FXMATH_DECIMAL_MAKEFLAGS(val < 0 && IsNotZero(), scale);
 }
 
-CFX_Decimal::CFX_Decimal(const CFX_WideStringC& strObj) {
+CFX_Decimal::CFX_Decimal(const WideStringView& strObj) {
   const wchar_t* str = strObj.unterminated_c_str();
   const wchar_t* strBound = str + strObj.GetLength();
   bool pointmet = false;
@@ -329,9 +329,9 @@
   m_uFlags = FXMATH_DECIMAL_MAKEFLAGS(negmet && IsNotZero(), scale);
 }
 
-CFX_Decimal::operator CFX_WideString() const {
-  CFX_WideString retString;
-  CFX_WideString tmpbuf;
+CFX_Decimal::operator WideString() const {
+  WideString retString;
+  WideString tmpbuf;
   uint64_t phi = m_uHi;
   uint64_t pmid = m_uMid;
   uint64_t plo = m_uLo;
diff --git a/core/fxcrt/cfx_decimal.h b/core/fxcrt/cfx_decimal.h
index 5442804..de6e3de 100644
--- a/core/fxcrt/cfx_decimal.h
+++ b/core/fxcrt/cfx_decimal.h
@@ -16,9 +16,9 @@
   explicit CFX_Decimal(uint64_t val);
   explicit CFX_Decimal(int32_t val);
   CFX_Decimal(float val, uint8_t scale);
-  explicit CFX_Decimal(const CFX_WideStringC& str);
+  explicit CFX_Decimal(const WideStringView& str);
 
-  operator CFX_WideString() const;
+  operator WideString() const;
   operator double() const;
 
   CFX_Decimal operator*(const CFX_Decimal& val) const;
diff --git a/core/fxcrt/cfx_fileaccess_posix.cpp b/core/fxcrt/cfx_fileaccess_posix.cpp
index 345b664..d98e58d 100644
--- a/core/fxcrt/cfx_fileaccess_posix.cpp
+++ b/core/fxcrt/cfx_fileaccess_posix.cpp
@@ -51,7 +51,7 @@
   Close();
 }
 
-bool CFX_FileAccess_Posix::Open(const CFX_ByteStringC& fileName,
+bool CFX_FileAccess_Posix::Open(const ByteStringView& fileName,
                                 uint32_t dwMode) {
   if (m_nFD > -1)
     return false;
@@ -65,9 +65,9 @@
   return m_nFD > -1;
 }
 
-bool CFX_FileAccess_Posix::Open(const CFX_WideStringC& fileName,
+bool CFX_FileAccess_Posix::Open(const WideStringView& fileName,
                                 uint32_t dwMode) {
-  return Open(FX_UTF8Encode(fileName).AsStringC(), dwMode);
+  return Open(FX_UTF8Encode(fileName).AsStringView(), dwMode);
 }
 
 void CFX_FileAccess_Posix::Close() {
diff --git a/core/fxcrt/cfx_fileaccess_posix.h b/core/fxcrt/cfx_fileaccess_posix.h
index c299f6c..0b739e7 100644
--- a/core/fxcrt/cfx_fileaccess_posix.h
+++ b/core/fxcrt/cfx_fileaccess_posix.h
@@ -18,8 +18,8 @@
   ~CFX_FileAccess_Posix() override;
 
   // IFX_FileAccess:
-  bool Open(const CFX_ByteStringC& fileName, uint32_t dwMode) override;
-  bool Open(const CFX_WideStringC& fileName, uint32_t dwMode) override;
+  bool Open(const ByteStringView& fileName, uint32_t dwMode) override;
+  bool Open(const WideStringView& fileName, uint32_t dwMode) override;
   void Close() override;
   FX_FILESIZE GetSize() const override;
   FX_FILESIZE GetPosition() const override;
diff --git a/core/fxcrt/cfx_fileaccess_windows.cpp b/core/fxcrt/cfx_fileaccess_windows.cpp
index b39a4d6..105ad78 100644
--- a/core/fxcrt/cfx_fileaccess_windows.cpp
+++ b/core/fxcrt/cfx_fileaccess_windows.cpp
@@ -54,7 +54,7 @@
   Close();
 }
 
-bool CFX_FileAccess_Windows::Open(const CFX_ByteStringC& fileName,
+bool CFX_FileAccess_Windows::Open(const ByteStringView& fileName,
                                   uint32_t dwMode) {
   if (m_hFile)
     return false;
@@ -69,7 +69,7 @@
   return !!m_hFile;
 }
 
-bool CFX_FileAccess_Windows::Open(const CFX_WideStringC& fileName,
+bool CFX_FileAccess_Windows::Open(const WideStringView& fileName,
                                   uint32_t dwMode) {
   if (m_hFile)
     return false;
diff --git a/core/fxcrt/cfx_fileaccess_windows.h b/core/fxcrt/cfx_fileaccess_windows.h
index 692a537..f05ab39 100644
--- a/core/fxcrt/cfx_fileaccess_windows.h
+++ b/core/fxcrt/cfx_fileaccess_windows.h
@@ -16,8 +16,8 @@
   ~CFX_FileAccess_Windows() override;
 
   // IFX_FileAccess
-  bool Open(const CFX_ByteStringC& fileName, uint32_t dwMode) override;
-  bool Open(const CFX_WideStringC& fileName, uint32_t dwMode) override;
+  bool Open(const ByteStringView& fileName, uint32_t dwMode) override;
+  bool Open(const WideStringView& fileName, uint32_t dwMode) override;
   void Close() override;
   FX_FILESIZE GetSize() const override;
   FX_FILESIZE GetPosition() const override;
diff --git a/core/fxcrt/cfx_seekablestreamproxy.cpp b/core/fxcrt/cfx_seekablestreamproxy.cpp
index d3516e1..6a6c6e6 100644
--- a/core/fxcrt/cfx_seekablestreamproxy.cpp
+++ b/core/fxcrt/cfx_seekablestreamproxy.cpp
@@ -269,7 +269,7 @@
   return iMaxLength;
 }
 
-void CFX_SeekableStreamProxy::WriteString(const CFX_WideStringC& str) {
+void CFX_SeekableStreamProxy::WriteString(const WideStringView& str) {
   if (!m_IsWriteStream || str.GetLength() == 0 ||
       m_wCodePage != FX_CODEPAGE_UTF8) {
     return;
diff --git a/core/fxcrt/cfx_seekablestreamproxy.h b/core/fxcrt/cfx_seekablestreamproxy.h
index 0e427fc..fc041b4 100644
--- a/core/fxcrt/cfx_seekablestreamproxy.h
+++ b/core/fxcrt/cfx_seekablestreamproxy.h
@@ -31,7 +31,7 @@
   void Seek(From eSeek, FX_FILESIZE iOffset);
   FX_STRSIZE ReadString(wchar_t* pStr, FX_STRSIZE iMaxLength, bool* bEOS);
 
-  void WriteString(const CFX_WideStringC& str);
+  void WriteString(const WideStringView& str);
 
   uint16_t GetCodePage() const { return m_wCodePage; }
   void SetCodePage(uint16_t wCodePage);
diff --git a/core/fxcrt/cfx_string_pool_template.h b/core/fxcrt/cfx_string_pool_template.h
index bfc1ce4..b170a84 100644
--- a/core/fxcrt/cfx_string_pool_template.h
+++ b/core/fxcrt/cfx_string_pool_template.h
@@ -21,10 +21,10 @@
   std::unordered_set<StringType> m_Pool;
 };
 
-using CFX_ByteStringPool = CFX_StringPoolTemplate<CFX_ByteString>;
-using CFX_WideStringPool = CFX_StringPoolTemplate<CFX_WideString>;
+using ByteStringPool = CFX_StringPoolTemplate<ByteString>;
+using WideStringPool = CFX_StringPoolTemplate<WideString>;
 
-extern template class CFX_StringPoolTemplate<CFX_ByteString>;
-extern template class CFX_StringPoolTemplate<CFX_WideString>;
+extern template class CFX_StringPoolTemplate<ByteString>;
+extern template class CFX_StringPoolTemplate<WideString>;
 
 #endif  // CORE_FXCRT_CFX_STRING_POOL_TEMPLATE_H_
diff --git a/core/fxcrt/cfx_string_pool_template_unittest.cpp b/core/fxcrt/cfx_string_pool_template_unittest.cpp
index a4e603c..9a5ac5d 100644
--- a/core/fxcrt/cfx_string_pool_template_unittest.cpp
+++ b/core/fxcrt/cfx_string_pool_template_unittest.cpp
@@ -7,22 +7,22 @@
 #include "testing/gtest/include/gtest/gtest.h"
 
 TEST(fxcrt, ByteStringPool) {
-  CFX_ByteStringPool pool;
+  ByteStringPool pool;
 
-  CFX_ByteString null1;
-  CFX_ByteString null2;
-  CFX_ByteString goats1("goats");
-  CFX_ByteString goats2("goats");
+  ByteString null1;
+  ByteString null2;
+  ByteString goats1("goats");
+  ByteString goats2("goats");
 
   // Underlying storage, if non-null, is not shared.
   EXPECT_EQ(nullptr, null1.m_pData.Get());
   EXPECT_EQ(nullptr, null2.m_pData.Get());
   EXPECT_NE(goats1.m_pData, goats2.m_pData);
 
-  CFX_ByteString interned_null1 = pool.Intern(null1);
-  CFX_ByteString interned_null2 = pool.Intern(null2);
-  CFX_ByteString interned_goats1 = pool.Intern(goats1);
-  CFX_ByteString interned_goats2 = pool.Intern(goats2);
+  ByteString interned_null1 = pool.Intern(null1);
+  ByteString interned_null2 = pool.Intern(null2);
+  ByteString interned_goats1 = pool.Intern(goats1);
+  ByteString interned_goats2 = pool.Intern(goats2);
 
   // Strings are logically equal after being interned.
   EXPECT_EQ(null1, interned_null1);
@@ -37,10 +37,10 @@
   EXPECT_EQ(goats1.m_pData, interned_goats2.m_pData);
 
   pool.Clear();
-  CFX_ByteString reinterned_null2 = pool.Intern(null2);
-  CFX_ByteString reinterned_null1 = pool.Intern(null2);
-  CFX_ByteString reinterned_goats2 = pool.Intern(goats2);
-  CFX_ByteString reinterned_goats1 = pool.Intern(goats2);
+  ByteString reinterned_null2 = pool.Intern(null2);
+  ByteString reinterned_null1 = pool.Intern(null2);
+  ByteString reinterned_goats2 = pool.Intern(goats2);
+  ByteString reinterned_goats1 = pool.Intern(goats2);
 
   // After clearing pool, storage was re-interned using second strings.
   EXPECT_EQ(nullptr, interned_null1.m_pData.Get());
@@ -50,22 +50,22 @@
 }
 
 TEST(fxcrt, WideStringPool) {
-  CFX_WideStringPool pool;
+  WideStringPool pool;
 
-  CFX_WideString null1;
-  CFX_WideString null2;
-  CFX_WideString goats1(L"goats");
-  CFX_WideString goats2(L"goats");
+  WideString null1;
+  WideString null2;
+  WideString goats1(L"goats");
+  WideString goats2(L"goats");
 
   // Underlying storage, if non-null, is not shared.
   EXPECT_EQ(nullptr, null1.m_pData.Get());
   EXPECT_EQ(nullptr, null2.m_pData.Get());
   EXPECT_NE(goats1.m_pData, goats2.m_pData);
 
-  CFX_WideString interned_null1 = pool.Intern(null1);
-  CFX_WideString interned_null2 = pool.Intern(null2);
-  CFX_WideString interned_goats1 = pool.Intern(goats1);
-  CFX_WideString interned_goats2 = pool.Intern(goats2);
+  WideString interned_null1 = pool.Intern(null1);
+  WideString interned_null2 = pool.Intern(null2);
+  WideString interned_goats1 = pool.Intern(goats1);
+  WideString interned_goats2 = pool.Intern(goats2);
 
   // Strings are logically equal after being interned.
   EXPECT_EQ(null1, interned_null1);
@@ -80,10 +80,10 @@
   EXPECT_EQ(goats1.m_pData, interned_goats2.m_pData);
 
   pool.Clear();
-  CFX_WideString reinterned_null2 = pool.Intern(null2);
-  CFX_WideString reinterned_null1 = pool.Intern(null2);
-  CFX_WideString reinterned_goats2 = pool.Intern(goats2);
-  CFX_WideString reinterned_goats1 = pool.Intern(goats2);
+  WideString reinterned_null2 = pool.Intern(null2);
+  WideString reinterned_null1 = pool.Intern(null2);
+  WideString reinterned_goats2 = pool.Intern(goats2);
+  WideString reinterned_goats1 = pool.Intern(goats2);
 
   // After clearing pool, storage was re-interned using second strings.
   EXPECT_EQ(nullptr, interned_null1.m_pData.Get());
diff --git a/core/fxcrt/cfx_utf8decoder.h b/core/fxcrt/cfx_utf8decoder.h
index dcf5ef7..1cafbe4 100644
--- a/core/fxcrt/cfx_utf8decoder.h
+++ b/core/fxcrt/cfx_utf8decoder.h
@@ -17,7 +17,7 @@
   void Input(uint8_t byte);
   void AppendCodePoint(uint32_t ch);
   void ClearStatus() { m_PendingBytes = 0; }
-  CFX_WideStringC GetResult() const { return m_Buffer.AsStringC(); }
+  WideStringView GetResult() const { return m_Buffer.AsStringView(); }
 
  private:
   int m_PendingBytes;
diff --git a/core/fxcrt/cfx_widestring.h b/core/fxcrt/cfx_widestring.h
deleted file mode 100644
index 595615a..0000000
--- a/core/fxcrt/cfx_widestring.h
+++ /dev/null
@@ -1,276 +0,0 @@
-// Copyright 2017 PDFium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
-
-#ifndef CORE_FXCRT_CFX_WIDESTRING_H_
-#define CORE_FXCRT_CFX_WIDESTRING_H_
-
-#include <functional>
-#include <iterator>
-#include <utility>
-
-#include "core/fxcrt/cfx_retain_ptr.h"
-#include "core/fxcrt/cfx_string_c_template.h"
-#include "core/fxcrt/cfx_string_data_template.h"
-#include "core/fxcrt/fx_memory.h"
-#include "core/fxcrt/fx_system.h"
-#include "third_party/base/optional.h"
-
-class CFX_ByteString;
-
-// A mutable string with shared buffers using copy-on-write semantics that
-// avoids the cost of std::string's iterator stability guarantees.
-class CFX_WideString {
- public:
-  using CharType = wchar_t;
-  using const_iterator = const CharType*;
-  using const_reverse_iterator = std::reverse_iterator<const_iterator>;
-
-  CFX_WideString();
-  CFX_WideString(const CFX_WideString& other);
-  CFX_WideString(CFX_WideString&& other) noexcept;
-
-  // Deliberately implicit to avoid calling on every string literal.
-  // NOLINTNEXTLINE(runtime/explicit)
-  CFX_WideString(wchar_t ch);
-  // NOLINTNEXTLINE(runtime/explicit)
-  CFX_WideString(const wchar_t* ptr);
-
-  // No implicit conversions from byte strings.
-  // NOLINTNEXTLINE(runtime/explicit)
-  CFX_WideString(char) = delete;
-
-  CFX_WideString(const wchar_t* ptr, FX_STRSIZE len);
-
-  explicit CFX_WideString(const CFX_WideStringC& str);
-  CFX_WideString(const CFX_WideStringC& str1, const CFX_WideStringC& str2);
-  CFX_WideString(const std::initializer_list<CFX_WideStringC>& list);
-
-  ~CFX_WideString();
-
-  static CFX_WideString FromLocal(const CFX_ByteStringC& str);
-  static CFX_WideString FromCodePage(const CFX_ByteStringC& str,
-                                     uint16_t codepage);
-
-  static CFX_WideString FromUTF8(const CFX_ByteStringC& str);
-  static CFX_WideString FromUTF16LE(const unsigned short* str, FX_STRSIZE len);
-
-  static FX_STRSIZE WStringLength(const unsigned short* str);
-
-  // Explicit conversion to C-style wide string.
-  // Note: Any subsequent modification of |this| will invalidate the result.
-  const wchar_t* c_str() const { return m_pData ? m_pData->m_String : L""; }
-
-  // Explicit conversion to CFX_WideStringC.
-  // Note: Any subsequent modification of |this| will invalidate the result.
-  CFX_WideStringC AsStringC() const {
-    return CFX_WideStringC(c_str(), GetLength());
-  }
-
-  // Note: Any subsequent modification of |this| will invalidate iterators.
-  const_iterator begin() const { return m_pData ? m_pData->m_String : nullptr; }
-  const_iterator end() const {
-    return m_pData ? m_pData->m_String + m_pData->m_nDataLength : nullptr;
-  }
-
-  // Note: Any subsequent modification of |this| will invalidate iterators.
-  const_reverse_iterator rbegin() const {
-    return const_reverse_iterator(end());
-  }
-  const_reverse_iterator rend() const {
-    return const_reverse_iterator(begin());
-  }
-
-  void clear() { m_pData.Reset(); }
-
-  FX_STRSIZE GetLength() const { return m_pData ? m_pData->m_nDataLength : 0; }
-  FX_STRSIZE GetStringLength() const {
-    return m_pData ? FXSYS_wcslen(m_pData->m_String) : 0;
-  }
-  bool IsEmpty() const { return !GetLength(); }
-  bool IsValidIndex(FX_STRSIZE index) const { return index < GetLength(); }
-  bool IsValidLength(FX_STRSIZE length) const { return length <= GetLength(); }
-
-  const CFX_WideString& operator=(const wchar_t* str);
-  const CFX_WideString& operator=(const CFX_WideString& stringSrc);
-  const CFX_WideString& operator=(const CFX_WideStringC& stringSrc);
-
-  const CFX_WideString& operator+=(const wchar_t* str);
-  const CFX_WideString& operator+=(wchar_t ch);
-  const CFX_WideString& operator+=(const CFX_WideString& str);
-  const CFX_WideString& operator+=(const CFX_WideStringC& str);
-
-  bool operator==(const wchar_t* ptr) const;
-  bool operator==(const CFX_WideStringC& str) const;
-  bool operator==(const CFX_WideString& other) const;
-
-  bool operator!=(const wchar_t* ptr) const { return !(*this == ptr); }
-  bool operator!=(const CFX_WideStringC& str) const { return !(*this == str); }
-  bool operator!=(const CFX_WideString& other) const {
-    return !(*this == other);
-  }
-
-  bool operator<(const CFX_WideString& str) const;
-
-  CharType operator[](const FX_STRSIZE index) const {
-    ASSERT(IsValidIndex(index));
-    return m_pData ? m_pData->m_String[index] : 0;
-  }
-
-  CharType First() const { return GetLength() ? (*this)[0] : 0; }
-  CharType Last() const { return GetLength() ? (*this)[GetLength() - 1] : 0; }
-
-  void SetAt(FX_STRSIZE index, wchar_t c);
-
-  int Compare(const wchar_t* str) const;
-  int Compare(const CFX_WideString& str) const;
-  int CompareNoCase(const wchar_t* str) const;
-
-  CFX_WideString Mid(FX_STRSIZE first, FX_STRSIZE count) const;
-  CFX_WideString Left(FX_STRSIZE count) const;
-  CFX_WideString Right(FX_STRSIZE count) const;
-
-  FX_STRSIZE Insert(FX_STRSIZE index, wchar_t ch);
-  FX_STRSIZE InsertAtFront(wchar_t ch) { return Insert(0, ch); }
-  FX_STRSIZE InsertAtBack(wchar_t ch) { return Insert(GetLength(), ch); }
-  FX_STRSIZE Delete(FX_STRSIZE index, FX_STRSIZE count = 1);
-
-  void Format(const wchar_t* lpszFormat, ...);
-  void FormatV(const wchar_t* lpszFormat, va_list argList);
-
-  void MakeLower();
-  void MakeUpper();
-
-  void TrimRight();
-  void TrimRight(wchar_t chTarget);
-  void TrimRight(const CFX_WideStringC& pTargets);
-
-  void TrimLeft();
-  void TrimLeft(wchar_t chTarget);
-  void TrimLeft(const CFX_WideStringC& pTargets);
-
-  void Reserve(FX_STRSIZE len);
-  wchar_t* GetBuffer(FX_STRSIZE len);
-  void ReleaseBuffer(FX_STRSIZE len);
-
-  int GetInteger() const;
-  float GetFloat() const;
-
-  pdfium::Optional<FX_STRSIZE> Find(const CFX_WideStringC& pSub,
-                                    FX_STRSIZE start = 0) const;
-  pdfium::Optional<FX_STRSIZE> Find(wchar_t ch, FX_STRSIZE start = 0) const;
-
-  bool Contains(const CFX_WideStringC& lpszSub, FX_STRSIZE start = 0) const {
-    return Find(lpszSub, start).has_value();
-  }
-
-  bool Contains(char ch, FX_STRSIZE start = 0) const {
-    return Find(ch, start).has_value();
-  }
-
-  FX_STRSIZE Replace(const CFX_WideStringC& pOld, const CFX_WideStringC& pNew);
-  FX_STRSIZE Remove(wchar_t ch);
-
-  CFX_ByteString UTF8Encode() const;
-  CFX_ByteString UTF16LE_Encode() const;
-
- protected:
-  using StringData = CFX_StringDataTemplate<wchar_t>;
-
-  void ReallocBeforeWrite(FX_STRSIZE nLen);
-  void AllocBeforeWrite(FX_STRSIZE nLen);
-  void AllocCopy(CFX_WideString& dest,
-                 FX_STRSIZE nCopyLen,
-                 FX_STRSIZE nCopyIndex) const;
-  void AssignCopy(const wchar_t* pSrcData, FX_STRSIZE nSrcLen);
-  void Concat(const wchar_t* lpszSrcData, FX_STRSIZE nSrcLen);
-
-  // Returns true unless we ran out of space.
-  bool TryVSWPrintf(FX_STRSIZE size, const wchar_t* format, va_list argList);
-
-  CFX_RetainPtr<StringData> m_pData;
-
-  friend class fxcrt_WideStringConcatInPlace_Test;
-  friend class fxcrt_WideStringPool_Test;
-};
-
-inline CFX_WideString operator+(const CFX_WideStringC& str1,
-                                const CFX_WideStringC& str2) {
-  return CFX_WideString(str1, str2);
-}
-inline CFX_WideString operator+(const CFX_WideStringC& str1,
-                                const wchar_t* str2) {
-  return CFX_WideString(str1, str2);
-}
-inline CFX_WideString operator+(const wchar_t* str1,
-                                const CFX_WideStringC& str2) {
-  return CFX_WideString(str1, str2);
-}
-inline CFX_WideString operator+(const CFX_WideStringC& str1, wchar_t ch) {
-  return CFX_WideString(str1, CFX_WideStringC(ch));
-}
-inline CFX_WideString operator+(wchar_t ch, const CFX_WideStringC& str2) {
-  return CFX_WideString(ch, str2);
-}
-inline CFX_WideString operator+(const CFX_WideString& str1,
-                                const CFX_WideString& str2) {
-  return CFX_WideString(str1.AsStringC(), str2.AsStringC());
-}
-inline CFX_WideString operator+(const CFX_WideString& str1, wchar_t ch) {
-  return CFX_WideString(str1.AsStringC(), CFX_WideStringC(ch));
-}
-inline CFX_WideString operator+(wchar_t ch, const CFX_WideString& str2) {
-  return CFX_WideString(ch, str2.AsStringC());
-}
-inline CFX_WideString operator+(const CFX_WideString& str1,
-                                const wchar_t* str2) {
-  return CFX_WideString(str1.AsStringC(), str2);
-}
-inline CFX_WideString operator+(const wchar_t* str1,
-                                const CFX_WideString& str2) {
-  return CFX_WideString(str1, str2.AsStringC());
-}
-inline CFX_WideString operator+(const CFX_WideString& str1,
-                                const CFX_WideStringC& str2) {
-  return CFX_WideString(str1.AsStringC(), str2);
-}
-inline CFX_WideString operator+(const CFX_WideStringC& str1,
-                                const CFX_WideString& str2) {
-  return CFX_WideString(str1, str2.AsStringC());
-}
-inline bool operator==(const wchar_t* lhs, const CFX_WideString& rhs) {
-  return rhs == lhs;
-}
-inline bool operator==(const CFX_WideStringC& lhs, const CFX_WideString& rhs) {
-  return rhs == lhs;
-}
-inline bool operator!=(const wchar_t* lhs, const CFX_WideString& rhs) {
-  return rhs != lhs;
-}
-inline bool operator!=(const CFX_WideStringC& lhs, const CFX_WideString& rhs) {
-  return rhs != lhs;
-}
-
-uint32_t FX_HashCode_GetW(const CFX_WideStringC& str, bool bIgnoreCase);
-
-std::wostream& operator<<(std::wostream& os, const CFX_WideString& str);
-std::ostream& operator<<(std::ostream& os, const CFX_WideString& str);
-std::wostream& operator<<(std::wostream& os, const CFX_WideStringC& str);
-std::ostream& operator<<(std::ostream& os, const CFX_WideStringC& str);
-
-namespace std {
-
-template <>
-struct hash<CFX_WideString> {
-  std::size_t operator()(const CFX_WideString& str) const {
-    return FX_HashCode_GetW(str.AsStringC(), false);
-  }
-};
-
-}  // namespace std
-
-extern template struct std::hash<CFX_WideString>;
-
-#endif  // CORE_FXCRT_CFX_WIDESTRING_H_
diff --git a/core/fxcrt/cfx_widetextbuf.cpp b/core/fxcrt/cfx_widetextbuf.cpp
index 81b5fd4..d51e5ea 100644
--- a/core/fxcrt/cfx_widetextbuf.cpp
+++ b/core/fxcrt/cfx_widetextbuf.cpp
@@ -16,12 +16,12 @@
   m_DataSize += sizeof(wchar_t);
 }
 
-CFX_WideTextBuf& CFX_WideTextBuf::operator<<(const CFX_WideStringC& str) {
+CFX_WideTextBuf& CFX_WideTextBuf::operator<<(const WideStringView& str) {
   AppendBlock(str.unterminated_c_str(), str.GetLength() * sizeof(wchar_t));
   return *this;
 }
 
-CFX_WideTextBuf& CFX_WideTextBuf::operator<<(const CFX_WideString& str) {
+CFX_WideTextBuf& CFX_WideTextBuf::operator<<(const WideString& str) {
   AppendBlock(str.c_str(), str.GetLength() * sizeof(wchar_t));
   return *this;
 }
diff --git a/core/fxcrt/cfx_widetextbuf.h b/core/fxcrt/cfx_widetextbuf.h
index 389f2e5..77fe414 100644
--- a/core/fxcrt/cfx_widetextbuf.h
+++ b/core/fxcrt/cfx_widetextbuf.h
@@ -19,14 +19,14 @@
     return reinterpret_cast<wchar_t*>(m_pBuffer.get());
   }
 
-  CFX_WideStringC AsStringC() const {
-    return CFX_WideStringC(reinterpret_cast<const wchar_t*>(m_pBuffer.get()),
-                           m_DataSize / sizeof(wchar_t));
-  }
-  CFX_WideString MakeString() const {
-    return CFX_WideString(reinterpret_cast<const wchar_t*>(m_pBuffer.get()),
+  WideStringView AsStringView() const {
+    return WideStringView(reinterpret_cast<const wchar_t*>(m_pBuffer.get()),
                           m_DataSize / sizeof(wchar_t));
   }
+  WideString MakeString() const {
+    return WideString(reinterpret_cast<const wchar_t*>(m_pBuffer.get()),
+                      m_DataSize / sizeof(wchar_t));
+  }
 
   void Delete(int start_index, int count) {
     CFX_BinaryBuf::Delete(start_index * sizeof(wchar_t),
@@ -36,8 +36,8 @@
   CFX_WideTextBuf& operator<<(int i);
   CFX_WideTextBuf& operator<<(double f);
   CFX_WideTextBuf& operator<<(const wchar_t* lpsz);
-  CFX_WideTextBuf& operator<<(const CFX_WideStringC& str);
-  CFX_WideTextBuf& operator<<(const CFX_WideString& str);
+  CFX_WideTextBuf& operator<<(const WideStringView& str);
+  CFX_WideTextBuf& operator<<(const WideString& str);
   CFX_WideTextBuf& operator<<(const CFX_WideTextBuf& buf);
 };
 
diff --git a/core/fxcrt/css/cfx_csscomputedstyle.cpp b/core/fxcrt/css/cfx_csscomputedstyle.cpp
index 953c107..aae88a3 100644
--- a/core/fxcrt/css/cfx_csscomputedstyle.cpp
+++ b/core/fxcrt/css/cfx_csscomputedstyle.cpp
@@ -14,8 +14,8 @@
 
 CFX_CSSComputedStyle::~CFX_CSSComputedStyle() {}
 
-bool CFX_CSSComputedStyle::GetCustomStyle(const CFX_WideString& wsName,
-                                          CFX_WideString& wsValue) const {
+bool CFX_CSSComputedStyle::GetCustomStyle(const WideString& wsName,
+                                          WideString& wsValue) const {
   for (auto iter = m_CustomProperties.rbegin();
        iter != m_CustomProperties.rend(); iter++) {
     if (wsName == iter->name()) {
@@ -32,7 +32,7 @@
              : 0;
 }
 
-const CFX_WideString CFX_CSSComputedStyle::GetFontFamily(int32_t index) const {
+const WideString CFX_CSSComputedStyle::GetFontFamily(int32_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 bb4b62b..b05339a 100644
--- a/core/fxcrt/css/cfx_csscomputedstyle.h
+++ b/core/fxcrt/css/cfx_csscomputedstyle.h
@@ -56,7 +56,7 @@
   };
 
   int32_t CountFontFamilies() const;
-  const CFX_WideString GetFontFamily(int32_t index) const;
+  const WideString GetFontFamily(int32_t index) const;
   uint16_t GetFontWeight() const;
   CFX_CSSFontVariant GetFontVariant() const;
   CFX_CSSFontStyle GetFontStyle() const;
@@ -91,8 +91,7 @@
   void SetLetterSpacing(const CFX_CSSLength& letterSpacing);
   void AddCustomStyle(const CFX_CSSCustomProperty& prop);
 
-  bool GetCustomStyle(const CFX_WideString& wsName,
-                      CFX_WideString& wsValue) const;
+  bool GetCustomStyle(const WideString& wsName, WideString& wsValue) const;
 
   InheritedData m_InheritedData;
   NonInheritedData m_NonInheritedData;
diff --git a/core/fxcrt/css/cfx_csscustomproperty.cpp b/core/fxcrt/css/cfx_csscustomproperty.cpp
index 8bfb9d9..353facd 100644
--- a/core/fxcrt/css/cfx_csscustomproperty.cpp
+++ b/core/fxcrt/css/cfx_csscustomproperty.cpp
@@ -4,8 +4,8 @@
 
 #include "core/fxcrt/css/cfx_csscustomproperty.h"
 
-CFX_CSSCustomProperty::CFX_CSSCustomProperty(const CFX_WideString& name,
-                                             const CFX_WideString& value)
+CFX_CSSCustomProperty::CFX_CSSCustomProperty(const WideString& name,
+                                             const WideString& value)
     : name_(name), value_(value) {}
 
 CFX_CSSCustomProperty::CFX_CSSCustomProperty(const CFX_CSSCustomProperty& prop)
diff --git a/core/fxcrt/css/cfx_csscustomproperty.h b/core/fxcrt/css/cfx_csscustomproperty.h
index e062c3e..15c3eca 100644
--- a/core/fxcrt/css/cfx_csscustomproperty.h
+++ b/core/fxcrt/css/cfx_csscustomproperty.h
@@ -11,17 +11,16 @@
 
 class CFX_CSSCustomProperty {
  public:
-  CFX_CSSCustomProperty(const CFX_WideString& name,
-                        const CFX_WideString& value);
+  CFX_CSSCustomProperty(const WideString& name, const WideString& value);
   CFX_CSSCustomProperty(const CFX_CSSCustomProperty& prop);
   ~CFX_CSSCustomProperty();
 
-  CFX_WideString name() const { return name_; }
-  CFX_WideString value() const { return value_; }
+  WideString name() const { return name_; }
+  WideString value() const { return value_; }
 
  private:
-  CFX_WideString name_;
-  CFX_WideString value_;
+  WideString name_;
+  WideString value_;
 };
 
 #endif  // CORE_FXCRT_CSS_CFX_CSSCUSTOMPROPERTY_H_
diff --git a/core/fxcrt/css/cfx_cssdatatable.cpp b/core/fxcrt/css/cfx_cssdatatable.cpp
index 833b81b..53617b6 100644
--- a/core/fxcrt/css/cfx_cssdatatable.cpp
+++ b/core/fxcrt/css/cfx_cssdatatable.cpp
@@ -122,7 +122,7 @@
               "Property table differs in size from property enum");
 
 const CFX_CSSPropertyTable* CFX_GetCSSPropertyByName(
-    const CFX_WideStringC& wsName) {
+    const WideStringView& wsName) {
   ASSERT(!wsName.IsEmpty());
   uint32_t dwHash = FX_HashCode_GetW(wsName, true);
   int32_t iEnd = g_iCSSPropertyCount;
diff --git a/core/fxcrt/css/cfx_cssdatatable.h b/core/fxcrt/css/cfx_cssdatatable.h
index 43310c7..63c3034 100644
--- a/core/fxcrt/css/cfx_cssdatatable.h
+++ b/core/fxcrt/css/cfx_cssdatatable.h
@@ -23,7 +23,7 @@
 };
 
 const CFX_CSSPropertyTable* CFX_GetCSSPropertyByName(
-    const CFX_WideStringC& wsName);
+    const WideStringView& wsName);
 const CFX_CSSPropertyTable* CFX_GetCSSPropertyByEnum(CFX_CSSProperty eName);
 
 #endif  // CORE_FXCRT_CSS_CFX_CSSDATATABLE_H_
diff --git a/core/fxcrt/css/cfx_cssdeclaration.cpp b/core/fxcrt/css/cfx_cssdeclaration.cpp
index 344fc84..f2c7d39 100644
--- a/core/fxcrt/css/cfx_cssdeclaration.cpp
+++ b/core/fxcrt/css/cfx_cssdeclaration.cpp
@@ -113,7 +113,7 @@
 };
 
 const CFX_CSSPropertyValueTable* GetCSSPropertyValueByName(
-    const CFX_WideStringC& wsName) {
+    const WideStringView& wsName) {
   ASSERT(!wsName.IsEmpty());
   uint32_t dwHash = FX_HashCode_GetW(wsName, true);
   int32_t iEnd = g_iCSSPropertyValueCount;
@@ -134,7 +134,7 @@
 }
 
 const CFX_CSSLengthUnitTable* GetCSSLengthUnitByName(
-    const CFX_WideStringC& wsName) {
+    const WideStringView& wsName) {
   ASSERT(!wsName.IsEmpty());
   uint16_t wHash = FX_HashCode_GetW(wsName, true);
   int32_t iEnd =
@@ -155,7 +155,7 @@
   return nullptr;
 }
 
-const CFX_CSSColorTable* GetCSSColorByName(const CFX_WideStringC& wsName) {
+const CFX_CSSColorTable* GetCSSColorByName(const WideStringView& wsName) {
   ASSERT(!wsName.IsEmpty());
   uint32_t dwHash = FX_HashCode_GetW(wsName, true);
   int32_t iEnd = sizeof(g_CFX_CSSColors) / sizeof(CFX_CSSColorTable) - 1;
@@ -192,7 +192,7 @@
     eUnit = CFX_CSSNumberType::Percent;
   } else if (iValueLen == 2) {
     const CFX_CSSLengthUnitTable* pUnit =
-        GetCSSLengthUnitByName(CFX_WideStringC(pszValue, 2));
+        GetCSSLengthUnitByName(WideStringView(pszValue, 2));
     if (pUnit)
       eUnit = pUnit->wValue;
   }
@@ -273,7 +273,7 @@
   }
 
   const CFX_CSSColorTable* pColor =
-      GetCSSColorByName(CFX_WideStringC(pszValue, iValueLen));
+      GetCSSColorByName(WideStringView(pszValue, iValueLen));
   if (!pColor)
     return false;
 
@@ -308,7 +308,7 @@
 }
 
 void CFX_CSSDeclaration::AddProperty(const CFX_CSSPropertyTable* pTable,
-                                     const CFX_WideStringC& value) {
+                                     const WideStringView& value) {
   ASSERT(!value.IsEmpty());
 
   const wchar_t* pszValue = value.unterminated_c_str();
@@ -422,8 +422,8 @@
   }
 }
 
-void CFX_CSSDeclaration::AddProperty(const CFX_WideString& prop,
-                                     const CFX_WideString& value) {
+void CFX_CSSDeclaration::AddProperty(const WideString& prop,
+                                     const WideString& value) {
   custom_properties_.push_back(
       pdfium::MakeUnique<CFX_CSSCustomProperty>(prop, value));
 }
@@ -442,7 +442,7 @@
     const wchar_t* pszValue,
     int32_t iValueLen) {
   const CFX_CSSPropertyValueTable* pValue =
-      GetCSSPropertyValueByName(CFX_WideStringC(pszValue, iValueLen));
+      GetCSSPropertyValueByName(WideStringView(pszValue, iValueLen));
   return pValue ? pdfium::MakeRetain<CFX_CSSEnumValue>(pValue->eName) : nullptr;
 }
 
@@ -466,7 +466,7 @@
     return nullptr;
 
   return pdfium::MakeRetain<CFX_CSSStringValue>(
-      CFX_WideString(pszValue + iOffset, iValueLen));
+      WideString(pszValue + iOffset, iValueLen));
 }
 
 void CFX_CSSDeclaration::ParseValueListProperty(
@@ -502,7 +502,7 @@
         }
         if (dwType & CFX_CSSVALUETYPE_MaybeEnum) {
           const CFX_CSSPropertyValueTable* pValue =
-              GetCSSPropertyValueByName(CFX_WideStringC(pszValue, iValueLen));
+              GetCSSPropertyValueByName(WideStringView(pszValue, iValueLen));
           if (pValue) {
             list.push_back(pdfium::MakeRetain<CFX_CSSEnumValue>(pValue->eName));
             continue;
@@ -510,7 +510,7 @@
         }
         if (dwType & CFX_CSSVALUETYPE_MaybeString) {
           list.push_back(pdfium::MakeRetain<CFX_CSSStringValue>(
-              CFX_WideString(pszValue, iValueLen)));
+              WideString(pszValue, iValueLen)));
         }
         break;
       case CFX_CSSPrimitiveType::RGB:
@@ -614,12 +614,12 @@
       }
       case CFX_CSSPrimitiveType::String: {
         const CFX_CSSColorTable* pColorItem =
-            GetCSSColorByName(CFX_WideStringC(pszValue, iValueLen));
+            GetCSSColorByName(WideStringView(pszValue, iValueLen));
         if (pColorItem)
           continue;
 
         const CFX_CSSPropertyValueTable* pValue =
-            GetCSSPropertyValueByName(CFX_WideStringC(pszValue, iValueLen));
+            GetCSSPropertyValueByName(WideStringView(pszValue, iValueLen));
         if (!pValue)
           continue;
 
@@ -661,7 +661,7 @@
     switch (eType) {
       case CFX_CSSPrimitiveType::String: {
         const CFX_CSSPropertyValueTable* pValue =
-            GetCSSPropertyValueByName(CFX_WideStringC(pszValue, iValueLen));
+            GetCSSPropertyValueByName(WideStringView(pszValue, iValueLen));
         if (pValue) {
           switch (pValue->eName) {
             case CFX_CSSPropertyValue::XxSmall:
@@ -710,7 +710,7 @@
         }
         if (pFontSize) {
           familyList.push_back(pdfium::MakeRetain<CFX_CSSStringValue>(
-              CFX_WideString(pszValue, iValueLen)));
+              WideString(pszValue, iValueLen)));
         }
         parser.m_Separator = ',';
         break;
diff --git a/core/fxcrt/css/cfx_cssdeclaration.h b/core/fxcrt/css/cfx_cssdeclaration.h
index 7b39dae..dba1d44 100644
--- a/core/fxcrt/css/cfx_cssdeclaration.h
+++ b/core/fxcrt/css/cfx_cssdeclaration.h
@@ -48,8 +48,8 @@
   bool empty() const { return properties_.empty(); }
 
   void AddProperty(const CFX_CSSPropertyTable* pTable,
-                   const CFX_WideStringC& value);
-  void AddProperty(const CFX_WideString& prop, const CFX_WideString& value);
+                   const WideStringView& value);
+  void AddProperty(const WideString& prop, const WideString& value);
 
   size_t PropertyCountForTesting() const;
 
diff --git a/core/fxcrt/css/cfx_cssrulecollection.cpp b/core/fxcrt/css/cfx_cssrulecollection.cpp
index 635ca91..2030518 100644
--- a/core/fxcrt/css/cfx_cssrulecollection.cpp
+++ b/core/fxcrt/css/cfx_cssrulecollection.cpp
@@ -28,7 +28,7 @@
 }
 
 const std::vector<std::unique_ptr<CFX_CSSRuleCollection::Data>>*
-CFX_CSSRuleCollection::GetTagRuleData(const CFX_WideString& tagname) const {
+CFX_CSSRuleCollection::GetTagRuleData(const WideString& tagname) const {
   auto it = m_TagRules.find(FX_HashCode_GetW(tagname.c_str(), true));
   return it != m_TagRules.end() ? &it->second : nullptr;
 }
diff --git a/core/fxcrt/css/cfx_cssrulecollection.h b/core/fxcrt/css/cfx_cssrulecollection.h
index 6b91c6b..72ae58c 100644
--- a/core/fxcrt/css/cfx_cssrulecollection.h
+++ b/core/fxcrt/css/cfx_cssrulecollection.h
@@ -36,7 +36,7 @@
   int32_t CountSelectors() const { return m_iSelectors; }
 
   const std::vector<std::unique_ptr<Data>>* GetTagRuleData(
-      const CFX_WideString& tagname) const;
+      const WideString& tagname) const;
 
  private:
   void AddRulesFrom(const CFX_CSSStyleSheet* pStyleSheet,
diff --git a/core/fxcrt/css/cfx_cssselector.cpp b/core/fxcrt/css/cfx_cssselector.cpp
index 6ee81f5..3993dca 100644
--- a/core/fxcrt/css/cfx_cssselector.cpp
+++ b/core/fxcrt/css/cfx_cssselector.cpp
@@ -31,7 +31,7 @@
                                  int32_t iLen,
                                  bool bIgnoreCase)
     : m_eType(eType),
-      m_dwHash(FX_HashCode_GetW(CFX_WideStringC(psz, iLen), bIgnoreCase)) {}
+      m_dwHash(FX_HashCode_GetW(WideStringView(psz, iLen), bIgnoreCase)) {}
 
 CFX_CSSSelector::~CFX_CSSSelector() {}
 
@@ -49,7 +49,7 @@
 
 // static.
 std::unique_ptr<CFX_CSSSelector> CFX_CSSSelector::FromString(
-    const CFX_WideStringC& str) {
+    const WideStringView& str) {
   ASSERT(!str.IsEmpty());
 
   const wchar_t* psz = str.unterminated_c_str();
diff --git a/core/fxcrt/css/cfx_cssselector.h b/core/fxcrt/css/cfx_cssselector.h
index 9fff42a..62f8b16 100644
--- a/core/fxcrt/css/cfx_cssselector.h
+++ b/core/fxcrt/css/cfx_cssselector.h
@@ -15,8 +15,7 @@
 
 class CFX_CSSSelector {
  public:
-  static std::unique_ptr<CFX_CSSSelector> FromString(
-      const CFX_WideStringC& str);
+  static std::unique_ptr<CFX_CSSSelector> FromString(const WideStringView& str);
 
   CFX_CSSSelector(CFX_CSSSelectorType eType,
                   const wchar_t* psz,
diff --git a/core/fxcrt/css/cfx_cssstringvalue.cpp b/core/fxcrt/css/cfx_cssstringvalue.cpp
index b66c545..6ff2a33 100644
--- a/core/fxcrt/css/cfx_cssstringvalue.cpp
+++ b/core/fxcrt/css/cfx_cssstringvalue.cpp
@@ -6,7 +6,7 @@
 
 #include "core/fxcrt/css/cfx_cssstringvalue.h"
 
-CFX_CSSStringValue::CFX_CSSStringValue(const CFX_WideString& value)
+CFX_CSSStringValue::CFX_CSSStringValue(const WideString& value)
     : CFX_CSSValue(CFX_CSSPrimitiveType::String), value_(value) {}
 
 CFX_CSSStringValue::~CFX_CSSStringValue() {}
diff --git a/core/fxcrt/css/cfx_cssstringvalue.h b/core/fxcrt/css/cfx_cssstringvalue.h
index 7680360..d72078a 100644
--- a/core/fxcrt/css/cfx_cssstringvalue.h
+++ b/core/fxcrt/css/cfx_cssstringvalue.h
@@ -11,13 +11,13 @@
 
 class CFX_CSSStringValue : public CFX_CSSValue {
  public:
-  explicit CFX_CSSStringValue(const CFX_WideString& value);
+  explicit CFX_CSSStringValue(const WideString& value);
   ~CFX_CSSStringValue() override;
 
-  const CFX_WideString Value() const { return value_; }
+  const WideString Value() const { return value_; }
 
  private:
-  const CFX_WideString value_;
+  const WideString value_;
 };
 
 #endif  // CORE_FXCRT_CSS_CFX_CSSSTRINGVALUE_H_
diff --git a/core/fxcrt/css/cfx_cssstyleselector.cpp b/core/fxcrt/css/cfx_cssstyleselector.cpp
index 9a2bc8c..9ae2b87 100644
--- a/core/fxcrt/css/cfx_cssstyleselector.cpp
+++ b/core/fxcrt/css/cfx_cssstyleselector.cpp
@@ -50,7 +50,7 @@
 }
 
 std::vector<const CFX_CSSDeclaration*> CFX_CSSStyleSelector::MatchDeclarations(
-    const CFX_WideString& tagname) {
+    const WideString& tagname) {
   std::vector<const CFX_CSSDeclaration*> matchedDecls;
   if (m_UARules.CountSelectors() == 0 || tagname.IsEmpty())
     return matchedDecls;
@@ -66,7 +66,7 @@
   return matchedDecls;
 }
 
-bool CFX_CSSStyleSelector::MatchSelector(const CFX_WideString& tagname,
+bool CFX_CSSStyleSelector::MatchSelector(const WideString& tagname,
                                          CFX_CSSSelector* pSel) {
   // TODO(dsinclair): The code only supports a single level of selector at this
   // point. None of the code using selectors required the complexity so lets
@@ -80,8 +80,8 @@
 
 void CFX_CSSStyleSelector::ComputeStyle(
     const std::vector<const CFX_CSSDeclaration*>& declArray,
-    const CFX_WideString& styleString,
-    const CFX_WideString& alignString,
+    const WideString& styleString,
+    const WideString& alignString,
     CFX_CSSComputedStyle* pDest) {
   std::unique_ptr<CFX_CSSDeclaration> pDecl;
   if (!styleString.IsEmpty() || !alignString.IsEmpty()) {
@@ -91,7 +91,7 @@
       AppendInlineStyle(pDecl.get(), styleString);
     if (!alignString.IsEmpty()) {
       pDecl->AddProperty(CFX_GetCSSPropertyByEnum(CFX_CSSProperty::TextAlign),
-                         alignString.AsStringC());
+                         alignString.AsStringView());
     }
   }
   ApplyDeclarations(declArray, pDecl.get(), pDest);
@@ -137,29 +137,29 @@
 }
 
 void CFX_CSSStyleSelector::AppendInlineStyle(CFX_CSSDeclaration* pDecl,
-                                             const CFX_WideString& style) {
+                                             const WideString& style) {
   ASSERT(pDecl && !style.IsEmpty());
 
   auto pSyntax = pdfium::MakeUnique<CFX_CSSSyntaxParser>(
       style.c_str(), style.GetLength(), 32, true);
   int32_t iLen2 = 0;
   const CFX_CSSPropertyTable* table = nullptr;
-  CFX_WideString wsName;
+  WideString wsName;
   while (1) {
     CFX_CSSSyntaxStatus eStatus = pSyntax->DoSyntaxParse();
     if (eStatus == CFX_CSSSyntaxStatus::PropertyName) {
-      CFX_WideStringC strValue = pSyntax->GetCurrentString();
+      WideStringView strValue = pSyntax->GetCurrentString();
       table = CFX_GetCSSPropertyByName(strValue);
       if (!table)
-        wsName = CFX_WideString(strValue);
+        wsName = WideString(strValue);
     } else if (eStatus == CFX_CSSSyntaxStatus::PropertyValue) {
       if (table || iLen2 > 0) {
-        CFX_WideStringC strValue = pSyntax->GetCurrentString();
+        WideStringView strValue = pSyntax->GetCurrentString();
         if (!strValue.IsEmpty()) {
           if (table)
             pDecl->AddProperty(table, strValue);
           else if (iLen2 > 0)
-            pDecl->AddProperty(wsName, CFX_WideString(strValue));
+            pDecl->AddProperty(wsName, WideString(strValue));
         }
       }
     } else {
diff --git a/core/fxcrt/css/cfx_cssstyleselector.h b/core/fxcrt/css/cfx_cssstyleselector.h
index 143e51e..b59e304 100644
--- a/core/fxcrt/css/cfx_cssstyleselector.h
+++ b/core/fxcrt/css/cfx_cssstyleselector.h
@@ -39,18 +39,17 @@
   // adds non-inherited data from the parent style. Attempting to copy
   // internally will fail as you'll lose the non-inherited data.
   void ComputeStyle(const std::vector<const CFX_CSSDeclaration*>& declArray,
-                    const CFX_WideString& styleString,
-                    const CFX_WideString& alignString,
+                    const WideString& styleString,
+                    const WideString& alignString,
                     CFX_CSSComputedStyle* pDestStyle);
 
   std::vector<const CFX_CSSDeclaration*> MatchDeclarations(
-      const CFX_WideString& tagname);
+      const WideString& tagname);
 
  private:
-  bool MatchSelector(const CFX_WideString& tagname, CFX_CSSSelector* pSel);
+  bool MatchSelector(const WideString& tagname, CFX_CSSSelector* pSel);
 
-  void AppendInlineStyle(CFX_CSSDeclaration* pDecl,
-                         const CFX_WideString& style);
+  void AppendInlineStyle(CFX_CSSDeclaration* pDecl, const WideString& style);
   void ApplyDeclarations(
       const std::vector<const CFX_CSSDeclaration*>& declArray,
       const CFX_CSSDeclaration* extraDecl,
diff --git a/core/fxcrt/css/cfx_cssstylesheet.cpp b/core/fxcrt/css/cfx_cssstylesheet.cpp
index 9bd25c0..183765f 100644
--- a/core/fxcrt/css/cfx_cssstylesheet.cpp
+++ b/core/fxcrt/css/cfx_cssstylesheet.cpp
@@ -63,32 +63,32 @@
   CFX_CSSStyleRule* pStyleRule = nullptr;
   int32_t iValueLen = 0;
   const CFX_CSSPropertyTable* propertyTable = nullptr;
-  CFX_WideString wsName;
+  WideString wsName;
   while (1) {
     switch (pSyntax->DoSyntaxParse()) {
       case CFX_CSSSyntaxStatus::Selector: {
-        CFX_WideStringC strValue = pSyntax->GetCurrentString();
+        WideStringView strValue = pSyntax->GetCurrentString();
         auto pSelector = CFX_CSSSelector::FromString(strValue);
         if (pSelector)
           selectors.push_back(std::move(pSelector));
         break;
       }
       case CFX_CSSSyntaxStatus::PropertyName: {
-        CFX_WideStringC strValue = pSyntax->GetCurrentString();
+        WideStringView strValue = pSyntax->GetCurrentString();
         propertyTable = CFX_GetCSSPropertyByName(strValue);
         if (!propertyTable)
-          wsName = CFX_WideString(strValue);
+          wsName = WideString(strValue);
         break;
       }
       case CFX_CSSSyntaxStatus::PropertyValue: {
         if (propertyTable || iValueLen > 0) {
-          CFX_WideStringC strValue = pSyntax->GetCurrentString();
+          WideStringView strValue = pSyntax->GetCurrentString();
           auto* decl = pStyleRule->GetDeclaration();
           if (!strValue.IsEmpty()) {
             if (propertyTable) {
               decl->AddProperty(propertyTable, strValue);
             } else {
-              decl->AddProperty(wsName, CFX_WideString(strValue));
+              decl->AddProperty(wsName, WideString(strValue));
             }
           }
         }
diff --git a/core/fxcrt/css/cfx_cssstylesheet_unittest.cpp b/core/fxcrt/css/cfx_cssstylesheet_unittest.cpp
index 4194a70..abcd2f6 100644
--- a/core/fxcrt/css/cfx_cssstylesheet_unittest.cpp
+++ b/core/fxcrt/css/cfx_cssstylesheet_unittest.cpp
@@ -28,7 +28,7 @@
   void TearDown() override { decl_ = nullptr; }
 
   void LoadAndVerifyDecl(const wchar_t* buf,
-                         const std::vector<CFX_WideString>& selectors,
+                         const std::vector<WideString>& selectors,
                          size_t decl_count) {
     ASSERT(sheet_);
 
@@ -39,7 +39,7 @@
     EXPECT_EQ(selectors.size(), style->CountSelectorLists());
 
     for (size_t i = 0; i < selectors.size(); i++) {
-      uint32_t hash = FX_HashCode_GetW(selectors[i].AsStringC(), true);
+      uint32_t hash = FX_HashCode_GetW(selectors[i].AsStringView(), true);
       EXPECT_EQ(hash, style->GetSelectorList(i)->GetNameHash());
     }
 
diff --git a/core/fxcrt/css/cfx_csssyntaxparser.cpp b/core/fxcrt/css/cfx_csssyntaxparser.cpp
index c8082e8..066b82b 100644
--- a/core/fxcrt/css/cfx_csssyntaxparser.cpp
+++ b/core/fxcrt/css/cfx_csssyntaxparser.cpp
@@ -223,6 +223,6 @@
   return true;
 }
 
-CFX_WideStringC CFX_CSSSyntaxParser::GetCurrentString() const {
-  return CFX_WideStringC(m_TextData.GetBuffer(), m_iTextDataLen);
+WideStringView CFX_CSSSyntaxParser::GetCurrentString() const {
+  return WideStringView(m_TextData.GetBuffer(), m_iTextDataLen);
 }
diff --git a/core/fxcrt/css/cfx_csssyntaxparser.h b/core/fxcrt/css/cfx_csssyntaxparser.h
index 9ddedfe..778f9a3 100644
--- a/core/fxcrt/css/cfx_csssyntaxparser.h
+++ b/core/fxcrt/css/cfx_csssyntaxparser.h
@@ -47,7 +47,7 @@
   ~CFX_CSSSyntaxParser();
 
   CFX_CSSSyntaxStatus DoSyntaxParse();
-  CFX_WideStringC GetCurrentString() const;
+  WideStringView GetCurrentString() const;
 
  protected:
   void SwitchMode(CFX_CSSSyntaxMode eMode);
diff --git a/core/fxcrt/css/cfx_cssvaluelistparser_unittest.cpp b/core/fxcrt/css/cfx_cssvaluelistparser_unittest.cpp
index 510c962..62a542b 100644
--- a/core/fxcrt/css/cfx_cssvaluelistparser_unittest.cpp
+++ b/core/fxcrt/css/cfx_cssvaluelistparser_unittest.cpp
@@ -18,25 +18,25 @@
   auto parser = pdfium::MakeUnique<CFX_CSSValueListParser>(L"#abc", 4, L' ');
   EXPECT_TRUE(parser->NextValue(type, start, len));
   EXPECT_EQ(CFX_CSSPrimitiveType::RGB, type);
-  EXPECT_EQ(L"#abc", CFX_WideString(start, len));
+  EXPECT_EQ(L"#abc", WideString(start, len));
   EXPECT_FALSE(parser->NextValue(type, start, len));
 
   parser = pdfium::MakeUnique<CFX_CSSValueListParser>(L"#abcdef", 7, L' ');
   EXPECT_TRUE(parser->NextValue(type, start, len));
   EXPECT_EQ(CFX_CSSPrimitiveType::RGB, type);
-  EXPECT_EQ(L"#abcdef", CFX_WideString(start, len));
+  EXPECT_EQ(L"#abcdef", WideString(start, len));
   EXPECT_FALSE(parser->NextValue(type, start, len));
 
   parser =
       pdfium::MakeUnique<CFX_CSSValueListParser>(L"rgb(1, 255, 4)", 14, L' ');
   EXPECT_TRUE(parser->NextValue(type, start, len));
   EXPECT_EQ(CFX_CSSPrimitiveType::RGB, type);
-  EXPECT_EQ(L"rgb(1, 255, 4)", CFX_WideString(start, len));
+  EXPECT_EQ(L"rgb(1, 255, 4)", WideString(start, len));
 
   parser = pdfium::MakeUnique<CFX_CSSValueListParser>(L"#abcdefghij", 11, L' ');
   EXPECT_TRUE(parser->NextValue(type, start, len));
   EXPECT_EQ(CFX_CSSPrimitiveType::Unknown, type);
-  EXPECT_EQ(L"#abcdefghij", CFX_WideString(start, len));
+  EXPECT_EQ(L"#abcdefghij", WideString(start, len));
   EXPECT_FALSE(parser->NextValue(type, start, len));
 }
 
@@ -48,38 +48,38 @@
   auto parser = pdfium::MakeUnique<CFX_CSSValueListParser>(L"1234", 4, L' ');
   EXPECT_TRUE(parser->NextValue(type, start, len));
   EXPECT_EQ(CFX_CSSPrimitiveType::Number, type);
-  EXPECT_EQ(L"1234", CFX_WideString(start, len));
+  EXPECT_EQ(L"1234", WideString(start, len));
 
   parser = pdfium::MakeUnique<CFX_CSSValueListParser>(L"-1234", 5, L' ');
   EXPECT_TRUE(parser->NextValue(type, start, len));
   EXPECT_EQ(CFX_CSSPrimitiveType::Number, type);
-  EXPECT_EQ(L"-1234", CFX_WideString(start, len));
+  EXPECT_EQ(L"-1234", WideString(start, len));
 
   parser = pdfium::MakeUnique<CFX_CSSValueListParser>(L"+1234", 5, L' ');
   EXPECT_TRUE(parser->NextValue(type, start, len));
   EXPECT_EQ(CFX_CSSPrimitiveType::Number, type);
-  EXPECT_EQ(L"+1234", CFX_WideString(start, len));
+  EXPECT_EQ(L"+1234", WideString(start, len));
 
   parser = pdfium::MakeUnique<CFX_CSSValueListParser>(L".1234", 5, L' ');
   EXPECT_TRUE(parser->NextValue(type, start, len));
   EXPECT_EQ(CFX_CSSPrimitiveType::Number, type);
-  EXPECT_EQ(L".1234", CFX_WideString(start, len));
+  EXPECT_EQ(L".1234", WideString(start, len));
 
   parser = pdfium::MakeUnique<CFX_CSSValueListParser>(L"4321.1234", 9, L' ');
   EXPECT_TRUE(parser->NextValue(type, start, len));
   EXPECT_EQ(CFX_CSSPrimitiveType::Number, type);
-  EXPECT_EQ(L"4321.1234", CFX_WideString(start, len));
+  EXPECT_EQ(L"4321.1234", WideString(start, len));
 
   // TODO(dsinclair): These should probably fail but currently don't.
   parser = pdfium::MakeUnique<CFX_CSSValueListParser>(L"4321.12.34", 10, L' ');
   EXPECT_TRUE(parser->NextValue(type, start, len));
   EXPECT_EQ(CFX_CSSPrimitiveType::Number, type);
-  EXPECT_EQ(L"4321.12.34", CFX_WideString(start, len));
+  EXPECT_EQ(L"4321.12.34", WideString(start, len));
 
   parser = pdfium::MakeUnique<CFX_CSSValueListParser>(L"43a1.12.34", 10, L' ');
   EXPECT_TRUE(parser->NextValue(type, start, len));
   EXPECT_EQ(CFX_CSSPrimitiveType::Number, type);
-  EXPECT_EQ(L"43a1.12.34", CFX_WideString(start, len));
+  EXPECT_EQ(L"43a1.12.34", WideString(start, len));
 }
 
 TEST(CFX_CSSValueListParserTest, string_parsing) {
@@ -91,18 +91,18 @@
       pdfium::MakeUnique<CFX_CSSValueListParser>(L"'string'", 8, L' ');
   EXPECT_TRUE(parser->NextValue(type, start, len));
   EXPECT_EQ(CFX_CSSPrimitiveType::String, type);
-  EXPECT_EQ(L"string", CFX_WideString(start, len));
+  EXPECT_EQ(L"string", WideString(start, len));
 
   parser = pdfium::MakeUnique<CFX_CSSValueListParser>(L"\"another string\"", 16,
                                                       L' ');
   EXPECT_TRUE(parser->NextValue(type, start, len));
   EXPECT_EQ(CFX_CSSPrimitiveType::String, type);
-  EXPECT_EQ(L"another string", CFX_WideString(start, len));
+  EXPECT_EQ(L"another string", WideString(start, len));
 
   parser = pdfium::MakeUnique<CFX_CSSValueListParser>(L"standalone", 10, L' ');
   EXPECT_TRUE(parser->NextValue(type, start, len));
   EXPECT_EQ(CFX_CSSPrimitiveType::String, type);
-  EXPECT_EQ(L"standalone", CFX_WideString(start, len));
+  EXPECT_EQ(L"standalone", WideString(start, len));
 }
 
 TEST(CFX_CSSValueListParserTest, multiparsing) {
@@ -113,15 +113,15 @@
   auto parser = pdfium::MakeUnique<CFX_CSSValueListParser>(L"1, 2, 3", 7, L',');
   EXPECT_TRUE(parser->NextValue(type, start, len));
   EXPECT_EQ(CFX_CSSPrimitiveType::Number, type);
-  EXPECT_EQ(L"1", CFX_WideString(start, len));
+  EXPECT_EQ(L"1", WideString(start, len));
 
   EXPECT_TRUE(parser->NextValue(type, start, len));
   EXPECT_EQ(CFX_CSSPrimitiveType::Number, type);
-  EXPECT_EQ(L"2", CFX_WideString(start, len));
+  EXPECT_EQ(L"2", WideString(start, len));
 
   EXPECT_TRUE(parser->NextValue(type, start, len));
   EXPECT_EQ(CFX_CSSPrimitiveType::Number, type);
-  EXPECT_EQ(L"3", CFX_WideString(start, len));
+  EXPECT_EQ(L"3", WideString(start, len));
 
   EXPECT_FALSE(parser->NextValue(type, start, len));
 
@@ -129,13 +129,13 @@
                                                       22, L',');
   EXPECT_TRUE(parser->NextValue(type, start, len));
   EXPECT_EQ(CFX_CSSPrimitiveType::String, type);
-  EXPECT_EQ(L"str", CFX_WideString(start, len));
+  EXPECT_EQ(L"str", WideString(start, len));
 
   EXPECT_TRUE(parser->NextValue(type, start, len));
   EXPECT_EQ(CFX_CSSPrimitiveType::RGB, type);
-  EXPECT_EQ(L"rgb(1, 2, 3)", CFX_WideString(start, len));
+  EXPECT_EQ(L"rgb(1, 2, 3)", WideString(start, len));
 
   EXPECT_TRUE(parser->NextValue(type, start, len));
   EXPECT_EQ(CFX_CSSPrimitiveType::Number, type);
-  EXPECT_EQ(L"4", CFX_WideString(start, len));
+  EXPECT_EQ(L"4", WideString(start, len));
 }
diff --git a/core/fxcrt/fx_bidi.cpp b/core/fxcrt/fx_bidi.cpp
index b7c7cac..cae0942 100644
--- a/core/fxcrt/fx_bidi.cpp
+++ b/core/fxcrt/fx_bidi.cpp
@@ -581,7 +581,7 @@
   m_CurrentSegment.direction = direction;
 }
 
-CFX_BidiString::CFX_BidiString(const CFX_WideString& str)
+CFX_BidiString::CFX_BidiString(const WideString& str)
     : m_Str(str),
       m_pBidiChar(pdfium::MakeUnique<CFX_BidiChar>()),
       m_eOverallDirection(CFX_BidiChar::LEFT) {
diff --git a/core/fxcrt/fx_bidi.h b/core/fxcrt/fx_bidi.h
index 0dc426b..23f5d02 100644
--- a/core/fxcrt/fx_bidi.h
+++ b/core/fxcrt/fx_bidi.h
@@ -54,7 +54,7 @@
  public:
   using const_iterator = std::vector<CFX_BidiChar::Segment>::const_iterator;
 
-  explicit CFX_BidiString(const CFX_WideString& str);
+  explicit CFX_BidiString(const WideString& str);
   ~CFX_BidiString();
 
   // Overall direction is always LEFT or RIGHT, never NEUTRAL.
@@ -70,7 +70,7 @@
   const_iterator end() const { return m_Order.end(); }
 
  private:
-  const CFX_WideString m_Str;
+  const WideString m_Str;
   std::unique_ptr<CFX_BidiChar> m_pBidiChar;
   std::vector<CFX_BidiChar::Segment> m_Order;
   CFX_BidiChar::Direction m_eOverallDirection;
diff --git a/core/fxcrt/fx_extension.cpp b/core/fxcrt/fx_extension.cpp
index 7f73a4c..4d0adb8 100644
--- a/core/fxcrt/fx_extension.cpp
+++ b/core/fxcrt/fx_extension.cpp
@@ -73,7 +73,7 @@
   return wch1 - wch2;
 }
 
-uint32_t FX_HashCode_GetA(const CFX_ByteStringC& str, bool bIgnoreCase) {
+uint32_t FX_HashCode_GetA(const ByteStringView& str, bool bIgnoreCase) {
   uint32_t dwHashCode = 0;
   if (bIgnoreCase) {
     for (const auto& c : str)
@@ -85,7 +85,7 @@
   return dwHashCode;
 }
 
-uint32_t FX_HashCode_GetW(const CFX_WideStringC& str, bool bIgnoreCase) {
+uint32_t FX_HashCode_GetW(const WideStringView& str, bool bIgnoreCase) {
   uint32_t dwHashCode = 0;
   if (bIgnoreCase) {
     for (const auto& c : str)
diff --git a/core/fxcrt/fx_stream.cpp b/core/fxcrt/fx_stream.cpp
index c269ec9..a04e781 100644
--- a/core/fxcrt/fx_stream.cpp
+++ b/core/fxcrt/fx_stream.cpp
@@ -95,16 +95,16 @@
   return WriteBlock(buffer, GetSize(), size);
 }
 
-bool IFX_SeekableStream::WriteString(const CFX_ByteStringC& str) {
+bool IFX_SeekableStream::WriteString(const ByteStringView& str) {
   return WriteBlock(str.unterminated_c_str(), str.GetLength());
 }
 
 FX_FileHandle* FX_OpenFolder(const char* path) {
 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
   auto pData = pdfium::MakeUnique<CFindFileDataA>();
-  pData->m_Handle = FindFirstFileExA((CFX_ByteString(path) + "/*.*").c_str(),
-                                     FindExInfoStandard, &pData->m_FindData,
-                                     FindExSearchNameMatch, nullptr, 0);
+  pData->m_Handle =
+      FindFirstFileExA((ByteString(path) + "/*.*").c_str(), FindExInfoStandard,
+                       &pData->m_FindData, FindExSearchNameMatch, nullptr, 0);
   if (pData->m_Handle == INVALID_HANDLE_VALUE)
     return nullptr;
 
@@ -116,7 +116,7 @@
 }
 
 bool FX_GetNextFile(FX_FileHandle* handle,
-                    CFX_ByteString* filename,
+                    ByteString* filename,
                     bool* bFolder) {
   if (!handle)
     return false;
diff --git a/core/fxcrt/fx_stream.h b/core/fxcrt/fx_stream.h
index abf031d..08331e9 100644
--- a/core/fxcrt/fx_stream.h
+++ b/core/fxcrt/fx_stream.h
@@ -29,9 +29,7 @@
 #endif  // _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
 
 FX_FileHandle* FX_OpenFolder(const char* path);
-bool FX_GetNextFile(FX_FileHandle* handle,
-                    CFX_ByteString* filename,
-                    bool* bFolder);
+bool FX_GetNextFile(FX_FileHandle* handle, ByteString* filename, bool* bFolder);
 void FX_CloseFolder(FX_FileHandle* handle);
 
 #define FX_FILEMODE_Write 0
@@ -41,7 +39,7 @@
 class IFX_WriteStream : virtual public CFX_Retainable {
  public:
   virtual bool WriteBlock(const void* pData, size_t size) = 0;
-  virtual bool WriteString(const CFX_ByteStringC& str) = 0;
+  virtual bool WriteString(const ByteStringView& str) = 0;
 };
 
 class IFX_ArchiveStream : public IFX_WriteStream {
@@ -107,7 +105,7 @@
                   FX_FILESIZE offset,
                   size_t size) override = 0;
   bool WriteBlock(const void* buffer, size_t size) override;
-  bool WriteString(const CFX_ByteStringC& str) override;
+  bool WriteString(const ByteStringView& str) override;
 
   bool Flush() override = 0;
 };
diff --git a/core/fxcrt/fx_string.cpp b/core/fxcrt/fx_string.cpp
index 075f29e..ce4e187 100644
--- a/core/fxcrt/fx_string.cpp
+++ b/core/fxcrt/fx_string.cpp
@@ -51,8 +51,8 @@
 
   // The data returned by GetResult() is invalidated when this is modified by
   // appending any data.
-  CFX_ByteStringC GetResult() const {
-    return CFX_ByteStringC(m_Buffer.data(), m_Buffer.size());
+  ByteStringView GetResult() const {
+    return ByteStringView(m_Buffer.data(), m_Buffer.size());
   }
 
  private:
@@ -61,14 +61,14 @@
 
 }  // namespace
 
-CFX_ByteString FX_UTF8Encode(const CFX_WideStringC& wsStr) {
+ByteString FX_UTF8Encode(const WideStringView& wsStr) {
   FX_STRSIZE len = wsStr.GetLength();
   const wchar_t* pStr = wsStr.unterminated_c_str();
   CFX_UTF8Encoder encoder;
   while (len-- > 0)
     encoder.Input(*pStr++);
 
-  return CFX_ByteString(encoder.GetResult());
+  return ByteString(encoder.GetResult());
 }
 
 namespace {
@@ -84,7 +84,7 @@
 
 }  // namespace
 
-bool FX_atonum(const CFX_ByteStringC& strc, void* pData) {
+bool FX_atonum(const ByteStringView& strc, void* pData) {
   if (strc.Contains('.')) {
     float* pFloat = static_cast<float*>(pData);
     *pFloat = FX_atof(strc);
@@ -141,7 +141,7 @@
   return true;
 }
 
-float FX_atof(const CFX_ByteStringC& strc) {
+float FX_atof(const ByteStringView& strc) {
   if (strc.IsEmpty())
     return 0.0;
 
@@ -180,7 +180,7 @@
   return bNegative ? -value : value;
 }
 
-float FX_atof(const CFX_WideStringC& wsStr) {
+float FX_atof(const WideStringView& wsStr) {
   return FX_atof(FX_UTF8Encode(wsStr).c_str());
 }
 
diff --git a/core/fxcrt/fx_string.h b/core/fxcrt/fx_string.h
index 9cc0b25..0481a15 100644
--- a/core/fxcrt/fx_string.h
+++ b/core/fxcrt/fx_string.h
@@ -7,17 +7,17 @@
 #ifndef CORE_FXCRT_FX_STRING_H_
 #define CORE_FXCRT_FX_STRING_H_
 
-#include "core/fxcrt/cfx_bytestring.h"
-#include "core/fxcrt/cfx_widestring.h"
+#include "core/fxcrt/bytestring.h"
+#include "core/fxcrt/widestring.h"
 
 #define FXBSTR_ID(c1, c2, c3, c4)                                      \
   (((uint32_t)c1 << 24) | ((uint32_t)c2 << 16) | ((uint32_t)c3 << 8) | \
    ((uint32_t)c4))
 
-CFX_ByteString FX_UTF8Encode(const CFX_WideStringC& wsStr);
-float FX_atof(const CFX_ByteStringC& str);
-float FX_atof(const CFX_WideStringC& wsStr);
-bool FX_atonum(const CFX_ByteStringC& str, void* pData);
+ByteString FX_UTF8Encode(const WideStringView& wsStr);
+float FX_atof(const ByteStringView& str);
+float FX_atof(const WideStringView& wsStr);
+bool FX_atonum(const ByteStringView& str, void* pData);
 FX_STRSIZE FX_ftoa(float f, char* buf);
 
 #endif  // CORE_FXCRT_FX_STRING_H_
diff --git a/core/fxcrt/ifx_fileaccess.h b/core/fxcrt/ifx_fileaccess.h
index e818303..9bfe2b4 100644
--- a/core/fxcrt/ifx_fileaccess.h
+++ b/core/fxcrt/ifx_fileaccess.h
@@ -19,8 +19,8 @@
   static std::unique_ptr<IFX_FileAccess> Create();
   virtual ~IFX_FileAccess() {}
 
-  virtual bool Open(const CFX_ByteStringC& fileName, uint32_t dwMode) = 0;
-  virtual bool Open(const CFX_WideStringC& fileName, uint32_t dwMode) = 0;
+  virtual bool Open(const ByteStringView& fileName, uint32_t dwMode) = 0;
+  virtual bool Open(const WideStringView& fileName, uint32_t dwMode) = 0;
   virtual void Close() = 0;
   virtual FX_FILESIZE GetSize() const = 0;
   virtual FX_FILESIZE GetPosition() const = 0;
diff --git a/core/fxcrt/ifx_locale.h b/core/fxcrt/ifx_locale.h
index 5039aec..5918e7a 100644
--- a/core/fxcrt/ifx_locale.h
+++ b/core/fxcrt/ifx_locale.h
@@ -58,19 +58,19 @@
  public:
   virtual ~IFX_Locale() {}
 
-  virtual CFX_WideString GetName() const = 0;
-  virtual CFX_WideString GetNumbericSymbol(FX_LOCALENUMSYMBOL eType) const = 0;
-  virtual CFX_WideString GetDateTimeSymbols() const = 0;
-  virtual CFX_WideString GetMonthName(int32_t nMonth, bool bAbbr) const = 0;
-  virtual CFX_WideString GetDayName(int32_t nWeek, bool bAbbr) const = 0;
-  virtual CFX_WideString GetMeridiemName(bool bAM) const = 0;
+  virtual WideString GetName() const = 0;
+  virtual WideString GetNumbericSymbol(FX_LOCALENUMSYMBOL eType) const = 0;
+  virtual WideString GetDateTimeSymbols() const = 0;
+  virtual WideString GetMonthName(int32_t nMonth, bool bAbbr) const = 0;
+  virtual WideString GetDayName(int32_t nWeek, bool bAbbr) const = 0;
+  virtual WideString GetMeridiemName(bool bAM) const = 0;
   virtual FX_TIMEZONE GetTimeZone() const = 0;
-  virtual CFX_WideString GetEraName(bool bAD) const = 0;
-  virtual CFX_WideString GetDatePattern(
+  virtual WideString GetEraName(bool bAD) const = 0;
+  virtual WideString GetDatePattern(
       FX_LOCALEDATETIMESUBCATEGORY eType) const = 0;
-  virtual CFX_WideString GetTimePattern(
+  virtual WideString GetTimePattern(
       FX_LOCALEDATETIMESUBCATEGORY eType) const = 0;
-  virtual CFX_WideString GetNumPattern(FX_LOCALENUMSUBCATEGORY eType) const = 0;
+  virtual WideString GetNumPattern(FX_LOCALENUMSUBCATEGORY eType) const = 0;
 };
 
 #endif  // CORE_FXCRT_IFX_LOCALE_H_
diff --git a/core/fxcrt/cfx_string_c_template.h b/core/fxcrt/string_view_template.h
similarity index 74%
rename from core/fxcrt/cfx_string_c_template.h
rename to core/fxcrt/string_view_template.h
index 9123fc2..21426ac 100644
--- a/core/fxcrt/cfx_string_c_template.h
+++ b/core/fxcrt/string_view_template.h
@@ -4,8 +4,8 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#ifndef CORE_FXCRT_CFX_STRING_C_TEMPLATE_H_
-#define CORE_FXCRT_CFX_STRING_C_TEMPLATE_H_
+#ifndef CORE_FXCRT_STRING_VIEW_TEMPLATE_H_
+#define CORE_FXCRT_STRING_VIEW_TEMPLATE_H_
 
 #include <algorithm>
 #include <iterator>
@@ -18,61 +18,63 @@
 #include "third_party/base/optional.h"
 #include "third_party/base/stl_util.h"
 
+namespace fxcrt {
+
 // An immutable string with caller-provided storage which must outlive the
 // string itself. These are not necessarily nul-terminated, so that substring
 // extraction (via the Mid(), Left(), and Right() methods) is copy-free.
 template <typename T>
-class CFX_StringCTemplate {
+class StringViewTemplate {
  public:
   using CharType = T;
   using UnsignedType = typename std::make_unsigned<CharType>::type;
   using const_iterator = const CharType*;
   using const_reverse_iterator = std::reverse_iterator<const_iterator>;
 
-  CFX_StringCTemplate() : m_Ptr(nullptr), m_Length(0) {}
+  StringViewTemplate() : m_Ptr(nullptr), m_Length(0) {}
 
   // Deliberately implicit to avoid calling on every string literal.
   // NOLINTNEXTLINE(runtime/explicit)
-  CFX_StringCTemplate(const CharType* ptr)
+  StringViewTemplate(const CharType* ptr)
       : m_Ptr(reinterpret_cast<const UnsignedType*>(ptr)),
         m_Length(ptr ? FXSYS_len(ptr) : 0) {}
 
-  CFX_StringCTemplate(const CharType* ptr, FX_STRSIZE len)
+  StringViewTemplate(const CharType* ptr, FX_STRSIZE len)
       : m_Ptr(reinterpret_cast<const UnsignedType*>(ptr)), m_Length(len) {}
 
   template <typename U = UnsignedType>
-  CFX_StringCTemplate(
+  StringViewTemplate(
       const UnsignedType* ptr,
       FX_STRSIZE size,
       typename std::enable_if<!std::is_same<U, CharType>::value>::type* = 0)
       : m_Ptr(ptr), m_Length(size) {}
 
   // Deliberately implicit to avoid calling on every string literal.
-  // |ch| must be an lvalue that outlives the the CFX_StringCTemplate.
+  // |ch| must be an lvalue that outlives the the StringViewTemplate.
   // NOLINTNEXTLINE(runtime/explicit)
-  CFX_StringCTemplate(CharType& ch) {
+  StringViewTemplate(CharType& ch) {
     m_Ptr = reinterpret_cast<const UnsignedType*>(&ch);
     m_Length = 1;
   }
 
-  CFX_StringCTemplate(const CFX_StringCTemplate& src) {
+  StringViewTemplate(const StringViewTemplate& src) {
     m_Ptr = src.m_Ptr;
     m_Length = src.m_Length;
   }
 
   // Any changes to |vec| invalidate the string.
-  explicit CFX_StringCTemplate(const std::vector<UnsignedType>& vec) {
+  explicit StringViewTemplate(const std::vector<UnsignedType>& vec) {
     m_Length = pdfium::CollectionSize<FX_STRSIZE>(vec);
     m_Ptr = m_Length ? vec.data() : nullptr;
   }
 
-  CFX_StringCTemplate& operator=(const CharType* src) {
+  StringViewTemplate& operator=(const CharType* src) {
     m_Ptr = reinterpret_cast<const UnsignedType*>(src);
     m_Length = src ? FXSYS_len(src) : 0;
     return *this;
   }
 
-  CFX_StringCTemplate& operator=(const CFX_StringCTemplate& src) {
+  StringViewTemplate& operator=(const StringViewTemplate& src) {
     m_Ptr = src.m_Ptr;
     m_Length = src.m_Length;
     return *this;
@@ -98,14 +100,14 @@
            FXSYS_cmp(ptr, reinterpret_cast<const CharType*>(m_Ptr.Get()),
                      m_Length) == 0;
   }
-  bool operator==(const CFX_StringCTemplate& other) const {
+  bool operator==(const StringViewTemplate& other) const {
     return other.m_Length == m_Length &&
            FXSYS_cmp(reinterpret_cast<const CharType*>(other.m_Ptr.Get()),
                      reinterpret_cast<const CharType*>(m_Ptr.Get()),
                      m_Length) == 0;
   }
   bool operator!=(const CharType* ptr) const { return !(*this == ptr); }
-  bool operator!=(const CFX_StringCTemplate& other) const {
+  bool operator!=(const StringViewTemplate& other) const {
     return !(*this == other);
   }
 
@@ -157,56 +159,56 @@
 
   bool Contains(CharType ch) const { return Find(ch).has_value(); }
 
-  CFX_StringCTemplate Mid(FX_STRSIZE first, FX_STRSIZE count) const {
+  StringViewTemplate Mid(FX_STRSIZE first, FX_STRSIZE count) const {
     if (!m_Ptr.Get())
-      return CFX_StringCTemplate();
+      return StringViewTemplate();
 
     if (!IsValidIndex(first))
-      return CFX_StringCTemplate();
+      return StringViewTemplate();
 
     if (count == 0 || !IsValidLength(count))
-      return CFX_StringCTemplate();
+      return StringViewTemplate();
 
     if (!IsValidIndex(first + count - 1))
-      return CFX_StringCTemplate();
+      return StringViewTemplate();
 
-    return CFX_StringCTemplate(m_Ptr.Get() + first, count);
+    return StringViewTemplate(m_Ptr.Get() + first, count);
   }
 
-  CFX_StringCTemplate Left(FX_STRSIZE count) const {
+  StringViewTemplate Left(FX_STRSIZE count) const {
     if (count == 0 || !IsValidLength(count))
-      return CFX_StringCTemplate();
+      return StringViewTemplate();
     return Mid(0, count);
   }
 
-  CFX_StringCTemplate Right(FX_STRSIZE count) const {
+  StringViewTemplate Right(FX_STRSIZE count) const {
     if (count == 0 || !IsValidLength(count))
-      return CFX_StringCTemplate();
+      return StringViewTemplate();
     return Mid(GetLength() - count, count);
   }
 
-  CFX_StringCTemplate TrimmedRight(CharType ch) const {
+  StringViewTemplate TrimmedRight(CharType ch) const {
     if (IsEmpty())
-      return CFX_StringCTemplate();
+      return StringViewTemplate();
 
     FX_STRSIZE pos = GetLength();
     while (pos && CharAt(pos - 1) == ch)
       pos--;
 
     if (pos == 0)
-      return CFX_StringCTemplate();
+      return StringViewTemplate();
 
-    return CFX_StringCTemplate(m_Ptr.Get(), pos);
+    return StringViewTemplate(m_Ptr.Get(), pos);
   }
 
-  bool operator<(const CFX_StringCTemplate& that) const {
+  bool operator<(const StringViewTemplate& that) const {
     int result = FXSYS_cmp(reinterpret_cast<const CharType*>(m_Ptr.Get()),
                            reinterpret_cast<const CharType*>(that.m_Ptr.Get()),
                            std::min(m_Length, that.m_Length));
     return result < 0 || (result == 0 && m_Length < that.m_Length);
   }
 
-  bool operator>(const CFX_StringCTemplate& that) const {
+  bool operator>(const StringViewTemplate& that) const {
     int result = FXSYS_cmp(reinterpret_cast<const CharType*>(m_Ptr.Get()),
                            reinterpret_cast<const CharType*>(that.m_Ptr.Get()),
                            std::min(m_Length, that.m_Length));
@@ -222,19 +224,24 @@
 };
 
 template <typename T>
-inline bool operator==(const T* lhs, const CFX_StringCTemplate<T>& rhs) {
+inline bool operator==(const T* lhs, const StringViewTemplate<T>& rhs) {
   return rhs == lhs;
 }
 
 template <typename T>
-inline bool operator!=(const T* lhs, const CFX_StringCTemplate<T>& rhs) {
+inline bool operator!=(const T* lhs, const StringViewTemplate<T>& rhs) {
   return rhs != lhs;
 }
 
-extern template class CFX_StringCTemplate<char>;
-extern template class CFX_StringCTemplate<wchar_t>;
+extern template class StringViewTemplate<char>;
+extern template class StringViewTemplate<wchar_t>;
 
-using CFX_ByteStringC = CFX_StringCTemplate<char>;
-using CFX_WideStringC = CFX_StringCTemplate<wchar_t>;
+using ByteStringView = StringViewTemplate<char>;
+using WideStringView = StringViewTemplate<wchar_t>;
 
-#endif  // CORE_FXCRT_CFX_STRING_C_TEMPLATE_H_
+}  // namespace fxcrt
+
+using ByteStringView = fxcrt::ByteStringView;
+using WideStringView = fxcrt::WideStringView;
+
+#endif  // CORE_FXCRT_STRING_VIEW_TEMPLATE_H_
diff --git a/core/fxcrt/cfx_widestring.cpp b/core/fxcrt/widestring.cpp
similarity index 80%
rename from core/fxcrt/cfx_widestring.cpp
rename to core/fxcrt/widestring.cpp
index aadd1a2..fa5c801 100644
--- a/core/fxcrt/cfx_widestring.cpp
+++ b/core/fxcrt/widestring.cpp
@@ -4,7 +4,7 @@
 
 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
 
-#include "core/fxcrt/cfx_widestring.h"
+#include "core/fxcrt/widestring.h"
 
 #include <stddef.h>
 
@@ -21,9 +21,9 @@
 #include "third_party/base/stl_util.h"
 
 template class CFX_StringDataTemplate<wchar_t>;
-template class CFX_StringCTemplate<wchar_t>;
-template class CFX_StringPoolTemplate<CFX_WideString>;
-template struct std::hash<CFX_WideString>;
+template class fxcrt::StringViewTemplate<wchar_t>;
+template class CFX_StringPoolTemplate<WideString>;
+template struct std::hash<WideString>;
 
 #define FORCE_ANSI 0x10000
 #define FORCE_UNICODE 0x20000
@@ -261,16 +261,16 @@
 }
 #endif
 
-CFX_WideString GetWideString(uint16_t codepage, const CFX_ByteStringC& bstr) {
+WideString GetWideString(uint16_t codepage, const ByteStringView& bstr) {
   ASSERT(IsValidCodePage(codepage));
 
   int src_len = bstr.GetLength();
   int dest_len = FXSYS_MultiByteToWideChar(
       codepage, 0, bstr.unterminated_c_str(), src_len, nullptr, 0);
   if (!dest_len)
-    return CFX_WideString();
+    return WideString();
 
-  CFX_WideString wstr;
+  WideString wstr;
   wchar_t* dest_buf = wstr.GetBuffer(dest_len);
   FXSYS_MultiByteToWideChar(codepage, 0, bstr.unterminated_c_str(), src_len,
                             dest_buf, dest_len);
@@ -280,40 +280,40 @@
 
 }  // namespace
 
-static_assert(sizeof(CFX_WideString) <= sizeof(wchar_t*),
+namespace fxcrt {
+
+static_assert(sizeof(WideString) <= sizeof(wchar_t*),
               "Strings must not require more space than pointers");
 
-CFX_WideString::CFX_WideString() {}
+WideString::WideString() {}
 
-CFX_WideString::CFX_WideString(const CFX_WideString& other)
-    : m_pData(other.m_pData) {}
+WideString::WideString(const WideString& other) : m_pData(other.m_pData) {}
 
-CFX_WideString::CFX_WideString(CFX_WideString&& other) noexcept {
+WideString::WideString(WideString&& other) noexcept {
   m_pData.Swap(other.m_pData);
 }
 
-CFX_WideString::CFX_WideString(const wchar_t* pStr, FX_STRSIZE nLen) {
+WideString::WideString(const wchar_t* pStr, FX_STRSIZE nLen) {
   if (nLen)
     m_pData.Reset(StringData::Create(pStr, nLen));
 }
 
-CFX_WideString::CFX_WideString(wchar_t ch) {
+WideString::WideString(wchar_t ch) {
   m_pData.Reset(StringData::Create(1));
   m_pData->m_String[0] = ch;
 }
 
-CFX_WideString::CFX_WideString(const wchar_t* ptr)
-    : CFX_WideString(ptr, ptr ? FXSYS_wcslen(ptr) : 0) {}
+WideString::WideString(const wchar_t* ptr)
+    : WideString(ptr, ptr ? FXSYS_wcslen(ptr) : 0) {}
 
-CFX_WideString::CFX_WideString(const CFX_WideStringC& stringSrc) {
+WideString::WideString(const WideStringView& stringSrc) {
   if (!stringSrc.IsEmpty()) {
     m_pData.Reset(StringData::Create(stringSrc.unterminated_c_str(),
                                      stringSrc.GetLength()));
   }
 }
 
-CFX_WideString::CFX_WideString(const CFX_WideStringC& str1,
-                               const CFX_WideStringC& str2) {
+WideString::WideString(const WideStringView& str1, const WideStringView& str2) {
   FX_SAFE_STRSIZE nSafeLen = str1.GetLength();
   nSafeLen += str2.GetLength();
 
@@ -327,8 +327,7 @@
                           str2.GetLength());
 }
 
-CFX_WideString::CFX_WideString(
-    const std::initializer_list<CFX_WideStringC>& list) {
+WideString::WideString(const std::initializer_list<WideStringView>& list) {
   FX_SAFE_STRSIZE nSafeLen = 0;
   for (const auto& item : list)
     nSafeLen += item.GetLength();
@@ -347,9 +346,9 @@
   }
 }
 
-CFX_WideString::~CFX_WideString() {}
+WideString::~WideString() {}
 
-const CFX_WideString& CFX_WideString::operator=(const wchar_t* pStr) {
+const WideString& WideString::operator=(const wchar_t* pStr) {
   if (!pStr || !pStr[0])
     clear();
   else
@@ -358,8 +357,7 @@
   return *this;
 }
 
-const CFX_WideString& CFX_WideString::operator=(
-    const CFX_WideStringC& stringSrc) {
+const WideString& WideString::operator=(const WideStringView& stringSrc) {
   if (stringSrc.IsEmpty())
     clear();
   else
@@ -368,41 +366,40 @@
   return *this;
 }
 
-const CFX_WideString& CFX_WideString::operator=(
-    const CFX_WideString& stringSrc) {
+const WideString& WideString::operator=(const WideString& stringSrc) {
   if (m_pData != stringSrc.m_pData)
     m_pData = stringSrc.m_pData;
 
   return *this;
 }
 
-const CFX_WideString& CFX_WideString::operator+=(const wchar_t* pStr) {
+const WideString& WideString::operator+=(const wchar_t* pStr) {
   if (pStr)
     Concat(pStr, FXSYS_wcslen(pStr));
 
   return *this;
 }
 
-const CFX_WideString& CFX_WideString::operator+=(wchar_t ch) {
+const WideString& WideString::operator+=(wchar_t ch) {
   Concat(&ch, 1);
   return *this;
 }
 
-const CFX_WideString& CFX_WideString::operator+=(const CFX_WideString& str) {
+const WideString& WideString::operator+=(const WideString& str) {
   if (str.m_pData)
     Concat(str.m_pData->m_String, str.m_pData->m_nDataLength);
 
   return *this;
 }
 
-const CFX_WideString& CFX_WideString::operator+=(const CFX_WideStringC& str) {
+const WideString& WideString::operator+=(const WideStringView& str) {
   if (!str.IsEmpty())
     Concat(str.unterminated_c_str(), str.GetLength());
 
   return *this;
 }
 
-bool CFX_WideString::operator==(const wchar_t* ptr) const {
+bool WideString::operator==(const wchar_t* ptr) const {
   if (!m_pData)
     return !ptr || !ptr[0];
 
@@ -413,7 +410,7 @@
          wmemcmp(ptr, m_pData->m_String, m_pData->m_nDataLength) == 0;
 }
 
-bool CFX_WideString::operator==(const CFX_WideStringC& str) const {
+bool WideString::operator==(const WideStringView& str) const {
   if (!m_pData)
     return str.IsEmpty();
 
@@ -422,7 +419,7 @@
                  str.GetLength()) == 0;
 }
 
-bool CFX_WideString::operator==(const CFX_WideString& other) const {
+bool WideString::operator==(const WideString& other) const {
   if (m_pData == other.m_pData)
     return true;
 
@@ -437,7 +434,7 @@
                  m_pData->m_nDataLength) == 0;
 }
 
-bool CFX_WideString::operator<(const CFX_WideString& str) const {
+bool WideString::operator<(const WideString& str) const {
   if (m_pData == str.m_pData)
     return false;
 
@@ -446,13 +443,13 @@
   return result < 0 || (result == 0 && GetLength() < str.GetLength());
 }
 
-void CFX_WideString::AssignCopy(const wchar_t* pSrcData, FX_STRSIZE nSrcLen) {
+void WideString::AssignCopy(const wchar_t* pSrcData, FX_STRSIZE nSrcLen) {
   AllocBeforeWrite(nSrcLen);
   m_pData->CopyContents(pSrcData, nSrcLen);
   m_pData->m_nDataLength = nSrcLen;
 }
 
-void CFX_WideString::ReallocBeforeWrite(FX_STRSIZE nNewLength) {
+void WideString::ReallocBeforeWrite(FX_STRSIZE nNewLength) {
   if (m_pData && m_pData->CanOperateInPlace(nNewLength))
     return;
 
@@ -473,7 +470,7 @@
   m_pData.Swap(pNewData);
 }
 
-void CFX_WideString::AllocBeforeWrite(FX_STRSIZE nNewLength) {
+void WideString::AllocBeforeWrite(FX_STRSIZE nNewLength) {
   if (m_pData && m_pData->CanOperateInPlace(nNewLength))
     return;
 
@@ -485,7 +482,7 @@
   m_pData.Reset(StringData::Create(nNewLength));
 }
 
-void CFX_WideString::ReleaseBuffer(FX_STRSIZE nNewLength) {
+void WideString::ReleaseBuffer(FX_STRSIZE nNewLength) {
   if (!m_pData)
     return;
 
@@ -501,16 +498,16 @@
   if (m_pData->m_nAllocLength - nNewLength >= 32) {
     // Over arbitrary threshold, so pay the price to relocate.  Force copy to
     // always occur by holding a second reference to the string.
-    CFX_WideString preserve(*this);
+    WideString preserve(*this);
     ReallocBeforeWrite(nNewLength);
   }
 }
 
-void CFX_WideString::Reserve(FX_STRSIZE len) {
+void WideString::Reserve(FX_STRSIZE len) {
   GetBuffer(len);
 }
 
-wchar_t* CFX_WideString::GetBuffer(FX_STRSIZE nMinBufLength) {
+wchar_t* WideString::GetBuffer(FX_STRSIZE nMinBufLength) {
   if (!m_pData) {
     if (nMinBufLength == 0)
       return nullptr;
@@ -535,7 +532,7 @@
   return m_pData->m_String;
 }
 
-FX_STRSIZE CFX_WideString::Delete(FX_STRSIZE index, FX_STRSIZE count) {
+FX_STRSIZE WideString::Delete(FX_STRSIZE index, FX_STRSIZE count) {
   if (!m_pData)
     return 0;
 
@@ -556,7 +553,7 @@
   return m_pData->m_nDataLength;
 }
 
-void CFX_WideString::Concat(const wchar_t* pSrcData, FX_STRSIZE nSrcLen) {
+void WideString::Concat(const wchar_t* pSrcData, FX_STRSIZE nSrcLen) {
   if (!pSrcData || nSrcLen == 0)
     return;
 
@@ -578,16 +575,16 @@
   m_pData.Swap(pNewData);
 }
 
-CFX_ByteString CFX_WideString::UTF8Encode() const {
-  return FX_UTF8Encode(AsStringC());
+ByteString WideString::UTF8Encode() const {
+  return FX_UTF8Encode(AsStringView());
 }
 
-CFX_ByteString CFX_WideString::UTF16LE_Encode() const {
+ByteString WideString::UTF16LE_Encode() const {
   if (!m_pData) {
-    return CFX_ByteString("\0\0", 2);
+    return ByteString("\0\0", 2);
   }
   int len = m_pData->m_nDataLength;
-  CFX_ByteString result;
+  ByteString result;
   char* buffer = result.GetBuffer(len * 2 + 2);
   for (int i = 0; i < len; i++) {
     buffer[i * 2] = m_pData->m_String[i] & 0xff;
@@ -599,42 +596,42 @@
   return result;
 }
 
-CFX_WideString CFX_WideString::Mid(FX_STRSIZE first, FX_STRSIZE count) const {
+WideString WideString::Mid(FX_STRSIZE first, FX_STRSIZE count) const {
   if (!m_pData)
-    return CFX_WideString();
+    return WideString();
 
   if (!IsValidIndex(first))
-    return CFX_WideString();
+    return WideString();
 
   if (count == 0 || !IsValidLength(count))
-    return CFX_WideString();
+    return WideString();
 
   if (!IsValidIndex(first + count - 1))
-    return CFX_WideString();
+    return WideString();
 
   if (first == 0 && count == GetLength())
     return *this;
 
-  CFX_WideString dest;
+  WideString dest;
   AllocCopy(dest, count, first);
   return dest;
 }
 
-CFX_WideString CFX_WideString::Left(FX_STRSIZE count) const {
+WideString WideString::Left(FX_STRSIZE count) const {
   if (count == 0 || !IsValidLength(count))
-    return CFX_WideString();
+    return WideString();
   return Mid(0, count);
 }
 
-CFX_WideString CFX_WideString::Right(FX_STRSIZE count) const {
+WideString WideString::Right(FX_STRSIZE count) const {
   if (count == 0 || !IsValidLength(count))
-    return CFX_WideString();
+    return WideString();
   return Mid(GetLength() - count, count);
 }
 
-void CFX_WideString::AllocCopy(CFX_WideString& dest,
-                               FX_STRSIZE nCopyLen,
-                               FX_STRSIZE nCopyIndex) const {
+void WideString::AllocCopy(WideString& dest,
+                           FX_STRSIZE nCopyLen,
+                           FX_STRSIZE nCopyIndex) const {
   if (nCopyLen == 0)
     return;
 
@@ -643,9 +640,9 @@
   dest.m_pData.Swap(pNewData);
 }
 
-bool CFX_WideString::TryVSWPrintf(FX_STRSIZE size,
-                                  const wchar_t* pFormat,
-                                  va_list argList) {
+bool WideString::TryVSWPrintf(FX_STRSIZE size,
+                              const wchar_t* pFormat,
+                              va_list argList) {
   GetBuffer(size);
   if (!m_pData)
     return true;
@@ -663,7 +660,7 @@
   return bSufficientBuffer;
 }
 
-void CFX_WideString::FormatV(const wchar_t* format, va_list argList) {
+void WideString::FormatV(const wchar_t* format, va_list argList) {
   va_list argListCopy;
   va_copy(argListCopy, argList);
   int maxLen = vswprintf(nullptr, 0, format, argListCopy);
@@ -687,14 +684,14 @@
   }
 }
 
-void CFX_WideString::Format(const wchar_t* pFormat, ...) {
+void WideString::Format(const wchar_t* pFormat, ...) {
   va_list argList;
   va_start(argList, pFormat);
   FormatV(pFormat, argList);
   va_end(argList);
 }
 
-FX_STRSIZE CFX_WideString::Insert(FX_STRSIZE location, wchar_t ch) {
+FX_STRSIZE WideString::Insert(FX_STRSIZE location, wchar_t ch) {
   const FX_STRSIZE cur_length = m_pData ? m_pData->m_nDataLength : 0;
   if (!IsValidLength(location))
     return cur_length;
@@ -708,8 +705,8 @@
   return new_length;
 }
 
-pdfium::Optional<FX_STRSIZE> CFX_WideString::Find(wchar_t ch,
-                                                  FX_STRSIZE start) const {
+pdfium::Optional<FX_STRSIZE> WideString::Find(wchar_t ch,
+                                              FX_STRSIZE start) const {
   if (!m_pData)
     return pdfium::Optional<FX_STRSIZE>();
 
@@ -723,8 +720,8 @@
               : pdfium::Optional<FX_STRSIZE>();
 }
 
-pdfium::Optional<FX_STRSIZE> CFX_WideString::Find(const CFX_WideStringC& subStr,
-                                                  FX_STRSIZE start) const {
+pdfium::Optional<FX_STRSIZE> WideString::Find(const WideStringView& subStr,
+                                              FX_STRSIZE start) const {
   if (!m_pData)
     return pdfium::Optional<FX_STRSIZE>();
 
@@ -739,7 +736,7 @@
               : pdfium::Optional<FX_STRSIZE>();
 }
 
-void CFX_WideString::MakeLower() {
+void WideString::MakeLower() {
   if (!m_pData)
     return;
 
@@ -747,7 +744,7 @@
   FXSYS_wcslwr(m_pData->m_String);
 }
 
-void CFX_WideString::MakeUpper() {
+void WideString::MakeUpper() {
   if (!m_pData)
     return;
 
@@ -755,7 +752,7 @@
   FXSYS_wcsupr(m_pData->m_String);
 }
 
-FX_STRSIZE CFX_WideString::Remove(wchar_t chRemove) {
+FX_STRSIZE WideString::Remove(wchar_t chRemove) {
   if (!m_pData || m_pData->m_nDataLength < 1)
     return 0;
 
@@ -789,8 +786,8 @@
   return count;
 }
 
-FX_STRSIZE CFX_WideString::Replace(const CFX_WideStringC& pOld,
-                                   const CFX_WideStringC& pNew) {
+FX_STRSIZE WideString::Replace(const WideStringView& pOld,
+                               const WideStringView& pNew) {
   if (!m_pData || pOld.IsEmpty())
     return 0;
 
@@ -837,36 +834,36 @@
 }
 
 // static
-CFX_WideString CFX_WideString::FromLocal(const CFX_ByteStringC& str) {
+WideString WideString::FromLocal(const ByteStringView& str) {
   return FromCodePage(str, 0);
 }
 
 // static
-CFX_WideString CFX_WideString::FromCodePage(const CFX_ByteStringC& str,
-                                            uint16_t codepage) {
+WideString WideString::FromCodePage(const ByteStringView& str,
+                                    uint16_t codepage) {
   return GetWideString(codepage, str);
 }
 
 // static
-CFX_WideString CFX_WideString::FromUTF8(const CFX_ByteStringC& str) {
+WideString WideString::FromUTF8(const ByteStringView& str) {
   if (str.IsEmpty())
-    return CFX_WideString();
+    return WideString();
 
   CFX_UTF8Decoder decoder;
   for (FX_STRSIZE i = 0; i < str.GetLength(); i++)
     decoder.Input(str[i]);
 
-  return CFX_WideString(decoder.GetResult());
+  return WideString(decoder.GetResult());
 }
 
 // static
-CFX_WideString CFX_WideString::FromUTF16LE(const unsigned short* wstr,
-                                           FX_STRSIZE wlen) {
+WideString WideString::FromUTF16LE(const unsigned short* wstr,
+                                   FX_STRSIZE wlen) {
   if (!wstr || wlen == 0) {
-    return CFX_WideString();
+    return WideString();
   }
 
-  CFX_WideString result;
+  WideString result;
   wchar_t* buf = result.GetBuffer(wlen);
   for (FX_STRSIZE i = 0; i < wlen; i++) {
     buf[i] = wstr[i];
@@ -875,19 +872,19 @@
   return result;
 }
 
-void CFX_WideString::SetAt(FX_STRSIZE index, wchar_t c) {
+void WideString::SetAt(FX_STRSIZE index, wchar_t c) {
   ASSERT(IsValidIndex(index));
   ReallocBeforeWrite(m_pData->m_nDataLength);
   m_pData->m_String[index] = c;
 }
 
-int CFX_WideString::Compare(const wchar_t* lpsz) const {
+int WideString::Compare(const wchar_t* lpsz) const {
   if (m_pData)
     return wcscmp(m_pData->m_String, lpsz);
   return (!lpsz || lpsz[0] == 0) ? 0 : -1;
 }
 
-int CFX_WideString::Compare(const CFX_WideString& str) const {
+int WideString::Compare(const WideString& str) const {
   if (!m_pData) {
     if (!str.m_pData) {
       return 0;
@@ -917,14 +914,14 @@
   return 0;
 }
 
-int CFX_WideString::CompareNoCase(const wchar_t* lpsz) const {
+int WideString::CompareNoCase(const wchar_t* lpsz) const {
   if (!m_pData) {
     return (!lpsz || lpsz[0] == 0) ? 0 : -1;
   }
   return FXSYS_wcsicmp(m_pData->m_String, lpsz);
 }
 
-FX_STRSIZE CFX_WideString::WStringLength(const unsigned short* str) {
+FX_STRSIZE WideString::WStringLength(const unsigned short* str) {
   FX_STRSIZE len = 0;
   if (str)
     while (str[len])
@@ -932,7 +929,7 @@
   return len;
 }
 
-void CFX_WideString::TrimRight(const CFX_WideStringC& pTargets) {
+void WideString::TrimRight(const WideStringView& pTargets) {
   if (IsEmpty() || pTargets.IsEmpty())
     return;
 
@@ -947,16 +944,16 @@
   }
 }
 
-void CFX_WideString::TrimRight(wchar_t chTarget) {
+void WideString::TrimRight(wchar_t chTarget) {
   wchar_t str[2] = {chTarget, 0};
   TrimRight(str);
 }
 
-void CFX_WideString::TrimRight() {
+void WideString::TrimRight() {
   TrimRight(L"\x09\x0a\x0b\x0c\x0d\x20");
 }
 
-void CFX_WideString::TrimLeft(const CFX_WideStringC& pTargets) {
+void WideString::TrimLeft(const WideStringView& pTargets) {
   if (!m_pData || pTargets.IsEmpty())
     return;
 
@@ -986,12 +983,12 @@
   m_pData->m_nDataLength = nDataLength;
 }
 
-void CFX_WideString::TrimLeft(wchar_t chTarget) {
+void WideString::TrimLeft(wchar_t chTarget) {
   wchar_t str[2] = {chTarget, 0};
   TrimLeft(str);
 }
 
-void CFX_WideString::TrimLeft() {
+void WideString::TrimLeft() {
   TrimLeft(L"\x09\x0a\x0b\x0c\x0d\x20");
 }
 float FX_wtof(const wchar_t* str, int len) {
@@ -1028,28 +1025,30 @@
   return bNegative ? -fraction : fraction;
 }
 
-int CFX_WideString::GetInteger() const {
+int WideString::GetInteger() const {
   return m_pData ? FXSYS_wtoi(m_pData->m_String) : 0;
 }
 
-float CFX_WideString::GetFloat() const {
+float WideString::GetFloat() const {
   return m_pData ? FX_wtof(m_pData->m_String, m_pData->m_nDataLength) : 0.0f;
 }
 
-std::wostream& operator<<(std::wostream& os, const CFX_WideString& str) {
+std::wostream& operator<<(std::wostream& os, const WideString& str) {
   return os.write(str.c_str(), str.GetLength());
 }
 
-std::ostream& operator<<(std::ostream& os, const CFX_WideString& str) {
+std::ostream& operator<<(std::ostream& os, const WideString& str) {
   os << str.UTF8Encode();
   return os;
 }
 
-std::wostream& operator<<(std::wostream& os, const CFX_WideStringC& str) {
+std::wostream& operator<<(std::wostream& os, const WideStringView& str) {
   return os.write(str.unterminated_c_str(), str.GetLength());
 }
 
-std::ostream& operator<<(std::ostream& os, const CFX_WideStringC& str) {
+std::ostream& operator<<(std::ostream& os, const WideStringView& str) {
   os << FX_UTF8Encode(str);
   return os;
 }
+
+}  // namespace fxcrt
diff --git a/core/fxcrt/widestring.h b/core/fxcrt/widestring.h
new file mode 100644
index 0000000..8841c84
--- /dev/null
+++ b/core/fxcrt/widestring.h
@@ -0,0 +1,277 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef CORE_FXCRT_WIDESTRING_H_
+#define CORE_FXCRT_WIDESTRING_H_
+
+#include <functional>
+#include <iterator>
+#include <utility>
+
+#include "core/fxcrt/cfx_retain_ptr.h"
+#include "core/fxcrt/cfx_string_data_template.h"
+#include "core/fxcrt/fx_memory.h"
+#include "core/fxcrt/fx_system.h"
+#include "core/fxcrt/string_view_template.h"
+#include "third_party/base/optional.h"
+
+class WideString_ConcatInPlace_Test;
+class fxcrt_WideStringPool_Test;
+
+namespace fxcrt {
+
+class ByteString;
+
+// A mutable string with shared buffers using copy-on-write semantics that
+// avoids the cost of std::string's iterator stability guarantees.
+class WideString {
+ public:
+  using CharType = wchar_t;
+  using const_iterator = const CharType*;
+  using const_reverse_iterator = std::reverse_iterator<const_iterator>;
+
+  WideString();
+  WideString(const WideString& other);
+  WideString(WideString&& other) noexcept;
+
+  // Deliberately implicit to avoid calling on every string literal.
+  // NOLINTNEXTLINE(runtime/explicit)
+  WideString(wchar_t ch);
+  // NOLINTNEXTLINE(runtime/explicit)
+  WideString(const wchar_t* ptr);
+
+  // No implicit conversions from byte strings.
+  // NOLINTNEXTLINE(runtime/explicit)
+  WideString(char) = delete;
+
+  WideString(const wchar_t* ptr, FX_STRSIZE len);
+
+  explicit WideString(const WideStringView& str);
+  WideString(const WideStringView& str1, const WideStringView& str2);
+  WideString(const std::initializer_list<WideStringView>& list);
+
+  ~WideString();
+
+  static WideString FromLocal(const ByteStringView& str);
+  static WideString FromCodePage(const ByteStringView& str, uint16_t codepage);
+
+  static WideString FromUTF8(const ByteStringView& str);
+  static WideString FromUTF16LE(const unsigned short* str, FX_STRSIZE len);
+
+  static FX_STRSIZE WStringLength(const unsigned short* str);
+
+  // Explicit conversion to C-style wide string.
+  // Note: Any subsequent modification of |this| will invalidate the result.
+  const wchar_t* c_str() const { return m_pData ? m_pData->m_String : L""; }
+
+  // Explicit conversion to WideStringView.
+  // Note: Any subsequent modification of |this| will invalidate the result.
+  WideStringView AsStringView() const {
+    return WideStringView(c_str(), GetLength());
+  }
+
+  // Note: Any subsequent modification of |this| will invalidate iterators.
+  const_iterator begin() const { return m_pData ? m_pData->m_String : nullptr; }
+  const_iterator end() const {
+    return m_pData ? m_pData->m_String + m_pData->m_nDataLength : nullptr;
+  }
+
+  // Note: Any subsequent modification of |this| will invalidate iterators.
+  const_reverse_iterator rbegin() const {
+    return const_reverse_iterator(end());
+  }
+  const_reverse_iterator rend() const {
+    return const_reverse_iterator(begin());
+  }
+
+  void clear() { m_pData.Reset(); }
+
+  FX_STRSIZE GetLength() const { return m_pData ? m_pData->m_nDataLength : 0; }
+  FX_STRSIZE GetStringLength() const {
+    return m_pData ? FXSYS_wcslen(m_pData->m_String) : 0;
+  }
+  bool IsEmpty() const { return !GetLength(); }
+  bool IsValidIndex(FX_STRSIZE index) const { return index < GetLength(); }
+  bool IsValidLength(FX_STRSIZE length) const { return length <= GetLength(); }
+
+  const WideString& operator=(const wchar_t* str);
+  const WideString& operator=(const WideString& stringSrc);
+  const WideString& operator=(const WideStringView& stringSrc);
+
+  const WideString& operator+=(const wchar_t* str);
+  const WideString& operator+=(wchar_t ch);
+  const WideString& operator+=(const WideString& str);
+  const WideString& operator+=(const WideStringView& str);
+
+  bool operator==(const wchar_t* ptr) const;
+  bool operator==(const WideStringView& str) const;
+  bool operator==(const WideString& other) const;
+
+  bool operator!=(const wchar_t* ptr) const { return !(*this == ptr); }
+  bool operator!=(const WideStringView& str) const { return !(*this == str); }
+  bool operator!=(const WideString& other) const { return !(*this == other); }
+
+  bool operator<(const WideString& str) const;
+
+  CharType operator[](const FX_STRSIZE index) const {
+    ASSERT(IsValidIndex(index));
+    return m_pData ? m_pData->m_String[index] : 0;
+  }
+
+  CharType First() const { return GetLength() ? (*this)[0] : 0; }
+  CharType Last() const { return GetLength() ? (*this)[GetLength() - 1] : 0; }
+
+  void SetAt(FX_STRSIZE index, wchar_t c);
+
+  int Compare(const wchar_t* str) const;
+  int Compare(const WideString& str) const;
+  int CompareNoCase(const wchar_t* str) const;
+
+  WideString Mid(FX_STRSIZE first, FX_STRSIZE count) const;
+  WideString Left(FX_STRSIZE count) const;
+  WideString Right(FX_STRSIZE count) const;
+
+  FX_STRSIZE Insert(FX_STRSIZE index, wchar_t ch);
+  FX_STRSIZE InsertAtFront(wchar_t ch) { return Insert(0, ch); }
+  FX_STRSIZE InsertAtBack(wchar_t ch) { return Insert(GetLength(), ch); }
+  FX_STRSIZE Delete(FX_STRSIZE index, FX_STRSIZE count = 1);
+
+  void Format(const wchar_t* lpszFormat, ...);
+  void FormatV(const wchar_t* lpszFormat, va_list argList);
+
+  void MakeLower();
+  void MakeUpper();
+
+  void TrimRight();
+  void TrimRight(wchar_t chTarget);
+  void TrimRight(const WideStringView& pTargets);
+
+  void TrimLeft();
+  void TrimLeft(wchar_t chTarget);
+  void TrimLeft(const WideStringView& pTargets);
+
+  void Reserve(FX_STRSIZE len);
+  wchar_t* GetBuffer(FX_STRSIZE len);
+  void ReleaseBuffer(FX_STRSIZE len);
+
+  int GetInteger() const;
+  float GetFloat() const;
+
+  pdfium::Optional<FX_STRSIZE> Find(const WideStringView& pSub,
+                                    FX_STRSIZE start = 0) const;
+  pdfium::Optional<FX_STRSIZE> Find(wchar_t ch, FX_STRSIZE start = 0) const;
+
+  bool Contains(const WideStringView& lpszSub, FX_STRSIZE start = 0) const {
+    return Find(lpszSub, start).has_value();
+  }
+
+  bool Contains(char ch, FX_STRSIZE start = 0) const {
+    return Find(ch, start).has_value();
+  }
+
+  FX_STRSIZE Replace(const WideStringView& pOld, const WideStringView& pNew);
+  FX_STRSIZE Remove(wchar_t ch);
+
+  ByteString UTF8Encode() const;
+  ByteString UTF16LE_Encode() const;
+
+ protected:
+  using StringData = CFX_StringDataTemplate<wchar_t>;
+
+  void ReallocBeforeWrite(FX_STRSIZE nLen);
+  void AllocBeforeWrite(FX_STRSIZE nLen);
+  void AllocCopy(WideString& dest,
+                 FX_STRSIZE nCopyLen,
+                 FX_STRSIZE nCopyIndex) const;
+  void AssignCopy(const wchar_t* pSrcData, FX_STRSIZE nSrcLen);
+  void Concat(const wchar_t* lpszSrcData, FX_STRSIZE nSrcLen);
+
+  // Returns true unless we ran out of space.
+  bool TryVSWPrintf(FX_STRSIZE size, const wchar_t* format, va_list argList);
+
+  CFX_RetainPtr<StringData> m_pData;
+
+  friend WideString_ConcatInPlace_Test;
+  friend fxcrt_WideStringPool_Test;
+};
+
+inline WideString operator+(const WideStringView& str1,
+                            const WideStringView& str2) {
+  return WideString(str1, str2);
+}
+inline WideString operator+(const WideStringView& str1, const wchar_t* str2) {
+  return WideString(str1, str2);
+}
+inline WideString operator+(const wchar_t* str1, const WideStringView& str2) {
+  return WideString(str1, str2);
+}
+inline WideString operator+(const WideStringView& str1, wchar_t ch) {
+  return WideString(str1, WideStringView(ch));
+}
+inline WideString operator+(wchar_t ch, const WideStringView& str2) {
+  return WideString(ch, str2);
+}
+inline WideString operator+(const WideString& str1, const WideString& str2) {
+  return WideString(str1.AsStringView(), str2.AsStringView());
+}
+inline WideString operator+(const WideString& str1, wchar_t ch) {
+  return WideString(str1.AsStringView(), WideStringView(ch));
+}
+inline WideString operator+(wchar_t ch, const WideString& str2) {
+  return WideString(ch, str2.AsStringView());
+}
+inline WideString operator+(const WideString& str1, const wchar_t* str2) {
+  return WideString(str1.AsStringView(), str2);
+}
+inline WideString operator+(const wchar_t* str1, const WideString& str2) {
+  return WideString(str1, str2.AsStringView());
+}
+inline WideString operator+(const WideString& str1,
+                            const WideStringView& str2) {
+  return WideString(str1.AsStringView(), str2);
+}
+inline WideString operator+(const WideStringView& str1,
+                            const WideString& str2) {
+  return WideString(str1, str2.AsStringView());
+}
+inline bool operator==(const wchar_t* lhs, const WideString& rhs) {
+  return rhs == lhs;
+}
+inline bool operator==(const WideStringView& lhs, const WideString& rhs) {
+  return rhs == lhs;
+}
+inline bool operator!=(const wchar_t* lhs, const WideString& rhs) {
+  return rhs != lhs;
+}
+inline bool operator!=(const WideStringView& lhs, const WideString& rhs) {
+  return rhs != lhs;
+}
+
+std::wostream& operator<<(std::wostream& os, const WideString& str);
+std::ostream& operator<<(std::ostream& os, const WideString& str);
+std::wostream& operator<<(std::wostream& os, const WideStringView& str);
+std::ostream& operator<<(std::ostream& os, const WideStringView& str);
+
+}  // namespace fxcrt
+
+using WideString = fxcrt::WideString;
+
+uint32_t FX_HashCode_GetW(const WideStringView& str, bool bIgnoreCase);
+
+namespace std {
+
+template <>
+struct hash<WideString> {
+  std::size_t operator()(const WideString& str) const {
+    return FX_HashCode_GetW(str.AsStringView(), false);
+  }
+};
+
+}  // namespace std
+
+extern template struct std::hash<WideString>;
+
+#endif  // CORE_FXCRT_WIDESTRING_H_
diff --git a/core/fxcrt/cfx_widestring_unittest.cpp b/core/fxcrt/widestring_unittest.cpp
similarity index 77%
rename from core/fxcrt/cfx_widestring_unittest.cpp
rename to core/fxcrt/widestring_unittest.cpp
index 6f3bc08..949827f 100644
--- a/core/fxcrt/cfx_widestring_unittest.cpp
+++ b/core/fxcrt/widestring_unittest.cpp
@@ -2,16 +2,16 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-#include "core/fxcrt/cfx_widestring.h"
-#include "core/fxcrt/fx_string.h"
+#include "core/fxcrt/widestring.h"
 
 #include <algorithm>
 #include <vector>
 
+#include "core/fxcrt/fx_string.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
-TEST(fxcrt, WideStringElementAccess) {
-  const CFX_WideString abc(L"abc");
+TEST(WideString, ElementAccess) {
+  const WideString abc(L"abc");
   EXPECT_EQ(L'a', abc[0]);
   EXPECT_EQ(L'b', abc[1]);
   EXPECT_EQ(L'c', abc[2]);
@@ -19,7 +19,7 @@
   EXPECT_DEATH({ abc[4]; }, ".*");
 #endif
 
-  CFX_WideString mutable_abc = abc;
+  WideString mutable_abc = abc;
   EXPECT_EQ(abc.c_str(), mutable_abc.c_str());
   EXPECT_EQ(L'a', mutable_abc[0]);
   EXPECT_EQ(L'b', mutable_abc[1]);
@@ -47,11 +47,11 @@
 #endif
 }
 
-TEST(fxcrt, WideStringOperatorLT) {
-  CFX_WideString empty;
-  CFX_WideString a(L"a");
-  CFX_WideString abc(L"\x0110qq");  // Comes before despite endianness.
-  CFX_WideString def(L"\x1001qq");  // Comes after despite endianness.
+TEST(WideString, OperatorLT) {
+  WideString empty;
+  WideString a(L"a");
+  WideString abc(L"\x0110qq");  // Comes before despite endianness.
+  WideString def(L"\x1001qq");  // Comes after despite endianness.
 
   EXPECT_FALSE(empty < empty);
   EXPECT_FALSE(a < a);
@@ -77,16 +77,16 @@
   EXPECT_FALSE(def < abc);
 }
 
-TEST(fxcrt, WideStringOperatorEQ) {
-  CFX_WideString null_string;
+TEST(WideString, OperatorEQ) {
+  WideString null_string;
   EXPECT_TRUE(null_string == null_string);
 
-  CFX_WideString empty_string(L"");
+  WideString empty_string(L"");
   EXPECT_TRUE(empty_string == empty_string);
   EXPECT_TRUE(empty_string == null_string);
   EXPECT_TRUE(null_string == empty_string);
 
-  CFX_WideString deleted_string(L"hello");
+  WideString deleted_string(L"hello");
   deleted_string.Delete(0, 5);
   EXPECT_TRUE(deleted_string == deleted_string);
   EXPECT_TRUE(deleted_string == null_string);
@@ -94,7 +94,7 @@
   EXPECT_TRUE(null_string == deleted_string);
   EXPECT_TRUE(null_string == empty_string);
 
-  CFX_WideString wide_string(L"hello");
+  WideString wide_string(L"hello");
   EXPECT_TRUE(wide_string == wide_string);
   EXPECT_FALSE(wide_string == null_string);
   EXPECT_FALSE(wide_string == empty_string);
@@ -103,17 +103,17 @@
   EXPECT_FALSE(empty_string == wide_string);
   EXPECT_FALSE(deleted_string == wide_string);
 
-  CFX_WideString wide_string_same1(L"hello");
+  WideString wide_string_same1(L"hello");
   EXPECT_TRUE(wide_string == wide_string_same1);
   EXPECT_TRUE(wide_string_same1 == wide_string);
 
-  CFX_WideString wide_string_same2(wide_string);
+  WideString wide_string_same2(wide_string);
   EXPECT_TRUE(wide_string == wide_string_same2);
   EXPECT_TRUE(wide_string_same2 == wide_string);
 
-  CFX_WideString wide_string1(L"he");
-  CFX_WideString wide_string2(L"hellp");
-  CFX_WideString wide_string3(L"hellod");
+  WideString wide_string1(L"he");
+  WideString wide_string2(L"hellp");
+  WideString wide_string3(L"hellod");
   EXPECT_FALSE(wide_string == wide_string1);
   EXPECT_FALSE(wide_string == wide_string2);
   EXPECT_FALSE(wide_string == wide_string3);
@@ -121,8 +121,8 @@
   EXPECT_FALSE(wide_string2 == wide_string);
   EXPECT_FALSE(wide_string3 == wide_string);
 
-  CFX_WideStringC null_string_c;
-  CFX_WideStringC empty_string_c(L"");
+  WideStringView null_string_c;
+  WideStringView empty_string_c(L"");
   EXPECT_TRUE(null_string == null_string_c);
   EXPECT_TRUE(null_string == empty_string_c);
   EXPECT_TRUE(empty_string == null_string_c);
@@ -136,13 +136,13 @@
   EXPECT_TRUE(null_string_c == deleted_string);
   EXPECT_TRUE(empty_string_c == deleted_string);
 
-  CFX_WideStringC wide_string_c_same1(L"hello");
+  WideStringView wide_string_c_same1(L"hello");
   EXPECT_TRUE(wide_string == wide_string_c_same1);
   EXPECT_TRUE(wide_string_c_same1 == wide_string);
 
-  CFX_WideStringC wide_string_c1(L"he");
-  CFX_WideStringC wide_string_c2(L"hellp");
-  CFX_WideStringC wide_string_c3(L"hellod");
+  WideStringView wide_string_c1(L"he");
+  WideStringView wide_string_c2(L"hellp");
+  WideStringView wide_string_c3(L"hellod");
   EXPECT_FALSE(wide_string == wide_string_c1);
   EXPECT_FALSE(wide_string == wide_string_c2);
   EXPECT_FALSE(wide_string == wide_string_c3);
@@ -180,16 +180,16 @@
   EXPECT_FALSE(c_string3 == wide_string);
 }
 
-TEST(fxcrt, WideStringOperatorNE) {
-  CFX_WideString null_string;
+TEST(WideString, OperatorNE) {
+  WideString null_string;
   EXPECT_FALSE(null_string != null_string);
 
-  CFX_WideString empty_string(L"");
+  WideString empty_string(L"");
   EXPECT_FALSE(empty_string != empty_string);
   EXPECT_FALSE(empty_string != null_string);
   EXPECT_FALSE(null_string != empty_string);
 
-  CFX_WideString deleted_string(L"hello");
+  WideString deleted_string(L"hello");
   deleted_string.Delete(0, 5);
   EXPECT_FALSE(deleted_string != deleted_string);
   EXPECT_FALSE(deleted_string != null_string);
@@ -197,7 +197,7 @@
   EXPECT_FALSE(null_string != deleted_string);
   EXPECT_FALSE(null_string != empty_string);
 
-  CFX_WideString wide_string(L"hello");
+  WideString wide_string(L"hello");
   EXPECT_FALSE(wide_string != wide_string);
   EXPECT_TRUE(wide_string != null_string);
   EXPECT_TRUE(wide_string != empty_string);
@@ -206,17 +206,17 @@
   EXPECT_TRUE(empty_string != wide_string);
   EXPECT_TRUE(deleted_string != wide_string);
 
-  CFX_WideString wide_string_same1(L"hello");
+  WideString wide_string_same1(L"hello");
   EXPECT_FALSE(wide_string != wide_string_same1);
   EXPECT_FALSE(wide_string_same1 != wide_string);
 
-  CFX_WideString wide_string_same2(wide_string);
+  WideString wide_string_same2(wide_string);
   EXPECT_FALSE(wide_string != wide_string_same2);
   EXPECT_FALSE(wide_string_same2 != wide_string);
 
-  CFX_WideString wide_string1(L"he");
-  CFX_WideString wide_string2(L"hellp");
-  CFX_WideString wide_string3(L"hellod");
+  WideString wide_string1(L"he");
+  WideString wide_string2(L"hellp");
+  WideString wide_string3(L"hellod");
   EXPECT_TRUE(wide_string != wide_string1);
   EXPECT_TRUE(wide_string != wide_string2);
   EXPECT_TRUE(wide_string != wide_string3);
@@ -224,8 +224,8 @@
   EXPECT_TRUE(wide_string2 != wide_string);
   EXPECT_TRUE(wide_string3 != wide_string);
 
-  CFX_WideStringC null_string_c;
-  CFX_WideStringC empty_string_c(L"");
+  WideStringView null_string_c;
+  WideStringView empty_string_c(L"");
   EXPECT_FALSE(null_string != null_string_c);
   EXPECT_FALSE(null_string != empty_string_c);
   EXPECT_FALSE(empty_string != null_string_c);
@@ -237,13 +237,13 @@
   EXPECT_FALSE(null_string_c != empty_string);
   EXPECT_FALSE(empty_string_c != empty_string);
 
-  CFX_WideStringC wide_string_c_same1(L"hello");
+  WideStringView wide_string_c_same1(L"hello");
   EXPECT_FALSE(wide_string != wide_string_c_same1);
   EXPECT_FALSE(wide_string_c_same1 != wide_string);
 
-  CFX_WideStringC wide_string_c1(L"he");
-  CFX_WideStringC wide_string_c2(L"hellp");
-  CFX_WideStringC wide_string_c3(L"hellod");
+  WideStringView wide_string_c1(L"he");
+  WideStringView wide_string_c2(L"hellp");
+  WideStringView wide_string_c3(L"hellod");
   EXPECT_TRUE(wide_string != wide_string_c1);
   EXPECT_TRUE(wide_string != wide_string_c2);
   EXPECT_TRUE(wide_string != wide_string_c3);
@@ -281,8 +281,8 @@
   EXPECT_TRUE(c_string3 != wide_string);
 }
 
-TEST(fxcrt, WideStringConcatInPlace) {
-  CFX_WideString fred;
+TEST(WideString, ConcatInPlace) {
+  WideString fred;
   fred.Concat(L"FRED", 4);
   EXPECT_EQ(L"FRED", fred);
 
@@ -295,14 +295,14 @@
   fred.Concat(L"D", 1);
   EXPECT_EQ(L"FRED", fred);
 
-  CFX_WideString copy = fred;
+  WideString copy = fred;
   fred.Concat(L"DY", 2);
   EXPECT_EQ(L"FREDDY", fred);
   EXPECT_EQ(L"FRED", copy);
 }
 
-TEST(fxcrt, WideStringRemove) {
-  CFX_WideString freed(L"FREED");
+TEST(WideString, Remove) {
+  WideString freed(L"FREED");
   freed.Remove(L'E');
   EXPECT_EQ(L"FRD", freed);
   freed.Remove(L'F');
@@ -314,13 +314,13 @@
   freed.Remove(L'R');
   EXPECT_EQ(L"", freed);
 
-  CFX_WideString empty;
+  WideString empty;
   empty.Remove(L'X');
   EXPECT_EQ(L"", empty);
 }
 
-TEST(fxcrt, WideStringRemoveCopies) {
-  CFX_WideString freed(L"FREED");
+TEST(WideString, RemoveCopies) {
+  WideString freed(L"FREED");
   const wchar_t* old_buffer = freed.c_str();
 
   // No change with single reference - no copy.
@@ -334,7 +334,7 @@
   EXPECT_EQ(old_buffer, freed.c_str());
 
   // No change with multiple references - no copy.
-  CFX_WideString shared(freed);
+  WideString shared(freed);
   freed.Remove(L'Q');
   EXPECT_EQ(L"FRD", freed);
   EXPECT_EQ(old_buffer, freed.c_str());
@@ -348,8 +348,8 @@
   EXPECT_EQ(old_buffer, shared.c_str());
 }
 
-TEST(fxcrt, WideStringReplace) {
-  CFX_WideString fred(L"FRED");
+TEST(WideString, Replace) {
+  WideString fred(L"FRED");
   fred.Replace(L"FR", L"BL");
   EXPECT_EQ(L"BLED", fred);
   fred.Replace(L"D", L"DDY");
@@ -366,8 +366,8 @@
   EXPECT_EQ(L"", fred);
 }
 
-TEST(fxcrt, WideStringInsert) {
-  CFX_WideString fred(L"FRED");
+TEST(WideString, Insert) {
+  WideString fred(L"FRED");
   EXPECT_EQ(5u, fred.Insert(0, 'S'));
   EXPECT_EQ(L"SFRED", fred);
   EXPECT_EQ(6u, fred.Insert(1, 'T'));
@@ -379,20 +379,20 @@
   EXPECT_EQ(8u, fred.Insert(12, 'P'));
   EXPECT_EQ(L"STFRUEDV", fred);
   {
-    CFX_WideString empty;
+    WideString empty;
     EXPECT_EQ(1u, empty.Insert(0, 'X'));
     EXPECT_EQ(L"X", empty);
   }
   {
-    CFX_WideString empty;
+    WideString empty;
     EXPECT_EQ(0u, empty.Insert(5, 'X'));
     EXPECT_NE(L"X", empty);
   }
 }
 
-TEST(fxcrt, WideStringInsertAtFrontAndInsertAtBack) {
+TEST(WideString, InsertAtFrontAndInsertAtBack) {
   {
-    CFX_WideString empty;
+    WideString empty;
     EXPECT_EQ(1u, empty.InsertAtFront('D'));
     EXPECT_EQ(L"D", empty);
     EXPECT_EQ(2u, empty.InsertAtFront('E'));
@@ -403,7 +403,7 @@
     EXPECT_EQ(L"FRED", empty);
   }
   {
-    CFX_WideString empty;
+    WideString empty;
     EXPECT_EQ(1u, empty.InsertAtBack('F'));
     EXPECT_EQ(L"F", empty);
     EXPECT_EQ(2u, empty.InsertAtBack('R'));
@@ -414,7 +414,7 @@
     EXPECT_EQ(L"FRED", empty);
   }
   {
-    CFX_WideString empty;
+    WideString empty;
     EXPECT_EQ(1u, empty.InsertAtBack('E'));
     EXPECT_EQ(L"E", empty);
     EXPECT_EQ(2u, empty.InsertAtFront('R'));
@@ -426,8 +426,8 @@
   }
 }
 
-TEST(fxcrt, WideStringDelete) {
-  CFX_WideString fred(L"FRED");
+TEST(WideString, Delete) {
+  WideString fred(L"FRED");
   EXPECT_EQ(4u, fred.Delete(0, 0));
   EXPECT_EQ(L"FRED", fred);
   EXPECT_EQ(2u, fred.Delete(0, 2));
@@ -439,15 +439,15 @@
   EXPECT_EQ(0u, fred.Delete(0));
   EXPECT_EQ(L"", fred);
 
-  CFX_WideString empty;
+  WideString empty;
   EXPECT_EQ(0u, empty.Delete(0));
   EXPECT_EQ(L"", empty);
   EXPECT_EQ(0u, empty.Delete(1));
   EXPECT_EQ(L"", empty);
 }
 
-TEST(fxcrt, WideStringMid) {
-  CFX_WideString fred(L"FRED");
+TEST(WideString, Mid) {
+  WideString fred(L"FRED");
   EXPECT_EQ(L"", fred.Mid(0, 0));
   EXPECT_EQ(L"", fred.Mid(3, 0));
   EXPECT_EQ(L"FRED", fred.Mid(0, 4));
@@ -465,12 +465,12 @@
   EXPECT_EQ(L"", fred.Mid(1, 4));
   EXPECT_EQ(L"", fred.Mid(4, 1));
 
-  CFX_WideString empty;
+  WideString empty;
   EXPECT_EQ(L"", empty.Mid(0, 0));
 }
 
-TEST(fxcrt, WideStringLeft) {
-  CFX_WideString fred(L"FRED");
+TEST(WideString, Left) {
+  WideString fred(L"FRED");
   EXPECT_EQ(L"", fred.Left(0));
   EXPECT_EQ(L"F", fred.Left(1));
   EXPECT_EQ(L"FR", fred.Left(2));
@@ -479,13 +479,13 @@
 
   EXPECT_EQ(L"", fred.Left(5));
 
-  CFX_WideString empty;
+  WideString empty;
   EXPECT_EQ(L"", empty.Left(0));
   EXPECT_EQ(L"", empty.Left(1));
 }
 
-TEST(fxcrt, WideStringRight) {
-  CFX_WideString fred(L"FRED");
+TEST(WideString, Right) {
+  WideString fred(L"FRED");
   EXPECT_EQ(L"", fred.Right(0));
   EXPECT_EQ(L"D", fred.Right(1));
   EXPECT_EQ(L"ED", fred.Right(2));
@@ -494,29 +494,29 @@
 
   EXPECT_EQ(L"", fred.Right(5));
 
-  CFX_WideString empty;
+  WideString empty;
   EXPECT_EQ(L"", empty.Right(0));
   EXPECT_EQ(L"", empty.Right(1));
 }
 
-TEST(fxcrt, WideStringFind) {
-  CFX_WideString null_string;
+TEST(WideString, Find) {
+  WideString null_string;
   EXPECT_FALSE(null_string.Find(L'a').has_value());
   EXPECT_FALSE(null_string.Find(L'\0').has_value());
 
-  CFX_WideString empty_string(L"");
+  WideString empty_string(L"");
   EXPECT_FALSE(empty_string.Find(L'a').has_value());
   EXPECT_FALSE(empty_string.Find(L'\0').has_value());
 
   pdfium::Optional<FX_STRSIZE> result;
-  CFX_WideString single_string(L"a");
+  WideString single_string(L"a");
   result = single_string.Find(L'a');
   ASSERT_TRUE(result.has_value());
   EXPECT_EQ(0u, result.value());
   EXPECT_FALSE(single_string.Find(L'b').has_value());
   EXPECT_FALSE(single_string.Find(L'\0').has_value());
 
-  CFX_WideString longer_string(L"abccc");
+  WideString longer_string(L"abccc");
   result = longer_string.Find(L'a');
   ASSERT_TRUE(result.has_value());
   EXPECT_EQ(0u, result.value());
@@ -539,7 +539,7 @@
   EXPECT_EQ(3u, result.value());
   EXPECT_FALSE(longer_string.Find(L"d").has_value());
 
-  CFX_WideString hibyte_string(
+  WideString hibyte_string(
       L"ab\xff8c"
       L"def");
   result = hibyte_string.Find(L'\xff8c');
@@ -547,22 +547,22 @@
   EXPECT_EQ(2u, result.value());
 }
 
-TEST(fxcrt, WideStringUpperLower) {
-  CFX_WideString fred(L"F-Re.42D");
+TEST(WideString, UpperLower) {
+  WideString fred(L"F-Re.42D");
   fred.MakeLower();
   EXPECT_EQ(L"f-re.42d", fred);
   fred.MakeUpper();
   EXPECT_EQ(L"F-RE.42D", fred);
 
-  CFX_WideString empty;
+  WideString empty;
   empty.MakeLower();
   EXPECT_EQ(L"", empty);
   empty.MakeUpper();
   EXPECT_EQ(L"", empty);
 }
 
-TEST(fxcrt, WideStringTrimRight) {
-  CFX_WideString fred(L"  FRED  ");
+TEST(WideString, TrimRight) {
+  WideString fred(L"  FRED  ");
   fred.TrimRight();
   EXPECT_EQ(L"  FRED", fred);
   fred.TrimRight(L'E');
@@ -572,7 +572,7 @@
   fred.TrimRight(L"ERP");
   EXPECT_EQ(L"  F", fred);
 
-  CFX_WideString blank(L"   ");
+  WideString blank(L"   ");
   blank.TrimRight(L"ERP");
   EXPECT_EQ(L"   ", blank);
   blank.TrimRight(L'E');
@@ -580,7 +580,7 @@
   blank.TrimRight();
   EXPECT_EQ(L"", blank);
 
-  CFX_WideString empty;
+  WideString empty;
   empty.TrimRight(L"ERP");
   EXPECT_EQ(L"", empty);
   empty.TrimRight(L'E');
@@ -589,10 +589,10 @@
   EXPECT_EQ(L"", empty);
 }
 
-TEST(fxcrt, WideStringTrimRightCopies) {
+TEST(WideString, TrimRightCopies) {
   {
     // With a single reference, no copy takes place.
-    CFX_WideString fred(L"  FRED  ");
+    WideString fred(L"  FRED  ");
     const wchar_t* old_buffer = fred.c_str();
     fred.TrimRight();
     EXPECT_EQ(L"  FRED", fred);
@@ -600,8 +600,8 @@
   }
   {
     // With multiple references, we must copy.
-    CFX_WideString fred(L"  FRED  ");
-    CFX_WideString other_fred = fred;
+    WideString fred(L"  FRED  ");
+    WideString other_fred = fred;
     const wchar_t* old_buffer = fred.c_str();
     fred.TrimRight();
     EXPECT_EQ(L"  FRED", fred);
@@ -610,8 +610,8 @@
   }
   {
     // With multiple references, but no modifications, no copy.
-    CFX_WideString fred(L"FRED");
-    CFX_WideString other_fred = fred;
+    WideString fred(L"FRED");
+    WideString other_fred = fred;
     const wchar_t* old_buffer = fred.c_str();
     fred.TrimRight();
     EXPECT_EQ(L"FRED", fred);
@@ -620,8 +620,8 @@
   }
 }
 
-TEST(fxcrt, WideStringTrimLeft) {
-  CFX_WideString fred(L"  FRED  ");
+TEST(WideString, TrimLeft) {
+  WideString fred(L"  FRED  ");
   fred.TrimLeft();
   EXPECT_EQ(L"FRED  ", fred);
   fred.TrimLeft(L'E');
@@ -631,7 +631,7 @@
   fred.TrimLeft(L"ERP");
   EXPECT_EQ(L"D  ", fred);
 
-  CFX_WideString blank(L"   ");
+  WideString blank(L"   ");
   blank.TrimLeft(L"ERP");
   EXPECT_EQ(L"   ", blank);
   blank.TrimLeft(L'E');
@@ -639,7 +639,7 @@
   blank.TrimLeft();
   EXPECT_EQ(L"", blank);
 
-  CFX_WideString empty;
+  WideString empty;
   empty.TrimLeft(L"ERP");
   EXPECT_EQ(L"", empty);
   empty.TrimLeft(L'E');
@@ -648,10 +648,10 @@
   EXPECT_EQ(L"", empty);
 }
 
-TEST(fxcrt, WideStringTrimLeftCopies) {
+TEST(WideString, TrimLeftCopies) {
   {
     // With a single reference, no copy takes place.
-    CFX_WideString fred(L"  FRED  ");
+    WideString fred(L"  FRED  ");
     const wchar_t* old_buffer = fred.c_str();
     fred.TrimLeft();
     EXPECT_EQ(L"FRED  ", fred);
@@ -659,8 +659,8 @@
   }
   {
     // With multiple references, we must copy.
-    CFX_WideString fred(L"  FRED  ");
-    CFX_WideString other_fred = fred;
+    WideString fred(L"  FRED  ");
+    WideString other_fred = fred;
     const wchar_t* old_buffer = fred.c_str();
     fred.TrimLeft();
     EXPECT_EQ(L"FRED  ", fred);
@@ -669,8 +669,8 @@
   }
   {
     // With multiple references, but no modifications, no copy.
-    CFX_WideString fred(L"FRED");
-    CFX_WideString other_fred = fred;
+    WideString fred(L"FRED");
+    WideString other_fred = fred;
     const wchar_t* old_buffer = fred.c_str();
     fred.TrimLeft();
     EXPECT_EQ(L"FRED", fred);
@@ -679,9 +679,9 @@
   }
 }
 
-TEST(fxcrt, WideStringReserve) {
+TEST(WideString, Reserve) {
   {
-    CFX_WideString str;
+    WideString str;
     str.Reserve(6);
     const wchar_t* old_buffer = str.c_str();
     str += L"ABCDEF";
@@ -690,7 +690,7 @@
     EXPECT_NE(old_buffer, str.c_str());
   }
   {
-    CFX_WideString str(L"A");
+    WideString str(L"A");
     str.Reserve(6);
     const wchar_t* old_buffer = str.c_str();
     str += L"BCDEF";
@@ -700,16 +700,16 @@
   }
 }
 
-TEST(fxcrt, WideStringGetBuffer) {
+TEST(WideString, GetBuffer) {
   {
-    CFX_WideString str;
+    WideString str;
     wchar_t* buffer = str.GetBuffer(12);
     wcscpy(buffer, L"clams");
     str.ReleaseBuffer(str.GetStringLength());
     EXPECT_EQ(L"clams", str);
   }
   {
-    CFX_WideString str(L"cl");
+    WideString str(L"cl");
     wchar_t* buffer = str.GetBuffer(12);
     wcscpy(buffer + 2, L"ams");
     str.ReleaseBuffer(str.GetStringLength());
@@ -717,9 +717,9 @@
   }
 }
 
-TEST(fxcrt, WideStringReleaseBuffer) {
+TEST(WideString, ReleaseBuffer) {
   {
-    CFX_WideString str;
+    WideString str;
     str.Reserve(12);
     str += L"clams";
     const wchar_t* old_buffer = str.c_str();
@@ -728,7 +728,7 @@
     EXPECT_EQ(L"clam", str);
   }
   {
-    CFX_WideString str(L"c");
+    WideString str(L"c");
     str.Reserve(12);
     str += L"lams";
     const wchar_t* old_buffer = str.c_str();
@@ -737,7 +737,7 @@
     EXPECT_EQ(L"clam", str);
   }
   {
-    CFX_WideString str;
+    WideString str;
     str.Reserve(200);
     str += L"clams";
     const wchar_t* old_buffer = str.c_str();
@@ -746,7 +746,7 @@
     EXPECT_EQ(L"clam", str);
   }
   {
-    CFX_WideString str(L"c");
+    WideString str(L"c");
     str.Reserve(200);
     str += L"lams";
     const wchar_t* old_buffer = str.c_str();
@@ -756,16 +756,16 @@
   }
 }
 
-TEST(fxcrt, WideStringEmptyReverseIterator) {
-  CFX_WideString empty;
+TEST(WideString, EmptyReverseIterator) {
+  WideString empty;
   auto iter = empty.rbegin();
   EXPECT_TRUE(iter == empty.rend());
   EXPECT_FALSE(iter != empty.rend());
   EXPECT_FALSE(iter < empty.rend());
 }
 
-TEST(fxcrt, WideStringOneCharReverseIterator) {
-  CFX_WideString one_str(L"a");
+TEST(WideString, OneCharReverseIterator) {
+  WideString one_str(L"a");
   auto iter = one_str.rbegin();
   EXPECT_FALSE(iter == one_str.rend());
   EXPECT_TRUE(iter != one_str.rend());
@@ -778,8 +778,8 @@
   EXPECT_FALSE(iter < one_str.rend());
 }
 
-TEST(fxcrt, WideStringMultiCharReverseIterator) {
-  CFX_WideString multi_str(L"abcd");
+TEST(WideString, MultiCharReverseIterator) {
+  WideString multi_str(L"abcd");
   auto iter = multi_str.rbegin();
   EXPECT_FALSE(iter == multi_str.rend());
 
@@ -823,17 +823,17 @@
   EXPECT_TRUE(iter == multi_str.rbegin());
 }
 
-TEST(fxcrt, WideStringUTF16LE_Encode) {
+TEST(WideString, UTF16LE_Encode) {
   struct UTF16LEEncodeCase {
-    CFX_WideString ws;
-    CFX_ByteString bs;
+    WideString ws;
+    ByteString bs;
   } utf16le_encode_cases[] = {
-      {L"", CFX_ByteString("\0\0", 2)},
-      {L"abc", CFX_ByteString("a\0b\0c\0\0\0", 8)},
-      {L"abcdef", CFX_ByteString("a\0b\0c\0d\0e\0f\0\0\0", 14)},
-      {L"abc\0def", CFX_ByteString("a\0b\0c\0\0\0", 8)},
-      {L"\xaabb\xccdd", CFX_ByteString("\xbb\xaa\xdd\xcc\0\0", 6)},
-      {L"\x3132\x6162", CFX_ByteString("\x32\x31\x62\x61\0\0", 6)},
+      {L"", ByteString("\0\0", 2)},
+      {L"abc", ByteString("a\0b\0c\0\0\0", 8)},
+      {L"abcdef", ByteString("a\0b\0c\0d\0e\0f\0\0\0", 14)},
+      {L"abc\0def", ByteString("a\0b\0c\0\0\0", 8)},
+      {L"\xaabb\xccdd", ByteString("\xbb\xaa\xdd\xcc\0\0", 6)},
+      {L"\x3132\x6162", ByteString("\x32\x31\x62\x61\0\0", 6)},
   };
 
   for (size_t i = 0; i < FX_ArraySize(utf16le_encode_cases); ++i) {
@@ -843,27 +843,27 @@
   }
 }
 
-TEST(fxcrt, WideStringCFromVector) {
-  std::vector<CFX_WideStringC::UnsignedType> null_vec;
-  CFX_WideStringC null_string(null_vec);
+TEST(WideStringView, FromVector) {
+  std::vector<WideStringView::UnsignedType> null_vec;
+  WideStringView null_string(null_vec);
   EXPECT_EQ(0u, null_string.GetLength());
 
-  std::vector<CFX_WideStringC::UnsignedType> lower_a_vec(
-      10, static_cast<CFX_WideStringC::UnsignedType>(L'a'));
-  CFX_WideStringC lower_a_string(lower_a_vec);
+  std::vector<WideStringView::UnsignedType> lower_a_vec(
+      10, static_cast<WideStringView::UnsignedType>(L'a'));
+  WideStringView lower_a_string(lower_a_vec);
   EXPECT_EQ(10u, lower_a_string.GetLength());
   EXPECT_EQ(L"aaaaaaaaaa", lower_a_string);
 
-  std::vector<CFX_WideStringC::UnsignedType> cleared_vec;
+  std::vector<WideStringView::UnsignedType> cleared_vec;
   cleared_vec.push_back(42);
   cleared_vec.pop_back();
-  CFX_WideStringC cleared_string(cleared_vec);
+  WideStringView cleared_string(cleared_vec);
   EXPECT_EQ(0u, cleared_string.GetLength());
   EXPECT_EQ(nullptr, cleared_string.raw_str());
 }
 
-TEST(fxcrt, WideStringCElementAccess) {
-  CFX_WideStringC abc(L"abc");
+TEST(WideStringView, ElementAccess) {
+  WideStringView abc(L"abc");
   EXPECT_EQ(L'a', static_cast<wchar_t>(abc[0]));
   EXPECT_EQ(L'b', static_cast<wchar_t>(abc[1]));
   EXPECT_EQ(L'c', static_cast<wchar_t>(abc[2]));
@@ -872,11 +872,11 @@
 #endif
 }
 
-TEST(fxcrt, WideStringCOperatorLT) {
-  CFX_WideStringC empty;
-  CFX_WideStringC a(L"a");
-  CFX_WideStringC abc(L"\x0110qq");  // Comes InsertAtFront despite endianness.
-  CFX_WideStringC def(L"\x1001qq");  // Comes InsertAtBack despite endianness.
+TEST(WideStringView, OperatorLT) {
+  WideStringView empty;
+  WideStringView a(L"a");
+  WideStringView abc(L"\x0110qq");  // Comes InsertAtFront despite endianness.
+  WideStringView def(L"\x1001qq");  // Comes InsertAtBack despite endianness.
 
   EXPECT_FALSE(empty < empty);
   EXPECT_FALSE(a < a);
@@ -902,21 +902,21 @@
   EXPECT_FALSE(def < abc);
 }
 
-TEST(fxcrt, WideStringCOperatorEQ) {
-  CFX_WideStringC wide_string_c(L"hello");
+TEST(WideStringView, OperatorEQ) {
+  WideStringView wide_string_c(L"hello");
   EXPECT_TRUE(wide_string_c == wide_string_c);
 
-  CFX_WideStringC wide_string_c_same1(L"hello");
+  WideStringView wide_string_c_same1(L"hello");
   EXPECT_TRUE(wide_string_c == wide_string_c_same1);
   EXPECT_TRUE(wide_string_c_same1 == wide_string_c);
 
-  CFX_WideStringC wide_string_c_same2(wide_string_c);
+  WideStringView wide_string_c_same2(wide_string_c);
   EXPECT_TRUE(wide_string_c == wide_string_c_same2);
   EXPECT_TRUE(wide_string_c_same2 == wide_string_c);
 
-  CFX_WideStringC wide_string_c1(L"he");
-  CFX_WideStringC wide_string_c2(L"hellp");
-  CFX_WideStringC wide_string_c3(L"hellod");
+  WideStringView wide_string_c1(L"he");
+  WideStringView wide_string_c2(L"hellp");
+  WideStringView wide_string_c3(L"hellod");
   EXPECT_FALSE(wide_string_c == wide_string_c1);
   EXPECT_FALSE(wide_string_c == wide_string_c2);
   EXPECT_FALSE(wide_string_c == wide_string_c3);
@@ -924,13 +924,13 @@
   EXPECT_FALSE(wide_string_c2 == wide_string_c);
   EXPECT_FALSE(wide_string_c3 == wide_string_c);
 
-  CFX_WideString wide_string_same1(L"hello");
+  WideString wide_string_same1(L"hello");
   EXPECT_TRUE(wide_string_c == wide_string_same1);
   EXPECT_TRUE(wide_string_same1 == wide_string_c);
 
-  CFX_WideString wide_string1(L"he");
-  CFX_WideString wide_string2(L"hellp");
-  CFX_WideString wide_string3(L"hellod");
+  WideString wide_string1(L"he");
+  WideString wide_string2(L"hellp");
+  WideString wide_string3(L"hellod");
   EXPECT_FALSE(wide_string_c == wide_string1);
   EXPECT_FALSE(wide_string_c == wide_string2);
   EXPECT_FALSE(wide_string_c == wide_string3);
@@ -954,21 +954,21 @@
   EXPECT_FALSE(c_string3 == wide_string_c);
 }
 
-TEST(fxcrt, WideStringCOperatorNE) {
-  CFX_WideStringC wide_string_c(L"hello");
+TEST(WideStringView, OperatorNE) {
+  WideStringView wide_string_c(L"hello");
   EXPECT_FALSE(wide_string_c != wide_string_c);
 
-  CFX_WideStringC wide_string_c_same1(L"hello");
+  WideStringView wide_string_c_same1(L"hello");
   EXPECT_FALSE(wide_string_c != wide_string_c_same1);
   EXPECT_FALSE(wide_string_c_same1 != wide_string_c);
 
-  CFX_WideStringC wide_string_c_same2(wide_string_c);
+  WideStringView wide_string_c_same2(wide_string_c);
   EXPECT_FALSE(wide_string_c != wide_string_c_same2);
   EXPECT_FALSE(wide_string_c_same2 != wide_string_c);
 
-  CFX_WideStringC wide_string_c1(L"he");
-  CFX_WideStringC wide_string_c2(L"hellp");
-  CFX_WideStringC wide_string_c3(L"hellod");
+  WideStringView wide_string_c1(L"he");
+  WideStringView wide_string_c2(L"hellp");
+  WideStringView wide_string_c3(L"hellod");
   EXPECT_TRUE(wide_string_c != wide_string_c1);
   EXPECT_TRUE(wide_string_c != wide_string_c2);
   EXPECT_TRUE(wide_string_c != wide_string_c3);
@@ -976,13 +976,13 @@
   EXPECT_TRUE(wide_string_c2 != wide_string_c);
   EXPECT_TRUE(wide_string_c3 != wide_string_c);
 
-  CFX_WideString wide_string_same1(L"hello");
+  WideString wide_string_same1(L"hello");
   EXPECT_FALSE(wide_string_c != wide_string_same1);
   EXPECT_FALSE(wide_string_same1 != wide_string_c);
 
-  CFX_WideString wide_string1(L"he");
-  CFX_WideString wide_string2(L"hellp");
-  CFX_WideString wide_string3(L"hellod");
+  WideString wide_string1(L"he");
+  WideString wide_string2(L"hellp");
+  WideString wide_string3(L"hellod");
   EXPECT_TRUE(wide_string_c != wide_string1);
   EXPECT_TRUE(wide_string_c != wide_string2);
   EXPECT_TRUE(wide_string_c != wide_string3);
@@ -1006,24 +1006,24 @@
   EXPECT_TRUE(c_string3 != wide_string_c);
 }
 
-TEST(fxcrt, WideStringCFind) {
-  CFX_WideStringC null_string;
+TEST(WideStringView, Find) {
+  WideStringView null_string;
   EXPECT_FALSE(null_string.Find(L'a').has_value());
   EXPECT_FALSE(null_string.Find(L'\0').has_value());
 
-  CFX_WideStringC empty_string(L"");
+  WideStringView empty_string(L"");
   EXPECT_FALSE(empty_string.Find(L'a').has_value());
   EXPECT_FALSE(empty_string.Find(L'\0').has_value());
 
   pdfium::Optional<FX_STRSIZE> result;
-  CFX_WideStringC single_string(L"a");
+  WideStringView single_string(L"a");
   result = single_string.Find(L'a');
   ASSERT_TRUE(result.has_value());
   EXPECT_EQ(0u, result.value());
   EXPECT_FALSE(single_string.Find(L'b').has_value());
   EXPECT_FALSE(single_string.Find(L'\0').has_value());
 
-  CFX_WideStringC longer_string(L"abccc");
+  WideStringView longer_string(L"abccc");
   result = longer_string.Find(L'a');
   ASSERT_TRUE(result.has_value());
   EXPECT_EQ(0u, result.value());
@@ -1033,7 +1033,7 @@
   EXPECT_FALSE(longer_string.Find(L'd').has_value());
   EXPECT_FALSE(longer_string.Find(L'\0').has_value());
 
-  CFX_WideStringC hibyte_string(
+  WideStringView hibyte_string(
       L"ab\xFF8c"
       L"def");
   result = hibyte_string.Find(L'\xFF8c');
@@ -1041,8 +1041,8 @@
   EXPECT_EQ(2u, result.value());
 }
 
-TEST(fxcrt, WideStringCNullIterator) {
-  CFX_WideStringC null_str;
+TEST(WideStringView, NullIterator) {
+  WideStringView null_str;
   int32_t sum = 0;
   bool any_present = false;
   for (const auto& c : null_str) {
@@ -1053,8 +1053,8 @@
   EXPECT_EQ(0, sum);
 }
 
-TEST(fxcrt, WideStringCEmptyIterator) {
-  CFX_WideStringC empty_str(L"");
+TEST(WideStringView, EmptyIterator) {
+  WideStringView empty_str(L"");
   int32_t sum = 0;
   bool any_present = false;
   for (const auto& c : empty_str) {
@@ -1065,8 +1065,8 @@
   EXPECT_EQ(0, sum);
 }
 
-TEST(fxcrt, WideStringCOneCharIterator) {
-  CFX_WideStringC one_str(L"a");
+TEST(WideStringView, OneCharIterator) {
+  WideStringView one_str(L"a");
   int32_t sum = 0;
   bool any_present = false;
   for (const auto& c : one_str) {
@@ -1077,8 +1077,8 @@
   EXPECT_EQ(static_cast<int32_t>(L'a'), sum);
 }
 
-TEST(fxcrt, WideStringCMultiCharIterator) {
-  CFX_WideStringC one_str(L"abc");
+TEST(WideStringView, MultiCharIterator) {
+  WideStringView one_str(L"abc");
   int32_t sum = 0;
   bool any_present = false;
   for (const auto& c : one_str) {
@@ -1089,16 +1089,16 @@
   EXPECT_EQ(static_cast<int32_t>(L'a' + L'b' + L'c'), sum);
 }
 
-TEST(fxcrt, WideStringCEmptyReverseIterator) {
-  CFX_WideStringC empty;
+TEST(WideStringView, EmptyReverseIterator) {
+  WideStringView empty;
   auto iter = empty.rbegin();
   EXPECT_TRUE(iter == empty.rend());
   EXPECT_FALSE(iter != empty.rend());
   EXPECT_FALSE(iter < empty.rend());
 }
 
-TEST(fxcrt, WideStringCOneCharReverseIterator) {
-  CFX_WideStringC one_str(L"a");
+TEST(WideStringView, OneCharReverseIterator) {
+  WideStringView one_str(L"a");
   auto iter = one_str.rbegin();
   EXPECT_FALSE(iter == one_str.rend());
   EXPECT_TRUE(iter != one_str.rend());
@@ -1111,8 +1111,8 @@
   EXPECT_FALSE(iter < one_str.rend());
 }
 
-TEST(fxcrt, WideStringCMultiCharReverseIterator) {
-  CFX_WideStringC multi_str(L"abcd");
+TEST(WideStringView, MultiCharReverseIterator) {
+  WideStringView multi_str(L"abcd");
   auto iter = multi_str.rbegin();
   EXPECT_FALSE(iter == multi_str.rend());
 
@@ -1156,8 +1156,8 @@
   EXPECT_TRUE(iter == multi_str.rbegin());
 }
 
-TEST(fxcrt, WideStringCAnyAllNoneOf) {
-  CFX_WideStringC str(L"aaaaaaaaaaaaaaaaab");
+TEST(WideStringView, AnyAllNoneOf) {
+  WideStringView str(L"aaaaaaaaaaaaaaaaab");
   EXPECT_FALSE(std::all_of(str.begin(), str.end(),
                            [](const wchar_t& c) { return c == L'a'; }));
 
@@ -1172,112 +1172,112 @@
   EXPECT_FALSE(pdfium::ContainsValue(str, L'z'));
 }
 
-TEST(fxcrt, WideStringCTrimmedRight) {
-  CFX_WideStringC fred(L"FRED");
+TEST(WideStringView, TrimmedRight) {
+  WideStringView fred(L"FRED");
   EXPECT_EQ(L"FRED", fred.TrimmedRight(L'E'));
   EXPECT_EQ(L"FRE", fred.TrimmedRight(L'D'));
-  CFX_WideStringC fredd(L"FREDD");
+  WideStringView fredd(L"FREDD");
   EXPECT_EQ(L"FRE", fred.TrimmedRight(L'D'));
 }
 
-TEST(fxcrt, WideStringFormatWidth) {
+TEST(WideString, FormatWidth) {
   {
-    CFX_WideString str;
+    WideString str;
     str.Format(L"%5d", 1);
     EXPECT_EQ(L"    1", str);
   }
 
   {
-    CFX_WideString str;
+    WideString str;
     str.Format(L"%d", 1);
     EXPECT_EQ(L"1", str);
   }
 
   {
-    CFX_WideString str;
+    WideString str;
     str.Format(L"%*d", 5, 1);
     EXPECT_EQ(L"    1", str);
   }
 
   {
-    CFX_WideString str;
+    WideString str;
     str.Format(L"%-1d", 1);
     EXPECT_EQ(L"1", str);
   }
 
   {
-    CFX_WideString str;
+    WideString str;
     str.Format(L"%0d", 1);
     EXPECT_EQ(L"1", str);
   }
 
   {
-    CFX_WideString str;
+    WideString str;
     str.Format(L"%1048576d", 1);
     EXPECT_EQ(L"", str);
   }
 }
 
-TEST(fxcrt, WideStringFormatPrecision) {
+TEST(WideString, FormatPrecision) {
   {
-    CFX_WideString str;
+    WideString str;
     str.Format(L"%.2f", 1.12345);
     EXPECT_EQ(L"1.12", str);
   }
 
   {
-    CFX_WideString str;
+    WideString str;
     str.Format(L"%.*f", 3, 1.12345);
     EXPECT_EQ(L"1.123", str);
   }
 
   {
-    CFX_WideString str;
+    WideString str;
     str.Format(L"%f", 1.12345);
     EXPECT_EQ(L"1.123450", str);
   }
 
   {
-    CFX_WideString str;
+    WideString str;
     str.Format(L"%-1f", 1.12345);
     EXPECT_EQ(L"1.123450", str);
   }
 
   {
-    CFX_WideString str;
+    WideString str;
     str.Format(L"%0f", 1.12345);
     EXPECT_EQ(L"1.123450", str);
   }
 
   {
-    CFX_WideString str;
+    WideString str;
     str.Format(L"%.1048576f", 1.2);
     EXPECT_EQ(L"", str);
   }
 }
 
-TEST(fxcrt, WideStringFormatOutOfRangeChar) {
-  CFX_WideString str;
+TEST(WideString, FormatOutOfRangeChar) {
+  WideString str;
   str.Format(L"unsupported char '%c'", 0x00FF00FF);
 }
 
-TEST(fxcrt, EmptyWideString) {
-  CFX_WideString empty_str;
+TEST(WideString, Empty) {
+  WideString empty_str;
   EXPECT_TRUE(empty_str.IsEmpty());
   EXPECT_EQ(0u, empty_str.GetLength());
   const wchar_t* cstr = empty_str.c_str();
   EXPECT_EQ(0u, FXSYS_wcslen(cstr));
 }
 
-TEST(fxcrt, WidStringInitializerList) {
-  CFX_WideString many_str({L"clams", L" and ", L"oysters"});
+TEST(CFX_WidString, InitializerList) {
+  WideString many_str({L"clams", L" and ", L"oysters"});
   EXPECT_EQ(L"clams and oysters", many_str);
   many_str = {L"fish", L" and ", L"chips", L" and ", L"soda"};
   EXPECT_EQ(L"fish and chips and soda", many_str);
 }
 
-TEST(fxcrt, WideStringNullIterator) {
-  CFX_WideString null_str;
+TEST(WideString, NullIterator) {
+  WideString null_str;
   int32_t sum = 0;
   bool any_present = false;
   for (const auto& c : null_str) {
@@ -1288,8 +1288,8 @@
   EXPECT_EQ(0, sum);
 }
 
-TEST(fxcrt, WideStringEmptyIterator) {
-  CFX_WideString empty_str(L"");
+TEST(WideString, EmptyIterator) {
+  WideString empty_str(L"");
   int32_t sum = 0;
   bool any_present = false;
   for (const auto& c : empty_str) {
@@ -1300,8 +1300,8 @@
   EXPECT_EQ(0, sum);
 }
 
-TEST(fxcrt, WideStringOneCharIterator) {
-  CFX_WideString one_str(L"a");
+TEST(WideString, OneCharIterator) {
+  WideString one_str(L"a");
   int32_t sum = 0;
   bool any_present = false;
   for (const auto& c : one_str) {
@@ -1312,8 +1312,8 @@
   EXPECT_EQ(static_cast<int32_t>(L'a'), sum);
 }
 
-TEST(fxcrt, WideStringMultiCharIterator) {
-  CFX_WideString one_str(L"abc");
+TEST(WideString, MultiCharIterator) {
+  WideString one_str(L"abc");
   int32_t sum = 0;
   bool any_present = false;
   for (const auto& c : one_str) {
@@ -1324,8 +1324,8 @@
   EXPECT_EQ(static_cast<int32_t>(L'a' + L'b' + L'c'), sum);
 }
 
-TEST(fxcrt, WideStringAnyAllNoneOf) {
-  CFX_WideString str(L"aaaaaaaaaaaaaaaaab");
+TEST(WideString, AnyAllNoneOf) {
+  WideString str(L"aaaaaaaaaaaaaaaaab");
   EXPECT_FALSE(std::all_of(str.begin(), str.end(),
                            [](const wchar_t& c) { return c == L'a'; }));
 
@@ -1340,11 +1340,11 @@
   EXPECT_FALSE(pdfium::ContainsValue(str, L'z'));
 }
 
-TEST(fxcrt, OStreamWideStringOverload) {
+TEST(WideString, OStreamOverload) {
   std::ostringstream stream;
 
   // Basic case, empty string
-  CFX_WideString str;
+  WideString str;
   stream << str;
   EXPECT_EQ("", stream.str());
 
@@ -1359,7 +1359,7 @@
   stream << "abc" << str << "ghi";
   EXPECT_EQ("abcdefghi", stream.str());
 
-  // Changing the CFX_WideString does not change the stream it was written to.
+  // Changing the WideString does not change the stream it was written to.
   str = L"123";
   EXPECT_EQ("abcdefghi", stream.str());
 
@@ -1370,35 +1370,35 @@
 
   wchar_t stringWithNulls[]{'x', 'y', '\0', 'z'};
 
-  // Writing a CFX_WideString with nulls and no specified length treats it as
+  // Writing a WideString with nulls and no specified length treats it as
   // a C-style null-terminated string.
-  str = CFX_WideString(stringWithNulls);
+  str = WideString(stringWithNulls);
   EXPECT_EQ(2u, str.GetLength());
   stream.str("");
   stream << str;
   EXPECT_EQ(2u, stream.tellp());
 
-  // Writing a CFX_WideString with nulls but specifying its length treats it as
+  // Writing a WideString with nulls but specifying its length treats it as
   // a C++-style string.
-  str = CFX_WideString(stringWithNulls, 4);
+  str = WideString(stringWithNulls, 4);
   EXPECT_EQ(4u, str.GetLength());
   stream.str("");
   stream << str;
   EXPECT_EQ(4u, stream.tellp());
 
   // << operators can be chained.
-  CFX_WideString str1(L"abc");
-  CFX_WideString str2(L"def");
+  WideString str1(L"abc");
+  WideString str2(L"def");
   stream.str("");
   stream << str1 << str2;
   EXPECT_EQ("abcdef", stream.str());
 }
 
-TEST(fxcrt, WideOStreamWideStringOverload) {
+TEST(WideString, WideOStreamOverload) {
   std::wostringstream stream;
 
   // Basic case, empty string
-  CFX_WideString str;
+  WideString str;
   stream << str;
   EXPECT_EQ(L"", stream.str());
 
@@ -1413,7 +1413,7 @@
   stream << L"abc" << str << L"ghi";
   EXPECT_EQ(L"abcdefghi", stream.str());
 
-  // Changing the CFX_WideString does not change the stream it was written to.
+  // Changing the WideString does not change the stream it was written to.
   str = L"123";
   EXPECT_EQ(L"abcdefghi", stream.str());
 
@@ -1424,35 +1424,35 @@
 
   wchar_t stringWithNulls[]{'x', 'y', '\0', 'z'};
 
-  // Writing a CFX_WideString with nulls and no specified length treats it as
+  // Writing a WideString with nulls and no specified length treats it as
   // a C-style null-terminated string.
-  str = CFX_WideString(stringWithNulls);
+  str = WideString(stringWithNulls);
   EXPECT_EQ(2u, str.GetLength());
   stream.str(L"");
   stream << str;
   EXPECT_EQ(2u, stream.tellp());
 
-  // Writing a CFX_WideString with nulls but specifying its length treats it as
+  // Writing a WideString with nulls but specifying its length treats it as
   // a C++-style string.
-  str = CFX_WideString(stringWithNulls, 4);
+  str = WideString(stringWithNulls, 4);
   EXPECT_EQ(4u, str.GetLength());
   stream.str(L"");
   stream << str;
   EXPECT_EQ(4u, stream.tellp());
 
   // << operators can be chained.
-  CFX_WideString str1(L"abc");
-  CFX_WideString str2(L"def");
+  WideString str1(L"abc");
+  WideString str2(L"def");
   stream.str(L"");
   stream << str1 << str2;
   EXPECT_EQ(L"abcdef", stream.str());
 }
 
-TEST(fxcrt, OStreamWideStringCOverload) {
+TEST(WideStringView, OStreamOverload) {
   // Basic case, empty string
   {
     std::ostringstream stream;
-    CFX_WideStringC str;
+    WideStringView str;
     stream << str;
     EXPECT_EQ("", stream.str());
   }
@@ -1460,7 +1460,7 @@
   // Basic case, non-empty string
   {
     std::ostringstream stream;
-    CFX_WideStringC str(L"def");
+    WideStringView str(L"def");
     stream << "abc" << str << "ghi";
     EXPECT_EQ("abcdefghi", stream.str());
   }
@@ -1468,15 +1468,15 @@
   // Basic case, wide character
   {
     std::ostringstream stream;
-    CFX_WideStringC str(L"\u20AC");
+    WideStringView str(L"\u20AC");
     stream << str;
     EXPECT_EQ("\u20AC", stream.str());
   }
 
-  // Changing the CFX_WideStringC does not change the stream it was written to.
+  // Changing the WideStringView does not change the stream it was written to.
   {
     std::ostringstream stream;
-    CFX_WideStringC str(L"abc");
+    WideStringView str(L"abc");
     stream << str;
     str = L"123";
     EXPECT_EQ("abc", stream.str());
@@ -1485,7 +1485,7 @@
   // Writing it again to the stream will use the latest value.
   {
     std::ostringstream stream;
-    CFX_WideStringC str(L"abc");
+    WideStringView str(L"abc");
     stream << str;
     stream.str("");
     str = L"123";
@@ -1493,24 +1493,24 @@
     EXPECT_EQ("123", stream.str());
   }
 
-  // Writing a CFX_WideStringC with nulls and no specified length treats it as
+  // Writing a WideStringView with nulls and no specified length treats it as
   // a C-style null-terminated string.
   {
     wchar_t stringWithNulls[]{'x', 'y', '\0', 'z'};
     std::ostringstream stream;
-    CFX_WideStringC str(stringWithNulls);
+    WideStringView str(stringWithNulls);
     EXPECT_EQ(2u, str.GetLength());
     stream << str;
     EXPECT_EQ(2u, stream.tellp());
     str = L"";
   }
 
-  // Writing a CFX_WideStringC with nulls but specifying its length treats it as
+  // Writing a WideStringView with nulls but specifying its length treats it as
   // a C++-style string.
   {
     wchar_t stringWithNulls[]{'x', 'y', '\0', 'z'};
     std::ostringstream stream;
-    CFX_WideStringC str(stringWithNulls, 4);
+    WideStringView str(stringWithNulls, 4);
     EXPECT_EQ(4u, str.GetLength());
     stream << str;
     EXPECT_EQ(4u, stream.tellp());
@@ -1520,18 +1520,18 @@
   // << operators can be chained.
   {
     std::ostringstream stream;
-    CFX_WideStringC str1(L"abc");
-    CFX_WideStringC str2(L"def");
+    WideStringView str1(L"abc");
+    WideStringView str2(L"def");
     stream << str1 << str2;
     EXPECT_EQ("abcdef", stream.str());
   }
 }
 
-TEST(fxcrt, WideOStreamWideStringCOverload) {
+TEST(WideStringView, WideOStreamOverload) {
   // Basic case, empty string
   {
     std::wostringstream stream;
-    CFX_WideStringC str;
+    WideStringView str;
     stream << str;
     EXPECT_EQ(L"", stream.str());
   }
@@ -1539,7 +1539,7 @@
   // Basic case, non-empty string
   {
     std::wostringstream stream;
-    CFX_WideStringC str(L"def");
+    WideStringView str(L"def");
     stream << "abc" << str << "ghi";
     EXPECT_EQ(L"abcdefghi", stream.str());
   }
@@ -1547,15 +1547,15 @@
   // Basic case, wide character
   {
     std::wostringstream stream;
-    CFX_WideStringC str(L"\u20AC");
+    WideStringView str(L"\u20AC");
     stream << str;
     EXPECT_EQ(L"\u20AC", stream.str());
   }
 
-  // Changing the CFX_WideStringC does not change the stream it was written to.
+  // Changing the WideStringView does not change the stream it was written to.
   {
     std::wostringstream stream;
-    CFX_WideStringC str(L"abc");
+    WideStringView str(L"abc");
     stream << str;
     str = L"123";
     EXPECT_EQ(L"abc", stream.str());
@@ -1564,7 +1564,7 @@
   // Writing it again to the stream will use the latest value.
   {
     std::wostringstream stream;
-    CFX_WideStringC str(L"abc");
+    WideStringView str(L"abc");
     stream << str;
     stream.str(L"");
     str = L"123";
@@ -1572,23 +1572,23 @@
     EXPECT_EQ(L"123", stream.str());
   }
 
-  // Writing a CFX_WideStringC with nulls and no specified length treats it as
+  // Writing a WideStringView with nulls and no specified length treats it as
   // a C-style null-terminated string.
   {
     wchar_t stringWithNulls[]{'x', 'y', '\0', 'z'};
     std::wostringstream stream;
-    CFX_WideStringC str(stringWithNulls);
+    WideStringView str(stringWithNulls);
     EXPECT_EQ(2u, str.GetLength());
     stream << str;
     EXPECT_EQ(2u, stream.tellp());
   }
 
-  // Writing a CFX_WideStringC with nulls but specifying its length treats it as
+  // Writing a WideStringView with nulls but specifying its length treats it as
   // a C++-style string.
   {
     wchar_t stringWithNulls[]{'x', 'y', '\0', 'z'};
     std::wostringstream stream;
-    CFX_WideStringC str(stringWithNulls, 4);
+    WideStringView str(stringWithNulls, 4);
     EXPECT_EQ(4u, str.GetLength());
     stream << str;
     EXPECT_EQ(4u, stream.tellp());
@@ -1597,8 +1597,8 @@
   // << operators can be chained.
   {
     std::wostringstream stream;
-    CFX_WideStringC str1(L"abc");
-    CFX_WideStringC str2(L"def");
+    WideStringView str1(L"abc");
+    WideStringView str2(L"def");
     stream << str1 << str2;
     EXPECT_EQ(L"abcdef", stream.str());
   }
diff --git a/core/fxcrt/xml/cfx_saxcontext.h b/core/fxcrt/xml/cfx_saxcontext.h
index f66c76c..d4d74a3 100644
--- a/core/fxcrt/xml/cfx_saxcontext.h
+++ b/core/fxcrt/xml/cfx_saxcontext.h
@@ -18,7 +18,7 @@
   ~CFX_SAXContext();
 
   std::ostringstream m_TextBuf;
-  CFX_ByteString m_bsTagName;
+  ByteString m_bsTagName;
   CFX_SAXItem::Type m_eNode;
 };
 
diff --git a/core/fxcrt/xml/cfx_saxreader.cpp b/core/fxcrt/xml/cfx_saxreader.cpp
index 641dc08..e2c09d1 100644
--- a/core/fxcrt/xml/cfx_saxreader.cpp
+++ b/core/fxcrt/xml/cfx_saxreader.cpp
@@ -293,8 +293,8 @@
   m_iEntityStart = -1;
 
   // NOTE: Relies on negative lengths being treated as empty strings.
-  CFX_ByteString csEntity(m_Data.data() + iSaveStart + 1,
-                          CurrentDataIndex() - iSaveStart - 1);
+  ByteString csEntity(m_Data.data() + iSaveStart + 1,
+                      CurrentDataIndex() - iSaveStart - 1);
   int32_t iLen = csEntity.GetLength();
   if (iLen == 0)
     return;
@@ -649,7 +649,7 @@
     m_pHandler->OnTagData(
         pItem->m_pNode,
         m_bCharData ? CFX_SAXItem::Type::CharData : CFX_SAXItem::Type::Text,
-        CFX_ByteStringC(m_Data), m_File.m_dwCur + m_dwDataOffset);
+        ByteStringView(m_Data), m_File.m_dwCur + m_dwDataOffset);
 }
 
 void CFX_SAXReader::NotifyEnter() {
@@ -662,7 +662,7 @@
 
   if (pItem->m_eNode == CFX_SAXItem::Type::Tag ||
       pItem->m_eNode == CFX_SAXItem::Type::Instruction) {
-    pItem->m_pNode = m_pHandler->OnTagEnter(CFX_ByteStringC(m_Data),
+    pItem->m_pNode = m_pHandler->OnTagEnter(ByteStringView(m_Data),
                                             pItem->m_eNode, m_dwNodePos);
   }
 }
@@ -677,8 +677,8 @@
 
   if (pItem->m_eNode == CFX_SAXItem::Type::Tag ||
       pItem->m_eNode == CFX_SAXItem::Type::Instruction) {
-    m_pHandler->OnTagAttribute(pItem->m_pNode, CFX_ByteStringC(m_Name),
-                               CFX_ByteStringC(m_Data));
+    m_pHandler->OnTagAttribute(pItem->m_pNode, ByteStringView(m_Name),
+                               ByteStringView(m_Data));
   }
 }
 
@@ -717,7 +717,7 @@
     return;
 
   if (pItem->m_eNode == CFX_SAXItem::Type::Tag)
-    m_pHandler->OnTagEnd(pItem->m_pNode, CFX_ByteStringC(m_Data), m_dwNodePos);
+    m_pHandler->OnTagEnd(pItem->m_pNode, ByteStringView(m_Data), m_dwNodePos);
 }
 
 void CFX_SAXReader::NotifyTargetData() {
@@ -730,10 +730,10 @@
 
   if (pItem->m_eNode == CFX_SAXItem::Type::Instruction) {
     m_pHandler->OnTargetData(pItem->m_pNode, pItem->m_eNode,
-                             CFX_ByteStringC(m_Name), m_dwNodePos);
+                             ByteStringView(m_Name), m_dwNodePos);
   } else if (pItem->m_eNode == CFX_SAXItem::Type::Comment) {
     m_pHandler->OnTargetData(pItem->m_pNode, pItem->m_eNode,
-                             CFX_ByteStringC(m_Data), m_dwNodePos);
+                             ByteStringView(m_Data), m_dwNodePos);
   }
 }
 
diff --git a/core/fxcrt/xml/cfx_saxreader.h b/core/fxcrt/xml/cfx_saxreader.h
index 3db1c7c..51d9e43 100644
--- a/core/fxcrt/xml/cfx_saxreader.h
+++ b/core/fxcrt/xml/cfx_saxreader.h
@@ -75,24 +75,24 @@
   class HandlerIface {
    public:
     virtual ~HandlerIface() {}
-    virtual CFX_SAXContext* OnTagEnter(const CFX_ByteStringC& bsTagName,
+    virtual CFX_SAXContext* OnTagEnter(const ByteStringView& bsTagName,
                                        CFX_SAXItem::Type eType,
                                        uint32_t dwStartPos) = 0;
     virtual void OnTagAttribute(CFX_SAXContext* pTag,
-                                const CFX_ByteStringC& bsAttri,
-                                const CFX_ByteStringC& bsValue) = 0;
+                                const ByteStringView& bsAttri,
+                                const ByteStringView& bsValue) = 0;
     virtual void OnTagBreak(CFX_SAXContext* pTag) = 0;
     virtual void OnTagData(CFX_SAXContext* pTag,
                            CFX_SAXItem::Type eType,
-                           const CFX_ByteStringC& bsData,
+                           const ByteStringView& bsData,
                            uint32_t dwStartPos) = 0;
     virtual void OnTagClose(CFX_SAXContext* pTag, uint32_t dwEndPos) = 0;
     virtual void OnTagEnd(CFX_SAXContext* pTag,
-                          const CFX_ByteStringC& bsTagName,
+                          const ByteStringView& bsTagName,
                           uint32_t dwEndPos) = 0;
     virtual void OnTargetData(CFX_SAXContext* pTag,
                               CFX_SAXItem::Type eType,
-                              const CFX_ByteStringC& bsData,
+                              const ByteStringView& bsData,
                               uint32_t dwStartPos) = 0;
   };
 
diff --git a/core/fxcrt/xml/cfx_saxreader_unittest.cpp b/core/fxcrt/xml/cfx_saxreader_unittest.cpp
index 6282850..13d0632 100644
--- a/core/fxcrt/xml/cfx_saxreader_unittest.cpp
+++ b/core/fxcrt/xml/cfx_saxreader_unittest.cpp
@@ -17,28 +17,28 @@
 class MockHandler : public CFX_SAXReader::HandlerIface {
  public:
   MOCK_METHOD3(OnTagEnter,
-               CFX_SAXContext*(const CFX_ByteStringC& bsTagName,
+               CFX_SAXContext*(const ByteStringView& bsTagName,
                                CFX_SAXItem::Type eType,
                                uint32_t dwStartPos));
   MOCK_METHOD3(OnTagAttribute,
                void(CFX_SAXContext* pTag,
-                    const CFX_ByteStringC& bsAttri,
-                    const CFX_ByteStringC& bsValue));
+                    const ByteStringView& bsAttri,
+                    const ByteStringView& bsValue));
   MOCK_METHOD1(OnTagBreak, void(CFX_SAXContext* pTag));
   MOCK_METHOD4(OnTagData,
                void(CFX_SAXContext* pTag,
                     CFX_SAXItem::Type eType,
-                    const CFX_ByteStringC& bsData,
+                    const ByteStringView& bsData,
                     uint32_t dwStartPos));
   MOCK_METHOD2(OnTagClose, void(CFX_SAXContext* pTag, uint32_t dwEndPos));
   MOCK_METHOD3(OnTagEnd,
                void(CFX_SAXContext* pTag,
-                    const CFX_ByteStringC& bsTagName,
+                    const ByteStringView& bsTagName,
                     uint32_t dwEndPos));
   MOCK_METHOD4(OnTargetData,
                void(CFX_SAXContext* pTag,
                     CFX_SAXItem::Type eType,
-                    const CFX_ByteStringC& bsData,
+                    const ByteStringView& bsData,
                     uint32_t dwStartPos));
 };
 
diff --git a/core/fxcrt/xml/cfx_saxreaderhandler.cpp b/core/fxcrt/xml/cfx_saxreaderhandler.cpp
index b8399ff..d255ce9 100644
--- a/core/fxcrt/xml/cfx_saxreaderhandler.cpp
+++ b/core/fxcrt/xml/cfx_saxreaderhandler.cpp
@@ -18,7 +18,7 @@
 CFX_SAXReaderHandler::~CFX_SAXReaderHandler() {}
 
 CFX_SAXContext* CFX_SAXReaderHandler::OnTagEnter(
-    const CFX_ByteStringC& bsTagName,
+    const ByteStringView& bsTagName,
     CFX_SAXItem::Type eType,
     uint32_t dwStartPos) {
   UpdateChecksum(true);
@@ -38,8 +38,8 @@
 }
 
 void CFX_SAXReaderHandler::OnTagAttribute(CFX_SAXContext* pTag,
-                                          const CFX_ByteStringC& bsAttri,
-                                          const CFX_ByteStringC& bsValue) {
+                                          const ByteStringView& bsAttri,
+                                          const ByteStringView& bsValue) {
   if (!pTag)
     return;
   pTag->m_TextBuf << " " << bsAttri << "=\"" << bsValue << "\"";
@@ -55,7 +55,7 @@
 
 void CFX_SAXReaderHandler::OnTagData(CFX_SAXContext* pTag,
                                      CFX_SAXItem::Type eType,
-                                     const CFX_ByteStringC& bsData,
+                                     const ByteStringView& bsData,
                                      uint32_t dwStartPos) {
   if (!pTag)
     return;
@@ -75,13 +75,13 @@
   if (pTag->m_eNode == CFX_SAXItem::Type::Instruction)
     pTag->m_TextBuf << "?>";
   else if (pTag->m_eNode == CFX_SAXItem::Type::Tag)
-    pTag->m_TextBuf << "></" << pTag->m_bsTagName.AsStringC() << ">";
+    pTag->m_TextBuf << "></" << pTag->m_bsTagName.AsStringView() << ">";
 
   UpdateChecksum(false);
 }
 
 void CFX_SAXReaderHandler::OnTagEnd(CFX_SAXContext* pTag,
-                                    const CFX_ByteStringC& bsTagName,
+                                    const ByteStringView& bsTagName,
                                     uint32_t dwEndPos) {
   if (!pTag)
     return;
@@ -92,7 +92,7 @@
 
 void CFX_SAXReaderHandler::OnTargetData(CFX_SAXContext* pTag,
                                         CFX_SAXItem::Type eType,
-                                        const CFX_ByteStringC& bsData,
+                                        const ByteStringView& bsData,
                                         uint32_t dwStartPos) {
   if (!pTag && eType != CFX_SAXItem::Type::Comment)
     return;
@@ -122,7 +122,7 @@
     }
   }
   if (bUpdata)
-    m_pContext->Update(CFX_ByteStringC(pBuffer, iLength));
+    m_pContext->Update(ByteStringView(pBuffer, iLength));
 
   m_SAXContext.m_TextBuf.str("");
 }
diff --git a/core/fxcrt/xml/cfx_saxreaderhandler.h b/core/fxcrt/xml/cfx_saxreaderhandler.h
index c5e1dc2..263008f 100644
--- a/core/fxcrt/xml/cfx_saxreaderhandler.h
+++ b/core/fxcrt/xml/cfx_saxreaderhandler.h
@@ -18,24 +18,24 @@
   explicit CFX_SAXReaderHandler(CFX_ChecksumContext* pContext);
   ~CFX_SAXReaderHandler() override;
 
-  CFX_SAXContext* OnTagEnter(const CFX_ByteStringC& bsTagName,
+  CFX_SAXContext* OnTagEnter(const ByteStringView& bsTagName,
                              CFX_SAXItem::Type eType,
                              uint32_t dwStartPos) override;
   void OnTagAttribute(CFX_SAXContext* pTag,
-                      const CFX_ByteStringC& bsAttri,
-                      const CFX_ByteStringC& bsValue) override;
+                      const ByteStringView& bsAttri,
+                      const ByteStringView& bsValue) override;
   void OnTagBreak(CFX_SAXContext* pTag) override;
   void OnTagData(CFX_SAXContext* pTag,
                  CFX_SAXItem::Type eType,
-                 const CFX_ByteStringC& bsData,
+                 const ByteStringView& bsData,
                  uint32_t dwStartPos) override;
   void OnTagClose(CFX_SAXContext* pTag, uint32_t dwEndPos) override;
   void OnTagEnd(CFX_SAXContext* pTag,
-                const CFX_ByteStringC& bsTagName,
+                const ByteStringView& bsTagName,
                 uint32_t dwEndPos) override;
   void OnTargetData(CFX_SAXContext* pTag,
                     CFX_SAXItem::Type eType,
-                    const CFX_ByteStringC& bsData,
+                    const ByteStringView& bsData,
                     uint32_t dwStartPos) override;
 
  private:
diff --git a/core/fxcrt/xml/cfx_xmlattributenode.cpp b/core/fxcrt/xml/cfx_xmlattributenode.cpp
index 9ea6756..6104747 100644
--- a/core/fxcrt/xml/cfx_xmlattributenode.cpp
+++ b/core/fxcrt/xml/cfx_xmlattributenode.cpp
@@ -8,28 +8,27 @@
 
 #include "core/fxcrt/fx_extension.h"
 
-CFX_XMLAttributeNode::CFX_XMLAttributeNode(const CFX_WideString& name)
+CFX_XMLAttributeNode::CFX_XMLAttributeNode(const WideString& name)
     : CFX_XMLNode(), name_(name) {
   ASSERT(name_.GetLength() > 0);
 }
 
 CFX_XMLAttributeNode::~CFX_XMLAttributeNode() {}
 
-bool CFX_XMLAttributeNode::HasAttribute(const CFX_WideString& name) const {
+bool CFX_XMLAttributeNode::HasAttribute(const WideString& name) const {
   return attrs_.find(name) != attrs_.end();
 }
 
-CFX_WideString CFX_XMLAttributeNode::GetString(
-    const CFX_WideString& name) const {
+WideString CFX_XMLAttributeNode::GetString(const WideString& name) const {
   auto it = attrs_.find(name);
-  return it != attrs_.end() ? it->second : CFX_WideString();
+  return it != attrs_.end() ? it->second : WideString();
 }
 
-void CFX_XMLAttributeNode::SetString(const CFX_WideString& name,
-                                     const CFX_WideString& value) {
+void CFX_XMLAttributeNode::SetString(const WideString& name,
+                                     const WideString& value) {
   attrs_[name] = value;
 }
 
-void CFX_XMLAttributeNode::RemoveAttribute(const CFX_WideString& name) {
+void CFX_XMLAttributeNode::RemoveAttribute(const WideString& name) {
   attrs_.erase(name);
 }
diff --git a/core/fxcrt/xml/cfx_xmlattributenode.h b/core/fxcrt/xml/cfx_xmlattributenode.h
index e8f358e..1ac9b84 100644
--- a/core/fxcrt/xml/cfx_xmlattributenode.h
+++ b/core/fxcrt/xml/cfx_xmlattributenode.h
@@ -15,30 +15,30 @@
 
 class CFX_XMLAttributeNode : public CFX_XMLNode {
  public:
-  explicit CFX_XMLAttributeNode(const CFX_WideString& name);
+  explicit CFX_XMLAttributeNode(const WideString& name);
   ~CFX_XMLAttributeNode() override;
 
   // CFX_XMLNode
   FX_XMLNODETYPE GetType() const override = 0;
   std::unique_ptr<CFX_XMLNode> Clone() override = 0;
 
-  CFX_WideString GetName() const { return name_; }
-  const std::map<CFX_WideString, CFX_WideString>& GetAttributes() const {
+  WideString GetName() const { return name_; }
+  const std::map<WideString, WideString>& GetAttributes() const {
     return attrs_;
   }
-  void SetAttributes(const std::map<CFX_WideString, CFX_WideString>& attrs) {
+  void SetAttributes(const std::map<WideString, WideString>& attrs) {
     attrs_ = attrs;
   }
-  bool HasAttribute(const CFX_WideString& name) const;
+  bool HasAttribute(const WideString& name) const;
 
-  void SetString(const CFX_WideString& name, const CFX_WideString& value);
-  CFX_WideString GetString(const CFX_WideString& name) const;
+  void SetString(const WideString& name, const WideString& value);
+  WideString GetString(const WideString& name) const;
 
-  void RemoveAttribute(const CFX_WideString& name);
+  void RemoveAttribute(const WideString& name);
 
  private:
-  CFX_WideString name_;
-  std::map<CFX_WideString, CFX_WideString> attrs_;
+  WideString name_;
+  std::map<WideString, WideString> attrs_;
 };
 
 #endif  // CORE_FXCRT_XML_CFX_XMLATTRIBUTENODE_H_
diff --git a/core/fxcrt/xml/cfx_xmlchardata.cpp b/core/fxcrt/xml/cfx_xmlchardata.cpp
index 185bd06..902d139 100644
--- a/core/fxcrt/xml/cfx_xmlchardata.cpp
+++ b/core/fxcrt/xml/cfx_xmlchardata.cpp
@@ -8,7 +8,7 @@
 
 #include "third_party/base/ptr_util.h"
 
-CFX_XMLCharData::CFX_XMLCharData(const CFX_WideString& wsCData)
+CFX_XMLCharData::CFX_XMLCharData(const WideString& wsCData)
     : CFX_XMLText(wsCData) {}
 
 CFX_XMLCharData::~CFX_XMLCharData() {}
diff --git a/core/fxcrt/xml/cfx_xmlchardata.h b/core/fxcrt/xml/cfx_xmlchardata.h
index c5c007b..9a4710f 100644
--- a/core/fxcrt/xml/cfx_xmlchardata.h
+++ b/core/fxcrt/xml/cfx_xmlchardata.h
@@ -14,7 +14,7 @@
 
 class CFX_XMLCharData : public CFX_XMLText {
  public:
-  explicit CFX_XMLCharData(const CFX_WideString& wsCData);
+  explicit CFX_XMLCharData(const WideString& wsCData);
   ~CFX_XMLCharData() override;
 
   FX_XMLNODETYPE GetType() const override;
diff --git a/core/fxcrt/xml/cfx_xmldoc.cpp b/core/fxcrt/xml/cfx_xmldoc.cpp
index 6fce38c..e9a09b7 100644
--- a/core/fxcrt/xml/cfx_xmldoc.cpp
+++ b/core/fxcrt/xml/cfx_xmldoc.cpp
@@ -53,7 +53,7 @@
   CFX_XMLNode* pNode = (CFX_XMLNode*)pINode;
   switch (pNode->GetType()) {
     case FX_XMLNODE_Instruction: {
-      CFX_WideString ws;
+      WideString ws;
       CFX_XMLInstruction* pInstruction = (CFX_XMLInstruction*)pNode;
       if (pInstruction->GetName().CompareNoCase(L"xml") == 0) {
         ws = L"<?xml version=\"1.0\" encoding=\"";
@@ -66,13 +66,13 @@
           ws += L"UTF-8";
         }
         ws += L"\"?>";
-        pXMLStream->WriteString(ws.AsStringC());
+        pXMLStream->WriteString(ws.AsStringView());
       } else {
         ws.Format(L"<?%s", pInstruction->GetName().c_str());
-        pXMLStream->WriteString(ws.AsStringC());
+        pXMLStream->WriteString(ws.AsStringView());
 
         for (auto it : pInstruction->GetAttributes()) {
-          CFX_WideString wsValue = it.second;
+          WideString wsValue = it.second;
           wsValue.Replace(L"&", L"&amp;");
           wsValue.Replace(L"<", L"&lt;");
           wsValue.Replace(L">", L"&gt;");
@@ -84,28 +84,28 @@
           ws += L"=\"";
           ws += wsValue;
           ws += L"\"";
-          pXMLStream->WriteString(ws.AsStringC());
+          pXMLStream->WriteString(ws.AsStringView());
         }
 
         for (auto target : pInstruction->GetTargetData()) {
           ws = L" \"";
           ws += target;
           ws += L"\"";
-          pXMLStream->WriteString(ws.AsStringC());
+          pXMLStream->WriteString(ws.AsStringView());
         }
         ws = L"?>";
-        pXMLStream->WriteString(ws.AsStringC());
+        pXMLStream->WriteString(ws.AsStringView());
       }
       break;
     }
     case FX_XMLNODE_Element: {
-      CFX_WideString ws;
+      WideString ws;
       ws = L"<";
       ws += static_cast<CFX_XMLElement*>(pNode)->GetName();
-      pXMLStream->WriteString(ws.AsStringC());
+      pXMLStream->WriteString(ws.AsStringView());
 
       for (auto it : static_cast<CFX_XMLElement*>(pNode)->GetAttributes()) {
-        CFX_WideString wsValue = it.second;
+        WideString wsValue = it.second;
         wsValue.Replace(L"&", L"&amp;");
         wsValue.Replace(L"<", L"&lt;");
         wsValue.Replace(L">", L"&gt;");
@@ -117,11 +117,11 @@
         ws += L"=\"";
         ws += wsValue;
         ws += L"\"";
-        pXMLStream->WriteString(ws.AsStringC());
+        pXMLStream->WriteString(ws.AsStringView());
       }
       if (pNode->m_pChild) {
         ws = L"\n>";
-        pXMLStream->WriteString(ws.AsStringC());
+        pXMLStream->WriteString(ws.AsStringView());
         CFX_XMLNode* pChild = pNode->m_pChild;
         while (pChild) {
           SaveXMLNode(pXMLStream, static_cast<CFX_XMLNode*>(pChild));
@@ -133,24 +133,24 @@
       } else {
         ws = L"\n/>";
       }
-      pXMLStream->WriteString(ws.AsStringC());
+      pXMLStream->WriteString(ws.AsStringView());
       break;
     }
     case FX_XMLNODE_Text: {
-      CFX_WideString ws = static_cast<CFX_XMLText*>(pNode)->GetText();
+      WideString ws = static_cast<CFX_XMLText*>(pNode)->GetText();
       ws.Replace(L"&", L"&amp;");
       ws.Replace(L"<", L"&lt;");
       ws.Replace(L">", L"&gt;");
       ws.Replace(L"\'", L"&apos;");
       ws.Replace(L"\"", L"&quot;");
-      pXMLStream->WriteString(ws.AsStringC());
+      pXMLStream->WriteString(ws.AsStringView());
       break;
     }
     case FX_XMLNODE_CharData: {
-      CFX_WideString ws = L"<![CDATA[";
+      WideString ws = L"<![CDATA[";
       ws += static_cast<CFX_XMLCharData*>(pNode)->GetText();
       ws += L"]]>";
-      pXMLStream->WriteString(ws.AsStringC());
+      pXMLStream->WriteString(ws.AsStringView());
       break;
     }
     case FX_XMLNODE_Unknown:
diff --git a/core/fxcrt/xml/cfx_xmlelement.cpp b/core/fxcrt/xml/cfx_xmlelement.cpp
index 5b5fe45..1317e9a 100644
--- a/core/fxcrt/xml/cfx_xmlelement.cpp
+++ b/core/fxcrt/xml/cfx_xmlelement.cpp
@@ -15,7 +15,7 @@
 #include "third_party/base/ptr_util.h"
 #include "third_party/base/stl_util.h"
 
-CFX_XMLElement::CFX_XMLElement(const CFX_WideString& wsTag)
+CFX_XMLElement::CFX_XMLElement(const WideString& wsTag)
     : CFX_XMLAttributeNode(wsTag) {}
 
 CFX_XMLElement::~CFX_XMLElement() {}
@@ -28,7 +28,7 @@
   auto pClone = pdfium::MakeUnique<CFX_XMLElement>(GetName());
   pClone->SetAttributes(GetAttributes());
 
-  CFX_WideString wsText;
+  WideString wsText;
   CFX_XMLNode* pChild = m_pChild;
   while (pChild) {
     switch (pChild->GetType()) {
@@ -44,21 +44,21 @@
   return std::move(pClone);
 }
 
-CFX_WideString CFX_XMLElement::GetLocalTagName() const {
+WideString CFX_XMLElement::GetLocalTagName() const {
   auto pos = GetName().Find(L':');
   return pos.has_value()
              ? GetName().Right(GetName().GetLength() - pos.value() - 1)
              : GetName();
 }
 
-CFX_WideString CFX_XMLElement::GetNamespacePrefix() const {
+WideString CFX_XMLElement::GetNamespacePrefix() const {
   auto pos = GetName().Find(L':');
-  return pos.has_value() ? GetName().Left(pos.value()) : CFX_WideString();
+  return pos.has_value() ? GetName().Left(pos.value()) : WideString();
 }
 
-CFX_WideString CFX_XMLElement::GetNamespaceURI() const {
-  CFX_WideString wsAttri(L"xmlns");
-  CFX_WideString wsPrefix = GetNamespacePrefix();
+WideString CFX_XMLElement::GetNamespaceURI() const {
+  WideString wsAttri(L"xmlns");
+  WideString wsPrefix = GetNamespacePrefix();
   if (wsPrefix.GetLength() > 0) {
     wsAttri += L":";
     wsAttri += wsPrefix;
@@ -76,10 +76,10 @@
     }
     return pElement->GetString(wsAttri);
   }
-  return CFX_WideString();
+  return WideString();
 }
 
-CFX_WideString CFX_XMLElement::GetTextData() const {
+WideString CFX_XMLElement::GetTextData() const {
   CFX_WideTextBuf buffer;
   CFX_XMLNode* pChild = m_pChild;
   while (pChild) {
@@ -96,7 +96,7 @@
   return buffer.MakeString();
 }
 
-void CFX_XMLElement::SetTextData(const CFX_WideString& wsText) {
+void CFX_XMLElement::SetTextData(const WideString& wsText) {
   if (wsText.GetLength() < 1)
     return;
   InsertChildNode(new CFX_XMLText(wsText));
diff --git a/core/fxcrt/xml/cfx_xmlelement.h b/core/fxcrt/xml/cfx_xmlelement.h
index 2078034..59e3af6 100644
--- a/core/fxcrt/xml/cfx_xmlelement.h
+++ b/core/fxcrt/xml/cfx_xmlelement.h
@@ -15,19 +15,19 @@
 
 class CFX_XMLElement : public CFX_XMLAttributeNode {
  public:
-  explicit CFX_XMLElement(const CFX_WideString& wsTag);
+  explicit CFX_XMLElement(const WideString& wsTag);
   ~CFX_XMLElement() override;
 
   // CFX_XMLNode
   FX_XMLNODETYPE GetType() const override;
   std::unique_ptr<CFX_XMLNode> Clone() override;
 
-  CFX_WideString GetLocalTagName() const;
-  CFX_WideString GetNamespacePrefix() const;
-  CFX_WideString GetNamespaceURI() const;
+  WideString GetLocalTagName() const;
+  WideString GetNamespacePrefix() const;
+  WideString GetNamespaceURI() const;
 
-  CFX_WideString GetTextData() const;
-  void SetTextData(const CFX_WideString& wsText);
+  WideString GetTextData() const;
+  void SetTextData(const WideString& wsText);
 };
 
 #endif  // CORE_FXCRT_XML_CFX_XMLELEMENT_H_
diff --git a/core/fxcrt/xml/cfx_xmlinstruction.cpp b/core/fxcrt/xml/cfx_xmlinstruction.cpp
index 3c7deda..75a4a2e 100644
--- a/core/fxcrt/xml/cfx_xmlinstruction.cpp
+++ b/core/fxcrt/xml/cfx_xmlinstruction.cpp
@@ -12,7 +12,7 @@
 #include "third_party/base/ptr_util.h"
 #include "third_party/base/stl_util.h"
 
-CFX_XMLInstruction::CFX_XMLInstruction(const CFX_WideString& wsTarget)
+CFX_XMLInstruction::CFX_XMLInstruction(const WideString& wsTarget)
     : CFX_XMLAttributeNode(wsTarget) {}
 
 CFX_XMLInstruction::~CFX_XMLInstruction() {}
@@ -28,7 +28,7 @@
   return std::move(pClone);
 }
 
-void CFX_XMLInstruction::AppendData(const CFX_WideString& wsData) {
+void CFX_XMLInstruction::AppendData(const WideString& wsData) {
   m_TargetData.push_back(wsData);
 }
 
diff --git a/core/fxcrt/xml/cfx_xmlinstruction.h b/core/fxcrt/xml/cfx_xmlinstruction.h
index 99554fc..ff27dae 100644
--- a/core/fxcrt/xml/cfx_xmlinstruction.h
+++ b/core/fxcrt/xml/cfx_xmlinstruction.h
@@ -15,21 +15,19 @@
 
 class CFX_XMLInstruction : public CFX_XMLAttributeNode {
  public:
-  explicit CFX_XMLInstruction(const CFX_WideString& wsTarget);
+  explicit CFX_XMLInstruction(const WideString& wsTarget);
   ~CFX_XMLInstruction() override;
 
   // CFX_XMLNode
   FX_XMLNODETYPE GetType() const override;
   std::unique_ptr<CFX_XMLNode> Clone() override;
 
-  const std::vector<CFX_WideString>& GetTargetData() const {
-    return m_TargetData;
-  }
-  void AppendData(const CFX_WideString& wsData);
+  const std::vector<WideString>& GetTargetData() const { return m_TargetData; }
+  void AppendData(const WideString& wsData);
   void RemoveData(int32_t index);
 
  private:
-  std::vector<CFX_WideString> m_TargetData;
+  std::vector<WideString> m_TargetData;
 };
 
 #endif  // CORE_FXCRT_XML_CFX_XMLINSTRUCTION_H_
diff --git a/core/fxcrt/xml/cfx_xmlnode.cpp b/core/fxcrt/xml/cfx_xmlnode.cpp
index 47b3105..7a893af 100644
--- a/core/fxcrt/xml/cfx_xmlnode.cpp
+++ b/core/fxcrt/xml/cfx_xmlnode.cpp
@@ -84,7 +84,7 @@
   if (iLength == 0) {
     return nullptr;
   }
-  CFX_WideString csPath;
+  WideString csPath;
   const wchar_t* pStart = pPath;
   const wchar_t* pEnd = pPath + iLength;
   wchar_t ch;
@@ -105,7 +105,7 @@
   } else if (csPath.Compare(L".") == 0) {
     pFind = (CFX_XMLNode*)this;
   } else {
-    CFX_WideString wsTag;
+    WideString wsTag;
     CFX_XMLNode* pNode = m_pChild;
     while (pNode) {
       if (pNode->GetType() == FX_XMLNODE_Element) {
@@ -334,7 +334,7 @@
   CFX_XMLNode* pNode = (CFX_XMLNode*)this;
   switch (pNode->GetType()) {
     case FX_XMLNODE_Instruction: {
-      CFX_WideString ws;
+      WideString ws;
       CFX_XMLInstruction* pInstruction = (CFX_XMLInstruction*)pNode;
       if (pInstruction->GetName().CompareNoCase(L"xml") == 0) {
         ws = L"<?xml version=\"1.0\" encoding=\"";
@@ -347,13 +347,13 @@
           ws += L"UTF-8";
         }
         ws += L"\"?>";
-        pXMLStream->WriteString(ws.AsStringC());
+        pXMLStream->WriteString(ws.AsStringView());
       } else {
         ws.Format(L"<?%s", pInstruction->GetName().c_str());
-        pXMLStream->WriteString(ws.AsStringC());
+        pXMLStream->WriteString(ws.AsStringView());
 
         for (auto it : pInstruction->GetAttributes()) {
-          CFX_WideString wsValue = it.second;
+          WideString wsValue = it.second;
           wsValue.Replace(L"&", L"&amp;");
           wsValue.Replace(L"<", L"&lt;");
           wsValue.Replace(L">", L"&gt;");
@@ -365,28 +365,28 @@
           ws += L"=\"";
           ws += wsValue;
           ws += L"\"";
-          pXMLStream->WriteString(ws.AsStringC());
+          pXMLStream->WriteString(ws.AsStringView());
         }
 
         for (auto target : pInstruction->GetTargetData()) {
           ws = L" \"";
           ws += target;
           ws += L"\"";
-          pXMLStream->WriteString(ws.AsStringC());
+          pXMLStream->WriteString(ws.AsStringView());
         }
         ws = L"?>";
-        pXMLStream->WriteString(ws.AsStringC());
+        pXMLStream->WriteString(ws.AsStringView());
       }
       break;
     }
     case FX_XMLNODE_Element: {
-      CFX_WideString ws;
+      WideString ws;
       ws = L"<";
       ws += static_cast<CFX_XMLElement*>(pNode)->GetName();
-      pXMLStream->WriteString(ws.AsStringC());
+      pXMLStream->WriteString(ws.AsStringView());
 
       for (auto it : static_cast<CFX_XMLElement*>(pNode)->GetAttributes()) {
-        CFX_WideString wsValue = it.second;
+        WideString wsValue = it.second;
         wsValue.Replace(L"&", L"&amp;");
         wsValue.Replace(L"<", L"&lt;");
         wsValue.Replace(L">", L"&gt;");
@@ -398,11 +398,11 @@
         ws += L"=\"";
         ws += wsValue;
         ws += L"\"";
-        pXMLStream->WriteString(ws.AsStringC());
+        pXMLStream->WriteString(ws.AsStringView());
       }
       if (pNode->m_pChild) {
         ws = L"\n>";
-        pXMLStream->WriteString(ws.AsStringC());
+        pXMLStream->WriteString(ws.AsStringView());
         CFX_XMLNode* pChild = pNode->m_pChild;
         while (pChild) {
           pChild->SaveXMLNode(pXMLStream);
@@ -414,24 +414,24 @@
       } else {
         ws = L"\n/>";
       }
-      pXMLStream->WriteString(ws.AsStringC());
+      pXMLStream->WriteString(ws.AsStringView());
       break;
     }
     case FX_XMLNODE_Text: {
-      CFX_WideString ws = static_cast<CFX_XMLText*>(pNode)->GetText();
+      WideString ws = static_cast<CFX_XMLText*>(pNode)->GetText();
       ws.Replace(L"&", L"&amp;");
       ws.Replace(L"<", L"&lt;");
       ws.Replace(L">", L"&gt;");
       ws.Replace(L"\'", L"&apos;");
       ws.Replace(L"\"", L"&quot;");
-      pXMLStream->WriteString(ws.AsStringC());
+      pXMLStream->WriteString(ws.AsStringView());
       break;
     }
     case FX_XMLNODE_CharData: {
-      CFX_WideString ws = L"<![CDATA[";
+      WideString ws = L"<![CDATA[";
       ws += static_cast<CFX_XMLCharData*>(pNode)->GetText();
       ws += L"]]>";
-      pXMLStream->WriteString(ws.AsStringC());
+      pXMLStream->WriteString(ws.AsStringView());
       break;
     }
     case FX_XMLNODE_Unknown:
diff --git a/core/fxcrt/xml/cfx_xmlparser.cpp b/core/fxcrt/xml/cfx_xmlparser.cpp
index ce45481..280c06d 100644
--- a/core/fxcrt/xml/cfx_xmlparser.cpp
+++ b/core/fxcrt/xml/cfx_xmlparser.cpp
@@ -101,7 +101,7 @@
         m_pParent = m_pChild;
 
         if (m_dwCheckStatus != 0x03 && m_NodeStack.size() == 3) {
-          CFX_WideString wsTag =
+          WideString wsTag =
               static_cast<CFX_XMLElement*>(m_pChild)->GetLocalTagName();
           if (wsTag == L"template") {
             m_dwCheckStatus |= 0x01;
diff --git a/core/fxcrt/xml/cfx_xmlparser.h b/core/fxcrt/xml/cfx_xmlparser.h
index 9746d78..f98b658 100644
--- a/core/fxcrt/xml/cfx_xmlparser.h
+++ b/core/fxcrt/xml/cfx_xmlparser.h
@@ -38,8 +38,8 @@
   CFX_XMLNode* m_pParent;
   CFX_XMLNode* m_pChild;
   std::stack<CFX_XMLNode*> m_NodeStack;
-  CFX_WideString m_ws1;
-  CFX_WideString m_ws2;
+  WideString m_ws1;
+  WideString m_ws2;
   FX_XmlSyntaxResult m_syntaxParserResult;
 };
 
diff --git a/core/fxcrt/xml/cfx_xmlsyntaxparser.cpp b/core/fxcrt/xml/cfx_xmlsyntaxparser.cpp
index bbbc4f4..d559852 100644
--- a/core/fxcrt/xml/cfx_xmlsyntaxparser.cpp
+++ b/core/fxcrt/xml/cfx_xmlsyntaxparser.cpp
@@ -623,7 +623,7 @@
   m_pCurrentBlock[m_iIndexInBlock++] = character;
   m_BlockBuffer.IncrementDataLength();
   if (m_iEntityStart > -1 && character == L';') {
-    CFX_WideString csEntity = m_BlockBuffer.GetTextData(
+    WideString csEntity = m_BlockBuffer.GetTextData(
         m_iEntityStart + 1,
         m_BlockBuffer.GetDataLength() - 1 - m_iEntityStart - 1);
     int32_t iLen = csEntity.GetLength();
diff --git a/core/fxcrt/xml/cfx_xmlsyntaxparser.h b/core/fxcrt/xml/cfx_xmlsyntaxparser.h
index c59caba..d3f4bf2 100644
--- a/core/fxcrt/xml/cfx_xmlsyntaxparser.h
+++ b/core/fxcrt/xml/cfx_xmlsyntaxparser.h
@@ -50,27 +50,27 @@
   int32_t GetCurrentNodeNumber() const { return m_iCurrentNodeNum; }
   int32_t GetLastNodeNumber() const { return m_iLastNodeNum; }
 
-  CFX_WideString GetTargetName() const {
+  WideString GetTargetName() const {
     return m_BlockBuffer.GetTextData(0, m_iTextDataLength);
   }
 
-  CFX_WideString GetTagName() const {
+  WideString GetTagName() const {
     return m_BlockBuffer.GetTextData(0, m_iTextDataLength);
   }
 
-  CFX_WideString GetAttributeName() const {
+  WideString GetAttributeName() const {
     return m_BlockBuffer.GetTextData(0, m_iTextDataLength);
   }
 
-  CFX_WideString GetAttributeValue() const {
+  WideString GetAttributeValue() const {
     return m_BlockBuffer.GetTextData(0, m_iTextDataLength);
   }
 
-  CFX_WideString GetTextData() const {
+  WideString GetTextData() const {
     return m_BlockBuffer.GetTextData(0, m_iTextDataLength);
   }
 
-  CFX_WideString GetTargetData() const {
+  WideString GetTargetData() const {
     return m_BlockBuffer.GetTextData(0, m_iTextDataLength);
   }
 
diff --git a/core/fxcrt/xml/cfx_xmltext.cpp b/core/fxcrt/xml/cfx_xmltext.cpp
index 4c41fcd..83ad043 100644
--- a/core/fxcrt/xml/cfx_xmltext.cpp
+++ b/core/fxcrt/xml/cfx_xmltext.cpp
@@ -8,7 +8,7 @@
 
 #include "third_party/base/ptr_util.h"
 
-CFX_XMLText::CFX_XMLText(const CFX_WideString& wsText)
+CFX_XMLText::CFX_XMLText(const WideString& wsText)
     : CFX_XMLNode(), m_wsText(wsText) {}
 
 CFX_XMLText::~CFX_XMLText() {}
diff --git a/core/fxcrt/xml/cfx_xmltext.h b/core/fxcrt/xml/cfx_xmltext.h
index 20fb858..e9f3585 100644
--- a/core/fxcrt/xml/cfx_xmltext.h
+++ b/core/fxcrt/xml/cfx_xmltext.h
@@ -14,18 +14,18 @@
 
 class CFX_XMLText : public CFX_XMLNode {
  public:
-  explicit CFX_XMLText(const CFX_WideString& wsText);
+  explicit CFX_XMLText(const WideString& wsText);
   ~CFX_XMLText() override;
 
   // CFX_XMLNode
   FX_XMLNODETYPE GetType() const override;
   std::unique_ptr<CFX_XMLNode> Clone() override;
 
-  CFX_WideString GetText() const { return m_wsText; }
-  void SetText(const CFX_WideString& wsText) { m_wsText = wsText; }
+  WideString GetText() const { return m_wsText; }
+  void SetText(const WideString& wsText) { m_wsText = wsText; }
 
  private:
-  CFX_WideString m_wsText;
+  WideString m_wsText;
 };
 
 #endif  // CORE_FXCRT_XML_CFX_XMLTEXT_H_
diff --git a/core/fxcrt/xml/cxml_attritem.cpp b/core/fxcrt/xml/cxml_attritem.cpp
index 8e55799..cbbf3f6 100644
--- a/core/fxcrt/xml/cxml_attritem.cpp
+++ b/core/fxcrt/xml/cxml_attritem.cpp
@@ -6,7 +6,7 @@
 
 #include "core/fxcrt/xml/cxml_attritem.h"
 
-bool CXML_AttrItem::Matches(const CFX_ByteString& space,
-                            const CFX_ByteString& name) const {
+bool CXML_AttrItem::Matches(const ByteString& space,
+                            const ByteString& name) const {
   return (space.IsEmpty() || m_QSpaceName == space) && m_AttrName == name;
 }
diff --git a/core/fxcrt/xml/cxml_attritem.h b/core/fxcrt/xml/cxml_attritem.h
index 63305e8..84d8295 100644
--- a/core/fxcrt/xml/cxml_attritem.h
+++ b/core/fxcrt/xml/cxml_attritem.h
@@ -11,11 +11,11 @@
 
 class CXML_AttrItem {
  public:
-  bool Matches(const CFX_ByteString& space, const CFX_ByteString& name) const;
+  bool Matches(const ByteString& space, const ByteString& name) const;
 
-  CFX_ByteString m_QSpaceName;
-  CFX_ByteString m_AttrName;
-  CFX_WideString m_Value;
+  ByteString m_QSpaceName;
+  ByteString m_AttrName;
+  WideString m_Value;
 };
 
 #endif  // CORE_FXCRT_XML_CXML_ATTRITEM_H_
diff --git a/core/fxcrt/xml/cxml_attrmap.cpp b/core/fxcrt/xml/cxml_attrmap.cpp
index 8d226fe..733bbea 100644
--- a/core/fxcrt/xml/cxml_attrmap.cpp
+++ b/core/fxcrt/xml/cxml_attrmap.cpp
@@ -13,8 +13,8 @@
 
 CXML_AttrMap::~CXML_AttrMap() {}
 
-const CFX_WideString* CXML_AttrMap::Lookup(const CFX_ByteString& space,
-                                           const CFX_ByteString& name) const {
+const WideString* CXML_AttrMap::Lookup(const ByteString& space,
+                                       const ByteString& name) const {
   if (!m_pMap)
     return nullptr;
 
@@ -25,9 +25,9 @@
   return nullptr;
 }
 
-void CXML_AttrMap::SetAt(const CFX_ByteString& space,
-                         const CFX_ByteString& name,
-                         const CFX_WideString& value) {
+void CXML_AttrMap::SetAt(const ByteString& space,
+                         const ByteString& name,
+                         const WideString& value) {
   if (!m_pMap)
     m_pMap = pdfium::MakeUnique<std::vector<CXML_AttrItem>>();
 
@@ -38,7 +38,7 @@
     }
   }
 
-  m_pMap->push_back({space, name, CFX_WideString(value)});
+  m_pMap->push_back({space, name, WideString(value)});
 }
 
 int CXML_AttrMap::GetSize() const {
diff --git a/core/fxcrt/xml/cxml_attrmap.h b/core/fxcrt/xml/cxml_attrmap.h
index 0a026d3..a09522b 100644
--- a/core/fxcrt/xml/cxml_attrmap.h
+++ b/core/fxcrt/xml/cxml_attrmap.h
@@ -18,14 +18,14 @@
   CXML_AttrMap();
   ~CXML_AttrMap();
 
-  const CFX_WideString* Lookup(const CFX_ByteString& space,
-                               const CFX_ByteString& name) const;
+  const WideString* Lookup(const ByteString& space,
+                           const ByteString& name) const;
   int GetSize() const;
   CXML_AttrItem& GetAt(int index) const;
 
-  void SetAt(const CFX_ByteString& space,
-             const CFX_ByteString& name,
-             const CFX_WideString& value);
+  void SetAt(const ByteString& space,
+             const ByteString& name,
+             const WideString& value);
 
   std::unique_ptr<std::vector<CXML_AttrItem>> m_pMap;
 };
diff --git a/core/fxcrt/xml/cxml_content.cpp b/core/fxcrt/xml/cxml_content.cpp
index fe0c185..a235009 100644
--- a/core/fxcrt/xml/cxml_content.cpp
+++ b/core/fxcrt/xml/cxml_content.cpp
@@ -6,7 +6,7 @@
 
 #include "core/fxcrt/xml/cxml_content.h"
 
-CXML_Content::CXML_Content(bool bCDATA, const CFX_WideStringC& content)
+CXML_Content::CXML_Content(bool bCDATA, const WideStringView& content)
     : m_bCDATA(bCDATA), m_Content(content) {}
 
 CXML_Content::~CXML_Content() {}
diff --git a/core/fxcrt/xml/cxml_content.h b/core/fxcrt/xml/cxml_content.h
index 641efe6..97c1abf 100644
--- a/core/fxcrt/xml/cxml_content.h
+++ b/core/fxcrt/xml/cxml_content.h
@@ -12,7 +12,7 @@
 
 class CXML_Content : public CXML_Object {
  public:
-  CXML_Content(bool bCDATA, const CFX_WideStringC& content);
+  CXML_Content(bool bCDATA, const WideStringView& content);
   ~CXML_Content() override;
 
   // CXML_Object:
@@ -20,7 +20,7 @@
   const CXML_Content* AsContent() const override;
 
   bool m_bCDATA;
-  CFX_WideString m_Content;
+  WideString m_Content;
 };
 
 #endif  // CORE_FXCRT_XML_CXML_CONTENT_H_
diff --git a/core/fxcrt/xml/cxml_element.cpp b/core/fxcrt/xml/cxml_element.cpp
index ec0a73b..42cbdec 100644
--- a/core/fxcrt/xml/cxml_element.cpp
+++ b/core/fxcrt/xml/cxml_element.cpp
@@ -19,8 +19,8 @@
 }
 
 CXML_Element::CXML_Element(const CXML_Element* pParent,
-                           const CFX_ByteStringC& qSpace,
-                           const CFX_ByteStringC& tagname)
+                           const ByteStringView& qSpace,
+                           const ByteStringView& tagname)
     : m_pParent(pParent), m_QSpaceName(qSpace), m_TagName(tagname) {}
 
 CXML_Element::~CXML_Element() {}
@@ -33,23 +33,22 @@
   return this;
 }
 
-CFX_ByteString CXML_Element::GetTagName(bool bQualified) const {
+ByteString CXML_Element::GetTagName(bool bQualified) const {
   if (!bQualified || m_QSpaceName.IsEmpty()) {
     return m_TagName;
   }
-  CFX_ByteString bsTag = m_QSpaceName;
+  ByteString bsTag = m_QSpaceName;
   bsTag += ":";
   bsTag += m_TagName;
   return bsTag;
 }
 
-CFX_ByteString CXML_Element::GetNamespace(bool bQualified) const {
+ByteString CXML_Element::GetNamespace(bool bQualified) const {
   return bQualified ? m_QSpaceName : GetNamespaceURI(m_QSpaceName);
 }
 
-CFX_ByteString CXML_Element::GetNamespaceURI(
-    const CFX_ByteString& qName) const {
-  const CFX_WideString* pwsSpace;
+ByteString CXML_Element::GetNamespaceURI(const ByteString& qName) const {
+  const WideString* pwsSpace;
   const CXML_Element* pElement = this;
   do {
     if (qName.IsEmpty())
@@ -61,13 +60,13 @@
 
     pElement = pElement->GetParent();
   } while (pElement);
-  return pwsSpace ? pwsSpace->UTF8Encode() : CFX_ByteString();
+  return pwsSpace ? pwsSpace->UTF8Encode() : ByteString();
 }
 
 void CXML_Element::GetAttrByIndex(int index,
-                                  CFX_ByteString* space,
-                                  CFX_ByteString* name,
-                                  CFX_WideString* value) const {
+                                  ByteString* space,
+                                  ByteString* name,
+                                  WideString* value) const {
   if (index < 0 || index >= m_AttrMap.GetSize())
     return;
 
@@ -77,26 +76,26 @@
   *value = item.m_Value;
 }
 
-bool CXML_Element::HasAttr(const CFX_ByteStringC& name) const {
-  CFX_ByteStringC bsSpace;
-  CFX_ByteStringC bsName;
+bool CXML_Element::HasAttr(const ByteStringView& name) const {
+  ByteStringView bsSpace;
+  ByteStringView bsName;
   FX_XML_SplitQualifiedName(name, bsSpace, bsName);
-  return !!m_AttrMap.Lookup(CFX_ByteString(bsSpace), CFX_ByteString(bsName));
+  return !!m_AttrMap.Lookup(ByteString(bsSpace), ByteString(bsName));
 }
 
-bool CXML_Element::GetAttrValue(const CFX_ByteStringC& name,
-                                CFX_WideString& attribute) const {
-  CFX_ByteStringC bsSpace;
-  CFX_ByteStringC bsName;
+bool CXML_Element::GetAttrValue(const ByteStringView& name,
+                                WideString& attribute) const {
+  ByteStringView bsSpace;
+  ByteStringView bsName;
   FX_XML_SplitQualifiedName(name, bsSpace, bsName);
   return GetAttrValue(bsSpace, bsName, attribute);
 }
 
-bool CXML_Element::GetAttrValue(const CFX_ByteStringC& space,
-                                const CFX_ByteStringC& name,
-                                CFX_WideString& attribute) const {
-  const CFX_WideString* pValue =
-      m_AttrMap.Lookup(CFX_ByteString(space), CFX_ByteString(name));
+bool CXML_Element::GetAttrValue(const ByteStringView& space,
+                                const ByteStringView& name,
+                                WideString& attribute) const {
+  const WideString* pValue =
+      m_AttrMap.Lookup(ByteString(space), ByteString(name));
   if (!pValue)
     return false;
 
@@ -104,13 +103,13 @@
   return true;
 }
 
-bool CXML_Element::GetAttrInteger(const CFX_ByteStringC& name,
+bool CXML_Element::GetAttrInteger(const ByteStringView& name,
                                   int& attribute) const {
-  CFX_ByteStringC bsSpace;
-  CFX_ByteStringC bsName;
+  ByteStringView bsSpace;
+  ByteStringView bsName;
   FX_XML_SplitQualifiedName(name, bsSpace, bsName);
-  const CFX_WideString* pwsValue =
-      m_AttrMap.Lookup(CFX_ByteString(bsSpace), CFX_ByteString(bsName));
+  const WideString* pwsValue =
+      m_AttrMap.Lookup(ByteString(bsSpace), ByteString(bsName));
   if (!pwsValue)
     return false;
 
@@ -118,11 +117,11 @@
   return true;
 }
 
-bool CXML_Element::GetAttrInteger(const CFX_ByteStringC& space,
-                                  const CFX_ByteStringC& name,
+bool CXML_Element::GetAttrInteger(const ByteStringView& space,
+                                  const ByteStringView& name,
                                   int& attribute) const {
-  const CFX_WideString* pwsValue =
-      m_AttrMap.Lookup(CFX_ByteString(space), CFX_ByteString(name));
+  const WideString* pwsValue =
+      m_AttrMap.Lookup(ByteString(space), ByteString(name));
   if (!pwsValue)
     return false;
 
@@ -130,19 +129,19 @@
   return true;
 }
 
-bool CXML_Element::GetAttrFloat(const CFX_ByteStringC& name,
+bool CXML_Element::GetAttrFloat(const ByteStringView& name,
                                 float& attribute) const {
-  CFX_ByteStringC bsSpace;
-  CFX_ByteStringC bsName;
+  ByteStringView bsSpace;
+  ByteStringView bsName;
   FX_XML_SplitQualifiedName(name, bsSpace, bsName);
   return GetAttrFloat(bsSpace, bsName, attribute);
 }
 
-bool CXML_Element::GetAttrFloat(const CFX_ByteStringC& space,
-                                const CFX_ByteStringC& name,
+bool CXML_Element::GetAttrFloat(const ByteStringView& space,
+                                const ByteStringView& name,
                                 float& attribute) const {
-  const CFX_WideString* pValue =
-      m_AttrMap.Lookup(CFX_ByteString(space), CFX_ByteString(name));
+  const WideString* pValue =
+      m_AttrMap.Lookup(ByteString(space), ByteString(name));
   if (!pValue)
     return false;
 
@@ -150,8 +149,8 @@
   return true;
 }
 
-uint32_t CXML_Element::CountElements(const CFX_ByteStringC& space,
-                                     const CFX_ByteStringC& tag) const {
+uint32_t CXML_Element::CountElements(const ByteStringView& space,
+                                     const ByteStringView& tag) const {
   int count = 0;
   for (const auto& pChild : m_Children) {
     const CXML_Element* pKid = pChild->AsElement();
@@ -167,8 +166,8 @@
   return index < m_Children.size() ? m_Children[index].get() : nullptr;
 }
 
-CXML_Element* CXML_Element::GetElement(const CFX_ByteStringC& space,
-                                       const CFX_ByteStringC& tag,
+CXML_Element* CXML_Element::GetElement(const ByteStringView& space,
+                                       const ByteStringView& tag,
                                        int nth) const {
   if (nth < 0)
     return nullptr;
@@ -196,10 +195,10 @@
   return 0xFFFFFFFF;
 }
 
-void CXML_Element::SetTag(const CFX_ByteStringC& qTagName) {
+void CXML_Element::SetTag(const ByteStringView& qTagName) {
   ASSERT(!qTagName.IsEmpty());
-  CFX_ByteStringC bsSpace;
-  CFX_ByteStringC bsName;
+  ByteStringView bsSpace;
+  ByteStringView bsName;
   FX_XML_SplitQualifiedName(qTagName, bsSpace, bsName);
   m_QSpaceName = bsSpace;
   m_TagName = bsName;
diff --git a/core/fxcrt/xml/cxml_element.h b/core/fxcrt/xml/cxml_element.h
index a4b4b14..91ac731 100644
--- a/core/fxcrt/xml/cxml_element.h
+++ b/core/fxcrt/xml/cxml_element.h
@@ -18,85 +18,84 @@
   static std::unique_ptr<CXML_Element> Parse(const void* pBuffer, size_t size);
 
   CXML_Element(const CXML_Element* pParent,
-               const CFX_ByteStringC& qSpace,
-               const CFX_ByteStringC& tagname);
+               const ByteStringView& qSpace,
+               const ByteStringView& tagname);
   ~CXML_Element() override;
 
   // CXML_Object:
   CXML_Element* AsElement() override;
   const CXML_Element* AsElement() const override;
 
-  CFX_ByteString GetTagName(bool bQualified = false) const;
-  CFX_ByteString GetNamespace(bool bQualified = false) const;
-  CFX_ByteString GetNamespaceURI(const CFX_ByteString& qName) const;
+  ByteString GetTagName(bool bQualified = false) const;
+  ByteString GetNamespace(bool bQualified = false) const;
+  ByteString GetNamespaceURI(const ByteString& qName) const;
   const CXML_Element* GetParent() const { return m_pParent.Get(); }
   uint32_t CountAttrs() const { return m_AttrMap.GetSize(); }
   void GetAttrByIndex(int index,
-                      CFX_ByteString* space,
-                      CFX_ByteString* name,
-                      CFX_WideString* value) const;
-  bool HasAttr(const CFX_ByteStringC& qName) const;
-  bool GetAttrValue(const CFX_ByteStringC& name,
-                    CFX_WideString& attribute) const;
-  CFX_WideString GetAttrValue(const CFX_ByteStringC& name) const {
-    CFX_WideString attr;
+                      ByteString* space,
+                      ByteString* name,
+                      WideString* value) const;
+  bool HasAttr(const ByteStringView& qName) const;
+  bool GetAttrValue(const ByteStringView& name, WideString& attribute) const;
+  WideString GetAttrValue(const ByteStringView& name) const {
+    WideString attr;
     GetAttrValue(name, attr);
     return attr;
   }
 
-  bool GetAttrValue(const CFX_ByteStringC& space,
-                    const CFX_ByteStringC& name,
-                    CFX_WideString& attribute) const;
-  CFX_WideString GetAttrValue(const CFX_ByteStringC& space,
-                              const CFX_ByteStringC& name) const {
-    CFX_WideString attr;
+  bool GetAttrValue(const ByteStringView& space,
+                    const ByteStringView& name,
+                    WideString& attribute) const;
+  WideString GetAttrValue(const ByteStringView& space,
+                          const ByteStringView& name) const {
+    WideString attr;
     GetAttrValue(space, name, attr);
     return attr;
   }
 
-  bool GetAttrInteger(const CFX_ByteStringC& name, int& attribute) const;
-  int GetAttrInteger(const CFX_ByteStringC& name) const {
+  bool GetAttrInteger(const ByteStringView& name, int& attribute) const;
+  int GetAttrInteger(const ByteStringView& name) const {
     int attr = 0;
     GetAttrInteger(name, attr);
     return attr;
   }
 
-  bool GetAttrInteger(const CFX_ByteStringC& space,
-                      const CFX_ByteStringC& name,
+  bool GetAttrInteger(const ByteStringView& space,
+                      const ByteStringView& name,
                       int& attribute) const;
-  int GetAttrInteger(const CFX_ByteStringC& space,
-                     const CFX_ByteStringC& name) const {
+  int GetAttrInteger(const ByteStringView& space,
+                     const ByteStringView& name) const {
     int attr = 0;
     GetAttrInteger(space, name, attr);
     return attr;
   }
 
-  bool GetAttrFloat(const CFX_ByteStringC& name, float& attribute) const;
-  float GetAttrFloat(const CFX_ByteStringC& name) const {
+  bool GetAttrFloat(const ByteStringView& name, float& attribute) const;
+  float GetAttrFloat(const ByteStringView& name) const {
     float attr = 0;
     GetAttrFloat(name, attr);
     return attr;
   }
 
-  bool GetAttrFloat(const CFX_ByteStringC& space,
-                    const CFX_ByteStringC& name,
+  bool GetAttrFloat(const ByteStringView& space,
+                    const ByteStringView& name,
                     float& attribute) const;
-  float GetAttrFloat(const CFX_ByteStringC& space,
-                     const CFX_ByteStringC& name) const {
+  float GetAttrFloat(const ByteStringView& space,
+                     const ByteStringView& name) const {
     float attr = 0;
     GetAttrFloat(space, name, attr);
     return attr;
   }
 
   uint32_t CountChildren() const { return m_Children.size(); }
-  uint32_t CountElements(const CFX_ByteStringC& space,
-                         const CFX_ByteStringC& tag) const;
+  uint32_t CountElements(const ByteStringView& space,
+                         const ByteStringView& tag) const;
   CXML_Object* GetChild(uint32_t index) const;
-  CXML_Element* GetElement(const CFX_ByteStringC& space,
-                           const CFX_ByteStringC& tag,
+  CXML_Element* GetElement(const ByteStringView& space,
+                           const ByteStringView& tag,
                            int nth) const;
   uint32_t FindElement(CXML_Element* pElement) const;
-  void SetTag(const CFX_ByteStringC& qTagName);
+  void SetTag(const ByteStringView& qTagName);
   void RemoveChild(uint32_t index);
 
  private:
@@ -104,8 +103,8 @@
   friend class CXML_Composer;
 
   CFX_UnownedPtr<const CXML_Element> const m_pParent;
-  CFX_ByteString m_QSpaceName;
-  CFX_ByteString m_TagName;
+  ByteString m_QSpaceName;
+  ByteString m_TagName;
   CXML_AttrMap m_AttrMap;
   std::vector<std::unique_ptr<CXML_Object>> m_Children;
 };
diff --git a/core/fxcrt/xml/cxml_parser.cpp b/core/fxcrt/xml/cxml_parser.cpp
index 9679e2c..adf83c7 100644
--- a/core/fxcrt/xml/cxml_parser.cpp
+++ b/core/fxcrt/xml/cxml_parser.cpp
@@ -78,9 +78,9 @@
 
 }  // namespace
 
-void FX_XML_SplitQualifiedName(const CFX_ByteStringC& bsFullName,
-                               CFX_ByteStringC& bsSpace,
-                               CFX_ByteStringC& bsName) {
+void FX_XML_SplitQualifiedName(const ByteStringView& bsFullName,
+                               ByteStringView& bsSpace,
+                               ByteStringView& bsName) {
   if (bsFullName.IsEmpty())
     return;
 
@@ -139,7 +139,7 @@
   } while (ReadNextBlock());
 }
 
-void CXML_Parser::GetName(CFX_ByteString* space, CFX_ByteString* name) {
+void CXML_Parser::GetName(ByteString* space, ByteString* name) {
   m_nOffset = m_nBufferOffset + static_cast<FX_FILESIZE>(m_dwIndex);
   if (IsEOF())
     return;
@@ -149,7 +149,7 @@
     while (m_dwIndex < m_dwBufferSize) {
       uint8_t ch = m_pBuffer[m_dwIndex];
       if (ch == ':') {
-        *space = CFX_ByteString(buf);
+        *space = ByteString(buf);
         buf.str("");
       } else if (g_FXCRT_XML_IsNameChar(ch)) {
         buf << static_cast<char>(ch);
@@ -162,10 +162,10 @@
     if (m_dwIndex < m_dwBufferSize || IsEOF())
       break;
   } while (ReadNextBlock());
-  *name = CFX_ByteString(buf);
+  *name = ByteString(buf);
 }
 
-void CXML_Parser::SkipLiterals(const CFX_ByteStringC& str) {
+void CXML_Parser::SkipLiterals(const ByteStringView& str) {
   m_nOffset = m_nBufferOffset + static_cast<FX_FILESIZE>(m_dwIndex);
   if (IsEOF()) {
     return;
@@ -281,7 +281,7 @@
   return code;
 }
 
-void CXML_Parser::GetAttrValue(CFX_WideString& value) {
+void CXML_Parser::GetAttrValue(WideString& value) {
   m_nOffset = m_nBufferOffset + static_cast<FX_FILESIZE>(m_dwIndex);
   if (IsEOF())
     return;
@@ -323,8 +323,8 @@
 
 void CXML_Parser::GetTagName(bool bStartTag,
                              bool* bEndTag,
-                             CFX_ByteString* space,
-                             CFX_ByteString* name) {
+                             ByteString* space,
+                             ByteString* name) {
   m_nOffset = m_nBufferOffset + static_cast<FX_FILESIZE>(m_dwIndex);
   if (IsEOF())
     return;
@@ -389,18 +389,18 @@
   if (IsEOF())
     return nullptr;
 
-  CFX_ByteString tag_name;
-  CFX_ByteString tag_space;
+  ByteString tag_name;
+  ByteString tag_space;
   bool bEndTag;
   GetTagName(bStartTag, &bEndTag, &tag_space, &tag_name);
   if (tag_name.IsEmpty() || bEndTag)
     return nullptr;
 
   auto pElement = pdfium::MakeUnique<CXML_Element>(
-      pParent, tag_space.AsStringC(), tag_name.AsStringC());
+      pParent, tag_space.AsStringView(), tag_name.AsStringView());
   do {
-    CFX_ByteString attr_space;
-    CFX_ByteString attr_name;
+    ByteString attr_space;
+    ByteString attr_name;
     while (m_dwIndex < m_dwBufferSize) {
       SkipWhiteSpaces();
       if (IsEOF())
@@ -422,7 +422,7 @@
       if (IsEOF())
         break;
 
-      CFX_WideString attr_value;
+      WideString attr_value;
       GetAttrValue(attr_value);
       pElement->m_AttrMap.SetAt(attr_space, attr_name, attr_value);
     }
@@ -474,19 +474,20 @@
             SkipWhiteSpaces();
             iState = 0;
           } else if (ch == '/') {
-            CFX_ByteString space;
-            CFX_ByteString name;
+            ByteString space;
+            ByteString name;
             GetName(&space, &name);
             SkipWhiteSpaces();
             m_dwIndex++;
             iState = 10;
           } else {
             content << decoder.GetResult();
-            CFX_WideString dataStr = content.MakeString();
+            WideString dataStr = content.MakeString();
             if (!bCDATA)
               dataStr.TrimRight(L" \t\r\n");
 
-            InsertContentSegment(bCDATA, dataStr.AsStringC(), pElement.get());
+            InsertContentSegment(bCDATA, dataStr.AsStringView(),
+                                 pElement.get());
             content.Clear();
             decoder.Clear();
             bCDATA = false;
@@ -524,10 +525,10 @@
       break;
   } while (ReadNextBlock());
   content << decoder.GetResult();
-  CFX_WideString dataStr = content.MakeString();
+  WideString dataStr = content.MakeString();
   dataStr.TrimRight(L" \t\r\n");
 
-  InsertContentSegment(bCDATA, dataStr.AsStringC(), pElement.get());
+  InsertContentSegment(bCDATA, dataStr.AsStringView(), pElement.get());
   content.Clear();
   decoder.Clear();
   bCDATA = false;
@@ -535,7 +536,7 @@
 }
 
 void CXML_Parser::InsertContentSegment(bool bCDATA,
-                                       const CFX_WideStringC& content,
+                                       const WideStringView& content,
                                        CXML_Element* pElement) {
   if (content.IsEmpty())
     return;
diff --git a/core/fxcrt/xml/cxml_parser.h b/core/fxcrt/xml/cxml_parser.h
index 33bd711..ee5a1b6 100644
--- a/core/fxcrt/xml/cxml_parser.h
+++ b/core/fxcrt/xml/cxml_parser.h
@@ -26,18 +26,18 @@
   bool IsEOF();
   bool HaveAvailData();
   void SkipWhiteSpaces();
-  void GetName(CFX_ByteString* space, CFX_ByteString* name);
-  void GetAttrValue(CFX_WideString& value);
+  void GetName(ByteString* space, ByteString* name);
+  void GetAttrValue(WideString& value);
   uint32_t GetCharRef();
   void GetTagName(bool bStartTag,
                   bool* bEndTag,
-                  CFX_ByteString* space,
-                  CFX_ByteString* name);
-  void SkipLiterals(const CFX_ByteStringC& str);
+                  ByteString* space,
+                  ByteString* name);
+  void SkipLiterals(const ByteStringView& str);
   std::unique_ptr<CXML_Element> ParseElement(CXML_Element* pParent,
                                              bool bStartTag);
   void InsertContentSegment(bool bCDATA,
-                            const CFX_WideStringC& content,
+                            const WideStringView& content,
                             CXML_Element* pElement);
   void InsertCDATASegment(CFX_UTF8Decoder& decoder, CXML_Element* pElement);
 
@@ -54,8 +54,8 @@
   size_t m_dwIndex;
 };
 
-void FX_XML_SplitQualifiedName(const CFX_ByteStringC& bsFullName,
-                               CFX_ByteStringC& bsSpace,
-                               CFX_ByteStringC& bsName);
+void FX_XML_SplitQualifiedName(const ByteStringView& bsFullName,
+                               ByteStringView& bsSpace,
+                               ByteStringView& bsName);
 
 #endif  // CORE_FXCRT_XML_CXML_PARSER_H_
diff --git a/core/fxge/android/cfpf_skiafont.cpp b/core/fxge/android/cfpf_skiafont.cpp
index e00aa84..1ca0f57 100644
--- a/core/fxge/android/cfpf_skiafont.cpp
+++ b/core/fxge/android/cfpf_skiafont.cpp
@@ -41,15 +41,15 @@
   return this;
 }
 
-CFX_ByteString CFPF_SkiaFont::GetFamilyName() {
+ByteString CFPF_SkiaFont::GetFamilyName() {
   if (!m_Face)
-    return CFX_ByteString();
-  return CFX_ByteString(FXFT_Get_Face_Family_Name(m_Face));
+    return ByteString();
+  return ByteString(FXFT_Get_Face_Family_Name(m_Face));
 }
 
-CFX_ByteString CFPF_SkiaFont::GetPsName() {
+ByteString CFPF_SkiaFont::GetPsName() {
   if (!m_Face)
-    return CFX_ByteString();
+    return ByteString();
   return FXFT_Get_Postscript_Name(m_Face);
 }
 
@@ -181,7 +181,7 @@
 
 bool CFPF_SkiaFont::InitFont(CFPF_SkiaFontMgr* pFontMgr,
                              CFPF_SkiaFontDescriptor* pFontDes,
-                             const CFX_ByteStringC& bsFamily,
+                             const ByteStringView& bsFamily,
                              uint32_t dwStyle,
                              uint8_t uCharset) {
   if (!pFontMgr || !pFontDes)
diff --git a/core/fxge/android/cfpf_skiafont.h b/core/fxge/android/cfpf_skiafont.h
index 5686e9e..c842d5a 100644
--- a/core/fxge/android/cfpf_skiafont.h
+++ b/core/fxge/android/cfpf_skiafont.h
@@ -22,8 +22,8 @@
   void Release();
   CFPF_SkiaFont* Retain();
 
-  CFX_ByteString GetFamilyName();
-  CFX_ByteString GetPsName();
+  ByteString GetFamilyName();
+  ByteString GetPsName();
   uint32_t GetFontStyle() const { return m_dwStyle; }
   uint8_t GetCharset() const { return m_uCharset; }
   int32_t GetGlyphIndex(wchar_t wUnicode);
@@ -38,7 +38,7 @@
 
   bool InitFont(CFPF_SkiaFontMgr* pFontMgr,
                 CFPF_SkiaFontDescriptor* pFontDes,
-                const CFX_ByteStringC& bsFamily,
+                const ByteStringView& bsFamily,
                 uint32_t dwStyle,
                 uint8_t uCharset);
 
diff --git a/core/fxge/android/cfpf_skiafontmgr.cpp b/core/fxge/android/cfpf_skiafontmgr.cpp
index 16a6df5..a50b9ea 100644
--- a/core/fxge/android/cfpf_skiafontmgr.cpp
+++ b/core/fxge/android/cfpf_skiafontmgr.cpp
@@ -158,7 +158,7 @@
   return FPF_SKIACHARSET_Default;
 }
 
-uint32_t FPF_SKIANormalizeFontName(const CFX_ByteStringC& bsfamily) {
+uint32_t FPF_SKIANormalizeFontName(const ByteStringView& bsfamily) {
   uint32_t dwHash = 0;
   int32_t iLength = bsfamily.GetLength();
   const char* pBuffer = bsfamily.unterminated_c_str();
@@ -171,10 +171,10 @@
   return dwHash;
 }
 
-uint32_t FPF_SKIAGetFamilyHash(const CFX_ByteStringC& bsFamily,
+uint32_t FPF_SKIAGetFamilyHash(const ByteStringView& bsFamily,
                                uint32_t dwStyle,
                                uint8_t uCharset) {
-  CFX_ByteString bsFont(bsFamily);
+  ByteString bsFont(bsFamily);
   if (dwStyle & FXFONT_BOLD)
     bsFont += "Bold";
   if (dwStyle & FXFONT_ITALIC)
@@ -191,14 +191,14 @@
          (uCharset == FX_CHARSET_Hangul) || (uCharset == FX_CHARSET_ShiftJIS);
 }
 
-bool FPF_SkiaMaybeSymbol(const CFX_ByteStringC& bsFacename) {
-  CFX_ByteString bsName(bsFacename);
+bool FPF_SkiaMaybeSymbol(const ByteStringView& bsFacename) {
+  ByteString bsName(bsFacename);
   bsName.MakeLower();
   return bsName.Contains("symbol");
 }
 
-bool FPF_SkiaMaybeArabic(const CFX_ByteStringC& bsFacename) {
-  CFX_ByteString bsName(bsFacename);
+bool FPF_SkiaMaybeArabic(const ByteStringView& bsFacename) {
+  ByteString bsName(bsFacename);
   bsName.MakeLower();
   return bsName.Contains("arabic");
 }
@@ -280,7 +280,7 @@
   m_bLoaded = true;
 }
 
-CFPF_SkiaFont* CFPF_SkiaFontMgr::CreateFont(const CFX_ByteStringC& bsFamilyname,
+CFPF_SkiaFont* CFPF_SkiaFontMgr::CreateFont(const ByteStringView& bsFamilyname,
                                             uint8_t uCharset,
                                             uint32_t dwStyle,
                                             uint32_t dwMatch) {
@@ -387,7 +387,7 @@
   return face;
 }
 
-FXFT_Face CFPF_SkiaFontMgr::GetFontFace(const CFX_ByteStringC& bsFile,
+FXFT_Face CFPF_SkiaFontMgr::GetFontFace(const ByteStringView& bsFile,
                                         int32_t iFaceIndex) {
   if (bsFile.IsEmpty())
     return nullptr;
@@ -421,23 +421,23 @@
   return face;
 }
 
-void CFPF_SkiaFontMgr::ScanPath(const CFX_ByteString& path) {
+void CFPF_SkiaFontMgr::ScanPath(const ByteString& path) {
   DIR* handle = FX_OpenFolder(path.c_str());
   if (!handle)
     return;
-  CFX_ByteString filename;
+  ByteString filename;
   bool bFolder = false;
   while (FX_GetNextFile(handle, &filename, &bFolder)) {
     if (bFolder) {
       if (filename == "." || filename == "..")
         continue;
     } else {
-      CFX_ByteString ext = filename.Right(4);
+      ByteString ext = filename.Right(4);
       ext.MakeLower();
       if (ext != ".ttf" && ext != ".ttc" && ext != ".otf")
         continue;
     }
-    CFX_ByteString fullpath(path);
+    ByteString fullpath(path);
     fullpath += "/";
     fullpath += filename;
     if (bFolder)
@@ -448,8 +448,8 @@
   FX_CloseFolder(handle);
 }
 
-void CFPF_SkiaFontMgr::ScanFile(const CFX_ByteString& file) {
-  FXFT_Face face = GetFontFace(file.AsStringC());
+void CFPF_SkiaFontMgr::ScanFile(const ByteString& file) {
+  FXFT_Face face = GetFontFace(file.AsStringView());
   if (!face)
     return;
   CFPF_SkiaPathFont* pFontDesc = new CFPF_SkiaPathFont;
diff --git a/core/fxge/android/cfpf_skiafontmgr.h b/core/fxge/android/cfpf_skiafontmgr.h
index 4d0ea0e..78d0171 100644
--- a/core/fxge/android/cfpf_skiafontmgr.h
+++ b/core/fxge/android/cfpf_skiafontmgr.h
@@ -25,7 +25,7 @@
   ~CFPF_SkiaFontMgr();
 
   void LoadSystemFonts();
-  CFPF_SkiaFont* CreateFont(const CFX_ByteStringC& bsFamilyname,
+  CFPF_SkiaFont* CreateFont(const ByteStringView& bsFamilyname,
                             uint8_t uCharset,
                             uint32_t dwStyle,
                             uint32_t dwMatch = 0);
@@ -33,14 +33,14 @@
   bool InitFTLibrary();
   FXFT_Face GetFontFace(const CFX_RetainPtr<IFX_SeekableReadStream>& pFileRead,
                         int32_t iFaceIndex = 0);
-  FXFT_Face GetFontFace(const CFX_ByteStringC& bsFile, int32_t iFaceIndex = 0);
+  FXFT_Face GetFontFace(const ByteStringView& bsFile, int32_t iFaceIndex = 0);
   FXFT_Face GetFontFace(const uint8_t* pBuffer,
                         size_t szBuffer,
                         int32_t iFaceIndex = 0);
 
  private:
-  void ScanPath(const CFX_ByteString& path);
-  void ScanFile(const CFX_ByteString& file);
+  void ScanPath(const ByteString& path);
+  void ScanFile(const ByteString& file);
   void ReportFace(FXFT_Face face, CFPF_SkiaFontDescriptor* pFontDesc);
 
   bool m_bLoaded;
diff --git a/core/fxge/android/cfx_androidfontinfo.cpp b/core/fxge/android/cfx_androidfontinfo.cpp
index 1183cde..c6c3e61 100644
--- a/core/fxge/android/cfx_androidfontinfo.cpp
+++ b/core/fxge/android/cfx_androidfontinfo.cpp
@@ -63,7 +63,7 @@
   return static_cast<CFPF_SkiaFont*>(hFont)->GetFontData(table, buffer, size);
 }
 
-bool CFX_AndroidFontInfo::GetFaceName(void* hFont, CFX_ByteString* name) {
+bool CFX_AndroidFontInfo::GetFaceName(void* hFont, ByteString* name) {
   if (!hFont)
     return false;
 
diff --git a/core/fxge/android/cfx_androidfontinfo.h b/core/fxge/android/cfx_androidfontinfo.h
index 17bbf89..3fde349 100644
--- a/core/fxge/android/cfx_androidfontinfo.h
+++ b/core/fxge/android/cfx_androidfontinfo.h
@@ -35,7 +35,7 @@
                        uint32_t table,
                        uint8_t* buffer,
                        uint32_t size) override;
-  bool GetFaceName(void* hFont, CFX_ByteString* name) override;
+  bool GetFaceName(void* hFont, ByteString* name) override;
   bool GetFontCharset(void* hFont, int* charset) override;
   void DeleteFont(void* hFont) override;
 
diff --git a/core/fxge/apple/fx_mac_imp.cpp b/core/fxge/apple/fx_mac_imp.cpp
index 2eee8e2..6379847 100644
--- a/core/fxge/apple/fx_mac_imp.cpp
+++ b/core/fxge/apple/fx_mac_imp.cpp
@@ -51,7 +51,7 @@
 const char JAPAN_GOTHIC[] = "Hiragino Kaku Gothic Pro W6";
 const char JAPAN_MINCHO[] = "Hiragino Mincho Pro W6";
 
-void GetJapanesePreference(CFX_ByteString* face, int weight, int pitch_family) {
+void GetJapanesePreference(ByteString* face, int weight, int pitch_family) {
   if (face->Contains("Gothic")) {
     *face = JAPAN_GOTHIC;
     return;
@@ -66,9 +66,9 @@
                                int pitch_family,
                                const char* cstr_face,
                                int& iExact) {
-  CFX_ByteString face = cstr_face;
+  ByteString face = cstr_face;
   for (size_t i = 0; i < FX_ArraySize(g_Base14Substs); ++i) {
-    if (face == CFX_ByteStringC(g_Base14Substs[i].m_pName)) {
+    if (face == ByteStringView(g_Base14Substs[i].m_pName)) {
       face = g_Base14Substs[i].m_pSubstName;
       iExact = true;
       return GetFont(face.c_str());
@@ -83,7 +83,7 @@
   // fonts in |m_FontList| with |face| in the name, and examine the fonts to
   // see which best matches the requested characteristics.
   if (!face.Contains("Bold") && !face.Contains("Italic")) {
-    CFX_ByteString new_face = face;
+    ByteString new_face = face;
     if (weight > 400)
       new_face += " Bold";
     if (bItalic)
diff --git a/core/fxge/cfx_facecache.cpp b/core/fxge/cfx_facecache.cpp
index eac2807..74b38ef 100644
--- a/core/fxge/cfx_facecache.cpp
+++ b/core/fxge/cfx_facecache.cpp
@@ -299,7 +299,7 @@
     }
   }
 #endif
-  CFX_ByteString FaceGlyphsKey(keygen.m_Key, keygen.m_KeyLen);
+  ByteString FaceGlyphsKey(keygen.m_Key, keygen.m_KeyLen);
 #if _FXM_PLATFORM_ != _FXM_PLATFORM_APPLE_ || defined _SKIA_SUPPORT_ || \
     defined _SKIA_SUPPORT_PATHS_
   return LookUpGlyphBitmap(pFont, pMatrix, FaceGlyphsKey, glyph_index,
@@ -344,7 +344,7 @@
     keygen.Generate(6, nMatrixA, nMatrixB, nMatrixC, nMatrixD, dest_width,
                     anti_alias);
   }
-  CFX_ByteString FaceGlyphsKey2(keygen.m_Key, keygen.m_KeyLen);
+  ByteString FaceGlyphsKey2(keygen.m_Key, keygen.m_KeyLen);
   text_flags |= FXTEXT_NO_NATIVETEXT;
   return LookUpGlyphBitmap(pFont, pMatrix, FaceGlyphsKey2, glyph_index,
                            bFontStyle, dest_width, anti_alias);
@@ -375,7 +375,7 @@
 CFX_GlyphBitmap* CFX_FaceCache::LookUpGlyphBitmap(
     const CFX_Font* pFont,
     const CFX_Matrix* pMatrix,
-    const CFX_ByteString& FaceGlyphsKey,
+    const ByteString& FaceGlyphsKey,
     uint32_t glyph_index,
     bool bFontStyle,
     int dest_width,
diff --git a/core/fxge/cfx_facecache.h b/core/fxge/cfx_facecache.h
index 076ba1f..58b08ed 100644
--- a/core/fxge/cfx_facecache.h
+++ b/core/fxge/cfx_facecache.h
@@ -52,7 +52,7 @@
       int anti_alias);
   CFX_GlyphBitmap* LookUpGlyphBitmap(const CFX_Font* pFont,
                                      const CFX_Matrix* pMatrix,
-                                     const CFX_ByteString& FaceGlyphsKey,
+                                     const ByteString& FaceGlyphsKey,
                                      uint32_t glyph_index,
                                      bool bFontStyle,
                                      int dest_width,
@@ -61,7 +61,7 @@
   void DestroyPlatform();
 
   FXFT_Face const m_Face;
-  std::map<CFX_ByteString, std::unique_ptr<CFX_SizeGlyphCache>> m_SizeMap;
+  std::map<ByteString, std::unique_ptr<CFX_SizeGlyphCache>> m_SizeMap;
   std::map<uint32_t, std::unique_ptr<CFX_PathData>> m_PathMap;
 #if defined _SKIA_SUPPORT_ || _SKIA_SUPPORT_PATHS_
   sk_sp<SkTypeface> m_pTypeface;
diff --git a/core/fxge/cfx_folderfontinfo.cpp b/core/fxge/cfx_folderfontinfo.cpp
index f4f57e4..0dc61c9 100644
--- a/core/fxge/cfx_folderfontinfo.cpp
+++ b/core/fxge/cfx_folderfontinfo.cpp
@@ -36,18 +36,18 @@
     {"Times-Italic", "Times New Roman Italic"},
 };
 
-CFX_ByteString FPDF_ReadStringFromFile(FILE* pFile, uint32_t size) {
-  CFX_ByteString buffer;
+ByteString FPDF_ReadStringFromFile(FILE* pFile, uint32_t size) {
+  ByteString buffer;
   if (!fread(buffer.GetBuffer(size), size, 1, pFile))
-    return CFX_ByteString();
+    return ByteString();
   buffer.ReleaseBuffer(size);
   return buffer;
 }
 
-CFX_ByteString FPDF_LoadTableFromTT(FILE* pFile,
-                                    const uint8_t* pTables,
-                                    uint32_t nTables,
-                                    uint32_t tag) {
+ByteString FPDF_LoadTableFromTT(FILE* pFile,
+                                const uint8_t* pTables,
+                                uint32_t nTables,
+                                uint32_t tag) {
   for (uint32_t i = 0; i < nTables; i++) {
     const uint8_t* p = pTables + i * 16;
     if (GET_TT_LONG(p) == tag) {
@@ -57,7 +57,7 @@
       return FPDF_ReadStringFromFile(pFile, size);
     }
   }
-  return CFX_ByteString();
+  return ByteString();
 }
 
 uint32_t GetCharset(int charset) {
@@ -106,7 +106,7 @@
 
 CFX_FolderFontInfo::~CFX_FolderFontInfo() {}
 
-void CFX_FolderFontInfo::AddPath(const CFX_ByteString& path) {
+void CFX_FolderFontInfo::AddPath(const ByteString& path) {
   m_PathList.push_back(path);
 }
 
@@ -117,25 +117,25 @@
   return true;
 }
 
-void CFX_FolderFontInfo::ScanPath(const CFX_ByteString& path) {
+void CFX_FolderFontInfo::ScanPath(const ByteString& path) {
   FX_FileHandle* handle = FX_OpenFolder(path.c_str());
   if (!handle)
     return;
 
-  CFX_ByteString filename;
+  ByteString filename;
   bool bFolder;
   while (FX_GetNextFile(handle, &filename, &bFolder)) {
     if (bFolder) {
       if (filename == "." || filename == "..")
         continue;
     } else {
-      CFX_ByteString ext = filename.Right(4);
+      ByteString ext = filename.Right(4);
       ext.MakeUpper();
       if (ext != ".TTF" && ext != ".OTF" && ext != ".TTC")
         continue;
     }
 
-    CFX_ByteString fullpath = path;
+    ByteString fullpath = path;
 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_
     fullpath += "\\";
 #else
@@ -148,7 +148,7 @@
   FX_CloseFolder(handle);
 }
 
-void CFX_FolderFontInfo::ScanFile(const CFX_ByteString& path) {
+void CFX_FolderFontInfo::ScanFile(const ByteString& path) {
   FILE* pFile = fopen(path.c_str(), "rb");
   if (!pFile)
     return;
@@ -190,7 +190,7 @@
   fclose(pFile);
 }
 
-void CFX_FolderFontInfo::ReportFace(const CFX_ByteString& path,
+void CFX_FolderFontInfo::ReportFace(const ByteString& path,
                                     FILE* pFile,
                                     uint32_t filesize,
                                     uint32_t offset) {
@@ -200,21 +200,20 @@
     return;
 
   uint32_t nTables = GET_TT_SHORT(buffer + 4);
-  CFX_ByteString tables = FPDF_ReadStringFromFile(pFile, nTables * 16);
+  ByteString tables = FPDF_ReadStringFromFile(pFile, nTables * 16);
   if (tables.IsEmpty())
     return;
 
-  CFX_ByteString names =
+  ByteString names =
       FPDF_LoadTableFromTT(pFile, tables.raw_str(), nTables, 0x6e616d65);
   if (names.IsEmpty())
     return;
 
-  CFX_ByteString facename =
-      GetNameFromTT(names.raw_str(), names.GetLength(), 1);
+  ByteString facename = GetNameFromTT(names.raw_str(), names.GetLength(), 1);
   if (facename.IsEmpty())
     return;
 
-  CFX_ByteString style = GetNameFromTT(names.raw_str(), names.GetLength(), 2);
+  ByteString style = GetNameFromTT(names.raw_str(), names.GetLength(), 2);
   if (style != "Regular")
     facename += " " + style;
 
@@ -223,7 +222,7 @@
 
   auto pInfo = pdfium::MakeUnique<CFX_FontFaceInfo>(path, facename, tables,
                                                     offset, filesize);
-  CFX_ByteString os2 =
+  ByteString os2 =
       FPDF_LoadTableFromTT(pFile, tables.raw_str(), nTables, 0x4f532f32);
   if (os2.GetLength() >= 86) {
     const uint8_t* p = os2.raw_str() + 78;
@@ -262,7 +261,7 @@
   m_FontList[facename] = std::move(pInfo);
 }
 
-void* CFX_FolderFontInfo::GetSubstFont(const CFX_ByteString& face) {
+void* CFX_FolderFontInfo::GetSubstFont(const ByteString& face) {
   for (size_t iBaseFont = 0; iBaseFont < FX_ArraySize(Base14Substs);
        iBaseFont++) {
     if (face == Base14Substs[iBaseFont].m_pName)
@@ -284,7 +283,7 @@
   uint32_t charset_flag = GetCharset(charset);
   int32_t iBestSimilar = 0;
   for (const auto& it : m_FontList) {
-    const CFX_ByteString& bsName = it.first;
+    const ByteString& bsName = it.first;
     CFX_FontFaceInfo* pFont = it.second.get();
     if (!(pFont->m_Charsets & charset_flag) && charset != FX_CHARSET_Default)
       continue;
@@ -367,7 +366,7 @@
 
 void CFX_FolderFontInfo::DeleteFont(void* hFont) {}
 
-bool CFX_FolderFontInfo::GetFaceName(void* hFont, CFX_ByteString* name) {
+bool CFX_FolderFontInfo::GetFaceName(void* hFont, ByteString* name) {
   if (!hFont)
     return false;
   *name = static_cast<CFX_FontFaceInfo*>(hFont)->m_FaceName;
diff --git a/core/fxge/cfx_folderfontinfo.h b/core/fxge/cfx_folderfontinfo.h
index 82ed902..e7c3f21 100644
--- a/core/fxge/cfx_folderfontinfo.h
+++ b/core/fxge/cfx_folderfontinfo.h
@@ -21,7 +21,7 @@
   CFX_FolderFontInfo();
   ~CFX_FolderFontInfo() override;
 
-  void AddPath(const CFX_ByteString& path);
+  void AddPath(const ByteString& path);
 
   // IFX_SytemFontInfo:
   bool EnumFontList(CFX_FontMapper* pMapper) override;
@@ -43,17 +43,17 @@
                        uint8_t* buffer,
                        uint32_t size) override;
   void DeleteFont(void* hFont) override;
-  bool GetFaceName(void* hFont, CFX_ByteString* name) override;
+  bool GetFaceName(void* hFont, ByteString* name) override;
   bool GetFontCharset(void* hFont, int* charset) override;
 
  protected:
-  void ScanPath(const CFX_ByteString& path);
-  void ScanFile(const CFX_ByteString& path);
-  void ReportFace(const CFX_ByteString& path,
+  void ScanPath(const ByteString& path);
+  void ScanFile(const ByteString& path);
+  void ReportFace(const ByteString& path,
                   FILE* pFile,
                   uint32_t filesize,
                   uint32_t offset);
-  void* GetSubstFont(const CFX_ByteString& face);
+  void* GetSubstFont(const ByteString& face);
   void* FindFont(int weight,
                  bool bItalic,
                  int charset,
@@ -61,8 +61,8 @@
                  const char* family,
                  bool bMatchName);
 
-  std::map<CFX_ByteString, std::unique_ptr<CFX_FontFaceInfo>> m_FontList;
-  std::vector<CFX_ByteString> m_PathList;
+  std::map<ByteString, std::unique_ptr<CFX_FontFaceInfo>> m_FontList;
+  std::vector<ByteString> m_PathList;
   CFX_UnownedPtr<CFX_FontMapper> m_pMapper;
 };
 
diff --git a/core/fxge/cfx_font.cpp b/core/fxge/cfx_font.cpp
index 7a51df1..017b120 100644
--- a/core/fxge/cfx_font.cpp
+++ b/core/fxge/cfx_font.cpp
@@ -291,7 +291,7 @@
   m_Face = nullptr;
 }
 
-void CFX_Font::LoadSubst(const CFX_ByteString& face_name,
+void CFX_Font::LoadSubst(const ByteString& face_name,
                          bool bTrueType,
                          uint32_t flags,
                          int weight,
@@ -446,7 +446,7 @@
   if (FXFT_Is_Face_Italic(m_Face) == FXFT_STYLE_FLAG_ITALIC)
     return true;
 
-  CFX_ByteString str(FXFT_Get_Face_Style_Name(m_Face));
+  ByteString str(FXFT_Get_Face_Style_Name(m_Face));
   str.MakeLower();
   return str.Contains("italic");
 }
@@ -459,31 +459,31 @@
   return m_Face && FXFT_Is_Face_fixedwidth(m_Face) != 0;
 }
 
-CFX_ByteString CFX_Font::GetPsName() const {
+ByteString CFX_Font::GetPsName() const {
   if (!m_Face)
-    return CFX_ByteString();
+    return ByteString();
 
-  CFX_ByteString psName = FXFT_Get_Postscript_Name(m_Face);
+  ByteString psName = FXFT_Get_Postscript_Name(m_Face);
   if (psName.IsEmpty())
     psName = "Untitled";
   return psName;
 }
 
-CFX_ByteString CFX_Font::GetFamilyName() const {
+ByteString CFX_Font::GetFamilyName() const {
   if (!m_Face && !m_pSubstFont)
-    return CFX_ByteString();
+    return ByteString();
   if (m_Face)
-    return CFX_ByteString(FXFT_Get_Face_Family_Name(m_Face));
+    return ByteString(FXFT_Get_Face_Family_Name(m_Face));
 
   return m_pSubstFont->m_Family;
 }
 
-CFX_ByteString CFX_Font::GetFaceName() const {
+ByteString CFX_Font::GetFaceName() const {
   if (!m_Face && !m_pSubstFont)
-    return CFX_ByteString();
+    return ByteString();
   if (m_Face) {
-    CFX_ByteString style = CFX_ByteString(FXFT_Get_Face_Style_Name(m_Face));
-    CFX_ByteString facename = GetFamilyName();
+    ByteString style = ByteString(FXFT_Get_Face_Style_Name(m_Face));
+    ByteString facename = GetFamilyName();
     if (facename.IsEmpty())
       facename = "Untitled";
     if (!style.IsEmpty() && style != "Regular")
diff --git a/core/fxge/cfx_fontmapper.cpp b/core/fxge/cfx_fontmapper.cpp
index bff9fad..4e26c62 100644
--- a/core/fxge/cfx_fontmapper.cpp
+++ b/core/fxge/cfx_fontmapper.cpp
@@ -170,7 +170,7 @@
 };
 
 int CompareFontFamilyString(const void* key, const void* element) {
-  CFX_ByteString str_key((const char*)key);
+  ByteString str_key((const char*)key);
   const AltFontFamily* family = reinterpret_cast<const AltFontFamily*>(element);
   if (str_key.Contains(family->m_pFontName))
     return 0;
@@ -182,8 +182,8 @@
                        reinterpret_cast<const AltFontName*>(element)->m_pName);
 }
 
-CFX_ByteString TT_NormalizeName(const char* family) {
-  CFX_ByteString norm(family);
+ByteString TT_NormalizeName(const char* family) {
+  ByteString norm(family);
   norm.Remove(' ');
   norm.Remove('-');
   norm.Remove(',');
@@ -207,7 +207,7 @@
   return FX_CHARSET_Default;
 }
 
-CFX_ByteString GetFontFamily(CFX_ByteString fontName, int nStyle) {
+ByteString GetFontFamily(ByteString fontName, int nStyle) {
   if (fontName.Contains("Script")) {
     if ((nStyle & FX_FONT_STYLE_Bold) == FX_FONT_STYLE_Bold)
       fontName = "ScriptMTBold";
@@ -222,23 +222,23 @@
   AltFontFamily* found = reinterpret_cast<AltFontFamily*>(bsearch(
       fontName.c_str(), g_AltFontFamilies, FX_ArraySize(g_AltFontFamilies),
       sizeof(AltFontFamily), CompareFontFamilyString));
-  return found ? CFX_ByteString(found->m_pFontFamily) : fontName;
+  return found ? ByteString(found->m_pFontFamily) : fontName;
 }
 
-CFX_ByteString ParseStyle(const char* pStyle, int iLen, int iIndex) {
+ByteString ParseStyle(const char* pStyle, int iLen, int iIndex) {
   std::ostringstream buf;
   if (!iLen || iLen <= iIndex)
-    return CFX_ByteString(buf);
+    return ByteString(buf);
   while (iIndex < iLen) {
     if (pStyle[iIndex] == ',')
       break;
     buf << pStyle[iIndex];
     ++iIndex;
   }
-  return CFX_ByteString(buf);
+  return ByteString(buf);
 }
 
-int32_t GetStyleType(const CFX_ByteString& bsStyle, bool bReverse) {
+int32_t GetStyleType(const ByteString& bsStyle, bool bReverse) {
   int32_t iLen = bsStyle.GetLength();
   if (!iLen)
     return -1;
@@ -260,7 +260,7 @@
   return -1;
 }
 
-bool CheckSupportThirdPartFont(CFX_ByteString name, int& PitchFamily) {
+bool CheckSupportThirdPartFont(ByteString name, int& PitchFamily) {
   if (name == "MyriadPro") {
     PitchFamily &= ~FXFONT_FF_ROMAN;
     return true;
@@ -305,23 +305,23 @@
   m_pFontInfo = std::move(pFontInfo);
 }
 
-CFX_ByteString CFX_FontMapper::GetPSNameFromTT(void* hFont) {
+ByteString CFX_FontMapper::GetPSNameFromTT(void* hFont) {
   if (!m_pFontInfo)
-    return CFX_ByteString();
+    return ByteString();
 
   uint32_t size = m_pFontInfo->GetFontData(hFont, kTableNAME, nullptr, 0);
   if (!size)
-    return CFX_ByteString();
+    return ByteString();
 
   std::vector<uint8_t> buffer(size);
   uint8_t* buffer_ptr = buffer.data();
   uint32_t bytes_read =
       m_pFontInfo->GetFontData(hFont, kTableNAME, buffer_ptr, size);
   return bytes_read == size ? GetNameFromTT(buffer_ptr, bytes_read, 6)
-                            : CFX_ByteString();
+                            : ByteString();
 }
 
-void CFX_FontMapper::AddInstalledFont(const CFX_ByteString& name, int charset) {
+void CFX_FontMapper::AddInstalledFont(const ByteString& name, int charset) {
   if (!m_pFontInfo)
     return;
 
@@ -343,7 +343,7 @@
         return;
     }
 
-    CFX_ByteString new_name = GetPSNameFromTT(hFont);
+    ByteString new_name = GetPSNameFromTT(hFont);
     if (!new_name.IsEmpty())
       m_LocalizedTTFonts.push_back(std::make_pair(new_name, name));
     m_pFontInfo->DeleteFont(hFont);
@@ -360,22 +360,20 @@
   m_bListLoaded = true;
 }
 
-CFX_ByteString CFX_FontMapper::MatchInstalledFonts(
-    const CFX_ByteString& norm_name) {
+ByteString CFX_FontMapper::MatchInstalledFonts(const ByteString& norm_name) {
   LoadInstalledFonts();
   int i;
   for (i = pdfium::CollectionSize<int>(m_InstalledTTFonts) - 1; i >= 0; i--) {
-    CFX_ByteString norm1 = TT_NormalizeName(m_InstalledTTFonts[i].c_str());
+    ByteString norm1 = TT_NormalizeName(m_InstalledTTFonts[i].c_str());
     if (norm1 == norm_name)
       return m_InstalledTTFonts[i];
   }
   for (i = pdfium::CollectionSize<int>(m_LocalizedTTFonts) - 1; i >= 0; i--) {
-    CFX_ByteString norm1 =
-        TT_NormalizeName(m_LocalizedTTFonts[i].first.c_str());
+    ByteString norm1 = TT_NormalizeName(m_LocalizedTTFonts[i].first.c_str());
     if (norm1 == norm_name)
       return m_LocalizedTTFonts[i].second;
   }
-  return CFX_ByteString();
+  return ByteString();
 }
 
 FXFT_Face CFX_FontMapper::UseInternalSubst(CFX_SubstFont* pSubstFont,
@@ -418,7 +416,7 @@
   return m_MMFaces[0];
 }
 
-FXFT_Face CFX_FontMapper::FindSubstFont(const CFX_ByteString& name,
+FXFT_Face CFX_FontMapper::FindSubstFont(const ByteString& name,
                                         bool bTrueType,
                                         uint32_t flags,
                                         int weight,
@@ -429,7 +427,7 @@
     weight = FXFONT_FW_NORMAL;
     italic_angle = 0;
   }
-  CFX_ByteString SubstName = name;
+  ByteString SubstName = name;
   SubstName.Remove(' ');
   if (bTrueType && name.GetLength() > 0 && name[0] == '@')
     SubstName = name.Right(name.GetLength() - 1);
@@ -445,8 +443,8 @@
     return UseInternalSubst(pSubstFont, 13, italic_angle, weight, 0);
   }
   int iBaseFont = 0;
-  CFX_ByteString family;
-  CFX_ByteString style;
+  ByteString family;
+  ByteString style;
   bool bHasComma = false;
   bool bHasHyphen = false;
   auto pos = SubstName.Find(",", 0);
@@ -459,7 +457,7 @@
     family = SubstName;
   }
   for (; iBaseFont < 12; iBaseFont++) {
-    if (family == CFX_ByteStringC(g_Base14FontNames[iBaseFont]))
+    if (family == ByteStringView(g_Base14FontNames[iBaseFont]))
       break;
   }
   int PitchFamily = 0;
@@ -505,7 +503,7 @@
     const char* pStyle = style.c_str();
     int i = 0;
     bool bFirstItem = true;
-    CFX_ByteString buf;
+    ByteString buf;
     while (i < nLen) {
       buf = ParseStyle(pStyle, nLen, i);
       int32_t nRet = GetStyleType(buf, false);
@@ -568,7 +566,7 @@
                             PitchFamily);
   }
   family = GetFontFamily(family, nStyle);
-  CFX_ByteString match = MatchInstalledFonts(TT_NormalizeName(family.c_str()));
+  ByteString match = MatchInstalledFonts(TT_NormalizeName(family.c_str()));
   if (match.IsEmpty() && family != SubstName &&
       (!bHasComma && (!bHasHyphen || (bHasHyphen && !bStyleAvail)))) {
     match = MatchInstalledFonts(TT_NormalizeName(SubstName.c_str()));
@@ -742,7 +740,7 @@
   if (ttc_size) {
     face = GetCachedTTCFace(hFont, 0x74746366, ttc_size, font_size);
   } else {
-    CFX_ByteString SubstName;
+    ByteString SubstName;
     m_pFontInfo->GetFaceName(hFont, &SubstName);
     face = GetCachedFace(hFont, SubstName, weight, bItalic, font_size);
   }
@@ -791,7 +789,7 @@
 }
 
 FXFT_Face CFX_FontMapper::GetCachedFace(void* hFont,
-                                        CFX_ByteString SubstName,
+                                        ByteString SubstName,
                                         int weight,
                                         bool bItalic,
                                         uint32_t font_size) {
@@ -808,7 +806,7 @@
   return face;
 }
 
-int PDF_GetStandardFontName(CFX_ByteString* name) {
+int PDF_GetStandardFontName(ByteString* name) {
   AltFontName* found = static_cast<AltFontName*>(
       bsearch(name->c_str(), g_AltFontNames, FX_ArraySize(g_AltFontNames),
               sizeof(AltFontName), CompareString));
diff --git a/core/fxge/cfx_fontmapper.h b/core/fxge/cfx_fontmapper.h
index 1b262bf..3f28c73 100644
--- a/core/fxge/cfx_fontmapper.h
+++ b/core/fxge/cfx_fontmapper.h
@@ -23,10 +23,10 @@
 
   void SetSystemFontInfo(std::unique_ptr<IFX_SystemFontInfo> pFontInfo);
   IFX_SystemFontInfo* GetSystemFontInfo() { return m_pFontInfo.get(); }
-  void AddInstalledFont(const CFX_ByteString& name, int charset);
+  void AddInstalledFont(const ByteString& name, int charset);
   void LoadInstalledFonts();
 
-  FXFT_Face FindSubstFont(const CFX_ByteString& face_name,
+  FXFT_Face FindSubstFont(const ByteString& face_name,
                           bool bTrueType,
                           uint32_t flags,
                           int weight,
@@ -41,19 +41,17 @@
 #endif  // PDF_ENABLE_XFA
   bool IsBuiltinFace(const FXFT_Face face) const;
   int GetFaceSize() const;
-  CFX_ByteString GetFaceName(int index) const {
-    return m_FaceArray[index].name;
-  }
+  ByteString GetFaceName(int index) const { return m_FaceArray[index].name; }
 
-  std::vector<CFX_ByteString> m_InstalledTTFonts;
-  std::vector<std::pair<CFX_ByteString, CFX_ByteString>> m_LocalizedTTFonts;
+  std::vector<ByteString> m_InstalledTTFonts;
+  std::vector<std::pair<ByteString, ByteString>> m_LocalizedTTFonts;
 
  private:
   static const size_t MM_FACE_COUNT = 2;
   static const size_t FOXIT_FACE_COUNT = 14;
 
-  CFX_ByteString GetPSNameFromTT(void* hFont);
-  CFX_ByteString MatchInstalledFonts(const CFX_ByteString& norm_name);
+  ByteString GetPSNameFromTT(void* hFont);
+  ByteString MatchInstalledFonts(const ByteString& norm_name);
   FXFT_Face UseInternalSubst(CFX_SubstFont* pSubstFont,
                              int iBaseFont,
                              int italic_angle,
@@ -64,19 +62,19 @@
                              uint32_t ttc_size,
                              uint32_t font_size);
   FXFT_Face GetCachedFace(void* hFont,
-                          CFX_ByteString SubstName,
+                          ByteString SubstName,
                           int weight,
                           bool bItalic,
                           uint32_t font_size);
 
   struct FaceData {
-    CFX_ByteString name;
+    ByteString name;
     uint32_t charset;
   };
 
   bool m_bListLoaded;
   FXFT_Face m_MMFaces[MM_FACE_COUNT];
-  CFX_ByteString m_LastFamily;
+  ByteString m_LastFamily;
   std::vector<FaceData> m_FaceArray;
   std::unique_ptr<IFX_SystemFontInfo> m_pFontInfo;
   FXFT_Face m_FoxitFaces[FOXIT_FACE_COUNT];
diff --git a/core/fxge/cfx_fontmgr.cpp b/core/fxge/cfx_fontmgr.cpp
index c8beb51..f68598e 100644
--- a/core/fxge/cfx_fontmgr.cpp
+++ b/core/fxge/cfx_fontmgr.cpp
@@ -46,18 +46,18 @@
     {g_FoxitSansMMFontData, 66919},
 };
 
-CFX_ByteString KeyNameFromFace(const CFX_ByteString& face_name,
-                               int weight,
-                               bool bItalic) {
-  CFX_ByteString key(face_name);
+ByteString KeyNameFromFace(const ByteString& face_name,
+                           int weight,
+                           bool bItalic) {
+  ByteString key(face_name);
   key += ',';
-  key += CFX_ByteString::FormatInteger(weight);
+  key += ByteString::FormatInteger(weight);
   key += bItalic ? 'I' : 'N';
   return key;
 }
 
-CFX_ByteString KeyNameFromSize(int ttc_size, uint32_t checksum) {
-  CFX_ByteString key;
+ByteString KeyNameFromSize(int ttc_size, uint32_t checksum) {
+  ByteString key;
   key.Format("%d:%d", ttc_size, checksum);
   return key;
 }
@@ -110,7 +110,7 @@
   m_pBuiltinMapper->SetSystemFontInfo(std::move(pFontInfo));
 }
 
-FXFT_Face CFX_FontMgr::FindSubstFont(const CFX_ByteString& face_name,
+FXFT_Face CFX_FontMgr::FindSubstFont(const ByteString& face_name,
                                      bool bTrueType,
                                      uint32_t flags,
                                      int weight,
@@ -122,7 +122,7 @@
                                          italic_angle, CharsetCP, pSubstFont);
 }
 
-FXFT_Face CFX_FontMgr::GetCachedFace(const CFX_ByteString& face_name,
+FXFT_Face CFX_FontMgr::GetCachedFace(const ByteString& face_name,
                                      int weight,
                                      bool bItalic,
                                      uint8_t*& pFontData) {
@@ -136,7 +136,7 @@
   return pFontDesc->m_SingleFace;
 }
 
-FXFT_Face CFX_FontMgr::AddCachedFace(const CFX_ByteString& face_name,
+FXFT_Face CFX_FontMgr::AddCachedFace(const ByteString& face_name,
                                      int weight,
                                      bool bItalic,
                                      uint8_t* pData,
diff --git a/core/fxge/cfx_fontmgr.h b/core/fxge/cfx_fontmgr.h
index 7ccad80..eddb1ef 100644
--- a/core/fxge/cfx_fontmgr.h
+++ b/core/fxge/cfx_fontmgr.h
@@ -24,11 +24,11 @@
 
   void InitFTLibrary();
 
-  FXFT_Face GetCachedFace(const CFX_ByteString& face_name,
+  FXFT_Face GetCachedFace(const ByteString& face_name,
                           int weight,
                           bool bItalic,
                           uint8_t*& pFontData);
-  FXFT_Face AddCachedFace(const CFX_ByteString& face_name,
+  FXFT_Face AddCachedFace(const ByteString& face_name,
                           int weight,
                           bool bItalic,
                           uint8_t* pData,
@@ -47,7 +47,7 @@
   FXFT_Face GetFixedFace(const uint8_t* pData, uint32_t size, int face_index);
   void ReleaseFace(FXFT_Face face);
   void SetSystemFontInfo(std::unique_ptr<IFX_SystemFontInfo> pFontInfo);
-  FXFT_Face FindSubstFont(const CFX_ByteString& face_name,
+  FXFT_Face FindSubstFont(const ByteString& face_name,
                           bool bTrueType,
                           uint32_t flags,
                           int weight,
@@ -61,7 +61,7 @@
 
  private:
   std::unique_ptr<CFX_FontMapper> m_pBuiltinMapper;
-  std::map<CFX_ByteString, std::unique_ptr<CTTFontDesc>> m_FaceMap;
+  std::map<ByteString, std::unique_ptr<CTTFontDesc>> m_FaceMap;
   FXFT_Library m_FTLibrary;
   bool m_FTLibrarySupportsHinting;
 };
diff --git a/core/fxge/cfx_renderdevice.cpp b/core/fxge/cfx_renderdevice.cpp
index 959c909..5e9f5ae 100644
--- a/core/fxge/cfx_renderdevice.cpp
+++ b/core/fxge/cfx_renderdevice.cpp
@@ -336,7 +336,7 @@
   if (text_flags & FXFONT_CIDFONT)
     return false;
 
-  const CFX_ByteString bsPsName = pFont->GetPsName();
+  const ByteString bsPsName = pFont->GetPsName();
   if (bsPsName.Contains("+ZJHL"))
     return false;
 
diff --git a/core/fxge/cfx_substfont.h b/core/fxge/cfx_substfont.h
index 01196d4..5225bd3 100644
--- a/core/fxge/cfx_substfont.h
+++ b/core/fxge/cfx_substfont.h
@@ -16,7 +16,7 @@
  public:
   CFX_SubstFont();
 
-  CFX_ByteString m_Family;
+  ByteString m_Family;
   int m_Charset;
   uint32_t m_SubstFlags;
   int m_Weight;
diff --git a/core/fxge/fx_font.h b/core/fxge/fx_font.h
index 57fdb54..021efee 100644
--- a/core/fxge/fx_font.h
+++ b/core/fxge/fx_font.h
@@ -87,7 +87,7 @@
   CFX_Font();
   ~CFX_Font();
 
-  void LoadSubst(const CFX_ByteString& face_name,
+  void LoadSubst(const ByteString& face_name,
                  bool bTrueType,
                  uint32_t flags,
                  int weight,
@@ -130,9 +130,9 @@
   bool IsBold() const;
   bool IsFixedWidth() const;
   bool IsVertical() const { return m_bVertical; }
-  CFX_ByteString GetPsName() const;
-  CFX_ByteString GetFamilyName() const;
-  CFX_ByteString GetFaceName() const;
+  ByteString GetPsName() const;
+  ByteString GetFamilyName() const;
+  ByteString GetFaceName() const;
   bool IsTTFont() const;
   bool GetBBox(FX_RECT& bbox);
   bool IsEmbedded() const { return m_bEmbedded; }
@@ -183,15 +183,15 @@
 
 class CFX_FontFaceInfo {
  public:
-  CFX_FontFaceInfo(CFX_ByteString filePath,
-                   CFX_ByteString faceName,
-                   CFX_ByteString fontTables,
+  CFX_FontFaceInfo(ByteString filePath,
+                   ByteString faceName,
+                   ByteString fontTables,
                    uint32_t fontOffset,
                    uint32_t fileSize);
 
-  const CFX_ByteString m_FilePath;
-  const CFX_ByteString m_FaceName;
-  const CFX_ByteString m_FontTables;
+  const ByteString m_FilePath;
+  const ByteString m_FaceName;
+  const ByteString m_FontTables;
   const uint32_t m_FontOffset;
   const uint32_t m_FileSize;
   uint32_t m_Styles;
@@ -229,10 +229,10 @@
                            float retinaScaleX,
                            float retinaScaleY);
 
-CFX_ByteString GetNameFromTT(const uint8_t* name_table,
-                             uint32_t name_table_size,
-                             uint32_t name);
+ByteString GetNameFromTT(const uint8_t* name_table,
+                         uint32_t name_table_size,
+                         uint32_t name);
 
-int PDF_GetStandardFontName(CFX_ByteString* name);
+int PDF_GetStandardFontName(ByteString* name);
 
 #endif  // CORE_FXGE_FX_FONT_H_
diff --git a/core/fxge/fx_ge_fontmap.cpp b/core/fxge/fx_ge_fontmap.cpp
index 7ac4fad..0f27038 100644
--- a/core/fxge/fx_ge_fontmap.cpp
+++ b/core/fxge/fx_ge_fontmap.cpp
@@ -9,28 +9,28 @@
 #include "core/fxge/cfx_fontmapper.h"
 #include "core/fxge/ifx_systemfontinfo.h"
 
-static CFX_ByteString GetStringFromTable(const uint8_t* string_ptr,
-                                         uint32_t string_ptr_length,
-                                         uint16_t offset,
-                                         uint16_t length) {
+static ByteString GetStringFromTable(const uint8_t* string_ptr,
+                                     uint32_t string_ptr_length,
+                                     uint16_t offset,
+                                     uint16_t length) {
   if (string_ptr_length < static_cast<uint32_t>(offset + length)) {
-    return CFX_ByteString();
+    return ByteString();
   }
-  return CFX_ByteString(string_ptr + offset, length);
+  return ByteString(string_ptr + offset, length);
 }
 
-CFX_ByteString GetNameFromTT(const uint8_t* name_table,
-                             uint32_t name_table_size,
-                             uint32_t name_id) {
+ByteString GetNameFromTT(const uint8_t* name_table,
+                         uint32_t name_table_size,
+                         uint32_t name_id) {
   if (!name_table || name_table_size < 6) {
-    return CFX_ByteString();
+    return ByteString();
   }
   uint32_t name_count = GET_TT_SHORT(name_table + 2);
   uint32_t string_offset = GET_TT_SHORT(name_table + 4);
   // We will ignore the possibility of overlap of structures and
   // string table as if it's all corrupt there's not a lot we can do.
   if (name_table_size < string_offset) {
-    return CFX_ByteString();
+    return ByteString();
   }
 
   const uint8_t* string_ptr = name_table + string_offset;
@@ -38,7 +38,7 @@
   name_table += 6;
   name_table_size -= 6;
   if (name_table_size < name_count * 12) {
-    return CFX_ByteString();
+    return ByteString();
   }
 
   for (uint32_t i = 0; i < name_count; i++, name_table += 12) {
@@ -49,7 +49,7 @@
                                 GET_TT_SHORT(name_table + 8));
     }
   }
-  return CFX_ByteString();
+  return ByteString();
 }
 #ifdef PDF_ENABLE_XFA
 void* IFX_SystemFontInfo::MapFontByUnicode(uint32_t dwUnicode,
@@ -79,9 +79,9 @@
 }
 #endif
 
-CFX_FontFaceInfo::CFX_FontFaceInfo(CFX_ByteString filePath,
-                                   CFX_ByteString faceName,
-                                   CFX_ByteString fontTables,
+CFX_FontFaceInfo::CFX_FontFaceInfo(ByteString filePath,
+                                   ByteString faceName,
+                                   ByteString fontTables,
                                    uint32_t fontOffset,
                                    uint32_t fileSize)
     : m_FilePath(filePath),
diff --git a/core/fxge/fx_ge_linux.cpp b/core/fxge/fx_ge_linux.cpp
index d17ddf2..650510f 100644
--- a/core/fxge/fx_ge_linux.cpp
+++ b/core/fxge/fx_ge_linux.cpp
@@ -44,7 +44,7 @@
 size_t GetJapanesePreference(const char* facearr,
                              int weight,
                              int pitch_family) {
-  CFX_ByteString face = facearr;
+  ByteString face = facearr;
   if (face.Contains("Gothic") ||
       face.Contains("\x83\x53\x83\x56\x83\x62\x83\x4e")) {
     if (face.Contains("PGothic") ||
diff --git a/core/fxge/ifx_systemfontinfo.h b/core/fxge/ifx_systemfontinfo.h
index ca7ca2c..cb85f7f 100644
--- a/core/fxge/ifx_systemfontinfo.h
+++ b/core/fxge/ifx_systemfontinfo.h
@@ -42,7 +42,7 @@
                                uint32_t table,
                                uint8_t* buffer,
                                uint32_t size) = 0;
-  virtual bool GetFaceName(void* hFont, CFX_ByteString* name) = 0;
+  virtual bool GetFaceName(void* hFont, ByteString* name) = 0;
   virtual bool GetFontCharset(void* hFont, int* charset) = 0;
   virtual int GetFaceIndex(void* hFont);
   virtual void DeleteFont(void* hFont) = 0;
diff --git a/core/fxge/win32/cfx_psrenderer.cpp b/core/fxge/win32/cfx_psrenderer.cpp
index c02058d..5586d9f 100644
--- a/core/fxge/win32/cfx_psrenderer.cpp
+++ b/core/fxge/win32/cfx_psrenderer.cpp
@@ -669,9 +669,9 @@
       last_fontnum = ps_fontnum;
     }
     buf << pCharPos[i].m_Origin.x << " " << pCharPos[i].m_Origin.y << " m";
-    CFX_ByteString hex;
+    ByteString hex;
     hex.Format("<%02X>", ps_glyphindex);
-    buf << hex.AsStringC() << "Tj\n";
+    buf << hex.AsStringView() << "Tj\n";
   }
   buf << "Q\n";
   m_pStream->WriteBlock(buf.str().c_str(), buf.tellp());
diff --git a/core/fxge/win32/cfx_windowsdib.h b/core/fxge/win32/cfx_windowsdib.h
index 3ecbb58..28f152a 100644
--- a/core/fxge/win32/cfx_windowsdib.h
+++ b/core/fxge/win32/cfx_windowsdib.h
@@ -33,8 +33,7 @@
 
   ~CFX_WindowsDIB() override;
 
-  static CFX_ByteString GetBitmapInfo(
-      const CFX_RetainPtr<CFX_DIBitmap>& pBitmap);
+  static ByteString GetBitmapInfo(const CFX_RetainPtr<CFX_DIBitmap>& pBitmap);
   static HBITMAP GetDDBitmap(const CFX_RetainPtr<CFX_DIBitmap>& pBitmap,
                              HDC hDC);
 
diff --git a/core/fxge/win32/cpsoutput.cpp b/core/fxge/win32/cpsoutput.cpp
index 1af6dbd..83f2fc0 100644
--- a/core/fxge/win32/cpsoutput.cpp
+++ b/core/fxge/win32/cpsoutput.cpp
@@ -31,6 +31,6 @@
   return true;
 }
 
-bool CPSOutput::WriteString(const CFX_ByteStringC& str) {
+bool CPSOutput::WriteString(const ByteStringView& str) {
   return WriteBlock(str.unterminated_c_str(), str.GetLength());
 }
diff --git a/core/fxge/win32/cpsoutput.h b/core/fxge/win32/cpsoutput.h
index 42ad109..d140de9 100644
--- a/core/fxge/win32/cpsoutput.h
+++ b/core/fxge/win32/cpsoutput.h
@@ -19,7 +19,7 @@
 
   // IFX_Writestream
   bool WriteBlock(const void* str, size_t len) override;
-  bool WriteString(const CFX_ByteStringC& str) override;
+  bool WriteString(const ByteStringView& str) override;
 
  private:
   HDC m_hDC;
diff --git a/core/fxge/win32/fx_win32_device.cpp b/core/fxge/win32/fx_win32_device.cpp
index 9c8da59..bb7bf6f 100644
--- a/core/fxge/win32/fx_win32_device.cpp
+++ b/core/fxge/win32/fx_win32_device.cpp
@@ -73,7 +73,7 @@
     {"MS Gothic", "Jun101-Light"},
 };
 
-bool GetSubFontName(CFX_ByteString* name) {
+bool GetSubFontName(ByteString* name) {
   for (size_t i = 0; i < FX_ArraySize(g_JpFontNameMap); ++i) {
     if (!FXSYS_stricmp(name->c_str(), g_JpFontNameMap[i].m_pSrcFontName)) {
       *name = g_JpFontNameMap[i].m_pSubFontName;
@@ -349,23 +349,21 @@
                        uint32_t table,
                        uint8_t* buffer,
                        uint32_t size) override;
-  bool GetFaceName(void* hFont, CFX_ByteString* name) override;
+  bool GetFaceName(void* hFont, ByteString* name) override;
   bool GetFontCharset(void* hFont, int* charset) override;
   void DeleteFont(void* hFont) override;
 
   bool IsOpenTypeFromDiv(const LOGFONTA* plf);
   bool IsSupportFontFormDiv(const LOGFONTA* plf);
   void AddInstalledFont(const LOGFONTA* plf, uint32_t FontType);
-  void GetGBPreference(CFX_ByteString& face, int weight, int picth_family);
-  void GetJapanesePreference(CFX_ByteString& face,
-                             int weight,
-                             int picth_family);
-  CFX_ByteString FindFont(const CFX_ByteString& name);
+  void GetGBPreference(ByteString& face, int weight, int picth_family);
+  void GetJapanesePreference(ByteString& face, int weight, int picth_family);
+  ByteString FindFont(const ByteString& name);
 
   HDC m_hDC;
   CFX_UnownedPtr<CFX_FontMapper> m_pMapper;
-  CFX_ByteString m_LastFamily;
-  CFX_ByteString m_KaiTi, m_FangSong;
+  ByteString m_LastFamily;
+  ByteString m_KaiTi, m_FangSong;
 };
 
 int CALLBACK FontEnumProc(const LOGFONTA* plf,
@@ -429,7 +427,7 @@
 
 void CFX_Win32FontInfo::AddInstalledFont(const LOGFONTA* plf,
                                          uint32_t FontType) {
-  CFX_ByteString name(plf->lfFaceName);
+  ByteString name(plf->lfFaceName);
   if (name.GetLength() > 0 && name[0] == '@')
     return;
 
@@ -458,21 +456,21 @@
   return true;
 }
 
-CFX_ByteString CFX_Win32FontInfo::FindFont(const CFX_ByteString& name) {
+ByteString CFX_Win32FontInfo::FindFont(const ByteString& name) {
   if (!m_pMapper)
     return name;
 
   for (size_t i = 0; i < m_pMapper->m_InstalledTTFonts.size(); ++i) {
-    CFX_ByteString thisname = m_pMapper->m_InstalledTTFonts[i];
+    ByteString thisname = m_pMapper->m_InstalledTTFonts[i];
     if (thisname.Left(name.GetLength()) == name)
       return m_pMapper->m_InstalledTTFonts[i];
   }
   for (size_t i = 0; i < m_pMapper->m_LocalizedTTFonts.size(); ++i) {
-    CFX_ByteString thisname = m_pMapper->m_LocalizedTTFonts[i].first;
+    ByteString thisname = m_pMapper->m_LocalizedTTFonts[i].first;
     if (thisname.Left(name.GetLength()) == name)
       return m_pMapper->m_LocalizedTTFonts[i].second;
   }
-  return CFX_ByteString();
+  return ByteString();
 }
 
 void* CFX_Win32FallbackFontInfo::MapFont(int weight,
@@ -500,7 +498,7 @@
   return FindFont(weight, bItalic, charset, pitch_family, cstr_face, !bCJK);
 }
 
-void CFX_Win32FontInfo::GetGBPreference(CFX_ByteString& face,
+void CFX_Win32FontInfo::GetGBPreference(ByteString& face,
                                         int weight,
                                         int picth_family) {
   if (face.Contains("KaiTi") || face.Contains("\xbf\xac")) {
@@ -530,7 +528,7 @@
   }
 }
 
-void CFX_Win32FontInfo::GetJapanesePreference(CFX_ByteString& face,
+void CFX_Win32FontInfo::GetJapanesePreference(ByteString& face,
                                               int weight,
                                               int picth_family) {
   if (face.Contains("Gothic") ||
@@ -573,10 +571,10 @@
                                  int pitch_family,
                                  const char* cstr_face,
                                  int& iExact) {
-  CFX_ByteString face = cstr_face;
+  ByteString face = cstr_face;
   int iBaseFont;
   for (iBaseFont = 0; iBaseFont < 12; iBaseFont++)
-    if (face == CFX_ByteStringC(g_Base14Substs[iBaseFont].m_pName)) {
+    if (face == ByteStringView(g_Base14Substs[iBaseFont].m_pName)) {
       face = g_Base14Substs[iBaseFont].m_pWinName;
       weight = g_Base14Substs[iBaseFont].m_bBold ? FW_BOLD : FW_NORMAL;
       bItalic = g_Base14Substs[iBaseFont].m_bItalic;
@@ -607,15 +605,15 @@
   if (face.EqualNoCase(facebuf))
     return hFont;
 
-  CFX_WideString wsFace = CFX_WideString::FromLocal(facebuf);
+  WideString wsFace = WideString::FromLocal(facebuf);
   for (size_t i = 0; i < FX_ArraySize(g_VariantNames); ++i) {
     if (face != g_VariantNames[i].m_pFaceName)
       continue;
 
     const unsigned short* pName = reinterpret_cast<const unsigned short*>(
         g_VariantNames[i].m_pVariantName);
-    FX_STRSIZE len = CFX_WideString::WStringLength(pName);
-    CFX_WideString wsName = CFX_WideString::FromUTF16LE(pName, len);
+    FX_STRSIZE len = WideString::WStringLength(pName);
+    WideString wsName = WideString::FromUTF16LE(pName, len);
     if (wsFace == wsName)
       return hFont;
   }
@@ -665,7 +663,7 @@
   return size;
 }
 
-bool CFX_Win32FontInfo::GetFaceName(void* hFont, CFX_ByteString* name) {
+bool CFX_Win32FontInfo::GetFaceName(void* hFont, ByteString* name) {
   char facebuf[100];
   HFONT hOldFont = (HFONT)::SelectObject(m_hDC, (HFONT)hFont);
   int ret = ::GetTextFaceA(m_hDC, 100, facebuf);
@@ -702,7 +700,7 @@
   CHAR windows_path[MAX_PATH] = {};
   DWORD path_len = ::GetWindowsDirectoryA(windows_path, MAX_PATH);
   if (path_len > 0 && path_len < MAX_PATH) {
-    CFX_ByteString fonts_path(windows_path);
+    ByteString fonts_path(windows_path);
     fonts_path += "\\Fonts";
     pInfoFallback->AddPath(fonts_path);
   }
@@ -799,7 +797,7 @@
 
     int width = pSrcRect->Width(), height = pSrcRect->Height();
     LPBYTE pBuffer = pBitmap->GetBuffer();
-    CFX_ByteString info = CFX_WindowsDIB::GetBitmapInfo(pBitmap);
+    ByteString info = CFX_WindowsDIB::GetBitmapInfo(pBitmap);
     ((BITMAPINFOHEADER*)info.c_str())->biHeight *= -1;
     FX_RECT dst_rect(0, 0, width, height);
     dst_rect.Intersect(0, 0, pBitmap->GetWidth(), pBitmap->GetHeight());
@@ -817,7 +815,7 @@
     }
     int width = pSrcRect->Width(), height = pSrcRect->Height();
     LPBYTE pBuffer = pBitmap->GetBuffer();
-    CFX_ByteString info = CFX_WindowsDIB::GetBitmapInfo(pBitmap);
+    ByteString info = CFX_WindowsDIB::GetBitmapInfo(pBitmap);
     ::SetDIBitsToDevice(m_hDC, left, top, width, height, pSrcRect->left,
                         pBitmap->GetHeight() - pSrcRect->bottom, 0,
                         pBitmap->GetHeight(), pBuffer,
@@ -840,7 +838,7 @@
   if (pBitmap->IsCmykImage() && !pBitmap->ConvertFormat(FXDIB_Rgb))
     return false;
 
-  CFX_ByteString info = CFX_WindowsDIB::GetBitmapInfo(pBitmap);
+  ByteString info = CFX_WindowsDIB::GetBitmapInfo(pBitmap);
   if ((int64_t)abs(dest_width) * abs(dest_height) <
           (int64_t)pBitmap1->GetWidth() * pBitmap1->GetHeight() * 4 ||
       (flags & FXDIB_INTERPOL) || (flags & FXDIB_BICUBIC_INTERPOL)) {
@@ -854,7 +852,7 @@
        (int64_t)abs(dest_width) * abs(dest_height))) {
     pToStrechBitmap = pBitmap->StretchTo(dest_width, dest_height, 0, nullptr);
   }
-  CFX_ByteString toStrechBitmapInfo =
+  ByteString toStrechBitmapInfo =
       CFX_WindowsDIB::GetBitmapInfo(pToStrechBitmap);
   ::StretchDIBits(m_hDC, dest_left, dest_top, dest_width, dest_height, 0, 0,
                   pToStrechBitmap->GetWidth(), pToStrechBitmap->GetHeight(),
diff --git a/core/fxge/win32/fx_win32_dib.cpp b/core/fxge/win32/fx_win32_dib.cpp
index d1e5688..c00543b 100644
--- a/core/fxge/win32/fx_win32_dib.cpp
+++ b/core/fxge/win32/fx_win32_dib.cpp
@@ -11,9 +11,9 @@
 #include "core/fxge/win32/cfx_windowsdib.h"
 #include "core/fxge/win32/win32_int.h"
 
-CFX_ByteString CFX_WindowsDIB::GetBitmapInfo(
+ByteString CFX_WindowsDIB::GetBitmapInfo(
     const CFX_RetainPtr<CFX_DIBitmap>& pBitmap) {
-  CFX_ByteString result;
+  ByteString result;
   int len = sizeof(BITMAPINFOHEADER);
   if (pBitmap->GetBPP() == 1 || pBitmap->GetBPP() == 8) {
     len += sizeof(DWORD) * (int)(1 << pBitmap->GetBPP());
@@ -102,7 +102,7 @@
 
 HBITMAP CFX_WindowsDIB::GetDDBitmap(const CFX_RetainPtr<CFX_DIBitmap>& pBitmap,
                                     HDC hDC) {
-  CFX_ByteString info = GetBitmapInfo(pBitmap);
+  ByteString info = GetBitmapInfo(pBitmap);
   return CreateDIBitmap(hDC, (BITMAPINFOHEADER*)info.c_str(), CBM_INIT,
                         pBitmap->GetBuffer(), (BITMAPINFO*)info.c_str(),
                         DIB_RGB_COLORS);
@@ -139,7 +139,7 @@
     DeleteDC(hDC);
     return nullptr;
   }
-  CFX_ByteString info = GetBitmapInfo(pDIBitmap);
+  ByteString info = GetBitmapInfo(pDIBitmap);
   int ret = GetDIBits(hDC, hBitmap, 0, height, pDIBitmap->GetBuffer(),
                       (BITMAPINFO*)info.c_str(), DIB_RGB_COLORS);
   DeleteDC(hDC);
@@ -149,7 +149,7 @@
 }
 
 CFX_RetainPtr<CFX_DIBitmap> CFX_WindowsDIB::LoadFromFile(const char* filename) {
-  return LoadFromFile(CFX_WideString::FromLocal(filename).c_str());
+  return LoadFromFile(WideString::FromLocal(filename).c_str());
 }
 
 CFX_RetainPtr<CFX_DIBitmap> CFX_WindowsDIB::LoadDIBitmap(
@@ -175,7 +175,7 @@
     DeleteDC(hDC);
     return nullptr;
   }
-  CFX_ByteString info = GetBitmapInfo(pDIBitmap);
+  ByteString info = GetBitmapInfo(pDIBitmap);
   int ret = GetDIBits(hDC, hBitmap, 0, height, pDIBitmap->GetBuffer(),
                       (BITMAPINFO*)info.c_str(), DIB_RGB_COLORS);
   DeleteDC(hDC);
diff --git a/core/fxge/win32/fx_win32_gdipext.cpp b/core/fxge/win32/fx_win32_gdipext.cpp
index 04788d6..8161c5d 100644
--- a/core/fxge/win32/fx_win32_gdipext.cpp
+++ b/core/fxge/win32/fx_win32_gdipext.cpp
@@ -682,7 +682,7 @@
   m_pGdiRemoveFontMemResourseEx = nullptr;
 }
 void CGdiplusExt::Load() {
-  CFX_ByteString strPlusPath = "";
+  ByteString strPlusPath = "";
   char buf[MAX_PATH];
   GetSystemDirectoryA(buf, MAX_PATH);
   strPlusPath += buf;
diff --git a/core/fxge/win32/fx_win32_print.cpp b/core/fxge/win32/fx_win32_print.cpp
index ecd7be5..fa2c8b7 100644
--- a/core/fxge/win32/fx_win32_print.cpp
+++ b/core/fxge/win32/fx_win32_print.cpp
@@ -232,7 +232,7 @@
   lf.lfItalic = pFont->IsItalic();
   lf.lfCharSet = DEFAULT_CHARSET;
 
-  const CFX_WideString wsName = pFont->GetFaceName().UTF8Decode();
+  const WideString wsName = pFont->GetFaceName().UTF8Decode();
   size_t iNameLen =
       std::min(wsName.GetLength(), static_cast<size_t>(LF_FACESIZE - 1));
   memcpy(lf.lfFaceName, wsName.c_str(), sizeof(lf.lfFaceName[0]) * iNameLen);
@@ -288,7 +288,7 @@
   SetBkMode(m_hDC, TRANSPARENT);
 
   // Text
-  CFX_WideString wsText;
+  WideString wsText;
   std::vector<INT> spacing(nChars);
   float fPreviousOriginX = 0;
   for (int i = 0; i < nChars; ++i) {
@@ -609,7 +609,7 @@
   // errors below. Value chosen based on the title of https://crbug.com/18383
   const double kScaleFactor = 10;
 
-  CFX_WideString wsText;
+  WideString wsText;
   int totalLength = nChars;
 
   // Detect new lines and add clrf characters (since this is Windows only).
@@ -638,7 +638,7 @@
     wsText += charpos.m_Unicode;
   }
   size_t len = totalLength;
-  CFX_ByteString text = CFX_ByteString::FromUnicode(wsText);
+  ByteString text = ByteString::FromUnicode(wsText);
   while (len > 0) {
     char buffer[1026];
     size_t send_len = std::min(len, static_cast<size_t>(1024));
diff --git a/fpdfsdk/cba_annotiterator.cpp b/fpdfsdk/cba_annotiterator.cpp
index 3e35ff8..d1c9599 100644
--- a/fpdfsdk/cba_annotiterator.cpp
+++ b/fpdfsdk/cba_annotiterator.cpp
@@ -34,7 +34,7 @@
       m_pPageView(pPageView),
       m_nAnnotSubtype(nAnnotSubtype) {
   CPDF_Page* pPDFPage = m_pPageView->GetPDFPage();
-  CFX_ByteString sTabs = pPDFPage->m_pFormDict->GetStringFor("Tabs");
+  ByteString sTabs = pPDFPage->m_pFormDict->GetStringFor("Tabs");
   if (sTabs == "R")
     m_eTabOrder = ROW;
   else if (sTabs == "C")
diff --git a/fpdfsdk/cfx_systemhandler.cpp b/fpdfsdk/cfx_systemhandler.cpp
index c8b1ef4..9534d7b 100644
--- a/fpdfsdk/cfx_systemhandler.cpp
+++ b/fpdfsdk/cfx_systemhandler.cpp
@@ -89,7 +89,7 @@
   m_pFormFillEnv->SetCursor(nCursorType);
 }
 
-bool CFX_SystemHandler::FindNativeTrueTypeFont(CFX_ByteString sFontFaceName) {
+bool CFX_SystemHandler::FindNativeTrueTypeFont(ByteString sFontFaceName) {
   CFX_FontMgr* pFontMgr = CFX_GEModule::Get()->GetFontMgr();
   if (!pFontMgr)
     return false;
@@ -102,11 +102,11 @@
     pFontMapper->LoadInstalledFonts();
 
   for (const auto& font : pFontMapper->m_InstalledTTFonts) {
-    if (font.Compare(sFontFaceName.AsStringC()))
+    if (font.Compare(sFontFaceName.AsStringView()))
       return true;
   }
   for (const auto& fontPair : pFontMapper->m_LocalizedTTFonts) {
-    if (fontPair.first.Compare(sFontFaceName.AsStringC()))
+    if (fontPair.first.Compare(sFontFaceName.AsStringView()))
       return true;
   }
   return false;
@@ -114,7 +114,7 @@
 
 CPDF_Font* CFX_SystemHandler::AddNativeTrueTypeFontToPDF(
     CPDF_Document* pDoc,
-    CFX_ByteString sFontFaceName,
+    ByteString sFontFaceName,
     uint8_t nCharset) {
   if (!pDoc)
     return nullptr;
diff --git a/fpdfsdk/cfx_systemhandler.h b/fpdfsdk/cfx_systemhandler.h
index c526305..a2ad024 100644
--- a/fpdfsdk/cfx_systemhandler.h
+++ b/fpdfsdk/cfx_systemhandler.h
@@ -58,9 +58,9 @@
   void OutputSelectedRect(CFFL_FormFiller* pFormFiller, CFX_FloatRect& rect);
   bool IsSelectionImplemented() const;
   void SetCursor(int32_t nCursorType);
-  bool FindNativeTrueTypeFont(CFX_ByteString sFontFaceName);
+  bool FindNativeTrueTypeFont(ByteString sFontFaceName);
   CPDF_Font* AddNativeTrueTypeFontToPDF(CPDF_Document* pDoc,
-                                        CFX_ByteString sFontFaceName,
+                                        ByteString sFontFaceName,
                                         uint8_t nCharset);
 
   int32_t SetTimer(int32_t uElapse, TimerCallback lpTimerFunc);
diff --git a/fpdfsdk/cpdfsdk_annothandlermgr.cpp b/fpdfsdk/cpdfsdk_annothandlermgr.cpp
index a1ac14c..2966b4d 100644
--- a/fpdfsdk/cpdfsdk_annothandlermgr.cpp
+++ b/fpdfsdk/cpdfsdk_annothandlermgr.cpp
@@ -76,14 +76,13 @@
   GetAnnotHandler(pAnnot)->OnLoad(pAnnot);
 }
 
-CFX_WideString CPDFSDK_AnnotHandlerMgr::Annot_GetSelectedText(
+WideString CPDFSDK_AnnotHandlerMgr::Annot_GetSelectedText(
     CPDFSDK_Annot* pAnnot) {
   return GetAnnotHandler(pAnnot)->GetSelectedText(pAnnot);
 }
 
-void CPDFSDK_AnnotHandlerMgr::Annot_ReplaceSelection(
-    CPDFSDK_Annot* pAnnot,
-    const CFX_WideString& text) {
+void CPDFSDK_AnnotHandlerMgr::Annot_ReplaceSelection(CPDFSDK_Annot* pAnnot,
+                                                     const WideString& text) {
   GetAnnotHandler(pAnnot)->ReplaceSelection(pAnnot, text);
 }
 
diff --git a/fpdfsdk/cpdfsdk_annothandlermgr.h b/fpdfsdk/cpdfsdk_annothandlermgr.h
index 32f8b4a..21ccb3a 100644
--- a/fpdfsdk/cpdfsdk_annothandlermgr.h
+++ b/fpdfsdk/cpdfsdk_annothandlermgr.h
@@ -42,9 +42,8 @@
   void Annot_OnCreate(CPDFSDK_Annot* pAnnot);
   void Annot_OnLoad(CPDFSDK_Annot* pAnnot);
 
-  CFX_WideString Annot_GetSelectedText(CPDFSDK_Annot* pAnnot);
-  void Annot_ReplaceSelection(CPDFSDK_Annot* pAnnot,
-                              const CFX_WideString& text);
+  WideString Annot_GetSelectedText(CPDFSDK_Annot* pAnnot);
+  void Annot_ReplaceSelection(CPDFSDK_Annot* pAnnot, const WideString& text);
 
   IPDFSDK_AnnotHandler* GetAnnotHandler(CPDFSDK_Annot* pAnnot) const;
   void Annot_OnDraw(CPDFSDK_PageView* pPageView,
diff --git a/fpdfsdk/cpdfsdk_baannot.cpp b/fpdfsdk/cpdfsdk_baannot.cpp
index 9f21d3c..711d228 100644
--- a/fpdfsdk/cpdfsdk_baannot.cpp
+++ b/fpdfsdk/cpdfsdk_baannot.cpp
@@ -101,7 +101,7 @@
   m_pAnnot->ClearCachedAP();
 }
 
-void CPDFSDK_BAAnnot::SetContents(const CFX_WideString& sContents) {
+void CPDFSDK_BAAnnot::SetContents(const WideString& sContents) {
   if (sContents.IsEmpty()) {
     m_pAnnot->GetAnnotDict()->RemoveFor("Contents");
   } else {
@@ -110,11 +110,11 @@
   }
 }
 
-CFX_WideString CPDFSDK_BAAnnot::GetContents() const {
+WideString CPDFSDK_BAAnnot::GetContents() const {
   return m_pAnnot->GetAnnotDict()->GetUnicodeTextFor("Contents");
 }
 
-void CPDFSDK_BAAnnot::SetAnnotName(const CFX_WideString& sName) {
+void CPDFSDK_BAAnnot::SetAnnotName(const WideString& sName) {
   if (sName.IsEmpty()) {
     m_pAnnot->GetAnnotDict()->RemoveFor("NM");
   } else {
@@ -123,13 +123,13 @@
   }
 }
 
-CFX_WideString CPDFSDK_BAAnnot::GetAnnotName() const {
+WideString CPDFSDK_BAAnnot::GetAnnotName() const {
   return m_pAnnot->GetAnnotDict()->GetUnicodeTextFor("NM");
 }
 
 void CPDFSDK_BAAnnot::SetModifiedDate(const FX_SYSTEMTIME& st) {
   CPDFSDK_DateTime dt(st);
-  CFX_ByteString str = dt.ToPDFDateTimeString();
+  ByteString str = dt.ToPDFDateTimeString();
   if (str.IsEmpty())
     m_pAnnot->GetAnnotDict()->RemoveFor("M");
   else
@@ -138,7 +138,7 @@
 
 FX_SYSTEMTIME CPDFSDK_BAAnnot::GetModifiedDate() const {
   FX_SYSTEMTIME systime;
-  CFX_ByteString str = m_pAnnot->GetAnnotDict()->GetStringFor("M");
+  ByteString str = m_pAnnot->GetAnnotDict()->GetStringFor("M");
   CPDFSDK_DateTime dt(str);
   dt.ToSystemTime(systime);
   return systime;
@@ -153,14 +153,14 @@
   return m_pAnnot->GetAnnotDict()->GetIntegerFor("F");
 }
 
-void CPDFSDK_BAAnnot::SetAppState(const CFX_ByteString& str) {
+void CPDFSDK_BAAnnot::SetAppState(const ByteString& str) {
   if (str.IsEmpty())
     m_pAnnot->GetAnnotDict()->RemoveFor("AS");
   else
     m_pAnnot->GetAnnotDict()->SetNewFor<CPDF_String>("AS", str, false);
 }
 
-CFX_ByteString CPDFSDK_BAAnnot::GetAppState() const {
+ByteString CPDFSDK_BAAnnot::GetAppState() const {
   return m_pAnnot->GetAnnotDict()->GetStringFor("AS");
 }
 
@@ -225,7 +225,7 @@
 BorderStyle CPDFSDK_BAAnnot::GetBorderStyle() const {
   CPDF_Dictionary* pBSDict = m_pAnnot->GetAnnotDict()->GetDictFor("BS");
   if (pBSDict) {
-    CFX_ByteString sBorderStyle = pBSDict->GetStringFor("S", "S");
+    ByteString sBorderStyle = pBSDict->GetStringFor("S", "S");
     if (sBorderStyle == "S")
       return BorderStyle::SOLID;
     if (sBorderStyle == "D")
diff --git a/fpdfsdk/cpdfsdk_baannot.h b/fpdfsdk/cpdfsdk_baannot.h
index 3b60b1b..1d71585 100644
--- a/fpdfsdk/cpdfsdk_baannot.h
+++ b/fpdfsdk/cpdfsdk_baannot.h
@@ -38,11 +38,11 @@
 
   CPDF_Dictionary* GetAPDict() const;
 
-  void SetContents(const CFX_WideString& sContents);
-  CFX_WideString GetContents() const;
+  void SetContents(const WideString& sContents);
+  WideString GetContents() const;
 
-  void SetAnnotName(const CFX_WideString& sName);
-  CFX_WideString GetAnnotName() const;
+  void SetAnnotName(const WideString& sName);
+  WideString GetAnnotName() const;
 
   void SetModifiedDate(const FX_SYSTEMTIME& st);
   FX_SYSTEMTIME GetModifiedDate() const;
@@ -50,8 +50,8 @@
   void SetFlags(uint32_t nFlags);
   uint32_t GetFlags() const;
 
-  void SetAppState(const CFX_ByteString& str);
-  CFX_ByteString GetAppState() const;
+  void SetAppState(const ByteString& str);
+  ByteString GetAppState() const;
 
   void SetStructParent(int key);
   int GetStructParent() const;
diff --git a/fpdfsdk/cpdfsdk_baannothandler.cpp b/fpdfsdk/cpdfsdk_baannothandler.cpp
index 6cf399a..027527e 100644
--- a/fpdfsdk/cpdfsdk_baannothandler.cpp
+++ b/fpdfsdk/cpdfsdk_baannothandler.cpp
@@ -193,12 +193,12 @@
   return pAnnot->GetRect();
 }
 
-CFX_WideString CPDFSDK_BAAnnotHandler::GetSelectedText(CPDFSDK_Annot* pAnnot) {
-  return CFX_WideString();
+WideString CPDFSDK_BAAnnotHandler::GetSelectedText(CPDFSDK_Annot* pAnnot) {
+  return WideString();
 }
 
 void CPDFSDK_BAAnnotHandler::ReplaceSelection(CPDFSDK_Annot* pAnnot,
-                                              const CFX_WideString& text) {}
+                                              const WideString& text) {}
 
 bool CPDFSDK_BAAnnotHandler::HitTest(CPDFSDK_PageView* pPageView,
                                      CPDFSDK_Annot* pAnnot,
diff --git a/fpdfsdk/cpdfsdk_baannothandler.h b/fpdfsdk/cpdfsdk_baannothandler.h
index 2ed9ed8..7bf8034 100644
--- a/fpdfsdk/cpdfsdk_baannothandler.h
+++ b/fpdfsdk/cpdfsdk_baannothandler.h
@@ -36,9 +36,8 @@
   void ReleaseAnnot(CPDFSDK_Annot* pAnnot) override;
   CFX_FloatRect GetViewBBox(CPDFSDK_PageView* pPageView,
                             CPDFSDK_Annot* pAnnot) override;
-  CFX_WideString GetSelectedText(CPDFSDK_Annot* pAnnot) override;
-  void ReplaceSelection(CPDFSDK_Annot* pAnnot,
-                        const CFX_WideString& text) override;
+  WideString GetSelectedText(CPDFSDK_Annot* pAnnot) override;
+  void ReplaceSelection(CPDFSDK_Annot* pAnnot, const WideString& text) override;
   bool HitTest(CPDFSDK_PageView* pPageView,
                CPDFSDK_Annot* pAnnot,
                const CFX_PointF& point) override;
diff --git a/fpdfsdk/cpdfsdk_datetime.cpp b/fpdfsdk/cpdfsdk_datetime.cpp
index d2653fc..ce22cae 100644
--- a/fpdfsdk/cpdfsdk_datetime.cpp
+++ b/fpdfsdk/cpdfsdk_datetime.cpp
@@ -63,7 +63,7 @@
   ResetDateTime();
 }
 
-CPDFSDK_DateTime::CPDFSDK_DateTime(const CFX_ByteString& dtStr) {
+CPDFSDK_DateTime::CPDFSDK_DateTime(const ByteString& dtStr) {
   ResetDateTime();
   FromPDFDateTimeString(dtStr);
 }
@@ -129,7 +129,7 @@
 }
 
 CPDFSDK_DateTime& CPDFSDK_DateTime::FromPDFDateTimeString(
-    const CFX_ByteString& dtStr) {
+    const ByteString& dtStr) {
   int strLength = dtStr.GetLength();
   if (strLength <= 0)
     return *this;
@@ -263,34 +263,34 @@
   return *this;
 }
 
-CFX_ByteString CPDFSDK_DateTime::ToCommonDateTimeString() {
-  CFX_ByteString str1;
+ByteString CPDFSDK_DateTime::ToCommonDateTimeString() {
+  ByteString str1;
   str1.Format("%04d-%02u-%02u %02u:%02u:%02u ", m_year, m_month, m_day, m_hour,
               m_minute, m_second);
   if (m_tzHour < 0)
     str1 += "-";
   else
     str1 += "+";
-  CFX_ByteString str2;
+  ByteString str2;
   str2.Format("%02d:%02u", std::abs(static_cast<int>(m_tzHour)), m_tzMinute);
   return str1 + str2;
 }
 
-CFX_ByteString CPDFSDK_DateTime::ToPDFDateTimeString() {
-  CFX_ByteString dtStr;
+ByteString CPDFSDK_DateTime::ToPDFDateTimeString() {
+  ByteString dtStr;
   char tempStr[32];
   memset(tempStr, 0, sizeof(tempStr));
   FXSYS_snprintf(tempStr, sizeof(tempStr) - 1, "D:%04d%02u%02u%02u%02u%02u",
                  m_year, m_month, m_day, m_hour, m_minute, m_second);
-  dtStr = CFX_ByteString(tempStr);
+  dtStr = ByteString(tempStr);
   if (m_tzHour < 0)
-    dtStr += CFX_ByteString("-");
+    dtStr += ByteString("-");
   else
-    dtStr += CFX_ByteString("+");
+    dtStr += ByteString("+");
   memset(tempStr, 0, sizeof(tempStr));
   FXSYS_snprintf(tempStr, sizeof(tempStr) - 1, "%02d'%02u'",
                  std::abs(static_cast<int>(m_tzHour)), m_tzMinute);
-  dtStr += CFX_ByteString(tempStr);
+  dtStr += ByteString(tempStr);
   return dtStr;
 }
 
diff --git a/fpdfsdk/cpdfsdk_datetime.h b/fpdfsdk/cpdfsdk_datetime.h
index 6b612b2..08d43cc 100644
--- a/fpdfsdk/cpdfsdk_datetime.h
+++ b/fpdfsdk/cpdfsdk_datetime.h
@@ -18,16 +18,16 @@
 class CPDFSDK_DateTime {
  public:
   CPDFSDK_DateTime();
-  explicit CPDFSDK_DateTime(const CFX_ByteString& dtStr);
+  explicit CPDFSDK_DateTime(const ByteString& dtStr);
   explicit CPDFSDK_DateTime(const FX_SYSTEMTIME& st);
   CPDFSDK_DateTime(const CPDFSDK_DateTime& datetime);
 
   bool operator==(const CPDFSDK_DateTime& datetime) const;
   bool operator!=(const CPDFSDK_DateTime& datetime) const;
 
-  CPDFSDK_DateTime& FromPDFDateTimeString(const CFX_ByteString& dtStr);
-  CFX_ByteString ToCommonDateTimeString();
-  CFX_ByteString ToPDFDateTimeString();
+  CPDFSDK_DateTime& FromPDFDateTimeString(const ByteString& dtStr);
+  ByteString ToCommonDateTimeString();
+  ByteString ToPDFDateTimeString();
   void ToSystemTime(FX_SYSTEMTIME& st);
   time_t ToTime_t() const;
   CPDFSDK_DateTime ToGMT() const;
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.cpp b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
index a258026..300a742 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.cpp
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
@@ -24,7 +24,7 @@
 
 // NOTE: |bsUTF16LE| must outlive the use of the result. Care must be taken
 // since modifying the result would impact |bsUTF16LE|.
-FPDF_WIDESTRING AsFPDFWideString(CFX_ByteString* bsUTF16LE) {
+FPDF_WIDESTRING AsFPDFWideString(ByteString* bsUTF16LE) {
   return reinterpret_cast<FPDF_WIDESTRING>(
       bsUTF16LE->GetBuffer(bsUTF16LE->GetLength()));
 }
@@ -69,8 +69,8 @@
       !m_pInfo->m_pJsPlatform->app_alert) {
     return -1;
   }
-  CFX_ByteString bsMsg = CFX_WideString(Msg).UTF16LE_Encode();
-  CFX_ByteString bsTitle = CFX_WideString(Title).UTF16LE_Encode();
+  ByteString bsMsg = WideString(Msg).UTF16LE_Encode();
+  ByteString bsTitle = WideString(Title).UTF16LE_Encode();
   return m_pInfo->m_pJsPlatform->app_alert(
       m_pInfo->m_pJsPlatform, AsFPDFWideString(&bsMsg),
       AsFPDFWideString(&bsTitle), Type, Icon);
@@ -87,10 +87,10 @@
       !m_pInfo->m_pJsPlatform->app_response) {
     return -1;
   }
-  CFX_ByteString bsQuestion = CFX_WideString(Question).UTF16LE_Encode();
-  CFX_ByteString bsTitle = CFX_WideString(Title).UTF16LE_Encode();
-  CFX_ByteString bsDefault = CFX_WideString(Default).UTF16LE_Encode();
-  CFX_ByteString bsLabel = CFX_WideString(cLabel).UTF16LE_Encode();
+  ByteString bsQuestion = WideString(Question).UTF16LE_Encode();
+  ByteString bsTitle = WideString(Title).UTF16LE_Encode();
+  ByteString bsDefault = WideString(Default).UTF16LE_Encode();
+  ByteString bsLabel = WideString(cLabel).UTF16LE_Encode();
   return m_pInfo->m_pJsPlatform->app_response(
       m_pInfo->m_pJsPlatform, AsFPDFWideString(&bsQuestion),
       AsFPDFWideString(&bsTitle), AsFPDFWideString(&bsDefault),
@@ -105,44 +105,44 @@
   m_pInfo->m_pJsPlatform->app_beep(m_pInfo->m_pJsPlatform, nType);
 }
 
-CFX_WideString CPDFSDK_FormFillEnvironment::JS_fieldBrowse() {
+WideString CPDFSDK_FormFillEnvironment::JS_fieldBrowse() {
   if (!m_pInfo || !m_pInfo->m_pJsPlatform ||
       !m_pInfo->m_pJsPlatform->Field_browse) {
-    return CFX_WideString();
+    return WideString();
   }
   const int nRequiredLen =
       m_pInfo->m_pJsPlatform->Field_browse(m_pInfo->m_pJsPlatform, nullptr, 0);
   if (nRequiredLen <= 0)
-    return CFX_WideString();
+    return WideString();
 
   std::vector<uint8_t> pBuff(nRequiredLen);
   const int nActualLen = m_pInfo->m_pJsPlatform->Field_browse(
       m_pInfo->m_pJsPlatform, pBuff.data(), nRequiredLen);
   if (nActualLen <= 0 || nActualLen > nRequiredLen)
-    return CFX_WideString();
+    return WideString();
 
   pBuff.resize(nActualLen);
-  return CFX_WideString::FromLocal(CFX_ByteStringC(pBuff));
+  return WideString::FromLocal(ByteStringView(pBuff));
 }
 
-CFX_WideString CPDFSDK_FormFillEnvironment::JS_docGetFilePath() {
+WideString CPDFSDK_FormFillEnvironment::JS_docGetFilePath() {
   if (!m_pInfo || !m_pInfo->m_pJsPlatform ||
       !m_pInfo->m_pJsPlatform->Doc_getFilePath) {
-    return CFX_WideString();
+    return WideString();
   }
   const int nRequiredLen = m_pInfo->m_pJsPlatform->Doc_getFilePath(
       m_pInfo->m_pJsPlatform, nullptr, 0);
   if (nRequiredLen <= 0)
-    return CFX_WideString();
+    return WideString();
 
   std::vector<uint8_t> pBuff(nRequiredLen);
   const int nActualLen = m_pInfo->m_pJsPlatform->Doc_getFilePath(
       m_pInfo->m_pJsPlatform, pBuff.data(), nRequiredLen);
   if (nActualLen <= 0 || nActualLen > nRequiredLen)
-    return CFX_WideString();
+    return WideString();
 
   pBuff.resize(nActualLen);
-  return CFX_WideString::FromLocal(CFX_ByteStringC(pBuff));
+  return WideString::FromLocal(ByteStringView(pBuff));
 }
 
 void CPDFSDK_FormFillEnvironment::JS_docSubmitForm(void* formData,
@@ -152,7 +152,7 @@
       !m_pInfo->m_pJsPlatform->Doc_submitForm) {
     return;
   }
-  CFX_ByteString bsDestination = CFX_WideString(URL).UTF16LE_Encode();
+  ByteString bsDestination = WideString(URL).UTF16LE_Encode();
   m_pInfo->m_pJsPlatform->Doc_submitForm(m_pInfo->m_pJsPlatform, formData,
                                          length,
                                          AsFPDFWideString(&bsDestination));
@@ -170,11 +170,11 @@
       !m_pInfo->m_pJsPlatform->Doc_mail) {
     return;
   }
-  CFX_ByteString bsTo = CFX_WideString(To).UTF16LE_Encode();
-  CFX_ByteString bsSubject = CFX_WideString(Subject).UTF16LE_Encode();
-  CFX_ByteString bsCC = CFX_WideString(CC).UTF16LE_Encode();
-  CFX_ByteString bsBcc = CFX_WideString(BCC).UTF16LE_Encode();
-  CFX_ByteString bsMsg = CFX_WideString(Msg).UTF16LE_Encode();
+  ByteString bsTo = WideString(To).UTF16LE_Encode();
+  ByteString bsSubject = WideString(Subject).UTF16LE_Encode();
+  ByteString bsCC = WideString(CC).UTF16LE_Encode();
+  ByteString bsBcc = WideString(BCC).UTF16LE_Encode();
+  ByteString bsMsg = WideString(Msg).UTF16LE_Encode();
   m_pInfo->m_pJsPlatform->Doc_mail(
       m_pInfo->m_pJsPlatform, mailData, length, bUI, AsFPDFWideString(&bsTo),
       AsFPDFWideString(&bsSubject), AsFPDFWideString(&bsCC),
@@ -350,30 +350,30 @@
     m_pInfo->FFI_SetCurrentPage(m_pInfo, document, iCurPage);
 }
 
-CFX_WideString CPDFSDK_FormFillEnvironment::GetPlatform() {
+WideString CPDFSDK_FormFillEnvironment::GetPlatform() {
   if (!m_pInfo || !m_pInfo->FFI_GetPlatform)
-    return CFX_WideString();
+    return WideString();
 
   int nRequiredLen = m_pInfo->FFI_GetPlatform(m_pInfo, nullptr, 0);
   if (nRequiredLen <= 0)
-    return CFX_WideString();
+    return WideString();
 
   std::vector<uint8_t> pBuff(nRequiredLen);
   int nActualLen =
       m_pInfo->FFI_GetPlatform(m_pInfo, pBuff.data(), nRequiredLen);
   if (nActualLen <= 0 || nActualLen > nRequiredLen)
-    return CFX_WideString();
+    return WideString();
 
-  return CFX_WideString::FromUTF16LE(reinterpret_cast<uint16_t*>(pBuff.data()),
-                                     nActualLen / sizeof(uint16_t));
+  return WideString::FromUTF16LE(reinterpret_cast<uint16_t*>(pBuff.data()),
+                                 nActualLen / sizeof(uint16_t));
 }
 
 void CPDFSDK_FormFillEnvironment::GotoURL(CPDFXFA_Context* document,
-                                          const CFX_WideStringC& wsURL) {
+                                          const WideStringView& wsURL) {
   if (!m_pInfo || !m_pInfo->FFI_GotoURL)
     return;
 
-  CFX_ByteString bsTo = CFX_WideString(wsURL).UTF16LE_Encode();
+  ByteString bsTo = WideString(wsURL).UTF16LE_Encode();
   FPDF_WIDESTRING pTo = (FPDF_WIDESTRING)bsTo.GetBuffer(wsURL.GetLength());
   m_pInfo->FFI_GotoURL(m_pInfo, document, pTo);
   bsTo.ReleaseBuffer(bsTo.GetStringLength());
@@ -446,7 +446,7 @@
   if (!m_pInfo || !m_pInfo->FFI_DownloadFromURL)
     return nullptr;
 
-  CFX_ByteString bstrURL = CFX_WideString(url).UTF16LE_Encode();
+  ByteString bstrURL = WideString(url).UTF16LE_Encode();
   FPDF_WIDESTRING wsURL =
       (FPDF_WIDESTRING)bstrURL.GetBuffer(bstrURL.GetLength());
 
@@ -454,7 +454,7 @@
   return MakeSeekableStream(fileHandler);
 }
 
-CFX_WideString CPDFSDK_FormFillEnvironment::PostRequestURL(
+WideString CPDFSDK_FormFillEnvironment::PostRequestURL(
     const wchar_t* wsURL,
     const wchar_t* wsData,
     const wchar_t* wsContentType,
@@ -463,21 +463,21 @@
   if (!m_pInfo || !m_pInfo->FFI_PostRequestURL)
     return L"";
 
-  CFX_ByteString bsURL = CFX_WideString(wsURL).UTF16LE_Encode();
+  ByteString bsURL = WideString(wsURL).UTF16LE_Encode();
   FPDF_WIDESTRING URL = (FPDF_WIDESTRING)bsURL.GetBuffer(bsURL.GetLength());
 
-  CFX_ByteString bsData = CFX_WideString(wsData).UTF16LE_Encode();
+  ByteString bsData = WideString(wsData).UTF16LE_Encode();
   FPDF_WIDESTRING data = (FPDF_WIDESTRING)bsData.GetBuffer(bsData.GetLength());
 
-  CFX_ByteString bsContentType = CFX_WideString(wsContentType).UTF16LE_Encode();
+  ByteString bsContentType = WideString(wsContentType).UTF16LE_Encode();
   FPDF_WIDESTRING contentType =
       (FPDF_WIDESTRING)bsContentType.GetBuffer(bsContentType.GetLength());
 
-  CFX_ByteString bsEncode = CFX_WideString(wsEncode).UTF16LE_Encode();
+  ByteString bsEncode = WideString(wsEncode).UTF16LE_Encode();
   FPDF_WIDESTRING encode =
       (FPDF_WIDESTRING)bsEncode.GetBuffer(bsEncode.GetLength());
 
-  CFX_ByteString bsHeader = CFX_WideString(wsHeader).UTF16LE_Encode();
+  ByteString bsHeader = WideString(wsHeader).UTF16LE_Encode();
   FPDF_WIDESTRING header =
       (FPDF_WIDESTRING)bsHeader.GetBuffer(bsHeader.GetLength());
 
@@ -486,7 +486,7 @@
   m_pInfo->FFI_PostRequestURL(m_pInfo, URL, data, contentType, encode, header,
                               &response);
 
-  CFX_WideString wsRet = CFX_WideString::FromUTF16LE(
+  WideString wsRet = WideString::FromUTF16LE(
       (FPDF_WIDESTRING)response.str, response.len / sizeof(FPDF_WIDESTRING));
   FPDF_BStr_Clear(&response);
 
@@ -499,35 +499,35 @@
   if (!m_pInfo || !m_pInfo->FFI_PutRequestURL)
     return false;
 
-  CFX_ByteString bsURL = CFX_WideString(wsURL).UTF16LE_Encode();
+  ByteString bsURL = WideString(wsURL).UTF16LE_Encode();
   FPDF_WIDESTRING URL = (FPDF_WIDESTRING)bsURL.GetBuffer(bsURL.GetLength());
 
-  CFX_ByteString bsData = CFX_WideString(wsData).UTF16LE_Encode();
+  ByteString bsData = WideString(wsData).UTF16LE_Encode();
   FPDF_WIDESTRING data = (FPDF_WIDESTRING)bsData.GetBuffer(bsData.GetLength());
 
-  CFX_ByteString bsEncode = CFX_WideString(wsEncode).UTF16LE_Encode();
+  ByteString bsEncode = WideString(wsEncode).UTF16LE_Encode();
   FPDF_WIDESTRING encode =
       (FPDF_WIDESTRING)bsEncode.GetBuffer(bsEncode.GetLength());
 
   return m_pInfo->FFI_PutRequestURL(m_pInfo, URL, data, encode);
 }
 
-CFX_WideString CPDFSDK_FormFillEnvironment::GetLanguage() {
+WideString CPDFSDK_FormFillEnvironment::GetLanguage() {
   if (!m_pInfo || !m_pInfo->FFI_GetLanguage)
-    return CFX_WideString();
+    return WideString();
 
   int nRequiredLen = m_pInfo->FFI_GetLanguage(m_pInfo, nullptr, 0);
   if (nRequiredLen <= 0)
-    return CFX_WideString();
+    return WideString();
 
   std::vector<uint8_t> pBuff(nRequiredLen);
   int nActualLen =
       m_pInfo->FFI_GetLanguage(m_pInfo, pBuff.data(), nRequiredLen);
   if (nActualLen <= 0 || nActualLen > nRequiredLen)
-    return CFX_WideString();
+    return WideString();
 
-  return CFX_WideString::FromUTF16LE(reinterpret_cast<uint16_t*>(pBuff.data()),
-                                     nActualLen / sizeof(uint16_t));
+  return WideString::FromUTF16LE(reinterpret_cast<uint16_t*>(pBuff.data()),
+                                 nActualLen / sizeof(uint16_t));
 }
 
 void CPDFSDK_FormFillEnvironment::PageEvent(int iPageCount,
@@ -583,7 +583,7 @@
   CPDF_DocJSActions docJS(pPDFDoc);
   int iCount = docJS.CountJSActions();
   for (int i = 0; i < iCount; i++) {
-    CFX_WideString csJSName;
+    WideString csJSName;
     CPDF_Action jsAction = docJS.GetJSActionAndName(i, &csJSName);
     GetActionHandler()->DoAction_JavaScript(jsAction, csJSName, this);
   }
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.h b/fpdfsdk/cpdfsdk_formfillenvironment.h
index c993740..9e3c925 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.h
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.h
@@ -133,10 +133,10 @@
   void SetCurrentPage(CPDFXFA_Context* document, int iCurPage);
 
   // TODO(dsinclair): This should probably change to PDFium?
-  CFX_WideString FFI_GetAppName() const { return CFX_WideString(L"Acrobat"); }
+  WideString FFI_GetAppName() const { return WideString(L"Acrobat"); }
 
-  CFX_WideString GetPlatform();
-  void GotoURL(CPDFXFA_Context* document, const CFX_WideStringC& wsURL);
+  WideString GetPlatform();
+  void GotoURL(CPDFXFA_Context* document, const WideStringView& wsURL);
   void GetPageViewRect(CPDFXFA_Page* page, FS_RECTF& dstRect);
   bool PopupMenu(CPDFXFA_Page* page,
                  FPDF_WIDGET hWidget,
@@ -157,15 +157,15 @@
                              FPDF_WIDESTRING wsURL,
                              const char* mode);
   CFX_RetainPtr<IFX_SeekableReadStream> DownloadFromURL(const wchar_t* url);
-  CFX_WideString PostRequestURL(const wchar_t* wsURL,
-                                const wchar_t* wsData,
-                                const wchar_t* wsContentType,
-                                const wchar_t* wsEncode,
-                                const wchar_t* wsHeader);
+  WideString PostRequestURL(const wchar_t* wsURL,
+                            const wchar_t* wsData,
+                            const wchar_t* wsContentType,
+                            const wchar_t* wsEncode,
+                            const wchar_t* wsHeader);
   FPDF_BOOL PutRequestURL(const wchar_t* wsURL,
                           const wchar_t* wsData,
                           const wchar_t* wsEncode);
-  CFX_WideString GetLanguage();
+  WideString GetLanguage();
 
   void PageEvent(int iPageCount, uint32_t dwEventType) const;
 #else   // PDF_ENABLE_XFA
@@ -184,8 +184,8 @@
                      void* response,
                      int length);
   void JS_appBeep(int nType);
-  CFX_WideString JS_fieldBrowse();
-  CFX_WideString JS_docGetFilePath();
+  WideString JS_fieldBrowse();
+  WideString JS_docGetFilePath();
   void JS_docSubmitForm(void* formData, int length, const wchar_t* URL);
   void JS_docmailForm(void* mailData,
                       int length,
@@ -206,7 +206,7 @@
   void JS_docgotoPage(int nPageNum);
 
   bool IsJSInitiated() const { return m_pInfo && m_pInfo->m_pJsPlatform; }
-  CFX_ByteString GetAppName() const { return ""; }
+  ByteString GetAppName() const { return ""; }
   CFX_SystemHandler* GetSysHandler() const { return m_pSysHandler.get(); }
   FPDF_FORMFILLINFO* GetFormFillInfo() const { return m_pInfo; }
 
diff --git a/fpdfsdk/cpdfsdk_interform.cpp b/fpdfsdk/cpdfsdk_interform.cpp
index b60529d..fd0dffa 100644
--- a/fpdfsdk/cpdfsdk_interform.cpp
+++ b/fpdfsdk/cpdfsdk_interform.cpp
@@ -117,7 +117,7 @@
 }
 
 void CPDFSDK_InterForm::GetWidgets(
-    const CFX_WideString& sFieldName,
+    const WideString& sFieldName,
     std::vector<CPDFSDK_Annot::ObservedPtr>* widgets) const {
   for (int i = 0, sz = m_pInterForm->CountFields(sFieldName); i < sz; ++i) {
     CPDF_FormField* pFormField = m_pInterForm->GetField(i, sFieldName);
@@ -250,17 +250,17 @@
     if (!action.GetDict())
       continue;
 
-    CFX_WideString csJS = action.GetJavaScript();
+    WideString csJS = action.GetJavaScript();
     if (csJS.IsEmpty())
       continue;
 
     IJS_EventContext* pContext = pRuntime->NewEventContext();
-    CFX_WideString sOldValue = pField->GetValue();
-    CFX_WideString sValue = sOldValue;
+    WideString sOldValue = pField->GetValue();
+    WideString sValue = sOldValue;
     bool bRC = true;
     pContext->OnField_Calculate(pFormField, pField, sValue, bRC);
 
-    CFX_WideString sInfo;
+    WideString sInfo;
     bool bRet = pContext->RunScript(csJS, &sInfo);
     pRuntime->ReleaseEventContext(pContext);
     if (bRet && bRC && sValue.Compare(sOldValue) != 0)
@@ -269,9 +269,9 @@
   m_bBusy = false;
 }
 
-CFX_WideString CPDFSDK_InterForm::OnFormat(CPDF_FormField* pFormField,
-                                           bool& bFormatted) {
-  CFX_WideString sValue = pFormField->GetValue();
+WideString CPDFSDK_InterForm::OnFormat(CPDF_FormField* pFormField,
+                                       bool& bFormatted) {
+  WideString sValue = pFormField->GetValue();
   if (!m_pFormFillEnv->IsJSInitiated()) {
     bFormatted = false;
     return sValue;
@@ -291,13 +291,13 @@
   if (aAction.GetDict() && aAction.ActionExist(CPDF_AAction::Format)) {
     CPDF_Action action = aAction.GetAction(CPDF_AAction::Format);
     if (action.GetDict()) {
-      CFX_WideString script = action.GetJavaScript();
+      WideString script = action.GetJavaScript();
       if (!script.IsEmpty()) {
-        CFX_WideString Value = sValue;
+        WideString Value = sValue;
 
         IJS_EventContext* pContext = pRuntime->NewEventContext();
         pContext->OnField_Format(pFormField, Value, true);
-        CFX_WideString sInfo;
+        WideString sInfo;
         bool bRet = pContext->RunScript(script, &sInfo);
         pRuntime->ReleaseEventContext(pContext);
         if (bRet) {
@@ -311,7 +311,7 @@
 }
 
 void CPDFSDK_InterForm::ResetFieldAppearance(CPDF_FormField* pFormField,
-                                             const CFX_WideString* sValue,
+                                             const WideString* sValue,
                                              bool bValueChanged) {
   for (int i = 0, sz = pFormField->CountControls(); i < sz; i++) {
     CPDF_FormControl* pFormCtrl = pFormField->GetControl(i);
@@ -339,7 +339,7 @@
 }
 
 bool CPDFSDK_InterForm::OnKeyStrokeCommit(CPDF_FormField* pFormField,
-                                          const CFX_WideString& csValue) {
+                                          const WideString& csValue) {
   CPDF_AAction aAction = pFormField->GetAdditionalAction();
   if (!aAction.GetDict() || !aAction.ActionExist(CPDF_AAction::KeyStroke))
     return true;
@@ -359,7 +359,7 @@
 }
 
 bool CPDFSDK_InterForm::OnValidate(CPDF_FormField* pFormField,
-                                   const CFX_WideString& csValue) {
+                                   const WideString& csValue) {
   CPDF_AAction aAction = pFormField->GetAdditionalAction();
   if (!aAction.GetDict() || !aAction.ActionExist(CPDF_AAction::Validate))
     return true;
@@ -412,7 +412,7 @@
 }
 
 bool CPDFSDK_InterForm::DoAction_SubmitForm(const CPDF_Action& action) {
-  CFX_WideString sDestination = action.GetFilePath();
+  WideString sDestination = action.GetFilePath();
   if (sDestination.IsEmpty())
     return false;
 
@@ -436,11 +436,11 @@
   return SubmitForm(sDestination, false);
 }
 
-bool CPDFSDK_InterForm::SubmitFields(const CFX_WideString& csDestination,
+bool CPDFSDK_InterForm::SubmitFields(const WideString& csDestination,
                                      const std::vector<CPDF_FormField*>& fields,
                                      bool bIncludeOrExclude,
                                      bool bUrlEncoded) {
-  CFX_ByteString textBuf = ExportFieldsToFDFTextBuf(fields, bIncludeOrExclude);
+  ByteString textBuf = ExportFieldsToFDFTextBuf(fields, bIncludeOrExclude);
 
   FX_STRSIZE nBufSize = textBuf.GetLength();
   if (nBufSize == 0)
@@ -485,12 +485,12 @@
     CPDF_Dictionary* pField = pFields->GetDictAt(i);
     if (!pField)
       continue;
-    CFX_WideString name;
+    WideString name;
     name = pField->GetUnicodeTextFor("T");
-    CFX_ByteString name_b = CFX_ByteString::FromUnicode(name);
-    CFX_ByteString csBValue = pField->GetStringFor("V");
-    CFX_WideString csWValue = PDF_DecodeText(csBValue);
-    CFX_ByteString csValue_b = CFX_ByteString::FromUnicode(csWValue);
+    ByteString name_b = ByteString::FromUnicode(name);
+    ByteString csBValue = pField->GetStringFor("V");
+    WideString csWValue = PDF_DecodeText(csBValue);
+    ByteString csValue_b = ByteString::FromUnicode(csWValue);
 
     fdfEncodedData << name_b.GetBuffer(name_b.GetLength());
     name_b.ReleaseBuffer(name_b.GetStringLength());
@@ -510,21 +510,20 @@
   return true;
 }
 
-CFX_ByteString CPDFSDK_InterForm::ExportFieldsToFDFTextBuf(
+ByteString CPDFSDK_InterForm::ExportFieldsToFDFTextBuf(
     const std::vector<CPDF_FormField*>& fields,
     bool bIncludeOrExclude) {
   std::unique_ptr<CFDF_Document> pFDF = m_pInterForm->ExportToFDF(
       m_pFormFillEnv->JS_docGetFilePath(), fields, bIncludeOrExclude, false);
 
-  return pFDF ? pFDF->WriteToString() : CFX_ByteString();
+  return pFDF ? pFDF->WriteToString() : ByteString();
 }
 
-CFX_WideString CPDFSDK_InterForm::GetTemporaryFileName(
-    const CFX_WideString& sFileExt) {
+WideString CPDFSDK_InterForm::GetTemporaryFileName(const WideString& sFileExt) {
   return L"";
 }
 
-bool CPDFSDK_InterForm::SubmitForm(const CFX_WideString& sDestination,
+bool CPDFSDK_InterForm::SubmitForm(const WideString& sDestination,
                                    bool bUrlEncoded) {
   if (sDestination.IsEmpty())
     return false;
@@ -537,7 +536,7 @@
   if (!pFDFDoc)
     return false;
 
-  CFX_ByteString fdfBuffer = pFDFDoc->WriteToString();
+  ByteString fdfBuffer = pFDFDoc->WriteToString();
 
   FX_STRSIZE nBufSize = fdfBuffer.GetLength();
   if (nBufSize == 0)
@@ -562,11 +561,11 @@
   return true;
 }
 
-CFX_ByteString CPDFSDK_InterForm::ExportFormToFDFTextBuf() {
+ByteString CPDFSDK_InterForm::ExportFormToFDFTextBuf() {
   std::unique_ptr<CFDF_Document> pFDF =
       m_pInterForm->ExportToFDF(m_pFormFillEnv->JS_docGetFilePath(), false);
 
-  return pFDF ? pFDF->WriteToString() : CFX_ByteString();
+  return pFDF ? pFDF->WriteToString() : ByteString();
 }
 
 bool CPDFSDK_InterForm::DoAction_ResetForm(const CPDF_Action& action) {
@@ -593,7 +592,7 @@
   std::vector<CPDF_FormField*> fields;
   for (CPDF_Object* pObject : objects) {
     if (pObject && pObject->IsString()) {
-      CFX_WideString csName = pObject->GetUnicodeText();
+      WideString csName = pObject->GetUnicodeText();
       CPDF_FormField* pField = m_pInterForm->GetField(0, csName);
       if (pField)
         fields.push_back(pField);
@@ -603,7 +602,7 @@
 }
 
 int CPDFSDK_InterForm::BeforeValueChange(CPDF_FormField* pField,
-                                         const CFX_WideString& csValue) {
+                                         const WideString& csValue) {
   int nType = pField->GetFieldType();
   if (nType != FIELDTYPE_COMBOBOX && nType != FIELDTYPE_TEXTFIELD)
     return 0;
@@ -625,14 +624,14 @@
   if (nType == FIELDTYPE_COMBOBOX || nType == FIELDTYPE_TEXTFIELD) {
     OnCalculate(pField);
     bool bFormatted = false;
-    CFX_WideString sValue = OnFormat(pField, bFormatted);
+    WideString sValue = OnFormat(pField, bFormatted);
     ResetFieldAppearance(pField, bFormatted ? &sValue : nullptr, true);
     UpdateField(pField);
   }
 }
 
 int CPDFSDK_InterForm::BeforeSelectionChange(CPDF_FormField* pField,
-                                             const CFX_WideString& csValue) {
+                                             const WideString& csValue) {
   if (pField->GetFieldType() != FIELDTYPE_LISTBOX)
     return 0;
 
diff --git a/fpdfsdk/cpdfsdk_interform.h b/fpdfsdk/cpdfsdk_interform.h
index b031345..e14589e 100644
--- a/fpdfsdk/cpdfsdk_interform.h
+++ b/fpdfsdk/cpdfsdk_interform.h
@@ -43,7 +43,7 @@
 
   CPDFSDK_Widget* GetSibling(CPDFSDK_Widget* pWidget, bool bNext) const;
   CPDFSDK_Widget* GetWidget(CPDF_FormControl* pControl) const;
-  void GetWidgets(const CFX_WideString& sFieldName,
+  void GetWidgets(const WideString& sFieldName,
                   std::vector<CPDFSDK_Annot::ObservedPtr>* widgets) const;
   void GetWidgets(CPDF_FormField* pField,
                   std::vector<CPDFSDK_Annot::ObservedPtr>* widgets) const;
@@ -65,14 +65,13 @@
   void SynchronizeField(CPDF_FormField* pFormField, bool bSynchronizeElse);
 #endif  // PDF_ENABLE_XFA
 
-  bool OnKeyStrokeCommit(CPDF_FormField* pFormField,
-                         const CFX_WideString& csValue);
-  bool OnValidate(CPDF_FormField* pFormField, const CFX_WideString& csValue);
+  bool OnKeyStrokeCommit(CPDF_FormField* pFormField, const WideString& csValue);
+  bool OnValidate(CPDF_FormField* pFormField, const WideString& csValue);
   void OnCalculate(CPDF_FormField* pFormField = nullptr);
-  CFX_WideString OnFormat(CPDF_FormField* pFormField, bool& bFormatted);
+  WideString OnFormat(CPDF_FormField* pFormField, bool& bFormatted);
 
   void ResetFieldAppearance(CPDF_FormField* pFormField,
-                            const CFX_WideString* sValue,
+                            const WideString* sValue,
                             bool bValueChanged);
   void UpdateField(CPDF_FormField* pFormField);
 
@@ -84,16 +83,16 @@
   std::vector<CPDF_FormField*> GetFieldFromObjects(
       const std::vector<CPDF_Object*>& objects) const;
   bool IsValidField(CPDF_Dictionary* pFieldDict);
-  bool SubmitFields(const CFX_WideString& csDestination,
+  bool SubmitFields(const WideString& csDestination,
                     const std::vector<CPDF_FormField*>& fields,
                     bool bIncludeOrExclude,
                     bool bUrlEncoded);
-  bool SubmitForm(const CFX_WideString& sDestination, bool bUrlEncoded);
-  CFX_ByteString ExportFormToFDFTextBuf();
-  CFX_ByteString ExportFieldsToFDFTextBuf(
+  bool SubmitForm(const WideString& sDestination, bool bUrlEncoded);
+  ByteString ExportFormToFDFTextBuf();
+  ByteString ExportFieldsToFDFTextBuf(
       const std::vector<CPDF_FormField*>& fields,
       bool bIncludeOrExclude);
-  CFX_WideString GetTemporaryFileName(const CFX_WideString& sFileExt);
+  WideString GetTemporaryFileName(const WideString& sFileExt);
 
   bool IsNeedHighLight(int nFieldType);
   void RemoveAllHighLight();
@@ -105,10 +104,10 @@
  private:
   // IPDF_FormNotify:
   int BeforeValueChange(CPDF_FormField* pField,
-                        const CFX_WideString& csValue) override;
+                        const WideString& csValue) override;
   void AfterValueChange(CPDF_FormField* pField) override;
   int BeforeSelectionChange(CPDF_FormField* pField,
-                            const CFX_WideString& csValue) override;
+                            const WideString& csValue) override;
   void AfterSelectionChange(CPDF_FormField* pField) override;
   void AfterCheckedStatusChange(CPDF_FormField* pField) override;
   int BeforeFormReset(CPDF_InterForm* pForm) override;
diff --git a/fpdfsdk/cpdfsdk_pageview.cpp b/fpdfsdk/cpdfsdk_pageview.cpp
index 5bdd720..f22d575 100644
--- a/fpdfsdk/cpdfsdk_pageview.cpp
+++ b/fpdfsdk/cpdfsdk_pageview.cpp
@@ -241,17 +241,17 @@
 }
 #endif  // PDF_ENABLE_XFA
 
-CFX_WideString CPDFSDK_PageView::GetSelectedText() {
+WideString CPDFSDK_PageView::GetSelectedText() {
   if (CPDFSDK_Annot* pAnnot = GetFocusAnnot()) {
     CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr =
         m_pFormFillEnv->GetAnnotHandlerMgr();
     return pAnnotHandlerMgr->Annot_GetSelectedText(pAnnot);
   }
 
-  return CFX_WideString();
+  return WideString();
 }
 
-void CPDFSDK_PageView::ReplaceSelection(const CFX_WideString& text) {
+void CPDFSDK_PageView::ReplaceSelection(const WideString& text) {
   if (CPDFSDK_Annot* pAnnot = GetFocusAnnot()) {
     CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr =
         m_pFormFillEnv->GetAnnotHandlerMgr();
diff --git a/fpdfsdk/cpdfsdk_pageview.h b/fpdfsdk/cpdfsdk_pageview.h
index 00e90d7..b86f305 100644
--- a/fpdfsdk/cpdfsdk_pageview.h
+++ b/fpdfsdk/cpdfsdk_pageview.h
@@ -61,8 +61,8 @@
     return m_pFormFillEnv.Get();
   }
 
-  CFX_WideString GetSelectedText();
-  void ReplaceSelection(const CFX_WideString& text);
+  WideString GetSelectedText();
+  void ReplaceSelection(const WideString& text);
 
   bool OnFocus(const CFX_PointF& point, uint32_t nFlag);
   bool OnLButtonDown(const CFX_PointF& point, uint32_t nFlag);
diff --git a/fpdfsdk/cpdfsdk_widget.cpp b/fpdfsdk/cpdfsdk_widget.cpp
index 0183f58..a859dcd 100644
--- a/fpdfsdk/cpdfsdk_widget.cpp
+++ b/fpdfsdk/cpdfsdk_widget.cpp
@@ -75,7 +75,7 @@
   if (pContext->GetDocType() == XFA_DocType::Static) {
     if (!m_hMixXFAWidget) {
       if (CXFA_FFDocView* pDocView = pContext->GetXFADocView()) {
-        CFX_WideString sName;
+        WideString sName;
         if (GetFieldType() == FIELDTYPE_RADIOBUTTON) {
           sName = GetAnnotName();
           if (sName.IsEmpty())
@@ -102,7 +102,7 @@
   if (!pDocView)
     return nullptr;
 
-  CFX_WideString sName = GetName();
+  WideString sName = GetName();
   return !sName.IsEmpty() ? pDocView->GetWidgetByName(sName, nullptr) : nullptr;
 }
 
@@ -377,7 +377,7 @@
     }
     case FIELDTYPE_TEXTFIELD: {
       if (CXFA_WidgetAcc* pWidgetAcc = hWidget->GetDataAcc()) {
-        CFX_WideString sValue;
+        WideString sValue;
         pWidgetAcc->GetValue(sValue, XFA_VALUEPICTURE_Display);
         pFormField->SetValue(sValue, true);
       }
@@ -409,7 +409,7 @@
           }
         }
 
-        CFX_WideString sValue;
+        WideString sValue;
         pWidgetAcc->GetValue(sValue, XFA_VALUEPICTURE_Display);
         pFormField->SetValue(sValue, true);
       }
@@ -432,7 +432,7 @@
       if (CXFA_WidgetAcc* pWidgetAcc = hWidget->GetDataAcc()) {
         for (int i = 0, sz = pWidgetAcc->CountChoiceListItems(false); i < sz;
              i++) {
-          CFX_WideString swText;
+          WideString swText;
           pWidgetAcc->GetChoiceListItem(swText, i, false);
 
           pFormField->InsertOption(swText, i, true);
@@ -447,7 +447,7 @@
       if (CXFA_WidgetAcc* pWidgetAcc = hWidget->GetDataAcc()) {
         for (int i = 0, sz = pWidgetAcc->CountChoiceListItems(false); i < sz;
              i++) {
-          CFX_WideString swText;
+          WideString swText;
           pWidgetAcc->GetChoiceListItem(swText, i, false);
 
           pFormField->InsertOption(swText, i, false);
@@ -552,7 +552,7 @@
 }
 
 #ifdef PDF_ENABLE_XFA
-CFX_WideString CPDFSDK_Widget::GetName() const {
+WideString CPDFSDK_Widget::GetName() const {
   CPDF_FormField* pFormField = GetFormField();
   return pFormField->GetFullName();
 }
@@ -607,28 +607,28 @@
 }
 
 #ifdef PDF_ENABLE_XFA
-CFX_WideString CPDFSDK_Widget::GetValue(bool bDisplay) const {
+WideString CPDFSDK_Widget::GetValue(bool bDisplay) const {
   if (CXFA_FFWidget* hWidget = GetMixXFAWidget()) {
     if (CXFA_WidgetAcc* pWidgetAcc = hWidget->GetDataAcc()) {
-      CFX_WideString sValue;
+      WideString sValue;
       pWidgetAcc->GetValue(
           sValue, bDisplay ? XFA_VALUEPICTURE_Display : XFA_VALUEPICTURE_Edit);
       return sValue;
     }
   }
 #else
-CFX_WideString CPDFSDK_Widget::GetValue() const {
+WideString CPDFSDK_Widget::GetValue() const {
 #endif  // PDF_ENABLE_XFA
   CPDF_FormField* pFormField = GetFormField();
   return pFormField->GetValue();
 }
 
-CFX_WideString CPDFSDK_Widget::GetDefaultValue() const {
+WideString CPDFSDK_Widget::GetDefaultValue() const {
   CPDF_FormField* pFormField = GetFormField();
   return pFormField->GetDefaultValue();
 }
 
-CFX_WideString CPDFSDK_Widget::GetOptionLabel(int nIndex) const {
+WideString CPDFSDK_Widget::GetOptionLabel(int nIndex) const {
   CPDF_FormField* pFormField = GetFormField();
   return pFormField->GetOptionLabel(nIndex);
 }
@@ -692,7 +692,7 @@
 #endif  // PDF_ENABLE_XFA
 }
 
-void CPDFSDK_Widget::SetValue(const CFX_WideString& sValue, bool bNotify) {
+void CPDFSDK_Widget::SetValue(const WideString& sValue, bool bNotify) {
   CPDF_FormField* pFormField = GetFormField();
   pFormField->SetValue(sValue, bNotify);
 #ifdef PDF_ENABLE_XFA
@@ -701,7 +701,7 @@
 #endif  // PDF_ENABLE_XFA
 }
 
-void CPDFSDK_Widget::SetDefaultValue(const CFX_WideString& sValue) {}
+void CPDFSDK_Widget::SetDefaultValue(const WideString& sValue) {}
 void CPDFSDK_Widget::SetOptionSelection(int index,
                                         bool bSelected,
                                         bool bNotify) {
@@ -742,7 +742,7 @@
     case FIELDTYPE_TEXTFIELD:
     case FIELDTYPE_COMBOBOX: {
       bool bFormatted = false;
-      CFX_WideString sValue = OnFormat(bFormatted);
+      WideString sValue = OnFormat(bFormatted);
       ResetAppearance(bFormatted ? &sValue : nullptr, true);
       break;
     }
@@ -753,7 +753,7 @@
 }
 #endif  // PDF_ENABLE_XFA
 
-void CPDFSDK_Widget::ResetAppearance(const CFX_WideString* sValue,
+void CPDFSDK_Widget::ResetAppearance(const WideString* sValue,
                                      bool bValueChanged) {
   SetAppModified();
 
@@ -786,7 +786,7 @@
   m_pAnnot->ClearCachedAP();
 }
 
-CFX_WideString CPDFSDK_Widget::OnFormat(bool& bFormatted) {
+WideString CPDFSDK_Widget::OnFormat(bool& bFormatted) {
   CPDF_FormField* pFormField = GetFormField();
   ASSERT(pFormField);
   return m_pInterForm->OnFormat(pFormField, bFormatted);
@@ -1042,7 +1042,7 @@
   return CPDF_Action();
 }
 
-CFX_WideString CPDFSDK_Widget::GetAlternateName() const {
+WideString CPDFSDK_Widget::GetAlternateName() const {
   CPDF_FormField* pFormField = GetFormField();
   return pFormField->GetAlternateName();
 }
diff --git a/fpdfsdk/cpdfsdk_widget.h b/fpdfsdk/cpdfsdk_widget.h
index d33413a..5b2411e 100644
--- a/fpdfsdk/cpdfsdk_widget.h
+++ b/fpdfsdk/cpdfsdk_widget.h
@@ -82,12 +82,12 @@
 
   int GetSelectedIndex(int nIndex) const;
 #ifndef PDF_ENABLE_XFA
-  CFX_WideString GetValue() const;
+  WideString GetValue() const;
 #else
-  CFX_WideString GetValue(bool bDisplay = true) const;
+  WideString GetValue(bool bDisplay = true) const;
 #endif  // PDF_ENABLE_XFA
-  CFX_WideString GetDefaultValue() const;
-  CFX_WideString GetOptionLabel(int nIndex) const;
+  WideString GetDefaultValue() const;
+  WideString GetOptionLabel(int nIndex) const;
   int CountOptions() const;
   bool IsOptionSelected(int nIndex) const;
   int GetTopVisibleIndex() const;
@@ -95,13 +95,13 @@
   int GetAlignment() const;
   int GetMaxLen() const;
 #ifdef PDF_ENABLE_XFA
-  CFX_WideString GetName() const;
+  WideString GetName() const;
 #endif  // PDF_ENABLE_XFA
-  CFX_WideString GetAlternateName() const;
+  WideString GetAlternateName() const;
 
   void SetCheck(bool bChecked, bool bNotify);
-  void SetValue(const CFX_WideString& sValue, bool bNotify);
-  void SetDefaultValue(const CFX_WideString& sValue);
+  void SetValue(const WideString& sValue, bool bNotify);
+  void SetDefaultValue(const WideString& sValue);
   void SetOptionSelection(int index, bool bSelected, bool bNotify);
   void ClearSelection(bool bNotify);
   void SetTopVisibleIndex(int index);
@@ -109,10 +109,10 @@
 #ifdef PDF_ENABLE_XFA
   void ResetAppearance(bool bValueChanged);
 #endif  // PDF_ENABLE_XFA
-  void ResetAppearance(const CFX_WideString* sValue, bool bValueChanged);
+  void ResetAppearance(const WideString* sValue, bool bValueChanged);
   void ResetFieldAppearance(bool bValueChanged);
   void UpdateField();
-  CFX_WideString OnFormat(bool& bFormatted);
+  WideString OnFormat(bool& bFormatted);
 
   bool OnAAction(CPDF_AAction::AActionType type,
                  PDFSDK_FieldAction& data,
diff --git a/fpdfsdk/cpdfsdk_widgethandler.cpp b/fpdfsdk/cpdfsdk_widgethandler.cpp
index d20d29a..ab37141 100644
--- a/fpdfsdk/cpdfsdk_widgethandler.cpp
+++ b/fpdfsdk/cpdfsdk_widgethandler.cpp
@@ -231,7 +231,7 @@
   if (nFieldType == FIELDTYPE_TEXTFIELD || nFieldType == FIELDTYPE_COMBOBOX) {
     bool bFormatted = false;
     CPDFSDK_Annot::ObservedPtr pObserved(pWidget);
-    CFX_WideString sValue = pWidget->OnFormat(bFormatted);
+    WideString sValue = pWidget->OnFormat(bFormatted);
     if (!pObserved)
       return;
 
@@ -280,15 +280,15 @@
   return CFX_FloatRect();
 }
 
-CFX_WideString CPDFSDK_WidgetHandler::GetSelectedText(CPDFSDK_Annot* pAnnot) {
+WideString CPDFSDK_WidgetHandler::GetSelectedText(CPDFSDK_Annot* pAnnot) {
   if (!pAnnot->IsSignatureWidget() && m_pFormFiller)
     return m_pFormFiller->GetSelectedText(pAnnot);
 
-  return CFX_WideString();
+  return WideString();
 }
 
 void CPDFSDK_WidgetHandler::ReplaceSelection(CPDFSDK_Annot* pAnnot,
-                                             const CFX_WideString& text) {
+                                             const WideString& text) {
   if (!pAnnot->IsSignatureWidget() && m_pFormFiller)
     m_pFormFiller->ReplaceSelection(pAnnot, text);
 }
diff --git a/fpdfsdk/cpdfsdk_widgethandler.h b/fpdfsdk/cpdfsdk_widgethandler.h
index 82a9380..d83c98f 100644
--- a/fpdfsdk/cpdfsdk_widgethandler.h
+++ b/fpdfsdk/cpdfsdk_widgethandler.h
@@ -37,9 +37,8 @@
   void ReleaseAnnot(CPDFSDK_Annot* pAnnot) override;
   CFX_FloatRect GetViewBBox(CPDFSDK_PageView* pPageView,
                             CPDFSDK_Annot* pAnnot) override;
-  CFX_WideString GetSelectedText(CPDFSDK_Annot* pAnnot) override;
-  void ReplaceSelection(CPDFSDK_Annot* pAnnot,
-                        const CFX_WideString& text) override;
+  WideString GetSelectedText(CPDFSDK_Annot* pAnnot) override;
+  void ReplaceSelection(CPDFSDK_Annot* pAnnot, const WideString& text) override;
   bool HitTest(CPDFSDK_PageView* pPageView,
                CPDFSDK_Annot* pAnnot,
                const CFX_PointF& point) override;
diff --git a/fpdfsdk/cpdfsdk_xfawidgethandler.cpp b/fpdfsdk/cpdfsdk_xfawidgethandler.cpp
index e9c9972..b5c52a8 100644
--- a/fpdfsdk/cpdfsdk_xfawidgethandler.cpp
+++ b/fpdfsdk/cpdfsdk_xfawidgethandler.cpp
@@ -99,15 +99,14 @@
 
 // TODO(bug 840): Implement so selected text can be obtained from XFA
 // fields.
-CFX_WideString CPDFSDK_XFAWidgetHandler::GetSelectedText(
-    CPDFSDK_Annot* pAnnot) {
-  return CFX_WideString();
+WideString CPDFSDK_XFAWidgetHandler::GetSelectedText(CPDFSDK_Annot* pAnnot) {
+  return WideString();
 }
 
 // TODO(bug 840): Implement so text can be inserted into and deleted from XFA
 // fields.
 void CPDFSDK_XFAWidgetHandler::ReplaceSelection(CPDFSDK_Annot* pAnnot,
-                                                const CFX_WideString& text) {}
+                                                const WideString& text) {}
 
 bool CPDFSDK_XFAWidgetHandler::HitTest(CPDFSDK_PageView* pPageView,
                                        CPDFSDK_Annot* pAnnot,
diff --git a/fpdfsdk/cpdfsdk_xfawidgethandler.h b/fpdfsdk/cpdfsdk_xfawidgethandler.h
index e1f7661..e26472d 100644
--- a/fpdfsdk/cpdfsdk_xfawidgethandler.h
+++ b/fpdfsdk/cpdfsdk_xfawidgethandler.h
@@ -32,9 +32,8 @@
   void ReleaseAnnot(CPDFSDK_Annot* pAnnot) override;
   CFX_FloatRect GetViewBBox(CPDFSDK_PageView* pPageView,
                             CPDFSDK_Annot* pAnnot) override;
-  CFX_WideString GetSelectedText(CPDFSDK_Annot* pAnnot) override;
-  void ReplaceSelection(CPDFSDK_Annot* pAnnot,
-                        const CFX_WideString& text) override;
+  WideString GetSelectedText(CPDFSDK_Annot* pAnnot) override;
+  void ReplaceSelection(CPDFSDK_Annot* pAnnot, const WideString& text) override;
   bool HitTest(CPDFSDK_PageView* pPageView,
                CPDFSDK_Annot* pAnnot,
                const CFX_PointF& point) override;
diff --git a/fpdfsdk/formfiller/cba_fontmap.cpp b/fpdfsdk/formfiller/cba_fontmap.cpp
index c3ab2b8..625ce46 100644
--- a/fpdfsdk/formfiller/cba_fontmap.cpp
+++ b/fpdfsdk/formfiller/cba_fontmap.cpp
@@ -68,7 +68,7 @@
 }
 
 void CBA_FontMap::SetDefaultFont(CPDF_Font* pFont,
-                                 const CFX_ByteString& sFontName) {
+                                 const ByteString& sFontName) {
   ASSERT(pFont);
 
   if (m_pDefaultFont)
@@ -83,7 +83,7 @@
   AddFontData(m_pDefaultFont.Get(), m_sDefaultFontName, nCharset);
 }
 
-CPDF_Font* CBA_FontMap::FindFontSameCharset(CFX_ByteString* sFontAlias,
+CPDF_Font* CBA_FontMap::FindFontSameCharset(ByteString* sFontAlias,
                                             int32_t nCharset) {
   if (m_pAnnotDict->GetStringFor("Subtype") != "Widget")
     return nullptr;
@@ -109,7 +109,7 @@
 }
 
 CPDF_Font* CBA_FontMap::FindResFontSameCharset(CPDF_Dictionary* pResDict,
-                                               CFX_ByteString* sFontAlias,
+                                               ByteString* sFontAlias,
                                                int32_t nCharset) {
   if (!pResDict)
     return nullptr;
@@ -121,7 +121,7 @@
   CPDF_Document* pDocument = GetDocument();
   CPDF_Font* pFind = nullptr;
   for (const auto& it : *pFonts) {
-    const CFX_ByteString& csKey = it.first;
+    const ByteString& csKey = it.first;
     if (!it.second)
       continue;
 
@@ -145,13 +145,12 @@
   return pFind;
 }
 
-void CBA_FontMap::AddedFont(CPDF_Font* pFont,
-                            const CFX_ByteString& sFontAlias) {
+void CBA_FontMap::AddedFont(CPDF_Font* pFont, const ByteString& sFontAlias) {
   AddFontToAnnotDict(pFont, sFontAlias);
 }
 
 void CBA_FontMap::AddFontToAnnotDict(CPDF_Font* pFont,
-                                     const CFX_ByteString& sAlias) {
+                                     const ByteString& sAlias) {
   if (!pFont)
     return;
 
@@ -194,7 +193,7 @@
   }
 }
 
-CPDF_Font* CBA_FontMap::GetAnnotDefaultFont(CFX_ByteString* sAlias) {
+CPDF_Font* CBA_FontMap::GetAnnotDefaultFont(ByteString* sAlias) {
   CPDF_Dictionary* pAcroFormDict = nullptr;
   const bool bWidget = (m_pAnnotDict->GetStringFor("Subtype") == "Widget");
   if (bWidget) {
@@ -203,7 +202,7 @@
       pAcroFormDict = pRootDict->GetDictFor("AcroForm");
   }
 
-  CFX_ByteString sDA;
+  ByteString sDA;
   CPDF_Object* pObj = FPDF_GetFieldAttr(m_pAnnotDict.Get(), "DA");
   if (pObj)
     sDA = pObj->GetString();
@@ -211,17 +210,17 @@
   if (bWidget) {
     if (sDA.IsEmpty()) {
       pObj = FPDF_GetFieldAttr(pAcroFormDict, "DA");
-      sDA = pObj ? pObj->GetString() : CFX_ByteString();
+      sDA = pObj ? pObj->GetString() : ByteString();
     }
   }
   if (sDA.IsEmpty())
     return nullptr;
 
-  CPDF_SimpleParser syntax(sDA.AsStringC());
+  CPDF_SimpleParser syntax(sDA.AsStringView());
   syntax.FindTagParamFromStart("Tf", 2);
 
-  CFX_ByteString sFontName(syntax.GetWord());
-  CFX_ByteString sDecodedFontName = PDF_NameDecode(sFontName);
+  ByteString sFontName(syntax.GetWord());
+  ByteString sDecodedFontName = PDF_NameDecode(sFontName);
   *sAlias = sDecodedFontName.Right(sDecodedFontName.GetLength() - 1);
 
   CPDF_Dictionary* pFontDict = nullptr;
@@ -243,7 +242,7 @@
   return pFontDict ? m_pDocument->LoadFont(pFontDict) : nullptr;
 }
 
-void CBA_FontMap::SetAPType(const CFX_ByteString& sAPType) {
+void CBA_FontMap::SetAPType(const ByteString& sAPType) {
   m_sAPType = sAPType;
 
   Reset();
diff --git a/fpdfsdk/formfiller/cba_fontmap.h b/fpdfsdk/formfiller/cba_fontmap.h
index 7eb7d4e..807cb65 100644
--- a/fpdfsdk/formfiller/cba_fontmap.h
+++ b/fpdfsdk/formfiller/cba_fontmap.h
@@ -19,28 +19,28 @@
   ~CBA_FontMap() override;
 
   void Reset();
-  void SetDefaultFont(CPDF_Font* pFont, const CFX_ByteString& sFontName);
-  void SetAPType(const CFX_ByteString& sAPType);
+  void SetDefaultFont(CPDF_Font* pFont, const ByteString& sFontName);
+  void SetAPType(const ByteString& sAPType);
 
  private:
   // CPWL_FontMap:
   void Initialize() override;
   CPDF_Document* GetDocument() override;
-  CPDF_Font* FindFontSameCharset(CFX_ByteString* sFontAlias,
+  CPDF_Font* FindFontSameCharset(ByteString* sFontAlias,
                                  int32_t nCharset) override;
-  void AddedFont(CPDF_Font* pFont, const CFX_ByteString& sFontAlias) override;
+  void AddedFont(CPDF_Font* pFont, const ByteString& sFontAlias) override;
 
   CPDF_Font* FindResFontSameCharset(CPDF_Dictionary* pResDict,
-                                    CFX_ByteString* sFontAlias,
+                                    ByteString* sFontAlias,
                                     int32_t nCharset);
-  CPDF_Font* GetAnnotDefaultFont(CFX_ByteString* csNameTag);
-  void AddFontToAnnotDict(CPDF_Font* pFont, const CFX_ByteString& sAlias);
+  CPDF_Font* GetAnnotDefaultFont(ByteString* csNameTag);
+  void AddFontToAnnotDict(CPDF_Font* pFont, const ByteString& sAlias);
 
   CFX_UnownedPtr<CPDF_Document> m_pDocument;
   CFX_UnownedPtr<CPDF_Dictionary> m_pAnnotDict;
   CFX_UnownedPtr<CPDF_Font> m_pDefaultFont;
-  CFX_ByteString m_sDefaultFontName;
-  CFX_ByteString m_sAPType;
+  ByteString m_sDefaultFontName;
+  ByteString m_sAPType;
 };
 
 #endif  // FPDFSDK_FORMFILLER_CBA_FONTMAP_H_
diff --git a/fpdfsdk/formfiller/cffl_combobox.cpp b/fpdfsdk/formfiller/cffl_combobox.cpp
index aeb31f5..ab34a65 100644
--- a/fpdfsdk/formfiller/cffl_combobox.cpp
+++ b/fpdfsdk/formfiller/cffl_combobox.cpp
@@ -52,7 +52,7 @@
   pWnd->SetFillerNotify(pFormFiller);
 
   int32_t nCurSel = m_pWidget->GetSelectedIndex(0);
-  CFX_WideString swText;
+  WideString swText;
   if (nCurSel < 0)
     swText = m_pWidget->GetValue();
   else
@@ -94,7 +94,7 @@
   if (!pWnd)
     return;
 
-  CFX_WideString swText = pWnd->GetText();
+  WideString swText = pWnd->GetText();
   int32_t nCurSel = pWnd->GetSelect();
 
   bool bSetValue = false;
@@ -235,15 +235,15 @@
   pEdit->SetCharSet(FX_CHARSET_ChineseSimplified);
   pEdit->SetReadyToInput();
 
-  CFX_WideString wsText = pEdit->GetText();
+  WideString wsText = pEdit->GetText();
   int nCharacters = wsText.GetLength();
-  CFX_ByteString bsUTFText = wsText.UTF16LE_Encode();
+  ByteString bsUTFText = wsText.UTF16LE_Encode();
   auto* pBuffer = reinterpret_cast<const unsigned short*>(bsUTFText.c_str());
   m_pFormFillEnv->OnSetFieldInputFocus(pBuffer, nCharacters, true);
 }
 
-CFX_WideString CFFL_ComboBox::GetSelectExportText() {
-  CFX_WideString swRet;
+WideString CFFL_ComboBox::GetSelectExportText() {
+  WideString swRet;
 
   int nExport = -1;
   CPDFSDK_PageView* pPageView = GetCurPageView(true);
diff --git a/fpdfsdk/formfiller/cffl_combobox.h b/fpdfsdk/formfiller/cffl_combobox.h
index dc8441d..bdc0934 100644
--- a/fpdfsdk/formfiller/cffl_combobox.h
+++ b/fpdfsdk/formfiller/cffl_combobox.h
@@ -16,7 +16,7 @@
   int nIndex;
   int nStart;
   int nEnd;
-  CFX_WideString sValue;
+  WideString sValue;
 };
 
 class CFFL_ComboBox : public CFFL_TextObject,
@@ -50,7 +50,7 @@
   void OnSetFocus(CPWL_Edit* pEdit) override;
 
  private:
-  CFX_WideString GetSelectExportText();
+  WideString GetSelectExportText();
 
   FFL_ComboBoxState m_State;
 };
diff --git a/fpdfsdk/formfiller/cffl_formfiller.cpp b/fpdfsdk/formfiller/cffl_formfiller.cpp
index fd569c7..2c6138b 100644
--- a/fpdfsdk/formfiller/cffl_formfiller.cpp
+++ b/fpdfsdk/formfiller/cffl_formfiller.cpp
@@ -233,19 +233,19 @@
   return pWnd && pWnd->OnChar(nChar, nFlags);
 }
 
-CFX_WideString CFFL_FormFiller::GetSelectedText(CPDFSDK_Annot* pAnnot) {
+WideString CFFL_FormFiller::GetSelectedText(CPDFSDK_Annot* pAnnot) {
   if (!IsValid())
-    return CFX_WideString();
+    return WideString();
 
   CPDFSDK_PageView* pPageView = GetCurPageView(true);
   ASSERT(pPageView);
 
   CPWL_Wnd* pWnd = GetPDFWindow(pPageView, false);
-  return pWnd ? pWnd->GetSelectedText() : CFX_WideString();
+  return pWnd ? pWnd->GetSelectedText() : WideString();
 }
 
 void CFFL_FormFiller::ReplaceSelection(CPDFSDK_Annot* pAnnot,
-                                       const CFX_WideString& text) {
+                                       const WideString& text) {
   if (!IsValid())
     return;
 
diff --git a/fpdfsdk/formfiller/cffl_formfiller.h b/fpdfsdk/formfiller/cffl_formfiller.h
index e9c2c55..8078d35 100644
--- a/fpdfsdk/formfiller/cffl_formfiller.h
+++ b/fpdfsdk/formfiller/cffl_formfiller.h
@@ -75,8 +75,8 @@
                          uint32_t nFlags);
   virtual bool OnChar(CPDFSDK_Annot* pAnnot, uint32_t nChar, uint32_t nFlags);
 
-  CFX_WideString GetSelectedText(CPDFSDK_Annot* pAnnot);
-  void ReplaceSelection(CPDFSDK_Annot* pAnnot, const CFX_WideString& text);
+  WideString GetSelectedText(CPDFSDK_Annot* pAnnot);
+  void ReplaceSelection(CPDFSDK_Annot* pAnnot, const WideString& text);
 
   void SetFocusForAnnot(CPDFSDK_Annot* pAnnot, uint32_t nFlag);
   void KillFocusForAnnot(CPDFSDK_Annot* pAnnot, uint32_t nFlag);
diff --git a/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp b/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp
index 989539f..3625e9d 100644
--- a/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp
+++ b/fpdfsdk/formfiller/cffl_interactiveformfiller.cpp
@@ -516,15 +516,14 @@
     UnRegisterFormFiller(pAnnot);
 }
 
-CFX_WideString CFFL_InteractiveFormFiller::GetSelectedText(
-    CPDFSDK_Annot* pAnnot) {
+WideString CFFL_InteractiveFormFiller::GetSelectedText(CPDFSDK_Annot* pAnnot) {
   ASSERT(pAnnot->GetPDFAnnot()->GetSubtype() == CPDF_Annot::Subtype::WIDGET);
   CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, false);
-  return pFormFiller ? pFormFiller->GetSelectedText(pAnnot) : CFX_WideString();
+  return pFormFiller ? pFormFiller->GetSelectedText(pAnnot) : WideString();
 }
 
 void CFFL_InteractiveFormFiller::ReplaceSelection(CPDFSDK_Annot* pAnnot,
-                                                  const CFX_WideString& text) {
+                                                  const WideString& text) {
   ASSERT(pAnnot->GetPDFAnnot()->GetSubtype() == CPDF_Annot::Subtype::WIDGET);
   CFFL_FormFiller* pFormFiller = GetFormFiller(pAnnot, false);
   if (!pFormFiller)
@@ -690,8 +689,7 @@
   CPDFSDK_InterForm* pInterForm = pPageView->GetFormFillEnv()->GetInterForm();
 
   bool bFormatted = false;
-  CFX_WideString sValue =
-      pInterForm->OnFormat(pWidget->GetFormField(), bFormatted);
+  WideString sValue = pInterForm->OnFormat(pWidget->GetFormField(), bFormatted);
   if (!(*pAnnot))
     return;
 
@@ -857,8 +855,8 @@
 
 std::pair<bool, bool> CFFL_InteractiveFormFiller::OnBeforeKeyStroke(
     CPWL_Wnd::PrivateData* pAttached,
-    CFX_WideString& strChange,
-    const CFX_WideString& strChangeEx,
+    WideString& strChange,
+    const WideString& strChangeEx,
     int nSelStart,
     int nSelEnd,
     bool bKeyDown,
diff --git a/fpdfsdk/formfiller/cffl_interactiveformfiller.h b/fpdfsdk/formfiller/cffl_interactiveformfiller.h
index 0982f1d..553cbe8 100644
--- a/fpdfsdk/formfiller/cffl_interactiveformfiller.h
+++ b/fpdfsdk/formfiller/cffl_interactiveformfiller.h
@@ -83,8 +83,8 @@
   CFFL_FormFiller* GetFormFiller(CPDFSDK_Annot* pAnnot, bool bRegister);
   void RemoveFormFiller(CPDFSDK_Annot* pAnnot);
 
-  CFX_WideString GetSelectedText(CPDFSDK_Annot* pAnnot);
-  void ReplaceSelection(CPDFSDK_Annot* pAnnot, const CFX_WideString& text);
+  WideString GetSelectedText(CPDFSDK_Annot* pAnnot);
+  void ReplaceSelection(CPDFSDK_Annot* pAnnot, const WideString& text);
 
   static bool IsVisible(CPDFSDK_Widget* pWidget);
   static bool IsReadOnly(CPDFSDK_Widget* pWidget);
@@ -133,8 +133,8 @@
                        float* fPopupRet) override;
   // Returns {bRC, bExit}.
   std::pair<bool, bool> OnBeforeKeyStroke(CPWL_Wnd::PrivateData* pAttached,
-                                          CFX_WideString& strChange,
-                                          const CFX_WideString& strChangeEx,
+                                          WideString& strChange,
+                                          const WideString& strChangeEx,
                                           int nSelStart,
                                           int nSelEnd,
                                           bool bKeyDown,
diff --git a/fpdfsdk/formfiller/cffl_textfield.cpp b/fpdfsdk/formfiller/cffl_textfield.cpp
index 8bf0825..76434a5 100644
--- a/fpdfsdk/formfiller/cffl_textfield.cpp
+++ b/fpdfsdk/formfiller/cffl_textfield.cpp
@@ -74,7 +74,7 @@
   pWnd->SetFillerNotify(m_pFormFillEnv->GetInteractiveFormFiller());
 
   int32_t nMaxLen = m_pWidget->GetMaxLen();
-  CFX_WideString swValue = m_pWidget->GetValue();
+  WideString swValue = m_pWidget->GetValue();
 
   if (nMaxLen > 0) {
     if (pWnd->HasFlag(PES_CHARARRAY)) {
@@ -136,8 +136,8 @@
   if (!pWnd)
     return;
 
-  CFX_WideString sOldValue = m_pWidget->GetValue();
-  CFX_WideString sNewValue = pWnd->GetText();
+  WideString sOldValue = m_pWidget->GetValue();
+  WideString sNewValue = pWnd->GetText();
 
   m_pWidget->SetValue(sNewValue, false);
   m_pWidget->ResetFieldAppearance(true);
@@ -239,9 +239,9 @@
   pEdit->SetCharSet(FX_CHARSET_ChineseSimplified);
   pEdit->SetReadyToInput();
 
-  CFX_WideString wsText = pEdit->GetText();
+  WideString wsText = pEdit->GetText();
   int nCharacters = wsText.GetLength();
-  CFX_ByteString bsUTFText = wsText.UTF16LE_Encode();
+  ByteString bsUTFText = wsText.UTF16LE_Encode();
   auto* pBuffer = reinterpret_cast<const unsigned short*>(bsUTFText.c_str());
   m_pFormFillEnv->OnSetFieldInputFocus(pBuffer, nCharacters, true);
 }
diff --git a/fpdfsdk/formfiller/cffl_textfield.h b/fpdfsdk/formfiller/cffl_textfield.h
index 2a99413..49ffc0f 100644
--- a/fpdfsdk/formfiller/cffl_textfield.h
+++ b/fpdfsdk/formfiller/cffl_textfield.h
@@ -21,7 +21,7 @@
 
   int nStart;
   int nEnd;
-  CFX_WideString sValue;
+  WideString sValue;
 };
 
 class CFFL_TextField : public CFFL_TextObject,
diff --git a/fpdfsdk/fpdf_ext.cpp b/fpdfsdk/fpdf_ext.cpp
index 676f701..1e39f2b 100644
--- a/fpdfsdk/fpdf_ext.cpp
+++ b/fpdfsdk/fpdf_ext.cpp
@@ -52,7 +52,7 @@
     FPDF_UnSupportError(FPDF_UNSP_ANNOT_3DANNOT);
   } else if (nAnnotSubtype == CPDF_Annot::Subtype::SCREEN) {
     const CPDF_Dictionary* pAnnotDict = pPDFAnnot->GetAnnotDict();
-    CFX_ByteString cbString;
+    ByteString cbString;
     if (pAnnotDict->KeyExist("IT"))
       cbString = pAnnotDict->GetStringFor("IT");
     if (cbString.Compare("Img") != 0)
@@ -67,7 +67,7 @@
     FPDF_UnSupportError(FPDF_UNSP_ANNOT_ATTACHMENT);
   } else if (nAnnotSubtype == CPDF_Annot::Subtype::WIDGET) {
     const CPDF_Dictionary* pAnnotDict = pPDFAnnot->GetAnnotDict();
-    CFX_ByteString cbString;
+    ByteString cbString;
     if (pAnnotDict->KeyExist("FT"))
       cbString = pAnnotDict->GetStringFor("FT");
     if (cbString.Compare("Sig") == 0)
@@ -75,18 +75,18 @@
   }
 }
 
-bool CheckSharedForm(const CXML_Element* pElement, CFX_ByteString cbName) {
+bool CheckSharedForm(const CXML_Element* pElement, ByteString cbName) {
   int count = pElement->CountAttrs();
   int i = 0;
   for (i = 0; i < count; i++) {
-    CFX_ByteString space;
-    CFX_ByteString name;
-    CFX_WideString value;
+    ByteString space;
+    ByteString name;
+    WideString value;
     pElement->GetAttrByIndex(i, &space, &name, &value);
     if (space == "xmlns" && name == "adhocwf" &&
         value == L"http://ns.adobe.com/AcrobatAdhocWorkflow/1.0/") {
       CXML_Element* pVersion =
-          pElement->GetElement("adhocwf", cbName.AsStringC(), 0);
+          pElement->GetElement("adhocwf", cbName.AsStringView(), 0);
       if (!pVersion)
         continue;
       CXML_Content* pContent = ToContent(pVersion->GetChild(0));
@@ -127,7 +127,7 @@
   // Portfolios and Packages
   const CPDF_Dictionary* pRootDict = pDoc->GetRoot();
   if (pRootDict) {
-    CFX_ByteString cbString;
+    ByteString cbString;
     if (pRootDict->KeyExist("Collection")) {
       FPDF_UnSupportError(FPDF_UNSP_DOC_PORTABLECOLLECTION);
       return;
@@ -143,7 +143,7 @@
         CPDF_Array* pArray = pJSDict ? pJSDict->GetArrayFor("Names") : nullptr;
         if (pArray) {
           for (size_t i = 0; i < pArray->GetCount(); i++) {
-            CFX_ByteString cbStr = pArray->GetStringAt(i);
+            ByteString cbStr = pArray->GetStringAt(i);
             if (cbStr.Compare("com.adobe.acrobat.SharedReview.Register") == 0) {
               FPDF_UnSupportError(FPDF_UNSP_DOC_SHAREDREVIEW);
               return;
@@ -181,7 +181,7 @@
   if (!pName)
     return PAGEMODE_USENONE;
 
-  CFX_ByteString strPageMode = pName->GetString();
+  ByteString strPageMode = pName->GetString();
   if (strPageMode.IsEmpty() || strPageMode.EqualNoCase("UseNone"))
     return PAGEMODE_USENONE;
   if (strPageMode.EqualNoCase("UseOutlines"))
diff --git a/fpdfsdk/fpdf_flatten.cpp b/fpdfsdk/fpdf_flatten.cpp
index b8e84c8..a276e3a 100644
--- a/fpdfsdk/fpdf_flatten.cpp
+++ b/fpdfsdk/fpdf_flatten.cpp
@@ -97,7 +97,7 @@
     if (!pAnnotDic)
       continue;
 
-    CFX_ByteString sSubtype = pAnnotDic->GetStringFor("Subtype");
+    ByteString sSubtype = pAnnotDic->GetStringFor("Subtype");
     if (sSubtype == "Popup")
       continue;
 
@@ -168,18 +168,18 @@
   return rcRet;
 }
 
-uint32_t NewIndirectContentsStream(const CFX_ByteString& key,
+uint32_t NewIndirectContentsStream(const ByteString& key,
                                    CPDF_Document* pDocument) {
   CPDF_Stream* pNewContents = pDocument->NewIndirect<CPDF_Stream>(
       nullptr, 0,
       pdfium::MakeUnique<CPDF_Dictionary>(pDocument->GetByteStringPool()));
-  CFX_ByteString sStream;
+  ByteString sStream;
   sStream.Format("q 1 0 0 1 0 0 cm /%s Do Q", key.c_str());
   pNewContents->SetData(sStream.raw_str(), sStream.GetLength());
   return pNewContents->GetObjNum();
 }
 
-void SetPageContents(const CFX_ByteString& key,
+void SetPageContents(const ByteString& key,
                      CPDF_Dictionary* pPage,
                      CPDF_Document* pDocument) {
   CPDF_Array* pContentsArray = nullptr;
@@ -199,9 +199,9 @@
     pContentsArray = pDocument->NewIndirect<CPDF_Array>();
     auto pAcc = pdfium::MakeRetain<CPDF_StreamAcc>(pContentsStream);
     pAcc->LoadAllData();
-    CFX_ByteString sStream = "q\n";
-    CFX_ByteString sBody =
-        CFX_ByteString((const char*)pAcc->GetData(), pAcc->GetSize());
+    ByteString sStream = "q\n";
+    ByteString sBody =
+        ByteString((const char*)pAcc->GetData(), pAcc->GetSize());
     sStream = sStream + sBody + "\nQ";
     pContentsStream->SetDataAndRemoveFilter(sStream.raw_str(),
                                             sStream.GetLength());
@@ -299,10 +299,10 @@
   if (!pPageXObject)
     pPageXObject = pRes->SetNewFor<CPDF_Dictionary>("XObject");
 
-  CFX_ByteString key;
+  ByteString key;
   int nStreams = pdfium::CollectionSize<int>(ObjectArray);
   if (nStreams > 0) {
-    CFX_ByteString sKey;
+    ByteString sKey;
     int i = 0;
     while (i < INT_MAX) {
       sKey.Format("FFT%d", i);
@@ -336,7 +336,7 @@
     CFX_FloatRect rcAnnot = pAnnotDic->GetRectFor("Rect");
     rcAnnot.Normalize();
 
-    CFX_ByteString sAnnotState = pAnnotDic->GetStringFor("AS");
+    ByteString sAnnotState = pAnnotDic->GetStringFor("AS");
     CPDF_Dictionary* pAnnotAP = pAnnotDic->GetDictFor("AP");
     if (!pAnnotAP)
       continue;
@@ -392,17 +392,17 @@
     if (!pXObject)
       pXObject = pNewXORes->SetNewFor<CPDF_Dictionary>("XObject");
 
-    CFX_ByteString sFormName;
+    ByteString sFormName;
     sFormName.Format("F%d", i);
     pXObject->SetNewFor<CPDF_Reference>(sFormName, pDocument,
                                         pObj->GetObjNum());
 
     auto pAcc = pdfium::MakeRetain<CPDF_StreamAcc>(pNewXObject);
     pAcc->LoadAllData();
-    CFX_ByteString sStream(pAcc->GetData(), pAcc->GetSize());
+    ByteString sStream(pAcc->GetData(), pAcc->GetSize());
     CFX_Matrix matrix = pAPDic->GetMatrixFor("Matrix");
     CFX_Matrix m = GetMatrix(rcAnnot, rcStream, matrix);
-    CFX_ByteString sTemp;
+    ByteString sTemp;
     sTemp.Format("q %f 0 0 %f %f %f cm /%s Do Q\n", m.a, m.d, m.e, m.f,
                  sFormName.c_str());
     sStream += sTemp;
diff --git a/fpdfsdk/fpdf_structtree.cpp b/fpdfsdk/fpdf_structtree.cpp
index a6bf60d..b1fca65 100644
--- a/fpdfsdk/fpdf_structtree.cpp
+++ b/fpdfsdk/fpdf_structtree.cpp
@@ -22,13 +22,13 @@
   return static_cast<CPDF_StructElement*>(struct_element);
 }
 
-unsigned long WideStringToBuffer(const CFX_WideString& str,
+unsigned long WideStringToBuffer(const WideString& str,
                                  void* buffer,
                                  unsigned long buflen) {
   if (str.IsEmpty())
     return 0;
 
-  CFX_ByteString encodedStr = str.UTF16LE_Encode();
+  ByteString encodedStr = str.UTF16LE_Encode();
   const unsigned long len = encodedStr.GetLength();
   if (buffer && len <= buflen)
     memcpy(buffer, encodedStr.c_str(), len);
diff --git a/fpdfsdk/fpdf_structtree_embeddertest.cpp b/fpdfsdk/fpdf_structtree_embeddertest.cpp
index 43a4d01..05b77fc 100644
--- a/fpdfsdk/fpdf_structtree_embeddertest.cpp
+++ b/fpdfsdk/fpdf_structtree_embeddertest.cpp
@@ -57,8 +57,8 @@
   ASSERT_EQ(24U, FPDF_StructElement_GetAltText(gchild_element, buffer,
                                                sizeof(buffer)));
   const wchar_t kExpected[] = L"Black Image";
-  EXPECT_EQ(CFX_WideString(kExpected),
-            CFX_WideString::FromUTF16LE(buffer, FXSYS_len(kExpected)));
+  EXPECT_EQ(WideString(kExpected),
+            WideString::FromUTF16LE(buffer, FXSYS_len(kExpected)));
 
   ASSERT_EQ(1, FPDF_StructElement_CountChildren(gchild_element));
   FPDF_STRUCTELEMENT ggchild_element =
@@ -91,8 +91,8 @@
 
   ASSERT_EQ(18U, FPDF_StructElement_GetType(element, buffer, sizeof(buffer)));
   const wchar_t kExpected[] = L"Document";
-  EXPECT_EQ(CFX_WideString(kExpected),
-            CFX_WideString::FromUTF16LE(buffer, FXSYS_len(kExpected)));
+  EXPECT_EQ(WideString(kExpected),
+            WideString::FromUTF16LE(buffer, FXSYS_len(kExpected)));
 
   FPDF_StructTree_Close(struct_tree);
   FPDF_ClosePage(page);
diff --git a/fpdfsdk/fpdf_sysfontinfo.cpp b/fpdfsdk/fpdf_sysfontinfo.cpp
index 92c9937..875f3fd 100644
--- a/fpdfsdk/fpdf_sysfontinfo.cpp
+++ b/fpdfsdk/fpdf_sysfontinfo.cpp
@@ -73,7 +73,7 @@
     return m_pInfo->GetFontData(m_pInfo, hFont, table, buffer, size);
   }
 
-  bool GetFaceName(void* hFont, CFX_ByteString* name) override {
+  bool GetFaceName(void* hFont, ByteString* name) override {
     if (!m_pInfo->GetFaceName)
       return false;
     uint32_t size = m_pInfo->GetFaceName(m_pInfo, hFont, nullptr, 0);
@@ -81,7 +81,7 @@
       return false;
     char* buffer = FX_Alloc(char, size);
     size = m_pInfo->GetFaceName(m_pInfo, hFont, buffer, size);
-    *name = CFX_ByteString(buffer, size);
+    *name = ByteString(buffer, size);
     FX_Free(buffer);
     return true;
   }
@@ -167,7 +167,7 @@
                                         void* hFont,
                                         char* buffer,
                                         unsigned long buf_size) {
-  CFX_ByteString name;
+  ByteString name;
   auto* pDefault = static_cast<FPDF_SYSFONTINFO_DEFAULT*>(pThis);
   if (!pDefault->m_pFontInfo->GetFaceName(hFont, &name))
     return 0;
@@ -175,7 +175,7 @@
     return name.GetLength() + 1;
 
   strncpy(buffer, name.c_str(),
-          (name.GetLength() + 1) * sizeof(CFX_ByteString::CharType));
+          (name.GetLength() + 1) * sizeof(ByteString::CharType));
   return name.GetLength() + 1;
 }
 
diff --git a/fpdfsdk/fpdf_transformpage.cpp b/fpdfsdk/fpdf_transformpage.cpp
index 93df594..9480771 100644
--- a/fpdfsdk/fpdf_transformpage.cpp
+++ b/fpdfsdk/fpdf_transformpage.cpp
@@ -25,7 +25,7 @@
 namespace {
 
 void SetBoundingBox(CPDF_Page* page,
-                    const CFX_ByteString& key,
+                    const ByteString& key,
                     float left,
                     float bottom,
                     float right,
@@ -38,7 +38,7 @@
 }
 
 bool GetBoundingBox(CPDF_Page* page,
-                    const CFX_ByteString& key,
+                    const ByteString& key,
                     float* left,
                     float* bottom,
                     float* right,
@@ -111,12 +111,12 @@
   CFX_FloatRect rect(clipRect->left, clipRect->bottom, clipRect->right,
                      clipRect->top);
   rect.Normalize();
-  CFX_ByteString bsClipping;
+  ByteString bsClipping;
   bsClipping.Format("%f %f %f %f re W* n ", rect.left, rect.bottom,
                     rect.Width(), rect.Height());
   textBuf << bsClipping;
 
-  CFX_ByteString bsMatix;
+  ByteString bsMatix;
   bsMatix.Format("%f %f %f %f %f %f cm ", matrix->a, matrix->b, matrix->c,
                  matrix->d, matrix->e, matrix->f);
   textBuf << bsMatix;
@@ -248,7 +248,7 @@
     return;
   }
 
-  CFX_ByteString temp;
+  ByteString temp;
   for (size_t i = 0; i < pPoints.size(); i++) {
     buf << pPoints[i].m_Point.x << " " << pPoints[i].m_Point.y;
     FXPT_TYPE point_type = pPoints[i].m_Type;
diff --git a/fpdfsdk/fpdfannot.cpp b/fpdfsdk/fpdfannot.cpp
index 95f0f44..e08a3bf 100644
--- a/fpdfsdk/fpdfannot.cpp
+++ b/fpdfsdk/fpdfannot.cpp
@@ -483,7 +483,7 @@
   pAnnotDict->SetNewFor<CPDF_Number>("CA", A / 255.f);
 
   // Set the color of the annotation.
-  CFX_ByteString key = type == FPDFANNOT_COLORTYPE_InteriorColor ? "IC" : "C";
+  ByteString key = type == FPDFANNOT_COLORTYPE_InteriorColor ? "IC" : "C";
   CPDF_Array* pColor = pAnnotDict->GetArrayFor(key);
   if (pColor)
     pColor->Clear();
diff --git a/fpdfsdk/fpdfattachment.cpp b/fpdfsdk/fpdfattachment.cpp
index d984cf8..7402114 100644
--- a/fpdfsdk/fpdfattachment.cpp
+++ b/fpdfsdk/fpdfattachment.cpp
@@ -25,24 +25,23 @@
 
 constexpr char kChecksumKey[] = "CheckSum";
 
-CFX_ByteString CFXByteStringHexDecode(const CFX_ByteString& bsHex) {
+ByteString CFXByteStringHexDecode(const ByteString& bsHex) {
   uint8_t* result = nullptr;
   uint32_t size = 0;
   HexDecode(bsHex.raw_str(), bsHex.GetLength(), &result, &size);
-  CFX_ByteString bsDecoded(result, size);
+  ByteString bsDecoded(result, size);
   FX_Free(result);
   return bsDecoded;
 }
 
-CFX_ByteString GenerateMD5Base16(const void* contents,
-                                 const unsigned long len) {
+ByteString GenerateMD5Base16(const void* contents, const unsigned long len) {
   uint8_t digest[16];
   CRYPT_MD5Generate(reinterpret_cast<const uint8_t*>(contents), len, digest);
   char buf[32];
   for (int i = 0; i < 16; ++i)
     FXSYS_IntToTwoHexChars(digest[i], &buf[i * 2]);
 
-  return CFX_ByteString(buf, 32);
+  return ByteString(buf, 32);
 }
 
 }  // namespace
@@ -59,8 +58,8 @@
 FPDF_EXPORT FPDF_ATTACHMENT FPDF_CALLCONV
 FPDFDoc_AddAttachment(FPDF_DOCUMENT document, FPDF_WIDESTRING name) {
   CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document);
-  CFX_WideString wsName =
-      CFX_WideString::FromUTF16LE(name, CFX_WideString::WStringLength(name));
+  WideString wsName =
+      WideString::FromUTF16LE(name, WideString::WStringLength(name));
   if (!pDoc || wsName.IsEmpty())
     return nullptr;
 
@@ -110,7 +109,7 @@
   if (static_cast<size_t>(index) >= nameTree.GetCount())
     return nullptr;
 
-  CFX_WideString csName;
+  WideString csName;
   return nameTree.LookupValueAndName(index, &csName);
 }
 
@@ -171,8 +170,8 @@
   if (!pParamsDict)
     return false;
 
-  CFX_ByteString bsKey = key;
-  CFX_ByteString bsValue = CFXByteStringFromFPDFWideString(value);
+  ByteString bsKey = key;
+  ByteString bsValue = CFXByteStringFromFPDFWideString(value);
   bool bEncodedAsHex = bsKey == kChecksumKey;
   if (bEncodedAsHex)
     bsValue = CFXByteStringHexDecode(bsValue);
@@ -194,12 +193,12 @@
   if (!pParamsDict)
     return 0;
 
-  CFX_ByteString bsKey = key;
-  CFX_WideString value = pParamsDict->GetUnicodeTextFor(bsKey);
+  ByteString bsKey = key;
+  WideString value = pParamsDict->GetUnicodeTextFor(bsKey);
   if (bsKey == kChecksumKey && !value.IsEmpty()) {
     CPDF_String* stringValue = pParamsDict->GetObjectFor(bsKey)->AsString();
     if (stringValue->IsHex()) {
-      CFX_ByteString encoded = PDF_EncodeString(stringValue->GetString(), true);
+      ByteString encoded = PDF_EncodeString(stringValue->GetString(), true);
       value = CPDF_String(nullptr, encoded, false).GetUnicodeText();
     }
   }
@@ -233,7 +232,7 @@
   // Set the creation date of the new attachment in the dictionary.
   CFX_DateTime dateTime;
   dateTime.Now();
-  CFX_ByteString bsDateTime;
+  ByteString bsDateTime;
   bsDateTime.Format("D:%d%02d%02d%02d%02d%02d", dateTime.GetYear(),
                     dateTime.GetMonth(), dateTime.GetDay(), dateTime.GetHour(),
                     dateTime.GetMinute(), dateTime.GetSecond());
diff --git a/fpdfsdk/fpdfdoc.cpp b/fpdfsdk/fpdfdoc.cpp
index f73336a..c3910b2 100644
--- a/fpdfsdk/fpdfdoc.cpp
+++ b/fpdfsdk/fpdfdoc.cpp
@@ -24,7 +24,7 @@
 
 CPDF_Bookmark FindBookmark(const CPDF_BookmarkTree& tree,
                            CPDF_Bookmark bookmark,
-                           const CFX_WideString& title,
+                           const WideString& title,
                            std::set<CPDF_Dictionary*>* visited) {
   // Return if already checked to avoid circular calling.
   if (pdfium::ContainsKey(*visited, bookmark.GetDict()))
@@ -91,7 +91,7 @@
   if (!pDict)
     return 0;
   CPDF_Bookmark bookmark(ToDictionary(static_cast<CPDF_Object*>(pDict)));
-  CFX_WideString title = bookmark.GetTitle();
+  WideString title = bookmark.GetTitle();
   return Utf16EncodeMaybeCopyAndReturnLength(title, buffer, buflen);
 }
 
@@ -103,8 +103,8 @@
   if (!pDoc)
     return nullptr;
   CPDF_BookmarkTree tree(pDoc);
-  FX_STRSIZE len = CFX_WideString::WStringLength(title);
-  CFX_WideString encodedTitle = CFX_WideString::FromUTF16LE(title, len);
+  FX_STRSIZE len = WideString::WStringLength(title);
+  WideString encodedTitle = WideString::FromUTF16LE(title, len);
   std::set<CPDF_Dictionary*> visited;
   return FindBookmark(tree, CPDF_Bookmark(), encodedTitle, &visited).GetDict();
 }
@@ -174,7 +174,7 @@
     return 0;
 
   CPDF_Action action(ToDictionary(static_cast<CPDF_Object*>(pDict)));
-  CFX_ByteString path = action.GetFilePath().UTF8Encode();
+  ByteString path = action.GetFilePath().UTF8Encode();
   unsigned long len = path.GetLength() + 1;
   if (buffer && len <= buflen)
     memcpy(buffer, path.c_str(), len);
@@ -192,7 +192,7 @@
   if (!pDoc)
     return 0;
   CPDF_Action action(ToDictionary(static_cast<CPDF_Object*>(pDict)));
-  CFX_ByteString path = action.GetURI(pDoc);
+  ByteString path = action.GetURI(pDoc);
   unsigned long len = path.GetLength() + 1;
   if (buffer && len <= buflen)
     memcpy(buffer, path.c_str(), len);
@@ -390,7 +390,7 @@
   const CPDF_Dictionary* pInfo = pDoc->GetInfo();
   if (!pInfo)
     return 0;
-  CFX_WideString text = pInfo->GetUnicodeTextFor(tag);
+  WideString text = pInfo->GetUnicodeTextFor(tag);
   return Utf16EncodeMaybeCopyAndReturnLength(text, buffer, buflen);
 }
 
@@ -404,7 +404,7 @@
 
   // CPDF_PageLabel can deal with NULL |document|.
   CPDF_PageLabel label(CPDFDocumentFromFPDFDocument(document));
-  CFX_WideString str;
+  WideString str;
   if (!label.GetLabel(page_index, &str))
     return 0;
   return Utf16EncodeMaybeCopyAndReturnLength(str, buffer, buflen);
diff --git a/fpdfsdk/fpdfdoc_embeddertest.cpp b/fpdfsdk/fpdfdoc_embeddertest.cpp
index b44a8ec..5db610e 100644
--- a/fpdfsdk/fpdfdoc_embeddertest.cpp
+++ b/fpdfsdk/fpdfdoc_embeddertest.cpp
@@ -125,16 +125,14 @@
   FPDF_BOOKMARK child = FPDFBookmark_GetFirstChild(document(), nullptr);
   EXPECT_TRUE(child);
   EXPECT_EQ(34u, FPDFBookmark_GetTitle(child, buf, sizeof(buf)));
-  EXPECT_EQ(CFX_WideString(L"A Good Beginning"),
-            CFX_WideString::FromUTF16LE(buf, 16));
+  EXPECT_EQ(WideString(L"A Good Beginning"), WideString::FromUTF16LE(buf, 16));
 
   EXPECT_EQ(nullptr, FPDFBookmark_GetFirstChild(document(), child));
 
   FPDF_BOOKMARK sibling = FPDFBookmark_GetNextSibling(document(), child);
   EXPECT_TRUE(sibling);
   EXPECT_EQ(28u, FPDFBookmark_GetTitle(sibling, buf, sizeof(buf)));
-  EXPECT_EQ(CFX_WideString(L"A Good Ending"),
-            CFX_WideString::FromUTF16LE(buf, 13));
+  EXPECT_EQ(WideString(L"A Good Ending"), WideString::FromUTF16LE(buf, 13));
 
   EXPECT_EQ(nullptr, FPDFBookmark_GetNextSibling(document(), sibling));
 }
@@ -152,8 +150,7 @@
   // Check that the string matches.
   unsigned short buf[128];
   EXPECT_EQ(34u, FPDFBookmark_GetTitle(child, buf, sizeof(buf)));
-  EXPECT_EQ(CFX_WideString(L"A Good Beginning"),
-            CFX_WideString::FromUTF16LE(buf, 16));
+  EXPECT_EQ(WideString(L"A Good Beginning"), WideString::FromUTF16LE(buf, 16));
 
   // Check that it is them same as the one returned by GetFirstChild.
   EXPECT_EQ(child, FPDFBookmark_GetFirstChild(document(), nullptr));
@@ -201,19 +198,19 @@
 
   constexpr wchar_t kExpectedCreator[] = L"Microsoft Word";
   ASSERT_EQ(30u, FPDF_GetMetaText(document(), "Creator", buf, sizeof(buf)));
-  EXPECT_EQ(CFX_WideString(kExpectedCreator),
-            CFX_WideString::FromUTF16LE(buf, FXSYS_len(kExpectedCreator)));
+  EXPECT_EQ(WideString(kExpectedCreator),
+            WideString::FromUTF16LE(buf, FXSYS_len(kExpectedCreator)));
 
   constexpr wchar_t kExpectedCreationDate[] = L"D:20160411190039+00'00'";
   ASSERT_EQ(48u,
             FPDF_GetMetaText(document(), "CreationDate", buf, sizeof(buf)));
-  EXPECT_EQ(CFX_WideString(kExpectedCreationDate),
-            CFX_WideString::FromUTF16LE(buf, FXSYS_len(kExpectedCreationDate)));
+  EXPECT_EQ(WideString(kExpectedCreationDate),
+            WideString::FromUTF16LE(buf, FXSYS_len(kExpectedCreationDate)));
 
   constexpr wchar_t kExpectedModDate[] = L"D:20160411190039+00'00'";
   ASSERT_EQ(48u, FPDF_GetMetaText(document(), "ModDate", buf, sizeof(buf)));
-  EXPECT_EQ(CFX_WideString(kExpectedModDate),
-            CFX_WideString::FromUTF16LE(buf, FXSYS_len(kExpectedModDate)));
+  EXPECT_EQ(WideString(kExpectedModDate),
+            WideString::FromUTF16LE(buf, FXSYS_len(kExpectedModDate)));
 }
 
 TEST_F(FPDFDocEmbeddertest, GetMetaTextSameObjectNumber) {
@@ -225,8 +222,8 @@
   unsigned short buf[128];
   constexpr wchar_t kExpectedModDate[] = L"D:20170612232940-04'00'";
   ASSERT_EQ(48u, FPDF_GetMetaText(document(), "ModDate", buf, sizeof(buf)));
-  EXPECT_EQ(CFX_WideString(kExpectedModDate),
-            CFX_WideString::FromUTF16LE(buf, FXSYS_len(kExpectedModDate)));
+  EXPECT_EQ(WideString(kExpectedModDate),
+            WideString::FromUTF16LE(buf, FXSYS_len(kExpectedModDate)));
 }
 
 TEST_F(FPDFDocEmbeddertest, GetMetaTextInAttachmentFile) {
@@ -236,8 +233,8 @@
   unsigned short buf[128];
   constexpr wchar_t kExpectedModDate[] = L"D:20170712214448-07'00'";
   ASSERT_EQ(48u, FPDF_GetMetaText(document(), "ModDate", buf, sizeof(buf)));
-  EXPECT_EQ(CFX_WideString(kExpectedModDate),
-            CFX_WideString::FromUTF16LE(buf, FXSYS_len(kExpectedModDate)));
+  EXPECT_EQ(WideString(kExpectedModDate),
+            WideString::FromUTF16LE(buf, FXSYS_len(kExpectedModDate)));
 }
 
 TEST_F(FPDFDocEmbeddertest, NoPageLabels) {
@@ -257,38 +254,38 @@
 
   const wchar_t kExpectedPageLabel0[] = L"i";
   ASSERT_EQ(4u, FPDF_GetPageLabel(document(), 0, buf, sizeof(buf)));
-  EXPECT_EQ(CFX_WideString(kExpectedPageLabel0),
-            CFX_WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel0)));
+  EXPECT_EQ(WideString(kExpectedPageLabel0),
+            WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel0)));
 
   const wchar_t kExpectedPageLabel1[] = L"ii";
   ASSERT_EQ(6u, FPDF_GetPageLabel(document(), 1, buf, sizeof(buf)));
-  EXPECT_EQ(CFX_WideString(kExpectedPageLabel1),
-            CFX_WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel1)));
+  EXPECT_EQ(WideString(kExpectedPageLabel1),
+            WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel1)));
 
   const wchar_t kExpectedPageLabel2[] = L"1";
   ASSERT_EQ(4u, FPDF_GetPageLabel(document(), 2, buf, sizeof(buf)));
-  EXPECT_EQ(CFX_WideString(kExpectedPageLabel2),
-            CFX_WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel2)));
+  EXPECT_EQ(WideString(kExpectedPageLabel2),
+            WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel2)));
 
   const wchar_t kExpectedPageLabel3[] = L"2";
   ASSERT_EQ(4u, FPDF_GetPageLabel(document(), 3, buf, sizeof(buf)));
-  EXPECT_EQ(CFX_WideString(kExpectedPageLabel3),
-            CFX_WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel3)));
+  EXPECT_EQ(WideString(kExpectedPageLabel3),
+            WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel3)));
 
   const wchar_t kExpectedPageLabel4[] = L"zzA";
   ASSERT_EQ(8u, FPDF_GetPageLabel(document(), 4, buf, sizeof(buf)));
-  EXPECT_EQ(CFX_WideString(kExpectedPageLabel4),
-            CFX_WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel4)));
+  EXPECT_EQ(WideString(kExpectedPageLabel4),
+            WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel4)));
 
   const wchar_t kExpectedPageLabel5[] = L"zzB";
   ASSERT_EQ(8u, FPDF_GetPageLabel(document(), 5, buf, sizeof(buf)));
-  EXPECT_EQ(CFX_WideString(kExpectedPageLabel5),
-            CFX_WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel5)));
+  EXPECT_EQ(WideString(kExpectedPageLabel5),
+            WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel5)));
 
   const wchar_t kExpectedPageLabel6[] = L"";
   ASSERT_EQ(2u, FPDF_GetPageLabel(document(), 6, buf, sizeof(buf)));
-  EXPECT_EQ(CFX_WideString(kExpectedPageLabel6),
-            CFX_WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel6)));
+  EXPECT_EQ(WideString(kExpectedPageLabel6),
+            WideString::FromUTF16LE(buf, FXSYS_len(kExpectedPageLabel6)));
 
   ASSERT_EQ(0u, FPDF_GetPageLabel(document(), 7, buf, sizeof(buf)));
   ASSERT_EQ(0u, FPDF_GetPageLabel(document(), 8, buf, sizeof(buf)));
diff --git a/fpdfsdk/fpdfedit_embeddertest.cpp b/fpdfsdk/fpdfedit_embeddertest.cpp
index faf6d97..ca2a457 100644
--- a/fpdfsdk/fpdfedit_embeddertest.cpp
+++ b/fpdfsdk/fpdfedit_embeddertest.cpp
@@ -64,8 +64,8 @@
     EXPECT_TRUE(font_desc->KeyExist("Descent"));
     EXPECT_TRUE(font_desc->KeyExist("CapHeight"));
     EXPECT_TRUE(font_desc->KeyExist("StemV"));
-    CFX_ByteString present("FontFile");
-    CFX_ByteString absent("FontFile2");
+    ByteString present("FontFile");
+    ByteString absent("FontFile2");
     if (font_type == FPDF_FONT_TRUETYPE)
       std::swap(present, absent);
     EXPECT_TRUE(font_desc->KeyExist(present));
diff --git a/fpdfsdk/fpdfeditimg.cpp b/fpdfsdk/fpdfeditimg.cpp
index 5e31916..7036aa2 100644
--- a/fpdfsdk/fpdfeditimg.cpp
+++ b/fpdfsdk/fpdfeditimg.cpp
@@ -244,7 +244,7 @@
   CPDF_PageObject* pObj = CPDFPageObjectFromFPDFPageObject(image_object);
   CPDF_Object* pFilter =
       pObj->AsImage()->GetImage()->GetDict()->GetDirectObjectFor("Filter");
-  CFX_ByteString bsFilter;
+  ByteString bsFilter;
   if (pFilter->IsName())
     bsFilter = pFilter->AsName()->GetString();
   else
diff --git a/fpdfsdk/fpdfeditpage.cpp b/fpdfsdk/fpdfeditpage.cpp
index 79155e5..26f4424 100644
--- a/fpdfsdk/fpdfeditpage.cpp
+++ b/fpdfsdk/fpdfeditpage.cpp
@@ -100,7 +100,7 @@
   pDoc->CreateNewDoc();
 
   time_t currentTime;
-  CFX_ByteString DateStr;
+  ByteString DateStr;
   if (FSDK_IsSandBoxPolicyEnabled(FPDF_POLICY_MACHINETIME_ACCESS)) {
     if (time(&currentTime) != -1) {
       tm* pTM = localtime(&currentTime);
diff --git a/fpdfsdk/fpdfedittext.cpp b/fpdfsdk/fpdfedittext.cpp
index 38f7cc2..2ac32b8 100644
--- a/fpdfsdk/fpdfedittext.cpp
+++ b/fpdfsdk/fpdfedittext.cpp
@@ -28,7 +28,7 @@
 namespace {
 
 CPDF_Dictionary* LoadFontDesc(CPDF_Document* pDoc,
-                              const CFX_ByteString& font_name,
+                              const ByteString& font_name,
                               CFX_Font* pFont,
                               const uint8_t* data,
                               uint32_t size,
@@ -71,8 +71,7 @@
 
   CPDF_Stream* pStream = pDoc->NewIndirect<CPDF_Stream>();
   pStream->SetData(data, size);
-  CFX_ByteString fontFile =
-      font_type == FPDF_FONT_TYPE1 ? "FontFile" : "FontFile2";
+  ByteString fontFile = font_type == FPDF_FONT_TYPE1 ? "FontFile" : "FontFile2";
   fontDesc->SetNewFor<CPDF_Reference>(fontFile, pDoc, pStream->GetObjNum());
   return fontDesc;
 }
@@ -243,7 +242,7 @@
   fontDict->SetNewFor<CPDF_Name>("Type", "Font");
   fontDict->SetNewFor<CPDF_Name>(
       "Subtype", font_type == FPDF_FONT_TYPE1 ? "Type1" : "TrueType");
-  CFX_ByteString name = pFont->GetFaceName();
+  ByteString name = pFont->GetFaceName();
   if (name.IsEmpty())
     name = "Unnamed";
   fontDict->SetNewFor<CPDF_Name>("BaseFont", name);
@@ -286,9 +285,9 @@
   fontDict->SetNewFor<CPDF_Name>("Type", "Font");
   fontDict->SetNewFor<CPDF_Name>("Subtype", "Type0");
   // TODO(npm): Get the correct encoding, if it's not identity.
-  CFX_ByteString encoding = "Identity-H";
+  ByteString encoding = "Identity-H";
   fontDict->SetNewFor<CPDF_Name>("Encoding", encoding);
-  CFX_ByteString name = pFont->GetFaceName();
+  ByteString name = pFont->GetFaceName();
   if (name.IsEmpty())
     name = "Unnamed";
   fontDict->SetNewFor<CPDF_Name>(
@@ -404,7 +403,7 @@
   if (!pDoc)
     return nullptr;
 
-  CPDF_Font* pFont = CPDF_Font::GetStockFont(pDoc, CFX_ByteStringC(font));
+  CPDF_Font* pFont = CPDF_Font::GetStockFont(pDoc, ByteStringView(font));
   if (!pFont)
     return nullptr;
 
@@ -421,9 +420,9 @@
   if (!pTextObj)
     return false;
 
-  FX_STRSIZE len = CFX_WideString::WStringLength(text);
-  CFX_WideString encodedText = CFX_WideString::FromUTF16LE(text, len);
-  CFX_ByteString byteText;
+  FX_STRSIZE len = WideString::WStringLength(text);
+  WideString encodedText = WideString::FromUTF16LE(text, len);
+  ByteString byteText;
   for (wchar_t wc : encodedText) {
     pTextObj->GetFont()->AppendChar(
         &byteText, pTextObj->GetFont()->CharCodeFromUnicode(wc));
diff --git a/fpdfsdk/fpdfformfill.cpp b/fpdfsdk/fpdfformfill.cpp
index 1b5cc48..77cba50 100644
--- a/fpdfsdk/fpdfformfill.cpp
+++ b/fpdfsdk/fpdfformfill.cpp
@@ -66,11 +66,11 @@
 }
 
 #ifdef PDF_ENABLE_XFA
-std::vector<CFX_ByteString>* FromFPDFStringHandle(FPDF_STRINGHANDLE handle) {
-  return static_cast<std::vector<CFX_ByteString>*>(handle);
+std::vector<ByteString>* FromFPDFStringHandle(FPDF_STRINGHANDLE handle) {
+  return static_cast<std::vector<ByteString>*>(handle);
 }
 
-FPDF_STRINGHANDLE ToFPDFStringHandle(std::vector<CFX_ByteString>* strings) {
+FPDF_STRINGHANDLE ToFPDFStringHandle(std::vector<ByteString>* strings) {
   return static_cast<FPDF_STRINGHANDLE>(strings);
 }
 #endif  // PDF_ENABLE_XFA
@@ -387,8 +387,8 @@
   if (!pPageView)
     return 0;
 
-  CFX_WideString wide_str_form_text = pPageView->GetSelectedText();
-  CFX_ByteString encoded_form_text = wide_str_form_text.UTF16LE_Encode();
+  WideString wide_str_form_text = pPageView->GetSelectedText();
+  ByteString encoded_form_text = wide_str_form_text.UTF16LE_Encode();
   unsigned long form_text_len = encoded_form_text.GetLength();
 
   if (buffer && buflen >= form_text_len)
@@ -404,8 +404,8 @@
   if (!pPageView)
     return;
 
-  FX_STRSIZE len = CFX_WideString::WStringLength(wsText);
-  CFX_WideString wide_str_text = CFX_WideString::FromUTF16LE(wsText, len);
+  FX_STRSIZE len = WideString::WStringLength(wsText);
+  WideString wide_str_text = WideString::FromUTF16LE(wsText, len);
 
   pPageView->ReplaceSelection(wide_str_text);
 }
@@ -500,10 +500,10 @@
       pContext->GetDocType() != XFA_DocType::Static)
     return;
 
-  CFX_WideString wsCpText;
+  WideString wsCpText;
   static_cast<CXFA_FFWidget*>(hWidget)->Copy(wsCpText);
 
-  CFX_ByteString bsCpText = wsCpText.UTF16LE_Encode();
+  ByteString bsCpText = wsCpText.UTF16LE_Encode();
   uint32_t len = bsCpText.GetLength() / sizeof(unsigned short);
   if (!wsText) {
     *size = len;
@@ -532,10 +532,10 @@
       pContext->GetDocType() != XFA_DocType::Static)
     return;
 
-  CFX_WideString wsCpText;
+  WideString wsCpText;
   static_cast<CXFA_FFWidget*>(hWidget)->Cut(wsCpText);
 
-  CFX_ByteString bsCpText = wsCpText.UTF16LE_Encode();
+  ByteString bsCpText = wsCpText.UTF16LE_Encode();
   uint32_t len = bsCpText.GetLength() / sizeof(unsigned short);
   if (!wsText) {
     *size = len;
@@ -564,7 +564,7 @@
       pContext->GetDocType() != XFA_DocType::Static)
     return;
 
-  CFX_WideString wstr = CFX_WideString::FromUTF16LE(wsText, size);
+  WideString wstr = WideString::FromUTF16LE(wsText, size);
   static_cast<CXFA_FFWidget*>(hWidget)->Paste(wstr);
 }
 
@@ -585,7 +585,7 @@
   CFX_PointF ptPopup;
   ptPopup.x = x;
   ptPopup.y = y;
-  CFX_ByteStringC bs(bsText);
+  ByteStringView bs(bsText);
   static_cast<CXFA_FFWidget*>(hWidget)->ReplaceSpellCheckWord(ptPopup, bs);
 }
 
@@ -606,7 +606,7 @@
   CFX_PointF ptPopup;
   ptPopup.x = x;
   ptPopup.y = y;
-  auto sSuggestWords = pdfium::MakeUnique<std::vector<CFX_ByteString>>();
+  auto sSuggestWords = pdfium::MakeUnique<std::vector<ByteString>>();
   static_cast<CXFA_FFWidget*>(hWidget)->GetSuggestWords(ptPopup,
                                                         sSuggestWords.get());
 
@@ -616,7 +616,7 @@
 
 FPDF_EXPORT int FPDF_CALLCONV
 FPDF_StringHandleCounts(FPDF_STRINGHANDLE sHandle) {
-  std::vector<CFX_ByteString>* sSuggestWords = FromFPDFStringHandle(sHandle);
+  std::vector<ByteString>* sSuggestWords = FromFPDFStringHandle(sHandle);
   return sSuggestWords ? pdfium::CollectionSize<int>(*sSuggestWords) : -1;
 }
 
@@ -632,7 +632,7 @@
   if (index < 0 || index >= count)
     return false;
 
-  std::vector<CFX_ByteString>* sSuggestWords = FromFPDFStringHandle(sHandle);
+  std::vector<ByteString>* sSuggestWords = FromFPDFStringHandle(sHandle);
   uint32_t len = (*sSuggestWords)[index].GetLength();
   if (!bsText) {
     *size = len;
@@ -658,7 +658,7 @@
   if (!stringHandle || !bsText || size == 0)
     return false;
 
-  FromFPDFStringHandle(stringHandle)->push_back(CFX_ByteString(bsText, size));
+  FromFPDFStringHandle(stringHandle)->push_back(ByteString(bsText, size));
   return true;
 }
 #endif  // PDF_ENABLE_XFA
diff --git a/fpdfsdk/fpdfformfill_embeddertest.cpp b/fpdfsdk/fpdfformfill_embeddertest.cpp
index 56e1662..2597b37 100644
--- a/fpdfsdk/fpdfformfill_embeddertest.cpp
+++ b/fpdfsdk/fpdfformfill_embeddertest.cpp
@@ -106,7 +106,7 @@
     FORM_OnLButtonUp(form_handle(), page_, 0, end.x, end.y);
   }
 
-  void CheckSelection(const CFX_WideStringC& expected_string) {
+  void CheckSelection(const WideStringView& expected_string) {
     // Calculate expected length for selected text.
     int num_chars = expected_string.GetLength();
 
@@ -121,8 +121,7 @@
     EXPECT_EQ(expected_length, FORM_GetSelectedText(form_handle(), page_,
                                                     buf.data(), sel_text_len));
 
-    EXPECT_EQ(expected_string,
-              CFX_WideString::FromUTF16LE(buf.data(), num_chars));
+    EXPECT_EQ(expected_string, WideString::FromUTF16LE(buf.data(), num_chars));
   }
 
  private:
diff --git a/fpdfsdk/fpdfppo.cpp b/fpdfsdk/fpdfppo.cpp
index d08de02..230fd14 100644
--- a/fpdfsdk/fpdfppo.cpp
+++ b/fpdfsdk/fpdfppo.cpp
@@ -26,7 +26,7 @@
 namespace {
 
 CPDF_Object* PageDictGetInheritableTag(CPDF_Dictionary* pDict,
-                                       const CFX_ByteString& bsSrcTag) {
+                                       const ByteString& bsSrcTag) {
   if (!pDict || bsSrcTag.IsEmpty())
     return nullptr;
   if (!pDict->KeyExist("Parent") || !pDict->KeyExist("Type"))
@@ -58,7 +58,7 @@
 
 bool CopyInheritable(CPDF_Dictionary* pCurPageDict,
                      CPDF_Dictionary* pSrcPageDict,
-                     const CFX_ByteString& key) {
+                     const ByteString& key) {
   if (pCurPageDict->KeyExist(key))
     return true;
 
@@ -70,7 +70,7 @@
   return true;
 }
 
-bool ParserPageRangeString(CFX_ByteString rangstring,
+bool ParserPageRangeString(ByteString rangstring,
                            std::vector<uint16_t>* pageArray,
                            int nCount) {
   if (rangstring.IsEmpty())
@@ -78,13 +78,13 @@
 
   rangstring.Remove(' ');
   FX_STRSIZE nLength = rangstring.GetLength();
-  CFX_ByteString cbCompareString("0123456789-,");
+  ByteString cbCompareString("0123456789-,");
   for (FX_STRSIZE i = 0; i < nLength; ++i) {
     if (!cbCompareString.Contains(rangstring[i]))
       return false;
   }
 
-  CFX_ByteString cbMidRange;
+  ByteString cbMidRange;
   FX_STRSIZE nStringFrom = 0;
   pdfium::Optional<FX_STRSIZE> nStringTo = 0;
   while (nStringTo < nLength) {
@@ -165,7 +165,7 @@
 
   pDocInfoDict->SetNewFor<CPDF_String>("Producer", "PDFium", false);
 
-  CFX_ByteString cbRootType = pNewRoot->GetStringFor("Type", "");
+  ByteString cbRootType = pNewRoot->GetStringFor("Type", "");
   if (cbRootType.IsEmpty())
     pNewRoot->SetNewFor<CPDF_Name>("Type", "Catalog");
 
@@ -178,7 +178,7 @@
                                         pNewPages->GetObjNum());
   }
 
-  CFX_ByteString cbPageType = pNewPages->GetStringFor("Type", "");
+  ByteString cbPageType = pNewPages->GetStringFor("Type", "");
   if (cbPageType.IsEmpty())
     pNewPages->SetNewFor<CPDF_Name>("Type", "Pages");
 
@@ -205,7 +205,7 @@
 
     // Clone the page dictionary
     for (const auto& it : *pSrcPageDict) {
-      const CFX_ByteString& cbSrcKeyStr = it.first;
+      const ByteString& cbSrcKeyStr = it.first;
       if (cbSrcKeyStr == "Type" || cbSrcKeyStr == "Parent")
         continue;
 
@@ -271,7 +271,7 @@
       CPDF_Dictionary* pDict = pObj->AsDictionary();
       auto it = pDict->begin();
       while (it != pDict->end()) {
-        const CFX_ByteString& key = it->first;
+        const ByteString& key = it->first;
         CPDF_Object* pNextObj = it->second.get();
         ++it;
         if (key == "Parent" || key == "Prev" || key == "First")
@@ -330,7 +330,7 @@
   std::unique_ptr<CPDF_Object> pClone = pDirect->Clone();
   if (CPDF_Dictionary* pDictClone = pClone->AsDictionary()) {
     if (pDictClone->KeyExist("Type")) {
-      CFX_ByteString strType = pDictClone->GetStringFor("Type");
+      ByteString strType = pDictClone->GetStringFor("Type");
       if (!FXSYS_stricmp(strType.c_str(), "Pages"))
         return 4;
       if (!FXSYS_stricmp(strType.c_str(), "Page"))
diff --git a/fpdfsdk/fpdftext.cpp b/fpdfsdk/fpdftext.cpp
index 5b68da4..9742974 100644
--- a/fpdfsdk/fpdftext.cpp
+++ b/fpdfsdk/fpdftext.cpp
@@ -171,7 +171,7 @@
   if (start >= textpage->CountChars())
     return 0;
 
-  CFX_WideString str = textpage->GetPageText(start, count - 1);
+  WideString str = textpage->GetPageText(start, count - 1);
   if (str.GetLength() <= 0)
     return 0;
 
@@ -180,7 +180,7 @@
 
   // UFT16LE_Encode doesn't handle surrogate pairs properly, so it is expected
   // the number of items to stay the same.
-  CFX_ByteString cbUTF16str = str.UTF16LE_Encode();
+  ByteString cbUTF16str = str.UTF16LE_Encode();
   ASSERT(cbUTF16str.GetLength() / kBytesPerCharacter <=
          static_cast<size_t>(count));
   memcpy(result, cbUTF16str.GetBuffer(cbUTF16str.GetLength()),
@@ -229,12 +229,12 @@
 
   CPDF_TextPage* textpage = CPDFTextPageFromFPDFTextPage(text_page);
   CFX_FloatRect rect((float)left, (float)bottom, (float)right, (float)top);
-  CFX_WideString str = textpage->GetTextByRect(rect);
+  WideString str = textpage->GetTextByRect(rect);
 
   if (buflen <= 0 || !buffer)
     return str.GetLength();
 
-  CFX_ByteString cbUTF16Str = str.UTF16LE_Encode();
+  ByteString cbUTF16Str = str.UTF16LE_Encode();
   int len = cbUTF16Str.GetLength() / sizeof(unsigned short);
   int size = buflen > len ? len : buflen;
   memcpy(buffer, cbUTF16Str.GetBuffer(size * sizeof(unsigned short)),
@@ -256,8 +256,8 @@
 
   CPDF_TextPageFind* textpageFind =
       new CPDF_TextPageFind(CPDFTextPageFromFPDFTextPage(text_page));
-  FX_STRSIZE len = CFX_WideString::WStringLength(findwhat);
-  textpageFind->FindFirst(CFX_WideString::FromUTF16LE(findwhat, len), flags,
+  FX_STRSIZE len = WideString::WStringLength(findwhat);
+  textpageFind->FindFirst(WideString::FromUTF16LE(findwhat, len), flags,
                           start_index >= 0
                               ? pdfium::Optional<FX_STRSIZE>(start_index)
                               : pdfium::Optional<FX_STRSIZE>());
@@ -330,12 +330,12 @@
                                               int link_index,
                                               unsigned short* buffer,
                                               int buflen) {
-  CFX_WideString wsUrl(L"");
+  WideString wsUrl(L"");
   if (link_page && link_index >= 0) {
     CPDF_LinkExtract* pageLink = CPDFLinkExtractFromFPDFPageLink(link_page);
     wsUrl = pageLink->GetURL(link_index);
   }
-  CFX_ByteString cbUTF16URL = wsUrl.UTF16LE_Encode();
+  ByteString cbUTF16URL = wsUrl.UTF16LE_Encode();
   int required = cbUTF16URL.GetLength() / sizeof(unsigned short);
   if (!buffer || buflen <= 0)
     return required;
diff --git a/fpdfsdk/fpdfview.cpp b/fpdfsdk/fpdfview.cpp
index 0aaafe8..8bca376 100644
--- a/fpdfsdk/fpdfview.cpp
+++ b/fpdfsdk/fpdfview.cpp
@@ -348,9 +348,9 @@
   return static_cast<CPDF_Object*>(attachment);
 }
 
-CFX_ByteString CFXByteStringFromFPDFWideString(FPDF_WIDESTRING wide_string) {
-  return CFX_WideString::FromUTF16LE(wide_string,
-                                     CFX_WideString::WStringLength(wide_string))
+ByteString CFXByteStringFromFPDFWideString(FPDF_WIDESTRING wide_string) {
+  return WideString::FromUTF16LE(wide_string,
+                                 WideString::WStringLength(wide_string))
       .UTF8Encode();
 }
 
@@ -358,10 +358,10 @@
   return static_cast<CFX_DIBitmap*>(bitmap);
 }
 
-unsigned long Utf16EncodeMaybeCopyAndReturnLength(const CFX_WideString& text,
+unsigned long Utf16EncodeMaybeCopyAndReturnLength(const WideString& text,
                                                   void* buffer,
                                                   unsigned long buflen) {
-  CFX_ByteString encoded_text = text.UTF16LE_Encode();
+  ByteString encoded_text = text.UTF16LE_Encode();
   unsigned long len = encoded_text.GetLength();
   if (buffer && len <= buflen)
     memcpy(buffer, encoded_text.c_str(), len);
@@ -380,7 +380,7 @@
     // Decode the stream if one or more stream filters are specified.
     uint8_t* decoded_data = nullptr;
     uint32_t decoded_len = 0;
-    CFX_ByteString dummy_last_decoder;
+    ByteString dummy_last_decoder;
     CPDF_Dictionary* dummy_last_param;
     if (PDF_DataDecode(data, len, dict, dict->GetIntegerFor("DL"), false,
                        &decoded_data, &decoded_len, &dummy_last_decoder,
@@ -1313,7 +1313,7 @@
   if (!pDoc)
     return DuplexUndefined;
   CPDF_ViewerPreferences viewRef(pDoc);
-  CFX_ByteString duplex = viewRef.Duplex();
+  ByteString duplex = viewRef.Duplex();
   if ("Simplex" == duplex)
     return Simplex;
   if ("DuplexFlipShortEdge" == duplex)
@@ -1333,7 +1333,7 @@
     return 0;
 
   CPDF_ViewerPreferences viewRef(pDoc);
-  CFX_ByteString bsVal;
+  ByteString bsVal;
   if (!viewRef.GenericName(key, &bsVal))
     return 0;
 
@@ -1375,7 +1375,7 @@
     return nullptr;
 
   CPDF_NameTree name_tree(pDoc, "Dests");
-  return name_tree.LookupNamedDest(pDoc, PDF_DecodeText(CFX_ByteString(name)));
+  return name_tree.LookupNamedDest(pDoc, PDF_DecodeText(ByteString(name)));
 }
 
 #ifdef PDF_ENABLE_XFA
@@ -1450,7 +1450,7 @@
     return nullptr;
 
   CPDF_Object* pDestObj = nullptr;
-  CFX_WideString wsName;
+  WideString wsName;
   CPDF_NameTree nameTree(pDoc, "Dests");
   int count = nameTree.GetCount();
   if (index >= count) {
@@ -1465,7 +1465,7 @@
 
     index -= count;
     int i = 0;
-    CFX_ByteString bsName;
+    ByteString bsName;
     for (const auto& it : *pDest) {
       bsName = it.first;
       pDestObj = it.second.get();
@@ -1489,7 +1489,7 @@
   if (!pDestObj->IsArray())
     return nullptr;
 
-  CFX_ByteString utf16Name = wsName.UTF16LE_Encode();
+  ByteString utf16Name = wsName.UTF16LE_Encode();
   int len = utf16Name.GetLength();
   if (!buffer) {
     *buflen = len;
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
index 1032d49..8779c44 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
@@ -219,19 +219,19 @@
   return runtime->GetIsolate();
 }
 
-CFX_WideString CPDFXFA_Context::GetAppTitle() const {
+WideString CPDFXFA_Context::GetAppTitle() const {
   return L"PDFium";
 }
 
-CFX_WideString CPDFXFA_Context::GetAppName() {
+WideString CPDFXFA_Context::GetAppName() {
   return m_pFormFillEnv ? m_pFormFillEnv->FFI_GetAppName() : L"";
 }
 
-CFX_WideString CPDFXFA_Context::GetLanguage() {
+WideString CPDFXFA_Context::GetLanguage() {
   return m_pFormFillEnv ? m_pFormFillEnv->GetLanguage() : L"";
 }
 
-CFX_WideString CPDFXFA_Context::GetPlatform() {
+WideString CPDFXFA_Context::GetPlatform() {
   return m_pFormFillEnv ? m_pFormFillEnv->GetPlatform() : L"";
 }
 
@@ -240,8 +240,8 @@
     m_pFormFillEnv->JS_appBeep(dwType);
 }
 
-int32_t CPDFXFA_Context::MsgBox(const CFX_WideString& wsMessage,
-                                const CFX_WideString& wsTitle,
+int32_t CPDFXFA_Context::MsgBox(const WideString& wsMessage,
+                                const WideString& wsTitle,
                                 uint32_t dwIconType,
                                 uint32_t dwButtonType) {
   if (!m_pFormFillEnv)
@@ -292,12 +292,12 @@
   return XFA_IDYes;
 }
 
-CFX_WideString CPDFXFA_Context::Response(const CFX_WideString& wsQuestion,
-                                         const CFX_WideString& wsTitle,
-                                         const CFX_WideString& wsDefaultAnswer,
-                                         bool bMark) {
+WideString CPDFXFA_Context::Response(const WideString& wsQuestion,
+                                     const WideString& wsTitle,
+                                     const WideString& wsDefaultAnswer,
+                                     bool bMark) {
   if (!m_pFormFillEnv)
-    return CFX_WideString();
+    return WideString();
 
   int nLength = 2048;
   std::vector<uint8_t> pBuff(nLength);
@@ -305,27 +305,27 @@
                                            wsDefaultAnswer.c_str(), nullptr,
                                            bMark, pBuff.data(), nLength);
   if (nLength <= 0)
-    return CFX_WideString();
+    return WideString();
 
   nLength = std::min(2046, nLength);
   pBuff[nLength] = 0;
   pBuff[nLength + 1] = 0;
-  return CFX_WideString::FromUTF16LE(reinterpret_cast<uint16_t*>(pBuff.data()),
-                                     nLength / sizeof(uint16_t));
+  return WideString::FromUTF16LE(reinterpret_cast<uint16_t*>(pBuff.data()),
+                                 nLength / sizeof(uint16_t));
 }
 
 CFX_RetainPtr<IFX_SeekableReadStream> CPDFXFA_Context::DownloadURL(
-    const CFX_WideString& wsURL) {
+    const WideString& wsURL) {
   return m_pFormFillEnv ? m_pFormFillEnv->DownloadFromURL(wsURL.c_str())
                         : nullptr;
 }
 
-bool CPDFXFA_Context::PostRequestURL(const CFX_WideString& wsURL,
-                                     const CFX_WideString& wsData,
-                                     const CFX_WideString& wsContentType,
-                                     const CFX_WideString& wsEncode,
-                                     const CFX_WideString& wsHeader,
-                                     CFX_WideString& wsResponse) {
+bool CPDFXFA_Context::PostRequestURL(const WideString& wsURL,
+                                     const WideString& wsData,
+                                     const WideString& wsContentType,
+                                     const WideString& wsEncode,
+                                     const WideString& wsHeader,
+                                     WideString& wsResponse) {
   if (!m_pFormFillEnv)
     return false;
 
@@ -335,9 +335,9 @@
   return true;
 }
 
-bool CPDFXFA_Context::PutRequestURL(const CFX_WideString& wsURL,
-                                    const CFX_WideString& wsData,
-                                    const CFX_WideString& wsEncode) {
+bool CPDFXFA_Context::PutRequestURL(const WideString& wsURL,
+                                    const WideString& wsData,
+                                    const WideString& wsEncode) {
   return m_pFormFillEnv &&
          m_pFormFillEnv->PutRequestURL(wsURL.c_str(), wsData.c_str(),
                                        wsEncode.c_str());
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_context.h b/fpdfsdk/fpdfxfa/cpdfxfa_context.h
index 586e12d..a0f90ab 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_context.h
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_context.h
@@ -56,31 +56,31 @@
   void ClearChangeMark();
 
   // IFXA_AppProvider:
-  CFX_WideString GetLanguage() override;
-  CFX_WideString GetPlatform() override;
-  CFX_WideString GetAppName() override;
-  CFX_WideString GetAppTitle() const override;
+  WideString GetLanguage() override;
+  WideString GetPlatform() override;
+  WideString GetAppName() override;
+  WideString GetAppTitle() const override;
 
   void Beep(uint32_t dwType) override;
-  int32_t MsgBox(const CFX_WideString& wsMessage,
-                 const CFX_WideString& wsTitle,
+  int32_t MsgBox(const WideString& wsMessage,
+                 const WideString& wsTitle,
                  uint32_t dwIconType,
                  uint32_t dwButtonType) override;
-  CFX_WideString Response(const CFX_WideString& wsQuestion,
-                          const CFX_WideString& wsTitle,
-                          const CFX_WideString& wsDefaultAnswer,
-                          bool bMark) override;
+  WideString Response(const WideString& wsQuestion,
+                      const WideString& wsTitle,
+                      const WideString& wsDefaultAnswer,
+                      bool bMark) override;
   CFX_RetainPtr<IFX_SeekableReadStream> DownloadURL(
-      const CFX_WideString& wsURL) override;
-  bool PostRequestURL(const CFX_WideString& wsURL,
-                      const CFX_WideString& wsData,
-                      const CFX_WideString& wsContentType,
-                      const CFX_WideString& wsEncode,
-                      const CFX_WideString& wsHeader,
-                      CFX_WideString& wsResponse) override;
-  bool PutRequestURL(const CFX_WideString& wsURL,
-                     const CFX_WideString& wsData,
-                     const CFX_WideString& wsEncode) override;
+      const WideString& wsURL) override;
+  bool PostRequestURL(const WideString& wsURL,
+                      const WideString& wsData,
+                      const WideString& wsContentType,
+                      const WideString& wsEncode,
+                      const WideString& wsHeader,
+                      WideString& wsResponse) override;
+  bool PutRequestURL(const WideString& wsURL,
+                     const WideString& wsData,
+                     const WideString& wsEncode) override;
 
   IFWL_AdapterTimerMgr* GetTimerMgr() override;
 
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
index 6537925..b4dc3f1 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
@@ -379,8 +379,7 @@
   }
 }
 
-void CPDFXFA_DocEnvironment::GetTitle(CXFA_FFDoc* hDoc,
-                                      CFX_WideString& wsTitle) {
+void CPDFXFA_DocEnvironment::GetTitle(CXFA_FFDoc* hDoc, WideString& wsTitle) {
   if (hDoc != m_pContext->GetXFADoc() || !m_pContext->GetPDFDoc())
     return;
 
@@ -388,13 +387,13 @@
   if (!pInfoDict)
     return;
 
-  CFX_ByteString csTitle = pInfoDict->GetStringFor("Title");
+  ByteString csTitle = pInfoDict->GetStringFor("Title");
   wsTitle = wsTitle.FromLocal(csTitle.GetBuffer(csTitle.GetLength()));
   csTitle.ReleaseBuffer(csTitle.GetLength());
 }
 
 void CPDFXFA_DocEnvironment::SetTitle(CXFA_FFDoc* hDoc,
-                                      const CFX_WideString& wsTitle) {
+                                      const WideString& wsTitle) {
   if (hDoc != m_pContext->GetXFADoc() || !m_pContext->GetPDFDoc())
     return;
 
@@ -404,7 +403,7 @@
 }
 
 void CPDFXFA_DocEnvironment::ExportData(CXFA_FFDoc* hDoc,
-                                        const CFX_WideString& wsFilePath,
+                                        const WideString& wsFilePath,
                                         bool bXDP) {
   if (hDoc != m_pContext->GetXFADoc())
     return;
@@ -419,14 +418,14 @@
     return;
 
   int fileType = bXDP ? FXFA_SAVEAS_XDP : FXFA_SAVEAS_XML;
-  CFX_ByteString bs = wsFilePath.UTF16LE_Encode();
+  ByteString bs = wsFilePath.UTF16LE_Encode();
   if (wsFilePath.IsEmpty()) {
     if (!pFormFillEnv->GetFormFillInfo() ||
         !pFormFillEnv->GetFormFillInfo()->m_pJsPlatform) {
       return;
     }
 
-    CFX_WideString filepath = pFormFillEnv->JS_fieldBrowse();
+    WideString filepath = pFormFillEnv->JS_fieldBrowse();
     bs = filepath.UTF16LE_Encode();
   }
   int len = bs.GetLength();
@@ -439,7 +438,7 @@
 
   CFX_RetainPtr<IFX_SeekableStream> fileWrite =
       MakeSeekableStream(pFileHandler);
-  CFX_ByteString content;
+  ByteString content;
   if (fileType == FXFA_SAVEAS_XML) {
     content = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n";
     fileWrite->WriteBlock(content.c_str(), fileWrite->GetSize(),
@@ -485,10 +484,10 @@
         continue;
       }
       if (i == size - 1) {
-        CFX_WideString wPath = CFX_WideString::FromUTF16LE(
+        WideString wPath = WideString::FromUTF16LE(
             reinterpret_cast<const unsigned short*>(bs.c_str()),
             bs.GetLength() / sizeof(unsigned short));
-        CFX_ByteString bPath = wPath.UTF8Encode();
+        ByteString bPath = wPath.UTF8Encode();
         const char* szFormat =
             "\n<pdf href=\"%s\" xmlns=\"http://ns.adobe.com/xdp/pdf/\"/>";
         content.Format(szFormat, bPath.c_str());
@@ -505,7 +504,7 @@
 }
 
 void CPDFXFA_DocEnvironment::GotoURL(CXFA_FFDoc* hDoc,
-                                     const CFX_WideString& bsURL) {
+                                     const WideString& bsURL) {
   if (hDoc != m_pContext->GetXFADoc())
     return;
 
@@ -516,7 +515,7 @@
   if (!pFormFillEnv)
     return;
 
-  CFX_WideStringC str(bsURL.c_str());
+  WideStringView str(bsURL.c_str());
   pFormFillEnv->GotoURL(m_pContext.Get(), str);
 }
 
@@ -644,9 +643,9 @@
       if (!pFormFillEnv)
         return false;
 
-      CFX_WideString ws;
+      WideString ws;
       ws.FromLocal(IDS_XFA_Validate_Input);
-      CFX_ByteString bs = ws.UTF16LE_Encode();
+      ByteString bs = ws.UTF16LE_Encode();
       int len = bs.GetLength();
       pFormFillEnv->Alert((FPDF_WIDESTRING)bs.GetBuffer(len),
                           (FPDF_WIDESTRING)L"", 0, 1);
@@ -700,12 +699,12 @@
 
 CFX_RetainPtr<IFX_SeekableReadStream> CPDFXFA_DocEnvironment::OpenLinkedFile(
     CXFA_FFDoc* hDoc,
-    const CFX_WideString& wsLink) {
+    const WideString& wsLink) {
   CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pContext->GetFormFillEnv();
   if (!pFormFillEnv)
     return nullptr;
 
-  CFX_ByteString bs = wsLink.UTF16LE_Encode();
+  ByteString bs = wsLink.UTF16LE_Encode();
   int len = bs.GetLength();
   FPDF_FILEHANDLER* pFileHandler =
       pFormFillEnv->OpenFile(0, (FPDF_WIDESTRING)bs.GetBuffer(len), "rb");
@@ -723,7 +722,7 @@
   if (!m_pContext->GetXFADocView())
     return false;
 
-  CFX_ByteString content;
+  ByteString content;
   CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pContext->GetFormFillEnv();
   if (!pFormFillEnv)
     return false;
@@ -808,7 +807,7 @@
   return true;
 }
 
-void CPDFXFA_DocEnvironment::ToXFAContentFlags(CFX_WideString csSrcContent,
+void CPDFXFA_DocEnvironment::ToXFAContentFlags(WideString csSrcContent,
                                                FPDF_DWORD& flag) {
   if (csSrcContent.Contains(L" config "))
     flag |= FXFA_CONFIG;
@@ -830,19 +829,19 @@
   }
 }
 
-bool CPDFXFA_DocEnvironment::MailToInfo(CFX_WideString& csURL,
-                                        CFX_WideString& csToAddress,
-                                        CFX_WideString& csCCAddress,
-                                        CFX_WideString& csBCCAddress,
-                                        CFX_WideString& csSubject,
-                                        CFX_WideString& csMsg) {
-  CFX_WideString srcURL = csURL;
+bool CPDFXFA_DocEnvironment::MailToInfo(WideString& csURL,
+                                        WideString& csToAddress,
+                                        WideString& csCCAddress,
+                                        WideString& csBCCAddress,
+                                        WideString& csSubject,
+                                        WideString& csMsg) {
+  WideString srcURL = csURL;
   srcURL.TrimLeft();
   if (srcURL.Left(7).CompareNoCase(L"mailto:") != 0)
     return false;
 
   auto pos = srcURL.Find(L'?');
-  CFX_WideString tmp;
+  WideString tmp;
   if (!pos.has_value()) {
     pos = srcURL.Find(L'@');
     if (!pos.has_value())
@@ -903,13 +902,13 @@
   if (!pFormFillEnv)
     return false;
 
-  CFX_WideStringC csURLC;
+  WideStringView csURLC;
   submit.GetSubmitTarget(csURLC);
-  CFX_WideString csURL(csURLC);
+  WideString csURL(csURLC);
   if (csURL.IsEmpty()) {
-    CFX_WideString ws;
+    WideString ws;
     ws.FromLocal("Submit cancelled.");
-    CFX_ByteString bs = ws.UTF16LE_Encode();
+    ByteString bs = ws.UTF16LE_Encode();
     int len = bs.GetLength();
     pFormFillEnv->Alert((FPDF_WIDESTRING)bs.GetBuffer(len),
                         (FPDF_WIDESTRING)L"", 0, 4);
@@ -921,13 +920,13 @@
   int fileFlag = -1;
   switch (submit.GetSubmitFormat()) {
     case XFA_ATTRIBUTEENUM_Xdp: {
-      CFX_WideStringC csContentC;
+      WideStringView csContentC;
       submit.GetSubmitXDPContent(csContentC);
-      CFX_WideString csContent;
+      WideString csContent;
       csContent = csContentC;
       csContent.TrimLeft();
       csContent.TrimRight();
-      CFX_WideString space;
+      WideString space;
       space.FromLocal(" ");
       csContent = space + csContent + space;
       FPDF_DWORD flag = 0;
@@ -958,20 +957,20 @@
   if (!pFileHandler)
     return false;
   if (csURL.Left(7).CompareNoCase(L"mailto:") == 0) {
-    CFX_WideString csToAddress;
-    CFX_WideString csCCAddress;
-    CFX_WideString csBCCAddress;
-    CFX_WideString csSubject;
-    CFX_WideString csMsg;
+    WideString csToAddress;
+    WideString csCCAddress;
+    WideString csBCCAddress;
+    WideString csSubject;
+    WideString csMsg;
     if (!MailToInfo(csURL, csToAddress, csCCAddress, csBCCAddress, csSubject,
                     csMsg)) {
       return false;
     }
-    CFX_ByteString bsTo = CFX_WideString(csToAddress).UTF16LE_Encode();
-    CFX_ByteString bsCC = CFX_WideString(csCCAddress).UTF16LE_Encode();
-    CFX_ByteString bsBcc = CFX_WideString(csBCCAddress).UTF16LE_Encode();
-    CFX_ByteString bsSubject = CFX_WideString(csSubject).UTF16LE_Encode();
-    CFX_ByteString bsMsg = CFX_WideString(csMsg).UTF16LE_Encode();
+    ByteString bsTo = WideString(csToAddress).UTF16LE_Encode();
+    ByteString bsCC = WideString(csCCAddress).UTF16LE_Encode();
+    ByteString bsBcc = WideString(csBCCAddress).UTF16LE_Encode();
+    ByteString bsSubject = WideString(csSubject).UTF16LE_Encode();
+    ByteString bsMsg = WideString(csMsg).UTF16LE_Encode();
     FPDF_WIDESTRING pTo = (FPDF_WIDESTRING)bsTo.GetBuffer(bsTo.GetLength());
     FPDF_WIDESTRING pCC = (FPDF_WIDESTRING)bsCC.GetBuffer(bsCC.GetLength());
     FPDF_WIDESTRING pBcc = (FPDF_WIDESTRING)bsBcc.GetBuffer(bsBcc.GetLength());
@@ -986,8 +985,8 @@
     bsMsg.ReleaseBuffer(bsMsg.GetStringLength());
   } else {
     // HTTP or FTP
-    CFX_WideString ws;
-    CFX_ByteString bs = csURL.UTF16LE_Encode();
+    WideString ws;
+    ByteString bs = csURL.UTF16LE_Encode();
     int len = bs.GetLength();
     pFormFillEnv->UploadTo(pFileHandler, fileFlag,
                            (FPDF_WIDESTRING)bs.GetBuffer(len));
@@ -996,10 +995,9 @@
   return true;
 }
 
-bool CPDFXFA_DocEnvironment::SetGlobalProperty(
-    CXFA_FFDoc* hDoc,
-    const CFX_ByteStringC& szPropName,
-    CFXJSE_Value* pValue) {
+bool CPDFXFA_DocEnvironment::SetGlobalProperty(CXFA_FFDoc* hDoc,
+                                               const ByteStringView& szPropName,
+                                               CFXJSE_Value* pValue) {
   if (hDoc != m_pContext->GetXFADoc())
     return false;
   if (!m_pContext->GetFormFillEnv() ||
@@ -1013,10 +1011,9 @@
   return bRet;
 }
 
-bool CPDFXFA_DocEnvironment::GetGlobalProperty(
-    CXFA_FFDoc* hDoc,
-    const CFX_ByteStringC& szPropName,
-    CFXJSE_Value* pValue) {
+bool CPDFXFA_DocEnvironment::GetGlobalProperty(CXFA_FFDoc* hDoc,
+                                               const ByteStringView& szPropName,
+                                               CFXJSE_Value* pValue) {
   if (hDoc != m_pContext->GetXFADoc())
     return false;
   if (!m_pContext->GetFormFillEnv() ||
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h
index 90bc6de..e6a0f92 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h
@@ -49,12 +49,12 @@
   void SetCurrentPage(CXFA_FFDoc* hDoc, int32_t iCurPage) override;
   bool IsCalculationsEnabled(CXFA_FFDoc* hDoc) override;
   void SetCalculationsEnabled(CXFA_FFDoc* hDoc, bool bEnabled) override;
-  void GetTitle(CXFA_FFDoc* hDoc, CFX_WideString& wsTitle) override;
-  void SetTitle(CXFA_FFDoc* hDoc, const CFX_WideString& wsTitle) override;
+  void GetTitle(CXFA_FFDoc* hDoc, WideString& wsTitle) override;
+  void SetTitle(CXFA_FFDoc* hDoc, const WideString& wsTitle) override;
   void ExportData(CXFA_FFDoc* hDoc,
-                  const CFX_WideString& wsFilePath,
+                  const WideString& wsFilePath,
                   bool bXDP) override;
-  void GotoURL(CXFA_FFDoc* hDoc, const CFX_WideString& bsURL) override;
+  void GotoURL(CXFA_FFDoc* hDoc, const WideString& bsURL) override;
   bool IsValidationsEnabled(CXFA_FFDoc* hDoc) override;
   void SetValidationsEnabled(CXFA_FFDoc* hDoc, bool bEnabled) override;
   void SetFocusWidget(CXFA_FFDoc* hDoc, CXFA_FFWidget* hWidget) override;
@@ -79,32 +79,32 @@
   bool SubmitData(CXFA_FFDoc* hDoc, CXFA_Submit submit) override;
 
   bool GetGlobalProperty(CXFA_FFDoc* hDoc,
-                         const CFX_ByteStringC& szPropName,
+                         const ByteStringView& szPropName,
                          CFXJSE_Value* pValue) override;
   bool SetGlobalProperty(CXFA_FFDoc* hDoc,
-                         const CFX_ByteStringC& szPropName,
+                         const ByteStringView& szPropName,
                          CFXJSE_Value* pValue) override;
 
   CFX_RetainPtr<IFX_SeekableReadStream> OpenLinkedFile(
       CXFA_FFDoc* hDoc,
-      const CFX_WideString& wsLink) override;
+      const WideString& wsLink) override;
 
  private:
   bool OnBeforeNotifySubmit();
   void OnAfterNotifySubmit();
   bool NotifySubmit(bool bPrevOrPost);
   bool SubmitDataInternal(CXFA_FFDoc* hDoc, CXFA_Submit submit);
-  bool MailToInfo(CFX_WideString& csURL,
-                  CFX_WideString& csToAddress,
-                  CFX_WideString& csCCAddress,
-                  CFX_WideString& csBCCAddress,
-                  CFX_WideString& csSubject,
-                  CFX_WideString& csMsg);
+  bool MailToInfo(WideString& csURL,
+                  WideString& csToAddress,
+                  WideString& csCCAddress,
+                  WideString& csBCCAddress,
+                  WideString& csSubject,
+                  WideString& csMsg);
   bool ExportSubmitFile(FPDF_FILEHANDLER* ppFileHandler,
                         int fileType,
                         FPDF_DWORD encodeType,
                         FPDF_DWORD flag);
-  void ToXFAContentFlags(CFX_WideString csSrcContent, FPDF_DWORD& flag);
+  void ToXFAContentFlags(WideString csSrcContent, FPDF_DWORD& flag);
 
   CFX_UnownedPtr<CPDFXFA_Context> const m_pContext;
 };
diff --git a/fpdfsdk/fsdk_actionhandler.cpp b/fpdfsdk/fsdk_actionhandler.cpp
index 776a171..ea7d2c3 100644
--- a/fpdfsdk/fsdk_actionhandler.cpp
+++ b/fpdfsdk/fsdk_actionhandler.cpp
@@ -29,10 +29,10 @@
 
 bool CPDFSDK_ActionHandler::DoAction_JavaScript(
     const CPDF_Action& JsAction,
-    CFX_WideString csJSName,
+    WideString csJSName,
     CPDFSDK_FormFillEnvironment* pFormFillEnv) {
   if (JsAction.GetType() == CPDF_Action::JavaScript) {
-    CFX_WideString swJS = JsAction.GetJavaScript();
+    WideString swJS = JsAction.GetJavaScript();
     if (!swJS.IsEmpty()) {
       RunDocumentOpenJavaScript(pFormFillEnv, csJSName, swJS);
       return true;
@@ -51,7 +51,7 @@
   ASSERT(pFormFillEnv);
   if (pFormFillEnv->IsJSInitiated() &&
       JsAction.GetType() == CPDF_Action::JavaScript) {
-    CFX_WideString swJS = JsAction.GetJavaScript();
+    WideString swJS = JsAction.GetJavaScript();
     if (!swJS.IsEmpty()) {
       RunFieldJavaScript(pFormFillEnv, pFormField, type, data, swJS);
       return true;
@@ -125,7 +125,7 @@
   ASSERT(pFormFillEnv);
   if (action.GetType() == CPDF_Action::JavaScript) {
     if (pFormFillEnv->IsJSInitiated()) {
-      CFX_WideString swJS = action.GetJavaScript();
+      WideString swJS = action.GetJavaScript();
       if (!swJS.IsEmpty()) {
         RunDocumentOpenJavaScript(pFormFillEnv, L"", swJS);
       }
@@ -156,13 +156,13 @@
   ASSERT(pFormFillEnv);
   if (action.GetType() == CPDF_Action::JavaScript) {
     if (pFormFillEnv->IsJSInitiated()) {
-      CFX_WideString swJS = action.GetJavaScript();
+      WideString swJS = action.GetJavaScript();
       if (!swJS.IsEmpty()) {
         IJS_Runtime* pRuntime = pFormFillEnv->GetJSRuntime();
         IJS_EventContext* pContext = pRuntime->NewEventContext();
         pContext->OnLink_MouseUp(pFormFillEnv);
 
-        CFX_WideString csInfo;
+        WideString csInfo;
         bool bRet = pContext->RunScript(swJS, &csInfo);
         pRuntime->ReleaseEventContext(pContext);
         if (!bRet) {
@@ -197,7 +197,7 @@
   ASSERT(pFormFillEnv);
   if (action.GetType() == CPDF_Action::JavaScript) {
     if (pFormFillEnv->IsJSInitiated()) {
-      CFX_WideString swJS = action.GetJavaScript();
+      WideString swJS = action.GetJavaScript();
       if (!swJS.IsEmpty()) {
         RunDocumentPageJavaScript(pFormFillEnv, type, swJS);
       }
@@ -244,7 +244,7 @@
   ASSERT(pFormFillEnv);
   if (action.GetType() == CPDF_Action::JavaScript) {
     if (pFormFillEnv->IsJSInitiated()) {
-      CFX_WideString swJS = action.GetJavaScript();
+      WideString swJS = action.GetJavaScript();
       if (!swJS.IsEmpty()) {
         RunFieldJavaScript(pFormFillEnv, pFormField, type, data, swJS);
         if (!IsValidField(pFormFillEnv, pFormField->GetFieldDict()))
@@ -280,11 +280,11 @@
   ASSERT(pFormFillEnv);
   if (action.GetType() == CPDF_Action::JavaScript) {
     if (pFormFillEnv->IsJSInitiated()) {
-      CFX_WideString swJS = action.GetJavaScript();
+      WideString swJS = action.GetJavaScript();
       if (!swJS.IsEmpty()) {
         IJS_Runtime* pRuntime = pFormFillEnv->GetJSRuntime();
         IJS_EventContext* pContext = pRuntime->NewEventContext();
-        CFX_WideString csInfo;
+        WideString csInfo;
         bool bRet = pContext->RunScript(swJS, &csInfo);
         pRuntime->ReleaseEventContext(pContext);
         if (!bRet) {
@@ -319,13 +319,13 @@
   ASSERT(pFormFillEnv);
   if (action.GetType() == CPDF_Action::JavaScript) {
     if (pFormFillEnv->IsJSInitiated()) {
-      CFX_WideString swJS = action.GetJavaScript();
+      WideString swJS = action.GetJavaScript();
       if (!swJS.IsEmpty()) {
         IJS_Runtime* pRuntime = pFormFillEnv->GetJSRuntime();
         IJS_EventContext* pContext = pRuntime->NewEventContext();
         pContext->OnBookmark_MouseUp(pBookmark);
 
-        CFX_WideString csInfo;
+        WideString csInfo;
         bool bRet = pContext->RunScript(swJS, &csInfo);
         pRuntime->ReleaseEventContext(pContext);
         if (!bRet) {
@@ -444,7 +444,7 @@
     const CPDF_Action& action) {
   ASSERT(action.GetDict());
 
-  CFX_ByteString sURI = action.GetURI(pFormFillEnv->GetPDFDocument());
+  ByteString sURI = action.GetURI(pFormFillEnv->GetPDFDocument());
   pFormFillEnv->DoURIAction(sURI.c_str());
 }
 
@@ -453,7 +453,7 @@
     const CPDF_Action& action) {
   ASSERT(action.GetDict());
 
-  CFX_ByteString csName = action.GetNamedAction();
+  ByteString csName = action.GetNamedAction();
   pFormFillEnv->ExecuteNamedAction(csName.c_str());
 }
 
@@ -466,7 +466,7 @@
     CPDF_FormField* pFormField,
     CPDF_AAction::AActionType type,
     PDFSDK_FieldAction& data,
-    const CFX_WideString& script) {
+    const WideString& script) {
   ASSERT(type != CPDF_AAction::Calculate);
   ASSERT(type != CPDF_AAction::Format);
 
@@ -509,7 +509,7 @@
       break;
   }
 
-  CFX_WideString csInfo;
+  WideString csInfo;
   bool bRet = pContext->RunScript(script, &csInfo);
   pRuntime->ReleaseEventContext(pContext);
   if (!bRet) {
@@ -519,13 +519,13 @@
 
 void CPDFSDK_ActionHandler::RunDocumentOpenJavaScript(
     CPDFSDK_FormFillEnvironment* pFormFillEnv,
-    const CFX_WideString& sScriptName,
-    const CFX_WideString& script) {
+    const WideString& sScriptName,
+    const WideString& script) {
   IJS_Runtime* pRuntime = pFormFillEnv->GetJSRuntime();
   IJS_EventContext* pContext = pRuntime->NewEventContext();
   pContext->OnDoc_Open(pFormFillEnv, sScriptName);
 
-  CFX_WideString csInfo;
+  WideString csInfo;
   bool bRet = pContext->RunScript(script, &csInfo);
   pRuntime->ReleaseEventContext(pContext);
   if (!bRet) {
@@ -536,7 +536,7 @@
 void CPDFSDK_ActionHandler::RunDocumentPageJavaScript(
     CPDFSDK_FormFillEnvironment* pFormFillEnv,
     CPDF_AAction::AActionType type,
-    const CFX_WideString& script) {
+    const WideString& script) {
   IJS_Runtime* pRuntime = pFormFillEnv->GetJSRuntime();
   IJS_EventContext* pContext = pRuntime->NewEventContext();
   switch (type) {
@@ -572,7 +572,7 @@
       break;
   }
 
-  CFX_WideString csInfo;
+  WideString csInfo;
   bool bRet = pContext->RunScript(script, &csInfo);
   pRuntime->ReleaseEventContext(pContext);
   if (!bRet) {
diff --git a/fpdfsdk/fsdk_actionhandler.h b/fpdfsdk/fsdk_actionhandler.h
index 1c8dede..7457b4e 100644
--- a/fpdfsdk/fsdk_actionhandler.h
+++ b/fpdfsdk/fsdk_actionhandler.h
@@ -26,7 +26,7 @@
   bool DoAction_DocOpen(const CPDF_Action& action,
                         CPDFSDK_FormFillEnvironment* pFormFillEnv);
   bool DoAction_JavaScript(const CPDF_Action& JsAction,
-                           CFX_WideString csJSName,
+                           WideString csJSName,
                            CPDFSDK_FormFillEnvironment* pFormFillEnv);
   bool DoAction_Page(const CPDF_Action& action,
                      enum CPDF_AAction::AActionType eType,
@@ -86,15 +86,15 @@
                      CPDFSDK_FormFillEnvironment* pFormFillEnv);
   void RunDocumentPageJavaScript(CPDFSDK_FormFillEnvironment* pFormFillEnv,
                                  CPDF_AAction::AActionType type,
-                                 const CFX_WideString& script);
+                                 const WideString& script);
   void RunDocumentOpenJavaScript(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                                 const CFX_WideString& sScriptName,
-                                 const CFX_WideString& script);
+                                 const WideString& sScriptName,
+                                 const WideString& script);
   void RunFieldJavaScript(CPDFSDK_FormFillEnvironment* pFormFillEnv,
                           CPDF_FormField* pFormField,
                           CPDF_AAction::AActionType type,
                           PDFSDK_FieldAction& data,
-                          const CFX_WideString& script);
+                          const WideString& script);
 
   bool IsValidField(CPDFSDK_FormFillEnvironment* pFormFillEnv,
                     CPDF_Dictionary* pFieldDict);
diff --git a/fpdfsdk/fsdk_define.h b/fpdfsdk/fsdk_define.h
index 91efc27..e58ddb1 100644
--- a/fpdfsdk/fsdk_define.h
+++ b/fpdfsdk/fsdk_define.h
@@ -70,11 +70,11 @@
 
 CPDF_Object* CPDFObjectFromFPDFAttachment(FPDF_ATTACHMENT attachment);
 
-CFX_ByteString CFXByteStringFromFPDFWideString(FPDF_WIDESTRING wide_string);
+ByteString CFXByteStringFromFPDFWideString(FPDF_WIDESTRING wide_string);
 
 CFX_DIBitmap* CFXBitmapFromFPDFBitmap(FPDF_BITMAP bitmap);
 
-unsigned long Utf16EncodeMaybeCopyAndReturnLength(const CFX_WideString& text,
+unsigned long Utf16EncodeMaybeCopyAndReturnLength(const WideString& text,
                                                   void* buffer,
                                                   unsigned long buflen);
 
diff --git a/fpdfsdk/fsdk_filewriteadapter.cpp b/fpdfsdk/fsdk_filewriteadapter.cpp
index 50394c3..fad058f 100644
--- a/fpdfsdk/fsdk_filewriteadapter.cpp
+++ b/fpdfsdk/fsdk_filewriteadapter.cpp
@@ -17,6 +17,6 @@
   return fileWriteStruct_->WriteBlock(fileWriteStruct_, data, size) != 0;
 }
 
-bool FSDK_FileWriteAdapter::WriteString(const CFX_ByteStringC& str) {
+bool FSDK_FileWriteAdapter::WriteString(const ByteStringView& str) {
   return WriteBlock(str.unterminated_c_str(), str.GetLength());
 }
diff --git a/fpdfsdk/fsdk_filewriteadapter.h b/fpdfsdk/fsdk_filewriteadapter.h
index f2c3a53..5e9eaab 100644
--- a/fpdfsdk/fsdk_filewriteadapter.h
+++ b/fpdfsdk/fsdk_filewriteadapter.h
@@ -17,7 +17,7 @@
   friend CFX_RetainPtr<T> pdfium::MakeRetain(Args&&... args);
 
   bool WriteBlock(const void* data, size_t size) override;
-  bool WriteString(const CFX_ByteStringC& str) override;
+  bool WriteString(const ByteStringView& str) override;
 
  private:
   explicit FSDK_FileWriteAdapter(FPDF_FILEWRITE* fileWriteStruct);
diff --git a/fpdfsdk/ipdfsdk_annothandler.h b/fpdfsdk/ipdfsdk_annothandler.h
index b7f7cbe..bffeac6 100644
--- a/fpdfsdk/ipdfsdk_annothandler.h
+++ b/fpdfsdk/ipdfsdk_annothandler.h
@@ -35,9 +35,9 @@
   virtual void ReleaseAnnot(CPDFSDK_Annot* pAnnot) = 0;
   virtual CFX_FloatRect GetViewBBox(CPDFSDK_PageView* pPageView,
                                     CPDFSDK_Annot* pAnnot) = 0;
-  virtual CFX_WideString GetSelectedText(CPDFSDK_Annot* pAnnot) = 0;
+  virtual WideString GetSelectedText(CPDFSDK_Annot* pAnnot) = 0;
   virtual void ReplaceSelection(CPDFSDK_Annot* pAnnot,
-                                const CFX_WideString& text) = 0;
+                                const WideString& text) = 0;
   virtual bool HitTest(CPDFSDK_PageView* pPageView,
                        CPDFSDK_Annot* pAnnot,
                        const CFX_PointF& point) = 0;
diff --git a/fpdfsdk/javascript/Annot.cpp b/fpdfsdk/javascript/Annot.cpp
index 41c71ec..9cc5d0f 100644
--- a/fpdfsdk/javascript/Annot.cpp
+++ b/fpdfsdk/javascript/Annot.cpp
@@ -37,7 +37,7 @@
 
 bool Annot::hidden(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
-                   CFX_WideString& sError) {
+                   WideString& sError) {
   if (vp.IsGetting()) {
     if (!m_pAnnot) {
       sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
@@ -71,9 +71,7 @@
   return true;
 }
 
-bool Annot::name(CJS_Runtime* pRuntime,
-                 CJS_PropValue& vp,
-                 CFX_WideString& sError) {
+bool Annot::name(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError) {
   if (vp.IsGetting()) {
     if (!m_pAnnot) {
       sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
@@ -83,7 +81,7 @@
     return true;
   }
 
-  CFX_WideString annotName;
+  WideString annotName;
   vp >> annotName;  // May invalidate m_pAnnot.
   if (!m_pAnnot) {
     sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
@@ -94,9 +92,7 @@
   return true;
 }
 
-bool Annot::type(CJS_Runtime* pRuntime,
-                 CJS_PropValue& vp,
-                 CFX_WideString& sError) {
+bool Annot::type(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError) {
   if (vp.IsSetting()) {
     sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
     return false;
diff --git a/fpdfsdk/javascript/Annot.h b/fpdfsdk/javascript/Annot.h
index d9757fa..d70f96a 100644
--- a/fpdfsdk/javascript/Annot.h
+++ b/fpdfsdk/javascript/Annot.h
@@ -17,9 +17,9 @@
   explicit Annot(CJS_Object* pJSObject);
   ~Annot() override;
 
-  bool hidden(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool name(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool type(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool hidden(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool name(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool type(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
 
   void SetSDKAnnot(CPDFSDK_BAAnnot* annot);
 
diff --git a/fpdfsdk/javascript/Document.cpp b/fpdfsdk/javascript/Document.cpp
index 77f67b5..0c611c1 100644
--- a/fpdfsdk/javascript/Document.cpp
+++ b/fpdfsdk/javascript/Document.cpp
@@ -164,7 +164,7 @@
 // the total number of fileds in document.
 bool Document::numFields(CJS_Runtime* pRuntime,
                          CJS_PropValue& vp,
-                         CFX_WideString& sError) {
+                         WideString& sError) {
   if (vp.IsSetting()) {
     sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
     return false;
@@ -175,13 +175,13 @@
   }
   CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
   CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
-  vp << static_cast<int>(pPDFForm->CountFields(CFX_WideString()));
+  vp << static_cast<int>(pPDFForm->CountFields(WideString()));
   return true;
 }
 
 bool Document::dirty(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
-                     CFX_WideString& sError) {
+                     WideString& sError) {
   if (!m_pFormFillEnv) {
     sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
     return false;
@@ -202,7 +202,7 @@
 
 bool Document::ADBE(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
-                    CFX_WideString& sError) {
+                    WideString& sError) {
   if (vp.IsGetting())
     vp.GetJSValue()->SetNull(pRuntime);
 
@@ -211,7 +211,7 @@
 
 bool Document::pageNum(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
-                       CFX_WideString& sError) {
+                       WideString& sError) {
   if (!m_pFormFillEnv) {
     sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
     return false;
@@ -237,7 +237,7 @@
 bool Document::addAnnot(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
-                        CFX_WideString& sError) {
+                        WideString& sError) {
   // Not supported.
   return true;
 }
@@ -245,7 +245,7 @@
 bool Document::addField(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
-                        CFX_WideString& sError) {
+                        WideString& sError) {
   // Not supported.
   return true;
 }
@@ -253,7 +253,7 @@
 bool Document::exportAsText(CJS_Runtime* pRuntime,
                             const std::vector<CJS_Value>& params,
                             CJS_Value& vRet,
-                            CFX_WideString& sError) {
+                            WideString& sError) {
   // Unsafe, not supported.
   return true;
 }
@@ -261,7 +261,7 @@
 bool Document::exportAsFDF(CJS_Runtime* pRuntime,
                            const std::vector<CJS_Value>& params,
                            CJS_Value& vRet,
-                           CFX_WideString& sError) {
+                           WideString& sError) {
   // Unsafe, not supported.
   return true;
 }
@@ -269,7 +269,7 @@
 bool Document::exportAsXFDF(CJS_Runtime* pRuntime,
                             const std::vector<CJS_Value>& params,
                             CJS_Value& vRet,
-                            CFX_WideString& sError) {
+                            WideString& sError) {
   // Unsafe, not supported.
   return true;
 }
@@ -277,7 +277,7 @@
 bool Document::getField(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
-                        CFX_WideString& sError) {
+                        WideString& sError) {
   if (params.size() < 1) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
@@ -286,7 +286,7 @@
     sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
     return false;
   }
-  CFX_WideString wideName = params[0].ToCFXWideString(pRuntime);
+  WideString wideName = params[0].ToCFXWideString(pRuntime);
   CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
   CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
   if (pPDFForm->CountFields(wideName) <= 0) {
@@ -311,7 +311,7 @@
 bool Document::getNthFieldName(CJS_Runtime* pRuntime,
                                const std::vector<CJS_Value>& params,
                                CJS_Value& vRet,
-                               CFX_WideString& sError) {
+                               WideString& sError) {
   if (params.size() != 1) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
@@ -327,7 +327,7 @@
   }
   CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
   CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
-  CPDF_FormField* pField = pPDFForm->GetField(nIndex, CFX_WideString());
+  CPDF_FormField* pField = pPDFForm->GetField(nIndex, WideString());
   if (!pField)
     return false;
 
@@ -338,7 +338,7 @@
 bool Document::importAnFDF(CJS_Runtime* pRuntime,
                            const std::vector<CJS_Value>& params,
                            CJS_Value& vRet,
-                           CFX_WideString& sError) {
+                           WideString& sError) {
   // Unsafe, not supported.
   return true;
 }
@@ -346,7 +346,7 @@
 bool Document::importAnXFDF(CJS_Runtime* pRuntime,
                             const std::vector<CJS_Value>& params,
                             CJS_Value& vRet,
-                            CFX_WideString& sError) {
+                            WideString& sError) {
   // Unsafe, not supported.
   return true;
 }
@@ -354,7 +354,7 @@
 bool Document::importTextData(CJS_Runtime* pRuntime,
                               const std::vector<CJS_Value>& params,
                               CJS_Value& vRet,
-                              CFX_WideString& sError) {
+                              WideString& sError) {
   // Unsafe, not supported.
   return true;
 }
@@ -365,7 +365,7 @@
 bool Document::mailForm(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
-                        CFX_WideString& sError) {
+                        WideString& sError) {
   if (!m_pFormFillEnv) {
     sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
     return false;
@@ -376,14 +376,13 @@
   }
   int iLength = params.size();
   bool bUI = iLength > 0 ? params[0].ToBool(pRuntime) : true;
-  CFX_WideString cTo = iLength > 1 ? params[1].ToCFXWideString(pRuntime) : L"";
-  CFX_WideString cCc = iLength > 2 ? params[2].ToCFXWideString(pRuntime) : L"";
-  CFX_WideString cBcc = iLength > 3 ? params[3].ToCFXWideString(pRuntime) : L"";
-  CFX_WideString cSubject =
-      iLength > 4 ? params[4].ToCFXWideString(pRuntime) : L"";
-  CFX_WideString cMsg = iLength > 5 ? params[5].ToCFXWideString(pRuntime) : L"";
+  WideString cTo = iLength > 1 ? params[1].ToCFXWideString(pRuntime) : L"";
+  WideString cCc = iLength > 2 ? params[2].ToCFXWideString(pRuntime) : L"";
+  WideString cBcc = iLength > 3 ? params[3].ToCFXWideString(pRuntime) : L"";
+  WideString cSubject = iLength > 4 ? params[4].ToCFXWideString(pRuntime) : L"";
+  WideString cMsg = iLength > 5 ? params[5].ToCFXWideString(pRuntime) : L"";
   CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
-  CFX_ByteString sTextBuf = pInterForm->ExportFormToFDFTextBuf();
+  ByteString sTextBuf = pInterForm->ExportFormToFDFTextBuf();
   if (sTextBuf.GetLength() == 0)
     return false;
 
@@ -404,7 +403,7 @@
 bool Document::print(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
-                     CFX_WideString& sError) {
+                     WideString& sError) {
   if (!m_pFormFillEnv) {
     sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
     return false;
@@ -472,7 +471,7 @@
 bool Document::removeField(CJS_Runtime* pRuntime,
                            const std::vector<CJS_Value>& params,
                            CJS_Value& vRet,
-                           CFX_WideString& sError) {
+                           WideString& sError) {
   if (params.size() != 1) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
@@ -486,7 +485,7 @@
     sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
     return false;
   }
-  CFX_WideString sFieldName = params[0].ToCFXWideString(pRuntime);
+  WideString sFieldName = params[0].ToCFXWideString(pRuntime);
   CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
   std::vector<CPDFSDK_Annot::ObservedPtr> widgets;
   pInterForm->GetWidgets(sFieldName, &widgets);
@@ -531,7 +530,7 @@
 bool Document::resetForm(CJS_Runtime* pRuntime,
                          const std::vector<CJS_Value>& params,
                          CJS_Value& vRet,
-                         CFX_WideString& sError) {
+                         WideString& sError) {
   if (!m_pFormFillEnv) {
     sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
     return false;
@@ -566,7 +565,7 @@
   for (int i = 0, isz = aName.GetLength(pRuntime); i < isz; ++i) {
     CJS_Value valElement(pRuntime);
     aName.GetElement(pRuntime, i, valElement);
-    CFX_WideString swVal = valElement.ToCFXWideString(pRuntime);
+    WideString swVal = valElement.ToCFXWideString(pRuntime);
     for (int j = 0, jsz = pPDFForm->CountFields(swVal); j < jsz; ++j)
       aFields.push_back(pPDFForm->GetField(j, swVal));
   }
@@ -582,7 +581,7 @@
 bool Document::saveAs(CJS_Runtime* pRuntime,
                       const std::vector<CJS_Value>& params,
                       CJS_Value& vRet,
-                      CFX_WideString& sError) {
+                      WideString& sError) {
   // Unsafe, not supported.
   return true;
 }
@@ -590,14 +589,14 @@
 bool Document::syncAnnotScan(CJS_Runtime* pRuntime,
                              const std::vector<CJS_Value>& params,
                              CJS_Value& vRet,
-                             CFX_WideString& sError) {
+                             WideString& sError) {
   return true;
 }
 
 bool Document::submitForm(CJS_Runtime* pRuntime,
                           const std::vector<CJS_Value>& params,
                           CJS_Value& vRet,
-                          CFX_WideString& sError) {
+                          WideString& sError) {
   int nSize = params.size();
   if (nSize < 1) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
@@ -609,7 +608,7 @@
   }
 
   CJS_Array aFields;
-  CFX_WideString strURL;
+  WideString strURL;
   bool bFDF = true;
   bool bEmpty = false;
   CJS_Value v = params[0];
@@ -653,7 +652,7 @@
     CJS_Value valName(pRuntime);
     aFields.GetElement(pRuntime, i, valName);
 
-    CFX_WideString sName = valName.ToCFXWideString(pRuntime);
+    WideString sName = valName.ToCFXWideString(pRuntime);
     CPDF_InterForm* pPDFForm = pInterForm->GetInterForm();
     for (int j = 0, jsz = pPDFForm->CountFields(sName); j < jsz; ++j) {
       CPDF_FormField* pField = pPDFForm->GetField(j, sName);
@@ -678,21 +677,21 @@
 
 bool Document::bookmarkRoot(CJS_Runtime* pRuntime,
                             CJS_PropValue& vp,
-                            CFX_WideString& sError) {
+                            WideString& sError) {
   return true;
 }
 
 bool Document::mailDoc(CJS_Runtime* pRuntime,
                        const std::vector<CJS_Value>& params,
                        CJS_Value& vRet,
-                       CFX_WideString& sError) {
+                       WideString& sError) {
   // TODO(tsepez): Check maximum number of allowed params.
   bool bUI = true;
-  CFX_WideString cTo = L"";
-  CFX_WideString cCc = L"";
-  CFX_WideString cBcc = L"";
-  CFX_WideString cSubject = L"";
-  CFX_WideString cMsg = L"";
+  WideString cTo = L"";
+  WideString cCc = L"";
+  WideString cBcc = L"";
+  WideString cSubject = L"";
+  WideString cMsg = L"";
 
   if (params.size() >= 1)
     bUI = params[0].ToBool(pRuntime);
@@ -739,13 +738,13 @@
 
 bool Document::author(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
-                      CFX_WideString& sError) {
+                      WideString& sError) {
   return getPropertyInternal(pRuntime, vp, "Author", sError);
 }
 
 bool Document::info(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
-                    CFX_WideString& sError) {
+                    WideString& sError) {
   if (vp.IsSetting()) {
     sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
     return false;
@@ -758,46 +757,46 @@
   if (!pDictionary)
     return false;
 
-  CFX_WideString cwAuthor = pDictionary->GetUnicodeTextFor("Author");
-  CFX_WideString cwTitle = pDictionary->GetUnicodeTextFor("Title");
-  CFX_WideString cwSubject = pDictionary->GetUnicodeTextFor("Subject");
-  CFX_WideString cwKeywords = pDictionary->GetUnicodeTextFor("Keywords");
-  CFX_WideString cwCreator = pDictionary->GetUnicodeTextFor("Creator");
-  CFX_WideString cwProducer = pDictionary->GetUnicodeTextFor("Producer");
-  CFX_WideString cwCreationDate =
-      pDictionary->GetUnicodeTextFor("CreationDate");
-  CFX_WideString cwModDate = pDictionary->GetUnicodeTextFor("ModDate");
-  CFX_WideString cwTrapped = pDictionary->GetUnicodeTextFor("Trapped");
+  WideString cwAuthor = pDictionary->GetUnicodeTextFor("Author");
+  WideString cwTitle = pDictionary->GetUnicodeTextFor("Title");
+  WideString cwSubject = pDictionary->GetUnicodeTextFor("Subject");
+  WideString cwKeywords = pDictionary->GetUnicodeTextFor("Keywords");
+  WideString cwCreator = pDictionary->GetUnicodeTextFor("Creator");
+  WideString cwProducer = pDictionary->GetUnicodeTextFor("Producer");
+  WideString cwCreationDate = pDictionary->GetUnicodeTextFor("CreationDate");
+  WideString cwModDate = pDictionary->GetUnicodeTextFor("ModDate");
+  WideString cwTrapped = pDictionary->GetUnicodeTextFor("Trapped");
 
   v8::Local<v8::Object> pObj = pRuntime->NewFxDynamicObj(-1);
   pRuntime->PutObjectProperty(pObj, L"Author",
-                              pRuntime->NewString(cwAuthor.AsStringC()));
+                              pRuntime->NewString(cwAuthor.AsStringView()));
   pRuntime->PutObjectProperty(pObj, L"Title",
-                              pRuntime->NewString(cwTitle.AsStringC()));
+                              pRuntime->NewString(cwTitle.AsStringView()));
   pRuntime->PutObjectProperty(pObj, L"Subject",
-                              pRuntime->NewString(cwSubject.AsStringC()));
+                              pRuntime->NewString(cwSubject.AsStringView()));
   pRuntime->PutObjectProperty(pObj, L"Keywords",
-                              pRuntime->NewString(cwKeywords.AsStringC()));
+                              pRuntime->NewString(cwKeywords.AsStringView()));
   pRuntime->PutObjectProperty(pObj, L"Creator",
-                              pRuntime->NewString(cwCreator.AsStringC()));
+                              pRuntime->NewString(cwCreator.AsStringView()));
   pRuntime->PutObjectProperty(pObj, L"Producer",
-                              pRuntime->NewString(cwProducer.AsStringC()));
-  pRuntime->PutObjectProperty(pObj, L"CreationDate",
-                              pRuntime->NewString(cwCreationDate.AsStringC()));
+                              pRuntime->NewString(cwProducer.AsStringView()));
+  pRuntime->PutObjectProperty(
+      pObj, L"CreationDate",
+      pRuntime->NewString(cwCreationDate.AsStringView()));
   pRuntime->PutObjectProperty(pObj, L"ModDate",
-                              pRuntime->NewString(cwModDate.AsStringC()));
+                              pRuntime->NewString(cwModDate.AsStringView()));
   pRuntime->PutObjectProperty(pObj, L"Trapped",
-                              pRuntime->NewString(cwTrapped.AsStringC()));
+                              pRuntime->NewString(cwTrapped.AsStringView()));
 
   // It's to be compatible to non-standard info dictionary.
   for (const auto& it : *pDictionary) {
-    const CFX_ByteString& bsKey = it.first;
+    const ByteString& bsKey = it.first;
     CPDF_Object* pValueObj = it.second.get();
-    CFX_WideString wsKey = CFX_WideString::FromUTF8(bsKey.AsStringC());
+    WideString wsKey = WideString::FromUTF8(bsKey.AsStringView());
     if (pValueObj->IsString() || pValueObj->IsName()) {
       pRuntime->PutObjectProperty(
           pObj, wsKey,
-          pRuntime->NewString(pValueObj->GetUnicodeText().AsStringC()));
+          pRuntime->NewString(pValueObj->GetUnicodeText().AsStringView()));
     } else if (pValueObj->IsNumber()) {
       pRuntime->PutObjectProperty(pObj, wsKey,
                                   pRuntime->NewNumber(pValueObj->GetNumber()));
@@ -812,8 +811,8 @@
 
 bool Document::getPropertyInternal(CJS_Runtime* pRuntime,
                                    CJS_PropValue& vp,
-                                   const CFX_ByteString& propName,
-                                   CFX_WideString& sError) {
+                                   const ByteString& propName,
+                                   WideString& sError) {
   if (!m_pFormFillEnv) {
     sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
     return false;
@@ -829,7 +828,7 @@
       sError = JSGetStringFromID(IDS_STRING_JSNOPERMISSION);
       return false;
     }
-    CFX_WideString csProperty;
+    WideString csProperty;
     vp >> csProperty;
     pDictionary->SetNewFor<CPDF_String>(propName, PDF_EncodeText(csProperty),
                                         false);
@@ -840,19 +839,19 @@
 
 bool Document::creationDate(CJS_Runtime* pRuntime,
                             CJS_PropValue& vp,
-                            CFX_WideString& sError) {
+                            WideString& sError) {
   return getPropertyInternal(pRuntime, vp, "CreationDate", sError);
 }
 
 bool Document::creator(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
-                       CFX_WideString& sError) {
+                       WideString& sError) {
   return getPropertyInternal(pRuntime, vp, "Creator", sError);
 }
 
 bool Document::delay(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
-                     CFX_WideString& sError) {
+                     WideString& sError) {
   if (!m_pFormFillEnv) {
     sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
     return false;
@@ -880,31 +879,31 @@
 
 bool Document::keywords(CJS_Runtime* pRuntime,
                         CJS_PropValue& vp,
-                        CFX_WideString& sError) {
+                        WideString& sError) {
   return getPropertyInternal(pRuntime, vp, "Keywords", sError);
 }
 
 bool Document::modDate(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
-                       CFX_WideString& sError) {
+                       WideString& sError) {
   return getPropertyInternal(pRuntime, vp, "ModDate", sError);
 }
 
 bool Document::producer(CJS_Runtime* pRuntime,
                         CJS_PropValue& vp,
-                        CFX_WideString& sError) {
+                        WideString& sError) {
   return getPropertyInternal(pRuntime, vp, "Producer", sError);
 }
 
 bool Document::subject(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
-                       CFX_WideString& sError) {
+                       WideString& sError) {
   return getPropertyInternal(pRuntime, vp, "Subject", sError);
 }
 
 bool Document::title(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
-                     CFX_WideString& sError) {
+                     WideString& sError) {
   if (!m_pFormFillEnv || !m_pFormFillEnv->GetUnderlyingDocument()) {
     sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
     return false;
@@ -914,7 +913,7 @@
 
 bool Document::numPages(CJS_Runtime* pRuntime,
                         CJS_PropValue& vp,
-                        CFX_WideString& sError) {
+                        WideString& sError) {
   if (vp.IsSetting()) {
     sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
     return false;
@@ -929,7 +928,7 @@
 
 bool Document::external(CJS_Runtime* pRuntime,
                         CJS_PropValue& vp,
-                        CFX_WideString& sError) {
+                        WideString& sError) {
   // In Chrome case, should always return true.
   if (vp.IsGetting()) {
     vp << true;
@@ -939,7 +938,7 @@
 
 bool Document::filesize(CJS_Runtime* pRuntime,
                         CJS_PropValue& vp,
-                        CFX_WideString& sError) {
+                        WideString& sError) {
   if (vp.IsSetting()) {
     sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
     return false;
@@ -950,19 +949,19 @@
 
 bool Document::mouseX(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
-                      CFX_WideString& sError) {
+                      WideString& sError) {
   return true;
 }
 
 bool Document::mouseY(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
-                      CFX_WideString& sError) {
+                      WideString& sError) {
   return true;
 }
 
 bool Document::URL(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
-                   CFX_WideString& sError) {
+                   WideString& sError) {
   if (vp.IsSetting()) {
     sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
     return false;
@@ -977,7 +976,7 @@
 
 bool Document::baseURL(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
-                       CFX_WideString& sError) {
+                       WideString& sError) {
   if (vp.IsGetting()) {
     vp << m_cwBaseURL;
   } else {
@@ -988,7 +987,7 @@
 
 bool Document::calculate(CJS_Runtime* pRuntime,
                          CJS_PropValue& vp,
-                         CFX_WideString& sError) {
+                         WideString& sError) {
   if (!m_pFormFillEnv) {
     sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
     return false;
@@ -1006,7 +1005,7 @@
 
 bool Document::documentFileName(CJS_Runtime* pRuntime,
                                 CJS_PropValue& vp,
-                                CFX_WideString& sError) {
+                                WideString& sError) {
   if (vp.IsSetting()) {
     sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
     return false;
@@ -1015,7 +1014,7 @@
     sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
     return false;
   }
-  CFX_WideString wsFilePath = m_pFormFillEnv->JS_docGetFilePath();
+  WideString wsFilePath = m_pFormFillEnv->JS_docGetFilePath();
   FX_STRSIZE i = wsFilePath.GetLength();
   for (; i > 0; i--) {
     if (wsFilePath[i - 1] == L'\\' || wsFilePath[i - 1] == L'/')
@@ -1032,7 +1031,7 @@
 
 bool Document::path(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
-                    CFX_WideString& sError) {
+                    WideString& sError) {
   if (vp.IsSetting()) {
     sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
     return false;
@@ -1047,41 +1046,41 @@
 
 bool Document::pageWindowRect(CJS_Runtime* pRuntime,
                               CJS_PropValue& vp,
-                              CFX_WideString& sError) {
+                              WideString& sError) {
   return true;
 }
 
 bool Document::layout(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
-                      CFX_WideString& sError) {
+                      WideString& sError) {
   return true;
 }
 
 bool Document::addLink(CJS_Runtime* pRuntime,
                        const std::vector<CJS_Value>& params,
                        CJS_Value& vRet,
-                       CFX_WideString& sError) {
+                       WideString& sError) {
   return true;
 }
 
 bool Document::closeDoc(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
-                        CFX_WideString& sError) {
+                        WideString& sError) {
   return true;
 }
 
 bool Document::getPageBox(CJS_Runtime* pRuntime,
                           const std::vector<CJS_Value>& params,
                           CJS_Value& vRet,
-                          CFX_WideString& sError) {
+                          WideString& sError) {
   return true;
 }
 
 bool Document::getAnnot(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
-                        CFX_WideString& sError) {
+                        WideString& sError) {
   if (params.size() != 2) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
@@ -1091,7 +1090,7 @@
     return false;
   }
   int nPageNo = params[0].ToInt(pRuntime);
-  CFX_WideString swAnnotName = params[1].ToCFXWideString(pRuntime);
+  WideString swAnnotName = params[1].ToCFXWideString(pRuntime);
   CPDFSDK_PageView* pPageView = m_pFormFillEnv->GetPageView(nPageNo);
   if (!pPageView)
     return false;
@@ -1125,7 +1124,7 @@
 bool Document::getAnnots(CJS_Runtime* pRuntime,
                          const std::vector<CJS_Value>& params,
                          CJS_Value& vRet,
-                         CFX_WideString& sError) {
+                         WideString& sError) {
   if (!m_pFormFillEnv) {
     sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
     return false;
@@ -1166,7 +1165,7 @@
 bool Document::getAnnot3D(CJS_Runtime* pRuntime,
                           const std::vector<CJS_Value>& params,
                           CJS_Value& vRet,
-                          CFX_WideString& sError) {
+                          WideString& sError) {
   vRet.SetNull(pRuntime);
   return true;
 }
@@ -1174,21 +1173,21 @@
 bool Document::getAnnots3D(CJS_Runtime* pRuntime,
                            const std::vector<CJS_Value>& params,
                            CJS_Value& vRet,
-                           CFX_WideString& sError) {
+                           WideString& sError) {
   return true;
 }
 
 bool Document::getOCGs(CJS_Runtime* pRuntime,
                        const std::vector<CJS_Value>& params,
                        CJS_Value& vRet,
-                       CFX_WideString& sError) {
+                       WideString& sError) {
   return true;
 }
 
 bool Document::getLinks(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
-                        CFX_WideString& sError) {
+                        WideString& sError) {
   return true;
 }
 
@@ -1200,13 +1199,13 @@
 bool Document::addIcon(CJS_Runtime* pRuntime,
                        const std::vector<CJS_Value>& params,
                        CJS_Value& vRet,
-                       CFX_WideString& sError) {
+                       WideString& sError) {
   if (params.size() != 2) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
   }
 
-  CFX_WideString swIconName = params[0].ToCFXWideString(pRuntime);
+  WideString swIconName = params[0].ToCFXWideString(pRuntime);
   if (params[1].GetType() != CJS_Value::VT_object) {
     sError = JSGetStringFromID(IDS_STRING_JSTYPEERROR);
     return false;
@@ -1229,7 +1228,7 @@
 
 bool Document::icons(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
-                     CFX_WideString& sError) {
+                     WideString& sError) {
   if (vp.IsSetting()) {
     sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
     return false;
@@ -1261,13 +1260,13 @@
 bool Document::getIcon(CJS_Runtime* pRuntime,
                        const std::vector<CJS_Value>& params,
                        CJS_Value& vRet,
-                       CFX_WideString& sError) {
+                       WideString& sError) {
   if (params.size() != 1) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
   }
 
-  CFX_WideString swIconName = params[0].ToCFXWideString(pRuntime);
+  WideString swIconName = params[0].ToCFXWideString(pRuntime);
   auto it = std::find(m_IconNames.begin(), m_IconNames.end(), swIconName);
   if (it == m_IconNames.end())
     return false;
@@ -1287,7 +1286,7 @@
 bool Document::removeIcon(CJS_Runtime* pRuntime,
                           const std::vector<CJS_Value>& params,
                           CJS_Value& vRet,
-                          CFX_WideString& sError) {
+                          WideString& sError) {
   // Unsafe, no supported.
   return true;
 }
@@ -1295,21 +1294,21 @@
 bool Document::createDataObject(CJS_Runtime* pRuntime,
                                 const std::vector<CJS_Value>& params,
                                 CJS_Value& vRet,
-                                CFX_WideString& sError) {
+                                WideString& sError) {
   // Unsafe, not implemented.
   return true;
 }
 
 bool Document::media(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
-                     CFX_WideString& sError) {
+                     WideString& sError) {
   return true;
 }
 
 bool Document::calculateNow(CJS_Runtime* pRuntime,
                             const std::vector<CJS_Value>& params,
                             CJS_Value& vRet,
-                            CFX_WideString& sError) {
+                            WideString& sError) {
   if (!m_pFormFillEnv) {
     sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
     return false;
@@ -1326,14 +1325,14 @@
 
 bool Document::Collab(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
-                      CFX_WideString& sError) {
+                      WideString& sError) {
   return true;
 }
 
 bool Document::getPageNthWord(CJS_Runtime* pRuntime,
                               const std::vector<CJS_Value>& params,
                               CJS_Value& vRet,
-                              CFX_WideString& sError) {
+                              WideString& sError) {
   if (!m_pFormFillEnv) {
     sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
     return false;
@@ -1366,7 +1365,7 @@
   page.ParseContent();
 
   int nWords = 0;
-  CFX_WideString swRet;
+  WideString swRet;
   for (auto& pPageObj : *page.GetPageObjectList()) {
     if (pPageObj->IsText()) {
       CPDF_TextObject* pTextObj = pPageObj->AsText();
@@ -1391,7 +1390,7 @@
 bool Document::getPageNthWordQuads(CJS_Runtime* pRuntime,
                                    const std::vector<CJS_Value>& params,
                                    CJS_Value& vRet,
-                                   CFX_WideString& sError) {
+                                   WideString& sError) {
   if (!m_pFormFillEnv) {
     sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
     return false;
@@ -1406,7 +1405,7 @@
 bool Document::getPageNumWords(CJS_Runtime* pRuntime,
                                const std::vector<CJS_Value>& params,
                                CJS_Value& vRet,
-                               CFX_WideString& sError) {
+                               WideString& sError) {
   if (!m_pFormFillEnv) {
     sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
     return false;
@@ -1442,7 +1441,7 @@
 bool Document::getPrintParams(CJS_Runtime* pRuntime,
                               const std::vector<CJS_Value>& params,
                               CJS_Value& vRet,
-                              CFX_WideString& sError) {
+                              WideString& sError) {
   v8::Local<v8::Object> pRetObj =
       pRuntime->NewFxDynamicObj(CJS_PrintParamsObj::g_nObjDefnID);
   if (pRetObj.IsEmpty())
@@ -1473,7 +1472,7 @@
     float kerning;
 
     pTextObj->GetCharInfo(i, &charcode, &kerning);
-    CFX_WideString swUnicode = pFont->UnicodeFromCharCode(charcode);
+    WideString swUnicode = pFont->UnicodeFromCharCode(charcode);
 
     uint16_t unicode = 0;
     if (swUnicode.GetLength() > 0)
@@ -1490,9 +1489,8 @@
   return nWords;
 }
 
-CFX_WideString Document::GetObjWordStr(CPDF_TextObject* pTextObj,
-                                       int nWordIndex) {
-  CFX_WideString swRet;
+WideString Document::GetObjWordStr(CPDF_TextObject* pTextObj, int nWordIndex) {
+  WideString swRet;
 
   CPDF_Font* pFont = pTextObj->GetFont();
   if (!pFont)
@@ -1506,7 +1504,7 @@
     float kerning;
 
     pTextObj->GetCharInfo(i, &charcode, &kerning);
-    CFX_WideString swUnicode = pFont->UnicodeFromCharCode(charcode);
+    WideString swUnicode = pFont->UnicodeFromCharCode(charcode);
 
     uint16_t unicode = 0;
     if (swUnicode.GetLength() > 0)
@@ -1528,7 +1526,7 @@
 
 bool Document::zoom(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
-                    CFX_WideString& sError) {
+                    WideString& sError) {
   return true;
 }
 
@@ -1544,14 +1542,14 @@
 
 bool Document::zoomType(CJS_Runtime* pRuntime,
                         CJS_PropValue& vp,
-                        CFX_WideString& sError) {
+                        WideString& sError) {
   return true;
 }
 
 bool Document::deletePages(CJS_Runtime* pRuntime,
                            const std::vector<CJS_Value>& params,
                            CJS_Value& vRet,
-                           CFX_WideString& sError) {
+                           WideString& sError) {
   // Unsafe, no supported.
   return true;
 }
@@ -1559,7 +1557,7 @@
 bool Document::extractPages(CJS_Runtime* pRuntime,
                             const std::vector<CJS_Value>& params,
                             CJS_Value& vRet,
-                            CFX_WideString& sError) {
+                            WideString& sError) {
   // Unsafe, not supported.
   return true;
 }
@@ -1567,7 +1565,7 @@
 bool Document::insertPages(CJS_Runtime* pRuntime,
                            const std::vector<CJS_Value>& params,
                            CJS_Value& vRet,
-                           CFX_WideString& sError) {
+                           WideString& sError) {
   // Unsafe, not supported.
   return true;
 }
@@ -1575,7 +1573,7 @@
 bool Document::replacePages(CJS_Runtime* pRuntime,
                             const std::vector<CJS_Value>& params,
                             CJS_Value& vRet,
-                            CFX_WideString& sError) {
+                            WideString& sError) {
   // Unsafe, not supported.
   return true;
 }
@@ -1583,7 +1581,7 @@
 bool Document::getURL(CJS_Runtime* pRuntime,
                       const std::vector<CJS_Value>& params,
                       CJS_Value& vRet,
-                      CFX_WideString& sError) {
+                      WideString& sError) {
   // Unsafe, not supported.
   return true;
 }
@@ -1591,7 +1589,7 @@
 bool Document::gotoNamedDest(CJS_Runtime* pRuntime,
                              const std::vector<CJS_Value>& params,
                              CJS_Value& vRet,
-                             CFX_WideString& sError) {
+                             WideString& sError) {
   if (params.size() != 1) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
@@ -1600,7 +1598,7 @@
     sError = JSGetStringFromID(IDS_STRING_JSBADOBJECT);
     return false;
   }
-  CFX_WideString wideName = params[0].ToCFXWideString(pRuntime);
+  WideString wideName = params[0].ToCFXWideString(pRuntime);
   CPDF_Document* pDocument = m_pFormFillEnv->GetPDFDocument();
   if (!pDocument)
     return false;
@@ -1629,8 +1627,7 @@
   m_DelayData.push_back(std::unique_ptr<CJS_DelayData>(pData));
 }
 
-void Document::DoFieldDelay(const CFX_WideString& sFieldName,
-                            int nControlIndex) {
+void Document::DoFieldDelay(const WideString& sFieldName, int nControlIndex) {
   std::vector<std::unique_ptr<CJS_DelayData>> DelayDataForFieldAndControlIndex;
   auto iter = m_DelayData.begin();
   while (iter != m_DelayData.end()) {
diff --git a/fpdfsdk/javascript/Document.h b/fpdfsdk/javascript/Document.h
index 91ca778..3cec9fa 100644
--- a/fpdfsdk/javascript/Document.h
+++ b/fpdfsdk/javascript/Document.h
@@ -50,265 +50,239 @@
   explicit Document(CJS_Object* pJSObject);
   ~Document() override;
 
-  bool ADBE(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool author(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool baseURL(CJS_Runtime* pRuntime,
-               CJS_PropValue& vp,
-               CFX_WideString& sError);
+  bool ADBE(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool author(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool baseURL(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
   bool bookmarkRoot(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
-                    CFX_WideString& sError);
-  bool calculate(CJS_Runtime* pRuntime,
-                 CJS_PropValue& vp,
-                 CFX_WideString& sError);
-  bool Collab(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+                    WideString& sError);
+  bool calculate(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool Collab(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
   bool creationDate(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
-                    CFX_WideString& sError);
-  bool creator(CJS_Runtime* pRuntime,
-               CJS_PropValue& vp,
-               CFX_WideString& sError);
-  bool delay(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool dirty(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+                    WideString& sError);
+  bool creator(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool delay(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool dirty(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
   bool documentFileName(CJS_Runtime* pRuntime,
                         CJS_PropValue& vp,
-                        CFX_WideString& sError);
-  bool external(CJS_Runtime* pRuntime,
-                CJS_PropValue& vp,
-                CFX_WideString& sError);
-  bool filesize(CJS_Runtime* pRuntime,
-                CJS_PropValue& vp,
-                CFX_WideString& sError);
-  bool icons(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool info(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool keywords(CJS_Runtime* pRuntime,
-                CJS_PropValue& vp,
-                CFX_WideString& sError);
-  bool layout(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool media(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool modDate(CJS_Runtime* pRuntime,
-               CJS_PropValue& vp,
-               CFX_WideString& sError);
-  bool mouseX(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool mouseY(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool numFields(CJS_Runtime* pRuntime,
-                 CJS_PropValue& vp,
-                 CFX_WideString& sError);
-  bool numPages(CJS_Runtime* pRuntime,
-                CJS_PropValue& vp,
-                CFX_WideString& sError);
-  bool pageNum(CJS_Runtime* pRuntime,
-               CJS_PropValue& vp,
-               CFX_WideString& sError);
+                        WideString& sError);
+  bool external(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool filesize(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool icons(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool info(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool keywords(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool layout(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool media(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool modDate(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool mouseX(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool mouseY(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool numFields(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool numPages(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool pageNum(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
   bool pageWindowRect(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
-                      CFX_WideString& sError);
-  bool path(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool producer(CJS_Runtime* pRuntime,
-                CJS_PropValue& vp,
-                CFX_WideString& sError);
-  bool subject(CJS_Runtime* pRuntime,
-               CJS_PropValue& vp,
-               CFX_WideString& sError);
-  bool title(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool zoom(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool zoomType(CJS_Runtime* pRuntime,
-                CJS_PropValue& vp,
-                CFX_WideString& sError);
+                      WideString& sError);
+  bool path(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool producer(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool subject(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool title(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool zoom(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool zoomType(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
 
   bool addAnnot(CJS_Runtime* pRuntime,
                 const std::vector<CJS_Value>& params,
                 CJS_Value& vRet,
-                CFX_WideString& sError);
+                WideString& sError);
   bool addField(CJS_Runtime* pRuntime,
                 const std::vector<CJS_Value>& params,
                 CJS_Value& vRet,
-                CFX_WideString& sError);
+                WideString& sError);
   bool addLink(CJS_Runtime* pRuntime,
                const std::vector<CJS_Value>& params,
                CJS_Value& vRet,
-               CFX_WideString& sError);
+               WideString& sError);
   bool addIcon(CJS_Runtime* pRuntime,
                const std::vector<CJS_Value>& params,
                CJS_Value& vRet,
-               CFX_WideString& sError);
+               WideString& sError);
   bool calculateNow(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
-                    CFX_WideString& sError);
+                    WideString& sError);
   bool closeDoc(CJS_Runtime* pRuntime,
                 const std::vector<CJS_Value>& params,
                 CJS_Value& vRet,
-                CFX_WideString& sError);
+                WideString& sError);
   bool createDataObject(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
-                        CFX_WideString& sError);
+                        WideString& sError);
   bool deletePages(CJS_Runtime* pRuntime,
                    const std::vector<CJS_Value>& params,
                    CJS_Value& vRet,
-                   CFX_WideString& sError);
+                   WideString& sError);
   bool exportAsText(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
-                    CFX_WideString& sError);
+                    WideString& sError);
   bool exportAsFDF(CJS_Runtime* pRuntime,
                    const std::vector<CJS_Value>& params,
                    CJS_Value& vRet,
-                   CFX_WideString& sError);
+                   WideString& sError);
   bool exportAsXFDF(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
-                    CFX_WideString& sError);
+                    WideString& sError);
   bool extractPages(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
-                    CFX_WideString& sError);
+                    WideString& sError);
   bool getAnnot(CJS_Runtime* pRuntime,
                 const std::vector<CJS_Value>& params,
                 CJS_Value& vRet,
-                CFX_WideString& sError);
+                WideString& sError);
   bool getAnnots(CJS_Runtime* pRuntime,
                  const std::vector<CJS_Value>& params,
                  CJS_Value& vRet,
-                 CFX_WideString& sError);
+                 WideString& sError);
   bool getAnnot3D(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
-                  CFX_WideString& sError);
+                  WideString& sError);
   bool getAnnots3D(CJS_Runtime* pRuntime,
                    const std::vector<CJS_Value>& params,
                    CJS_Value& vRet,
-                   CFX_WideString& sError);
+                   WideString& sError);
   bool getField(CJS_Runtime* pRuntime,
                 const std::vector<CJS_Value>& params,
                 CJS_Value& vRet,
-                CFX_WideString& sError);
+                WideString& sError);
   bool getIcon(CJS_Runtime* pRuntime,
                const std::vector<CJS_Value>& params,
                CJS_Value& vRet,
-               CFX_WideString& sError);
+               WideString& sError);
   bool getLinks(CJS_Runtime* pRuntime,
                 const std::vector<CJS_Value>& params,
                 CJS_Value& vRet,
-                CFX_WideString& sError);
+                WideString& sError);
   bool getNthFieldName(CJS_Runtime* pRuntime,
                        const std::vector<CJS_Value>& params,
                        CJS_Value& vRet,
-                       CFX_WideString& sError);
+                       WideString& sError);
   bool getOCGs(CJS_Runtime* pRuntime,
                const std::vector<CJS_Value>& params,
                CJS_Value& vRet,
-               CFX_WideString& sError);
+               WideString& sError);
   bool getPageBox(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
-                  CFX_WideString& sError);
+                  WideString& sError);
   bool getPageNthWord(CJS_Runtime* pRuntime,
                       const std::vector<CJS_Value>& params,
                       CJS_Value& vRet,
-                      CFX_WideString& sError);
+                      WideString& sError);
   bool getPageNthWordQuads(CJS_Runtime* pRuntime,
                            const std::vector<CJS_Value>& params,
                            CJS_Value& vRet,
-                           CFX_WideString& sError);
+                           WideString& sError);
   bool getPageNumWords(CJS_Runtime* pRuntime,
                        const std::vector<CJS_Value>& params,
                        CJS_Value& vRet,
-                       CFX_WideString& sError);
+                       WideString& sError);
   bool getPrintParams(CJS_Runtime* pRuntime,
                       const std::vector<CJS_Value>& params,
                       CJS_Value& vRet,
-                      CFX_WideString& sError);
+                      WideString& sError);
   bool getURL(CJS_Runtime* pRuntime,
               const std::vector<CJS_Value>& params,
               CJS_Value& vRet,
-              CFX_WideString& sError);
+              WideString& sError);
   bool gotoNamedDest(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
-                     CFX_WideString& sError);
+                     WideString& sError);
   bool importAnFDF(CJS_Runtime* pRuntime,
                    const std::vector<CJS_Value>& params,
                    CJS_Value& vRet,
-                   CFX_WideString& sError);
+                   WideString& sError);
   bool importAnXFDF(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
-                    CFX_WideString& sError);
+                    WideString& sError);
   bool importTextData(CJS_Runtime* pRuntime,
                       const std::vector<CJS_Value>& params,
                       CJS_Value& vRet,
-                      CFX_WideString& sError);
+                      WideString& sError);
   bool insertPages(CJS_Runtime* pRuntime,
                    const std::vector<CJS_Value>& params,
                    CJS_Value& vRet,
-                   CFX_WideString& sError);
+                   WideString& sError);
   bool mailForm(CJS_Runtime* pRuntime,
                 const std::vector<CJS_Value>& params,
                 CJS_Value& vRet,
-                CFX_WideString& sError);
+                WideString& sError);
   bool print(CJS_Runtime* pRuntime,
              const std::vector<CJS_Value>& params,
              CJS_Value& vRet,
-             CFX_WideString& sError);
+             WideString& sError);
   bool removeField(CJS_Runtime* pRuntime,
                    const std::vector<CJS_Value>& params,
                    CJS_Value& vRet,
-                   CFX_WideString& sError);
+                   WideString& sError);
   bool replacePages(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
-                    CFX_WideString& sError);
+                    WideString& sError);
   bool resetForm(CJS_Runtime* pRuntime,
                  const std::vector<CJS_Value>& params,
                  CJS_Value& vRet,
-                 CFX_WideString& sError);
+                 WideString& sError);
   bool saveAs(CJS_Runtime* pRuntime,
               const std::vector<CJS_Value>& params,
               CJS_Value& vRet,
-              CFX_WideString& sError);
+              WideString& sError);
   bool submitForm(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
-                  CFX_WideString& sError);
+                  WideString& sError);
   bool syncAnnotScan(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
-                     CFX_WideString& sError);
+                     WideString& sError);
   bool mailDoc(CJS_Runtime* pRuntime,
                const std::vector<CJS_Value>& params,
                CJS_Value& vRet,
-               CFX_WideString& sError);
+               WideString& sError);
   bool removeIcon(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
-                  CFX_WideString& sError);
-  bool URL(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+                  WideString& sError);
+  bool URL(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
 
   void SetFormFillEnv(CPDFSDK_FormFillEnvironment* pFormFillEnv);
   CPDFSDK_FormFillEnvironment* GetFormFillEnv() const {
     return m_pFormFillEnv.Get();
   }
   void AddDelayData(CJS_DelayData* pData);
-  void DoFieldDelay(const CFX_WideString& sFieldName, int nControlIndex);
+  void DoFieldDelay(const WideString& sFieldName, int nControlIndex);
   CJS_Document* GetCJSDoc() const;
 
  private:
   bool IsEnclosedInRect(CFX_FloatRect rect, CFX_FloatRect LinkRect);
   int CountWords(CPDF_TextObject* pTextObj);
-  CFX_WideString GetObjWordStr(CPDF_TextObject* pTextObj, int nWordIndex);
+  WideString GetObjWordStr(CPDF_TextObject* pTextObj, int nWordIndex);
 
   bool getPropertyInternal(CJS_Runtime* pRuntime,
                            CJS_PropValue& vp,
-                           const CFX_ByteString& propName,
-                           CFX_WideString& sError);
+                           const ByteString& propName,
+                           WideString& sError);
 
   CPDFSDK_FormFillEnvironment::ObservedPtr m_pFormFillEnv;
-  CFX_WideString m_cwBaseURL;
+  WideString m_cwBaseURL;
   std::list<std::unique_ptr<CJS_DelayData>> m_DelayData;
   // Needs to be a std::list for iterator stability.
-  std::list<CFX_WideString> m_IconNames;
+  std::list<WideString> m_IconNames;
   bool m_bDelay;
 };
 
diff --git a/fpdfsdk/javascript/Field.cpp b/fpdfsdk/javascript/Field.cpp
index 32d4477..fa5d478 100644
--- a/fpdfsdk/javascript/Field.cpp
+++ b/fpdfsdk/javascript/Field.cpp
@@ -163,9 +163,7 @@
 
 IMPLEMENT_JS_CLASS(CJS_Field, Field)
 
-CJS_DelayData::CJS_DelayData(FIELD_PROP prop,
-                             int idx,
-                             const CFX_WideString& name)
+CJS_DelayData::CJS_DelayData(FIELD_PROP prop, int idx, const WideString& name)
     : eProp(prop), nControlIndex(idx), sFieldName(name) {}
 
 CJS_DelayData::~CJS_DelayData() {}
@@ -210,8 +208,7 @@
   strFieldName = strFieldNameParsed.substr(0, iStart);
 }
 
-bool Field::AttachField(Document* pDocument,
-                        const CFX_WideString& csFieldName) {
+bool Field::AttachField(Document* pDocument, const WideString& csFieldName) {
   m_pJSDoc = pDocument;
   m_pFormFillEnv.Reset(pDocument->GetFormFillEnv());
   m_bCanSet = m_pFormFillEnv->GetPermissions(FPDFPERM_FILL_FORM) ||
@@ -220,7 +217,7 @@
 
   CPDFSDK_InterForm* pRDInterForm = m_pFormFillEnv->GetInterForm();
   CPDF_InterForm* pInterForm = pRDInterForm->GetInterForm();
-  CFX_WideString swFieldNameTemp = csFieldName;
+  WideString swFieldNameTemp = csFieldName;
   swFieldNameTemp.Replace(L"..", L".");
 
   if (pInterForm->CountFields(swFieldNameTemp) <= 0) {
@@ -243,7 +240,7 @@
 
 std::vector<CPDF_FormField*> Field::GetFormFields(
     CPDFSDK_FormFillEnvironment* pFormFillEnv,
-    const CFX_WideString& csFieldName) {
+    const WideString& csFieldName) {
   std::vector<CPDF_FormField*> fields;
   CPDFSDK_InterForm* pReaderInterForm = pFormFillEnv->GetInterForm();
   CPDF_InterForm* pInterForm = pReaderInterForm->GetInterForm();
@@ -255,7 +252,7 @@
 }
 
 std::vector<CPDF_FormField*> Field::GetFormFields(
-    const CFX_WideString& csFieldName) const {
+    const WideString& csFieldName) const {
   return Field::GetFormFields(m_pFormFillEnv.Get(), csFieldName);
 }
 
@@ -275,8 +272,8 @@
       for (auto& pObserved : widgets) {
         if (pObserved) {
           bool bFormatted = false;
-          CFX_WideString sValue = static_cast<CPDFSDK_Widget*>(pObserved.Get())
-                                      ->OnFormat(bFormatted);
+          WideString sValue = static_cast<CPDFSDK_Widget*>(pObserved.Get())
+                                  ->OnFormat(bFormatted);
           if (pObserved) {  // Not redundant, may be clobbered by OnFormat.
             static_cast<CPDFSDK_Widget*>(pObserved.Get())
                 ->ResetAppearance(bFormatted ? &sValue : nullptr, false);
@@ -332,7 +329,7 @@
       if (nFieldType == FIELDTYPE_COMBOBOX ||
           nFieldType == FIELDTYPE_TEXTFIELD) {
         bool bFormatted = false;
-        CFX_WideString sValue = pWidget->OnFormat(bFormatted);
+        WideString sValue = pWidget->OnFormat(bFormatted);
         pWidget->ResetAppearance(bFormatted ? &sValue : nullptr, false);
       } else {
         pWidget->ResetAppearance(nullptr, false);
@@ -356,8 +353,7 @@
   return pInterForm ? pInterForm->GetWidget(pFormControl) : nullptr;
 }
 
-bool Field::ValueIsOccur(CPDF_FormField* pFormField,
-                         CFX_WideString csOptLabel) {
+bool Field::ValueIsOccur(CPDF_FormField* pFormField, WideString csOptLabel) {
   for (int i = 0, sz = pFormField->CountOptions(); i < sz; i++) {
     if (csOptLabel.Compare(pFormField->GetOptionLabel(i)) == 0)
       return true;
@@ -379,14 +375,14 @@
 
 bool Field::alignment(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
-                      CFX_WideString& sError) {
+                      WideString& sError) {
   ASSERT(m_pFormFillEnv);
 
   if (vp.IsSetting()) {
     if (!m_bCanSet)
       return false;
 
-    CFX_ByteString alignStr;
+    ByteString alignStr;
     vp >> alignStr;
 
     if (m_bDelay) {
@@ -427,22 +423,22 @@
 }
 
 void Field::SetAlignment(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                         const CFX_WideString& swFieldName,
+                         const WideString& swFieldName,
                          int nControlIndex,
-                         const CFX_ByteString& string) {
+                         const ByteString& string) {
   // Not supported.
 }
 
 bool Field::borderStyle(CJS_Runtime* pRuntime,
                         CJS_PropValue& vp,
-                        CFX_WideString& sError) {
+                        WideString& sError) {
   ASSERT(m_pFormFillEnv);
 
   if (vp.IsSetting()) {
     if (!m_bCanSet)
       return false;
 
-    CFX_ByteString strType = "";
+    ByteString strType = "";
     vp >> strType;
 
     if (m_bDelay) {
@@ -491,9 +487,9 @@
 }
 
 void Field::SetBorderStyle(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                           const CFX_WideString& swFieldName,
+                           const WideString& swFieldName,
                            int nControlIndex,
-                           const CFX_ByteString& string) {
+                           const ByteString& string) {
   ASSERT(pFormFillEnv);
 
   BorderStyle nBorderStyle = BorderStyle::SOLID;
@@ -544,7 +540,7 @@
 
 bool Field::buttonAlignX(CJS_Runtime* pRuntime,
                          CJS_PropValue& vp,
-                         CFX_WideString& sError) {
+                         WideString& sError) {
   ASSERT(m_pFormFillEnv);
 
   if (vp.IsSetting()) {
@@ -585,7 +581,7 @@
 }
 
 void Field::SetButtonAlignX(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                            const CFX_WideString& swFieldName,
+                            const WideString& swFieldName,
                             int nControlIndex,
                             int number) {
   // Not supported.
@@ -593,7 +589,7 @@
 
 bool Field::buttonAlignY(CJS_Runtime* pRuntime,
                          CJS_PropValue& vp,
-                         CFX_WideString& sError) {
+                         WideString& sError) {
   ASSERT(m_pFormFillEnv);
 
   if (vp.IsSetting()) {
@@ -634,7 +630,7 @@
 }
 
 void Field::SetButtonAlignY(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                            const CFX_WideString& swFieldName,
+                            const WideString& swFieldName,
                             int nControlIndex,
                             int number) {
   // Not supported.
@@ -642,7 +638,7 @@
 
 bool Field::buttonFitBounds(CJS_Runtime* pRuntime,
                             CJS_PropValue& vp,
-                            CFX_WideString& sError) {
+                            WideString& sError) {
   ASSERT(m_pFormFillEnv);
 
   if (vp.IsSetting()) {
@@ -678,7 +674,7 @@
 }
 
 void Field::SetButtonFitBounds(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                               const CFX_WideString& swFieldName,
+                               const WideString& swFieldName,
                                int nControlIndex,
                                bool b) {
   // Not supported.
@@ -686,7 +682,7 @@
 
 bool Field::buttonPosition(CJS_Runtime* pRuntime,
                            CJS_PropValue& vp,
-                           CFX_WideString& sError) {
+                           WideString& sError) {
   ASSERT(m_pFormFillEnv);
 
   if (vp.IsSetting()) {
@@ -721,7 +717,7 @@
 }
 
 void Field::SetButtonPosition(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                              const CFX_WideString& swFieldName,
+                              const WideString& swFieldName,
                               int nControlIndex,
                               int number) {
   // Not supported.
@@ -729,7 +725,7 @@
 
 bool Field::buttonScaleHow(CJS_Runtime* pRuntime,
                            CJS_PropValue& vp,
-                           CFX_WideString& sError) {
+                           WideString& sError) {
   ASSERT(m_pFormFillEnv);
 
   if (vp.IsSetting()) {
@@ -769,7 +765,7 @@
 }
 
 void Field::SetButtonScaleHow(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                              const CFX_WideString& swFieldName,
+                              const WideString& swFieldName,
                               int nControlIndex,
                               int number) {
   // Not supported.
@@ -777,7 +773,7 @@
 
 bool Field::buttonScaleWhen(CJS_Runtime* pRuntime,
                             CJS_PropValue& vp,
-                            CFX_WideString& sError) {
+                            WideString& sError) {
   ASSERT(m_pFormFillEnv);
 
   if (vp.IsSetting()) {
@@ -828,7 +824,7 @@
 }
 
 void Field::SetButtonScaleWhen(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                               const CFX_WideString& swFieldName,
+                               const WideString& swFieldName,
                                int nControlIndex,
                                int number) {
   // Not supported.
@@ -836,7 +832,7 @@
 
 bool Field::calcOrderIndex(CJS_Runtime* pRuntime,
                            CJS_PropValue& vp,
-                           CFX_WideString& sError) {
+                           WideString& sError) {
   ASSERT(m_pFormFillEnv);
 
   if (vp.IsSetting()) {
@@ -872,7 +868,7 @@
 }
 
 void Field::SetCalcOrderIndex(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                              const CFX_WideString& swFieldName,
+                              const WideString& swFieldName,
                               int nControlIndex,
                               int number) {
   // Not supported.
@@ -880,7 +876,7 @@
 
 bool Field::charLimit(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
-                      CFX_WideString& sError) {
+                      WideString& sError) {
   ASSERT(m_pFormFillEnv);
 
   if (vp.IsSetting()) {
@@ -911,15 +907,13 @@
 }
 
 void Field::SetCharLimit(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                         const CFX_WideString& swFieldName,
+                         const WideString& swFieldName,
                          int nControlIndex,
                          int number) {
   // Not supported.
 }
 
-bool Field::comb(CJS_Runtime* pRuntime,
-                 CJS_PropValue& vp,
-                 CFX_WideString& sError) {
+bool Field::comb(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError) {
   ASSERT(m_pFormFillEnv);
 
   if (vp.IsSetting()) {
@@ -954,7 +948,7 @@
 }
 
 void Field::SetComb(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                    const CFX_WideString& swFieldName,
+                    const WideString& swFieldName,
                     int nControlIndex,
                     bool b) {
   // Not supported.
@@ -962,7 +956,7 @@
 
 bool Field::commitOnSelChange(CJS_Runtime* pRuntime,
                               CJS_PropValue& vp,
-                              CFX_WideString& sError) {
+                              WideString& sError) {
   ASSERT(m_pFormFillEnv);
 
   if (vp.IsSetting()) {
@@ -999,7 +993,7 @@
 }
 
 void Field::SetCommitOnSelChange(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                                 const CFX_WideString& swFieldName,
+                                 const WideString& swFieldName,
                                  int nControlIndex,
                                  bool b) {
   // Not supported.
@@ -1007,7 +1001,7 @@
 
 bool Field::currentValueIndices(CJS_Runtime* pRuntime,
                                 CJS_PropValue& vp,
-                                CFX_WideString& sError) {
+                                WideString& sError) {
   if (vp.IsSetting()) {
     if (!m_bCanSet)
       return false;
@@ -1064,7 +1058,7 @@
 }
 
 void Field::SetCurrentValueIndices(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                                   const CFX_WideString& swFieldName,
+                                   const WideString& swFieldName,
                                    int nControlIndex,
                                    const std::vector<uint32_t>& array) {
   ASSERT(pFormFillEnv);
@@ -1091,26 +1085,26 @@
 
 bool Field::defaultStyle(CJS_Runtime* pRuntime,
                          CJS_PropValue& vp,
-                         CFX_WideString& sError) {
+                         WideString& sError) {
   return false;
 }
 
 void Field::SetDefaultStyle(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                            const CFX_WideString& swFieldName,
+                            const WideString& swFieldName,
                             int nControlIndex) {
   // Not supported.
 }
 
 bool Field::defaultValue(CJS_Runtime* pRuntime,
                          CJS_PropValue& vp,
-                         CFX_WideString& sError) {
+                         WideString& sError) {
   ASSERT(m_pFormFillEnv);
 
   if (vp.IsSetting()) {
     if (!m_bCanSet)
       return false;
 
-    CFX_WideString WideStr;
+    WideString WideStr;
     vp >> WideStr;
 
     if (m_bDelay) {
@@ -1136,15 +1130,15 @@
 }
 
 void Field::SetDefaultValue(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                            const CFX_WideString& swFieldName,
+                            const WideString& swFieldName,
                             int nControlIndex,
-                            const CFX_WideString& string) {
+                            const WideString& string) {
   // Not supported.
 }
 
 bool Field::doNotScroll(CJS_Runtime* pRuntime,
                         CJS_PropValue& vp,
-                        CFX_WideString& sError) {
+                        WideString& sError) {
   ASSERT(m_pFormFillEnv);
 
   if (vp.IsSetting()) {
@@ -1179,7 +1173,7 @@
 }
 
 void Field::SetDoNotScroll(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                           const CFX_WideString& swFieldName,
+                           const WideString& swFieldName,
                            int nControlIndex,
                            bool b) {
   // Not supported.
@@ -1187,7 +1181,7 @@
 
 bool Field::doNotSpellCheck(CJS_Runtime* pRuntime,
                             CJS_PropValue& vp,
-                            CFX_WideString& sError) {
+                            WideString& sError) {
   ASSERT(m_pFormFillEnv);
 
   if (vp.IsSetting()) {
@@ -1227,7 +1221,7 @@
 
 bool Field::delay(CJS_Runtime* pRuntime,
                   CJS_PropValue& vp,
-                  CFX_WideString& sError) {
+                  WideString& sError) {
   if (!vp.IsSetting()) {
     vp << m_bDelay;
     return true;
@@ -1243,7 +1237,7 @@
 
 bool Field::display(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
-                    CFX_WideString& sError) {
+                    WideString& sError) {
   if (vp.IsSetting()) {
     if (!m_bCanSet)
       return false;
@@ -1288,7 +1282,7 @@
 }
 
 void Field::SetDisplay(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                       const CFX_WideString& swFieldName,
+                       const WideString& swFieldName,
                        int nControlIndex,
                        int number) {
   CPDFSDK_InterForm* pInterForm = pFormFillEnv->GetInterForm();
@@ -1323,9 +1317,7 @@
   }
 }
 
-bool Field::doc(CJS_Runtime* pRuntime,
-                CJS_PropValue& vp,
-                CFX_WideString& sError) {
+bool Field::doc(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
@@ -1335,7 +1327,7 @@
 
 bool Field::editable(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
-                     CFX_WideString& sError) {
+                     WideString& sError) {
   if (vp.IsSetting()) {
     if (!m_bCanSet)
       return false;
@@ -1358,7 +1350,7 @@
 
 bool Field::exportValues(CJS_Runtime* pRuntime,
                          CJS_PropValue& vp,
-                         CFX_WideString& sError) {
+                         WideString& sError) {
   std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
   if (FieldArray.empty())
     return false;
@@ -1398,7 +1390,7 @@
 
 bool Field::fileSelect(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
-                       CFX_WideString& sError) {
+                       WideString& sError) {
   std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
   if (FieldArray.empty())
     return false;
@@ -1421,7 +1413,7 @@
 
 bool Field::fillColor(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
-                      CFX_WideString& sError) {
+                      WideString& sError) {
   CJS_Array crArray;
   std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
   if (FieldArray.empty())
@@ -1481,7 +1473,7 @@
 }
 
 void Field::SetFillColor(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                         const CFX_WideString& swFieldName,
+                         const WideString& swFieldName,
                          int nControlIndex,
                          const CFX_Color& color) {
   // Not supported.
@@ -1489,7 +1481,7 @@
 
 bool Field::hidden(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
-                   CFX_WideString& sError) {
+                   WideString& sError) {
   if (vp.IsSetting()) {
     if (!m_bCanSet)
       return false;
@@ -1526,7 +1518,7 @@
 }
 
 void Field::SetHidden(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                      const CFX_WideString& swFieldName,
+                      const WideString& swFieldName,
                       int nControlIndex,
                       bool b) {
   int display = b ? 1 /*Hidden*/ : 0 /*Visible*/;
@@ -1535,13 +1527,13 @@
 
 bool Field::highlight(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
-                      CFX_WideString& sError) {
+                      WideString& sError) {
   ASSERT(m_pFormFillEnv);
   if (vp.IsSetting()) {
     if (!m_bCanSet)
       return false;
 
-    CFX_ByteString strMode;
+    ByteString strMode;
     vp >> strMode;
 
     if (m_bDelay) {
@@ -1586,15 +1578,15 @@
 }
 
 void Field::SetHighlight(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                         const CFX_WideString& swFieldName,
+                         const WideString& swFieldName,
                          int nControlIndex,
-                         const CFX_ByteString& string) {
+                         const ByteString& string) {
   // Not supported.
 }
 
 bool Field::lineWidth(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
-                      CFX_WideString& sError) {
+                      WideString& sError) {
   if (vp.IsSetting()) {
     if (!m_bCanSet)
       return false;
@@ -1633,7 +1625,7 @@
 }
 
 void Field::SetLineWidth(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                         const CFX_WideString& swFieldName,
+                         const WideString& swFieldName,
                          int nControlIndex,
                          int number) {
   CPDFSDK_InterForm* pInterForm = pFormFillEnv->GetInterForm();
@@ -1673,7 +1665,7 @@
 
 bool Field::multiline(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
-                      CFX_WideString& sError) {
+                      WideString& sError) {
   ASSERT(m_pFormFillEnv);
 
   if (vp.IsSetting()) {
@@ -1708,7 +1700,7 @@
 }
 
 void Field::SetMultiline(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                         const CFX_WideString& swFieldName,
+                         const WideString& swFieldName,
                          int nControlIndex,
                          bool b) {
   // Not supported.
@@ -1716,7 +1708,7 @@
 
 bool Field::multipleSelection(CJS_Runtime* pRuntime,
                               CJS_PropValue& vp,
-                              CFX_WideString& sError) {
+                              WideString& sError) {
   ASSERT(m_pFormFillEnv);
   if (vp.IsSetting()) {
     if (!m_bCanSet)
@@ -1745,15 +1737,13 @@
 }
 
 void Field::SetMultipleSelection(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                                 const CFX_WideString& swFieldName,
+                                 const WideString& swFieldName,
                                  int nControlIndex,
                                  bool b) {
   // Not supported.
 }
 
-bool Field::name(CJS_Runtime* pRuntime,
-                 CJS_PropValue& vp,
-                 CFX_WideString& sError) {
+bool Field::name(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
@@ -1767,7 +1757,7 @@
 
 bool Field::numItems(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
-                     CFX_WideString& sError) {
+                     WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
@@ -1785,9 +1775,7 @@
   return true;
 }
 
-bool Field::page(CJS_Runtime* pRuntime,
-                 CJS_PropValue& vp,
-                 CFX_WideString& sError) {
+bool Field::page(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError) {
   if (!vp.IsGetting()) {
     sError = JSGetStringFromID(IDS_STRING_JSREADONLY);
     return false;
@@ -1832,7 +1820,7 @@
 
 bool Field::password(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
-                     CFX_WideString& sError) {
+                     WideString& sError) {
   ASSERT(m_pFormFillEnv);
 
   if (vp.IsSetting()) {
@@ -1863,7 +1851,7 @@
 }
 
 void Field::SetPassword(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                        const CFX_WideString& swFieldName,
+                        const WideString& swFieldName,
                         int nControlIndex,
                         bool b) {
   // Not supported.
@@ -1871,7 +1859,7 @@
 
 bool Field::print(CJS_Runtime* pRuntime,
                   CJS_PropValue& vp,
-                  CFX_WideString& sError) {
+                  WideString& sError) {
   CPDFSDK_InterForm* pInterForm = m_pFormFillEnv->GetInterForm();
   std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
   if (FieldArray.empty())
@@ -1942,7 +1930,7 @@
 
 bool Field::radiosInUnison(CJS_Runtime* pRuntime,
                            CJS_PropValue& vp,
-                           CFX_WideString& sError) {
+                           WideString& sError) {
   std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
   if (FieldArray.empty())
     return false;
@@ -1965,7 +1953,7 @@
 
 bool Field::readonly(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
-                     CFX_WideString& sError) {
+                     WideString& sError) {
   std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
   if (FieldArray.empty())
     return false;
@@ -1982,9 +1970,7 @@
   return true;
 }
 
-bool Field::rect(CJS_Runtime* pRuntime,
-                 CJS_PropValue& vp,
-                 CFX_WideString& sError) {
+bool Field::rect(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError) {
   CJS_Value Upper_Leftx(pRuntime);
   CJS_Value Upper_Lefty(pRuntime);
   CJS_Value Lower_Rightx(pRuntime);
@@ -2045,7 +2031,7 @@
 }
 
 void Field::SetRect(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                    const CFX_WideString& swFieldName,
+                    const WideString& swFieldName,
                     int nControlIndex,
                     const CFX_FloatRect& rect) {
   CPDFSDK_InterForm* pInterForm = pFormFillEnv->GetInterForm();
@@ -2104,7 +2090,7 @@
 
 bool Field::required(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
-                     CFX_WideString& sError) {
+                     WideString& sError) {
   std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
   if (FieldArray.empty())
     return false;
@@ -2127,7 +2113,7 @@
 
 bool Field::richText(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
-                     CFX_WideString& sError) {
+                     WideString& sError) {
   ASSERT(m_pFormFillEnv);
 
   if (vp.IsSetting()) {
@@ -2156,13 +2142,13 @@
 
 bool Field::richValue(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
-                      CFX_WideString& sError) {
+                      WideString& sError) {
   return true;
 }
 
 bool Field::rotation(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
-                     CFX_WideString& sError) {
+                     WideString& sError) {
   ASSERT(m_pFormFillEnv);
 
   if (vp.IsSetting()) {
@@ -2193,7 +2179,7 @@
 }
 
 void Field::SetRotation(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                        const CFX_WideString& swFieldName,
+                        const WideString& swFieldName,
                         int nControlIndex,
                         int number) {
   // Not supported.
@@ -2201,7 +2187,7 @@
 
 bool Field::strokeColor(CJS_Runtime* pRuntime,
                         CJS_PropValue& vp,
-                        CFX_WideString& sError) {
+                        WideString& sError) {
   CJS_Array crArray;
 
   if (vp.IsSetting()) {
@@ -2259,7 +2245,7 @@
 }
 
 void Field::SetStrokeColor(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                           const CFX_WideString& swFieldName,
+                           const WideString& swFieldName,
                            int nControlIndex,
                            const CFX_Color& color) {
   // Not supported.
@@ -2267,14 +2253,14 @@
 
 bool Field::style(CJS_Runtime* pRuntime,
                   CJS_PropValue& vp,
-                  CFX_WideString& sError) {
+                  WideString& sError) {
   ASSERT(m_pFormFillEnv);
 
   if (vp.IsSetting()) {
     if (!m_bCanSet)
       return false;
 
-    CFX_ByteString csBCaption;
+    ByteString csBCaption;
     vp >> csBCaption;
 
     if (m_bDelay) {
@@ -2299,8 +2285,8 @@
   if (!pFormControl)
     return false;
 
-  CFX_WideString csWCaption = pFormControl->GetNormalCaption();
-  CFX_ByteString csBCaption;
+  WideString csWCaption = pFormControl->GetNormalCaption();
+  ByteString csBCaption;
 
   switch (csWCaption[0]) {
     case L'l':
@@ -2327,21 +2313,21 @@
 }
 
 void Field::SetStyle(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                     const CFX_WideString& swFieldName,
+                     const WideString& swFieldName,
                      int nControlIndex,
-                     const CFX_ByteString& string) {
+                     const ByteString& string) {
   // Not supported.
 }
 
 bool Field::submitName(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
-                       CFX_WideString& sError) {
+                       WideString& sError) {
   return true;
 }
 
 bool Field::textColor(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
-                      CFX_WideString& sError) {
+                      WideString& sError) {
   CJS_Array crArray;
 
   if (vp.IsSetting()) {
@@ -2395,7 +2381,7 @@
 }
 
 void Field::SetTextColor(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                         const CFX_WideString& swFieldName,
+                         const WideString& swFieldName,
                          int nControlIndex,
                          const CFX_Color& color) {
   // Not supported.
@@ -2403,14 +2389,14 @@
 
 bool Field::textFont(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
-                     CFX_WideString& sError) {
+                     WideString& sError) {
   ASSERT(m_pFormFillEnv);
 
   if (vp.IsSetting()) {
     if (!m_bCanSet)
       return false;
 
-    CFX_ByteString csFontName;
+    ByteString csFontName;
     vp >> csFontName;
     if (csFontName.IsEmpty())
       return false;
@@ -2447,15 +2433,15 @@
 }
 
 void Field::SetTextFont(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                        const CFX_WideString& swFieldName,
+                        const WideString& swFieldName,
                         int nControlIndex,
-                        const CFX_ByteString& string) {
+                        const ByteString& string) {
   // Not supported.
 }
 
 bool Field::textSize(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
-                     CFX_WideString& sError) {
+                     WideString& sError) {
   ASSERT(m_pFormFillEnv);
 
   if (vp.IsSetting()) {
@@ -2490,15 +2476,13 @@
 }
 
 void Field::SetTextSize(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                        const CFX_WideString& swFieldName,
+                        const WideString& swFieldName,
                         int nControlIndex,
                         int number) {
   // Not supported.
 }
 
-bool Field::type(CJS_Runtime* pRuntime,
-                 CJS_PropValue& vp,
-                 CFX_WideString& sError) {
+bool Field::type(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
@@ -2541,14 +2525,14 @@
 
 bool Field::userName(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
-                     CFX_WideString& sError) {
+                     WideString& sError) {
   ASSERT(m_pFormFillEnv);
 
   if (vp.IsSetting()) {
     if (!m_bCanSet)
       return false;
 
-    CFX_WideString swName;
+    WideString swName;
     vp >> swName;
 
     if (m_bDelay) {
@@ -2568,20 +2552,20 @@
 }
 
 void Field::SetUserName(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                        const CFX_WideString& swFieldName,
+                        const WideString& swFieldName,
                         int nControlIndex,
-                        const CFX_WideString& string) {
+                        const WideString& string) {
   // Not supported.
 }
 
 bool Field::value(CJS_Runtime* pRuntime,
                   CJS_PropValue& vp,
-                  CFX_WideString& sError) {
+                  WideString& sError) {
   if (vp.IsSetting()) {
     if (!m_bCanSet)
       return false;
 
-    std::vector<CFX_WideString> strArray;
+    std::vector<WideString> strArray;
     if (vp.GetJSValue()->IsArrayObject()) {
       CJS_Array ValueArray;
       vp.GetJSValue()->ConvertToArray(pRuntime, ValueArray);
@@ -2591,7 +2575,7 @@
         strArray.push_back(ElementValue.ToCFXWideString(pRuntime));
       }
     } else {
-      CFX_WideString swValue;
+      WideString swValue;
       vp >> swValue;
       strArray.push_back(swValue);
     }
@@ -2660,9 +2644,9 @@
 }
 
 void Field::SetValue(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                     const CFX_WideString& swFieldName,
+                     const WideString& swFieldName,
                      int nControlIndex,
-                     const std::vector<CFX_WideString>& strArray) {
+                     const std::vector<WideString>& strArray) {
   ASSERT(pFormFillEnv);
   if (strArray.empty())
     return;
@@ -2715,7 +2699,7 @@
 
 bool Field::valueAsString(CJS_Runtime* pRuntime,
                           CJS_PropValue& vp,
-                          CFX_WideString& sError) {
+                          WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
@@ -2758,7 +2742,7 @@
 bool Field::browseForFileToSubmit(CJS_Runtime* pRuntime,
                                   const std::vector<CJS_Value>& params,
                                   CJS_Value& vRet,
-                                  CFX_WideString& sError) {
+                                  WideString& sError) {
   std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
   if (FieldArray.empty())
     return false;
@@ -2766,7 +2750,7 @@
   CPDF_FormField* pFormField = FieldArray[0];
   if ((pFormField->GetFieldFlags() & FIELDFLAG_FILESELECT) &&
       (pFormField->GetFieldType() == FIELDTYPE_TEXTFIELD)) {
-    CFX_WideString wsFileName = m_pFormFillEnv->JS_fieldBrowse();
+    WideString wsFileName = m_pFormFillEnv->JS_fieldBrowse();
     if (!wsFileName.IsEmpty()) {
       pFormField->SetValue(wsFileName);
       UpdateFormField(m_pFormFillEnv.Get(), pFormField, true, true, true);
@@ -2779,7 +2763,7 @@
 bool Field::buttonGetCaption(CJS_Runtime* pRuntime,
                              const std::vector<CJS_Value>& params,
                              CJS_Value& vRet,
-                             CFX_WideString& sError) {
+                             WideString& sError) {
   int nface = 0;
   int iSize = params.size();
   if (iSize >= 1)
@@ -2812,7 +2796,7 @@
 bool Field::buttonGetIcon(CJS_Runtime* pRuntime,
                           const std::vector<CJS_Value>& params,
                           CJS_Value& vRet,
-                          CFX_WideString& sError) {
+                          WideString& sError) {
   if (params.size() >= 1) {
     int nFace = params[0].ToInt(pRuntime);
     if (nFace < 0 || nFace > 2)
@@ -2844,28 +2828,28 @@
 bool Field::buttonImportIcon(CJS_Runtime* pRuntime,
                              const std::vector<CJS_Value>& params,
                              CJS_Value& vRet,
-                             CFX_WideString& sError) {
+                             WideString& sError) {
   return true;
 }
 
 bool Field::buttonSetCaption(CJS_Runtime* pRuntime,
                              const std::vector<CJS_Value>& params,
                              CJS_Value& vRet,
-                             CFX_WideString& sError) {
+                             WideString& sError) {
   return false;
 }
 
 bool Field::buttonSetIcon(CJS_Runtime* pRuntime,
                           const std::vector<CJS_Value>& params,
                           CJS_Value& vRet,
-                          CFX_WideString& sError) {
+                          WideString& sError) {
   return false;
 }
 
 bool Field::checkThisBox(CJS_Runtime* pRuntime,
                          const std::vector<CJS_Value>& params,
                          CJS_Value& vRet,
-                         CFX_WideString& sError) {
+                         WideString& sError) {
   int iSize = params.size();
   if (iSize < 1)
     return false;
@@ -2902,14 +2886,14 @@
 bool Field::clearItems(CJS_Runtime* pRuntime,
                        const std::vector<CJS_Value>& params,
                        CJS_Value& vRet,
-                       CFX_WideString& sError) {
+                       WideString& sError) {
   return true;
 }
 
 bool Field::defaultIsChecked(CJS_Runtime* pRuntime,
                              const std::vector<CJS_Value>& params,
                              CJS_Value& vRet,
-                             CFX_WideString& sError) {
+                             WideString& sError) {
   if (!m_bCanSet)
     return false;
 
@@ -2936,28 +2920,27 @@
 bool Field::deleteItemAt(CJS_Runtime* pRuntime,
                          const std::vector<CJS_Value>& params,
                          CJS_Value& vRet,
-                         CFX_WideString& sError) {
+                         WideString& sError) {
   return true;
 }
 
 bool Field::getArray(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
-                     CFX_WideString& sError) {
+                     WideString& sError) {
   std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
   if (FieldArray.empty())
     return false;
 
-  std::vector<std::unique_ptr<CFX_WideString>> swSort;
+  std::vector<std::unique_ptr<WideString>> swSort;
   for (CPDF_FormField* pFormField : FieldArray) {
-    swSort.push_back(std::unique_ptr<CFX_WideString>(
-        new CFX_WideString(pFormField->GetFullName())));
+    swSort.push_back(
+        std::unique_ptr<WideString>(new WideString(pFormField->GetFullName())));
   }
 
-  std::sort(
-      swSort.begin(), swSort.end(),
-      [](const std::unique_ptr<CFX_WideString>& p1,
-         const std::unique_ptr<CFX_WideString>& p2) { return *p1 < *p2; });
+  std::sort(swSort.begin(), swSort.end(),
+            [](const std::unique_ptr<WideString>& p1,
+               const std::unique_ptr<WideString>& p2) { return *p1 < *p2; });
 
   CJS_Array FormFieldArray;
 
@@ -2982,7 +2965,7 @@
 bool Field::getItemAt(CJS_Runtime* pRuntime,
                       const std::vector<CJS_Value>& params,
                       CJS_Value& vRet,
-                      CFX_WideString& sError) {
+                      WideString& sError) {
   int iSize = params.size();
   int nIdx = -1;
   if (iSize >= 1)
@@ -3002,7 +2985,7 @@
     if (nIdx == -1 || nIdx > pFormField->CountOptions())
       nIdx = pFormField->CountOptions() - 1;
     if (bExport) {
-      CFX_WideString strval = pFormField->GetOptionValue(nIdx);
+      WideString strval = pFormField->GetOptionValue(nIdx);
       if (strval.IsEmpty())
         vRet = CJS_Value(pRuntime, pFormField->GetOptionLabel(nIdx).c_str());
       else
@@ -3020,21 +3003,21 @@
 bool Field::getLock(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
-                    CFX_WideString& sError) {
+                    WideString& sError) {
   return false;
 }
 
 bool Field::insertItemAt(CJS_Runtime* pRuntime,
                          const std::vector<CJS_Value>& params,
                          CJS_Value& vRet,
-                         CFX_WideString& sError) {
+                         WideString& sError) {
   return true;
 }
 
 bool Field::isBoxChecked(CJS_Runtime* pRuntime,
                          const std::vector<CJS_Value>& params,
                          CJS_Value& vRet,
-                         CFX_WideString& sError) {
+                         WideString& sError) {
   int nIndex = -1;
   if (params.size() >= 1)
     nIndex = params[0].ToInt(pRuntime);
@@ -3058,7 +3041,7 @@
 bool Field::isDefaultChecked(CJS_Runtime* pRuntime,
                              const std::vector<CJS_Value>& params,
                              CJS_Value& vRet,
-                             CFX_WideString& sError) {
+                             WideString& sError) {
   int nIndex = -1;
   if (params.size() >= 1)
     nIndex = params[0].ToInt(pRuntime);
@@ -3081,14 +3064,14 @@
 bool Field::setAction(CJS_Runtime* pRuntime,
                       const std::vector<CJS_Value>& params,
                       CJS_Value& vRet,
-                      CFX_WideString& sError) {
+                      WideString& sError) {
   return true;
 }
 
 bool Field::setFocus(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
-                     CFX_WideString& sError) {
+                     WideString& sError) {
   std::vector<CPDF_FormField*> FieldArray = GetFormFields(m_FieldName);
   if (FieldArray.empty())
     return false;
@@ -3133,62 +3116,62 @@
 bool Field::setItems(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
-                     CFX_WideString& sError) {
+                     WideString& sError) {
   return true;
 }
 
 bool Field::setLock(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
-                    CFX_WideString& sError) {
+                    WideString& sError) {
   return false;
 }
 
 bool Field::signatureGetModifications(CJS_Runtime* pRuntime,
                                       const std::vector<CJS_Value>& params,
                                       CJS_Value& vRet,
-                                      CFX_WideString& sError) {
+                                      WideString& sError) {
   return false;
 }
 
 bool Field::signatureGetSeedValue(CJS_Runtime* pRuntime,
                                   const std::vector<CJS_Value>& params,
                                   CJS_Value& vRet,
-                                  CFX_WideString& sError) {
+                                  WideString& sError) {
   return false;
 }
 
 bool Field::signatureInfo(CJS_Runtime* pRuntime,
                           const std::vector<CJS_Value>& params,
                           CJS_Value& vRet,
-                          CFX_WideString& sError) {
+                          WideString& sError) {
   return false;
 }
 
 bool Field::signatureSetSeedValue(CJS_Runtime* pRuntime,
                                   const std::vector<CJS_Value>& params,
                                   CJS_Value& vRet,
-                                  CFX_WideString& sError) {
+                                  WideString& sError) {
   return false;
 }
 
 bool Field::signatureSign(CJS_Runtime* pRuntime,
                           const std::vector<CJS_Value>& params,
                           CJS_Value& vRet,
-                          CFX_WideString& sError) {
+                          WideString& sError) {
   return false;
 }
 
 bool Field::signatureValidate(CJS_Runtime* pRuntime,
                               const std::vector<CJS_Value>& params,
                               CJS_Value& vRet,
-                              CFX_WideString& sError) {
+                              WideString& sError) {
   return false;
 }
 
 bool Field::source(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
-                   CFX_WideString& sError) {
+                   WideString& sError) {
   if (vp.IsGetting()) {
     vp << (CJS_Object*)nullptr;
   }
@@ -3210,14 +3193,14 @@
   m_pJSDoc->AddDelayData(pNewData);
 }
 
-void Field::AddDelay_String(FIELD_PROP prop, const CFX_ByteString& string) {
+void Field::AddDelay_String(FIELD_PROP prop, const ByteString& string) {
   CJS_DelayData* pNewData =
       new CJS_DelayData(prop, m_nFormControlIndex, m_FieldName);
   pNewData->string = string;
   m_pJSDoc->AddDelayData(pNewData);
 }
 
-void Field::AddDelay_WideString(FIELD_PROP prop, const CFX_WideString& string) {
+void Field::AddDelay_WideString(FIELD_PROP prop, const WideString& string) {
   CJS_DelayData* pNewData =
       new CJS_DelayData(prop, m_nFormControlIndex, m_FieldName);
   pNewData->widestring = string;
@@ -3247,7 +3230,7 @@
 }
 
 void Field::AddDelay_WideStringArray(FIELD_PROP prop,
-                                     const std::vector<CFX_WideString>& array) {
+                                     const std::vector<WideString>& array) {
   CJS_DelayData* pNewData =
       new CJS_DelayData(prop, m_nFormControlIndex, m_FieldName);
   pNewData->widestringarray = array;
@@ -3397,7 +3380,7 @@
 void Field::AddField(CPDFSDK_FormFillEnvironment* pFormFillEnv,
                      int nPageIndex,
                      int nFieldType,
-                     const CFX_WideString& sName,
+                     const WideString& sName,
                      const CFX_FloatRect& rcCoords) {
   // Not supported.
 }
diff --git a/fpdfsdk/javascript/Field.h b/fpdfsdk/javascript/Field.h
index 1c8d6be..2ca1da4 100644
--- a/fpdfsdk/javascript/Field.h
+++ b/fpdfsdk/javascript/Field.h
@@ -56,20 +56,20 @@
 };
 
 struct CJS_DelayData {
-  CJS_DelayData(FIELD_PROP prop, int idx, const CFX_WideString& name);
+  CJS_DelayData(FIELD_PROP prop, int idx, const WideString& name);
   ~CJS_DelayData();
 
   FIELD_PROP eProp;
   int nControlIndex;
-  CFX_WideString sFieldName;
+  WideString sFieldName;
   int32_t num;
   bool b;
-  CFX_ByteString string;
-  CFX_WideString widestring;
+  ByteString string;
+  WideString widestring;
   CFX_FloatRect rect;
   CFX_Color color;
   std::vector<uint32_t> wordarray;
-  std::vector<CFX_WideString> widestringarray;
+  std::vector<WideString> widestringarray;
 };
 
 class Field : public CJS_EmbedObj {
@@ -77,380 +77,338 @@
   explicit Field(CJS_Object* pJSObject);
   ~Field() override;
 
-  bool alignment(CJS_Runtime* pRuntime,
-                 CJS_PropValue& vp,
-                 CFX_WideString& sError);
+  bool alignment(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
   bool borderStyle(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
-                   CFX_WideString& sError);
+                   WideString& sError);
   bool buttonAlignX(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
-                    CFX_WideString& sError);
+                    WideString& sError);
   bool buttonAlignY(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
-                    CFX_WideString& sError);
+                    WideString& sError);
   bool buttonFitBounds(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
-                       CFX_WideString& sError);
+                       WideString& sError);
   bool buttonPosition(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
-                      CFX_WideString& sError);
+                      WideString& sError);
   bool buttonScaleHow(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
-                      CFX_WideString& sError);
+                      WideString& sError);
   bool buttonScaleWhen(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
-                       CFX_WideString& sError);
+                       WideString& sError);
   bool calcOrderIndex(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
-                      CFX_WideString& sError);
-  bool charLimit(CJS_Runtime* pRuntime,
-                 CJS_PropValue& vp,
-                 CFX_WideString& sError);
-  bool comb(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+                      WideString& sError);
+  bool charLimit(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool comb(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
   bool commitOnSelChange(CJS_Runtime* pRuntime,
                          CJS_PropValue& vp,
-                         CFX_WideString& sError);
+                         WideString& sError);
   bool currentValueIndices(CJS_Runtime* pRuntime,
                            CJS_PropValue& vp,
-                           CFX_WideString& sError);
+                           WideString& sError);
   bool defaultStyle(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
-                    CFX_WideString& sError);
+                    WideString& sError);
   bool defaultValue(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
-                    CFX_WideString& sError);
+                    WideString& sError);
   bool doNotScroll(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
-                   CFX_WideString& sError);
+                   WideString& sError);
   bool doNotSpellCheck(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
-                       CFX_WideString& sError);
-  bool delay(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool display(CJS_Runtime* pRuntime,
-               CJS_PropValue& vp,
-               CFX_WideString& sError);
-  bool doc(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool editable(CJS_Runtime* pRuntime,
-                CJS_PropValue& vp,
-                CFX_WideString& sError);
+                       WideString& sError);
+  bool delay(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool display(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool doc(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool editable(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
   bool exportValues(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
-                    CFX_WideString& sError);
-  bool fileSelect(CJS_Runtime* pRuntime,
-                  CJS_PropValue& vp,
-                  CFX_WideString& sError);
-  bool fillColor(CJS_Runtime* pRuntime,
-                 CJS_PropValue& vp,
-                 CFX_WideString& sError);
-  bool hidden(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool highlight(CJS_Runtime* pRuntime,
-                 CJS_PropValue& vp,
-                 CFX_WideString& sError);
-  bool lineWidth(CJS_Runtime* pRuntime,
-                 CJS_PropValue& vp,
-                 CFX_WideString& sError);
-  bool multiline(CJS_Runtime* pRuntime,
-                 CJS_PropValue& vp,
-                 CFX_WideString& sError);
+                    WideString& sError);
+  bool fileSelect(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool fillColor(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool hidden(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool highlight(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool lineWidth(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool multiline(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
   bool multipleSelection(CJS_Runtime* pRuntime,
                          CJS_PropValue& vp,
-                         CFX_WideString& sError);
-  bool name(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool numItems(CJS_Runtime* pRuntime,
-                CJS_PropValue& vp,
-                CFX_WideString& sError);
-  bool page(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool password(CJS_Runtime* pRuntime,
-                CJS_PropValue& vp,
-                CFX_WideString& sError);
-  bool print(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+                         WideString& sError);
+  bool name(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool numItems(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool page(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool password(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool print(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
   bool radiosInUnison(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
-                      CFX_WideString& sError);
-  bool readonly(CJS_Runtime* pRuntime,
-                CJS_PropValue& vp,
-                CFX_WideString& sError);
-  bool rect(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool required(CJS_Runtime* pRuntime,
-                CJS_PropValue& vp,
-                CFX_WideString& sError);
-  bool richText(CJS_Runtime* pRuntime,
-                CJS_PropValue& vp,
-                CFX_WideString& sError);
-  bool richValue(CJS_Runtime* pRuntime,
-                 CJS_PropValue& vp,
-                 CFX_WideString& sError);
-  bool rotation(CJS_Runtime* pRuntime,
-                CJS_PropValue& vp,
-                CFX_WideString& sError);
+                      WideString& sError);
+  bool readonly(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool rect(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool required(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool richText(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool richValue(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool rotation(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
   bool strokeColor(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
-                   CFX_WideString& sError);
-  bool style(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool submitName(CJS_Runtime* pRuntime,
-                  CJS_PropValue& vp,
-                  CFX_WideString& sError);
-  bool textColor(CJS_Runtime* pRuntime,
-                 CJS_PropValue& vp,
-                 CFX_WideString& sError);
-  bool textFont(CJS_Runtime* pRuntime,
-                CJS_PropValue& vp,
-                CFX_WideString& sError);
-  bool textSize(CJS_Runtime* pRuntime,
-                CJS_PropValue& vp,
-                CFX_WideString& sError);
-  bool type(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool userName(CJS_Runtime* pRuntime,
-                CJS_PropValue& vp,
-                CFX_WideString& sError);
-  bool value(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+                   WideString& sError);
+  bool style(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool submitName(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool textColor(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool textFont(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool textSize(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool type(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool userName(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool value(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
   bool valueAsString(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
-                     CFX_WideString& sError);
-  bool source(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+                     WideString& sError);
+  bool source(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
 
   bool browseForFileToSubmit(CJS_Runtime* pRuntime,
                              const std::vector<CJS_Value>& params,
                              CJS_Value& vRet,
-                             CFX_WideString& sError);
+                             WideString& sError);
   bool buttonGetCaption(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
-                        CFX_WideString& sError);
+                        WideString& sError);
   bool buttonGetIcon(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
-                     CFX_WideString& sError);
+                     WideString& sError);
   bool buttonImportIcon(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
-                        CFX_WideString& sError);
+                        WideString& sError);
   bool buttonSetCaption(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
-                        CFX_WideString& sError);
+                        WideString& sError);
   bool buttonSetIcon(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
-                     CFX_WideString& sError);
+                     WideString& sError);
   bool checkThisBox(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
-                    CFX_WideString& sError);
+                    WideString& sError);
   bool clearItems(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
-                  CFX_WideString& sError);
+                  WideString& sError);
   bool defaultIsChecked(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
-                        CFX_WideString& sError);
+                        WideString& sError);
   bool deleteItemAt(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
-                    CFX_WideString& sError);
+                    WideString& sError);
   bool getArray(CJS_Runtime* pRuntime,
                 const std::vector<CJS_Value>& params,
                 CJS_Value& vRet,
-                CFX_WideString& sError);
+                WideString& sError);
   bool getItemAt(CJS_Runtime* pRuntime,
                  const std::vector<CJS_Value>& params,
                  CJS_Value& vRet,
-                 CFX_WideString& sError);
+                 WideString& sError);
   bool getLock(CJS_Runtime* pRuntime,
                const std::vector<CJS_Value>& params,
                CJS_Value& vRet,
-               CFX_WideString& sError);
+               WideString& sError);
   bool insertItemAt(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
-                    CFX_WideString& sError);
+                    WideString& sError);
   bool isBoxChecked(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
-                    CFX_WideString& sError);
+                    WideString& sError);
   bool isDefaultChecked(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
-                        CFX_WideString& sError);
+                        WideString& sError);
   bool setAction(CJS_Runtime* pRuntime,
                  const std::vector<CJS_Value>& params,
                  CJS_Value& vRet,
-                 CFX_WideString& sError);
+                 WideString& sError);
   bool setFocus(CJS_Runtime* pRuntime,
                 const std::vector<CJS_Value>& params,
                 CJS_Value& vRet,
-                CFX_WideString& sError);
+                WideString& sError);
   bool setItems(CJS_Runtime* pRuntime,
                 const std::vector<CJS_Value>& params,
                 CJS_Value& vRet,
-                CFX_WideString& sError);
+                WideString& sError);
   bool setLock(CJS_Runtime* pRuntime,
                const std::vector<CJS_Value>& params,
                CJS_Value& vRet,
-               CFX_WideString& sError);
+               WideString& sError);
   bool signatureGetModifications(CJS_Runtime* pRuntime,
                                  const std::vector<CJS_Value>& params,
                                  CJS_Value& vRet,
-                                 CFX_WideString& sError);
+                                 WideString& sError);
   bool signatureGetSeedValue(CJS_Runtime* pRuntime,
                              const std::vector<CJS_Value>& params,
                              CJS_Value& vRet,
-                             CFX_WideString& sError);
+                             WideString& sError);
   bool signatureInfo(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
-                     CFX_WideString& sError);
+                     WideString& sError);
   bool signatureSetSeedValue(CJS_Runtime* pRuntime,
                              const std::vector<CJS_Value>& params,
                              CJS_Value& vRet,
-                             CFX_WideString& sError);
+                             WideString& sError);
   bool signatureSign(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
-                     CFX_WideString& sError);
+                     WideString& sError);
   bool signatureValidate(CJS_Runtime* pRuntime,
                          const std::vector<CJS_Value>& params,
                          CJS_Value& vRet,
-                         CFX_WideString& sError);
+                         WideString& sError);
 
   static void SetAlignment(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                           const CFX_WideString& swFieldName,
+                           const WideString& swFieldName,
                            int nControlIndex,
-                           const CFX_ByteString& string);
+                           const ByteString& string);
   static void SetBorderStyle(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                             const CFX_WideString& swFieldName,
+                             const WideString& swFieldName,
                              int nControlIndex,
-                             const CFX_ByteString& string);
+                             const ByteString& string);
   static void SetButtonAlignX(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                              const CFX_WideString& swFieldName,
+                              const WideString& swFieldName,
                               int nControlIndex,
                               int number);
   static void SetButtonAlignY(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                              const CFX_WideString& swFieldName,
+                              const WideString& swFieldName,
                               int nControlIndex,
                               int number);
   static void SetButtonFitBounds(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                                 const CFX_WideString& swFieldName,
+                                 const WideString& swFieldName,
                                  int nControlIndex,
                                  bool b);
   static void SetButtonPosition(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                                const CFX_WideString& swFieldName,
+                                const WideString& swFieldName,
                                 int nControlIndex,
                                 int number);
   static void SetButtonScaleHow(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                                const CFX_WideString& swFieldName,
+                                const WideString& swFieldName,
                                 int nControlIndex,
                                 int number);
   static void SetButtonScaleWhen(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                                 const CFX_WideString& swFieldName,
+                                 const WideString& swFieldName,
                                  int nControlIndex,
                                  int number);
   static void SetCalcOrderIndex(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                                const CFX_WideString& swFieldName,
+                                const WideString& swFieldName,
                                 int nControlIndex,
                                 int number);
   static void SetCharLimit(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                           const CFX_WideString& swFieldName,
+                           const WideString& swFieldName,
                            int nControlIndex,
                            int number);
   static void SetComb(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                      const CFX_WideString& swFieldName,
+                      const WideString& swFieldName,
                       int nControlIndex,
                       bool b);
   static void SetCommitOnSelChange(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                                   const CFX_WideString& swFieldName,
+                                   const WideString& swFieldName,
                                    int nControlIndex,
                                    bool b);
   static void SetCurrentValueIndices(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                                     const CFX_WideString& swFieldName,
+                                     const WideString& swFieldName,
                                      int nControlIndex,
                                      const std::vector<uint32_t>& array);
   static void SetDefaultStyle(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                              const CFX_WideString& swFieldName,
+                              const WideString& swFieldName,
                               int nControlIndex);
   static void SetDefaultValue(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                              const CFX_WideString& swFieldName,
+                              const WideString& swFieldName,
                               int nControlIndex,
-                              const CFX_WideString& string);
+                              const WideString& string);
   static void SetDoNotScroll(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                             const CFX_WideString& swFieldName,
+                             const WideString& swFieldName,
                              int nControlIndex,
                              bool b);
   static void SetDisplay(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                         const CFX_WideString& swFieldName,
+                         const WideString& swFieldName,
                          int nControlIndex,
                          int number);
   static void SetFillColor(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                           const CFX_WideString& swFieldName,
+                           const WideString& swFieldName,
                            int nControlIndex,
                            const CFX_Color& color);
   static void SetHidden(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                        const CFX_WideString& swFieldName,
+                        const WideString& swFieldName,
                         int nControlIndex,
                         bool b);
   static void SetHighlight(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                           const CFX_WideString& swFieldName,
+                           const WideString& swFieldName,
                            int nControlIndex,
-                           const CFX_ByteString& string);
+                           const ByteString& string);
   static void SetLineWidth(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                           const CFX_WideString& swFieldName,
+                           const WideString& swFieldName,
                            int nControlIndex,
                            int number);
   static void SetMultiline(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                           const CFX_WideString& swFieldName,
+                           const WideString& swFieldName,
                            int nControlIndex,
                            bool b);
   static void SetMultipleSelection(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                                   const CFX_WideString& swFieldName,
+                                   const WideString& swFieldName,
                                    int nControlIndex,
                                    bool b);
   static void SetPassword(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                          const CFX_WideString& swFieldName,
+                          const WideString& swFieldName,
                           int nControlIndex,
                           bool b);
   static void SetRect(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                      const CFX_WideString& swFieldName,
+                      const WideString& swFieldName,
                       int nControlIndex,
                       const CFX_FloatRect& rect);
   static void SetRotation(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                          const CFX_WideString& swFieldName,
+                          const WideString& swFieldName,
                           int nControlIndex,
                           int number);
   static void SetStrokeColor(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                             const CFX_WideString& swFieldName,
+                             const WideString& swFieldName,
                              int nControlIndex,
                              const CFX_Color& color);
   static void SetStyle(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                       const CFX_WideString& swFieldName,
+                       const WideString& swFieldName,
                        int nControlIndex,
-                       const CFX_ByteString& string);
+                       const ByteString& string);
   static void SetTextColor(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                           const CFX_WideString& swFieldName,
+                           const WideString& swFieldName,
                            int nControlIndex,
                            const CFX_Color& color);
   static void SetTextFont(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                          const CFX_WideString& swFieldName,
+                          const WideString& swFieldName,
                           int nControlIndex,
-                          const CFX_ByteString& string);
+                          const ByteString& string);
   static void SetTextSize(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                          const CFX_WideString& swFieldName,
+                          const WideString& swFieldName,
                           int nControlIndex,
                           int number);
   static void SetUserName(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                          const CFX_WideString& swFieldName,
+                          const WideString& swFieldName,
                           int nControlIndex,
-                          const CFX_WideString& string);
+                          const WideString& string);
   static void SetValue(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                       const CFX_WideString& swFieldName,
+                       const WideString& swFieldName,
                        int nControlIndex,
-                       const std::vector<CFX_WideString>& strArray);
+                       const std::vector<WideString>& strArray);
 
   static void AddField(CPDFSDK_FormFillEnvironment* pFormFillEnv,
                        int nPageIndex,
                        int nFieldType,
-                       const CFX_WideString& sName,
+                       const WideString& sName,
                        const CFX_FloatRect& rcCoords);
 
   static void UpdateFormField(CPDFSDK_FormFillEnvironment* pFormFillEnv,
@@ -468,12 +426,12 @@
                                    CPDF_FormControl* pFormControl);
   static std::vector<CPDF_FormField*> GetFormFields(
       CPDFSDK_FormFillEnvironment* pFormFillEnv,
-      const CFX_WideString& csFieldName);
+      const WideString& csFieldName);
 
   static void DoDelay(CPDFSDK_FormFillEnvironment* pFormFillEnv,
                       CJS_DelayData* pData);
 
-  bool AttachField(Document* pDocument, const CFX_WideString& csFieldName);
+  bool AttachField(Document* pDocument, const WideString& csFieldName);
   void SetDelay(bool bDelay);
 
  protected:
@@ -481,26 +439,26 @@
                       std::wstring& strFieldName,
                       int& iControlNo);
   std::vector<CPDF_FormField*> GetFormFields(
-      const CFX_WideString& csFieldName) const;
+      const WideString& csFieldName) const;
   CPDF_FormControl* GetSmartFieldControl(CPDF_FormField* pFormField);
-  bool ValueIsOccur(CPDF_FormField* pFormField, CFX_WideString csOptLabel);
+  bool ValueIsOccur(CPDF_FormField* pFormField, WideString csOptLabel);
 
   void AddDelay_Int(FIELD_PROP prop, int32_t n);
   void AddDelay_Bool(FIELD_PROP prop, bool b);
-  void AddDelay_String(FIELD_PROP prop, const CFX_ByteString& string);
-  void AddDelay_WideString(FIELD_PROP prop, const CFX_WideString& string);
+  void AddDelay_String(FIELD_PROP prop, const ByteString& string);
+  void AddDelay_WideString(FIELD_PROP prop, const WideString& string);
   void AddDelay_Rect(FIELD_PROP prop, const CFX_FloatRect& rect);
   void AddDelay_Color(FIELD_PROP prop, const CFX_Color& color);
   void AddDelay_WordArray(FIELD_PROP prop, const std::vector<uint32_t>& array);
   void AddDelay_WideStringArray(FIELD_PROP prop,
-                                const std::vector<CFX_WideString>& array);
+                                const std::vector<WideString>& array);
 
   void DoDelay();
 
  public:
   Document* m_pJSDoc;
   CPDFSDK_FormFillEnvironment::ObservedPtr m_pFormFillEnv;
-  CFX_WideString m_FieldName;
+  WideString m_FieldName;
   int m_nFormControlIndex;
   bool m_bCanSet;
   bool m_bDelay;
diff --git a/fpdfsdk/javascript/Icon.cpp b/fpdfsdk/javascript/Icon.cpp
index fa2f92f..47781dd 100644
--- a/fpdfsdk/javascript/Icon.cpp
+++ b/fpdfsdk/javascript/Icon.cpp
@@ -25,9 +25,7 @@
 
 Icon::~Icon() {}
 
-bool Icon::name(CJS_Runtime* pRuntime,
-                CJS_PropValue& vp,
-                CFX_WideString& sError) {
+bool Icon::name(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
diff --git a/fpdfsdk/javascript/Icon.h b/fpdfsdk/javascript/Icon.h
index 5580678..e856ee9 100644
--- a/fpdfsdk/javascript/Icon.h
+++ b/fpdfsdk/javascript/Icon.h
@@ -16,12 +16,12 @@
   explicit Icon(CJS_Object* pJSObject);
   ~Icon() override;
 
-  bool name(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  CFX_WideString GetIconName() const { return m_swIconName; }
-  void SetIconName(CFX_WideString name) { m_swIconName = name; }
+  bool name(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  WideString GetIconName() const { return m_swIconName; }
+  void SetIconName(WideString name) { m_swIconName = name; }
 
  private:
-  CFX_WideString m_swIconName;
+  WideString m_swIconName;
 };
 
 class CJS_Icon : public CJS_Object {
diff --git a/fpdfsdk/javascript/JS_Define.h b/fpdfsdk/javascript/JS_Define.h
index f360e8f..470a8fe 100644
--- a/fpdfsdk/javascript/JS_Define.h
+++ b/fpdfsdk/javascript/JS_Define.h
@@ -34,7 +34,7 @@
   v8::FunctionCallback pMethodCall;
 };
 
-template <class C, bool (C::*M)(CJS_Runtime*, CJS_PropValue&, CFX_WideString&)>
+template <class C, bool (C::*M)(CJS_Runtime*, CJS_PropValue&, WideString&)>
 void JSPropGetter(const char* prop_name_string,
                   const char* class_name_string,
                   v8::Local<v8::String> property,
@@ -48,7 +48,7 @@
   if (!pJSObj)
     return;
   C* pObj = reinterpret_cast<C*>(pJSObj->GetEmbedObject());
-  CFX_WideString sError;
+  WideString sError;
   CJS_PropValue value(pRuntime);
   value.StartGetting();
   if (!(pObj->*M)(pRuntime, value, sError)) {
@@ -59,7 +59,7 @@
   info.GetReturnValue().Set(value.GetJSValue()->ToV8Value(pRuntime));
 }
 
-template <class C, bool (C::*M)(CJS_Runtime*, CJS_PropValue&, CFX_WideString&)>
+template <class C, bool (C::*M)(CJS_Runtime*, CJS_PropValue&, WideString&)>
 void JSPropSetter(const char* prop_name_string,
                   const char* class_name_string,
                   v8::Local<v8::String> property,
@@ -74,7 +74,7 @@
   if (!pJSObj)
     return;
   C* pObj = reinterpret_cast<C*>(pJSObj->GetEmbedObject());
-  CFX_WideString sError;
+  WideString sError;
   CJS_PropValue propValue(pRuntime, CJS_Value(pRuntime, value));
   propValue.StartSetting();
   if (!(pObj->*M)(pRuntime, propValue, sError)) {
@@ -101,7 +101,7 @@
           bool (C::*M)(CJS_Runtime*,
                        const std::vector<CJS_Value>&,
                        CJS_Value&,
-                       CFX_WideString&)>
+                       WideString&)>
 void JSMethod(const char* method_name_string,
               const char* class_name_string,
               const v8::FunctionCallbackInfo<v8::Value>& info) {
@@ -118,7 +118,7 @@
   if (!pJSObj)
     return;
   C* pObj = reinterpret_cast<C*>(pJSObj->GetEmbedObject());
-  CFX_WideString sError;
+  WideString sError;
   CJS_Value valueRes(pRuntime);
   if (!(pObj->*M)(pRuntime, parameters, valueRes, sError)) {
     pRuntime->Error(
@@ -325,8 +325,8 @@
 
   Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject());
   v8::String::Utf8Value utf8_value(property);
-  CFX_WideString propname = CFX_WideString::FromUTF8(
-      CFX_ByteStringC(*utf8_value, utf8_value.length()));
+  WideString propname =
+      WideString::FromUTF8(ByteStringView(*utf8_value, utf8_value.length()));
   bool bRet = pObj->QueryProperty(propname.c_str());
   info.GetReturnValue().Set(bRet ? 4 : 0);
 }
@@ -347,9 +347,9 @@
 
   Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject());
   v8::String::Utf8Value utf8_value(property);
-  CFX_WideString propname = CFX_WideString::FromUTF8(
-      CFX_ByteStringC(*utf8_value, utf8_value.length()));
-  CFX_WideString sError;
+  WideString propname =
+      WideString::FromUTF8(ByteStringView(*utf8_value, utf8_value.length()));
+  WideString sError;
   CJS_PropValue value(pRuntime);
   value.StartGetting();
   if (!pObj->DoProperty(pRuntime, propname.c_str(), value, sError)) {
@@ -376,9 +376,9 @@
 
   Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject());
   v8::String::Utf8Value utf8_value(property);
-  CFX_WideString propname = CFX_WideString::FromUTF8(
-      CFX_ByteStringC(*utf8_value, utf8_value.length()));
-  CFX_WideString sError;
+  WideString propname =
+      WideString::FromUTF8(ByteStringView(*utf8_value, utf8_value.length()));
+  WideString sError;
   CJS_PropValue PropValue(pRuntime, CJS_Value(pRuntime, value));
   PropValue.StartSetting();
   if (!pObj->DoProperty(pRuntime, propname.c_str(), PropValue, sError)) {
@@ -402,20 +402,18 @@
 
   Alt* pObj = reinterpret_cast<Alt*>(pJSObj->GetEmbedObject());
   v8::String::Utf8Value utf8_value(property);
-  CFX_WideString propname = CFX_WideString::FromUTF8(
-      CFX_ByteStringC(*utf8_value, utf8_value.length()));
-  CFX_WideString sError;
+  WideString propname =
+      WideString::FromUTF8(ByteStringView(*utf8_value, utf8_value.length()));
+  WideString sError;
   if (!pObj->DelProperty(pRuntime, propname.c_str(), sError)) {
-    CFX_ByteString cbName;
+    ByteString cbName;
     cbName.Format("%s.%s", class_name, "DelProperty");
     // Probably a missing call to JSFX_Error().
   }
 }
 
-template <bool (*F)(CJS_Runtime*,
-                    const std::vector<CJS_Value>&,
-                    CJS_Value&,
-                    CFX_WideString&)>
+template <bool (
+    *F)(CJS_Runtime*, const std::vector<CJS_Value>&, CJS_Value&, WideString&)>
 void JSGlobalFunc(const char* func_name_string,
                   const v8::FunctionCallbackInfo<v8::Value>& info) {
   CJS_Runtime* pRuntime =
@@ -427,7 +425,7 @@
     parameters.push_back(CJS_Value(pRuntime, info[i]));
   }
   CJS_Value valueRes(pRuntime);
-  CFX_WideString sError;
+  WideString sError;
   if (!(*F)(pRuntime, parameters, valueRes, sError)) {
     pRuntime->Error(JSFormatErrorString(func_name_string, nullptr, sError));
     return;
diff --git a/fpdfsdk/javascript/JS_EventHandler.cpp b/fpdfsdk/javascript/JS_EventHandler.cpp
index a63b7a8..670d43e 100644
--- a/fpdfsdk/javascript/JS_EventHandler.cpp
+++ b/fpdfsdk/javascript/JS_EventHandler.cpp
@@ -43,7 +43,7 @@
 }
 
 void CJS_EventHandler::OnDoc_Open(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                                  const CFX_WideString& strTargetName) {
+                                  const WideString& strTargetName) {
   Initial(JET_DOC_OPEN);
   m_pTargetFormFillEnv.Reset(pFormFillEnv);
   m_strTargetName = strTargetName;
@@ -146,36 +146,36 @@
 void CJS_EventHandler::OnField_Focus(bool bModifier,
                                      bool bShift,
                                      CPDF_FormField* pTarget,
-                                     const CFX_WideString& Value) {
+                                     const WideString& Value) {
   Initial(JET_FIELD_FOCUS);
 
   m_bModifier = bModifier;
   m_bShift = bShift;
   m_strTargetName = pTarget->GetFullName();
-  m_pValue = (CFX_WideString*)&Value;
+  m_pValue = (WideString*)&Value;
 }
 
 void CJS_EventHandler::OnField_Blur(bool bModifier,
                                     bool bShift,
                                     CPDF_FormField* pTarget,
-                                    const CFX_WideString& Value) {
+                                    const WideString& Value) {
   Initial(JET_FIELD_BLUR);
 
   m_bModifier = bModifier;
   m_bShift = bShift;
   m_strTargetName = pTarget->GetFullName();
-  m_pValue = (CFX_WideString*)&Value;
+  m_pValue = (WideString*)&Value;
 }
 
-void CJS_EventHandler::OnField_Keystroke(CFX_WideString& strChange,
-                                         const CFX_WideString& strChangeEx,
+void CJS_EventHandler::OnField_Keystroke(WideString& strChange,
+                                         const WideString& strChangeEx,
                                          bool KeyDown,
                                          bool bModifier,
                                          int& nSelEnd,
                                          int& nSelStart,
                                          bool bShift,
                                          CPDF_FormField* pTarget,
-                                         CFX_WideString& Value,
+                                         WideString& Value,
                                          bool bWillCommit,
                                          bool bFieldFull,
                                          bool& bRc) {
@@ -196,13 +196,13 @@
   m_bFieldFull = bFieldFull;
 }
 
-void CJS_EventHandler::OnField_Validate(CFX_WideString& strChange,
-                                        const CFX_WideString& strChangeEx,
+void CJS_EventHandler::OnField_Validate(WideString& strChange,
+                                        const WideString& strChangeEx,
                                         bool bKeyDown,
                                         bool bModifier,
                                         bool bShift,
                                         CPDF_FormField* pTarget,
-                                        CFX_WideString& Value,
+                                        WideString& Value,
                                         bool& bRc) {
   Initial(JET_FIELD_VALIDATE);
 
@@ -218,7 +218,7 @@
 
 void CJS_EventHandler::OnField_Calculate(CPDF_FormField* pSource,
                                          CPDF_FormField* pTarget,
-                                         CFX_WideString& Value,
+                                         WideString& Value,
                                          bool& bRc) {
   Initial(JET_FIELD_CALCULATE);
 
@@ -230,7 +230,7 @@
 }
 
 void CJS_EventHandler::OnField_Format(CPDF_FormField* pTarget,
-                                      CFX_WideString& Value,
+                                      WideString& Value,
                                       bool bWillCommit) {
   Initial(JET_FIELD_FORMAT);
 
@@ -351,7 +351,7 @@
 
 void CJS_EventHandler::OnMenu_Exec(
     CPDFSDK_FormFillEnvironment* pTargetFormFillEnv,
-    const CFX_WideString& strTargetName) {
+    const WideString& strTargetName) {
   Initial(JET_MENU_EXEC);
   m_pTargetFormFillEnv.Reset(pTargetFormFillEnv);
   m_strTargetName = strTargetName;
@@ -408,14 +408,14 @@
   return m_bValid;
 }
 
-CFX_WideString& CJS_EventHandler::Change() {
+WideString& CJS_EventHandler::Change() {
   if (m_pWideStrChange) {
     return *m_pWideStrChange;
   }
   return m_WideStrChangeDu;
 }
 
-CFX_WideString CJS_EventHandler::ChangeEx() {
+WideString CJS_EventHandler::ChangeEx() {
   return m_WideStrChangeEx;
 }
 
@@ -640,7 +640,7 @@
   return pField;
 }
 
-CFX_WideString& CJS_EventHandler::Value() {
+WideString& CJS_EventHandler::Value() {
   return *m_pValue;
 }
 
@@ -648,6 +648,6 @@
   return m_bWillCommit;
 }
 
-CFX_WideString CJS_EventHandler::TargetName() {
+WideString CJS_EventHandler::TargetName() {
   return m_strTargetName;
 }
diff --git a/fpdfsdk/javascript/JS_EventHandler.h b/fpdfsdk/javascript/JS_EventHandler.h
index 82d9d6a..8273b41 100644
--- a/fpdfsdk/javascript/JS_EventHandler.h
+++ b/fpdfsdk/javascript/JS_EventHandler.h
@@ -67,7 +67,7 @@
   void OnApp_Init();
 
   void OnDoc_Open(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                  const CFX_WideString& strTargetName);
+                  const WideString& strTargetName);
   void OnDoc_WillPrint(CPDFSDK_FormFillEnvironment* pFormFillEnv);
   void OnDoc_DidPrint(CPDFSDK_FormFillEnvironment* pFormFillEnv);
   void OnDoc_WillSave(CPDFSDK_FormFillEnvironment* pFormFillEnv);
@@ -81,30 +81,30 @@
 
   void OnField_Calculate(CPDF_FormField* pSource,
                          CPDF_FormField* pTarget,
-                         CFX_WideString& Value,
+                         WideString& Value,
                          bool& bRc);
   void OnField_Format(CPDF_FormField* pTarget,
-                      CFX_WideString& Value,
+                      WideString& Value,
                       bool bWillCommit);
-  void OnField_Keystroke(CFX_WideString& strChange,
-                         const CFX_WideString& strChangeEx,
+  void OnField_Keystroke(WideString& strChange,
+                         const WideString& strChangeEx,
                          bool KeyDown,
                          bool bModifier,
                          int& nSelEnd,
                          int& nSelStart,
                          bool bShift,
                          CPDF_FormField* pTarget,
-                         CFX_WideString& Value,
+                         WideString& Value,
                          bool bWillCommit,
                          bool bFieldFull,
                          bool& bRc);
-  void OnField_Validate(CFX_WideString& strChange,
-                        const CFX_WideString& strChangeEx,
+  void OnField_Validate(WideString& strChange,
+                        const WideString& strChangeEx,
                         bool bKeyDown,
                         bool bModifier,
                         bool bShift,
                         CPDF_FormField* pTarget,
-                        CFX_WideString& Value,
+                        WideString& Value,
                         bool& bRc);
 
   void OnField_MouseDown(bool bModifier, bool bShift, CPDF_FormField* pTarget);
@@ -114,11 +114,11 @@
   void OnField_Blur(bool bModifier,
                     bool bShift,
                     CPDF_FormField* pTarget,
-                    const CFX_WideString& Value);
+                    const WideString& Value);
   void OnField_Focus(bool bModifier,
                      bool bShift,
                      CPDF_FormField* pTarget,
-                     const CFX_WideString& Value);
+                     const WideString& Value);
 
   void OnScreen_Focus(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
   void OnScreen_Blur(bool bModifier, bool bShift, CPDFSDK_Annot* pScreen);
@@ -135,7 +135,7 @@
   void OnLink_MouseUp(CPDFSDK_FormFillEnvironment* pFormFillEnv);
 
   void OnMenu_Exec(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                   const CFX_WideString& strTargetName);
+                   const WideString& strTargetName);
   void OnBatchExec(CPDFSDK_FormFillEnvironment* pFormFillEnv);
   void OnConsole_Exec();
   void OnExternal_Exec();
@@ -145,8 +145,8 @@
   void Destroy();
   bool IsValid();
 
-  CFX_WideString& Change();
-  CFX_WideString ChangeEx();
+  WideString& Change();
+  WideString ChangeEx();
   int CommitKey();
   bool FieldFull();
   bool KeyDown();
@@ -159,9 +159,9 @@
   bool Shift();
   Field* Source();
   Field* Target_Field();
-  CFX_WideString& Value();
+  WideString& Value();
   bool WillCommit();
-  CFX_WideString TargetName();
+  WideString TargetName();
 
   JS_EVENT_T EventType() { return m_eEventType; }
 
@@ -170,11 +170,11 @@
   JS_EVENT_T m_eEventType;
   bool m_bValid;
 
-  CFX_WideString m_strTargetName;
-  CFX_WideString m_strSourceName;
-  CFX_UnownedPtr<CFX_WideString> m_pWideStrChange;
-  CFX_WideString m_WideStrChangeDu;
-  CFX_WideString m_WideStrChangeEx;
+  WideString m_strTargetName;
+  WideString m_strSourceName;
+  CFX_UnownedPtr<WideString> m_pWideStrChange;
+  WideString m_WideStrChangeDu;
+  WideString m_WideStrChangeEx;
   int m_nCommitKey;
   bool m_bKeyDown;
   bool m_bModifier;
@@ -184,7 +184,7 @@
   int* m_pISelStart;
   int m_nSelStartDu;
   bool m_bWillCommit;
-  CFX_UnownedPtr<CFX_WideString> m_pValue;
+  CFX_UnownedPtr<WideString> m_pValue;
   bool m_bFieldFull;
   bool* m_pbRc;
   bool m_bRcDu;
diff --git a/fpdfsdk/javascript/JS_GlobalData.cpp b/fpdfsdk/javascript/JS_GlobalData.cpp
index 1420264..ce3ce68 100644
--- a/fpdfsdk/javascript/JS_GlobalData.cpp
+++ b/fpdfsdk/javascript/JS_GlobalData.cpp
@@ -32,7 +32,7 @@
     0xf8, 0x77, 0xd5, 0xa3};
 
 // Returns true if non-empty, setting sPropName
-bool TrimPropName(CFX_ByteString* sPropName) {
+bool TrimPropName(ByteString* sPropName) {
   sPropName->TrimLeft();
   sPropName->TrimRight();
   return sPropName->GetLength() != 0;
@@ -69,7 +69,7 @@
 }
 
 CJS_GlobalData::iterator CJS_GlobalData::FindGlobalVariable(
-    const CFX_ByteString& propname) {
+    const ByteString& propname) {
   for (auto it = m_arrayGlobalData.begin(); it != m_arrayGlobalData.end();
        ++it) {
     if ((*it)->data.sKey == propname)
@@ -79,7 +79,7 @@
 }
 
 CJS_GlobalData::const_iterator CJS_GlobalData::FindGlobalVariable(
-    const CFX_ByteString& propname) const {
+    const ByteString& propname) const {
   for (auto it = m_arrayGlobalData.begin(); it != m_arrayGlobalData.end();
        ++it) {
     if ((*it)->data.sKey == propname)
@@ -89,14 +89,14 @@
 }
 
 CJS_GlobalData_Element* CJS_GlobalData::GetGlobalVariable(
-    const CFX_ByteString& propname) {
+    const ByteString& propname) {
   auto iter = FindGlobalVariable(propname);
   return iter != m_arrayGlobalData.end() ? iter->get() : nullptr;
 }
 
-void CJS_GlobalData::SetGlobalVariableNumber(const CFX_ByteString& propname,
+void CJS_GlobalData::SetGlobalVariableNumber(const ByteString& propname,
                                              double dData) {
-  CFX_ByteString sPropName(propname);
+  ByteString sPropName(propname);
   if (!TrimPropName(&sPropName))
     return;
 
@@ -112,9 +112,9 @@
   m_arrayGlobalData.push_back(std::move(pNewData));
 }
 
-void CJS_GlobalData::SetGlobalVariableBoolean(const CFX_ByteString& propname,
+void CJS_GlobalData::SetGlobalVariableBoolean(const ByteString& propname,
                                               bool bData) {
-  CFX_ByteString sPropName(propname);
+  ByteString sPropName(propname);
   if (!TrimPropName(&sPropName))
     return;
 
@@ -130,9 +130,9 @@
   m_arrayGlobalData.push_back(std::move(pNewData));
 }
 
-void CJS_GlobalData::SetGlobalVariableString(const CFX_ByteString& propname,
-                                             const CFX_ByteString& sData) {
-  CFX_ByteString sPropName(propname);
+void CJS_GlobalData::SetGlobalVariableString(const ByteString& propname,
+                                             const ByteString& sData) {
+  ByteString sPropName(propname);
   if (!TrimPropName(&sPropName))
     return;
 
@@ -149,9 +149,9 @@
 }
 
 void CJS_GlobalData::SetGlobalVariableObject(
-    const CFX_ByteString& propname,
+    const ByteString& propname,
     const CJS_GlobalVariableArray& array) {
-  CFX_ByteString sPropName(propname);
+  ByteString sPropName(propname);
   if (!TrimPropName(&sPropName))
     return;
 
@@ -167,8 +167,8 @@
   m_arrayGlobalData.push_back(std::move(pNewData));
 }
 
-void CJS_GlobalData::SetGlobalVariableNull(const CFX_ByteString& propname) {
-  CFX_ByteString sPropName(propname);
+void CJS_GlobalData::SetGlobalVariableNull(const ByteString& propname) {
+  ByteString sPropName(propname);
   if (!TrimPropName(&sPropName))
     return;
 
@@ -182,9 +182,9 @@
   m_arrayGlobalData.push_back(std::move(pNewData));
 }
 
-bool CJS_GlobalData::SetGlobalVariablePersistent(const CFX_ByteString& propname,
+bool CJS_GlobalData::SetGlobalVariablePersistent(const ByteString& propname,
                                                  bool bPersistent) {
-  CFX_ByteString sPropName(propname);
+  ByteString sPropName(propname);
   if (!TrimPropName(&sPropName))
     return false;
 
@@ -196,8 +196,8 @@
   return true;
 }
 
-bool CJS_GlobalData::DeleteGlobalVariable(const CFX_ByteString& propname) {
-  CFX_ByteString sPropName(propname);
+bool CJS_GlobalData::DeleteGlobalVariable(const ByteString& propname) {
+  ByteString sPropName(propname);
   if (!TrimPropName(&sPropName))
     return false;
 
@@ -254,7 +254,7 @@
           if (p + dwNameLen > pBuffer + nLength)
             break;
 
-          CFX_ByteString sEntry = CFX_ByteString(p, dwNameLen);
+          ByteString sEntry = ByteString(p, dwNameLen);
           p += sizeof(char) * dwNameLen;
 
           JS_GlobalDataType wDataType =
@@ -291,7 +291,7 @@
               if (p + dwLength > pBuffer + nLength)
                 break;
 
-              SetGlobalVariableString(sEntry, CFX_ByteString(p, dwLength));
+              SetGlobalVariableString(sEntry, ByteString(p, dwLength));
               SetGlobalVariablePersistent(sEntry, true);
               p += sizeof(char) * dwLength;
             } break;
@@ -353,7 +353,7 @@
   // UnSupport.
 }
 
-void CJS_GlobalData::MakeByteString(const CFX_ByteString& name,
+void CJS_GlobalData::MakeByteString(const ByteString& name,
                                     CJS_KeyValue* pData,
                                     CFX_BinaryBuf& sData) {
   switch (pData->nType) {
diff --git a/fpdfsdk/javascript/JS_GlobalData.h b/fpdfsdk/javascript/JS_GlobalData.h
index 24e68c2..249bca6 100644
--- a/fpdfsdk/javascript/JS_GlobalData.h
+++ b/fpdfsdk/javascript/JS_GlobalData.h
@@ -29,16 +29,16 @@
   static CJS_GlobalData* GetRetainedInstance(CPDFSDK_FormFillEnvironment* pApp);
   void Release();
 
-  void SetGlobalVariableNumber(const CFX_ByteString& propname, double dData);
-  void SetGlobalVariableBoolean(const CFX_ByteString& propname, bool bData);
-  void SetGlobalVariableString(const CFX_ByteString& propname,
-                               const CFX_ByteString& sData);
-  void SetGlobalVariableObject(const CFX_ByteString& propname,
+  void SetGlobalVariableNumber(const ByteString& propname, double dData);
+  void SetGlobalVariableBoolean(const ByteString& propname, bool bData);
+  void SetGlobalVariableString(const ByteString& propname,
+                               const ByteString& sData);
+  void SetGlobalVariableObject(const ByteString& propname,
                                const CJS_GlobalVariableArray& array);
-  void SetGlobalVariableNull(const CFX_ByteString& propname);
-  bool SetGlobalVariablePersistent(const CFX_ByteString& propname,
+  void SetGlobalVariableNull(const ByteString& propname);
+  bool SetGlobalVariablePersistent(const ByteString& propname,
                                    bool bPersistent);
-  bool DeleteGlobalVariable(const CFX_ByteString& propname);
+  bool DeleteGlobalVariable(const ByteString& propname);
 
   int32_t GetSize() const;
   CJS_GlobalData_Element* GetAt(int index) const;
@@ -55,9 +55,9 @@
   void LoadGlobalPersistentVariables();
   void SaveGlobalPersisitentVariables();
 
-  CJS_GlobalData_Element* GetGlobalVariable(const CFX_ByteString& sPropname);
-  iterator FindGlobalVariable(const CFX_ByteString& sPropname);
-  const_iterator FindGlobalVariable(const CFX_ByteString& sPropname) const;
+  CJS_GlobalData_Element* GetGlobalVariable(const ByteString& sPropname);
+  iterator FindGlobalVariable(const ByteString& sPropname);
+  const_iterator FindGlobalVariable(const ByteString& sPropname) const;
 
   void LoadFileBuffer(const wchar_t* sFilePath,
                       uint8_t*& pBuffer,
@@ -65,13 +65,13 @@
   void WriteFileBuffer(const wchar_t* sFilePath,
                        const char* pBuffer,
                        int32_t nLength);
-  void MakeByteString(const CFX_ByteString& name,
+  void MakeByteString(const ByteString& name,
                       CJS_KeyValue* pData,
                       CFX_BinaryBuf& sData);
 
   size_t m_RefCount;
   std::vector<std::unique_ptr<CJS_GlobalData_Element>> m_arrayGlobalData;
-  CFX_WideString m_sFilePath;
+  WideString m_sFilePath;
 };
 
 #endif  // FPDFSDK_JAVASCRIPT_JS_GLOBALDATA_H_
diff --git a/fpdfsdk/javascript/JS_KeyValue.h b/fpdfsdk/javascript/JS_KeyValue.h
index 9fc7180..6366935 100644
--- a/fpdfsdk/javascript/JS_KeyValue.h
+++ b/fpdfsdk/javascript/JS_KeyValue.h
@@ -35,11 +35,11 @@
   CJS_KeyValue();
   ~CJS_KeyValue();
 
-  CFX_ByteString sKey;
+  ByteString sKey;
   JS_GlobalDataType nType;
   double dData;
   bool bData;
-  CFX_ByteString sData;
+  ByteString sData;
   CJS_GlobalVariableArray objData;
 };
 
diff --git a/fpdfsdk/javascript/JS_Runtime_Stub.cpp b/fpdfsdk/javascript/JS_Runtime_Stub.cpp
index 73a38fc..068031f 100644
--- a/fpdfsdk/javascript/JS_Runtime_Stub.cpp
+++ b/fpdfsdk/javascript/JS_Runtime_Stub.cpp
@@ -17,13 +17,13 @@
   ~CJS_EventContextStub() override {}
 
   // IJS_EventContext:
-  bool RunScript(const CFX_WideString& script, CFX_WideString* info) override {
+  bool RunScript(const WideString& script, WideString* info) override {
     return false;
   }
 
   void OnApp_Init() override {}
   void OnDoc_Open(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                  const CFX_WideString& strTargetName) override {}
+                  const WideString& strTargetName) override {}
   void OnDoc_WillPrint(CPDFSDK_FormFillEnvironment* pFormFillEnv) override {}
   void OnDoc_DidPrint(CPDFSDK_FormFillEnvironment* pFormFillEnv) override {}
   void OnDoc_WillSave(CPDFSDK_FormFillEnvironment* pFormFillEnv) override {}
@@ -48,37 +48,37 @@
   void OnField_Focus(bool bModifier,
                      bool bShift,
                      CPDF_FormField* pTarget,
-                     const CFX_WideString& Value) override {}
+                     const WideString& Value) override {}
   void OnField_Blur(bool bModifier,
                     bool bShift,
                     CPDF_FormField* pTarget,
-                    const CFX_WideString& Value) override {}
+                    const WideString& Value) override {}
   void OnField_Calculate(CPDF_FormField* pSource,
                          CPDF_FormField* pTarget,
-                         CFX_WideString& Value,
+                         WideString& Value,
                          bool& bRc) override {}
   void OnField_Format(CPDF_FormField* pTarget,
-                      CFX_WideString& Value,
+                      WideString& Value,
                       bool bWillCommit) override {}
-  void OnField_Keystroke(CFX_WideString& strChange,
-                         const CFX_WideString& strChangeEx,
+  void OnField_Keystroke(WideString& strChange,
+                         const WideString& strChangeEx,
                          bool KeyDown,
                          bool bModifier,
                          int& nSelEnd,
                          int& nSelStart,
                          bool bShift,
                          CPDF_FormField* pTarget,
-                         CFX_WideString& Value,
+                         WideString& Value,
                          bool bWillCommit,
                          bool bFieldFull,
                          bool& bRc) override {}
-  void OnField_Validate(CFX_WideString& strChange,
-                        const CFX_WideString& strChangeEx,
+  void OnField_Validate(WideString& strChange,
+                        const WideString& strChangeEx,
                         bool bKeyDown,
                         bool bModifier,
                         bool bShift,
                         CPDF_FormField* pTarget,
-                        CFX_WideString& Value,
+                        WideString& Value,
                         bool& bRc) override {}
   void OnScreen_Focus(bool bModifier,
                       bool bShift,
@@ -113,7 +113,7 @@
   void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) override {}
   void OnLink_MouseUp(CPDFSDK_FormFillEnvironment* pFormFillEnv) override {}
   void OnMenu_Exec(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                   const CFX_WideString&) override {}
+                   const WideString&) override {}
   void OnBatchExec(CPDFSDK_FormFillEnvironment* pFormFillEnv) override {}
   void OnConsole_Exec() override {}
   void OnExternal_Exec() override {}
@@ -138,17 +138,16 @@
   }
 
 #ifdef PDF_ENABLE_XFA
-  bool GetValueByName(const CFX_ByteStringC&, CFXJSE_Value*) override {
+  bool GetValueByName(const ByteStringView&, CFXJSE_Value*) override {
     return false;
   }
 
-  bool SetValueByName(const CFX_ByteStringC&, CFXJSE_Value*) override {
+  bool SetValueByName(const ByteStringView&, CFXJSE_Value*) override {
     return false;
   }
 #endif  // PDF_ENABLE_XFA
 
-  int ExecuteScript(const CFX_WideString& script,
-                    CFX_WideString* info) override {
+  int ExecuteScript(const WideString& script, WideString* info) override {
     return 0;
   }
 
diff --git a/fpdfsdk/javascript/JS_Value.cpp b/fpdfsdk/javascript/JS_Value.cpp
index e52d7d1..1a27d22 100644
--- a/fpdfsdk/javascript/JS_Value.cpp
+++ b/fpdfsdk/javascript/JS_Value.cpp
@@ -200,7 +200,7 @@
     : m_pValue(pRuntime->NewString(pWstr)) {}
 
 CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const char* pStr)
-    : m_pValue(pRuntime->NewString(CFX_WideString::FromLocal(pStr).c_str())) {}
+    : m_pValue(pRuntime->NewString(WideString::FromLocal(pStr).c_str())) {}
 
 CJS_Value::CJS_Value(CJS_Runtime* pRuntime, const CJS_Array& array)
     : m_pValue(array.ToV8Array(pRuntime)) {}
@@ -245,12 +245,12 @@
   return pRuntime->ToObject(m_pValue);
 }
 
-CFX_WideString CJS_Value::ToCFXWideString(CJS_Runtime* pRuntime) const {
+WideString CJS_Value::ToCFXWideString(CJS_Runtime* pRuntime) const {
   return pRuntime->ToWideString(m_pValue);
 }
 
-CFX_ByteString CJS_Value::ToCFXByteString(CJS_Runtime* pRuntime) const {
-  return CFX_ByteString::FromUnicode(ToCFXWideString(pRuntime));
+ByteString CJS_Value::ToCFXByteString(CJS_Runtime* pRuntime) const {
+  return ByteString::FromUnicode(ToCFXWideString(pRuntime));
 }
 
 v8::Local<v8::Value> CJS_Value::ToV8Value(CJS_Runtime* pRuntime) const {
@@ -268,7 +268,7 @@
 void CJS_Value::MaybeCoerceToNumber(CJS_Runtime* pRuntime) {
   bool bAllowNaN = false;
   if (GetType() == VT_string) {
-    CFX_ByteString bstr = ToCFXByteString(pRuntime);
+    ByteString bstr = ToCFXByteString(pRuntime);
     if (bstr.GetLength() == 0)
       return;
     if (bstr == "NaN")
@@ -398,12 +398,12 @@
   ppObj = m_Value.ToV8Object(m_pJSRuntime.Get());
 }
 
-void CJS_PropValue::operator<<(CFX_ByteString str) {
+void CJS_PropValue::operator<<(ByteString str) {
   ASSERT(!m_bIsSetting);
   m_Value = CJS_Value(m_pJSRuntime.Get(), str.c_str());
 }
 
-void CJS_PropValue::operator>>(CFX_ByteString& str) const {
+void CJS_PropValue::operator>>(ByteString& str) const {
   ASSERT(m_bIsSetting);
   str = m_Value.ToCFXByteString(m_pJSRuntime.Get());
 }
@@ -413,12 +413,12 @@
   m_Value = CJS_Value(m_pJSRuntime.Get(), str);
 }
 
-void CJS_PropValue::operator>>(CFX_WideString& wide_string) const {
+void CJS_PropValue::operator>>(WideString& wide_string) const {
   ASSERT(m_bIsSetting);
   wide_string = m_Value.ToCFXWideString(m_pJSRuntime.Get());
 }
 
-void CJS_PropValue::operator<<(CFX_WideString wide_string) {
+void CJS_PropValue::operator<<(WideString wide_string) {
   ASSERT(!m_bIsSetting);
   m_Value = CJS_Value(m_pJSRuntime.Get(), wide_string.c_str());
 }
@@ -588,9 +588,8 @@
   return !m_pDate.IsEmpty() ? pRuntime->ToDouble(m_pDate) : 0.0;
 }
 
-CFX_WideString CJS_Date::ToString(CJS_Runtime* pRuntime) const {
-  return !m_pDate.IsEmpty() ? pRuntime->ToWideString(m_pDate)
-                            : CFX_WideString();
+WideString CJS_Date::ToString(CJS_Runtime* pRuntime) const {
+  return !m_pDate.IsEmpty() ? pRuntime->ToWideString(m_pDate) : WideString();
 }
 
 v8::Local<v8::Date> CJS_Date::ToV8Date(CJS_Runtime* pRuntime) const {
@@ -634,7 +633,7 @@
   return (int)Mod(floor(dt / 1000), 60);
 }
 
-double JS_DateParse(const CFX_WideString& str) {
+double JS_DateParse(const WideString& str) {
   v8::Isolate* pIsolate = v8::Isolate::GetCurrent();
   v8::Isolate::Scope isolate_scope(pIsolate);
   v8::HandleScope scope(pIsolate);
@@ -659,7 +658,7 @@
       const int argc = 1;
       v8::Local<v8::Value> timeStr =
           CJS_Runtime::CurrentRuntimeFromIsolate(pIsolate)->NewString(
-              str.AsStringC());
+              str.AsStringView());
       v8::Local<v8::Value> argv[argc] = {timeStr};
       v = funC->Call(context, context->Global(), argc, argv).ToLocalChecked();
       if (v->IsNumber()) {
diff --git a/fpdfsdk/javascript/JS_Value.h b/fpdfsdk/javascript/JS_Value.h
index 2c0be35..1d430ee 100644
--- a/fpdfsdk/javascript/JS_Value.h
+++ b/fpdfsdk/javascript/JS_Value.h
@@ -59,8 +59,8 @@
   double ToDouble(CJS_Runtime* pRuntime) const;
   float ToFloat(CJS_Runtime* pRuntime) const;
   CJS_Object* ToCJSObject(CJS_Runtime* pRuntime) const;
-  CFX_WideString ToCFXWideString(CJS_Runtime* pRuntime) const;
-  CFX_ByteString ToCFXByteString(CJS_Runtime* pRuntime) const;
+  WideString ToCFXWideString(CJS_Runtime* pRuntime) const;
+  ByteString ToCFXByteString(CJS_Runtime* pRuntime) const;
   v8::Local<v8::Object> ToV8Object(CJS_Runtime* pRuntime) const;
   v8::Local<v8::Array> ToV8Array(CJS_Runtime* pRuntime) const;
   v8::Local<v8::Value> ToV8Value(CJS_Runtime* pRuntime) const;
@@ -102,10 +102,10 @@
   void operator>>(CJS_Object*& ppObj) const;
   void operator<<(CJS_Document* pJsDoc);
   void operator>>(CJS_Document*& ppJsDoc) const;
-  void operator<<(CFX_ByteString);
-  void operator>>(CFX_ByteString&) const;
-  void operator<<(CFX_WideString);
-  void operator>>(CFX_WideString&) const;
+  void operator<<(ByteString);
+  void operator>>(ByteString&) const;
+  void operator<<(WideString);
+  void operator>>(WideString&) const;
   void operator<<(const wchar_t* c_string);
   void operator<<(v8::Local<v8::Object>);
   void operator>>(v8::Local<v8::Object>&) const;
@@ -179,7 +179,7 @@
 
   v8::Local<v8::Date> ToV8Date(CJS_Runtime* pRuntime) const;
   double ToDouble(CJS_Runtime* pRuntime) const;
-  CFX_WideString ToString(CJS_Runtime* pRuntime) const;
+  WideString ToString(CJS_Runtime* pRuntime) const;
 
  protected:
   v8::Local<v8::Date> m_pDate;
@@ -192,7 +192,7 @@
 int JS_GetHourFromTime(double dt);
 int JS_GetMinFromTime(double dt);
 int JS_GetSecFromTime(double dt);
-double JS_DateParse(const CFX_WideString& str);
+double JS_DateParse(const WideString& str);
 double JS_MakeDay(int nYear, int nMonth, int nDay);
 double JS_MakeTime(int nHour, int nMin, int nSec, int nMs);
 double JS_MakeDate(double day, double time);
diff --git a/fpdfsdk/javascript/PublicMethods.cpp b/fpdfsdk/javascript/PublicMethods.cpp
index 970bbd2..ba42c3e 100644
--- a/fpdfsdk/javascript/PublicMethods.cpp
+++ b/fpdfsdk/javascript/PublicMethods.cpp
@@ -70,15 +70,15 @@
                                      L"July",    L"August",   L"September",
                                      L"October", L"November", L"December"};
 
-CFX_ByteString StrTrim(const CFX_ByteString& pStr) {
-  CFX_ByteString result(pStr);
+ByteString StrTrim(const ByteString& pStr) {
+  ByteString result(pStr);
   result.TrimLeft(' ');
   result.TrimRight(' ');
   return result;
 }
 
-CFX_WideString StrTrim(const CFX_WideString& pStr) {
-  CFX_WideString result(pStr);
+WideString StrTrim(const WideString& pStr) {
+  WideString result(pStr);
   result.TrimLeft(' ');
   result.TrimRight(' ');
   return result;
@@ -91,10 +91,10 @@
 }
 
 #if _FX_OS_ != _FX_ANDROID_
-CFX_ByteString CalculateString(double dValue,
-                               int iDec,
-                               int* iDec2,
-                               bool* bNegative) {
+ByteString CalculateString(double dValue,
+                           int iDec,
+                           int* iDec2,
+                           bool* bNegative) {
   *bNegative = dValue < 0;
   if (*bNegative)
     dValue = -dValue;
@@ -109,14 +109,14 @@
   size_t iDecimalPos = stringValue.find(".");
   *iDec2 = iDecimalPos == std::string::npos ? stringValue.size()
                                             : static_cast<int>(iDecimalPos);
-  return CFX_ByteString(stringValue.c_str());
+  return ByteString(stringValue.c_str());
 }
 #endif
 
 }  // namespace
 
-bool CJS_PublicMethods::IsNumber(const CFX_WideString& str) {
-  CFX_WideString sTrim = StrTrim(str);
+bool CJS_PublicMethods::IsNumber(const WideString& str) {
+  WideString sTrim = StrTrim(str);
   const wchar_t* pTrim = sTrim.c_str();
   const wchar_t* p = pTrim;
   bool bDot = false;
@@ -194,8 +194,8 @@
     val.ConvertToArray(pRuntime, StrArray);
     return StrArray;
   }
-  CFX_WideString wsStr = val.ToCFXWideString(pRuntime);
-  CFX_ByteString t = CFX_ByteString::FromUnicode(wsStr);
+  WideString wsStr = val.ToCFXWideString(pRuntime);
+  ByteString t = ByteString::FromUnicode(wsStr);
   const char* p = t.c_str();
 
   int ch = ',';
@@ -204,9 +204,8 @@
   while (*p) {
     const char* pTemp = strchr(p, ch);
     if (!pTemp) {
-      StrArray.SetElement(
-          pRuntime, nIndex,
-          CJS_Value(pRuntime, StrTrim(CFX_ByteString(p)).c_str()));
+      StrArray.SetElement(pRuntime, nIndex,
+                          CJS_Value(pRuntime, StrTrim(ByteString(p)).c_str()));
       break;
     }
 
@@ -214,9 +213,8 @@
     strncpy(pSub, p, pTemp - p);
     *(pSub + (pTemp - p)) = '\0';
 
-    StrArray.SetElement(
-        pRuntime, nIndex,
-        CJS_Value(pRuntime, StrTrim(CFX_ByteString(pSub)).c_str()));
+    StrArray.SetElement(pRuntime, nIndex,
+                        CJS_Value(pRuntime, StrTrim(ByteString(pSub)).c_str()));
     delete[] pSub;
 
     nIndex++;
@@ -225,7 +223,7 @@
   return StrArray;
 }
 
-int CJS_PublicMethods::ParseStringInteger(const CFX_WideString& str,
+int CJS_PublicMethods::ParseStringInteger(const WideString& str,
                                           FX_STRSIZE nStart,
                                           FX_STRSIZE& nSkip,
                                           FX_STRSIZE nMaxStep) {
@@ -248,10 +246,10 @@
   return nRet;
 }
 
-CFX_WideString CJS_PublicMethods::ParseStringString(const CFX_WideString& str,
-                                                    FX_STRSIZE nStart,
-                                                    FX_STRSIZE& nSkip) {
-  CFX_WideString swRet;
+WideString CJS_PublicMethods::ParseStringString(const WideString& str,
+                                                FX_STRSIZE nStart,
+                                                FX_STRSIZE& nSkip) {
+  WideString swRet;
   nSkip = 0;
   for (FX_STRSIZE i = nStart, sz = str.GetLength(); i < sz; i++) {
     wchar_t c = str[i];
@@ -265,7 +263,7 @@
   return swRet;
 }
 
-double CJS_PublicMethods::ParseNormalDate(const CFX_WideString& value,
+double CJS_PublicMethods::ParseNormalDate(const WideString& value,
                                           bool* bWrongFormat) {
   double dt = JS_GetDateTime();
 
@@ -340,13 +338,13 @@
     return dt;
   }
 
-  CFX_WideString swTemp;
+  WideString swTemp;
   swTemp.Format(L"%d/%d/%d %d:%d:%d", nMonth, nDay, nYear, nHour, nMin, nSec);
   return JS_DateParse(swTemp);
 }
 
-double CJS_PublicMethods::MakeRegularDate(const CFX_WideString& value,
-                                          const CFX_WideString& format,
+double CJS_PublicMethods::MakeRegularDate(const WideString& value,
+                                          const WideString& format,
                                           bool* bWrongFormat) {
   double dt = JS_GetDateTime();
 
@@ -485,7 +483,7 @@
         } else if (remaining == 2 || format[i + 3] != c) {
           switch (c) {
             case 'm': {
-              CFX_WideString sMonth = ParseStringString(value, j, nSkip);
+              WideString sMonth = ParseStringString(value, j, nSkip);
               bool bFind = false;
               for (int m = 0; m < 12; m++) {
                 if (sMonth.CompareNoCase(months[m]) == 0) {
@@ -520,11 +518,11 @@
             case 'm': {
               bool bFind = false;
 
-              CFX_WideString sMonth = ParseStringString(value, j, nSkip);
+              WideString sMonth = ParseStringString(value, j, nSkip);
               sMonth.MakeLower();
 
               for (int m = 0; m < 12; m++) {
-                CFX_WideString sFullMonths = fullmonths[m];
+                WideString sFullMonths = fullmonths[m];
                 sFullMonths.MakeLower();
 
                 if (sFullMonths.Contains(sMonth.c_str())) {
@@ -617,9 +615,9 @@
   return dRet;
 }
 
-CFX_WideString CJS_PublicMethods::MakeFormatDate(double dDate,
-                                                 const CFX_WideString& format) {
-  CFX_WideString sRet = L"", sPart = L"";
+WideString CJS_PublicMethods::MakeFormatDate(double dDate,
+                                             const WideString& format) {
+  WideString sRet = L"", sPart = L"";
 
   int nYear = JS_GetYearFromTime(dDate);
   int nMonth = JS_GetMonthFromTime(dDate) + 1;
@@ -753,7 +751,7 @@
 bool CJS_PublicMethods::AFNumber_Format(CJS_Runtime* pRuntime,
                                         const std::vector<CJS_Value>& params,
                                         CJS_Value& vRet,
-                                        CFX_WideString& sError) {
+                                        WideString& sError) {
 #if _FX_OS_ != _FX_ANDROID_
   if (params.size() != 6) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
@@ -765,8 +763,8 @@
   if (!pEvent->m_pValue)
     return false;
 
-  CFX_WideString& Value = pEvent->Value();
-  CFX_ByteString strValue = StrTrim(CFX_ByteString::FromUnicode(Value));
+  WideString& Value = pEvent->Value();
+  ByteString strValue = StrTrim(ByteString::FromUnicode(Value));
   if (strValue.IsEmpty())
     return true;
 
@@ -774,7 +772,7 @@
   int iSepStyle = params[1].ToInt(pRuntime);
   int iNegStyle = params[2].ToInt(pRuntime);
   // params[3] is iCurrStyle, it's not used.
-  CFX_WideString wstrCurrency = params[4].ToCFXWideString(pRuntime);
+  WideString wstrCurrency = params[4].ToCFXWideString(pRuntime);
   bool bCurrencyPrepend = params[5].ToBool(pRuntime);
 
   if (iDec < 0)
@@ -825,7 +823,7 @@
   }
 
   // Processing currency string
-  Value = CFX_WideString::FromLocal(strValue.AsStringC());
+  Value = WideString::FromLocal(strValue.AsStringView());
 
   if (bCurrencyPrepend)
     Value = wstrCurrency + Value;
@@ -900,7 +898,7 @@
 bool CJS_PublicMethods::AFNumber_Keystroke(CJS_Runtime* pRuntime,
                                            const std::vector<CJS_Value>& params,
                                            CJS_Value& vRet,
-                                           CFX_WideString& sError) {
+                                           WideString& sError) {
   if (params.size() < 2)
     return false;
 
@@ -909,12 +907,12 @@
   if (!pEvent->m_pValue)
     return false;
 
-  CFX_WideString& val = pEvent->Value();
-  CFX_WideString& wstrChange = pEvent->Change();
-  CFX_WideString wstrValue = val;
+  WideString& val = pEvent->Value();
+  WideString& wstrChange = pEvent->Change();
+  WideString wstrValue = val;
 
   if (pEvent->WillCommit()) {
-    CFX_WideString swTemp = StrTrim(wstrValue);
+    WideString swTemp = StrTrim(wstrValue);
     if (swTemp.IsEmpty())
       return true;
 
@@ -927,7 +925,7 @@
     return true;  // it happens after the last keystroke and before validating,
   }
 
-  CFX_WideString wstrSelected;
+  WideString wstrSelected;
   if (pEvent->SelStart() != -1) {
     wstrSelected = wstrValue.Mid(pEvent->SelStart(),
                                  pEvent->SelEnd() - pEvent->SelStart());
@@ -981,8 +979,8 @@
     }
   }
 
-  CFX_WideString wprefix = wstrValue.Left(pEvent->SelStart());
-  CFX_WideString wpostfix;
+  WideString wprefix = wstrValue.Left(pEvent->SelStart());
+  WideString wpostfix;
   if (pEvent->SelEnd() >= 0 &&
       static_cast<FX_STRSIZE>(pEvent->SelEnd()) < wstrValue.GetLength())
     wpostfix = wstrValue.Right(wstrValue.GetLength() -
@@ -995,7 +993,7 @@
 bool CJS_PublicMethods::AFPercent_Format(CJS_Runtime* pRuntime,
                                          const std::vector<CJS_Value>& params,
                                          CJS_Value& vRet,
-                                         CFX_WideString& sError) {
+                                         WideString& sError) {
 #if _FX_OS_ != _FX_ANDROID_
   if (params.size() != 2) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
@@ -1007,8 +1005,8 @@
   if (!pEvent->m_pValue)
     return false;
 
-  CFX_WideString& Value = pEvent->Value();
-  CFX_ByteString strValue = StrTrim(CFX_ByteString::FromUnicode(Value));
+  WideString& Value = pEvent->Value();
+  ByteString strValue = StrTrim(ByteString::FromUnicode(Value));
   if (strValue.IsEmpty())
     return true;
 
@@ -1078,7 +1076,7 @@
   if (iNegative)
     strValue = "-" + strValue;
   strValue += "%";
-  Value = CFX_WideString::FromLocal(strValue.AsStringC());
+  Value = WideString::FromLocal(strValue.AsStringView());
 #endif
   return true;
 }
@@ -1087,7 +1085,7 @@
     CJS_Runtime* pRuntime,
     const std::vector<CJS_Value>& params,
     CJS_Value& vRet,
-    CFX_WideString& sError) {
+    WideString& sError) {
   return AFNumber_Keystroke(pRuntime, params, vRet, sError);
 }
 
@@ -1095,7 +1093,7 @@
 bool CJS_PublicMethods::AFDate_FormatEx(CJS_Runtime* pRuntime,
                                         const std::vector<CJS_Value>& params,
                                         CJS_Value& vRet,
-                                        CFX_WideString& sError) {
+                                        WideString& sError) {
   if (params.size() != 1) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
@@ -1106,12 +1104,12 @@
   if (!pEvent->m_pValue)
     return false;
 
-  CFX_WideString& val = pEvent->Value();
-  CFX_WideString strValue = val;
+  WideString& val = pEvent->Value();
+  WideString strValue = val;
   if (strValue.IsEmpty())
     return true;
 
-  CFX_WideString sFormat = params[0].ToCFXWideString(pRuntime);
+  WideString sFormat = params[0].ToCFXWideString(pRuntime);
   double dDate = 0.0f;
 
   if (strValue.Contains(L"GMT")) {
@@ -1123,7 +1121,7 @@
   }
 
   if (std::isnan(dDate)) {
-    CFX_WideString swMsg;
+    WideString swMsg;
     swMsg.Format(JSGetStringFromID(IDS_STRING_JSPARSEDATE).c_str(),
                  sFormat.c_str());
     AlertIfPossible(pContext, swMsg.c_str());
@@ -1134,9 +1132,9 @@
   return true;
 }
 
-double CJS_PublicMethods::MakeInterDate(const CFX_WideString& strValue) {
-  std::vector<CFX_WideString> wsArray;
-  CFX_WideString sTemp = L"";
+double CJS_PublicMethods::MakeInterDate(const WideString& strValue) {
+  std::vector<WideString> wsArray;
+  WideString sTemp = L"";
   for (const auto& c : strValue) {
     if (c == L' ' || c == L':') {
       wsArray.push_back(sTemp);
@@ -1176,11 +1174,11 @@
   else if (sTemp.Compare(L"Dec") == 0)
     nMonth = 12;
 
-  int nDay = FX_atof(wsArray[2].AsStringC());
-  int nHour = FX_atof(wsArray[3].AsStringC());
-  int nMin = FX_atof(wsArray[4].AsStringC());
-  int nSec = FX_atof(wsArray[5].AsStringC());
-  int nYear = FX_atof(wsArray[7].AsStringC());
+  int nDay = FX_atof(wsArray[2].AsStringView());
+  int nHour = FX_atof(wsArray[3].AsStringView());
+  int nMin = FX_atof(wsArray[4].AsStringView());
+  int nSec = FX_atof(wsArray[5].AsStringView());
+  int nYear = FX_atof(wsArray[7].AsStringView());
   double dRet = JS_MakeDate(JS_MakeDay(nYear, nMonth - 1, nDay),
                             JS_MakeTime(nHour, nMin, nSec, 0));
   if (std::isnan(dRet))
@@ -1193,7 +1191,7 @@
 bool CJS_PublicMethods::AFDate_KeystrokeEx(CJS_Runtime* pRuntime,
                                            const std::vector<CJS_Value>& params,
                                            CJS_Value& vRet,
-                                           CFX_WideString& sError) {
+                                           WideString& sError) {
   if (params.size() != 1) {
     sError = L"AFDate_KeystrokeEx's parameters' size r not correct";
     return false;
@@ -1205,15 +1203,15 @@
     if (!pEvent->m_pValue)
       return false;
 
-    CFX_WideString strValue = pEvent->Value();
+    WideString strValue = pEvent->Value();
     if (strValue.IsEmpty())
       return true;
 
-    CFX_WideString sFormat = params[0].ToCFXWideString(pRuntime);
+    WideString sFormat = params[0].ToCFXWideString(pRuntime);
     bool bWrongFormat = false;
     double dRet = MakeRegularDate(strValue, sFormat, &bWrongFormat);
     if (bWrongFormat || std::isnan(dRet)) {
-      CFX_WideString swMsg;
+      WideString swMsg;
       swMsg.Format(JSGetStringFromID(IDS_STRING_JSPARSEDATE).c_str(),
                    sFormat.c_str());
       AlertIfPossible(pContext, swMsg.c_str());
@@ -1227,7 +1225,7 @@
 bool CJS_PublicMethods::AFDate_Format(CJS_Runtime* pRuntime,
                                       const std::vector<CJS_Value>& params,
                                       CJS_Value& vRet,
-                                      CFX_WideString& sError) {
+                                      WideString& sError) {
   if (params.size() != 1) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
@@ -1261,7 +1259,7 @@
 bool CJS_PublicMethods::AFDate_Keystroke(CJS_Runtime* pRuntime,
                                          const std::vector<CJS_Value>& params,
                                          CJS_Value& vRet,
-                                         CFX_WideString& sError) {
+                                         WideString& sError) {
   if (params.size() != 1) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
@@ -1295,7 +1293,7 @@
 bool CJS_PublicMethods::AFTime_Format(CJS_Runtime* pRuntime,
                                       const std::vector<CJS_Value>& params,
                                       CJS_Value& vRet,
-                                      CFX_WideString& sError) {
+                                      WideString& sError) {
   if (params.size() != 1) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
@@ -1316,7 +1314,7 @@
 bool CJS_PublicMethods::AFTime_Keystroke(CJS_Runtime* pRuntime,
                                          const std::vector<CJS_Value>& params,
                                          CJS_Value& vRet,
-                                         CFX_WideString& sError) {
+                                         WideString& sError) {
   if (params.size() != 1) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
@@ -1337,14 +1335,14 @@
 bool CJS_PublicMethods::AFTime_FormatEx(CJS_Runtime* pRuntime,
                                         const std::vector<CJS_Value>& params,
                                         CJS_Value& vRet,
-                                        CFX_WideString& sError) {
+                                        WideString& sError) {
   return AFDate_FormatEx(pRuntime, params, vRet, sError);
 }
 
 bool CJS_PublicMethods::AFTime_KeystrokeEx(CJS_Runtime* pRuntime,
                                            const std::vector<CJS_Value>& params,
                                            CJS_Value& vRet,
-                                           CFX_WideString& sError) {
+                                           WideString& sError) {
   return AFDate_KeystrokeEx(pRuntime, params, vRet, sError);
 }
 
@@ -1352,7 +1350,7 @@
 bool CJS_PublicMethods::AFSpecial_Format(CJS_Runtime* pRuntime,
                                          const std::vector<CJS_Value>& params,
                                          CJS_Value& vRet,
-                                         CFX_WideString& sError) {
+                                         WideString& sError) {
   if (params.size() != 1) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
@@ -1363,8 +1361,8 @@
   if (!pEvent->m_pValue)
     return false;
 
-  CFX_WideString wsSource = pEvent->Value();
-  CFX_WideString wsFormat;
+  WideString wsSource = pEvent->Value();
+  WideString wsFormat;
   switch (params[0].ToInt(pRuntime)) {
     case 0:
       wsFormat = L"99999";
@@ -1392,7 +1390,7 @@
     CJS_Runtime* pRuntime,
     const std::vector<CJS_Value>& params,
     CJS_Value& vRet,
-    CFX_WideString& sError) {
+    WideString& sError) {
   if (params.size() < 1) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
@@ -1403,8 +1401,8 @@
   if (!pEvent->m_pValue)
     return false;
 
-  CFX_WideString& valEvent = pEvent->Value();
-  CFX_WideString wstrMask = params[0].ToCFXWideString(pRuntime);
+  WideString& valEvent = pEvent->Value();
+  WideString wstrMask = params[0].ToCFXWideString(pRuntime);
   if (wstrMask.IsEmpty())
     return true;
 
@@ -1427,11 +1425,11 @@
     return true;
   }
 
-  CFX_WideString& wideChange = pEvent->Change();
+  WideString& wideChange = pEvent->Change();
   if (wideChange.IsEmpty())
     return true;
 
-  CFX_WideString wChange = wideChange;
+  WideString wChange = wideChange;
   FX_STRSIZE iIndexMask = pEvent->SelStart();
   FX_STRSIZE combined_len = valEvent.GetLength() + wChange.GetLength() +
                             pEvent->SelStart() - pEvent->SelEnd();
@@ -1475,7 +1473,7 @@
     CJS_Runtime* pRuntime,
     const std::vector<CJS_Value>& params,
     CJS_Value& vRet,
-    CFX_WideString& sError) {
+    WideString& sError) {
   if (params.size() != 1) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
@@ -1513,7 +1511,7 @@
 bool CJS_PublicMethods::AFMergeChange(CJS_Runtime* pRuntime,
                                       const std::vector<CJS_Value>& params,
                                       CJS_Value& vRet,
-                                      CFX_WideString& sError) {
+                                      WideString& sError) {
   if (params.size() != 1) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
@@ -1522,7 +1520,7 @@
   CJS_EventHandler* pEventHandler =
       pRuntime->GetCurrentEventContext()->GetEventHandler();
 
-  CFX_WideString swValue;
+  WideString swValue;
   if (pEventHandler->m_pValue)
     swValue = pEventHandler->Value();
 
@@ -1531,7 +1529,7 @@
     return true;
   }
 
-  CFX_WideString prefix, postfix;
+  WideString prefix, postfix;
 
   if (pEventHandler->SelStart() >= 0)
     prefix = swValue.Left(pEventHandler->SelStart());
@@ -1553,17 +1551,17 @@
 bool CJS_PublicMethods::AFParseDateEx(CJS_Runtime* pRuntime,
                                       const std::vector<CJS_Value>& params,
                                       CJS_Value& vRet,
-                                      CFX_WideString& sError) {
+                                      WideString& sError) {
   if (params.size() != 2) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
   }
 
-  CFX_WideString sValue = params[0].ToCFXWideString(pRuntime);
-  CFX_WideString sFormat = params[1].ToCFXWideString(pRuntime);
+  WideString sValue = params[0].ToCFXWideString(pRuntime);
+  WideString sFormat = params[1].ToCFXWideString(pRuntime);
   double dDate = MakeRegularDate(sValue, sFormat, nullptr);
   if (std::isnan(dDate)) {
-    CFX_WideString swMsg;
+    WideString swMsg;
     swMsg.Format(JSGetStringFromID(IDS_STRING_JSPARSEDATE).c_str(),
                  sFormat.c_str());
     AlertIfPossible(pRuntime->GetCurrentEventContext(), swMsg.c_str());
@@ -1577,7 +1575,7 @@
 bool CJS_PublicMethods::AFSimple(CJS_Runtime* pRuntime,
                                  const std::vector<CJS_Value>& params,
                                  CJS_Value& vRet,
-                                 CFX_WideString& sError) {
+                                 WideString& sError) {
   if (params.size() != 3) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
@@ -1594,13 +1592,13 @@
 bool CJS_PublicMethods::AFMakeNumber(CJS_Runtime* pRuntime,
                                      const std::vector<CJS_Value>& params,
                                      CJS_Value& vRet,
-                                     CFX_WideString& sError) {
+                                     WideString& sError) {
   if (params.size() != 1) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
   }
 
-  CFX_WideString ws = params[0].ToCFXWideString(pRuntime);
+  WideString ws = params[0].ToCFXWideString(pRuntime);
   ws.Replace(L",", L".");
   vRet = CJS_Value(pRuntime, ws.c_str());
   vRet.MaybeCoerceToNumber(pRuntime);
@@ -1612,7 +1610,7 @@
 bool CJS_PublicMethods::AFSimple_Calculate(CJS_Runtime* pRuntime,
                                            const std::vector<CJS_Value>& params,
                                            CJS_Value& vRet,
-                                           CFX_WideString& sError) {
+                                           WideString& sError) {
   if (params.size() != 2) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
@@ -1628,7 +1626,7 @@
       pRuntime->GetFormFillEnv()->GetInterForm();
   CPDF_InterForm* pInterForm = pReaderInterForm->GetInterForm();
 
-  CFX_WideString sFunction = params[0].ToCFXWideString(pRuntime);
+  WideString sFunction = params[0].ToCFXWideString(pRuntime);
   double dValue = wcscmp(sFunction.c_str(), L"PRD") == 0 ? 1.0 : 0.0;
 
   CJS_Array FieldNameArray = AF_MakeArrayFromList(pRuntime, params1);
@@ -1637,7 +1635,7 @@
   for (int i = 0, isz = FieldNameArray.GetLength(pRuntime); i < isz; i++) {
     CJS_Value jsValue(pRuntime);
     FieldNameArray.GetElement(pRuntime, i, jsValue);
-    CFX_WideString wsFieldName = jsValue.ToCFXWideString(pRuntime);
+    WideString wsFieldName = jsValue.ToCFXWideString(pRuntime);
 
     for (int j = 0, jsz = pInterForm->CountFields(wsFieldName); j < jsz; j++) {
       if (CPDF_FormField* pFormField = pInterForm->GetField(j, wsFieldName)) {
@@ -1645,10 +1643,10 @@
         switch (pFormField->GetFieldType()) {
           case FIELDTYPE_TEXTFIELD:
           case FIELDTYPE_COMBOBOX: {
-            CFX_WideString trimmed = pFormField->GetValue();
+            WideString trimmed = pFormField->GetValue();
             trimmed.TrimRight();
             trimmed.TrimLeft();
-            dTemp = FX_atof(trimmed.AsStringC());
+            dTemp = FX_atof(trimmed.AsStringView());
           } break;
           case FIELDTYPE_PUSHBUTTON: {
             dTemp = 0.0;
@@ -1659,10 +1657,10 @@
             for (int c = 0, csz = pFormField->CountControls(); c < csz; c++) {
               if (CPDF_FormControl* pFormCtrl = pFormField->GetControl(c)) {
                 if (pFormCtrl->IsChecked()) {
-                  CFX_WideString trimmed = pFormCtrl->GetExportValue();
+                  WideString trimmed = pFormCtrl->GetExportValue();
                   trimmed.TrimRight();
                   trimmed.TrimLeft();
-                  dTemp = FX_atof(trimmed.AsStringC());
+                  dTemp = FX_atof(trimmed.AsStringView());
                   break;
                 }
               }
@@ -1670,10 +1668,10 @@
           } break;
           case FIELDTYPE_LISTBOX: {
             if (pFormField->CountSelectedItems() <= 1) {
-              CFX_WideString trimmed = pFormField->GetValue();
+              WideString trimmed = pFormField->GetValue();
               trimmed.TrimRight();
               trimmed.TrimLeft();
-              dTemp = FX_atof(trimmed.AsStringC());
+              dTemp = FX_atof(trimmed.AsStringView());
             }
           } break;
           default:
@@ -1711,7 +1709,7 @@
 bool CJS_PublicMethods::AFRange_Validate(CJS_Runtime* pRuntime,
                                          const std::vector<CJS_Value>& params,
                                          CJS_Value& vRet,
-                                         CFX_WideString& sError) {
+                                         WideString& sError) {
   if (params.size() != 4) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
@@ -1724,13 +1722,12 @@
   if (pEvent->Value().IsEmpty())
     return true;
 
-  double dEentValue =
-      atof(CFX_ByteString::FromUnicode(pEvent->Value()).c_str());
+  double dEentValue = atof(ByteString::FromUnicode(pEvent->Value()).c_str());
   bool bGreaterThan = params[0].ToBool(pRuntime);
   double dGreaterThan = params[1].ToDouble(pRuntime);
   bool bLessThan = params[2].ToBool(pRuntime);
   double dLessThan = params[3].ToDouble(pRuntime);
-  CFX_WideString swMsg;
+  WideString swMsg;
 
   if (bGreaterThan && bLessThan) {
     if (dEentValue < dGreaterThan || dEentValue > dLessThan)
@@ -1757,17 +1754,17 @@
 bool CJS_PublicMethods::AFExtractNums(CJS_Runtime* pRuntime,
                                       const std::vector<CJS_Value>& params,
                                       CJS_Value& vRet,
-                                      CFX_WideString& sError) {
+                                      WideString& sError) {
   if (params.size() != 1) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
   }
 
-  CFX_WideString str = params[0].ToCFXWideString(pRuntime);
+  WideString str = params[0].ToCFXWideString(pRuntime);
   if (str.GetLength() > 0 && (str[0] == L'.' || str[0] == L','))
     str = L"0" + str;
 
-  CFX_WideString sPart;
+  WideString sPart;
   CJS_Array nums;
   int nIndex = 0;
   for (const auto& wc : str) {
diff --git a/fpdfsdk/javascript/PublicMethods.h b/fpdfsdk/javascript/PublicMethods.h
index c373f51..365df3e 100644
--- a/fpdfsdk/javascript/PublicMethods.h
+++ b/fpdfsdk/javascript/PublicMethods.h
@@ -21,91 +21,91 @@
   static bool AFNumber_Format(CJS_Runtime* pRuntime,
                               const std::vector<CJS_Value>& params,
                               CJS_Value& vRet,
-                              CFX_WideString& sError);
+                              WideString& sError);
   static bool AFNumber_Keystroke(CJS_Runtime* pRuntime,
                                  const std::vector<CJS_Value>& params,
                                  CJS_Value& vRet,
-                                 CFX_WideString& sError);
+                                 WideString& sError);
   static bool AFPercent_Format(CJS_Runtime* pRuntime,
                                const std::vector<CJS_Value>& params,
                                CJS_Value& vRet,
-                               CFX_WideString& sError);
+                               WideString& sError);
   static bool AFPercent_Keystroke(CJS_Runtime* pRuntime,
                                   const std::vector<CJS_Value>& params,
                                   CJS_Value& vRet,
-                                  CFX_WideString& sError);
+                                  WideString& sError);
   static bool AFDate_FormatEx(CJS_Runtime* pRuntime,
                               const std::vector<CJS_Value>& params,
                               CJS_Value& vRet,
-                              CFX_WideString& sError);
+                              WideString& sError);
   static bool AFDate_KeystrokeEx(CJS_Runtime* pRuntime,
                                  const std::vector<CJS_Value>& params,
                                  CJS_Value& vRet,
-                                 CFX_WideString& sError);
+                                 WideString& sError);
   static bool AFDate_Format(CJS_Runtime* pRuntime,
                             const std::vector<CJS_Value>& params,
                             CJS_Value& vRet,
-                            CFX_WideString& sError);
+                            WideString& sError);
   static bool AFDate_Keystroke(CJS_Runtime* pRuntime,
                                const std::vector<CJS_Value>& params,
                                CJS_Value& vRet,
-                               CFX_WideString& sError);
+                               WideString& sError);
   static bool AFTime_FormatEx(CJS_Runtime* pRuntime,
                               const std::vector<CJS_Value>& params,
                               CJS_Value& vRet,
-                              CFX_WideString& sError);  //
+                              WideString& sError);  //
   static bool AFTime_KeystrokeEx(CJS_Runtime* pRuntime,
                                  const std::vector<CJS_Value>& params,
                                  CJS_Value& vRet,
-                                 CFX_WideString& sError);
+                                 WideString& sError);
   static bool AFTime_Format(CJS_Runtime* pRuntime,
                             const std::vector<CJS_Value>& params,
                             CJS_Value& vRet,
-                            CFX_WideString& sError);
+                            WideString& sError);
   static bool AFTime_Keystroke(CJS_Runtime* pRuntime,
                                const std::vector<CJS_Value>& params,
                                CJS_Value& vRet,
-                               CFX_WideString& sError);
+                               WideString& sError);
   static bool AFSpecial_Format(CJS_Runtime* pRuntime,
                                const std::vector<CJS_Value>& params,
                                CJS_Value& vRet,
-                               CFX_WideString& sError);
+                               WideString& sError);
   static bool AFSpecial_Keystroke(CJS_Runtime* pRuntime,
                                   const std::vector<CJS_Value>& params,
                                   CJS_Value& vRet,
-                                  CFX_WideString& sError);
+                                  WideString& sError);
   static bool AFSpecial_KeystrokeEx(CJS_Runtime* pRuntime,
                                     const std::vector<CJS_Value>& params,
                                     CJS_Value& vRet,
-                                    CFX_WideString& sError);  //
+                                    WideString& sError);  //
   static bool AFSimple(CJS_Runtime* pRuntime,
                        const std::vector<CJS_Value>& params,
                        CJS_Value& vRet,
-                       CFX_WideString& sError);
+                       WideString& sError);
   static bool AFMakeNumber(CJS_Runtime* pRuntime,
                            const std::vector<CJS_Value>& params,
                            CJS_Value& vRet,
-                           CFX_WideString& sError);
+                           WideString& sError);
   static bool AFSimple_Calculate(CJS_Runtime* pRuntime,
                                  const std::vector<CJS_Value>& params,
                                  CJS_Value& vRet,
-                                 CFX_WideString& sError);
+                                 WideString& sError);
   static bool AFRange_Validate(CJS_Runtime* pRuntime,
                                const std::vector<CJS_Value>& params,
                                CJS_Value& vRet,
-                               CFX_WideString& sError);
+                               WideString& sError);
   static bool AFMergeChange(CJS_Runtime* pRuntime,
                             const std::vector<CJS_Value>& params,
                             CJS_Value& vRet,
-                            CFX_WideString& sError);
+                            WideString& sError);
   static bool AFParseDateEx(CJS_Runtime* pRuntime,
                             const std::vector<CJS_Value>& params,
                             CJS_Value& vRet,
-                            CFX_WideString& sError);
+                            WideString& sError);
   static bool AFExtractNums(CJS_Runtime* pRuntime,
                             const std::vector<CJS_Value>& params,
                             CJS_Value& vRet,
-                            CFX_WideString& sError);
+                            WideString& sError);
 
   JS_STATIC_GLOBAL_FUN(AFNumber_Format);
   JS_STATIC_GLOBAL_FUN(AFNumber_Keystroke);
@@ -132,23 +132,21 @@
 
   JS_STATIC_DECLARE_GLOBAL_FUN();
 
-  static int ParseStringInteger(const CFX_WideString& string,
+  static int ParseStringInteger(const WideString& string,
                                 FX_STRSIZE nStart,
                                 FX_STRSIZE& nSkip,
                                 FX_STRSIZE nMaxStep);
-  static CFX_WideString ParseStringString(const CFX_WideString& string,
-                                          FX_STRSIZE nStart,
-                                          FX_STRSIZE& nSkip);
-  static double MakeRegularDate(const CFX_WideString& value,
-                                const CFX_WideString& format,
+  static WideString ParseStringString(const WideString& string,
+                                      FX_STRSIZE nStart,
+                                      FX_STRSIZE& nSkip);
+  static double MakeRegularDate(const WideString& value,
+                                const WideString& format,
                                 bool* bWrongFormat);
-  static CFX_WideString MakeFormatDate(double dDate,
-                                       const CFX_WideString& format);
-  static double ParseNormalDate(const CFX_WideString& value,
-                                bool* bWrongFormat);
-  static double MakeInterDate(const CFX_WideString& value);
+  static WideString MakeFormatDate(double dDate, const WideString& format);
+  static double ParseNormalDate(const WideString& value, bool* bWrongFormat);
+  static double MakeInterDate(const WideString& value);
 
-  static bool IsNumber(const CFX_WideString& str);
+  static bool IsNumber(const WideString& str);
 
   static bool maskSatisfied(wchar_t c_Change, wchar_t c_Mask);
   static bool isReservedMaskChar(wchar_t ch);
diff --git a/fpdfsdk/javascript/app.cpp b/fpdfsdk/javascript/app.cpp
index 246db66..3c0f9af 100644
--- a/fpdfsdk/javascript/app.cpp
+++ b/fpdfsdk/javascript/app.cpp
@@ -28,7 +28,7 @@
               CPDFSDK_FormFillEnvironment* pFormFillEnv,
               CJS_Runtime* pRuntime,
               int nType,
-              const CFX_WideString& script,
+              const WideString& script,
               uint32_t dwElapse,
               uint32_t dwTimeOut);
   ~GlobalTimer();
@@ -40,7 +40,7 @@
   uint32_t GetTimeOut() const { return m_dwTimeOut; }
   int GetTimerID() const { return m_nTimerID; }
   CJS_Runtime* GetRuntime() const { return m_pRuntime.Get(); }
-  CFX_WideString GetJScript() const { return m_swJScript; }
+  WideString GetJScript() const { return m_swJScript; }
 
  private:
   using TimerMap = std::map<uint32_t, GlobalTimer*>;
@@ -53,7 +53,7 @@
   // data
   const int m_nType;  // 0:Interval; 1:TimeOut
   const uint32_t m_dwTimeOut;
-  const CFX_WideString m_swJScript;
+  const WideString m_swJScript;
   CJS_Runtime::ObservedPtr m_pRuntime;
   CPDFSDK_FormFillEnvironment::ObservedPtr m_pFormFillEnv;
 };
@@ -62,7 +62,7 @@
                          CPDFSDK_FormFillEnvironment* pFormFillEnv,
                          CJS_Runtime* pRuntime,
                          int nType,
-                         const CFX_WideString& script,
+                         const WideString& script,
                          uint32_t dwElapse,
                          uint32_t dwTimeOut)
     : m_nTimerID(0),
@@ -209,7 +209,7 @@
 
 bool app::activeDocs(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
-                     CFX_WideString& sError) {
+                     WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
@@ -230,7 +230,7 @@
 
 bool app::calculate(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
-                    CFX_WideString& sError) {
+                    WideString& sError) {
   if (vp.IsSetting()) {
     bool bVP;
     vp >> bVP;
@@ -244,7 +244,7 @@
 
 bool app::formsVersion(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
-                       CFX_WideString& sError) {
+                       WideString& sError) {
   if (vp.IsGetting()) {
     vp << JS_NUM_FORMSVERSION;
     return true;
@@ -255,7 +255,7 @@
 
 bool app::viewerType(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
-                     CFX_WideString& sError) {
+                     WideString& sError) {
   if (vp.IsGetting()) {
     vp << JS_STR_VIEWERTYPE;
     return true;
@@ -266,7 +266,7 @@
 
 bool app::viewerVariation(CJS_Runtime* pRuntime,
                           CJS_PropValue& vp,
-                          CFX_WideString& sError) {
+                          WideString& sError) {
   if (vp.IsGetting()) {
     vp << JS_STR_VIEWERVARIATION;
     return true;
@@ -277,7 +277,7 @@
 
 bool app::viewerVersion(CJS_Runtime* pRuntime,
                         CJS_PropValue& vp,
-                        CFX_WideString& sError) {
+                        WideString& sError) {
   if (!vp.IsGetting())
     return false;
 #ifdef PDF_ENABLE_XFA
@@ -294,14 +294,14 @@
 
 bool app::platform(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
-                   CFX_WideString& sError) {
+                   WideString& sError) {
   if (!vp.IsGetting())
     return false;
 #ifdef PDF_ENABLE_XFA
   CPDFSDK_FormFillEnvironment* pFormFillEnv = pRuntime->GetFormFillEnv();
   if (!pFormFillEnv)
     return false;
-  CFX_WideString platfrom = pFormFillEnv->GetPlatform();
+  WideString platfrom = pFormFillEnv->GetPlatform();
   if (!platfrom.IsEmpty()) {
     vp << platfrom;
     return true;
@@ -313,14 +313,14 @@
 
 bool app::language(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
-                   CFX_WideString& sError) {
+                   WideString& sError) {
   if (!vp.IsGetting())
     return false;
 #ifdef PDF_ENABLE_XFA
   CPDFSDK_FormFillEnvironment* pFormFillEnv = pRuntime->GetFormFillEnv();
   if (!pFormFillEnv)
     return false;
-  CFX_WideString language = pFormFillEnv->GetLanguage();
+  WideString language = pFormFillEnv->GetLanguage();
   if (!language.IsEmpty()) {
     vp << language;
     return true;
@@ -337,7 +337,7 @@
 bool app::newFDF(CJS_Runtime* pRuntime,
                  const std::vector<CJS_Value>& params,
                  CJS_Value& vRet,
-                 CFX_WideString& sError) {
+                 WideString& sError) {
   return true;
 }
 // opens a specified pdf document and returns its document object
@@ -350,14 +350,14 @@
 bool app::openFDF(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
-                  CFX_WideString& sError) {
+                  WideString& sError) {
   return true;
 }
 
 bool app::alert(CJS_Runtime* pRuntime,
                 const std::vector<CJS_Value>& params,
                 CJS_Value& vRet,
-                CFX_WideString& sError) {
+                WideString& sError) {
   std::vector<CJS_Value> newParams = JS_ExpandKeywordParams(
       pRuntime, params, 4, L"cMsg", L"nIcon", L"nType", L"cTitle");
 
@@ -372,7 +372,7 @@
     return true;
   }
 
-  CFX_WideString swMsg;
+  WideString swMsg;
   if (newParams[0].GetType() == CJS_Value::VT_object) {
     CJS_Array carray;
     if (newParams[0].ConvertToArray(pRuntime, carray)) {
@@ -400,7 +400,7 @@
   if (newParams[2].GetType() != CJS_Value::VT_unknown)
     iType = newParams[2].ToInt(pRuntime);
 
-  CFX_WideString swTitle;
+  WideString swTitle;
   if (newParams[3].GetType() != CJS_Value::VT_unknown)
     swTitle = newParams[3].ToCFXWideString(pRuntime);
   else
@@ -418,7 +418,7 @@
 bool app::beep(CJS_Runtime* pRuntime,
                const std::vector<CJS_Value>& params,
                CJS_Value& vRet,
-               CFX_WideString& sError) {
+               WideString& sError) {
   if (params.size() == 1) {
     pRuntime->GetFormFillEnv()->JS_appBeep(params[0].ToInt(pRuntime));
     return true;
@@ -431,31 +431,31 @@
 bool app::findComponent(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
-                        CFX_WideString& sError) {
+                        WideString& sError) {
   return true;
 }
 
 bool app::popUpMenuEx(CJS_Runtime* pRuntime,
                       const std::vector<CJS_Value>& params,
                       CJS_Value& vRet,
-                      CFX_WideString& sError) {
+                      WideString& sError) {
   return false;
 }
 
-bool app::fs(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError) {
+bool app::fs(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError) {
   return false;
 }
 
 bool app::setInterval(CJS_Runtime* pRuntime,
                       const std::vector<CJS_Value>& params,
                       CJS_Value& vRet,
-                      CFX_WideString& sError) {
+                      WideString& sError) {
   if (params.size() > 2 || params.size() == 0) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
   }
 
-  CFX_WideString script =
+  WideString script =
       params.size() > 0 ? params[0].ToCFXWideString(pRuntime) : L"";
   if (script.IsEmpty()) {
     sError = JSGetStringFromID(IDS_STRING_JSAFNUMBER_KEYSTROKE);
@@ -485,13 +485,13 @@
 bool app::setTimeOut(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
-                     CFX_WideString& sError) {
+                     WideString& sError) {
   if (params.size() > 2 || params.size() == 0) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
   }
 
-  CFX_WideString script = params[0].ToCFXWideString(pRuntime);
+  WideString script = params[0].ToCFXWideString(pRuntime);
   if (script.IsEmpty()) {
     sError = JSGetStringFromID(IDS_STRING_JSAFNUMBER_KEYSTROKE);
     return true;
@@ -519,7 +519,7 @@
 bool app::clearTimeOut(CJS_Runtime* pRuntime,
                        const std::vector<CJS_Value>& params,
                        CJS_Value& vRet,
-                       CFX_WideString& sError) {
+                       WideString& sError) {
   if (params.size() != 1) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
@@ -532,7 +532,7 @@
 bool app::clearInterval(CJS_Runtime* pRuntime,
                         const std::vector<CJS_Value>& params,
                         CJS_Value& vRet,
-                        CFX_WideString& sError) {
+                        WideString& sError) {
   if (params.size() != 1) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
@@ -564,7 +564,7 @@
 bool app::execMenuItem(CJS_Runtime* pRuntime,
                        const std::vector<CJS_Value>& params,
                        CJS_Value& vRet,
-                       CFX_WideString& sError) {
+                       WideString& sError) {
   return false;
 }
 
@@ -578,11 +578,11 @@
   m_Timers.erase(pdfium::FakeUniquePtr<GlobalTimer>(pTimer));
 }
 
-void app::RunJsScript(CJS_Runtime* pRuntime, const CFX_WideString& wsScript) {
+void app::RunJsScript(CJS_Runtime* pRuntime, const WideString& wsScript) {
   if (!pRuntime->IsBlocking()) {
     IJS_EventContext* pContext = pRuntime->NewEventContext();
     pContext->OnExternal_Exec();
-    CFX_WideString wtInfo;
+    WideString wtInfo;
     pContext->RunScript(wsScript, &wtInfo);
     pRuntime->ReleaseEventContext(pContext);
   }
@@ -591,7 +591,7 @@
 bool app::goBack(CJS_Runtime* pRuntime,
                  const std::vector<CJS_Value>& params,
                  CJS_Value& vRet,
-                 CFX_WideString& sError) {
+                 WideString& sError) {
   // Not supported.
   return true;
 }
@@ -599,7 +599,7 @@
 bool app::goForward(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
-                    CFX_WideString& sError) {
+                    WideString& sError) {
   // Not supported.
   return true;
 }
@@ -607,7 +607,7 @@
 bool app::mailMsg(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
-                  CFX_WideString& sError) {
+                  WideString& sError) {
   std::vector<CJS_Value> newParams =
       JS_ExpandKeywordParams(pRuntime, params, 6, L"bUI", L"cTo", L"cCc",
                              L"cBcc", L"cSubject", L"cMsg");
@@ -618,7 +618,7 @@
   }
   bool bUI = newParams[0].ToBool(pRuntime);
 
-  CFX_WideString cTo;
+  WideString cTo;
   if (newParams[1].GetType() != CJS_Value::VT_unknown) {
     cTo = newParams[1].ToCFXWideString(pRuntime);
   } else {
@@ -629,19 +629,19 @@
     }
   }
 
-  CFX_WideString cCc;
+  WideString cCc;
   if (newParams[2].GetType() != CJS_Value::VT_unknown)
     cCc = newParams[2].ToCFXWideString(pRuntime);
 
-  CFX_WideString cBcc;
+  WideString cBcc;
   if (newParams[3].GetType() != CJS_Value::VT_unknown)
     cBcc = newParams[3].ToCFXWideString(pRuntime);
 
-  CFX_WideString cSubject;
+  WideString cSubject;
   if (newParams[4].GetType() != CJS_Value::VT_unknown)
     cSubject = newParams[4].ToCFXWideString(pRuntime);
 
-  CFX_WideString cMsg;
+  WideString cMsg;
   if (newParams[5].GetType() != CJS_Value::VT_unknown)
     cMsg = newParams[5].ToCFXWideString(pRuntime);
 
@@ -656,14 +656,14 @@
 bool app::launchURL(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
-                    CFX_WideString& sError) {
+                    WideString& sError) {
   // Unsafe, not supported.
   return true;
 }
 
 bool app::runtimeHighlight(CJS_Runtime* pRuntime,
                            CJS_PropValue& vp,
-                           CFX_WideString& sError) {
+                           WideString& sError) {
   if (vp.IsSetting()) {
     vp >> m_bRuntimeHighLight;
   } else {
@@ -674,27 +674,27 @@
 
 bool app::fullscreen(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
-                     CFX_WideString& sError) {
+                     WideString& sError) {
   return false;
 }
 
 bool app::popUpMenu(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
-                    CFX_WideString& sError) {
+                    WideString& sError) {
   return false;
 }
 
 bool app::browseForDoc(CJS_Runtime* pRuntime,
                        const std::vector<CJS_Value>& params,
                        CJS_Value& vRet,
-                       CFX_WideString& sError) {
+                       WideString& sError) {
   // Unsafe, not supported.
   return true;
 }
 
-CFX_WideString app::SysPathToPDFPath(const CFX_WideString& sOldPath) {
-  CFX_WideString sRet = L"/";
+WideString app::SysPathToPDFPath(const WideString& sOldPath) {
+  WideString sRet = L"/";
   for (const wchar_t& c : sOldPath) {
     if (c != L':')
       sRet += (c == L'\\') ? L'/' : c;
@@ -705,21 +705,21 @@
 bool app::newDoc(CJS_Runtime* pRuntime,
                  const std::vector<CJS_Value>& params,
                  CJS_Value& vRet,
-                 CFX_WideString& sError) {
+                 WideString& sError) {
   return false;
 }
 
 bool app::openDoc(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
-                  CFX_WideString& sError) {
+                  WideString& sError) {
   return false;
 }
 
 bool app::response(CJS_Runtime* pRuntime,
                    const std::vector<CJS_Value>& params,
                    CJS_Value& vRet,
-                   CFX_WideString& sError) {
+                   WideString& sError) {
   std::vector<CJS_Value> newParams =
       JS_ExpandKeywordParams(pRuntime, params, 5, L"cQuestion", L"cTitle",
                              L"cDefault", L"bPassword", L"cLabel");
@@ -728,13 +728,13 @@
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
   }
-  CFX_WideString swQuestion = newParams[0].ToCFXWideString(pRuntime);
+  WideString swQuestion = newParams[0].ToCFXWideString(pRuntime);
 
-  CFX_WideString swTitle = L"PDF";
+  WideString swTitle = L"PDF";
   if (newParams[1].GetType() != CJS_Value::VT_unknown)
     swTitle = newParams[1].ToCFXWideString(pRuntime);
 
-  CFX_WideString swDefault;
+  WideString swDefault;
   if (newParams[2].GetType() != CJS_Value::VT_unknown)
     swDefault = newParams[2].ToCFXWideString(pRuntime);
 
@@ -742,7 +742,7 @@
   if (newParams[3].GetType() != CJS_Value::VT_unknown)
     bPassword = newParams[3].ToBool(pRuntime);
 
-  CFX_WideString swLabel;
+  WideString swLabel;
   if (newParams[4].GetType() != CJS_Value::VT_unknown)
     swLabel = newParams[4].ToCFXWideString(pRuntime);
 
@@ -757,7 +757,7 @@
     return false;
   }
 
-  vRet = CJS_Value(pRuntime, CFX_WideString::FromUTF16LE(
+  vRet = CJS_Value(pRuntime, WideString::FromUTF16LE(
                                  reinterpret_cast<uint16_t*>(pBuff.data()),
                                  nLengthBytes / sizeof(uint16_t))
                                  .c_str());
@@ -765,15 +765,13 @@
   return true;
 }
 
-bool app::media(CJS_Runtime* pRuntime,
-                CJS_PropValue& vp,
-                CFX_WideString& sError) {
+bool app::media(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError) {
   return false;
 }
 
 bool app::execDialog(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
-                     CFX_WideString& sError) {
+                     WideString& sError) {
   return true;
 }
diff --git a/fpdfsdk/javascript/app.h b/fpdfsdk/javascript/app.h
index 0a2cfdb..e77c8cd 100644
--- a/fpdfsdk/javascript/app.h
+++ b/fpdfsdk/javascript/app.h
@@ -41,132 +41,120 @@
   explicit app(CJS_Object* pJSObject);
   ~app() override;
 
-  bool activeDocs(CJS_Runtime* pRuntime,
-                  CJS_PropValue& vp,
-                  CFX_WideString& sError);
-  bool calculate(CJS_Runtime* pRuntime,
-                 CJS_PropValue& vp,
-                 CFX_WideString& sError);
+  bool activeDocs(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool calculate(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
   bool formsVersion(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
-                    CFX_WideString& sError);
-  bool fs(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool fullscreen(CJS_Runtime* pRuntime,
-                  CJS_PropValue& vp,
-                  CFX_WideString& sError);
-  bool language(CJS_Runtime* pRuntime,
-                CJS_PropValue& vp,
-                CFX_WideString& sError);
-  bool media(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool platform(CJS_Runtime* pRuntime,
-                CJS_PropValue& vp,
-                CFX_WideString& sError);
+                    WideString& sError);
+  bool fs(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool fullscreen(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool language(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool media(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool platform(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
   bool runtimeHighlight(CJS_Runtime* pRuntime,
                         CJS_PropValue& vp,
-                        CFX_WideString& sError);
-  bool viewerType(CJS_Runtime* pRuntime,
-                  CJS_PropValue& vp,
-                  CFX_WideString& sError);
+                        WideString& sError);
+  bool viewerType(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
   bool viewerVariation(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
-                       CFX_WideString& sError);
+                       WideString& sError);
   bool viewerVersion(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
-                     CFX_WideString& sError);
+                     WideString& sError);
 
   bool alert(CJS_Runtime* pRuntime,
              const std::vector<CJS_Value>& params,
              CJS_Value& vRet,
-             CFX_WideString& sError);
+             WideString& sError);
   bool beep(CJS_Runtime* pRuntime,
             const std::vector<CJS_Value>& params,
             CJS_Value& vRet,
-            CFX_WideString& sError);
+            WideString& sError);
   bool browseForDoc(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
-                    CFX_WideString& sError);
+                    WideString& sError);
   bool clearInterval(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
-                     CFX_WideString& sError);
+                     WideString& sError);
   bool clearTimeOut(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
-                    CFX_WideString& sError);
+                    WideString& sError);
   bool execDialog(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
-                  CFX_WideString& sError);
+                  WideString& sError);
   bool execMenuItem(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
-                    CFX_WideString& sError);
+                    WideString& sError);
   bool findComponent(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
-                     CFX_WideString& sError);
+                     WideString& sError);
   bool goBack(CJS_Runtime* pRuntime,
               const std::vector<CJS_Value>& params,
               CJS_Value& vRet,
-              CFX_WideString& sError);
+              WideString& sError);
   bool goForward(CJS_Runtime* pRuntime,
                  const std::vector<CJS_Value>& params,
                  CJS_Value& vRet,
-                 CFX_WideString& sError);
+                 WideString& sError);
   bool launchURL(CJS_Runtime* pRuntime,
                  const std::vector<CJS_Value>& params,
                  CJS_Value& vRet,
-                 CFX_WideString& sError);
+                 WideString& sError);
   bool mailMsg(CJS_Runtime* pRuntime,
                const std::vector<CJS_Value>& params,
                CJS_Value& vRet,
-               CFX_WideString& sError);
+               WideString& sError);
   bool newFDF(CJS_Runtime* pRuntime,
               const std::vector<CJS_Value>& params,
               CJS_Value& vRet,
-              CFX_WideString& sError);
+              WideString& sError);
   bool newDoc(CJS_Runtime* pRuntime,
               const std::vector<CJS_Value>& params,
               CJS_Value& vRet,
-              CFX_WideString& sError);
+              WideString& sError);
   bool openDoc(CJS_Runtime* pRuntime,
                const std::vector<CJS_Value>& params,
                CJS_Value& vRet,
-               CFX_WideString& sError);
+               WideString& sError);
   bool openFDF(CJS_Runtime* pRuntime,
                const std::vector<CJS_Value>& params,
                CJS_Value& vRet,
-               CFX_WideString& sError);
+               WideString& sError);
   bool popUpMenuEx(CJS_Runtime* pRuntime,
                    const std::vector<CJS_Value>& params,
                    CJS_Value& vRet,
-                   CFX_WideString& sError);
+                   WideString& sError);
   bool popUpMenu(CJS_Runtime* pRuntime,
                  const std::vector<CJS_Value>& params,
                  CJS_Value& vRet,
-                 CFX_WideString& sError);
+                 WideString& sError);
   bool response(CJS_Runtime* pRuntime,
                 const std::vector<CJS_Value>& params,
                 CJS_Value& vRet,
-                CFX_WideString& sError);
+                WideString& sError);
   bool setInterval(CJS_Runtime* pRuntime,
                    const std::vector<CJS_Value>& params,
                    CJS_Value& vRet,
-                   CFX_WideString& sError);
+                   WideString& sError);
   bool setTimeOut(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
-                  CFX_WideString& sError);
+                  WideString& sError);
 
   void TimerProc(GlobalTimer* pTimer);
   void CancelProc(GlobalTimer* pTimer);
 
-  static CFX_WideString SysPathToPDFPath(const CFX_WideString& sOldPath);
+  static WideString SysPathToPDFPath(const WideString& sOldPath);
 
  private:
   // CJS_EmbedObj
-  void RunJsScript(CJS_Runtime* pRuntime, const CFX_WideString& wsScript);
+  void RunJsScript(CJS_Runtime* pRuntime, const WideString& wsScript);
 
   void ClearTimerCommon(CJS_Runtime* pRuntime, const CJS_Value& param);
 
diff --git a/fpdfsdk/javascript/cjs_event_context.cpp b/fpdfsdk/javascript/cjs_event_context.cpp
index 9537ac9..b820bc3 100644
--- a/fpdfsdk/javascript/cjs_event_context.cpp
+++ b/fpdfsdk/javascript/cjs_event_context.cpp
@@ -24,8 +24,7 @@
   return m_pRuntime->GetFormFillEnv();
 }
 
-bool CJS_EventContext::RunScript(const CFX_WideString& script,
-                                 CFX_WideString* info) {
+bool CJS_EventContext::RunScript(const WideString& script, WideString* info) {
   v8::Isolate::Scope isolate_scope(m_pRuntime->GetIsolate());
   v8::HandleScope handle_scope(m_pRuntime->GetIsolate());
   v8::Local<v8::Context> context = m_pRuntime->NewLocalContext();
@@ -47,7 +46,7 @@
     return false;
   }
 
-  CFX_WideString sErrorMessage;
+  WideString sErrorMessage;
   int nRet = 0;
   if (script.GetLength() > 0)
     nRet = m_pRuntime->ExecuteScript(script.c_str(), &sErrorMessage);
@@ -67,7 +66,7 @@
 }
 
 void CJS_EventContext::OnDoc_Open(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                                  const CFX_WideString& strTargetName) {
+                                  const WideString& strTargetName) {
   m_pEventHandler->OnDoc_Open(pFormFillEnv, strTargetName);
 }
 
@@ -141,39 +140,39 @@
 void CJS_EventContext::OnField_Focus(bool bModifier,
                                      bool bShift,
                                      CPDF_FormField* pTarget,
-                                     const CFX_WideString& Value) {
+                                     const WideString& Value) {
   m_pEventHandler->OnField_Focus(bModifier, bShift, pTarget, Value);
 }
 
 void CJS_EventContext::OnField_Blur(bool bModifier,
                                     bool bShift,
                                     CPDF_FormField* pTarget,
-                                    const CFX_WideString& Value) {
+                                    const WideString& Value) {
   m_pEventHandler->OnField_Blur(bModifier, bShift, pTarget, Value);
 }
 
 void CJS_EventContext::OnField_Calculate(CPDF_FormField* pSource,
                                          CPDF_FormField* pTarget,
-                                         CFX_WideString& Value,
+                                         WideString& Value,
                                          bool& bRc) {
   m_pEventHandler->OnField_Calculate(pSource, pTarget, Value, bRc);
 }
 
 void CJS_EventContext::OnField_Format(CPDF_FormField* pTarget,
-                                      CFX_WideString& Value,
+                                      WideString& Value,
                                       bool bWillCommit) {
   m_pEventHandler->OnField_Format(pTarget, Value, bWillCommit);
 }
 
-void CJS_EventContext::OnField_Keystroke(CFX_WideString& strChange,
-                                         const CFX_WideString& strChangeEx,
+void CJS_EventContext::OnField_Keystroke(WideString& strChange,
+                                         const WideString& strChangeEx,
                                          bool bKeyDown,
                                          bool bModifier,
                                          int& nSelEnd,
                                          int& nSelStart,
                                          bool bShift,
                                          CPDF_FormField* pTarget,
-                                         CFX_WideString& Value,
+                                         WideString& Value,
                                          bool bWillCommit,
                                          bool bFieldFull,
                                          bool& bRc) {
@@ -182,13 +181,13 @@
       pTarget, Value, bWillCommit, bFieldFull, bRc);
 }
 
-void CJS_EventContext::OnField_Validate(CFX_WideString& strChange,
-                                        const CFX_WideString& strChangeEx,
+void CJS_EventContext::OnField_Validate(WideString& strChange,
+                                        const WideString& strChangeEx,
                                         bool bKeyDown,
                                         bool bModifier,
                                         bool bShift,
                                         CPDF_FormField* pTarget,
-                                        CFX_WideString& Value,
+                                        WideString& Value,
                                         bool& bRc) {
   m_pEventHandler->OnField_Validate(strChange, strChangeEx, bKeyDown, bModifier,
                                     bShift, pTarget, Value, bRc);
@@ -276,6 +275,6 @@
 }
 
 void CJS_EventContext::OnMenu_Exec(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                                   const CFX_WideString& strTargetName) {
+                                   const WideString& strTargetName) {
   m_pEventHandler->OnMenu_Exec(pFormFillEnv, strTargetName);
 }
diff --git a/fpdfsdk/javascript/cjs_event_context.h b/fpdfsdk/javascript/cjs_event_context.h
index 715bd94..a27bbd7 100644
--- a/fpdfsdk/javascript/cjs_event_context.h
+++ b/fpdfsdk/javascript/cjs_event_context.h
@@ -24,10 +24,10 @@
   ~CJS_EventContext() override;
 
   // IJS_EventContext
-  bool RunScript(const CFX_WideString& script, CFX_WideString* info) override;
+  bool RunScript(const WideString& script, WideString* info) override;
   void OnApp_Init() override;
   void OnDoc_Open(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                  const CFX_WideString& strTargetName) override;
+                  const WideString& strTargetName) override;
   void OnDoc_WillPrint(CPDFSDK_FormFillEnvironment* pFormFillEnv) override;
   void OnDoc_DidPrint(CPDFSDK_FormFillEnvironment* pFormFillEnv) override;
   void OnDoc_WillSave(CPDFSDK_FormFillEnvironment* pFormFillEnv) override;
@@ -52,37 +52,37 @@
   void OnField_Focus(bool bModifier,
                      bool bShift,
                      CPDF_FormField* pTarget,
-                     const CFX_WideString& Value) override;
+                     const WideString& Value) override;
   void OnField_Blur(bool bModifier,
                     bool bShift,
                     CPDF_FormField* pTarget,
-                    const CFX_WideString& Value) override;
+                    const WideString& Value) override;
   void OnField_Calculate(CPDF_FormField* pSource,
                          CPDF_FormField* pTarget,
-                         CFX_WideString& Value,
+                         WideString& Value,
                          bool& bRc) override;
   void OnField_Format(CPDF_FormField* pTarget,
-                      CFX_WideString& Value,
+                      WideString& Value,
                       bool bWillCommit) override;
-  void OnField_Keystroke(CFX_WideString& strChange,
-                         const CFX_WideString& strChangeEx,
+  void OnField_Keystroke(WideString& strChange,
+                         const WideString& strChangeEx,
                          bool bKeyDown,
                          bool bModifier,
                          int& nSelEnd,
                          int& nSelStart,
                          bool bShift,
                          CPDF_FormField* pTarget,
-                         CFX_WideString& Value,
+                         WideString& Value,
                          bool bWillCommit,
                          bool bFieldFull,
                          bool& bRc) override;
-  void OnField_Validate(CFX_WideString& strChange,
-                        const CFX_WideString& strChangeEx,
+  void OnField_Validate(WideString& strChange,
+                        const WideString& strChangeEx,
                         bool bKeyDown,
                         bool bModifier,
                         bool bShift,
                         CPDF_FormField* pTarget,
-                        CFX_WideString& Value,
+                        WideString& Value,
                         bool& bRc) override;
   void OnScreen_Focus(bool bModifier,
                       bool bShift,
@@ -117,7 +117,7 @@
   void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) override;
   void OnLink_MouseUp(CPDFSDK_FormFillEnvironment* pFormFillEnv) override;
   void OnMenu_Exec(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                   const CFX_WideString& strTargetName) override;
+                   const WideString& strTargetName) override;
   void OnBatchExec(CPDFSDK_FormFillEnvironment* pFormFillEnv) override;
   void OnConsole_Exec() override;
   void OnExternal_Exec() override;
diff --git a/fpdfsdk/javascript/cjs_runtime.cpp b/fpdfsdk/javascript/cjs_runtime.cpp
index 515bdcb..720a15b 100644
--- a/fpdfsdk/javascript/cjs_runtime.cpp
+++ b/fpdfsdk/javascript/cjs_runtime.cpp
@@ -193,8 +193,7 @@
   return m_pFormFillEnv.Get();
 }
 
-int CJS_Runtime::ExecuteScript(const CFX_WideString& script,
-                               CFX_WideString* info) {
+int CJS_Runtime::ExecuteScript(const WideString& script, WideString* info) {
   FXJSErr error = {};
   int nRet = Execute(script, &error);
   if (nRet < 0) {
@@ -213,13 +212,13 @@
 }
 
 #ifdef PDF_ENABLE_XFA
-CFX_WideString ChangeObjName(const CFX_WideString& str) {
-  CFX_WideString sRet = str;
+WideString ChangeObjName(const WideString& str) {
+  WideString sRet = str;
   sRet.Replace(L"_", L".");
   return sRet;
 }
 
-bool CJS_Runtime::GetValueByName(const CFX_ByteStringC& utf8Name,
+bool CJS_Runtime::GetValueByName(const ByteStringView& utf8Name,
                                  CFXJSE_Value* pValue) {
   v8::Isolate::Scope isolate_scope(GetIsolate());
   v8::HandleScope handle_scope(GetIsolate());
@@ -236,7 +235,7 @@
   return true;
 }
 
-bool CJS_Runtime::SetValueByName(const CFX_ByteStringC& utf8Name,
+bool CJS_Runtime::SetValueByName(const ByteStringView& utf8Name,
                                  CFXJSE_Value* pValue) {
   if (utf8Name.IsEmpty() || !pValue)
     return false;
diff --git a/fpdfsdk/javascript/cjs_runtime.h b/fpdfsdk/javascript/cjs_runtime.h
index bfbc52b..3991995 100644
--- a/fpdfsdk/javascript/cjs_runtime.h
+++ b/fpdfsdk/javascript/cjs_runtime.h
@@ -25,7 +25,7 @@
                     public CFXJS_Engine,
                     public CFX_Observable<CJS_Runtime> {
  public:
-  using FieldEvent = std::pair<CFX_WideString, JS_EVENT_T>;
+  using FieldEvent = std::pair<WideString, JS_EVENT_T>;
 
   static CJS_Runtime* CurrentRuntimeFromIsolate(v8::Isolate* pIsolate);
 
@@ -36,8 +36,7 @@
   IJS_EventContext* NewEventContext() override;
   void ReleaseEventContext(IJS_EventContext* pContext) override;
   CPDFSDK_FormFillEnvironment* GetFormFillEnv() const override;
-  int ExecuteScript(const CFX_WideString& script,
-                    CFX_WideString* info) override;
+  int ExecuteScript(const WideString& script, WideString* info) override;
 
   CJS_EventContext* GetCurrentEventContext() const;
 
@@ -50,9 +49,9 @@
   bool IsBlocking() const { return m_bBlocking; }
 
 #ifdef PDF_ENABLE_XFA
-  bool GetValueByName(const CFX_ByteStringC& utf8Name,
+  bool GetValueByName(const ByteStringView& utf8Name,
                       CFXJSE_Value* pValue) override;
-  bool SetValueByName(const CFX_ByteStringC& utf8Name,
+  bool SetValueByName(const ByteStringView& utf8Name,
                       CFXJSE_Value* pValue) override;
 #endif  // PDF_ENABLE_XFA
 
diff --git a/fpdfsdk/javascript/color.cpp b/fpdfsdk/javascript/color.cpp
index 7bf3cc9..574c81a 100644
--- a/fpdfsdk/javascript/color.cpp
+++ b/fpdfsdk/javascript/color.cpp
@@ -91,7 +91,7 @@
 
   CJS_Value value(pRuntime);
   array.GetElement(pRuntime, 0, value);
-  CFX_ByteString sSpace = value.ToCFXByteString(pRuntime);
+  ByteString sSpace = value.ToCFXByteString(pRuntime);
 
   double d1 = 0;
   double d2 = 0;
@@ -132,73 +132,65 @@
 
 bool color::transparent(CJS_Runtime* pRuntime,
                         CJS_PropValue& vp,
-                        CFX_WideString& sError) {
+                        WideString& sError) {
   return PropertyHelper(pRuntime, vp, &m_crTransparent);
 }
 
 bool color::black(CJS_Runtime* pRuntime,
                   CJS_PropValue& vp,
-                  CFX_WideString& sError) {
+                  WideString& sError) {
   return PropertyHelper(pRuntime, vp, &m_crBlack);
 }
 
 bool color::white(CJS_Runtime* pRuntime,
                   CJS_PropValue& vp,
-                  CFX_WideString& sError) {
+                  WideString& sError) {
   return PropertyHelper(pRuntime, vp, &m_crWhite);
 }
 
-bool color::red(CJS_Runtime* pRuntime,
-                CJS_PropValue& vp,
-                CFX_WideString& sError) {
+bool color::red(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError) {
   return PropertyHelper(pRuntime, vp, &m_crRed);
 }
 
 bool color::green(CJS_Runtime* pRuntime,
                   CJS_PropValue& vp,
-                  CFX_WideString& sError) {
+                  WideString& sError) {
   return PropertyHelper(pRuntime, vp, &m_crGreen);
 }
 
-bool color::blue(CJS_Runtime* pRuntime,
-                 CJS_PropValue& vp,
-                 CFX_WideString& sError) {
+bool color::blue(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError) {
   return PropertyHelper(pRuntime, vp, &m_crBlue);
 }
 
-bool color::cyan(CJS_Runtime* pRuntime,
-                 CJS_PropValue& vp,
-                 CFX_WideString& sError) {
+bool color::cyan(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError) {
   return PropertyHelper(pRuntime, vp, &m_crCyan);
 }
 
 bool color::magenta(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
-                    CFX_WideString& sError) {
+                    WideString& sError) {
   return PropertyHelper(pRuntime, vp, &m_crMagenta);
 }
 
 bool color::yellow(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
-                   CFX_WideString& sError) {
+                   WideString& sError) {
   return PropertyHelper(pRuntime, vp, &m_crYellow);
 }
 
 bool color::dkGray(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
-                   CFX_WideString& sError) {
+                   WideString& sError) {
   return PropertyHelper(pRuntime, vp, &m_crDKGray);
 }
 
-bool color::gray(CJS_Runtime* pRuntime,
-                 CJS_PropValue& vp,
-                 CFX_WideString& sError) {
+bool color::gray(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError) {
   return PropertyHelper(pRuntime, vp, &m_crGray);
 }
 
 bool color::ltGray(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
-                   CFX_WideString& sError) {
+                   WideString& sError) {
   return PropertyHelper(pRuntime, vp, &m_crLTGray);
 }
 
@@ -221,7 +213,7 @@
 bool color::convert(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
-                    CFX_WideString& sError) {
+                    WideString& sError) {
   int iSize = params.size();
   if (iSize < 2)
     return false;
@@ -233,7 +225,7 @@
   CFX_Color crSource;
   ConvertArrayToPWLColor(pRuntime, aSource, &crSource);
 
-  CFX_ByteString sDestSpace = params[1].ToCFXByteString(pRuntime);
+  ByteString sDestSpace = params[1].ToCFXByteString(pRuntime);
   int nColorType = COLORTYPE_TRANSPARENT;
 
   if (sDestSpace == "T") {
@@ -257,7 +249,7 @@
 bool color::equal(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
-                  CFX_WideString& sError) {
+                  WideString& sError) {
   if (params.size() < 2)
     return false;
 
diff --git a/fpdfsdk/javascript/color.h b/fpdfsdk/javascript/color.h
index 5d6a657..5e1e871 100644
--- a/fpdfsdk/javascript/color.h
+++ b/fpdfsdk/javascript/color.h
@@ -17,31 +17,29 @@
   explicit color(CJS_Object* pJSObject);
   ~color() override;
 
-  bool black(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool blue(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool cyan(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool dkGray(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool gray(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool green(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool ltGray(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool magenta(CJS_Runtime* pRuntime,
-               CJS_PropValue& vp,
-               CFX_WideString& sError);
-  bool red(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+  bool black(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool blue(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool cyan(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool dkGray(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool gray(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool green(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool ltGray(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool magenta(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool red(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
   bool transparent(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
-                   CFX_WideString& sError);
-  bool white(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool yellow(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
+                   WideString& sError);
+  bool white(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool yellow(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
 
   bool convert(CJS_Runtime* pRuntime,
                const std::vector<CJS_Value>& params,
                CJS_Value& vRet,
-               CFX_WideString& sError);
+               WideString& sError);
   bool equal(CJS_Runtime* pRuntime,
              const std::vector<CJS_Value>& params,
              CJS_Value& vRet,
-             CFX_WideString& sError);
+             WideString& sError);
 
   static void ConvertPWLColorToArray(CJS_Runtime* pRuntime,
                                      const CFX_Color& color,
diff --git a/fpdfsdk/javascript/console.cpp b/fpdfsdk/javascript/console.cpp
index e9d1308..4f0fd43 100644
--- a/fpdfsdk/javascript/console.cpp
+++ b/fpdfsdk/javascript/console.cpp
@@ -33,21 +33,21 @@
 bool console::clear(CJS_Runtime* pRuntime,
                     const std::vector<CJS_Value>& params,
                     CJS_Value& vRet,
-                    CFX_WideString& sError) {
+                    WideString& sError) {
   return true;
 }
 
 bool console::hide(CJS_Runtime* pRuntime,
                    const std::vector<CJS_Value>& params,
                    CJS_Value& vRet,
-                   CFX_WideString& sError) {
+                   WideString& sError) {
   return true;
 }
 
 bool console::println(CJS_Runtime* pRuntime,
                       const std::vector<CJS_Value>& params,
                       CJS_Value& vRet,
-                      CFX_WideString& sError) {
+                      WideString& sError) {
   if (params.size() < 1) {
     return false;
   }
@@ -57,6 +57,6 @@
 bool console::show(CJS_Runtime* pRuntime,
                    const std::vector<CJS_Value>& params,
                    CJS_Value& vRet,
-                   CFX_WideString& sError) {
+                   WideString& sError) {
   return true;
 }
diff --git a/fpdfsdk/javascript/console.h b/fpdfsdk/javascript/console.h
index a7e4d8e..4680220 100644
--- a/fpdfsdk/javascript/console.h
+++ b/fpdfsdk/javascript/console.h
@@ -20,19 +20,19 @@
   bool clear(CJS_Runtime* pRuntime,
              const std::vector<CJS_Value>& params,
              CJS_Value& vRet,
-             CFX_WideString& sError);
+             WideString& sError);
   bool hide(CJS_Runtime* pRuntime,
             const std::vector<CJS_Value>& params,
             CJS_Value& vRet,
-            CFX_WideString& sError);
+            WideString& sError);
   bool println(CJS_Runtime* pRuntime,
                const std::vector<CJS_Value>& params,
                CJS_Value& vRet,
-               CFX_WideString& sError);
+               WideString& sError);
   bool show(CJS_Runtime* pRuntime,
             const std::vector<CJS_Value>& params,
             CJS_Value& vRet,
-            CFX_WideString& sError);
+            WideString& sError);
 };
 
 class CJS_Console : public CJS_Object {
diff --git a/fpdfsdk/javascript/event.cpp b/fpdfsdk/javascript/event.cpp
index 2b00cbc..efc704d 100644
--- a/fpdfsdk/javascript/event.cpp
+++ b/fpdfsdk/javascript/event.cpp
@@ -48,10 +48,10 @@
 
 bool event::change(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
-                   CFX_WideString& sError) {
+                   WideString& sError) {
   CJS_EventHandler* pEvent =
       pRuntime->GetCurrentEventContext()->GetEventHandler();
-  CFX_WideString& wChange = pEvent->Change();
+  WideString& wChange = pEvent->Change();
   if (vp.IsSetting()) {
     if (vp.GetJSValue()->GetType() == CJS_Value::VT_string)
       vp >> wChange;
@@ -63,7 +63,7 @@
 
 bool event::changeEx(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
-                     CFX_WideString& sError) {
+                     WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
@@ -76,7 +76,7 @@
 
 bool event::commitKey(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
-                      CFX_WideString& sError) {
+                      WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
@@ -89,7 +89,7 @@
 
 bool event::fieldFull(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
-                      CFX_WideString& sError) {
+                      WideString& sError) {
   CJS_EventHandler* pEvent =
       pRuntime->GetCurrentEventContext()->GetEventHandler();
 
@@ -103,7 +103,7 @@
 
 bool event::keyDown(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
-                    CFX_WideString& sError) {
+                    WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
@@ -116,7 +116,7 @@
 
 bool event::modifier(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
-                     CFX_WideString& sError) {
+                     WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
@@ -127,9 +127,7 @@
   return true;
 }
 
-bool event::name(CJS_Runtime* pRuntime,
-                 CJS_PropValue& vp,
-                 CFX_WideString& sError) {
+bool event::name(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
@@ -140,9 +138,7 @@
   return true;
 }
 
-bool event::rc(CJS_Runtime* pRuntime,
-               CJS_PropValue& vp,
-               CFX_WideString& sError) {
+bool event::rc(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError) {
   CJS_EventHandler* pEvent =
       pRuntime->GetCurrentEventContext()->GetEventHandler();
 
@@ -157,25 +153,25 @@
 
 bool event::richChange(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
-                       CFX_WideString& sError) {
+                       WideString& sError) {
   return true;
 }
 
 bool event::richChangeEx(CJS_Runtime* pRuntime,
                          CJS_PropValue& vp,
-                         CFX_WideString& sError) {
+                         WideString& sError) {
   return true;
 }
 
 bool event::richValue(CJS_Runtime* pRuntime,
                       CJS_PropValue& vp,
-                      CFX_WideString& sError) {
+                      WideString& sError) {
   return true;
 }
 
 bool event::selEnd(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
-                   CFX_WideString& sError) {
+                   WideString& sError) {
   CJS_EventHandler* pEvent =
       pRuntime->GetCurrentEventContext()->GetEventHandler();
 
@@ -193,7 +189,7 @@
 
 bool event::selStart(CJS_Runtime* pRuntime,
                      CJS_PropValue& vp,
-                     CFX_WideString& sError) {
+                     WideString& sError) {
   CJS_EventHandler* pEvent =
       pRuntime->GetCurrentEventContext()->GetEventHandler();
 
@@ -211,7 +207,7 @@
 
 bool event::shift(CJS_Runtime* pRuntime,
                   CJS_PropValue& vp,
-                  CFX_WideString& sError) {
+                  WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
@@ -224,7 +220,7 @@
 
 bool event::source(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
-                   CFX_WideString& sError) {
+                   WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
@@ -237,7 +233,7 @@
 
 bool event::target(CJS_Runtime* pRuntime,
                    CJS_PropValue& vp,
-                   CFX_WideString& sError) {
+                   WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
@@ -250,7 +246,7 @@
 
 bool event::targetName(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
-                       CFX_WideString& sError) {
+                       WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
@@ -261,9 +257,7 @@
   return true;
 }
 
-bool event::type(CJS_Runtime* pRuntime,
-                 CJS_PropValue& vp,
-                 CFX_WideString& sError) {
+bool event::type(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
@@ -276,7 +270,7 @@
 
 bool event::value(CJS_Runtime* pRuntime,
                   CJS_PropValue& vp,
-                  CFX_WideString& sError) {
+                  WideString& sError) {
   CJS_EventHandler* pEvent =
       pRuntime->GetCurrentEventContext()->GetEventHandler();
 
@@ -286,7 +280,7 @@
   if (!pEvent->m_pValue)
     return false;
 
-  CFX_WideString& val = pEvent->Value();
+  WideString& val = pEvent->Value();
   if (vp.IsSetting())
     vp >> val;
   else
@@ -297,7 +291,7 @@
 
 bool event::willCommit(CJS_Runtime* pRuntime,
                        CJS_PropValue& vp,
-                       CFX_WideString& sError) {
+                       WideString& sError) {
   if (!vp.IsGetting())
     return false;
 
diff --git a/fpdfsdk/javascript/event.h b/fpdfsdk/javascript/event.h
index 2be8a0a..8574237 100644
--- a/fpdfsdk/javascript/event.h
+++ b/fpdfsdk/javascript/event.h
@@ -15,48 +15,28 @@
   ~event() override;
 
  public:
-  bool change(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool changeEx(CJS_Runtime* pRuntime,
-                CJS_PropValue& vp,
-                CFX_WideString& sError);
-  bool commitKey(CJS_Runtime* pRuntime,
-                 CJS_PropValue& vp,
-                 CFX_WideString& sError);
-  bool fieldFull(CJS_Runtime* pRuntime,
-                 CJS_PropValue& vp,
-                 CFX_WideString& sError);
-  bool keyDown(CJS_Runtime* pRuntime,
-               CJS_PropValue& vp,
-               CFX_WideString& sError);
-  bool modifier(CJS_Runtime* pRuntime,
-                CJS_PropValue& vp,
-                CFX_WideString& sError);
-  bool name(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool rc(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool richChange(CJS_Runtime* pRuntime,
-                  CJS_PropValue& vp,
-                  CFX_WideString& sError);
+  bool change(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool changeEx(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool commitKey(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool fieldFull(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool keyDown(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool modifier(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool name(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool rc(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool richChange(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
   bool richChangeEx(CJS_Runtime* pRuntime,
                     CJS_PropValue& vp,
-                    CFX_WideString& sError);
-  bool richValue(CJS_Runtime* pRuntime,
-                 CJS_PropValue& vp,
-                 CFX_WideString& sError);
-  bool selEnd(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool selStart(CJS_Runtime* pRuntime,
-                CJS_PropValue& vp,
-                CFX_WideString& sError);
-  bool shift(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool source(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool target(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool targetName(CJS_Runtime* pRuntime,
-                  CJS_PropValue& vp,
-                  CFX_WideString& sError);
-  bool type(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool value(CJS_Runtime* pRuntime, CJS_PropValue& vp, CFX_WideString& sError);
-  bool willCommit(CJS_Runtime* pRuntime,
-                  CJS_PropValue& vp,
-                  CFX_WideString& sError);
+                    WideString& sError);
+  bool richValue(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool selEnd(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool selStart(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool shift(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool source(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool target(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool targetName(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool type(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool value(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
+  bool willCommit(CJS_Runtime* pRuntime, CJS_PropValue& vp, WideString& sError);
 };
 
 class CJS_Event : public CJS_Object {
diff --git a/fpdfsdk/javascript/global.cpp b/fpdfsdk/javascript/global.cpp
index 8dcddf4..9827b2a 100644
--- a/fpdfsdk/javascript/global.cpp
+++ b/fpdfsdk/javascript/global.cpp
@@ -62,13 +62,13 @@
 }
 
 bool JSGlobalAlternate::QueryProperty(const wchar_t* propname) {
-  return CFX_WideString(propname) != L"setPersistent";
+  return WideString(propname) != L"setPersistent";
 }
 
 bool JSGlobalAlternate::DelProperty(CJS_Runtime* pRuntime,
                                     const wchar_t* propname,
-                                    CFX_WideString& sError) {
-  auto it = m_MapGlobal.find(CFX_ByteString::FromUnicode(propname));
+                                    WideString& sError) {
+  auto it = m_MapGlobal.find(ByteString::FromUnicode(propname));
   if (it == m_MapGlobal.end())
     return false;
 
@@ -79,9 +79,9 @@
 bool JSGlobalAlternate::DoProperty(CJS_Runtime* pRuntime,
                                    const wchar_t* propname,
                                    CJS_PropValue& vp,
-                                   CFX_WideString& sError) {
+                                   WideString& sError) {
   if (vp.IsSetting()) {
-    CFX_ByteString sPropName = CFX_ByteString::FromUnicode(propname);
+    ByteString sPropName = ByteString::FromUnicode(propname);
     switch (vp.GetJSValue()->GetType()) {
       case CJS_Value::VT_number: {
         double dData;
@@ -96,7 +96,7 @@
                                   bData, "", v8::Local<v8::Object>(), false);
       }
       case CJS_Value::VT_string: {
-        CFX_ByteString sData;
+        ByteString sData;
         vp >> sData;
         return SetGlobalVariables(sPropName, JS_GlobalDataType::STRING, 0,
                                   false, sData, v8::Local<v8::Object>(), false);
@@ -119,7 +119,7 @@
         break;
     }
   } else {
-    auto it = m_MapGlobal.find(CFX_ByteString::FromUnicode(propname));
+    auto it = m_MapGlobal.find(ByteString::FromUnicode(propname));
     if (it == m_MapGlobal.end()) {
       vp.GetJSValue()->SetNull(pRuntime);
       return true;
@@ -158,7 +158,7 @@
 bool JSGlobalAlternate::setPersistent(CJS_Runtime* pRuntime,
                                       const std::vector<CJS_Value>& params,
                                       CJS_Value& vRet,
-                                      CFX_WideString& sError) {
+                                      WideString& sError) {
   if (params.size() != 2) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
@@ -202,7 +202,7 @@
                            pData->bPersistent == 1);
         pRuntime->PutObjectProperty(
             m_pJSObject->ToV8Object(), pData->data.sKey.UTF8Decode(),
-            pRuntime->NewString(pData->data.sData.UTF8Decode().AsStringC()));
+            pRuntime->NewString(pData->data.sData.UTF8Decode().AsStringView()));
         break;
       case JS_GlobalDataType::OBJECT: {
         v8::Local<v8::Object> pObj = pRuntime->NewFxDynamicObj(-1);
@@ -229,7 +229,7 @@
 void JSGlobalAlternate::CommitGlobalPersisitentVariables(
     CJS_Runtime* pRuntime) {
   for (const auto& iter : m_MapGlobal) {
-    CFX_ByteString name = iter.first;
+    ByteString name = iter.first;
     JSGlobalData* pData = iter.second.get();
     if (pData->bDeleted) {
       m_pGlobalData->DeleteGlobalVariable(name);
@@ -267,9 +267,9 @@
 void JSGlobalAlternate::ObjectToArray(CJS_Runtime* pRuntime,
                                       v8::Local<v8::Object> pObj,
                                       CJS_GlobalVariableArray& array) {
-  std::vector<CFX_WideString> pKeyList = pRuntime->GetObjectPropertyNames(pObj);
+  std::vector<WideString> pKeyList = pRuntime->GetObjectPropertyNames(pObj);
   for (const auto& ws : pKeyList) {
-    CFX_ByteString sKey = ws.UTF8Encode();
+    ByteString sKey = ws.UTF8Encode();
     v8::Local<v8::Value> v = pRuntime->GetObjectProperty(pObj, ws);
     switch (CJS_Value::GetValueType(v)) {
       case CJS_Value::VT_number: {
@@ -287,8 +287,7 @@
         array.Add(pObjElement);
       } break;
       case CJS_Value::VT_string: {
-        CFX_ByteString sValue =
-            CJS_Value(pRuntime, v).ToCFXByteString(pRuntime);
+        ByteString sValue = CJS_Value(pRuntime, v).ToCFXByteString(pRuntime);
         CJS_KeyValue* pObjElement = new CJS_KeyValue;
         pObjElement->nType = JS_GlobalDataType::STRING;
         pObjElement->sKey = sKey;
@@ -333,7 +332,7 @@
       case JS_GlobalDataType::STRING:
         pRuntime->PutObjectProperty(
             pObj, pObjData->sKey.UTF8Decode(),
-            pRuntime->NewString(pObjData->sData.UTF8Decode().AsStringC()));
+            pRuntime->NewString(pObjData->sData.UTF8Decode().AsStringView()));
         break;
       case JS_GlobalDataType::OBJECT: {
         v8::Local<v8::Object> pNewObj = pRuntime->NewFxDynamicObj(-1);
@@ -355,11 +354,11 @@
   m_MapGlobal.clear();
 }
 
-bool JSGlobalAlternate::SetGlobalVariables(const CFX_ByteString& propname,
+bool JSGlobalAlternate::SetGlobalVariables(const ByteString& propname,
                                            JS_GlobalDataType nType,
                                            double dData,
                                            bool bData,
-                                           const CFX_ByteString& sData,
+                                           const ByteString& sData,
                                            v8::Local<v8::Object> pData,
                                            bool bDefaultPersistent) {
   if (propname.IsEmpty())
diff --git a/fpdfsdk/javascript/global.h b/fpdfsdk/javascript/global.h
index 364313c..5005b2a 100644
--- a/fpdfsdk/javascript/global.h
+++ b/fpdfsdk/javascript/global.h
@@ -25,7 +25,7 @@
   JS_GlobalDataType nType;
   double dData;
   bool bData;
-  CFX_ByteString sData;
+  ByteString sData;
   v8::Global<v8::Object> pData;
   bool bPersistent;
   bool bDeleted;
@@ -39,26 +39,26 @@
   bool setPersistent(CJS_Runtime* pRuntime,
                      const std::vector<CJS_Value>& params,
                      CJS_Value& vRet,
-                     CFX_WideString& sError);
+                     WideString& sError);
   bool QueryProperty(const wchar_t* propname);
   bool DoProperty(CJS_Runtime* pRuntime,
                   const wchar_t* propname,
                   CJS_PropValue& vp,
-                  CFX_WideString& sError);
+                  WideString& sError);
   bool DelProperty(CJS_Runtime* pRuntime,
                    const wchar_t* propname,
-                   CFX_WideString& sError);
+                   WideString& sError);
   void Initial(CPDFSDK_FormFillEnvironment* pFormFillEnv);
 
  private:
   void UpdateGlobalPersistentVariables();
   void CommitGlobalPersisitentVariables(CJS_Runtime* pRuntime);
   void DestroyGlobalPersisitentVariables();
-  bool SetGlobalVariables(const CFX_ByteString& propname,
+  bool SetGlobalVariables(const ByteString& propname,
                           JS_GlobalDataType nType,
                           double dData,
                           bool bData,
-                          const CFX_ByteString& sData,
+                          const ByteString& sData,
                           v8::Local<v8::Object> pData,
                           bool bDefaultPersistent);
   void ObjectToArray(CJS_Runtime* pRuntime,
@@ -66,8 +66,8 @@
                      CJS_GlobalVariableArray& array);
   void PutObjectProperty(v8::Local<v8::Object> obj, CJS_KeyValue* pData);
 
-  std::map<CFX_ByteString, std::unique_ptr<JSGlobalData>> m_MapGlobal;
-  CFX_WideString m_sFilePath;
+  std::map<ByteString, std::unique_ptr<JSGlobalData>> m_MapGlobal;
+  WideString m_sFilePath;
   CJS_GlobalData* m_pGlobalData;
   CPDFSDK_FormFillEnvironment::ObservedPtr m_pFormFillEnv;
 };
diff --git a/fpdfsdk/javascript/ijs_event_context.h b/fpdfsdk/javascript/ijs_event_context.h
index 8428072..5d2d712 100644
--- a/fpdfsdk/javascript/ijs_event_context.h
+++ b/fpdfsdk/javascript/ijs_event_context.h
@@ -20,13 +20,12 @@
 // may trigger new events on top of one another.
 class IJS_EventContext {
  public:
-  virtual bool RunScript(const CFX_WideString& script,
-                         CFX_WideString* info) = 0;
+  virtual bool RunScript(const WideString& script, WideString* info) = 0;
 
   virtual void OnApp_Init() = 0;
 
   virtual void OnDoc_Open(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                          const CFX_WideString& strTargetName) = 0;
+                          const WideString& strTargetName) = 0;
   virtual void OnDoc_WillPrint(CPDFSDK_FormFillEnvironment* pFormFillEnv) = 0;
   virtual void OnDoc_DidPrint(CPDFSDK_FormFillEnvironment* pFormFillEnv) = 0;
   virtual void OnDoc_WillSave(CPDFSDK_FormFillEnvironment* pFormFillEnv) = 0;
@@ -53,38 +52,38 @@
   virtual void OnField_Focus(bool bModifier,
                              bool bShift,
                              CPDF_FormField* pTarget,
-                             const CFX_WideString& Value) = 0;
+                             const WideString& Value) = 0;
   virtual void OnField_Blur(bool bModifier,
                             bool bShift,
                             CPDF_FormField* pTarget,
-                            const CFX_WideString& Value) = 0;
+                            const WideString& Value) = 0;
 
   virtual void OnField_Calculate(CPDF_FormField* pSource,
                                  CPDF_FormField* pTarget,
-                                 CFX_WideString& Value,
+                                 WideString& Value,
                                  bool& bRc) = 0;
   virtual void OnField_Format(CPDF_FormField* pTarget,
-                              CFX_WideString& Value,
+                              WideString& Value,
                               bool bWillCommit) = 0;
-  virtual void OnField_Keystroke(CFX_WideString& strChange,
-                                 const CFX_WideString& strChangeEx,
+  virtual void OnField_Keystroke(WideString& strChange,
+                                 const WideString& strChangeEx,
                                  bool KeyDown,
                                  bool bModifier,
                                  int& nSelEnd,
                                  int& nSelStart,
                                  bool bShift,
                                  CPDF_FormField* pTarget,
-                                 CFX_WideString& Value,
+                                 WideString& Value,
                                  bool bWillCommit,
                                  bool bFieldFull,
                                  bool& bRc) = 0;
-  virtual void OnField_Validate(CFX_WideString& strChange,
-                                const CFX_WideString& strChangeEx,
+  virtual void OnField_Validate(WideString& strChange,
+                                const WideString& strChangeEx,
                                 bool bKeyDown,
                                 bool bModifier,
                                 bool bShift,
                                 CPDF_FormField* pTarget,
-                                CFX_WideString& Value,
+                                WideString& Value,
                                 bool& bRc) = 0;
 
   virtual void OnScreen_Focus(bool bModifier,
@@ -122,7 +121,7 @@
   virtual void OnLink_MouseUp(CPDFSDK_FormFillEnvironment* pFormFillEnv) = 0;
 
   virtual void OnMenu_Exec(CPDFSDK_FormFillEnvironment* pFormFillEnv,
-                           const CFX_WideString&) = 0;
+                           const WideString&) = 0;
   virtual void OnBatchExec(CPDFSDK_FormFillEnvironment* pFormFillEnv) = 0;
   virtual void OnConsole_Exec() = 0;
   virtual void OnExternal_Exec() = 0;
diff --git a/fpdfsdk/javascript/ijs_runtime.h b/fpdfsdk/javascript/ijs_runtime.h
index babc418..a21ce80 100644
--- a/fpdfsdk/javascript/ijs_runtime.h
+++ b/fpdfsdk/javascript/ijs_runtime.h
@@ -28,13 +28,12 @@
   virtual IJS_EventContext* NewEventContext() = 0;
   virtual void ReleaseEventContext(IJS_EventContext* pContext) = 0;
   virtual CPDFSDK_FormFillEnvironment* GetFormFillEnv() const = 0;
-  virtual int ExecuteScript(const CFX_WideString& script,
-                            CFX_WideString* info) = 0;
+  virtual int ExecuteScript(const WideString& script, WideString* info) = 0;
 
 #ifdef PDF_ENABLE_XFA
-  virtual bool GetValueByName(const CFX_ByteStringC& utf8Name,
+  virtual bool GetValueByName(const ByteStringView& utf8Name,
                               CFXJSE_Value* pValue) = 0;
-  virtual bool SetValueByName(const CFX_ByteStringC& utf8Name,
+  virtual bool SetValueByName(const ByteStringView& utf8Name,
                               CFXJSE_Value* pValue) = 0;
 #endif  // PDF_ENABLE_XFA
 
diff --git a/fpdfsdk/javascript/public_methods_embeddertest.cpp b/fpdfsdk/javascript/public_methods_embeddertest.cpp
index 2479366..f6af01f 100644
--- a/fpdfsdk/javascript/public_methods_embeddertest.cpp
+++ b/fpdfsdk/javascript/public_methods_embeddertest.cpp
@@ -103,7 +103,7 @@
   v8::Isolate::Scope isolate_scope(isolate());
   v8::HandleScope handle_scope(isolate());
   v8::Context::Scope context_scope(GetV8Context());
-  CFX_WideString formatted_date;
+  WideString formatted_date;
 
   // 1968-06-25
   formatted_date = CJS_PublicMethods::MakeFormatDate(-47952000000, L"ddmmyy");
diff --git a/fpdfsdk/javascript/report.cpp b/fpdfsdk/javascript/report.cpp
index c9c986d..4550943 100644
--- a/fpdfsdk/javascript/report.cpp
+++ b/fpdfsdk/javascript/report.cpp
@@ -29,7 +29,7 @@
 bool Report::writeText(CJS_Runtime* pRuntime,
                        const std::vector<CJS_Value>& params,
                        CJS_Value& vRet,
-                       CFX_WideString& sError) {
+                       WideString& sError) {
   // Unsafe, not supported.
   return true;
 }
@@ -37,7 +37,7 @@
 bool Report::save(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
-                  CFX_WideString& sError) {
+                  WideString& sError) {
   // Unsafe, not supported.
   return true;
 }
diff --git a/fpdfsdk/javascript/report.h b/fpdfsdk/javascript/report.h
index c66db80..0f040c6 100644
--- a/fpdfsdk/javascript/report.h
+++ b/fpdfsdk/javascript/report.h
@@ -20,11 +20,11 @@
   bool save(CJS_Runtime* pRuntime,
             const std::vector<CJS_Value>& params,
             CJS_Value& vRet,
-            CFX_WideString& sError);
+            WideString& sError);
   bool writeText(CJS_Runtime* pRuntime,
                  const std::vector<CJS_Value>& params,
                  CJS_Value& vRet,
-                 CFX_WideString& sError);
+                 WideString& sError);
 };
 
 class CJS_Report : public CJS_Object {
diff --git a/fpdfsdk/javascript/resource.cpp b/fpdfsdk/javascript/resource.cpp
index 6113c54..8ca5b2a 100644
--- a/fpdfsdk/javascript/resource.cpp
+++ b/fpdfsdk/javascript/resource.cpp
@@ -6,7 +6,7 @@
 
 #include "fpdfsdk/javascript/resource.h"
 
-CFX_WideString JSGetStringFromID(uint32_t id) {
+WideString JSGetStringFromID(uint32_t id) {
   switch (id) {
     case IDS_STRING_JSALERT:
       return L"Alert";
@@ -54,13 +54,13 @@
   }
 }
 
-CFX_WideString JSFormatErrorString(const char* class_name,
-                                   const char* property_name,
-                                   const CFX_WideString& details) {
-  CFX_WideString result = CFX_WideString::FromLocal(class_name);
+WideString JSFormatErrorString(const char* class_name,
+                               const char* property_name,
+                               const WideString& details) {
+  WideString result = WideString::FromLocal(class_name);
   if (property_name) {
     result += L".";
-    result += CFX_WideString::FromLocal(property_name);
+    result += WideString::FromLocal(property_name);
   }
   result += L": ";
   result += details;
diff --git a/fpdfsdk/javascript/resource.h b/fpdfsdk/javascript/resource.h
index af7788f..3891918 100644
--- a/fpdfsdk/javascript/resource.h
+++ b/fpdfsdk/javascript/resource.h
@@ -32,9 +32,9 @@
 #define IDS_STRING_JSNOPERMISSION 25639
 #define IDS_STRING_JSBADOBJECT 25640
 
-CFX_WideString JSGetStringFromID(uint32_t id);
-CFX_WideString JSFormatErrorString(const char* class_name,
-                                   const char* property_name,
-                                   const CFX_WideString& details);
+WideString JSGetStringFromID(uint32_t id);
+WideString JSFormatErrorString(const char* class_name,
+                               const char* property_name,
+                               const WideString& details);
 
 #endif  // FPDFSDK_JAVASCRIPT_RESOURCE_H_
diff --git a/fpdfsdk/javascript/util.cpp b/fpdfsdk/javascript/util.cpp
index e00f9e1..04f1eb3 100644
--- a/fpdfsdk/javascript/util.cpp
+++ b/fpdfsdk/javascript/util.cpp
@@ -76,7 +76,7 @@
 bool util::printf(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
-                  CFX_WideString& sError) {
+                  WideString& sError) {
   const size_t iSize = params.size();
   if (iSize < 1)
     return false;
@@ -111,7 +111,7 @@
       continue;
     }
 
-    CFX_WideString strSegment;
+    WideString strSegment;
     switch (ParseDataType(&c_strFormat)) {
       case UTIL_INT:
         strSegment.Format(c_strFormat.c_str(), params[iIndex].ToInt(pRuntime));
@@ -139,7 +139,7 @@
 bool util::printd(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
-                  CFX_WideString& sError) {
+                  WideString& sError) {
   const size_t iSize = params.size();
   if (iSize < 2)
     return false;
@@ -158,7 +158,7 @@
   }
 
   if (p1.GetType() == CJS_Value::VT_number) {
-    CFX_WideString swResult;
+    WideString swResult;
     switch (p1.ToInt(pRuntime)) {
       case 0:
         swResult.Format(L"D:%04d%02d%02d%02d%02d%02d", jsDate.GetYear(pRuntime),
@@ -231,7 +231,7 @@
     };
 
     for (size_t i = 0; i < FX_ArraySize(cTableAd); ++i) {
-      CFX_WideString sValue;
+      WideString sValue;
       sValue.Format(L"%d", cTableAd[i].iValue);
 
       int iStart = 0;
@@ -271,7 +271,7 @@
 bool util::printx(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
-                  CFX_WideString& sError) {
+                  WideString& sError) {
   if (params.size() < 2) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
@@ -294,9 +294,9 @@
   return input;
 }
 
-CFX_WideString util::printx(const CFX_WideString& wsFormat,
-                            const CFX_WideString& wsSource) {
-  CFX_WideString wsResult;
+WideString util::printx(const WideString& wsFormat,
+                        const WideString& wsSource) {
+  WideString wsResult;
   FX_STRSIZE iSourceIdx = 0;
   FX_STRSIZE iFormatIdx = 0;
   CaseMode eCaseMode = kPreserveCase;
@@ -385,12 +385,12 @@
 bool util::scand(CJS_Runtime* pRuntime,
                  const std::vector<CJS_Value>& params,
                  CJS_Value& vRet,
-                 CFX_WideString& sError) {
+                 WideString& sError) {
   if (params.size() < 2)
     return false;
 
-  CFX_WideString sFormat = params[0].ToCFXWideString(pRuntime);
-  CFX_WideString sDate = params[1].ToCFXWideString(pRuntime);
+  WideString sFormat = params[0].ToCFXWideString(pRuntime);
+  WideString sDate = params[1].ToCFXWideString(pRuntime);
   double dDate = JS_GetDateTime();
   if (sDate.GetLength() > 0) {
     dDate = CJS_PublicMethods::MakeRegularDate(sDate, sFormat, nullptr);
@@ -408,7 +408,7 @@
 bool util::byteToChar(CJS_Runtime* pRuntime,
                       const std::vector<CJS_Value>& params,
                       CJS_Value& vRet,
-                      CFX_WideString& sError) {
+                      WideString& sError) {
   if (params.size() < 1) {
     sError = JSGetStringFromID(IDS_STRING_JSPARAMERROR);
     return false;
@@ -420,7 +420,7 @@
     return false;
   }
 
-  CFX_WideString wStr(static_cast<wchar_t>(arg));
+  WideString wStr(static_cast<wchar_t>(arg));
   vRet = CJS_Value(pRuntime, wStr.c_str());
   return true;
 }
diff --git a/fpdfsdk/javascript/util.h b/fpdfsdk/javascript/util.h
index 60fa631..ba46e4f 100644
--- a/fpdfsdk/javascript/util.h
+++ b/fpdfsdk/javascript/util.h
@@ -25,26 +25,26 @@
   bool printd(CJS_Runtime* pRuntime,
               const std::vector<CJS_Value>& params,
               CJS_Value& vRet,
-              CFX_WideString& sError);
+              WideString& sError);
   bool printf(CJS_Runtime* pRuntime,
               const std::vector<CJS_Value>& params,
               CJS_Value& vRet,
-              CFX_WideString& sError);
+              WideString& sError);
   bool printx(CJS_Runtime* pRuntime,
               const std::vector<CJS_Value>& params,
               CJS_Value& vRet,
-              CFX_WideString& sError);
+              WideString& sError);
   bool scand(CJS_Runtime* pRuntime,
              const std::vector<CJS_Value>& params,
              CJS_Value& vRet,
-             CFX_WideString& sError);
+             WideString& sError);
   bool byteToChar(CJS_Runtime* pRuntime,
                   const std::vector<CJS_Value>& params,
                   CJS_Value& vRet,
-                  CFX_WideString& sError);
+                  WideString& sError);
 
-  static CFX_WideString printx(const CFX_WideString& cFormat,
-                               const CFX_WideString& cSource);
+  static WideString printx(const WideString& cFormat,
+                           const WideString& cSource);
 
  private:
   friend class CJS_Util_ParseDataType_Test;
diff --git a/fpdfsdk/pdfsdk_fieldaction.h b/fpdfsdk/pdfsdk_fieldaction.h
index 4ee56ac..aec5dca 100644
--- a/fpdfsdk/pdfsdk_fieldaction.h
+++ b/fpdfsdk/pdfsdk_fieldaction.h
@@ -25,12 +25,12 @@
   bool bModifier;
   bool bShift;
   int nCommitKey;
-  CFX_WideString sChange;
-  CFX_WideString sChangeEx;
+  WideString sChange;
+  WideString sChangeEx;
   bool bKeyDown;
   int nSelEnd;
   int nSelStart;
-  CFX_WideString sValue;
+  WideString sValue;
   bool bWillCommit;
   bool bFieldFull;
   bool bRC;
diff --git a/fpdfsdk/pwl/cpwl_appstream.cpp b/fpdfsdk/pwl/cpwl_appstream.cpp
index c7188ad..6a19efb 100644
--- a/fpdfsdk/pwl/cpwl_appstream.cpp
+++ b/fpdfsdk/pwl/cpwl_appstream.cpp
@@ -79,8 +79,8 @@
 class AutoClosedCommand {
  public:
   AutoClosedCommand(std::ostringstream* stream,
-                    CFX_ByteString open,
-                    CFX_ByteString close)
+                    ByteString open,
+                    ByteString close)
       : stream_(stream), close_(close) {
     *stream_ << open << "\n";
   }
@@ -89,7 +89,7 @@
 
  private:
   std::ostringstream* stream_;
-  CFX_ByteString close_;
+  ByteString close_;
 };
 
 class AutoClosedQCommand : public AutoClosedCommand {
@@ -99,8 +99,8 @@
   ~AutoClosedQCommand() override {}
 };
 
-CFX_ByteString GetColorAppStream(const CFX_Color& color,
-                                 const bool& bFillOrStroke) {
+ByteString GetColorAppStream(const CFX_Color& color,
+                             const bool& bFillOrStroke) {
   std::ostringstream sColorStream;
 
   switch (color.nColorType) {
@@ -125,10 +125,10 @@
       break;
   }
 
-  return CFX_ByteString(sColorStream);
+  return ByteString(sColorStream);
 }
 
-CFX_ByteString GetAP_Check(const CFX_FloatRect& crBBox) {
+ByteString GetAP_Check(const CFX_FloatRect& crBBox) {
   const float fWidth = crBBox.right - crBBox.left;
   const float fHeight = crBBox.top - crBBox.bottom;
 
@@ -174,10 +174,10 @@
          << pts[nNext][0].y << " " << kCurveToOperator << "\n";
   }
 
-  return CFX_ByteString(csAP);
+  return ByteString(csAP);
 }
 
-CFX_ByteString GetAP_Circle(const CFX_FloatRect& crBBox) {
+ByteString GetAP_Circle(const CFX_FloatRect& crBBox) {
   std::ostringstream csAP;
 
   float fWidth = crBBox.right - crBBox.left;
@@ -218,10 +218,10 @@
        << pt1.y - py * FX_BEZIER << " " << pt1.x << " " << pt1.y << " "
        << kCurveToOperator << "\n";
 
-  return CFX_ByteString(csAP);
+  return ByteString(csAP);
 }
 
-CFX_ByteString GetAP_Cross(const CFX_FloatRect& crBBox) {
+ByteString GetAP_Cross(const CFX_FloatRect& crBBox) {
   std::ostringstream csAP;
 
   csAP << crBBox.left << " " << crBBox.top << " " << kMoveToOperator << "\n";
@@ -230,10 +230,10 @@
   csAP << crBBox.left << " " << crBBox.bottom << " " << kMoveToOperator << "\n";
   csAP << crBBox.right << " " << crBBox.top << " " << kLineToOperator << "\n";
 
-  return CFX_ByteString(csAP);
+  return ByteString(csAP);
 }
 
-CFX_ByteString GetAP_Diamond(const CFX_FloatRect& crBBox) {
+ByteString GetAP_Diamond(const CFX_FloatRect& crBBox) {
   std::ostringstream csAP;
 
   float fWidth = crBBox.right - crBBox.left;
@@ -250,10 +250,10 @@
   csAP << pt4.x << " " << pt4.y << " " << kLineToOperator << "\n";
   csAP << pt1.x << " " << pt1.y << " " << kLineToOperator << "\n";
 
-  return CFX_ByteString(csAP);
+  return ByteString(csAP);
 }
 
-CFX_ByteString GetAP_Square(const CFX_FloatRect& crBBox) {
+ByteString GetAP_Square(const CFX_FloatRect& crBBox) {
   std::ostringstream csAP;
 
   csAP << crBBox.left << " " << crBBox.top << " " << kMoveToOperator << "\n";
@@ -263,10 +263,10 @@
   csAP << crBBox.left << " " << crBBox.bottom << " " << kLineToOperator << "\n";
   csAP << crBBox.left << " " << crBBox.top << " " << kLineToOperator << "\n";
 
-  return CFX_ByteString(csAP);
+  return ByteString(csAP);
 }
 
-CFX_ByteString GetAP_Star(const CFX_FloatRect& crBBox) {
+ByteString GetAP_Star(const CFX_FloatRect& crBBox) {
   std::ostringstream csAP;
 
   float fRadius = (crBBox.top - crBBox.bottom) / (1 + (float)cos(FX_PI / 5.0f));
@@ -292,10 +292,10 @@
     csAP << px[nNext] << " " << py[nNext] << " " << kLineToOperator << "\n";
   }
 
-  return CFX_ByteString(csAP);
+  return ByteString(csAP);
 }
 
-CFX_ByteString GetAP_HalfCircle(const CFX_FloatRect& crBBox, float fRotate) {
+ByteString GetAP_HalfCircle(const CFX_FloatRect& crBBox, float fRotate) {
   std::ostringstream csAP;
 
   float fWidth = crBBox.right - crBBox.left;
@@ -328,44 +328,44 @@
        << pt3.y + py * FX_BEZIER << " " << pt3.x << " " << pt3.y << " "
        << kCurveToOperator << "\n";
 
-  return CFX_ByteString(csAP);
+  return ByteString(csAP);
 }
 
-CFX_ByteString GetAppStream_Check(const CFX_FloatRect& rcBBox,
-                                  const CFX_Color& crText) {
+ByteString GetAppStream_Check(const CFX_FloatRect& rcBBox,
+                              const CFX_Color& crText) {
   std::ostringstream sAP;
   {
     AutoClosedQCommand q(&sAP);
     sAP << GetColorAppStream(crText, true) << GetAP_Check(rcBBox)
         << kFillOperator << "\n";
   }
-  return CFX_ByteString(sAP);
+  return ByteString(sAP);
 }
 
-CFX_ByteString GetAppStream_Circle(const CFX_FloatRect& rcBBox,
-                                   const CFX_Color& crText) {
+ByteString GetAppStream_Circle(const CFX_FloatRect& rcBBox,
+                               const CFX_Color& crText) {
   std::ostringstream sAP;
   {
     AutoClosedQCommand q(&sAP);
     sAP << GetColorAppStream(crText, true) << GetAP_Circle(rcBBox)
         << kFillOperator << "\n";
   }
-  return CFX_ByteString(sAP);
+  return ByteString(sAP);
 }
 
-CFX_ByteString GetAppStream_Cross(const CFX_FloatRect& rcBBox,
-                                  const CFX_Color& crText) {
+ByteString GetAppStream_Cross(const CFX_FloatRect& rcBBox,
+                              const CFX_Color& crText) {
   std::ostringstream sAP;
   {
     AutoClosedQCommand q(&sAP);
     sAP << GetColorAppStream(crText, false) << GetAP_Cross(rcBBox)
         << kStrokeOperator << "\n";
   }
-  return CFX_ByteString(sAP);
+  return ByteString(sAP);
 }
 
-CFX_ByteString GetAppStream_Diamond(const CFX_FloatRect& rcBBox,
-                                    const CFX_Color& crText) {
+ByteString GetAppStream_Diamond(const CFX_FloatRect& rcBBox,
+                                const CFX_Color& crText) {
   std::ostringstream sAP;
   {
     AutoClosedQCommand q(&sAP);
@@ -373,51 +373,51 @@
         << GetColorAppStream(crText, true) << GetAP_Diamond(rcBBox)
         << kFillOperator << "\n";
   }
-  return CFX_ByteString(sAP);
+  return ByteString(sAP);
 }
 
-CFX_ByteString GetAppStream_Square(const CFX_FloatRect& rcBBox,
-                                   const CFX_Color& crText) {
+ByteString GetAppStream_Square(const CFX_FloatRect& rcBBox,
+                               const CFX_Color& crText) {
   std::ostringstream sAP;
   {
     AutoClosedQCommand q(&sAP);
     sAP << GetColorAppStream(crText, true) << GetAP_Square(rcBBox)
         << kFillOperator << "\n";
   }
-  return CFX_ByteString(sAP);
+  return ByteString(sAP);
 }
 
-CFX_ByteString GetAppStream_Star(const CFX_FloatRect& rcBBox,
-                                 const CFX_Color& crText) {
+ByteString GetAppStream_Star(const CFX_FloatRect& rcBBox,
+                             const CFX_Color& crText) {
   std::ostringstream sAP;
   {
     AutoClosedQCommand q(&sAP);
     sAP << GetColorAppStream(crText, true) << GetAP_Star(rcBBox)
         << kFillOperator << "\n";
   }
-  return CFX_ByteString(sAP);
+  return ByteString(sAP);
 }
 
-CFX_ByteString GetCircleFillAppStream(const CFX_FloatRect& rect,
-                                      const CFX_Color& color) {
+ByteString GetCircleFillAppStream(const CFX_FloatRect& rect,
+                                  const CFX_Color& color) {
   std::ostringstream sAppStream;
-  CFX_ByteString sColor = GetColorAppStream(color, true);
+  ByteString sColor = GetColorAppStream(color, true);
   if (sColor.GetLength() > 0) {
     AutoClosedQCommand q(&sAppStream);
     sAppStream << sColor << GetAP_Circle(rect) << kFillOperator << "\n";
   }
-  return CFX_ByteString(sAppStream);
+  return ByteString(sAppStream);
 }
 
-CFX_ByteString GetCircleBorderAppStream(const CFX_FloatRect& rect,
-                                        float fWidth,
-                                        const CFX_Color& color,
-                                        const CFX_Color& crLeftTop,
-                                        const CFX_Color& crRightBottom,
-                                        BorderStyle nStyle,
-                                        const CPWL_Dash& dash) {
+ByteString GetCircleBorderAppStream(const CFX_FloatRect& rect,
+                                    float fWidth,
+                                    const CFX_Color& color,
+                                    const CFX_Color& crLeftTop,
+                                    const CFX_Color& crRightBottom,
+                                    BorderStyle nStyle,
+                                    const CPWL_Dash& dash) {
   std::ostringstream sAppStream;
-  CFX_ByteString sColor;
+  ByteString sColor;
 
   if (fWidth > 0.0f) {
     AutoClosedQCommand q(&sAppStream);
@@ -502,12 +502,12 @@
       } break;
     }
   }
-  return CFX_ByteString(sAppStream);
+  return ByteString(sAppStream);
 }
 
-CFX_ByteString GetCheckBoxAppStream(const CFX_FloatRect& rcBBox,
-                                    CheckStyle nStyle,
-                                    const CFX_Color& crText) {
+ByteString GetCheckBoxAppStream(const CFX_FloatRect& rcBBox,
+                                CheckStyle nStyle,
+                                const CFX_Color& crText) {
   CFX_FloatRect rcCenter = rcBBox.GetCenterSquare();
   switch (nStyle) {
     default:
@@ -530,9 +530,9 @@
   }
 }
 
-CFX_ByteString GetRadioButtonAppStream(const CFX_FloatRect& rcBBox,
-                                       CheckStyle nStyle,
-                                       const CFX_Color& crText) {
+ByteString GetRadioButtonAppStream(const CFX_FloatRect& rcBBox,
+                                   CheckStyle nStyle,
+                                   const CFX_Color& crText) {
   CFX_FloatRect rcCenter = rcBBox.GetCenterSquare();
   switch (nStyle) {
     default:
@@ -555,33 +555,33 @@
   }
 }
 
-CFX_ByteString GetFontSetString(IPVT_FontMap* pFontMap,
-                                int32_t nFontIndex,
-                                float fFontSize) {
+ByteString GetFontSetString(IPVT_FontMap* pFontMap,
+                            int32_t nFontIndex,
+                            float fFontSize) {
   if (!pFontMap)
-    return CFX_ByteString();
+    return ByteString();
 
-  CFX_ByteString sFontAlias = pFontMap->GetPDFFontAlias(nFontIndex);
+  ByteString sFontAlias = pFontMap->GetPDFFontAlias(nFontIndex);
   if (sFontAlias.GetLength() <= 0 || fFontSize <= 0)
-    return CFX_ByteString();
+    return ByteString();
 
   std::ostringstream sRet;
   sRet << "/" << sFontAlias << " " << fFontSize << " "
        << kSetTextFontAndSizeOperator << "\n";
-  return CFX_ByteString(sRet);
+  return ByteString(sRet);
 }
 
-CFX_ByteString GetWordRenderString(const CFX_ByteString& strWords) {
+ByteString GetWordRenderString(const ByteString& strWords) {
   if (strWords.GetLength() > 0) {
     return PDF_EncodeString(strWords, false) + " " + kShowTextOperator + "\n";
   }
-  return CFX_ByteString();
+  return ByteString();
 }
 
-CFX_ByteString GetEditAppStream(CPWL_EditImpl* pEdit,
-                                const CFX_PointF& ptOffset,
-                                bool bContinuous,
-                                uint16_t SubWord) {
+ByteString GetEditAppStream(CPWL_EditImpl* pEdit,
+                            const CFX_PointF& ptOffset,
+                            bool bContinuous,
+                            uint16_t SubWord) {
   CPWL_EditImpl_Iterator* pIterator = pEdit->GetIterator();
   pIterator->SetAt(0);
 
@@ -597,7 +597,7 @@
     if (bContinuous) {
       if (place.LineCmp(oldplace) != 0) {
         if (sWords.tellp() > 0) {
-          sEditStream << GetWordRenderString(CFX_ByteString(sWords));
+          sEditStream << GetWordRenderString(ByteString(sWords));
           sWords.str("");
         }
 
@@ -624,7 +624,7 @@
       if (pIterator->GetWord(word)) {
         if (word.nFontIndex != nCurFontIndex) {
           if (sWords.tellp() > 0) {
-            sEditStream << GetWordRenderString(CFX_ByteString(sWords));
+            sEditStream << GetWordRenderString(ByteString(sWords));
             sWords.str("");
           }
           sEditStream << GetFontSetString(pEdit->GetFontMap(), word.nFontIndex,
@@ -661,7 +661,7 @@
   }
 
   if (sWords.tellp() > 0) {
-    sEditStream << GetWordRenderString(CFX_ByteString(sWords));
+    sEditStream << GetWordRenderString(ByteString(sWords));
     sWords.str("");
   }
 
@@ -681,14 +681,14 @@
     sAppStream << sEditStream.str();
   }
 
-  return CFX_ByteString(sAppStream);
+  return ByteString(sAppStream);
 }
 
-CFX_ByteString GenerateIconAppStream(CPDF_IconFit& fit,
-                                     CPDF_Stream* pIconStream,
-                                     const CFX_FloatRect& rcIcon) {
+ByteString GenerateIconAppStream(CPDF_IconFit& fit,
+                                 CPDF_Stream* pIconStream,
+                                 const CFX_FloatRect& rcIcon) {
   if (rcIcon.IsEmpty() || !pIconStream)
-    return CFX_ByteString();
+    return ByteString();
 
   CPWL_Icon icon;
   CPWL_Wnd::CreateParams cp;
@@ -698,9 +698,9 @@
   icon.SetPDFStream(pIconStream);
   icon.Move(rcIcon, false, false);
 
-  CFX_ByteString sAlias = icon.GetImageAlias();
+  ByteString sAlias = icon.GetImageAlias();
   if (sAlias.GetLength() <= 0)
-    return CFX_ByteString();
+    return ByteString();
 
   CFX_FloatRect rcPlate = icon.GetClientRect();
   CFX_Matrix mt = icon.GetImageMatrix().GetInverse();
@@ -732,17 +732,17 @@
   }
   icon.Destroy();
 
-  return CFX_ByteString(str);
+  return ByteString(str);
 }
 
-CFX_ByteString GetPushButtonAppStream(const CFX_FloatRect& rcBBox,
-                                      IPVT_FontMap* pFontMap,
-                                      CPDF_Stream* pIconStream,
-                                      CPDF_IconFit& IconFit,
-                                      const CFX_WideString& sLabel,
-                                      const CFX_Color& crText,
-                                      float fFontSize,
-                                      ButtonStyle nLayOut) {
+ByteString GetPushButtonAppStream(const CFX_FloatRect& rcBBox,
+                                  IPVT_FontMap* pFontMap,
+                                  CPDF_Stream* pIconStream,
+                                  CPDF_IconFit& IconFit,
+                                  const WideString& sLabel,
+                                  const CFX_Color& crText,
+                                  float fFontSize,
+                                  ButtonStyle nLayOut) {
   const float fAutoFontScale = 1.0f / 3.0f;
 
   auto pEdit = pdfium::MakeUnique<CPWL_EditImpl>();
@@ -902,7 +902,7 @@
 
   if (!rcLabel.IsEmpty()) {
     pEdit->SetPlateRect(rcLabel);
-    CFX_ByteString sEdit =
+    ByteString sEdit =
         GetEditAppStream(pEdit.get(), CFX_PointF(0.0f, 0.0f), true, 0);
     if (sEdit.GetLength() > 0) {
       AutoClosedCommand bt(&sTemp, kTextBeginOperator, kTextEndOperator);
@@ -911,7 +911,7 @@
   }
 
   if (sTemp.tellp() <= 0)
-    return CFX_ByteString();
+    return ByteString();
 
   std::ostringstream sAppStream;
   {
@@ -923,18 +923,18 @@
                << kEndPathNoFillOrStrokeOperator << "\n";
     sAppStream << sTemp.str().c_str();
   }
-  return CFX_ByteString(sAppStream);
+  return ByteString(sAppStream);
 }
 
-CFX_ByteString GetBorderAppStreamInternal(const CFX_FloatRect& rect,
-                                          float fWidth,
-                                          const CFX_Color& color,
-                                          const CFX_Color& crLeftTop,
-                                          const CFX_Color& crRightBottom,
-                                          BorderStyle nStyle,
-                                          const CPWL_Dash& dash) {
+ByteString GetBorderAppStreamInternal(const CFX_FloatRect& rect,
+                                      float fWidth,
+                                      const CFX_Color& color,
+                                      const CFX_Color& crLeftTop,
+                                      const CFX_Color& crRightBottom,
+                                      BorderStyle nStyle,
+                                      const CPWL_Dash& dash) {
   std::ostringstream sAppStream;
-  CFX_ByteString sColor;
+  ByteString sColor;
 
   float fLeft = rect.left;
   float fRight = rect.right;
@@ -1044,12 +1044,12 @@
     }
   }
 
-  return CFX_ByteString(sAppStream);
+  return ByteString(sAppStream);
 }
 
-CFX_ByteString GetDropButtonAppStream(const CFX_FloatRect& rcBBox) {
+ByteString GetDropButtonAppStream(const CFX_FloatRect& rcBBox) {
   if (rcBBox.IsEmpty())
-    return CFX_ByteString();
+    return ByteString();
 
   std::ostringstream sAppStream;
   {
@@ -1087,13 +1087,13 @@
                << kLineToOperator << " " << kFillOperator << "\n";
   }
 
-  return CFX_ByteString(sAppStream);
+  return ByteString(sAppStream);
 }
 
-CFX_ByteString GetRectFillAppStream(const CFX_FloatRect& rect,
-                                    const CFX_Color& color) {
+ByteString GetRectFillAppStream(const CFX_FloatRect& rect,
+                                const CFX_Color& color) {
   std::ostringstream sAppStream;
-  CFX_ByteString sColor = GetColorAppStream(color, true);
+  ByteString sColor = GetColorAppStream(color, true);
   if (sColor.GetLength() > 0) {
     AutoClosedQCommand q(&sAppStream);
     sAppStream << sColor << rect.left << " " << rect.bottom << " "
@@ -1101,7 +1101,7 @@
                << kAppendRectOperator << " " << kFillOperator << "\n";
   }
 
-  return CFX_ByteString(sAppStream);
+  return ByteString(sAppStream);
 }
 
 }  // namespace
@@ -1177,7 +1177,7 @@
 
   CFX_FloatRect rcClient = rcWindow.GetDeflated(fBorderWidth, fBorderWidth);
   CFX_Color crText(COLORTYPE_GRAY, 0);
-  CFX_ByteString csNameTag;
+  ByteString csNameTag;
   CPDF_DefaultAppearance da = pControl->GetDefaultAppearance();
   if (da.HasColor()) {
     da.GetColor(iColorType, fc);
@@ -1187,10 +1187,10 @@
   if (da.HasFont())
     csNameTag = da.GetFont(&fFontSize);
 
-  CFX_WideString csWCaption;
-  CFX_WideString csNormalCaption;
-  CFX_WideString csRolloverCaption;
-  CFX_WideString csDownCaption;
+  WideString csWCaption;
+  WideString csNormalCaption;
+  WideString csRolloverCaption;
+  WideString csDownCaption;
   if (pControl->HasMKEntry("CA"))
     csNormalCaption = pControl->GetNormalCaption();
 
@@ -1240,7 +1240,7 @@
       widget_->GetInterForm()->GetFormFillEnv()->GetSysHandler());
   font_map.SetAPType("N");
 
-  CFX_ByteString csAP =
+  ByteString csAP =
       GetRectFillAppStream(rcWindow, crBackground) +
       GetBorderAppStreamInternal(rcWindow, fBorderWidth, crBorder, crLeftTop,
                                  crRightBottom, nBorderStyle, dsBorder) +
@@ -1359,7 +1359,7 @@
   }
 
   CheckStyle nStyle = CheckStyle::kCheck;
-  CFX_WideString csWCaption = pControl->GetNormalCaption();
+  WideString csWCaption = pControl->GetNormalCaption();
   if (csWCaption.GetLength() > 0) {
     switch (csWCaption[0]) {
       case L'l':
@@ -1383,12 +1383,12 @@
     }
   }
 
-  CFX_ByteString csAP_N_ON =
+  ByteString csAP_N_ON =
       GetRectFillAppStream(rcWindow, crBackground) +
       GetBorderAppStreamInternal(rcWindow, fBorderWidth, crBorder, crLeftTop,
                                  crRightBottom, nBorderStyle, dsBorder);
 
-  CFX_ByteString csAP_N_OFF = csAP_N_ON;
+  ByteString csAP_N_OFF = csAP_N_ON;
 
   switch (nBorderStyle) {
     case BorderStyle::BEVELED: {
@@ -1406,12 +1406,12 @@
       break;
   }
 
-  CFX_ByteString csAP_D_ON =
+  ByteString csAP_D_ON =
       GetRectFillAppStream(rcWindow, crBackground - 0.25f) +
       GetBorderAppStreamInternal(rcWindow, fBorderWidth, crBorder, crLeftTop,
                                  crRightBottom, nBorderStyle, dsBorder);
 
-  CFX_ByteString csAP_D_OFF = csAP_D_ON;
+  ByteString csAP_D_OFF = csAP_D_ON;
 
   csAP_N_ON += GetCheckBoxAppStream(rcClient, nStyle, crText);
   csAP_D_ON += GetCheckBoxAppStream(rcClient, nStyle, crText);
@@ -1422,7 +1422,7 @@
   Write("D", csAP_D_ON, pControl->GetCheckedAPState());
   Write("D", csAP_D_OFF, "Off");
 
-  CFX_ByteString csAS = widget_->GetAppState();
+  ByteString csAS = widget_->GetAppState();
   if (csAS.IsEmpty())
     widget_->SetAppState("Off");
 }
@@ -1475,7 +1475,7 @@
   }
 
   CheckStyle nStyle = CheckStyle::kCircle;
-  CFX_WideString csWCaption = pControl->GetNormalCaption();
+  WideString csWCaption = pControl->GetNormalCaption();
   if (csWCaption.GetLength() > 0) {
     switch (csWCaption[0]) {
       case L'8':
@@ -1499,7 +1499,7 @@
     }
   }
 
-  CFX_ByteString csAP_N_ON;
+  ByteString csAP_N_ON;
   CFX_FloatRect rcCenter = rcWindow.GetCenterSquare().GetDeflated(1.0f, 1.0f);
   if (nStyle == CheckStyle::kCircle) {
     if (nBorderStyle == BorderStyle::BEVELED) {
@@ -1521,7 +1521,7 @@
                                    crRightBottom, nBorderStyle, dsBorder);
   }
 
-  CFX_ByteString csAP_N_OFF = csAP_N_ON;
+  ByteString csAP_N_OFF = csAP_N_ON;
 
   switch (nBorderStyle) {
     case BorderStyle::BEVELED: {
@@ -1539,7 +1539,7 @@
       break;
   }
 
-  CFX_ByteString csAP_D_ON;
+  ByteString csAP_D_ON;
 
   if (nStyle == CheckStyle::kCircle) {
     CFX_Color crBK = crBackground - 0.25f;
@@ -1563,7 +1563,7 @@
                                    crRightBottom, nBorderStyle, dsBorder);
   }
 
-  CFX_ByteString csAP_D_OFF = csAP_D_ON;
+  ByteString csAP_D_OFF = csAP_D_ON;
 
   csAP_N_ON += GetRadioButtonAppStream(rcClient, nStyle, crText);
   csAP_D_ON += GetRadioButtonAppStream(rcClient, nStyle, crText);
@@ -1574,12 +1574,12 @@
   Write("D", csAP_D_ON, pControl->GetCheckedAPState());
   Write("D", csAP_D_OFF, "Off");
 
-  CFX_ByteString csAS = widget_->GetAppState();
+  ByteString csAS = widget_->GetAppState();
   if (csAS.IsEmpty())
     widget_->SetAppState("Off");
 }
 
-void CPWL_AppStream::SetAsComboBox(const CFX_WideString* sValue) {
+void CPWL_AppStream::SetAsComboBox(const WideString* sValue) {
   CPDF_FormControl* pControl = widget_->GetFormControl();
   CPDF_FormField* pField = pControl->GetField();
   std::ostringstream sBody;
@@ -1623,7 +1623,7 @@
   }
 
   CFX_FloatRect rcContent = pEdit->GetContentRect();
-  CFX_ByteString sEdit = GetEditAppStream(pEdit.get(), CFX_PointF(), true, 0);
+  ByteString sEdit = GetEditAppStream(pEdit.get(), CFX_PointF(), true, 0);
   if (sEdit.GetLength() > 0) {
     sBody << "/Tx ";
     AutoClosedCommand bmc(&sBody, kMarkedSequenceBeginOperator,
@@ -1645,7 +1645,7 @@
 
   sBody << GetDropButtonAppStream(rcButton);
   Write("N",
-        GetBackgroundAppStream() + GetBorderAppStream() + CFX_ByteString(sBody),
+        GetBackgroundAppStream() + GetBorderAppStream() + ByteString(sBody),
         "");
 }
 
@@ -1729,11 +1729,11 @@
           << sList.str();
   }
   Write("N",
-        GetBackgroundAppStream() + GetBorderAppStream() + CFX_ByteString(sBody),
+        GetBackgroundAppStream() + GetBorderAppStream() + ByteString(sBody),
         "");
 }
 
-void CPWL_AppStream::SetAsTextField(const CFX_WideString* sValue) {
+void CPWL_AppStream::SetAsTextField(const WideString* sValue) {
   CPDF_FormControl* pControl = widget_->GetFormControl();
   CPDF_FormField* pField = pControl->GetField();
   std::ostringstream sBody;
@@ -1771,7 +1771,7 @@
   float fFontSize = widget_->GetFontSize();
 
 #ifdef PDF_ENABLE_XFA
-  CFX_WideString sValueTmp;
+  WideString sValueTmp;
   if (!sValue && widget_->GetMixXFAWidget()) {
     sValueTmp = widget_->GetValue(true);
     sValue = &sValueTmp;
@@ -1802,7 +1802,7 @@
   pEdit->SetText(sValue ? *sValue : pField->GetValue());
 
   CFX_FloatRect rcContent = pEdit->GetContentRect();
-  CFX_ByteString sEdit =
+  ByteString sEdit =
       GetEditAppStream(pEdit.get(), CFX_PointF(), !bCharArray, subWord);
 
   if (sEdit.GetLength() > 0) {
@@ -1828,7 +1828,7 @@
   if (bCharArray) {
     switch (widget_->GetBorderStyle()) {
       case BorderStyle::SOLID: {
-        CFX_ByteString sColor =
+        ByteString sColor =
             GetColorAppStream(widget_->GetBorderPWLColor(), false);
         if (sColor.GetLength() > 0) {
           AutoClosedQCommand q(&sLines);
@@ -1851,7 +1851,7 @@
         break;
       }
       case BorderStyle::DASH: {
-        CFX_ByteString sColor =
+        ByteString sColor =
             GetColorAppStream(widget_->GetBorderPWLColor(), false);
         if (sColor.GetLength() > 0) {
           CPWL_Dash dsBorder = CPWL_Dash(3, 3, 0);
@@ -1880,16 +1880,15 @@
   }
 
   Write("N",
-        GetBackgroundAppStream() + GetBorderAppStream() +
-            CFX_ByteString(sLines) + CFX_ByteString(sBody),
+        GetBackgroundAppStream() + GetBorderAppStream() + ByteString(sLines) +
+            ByteString(sBody),
         "");
 }
 
-void CPWL_AppStream::AddImage(const CFX_ByteString& sAPType,
-                              CPDF_Stream* pImage) {
+void CPWL_AppStream::AddImage(const ByteString& sAPType, CPDF_Stream* pImage) {
   CPDF_Stream* pStream = dict_->GetStreamFor(sAPType);
   CPDF_Dictionary* pStreamDict = pStream->GetDict();
-  CFX_ByteString sImageAlias = "IMG";
+  ByteString sImageAlias = "IMG";
 
   if (CPDF_Dictionary* pImageDict = pImage->GetDict()) {
     sImageAlias = pImageDict->GetStringFor("Name");
@@ -1908,9 +1907,9 @@
                                       pImage->GetObjNum());
 }
 
-void CPWL_AppStream::Write(const CFX_ByteString& sAPType,
-                           const CFX_ByteString& sContents,
-                           const CFX_ByteString& sAPState) {
+void CPWL_AppStream::Write(const ByteString& sAPType,
+                           const ByteString& sContents,
+                           const ByteString& sAPState) {
   CPDF_Stream* pStream = nullptr;
   CPDF_Dictionary* pParentDict = nullptr;
   if (sAPState.IsEmpty()) {
@@ -1947,19 +1946,19 @@
                                   sContents.GetLength());
 }
 
-void CPWL_AppStream::Remove(const CFX_ByteString& sAPType) {
+void CPWL_AppStream::Remove(const ByteString& sAPType) {
   dict_->RemoveFor(sAPType);
 }
 
-CFX_ByteString CPWL_AppStream::GetBackgroundAppStream() const {
+ByteString CPWL_AppStream::GetBackgroundAppStream() const {
   CFX_Color crBackground = widget_->GetFillPWLColor();
   if (crBackground.nColorType != COLORTYPE_TRANSPARENT)
     return GetRectFillAppStream(widget_->GetRotatedRect(), crBackground);
 
-  return CFX_ByteString();
+  return ByteString();
 }
 
-CFX_ByteString CPWL_AppStream::GetBorderAppStream() const {
+ByteString CPWL_AppStream::GetBorderAppStream() const {
   CFX_FloatRect rcWindow = widget_->GetRotatedRect();
   CFX_Color crBorder = widget_->GetBorderPWLColor();
   CFX_Color crBackground = widget_->GetFillPWLColor();
diff --git a/fpdfsdk/pwl/cpwl_appstream.h b/fpdfsdk/pwl/cpwl_appstream.h
index 2043c7b..d73e3aa 100644
--- a/fpdfsdk/pwl/cpwl_appstream.h
+++ b/fpdfsdk/pwl/cpwl_appstream.h
@@ -22,19 +22,19 @@
   void SetAsPushButton();
   void SetAsCheckBox();
   void SetAsRadioButton();
-  void SetAsComboBox(const CFX_WideString* sValue);
+  void SetAsComboBox(const WideString* sValue);
   void SetAsListBox();
-  void SetAsTextField(const CFX_WideString* sValue);
+  void SetAsTextField(const WideString* sValue);
 
  private:
-  void AddImage(const CFX_ByteString& sAPType, CPDF_Stream* pImage);
-  void Write(const CFX_ByteString& sAPType,
-             const CFX_ByteString& sContents,
-             const CFX_ByteString& sAPState);
-  void Remove(const CFX_ByteString& sAPType);
+  void AddImage(const ByteString& sAPType, CPDF_Stream* pImage);
+  void Write(const ByteString& sAPType,
+             const ByteString& sContents,
+             const ByteString& sAPState);
+  void Remove(const ByteString& sAPType);
 
-  CFX_ByteString GetBackgroundAppStream() const;
-  CFX_ByteString GetBorderAppStream() const;
+  ByteString GetBackgroundAppStream() const;
+  ByteString GetBorderAppStream() const;
 
   CFX_UnownedPtr<CPDFSDK_Widget> widget_;
   CFX_UnownedPtr<CPDF_Dictionary> dict_;
diff --git a/fpdfsdk/pwl/cpwl_button.cpp b/fpdfsdk/pwl/cpwl_button.cpp
index fc0479b..5c06a98 100644
--- a/fpdfsdk/pwl/cpwl_button.cpp
+++ b/fpdfsdk/pwl/cpwl_button.cpp
@@ -11,7 +11,7 @@
 
 CPWL_Button::~CPWL_Button() {}
 
-CFX_ByteString CPWL_Button::GetClassName() const {
+ByteString CPWL_Button::GetClassName() const {
   return "CPWL_Button";
 }
 
diff --git a/fpdfsdk/pwl/cpwl_button.h b/fpdfsdk/pwl/cpwl_button.h
index f26ae1c..70f5ef1 100644
--- a/fpdfsdk/pwl/cpwl_button.h
+++ b/fpdfsdk/pwl/cpwl_button.h
@@ -15,7 +15,7 @@
   ~CPWL_Button() override;
 
   // CPWL_Wnd
-  CFX_ByteString GetClassName() const override;
+  ByteString GetClassName() const override;
   void OnCreate(CreateParams* pParamsToAdjust) override;
   bool OnLButtonDown(const CFX_PointF& point, uint32_t nFlag) override;
   bool OnLButtonUp(const CFX_PointF& point, uint32_t nFlag) override;
diff --git a/fpdfsdk/pwl/cpwl_caret.cpp b/fpdfsdk/pwl/cpwl_caret.cpp
index 3d05961..b1040bc 100644
--- a/fpdfsdk/pwl/cpwl_caret.cpp
+++ b/fpdfsdk/pwl/cpwl_caret.cpp
@@ -19,7 +19,7 @@
 
 CPWL_Caret::~CPWL_Caret() {}
 
-CFX_ByteString CPWL_Caret::GetClassName() const {
+ByteString CPWL_Caret::GetClassName() const {
   return "CPWL_Caret";
 }
 
diff --git a/fpdfsdk/pwl/cpwl_caret.h b/fpdfsdk/pwl/cpwl_caret.h
index 3203470..fb0fa89 100644
--- a/fpdfsdk/pwl/cpwl_caret.h
+++ b/fpdfsdk/pwl/cpwl_caret.h
@@ -15,7 +15,7 @@
   ~CPWL_Caret() override;
 
   // CPWL_Wnd
-  CFX_ByteString GetClassName() const override;
+  ByteString GetClassName() const override;
   void DrawThisAppearance(CFX_RenderDevice* pDevice,
                           const CFX_Matrix& mtUser2Device) override;
   void InvalidateRect(CFX_FloatRect* pRect) override;
diff --git a/fpdfsdk/pwl/cpwl_combo_box.cpp b/fpdfsdk/pwl/cpwl_combo_box.cpp
index 0365194..5bb9124 100644
--- a/fpdfsdk/pwl/cpwl_combo_box.cpp
+++ b/fpdfsdk/pwl/cpwl_combo_box.cpp
@@ -147,7 +147,7 @@
 
 CPWL_ComboBox::~CPWL_ComboBox() {}
 
-CFX_ByteString CPWL_ComboBox::GetClassName() const {
+ByteString CPWL_ComboBox::GetClassName() const {
   return "CPWL_ComboBox";
 }
 
@@ -177,31 +177,31 @@
   CPWL_Wnd::KillFocus();
 }
 
-CFX_WideString CPWL_ComboBox::GetSelectedText() {
+WideString CPWL_ComboBox::GetSelectedText() {
   if (m_pEdit)
     return m_pEdit->GetSelectedText();
 
-  return CFX_WideString();
+  return WideString();
 }
 
-void CPWL_ComboBox::ReplaceSelection(const CFX_WideString& text) {
+void CPWL_ComboBox::ReplaceSelection(const WideString& text) {
   if (m_pEdit)
     m_pEdit->ReplaceSelection(text);
 }
 
-CFX_WideString CPWL_ComboBox::GetText() const {
+WideString CPWL_ComboBox::GetText() const {
   if (m_pEdit) {
     return m_pEdit->GetText();
   }
-  return CFX_WideString();
+  return WideString();
 }
 
-void CPWL_ComboBox::SetText(const CFX_WideString& text) {
+void CPWL_ComboBox::SetText(const WideString& text) {
   if (m_pEdit)
     m_pEdit->SetText(text);
 }
 
-void CPWL_ComboBox::AddString(const CFX_WideString& str) {
+void CPWL_ComboBox::AddString(const WideString& str) {
   if (m_pList)
     m_pList->AddString(str);
 }
diff --git a/fpdfsdk/pwl/cpwl_combo_box.h b/fpdfsdk/pwl/cpwl_combo_box.h
index b431191..c9fa2cd 100644
--- a/fpdfsdk/pwl/cpwl_combo_box.h
+++ b/fpdfsdk/pwl/cpwl_combo_box.h
@@ -50,7 +50,7 @@
   CPWL_Edit* GetEdit() const { return m_pEdit.Get(); }
 
   // CPWL_Wnd:
-  CFX_ByteString GetClassName() const override;
+  ByteString GetClassName() const override;
   void OnCreate(CreateParams* pParamsToAdjust) override;
   void OnDestroy() override;
   bool OnKeyDown(uint16_t nChar, uint32_t nFlag) override;
@@ -62,14 +62,14 @@
   CFX_FloatRect GetFocusRect() const override;
   void SetFocus() override;
   void KillFocus() override;
-  CFX_WideString GetSelectedText() override;
-  void ReplaceSelection(const CFX_WideString& text) override;
+  WideString GetSelectedText() override;
+  void ReplaceSelection(const WideString& text) override;
 
   void SetFillerNotify(IPWL_Filler_Notify* pNotify);
 
-  CFX_WideString GetText() const;
-  void SetText(const CFX_WideString& text);
-  void AddString(const CFX_WideString& str);
+  WideString GetText() const;
+  void SetText(const WideString& text);
+  void AddString(const WideString& str);
   int32_t GetSelect() const;
   void SetSelect(int32_t nItemIndex);
 
diff --git a/fpdfsdk/pwl/cpwl_edit.cpp b/fpdfsdk/pwl/cpwl_edit.cpp
index 8fbafd0..c71dbe4 100644
--- a/fpdfsdk/pwl/cpwl_edit.cpp
+++ b/fpdfsdk/pwl/cpwl_edit.cpp
@@ -35,18 +35,18 @@
   ASSERT(!m_bFocus);
 }
 
-CFX_ByteString CPWL_Edit::GetClassName() const {
+ByteString CPWL_Edit::GetClassName() const {
   return PWL_CLASSNAME_EDIT;
 }
 
-void CPWL_Edit::SetText(const CFX_WideString& csText) {
-  CFX_WideString swText = csText;
+void CPWL_Edit::SetText(const WideString& csText) {
+  WideString swText = csText;
   if (!HasFlag(PES_RICH)) {
     m_pEdit->SetText(swText);
     return;
   }
 
-  CFX_ByteString sValue = CFX_ByteString::FromUnicode(swText);
+  ByteString sValue = ByteString::FromUnicode(swText);
   std::unique_ptr<CXML_Element> pXML(
       CXML_Element::Parse(sValue.c_str(), sValue.GetLength()));
   if (!pXML) {
@@ -62,7 +62,7 @@
     if (!pSubElement || !pSubElement->GetTagName().EqualNoCase("p"))
       continue;
 
-    CFX_WideString swSection;
+    WideString swSection;
     int nSubChild = pSubElement->CountChildren();
     for (int32_t j = 0; j < nSubChild; j++) {
       CXML_Content* pSubContent = ToContent(pSubElement->GetChild(j));
@@ -443,7 +443,7 @@
   m_pEdit->SetLimitChar(nLimitChar);
 }
 
-void CPWL_Edit::ReplaceSel(const CFX_WideString& wsText) {
+void CPWL_Edit::ReplaceSel(const WideString& wsText) {
   m_pEdit->ClearSelection();
   m_pEdit->InsertText(wsText, FX_CHARSET_Default);
 }
@@ -463,8 +463,8 @@
 
   if (nChar == FWL_VKEY_Delete) {
     if (m_pFillerNotify) {
-      CFX_WideString strChange;
-      CFX_WideString strChangeEx;
+      WideString strChange;
+      WideString strChangeEx;
 
       int nSelStart = 0;
       int nSelEnd = 0;
@@ -532,7 +532,7 @@
 
   if (!IsCTRLpressed(nFlag)) {
     if (m_pFillerNotify) {
-      CFX_WideString swChange;
+      WideString swChange;
 
       int nSelStart = 0;
       int nSelEnd = 0;
@@ -550,7 +550,7 @@
           break;
       }
 
-      CFX_WideString strChangeEx;
+      WideString strChangeEx;
       std::tie(bRC, bExit) = m_pFillerNotify->OnBeforeKeyStroke(
           GetAttachedData(), swChange, strChangeEx, nSelStart, nSelEnd, true,
           nFlag);
diff --git a/fpdfsdk/pwl/cpwl_edit.h b/fpdfsdk/pwl/cpwl_edit.h
index 3e8de04..d61b947 100644
--- a/fpdfsdk/pwl/cpwl_edit.h
+++ b/fpdfsdk/pwl/cpwl_edit.h
@@ -27,8 +27,8 @@
                                float* fPopupRet) = 0;
   virtual std::pair<bool, bool> OnBeforeKeyStroke(
       CPWL_Wnd::PrivateData* pAttached,
-      CFX_WideString& strChange,
-      const CFX_WideString& strChangeEx,
+      WideString& strChange,
+      const WideString& strChangeEx,
       int nSelStart,
       int nSelEnd,
       bool bKeyDown,
@@ -47,7 +47,7 @@
   ~CPWL_Edit() override;
 
   // CPWL_EditCtrl
-  CFX_ByteString GetClassName() const override;
+  ByteString GetClassName() const override;
   void OnCreated() override;
   void RePosChildWnd() override;
   CFX_FloatRect GetClientRect() const override;
@@ -80,8 +80,8 @@
 
   void CutText();
 
-  void SetText(const CFX_WideString& csText);
-  void ReplaceSel(const CFX_WideString& csText);
+  void SetText(const WideString& csText);
+  void ReplaceSel(const WideString& csText);
 
   bool IsTextFull() const;
 
diff --git a/fpdfsdk/pwl/cpwl_edit_ctrl.cpp b/fpdfsdk/pwl/cpwl_edit_ctrl.cpp
index 7baaaa8..f0fc408 100644
--- a/fpdfsdk/pwl/cpwl_edit_ctrl.cpp
+++ b/fpdfsdk/pwl/cpwl_edit_ctrl.cpp
@@ -52,14 +52,14 @@
   }
 }
 
-CFX_WideString CPWL_EditCtrl::GetSelectedText() {
+WideString CPWL_EditCtrl::GetSelectedText() {
   if (m_pEdit)
     return m_pEdit->GetSelectedText();
 
-  return CFX_WideString();
+  return WideString();
 }
 
-void CPWL_EditCtrl::ReplaceSelection(const CFX_WideString& text) {
+void CPWL_EditCtrl::ReplaceSelection(const WideString& text) {
   if (!m_pEdit)
     return;
 
@@ -338,7 +338,7 @@
   }
 }
 
-CFX_WideString CPWL_EditCtrl::GetText() const {
+WideString CPWL_EditCtrl::GetText() const {
   return m_pEdit->GetText();
 }
 
diff --git a/fpdfsdk/pwl/cpwl_edit_ctrl.h b/fpdfsdk/pwl/cpwl_edit_ctrl.h
index eb4470f..37ac320 100644
--- a/fpdfsdk/pwl/cpwl_edit_ctrl.h
+++ b/fpdfsdk/pwl/cpwl_edit_ctrl.h
@@ -25,7 +25,7 @@
   CPWL_EditCtrl();
   ~CPWL_EditCtrl() override;
 
-  CFX_WideString GetText() const;
+  WideString GetText() const;
   void SetSelection(int32_t nStartChar, int32_t nEndChar);
   void GetSelection(int32_t& nStartChar, int32_t& nEndChar) const;
   void ClearSelection();
@@ -60,8 +60,8 @@
   void SetFontSize(float fFontSize) override;
   float GetFontSize() const override;
   void SetCursor() override;
-  CFX_WideString GetSelectedText() override;
-  void ReplaceSelection(const CFX_WideString& text) override;
+  WideString GetSelectedText() override;
+  void ReplaceSelection(const WideString& text) override;
 
   void SetCaret(bool bVisible,
                 const CFX_PointF& ptHead,
diff --git a/fpdfsdk/pwl/cpwl_edit_impl.cpp b/fpdfsdk/pwl/cpwl_edit_impl.cpp
index c44301f..c651999 100644
--- a/fpdfsdk/pwl/cpwl_edit_impl.cpp
+++ b/fpdfsdk/pwl/cpwl_edit_impl.cpp
@@ -43,7 +43,7 @@
                     CPDF_Font* pFont,
                     float fFontSize,
                     const CFX_Matrix& mtUser2Device,
-                    const CFX_ByteString& str,
+                    const ByteString& str,
                     FX_ARGB crTextFill,
                     int32_t nHorzScale) {
   if (!pFont)
@@ -394,7 +394,7 @@
 
 CFXEU_Clear::CFXEU_Clear(CPWL_EditImpl* pEdit,
                          const CPVT_WordRange& wrSel,
-                         const CFX_WideString& swText)
+                         const WideString& swText)
     : m_pEdit(pEdit), m_wrSel(wrSel), m_swText(swText) {
   ASSERT(m_pEdit);
 }
@@ -417,7 +417,7 @@
 CFXEU_InsertText::CFXEU_InsertText(CPWL_EditImpl* pEdit,
                                    const CPVT_WordPlace& wpOldPlace,
                                    const CPVT_WordPlace& wpNewPlace,
-                                   const CFX_WideString& swText,
+                                   const WideString& swText,
                                    int32_t charset)
     : m_pEdit(pEdit),
       m_wpOld(wpOldPlace),
@@ -526,7 +526,7 @@
             DrawTextString(
                 pDevice, CFX_PointF(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
                 pFontMap->GetPDFFont(nFontIndex), fFontSize, mtUser2Device,
-                CFX_ByteString(sTextBuf), crOldFill, nHorzScale);
+                ByteString(sTextBuf), crOldFill, nHorzScale);
 
             sTextBuf.str("");
           }
@@ -553,7 +553,7 @@
     DrawTextString(pDevice,
                    CFX_PointF(ptBT.x + ptOffset.x, ptBT.y + ptOffset.y),
                    pFontMap->GetPDFFont(nFontIndex), fFontSize, mtUser2Device,
-                   CFX_ByteString(sTextBuf), crOldFill, nHorzScale);
+                   ByteString(sTextBuf), crOldFill, nHorzScale);
   }
 }
 
@@ -736,8 +736,8 @@
   return m_wpCaret;
 }
 
-CFX_WideString CPWL_EditImpl::GetText() const {
-  CFX_WideString swRet;
+WideString CPWL_EditImpl::GetText() const {
+  WideString swRet;
   if (!m_pVT->IsValid())
     return swRet;
 
@@ -757,8 +757,8 @@
   return swRet;
 }
 
-CFX_WideString CPWL_EditImpl::GetRangeText(const CPVT_WordRange& range) const {
-  CFX_WideString swRet;
+WideString CPWL_EditImpl::GetRangeText(const CPVT_WordRange& range) const {
+  WideString swRet;
   if (!m_pVT->IsValid())
     return swRet;
 
@@ -783,7 +783,7 @@
   return swRet;
 }
 
-CFX_WideString CPWL_EditImpl::GetSelectedText() const {
+WideString CPWL_EditImpl::GetSelectedText() const {
   return GetRangeText(m_SelState.ConvertToWordRange());
 }
 
@@ -802,7 +802,7 @@
   return m_SelState.ConvertToWordRange();
 }
 
-void CPWL_EditImpl::SetText(const CFX_WideString& sText) {
+void CPWL_EditImpl::SetText(const WideString& sText) {
   Empty();
   DoInsertText(CPVT_WordPlace(0, 0, -1), sText, FX_CHARSET_Default);
   Paint();
@@ -828,7 +828,7 @@
   return Clear(true, true);
 }
 
-bool CPWL_EditImpl::InsertText(const CFX_WideString& sText, int32_t charset) {
+bool CPWL_EditImpl::InsertText(const WideString& sText, int32_t charset) {
   return InsertText(sText, charset, true, true);
 }
 
@@ -1702,7 +1702,7 @@
   return true;
 }
 
-bool CPWL_EditImpl::InsertText(const CFX_WideString& sText,
+bool CPWL_EditImpl::InsertText(const WideString& sText,
                                int32_t charset,
                                bool bAddUndo,
                                bool bPaint) {
@@ -1836,7 +1836,7 @@
 }
 
 CPVT_WordPlace CPWL_EditImpl::DoInsertText(const CPVT_WordPlace& place,
-                                           const CFX_WideString& sText,
+                                           const WideString& sText,
                                            int32_t charset) {
   CPVT_WordPlace wp = place;
 
@@ -1877,15 +1877,15 @@
   m_Undo.AddItem(std::move(pEditUndoItem));
 }
 
-CFX_ByteString CPWL_EditImpl::GetPDFWordString(int32_t nFontIndex,
-                                               uint16_t Word,
-                                               uint16_t SubWord) {
+ByteString CPWL_EditImpl::GetPDFWordString(int32_t nFontIndex,
+                                           uint16_t Word,
+                                           uint16_t SubWord) {
   IPVT_FontMap* pFontMap = GetFontMap();
   CPDF_Font* pPDFFont = pFontMap->GetPDFFont(nFontIndex);
   if (!pPDFFont)
-    return CFX_ByteString();
+    return ByteString();
 
-  CFX_ByteString sWord;
+  ByteString sWord;
   if (SubWord > 0) {
     Word = SubWord;
   } else {
diff --git a/fpdfsdk/pwl/cpwl_edit_impl.h b/fpdfsdk/pwl/cpwl_edit_impl.h
index 177a052..a63b22c 100644
--- a/fpdfsdk/pwl/cpwl_edit_impl.h
+++ b/fpdfsdk/pwl/cpwl_edit_impl.h
@@ -233,7 +233,7 @@
  public:
   CFXEU_Clear(CPWL_EditImpl* pEdit,
               const CPVT_WordRange& wrSel,
-              const CFX_WideString& swText);
+              const WideString& swText);
   ~CFXEU_Clear() override;
 
   // IFX_Edit_UndoItem:
@@ -244,7 +244,7 @@
   CFX_UnownedPtr<CPWL_EditImpl> m_pEdit;
 
   CPVT_WordRange m_wrSel;
-  CFX_WideString m_swText;
+  WideString m_swText;
 };
 
 class CFXEU_InsertText : public IFX_Edit_UndoItem {
@@ -252,7 +252,7 @@
   CFXEU_InsertText(CPWL_EditImpl* pEdit,
                    const CPVT_WordPlace& wpOldPlace,
                    const CPVT_WordPlace& wpNewPlace,
-                   const CFX_WideString& swText,
+                   const WideString& swText,
                    int32_t charset);
   ~CFXEU_InsertText() override;
 
@@ -265,7 +265,7 @@
 
   CPVT_WordPlace m_wpOld;
   CPVT_WordPlace m_wpNew;
-  CFX_WideString m_swText;
+  WideString m_swText;
   int32_t m_nCharset;
 };
 
@@ -323,27 +323,27 @@
   void OnVK_RIGHT(bool bShift, bool bCtrl);
   void OnVK_HOME(bool bShift, bool bCtrl);
   void OnVK_END(bool bShift, bool bCtrl);
-  void SetText(const CFX_WideString& sText);
+  void SetText(const WideString& sText);
   bool InsertWord(uint16_t word, int32_t charset);
   bool InsertReturn();
   bool Backspace();
   bool Delete();
   bool ClearSelection();
-  bool InsertText(const CFX_WideString& sText, int32_t charset);
+  bool InsertText(const WideString& sText, int32_t charset);
   bool Redo();
   bool Undo();
   CPVT_WordPlace WordIndexToWordPlace(int32_t index) const;
   CPVT_WordPlace SearchWordPlace(const CFX_PointF& point) const;
   int32_t GetCaret() const;
   CPVT_WordPlace GetCaretWordPlace() const;
-  CFX_WideString GetSelectedText() const;
-  CFX_WideString GetText() const;
+  WideString GetSelectedText() const;
+  WideString GetText() const;
   float GetFontSize() const;
   uint16_t GetPasswordChar() const;
   CFX_PointF GetScrollPos() const;
   int32_t GetCharArray() const;
   CFX_FloatRect GetContentRect() const;
-  CFX_WideString GetRangeText(const CPVT_WordRange& range) const;
+  WideString GetRangeText(const CPVT_WordRange& range) const;
   int32_t GetHorzScale() const;
   float GetCharSpace() const;
   void SetSelection(int32_t nStartChar, int32_t nEndChar);
@@ -366,15 +366,15 @@
   bool Empty();
 
   CPVT_WordPlace DoInsertText(const CPVT_WordPlace& place,
-                              const CFX_WideString& sText,
+                              const WideString& sText,
                               int32_t charset);
   int32_t GetCharSetFromUnicode(uint16_t word, int32_t nOldCharset);
 
   int32_t GetTotalLines() const;
 
-  CFX_ByteString GetPDFWordString(int32_t nFontIndex,
-                                  uint16_t Word,
-                                  uint16_t SubWord);
+  ByteString GetPDFWordString(int32_t nFontIndex,
+                              uint16_t Word,
+                              uint16_t SubWord);
 
  private:
   friend class CPWL_EditImpl_Iterator;
@@ -408,7 +408,7 @@
   bool Backspace(bool bAddUndo, bool bPaint);
   bool Delete(bool bAddUndo, bool bPaint);
   bool Clear(bool bAddUndo, bool bPaint);
-  bool InsertText(const CFX_WideString& sText,
+  bool InsertText(const WideString& sText,
                   int32_t charset,
                   bool bAddUndo,
                   bool bPaint);
diff --git a/fpdfsdk/pwl/cpwl_font_map.cpp b/fpdfsdk/pwl/cpwl_font_map.cpp
index 8629735..94d5fb8 100644
--- a/fpdfsdk/pwl/cpwl_font_map.cpp
+++ b/fpdfsdk/pwl/cpwl_font_map.cpp
@@ -66,11 +66,11 @@
   return nullptr;
 }
 
-CFX_ByteString CPWL_FontMap::GetPDFFontAlias(int32_t nFontIndex) {
+ByteString CPWL_FontMap::GetPDFFontAlias(int32_t nFontIndex) {
   if (pdfium::IndexInBounds(m_Data, nFontIndex) && m_Data[nFontIndex])
     return m_Data[nFontIndex]->sFontName;
 
-  return CFX_ByteString();
+  return ByteString();
 }
 
 bool CPWL_FontMap::KnowWord(int32_t nFontIndex, uint16_t word) {
@@ -122,15 +122,15 @@
   return word < 0xFF ? word : -1;
 }
 
-CFX_ByteString CPWL_FontMap::GetNativeFontName(int32_t nCharset) {
+ByteString CPWL_FontMap::GetNativeFontName(int32_t nCharset) {
   for (const auto& pData : m_NativeFont) {
     if (pData && pData->nCharset == nCharset)
       return pData->sFontName;
   }
 
-  CFX_ByteString sNew = GetNativeFont(nCharset);
+  ByteString sNew = GetNativeFont(nCharset);
   if (sNew.IsEmpty())
-    return CFX_ByteString();
+    return ByteString();
 
   auto pNewData = pdfium::MakeUnique<CPWL_FontMap_Native>();
   pNewData->nCharset = nCharset;
@@ -148,7 +148,7 @@
   GetFontIndex(kDefaultFontName, FX_CHARSET_ANSI, false);
 }
 
-bool CPWL_FontMap::IsStandardFont(const CFX_ByteString& sFontName) {
+bool CPWL_FontMap::IsStandardFont(const ByteString& sFontName) {
   for (size_t i = 0; i < FX_ArraySize(g_sDEStandardFontName); ++i) {
     if (sFontName == g_sDEStandardFontName[i])
       return true;
@@ -157,8 +157,7 @@
   return false;
 }
 
-int32_t CPWL_FontMap::FindFont(const CFX_ByteString& sFontName,
-                               int32_t nCharset) {
+int32_t CPWL_FontMap::FindFont(const ByteString& sFontName, int32_t nCharset) {
   int32_t i = 0;
   for (const auto& pData : m_Data) {
     if (pData &&
@@ -171,17 +170,17 @@
   return -1;
 }
 
-int32_t CPWL_FontMap::GetFontIndex(const CFX_ByteString& sFontName,
+int32_t CPWL_FontMap::GetFontIndex(const ByteString& sFontName,
                                    int32_t nCharset,
                                    bool bFind) {
   int32_t nFontIndex = FindFont(EncodeFontAlias(sFontName, nCharset), nCharset);
   if (nFontIndex >= 0)
     return nFontIndex;
 
-  CFX_ByteString sAlias;
+  ByteString sAlias;
   CPDF_Font* pFont = bFind ? FindFontSameCharset(&sAlias, nCharset) : nullptr;
   if (!pFont) {
-    CFX_ByteString sTemp = sFontName;
+    ByteString sTemp = sFontName;
     pFont = AddFontToDocument(GetDocument(), sTemp, nCharset);
     sAlias = EncodeFontAlias(sTemp, nCharset);
   }
@@ -189,13 +188,13 @@
   return AddFontData(pFont, sAlias, nCharset);
 }
 
-CPDF_Font* CPWL_FontMap::FindFontSameCharset(CFX_ByteString* sFontAlias,
+CPDF_Font* CPWL_FontMap::FindFontSameCharset(ByteString* sFontAlias,
                                              int32_t nCharset) {
   return nullptr;
 }
 
 int32_t CPWL_FontMap::AddFontData(CPDF_Font* pFont,
-                                  const CFX_ByteString& sFontAlias,
+                                  const ByteString& sFontAlias,
                                   int32_t nCharset) {
   auto pNewData = pdfium::MakeUnique<CPWL_FontMap_Data>();
   pNewData->pFont = pFont;
@@ -205,22 +204,21 @@
   return pdfium::CollectionSize<int32_t>(m_Data) - 1;
 }
 
-void CPWL_FontMap::AddedFont(CPDF_Font* pFont,
-                             const CFX_ByteString& sFontAlias) {}
+void CPWL_FontMap::AddedFont(CPDF_Font* pFont, const ByteString& sFontAlias) {}
 
-CFX_ByteString CPWL_FontMap::GetNativeFont(int32_t nCharset) {
+ByteString CPWL_FontMap::GetNativeFont(int32_t nCharset) {
   if (nCharset == FX_CHARSET_Default)
     nCharset = GetNativeCharset();
 
-  CFX_ByteString sFontName = GetDefaultFontByCharset(nCharset);
+  ByteString sFontName = GetDefaultFontByCharset(nCharset);
   if (!m_pSystemHandler->FindNativeTrueTypeFont(sFontName))
-    return CFX_ByteString();
+    return ByteString();
 
   return sFontName;
 }
 
 CPDF_Font* CPWL_FontMap::AddFontToDocument(CPDF_Document* pDoc,
-                                           CFX_ByteString& sFontName,
+                                           ByteString& sFontName,
                                            uint8_t nCharset) {
   if (IsStandardFont(sFontName))
     return AddStandardFont(pDoc, sFontName);
@@ -229,7 +227,7 @@
 }
 
 CPDF_Font* CPWL_FontMap::AddStandardFont(CPDF_Document* pDoc,
-                                         CFX_ByteString& sFontName) {
+                                         ByteString& sFontName) {
   if (!pDoc)
     return nullptr;
 
@@ -246,7 +244,7 @@
 }
 
 CPDF_Font* CPWL_FontMap::AddSystemFont(CPDF_Document* pDoc,
-                                       CFX_ByteString& sFontName,
+                                       ByteString& sFontName,
                                        uint8_t nCharset) {
   if (!pDoc)
     return nullptr;
@@ -260,15 +258,15 @@
                                                       nCharset);
 }
 
-CFX_ByteString CPWL_FontMap::EncodeFontAlias(const CFX_ByteString& sFontName,
-                                             int32_t nCharset) {
-  CFX_ByteString sPostfix;
+ByteString CPWL_FontMap::EncodeFontAlias(const ByteString& sFontName,
+                                         int32_t nCharset) {
+  ByteString sPostfix;
   sPostfix.Format("_%02X", nCharset);
   return EncodeFontAlias(sFontName) + sPostfix;
 }
 
-CFX_ByteString CPWL_FontMap::EncodeFontAlias(const CFX_ByteString& sFontName) {
-  CFX_ByteString sRet = sFontName;
+ByteString CPWL_FontMap::EncodeFontAlias(const ByteString& sFontName) {
+  ByteString sRet = sFontName;
   sRet.Remove(' ');
   return sRet;
 }
@@ -349,7 +347,7 @@
     {FX_CHARSET_MSWin_Arabic, "Arial"},
     {-1, nullptr}};
 
-CFX_ByteString CPWL_FontMap::GetDefaultFontByCharset(int32_t nCharset) {
+ByteString CPWL_FontMap::GetDefaultFontByCharset(int32_t nCharset) {
   int i = 0;
   while (defaultTTFMap[i].charset != -1) {
     if (nCharset == defaultTTFMap[i].charset)
diff --git a/fpdfsdk/pwl/cpwl_font_map.h b/fpdfsdk/pwl/cpwl_font_map.h
index 9872779..5336949 100644
--- a/fpdfsdk/pwl/cpwl_font_map.h
+++ b/fpdfsdk/pwl/cpwl_font_map.h
@@ -21,12 +21,12 @@
 struct CPWL_FontMap_Data {
   CPDF_Font* pFont;
   int32_t nCharset;
-  CFX_ByteString sFontName;
+  ByteString sFontName;
 };
 
 struct CPWL_FontMap_Native {
   int32_t nCharset;
-  CFX_ByteString sFontName;
+  ByteString sFontName;
 };
 
 class CPWL_FontMap : public IPVT_FontMap {
@@ -36,7 +36,7 @@
 
   // IPVT_FontMap
   CPDF_Font* GetPDFFont(int32_t nFontIndex) override;
-  CFX_ByteString GetPDFFontAlias(int32_t nFontIndex) override;
+  ByteString GetPDFFontAlias(int32_t nFontIndex) override;
   int32_t GetWordFontIndex(uint16_t word,
                            int32_t nCharset,
                            int32_t nFontIndex) override;
@@ -45,47 +45,46 @@
 
   const CPWL_FontMap_Data* GetFontMapData(int32_t nIndex) const;
   static int32_t GetNativeCharset();
-  CFX_ByteString GetNativeFontName(int32_t nCharset);
+  ByteString GetNativeFontName(int32_t nCharset);
 
-  static CFX_ByteString GetDefaultFontByCharset(int32_t nCharset);
+  static ByteString GetDefaultFontByCharset(int32_t nCharset);
   static const FPDF_CharsetFontMap defaultTTFMap[];
 
  protected:
   virtual void Initialize();
   virtual CPDF_Document* GetDocument();
-  virtual CPDF_Font* FindFontSameCharset(CFX_ByteString* sFontAlias,
+  virtual CPDF_Font* FindFontSameCharset(ByteString* sFontAlias,
                                          int32_t nCharset);
-  virtual void AddedFont(CPDF_Font* pFont, const CFX_ByteString& sFontAlias);
+  virtual void AddedFont(CPDF_Font* pFont, const ByteString& sFontAlias);
 
   bool KnowWord(int32_t nFontIndex, uint16_t word);
 
   void Empty();
-  int32_t GetFontIndex(const CFX_ByteString& sFontName,
+  int32_t GetFontIndex(const ByteString& sFontName,
                        int32_t nCharset,
                        bool bFind);
   int32_t AddFontData(CPDF_Font* pFont,
-                      const CFX_ByteString& sFontAlias,
+                      const ByteString& sFontAlias,
                       int32_t nCharset = FX_CHARSET_Default);
 
-  CFX_ByteString EncodeFontAlias(const CFX_ByteString& sFontName,
-                                 int32_t nCharset);
-  CFX_ByteString EncodeFontAlias(const CFX_ByteString& sFontName);
+  ByteString EncodeFontAlias(const ByteString& sFontName, int32_t nCharset);
+  ByteString EncodeFontAlias(const ByteString& sFontName);
 
   std::vector<std::unique_ptr<CPWL_FontMap_Data>> m_Data;
   std::vector<std::unique_ptr<CPWL_FontMap_Native>> m_NativeFont;
 
  private:
-  int32_t FindFont(const CFX_ByteString& sFontName,
+  int32_t FindFont(const ByteString& sFontName,
                    int32_t nCharset = FX_CHARSET_Default);
 
-  CFX_ByteString GetNativeFont(int32_t nCharset);
+  ByteString GetNativeFont(int32_t nCharset);
   CPDF_Font* AddFontToDocument(CPDF_Document* pDoc,
-                               CFX_ByteString& sFontName,
+                               ByteString& sFontName,
                                uint8_t nCharset);
-  bool IsStandardFont(const CFX_ByteString& sFontName);
-  CPDF_Font* AddStandardFont(CPDF_Document* pDoc, CFX_ByteString& sFontName);
+  bool IsStandardFont(const ByteString& sFontName);
+  CPDF_Font* AddStandardFont(CPDF_Document* pDoc, ByteString& sFontName);
   CPDF_Font* AddSystemFont(CPDF_Document* pDoc,
-                           CFX_ByteString& sFontName,
+                           ByteString& sFontName,
                            uint8_t nCharset);
 
   std::unique_ptr<CPDF_Document> m_pPDFDoc;
diff --git a/fpdfsdk/pwl/cpwl_icon.cpp b/fpdfsdk/pwl/cpwl_icon.cpp
index 8a2e31d..e7669b3 100644
--- a/fpdfsdk/pwl/cpwl_icon.cpp
+++ b/fpdfsdk/pwl/cpwl_icon.cpp
@@ -37,12 +37,12 @@
   return CFX_Matrix();
 }
 
-CFX_ByteString CPWL_Icon::GetImageAlias() {
+ByteString CPWL_Icon::GetImageAlias() {
   if (!m_pPDFStream)
-    return CFX_ByteString();
+    return ByteString();
   if (CPDF_Dictionary* pDict = m_pPDFStream->GetDict())
     return pDict->GetStringFor("Name");
-  return CFX_ByteString();
+  return ByteString();
 }
 
 std::pair<float, float> CPWL_Icon::GetIconPosition() {
diff --git a/fpdfsdk/pwl/cpwl_icon.h b/fpdfsdk/pwl/cpwl_icon.h
index 2607e56..e2f792b 100644
--- a/fpdfsdk/pwl/cpwl_icon.h
+++ b/fpdfsdk/pwl/cpwl_icon.h
@@ -28,7 +28,7 @@
   std::pair<float, float> GetImageOffset();
 
   CFX_Matrix GetImageMatrix();
-  CFX_ByteString GetImageAlias();
+  ByteString GetImageAlias();
 
  private:
   // left, bottom
diff --git a/fpdfsdk/pwl/cpwl_list_box.cpp b/fpdfsdk/pwl/cpwl_list_box.cpp
index 4090e79..b5c6293 100644
--- a/fpdfsdk/pwl/cpwl_list_box.cpp
+++ b/fpdfsdk/pwl/cpwl_list_box.cpp
@@ -72,7 +72,7 @@
 
 CPWL_ListBox::~CPWL_ListBox() {}
 
-CFX_ByteString CPWL_ListBox::GetClassName() const {
+ByteString CPWL_ListBox::GetClassName() const {
   return "CPWL_ListBox";
 }
 
@@ -260,8 +260,8 @@
   if (!m_pFillerNotify)
     return false;
 
-  CFX_WideString swChange = GetText();
-  CFX_WideString strChangeEx;
+  WideString swChange = GetText();
+  WideString strChangeEx;
   int nSelStart = 0;
   int nSelEnd = swChange.GetLength();
   bool bRC;
@@ -282,11 +282,11 @@
   return CPWL_Wnd::GetFocusRect();
 }
 
-void CPWL_ListBox::AddString(const CFX_WideString& str) {
+void CPWL_ListBox::AddString(const WideString& str) {
   m_pList->AddString(str);
 }
 
-CFX_WideString CPWL_ListBox::GetText() const {
+WideString CPWL_ListBox::GetText() const {
   return m_pList->GetText();
 }
 
diff --git a/fpdfsdk/pwl/cpwl_list_box.h b/fpdfsdk/pwl/cpwl_list_box.h
index f620ec1..1e028f7 100644
--- a/fpdfsdk/pwl/cpwl_list_box.h
+++ b/fpdfsdk/pwl/cpwl_list_box.h
@@ -44,7 +44,7 @@
   ~CPWL_ListBox() override;
 
   // CPWL_Wnd
-  CFX_ByteString GetClassName() const override;
+  ByteString GetClassName() const override;
   void OnCreated() override;
   void OnDestroy() override;
   void DrawThisAppearance(CFX_RenderDevice* pDevice,
@@ -66,11 +66,11 @@
   void SetFontSize(float fFontSize) override;
   float GetFontSize() const override;
 
-  virtual CFX_WideString GetText() const;
+  virtual WideString GetText() const;
 
   bool OnNotifySelectionChanged(bool bKeyDown, uint32_t nFlag);
 
-  void AddString(const CFX_WideString& str);
+  void AddString(const WideString& str);
   void SetTopVisibleIndex(int32_t nItemIndex);
   void ScrollToListItem(int32_t nItemIndex);
   void ResetContent();
diff --git a/fpdfsdk/pwl/cpwl_list_impl.cpp b/fpdfsdk/pwl/cpwl_list_impl.cpp
index 94e0606..da455d0 100644
--- a/fpdfsdk/pwl/cpwl_list_impl.cpp
+++ b/fpdfsdk/pwl/cpwl_list_impl.cpp
@@ -29,7 +29,7 @@
   m_pEdit->SetFontMap(pFontMap);
 }
 
-void CPWL_ListCtrl::Item::SetText(const CFX_WideString& text) {
+void CPWL_ListCtrl::Item::SetText(const WideString& text) {
   m_pEdit->SetText(text);
 }
 
@@ -49,7 +49,7 @@
   return word.Word;
 }
 
-CFX_WideString CPWL_ListCtrl::Item::GetText() const {
+WideString CPWL_ListCtrl::Item::GetText() const {
   return m_pEdit->GetText();
 }
 
@@ -310,7 +310,7 @@
   return InnerToOuter(rcItem);
 }
 
-void CPWL_ListCtrl::AddString(const CFX_WideString& str) {
+void CPWL_ListCtrl::AddString(const WideString& str) {
   AddItem(str);
   ReArrange(GetCount() - 1);
 }
@@ -551,13 +551,13 @@
   return -1;
 }
 
-CFX_WideString CPWL_ListCtrl::GetText() const {
+WideString CPWL_ListCtrl::GetText() const {
   if (IsMultipleSel())
     return GetItemText(m_nCaretIndex);
   return GetItemText(m_nSelItem);
 }
 
-void CPWL_ListCtrl::AddItem(const CFX_WideString& str) {
+void CPWL_ListCtrl::AddItem(const WideString& str) {
   auto pListItem = pdfium::MakeUnique<Item>();
   pListItem->SetFontMap(m_pFontMap.Get());
   pListItem->SetFontSize(m_fFontSize);
@@ -630,7 +630,7 @@
   return pdfium::IndexInBounds(m_ListItems, nItemIndex);
 }
 
-CFX_WideString CPWL_ListCtrl::GetItemText(int32_t nIndex) const {
+WideString CPWL_ListCtrl::GetItemText(int32_t nIndex) const {
   if (pdfium::IndexInBounds(m_ListItems, nIndex) && m_ListItems[nIndex])
     return m_ListItems[nIndex]->GetText();
   return L"";
diff --git a/fpdfsdk/pwl/cpwl_list_impl.h b/fpdfsdk/pwl/cpwl_list_impl.h
index 9bb0d29..18ca0a3 100644
--- a/fpdfsdk/pwl/cpwl_list_impl.h
+++ b/fpdfsdk/pwl/cpwl_list_impl.h
@@ -68,13 +68,13 @@
   CFX_FloatRect GetContentRect() const;
 
   int32_t GetItemIndex(const CFX_PointF& point) const;
-  void AddString(const CFX_WideString& str);
+  void AddString(const WideString& str);
   void SetTopItem(int32_t nIndex);
   void Select(int32_t nItemIndex);
   void SetCaret(int32_t nItemIndex);
   void Empty();
   void Cancel();
-  CFX_WideString GetText() const;
+  WideString GetText() const;
 
   void SetFontMap(IPVT_FontMap* pFontMap) { m_pFontMap = pFontMap; }
   void SetFontSize(float fFontSize) { m_fFontSize = fFontSize; }
@@ -102,9 +102,9 @@
 
     void SetRect(const CFX_FloatRect& rect) { m_rcListItem = rect; }
     void SetSelect(bool bSelected) { m_bSelected = bSelected; }
-    void SetText(const CFX_WideString& text);
+    void SetText(const WideString& text);
     void SetFontSize(float fFontSize);
-    CFX_WideString GetText() const;
+    WideString GetText() const;
 
     CFX_FloatRect GetRect() const { return m_rcListItem; }
     bool IsSelected() const { return m_bSelected; }
@@ -142,8 +142,8 @@
   bool IsItemVisible(int32_t nItemIndex) const;
   void SetScrollInfo();
   void SetScrollPosY(float fy);
-  void AddItem(const CFX_WideString& str);
-  CFX_WideString GetItemText(int32_t nIndex) const;
+  void AddItem(const WideString& str);
+  WideString GetItemText(int32_t nIndex) const;
   void SetItemSelect(int32_t nItemIndex, bool bSelected);
   int32_t GetLastSelected() const;
   CFX_PointF GetBTPoint() const {
diff --git a/fpdfsdk/pwl/cpwl_scroll_bar.cpp b/fpdfsdk/pwl/cpwl_scroll_bar.cpp
index 1524729..e50f778 100644
--- a/fpdfsdk/pwl/cpwl_scroll_bar.cpp
+++ b/fpdfsdk/pwl/cpwl_scroll_bar.cpp
@@ -127,7 +127,7 @@
 
 CPWL_SBButton::~CPWL_SBButton() {}
 
-CFX_ByteString CPWL_SBButton::GetClassName() const {
+ByteString CPWL_SBButton::GetClassName() const {
   return "CPWL_SBButton";
 }
 
@@ -325,7 +325,7 @@
 
 CPWL_ScrollBar::~CPWL_ScrollBar() {}
 
-CFX_ByteString CPWL_ScrollBar::GetClassName() const {
+ByteString CPWL_ScrollBar::GetClassName() const {
   return "CPWL_ScrollBar";
 }
 
diff --git a/fpdfsdk/pwl/cpwl_scroll_bar.h b/fpdfsdk/pwl/cpwl_scroll_bar.h
index 44c72cb..48aef16 100644
--- a/fpdfsdk/pwl/cpwl_scroll_bar.h
+++ b/fpdfsdk/pwl/cpwl_scroll_bar.h
@@ -49,7 +49,7 @@
   ~CPWL_SBButton() override;
 
   // CPWL_Wnd
-  CFX_ByteString GetClassName() const override;
+  ByteString GetClassName() const override;
   void OnCreate(CreateParams* pParamsToAdjust) override;
   void DrawThisAppearance(CFX_RenderDevice* pDevice,
                           const CFX_Matrix& mtUser2Device) override;
@@ -121,7 +121,7 @@
   ~CPWL_ScrollBar() override;
 
   // CPWL_Wnd:
-  CFX_ByteString GetClassName() const override;
+  ByteString GetClassName() const override;
   void OnCreate(CreateParams* pParamsToAdjust) override;
   void OnDestroy() override;
   void RePosChildWnd() override;
diff --git a/fpdfsdk/pwl/cpwl_special_button.cpp b/fpdfsdk/pwl/cpwl_special_button.cpp
index 53f7f2c..ddca67e 100644
--- a/fpdfsdk/pwl/cpwl_special_button.cpp
+++ b/fpdfsdk/pwl/cpwl_special_button.cpp
@@ -12,7 +12,7 @@
 
 CPWL_PushButton::~CPWL_PushButton() {}
 
-CFX_ByteString CPWL_PushButton::GetClassName() const {
+ByteString CPWL_PushButton::GetClassName() const {
   return "CPWL_PushButton";
 }
 
@@ -25,7 +25,7 @@
 
 CPWL_CheckBox::~CPWL_CheckBox() {}
 
-CFX_ByteString CPWL_CheckBox::GetClassName() const {
+ByteString CPWL_CheckBox::GetClassName() const {
   return "CPWL_CheckBox";
 }
 
@@ -54,7 +54,7 @@
 
 CPWL_RadioButton::~CPWL_RadioButton() {}
 
-CFX_ByteString CPWL_RadioButton::GetClassName() const {
+ByteString CPWL_RadioButton::GetClassName() const {
   return "CPWL_RadioButton";
 }
 
diff --git a/fpdfsdk/pwl/cpwl_special_button.h b/fpdfsdk/pwl/cpwl_special_button.h
index b499542..076b529 100644
--- a/fpdfsdk/pwl/cpwl_special_button.h
+++ b/fpdfsdk/pwl/cpwl_special_button.h
@@ -15,7 +15,7 @@
   ~CPWL_PushButton() override;
 
   // CPWL_Button
-  CFX_ByteString GetClassName() const override;
+  ByteString GetClassName() const override;
   CFX_FloatRect GetFocusRect() const override;
 };
 
@@ -25,7 +25,7 @@
   ~CPWL_CheckBox() override;
 
   // CPWL_Button
-  CFX_ByteString GetClassName() const override;
+  ByteString GetClassName() const override;
   bool OnLButtonUp(const CFX_PointF& point, uint32_t nFlag) override;
   bool OnChar(uint16_t nChar, uint32_t nFlag) override;
 
@@ -42,7 +42,7 @@
   ~CPWL_RadioButton() override;
 
   // CPWL_Button
-  CFX_ByteString GetClassName() const override;
+  ByteString GetClassName() const override;
   bool OnLButtonUp(const CFX_PointF& point, uint32_t nFlag) override;
   bool OnChar(uint16_t nChar, uint32_t nFlag) override;
 
diff --git a/fpdfsdk/pwl/cpwl_wnd.cpp b/fpdfsdk/pwl/cpwl_wnd.cpp
index 401fed3..1c1512e 100644
--- a/fpdfsdk/pwl/cpwl_wnd.cpp
+++ b/fpdfsdk/pwl/cpwl_wnd.cpp
@@ -146,7 +146,7 @@
   ASSERT(!m_bCreated);
 }
 
-CFX_ByteString CPWL_Wnd::GetClassName() const {
+ByteString CPWL_Wnd::GetClassName() const {
   return "CPWL_Wnd";
 }
 
@@ -361,11 +361,11 @@
 PWL_IMPLEMENT_MOUSE_METHOD(OnMouseMove)
 #undef PWL_IMPLEMENT_MOUSE_METHOD
 
-CFX_WideString CPWL_Wnd::GetSelectedText() {
-  return CFX_WideString();
+WideString CPWL_Wnd::GetSelectedText() {
+  return WideString();
 }
 
-void CPWL_Wnd::ReplaceSelection(const CFX_WideString& text) {}
+void CPWL_Wnd::ReplaceSelection(const WideString& text) {}
 
 bool CPWL_Wnd::OnMouseWheel(short zDelta,
                             const CFX_PointF& point,
diff --git a/fpdfsdk/pwl/cpwl_wnd.h b/fpdfsdk/pwl/cpwl_wnd.h
index 2fd5077..17ed064 100644
--- a/fpdfsdk/pwl/cpwl_wnd.h
+++ b/fpdfsdk/pwl/cpwl_wnd.h
@@ -152,7 +152,7 @@
   CPWL_Wnd();
   ~CPWL_Wnd() override;
 
-  virtual CFX_ByteString GetClassName() const;
+  virtual ByteString GetClassName() const;
   virtual void InvalidateRect(CFX_FloatRect* pRect);
 
   virtual bool OnKeyDown(uint16_t nChar, uint32_t nFlag);
@@ -179,8 +179,8 @@
   virtual void SetFontSize(float fFontSize);
   virtual float GetFontSize() const;
 
-  virtual CFX_WideString GetSelectedText();
-  virtual void ReplaceSelection(const CFX_WideString& text);
+  virtual WideString GetSelectedText();
+  virtual void ReplaceSelection(const WideString& text);
   virtual CFX_FloatRect GetFocusRect() const;
   virtual CFX_FloatRect GetClientRect() const;
 
diff --git a/fxbarcode/BC_UtilCodingConvert.cpp b/fxbarcode/BC_UtilCodingConvert.cpp
index f0f497a..77c52f2 100644
--- a/fxbarcode/BC_UtilCodingConvert.cpp
+++ b/fxbarcode/BC_UtilCodingConvert.cpp
@@ -10,43 +10,42 @@
 
 CBC_UtilCodingConvert::~CBC_UtilCodingConvert() {}
 
-void CBC_UtilCodingConvert::UnicodeToLocale(const CFX_WideString& src,
-                                            CFX_ByteString& dst) {
-  dst = CFX_ByteString::FromUnicode(src);
+void CBC_UtilCodingConvert::UnicodeToLocale(const WideString& src,
+                                            ByteString& dst) {
+  dst = ByteString::FromUnicode(src);
 }
 
-void CBC_UtilCodingConvert::LocaleToUtf8(const CFX_ByteString& src,
-                                         CFX_ByteString& dst) {
-  CFX_WideString unicode = CFX_WideString::FromLocal(src.AsStringC());
+void CBC_UtilCodingConvert::LocaleToUtf8(const ByteString& src,
+                                         ByteString& dst) {
+  WideString unicode = WideString::FromLocal(src.AsStringView());
   dst = unicode.UTF8Encode();
 }
 
-void CBC_UtilCodingConvert::LocaleToUtf8(const CFX_ByteString& src,
+void CBC_UtilCodingConvert::LocaleToUtf8(const ByteString& src,
                                          std::vector<uint8_t>& dst) {
-  CFX_WideString unicode = CFX_WideString::FromLocal(src.AsStringC());
-  CFX_ByteString utf8 = unicode.UTF8Encode();
+  WideString unicode = WideString::FromLocal(src.AsStringView());
+  ByteString utf8 = unicode.UTF8Encode();
   dst = std::vector<uint8_t>(utf8.begin(), utf8.end());
 }
 
 void CBC_UtilCodingConvert::Utf8ToLocale(const std::vector<uint8_t>& src,
-                                         CFX_ByteString& dst) {
-  CFX_ByteString utf8;
+                                         ByteString& dst) {
+  ByteString utf8;
   for (uint8_t value : src)
     utf8 += value;
 
-  CFX_WideString unicode = CFX_WideString::FromUTF8(utf8.AsStringC());
-  dst = CFX_ByteString::FromUnicode(unicode);
+  WideString unicode = WideString::FromUTF8(utf8.AsStringView());
+  dst = ByteString::FromUnicode(unicode);
 }
 
 void CBC_UtilCodingConvert::Utf8ToLocale(const uint8_t* src,
                                          int32_t count,
-                                         CFX_ByteString& dst) {
-  CFX_WideString unicode =
-      CFX_WideString::FromUTF8(CFX_ByteStringC(src, count));
-  dst = CFX_ByteString::FromUnicode(unicode);
+                                         ByteString& dst) {
+  WideString unicode = WideString::FromUTF8(ByteStringView(src, count));
+  dst = ByteString::FromUnicode(unicode);
 }
 
-void CBC_UtilCodingConvert::UnicodeToUTF8(const CFX_WideString& src,
-                                          CFX_ByteString& dst) {
+void CBC_UtilCodingConvert::UnicodeToUTF8(const WideString& src,
+                                          ByteString& dst) {
   dst = src.UTF8Encode();
 }
diff --git a/fxbarcode/BC_UtilCodingConvert.h b/fxbarcode/BC_UtilCodingConvert.h
index de6b30e..8600cd1 100644
--- a/fxbarcode/BC_UtilCodingConvert.h
+++ b/fxbarcode/BC_UtilCodingConvert.h
@@ -15,19 +15,16 @@
  public:
   CBC_UtilCodingConvert();
   virtual ~CBC_UtilCodingConvert();
-  static void UnicodeToLocale(const CFX_WideString& source,
-                              CFX_ByteString& result);
-  static void LocaleToUtf8(const CFX_ByteString& source,
-                           CFX_ByteString& result);
-  static void LocaleToUtf8(const CFX_ByteString& source,
+  static void UnicodeToLocale(const WideString& source, ByteString& result);
+  static void LocaleToUtf8(const ByteString& source, ByteString& result);
+  static void LocaleToUtf8(const ByteString& source,
                            std::vector<uint8_t>& result);
   static void Utf8ToLocale(const std::vector<uint8_t>& source,
-                           CFX_ByteString& result);
+                           ByteString& result);
   static void Utf8ToLocale(const uint8_t* source,
                            int32_t count,
-                           CFX_ByteString& result);
-  static void UnicodeToUTF8(const CFX_WideString& source,
-                            CFX_ByteString& result);
+                           ByteString& result);
+  static void UnicodeToUTF8(const WideString& source, ByteString& result);
 };
 
 #endif  // FXBARCODE_BC_UTILCODINGCONVERT_H_
diff --git a/fxbarcode/BC_Utils.cpp b/fxbarcode/BC_Utils.cpp
index 284322e..1d09e24 100644
--- a/fxbarcode/BC_Utils.cpp
+++ b/fxbarcode/BC_Utils.cpp
@@ -8,7 +8,7 @@
 
 #include "fxbarcode/utils.h"
 
-bool BC_FX_ByteString_Replace(CFX_ByteString& dst,
+bool BC_FX_ByteString_Replace(ByteString& dst,
                               uint32_t first,
                               uint32_t last,
                               int32_t count,
@@ -23,12 +23,11 @@
   return true;
 }
 
-void BC_FX_ByteString_Append(CFX_ByteString& dst, int32_t count, char c) {
+void BC_FX_ByteString_Append(ByteString& dst, int32_t count, char c) {
   for (int32_t i = 0; i < count; i++)
     dst += c;
 }
-void BC_FX_ByteString_Append(CFX_ByteString& dst,
-                             const std::vector<uint8_t>& ba) {
+void BC_FX_ByteString_Append(ByteString& dst, const std::vector<uint8_t>& ba) {
   for (uint8_t value : ba)
     dst += value;
 }
diff --git a/fxbarcode/cbc_codabar.cpp b/fxbarcode/cbc_codabar.cpp
index a8729b6..0795ff2 100644
--- a/fxbarcode/cbc_codabar.cpp
+++ b/fxbarcode/cbc_codabar.cpp
@@ -47,16 +47,15 @@
   return GetOnedCodaBarWriter()->SetWideNarrowRatio(ratio);
 }
 
-bool CBC_Codabar::Encode(const CFX_WideStringC& contents) {
+bool CBC_Codabar::Encode(const WideStringView& contents) {
   if (contents.IsEmpty())
     return false;
 
   BCFORMAT format = BCFORMAT_CODABAR;
   int32_t outWidth = 0;
   int32_t outHeight = 0;
-  CFX_WideString filtercontents =
-      GetOnedCodaBarWriter()->FilterContents(contents);
-  CFX_ByteString byteString = filtercontents.UTF8Encode();
+  WideString filtercontents = GetOnedCodaBarWriter()->FilterContents(contents);
+  ByteString byteString = filtercontents.UTF8Encode();
   m_renderContents = filtercontents;
   auto* pWriter = GetOnedCodaBarWriter();
   std::unique_ptr<uint8_t, FxFreeDeleter> data(
@@ -64,16 +63,16 @@
   if (!data)
     return false;
 
-  return pWriter->RenderResult(filtercontents.AsStringC(), data.get(),
+  return pWriter->RenderResult(filtercontents.AsStringView(), data.get(),
                                outWidth);
 }
 
 bool CBC_Codabar::RenderDevice(CFX_RenderDevice* device,
                                const CFX_Matrix* matrix) {
   auto* pWriter = GetOnedCodaBarWriter();
-  CFX_WideString renderCon =
-      pWriter->encodedContents(m_renderContents.AsStringC());
-  return pWriter->RenderDeviceResult(device, matrix, renderCon.AsStringC());
+  WideString renderCon =
+      pWriter->encodedContents(m_renderContents.AsStringView());
+  return pWriter->RenderDeviceResult(device, matrix, renderCon.AsStringView());
 }
 
 BC_TYPE CBC_Codabar::GetType() {
diff --git a/fxbarcode/cbc_codabar.h b/fxbarcode/cbc_codabar.h
index 092b840..827fc28 100644
--- a/fxbarcode/cbc_codabar.h
+++ b/fxbarcode/cbc_codabar.h
@@ -20,7 +20,7 @@
   ~CBC_Codabar() override;
 
   // CBC_OneCode:
-  bool Encode(const CFX_WideStringC& contents) override;
+  bool Encode(const WideStringView& contents) override;
   bool RenderDevice(CFX_RenderDevice* device,
                     const CFX_Matrix* matrix) override;
   BC_TYPE GetType() override;
@@ -33,7 +33,7 @@
  private:
   CBC_OnedCodaBarWriter* GetOnedCodaBarWriter();
 
-  CFX_WideString m_renderContents;
+  WideString m_renderContents;
 };
 
 #endif  // FXBARCODE_CBC_CODABAR_H_
diff --git a/fxbarcode/cbc_code128.cpp b/fxbarcode/cbc_code128.cpp
index d802b28..7ba6235 100644
--- a/fxbarcode/cbc_code128.cpp
+++ b/fxbarcode/cbc_code128.cpp
@@ -35,7 +35,7 @@
   return GetOnedCode128Writer()->SetTextLocation(location);
 }
 
-bool CBC_Code128::Encode(const CFX_WideStringC& contents) {
+bool CBC_Code128::Encode(const WideStringView& contents) {
   if (contents.IsEmpty())
     return false;
 
@@ -43,25 +43,25 @@
   int32_t outWidth = 0;
   int32_t outHeight = 0;
   auto* pWriter = GetOnedCode128Writer();
-  CFX_WideString content(contents);
+  WideString content(contents);
   if (contents.GetLength() % 2 && pWriter->GetType() == BC_CODE128_C)
     content += '0';
 
-  CFX_WideString encodeContents = pWriter->FilterContents(content.AsStringC());
+  WideString encodeContents = pWriter->FilterContents(content.AsStringView());
   m_renderContents = encodeContents;
-  CFX_ByteString byteString = encodeContents.UTF8Encode();
+  ByteString byteString = encodeContents.UTF8Encode();
   std::unique_ptr<uint8_t, FxFreeDeleter> data(
       pWriter->Encode(byteString, format, outWidth, outHeight));
   if (!data)
     return false;
-  return pWriter->RenderResult(encodeContents.AsStringC(), data.get(),
+  return pWriter->RenderResult(encodeContents.AsStringView(), data.get(),
                                outWidth);
 }
 
 bool CBC_Code128::RenderDevice(CFX_RenderDevice* device,
                                const CFX_Matrix* matrix) {
   return GetOnedCode128Writer()->RenderDeviceResult(
-      device, matrix, m_renderContents.AsStringC());
+      device, matrix, m_renderContents.AsStringView());
 }
 
 BC_TYPE CBC_Code128::GetType() {
diff --git a/fxbarcode/cbc_code128.h b/fxbarcode/cbc_code128.h
index 571ee7e..b057aff 100644
--- a/fxbarcode/cbc_code128.h
+++ b/fxbarcode/cbc_code128.h
@@ -20,7 +20,7 @@
   ~CBC_Code128() override;
 
   // CBC_OneCode:
-  bool Encode(const CFX_WideStringC& contents) override;
+  bool Encode(const WideStringView& contents) override;
   bool RenderDevice(CFX_RenderDevice* device,
                     const CFX_Matrix* matrix) override;
   BC_TYPE GetType() override;
@@ -30,7 +30,7 @@
  private:
   CBC_OnedCode128Writer* GetOnedCode128Writer();
 
-  CFX_WideString m_renderContents;
+  WideString m_renderContents;
 };
 
 #endif  // FXBARCODE_CBC_CODE128_H_
diff --git a/fxbarcode/cbc_code39.cpp b/fxbarcode/cbc_code39.cpp
index a46af14..9715c25 100644
--- a/fxbarcode/cbc_code39.cpp
+++ b/fxbarcode/cbc_code39.cpp
@@ -31,7 +31,7 @@
 
 CBC_Code39::~CBC_Code39() {}
 
-bool CBC_Code39::Encode(const CFX_WideStringC& contents) {
+bool CBC_Code39::Encode(const WideStringView& contents) {
   if (contents.IsEmpty())
     return false;
 
@@ -39,25 +39,25 @@
   int32_t outWidth = 0;
   int32_t outHeight = 0;
   auto* pWriter = GetOnedCode39Writer();
-  CFX_WideString filtercontents = pWriter->FilterContents(contents);
-  CFX_WideString renderContents = pWriter->RenderTextContents(contents);
+  WideString filtercontents = pWriter->FilterContents(contents);
+  WideString renderContents = pWriter->RenderTextContents(contents);
   m_renderContents = renderContents;
-  CFX_ByteString byteString = filtercontents.UTF8Encode();
+  ByteString byteString = filtercontents.UTF8Encode();
   std::unique_ptr<uint8_t, FxFreeDeleter> data(
       pWriter->Encode(byteString, format, outWidth, outHeight));
   if (!data)
     return false;
-  return pWriter->RenderResult(renderContents.AsStringC(), data.get(),
+  return pWriter->RenderResult(renderContents.AsStringView(), data.get(),
                                outWidth);
 }
 
 bool CBC_Code39::RenderDevice(CFX_RenderDevice* device,
                               const CFX_Matrix* matrix) {
   auto* pWriter = GetOnedCode39Writer();
-  CFX_WideString renderCon;
-  if (!pWriter->encodedContents(m_renderContents.AsStringC(), &renderCon))
+  WideString renderCon;
+  if (!pWriter->encodedContents(m_renderContents.AsStringView(), &renderCon))
     return false;
-  return pWriter->RenderDeviceResult(device, matrix, renderCon.AsStringC());
+  return pWriter->RenderDeviceResult(device, matrix, renderCon.AsStringView());
 }
 
 BC_TYPE CBC_Code39::GetType() {
diff --git a/fxbarcode/cbc_code39.h b/fxbarcode/cbc_code39.h
index 66974c0..937673c 100644
--- a/fxbarcode/cbc_code39.h
+++ b/fxbarcode/cbc_code39.h
@@ -21,7 +21,7 @@
   ~CBC_Code39() override;
 
   // CBC_OneCode:
-  bool Encode(const CFX_WideStringC& contents) override;
+  bool Encode(const WideStringView& contents) override;
   bool RenderDevice(CFX_RenderDevice* device,
                     const CFX_Matrix* matrix) override;
   BC_TYPE GetType() override;
@@ -32,7 +32,7 @@
  private:
   CBC_OnedCode39Writer* GetOnedCode39Writer();
 
-  CFX_WideString m_renderContents;
+  WideString m_renderContents;
 };
 
 #endif  // FXBARCODE_CBC_CODE39_H_
diff --git a/fxbarcode/cbc_codebase.h b/fxbarcode/cbc_codebase.h
index f1a7b03..aab98da 100644
--- a/fxbarcode/cbc_codebase.h
+++ b/fxbarcode/cbc_codebase.h
@@ -26,7 +26,7 @@
   virtual ~CBC_CodeBase();
 
   virtual BC_TYPE GetType() = 0;
-  virtual bool Encode(const CFX_WideStringC& contents) = 0;
+  virtual bool Encode(const WideStringView& contents) = 0;
   virtual bool RenderDevice(CFX_RenderDevice* device,
                             const CFX_Matrix* matrix) = 0;
 
diff --git a/fxbarcode/cbc_datamatrix.cpp b/fxbarcode/cbc_datamatrix.cpp
index 91ed10e..c9e23fa 100644
--- a/fxbarcode/cbc_datamatrix.cpp
+++ b/fxbarcode/cbc_datamatrix.cpp
@@ -31,12 +31,12 @@
 
 CBC_DataMatrix::~CBC_DataMatrix() {}
 
-bool CBC_DataMatrix::Encode(const CFX_WideStringC& contents) {
+bool CBC_DataMatrix::Encode(const WideStringView& contents) {
   int32_t outWidth = 0;
   int32_t outHeight = 0;
   auto* pWriter = GetDataMatrixWriter();
   std::unique_ptr<uint8_t, FxFreeDeleter> data(
-      pWriter->Encode(CFX_WideString(contents), outWidth, outHeight));
+      pWriter->Encode(WideString(contents), outWidth, outHeight));
   if (!data)
     return false;
   return pWriter->RenderResult(data.get(), outWidth, outHeight);
diff --git a/fxbarcode/cbc_datamatrix.h b/fxbarcode/cbc_datamatrix.h
index 9f6c914..3fe1c09 100644
--- a/fxbarcode/cbc_datamatrix.h
+++ b/fxbarcode/cbc_datamatrix.h
@@ -20,7 +20,7 @@
   ~CBC_DataMatrix() override;
 
   // CBC_OneCode:
-  bool Encode(const CFX_WideStringC& contents) override;
+  bool Encode(const WideStringView& contents) override;
   bool RenderDevice(CFX_RenderDevice* device,
                     const CFX_Matrix* matrix) override;
   BC_TYPE GetType() override;
diff --git a/fxbarcode/cbc_ean13.cpp b/fxbarcode/cbc_ean13.cpp
index 3606527..1672532 100644
--- a/fxbarcode/cbc_ean13.cpp
+++ b/fxbarcode/cbc_ean13.cpp
@@ -31,15 +31,15 @@
 
 CBC_EAN13::~CBC_EAN13() {}
 
-CFX_WideString CBC_EAN13::Preprocess(const CFX_WideStringC& contents) {
+WideString CBC_EAN13::Preprocess(const WideStringView& contents) {
   auto* pWriter = GetOnedEAN13Writer();
-  CFX_WideString encodeContents = pWriter->FilterContents(contents);
+  WideString encodeContents = pWriter->FilterContents(contents);
   int32_t length = encodeContents.GetLength();
   if (length <= 12) {
     for (int32_t i = 0; i < 12 - length; i++)
       encodeContents = wchar_t('0') + encodeContents;
 
-    CFX_ByteString byteString = encodeContents.UTF8Encode();
+    ByteString byteString = encodeContents.UTF8Encode();
     int32_t checksum = pWriter->CalcChecksum(byteString);
     byteString += checksum - 0 + '0';
     encodeContents = byteString.UTF8Decode();
@@ -50,29 +50,29 @@
   return encodeContents;
 }
 
-bool CBC_EAN13::Encode(const CFX_WideStringC& contents) {
+bool CBC_EAN13::Encode(const WideStringView& contents) {
   if (contents.IsEmpty())
     return false;
 
   BCFORMAT format = BCFORMAT_EAN_13;
   int32_t outWidth = 0;
   int32_t outHeight = 0;
-  CFX_WideString encodeContents = Preprocess(contents);
-  CFX_ByteString byteString = encodeContents.UTF8Encode();
+  WideString encodeContents = Preprocess(contents);
+  ByteString byteString = encodeContents.UTF8Encode();
   m_renderContents = encodeContents;
   auto* pWriter = GetOnedEAN13Writer();
   std::unique_ptr<uint8_t, FxFreeDeleter> data(
       pWriter->Encode(byteString, format, outWidth, outHeight));
   if (!data)
     return false;
-  return pWriter->RenderResult(encodeContents.AsStringC(), data.get(),
+  return pWriter->RenderResult(encodeContents.AsStringView(), data.get(),
                                outWidth);
 }
 
 bool CBC_EAN13::RenderDevice(CFX_RenderDevice* device,
                              const CFX_Matrix* matrix) {
-  return GetOnedEAN13Writer()->RenderDeviceResult(device, matrix,
-                                                  m_renderContents.AsStringC());
+  return GetOnedEAN13Writer()->RenderDeviceResult(
+      device, matrix, m_renderContents.AsStringView());
 }
 
 BC_TYPE CBC_EAN13::GetType() {
diff --git a/fxbarcode/cbc_ean13.h b/fxbarcode/cbc_ean13.h
index 8a62151..609f8b0 100644
--- a/fxbarcode/cbc_ean13.h
+++ b/fxbarcode/cbc_ean13.h
@@ -21,16 +21,16 @@
   ~CBC_EAN13() override;
 
   // CBC_OneCode:
-  bool Encode(const CFX_WideStringC& contents) override;
+  bool Encode(const WideStringView& contents) override;
   bool RenderDevice(CFX_RenderDevice* device,
                     const CFX_Matrix* matrix) override;
   BC_TYPE GetType() override;
 
  private:
   CBC_OnedEAN13Writer* GetOnedEAN13Writer();
-  CFX_WideString Preprocess(const CFX_WideStringC& contents);
+  WideString Preprocess(const WideStringView& contents);
 
-  CFX_WideString m_renderContents;
+  WideString m_renderContents;
 };
 
 #endif  // FXBARCODE_CBC_EAN13_H_
diff --git a/fxbarcode/cbc_ean8.cpp b/fxbarcode/cbc_ean8.cpp
index 7fbe07f..796f3a5 100644
--- a/fxbarcode/cbc_ean8.cpp
+++ b/fxbarcode/cbc_ean8.cpp
@@ -30,15 +30,15 @@
 
 CBC_EAN8::~CBC_EAN8() {}
 
-CFX_WideString CBC_EAN8::Preprocess(const CFX_WideStringC& contents) {
+WideString CBC_EAN8::Preprocess(const WideStringView& contents) {
   auto* pWriter = GetOnedEAN8Writer();
-  CFX_WideString encodeContents = pWriter->FilterContents(contents);
+  WideString encodeContents = pWriter->FilterContents(contents);
   int32_t length = encodeContents.GetLength();
   if (length <= 7) {
     for (int32_t i = 0; i < 7 - length; i++)
       encodeContents = wchar_t('0') + encodeContents;
 
-    CFX_ByteString byteString = encodeContents.UTF8Encode();
+    ByteString byteString = encodeContents.UTF8Encode();
     int32_t checksum = pWriter->CalcChecksum(byteString);
     encodeContents += wchar_t(checksum - 0 + '0');
   }
@@ -48,29 +48,29 @@
   return encodeContents;
 }
 
-bool CBC_EAN8::Encode(const CFX_WideStringC& contents) {
+bool CBC_EAN8::Encode(const WideStringView& contents) {
   if (contents.IsEmpty())
     return false;
 
   BCFORMAT format = BCFORMAT_EAN_8;
   int32_t outWidth = 0;
   int32_t outHeight = 0;
-  CFX_WideString encodeContents = Preprocess(contents);
-  CFX_ByteString byteString = encodeContents.UTF8Encode();
+  WideString encodeContents = Preprocess(contents);
+  ByteString byteString = encodeContents.UTF8Encode();
   m_renderContents = encodeContents;
   auto* pWriter = GetOnedEAN8Writer();
   std::unique_ptr<uint8_t, FxFreeDeleter> data(
       pWriter->Encode(byteString, format, outWidth, outHeight));
   if (!data)
     return false;
-  return pWriter->RenderResult(encodeContents.AsStringC(), data.get(),
+  return pWriter->RenderResult(encodeContents.AsStringView(), data.get(),
                                outWidth);
 }
 
 bool CBC_EAN8::RenderDevice(CFX_RenderDevice* device,
                             const CFX_Matrix* matrix) {
-  return GetOnedEAN8Writer()->RenderDeviceResult(device, matrix,
-                                                 m_renderContents.AsStringC());
+  return GetOnedEAN8Writer()->RenderDeviceResult(
+      device, matrix, m_renderContents.AsStringView());
 }
 
 BC_TYPE CBC_EAN8::GetType() {
diff --git a/fxbarcode/cbc_ean8.h b/fxbarcode/cbc_ean8.h
index df0ca62..4127650 100644
--- a/fxbarcode/cbc_ean8.h
+++ b/fxbarcode/cbc_ean8.h
@@ -20,15 +20,15 @@
   ~CBC_EAN8() override;
 
   // CBC_OneCode:
-  bool Encode(const CFX_WideStringC& contents) override;
+  bool Encode(const WideStringView& contents) override;
   bool RenderDevice(CFX_RenderDevice* device,
                     const CFX_Matrix* matrix) override;
   BC_TYPE GetType() override;
 
  private:
   CBC_OnedEAN8Writer* GetOnedEAN8Writer();
-  CFX_WideString Preprocess(const CFX_WideStringC& contents);
-  CFX_WideString m_renderContents;
+  WideString Preprocess(const WideStringView& contents);
+  WideString m_renderContents;
 };
 
 #endif  // FXBARCODE_CBC_EAN8_H_
diff --git a/fxbarcode/cbc_onecode.cpp b/fxbarcode/cbc_onecode.cpp
index 2d64704..fb8cb05 100644
--- a/fxbarcode/cbc_onecode.cpp
+++ b/fxbarcode/cbc_onecode.cpp
@@ -30,11 +30,11 @@
 
 CBC_OneCode::~CBC_OneCode() {}
 
-bool CBC_OneCode::CheckContentValidity(const CFX_WideStringC& contents) {
+bool CBC_OneCode::CheckContentValidity(const WideStringView& contents) {
   return GetOneDimWriter()->CheckContentValidity(contents);
 }
 
-CFX_WideString CBC_OneCode::FilterContents(const CFX_WideStringC& contents) {
+WideString CBC_OneCode::FilterContents(const WideStringView& contents) {
   return GetOneDimWriter()->FilterContents(contents);
 }
 
diff --git a/fxbarcode/cbc_onecode.h b/fxbarcode/cbc_onecode.h
index e6b5b7b..eae618e 100644
--- a/fxbarcode/cbc_onecode.h
+++ b/fxbarcode/cbc_onecode.h
@@ -21,8 +21,8 @@
   explicit CBC_OneCode(std::unique_ptr<CBC_Writer> pWriter);
   ~CBC_OneCode() override;
 
-  virtual bool CheckContentValidity(const CFX_WideStringC& contents);
-  virtual CFX_WideString FilterContents(const CFX_WideStringC& contents);
+  virtual bool CheckContentValidity(const WideStringView& contents);
+  virtual WideString FilterContents(const WideStringView& contents);
 
   virtual void SetPrintChecksum(bool checksum);
   virtual void SetDataLength(int32_t length);
diff --git a/fxbarcode/cbc_pdf417i.cpp b/fxbarcode/cbc_pdf417i.cpp
index 545a7d8..4e7e063 100644
--- a/fxbarcode/cbc_pdf417i.cpp
+++ b/fxbarcode/cbc_pdf417i.cpp
@@ -40,12 +40,12 @@
   GetPDF417Writer()->SetTruncated(truncated);
 }
 
-bool CBC_PDF417I::Encode(const CFX_WideStringC& contents) {
+bool CBC_PDF417I::Encode(const WideStringView& contents) {
   int32_t outWidth = 0;
   int32_t outHeight = 0;
   auto* pWriter = GetPDF417Writer();
   std::unique_ptr<uint8_t, FxFreeDeleter> data(
-      pWriter->Encode(CFX_WideString(contents), outWidth, outHeight));
+      pWriter->Encode(WideString(contents), outWidth, outHeight));
   if (!data)
     return false;
   return pWriter->RenderResult(data.get(), outWidth, outHeight);
diff --git a/fxbarcode/cbc_pdf417i.h b/fxbarcode/cbc_pdf417i.h
index 73f99d3..5bd7a26 100644
--- a/fxbarcode/cbc_pdf417i.h
+++ b/fxbarcode/cbc_pdf417i.h
@@ -20,7 +20,7 @@
   ~CBC_PDF417I() override;
 
   // CBC_CodeBase:
-  bool Encode(const CFX_WideStringC& contents) override;
+  bool Encode(const WideStringView& contents) override;
   bool RenderDevice(CFX_RenderDevice* device,
                     const CFX_Matrix* matrix) override;
   BC_TYPE GetType() override;
diff --git a/fxbarcode/cbc_qrcode.cpp b/fxbarcode/cbc_qrcode.cpp
index 297ce77..0f3a65e 100644
--- a/fxbarcode/cbc_qrcode.cpp
+++ b/fxbarcode/cbc_qrcode.cpp
@@ -37,13 +37,13 @@
   return GetQRCodeWriter()->SetErrorCorrectionLevel(level);
 }
 
-bool CBC_QRCode::Encode(const CFX_WideStringC& contents) {
+bool CBC_QRCode::Encode(const WideStringView& contents) {
   int32_t outWidth = 0;
   int32_t outHeight = 0;
   CBC_QRCodeWriter* pWriter = GetQRCodeWriter();
   std::unique_ptr<uint8_t, FxFreeDeleter> data(
-      pWriter->Encode(CFX_WideString(contents),
-                      pWriter->GetErrorCorrectionLevel(), outWidth, outHeight));
+      pWriter->Encode(WideString(contents), pWriter->GetErrorCorrectionLevel(),
+                      outWidth, outHeight));
   if (!data)
     return false;
   return pWriter->RenderResult(data.get(), outWidth, outHeight);
diff --git a/fxbarcode/cbc_qrcode.h b/fxbarcode/cbc_qrcode.h
index 6387267..509de8a 100644
--- a/fxbarcode/cbc_qrcode.h
+++ b/fxbarcode/cbc_qrcode.h
@@ -20,7 +20,7 @@
   ~CBC_QRCode() override;
 
   // CBC_CodeBase:
-  bool Encode(const CFX_WideStringC& contents) override;
+  bool Encode(const WideStringView& contents) override;
   bool RenderDevice(CFX_RenderDevice* device,
                     const CFX_Matrix* matrix) override;
   BC_TYPE GetType() override;
diff --git a/fxbarcode/cbc_upca.cpp b/fxbarcode/cbc_upca.cpp
index f4c273f..69cedce 100644
--- a/fxbarcode/cbc_upca.cpp
+++ b/fxbarcode/cbc_upca.cpp
@@ -30,15 +30,15 @@
 
 CBC_UPCA::~CBC_UPCA() {}
 
-CFX_WideString CBC_UPCA::Preprocess(const CFX_WideStringC& contents) {
+WideString CBC_UPCA::Preprocess(const WideStringView& contents) {
   CBC_OnedUPCAWriter* pWriter = GetOnedUPCAWriter();
-  CFX_WideString encodeContents = pWriter->FilterContents(contents);
+  WideString encodeContents = pWriter->FilterContents(contents);
   int32_t length = encodeContents.GetLength();
   if (length <= 11) {
     for (int32_t i = 0; i < 11 - length; i++)
       encodeContents = wchar_t('0') + encodeContents;
 
-    CFX_ByteString byteString = encodeContents.UTF8Encode();
+    ByteString byteString = encodeContents.UTF8Encode();
     int32_t checksum = pWriter->CalcChecksum(byteString);
     byteString += checksum - 0 + '0';
     encodeContents = byteString.UTF8Decode();
@@ -49,15 +49,15 @@
   return encodeContents;
 }
 
-bool CBC_UPCA::Encode(const CFX_WideStringC& contents) {
+bool CBC_UPCA::Encode(const WideStringView& contents) {
   if (contents.IsEmpty())
     return false;
 
   BCFORMAT format = BCFORMAT_UPC_A;
   int32_t outWidth = 0;
   int32_t outHeight = 0;
-  CFX_WideString encodeContents = Preprocess(contents);
-  CFX_ByteString byteString = encodeContents.UTF8Encode();
+  WideString encodeContents = Preprocess(contents);
+  ByteString byteString = encodeContents.UTF8Encode();
   m_renderContents = encodeContents;
 
   CBC_OnedUPCAWriter* pWriter = GetOnedUPCAWriter();
@@ -66,14 +66,14 @@
       pWriter->Encode(byteString, format, outWidth, outHeight));
   if (!data)
     return false;
-  return pWriter->RenderResult(encodeContents.AsStringC(), data.get(),
+  return pWriter->RenderResult(encodeContents.AsStringView(), data.get(),
                                outWidth);
 }
 
 bool CBC_UPCA::RenderDevice(CFX_RenderDevice* device,
                             const CFX_Matrix* matrix) {
-  return GetOnedUPCAWriter()->RenderDeviceResult(device, matrix,
-                                                 m_renderContents.AsStringC());
+  return GetOnedUPCAWriter()->RenderDeviceResult(
+      device, matrix, m_renderContents.AsStringView());
 }
 
 BC_TYPE CBC_UPCA::GetType() {
diff --git a/fxbarcode/cbc_upca.h b/fxbarcode/cbc_upca.h
index 5955230..29c4d7d 100644
--- a/fxbarcode/cbc_upca.h
+++ b/fxbarcode/cbc_upca.h
@@ -20,15 +20,15 @@
   ~CBC_UPCA() override;
 
   // CBC_CodeBase:
-  bool Encode(const CFX_WideStringC& contents) override;
+  bool Encode(const WideStringView& contents) override;
   bool RenderDevice(CFX_RenderDevice* device,
                     const CFX_Matrix* matrix) override;
   BC_TYPE GetType() override;
 
  private:
   CBC_OnedUPCAWriter* GetOnedUPCAWriter();
-  CFX_WideString Preprocess(const CFX_WideStringC& contents);
-  CFX_WideString m_renderContents;
+  WideString Preprocess(const WideStringView& contents);
+  WideString m_renderContents;
 };
 
 #endif  // FXBARCODE_CBC_UPCA_H_
diff --git a/fxbarcode/datamatrix/BC_Base256Encoder.cpp b/fxbarcode/datamatrix/BC_Base256Encoder.cpp
index 0cbd3fd..b7dd69c 100644
--- a/fxbarcode/datamatrix/BC_Base256Encoder.cpp
+++ b/fxbarcode/datamatrix/BC_Base256Encoder.cpp
@@ -34,7 +34,7 @@
   return BASE256_ENCODATION;
 }
 void CBC_Base256Encoder::Encode(CBC_EncoderContext& context, int32_t& e) {
-  CFX_WideString buffer;
+  WideString buffer;
   buffer += L'\0';
   while (context.hasMoreCharacters()) {
     wchar_t c = context.getCurrentChar();
diff --git a/fxbarcode/datamatrix/BC_C40Encoder.cpp b/fxbarcode/datamatrix/BC_C40Encoder.cpp
index 8a55c92..348315e 100644
--- a/fxbarcode/datamatrix/BC_C40Encoder.cpp
+++ b/fxbarcode/datamatrix/BC_C40Encoder.cpp
@@ -31,7 +31,7 @@
 
 namespace {
 
-CFX_WideString EncodeToCodewords(const CFX_WideString& sb, int32_t startPos) {
+WideString EncodeToCodewords(const WideString& sb, int32_t startPos) {
   wchar_t c1 = sb[startPos];
   wchar_t c2 = sb[startPos + 1];
   wchar_t c3 = sb[startPos + 2];
@@ -39,7 +39,7 @@
   wchar_t cw[2];
   cw[0] = static_cast<wchar_t>(v / 256);
   cw[1] = static_cast<wchar_t>(v % 256);
-  return CFX_WideString(cw, FX_ArraySize(cw));
+  return WideString(cw, FX_ArraySize(cw));
 }
 
 }  // namespace
@@ -50,7 +50,7 @@
   return C40_ENCODATION;
 }
 void CBC_C40Encoder::Encode(CBC_EncoderContext& context, int32_t& e) {
-  CFX_WideString buffer;
+  WideString buffer;
   while (context.hasMoreCharacters()) {
     wchar_t c = context.getCurrentChar();
     context.m_pos++;
@@ -98,12 +98,12 @@
   handleEOD(context, buffer, e);
 }
 void CBC_C40Encoder::writeNextTriplet(CBC_EncoderContext& context,
-                                      CFX_WideString& buffer) {
+                                      WideString& buffer) {
   context.writeCodewords(EncodeToCodewords(buffer, 0));
   buffer.Delete(0, 3);
 }
 void CBC_C40Encoder::handleEOD(CBC_EncoderContext& context,
-                               CFX_WideString& buffer,
+                               WideString& buffer,
                                int32_t& e) {
   int32_t unwritten = (buffer.GetLength() / 3) * 2;
   int32_t rest = buffer.GetLength() % 3;
@@ -142,7 +142,7 @@
   }
   context.signalEncoderChange(ASCII_ENCODATION);
 }
-int32_t CBC_C40Encoder::encodeChar(wchar_t c, CFX_WideString& sb, int32_t& e) {
+int32_t CBC_C40Encoder::encodeChar(wchar_t c, WideString& sb, int32_t& e) {
   if (c == ' ') {
     sb += (wchar_t)'\3';
     return 1;
@@ -187,7 +187,7 @@
 }
 
 int32_t CBC_C40Encoder::BacktrackOneCharacter(CBC_EncoderContext* context,
-                                              CFX_WideString* buffer,
+                                              WideString* buffer,
                                               int32_t lastCharSize) {
   if (context->m_pos < 1)
     return -1;
@@ -200,7 +200,7 @@
   context->m_pos--;
   wchar_t c = context->getCurrentChar();
   int32_t e = BCExceptionNO;
-  CFX_WideString removed;
+  WideString removed;
   int32_t len = encodeChar(c, removed, e);
   if (e != BCExceptionNO)
     return -1;
diff --git a/fxbarcode/datamatrix/BC_C40Encoder.h b/fxbarcode/datamatrix/BC_C40Encoder.h
index 550d226..5ddad92 100644
--- a/fxbarcode/datamatrix/BC_C40Encoder.h
+++ b/fxbarcode/datamatrix/BC_C40Encoder.h
@@ -7,10 +7,9 @@
 #ifndef FXBARCODE_DATAMATRIX_BC_C40ENCODER_H_
 #define FXBARCODE_DATAMATRIX_BC_C40ENCODER_H_
 
+#include "core/fxcrt/widestring.h"
 #include "fxbarcode/datamatrix/BC_Encoder.h"
 
-class CFX_WideString;
-
 class CBC_C40Encoder : public CBC_Encoder {
  public:
   CBC_C40Encoder();
@@ -20,13 +19,12 @@
   int32_t getEncodingMode() override;
   void Encode(CBC_EncoderContext& context, int32_t& e) override;
 
-  static void writeNextTriplet(CBC_EncoderContext& context,
-                               CFX_WideString& buffer);
+  static void writeNextTriplet(CBC_EncoderContext& context, WideString& buffer);
 
   virtual void handleEOD(CBC_EncoderContext& context,
-                         CFX_WideString& buffer,
+                         WideString& buffer,
                          int32_t& e);
-  virtual int32_t encodeChar(wchar_t c, CFX_WideString& sb, int32_t& e);
+  virtual int32_t encodeChar(wchar_t c, WideString& sb, int32_t& e);
 
  private:
   // Moves back by 1 position in |context| and adjusts |buffer| accordingly
@@ -34,7 +32,7 @@
   // |context| after adjusting the position. If the character cannot be encoded,
   // return -1.
   int32_t BacktrackOneCharacter(CBC_EncoderContext* context,
-                                CFX_WideString* buffer,
+                                WideString* buffer,
                                 int32_t lastCharSize);
 };
 
diff --git a/fxbarcode/datamatrix/BC_DataMatrixWriter.cpp b/fxbarcode/datamatrix/BC_DataMatrixWriter.cpp
index 98af282..d4f9ad3 100644
--- a/fxbarcode/datamatrix/BC_DataMatrixWriter.cpp
+++ b/fxbarcode/datamatrix/BC_DataMatrixWriter.cpp
@@ -108,15 +108,15 @@
   return true;
 }
 
-uint8_t* CBC_DataMatrixWriter::Encode(const CFX_WideString& contents,
+uint8_t* CBC_DataMatrixWriter::Encode(const WideString& contents,
                                       int32_t& outWidth,
                                       int32_t& outHeight) {
   if (outWidth < 0 || outHeight < 0)
     return nullptr;
 
-  CFX_WideString ecLevel;
+  WideString ecLevel;
   int32_t e = BCExceptionNO;
-  CFX_WideString encoded =
+  WideString encoded =
       CBC_HighLevelEncoder::encodeHighLevel(contents, ecLevel, false, e);
   if (e != BCExceptionNO)
     return nullptr;
@@ -124,7 +124,7 @@
       CBC_SymbolInfo::lookup(encoded.GetLength(), false, e);
   if (e != BCExceptionNO)
     return nullptr;
-  CFX_WideString codewords =
+  WideString codewords =
       CBC_ErrorCorrection::encodeECC200(encoded, symbolInfo, e);
   if (e != BCExceptionNO)
     return nullptr;
diff --git a/fxbarcode/datamatrix/BC_DataMatrixWriter.h b/fxbarcode/datamatrix/BC_DataMatrixWriter.h
index 84b83fe..ba2c547 100644
--- a/fxbarcode/datamatrix/BC_DataMatrixWriter.h
+++ b/fxbarcode/datamatrix/BC_DataMatrixWriter.h
@@ -18,7 +18,7 @@
   CBC_DataMatrixWriter();
   ~CBC_DataMatrixWriter() override;
 
-  uint8_t* Encode(const CFX_WideString& contents,
+  uint8_t* Encode(const WideString& contents,
                   int32_t& outWidth,
                   int32_t& outHeight);
 
diff --git a/fxbarcode/datamatrix/BC_DefaultPlacement.cpp b/fxbarcode/datamatrix/BC_DefaultPlacement.cpp
index 934d795..3f1b358 100644
--- a/fxbarcode/datamatrix/BC_DefaultPlacement.cpp
+++ b/fxbarcode/datamatrix/BC_DefaultPlacement.cpp
@@ -23,7 +23,7 @@
 #include "fxbarcode/datamatrix/BC_DefaultPlacement.h"
 #include "fxbarcode/datamatrix/BC_Encoder.h"
 
-CBC_DefaultPlacement::CBC_DefaultPlacement(CFX_WideString codewords,
+CBC_DefaultPlacement::CBC_DefaultPlacement(WideString codewords,
                                            int32_t numcols,
                                            int32_t numrows) {
   m_codewords = codewords;
diff --git a/fxbarcode/datamatrix/BC_DefaultPlacement.h b/fxbarcode/datamatrix/BC_DefaultPlacement.h
index 17ecac9..12ea852 100644
--- a/fxbarcode/datamatrix/BC_DefaultPlacement.h
+++ b/fxbarcode/datamatrix/BC_DefaultPlacement.h
@@ -13,9 +13,7 @@
 
 class CBC_DefaultPlacement {
  public:
-  CBC_DefaultPlacement(CFX_WideString codewords,
-                       int32_t numcols,
-                       int32_t numrows);
+  CBC_DefaultPlacement(WideString codewords, int32_t numcols, int32_t numrows);
   virtual ~CBC_DefaultPlacement();
 
   int32_t getNumrows();
@@ -27,7 +25,7 @@
   void place();
 
  private:
-  CFX_WideString m_codewords;
+  WideString m_codewords;
   int32_t m_numrows;
   int32_t m_numcols;
   std::vector<uint8_t> m_bits;
diff --git a/fxbarcode/datamatrix/BC_EdifactEncoder.cpp b/fxbarcode/datamatrix/BC_EdifactEncoder.cpp
index 7407efb..438c87a 100644
--- a/fxbarcode/datamatrix/BC_EdifactEncoder.cpp
+++ b/fxbarcode/datamatrix/BC_EdifactEncoder.cpp
@@ -33,10 +33,10 @@
 
 namespace {
 
-CFX_WideString EncodeToCodewords(const CFX_WideString& sb, int32_t startPos) {
+WideString EncodeToCodewords(const WideString& sb, int32_t startPos) {
   int32_t len = sb.GetLength() - startPos;
   if (len == 0)
-    return CFX_WideString();
+    return WideString();
 
   wchar_t c1 = sb[startPos];
   wchar_t c2 = len >= 2 ? sb[startPos + 1] : 0;
@@ -48,10 +48,10 @@
   cw[0] = static_cast<wchar_t>((v >> 16) & 255);
   cw[1] = static_cast<wchar_t>((v >> 8) & 255);
   cw[2] = static_cast<wchar_t>(v & 255);
-  return CFX_WideString(cw, std::min(len, kBuflen));
+  return WideString(cw, std::min(len, kBuflen));
 }
 
-bool HandleEOD(CBC_EncoderContext* context, const CFX_WideString& buffer) {
+bool HandleEOD(CBC_EncoderContext* context, const WideString& buffer) {
   int32_t count = buffer.GetLength();
   if (count == 0)
     return true;
@@ -72,7 +72,7 @@
   }
 
   int32_t restChars = count - 1;
-  CFX_WideString encoded = EncodeToCodewords(buffer, 0);
+  WideString encoded = EncodeToCodewords(buffer, 0);
   if (encoded.IsEmpty())
     return false;
 
@@ -105,7 +105,7 @@
   return true;
 }
 
-void encodeChar(wchar_t c, CFX_WideString* sb, int32_t& e) {
+void encodeChar(wchar_t c, WideString* sb, int32_t& e) {
   if (c >= ' ' && c <= '?') {
     *sb += c;
   } else if (c >= '@' && c <= '^') {
@@ -126,7 +126,7 @@
 }
 
 void CBC_EdifactEncoder::Encode(CBC_EncoderContext& context, int32_t& e) {
-  CFX_WideString buffer;
+  WideString buffer;
   while (context.hasMoreCharacters()) {
     wchar_t c = context.getCurrentChar();
     encodeChar(c, &buffer, e);
@@ -136,7 +136,7 @@
     context.m_pos++;
     int32_t count = buffer.GetLength();
     if (count >= 4) {
-      CFX_WideString encoded = EncodeToCodewords(buffer, 0);
+      WideString encoded = EncodeToCodewords(buffer, 0);
       if (encoded.IsEmpty()) {
         e = BCExceptionGeneric;
         return;
diff --git a/fxbarcode/datamatrix/BC_EncoderContext.cpp b/fxbarcode/datamatrix/BC_EncoderContext.cpp
index eaf3768..6e16710 100644
--- a/fxbarcode/datamatrix/BC_EncoderContext.cpp
+++ b/fxbarcode/datamatrix/BC_EncoderContext.cpp
@@ -28,12 +28,12 @@
 #include "fxbarcode/datamatrix/BC_SymbolInfo.h"
 #include "fxbarcode/utils.h"
 
-CBC_EncoderContext::CBC_EncoderContext(const CFX_WideString& msg,
-                                       const CFX_WideString& ecLevel,
+CBC_EncoderContext::CBC_EncoderContext(const WideString& msg,
+                                       const WideString& ecLevel,
                                        int32_t& e) {
-  CFX_ByteString dststr;
+  ByteString dststr;
   CBC_UtilCodingConvert::UnicodeToUTF8(msg, dststr);
-  CFX_WideString sb;
+  WideString sb;
   FX_STRSIZE c = dststr.GetLength();
   for (FX_STRSIZE i = 0; i < c; i++) {
     wchar_t ch = static_cast<wchar_t>(dststr[i] & 0xff);
@@ -66,7 +66,7 @@
   return m_msg[m_pos];
 }
 
-void CBC_EncoderContext::writeCodewords(const CFX_WideString& codewords) {
+void CBC_EncoderContext::writeCodewords(const WideString& codewords) {
   m_codewords += codewords;
 }
 
diff --git a/fxbarcode/datamatrix/BC_EncoderContext.h b/fxbarcode/datamatrix/BC_EncoderContext.h
index ef4c38e..1289a45 100644
--- a/fxbarcode/datamatrix/BC_EncoderContext.h
+++ b/fxbarcode/datamatrix/BC_EncoderContext.h
@@ -8,14 +8,14 @@
 #define FXBARCODE_DATAMATRIX_BC_ENCODERCONTEXT_H_
 
 #include "core/fxcrt/cfx_unowned_ptr.h"
-#include "core/fxcrt/cfx_widestring.h"
+#include "core/fxcrt/widestring.h"
 
 class CBC_SymbolInfo;
 
 class CBC_EncoderContext {
  public:
-  CBC_EncoderContext(const CFX_WideString& msg,
-                     const CFX_WideString& ecLevel,
+  CBC_EncoderContext(const WideString& msg,
+                     const WideString& ecLevel,
                      int32_t& e);
   ~CBC_EncoderContext();
 
@@ -23,7 +23,7 @@
   void setSkipAtEnd(int32_t count);
   wchar_t getCurrentChar();
   wchar_t getCurrent();
-  void writeCodewords(const CFX_WideString& codewords);
+  void writeCodewords(const WideString& codewords);
   void writeCodeword(wchar_t codeword);
   FX_STRSIZE getCodewordCount();
   void signalEncoderChange(int32_t encoding);
@@ -34,8 +34,8 @@
   void updateSymbolInfo(int32_t len, int32_t& e);
   void resetSymbolInfo();
 
-  CFX_WideString m_msg;
-  CFX_WideString m_codewords;
+  WideString m_msg;
+  WideString m_codewords;
   FX_STRSIZE m_pos;
   int32_t m_newEncoding;
   CFX_UnownedPtr<CBC_SymbolInfo> m_symbolInfo;
diff --git a/fxbarcode/datamatrix/BC_ErrorCorrection.cpp b/fxbarcode/datamatrix/BC_ErrorCorrection.cpp
index c45eadc..35077ee 100644
--- a/fxbarcode/datamatrix/BC_ErrorCorrection.cpp
+++ b/fxbarcode/datamatrix/BC_ErrorCorrection.cpp
@@ -119,22 +119,21 @@
 void CBC_ErrorCorrection::Finalize() {}
 CBC_ErrorCorrection::CBC_ErrorCorrection() {}
 CBC_ErrorCorrection::~CBC_ErrorCorrection() {}
-CFX_WideString CBC_ErrorCorrection::encodeECC200(CFX_WideString codewords,
-                                                 CBC_SymbolInfo* symbolInfo,
-                                                 int32_t& e) {
+WideString CBC_ErrorCorrection::encodeECC200(WideString codewords,
+                                             CBC_SymbolInfo* symbolInfo,
+                                             int32_t& e) {
   if (pdfium::base::checked_cast<int32_t>(codewords.GetLength()) !=
       symbolInfo->dataCapacity()) {
     e = BCExceptionIllegalArgument;
-    return CFX_WideString();
+    return WideString();
   }
-  CFX_WideString sb;
+  WideString sb;
   sb += codewords;
   int32_t blockCount = symbolInfo->getInterleavedBlockCount();
   if (blockCount == 1) {
-    CFX_WideString ecc =
-        createECCBlock(codewords, symbolInfo->errorCodewords(), e);
+    WideString ecc = createECCBlock(codewords, symbolInfo->errorCodewords(), e);
     if (e != BCExceptionNO)
-      return CFX_WideString();
+      return WideString();
     sb += ecc;
   } else {
     std::vector<int32_t> dataSizes(blockCount);
@@ -149,13 +148,13 @@
       }
     }
     for (int32_t block = 0; block < blockCount; block++) {
-      CFX_WideString temp;
+      WideString temp;
       for (int32_t d = block; d < symbolInfo->dataCapacity(); d += blockCount) {
         temp += (wchar_t)codewords[d];
       }
-      CFX_WideString ecc = createECCBlock(temp, errorSizes[block], e);
+      WideString ecc = createECCBlock(temp, errorSizes[block], e);
       if (e != BCExceptionNO)
-        return CFX_WideString();
+        return WideString();
       int32_t pos = 0;
       for (int32_t l = block; l < errorSizes[block] * blockCount;
            l += blockCount) {
@@ -165,16 +164,16 @@
   }
   return sb;
 }
-CFX_WideString CBC_ErrorCorrection::createECCBlock(CFX_WideString codewords,
-                                                   int32_t numECWords,
-                                                   int32_t& e) {
+WideString CBC_ErrorCorrection::createECCBlock(WideString codewords,
+                                               int32_t numECWords,
+                                               int32_t& e) {
   return createECCBlock(codewords, 0, codewords.GetLength(), numECWords, e);
 }
-CFX_WideString CBC_ErrorCorrection::createECCBlock(CFX_WideString codewords,
-                                                   int32_t start,
-                                                   int32_t len,
-                                                   int32_t numECWords,
-                                                   int32_t& e) {
+WideString CBC_ErrorCorrection::createECCBlock(WideString codewords,
+                                               int32_t start,
+                                               int32_t len,
+                                               int32_t numECWords,
+                                               int32_t& e) {
   static const size_t kFactorTableNum = sizeof(FACTOR_SETS) / sizeof(int32_t);
   size_t table = 0;
   while (table < kFactorTableNum && FACTOR_SETS[table] != numECWords)
@@ -182,7 +181,7 @@
 
   if (table >= kFactorTableNum) {
     e = BCExceptionIllegalArgument;
-    return CFX_WideString();
+    return WideString();
   }
   uint16_t* ecc = FX_Alloc(uint16_t, numECWords);
   memset(ecc, 0, numECWords * sizeof(uint16_t));
@@ -202,7 +201,7 @@
       ecc[0] = 0;
     }
   }
-  CFX_WideString strecc;
+  WideString strecc;
   for (int32_t j = 0; j < numECWords; j++) {
     strecc += (wchar_t)ecc[numECWords - j - 1];
   }
diff --git a/fxbarcode/datamatrix/BC_ErrorCorrection.h b/fxbarcode/datamatrix/BC_ErrorCorrection.h
index 97a2e48..361b205 100644
--- a/fxbarcode/datamatrix/BC_ErrorCorrection.h
+++ b/fxbarcode/datamatrix/BC_ErrorCorrection.h
@@ -7,7 +7,7 @@
 #ifndef FXBARCODE_DATAMATRIX_BC_ERRORCORRECTION_H_
 #define FXBARCODE_DATAMATRIX_BC_ERRORCORRECTION_H_
 
-#include "core/fxcrt/cfx_widestring.h"
+#include "core/fxcrt/widestring.h"
 
 class CBC_SymbolInfo;
 
@@ -18,9 +18,9 @@
 
   static void Initialize();
   static void Finalize();
-  static CFX_WideString encodeECC200(CFX_WideString codewords,
-                                     CBC_SymbolInfo* symbolInfo,
-                                     int32_t& e);
+  static WideString encodeECC200(WideString codewords,
+                                 CBC_SymbolInfo* symbolInfo,
+                                 int32_t& e);
 
  private:
   static int32_t MODULO_VALUE;
@@ -28,14 +28,14 @@
   static int32_t ALOG[256];
 
  private:
-  static CFX_WideString createECCBlock(CFX_WideString codewords,
-                                       int32_t numECWords,
-                                       int32_t& e);
-  static CFX_WideString createECCBlock(CFX_WideString codewords,
-                                       int32_t start,
-                                       int32_t len,
-                                       int32_t numECWords,
-                                       int32_t& e);
+  static WideString createECCBlock(WideString codewords,
+                                   int32_t numECWords,
+                                   int32_t& e);
+  static WideString createECCBlock(WideString codewords,
+                                   int32_t start,
+                                   int32_t len,
+                                   int32_t numECWords,
+                                   int32_t& e);
 };
 
 #endif  // FXBARCODE_DATAMATRIX_BC_ERRORCORRECTION_H_
diff --git a/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp b/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp
index b8c6394..56a8847 100644
--- a/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp
+++ b/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp
@@ -58,22 +58,21 @@
 CBC_HighLevelEncoder::CBC_HighLevelEncoder() {}
 CBC_HighLevelEncoder::~CBC_HighLevelEncoder() {}
 
-std::vector<uint8_t>& CBC_HighLevelEncoder::getBytesForMessage(
-    CFX_WideString msg) {
-  CFX_ByteString bytestr;
+std::vector<uint8_t>& CBC_HighLevelEncoder::getBytesForMessage(WideString msg) {
+  ByteString bytestr;
   CBC_UtilCodingConvert::UnicodeToUTF8(msg, bytestr);
   m_bytearray.insert(m_bytearray.end(), bytestr.begin(), bytestr.end());
   return m_bytearray;
 }
 
 // static
-CFX_WideString CBC_HighLevelEncoder::encodeHighLevel(CFX_WideString msg,
-                                                     CFX_WideString ecLevel,
-                                                     bool allowRectangular,
-                                                     int32_t& e) {
+WideString CBC_HighLevelEncoder::encodeHighLevel(WideString msg,
+                                                 WideString ecLevel,
+                                                 bool allowRectangular,
+                                                 int32_t& e) {
   CBC_EncoderContext context(msg, ecLevel, e);
   if (e != BCExceptionNO)
-    return CFX_WideString();
+    return WideString();
 
   context.setAllowRectangular(allowRectangular);
   if ((msg.Left(6) == MACRO_05_HEADER) && (msg.Last() == MACRO_TRAILER)) {
@@ -117,7 +116,7 @@
       context.writeCodeword(0x00fe);
     }
   }
-  CFX_WideString codewords = context.m_codewords;
+  WideString codewords = context.m_codewords;
   if (pdfium::base::checked_cast<int32_t>(codewords.GetLength()) < capacity) {
     codewords += PAD;
   }
@@ -128,7 +127,7 @@
   }
   return codewords;
 }
-int32_t CBC_HighLevelEncoder::lookAheadTest(CFX_WideString msg,
+int32_t CBC_HighLevelEncoder::lookAheadTest(WideString msg,
                                             int32_t startpos,
                                             int32_t currentMode) {
   if (startpos >= pdfium::base::checked_cast<int32_t>(msg.GetLength())) {
@@ -279,7 +278,7 @@
 bool CBC_HighLevelEncoder::isExtendedASCII(wchar_t ch) {
   return ch >= 128 && ch <= 255;
 }
-int32_t CBC_HighLevelEncoder::determineConsecutiveDigitCount(CFX_WideString msg,
+int32_t CBC_HighLevelEncoder::determineConsecutiveDigitCount(WideString msg,
                                                              int32_t startpos) {
   int32_t count = 0;
   int32_t len = msg.GetLength();
diff --git a/fxbarcode/datamatrix/BC_HighLevelEncoder.h b/fxbarcode/datamatrix/BC_HighLevelEncoder.h
index 0b7ff9b..50cfc8c 100644
--- a/fxbarcode/datamatrix/BC_HighLevelEncoder.h
+++ b/fxbarcode/datamatrix/BC_HighLevelEncoder.h
@@ -9,7 +9,7 @@
 
 #include <vector>
 
-#include "core/fxcrt/cfx_widestring.h"
+#include "core/fxcrt/widestring.h"
 
 #define ASCII_ENCODATION 0
 #define C40_ENCODATION 1
@@ -23,18 +23,18 @@
   CBC_HighLevelEncoder();
   ~CBC_HighLevelEncoder();
 
-  std::vector<uint8_t>& getBytesForMessage(CFX_WideString msg);
+  std::vector<uint8_t>& getBytesForMessage(WideString msg);
 
-  static CFX_WideString encodeHighLevel(CFX_WideString msg,
-                                        CFX_WideString ecLevel,
-                                        bool allowRectangular,
-                                        int32_t& e);
-  static int32_t lookAheadTest(CFX_WideString msg,
+  static WideString encodeHighLevel(WideString msg,
+                                    WideString ecLevel,
+                                    bool allowRectangular,
+                                    int32_t& e);
+  static int32_t lookAheadTest(WideString msg,
                                int32_t startpos,
                                int32_t currentMode);
   static bool isDigit(wchar_t ch);
   static bool isExtendedASCII(wchar_t ch);
-  static int32_t determineConsecutiveDigitCount(CFX_WideString msg,
+  static int32_t determineConsecutiveDigitCount(WideString msg,
                                                 int32_t startpos);
 
   static const wchar_t LATCH_TO_C40;
diff --git a/fxbarcode/datamatrix/BC_TextEncoder.cpp b/fxbarcode/datamatrix/BC_TextEncoder.cpp
index 451c7b8..a78310e 100644
--- a/fxbarcode/datamatrix/BC_TextEncoder.cpp
+++ b/fxbarcode/datamatrix/BC_TextEncoder.cpp
@@ -33,7 +33,7 @@
 int32_t CBC_TextEncoder::getEncodingMode() {
   return TEXT_ENCODATION;
 }
-int32_t CBC_TextEncoder::encodeChar(wchar_t c, CFX_WideString& sb, int32_t& e) {
+int32_t CBC_TextEncoder::encodeChar(wchar_t c, WideString& sb, int32_t& e) {
   if (c == ' ') {
     sb += (wchar_t)'\3';
     return 1;
diff --git a/fxbarcode/datamatrix/BC_TextEncoder.h b/fxbarcode/datamatrix/BC_TextEncoder.h
index c4ba3c3..9d4cdaf 100644
--- a/fxbarcode/datamatrix/BC_TextEncoder.h
+++ b/fxbarcode/datamatrix/BC_TextEncoder.h
@@ -16,7 +16,7 @@
 
   // CBC_C40Encoder
   int32_t getEncodingMode() override;
-  int32_t encodeChar(wchar_t c, CFX_WideString& sb, int32_t& e) override;
+  int32_t encodeChar(wchar_t c, WideString& sb, int32_t& e) override;
 };
 
 #endif  // FXBARCODE_DATAMATRIX_BC_TEXTENCODER_H_
diff --git a/fxbarcode/datamatrix/BC_X12Encoder.cpp b/fxbarcode/datamatrix/BC_X12Encoder.cpp
index 625ff90..a080a71 100644
--- a/fxbarcode/datamatrix/BC_X12Encoder.cpp
+++ b/fxbarcode/datamatrix/BC_X12Encoder.cpp
@@ -36,7 +36,7 @@
   return X12_ENCODATION;
 }
 void CBC_X12Encoder::Encode(CBC_EncoderContext& context, int32_t& e) {
-  CFX_WideString buffer;
+  WideString buffer;
   while (context.hasMoreCharacters()) {
     wchar_t c = context.getCurrentChar();
     context.m_pos++;
@@ -58,7 +58,7 @@
   handleEOD(context, buffer, e);
 }
 void CBC_X12Encoder::handleEOD(CBC_EncoderContext& context,
-                               CFX_WideString& buffer,
+                               WideString& buffer,
                                int32_t& e) {
   context.updateSymbolInfo(e);
   if (e != BCExceptionNO) {
@@ -79,7 +79,7 @@
     context.signalEncoderChange(ASCII_ENCODATION);
   }
 }
-int32_t CBC_X12Encoder::encodeChar(wchar_t c, CFX_WideString& sb, int32_t& e) {
+int32_t CBC_X12Encoder::encodeChar(wchar_t c, WideString& sb, int32_t& e) {
   if (c == '\r') {
     sb += (wchar_t)'\0';
   } else if (c == '*') {
diff --git a/fxbarcode/datamatrix/BC_X12Encoder.h b/fxbarcode/datamatrix/BC_X12Encoder.h
index 146f739..324b78b 100644
--- a/fxbarcode/datamatrix/BC_X12Encoder.h
+++ b/fxbarcode/datamatrix/BC_X12Encoder.h
@@ -18,9 +18,9 @@
   int32_t getEncodingMode() override;
   void Encode(CBC_EncoderContext& context, int32_t& e) override;
   void handleEOD(CBC_EncoderContext& context,
-                 CFX_WideString& buffer,
+                 WideString& buffer,
                  int32_t& e) override;
-  int32_t encodeChar(wchar_t c, CFX_WideString& sb, int32_t& e) override;
+  int32_t encodeChar(wchar_t c, WideString& sb, int32_t& e) override;
 };
 
 #endif  // FXBARCODE_DATAMATRIX_BC_X12ENCODER_H_
diff --git a/fxbarcode/oned/BC_OneDimWriter.cpp b/fxbarcode/oned/BC_OneDimWriter.cpp
index 1f96c45..e09e0ce 100644
--- a/fxbarcode/oned/BC_OneDimWriter.cpp
+++ b/fxbarcode/oned/BC_OneDimWriter.cpp
@@ -89,7 +89,7 @@
   return ch;
 }
 
-uint8_t* CBC_OneDimWriter::EncodeWithHint(const CFX_ByteString& contents,
+uint8_t* CBC_OneDimWriter::EncodeWithHint(const ByteString& contents,
                                           BCFORMAT format,
                                           int32_t& outWidth,
                                           int32_t& outHeight,
@@ -98,7 +98,7 @@
   return EncodeImpl(contents, outWidth);
 }
 
-uint8_t* CBC_OneDimWriter::Encode(const CFX_ByteString& contents,
+uint8_t* CBC_OneDimWriter::Encode(const ByteString& contents,
                                   BCFORMAT format,
                                   int32_t& outWidth,
                                   int32_t& outHeight) {
@@ -127,7 +127,7 @@
   return numAdded;
 }
 
-void CBC_OneDimWriter::CalcTextInfo(const CFX_ByteString& text,
+void CBC_OneDimWriter::CalcTextInfo(const ByteString& text,
                                     FXTEXT_CHARPOS* charPos,
                                     CFX_Font* cFont,
                                     float geWidth,
@@ -176,7 +176,7 @@
 
 void CBC_OneDimWriter::ShowDeviceChars(CFX_RenderDevice* device,
                                        const CFX_Matrix* matrix,
-                                       const CFX_ByteString str,
+                                       const ByteString str,
                                        float geWidth,
                                        FXTEXT_CHARPOS* pCharPos,
                                        float locX,
@@ -201,7 +201,7 @@
                          m_fontColor, FXTEXT_CLEARTYPE);
 }
 
-bool CBC_OneDimWriter::ShowChars(const CFX_WideStringC& contents,
+bool CBC_OneDimWriter::ShowChars(const WideStringView& contents,
                                  CFX_RenderDevice* device,
                                  const CFX_Matrix* matrix,
                                  int32_t barWidth,
@@ -209,7 +209,7 @@
   if (!device || !m_pFont)
     return false;
 
-  CFX_ByteString str = FX_UTF8Encode(contents);
+  ByteString str = FX_UTF8Encode(contents);
   int32_t iLen = str.GetLength();
   std::vector<FXTEXT_CHARPOS> charpos(iLen);
   float charsLen = 0;
@@ -260,7 +260,7 @@
 
 bool CBC_OneDimWriter::RenderDeviceResult(CFX_RenderDevice* device,
                                           const CFX_Matrix* matrix,
-                                          const CFX_WideStringC& contents) {
+                                          const WideStringView& contents) {
   if (m_output.empty())
     return false;
 
@@ -283,7 +283,7 @@
          ShowChars(contents, device, matrix, m_barWidth, m_multiple);
 }
 
-bool CBC_OneDimWriter::RenderResult(const CFX_WideStringC& contents,
+bool CBC_OneDimWriter::RenderResult(const WideStringView& contents,
                                     uint8_t* code,
                                     int32_t codeLength) {
   if (codeLength < 1)
@@ -338,7 +338,7 @@
   }
 }
 
-CFX_WideString CBC_OneDimWriter::RenderTextContents(
-    const CFX_WideStringC& contents) {
-  return CFX_WideString();
+WideString CBC_OneDimWriter::RenderTextContents(
+    const WideStringView& contents) {
+  return WideString();
 }
diff --git a/fxbarcode/oned/BC_OneDimWriter.h b/fxbarcode/oned/BC_OneDimWriter.h
index 2d604b5..880f60f 100644
--- a/fxbarcode/oned/BC_OneDimWriter.h
+++ b/fxbarcode/oned/BC_OneDimWriter.h
@@ -24,12 +24,12 @@
   CBC_OneDimWriter();
   ~CBC_OneDimWriter() override;
 
-  virtual bool RenderResult(const CFX_WideStringC& contents,
+  virtual bool RenderResult(const WideStringView& contents,
                             uint8_t* code,
                             int32_t codeLength);
-  virtual bool CheckContentValidity(const CFX_WideStringC& contents) = 0;
-  virtual CFX_WideString FilterContents(const CFX_WideStringC& contents) = 0;
-  virtual CFX_WideString RenderTextContents(const CFX_WideStringC& contents);
+  virtual bool CheckContentValidity(const WideStringView& contents) = 0;
+  virtual WideString FilterContents(const WideStringView& contents) = 0;
+  virtual WideString RenderTextContents(const WideStringView& contents);
   virtual void SetPrintChecksum(bool checksum);
   virtual void SetDataLength(int32_t length);
   virtual void SetCalcChecksum(bool state);
@@ -37,37 +37,37 @@
   virtual void SetFontStyle(int32_t style);
   virtual void SetFontColor(FX_ARGB color);
 
-  uint8_t* Encode(const CFX_ByteString& contents,
+  uint8_t* Encode(const ByteString& contents,
                   BCFORMAT format,
                   int32_t& outWidth,
                   int32_t& outHeight);
   bool RenderDeviceResult(CFX_RenderDevice* device,
                           const CFX_Matrix* matrix,
-                          const CFX_WideStringC& contents);
+                          const WideStringView& contents);
   bool SetFont(CFX_Font* cFont);
 
  protected:
-  virtual uint8_t* EncodeWithHint(const CFX_ByteString& contents,
+  virtual uint8_t* EncodeWithHint(const ByteString& contents,
                                   BCFORMAT format,
                                   int32_t& outWidth,
                                   int32_t& outHeight,
                                   int32_t hints);
-  virtual uint8_t* EncodeImpl(const CFX_ByteString& contents,
+  virtual uint8_t* EncodeImpl(const ByteString& contents,
                               int32_t& outLength) = 0;
-  virtual void CalcTextInfo(const CFX_ByteString& text,
+  virtual void CalcTextInfo(const ByteString& text,
                             FXTEXT_CHARPOS* charPos,
                             CFX_Font* cFont,
                             float geWidth,
                             int32_t fontSize,
                             float& charsLen);
-  virtual bool ShowChars(const CFX_WideStringC& contents,
+  virtual bool ShowChars(const WideStringView& contents,
                          CFX_RenderDevice* device,
                          const CFX_Matrix* matrix,
                          int32_t barWidth,
                          int32_t multiple);
   virtual void ShowDeviceChars(CFX_RenderDevice* device,
                                const CFX_Matrix* matrix,
-                               const CFX_ByteString str,
+                               const ByteString str,
                                float geWidth,
                                FXTEXT_CHARPOS* pCharPos,
                                float locX,
diff --git a/fxbarcode/oned/BC_OnedCodaBarWriter.cpp b/fxbarcode/oned/BC_OnedCodaBarWriter.cpp
index 03a733a..4c5ad67 100644
--- a/fxbarcode/oned/BC_OnedCodaBarWriter.cpp
+++ b/fxbarcode/oned/BC_OnedCodaBarWriter.cpp
@@ -95,15 +95,15 @@
 }
 
 bool CBC_OnedCodaBarWriter::CheckContentValidity(
-    const CFX_WideStringC& contents) {
+    const WideStringView& contents) {
   return std::all_of(
       contents.begin(), contents.end(),
       [this](const wchar_t& ch) { return this->FindChar(ch, false); });
 }
 
-CFX_WideString CBC_OnedCodaBarWriter::FilterContents(
-    const CFX_WideStringC& contents) {
-  CFX_WideString filtercontents;
+WideString CBC_OnedCodaBarWriter::FilterContents(
+    const WideStringView& contents) {
+  WideString filtercontents;
   wchar_t ch;
   for (FX_STRSIZE index = 0; index < contents.GetLength(); index++) {
     ch = contents[index];
@@ -118,7 +118,7 @@
   return filtercontents;
 }
 
-uint8_t* CBC_OnedCodaBarWriter::EncodeWithHint(const CFX_ByteString& contents,
+uint8_t* CBC_OnedCodaBarWriter::EncodeWithHint(const ByteString& contents,
                                                BCFORMAT format,
                                                int32_t& outWidth,
                                                int32_t& outHeight,
@@ -129,9 +129,9 @@
                                           hints);
 }
 
-uint8_t* CBC_OnedCodaBarWriter::EncodeImpl(const CFX_ByteString& contents,
+uint8_t* CBC_OnedCodaBarWriter::EncodeImpl(const ByteString& contents,
                                            int32_t& outLength) {
-  CFX_ByteString data = m_chStart + contents + m_chEnd;
+  ByteString data = m_chStart + contents + m_chEnd;
   m_iContentLen = data.GetLength();
   uint8_t* result = FX_Alloc2D(uint8_t, m_iWideNarrRatio * 7, data.GetLength());
   char ch;
@@ -188,16 +188,16 @@
   return result;
 }
 
-CFX_WideString CBC_OnedCodaBarWriter::encodedContents(
-    const CFX_WideStringC& contents) {
-  CFX_WideString strStart(static_cast<wchar_t>(m_chStart));
-  CFX_WideString strEnd(static_cast<wchar_t>(m_chEnd));
+WideString CBC_OnedCodaBarWriter::encodedContents(
+    const WideStringView& contents) {
+  WideString strStart(static_cast<wchar_t>(m_chStart));
+  WideString strEnd(static_cast<wchar_t>(m_chEnd));
   return strStart + contents + strEnd;
 }
 
-bool CBC_OnedCodaBarWriter::RenderResult(const CFX_WideStringC& contents,
+bool CBC_OnedCodaBarWriter::RenderResult(const WideStringView& contents,
                                          uint8_t* code,
                                          int32_t codeLength) {
-  return CBC_OneDimWriter::RenderResult(encodedContents(contents).AsStringC(),
-                                        code, codeLength);
+  return CBC_OneDimWriter::RenderResult(
+      encodedContents(contents).AsStringView(), code, codeLength);
 }
diff --git a/fxbarcode/oned/BC_OnedCodaBarWriter.h b/fxbarcode/oned/BC_OnedCodaBarWriter.h
index 6a5f315..ab354ef 100644
--- a/fxbarcode/oned/BC_OnedCodaBarWriter.h
+++ b/fxbarcode/oned/BC_OnedCodaBarWriter.h
@@ -18,18 +18,17 @@
   ~CBC_OnedCodaBarWriter() override;
 
   // CBC_OneDimWriter
-  uint8_t* EncodeImpl(const CFX_ByteString& contents,
-                      int32_t& outLength) override;
-  uint8_t* EncodeWithHint(const CFX_ByteString& contents,
+  uint8_t* EncodeImpl(const ByteString& contents, int32_t& outLength) override;
+  uint8_t* EncodeWithHint(const ByteString& contents,
                           BCFORMAT format,
                           int32_t& outWidth,
                           int32_t& outHeight,
                           int32_t hints) override;
-  bool RenderResult(const CFX_WideStringC& contents,
+  bool RenderResult(const WideStringView& contents,
                     uint8_t* code,
                     int32_t codeLength) override;
-  bool CheckContentValidity(const CFX_WideStringC& contents) override;
-  CFX_WideString FilterContents(const CFX_WideStringC& contents) override;
+  bool CheckContentValidity(const WideStringView& contents) override;
+  WideString FilterContents(const WideStringView& contents) override;
   void SetDataLength(int32_t length) override;
 
   virtual bool SetStartChar(char start);
@@ -38,7 +37,7 @@
   virtual bool SetWideNarrowRatio(int8_t ratio);
   virtual bool FindChar(wchar_t ch, bool isContent);
 
-  CFX_WideString encodedContents(const CFX_WideStringC& contents);
+  WideString encodedContents(const WideStringView& contents);
 
  private:
   char m_chStart;
diff --git a/fxbarcode/oned/BC_OnedCode128Writer.cpp b/fxbarcode/oned/BC_OnedCode128Writer.cpp
index 1e9f98b..61ec77b 100644
--- a/fxbarcode/oned/BC_OnedCode128Writer.cpp
+++ b/fxbarcode/oned/BC_OnedCode128Writer.cpp
@@ -84,7 +84,7 @@
 CBC_OnedCode128Writer::~CBC_OnedCode128Writer() {}
 
 bool CBC_OnedCode128Writer::CheckContentValidity(
-    const CFX_WideStringC& contents) {
+    const WideStringView& contents) {
   for (const auto& ch : contents) {
     int32_t patternIndex = static_cast<int32_t>(ch);
     if (patternIndex < 32 || patternIndex > 126 || patternIndex == 34)
@@ -93,9 +93,9 @@
   return true;
 }
 
-CFX_WideString CBC_OnedCode128Writer::FilterContents(
-    const CFX_WideStringC& contents) {
-  CFX_WideString filterChineseChar;
+WideString CBC_OnedCode128Writer::FilterContents(
+    const WideStringView& contents) {
+  WideString filterChineseChar;
   for (FX_STRSIZE i = 0; i < contents.GetLength(); i++) {
     wchar_t ch = contents[i];
     if (ch > 175) {
@@ -105,7 +105,7 @@
     filterChineseChar += ch;
   }
   const wchar_t limit = m_codeFormat == BC_CODE128_B ? 126 : 106;
-  CFX_WideString filtercontents;
+  WideString filtercontents;
   for (const auto& ch : filterChineseChar) {
     if (ch >= 32 && ch <= limit)
       filtercontents += ch;
@@ -121,7 +121,7 @@
   return true;
 }
 
-uint8_t* CBC_OnedCode128Writer::EncodeWithHint(const CFX_ByteString& contents,
+uint8_t* CBC_OnedCode128Writer::EncodeWithHint(const ByteString& contents,
                                                BCFORMAT format,
                                                int32_t& outWidth,
                                                int32_t& outHeight,
@@ -132,7 +132,7 @@
                                           hints);
 }
 
-uint8_t* CBC_OnedCode128Writer::EncodeImpl(const CFX_ByteString& contents,
+uint8_t* CBC_OnedCode128Writer::EncodeImpl(const ByteString& contents,
                                            int32_t& outLength) {
   if (contents.GetLength() < 1 || contents.GetLength() > 80)
     return nullptr;
@@ -168,7 +168,7 @@
 }
 
 // static
-int32_t CBC_OnedCode128Writer::Encode128B(const CFX_ByteString& contents,
+int32_t CBC_OnedCode128Writer::Encode128B(const ByteString& contents,
                                           std::vector<int32_t>* patterns) {
   int32_t checkWeight = 1;
   patterns->push_back(CODE_START_B);
@@ -182,7 +182,7 @@
 }
 
 // static
-int32_t CBC_OnedCode128Writer::Encode128C(const CFX_ByteString& contents,
+int32_t CBC_OnedCode128Writer::Encode128C(const ByteString& contents,
                                           std::vector<int32_t>* patterns) {
   int32_t checkWeight = 1;
   patterns->push_back(CODE_START_C);
diff --git a/fxbarcode/oned/BC_OnedCode128Writer.h b/fxbarcode/oned/BC_OnedCode128Writer.h
index a80ac64..3edb65a 100644
--- a/fxbarcode/oned/BC_OnedCode128Writer.h
+++ b/fxbarcode/oned/BC_OnedCode128Writer.h
@@ -19,21 +19,20 @@
   ~CBC_OnedCode128Writer() override;
 
   // Exposed for testing.
-  static int32_t Encode128B(const CFX_ByteString& contents,
+  static int32_t Encode128B(const ByteString& contents,
                             std::vector<int32_t>* patterns);
-  static int32_t Encode128C(const CFX_ByteString& contents,
+  static int32_t Encode128C(const ByteString& contents,
                             std::vector<int32_t>* patterns);
 
   // CBC_OneDimWriter
-  uint8_t* EncodeWithHint(const CFX_ByteString& contents,
+  uint8_t* EncodeWithHint(const ByteString& contents,
                           BCFORMAT format,
                           int32_t& outWidth,
                           int32_t& outHeight,
                           int32_t hints) override;
-  uint8_t* EncodeImpl(const CFX_ByteString& contents,
-                      int32_t& outLength) override;
-  bool CheckContentValidity(const CFX_WideStringC& contents) override;
-  CFX_WideString FilterContents(const CFX_WideStringC& contents) override;
+  uint8_t* EncodeImpl(const ByteString& contents, int32_t& outLength) override;
+  bool CheckContentValidity(const WideStringView& contents) override;
+  WideString FilterContents(const WideStringView& contents) override;
 
   bool SetTextLocation(BC_TEXT_LOC location);
 
diff --git a/fxbarcode/oned/BC_OnedCode39Writer.cpp b/fxbarcode/oned/BC_OnedCode39Writer.cpp
index 72d7dc4..2e02e01 100644
--- a/fxbarcode/oned/BC_OnedCode39Writer.cpp
+++ b/fxbarcode/oned/BC_OnedCode39Writer.cpp
@@ -48,7 +48,7 @@
 CBC_OnedCode39Writer::~CBC_OnedCode39Writer() {}
 
 bool CBC_OnedCode39Writer::CheckContentValidity(
-    const CFX_WideStringC& contents) {
+    const WideStringView& contents) {
   for (FX_STRSIZE i = 0; i < contents.GetLength(); i++) {
     wchar_t ch = contents[i];
     if ((ch >= L'0' && ch <= L'9') || (ch >= L'A' && ch <= L'Z') ||
@@ -61,9 +61,9 @@
   return true;
 }
 
-CFX_WideString CBC_OnedCode39Writer::FilterContents(
-    const CFX_WideStringC& contents) {
-  CFX_WideString filtercontents;
+WideString CBC_OnedCode39Writer::FilterContents(
+    const WideStringView& contents) {
+  WideString filtercontents;
   for (FX_STRSIZE i = 0; i < contents.GetLength(); i++) {
     wchar_t ch = contents[i];
     if (ch == L'*' && (i == 0 || i == contents.GetLength() - 1)) {
@@ -84,9 +84,9 @@
   return filtercontents;
 }
 
-CFX_WideString CBC_OnedCode39Writer::RenderTextContents(
-    const CFX_WideStringC& contents) {
-  CFX_WideString renderContents;
+WideString CBC_OnedCode39Writer::RenderTextContents(
+    const WideStringView& contents) {
+  WideString renderContents;
   for (FX_STRSIZE i = 0; i < contents.GetLength(); i++) {
     wchar_t ch = contents[i];
     if (ch == L'*' && (i == 0 || i == contents.GetLength() - 1)) {
@@ -120,7 +120,7 @@
   return true;
 }
 
-uint8_t* CBC_OnedCode39Writer::EncodeWithHint(const CFX_ByteString& contents,
+uint8_t* CBC_OnedCode39Writer::EncodeWithHint(const ByteString& contents,
                                               BCFORMAT format,
                                               int32_t& outWidth,
                                               int32_t& outHeight,
@@ -137,7 +137,7 @@
   }
 }
 
-char CBC_OnedCode39Writer::CalcCheckSum(const CFX_ByteString& contents) {
+char CBC_OnedCode39Writer::CalcCheckSum(const ByteString& contents) {
   FX_STRSIZE length = contents.GetLength();
   if (length > 80)
     return '*';
@@ -160,7 +160,7 @@
   return CHECKSUM_STRING[checksum];
 }
 
-uint8_t* CBC_OnedCode39Writer::EncodeImpl(const CFX_ByteString& contents,
+uint8_t* CBC_OnedCode39Writer::EncodeImpl(const ByteString& contents,
                                           int32_t& outlength) {
   char checksum = CalcCheckSum(contents);
   if (checksum == '*')
@@ -169,7 +169,7 @@
   int8_t widths[9] = {0};
   int32_t wideStrideNum = 3;
   int32_t narrStrideNum = 9 - wideStrideNum;
-  CFX_ByteString encodedContents = contents;
+  ByteString encodedContents = contents;
   if (m_bCalcChecksum)
     encodedContents += checksum;
   m_iContentLen = encodedContents.GetLength();
@@ -227,12 +227,12 @@
   return result.release();
 }
 
-bool CBC_OnedCode39Writer::encodedContents(const CFX_WideStringC& contents,
-                                           CFX_WideString* result) {
-  *result = CFX_WideString(contents);
+bool CBC_OnedCode39Writer::encodedContents(const WideStringView& contents,
+                                           WideString* result) {
+  *result = WideString(contents);
   if (m_bCalcChecksum && m_bPrintChecksum) {
-    CFX_WideString checksumContent = FilterContents(contents);
-    CFX_ByteString str = checksumContent.UTF8Encode();
+    WideString checksumContent = FilterContents(contents);
+    ByteString str = checksumContent.UTF8Encode();
     char checksum;
     checksum = CalcCheckSum(str);
     if (checksum == '*')
@@ -243,12 +243,12 @@
   return true;
 }
 
-bool CBC_OnedCode39Writer::RenderResult(const CFX_WideStringC& contents,
+bool CBC_OnedCode39Writer::RenderResult(const WideStringView& contents,
                                         uint8_t* code,
                                         int32_t codeLength) {
-  CFX_WideString encodedCon;
+  WideString encodedCon;
   if (!encodedContents(contents, &encodedCon))
     return false;
-  return CBC_OneDimWriter::RenderResult(encodedCon.AsStringC(), code,
+  return CBC_OneDimWriter::RenderResult(encodedCon.AsStringView(), code,
                                         codeLength);
 }
diff --git a/fxbarcode/oned/BC_OnedCode39Writer.h b/fxbarcode/oned/BC_OnedCode39Writer.h
index fe57d3c..ffed6d9 100644
--- a/fxbarcode/oned/BC_OnedCode39Writer.h
+++ b/fxbarcode/oned/BC_OnedCode39Writer.h
@@ -16,28 +16,27 @@
   ~CBC_OnedCode39Writer() override;
 
   // CBC_OneDimWriter
-  uint8_t* EncodeWithHint(const CFX_ByteString& contents,
+  uint8_t* EncodeWithHint(const ByteString& contents,
                           BCFORMAT format,
                           int32_t& outWidth,
                           int32_t& outHeight,
                           int32_t hints) override;
-  uint8_t* EncodeImpl(const CFX_ByteString& contents,
-                      int32_t& outLength) override;
-  bool RenderResult(const CFX_WideStringC& contents,
+  uint8_t* EncodeImpl(const ByteString& contents, int32_t& outLength) override;
+  bool RenderResult(const WideStringView& contents,
                     uint8_t* code,
                     int32_t codeLength) override;
-  bool CheckContentValidity(const CFX_WideStringC& contents) override;
-  CFX_WideString FilterContents(const CFX_WideStringC& contents) override;
-  CFX_WideString RenderTextContents(const CFX_WideStringC& contents) override;
+  bool CheckContentValidity(const WideStringView& contents) override;
+  WideString FilterContents(const WideStringView& contents) override;
+  WideString RenderTextContents(const WideStringView& contents) override;
 
   virtual bool SetTextLocation(BC_TEXT_LOC loction);
   virtual bool SetWideNarrowRatio(int8_t ratio);
 
-  bool encodedContents(const CFX_WideStringC& contents, CFX_WideString* result);
+  bool encodedContents(const WideStringView& contents, WideString* result);
 
  private:
   void ToIntArray(int32_t a, int8_t* toReturn);
-  char CalcCheckSum(const CFX_ByteString& contents);
+  char CalcCheckSum(const ByteString& contents);
 
   int8_t m_iWideNarrRatio;
 };
diff --git a/fxbarcode/oned/BC_OnedEAN13Writer.cpp b/fxbarcode/oned/BC_OnedEAN13Writer.cpp
index 2d9759b..6de7c2c 100644
--- a/fxbarcode/oned/BC_OnedEAN13Writer.cpp
+++ b/fxbarcode/oned/BC_OnedEAN13Writer.cpp
@@ -56,14 +56,12 @@
 }
 CBC_OnedEAN13Writer::~CBC_OnedEAN13Writer() {}
 
-bool CBC_OnedEAN13Writer::CheckContentValidity(
-    const CFX_WideStringC& contents) {
+bool CBC_OnedEAN13Writer::CheckContentValidity(const WideStringView& contents) {
   return std::all_of(contents.begin(), contents.end(), std::iswdigit);
 }
 
-CFX_WideString CBC_OnedEAN13Writer::FilterContents(
-    const CFX_WideStringC& contents) {
-  CFX_WideString filtercontents;
+WideString CBC_OnedEAN13Writer::FilterContents(const WideStringView& contents) {
+  WideString filtercontents;
   wchar_t ch;
   for (FX_STRSIZE i = 0; i < contents.GetLength(); i++) {
     ch = contents[i];
@@ -78,11 +76,11 @@
   return filtercontents;
 }
 
-int32_t CBC_OnedEAN13Writer::CalcChecksum(const CFX_ByteString& contents) {
+int32_t CBC_OnedEAN13Writer::CalcChecksum(const ByteString& contents) {
   return EANCalcChecksum(contents);
 }
 
-uint8_t* CBC_OnedEAN13Writer::EncodeWithHint(const CFX_ByteString& contents,
+uint8_t* CBC_OnedEAN13Writer::EncodeWithHint(const ByteString& contents,
                                              BCFORMAT format,
                                              int32_t& outWidth,
                                              int32_t& outHeight,
@@ -93,7 +91,7 @@
                                           hints);
 }
 
-uint8_t* CBC_OnedEAN13Writer::EncodeImpl(const CFX_ByteString& contents,
+uint8_t* CBC_OnedEAN13Writer::EncodeImpl(const ByteString& contents,
                                          int32_t& outLength) {
   if (contents.GetLength() != 13)
     return nullptr;
@@ -136,7 +134,7 @@
   return result.release();
 }
 
-bool CBC_OnedEAN13Writer::ShowChars(const CFX_WideStringC& contents,
+bool CBC_OnedEAN13Writer::ShowChars(const WideStringView& contents,
                                     CFX_RenderDevice* device,
                                     const CFX_Matrix* matrix,
                                     int32_t barWidth,
@@ -146,12 +144,12 @@
 
   int32_t leftPadding = 7 * multiple;
   int32_t leftPosition = 3 * multiple + leftPadding;
-  CFX_ByteString str = FX_UTF8Encode(contents);
+  ByteString str = FX_UTF8Encode(contents);
   int32_t iLen = str.GetLength();
   std::vector<FXTEXT_CHARPOS> charpos(iLen);
   int32_t iFontSize = (int32_t)fabs(m_fFontSize);
   int32_t iTextHeight = iFontSize + 1;
-  CFX_ByteString tempStr = str.Mid(1, 6);
+  ByteString tempStr = str.Mid(1, 6);
   int32_t strWidth = multiple * 42;
 
   CFX_Matrix matr(m_outputHScale, 0.0, 0.0, 1.0, 0.0, 0.0);
diff --git a/fxbarcode/oned/BC_OnedEAN13Writer.h b/fxbarcode/oned/BC_OnedEAN13Writer.h
index 826d161..c874610 100644
--- a/fxbarcode/oned/BC_OnedEAN13Writer.h
+++ b/fxbarcode/oned/BC_OnedEAN13Writer.h
@@ -20,20 +20,19 @@
   ~CBC_OnedEAN13Writer() override;
 
   // CBC_OneDimWriter
-  uint8_t* EncodeWithHint(const CFX_ByteString& contents,
+  uint8_t* EncodeWithHint(const ByteString& contents,
                           BCFORMAT format,
                           int32_t& outWidth,
                           int32_t& outHeight,
                           int32_t hints) override;
-  uint8_t* EncodeImpl(const CFX_ByteString& contents,
-                      int32_t& outLength) override;
-  bool CheckContentValidity(const CFX_WideStringC& contents) override;
-  CFX_WideString FilterContents(const CFX_WideStringC& contents) override;
+  uint8_t* EncodeImpl(const ByteString& contents, int32_t& outLength) override;
+  bool CheckContentValidity(const WideStringView& contents) override;
+  WideString FilterContents(const WideStringView& contents) override;
 
-  int32_t CalcChecksum(const CFX_ByteString& contents);
+  int32_t CalcChecksum(const ByteString& contents);
 
  protected:
-  bool ShowChars(const CFX_WideStringC& contents,
+  bool ShowChars(const WideStringView& contents,
                  CFX_RenderDevice* device,
                  const CFX_Matrix* matrix,
                  int32_t barWidth,
diff --git a/fxbarcode/oned/BC_OnedEAN8Writer.cpp b/fxbarcode/oned/BC_OnedEAN8Writer.cpp
index d4d438f..f92a162 100644
--- a/fxbarcode/oned/BC_OnedEAN8Writer.cpp
+++ b/fxbarcode/oned/BC_OnedEAN8Writer.cpp
@@ -63,13 +63,12 @@
   return false;
 }
 
-bool CBC_OnedEAN8Writer::CheckContentValidity(const CFX_WideStringC& contents) {
+bool CBC_OnedEAN8Writer::CheckContentValidity(const WideStringView& contents) {
   return std::all_of(contents.begin(), contents.end(), std::iswdigit);
 }
 
-CFX_WideString CBC_OnedEAN8Writer::FilterContents(
-    const CFX_WideStringC& contents) {
-  CFX_WideString filtercontents;
+WideString CBC_OnedEAN8Writer::FilterContents(const WideStringView& contents) {
+  WideString filtercontents;
   wchar_t ch;
   for (FX_STRSIZE i = 0; i < contents.GetLength(); i++) {
     ch = contents[i];
@@ -84,11 +83,11 @@
   return filtercontents;
 }
 
-int32_t CBC_OnedEAN8Writer::CalcChecksum(const CFX_ByteString& contents) {
+int32_t CBC_OnedEAN8Writer::CalcChecksum(const ByteString& contents) {
   return EANCalcChecksum(contents);
 }
 
-uint8_t* CBC_OnedEAN8Writer::EncodeWithHint(const CFX_ByteString& contents,
+uint8_t* CBC_OnedEAN8Writer::EncodeWithHint(const ByteString& contents,
                                             BCFORMAT format,
                                             int32_t& outWidth,
                                             int32_t& outHeight,
@@ -99,7 +98,7 @@
                                           hints);
 }
 
-uint8_t* CBC_OnedEAN8Writer::EncodeImpl(const CFX_ByteString& contents,
+uint8_t* CBC_OnedEAN8Writer::EncodeImpl(const ByteString& contents,
                                         int32_t& outLength) {
   if (contents.GetLength() != 8)
     return nullptr;
@@ -136,7 +135,7 @@
   return result.release();
 }
 
-bool CBC_OnedEAN8Writer::ShowChars(const CFX_WideStringC& contents,
+bool CBC_OnedEAN8Writer::ShowChars(const WideStringView& contents,
                                    CFX_RenderDevice* device,
                                    const CFX_Matrix* matrix,
                                    int32_t barWidth,
@@ -145,10 +144,10 @@
     return false;
 
   int32_t leftPosition = 3 * multiple;
-  CFX_ByteString str = FX_UTF8Encode(contents);
+  ByteString str = FX_UTF8Encode(contents);
   FX_STRSIZE iLength = str.GetLength();
   std::vector<FXTEXT_CHARPOS> charpos(iLength);
-  CFX_ByteString tempStr = str.Left(4);
+  ByteString tempStr = str.Left(4);
   FX_STRSIZE iLen = tempStr.GetLength();
   int32_t strWidth = 7 * multiple * 4;
   float blank = 0.0;
diff --git a/fxbarcode/oned/BC_OnedEAN8Writer.h b/fxbarcode/oned/BC_OnedEAN8Writer.h
index 70c8fd4..77a3602 100644
--- a/fxbarcode/oned/BC_OnedEAN8Writer.h
+++ b/fxbarcode/oned/BC_OnedEAN8Writer.h
@@ -21,22 +21,21 @@
   ~CBC_OnedEAN8Writer() override;
 
   // CBC_OneDimWriter
-  uint8_t* EncodeWithHint(const CFX_ByteString& contents,
+  uint8_t* EncodeWithHint(const ByteString& contents,
                           BCFORMAT format,
                           int32_t& outWidth,
                           int32_t& outHeight,
                           int32_t hints) override;
-  uint8_t* EncodeImpl(const CFX_ByteString& contents,
-                      int32_t& outLength) override;
-  bool CheckContentValidity(const CFX_WideStringC& contents) override;
-  CFX_WideString FilterContents(const CFX_WideStringC& contents) override;
+  uint8_t* EncodeImpl(const ByteString& contents, int32_t& outLength) override;
+  bool CheckContentValidity(const WideStringView& contents) override;
+  WideString FilterContents(const WideStringView& contents) override;
   void SetDataLength(int32_t length) override;
 
   bool SetTextLocation(BC_TEXT_LOC location);
-  int32_t CalcChecksum(const CFX_ByteString& contents);
+  int32_t CalcChecksum(const ByteString& contents);
 
  protected:
-  bool ShowChars(const CFX_WideStringC& contents,
+  bool ShowChars(const WideStringView& contents,
                  CFX_RenderDevice* device,
                  const CFX_Matrix* matrix,
                  int32_t barWidth,
diff --git a/fxbarcode/oned/BC_OnedEANChecksum.cpp b/fxbarcode/oned/BC_OnedEANChecksum.cpp
index 744a608..64aa1c5 100644
--- a/fxbarcode/oned/BC_OnedEANChecksum.cpp
+++ b/fxbarcode/oned/BC_OnedEANChecksum.cpp
@@ -6,7 +6,7 @@
 
 #include "core/fxcrt/fx_extension.h"
 
-int32_t EANCalcChecksum(const CFX_ByteString& contents) {
+int32_t EANCalcChecksum(const ByteString& contents) {
   int32_t odd = 0;
   int32_t even = 0;
   FX_STRSIZE parity = 1;
diff --git a/fxbarcode/oned/BC_OnedEANChecksum.h b/fxbarcode/oned/BC_OnedEANChecksum.h
index 47d2d6b..5dd24bc 100644
--- a/fxbarcode/oned/BC_OnedEANChecksum.h
+++ b/fxbarcode/oned/BC_OnedEANChecksum.h
@@ -7,6 +7,6 @@
 
 #include "core/fxcrt/fx_string.h"
 
-int32_t EANCalcChecksum(const CFX_ByteString& contents);
+int32_t EANCalcChecksum(const ByteString& contents);
 
 #endif  // FXBARCODE_ONED_BC_ONEDEANCHECKSUM_H_
diff --git a/fxbarcode/oned/BC_OnedUPCAWriter.cpp b/fxbarcode/oned/BC_OnedUPCAWriter.cpp
index fac4a1b..5185845 100644
--- a/fxbarcode/oned/BC_OnedUPCAWriter.cpp
+++ b/fxbarcode/oned/BC_OnedUPCAWriter.cpp
@@ -42,7 +42,7 @@
 
 CBC_OnedUPCAWriter::~CBC_OnedUPCAWriter() {}
 
-bool CBC_OnedUPCAWriter::CheckContentValidity(const CFX_WideStringC& contents) {
+bool CBC_OnedUPCAWriter::CheckContentValidity(const WideStringView& contents) {
   for (FX_STRSIZE i = 0; i < contents.GetLength(); ++i) {
     if (contents[i] < '0' || contents[i] > '9')
       return false;
@@ -50,9 +50,8 @@
   return true;
 }
 
-CFX_WideString CBC_OnedUPCAWriter::FilterContents(
-    const CFX_WideStringC& contents) {
-  CFX_WideString filtercontents;
+WideString CBC_OnedUPCAWriter::FilterContents(const WideStringView& contents) {
+  WideString filtercontents;
   wchar_t ch;
   for (FX_STRSIZE i = 0; i < contents.GetLength(); i++) {
     ch = contents[i];
@@ -67,7 +66,7 @@
   return filtercontents;
 }
 
-int32_t CBC_OnedUPCAWriter::CalcChecksum(const CFX_ByteString& contents) {
+int32_t CBC_OnedUPCAWriter::CalcChecksum(const ByteString& contents) {
   int32_t odd = 0;
   int32_t even = 0;
   FX_STRSIZE j = 1;
@@ -84,7 +83,7 @@
   return checksum;
 }
 
-uint8_t* CBC_OnedUPCAWriter::EncodeWithHint(const CFX_ByteString& contents,
+uint8_t* CBC_OnedUPCAWriter::EncodeWithHint(const ByteString& contents,
                                             BCFORMAT format,
                                             int32_t& outWidth,
                                             int32_t& outHeight,
@@ -92,18 +91,18 @@
   if (format != BCFORMAT_UPC_A)
     return nullptr;
 
-  CFX_ByteString toEAN13String = '0' + contents;
+  ByteString toEAN13String = '0' + contents;
   m_iDataLenth = 13;
   return m_subWriter->EncodeWithHint(toEAN13String, BCFORMAT_EAN_13, outWidth,
                                      outHeight, hints);
 }
 
-uint8_t* CBC_OnedUPCAWriter::EncodeImpl(const CFX_ByteString& contents,
+uint8_t* CBC_OnedUPCAWriter::EncodeImpl(const ByteString& contents,
                                         int32_t& outLength) {
   return nullptr;
 }
 
-bool CBC_OnedUPCAWriter::ShowChars(const CFX_WideStringC& contents,
+bool CBC_OnedUPCAWriter::ShowChars(const WideStringView& contents,
                                    CFX_RenderDevice* device,
                                    const CFX_Matrix* matrix,
                                    int32_t barWidth,
@@ -113,10 +112,10 @@
 
   int32_t leftPadding = 7 * multiple;
   int32_t leftPosition = 10 * multiple + leftPadding;
-  CFX_ByteString str = FX_UTF8Encode(contents);
+  ByteString str = FX_UTF8Encode(contents);
   int32_t iLen = str.GetLength();
   std::vector<FXTEXT_CHARPOS> charpos(iLen);
-  CFX_ByteString tempStr = str.Mid(1, 5);
+  ByteString tempStr = str.Mid(1, 5);
   float strWidth = (float)35 * multiple;
   float blank = 0.0;
 
diff --git a/fxbarcode/oned/BC_OnedUPCAWriter.h b/fxbarcode/oned/BC_OnedUPCAWriter.h
index 80f6196..a854ef4 100644
--- a/fxbarcode/oned/BC_OnedUPCAWriter.h
+++ b/fxbarcode/oned/BC_OnedUPCAWriter.h
@@ -24,21 +24,20 @@
   ~CBC_OnedUPCAWriter() override;
 
   // CBC_OneDimWriter
-  uint8_t* EncodeWithHint(const CFX_ByteString& contents,
+  uint8_t* EncodeWithHint(const ByteString& contents,
                           BCFORMAT format,
                           int32_t& outWidth,
                           int32_t& outHeight,
                           int32_t hints) override;
-  uint8_t* EncodeImpl(const CFX_ByteString& contents,
-                      int32_t& outLength) override;
-  bool CheckContentValidity(const CFX_WideStringC& contents) override;
-  CFX_WideString FilterContents(const CFX_WideStringC& contents) override;
+  uint8_t* EncodeImpl(const ByteString& contents, int32_t& outLength) override;
+  bool CheckContentValidity(const WideStringView& contents) override;
+  WideString FilterContents(const WideStringView& contents) override;
 
   void Init();
-  int32_t CalcChecksum(const CFX_ByteString& contents);
+  int32_t CalcChecksum(const ByteString& contents);
 
  protected:
-  bool ShowChars(const CFX_WideStringC& contents,
+  bool ShowChars(const WideStringView& contents,
                  CFX_RenderDevice* device,
                  const CFX_Matrix* matrix,
                  int32_t barWidth,
diff --git a/fxbarcode/pdf417/BC_PDF417.cpp b/fxbarcode/pdf417/BC_PDF417.cpp
index 3f492f9..9b73b49 100644
--- a/fxbarcode/pdf417/BC_PDF417.cpp
+++ b/fxbarcode/pdf417/BC_PDF417.cpp
@@ -399,7 +399,7 @@
   return m_barcodeMatrix.get();
 }
 
-bool CBC_PDF417::generateBarcodeLogic(CFX_WideString msg,
+bool CBC_PDF417::generateBarcodeLogic(WideString msg,
                                       int32_t errorCorrectionLevel) {
   int32_t errorCorrectionCodeWords =
       CBC_PDF417ErrorCorrection::getErrorCorrectionCodewordCount(
@@ -408,7 +408,7 @@
     return false;
 
   int32_t e = BCExceptionNO;
-  CFX_WideString highLevel =
+  WideString highLevel =
       CBC_PDF417HighLevelEncoder::encodeHighLevel(msg, m_compaction, e);
   if (e != BCExceptionNO)
     return false;
@@ -425,19 +425,19 @@
     return false;
 
   int32_t n = sourceCodeWords + pad + 1;
-  CFX_WideString sb;
+  WideString sb;
   sb += (wchar_t)n;
   sb += highLevel;
   for (int32_t i = 0; i < pad; i++)
     sb += (wchar_t)900;
 
-  CFX_WideString dataCodewords(sb);
-  CFX_WideString ec;
+  WideString dataCodewords(sb);
+  WideString ec;
   if (!CBC_PDF417ErrorCorrection::generateErrorCorrection(
           dataCodewords, errorCorrectionLevel, &ec)) {
     return false;
   }
-  CFX_WideString fullCodewords = dataCodewords + ec;
+  WideString fullCodewords = dataCodewords + ec;
   m_barcodeMatrix = pdfium::MakeUnique<CBC_BarcodeMatrix>(rows, cols);
   encodeLowLevel(fullCodewords, cols, rows, errorCorrectionLevel,
                  m_barcodeMatrix.get());
@@ -498,7 +498,7 @@
   logic->addBar(last, width);
 }
 
-void CBC_PDF417::encodeLowLevel(CFX_WideString fullCodewords,
+void CBC_PDF417::encodeLowLevel(WideString fullCodewords,
                                 int32_t c,
                                 int32_t r,
                                 int32_t errorCorrectionLevel,
diff --git a/fxbarcode/pdf417/BC_PDF417.h b/fxbarcode/pdf417/BC_PDF417.h
index e6140a8..6014df0 100644
--- a/fxbarcode/pdf417/BC_PDF417.h
+++ b/fxbarcode/pdf417/BC_PDF417.h
@@ -23,7 +23,7 @@
   virtual ~CBC_PDF417();
 
   CBC_BarcodeMatrix* getBarcodeMatrix();
-  bool generateBarcodeLogic(CFX_WideString msg, int32_t errorCorrectionLevel);
+  bool generateBarcodeLogic(WideString msg, int32_t errorCorrectionLevel);
   void setDimensions(int32_t maxCols,
                      int32_t minCols,
                      int32_t maxRows,
@@ -45,7 +45,7 @@
                                          int32_t c,
                                          int32_t r);
   static void encodeChar(int32_t pattern, int32_t len, CBC_BarcodeRow* logic);
-  void encodeLowLevel(CFX_WideString fullCodewords,
+  void encodeLowLevel(WideString fullCodewords,
                       int32_t c,
                       int32_t r,
                       int32_t errorCorrectionLevel,
diff --git a/fxbarcode/pdf417/BC_PDF417ErrorCorrection.cpp b/fxbarcode/pdf417/BC_PDF417ErrorCorrection.cpp
index 1d8258e..ade3eb5 100644
--- a/fxbarcode/pdf417/BC_PDF417ErrorCorrection.cpp
+++ b/fxbarcode/pdf417/BC_PDF417ErrorCorrection.cpp
@@ -132,9 +132,9 @@
 }
 
 bool CBC_PDF417ErrorCorrection::generateErrorCorrection(
-    const CFX_WideString& dataCodewords,
+    const WideString& dataCodewords,
     int32_t errorCorrectionLevel,
-    CFX_WideString* result) {
+    WideString* result) {
   assert(result);
   assert(result->IsEmpty());
 
diff --git a/fxbarcode/pdf417/BC_PDF417ErrorCorrection.h b/fxbarcode/pdf417/BC_PDF417ErrorCorrection.h
index 3a84ef5..3e28162 100644
--- a/fxbarcode/pdf417/BC_PDF417ErrorCorrection.h
+++ b/fxbarcode/pdf417/BC_PDF417ErrorCorrection.h
@@ -17,9 +17,9 @@
   virtual ~CBC_PDF417ErrorCorrection();
 
   static int32_t getErrorCorrectionCodewordCount(int32_t errorCorrectionLevel);
-  static bool generateErrorCorrection(const CFX_WideString& dataCodewords,
+  static bool generateErrorCorrection(const WideString& dataCodewords,
                                       int32_t errorCorrectionLevel,
-                                      CFX_WideString* result);
+                                      WideString* result);
 };
 
 #endif  // FXBARCODE_PDF417_BC_PDF417ERRORCORRECTION_H_
diff --git a/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.cpp b/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.cpp
index c531716..1450b37 100644
--- a/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.cpp
+++ b/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.cpp
@@ -55,24 +55,23 @@
 
 void CBC_PDF417HighLevelEncoder::Finalize() {}
 
-CFX_WideString CBC_PDF417HighLevelEncoder::encodeHighLevel(
-    CFX_WideString wideMsg,
-    Compaction compaction,
-    int32_t& e) {
-  CFX_ByteString bytes;
+WideString CBC_PDF417HighLevelEncoder::encodeHighLevel(WideString wideMsg,
+                                                       Compaction compaction,
+                                                       int32_t& e) {
+  ByteString bytes;
   CBC_UtilCodingConvert::UnicodeToUTF8(wideMsg, bytes);
-  CFX_WideString msg;
+  WideString msg;
   int32_t len = bytes.GetLength();
   for (int32_t i = 0; i < len; i++) {
     wchar_t ch = (wchar_t)(bytes[i] & 0xff);
     if (ch == '?' && bytes[i] != '?') {
       e = BCExceptionCharactersOutsideISO88591Encoding;
-      return CFX_WideString();
+      return WideString();
     }
     msg += ch;
   }
   std::vector<uint8_t> byteArr(bytes.begin(), bytes.end());
-  CFX_WideString sb;
+  WideString sb;
   len = msg.GetLength();
   int32_t p = 0;
   int32_t textSubMode = SUBMODE_ALPHA;
@@ -145,12 +144,12 @@
   }
 }
 
-int32_t CBC_PDF417HighLevelEncoder::encodeText(CFX_WideString msg,
+int32_t CBC_PDF417HighLevelEncoder::encodeText(WideString msg,
                                                int32_t startpos,
                                                int32_t count,
-                                               CFX_WideString& sb,
+                                               WideString& sb,
                                                int32_t initialSubmode) {
-  CFX_WideString tmp;
+  WideString tmp;
   int32_t submode = initialSubmode;
   int32_t idx = 0;
   while (true) {
@@ -262,7 +261,7 @@
                                               int32_t startpos,
                                               int32_t count,
                                               int32_t startmode,
-                                              CFX_WideString& sb) {
+                                              WideString& sb) {
   if (count == 1 && startmode == TEXT_COMPACTION) {
     sb += (wchar_t)SHIFT_TO_BYTE;
   }
@@ -295,16 +294,16 @@
     sb += (wchar_t)ch;
   }
 }
-void CBC_PDF417HighLevelEncoder::encodeNumeric(CFX_WideString msg,
+void CBC_PDF417HighLevelEncoder::encodeNumeric(WideString msg,
                                                int32_t startpos,
                                                int32_t count,
-                                               CFX_WideString& sb) {
+                                               WideString& sb) {
   int32_t idx = 0;
   BigInteger num900 = 900;
   while (idx < count) {
-    CFX_WideString tmp;
+    WideString tmp;
     int32_t len = 44 < count - idx ? 44 : count - idx;
-    CFX_ByteString part =
+    ByteString part =
         ((wchar_t)'1' + msg.Mid(startpos + idx, len)).UTF8Encode();
     BigInteger bigint = stringToBigInteger(part.c_str());
     do {
@@ -337,7 +336,7 @@
   return ch == '\t' || ch == '\n' || ch == '\r' || (ch >= 32 && ch <= 126);
 }
 int32_t CBC_PDF417HighLevelEncoder::determineConsecutiveDigitCount(
-    CFX_WideString msg,
+    WideString msg,
     int32_t startpos) {
   int32_t count = 0;
   int32_t len = msg.GetLength();
@@ -355,7 +354,7 @@
   return count;
 }
 int32_t CBC_PDF417HighLevelEncoder::determineConsecutiveTextCount(
-    CFX_WideString msg,
+    WideString msg,
     int32_t startpos) {
   int32_t len = msg.GetLength();
   int32_t idx = startpos;
@@ -384,7 +383,7 @@
   return idx - startpos;
 }
 int32_t CBC_PDF417HighLevelEncoder::determineConsecutiveBinaryCount(
-    CFX_WideString msg,
+    WideString msg,
     std::vector<uint8_t>* bytes,
     int32_t startpos,
     int32_t& e) {
diff --git a/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h b/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h
index 32482dc..2701c81 100644
--- a/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h
+++ b/fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h
@@ -14,9 +14,9 @@
 
 class CBC_PDF417HighLevelEncoder {
  public:
-  static CFX_WideString encodeHighLevel(CFX_WideString msg,
-                                        Compaction compaction,
-                                        int32_t& e);
+  static WideString encodeHighLevel(WideString msg,
+                                    Compaction compaction,
+                                    int32_t& e);
   static void Inverse();
   static void Initialize();
   static void Finalize();
@@ -35,31 +35,31 @@
   static uint8_t TEXT_PUNCTUATION_RAW[];
   static int32_t MIXED[128];
   static int32_t PUNCTUATION[128];
-  static int32_t encodeText(CFX_WideString msg,
+  static int32_t encodeText(WideString msg,
                             int32_t startpos,
                             int32_t count,
-                            CFX_WideString& sb,
+                            WideString& sb,
                             int32_t initialSubmode);
   static void encodeBinary(std::vector<uint8_t>* bytes,
                            int32_t startpos,
                            int32_t count,
                            int32_t startmode,
-                           CFX_WideString& sb);
-  static void encodeNumeric(CFX_WideString msg,
+                           WideString& sb);
+  static void encodeNumeric(WideString msg,
                             int32_t startpos,
                             int32_t count,
-                            CFX_WideString& sb);
+                            WideString& sb);
   static bool isDigit(wchar_t ch);
   static bool isAlphaUpper(wchar_t ch);
   static bool isAlphaLower(wchar_t ch);
   static bool isMixed(wchar_t ch);
   static bool isPunctuation(wchar_t ch);
   static bool isText(wchar_t ch);
-  static int32_t determineConsecutiveDigitCount(CFX_WideString msg,
+  static int32_t determineConsecutiveDigitCount(WideString msg,
                                                 int32_t startpos);
-  static int32_t determineConsecutiveTextCount(CFX_WideString msg,
+  static int32_t determineConsecutiveTextCount(WideString msg,
                                                int32_t startpos);
-  static int32_t determineConsecutiveBinaryCount(CFX_WideString msg,
+  static int32_t determineConsecutiveBinaryCount(WideString msg,
                                                  std::vector<uint8_t>* bytes,
                                                  int32_t startpos,
                                                  int32_t& e);
diff --git a/fxbarcode/pdf417/BC_PDF417HighLevelEncoder_unittest.cpp b/fxbarcode/pdf417/BC_PDF417HighLevelEncoder_unittest.cpp
index 1431174..ad4a59a 100644
--- a/fxbarcode/pdf417/BC_PDF417HighLevelEncoder_unittest.cpp
+++ b/fxbarcode/pdf417/BC_PDF417HighLevelEncoder_unittest.cpp
@@ -47,8 +47,8 @@
     for (size_t j = 0; j < input_length; ++j) {
       input_array[j] = ptr->input[j];
     }
-    CFX_WideString expected(ptr->expected, ptr->expected_length);
-    CFX_WideString result;
+    WideString expected(ptr->expected, ptr->expected_length);
+    WideString result;
     CBC_PDF417HighLevelEncoder::encodeBinary(
         &input_array, ptr->offset, ptr->count, ptr->startmode, result);
     EXPECT_EQ(expected, result) << " for case number " << i;
@@ -109,9 +109,9 @@
   CBC_PDF417HighLevelEncoder::Initialize();
   for (size_t i = 0; i < FX_ArraySize(encode_numeric_cases); ++i) {
     EncodeNumericCase* ptr = &encode_numeric_cases[i];
-    CFX_WideString input(ptr->input);
-    CFX_WideString expected(ptr->expected, ptr->expected_length);
-    CFX_WideString result;
+    WideString input(ptr->input);
+    WideString expected(ptr->expected, ptr->expected_length);
+    WideString result;
     CBC_PDF417HighLevelEncoder::encodeNumeric(input, ptr->offset, ptr->count,
                                               result);
     EXPECT_EQ(expected, result) << " for case number " << i;
@@ -156,7 +156,7 @@
   CBC_PDF417HighLevelEncoder::Initialize();
   for (size_t i = 0; i < FX_ArraySize(consecutive_digit_cases); ++i) {
     ConsecutiveDigitCase* ptr = &consecutive_digit_cases[i];
-    CFX_WideString input(ptr->input);
+    WideString input(ptr->input);
     int actual_count =
         CBC_PDF417HighLevelEncoder::determineConsecutiveDigitCount(input,
                                                                    ptr->offset);
@@ -217,7 +217,7 @@
   CBC_PDF417HighLevelEncoder::Initialize();
   for (size_t i = 0; i < FX_ArraySize(consecutive_text_cases); ++i) {
     ConsecutiveTextCase* ptr = &consecutive_text_cases[i];
-    CFX_WideString input(ptr->input);
+    WideString input(ptr->input);
     int actual_count =
         CBC_PDF417HighLevelEncoder::determineConsecutiveTextCount(input,
                                                                   ptr->offset);
diff --git a/fxbarcode/pdf417/BC_PDF417Writer.cpp b/fxbarcode/pdf417/BC_PDF417Writer.cpp
index 2f6fc9e..4fec974 100644
--- a/fxbarcode/pdf417/BC_PDF417Writer.cpp
+++ b/fxbarcode/pdf417/BC_PDF417Writer.cpp
@@ -48,7 +48,7 @@
   m_bTruncated = truncated;
 }
 
-uint8_t* CBC_PDF417Writer::Encode(const CFX_WideString& contents,
+uint8_t* CBC_PDF417Writer::Encode(const WideString& contents,
                                   int32_t& outWidth,
                                   int32_t& outHeight) {
   CBC_PDF417 encoder;
diff --git a/fxbarcode/pdf417/BC_PDF417Writer.h b/fxbarcode/pdf417/BC_PDF417Writer.h
index 3941871..ef59616 100644
--- a/fxbarcode/pdf417/BC_PDF417Writer.h
+++ b/fxbarcode/pdf417/BC_PDF417Writer.h
@@ -18,7 +18,7 @@
   CBC_PDF417Writer();
   ~CBC_PDF417Writer() override;
 
-  uint8_t* Encode(const CFX_WideString& contents,
+  uint8_t* Encode(const WideString& contents,
                   int32_t& outWidth,
                   int32_t& outHeight);
 
diff --git a/fxbarcode/qrcode/BC_QRCodeWriter.cpp b/fxbarcode/qrcode/BC_QRCodeWriter.cpp
index c679e9f..eb35af3 100644
--- a/fxbarcode/qrcode/BC_QRCodeWriter.cpp
+++ b/fxbarcode/qrcode/BC_QRCodeWriter.cpp
@@ -55,7 +55,7 @@
   return true;
 }
 
-uint8_t* CBC_QRCodeWriter::Encode(const CFX_WideString& contents,
+uint8_t* CBC_QRCodeWriter::Encode(const WideString& contents,
                                   int32_t ecLevel,
                                   int32_t& outWidth,
                                   int32_t& outHeight) {
diff --git a/fxbarcode/qrcode/BC_QRCodeWriter.h b/fxbarcode/qrcode/BC_QRCodeWriter.h
index 1a0502d..3b3efc9 100644
--- a/fxbarcode/qrcode/BC_QRCodeWriter.h
+++ b/fxbarcode/qrcode/BC_QRCodeWriter.h
@@ -17,7 +17,7 @@
 
   static void ReleaseAll();
 
-  uint8_t* Encode(const CFX_WideString& contents,
+  uint8_t* Encode(const WideString& contents,
                   int32_t ecLevel,
                   int32_t& outWidth,
                   int32_t& outHeight);
diff --git a/fxbarcode/qrcode/BC_QRCoderEncoder.cpp b/fxbarcode/qrcode/BC_QRCoderEncoder.cpp
index 4c48841..e1a4917 100644
--- a/fxbarcode/qrcode/BC_QRCoderEncoder.cpp
+++ b/fxbarcode/qrcode/BC_QRCoderEncoder.cpp
@@ -41,7 +41,7 @@
 #include "fxbarcode/qrcode/BC_QRCoderVersion.h"
 #include "third_party/base/ptr_util.h"
 
-using ModeStringPair = std::pair<CBC_QRCoderMode*, CFX_ByteString>;
+using ModeStringPair = std::pair<CBC_QRCoderMode*, ByteString>;
 
 namespace {
 
@@ -61,7 +61,7 @@
   return g_alphaNumericTable[code_index];
 }
 
-void AppendNumericBytes(const CFX_ByteString& content,
+void AppendNumericBytes(const ByteString& content,
                         CBC_QRCoderBitVector* bits,
                         int32_t& e) {
   int32_t length = content.GetLength();
@@ -84,7 +84,7 @@
   }
 }
 
-void AppendAlphaNumericBytes(const CFX_ByteString& content,
+void AppendAlphaNumericBytes(const ByteString& content,
                              CBC_QRCoderBitVector* bits,
                              int32_t& e) {
   int32_t length = content.GetLength();
@@ -110,7 +110,7 @@
   }
 }
 
-void AppendGBKBytes(const CFX_ByteString& content,
+void AppendGBKBytes(const ByteString& content,
                     CBC_QRCoderBitVector* bits,
                     int32_t& e) {
   int32_t length = content.GetLength();
@@ -130,15 +130,15 @@
   }
 }
 
-void Append8BitBytes(const CFX_ByteString& content,
+void Append8BitBytes(const ByteString& content,
                      CBC_QRCoderBitVector* bits,
-                     CFX_ByteString encoding,
+                     ByteString encoding,
                      int32_t& e) {
   for (FX_STRSIZE i = 0; i < content.GetLength(); i++)
     bits->AppendBits(content[i], 8);
 }
 
-void AppendKanjiBytes(const CFX_ByteString& content,
+void AppendKanjiBytes(const ByteString& content,
                       CBC_QRCoderBitVector* bits,
                       int32_t& e) {
   std::vector<uint8_t> bytes;
@@ -184,10 +184,10 @@
   return true;
 }
 
-void AppendBytes(const CFX_ByteString& content,
+void AppendBytes(const ByteString& content,
                  CBC_QRCoderMode* mode,
                  CBC_QRCoderBitVector* bits,
-                 CFX_ByteString encoding,
+                 ByteString encoding,
                  int32_t& e) {
   if (mode == CBC_QRCoderMode::sNUMERIC)
     AppendNumericBytes(content, bits, e);
@@ -423,7 +423,7 @@
     MergeString(result, versionNum, e);
 }
 
-void SplitString(const CFX_ByteString& content,
+void SplitString(const ByteString& content,
                  std::vector<ModeStringPair>* result) {
   FX_STRSIZE index = 0;
   while (index < content.GetLength()) {
@@ -484,8 +484,7 @@
     SplitString(content.Right(content.GetLength() - index), result);
 }
 
-CBC_QRCoderMode* ChooseMode(const CFX_ByteString& content,
-                            CFX_ByteString encoding) {
+CBC_QRCoderMode* ChooseMode(const ByteString& content, ByteString encoding) {
   if (encoding.Compare("SHIFT_JIS") == 0)
     return CBC_QRCoderMode::sKANJI;
 
@@ -566,11 +565,11 @@
 CBC_QRCoderEncoder::~CBC_QRCoderEncoder() {}
 
 // static
-bool CBC_QRCoderEncoder::Encode(const CFX_WideString& content,
+bool CBC_QRCoderEncoder::Encode(const WideString& content,
                                 const CBC_QRCoderErrorCorrectionLevel* ecLevel,
                                 CBC_QRCoder* qrCode) {
-  CFX_ByteString encoding = "utf8";
-  CFX_ByteString utf8Data;
+  ByteString encoding = "utf8";
+  ByteString utf8Data;
   CBC_UtilCodingConvert::UnicodeToUTF8(content, utf8Data);
   CBC_QRCoderMode* mode = ChooseMode(utf8Data, encoding);
   CBC_QRCoderBitVector dataBits;
diff --git a/fxbarcode/qrcode/BC_QRCoderEncoder.h b/fxbarcode/qrcode/BC_QRCoderEncoder.h
index 6bba889..3acbd1b 100644
--- a/fxbarcode/qrcode/BC_QRCoderEncoder.h
+++ b/fxbarcode/qrcode/BC_QRCoderEncoder.h
@@ -20,7 +20,7 @@
   CBC_QRCoderEncoder();
   ~CBC_QRCoderEncoder();
 
-  static bool Encode(const CFX_WideString& content,
+  static bool Encode(const WideString& content,
                      const CBC_QRCoderErrorCorrectionLevel* ecLevel,
                      CBC_QRCoder* qrCode);
 };
diff --git a/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h b/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h
index e153c64..ff7563c 100644
--- a/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h
+++ b/fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h
@@ -25,7 +25,7 @@
 
   int32_t Ordinal() const { return m_ordinal; }
   int32_t GetBits() const { return m_bits; }
-  CFX_ByteString GetName() const { return m_name; }
+  ByteString GetName() const { return m_name; }
 
  private:
   CBC_QRCoderErrorCorrectionLevel(int32_t ordinal,
@@ -35,7 +35,7 @@
 
   int32_t m_ordinal;
   int32_t m_bits;
-  CFX_ByteString m_name;
+  ByteString m_name;
 };
 
 #endif  // FXBARCODE_QRCODE_BC_QRCODERERRORCORRECTIONLEVEL_H_
diff --git a/fxbarcode/qrcode/BC_QRCoderMode.cpp b/fxbarcode/qrcode/BC_QRCoderMode.cpp
index 5f9ce5b..0f8c227 100644
--- a/fxbarcode/qrcode/BC_QRCoderMode.cpp
+++ b/fxbarcode/qrcode/BC_QRCoderMode.cpp
@@ -39,7 +39,7 @@
 
 CBC_QRCoderMode::CBC_QRCoderMode(std::vector<int32_t> charCountBits,
                                  int32_t bits,
-                                 CFX_ByteString name)
+                                 ByteString name)
     : m_characterCountBitsForVersions(std::move(charCountBits)),
       m_bits(bits),
       m_name(name) {}
@@ -107,7 +107,7 @@
   return m_bits;
 }
 
-CFX_ByteString CBC_QRCoderMode::GetName() const {
+ByteString CBC_QRCoderMode::GetName() const {
   return m_name;
 }
 
diff --git a/fxbarcode/qrcode/BC_QRCoderMode.h b/fxbarcode/qrcode/BC_QRCoderMode.h
index 6669cbf..9f2844d 100644
--- a/fxbarcode/qrcode/BC_QRCoderMode.h
+++ b/fxbarcode/qrcode/BC_QRCoderMode.h
@@ -24,7 +24,7 @@
 
   int32_t GetCharacterCountBits(int32_t number, int32_t& e) const;
   int32_t GetBits() const;
-  CFX_ByteString GetName() const;
+  ByteString GetName() const;
 
   static CBC_QRCoderMode* sBYTE;
   static CBC_QRCoderMode* sNUMERIC;
@@ -41,11 +41,11 @@
   CBC_QRCoderMode();
   CBC_QRCoderMode(std::vector<int32_t> charCountBits,
                   int32_t bits,
-                  CFX_ByteString name);
+                  ByteString name);
 
   std::vector<int32_t> m_characterCountBitsForVersions;
   const int32_t m_bits;
-  const CFX_ByteString m_name;
+  const ByteString m_name;
 };
 
 #endif  // FXBARCODE_QRCODE_BC_QRCODERMODE_H_
diff --git a/fxbarcode/utils.h b/fxbarcode/utils.h
index df7d1f0..7d5bc0a 100644
--- a/fxbarcode/utils.h
+++ b/fxbarcode/utils.h
@@ -11,14 +11,13 @@
 
 #include "core/fxcrt/fx_string.h"
 
-bool BC_FX_ByteString_Replace(CFX_ByteString& dst,
+bool BC_FX_ByteString_Replace(ByteString& dst,
                               uint32_t first,
                               uint32_t last,
                               int32_t count,
                               char c);
-void BC_FX_ByteString_Append(CFX_ByteString& dst, int32_t count, char c);
-void BC_FX_ByteString_Append(CFX_ByteString& dst,
-                             const std::vector<uint8_t>& ba);
+void BC_FX_ByteString_Append(ByteString& dst, int32_t count, char c);
+void BC_FX_ByteString_Append(ByteString& dst, const std::vector<uint8_t>& ba);
 
 #if (_FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN64_)
 #include <limits>
diff --git a/fxjs/cfxjse_arguments.cpp b/fxjs/cfxjse_arguments.cpp
index 363f39c..f390cef 100644
--- a/fxjs/cfxjse_arguments.cpp
+++ b/fxjs/cfxjse_arguments.cpp
@@ -39,10 +39,10 @@
   return static_cast<float>((*m_pInfo)[index]->NumberValue());
 }
 
-CFX_ByteString CFXJSE_Arguments::GetUTF8String(int32_t index) const {
+ByteString CFXJSE_Arguments::GetUTF8String(int32_t index) const {
   v8::Local<v8::String> hString = (*m_pInfo)[index]->ToString();
   v8::String::Utf8Value szStringVal(hString);
-  return CFX_ByteString(*szStringVal);
+  return ByteString(*szStringVal);
 }
 
 CFXJSE_HostObject* CFXJSE_Arguments::GetObject(int32_t index,
diff --git a/fxjs/cfxjse_arguments.h b/fxjs/cfxjse_arguments.h
index 9317d70..0553335 100644
--- a/fxjs/cfxjse_arguments.h
+++ b/fxjs/cfxjse_arguments.h
@@ -24,7 +24,7 @@
   bool GetBoolean(int32_t index) const;
   int32_t GetInt32(int32_t index) const;
   float GetFloat(int32_t index) const;
-  CFX_ByteString GetUTF8String(int32_t index) const;
+  ByteString GetUTF8String(int32_t index) const;
   CFXJSE_HostObject* GetObject(int32_t index,
                                CFXJSE_Class* pClass = nullptr) const;
   CFXJSE_Value* GetReturnValue() const;
diff --git a/fxjs/cfxjse_class.cpp b/fxjs/cfxjse_class.cpp
index 3dba0ab..8f4334f 100644
--- a/fxjs/cfxjse_class.cpp
+++ b/fxjs/cfxjse_class.cpp
@@ -24,7 +24,7 @@
   if (!lpFunctionInfo)
     return;
 
-  CFX_ByteStringC szFunctionName(lpFunctionInfo->name);
+  ByteStringView szFunctionName(lpFunctionInfo->name);
   auto lpThisValue = pdfium::MakeUnique<CFXJSE_Value>(info.GetIsolate());
   lpThisValue->ForceSetValue(info.Holder());
   auto lpRetValue = pdfium::MakeUnique<CFXJSE_Value>(info.GetIsolate());
@@ -42,7 +42,7 @@
   if (!lpClassDefinition)
     return;
 
-  CFX_ByteStringC szFunctionName(lpClassDefinition->name);
+  ByteStringView szFunctionName(lpClassDefinition->name);
   auto lpThisValue = pdfium::MakeUnique<CFXJSE_Value>(info.GetIsolate());
   lpThisValue->ForceSetValue(info.Holder());
   auto lpRetValue = pdfium::MakeUnique<CFXJSE_Value>(info.GetIsolate());
@@ -60,7 +60,7 @@
   if (!lpPropertyInfo)
     return;
 
-  CFX_ByteStringC szPropertyName(lpPropertyInfo->name);
+  ByteStringView szPropertyName(lpPropertyInfo->name);
   auto lpThisValue = pdfium::MakeUnique<CFXJSE_Value>(info.GetIsolate());
   auto lpPropValue = pdfium::MakeUnique<CFXJSE_Value>(info.GetIsolate());
   lpThisValue->ForceSetValue(info.Holder());
@@ -77,7 +77,7 @@
   if (!lpPropertyInfo)
     return;
 
-  CFX_ByteStringC szPropertyName(lpPropertyInfo->name);
+  ByteStringView szPropertyName(lpPropertyInfo->name);
   auto lpThisValue = pdfium::MakeUnique<CFXJSE_Value>(info.GetIsolate());
   auto lpPropValue = pdfium::MakeUnique<CFXJSE_Value>(info.GetIsolate());
   lpThisValue->ForceSetValue(info.Holder());
@@ -108,7 +108,7 @@
     return;
 
   if (info.This() == info.Holder() && lpClass->name) {
-    CFX_ByteString szStringVal;
+    ByteString szStringVal;
     szStringVal.Format("[object %s]", lpClass->name);
     info.GetReturnValue().Set(v8::String::NewFromUtf8(
         info.GetIsolate(), szStringVal.c_str(), v8::String::kNormalString,
@@ -131,7 +131,7 @@
       hCallBackInfo->GetInternalField(1).As<v8::String>();
   ASSERT(lpClass && !hPropName.IsEmpty());
   v8::String::Utf8Value szPropName(hPropName);
-  CFX_ByteStringC szFxPropName = *szPropName;
+  ByteStringView szFxPropName = *szPropName;
   auto lpThisValue = pdfium::MakeUnique<CFXJSE_Value>(info.GetIsolate());
   lpThisValue->ForceSetValue(info.Holder());
   auto lpRetValue = pdfium::MakeUnique<CFXJSE_Value>(info.GetIsolate());
@@ -143,7 +143,7 @@
 
 void DynPropGetterAdapter(const FXJSE_CLASS_DESCRIPTOR* lpClass,
                           CFXJSE_Value* pObject,
-                          const CFX_ByteStringC& szPropName,
+                          const ByteStringView& szPropName,
                           CFXJSE_Value* pValue) {
   ASSERT(lpClass);
   int32_t nPropType =
@@ -179,7 +179,7 @@
 
 void DynPropSetterAdapter(const FXJSE_CLASS_DESCRIPTOR* lpClass,
                           CFXJSE_Value* pObject,
-                          const CFX_ByteStringC& szPropName,
+                          const ByteStringView& szPropName,
                           CFXJSE_Value* pValue) {
   ASSERT(lpClass);
   int32_t nPropType =
@@ -194,7 +194,7 @@
 
 bool DynPropQueryAdapter(const FXJSE_CLASS_DESCRIPTOR* lpClass,
                          CFXJSE_Value* pObject,
-                         const CFX_ByteStringC& szPropName) {
+                         const ByteStringView& szPropName) {
   ASSERT(lpClass);
   int32_t nPropType =
       lpClass->dynPropTypeGetter == nullptr
@@ -205,7 +205,7 @@
 
 bool DynPropDeleterAdapter(const FXJSE_CLASS_DESCRIPTOR* lpClass,
                            CFXJSE_Value* pObject,
-                           const CFX_ByteStringC& szPropName) {
+                           const ByteStringView& szPropName) {
   ASSERT(lpClass);
   int32_t nPropType =
       lpClass->dynPropTypeGetter == nullptr
@@ -228,7 +228,7 @@
   v8::Isolate* pIsolate = info.GetIsolate();
   v8::HandleScope scope(pIsolate);
   v8::String::Utf8Value szPropName(property);
-  CFX_ByteStringC szFxPropName(*szPropName, szPropName.length());
+  ByteStringView szFxPropName(*szPropName, szPropName.length());
   auto lpThisValue = pdfium::MakeUnique<CFXJSE_Value>(info.GetIsolate());
   lpThisValue->ForceSetValue(thisObject);
   if (DynPropQueryAdapter(lpClass, lpThisValue.get(), szFxPropName)) {
@@ -248,7 +248,7 @@
   v8::Isolate* pIsolate = info.GetIsolate();
   v8::HandleScope scope(pIsolate);
   v8::String::Utf8Value szPropName(property);
-  CFX_ByteStringC szFxPropName(*szPropName, szPropName.length());
+  ByteStringView szFxPropName(*szPropName, szPropName.length());
   auto lpThisValue = pdfium::MakeUnique<CFXJSE_Value>(info.GetIsolate());
   lpThisValue->ForceSetValue(thisObject);
   info.GetReturnValue().Set(
@@ -262,7 +262,7 @@
   const FXJSE_CLASS_DESCRIPTOR* lpClass = static_cast<FXJSE_CLASS_DESCRIPTOR*>(
       info.Data().As<v8::External>()->Value());
   v8::String::Utf8Value szPropName(property);
-  CFX_ByteStringC szFxPropName(*szPropName, szPropName.length());
+  ByteStringView szFxPropName(*szPropName, szPropName.length());
   auto lpThisValue = pdfium::MakeUnique<CFXJSE_Value>(info.GetIsolate());
   lpThisValue->ForceSetValue(thisObject);
   auto lpNewValue = pdfium::MakeUnique<CFXJSE_Value>(info.GetIsolate());
@@ -279,7 +279,7 @@
   const FXJSE_CLASS_DESCRIPTOR* lpClass = static_cast<FXJSE_CLASS_DESCRIPTOR*>(
       info.Data().As<v8::External>()->Value());
   v8::String::Utf8Value szPropName(property);
-  CFX_ByteStringC szFxPropName(*szPropName, szPropName.length());
+  ByteStringView szFxPropName(*szPropName, szPropName.length());
   auto lpThisValue = pdfium::MakeUnique<CFXJSE_Value>(info.GetIsolate());
   lpThisValue->ForceSetValue(thisObject);
 
diff --git a/fxjs/cfxjse_class.h b/fxjs/cfxjse_class.h
index c3a5c84..01becfc 100644
--- a/fxjs/cfxjse_class.h
+++ b/fxjs/cfxjse_class.h
@@ -32,7 +32,7 @@
   v8::Global<v8::FunctionTemplate>& GetTemplate() { return m_hTemplate; }
 
  protected:
-  CFX_ByteString m_szClassName;
+  ByteString m_szClassName;
   CFX_UnownedPtr<const FXJSE_CLASS_DESCRIPTOR> m_lpClassDefinition;
   CFX_UnownedPtr<CFXJSE_Context> m_pContext;
   v8::Global<v8::FunctionTemplate> m_hTemplate;
diff --git a/fxjs/cfxjse_context.cpp b/fxjs/cfxjse_context.cpp
index 87ec30f..bef7597 100644
--- a/fxjs/cfxjse_context.cpp
+++ b/fxjs/cfxjse_context.cpp
@@ -213,7 +213,7 @@
 }
 
 CFXJSE_Class* CFXJSE_Context::GetClassByName(
-    const CFX_ByteStringC& szName) const {
+    const ByteStringView& szName) const {
   auto pClass =
       std::find_if(m_rgClasses.begin(), m_rgClasses.end(),
                    [szName](const std::unique_ptr<CFXJSE_Class>& item) {
diff --git a/fxjs/cfxjse_context.h b/fxjs/cfxjse_context.h
index c00b76b..8ed8760 100644
--- a/fxjs/cfxjse_context.h
+++ b/fxjs/cfxjse_context.h
@@ -31,7 +31,7 @@
   v8::Local<v8::Context> GetContext();
   std::unique_ptr<CFXJSE_Value> GetGlobalObject();
   void AddClass(std::unique_ptr<CFXJSE_Class> pClass);
-  CFXJSE_Class* GetClassByName(const CFX_ByteStringC& szName) const;
+  CFXJSE_Class* GetClassByName(const ByteStringView& szName) const;
   void EnableCompatibleMode();
   bool ExecuteScript(const char* szScript,
                      CFXJSE_Value* lpRetValue,
diff --git a/fxjs/cfxjse_value.cpp b/fxjs/cfxjse_value.cpp
index c2eaa40..93e568c 100644
--- a/fxjs/cfxjse_value.cpp
+++ b/fxjs/cfxjse_value.cpp
@@ -52,7 +52,7 @@
 
 }  // namespace
 
-void FXJSE_ThrowMessage(const CFX_ByteStringC& utf8Message) {
+void FXJSE_ThrowMessage(const ByteStringView& utf8Message) {
   v8::Isolate* pIsolate = v8::Isolate::GetCurrent();
   ASSERT(pIsolate);
 
@@ -126,7 +126,7 @@
   m_hValue.Reset(m_pIsolate, pValue);
 }
 
-bool CFXJSE_Value::SetObjectProperty(const CFX_ByteStringC& szPropName,
+bool CFXJSE_Value::SetObjectProperty(const ByteStringView& szPropName,
                                      CFXJSE_Value* lpPropValue) {
   ASSERT(lpPropValue);
   CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate);
@@ -144,7 +144,7 @@
       hPropValue);
 }
 
-bool CFXJSE_Value::GetObjectProperty(const CFX_ByteStringC& szPropName,
+bool CFXJSE_Value::GetObjectProperty(const ByteStringView& szPropName,
                                      CFXJSE_Value* lpPropValue) {
   ASSERT(lpPropValue);
   CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate);
@@ -187,7 +187,7 @@
   return true;
 }
 
-bool CFXJSE_Value::DeleteObjectProperty(const CFX_ByteStringC& szPropName) {
+bool CFXJSE_Value::DeleteObjectProperty(const ByteStringView& szPropName) {
   CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate);
   v8::Local<v8::Value> hObject =
       v8::Local<v8::Value>::New(m_pIsolate, m_hValue);
@@ -200,7 +200,7 @@
   return true;
 }
 
-bool CFXJSE_Value::HasObjectOwnProperty(const CFX_ByteStringC& szPropName,
+bool CFXJSE_Value::HasObjectOwnProperty(const ByteStringView& szPropName,
                                         bool bUseTypeGetter) {
   CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate);
   v8::Local<v8::Value> hObject =
@@ -218,7 +218,7 @@
               .FromMaybe(false));
 }
 
-bool CFXJSE_Value::SetObjectOwnProperty(const CFX_ByteStringC& szPropName,
+bool CFXJSE_Value::SetObjectOwnProperty(const ByteStringView& szPropName,
                                         CFXJSE_Value* lpPropValue) {
   ASSERT(lpPropValue);
   CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate);
@@ -463,13 +463,13 @@
   return static_cast<int32_t>(hValue->NumberValue());
 }
 
-CFX_ByteString CFXJSE_Value::ToString() const {
+ByteString CFXJSE_Value::ToString() const {
   ASSERT(!m_hValue.IsEmpty());
   CFXJSE_ScopeUtil_IsolateHandleRootContext scope(m_pIsolate);
   v8::Local<v8::Value> hValue = v8::Local<v8::Value>::New(m_pIsolate, m_hValue);
   v8::Local<v8::String> hString = hValue->ToString();
   v8::String::Utf8Value hStringVal(hString);
-  return CFX_ByteString(*hStringVal);
+  return ByteString(*hStringVal);
 }
 
 void CFXJSE_Value::SetUndefined() {
@@ -502,7 +502,7 @@
   m_hValue.Reset(m_pIsolate, hValue);
 }
 
-void CFXJSE_Value::SetString(const CFX_ByteStringC& szString) {
+void CFXJSE_Value::SetString(const ByteStringView& szString) {
   CFXJSE_ScopeUtil_IsolateHandle scope(m_pIsolate);
   v8::Local<v8::Value> hValue = v8::String::NewFromUtf8(
       m_pIsolate, reinterpret_cast<const char*>(szString.raw_str()),
diff --git a/fxjs/cfxjse_value.h b/fxjs/cfxjse_value.h
index 31b751d..f506857 100644
--- a/fxjs/cfxjse_value.h
+++ b/fxjs/cfxjse_value.h
@@ -38,9 +38,9 @@
   float ToFloat() const;
   double ToDouble() const;
   int32_t ToInteger() const;
-  CFX_ByteString ToString() const;
-  CFX_WideString ToWideString() const {
-    return CFX_WideString::FromUTF8(ToString().AsStringC());
+  ByteString ToString() const;
+  WideString ToWideString() const {
+    return WideString::FromUTF8(ToString().AsStringView());
   }
   CFXJSE_HostObject* ToHostObject(CFXJSE_Class* lpClass) const;
 
@@ -49,7 +49,7 @@
   void SetBoolean(bool bBoolean);
   void SetInteger(int32_t nInteger);
   void SetDouble(double dDouble);
-  void SetString(const CFX_ByteStringC& szString);
+  void SetString(const ByteStringView& szString);
   void SetFloat(float fFloat);
   void SetJSObject();
 
@@ -58,16 +58,16 @@
   void SetArray(const std::vector<std::unique_ptr<CFXJSE_Value>>& values);
   void SetDate(double dDouble);
 
-  bool GetObjectProperty(const CFX_ByteStringC& szPropName,
+  bool GetObjectProperty(const ByteStringView& szPropName,
                          CFXJSE_Value* lpPropValue);
-  bool SetObjectProperty(const CFX_ByteStringC& szPropName,
+  bool SetObjectProperty(const ByteStringView& szPropName,
                          CFXJSE_Value* lpPropValue);
   bool GetObjectPropertyByIdx(uint32_t uPropIdx, CFXJSE_Value* lpPropValue);
   bool SetObjectProperty(uint32_t uPropIdx, CFXJSE_Value* lpPropValue);
-  bool DeleteObjectProperty(const CFX_ByteStringC& szPropName);
-  bool HasObjectOwnProperty(const CFX_ByteStringC& szPropName,
+  bool DeleteObjectProperty(const ByteStringView& szPropName);
+  bool HasObjectOwnProperty(const ByteStringView& szPropName,
                             bool bUseTypeGetter);
-  bool SetObjectOwnProperty(const CFX_ByteStringC& szPropName,
+  bool SetObjectOwnProperty(const ByteStringView& szPropName,
                             CFXJSE_Value* lpPropValue);
   bool SetFunctionBind(CFXJSE_Value* lpOldFunction, CFXJSE_Value* lpNewThis);
   bool Call(CFXJSE_Value* lpReceiver,
diff --git a/fxjs/fxjs_v8.cpp b/fxjs/fxjs_v8.cpp
index 219ad51..4c63988 100644
--- a/fxjs/fxjs_v8.cpp
+++ b/fxjs/fxjs_v8.cpp
@@ -460,12 +460,12 @@
   m_isolate->SetData(g_embedderDataSlot, nullptr);
 }
 
-int CFXJS_Engine::Execute(const CFX_WideString& script, FXJSErr* pError) {
+int CFXJS_Engine::Execute(const WideString& script, FXJSErr* pError) {
   v8::Isolate::Scope isolate_scope(m_isolate);
   v8::TryCatch try_catch(m_isolate);
   v8::Local<v8::Context> context = m_isolate->GetCurrentContext();
   v8::Local<v8::Script> compiled_script;
-  if (!v8::Script::Compile(context, NewString(script.AsStringC()))
+  if (!v8::Script::Compile(context, NewString(script.AsStringView()))
            .ToLocal(&compiled_script)) {
     v8::String::Utf8Value error(try_catch.Exception());
     // TODO(tsepez): return error via pError->message.
@@ -527,8 +527,8 @@
   return context->Global()->GetPrototype()->ToObject(context).ToLocalChecked();
 }
 
-void CFXJS_Engine::Error(const CFX_WideString& message) {
-  m_isolate->ThrowException(NewString(message.AsStringC()));
+void CFXJS_Engine::Error(const WideString& message) {
+  m_isolate->ThrowException(NewString(message.AsStringView()));
 }
 
 void CFXJS_Engine::SetObjectPrivate(v8::Local<v8::Object> pObj, void* p) {
@@ -555,28 +555,28 @@
 
 v8::Local<v8::Value> CFXJS_Engine::GetObjectProperty(
     v8::Local<v8::Object> pObj,
-    const CFX_WideString& wsPropertyName) {
+    const WideString& wsPropertyName) {
   if (pObj.IsEmpty())
     return v8::Local<v8::Value>();
   v8::Local<v8::Value> val;
   if (!pObj->Get(m_isolate->GetCurrentContext(),
-                 NewString(wsPropertyName.AsStringC()))
+                 NewString(wsPropertyName.AsStringView()))
            .ToLocal(&val))
     return v8::Local<v8::Value>();
   return val;
 }
 
-std::vector<CFX_WideString> CFXJS_Engine::GetObjectPropertyNames(
+std::vector<WideString> CFXJS_Engine::GetObjectPropertyNames(
     v8::Local<v8::Object> pObj) {
   if (pObj.IsEmpty())
-    return std::vector<CFX_WideString>();
+    return std::vector<WideString>();
 
   v8::Local<v8::Array> val;
   v8::Local<v8::Context> context = m_isolate->GetCurrentContext();
   if (!pObj->GetPropertyNames(context).ToLocal(&val))
-    return std::vector<CFX_WideString>();
+    return std::vector<WideString>();
 
-  std::vector<CFX_WideString> result;
+  std::vector<WideString> result;
   for (uint32_t i = 0; i < val->Length(); ++i) {
     result.push_back(ToWideString(val->Get(context, i).ToLocalChecked()));
   }
@@ -585,12 +585,12 @@
 }
 
 void CFXJS_Engine::PutObjectProperty(v8::Local<v8::Object> pObj,
-                                     const CFX_WideString& wsPropertyName,
+                                     const WideString& wsPropertyName,
                                      v8::Local<v8::Value> pPut) {
   if (pObj.IsEmpty())
     return;
   pObj->Set(m_isolate->GetCurrentContext(),
-            NewString(wsPropertyName.AsStringC()), pPut)
+            NewString(wsPropertyName.AsStringView()), pPut)
       .FromJust();
 }
 
@@ -649,18 +649,18 @@
   return v8::Boolean::New(m_isolate, b);
 }
 
-v8::Local<v8::String> CFXJS_Engine::NewString(const CFX_ByteStringC& str) {
+v8::Local<v8::String> CFXJS_Engine::NewString(const ByteStringView& str) {
   v8::Isolate* pIsolate = m_isolate ? m_isolate : v8::Isolate::GetCurrent();
   return v8::String::NewFromUtf8(pIsolate, str.unterminated_c_str(),
                                  v8::NewStringType::kNormal, str.GetLength())
       .ToLocalChecked();
 }
 
-v8::Local<v8::String> CFXJS_Engine::NewString(const CFX_WideStringC& str) {
+v8::Local<v8::String> CFXJS_Engine::NewString(const WideStringView& str) {
   // Conversion from pdfium's wchar_t wide-strings to v8's uint16_t
   // wide-strings isn't handled by v8, so use UTF8 as a common
   // intermediate format.
-  return NewString(FX_UTF8Encode(str).AsStringC());
+  return NewString(FX_UTF8Encode(str).AsStringView());
 }
 
 v8::Local<v8::Value> CFXJS_Engine::NewNull() {
@@ -703,15 +703,15 @@
   return maybe_number.ToLocalChecked()->Value();
 }
 
-CFX_WideString CFXJS_Engine::ToWideString(v8::Local<v8::Value> pValue) {
+WideString CFXJS_Engine::ToWideString(v8::Local<v8::Value> pValue) {
   if (pValue.IsEmpty())
-    return CFX_WideString();
+    return WideString();
   v8::Local<v8::Context> context = m_isolate->GetCurrentContext();
   v8::MaybeLocal<v8::String> maybe_string = pValue->ToString(context);
   if (maybe_string.IsEmpty())
-    return CFX_WideString();
+    return WideString();
   v8::String::Utf8Value s(maybe_string.ToLocalChecked());
-  return CFX_WideString::FromUTF8(CFX_ByteStringC(*s, s.length()));
+  return WideString::FromUTF8(ByteStringView(*s, s.length()));
 }
 
 v8::Local<v8::Object> CFXJS_Engine::ToObject(v8::Local<v8::Value> pValue) {
@@ -728,11 +728,11 @@
   return v8::Local<v8::Array>::Cast(pValue->ToObject(context).ToLocalChecked());
 }
 
-void CFXJS_Engine::SetConstArray(const CFX_WideString& name,
+void CFXJS_Engine::SetConstArray(const WideString& name,
                                  v8::Local<v8::Array> array) {
   m_ConstArrays[name] = v8::Global<v8::Array>(GetIsolate(), array);
 }
 
-v8::Local<v8::Array> CFXJS_Engine::GetConstArray(const CFX_WideString& name) {
+v8::Local<v8::Array> CFXJS_Engine::GetConstArray(const WideString& name) {
   return v8::Local<v8::Array>::New(GetIsolate(), m_ConstArrays[name]);
 }
diff --git a/fxjs/fxjs_v8.h b/fxjs/fxjs_v8.h
index cdec942..457843f 100644
--- a/fxjs/fxjs_v8.h
+++ b/fxjs/fxjs_v8.h
@@ -174,7 +174,7 @@
   void ReleaseEngine();
 
   // Called after FXJS_InitializeEngine call made.
-  int Execute(const CFX_WideString& script, FXJSErr* perror);
+  int Execute(const WideString& script, FXJSErr* perror);
 
   v8::Local<v8::Context> NewLocalContext();
   v8::Local<v8::Context> GetPersistentContext();
@@ -186,15 +186,15 @@
   v8::Local<v8::Number> NewNumber(double number);
   v8::Local<v8::Number> NewNumber(float number);
   v8::Local<v8::Boolean> NewBoolean(bool b);
-  v8::Local<v8::String> NewString(const CFX_ByteStringC& str);
-  v8::Local<v8::String> NewString(const CFX_WideStringC& str);
+  v8::Local<v8::String> NewString(const ByteStringView& str);
+  v8::Local<v8::String> NewString(const WideStringView& str);
   v8::Local<v8::Date> NewDate(double d);
   v8::Local<v8::Object> NewFxDynamicObj(int nObjDefnID, bool bStatic = false);
 
   int ToInt32(v8::Local<v8::Value> pValue);
   bool ToBoolean(v8::Local<v8::Value> pValue);
   double ToDouble(v8::Local<v8::Value> pValue);
-  CFX_WideString ToWideString(v8::Local<v8::Value> pValue);
+  WideString ToWideString(v8::Local<v8::Value> pValue);
   v8::Local<v8::Object> ToObject(v8::Local<v8::Value> pValue);
   v8::Local<v8::Array> ToArray(v8::Local<v8::Value> pValue);
 
@@ -207,12 +207,11 @@
                            v8::Local<v8::Value> pValue);
 
   // Objects.
-  std::vector<CFX_WideString> GetObjectPropertyNames(
-      v8::Local<v8::Object> pObj);
+  std::vector<WideString> GetObjectPropertyNames(v8::Local<v8::Object> pObj);
   v8::Local<v8::Value> GetObjectProperty(v8::Local<v8::Object> pObj,
-                                         const CFX_WideString& PropertyName);
+                                         const WideString& PropertyName);
   void PutObjectProperty(v8::Local<v8::Object> pObj,
-                         const CFX_WideString& PropertyName,
+                         const WideString& PropertyName,
                          v8::Local<v8::Value> pValue);
 
   // Native object binding.
@@ -221,10 +220,10 @@
   static void FreeObjectPrivate(void* p);
   static void FreeObjectPrivate(v8::Local<v8::Object> pObj);
 
-  void SetConstArray(const CFX_WideString& name, v8::Local<v8::Array> array);
-  v8::Local<v8::Array> GetConstArray(const CFX_WideString& name);
+  void SetConstArray(const WideString& name, v8::Local<v8::Array> array);
+  v8::Local<v8::Array> GetConstArray(const WideString& name);
 
-  void Error(const CFX_WideString& message);
+  void Error(const WideString& message);
 
  protected:
   CFXJS_Engine();
@@ -235,7 +234,7 @@
   v8::Isolate* m_isolate;
   v8::Global<v8::Context> m_V8PersistentContext;
   std::vector<v8::Global<v8::Object>*> m_StaticObjects;
-  std::map<CFX_WideString, v8::Global<v8::Array>> m_ConstArrays;
+  std::map<WideString, v8::Global<v8::Array>> m_ConstArrays;
 };
 
 #endif  // FXJS_FXJS_V8_H_
diff --git a/fxjs/fxjs_v8_embeddertest.cpp b/fxjs/fxjs_v8_embeddertest.cpp
index 5a8ee63..53fe8f2 100644
--- a/fxjs/fxjs_v8_embeddertest.cpp
+++ b/fxjs/fxjs_v8_embeddertest.cpp
@@ -19,7 +19,7 @@
 
 class FXJSV8EmbedderTest : public JSEmbedderTest {
  public:
-  void ExecuteInCurrentContext(const CFX_WideString& script) {
+  void ExecuteInCurrentContext(const WideString& script) {
     FXJSErr error;
     int sts = engine()->Execute(script, &error);
     EXPECT_EQ(0, sts);
@@ -37,7 +37,7 @@
   v8::HandleScope handle_scope(isolate());
   v8::Context::Scope context_scope(GetV8Context());
 
-  ExecuteInCurrentContext(CFX_WideString(kScript1));
+  ExecuteInCurrentContext(WideString(kScript1));
   CheckAssignmentInCurrentContext(kExpected1);
 }
 
@@ -52,13 +52,13 @@
   engine2.InitializeEngine();
 
   v8::Context::Scope context_scope(GetV8Context());
-  ExecuteInCurrentContext(CFX_WideString(kScript0));
+  ExecuteInCurrentContext(WideString(kScript0));
   CheckAssignmentInCurrentContext(kExpected0);
 
   {
     v8::Local<v8::Context> context1 = engine1.NewLocalContext();
     v8::Context::Scope context_scope1(context1);
-    ExecuteInCurrentContext(CFX_WideString(kScript1));
+    ExecuteInCurrentContext(WideString(kScript1));
     CheckAssignmentInCurrentContext(kExpected1);
   }
 
@@ -67,7 +67,7 @@
   {
     v8::Local<v8::Context> context2 = engine2.NewLocalContext();
     v8::Context::Scope context_scope2(context2);
-    ExecuteInCurrentContext(CFX_WideString(kScript2));
+    ExecuteInCurrentContext(WideString(kScript2));
     CheckAssignmentInCurrentContext(kExpected2);
   }
 
diff --git a/fxjs/fxjse.h b/fxjs/fxjse.h
index 8fc514b..4864813 100644
--- a/fxjs/fxjse.h
+++ b/fxjs/fxjse.h
@@ -31,16 +31,16 @@
 };
 
 typedef void (*FXJSE_FuncCallback)(CFXJSE_Value* pThis,
-                                   const CFX_ByteStringC& szFuncName,
+                                   const ByteStringView& szFuncName,
                                    CFXJSE_Arguments& args);
 typedef void (*FXJSE_PropAccessor)(CFXJSE_Value* pObject,
-                                   const CFX_ByteStringC& szPropName,
+                                   const ByteStringView& szPropName,
                                    CFXJSE_Value* pValue);
 typedef int32_t (*FXJSE_PropTypeGetter)(CFXJSE_Value* pObject,
-                                        const CFX_ByteStringC& szPropName,
+                                        const ByteStringView& szPropName,
                                         bool bQueryIn);
 typedef bool (*FXJSE_PropDeleter)(CFXJSE_Value* pObject,
-                                  const CFX_ByteStringC& szPropName);
+                                  const ByteStringView& szPropName);
 
 enum FXJSE_ClassPropTypes {
   FXJSE_ClassPropType_None,
@@ -79,6 +79,6 @@
 v8::Isolate* FXJSE_Runtime_Create_Own();
 void FXJSE_Runtime_Release(v8::Isolate* pIsolate);
 
-void FXJSE_ThrowMessage(const CFX_ByteStringC& utf8Message);
+void FXJSE_ThrowMessage(const ByteStringView& utf8Message);
 
 #endif  // FXJS_FXJSE_H_
diff --git a/testing/libfuzzer/pdf_cfx_barcode_fuzzer.cc b/testing/libfuzzer/pdf_cfx_barcode_fuzzer.cc
index e791102..3334e86 100644
--- a/testing/libfuzzer/pdf_cfx_barcode_fuzzer.cc
+++ b/testing/libfuzzer/pdf_cfx_barcode_fuzzer.cc
@@ -27,8 +27,8 @@
   barcode.SetHeight(298);
   barcode.SetWidth(418);
 
-  CFX_WideStringC content(reinterpret_cast<const wchar_t*>(data),
-                          size / sizeof(wchar_t));
+  WideStringView content(reinterpret_cast<const wchar_t*>(data),
+                         size / sizeof(wchar_t));
 
   if (!barcode.Encode(content))
     return 0;
diff --git a/testing/libfuzzer/pdf_css_fuzzer.cc b/testing/libfuzzer/pdf_css_fuzzer.cc
index 36b2942..74745a2 100644
--- a/testing/libfuzzer/pdf_css_fuzzer.cc
+++ b/testing/libfuzzer/pdf_css_fuzzer.cc
@@ -11,8 +11,8 @@
 #include "core/fxcrt/fx_string.h"
 
 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
-  CFX_WideString input = CFX_WideString::FromUTF8(
-      CFX_ByteStringC(data, static_cast<FX_STRSIZE>(size)));
+  WideString input =
+      WideString::FromUTF8(ByteStringView(data, static_cast<FX_STRSIZE>(size)));
 
   // If we convert the input into an empty string bail out.
   if (input.GetLength() == 0)
diff --git a/testing/libfuzzer/pdf_fm2js_fuzzer.cc b/testing/libfuzzer/pdf_fm2js_fuzzer.cc
index de56106..438d102 100644
--- a/testing/libfuzzer/pdf_fm2js_fuzzer.cc
+++ b/testing/libfuzzer/pdf_fm2js_fuzzer.cc
@@ -16,8 +16,8 @@
     return 0;
 
   CFX_WideTextBuf js;
-  CFX_WideString input =
-      CFX_WideString::FromUTF8(CFX_ByteStringC(data, safe_size.ValueOrDie()));
-  CXFA_FM2JSContext::Translate(input.AsStringC(), &js);
+  WideString input =
+      WideString::FromUTF8(ByteStringView(data, safe_size.ValueOrDie()));
+  CXFA_FM2JSContext::Translate(input.AsStringView(), &js);
   return 0;
 }
diff --git a/testing/test_support.cpp b/testing/test_support.cpp
index 0ebb747..b32ec7d 100644
--- a/testing/test_support.cpp
+++ b/testing/test_support.cpp
@@ -105,8 +105,8 @@
 }
 
 std::string GetPlatformString(FPDF_WIDESTRING wstr) {
-  CFX_WideString wide_string =
-      CFX_WideString::FromUTF16LE(wstr, CFX_WideString::WStringLength(wstr));
+  WideString wide_string =
+      WideString::FromUTF16LE(wstr, WideString::WStringLength(wstr));
   return std::string(wide_string.UTF8Encode().c_str());
 }
 
diff --git a/testing/xfa_js_embedder_test.cpp b/testing/xfa_js_embedder_test.cpp
index a11806f..3aee49c 100644
--- a/testing/xfa_js_embedder_test.cpp
+++ b/testing/xfa_js_embedder_test.cpp
@@ -52,7 +52,7 @@
   return true;
 }
 
-bool XFAJSEmbedderTest::Execute(const CFX_ByteStringC& input) {
+bool XFAJSEmbedderTest::Execute(const ByteStringView& input) {
   if (ExecuteHelper(input)) {
     return true;
   }
@@ -68,13 +68,13 @@
   return false;
 }
 
-bool XFAJSEmbedderTest::ExecuteSilenceFailure(const CFX_ByteStringC& input) {
+bool XFAJSEmbedderTest::ExecuteSilenceFailure(const ByteStringView& input) {
   return ExecuteHelper(input);
 }
 
-bool XFAJSEmbedderTest::ExecuteHelper(const CFX_ByteStringC& input) {
+bool XFAJSEmbedderTest::ExecuteHelper(const ByteStringView& input) {
   value_ = pdfium::MakeUnique<CFXJSE_Value>(GetIsolate());
   return script_context_->RunScript(XFA_SCRIPTLANGTYPE_Formcalc,
-                                    CFX_WideString::FromUTF8(input).AsStringC(),
+                                    WideString::FromUTF8(input).AsStringView(),
                                     value_.get(), GetXFADocument()->GetRoot());
 }
diff --git a/testing/xfa_js_embedder_test.h b/testing/xfa_js_embedder_test.h
index 1dc06f0..362db47 100644
--- a/testing/xfa_js_embedder_test.h
+++ b/testing/xfa_js_embedder_test.h
@@ -32,8 +32,8 @@
   v8::Isolate* GetIsolate() const { return isolate_; }
   CXFA_Document* GetXFADocument();
 
-  bool Execute(const CFX_ByteStringC& input);
-  bool ExecuteSilenceFailure(const CFX_ByteStringC& input);
+  bool Execute(const ByteStringView& input);
+  bool ExecuteSilenceFailure(const ByteStringView& input);
 
   CFXJSE_Value* GetValue() const { return value_.get(); }
 
@@ -43,7 +43,7 @@
   v8::Isolate* isolate_;
   CXFA_ScriptContext* script_context_;
 
-  bool ExecuteHelper(const CFX_ByteStringC& input);
+  bool ExecuteHelper(const ByteStringView& input);
 };
 
 #endif  // TESTING_XFA_JS_EMBEDDER_TEST_H_
diff --git a/xfa/fde/cfde_texteditengine.cpp b/xfa/fde/cfde_texteditengine.cpp
index 9fc7990..999380b 100644
--- a/xfa/fde/cfde_texteditengine.cpp
+++ b/xfa/fde/cfde_texteditengine.cpp
@@ -38,7 +38,7 @@
  public:
   InsertOperation(CFDE_TextEditEngine* engine,
                   size_t start_idx,
-                  const CFX_WideString& added_text)
+                  const WideString& added_text)
       : engine_(engine), start_idx_(start_idx), added_text_(added_text) {}
 
   ~InsertOperation() override {}
@@ -56,14 +56,14 @@
  private:
   CFX_UnownedPtr<CFDE_TextEditEngine> engine_;
   size_t start_idx_;
-  CFX_WideString added_text_;
+  WideString added_text_;
 };
 
 class DeleteOperation : public CFDE_TextEditEngine::Operation {
  public:
   DeleteOperation(CFDE_TextEditEngine* engine,
                   size_t start_idx,
-                  const CFX_WideString& removed_text)
+                  const WideString& removed_text)
       : engine_(engine), start_idx_(start_idx), removed_text_(removed_text) {}
 
   ~DeleteOperation() override {}
@@ -81,15 +81,15 @@
  private:
   CFX_UnownedPtr<CFDE_TextEditEngine> engine_;
   size_t start_idx_;
-  CFX_WideString removed_text_;
+  WideString removed_text_;
 };
 
 class ReplaceOperation : public CFDE_TextEditEngine::Operation {
  public:
   ReplaceOperation(CFDE_TextEditEngine* engine,
                    size_t start_idx,
-                   const CFX_WideString& removed_text,
-                   const CFX_WideString& added_text)
+                   const WideString& removed_text,
+                   const WideString& added_text)
       : insert_op_(engine, start_idx, added_text),
         delete_op_(engine, start_idx, removed_text) {}
 
@@ -195,7 +195,7 @@
 }
 
 void CFDE_TextEditEngine::AdjustGap(size_t idx, size_t length) {
-  static const size_t char_size = sizeof(CFX_WideString::CharType);
+  static const size_t char_size = sizeof(WideString::CharType);
 
   // Move the gap, if necessary.
   if (idx < gap_position_) {
@@ -222,7 +222,7 @@
   }
 }
 
-size_t CFDE_TextEditEngine::CountCharsExceedingSize(const CFX_WideString& text,
+size_t CFDE_TextEditEngine::CountCharsExceedingSize(const WideString& text,
                                                     size_t num_to_check) {
   if (!limit_horizontal_area_ && !limit_vertical_area_)
     return 0;
@@ -245,7 +245,7 @@
   text_out->SetStyles(style);
 
   size_t length = text.GetLength();
-  CFX_WideStringC temp(text.c_str(), length);
+  WideStringView temp(text.c_str(), length);
 
   float vertical_height = line_spacing_ * visible_line_count_;
   size_t chars_exceeding_size = 0;
@@ -253,7 +253,7 @@
   for (size_t i = 0; i < num_to_check; i++) {
     // This does a lot of string copying ....
     // TODO(dsinclair): make CalcLogicSize take a WideStringC instead.
-    text_out->CalcLogicSize(CFX_WideString(temp), text_rect);
+    text_out->CalcLogicSize(WideString(temp), text_rect);
 
     if (limit_horizontal_area_ && text_rect.width <= available_width_)
       break;
@@ -269,7 +269,7 @@
 }
 
 void CFDE_TextEditEngine::Insert(size_t idx,
-                                 const CFX_WideString& text,
+                                 const WideString& text,
                                  RecordOperation add_operation) {
   if (idx > text_length_)
     idx = text_length_;
@@ -289,15 +289,15 @@
   AdjustGap(idx, length);
 
   if (validation_enabled_ || limit_horizontal_area_ || limit_vertical_area_) {
-    CFX_WideString str;
+    WideString str;
     if (gap_position_ > 0)
-      str += CFX_WideStringC(content_.data(), gap_position_);
+      str += WideStringView(content_.data(), gap_position_);
 
     str += text;
 
     if (text_length_ - gap_position_ > 0) {
-      str += CFX_WideStringC(content_.data() + gap_position_ + gap_size_,
-                             text_length_ - gap_position_);
+      str += WideStringView(content_.data() + gap_position_ + gap_size_,
+                            text_length_ - gap_position_);
     }
 
     if (validation_enabled_ && delegate_ && !delegate_->OnValidate(str)) {
@@ -328,12 +328,12 @@
         pdfium::MakeUnique<InsertOperation>(this, gap_position_, text));
   }
 
-  CFX_WideString previous_text;
+  WideString previous_text;
   if (delegate_)
     previous_text = GetText();
 
   // Copy the new text into the gap.
-  static const size_t char_size = sizeof(CFX_WideString::CharType);
+  static const size_t char_size = sizeof(WideString::CharType);
   memcpy(content_.data() + gap_position_, text.c_str(), length * char_size);
   gap_position_ += length;
   gap_size_ -= length;
@@ -623,32 +623,32 @@
   selection_.end_idx = end_idx;
 }
 
-CFX_WideString CFDE_TextEditEngine::GetSelectedText() const {
+WideString CFDE_TextEditEngine::GetSelectedText() const {
   if (!has_selection_)
     return L"";
 
-  CFX_WideString text;
+  WideString text;
   if (selection_.start_idx < gap_position_) {
     if (selection_.end_idx < gap_position_) {
-      text += CFX_WideStringC(content_.data() + selection_.start_idx,
-                              selection_.end_idx - selection_.start_idx + 1);
+      text += WideStringView(content_.data() + selection_.start_idx,
+                             selection_.end_idx - selection_.start_idx + 1);
       return text;
     }
 
-    text += CFX_WideStringC(content_.data() + selection_.start_idx,
-                            gap_position_ - selection_.start_idx);
-    text += CFX_WideStringC(
+    text += WideStringView(content_.data() + selection_.start_idx,
+                           gap_position_ - selection_.start_idx);
+    text += WideStringView(
         content_.data() + gap_position_ + gap_size_,
         selection_.end_idx - (gap_position_ - selection_.start_idx) + 1);
     return text;
   }
 
-  text += CFX_WideStringC(content_.data() + gap_size_ + selection_.start_idx,
-                          selection_.end_idx - selection_.start_idx + 1);
+  text += WideStringView(content_.data() + gap_size_ + selection_.start_idx,
+                         selection_.end_idx - selection_.start_idx + 1);
   return text;
 }
 
-CFX_WideString CFDE_TextEditEngine::DeleteSelectedText(
+WideString CFDE_TextEditEngine::DeleteSelectedText(
     RecordOperation add_operation) {
   if (!has_selection_)
     return L"";
@@ -657,24 +657,24 @@
                 selection_.end_idx - selection_.start_idx + 1, add_operation);
 }
 
-CFX_WideString CFDE_TextEditEngine::Delete(size_t start_idx,
-                                           size_t length,
-                                           RecordOperation add_operation) {
+WideString CFDE_TextEditEngine::Delete(size_t start_idx,
+                                       size_t length,
+                                       RecordOperation add_operation) {
   if (start_idx >= text_length_)
     return L"";
 
   length = std::min(length, text_length_ - start_idx);
   AdjustGap(start_idx + length, 0);
 
-  CFX_WideString ret;
-  ret += CFX_WideStringC(content_.data() + start_idx, length);
+  WideString ret;
+  ret += WideStringView(content_.data() + start_idx, length);
 
   if (add_operation == RecordOperation::kInsertRecord) {
     AddOperationRecord(
         pdfium::MakeUnique<DeleteOperation>(this, start_idx, ret));
   }
 
-  CFX_WideString previous_text = GetText();
+  WideString previous_text = GetText();
 
   gap_position_ = start_idx;
   gap_size_ += length;
@@ -688,23 +688,23 @@
   return ret;
 }
 
-void CFDE_TextEditEngine::ReplaceSelectedText(const CFX_WideString& rep) {
+void CFDE_TextEditEngine::ReplaceSelectedText(const WideString& rep) {
   size_t start_idx = selection_.start_idx;
 
-  CFX_WideString txt = DeleteSelectedText(RecordOperation::kSkipRecord);
+  WideString txt = DeleteSelectedText(RecordOperation::kSkipRecord);
   Insert(gap_position_, rep, RecordOperation::kSkipRecord);
 
   AddOperationRecord(
       pdfium::MakeUnique<ReplaceOperation>(this, start_idx, txt, rep));
 }
 
-CFX_WideString CFDE_TextEditEngine::GetText() const {
-  CFX_WideString str;
+WideString CFDE_TextEditEngine::GetText() const {
+  WideString str;
   if (gap_position_ > 0)
-    str += CFX_WideStringC(content_.data(), gap_position_);
+    str += WideStringView(content_.data(), gap_position_);
   if (text_length_ - gap_position_ > 0) {
-    str += CFX_WideStringC(content_.data() + gap_position_ + gap_size_,
-                           text_length_ - gap_position_);
+    str += WideStringView(content_.data() + gap_position_ + gap_size_,
+                          text_length_ - gap_position_);
   }
   return str;
 }
diff --git a/xfa/fde/cfde_texteditengine.h b/xfa/fde/cfde_texteditengine.h
index aa8a243..750b62a 100644
--- a/xfa/fde/cfde_texteditengine.h
+++ b/xfa/fde/cfde_texteditengine.h
@@ -66,9 +66,9 @@
     virtual ~Delegate() = default;
     virtual void NotifyTextFull() = 0;
     virtual void OnCaretChanged() = 0;
-    virtual void OnTextChanged(const CFX_WideString& prevText) = 0;
+    virtual void OnTextChanged(const WideString& prevText) = 0;
     virtual void OnSelChanged() = 0;
-    virtual bool OnValidate(const CFX_WideString& wsText) = 0;
+    virtual bool OnValidate(const WideString& wsText) = 0;
     virtual void SetScrollOffset(float fScrollOffset) = 0;
   };
 
@@ -84,13 +84,13 @@
   void Clear();
 
   void Insert(size_t idx,
-              const CFX_WideString& text,
+              const WideString& text,
               RecordOperation add_operation = RecordOperation::kInsertRecord);
-  CFX_WideString Delete(
+  WideString Delete(
       size_t start_idx,
       size_t length,
       RecordOperation add_operation = RecordOperation::kInsertRecord);
-  CFX_WideString GetText() const;
+  WideString GetText() const;
   size_t GetLength() const;
 
   // Non-const so we can force a layout.
@@ -147,10 +147,10 @@
   std::pair<size_t, size_t> GetSelection() const {
     return {selection_.start_idx, selection_.end_idx};
   }
-  CFX_WideString GetSelectedText() const;
-  CFX_WideString DeleteSelectedText(
+  WideString GetSelectedText() const;
+  WideString DeleteSelectedText(
       RecordOperation add_operation = RecordOperation::kInsertRecord);
-  void ReplaceSelectedText(const CFX_WideString& str);
+  void ReplaceSelectedText(const WideString& str);
 
   void Layout();
 
@@ -183,8 +183,7 @@
   void SetCombTextWidth();
   void AdjustGap(size_t idx, size_t length);
   void RebuildPieces();
-  size_t CountCharsExceedingSize(const CFX_WideString& str,
-                                 size_t num_to_check);
+  size_t CountCharsExceedingSize(const WideString& str, size_t num_to_check);
   void AddOperationRecord(std::unique_ptr<Operation> op);
 
   bool IsAlignedRight() const {
@@ -210,7 +209,7 @@
   FX_ARGB font_color_;
   float font_size_;
   float line_spacing_;
-  std::vector<CFX_WideString::CharType> content_;
+  std::vector<WideString::CharType> content_;
   size_t text_length_;
   size_t gap_position_;
   size_t gap_size_;
diff --git a/xfa/fde/cfde_texteditengine_unittest.cpp b/xfa/fde/cfde_texteditengine_unittest.cpp
index 2084914..48ed647 100644
--- a/xfa/fde/cfde_texteditengine_unittest.cpp
+++ b/xfa/fde/cfde_texteditengine_unittest.cpp
@@ -20,9 +20,9 @@
     void NotifyTextFull() override { text_is_full = true; }
 
     void OnCaretChanged() override {}
-    void OnTextChanged(const CFX_WideString& prevText) override {}
+    void OnTextChanged(const WideString& prevText) override {}
     void OnSelChanged() override {}
-    bool OnValidate(const CFX_WideString& wsText) override {
+    bool OnValidate(const WideString& wsText) override {
       return !fail_validation;
     }
     void SetScrollOffset(float fScrollOffset) override {}
diff --git a/xfa/fde/cfde_textout.cpp b/xfa/fde/cfde_textout.cpp
index 7ccc968..3cf4ed3 100644
--- a/xfa/fde/cfde_textout.cpp
+++ b/xfa/fde/cfde_textout.cpp
@@ -191,13 +191,13 @@
   m_pTxtBreak->SetLineBreakTolerance(m_fTolerance);
 }
 
-void CFDE_TextOut::CalcLogicSize(const CFX_WideString& str, CFX_SizeF& size) {
+void CFDE_TextOut::CalcLogicSize(const WideString& str, CFX_SizeF& size) {
   CFX_RectF rtText(0.0f, 0.0f, size.width, size.height);
   CalcLogicSize(str, rtText);
   size = rtText.Size();
 }
 
-void CFDE_TextOut::CalcLogicSize(const CFX_WideString& str, CFX_RectF& rect) {
+void CFDE_TextOut::CalcLogicSize(const WideString& str, CFX_RectF& rect) {
   if (str.IsEmpty()) {
     rect.width = 0.0f;
     rect.height = 0.0f;
@@ -278,7 +278,7 @@
 }
 
 void CFDE_TextOut::DrawLogicText(CFX_RenderDevice* device,
-                                 const CFX_WideStringC& str,
+                                 const WideStringView& str,
                                  const CFX_RectF& rect) {
   ASSERT(m_pFont && m_fFontSize >= 1.0f);
 
@@ -292,7 +292,7 @@
   m_ttoLines.clear();
   m_wsText.clear();
 
-  LoadText(CFX_WideString(str), rect);
+  LoadText(WideString(str), rect);
   Reload(rect);
   DoAlignment(rect);
 
@@ -321,7 +321,7 @@
   device->RestoreState(false);
 }
 
-void CFDE_TextOut::LoadText(const CFX_WideString& str, const CFX_RectF& rect) {
+void CFDE_TextOut::LoadText(const WideString& str, const CFX_RectF& rect) {
   ASSERT(!str.IsEmpty());
 
   m_wsText = str;
diff --git a/xfa/fde/cfde_textout.h b/xfa/fde/cfde_textout.h
index 89c8eac..b936eb4 100644
--- a/xfa/fde/cfde_textout.h
+++ b/xfa/fde/cfde_textout.h
@@ -95,10 +95,10 @@
   void SetMatrix(const CFX_Matrix& matrix) { m_Matrix = matrix; }
   void SetLineBreakTolerance(float fTolerance);
 
-  void CalcLogicSize(const CFX_WideString& str, CFX_SizeF& size);
-  void CalcLogicSize(const CFX_WideString& str, CFX_RectF& rect);
+  void CalcLogicSize(const WideString& str, CFX_SizeF& size);
+  void CalcLogicSize(const WideString& str, CFX_RectF& rect);
   void DrawLogicText(CFX_RenderDevice* device,
-                     const CFX_WideStringC& str,
+                     const WideStringView& str,
                      const CFX_RectF& rect);
   int32_t GetTotalLines() const { return m_iTotalLines; }
 
@@ -107,7 +107,7 @@
                          float& fStartPos,
                          float& fWidth,
                          float& fHeight);
-  void LoadText(const CFX_WideString& str, const CFX_RectF& rect);
+  void LoadText(const WideString& str, const CFX_RectF& rect);
 
   void Reload(const CFX_RectF& rect);
   void ReloadLinePiece(CFDE_TTOLine* pLine, const CFX_RectF& rect);
@@ -131,7 +131,7 @@
   std::vector<int32_t> m_CharWidths;
   FX_ARGB m_TxtColor;
   uint32_t m_dwTxtBkStyles;
-  CFX_WideString m_wsText;
+  WideString m_wsText;
   CFX_Matrix m_Matrix;
   std::deque<CFDE_TTOLine> m_ttoLines;
   int32_t m_iCurLine;
diff --git a/xfa/fgas/crt/cfgas_formatstring.cpp b/xfa/fgas/crt/cfgas_formatstring.cpp
index df95a35..87b0769 100644
--- a/xfa/fgas/crt/cfgas_formatstring.cpp
+++ b/xfa/fgas/crt/cfgas_formatstring.cpp
@@ -97,10 +97,10 @@
   return iKeyValue;
 }
 
-CFX_WideString GetLiteralText(const wchar_t* pStrPattern,
-                              int32_t* iPattern,
-                              int32_t iLenPattern) {
-  CFX_WideString wsOutput;
+WideString GetLiteralText(const wchar_t* pStrPattern,
+                          int32_t* iPattern,
+                          int32_t iLenPattern) {
+  WideString wsOutput;
   if (pStrPattern[*iPattern] != '\'')
     return wsOutput;
 
@@ -135,9 +135,9 @@
   return wsOutput;
 }
 
-CFX_WideString GetLiteralTextReverse(const wchar_t* pStrPattern,
-                                     int32_t* iPattern) {
-  CFX_WideString wsOutput;
+WideString GetLiteralTextReverse(const wchar_t* pStrPattern,
+                                 int32_t* iPattern) {
+  WideString wsOutput;
   if (pStrPattern[*iPattern] != '\'')
     return wsOutput;
 
@@ -173,8 +173,8 @@
   return wsOutput;
 }
 
-bool GetNumericDotIndex(const CFX_WideString& wsNum,
-                        const CFX_WideString& wsDotSymbol,
+bool GetNumericDotIndex(const WideString& wsNum,
+                        const WideString& wsDotSymbol,
                         int32_t* iDotIndex) {
   int32_t ccf = 0;
   int32_t iLenf = wsNum.GetLength();
@@ -221,8 +221,8 @@
   return true;
 }
 
-bool ParseLocaleDate(const CFX_WideString& wsDate,
-                     const CFX_WideString& wsDatePattern,
+bool ParseLocaleDate(const WideString& wsDate,
+                     const WideString& wsDatePattern,
                      IFX_Locale* pLocale,
                      CFX_DateTime* datetime,
                      int32_t* cc) {
@@ -234,10 +234,10 @@
   int32_t len = wsDate.GetLength();
   const wchar_t* strf = wsDatePattern.c_str();
   int32_t lenf = wsDatePattern.GetLength();
-  CFX_WideStringC wsDateSymbols(gs_wsDateSymbols);
+  WideStringView wsDateSymbols(gs_wsDateSymbols);
   while (*cc < len && ccf < lenf) {
     if (strf[ccf] == '\'') {
-      CFX_WideString wsLiteral = GetLiteralText(strf, &ccf, lenf);
+      WideString wsLiteral = GetLiteralText(strf, &ccf, lenf);
       int32_t iLiteralLen = wsLiteral.GetLength();
       if (*cc + iLiteralLen > len ||
           wcsncmp(str + *cc, wsLiteral.c_str(), iLiteralLen)) {
@@ -254,7 +254,7 @@
       continue;
     }
 
-    CFX_WideString symbol;
+    WideString symbol;
     symbol.Reserve(4);
     symbol += strf[ccf++];
     while (ccf < lenf && strf[ccf] == symbol[0])
@@ -273,7 +273,7 @@
         return false;
     } else if (symbol == L"MMM" || symbol == L"MMMM") {
       for (uint16_t i = 0; i < 12; i++) {
-        CFX_WideString wsMonthName = pLocale->GetMonthName(i, symbol == L"MMM");
+        WideString wsMonthName = pLocale->GetMonthName(i, symbol == L"MMM");
         if (wsMonthName.IsEmpty())
           continue;
         if (!wcsncmp(wsMonthName.c_str(), str + *cc, wsMonthName.GetLength())) {
@@ -284,7 +284,7 @@
       }
     } else if (symbol == L"EEE" || symbol == L"EEEE") {
       for (uint16_t i = 0; i < 7; i++) {
-        CFX_WideString wsDayName = pLocale->GetDayName(i, symbol == L"EEE");
+        WideString wsDayName = pLocale->GetDayName(i, symbol == L"EEE");
         if (wsDayName.IsEmpty())
           continue;
         if (!wcsncmp(wsDayName.c_str(), str + *cc, wsDayName.GetLength())) {
@@ -338,8 +338,8 @@
   *wMinute = iMinuteDiff % 60;
 }
 
-bool ParseLocaleTime(const CFX_WideString& wsTime,
-                     const CFX_WideString& wsTimePattern,
+bool ParseLocaleTime(const WideString& wsTime,
+                     const WideString& wsTimePattern,
                      IFX_Locale* pLocale,
                      CFX_DateTime* datetime,
                      int32_t* cc) {
@@ -354,10 +354,10 @@
   int lenf = wsTimePattern.GetLength();
   bool bHasA = false;
   bool bPM = false;
-  CFX_WideStringC wsTimeSymbols(gs_wsTimeSymbols);
+  WideStringView wsTimeSymbols(gs_wsTimeSymbols);
   while (*cc < len && ccf < lenf) {
     if (strf[ccf] == '\'') {
-      CFX_WideString wsLiteral = GetLiteralText(strf, &ccf, lenf);
+      WideString wsLiteral = GetLiteralText(strf, &ccf, lenf);
       int32_t iLiteralLen = wsLiteral.GetLength();
       if (*cc + iLiteralLen > len ||
           wcsncmp(str + *cc, wsLiteral.c_str(), iLiteralLen)) {
@@ -375,7 +375,7 @@
       continue;
     }
 
-    CFX_WideString symbol;
+    WideString symbol;
     symbol.Reserve(4);
     symbol += strf[ccf++];
     while (ccf < lenf && strf[ccf] == symbol[0])
@@ -415,16 +415,16 @@
       if (!ExtractCountDigits(str, len, 3, cc, &millisecond))
         return false;
     } else if (symbol == L"A") {
-      CFX_WideString wsAM = pLocale->GetMeridiemName(true);
-      CFX_WideString wsPM = pLocale->GetMeridiemName(false);
+      WideString wsAM = pLocale->GetMeridiemName(true);
+      WideString wsPM = pLocale->GetMeridiemName(false);
       if ((*cc + pdfium::base::checked_cast<int32_t>(wsAM.GetLength()) <=
            len) &&
-          (CFX_WideStringC(str + *cc, wsAM.GetLength()) == wsAM)) {
+          (WideStringView(str + *cc, wsAM.GetLength()) == wsAM)) {
         *cc += wsAM.GetLength();
         bHasA = true;
       } else if ((*cc + pdfium::base::checked_cast<int32_t>(wsPM.GetLength()) <=
                   len) &&
-                 (CFX_WideStringC(str + *cc, wsPM.GetLength()) == wsPM)) {
+                 (WideStringView(str + *cc, wsPM.GetLength()) == wsPM)) {
         *cc += wsPM.GetLength();
         bHasA = true;
         bPM = true;
@@ -433,7 +433,7 @@
       if (*cc + 3 > len)
         continue;
 
-      CFX_WideString tz(str[(*cc)++]);
+      WideString tz(str[(*cc)++]);
       tz += str[(*cc)++];
       tz += str[(*cc)++];
       if (tz == L"GMT") {
@@ -480,7 +480,7 @@
   return !!(*cc);
 }
 
-int32_t GetNumTrailingLimit(const CFX_WideString& wsFormat,
+int32_t GetNumTrailingLimit(const WideString& wsFormat,
                             int iDotPos,
                             bool* bTrimTailZeros) {
   if (iDotPos < 0)
@@ -553,23 +553,23 @@
   return week_index;
 }
 
-CFX_WideString NumToString(size_t fmt_size, int32_t value) {
-  CFX_WideString str;
+WideString NumToString(size_t fmt_size, int32_t value) {
+  WideString str;
   str.Format(fmt_size == 1 ? L"%d" : fmt_size == 2 ? L"%02d" : L"%03d", value);
   return str;
 }
 
-CFX_WideString DateFormat(const CFX_WideString& wsDatePattern,
-                          IFX_Locale* pLocale,
-                          const CFX_DateTime& datetime) {
-  CFX_WideString wsResult;
+WideString DateFormat(const WideString& wsDatePattern,
+                      IFX_Locale* pLocale,
+                      const CFX_DateTime& datetime) {
+  WideString wsResult;
   int32_t year = datetime.GetYear();
   uint8_t month = datetime.GetMonth();
   uint8_t day = datetime.GetDay();
   int32_t ccf = 0;
   const wchar_t* strf = wsDatePattern.c_str();
   int32_t lenf = wsDatePattern.GetLength();
-  CFX_WideStringC wsDateSymbols(gs_wsDateSymbols);
+  WideStringView wsDateSymbols(gs_wsDateSymbols);
   while (ccf < lenf) {
     if (strf[ccf] == '\'') {
       wsResult += GetLiteralText(strf, &ccf, lenf);
@@ -581,7 +581,7 @@
       continue;
     }
 
-    CFX_WideString symbol;
+    WideString symbol;
     symbol.Reserve(4);
     symbol += strf[ccf++];
     while (ccf < lenf && strf[ccf] == symbol[0])
@@ -621,10 +621,10 @@
   return wsResult;
 }
 
-CFX_WideString TimeFormat(const CFX_WideString& wsTimePattern,
-                          IFX_Locale* pLocale,
-                          const CFX_DateTime& datetime) {
-  CFX_WideString wsResult;
+WideString TimeFormat(const WideString& wsTimePattern,
+                      IFX_Locale* pLocale,
+                      const CFX_DateTime& datetime) {
+  WideString wsResult;
   uint8_t hour = datetime.GetHour();
   uint8_t minute = datetime.GetMinute();
   uint8_t second = datetime.GetSecond();
@@ -639,7 +639,7 @@
       bPM = true;
   }
 
-  CFX_WideStringC wsTimeSymbols(gs_wsTimeSymbols);
+  WideStringView wsTimeSymbols(gs_wsTimeSymbols);
   while (ccf < lenf) {
     if (strf[ccf] == '\'') {
       wsResult += GetLiteralText(strf, &ccf, lenf);
@@ -651,7 +651,7 @@
       continue;
     }
 
-    CFX_WideString symbol;
+    WideString symbol;
     symbol.Reserve(4);
     symbol += strf[ccf++];
     while (ccf < lenf && strf[ccf] == symbol[0])
@@ -685,7 +685,7 @@
       if (tz.tzHour != 0 || tz.tzMinute != 0) {
         wsResult += tz.tzHour < 0 ? L"-" : L"+";
 
-        CFX_WideString wsTimezone;
+        WideString wsTimezone;
         wsTimezone.Format(L"%02d:%02d", abs(tz.tzHour), tz.tzMinute);
         wsResult += wsTimezone;
       }
@@ -694,16 +694,16 @@
   return wsResult;
 }
 
-CFX_WideString FormatDateTimeInternal(const CFX_DateTime& dt,
-                                      const CFX_WideString& wsDatePattern,
-                                      const CFX_WideString& wsTimePattern,
-                                      bool bDateFirst,
-                                      IFX_Locale* pLocale) {
-  CFX_WideString wsDateOut;
+WideString FormatDateTimeInternal(const CFX_DateTime& dt,
+                                  const WideString& wsDatePattern,
+                                  const WideString& wsTimePattern,
+                                  bool bDateFirst,
+                                  IFX_Locale* pLocale) {
+  WideString wsDateOut;
   if (!wsDatePattern.IsEmpty())
     wsDateOut = DateFormat(wsDatePattern, pLocale, dt);
 
-  CFX_WideString wsTimeOut;
+  WideString wsTimeOut;
   if (!wsTimePattern.IsEmpty())
     wsTimeOut = TimeFormat(wsTimePattern, pLocale, dt);
 
@@ -712,8 +712,7 @@
 
 }  // namespace
 
-bool FX_DateFromCanonical(const CFX_WideString& wsDate,
-                          CFX_DateTime* datetime) {
+bool FX_DateFromCanonical(const WideString& wsDate, CFX_DateTime* datetime) {
   const wchar_t* str = wsDate.c_str();
   int len = wsDate.GetLength();
   if (len > 10)
@@ -762,7 +761,7 @@
   return true;
 }
 
-bool FX_TimeFromCanonical(const CFX_WideStringC& wsTime,
+bool FX_TimeFromCanonical(const WideStringView& wsTime,
                           CFX_DateTime* datetime,
                           IFX_Locale* pLocale) {
   if (wsTime.GetLength() == 0)
@@ -840,8 +839,8 @@
 CFGAS_FormatString::~CFGAS_FormatString() {}
 
 void CFGAS_FormatString::SplitFormatString(
-    const CFX_WideString& wsFormatString,
-    std::vector<CFX_WideString>* wsPatterns) {
+    const WideString& wsFormatString,
+    std::vector<WideString>* wsPatterns) {
   int32_t iStrLen = wsFormatString.GetLength();
   const wchar_t* pStr = wsFormatString.c_str();
   const wchar_t* pToken = pStr;
@@ -849,32 +848,31 @@
   bool iQuote = false;
   while (true) {
     if (pStr >= pEnd) {
-      wsPatterns->push_back(CFX_WideString(pToken, pStr - pToken));
+      wsPatterns->push_back(WideString(pToken, pStr - pToken));
       return;
     }
     if (*pStr == '\'') {
       iQuote = !iQuote;
     } else if (*pStr == L'|' && !iQuote) {
-      wsPatterns->push_back(CFX_WideString(pToken, pStr - pToken));
+      wsPatterns->push_back(WideString(pToken, pStr - pToken));
       pToken = pStr + 1;
     }
     pStr++;
   }
 }
 
-FX_LOCALECATEGORY CFGAS_FormatString::GetCategory(
-    const CFX_WideString& wsPattern) {
+FX_LOCALECATEGORY CFGAS_FormatString::GetCategory(const WideString& wsPattern) {
   FX_LOCALECATEGORY eCategory = FX_LOCALECATEGORY_Unknown;
   int32_t ccf = 0;
   int32_t iLenf = wsPattern.GetLength();
   const wchar_t* pStr = wsPattern.c_str();
   bool bBraceOpen = false;
-  CFX_WideStringC wsConstChars(gs_wsConstChars);
+  WideStringView wsConstChars(gs_wsConstChars);
   while (ccf < iLenf) {
     if (pStr[ccf] == '\'') {
       GetLiteralText(pStr, &ccf, iLenf);
     } else if (!bBraceOpen && !wsConstChars.Contains(pStr[ccf])) {
-      CFX_WideString wsCategory(pStr[ccf]);
+      WideString wsCategory(pStr[ccf]);
       ccf++;
       while (true) {
         if (ccf == iLenf)
@@ -889,7 +887,7 @@
         ccf++;
       }
 
-      uint32_t dwHash = FX_HashCode_GetW(wsCategory.AsStringC(), false);
+      uint32_t dwHash = FX_HashCode_GetW(wsCategory.AsStringView(), false);
       if (dwHash == FX_LOCALECATEGORY_DateHash) {
         if (eCategory == FX_LOCALECATEGORY_Time)
           return FX_LOCALECATEGORY_DateTime;
@@ -917,22 +915,21 @@
   return eCategory;
 }
 
-CFX_WideString CFGAS_FormatString::GetTextFormat(
-    const CFX_WideString& wsPattern,
-    const CFX_WideStringC& wsCategory) {
+WideString CFGAS_FormatString::GetTextFormat(const WideString& wsPattern,
+                                             const WideStringView& wsCategory) {
   int32_t ccf = 0;
   int32_t iLenf = wsPattern.GetLength();
   const wchar_t* pStr = wsPattern.c_str();
   bool bBrackOpen = false;
-  CFX_WideStringC wsConstChars(gs_wsConstChars);
-  CFX_WideString wsPurgePattern;
+  WideStringView wsConstChars(gs_wsConstChars);
+  WideString wsPurgePattern;
   while (ccf < iLenf) {
     if (pStr[ccf] == '\'') {
       int32_t iCurChar = ccf;
       GetLiteralText(pStr, &ccf, iLenf);
-      wsPurgePattern += CFX_WideStringC(pStr + iCurChar, ccf - iCurChar + 1);
+      wsPurgePattern += WideStringView(pStr + iCurChar, ccf - iCurChar + 1);
     } else if (!bBrackOpen && !wsConstChars.Contains(pStr[ccf])) {
-      CFX_WideString wsSearchCategory(pStr[ccf]);
+      WideString wsSearchCategory(pStr[ccf]);
       ccf++;
       while (ccf < iLenf && pStr[ccf] != '{' && pStr[ccf] != '.' &&
              pStr[ccf] != '(') {
@@ -965,11 +962,10 @@
   return wsPurgePattern;
 }
 
-IFX_Locale* CFGAS_FormatString::GetNumericFormat(
-    const CFX_WideString& wsPattern,
-    int32_t* iDotIndex,
-    uint32_t* dwStyle,
-    CFX_WideString* wsPurgePattern) {
+IFX_Locale* CFGAS_FormatString::GetNumericFormat(const WideString& wsPattern,
+                                                 int32_t* iDotIndex,
+                                                 uint32_t* dwStyle,
+                                                 WideString* wsPurgePattern) {
   *dwStyle = 0;
   IFX_Locale* pLocale = nullptr;
   int32_t ccf = 0;
@@ -977,14 +973,14 @@
   const wchar_t* pStr = wsPattern.c_str();
   bool bFindDot = false;
   bool bBrackOpen = false;
-  CFX_WideStringC wsConstChars(gs_wsConstChars);
+  WideStringView wsConstChars(gs_wsConstChars);
   while (ccf < iLenf) {
     if (pStr[ccf] == '\'') {
       int32_t iCurChar = ccf;
       GetLiteralText(pStr, &ccf, iLenf);
-      *wsPurgePattern += CFX_WideStringC(pStr + iCurChar, ccf - iCurChar + 1);
+      *wsPurgePattern += WideStringView(pStr + iCurChar, ccf - iCurChar + 1);
     } else if (!bBrackOpen && !wsConstChars.Contains(pStr[ccf])) {
-      CFX_WideString wsCategory(pStr[ccf]);
+      WideString wsCategory(pStr[ccf]);
       ccf++;
       while (ccf < iLenf && pStr[ccf] != '{' && pStr[ccf] != '.' &&
              pStr[ccf] != '(') {
@@ -999,7 +995,7 @@
       while (ccf < iLenf) {
         if (pStr[ccf] == '(') {
           ccf++;
-          CFX_WideString wsLCID;
+          WideString wsLCID;
           while (ccf < iLenf && pStr[ccf] != ')')
             wsLCID += pStr[ccf++];
 
@@ -1008,13 +1004,13 @@
           bBrackOpen = true;
           break;
         } else if (pStr[ccf] == '.') {
-          CFX_WideString wsSubCategory;
+          WideString wsSubCategory;
           ccf++;
           while (ccf < iLenf && pStr[ccf] != '(' && pStr[ccf] != '{')
             wsSubCategory += pStr[ccf++];
 
           uint32_t dwSubHash =
-              FX_HashCode_GetW(wsSubCategory.AsStringC(), false);
+              FX_HashCode_GetW(wsSubCategory.AsStringView(), false);
           FX_LOCALENUMSUBCATEGORY eSubCategory = FX_LOCALENUMPATTERN_Decimal;
           for (int32_t i = 0; i < g_iFXLocaleNumSubCatCount; i++) {
             if (g_FXLocaleNumSubCatData[i].uHash == dwSubHash) {
@@ -1068,14 +1064,14 @@
   return pLocale;
 }
 
-bool CFGAS_FormatString::ParseText(const CFX_WideString& wsSrcText,
-                                   const CFX_WideString& wsPattern,
-                                   CFX_WideString* wsValue) {
+bool CFGAS_FormatString::ParseText(const WideString& wsSrcText,
+                                   const WideString& wsPattern,
+                                   WideString* wsValue) {
   wsValue->clear();
   if (wsSrcText.IsEmpty() || wsPattern.IsEmpty())
     return false;
 
-  CFX_WideString wsTextFormat = GetTextFormat(wsPattern, L"text");
+  WideString wsTextFormat = GetTextFormat(wsPattern, L"text");
   if (wsTextFormat.IsEmpty())
     return false;
 
@@ -1088,7 +1084,7 @@
   while (iPattern < iLenPattern && iText < iLenText) {
     switch (pStrPattern[iPattern]) {
       case '\'': {
-        CFX_WideString wsLiteral =
+        WideString wsLiteral =
             GetLiteralText(pStrPattern, &iPattern, iLenPattern);
         int32_t iLiteralLen = wsLiteral.GetLength();
         if (iText + iLiteralLen > iLenText ||
@@ -1141,28 +1137,28 @@
   return iPattern == iLenPattern && iText == iLenText;
 }
 
-bool CFGAS_FormatString::ParseNum(const CFX_WideString& wsSrcNum,
-                                  const CFX_WideString& wsPattern,
-                                  CFX_WideString* wsValue) {
+bool CFGAS_FormatString::ParseNum(const WideString& wsSrcNum,
+                                  const WideString& wsPattern,
+                                  WideString* wsValue) {
   wsValue->clear();
   if (wsSrcNum.IsEmpty() || wsPattern.IsEmpty())
     return false;
 
   int32_t dot_index_f = -1;
   uint32_t dwFormatStyle = 0;
-  CFX_WideString wsNumFormat;
+  WideString wsNumFormat;
   IFX_Locale* pLocale =
       GetNumericFormat(wsPattern, &dot_index_f, &dwFormatStyle, &wsNumFormat);
   if (!pLocale || wsNumFormat.IsEmpty())
     return false;
 
   int32_t iExponent = 0;
-  CFX_WideString wsDotSymbol =
+  WideString wsDotSymbol =
       pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal);
-  CFX_WideString wsGroupSymbol =
+  WideString wsGroupSymbol =
       pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Grouping);
   int32_t iGroupLen = wsGroupSymbol.GetLength();
-  CFX_WideString wsMinus = pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus);
+  WideString wsMinus = pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Minus);
   int32_t iMinusLen = wsMinus.GetLength();
   const wchar_t* str = wsSrcNum.c_str();
   int len = wsSrcNum.GetLength();
@@ -1192,7 +1188,7 @@
   while (ccf >= 0 && cc >= 0) {
     switch (strf[ccf]) {
       case '\'': {
-        CFX_WideString wsLiteral = GetLiteralTextReverse(strf, &ccf);
+        WideString wsLiteral = GetLiteralTextReverse(strf, &ccf);
         int32_t iLiteralLen = wsLiteral.GetLength();
         cc -= iLiteralLen - 1;
         if (cc < 0 || wcsncmp(str + cc, wsLiteral.c_str(), iLiteralLen))
@@ -1265,7 +1261,7 @@
         break;
       }
       case '$': {
-        CFX_WideString wsSymbol =
+        WideString wsSymbol =
             pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol);
         int32_t iSymbolLen = wsSymbol.GetLength();
         cc -= iSymbolLen - 1;
@@ -1307,7 +1303,7 @@
         }
         break;
       case '%': {
-        CFX_WideString wsSymbol =
+        WideString wsSymbol =
             pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent);
         int32_t iSysmbolLen = wsSymbol.GetLength();
         cc -= iSysmbolLen - 1;
@@ -1371,7 +1367,7 @@
     while (cc < len && ccf < lenf) {
       switch (strf[ccf]) {
         case '\'': {
-          CFX_WideString wsLiteral = GetLiteralText(strf, &ccf, lenf);
+          WideString wsLiteral = GetLiteralText(strf, &ccf, lenf);
           int32_t iLiteralLen = wsLiteral.GetLength();
           if (cc + iLiteralLen > len ||
               wcsncmp(str + cc, wsLiteral.c_str(), iLiteralLen)) {
@@ -1441,7 +1437,7 @@
           break;
         }
         case '$': {
-          CFX_WideString wsSymbol =
+          WideString wsSymbol =
               pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_CurrencySymbol);
           int32_t iSymbolLen = wsSymbol.GetLength();
           if (cc + iSymbolLen > len ||
@@ -1483,7 +1479,7 @@
         case 'v':
           return false;
         case '%': {
-          CFX_WideString wsSymbol =
+          WideString wsSymbol =
               pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Percent);
           int32_t iSysmbolLen = wsSymbol.GetLength();
           if (cc + iSysmbolLen <= len &&
@@ -1532,7 +1528,7 @@
       return false;
   }
   if (iExponent || bHavePercentSymbol) {
-    CFX_Decimal decimal = CFX_Decimal(wsValue->AsStringC());
+    CFX_Decimal decimal = CFX_Decimal(wsValue->AsStringView());
     if (iExponent) {
       decimal = decimal *
                 CFX_Decimal(FXSYS_pow(10, static_cast<float>(iExponent)), 3);
@@ -1549,27 +1545,27 @@
 }
 
 FX_DATETIMETYPE CFGAS_FormatString::GetDateTimeFormat(
-    const CFX_WideString& wsPattern,
+    const WideString& wsPattern,
     IFX_Locale** pLocale,
-    CFX_WideString* wsDatePattern,
-    CFX_WideString* wsTimePattern) {
+    WideString* wsDatePattern,
+    WideString* wsTimePattern) {
   *pLocale = nullptr;
-  CFX_WideString wsTempPattern;
+  WideString wsTempPattern;
   FX_LOCALECATEGORY eCategory = FX_LOCALECATEGORY_Unknown;
   int32_t ccf = 0;
   int32_t iLenf = wsPattern.GetLength();
   const wchar_t* pStr = wsPattern.c_str();
   int32_t iFindCategory = 0;
   bool bBraceOpen = false;
-  CFX_WideStringC wsConstChars(gs_wsConstChars);
+  WideStringView wsConstChars(gs_wsConstChars);
   while (ccf < iLenf) {
     if (pStr[ccf] == '\'') {
       int32_t iCurChar = ccf;
       GetLiteralText(pStr, &ccf, iLenf);
-      wsTempPattern += CFX_WideStringC(pStr + iCurChar, ccf - iCurChar + 1);
+      wsTempPattern += WideStringView(pStr + iCurChar, ccf - iCurChar + 1);
     } else if (!bBraceOpen && iFindCategory != 3 &&
                !wsConstChars.Contains(pStr[ccf])) {
-      CFX_WideString wsCategory(pStr[ccf]);
+      WideString wsCategory(pStr[ccf]);
       ccf++;
       while (ccf < iLenf && pStr[ccf] != '{' && pStr[ccf] != '.' &&
              pStr[ccf] != '(') {
@@ -1602,7 +1598,7 @@
       while (ccf < iLenf) {
         if (pStr[ccf] == '(') {
           ccf++;
-          CFX_WideString wsLCID;
+          WideString wsLCID;
           while (ccf < iLenf && pStr[ccf] != ')')
             wsLCID += pStr[ccf++];
 
@@ -1611,13 +1607,13 @@
           bBraceOpen = true;
           break;
         } else if (pStr[ccf] == '.') {
-          CFX_WideString wsSubCategory;
+          WideString wsSubCategory;
           ccf++;
           while (ccf < iLenf && pStr[ccf] != '(' && pStr[ccf] != '{')
             wsSubCategory += pStr[ccf++];
 
           uint32_t dwSubHash =
-              FX_HashCode_GetW(wsSubCategory.AsStringC(), false);
+              FX_HashCode_GetW(wsSubCategory.AsStringView(), false);
           FX_LOCALEDATETIMESUBCATEGORY eSubCategory =
               FX_LOCALEDATETIMESUBCATEGORY_Medium;
           for (int32_t i = 0; i < g_iFXLocaleDateTimeSubCatCount; i++) {
@@ -1685,16 +1681,16 @@
   return (FX_DATETIMETYPE)iFindCategory;
 }
 
-bool CFGAS_FormatString::ParseDateTime(const CFX_WideString& wsSrcDateTime,
-                                       const CFX_WideString& wsPattern,
+bool CFGAS_FormatString::ParseDateTime(const WideString& wsSrcDateTime,
+                                       const WideString& wsPattern,
                                        FX_DATETIMETYPE eDateTimeType,
                                        CFX_DateTime* dtValue) {
   dtValue->Reset();
   if (wsSrcDateTime.IsEmpty() || wsPattern.IsEmpty())
     return false;
 
-  CFX_WideString wsDatePattern;
-  CFX_WideString wsTimePattern;
+  WideString wsDatePattern;
+  WideString wsTimePattern;
   IFX_Locale* pLocale = nullptr;
   FX_DATETIMETYPE eCategory =
       GetDateTimeFormat(wsPattern, &pLocale, &wsDatePattern, &wsTimePattern);
@@ -1730,9 +1726,9 @@
   return true;
 }
 
-bool CFGAS_FormatString::ParseZero(const CFX_WideString& wsSrcText,
-                                   const CFX_WideString& wsPattern) {
-  CFX_WideString wsTextFormat = GetTextFormat(wsPattern, L"zero");
+bool CFGAS_FormatString::ParseZero(const WideString& wsSrcText,
+                                   const WideString& wsPattern) {
+  WideString wsTextFormat = GetTextFormat(wsPattern, L"zero");
 
   int32_t iText = 0;
   int32_t iPattern = 0;
@@ -1742,7 +1738,7 @@
   int32_t iLenPattern = wsTextFormat.GetLength();
   while (iPattern < iLenPattern && iText < iLenText) {
     if (pStrPattern[iPattern] == '\'') {
-      CFX_WideString wsLiteral =
+      WideString wsLiteral =
           GetLiteralText(pStrPattern, &iPattern, iLenPattern);
       int32_t iLiteralLen = wsLiteral.GetLength();
       if (iText + iLiteralLen > iLenText ||
@@ -1762,9 +1758,9 @@
   return iPattern == iLenPattern && iText == iLenText;
 }
 
-bool CFGAS_FormatString::ParseNull(const CFX_WideString& wsSrcText,
-                                   const CFX_WideString& wsPattern) {
-  CFX_WideString wsTextFormat = GetTextFormat(wsPattern, L"null");
+bool CFGAS_FormatString::ParseNull(const WideString& wsSrcText,
+                                   const WideString& wsPattern) {
+  WideString wsTextFormat = GetTextFormat(wsPattern, L"null");
 
   int32_t iText = 0;
   int32_t iPattern = 0;
@@ -1774,7 +1770,7 @@
   int32_t iLenPattern = wsTextFormat.GetLength();
   while (iPattern < iLenPattern && iText < iLenText) {
     if (pStrPattern[iPattern] == '\'') {
-      CFX_WideString wsLiteral =
+      WideString wsLiteral =
           GetLiteralText(pStrPattern, &iPattern, iLenPattern);
       int32_t iLiteralLen = wsLiteral.GetLength();
       if (iText + iLiteralLen > iLenText ||
@@ -1794,9 +1790,9 @@
   return iPattern == iLenPattern && iText == iLenText;
 }
 
-bool CFGAS_FormatString::FormatText(const CFX_WideString& wsSrcText,
-                                    const CFX_WideString& wsPattern,
-                                    CFX_WideString* wsOutput) {
+bool CFGAS_FormatString::FormatText(const WideString& wsSrcText,
+                                    const WideString& wsPattern,
+                                    WideString* wsOutput) {
   if (wsPattern.IsEmpty())
     return false;
 
@@ -1804,7 +1800,7 @@
   if (iLenText == 0)
     return false;
 
-  CFX_WideString wsTextFormat = GetTextFormat(wsPattern, L"text");
+  WideString wsTextFormat = GetTextFormat(wsPattern, L"text");
 
   int32_t iText = 0;
   int32_t iPattern = 0;
@@ -1856,15 +1852,15 @@
   return iText == iLenText;
 }
 
-bool CFGAS_FormatString::FormatStrNum(const CFX_WideStringC& wsInputNum,
-                                      const CFX_WideString& wsPattern,
-                                      CFX_WideString* wsOutput) {
+bool CFGAS_FormatString::FormatStrNum(const WideStringView& wsInputNum,
+                                      const WideString& wsPattern,
+                                      WideString* wsOutput) {
   if (wsInputNum.IsEmpty() || wsPattern.IsEmpty())
     return false;
 
   int32_t dot_index_f = -1;
   uint32_t dwNumStyle = 0;
-  CFX_WideString wsNumFormat;
+  WideString wsNumFormat;
   IFX_Locale* pLocale =
       GetNumericFormat(wsPattern, &dot_index_f, &dwNumStyle, &wsNumFormat);
   if (!pLocale || wsNumFormat.IsEmpty())
@@ -1873,12 +1869,12 @@
   int32_t cc = 0, ccf = 0;
   const wchar_t* strf = wsNumFormat.c_str();
   int lenf = wsNumFormat.GetLength();
-  CFX_WideString wsSrcNum(wsInputNum);
+  WideString wsSrcNum(wsInputNum);
   wsSrcNum.TrimLeft('0');
   if (wsSrcNum.IsEmpty() || wsSrcNum[0] == '.')
     wsSrcNum.InsertAtFront('0');
 
-  CFX_Decimal decimal = CFX_Decimal(wsSrcNum.AsStringC());
+  CFX_Decimal decimal = CFX_Decimal(wsSrcNum.AsStringView());
   if (dwNumStyle & FX_NUMSTYLE_Percent) {
     decimal = decimal * CFX_Decimal(100);
     wsSrcNum = decimal;
@@ -1937,7 +1933,7 @@
     wsSrcNum.TrimRight(L".");
   }
 
-  CFX_WideString wsGroupSymbol =
+  WideString wsGroupSymbol =
       pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Grouping);
   bool bNeg = false;
   if (wsSrcNum[0] == '-') {
@@ -2010,7 +2006,7 @@
         ccf--;
         break;
       case 'E': {
-        CFX_WideString wsExp;
+        WideString wsExp;
         wsExp.Format(L"E%+d", exponent);
         *wsOutput = wsExp + *wsOutput;
         ccf--;
@@ -2114,7 +2110,7 @@
     return true;
   }
 
-  CFX_WideString wsDotSymbol =
+  WideString wsDotSymbol =
       pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal);
   if (strf[dot_index_f] == 'V') {
     *wsOutput += wsDotSymbol;
@@ -2168,7 +2164,7 @@
         ccf++;
         break;
       case 'E': {
-        CFX_WideString wsExp;
+        WideString wsExp;
         wsExp.Format(L"E%+d", exponent);
         *wsOutput += wsExp;
         ccf++;
@@ -2247,23 +2243,23 @@
   return true;
 }
 
-bool CFGAS_FormatString::FormatNum(const CFX_WideString& wsSrcNum,
-                                   const CFX_WideString& wsPattern,
-                                   CFX_WideString* wsOutput) {
+bool CFGAS_FormatString::FormatNum(const WideString& wsSrcNum,
+                                   const WideString& wsPattern,
+                                   WideString* wsOutput) {
   if (wsSrcNum.IsEmpty() || wsPattern.IsEmpty())
     return false;
-  return FormatStrNum(wsSrcNum.AsStringC(), wsPattern, wsOutput);
+  return FormatStrNum(wsSrcNum.AsStringView(), wsPattern, wsOutput);
 }
 
-bool CFGAS_FormatString::FormatDateTime(const CFX_WideString& wsSrcDateTime,
-                                        const CFX_WideString& wsPattern,
+bool CFGAS_FormatString::FormatDateTime(const WideString& wsSrcDateTime,
+                                        const WideString& wsPattern,
                                         FX_DATETIMETYPE eDateTimeType,
-                                        CFX_WideString* wsOutput) {
+                                        WideString* wsOutput) {
   if (wsSrcDateTime.IsEmpty() || wsPattern.IsEmpty())
     return false;
 
-  CFX_WideString wsDatePattern;
-  CFX_WideString wsTimePattern;
+  WideString wsDatePattern;
+  WideString wsTimePattern;
   IFX_Locale* pLocale = nullptr;
   FX_DATETIMETYPE eCategory =
       GetDateTimeFormat(wsPattern, &pLocale, &wsDatePattern, &wsTimePattern);
@@ -2290,15 +2286,15 @@
       return true;
     }
     if (eCategory == FX_DATETIMETYPE_Time &&
-        FX_TimeFromCanonical(wsSrcDateTime.AsStringC(), &dt, pLocale)) {
+        FX_TimeFromCanonical(wsSrcDateTime.AsStringView(), &dt, pLocale)) {
       *wsOutput = FormatDateTimeInternal(dt, wsDatePattern, wsTimePattern, true,
                                          pLocale);
       return true;
     }
   } else {
-    CFX_WideString wsSrcDate(wsSrcDateTime.c_str(), iT.value());
-    CFX_WideStringC wsSrcTime(wsSrcDateTime.c_str() + iT.value() + 1,
-                              wsSrcDateTime.GetLength() - iT.value() - 1);
+    WideString wsSrcDate(wsSrcDateTime.c_str(), iT.value());
+    WideStringView wsSrcTime(wsSrcDateTime.c_str() + iT.value() + 1,
+                             wsSrcDateTime.GetLength() - iT.value() - 1);
     if (wsSrcDate.IsEmpty() || wsSrcTime.IsEmpty())
       return false;
     if (FX_DateFromCanonical(wsSrcDate, &dt) &&
@@ -2312,12 +2308,12 @@
   return false;
 }
 
-bool CFGAS_FormatString::FormatZero(const CFX_WideString& wsPattern,
-                                    CFX_WideString* wsOutput) {
+bool CFGAS_FormatString::FormatZero(const WideString& wsPattern,
+                                    WideString* wsOutput) {
   if (wsPattern.IsEmpty())
     return false;
 
-  CFX_WideString wsTextFormat = GetTextFormat(wsPattern, L"zero");
+  WideString wsTextFormat = GetTextFormat(wsPattern, L"zero");
   int32_t iPattern = 0;
   const wchar_t* pStrPattern = wsTextFormat.c_str();
   int32_t iLenPattern = wsTextFormat.GetLength();
@@ -2334,12 +2330,12 @@
   return true;
 }
 
-bool CFGAS_FormatString::FormatNull(const CFX_WideString& wsPattern,
-                                    CFX_WideString* wsOutput) {
+bool CFGAS_FormatString::FormatNull(const WideString& wsPattern,
+                                    WideString* wsOutput) {
   if (wsPattern.IsEmpty())
     return false;
 
-  CFX_WideString wsTextFormat = GetTextFormat(wsPattern, L"null");
+  WideString wsTextFormat = GetTextFormat(wsPattern, L"null");
   int32_t iPattern = 0;
   const wchar_t* pStrPattern = wsTextFormat.c_str();
   int32_t iLenPattern = wsTextFormat.GetLength();
diff --git a/xfa/fgas/crt/cfgas_formatstring.h b/xfa/fgas/crt/cfgas_formatstring.h
index c91f435..5eae25d 100644
--- a/xfa/fgas/crt/cfgas_formatstring.h
+++ b/xfa/fgas/crt/cfgas_formatstring.h
@@ -12,8 +12,8 @@
 #include "core/fxcrt/ifx_locale.h"
 #include "xfa/fxfa/parser/cxfa_localemgr.h"
 
-bool FX_DateFromCanonical(const CFX_WideString& wsDate, CFX_DateTime* datetime);
-bool FX_TimeFromCanonical(const CFX_WideStringC& wsTime,
+bool FX_DateFromCanonical(const WideString& wsDate, CFX_DateTime* datetime);
+bool FX_TimeFromCanonical(const WideStringView& wsTime,
                           CFX_DateTime* datetime,
                           IFX_Locale* pLocale);
 
@@ -22,52 +22,50 @@
   explicit CFGAS_FormatString(CXFA_LocaleMgr* pLocaleMgr);
   ~CFGAS_FormatString();
 
-  void SplitFormatString(const CFX_WideString& wsFormatString,
-                         std::vector<CFX_WideString>* wsPatterns);
-  FX_LOCALECATEGORY GetCategory(const CFX_WideString& wsPattern);
+  void SplitFormatString(const WideString& wsFormatString,
+                         std::vector<WideString>* wsPatterns);
+  FX_LOCALECATEGORY GetCategory(const WideString& wsPattern);
 
-  bool ParseText(const CFX_WideString& wsSrcText,
-                 const CFX_WideString& wsPattern,
-                 CFX_WideString* wsValue);
-  bool ParseNum(const CFX_WideString& wsSrcNum,
-                const CFX_WideString& wsPattern,
-                CFX_WideString* wsValue);
-  bool ParseDateTime(const CFX_WideString& wsSrcDateTime,
-                     const CFX_WideString& wsPattern,
+  bool ParseText(const WideString& wsSrcText,
+                 const WideString& wsPattern,
+                 WideString* wsValue);
+  bool ParseNum(const WideString& wsSrcNum,
+                const WideString& wsPattern,
+                WideString* wsValue);
+  bool ParseDateTime(const WideString& wsSrcDateTime,
+                     const WideString& wsPattern,
                      FX_DATETIMETYPE eDateTimeType,
                      CFX_DateTime* dtValue);
-  bool ParseZero(const CFX_WideString& wsSrcText,
-                 const CFX_WideString& wsPattern);
-  bool ParseNull(const CFX_WideString& wsSrcText,
-                 const CFX_WideString& wsPattern);
+  bool ParseZero(const WideString& wsSrcText, const WideString& wsPattern);
+  bool ParseNull(const WideString& wsSrcText, const WideString& wsPattern);
 
-  bool FormatText(const CFX_WideString& wsSrcText,
-                  const CFX_WideString& wsPattern,
-                  CFX_WideString* wsOutput);
-  bool FormatNum(const CFX_WideString& wsSrcNum,
-                 const CFX_WideString& wsPattern,
-                 CFX_WideString* wsOutput);
-  bool FormatDateTime(const CFX_WideString& wsSrcDateTime,
-                      const CFX_WideString& wsPattern,
+  bool FormatText(const WideString& wsSrcText,
+                  const WideString& wsPattern,
+                  WideString* wsOutput);
+  bool FormatNum(const WideString& wsSrcNum,
+                 const WideString& wsPattern,
+                 WideString* wsOutput);
+  bool FormatDateTime(const WideString& wsSrcDateTime,
+                      const WideString& wsPattern,
                       FX_DATETIMETYPE eDateTimeType,
-                      CFX_WideString* wsOutput);
-  bool FormatZero(const CFX_WideString& wsPattern, CFX_WideString* wsOutput);
-  bool FormatNull(const CFX_WideString& wsPattern, CFX_WideString* wsOutput);
+                      WideString* wsOutput);
+  bool FormatZero(const WideString& wsPattern, WideString* wsOutput);
+  bool FormatNull(const WideString& wsPattern, WideString* wsOutput);
 
  private:
-  CFX_WideString GetTextFormat(const CFX_WideString& wsPattern,
-                               const CFX_WideStringC& wsCategory);
-  IFX_Locale* GetNumericFormat(const CFX_WideString& wsPattern,
+  WideString GetTextFormat(const WideString& wsPattern,
+                           const WideStringView& wsCategory);
+  IFX_Locale* GetNumericFormat(const WideString& wsPattern,
                                int32_t* iDotIndex,
                                uint32_t* dwStyle,
-                               CFX_WideString* wsPurgePattern);
-  bool FormatStrNum(const CFX_WideStringC& wsInputNum,
-                    const CFX_WideString& wsPattern,
-                    CFX_WideString* wsOutput);
-  FX_DATETIMETYPE GetDateTimeFormat(const CFX_WideString& wsPattern,
+                               WideString* wsPurgePattern);
+  bool FormatStrNum(const WideStringView& wsInputNum,
+                    const WideString& wsPattern,
+                    WideString* wsOutput);
+  FX_DATETIMETYPE GetDateTimeFormat(const WideString& wsPattern,
                                     IFX_Locale** pLocale,
-                                    CFX_WideString* wsDatePattern,
-                                    CFX_WideString* wsTimePattern);
+                                    WideString* wsDatePattern,
+                                    WideString* wsTimePattern);
 
   CXFA_LocaleMgr* m_pLocaleMgr;
 };
diff --git a/xfa/fgas/crt/cfgas_formatstring_unittest.cpp b/xfa/fgas/crt/cfgas_formatstring_unittest.cpp
index 3adcedf..b3d42f6 100644
--- a/xfa/fgas/crt/cfgas_formatstring_unittest.cpp
+++ b/xfa/fgas/crt/cfgas_formatstring_unittest.cpp
@@ -43,7 +43,7 @@
 
   // Note, this re-creates the fmt on each call. If you need to multiple
   // times store it locally.
-  CFGAS_FormatString* fmt(const CFX_WideString& locale) {
+  CFGAS_FormatString* fmt(const WideString& locale) {
     mgr_ = pdfium::MakeUnique<CXFA_LocaleMgr>(nullptr, locale);
     fmt_ = pdfium::MakeUnique<CFGAS_FormatString>(mgr_.get());
     return fmt_.get();
@@ -112,7 +112,7 @@
   // of DDD, DDDD, MMM, MMMM, E, e, gg, YYY, YYYYY.
 
   for (size_t i = 0; i < FX_ArraySize(tests); ++i) {
-    CFX_WideString result;
+    WideString result;
     EXPECT_TRUE(fmt(tests[i].locale)
                     ->FormatDateTime(tests[i].input, tests[i].pattern,
                                      FX_DATETIMETYPE_Date, &result));
@@ -161,7 +161,7 @@
   SetTZ("UTC+2");
 
   for (size_t i = 0; i < FX_ArraySize(tests); ++i) {
-    CFX_WideString result;
+    WideString result;
     EXPECT_TRUE(fmt(tests[i].locale)
                     ->FormatDateTime(tests[i].input, tests[i].pattern,
                                      FX_DATETIMETYPE_Time, &result));
@@ -191,7 +191,7 @@
        L"At 10:30 GMT on Jul 16, 1999"}};
 
   for (size_t i = 0; i < FX_ArraySize(tests); ++i) {
-    CFX_WideString result;
+    WideString result;
     EXPECT_TRUE(fmt(tests[i].locale)
                     ->FormatDateTime(tests[i].input, tests[i].pattern,
                                      FX_DATETIMETYPE_TimeDate, &result));
@@ -288,7 +288,7 @@
 // }
 
 TEST_F(CFGAS_FormatStringTest, SplitFormatString) {
-  std::vector<CFX_WideString> results;
+  std::vector<WideString> results;
   fmt(L"en")->SplitFormatString(
       L"null{'No data'} | null{} | text{999*9999} | text{999*999*9999}",
       &results);
@@ -416,7 +416,7 @@
   };
 
   for (size_t i = 0; i < FX_ArraySize(tests); ++i) {
-    CFX_WideString result;
+    WideString result;
     EXPECT_TRUE(fmt(tests[i].locale)
                     ->ParseNum(tests[i].input, tests[i].pattern, &result))
         << " TEST: " << i;
@@ -512,7 +512,7 @@
   };
 
   for (size_t i = 0; i < FX_ArraySize(tests); ++i) {
-    CFX_WideString result;
+    WideString result;
     EXPECT_TRUE(fmt(tests[i].locale)
                     ->FormatNum(tests[i].input, tests[i].pattern, &result))
         << " TEST: " << i;
@@ -538,7 +538,7 @@
                {L"en", L"A1C-1234-D text", L"000-9999-X 'text'", L"A1C1234D"}};
 
   for (size_t i = 0; i < FX_ArraySize(tests); ++i) {
-    CFX_WideString result;
+    WideString result;
     EXPECT_TRUE(fmt(tests[i].locale)
                     ->ParseText(tests[i].input, tests[i].pattern, &result));
     EXPECT_STREQ(tests[i].output, result.c_str()) << " TEST: " << i;
@@ -547,7 +547,7 @@
 
 TEST_F(CFGAS_FormatStringTest, InvalidTextParse) {
   // Input does not match mask.
-  CFX_WideString result;
+  WideString result;
   EXPECT_FALSE(fmt(L"en")->ParseText(L"123-4567-8", L"AAA-9999-X", &result));
 }
 
@@ -568,7 +568,7 @@
   };
 
   for (size_t i = 0; i < FX_ArraySize(tests); ++i) {
-    CFX_WideString result;
+    WideString result;
     EXPECT_TRUE(fmt(tests[i].locale)
                     ->FormatText(tests[i].input, tests[i].pattern, &result));
     EXPECT_STREQ(tests[i].output, result.c_str()) << " TEST: " << i;
@@ -599,7 +599,7 @@
   } tests[] = {{L"en", L"null{'n/a'}", L"n/a"}, {L"en", L"null{}", L""}};
 
   for (size_t i = 0; i < FX_ArraySize(tests); ++i) {
-    CFX_WideString result;
+    WideString result;
     EXPECT_TRUE(fmt(tests[i].locale)->FormatNull(tests[i].pattern, &result));
     EXPECT_STREQ(tests[i].output, result.c_str()) << " TEST: " << i;
   }
@@ -635,7 +635,7 @@
                {L"en", L"0", L"zero{}", L""}};
 
   for (size_t i = 0; i < FX_ArraySize(tests); ++i) {
-    CFX_WideString result;
+    WideString result;
     EXPECT_TRUE(
         fmt(tests[i].locale)
             ->FormatZero(/* tests[i].input,*/ tests[i].pattern, &result));
diff --git a/xfa/fgas/font/cfgas_fontmgr.cpp b/xfa/fgas/font/cfgas_fontmgr.cpp
index 9cb772e..f2405e9 100644
--- a/xfa/fgas/font/cfgas_fontmgr.cpp
+++ b/xfa/fgas/font/cfgas_fontmgr.cpp
@@ -172,14 +172,14 @@
 uint32_t GetFontFamilyHash(const wchar_t* pszFontFamily,
                            uint32_t dwFontStyles,
                            uint16_t wCodePage) {
-  CFX_WideString wsFont(pszFontFamily);
+  WideString wsFont(pszFontFamily);
   if (dwFontStyles & FX_FONTSTYLE_Bold)
     wsFont += L"Bold";
   if (dwFontStyles & FX_FONTSTYLE_Italic)
     wsFont += L"Italic";
 
   wsFont += wCodePage;
-  return FX_HashCode_GetW(wsFont.AsStringC(), false);
+  return FX_HashCode_GetW(wsFont.AsStringView(), false);
 }
 
 }  // namespace
@@ -307,8 +307,8 @@
 
   void* buffer[3] = {pSrcFont.Get(), (void*)(uintptr_t)dwFontStyles,
                      (void*)(uintptr_t)wCodePage};
-  uint32_t dwHash = FX_HashCode_GetA(
-      CFX_ByteStringC((uint8_t*)buffer, sizeof(buffer)), false);
+  uint32_t dwHash =
+      FX_HashCode_GetA(ByteStringView((uint8_t*)buffer, sizeof(buffer)), false);
   auto it = m_DeriveFonts.find(dwHash);
   if (it != m_DeriveFonts.end() && it->second)
     return it->second;
@@ -627,7 +627,7 @@
 
 CFX_FontSourceEnum_File::~CFX_FontSourceEnum_File() {}
 
-CFX_ByteString CFX_FontSourceEnum_File::GetNextFile() {
+ByteString CFX_FontSourceEnum_File::GetNextFile() {
   FX_FileHandle* pCurHandle =
       !m_FolderQueue.empty() ? m_FolderQueue.back().pFileHandle : nullptr;
   if (!pCurHandle) {
@@ -639,10 +639,10 @@
     hpp.bsParentPath = m_FolderPaths.back();
     m_FolderQueue.push_back(hpp);
   }
-  CFX_ByteString bsName;
+  ByteString bsName;
   bool bFolder;
-  CFX_ByteString bsFolderSeparator =
-      CFX_ByteString::FromUnicode(CFX_WideString(kFolderSeparator));
+  ByteString bsFolderSeparator =
+      ByteString::FromUnicode(WideString(kFolderSeparator));
   while (true) {
     if (!FX_GetNextFile(pCurHandle, &bsName, &bFolder)) {
       FX_CloseFolder(pCurHandle);
@@ -684,7 +684,7 @@
   if (m_wsNext.GetLength() == 0)
     return nullptr;
 
-  auto pAccess = pdfium::MakeRetain<CFX_CRTFileAccess>(m_wsNext.AsStringC());
+  auto pAccess = pdfium::MakeRetain<CFX_CRTFileAccess>(m_wsNext.AsStringView());
   m_wsNext = GetNextFile().UTF8Decode();
   return pAccess;
 }
@@ -722,8 +722,8 @@
     if (!pFontStream)
       continue;
 
-    CFX_WideString wsFaceName =
-        CFX_WideString::FromLocal(pFontMapper->GetFaceName(i).c_str());
+    WideString wsFaceName =
+        WideString::FromLocal(pFontMapper->GetFaceName(i).c_str());
     RegisterFaces(pFontStream, &wsFaceName);
   }
   return !m_InstalledFonts.empty();
@@ -759,10 +759,10 @@
     uint16_t wCodePage,
     uint32_t dwFontStyles,
     const wchar_t* pszFontFamily) {
-  CFX_ByteString bsHash;
+  ByteString bsHash;
   bsHash.Format("%d, %d", wCodePage, dwFontStyles);
-  bsHash += FX_UTF8Encode(CFX_WideStringC(pszFontFamily));
-  uint32_t dwHash = FX_HashCode_GetA(bsHash.AsStringC(), false);
+  bsHash += FX_UTF8Encode(WideStringView(pszFontFamily));
+  uint32_t dwHash = FX_HashCode_GetA(bsHash.AsStringView(), false);
   std::vector<CFX_RetainPtr<CFGAS_GEFont>>* pFontArray = &m_Hash2Fonts[dwHash];
   if (!pFontArray->empty())
     return (*pFontArray)[0];
@@ -773,7 +773,7 @@
     auto pNewFonts = pdfium::MakeUnique<std::vector<CFX_FontDescriptorInfo>>();
     sortedFontInfos = pNewFonts.get();
     MatchFonts(sortedFontInfos, wCodePage, dwFontStyles,
-               CFX_WideString(pszFontFamily), 0);
+               WideString(pszFontFamily), 0);
     m_Hash2CandidateList[dwHash] = std::move(pNewFonts);
   }
   if (sortedFontInfos->empty())
@@ -800,13 +800,13 @@
   const FGAS_FONTUSB* x = FGAS_GetUnicodeBitField(wUnicode);
   uint16_t wCodePage = x ? x->wCodePage : 0xFFFF;
   uint16_t wBitField = x ? x->wBitField : 0x03E7;
-  CFX_ByteString bsHash;
+  ByteString bsHash;
   if (wCodePage == 0xFFFF)
     bsHash.Format("%d, %d, %d", wCodePage, wBitField, dwFontStyles);
   else
     bsHash.Format("%d, %d", wCodePage, dwFontStyles);
-  bsHash += FX_UTF8Encode(CFX_WideStringC(pszFontFamily));
-  uint32_t dwHash = FX_HashCode_GetA(bsHash.AsStringC(), false);
+  bsHash += FX_UTF8Encode(WideStringView(pszFontFamily));
+  uint32_t dwHash = FX_HashCode_GetA(bsHash.AsStringView(), false);
   std::vector<CFX_RetainPtr<CFGAS_GEFont>>* pFonts = &m_Hash2Fonts[dwHash];
   for (size_t i = 0; i < pFonts->size(); ++i) {
     if (VerifyUnicode((*pFonts)[i], wUnicode))
@@ -818,7 +818,7 @@
     auto pNewFonts = pdfium::MakeUnique<std::vector<CFX_FontDescriptorInfo>>();
     sortedFontInfos = pNewFonts.get();
     MatchFonts(sortedFontInfos, wCodePage, dwFontStyles,
-               CFX_WideString(pszFontFamily), wUnicode);
+               WideString(pszFontFamily), wUnicode);
     m_Hash2CandidateList[dwHash] = std::move(pNewFonts);
   }
   for (const auto& info : *sortedFontInfos) {
@@ -876,7 +876,7 @@
 }
 
 CFX_RetainPtr<CFGAS_GEFont> CFGAS_FontMgr::LoadFont(
-    const CFX_WideString& wsFaceName,
+    const WideString& wsFaceName,
     int32_t iFaceIndex,
     int32_t* pFaceCount) {
   CFX_FontMgr* pFontMgr = CFX_GEModule::Get()->GetFontMgr();
@@ -993,7 +993,7 @@
 }
 
 CFX_RetainPtr<IFX_SeekableReadStream> CFGAS_FontMgr::CreateFontStream(
-    const CFX_ByteString& bsFaceName) {
+    const ByteString& bsFaceName) {
   CFX_FontMgr* pFontMgr = CFX_GEModule::Get()->GetFontMgr();
   CFX_FontMapper* pFontMapper = pFontMgr->GetBuiltinMapper();
   if (!pFontMapper)
@@ -1015,7 +1015,7 @@
     std::vector<CFX_FontDescriptorInfo>* pMatchedFonts,
     uint16_t wCodePage,
     uint32_t dwFontStyles,
-    const CFX_WideString& FontName,
+    const WideString& FontName,
     wchar_t wcUnicode) {
   pMatchedFonts->clear();
   for (const auto& pFont : m_InstalledFonts) {
@@ -1033,7 +1033,7 @@
 int32_t CFGAS_FontMgr::CalcPenalty(CFX_FontDescriptor* pInstalled,
                                    uint16_t wCodePage,
                                    uint32_t dwFontStyles,
-                                   const CFX_WideString& FontName,
+                                   const WideString& FontName,
                                    wchar_t wcUnicode) {
   int32_t nPenalty = 30000;
   if (FontName.GetLength() != 0) {
@@ -1122,8 +1122,7 @@
   }
 }
 
-void CFGAS_FontMgr::RegisterFace(FXFT_Face pFace,
-                                 const CFX_WideString* pFaceName) {
+void CFGAS_FontMgr::RegisterFace(FXFT_Face pFace, const WideString* pFaceName) {
   if ((pFace->face_flags & FT_FACE_FLAG_SCALABLE) == 0)
     return;
 
@@ -1147,18 +1146,17 @@
       table.clear();
   }
   GetNames(table.empty() ? nullptr : table.data(), pFont->m_wsFamilyNames);
-  pFont->m_wsFamilyNames.push_back(
-      CFX_ByteString(pFace->family_name).UTF8Decode());
+  pFont->m_wsFamilyNames.push_back(ByteString(pFace->family_name).UTF8Decode());
   pFont->m_wsFaceName =
       pFaceName ? *pFaceName
-                : CFX_WideString::FromLocal(FXFT_Get_Postscript_Name(pFace));
+                : WideString::FromLocal(FXFT_Get_Postscript_Name(pFace));
   pFont->m_nFaceIndex = pFace->face_index;
   m_InstalledFonts.push_back(std::move(pFont));
 }
 
 void CFGAS_FontMgr::RegisterFaces(
     const CFX_RetainPtr<IFX_SeekableReadStream>& pFontStream,
-    const CFX_WideString* pFaceName) {
+    const WideString* pFaceName) {
   int32_t index = 0;
   int32_t num_faces = 0;
   do {
@@ -1194,12 +1192,12 @@
 }
 
 void CFGAS_FontMgr::GetNames(const uint8_t* name_table,
-                             std::vector<CFX_WideString>& Names) {
+                             std::vector<WideString>& Names) {
   if (!name_table)
     return;
 
   uint8_t* lpTable = (uint8_t*)name_table;
-  CFX_WideString wsFamily;
+  WideString wsFamily;
   uint8_t* sp = lpTable + 2;
   uint8_t* lpNameRecord = lpTable + 6;
   uint16_t nNameCount = GetUInt16(sp);
@@ -1267,8 +1265,8 @@
   CSB[1] = pOS2->ulCodePageRange2;
 }
 
-int32_t CFGAS_FontMgr::IsPartName(const CFX_WideString& Name1,
-                                  const CFX_WideString& Name2) {
+int32_t CFGAS_FontMgr::IsPartName(const WideString& Name1,
+                                  const WideString& Name2) {
   if (Name1.Contains(Name2.c_str()))
     return 1;
   return 0;
diff --git a/xfa/fgas/font/cfgas_fontmgr.h b/xfa/fgas/font/cfgas_fontmgr.h
index ca3cf1c..8e97036 100644
--- a/xfa/fgas/font/cfgas_fontmgr.h
+++ b/xfa/fgas/font/cfgas_fontmgr.h
@@ -131,8 +131,8 @@
   ~CFX_FontDescriptor();
 
   int32_t m_nFaceIndex;
-  CFX_WideString m_wsFaceName;
-  std::vector<CFX_WideString> m_wsFamilyNames;
+  WideString m_wsFaceName;
+  std::vector<WideString> m_wsFamilyNames;
   uint32_t m_dwFontStyles;
   uint32_t m_dwUsb[4];
   uint32_t m_dwCsb[2];
@@ -161,7 +161,7 @@
     bsParentPath = x.bsParentPath;
   }
   FX_FileHandle* pFileHandle;
-  CFX_ByteString bsParentPath;
+  ByteString bsParentPath;
 };
 
 class CFX_FontSourceEnum_File {
@@ -173,11 +173,11 @@
   CFX_RetainPtr<CFX_CRTFileAccess> GetNext();
 
  private:
-  CFX_ByteString GetNextFile();
+  ByteString GetNextFile();
 
-  CFX_WideString m_wsNext;
+  WideString m_wsNext;
   std::vector<FX_HandleParentPath> m_FolderQueue;
-  std::vector<CFX_ByteString> m_FolderPaths;
+  std::vector<ByteString> m_FolderPaths;
 };
 
 class CFGAS_FontMgr : public CFX_Observable<CFGAS_FontMgr> {
@@ -203,28 +203,28 @@
   bool EnumFonts();
   bool EnumFontsFromFontMapper();
   bool EnumFontsFromFiles();
-  void RegisterFace(FXFT_Face pFace, const CFX_WideString* pFaceName);
+  void RegisterFace(FXFT_Face pFace, const WideString* pFaceName);
   void RegisterFaces(const CFX_RetainPtr<IFX_SeekableReadStream>& pFontStream,
-                     const CFX_WideString* pFaceName);
-  void GetNames(const uint8_t* name_table, std::vector<CFX_WideString>& Names);
+                     const WideString* pFaceName);
+  void GetNames(const uint8_t* name_table, std::vector<WideString>& Names);
   std::vector<uint16_t> GetCharsets(FXFT_Face pFace) const;
   void GetUSBCSB(FXFT_Face pFace, uint32_t* USB, uint32_t* CSB);
   uint32_t GetFlags(FXFT_Face pFace);
   bool VerifyUnicode(CFX_FontDescriptor* pDesc, wchar_t wcUnicode);
   bool VerifyUnicode(const CFX_RetainPtr<CFGAS_GEFont>& pFont,
                      wchar_t wcUnicode);
-  int32_t IsPartName(const CFX_WideString& Name1, const CFX_WideString& Name2);
+  int32_t IsPartName(const WideString& Name1, const WideString& Name2);
   void MatchFonts(std::vector<CFX_FontDescriptorInfo>* MatchedFonts,
                   uint16_t wCodePage,
                   uint32_t dwFontStyles,
-                  const CFX_WideString& FontName,
+                  const WideString& FontName,
                   wchar_t wcUnicode = 0xFFFE);
   int32_t CalcPenalty(CFX_FontDescriptor* pInstalled,
                       uint16_t wCodePage,
                       uint32_t dwFontStyles,
-                      const CFX_WideString& FontName,
+                      const WideString& FontName,
                       wchar_t wcUnicode = 0xFFFE);
-  CFX_RetainPtr<CFGAS_GEFont> LoadFont(const CFX_WideString& wsFaceName,
+  CFX_RetainPtr<CFGAS_GEFont> LoadFont(const WideString& wsFaceName,
                                        int32_t iFaceIndex,
                                        int32_t* pFaceCount);
   FXFT_Face LoadFace(const CFX_RetainPtr<IFX_SeekableReadStream>& pFontStream,
@@ -234,7 +234,7 @@
       IFX_SystemFontInfo* pSystemFontInfo,
       uint32_t index);
   CFX_RetainPtr<IFX_SeekableReadStream> CreateFontStream(
-      const CFX_ByteString& bsFaceName);
+      const ByteString& bsFaceName);
 
   CFX_FontSourceEnum_File* const m_pFontSource;
   std::vector<std::unique_ptr<CFX_FontDescriptor>> m_InstalledFonts;
diff --git a/xfa/fgas/font/cfgas_gefont.cpp b/xfa/fgas/font/cfgas_gefont.cpp
index 151aec7..c710ed9 100644
--- a/xfa/fgas/font/cfgas_gefont.cpp
+++ b/xfa/fgas/font/cfgas_gefont.cpp
@@ -102,9 +102,9 @@
                                     uint16_t wCodePage) {
   if (m_pFont)
     return false;
-  CFX_ByteString csFontFamily;
+  ByteString csFontFamily;
   if (pszFontFamily)
-    csFontFamily = CFX_ByteString::FromUnicode(pszFontFamily);
+    csFontFamily = ByteString::FromUnicode(pszFontFamily);
   uint32_t dwFlags = 0;
   if (dwFontStyles & FX_FONTSTYLE_FixedPitch)
     dwFlags |= FXFONT_FIXED_PITCH;
@@ -173,13 +173,13 @@
   return pdfium::MakeRetain<CFGAS_GEFont>(pFont, dwFontStyles);
 }
 
-CFX_WideString CFGAS_GEFont::GetFamilyName() const {
+WideString CFGAS_GEFont::GetFamilyName() const {
   if (!m_pFont->GetSubstFont() ||
       m_pFont->GetSubstFont()->m_Family.GetLength() == 0) {
-    return CFX_WideString::FromLocal(m_pFont->GetFamilyName().AsStringC());
+    return WideString::FromLocal(m_pFont->GetFamilyName().AsStringView());
   }
-  return CFX_WideString::FromLocal(
-      m_pFont->GetSubstFont()->m_Family.AsStringC());
+  return WideString::FromLocal(
+      m_pFont->GetSubstFont()->m_Family.AsStringView());
 }
 
 uint32_t CFGAS_GEFont::GetFontStyles() const {
@@ -330,7 +330,7 @@
   if (!m_pFontMgr || !bRecursive)
     return 0xFFFF;
 
-  CFX_WideString wsFamily = GetFamilyName();
+  WideString wsFamily = GetFamilyName();
   CFX_RetainPtr<CFGAS_GEFont> pFont =
       m_pFontMgr->GetFontByUnicode(wUnicode, GetFontStyles(), wsFamily.c_str());
 #if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_
diff --git a/xfa/fgas/font/cfgas_gefont.h b/xfa/fgas/font/cfgas_gefont.h
index cc9e56a..13ac48f 100644
--- a/xfa/fgas/font/cfgas_gefont.h
+++ b/xfa/fgas/font/cfgas_gefont.h
@@ -89,7 +89,7 @@
                         bool bRecursive,
                         CFX_RetainPtr<CFGAS_GEFont>* ppFont,
                         bool bCharCode = false);
-  CFX_WideString GetFamilyName() const;
+  WideString GetFamilyName() const;
 
 #if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_
   bool m_bUseLogFontStyle;
diff --git a/xfa/fgas/layout/cfx_breakline.cpp b/xfa/fgas/layout/cfx_breakline.cpp
index 9eb0211..d3fce06 100644
--- a/xfa/fgas/layout/cfx_breakline.cpp
+++ b/xfa/fgas/layout/cfx_breakline.cpp
@@ -35,7 +35,7 @@
   return &m_LinePieces[index];
 }
 
-void CFX_BreakLine::GetString(CFX_WideString& wsStr) const {
+void CFX_BreakLine::GetString(WideString& wsStr) const {
   int32_t iCount = pdfium::CollectionSize<int32_t>(m_LineChars);
   wchar_t* pBuf = wsStr.GetBuffer(iCount);
   for (int32_t i = 0; i < iCount; i++)
diff --git a/xfa/fgas/layout/cfx_breakline.h b/xfa/fgas/layout/cfx_breakline.h
index 138ee31..8826976 100644
--- a/xfa/fgas/layout/cfx_breakline.h
+++ b/xfa/fgas/layout/cfx_breakline.h
@@ -24,7 +24,7 @@
   int32_t CountPieces() const;
   const CFX_BreakPiece* GetPiece(int32_t index) const;
 
-  void GetString(CFX_WideString& wsStr) const;
+  void GetString(WideString& wsStr) const;
   int32_t GetLineEnd() const;
 
   void Clear();
diff --git a/xfa/fgas/layout/cfx_breakpiece.cpp b/xfa/fgas/layout/cfx_breakpiece.cpp
index 70ac66e..364c117 100644
--- a/xfa/fgas/layout/cfx_breakpiece.cpp
+++ b/xfa/fgas/layout/cfx_breakpiece.cpp
@@ -34,8 +34,8 @@
   return &(*m_pChars)[m_iStartChar + index];
 }
 
-CFX_WideString CFX_BreakPiece::GetString() const {
-  CFX_WideString ret;
+WideString CFX_BreakPiece::GetString() const {
+  WideString ret;
   ret.Reserve(m_iChars);
   for (int32_t i = m_iStartChar; i < m_iStartChar + m_iChars; i++)
     ret += static_cast<wchar_t>((*m_pChars)[i].char_code());
diff --git a/xfa/fgas/layout/cfx_breakpiece.h b/xfa/fgas/layout/cfx_breakpiece.h
index 668245f..bbf4558 100644
--- a/xfa/fgas/layout/cfx_breakpiece.h
+++ b/xfa/fgas/layout/cfx_breakpiece.h
@@ -25,7 +25,7 @@
   int32_t GetLength() const { return m_iChars; }
 
   CFX_Char* GetChar(int32_t index) const;
-  CFX_WideString GetString() const;
+  WideString GetString() const;
   std::vector<int32_t> GetWidths() const;
 
   CFX_BreakType m_dwStatus;
diff --git a/xfa/fgas/layout/cfx_rtfbreak.h b/xfa/fgas/layout/cfx_rtfbreak.h
index 699815a..f5ad908 100644
--- a/xfa/fgas/layout/cfx_rtfbreak.h
+++ b/xfa/fgas/layout/cfx_rtfbreak.h
@@ -31,7 +31,7 @@
   FX_RTFTEXTOBJ();
   ~FX_RTFTEXTOBJ();
 
-  CFX_WideString pStr;
+  WideString pStr;
   std::vector<int32_t> pWidths;
   CFX_RetainPtr<CFGAS_GEFont> pFont;
   const CFX_RectF* pRect;
diff --git a/xfa/fgas/layout/cfx_rtfbreak_unittest.cpp b/xfa/fgas/layout/cfx_rtfbreak_unittest.cpp
index 8997edc..bda52fc 100644
--- a/xfa/fgas/layout/cfx_rtfbreak_unittest.cpp
+++ b/xfa/fgas/layout/cfx_rtfbreak_unittest.cpp
@@ -39,7 +39,7 @@
 TEST_F(CFX_RTFBreakTest, AddChars) {
   auto b = CreateBreak(FX_LAYOUTSTYLE_ExpandTab);
 
-  CFX_WideString str(L"Input String.");
+  WideString str(L"Input String.");
   for (const auto& c : str)
     EXPECT_EQ(CFX_BreakType::None, b->AppendChar(c));
 
diff --git a/xfa/fgas/layout/cfx_txtbreak.h b/xfa/fgas/layout/cfx_txtbreak.h
index 72614bc..959cd8e 100644
--- a/xfa/fgas/layout/cfx_txtbreak.h
+++ b/xfa/fgas/layout/cfx_txtbreak.h
@@ -41,7 +41,7 @@
 
   CFDE_TextEditEngine* pEdtEngine;
   const FDE_TEXTEDITPIECE* pIdentity;
-  CFX_WideString wsStr;
+  WideString wsStr;
   int32_t* pWidths;
   int32_t iLength;
   CFX_RetainPtr<CFGAS_GEFont> pFont;
diff --git a/xfa/fwl/cfwl_barcode.cpp b/xfa/fwl/cfwl_barcode.cpp
index 166827d..1f2a978 100644
--- a/xfa/fwl/cfwl_barcode.cpp
+++ b/xfa/fwl/cfwl_barcode.cpp
@@ -67,7 +67,7 @@
   m_dwStatus = XFA_BCS_NeedUpdate;
 }
 
-void CFWL_Barcode::SetText(const CFX_WideString& wsText) {
+void CFWL_Barcode::SetText(const WideString& wsText) {
   m_pBarcodeEngine.reset();
   m_dwStatus = XFA_BCS_NeedUpdate;
   CFWL_Edit::SetText(wsText);
@@ -204,7 +204,7 @@
   if (m_dwAttributeMask & FWL_BCDATTRIBUTE_TRUNCATED)
     m_pBarcodeEngine->SetTruncated(m_bTruncated);
 
-  m_dwStatus = m_pBarcodeEngine->Encode(GetText().AsStringC())
+  m_dwStatus = m_pBarcodeEngine->Encode(GetText().AsStringView())
                    ? XFA_BCS_EncodeSuccess
                    : 0;
 }
diff --git a/xfa/fwl/cfwl_barcode.h b/xfa/fwl/cfwl_barcode.h
index 48bdeab..2fc7960 100644
--- a/xfa/fwl/cfwl_barcode.h
+++ b/xfa/fwl/cfwl_barcode.h
@@ -49,7 +49,7 @@
   void OnProcessEvent(CFWL_Event* pEvent) override;
 
   // CFWL_Edit
-  void SetText(const CFX_WideString& wsText) override;
+  void SetText(const WideString& wsText) override;
 
   void SetType(BC_TYPE type);
   bool IsProtectedType() const;
diff --git a/xfa/fwl/cfwl_combobox.cpp b/xfa/fwl/cfwl_combobox.cpp
index cbfbd9a..143d797 100644
--- a/xfa/fwl/cfwl_combobox.cpp
+++ b/xfa/fwl/cfwl_combobox.cpp
@@ -69,7 +69,7 @@
   return FWL_Type::ComboBox;
 }
 
-void CFWL_ComboBox::AddString(const CFX_WideStringC& wsText) {
+void CFWL_ComboBox::AddString(const WideStringView& wsText) {
   m_pListBox->AddString(wsText);
 }
 
@@ -208,7 +208,7 @@
     m_pEdit->SetThemeProvider(pThemeProvider);
 }
 
-CFX_WideString CFWL_ComboBox::GetTextByIndex(int32_t iIndex) const {
+WideString CFWL_ComboBox::GetTextByIndex(int32_t iIndex) const {
   CFWL_ListItem* pItem = static_cast<CFWL_ListItem*>(
       m_pListBox->GetItem(m_pListBox.get(), iIndex));
   return pItem ? pItem->GetText() : L"";
@@ -219,7 +219,7 @@
   bool bClearSel = iSel < 0 || iSel >= iCount;
   if (IsDropDownStyle() && m_pEdit) {
     if (bClearSel) {
-      m_pEdit->SetText(CFX_WideString());
+      m_pEdit->SetText(WideString());
     } else {
       CFWL_ListItem* hItem = m_pListBox->GetItem(this, iSel);
       m_pEdit->SetText(hItem ? hItem->GetText() : L"");
@@ -245,7 +245,7 @@
   CFWL_Widget::RemoveStates(dwStates);
 }
 
-void CFWL_ComboBox::SetEditText(const CFX_WideString& wsText) {
+void CFWL_ComboBox::SetEditText(const WideString& wsText) {
   if (!m_pEdit)
     return;
 
@@ -253,7 +253,7 @@
   m_pEdit->Update();
 }
 
-CFX_WideString CFWL_ComboBox::GetEditText() const {
+WideString CFWL_ComboBox::GetEditText() const {
   if (m_pEdit)
     return m_pEdit->GetText();
   if (!m_pListBox)
@@ -348,7 +348,7 @@
 }
 
 void CFWL_ComboBox::MatchEditText() {
-  CFX_WideString wsText = m_pEdit->GetText();
+  WideString wsText = m_pEdit->GetText();
   int32_t iMatch = m_pListBox->MatchItem(wsText);
   if (iMatch != m_iCurSel) {
     m_pListBox->ChangeSelected(iMatch);
@@ -861,7 +861,7 @@
     int32_t iCurSel = m_iCurSel;
     bool bDropDown = IsDropDownStyle();
     if (bDropDown && m_pEdit) {
-      CFX_WideString wsText = m_pEdit->GetText();
+      WideString wsText = m_pEdit->GetText();
       iCurSel = m_pListBox->MatchItem(wsText);
       if (iCurSel >= 0) {
         CFWL_ListItem* hItem = m_pListBox->GetItem(this, iCurSel);
@@ -990,7 +990,7 @@
     bool bMatchEqual = false;
     int32_t iCurSel = m_iCurSel;
     if (m_pEdit) {
-      CFX_WideString wsText = m_pEdit->GetText();
+      WideString wsText = m_pEdit->GetText();
       iCurSel = pComboList->MatchItem(wsText);
       if (iCurSel >= 0) {
         CFWL_ListItem* item = m_pListBox->GetSelItem(iCurSel);
diff --git a/xfa/fwl/cfwl_combobox.h b/xfa/fwl/cfwl_combobox.h
index 7242b1f..923e2d8 100644
--- a/xfa/fwl/cfwl_combobox.h
+++ b/xfa/fwl/cfwl_combobox.h
@@ -59,16 +59,16 @@
   void OnDrawWidget(CXFA_Graphics* pGraphics,
                     const CFX_Matrix& matrix) override;
 
-  CFX_WideString GetTextByIndex(int32_t iIndex) const;
+  WideString GetTextByIndex(int32_t iIndex) const;
   int32_t GetCurSel() const { return m_iCurSel; }
   void SetCurSel(int32_t iSel);
 
-  void AddString(const CFX_WideStringC& wsText);
+  void AddString(const WideStringView& wsText);
   void RemoveAt(int32_t iIndex);
   void RemoveAll();
 
-  void SetEditText(const CFX_WideString& wsText);
-  CFX_WideString GetEditText() const;
+  void SetEditText(const WideString& wsText);
+  WideString GetEditText() const;
 
   void OpenDropDownList(bool bActivate);
 
@@ -83,11 +83,9 @@
     return EditCanCopy();
   }
   bool EditCanSelectAll() const { return m_pEdit->GetTextLength() > 0; }
-  bool EditCopy(CFX_WideString& wsCopy) const { return m_pEdit->Copy(wsCopy); }
-  bool EditCut(CFX_WideString& wsCut) { return m_pEdit->Cut(wsCut); }
-  bool EditPaste(const CFX_WideString& wsPaste) {
-    return m_pEdit->Paste(wsPaste);
-  }
+  bool EditCopy(WideString& wsCopy) const { return m_pEdit->Copy(wsCopy); }
+  bool EditCut(WideString& wsCut) { return m_pEdit->Cut(wsCut); }
+  bool EditPaste(const WideString& wsPaste) { return m_pEdit->Paste(wsPaste); }
   void EditSelectAll() { m_pEdit->SelectAll(); }
   void EditDelete() { m_pEdit->ClearText(); }
   void EditDeSelect() { m_pEdit->ClearSelection(); }
diff --git a/xfa/fwl/cfwl_combolist.cpp b/xfa/fwl/cfwl_combolist.cpp
index f334f02..1180acf 100644
--- a/xfa/fwl/cfwl_combolist.cpp
+++ b/xfa/fwl/cfwl_combolist.cpp
@@ -25,14 +25,14 @@
   ASSERT(pOuter);
 }
 
-int32_t CFWL_ComboList::MatchItem(const CFX_WideString& wsMatch) {
+int32_t CFWL_ComboList::MatchItem(const WideString& wsMatch) {
   if (wsMatch.IsEmpty())
     return -1;
 
   int32_t iCount = CountItems(this);
   for (int32_t i = 0; i < iCount; i++) {
     CFWL_ListItem* hItem = GetItem(this, i);
-    CFX_WideString wsText = hItem ? hItem->GetText() : L"";
+    WideString wsText = hItem ? hItem->GetText() : L"";
     auto pos = wsText.Find(wsMatch.c_str());
     if (pos.has_value() && pos.value() == 0)
       return i;
diff --git a/xfa/fwl/cfwl_combolist.h b/xfa/fwl/cfwl_combolist.h
index b7ba6b5..a4d5135 100644
--- a/xfa/fwl/cfwl_combolist.h
+++ b/xfa/fwl/cfwl_combolist.h
@@ -22,7 +22,7 @@
   // CFWL_ListBox.
   void OnProcessMessage(CFWL_Message* pMessage) override;
 
-  int32_t MatchItem(const CFX_WideString& wsMatch);
+  int32_t MatchItem(const WideString& wsMatch);
 
   void ChangeSelected(int32_t iSel);
 
diff --git a/xfa/fwl/cfwl_datetimepicker.cpp b/xfa/fwl/cfwl_datetimepicker.cpp
index c8d7c5d..cd58dc7 100644
--- a/xfa/fwl/cfwl_datetimepicker.cpp
+++ b/xfa/fwl/cfwl_datetimepicker.cpp
@@ -160,7 +160,7 @@
   m_pMonthCal->SetSelect(iYear, iMonth, iDay);
 }
 
-void CFWL_DateTimePicker::SetEditText(const CFX_WideString& wsText) {
+void CFWL_DateTimePicker::SetEditText(const WideString& wsText) {
   if (!m_pEdit)
     return;
 
@@ -171,7 +171,7 @@
   DispatchEvent(&ev);
 }
 
-CFX_WideString CFWL_DateTimePicker::GetEditText() const {
+WideString CFWL_DateTimePicker::GetEditText() const {
   return m_pEdit ? m_pEdit->GetText() : L"";
 }
 
@@ -211,7 +211,7 @@
 void CFWL_DateTimePicker::FormatDateString(int32_t iYear,
                                            int32_t iMonth,
                                            int32_t iDay,
-                                           CFX_WideString& wsText) {
+                                           WideString& wsText) {
   if ((m_pProperties->m_dwStyleExes & FWL_STYLEEXT_DTP_ShortDateFormat) ==
       FWL_STYLEEXT_DTP_ShortDateFormat) {
     wsText.Format(L"%d-%d-%d", iYear, iMonth, iDay);
@@ -307,7 +307,7 @@
   m_iMonth = iMonth;
   m_iDay = iDay;
 
-  CFX_WideString wsText;
+  WideString wsText;
   FormatDateString(m_iYear, m_iMonth, m_iDay, wsText);
   m_pEdit->SetText(wsText);
   m_pEdit->Update();
diff --git a/xfa/fwl/cfwl_datetimepicker.h b/xfa/fwl/cfwl_datetimepicker.h
index ece489e..276fea4 100644
--- a/xfa/fwl/cfwl_datetimepicker.h
+++ b/xfa/fwl/cfwl_datetimepicker.h
@@ -49,8 +49,8 @@
   void GetCurSel(int32_t& iYear, int32_t& iMonth, int32_t& iDay);
   void SetCurSel(int32_t iYear, int32_t iMonth, int32_t iDay);
 
-  void SetEditText(const CFX_WideString& wsText);
-  CFX_WideString GetEditText() const;
+  void SetEditText(const WideString& wsText);
+  WideString GetEditText() const;
 
   bool HasSelection() const { return m_pEdit->HasSelection(); }
   // Returns <start, end> indices of the selection.
@@ -75,7 +75,7 @@
   void FormatDateString(int32_t iYear,
                         int32_t iMonth,
                         int32_t iDay,
-                        CFX_WideString& wsText);
+                        WideString& wsText);
   void ResetEditAlignment();
   void InitProxyForm();
   void OnFocusChanged(CFWL_Message* pMsg, bool bSet);
diff --git a/xfa/fwl/cfwl_edit.cpp b/xfa/fwl/cfwl_edit.cpp
index ffe324c..1bec150 100644
--- a/xfa/fwl/cfwl_edit.cpp
+++ b/xfa/fwl/cfwl_edit.cpp
@@ -189,12 +189,12 @@
     pGraphics->ConcatMatrix(pMatrix);
 
   CFWL_EventCheckWord checkWordEvent(this);
-  CFX_ByteString sLatinWord;
+  ByteString sLatinWord;
   CXFA_Path pathSpell;
   int32_t nStart = 0;
   float fOffSetX = m_rtEngine.left - m_fScrollOffsetX;
   float fOffSetY = m_rtEngine.top - m_fScrollOffsetY + m_fVAlignOffset;
-  CFX_WideString wsSpell = GetText();
+  WideString wsSpell = GetText();
   int32_t nContentLen = wsSpell.GetLength();
   for (int i = 0; i < nContentLen; i++) {
     if (FxEditIsLatinWord(wsSpell[i])) {
@@ -270,7 +270,7 @@
   m_pProperties->m_pThemeProvider = pThemeProvider;
 }
 
-void CFWL_Edit::SetText(const CFX_WideString& wsText) {
+void CFWL_Edit::SetText(const WideString& wsText) {
   m_EdtEngine.Clear();
   m_EdtEngine.Insert(0, wsText);
 }
@@ -279,7 +279,7 @@
   return m_EdtEngine.GetLength();
 }
 
-CFX_WideString CFWL_Edit::GetText() const {
+WideString CFWL_Edit::GetText() const {
   return m_EdtEngine.GetText();
 }
 
@@ -322,7 +322,7 @@
   m_EdtEngine.SetAliasChar(wAlias);
 }
 
-bool CFWL_Edit::Copy(CFX_WideString& wsCopy) {
+bool CFWL_Edit::Copy(WideString& wsCopy) {
   if (!m_EdtEngine.HasSelection())
     return false;
 
@@ -330,7 +330,7 @@
   return true;
 }
 
-bool CFWL_Edit::Cut(CFX_WideString& wsCut) {
+bool CFWL_Edit::Cut(WideString& wsCut) {
   if (!m_EdtEngine.HasSelection())
     return false;
 
@@ -338,7 +338,7 @@
   return true;
 }
 
-bool CFWL_Edit::Paste(const CFX_WideString& wsPaste) {
+bool CFWL_Edit::Paste(const WideString& wsPaste) {
   if (m_EdtEngine.HasSelection())
     m_EdtEngine.ReplaceSelectedText(wsPaste);
   else
@@ -396,7 +396,7 @@
   }
 }
 
-void CFWL_Edit::OnTextChanged(const CFX_WideString& prevText) {
+void CFWL_Edit::OnTextChanged(const WideString& prevText) {
   if (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_EDT_VAlignMask)
     UpdateVAlignment();
 
@@ -412,7 +412,7 @@
   RepaintRect(GetClientRect());
 }
 
-bool CFWL_Edit::OnValidate(const CFX_WideString& wsText) {
+bool CFWL_Edit::OnValidate(const WideString& wsText) {
   CFWL_Widget* pDst = GetOuter();
   if (!pDst)
     pDst = this;
@@ -1050,7 +1050,7 @@
   if (!m_bSetRange)
     return true;
 
-  CFX_WideString wsText = m_EdtEngine.GetText();
+  WideString wsText = m_EdtEngine.GetText();
   if (wsText.IsEmpty())
     return cNum != L'0';
 
@@ -1060,9 +1060,9 @@
     return false;
 
   int32_t nLen = wsText.GetLength();
-  CFX_WideString l = wsText.Left(m_CursorPosition);
-  CFX_WideString r = wsText.Right(nLen - m_CursorPosition);
-  CFX_WideString wsNew = l + cNum + r;
+  WideString l = wsText.Left(m_CursorPosition);
+  WideString r = wsText.Right(nLen - m_CursorPosition);
+  WideString wsNew = l + cNum + r;
   return wsNew.GetInteger() <= m_iMax;
 }
 
@@ -1369,7 +1369,7 @@
       if (pMsg->m_dwFlags & kEditingModifier)
         break;
 
-      m_EdtEngine.Insert(m_CursorPosition, CFX_WideString(c));
+      m_EdtEngine.Insert(m_CursorPosition, WideString(c));
       SetCursorPosition(m_CursorPosition + 1);
       break;
     }
diff --git a/xfa/fwl/cfwl_edit.h b/xfa/fwl/cfwl_edit.h
index 310cb81..e85baaa 100644
--- a/xfa/fwl/cfwl_edit.h
+++ b/xfa/fwl/cfwl_edit.h
@@ -65,10 +65,10 @@
   void OnDrawWidget(CXFA_Graphics* pGraphics,
                     const CFX_Matrix& matrix) override;
 
-  virtual void SetText(const CFX_WideString& wsText);
+  virtual void SetText(const WideString& wsText);
 
   int32_t GetTextLength() const;
-  CFX_WideString GetText() const;
+  WideString GetText() const;
   void ClearText();
 
   void SelectAll();
@@ -80,9 +80,9 @@
   int32_t GetLimit() const;
   void SetLimit(int32_t nLimit);
   void SetAliasChar(wchar_t wAlias);
-  bool Copy(CFX_WideString& wsCopy);
-  bool Cut(CFX_WideString& wsCut);
-  bool Paste(const CFX_WideString& wsPaste);
+  bool Copy(WideString& wsCopy);
+  bool Cut(WideString& wsCut);
+  bool Paste(const WideString& wsPaste);
   bool Undo();
   bool Redo();
   bool CanUndo();
@@ -93,9 +93,9 @@
   // CFDE_TextEditEngine::Delegate
   void NotifyTextFull() override;
   void OnCaretChanged() override;
-  void OnTextChanged(const CFX_WideString& prevText) override;
+  void OnTextChanged(const WideString& prevText) override;
   void OnSelChanged() override;
-  bool OnValidate(const CFX_WideString& wsText) override;
+  bool OnValidate(const WideString& wsText) override;
   void SetScrollOffset(float fScrollOffset) override;
 
  protected:
@@ -171,8 +171,8 @@
   std::unique_ptr<CFWL_ScrollBar> m_pVertScrollBar;
   std::unique_ptr<CFWL_ScrollBar> m_pHorzScrollBar;
   std::unique_ptr<CFWL_Caret> m_pCaret;
-  CFX_WideString m_wsCache;
-  CFX_WideString m_wsFont;
+  WideString m_wsCache;
+  WideString m_wsFont;
 };
 
 #endif  // XFA_FWL_CFWL_EDIT_H_
diff --git a/xfa/fwl/cfwl_eventcheckword.h b/xfa/fwl/cfwl_eventcheckword.h
index 3de1e75..fafe3d3 100644
--- a/xfa/fwl/cfwl_eventcheckword.h
+++ b/xfa/fwl/cfwl_eventcheckword.h
@@ -14,7 +14,7 @@
   explicit CFWL_EventCheckWord(CFWL_Widget* pSrcTarget);
   ~CFWL_EventCheckWord() override;
 
-  CFX_ByteString bsWord;
+  ByteString bsWord;
   bool bCheckWord;
 };
 
diff --git a/xfa/fwl/cfwl_eventtextchanged.h b/xfa/fwl/cfwl_eventtextchanged.h
index 8ae2762..4494f08 100644
--- a/xfa/fwl/cfwl_eventtextchanged.h
+++ b/xfa/fwl/cfwl_eventtextchanged.h
@@ -14,7 +14,7 @@
   explicit CFWL_EventTextChanged(CFWL_Widget* pSrcTarget);
   ~CFWL_EventTextChanged() override;
 
-  CFX_WideString wsPrevText;
+  WideString wsPrevText;
 };
 
 #endif  // XFA_FWL_CFWL_EVENTTEXTCHANGED_H_
diff --git a/xfa/fwl/cfwl_eventvalidate.h b/xfa/fwl/cfwl_eventvalidate.h
index 5121612..b8feff1 100644
--- a/xfa/fwl/cfwl_eventvalidate.h
+++ b/xfa/fwl/cfwl_eventvalidate.h
@@ -14,7 +14,7 @@
   explicit CFWL_EventValidate(CFWL_Widget* pSrcTarget);
   ~CFWL_EventValidate() override;
 
-  CFX_WideString wsInsert;
+  WideString wsInsert;
   bool bValidate;
 };
 
diff --git a/xfa/fwl/cfwl_form.cpp b/xfa/fwl/cfwl_form.cpp
index 5e59f27..4761693 100644
--- a/xfa/fwl/cfwl_form.cpp
+++ b/xfa/fwl/cfwl_form.cpp
@@ -45,8 +45,8 @@
   return FWL_Type::Form;
 }
 
-bool CFWL_Form::IsInstance(const CFX_WideStringC& wsClass) const {
-  if (wsClass == CFX_WideStringC(FWL_CLASS_Form))
+bool CFWL_Form::IsInstance(const WideStringView& wsClass) const {
+  if (wsClass == WideStringView(FWL_CLASS_Form))
     return true;
   return CFWL_Widget::IsInstance(wsClass);
 }
diff --git a/xfa/fwl/cfwl_form.h b/xfa/fwl/cfwl_form.h
index 78fee4b..014ed22 100644
--- a/xfa/fwl/cfwl_form.h
+++ b/xfa/fwl/cfwl_form.h
@@ -34,7 +34,7 @@
 
   // CFWL_Widget
   FWL_Type GetClassID() const override;
-  bool IsInstance(const CFX_WideStringC& wsClass) const override;
+  bool IsInstance(const WideStringView& wsClass) const override;
   CFX_RectF GetClientRect() override;
   void Update() override;
   FWL_WidgetHit HitTest(const CFX_PointF& point) override;
diff --git a/xfa/fwl/cfwl_formproxy.cpp b/xfa/fwl/cfwl_formproxy.cpp
index 123cf25..d03c148 100644
--- a/xfa/fwl/cfwl_formproxy.cpp
+++ b/xfa/fwl/cfwl_formproxy.cpp
@@ -24,8 +24,8 @@
   return FWL_Type::FormProxy;
 }
 
-bool CFWL_FormProxy::IsInstance(const CFX_WideStringC& wsClass) const {
-  if (wsClass == CFX_WideStringC(FWL_CLASS_FormProxy))
+bool CFWL_FormProxy::IsInstance(const WideStringView& wsClass) const {
+  if (wsClass == WideStringView(FWL_CLASS_FormProxy))
     return true;
   return CFWL_Form::IsInstance(wsClass);
 }
diff --git a/xfa/fwl/cfwl_formproxy.h b/xfa/fwl/cfwl_formproxy.h
index 6307195..498ff42 100644
--- a/xfa/fwl/cfwl_formproxy.h
+++ b/xfa/fwl/cfwl_formproxy.h
@@ -22,7 +22,7 @@
 
   // CFWL_Widget
   FWL_Type GetClassID() const override;
-  bool IsInstance(const CFX_WideStringC& wsClass) const override;
+  bool IsInstance(const WideStringView& wsClass) const override;
   void Update() override;
   void DrawWidget(CXFA_Graphics* pGraphics, const CFX_Matrix& matrix) override;
   void OnProcessMessage(CFWL_Message* pMessage) override;
diff --git a/xfa/fwl/cfwl_listbox.cpp b/xfa/fwl/cfwl_listbox.cpp
index 210ec1f..0ddb65b 100644
--- a/xfa/fwl/cfwl_listbox.cpp
+++ b/xfa/fwl/cfwl_listbox.cpp
@@ -444,7 +444,7 @@
   if (!pItem)
     return;
 
-  CFX_WideString wsText = pItem->GetText();
+  WideString wsText = pItem->GetText();
   if (wsText.GetLength() <= 0)
     return;
 
@@ -907,9 +907,9 @@
   return it != m_ItemArray.end() ? it - m_ItemArray.begin() : -1;
 }
 
-CFWL_ListItem* CFWL_ListBox::AddString(const CFX_WideStringC& wsAdd) {
+CFWL_ListItem* CFWL_ListBox::AddString(const WideStringView& wsAdd) {
   m_ItemArray.emplace_back(
-      pdfium::MakeUnique<CFWL_ListItem>(CFX_WideString(wsAdd)));
+      pdfium::MakeUnique<CFWL_ListItem>(WideString(wsAdd)));
   return m_ItemArray.back().get();
 }
 
diff --git a/xfa/fwl/cfwl_listbox.h b/xfa/fwl/cfwl_listbox.h
index 4704a8a..4a7818c 100644
--- a/xfa/fwl/cfwl_listbox.h
+++ b/xfa/fwl/cfwl_listbox.h
@@ -53,7 +53,7 @@
   CFWL_ListItem* GetItem(const CFWL_Widget* pWidget, int32_t nIndex) const;
   int32_t GetItemIndex(CFWL_Widget* pWidget, CFWL_ListItem* pItem);
 
-  CFWL_ListItem* AddString(const CFX_WideStringC& wsAdd);
+  CFWL_ListItem* AddString(const WideStringView& wsAdd);
   void RemoveAt(int32_t iIndex);
   void DeleteString(CFWL_ListItem* pItem);
   void DeleteAll();
diff --git a/xfa/fwl/cfwl_listitem.cpp b/xfa/fwl/cfwl_listitem.cpp
index a8ea8a6..f8a7b75 100644
--- a/xfa/fwl/cfwl_listitem.cpp
+++ b/xfa/fwl/cfwl_listitem.cpp
@@ -6,7 +6,7 @@
 
 #include "xfa/fwl/cfwl_listitem.h"
 
-CFWL_ListItem::CFWL_ListItem(const CFX_WideString& text)
+CFWL_ListItem::CFWL_ListItem(const WideString& text)
     : m_dwStates(0), m_wsText(text) {
   m_rtItem.Reset();
 }
diff --git a/xfa/fwl/cfwl_listitem.h b/xfa/fwl/cfwl_listitem.h
index aac67fc..62c3a98 100644
--- a/xfa/fwl/cfwl_listitem.h
+++ b/xfa/fwl/cfwl_listitem.h
@@ -12,7 +12,7 @@
 
 class CFWL_ListItem {
  public:
-  explicit CFWL_ListItem(const CFX_WideString& text);
+  explicit CFWL_ListItem(const WideString& text);
   ~CFWL_ListItem();
 
   CFX_RectF GetRect() const { return m_rtItem; }
@@ -21,12 +21,12 @@
   uint32_t GetStates() const { return m_dwStates; }
   void SetStates(uint32_t dwStates) { m_dwStates = dwStates; }
 
-  CFX_WideString GetText() const { return m_wsText; }
+  WideString GetText() const { return m_wsText; }
 
  private:
   CFX_RectF m_rtItem;
   uint32_t m_dwStates;
-  CFX_WideString m_wsText;
+  WideString m_wsText;
 };
 
 #endif  // XFA_FWL_CFWL_LISTITEM_H_
diff --git a/xfa/fwl/cfwl_monthcalendar.cpp b/xfa/fwl/cfwl_monthcalendar.cpp
index 11712fe..82cef65 100644
--- a/xfa/fwl/cfwl_monthcalendar.cpp
+++ b/xfa/fwl/cfwl_monthcalendar.cpp
@@ -32,9 +32,9 @@
 
 namespace {
 
-CFX_WideString GetCapacityForDay(IFWL_ThemeProvider* pTheme,
-                                 CFWL_ThemePart& params,
-                                 uint32_t day) {
+WideString GetCapacityForDay(IFWL_ThemeProvider* pTheme,
+                             CFWL_ThemePart& params,
+                             uint32_t day) {
   ASSERT(day < 7);
 
   if (day == 0)
@@ -52,9 +52,9 @@
   return L"Sat";
 }
 
-CFX_WideString GetCapacityForMonth(IFWL_ThemeProvider* pTheme,
-                                   CFWL_ThemePart& params,
-                                   uint32_t month) {
+WideString GetCapacityForMonth(IFWL_ThemeProvider* pTheme,
+                               CFWL_ThemePart& params,
+                               uint32_t month) {
   ASSERT(month < 12);
 
   if (month == 0)
@@ -430,7 +430,7 @@
   float fDayMaxW = 0.0f;
   float fDayMaxH = 0.0f;
   for (int day = 10; day <= 31; day++) {
-    CFX_WideString wsDay;
+    WideString wsDay;
     wsDay.Format(L"%d", day);
     CFX_SizeF sz = CalcTextSize(wsDay, m_pProperties->m_pThemeProvider, false);
     fDayMaxW = (fDayMaxW >= sz.width) ? fDayMaxW : sz.width;
@@ -462,7 +462,7 @@
       m_szHead.width + MONTHCAL_HEADER_BTN_HMARGIN * 2 + m_szCell.width * 2;
   fs.width = std::max(fs.width, fMonthMaxW);
 
-  CFX_WideString wsToday = GetTodayText(m_iYear, m_iMonth, m_iDay);
+  WideString wsToday = GetTodayText(m_iYear, m_iMonth, m_iDay);
   m_wsToday = L"Today" + wsToday;
   m_szToday = CalcTextSize(wsToday, m_pProperties->m_pThemeProvider, false);
   m_szToday.height = (m_szToday.height >= m_szCell.height) ? m_szToday.height
@@ -579,7 +579,7 @@
     if (iDayOfWeek >= 7)
       iDayOfWeek = 0;
 
-    CFX_WideString wsDay;
+    WideString wsDay;
     wsDay.Format(L"%d", i + 1);
     uint32_t dwStates = 0;
     if (m_iYear == m_iCurYear && m_iMonth == m_iCurMonth && m_iDay == (i + 1))
@@ -674,21 +674,21 @@
     AddSelDay(m_iDay);
 }
 
-CFX_WideString CFWL_MonthCalendar::GetHeadText(int32_t iYear, int32_t iMonth) {
+WideString CFWL_MonthCalendar::GetHeadText(int32_t iYear, int32_t iMonth) {
   ASSERT(iMonth > 0 && iMonth < 13);
   static const wchar_t* const pMonth[] = {L"January", L"February", L"March",
                                           L"April",   L"May",      L"June",
                                           L"July",    L"August",   L"September",
                                           L"October", L"November", L"December"};
-  CFX_WideString wsHead;
+  WideString wsHead;
   wsHead.Format(L"%s, %d", pMonth[iMonth - 1], iYear);
   return wsHead;
 }
 
-CFX_WideString CFWL_MonthCalendar::GetTodayText(int32_t iYear,
-                                                int32_t iMonth,
-                                                int32_t iDay) {
-  CFX_WideString wsToday;
+WideString CFWL_MonthCalendar::GetTodayText(int32_t iYear,
+                                            int32_t iMonth,
+                                            int32_t iDay) {
+  WideString wsToday;
   wsToday.Format(L", %d/%d/%d", iDay, iMonth, iYear);
   return wsToday;
 }
@@ -893,7 +893,7 @@
                                        int32_t dayofweek,
                                        uint32_t dwSt,
                                        CFX_RectF rc,
-                                       CFX_WideString& wsday)
+                                       WideString& wsday)
     : iDay(day),
       iDayOfWeek(dayofweek),
       dwStates(dwSt),
diff --git a/xfa/fwl/cfwl_monthcalendar.h b/xfa/fwl/cfwl_monthcalendar.h
index 6e0d471..50e6843 100644
--- a/xfa/fwl/cfwl_monthcalendar.h
+++ b/xfa/fwl/cfwl_monthcalendar.h
@@ -80,14 +80,14 @@
              int32_t dayofweek,
              uint32_t dwSt,
              CFX_RectF rc,
-             CFX_WideString& wsday);
+             WideString& wsday);
     ~DATEINFO();
 
     int32_t iDay;
     int32_t iDayOfWeek;
     uint32_t dwStates;
     CFX_RectF rect;
-    CFX_WideString wsDay;
+    WideString wsDay;
   };
 
   void DrawBackground(CXFA_Graphics* pGraphics,
@@ -141,8 +141,8 @@
   void RemoveSelDay();
   void AddSelDay(int32_t iDay);
   void JumpToToday();
-  CFX_WideString GetHeadText(int32_t iYear, int32_t iMonth);
-  CFX_WideString GetTodayText(int32_t iYear, int32_t iMonth, int32_t iDay);
+  WideString GetHeadText(int32_t iYear, int32_t iMonth);
+  WideString GetTodayText(int32_t iYear, int32_t iMonth, int32_t iDay);
   int32_t GetDayAtPoint(const CFX_PointF& point) const;
   CFX_RectF GetDayRect(int32_t iDay);
   void OnLButtonDown(CFWL_MessageMouse* pMsg);
@@ -163,8 +163,8 @@
   CFX_RectF m_rtTodayFlag;
   CFX_RectF m_rtWeekNum;
   CFX_RectF m_rtWeekNumSep;
-  CFX_WideString m_wsHead;
-  CFX_WideString m_wsToday;
+  WideString m_wsHead;
+  WideString m_wsToday;
   std::vector<std::unique_ptr<DATEINFO>> m_arrDates;
   int32_t m_iCurYear;
   int32_t m_iCurMonth;
diff --git a/xfa/fwl/cfwl_themetext.h b/xfa/fwl/cfwl_themetext.h
index 2a42615..91a3f38 100644
--- a/xfa/fwl/cfwl_themetext.h
+++ b/xfa/fwl/cfwl_themetext.h
@@ -15,7 +15,7 @@
  public:
   CFWL_ThemeText() : m_pGraphics(nullptr) {}
 
-  CFX_WideString m_wsText;
+  WideString m_wsText;
   FDE_TextStyle m_dwTTOStyles;
   FDE_TextAlignment m_iTTOAlign;
   CXFA_Graphics* m_pGraphics;
diff --git a/xfa/fwl/cfwl_widget.cpp b/xfa/fwl/cfwl_widget.cpp
index 9071f0f..b9b04cf 100644
--- a/xfa/fwl/cfwl_widget.cpp
+++ b/xfa/fwl/cfwl_widget.cpp
@@ -63,7 +63,7 @@
   m_pWidgetMgr->RemoveWidget(this);
 }
 
-bool CFWL_Widget::IsInstance(const CFX_WideStringC& wsClass) const {
+bool CFWL_Widget::IsInstance(const WideStringView& wsClass) const {
   return false;
 }
 
@@ -315,7 +315,7 @@
   return pRet;
 }
 
-CFX_SizeF CFWL_Widget::CalcTextSize(const CFX_WideString& wsText,
+CFX_SizeF CFWL_Widget::CalcTextSize(const WideString& wsText,
                                     IFWL_ThemeProvider* pTheme,
                                     bool bMultiLine) {
   if (!pTheme)
@@ -336,7 +336,7 @@
   return CFX_SizeF(rect.width, rect.height);
 }
 
-void CFWL_Widget::CalcTextRect(const CFX_WideString& wsText,
+void CFWL_Widget::CalcTextRect(const WideString& wsText,
                                IFWL_ThemeProvider* pTheme,
                                const FDE_TextStyle& dwTTOStyles,
                                FDE_TextAlignment iTTOAlign,
diff --git a/xfa/fwl/cfwl_widget.h b/xfa/fwl/cfwl_widget.h
index 1c5f84d..16a818e 100644
--- a/xfa/fwl/cfwl_widget.h
+++ b/xfa/fwl/cfwl_widget.h
@@ -53,7 +53,7 @@
   ~CFWL_Widget() override;
 
   virtual FWL_Type GetClassID() const = 0;
-  virtual bool IsInstance(const CFX_WideStringC& wsClass) const;
+  virtual bool IsInstance(const WideStringView& wsClass) const;
   virtual CFX_RectF GetAutosizedWidgetRect();
   virtual CFX_RectF GetWidgetRect();
   virtual CFX_RectF GetClientRect();
@@ -127,10 +127,10 @@
   float GetBorderSize(bool bCX);
   CFX_RectF GetRelativeRect();
   IFWL_ThemeProvider* GetAvailableTheme();
-  CFX_SizeF CalcTextSize(const CFX_WideString& wsText,
+  CFX_SizeF CalcTextSize(const WideString& wsText,
                          IFWL_ThemeProvider* pTheme,
                          bool bMultiLine);
-  void CalcTextRect(const CFX_WideString& wsText,
+  void CalcTextRect(const WideString& wsText,
                     IFWL_ThemeProvider* pTheme,
                     const FDE_TextStyle& dwTTOStyles,
                     FDE_TextAlignment iTTOAlign,
diff --git a/xfa/fwl/cfx_barcode.cpp b/xfa/fwl/cfx_barcode.cpp
index 8b51f2d..9d667c6 100644
--- a/xfa/fwl/cfx_barcode.cpp
+++ b/xfa/fwl/cfx_barcode.cpp
@@ -294,7 +294,7 @@
                                : false;
 }
 
-bool CFX_Barcode::Encode(const CFX_WideStringC& contents) {
+bool CFX_Barcode::Encode(const WideStringView& contents) {
   return m_pBCEngine && m_pBCEngine->Encode(contents);
 }
 
diff --git a/xfa/fwl/cfx_barcode.h b/xfa/fwl/cfx_barcode.h
index 32a6db5..eec4648 100644
--- a/xfa/fwl/cfx_barcode.h
+++ b/xfa/fwl/cfx_barcode.h
@@ -27,7 +27,7 @@
 
   bool Create(BC_TYPE type);
   BC_TYPE GetType();
-  bool Encode(const CFX_WideStringC& contents);
+  bool Encode(const WideStringView& contents);
 
   bool RenderDevice(CFX_RenderDevice* device, const CFX_Matrix* matrix);
 
diff --git a/xfa/fwl/theme/cfwl_monthcalendartp.h b/xfa/fwl/theme/cfwl_monthcalendartp.h
index 57438a0..6a1b9be 100644
--- a/xfa/fwl/theme/cfwl_monthcalendartp.h
+++ b/xfa/fwl/theme/cfwl_monthcalendartp.h
@@ -45,7 +45,7 @@
   FWLTHEME_STATE GetState(uint32_t dwFWLStates);
 
   std::unique_ptr<MCThemeData> m_pThemeData;
-  CFX_WideString wsResource;
+  WideString wsResource;
 
  private:
   void SetThemeData();
diff --git a/xfa/fwl/theme/cfwl_widgettp.cpp b/xfa/fwl/theme/cfwl_widgettp.cpp
index 4d6503f..1eade9c 100644
--- a/xfa/fwl/theme/cfwl_widgettp.cpp
+++ b/xfa/fwl/theme/cfwl_widgettp.cpp
@@ -53,7 +53,7 @@
   pMatrix->Concat(*pGraphics->GetMatrix());
   m_pTextOut->SetMatrix(*pMatrix);
   m_pTextOut->DrawLogicText(pGraphics->GetRenderDevice(),
-                            CFX_WideStringC(pParams->m_wsText.c_str(), iLen),
+                            WideStringView(pParams->m_wsText.c_str(), iLen),
                             pParams->m_rtPart);
 }
 
@@ -260,14 +260,14 @@
 
 CFWL_FontData::~CFWL_FontData() {}
 
-bool CFWL_FontData::Equal(const CFX_WideStringC& wsFontFamily,
+bool CFWL_FontData::Equal(const WideStringView& wsFontFamily,
                           uint32_t dwFontStyles,
                           uint16_t wCodePage) {
   return m_wsFamily == wsFontFamily && m_dwStyles == dwFontStyles &&
          m_dwCodePage == wCodePage;
 }
 
-bool CFWL_FontData::LoadFont(const CFX_WideStringC& wsFontFamily,
+bool CFWL_FontData::LoadFont(const WideStringView& wsFontFamily,
                              uint32_t dwFontStyles,
                              uint16_t dwCodePage) {
   m_wsFamily = wsFontFamily;
@@ -304,7 +304,7 @@
 CFWL_FontManager::~CFWL_FontManager() {}
 
 CFX_RetainPtr<CFGAS_GEFont> CFWL_FontManager::FindFont(
-    const CFX_WideStringC& wsFontFamily,
+    const WideStringView& wsFontFamily,
     uint32_t dwFontStyles,
     uint16_t wCodePage) {
   for (const auto& pData : m_FontsArray) {
diff --git a/xfa/fwl/theme/cfwl_widgettp.h b/xfa/fwl/theme/cfwl_widgettp.h
index 229b9ea..dd36778 100644
--- a/xfa/fwl/theme/cfwl_widgettp.h
+++ b/xfa/fwl/theme/cfwl_widgettp.h
@@ -106,16 +106,16 @@
   CFWL_FontData();
   virtual ~CFWL_FontData();
 
-  bool Equal(const CFX_WideStringC& wsFontFamily,
+  bool Equal(const WideStringView& wsFontFamily,
              uint32_t dwFontStyles,
              uint16_t wCodePage);
-  bool LoadFont(const CFX_WideStringC& wsFontFamily,
+  bool LoadFont(const WideStringView& wsFontFamily,
                 uint32_t dwFontStyles,
                 uint16_t wCodePage);
   CFX_RetainPtr<CFGAS_GEFont> GetFont() const { return m_pFont; }
 
  protected:
-  CFX_WideString m_wsFamily;
+  WideString m_wsFamily;
   uint32_t m_dwStyles;
   uint32_t m_dwCodePage;
 #if _FXM_PLATFORM_ != _FXM_PLATFORM_WINDOWS_
@@ -130,7 +130,7 @@
   static CFWL_FontManager* GetInstance();
   static void DestroyInstance();
 
-  CFX_RetainPtr<CFGAS_GEFont> FindFont(const CFX_WideStringC& wsFontFamily,
+  CFX_RetainPtr<CFGAS_GEFont> FindFont(const WideStringView& wsFontFamily,
                                        uint32_t dwFontStyles,
                                        uint16_t dwCodePage);
 
diff --git a/xfa/fxfa/cxfa_deffontmgr.cpp b/xfa/fxfa/cxfa_deffontmgr.cpp
index db73067..7dd5de9 100644
--- a/xfa/fxfa/cxfa_deffontmgr.cpp
+++ b/xfa/fxfa/cxfa_deffontmgr.cpp
@@ -16,16 +16,16 @@
 
 CFX_RetainPtr<CFGAS_GEFont> CXFA_DefFontMgr::GetFont(
     CXFA_FFDoc* hDoc,
-    const CFX_WideStringC& wsFontFamily,
+    const WideStringView& wsFontFamily,
     uint32_t dwFontStyles,
     uint16_t wCodePage) {
-  CFX_WideString wsFontName(wsFontFamily);
+  WideString wsFontName(wsFontFamily);
   CFGAS_FontMgr* pFDEFontMgr = hDoc->GetApp()->GetFDEFontMgr();
   CFX_RetainPtr<CFGAS_GEFont> pFont =
       pFDEFontMgr->LoadFont(wsFontName.c_str(), dwFontStyles, wCodePage);
   if (!pFont) {
     const XFA_FONTINFO* pCurFont =
-        XFA_GetFontINFOByFontName(wsFontName.AsStringC());
+        XFA_GetFontINFOByFontName(wsFontName.AsStringView());
     if (pCurFont && pCurFont->pReplaceFont) {
       uint32_t dwStyle = 0;
       if (dwFontStyles & FX_FONTSTYLE_Bold) {
@@ -42,8 +42,7 @@
           pNameText++;
           iLength--;
         }
-        CFX_WideString wsReplace =
-            CFX_WideString(pReplace, pNameText - pReplace);
+        WideString wsReplace = WideString(pReplace, pNameText - pReplace);
         pFont = pFDEFontMgr->LoadFont(wsReplace.c_str(), dwStyle, wCodePage);
         if (pFont)
           break;
@@ -61,7 +60,7 @@
 
 CFX_RetainPtr<CFGAS_GEFont> CXFA_DefFontMgr::GetDefaultFont(
     CXFA_FFDoc* hDoc,
-    const CFX_WideStringC& wsFontFamily,
+    const WideStringView& wsFontFamily,
     uint32_t dwFontStyles,
     uint16_t wCodePage) {
   CFGAS_FontMgr* pFDEFontMgr = hDoc->GetApp()->GetFDEFontMgr();
diff --git a/xfa/fxfa/cxfa_deffontmgr.h b/xfa/fxfa/cxfa_deffontmgr.h
index 5f50ffb..3a5ea75 100644
--- a/xfa/fxfa/cxfa_deffontmgr.h
+++ b/xfa/fxfa/cxfa_deffontmgr.h
@@ -21,14 +21,13 @@
   ~CXFA_DefFontMgr();
 
   CFX_RetainPtr<CFGAS_GEFont> GetFont(CXFA_FFDoc* hDoc,
-                                      const CFX_WideStringC& wsFontFamily,
+                                      const WideStringView& wsFontFamily,
                                       uint32_t dwFontStyles,
                                       uint16_t wCodePage = 0xFFFF);
-  CFX_RetainPtr<CFGAS_GEFont> GetDefaultFont(
-      CXFA_FFDoc* hDoc,
-      const CFX_WideStringC& wsFontFamily,
-      uint32_t dwFontStyles,
-      uint16_t wCodePage = 0xFFFF);
+  CFX_RetainPtr<CFGAS_GEFont> GetDefaultFont(CXFA_FFDoc* hDoc,
+                                             const WideStringView& wsFontFamily,
+                                             uint32_t dwFontStyles,
+                                             uint16_t wCodePage = 0xFFFF);
 
  private:
   std::vector<CFX_RetainPtr<CFGAS_GEFont>> m_CacheFonts;
diff --git a/xfa/fxfa/cxfa_eventparam.h b/xfa/fxfa/cxfa_eventparam.h
index 1e7c12a..eafd76c 100644
--- a/xfa/fxfa/cxfa_eventparam.h
+++ b/xfa/fxfa/cxfa_eventparam.h
@@ -55,7 +55,7 @@
 
   CXFA_WidgetAcc* m_pTarget;
   XFA_EVENTTYPE m_eType;
-  CFX_WideString m_wsResult;
+  WideString m_wsResult;
   bool m_bCancelAction;
   int32_t m_iCommitKey;
   bool m_bKeyDown;
@@ -64,14 +64,14 @@
   int32_t m_iSelEnd;
   int32_t m_iSelStart;
   bool m_bShift;
-  CFX_WideString m_wsChange;
-  CFX_WideString m_wsFullText;
-  CFX_WideString m_wsNewContentType;
-  CFX_WideString m_wsNewText;
-  CFX_WideString m_wsPrevContentType;
-  CFX_WideString m_wsPrevText;
-  CFX_WideString m_wsSoapFaultCode;
-  CFX_WideString m_wsSoapFaultString;
+  WideString m_wsChange;
+  WideString m_wsFullText;
+  WideString m_wsNewContentType;
+  WideString m_wsNewText;
+  WideString m_wsPrevContentType;
+  WideString m_wsPrevText;
+  WideString m_wsSoapFaultCode;
+  WideString m_wsSoapFaultString;
   bool m_bIsFormReady;
 };
 
diff --git a/xfa/fxfa/cxfa_ffbarcode.cpp b/xfa/fxfa/cxfa_ffbarcode.cpp
index 03a7c7d..9686416 100644
--- a/xfa/fxfa/cxfa_ffbarcode.cpp
+++ b/xfa/fxfa/cxfa_ffbarcode.cpp
@@ -95,7 +95,7 @@
 
 // static
 const BarCodeInfo* CXFA_FFBarcode::GetBarcodeTypeByName(
-    const CFX_WideStringC& wsName) {
+    const WideStringView& wsName) {
   if (wsName.IsEmpty())
     return nullptr;
 
@@ -129,7 +129,7 @@
   m_pNormalWidget->SetDelegate(this);
   m_pNormalWidget->LockUpdate();
 
-  CFX_WideString wsText;
+  WideString wsText;
   m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display);
   pFWLBarcode->SetText(wsText);
   UpdateWidgetProperty();
@@ -161,8 +161,8 @@
   CXFA_FFTextEdit::UpdateWidgetProperty();
 
   auto* pBarCodeWidget = static_cast<CFWL_Barcode*>(m_pNormalWidget.get());
-  CFX_WideString wsType = GetDataAcc()->GetBarcodeType();
-  const BarCodeInfo* pBarcodeInfo = GetBarcodeTypeByName(wsType.AsStringC());
+  WideString wsType = GetDataAcc()->GetBarcodeType();
+  const BarCodeInfo* pBarcodeInfo = GetBarcodeTypeByName(wsType.AsStringView());
   if (!pBarcodeInfo)
     return;
 
diff --git a/xfa/fxfa/cxfa_ffbarcode.h b/xfa/fxfa/cxfa_ffbarcode.h
index 13e5032..f03246d 100644
--- a/xfa/fxfa/cxfa_ffbarcode.h
+++ b/xfa/fxfa/cxfa_ffbarcode.h
@@ -85,7 +85,7 @@
 
 class CXFA_FFBarcode : public CXFA_FFTextEdit {
  public:
-  static const BarCodeInfo* GetBarcodeTypeByName(const CFX_WideStringC& wsName);
+  static const BarCodeInfo* GetBarcodeTypeByName(const WideStringView& wsName);
 
   explicit CXFA_FFBarcode(CXFA_WidgetAcc* pDataAcc);
   ~CXFA_FFBarcode() override;
diff --git a/xfa/fxfa/cxfa_ffcombobox.cpp b/xfa/fxfa/cxfa_ffcombobox.cpp
index 950cab5..ca5645f 100644
--- a/xfa/fxfa/cxfa_ffcombobox.cpp
+++ b/xfa/fxfa/cxfa_ffcombobox.cpp
@@ -52,13 +52,13 @@
   m_pNormalWidget->LockUpdate();
 
   for (const auto& label : m_pDataAcc->GetChoiceListItems(false))
-    pComboBox->AddString(label.AsStringC());
+    pComboBox->AddString(label.AsStringView());
 
   std::vector<int32_t> iSelArray = m_pDataAcc->GetSelectedItems();
   if (!iSelArray.empty()) {
     pComboBox->SetCurSel(iSelArray.front());
   } else {
-    CFX_WideString wsText;
+    WideString wsText;
     m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Raw);
     pComboBox->SetEditText(wsText);
   }
@@ -120,15 +120,15 @@
 
 bool CXFA_FFComboBox::IsDataChanged() {
   auto* pFWLcombobox = ToComboBox(m_pNormalWidget.get());
-  CFX_WideString wsText = pFWLcombobox->GetEditText();
+  WideString wsText = pFWLcombobox->GetEditText();
   int32_t iCursel = pFWLcombobox->GetCurSel();
   if (iCursel >= 0) {
-    CFX_WideString wsSel = pFWLcombobox->GetTextByIndex(iCursel);
+    WideString wsSel = pFWLcombobox->GetTextByIndex(iCursel);
     if (wsSel == wsText)
       m_pDataAcc->GetChoiceListItem(wsText, iCursel, true);
   }
 
-  CFX_WideString wsOldValue;
+  WideString wsOldValue;
   m_pDataAcc->GetValue(wsOldValue, XFA_VALUEPICTURE_Raw);
   if (wsOldValue == wsText)
     return false;
@@ -193,7 +193,7 @@
   if (!iSelArray.empty()) {
     pComboBox->SetCurSel(iSelArray.front());
   } else {
-    CFX_WideString wsText;
+    WideString wsText;
     pComboBox->SetCurSel(-1);
     m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Raw);
     pComboBox->SetEditText(wsText);
@@ -241,16 +241,16 @@
   return ToComboBox(m_pNormalWidget.get())->EditCanSelectAll();
 }
 
-bool CXFA_FFComboBox::Copy(CFX_WideString& wsCopy) {
+bool CXFA_FFComboBox::Copy(WideString& wsCopy) {
   return ToComboBox(m_pNormalWidget.get())->EditCopy(wsCopy);
 }
 
-bool CXFA_FFComboBox::Cut(CFX_WideString& wsCut) {
+bool CXFA_FFComboBox::Cut(WideString& wsCut) {
   return m_pDataAcc->IsChoiceListAllowTextEntry() &&
          ToComboBox(m_pNormalWidget.get())->EditCut(wsCut);
 }
 
-bool CXFA_FFComboBox::Paste(const CFX_WideString& wsPaste) {
+bool CXFA_FFComboBox::Paste(const WideString& wsPaste) {
   return m_pDataAcc->IsChoiceListAllowTextEntry() &&
          ToComboBox(m_pNormalWidget.get())->EditPaste(wsPaste);
 }
@@ -273,7 +273,7 @@
   AddInvalidateRect();
 }
 
-void CXFA_FFComboBox::InsertItem(const CFX_WideStringC& wsLabel,
+void CXFA_FFComboBox::InsertItem(const WideStringView& wsLabel,
                                  int32_t nIndex) {
   ToComboBox(m_pNormalWidget.get())->AddString(wsLabel);
   m_pNormalWidget->Update();
@@ -291,7 +291,7 @@
 }
 
 void CXFA_FFComboBox::OnTextChanged(CFWL_Widget* pWidget,
-                                    const CFX_WideString& wsChanged) {
+                                    const WideString& wsChanged) {
   CXFA_EventParam eParam;
   m_pDataAcc->GetValue(eParam.m_wsPrevText, XFA_VALUEPICTURE_Raw);
   eParam.m_wsChange = wsChanged;
@@ -335,7 +335,7 @@
       break;
     }
     case CFWL_Event::Type::EditChanged: {
-      CFX_WideString wsChanged;
+      WideString wsChanged;
       OnTextChanged(m_pNormalWidget.get(), wsChanged);
       break;
     }
diff --git a/xfa/fxfa/cxfa_ffcombobox.h b/xfa/fxfa/cxfa_ffcombobox.h
index 33e7d7c..81da2c2 100644
--- a/xfa/fxfa/cxfa_ffcombobox.h
+++ b/xfa/fxfa/cxfa_ffcombobox.h
@@ -29,9 +29,9 @@
   bool CanCut() override;
   bool CanPaste() override;
   bool CanSelectAll() override;
-  bool Copy(CFX_WideString& wsCopy) override;
-  bool Cut(CFX_WideString& wsCut) override;
-  bool Paste(const CFX_WideString& wsPaste) override;
+  bool Copy(WideString& wsCopy) override;
+  bool Cut(WideString& wsCut) override;
+  bool Paste(const WideString& wsPaste) override;
   void SelectAll() override;
   void Delete() override;
   void DeSelect() override;
@@ -44,12 +44,12 @@
 
   virtual void OpenDropDownList();
 
-  void OnTextChanged(CFWL_Widget* pWidget, const CFX_WideString& wsChanged);
+  void OnTextChanged(CFWL_Widget* pWidget, const WideString& wsChanged);
   void OnSelectChanged(CFWL_Widget* pWidget, bool bLButtonUp);
   void OnPreOpen(CFWL_Widget* pWidget);
   void OnPostOpen(CFWL_Widget* pWidget);
   void SetItemState(int32_t nIndex, bool bSelected);
-  void InsertItem(const CFX_WideStringC& wsLabel, int32_t nIndex);
+  void InsertItem(const WideStringView& wsLabel, int32_t nIndex);
   void DeleteItem(int32_t nIndex);
 
  private:
@@ -62,7 +62,7 @@
   uint32_t GetAlignment();
   void FWLEventSelChange(CXFA_EventParam* pParam);
 
-  CFX_WideString m_wsNewValue;
+  WideString m_wsNewValue;
   IFWL_WidgetDelegate* m_pOldDelegate;
 };
 
diff --git a/xfa/fxfa/cxfa_ffdatetimeedit.cpp b/xfa/fxfa/cxfa_ffdatetimeedit.cpp
index cfef664..643d384 100644
--- a/xfa/fxfa/cxfa_ffdatetimeedit.cpp
+++ b/xfa/fxfa/cxfa_ffdatetimeedit.cpp
@@ -45,7 +45,7 @@
   m_pNormalWidget->SetDelegate(this);
   m_pNormalWidget->LockUpdate();
 
-  CFX_WideString wsText;
+  WideString wsText;
   m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display);
   pWidget->SetEditText(wsText);
   if (CXFA_Value value = m_pDataAcc->GetFormValue()) {
@@ -148,7 +148,7 @@
   if (IsFocused())
     eType = XFA_VALUEPICTURE_Edit;
 
-  CFX_WideString wsText;
+  WideString wsText;
   m_pDataAcc->GetValue(wsText, eType);
 
   auto* normalWidget = static_cast<CFWL_DateTimePicker*>(m_pNormalWidget.get());
@@ -169,9 +169,9 @@
   if (m_dwStatus & XFA_WidgetStatus_TextEditValueChanged)
     return true;
 
-  CFX_WideString wsText =
+  WideString wsText =
       static_cast<CFWL_DateTimePicker*>(m_pNormalWidget.get())->GetEditText();
-  CFX_WideString wsOldValue;
+  WideString wsOldValue;
   m_pDataAcc->GetValue(wsOldValue, XFA_VALUEPICTURE_Edit);
   return wsOldValue != wsText;
 }
@@ -180,13 +180,13 @@
                                           int32_t iYear,
                                           int32_t iMonth,
                                           int32_t iDay) {
-  CFX_WideString wsPicture;
+  WideString wsPicture;
   m_pDataAcc->GetPictureContent(wsPicture, XFA_VALUEPICTURE_Edit);
 
   CXFA_LocaleValue date(XFA_VT_DATE, GetDoc()->GetXFADoc()->GetLocalMgr());
   date.SetDate(CFX_DateTime(iYear, iMonth, iDay, 0, 0, 0, 0));
 
-  CFX_WideString wsDate;
+  WideString wsDate;
   date.FormatPatterns(wsDate, wsPicture, m_pDataAcc->GetLocal(),
                       XFA_VALUEPICTURE_Edit);
 
diff --git a/xfa/fxfa/cxfa_ffdoc.cpp b/xfa/fxfa/cxfa_ffdoc.cpp
index 4d998e1..b3ff3c9 100644
--- a/xfa/fxfa/cxfa_ffdoc.cpp
+++ b/xfa/fxfa/cxfa_ffdoc.cpp
@@ -181,7 +181,7 @@
        pXMLNode; pXMLNode = pXMLNode->GetNodeItem(CFX_XMLNode::NextSibling)) {
     if (pXMLNode->GetType() == FX_XMLNODE_Element) {
       CFX_XMLElement* pXMLElement = static_cast<CFX_XMLElement*>(pXMLNode);
-      CFX_WideString wsTagName = pXMLElement->GetName();
+      WideString wsTagName = pXMLElement->GetName();
       if (wsTagName == L"document") {
         pDocumentElement = pXMLElement;
         break;
@@ -197,7 +197,7 @@
        pXMLNode; pXMLNode = pXMLNode->GetNodeItem(CFX_XMLNode::NextSibling)) {
     if (pXMLNode->GetType() == FX_XMLNODE_Element) {
       CFX_XMLElement* pXMLElement = static_cast<CFX_XMLElement*>(pXMLNode);
-      CFX_WideString wsTagName = pXMLElement->GetName();
+      WideString wsTagName = pXMLElement->GetName();
       if (wsTagName == L"chunk") {
         pChunkElement = pXMLElement;
         break;
@@ -207,7 +207,7 @@
   if (!pChunkElement) {
     return false;
   }
-  CFX_WideString wsPDFContent = pChunkElement->GetTextData();
+  WideString wsPDFContent = pChunkElement->GetTextData();
   iBufferSize =
       Base64DecodeW(wsPDFContent.c_str(), wsPDFContent.GetLength(), nullptr);
   pByteBuffer = FX_Alloc(uint8_t, iBufferSize + 1);
@@ -261,7 +261,7 @@
   if (!pDynamicRender)
     return;
 
-  CFX_WideString wsType;
+  WideString wsType;
   if (pDynamicRender->TryContent(wsType) && wsType == L"required")
     m_dwDocType = XFA_DocType::Dynamic;
 }
@@ -333,7 +333,7 @@
 }
 
 CFX_RetainPtr<CFX_DIBitmap> CXFA_FFDoc::GetPDFNamedImage(
-    const CFX_WideStringC& wsName,
+    const WideStringView& wsName,
     int32_t& iImageXDpi,
     int32_t& iImageYDpi) {
   if (!m_pPDFDoc)
@@ -360,10 +360,10 @@
     return nullptr;
 
   CPDF_NameTree nametree(pXFAImages);
-  CPDF_Object* pObject = nametree.LookupValue(CFX_WideString(wsName));
+  CPDF_Object* pObject = nametree.LookupValue(WideString(wsName));
   if (!pObject) {
     for (size_t i = 0; i < nametree.GetCount(); i++) {
-      CFX_WideString wsTemp;
+      WideString wsTemp;
       CPDF_Object* pTempObject = nametree.LookupValueAndName(i, &wsTemp);
       if (wsTemp == wsName) {
         pObject = pTempObject;
@@ -399,7 +399,7 @@
   if (!pNode)
     return !!pExport->Export(pFile);
 
-  CFX_ByteString bsChecksum;
+  ByteString bsChecksum;
   if (pCSContext)
     bsChecksum = pCSContext->GetChecksum();
 
diff --git a/xfa/fxfa/cxfa_ffdoc.h b/xfa/fxfa/cxfa_ffdoc.h
index 984d8b6..7984d74 100644
--- a/xfa/fxfa/cxfa_ffdoc.h
+++ b/xfa/fxfa/cxfa_ffdoc.h
@@ -69,7 +69,7 @@
   CPDF_Document* GetPDFDoc() const { return m_pPDFDoc.Get(); }
   CXFA_FFDocView* GetDocView(CXFA_LayoutProcessor* pLayout);
   CXFA_FFDocView* GetDocView();
-  CFX_RetainPtr<CFX_DIBitmap> GetPDFNamedImage(const CFX_WideStringC& wsName,
+  CFX_RetainPtr<CFX_DIBitmap> GetPDFNamedImage(const WideStringView& wsName,
                                                int32_t& iImageXDpi,
                                                int32_t& iImageYDpi);
 
diff --git a/xfa/fxfa/cxfa_ffdochandler.cpp b/xfa/fxfa/cxfa_ffdochandler.cpp
index b0a84fa..8dbc550 100644
--- a/xfa/fxfa/cxfa_ffdochandler.cpp
+++ b/xfa/fxfa/cxfa_ffdochandler.cpp
@@ -44,7 +44,7 @@
 
 bool CXFA_FFDocHandler::RunDocScript(CXFA_FFDoc* hDoc,
                                      XFA_SCRIPTTYPE eScriptType,
-                                     const CFX_WideStringC& wsScript,
+                                     const WideStringView& wsScript,
                                      CFXJSE_Value* pRetValue,
                                      CFXJSE_Value* pThisValue) {
   CXFA_Document* pXFADoc = hDoc->GetXFADoc();
diff --git a/xfa/fxfa/cxfa_ffdochandler.h b/xfa/fxfa/cxfa_ffdochandler.h
index 45b2ee0..7da03b0 100644
--- a/xfa/fxfa/cxfa_ffdochandler.h
+++ b/xfa/fxfa/cxfa_ffdochandler.h
@@ -21,7 +21,7 @@
 
   bool RunDocScript(CXFA_FFDoc* hDoc,
                     XFA_SCRIPTTYPE eScriptType,
-                    const CFX_WideStringC& wsScript,
+                    const WideStringView& wsScript,
                     CFXJSE_Value* pRetValue,
                     CFXJSE_Value* pThisObject);
 };
diff --git a/xfa/fxfa/cxfa_ffdocview.cpp b/xfa/fxfa/cxfa_ffdocview.cpp
index 95faeb3..56dfeed 100644
--- a/xfa/fxfa/cxfa_ffdocview.cpp
+++ b/xfa/fxfa/cxfa_ffdocview.cpp
@@ -154,12 +154,12 @@
   if (pAppProvider && iCount) {
     int32_t iRemain = iCount > 7 ? iCount - 7 : 0;
     iCount -= iRemain;
-    CFX_WideString wsMsg;
+    WideString wsMsg;
     for (int32_t i = 0; i < iCount; i++) {
       wsMsg += m_arrNullTestMsg[i] + L"\n";
     }
     if (iRemain > 0) {
-      CFX_WideString wsTemp;
+      WideString wsTemp;
       wsTemp.Format(
           L"Message limit exceeded. Remaining %d "
           L"validation errors not reported.",
@@ -259,7 +259,7 @@
     return XFA_EVENTERROR_Error;
 
   if (pParam->m_eType == XFA_EVENT_Validate) {
-    CFX_WideString wsValidateStr(L"preSubmit");
+    WideString wsValidateStr(L"preSubmit");
     CXFA_Node* pConfigItem =
         ToNode(m_pDoc->GetXFADoc()->GetXFAObject(XFA_HASHCODE_Config));
     if (pConfigItem) {
@@ -478,7 +478,7 @@
   return iRet;
 }
 
-CXFA_FFWidget* CXFA_FFDocView::GetWidgetByName(const CFX_WideString& wsName,
+CXFA_FFWidget* CXFA_FFDocView::GetWidgetByName(const WideString& wsName,
                                                CXFA_FFWidget* pRefWidget) {
   CXFA_WidgetAcc* pRefAcc = pRefWidget ? pRefWidget->GetDataAcc() : nullptr;
   CXFA_WidgetAcc* pAcc = GetWidgetAccByName(wsName, pRefAcc);
@@ -486,9 +486,9 @@
 }
 
 CXFA_WidgetAcc* CXFA_FFDocView::GetWidgetAccByName(
-    const CFX_WideString& wsName,
+    const WideString& wsName,
     CXFA_WidgetAcc* pRefWidgetAcc) {
-  CFX_WideString wsExpression;
+  WideString wsExpression;
   uint32_t dwStyle = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties |
                      XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent;
   CXFA_ScriptContext* pScriptContext = m_pDoc->GetXFADoc()->GetScriptContext();
@@ -504,7 +504,7 @@
   }
   XFA_RESOLVENODE_RS resoveNodeRS;
   int32_t iRet = pScriptContext->ResolveObjects(
-      refNode, wsExpression.AsStringC(), resoveNodeRS, dwStyle);
+      refNode, wsExpression.AsStringView(), resoveNodeRS, dwStyle);
   if (iRet < 1)
     return nullptr;
 
@@ -735,7 +735,7 @@
     CXFA_BindItems binditems(item);
     CXFA_ScriptContext* pScriptContext =
         pWidgetNode->GetDocument()->GetScriptContext();
-    CFX_WideStringC wsRef;
+    WideStringView wsRef;
     binditems.GetRef(wsRef);
     uint32_t dwStyle = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties |
                        XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent |
@@ -746,14 +746,14 @@
     if (rs.dwFlags != XFA_RESOVENODE_RSTYPE_Nodes || rs.objects.empty())
       continue;
 
-    CFX_WideStringC wsValueRef, wsLabelRef;
+    WideStringView wsValueRef, wsLabelRef;
     binditems.GetValueRef(wsValueRef);
     binditems.GetLabelRef(wsLabelRef);
     const bool bUseValue = wsLabelRef.IsEmpty() || wsLabelRef == wsValueRef;
     const bool bLabelUseContent = wsLabelRef.IsEmpty() || wsLabelRef == L"$";
     const bool bValueUseContent = wsValueRef.IsEmpty() || wsValueRef == L"$";
-    CFX_WideString wsValue;
-    CFX_WideString wsLabel;
+    WideString wsValue;
+    WideString wsLabel;
     uint32_t uValueHash = FX_HashCode_GetW(wsValueRef, false);
     for (CXFA_Object* refObject : rs.objects) {
       CXFA_Node* refNode = refObject->AsNode();
diff --git a/xfa/fxfa/cxfa_ffdocview.h b/xfa/fxfa/cxfa_ffdocview.h
index 314ce29..981491c 100644
--- a/xfa/fxfa/cxfa_ffdocview.h
+++ b/xfa/fxfa/cxfa_ffdocview.h
@@ -60,9 +60,9 @@
   CXFA_FFWidget* GetFocusWidget() const;
   void KillFocus();
   bool SetFocus(CXFA_FFWidget* hWidget);
-  CXFA_FFWidget* GetWidgetByName(const CFX_WideString& wsName,
+  CXFA_FFWidget* GetWidgetByName(const WideString& wsName,
                                  CXFA_FFWidget* pRefWidget);
-  CXFA_WidgetAcc* GetWidgetAccByName(const CFX_WideString& wsName,
+  CXFA_WidgetAcc* GetWidgetAccByName(const WideString& wsName,
                                      CXFA_WidgetAcc* pRefWidgetAcc);
   CXFA_LayoutProcessor* GetXFALayout() const;
   void OnPageEvent(CXFA_ContainerLayoutItem* pSender, uint32_t dwEvent);
@@ -100,7 +100,7 @@
                                        bool bRecursive,
                                        CXFA_Node* pExclude);
   bool m_bLayoutEvent;
-  std::vector<CFX_WideString> m_arrNullTestMsg;
+  std::vector<WideString> m_arrNullTestMsg;
   CXFA_FFWidget* m_pListFocusWidget;
   bool m_bInLayoutStatus;
 
diff --git a/xfa/fxfa/cxfa_fffield.cpp b/xfa/fxfa/cxfa_fffield.cpp
index bfc9e4e..c35cfe1 100644
--- a/xfa/fxfa/cxfa_fffield.cpp
+++ b/xfa/fxfa/cxfa_fffield.cpp
@@ -687,7 +687,7 @@
         if (!script)
           return 1;
 
-        CFX_WideString wsExpression;
+        WideString wsExpression;
         script.GetExpression(wsExpression);
         if (wsExpression.IsEmpty())
           return 1;
@@ -700,7 +700,7 @@
       if (!pAppProvider)
         return 0;
 
-      CFX_WideString wsMessage;
+      WideString wsMessage;
       calc.GetMessageText(wsMessage);
       if (!wsMessage.IsEmpty())
         wsMessage += L"\r\n";
diff --git a/xfa/fxfa/cxfa_fflistbox.cpp b/xfa/fxfa/cxfa_fflistbox.cpp
index 66e1fdb..1fb6670 100644
--- a/xfa/fxfa/cxfa_fflistbox.cpp
+++ b/xfa/fxfa/cxfa_fflistbox.cpp
@@ -53,7 +53,7 @@
   m_pNormalWidget->LockUpdate();
 
   for (const auto& label : m_pDataAcc->GetChoiceListItems(false))
-    pListBox->AddString(label.AsStringC());
+    pListBox->AddString(label.AsStringView());
 
   uint32_t dwExtendedStyle = FWL_STYLEEXT_LTB_ShowScrollBarFocus;
   if (m_pDataAcc->GetChoiceListOpen() == XFA_ATTRIBUTEENUM_MultiSelect)
@@ -169,10 +169,9 @@
   AddInvalidateRect();
 }
 
-void CXFA_FFListBox::InsertItem(const CFX_WideStringC& wsLabel,
-                                int32_t nIndex) {
-  CFX_WideString wsTemp(wsLabel);
-  ToListBox(m_pNormalWidget.get())->AddString(wsTemp.AsStringC());
+void CXFA_FFListBox::InsertItem(const WideStringView& wsLabel, int32_t nIndex) {
+  WideString wsTemp(wsLabel);
+  ToListBox(m_pNormalWidget.get())->AddString(wsTemp.AsStringView());
   m_pNormalWidget->Update();
   AddInvalidateRect();
 }
diff --git a/xfa/fxfa/cxfa_fflistbox.h b/xfa/fxfa/cxfa_fflistbox.h
index bf97d93..f31b122 100644
--- a/xfa/fxfa/cxfa_fflistbox.h
+++ b/xfa/fxfa/cxfa_fflistbox.h
@@ -24,7 +24,7 @@
 
   void OnSelectChanged(CFWL_Widget* pWidget);
   void SetItemState(int32_t nIndex, bool bSelected);
-  void InsertItem(const CFX_WideStringC& wsLabel, int32_t nIndex);
+  void InsertItem(const WideStringView& wsLabel, int32_t nIndex);
   void DeleteItem(int32_t nIndex);
 
  private:
diff --git a/xfa/fxfa/cxfa_ffnotify.cpp b/xfa/fxfa/cxfa_ffnotify.cpp
index 9c2ac91..9aac64a 100644
--- a/xfa/fxfa/cxfa_ffnotify.cpp
+++ b/xfa/fxfa/cxfa_ffnotify.cpp
@@ -287,11 +287,11 @@
   pDocView->UpdateDocView();
 }
 
-CFX_WideString CXFA_FFNotify::GetCurrentDateTime() {
+WideString CXFA_FFNotify::GetCurrentDateTime() {
   CFX_DateTime dataTime;
   dataTime.Now();
 
-  CFX_WideString wsDateTime;
+  WideString wsDateTime;
   wsDateTime.Format(L"%d%02d%02dT%02d%02d%02d", dataTime.GetYear(),
                     dataTime.GetMonth(), dataTime.GetDay(), dataTime.GetHour(),
                     dataTime.GetMinute(), dataTime.GetSecond());
diff --git a/xfa/fxfa/cxfa_ffnotify.h b/xfa/fxfa/cxfa_ffnotify.h
index 12aca5e..01adc33 100644
--- a/xfa/fxfa/cxfa_ffnotify.h
+++ b/xfa/fxfa/cxfa_ffnotify.h
@@ -62,7 +62,7 @@
   CXFA_FFWidgetHandler* GetWidgetHandler();
   CXFA_FFWidget* GetHWidget(CXFA_LayoutItem* pLayoutItem);
   void OpenDropDownList(CXFA_FFWidget* hWidget);
-  CFX_WideString GetCurrentDateTime();
+  WideString GetCurrentDateTime();
   void ResetData(CXFA_WidgetData* pWidgetData = nullptr);
   int32_t GetLayoutStatus();
   void RunNodeInitialize(CXFA_Node* pNode);
diff --git a/xfa/fxfa/cxfa_ffnumericedit.cpp b/xfa/fxfa/cxfa_ffnumericedit.cpp
index 4da98ac..9b87c40 100644
--- a/xfa/fxfa/cxfa_ffnumericedit.cpp
+++ b/xfa/fxfa/cxfa_ffnumericedit.cpp
@@ -33,7 +33,7 @@
   m_pNormalWidget->SetDelegate(this);
   m_pNormalWidget->LockUpdate();
 
-  CFX_WideString wsText;
+  WideString wsText;
   m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display);
   pWidget->SetText(wsText);
   UpdateWidgetProperty();
@@ -75,9 +75,8 @@
   CXFA_FFTextEdit::OnProcessEvent(pEvent);
 }
 
-bool CXFA_FFNumericEdit::OnValidate(CFWL_Widget* pWidget,
-                                    CFX_WideString& wsText) {
-  CFX_WideString wsPattern;
+bool CXFA_FFNumericEdit::OnValidate(CFWL_Widget* pWidget, WideString& wsText) {
+  WideString wsPattern;
   m_pDataAcc->GetPictureContent(wsPattern, XFA_VALUEPICTURE_Edit);
   if (!wsPattern.IsEmpty())
     return true;
@@ -88,7 +87,7 @@
   int32_t iFracs = 0;
   m_pDataAcc->GetFracDigits(iFracs);
 
-  CFX_WideString wsFormat;
+  WideString wsFormat;
   CXFA_LocaleValue widgetValue = XFA_GetLocaleValue(m_pDataAcc.Get());
   widgetValue.GetNumericFormat(wsFormat, iLeads, iFracs);
   return widgetValue.ValidateNumericTemp(wsText, wsFormat,
diff --git a/xfa/fxfa/cxfa_ffnumericedit.h b/xfa/fxfa/cxfa_ffnumericedit.h
index ece0a49..fb06fd4 100644
--- a/xfa/fxfa/cxfa_ffnumericedit.h
+++ b/xfa/fxfa/cxfa_ffnumericedit.h
@@ -25,7 +25,7 @@
   void OnProcessEvent(CFWL_Event* pEvent) override;
 
  private:
-  bool OnValidate(CFWL_Widget* pWidget, CFX_WideString& wsText);
+  bool OnValidate(CFWL_Widget* pWidget, WideString& wsText);
 };
 
 #endif  // XFA_FXFA_CXFA_FFNUMERICEDIT_H_
diff --git a/xfa/fxfa/cxfa_ffpageview.cpp b/xfa/fxfa/cxfa_ffpageview.cpp
index 594d71d..1de900c 100644
--- a/xfa/fxfa/cxfa_ffpageview.cpp
+++ b/xfa/fxfa/cxfa_ffpageview.cpp
@@ -311,7 +311,7 @@
   if (pTraversal) {
     CXFA_Node* pTraverse = pTraversal->GetChild(0, XFA_Element::Traverse);
     if (pTraverse) {
-      CFX_WideString wsTraverseWidgetName;
+      WideString wsTraverseWidgetName;
       if (pTraverse->GetAttribute(XFA_ATTRIBUTE_Ref, wsTraverseWidgetName)) {
         return FindWidgetByName(wsTraverseWidgetName, pWidget);
       }
@@ -320,7 +320,7 @@
   return nullptr;
 }
 CXFA_FFWidget* CXFA_FFTabOrderPageWidgetIterator::FindWidgetByName(
-    const CFX_WideString& wsWidgetName,
+    const WideString& wsWidgetName,
     CXFA_FFWidget* pRefWidget) {
   return pRefWidget->GetDocView()->GetWidgetByName(wsWidgetName, pRefWidget);
 }
diff --git a/xfa/fxfa/cxfa_ffpageview.h b/xfa/fxfa/cxfa_ffpageview.h
index f2451fb..4e79ad5 100644
--- a/xfa/fxfa/cxfa_ffpageview.h
+++ b/xfa/fxfa/cxfa_ffpageview.h
@@ -92,7 +92,7 @@
 
  protected:
   CXFA_FFWidget* GetTraverseWidget(CXFA_FFWidget* pWidget);
-  CXFA_FFWidget* FindWidgetByName(const CFX_WideString& wsWidgetName,
+  CXFA_FFWidget* FindWidgetByName(const WideString& wsWidgetName,
                                   CXFA_FFWidget* pRefWidget);
   void CreateTabOrderWidgetArray();
   void CreateSpaceOrderWidgetArray(std::vector<CXFA_FFWidget*>* WidgetArray);
diff --git a/xfa/fxfa/cxfa_ffpasswordedit.cpp b/xfa/fxfa/cxfa_ffpasswordedit.cpp
index 46105f1..e050a69 100644
--- a/xfa/fxfa/cxfa_ffpasswordedit.cpp
+++ b/xfa/fxfa/cxfa_ffpasswordedit.cpp
@@ -31,7 +31,7 @@
   m_pNormalWidget->SetDelegate(this);
   m_pNormalWidget->LockUpdate();
 
-  CFX_WideString wsText;
+  WideString wsText;
   m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display);
   pWidget->SetText(wsText);
   UpdateWidgetProperty();
@@ -49,7 +49,7 @@
                              FWL_STYLEEXT_EDT_Password;
   dwExtendedStyle |= UpdateUIProperty();
 
-  CFX_WideString wsPassWord;
+  WideString wsPassWord;
   m_pDataAcc->GetPasswordChar(wsPassWord);
   if (!wsPassWord.IsEmpty())
     pWidget->SetAliasChar(wsPassWord[0]);
diff --git a/xfa/fxfa/cxfa_ffpushbutton.cpp b/xfa/fxfa/cxfa_ffpushbutton.cpp
index 63079cf..2fac858 100644
--- a/xfa/fxfa/cxfa_ffpushbutton.cpp
+++ b/xfa/fxfa/cxfa_ffpushbutton.cpp
@@ -135,7 +135,7 @@
     return;
 
   bool bRichText;
-  CFX_WideString wsRollover;
+  WideString wsRollover;
   if (m_pDataAcc->GetButtonRollover(wsRollover, bRichText)) {
     if (!m_pRollProvider) {
       m_pRollProvider = pdfium::MakeUnique<CXFA_TextProvider>(
@@ -144,7 +144,7 @@
     m_pRolloverTextLayout =
         pdfium::MakeUnique<CXFA_TextLayout>(m_pRollProvider.get());
   }
-  CFX_WideString wsDown;
+  WideString wsDown;
   if (m_pDataAcc->GetButtonDown(wsDown, bRichText)) {
     if (!m_pDownProvider) {
       m_pDownProvider = pdfium::MakeUnique<CXFA_TextProvider>(
diff --git a/xfa/fxfa/cxfa_fftextedit.cpp b/xfa/fxfa/cxfa_fftextedit.cpp
index 35c20fa..e27971d 100644
--- a/xfa/fxfa/cxfa_fftextedit.cpp
+++ b/xfa/fxfa/cxfa_fftextedit.cpp
@@ -47,7 +47,7 @@
   m_pNormalWidget->LockUpdate();
   UpdateWidgetProperty();
 
-  CFX_WideString wsText;
+  WideString wsText;
   m_pDataAcc->GetValue(wsText, XFA_VALUEPICTURE_Display);
   pFWLEdit->SetText(wsText);
   m_pNormalWidget->UnlockUpdate();
@@ -173,8 +173,7 @@
 }
 
 bool CXFA_FFTextEdit::CommitData() {
-  CFX_WideString wsText =
-      static_cast<CFWL_Edit*>(m_pNormalWidget.get())->GetText();
+  WideString wsText = static_cast<CFWL_Edit*>(m_pNormalWidget.get())->GetText();
   if (m_pDataAcc->SetValue(wsText, XFA_VALUEPICTURE_Edit)) {
     m_pDataAcc->UpdateUIDisplay(this);
     return true;
@@ -183,7 +182,7 @@
   return false;
 }
 
-void CXFA_FFTextEdit::ValidateNumberField(const CFX_WideString& wsText) {
+void CXFA_FFTextEdit::ValidateNumberField(const WideString& wsText) {
   CXFA_WidgetAcc* pAcc = GetDataAcc();
   if (!pAcc || pAcc->GetUIType() != XFA_Element::NumericEdit)
     return;
@@ -192,10 +191,10 @@
   if (!pAppProvider)
     return;
 
-  CFX_WideString wsSomField;
+  WideString wsSomField;
   pAcc->GetNode()->GetSOMExpression(wsSomField);
 
-  CFX_WideString wsMessage;
+  WideString wsMessage;
   wsMessage.Format(L"%s can not contain %s", wsText.c_str(),
                    wsSomField.c_str());
   pAppProvider->MsgBox(wsMessage, pAppProvider->GetAppTitle(), XFA_MBICON_Error,
@@ -272,10 +271,10 @@
     bUpdate = true;
   }
 
-  CFX_WideString wsText;
+  WideString wsText;
   m_pDataAcc->GetValue(wsText, eType);
 
-  CFX_WideString wsOldText = pEdit->GetText();
+  WideString wsOldText = pEdit->GetText();
   if (wsText != wsOldText || (eType == XFA_VALUEPICTURE_Edit && bUpdate)) {
     pEdit->SetText(wsText);
     bUpdate = true;
@@ -287,8 +286,8 @@
 }
 
 void CXFA_FFTextEdit::OnTextChanged(CFWL_Widget* pWidget,
-                                    const CFX_WideString& wsChanged,
-                                    const CFX_WideString& wsPrevText) {
+                                    const WideString& wsChanged,
+                                    const WideString& wsPrevText) {
   m_dwStatus |= XFA_WidgetStatus_TextEditValueChanged;
   CXFA_EventParam eParam;
   eParam.m_eType = XFA_EVENT_Change;
@@ -318,7 +317,7 @@
   m_pDataAcc->ProcessEvent(XFA_ATTRIBUTEENUM_Full, &eParam);
 }
 
-bool CXFA_FFTextEdit::CheckWord(const CFX_ByteStringC& sWord) {
+bool CXFA_FFTextEdit::CheckWord(const ByteStringView& sWord) {
   return sWord.IsEmpty() || m_pDataAcc->GetUIType() != XFA_Element::TextEdit;
 }
 
@@ -332,7 +331,7 @@
     case CFWL_Event::Type::TextChanged: {
       CFWL_EventTextChanged* event =
           static_cast<CFWL_EventTextChanged*>(pEvent);
-      CFX_WideString wsChange;
+      WideString wsChange;
       OnTextChanged(m_pNormalWidget.get(), wsChange, event->wsPrevText);
       break;
     }
@@ -341,9 +340,9 @@
       break;
     }
     case CFWL_Event::Type::CheckWord: {
-      CFX_WideString wstr(L"FWL_EVENT_DTP_SelectChanged");
+      WideString wstr(L"FWL_EVENT_DTP_SelectChanged");
       CFWL_EventCheckWord* event = static_cast<CFWL_EventCheckWord*>(pEvent);
-      event->bCheckWord = CheckWord(event->bsWord.AsStringC());
+      event->bCheckWord = CheckWord(event->bsWord.AsStringView());
       break;
     }
     default:
diff --git a/xfa/fxfa/cxfa_fftextedit.h b/xfa/fxfa/cxfa_fftextedit.h
index 2a3da37..9735b9e 100644
--- a/xfa/fxfa/cxfa_fftextedit.h
+++ b/xfa/fxfa/cxfa_fftextedit.h
@@ -37,10 +37,10 @@
                     const CFX_Matrix& matrix) override;
 
   void OnTextChanged(CFWL_Widget* pWidget,
-                     const CFX_WideString& wsChanged,
-                     const CFX_WideString& wsPrevText);
+                     const WideString& wsChanged,
+                     const WideString& wsPrevText);
   void OnTextFull(CFWL_Widget* pWidget);
-  bool CheckWord(const CFX_ByteStringC& sWord);
+  bool CheckWord(const ByteStringView& sWord);
 
  protected:
   uint32_t GetAlignment();
@@ -51,7 +51,7 @@
   bool CommitData() override;
   bool UpdateFWLData() override;
   bool IsDataChanged() override;
-  void ValidateNumberField(const CFX_WideString& wsText);
+  void ValidateNumberField(const WideString& wsText);
 };
 
 #endif  // XFA_FXFA_CXFA_FFTEXTEDIT_H_
diff --git a/xfa/fxfa/cxfa_ffwidget.cpp b/xfa/fxfa/cxfa_ffwidget.cpp
index 26ab37d..07d089b 100644
--- a/xfa/fxfa/cxfa_ffwidget.cpp
+++ b/xfa/fxfa/cxfa_ffwidget.cpp
@@ -966,7 +966,7 @@
   return m_pDataAcc.Get();
 }
 
-bool CXFA_FFWidget::GetToolTip(CFX_WideString& wsToolTip) {
+bool CXFA_FFWidget::GetToolTip(WideString& wsToolTip) {
   if (CXFA_Assist assist = m_pDataAcc->GetAssist()) {
     if (CXFA_ToolTip toolTip = assist.GetToolTip()) {
       return toolTip.GetTip(wsToolTip);
@@ -1032,7 +1032,7 @@
   m_pDocView->AddInvalidateRect(m_pPageView, rtWidget);
 }
 
-bool CXFA_FFWidget::GetCaptionText(CFX_WideString& wsCap) {
+bool CXFA_FFWidget::GetCaptionText(WideString& wsCap) {
   CXFA_TextLayout* pCapTextlayout = m_pDataAcc->GetCaptionTextLayout();
   if (!pCapTextlayout) {
     return false;
@@ -1168,15 +1168,15 @@
   return CanCopy();
 }
 
-bool CXFA_FFWidget::Copy(CFX_WideString& wsCopy) {
+bool CXFA_FFWidget::Copy(WideString& wsCopy) {
   return false;
 }
 
-bool CXFA_FFWidget::Cut(CFX_WideString& wsCut) {
+bool CXFA_FFWidget::Cut(WideString& wsCut) {
   return false;
 }
 
-bool CXFA_FFWidget::Paste(const CFX_WideString& wsPaste) {
+bool CXFA_FFWidget::Paste(const WideString& wsPaste) {
   return false;
 }
 
@@ -1187,12 +1187,12 @@
 void CXFA_FFWidget::DeSelect() {}
 
 void CXFA_FFWidget::GetSuggestWords(CFX_PointF pointf,
-                                    std::vector<CFX_ByteString>* pWords) {
+                                    std::vector<ByteString>* pWords) {
   pWords->clear();
 }
 
 bool CXFA_FFWidget::ReplaceSpellCheckWord(CFX_PointF pointf,
-                                          const CFX_ByteStringC& bsReplace) {
+                                          const ByteStringView& bsReplace) {
   return false;
 }
 
@@ -1869,8 +1869,8 @@
   out[j] = '\0';
   return out;
 }
-FXCODEC_IMAGE_TYPE XFA_GetImageType(const CFX_WideString& wsType) {
-  CFX_WideString wsContentType(wsType);
+FXCODEC_IMAGE_TYPE XFA_GetImageType(const WideString& wsType) {
+  WideString wsContentType(wsType);
   wsContentType.MakeLower();
   if (wsContentType == L"image/jpg")
     return FXCODEC_IMAGE_JPG;
@@ -1890,24 +1890,24 @@
                                               bool& bNameImage,
                                               int32_t& iImageXDpi,
                                               int32_t& iImageYDpi) {
-  CFX_WideString wsHref;
-  CFX_WideString wsImage;
+  WideString wsHref;
+  WideString wsImage;
   pImage->GetHref(wsHref);
   pImage->GetContent(wsImage);
   if (wsHref.IsEmpty() && wsImage.IsEmpty())
     return nullptr;
 
-  CFX_WideString wsContentType;
+  WideString wsContentType;
   pImage->GetContentType(wsContentType);
   FXCODEC_IMAGE_TYPE type = XFA_GetImageType(wsContentType);
-  CFX_ByteString bsContent;
+  ByteString bsContent;
   uint8_t* pImageBuffer = nullptr;
   CFX_RetainPtr<IFX_SeekableReadStream> pImageFileRead;
   if (wsImage.GetLength() > 0) {
     XFA_ATTRIBUTEENUM iEncoding =
         (XFA_ATTRIBUTEENUM)pImage->GetTransferEncoding();
     if (iEncoding == XFA_ATTRIBUTEENUM_Base64) {
-      CFX_ByteString bsData = wsImage.UTF8Encode();
+      ByteString bsData = wsImage.UTF8Encode();
       int32_t iLength = bsData.GetLength();
       pImageBuffer = FX_Alloc(uint8_t, iLength);
       int32_t iRead = XFA_Base64Decode(bsData.c_str(), pImageBuffer);
@@ -1916,16 +1916,16 @@
             pdfium::MakeRetain<CFX_MemoryStream>(pImageBuffer, iRead, false);
       }
     } else {
-      bsContent = CFX_ByteString::FromUnicode(wsImage);
+      bsContent = ByteString::FromUnicode(wsImage);
       pImageFileRead = pdfium::MakeRetain<CFX_MemoryStream>(
           const_cast<uint8_t*>(bsContent.raw_str()), bsContent.GetLength(),
           false);
     }
   } else {
-    CFX_WideString wsURL = wsHref;
+    WideString wsURL = wsHref;
     if (wsURL.Left(7) != L"http://" && wsURL.Left(6) != L"ftp://") {
       CFX_RetainPtr<CFX_DIBitmap> pBitmap =
-          pDoc->GetPDFNamedImage(wsURL.AsStringC(), iImageXDpi, iImageYDpi);
+          pDoc->GetPDFNamedImage(wsURL.AsStringView(), iImageXDpi, iImageYDpi);
       if (pBitmap) {
         bNameImage = true;
         return pBitmap;
diff --git a/xfa/fxfa/cxfa_ffwidget.h b/xfa/fxfa/cxfa_ffwidget.h
index f2ca86f..41bb941 100644
--- a/xfa/fxfa/cxfa_ffwidget.h
+++ b/xfa/fxfa/cxfa_ffwidget.h
@@ -61,7 +61,7 @@
     int32_t& iImageXDpi,
     int32_t& iImageYDpi);
 
-FXCODEC_IMAGE_TYPE XFA_GetImageType(const CFX_WideString& wsType);
+FXCODEC_IMAGE_TYPE XFA_GetImageType(const WideString& wsType);
 char* XFA_Base64Encode(const uint8_t* buf, int32_t buf_len);
 void XFA_RectWidthoutMargin(CFX_RectF& rt,
                             const CXFA_Margin& mg,
@@ -126,17 +126,17 @@
   virtual bool CanSelectAll();
   virtual bool CanDelete();
   virtual bool CanDeSelect();
-  virtual bool Copy(CFX_WideString& wsCopy);
-  virtual bool Cut(CFX_WideString& wsCut);
-  virtual bool Paste(const CFX_WideString& wsPaste);
+  virtual bool Copy(WideString& wsCopy);
+  virtual bool Cut(WideString& wsCut);
+  virtual bool Paste(const WideString& wsPaste);
   virtual void SelectAll();
   virtual void Delete();
   virtual void DeSelect();
 
   // TODO(tsepez): Implement or remove.
-  void GetSuggestWords(CFX_PointF pointf, std::vector<CFX_ByteString>* pWords);
+  void GetSuggestWords(CFX_PointF pointf, std::vector<ByteString>* pWords);
   bool ReplaceSpellCheckWord(CFX_PointF pointf,
-                             const CFX_ByteStringC& bsReplace);
+                             const ByteStringView& bsReplace);
 
   CXFA_FFPageView* GetPageView() const { return m_pPageView; }
   void SetPageView(CXFA_FFPageView* pPageView) { m_pPageView = pPageView; }
@@ -146,7 +146,7 @@
   void ModifyStatus(uint32_t dwAdded, uint32_t dwRemoved);
 
   CXFA_WidgetAcc* GetDataAcc();
-  bool GetToolTip(CFX_WideString& wsToolTip);
+  bool GetToolTip(WideString& wsToolTip);
 
   CXFA_FFDocView* GetDocView();
   void SetDocView(CXFA_FFDocView* pDocView);
@@ -154,7 +154,7 @@
   CXFA_FFApp* GetApp();
   IXFA_AppProvider* GetAppProvider();
   void AddInvalidateRect();
-  bool GetCaptionText(CFX_WideString& wsCap);
+  bool GetCaptionText(WideString& wsCap);
   bool IsFocused() const { return !!(m_dwStatus & XFA_WidgetStatus_Focused); }
   CFX_PointF Rotate2Normal(const CFX_PointF& point);
   CFX_Matrix GetRotateMatrix();
diff --git a/xfa/fxfa/cxfa_fontmgr.cpp b/xfa/fxfa/cxfa_fontmgr.cpp
index 81e296f..b47ce6b 100644
--- a/xfa/fxfa/cxfa_fontmgr.cpp
+++ b/xfa/fxfa/cxfa_fontmgr.cpp
@@ -1700,8 +1700,7 @@
 
 }  // namespace
 
-CFX_WideString XFA_LocalFontNameToEnglishName(
-    const CFX_WideStringC& wsLocalName) {
+WideString XFA_LocalFontNameToEnglishName(const WideStringView& wsLocalName) {
   uint32_t dwLocalNameHash = FX_HashCode_GetW(wsLocalName, true);
   const XFA_FONTINFO* pEnd = g_XFAFontsMap + FX_ArraySize(g_XFAFontsMap);
   const XFA_FONTINFO* pFontInfo =
@@ -1711,15 +1710,15 @@
                        });
   if (pFontInfo < pEnd && pFontInfo->dwFontNameHash == dwLocalNameHash)
     return pFontInfo->pPsName;
-  return CFX_WideString(wsLocalName);
+  return WideString(wsLocalName);
 }
 
 const XFA_FONTINFO* XFA_GetFontINFOByFontName(
-    const CFX_WideStringC& wsFontName) {
-  CFX_WideString wsFontNameTemp(wsFontName);
+    const WideStringView& wsFontName) {
+  WideString wsFontNameTemp(wsFontName);
   wsFontNameTemp.Remove(L' ');
   uint32_t dwCurFontNameHash =
-      FX_HashCode_GetW(wsFontNameTemp.AsStringC(), true);
+      FX_HashCode_GetW(wsFontNameTemp.AsStringView(), true);
   const XFA_FONTINFO* pEnd = g_XFAFontsMap + FX_ArraySize(g_XFAFontsMap);
   const XFA_FONTINFO* pFontInfo =
       std::lower_bound(g_XFAFontsMap, pEnd, dwCurFontNameHash,
@@ -1737,25 +1736,25 @@
 
 CFX_RetainPtr<CFGAS_GEFont> CXFA_FontMgr::GetFont(
     CXFA_FFDoc* hDoc,
-    const CFX_WideStringC& wsFontFamily,
+    const WideStringView& wsFontFamily,
     uint32_t dwFontStyles,
     uint16_t wCodePage) {
   uint32_t dwHash = FX_HashCode_GetW(wsFontFamily, false);
-  CFX_ByteString bsKey;
+  ByteString bsKey;
   bsKey.Format("%u%u%u", dwHash, dwFontStyles, wCodePage);
   auto iter = m_FontMap.find(bsKey);
   if (iter != m_FontMap.end())
     return iter->second;
 
-  CFX_WideString wsEnglishName = XFA_LocalFontNameToEnglishName(wsFontFamily);
+  WideString wsEnglishName = XFA_LocalFontNameToEnglishName(wsFontFamily);
   auto it = m_PDFFontMgrMap.find(hDoc);
   CXFA_PDFFontMgr* pMgr =
       it != m_PDFFontMgrMap.end() ? it->second.get() : nullptr;
   CPDF_Font* pPDFFont = nullptr;
   CFX_RetainPtr<CFGAS_GEFont> pFont;
   if (pMgr) {
-    pFont =
-        pMgr->GetFont(wsEnglishName.AsStringC(), dwFontStyles, &pPDFFont, true);
+    pFont = pMgr->GetFont(wsEnglishName.AsStringView(), dwFontStyles, &pPDFFont,
+                          true);
     if (pFont)
       return pFont;
   }
@@ -1764,7 +1763,7 @@
 
   if (!pFont && pMgr) {
     pPDFFont = nullptr;
-    pFont = pMgr->GetFont(wsEnglishName.AsStringC(), dwFontStyles, &pPDFFont,
+    pFont = pMgr->GetFont(wsEnglishName.AsStringView(), dwFontStyles, &pPDFFont,
                           false);
     if (pFont)
       return pFont;
diff --git a/xfa/fxfa/cxfa_fontmgr.h b/xfa/fxfa/cxfa_fontmgr.h
index f66ca8f..e5db565 100644
--- a/xfa/fxfa/cxfa_fontmgr.h
+++ b/xfa/fxfa/cxfa_fontmgr.h
@@ -29,10 +29,8 @@
   uint16_t wCodePage;
 };
 
-CFX_WideString XFA_LocalFontNameToEnglishName(
-    const CFX_WideStringC& wsLocalName);
-const XFA_FONTINFO* XFA_GetFontINFOByFontName(
-    const CFX_WideStringC& wsFontName);
+WideString XFA_LocalFontNameToEnglishName(const WideStringView& wsLocalName);
+const XFA_FONTINFO* XFA_GetFontINFOByFontName(const WideStringView& wsFontName);
 
 class CXFA_FontMgr {
  public:
@@ -40,7 +38,7 @@
   ~CXFA_FontMgr();
 
   CFX_RetainPtr<CFGAS_GEFont> GetFont(CXFA_FFDoc* hDoc,
-                                      const CFX_WideStringC& wsFontFamily,
+                                      const WideStringView& wsFontFamily,
                                       uint32_t dwFontStyles,
                                       uint16_t wCodePage = 0xFFFF);
   void LoadDocFonts(CXFA_FFDoc* hDoc);
@@ -50,7 +48,7 @@
  private:
   std::unique_ptr<CXFA_DefFontMgr> m_pDefFontMgr;
   std::map<CXFA_FFDoc*, std::unique_ptr<CXFA_PDFFontMgr>> m_PDFFontMgrMap;
-  std::map<CFX_ByteString, CFX_RetainPtr<CFGAS_GEFont>> m_FontMap;
+  std::map<ByteString, CFX_RetainPtr<CFGAS_GEFont>> m_FontMap;
 };
 
 #endif  //  XFA_FXFA_CXFA_FONTMGR_H_
diff --git a/xfa/fxfa/cxfa_fwltheme.cpp b/xfa/fxfa/cxfa_fwltheme.cpp
index ec0ce45..35456ef 100644
--- a/xfa/fxfa/cxfa_fwltheme.cpp
+++ b/xfa/fxfa/cxfa_fwltheme.cpp
@@ -116,7 +116,7 @@
       mtPart.Concat(*pMatrix);
 
     m_pTextOut->SetMatrix(mtPart);
-    m_pTextOut->DrawLogicText(pRenderDevice, pParams->m_wsText.AsStringC(),
+    m_pTextOut->DrawLogicText(pRenderDevice, pParams->m_wsText.AsStringView(),
                               pParams->m_rtPart);
     return;
   }
@@ -141,7 +141,7 @@
     mtPart.Concat(*pMatrix);
 
   m_pTextOut->SetMatrix(mtPart);
-  m_pTextOut->DrawLogicText(pRenderDevice, pParams->m_wsText.AsStringC(),
+  m_pTextOut->DrawLogicText(pRenderDevice, pParams->m_wsText.AsStringView(),
                             pParams->m_rtPart);
 }
 
diff --git a/xfa/fxfa/cxfa_fwltheme.h b/xfa/fxfa/cxfa_fwltheme.h
index 9fbb068..48fb744 100644
--- a/xfa/fxfa/cxfa_fwltheme.h
+++ b/xfa/fxfa/cxfa_fwltheme.h
@@ -60,7 +60,7 @@
   std::unique_ptr<CFWL_BarcodeTP> m_pBarcodeTP;
   std::unique_ptr<CFDE_TextOut> m_pTextOut;
   CFX_RetainPtr<CFGAS_GEFont> m_pCalendarFont;
-  CFX_WideString m_wsResource;
+  WideString m_wsResource;
   CFX_UnownedPtr<CXFA_FFApp> const m_pApp;
   CFX_RectF m_Rect;
 };
diff --git a/xfa/fxfa/cxfa_linkuserdata.h b/xfa/fxfa/cxfa_linkuserdata.h
index b3ee74a..7a9648c 100644
--- a/xfa/fxfa/cxfa_linkuserdata.h
+++ b/xfa/fxfa/cxfa_linkuserdata.h
@@ -22,7 +22,7 @@
   explicit CXFA_LinkUserData(wchar_t* pszText);
   ~CXFA_LinkUserData() override;
 
-  CFX_WideString m_wsURLContent;
+  WideString m_wsURLContent;
 };
 
 #endif  // XFA_FXFA_CXFA_LINKUSERDATA_H_
diff --git a/xfa/fxfa/cxfa_pdffontmgr.cpp b/xfa/fxfa/cxfa_pdffontmgr.cpp
index 30af697..9a90e54 100644
--- a/xfa/fxfa/cxfa_pdffontmgr.cpp
+++ b/xfa/fxfa/cxfa_pdffontmgr.cpp
@@ -28,7 +28,7 @@
 CXFA_PDFFontMgr::~CXFA_PDFFontMgr() {}
 
 CFX_RetainPtr<CFGAS_GEFont> CXFA_PDFFontMgr::FindFont(
-    const CFX_ByteString& strPsName,
+    const ByteString& strPsName,
     bool bBold,
     bool bItalic,
     CPDF_Font** pDstPDFFont,
@@ -46,13 +46,13 @@
   if (!pFontSetDict)
     return nullptr;
 
-  CFX_ByteString name = strPsName;
+  ByteString name = strPsName;
   name.Remove(' ');
   CFGAS_FontMgr* pFDEFontMgr = m_pDoc->GetApp()->GetFDEFontMgr();
   for (const auto& it : *pFontSetDict) {
-    const CFX_ByteString& key = it.first;
+    const ByteString& key = it.first;
     CPDF_Object* pObj = it.second.get();
-    if (!PsNameMatchDRFontName(name.AsStringC(), bBold, bItalic, key,
+    if (!PsNameMatchDRFontName(name.AsStringView(), bBold, bItalic, key,
                                bStrictMatch)) {
       continue;
     }
@@ -74,21 +74,20 @@
 }
 
 CFX_RetainPtr<CFGAS_GEFont> CXFA_PDFFontMgr::GetFont(
-    const CFX_WideStringC& wsFontFamily,
+    const WideStringView& wsFontFamily,
     uint32_t dwFontStyles,
     CPDF_Font** pPDFFont,
     bool bStrictMatch) {
   uint32_t dwHashCode = FX_HashCode_GetW(wsFontFamily, false);
-  CFX_ByteString strKey;
+  ByteString strKey;
   strKey.Format("%u%u", dwHashCode, dwFontStyles);
   auto it = m_FontMap.find(strKey);
   if (it != m_FontMap.end())
     return it->second;
-  CFX_ByteString bsPsName =
-      CFX_ByteString::FromUnicode(CFX_WideString(wsFontFamily));
+  ByteString bsPsName = ByteString::FromUnicode(WideString(wsFontFamily));
   bool bBold = (dwFontStyles & FX_FONTSTYLE_Bold) == FX_FONTSTYLE_Bold;
   bool bItalic = (dwFontStyles & FX_FONTSTYLE_Italic) == FX_FONTSTYLE_Italic;
-  CFX_ByteString strFontName = PsNameToFontName(bsPsName, bBold, bItalic);
+  ByteString strFontName = PsNameToFontName(bsPsName, bBold, bItalic);
   CFX_RetainPtr<CFGAS_GEFont> pFont =
       FindFont(strFontName, bBold, bItalic, pPDFFont, bStrictMatch);
   if (pFont)
@@ -96,10 +95,9 @@
   return pFont;
 }
 
-CFX_ByteString CXFA_PDFFontMgr::PsNameToFontName(
-    const CFX_ByteString& strPsName,
-    bool bBold,
-    bool bItalic) {
+ByteString CXFA_PDFFontMgr::PsNameToFontName(const ByteString& strPsName,
+                                             bool bBold,
+                                             bool bItalic) {
   for (size_t i = 0; i < FX_ArraySize(g_XFAPDFFontName); ++i) {
     if (strPsName == g_XFAPDFFontName[i][0]) {
       size_t index = 1;
@@ -113,12 +111,12 @@
   return strPsName;
 }
 
-bool CXFA_PDFFontMgr::PsNameMatchDRFontName(const CFX_ByteStringC& bsPsName,
+bool CXFA_PDFFontMgr::PsNameMatchDRFontName(const ByteStringView& bsPsName,
                                             bool bBold,
                                             bool bItalic,
-                                            const CFX_ByteString& bsDRFontName,
+                                            const ByteString& bsDRFontName,
                                             bool bStrictMatch) {
-  CFX_ByteString bsDRName = bsDRFontName;
+  ByteString bsDRName = bsDRFontName;
   bsDRName.Remove('-');
   FX_STRSIZE iPsLen = bsPsName.GetLength();
   auto nIndex = bsDRName.Find(bsPsName);
@@ -152,7 +150,7 @@
       return false;
 
     if (iDifferLength > 1) {
-      CFX_ByteString bsDRTailer = bsDRName.Right(iDifferLength);
+      ByteString bsDRTailer = bsDRName.Right(iDifferLength);
       if (bsDRTailer == "MT" || bsDRTailer == "PSMT" ||
           bsDRTailer == "Regular" || bsDRTailer == "Reg") {
         return true;
diff --git a/xfa/fxfa/cxfa_pdffontmgr.h b/xfa/fxfa/cxfa_pdffontmgr.h
index df8ab28..4c8941f 100644
--- a/xfa/fxfa/cxfa_pdffontmgr.h
+++ b/xfa/fxfa/cxfa_pdffontmgr.h
@@ -25,7 +25,7 @@
   explicit CXFA_PDFFontMgr(CXFA_FFDoc* pDoc);
   ~CXFA_PDFFontMgr();
 
-  CFX_RetainPtr<CFGAS_GEFont> GetFont(const CFX_WideStringC& wsFontFamily,
+  CFX_RetainPtr<CFGAS_GEFont> GetFont(const WideStringView& wsFontFamily,
                                       uint32_t dwFontStyles,
                                       CPDF_Font** pPDFFont,
                                       bool bStrictMatch);
@@ -36,23 +36,23 @@
   void SetFont(const CFX_RetainPtr<CFGAS_GEFont>& pFont, CPDF_Font* pPDFFont);
 
  private:
-  CFX_RetainPtr<CFGAS_GEFont> FindFont(const CFX_ByteString& strFamilyName,
+  CFX_RetainPtr<CFGAS_GEFont> FindFont(const ByteString& strFamilyName,
                                        bool bBold,
                                        bool bItalic,
                                        CPDF_Font** pPDFFont,
                                        bool bStrictMatch);
-  CFX_ByteString PsNameToFontName(const CFX_ByteString& strPsName,
-                                  bool bBold,
-                                  bool bItalic);
-  bool PsNameMatchDRFontName(const CFX_ByteStringC& bsPsName,
+  ByteString PsNameToFontName(const ByteString& strPsName,
+                              bool bBold,
+                              bool bItalic);
+  bool PsNameMatchDRFontName(const ByteStringView& bsPsName,
                              bool bBold,
                              bool bItalic,
-                             const CFX_ByteString& bsDRFontName,
+                             const ByteString& bsDRFontName,
                              bool bStrictMatch);
 
   CFX_UnownedPtr<CXFA_FFDoc> const m_pDoc;
   std::map<CFX_RetainPtr<CFGAS_GEFont>, CPDF_Font*> m_FDE2PDFFont;
-  std::map<CFX_ByteString, CFX_RetainPtr<CFGAS_GEFont>> m_FontMap;
+  std::map<ByteString, CFX_RetainPtr<CFGAS_GEFont>> m_FontMap;
 };
 
 #endif  // XFA_FXFA_CXFA_PDFFONTMGR_H_
diff --git a/xfa/fxfa/cxfa_textlayout.cpp b/xfa/fxfa/cxfa_textlayout.cpp
index 9c4e367..bbc61d4 100644
--- a/xfa/fxfa/cxfa_textlayout.cpp
+++ b/xfa/fxfa/cxfa_textlayout.cpp
@@ -79,7 +79,7 @@
        pXMLChild = pXMLChild->GetNodeItem(CFX_XMLNode::NextSibling)) {
     if (pXMLChild->GetType() == FX_XMLNODE_Element) {
       CFX_XMLElement* pXMLElement = static_cast<CFX_XMLElement*>(pXMLChild);
-      CFX_WideString wsTag = pXMLElement->GetLocalTagName();
+      WideString wsTag = pXMLElement->GetLocalTagName();
       if (wsTag == L"body" || wsTag == L"html") {
         pXMLContainer = pXMLChild;
         break;
@@ -237,7 +237,7 @@
   m_pBreak->SetCharSpace(pStyle->GetLetterSpacing().GetValue());
 }
 
-int32_t CXFA_TextLayout::GetText(CFX_WideString& wsText) {
+int32_t CXFA_TextLayout::GetText(WideString& wsText) {
   GetTextDataNode();
   wsText.clear();
   if (!m_bRichText)
@@ -676,7 +676,7 @@
     }
   }
 
-  CFX_WideString wsText = pNode->GetContent();
+  WideString wsText = pNode->GetContent();
   wsText.TrimRight(L" ");
   bool bRet = AppendChar(wsText, fLinePos, fSpaceAbove, bSavePieces);
   if (bRet && m_pLoader)
@@ -704,7 +704,7 @@
   bool bContentNode = false;
   float fSpaceBelow = 0;
   CFX_RetainPtr<CFX_CSSComputedStyle> pStyle;
-  CFX_WideString wsName;
+  WideString wsName;
   if (bEndBreak) {
     bool bCurOl = false;
     bool bCurLi = false;
@@ -749,7 +749,7 @@
 
         if (wsName == L"a") {
           ASSERT(pElement);
-          CFX_WideString wsLinkContent = pElement->GetString(L"href");
+          WideString wsLinkContent = pElement->GetString(L"href");
           if (!wsLinkContent.IsEmpty()) {
             pLinkData = pdfium::MakeRetain<CXFA_LinkUserData>(
                 wsLinkContent.GetBuffer(wsLinkContent.GetLength()));
@@ -761,7 +761,7 @@
             bContentNode ? pParentStyle.Get() : pStyle.Get());
         bool bSpaceRun = m_textParser.IsSpaceRun(
             bContentNode ? pParentStyle.Get() : pStyle.Get());
-        CFX_WideString wsText;
+        WideString wsText;
         if (bContentNode && iTabCount == 0) {
           wsText = static_cast<CFX_XMLText*>(pXMLNode)->GetText();
         } else if (wsName == L"br") {
@@ -771,7 +771,7 @@
           if (bIsOl)
             wsText.Format(L"%d.  ", iLiCount);
           else
-            wsText = 0x00B7 + CFX_WideStringC(L"  ", 1);
+            wsText = 0x00B7 + WideStringView(L"  ", 1);
         } else if (!bContentNode) {
           if (iTabCount > 0) {
             while (iTabCount-- > 0)
@@ -874,7 +874,7 @@
   return true;
 }
 
-bool CXFA_TextLayout::AppendChar(const CFX_WideString& wsText,
+bool CXFA_TextLayout::AppendChar(const WideString& wsText,
                                  float& fLinePos,
                                  float fSpaceAbove,
                                  bool bSavePieces) {
@@ -915,7 +915,7 @@
   return false;
 }
 
-void CXFA_TextLayout::ProcessText(CFX_WideString& wsText) {
+void CXFA_TextLayout::ProcessText(WideString& wsText) {
   int32_t iLen = wsText.GetLength();
   if (iLen == 0)
     return;
diff --git a/xfa/fxfa/cxfa_textlayout.h b/xfa/fxfa/cxfa_textlayout.h
index 338d3be..50ee83f 100644
--- a/xfa/fxfa/cxfa_textlayout.h
+++ b/xfa/fxfa/cxfa_textlayout.h
@@ -33,7 +33,7 @@
   explicit CXFA_TextLayout(CXFA_TextProvider* pTextProvider);
   ~CXFA_TextLayout();
 
-  int32_t GetText(CFX_WideString& wsText);
+  int32_t GetText(WideString& wsText);
   float GetLayoutHeight();
   float StartLayout(float fWidth = -1);
   bool DoLayout(int32_t iBlockIndex,
@@ -85,7 +85,7 @@
                     bool bEndBreak = true,
                     bool bIsOl = false,
                     int32_t iLiCount = 0);
-  bool AppendChar(const CFX_WideString& wsText,
+  bool AppendChar(const WideString& wsText,
                   float& fLinePos,
                   float fSpaceAbove,
                   bool bSavePieces);
@@ -95,7 +95,7 @@
                       bool bEndBreak = false);
   void EndBreak(CFX_BreakType dwStatus, float& fLinePos, bool bDefault);
   bool IsEnd(bool bSavePieces);
-  void ProcessText(CFX_WideString& wsText);
+  void ProcessText(WideString& wsText);
   void UpdateAlign(float fHeight, float fBottom);
   void RenderString(CFX_RenderDevice* pDevice,
                     CXFA_PieceLine* pPieceLine,
diff --git a/xfa/fxfa/cxfa_textparser.cpp b/xfa/fxfa/cxfa_textparser.cpp
index 659ec9c..3c78a86 100644
--- a/xfa/fxfa/cxfa_textparser.cpp
+++ b/xfa/fxfa/cxfa_textparser.cpp
@@ -244,7 +244,7 @@
   }
 }
 
-bool CXFA_TextParser::TagValidate(const CFX_WideString& wsName) const {
+bool CXFA_TextParser::TagValidate(const WideString& wsName) const {
   static const uint32_t s_XFATagName[] = {
       0x61,        // a
       0x62,        // b
@@ -263,21 +263,21 @@
   static const int32_t s_iCount = FX_ArraySize(s_XFATagName);
 
   return std::binary_search(s_XFATagName, s_XFATagName + s_iCount,
-                            FX_HashCode_GetW(wsName.AsStringC(), true));
+                            FX_HashCode_GetW(wsName.AsStringView(), true));
 }
 
 std::unique_ptr<CXFA_TextParser::TagProvider> CXFA_TextParser::ParseTagInfo(
     CFX_XMLNode* pXMLNode) {
   auto tagProvider = pdfium::MakeUnique<TagProvider>();
 
-  CFX_WideString wsName;
+  WideString wsName;
   if (pXMLNode->GetType() == FX_XMLNODE_Element) {
     CFX_XMLElement* pXMLElement = static_cast<CFX_XMLElement*>(pXMLNode);
     wsName = pXMLElement->GetLocalTagName();
     tagProvider->SetTagName(wsName);
     tagProvider->m_bTagAvailable = TagValidate(wsName);
 
-    CFX_WideString wsValue = pXMLElement->GetString(L"style");
+    WideString wsValue = pXMLElement->GetString(L"style");
     if (!wsValue.IsEmpty())
       tagProvider->SetAttribute(L"style", wsValue);
   } else if (pXMLNode->GetType() == FX_XMLNODE_Text) {
@@ -293,21 +293,21 @@
 }
 
 float CXFA_TextParser::GetTabInterval(CFX_CSSComputedStyle* pStyle) const {
-  CFX_WideString wsValue;
+  WideString wsValue;
   if (pStyle && pStyle->GetCustomStyle(L"tab-interval", wsValue))
-    return CXFA_Measurement(wsValue.AsStringC()).ToUnit(XFA_UNIT_Pt);
+    return CXFA_Measurement(wsValue.AsStringView()).ToUnit(XFA_UNIT_Pt);
   return 36;
 }
 
 int32_t CXFA_TextParser::CountTabs(CFX_CSSComputedStyle* pStyle) const {
-  CFX_WideString wsValue;
+  WideString wsValue;
   if (pStyle && pStyle->GetCustomStyle(L"xfa-tab-count", wsValue))
     return wsValue.GetInteger();
   return 0;
 }
 
 bool CXFA_TextParser::IsSpaceRun(CFX_CSSComputedStyle* pStyle) const {
-  CFX_WideString wsValue;
+  WideString wsValue;
   if (pStyle && pStyle->GetCustomStyle(L"xfa-spacerun", wsValue)) {
     wsValue.MakeLower();
     return wsValue == L"yes";
@@ -318,7 +318,7 @@
 CFX_RetainPtr<CFGAS_GEFont> CXFA_TextParser::GetFont(
     CXFA_TextProvider* pTextProvider,
     CFX_CSSComputedStyle* pStyle) const {
-  CFX_WideStringC wsFamily = L"Courier";
+  WideStringView wsFamily = L"Courier";
   uint32_t dwStyle = 0;
   CXFA_Font font = pTextProvider->GetFontNode();
   if (font) {
@@ -332,7 +332,7 @@
   if (pStyle) {
     int32_t iCount = pStyle->CountFontFamilies();
     if (iCount > 0)
-      wsFamily = pStyle->GetFontFamily(iCount - 1).AsStringC();
+      wsFamily = pStyle->GetFontFamily(iCount - 1).AsStringView();
 
     dwStyle = 0;
     if (pStyle->GetFontWeight() > FXFONT_FW_NORMAL)
@@ -361,7 +361,7 @@
                                      CFX_CSSComputedStyle* pStyle,
                                      CFX_XMLNode* pXMLNode) const {
   if (pStyle) {
-    CFX_WideString wsValue;
+    WideString wsValue;
     if (pStyle->GetCustomStyle(L"xfa-font-horizontal-scale", wsValue))
       return wsValue.GetInteger();
 
@@ -387,7 +387,7 @@
 int32_t CXFA_TextParser::GetVerScale(CXFA_TextProvider* pTextProvider,
                                      CFX_CSSComputedStyle* pStyle) const {
   if (pStyle) {
-    CFX_WideString wsValue;
+    WideString wsValue;
     if (pStyle->GetCustomStyle(L"xfa-font-vertical-scale", wsValue))
       return wsValue.GetInteger();
   }
@@ -418,7 +418,7 @@
   else if (dwDecoration & CFX_CSSTEXTDECORATION_Underline)
     iUnderline = 1;
 
-  CFX_WideString wsValue;
+  WideString wsValue;
   if (pStyle->GetCustomStyle(L"underlinePeriod", wsValue)) {
     if (wsValue == L"word")
       iPeriod = XFA_ATTRIBUTEENUM_Word;
@@ -487,7 +487,7 @@
 
 bool CXFA_TextParser::GetEmbbedObj(CXFA_TextProvider* pTextProvider,
                                    CFX_XMLNode* pXMLNode,
-                                   CFX_WideString& wsValue) {
+                                   WideString& wsValue) {
   wsValue.clear();
   if (!pXMLNode)
     return false;
@@ -495,13 +495,13 @@
   bool bRet = false;
   if (pXMLNode->GetType() == FX_XMLNODE_Element) {
     CFX_XMLElement* pElement = static_cast<CFX_XMLElement*>(pXMLNode);
-    CFX_WideString wsAttr = pElement->GetString(L"xfa:embed");
+    WideString wsAttr = pElement->GetString(L"xfa:embed");
     if (wsAttr.IsEmpty())
       return false;
     if (wsAttr[0] == L'#')
       wsAttr.Delete(0);
 
-    CFX_WideString ws = pElement->GetString(L"xfa:embedType");
+    WideString ws = pElement->GetString(L"xfa:embedType");
     if (ws.IsEmpty())
       ws = L"som";
     else
@@ -537,7 +537,7 @@
   if (!pStyle || !pTabstopContext)
     return false;
 
-  CFX_WideString wsValue;
+  WideString wsValue;
   if (!pStyle->GetCustomStyle(L"xfa-tab-stops", wsValue) &&
       !pStyle->GetCustomStyle(L"tab-stops", wsValue)) {
     return false;
@@ -547,7 +547,7 @@
   const wchar_t* pTabStops = wsValue.c_str();
   int32_t iCur = 0;
   int32_t iLast = 0;
-  CFX_WideString wsAlign;
+  WideString wsAlign;
   TabStopStatus eStatus = TabStopStatus::None;
   wchar_t ch;
   while (iCur < iLength) {
@@ -563,7 +563,7 @@
         break;
       case TabStopStatus::Alignment:
         if (ch == ' ') {
-          wsAlign = CFX_WideStringC(pTabStops + iLast, iCur - iLast);
+          wsAlign = WideStringView(pTabStops + iLast, iCur - iLast);
           eStatus = TabStopStatus::StartLeader;
           iCur++;
           while (iCur < iLength && pTabStops[iCur] <= ' ')
@@ -598,8 +598,8 @@
         break;
       case TabStopStatus::Location:
         if (ch == ' ') {
-          uint32_t dwHashCode = FX_HashCode_GetW(wsAlign.AsStringC(), true);
-          CXFA_Measurement ms(CFX_WideStringC(pTabStops + iLast, iCur - iLast));
+          uint32_t dwHashCode = FX_HashCode_GetW(wsAlign.AsStringView(), true);
+          CXFA_Measurement ms(WideStringView(pTabStops + iLast, iCur - iLast));
           float fPos = ms.ToUnit(XFA_UNIT_Pt);
           pTabstopContext->Append(dwHashCode, fPos);
           wsAlign.clear();
@@ -613,8 +613,8 @@
   }
 
   if (!wsAlign.IsEmpty()) {
-    uint32_t dwHashCode = FX_HashCode_GetW(wsAlign.AsStringC(), true);
-    CXFA_Measurement ms(CFX_WideStringC(pTabStops + iLast, iCur - iLast));
+    uint32_t dwHashCode = FX_HashCode_GetW(wsAlign.AsStringView(), true);
+    CXFA_Measurement ms(WideStringView(pTabStops + iLast, iCur - iLast));
     float fPos = ms.ToUnit(XFA_UNIT_Pt);
     pTabstopContext->Append(dwHashCode, fPos);
   }
diff --git a/xfa/fxfa/cxfa_textparser.h b/xfa/fxfa/cxfa_textparser.h
index 567aff0..ee5c38d 100644
--- a/xfa/fxfa/cxfa_textparser.h
+++ b/xfa/fxfa/cxfa_textparser.h
@@ -78,11 +78,11 @@
 
   bool GetEmbbedObj(CXFA_TextProvider* pTextProvider,
                     CFX_XMLNode* pXMLNode,
-                    CFX_WideString& wsValue);
+                    WideString& wsValue);
   CXFA_TextParseContext* GetParseContextFromMap(CFX_XMLNode* pXMLNode);
 
  protected:
-  bool TagValidate(const CFX_WideString& str) const;
+  bool TagValidate(const WideString& str) const;
 
  private:
   class TagProvider {
@@ -90,15 +90,14 @@
     TagProvider();
     ~TagProvider();
 
-    CFX_WideString GetTagName() { return m_wsTagName; }
+    WideString GetTagName() { return m_wsTagName; }
 
-    void SetTagName(const CFX_WideString& wsName) { m_wsTagName = wsName; }
-    void SetAttribute(const CFX_WideString& wsAttr,
-                      const CFX_WideString& wsValue) {
+    void SetTagName(const WideString& wsName) { m_wsTagName = wsName; }
+    void SetAttribute(const WideString& wsAttr, const WideString& wsValue) {
       m_Attributes.insert({wsAttr, wsValue});
     }
 
-    CFX_WideString GetAttribute(const CFX_WideString& wsAttr) {
+    WideString GetAttribute(const WideString& wsAttr) {
       return m_Attributes[wsAttr];
     }
 
@@ -106,8 +105,8 @@
     bool m_bContent;
 
    private:
-    CFX_WideString m_wsTagName;
-    std::map<CFX_WideString, CFX_WideString> m_Attributes;
+    WideString m_wsTagName;
+    std::map<WideString, WideString> m_Attributes;
   };
 
   void InitCSSData(CXFA_TextProvider* pTextProvider);
diff --git a/xfa/fxfa/cxfa_textpiece.h b/xfa/fxfa/cxfa_textpiece.h
index a1f100c..4ea5a41 100644
--- a/xfa/fxfa/cxfa_textpiece.h
+++ b/xfa/fxfa/cxfa_textpiece.h
@@ -21,7 +21,7 @@
   CXFA_TextPiece();
   ~CXFA_TextPiece();
 
-  CFX_WideString szText;
+  WideString szText;
   std::vector<int32_t> Widths;
   int32_t iChars;
   int32_t iHorScale;
diff --git a/xfa/fxfa/cxfa_textprovider.cpp b/xfa/fxfa/cxfa_textprovider.cpp
index 16a2b58..9f1ecd5 100644
--- a/xfa/fxfa/cxfa_textprovider.cpp
+++ b/xfa/fxfa/cxfa_textprovider.cpp
@@ -43,7 +43,7 @@
 
     CXFA_Node* pChildNode = pValueNode->GetNodeItem(XFA_NODEITEM_FirstChild);
     if (pChildNode && pChildNode->GetElementType() == XFA_Element::ExData) {
-      CFX_WideString wsContentType;
+      WideString wsContentType;
       pChildNode->GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType, false);
       if (wsContentType == L"text/html")
         bRichText = true;
@@ -80,7 +80,7 @@
 
     CXFA_Node* pChildNode = pValueNode->GetNodeItem(XFA_NODEITEM_FirstChild);
     if (pChildNode && pChildNode->GetElementType() == XFA_Element::ExData) {
-      CFX_WideString wsContentType;
+      WideString wsContentType;
       pChildNode->GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType, false);
       if (wsContentType == L"text/html")
         bRichText = true;
@@ -95,7 +95,7 @@
 
   CXFA_Node* pNode = pItemNode->GetNodeItem(XFA_NODEITEM_FirstChild);
   while (pNode) {
-    CFX_WideStringC wsName;
+    WideStringView wsName;
     pNode->TryCData(XFA_ATTRIBUTE_Name, wsName);
     if (m_eType == XFA_TEXTPROVIDERTYPE_Rollover && wsName == L"rollover")
       return pNode;
@@ -135,8 +135,8 @@
 
 bool CXFA_TextProvider::GetEmbbedObj(bool bURI,
                                      bool bRaw,
-                                     const CFX_WideString& wsAttr,
-                                     CFX_WideString& wsValue) {
+                                     const WideString& wsAttr,
+                                     WideString& wsValue) {
   if (m_eType != XFA_TEXTPROVIDERTYPE_Text)
     return false;
 
@@ -149,11 +149,12 @@
   CXFA_Node* pIDNode = nullptr;
   CXFA_WidgetAcc* pEmbAcc = nullptr;
   if (pParent)
-    pIDNode = pDocument->GetNodeByID(pParent, wsAttr.AsStringC());
+    pIDNode = pDocument->GetNodeByID(pParent, wsAttr.AsStringView());
 
   if (!pIDNode) {
     pIDNode = pDocument->GetNodeByID(
-        ToNode(pDocument->GetXFAObject(XFA_HASHCODE_Form)), wsAttr.AsStringC());
+        ToNode(pDocument->GetXFAObject(XFA_HASHCODE_Form)),
+        wsAttr.AsStringView());
   }
   if (pIDNode)
     pEmbAcc = static_cast<CXFA_WidgetAcc*>(pIDNode->GetWidgetData());
diff --git a/xfa/fxfa/cxfa_textprovider.h b/xfa/fxfa/cxfa_textprovider.h
index 0772490..d648b94 100644
--- a/xfa/fxfa/cxfa_textprovider.h
+++ b/xfa/fxfa/cxfa_textprovider.h
@@ -39,8 +39,8 @@
   CXFA_FFDoc* GetDocNode() { return m_pWidgetAcc->GetDoc(); }
   bool GetEmbbedObj(bool bURI,
                     bool bRaw,
-                    const CFX_WideString& wsAttr,
-                    CFX_WideString& wsValue);
+                    const WideString& wsAttr,
+                    WideString& wsValue);
 
  private:
   CXFA_WidgetAcc* m_pWidgetAcc;
diff --git a/xfa/fxfa/cxfa_widgetacc.cpp b/xfa/fxfa/cxfa_widgetacc.cpp
index 972a95e..791b814 100644
--- a/xfa/fxfa/cxfa_widgetacc.cpp
+++ b/xfa/fxfa/cxfa_widgetacc.cpp
@@ -160,15 +160,15 @@
 
 CXFA_WidgetAcc::~CXFA_WidgetAcc() {}
 
-bool CXFA_WidgetAcc::GetName(CFX_WideString& wsName, int32_t iNameType) {
+bool CXFA_WidgetAcc::GetName(WideString& wsName, int32_t iNameType) {
   if (iNameType == 0) {
     m_pNode->TryCData(XFA_ATTRIBUTE_Name, wsName);
     return !wsName.IsEmpty();
   }
   m_pNode->GetSOMExpression(wsName);
   if (iNameType == 2 && wsName.GetLength() >= 15) {
-    CFX_WideStringC wsPre = L"xfa[0].form[0].";
-    if (wsPre == CFX_WideStringC(wsName.c_str(), wsPre.GetLength()))
+    WideStringView wsPre = L"xfa[0].form[0].";
+    if (wsPre == WideStringView(wsName.c_str(), wsPre.GetLength()))
       wsName.Delete(0, wsPre.GetLength());
   }
   return true;
@@ -187,13 +187,13 @@
 }
 
 void CXFA_WidgetAcc::ResetData() {
-  CFX_WideString wsValue;
+  WideString wsValue;
   XFA_Element eUIType = GetUIType();
   switch (eUIType) {
     case XFA_Element::ImageEdit: {
       CXFA_Value imageValue = GetDefaultValue();
       CXFA_Image image = imageValue.GetImage();
-      CFX_WideString wsContentType, wsHref;
+      WideString wsContentType, wsHref;
       if (image) {
         image.GetContent(wsValue);
         image.GetContentType(wsContentType);
@@ -222,7 +222,7 @@
           if (!pItems)
             continue;
 
-          CFX_WideString itemText;
+          WideString itemText;
           if (pItems->CountChildren(XFA_Element::Unknown) > 1)
             itemText = pItems->GetChild(1, XFA_Element::Unknown)->GetContent();
 
@@ -244,15 +244,15 @@
   }
 }
 
-void CXFA_WidgetAcc::SetImageEdit(const CFX_WideString& wsContentType,
-                                  const CFX_WideString& wsHref,
-                                  const CFX_WideString& wsData) {
+void CXFA_WidgetAcc::SetImageEdit(const WideString& wsContentType,
+                                  const WideString& wsHref,
+                                  const WideString& wsData) {
   CXFA_Image image = GetFormValue().GetImage();
   if (image) {
-    image.SetContentType(CFX_WideString(wsContentType));
+    image.SetContentType(WideString(wsContentType));
     image.SetHref(wsHref);
   }
-  CFX_WideString wsFormatValue(wsData);
+  WideString wsFormatValue(wsData);
   GetFormatDataValue(wsData, wsFormatValue);
   m_pNode->SetContent(wsData, wsFormatValue, true);
   CXFA_Node* pBind = GetDatasets();
@@ -367,8 +367,8 @@
       if (!pAppProvider) {
         return;
       }
-      CFX_WideString wsTitle = pAppProvider->GetAppTitle();
-      CFX_WideString wsScriptMsg;
+      WideString wsTitle = pAppProvider->GetAppTitle();
+      WideString wsScriptMsg;
       validate.GetScriptMessageText(wsScriptMsg);
       int32_t eScriptTest = validate.GetScriptTest();
       if (eScriptTest == XFA_ATTRIBUTEENUM_Warning) {
@@ -397,9 +397,9 @@
 
 int32_t CXFA_WidgetAcc::ProcessFormatTestValidate(CXFA_Validate validate,
                                                   bool bVersionFlag) {
-  CFX_WideString wsRawValue = GetRawValue();
+  WideString wsRawValue = GetRawValue();
   if (!wsRawValue.IsEmpty()) {
-    CFX_WideString wsPicture;
+    WideString wsPicture;
     validate.GetPicture(wsPicture);
     if (wsPicture.IsEmpty())
       return XFA_EVENTERROR_NotExist;
@@ -415,9 +415,9 @@
       if (!pAppProvider)
         return XFA_EVENTERROR_NotExist;
 
-      CFX_WideString wsFormatMsg;
+      WideString wsFormatMsg;
       validate.GetFormatMessageText(wsFormatMsg);
-      CFX_WideString wsTitle = pAppProvider->GetAppTitle();
+      WideString wsTitle = pAppProvider->GetAppTitle();
       int32_t eFormatTest = validate.GetFormatTest();
       if (eFormatTest == XFA_ATTRIBUTEENUM_Error) {
         if (wsFormatMsg.IsEmpty())
@@ -448,7 +448,7 @@
 int32_t CXFA_WidgetAcc::ProcessNullTestValidate(CXFA_Validate validate,
                                                 int32_t iFlags,
                                                 bool bVersionFlag) {
-  CFX_WideString wsValue;
+  WideString wsValue;
   GetValue(wsValue, XFA_VALUEPICTURE_Raw);
   if (!wsValue.IsEmpty())
     return XFA_EVENTERROR_Success;
@@ -456,7 +456,7 @@
     return XFA_EVENTERROR_Success;
 
   int32_t eNullTest = validate.GetNullTest();
-  CFX_WideString wsNullMsg;
+  WideString wsNullMsg;
   validate.GetNullMessageText(wsNullMsg);
   if (iFlags & 0x01) {
     int32_t iRet = XFA_EVENTERROR_Success;
@@ -480,8 +480,8 @@
   if (!pAppProvider)
     return XFA_EVENTERROR_NotExist;
 
-  CFX_WideString wsCaptionName;
-  CFX_WideString wsTitle = pAppProvider->GetAppTitle();
+  WideString wsCaptionName;
+  WideString wsTitle = pAppProvider->GetAppTitle();
   switch (eNullTest) {
     case XFA_ATTRIBUTEENUM_Error: {
       if (wsNullMsg.IsEmpty()) {
@@ -514,8 +514,8 @@
   return XFA_EVENTERROR_Success;
 }
 
-CFX_WideString CXFA_WidgetAcc::GetValidateCaptionName(bool bVersionFlag) {
-  CFX_WideString wsCaptionName;
+WideString CXFA_WidgetAcc::GetValidateCaptionName(bool bVersionFlag) {
+  WideString wsCaptionName;
 
   if (!bVersionFlag) {
     if (CXFA_Caption caption = GetCaption()) {
@@ -531,10 +531,9 @@
   return wsCaptionName;
 }
 
-CFX_WideString CXFA_WidgetAcc::GetValidateMessage(bool bError,
-                                                  bool bVersionFlag) {
-  CFX_WideString wsCaptionName = GetValidateCaptionName(bVersionFlag);
-  CFX_WideString wsMessage;
+WideString CXFA_WidgetAcc::GetValidateMessage(bool bError, bool bVersionFlag) {
+  WideString wsCaptionName = GetValidateCaptionName(bVersionFlag);
+  WideString wsMessage;
   if (bVersionFlag) {
     wsMessage.Format(L"%s validation failed", wsCaptionName.c_str());
     return wsMessage;
@@ -609,7 +608,7 @@
   if (script.GetRunAt() == XFA_ATTRIBUTEENUM_Server)
     return XFA_EVENTERROR_Disabled;
 
-  CFX_WideString wsExpression;
+  WideString wsExpression;
   script.GetExpression(wsExpression);
   if (wsExpression.IsEmpty())
     return XFA_EVENTERROR_NotExist;
@@ -630,8 +629,8 @@
   auto pTmpRetValue = pdfium::MakeUnique<CFXJSE_Value>(pContext->GetRuntime());
   ++m_nRecursionDepth;
   bool bRet = pContext->RunScript((XFA_SCRIPTLANGTYPE)eScriptType,
-                                  wsExpression.AsStringC(), pTmpRetValue.get(),
-                                  m_pNode);
+                                  wsExpression.AsStringView(),
+                                  pTmpRetValue.get(), m_pNode);
   --m_nRecursionDepth;
   int32_t iRet = XFA_EVENTERROR_Error;
   if (bRet) {
@@ -820,7 +819,7 @@
 
 void CXFA_WidgetAcc::CalculateTextContentSize(CFX_SizeF& size) {
   float fFontSize = GetFontSize();
-  CFX_WideString wsText;
+  WideString wsText;
   GetValue(wsText, XFA_VALUEPICTURE_Display);
   if (wsText.IsEmpty()) {
     size.height += fFontSize;
@@ -1218,7 +1217,7 @@
       static_cast<CXFA_FieldLayoutData*>(m_pLayoutData.get());
   int32_t iLinesCount = 0;
   float fHeight = m_pLayoutData->m_fWidgetHeight;
-  CFX_WideString wsText;
+  WideString wsText;
   GetValue(wsText, XFA_VALUEPICTURE_Display);
   if (wsText.IsEmpty()) {
     iLinesCount = 1;
@@ -1495,7 +1494,7 @@
 }
 
 CFX_RetainPtr<CFGAS_GEFont> CXFA_WidgetAcc::GetFDEFont() {
-  CFX_WideStringC wsFontName = L"Courier";
+  WideStringView wsFontName = L"Courier";
   uint32_t dwFontStyle = 0;
   if (CXFA_Font font = GetFont(false)) {
     if (font.IsBold())
diff --git a/xfa/fxfa/cxfa_widgetacc.h b/xfa/fxfa/cxfa_widgetacc.h
index 38b17ef..54fd360 100644
--- a/xfa/fxfa/cxfa_widgetacc.h
+++ b/xfa/fxfa/cxfa_widgetacc.h
@@ -37,13 +37,13 @@
   CXFA_WidgetAcc(CXFA_FFDocView* pDocView, CXFA_Node* pNode);
   ~CXFA_WidgetAcc();
 
-  bool GetName(CFX_WideString& wsName, int32_t iNameType = 0);
+  bool GetName(WideString& wsName, int32_t iNameType = 0);
   bool ProcessValueChanged();
   void ResetData();
 
-  void SetImageEdit(const CFX_WideString& wsContentType,
-                    const CFX_WideString& wsHref,
-                    const CFX_WideString& wsData);
+  void SetImageEdit(const WideString& wsContentType,
+                    const WideString& wsHref,
+                    const WideString& wsData);
 
   CXFA_WidgetAcc* GetExclGroup();
   CXFA_FFDocView* GetDocView();
@@ -92,8 +92,8 @@
   int32_t ProcessNullTestValidate(CXFA_Validate validate,
                                   int32_t iFlags,
                                   bool bVersionFlag);
-  CFX_WideString GetValidateCaptionName(bool bVersionFlag);
-  CFX_WideString GetValidateMessage(bool bError, bool bVersionFlag);
+  WideString GetValidateCaptionName(bool bVersionFlag);
+  WideString GetValidateMessage(bool bError, bool bVersionFlag);
   void CalcCaptionSize(CFX_SizeF& szCap);
   bool CalculateFieldAutoSize(CFX_SizeF& size);
   bool CalculateWidgetAutoSize(CFX_SizeF& size);
diff --git a/xfa/fxfa/fm2js/cxfa_fm2jscontext.cpp b/xfa/fxfa/fm2js/cxfa_fm2jscontext.cpp
index f49d98a..6af7bb7 100644
--- a/xfa/fxfa/fm2js/cxfa_fm2jscontext.cpp
+++ b/xfa/fxfa/fm2js/cxfa_fm2jscontext.cpp
@@ -338,8 +338,8 @@
 static_assert(FX_ArraySize(g_sAltTable_Time) == L'a' - L'A' + 1,
               "Invalid g_sAltTable_Time size.");
 
-void AlternateDateTimeSymbols(CFX_WideString& wsPattern,
-                              const CFX_WideString& wsAltSymbols,
+void AlternateDateTimeSymbols(WideString& wsPattern,
+                              const WideString& wsAltSymbols,
                               const uint8_t* pAltTable) {
   int32_t nLength = wsPattern.GetLength();
   bool bInConstRange = false;
@@ -368,9 +368,8 @@
   }
 }
 
-bool PatternStringType(const CFX_ByteStringC& szPattern,
-                       uint32_t& patternType) {
-  CFX_WideString wsPattern = CFX_WideString::FromUTF8(szPattern);
+bool PatternStringType(const ByteStringView& szPattern, uint32_t& patternType) {
+  WideString wsPattern = WideString::FromUTF8(szPattern);
   if (L"datetime" == wsPattern.Left(8)) {
     patternType = XFA_VT_DATETIME;
     return true;
@@ -474,19 +473,19 @@
 
 IFX_Locale* LocaleFromString(CXFA_Document* pDoc,
                              CXFA_LocaleMgr* pMgr,
-                             const CFX_ByteStringC& szLocale) {
+                             const ByteStringView& szLocale) {
   if (!szLocale.IsEmpty())
-    return pMgr->GetLocaleByName(CFX_WideString::FromUTF8(szLocale));
+    return pMgr->GetLocaleByName(WideString::FromUTF8(szLocale));
 
   CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject());
   ASSERT(pThisNode);
   return CXFA_WidgetData(pThisNode).GetLocal();
 }
 
-CFX_WideString FormatFromString(IFX_Locale* pLocale,
-                                const CFX_ByteStringC& szFormat) {
+WideString FormatFromString(IFX_Locale* pLocale,
+                            const ByteStringView& szFormat) {
   if (!szFormat.IsEmpty())
-    return CFX_WideString::FromUTF8(szFormat);
+    return WideString::FromUTF8(szFormat);
 
   return pLocale->GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY_Default);
 }
@@ -514,12 +513,12 @@
   return std::iswdigit(ch) || ch == L'-' || ch == L'.';
 }
 
-CFX_ByteString GUIDString(bool bSeparator) {
+ByteString GUIDString(bool bSeparator) {
   uint8_t data[16];
   FX_Random_GenerateMT(reinterpret_cast<uint32_t*>(data), 4);
   data[6] = (data[6] & 0x0F) | 0x40;
 
-  CFX_ByteString bsStr;
+  ByteString bsStr;
   char* pBuf = bsStr.GetBuffer(40);
   for (int32_t i = 0; i < 16; ++i, pBuf += 2) {
     if (bSeparator && (i == 4 || i == 6 || i == 8 || i == 10))
@@ -535,7 +534,7 @@
 
 // static
 void CXFA_FM2JSContext::Abs(CFXJSE_Value* pThis,
-                            const CFX_ByteStringC& szFuncName,
+                            const ByteStringView& szFuncName,
                             CFXJSE_Arguments& args) {
   if (args.GetLength() != 1) {
     ToJSContext(pThis, nullptr)->ThrowParamCountMismatchException(L"Abs");
@@ -557,7 +556,7 @@
 
 // static
 void CXFA_FM2JSContext::Avg(CFXJSE_Value* pThis,
-                            const CFX_ByteStringC& szFuncName,
+                            const ByteStringView& szFuncName,
                             CFXJSE_Arguments& args) {
   int32_t argc = args.GetLength();
   if (argc < 1) {
@@ -604,7 +603,7 @@
           argValue->GetObjectPropertyByIdx(j, jsObjectValue.get());
           auto newPropertyValue = pdfium::MakeUnique<CFXJSE_Value>(pIsolate);
           jsObjectValue->GetObjectProperty(
-              propertyValue->ToString().AsStringC(), newPropertyValue.get());
+              propertyValue->ToString().AsStringView(), newPropertyValue.get());
           if (newPropertyValue->IsNull())
             continue;
 
@@ -624,7 +623,7 @@
 
 // static
 void CXFA_FM2JSContext::Ceil(CFXJSE_Value* pThis,
-                             const CFX_ByteStringC& szFuncName,
+                             const ByteStringView& szFuncName,
                              CFXJSE_Arguments& args) {
   if (args.GetLength() != 1) {
     ToJSContext(pThis, nullptr)->ThrowParamCountMismatchException(L"Ceil");
@@ -642,7 +641,7 @@
 
 // static
 void CXFA_FM2JSContext::Count(CFXJSE_Value* pThis,
-                              const CFX_ByteStringC& szFuncName,
+                              const ByteStringView& szFuncName,
                               CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   v8::Isolate* pIsolate = pContext->GetScriptRuntime();
@@ -678,7 +677,7 @@
         for (int32_t j = 2; j < iLength; j++) {
           argValue->GetObjectPropertyByIdx(j, jsObjectValue.get());
           jsObjectValue->GetObjectProperty(
-              propertyValue->ToString().AsStringC(), newPropertyValue.get());
+              propertyValue->ToString().AsStringView(), newPropertyValue.get());
           iCount += newPropertyValue->IsNull() ? 0 : 1;
         }
       }
@@ -696,7 +695,7 @@
 
 // static
 void CXFA_FM2JSContext::Floor(CFXJSE_Value* pThis,
-                              const CFX_ByteStringC& szFuncName,
+                              const ByteStringView& szFuncName,
                               CFXJSE_Arguments& args) {
   if (args.GetLength() != 1) {
     ToJSContext(pThis, nullptr)->ThrowParamCountMismatchException(L"Floor");
@@ -714,7 +713,7 @@
 
 // static
 void CXFA_FM2JSContext::Max(CFXJSE_Value* pThis,
-                            const CFX_ByteStringC& szFuncName,
+                            const ByteStringView& szFuncName,
                             CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   v8::Isolate* pIsolate = pContext->GetScriptRuntime();
@@ -754,7 +753,7 @@
         for (int32_t j = 2; j < iLength; j++) {
           argValue->GetObjectPropertyByIdx(j, jsObjectValue.get());
           jsObjectValue->GetObjectProperty(
-              propertyValue->ToString().AsStringC(), newPropertyValue.get());
+              propertyValue->ToString().AsStringView(), newPropertyValue.get());
           if (newPropertyValue->IsNull())
             continue;
 
@@ -788,7 +787,7 @@
 
 // static
 void CXFA_FM2JSContext::Min(CFXJSE_Value* pThis,
-                            const CFX_ByteStringC& szFuncName,
+                            const ByteStringView& szFuncName,
                             CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   v8::Isolate* pIsolate = pContext->GetScriptRuntime();
@@ -828,7 +827,7 @@
         for (int32_t j = 2; j < iLength; j++) {
           argValue->GetObjectPropertyByIdx(j, jsObjectValue.get());
           jsObjectValue->GetObjectProperty(
-              propertyValue->ToString().AsStringC(), newPropertyValue.get());
+              propertyValue->ToString().AsStringView(), newPropertyValue.get());
           if (newPropertyValue->IsNull())
             continue;
 
@@ -862,7 +861,7 @@
 
 // static
 void CXFA_FM2JSContext::Mod(CFXJSE_Value* pThis,
-                            const CFX_ByteStringC& szFuncName,
+                            const ByteStringView& szFuncName,
                             CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   if (args.GetLength() != 2) {
@@ -897,7 +896,7 @@
 
 // static
 void CXFA_FM2JSContext::Round(CFXJSE_Value* pThis,
-                              const CFX_ByteStringC& szFuncName,
+                              const ByteStringView& szFuncName,
                               CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   int32_t argc = args.GetLength();
@@ -943,7 +942,7 @@
 
 // static
 void CXFA_FM2JSContext::Sum(CFXJSE_Value* pThis,
-                            const CFX_ByteStringC& szFuncName,
+                            const ByteStringView& szFuncName,
                             CFXJSE_Arguments& args) {
   int32_t argc = args.GetLength();
   if (argc == 0) {
@@ -987,7 +986,7 @@
         for (int32_t j = 2; j < iLength; j++) {
           argValue->GetObjectPropertyByIdx(j, jsObjectValue.get());
           jsObjectValue->GetObjectProperty(
-              propertyValue->ToString().AsStringC(), newPropertyValue.get());
+              propertyValue->ToString().AsStringView(), newPropertyValue.get());
           if (newPropertyValue->IsNull())
             continue;
 
@@ -1018,7 +1017,7 @@
 
 // static
 void CXFA_FM2JSContext::Date(CFXJSE_Value* pThis,
-                             const CFX_ByteStringC& szFuncName,
+                             const ByteStringView& szFuncName,
                              CFXJSE_Arguments& args) {
   if (args.GetLength() != 0) {
     ToJSContext(pThis, nullptr)->ThrowParamCountMismatchException(L"Date");
@@ -1029,20 +1028,21 @@
   time(&currentTime);
   struct tm* pTmStruct = gmtime(&currentTime);
 
-  CFX_ByteString bufferYear;
-  CFX_ByteString bufferMon;
-  CFX_ByteString bufferDay;
+  ByteString bufferYear;
+  ByteString bufferMon;
+  ByteString bufferDay;
   bufferYear.Format("%d", pTmStruct->tm_year + 1900);
   bufferMon.Format("%02d", pTmStruct->tm_mon + 1);
   bufferDay.Format("%02d", pTmStruct->tm_mday);
 
-  CFX_ByteString bufferCurrent = bufferYear + bufferMon + bufferDay;
-  args.GetReturnValue()->SetInteger(DateString2Num(bufferCurrent.AsStringC()));
+  ByteString bufferCurrent = bufferYear + bufferMon + bufferDay;
+  args.GetReturnValue()->SetInteger(
+      DateString2Num(bufferCurrent.AsStringView()));
 }
 
 // static
 void CXFA_FM2JSContext::Date2Num(CFXJSE_Value* pThis,
-                                 const CFX_ByteStringC& szFuncName,
+                                 const ByteStringView& szFuncName,
                                  CFXJSE_Arguments& args) {
   int32_t argc = args.GetLength();
   if (argc < 1 || argc > 3) {
@@ -1056,8 +1056,8 @@
     return;
   }
 
-  CFX_ByteString dateString = ValueToUTF8String(dateValue.get());
-  CFX_ByteString formatString;
+  ByteString dateString = ValueToUTF8String(dateValue.get());
+  ByteString formatString;
   if (argc > 1) {
     std::unique_ptr<CFXJSE_Value> formatValue = GetSimpleValue(pThis, args, 1);
     if (ValueIsNull(pThis, formatValue.get())) {
@@ -1067,7 +1067,7 @@
     formatString = ValueToUTF8String(formatValue.get());
   }
 
-  CFX_ByteString localString;
+  ByteString localString;
   if (argc > 2) {
     std::unique_ptr<CFXJSE_Value> localValue = GetSimpleValue(pThis, args, 2);
     if (ValueIsNull(pThis, localValue.get())) {
@@ -1077,16 +1077,16 @@
     localString = ValueToUTF8String(localValue.get());
   }
 
-  CFX_ByteString szIsoDateString =
-      Local2IsoDate(pThis, dateString.AsStringC(), formatString.AsStringC(),
-                    localString.AsStringC());
+  ByteString szIsoDateString =
+      Local2IsoDate(pThis, dateString.AsStringView(),
+                    formatString.AsStringView(), localString.AsStringView());
   args.GetReturnValue()->SetInteger(
-      DateString2Num(szIsoDateString.AsStringC()));
+      DateString2Num(szIsoDateString.AsStringView()));
 }
 
 // static
 void CXFA_FM2JSContext::DateFmt(CFXJSE_Value* pThis,
-                                const CFX_ByteStringC& szFuncName,
+                                const ByteStringView& szFuncName,
                                 CFXJSE_Arguments& args) {
   int32_t argc = args.GetLength();
   if (argc > 2) {
@@ -1107,7 +1107,7 @@
       iStyle = 0;
   }
 
-  CFX_ByteString szLocal;
+  ByteString szLocal;
   if (argc > 1) {
     std::unique_ptr<CFXJSE_Value> argLocal = GetSimpleValue(pThis, args, 1);
     if (argLocal->IsNull()) {
@@ -1117,14 +1117,14 @@
     szLocal = ValueToUTF8String(argLocal.get());
   }
 
-  CFX_ByteString formatStr =
-      GetStandardDateFormat(pThis, iStyle, szLocal.AsStringC());
-  args.GetReturnValue()->SetString(formatStr.AsStringC());
+  ByteString formatStr =
+      GetStandardDateFormat(pThis, iStyle, szLocal.AsStringView());
+  args.GetReturnValue()->SetString(formatStr.AsStringView());
 }
 
 // static
 void CXFA_FM2JSContext::IsoDate2Num(CFXJSE_Value* pThis,
-                                    const CFX_ByteStringC& szFuncName,
+                                    const ByteStringView& szFuncName,
                                     CFXJSE_Arguments& args) {
   if (args.GetLength() != 1) {
     ToJSContext(pThis, nullptr)
@@ -1136,13 +1136,13 @@
     args.GetReturnValue()->SetNull();
     return;
   }
-  CFX_ByteString szArgString = ValueToUTF8String(argOne.get());
-  args.GetReturnValue()->SetInteger(DateString2Num(szArgString.AsStringC()));
+  ByteString szArgString = ValueToUTF8String(argOne.get());
+  args.GetReturnValue()->SetInteger(DateString2Num(szArgString.AsStringView()));
 }
 
 // static
 void CXFA_FM2JSContext::IsoTime2Num(CFXJSE_Value* pThis,
-                                    const CFX_ByteStringC& szFuncName,
+                                    const ByteStringView& szFuncName,
                                     CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   if (args.GetLength() != 1) {
@@ -1158,7 +1158,7 @@
 
   CXFA_Document* pDoc = pContext->GetDocument();
   CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr();
-  CFX_ByteString szArgString = ValueToUTF8String(argOne.get());
+  ByteString szArgString = ValueToUTF8String(argOne.get());
   auto pos = szArgString.Find('T', 0);
   if (!pos.has_value() || pos.value() == szArgString.GetLength() - 1) {
     args.GetReturnValue()->SetInteger(0);
@@ -1167,7 +1167,7 @@
   szArgString = szArgString.Right(szArgString.GetLength() - (pos.value() + 1));
 
   CXFA_LocaleValue timeValue(
-      XFA_VT_TIME, CFX_WideString::FromUTF8(szArgString.AsStringC()), pMgr);
+      XFA_VT_TIME, WideString::FromUTF8(szArgString.AsStringView()), pMgr);
   if (!timeValue.IsValid()) {
     args.GetReturnValue()->SetInteger(0);
     return;
@@ -1196,7 +1196,7 @@
 
 // static
 void CXFA_FM2JSContext::LocalDateFmt(CFXJSE_Value* pThis,
-                                     const CFX_ByteStringC& szFuncName,
+                                     const ByteStringView& szFuncName,
                                      CFXJSE_Arguments& args) {
   int32_t argc = args.GetLength();
   if (argc > 2) {
@@ -1217,7 +1217,7 @@
       iStyle = 0;
   }
 
-  CFX_ByteString szLocal;
+  ByteString szLocal;
   if (argc > 1) {
     std::unique_ptr<CFXJSE_Value> argLocal = GetSimpleValue(pThis, args, 1);
     if (argLocal->IsNull()) {
@@ -1227,14 +1227,14 @@
     szLocal = ValueToUTF8String(argLocal.get());
   }
 
-  CFX_ByteString formatStr =
-      GetLocalDateFormat(pThis, iStyle, szLocal.AsStringC(), false);
-  args.GetReturnValue()->SetString(formatStr.AsStringC());
+  ByteString formatStr =
+      GetLocalDateFormat(pThis, iStyle, szLocal.AsStringView(), false);
+  args.GetReturnValue()->SetString(formatStr.AsStringView());
 }
 
 // static
 void CXFA_FM2JSContext::LocalTimeFmt(CFXJSE_Value* pThis,
-                                     const CFX_ByteStringC& szFuncName,
+                                     const ByteStringView& szFuncName,
                                      CFXJSE_Arguments& args) {
   int32_t argc = args.GetLength();
   if (argc > 2) {
@@ -1255,7 +1255,7 @@
       iStyle = 0;
   }
 
-  CFX_ByteString szLocal;
+  ByteString szLocal;
   if (argc > 1) {
     std::unique_ptr<CFXJSE_Value> argLocal = GetSimpleValue(pThis, args, 1);
     if (argLocal->IsNull()) {
@@ -1265,14 +1265,14 @@
     szLocal = ValueToUTF8String(argLocal.get());
   }
 
-  CFX_ByteString formatStr =
-      GetLocalTimeFormat(pThis, iStyle, szLocal.AsStringC(), false);
-  args.GetReturnValue()->SetString(formatStr.AsStringC());
+  ByteString formatStr =
+      GetLocalTimeFormat(pThis, iStyle, szLocal.AsStringView(), false);
+  args.GetReturnValue()->SetString(formatStr.AsStringView());
 }
 
 // static
 void CXFA_FM2JSContext::Num2Date(CFXJSE_Value* pThis,
-                                 const CFX_ByteStringC& szFuncName,
+                                 const ByteStringView& szFuncName,
                                  CFXJSE_Arguments& args) {
   int32_t argc = args.GetLength();
   if (argc < 1 || argc > 3) {
@@ -1291,7 +1291,7 @@
     return;
   }
 
-  CFX_ByteString formatString;
+  ByteString formatString;
   if (argc > 1) {
     std::unique_ptr<CFXJSE_Value> formatValue = GetSimpleValue(pThis, args, 1);
     if (ValueIsNull(pThis, formatValue.get())) {
@@ -1301,7 +1301,7 @@
     formatString = ValueToUTF8String(formatValue.get());
   }
 
-  CFX_ByteString localString;
+  ByteString localString;
   if (argc > 2) {
     std::unique_ptr<CFXJSE_Value> localValue = GetSimpleValue(pThis, args, 2);
     if (ValueIsNull(pThis, localValue.get())) {
@@ -1403,17 +1403,17 @@
     }
   }
 
-  CFX_ByteString szIsoDateString;
+  ByteString szIsoDateString;
   szIsoDateString.Format("%d%02d%02d", iYear + i, iMonth, iDay);
-  CFX_ByteString szLocalDateString =
-      IsoDate2Local(pThis, szIsoDateString.AsStringC(),
-                    formatString.AsStringC(), localString.AsStringC());
-  args.GetReturnValue()->SetString(szLocalDateString.AsStringC());
+  ByteString szLocalDateString =
+      IsoDate2Local(pThis, szIsoDateString.AsStringView(),
+                    formatString.AsStringView(), localString.AsStringView());
+  args.GetReturnValue()->SetString(szLocalDateString.AsStringView());
 }
 
 // static
 void CXFA_FM2JSContext::Num2GMTime(CFXJSE_Value* pThis,
-                                   const CFX_ByteStringC& szFuncName,
+                                   const ByteStringView& szFuncName,
                                    CFXJSE_Arguments& args) {
   int32_t argc = args.GetLength();
   if (argc < 1 || argc > 3) {
@@ -1433,7 +1433,7 @@
     return;
   }
 
-  CFX_ByteString formatString;
+  ByteString formatString;
   if (argc > 1) {
     std::unique_ptr<CFXJSE_Value> formatValue = GetSimpleValue(pThis, args, 1);
     if (formatValue->IsNull()) {
@@ -1443,7 +1443,7 @@
     formatString = ValueToUTF8String(formatValue.get());
   }
 
-  CFX_ByteString localString;
+  ByteString localString;
   if (argc > 2) {
     std::unique_ptr<CFXJSE_Value> localValue = GetSimpleValue(pThis, args, 2);
     if (localValue->IsNull()) {
@@ -1453,14 +1453,15 @@
     localString = ValueToUTF8String(localValue.get());
   }
 
-  CFX_ByteString szGMTTimeString = Num2AllTime(
-      pThis, iTime, formatString.AsStringC(), localString.AsStringC(), true);
-  args.GetReturnValue()->SetString(szGMTTimeString.AsStringC());
+  ByteString szGMTTimeString =
+      Num2AllTime(pThis, iTime, formatString.AsStringView(),
+                  localString.AsStringView(), true);
+  args.GetReturnValue()->SetString(szGMTTimeString.AsStringView());
 }
 
 // static
 void CXFA_FM2JSContext::Num2Time(CFXJSE_Value* pThis,
-                                 const CFX_ByteStringC& szFuncName,
+                                 const ByteStringView& szFuncName,
                                  CFXJSE_Arguments& args) {
   int32_t argc = args.GetLength();
   if (argc < 1 || argc > 3) {
@@ -1479,7 +1480,7 @@
     return;
   }
 
-  CFX_ByteString formatString;
+  ByteString formatString;
   if (argc > 1) {
     std::unique_ptr<CFXJSE_Value> formatValue = GetSimpleValue(pThis, args, 1);
     if (formatValue->IsNull()) {
@@ -1489,7 +1490,7 @@
     formatString = ValueToUTF8String(formatValue.get());
   }
 
-  CFX_ByteString localString;
+  ByteString localString;
   if (argc > 2) {
     std::unique_ptr<CFXJSE_Value> localValue = GetSimpleValue(pThis, args, 2);
     if (localValue->IsNull()) {
@@ -1499,15 +1500,15 @@
     localString = ValueToUTF8String(localValue.get());
   }
 
-  CFX_ByteString szLocalTimeString =
-      Num2AllTime(pThis, static_cast<int32_t>(fTime), formatString.AsStringC(),
-                  localString.AsStringC(), false);
-  args.GetReturnValue()->SetString(szLocalTimeString.AsStringC());
+  ByteString szLocalTimeString = Num2AllTime(pThis, static_cast<int32_t>(fTime),
+                                             formatString.AsStringView(),
+                                             localString.AsStringView(), false);
+  args.GetReturnValue()->SetString(szLocalTimeString.AsStringView());
 }
 
 // static
 void CXFA_FM2JSContext::Time(CFXJSE_Value* pThis,
-                             const CFX_ByteStringC& szFuncName,
+                             const ByteStringView& szFuncName,
                              CFXJSE_Arguments& args) {
   if (args.GetLength() != 0) {
     ToJSContext(pThis, nullptr)->ThrowParamCountMismatchException(L"Time");
@@ -1524,7 +1525,7 @@
 
 // static
 void CXFA_FM2JSContext::Time2Num(CFXJSE_Value* pThis,
-                                 const CFX_ByteStringC& szFuncName,
+                                 const ByteStringView& szFuncName,
                                  CFXJSE_Arguments& args) {
   int32_t argc = args.GetLength();
   if (argc < 1 || argc > 3) {
@@ -1532,7 +1533,7 @@
     return;
   }
 
-  CFX_ByteString timeString;
+  ByteString timeString;
   std::unique_ptr<CFXJSE_Value> timeValue = GetSimpleValue(pThis, args, 0);
   if (ValueIsNull(pThis, timeValue.get())) {
     args.GetReturnValue()->SetNull();
@@ -1540,7 +1541,7 @@
   }
   timeString = ValueToUTF8String(timeValue.get());
 
-  CFX_ByteString formatString;
+  ByteString formatString;
   if (argc > 1) {
     std::unique_ptr<CFXJSE_Value> formatValue = GetSimpleValue(pThis, args, 1);
     if (ValueIsNull(pThis, formatValue.get())) {
@@ -1550,7 +1551,7 @@
     formatString = ValueToUTF8String(formatValue.get());
   }
 
-  CFX_ByteString localString;
+  ByteString localString;
   if (argc > 2) {
     std::unique_ptr<CFXJSE_Value> localValue = GetSimpleValue(pThis, args, 2);
     if (ValueIsNull(pThis, localValue.get())) {
@@ -1569,19 +1570,19 @@
     CXFA_WidgetData widgetData(pThisNode);
     pLocale = widgetData.GetLocal();
   } else {
-    pLocale = pMgr->GetLocaleByName(
-        CFX_WideString::FromUTF8(localString.AsStringC()));
+    pLocale =
+        pMgr->GetLocaleByName(WideString::FromUTF8(localString.AsStringView()));
   }
 
-  CFX_WideString wsFormat;
+  WideString wsFormat;
   if (formatString.IsEmpty())
     wsFormat = pLocale->GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY_Default);
   else
-    wsFormat = CFX_WideString::FromUTF8(formatString.AsStringC());
+    wsFormat = WideString::FromUTF8(formatString.AsStringView());
 
   wsFormat = L"time{" + wsFormat + L"}";
   CXFA_LocaleValue localeValue(XFA_VT_TIME,
-                               CFX_WideString::FromUTF8(timeString.AsStringC()),
+                               WideString::FromUTF8(timeString.AsStringView()),
                                wsFormat, pLocale, pMgr);
   if (!localeValue.IsValid()) {
     args.GetReturnValue()->SetInteger(0);
@@ -1610,7 +1611,7 @@
 
 // static
 void CXFA_FM2JSContext::TimeFmt(CFXJSE_Value* pThis,
-                                const CFX_ByteStringC& szFuncName,
+                                const ByteStringView& szFuncName,
                                 CFXJSE_Arguments& args) {
   int32_t argc = args.GetLength();
   if (argc > 2) {
@@ -1630,7 +1631,7 @@
       iStyle = 0;
   }
 
-  CFX_ByteString szLocal;
+  ByteString szLocal;
   if (argc > 1) {
     std::unique_ptr<CFXJSE_Value> argLocal = GetSimpleValue(pThis, args, 1);
     if (argLocal->IsNull()) {
@@ -1640,9 +1641,9 @@
     szLocal = ValueToUTF8String(argLocal.get());
   }
 
-  CFX_ByteString formatStr =
-      GetStandardTimeFormat(pThis, iStyle, szLocal.AsStringC());
-  args.GetReturnValue()->SetString(formatStr.AsStringC());
+  ByteString formatStr =
+      GetStandardTimeFormat(pThis, iStyle, szLocal.AsStringView());
+  args.GetReturnValue()->SetString(formatStr.AsStringView());
 }
 
 // static
@@ -1913,80 +1914,75 @@
 }
 
 // static
-CFX_ByteString CXFA_FM2JSContext::Local2IsoDate(
-    CFXJSE_Value* pThis,
-    const CFX_ByteStringC& szDate,
-    const CFX_ByteStringC& szFormat,
-    const CFX_ByteStringC& szLocale) {
+ByteString CXFA_FM2JSContext::Local2IsoDate(CFXJSE_Value* pThis,
+                                            const ByteStringView& szDate,
+                                            const ByteStringView& szFormat,
+                                            const ByteStringView& szLocale) {
   CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument();
   if (!pDoc)
-    return CFX_ByteString();
+    return ByteString();
 
   CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr();
   IFX_Locale* pLocale = LocaleFromString(pDoc, pMgr, szLocale);
   if (!pLocale)
-    return CFX_ByteString();
+    return ByteString();
 
-  CFX_WideString wsFormat = FormatFromString(pLocale, szFormat);
-  CFX_DateTime dt =
-      CXFA_LocaleValue(XFA_VT_DATE, CFX_WideString::FromUTF8(szDate), wsFormat,
-                       pLocale, pMgr)
-          .GetDate();
+  WideString wsFormat = FormatFromString(pLocale, szFormat);
+  CFX_DateTime dt = CXFA_LocaleValue(XFA_VT_DATE, WideString::FromUTF8(szDate),
+                                     wsFormat, pLocale, pMgr)
+                        .GetDate();
 
-  CFX_ByteString strIsoDate;
+  ByteString strIsoDate;
   strIsoDate.Format("%4d-%02d-%02d", dt.GetYear(), dt.GetMonth(), dt.GetDay());
   return strIsoDate;
 }
 
 // static
-CFX_ByteString CXFA_FM2JSContext::IsoDate2Local(
-    CFXJSE_Value* pThis,
-    const CFX_ByteStringC& szDate,
-    const CFX_ByteStringC& szFormat,
-    const CFX_ByteStringC& szLocale) {
+ByteString CXFA_FM2JSContext::IsoDate2Local(CFXJSE_Value* pThis,
+                                            const ByteStringView& szDate,
+                                            const ByteStringView& szFormat,
+                                            const ByteStringView& szLocale) {
   CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument();
   if (!pDoc)
-    return CFX_ByteString();
+    return ByteString();
 
   CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr();
   IFX_Locale* pLocale = LocaleFromString(pDoc, pMgr, szLocale);
   if (!pLocale)
-    return CFX_ByteString();
+    return ByteString();
 
-  CFX_WideString wsFormat = FormatFromString(pLocale, szFormat);
-  CFX_WideString wsRet;
-  CXFA_LocaleValue(XFA_VT_DATE, CFX_WideString::FromUTF8(szDate), pMgr)
+  WideString wsFormat = FormatFromString(pLocale, szFormat);
+  WideString wsRet;
+  CXFA_LocaleValue(XFA_VT_DATE, WideString::FromUTF8(szDate), pMgr)
       .FormatPatterns(wsRet, wsFormat, pLocale, XFA_VALUEPICTURE_Display);
   return wsRet.UTF8Encode();
 }
 
 // static
-CFX_ByteString CXFA_FM2JSContext::IsoTime2Local(
-    CFXJSE_Value* pThis,
-    const CFX_ByteStringC& szTime,
-    const CFX_ByteStringC& szFormat,
-    const CFX_ByteStringC& szLocale) {
+ByteString CXFA_FM2JSContext::IsoTime2Local(CFXJSE_Value* pThis,
+                                            const ByteStringView& szTime,
+                                            const ByteStringView& szFormat,
+                                            const ByteStringView& szLocale) {
   CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument();
   if (!pDoc)
-    return CFX_ByteString();
+    return ByteString();
 
   CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr();
   IFX_Locale* pLocale = LocaleFromString(pDoc, pMgr, szLocale);
   if (!pLocale)
-    return CFX_ByteString();
+    return ByteString();
 
-  CFX_WideString wsFormat = {
-      L"time{", FormatFromString(pLocale, szFormat).AsStringC(), L"}"};
-  CXFA_LocaleValue widgetValue(XFA_VT_TIME, CFX_WideString::FromUTF8(szTime),
-                               pMgr);
-  CFX_WideString wsRet;
+  WideString wsFormat = {
+      L"time{", FormatFromString(pLocale, szFormat).AsStringView(), L"}"};
+  CXFA_LocaleValue widgetValue(XFA_VT_TIME, WideString::FromUTF8(szTime), pMgr);
+  WideString wsRet;
   widgetValue.FormatPatterns(wsRet, wsFormat, pLocale,
                              XFA_VALUEPICTURE_Display);
   return wsRet.UTF8Encode();
 }
 
 // static
-int32_t CXFA_FM2JSContext::DateString2Num(const CFX_ByteStringC& szDateString) {
+int32_t CXFA_FM2JSContext::DateString2Num(const ByteStringView& szDateString) {
   int32_t iLength = szDateString.GetLength();
   int32_t iYear = 0;
   int32_t iMonth = 0;
@@ -2043,21 +2039,20 @@
 }
 
 // static
-CFX_ByteString CXFA_FM2JSContext::GetLocalDateFormat(
-    CFXJSE_Value* pThis,
-    int32_t iStyle,
-    const CFX_ByteStringC& szLocale,
-    bool bStandard) {
+ByteString CXFA_FM2JSContext::GetLocalDateFormat(CFXJSE_Value* pThis,
+                                                 int32_t iStyle,
+                                                 const ByteStringView& szLocale,
+                                                 bool bStandard) {
   CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument();
   if (!pDoc)
-    return CFX_ByteString();
+    return ByteString();
 
   CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr();
   IFX_Locale* pLocale = LocaleFromString(pDoc, pMgr, szLocale);
   if (!pLocale)
-    return CFX_ByteString();
+    return ByteString();
 
-  CFX_WideString strRet = pLocale->GetDatePattern(SubCategoryFromInt(iStyle));
+  WideString strRet = pLocale->GetDatePattern(SubCategoryFromInt(iStyle));
   if (!bStandard) {
     AlternateDateTimeSymbols(strRet, pLocale->GetDateTimeSymbols(),
                              g_sAltTable_Date);
@@ -2066,21 +2061,20 @@
 }
 
 // static
-CFX_ByteString CXFA_FM2JSContext::GetLocalTimeFormat(
-    CFXJSE_Value* pThis,
-    int32_t iStyle,
-    const CFX_ByteStringC& szLocale,
-    bool bStandard) {
+ByteString CXFA_FM2JSContext::GetLocalTimeFormat(CFXJSE_Value* pThis,
+                                                 int32_t iStyle,
+                                                 const ByteStringView& szLocale,
+                                                 bool bStandard) {
   CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument();
   if (!pDoc)
-    return CFX_ByteString();
+    return ByteString();
 
   CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr();
   IFX_Locale* pLocale = LocaleFromString(pDoc, pMgr, szLocale);
   if (!pLocale)
-    return CFX_ByteString();
+    return ByteString();
 
-  CFX_WideString strRet = pLocale->GetTimePattern(SubCategoryFromInt(iStyle));
+  WideString strRet = pLocale->GetTimePattern(SubCategoryFromInt(iStyle));
   if (!bStandard) {
     AlternateDateTimeSymbols(strRet, pLocale->GetDateTimeSymbols(),
                              g_sAltTable_Time);
@@ -2089,27 +2083,27 @@
 }
 
 // static
-CFX_ByteString CXFA_FM2JSContext::GetStandardDateFormat(
+ByteString CXFA_FM2JSContext::GetStandardDateFormat(
     CFXJSE_Value* pThis,
     int32_t iStyle,
-    const CFX_ByteStringC& szLocalStr) {
+    const ByteStringView& szLocalStr) {
   return GetLocalDateFormat(pThis, iStyle, szLocalStr, true);
 }
 
 // static
-CFX_ByteString CXFA_FM2JSContext::GetStandardTimeFormat(
+ByteString CXFA_FM2JSContext::GetStandardTimeFormat(
     CFXJSE_Value* pThis,
     int32_t iStyle,
-    const CFX_ByteStringC& szLocalStr) {
+    const ByteStringView& szLocalStr) {
   return GetLocalTimeFormat(pThis, iStyle, szLocalStr, true);
 }
 
 // static
-CFX_ByteString CXFA_FM2JSContext::Num2AllTime(CFXJSE_Value* pThis,
-                                              int32_t iTime,
-                                              const CFX_ByteStringC& szFormat,
-                                              const CFX_ByteStringC& szLocale,
-                                              bool bGM) {
+ByteString CXFA_FM2JSContext::Num2AllTime(CFXJSE_Value* pThis,
+                                          int32_t iTime,
+                                          const ByteStringView& szFormat,
+                                          const ByteStringView& szLocale,
+                                          bool bGM) {
   int32_t iHour = 0;
   int32_t iMin = 0;
   int32_t iSec = 0;
@@ -2127,9 +2121,9 @@
     iSec += iZoneSec;
   }
 
-  CFX_ByteString strIsoTime;
+  ByteString strIsoTime;
   strIsoTime.Format("%02d:%02d:%02d", iHour, iMin, iSec);
-  return IsoTime2Local(pThis, strIsoTime.AsStringC(), szFormat, szLocale);
+  return IsoTime2Local(pThis, strIsoTime.AsStringView(), szFormat, szLocale);
 }
 
 // static
@@ -2148,7 +2142,7 @@
 
 // static
 void CXFA_FM2JSContext::Apr(CFXJSE_Value* pThis,
-                            const CFX_ByteStringC& szFuncName,
+                            const ByteStringView& szFuncName,
                             CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   if (args.GetLength() != 3) {
@@ -2201,7 +2195,7 @@
 
 // static
 void CXFA_FM2JSContext::CTerm(CFXJSE_Value* pThis,
-                              const CFX_ByteStringC& szFuncName,
+                              const ByteStringView& szFuncName,
                               CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   if (args.GetLength() != 3) {
@@ -2232,7 +2226,7 @@
 
 // static
 void CXFA_FM2JSContext::FV(CFXJSE_Value* pThis,
-                           const CFX_ByteStringC& szFuncName,
+                           const ByteStringView& szFuncName,
                            CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   if (args.GetLength() != 3) {
@@ -2273,7 +2267,7 @@
 
 // static
 void CXFA_FM2JSContext::IPmt(CFXJSE_Value* pThis,
-                             const CFX_ByteStringC& szFuncName,
+                             const ByteStringView& szFuncName,
                              CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   if (args.GetLength() != 5) {
@@ -2330,7 +2324,7 @@
 
 // static
 void CXFA_FM2JSContext::NPV(CFXJSE_Value* pThis,
-                            const CFX_ByteStringC& szFuncName,
+                            const ByteStringView& szFuncName,
                             CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   int32_t argc = args.GetLength();
@@ -2373,7 +2367,7 @@
 
 // static
 void CXFA_FM2JSContext::Pmt(CFXJSE_Value* pThis,
-                            const CFX_ByteStringC& szFuncName,
+                            const ByteStringView& szFuncName,
                             CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   if (args.GetLength() != 3) {
@@ -2408,7 +2402,7 @@
 
 // static
 void CXFA_FM2JSContext::PPmt(CFXJSE_Value* pThis,
-                             const CFX_ByteStringC& szFuncName,
+                             const ByteStringView& szFuncName,
                              CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   if (args.GetLength() != 5) {
@@ -2466,7 +2460,7 @@
 
 // static
 void CXFA_FM2JSContext::PV(CFXJSE_Value* pThis,
-                           const CFX_ByteStringC& szFuncName,
+                           const ByteStringView& szFuncName,
                            CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   if (args.GetLength() != 3) {
@@ -2501,7 +2495,7 @@
 
 // static
 void CXFA_FM2JSContext::Rate(CFXJSE_Value* pThis,
-                             const CFX_ByteStringC& szFuncName,
+                             const ByteStringView& szFuncName,
                              CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   if (args.GetLength() != 3) {
@@ -2532,7 +2526,7 @@
 
 // static
 void CXFA_FM2JSContext::Term(CFXJSE_Value* pThis,
-                             const CFX_ByteStringC& szFuncName,
+                             const ByteStringView& szFuncName,
                              CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   if (args.GetLength() != 3) {
@@ -2563,7 +2557,7 @@
 
 // static
 void CXFA_FM2JSContext::Choose(CFXJSE_Value* pThis,
-                               const CFX_ByteStringC& szFuncName,
+                               const ByteStringView& szFuncName,
                                CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   int32_t argc = args.GetLength();
@@ -2610,17 +2604,17 @@
           GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get());
         } else {
           jsObjectValue->GetObjectProperty(
-              propertyValue->ToString().AsStringC(), newPropertyValue.get());
+              propertyValue->ToString().AsStringView(), newPropertyValue.get());
         }
-        CFX_ByteString bsChosen = ValueToUTF8String(newPropertyValue.get());
-        args.GetReturnValue()->SetString(bsChosen.AsStringC());
+        ByteString bsChosen = ValueToUTF8String(newPropertyValue.get());
+        args.GetReturnValue()->SetString(bsChosen.AsStringView());
         bFound = true;
       }
     } else {
       iValueIndex++;
       if (iValueIndex == iIndex) {
-        CFX_ByteString bsChosen = ValueToUTF8String(argIndexValue.get());
-        args.GetReturnValue()->SetString(bsChosen.AsStringC());
+        ByteString bsChosen = ValueToUTF8String(argIndexValue.get());
+        args.GetReturnValue()->SetString(bsChosen.AsStringView());
         bFound = true;
       }
     }
@@ -2632,7 +2626,7 @@
 
 // static
 void CXFA_FM2JSContext::Exists(CFXJSE_Value* pThis,
-                               const CFX_ByteStringC& szFuncName,
+                               const ByteStringView& szFuncName,
                                CFXJSE_Arguments& args) {
   if (args.GetLength() != 1) {
     ToJSContext(pThis, nullptr)->ThrowParamCountMismatchException(L"Exists");
@@ -2643,7 +2637,7 @@
 
 // static
 void CXFA_FM2JSContext::HasValue(CFXJSE_Value* pThis,
-                                 const CFX_ByteStringC& szFuncName,
+                                 const ByteStringView& szFuncName,
                                  CFXJSE_Arguments& args) {
   if (args.GetLength() != 1) {
     ToJSContext(pThis, nullptr)->ThrowParamCountMismatchException(L"HasValue");
@@ -2657,14 +2651,14 @@
     return;
   }
 
-  CFX_ByteString valueStr = argOne->ToString();
+  ByteString valueStr = argOne->ToString();
   valueStr.TrimLeft();
   args.GetReturnValue()->SetInteger(!valueStr.IsEmpty());
 }
 
 // static
 void CXFA_FM2JSContext::Oneof(CFXJSE_Value* pThis,
-                              const CFX_ByteStringC& szFuncName,
+                              const ByteStringView& szFuncName,
                               CFXJSE_Arguments& args) {
   if (args.GetLength() < 2) {
     ToJSContext(pThis, nullptr)->ThrowParamCountMismatchException(L"Oneof");
@@ -2687,7 +2681,7 @@
 
 // static
 void CXFA_FM2JSContext::Within(CFXJSE_Value* pThis,
-                               const CFX_ByteStringC& szFuncName,
+                               const ByteStringView& szFuncName,
                                CFXJSE_Arguments& args) {
   if (args.GetLength() != 3) {
     ToJSContext(pThis, nullptr)->ThrowParamCountMismatchException(L"Within");
@@ -2711,17 +2705,17 @@
     return;
   }
 
-  CFX_ByteString oneString = ValueToUTF8String(argOne.get());
-  CFX_ByteString lowString = ValueToUTF8String(argLow.get());
-  CFX_ByteString heightString = ValueToUTF8String(argHigh.get());
+  ByteString oneString = ValueToUTF8String(argOne.get());
+  ByteString lowString = ValueToUTF8String(argLow.get());
+  ByteString heightString = ValueToUTF8String(argHigh.get());
   args.GetReturnValue()->SetInteger(
-      (oneString.Compare(lowString.AsStringC()) >= 0) &&
-      (oneString.Compare(heightString.AsStringC()) <= 0));
+      (oneString.Compare(lowString.AsStringView()) >= 0) &&
+      (oneString.Compare(heightString.AsStringView()) <= 0));
 }
 
 // static
 void CXFA_FM2JSContext::If(CFXJSE_Value* pThis,
-                           const CFX_ByteStringC& szFuncName,
+                           const ByteStringView& szFuncName,
                            CFXJSE_Arguments& args) {
   if (args.GetLength() != 3) {
     ToJSContext(pThis, nullptr)->ThrowParamCountMismatchException(L"If");
@@ -2735,7 +2729,7 @@
 
 // static
 void CXFA_FM2JSContext::Eval(CFXJSE_Value* pThis,
-                             const CFX_ByteStringC& szFuncName,
+                             const ByteStringView& szFuncName,
                              CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   if (args.GetLength() != 1) {
@@ -2745,7 +2739,7 @@
 
   v8::Isolate* pIsolate = pContext->GetScriptRuntime();
   std::unique_ptr<CFXJSE_Value> scriptValue = GetSimpleValue(pThis, args, 0);
-  CFX_ByteString utf8ScriptString = ValueToUTF8String(scriptValue.get());
+  ByteString utf8ScriptString = ValueToUTF8String(scriptValue.get());
   if (utf8ScriptString.IsEmpty()) {
     args.GetReturnValue()->SetNull();
     return;
@@ -2753,7 +2747,7 @@
 
   CFX_WideTextBuf wsJavaScriptBuf;
   if (!CXFA_FM2JSContext::Translate(
-          CFX_WideString::FromUTF8(utf8ScriptString.AsStringC()).AsStringC(),
+          WideString::FromUTF8(utf8ScriptString.AsStringView()).AsStringView(),
           &wsJavaScriptBuf)) {
     pContext->ThrowCompilerErrorException();
     return;
@@ -2763,15 +2757,15 @@
       CFXJSE_Context::Create(pIsolate, nullptr, nullptr));
 
   auto returnValue = pdfium::MakeUnique<CFXJSE_Value>(pIsolate);
-  pNewContext->ExecuteScript(FX_UTF8Encode(wsJavaScriptBuf.AsStringC()).c_str(),
-                             returnValue.get());
+  pNewContext->ExecuteScript(
+      FX_UTF8Encode(wsJavaScriptBuf.AsStringView()).c_str(), returnValue.get());
 
   args.GetReturnValue()->Assign(returnValue.get());
 }
 
 // static
 void CXFA_FM2JSContext::Ref(CFXJSE_Value* pThis,
-                            const CFX_ByteStringC& szFuncName,
+                            const ByteStringView& szFuncName,
                             CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   v8::Isolate* pIsolate = pContext->GetScriptRuntime();
@@ -2829,7 +2823,7 @@
 
 // static
 void CXFA_FM2JSContext::UnitType(CFXJSE_Value* pThis,
-                                 const CFX_ByteStringC& szFuncName,
+                                 const ByteStringView& szFuncName,
                                  CFXJSE_Arguments& args) {
   if (args.GetLength() != 1) {
     ToJSContext(pThis, nullptr)->ThrowParamCountMismatchException(L"UnitType");
@@ -2842,7 +2836,7 @@
     return;
   }
 
-  CFX_ByteString unitspanString = ValueToUTF8String(unitspanValue.get());
+  ByteString unitspanString = ValueToUTF8String(unitspanValue.get());
   if (unitspanString.IsEmpty()) {
     args.GetReturnValue()->SetString("in");
     return;
@@ -2860,8 +2854,7 @@
     VALUETYPE_ISIN,
   };
   unitspanString.MakeLower();
-  CFX_WideString wsTypeString =
-      CFX_WideString::FromUTF8(unitspanString.AsStringC());
+  WideString wsTypeString = WideString::FromUTF8(unitspanString.AsStringView());
   const wchar_t* pData = wsTypeString.c_str();
   int32_t u = 0;
   int32_t uLen = wsTypeString.GetLength();
@@ -2937,7 +2930,7 @@
 
 // static
 void CXFA_FM2JSContext::UnitValue(CFXJSE_Value* pThis,
-                                  const CFX_ByteStringC& szFuncName,
+                                  const ByteStringView& szFuncName,
                                   CFXJSE_Arguments& args) {
   int32_t argc = args.GetLength();
   if (argc < 1 || argc > 2) {
@@ -2951,7 +2944,7 @@
     return;
   }
 
-  CFX_ByteString unitspanString = ValueToUTF8String(unitspanValue.get());
+  ByteString unitspanString = ValueToUTF8String(unitspanValue.get());
   const char* pData = unitspanString.c_str();
   if (!pData) {
     args.GetReturnValue()->SetInteger(0);
@@ -2974,7 +2967,7 @@
     ++u;
 
   FX_STRSIZE uLen = unitspanString.GetLength();
-  CFX_ByteString strFirstUnit;
+  ByteString strFirstUnit;
   while (u < uLen) {
     if (pData[u] == ' ')
       break;
@@ -2984,10 +2977,10 @@
   }
   strFirstUnit.MakeLower();
 
-  CFX_ByteString strUnit;
+  ByteString strUnit;
   if (argc > 1) {
     std::unique_ptr<CFXJSE_Value> unitValue = GetSimpleValue(pThis, args, 1);
-    CFX_ByteString unitTempString = ValueToUTF8String(unitValue.get());
+    ByteString unitTempString = ValueToUTF8String(unitValue.get());
     const char* pChar = unitTempString.c_str();
     FX_STRSIZE uVal = 0;
     while (IsWhitespace(pChar[uVal]))
@@ -3076,7 +3069,7 @@
 
 // static
 void CXFA_FM2JSContext::At(CFXJSE_Value* pThis,
-                           const CFX_ByteStringC& szFuncName,
+                           const ByteStringView& szFuncName,
                            CFXJSE_Arguments& args) {
   if (args.GetLength() != 2) {
     ToJSContext(pThis, nullptr)->ThrowParamCountMismatchException(L"At");
@@ -3090,20 +3083,20 @@
     return;
   }
 
-  CFX_ByteString stringTwo = ValueToUTF8String(argTwo.get());
+  ByteString stringTwo = ValueToUTF8String(argTwo.get());
   if (stringTwo.IsEmpty()) {
     args.GetReturnValue()->SetInteger(1);
     return;
   }
 
-  CFX_ByteString stringOne = ValueToUTF8String(argOne.get());
-  auto pos = stringOne.Find(stringTwo.AsStringC());
+  ByteString stringOne = ValueToUTF8String(argOne.get());
+  auto pos = stringOne.Find(stringTwo.AsStringView());
   args.GetReturnValue()->SetInteger(pos.has_value() ? pos.value() + 1 : 0);
 }
 
 // static
 void CXFA_FM2JSContext::Concat(CFXJSE_Value* pThis,
-                               const CFX_ByteStringC& szFuncName,
+                               const ByteStringView& szFuncName,
                                CFXJSE_Arguments& args) {
   int32_t argc = args.GetLength();
   if (argc < 1) {
@@ -3111,7 +3104,7 @@
     return;
   }
 
-  CFX_ByteString resultString;
+  ByteString resultString;
   bool bAllNull = true;
   for (int32_t i = 0; i < argc; i++) {
     std::unique_ptr<CFXJSE_Value> value = GetSimpleValue(pThis, args, i);
@@ -3127,12 +3120,12 @@
     return;
   }
 
-  args.GetReturnValue()->SetString(resultString.AsStringC());
+  args.GetReturnValue()->SetString(resultString.AsStringView());
 }
 
 // static
 void CXFA_FM2JSContext::Decode(CFXJSE_Value* pThis,
-                               const CFX_ByteStringC& szFuncName,
+                               const ByteStringView& szFuncName,
                                CFXJSE_Arguments& args) {
   int32_t argc = args.GetLength();
   if (argc < 1 || argc > 2) {
@@ -3147,11 +3140,11 @@
       return;
     }
 
-    CFX_WideString decoded = DecodeURL(
-        CFX_WideString::FromUTF8(ValueToUTF8String(argOne.get()).AsStringC()));
+    WideString decoded = DecodeURL(
+        WideString::FromUTF8(ValueToUTF8String(argOne.get()).AsStringView()));
 
     args.GetReturnValue()->SetString(
-        FX_UTF8Encode(decoded.AsStringC()).AsStringC());
+        FX_UTF8Encode(decoded.AsStringView()).AsStringView());
     return;
   }
 
@@ -3162,12 +3155,12 @@
     return;
   }
 
-  CFX_ByteString toDecodeString = ValueToUTF8String(argOne.get());
-  CFX_ByteString identifyString = ValueToUTF8String(argTwo.get());
-  CFX_WideString decoded;
+  ByteString toDecodeString = ValueToUTF8String(argOne.get());
+  ByteString identifyString = ValueToUTF8String(argTwo.get());
+  WideString decoded;
 
-  CFX_WideString toDecodeWideString =
-      CFX_WideString::FromUTF8(toDecodeString.AsStringC());
+  WideString toDecodeWideString =
+      WideString::FromUTF8(toDecodeString.AsStringView());
 
   if (identifyString.EqualNoCase("html"))
     decoded = DecodeHTML(toDecodeWideString);
@@ -3177,11 +3170,11 @@
     decoded = DecodeURL(toDecodeWideString);
 
   args.GetReturnValue()->SetString(
-      FX_UTF8Encode(decoded.AsStringC()).AsStringC());
+      FX_UTF8Encode(decoded.AsStringView()).AsStringView());
 }
 
 // static
-CFX_WideString CXFA_FM2JSContext::DecodeURL(const CFX_WideString& wsURLString) {
+WideString CXFA_FM2JSContext::DecodeURL(const WideString& wsURLString) {
   const wchar_t* pData = wsURLString.c_str();
   FX_STRSIZE i = 0;
   CFX_WideTextBuf wsResultBuf;
@@ -3206,7 +3199,7 @@
       } else if (ch <= 'f' && ch >= 'a') {
         chTemp += (ch - 'a' + 10) * (!iCount ? 16 : 1);
       } else {
-        return CFX_WideString();
+        return WideString();
       }
       ++iCount;
     }
@@ -3218,8 +3211,7 @@
 }
 
 // static
-CFX_WideString CXFA_FM2JSContext::DecodeHTML(
-    const CFX_WideString& wsHTMLString) {
+WideString CXFA_FM2JSContext::DecodeHTML(const WideString& wsHTMLString) {
   wchar_t strString[9];
   FX_STRSIZE iStrIndex = 0;
   FX_STRSIZE iLen = wsHTMLString.GetLength();
@@ -3241,7 +3233,7 @@
       ++i;
       ch = pData[i];
       if (ch != 'x' && ch != 'X') {
-        return CFX_WideString();
+        return WideString();
       }
 
       ++i;
@@ -3256,7 +3248,7 @@
           } else if (ch <= 'F' && ch >= 'A') {
             iCode += ch - 'A' + 10;
           } else {
-            return CFX_WideString();
+            return WideString();
           }
           ++i;
           // TODO(dsinclair): Postmultiply seems wrong, start at zero
@@ -3290,7 +3282,7 @@
 }
 
 // static
-CFX_WideString CXFA_FM2JSContext::DecodeXML(const CFX_WideString& wsXMLString) {
+WideString CXFA_FM2JSContext::DecodeXML(const WideString& wsXMLString) {
   wchar_t strString[9];
   int32_t iStrIndex = 0;
   int32_t iLen = wsXMLString.GetLength();
@@ -3315,7 +3307,7 @@
       ++i;
       ch = pData[i];
       if (ch != 'x' && ch != 'X') {
-        return CFX_WideString();
+        return WideString();
       }
 
       ++i;
@@ -3330,7 +3322,7 @@
           } else if (ch <= 'F' && ch >= 'A') {
             iCode += ch - 'A' + 10;
           } else {
-            return CFX_WideString();
+            return WideString();
           }
           ++i;
           iCode *= 16;
@@ -3387,7 +3379,7 @@
 
 // static
 void CXFA_FM2JSContext::Encode(CFXJSE_Value* pThis,
-                               const CFX_ByteStringC& szFuncName,
+                               const ByteStringView& szFuncName,
                                CFXJSE_Arguments& args) {
   int32_t argc = args.GetLength();
   if (argc < 1 || argc > 2) {
@@ -3402,9 +3394,9 @@
       return;
     }
 
-    CFX_WideString encoded = EncodeURL(ValueToUTF8String(argOne.get()));
+    WideString encoded = EncodeURL(ValueToUTF8String(argOne.get()));
     args.GetReturnValue()->SetString(
-        FX_UTF8Encode(encoded.AsStringC()).AsStringC());
+        FX_UTF8Encode(encoded.AsStringView()).AsStringView());
     return;
   }
 
@@ -3415,9 +3407,9 @@
     return;
   }
 
-  CFX_ByteString toEncodeString = ValueToUTF8String(argOne.get());
-  CFX_ByteString identifyString = ValueToUTF8String(argTwo.get());
-  CFX_WideString encoded;
+  ByteString toEncodeString = ValueToUTF8String(argOne.get());
+  ByteString identifyString = ValueToUTF8String(argTwo.get());
+  WideString encoded;
   if (identifyString.EqualNoCase("html"))
     encoded = EncodeHTML(toEncodeString);
   else if (identifyString.EqualNoCase("xml"))
@@ -3426,13 +3418,12 @@
     encoded = EncodeURL(toEncodeString);
 
   args.GetReturnValue()->SetString(
-      FX_UTF8Encode(encoded.AsStringC()).AsStringC());
+      FX_UTF8Encode(encoded.AsStringView()).AsStringView());
 }
 
 // static
-CFX_WideString CXFA_FM2JSContext::EncodeURL(const CFX_ByteString& szURLString) {
-  CFX_WideString wsURLString =
-      CFX_WideString::FromUTF8(szURLString.AsStringC());
+WideString CXFA_FM2JSContext::EncodeURL(const ByteString& szURLString) {
+  WideString wsURLString = WideString::FromUTF8(szURLString.AsStringView());
   CFX_WideTextBuf wsResultBuf;
   wchar_t strEncode[4];
   strEncode[0] = '%';
@@ -3494,7 +3485,7 @@
       wsResultBuf.AppendChar(ch);
     } else {
       const wchar_t iRadix = 16;
-      CFX_WideString strTmp;
+      WideString strTmp;
       while (ch >= iRadix) {
         wchar_t tmp = strCode[ch % iRadix];
         ch /= iRadix;
@@ -3529,10 +3520,8 @@
 }
 
 // static
-CFX_WideString CXFA_FM2JSContext::EncodeHTML(
-    const CFX_ByteString& szHTMLString) {
-  CFX_WideString wsHTMLString =
-      CFX_WideString::FromUTF8(szHTMLString.AsStringC());
+WideString CXFA_FM2JSContext::EncodeHTML(const ByteString& szHTMLString) {
+  WideString wsHTMLString = WideString::FromUTF8(szHTMLString.AsStringView());
   const wchar_t* strCode = L"0123456789abcdef";
   wchar_t strEncode[9];
   strEncode[0] = '&';
@@ -3548,7 +3537,7 @@
   const wchar_t* pData = wsHTMLString.c_str();
   while (i < iLen) {
     uint32_t ch = pData[i];
-    CFX_WideString htmlReserve;
+    WideString htmlReserve;
     if (HTMLCode2STR(ch, &htmlReserve)) {
       wsResultBuf.AppendChar(L'&');
       wsResultBuf << htmlReserve;
@@ -3578,9 +3567,8 @@
 }
 
 // static
-CFX_WideString CXFA_FM2JSContext::EncodeXML(const CFX_ByteString& szXMLString) {
-  CFX_WideString wsXMLString =
-      CFX_WideString::FromUTF8(szXMLString.AsStringC());
+WideString CXFA_FM2JSContext::EncodeXML(const ByteString& szXMLString) {
+  WideString wsXMLString = WideString::FromUTF8(szXMLString.AsStringView());
   CFX_WideTextBuf wsResultBuf;
   wchar_t strEncode[9];
   strEncode[0] = '&';
@@ -3595,27 +3583,27 @@
     switch (ch) {
       case '"':
         wsResultBuf.AppendChar('&');
-        wsResultBuf << CFX_WideStringC(L"quot");
+        wsResultBuf << WideStringView(L"quot");
         wsResultBuf.AppendChar(';');
         break;
       case '&':
         wsResultBuf.AppendChar('&');
-        wsResultBuf << CFX_WideStringC(L"amp");
+        wsResultBuf << WideStringView(L"amp");
         wsResultBuf.AppendChar(';');
         break;
       case '\'':
         wsResultBuf.AppendChar('&');
-        wsResultBuf << CFX_WideStringC(L"apos");
+        wsResultBuf << WideStringView(L"apos");
         wsResultBuf.AppendChar(';');
         break;
       case '<':
         wsResultBuf.AppendChar('&');
-        wsResultBuf << CFX_WideStringC(L"lt");
+        wsResultBuf << WideStringView(L"lt");
         wsResultBuf.AppendChar(';');
         break;
       case '>':
         wsResultBuf.AppendChar('&');
-        wsResultBuf << CFX_WideStringC(L"gt");
+        wsResultBuf << WideStringView(L"gt");
         wsResultBuf.AppendChar(';');
         break;
       default: {
@@ -3646,10 +3634,10 @@
 }
 
 // static
-bool CXFA_FM2JSContext::HTMLSTR2Code(const CFX_WideStringC& pData,
+bool CXFA_FM2JSContext::HTMLSTR2Code(const WideStringView& pData,
                                      uint32_t* iCode) {
   auto cmpFunc = [](const XFA_FMHtmlReserveCode& iter,
-                    const CFX_WideStringC& val) {
+                    const WideStringView& val) {
     // TODO(tsepez): check usage of c_str() below.
     return wcscmp(val.unterminated_c_str(), iter.m_htmlReserve) > 0;
   };
@@ -3666,7 +3654,7 @@
 
 // static
 bool CXFA_FM2JSContext::HTMLCode2STR(uint32_t iCode,
-                                     CFX_WideString* wsHTMLReserve) {
+                                     WideString* wsHTMLReserve) {
   auto cmpFunc = [](const XFA_FMHtmlReserveCode iter, const uint32_t& val) {
     return iter.m_uCode < val;
   };
@@ -3682,7 +3670,7 @@
 
 // static
 void CXFA_FM2JSContext::Format(CFXJSE_Value* pThis,
-                               const CFX_ByteStringC& szFuncName,
+                               const ByteStringView& szFuncName,
                                CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   if (args.GetLength() < 2) {
@@ -3691,10 +3679,10 @@
   }
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0);
-  CFX_ByteString szPattern = ValueToUTF8String(argOne.get());
+  ByteString szPattern = ValueToUTF8String(argOne.get());
 
   std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1);
-  CFX_ByteString szValue = ValueToUTF8String(argTwo.get());
+  ByteString szValue = ValueToUTF8String(argTwo.get());
 
   CXFA_Document* pDoc = pContext->GetDocument();
   CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr();
@@ -3704,9 +3692,9 @@
   CXFA_WidgetData widgetData(pThisNode);
   IFX_Locale* pLocale = widgetData.GetLocal();
   uint32_t patternType;
-  CFX_WideString wsPattern = CFX_WideString::FromUTF8(szPattern.AsStringC());
-  CFX_WideString wsValue = CFX_WideString::FromUTF8(szValue.AsStringC());
-  if (!PatternStringType(szPattern.AsStringC(), patternType)) {
+  WideString wsPattern = WideString::FromUTF8(szPattern.AsStringView());
+  WideString wsValue = WideString::FromUTF8(szValue.AsStringView());
+  if (!PatternStringType(szPattern.AsStringView(), patternType)) {
     switch (patternType) {
       case XFA_VT_DATETIME: {
         auto iTChar = wsPattern.Find(L'T');
@@ -3714,10 +3702,10 @@
           args.GetReturnValue()->SetString("");
           return;
         }
-        CFX_WideString wsDatePattern(L"date{");
+        WideString wsDatePattern(L"date{");
         wsDatePattern += wsPattern.Left(iTChar.value()) + L"} ";
 
-        CFX_WideString wsTimePattern(L"time{");
+        WideString wsTimePattern(L"time{");
         wsTimePattern +=
             wsPattern.Right(wsPattern.GetLength() - (iTChar.value() + 1)) +
             L"}";
@@ -3736,7 +3724,7 @@
         wsPattern = L"num{" + wsPattern + L"}";
       } break;
       default: {
-        CFX_WideString wsTestPattern;
+        WideString wsTestPattern;
         wsTestPattern = L"num{" + wsPattern + L"}";
         CXFA_LocaleValue tempLocaleValue(XFA_VT_FLOAT, wsValue, wsTestPattern,
                                          pLocale, pMgr);
@@ -3752,19 +3740,19 @@
     }
   }
   CXFA_LocaleValue localeValue(patternType, wsValue, wsPattern, pLocale, pMgr);
-  CFX_WideString wsRet;
+  WideString wsRet;
   if (!localeValue.FormatPatterns(wsRet, wsPattern, pLocale,
                                   XFA_VALUEPICTURE_Display)) {
     args.GetReturnValue()->SetString("");
     return;
   }
 
-  args.GetReturnValue()->SetString(wsRet.UTF8Encode().AsStringC());
+  args.GetReturnValue()->SetString(wsRet.UTF8Encode().AsStringView());
 }
 
 // static
 void CXFA_FM2JSContext::Left(CFXJSE_Value* pThis,
-                             const CFX_ByteStringC& szFuncName,
+                             const ByteStringView& szFuncName,
                              CFXJSE_Arguments& args) {
   if (args.GetLength() != 2) {
     ToJSContext(pThis, nullptr)->ThrowParamCountMismatchException(L"Left");
@@ -3779,14 +3767,14 @@
     return;
   }
 
-  CFX_ByteString sourceString = ValueToUTF8String(argOne.get());
+  ByteString sourceString = ValueToUTF8String(argOne.get());
   int32_t count = std::max(0, ValueToInteger(pThis, argTwo.get()));
-  args.GetReturnValue()->SetString(sourceString.Left(count).AsStringC());
+  args.GetReturnValue()->SetString(sourceString.Left(count).AsStringView());
 }
 
 // static
 void CXFA_FM2JSContext::Len(CFXJSE_Value* pThis,
-                            const CFX_ByteStringC& szFuncName,
+                            const ByteStringView& szFuncName,
                             CFXJSE_Arguments& args) {
   if (args.GetLength() != 1) {
     ToJSContext(pThis, nullptr)->ThrowParamCountMismatchException(L"Len");
@@ -3799,13 +3787,13 @@
     return;
   }
 
-  CFX_ByteString sourceString = ValueToUTF8String(argOne.get());
+  ByteString sourceString = ValueToUTF8String(argOne.get());
   args.GetReturnValue()->SetInteger(sourceString.GetLength());
 }
 
 // static
 void CXFA_FM2JSContext::Lower(CFXJSE_Value* pThis,
-                              const CFX_ByteStringC& szFuncName,
+                              const ByteStringView& szFuncName,
                               CFXJSE_Arguments& args) {
   int32_t argc = args.GetLength();
   if (argc < 1 || argc > 2) {
@@ -3820,8 +3808,8 @@
   }
 
   CFX_WideTextBuf lowStringBuf;
-  CFX_ByteString argString = ValueToUTF8String(argOne.get());
-  CFX_WideString wsArgString = CFX_WideString::FromUTF8(argString.AsStringC());
+  ByteString argString = ValueToUTF8String(argOne.get());
+  WideString wsArgString = WideString::FromUTF8(argString.AsStringView());
   const wchar_t* pData = wsArgString.c_str();
   FX_STRSIZE i = 0;
   while (i < argString.GetLength()) {
@@ -3837,12 +3825,12 @@
   lowStringBuf.AppendChar(0);
 
   args.GetReturnValue()->SetString(
-      FX_UTF8Encode(lowStringBuf.AsStringC()).AsStringC());
+      FX_UTF8Encode(lowStringBuf.AsStringView()).AsStringView());
 }
 
 // static
 void CXFA_FM2JSContext::Ltrim(CFXJSE_Value* pThis,
-                              const CFX_ByteStringC& szFuncName,
+                              const ByteStringView& szFuncName,
                               CFXJSE_Arguments& args) {
   if (args.GetLength() != 1) {
     ToJSContext(pThis, nullptr)->ThrowParamCountMismatchException(L"Ltrim");
@@ -3855,14 +3843,14 @@
     return;
   }
 
-  CFX_ByteString sourceString = ValueToUTF8String(argOne.get());
+  ByteString sourceString = ValueToUTF8String(argOne.get());
   sourceString.TrimLeft();
-  args.GetReturnValue()->SetString(sourceString.AsStringC());
+  args.GetReturnValue()->SetString(sourceString.AsStringView());
 }
 
 // static
 void CXFA_FM2JSContext::Parse(CFXJSE_Value* pThis,
-                              const CFX_ByteStringC& szFuncName,
+                              const ByteStringView& szFuncName,
                               CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   if (args.GetLength() != 2) {
@@ -3877,8 +3865,8 @@
     return;
   }
 
-  CFX_ByteString szPattern = ValueToUTF8String(argOne.get());
-  CFX_ByteString szValue = ValueToUTF8String(argTwo.get());
+  ByteString szPattern = ValueToUTF8String(argOne.get());
+  ByteString szValue = ValueToUTF8String(argTwo.get());
   CXFA_Document* pDoc = pContext->GetDocument();
   CXFA_LocaleMgr* pMgr = pDoc->GetLocalMgr();
   CXFA_Node* pThisNode = ToNode(pDoc->GetScriptContext()->GetThisObject());
@@ -3886,10 +3874,10 @@
 
   CXFA_WidgetData widgetData(pThisNode);
   IFX_Locale* pLocale = widgetData.GetLocal();
-  CFX_WideString wsPattern = CFX_WideString::FromUTF8(szPattern.AsStringC());
-  CFX_WideString wsValue = CFX_WideString::FromUTF8(szValue.AsStringC());
+  WideString wsPattern = WideString::FromUTF8(szPattern.AsStringView());
+  WideString wsValue = WideString::FromUTF8(szValue.AsStringView());
   uint32_t patternType;
-  if (PatternStringType(szPattern.AsStringC(), patternType)) {
+  if (PatternStringType(szPattern.AsStringView(), patternType)) {
     CXFA_LocaleValue localeValue(patternType, wsValue, wsPattern, pLocale,
                                  pMgr);
     if (!localeValue.IsValid()) {
@@ -3897,7 +3885,7 @@
       return;
     }
     args.GetReturnValue()->SetString(
-        localeValue.GetValue().UTF8Encode().AsStringC());
+        localeValue.GetValue().UTF8Encode().AsStringView());
     return;
   }
 
@@ -3908,9 +3896,9 @@
         args.GetReturnValue()->SetString("");
         return;
       }
-      CFX_WideString wsDatePattern(L"date{" + wsPattern.Left(iTChar.value()) +
-                                   L"} ");
-      CFX_WideString wsTimePattern(
+      WideString wsDatePattern(L"date{" + wsPattern.Left(iTChar.value()) +
+                               L"} ");
+      WideString wsTimePattern(
           L"time{" +
           wsPattern.Right(wsPattern.GetLength() - (iTChar.value() + 1)) + L"}");
       wsPattern = wsDatePattern + wsTimePattern;
@@ -3921,7 +3909,7 @@
         return;
       }
       args.GetReturnValue()->SetString(
-          localeValue.GetValue().UTF8Encode().AsStringC());
+          localeValue.GetValue().UTF8Encode().AsStringView());
       return;
     }
     case XFA_VT_DATE: {
@@ -3933,7 +3921,7 @@
         return;
       }
       args.GetReturnValue()->SetString(
-          localeValue.GetValue().UTF8Encode().AsStringC());
+          localeValue.GetValue().UTF8Encode().AsStringView());
       return;
     }
     case XFA_VT_TIME: {
@@ -3945,7 +3933,7 @@
         return;
       }
       args.GetReturnValue()->SetString(
-          localeValue.GetValue().UTF8Encode().AsStringC());
+          localeValue.GetValue().UTF8Encode().AsStringView());
       return;
     }
     case XFA_VT_TEXT: {
@@ -3957,7 +3945,7 @@
         return;
       }
       args.GetReturnValue()->SetString(
-          localeValue.GetValue().UTF8Encode().AsStringC());
+          localeValue.GetValue().UTF8Encode().AsStringView());
       return;
     }
     case XFA_VT_FLOAT: {
@@ -3972,7 +3960,7 @@
       return;
     }
     default: {
-      CFX_WideString wsTestPattern;
+      WideString wsTestPattern;
       wsTestPattern = L"num{" + wsPattern + L"}";
       CXFA_LocaleValue localeValue(XFA_VT_FLOAT, wsValue, wsTestPattern,
                                    pLocale, pMgr);
@@ -3989,7 +3977,7 @@
         return;
       }
       args.GetReturnValue()->SetString(
-          localeValue2.GetValue().UTF8Encode().AsStringC());
+          localeValue2.GetValue().UTF8Encode().AsStringView());
       return;
     }
   }
@@ -3997,7 +3985,7 @@
 
 // static
 void CXFA_FM2JSContext::Replace(CFXJSE_Value* pThis,
-                                const CFX_ByteStringC& szFuncName,
+                                const ByteStringView& szFuncName,
                                 CFXJSE_Arguments& args) {
   int32_t argc = args.GetLength();
   if (argc < 2 || argc > 3) {
@@ -4007,14 +3995,14 @@
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0);
   std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1);
-  CFX_ByteString oneString;
-  CFX_ByteString twoString;
+  ByteString oneString;
+  ByteString twoString;
   if (!ValueIsNull(pThis, argOne.get()) && !ValueIsNull(pThis, argTwo.get())) {
     oneString = ValueToUTF8String(argOne.get());
     twoString = ValueToUTF8String(argTwo.get());
   }
 
-  CFX_ByteString threeString;
+  ByteString threeString;
   if (argc > 2) {
     std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, args, 2);
     threeString = ValueToUTF8String(argThree.get());
@@ -4051,12 +4039,12 @@
     }
   }
   resultString << '\0';
-  args.GetReturnValue()->SetString(CFX_ByteStringC(resultString.str().c_str()));
+  args.GetReturnValue()->SetString(ByteStringView(resultString.str().c_str()));
 }
 
 // static
 void CXFA_FM2JSContext::Right(CFXJSE_Value* pThis,
-                              const CFX_ByteStringC& szFuncName,
+                              const ByteStringView& szFuncName,
                               CFXJSE_Arguments& args) {
   if (args.GetLength() != 2) {
     ToJSContext(pThis, nullptr)->ThrowParamCountMismatchException(L"Right");
@@ -4071,14 +4059,14 @@
     return;
   }
 
-  CFX_ByteString sourceString = ValueToUTF8String(argOne.get());
+  ByteString sourceString = ValueToUTF8String(argOne.get());
   int32_t count = std::max(0, ValueToInteger(pThis, argTwo.get()));
-  args.GetReturnValue()->SetString(sourceString.Right(count).AsStringC());
+  args.GetReturnValue()->SetString(sourceString.Right(count).AsStringView());
 }
 
 // static
 void CXFA_FM2JSContext::Rtrim(CFXJSE_Value* pThis,
-                              const CFX_ByteStringC& szFuncName,
+                              const ByteStringView& szFuncName,
                               CFXJSE_Arguments& args) {
   if (args.GetLength() != 1) {
     ToJSContext(pThis, nullptr)->ThrowParamCountMismatchException(L"Rtrim");
@@ -4091,14 +4079,14 @@
     return;
   }
 
-  CFX_ByteString sourceString = ValueToUTF8String(argOne.get());
+  ByteString sourceString = ValueToUTF8String(argOne.get());
   sourceString.TrimRight();
-  args.GetReturnValue()->SetString(sourceString.AsStringC());
+  args.GetReturnValue()->SetString(sourceString.AsStringView());
 }
 
 // static
 void CXFA_FM2JSContext::Space(CFXJSE_Value* pThis,
-                              const CFX_ByteStringC& szFuncName,
+                              const ByteStringView& szFuncName,
                               CFXJSE_Arguments& args) {
   if (args.GetLength() != 1) {
     ToJSContext(pThis, nullptr)->ThrowParamCountMismatchException(L"Space");
@@ -4119,12 +4107,12 @@
     index++;
   }
   spaceString << '\0';
-  args.GetReturnValue()->SetString(CFX_ByteStringC(spaceString.str().c_str()));
+  args.GetReturnValue()->SetString(ByteStringView(spaceString.str().c_str()));
 }
 
 // static
 void CXFA_FM2JSContext::Str(CFXJSE_Value* pThis,
-                            const CFX_ByteStringC& szFuncName,
+                            const ByteStringView& szFuncName,
                             CFXJSE_Arguments& args) {
   int32_t argc = args.GetLength();
   if (argc < 1 || argc > 3) {
@@ -4153,11 +4141,11 @@
         0, static_cast<int32_t>(ValueToFloat(pThis, precisionValue.get())));
   }
 
-  CFX_ByteString numberString;
-  CFX_ByteString formatStr = "%";
+  ByteString numberString;
+  ByteString formatStr = "%";
   if (iPrecision) {
     formatStr += ".";
-    formatStr += CFX_ByteString::FormatInteger(iPrecision);
+    formatStr += ByteString::FormatInteger(iPrecision);
   }
   formatStr += "f";
   numberString.Format(formatStr.c_str(), fNumber);
@@ -4180,7 +4168,7 @@
       ++i;
     }
     resultBuf << '\0';
-    args.GetReturnValue()->SetString(CFX_ByteStringC(resultBuf.str().c_str()));
+    args.GetReturnValue()->SetString(ByteStringView(resultBuf.str().c_str()));
     return;
   }
 
@@ -4199,7 +4187,7 @@
       }
       resultBuf << pData;
     }
-    args.GetReturnValue()->SetString(CFX_ByteStringC(resultBuf.str().c_str()));
+    args.GetReturnValue()->SetString(ByteStringView(resultBuf.str().c_str()));
     return;
   }
 
@@ -4235,12 +4223,12 @@
     ++i;
   }
   resultBuf << '\0';
-  args.GetReturnValue()->SetString(CFX_ByteStringC(resultBuf.str().c_str()));
+  args.GetReturnValue()->SetString(ByteStringView(resultBuf.str().c_str()));
 }
 
 // static
 void CXFA_FM2JSContext::Stuff(CFXJSE_Value* pThis,
-                              const CFX_ByteStringC& szFuncName,
+                              const ByteStringView& szFuncName,
                               CFXJSE_Arguments& args) {
   int32_t argc = args.GetLength();
   if (argc < 3 || argc > 4) {
@@ -4248,8 +4236,8 @@
     return;
   }
 
-  CFX_ByteString sourceString;
-  CFX_ByteString insertString;
+  ByteString sourceString;
+  ByteString insertString;
   int32_t iLength = 0;
   int32_t iStart = 0;
   int32_t iDelete = 0;
@@ -4279,19 +4267,19 @@
     resultString << static_cast<char>(sourceString[i]);
     ++i;
   }
-  resultString << insertString.AsStringC();
+  resultString << insertString.AsStringView();
   i = iStart + iDelete;
   while (i < iLength) {
     resultString << static_cast<char>(sourceString[i]);
     ++i;
   }
   resultString << '\0';
-  args.GetReturnValue()->SetString(CFX_ByteStringC(resultString.str().c_str()));
+  args.GetReturnValue()->SetString(ByteStringView(resultString.str().c_str()));
 }
 
 // static
 void CXFA_FM2JSContext::Substr(CFXJSE_Value* pThis,
-                               const CFX_ByteStringC& szFuncName,
+                               const ByteStringView& szFuncName,
                                CFXJSE_Arguments& args) {
   if (args.GetLength() != 3) {
     ToJSContext(pThis, nullptr)->ThrowParamCountMismatchException(L"Substr");
@@ -4310,7 +4298,7 @@
 
   int32_t iStart = 0;
   int32_t iCount = 0;
-  CFX_ByteString szSourceStr = ValueToUTF8String(stringValue.get());
+  ByteString szSourceStr = ValueToUTF8String(stringValue.get());
   int32_t iLength = szSourceStr.GetLength();
   if (iLength == 0) {
     args.GetReturnValue()->SetString("");
@@ -4323,12 +4311,13 @@
       std::max(0, static_cast<int32_t>(ValueToFloat(pThis, endValue.get())));
 
   iStart -= 1;
-  args.GetReturnValue()->SetString(szSourceStr.Mid(iStart, iCount).AsStringC());
+  args.GetReturnValue()->SetString(
+      szSourceStr.Mid(iStart, iCount).AsStringView());
 }
 
 // static
 void CXFA_FM2JSContext::Uuid(CFXJSE_Value* pThis,
-                             const CFX_ByteStringC& szFuncName,
+                             const ByteStringView& szFuncName,
                              CFXJSE_Arguments& args) {
   int32_t argc = args.GetLength();
   if (argc < 0 || argc > 1) {
@@ -4341,12 +4330,12 @@
     std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0);
     iNum = static_cast<int32_t>(ValueToFloat(pThis, argOne.get()));
   }
-  args.GetReturnValue()->SetString(GUIDString(!!iNum).AsStringC());
+  args.GetReturnValue()->SetString(GUIDString(!!iNum).AsStringView());
 }
 
 // static
 void CXFA_FM2JSContext::Upper(CFXJSE_Value* pThis,
-                              const CFX_ByteStringC& szFuncName,
+                              const ByteStringView& szFuncName,
                               CFXJSE_Arguments& args) {
   int32_t argc = args.GetLength();
   if (argc < 1 || argc > 2) {
@@ -4361,8 +4350,8 @@
   }
 
   CFX_WideTextBuf upperStringBuf;
-  CFX_ByteString argString = ValueToUTF8String(argOne.get());
-  CFX_WideString wsArgString = CFX_WideString::FromUTF8(argString.AsStringC());
+  ByteString argString = ValueToUTF8String(argOne.get());
+  WideString wsArgString = WideString::FromUTF8(argString.AsStringView());
   const wchar_t* pData = wsArgString.c_str();
   FX_STRSIZE i = 0;
   while (i < wsArgString.GetLength()) {
@@ -4378,12 +4367,12 @@
   upperStringBuf.AppendChar(0);
 
   args.GetReturnValue()->SetString(
-      FX_UTF8Encode(upperStringBuf.AsStringC()).AsStringC());
+      FX_UTF8Encode(upperStringBuf.AsStringView()).AsStringView());
 }
 
 // static
 void CXFA_FM2JSContext::WordNum(CFXJSE_Value* pThis,
-                                const CFX_ByteStringC& szFuncName,
+                                const ByteStringView& szFuncName,
                                 CFXJSE_Arguments& args) {
   int32_t argc = args.GetLength();
   if (argc < 1 || argc > 3) {
@@ -4410,7 +4399,7 @@
         static_cast<int32_t>(ValueToFloat(pThis, identifierValue.get()));
   }
 
-  CFX_ByteString localeString;
+  ByteString localeString;
   if (argc > 2) {
     std::unique_ptr<CFXJSE_Value> localeValue = GetSimpleValue(pThis, args, 2);
     if (localeValue->IsNull()) {
@@ -4425,27 +4414,27 @@
     return;
   }
 
-  CFX_ByteString numberString;
+  ByteString numberString;
   numberString.Format("%.2f", fNumber);
 
   args.GetReturnValue()->SetString(
-      WordUS(numberString, iIdentifier).AsStringC());
+      WordUS(numberString, iIdentifier).AsStringView());
 }
 
 // static
-CFX_ByteString CXFA_FM2JSContext::TrillionUS(const CFX_ByteStringC& szData) {
+ByteString CXFA_FM2JSContext::TrillionUS(const ByteStringView& szData) {
   std::ostringstream strBuf;
-  CFX_ByteStringC pUnits[] = {"zero", "one", "two",   "three", "four",
-                              "five", "six", "seven", "eight", "nine"};
-  CFX_ByteStringC pCapUnits[] = {"Zero", "One", "Two",   "Three", "Four",
-                                 "Five", "Six", "Seven", "Eight", "Nine"};
-  CFX_ByteStringC pTens[] = {"Ten",      "Eleven",  "Twelve",  "Thirteen",
-                             "Fourteen", "Fifteen", "Sixteen", "Seventeen",
-                             "Eighteen", "Nineteen"};
-  CFX_ByteStringC pLastTens[] = {"Twenty", "Thirty",  "Forty",  "Fifty",
-                                 "Sixty",  "Seventy", "Eighty", "Ninety"};
-  CFX_ByteStringC pComm[] = {" Hundred ", " Thousand ", " Million ",
-                             " Billion ", "Trillion"};
+  ByteStringView pUnits[] = {"zero", "one", "two",   "three", "four",
+                             "five", "six", "seven", "eight", "nine"};
+  ByteStringView pCapUnits[] = {"Zero", "One", "Two",   "Three", "Four",
+                                "Five", "Six", "Seven", "Eight", "Nine"};
+  ByteStringView pTens[] = {"Ten",      "Eleven",  "Twelve",  "Thirteen",
+                            "Fourteen", "Fifteen", "Sixteen", "Seventeen",
+                            "Eighteen", "Nineteen"};
+  ByteStringView pLastTens[] = {"Twenty", "Thirty",  "Forty",  "Fifty",
+                                "Sixty",  "Seventy", "Eighty", "Ninety"};
+  ByteStringView pComm[] = {" Hundred ", " Thousand ", " Million ", " Billion ",
+                            "Trillion"};
   const char* pData = szData.unterminated_c_str();
   int32_t iLength = szData.GetLength();
   int32_t iComm = 0;
@@ -4529,16 +4518,15 @@
     }
     iIndex += 3;
   }
-  return CFX_ByteString(strBuf);
+  return ByteString(strBuf);
 }
 
 // static
-CFX_ByteString CXFA_FM2JSContext::WordUS(const CFX_ByteString& szData,
-                                         int32_t iStyle) {
+ByteString CXFA_FM2JSContext::WordUS(const ByteString& szData, int32_t iStyle) {
   const char* pData = szData.c_str();
   int32_t iLength = szData.GetLength();
   if (iStyle < 0 || iStyle > 2) {
-    return CFX_ByteString();
+    return ByteString();
   }
 
   std::ostringstream strBuf;
@@ -4556,7 +4544,7 @@
     if (!iCount && iInteger - iIndex > 0)
       iCount = 12;
 
-    strBuf << TrillionUS(CFX_ByteStringC(pData + iIndex, iCount));
+    strBuf << TrillionUS(ByteStringView(pData + iIndex, iCount));
     iIndex += iCount;
     if (iIndex < iInteger)
       strBuf << " Trillion ";
@@ -4573,19 +4561,19 @@
       if (!iCount && iLength - iIndex > 0)
         iCount = 12;
 
-      strBuf << TrillionUS(CFX_ByteStringC(pData + iIndex, iCount));
+      strBuf << TrillionUS(ByteStringView(pData + iIndex, iCount));
       iIndex += iCount;
       if (iIndex < iLength)
         strBuf << " Trillion ";
     }
     strBuf << " Cents";
   }
-  return CFX_ByteString(strBuf);
+  return ByteString(strBuf);
 }
 
 // static
 void CXFA_FM2JSContext::Get(CFXJSE_Value* pThis,
-                            const CFX_ByteStringC& szFuncName,
+                            const ByteStringView& szFuncName,
                             CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   if (args.GetLength() != 1) {
@@ -4602,21 +4590,21 @@
     return;
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0);
-  CFX_ByteString urlString = ValueToUTF8String(argOne.get());
-  CFX_RetainPtr<IFX_SeekableReadStream> pFile = pAppProvider->DownloadURL(
-      CFX_WideString::FromUTF8(urlString.AsStringC()));
+  ByteString urlString = ValueToUTF8String(argOne.get());
+  CFX_RetainPtr<IFX_SeekableReadStream> pFile =
+      pAppProvider->DownloadURL(WideString::FromUTF8(urlString.AsStringView()));
   if (!pFile)
     return;
 
   int32_t size = pFile->GetSize();
   std::vector<uint8_t> dataBuf(size);
   pFile->ReadBlock(dataBuf.data(), size);
-  args.GetReturnValue()->SetString(CFX_ByteStringC(dataBuf));
+  args.GetReturnValue()->SetString(ByteStringView(dataBuf));
 }
 
 // static
 void CXFA_FM2JSContext::Post(CFXJSE_Value* pThis,
-                             const CFX_ByteStringC& szFuncName,
+                             const ByteStringView& szFuncName,
                              CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   int32_t argc = args.GetLength();
@@ -4634,45 +4622,45 @@
     return;
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0);
-  CFX_ByteString bsURL = ValueToUTF8String(argOne.get());
+  ByteString bsURL = ValueToUTF8String(argOne.get());
 
   std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1);
-  CFX_ByteString bsData = ValueToUTF8String(argTwo.get());
+  ByteString bsData = ValueToUTF8String(argTwo.get());
 
-  CFX_ByteString bsContentType;
+  ByteString bsContentType;
   if (argc > 2) {
     std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, args, 2);
     bsContentType = ValueToUTF8String(argThree.get());
   }
 
-  CFX_ByteString bsEncode;
+  ByteString bsEncode;
   if (argc > 3) {
     std::unique_ptr<CFXJSE_Value> argFour = GetSimpleValue(pThis, args, 3);
     bsEncode = ValueToUTF8String(argFour.get());
   }
 
-  CFX_ByteString bsHeader;
+  ByteString bsHeader;
   if (argc > 4) {
     std::unique_ptr<CFXJSE_Value> argFive = GetSimpleValue(pThis, args, 4);
     bsHeader = ValueToUTF8String(argFive.get());
   }
 
-  CFX_WideString decodedResponse;
+  WideString decodedResponse;
   if (!pAppProvider->PostRequestURL(
-          CFX_WideString::FromUTF8(bsURL.AsStringC()),
-          CFX_WideString::FromUTF8(bsData.AsStringC()),
-          CFX_WideString::FromUTF8(bsContentType.AsStringC()),
-          CFX_WideString::FromUTF8(bsEncode.AsStringC()),
-          CFX_WideString::FromUTF8(bsHeader.AsStringC()), decodedResponse)) {
+          WideString::FromUTF8(bsURL.AsStringView()),
+          WideString::FromUTF8(bsData.AsStringView()),
+          WideString::FromUTF8(bsContentType.AsStringView()),
+          WideString::FromUTF8(bsEncode.AsStringView()),
+          WideString::FromUTF8(bsHeader.AsStringView()), decodedResponse)) {
     pContext->ThrowServerDeniedException();
     return;
   }
-  args.GetReturnValue()->SetString(decodedResponse.UTF8Encode().AsStringC());
+  args.GetReturnValue()->SetString(decodedResponse.UTF8Encode().AsStringView());
 }
 
 // static
 void CXFA_FM2JSContext::Put(CFXJSE_Value* pThis,
-                            const CFX_ByteStringC& szFuncName,
+                            const ByteStringView& szFuncName,
                             CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   int32_t argc = args.GetLength();
@@ -4690,21 +4678,21 @@
     return;
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0);
-  CFX_ByteString bsURL = ValueToUTF8String(argOne.get());
+  ByteString bsURL = ValueToUTF8String(argOne.get());
 
   std::unique_ptr<CFXJSE_Value> argTwo = GetSimpleValue(pThis, args, 1);
-  CFX_ByteString bsData = ValueToUTF8String(argTwo.get());
+  ByteString bsData = ValueToUTF8String(argTwo.get());
 
-  CFX_ByteString bsEncode;
+  ByteString bsEncode;
   if (argc > 2) {
     std::unique_ptr<CFXJSE_Value> argThree = GetSimpleValue(pThis, args, 2);
     bsEncode = ValueToUTF8String(argThree.get());
   }
 
   if (!pAppProvider->PutRequestURL(
-          CFX_WideString::FromUTF8(bsURL.AsStringC()),
-          CFX_WideString::FromUTF8(bsData.AsStringC()),
-          CFX_WideString::FromUTF8(bsEncode.AsStringC()))) {
+          WideString::FromUTF8(bsURL.AsStringView()),
+          WideString::FromUTF8(bsData.AsStringView()),
+          WideString::FromUTF8(bsEncode.AsStringView()))) {
     pContext->ThrowServerDeniedException();
     return;
   }
@@ -4714,7 +4702,7 @@
 
 // static
 void CXFA_FM2JSContext::assign_value_operator(CFXJSE_Value* pThis,
-                                              const CFX_ByteStringC& szFuncName,
+                                              const ByteStringView& szFuncName,
                                               CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   if (args.GetLength() != 2) {
@@ -4743,8 +4731,8 @@
     } else {
       for (int32_t i = 2; i < iLeftLength; i++) {
         lValue->GetObjectPropertyByIdx(i, jsObjectValue.get());
-        jsObjectValue->SetObjectProperty(propertyValue->ToString().AsStringC(),
-                                         rValue.get());
+        jsObjectValue->SetObjectProperty(
+            propertyValue->ToString().AsStringView(), rValue.get());
       }
     }
   } else if (lValue->IsObject()) {
@@ -4758,7 +4746,7 @@
 
 // static
 void CXFA_FM2JSContext::logical_or_operator(CFXJSE_Value* pThis,
-                                            const CFX_ByteStringC& szFuncName,
+                                            const ByteStringView& szFuncName,
                                             CFXJSE_Arguments& args) {
   if (args.GetLength() != 2) {
     ToJSContext(pThis, nullptr)->ThrowCompilerErrorException();
@@ -4779,7 +4767,7 @@
 
 // static
 void CXFA_FM2JSContext::logical_and_operator(CFXJSE_Value* pThis,
-                                             const CFX_ByteStringC& szFuncName,
+                                             const ByteStringView& szFuncName,
                                              CFXJSE_Arguments& args) {
   if (args.GetLength() != 2) {
     ToJSContext(pThis, nullptr)->ThrowCompilerErrorException();
@@ -4800,7 +4788,7 @@
 
 // static
 void CXFA_FM2JSContext::equality_operator(CFXJSE_Value* pThis,
-                                          const CFX_ByteStringC& szFuncName,
+                                          const ByteStringView& szFuncName,
                                           CFXJSE_Arguments& args) {
   if (args.GetLength() != 2) {
     ToJSContext(pThis, nullptr)->ThrowCompilerErrorException();
@@ -4833,7 +4821,7 @@
 
 // static
 void CXFA_FM2JSContext::notequality_operator(CFXJSE_Value* pThis,
-                                             const CFX_ByteStringC& szFuncName,
+                                             const ByteStringView& szFuncName,
                                              CFXJSE_Arguments& args) {
   if (args.GetLength() != 2) {
     ToJSContext(pThis, nullptr)->ThrowCompilerErrorException();
@@ -4893,7 +4881,7 @@
 
 // static
 void CXFA_FM2JSContext::less_operator(CFXJSE_Value* pThis,
-                                      const CFX_ByteStringC& szFuncName,
+                                      const ByteStringView& szFuncName,
                                       CFXJSE_Arguments& args) {
   if (args.GetLength() != 2) {
     ToJSContext(pThis, nullptr)->ThrowCompilerErrorException();
@@ -4909,7 +4897,8 @@
 
   if (argFirst->IsString() && argSecond->IsString()) {
     args.GetReturnValue()->SetInteger(
-        argFirst->ToString().Compare(argSecond->ToString().AsStringC()) == -1);
+        argFirst->ToString().Compare(argSecond->ToString().AsStringView()) ==
+        -1);
     return;
   }
 
@@ -4920,7 +4909,7 @@
 
 // static
 void CXFA_FM2JSContext::lessequal_operator(CFXJSE_Value* pThis,
-                                           const CFX_ByteStringC& szFuncName,
+                                           const ByteStringView& szFuncName,
                                            CFXJSE_Arguments& args) {
   if (args.GetLength() != 2) {
     ToJSContext(pThis, nullptr)->ThrowCompilerErrorException();
@@ -4937,7 +4926,8 @@
 
   if (argFirst->IsString() && argSecond->IsString()) {
     args.GetReturnValue()->SetInteger(
-        argFirst->ToString().Compare(argSecond->ToString().AsStringC()) != 1);
+        argFirst->ToString().Compare(argSecond->ToString().AsStringView()) !=
+        1);
     return;
   }
 
@@ -4948,7 +4938,7 @@
 
 // static
 void CXFA_FM2JSContext::greater_operator(CFXJSE_Value* pThis,
-                                         const CFX_ByteStringC& szFuncName,
+                                         const ByteStringView& szFuncName,
                                          CFXJSE_Arguments& args) {
   if (args.GetLength() != 2) {
     ToJSContext(pThis, nullptr)->ThrowCompilerErrorException();
@@ -4964,7 +4954,8 @@
 
   if (argFirst->IsString() && argSecond->IsString()) {
     args.GetReturnValue()->SetInteger(
-        argFirst->ToString().Compare(argSecond->ToString().AsStringC()) == 1);
+        argFirst->ToString().Compare(argSecond->ToString().AsStringView()) ==
+        1);
     return;
   }
 
@@ -4975,7 +4966,7 @@
 
 // static
 void CXFA_FM2JSContext::greaterequal_operator(CFXJSE_Value* pThis,
-                                              const CFX_ByteStringC& szFuncName,
+                                              const ByteStringView& szFuncName,
                                               CFXJSE_Arguments& args) {
   if (args.GetLength() != 2) {
     ToJSContext(pThis, nullptr)->ThrowCompilerErrorException();
@@ -4992,7 +4983,8 @@
 
   if (argFirst->IsString() && argSecond->IsString()) {
     args.GetReturnValue()->SetInteger(
-        argFirst->ToString().Compare(argSecond->ToString().AsStringC()) != -1);
+        argFirst->ToString().Compare(argSecond->ToString().AsStringView()) !=
+        -1);
     return;
   }
 
@@ -5003,7 +4995,7 @@
 
 // static
 void CXFA_FM2JSContext::plus_operator(CFXJSE_Value* pThis,
-                                      const CFX_ByteStringC& szFuncName,
+                                      const ByteStringView& szFuncName,
                                       CFXJSE_Arguments& args) {
   if (args.GetLength() != 2) {
     ToJSContext(pThis, nullptr)->ThrowCompilerErrorException();
@@ -5025,7 +5017,7 @@
 
 // static
 void CXFA_FM2JSContext::minus_operator(CFXJSE_Value* pThis,
-                                       const CFX_ByteStringC& szFuncName,
+                                       const ByteStringView& szFuncName,
                                        CFXJSE_Arguments& args) {
   if (args.GetLength() != 2) {
     ToJSContext(pThis, nullptr)->ThrowCompilerErrorException();
@@ -5046,7 +5038,7 @@
 
 // static
 void CXFA_FM2JSContext::multiple_operator(CFXJSE_Value* pThis,
-                                          const CFX_ByteStringC& szFuncName,
+                                          const ByteStringView& szFuncName,
                                           CFXJSE_Arguments& args) {
   if (args.GetLength() != 2) {
     ToJSContext(pThis, nullptr)->ThrowCompilerErrorException();
@@ -5067,7 +5059,7 @@
 
 // static
 void CXFA_FM2JSContext::divide_operator(CFXJSE_Value* pThis,
-                                        const CFX_ByteStringC& szFuncName,
+                                        const ByteStringView& szFuncName,
                                         CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   if (args.GetLength() != 2) {
@@ -5094,7 +5086,7 @@
 
 // static
 void CXFA_FM2JSContext::positive_operator(CFXJSE_Value* pThis,
-                                          const CFX_ByteStringC& szFuncName,
+                                          const ByteStringView& szFuncName,
                                           CFXJSE_Arguments& args) {
   if (args.GetLength() != 1) {
     ToJSContext(pThis, nullptr)->ThrowCompilerErrorException();
@@ -5111,7 +5103,7 @@
 
 // static
 void CXFA_FM2JSContext::negative_operator(CFXJSE_Value* pThis,
-                                          const CFX_ByteStringC& szFuncName,
+                                          const ByteStringView& szFuncName,
                                           CFXJSE_Arguments& args) {
   if (args.GetLength() != 1) {
     ToJSContext(pThis, nullptr)->ThrowCompilerErrorException();
@@ -5128,7 +5120,7 @@
 
 // static
 void CXFA_FM2JSContext::logical_not_operator(CFXJSE_Value* pThis,
-                                             const CFX_ByteStringC& szFuncName,
+                                             const ByteStringView& szFuncName,
                                              CFXJSE_Arguments& args) {
   if (args.GetLength() != 1) {
     ToJSContext(pThis, nullptr)->ThrowCompilerErrorException();
@@ -5147,7 +5139,7 @@
 
 // static
 void CXFA_FM2JSContext::dot_accessor(CFXJSE_Value* pThis,
-                                     const CFX_ByteStringC& szFuncName,
+                                     const ByteStringView& szFuncName,
                                      CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   v8::Isolate* pIsolate = pContext->GetScriptRuntime();
@@ -5164,9 +5156,9 @@
     iIndexValue = ValueToInteger(pThis, args.GetValue(4).get());
   }
 
-  CFX_ByteString szName = args.GetUTF8String(2);
-  CFX_ByteString szSomExp = GenerateSomExpression(
-      szName.AsStringC(), args.GetInt32(3), iIndexValue, bIsStar);
+  ByteString szName = args.GetUTF8String(2);
+  ByteString szSomExp = GenerateSomExpression(
+      szName.AsStringView(), args.GetInt32(3), iIndexValue, bIsStar);
 
   std::unique_ptr<CFXJSE_Value> argAccessor = args.GetValue(0);
   if (argAccessor->IsArray()) {
@@ -5187,7 +5179,7 @@
       argAccessor->GetObjectPropertyByIdx(i, hJSObjValue.get());
 
       XFA_RESOLVENODE_RS resoveNodeRS;
-      if (ResolveObjects(pThis, hJSObjValue.get(), szSomExp.AsStringC(),
+      if (ResolveObjects(pThis, hJSObjValue.get(), szSomExp.AsStringView(),
                          resoveNodeRS, true, szName.IsEmpty()) > 0) {
         ParseResolveResult(pThis, resoveNodeRS, hJSObjValue.get(),
                            &resolveValues[i - 2], &bAttribute);
@@ -5196,8 +5188,8 @@
     }
     if (iCounter < 1) {
       pContext->ThrowPropertyNotInObjectException(
-          CFX_WideString::FromUTF8(szName.AsStringC()),
-          CFX_WideString::FromUTF8(szSomExp.AsStringC()));
+          WideString::FromUTF8(szName.AsStringView()),
+          WideString::FromUTF8(szSomExp.AsStringView()));
       return;
     }
 
@@ -5207,7 +5199,7 @@
 
     values[0]->SetInteger(1);
     if (bAttribute)
-      values[1]->SetString(szName.AsStringC());
+      values[1]->SetString(szName.AsStringView());
     else
       values[1]->SetNull();
 
@@ -5224,21 +5216,21 @@
 
   XFA_RESOLVENODE_RS resoveNodeRS;
   int32_t iRet = 0;
-  CFX_ByteString bsAccessorName = args.GetUTF8String(1);
+  ByteString bsAccessorName = args.GetUTF8String(1);
   if (argAccessor->IsObject() ||
       (argAccessor->IsNull() && bsAccessorName.IsEmpty())) {
-    iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringC(),
+    iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringView(),
                           resoveNodeRS, true, szName.IsEmpty());
   } else if (!argAccessor->IsObject() && !bsAccessorName.IsEmpty() &&
              GetObjectForName(pThis, argAccessor.get(),
-                              bsAccessorName.AsStringC())) {
-    iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringC(),
+                              bsAccessorName.AsStringView())) {
+    iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringView(),
                           resoveNodeRS, true, szName.IsEmpty());
   }
   if (iRet < 1) {
     pContext->ThrowPropertyNotInObjectException(
-        CFX_WideString::FromUTF8(szName.AsStringC()),
-        CFX_WideString::FromUTF8(szSomExp.AsStringC()));
+        WideString::FromUTF8(szName.AsStringView()),
+        WideString::FromUTF8(szSomExp.AsStringView()));
     return;
   }
 
@@ -5253,7 +5245,7 @@
 
   values[0]->SetInteger(1);
   if (bAttribute)
-    values[1]->SetString(szName.AsStringC());
+    values[1]->SetString(szName.AsStringView());
   else
     values[1]->SetNull();
 
@@ -5265,7 +5257,7 @@
 
 // static
 void CXFA_FM2JSContext::dotdot_accessor(CFXJSE_Value* pThis,
-                                        const CFX_ByteStringC& szFuncName,
+                                        const ByteStringView& szFuncName,
                                         CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   v8::Isolate* pIsolate = pContext->GetScriptRuntime();
@@ -5282,9 +5274,9 @@
     iIndexValue = ValueToInteger(pThis, args.GetValue(4).get());
   }
 
-  CFX_ByteString szName = args.GetUTF8String(2);
-  CFX_ByteString szSomExp = GenerateSomExpression(
-      szName.AsStringC(), args.GetInt32(3), iIndexValue, bIsStar);
+  ByteString szName = args.GetUTF8String(2);
+  ByteString szSomExp = GenerateSomExpression(
+      szName.AsStringView(), args.GetInt32(3), iIndexValue, bIsStar);
 
   std::unique_ptr<CFXJSE_Value> argAccessor = args.GetValue(0);
   if (argAccessor->IsArray()) {
@@ -5305,7 +5297,7 @@
     for (int32_t i = 2; i < iLength; i++) {
       argAccessor->GetObjectPropertyByIdx(i, hJSObjValue.get());
       XFA_RESOLVENODE_RS resoveNodeRS;
-      if (ResolveObjects(pThis, hJSObjValue.get(), szSomExp.AsStringC(),
+      if (ResolveObjects(pThis, hJSObjValue.get(), szSomExp.AsStringView(),
                          resoveNodeRS, false) > 0) {
         ParseResolveResult(pThis, resoveNodeRS, hJSObjValue.get(),
                            &resolveValues[i - 2], &bAttribute);
@@ -5314,8 +5306,8 @@
     }
     if (iCounter < 1) {
       pContext->ThrowPropertyNotInObjectException(
-          CFX_WideString::FromUTF8(szName.AsStringC()),
-          CFX_WideString::FromUTF8(szSomExp.AsStringC()));
+          WideString::FromUTF8(szName.AsStringView()),
+          WideString::FromUTF8(szSomExp.AsStringView()));
       return;
     }
 
@@ -5325,7 +5317,7 @@
 
     values[0]->SetInteger(1);
     if (bAttribute)
-      values[1]->SetString(szName.AsStringC());
+      values[1]->SetString(szName.AsStringView());
     else
       values[1]->SetNull();
 
@@ -5342,21 +5334,21 @@
 
   XFA_RESOLVENODE_RS resoveNodeRS;
   int32_t iRet = 0;
-  CFX_ByteString bsAccessorName = args.GetUTF8String(1);
+  ByteString bsAccessorName = args.GetUTF8String(1);
   if (argAccessor->IsObject() ||
       (argAccessor->IsNull() && bsAccessorName.IsEmpty())) {
-    iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringC(),
+    iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringView(),
                           resoveNodeRS, false);
   } else if (!argAccessor->IsObject() && !bsAccessorName.IsEmpty() &&
              GetObjectForName(pThis, argAccessor.get(),
-                              bsAccessorName.AsStringC())) {
-    iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringC(),
+                              bsAccessorName.AsStringView())) {
+    iRet = ResolveObjects(pThis, argAccessor.get(), szSomExp.AsStringView(),
                           resoveNodeRS, false);
   }
   if (iRet < 1) {
     pContext->ThrowPropertyNotInObjectException(
-        CFX_WideString::FromUTF8(szName.AsStringC()),
-        CFX_WideString::FromUTF8(szSomExp.AsStringC()));
+        WideString::FromUTF8(szName.AsStringView()),
+        WideString::FromUTF8(szSomExp.AsStringView()));
     return;
   }
 
@@ -5371,7 +5363,7 @@
 
   values[0]->SetInteger(1);
   if (bAttribute)
-    values[1]->SetString(szName.AsStringC());
+    values[1]->SetString(szName.AsStringView());
   else
     values[1]->SetNull();
 
@@ -5383,7 +5375,7 @@
 
 // static
 void CXFA_FM2JSContext::eval_translation(CFXJSE_Value* pThis,
-                                         const CFX_ByteStringC& szFuncName,
+                                         const ByteStringView& szFuncName,
                                          CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   if (args.GetLength() != 1) {
@@ -5392,27 +5384,27 @@
   }
 
   std::unique_ptr<CFXJSE_Value> argOne = GetSimpleValue(pThis, args, 0);
-  CFX_ByteString argString = ValueToUTF8String(argOne.get());
+  ByteString argString = ValueToUTF8String(argOne.get());
   if (argString.IsEmpty()) {
     pContext->ThrowArgumentMismatchException();
     return;
   }
 
-  CFX_WideString scriptString = CFX_WideString::FromUTF8(argString.AsStringC());
+  WideString scriptString = WideString::FromUTF8(argString.AsStringView());
   CFX_WideTextBuf wsJavaScriptBuf;
-  if (!CXFA_FM2JSContext::Translate(scriptString.AsStringC(),
+  if (!CXFA_FM2JSContext::Translate(scriptString.AsStringView(),
                                     &wsJavaScriptBuf)) {
     pContext->ThrowCompilerErrorException();
     return;
   }
 
   args.GetReturnValue()->SetString(
-      FX_UTF8Encode(wsJavaScriptBuf.AsStringC()).AsStringC());
+      FX_UTF8Encode(wsJavaScriptBuf.AsStringView()).AsStringView());
 }
 
 // static
 void CXFA_FM2JSContext::is_fm_object(CFXJSE_Value* pThis,
-                                     const CFX_ByteStringC& szFuncName,
+                                     const ByteStringView& szFuncName,
                                      CFXJSE_Arguments& args) {
   if (args.GetLength() != 1) {
     args.GetReturnValue()->SetBoolean(false);
@@ -5425,7 +5417,7 @@
 
 // static
 void CXFA_FM2JSContext::is_fm_array(CFXJSE_Value* pThis,
-                                    const CFX_ByteStringC& szFuncName,
+                                    const ByteStringView& szFuncName,
                                     CFXJSE_Arguments& args) {
   if (args.GetLength() != 1) {
     args.GetReturnValue()->SetBoolean(false);
@@ -5438,7 +5430,7 @@
 
 // static
 void CXFA_FM2JSContext::get_fm_value(CFXJSE_Value* pThis,
-                                     const CFX_ByteStringC& szFuncName,
+                                     const ByteStringView& szFuncName,
                                      CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   if (args.GetLength() != 1) {
@@ -5458,7 +5450,7 @@
       return;
     }
 
-    jsObjectValue->GetObjectProperty(propertyValue->ToString().AsStringC(),
+    jsObjectValue->GetObjectProperty(propertyValue->ToString().AsStringView(),
                                      args.GetReturnValue());
     return;
   }
@@ -5473,7 +5465,7 @@
 
 // static
 void CXFA_FM2JSContext::get_fm_jsobj(CFXJSE_Value* pThis,
-                                     const CFX_ByteStringC& szFuncName,
+                                     const ByteStringView& szFuncName,
                                      CFXJSE_Arguments& args) {
   if (args.GetLength() != 1) {
     ToJSContext(pThis, nullptr)->ThrowCompilerErrorException();
@@ -5499,7 +5491,7 @@
 
 // static
 void CXFA_FM2JSContext::fm_var_filter(CFXJSE_Value* pThis,
-                                      const CFX_ByteStringC& szFuncName,
+                                      const ByteStringView& szFuncName,
                                       CFXJSE_Arguments& args) {
   CXFA_FM2JSContext* pContext = ToJSContext(pThis, nullptr);
   if (args.GetLength() != 1) {
@@ -5553,7 +5545,7 @@
 
 // static
 void CXFA_FM2JSContext::concat_fm_object(CFXJSE_Value* pThis,
-                                         const CFX_ByteStringC& szFuncName,
+                                         const ByteStringView& szFuncName,
                                          CFXJSE_Arguments& args) {
   v8::Isolate* pIsolate = ToJSContext(pThis, nullptr)->GetScriptRuntime();
   uint32_t iLength = 0;
@@ -5623,7 +5615,7 @@
       return simpleValue;
     }
 
-    jsObjectValue->GetObjectProperty(propertyValue->ToString().AsStringC(),
+    jsObjectValue->GetObjectProperty(propertyValue->ToString().AsStringView(),
                                      simpleValue.get());
     return simpleValue;
   }
@@ -5658,7 +5650,7 @@
     }
 
     auto newPropertyValue = pdfium::MakeUnique<CFXJSE_Value>(pIsolate);
-    jsObjectValue->GetObjectProperty(propertyValue->ToString().AsStringC(),
+    jsObjectValue->GetObjectProperty(propertyValue->ToString().AsStringView(),
                                      newPropertyValue.get());
     return newPropertyValue->IsNull();
   }
@@ -5688,8 +5680,8 @@
     return false;
 
   if (firstValue->IsString()) {
-    CFX_ByteString firstString = ValueToUTF8String(firstValue);
-    CFX_ByteString secondString = ValueToUTF8String(secondValue);
+    ByteString firstString = ValueToUTF8String(firstValue);
+    ByteString secondString = ValueToUTF8String(secondValue);
     return firstString == secondString;
   }
   if (firstValue->IsNumber()) {
@@ -5753,7 +5745,7 @@
         for (int32_t j = 2; j < iLength; j++) {
           argsValue[i]->GetObjectPropertyByIdx(j, jsObjectValue.get());
           jsObjectValue->GetObjectProperty(
-              propertyValue->ToString().AsStringC(),
+              propertyValue->ToString().AsStringView(),
               (*resultValues)[index].get());
           index++;
         }
@@ -5791,41 +5783,40 @@
 }
 
 // static
-CFX_ByteString CXFA_FM2JSContext::GenerateSomExpression(
-    const CFX_ByteStringC& szName,
+ByteString CXFA_FM2JSContext::GenerateSomExpression(
+    const ByteStringView& szName,
     int32_t iIndexFlags,
     int32_t iIndexValue,
     bool bIsStar) {
   if (bIsStar)
-    return CFX_ByteString(szName, "[*]");
+    return ByteString(szName, "[*]");
 
   if (iIndexFlags == 0)
-    return CFX_ByteString(szName);
+    return ByteString(szName);
 
   if (iIndexFlags == 1 || iIndexValue == 0) {
-    return CFX_ByteString(szName, "[") +
-           CFX_ByteString::FormatInteger(iIndexValue) + "]";
+    return ByteString(szName, "[") + ByteString::FormatInteger(iIndexValue) +
+           "]";
   }
-  CFX_ByteString szSomExp;
+  ByteString szSomExp;
   if (iIndexFlags == 2) {
     szSomExp = (iIndexValue < 0) ? (szName + "[-") : (szName + "[+");
     iIndexValue = (iIndexValue < 0) ? (0 - iIndexValue) : iIndexValue;
-    szSomExp += CFX_ByteString::FormatInteger(iIndexValue);
+    szSomExp += ByteString::FormatInteger(iIndexValue);
     szSomExp += "]";
   } else {
     szSomExp = (iIndexValue < 0) ? (szName + "[") : (szName + "[-");
     iIndexValue = (iIndexValue < 0) ? (0 - iIndexValue) : iIndexValue;
-    szSomExp += CFX_ByteString::FormatInteger(iIndexValue);
+    szSomExp += ByteString::FormatInteger(iIndexValue);
     szSomExp += "]";
   }
   return szSomExp;
 }
 
 // static
-bool CXFA_FM2JSContext::GetObjectForName(
-    CFXJSE_Value* pThis,
-    CFXJSE_Value* accessorValue,
-    const CFX_ByteStringC& szAccessorName) {
+bool CXFA_FM2JSContext::GetObjectForName(CFXJSE_Value* pThis,
+                                         CFXJSE_Value* accessorValue,
+                                         const ByteStringView& szAccessorName) {
   CXFA_Document* pDoc = ToJSContext(pThis, nullptr)->GetDocument();
   if (!pDoc)
     return false;
@@ -5836,7 +5827,7 @@
                      XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_Parent;
   int32_t iRet = pScriptContext->ResolveObjects(
       pScriptContext->GetThisObject(),
-      CFX_WideString::FromUTF8(szAccessorName).AsStringC(), resoveNodeRS,
+      WideString::FromUTF8(szAccessorName).AsStringView(), resoveNodeRS,
       dwFlags);
   if (iRet >= 1 && resoveNodeRS.dwFlags == XFA_RESOVENODE_RSTYPE_Nodes) {
     accessorValue->Assign(
@@ -5849,7 +5840,7 @@
 // static
 int32_t CXFA_FM2JSContext::ResolveObjects(CFXJSE_Value* pThis,
                                           CFXJSE_Value* pRefValue,
-                                          const CFX_ByteStringC& bsSomExp,
+                                          const ByteStringView& bsSomExp,
                                           XFA_RESOLVENODE_RS& resoveNodeRS,
                                           bool bdotAccessor,
                                           bool bHasNoResolveName) {
@@ -5857,7 +5848,7 @@
   if (!pDoc)
     return -1;
 
-  CFX_WideString wsSomExpression = CFX_WideString::FromUTF8(bsSomExp);
+  WideString wsSomExpression = WideString::FromUTF8(bsSomExp);
   CXFA_ScriptContext* pScriptContext = pDoc->GetScriptContext();
   CXFA_Object* pNode = nullptr;
   uint32_t dFlags = 0UL;
@@ -5869,7 +5860,7 @@
       pNode = CXFA_ScriptContext::ToObject(pRefValue, nullptr);
       ASSERT(pNode);
       if (bHasNoResolveName) {
-        CFX_WideString wsName;
+        WideString wsName;
         if (CXFA_Node* pXFANode = pNode->AsNode())
           pXFANode->GetAttribute(XFA_ATTRIBUTE_Name, wsName, false);
         if (wsName.IsEmpty())
@@ -5888,7 +5879,7 @@
     pNode = CXFA_ScriptContext::ToObject(pRefValue, nullptr);
     dFlags = XFA_RESOLVENODE_AnyChild;
   }
-  return pScriptContext->ResolveObjects(pNode, wsSomExpression.AsStringC(),
+  return pScriptContext->ResolveObjects(pNode, wsSomExpression.AsStringView(),
                                         resoveNodeRS, dFlags);
 }
 
@@ -5954,7 +5945,7 @@
       return ValueToInteger(pThis, newPropertyValue.get());
     }
 
-    jsObjectValue->GetObjectProperty(propertyValue->ToString().AsStringC(),
+    jsObjectValue->GetObjectProperty(propertyValue->ToString().AsStringView(),
                                      newPropertyValue.get());
     return ValueToInteger(pThis, newPropertyValue.get());
   }
@@ -5984,7 +5975,7 @@
       GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get());
       return ValueToFloat(pThis, newPropertyValue.get());
     }
-    jsObjectValue->GetObjectProperty(propertyValue->ToString().AsStringC(),
+    jsObjectValue->GetObjectProperty(propertyValue->ToString().AsStringView(),
                                      newPropertyValue.get());
     return ValueToFloat(pThis, newPropertyValue.get());
   }
@@ -5994,7 +5985,7 @@
     return ValueToFloat(pThis, newPropertyValue.get());
   }
   if (arg->IsString())
-    return (float)XFA_ByteStringToDouble(arg->ToString().AsStringC());
+    return (float)XFA_ByteStringToDouble(arg->ToString().AsStringView());
   if (arg->IsUndefined())
     return 0;
 
@@ -6018,7 +6009,7 @@
       GetObjectDefaultValue(jsObjectValue.get(), newPropertyValue.get());
       return ValueToDouble(pThis, newPropertyValue.get());
     }
-    jsObjectValue->GetObjectProperty(propertyValue->ToString().AsStringC(),
+    jsObjectValue->GetObjectProperty(propertyValue->ToString().AsStringView(),
                                      newPropertyValue.get());
     return ValueToDouble(pThis, newPropertyValue.get());
   }
@@ -6028,7 +6019,7 @@
     return ValueToDouble(pThis, newPropertyValue.get());
   }
   if (arg->IsString())
-    return XFA_ByteStringToDouble(arg->ToString().AsStringC());
+    return XFA_ByteStringToDouble(arg->ToString().AsStringView());
   if (arg->IsUndefined())
     return 0;
   return arg->ToDouble();
@@ -6064,22 +6055,22 @@
     return ValueToDouble(pThis, jsObjectValue.get());
 
   auto newPropertyValue = pdfium::MakeUnique<CFXJSE_Value>(pIsolate);
-  jsObjectValue->GetObjectProperty(propertyValue->ToString().AsStringC(),
+  jsObjectValue->GetObjectProperty(propertyValue->ToString().AsStringView(),
                                    newPropertyValue.get());
   return ValueToDouble(pThis, newPropertyValue.get());
 }
 
 // static
-CFX_ByteString CXFA_FM2JSContext::ValueToUTF8String(CFXJSE_Value* arg) {
+ByteString CXFA_FM2JSContext::ValueToUTF8String(CFXJSE_Value* arg) {
   if (!arg || arg->IsNull() || arg->IsUndefined())
-    return CFX_ByteString();
+    return ByteString();
   if (arg->IsBoolean())
     return arg->ToBoolean() ? "1" : "0";
   return arg->ToString();
 }
 
 // static.
-bool CXFA_FM2JSContext::Translate(const CFX_WideStringC& wsFormcalc,
+bool CXFA_FM2JSContext::Translate(const WideStringView& wsFormcalc,
                                   CFX_WideTextBuf* wsJavascript) {
   if (wsFormcalc.IsEmpty()) {
     wsJavascript->Clear();
@@ -6118,7 +6109,7 @@
 }
 
 void CXFA_FM2JSContext::ThrowNoDefaultPropertyException(
-    const CFX_ByteStringC& name) const {
+    const ByteStringView& name) const {
   // TODO(tsepez): check usage of c_str() below.
   ThrowException(L"%.16S doesn't have a default property.",
                  name.unterminated_c_str());
@@ -6137,8 +6128,8 @@
 }
 
 void CXFA_FM2JSContext::ThrowPropertyNotInObjectException(
-    const CFX_WideString& name,
-    const CFX_WideString& exp) const {
+    const WideString& name,
+    const WideString& exp) const {
   ThrowException(
       L"An attempt was made to reference property '%.16s' of a non-object "
       L"in SOM expression %.16s.",
@@ -6146,7 +6137,7 @@
 }
 
 void CXFA_FM2JSContext::ThrowParamCountMismatchException(
-    const CFX_WideString& method) const {
+    const WideString& method) const {
   ThrowException(L"Incorrect number of parameters calling method '%.16s'.",
                  method.c_str());
 }
@@ -6156,11 +6147,11 @@
 }
 
 void CXFA_FM2JSContext::ThrowException(const wchar_t* str, ...) const {
-  CFX_WideString wsMessage;
+  WideString wsMessage;
   va_list arg_ptr;
   va_start(arg_ptr, str);
   wsMessage.FormatV(str, arg_ptr);
   va_end(arg_ptr);
   ASSERT(!wsMessage.IsEmpty());
-  FXJSE_ThrowMessage(wsMessage.UTF8Encode().AsStringC());
+  FXJSE_ThrowMessage(wsMessage.UTF8Encode().AsStringView());
 }
diff --git a/xfa/fxfa/fm2js/cxfa_fm2jscontext.h b/xfa/fxfa/fm2js/cxfa_fm2jscontext.h
index 37586d0..ca52ea8 100644
--- a/xfa/fxfa/fm2js/cxfa_fm2jscontext.h
+++ b/xfa/fxfa/fm2js/cxfa_fm2jscontext.h
@@ -25,73 +25,73 @@
   ~CXFA_FM2JSContext() override;
 
   static void Abs(CFXJSE_Value* pThis,
-                  const CFX_ByteStringC& szFuncName,
+                  const ByteStringView& szFuncName,
                   CFXJSE_Arguments& args);
   static void Avg(CFXJSE_Value* pThis,
-                  const CFX_ByteStringC& szFuncName,
+                  const ByteStringView& szFuncName,
                   CFXJSE_Arguments& args);
   static void Ceil(CFXJSE_Value* pThis,
-                   const CFX_ByteStringC& szFuncName,
+                   const ByteStringView& szFuncName,
                    CFXJSE_Arguments& args);
   static void Count(CFXJSE_Value* pThis,
-                    const CFX_ByteStringC& szFuncName,
+                    const ByteStringView& szFuncName,
                     CFXJSE_Arguments& args);
   static void Floor(CFXJSE_Value* pThis,
-                    const CFX_ByteStringC& szFuncName,
+                    const ByteStringView& szFuncName,
                     CFXJSE_Arguments& args);
   static void Max(CFXJSE_Value* pThis,
-                  const CFX_ByteStringC& szFuncName,
+                  const ByteStringView& szFuncName,
                   CFXJSE_Arguments& args);
   static void Min(CFXJSE_Value* pThis,
-                  const CFX_ByteStringC& szFuncName,
+                  const ByteStringView& szFuncName,
                   CFXJSE_Arguments& args);
   static void Mod(CFXJSE_Value* pThis,
-                  const CFX_ByteStringC& szFuncName,
+                  const ByteStringView& szFuncName,
                   CFXJSE_Arguments& args);
   static void Round(CFXJSE_Value* pThis,
-                    const CFX_ByteStringC& szFuncName,
+                    const ByteStringView& szFuncName,
                     CFXJSE_Arguments& args);
   static void Sum(CFXJSE_Value* pThis,
-                  const CFX_ByteStringC& szFuncName,
+                  const ByteStringView& szFuncName,
                   CFXJSE_Arguments& args);
   static void Date(CFXJSE_Value* pThis,
-                   const CFX_ByteStringC& szFuncName,
+                   const ByteStringView& szFuncName,
                    CFXJSE_Arguments& args);
   static void Date2Num(CFXJSE_Value* pThis,
-                       const CFX_ByteStringC& szFuncName,
+                       const ByteStringView& szFuncName,
                        CFXJSE_Arguments& args);
   static void DateFmt(CFXJSE_Value* pThis,
-                      const CFX_ByteStringC& szFuncName,
+                      const ByteStringView& szFuncName,
                       CFXJSE_Arguments& args);
   static void IsoDate2Num(CFXJSE_Value* pThis,
-                          const CFX_ByteStringC& szFuncName,
+                          const ByteStringView& szFuncName,
                           CFXJSE_Arguments& args);
   static void IsoTime2Num(CFXJSE_Value* pThis,
-                          const CFX_ByteStringC& szFuncName,
+                          const ByteStringView& szFuncName,
                           CFXJSE_Arguments& args);
   static void LocalDateFmt(CFXJSE_Value* pThis,
-                           const CFX_ByteStringC& szFuncName,
+                           const ByteStringView& szFuncName,
                            CFXJSE_Arguments& args);
   static void LocalTimeFmt(CFXJSE_Value* pThis,
-                           const CFX_ByteStringC& szFuncName,
+                           const ByteStringView& szFuncName,
                            CFXJSE_Arguments& args);
   static void Num2Date(CFXJSE_Value* pThis,
-                       const CFX_ByteStringC& szFuncName,
+                       const ByteStringView& szFuncName,
                        CFXJSE_Arguments& args);
   static void Num2GMTime(CFXJSE_Value* pThis,
-                         const CFX_ByteStringC& szFuncName,
+                         const ByteStringView& szFuncName,
                          CFXJSE_Arguments& args);
   static void Num2Time(CFXJSE_Value* pThis,
-                       const CFX_ByteStringC& szFuncName,
+                       const ByteStringView& szFuncName,
                        CFXJSE_Arguments& args);
   static void Time(CFXJSE_Value* pThis,
-                   const CFX_ByteStringC& szFuncName,
+                   const ByteStringView& szFuncName,
                    CFXJSE_Arguments& args);
   static void Time2Num(CFXJSE_Value* pThis,
-                       const CFX_ByteStringC& szFuncName,
+                       const ByteStringView& szFuncName,
                        CFXJSE_Arguments& args);
   static void TimeFmt(CFXJSE_Value* pThis,
-                      const CFX_ByteStringC& szFuncName,
+                      const ByteStringView& szFuncName,
                       CFXJSE_Arguments& args);
 
   static bool IsIsoDateFormat(const char* pData,
@@ -119,258 +119,256 @@
                                   int32_t& iMillionSecond,
                                   int32_t& iZoneHour,
                                   int32_t& iZoneMinute);
-  static CFX_ByteString Local2IsoDate(CFXJSE_Value* pThis,
-                                      const CFX_ByteStringC& szDate,
-                                      const CFX_ByteStringC& szFormat,
-                                      const CFX_ByteStringC& szLocale);
-  static CFX_ByteString IsoDate2Local(CFXJSE_Value* pThis,
-                                      const CFX_ByteStringC& szDate,
-                                      const CFX_ByteStringC& szFormat,
-                                      const CFX_ByteStringC& szLocale);
-  static CFX_ByteString IsoTime2Local(CFXJSE_Value* pThis,
-                                      const CFX_ByteStringC& szTime,
-                                      const CFX_ByteStringC& szFormat,
-                                      const CFX_ByteStringC& szLocale);
-  static int32_t DateString2Num(const CFX_ByteStringC& szDateString);
-  static CFX_ByteString GetLocalDateFormat(CFXJSE_Value* pThis,
-                                           int32_t iStyle,
-                                           const CFX_ByteStringC& szLocalStr,
-                                           bool bStandard);
-  static CFX_ByteString GetLocalTimeFormat(CFXJSE_Value* pThis,
-                                           int32_t iStyle,
-                                           const CFX_ByteStringC& szLocalStr,
-                                           bool bStandard);
-  static CFX_ByteString GetStandardDateFormat(
-      CFXJSE_Value* pThis,
-      int32_t iStyle,
-      const CFX_ByteStringC& szLocalStr);
-  static CFX_ByteString GetStandardTimeFormat(
-      CFXJSE_Value* pThis,
-      int32_t iStyle,
-      const CFX_ByteStringC& szLocalStr);
-  static CFX_ByteString Num2AllTime(CFXJSE_Value* pThis,
-                                    int32_t iTime,
-                                    const CFX_ByteStringC& szFormat,
-                                    const CFX_ByteStringC& szLocale,
-                                    bool bGM);
+  static ByteString Local2IsoDate(CFXJSE_Value* pThis,
+                                  const ByteStringView& szDate,
+                                  const ByteStringView& szFormat,
+                                  const ByteStringView& szLocale);
+  static ByteString IsoDate2Local(CFXJSE_Value* pThis,
+                                  const ByteStringView& szDate,
+                                  const ByteStringView& szFormat,
+                                  const ByteStringView& szLocale);
+  static ByteString IsoTime2Local(CFXJSE_Value* pThis,
+                                  const ByteStringView& szTime,
+                                  const ByteStringView& szFormat,
+                                  const ByteStringView& szLocale);
+  static int32_t DateString2Num(const ByteStringView& szDateString);
+  static ByteString GetLocalDateFormat(CFXJSE_Value* pThis,
+                                       int32_t iStyle,
+                                       const ByteStringView& szLocalStr,
+                                       bool bStandard);
+  static ByteString GetLocalTimeFormat(CFXJSE_Value* pThis,
+                                       int32_t iStyle,
+                                       const ByteStringView& szLocalStr,
+                                       bool bStandard);
+  static ByteString GetStandardDateFormat(CFXJSE_Value* pThis,
+                                          int32_t iStyle,
+                                          const ByteStringView& szLocalStr);
+  static ByteString GetStandardTimeFormat(CFXJSE_Value* pThis,
+                                          int32_t iStyle,
+                                          const ByteStringView& szLocalStr);
+  static ByteString Num2AllTime(CFXJSE_Value* pThis,
+                                int32_t iTime,
+                                const ByteStringView& szFormat,
+                                const ByteStringView& szLocale,
+                                bool bGM);
   static void GetLocalTimeZone(int32_t& iHour, int32_t& iMin, int32_t& iSec);
 
   static void Apr(CFXJSE_Value* pThis,
-                  const CFX_ByteStringC& szFuncName,
+                  const ByteStringView& szFuncName,
                   CFXJSE_Arguments& args);
   static void CTerm(CFXJSE_Value* pThis,
-                    const CFX_ByteStringC& szFuncName,
+                    const ByteStringView& szFuncName,
                     CFXJSE_Arguments& args);
   static void FV(CFXJSE_Value* pThis,
-                 const CFX_ByteStringC& szFuncName,
+                 const ByteStringView& szFuncName,
                  CFXJSE_Arguments& args);
   static void IPmt(CFXJSE_Value* pThis,
-                   const CFX_ByteStringC& szFuncName,
+                   const ByteStringView& szFuncName,
                    CFXJSE_Arguments& args);
   static void NPV(CFXJSE_Value* pThis,
-                  const CFX_ByteStringC& szFuncName,
+                  const ByteStringView& szFuncName,
                   CFXJSE_Arguments& args);
   static void Pmt(CFXJSE_Value* pThis,
-                  const CFX_ByteStringC& szFuncName,
+                  const ByteStringView& szFuncName,
                   CFXJSE_Arguments& args);
   static void PPmt(CFXJSE_Value* pThis,
-                   const CFX_ByteStringC& szFuncName,
+                   const ByteStringView& szFuncName,
                    CFXJSE_Arguments& args);
   static void PV(CFXJSE_Value* pThis,
-                 const CFX_ByteStringC& szFuncName,
+                 const ByteStringView& szFuncName,
                  CFXJSE_Arguments& args);
   static void Rate(CFXJSE_Value* pThis,
-                   const CFX_ByteStringC& szFuncName,
+                   const ByteStringView& szFuncName,
                    CFXJSE_Arguments& args);
   static void Term(CFXJSE_Value* pThis,
-                   const CFX_ByteStringC& szFuncName,
+                   const ByteStringView& szFuncName,
                    CFXJSE_Arguments& args);
   static void Choose(CFXJSE_Value* pThis,
-                     const CFX_ByteStringC& szFuncName,
+                     const ByteStringView& szFuncName,
                      CFXJSE_Arguments& args);
   static void Exists(CFXJSE_Value* pThis,
-                     const CFX_ByteStringC& szFuncName,
+                     const ByteStringView& szFuncName,
                      CFXJSE_Arguments& args);
   static void HasValue(CFXJSE_Value* pThis,
-                       const CFX_ByteStringC& szFuncName,
+                       const ByteStringView& szFuncName,
                        CFXJSE_Arguments& args);
   static void Oneof(CFXJSE_Value* pThis,
-                    const CFX_ByteStringC& szFuncName,
+                    const ByteStringView& szFuncName,
                     CFXJSE_Arguments& args);
   static void Within(CFXJSE_Value* pThis,
-                     const CFX_ByteStringC& szFuncName,
+                     const ByteStringView& szFuncName,
                      CFXJSE_Arguments& args);
   static void If(CFXJSE_Value* pThis,
-                 const CFX_ByteStringC& szFuncName,
+                 const ByteStringView& szFuncName,
                  CFXJSE_Arguments& args);
   static void Eval(CFXJSE_Value* pThis,
-                   const CFX_ByteStringC& szFuncName,
+                   const ByteStringView& szFuncName,
                    CFXJSE_Arguments& args);
   static void Ref(CFXJSE_Value* pThis,
-                  const CFX_ByteStringC& szFuncName,
+                  const ByteStringView& szFuncName,
                   CFXJSE_Arguments& args);
   static void UnitType(CFXJSE_Value* pThis,
-                       const CFX_ByteStringC& szFuncName,
+                       const ByteStringView& szFuncName,
                        CFXJSE_Arguments& args);
   static void UnitValue(CFXJSE_Value* pThis,
-                        const CFX_ByteStringC& szFuncName,
+                        const ByteStringView& szFuncName,
                         CFXJSE_Arguments& args);
 
   static void At(CFXJSE_Value* pThis,
-                 const CFX_ByteStringC& szFuncName,
+                 const ByteStringView& szFuncName,
                  CFXJSE_Arguments& args);
   static void Concat(CFXJSE_Value* pThis,
-                     const CFX_ByteStringC& szFuncName,
+                     const ByteStringView& szFuncName,
                      CFXJSE_Arguments& args);
   static void Decode(CFXJSE_Value* pThis,
-                     const CFX_ByteStringC& szFuncName,
+                     const ByteStringView& szFuncName,
                      CFXJSE_Arguments& args);
-  static CFX_WideString DecodeURL(const CFX_WideString& wsURLString);
-  static CFX_WideString DecodeHTML(const CFX_WideString& wsHTMLString);
-  static CFX_WideString DecodeXML(const CFX_WideString& wsXMLString);
+  static WideString DecodeURL(const WideString& wsURLString);
+  static WideString DecodeHTML(const WideString& wsHTMLString);
+  static WideString DecodeXML(const WideString& wsXMLString);
   static void Encode(CFXJSE_Value* pThis,
-                     const CFX_ByteStringC& szFuncName,
+                     const ByteStringView& szFuncName,
                      CFXJSE_Arguments& args);
-  static CFX_WideString EncodeURL(const CFX_ByteString& szURLString);
-  static CFX_WideString EncodeHTML(const CFX_ByteString& szHTMLString);
-  static CFX_WideString EncodeXML(const CFX_ByteString& szXMLString);
-  static bool HTMLSTR2Code(const CFX_WideStringC& pData, uint32_t* iCode);
-  static bool HTMLCode2STR(uint32_t iCode, CFX_WideString* wsHTMLReserve);
+  static WideString EncodeURL(const ByteString& szURLString);
+  static WideString EncodeHTML(const ByteString& szHTMLString);
+  static WideString EncodeXML(const ByteString& szXMLString);
+  static bool HTMLSTR2Code(const WideStringView& pData, uint32_t* iCode);
+  static bool HTMLCode2STR(uint32_t iCode, WideString* wsHTMLReserve);
   static void Format(CFXJSE_Value* pThis,
-                     const CFX_ByteStringC& szFuncName,
+                     const ByteStringView& szFuncName,
                      CFXJSE_Arguments& args);
   static void Left(CFXJSE_Value* pThis,
-                   const CFX_ByteStringC& szFuncName,
+                   const ByteStringView& szFuncName,
                    CFXJSE_Arguments& args);
   static void Len(CFXJSE_Value* pThis,
-                  const CFX_ByteStringC& szFuncName,
+                  const ByteStringView& szFuncName,
                   CFXJSE_Arguments& args);
   static void Lower(CFXJSE_Value* pThis,
-                    const CFX_ByteStringC& szFuncName,
+                    const ByteStringView& szFuncName,
                     CFXJSE_Arguments& args);
   static void Ltrim(CFXJSE_Value* pThis,
-                    const CFX_ByteStringC& szFuncName,
+                    const ByteStringView& szFuncName,
                     CFXJSE_Arguments& args);
   static void Parse(CFXJSE_Value* pThis,
-                    const CFX_ByteStringC& szFuncName,
+                    const ByteStringView& szFuncName,
                     CFXJSE_Arguments& args);
   static void Replace(CFXJSE_Value* pThis,
-                      const CFX_ByteStringC& szFuncName,
+                      const ByteStringView& szFuncName,
                       CFXJSE_Arguments& args);
   static void Right(CFXJSE_Value* pThis,
-                    const CFX_ByteStringC& szFuncName,
+                    const ByteStringView& szFuncName,
                     CFXJSE_Arguments& args);
   static void Rtrim(CFXJSE_Value* pThis,
-                    const CFX_ByteStringC& szFuncName,
+                    const ByteStringView& szFuncName,
                     CFXJSE_Arguments& args);
   static void Space(CFXJSE_Value* pThis,
-                    const CFX_ByteStringC& szFuncName,
+                    const ByteStringView& szFuncName,
                     CFXJSE_Arguments& args);
   static void Str(CFXJSE_Value* pThis,
-                  const CFX_ByteStringC& szFuncName,
+                  const ByteStringView& szFuncName,
                   CFXJSE_Arguments& args);
   static void Stuff(CFXJSE_Value* pThis,
-                    const CFX_ByteStringC& szFuncName,
+                    const ByteStringView& szFuncName,
                     CFXJSE_Arguments& args);
   static void Substr(CFXJSE_Value* pThis,
-                     const CFX_ByteStringC& szFuncName,
+                     const ByteStringView& szFuncName,
                      CFXJSE_Arguments& args);
   static void Uuid(CFXJSE_Value* pThis,
-                   const CFX_ByteStringC& szFuncName,
+                   const ByteStringView& szFuncName,
                    CFXJSE_Arguments& args);
   static void Upper(CFXJSE_Value* pThis,
-                    const CFX_ByteStringC& szFuncName,
+                    const ByteStringView& szFuncName,
                     CFXJSE_Arguments& args);
   static void WordNum(CFXJSE_Value* pThis,
-                      const CFX_ByteStringC& szFuncName,
+                      const ByteStringView& szFuncName,
                       CFXJSE_Arguments& args);
-  static CFX_ByteString TrillionUS(const CFX_ByteStringC& szData);
-  static CFX_ByteString WordUS(const CFX_ByteString& szData, int32_t iStyle);
+  static ByteString TrillionUS(const ByteStringView& szData);
+  static ByteString WordUS(const ByteString& szData, int32_t iStyle);
 
   static void Get(CFXJSE_Value* pThis,
-                  const CFX_ByteStringC& szFuncName,
+                  const ByteStringView& szFuncName,
                   CFXJSE_Arguments& args);
   static void Post(CFXJSE_Value* pThis,
-                   const CFX_ByteStringC& szFuncName,
+                   const ByteStringView& szFuncName,
                    CFXJSE_Arguments& args);
   static void Put(CFXJSE_Value* pThis,
-                  const CFX_ByteStringC& szFuncName,
+                  const ByteStringView& szFuncName,
                   CFXJSE_Arguments& args);
   static void assign_value_operator(CFXJSE_Value* pThis,
-                                    const CFX_ByteStringC& szFuncName,
+                                    const ByteStringView& szFuncName,
                                     CFXJSE_Arguments& args);
   static void logical_or_operator(CFXJSE_Value* pThis,
-                                  const CFX_ByteStringC& szFuncName,
+                                  const ByteStringView& szFuncName,
                                   CFXJSE_Arguments& args);
   static void logical_and_operator(CFXJSE_Value* pThis,
-                                   const CFX_ByteStringC& szFuncName,
+                                   const ByteStringView& szFuncName,
                                    CFXJSE_Arguments& args);
   static void equality_operator(CFXJSE_Value* pThis,
-                                const CFX_ByteStringC& szFuncName,
+                                const ByteStringView& szFuncName,
                                 CFXJSE_Arguments& args);
   static void notequality_operator(CFXJSE_Value* pThis,
-                                   const CFX_ByteStringC& szFuncName,
+                                   const ByteStringView& szFuncName,
                                    CFXJSE_Arguments& args);
   static bool fm_ref_equal(CFXJSE_Value* pThis, CFXJSE_Arguments& args);
   static void less_operator(CFXJSE_Value* pThis,
-                            const CFX_ByteStringC& szFuncName,
+                            const ByteStringView& szFuncName,
                             CFXJSE_Arguments& args);
   static void lessequal_operator(CFXJSE_Value* pThis,
-                                 const CFX_ByteStringC& szFuncName,
+                                 const ByteStringView& szFuncName,
                                  CFXJSE_Arguments& args);
   static void greater_operator(CFXJSE_Value* pThis,
-                               const CFX_ByteStringC& szFuncName,
+                               const ByteStringView& szFuncName,
                                CFXJSE_Arguments& args);
   static void greaterequal_operator(CFXJSE_Value* pThis,
-                                    const CFX_ByteStringC& szFuncName,
+                                    const ByteStringView& szFuncName,
                                     CFXJSE_Arguments& args);
   static void plus_operator(CFXJSE_Value* pThis,
-                            const CFX_ByteStringC& szFuncName,
+                            const ByteStringView& szFuncName,
                             CFXJSE_Arguments& args);
   static void minus_operator(CFXJSE_Value* pThis,
-                             const CFX_ByteStringC& szFuncName,
+                             const ByteStringView& szFuncName,
                              CFXJSE_Arguments& args);
   static void multiple_operator(CFXJSE_Value* pThis,
-                                const CFX_ByteStringC& szFuncName,
+                                const ByteStringView& szFuncName,
                                 CFXJSE_Arguments& args);
   static void divide_operator(CFXJSE_Value* pThis,
-                              const CFX_ByteStringC& szFuncName,
+                              const ByteStringView& szFuncName,
                               CFXJSE_Arguments& args);
   static void positive_operator(CFXJSE_Value* pThis,
-                                const CFX_ByteStringC& szFuncName,
+                                const ByteStringView& szFuncName,
                                 CFXJSE_Arguments& args);
   static void negative_operator(CFXJSE_Value* pThis,
-                                const CFX_ByteStringC& szFuncName,
+                                const ByteStringView& szFuncName,
                                 CFXJSE_Arguments& args);
   static void logical_not_operator(CFXJSE_Value* pThis,
-                                   const CFX_ByteStringC& szFuncName,
+                                   const ByteStringView& szFuncName,
                                    CFXJSE_Arguments& args);
   static void dot_accessor(CFXJSE_Value* pThis,
-                           const CFX_ByteStringC& szFuncName,
+                           const ByteStringView& szFuncName,
                            CFXJSE_Arguments& args);
   static void dotdot_accessor(CFXJSE_Value* pThis,
-                              const CFX_ByteStringC& szFuncName,
+                              const ByteStringView& szFuncName,
                               CFXJSE_Arguments& args);
   static void eval_translation(CFXJSE_Value* pThis,
-                               const CFX_ByteStringC& szFuncName,
+                               const ByteStringView& szFuncName,
                                CFXJSE_Arguments& args);
   static void is_fm_object(CFXJSE_Value* pThis,
-                           const CFX_ByteStringC& szFuncName,
+                           const ByteStringView& szFuncName,
                            CFXJSE_Arguments& args);
   static void is_fm_array(CFXJSE_Value* pThis,
-                          const CFX_ByteStringC& szFuncName,
+                          const ByteStringView& szFuncName,
                           CFXJSE_Arguments& args);
   static void get_fm_value(CFXJSE_Value* pThis,
-                           const CFX_ByteStringC& szFuncName,
+                           const ByteStringView& szFuncName,
                            CFXJSE_Arguments& args);
   static void get_fm_jsobj(CFXJSE_Value* pThis,
-                           const CFX_ByteStringC& szFuncName,
+                           const ByteStringView& szFuncName,
                            CFXJSE_Arguments& args);
   static void fm_var_filter(CFXJSE_Value* pThis,
-                            const CFX_ByteStringC& szFuncName,
+                            const ByteStringView& szFuncName,
                             CFXJSE_Arguments& args);
   static void concat_fm_object(CFXJSE_Value* pThis,
-                               const CFX_ByteStringC& szFuncName,
+                               const ByteStringView& szFuncName,
                                CFXJSE_Arguments& args);
 
   static int32_t hvalue_get_array_length(CFXJSE_Value* pThis,
@@ -387,16 +385,16 @@
                                     CFXJSE_Value* pDefaultValue);
   static bool SetObjectDefaultValue(CFXJSE_Value* pObjectValue,
                                     CFXJSE_Value* pNewValue);
-  static CFX_ByteString GenerateSomExpression(const CFX_ByteStringC& szName,
-                                              int32_t iIndexFlags,
-                                              int32_t iIndexValue,
-                                              bool bIsStar);
+  static ByteString GenerateSomExpression(const ByteStringView& szName,
+                                          int32_t iIndexFlags,
+                                          int32_t iIndexValue,
+                                          bool bIsStar);
   static bool GetObjectForName(CFXJSE_Value* pThis,
                                CFXJSE_Value* accessorValue,
-                               const CFX_ByteStringC& szAccessorName);
+                               const ByteStringView& szAccessorName);
   static int32_t ResolveObjects(CFXJSE_Value* pThis,
                                 CFXJSE_Value* pParentValue,
-                                const CFX_ByteStringC& bsSomExp,
+                                const ByteStringView& bsSomExp,
                                 XFA_RESOLVENODE_RS& resoveNodeRS,
                                 bool bdotAccessor = true,
                                 bool bHasNoResolveName = false);
@@ -414,12 +412,12 @@
   static int32_t ValueToInteger(CFXJSE_Value* pThis, CFXJSE_Value* pValue);
   static float ValueToFloat(CFXJSE_Value* pThis, CFXJSE_Value* pValue);
   static double ValueToDouble(CFXJSE_Value* pThis, CFXJSE_Value* pValue);
-  static CFX_ByteString ValueToUTF8String(CFXJSE_Value* pValue);
+  static ByteString ValueToUTF8String(CFXJSE_Value* pValue);
   static double ExtractDouble(CFXJSE_Value* pThis,
                               CFXJSE_Value* src,
                               bool* ret);
 
-  static bool Translate(const CFX_WideStringC& wsFormcalc,
+  static bool Translate(const WideStringView& wsFormcalc,
                         CFX_WideTextBuf* wsJavascript);
 
   void GlobalPropertyGetter(CFXJSE_Value* pValue);
@@ -428,14 +426,14 @@
   v8::Isolate* GetScriptRuntime() const { return m_pIsolate; }
   CXFA_Document* GetDocument() const { return m_pDocument.Get(); }
 
-  void ThrowNoDefaultPropertyException(const CFX_ByteStringC& name) const;
+  void ThrowNoDefaultPropertyException(const ByteStringView& name) const;
   void ThrowCompilerErrorException() const;
   void ThrowDivideByZeroException() const;
   void ThrowServerDeniedException() const;
-  void ThrowPropertyNotInObjectException(const CFX_WideString& name,
-                                         const CFX_WideString& exp) const;
+  void ThrowPropertyNotInObjectException(const WideString& name,
+                                         const WideString& exp) const;
   void ThrowArgumentMismatchException() const;
-  void ThrowParamCountMismatchException(const CFX_WideString& method) const;
+  void ThrowParamCountMismatchException(const WideString& method) const;
   void ThrowException(const wchar_t* str, ...) const;
 
   v8::Isolate* m_pIsolate;
diff --git a/xfa/fxfa/fm2js/cxfa_fmexpression.cpp b/xfa/fxfa/fm2js/cxfa_fmexpression.cpp
index 2faa191..a1bbb50 100644
--- a/xfa/fxfa/fm2js/cxfa_fmexpression.cpp
+++ b/xfa/fxfa/fm2js/cxfa_fmexpression.cpp
@@ -40,8 +40,8 @@
 CXFA_FMFunctionDefinition::CXFA_FMFunctionDefinition(
     uint32_t line,
     bool isGlobal,
-    const CFX_WideStringC& wsName,
-    std::vector<CFX_WideStringC>&& arguments,
+    const WideStringView& wsName,
+    std::vector<WideStringView>&& arguments,
     std::vector<std::unique_ptr<CXFA_FMExpression>>&& expressions)
     : CXFA_FMExpression(line, XFA_FM_EXPTYPE_FUNC),
       m_wsName(wsName),
@@ -61,7 +61,7 @@
   }
   javascript << L"function ";
   if (!m_wsName.IsEmpty() && m_wsName[0] == L'!') {
-    CFX_WideString tempName =
+    WideString tempName =
         EXCLAMATION_IN_IDENTIFIER + m_wsName.Right(m_wsName.GetLength() - 1);
     javascript << tempName;
   } else {
@@ -73,9 +73,8 @@
     if (bNeedComma)
       javascript << L", ";
     if (identifier[0] == L'!') {
-      CFX_WideString tempIdentifier =
-          EXCLAMATION_IN_IDENTIFIER +
-          identifier.Right(identifier.GetLength() - 1);
+      WideString tempIdentifier = EXCLAMATION_IN_IDENTIFIER +
+                                  identifier.Right(identifier.GetLength() - 1);
       javascript << tempIdentifier;
     } else {
       javascript << identifier;
@@ -117,7 +116,7 @@
 
 CXFA_FMVarExpression::CXFA_FMVarExpression(
     uint32_t line,
-    const CFX_WideStringC& wsName,
+    const WideStringView& wsName,
     std::unique_ptr<CXFA_FMExpression> pInit)
     : CXFA_FMExpression(line, XFA_FM_EXPTYPE_VAR),
       m_wsName(wsName),
@@ -127,7 +126,7 @@
 
 bool CXFA_FMVarExpression::ToJavaScript(CFX_WideTextBuf& javascript) {
   javascript << L"var ";
-  CFX_WideString tempName(m_wsName);
+  WideString tempName(m_wsName);
   if (m_wsName[0] == L'!') {
     tempName =
         EXCLAMATION_IN_IDENTIFIER + m_wsName.Right(m_wsName.GetLength() - 1);
@@ -151,7 +150,7 @@
 
 bool CXFA_FMVarExpression::ToImpliedReturnJS(CFX_WideTextBuf& javascript) {
   javascript << L"var ";
-  CFX_WideString tempName(m_wsName);
+  WideString tempName(m_wsName);
   if (m_wsName[0] == L'!') {
     tempName =
         EXCLAMATION_IN_IDENTIFIER + m_wsName.Right(m_wsName.GetLength() - 1);
@@ -440,7 +439,7 @@
 
 CXFA_FMForExpression::CXFA_FMForExpression(
     uint32_t line,
-    const CFX_WideStringC& wsVariant,
+    const WideStringView& wsVariant,
     std::unique_ptr<CXFA_FMSimpleExpression> pAssignment,
     std::unique_ptr<CXFA_FMSimpleExpression> pAccessor,
     int32_t iDirection,
@@ -458,7 +457,7 @@
 
 bool CXFA_FMForExpression::ToJavaScript(CFX_WideTextBuf& javascript) {
   javascript << L"{\nvar ";
-  CFX_WideString tempVariant;
+  WideString tempVariant;
   if (m_wsVariant[0] == L'!') {
     tempVariant = EXCLAMATION_IN_IDENTIFIER +
                   m_wsVariant.Right(m_wsVariant.GetLength() - 1);
@@ -513,7 +512,7 @@
   javascript << RUNTIMEFUNCTIONRETURNVALUE;
   javascript << L" = 0;\n";
   javascript << L"{\nvar ";
-  CFX_WideString tempVariant;
+  WideString tempVariant;
   if (m_wsVariant[0] == L'!') {
     tempVariant = EXCLAMATION_IN_IDENTIFIER +
                   m_wsVariant.Right(m_wsVariant.GetLength() - 1);
@@ -567,7 +566,7 @@
 
 CXFA_FMForeachExpression::CXFA_FMForeachExpression(
     uint32_t line,
-    const CFX_WideStringC& wsIdentifier,
+    const WideStringView& wsIdentifier,
     std::vector<std::unique_ptr<CXFA_FMSimpleExpression>>&& pAccessors,
     std::unique_ptr<CXFA_FMExpression> pList)
     : CXFA_FMLoopExpression(line),
@@ -581,7 +580,7 @@
   javascript << L"{\n";
   javascript << L"var ";
   if (m_wsIdentifier[0] == L'!') {
-    CFX_WideString tempIdentifier =
+    WideString tempIdentifier =
         EXCLAMATION_IN_IDENTIFIER +
         m_wsIdentifier.Right(m_wsIdentifier.GetLength() - 1);
     javascript << tempIdentifier;
@@ -613,7 +612,7 @@
   javascript << RUNTIMEBLOCKTEMPARRAY;
   javascript << L".length)\n{\n";
   if (m_wsIdentifier[0] == L'!') {
-    CFX_WideString tempIdentifier =
+    WideString tempIdentifier =
         EXCLAMATION_IN_IDENTIFIER +
         m_wsIdentifier.Right(m_wsIdentifier.GetLength() - 1);
     javascript << tempIdentifier;
@@ -638,7 +637,7 @@
   javascript << L"{\n";
   javascript << L"var ";
   if (m_wsIdentifier[0] == L'!') {
-    CFX_WideString tempIdentifier =
+    WideString tempIdentifier =
         EXCLAMATION_IN_IDENTIFIER +
         m_wsIdentifier.Right(m_wsIdentifier.GetLength() - 1);
     javascript << tempIdentifier;
@@ -669,7 +668,7 @@
   javascript << RUNTIMEBLOCKTEMPARRAY;
   javascript << L".length)\n{\n";
   if (m_wsIdentifier[0] == L'!') {
-    CFX_WideString tempIdentifier =
+    WideString tempIdentifier =
         EXCLAMATION_IN_IDENTIFIER +
         m_wsIdentifier.Right(m_wsIdentifier.GetLength() - 1);
     javascript << tempIdentifier;
diff --git a/xfa/fxfa/fm2js/cxfa_fmexpression.h b/xfa/fxfa/fm2js/cxfa_fmexpression.h
index 47b2d9c..cfbba3a 100644
--- a/xfa/fxfa/fm2js/cxfa_fmexpression.h
+++ b/xfa/fxfa/fm2js/cxfa_fmexpression.h
@@ -47,8 +47,8 @@
   CXFA_FMFunctionDefinition(
       uint32_t line,
       bool isGlobal,
-      const CFX_WideStringC& wsName,
-      std::vector<CFX_WideStringC>&& arguments,
+      const WideStringView& wsName,
+      std::vector<WideStringView>&& arguments,
       std::vector<std::unique_ptr<CXFA_FMExpression>>&& expressions);
   ~CXFA_FMFunctionDefinition() override;
 
@@ -56,8 +56,8 @@
   bool ToImpliedReturnJS(CFX_WideTextBuf&) override;
 
  private:
-  CFX_WideStringC m_wsName;
-  std::vector<CFX_WideStringC> m_pArguments;
+  WideStringView m_wsName;
+  std::vector<WideStringView> m_pArguments;
   std::vector<std::unique_ptr<CXFA_FMExpression>> m_pExpressions;
   bool m_isGlobal;
 };
@@ -65,7 +65,7 @@
 class CXFA_FMVarExpression : public CXFA_FMExpression {
  public:
   CXFA_FMVarExpression(uint32_t line,
-                       const CFX_WideStringC& wsName,
+                       const WideStringView& wsName,
                        std::unique_ptr<CXFA_FMExpression> pInit);
   ~CXFA_FMVarExpression() override;
 
@@ -73,7 +73,7 @@
   bool ToImpliedReturnJS(CFX_WideTextBuf&) override;
 
  private:
-  CFX_WideStringC m_wsName;
+  WideStringView m_wsName;
   std::unique_ptr<CXFA_FMExpression> m_pInit;
 };
 
@@ -175,7 +175,7 @@
 class CXFA_FMForExpression : public CXFA_FMLoopExpression {
  public:
   CXFA_FMForExpression(uint32_t line,
-                       const CFX_WideStringC& wsVariant,
+                       const WideStringView& wsVariant,
                        std::unique_ptr<CXFA_FMSimpleExpression> pAssignment,
                        std::unique_ptr<CXFA_FMSimpleExpression> pAccessor,
                        int32_t iDirection,
@@ -187,7 +187,7 @@
   bool ToImpliedReturnJS(CFX_WideTextBuf&) override;
 
  private:
-  CFX_WideStringC m_wsVariant;
+  WideStringView m_wsVariant;
   std::unique_ptr<CXFA_FMSimpleExpression> m_pAssignment;
   std::unique_ptr<CXFA_FMSimpleExpression> m_pAccessor;
   const bool m_bDirection;
@@ -200,7 +200,7 @@
   // Takes ownership of |pAccessors|.
   CXFA_FMForeachExpression(
       uint32_t line,
-      const CFX_WideStringC& wsIdentifier,
+      const WideStringView& wsIdentifier,
       std::vector<std::unique_ptr<CXFA_FMSimpleExpression>>&& pAccessors,
       std::unique_ptr<CXFA_FMExpression> pList);
   ~CXFA_FMForeachExpression() override;
@@ -209,7 +209,7 @@
   bool ToImpliedReturnJS(CFX_WideTextBuf&) override;
 
  private:
-  CFX_WideStringC m_wsIdentifier;
+  WideStringView m_wsIdentifier;
   std::vector<std::unique_ptr<CXFA_FMSimpleExpression>> m_pAccessors;
   std::unique_ptr<CXFA_FMExpression> m_pList;
 };
diff --git a/xfa/fxfa/fm2js/cxfa_fmlexer.cpp b/xfa/fxfa/fm2js/cxfa_fmlexer.cpp
index 1a43e83..f6b2a58 100644
--- a/xfa/fxfa/fm2js/cxfa_fmlexer.cpp
+++ b/xfa/fxfa/fm2js/cxfa_fmlexer.cpp
@@ -122,7 +122,7 @@
     L"TOKcall",       L"TOKstring",     L"TOKnumber",   L"TOKreserver",
 };
 
-XFA_FM_TOKEN TokenizeIdentifier(const CFX_WideStringC& str) {
+XFA_FM_TOKEN TokenizeIdentifier(const WideStringView& str) {
   uint32_t key = FX_HashCode_GetW(str, true);
 
   const XFA_FMKeyword* end = std::begin(keyWords) + KEYWORD_END + 1;
@@ -145,8 +145,8 @@
 
 CXFA_FMToken::~CXFA_FMToken() {}
 
-CFX_WideString CXFA_FMToken::ToDebugString() const {
-  CFX_WideString str(L"type = ");
+WideString CXFA_FMToken::ToDebugString() const {
+  WideString str(L"type = ");
   str += tokenStrings[m_type];
   str += L", string = ";
   str += m_string;
@@ -155,7 +155,7 @@
   return str;
 }
 
-CXFA_FMLexer::CXFA_FMLexer(const CFX_WideStringC& wsFormCalc)
+CXFA_FMLexer::CXFA_FMLexer(const WideStringView& wsFormCalc)
     : m_cursor(wsFormCalc.unterminated_c_str()),
       m_end(m_cursor + wsFormCalc.GetLength() - 1),
       m_current_line(1),
@@ -378,7 +378,7 @@
   }
 
   m_token->m_string =
-      CFX_WideStringC(m_cursor, static_cast<FX_STRSIZE>(end - m_cursor));
+      WideStringView(m_cursor, static_cast<FX_STRSIZE>(end - m_cursor));
   m_cursor = end;
 }
 
@@ -395,7 +395,7 @@
       // If the end of the input has been reached it was not escaped.
       if (m_cursor > m_end) {
         m_token->m_string =
-            CFX_WideStringC(start, static_cast<FX_STRSIZE>(m_cursor - start));
+            WideStringView(start, static_cast<FX_STRSIZE>(m_cursor - start));
         return;
       }
       // If the next character is not a " then the end of the string has been
@@ -404,7 +404,7 @@
         if (!IsFormCalcCharacter(*m_cursor)) {
           break;
         }
-        m_token->m_string = CFX_WideStringC(start, (m_cursor - start));
+        m_token->m_string = WideStringView(start, (m_cursor - start));
         return;
       }
     }
@@ -430,7 +430,7 @@
     ++m_cursor;
   }
   m_token->m_string =
-      CFX_WideStringC(start, static_cast<FX_STRSIZE>(m_cursor - start));
+      WideStringView(start, static_cast<FX_STRSIZE>(m_cursor - start));
   m_token->m_type = TokenizeIdentifier(m_token->m_string);
 }
 
diff --git a/xfa/fxfa/fm2js/cxfa_fmlexer.h b/xfa/fxfa/fm2js/cxfa_fmlexer.h
index 3903176..b9764c5 100644
--- a/xfa/fxfa/fm2js/cxfa_fmlexer.h
+++ b/xfa/fxfa/fm2js/cxfa_fmlexer.h
@@ -95,16 +95,16 @@
   explicit CXFA_FMToken(uint32_t line_num);
   ~CXFA_FMToken();
 
-  CFX_WideString ToDebugString() const;
+  WideString ToDebugString() const;
 
-  CFX_WideStringC m_string;
+  WideStringView m_string;
   XFA_FM_TOKEN m_type;
   uint32_t m_line_num;
 };
 
 class CXFA_FMLexer {
  public:
-  explicit CXFA_FMLexer(const CFX_WideStringC& wsFormcalc);
+  explicit CXFA_FMLexer(const WideStringView& wsFormcalc);
   ~CXFA_FMLexer();
 
   std::unique_ptr<CXFA_FMToken> NextToken();
diff --git a/xfa/fxfa/fm2js/cxfa_fmparser.cpp b/xfa/fxfa/fm2js/cxfa_fmparser.cpp
index 65517fb..1653850 100644
--- a/xfa/fxfa/fm2js/cxfa_fmparser.cpp
+++ b/xfa/fxfa/fm2js/cxfa_fmparser.cpp
@@ -20,7 +20,7 @@
 
 }  // namespace
 
-CXFA_FMParser::CXFA_FMParser(const CFX_WideStringC& wsFormcalc)
+CXFA_FMParser::CXFA_FMParser(const WideStringView& wsFormcalc)
     : m_error(false), m_parse_depth(0), m_max_parse_depth(kMaxParseDepth) {
   m_lexer = pdfium::MakeUnique<CXFA_FMLexer>(wsFormcalc);
   m_token = m_lexer->NextToken();
@@ -33,7 +33,7 @@
   if (HasError())
     return nullptr;
 
-  std::vector<CFX_WideStringC> arguments;
+  std::vector<WideStringView> arguments;
   return pdfium::MakeUnique<CXFA_FMFunctionDefinition>(
       1, true, L"", std::move(arguments), std::move(expressions));
 }
@@ -92,8 +92,8 @@
   if (HasError() || !IncrementParseDepthAndCheck())
     return nullptr;
 
-  CFX_WideStringC ident;
-  std::vector<CFX_WideStringC> arguments;
+  WideStringView ident;
+  std::vector<WideStringView> arguments;
   std::vector<std::unique_ptr<CXFA_FMExpression>> expressions;
   uint32_t line = m_token->m_line_num;
   if (!NextToken())
@@ -208,7 +208,7 @@
   if (HasError() || !IncrementParseDepthAndCheck())
     return nullptr;
 
-  CFX_WideStringC ident;
+  WideStringView ident;
   uint32_t line = m_token->m_line_num;
   if (!NextToken())
     return nullptr;
@@ -613,7 +613,7 @@
         return nullptr;
       break;
     case TOKidentifier: {
-      CFX_WideStringC wsIdentifier(m_token->m_string);
+      WideStringView wsIdentifier(m_token->m_string);
       if (!NextToken())
         return nullptr;
       if (m_token->m_type == TOKlbracket) {
@@ -714,7 +714,7 @@
           m_error = true;
           return nullptr;
         }
-        CFX_WideStringC tempStr = m_token->m_string;
+        WideStringView tempStr = m_token->m_string;
         uint32_t tempLine = m_token->m_line_num;
         if (!NextToken())
           return nullptr;
@@ -786,7 +786,7 @@
           m_error = true;
           return nullptr;
         }
-        CFX_WideStringC tempStr = m_token->m_string;
+        WideStringView tempStr = m_token->m_string;
         uint32_t tempLine = m_token->m_line_num;
         if (!NextToken())
           return nullptr;
@@ -813,7 +813,7 @@
           m_error = true;
           return nullptr;
         }
-        CFX_WideStringC tempStr = m_token->m_string;
+        WideStringView tempStr = m_token->m_string;
         uint32_t tempLine = m_token->m_line_num;
         if (!NextToken())
           return nullptr;
@@ -1083,7 +1083,7 @@
   if (HasError() || !IncrementParseDepthAndCheck())
     return nullptr;
 
-  CFX_WideStringC wsVariant;
+  WideStringView wsVariant;
   uint32_t line = m_token->m_line_num;
   if (!NextToken())
     return nullptr;
@@ -1152,7 +1152,7 @@
     return nullptr;
 
   std::unique_ptr<CXFA_FMExpression> expr;
-  CFX_WideStringC wsIdentifier;
+  WideStringView wsIdentifier;
   std::vector<std::unique_ptr<CXFA_FMSimpleExpression>> pAccessors;
   std::unique_ptr<CXFA_FMExpression> pList;
   uint32_t line = m_token->m_line_num;
diff --git a/xfa/fxfa/fm2js/cxfa_fmparser.h b/xfa/fxfa/fm2js/cxfa_fmparser.h
index ddfaa1a..c536838 100644
--- a/xfa/fxfa/fm2js/cxfa_fmparser.h
+++ b/xfa/fxfa/fm2js/cxfa_fmparser.h
@@ -15,7 +15,7 @@
 
 class CXFA_FMParser {
  public:
-  explicit CXFA_FMParser(const CFX_WideStringC& wsFormcalc);
+  explicit CXFA_FMParser(const WideStringView& wsFormcalc);
   ~CXFA_FMParser();
 
   std::unique_ptr<CXFA_FMFunctionDefinition> Parse();
diff --git a/xfa/fxfa/fm2js/cxfa_fmparser_unittest.cpp b/xfa/fxfa/fm2js/cxfa_fmparser_unittest.cpp
index a7e784e..192f935 100644
--- a/xfa/fxfa/fm2js/cxfa_fmparser_unittest.cpp
+++ b/xfa/fxfa/fm2js/cxfa_fmparser_unittest.cpp
@@ -20,7 +20,7 @@
   CFX_WideTextBuf buf;
   EXPECT_TRUE(ast->ToJavaScript(buf));
   // TODO(dsinclair): This is a little weird .....
-  EXPECT_EQ(L"// comments only", buf.AsStringC());
+  EXPECT_EQ(L"// comments only", buf.AsStringView());
 }
 
 TEST(CXFA_FMParserTest, CommentOnlyIsError) {
@@ -33,7 +33,7 @@
 
   CFX_WideTextBuf buf;
   EXPECT_TRUE(ast->ToJavaScript(buf));
-  EXPECT_EQ(L"// comments only", buf.AsStringC());
+  EXPECT_EQ(L"// comments only", buf.AsStringView());
 }
 
 TEST(CXFA_FMParserTest, CommentThenValue) {
@@ -51,7 +51,7 @@
 
   CFX_WideTextBuf buf;
   EXPECT_TRUE(ast->ToJavaScript(buf));
-  EXPECT_EQ(ret, buf.AsStringC());
+  EXPECT_EQ(ret, buf.AsStringView());
 }
 
 TEST(CXFA_FMParserTest, Parse) {
@@ -106,7 +106,7 @@
 
   CFX_WideTextBuf buf;
   EXPECT_TRUE(ast->ToJavaScript(buf));
-  EXPECT_EQ(ret, buf.AsStringC());
+  EXPECT_EQ(ret, buf.AsStringView());
 }
 
 TEST(CXFA_FMParserTest, MaxParseDepth) {
diff --git a/xfa/fxfa/fm2js/cxfa_fmsimpleexpression.cpp b/xfa/fxfa/fm2js/cxfa_fmsimpleexpression.cpp
index fc07609..73dfdd5 100644
--- a/xfa/fxfa/fm2js/cxfa_fmsimpleexpression.cpp
+++ b/xfa/fxfa/fm2js/cxfa_fmsimpleexpression.cpp
@@ -81,7 +81,7 @@
 
 }  // namespace
 
-CFX_WideStringC XFA_FM_EXPTypeToString(
+WideStringView XFA_FM_EXPTypeToString(
     XFA_FM_SimpleExpressionType simpleExpType) {
   return gs_lpStrExpFuncName[simpleExpType];
 }
@@ -110,7 +110,7 @@
 }
 
 CXFA_FMNumberExpression::CXFA_FMNumberExpression(uint32_t line,
-                                                 CFX_WideStringC wsNumber)
+                                                 WideStringView wsNumber)
     : CXFA_FMSimpleExpression(line, TOKnumber), m_wsNumber(wsNumber) {}
 
 CXFA_FMNumberExpression::~CXFA_FMNumberExpression() {}
@@ -121,13 +121,13 @@
 }
 
 CXFA_FMStringExpression::CXFA_FMStringExpression(uint32_t line,
-                                                 CFX_WideStringC wsString)
+                                                 WideStringView wsString)
     : CXFA_FMSimpleExpression(line, TOKstring), m_wsString(wsString) {}
 
 CXFA_FMStringExpression::~CXFA_FMStringExpression() {}
 
 bool CXFA_FMStringExpression::ToJavaScript(CFX_WideTextBuf& javascript) {
-  CFX_WideString tempStr(m_wsString);
+  WideString tempStr(m_wsString);
   if (tempStr.GetLength() <= 2) {
     javascript << tempStr;
     return true;
@@ -156,14 +156,14 @@
 
 CXFA_FMIdentifierExpression::CXFA_FMIdentifierExpression(
     uint32_t line,
-    CFX_WideStringC wsIdentifier)
+    WideStringView wsIdentifier)
     : CXFA_FMSimpleExpression(line, TOKidentifier),
       m_wsIdentifier(wsIdentifier) {}
 
 CXFA_FMIdentifierExpression::~CXFA_FMIdentifierExpression() {}
 
 bool CXFA_FMIdentifierExpression::ToJavaScript(CFX_WideTextBuf& javascript) {
-  CFX_WideString tempStr(m_wsIdentifier);
+  WideString tempStr(m_wsIdentifier);
   if (tempStr == L"$") {
     tempStr = L"this";
   } else if (tempStr == L"!") {
@@ -244,7 +244,7 @@
   javascript << tempExp2;
   javascript << L");\n}\n";
   if (m_pExp1->GetOperatorToken() == TOKidentifier &&
-      tempExp1.AsStringC() != L"this") {
+      tempExp1.AsStringView() != L"this") {
     javascript << L"else\n{\n";
     javascript << tempExp1;
     javascript << L" = ";
@@ -282,7 +282,7 @@
   javascript << tempExp2;
   javascript << L");\n}\n";
   if (m_pExp1->GetOperatorToken() == TOKidentifier &&
-      tempExp1.AsStringC() != L"this") {
+      tempExp1.AsStringView() != L"this") {
     javascript << L"else\n{\n";
     javascript << RUNTIMEFUNCTIONRETURNVALUE;
     javascript << L" = ";
@@ -522,10 +522,10 @@
   if (funcName->GetLength() > g_BuiltInFuncsMaxLen)
     return false;
 
-  auto cmpFunc = [](const wchar_t* iter, const CFX_WideString& val) -> bool {
+  auto cmpFunc = [](const wchar_t* iter, const WideString& val) -> bool {
     return val.CompareNoCase(iter) > 0;
   };
-  CFX_WideString str = funcName->MakeString();
+  WideString str = funcName->MakeString();
   const wchar_t* const* pMatchResult = std::lower_bound(
       std::begin(g_BuiltInFuncs), std::end(g_BuiltInFuncs), str, cmpFunc);
   if (pMatchResult != std::end(g_BuiltInFuncs) &&
@@ -538,8 +538,8 @@
 }
 
 uint32_t CXFA_FMCallExpression::IsMethodWithObjParam(
-    const CFX_WideString& methodName) {
-  auto cmpFunc = [](const XFA_FMSOMMethod iter, const CFX_WideString& val) {
+    const WideString& methodName) {
+  auto cmpFunc = [](const XFA_FMSOMMethod iter, const WideString& val) {
     return val.Compare(iter.m_wsSomMethodName) > 0;
   };
   const XFA_FMSOMMethod* result =
@@ -599,12 +599,12 @@
     bool isEvalFunc = false;
     bool isExistsFunc = false;
     if (IsBuiltInFunc(&funcName)) {
-      if (funcName.AsStringC() == L"Eval") {
+      if (funcName.AsStringView() == L"Eval") {
         isEvalFunc = true;
         javascript << L"eval.call(this, ";
         javascript << gs_lpStrExpFuncName[CALL];
         javascript << L"Translate";
-      } else if (funcName.AsStringC() == L"Exists") {
+      } else if (funcName.AsStringView() == L"Exists") {
         isExistsFunc = true;
         javascript << gs_lpStrExpFuncName[CALL];
         javascript << funcName;
@@ -655,7 +655,7 @@
     uint32_t line,
     std::unique_ptr<CXFA_FMSimpleExpression> pAccessor,
     XFA_FM_TOKEN op,
-    CFX_WideStringC wsIdentifier,
+    WideStringView wsIdentifier,
     std::unique_ptr<CXFA_FMSimpleExpression> pIndexExp)
     : CXFA_FMBinExpression(line,
                            op,
@@ -745,7 +745,7 @@
     uint32_t line,
     std::unique_ptr<CXFA_FMSimpleExpression> pAccessor,
     XFA_FM_TOKEN op,
-    CFX_WideStringC wsIdentifier,
+    WideStringView wsIdentifier,
     std::unique_ptr<CXFA_FMSimpleExpression> pIndexExp)
     : CXFA_FMBinExpression(line,
                            op,
diff --git a/xfa/fxfa/fm2js/cxfa_fmsimpleexpression.h b/xfa/fxfa/fm2js/cxfa_fmsimpleexpression.h
index a9e9f90..864c822 100644
--- a/xfa/fxfa/fm2js/cxfa_fmsimpleexpression.h
+++ b/xfa/fxfa/fm2js/cxfa_fmsimpleexpression.h
@@ -45,7 +45,7 @@
 
 class CFX_WideTextBuf;
 
-CFX_WideStringC XFA_FM_EXPTypeToString(
+WideStringView XFA_FM_EXPTypeToString(
     XFA_FM_SimpleExpressionType simpleExpType);
 
 enum XFA_FM_AccessorIndex {
@@ -78,32 +78,32 @@
 
 class CXFA_FMNumberExpression : public CXFA_FMSimpleExpression {
  public:
-  CXFA_FMNumberExpression(uint32_t line, CFX_WideStringC wsNumber);
+  CXFA_FMNumberExpression(uint32_t line, WideStringView wsNumber);
   ~CXFA_FMNumberExpression() override;
   bool ToJavaScript(CFX_WideTextBuf& javascript) override;
 
  private:
-  CFX_WideStringC m_wsNumber;
+  WideStringView m_wsNumber;
 };
 
 class CXFA_FMStringExpression : public CXFA_FMSimpleExpression {
  public:
-  CXFA_FMStringExpression(uint32_t line, CFX_WideStringC wsString);
+  CXFA_FMStringExpression(uint32_t line, WideStringView wsString);
   ~CXFA_FMStringExpression() override;
   bool ToJavaScript(CFX_WideTextBuf& javascript) override;
 
  private:
-  CFX_WideStringC m_wsString;
+  WideStringView m_wsString;
 };
 
 class CXFA_FMIdentifierExpression : public CXFA_FMSimpleExpression {
  public:
-  CXFA_FMIdentifierExpression(uint32_t line, CFX_WideStringC wsIdentifier);
+  CXFA_FMIdentifierExpression(uint32_t line, WideStringView wsIdentifier);
   ~CXFA_FMIdentifierExpression() override;
   bool ToJavaScript(CFX_WideTextBuf& javascript) override;
 
  private:
-  CFX_WideStringC m_wsIdentifier;
+  WideStringView m_wsIdentifier;
 };
 
 class CXFA_FMUnaryExpression : public CXFA_FMSimpleExpression {
@@ -240,7 +240,7 @@
   ~CXFA_FMCallExpression() override;
 
   bool IsBuiltInFunc(CFX_WideTextBuf* funcName);
-  uint32_t IsMethodWithObjParam(const CFX_WideString& methodName);
+  uint32_t IsMethodWithObjParam(const WideString& methodName);
   bool ToJavaScript(CFX_WideTextBuf& javascript) override;
 
  private:
@@ -254,13 +254,13 @@
       uint32_t line,
       std::unique_ptr<CXFA_FMSimpleExpression> pAccessor,
       XFA_FM_TOKEN op,
-      CFX_WideStringC wsIdentifier,
+      WideStringView wsIdentifier,
       std::unique_ptr<CXFA_FMSimpleExpression> pIndexExp);
   ~CXFA_FMDotAccessorExpression() override;
   bool ToJavaScript(CFX_WideTextBuf& javascript) override;
 
  private:
-  CFX_WideStringC m_wsIdentifier;
+  WideStringView m_wsIdentifier;
 };
 
 class CXFA_FMIndexExpression : public CXFA_FMUnaryExpression {
@@ -283,14 +283,14 @@
       uint32_t line,
       std::unique_ptr<CXFA_FMSimpleExpression> pAccessor,
       XFA_FM_TOKEN op,
-      CFX_WideStringC wsIdentifier,
+      WideStringView wsIdentifier,
       std::unique_ptr<CXFA_FMSimpleExpression> pIndexExp);
   ~CXFA_FMDotDotAccessorExpression() override;
 
   bool ToJavaScript(CFX_WideTextBuf& javascript) override;
 
  private:
-  CFX_WideStringC m_wsIdentifier;
+  WideStringView m_wsIdentifier;
 };
 
 class CXFA_FMMethodCallExpression : public CXFA_FMBinExpression {
diff --git a/xfa/fxfa/fm2js/cxfa_fmsimpleexpression_unittest.cpp b/xfa/fxfa/fm2js/cxfa_fmsimpleexpression_unittest.cpp
index 58ddbac..5f4d83c 100644
--- a/xfa/fxfa/fm2js/cxfa_fmsimpleexpression_unittest.cpp
+++ b/xfa/fxfa/fm2js/cxfa_fmsimpleexpression_unittest.cpp
@@ -27,7 +27,7 @@
   callExp.ToJavaScript(js);
 
   // Generate the result javascript string.
-  CFX_WideString result = L"sign(";
+  WideString result = L"sign(";
   for (size_t i = 0; i < 50; i++) {
     if (i > 0)
       result += L", ";
@@ -41,31 +41,31 @@
   }
   result += L")";
 
-  EXPECT_EQ(result.AsStringC(), js.AsStringC());
+  EXPECT_EQ(result.AsStringView(), js.AsStringView());
 }
 
 TEST(FMStringExpressionTest, Empty) {
   CFX_WideTextBuf accumulator;
-  CXFA_FMStringExpression(1, CFX_WideStringC()).ToJavaScript(accumulator);
-  EXPECT_EQ(L"", accumulator.AsStringC());
+  CXFA_FMStringExpression(1, WideStringView()).ToJavaScript(accumulator);
+  EXPECT_EQ(L"", accumulator.AsStringView());
 }
 
 TEST(FMStringExpressionTest, Short) {
   CFX_WideTextBuf accumulator;
   CXFA_FMStringExpression(1, L"a").ToJavaScript(accumulator);
-  EXPECT_EQ(L"a", accumulator.AsStringC());
+  EXPECT_EQ(L"a", accumulator.AsStringView());
 }
 
 TEST(FMStringExpressionTest, Medium) {
   CFX_WideTextBuf accumulator;
   CXFA_FMStringExpression(1, L".abcd.").ToJavaScript(accumulator);
-  EXPECT_EQ(L"\"abcd\"", accumulator.AsStringC());
+  EXPECT_EQ(L"\"abcd\"", accumulator.AsStringView());
 }
 
 TEST(FMStringExpressionTest, Long) {
   CFX_WideTextBuf accumulator;
-  std::vector<CFX_WideStringC::UnsignedType> vec(140000, L'A');
-  CXFA_FMStringExpression(1, CFX_WideStringC(vec)).ToJavaScript(accumulator);
+  std::vector<WideStringView::UnsignedType> vec(140000, L'A');
+  CXFA_FMStringExpression(1, WideStringView(vec)).ToJavaScript(accumulator);
   EXPECT_EQ(140000u, accumulator.GetLength());
 }
 
@@ -73,5 +73,5 @@
   CFX_WideTextBuf accumulator;
   CXFA_FMStringExpression(1, L".Simon says \"\"run\"\".")
       .ToJavaScript(accumulator);
-  EXPECT_EQ(L"\"Simon says \\\"run\\\"\"", accumulator.AsStringC());
+  EXPECT_EQ(L"\"Simon says \\\"run\\\"\"", accumulator.AsStringView());
 }
diff --git a/xfa/fxfa/fxfa.h b/xfa/fxfa/fxfa.h
index dfd4f34..b8595d4 100644
--- a/xfa/fxfa/fxfa.h
+++ b/xfa/fxfa/fxfa.h
@@ -114,22 +114,22 @@
   /**
    * Returns the language of the running host application. Such as zh_CN
    */
-  virtual CFX_WideString GetLanguage() = 0;
+  virtual WideString GetLanguage() = 0;
 
   /**
    * Returns the platform of the machine running the script. Such as WIN
    */
-  virtual CFX_WideString GetPlatform() = 0;
+  virtual WideString GetPlatform() = 0;
 
   /**
    * Get application name, such as Phantom.
    */
-  virtual CFX_WideString GetAppName() = 0;
+  virtual WideString GetAppName() = 0;
 
   /**
    * Get application message box title.
    */
-  virtual CFX_WideString GetAppTitle() const = 0;
+  virtual WideString GetAppTitle() const = 0;
 
   /**
    * Causes the system to play a sound.
@@ -147,8 +147,8 @@
    * @return A valid integer representing the value of the button pressed by the
    * user, refer to XFA_ID.
    */
-  virtual int32_t MsgBox(const CFX_WideString& wsMessage,
-                         const CFX_WideString& wsTitle = L"",
+  virtual int32_t MsgBox(const WideString& wsMessage,
+                         const WideString& wsTitle = L"",
                          uint32_t dwIconType = 0,
                          uint32_t dwButtonType = 0) = 0;
 
@@ -160,10 +160,10 @@
    * @param[in] bMask           - Mask the user input with asterisks when true,
    * @return A string containing the user's response.
    */
-  virtual CFX_WideString Response(const CFX_WideString& wsQuestion,
-                                  const CFX_WideString& wsTitle = L"",
-                                  const CFX_WideString& wsDefaultAnswer = L"",
-                                  bool bMask = true) = 0;
+  virtual WideString Response(const WideString& wsQuestion,
+                              const WideString& wsTitle = L"",
+                              const WideString& wsDefaultAnswer = L"",
+                              bool bMask = true) = 0;
 
   /**
    * Download something from somewhere.
@@ -171,7 +171,7 @@
    * "http://www.w3.org/TR/REC-xml-names/".
    */
   virtual CFX_RetainPtr<IFX_SeekableReadStream> DownloadURL(
-      const CFX_WideString& wsURL) = 0;
+      const WideString& wsURL) = 0;
 
   /**
    * POST data to the given url.
@@ -188,12 +188,12 @@
    * @param[out] wsResponse   decoded response from server.
    * @return true Server permitted the post request, false otherwise.
    */
-  virtual bool PostRequestURL(const CFX_WideString& wsURL,
-                              const CFX_WideString& wsData,
-                              const CFX_WideString& wsContentType,
-                              const CFX_WideString& wsEncode,
-                              const CFX_WideString& wsHeader,
-                              CFX_WideString& wsResponse) = 0;
+  virtual bool PostRequestURL(const WideString& wsURL,
+                              const WideString& wsData,
+                              const WideString& wsContentType,
+                              const WideString& wsEncode,
+                              const WideString& wsHeader,
+                              WideString& wsResponse) = 0;
 
   /**
    * PUT data to the given url.
@@ -203,9 +203,9 @@
    * ISO8859-1, any recognized [IANA]character encoding
    * @return true Server permitted the post request, false otherwise.
    */
-  virtual bool PutRequestURL(const CFX_WideString& wsURL,
-                             const CFX_WideString& wsData,
-                             const CFX_WideString& wsEncode) = 0;
+  virtual bool PutRequestURL(const WideString& wsURL,
+                             const WideString& wsData,
+                             const WideString& wsEncode) = 0;
 
   virtual IFWL_AdapterTimerMgr* GetTimerMgr() = 0;
 };
@@ -237,12 +237,12 @@
   virtual void SetCurrentPage(CXFA_FFDoc* hDoc, int32_t iCurPage) = 0;
   virtual bool IsCalculationsEnabled(CXFA_FFDoc* hDoc) = 0;
   virtual void SetCalculationsEnabled(CXFA_FFDoc* hDoc, bool bEnabled) = 0;
-  virtual void GetTitle(CXFA_FFDoc* hDoc, CFX_WideString& wsTitle) = 0;
-  virtual void SetTitle(CXFA_FFDoc* hDoc, const CFX_WideString& wsTitle) = 0;
+  virtual void GetTitle(CXFA_FFDoc* hDoc, WideString& wsTitle) = 0;
+  virtual void SetTitle(CXFA_FFDoc* hDoc, const WideString& wsTitle) = 0;
   virtual void ExportData(CXFA_FFDoc* hDoc,
-                          const CFX_WideString& wsFilePath,
+                          const WideString& wsFilePath,
                           bool bXDP) = 0;
-  virtual void GotoURL(CXFA_FFDoc* hDoc, const CFX_WideString& bsURL) = 0;
+  virtual void GotoURL(CXFA_FFDoc* hDoc, const WideString& bsURL) = 0;
   virtual bool IsValidationsEnabled(CXFA_FFDoc* hDoc) = 0;
   virtual void SetValidationsEnabled(CXFA_FFDoc* hDoc, bool bEnabled) = 0;
   virtual void SetFocusWidget(CXFA_FFDoc* hDoc, CXFA_FFWidget* hWidget) = 0;
@@ -254,14 +254,14 @@
 
   virtual bool SubmitData(CXFA_FFDoc* hDoc, CXFA_Submit submit) = 0;
   virtual bool GetGlobalProperty(CXFA_FFDoc* hDoc,
-                                 const CFX_ByteStringC& szPropName,
+                                 const ByteStringView& szPropName,
                                  CFXJSE_Value* pValue) = 0;
   virtual bool SetGlobalProperty(CXFA_FFDoc* hDoc,
-                                 const CFX_ByteStringC& szPropName,
+                                 const ByteStringView& szPropName,
                                  CFXJSE_Value* pValue) = 0;
   virtual CFX_RetainPtr<IFX_SeekableReadStream> OpenLinkedFile(
       CXFA_FFDoc* hDoc,
-      const CFX_WideString& wsLink) = 0;
+      const WideString& wsLink) = 0;
 };
 
 class IXFA_WidgetIterator {
diff --git a/xfa/fxfa/parser/cscript_datawindow.cpp b/xfa/fxfa/parser/cscript_datawindow.cpp
index e2d9f04..c5b09d1 100644
--- a/xfa/fxfa/parser/cscript_datawindow.cpp
+++ b/xfa/fxfa/parser/cscript_datawindow.cpp
@@ -15,7 +15,7 @@
     : CXFA_Object(pDocument,
                   XFA_ObjectType::Object,
                   XFA_Element::DataWindow,
-                  CFX_WideStringC(L"dataWindow")) {}
+                  WideStringView(L"dataWindow")) {}
 
 CScript_DataWindow::~CScript_DataWindow() {}
 
diff --git a/xfa/fxfa/parser/cscript_eventpseudomodel.cpp b/xfa/fxfa/parser/cscript_eventpseudomodel.cpp
index 45f1171..ecf2a98 100644
--- a/xfa/fxfa/parser/cscript_eventpseudomodel.cpp
+++ b/xfa/fxfa/parser/cscript_eventpseudomodel.cpp
@@ -17,14 +17,12 @@
 
 namespace {
 
-void StringProperty(CFXJSE_Value* pValue,
-                    CFX_WideString& wsValue,
-                    bool bSetting) {
+void StringProperty(CFXJSE_Value* pValue, WideString& wsValue, bool bSetting) {
   if (bSetting) {
     wsValue = pValue->ToWideString();
     return;
   }
-  pValue->SetString(wsValue.UTF8Encode().AsStringC());
+  pValue->SetString(wsValue.UTF8Encode().AsStringView());
 }
 
 void InterProperty(CFXJSE_Value* pValue, int32_t& iValue, bool bSetting) {
@@ -49,7 +47,7 @@
     : CXFA_Object(pDocument,
                   XFA_ObjectType::Object,
                   XFA_Element::EventPseudoModel,
-                  CFX_WideStringC(L"eventPseudoModel")) {}
+                  WideStringView(L"eventPseudoModel")) {}
 
 CScript_EventPseudoModel::~CScript_EventPseudoModel() {}
 
diff --git a/xfa/fxfa/parser/cscript_hostpseudomodel.cpp b/xfa/fxfa/parser/cscript_hostpseudomodel.cpp
index 2db6677..f1eaff8 100644
--- a/xfa/fxfa/parser/cscript_hostpseudomodel.cpp
+++ b/xfa/fxfa/parser/cscript_hostpseudomodel.cpp
@@ -30,7 +30,7 @@
     : CXFA_Object(pDocument,
                   XFA_ObjectType::Object,
                   XFA_Element::HostPseudoModel,
-                  CFX_WideStringC(L"hostPseudoModel")) {}
+                  WideStringView(L"hostPseudoModel")) {}
 
 CScript_HostPseudoModel::~CScript_HostPseudoModel() {}
 
@@ -89,7 +89,7 @@
     return;
   }
   pValue->SetString(
-      pNotify->GetAppProvider()->GetLanguage().UTF8Encode().AsStringC());
+      pNotify->GetAppProvider()->GetLanguage().UTF8Encode().AsStringView());
 }
 
 void CScript_HostPseudoModel::NumPages(CFXJSE_Value* pValue,
@@ -118,7 +118,7 @@
     return;
   }
   pValue->SetString(
-      pNotify->GetAppProvider()->GetPlatform().UTF8Encode().AsStringC());
+      pNotify->GetAppProvider()->GetPlatform().UTF8Encode().AsStringView());
 }
 
 void CScript_HostPseudoModel::Title(CFXJSE_Value* pValue,
@@ -136,9 +136,9 @@
     pNotify->GetDocEnvironment()->SetTitle(hDoc, pValue->ToWideString());
     return;
   }
-  CFX_WideString wsTitle;
+  WideString wsTitle;
   pNotify->GetDocEnvironment()->GetTitle(hDoc, wsTitle);
-  pValue->SetString(wsTitle.UTF8Encode().AsStringC());
+  pValue->SetString(wsTitle.UTF8Encode().AsStringView());
 }
 
 void CScript_HostPseudoModel::ValidationsEnabled(CFXJSE_Value* pValue,
@@ -200,7 +200,7 @@
     return;
   }
   pValue->SetString(
-      pNotify->GetAppProvider()->GetAppName().UTF8Encode().AsStringC());
+      pNotify->GetAppProvider()->GetAppName().UTF8Encode().AsStringView());
 }
 
 void CScript_HostPseudoModel::GotoURL(CFXJSE_Arguments* pArguments) {
@@ -217,10 +217,10 @@
     return;
   }
   CXFA_FFDoc* hDoc = pNotify->GetHDOC();
-  CFX_WideString wsURL;
+  WideString wsURL;
   if (iLength >= 1) {
-    CFX_ByteString bsURL = pArguments->GetUTF8String(0);
-    wsURL = CFX_WideString::FromUTF8(bsURL.AsStringC());
+    ByteString bsURL = pArguments->GetUTF8String(0);
+    wsURL = WideString::FromUTF8(bsURL.AsStringView());
   }
   pNotify->GetDocEnvironment()->GotoURL(hDoc, wsURL);
 }
@@ -256,7 +256,7 @@
                         XFA_RESOLVENODE_Siblings;
       XFA_RESOLVENODE_RS resoveNodeRS;
       int32_t iRet = pScriptContext->ResolveObjects(
-          pObject, pValue->ToWideString().AsStringC(), resoveNodeRS, dwFlag);
+          pObject, pValue->ToWideString().AsStringView(), resoveNodeRS, dwFlag);
       if (iRet < 1 || !resoveNodeRS.objects.front()->IsNode())
         return;
 
@@ -285,39 +285,39 @@
   if (!pNotify) {
     return;
   }
-  CFX_WideString wsQuestion;
-  CFX_WideString wsTitle;
-  CFX_WideString wsDefaultAnswer;
+  WideString wsQuestion;
+  WideString wsTitle;
+  WideString wsDefaultAnswer;
   bool bMark = false;
   if (iLength >= 1) {
-    CFX_ByteString bsQuestion = pArguments->GetUTF8String(0);
-    wsQuestion = CFX_WideString::FromUTF8(bsQuestion.AsStringC());
+    ByteString bsQuestion = pArguments->GetUTF8String(0);
+    wsQuestion = WideString::FromUTF8(bsQuestion.AsStringView());
   }
   if (iLength >= 2) {
-    CFX_ByteString bsTitle = pArguments->GetUTF8String(1);
-    wsTitle = CFX_WideString::FromUTF8(bsTitle.AsStringC());
+    ByteString bsTitle = pArguments->GetUTF8String(1);
+    wsTitle = WideString::FromUTF8(bsTitle.AsStringView());
   }
   if (iLength >= 3) {
-    CFX_ByteString bsDefaultAnswer = pArguments->GetUTF8String(2);
-    wsDefaultAnswer = CFX_WideString::FromUTF8(bsDefaultAnswer.AsStringC());
+    ByteString bsDefaultAnswer = pArguments->GetUTF8String(2);
+    wsDefaultAnswer = WideString::FromUTF8(bsDefaultAnswer.AsStringView());
   }
   if (iLength >= 4) {
     bMark = pArguments->GetInt32(3) == 0 ? false : true;
   }
-  CFX_WideString wsAnswer = pNotify->GetAppProvider()->Response(
+  WideString wsAnswer = pNotify->GetAppProvider()->Response(
       wsQuestion, wsTitle, wsDefaultAnswer, bMark);
   CFXJSE_Value* pValue = pArguments->GetReturnValue();
   if (pValue)
-    pValue->SetString(wsAnswer.UTF8Encode().AsStringC());
+    pValue->SetString(wsAnswer.UTF8Encode().AsStringView());
 }
 
 void CScript_HostPseudoModel::DocumentInBatch(CFXJSE_Arguments* pArguments) {
   if (CFXJSE_Value* pValue = pArguments->GetReturnValue())
     pValue->SetInteger(0);
 }
-static int32_t XFA_FilterName(const CFX_WideStringC& wsExpression,
+static int32_t XFA_FilterName(const WideStringView& wsExpression,
                               int32_t nStart,
-                              CFX_WideString& wsFilter) {
+                              WideString& wsFilter) {
   ASSERT(nStart > -1);
   int32_t iLength = wsExpression.GetLength();
   if (nStart >= iLength) {
@@ -349,21 +349,21 @@
   if (!pNotify) {
     return;
   }
-  CFX_WideString wsExpression;
+  WideString wsExpression;
   if (iLength >= 1) {
-    CFX_ByteString bsExpression = pArguments->GetUTF8String(0);
-    wsExpression = CFX_WideString::FromUTF8(bsExpression.AsStringC());
+    ByteString bsExpression = pArguments->GetUTF8String(0);
+    wsExpression = WideString::FromUTF8(bsExpression.AsStringView());
   }
   if (wsExpression.IsEmpty()) {
     pNotify->ResetData();
     return;
   }
   int32_t iStart = 0;
-  CFX_WideString wsName;
+  WideString wsName;
   CXFA_Node* pNode = nullptr;
   int32_t iExpLength = wsExpression.GetLength();
   while (iStart < iExpLength) {
-    iStart = XFA_FilterName(wsExpression.AsStringC(), iStart, wsName);
+    iStart = XFA_FilterName(wsExpression.AsStringView(), iStart, wsName);
     CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext();
     if (!pScriptContext)
       return;
@@ -375,8 +375,8 @@
     uint32_t dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Parent |
                       XFA_RESOLVENODE_Siblings;
     XFA_RESOLVENODE_RS resoveNodeRS;
-    int32_t iRet = pScriptContext->ResolveObjects(pObject, wsName.AsStringC(),
-                                                  resoveNodeRS, dwFlag);
+    int32_t iRet = pScriptContext->ResolveObjects(
+        pObject, wsName.AsStringView(), resoveNodeRS, dwFlag);
     if (iRet < 1 || !resoveNodeRS.objects.front()->IsNode()) {
       continue;
     }
@@ -437,7 +437,7 @@
                         XFA_RESOLVENODE_Siblings;
       XFA_RESOLVENODE_RS resoveNodeRS;
       int32_t iRet = pScriptContext->ResolveObjects(
-          pObject, pValue->ToWideString().AsStringC(), resoveNodeRS, dwFlag);
+          pObject, pValue->ToWideString().AsStringView(), resoveNodeRS, dwFlag);
       if (iRet < 1 || !resoveNodeRS.objects.front()->IsNode())
         return;
 
@@ -472,8 +472,8 @@
   if (!pNotify) {
     return;
   }
-  CFX_WideString wsMessage;
-  CFX_WideString bsTitle;
+  WideString wsMessage;
+  WideString bsTitle;
   uint32_t dwMessageType = XFA_MBICON_Error;
   uint32_t dwButtonType = XFA_MB_OK;
   if (iLength >= 1) {
@@ -506,7 +506,7 @@
 }
 bool CScript_HostPseudoModel::ValidateArgsForMsg(CFXJSE_Arguments* pArguments,
                                                  int32_t iArgIndex,
-                                                 CFX_WideString& wsValue) {
+                                                 WideString& wsValue) {
   if (!pArguments || iArgIndex < 0) {
     return false;
   }
@@ -621,11 +621,11 @@
     return;
   }
   CXFA_FFDoc* hDoc = pNotify->GetHDOC();
-  CFX_WideString wsFilePath;
+  WideString wsFilePath;
   bool bXDP = true;
   if (iLength >= 1) {
-    CFX_ByteString bsFilePath = pArguments->GetUTF8String(0);
-    wsFilePath = CFX_WideString::FromUTF8(bsFilePath.AsStringC());
+    ByteString bsFilePath = pArguments->GetUTF8String(0);
+    wsFilePath = WideString::FromUTF8(bsFilePath.AsStringView());
   }
   if (iLength >= 2) {
     bXDP = pArguments->GetInt32(1) == 0 ? false : true;
@@ -673,10 +673,10 @@
   if (!pNotify) {
     return;
   }
-  CFX_WideString wsDataTime = pNotify->GetCurrentDateTime();
+  WideString wsDataTime = pNotify->GetCurrentDateTime();
   CFXJSE_Value* pValue = pArguments->GetReturnValue();
   if (pValue)
-    pValue->SetString(wsDataTime.UTF8Encode().AsStringC());
+    pValue->SetString(wsDataTime.UTF8Encode().AsStringView());
 }
 
 void CScript_HostPseudoModel::ThrowSetLanguageException() const {
diff --git a/xfa/fxfa/parser/cscript_hostpseudomodel.h b/xfa/fxfa/parser/cscript_hostpseudomodel.h
index 821f88d..4ec92dd 100644
--- a/xfa/fxfa/parser/cscript_hostpseudomodel.h
+++ b/xfa/fxfa/parser/cscript_hostpseudomodel.h
@@ -54,7 +54,7 @@
  private:
   bool ValidateArgsForMsg(CFXJSE_Arguments* pArguments,
                           int32_t iArgIndex,
-                          CFX_WideString& wsValue);
+                          WideString& wsValue);
   void ThrowSetLanguageException() const;
   void ThrowSetNumPagesException() const;
   void ThrowSetPlatformException() const;
diff --git a/xfa/fxfa/parser/cscript_layoutpseudomodel.cpp b/xfa/fxfa/parser/cscript_layoutpseudomodel.cpp
index 46db2ca..e35a3b8 100644
--- a/xfa/fxfa/parser/cscript_layoutpseudomodel.cpp
+++ b/xfa/fxfa/parser/cscript_layoutpseudomodel.cpp
@@ -28,7 +28,7 @@
     : CXFA_Object(pDocument,
                   XFA_ObjectType::Object,
                   XFA_Element::LayoutPseudoModel,
-                  CFX_WideStringC(L"layoutPseudoModel")) {}
+                  WideStringView(L"layoutPseudoModel")) {}
 
 CScript_LayoutPseudoModel::~CScript_LayoutPseudoModel() {}
 
@@ -73,11 +73,11 @@
   if (!pNode)
     return;
 
-  CFX_WideString wsUnit(L"pt");
+  WideString wsUnit(L"pt");
   if (iLength >= 2) {
-    CFX_ByteString bsUnit = pArguments->GetUTF8String(1);
+    ByteString bsUnit = pArguments->GetUTF8String(1);
     if (!bsUnit.IsEmpty())
-      wsUnit = CFX_WideString::FromUTF8(bsUnit.AsStringC());
+      wsUnit = WideString::FromUTF8(bsUnit.AsStringView());
   }
 
   int32_t iIndex = iLength >= 3 ? pArguments->GetInt32(2) : 0;
@@ -116,8 +116,8 @@
       measure.Set(rtRect.top, XFA_UNIT_Pt);
       break;
   }
-  float fValue =
-      measure.ToUnit(CXFA_Measurement::GetUnitFromString(wsUnit.AsStringC()));
+  float fValue = measure.ToUnit(
+      CXFA_Measurement::GetUnitFromString(wsUnit.AsStringView()));
   fValue = FXSYS_round(fValue * 1000) / 1000.0f;
   pValue->SetFloat(fValue);
 }
@@ -203,7 +203,7 @@
 std::vector<CXFA_Node*> CScript_LayoutPseudoModel::GetObjArray(
     CXFA_LayoutProcessor* pDocLayout,
     int32_t iPageNo,
-    const CFX_WideString& wsType,
+    const WideString& wsType,
     bool bOnPageArea) {
   CXFA_ContainerLayoutItem* pLayoutPage = pDocLayout->GetPage(iPageNo);
   if (!pLayoutPage)
@@ -338,14 +338,14 @@
     return;
   }
   int32_t iIndex = 0;
-  CFX_WideString wsType;
+  WideString wsType;
   bool bOnPageArea = false;
   if (iLength >= 1)
     iIndex = pArguments->GetInt32(0);
 
   if (iLength >= 2) {
-    CFX_ByteString bsType = pArguments->GetUTF8String(1);
-    wsType = CFX_WideString::FromUTF8(bsType.AsStringC());
+    ByteString bsType = pArguments->GetUTF8String(1);
+    wsType = WideString::FromUTF8(bsType.AsStringView());
   }
   if (iLength >= 3)
     bOnPageArea = pArguments->GetInt32(2) == 0 ? false : true;
diff --git a/xfa/fxfa/parser/cscript_layoutpseudomodel.h b/xfa/fxfa/parser/cscript_layoutpseudomodel.h
index 6f98997..539fcce 100644
--- a/xfa/fxfa/parser/cscript_layoutpseudomodel.h
+++ b/xfa/fxfa/parser/cscript_layoutpseudomodel.h
@@ -53,7 +53,7 @@
  private:
   std::vector<CXFA_Node*> GetObjArray(CXFA_LayoutProcessor* pDocLayout,
                                       int32_t iPageNo,
-                                      const CFX_WideString& wsType,
+                                      const WideString& wsType,
                                       bool bOnPageArea);
 
   void PageInternals(CFXJSE_Arguments* pArguments, bool bAbsPage);
diff --git a/xfa/fxfa/parser/cscript_logpseudomodel.cpp b/xfa/fxfa/parser/cscript_logpseudomodel.cpp
index d9563ac..f0747f4 100644
--- a/xfa/fxfa/parser/cscript_logpseudomodel.cpp
+++ b/xfa/fxfa/parser/cscript_logpseudomodel.cpp
@@ -15,7 +15,7 @@
     : CXFA_Object(pDocument,
                   XFA_ObjectType::Object,
                   XFA_Element::LogPseudoModel,
-                  CFX_WideStringC(L"logPseudoModel")) {}
+                  WideStringView(L"logPseudoModel")) {}
 
 CScript_LogPseudoModel::~CScript_LogPseudoModel() {}
 
diff --git a/xfa/fxfa/parser/cscript_signaturepseudomodel.cpp b/xfa/fxfa/parser/cscript_signaturepseudomodel.cpp
index c746a4e..a1136b1 100644
--- a/xfa/fxfa/parser/cscript_signaturepseudomodel.cpp
+++ b/xfa/fxfa/parser/cscript_signaturepseudomodel.cpp
@@ -18,7 +18,7 @@
     : CXFA_Object(pDocument,
                   XFA_ObjectType::Object,
                   XFA_Element::SignaturePseudoModel,
-                  CFX_WideStringC(L"signaturePseudoModel")) {}
+                  WideStringView(L"signaturePseudoModel")) {}
 
 CScript_SignaturePseudoModel::~CScript_SignaturePseudoModel() {}
 
diff --git a/xfa/fxfa/parser/cxfa_bind.cpp b/xfa/fxfa/parser/cxfa_bind.cpp
index aac2c18..72373ae 100644
--- a/xfa/fxfa/parser/cxfa_bind.cpp
+++ b/xfa/fxfa/parser/cxfa_bind.cpp
@@ -10,7 +10,7 @@
 
 CXFA_Bind::CXFA_Bind(CXFA_Node* pNode) : CXFA_Data(pNode) {}
 
-void CXFA_Bind::GetPicture(CFX_WideString& wsPicture) {
+void CXFA_Bind::GetPicture(WideString& wsPicture) {
   if (CXFA_Node* pPicture = m_pNode->GetChild(0, XFA_Element::Picture))
     pPicture->TryContent(wsPicture);
 }
diff --git a/xfa/fxfa/parser/cxfa_bind.h b/xfa/fxfa/parser/cxfa_bind.h
index 40a2a1a..b24e6f8 100644
--- a/xfa/fxfa/parser/cxfa_bind.h
+++ b/xfa/fxfa/parser/cxfa_bind.h
@@ -16,7 +16,7 @@
  public:
   explicit CXFA_Bind(CXFA_Node* pNode);
 
-  void GetPicture(CFX_WideString& wsPicture);
+  void GetPicture(WideString& wsPicture);
 };
 
 #endif  // XFA_FXFA_PARSER_CXFA_BIND_H_
diff --git a/xfa/fxfa/parser/cxfa_binditems.cpp b/xfa/fxfa/parser/cxfa_binditems.cpp
index c3c5cab..c6dbdb3 100644
--- a/xfa/fxfa/parser/cxfa_binditems.cpp
+++ b/xfa/fxfa/parser/cxfa_binditems.cpp
@@ -10,18 +10,18 @@
 
 CXFA_BindItems::CXFA_BindItems(CXFA_Node* pNode) : CXFA_Data(pNode) {}
 
-void CXFA_BindItems::GetLabelRef(CFX_WideStringC& wsLabelRef) {
+void CXFA_BindItems::GetLabelRef(WideStringView& wsLabelRef) {
   m_pNode->TryCData(XFA_ATTRIBUTE_LabelRef, wsLabelRef);
 }
 
-void CXFA_BindItems::GetValueRef(CFX_WideStringC& wsValueRef) {
+void CXFA_BindItems::GetValueRef(WideStringView& wsValueRef) {
   m_pNode->TryCData(XFA_ATTRIBUTE_ValueRef, wsValueRef);
 }
 
-void CXFA_BindItems::GetRef(CFX_WideStringC& wsRef) {
+void CXFA_BindItems::GetRef(WideStringView& wsRef) {
   m_pNode->TryCData(XFA_ATTRIBUTE_Ref, wsRef);
 }
 
-bool CXFA_BindItems::SetConnection(const CFX_WideString& wsConnection) {
+bool CXFA_BindItems::SetConnection(const WideString& wsConnection) {
   return m_pNode->SetCData(XFA_ATTRIBUTE_Connection, wsConnection);
 }
diff --git a/xfa/fxfa/parser/cxfa_binditems.h b/xfa/fxfa/parser/cxfa_binditems.h
index 191941a..58e50da 100644
--- a/xfa/fxfa/parser/cxfa_binditems.h
+++ b/xfa/fxfa/parser/cxfa_binditems.h
@@ -16,10 +16,10 @@
  public:
   explicit CXFA_BindItems(CXFA_Node* pNode);
 
-  void GetLabelRef(CFX_WideStringC& wsLabelRef);
-  void GetValueRef(CFX_WideStringC& wsValueRef);
-  void GetRef(CFX_WideStringC& wsRef);
-  bool SetConnection(const CFX_WideString& wsConnection);
+  void GetLabelRef(WideStringView& wsLabelRef);
+  void GetValueRef(WideStringView& wsValueRef);
+  void GetRef(WideStringView& wsRef);
+  bool SetConnection(const WideString& wsConnection);
 };
 
 #endif  // XFA_FXFA_PARSER_CXFA_BINDITEMS_H_
diff --git a/xfa/fxfa/parser/cxfa_calculate.cpp b/xfa/fxfa/parser/cxfa_calculate.cpp
index bc89d81..3b0f038 100644
--- a/xfa/fxfa/parser/cxfa_calculate.cpp
+++ b/xfa/fxfa/parser/cxfa_calculate.cpp
@@ -21,7 +21,7 @@
   return CXFA_Script(m_pNode->GetChild(0, XFA_Element::Script));
 }
 
-void CXFA_Calculate::GetMessageText(CFX_WideString& wsMessage) {
+void CXFA_Calculate::GetMessageText(WideString& wsMessage) {
   CXFA_Node* pNode = m_pNode->GetChild(0, XFA_Element::Message);
   if (!pNode)
     return;
diff --git a/xfa/fxfa/parser/cxfa_calculate.h b/xfa/fxfa/parser/cxfa_calculate.h
index 1012224..b3a6ef2 100644
--- a/xfa/fxfa/parser/cxfa_calculate.h
+++ b/xfa/fxfa/parser/cxfa_calculate.h
@@ -19,7 +19,7 @@
 
   int32_t GetOverride();
   CXFA_Script GetScript();
-  void GetMessageText(CFX_WideString& wsMessage);
+  void GetMessageText(WideString& wsMessage);
 };
 
 #endif  // XFA_FXFA_PARSER_CXFA_CALCULATE_H_
diff --git a/xfa/fxfa/parser/cxfa_data.cpp b/xfa/fxfa/parser/cxfa_data.cpp
index 7bf18a5..5a82ce3 100644
--- a/xfa/fxfa/parser/cxfa_data.cpp
+++ b/xfa/fxfa/parser/cxfa_data.cpp
@@ -11,7 +11,7 @@
 #include "xfa/fxfa/parser/cxfa_node.h"
 
 // Static.
-FX_ARGB CXFA_Data::ToColor(const CFX_WideStringC& wsValue) {
+FX_ARGB CXFA_Data::ToColor(const WideStringView& wsValue) {
   uint8_t r = 0, g = 0, b = 0;
   if (wsValue.GetLength() == 0)
     return 0xff000000;
diff --git a/xfa/fxfa/parser/cxfa_data.h b/xfa/fxfa/parser/cxfa_data.h
index 90b6890..4a073ab 100644
--- a/xfa/fxfa/parser/cxfa_data.h
+++ b/xfa/fxfa/parser/cxfa_data.h
@@ -15,7 +15,7 @@
 
 class CXFA_Data {
  public:
-  static FX_ARGB ToColor(const CFX_WideStringC& wsValue);
+  static FX_ARGB ToColor(const WideStringView& wsValue);
 
   explicit CXFA_Data(CXFA_Node* pNode) : m_pNode(pNode) {}
 
diff --git a/xfa/fxfa/parser/cxfa_dataexporter.cpp b/xfa/fxfa/parser/cxfa_dataexporter.cpp
index 0af9bd4..edc7b23 100644
--- a/xfa/fxfa/parser/cxfa_dataexporter.cpp
+++ b/xfa/fxfa/parser/cxfa_dataexporter.cpp
@@ -22,7 +22,7 @@
 
 namespace {
 
-CFX_WideString ExportEncodeAttribute(const CFX_WideString& str) {
+WideString ExportEncodeAttribute(const WideString& str) {
   CFX_WideTextBuf textBuf;
   int32_t iLen = str.GetLength();
   for (int32_t i = 0; i < iLen; i++) {
@@ -54,7 +54,7 @@
          (ch >= 0x20 && ch <= 0xD7FF) || (ch >= 0xE000 && ch <= 0xFFFD);
 }
 
-CFX_WideString ExportEncodeContent(const CFX_WideStringC& str) {
+WideString ExportEncodeContent(const WideStringView& str) {
   CFX_WideTextBuf textBuf;
   int32_t iLen = str.GetLength();
   for (int32_t i = 0; i < iLen; i++) {
@@ -87,10 +87,10 @@
 
 void SaveAttribute(CXFA_Node* pNode,
                    XFA_ATTRIBUTE eName,
-                   const CFX_WideStringC& wsName,
+                   const WideStringView& wsName,
                    bool bProto,
-                   CFX_WideString& wsOutput) {
-  CFX_WideString wsValue;
+                   WideString& wsOutput) {
+  WideString wsValue;
   if ((!bProto && !pNode->HasAttribute((XFA_ATTRIBUTE)eName, bProto)) ||
       !pNode->GetAttribute((XFA_ATTRIBUTE)eName, wsValue, false)) {
     return;
@@ -121,7 +121,7 @@
 }
 
 bool ContentNodeNeedtoExport(CXFA_Node* pContentNode) {
-  CFX_WideString wsContent;
+  WideString wsContent;
   if (!pContentNode->TryContent(wsContent, false, false))
     return false;
 
@@ -144,12 +144,12 @@
 }
 
 void RecognizeXFAVersionNumber(CXFA_Node* pTemplateRoot,
-                               CFX_WideString& wsVersionNumber) {
+                               WideString& wsVersionNumber) {
   wsVersionNumber.clear();
   if (!pTemplateRoot)
     return;
 
-  CFX_WideString wsTemplateNS;
+  WideString wsTemplateNS;
   if (!pTemplateRoot->TryNamespace(wsTemplateNS))
     return;
 
@@ -164,7 +164,7 @@
 void RegenerateFormFile_Changed(CXFA_Node* pNode,
                                 CFX_WideTextBuf& buf,
                                 bool bSaveXML) {
-  CFX_WideString wsAttrs;
+  WideString wsAttrs;
   int32_t iAttrs = 0;
   const uint8_t* pAttrs =
       XFA_GetElementAttributes(pNode->GetElementType(), iAttrs);
@@ -175,12 +175,12 @@
         (AttributeSaveInDataModel(pNode, pAttr->eName) && !bSaveXML)) {
       continue;
     }
-    CFX_WideString wsAttr;
+    WideString wsAttr;
     SaveAttribute(pNode, pAttr->eName, pAttr->pName, bSaveXML, wsAttr);
     wsAttrs += wsAttr;
   }
 
-  CFX_WideString wsChildren;
+  WideString wsChildren;
   switch (pNode->GetObjectType()) {
     case XFA_ObjectType::ContentNode: {
       if (!bSaveXML && !ContentNodeNeedtoExport(pNode))
@@ -196,7 +196,7 @@
       if (!pRawValueNode)
         break;
 
-      CFX_WideString wsContentType;
+      WideString wsContentType;
       pNode->GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType, false);
       if (pRawValueNode->GetElementType() == XFA_Element::SharpxHTML &&
           wsContentType == L"text/html") {
@@ -215,16 +215,16 @@
 
         pTempStream->SetCodePage(FX_CODEPAGE_UTF8);
         pRichTextXML->SaveXMLNode(pTempStream);
-        wsChildren += CFX_WideString::FromUTF8(
-            CFX_ByteStringC(pMemStream->GetBuffer(), pMemStream->GetSize()));
+        wsChildren += WideString::FromUTF8(
+            ByteStringView(pMemStream->GetBuffer(), pMemStream->GetSize()));
       } else if (pRawValueNode->GetElementType() == XFA_Element::Sharpxml &&
                  wsContentType == L"text/xml") {
-        CFX_WideString wsRawValue;
+        WideString wsRawValue;
         pRawValueNode->GetAttribute(XFA_ATTRIBUTE_Value, wsRawValue, false);
         if (wsRawValue.IsEmpty())
           break;
 
-        std::vector<CFX_WideString> wsSelTextArray;
+        std::vector<WideString> wsSelTextArray;
         FX_STRSIZE iStart = 0;
         auto iEnd = wsRawValue.Find(L'\n', iStart);
         iEnd = !iEnd.has_value() ? wsRawValue.GetLength() : iEnd;
@@ -241,7 +241,7 @@
         CXFA_Node* pGrandparentNode =
             pParentNode->GetNodeItem(XFA_NODEITEM_Parent);
         ASSERT(pGrandparentNode);
-        CFX_WideString bodyTagName;
+        WideString bodyTagName;
         bodyTagName = pGrandparentNode->GetCData(XFA_ATTRIBUTE_Name);
         if (bodyTagName.IsEmpty())
           bodyTagName = L"ListBox1";
@@ -252,16 +252,16 @@
         for (int32_t i = 0; i < pdfium::CollectionSize<int32_t>(wsSelTextArray);
              i++) {
           buf << L"<value\n>";
-          buf << ExportEncodeContent(wsSelTextArray[i].AsStringC());
+          buf << ExportEncodeContent(wsSelTextArray[i].AsStringView());
           buf << L"</value\n>";
         }
         buf << L"</";
         buf << bodyTagName;
         buf << L"\n>";
-        wsChildren += buf.AsStringC();
+        wsChildren += buf.AsStringView();
         buf.Clear();
       } else {
-        CFX_WideStringC wsValue = pRawValueNode->GetCData(XFA_ATTRIBUTE_Value);
+        WideStringView wsValue = pRawValueNode->GetCData(XFA_ATTRIBUTE_Value);
         wsChildren += ExportEncodeContent(wsValue);
       }
       break;
@@ -269,7 +269,7 @@
     case XFA_ObjectType::TextNode:
     case XFA_ObjectType::NodeC:
     case XFA_ObjectType::NodeV: {
-      CFX_WideStringC wsValue = pNode->GetCData(XFA_ATTRIBUTE_Value);
+      WideStringView wsValue = pNode->GetCData(XFA_ATTRIBUTE_Value);
       wsChildren += ExportEncodeContent(wsValue);
       break;
     }
@@ -286,7 +286,7 @@
       CXFA_Node* pChildNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild);
       while (pChildNode) {
         RegenerateFormFile_Changed(pChildNode, newBuf, bSaveXML);
-        wsChildren += newBuf.AsStringC();
+        wsChildren += newBuf.AsStringView();
         newBuf.Clear();
         pChildNode = pChildNode->GetNodeItem(XFA_NODEITEM_NextSibling);
       }
@@ -297,7 +297,7 @@
         CXFA_Node* pChild = pNode->GetNodeItem(XFA_NODEITEM_FirstChild);
         while (pChild) {
           RegenerateFormFile_Changed(pChild, newBuf, bSaveXML);
-          wsChildren += newBuf.AsStringC();
+          wsChildren += newBuf.AsStringView();
           newBuf.Clear();
           pChild = pChild->GetNodeItem(XFA_NODEITEM_NextSibling);
         }
@@ -307,8 +307,8 @@
 
   if (!wsChildren.IsEmpty() || !wsAttrs.IsEmpty() ||
       pNode->HasAttribute(XFA_ATTRIBUTE_Name)) {
-    CFX_WideStringC wsElement = pNode->GetClassName();
-    CFX_WideString wsName;
+    WideStringView wsElement = pNode->GetClassName();
+    WideString wsName;
     SaveAttribute(pNode, XFA_ATTRIBUTE_Name, L"name", true, wsName);
     buf << L"<";
     buf << wsElement;
@@ -337,18 +337,18 @@
     RegenerateFormFile_Changed(pNode, buf, bSaveXML);
     FX_STRSIZE nLen = buf.GetLength();
     if (nLen > 0)
-      pStream->WriteString(buf.AsStringC());
+      pStream->WriteString(buf.AsStringView());
     return;
   }
 
-  CFX_WideStringC wsElement(pNode->GetClassName());
+  WideStringView wsElement(pNode->GetClassName());
   pStream->WriteString(L"<");
   pStream->WriteString(wsElement);
 
-  CFX_WideString wsOutput;
+  WideString wsOutput;
   SaveAttribute(pNode, XFA_ATTRIBUTE_Name, L"name", true, wsOutput);
 
-  CFX_WideString wsAttrs;
+  WideString wsAttrs;
   int32_t iAttrs = 0;
   const uint8_t* pAttrs =
       XFA_GetElementAttributes(pNode->GetElementType(), iAttrs);
@@ -358,13 +358,13 @@
     if (pAttr->eName == XFA_ATTRIBUTE_Name)
       continue;
 
-    CFX_WideString wsAttr;
+    WideString wsAttr;
     SaveAttribute(pNode, pAttr->eName, pAttr->pName, false, wsAttr);
     wsOutput += wsAttr;
   }
 
   if (!wsOutput.IsEmpty())
-    pStream->WriteString(wsOutput.AsStringC());
+    pStream->WriteString(wsOutput.AsStringView());
 
   CXFA_Node* pChildNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild);
   if (pChildNode) {
@@ -391,17 +391,17 @@
   if (pNode->IsModelNode()) {
     pStream->WriteString(L"<form");
     if (pChecksum) {
-      CFX_WideString wsChecksum = CFX_WideString::FromUTF8(pChecksum);
+      WideString wsChecksum = WideString::FromUTF8(pChecksum);
       pStream->WriteString(L" checksum=\"");
-      pStream->WriteString(wsChecksum.AsStringC());
+      pStream->WriteString(wsChecksum.AsStringView());
       pStream->WriteString(L"\"");
     }
     pStream->WriteString(L" xmlns=\"");
 
     const wchar_t* pURI = XFA_GetPacketByIndex(XFA_PACKET_Form)->pURI;
-    pStream->WriteString(CFX_WideStringC(pURI, FXSYS_wcslen(pURI)));
+    pStream->WriteString(WideStringView(pURI, FXSYS_wcslen(pURI)));
 
-    CFX_WideString wsVersionNumber;
+    WideString wsVersionNumber;
     RecognizeXFAVersionNumber(
         ToNode(pNode->GetDocument()->GetXFAObject(XFA_HASHCODE_Template)),
         wsVersionNumber);
@@ -409,7 +409,7 @@
       wsVersionNumber = L"2.8";
 
     wsVersionNumber += L"/\"\n>";
-    pStream->WriteString(wsVersionNumber.AsStringC());
+    pStream->WriteString(wsVersionNumber.AsStringView());
 
     CXFA_Node* pChildNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild);
     while (pChildNode) {
diff --git a/xfa/fxfa/parser/cxfa_document.cpp b/xfa/fxfa/parser/cxfa_document.cpp
index 85d2758..3a46e26 100644
--- a/xfa/fxfa/parser/cxfa_document.cpp
+++ b/xfa/fxfa/parser/cxfa_document.cpp
@@ -151,11 +151,11 @@
         if (pDatasetsChild->GetNameHash() != XFA_HASHCODE_Data)
           continue;
 
-        CFX_WideString wsNamespaceURI;
+        WideString wsNamespaceURI;
         if (!pDatasetsChild->TryNamespace(wsNamespaceURI))
           continue;
 
-        CFX_WideString wsDatasetsURI;
+        WideString wsDatasetsURI;
         if (!pDatasetsNode->TryNamespace(wsDatasetsURI))
           continue;
         if (wsNamespaceURI == wsDatasetsURI)
@@ -255,7 +255,7 @@
   if (!pConfig)
     return false;
 
-  CFX_WideString wsInteractive;
+  WideString wsInteractive;
   CXFA_Node* pPresent = pConfig->GetFirstChildByClass(XFA_Element::Present);
   if (!pPresent)
     return false;
@@ -297,11 +297,11 @@
 }
 
 XFA_VERSION CXFA_Document::RecognizeXFAVersionNumber(
-    const CFX_WideString& wsTemplateNS) {
-  CFX_WideStringC wsTemplateURIPrefix =
+    const WideString& wsTemplateNS) {
+  WideStringView wsTemplateURIPrefix =
       XFA_GetPacketByIndex(XFA_PACKET_Template)->pURI;
   FX_STRSIZE nPrefixLength = wsTemplateURIPrefix.GetLength();
-  if (CFX_WideStringC(wsTemplateNS.c_str(), wsTemplateNS.GetLength()) !=
+  if (WideStringView(wsTemplateNS.c_str(), wsTemplateNS.GetLength()) !=
       wsTemplateURIPrefix) {
     return XFA_VERSION_UNKNOWN;
   }
@@ -325,14 +325,14 @@
 }
 
 CXFA_Node* CXFA_Document::GetNodeByID(CXFA_Node* pRoot,
-                                      const CFX_WideStringC& wsID) {
+                                      const WideStringView& wsID) {
   if (!pRoot || wsID.IsEmpty())
     return nullptr;
 
   CXFA_NodeIterator sIterator(pRoot);
   for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode;
        pNode = sIterator.MoveToNext()) {
-    CFX_WideStringC wsIDVal;
+    WideStringView wsIDVal;
     if (pNode->TryCData(XFA_ATTRIBUTE_Id, wsIDVal) && !wsIDVal.IsEmpty()) {
       if (wsIDVal == wsID)
         return pNode;
@@ -351,11 +351,11 @@
   CXFA_NodeIterator sIterator(pTemplateRoot);
   for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode;
        pNode = sIterator.MoveToNext()) {
-    CFX_WideStringC wsIDVal;
+    WideStringView wsIDVal;
     if (pNode->TryCData(XFA_ATTRIBUTE_Id, wsIDVal) && !wsIDVal.IsEmpty()) {
       mIDMap[FX_HashCode_GetW(wsIDVal, false)] = pNode;
     }
-    CFX_WideStringC wsUseVal;
+    WideStringView wsUseVal;
     if (pNode->TryCData(XFA_ATTRIBUTE_Use, wsUseVal) && !wsUseVal.IsEmpty()) {
       sUseNodes.insert(pNode);
     } else if (pNode->TryCData(XFA_ATTRIBUTE_Usehref, wsUseVal) &&
@@ -365,33 +365,33 @@
   }
 
   for (CXFA_Node* pUseHrefNode : sUseNodes) {
-    CFX_WideString wsUseVal;
-    CFX_WideStringC wsURI, wsID, wsSOM;
+    WideString wsUseVal;
+    WideStringView wsURI, wsID, wsSOM;
     if (pUseHrefNode->TryCData(XFA_ATTRIBUTE_Usehref, wsUseVal) &&
         !wsUseVal.IsEmpty()) {
       auto uSharpPos = wsUseVal.Find('#');
       if (!uSharpPos.has_value()) {
-        wsURI = wsUseVal.AsStringC();
+        wsURI = wsUseVal.AsStringView();
       } else {
-        wsURI = CFX_WideStringC(wsUseVal.c_str(), uSharpPos.value());
+        wsURI = WideStringView(wsUseVal.c_str(), uSharpPos.value());
         FX_STRSIZE uLen = wsUseVal.GetLength();
         if (uLen >= uSharpPos.value() + 5 &&
-            CFX_WideStringC(wsUseVal.c_str() + uSharpPos.value(), 5) ==
+            WideStringView(wsUseVal.c_str() + uSharpPos.value(), 5) ==
                 L"#som(" &&
             wsUseVal[uLen - 1] == ')') {
-          wsSOM = CFX_WideStringC(wsUseVal.c_str() + uSharpPos.value() + 5,
-                                  uLen - 1 - uSharpPos.value() - 5);
+          wsSOM = WideStringView(wsUseVal.c_str() + uSharpPos.value() + 5,
+                                 uLen - 1 - uSharpPos.value() - 5);
         } else {
-          wsID = CFX_WideStringC(wsUseVal.c_str() + uSharpPos.value() + 1,
-                                 uLen - uSharpPos.value() - 1);
+          wsID = WideStringView(wsUseVal.c_str() + uSharpPos.value() + 1,
+                                uLen - uSharpPos.value() - 1);
         }
       }
     } else if (pUseHrefNode->TryCData(XFA_ATTRIBUTE_Use, wsUseVal) &&
                !wsUseVal.IsEmpty()) {
       if (wsUseVal[0] == '#')
-        wsID = CFX_WideStringC(wsUseVal.c_str() + 1, wsUseVal.GetLength() - 1);
+        wsID = WideStringView(wsUseVal.c_str() + 1, wsUseVal.GetLength() - 1);
       else
-        wsSOM = CFX_WideStringC(wsUseVal.c_str(), wsUseVal.GetLength());
+        wsSOM = WideStringView(wsUseVal.c_str(), wsUseVal.GetLength());
     }
 
     if (!wsURI.IsEmpty() && wsURI != L".")
diff --git a/xfa/fxfa/parser/cxfa_document.h b/xfa/fxfa/parser/cxfa_document.h
index 8491feb..69154b2 100644
--- a/xfa/fxfa/parser/cxfa_document.h
+++ b/xfa/fxfa/parser/cxfa_document.h
@@ -70,7 +70,7 @@
   CXFA_FFNotify* GetNotify() const;
   CXFA_LocaleMgr* GetLocalMgr();
   CXFA_Object* GetXFAObject(XFA_HashCode wsNodeNameHash);
-  CXFA_Node* GetNodeByID(CXFA_Node* pRoot, const CFX_WideStringC& wsID);
+  CXFA_Node* GetNodeByID(CXFA_Node* pRoot, const WideStringView& wsID);
   CXFA_Node* GetNotBindNode(const std::vector<CXFA_Object*>& arrayNodes);
   CXFA_LayoutProcessor* GetLayoutProcessor();
   CXFA_LayoutProcessor* GetDocLayout();
@@ -87,7 +87,7 @@
 
   bool IsInteractive();
   XFA_VERSION GetCurVersionMode() { return m_eCurVersionMode; }
-  XFA_VERSION RecognizeXFAVersionNumber(const CFX_WideString& wsTemplateNS);
+  XFA_VERSION RecognizeXFAVersionNumber(const WideString& wsTemplateNS);
 
   CXFA_Node* CreateNode(uint32_t dwPacket, XFA_Element eElement);
   CXFA_Node* CreateNode(const XFA_PACKETINFO* pPacket, XFA_Element eElement);
diff --git a/xfa/fxfa/parser/cxfa_event.cpp b/xfa/fxfa/parser/cxfa_event.cpp
index d753428..d541ea0 100644
--- a/xfa/fxfa/parser/cxfa_event.cpp
+++ b/xfa/fxfa/parser/cxfa_event.cpp
@@ -26,7 +26,7 @@
   return XFA_Element::Unknown;
 }
 
-void CXFA_Event::GetRef(CFX_WideStringC& wsRef) {
+void CXFA_Event::GetRef(WideStringView& wsRef) {
   m_pNode->TryCData(XFA_ATTRIBUTE_Ref, wsRef);
 }
 
@@ -38,12 +38,12 @@
   return CXFA_Submit(m_pNode->GetChild(0, XFA_Element::Submit));
 }
 
-void CXFA_Event::GetSignDataTarget(CFX_WideString& wsTarget) {
+void CXFA_Event::GetSignDataTarget(WideString& wsTarget) {
   CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_Element::SignData);
   if (!pNode)
     return;
 
-  CFX_WideStringC wsCData;
+  WideStringView wsCData;
   pNode->TryCData(XFA_ATTRIBUTE_Target, wsCData);
   wsTarget = wsCData;
 }
diff --git a/xfa/fxfa/parser/cxfa_event.h b/xfa/fxfa/parser/cxfa_event.h
index fc0bcf3..3835454 100644
--- a/xfa/fxfa/parser/cxfa_event.h
+++ b/xfa/fxfa/parser/cxfa_event.h
@@ -24,8 +24,8 @@
   XFA_Element GetEventType() const;
   CXFA_Script GetScript() const;
   CXFA_Submit GetSubmit() const;
-  void GetRef(CFX_WideStringC& wsRef);
-  void GetSignDataTarget(CFX_WideString& wsTarget);
+  void GetRef(WideStringView& wsRef);
+  void GetSignDataTarget(WideString& wsTarget);
 };
 
 #endif  // XFA_FXFA_PARSER_CXFA_EVENT_H_
diff --git a/xfa/fxfa/parser/cxfa_exdata.cpp b/xfa/fxfa/parser/cxfa_exdata.cpp
index ac82b30..8ba9d02 100644
--- a/xfa/fxfa/parser/cxfa_exdata.cpp
+++ b/xfa/fxfa/parser/cxfa_exdata.cpp
@@ -10,6 +10,6 @@
 
 CXFA_ExData::CXFA_ExData(CXFA_Node* pNode) : CXFA_Data(pNode) {}
 
-bool CXFA_ExData::SetContentType(const CFX_WideString& wsContentType) {
+bool CXFA_ExData::SetContentType(const WideString& wsContentType) {
   return m_pNode->SetCData(XFA_ATTRIBUTE_ContentType, wsContentType);
 }
diff --git a/xfa/fxfa/parser/cxfa_exdata.h b/xfa/fxfa/parser/cxfa_exdata.h
index c92bacd..03913a2 100644
--- a/xfa/fxfa/parser/cxfa_exdata.h
+++ b/xfa/fxfa/parser/cxfa_exdata.h
@@ -16,7 +16,7 @@
  public:
   explicit CXFA_ExData(CXFA_Node* pNode);
 
-  bool SetContentType(const CFX_WideString& wsContentType);
+  bool SetContentType(const WideString& wsContentType);
 };
 
 #endif  // XFA_FXFA_PARSER_CXFA_EXDATA_H_
diff --git a/xfa/fxfa/parser/cxfa_fill.cpp b/xfa/fxfa/parser/cxfa_fill.cpp
index 8a7969d..6b39134 100644
--- a/xfa/fxfa/parser/cxfa_fill.cpp
+++ b/xfa/fxfa/parser/cxfa_fill.cpp
@@ -18,7 +18,7 @@
 
 void CXFA_Fill::SetColor(FX_ARGB color) {
   CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_Element::Color);
-  CFX_WideString wsColor;
+  WideString wsColor;
   int a;
   int r;
   int g;
@@ -30,7 +30,7 @@
 
 FX_ARGB CXFA_Fill::GetColor(bool bText) {
   if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_Element::Color)) {
-    CFX_WideStringC wsColor;
+    WideStringView wsColor;
     if (pNode->TryCData(XFA_ATTRIBUTE_Value, wsColor, false))
       return CXFA_Data::ToColor(wsColor);
   }
@@ -54,7 +54,7 @@
 int32_t CXFA_Fill::GetPattern(FX_ARGB& foreColor) {
   CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_Element::Pattern);
   if (CXFA_Node* pColor = pNode->GetChild(0, XFA_Element::Color)) {
-    CFX_WideStringC wsColor;
+    WideStringView wsColor;
     pColor->TryCData(XFA_ATTRIBUTE_Value, wsColor, false);
     foreColor = CXFA_Data::ToColor(wsColor);
   } else {
@@ -68,7 +68,7 @@
   int32_t eAttr = 50;
   pNode->TryInteger(XFA_ATTRIBUTE_Rate, eAttr);
   if (CXFA_Node* pColor = pNode->GetChild(0, XFA_Element::Color)) {
-    CFX_WideStringC wsColor;
+    WideStringView wsColor;
     pColor->TryCData(XFA_ATTRIBUTE_Value, wsColor, false);
     stippleColor = CXFA_Data::ToColor(wsColor);
   } else {
@@ -82,7 +82,7 @@
   XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_ToRight;
   pNode->TryEnum(XFA_ATTRIBUTE_Type, eAttr);
   if (CXFA_Node* pColor = pNode->GetChild(0, XFA_Element::Color)) {
-    CFX_WideStringC wsColor;
+    WideStringView wsColor;
     pColor->TryCData(XFA_ATTRIBUTE_Value, wsColor, false);
     endColor = CXFA_Data::ToColor(wsColor);
   } else {
@@ -96,7 +96,7 @@
   XFA_ATTRIBUTEENUM eAttr = XFA_ATTRIBUTEENUM_ToEdge;
   pNode->TryEnum(XFA_ATTRIBUTE_Type, eAttr);
   if (CXFA_Node* pColor = pNode->GetChild(0, XFA_Element::Color)) {
-    CFX_WideStringC wsColor;
+    WideStringView wsColor;
     pColor->TryCData(XFA_ATTRIBUTE_Value, wsColor, false);
     endColor = CXFA_Data::ToColor(wsColor);
   } else {
diff --git a/xfa/fxfa/parser/cxfa_font.cpp b/xfa/fxfa/parser/cxfa_font.cpp
index 56e04b7..71aa617 100644
--- a/xfa/fxfa/parser/cxfa_font.cpp
+++ b/xfa/fxfa/parser/cxfa_font.cpp
@@ -18,21 +18,21 @@
 }
 
 float CXFA_Font::GetHorizontalScale() {
-  CFX_WideString wsValue;
+  WideString wsValue;
   m_pNode->TryCData(XFA_ATTRIBUTE_FontHorizontalScale, wsValue);
   int32_t iScale = FXSYS_wtoi(wsValue.c_str());
   return iScale > 0 ? (float)iScale : 100.0f;
 }
 
 float CXFA_Font::GetVerticalScale() {
-  CFX_WideString wsValue;
+  WideString wsValue;
   m_pNode->TryCData(XFA_ATTRIBUTE_FontVerticalScale, wsValue);
   int32_t iScale = FXSYS_wtoi(wsValue.c_str());
   return iScale > 0 ? (float)iScale : 100.0f;
 }
 
 float CXFA_Font::GetLetterSpacing() {
-  CFX_WideStringC wsValue;
+  WideStringView wsValue;
   if (!m_pNode->TryCData(XFA_ATTRIBUTE_LetterSpacing, wsValue))
     return 0;
 
@@ -66,7 +66,7 @@
   return ms.ToUnit(XFA_UNIT_Pt);
 }
 
-void CXFA_Font::GetTypeface(CFX_WideStringC& wsTypeFace) {
+void CXFA_Font::GetTypeface(WideStringView& wsTypeFace) {
   m_pNode->TryCData(XFA_ATTRIBUTE_Typeface, wsTypeFace);
 }
 
diff --git a/xfa/fxfa/parser/cxfa_font.h b/xfa/fxfa/parser/cxfa_font.h
index 2a5fef1..af0c348 100644
--- a/xfa/fxfa/parser/cxfa_font.h
+++ b/xfa/fxfa/parser/cxfa_font.h
@@ -24,7 +24,7 @@
   int32_t GetUnderline();
   int32_t GetUnderlinePeriod();
   float GetFontSize();
-  void GetTypeface(CFX_WideStringC& wsTypeFace);
+  void GetTypeface(WideStringView& wsTypeFace);
 
   bool IsBold();
   bool IsItalic();
diff --git a/xfa/fxfa/parser/cxfa_image.cpp b/xfa/fxfa/parser/cxfa_image.cpp
index 8d14d62..b6d78d9 100644
--- a/xfa/fxfa/parser/cxfa_image.cpp
+++ b/xfa/fxfa/parser/cxfa_image.cpp
@@ -15,11 +15,11 @@
   return m_pNode->GetEnum(XFA_ATTRIBUTE_Aspect);
 }
 
-bool CXFA_Image::GetContentType(CFX_WideString& wsContentType) {
+bool CXFA_Image::GetContentType(WideString& wsContentType) {
   return m_pNode->TryCData(XFA_ATTRIBUTE_ContentType, wsContentType);
 }
 
-bool CXFA_Image::GetHref(CFX_WideString& wsHref) {
+bool CXFA_Image::GetHref(WideString& wsHref) {
   if (m_bDefValue)
     return m_pNode->TryCData(XFA_ATTRIBUTE_Href, wsHref);
   return m_pNode->GetAttribute(L"href", wsHref);
@@ -31,18 +31,18 @@
   return XFA_ATTRIBUTEENUM_Base64;
 }
 
-bool CXFA_Image::GetContent(CFX_WideString& wsText) {
+bool CXFA_Image::GetContent(WideString& wsText) {
   return m_pNode->TryContent(wsText);
 }
 
-bool CXFA_Image::SetContentType(const CFX_WideString& wsContentType) {
+bool CXFA_Image::SetContentType(const WideString& wsContentType) {
   return m_pNode->SetCData(XFA_ATTRIBUTE_ContentType, wsContentType);
 }
 
-bool CXFA_Image::SetHref(const CFX_WideString& wsHref) {
+bool CXFA_Image::SetHref(const WideString& wsHref) {
   if (m_bDefValue)
     return m_pNode->SetCData(XFA_ATTRIBUTE_Href, wsHref);
-  return m_pNode->SetAttribute(XFA_ATTRIBUTE_Href, wsHref.AsStringC());
+  return m_pNode->SetAttribute(XFA_ATTRIBUTE_Href, wsHref.AsStringView());
 }
 
 bool CXFA_Image::SetTransferEncoding(int32_t iTransferEncoding) {
diff --git a/xfa/fxfa/parser/cxfa_image.h b/xfa/fxfa/parser/cxfa_image.h
index 204441a..cc08bc3 100644
--- a/xfa/fxfa/parser/cxfa_image.h
+++ b/xfa/fxfa/parser/cxfa_image.h
@@ -18,12 +18,12 @@
   CXFA_Image(CXFA_Node* pNode, bool bDefValue);
 
   int32_t GetAspect();
-  bool GetContentType(CFX_WideString& wsContentType);
-  bool GetHref(CFX_WideString& wsHref);
+  bool GetContentType(WideString& wsContentType);
+  bool GetHref(WideString& wsHref);
   int32_t GetTransferEncoding();
-  bool GetContent(CFX_WideString& wsText);
-  bool SetContentType(const CFX_WideString& wsContentType);
-  bool SetHref(const CFX_WideString& wsHref);
+  bool GetContent(WideString& wsText);
+  bool SetContentType(const WideString& wsContentType);
+  bool SetHref(const WideString& wsHref);
   bool SetTransferEncoding(int32_t iTransferEncoding);
 
  private:
diff --git a/xfa/fxfa/parser/cxfa_itemlayoutprocessor.cpp b/xfa/fxfa/parser/cxfa_itemlayoutprocessor.cpp
index f7a019d..7d9a218 100644
--- a/xfa/fxfa/parser/cxfa_itemlayoutprocessor.cpp
+++ b/xfa/fxfa/parser/cxfa_itemlayoutprocessor.cpp
@@ -29,10 +29,10 @@
 
 namespace {
 
-std::vector<CFX_WideString> SeparateStringW(const wchar_t* pStr,
-                                            int32_t iStrLen,
-                                            wchar_t delimiter) {
-  std::vector<CFX_WideString> ret;
+std::vector<WideString> SeparateStringW(const wchar_t* pStr,
+                                        int32_t iStrLen,
+                                        wchar_t delimiter) {
+  std::vector<WideString> ret;
   if (!pStr)
     return ret;
   if (iStrLen < 0)
@@ -42,7 +42,7 @@
   const wchar_t* pEnd = pStr + iStrLen;
   while (true) {
     if (pStr >= pEnd || delimiter == *pStr) {
-      ret.push_back(CFX_WideString(pToken, pStr - pToken));
+      ret.push_back(WideString(pToken, pStr - pToken));
       pToken = pStr + 1;
       if (pStr >= pEnd)
         break;
@@ -1746,7 +1746,7 @@
   float fContentWidthLimit =
       bContainerWidthAutoSize ? FLT_MAX
                               : containerSize.width - fLeftInset - fRightInset;
-  CFX_WideStringC wsColumnWidths;
+  WideStringView wsColumnWidths;
   if (pLayoutNode->TryCData(XFA_ATTRIBUTE_ColumnWidths, wsColumnWidths)) {
     auto widths = SeparateStringW(wsColumnWidths.unterminated_c_str(),
                                   wsColumnWidths.GetLength(), L' ');
@@ -1756,7 +1756,7 @@
         continue;
 
       m_rgSpecifiedColumnWidths.push_back(
-          CXFA_Measurement(width.AsStringC()).ToUnit(XFA_UNIT_Pt));
+          CXFA_Measurement(width.AsStringView()).ToUnit(XFA_UNIT_Pt));
     }
   }
 
diff --git a/xfa/fxfa/parser/cxfa_layoutpagemgr.cpp b/xfa/fxfa/parser/cxfa_layoutpagemgr.cpp
index b80100a..d8fdbb4 100644
--- a/xfa/fxfa/parser/cxfa_layoutpagemgr.cpp
+++ b/xfa/fxfa/parser/cxfa_layoutpagemgr.cpp
@@ -65,7 +65,7 @@
 
 uint32_t GetRelevant(CXFA_Node* pFormItem, uint32_t dwParentRelvant) {
   uint32_t dwRelevant = XFA_WidgetStatus_Viewable | XFA_WidgetStatus_Printable;
-  CFX_WideStringC wsRelevant;
+  WideStringView wsRelevant;
   if (pFormItem->TryCData(XFA_ATTRIBUTE_Relevant, wsRelevant)) {
     if (wsRelevant == L"+print" || wsRelevant == L"print")
       dwRelevant &= ~XFA_WidgetStatus_Viewable;
@@ -136,18 +136,18 @@
 
 CXFA_Node* ResolveBreakTarget(CXFA_Node* pPageSetRoot,
                               bool bNewExprStyle,
-                              CFX_WideStringC& wsTargetExpr) {
+                              WideStringView& wsTargetExpr) {
   CXFA_Document* pDocument = pPageSetRoot->GetDocument();
   if (wsTargetExpr.IsEmpty())
     return nullptr;
 
-  CFX_WideString wsTargetAll(wsTargetExpr);
+  WideString wsTargetAll(wsTargetExpr);
   wsTargetAll.TrimLeft();
   wsTargetAll.TrimRight();
   int32_t iSplitIndex = 0;
   bool bTargetAllFind = true;
   while (iSplitIndex != -1) {
-    CFX_WideString wsExpr;
+    WideString wsExpr;
     pdfium::Optional<FX_STRSIZE> iSplitNextIndex = 0;
     if (!bTargetAllFind) {
       iSplitNextIndex = wsTargetAll.Find(' ', iSplitIndex);
@@ -165,17 +165,17 @@
     if (wsExpr[0] == '#') {
       CXFA_Node* pNode = pDocument->GetNodeByID(
           ToNode(pDocument->GetXFAObject(XFA_HASHCODE_Template)),
-          wsExpr.Right(wsExpr.GetLength() - 1).AsStringC());
+          wsExpr.Right(wsExpr.GetLength() - 1).AsStringView());
       if (pNode)
         return pNode;
     } else if (bNewExprStyle) {
-      CFX_WideString wsProcessedTarget = wsExpr;
+      WideString wsProcessedTarget = wsExpr;
       if (wsExpr.Left(4) == L"som(" && wsExpr.Last() == L')') {
         wsProcessedTarget = wsExpr.Mid(4, wsExpr.GetLength() - 5);
       }
       XFA_RESOLVENODE_RS rs;
       int32_t iCount = pDocument->GetScriptContext()->ResolveObjects(
-          pPageSetRoot, wsProcessedTarget.AsStringC(), rs,
+          pPageSetRoot, wsProcessedTarget.AsStringView(), rs,
           XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties |
               XFA_RESOLVENODE_Attributes | XFA_RESOLVENODE_Siblings |
               XFA_RESOLVENODE_Parent);
@@ -477,7 +477,7 @@
 }
 
 bool XFA_LayoutPageMgr_RunBreakTestScript(CXFA_Node* pTestScript) {
-  CFX_WideString wsExpression;
+  WideString wsExpression;
   pTestScript->TryContent(wsExpression);
   if (wsExpression.IsEmpty())
     return true;
@@ -801,7 +801,7 @@
   switch (eType) {
     case XFA_Element::BreakBefore:
     case XFA_Element::BreakAfter: {
-      CFX_WideStringC wsBreakLeader, wsBreakTrailer;
+      WideStringView wsBreakLeader, wsBreakTrailer;
       CXFA_Node* pFormNode = pCurNode->GetNodeItem(
           XFA_NODEITEM_Parent, XFA_ObjectType::ContainerNode);
       CXFA_Node* pContainer = pFormNode->GetTemplateNode();
@@ -810,7 +810,7 @@
       if (pScript && !XFA_LayoutPageMgr_RunBreakTestScript(pScript))
         return false;
 
-      CFX_WideStringC wsTarget = pCurNode->GetCData(XFA_ATTRIBUTE_Target);
+      WideStringView wsTarget = pCurNode->GetCData(XFA_ATTRIBUTE_Target);
       CXFA_Node* pTarget =
           ResolveBreakTarget(m_pTemplatePageSetRoot, true, wsTarget);
       wsBreakTrailer = pCurNode->GetCData(XFA_ATTRIBUTE_Trailer);
@@ -845,7 +845,7 @@
     }
     case XFA_Element::Break: {
       bool bStartNew = pCurNode->GetInteger(XFA_ATTRIBUTE_StartNew) != 0;
-      CFX_WideStringC wsTarget = pCurNode->GetCData(
+      WideStringView wsTarget = pCurNode->GetCData(
           bBefore ? XFA_ATTRIBUTE_BeforeTarget : XFA_ATTRIBUTE_AfterTarget);
       CXFA_Node* pTarget =
           ResolveBreakTarget(m_pTemplatePageSetRoot, true, wsTarget);
@@ -936,9 +936,9 @@
           ->GetNodeItem(XFA_NODEITEM_Parent, XFA_ObjectType::ContainerNode)
           ->GetTemplateNode();
   if (pOverflowNode->GetElementType() == XFA_Element::Break) {
-    CFX_WideStringC wsOverflowLeader;
-    CFX_WideStringC wsOverflowTarget;
-    CFX_WideStringC wsOverflowTrailer;
+    WideStringView wsOverflowLeader;
+    WideStringView wsOverflowTarget;
+    WideStringView wsOverflowTrailer;
     pOverflowNode->TryCData(XFA_ATTRIBUTE_OverflowLeader, wsOverflowLeader);
     pOverflowNode->TryCData(XFA_ATTRIBUTE_OverflowTrailer, wsOverflowTrailer);
     pOverflowNode->TryCData(XFA_ATTRIBUTE_OverflowTarget, wsOverflowTarget);
@@ -978,9 +978,9 @@
   if (pOverflowNode->GetElementType() != XFA_Element::Overflow)
     return nullptr;
 
-  CFX_WideStringC wsOverflowLeader;
-  CFX_WideStringC wsOverflowTrailer;
-  CFX_WideStringC wsOverflowTarget;
+  WideStringView wsOverflowLeader;
+  WideStringView wsOverflowTrailer;
+  WideStringView wsOverflowTarget;
   pOverflowNode->TryCData(XFA_ATTRIBUTE_Leader, wsOverflowLeader);
   pOverflowNode->TryCData(XFA_ATTRIBUTE_Trailer, wsOverflowTrailer);
   pOverflowNode->TryCData(XFA_ATTRIBUTE_Target, wsOverflowTarget);
@@ -1067,7 +1067,7 @@
     CXFA_Node* pBookendNode,
     bool bLeader,
     CXFA_Node*& pBookendAppendTemplate) {
-  CFX_WideStringC wsBookendLeader;
+  WideStringView wsBookendLeader;
   CXFA_Node* pContainer =
       pBookendNode
           ->GetNodeItem(XFA_NODEITEM_Parent, XFA_ObjectType::ContainerNode)
@@ -1642,9 +1642,9 @@
   for (CXFA_Node* pCurNode = pFormNode->GetNodeItem(XFA_NODEITEM_FirstChild);
        pCurNode; pCurNode = pCurNode->GetNodeItem((XFA_NODEITEM_NextSibling))) {
     if (pCurNode->GetElementType() == XFA_Element::Break) {
-      CFX_WideStringC wsOverflowLeader;
-      CFX_WideStringC wsOverflowTarget;
-      CFX_WideStringC wsOverflowTrailer;
+      WideStringView wsOverflowLeader;
+      WideStringView wsOverflowTarget;
+      WideStringView wsOverflowTrailer;
       pCurNode->TryCData(XFA_ATTRIBUTE_OverflowLeader, wsOverflowLeader);
       pCurNode->TryCData(XFA_ATTRIBUTE_OverflowTrailer, wsOverflowTrailer);
       pCurNode->TryCData(XFA_ATTRIBUTE_OverflowTarget, wsOverflowTarget);
diff --git a/xfa/fxfa/parser/cxfa_localemgr.cpp b/xfa/fxfa/parser/cxfa_localemgr.cpp
index 833f72c..5d74c9b 100644
--- a/xfa/fxfa/parser/cxfa_localemgr.cpp
+++ b/xfa/fxfa/parser/cxfa_localemgr.cpp
@@ -1078,7 +1078,7 @@
                  : nullptr;
 }
 
-static uint16_t XFA_GetLanguage(CFX_WideString wsLanguage) {
+static uint16_t XFA_GetLanguage(WideString wsLanguage) {
   if (wsLanguage.GetLength() < 2)
     return FX_LANG_en_US;
 
@@ -1121,7 +1121,7 @@
   return FX_LANG_en_US;
 }
 
-CXFA_LocaleMgr::CXFA_LocaleMgr(CXFA_Node* pLocaleSet, CFX_WideString wsDeflcid)
+CXFA_LocaleMgr::CXFA_LocaleMgr(CXFA_Node* pLocaleSet, WideString wsDeflcid)
     : m_dwLocaleFlags(0x00) {
   m_dwDeflcid = XFA_GetLanguage(wsDeflcid);
   if (pLocaleSet) {
@@ -1194,8 +1194,7 @@
   }
 }
 
-IFX_Locale* CXFA_LocaleMgr::GetLocaleByName(
-    const CFX_WideString& wsLocaleName) {
+IFX_Locale* CXFA_LocaleMgr::GetLocaleByName(const WideString& wsLocaleName) {
   for (size_t i = 0; i < m_LocaleArray.size(); i++) {
     IFX_Locale* pLocale = m_LocaleArray[i].get();
     if (pLocale->GetName() == wsLocaleName)
@@ -1220,7 +1219,7 @@
   m_pDefLocale = pLocale;
 }
 
-CFX_WideStringC CXFA_LocaleMgr::GetConfigLocaleName(CXFA_Node* pConfig) {
+WideStringView CXFA_LocaleMgr::GetConfigLocaleName(CXFA_Node* pConfig) {
   if (!(m_dwLocaleFlags & 0x01)) {
     m_wsConfigLocale.clear();
     if (pConfig) {
@@ -1242,5 +1241,5 @@
     }
     m_dwLocaleFlags |= 0x01;
   }
-  return m_wsConfigLocale.AsStringC();
+  return m_wsConfigLocale.AsStringView();
 }
diff --git a/xfa/fxfa/parser/cxfa_localemgr.h b/xfa/fxfa/parser/cxfa_localemgr.h
index f730304..d77a94a 100644
--- a/xfa/fxfa/parser/cxfa_localemgr.h
+++ b/xfa/fxfa/parser/cxfa_localemgr.h
@@ -19,15 +19,15 @@
 
 class CXFA_LocaleMgr {
  public:
-  CXFA_LocaleMgr(CXFA_Node* pLocaleSet, CFX_WideString wsDeflcid);
+  CXFA_LocaleMgr(CXFA_Node* pLocaleSet, WideString wsDeflcid);
   ~CXFA_LocaleMgr();
 
   uint16_t GetDefLocaleID() const;
   IFX_Locale* GetDefLocale();
-  IFX_Locale* GetLocaleByName(const CFX_WideString& wsLocaleName);
+  IFX_Locale* GetLocaleByName(const WideString& wsLocaleName);
 
   void SetDefLocale(IFX_Locale* pLocale);
-  CFX_WideStringC GetConfigLocaleName(CXFA_Node* pConfig);
+  WideStringView GetConfigLocaleName(CXFA_Node* pConfig);
 
  private:
   std::unique_ptr<IFX_Locale> GetLocale(uint16_t lcid);
@@ -35,7 +35,7 @@
   std::vector<std::unique_ptr<IFX_Locale>> m_LocaleArray;
   std::vector<std::unique_ptr<IFX_Locale>> m_XMLLocaleArray;
   IFX_Locale* m_pDefLocale;  // owned by m_LocaleArray or m_XMLLocaleArray.
-  CFX_WideString m_wsConfigLocale;
+  WideString m_wsConfigLocale;
   uint16_t m_dwDeflcid;
   uint16_t m_dwLocaleFlags;
 };
diff --git a/xfa/fxfa/parser/cxfa_localevalue.cpp b/xfa/fxfa/parser/cxfa_localevalue.cpp
index dd56e6d..109254f 100644
--- a/xfa/fxfa/parser/cxfa_localevalue.cpp
+++ b/xfa/fxfa/parser/cxfa_localevalue.cpp
@@ -41,9 +41,9 @@
   return FX_LOCALECATEGORY_Unknown;
 }
 
-bool ValueSplitDateTime(const CFX_WideString& wsDateTime,
-                        CFX_WideString& wsDate,
-                        CFX_WideString& wsTime) {
+bool ValueSplitDateTime(const WideString& wsDateTime,
+                        WideString& wsDate,
+                        WideString& wsTime) {
   wsDate = L"";
   wsTime = L"";
   if (wsDateTime.IsEmpty())
@@ -77,7 +77,7 @@
       m_bValid(m_dwType != XFA_VT_NULL) {}
 
 CXFA_LocaleValue::CXFA_LocaleValue(uint32_t dwType,
-                                   const CFX_WideString& wsValue,
+                                   const WideString& wsValue,
                                    CXFA_LocaleMgr* pLocaleMgr)
     : m_pLocaleMgr(pLocaleMgr),
       m_wsValue(wsValue),
@@ -85,8 +85,8 @@
       m_bValid(ValidateCanonicalValue(wsValue, dwType)) {}
 
 CXFA_LocaleValue::CXFA_LocaleValue(uint32_t dwType,
-                                   const CFX_WideString& wsValue,
-                                   const CFX_WideString& wsFormat,
+                                   const WideString& wsValue,
+                                   const WideString& wsFormat,
                                    IFX_Locale* pLocale,
                                    CXFA_LocaleMgr* pLocaleMgr)
     : m_pLocaleMgr(pLocaleMgr),
@@ -103,24 +103,24 @@
 
 CXFA_LocaleValue::~CXFA_LocaleValue() {}
 
-bool CXFA_LocaleValue::ValidateValue(const CFX_WideString& wsValue,
-                                     const CFX_WideString& wsPattern,
+bool CXFA_LocaleValue::ValidateValue(const WideString& wsValue,
+                                     const WideString& wsPattern,
                                      IFX_Locale* pLocale,
-                                     CFX_WideString* pMatchFormat) {
-  CFX_WideString wsOutput;
+                                     WideString* pMatchFormat) {
+  WideString wsOutput;
   IFX_Locale* locale = m_pLocaleMgr->GetDefLocale();
   if (pLocale)
     m_pLocaleMgr->SetDefLocale(pLocale);
 
   auto pFormat = pdfium::MakeUnique<CFGAS_FormatString>(m_pLocaleMgr);
-  std::vector<CFX_WideString> wsPatterns;
+  std::vector<WideString> wsPatterns;
   pFormat->SplitFormatString(wsPattern, &wsPatterns);
 
   bool bRet = false;
   int32_t iCount = pdfium::CollectionSize<int32_t>(wsPatterns);
   int32_t i = 0;
   for (; i < iCount && !bRet; i++) {
-    CFX_WideString wsFormat = wsPatterns[i];
+    WideString wsFormat = wsPatterns[i];
     switch (ValueCategory(pFormat->GetCategory(wsFormat), m_dwType)) {
       case FX_LOCALECATEGORY_Null:
         bRet = pFormat->ParseNull(wsValue, wsFormat);
@@ -133,7 +133,7 @@
           bRet = wsValue == L"0";
         break;
       case FX_LOCALECATEGORY_Num: {
-        CFX_WideString fNum;
+        WideString fNum;
         bRet = pFormat->ParseNum(wsValue, wsFormat, &fNum);
         if (!bRet)
           bRet = pFormat->FormatNum(wsValue, wsFormat, &wsOutput);
@@ -285,7 +285,7 @@
     return CFX_DateTime();
 
   CFX_DateTime dt;
-  FX_TimeFromCanonical(m_wsValue.AsStringC(), &dt,
+  FX_TimeFromCanonical(m_wsValue.AsStringView(), &dt,
                        m_pLocaleMgr->GetDefLocale());
   return dt;
 }
@@ -301,7 +301,7 @@
   m_wsValue.Format(L"%02d:%02d:%02d", t.GetHour(), t.GetMinute(),
                    t.GetSecond());
   if (t.GetMillisecond() > 0) {
-    CFX_WideString wsTemp;
+    WideString wsTemp;
     wsTemp.Format(L"%:03d", t.GetMillisecond());
     m_wsValue += wsTemp;
   }
@@ -314,19 +314,19 @@
                    dt.GetMonth(), dt.GetDay(), dt.GetHour(), dt.GetMinute(),
                    dt.GetSecond());
   if (dt.GetMillisecond() > 0) {
-    CFX_WideString wsTemp;
+    WideString wsTemp;
     wsTemp.Format(L"%:03d", dt.GetMillisecond());
     m_wsValue += wsTemp;
   }
   return true;
 }
 
-bool CXFA_LocaleValue::FormatPatterns(CFX_WideString& wsResult,
-                                      const CFX_WideString& wsFormat,
+bool CXFA_LocaleValue::FormatPatterns(WideString& wsResult,
+                                      const WideString& wsFormat,
                                       IFX_Locale* pLocale,
                                       XFA_VALUEPICTURE eValueType) const {
   auto pFormat = pdfium::MakeUnique<CFGAS_FormatString>(m_pLocaleMgr);
-  std::vector<CFX_WideString> wsPatterns;
+  std::vector<WideString> wsPatterns;
   pFormat->SplitFormatString(wsFormat, &wsPatterns);
   wsResult.clear();
   int32_t iCount = pdfium::CollectionSize<int32_t>(wsPatterns);
@@ -337,8 +337,8 @@
   return false;
 }
 
-bool CXFA_LocaleValue::FormatSinglePattern(CFX_WideString& wsResult,
-                                           const CFX_WideString& wsFormat,
+bool CXFA_LocaleValue::FormatSinglePattern(WideString& wsResult,
+                                           const WideString& wsFormat,
                                            IFX_Locale* pLocale,
                                            XFA_VALUEPICTURE eValueType) const {
   IFX_Locale* locale = m_pLocaleMgr->GetDefLocale();
@@ -391,7 +391,7 @@
   return bRet;
 }
 
-bool CXFA_LocaleValue::ValidateCanonicalValue(const CFX_WideString& wsValue,
+bool CXFA_LocaleValue::ValidateCanonicalValue(const WideString& wsValue,
                                               uint32_t dwVType) {
   if (wsValue.IsEmpty())
     return true;
@@ -402,8 +402,8 @@
       if (ValidateCanonicalDate(wsValue, &dt))
         return true;
 
-      CFX_WideString wsDate;
-      CFX_WideString wsTime;
+      WideString wsDate;
+      WideString wsTime;
       if (ValueSplitDateTime(wsValue, wsDate, wsTime) &&
           ValidateCanonicalDate(wsDate, &dt)) {
         return true;
@@ -414,8 +414,8 @@
       if (ValidateCanonicalTime(wsValue))
         return true;
 
-      CFX_WideString wsDate;
-      CFX_WideString wsTime;
+      WideString wsDate;
+      WideString wsTime;
       if (ValueSplitDateTime(wsValue, wsDate, wsTime) &&
           ValidateCanonicalTime(wsTime)) {
         return true;
@@ -423,7 +423,7 @@
       return false;
     }
     case XFA_VT_DATETIME: {
-      CFX_WideString wsDate, wsTime;
+      WideString wsDate, wsTime;
       if (ValueSplitDateTime(wsValue, wsDate, wsTime) &&
           ValidateCanonicalDate(wsDate, &dt) && ValidateCanonicalTime(wsTime)) {
         return true;
@@ -433,7 +433,7 @@
   return true;
 }
 
-bool CXFA_LocaleValue::ValidateCanonicalDate(const CFX_WideString& wsDate,
+bool CXFA_LocaleValue::ValidateCanonicalDate(const WideString& wsDate,
                                              CFX_DateTime* unDate) {
   static const uint16_t LastDay[12] = {31, 28, 31, 30, 31, 30,
                                        31, 31, 30, 31, 30, 31};
@@ -510,7 +510,7 @@
   return true;
 }
 
-bool CXFA_LocaleValue::ValidateCanonicalTime(const CFX_WideString& wsTime) {
+bool CXFA_LocaleValue::ValidateCanonicalTime(const WideString& wsTime) {
   int nLen = wsTime.GetLength();
   if (nLen < 2)
     return false;
@@ -605,20 +605,20 @@
          wFraction <= 999;
 }
 
-bool CXFA_LocaleValue::ParsePatternValue(const CFX_WideString& wsValue,
-                                         const CFX_WideString& wsPattern,
+bool CXFA_LocaleValue::ParsePatternValue(const WideString& wsValue,
+                                         const WideString& wsPattern,
                                          IFX_Locale* pLocale) {
   IFX_Locale* locale = m_pLocaleMgr->GetDefLocale();
   if (pLocale)
     m_pLocaleMgr->SetDefLocale(pLocale);
 
   auto pFormat = pdfium::MakeUnique<CFGAS_FormatString>(m_pLocaleMgr);
-  std::vector<CFX_WideString> wsPatterns;
+  std::vector<WideString> wsPatterns;
   pFormat->SplitFormatString(wsPattern, &wsPatterns);
   bool bRet = false;
   int32_t iCount = pdfium::CollectionSize<int32_t>(wsPatterns);
   for (int32_t i = 0; i < iCount && !bRet; i++) {
-    CFX_WideString wsFormat = wsPatterns[i];
+    WideString wsFormat = wsPatterns[i];
     switch (ValueCategory(pFormat->GetCategory(wsFormat), m_dwType)) {
       case FX_LOCALECATEGORY_Null:
         bRet = pFormat->ParseNull(wsValue, wsFormat);
@@ -631,7 +631,7 @@
           m_wsValue = L"0";
         break;
       case FX_LOCALECATEGORY_Num: {
-        CFX_WideString fNum;
+        WideString fNum;
         bRet = pFormat->ParseNum(wsValue, wsFormat, &fNum);
         if (bRet)
           m_wsValue = fNum;
@@ -682,7 +682,7 @@
   return bRet;
 }
 
-void CXFA_LocaleValue::GetNumericFormat(CFX_WideString& wsFormat,
+void CXFA_LocaleValue::GetNumericFormat(WideString& wsFormat,
                                         int32_t nIntLen,
                                         int32_t nDecLen) {
   ASSERT(wsFormat.IsEmpty());
@@ -718,8 +718,8 @@
   wsFormat.ReleaseBuffer(nTotalLen);
 }
 
-bool CXFA_LocaleValue::ValidateNumericTemp(const CFX_WideString& wsNumeric,
-                                           const CFX_WideString& wsFormat,
+bool CXFA_LocaleValue::ValidateNumericTemp(const WideString& wsNumeric,
+                                           const WideString& wsFormat,
                                            IFX_Locale* pLocale) {
   if (wsFormat.IsEmpty() || wsNumeric.IsEmpty())
     return true;
@@ -761,15 +761,15 @@
     ++nf;
   }
 
-  CFX_WideString wsDecimalSymbol;
+  WideString wsDecimalSymbol;
   if (pLocale)
     wsDecimalSymbol = pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Decimal);
   else
-    wsDecimalSymbol = CFX_WideString(L'.');
+    wsDecimalSymbol = WideString(L'.');
 
   if (pFmt[nf] != L'.')
     return false;
-  if (wsDecimalSymbol != CFX_WideStringC(c) && c != L'.')
+  if (wsDecimalSymbol != WideStringView(c) && c != L'.')
     return false;
 
   ++nf;
diff --git a/xfa/fxfa/parser/cxfa_localevalue.h b/xfa/fxfa/parser/cxfa_localevalue.h
index caf4b0c..d493763 100644
--- a/xfa/fxfa/parser/cxfa_localevalue.h
+++ b/xfa/fxfa/parser/cxfa_localevalue.h
@@ -31,34 +31,32 @@
   CXFA_LocaleValue(const CXFA_LocaleValue& value);
   CXFA_LocaleValue(uint32_t dwType, CXFA_LocaleMgr* pLocaleMgr);
   CXFA_LocaleValue(uint32_t dwType,
-                   const CFX_WideString& wsValue,
+                   const WideString& wsValue,
                    CXFA_LocaleMgr* pLocaleMgr);
   CXFA_LocaleValue(uint32_t dwType,
-                   const CFX_WideString& wsValue,
-                   const CFX_WideString& wsFormat,
+                   const WideString& wsValue,
+                   const WideString& wsFormat,
                    IFX_Locale* pLocale,
                    CXFA_LocaleMgr* pLocaleMgr);
   ~CXFA_LocaleValue();
   CXFA_LocaleValue& operator=(const CXFA_LocaleValue& value);
 
-  bool ValidateValue(const CFX_WideString& wsValue,
-                     const CFX_WideString& wsPattern,
+  bool ValidateValue(const WideString& wsValue,
+                     const WideString& wsPattern,
                      IFX_Locale* pLocale,
-                     CFX_WideString* pMatchFormat);
+                     WideString* pMatchFormat);
 
-  bool FormatPatterns(CFX_WideString& wsResult,
-                      const CFX_WideString& wsFormat,
+  bool FormatPatterns(WideString& wsResult,
+                      const WideString& wsFormat,
                       IFX_Locale* pLocale,
                       XFA_VALUEPICTURE eValueType) const;
 
-  void GetNumericFormat(CFX_WideString& wsFormat,
-                        int32_t nIntLen,
-                        int32_t nDecLen);
-  bool ValidateNumericTemp(const CFX_WideString& wsNumeric,
-                           const CFX_WideString& wsFormat,
+  void GetNumericFormat(WideString& wsFormat, int32_t nIntLen, int32_t nDecLen);
+  bool ValidateNumericTemp(const WideString& wsNumeric,
+                           const WideString& wsFormat,
                            IFX_Locale* pLocale);
 
-  CFX_WideString GetValue() const { return m_wsValue; }
+  WideString GetValue() const { return m_wsValue; }
   uint32_t GetType() const { return m_dwType; }
   double GetDoubleNum() const;
   bool SetDate(const CFX_DateTime& d);
@@ -68,24 +66,23 @@
   bool IsValid() const { return m_bValid; }
 
  private:
-  bool FormatSinglePattern(CFX_WideString& wsResult,
-                           const CFX_WideString& wsFormat,
+  bool FormatSinglePattern(WideString& wsResult,
+                           const WideString& wsFormat,
                            IFX_Locale* pLocale,
                            XFA_VALUEPICTURE eValueType) const;
-  bool ValidateCanonicalValue(const CFX_WideString& wsValue, uint32_t dwVType);
-  bool ValidateCanonicalDate(const CFX_WideString& wsDate,
-                             CFX_DateTime* unDate);
-  bool ValidateCanonicalTime(const CFX_WideString& wsTime);
+  bool ValidateCanonicalValue(const WideString& wsValue, uint32_t dwVType);
+  bool ValidateCanonicalDate(const WideString& wsDate, CFX_DateTime* unDate);
+  bool ValidateCanonicalTime(const WideString& wsTime);
 
   bool SetTime(const CFX_DateTime& t);
   bool SetDateTime(const CFX_DateTime& dt);
 
-  bool ParsePatternValue(const CFX_WideString& wsValue,
-                         const CFX_WideString& wsPattern,
+  bool ParsePatternValue(const WideString& wsValue,
+                         const WideString& wsPattern,
                          IFX_Locale* pLocale);
 
   CXFA_LocaleMgr* m_pLocaleMgr;
-  CFX_WideString m_wsValue;
+  WideString m_wsValue;
   uint32_t m_dwType;
   bool m_bValid;
 };
diff --git a/xfa/fxfa/parser/cxfa_measurement.cpp b/xfa/fxfa/parser/cxfa_measurement.cpp
index 1c42720..24b5ba2 100644
--- a/xfa/fxfa/parser/cxfa_measurement.cpp
+++ b/xfa/fxfa/parser/cxfa_measurement.cpp
@@ -18,7 +18,7 @@
 
 }  // namespace
 
-CXFA_Measurement::CXFA_Measurement(const CFX_WideStringC& wsMeasure) {
+CXFA_Measurement::CXFA_Measurement(const WideStringView& wsMeasure) {
   SetString(wsMeasure);
 }
 
@@ -30,7 +30,7 @@
   Set(fValue, eUnit);
 }
 
-void CXFA_Measurement::SetString(const CFX_WideStringC& wsMeasure) {
+void CXFA_Measurement::SetString(const WideStringView& wsMeasure) {
   if (wsMeasure.IsEmpty()) {
     m_fValue = 0;
     m_eUnit = XFA_UNIT_Unknown;
@@ -45,7 +45,7 @@
   Set(fValue, eUnit);
 }
 
-bool CXFA_Measurement::ToString(CFX_WideString* wsMeasure) const {
+bool CXFA_Measurement::ToString(WideString* wsMeasure) const {
   switch (GetUnit()) {
     case XFA_UNIT_Mm:
       wsMeasure->Format(L"%.8gmm", GetValue());
@@ -135,7 +135,7 @@
 }
 
 // static
-XFA_UNIT CXFA_Measurement::GetUnitFromString(const CFX_WideStringC& wsUnit) {
+XFA_UNIT CXFA_Measurement::GetUnitFromString(const WideStringView& wsUnit) {
   if (wsUnit == L"mm")
     return XFA_UNIT_Mm;
   if (wsUnit == L"pt")
diff --git a/xfa/fxfa/parser/cxfa_measurement.h b/xfa/fxfa/parser/cxfa_measurement.h
index 2c03ec0..0212ea1 100644
--- a/xfa/fxfa/parser/cxfa_measurement.h
+++ b/xfa/fxfa/parser/cxfa_measurement.h
@@ -13,11 +13,11 @@
 
 class CXFA_Measurement {
  public:
-  explicit CXFA_Measurement(const CFX_WideStringC& wsMeasure);
+  explicit CXFA_Measurement(const WideStringView& wsMeasure);
   CXFA_Measurement();
   CXFA_Measurement(float fValue, XFA_UNIT eUnit);
 
-  static XFA_UNIT GetUnitFromString(const CFX_WideStringC& wsUnit);
+  static XFA_UNIT GetUnitFromString(const WideStringView& wsUnit);
 
   void Set(float fValue, XFA_UNIT eUnit) {
     m_fValue = fValue;
@@ -27,11 +27,11 @@
   XFA_UNIT GetUnit() const { return m_eUnit; }
   float GetValue() const { return m_fValue; }
 
-  bool ToString(CFX_WideString* wsMeasure) const;
+  bool ToString(WideString* wsMeasure) const;
   float ToUnit(XFA_UNIT eUnit) const;
 
  private:
-  void SetString(const CFX_WideStringC& wsMeasure);
+  void SetString(const WideStringView& wsMeasure);
   bool ToUnitInternal(XFA_UNIT eUnit, float* fValue) const;
 
   float m_fValue;
diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp
index 2f741c5..1dc2048 100644
--- a/xfa/fxfa/parser/cxfa_node.cpp
+++ b/xfa/fxfa/parser/cxfa_node.cpp
@@ -40,12 +40,12 @@
 namespace {
 
 void XFA_DeleteWideString(void* pData) {
-  delete static_cast<CFX_WideString*>(pData);
+  delete static_cast<WideString*>(pData);
 }
 
 void XFA_CopyWideString(void*& pData) {
   if (pData) {
-    CFX_WideString* pNewData = new CFX_WideString(*(CFX_WideString*)pData);
+    WideString* pNewData = new WideString(*(WideString*)pData);
     pData = pNewData;
   }
 }
@@ -74,8 +74,8 @@
       continue;
     }
     if (iCount == 0) {
-      CFX_WideStringC wsName = pNode->GetCData(XFA_ATTRIBUTE_Name);
-      CFX_WideStringC wsInstName = pInstMgrNode->GetCData(XFA_ATTRIBUTE_Name);
+      WideStringView wsName = pNode->GetCData(XFA_ATTRIBUTE_Name);
+      WideStringView wsInstName = pInstMgrNode->GetCData(XFA_ATTRIBUTE_Name);
       if (wsInstName.GetLength() < 1 || wsInstName[0] != '_' ||
           wsInstName.Right(wsInstName.GetLength() - 1) != wsName) {
         return iCount;
@@ -195,8 +195,8 @@
       continue;
     }
     if (iCount == 0) {
-      CFX_WideStringC wsName = pNode->GetCData(XFA_ATTRIBUTE_Name);
-      CFX_WideStringC wsInstName = pInstMgrNode->GetCData(XFA_ATTRIBUTE_Name);
+      WideStringView wsName = pNode->GetCData(XFA_ATTRIBUTE_Name);
+      WideStringView wsInstName = pInstMgrNode->GetCData(XFA_ATTRIBUTE_Name);
       if (wsInstName.GetLength() < 1 || wsInstName[0] != '_' ||
           wsInstName.Right(wsInstName.GetLength() - 1) != wsName) {
         return nullptr;
@@ -377,7 +377,7 @@
 };
 
 const XFA_ExecEventParaInfo* GetEventParaInfoByName(
-    const CFX_WideStringC& wsEventName) {
+    const WideStringView& wsEventName) {
   uint32_t uHash = FX_HashCode_GetW(wsEventName, false);
   int32_t iStart = 0;
   int32_t iEnd = (sizeof(gs_eventParaInfos) / sizeof(gs_eventParaInfos[0])) - 1;
@@ -394,10 +394,7 @@
   return nullptr;
 }
 
-void StrToRGB(const CFX_WideString& strRGB,
-              int32_t& r,
-              int32_t& g,
-              int32_t& b) {
+void StrToRGB(const WideString& strRGB, int32_t& r, int32_t& g, int32_t& b) {
   r = 0;
   g = 0;
   b = 0;
@@ -434,7 +431,7 @@
   XFA_KEYTYPE_Element,
 };
 
-void* GetMapKey_Custom(const CFX_WideStringC& wsKey) {
+void* GetMapKey_Custom(const WideStringView& wsKey) {
   uint32_t dwKey = FX_HashCode_GetW(wsKey, false);
   return (void*)(uintptr_t)((dwKey << 1) | XFA_KEYTYPE_Custom);
 }
@@ -481,7 +478,7 @@
                      uint16_t ePacket,
                      XFA_ObjectType oType,
                      XFA_Element eType,
-                     const CFX_WideStringC& elementName)
+                     const WideStringView& elementName)
     : CXFA_Object(pDoc, oType, eType, elementName),
       m_pNext(nullptr),
       m_pChild(nullptr),
@@ -520,12 +517,12 @@
   if (IsNeedSavingXMLNode()) {
     std::unique_ptr<CFX_XMLNode> pCloneXML;
     if (IsAttributeInXML()) {
-      CFX_WideString wsName;
+      WideString wsName;
       GetAttribute(XFA_ATTRIBUTE_Name, wsName, false);
       auto pCloneXMLElement = pdfium::MakeUnique<CFX_XMLElement>(wsName);
-      CFX_WideStringC wsValue = GetCData(XFA_ATTRIBUTE_Value);
+      WideStringView wsValue = GetCData(XFA_ATTRIBUTE_Value);
       if (!wsValue.IsEmpty()) {
-        pCloneXMLElement->SetTextData(CFX_WideString(wsValue));
+        pCloneXMLElement->SetTextData(WideString(wsValue));
       }
       pCloneXML.reset(pCloneXMLElement.release());
       pClone->SetEnum(XFA_ATTRIBUTE_Contains, XFA_ATTRIBUTEENUM_Unknown);
@@ -802,7 +799,7 @@
             XFA_ATTRIBUTEENUM_MultiSelect) {
       return nullptr;
     } else {
-      CFX_WideString wsPicture;
+      WideString wsPicture;
       if (pFieldWidgetData) {
         pFieldWidgetData->GetPictureContent(wsPicture,
                                             XFA_VALUEPICTURE_DataBind);
@@ -846,7 +843,7 @@
                             : nullptr;
 }
 
-bool CXFA_Node::GetLocaleName(CFX_WideString& wsLocaleName) {
+bool CXFA_Node::GetLocaleName(WideString& wsLocaleName) {
   CXFA_Node* pForm = GetDocument()->GetXFAObject(XFA_HASHCODE_Form)->AsNode();
   CXFA_Node* pTopSubform = pForm->GetFirstChildByClass(XFA_Element::Subform);
   ASSERT(pTopSubform);
@@ -971,8 +968,8 @@
     ThrowParamCountMismatchException(L"resolveNode");
     return;
   }
-  CFX_WideString wsExpression =
-      CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
+  WideString wsExpression =
+      WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringView());
   CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext();
   if (!pScriptContext)
     return;
@@ -984,7 +981,7 @@
                     XFA_RESOLVENODE_Siblings;
   XFA_RESOLVENODE_RS resoveNodeRS;
   int32_t iRet = pScriptContext->ResolveObjects(
-      refNode, wsExpression.AsStringC(), resoveNodeRS, dwFlag);
+      refNode, wsExpression.AsStringView(), resoveNodeRS, dwFlag);
   if (iRet < 1) {
     pArguments->GetReturnValue()->SetNull();
     return;
@@ -1014,8 +1011,8 @@
     ThrowParamCountMismatchException(L"resolveNodes");
     return;
   }
-  CFX_WideString wsExpression =
-      CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
+  WideString wsExpression =
+      WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringView());
   CFXJSE_Value* pValue = pArguments->GetReturnValue();
   if (!pValue)
     return;
@@ -1029,7 +1026,7 @@
 }
 
 void CXFA_Node::Script_Som_ResolveNodeList(CFXJSE_Value* pValue,
-                                           CFX_WideString wsExpression,
+                                           WideString wsExpression,
                                            uint32_t dwFlag,
                                            CXFA_Node* refNode) {
   CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext();
@@ -1038,7 +1035,7 @@
   XFA_RESOLVENODE_RS resoveNodeRS;
   if (!refNode)
     refNode = this;
-  pScriptContext->ResolveObjects(refNode, wsExpression.AsStringC(),
+  pScriptContext->ResolveObjects(refNode, wsExpression.AsStringView(),
                                  resoveNodeRS, dwFlag);
   CXFA_ArrayNodeList* pNodeList = new CXFA_ArrayNodeList(m_pDocument.Get());
   if (resoveNodeRS.dwFlags == XFA_RESOVENODE_RSTYPE_Nodes) {
@@ -1067,9 +1064,9 @@
   }
 
   uint32_t dwFlag = XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_ALL;
-  CFX_WideString wsName;
+  WideString wsName;
   GetAttribute(XFA_ATTRIBUTE_Name, wsName);
-  CFX_WideString wsExpression = wsName + L"[*]";
+  WideString wsExpression = wsName + L"[*]";
   Script_Som_ResolveNodeList(pValue, wsExpression, dwFlag);
 }
 
@@ -1080,8 +1077,8 @@
   if (!pScriptContext)
     return;
   if (bSetting) {
-    CFX_WideString wsMessage = L"Unable to set ";
-    FXJSE_ThrowMessage(wsMessage.UTF8Encode().AsStringC());
+    WideString wsMessage = L"Unable to set ";
+    FXJSE_ThrowMessage(wsMessage.UTF8Encode().AsStringView());
   } else {
     CXFA_AttachNodeList* pNodeList =
         new CXFA_AttachNodeList(m_pDocument.Get(), this);
@@ -1097,7 +1094,7 @@
     return;
   }
   uint32_t dwFlag = XFA_RESOLVENODE_Siblings | XFA_RESOLVENODE_ALL;
-  CFX_WideString wsExpression = L"#" + GetClassName() + L"[*]";
+  WideString wsExpression = L"#" + GetClassName() + L"[*]";
   Script_Som_ResolveNodeList(pValue, wsExpression, dwFlag);
 }
 
@@ -1143,9 +1140,9 @@
     ThrowInvalidPropertyException();
     return;
   }
-  CFX_WideString wsSOMExpression;
+  WideString wsSOMExpression;
   GetSOMExpression(wsSOMExpression);
-  pValue->SetString(wsSOMExpression.UTF8Encode().AsStringC());
+  pValue->SetString(wsSOMExpression.UTF8Encode().AsStringView());
 }
 
 void CXFA_Node::Script_NodeClass_ApplyXSL(CFXJSE_Arguments* pArguments) {
@@ -1154,8 +1151,8 @@
     ThrowParamCountMismatchException(L"applyXSL");
     return;
   }
-  CFX_WideString wsExpression =
-      CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
+  WideString wsExpression =
+      WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringView());
   // TODO(weili): check whether we need to implement this, pdfium:501.
   // For now, just put the variables here to avoid unused variable warning.
   (void)wsExpression;
@@ -1167,14 +1164,13 @@
     ThrowParamCountMismatchException(L"assignNode");
     return;
   }
-  CFX_WideString wsExpression;
-  CFX_WideString wsValue;
+  WideString wsExpression;
+  WideString wsValue;
   int32_t iAction = 0;
   wsExpression =
-      CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
+      WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringView());
   if (iLength >= 2) {
-    wsValue =
-        CFX_WideString::FromUTF8(pArguments->GetUTF8String(1).AsStringC());
+    wsValue = WideString::FromUTF8(pArguments->GetUTF8String(1).AsStringView());
   }
   if (iLength >= 3)
     iAction = pArguments->GetInt32(2);
@@ -1203,13 +1199,13 @@
     ThrowParamCountMismatchException(L"getAttribute");
     return;
   }
-  CFX_WideString wsExpression =
-      CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
-  CFX_WideString wsValue;
-  GetAttribute(wsExpression.AsStringC(), wsValue);
+  WideString wsExpression =
+      WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringView());
+  WideString wsValue;
+  GetAttribute(wsExpression.AsStringView(), wsValue);
   CFXJSE_Value* pValue = pArguments->GetReturnValue();
   if (pValue)
-    pValue->SetString(wsValue.UTF8Encode().AsStringC());
+    pValue->SetString(wsValue.UTF8Encode().AsStringView());
 }
 
 void CXFA_Node::Script_NodeClass_GetElement(CFXJSE_Arguments* pArguments) {
@@ -1218,14 +1214,14 @@
     ThrowParamCountMismatchException(L"getElement");
     return;
   }
-  CFX_WideString wsExpression;
+  WideString wsExpression;
   int32_t iValue = 0;
   wsExpression =
-      CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
+      WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringView());
   if (iLength >= 2)
     iValue = pArguments->GetInt32(1);
-  CXFA_Node* pNode =
-      GetProperty(iValue, XFA_GetElementTypeForName(wsExpression.AsStringC()));
+  CXFA_Node* pNode = GetProperty(
+      iValue, XFA_GetElementTypeForName(wsExpression.AsStringView()));
   pArguments->GetReturnValue()->Assign(
       m_pDocument->GetScriptContext()->GetJSValueFromMap(pNode));
 }
@@ -1242,15 +1238,15 @@
   if (!pValue)
     return;
 
-  CFX_WideString wsExpression =
-      CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
+  WideString wsExpression =
+      WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringView());
   const XFA_ATTRIBUTEINFO* pAttributeInfo =
-      XFA_GetAttributeByName(wsExpression.AsStringC());
+      XFA_GetAttributeByName(wsExpression.AsStringView());
   bool bHas = pAttributeInfo ? HasAttribute(pAttributeInfo->eName) : false;
   if (!bHas) {
     bool bParent = iLength < 2 || pArguments->GetInt32(1);
     int32_t iIndex = iLength == 3 ? pArguments->GetInt32(2) : 0;
-    XFA_Element eType = XFA_GetElementTypeForName(wsExpression.AsStringC());
+    XFA_Element eType = XFA_GetElementTypeForName(wsExpression.AsStringView());
     bHas = !!GetProperty(iIndex, eType);
     if (!bHas && bParent && m_pParent) {
       // Also check on the parent.
@@ -1271,7 +1267,7 @@
 
   bool bIgnoreRoot = true;
   bool bOverwrite = 0;
-  CFX_ByteString wsExpression = pArguments->GetUTF8String(0);
+  ByteString wsExpression = pArguments->GetUTF8String(0);
   if (wsExpression.IsEmpty())
     return;
   if (iLength >= 2)
@@ -1291,10 +1287,9 @@
     bIgnoreRoot = false;
   }
   CXFA_Node* pFakeRoot = Clone(false);
-  CFX_WideStringC wsContentType = GetCData(XFA_ATTRIBUTE_ContentType);
+  WideStringView wsContentType = GetCData(XFA_ATTRIBUTE_ContentType);
   if (!wsContentType.IsEmpty()) {
-    pFakeRoot->SetCData(XFA_ATTRIBUTE_ContentType,
-                        CFX_WideString(wsContentType));
+    pFakeRoot->SetCData(XFA_ATTRIBUTE_ContentType, WideString(wsContentType));
   }
 
   std::unique_ptr<CFX_XMLNode> pFakeXMLRoot(pFakeRoot->GetXMLMappingNode());
@@ -1304,7 +1299,7 @@
   }
   if (!pFakeXMLRoot) {
     pFakeXMLRoot =
-        pdfium::MakeUnique<CFX_XMLElement>(CFX_WideString(GetClassName()));
+        pdfium::MakeUnique<CFX_XMLElement>(WideString(GetClassName()));
   }
 
   if (bIgnoreRoot) {
@@ -1391,7 +1386,7 @@
     }
     bPrettyMode = true;
   }
-  CFX_WideString bsXMLHeader = L"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
+  WideString bsXMLHeader = L"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
   if (GetPacketID() == XFA_XDPPACKET_Form ||
       GetPacketID() == XFA_XDPPACKET_Datasets) {
     CFX_XMLNode* pElement = nullptr;
@@ -1399,7 +1394,7 @@
       pElement = GetXMLMappingNode();
       if (!pElement || pElement->GetType() != FX_XMLNODE_Element) {
         pArguments->GetReturnValue()->SetString(
-            bsXMLHeader.UTF8Encode().AsStringC());
+            bsXMLHeader.UTF8Encode().AsStringView());
         return;
       }
       XFA_DataExporter_DealWithDataGroupNode(this);
@@ -1408,7 +1403,7 @@
     auto pStream =
         pdfium::MakeRetain<CFX_SeekableStreamProxy>(pMemoryStream, true);
     pStream->SetCodePage(FX_CODEPAGE_UTF8);
-    pStream->WriteString(bsXMLHeader.AsStringC());
+    pStream->WriteString(bsXMLHeader.AsStringView());
 
     if (GetPacketID() == XFA_XDPPACKET_Form)
       XFA_DataExporter_RegenerateFormFile(this, pStream, nullptr, true);
@@ -1418,7 +1413,7 @@
     // For now, just put it here to avoid unused variable warning.
     (void)bPrettyMode;
     pArguments->GetReturnValue()->SetString(
-        CFX_ByteStringC(pMemoryStream->GetBuffer(), pMemoryStream->GetSize()));
+        ByteStringView(pMemoryStream->GetBuffer(), pMemoryStream->GetSize()));
     return;
   }
   pArguments->GetReturnValue()->SetString("");
@@ -1430,11 +1425,12 @@
     ThrowParamCountMismatchException(L"setAttribute");
     return;
   }
-  CFX_WideString wsAttributeValue =
-      CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
-  CFX_WideString wsAttribute =
-      CFX_WideString::FromUTF8(pArguments->GetUTF8String(1).AsStringC());
-  SetAttribute(wsAttribute.AsStringC(), wsAttributeValue.AsStringC(), true);
+  WideString wsAttributeValue =
+      WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringView());
+  WideString wsAttribute =
+      WideString::FromUTF8(pArguments->GetUTF8String(1).AsStringView());
+  SetAttribute(wsAttribute.AsStringView(), wsAttributeValue.AsStringView(),
+               true);
 }
 
 void CXFA_Node::Script_NodeClass_SetElement(CFXJSE_Arguments* pArguments) {
@@ -1444,10 +1440,10 @@
     return;
   }
   CXFA_Node* pNode = nullptr;
-  CFX_WideString wsName;
+  WideString wsName;
   pNode = static_cast<CXFA_Node*>(pArguments->GetObject(0));
   if (iLength == 2)
-    wsName = CFX_WideString::FromUTF8(pArguments->GetUTF8String(1).AsStringC());
+    wsName = WideString::FromUTF8(pArguments->GetUTF8String(1).AsStringView());
   // TODO(weili): check whether we need to implement this, pdfium:501.
   // For now, just put the variables here to avoid unused variable warning.
   (void)pNode;
@@ -1462,9 +1458,9 @@
     return;
   }
 
-  CFX_WideString wsNameSpace;
+  WideString wsNameSpace;
   TryNamespace(wsNameSpace);
-  pValue->SetString(wsNameSpace.UTF8Encode().AsStringC());
+  pValue->SetString(wsNameSpace.UTF8Encode().AsStringView());
 }
 
 void CXFA_Node::Script_NodeClass_Model(CFXJSE_Value* pValue,
@@ -1499,7 +1495,7 @@
     pValue->SetBoolean(false);
     return;
   }
-  CFX_WideString strValue;
+  WideString strValue;
   pValue->SetBoolean(!TryContent(strValue) || strValue.IsEmpty());
 }
 
@@ -1538,12 +1534,12 @@
     ThrowParamCountMismatchException(L"isCompatibleNS");
     return;
   }
-  CFX_WideString wsNameSpace;
+  WideString wsNameSpace;
   if (iLength >= 1) {
-    CFX_ByteString bsNameSpace = pArguments->GetUTF8String(0);
-    wsNameSpace = CFX_WideString::FromUTF8(bsNameSpace.AsStringC());
+    ByteString bsNameSpace = pArguments->GetUTF8String(0);
+    wsNameSpace = WideString::FromUTF8(bsNameSpace.AsStringView());
   }
-  CFX_WideString wsNodeNameSpace;
+  WideString wsNodeNameSpace;
   TryNamespace(wsNodeNameSpace);
   CFXJSE_Value* pValue = pArguments->GetReturnValue();
   if (pValue)
@@ -1755,8 +1751,8 @@
                                         bool bSetting,
                                         XFA_ATTRIBUTE eAttribute) {
   if (bSetting) {
-    CFX_WideString wsValue = pValue->ToWideString();
-    SetAttribute(eAttribute, wsValue.AsStringC(), true);
+    WideString wsValue = pValue->ToWideString();
+    SetAttribute(eAttribute, wsValue.AsStringView(), true);
     if (eAttribute == XFA_ATTRIBUTE_Use &&
         GetElementType() == XFA_Element::Desc) {
       CXFA_Node* pTemplateNode =
@@ -1765,11 +1761,11 @@
           pTemplateNode->GetFirstChildByClass(XFA_Element::Subform)
               ->GetFirstChildByClass(XFA_Element::Proto);
 
-      CFX_WideString wsID;
-      CFX_WideString wsSOM;
+      WideString wsID;
+      WideString wsSOM;
       if (!wsValue.IsEmpty()) {
         if (wsValue[0] == '#') {
-          wsID = CFX_WideString(wsValue.c_str() + 1, wsValue.GetLength() - 1);
+          wsID = WideString(wsValue.c_str() + 1, wsValue.GetLength() - 1);
         } else {
           wsSOM = wsValue;
         }
@@ -1782,12 +1778,12 @@
                           XFA_RESOLVENODE_Siblings;
         XFA_RESOLVENODE_RS resoveNodeRS;
         int32_t iRet = m_pDocument->GetScriptContext()->ResolveObjects(
-            pProtoRoot, wsSOM.AsStringC(), resoveNodeRS, dwFlag);
+            pProtoRoot, wsSOM.AsStringView(), resoveNodeRS, dwFlag);
         if (iRet > 0 && resoveNodeRS.objects.front()->IsNode()) {
           pProtoNode = resoveNodeRS.objects.front()->AsNode();
         }
       } else if (!wsID.IsEmpty()) {
-        pProtoNode = m_pDocument->GetNodeByID(pProtoRoot, wsID.AsStringC());
+        pProtoNode = m_pDocument->GetNodeByID(pProtoRoot, wsID.AsStringView());
       }
       if (pProtoNode) {
         CXFA_Node* pHeadChild = GetNodeItem(XFA_NODEITEM_FirstChild);
@@ -1811,9 +1807,9 @@
       }
     }
   } else {
-    CFX_WideString wsValue;
+    WideString wsValue;
     GetAttribute(eAttribute, wsValue);
-    pValue->SetString(wsValue.UTF8Encode().AsStringC());
+    pValue->SetString(wsValue.UTF8Encode().AsStringView());
   }
 }
 
@@ -1825,9 +1821,9 @@
     return;
   }
 
-  CFX_WideString wsValue;
+  WideString wsValue;
   GetAttribute(eAttribute, wsValue);
-  pValue->SetString(wsValue.UTF8Encode().AsStringC());
+  pValue->SetString(wsValue.UTF8Encode().AsStringView());
 }
 
 void CXFA_Node::Script_WsdlConnection_Execute(CFXJSE_Arguments* pArguments) {
@@ -1891,7 +1887,7 @@
       pNotify->AddCalcValidate(this);
     }
   } else {
-    CFX_WideString wsMessage;
+    WideString wsMessage;
     switch (iMessageType) {
       case XFA_SOM_ValidationMessage:
         validate.GetScriptMessageText(wsMessage);
@@ -1905,7 +1901,7 @@
       default:
         break;
     }
-    pValue->SetString(wsMessage.UTF8Encode().AsStringC());
+    pValue->SetString(wsMessage.UTF8Encode().AsStringView());
   }
 }
 
@@ -1948,14 +1944,14 @@
     return;
   }
   if (bSetting) {
-    CFX_WideString wsNewValue;
+    WideString wsNewValue;
     if (!(pValue && (pValue->IsNull() || pValue->IsUndefined())))
       wsNewValue = pValue->ToWideString();
 
-    CFX_WideString wsFormatValue(wsNewValue);
+    WideString wsFormatValue(wsNewValue);
     CXFA_WidgetData* pContainerWidgetData = nullptr;
     if (GetPacketID() == XFA_XDPPACKET_Datasets) {
-      CFX_WideString wsPicture;
+      WideString wsPicture;
       for (CXFA_Node* pFormNode : GetBindItems()) {
         if (!pFormNode || pFormNode->HasRemovedChildren())
           continue;
@@ -1976,17 +1972,17 @@
     }
     SetScriptContent(wsNewValue, wsFormatValue, true, true);
   } else {
-    CFX_WideString content = GetScriptContent(true);
+    WideString content = GetScriptContent(true);
     if (content.IsEmpty() && eType != XFA_Element::Text &&
         eType != XFA_Element::SubmitUrl) {
       pValue->SetNull();
     } else if (eType == XFA_Element::Integer) {
       pValue->SetInteger(FXSYS_wtoi(content.c_str()));
     } else if (eType == XFA_Element::Float || eType == XFA_Element::Decimal) {
-      CFX_Decimal decimal(content.AsStringC());
+      CFX_Decimal decimal(content.AsStringView());
       pValue->SetFloat((float)(double)decimal);
     } else {
-      pValue->SetString(content.UTF8Encode().AsStringC());
+      pValue->SetString(content.UTF8Encode().AsStringView());
     }
   }
 }
@@ -1999,32 +1995,32 @@
     return;
   }
 
-  CFX_WideString content = GetScriptContent(true);
+  WideString content = GetScriptContent(true);
   if (content.IsEmpty()) {
     pValue->SetNull();
     return;
   }
-  pValue->SetString(content.UTF8Encode().AsStringC());
+  pValue->SetString(content.UTF8Encode().AsStringView());
 }
 
 void CXFA_Node::Script_Boolean_Value(CFXJSE_Value* pValue,
                                      bool bSetting,
                                      XFA_ATTRIBUTE eAttribute) {
   if (bSetting) {
-    CFX_ByteString newValue;
+    ByteString newValue;
     if (!(pValue && (pValue->IsNull() || pValue->IsUndefined())))
       newValue = pValue->ToString();
 
     int32_t iValue = FXSYS_atoi(newValue.c_str());
-    CFX_WideString wsNewValue(iValue == 0 ? L"0" : L"1");
-    CFX_WideString wsFormatValue(wsNewValue);
+    WideString wsNewValue(iValue == 0 ? L"0" : L"1");
+    WideString wsFormatValue(wsNewValue);
     CXFA_WidgetData* pContainerWidgetData = GetContainerWidgetData();
     if (pContainerWidgetData) {
       pContainerWidgetData->GetFormatDataValue(wsNewValue, wsFormatValue);
     }
     SetScriptContent(wsNewValue, wsFormatValue, true, true);
   } else {
-    CFX_WideString wsValue = GetScriptContent(true);
+    WideString wsValue = GetScriptContent(true);
     pValue->SetBoolean(wsValue == L"1");
   }
 }
@@ -2056,9 +2052,9 @@
     int32_t g;
     int32_t b;
     std::tie(a, r, g, b) = ArgbDecode(color);
-    CFX_WideString strColor;
+    WideString strColor;
     strColor.Format(L"%d,%d,%d", r, g, b);
-    pValue->SetString(strColor.UTF8Encode().AsStringC());
+    pValue->SetString(strColor.UTF8Encode().AsStringView());
   }
 }
 
@@ -2071,19 +2067,19 @@
   }
   CXFA_Border border = pWidgetData->GetBorder(true);
   int32_t iSize = border.CountEdges();
-  CFX_WideString wsThickness;
+  WideString wsThickness;
   if (bSetting) {
     wsThickness = pValue->ToWideString();
     for (int32_t i = 0; i < iSize; ++i) {
       CXFA_Edge edge = border.GetEdge(i);
-      CXFA_Measurement thickness(wsThickness.AsStringC());
+      CXFA_Measurement thickness(wsThickness.AsStringView());
       edge.SetMSThickness(thickness);
     }
   } else {
     CXFA_Edge edge = border.GetEdge(0);
     CXFA_Measurement thickness = edge.GetMSThickness();
     thickness.ToString(&wsThickness);
-    pValue->SetString(wsThickness.UTF8Encode().AsStringC());
+    pValue->SetString(wsThickness.UTF8Encode().AsStringView());
   }
 }
 
@@ -2114,9 +2110,9 @@
     int32_t g;
     int32_t b;
     std::tie(a, r, g, b) = ArgbDecode(color);
-    CFX_WideString wsColor;
+    WideString wsColor;
     wsColor.Format(L"%d,%d,%d", r, g, b);
-    pValue->SetString(wsColor.UTF8Encode().AsStringC());
+    pValue->SetString(wsColor.UTF8Encode().AsStringView());
   }
 }
 
@@ -2146,17 +2142,17 @@
       ASSERT(pWidgetData);
       XFA_Element uiType = pWidgetData->GetUIType();
       if (uiType == XFA_Element::Text) {
-        CFX_WideString wsNewValue = pValue->ToWideString();
-        CFX_WideString wsFormatValue(wsNewValue);
+        WideString wsNewValue = pValue->ToWideString();
+        WideString wsFormatValue(wsNewValue);
         SetScriptContent(wsNewValue, wsFormatValue, true, true);
       }
     }
   } else {
-    CFX_WideString content = GetScriptContent(true);
+    WideString content = GetScriptContent(true);
     if (content.IsEmpty())
       pValue->SetNull();
     else
-      pValue->SetString(content.UTF8Encode().AsStringC());
+      pValue->SetString(content.UTF8Encode().AsStringView());
   }
 }
 
@@ -2175,7 +2171,7 @@
       pWidgetData->m_bPreNull = pWidgetData->m_bIsNull;
       pWidgetData->m_bIsNull = false;
     }
-    CFX_WideString wsNewText;
+    WideString wsNewText;
     if (!(pValue && (pValue->IsNull() || pValue->IsUndefined())))
       wsNewText = pValue->ToWideString();
 
@@ -2189,13 +2185,13 @@
           pWidgetData->NumericLimit(wsNewText, iLeadDigits, iFracDigits);
     }
     CXFA_WidgetData* pContainerWidgetData = GetContainerWidgetData();
-    CFX_WideString wsFormatText(wsNewText);
+    WideString wsFormatText(wsNewText);
     if (pContainerWidgetData) {
       pContainerWidgetData->GetFormatDataValue(wsNewText, wsFormatText);
     }
     SetScriptContent(wsNewText, wsFormatText, true, true);
   } else {
-    CFX_WideString content = GetScriptContent(true);
+    WideString content = GetScriptContent(true);
     if (content.IsEmpty()) {
       pValue->SetNull();
     } else {
@@ -2205,9 +2201,9 @@
       if (pNode && pNode->GetElementType() == XFA_Element::Decimal) {
         if (pUIChild->GetElementType() == XFA_Element::NumericEdit &&
             (pNode->GetInteger(XFA_ATTRIBUTE_FracDigits) == -1)) {
-          pValue->SetString(content.UTF8Encode().AsStringC());
+          pValue->SetString(content.UTF8Encode().AsStringView());
         } else {
-          CFX_Decimal decimal(content.AsStringC());
+          CFX_Decimal decimal(content.AsStringView());
           pValue->SetFloat((float)(double)decimal);
         }
       } else if (pNode && pNode->GetElementType() == XFA_Element::Integer) {
@@ -2215,10 +2211,10 @@
       } else if (pNode && pNode->GetElementType() == XFA_Element::Boolean) {
         pValue->SetBoolean(FXSYS_wtoi(content.c_str()) == 0 ? false : true);
       } else if (pNode && pNode->GetElementType() == XFA_Element::Float) {
-        CFX_Decimal decimal(content.AsStringC());
+        CFX_Decimal decimal(content.AsStringView());
         pValue->SetFloat((float)(double)decimal);
       } else {
-        pValue->SetString(content.UTF8Encode().AsStringC());
+        pValue->SetString(content.UTF8Encode().AsStringView());
       }
     }
   }
@@ -2234,9 +2230,9 @@
   if (bSetting) {
     pWidgetData->SetValue(pValue->ToWideString(), XFA_VALUEPICTURE_Edit);
   } else {
-    CFX_WideString wsValue;
+    WideString wsValue;
     pWidgetData->GetValue(wsValue, XFA_VALUEPICTURE_Edit);
-    pValue->SetString(wsValue.UTF8Encode().AsStringC());
+    pValue->SetString(wsValue.UTF8Encode().AsStringView());
   }
 }
 
@@ -2266,9 +2262,9 @@
     int32_t g;
     int32_t b;
     std::tie(a, r, g, b) = ArgbDecode(color);
-    CFX_WideString wsColor;
+    WideString wsColor;
     wsColor.Format(L"%d,%d,%d", r, g, b);
-    pValue->SetString(wsColor.UTF8Encode().AsStringC());
+    pValue->SetString(wsColor.UTF8Encode().AsStringView());
   }
 }
 
@@ -2288,9 +2284,9 @@
   if (bSetting) {
     pWidgetData->SetValue(pValue->ToWideString(), XFA_VALUEPICTURE_Display);
   } else {
-    CFX_WideString wsValue;
+    WideString wsValue;
     pWidgetData->GetValue(wsValue, XFA_VALUEPICTURE_Display);
-    pValue->SetString(wsValue.UTF8Encode().AsStringC());
+    pValue->SetString(wsValue.UTF8Encode().AsStringView());
   }
 }
 
@@ -2308,10 +2304,10 @@
     int32_t iValue = validate.GetNullTest();
     const XFA_ATTRIBUTEENUMINFO* pInfo =
         GetAttributeEnumByID((XFA_ATTRIBUTEENUM)iValue);
-    CFX_WideString wsValue;
+    WideString wsValue;
     if (pInfo)
       wsValue = pInfo->pName;
-    pValue->SetString(wsValue.UTF8Encode().AsStringC());
+    pValue->SetString(wsValue.UTF8Encode().AsStringView());
   }
 }
 
@@ -2364,9 +2360,9 @@
     return;
   }
 
-  CFX_ByteString eventString = pArguments->GetUTF8String(0);
+  ByteString eventString = pArguments->GetUTF8String(0);
   int32_t iRet = execSingleEventByName(
-      CFX_WideString::FromUTF8(eventString.AsStringC()).AsStringC(),
+      WideString::FromUTF8(eventString.AsStringView()).AsStringView(),
       XFA_Element::Field);
   if (eventString != "validate")
     return;
@@ -2421,12 +2417,12 @@
     pArguments->GetReturnValue()->SetNull();
     return;
   }
-  CFX_WideString wsValue;
+  WideString wsValue;
   if (!pWidgetData->GetChoiceListItem(wsValue, iIndex, true)) {
     pArguments->GetReturnValue()->SetNull();
     return;
   }
-  pArguments->GetReturnValue()->SetString(wsValue.UTF8Encode().AsStringC());
+  pArguments->GetReturnValue()->SetString(wsValue.UTF8Encode().AsStringView());
 }
 
 void CXFA_Node::Script_Field_BoundItem(CFXJSE_Arguments* pArguments) {
@@ -2439,13 +2435,13 @@
   if (!pWidgetData) {
     return;
   }
-  CFX_ByteString bsValue = pArguments->GetUTF8String(0);
-  CFX_WideString wsValue = CFX_WideString::FromUTF8(bsValue.AsStringC());
-  CFX_WideString wsBoundValue;
-  pWidgetData->GetItemValue(wsValue.AsStringC(), wsBoundValue);
+  ByteString bsValue = pArguments->GetUTF8String(0);
+  WideString wsValue = WideString::FromUTF8(bsValue.AsStringView());
+  WideString wsBoundValue;
+  pWidgetData->GetItemValue(wsValue.AsStringView(), wsBoundValue);
   CFXJSE_Value* pValue = pArguments->GetReturnValue();
   if (pValue)
-    pValue->SetString(wsBoundValue.UTF8Encode().AsStringC());
+    pValue->SetString(wsBoundValue.UTF8Encode().AsStringView());
 }
 
 void CXFA_Node::Script_Field_GetItemState(CFXJSE_Arguments* pArguments) {
@@ -2496,12 +2492,12 @@
     pArguments->GetReturnValue()->SetNull();
     return;
   }
-  CFX_WideString wsValue;
+  WideString wsValue;
   if (!pWidgetData->GetChoiceListItem(wsValue, iIndex, false)) {
     pArguments->GetReturnValue()->SetNull();
     return;
   }
-  pArguments->GetReturnValue()->SetString(wsValue.UTF8Encode().AsStringC());
+  pArguments->GetReturnValue()->SetString(wsValue.UTF8Encode().AsStringView());
 }
 
 void CXFA_Node::Script_Field_SetItemState(CFXJSE_Arguments* pArguments) {
@@ -2533,15 +2529,15 @@
   if (!pWidgetData) {
     return;
   }
-  CFX_WideString wsLabel;
-  CFX_WideString wsValue;
+  WideString wsLabel;
+  WideString wsValue;
   if (iLength >= 1) {
-    CFX_ByteString bsLabel = pArguments->GetUTF8String(0);
-    wsLabel = CFX_WideString::FromUTF8(bsLabel.AsStringC());
+    ByteString bsLabel = pArguments->GetUTF8String(0);
+    wsLabel = WideString::FromUTF8(bsLabel.AsStringView());
   }
   if (iLength >= 2) {
-    CFX_ByteString bsValue = pArguments->GetUTF8String(1);
-    wsValue = CFX_WideString::FromUTF8(bsValue.AsStringC());
+    ByteString bsValue = pArguments->GetUTF8String(1);
+    wsValue = WideString::FromUTF8(bsValue.AsStringView());
   }
   pWidgetData->InsertItem(wsLabel, wsValue, true);
 }
@@ -2579,15 +2575,15 @@
     return;
   }
   if (bSetting) {
-    pWidgetData->SetSelectedMemberByValue(pValue->ToWideString().AsStringC(),
+    pWidgetData->SetSelectedMemberByValue(pValue->ToWideString().AsStringView(),
                                           true, true, true);
   } else {
-    CFX_WideString wsValue = GetScriptContent(true);
+    WideString wsValue = GetScriptContent(true);
     XFA_VERSION curVersion = GetDocument()->GetCurVersionMode();
     if (wsValue.IsEmpty() && curVersion >= XFA_VERSION_300) {
       pValue->SetNull();
     } else {
-      pValue->SetString(wsValue.UTF8Encode().AsStringC());
+      pValue->SetString(wsValue.UTF8Encode().AsStringView());
     }
   }
 }
@@ -2602,9 +2598,9 @@
     return;
   }
 
-  CFX_ByteString eventString = pArguments->GetUTF8String(0);
+  ByteString eventString = pArguments->GetUTF8String(0);
   execSingleEventByName(
-      CFX_WideString::FromUTF8(eventString.AsStringC()).AsStringC(),
+      WideString::FromUTF8(eventString.AsStringView()).AsStringView(),
       XFA_Element::ExclGroup);
 }
 
@@ -2625,10 +2621,10 @@
   if (argc == 0) {
     pReturnNode = pWidgetData->GetSelectedMember();
   } else {
-    CFX_ByteString szName;
+    ByteString szName;
     szName = pArguments->GetUTF8String(0);
     pReturnNode = pWidgetData->SetSelectedMember(
-        CFX_WideString::FromUTF8(szName.AsStringC()).AsStringC(), true);
+        WideString::FromUTF8(szName.AsStringView()).AsStringView(), true);
   }
   if (!pReturnNode) {
     pArguments->GetReturnValue()->SetNull();
@@ -2725,12 +2721,12 @@
     return;
   }
 
-  CFX_WideStringC wsName = GetCData(XFA_ATTRIBUTE_Name);
+  WideStringView wsName = GetCData(XFA_ATTRIBUTE_Name);
   CXFA_Node* pInstanceMgr = nullptr;
   for (CXFA_Node* pNode = GetNodeItem(XFA_NODEITEM_PrevSibling); pNode;
        pNode = pNode->GetNodeItem(XFA_NODEITEM_PrevSibling)) {
     if (pNode->GetElementType() == XFA_Element::InstanceManager) {
-      CFX_WideStringC wsInstMgrName = pNode->GetCData(XFA_ATTRIBUTE_Name);
+      WideStringView wsInstMgrName = pNode->GetCData(XFA_ATTRIBUTE_Name);
       if (wsInstMgrName.GetLength() >= 1 && wsInstMgrName[0] == '_' &&
           wsInstMgrName.Right(wsInstMgrName.GetLength() - 1) == wsName) {
         pInstanceMgr = pNode;
@@ -2753,9 +2749,9 @@
   if (bSetting) {
     SetCData(XFA_ATTRIBUTE_Locale, pValue->ToWideString(), true, true);
   } else {
-    CFX_WideString wsLocaleName;
+    WideString wsLocaleName;
     GetLocaleName(wsLocaleName);
-    pValue->SetString(wsLocaleName.UTF8Encode().AsStringC());
+    pValue->SetString(wsLocaleName.UTF8Encode().AsStringView());
   }
 }
 
@@ -2765,9 +2761,9 @@
     return;
   }
 
-  CFX_ByteString eventString = pArguments->GetUTF8String(0);
+  ByteString eventString = pArguments->GetUTF8String(0);
   execSingleEventByName(
-      CFX_WideString::FromUTF8(eventString.AsStringC()).AsStringC(),
+      WideString::FromUTF8(eventString.AsStringView()).AsStringView(),
       XFA_Element::Subform);
 }
 
@@ -2870,20 +2866,20 @@
     return;
   }
 
-  CFX_WideString strName;
-  CFX_WideString strNameSpace;
-  CFX_ByteString bsTagName = pArguments->GetUTF8String(0);
-  CFX_WideString strTagName = CFX_WideString::FromUTF8(bsTagName.AsStringC());
+  WideString strName;
+  WideString strNameSpace;
+  ByteString bsTagName = pArguments->GetUTF8String(0);
+  WideString strTagName = WideString::FromUTF8(bsTagName.AsStringView());
   if (argc > 1) {
-    CFX_ByteString bsName = pArguments->GetUTF8String(1);
-    strName = CFX_WideString::FromUTF8(bsName.AsStringC());
+    ByteString bsName = pArguments->GetUTF8String(1);
+    strName = WideString::FromUTF8(bsName.AsStringView());
     if (argc == 3) {
-      CFX_ByteString bsNameSpace = pArguments->GetUTF8String(2);
-      strNameSpace = CFX_WideString::FromUTF8(bsNameSpace.AsStringC());
+      ByteString bsNameSpace = pArguments->GetUTF8String(2);
+      strNameSpace = WideString::FromUTF8(bsNameSpace.AsStringView());
     }
   }
 
-  XFA_Element eType = XFA_GetElementTypeForName(strTagName.AsStringC());
+  XFA_Element eType = XFA_GetElementTypeForName(strTagName.AsStringView());
   CXFA_Node* pNewNode = CreateSamePacketNode(eType);
   if (!pNewNode) {
     pArguments->GetReturnValue()->SetNull();
@@ -2902,7 +2898,7 @@
     return;
   }
 
-  pNewNode->SetAttribute(XFA_ATTRIBUTE_Name, strName.AsStringC(), true);
+  pNewNode->SetAttribute(XFA_ATTRIBUTE_Name, strName.AsStringView(), true);
   if (pNewNode->GetPacketID() == XFA_XDPPACKET_Datasets)
     pNewNode->CreateXMLMappingNode();
 
@@ -3156,13 +3152,13 @@
     return 0;
   }
   if (iDesired < iCount) {
-    CFX_WideStringC wsInstManagerName = GetCData(XFA_ATTRIBUTE_Name);
-    CFX_WideString wsInstanceName = CFX_WideString(
+    WideStringView wsInstManagerName = GetCData(XFA_ATTRIBUTE_Name);
+    WideString wsInstanceName = WideString(
         wsInstManagerName.IsEmpty()
             ? wsInstManagerName
             : wsInstManagerName.Right(wsInstManagerName.GetLength() - 1));
     uint32_t dInstanceNameHash =
-        FX_HashCode_GetW(wsInstanceName.AsStringC(), false);
+        FX_HashCode_GetW(wsInstanceName.AsStringView(), false);
     CXFA_Node* pPrevSibling =
         (iDesired == 0) ? this : GetItem(this, iDesired - 1);
     while (iCount > iDesired) {
@@ -3352,12 +3348,12 @@
                                      bool bSetting,
                                      XFA_ATTRIBUTE eAttribute) {
   if (bSetting) {
-    SetAttribute(XFA_ATTRIBUTE_Checksum, pValue->ToWideString().AsStringC());
+    SetAttribute(XFA_ATTRIBUTE_Checksum, pValue->ToWideString().AsStringView());
     return;
   }
-  CFX_WideString wsChecksum;
+  WideString wsChecksum;
   GetAttribute(XFA_ATTRIBUTE_Checksum, wsChecksum, false);
-  pValue->SetString(wsChecksum.UTF8Encode().AsStringC());
+  pValue->SetString(wsChecksum.UTF8Encode().AsStringView());
 }
 
 void CXFA_Node::Script_Packet_GetAttribute(CFXJSE_Arguments* pArguments) {
@@ -3365,15 +3361,15 @@
     ThrowParamCountMismatchException(L"getAttribute");
     return;
   }
-  CFX_ByteString bsAttributeName = pArguments->GetUTF8String(0);
-  CFX_WideString wsAttributeValue;
+  ByteString bsAttributeName = pArguments->GetUTF8String(0);
+  WideString wsAttributeValue;
   CFX_XMLNode* pXMLNode = GetXMLMappingNode();
   if (pXMLNode && pXMLNode->GetType() == FX_XMLNODE_Element) {
     wsAttributeValue = static_cast<CFX_XMLElement*>(pXMLNode)->GetString(
-        CFX_WideString::FromUTF8(bsAttributeName.AsStringC()).c_str());
+        WideString::FromUTF8(bsAttributeName.AsStringView()).c_str());
   }
   pArguments->GetReturnValue()->SetString(
-      wsAttributeValue.UTF8Encode().AsStringC());
+      wsAttributeValue.UTF8Encode().AsStringView());
 }
 
 void CXFA_Node::Script_Packet_SetAttribute(CFXJSE_Arguments* pArguments) {
@@ -3381,13 +3377,13 @@
     ThrowParamCountMismatchException(L"setAttribute");
     return;
   }
-  CFX_ByteString bsValue = pArguments->GetUTF8String(0);
-  CFX_ByteString bsName = pArguments->GetUTF8String(1);
+  ByteString bsValue = pArguments->GetUTF8String(0);
+  ByteString bsName = pArguments->GetUTF8String(1);
   CFX_XMLNode* pXMLNode = GetXMLMappingNode();
   if (pXMLNode && pXMLNode->GetType() == FX_XMLNODE_Element) {
     static_cast<CFX_XMLElement*>(pXMLNode)->SetString(
-        CFX_WideString::FromUTF8(bsName.AsStringC()),
-        CFX_WideString::FromUTF8(bsValue.AsStringC()));
+        WideString::FromUTF8(bsName.AsStringView()),
+        WideString::FromUTF8(bsValue.AsStringView()));
   }
   pArguments->GetReturnValue()->SetNull();
 }
@@ -3398,8 +3394,8 @@
     return;
   }
 
-  CFX_ByteString bsName = pArguments->GetUTF8String(0);
-  CFX_WideString wsName = CFX_WideString::FromUTF8(bsName.AsStringC());
+  ByteString bsName = pArguments->GetUTF8String(0);
+  WideString wsName = WideString::FromUTF8(bsName.AsStringView());
   CFX_XMLNode* pXMLNode = GetXMLMappingNode();
   if (pXMLNode && pXMLNode->GetType() == FX_XMLNODE_Element) {
     CFX_XMLElement* pXMLElement = static_cast<CFX_XMLElement*>(pXMLNode);
@@ -3420,13 +3416,13 @@
       pXMLElement->SetTextData(pValue->ToWideString());
     }
   } else {
-    CFX_WideString wsTextData;
+    WideString wsTextData;
     CFX_XMLNode* pXMLNode = GetXMLMappingNode();
     if (pXMLNode && pXMLNode->GetType() == FX_XMLNODE_Element) {
       CFX_XMLElement* pXMLElement = static_cast<CFX_XMLElement*>(pXMLNode);
       wsTextData = pXMLElement->GetTextData();
     }
-    pValue->SetString(wsTextData.UTF8Encode().AsStringC());
+    pValue->SetString(wsTextData.UTF8Encode().AsStringView());
   }
 }
 
@@ -3548,7 +3544,7 @@
     ThrowInvalidPropertyException();
     return;
   }
-  pValue->SetString(FX_UTF8Encode(CFX_WideStringC(L"0", 1)).AsStringC());
+  pValue->SetString(FX_UTF8Encode(WideStringView(L"0", 1)).AsStringView());
 }
 
 void CXFA_Node::Script_Encrypt_Format(CFXJSE_Value* pValue,
@@ -3561,7 +3557,7 @@
 }
 
 bool CXFA_Node::SetAttribute(XFA_ATTRIBUTE eAttr,
-                             const CFX_WideStringC& wsValue,
+                             const WideStringView& wsValue,
                              bool bNotify) {
   const XFA_ATTRIBUTEINFO* pAttr = XFA_GetAttributeByID(eAttr);
   if (!pAttr)
@@ -3582,7 +3578,7 @@
                      bNotify);
     } break;
     case XFA_ATTRIBUTETYPE_Cdata:
-      return SetCData(pAttr->eName, CFX_WideString(wsValue), bNotify);
+      return SetCData(pAttr->eName, WideString(wsValue), bNotify);
     case XFA_ATTRIBUTETYPE_Boolean:
       return SetBoolean(pAttr->eName, wsValue != L"0", bNotify);
     case XFA_ATTRIBUTETYPE_Integer:
@@ -3599,7 +3595,7 @@
 }
 
 bool CXFA_Node::GetAttribute(XFA_ATTRIBUTE eAttr,
-                             CFX_WideString& wsValue,
+                             WideString& wsValue,
                              bool bUseDefault) {
   const XFA_ATTRIBUTEINFO* pAttr = XFA_GetAttributeByID(eAttr);
   if (!pAttr)
@@ -3621,7 +3617,7 @@
       return true;
     }
     case XFA_ATTRIBUTETYPE_Cdata: {
-      CFX_WideStringC wsValueC;
+      WideStringView wsValueC;
       if (!TryCData(pAttr->eName, wsValueC, bUseDefault))
         return false;
 
@@ -3657,8 +3653,8 @@
   }
 }
 
-bool CXFA_Node::SetAttribute(const CFX_WideStringC& wsAttr,
-                             const CFX_WideStringC& wsValue,
+bool CXFA_Node::SetAttribute(const WideStringView& wsAttr,
+                             const WideStringView& wsValue,
                              bool bNotify) {
   const XFA_ATTRIBUTEINFO* pAttributeInfo = XFA_GetAttributeByName(wsValue);
   if (pAttributeInfo) {
@@ -3669,22 +3665,22 @@
   return true;
 }
 
-bool CXFA_Node::GetAttribute(const CFX_WideStringC& wsAttr,
-                             CFX_WideString& wsValue,
+bool CXFA_Node::GetAttribute(const WideStringView& wsAttr,
+                             WideString& wsValue,
                              bool bUseDefault) {
   const XFA_ATTRIBUTEINFO* pAttributeInfo = XFA_GetAttributeByName(wsAttr);
   if (pAttributeInfo) {
     return GetAttribute(pAttributeInfo->eName, wsValue, bUseDefault);
   }
   void* pKey = GetMapKey_Custom(wsAttr);
-  CFX_WideStringC wsValueC;
+  WideStringView wsValueC;
   if (GetMapModuleString(pKey, wsValueC)) {
     wsValue = wsValueC;
   }
   return true;
 }
 
-bool CXFA_Node::RemoveAttribute(const CFX_WideStringC& wsAttr) {
+bool CXFA_Node::RemoveAttribute(const WideStringView& wsAttr) {
   void* pKey = GetMapKey_Custom(wsAttr);
   RemoveMapModuleKey(pKey);
   return true;
@@ -3755,16 +3751,16 @@
 }
 
 bool CXFA_Node::SetCData(XFA_ATTRIBUTE eAttr,
-                         const CFX_WideString& wsValue,
+                         const WideString& wsValue,
                          bool bNotify,
                          bool bScriptModify) {
   void* pKey = GetMapKey_Element(GetElementType(), eAttr);
   OnChanging(eAttr, bNotify);
   if (eAttr == XFA_ATTRIBUTE_Value) {
-    CFX_WideString* pClone = new CFX_WideString(wsValue);
+    WideString* pClone = new WideString(wsValue);
     SetUserData(pKey, pClone, &deleteWideStringCallBack);
   } else {
-    SetMapModuleString(pKey, wsValue.AsStringC());
+    SetMapModuleString(pKey, wsValue.AsStringView());
     if (eAttr == XFA_ATTRIBUTE_Name)
       UpdateNameHash();
   }
@@ -3787,7 +3783,7 @@
       case FX_XMLNODE_Element:
         if (IsAttributeInXML()) {
           static_cast<CFX_XMLElement*>(m_pXMLNode)
-              ->SetString(CFX_WideString(GetCData(XFA_ATTRIBUTE_QualifiedName)),
+              ->SetString(WideString(GetCData(XFA_ATTRIBUTE_QualifiedName)),
                           wsValue);
         } else {
           bool bDeleteChildren = true;
@@ -3820,7 +3816,7 @@
   const XFA_ATTRIBUTEINFO* pInfo = XFA_GetAttributeByID(eAttr);
   if (pInfo) {
     ASSERT(m_pXMLNode->GetType() == FX_XMLNODE_Element);
-    CFX_WideString wsAttrName = pInfo->pName;
+    WideString wsAttrName = pInfo->pName;
     if (pInfo->eName == XFA_ATTRIBUTE_ContentType) {
       wsAttrName = L"xfa:" + wsAttrName;
     }
@@ -3829,13 +3825,13 @@
   return true;
 }
 
-bool CXFA_Node::SetAttributeValue(const CFX_WideString& wsValue,
-                                  const CFX_WideString& wsXMLValue,
+bool CXFA_Node::SetAttributeValue(const WideString& wsValue,
+                                  const WideString& wsXMLValue,
                                   bool bNotify,
                                   bool bScriptModify) {
   void* pKey = GetMapKey_Element(GetElementType(), XFA_ATTRIBUTE_Value);
   OnChanging(XFA_ATTRIBUTE_Value, bNotify);
-  CFX_WideString* pClone = new CFX_WideString(wsValue);
+  WideString* pClone = new WideString(wsValue);
   SetUserData(pKey, pClone, &deleteWideStringCallBack);
   OnChanged(XFA_ATTRIBUTE_Value, bNotify, bScriptModify);
   if (IsNeedSavingXMLNode()) {
@@ -3844,7 +3840,7 @@
       case FX_XMLNODE_Element:
         if (IsAttributeInXML()) {
           static_cast<CFX_XMLElement*>(m_pXMLNode)
-              ->SetString(CFX_WideString(GetCData(XFA_ATTRIBUTE_QualifiedName)),
+              ->SetString(WideString(GetCData(XFA_ATTRIBUTE_QualifiedName)),
                           wsXMLValue);
         } else {
           bool bDeleteChildren = true;
@@ -3876,18 +3872,18 @@
 }
 
 bool CXFA_Node::TryCData(XFA_ATTRIBUTE eAttr,
-                         CFX_WideString& wsValue,
+                         WideString& wsValue,
                          bool bUseDefault,
                          bool bProto) {
   void* pKey = GetMapKey_Element(GetElementType(), eAttr);
   if (eAttr == XFA_ATTRIBUTE_Value) {
-    CFX_WideString* pStr = (CFX_WideString*)GetUserData(pKey, bProto);
+    WideString* pStr = (WideString*)GetUserData(pKey, bProto);
     if (pStr) {
       wsValue = *pStr;
       return true;
     }
   } else {
-    CFX_WideStringC wsValueC;
+    WideStringView wsValueC;
     if (GetMapModuleString(pKey, wsValueC)) {
       wsValue = wsValueC;
       return true;
@@ -3906,14 +3902,14 @@
 }
 
 bool CXFA_Node::TryCData(XFA_ATTRIBUTE eAttr,
-                         CFX_WideStringC& wsValue,
+                         WideStringView& wsValue,
                          bool bUseDefault,
                          bool bProto) {
   void* pKey = GetMapKey_Element(GetElementType(), eAttr);
   if (eAttr == XFA_ATTRIBUTE_Value) {
-    CFX_WideString* pStr = (CFX_WideString*)GetUserData(pKey, bProto);
+    WideString* pStr = (WideString*)GetUserData(pKey, bProto);
     if (pStr) {
-      wsValue = pStr->AsStringC();
+      wsValue = pStr->AsStringView();
       return true;
     }
   } else {
@@ -3927,7 +3923,7 @@
   void* pValue = nullptr;
   if (XFA_GetAttributeDefaultValue(pValue, GetElementType(), eAttr,
                                    XFA_ATTRIBUTETYPE_Cdata, m_ePacket)) {
-    wsValue = (CFX_WideStringC)(const wchar_t*)pValue;
+    wsValue = (WideStringView)(const wchar_t*)pValue;
     return true;
   }
   return false;
@@ -3971,7 +3967,7 @@
               ->SetString(pInfo->pName, pValue ? L"1" : L"0");
           break;
         case XFA_ATTRIBUTETYPE_Integer: {
-          CFX_WideString wsValue;
+          WideString wsValue;
           wsValue.Format(
               L"%d", static_cast<int32_t>(reinterpret_cast<uintptr_t>(pValue)));
           static_cast<CFX_XMLElement*>(m_pXMLNode)
@@ -4017,8 +4013,8 @@
   return iBytes == sizeof(void*) && memcpy(&pData, pData, iBytes);
 }
 
-bool CXFA_Node::SetScriptContent(const CFX_WideString& wsContent,
-                                 const CFX_WideString& wsXMLValue,
+bool CXFA_Node::SetScriptContent(const WideString& wsContent,
+                                 const WideString& wsXMLValue,
                                  bool bNotify,
                                  bool bScriptModify,
                                  bool bSyncData) {
@@ -4038,7 +4034,7 @@
                                       bScriptModify, false);
         CXFA_Node* pBind = GetBindData();
         if (bSyncData && pBind) {
-          std::vector<CFX_WideString> wsSaveTextArray;
+          std::vector<WideString> wsSaveTextArray;
           size_t iSize = 0;
           if (!wsContent.IsEmpty()) {
             FX_STRSIZE iStart = 0;
@@ -4132,12 +4128,12 @@
       break;
     }
     case XFA_ObjectType::ContentNode: {
-      CFX_WideString wsContentType;
+      WideString wsContentType;
       if (GetElementType() == XFA_Element::ExData) {
         GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType, false);
         if (wsContentType == L"text/html") {
           wsContentType = L"";
-          SetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType.AsStringC());
+          SetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType.AsStringView());
         }
       }
       CXFA_Node* pContentRawDataNode = GetNodeItem(XFA_NODEITEM_FirstChild);
@@ -4193,8 +4189,8 @@
   return true;
 }
 
-bool CXFA_Node::SetContent(const CFX_WideString& wsContent,
-                           const CFX_WideString& wsXMLValue,
+bool CXFA_Node::SetContent(const WideString& wsContent,
+                           const WideString& wsXMLValue,
                            bool bNotify,
                            bool bScriptModify,
                            bool bSyncData) {
@@ -4202,16 +4198,16 @@
                           bSyncData);
 }
 
-CFX_WideString CXFA_Node::GetScriptContent(bool bScriptModify) {
-  CFX_WideString wsContent;
-  return TryContent(wsContent, bScriptModify) ? wsContent : CFX_WideString();
+WideString CXFA_Node::GetScriptContent(bool bScriptModify) {
+  WideString wsContent;
+  return TryContent(wsContent, bScriptModify) ? wsContent : WideString();
 }
 
-CFX_WideString CXFA_Node::GetContent() {
+WideString CXFA_Node::GetContent() {
   return GetScriptContent();
 }
 
-bool CXFA_Node::TryContent(CFX_WideString& wsContent,
+bool CXFA_Node::TryContent(WideString& wsContent,
                            bool bScriptModify,
                            bool bProto) {
   CXFA_Node* pNode = nullptr;
@@ -4238,7 +4234,7 @@
       if (!pContentRawDataNode) {
         XFA_Element element = XFA_Element::Sharptext;
         if (GetElementType() == XFA_Element::ExData) {
-          CFX_WideString wsContentType;
+          WideString wsContentType;
           GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType, false);
           if (wsContentType == L"text/html") {
             element = XFA_Element::SharpxHTML;
@@ -4298,7 +4294,7 @@
   }
 }
 
-bool CXFA_Node::TryNamespace(CFX_WideString& wsNamespace) {
+bool CXFA_Node::TryNamespace(WideString& wsNamespace) {
   wsNamespace.clear();
   if (IsModelNode() || GetElementType() == XFA_Element::Packet) {
     CFX_XMLNode* pXMLNode = GetXMLMappingNode();
@@ -4554,17 +4550,17 @@
       if (pNode->m_pXMLNode->GetType() == FX_XMLNODE_Element) {
         CFX_XMLElement* pXMLElement =
             static_cast<CFX_XMLElement*>(pNode->m_pXMLNode);
-        CFX_WideStringC wsAttributeName =
+        WideStringView wsAttributeName =
             pNode->GetCData(XFA_ATTRIBUTE_QualifiedName);
         // TODO(tsepez): check usage of c_str() below.
         pXMLElement->RemoveAttribute(wsAttributeName.unterminated_c_str());
       }
-      CFX_WideString wsName;
+      WideString wsName;
       pNode->GetAttribute(XFA_ATTRIBUTE_Name, wsName, false);
       CFX_XMLElement* pNewXMLElement = new CFX_XMLElement(wsName);
-      CFX_WideStringC wsValue = GetCData(XFA_ATTRIBUTE_Value);
+      WideStringView wsValue = GetCData(XFA_ATTRIBUTE_Value);
       if (!wsValue.IsEmpty()) {
-        pNewXMLElement->SetTextData(CFX_WideString(wsValue));
+        pNewXMLElement->SetTextData(WideString(wsValue));
       }
       pNode->m_pXMLNode = pNewXMLElement;
       pNode->SetEnum(XFA_ATTRIBUTE_Contains, XFA_ATTRIBUTEENUM_Unknown);
@@ -4576,7 +4572,7 @@
   return true;
 }
 
-CXFA_Node* CXFA_Node::GetFirstChildByName(const CFX_WideStringC& wsName) const {
+CXFA_Node* CXFA_Node::GetFirstChildByName(const WideStringView& wsName) const {
   return GetFirstChildByName(FX_HashCode_GetW(wsName, false));
 }
 
@@ -4611,7 +4607,7 @@
 }
 
 CXFA_Node* CXFA_Node::GetNextSameNameSibling(
-    const CFX_WideStringC& wsNodeName) const {
+    const WideStringView& wsNodeName) const {
   return GetNextSameNameSibling(FX_HashCode_GetW(wsNodeName, false));
 }
 
@@ -4641,7 +4637,7 @@
   return pScriptContext->GetIndexByClassName(const_cast<CXFA_Node*>(this));
 }
 
-void CXFA_Node::GetSOMExpression(CFX_WideString& wsSOMExpression) {
+void CXFA_Node::GetSOMExpression(WideString& wsSOMExpression) {
   CXFA_ScriptContext* pScriptContext = m_pDocument->GetScriptContext();
   if (!pScriptContext) {
     return;
@@ -4664,8 +4660,8 @@
         break;
       }
       if (eType == XFA_Element::InstanceManager) {
-        CFX_WideStringC wsName = GetCData(XFA_ATTRIBUTE_Name);
-        CFX_WideStringC wsInstName = pNode->GetCData(XFA_ATTRIBUTE_Name);
+        WideStringView wsName = GetCData(XFA_ATTRIBUTE_Name);
+        WideStringView wsInstName = pNode->GetCData(XFA_ATTRIBUTE_Name);
         if (wsInstName.GetLength() > 0 && wsInstName[0] == '_' &&
             wsInstName.Right(wsInstName.GetLength() - 1) == wsName) {
           pInstanceMgr = pNode;
@@ -4733,7 +4729,7 @@
   }
 }
 
-int32_t CXFA_Node::execSingleEventByName(const CFX_WideStringC& wsEventName,
+int32_t CXFA_Node::execSingleEventByName(const WideStringView& wsEventName,
                                          XFA_Element eType) {
   int32_t iRet = XFA_EVENTERROR_NotExist;
   const XFA_ExecEventParaInfo* eventParaInfo =
@@ -4797,7 +4793,7 @@
 void CXFA_Node::UpdateNameHash() {
   const XFA_NOTSUREATTRIBUTE* pNotsure =
       XFA_GetNotsureAttribute(GetElementType(), XFA_ATTRIBUTE_Name);
-  CFX_WideStringC wsName;
+  WideStringView wsName;
   if (!pNotsure || pNotsure->eType == XFA_ATTRIBUTETYPE_Cdata) {
     wsName = GetCData(XFA_ATTRIBUTE_Name);
     m_dwNameHash = FX_HashCode_GetW(wsName, false);
@@ -4809,7 +4805,7 @@
 
 CFX_XMLNode* CXFA_Node::CreateXMLMappingNode() {
   if (!m_pXMLNode) {
-    CFX_WideString wsTag(GetCData(XFA_ATTRIBUTE_Name));
+    WideString wsTag(GetCData(XFA_ATTRIBUTE_Name));
     m_pXMLNode = new CFX_XMLElement(wsTag);
     SetFlag(XFA_NodeFlag_OwnXMLNode, false);
   }
@@ -4852,19 +4848,19 @@
   return false;
 }
 
-void CXFA_Node::SetMapModuleString(void* pKey, const CFX_WideStringC& wsValue) {
+void CXFA_Node::SetMapModuleString(void* pKey, const WideStringView& wsValue) {
   SetMapModuleBuffer(pKey, (void*)wsValue.unterminated_c_str(),
                      wsValue.GetLength() * sizeof(wchar_t));
 }
 
-bool CXFA_Node::GetMapModuleString(void* pKey, CFX_WideStringC& wsValue) {
+bool CXFA_Node::GetMapModuleString(void* pKey, WideStringView& wsValue) {
   void* pValue;
   int32_t iBytes;
   if (!GetMapModuleBuffer(pKey, pValue, iBytes))
     return false;
   // Defensive measure: no out-of-bounds pointers even if zero length.
   int32_t iChars = iBytes / sizeof(wchar_t);
-  wsValue = CFX_WideStringC(iChars ? (const wchar_t*)pValue : nullptr, iChars);
+  wsValue = WideStringView(iChars ? (const wchar_t*)pValue : nullptr, iChars);
   return true;
 }
 
@@ -5047,8 +5043,8 @@
     }
   }
   if (pDstModule->IsNodeV()) {
-    CFX_WideString wsValue = pDstModule->GetScriptContent(false);
-    CFX_WideString wsFormatValue(wsValue);
+    WideString wsValue = pDstModule->GetScriptContent(false);
+    WideString wsFormatValue(wsValue);
     CXFA_WidgetData* pWidgetData = pDstModule->GetContainerWidgetData();
     if (pWidgetData) {
       pWidgetData->GetFormatDataValue(wsValue, wsFormatValue);
@@ -5076,15 +5072,13 @@
   pSrcModule->MoveBufferMapData(pDstModule, pKey);
 }
 
-void CXFA_Node::ThrowMissingPropertyException(
-    const CFX_WideString& obj,
-    const CFX_WideString& prop) const {
+void CXFA_Node::ThrowMissingPropertyException(const WideString& obj,
+                                              const WideString& prop) const {
   ThrowException(L"'%s' doesn't have property '%s'.", obj.c_str(),
                  prop.c_str());
 }
 
-void CXFA_Node::ThrowTooManyOccurancesException(
-    const CFX_WideString& obj) const {
+void CXFA_Node::ThrowTooManyOccurancesException(const WideString& obj) const {
   ThrowException(
       L"The element [%s] has violated its allowable number of occurrences.",
       obj.c_str());
diff --git a/xfa/fxfa/parser/cxfa_node.h b/xfa/fxfa/parser/cxfa_node.h
index db4b2ce..7faed0e 100644
--- a/xfa/fxfa/parser/cxfa_node.h
+++ b/xfa/fxfa/parser/cxfa_node.h
@@ -105,29 +105,29 @@
   void UpdateNameHash();
   bool HasAttribute(XFA_ATTRIBUTE eAttr, bool bCanInherit = false);
   bool SetAttribute(XFA_ATTRIBUTE eAttr,
-                    const CFX_WideStringC& wsValue,
+                    const WideStringView& wsValue,
                     bool bNotify = false);
   bool GetAttribute(XFA_ATTRIBUTE eAttr,
-                    CFX_WideString& wsValue,
+                    WideString& wsValue,
                     bool bUseDefault = true);
-  bool SetAttribute(const CFX_WideStringC& wsAttr,
-                    const CFX_WideStringC& wsValue,
+  bool SetAttribute(const WideStringView& wsAttr,
+                    const WideStringView& wsValue,
                     bool bNotify = false);
-  bool GetAttribute(const CFX_WideStringC& wsAttr,
-                    CFX_WideString& wsValue,
+  bool GetAttribute(const WideStringView& wsAttr,
+                    WideString& wsValue,
                     bool bUseDefault = true);
-  bool RemoveAttribute(const CFX_WideStringC& wsAttr);
-  bool SetContent(const CFX_WideString& wsContent,
-                  const CFX_WideString& wsXMLValue,
+  bool RemoveAttribute(const WideStringView& wsAttr);
+  bool SetContent(const WideString& wsContent,
+                  const WideString& wsXMLValue,
                   bool bNotify = false,
                   bool bScriptModify = false,
                   bool bSyncData = true);
-  bool TryContent(CFX_WideString& wsContent,
+  bool TryContent(WideString& wsContent,
                   bool bScriptModify = false,
                   bool bProto = true);
-  CFX_WideString GetContent();
+  WideString GetContent();
 
-  bool TryNamespace(CFX_WideString& wsNamespace);
+  bool TryNamespace(WideString& wsNamespace);
 
   bool SetBoolean(XFA_ATTRIBUTE eAttr, bool bValue, bool bNotify = false) {
     return SetValue(eAttr, XFA_ATTRIBUTETYPE_Boolean, (void*)(uintptr_t)bValue,
@@ -163,24 +163,24 @@
     return TryEnum(eAttr, eValue, true) ? eValue : XFA_ATTRIBUTEENUM_Unknown;
   }
   bool SetCData(XFA_ATTRIBUTE eAttr,
-                const CFX_WideString& wsValue,
+                const WideString& wsValue,
                 bool bNotify = false,
                 bool bScriptModify = false);
-  bool SetAttributeValue(const CFX_WideString& wsValue,
-                         const CFX_WideString& wsXMLValue,
+  bool SetAttributeValue(const WideString& wsValue,
+                         const WideString& wsXMLValue,
                          bool bNotify = false,
                          bool bScriptModify = false);
   bool TryCData(XFA_ATTRIBUTE eAttr,
-                CFX_WideString& wsValue,
+                WideString& wsValue,
                 bool bUseDefault = true,
                 bool bProto = true);
   bool TryCData(XFA_ATTRIBUTE eAttr,
-                CFX_WideStringC& wsValue,
+                WideStringView& wsValue,
                 bool bUseDefault = true,
                 bool bProto = true);
-  CFX_WideStringC GetCData(XFA_ATTRIBUTE eAttr) {
-    CFX_WideStringC wsValue;
-    return TryCData(eAttr, wsValue) ? wsValue : CFX_WideStringC();
+  WideStringView GetCData(XFA_ATTRIBUTE eAttr) {
+    WideStringView wsValue;
+    return TryCData(eAttr, wsValue) ? wsValue : WideStringView();
   }
   bool SetMeasure(XFA_ATTRIBUTE eAttr,
                   CXFA_Measurement mValue,
@@ -236,24 +236,24 @@
   bool HasBindItem();
   CXFA_WidgetData* GetWidgetData();
   CXFA_WidgetData* GetContainerWidgetData();
-  bool GetLocaleName(CFX_WideString& wsLocaleName);
+  bool GetLocaleName(WideString& wsLocaleName);
   XFA_ATTRIBUTEENUM GetIntact();
-  CXFA_Node* GetFirstChildByName(const CFX_WideStringC& wsNodeName) const;
+  CXFA_Node* GetFirstChildByName(const WideStringView& wsNodeName) const;
   CXFA_Node* GetFirstChildByName(uint32_t dwNodeNameHash) const;
   CXFA_Node* GetFirstChildByClass(XFA_Element eType) const;
   CXFA_Node* GetNextSameNameSibling(uint32_t dwNodeNameHash) const;
-  CXFA_Node* GetNextSameNameSibling(const CFX_WideStringC& wsNodeName) const;
+  CXFA_Node* GetNextSameNameSibling(const WideStringView& wsNodeName) const;
   CXFA_Node* GetNextSameClassSibling(XFA_Element eType) const;
   int32_t GetNodeSameNameIndex() const;
   int32_t GetNodeSameClassIndex() const;
-  void GetSOMExpression(CFX_WideString& wsSOMExpression);
+  void GetSOMExpression(WideString& wsSOMExpression);
   CXFA_Node* GetInstanceMgrOfSubform();
 
   CXFA_Node* GetOccurNode();
   void Script_TreeClass_ResolveNode(CFXJSE_Arguments* pArguments);
   void Script_TreeClass_ResolveNodes(CFXJSE_Arguments* pArguments);
   void Script_Som_ResolveNodeList(CFXJSE_Value* pValue,
-                                  CFX_WideString wsExpression,
+                                  WideString wsExpression,
                                   uint32_t dwFlag,
                                   CXFA_Node* refNode = nullptr);
   void Script_TreeClass_All(CFXJSE_Value* pValue,
@@ -540,7 +540,7 @@
             uint16_t ePacket,
             XFA_ObjectType oType,
             XFA_Element eType,
-            const CFX_WideStringC& elementName);
+            const WideStringView& elementName);
   ~CXFA_Node() override;
 
   bool HasFlag(XFA_NodeFlag dwFlag) const;
@@ -556,20 +556,20 @@
   void OnRemoved(bool bNotify);
   void OnChanging(XFA_ATTRIBUTE eAttr, bool bNotify);
   void OnChanged(XFA_ATTRIBUTE eAttr, bool bNotify, bool bScriptModify);
-  int32_t execSingleEventByName(const CFX_WideStringC& wsEventName,
+  int32_t execSingleEventByName(const WideStringView& wsEventName,
                                 XFA_Element eType);
-  bool SetScriptContent(const CFX_WideString& wsContent,
-                        const CFX_WideString& wsXMLValue,
+  bool SetScriptContent(const WideString& wsContent,
+                        const WideString& wsXMLValue,
                         bool bNotify = true,
                         bool bScriptModify = false,
                         bool bSyncData = true);
-  CFX_WideString GetScriptContent(bool bScriptModify = false);
+  WideString GetScriptContent(bool bScriptModify = false);
   XFA_MAPMODULEDATA* CreateMapModuleData();
   XFA_MAPMODULEDATA* GetMapModuleData() const;
   void SetMapModuleValue(void* pKey, void* pValue);
   bool GetMapModuleValue(void* pKey, void*& pValue);
-  void SetMapModuleString(void* pKey, const CFX_WideStringC& wsValue);
-  bool GetMapModuleString(void* pKey, CFX_WideStringC& wsValue);
+  void SetMapModuleString(void* pKey, const WideStringView& wsValue);
+  bool GetMapModuleString(void* pKey, WideStringView& wsValue);
   void SetMapModuleBuffer(
       void* pKey,
       void* pValue,
@@ -600,9 +600,9 @@
   XFA_MAPMODULEDATA* m_pMapModuleData;
 
  private:
-  void ThrowMissingPropertyException(const CFX_WideString& obj,
-                                     const CFX_WideString& prop) const;
-  void ThrowTooManyOccurancesException(const CFX_WideString& obj) const;
+  void ThrowMissingPropertyException(const WideString& obj,
+                                     const WideString& prop) const;
+  void ThrowTooManyOccurancesException(const WideString& obj) const;
 };
 
 #endif  // XFA_FXFA_PARSER_CXFA_NODE_H_
diff --git a/xfa/fxfa/parser/cxfa_nodehelper.cpp b/xfa/fxfa/parser/cxfa_nodehelper.cpp
index 4f1ed04..bc91c66 100644
--- a/xfa/fxfa/parser/cxfa_nodehelper.cpp
+++ b/xfa/fxfa/parser/cxfa_nodehelper.cpp
@@ -31,7 +31,7 @@
     return nullptr;
 
   std::vector<CXFA_Node*> siblings;
-  uint32_t uNameHash = FX_HashCode_GetW(CFX_WideStringC(pwsName), false);
+  uint32_t uNameHash = FX_HashCode_GetW(WideStringView(pwsName), false);
   NodeAcc_TraverseAnySiblings(parent, uNameHash, &siblings, bIsClassName);
   return !siblings.empty() ? siblings[0] : nullptr;
 }
@@ -228,13 +228,13 @@
 }
 
 void CXFA_NodeHelper::GetNameExpression(CXFA_Node* refNode,
-                                        CFX_WideString& wsName,
+                                        WideString& wsName,
                                         bool bIsAllPath,
                                         XFA_LOGIC_TYPE eLogicType) {
   wsName.clear();
   if (bIsAllPath) {
     GetNameExpression(refNode, wsName, false, eLogicType);
-    CFX_WideString wsParent;
+    WideString wsParent;
     CXFA_Node* parent =
         ResolveNodes_GetParent(refNode, XFA_LOGIC_NoTransparent);
     while (parent) {
@@ -247,7 +247,7 @@
     return;
   }
 
-  CFX_WideString ws;
+  WideString ws;
   bool bIsProperty = NodeIsProperty(refNode);
   if (refNode->IsUnnamed() ||
       (bIsProperty && refNode->GetElementType() != XFA_Element::PageSet)) {
@@ -275,9 +275,9 @@
   return false;
 }
 
-bool CXFA_NodeHelper::CreateNode_ForCondition(CFX_WideString& wsCondition) {
+bool CXFA_NodeHelper::CreateNode_ForCondition(WideString& wsCondition) {
   int32_t iLen = wsCondition.GetLength();
-  CFX_WideString wsIndex(L"0");
+  WideString wsIndex(L"0");
   bool bAll = false;
   if (iLen == 0) {
     m_iCreateFlag = XFA_RESOLVENODE_RSTYPE_CreateNodeOne;
@@ -314,8 +314,8 @@
 }
 
 bool CXFA_NodeHelper::ResolveNodes_CreateNode(
-    CFX_WideString wsName,
-    CFX_WideString wsCondition,
+    WideString wsName,
+    WideString wsCondition,
     bool bLastNode,
     CXFA_ScriptContext* pScriptContext) {
   if (!m_pCreateParent) {
@@ -336,7 +336,7 @@
     CreateNode_ForCondition(wsCondition);
   }
   if (bIsClassName) {
-    XFA_Element eType = XFA_GetElementTypeForName(wsName.AsStringC());
+    XFA_Element eType = XFA_GetElementTypeForName(wsName.AsStringView());
     if (eType == XFA_Element::Unknown)
       return false;
 
@@ -358,7 +358,7 @@
     for (int32_t iIndex = 0; iIndex < m_iCreateCount; iIndex++) {
       CXFA_Node* pNewNode = m_pCreateParent->CreateSamePacketNode(eClassType);
       if (pNewNode) {
-        pNewNode->SetAttribute(XFA_ATTRIBUTE_Name, wsName.AsStringC());
+        pNewNode->SetAttribute(XFA_ATTRIBUTE_Name, wsName.AsStringView());
         pNewNode->CreateXMLMappingNode();
         m_pCreateParent->InsertChild(pNewNode);
         if (iIndex == m_iCreateCount - 1) {
diff --git a/xfa/fxfa/parser/cxfa_nodehelper.h b/xfa/fxfa/parser/cxfa_nodehelper.h
index cf6c2f1..4c7d7ae 100644
--- a/xfa/fxfa/parser/cxfa_nodehelper.h
+++ b/xfa/fxfa/parser/cxfa_nodehelper.h
@@ -49,15 +49,15 @@
                    bool bIsProperty = false,
                    bool bIsClassIndex = false);
   void GetNameExpression(CXFA_Node* refNode,
-                         CFX_WideString& wsName,
+                         WideString& wsName,
                          bool bIsAllPath,
                          XFA_LOGIC_TYPE eLogicType = XFA_LOGIC_NoTransparent);
   bool NodeIsTransparent(CXFA_Node* refNode);
-  bool ResolveNodes_CreateNode(CFX_WideString wsName,
-                               CFX_WideString wsCondition,
+  bool ResolveNodes_CreateNode(WideString wsName,
+                               WideString wsCondition,
                                bool bLastNode,
                                CXFA_ScriptContext* pScriptContext);
-  bool CreateNode_ForCondition(CFX_WideString& wsCondition);
+  bool CreateNode_ForCondition(WideString& wsCondition);
   void SetCreateNodeType(CXFA_Node* refNode);
   bool NodeIsProperty(CXFA_Node* refNode);
 
diff --git a/xfa/fxfa/parser/cxfa_nodelist.cpp b/xfa/fxfa/parser/cxfa_nodelist.cpp
index f47a1b1..cea1f12 100644
--- a/xfa/fxfa/parser/cxfa_nodelist.cpp
+++ b/xfa/fxfa/parser/cxfa_nodelist.cpp
@@ -17,14 +17,14 @@
     : CXFA_Object(pDocument,
                   XFA_ObjectType::NodeList,
                   XFA_Element::NodeList,
-                  CFX_WideStringC(L"nodeList")) {
+                  WideStringView(L"nodeList")) {
   m_pDocument->GetScriptContext()->AddToCacheList(
       std::unique_ptr<CXFA_NodeList>(this));
 }
 
 CXFA_NodeList::~CXFA_NodeList() {}
 
-CXFA_Node* CXFA_NodeList::NamedItem(const CFX_WideStringC& wsName) {
+CXFA_Node* CXFA_NodeList::NamedItem(const WideStringView& wsName) {
   uint32_t dwHashCode = FX_HashCode_GetW(wsName, false);
   int32_t iCount = GetLength();
   for (int32_t i = 0; i < iCount; i++) {
@@ -105,9 +105,9 @@
     return;
   }
 
-  CFX_ByteString szName = pArguments->GetUTF8String(0);
+  ByteString szName = pArguments->GetUTF8String(0);
   CXFA_Node* pNode =
-      NamedItem(CFX_WideString::FromUTF8(szName.AsStringC()).AsStringC());
+      NamedItem(WideString::FromUTF8(szName.AsStringView()).AsStringView());
   if (!pNode)
     return;
 
diff --git a/xfa/fxfa/parser/cxfa_nodelist.h b/xfa/fxfa/parser/cxfa_nodelist.h
index 6fffb7b..2fccd5d 100644
--- a/xfa/fxfa/parser/cxfa_nodelist.h
+++ b/xfa/fxfa/parser/cxfa_nodelist.h
@@ -19,7 +19,7 @@
   explicit CXFA_NodeList(CXFA_Document* pDocument);
   ~CXFA_NodeList() override;
 
-  CXFA_Node* NamedItem(const CFX_WideStringC& wsName);
+  CXFA_Node* NamedItem(const WideStringView& wsName);
   virtual int32_t GetLength() = 0;
   virtual bool Append(CXFA_Node* pNode) = 0;
   virtual bool Insert(CXFA_Node* pNewNode, CXFA_Node* pBeforeNode) = 0;
diff --git a/xfa/fxfa/parser/cxfa_nodelocale.cpp b/xfa/fxfa/parser/cxfa_nodelocale.cpp
index 78b0cef..d0d1fd3 100644
--- a/xfa/fxfa/parser/cxfa_nodelocale.cpp
+++ b/xfa/fxfa/parser/cxfa_nodelocale.cpp
@@ -24,7 +24,7 @@
 
 }  // namespace
 
-CFX_WideString XFA_PatternToString(FX_LOCALENUMSUBCATEGORY category) {
+WideString XFA_PatternToString(FX_LOCALENUMSUBCATEGORY category) {
   switch (category) {
     case FX_LOCALENUMPATTERN_Percent:
       return g_FX_Percent;
@@ -35,20 +35,19 @@
     case FX_LOCALENUMPATTERN_Integer:
       return g_FX_Integer;
   }
-  return CFX_WideString();
+  return WideString();
 }
 
 CXFA_NodeLocale::CXFA_NodeLocale(CXFA_Node* pLocale) : m_pLocale(pLocale) {}
 
 CXFA_NodeLocale::~CXFA_NodeLocale() {}
 
-CFX_WideString CXFA_NodeLocale::GetName() const {
-  return CFX_WideString(m_pLocale ? m_pLocale->GetCData(XFA_ATTRIBUTE_Name)
-                                  : nullptr);
+WideString CXFA_NodeLocale::GetName() const {
+  return WideString(m_pLocale ? m_pLocale->GetCData(XFA_ATTRIBUTE_Name)
+                              : nullptr);
 }
 
-CFX_WideString CXFA_NodeLocale::GetNumbericSymbol(
-    FX_LOCALENUMSYMBOL eType) const {
+WideString CXFA_NodeLocale::GetNumbericSymbol(FX_LOCALENUMSYMBOL eType) const {
   switch (eType) {
     case FX_LOCALENUMSYMBOL_Decimal:
       return GetSymbol(XFA_Element::NumberSymbols, L"decimal");
@@ -65,25 +64,25 @@
     case FX_LOCALENUMSYMBOL_CurrencyName:
       return GetSymbol(XFA_Element::CurrencySymbols, L"isoname");
   }
-  return CFX_WideString();
+  return WideString();
 }
 
-CFX_WideString CXFA_NodeLocale::GetDateTimeSymbols() const {
+WideString CXFA_NodeLocale::GetDateTimeSymbols() const {
   CXFA_Node* pSymbols =
       m_pLocale ? m_pLocale->GetChild(0, XFA_Element::DateTimeSymbols)
                 : nullptr;
-  return pSymbols ? pSymbols->GetContent() : CFX_WideString();
+  return pSymbols ? pSymbols->GetContent() : WideString();
 }
 
-CFX_WideString CXFA_NodeLocale::GetMonthName(int32_t nMonth, bool bAbbr) const {
+WideString CXFA_NodeLocale::GetMonthName(int32_t nMonth, bool bAbbr) const {
   return GetCalendarSymbol(XFA_Element::MonthNames, nMonth, bAbbr);
 }
 
-CFX_WideString CXFA_NodeLocale::GetDayName(int32_t nWeek, bool bAbbr) const {
+WideString CXFA_NodeLocale::GetDayName(int32_t nWeek, bool bAbbr) const {
   return GetCalendarSymbol(XFA_Element::DayNames, nWeek, bAbbr);
 }
 
-CFX_WideString CXFA_NodeLocale::GetMeridiemName(bool bAM) const {
+WideString CXFA_NodeLocale::GetMeridiemName(bool bAM) const {
   return GetCalendarSymbol(XFA_Element::MeridiemNames, bAM ? 0 : 1, false);
 }
 
@@ -91,11 +90,11 @@
   return CXFA_TimeZoneProvider().GetTimeZone();
 }
 
-CFX_WideString CXFA_NodeLocale::GetEraName(bool bAD) const {
+WideString CXFA_NodeLocale::GetEraName(bool bAD) const {
   return GetCalendarSymbol(XFA_Element::EraNames, bAD ? 1 : 0, false);
 }
 
-CFX_WideString CXFA_NodeLocale::GetDatePattern(
+WideString CXFA_NodeLocale::GetDatePattern(
     FX_LOCALEDATETIMESUBCATEGORY eType) const {
   switch (eType) {
     case FX_LOCALEDATETIMESUBCATEGORY_Short:
@@ -108,10 +107,10 @@
     case FX_LOCALEDATETIMESUBCATEGORY_Long:
       return GetSymbol(XFA_Element::DatePatterns, L"long");
   }
-  return CFX_WideString();
+  return WideString();
 }
 
-CFX_WideString CXFA_NodeLocale::GetTimePattern(
+WideString CXFA_NodeLocale::GetTimePattern(
     FX_LOCALEDATETIMESUBCATEGORY eType) const {
   switch (eType) {
     case FX_LOCALEDATETIMESUBCATEGORY_Short:
@@ -124,20 +123,19 @@
     case FX_LOCALEDATETIMESUBCATEGORY_Long:
       return GetSymbol(XFA_Element::TimePatterns, L"long");
   }
-  return CFX_WideString();
+  return WideString();
 }
 
-CFX_WideString CXFA_NodeLocale::GetNumPattern(
-    FX_LOCALENUMSUBCATEGORY eType) const {
+WideString CXFA_NodeLocale::GetNumPattern(FX_LOCALENUMSUBCATEGORY eType) const {
   return XFA_PatternToString(eType);
 }
 
 CXFA_Node* CXFA_NodeLocale::GetNodeByName(CXFA_Node* pParent,
-                                          const CFX_WideStringC& wsName) const {
+                                          const WideStringView& wsName) const {
   CXFA_Node* pChild =
       pParent ? pParent->GetNodeItem(XFA_NODEITEM_FirstChild) : nullptr;
   while (pChild) {
-    CFX_WideString wsChild;
+    WideString wsChild;
     if (pChild->GetAttribute(XFA_ATTRIBUTE_Name, wsChild)) {
       if (wsChild == wsName)
         return pChild;
@@ -147,29 +145,28 @@
   return nullptr;
 }
 
-CFX_WideString CXFA_NodeLocale::GetSymbol(
-    XFA_Element eElement,
-    const CFX_WideStringC& symbol_type) const {
+WideString CXFA_NodeLocale::GetSymbol(XFA_Element eElement,
+                                      const WideStringView& symbol_type) const {
   CXFA_Node* pSymbols = m_pLocale ? m_pLocale->GetChild(0, eElement) : nullptr;
   CXFA_Node* pSymbol = GetNodeByName(pSymbols, symbol_type);
-  return pSymbol ? pSymbol->GetContent() : CFX_WideString();
+  return pSymbol ? pSymbol->GetContent() : WideString();
 }
 
-CFX_WideString CXFA_NodeLocale::GetCalendarSymbol(XFA_Element eElement,
-                                                  int index,
-                                                  bool bAbbr) const {
+WideString CXFA_NodeLocale::GetCalendarSymbol(XFA_Element eElement,
+                                              int index,
+                                              bool bAbbr) const {
   CXFA_Node* pCalendar =
       m_pLocale ? m_pLocale->GetChild(0, XFA_Element::CalendarSymbols)
                 : nullptr;
   if (!pCalendar)
-    return CFX_WideString();
+    return WideString();
 
   CXFA_Node* pNode = pCalendar->GetFirstChildByClass(eElement);
   for (; pNode; pNode = pNode->GetNextSameClassSibling(eElement)) {
     if (pNode->GetBoolean(XFA_ATTRIBUTE_Abbr) == bAbbr) {
       CXFA_Node* pSymbol = pNode->GetChild(index, XFA_Element::Unknown);
-      return pSymbol ? pSymbol->GetContent() : CFX_WideString();
+      return pSymbol ? pSymbol->GetContent() : WideString();
     }
   }
-  return CFX_WideString();
+  return WideString();
 }
diff --git a/xfa/fxfa/parser/cxfa_nodelocale.h b/xfa/fxfa/parser/cxfa_nodelocale.h
index e051bb6..5ad0d4c 100644
--- a/xfa/fxfa/parser/cxfa_nodelocale.h
+++ b/xfa/fxfa/parser/cxfa_nodelocale.h
@@ -14,7 +14,7 @@
 
 class CXFA_Node;
 
-CFX_WideString XFA_PatternToString(FX_LOCALENUMSUBCATEGORY category);
+WideString XFA_PatternToString(FX_LOCALENUMSUBCATEGORY category);
 
 class CXFA_NodeLocale : public IFX_Locale {
  public:
@@ -22,30 +22,28 @@
   ~CXFA_NodeLocale() override;
 
   // IFX_Locale
-  CFX_WideString GetName() const override;
-  CFX_WideString GetNumbericSymbol(FX_LOCALENUMSYMBOL eType) const override;
+  WideString GetName() const override;
+  WideString GetNumbericSymbol(FX_LOCALENUMSYMBOL eType) const override;
 
-  CFX_WideString GetDateTimeSymbols() const override;
-  CFX_WideString GetMonthName(int32_t nMonth, bool bAbbr) const override;
-  CFX_WideString GetDayName(int32_t nWeek, bool bAbbr) const override;
-  CFX_WideString GetMeridiemName(bool bAM) const override;
+  WideString GetDateTimeSymbols() const override;
+  WideString GetMonthName(int32_t nMonth, bool bAbbr) const override;
+  WideString GetDayName(int32_t nWeek, bool bAbbr) const override;
+  WideString GetMeridiemName(bool bAM) const override;
   FX_TIMEZONE GetTimeZone() const override;
-  CFX_WideString GetEraName(bool bAD) const override;
+  WideString GetEraName(bool bAD) const override;
 
-  CFX_WideString GetDatePattern(
-      FX_LOCALEDATETIMESUBCATEGORY eType) const override;
-  CFX_WideString GetTimePattern(
-      FX_LOCALEDATETIMESUBCATEGORY eType) const override;
-  CFX_WideString GetNumPattern(FX_LOCALENUMSUBCATEGORY eType) const override;
+  WideString GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY eType) const override;
+  WideString GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY eType) const override;
+  WideString GetNumPattern(FX_LOCALENUMSUBCATEGORY eType) const override;
 
  private:
   CXFA_Node* GetNodeByName(CXFA_Node* pParent,
-                           const CFX_WideStringC& wsName) const;
-  CFX_WideString GetSymbol(XFA_Element eElement,
-                           const CFX_WideStringC& symbol_type) const;
-  CFX_WideString GetCalendarSymbol(XFA_Element eElement,
-                                   int index,
-                                   bool bAbbr) const;
+                           const WideStringView& wsName) const;
+  WideString GetSymbol(XFA_Element eElement,
+                       const WideStringView& symbol_type) const;
+  WideString GetCalendarSymbol(XFA_Element eElement,
+                               int index,
+                               bool bAbbr) const;
 
   CFX_UnownedPtr<CXFA_Node> const m_pLocale;
 };
diff --git a/xfa/fxfa/parser/cxfa_object.cpp b/xfa/fxfa/parser/cxfa_object.cpp
index 8ebedf9..c234204 100644
--- a/xfa/fxfa/parser/cxfa_object.cpp
+++ b/xfa/fxfa/parser/cxfa_object.cpp
@@ -16,7 +16,7 @@
 CXFA_Object::CXFA_Object(CXFA_Document* pDocument,
                          XFA_ObjectType objectType,
                          XFA_Element elementType,
-                         const CFX_WideStringC& elementName)
+                         const WideStringView& elementName)
     : CFXJSE_HostObject(kXFA),
       m_pDocument(pDocument),
       m_objectType(objectType),
@@ -33,7 +33,7 @@
     ThrowInvalidPropertyException();
     return;
   }
-  pValue->SetString(FX_UTF8Encode(GetClassName()).AsStringC());
+  pValue->SetString(FX_UTF8Encode(GetClassName()).AsStringView());
 }
 
 void CXFA_Object::ThrowInvalidPropertyException() const {
@@ -45,7 +45,7 @@
 }
 
 void CXFA_Object::ThrowParamCountMismatchException(
-    const CFX_WideString& method) const {
+    const WideString& method) const {
   ThrowException(L"Incorrect number of parameters calling method '%.16s'.",
                  method.c_str());
 }
@@ -55,13 +55,13 @@
 }
 
 void CXFA_Object::ThrowException(const wchar_t* str, ...) const {
-  CFX_WideString wsMessage;
+  WideString wsMessage;
   va_list arg_ptr;
   va_start(arg_ptr, str);
   wsMessage.FormatV(str, arg_ptr);
   va_end(arg_ptr);
   ASSERT(!wsMessage.IsEmpty());
-  FXJSE_ThrowMessage(wsMessage.UTF8Encode().AsStringC());
+  FXJSE_ThrowMessage(wsMessage.UTF8Encode().AsStringView());
 }
 
 CXFA_Node* CXFA_Object::AsNode() {
diff --git a/xfa/fxfa/parser/cxfa_object.h b/xfa/fxfa/parser/cxfa_object.h
index 4f1850f..49442d2 100644
--- a/xfa/fxfa/parser/cxfa_object.h
+++ b/xfa/fxfa/parser/cxfa_object.h
@@ -35,7 +35,7 @@
   CXFA_Object(CXFA_Document* pDocument,
               XFA_ObjectType objectType,
               XFA_Element eType,
-              const CFX_WideStringC& elementName);
+              const WideStringView& elementName);
   ~CXFA_Object() override;
 
   CXFA_Document* GetDocument() const { return m_pDocument.Get(); }
@@ -71,7 +71,7 @@
   const CXFA_NodeList* AsNodeList() const;
 
   XFA_Element GetElementType() const { return m_elementType; }
-  CFX_WideStringC GetClassName() const { return m_elementName; }
+  WideStringView GetClassName() const { return m_elementName; }
   uint32_t GetClassHashCode() const { return m_elementNameHash; }
 
   void Script_ObjectClass_ClassName(CFXJSE_Value* pValue,
@@ -81,7 +81,7 @@
   void ThrowInvalidPropertyException() const;
   void ThrowArgumentMismatchException() const;
   void ThrowIndexOutOfBoundsException() const;
-  void ThrowParamCountMismatchException(const CFX_WideString& method) const;
+  void ThrowParamCountMismatchException(const WideString& method) const;
 
  protected:
   void ThrowException(const wchar_t* str, ...) const;
@@ -91,7 +91,7 @@
   const XFA_Element m_elementType;
 
   const uint32_t m_elementNameHash;
-  const CFX_WideStringC m_elementName;
+  const WideStringView m_elementName;
 };
 
 CXFA_Node* ToNode(CXFA_Object* pObj);
diff --git a/xfa/fxfa/parser/cxfa_resolveprocessor.cpp b/xfa/fxfa/parser/cxfa_resolveprocessor.cpp
index 15c3f14..4d0ec51 100644
--- a/xfa/fxfa/parser/cxfa_resolveprocessor.cpp
+++ b/xfa/fxfa/parser/cxfa_resolveprocessor.cpp
@@ -34,7 +34,7 @@
   if (!rnd.m_CurObject->IsNode()) {
     if (rnd.m_dwStyles & XFA_RESOLVENODE_Attributes) {
       return ResolveForAttributeRs(rnd.m_CurObject, rnd,
-                                   rnd.m_wsName.AsStringC());
+                                   rnd.m_wsName.AsStringView());
     }
     return 0;
   }
@@ -72,7 +72,7 @@
       rnd.m_Objects.push_back(rnd.m_CurObject);
     } else if ((rnd.m_dwStyles & XFA_RESOLVENODE_Attributes) &&
                ResolveForAttributeRs(rnd.m_CurObject, rnd,
-                                     rnd.m_wsName.AsStringC())) {
+                                     rnd.m_wsName.AsStringView())) {
       return 1;
     }
     if (!rnd.m_Objects.empty())
@@ -87,8 +87,8 @@
 }
 
 int32_t CXFA_ResolveProcessor::ResolveAnyChild(CXFA_ResolveNodesData& rnd) {
-  CFX_WideString wsName = rnd.m_wsName;
-  CFX_WideString wsCondition = rnd.m_wsCondition;
+  WideString wsName = rnd.m_wsName;
+  WideString wsCondition = rnd.m_wsCondition;
   CXFA_Node* findNode = nullptr;
   bool bClassName = false;
   if (wsName.GetLength() && wsName[0] == '#') {
@@ -115,8 +115,8 @@
 }
 
 int32_t CXFA_ResolveProcessor::ResolveDollar(CXFA_ResolveNodesData& rnd) {
-  CFX_WideString wsName = rnd.m_wsName;
-  CFX_WideString wsCondition = rnd.m_wsCondition;
+  WideString wsName = rnd.m_wsName;
+  WideString wsCondition = rnd.m_wsCondition;
   int32_t iNameLen = wsName.GetLength();
   if (iNameLen == 1) {
     rnd.m_Objects.push_back(rnd.m_CurObject);
@@ -126,7 +126,7 @@
     return -1;
   }
   XFA_HashCode dwNameHash = static_cast<XFA_HashCode>(FX_HashCode_GetW(
-      CFX_WideStringC(wsName.c_str() + 1, iNameLen - 1), false));
+      WideStringView(wsName.c_str() + 1, iNameLen - 1), false));
   if (dwNameHash == XFA_HASHCODE_Xfa) {
     rnd.m_Objects.push_back(rnd.m_pSC->GetDocument()->GetRoot());
   } else {
@@ -154,7 +154,7 @@
   rndFind.m_CurObject = datasets;
   rndFind.m_wsName = rnd.m_wsName.Right(rnd.m_wsName.GetLength() - 1);
   rndFind.m_uHashName = static_cast<XFA_HashCode>(
-      FX_HashCode_GetW(rndFind.m_wsName.AsStringC(), false));
+      FX_HashCode_GetW(rndFind.m_wsName.AsStringView(), false));
   rndFind.m_nLevel = rnd.m_nLevel + 1;
   rndFind.m_dwStyles = XFA_RESOLVENODE_Children;
   rndFind.m_wsCondition = rnd.m_wsCondition;
@@ -165,10 +165,10 @@
 }
 
 int32_t CXFA_ResolveProcessor::ResolveNumberSign(CXFA_ResolveNodesData& rnd) {
-  CFX_WideString wsName = rnd.m_wsName.Right(rnd.m_wsName.GetLength() - 1);
-  CFX_WideString wsCondition = rnd.m_wsCondition;
+  WideString wsName = rnd.m_wsName.Right(rnd.m_wsName.GetLength() - 1);
+  WideString wsCondition = rnd.m_wsCondition;
   CXFA_Node* curNode = ToNode(rnd.m_CurObject);
-  if (ResolveForAttributeRs(curNode, rnd, wsName.AsStringC()))
+  if (ResolveForAttributeRs(curNode, rnd, wsName.AsStringView()))
     return 1;
 
   CXFA_ResolveNodesData rndFind;
@@ -179,7 +179,7 @@
   rndFind.m_dwStyles &= ~XFA_RESOLVENODE_Attributes;
   rndFind.m_wsName = wsName;
   rndFind.m_uHashName = static_cast<XFA_HashCode>(
-      FX_HashCode_GetW(rndFind.m_wsName.AsStringC(), false));
+      FX_HashCode_GetW(rndFind.m_wsName.AsStringView(), false));
   rndFind.m_wsCondition = wsCondition;
   rndFind.m_CurObject = curNode;
   ResolveNormal(rndFind);
@@ -199,7 +199,7 @@
 int32_t CXFA_ResolveProcessor::ResolveForAttributeRs(
     CXFA_Object* curNode,
     CXFA_ResolveNodesData& rnd,
-    const CFX_WideStringC& strAttr) {
+    const WideStringView& strAttr) {
   const XFA_SCRIPTATTRIBUTEINFO* lpScriptAttribute =
       XFA_GetScriptAttributeByName(curNode->GetElementType(), strAttr);
   if (!lpScriptAttribute)
@@ -218,9 +218,9 @@
   CXFA_Node* curNode = rnd.m_CurObject->AsNode();
   size_t nNum = rnd.m_Objects.size();
   uint32_t dwStyles = rnd.m_dwStyles;
-  CFX_WideString& wsName = rnd.m_wsName;
+  WideString& wsName = rnd.m_wsName;
   XFA_HashCode uNameHash = rnd.m_uHashName;
-  CFX_WideString& wsCondition = rnd.m_wsCondition;
+  WideString& wsCondition = rnd.m_wsCondition;
   CXFA_ResolveNodesData rndFind;
   rndFind.m_wsName = rnd.m_wsName;
   rndFind.m_wsCondition = rnd.m_wsCondition;
@@ -256,7 +256,7 @@
     } else {
       rndFind.m_CurObject = pVariablesNode;
       SetStylesForChild(dwStyles, rndFind);
-      CFX_WideString wsSaveCondition = rndFind.m_wsCondition;
+      WideString wsSaveCondition = rndFind.m_wsCondition;
       rndFind.m_wsCondition.clear();
       ResolveNormal(rndFind);
       rndFind.m_wsCondition = wsSaveCondition;
@@ -288,7 +288,7 @@
           bSetFlag = true;
         }
         rndFind.m_CurObject = child;
-        CFX_WideString wsSaveCondition = rndFind.m_wsCondition;
+        WideString wsSaveCondition = rndFind.m_wsCondition;
         rndFind.m_wsCondition.clear();
         ResolveNormal(rndFind);
         rndFind.m_wsCondition = wsSaveCondition;
@@ -317,7 +317,7 @@
     }
   }
   if (dwStyles & XFA_RESOLVENODE_Attributes) {
-    if (ResolveForAttributeRs(curNode, rnd, wsName.AsStringC()))
+    if (ResolveForAttributeRs(curNode, rnd, wsName.AsStringView()))
       return 1;
   }
   if (dwStyles & XFA_RESOLVENODE_Properties) {
@@ -346,7 +346,7 @@
         pProp = pInstanceManager->GetProperty(0, XFA_Element::Occur, true);
       }
     } else {
-      XFA_Element eType = XFA_GetElementTypeForName(wsName.AsStringC());
+      XFA_Element eType = XFA_GetElementTypeForName(wsName.AsStringView());
       if (eType != XFA_Element::Unknown) {
         pProp = curNode->AsNode()->GetProperty(0, eType,
                                                eType != XFA_Element::PageSet);
@@ -419,7 +419,7 @@
       }
       if (bInnerSearch) {
         rndFind.m_CurObject = child;
-        CFX_WideString wsOriginCondition = rndFind.m_wsCondition;
+        WideString wsOriginCondition = rndFind.m_wsCondition;
         rndFind.m_wsCondition.clear();
         uint32_t dwOriginStyle = rndFind.m_dwStyles;
         rndFind.m_dwStyles = dwOriginStyle | XFA_RESOLVENODE_ALL;
@@ -488,7 +488,7 @@
   return nType;
 }
 
-int32_t CXFA_ResolveProcessor::GetFilter(const CFX_WideStringC& wsExpression,
+int32_t CXFA_ResolveProcessor::GetFilter(const WideStringView& wsExpression,
                                          int32_t nStart,
                                          CXFA_ResolveNodesData& rnd) {
   ASSERT(nStart > -1);
@@ -496,8 +496,8 @@
   if (nStart >= iLength) {
     return 0;
   }
-  CFX_WideString& wsName = rnd.m_wsName;
-  CFX_WideString& wsCondition = rnd.m_wsCondition;
+  WideString& wsName = rnd.m_wsName;
+  WideString& wsCondition = rnd.m_wsCondition;
   wchar_t* pNameBuf = wsName.GetBuffer(iLength - nStart);
   wchar_t* pConditionBuf = wsCondition.GetBuffer(iLength - nStart);
   int32_t nNameCount = 0;
@@ -585,11 +585,11 @@
   wsCondition.TrimLeft();
   wsCondition.TrimRight();
   rnd.m_uHashName =
-      static_cast<XFA_HashCode>(FX_HashCode_GetW(wsName.AsStringC(), false));
+      static_cast<XFA_HashCode>(FX_HashCode_GetW(wsName.AsStringView(), false));
   return nStart;
 }
 void CXFA_ResolveProcessor::ConditionArray(int32_t iCurIndex,
-                                           CFX_WideString wsCondition,
+                                           WideString wsCondition,
                                            int32_t iFoundCount,
                                            CXFA_ResolveNodesData& rnd) {
   int32_t iLen = wsCondition.GetLength();
@@ -635,7 +635,7 @@
   if (iFoundCount == 1 && !iLen) {
     return;
   }
-  CFX_WideString wsIndex;
+  WideString wsIndex;
   wsIndex = wsCondition.Mid(i, iLen - 1 - i);
   int32_t iIndex = wsIndex.GetInteger();
   if (bRelative) {
@@ -655,11 +655,11 @@
 }
 
 void CXFA_ResolveProcessor::DoPredicateFilter(int32_t iCurIndex,
-                                              CFX_WideString wsCondition,
+                                              WideString wsCondition,
                                               int32_t iFoundCount,
                                               CXFA_ResolveNodesData& rnd) {
   ASSERT(iFoundCount == pdfium::CollectionSize<int32_t>(rnd.m_Objects));
-  CFX_WideString wsExpression;
+  WideString wsExpression;
   XFA_SCRIPTLANGTYPE eLangType = XFA_SCRIPTLANGTYPE_Unkown;
   if (wsCondition.Left(2) == L".[" && wsCondition.Last() == L']') {
     eLangType = XFA_SCRIPTLANGTYPE_Formcalc;
@@ -673,7 +673,7 @@
   wsExpression = wsCondition.Mid(2, wsCondition.GetLength() - 3);
   for (int32_t i = iFoundCount - 1; i >= 0; i--) {
     auto pRetValue = pdfium::MakeUnique<CFXJSE_Value>(rnd.m_pSC->GetRuntime());
-    bool bRet = pContext->RunScript(eLangType, wsExpression.AsStringC(),
+    bool bRet = pContext->RunScript(eLangType, wsExpression.AsStringView(),
                                     pRetValue.get(), rnd.m_Objects[i]);
     if (!bRet || !pRetValue->ToBoolean())
       rnd.m_Objects.erase(rnd.m_Objects.begin() + i);
@@ -681,7 +681,7 @@
 }
 
 void CXFA_ResolveProcessor::FilterCondition(CXFA_ResolveNodesData& rnd,
-                                            CFX_WideString wsCondition) {
+                                            WideString wsCondition) {
   int32_t iCurrIndex = 0;
   const std::vector<CXFA_Node*>* pArray = rnd.m_pSC->GetUpObjectArray();
   if (!pArray->empty()) {
@@ -753,7 +753,7 @@
 
 int32_t CXFA_ResolveProcessor::SetResultCreateNode(
     XFA_RESOLVENODE_RS& resolveNodeRS,
-    CFX_WideString& wsLastCondition) {
+    WideString& wsLastCondition) {
   if (m_pNodeHelper->m_pCreateParent)
     resolveNodeRS.objects.push_back(m_pNodeHelper->m_pCreateParent);
   else
@@ -767,7 +767,7 @@
   return pdfium::CollectionSize<int32_t>(resolveNodeRS.objects);
 }
 
-void CXFA_ResolveProcessor::SetIndexDataBind(CFX_WideString& wsNextCondition,
+void CXFA_ResolveProcessor::SetIndexDataBind(WideString& wsNextCondition,
                                              int32_t& iIndex,
                                              int32_t iCount) {
   if (m_pNodeHelper->CreateNode_ForCondition(wsNextCondition)) {
diff --git a/xfa/fxfa/parser/cxfa_resolveprocessor.h b/xfa/fxfa/parser/cxfa_resolveprocessor.h
index f4eafea..b48ee36 100644
--- a/xfa/fxfa/parser/cxfa_resolveprocessor.h
+++ b/xfa/fxfa/parser/cxfa_resolveprocessor.h
@@ -22,9 +22,9 @@
 
   CXFA_ScriptContext* m_pSC;
   CXFA_Object* m_CurObject;
-  CFX_WideString m_wsName;
+  WideString m_wsName;
   XFA_HashCode m_uHashName;
-  CFX_WideString m_wsCondition;
+  WideString m_wsCondition;
   int32_t m_nLevel;
   std::vector<CXFA_Object*> m_Objects;  // Not owned.
   uint32_t m_dwStyles;
@@ -38,12 +38,12 @@
   ~CXFA_ResolveProcessor();
 
   int32_t Resolve(CXFA_ResolveNodesData& rnd);
-  int32_t GetFilter(const CFX_WideStringC& wsExpression,
+  int32_t GetFilter(const WideStringView& wsExpression,
                     int32_t nStart,
                     CXFA_ResolveNodesData& rnd);
   int32_t SetResultCreateNode(XFA_RESOLVENODE_RS& resolveNodeRS,
-                              CFX_WideString& wsLastCondition);
-  void SetIndexDataBind(CFX_WideString& wsNextCondition,
+                              WideString& wsLastCondition);
+  void SetIndexDataBind(WideString& wsNextCondition,
                         int32_t& iIndex,
                         int32_t iCount);
   void SetCurStart(int32_t start) { m_iCurStart = start; }
@@ -53,7 +53,7 @@
  private:
   int32_t ResolveForAttributeRs(CXFA_Object* curNode,
                                 CXFA_ResolveNodesData& rnd,
-                                const CFX_WideStringC& strAttr);
+                                const WideStringView& strAttr);
   int32_t ResolveAnyChild(CXFA_ResolveNodesData& rnd);
   int32_t ResolveDollar(CXFA_ResolveNodesData& rnd);
   int32_t ResolveExcalmatory(CXFA_ResolveNodesData& rnd);
@@ -64,14 +64,14 @@
   void SetStylesForChild(uint32_t dwParentStyles, CXFA_ResolveNodesData& rnd);
 
   void ConditionArray(int32_t iCurIndex,
-                      CFX_WideString wsCondition,
+                      WideString wsCondition,
                       int32_t iFoundCount,
                       CXFA_ResolveNodesData& rnd);
   void DoPredicateFilter(int32_t iCurIndex,
-                         CFX_WideString wsCondition,
+                         WideString wsCondition,
                          int32_t iFoundCount,
                          CXFA_ResolveNodesData& rnd);
-  void FilterCondition(CXFA_ResolveNodesData& rnd, CFX_WideString wsCondition);
+  void FilterCondition(CXFA_ResolveNodesData& rnd, WideString wsCondition);
 
   int32_t m_iCurStart;
   std::unique_ptr<CXFA_NodeHelper> m_pNodeHelper;
diff --git a/xfa/fxfa/parser/cxfa_script.cpp b/xfa/fxfa/parser/cxfa_script.cpp
index ccd1997..6b6f6ba 100644
--- a/xfa/fxfa/parser/cxfa_script.cpp
+++ b/xfa/fxfa/parser/cxfa_script.cpp
@@ -11,7 +11,7 @@
 CXFA_Script::CXFA_Script(CXFA_Node* pNode) : CXFA_Data(pNode) {}
 
 XFA_SCRIPTTYPE CXFA_Script::GetContentType() {
-  CFX_WideStringC cData;
+  WideStringView cData;
   if (m_pNode->TryCData(XFA_ATTRIBUTE_ContentType, cData, false)) {
     if (cData == L"application/x-javascript")
       return XFA_SCRIPTTYPE_Javascript;
@@ -26,6 +26,6 @@
   return m_pNode->GetEnum(XFA_ATTRIBUTE_RunAt);
 }
 
-void CXFA_Script::GetExpression(CFX_WideString& wsExpression) {
+void CXFA_Script::GetExpression(WideString& wsExpression) {
   m_pNode->TryContent(wsExpression);
 }
diff --git a/xfa/fxfa/parser/cxfa_script.h b/xfa/fxfa/parser/cxfa_script.h
index d890624..bb98f58 100644
--- a/xfa/fxfa/parser/cxfa_script.h
+++ b/xfa/fxfa/parser/cxfa_script.h
@@ -26,7 +26,7 @@
 
   XFA_SCRIPTTYPE GetContentType();
   int32_t GetRunAt();
-  void GetExpression(CFX_WideString& wsExpression);
+  void GetExpression(WideString& wsExpression);
 };
 
 #endif  // XFA_FXFA_PARSER_CXFA_SCRIPT_H_
diff --git a/xfa/fxfa/parser/cxfa_scriptcontext.cpp b/xfa/fxfa/parser/cxfa_scriptcontext.cpp
index 98b5da0..38d5039 100644
--- a/xfa/fxfa/parser/cxfa_scriptcontext.cpp
+++ b/xfa/fxfa/parser/cxfa_scriptcontext.cpp
@@ -81,7 +81,7 @@
 }
 
 const XFA_METHODINFO* GetMethodByName(XFA_Element eElement,
-                                      const CFX_WideStringC& wsMethodName) {
+                                      const WideStringView& wsMethodName) {
   if (wsMethodName.IsEmpty())
     return nullptr;
 
@@ -146,10 +146,10 @@
 }
 
 bool CXFA_ScriptContext::RunScript(XFA_SCRIPTLANGTYPE eScriptType,
-                                   const CFX_WideStringC& wsScript,
+                                   const WideStringView& wsScript,
                                    CFXJSE_Value* hRetValue,
                                    CXFA_Object* pThisObject) {
-  CFX_ByteString btScript;
+  ByteString btScript;
   CFX_AutoRestorer<XFA_SCRIPTLANGTYPE> typeRestorer(&m_eScriptType);
   m_eScriptType = eScriptType;
   if (eScriptType == XFA_SCRIPTLANGTYPE_Formcalc) {
@@ -162,7 +162,7 @@
       hRetValue->SetUndefined();
       return false;
     }
-    btScript = FX_UTF8Encode(wsJavaScript.AsStringC());
+    btScript = FX_UTF8Encode(wsJavaScript.AsStringView());
   } else {
     btScript = FX_UTF8Encode(wsScript);
   }
@@ -173,21 +173,21 @@
 }
 
 void CXFA_ScriptContext::GlobalPropertySetter(CFXJSE_Value* pObject,
-                                              const CFX_ByteStringC& szPropName,
+                                              const ByteStringView& szPropName,
                                               CFXJSE_Value* pValue) {
   CXFA_Object* lpOrginalNode = ToObject(pObject, nullptr);
   CXFA_Document* pDoc = lpOrginalNode->GetDocument();
   CXFA_ScriptContext* lpScriptContext = pDoc->GetScriptContext();
   CXFA_Object* lpCurNode = lpScriptContext->GetVariablesThis(lpOrginalNode);
-  CFX_WideString wsPropName = CFX_WideString::FromUTF8(szPropName);
+  WideString wsPropName = WideString::FromUTF8(szPropName);
   uint32_t dwFlag = XFA_RESOLVENODE_Parent | XFA_RESOLVENODE_Siblings |
                     XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties |
                     XFA_RESOLVENODE_Attributes;
   CXFA_Node* pRefNode = ToNode(lpScriptContext->GetThisObject());
   if (lpOrginalNode->IsVariablesThis())
     pRefNode = ToNode(lpCurNode);
-  if (lpScriptContext->QueryNodeByFlag(pRefNode, wsPropName.AsStringC(), pValue,
-                                       dwFlag, true)) {
+  if (lpScriptContext->QueryNodeByFlag(pRefNode, wsPropName.AsStringView(),
+                                       pValue, dwFlag, true)) {
     return;
   }
   if (lpOrginalNode->IsVariablesThis()) {
@@ -204,7 +204,7 @@
                                                   szPropName, pValue);
 }
 bool CXFA_ScriptContext::QueryNodeByFlag(CXFA_Node* refNode,
-                                         const CFX_WideStringC& propname,
+                                         const WideStringView& propname,
                                          CFXJSE_Value* pValue,
                                          uint32_t dwFlag,
                                          bool bSetting) {
@@ -227,20 +227,20 @@
   return true;
 }
 void CXFA_ScriptContext::GlobalPropertyGetter(CFXJSE_Value* pObject,
-                                              const CFX_ByteStringC& szPropName,
+                                              const ByteStringView& szPropName,
                                               CFXJSE_Value* pValue) {
   CXFA_Object* pOriginalObject = ToObject(pObject, nullptr);
   CXFA_Document* pDoc = pOriginalObject->GetDocument();
   CXFA_ScriptContext* lpScriptContext = pDoc->GetScriptContext();
   CXFA_Object* lpCurNode = lpScriptContext->GetVariablesThis(pOriginalObject);
-  CFX_WideString wsPropName = CFX_WideString::FromUTF8(szPropName);
+  WideString wsPropName = WideString::FromUTF8(szPropName);
   if (lpScriptContext->GetType() == XFA_SCRIPTLANGTYPE_Formcalc) {
     if (szPropName == kFormCalcRuntime) {
       lpScriptContext->m_FM2JSContext->GlobalPropertyGetter(pValue);
       return;
     }
     XFA_HashCode uHashCode = static_cast<XFA_HashCode>(
-        FX_HashCode_GetW(wsPropName.AsStringC(), false));
+        FX_HashCode_GetW(wsPropName.AsStringView(), false));
     if (uHashCode != XFA_HASHCODE_Layout) {
       CXFA_Object* pObj =
           lpScriptContext->GetDocument()->GetXFAObject(uHashCode);
@@ -256,13 +256,13 @@
   if (pOriginalObject->IsVariablesThis()) {
     pRefNode = ToNode(lpCurNode);
   }
-  if (lpScriptContext->QueryNodeByFlag(pRefNode, wsPropName.AsStringC(), pValue,
-                                       dwFlag, false)) {
+  if (lpScriptContext->QueryNodeByFlag(pRefNode, wsPropName.AsStringView(),
+                                       pValue, dwFlag, false)) {
     return;
   }
   dwFlag = XFA_RESOLVENODE_Parent | XFA_RESOLVENODE_Siblings;
-  if (lpScriptContext->QueryNodeByFlag(pRefNode, wsPropName.AsStringC(), pValue,
-                                       dwFlag, false)) {
+  if (lpScriptContext->QueryNodeByFlag(pRefNode, wsPropName.AsStringView(),
+                                       pValue, dwFlag, false)) {
     return;
   }
   CXFA_Object* pScriptObject =
@@ -280,14 +280,14 @@
                                                   szPropName, pValue);
 }
 void CXFA_ScriptContext::NormalPropertyGetter(CFXJSE_Value* pOriginalValue,
-                                              const CFX_ByteStringC& szPropName,
+                                              const ByteStringView& szPropName,
                                               CFXJSE_Value* pReturnValue) {
   CXFA_Object* pOriginalObject = ToObject(pOriginalValue, nullptr);
   if (!pOriginalObject) {
     pReturnValue->SetUndefined();
     return;
   }
-  CFX_WideString wsPropName = CFX_WideString::FromUTF8(szPropName);
+  WideString wsPropName = WideString::FromUTF8(szPropName);
   CXFA_ScriptContext* lpScriptContext =
       pOriginalObject->GetDocument()->GetScriptContext();
   CXFA_Object* pObject = lpScriptContext->GetVariablesThis(pOriginalObject);
@@ -300,7 +300,7 @@
   uint32_t dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties |
                     XFA_RESOLVENODE_Attributes;
   bool bRet = lpScriptContext->QueryNodeByFlag(
-      ToNode(pObject), wsPropName.AsStringC(), pReturnValue, dwFlag, false);
+      ToNode(pObject), wsPropName.AsStringView(), pReturnValue, dwFlag, false);
   if (bRet) {
     return;
   }
@@ -308,8 +308,9 @@
       (lpScriptContext->GetType() == XFA_SCRIPTLANGTYPE_Javascript &&
        !lpScriptContext->IsStrictScopeInJavaScript())) {
     dwFlag = XFA_RESOLVENODE_Parent | XFA_RESOLVENODE_Siblings;
-    bRet = lpScriptContext->QueryNodeByFlag(
-        ToNode(pObject), wsPropName.AsStringC(), pReturnValue, dwFlag, false);
+    bRet = lpScriptContext->QueryNodeByFlag(ToNode(pObject),
+                                            wsPropName.AsStringView(),
+                                            pReturnValue, dwFlag, false);
   }
   if (bRet) {
     return;
@@ -325,7 +326,7 @@
   }
 }
 void CXFA_ScriptContext::NormalPropertySetter(CFXJSE_Value* pOriginalValue,
-                                              const CFX_ByteStringC& szPropName,
+                                              const ByteStringView& szPropName,
                                               CFXJSE_Value* pReturnValue) {
   CXFA_Object* pOriginalObject = ToObject(pOriginalValue, nullptr);
   if (!pOriginalObject)
@@ -334,9 +335,9 @@
   CXFA_ScriptContext* lpScriptContext =
       pOriginalObject->GetDocument()->GetScriptContext();
   CXFA_Object* pObject = lpScriptContext->GetVariablesThis(pOriginalObject);
-  CFX_WideString wsPropName = CFX_WideString::FromUTF8(szPropName);
+  WideString wsPropName = WideString::FromUTF8(szPropName);
   const XFA_SCRIPTATTRIBUTEINFO* lpAttributeInfo = XFA_GetScriptAttributeByName(
-      pObject->GetElementType(), wsPropName.AsStringC());
+      pObject->GetElementType(), wsPropName.AsStringView());
   if (lpAttributeInfo) {
     (pObject->*(lpAttributeInfo->lpfnCallback))(
         pReturnValue, true, (XFA_ATTRIBUTE)lpAttributeInfo->eAttribute);
@@ -347,17 +348,17 @@
       }
       CXFA_Node* pNode = ToNode(pObject);
       CXFA_Node* pPropOrChild = nullptr;
-      XFA_Element eType = XFA_GetElementTypeForName(wsPropName.AsStringC());
+      XFA_Element eType = XFA_GetElementTypeForName(wsPropName.AsStringView());
       if (eType != XFA_Element::Unknown)
         pPropOrChild = pNode->GetProperty(0, eType);
       else
-        pPropOrChild = pNode->GetFirstChildByName(wsPropName.AsStringC());
+        pPropOrChild = pNode->GetFirstChildByName(wsPropName.AsStringView());
 
       if (pPropOrChild) {
-        CFX_WideString wsDefaultName(L"{default}");
+        WideString wsDefaultName(L"{default}");
         const XFA_SCRIPTATTRIBUTEINFO* lpAttrInfo =
             XFA_GetScriptAttributeByName(pPropOrChild->GetElementType(),
-                                         wsDefaultName.AsStringC());
+                                         wsDefaultName.AsStringView());
         if (lpAttrInfo) {
           (pPropOrChild->*(lpAttrInfo->lpfnCallback))(
               pReturnValue, true, (XFA_ATTRIBUTE)lpAttrInfo->eAttribute);
@@ -375,7 +376,7 @@
 }
 int32_t CXFA_ScriptContext::NormalPropTypeGetter(
     CFXJSE_Value* pOriginalValue,
-    const CFX_ByteStringC& szPropName,
+    const ByteStringView& szPropName,
     bool bQueryIn) {
   CXFA_Object* pObject = ToObject(pOriginalValue, nullptr);
   if (!pObject)
@@ -385,19 +386,19 @@
       pObject->GetDocument()->GetScriptContext();
   pObject = lpScriptContext->GetVariablesThis(pObject);
   XFA_Element eType = pObject->GetElementType();
-  CFX_WideString wsPropName = CFX_WideString::FromUTF8(szPropName);
-  if (GetMethodByName(eType, wsPropName.AsStringC())) {
+  WideString wsPropName = WideString::FromUTF8(szPropName);
+  if (GetMethodByName(eType, wsPropName.AsStringView())) {
     return FXJSE_ClassPropType_Method;
   }
   if (bQueryIn &&
-      !XFA_GetScriptAttributeByName(eType, wsPropName.AsStringC())) {
+      !XFA_GetScriptAttributeByName(eType, wsPropName.AsStringView())) {
     return FXJSE_ClassPropType_None;
   }
   return FXJSE_ClassPropType_Property;
 }
 int32_t CXFA_ScriptContext::GlobalPropTypeGetter(
     CFXJSE_Value* pOriginalValue,
-    const CFX_ByteStringC& szPropName,
+    const ByteStringView& szPropName,
     bool bQueryIn) {
   CXFA_Object* pObject = ToObject(pOriginalValue, nullptr);
   if (!pObject)
@@ -407,14 +408,14 @@
       pObject->GetDocument()->GetScriptContext();
   pObject = lpScriptContext->GetVariablesThis(pObject);
   XFA_Element eType = pObject->GetElementType();
-  CFX_WideString wsPropName = CFX_WideString::FromUTF8(szPropName);
-  if (GetMethodByName(eType, wsPropName.AsStringC())) {
+  WideString wsPropName = WideString::FromUTF8(szPropName);
+  if (GetMethodByName(eType, wsPropName.AsStringView())) {
     return FXJSE_ClassPropType_Method;
   }
   return FXJSE_ClassPropType_Property;
 }
 void CXFA_ScriptContext::NormalMethodCall(CFXJSE_Value* pThis,
-                                          const CFX_ByteStringC& szFuncName,
+                                          const ByteStringView& szFuncName,
                                           CFXJSE_Arguments& args) {
   CXFA_Object* pObject = ToObject(pThis, nullptr);
   if (!pObject)
@@ -423,9 +424,9 @@
   CXFA_ScriptContext* lpScriptContext =
       pObject->GetDocument()->GetScriptContext();
   pObject = lpScriptContext->GetVariablesThis(pObject);
-  CFX_WideString wsFunName = CFX_WideString::FromUTF8(szFuncName);
+  WideString wsFunName = WideString::FromUTF8(szFuncName);
   const XFA_METHODINFO* lpMethodInfo =
-      GetMethodByName(pObject->GetElementType(), wsFunName.AsStringC());
+      GetMethodByName(pObject->GetElementType(), wsFunName.AsStringView());
   if (!lpMethodInfo)
     return;
 
@@ -488,11 +489,11 @@
   if (!pTextNode)
     return false;
 
-  CFX_WideStringC wsScript;
+  WideStringView wsScript;
   if (!pTextNode->TryCData(XFA_ATTRIBUTE_Value, wsScript))
     return false;
 
-  CFX_ByteString btScript = FX_UTF8Encode(wsScript);
+  ByteString btScript = FX_UTF8Encode(wsScript);
   auto hRetValue = pdfium::MakeUnique<CFXJSE_Value>(m_pIsolate);
   CXFA_Node* pThisObject = pParent->GetNodeItem(XFA_NODEITEM_Parent);
   CFXJSE_Context* pVariablesContext =
@@ -503,7 +504,7 @@
 }
 
 bool CXFA_ScriptContext::QueryVariableValue(CXFA_Node* pScriptNode,
-                                            const CFX_ByteStringC& szPropName,
+                                            const ByteStringView& szPropName,
                                             CFXJSE_Value* pValue,
                                             bool bGetter) {
   if (!pScriptNode || pScriptNode->GetElementType() != XFA_Element::Script)
@@ -544,7 +545,7 @@
 }
 
 void CXFA_ScriptContext::RemoveBuiltInObjs(CFXJSE_Context* pContext) const {
-  static const CFX_ByteStringC OBJ_NAME[2] = {"Number", "Date"};
+  static const ByteStringView OBJ_NAME[2] = {"Number", "Date"};
   std::unique_ptr<CFXJSE_Value> pObject = pContext->GetGlobalObject();
   auto hProp = pdfium::MakeUnique<CFXJSE_Value>(m_pIsolate);
   for (int i = 0; i < 2; ++i) {
@@ -557,7 +558,7 @@
 }
 
 int32_t CXFA_ScriptContext::ResolveObjects(CXFA_Object* refObject,
-                                           const CFX_WideStringC& wsExpression,
+                                           const WideStringView& wsExpression,
                                            XFA_RESOLVENODE_RS& resolveNodeRS,
                                            uint32_t dwStyles,
                                            CXFA_Node* bindNode) {
@@ -757,7 +758,7 @@
                                 lpNodeHelper->NodeIsProperty(refNode), true);
 }
 void CXFA_ScriptContext::GetSomExpression(CXFA_Node* refNode,
-                                          CFX_WideString& wsExpression) {
+                                          WideString& wsExpression) {
   CXFA_NodeHelper* lpNodeHelper = m_ResolveProcessor->GetNodeHelper();
   lpNodeHelper->GetNameExpression(refNode, wsExpression, true,
                                   XFA_LOGIC_Transparent);
diff --git a/xfa/fxfa/parser/cxfa_scriptcontext.h b/xfa/fxfa/parser/cxfa_scriptcontext.h
index 45e6897..d3632e2 100644
--- a/xfa/fxfa/parser/cxfa_scriptcontext.h
+++ b/xfa/fxfa/parser/cxfa_scriptcontext.h
@@ -30,12 +30,12 @@
   void SetEventParam(CXFA_EventParam param) { m_eventParam = param; }
   CXFA_EventParam* GetEventParam() { return &m_eventParam; }
   bool RunScript(XFA_SCRIPTLANGTYPE eScriptType,
-                 const CFX_WideStringC& wsScript,
+                 const WideStringView& wsScript,
                  CFXJSE_Value* pRetValue,
                  CXFA_Object* pThisObject);
 
   int32_t ResolveObjects(CXFA_Object* refObject,
-                         const CFX_WideStringC& wsExpression,
+                         const WideStringView& wsExpression,
                          XFA_RESOLVENODE_RS& resolveNodeRS,
                          uint32_t dwStyles = XFA_RESOLVENODE_Children,
                          CXFA_Node* bindNode = nullptr);
@@ -46,7 +46,7 @@
 
   int32_t GetIndexByName(CXFA_Node* refNode);
   int32_t GetIndexByClassName(CXFA_Node* refNode);
-  void GetSomExpression(CXFA_Node* refNode, CFX_WideString& wsExpression);
+  void GetSomExpression(CXFA_Node* refNode, WideString& wsExpression);
 
   void SetNodesOfRunScript(std::vector<CXFA_Node*>* pArray);
   void AddNodesOfRunScript(const std::vector<CXFA_Node*>& nodes);
@@ -56,36 +56,36 @@
   void SetRunAtType(XFA_ATTRIBUTEENUM eRunAt) { m_eRunAtType = eRunAt; }
   bool IsRunAtClient() { return m_eRunAtType != XFA_ATTRIBUTEENUM_Server; }
   bool QueryNodeByFlag(CXFA_Node* refNode,
-                       const CFX_WideStringC& propname,
+                       const WideStringView& propname,
                        CFXJSE_Value* pValue,
                        uint32_t dwFlag,
                        bool bSetting);
   bool QueryVariableValue(CXFA_Node* pScriptNode,
-                          const CFX_ByteStringC& szPropName,
+                          const ByteStringView& szPropName,
                           CFXJSE_Value* pValue,
                           bool bGetter);
-  bool QueryBuiltinValue(const CFX_ByteStringC& szPropName,
+  bool QueryBuiltinValue(const ByteStringView& szPropName,
                          CFXJSE_Value* pValue);
   static void GlobalPropertyGetter(CFXJSE_Value* pObject,
-                                   const CFX_ByteStringC& szPropName,
+                                   const ByteStringView& szPropName,
                                    CFXJSE_Value* pValue);
   static void GlobalPropertySetter(CFXJSE_Value* pObject,
-                                   const CFX_ByteStringC& szPropName,
+                                   const ByteStringView& szPropName,
                                    CFXJSE_Value* pValue);
   static void NormalPropertyGetter(CFXJSE_Value* pObject,
-                                   const CFX_ByteStringC& szPropName,
+                                   const ByteStringView& szPropName,
                                    CFXJSE_Value* pValue);
   static void NormalPropertySetter(CFXJSE_Value* pObject,
-                                   const CFX_ByteStringC& szPropName,
+                                   const ByteStringView& szPropName,
                                    CFXJSE_Value* pValue);
   static void NormalMethodCall(CFXJSE_Value* hThis,
-                               const CFX_ByteStringC& szFuncName,
+                               const ByteStringView& szFuncName,
                                CFXJSE_Arguments& args);
   static int32_t NormalPropTypeGetter(CFXJSE_Value* pObject,
-                                      const CFX_ByteStringC& szPropName,
+                                      const ByteStringView& szPropName,
                                       bool bQueryIn);
   static int32_t GlobalPropTypeGetter(CFXJSE_Value* pObject,
-                                      const CFX_ByteStringC& szPropName,
+                                      const ByteStringView& szPropName,
                                       bool bQueryIn);
   bool RunVariablesScript(CXFA_Node* pScriptNode);
   CXFA_Object* GetVariablesThis(CXFA_Object* pObject, bool bScriptNode = false);
diff --git a/xfa/fxfa/parser/cxfa_simple_parser.cpp b/xfa/fxfa/parser/cxfa_simple_parser.cpp
index dd72f40..5b58761 100644
--- a/xfa/fxfa/parser/cxfa_simple_parser.cpp
+++ b/xfa/fxfa/parser/cxfa_simple_parser.cpp
@@ -57,25 +57,25 @@
   return nullptr;
 }
 
-CFX_WideString GetElementTagNamespaceURI(CFX_XMLElement* pElement) {
-  CFX_WideString wsNodeStr = pElement->GetNamespacePrefix();
-  CFX_WideString wsNamespaceURI;
+WideString GetElementTagNamespaceURI(CFX_XMLElement* pElement) {
+  WideString wsNodeStr = pElement->GetNamespacePrefix();
+  WideString wsNamespaceURI;
   if (!XFA_FDEExtension_ResolveNamespaceQualifier(
-          pElement, wsNodeStr.AsStringC(), &wsNamespaceURI)) {
-    return CFX_WideString();
+          pElement, wsNodeStr.AsStringView(), &wsNamespaceURI)) {
+    return WideString();
   }
   return wsNamespaceURI;
 }
 
 bool MatchNodeName(CFX_XMLNode* pNode,
-                   const CFX_WideStringC& wsLocalTagName,
-                   const CFX_WideStringC& wsNamespaceURIPrefix,
+                   const WideStringView& wsLocalTagName,
+                   const WideStringView& wsNamespaceURIPrefix,
                    uint32_t eMatchFlags = XFA_XDPPACKET_FLAGS_NOMATCH) {
   if (!pNode || pNode->GetType() != FX_XMLNODE_Element)
     return false;
 
   CFX_XMLElement* pElement = reinterpret_cast<CFX_XMLElement*>(pNode);
-  CFX_WideString wsNodeStr = pElement->GetLocalTagName();
+  WideString wsNodeStr = pElement->GetLocalTagName();
   if (wsNodeStr != wsLocalTagName)
     return false;
 
@@ -90,9 +90,9 @@
   return wsNodeStr == wsNamespaceURIPrefix;
 }
 
-bool GetAttributeLocalName(const CFX_WideStringC& wsAttributeName,
-                           CFX_WideString& wsLocalAttrName) {
-  CFX_WideString wsAttrName(wsAttributeName);
+bool GetAttributeLocalName(const WideStringView& wsAttributeName,
+                           WideString& wsLocalAttrName) {
+  WideString wsAttrName(wsAttributeName);
   auto pos = wsAttrName.Find(L':', 0);
   if (!pos.has_value()) {
     wsLocalAttrName = wsAttrName;
@@ -103,11 +103,11 @@
 }
 
 bool ResolveAttribute(CFX_XMLElement* pElement,
-                      const CFX_WideStringC& wsAttributeName,
-                      CFX_WideString& wsLocalAttrName,
-                      CFX_WideString& wsNamespaceURI) {
-  CFX_WideString wsAttrName(wsAttributeName);
-  CFX_WideString wsNSPrefix;
+                      const WideStringView& wsAttributeName,
+                      WideString& wsLocalAttrName,
+                      WideString& wsNamespaceURI) {
+  WideString wsAttrName(wsAttributeName);
+  WideString wsNSPrefix;
   if (GetAttributeLocalName(wsAttributeName, wsLocalAttrName)) {
     wsNSPrefix = wsAttrName.Left(wsAttributeName.GetLength() -
                                  wsLocalAttrName.GetLength() - 1);
@@ -117,7 +117,7 @@
     return false;
   }
   if (!XFA_FDEExtension_ResolveNamespaceQualifier(
-          pElement, wsNSPrefix.AsStringC(), &wsNamespaceURI)) {
+          pElement, wsNSPrefix.AsStringView(), &wsNamespaceURI)) {
     wsNamespaceURI.clear();
     return false;
   }
@@ -125,17 +125,17 @@
 }
 
 bool FindAttributeWithNS(CFX_XMLElement* pElement,
-                         const CFX_WideStringC& wsLocalAttributeName,
-                         const CFX_WideStringC& wsNamespaceURIPrefix,
-                         CFX_WideString& wsValue,
+                         const WideStringView& wsLocalAttributeName,
+                         const WideStringView& wsNamespaceURIPrefix,
+                         WideString& wsValue,
                          bool bMatchNSAsPrefix = false) {
   if (!pElement)
     return false;
 
-  CFX_WideString wsAttrNS;
+  WideString wsAttrNS;
   for (auto it : pElement->GetAttributes()) {
     auto pos = it.first.Find(L':', 0);
-    CFX_WideString wsNSPrefix;
+    WideString wsNSPrefix;
     if (!pos.has_value()) {
       if (wsLocalAttributeName != it.first)
         continue;
@@ -148,7 +148,7 @@
     }
 
     if (!XFA_FDEExtension_ResolveNamespaceQualifier(
-            pElement, wsNSPrefix.AsStringC(), &wsAttrNS)) {
+            pElement, wsNSPrefix.AsStringView(), &wsAttrNS)) {
       continue;
     }
     if (bMatchNSAsPrefix) {
@@ -194,20 +194,19 @@
   return nullptr;
 }
 
-bool IsStringAllWhitespace(CFX_WideString wsText) {
+bool IsStringAllWhitespace(WideString wsText) {
   wsText.TrimRight(L"\x20\x9\xD\xA");
   return wsText.IsEmpty();
 }
 
-void ConvertXMLToPlainText(CFX_XMLElement* pRootXMLNode,
-                           CFX_WideString& wsOutput) {
+void ConvertXMLToPlainText(CFX_XMLElement* pRootXMLNode, WideString& wsOutput) {
   for (CFX_XMLNode* pXMLChild =
            pRootXMLNode->GetNodeItem(CFX_XMLNode::FirstChild);
        pXMLChild;
        pXMLChild = pXMLChild->GetNodeItem(CFX_XMLNode::NextSibling)) {
     switch (pXMLChild->GetType()) {
       case FX_XMLNODE_Element: {
-        CFX_WideString wsTextData =
+        WideString wsTextData =
             static_cast<CFX_XMLElement*>(pXMLChild)->GetTextData();
         wsTextData += L"\n";
         wsOutput += wsTextData;
@@ -215,7 +214,7 @@
       }
       case FX_XMLNODE_Text:
       case FX_XMLNODE_CharData: {
-        CFX_WideString wsText = static_cast<CFX_XMLText*>(pXMLChild)->GetText();
+        WideString wsText = static_cast<CFX_XMLText*>(pXMLChild)->GetText();
         if (IsStringAllWhitespace(wsText))
           continue;
 
@@ -229,7 +228,7 @@
   }
 }
 
-const XFA_PACKETINFO* GetPacketByName(const CFX_WideStringC& wsName) {
+const XFA_PACKETINFO* GetPacketByName(const WideStringView& wsName) {
   if (wsName.IsEmpty())
     return nullptr;
 
@@ -315,7 +314,7 @@
   return XFA_PARSESTATUS_Done;
 }
 
-CFX_XMLNode* CXFA_SimpleParser::ParseXMLData(const CFX_ByteString& wsXML) {
+CFX_XMLNode* CXFA_SimpleParser::ParseXMLData(const ByteString& wsXML) {
   CloseParser();
   m_pXMLDoc = pdfium::MakeUnique<CFX_XMLDoc>();
 
@@ -353,9 +352,9 @@
             return;
 
           CFX_XMLElement* child = static_cast<CFX_XMLElement*>(pXMLChild);
-          CFX_WideString wsNodeStr = child->GetLocalTagName();
+          WideString wsNodeStr = child->GetLocalTagName();
           pXFAChild->SetCData(XFA_ATTRIBUTE_Name, wsNodeStr);
-          CFX_WideString wsChildValue;
+          WideString wsChildValue;
           XFA_GetPlainTextFromRichText(child, wsChildValue);
           if (!wsChildValue.IsEmpty())
             pXFAChild->SetCData(XFA_ATTRIBUTE_Value, wsChildValue);
@@ -388,13 +387,13 @@
 
 bool XFA_FDEExtension_ResolveNamespaceQualifier(
     CFX_XMLElement* pNode,
-    const CFX_WideStringC& wsQualifier,
-    CFX_WideString* wsNamespaceURI) {
+    const WideStringView& wsQualifier,
+    WideString* wsNamespaceURI) {
   if (!pNode)
     return false;
 
   CFX_XMLNode* pFakeRoot = pNode->GetNodeItem(CFX_XMLNode::Root);
-  CFX_WideString wsNSAttribute;
+  WideString wsNSAttribute;
   bool bRet = false;
   if (wsQualifier.IsEmpty()) {
     wsNSAttribute = L"xmlns";
@@ -503,9 +502,9 @@
       continue;
 
     CFX_XMLElement* pElement = reinterpret_cast<CFX_XMLElement*>(pChildItem);
-    CFX_WideString wsPacketName = pElement->GetLocalTagName();
+    WideString wsPacketName = pElement->GetLocalTagName();
     const XFA_PACKETINFO* pPacketInfo =
-        GetPacketByName(wsPacketName.AsStringC());
+        GetPacketByName(wsPacketName.AsStringView());
     if (pPacketInfo && pPacketInfo->pURI) {
       if (!MatchNodeName(pElement, pPacketInfo->pName, pPacketInfo->pURI,
                          pPacketInfo->eFlags)) {
@@ -612,7 +611,7 @@
       if (m_bDocumentParser) {
         CFX_XMLElement* pXMLDocumentElement =
             static_cast<CFX_XMLElement*>(pXMLDocumentNode);
-        CFX_WideString wsNamespaceURI = pXMLDocumentElement->GetNamespaceURI();
+        WideString wsNamespaceURI = pXMLDocumentElement->GetNamespaceURI();
         if (wsNamespaceURI.IsEmpty())
           wsNamespaceURI = pXMLDocumentElement->GetString(L"xmlns:xfa");
 
@@ -628,7 +627,7 @@
                       XFA_GetPacketByIndex(XFA_PACKET_Form)->eFlags)) {
       CFX_XMLElement* pXMLDocumentElement =
           static_cast<CFX_XMLElement*>(pXMLDocumentNode);
-      CFX_WideString wsChecksum = pXMLDocumentElement->GetString(L"checksum");
+      WideString wsChecksum = pXMLDocumentElement->GetString(L"checksum");
       if (wsChecksum.GetLength() != 28 ||
           m_pXMLParser->m_dwCheckStatus != 0x03) {
         return nullptr;
@@ -641,7 +640,7 @@
       pChecksum->UpdateChecksum(m_pFileRead, m_pXMLParser->m_nStart[1],
                                 m_pXMLParser->m_nSize[1]);
       pChecksum->FinishChecksum();
-      CFX_ByteString bsCheck = pChecksum->GetChecksum();
+      ByteString bsCheck = pChecksum->GetChecksum();
       if (bsCheck != wsChecksum.UTF8Encode())
         return nullptr;
 
@@ -651,7 +650,7 @@
 
       pNode->SetCData(XFA_ATTRIBUTE_Name,
                       XFA_GetPacketByIndex(XFA_PACKET_Form)->pName);
-      pNode->SetAttribute(XFA_ATTRIBUTE_Checksum, wsChecksum.AsStringC());
+      pNode->SetAttribute(XFA_ATTRIBUTE_Checksum, wsChecksum.AsStringView());
       CXFA_Node* pTemplateRoot =
           m_pRootNode->GetFirstChildByClass(XFA_Element::Template);
       CXFA_Node* pTemplateChosen =
@@ -724,7 +723,7 @@
         delete pDataXMLNode;
       return nullptr;
     }
-    CFX_WideString wsLocalName =
+    WideString wsLocalName =
         static_cast<CFX_XMLElement*>(pDataXMLNode)->GetLocalTagName();
     pNode->SetCData(XFA_ATTRIBUTE_Name, wsLocalName);
     if (!DataLoader(pNode, pDataXMLNode, true))
@@ -821,7 +820,7 @@
   if (!pNode)
     return nullptr;
 
-  CFX_WideString wsName =
+  WideString wsName =
       static_cast<CFX_XMLElement*>(pXMLDocumentNode)->GetLocalTagName();
   pNode->SetCData(XFA_ATTRIBUTE_Name, wsName);
   if (!UserPacketLoader(pNode, pXMLDocumentNode))
@@ -854,8 +853,8 @@
     switch (pXMLChild->GetType()) {
       case FX_XMLNODE_Element: {
         CFX_XMLElement* pXMLElement = static_cast<CFX_XMLElement*>(pXMLChild);
-        CFX_WideString wsTagName = pXMLElement->GetLocalTagName();
-        XFA_Element eType = XFA_GetElementTypeForName(wsTagName.AsStringC());
+        WideString wsTagName = pXMLElement->GetLocalTagName();
+        XFA_Element eType = XFA_GetElementTypeForName(wsTagName.AsStringView());
         if (eType == XFA_Element::Unknown)
           continue;
 
@@ -873,17 +872,17 @@
         if (!pXFAChild)
           return nullptr;
         if (ePacketID == XFA_XDPPACKET_Config)
-          pXFAChild->SetAttribute(XFA_ATTRIBUTE_Name, wsTagName.AsStringC());
+          pXFAChild->SetAttribute(XFA_ATTRIBUTE_Name, wsTagName.AsStringView());
 
         bool IsNeedValue = true;
         for (auto it : pXMLElement->GetAttributes()) {
-          CFX_WideString wsAttrName;
-          GetAttributeLocalName(it.first.AsStringC(), wsAttrName);
+          WideString wsAttrName;
+          GetAttributeLocalName(it.first.AsStringView(), wsAttrName);
           if (wsAttrName == L"nil" && it.second == L"true")
             IsNeedValue = false;
 
           const XFA_ATTRIBUTEINFO* lpAttrInfo =
-              XFA_GetAttributeByName(wsAttrName.AsStringC());
+              XFA_GetAttributeByName(wsAttrName.AsStringView());
           if (!lpAttrInfo)
             continue;
 
@@ -891,7 +890,7 @@
               lpAttrInfo->eName != XFA_ATTRIBUTE_Save) {
             continue;
           }
-          pXFAChild->SetAttribute(lpAttrInfo->eName, it.second.AsStringC());
+          pXFAChild->SetAttribute(lpAttrInfo->eName, it.second.AsStringView());
         }
         pXFANode->InsertChild(pXFAChild);
         if (eType == XFA_Element::Validate || eType == XFA_Element::Locale) {
@@ -931,7 +930,7 @@
                                          XFA_XDPPACKET ePacketID) {
   XFA_Element element = XFA_Element::Sharptext;
   if (pXFANode->GetElementType() == XFA_Element::ExData) {
-    CFX_WideStringC wsContentType =
+    WideStringView wsContentType =
         pXFANode->GetCData(XFA_ATTRIBUTE_ContentType);
     if (wsContentType == L"text/html")
       element = XFA_Element::SharpxHTML;
@@ -941,7 +940,7 @@
   if (element == XFA_Element::SharpxHTML)
     pXFANode->SetXMLMappingNode(pXMLNode);
 
-  CFX_WideString wsValue;
+  WideString wsValue;
   for (CFX_XMLNode* pXMLChild = pXMLNode->GetNodeItem(CFX_XMLNode::FirstChild);
        pXMLChild;
        pXMLChild = pXMLChild->GetNodeItem(CFX_XMLNode::NextSibling)) {
@@ -992,8 +991,7 @@
       case FX_XMLNODE_Element: {
         CFX_XMLElement* pXMLElement = static_cast<CFX_XMLElement*>(pXMLChild);
         {
-          CFX_WideString wsNamespaceURI =
-              GetElementTagNamespaceURI(pXMLElement);
+          WideString wsNamespaceURI = GetElementTagNamespaceURI(pXMLElement);
           if (wsNamespaceURI == L"http://www.xfa.com/schema/xfa-package/" ||
               wsNamespaceURI == L"http://www.xfa.org/schema/xfa-package/" ||
               wsNamespaceURI == L"http://www.w3.org/2001/XMLSchema-instance") {
@@ -1003,7 +1001,7 @@
 
         XFA_Element eNodeType = XFA_Element::DataModel;
         if (eNodeType == XFA_Element::DataModel) {
-          CFX_WideString wsDataNodeAttr;
+          WideString wsDataNodeAttr;
           if (FindAttributeWithNS(pXMLElement, L"dataNode",
                                   L"http://www.xfa.org/schema/xfa-data/1.0/",
                                   wsDataNodeAttr)) {
@@ -1013,7 +1011,7 @@
               eNodeType = XFA_Element::DataValue;
           }
         }
-        CFX_WideString wsContentType;
+        WideString wsContentType;
         if (eNodeType == XFA_Element::DataModel) {
           if (FindAttributeWithNS(pXMLElement, L"contentType",
                                   L"http://www.xfa.org/schema/xfa-data/1.0/",
@@ -1048,9 +1046,9 @@
         bool bNeedValue = true;
 
         for (auto it : pXMLElement->GetAttributes()) {
-          CFX_WideString wsName;
-          CFX_WideString wsNS;
-          if (!ResolveAttribute(pXMLElement, it.first.AsStringC(), wsName,
+          WideString wsName;
+          WideString wsNS;
+          if (!ResolveAttribute(pXMLElement, it.first.AsStringView(), wsName,
                                 wsNS)) {
             continue;
           }
@@ -1080,7 +1078,7 @@
         }
 
         if (!bNeedValue) {
-          CFX_WideString wsNilName(L"xsi:nil");
+          WideString wsNilName(L"xsi:nil");
           pXMLElement->RemoveAttribute(wsNilName.c_str());
         }
         pXFANode->InsertChild(pXFAChild);
@@ -1096,7 +1094,7 @@
       case FX_XMLNODE_CharData:
       case FX_XMLNODE_Text: {
         CFX_XMLText* pXMLText = static_cast<CFX_XMLText*>(pXMLChild);
-        CFX_WideString wsText = pXMLText->GetText();
+        WideString wsText = pXMLText->GetText();
         if (IsStringAllWhitespace(wsText))
           continue;
 
@@ -1131,7 +1129,7 @@
     if (eNodeType == FX_XMLNODE_Instruction)
       continue;
 
-    CFX_WideString wsText;
+    WideString wsText;
     if (eNodeType == FX_XMLNODE_Text || eNodeType == FX_XMLNODE_CharData) {
       wsText = static_cast<CFX_XMLText*>(pXMLChild)->GetText();
       if (!pXMLCurValueNode)
@@ -1148,7 +1146,7 @@
     } else {
       bMarkAsCompound = true;
       if (pXMLCurValueNode) {
-        CFX_WideString wsCurValue = wsCurValueTextBuf.MakeString();
+        WideString wsCurValue = wsCurValueTextBuf.MakeString();
         if (!wsCurValue.IsEmpty()) {
           CXFA_Node* pXFAChild =
               m_pFactory->CreateNode(ePacketID, XFA_Element::DataValue);
@@ -1170,19 +1168,19 @@
       if (!pXFAChild)
         return;
 
-      CFX_WideString wsNodeStr =
+      WideString wsNodeStr =
           static_cast<CFX_XMLElement*>(pXMLChild)->GetLocalTagName();
       pXFAChild->SetCData(XFA_ATTRIBUTE_Name, wsNodeStr);
       ParseDataValue(pXFAChild, pXMLChild, ePacketID);
       pXFANode->InsertChild(pXFAChild);
       pXFAChild->SetXMLMappingNode(pXMLChild);
       pXFAChild->SetFlag(XFA_NodeFlag_Initialized, false);
-      CFX_WideStringC wsCurValue = pXFAChild->GetCData(XFA_ATTRIBUTE_Value);
+      WideStringView wsCurValue = pXFAChild->GetCData(XFA_ATTRIBUTE_Value);
       wsValueTextBuf << wsCurValue;
     }
   }
   if (pXMLCurValueNode) {
-    CFX_WideString wsCurValue = wsCurValueTextBuf.MakeString();
+    WideString wsCurValue = wsCurValueTextBuf.MakeString();
     if (!wsCurValue.IsEmpty()) {
       if (bMarkAsCompound) {
         CXFA_Node* pXFAChild =
@@ -1201,7 +1199,7 @@
     }
     pXMLCurValueNode = nullptr;
   }
-  CFX_WideString wsNodeValue = wsValueTextBuf.MakeString();
+  WideString wsNodeValue = wsValueTextBuf.MakeString();
   pXFANode->SetCData(XFA_ATTRIBUTE_Value, wsNodeValue);
 }
 
@@ -1211,9 +1209,8 @@
   if (!m_bDocumentParser)
     return;
 
-  CFX_WideString wsTargetName = pXMLInstruction->GetName();
-  const std::vector<CFX_WideString>& target_data =
-      pXMLInstruction->GetTargetData();
+  WideString wsTargetName = pXMLInstruction->GetName();
+  const std::vector<WideString>& target_data = pXMLInstruction->GetTargetData();
   if (wsTargetName == L"originalXFAVersion") {
     if (target_data.size() > 1 &&
         (pXFANode->GetDocument()->RecognizeXFAVersionNumber(target_data[0]) !=
diff --git a/xfa/fxfa/parser/cxfa_simple_parser.h b/xfa/fxfa/parser/cxfa_simple_parser.h
index 705b6bd..91bfb05 100644
--- a/xfa/fxfa/parser/cxfa_simple_parser.h
+++ b/xfa/fxfa/parser/cxfa_simple_parser.h
@@ -28,7 +28,7 @@
   int32_t StartParse(const CFX_RetainPtr<IFX_SeekableStream>& pStream,
                      XFA_XDPPACKET ePacketID);
   int32_t DoParse();
-  CFX_XMLNode* ParseXMLData(const CFX_ByteString& wsXML);
+  CFX_XMLNode* ParseXMLData(const ByteString& wsXML);
   void ConstructXFANode(CXFA_Node* pXFANode, CFX_XMLNode* pXMLNode);
   CXFA_Node* GetRootNode() const;
   CFX_XMLDoc* GetXMLDoc() const;
diff --git a/xfa/fxfa/parser/cxfa_stroke.cpp b/xfa/fxfa/parser/cxfa_stroke.cpp
index e81c0ce..f131934 100644
--- a/xfa/fxfa/parser/cxfa_stroke.cpp
+++ b/xfa/fxfa/parser/cxfa_stroke.cpp
@@ -52,7 +52,7 @@
   if (!pNode)
     return 0xFF000000;
 
-  CFX_WideStringC wsColor;
+  WideStringView wsColor;
   pNode->TryCData(XFA_ATTRIBUTE_Value, wsColor);
   return CXFA_Data::ToColor(wsColor);
 }
@@ -62,7 +62,7 @@
     return;
 
   CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_Element::Color);
-  CFX_WideString wsColor;
+  WideString wsColor;
   int a;
   int r;
   int g;
diff --git a/xfa/fxfa/parser/cxfa_submit.cpp b/xfa/fxfa/parser/cxfa_submit.cpp
index e390e63..7fb04a3 100644
--- a/xfa/fxfa/parser/cxfa_submit.cpp
+++ b/xfa/fxfa/parser/cxfa_submit.cpp
@@ -18,10 +18,10 @@
   return m_pNode->GetEnum(XFA_ATTRIBUTE_Format);
 }
 
-void CXFA_Submit::GetSubmitTarget(CFX_WideStringC& wsTarget) {
+void CXFA_Submit::GetSubmitTarget(WideStringView& wsTarget) {
   m_pNode->TryCData(XFA_ATTRIBUTE_Target, wsTarget);
 }
 
-void CXFA_Submit::GetSubmitXDPContent(CFX_WideStringC& wsContent) {
+void CXFA_Submit::GetSubmitXDPContent(WideStringView& wsContent) {
   m_pNode->TryCData(XFA_ATTRIBUTE_XdpContent, wsContent);
 }
diff --git a/xfa/fxfa/parser/cxfa_submit.h b/xfa/fxfa/parser/cxfa_submit.h
index f10435e..9d4d7fe 100644
--- a/xfa/fxfa/parser/cxfa_submit.h
+++ b/xfa/fxfa/parser/cxfa_submit.h
@@ -19,8 +19,8 @@
 
   bool IsSubmitEmbedPDF();
   int32_t GetSubmitFormat();
-  void GetSubmitTarget(CFX_WideStringC& wsTarget);
-  void GetSubmitXDPContent(CFX_WideStringC& wsContent);
+  void GetSubmitTarget(WideStringView& wsTarget);
+  void GetSubmitXDPContent(WideStringView& wsContent);
 };
 
 #endif  // XFA_FXFA_PARSER_CXFA_SUBMIT_H_
diff --git a/xfa/fxfa/parser/cxfa_text.cpp b/xfa/fxfa/parser/cxfa_text.cpp
index 192a4de..cab11a6 100644
--- a/xfa/fxfa/parser/cxfa_text.cpp
+++ b/xfa/fxfa/parser/cxfa_text.cpp
@@ -10,6 +10,6 @@
 
 CXFA_Text::CXFA_Text(CXFA_Node* pNode) : CXFA_Data(pNode) {}
 
-void CXFA_Text::GetContent(CFX_WideString& wsText) {
+void CXFA_Text::GetContent(WideString& wsText) {
   m_pNode->TryContent(wsText);
 }
diff --git a/xfa/fxfa/parser/cxfa_text.h b/xfa/fxfa/parser/cxfa_text.h
index ca41c0d..18b5628 100644
--- a/xfa/fxfa/parser/cxfa_text.h
+++ b/xfa/fxfa/parser/cxfa_text.h
@@ -16,7 +16,7 @@
  public:
   explicit CXFA_Text(CXFA_Node* pNode);
 
-  void GetContent(CFX_WideString& wsText);
+  void GetContent(WideString& wsText);
 };
 
 #endif  // XFA_FXFA_PARSER_CXFA_TEXT_H_
diff --git a/xfa/fxfa/parser/cxfa_thisproxy.cpp b/xfa/fxfa/parser/cxfa_thisproxy.cpp
index 2938c1f..55e676e 100644
--- a/xfa/fxfa/parser/cxfa_thisproxy.cpp
+++ b/xfa/fxfa/parser/cxfa_thisproxy.cpp
@@ -12,7 +12,7 @@
     : CXFA_Object(pThisNode->GetDocument(),
                   XFA_ObjectType::VariablesThis,
                   XFA_Element::Unknown,
-                  CFX_WideStringC()),
+                  WideStringView()),
       m_pThisNode(nullptr),
       m_pScriptNode(nullptr) {
   m_pThisNode = pThisNode;
diff --git a/xfa/fxfa/parser/cxfa_tooltip.cpp b/xfa/fxfa/parser/cxfa_tooltip.cpp
index f3de7aa..9561ef2 100644
--- a/xfa/fxfa/parser/cxfa_tooltip.cpp
+++ b/xfa/fxfa/parser/cxfa_tooltip.cpp
@@ -10,6 +10,6 @@
 
 CXFA_ToolTip::CXFA_ToolTip(CXFA_Node* pNode) : CXFA_Data(pNode) {}
 
-bool CXFA_ToolTip::GetTip(CFX_WideString& wsTip) {
+bool CXFA_ToolTip::GetTip(WideString& wsTip) {
   return m_pNode->TryContent(wsTip);
 }
diff --git a/xfa/fxfa/parser/cxfa_tooltip.h b/xfa/fxfa/parser/cxfa_tooltip.h
index 433885d..cc4bc31 100644
--- a/xfa/fxfa/parser/cxfa_tooltip.h
+++ b/xfa/fxfa/parser/cxfa_tooltip.h
@@ -16,7 +16,7 @@
  public:
   explicit CXFA_ToolTip(CXFA_Node* pNode);
 
-  bool GetTip(CFX_WideString& wsTip);
+  bool GetTip(WideString& wsTip);
 };
 
 #endif  // XFA_FXFA_PARSER_CXFA_TOOLTIP_H_
diff --git a/xfa/fxfa/parser/cxfa_validate.cpp b/xfa/fxfa/parser/cxfa_validate.cpp
index 712d0f2..fc47274 100644
--- a/xfa/fxfa/parser/cxfa_validate.cpp
+++ b/xfa/fxfa/parser/cxfa_validate.cpp
@@ -16,10 +16,10 @@
 }
 
 bool CXFA_Validate::SetTestValue(int32_t iType,
-                                 CFX_WideString& wsValue,
+                                 WideString& wsValue,
                                  XFA_ATTRIBUTEENUM eName) {
   const XFA_ATTRIBUTEENUMINFO* pInfo =
-      XFA_GetAttributeEnumByName(wsValue.AsStringC());
+      XFA_GetAttributeEnumByName(wsValue.AsStringView());
   if (pInfo)
     eName = pInfo->eName;
 
@@ -27,7 +27,7 @@
   return true;
 }
 
-bool CXFA_Validate::SetNullTest(CFX_WideString wsValue) {
+bool CXFA_Validate::SetNullTest(WideString wsValue) {
   return SetTestValue(XFA_ATTRIBUTE_NullTest, wsValue,
                       XFA_ATTRIBUTEENUM_Disabled);
 }
@@ -40,8 +40,8 @@
   return m_pNode->GetEnum(XFA_ATTRIBUTE_ScriptTest);
 }
 
-void CXFA_Validate::GetMessageText(CFX_WideString& wsMessage,
-                                   const CFX_WideString& wsMessageType) {
+void CXFA_Validate::GetMessageText(WideString& wsMessage,
+                                   const WideString& wsMessageType) {
   CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_Element::Message, false);
   if (!pNode)
     return;
@@ -52,7 +52,7 @@
     if (pItemNode->GetElementType() != XFA_Element::Text)
       continue;
 
-    CFX_WideStringC wsName;
+    WideStringView wsName;
     pItemNode->TryCData(XFA_ATTRIBUTE_Name, wsName);
     if (wsName.IsEmpty() || wsName == wsMessageType) {
       pItemNode->TryContent(wsMessage);
@@ -61,24 +61,24 @@
   }
 }
 
-void CXFA_Validate::SetFormatMessageText(CFX_WideString wsMessage) {
+void CXFA_Validate::SetFormatMessageText(WideString wsMessage) {
   SetMessageText(wsMessage, L"formatTest");
 }
 
-void CXFA_Validate::GetFormatMessageText(CFX_WideString& wsMessage) {
+void CXFA_Validate::GetFormatMessageText(WideString& wsMessage) {
   GetMessageText(wsMessage, L"formatTest");
 }
 
-void CXFA_Validate::SetNullMessageText(CFX_WideString wsMessage) {
+void CXFA_Validate::SetNullMessageText(WideString wsMessage) {
   SetMessageText(wsMessage, L"nullTest");
 }
 
-void CXFA_Validate::GetNullMessageText(CFX_WideString& wsMessage) {
+void CXFA_Validate::GetNullMessageText(WideString& wsMessage) {
   GetMessageText(wsMessage, L"nullTest");
 }
 
-void CXFA_Validate::SetMessageText(CFX_WideString& wsMessage,
-                                   const CFX_WideString& wsMessageType) {
+void CXFA_Validate::SetMessageText(WideString& wsMessage,
+                                   const WideString& wsMessageType) {
   CXFA_Node* pNode = m_pNode->GetProperty(0, XFA_Element::Message, true);
   if (!pNode)
     return;
@@ -89,7 +89,7 @@
     if (pItemNode->GetElementType() != XFA_Element::Text)
       continue;
 
-    CFX_WideStringC wsName;
+    WideStringView wsName;
     pItemNode->TryCData(XFA_ATTRIBUTE_Name, wsName);
     if (wsName.IsEmpty() || wsName == wsMessageType) {
       pItemNode->SetContent(wsMessage, wsMessage, false);
@@ -102,15 +102,15 @@
   pTextNode->SetContent(wsMessage, wsMessage, false);
 }
 
-void CXFA_Validate::GetScriptMessageText(CFX_WideString& wsMessage) {
+void CXFA_Validate::GetScriptMessageText(WideString& wsMessage) {
   GetMessageText(wsMessage, L"scriptTest");
 }
 
-void CXFA_Validate::SetScriptMessageText(CFX_WideString wsMessage) {
+void CXFA_Validate::SetScriptMessageText(WideString wsMessage) {
   SetMessageText(wsMessage, L"scriptTest");
 }
 
-void CXFA_Validate::GetPicture(CFX_WideString& wsPicture) {
+void CXFA_Validate::GetPicture(WideString& wsPicture) {
   if (CXFA_Node* pNode = m_pNode->GetChild(0, XFA_Element::Picture))
     pNode->TryContent(wsPicture);
 }
diff --git a/xfa/fxfa/parser/cxfa_validate.h b/xfa/fxfa/parser/cxfa_validate.h
index 470cefe..ce4ba64 100644
--- a/xfa/fxfa/parser/cxfa_validate.h
+++ b/xfa/fxfa/parser/cxfa_validate.h
@@ -20,24 +20,22 @@
 
   int32_t GetFormatTest();
   int32_t GetNullTest();
-  bool SetNullTest(CFX_WideString wsValue);
+  bool SetNullTest(WideString wsValue);
   int32_t GetScriptTest();
-  void GetFormatMessageText(CFX_WideString& wsMessage);
-  void SetFormatMessageText(CFX_WideString wsMessage);
-  void GetNullMessageText(CFX_WideString& wsMessage);
-  void SetNullMessageText(CFX_WideString wsMessage);
-  void GetScriptMessageText(CFX_WideString& wsMessage);
-  void SetScriptMessageText(CFX_WideString wsMessage);
-  void GetPicture(CFX_WideString& wsPicture);
+  void GetFormatMessageText(WideString& wsMessage);
+  void SetFormatMessageText(WideString wsMessage);
+  void GetNullMessageText(WideString& wsMessage);
+  void SetNullMessageText(WideString wsMessage);
+  void GetScriptMessageText(WideString& wsMessage);
+  void SetScriptMessageText(WideString wsMessage);
+  void GetPicture(WideString& wsPicture);
   CXFA_Script GetScript();
 
  private:
-  void GetMessageText(CFX_WideString& wsMessage,
-                      const CFX_WideString& wsMessageType);
-  void SetMessageText(CFX_WideString& wsMessage,
-                      const CFX_WideString& wsMessageType);
+  void GetMessageText(WideString& wsMessage, const WideString& wsMessageType);
+  void SetMessageText(WideString& wsMessage, const WideString& wsMessageType);
   bool SetTestValue(int32_t iType,
-                    CFX_WideString& wsValue,
+                    WideString& wsValue,
                     XFA_ATTRIBUTEENUM eName);
 };
 
diff --git a/xfa/fxfa/parser/cxfa_value.cpp b/xfa/fxfa/parser/cxfa_value.cpp
index 4f166d5..abf55da 100644
--- a/xfa/fxfa/parser/cxfa_value.cpp
+++ b/xfa/fxfa/parser/cxfa_value.cpp
@@ -16,7 +16,7 @@
   return XFA_Element::Unknown;
 }
 
-bool CXFA_Value::GetChildValueContent(CFX_WideString& wsContent) {
+bool CXFA_Value::GetChildValueContent(WideString& wsContent) {
   if (!m_pNode)
     return false;
   if (CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild))
diff --git a/xfa/fxfa/parser/cxfa_value.h b/xfa/fxfa/parser/cxfa_value.h
index 225e187..52df169 100644
--- a/xfa/fxfa/parser/cxfa_value.h
+++ b/xfa/fxfa/parser/cxfa_value.h
@@ -23,7 +23,7 @@
   explicit CXFA_Value(CXFA_Node* pNode) : CXFA_Data(pNode) {}
 
   XFA_Element GetChildValueClassID();
-  bool GetChildValueContent(CFX_WideString& wsContent);
+  bool GetChildValueContent(WideString& wsContent);
   CXFA_Arc GetArc();
   CXFA_Line GetLine();
   CXFA_Rectangle GetRectangle();
diff --git a/xfa/fxfa/parser/cxfa_widgetdata.cpp b/xfa/fxfa/parser/cxfa_widgetdata.cpp
index 80981d9..1879377 100644
--- a/xfa/fxfa/parser/cxfa_widgetdata.cpp
+++ b/xfa/fxfa/parser/cxfa_widgetdata.cpp
@@ -34,9 +34,9 @@
   return fThickness;
 }
 
-bool SplitDateTime(const CFX_WideString& wsDateTime,
-                   CFX_WideString& wsDate,
-                   CFX_WideString& wsTime) {
+bool SplitDateTime(const WideString& wsDateTime,
+                   WideString& wsDate,
+                   WideString& wsTime) {
   wsDate = L"";
   wsTime = L"";
   if (wsDateTime.IsEmpty())
@@ -208,9 +208,9 @@
   return XFA_ATTRIBUTEENUM_Unknown;
 }
 
-CFX_WideStringC GetAttributeDefaultValue_Cdata(XFA_Element eElement,
-                                               XFA_ATTRIBUTE eAttribute,
-                                               uint32_t dwPacket) {
+WideStringView GetAttributeDefaultValue_Cdata(XFA_Element eElement,
+                                              XFA_ATTRIBUTE eAttribute,
+                                              uint32_t dwPacket) {
   void* pValue;
   if (XFA_GetAttributeDefaultValue(pValue, eElement, eAttribute,
                                    XFA_ATTRIBUTETYPE_Cdata, dwPacket)) {
@@ -251,7 +251,7 @@
   return m_eUIType;
 }
 
-CFX_WideString CXFA_WidgetData::GetRawValue() {
+WideString CXFA_WidgetData::GetRawValue() {
   return m_pNode->GetContent();
 }
 
@@ -309,13 +309,13 @@
     CXFA_Event event(pNode);
     if (event.GetActivity() == iActivity) {
       if (iActivity == XFA_ATTRIBUTEENUM_Ready) {
-        CFX_WideStringC wsRef;
+        WideStringView wsRef;
         event.GetRef(wsRef);
         if (bIsFormReady) {
-          if (wsRef == CFX_WideStringC(L"$form"))
+          if (wsRef == WideStringView(L"$form"))
             events.push_back(pNode);
         } else {
-          if (wsRef == CFX_WideStringC(L"$layout"))
+          if (wsRef == WideStringView(L"$layout"))
             events.push_back(pNode);
         }
       } else {
@@ -430,12 +430,12 @@
       XFA_Element::Button, XFA_ATTRIBUTE_Highlight, XFA_XDPPACKET_Form);
 }
 
-bool CXFA_WidgetData::GetButtonRollover(CFX_WideString& wsRollover,
+bool CXFA_WidgetData::GetButtonRollover(WideString& wsRollover,
                                         bool& bRichText) {
   if (CXFA_Node* pItems = m_pNode->GetChild(0, XFA_Element::Items)) {
     CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild);
     while (pText) {
-      CFX_WideStringC wsName;
+      WideStringView wsName;
       pText->TryCData(XFA_ATTRIBUTE_Name, wsName);
       if (wsName == L"rollover") {
         pText->TryContent(wsRollover);
@@ -448,11 +448,11 @@
   return false;
 }
 
-bool CXFA_WidgetData::GetButtonDown(CFX_WideString& wsDown, bool& bRichText) {
+bool CXFA_WidgetData::GetButtonDown(WideString& wsDown, bool& bRichText) {
   if (CXFA_Node* pItems = m_pNode->GetChild(0, XFA_Element::Items)) {
     CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild);
     while (pText) {
-      CFX_WideStringC wsName;
+      WideStringView wsName;
       pText->TryCData(XFA_ATTRIBUTE_Name, wsName);
       if (wsName == L"down") {
         pText->TryContent(wsDown);
@@ -505,7 +505,7 @@
 }
 
 XFA_CHECKSTATE CXFA_WidgetData::GetCheckState() {
-  CFX_WideString wsValue = GetRawValue();
+  WideString wsValue = GetRawValue();
   if (wsValue.IsEmpty())
     return XFA_CHECKSTATE_Off;
 
@@ -513,7 +513,7 @@
     CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild);
     int32_t i = 0;
     while (pText) {
-      CFX_WideString wsContent;
+      WideString wsContent;
       if (pText->TryContent(wsContent) && (wsContent == wsValue))
         return (XFA_CHECKSTATE)i;
 
@@ -527,7 +527,7 @@
 void CXFA_WidgetData::SetCheckState(XFA_CHECKSTATE eCheckState, bool bNotify) {
   CXFA_WidgetData exclGroup(GetExclGroupNode());
   if (exclGroup) {
-    CFX_WideString wsValue;
+    WideString wsValue;
     if (eCheckState != XFA_CHECKSTATE_Off) {
       if (CXFA_Node* pItems = m_pNode->GetChild(0, XFA_Element::Items)) {
         CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild);
@@ -549,8 +549,8 @@
       if (!pItemchild)
         continue;
 
-      CFX_WideString text = pItemchild->GetContent();
-      CFX_WideString wsChildValue = text;
+      WideString text = pItemchild->GetContent();
+      WideString wsChildValue = text;
       if (wsValue != text) {
         pItemchild = pItemchild->GetNodeItem(XFA_NODEITEM_NextSibling);
         if (pItemchild)
@@ -569,7 +569,7 @@
 
     int32_t i = -1;
     CXFA_Node* pText = pItems->GetNodeItem(XFA_NODEITEM_FirstChild);
-    CFX_WideString wsContent;
+    WideString wsContent;
     while (pText) {
       i++;
       if (i == eCheckState) {
@@ -591,7 +591,7 @@
 
 CXFA_Node* CXFA_WidgetData::GetSelectedMember() {
   CXFA_Node* pSelectedMember = nullptr;
-  CFX_WideString wsState = GetRawValue();
+  WideString wsState = GetRawValue();
   if (wsState.IsEmpty())
     return pSelectedMember;
 
@@ -606,7 +606,7 @@
   return pSelectedMember;
 }
 
-CXFA_Node* CXFA_WidgetData::SetSelectedMember(const CFX_WideStringC& wsName,
+CXFA_Node* CXFA_WidgetData::SetSelectedMember(const WideStringView& wsName,
                                               bool bNotify) {
   uint32_t nameHash = FX_HashCode_GetW(wsName, false);
   for (CXFA_Node* pNode = ToNode(m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild));
@@ -620,11 +620,11 @@
   return nullptr;
 }
 
-void CXFA_WidgetData::SetSelectedMemberByValue(const CFX_WideStringC& wsValue,
+void CXFA_WidgetData::SetSelectedMemberByValue(const WideStringView& wsValue,
                                                bool bNotify,
                                                bool bScriptModify,
                                                bool bSyncData) {
-  CFX_WideString wsExclGroup;
+  WideString wsExclGroup;
   for (CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild); pNode;
        pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
     if (pNode->GetElementType() != XFA_Element::Field)
@@ -638,7 +638,7 @@
     if (!pItemchild)
       continue;
 
-    CFX_WideString wsChildValue = pItemchild->GetContent();
+    WideString wsChildValue = pItemchild->GetContent();
     if (wsValue != wsChildValue) {
       pItemchild = pItemchild->GetNodeItem(XFA_NODEITEM_NextSibling);
       if (pItemchild)
@@ -740,7 +740,7 @@
   return pItem->CountChildren(XFA_Element::Unknown);
 }
 
-bool CXFA_WidgetData::GetChoiceListItem(CFX_WideString& wsText,
+bool CXFA_WidgetData::GetChoiceListItem(WideString& wsText,
                                         int32_t nIndex,
                                         bool bSaveValue) {
   wsText.clear();
@@ -776,8 +776,7 @@
   return false;
 }
 
-std::vector<CFX_WideString> CXFA_WidgetData::GetChoiceListItems(
-    bool bSaveValue) {
+std::vector<WideString> CXFA_WidgetData::GetChoiceListItems(bool bSaveValue) {
   std::vector<CXFA_Node*> items;
   for (CXFA_Node* pNode = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild);
        pNode && items.size() < 2;
@@ -786,7 +785,7 @@
       items.push_back(pNode);
   }
   if (items.empty())
-    return std::vector<CFX_WideString>();
+    return std::vector<WideString>();
 
   CXFA_Node* pItem = items.front();
   if (items.size() > 1) {
@@ -796,7 +795,7 @@
       pItem = items[1];
   }
 
-  std::vector<CFX_WideString> wsTextArray;
+  std::vector<WideString> wsTextArray;
   for (CXFA_Node* pNode = pItem->GetNodeItem(XFA_NODEITEM_FirstChild); pNode;
        pNode = pNode->GetNodeItem(XFA_NODEITEM_NextSibling)) {
     wsTextArray.emplace_back();
@@ -806,12 +805,12 @@
 }
 
 int32_t CXFA_WidgetData::CountSelectedItems() {
-  std::vector<CFX_WideString> wsValueArray = GetSelectedItemsValue();
+  std::vector<WideString> wsValueArray = GetSelectedItemsValue();
   if (IsListBox() || !IsChoiceListAllowTextEntry())
     return pdfium::CollectionSize<int32_t>(wsValueArray);
 
   int32_t iSelected = 0;
-  std::vector<CFX_WideString> wsSaveTextArray = GetChoiceListItems(true);
+  std::vector<WideString> wsSaveTextArray = GetChoiceListItems(true);
   for (const auto& value : wsValueArray) {
     if (pdfium::ContainsValue(wsSaveTextArray, value))
       iSelected++;
@@ -820,11 +819,11 @@
 }
 
 int32_t CXFA_WidgetData::GetSelectedItem(int32_t nIndex) {
-  std::vector<CFX_WideString> wsValueArray = GetSelectedItemsValue();
+  std::vector<WideString> wsValueArray = GetSelectedItemsValue();
   if (!pdfium::IndexInBounds(wsValueArray, nIndex))
     return -1;
 
-  std::vector<CFX_WideString> wsSaveTextArray = GetChoiceListItems(true);
+  std::vector<WideString> wsSaveTextArray = GetChoiceListItems(true);
   auto it = std::find(wsSaveTextArray.begin(), wsSaveTextArray.end(),
                       wsValueArray[nIndex]);
   return it != wsSaveTextArray.end() ? it - wsSaveTextArray.begin() : -1;
@@ -832,8 +831,8 @@
 
 std::vector<int32_t> CXFA_WidgetData::GetSelectedItems() {
   std::vector<int32_t> iSelArray;
-  std::vector<CFX_WideString> wsValueArray = GetSelectedItemsValue();
-  std::vector<CFX_WideString> wsSaveTextArray = GetChoiceListItems(true);
+  std::vector<WideString> wsValueArray = GetSelectedItemsValue();
+  std::vector<WideString> wsSaveTextArray = GetChoiceListItems(true);
   for (const auto& value : wsValueArray) {
     auto it = std::find(wsSaveTextArray.begin(), wsSaveTextArray.end(), value);
     if (it != wsSaveTextArray.end())
@@ -842,9 +841,9 @@
   return iSelArray;
 }
 
-std::vector<CFX_WideString> CXFA_WidgetData::GetSelectedItemsValue() {
-  std::vector<CFX_WideString> wsSelTextArray;
-  CFX_WideString wsValue = GetRawValue();
+std::vector<WideString> CXFA_WidgetData::GetSelectedItemsValue() {
+  std::vector<WideString> wsSelTextArray;
+  WideString wsValue = GetRawValue();
   if (GetChoiceListOpen() == XFA_ATTRIBUTEENUM_MultiSelect) {
     if (!wsValue.IsEmpty()) {
       FX_STRSIZE iStart = 0;
@@ -868,7 +867,7 @@
 }
 
 bool CXFA_WidgetData::GetItemState(int32_t nIndex) {
-  std::vector<CFX_WideString> wsSaveTextArray = GetChoiceListItems(true);
+  std::vector<WideString> wsSaveTextArray = GetChoiceListItems(true);
   return pdfium::IndexInBounds(wsSaveTextArray, nIndex) &&
          pdfium::ContainsValue(GetSelectedItemsValue(),
                                wsSaveTextArray[nIndex]);
@@ -879,12 +878,12 @@
                                    bool bNotify,
                                    bool bScriptModify,
                                    bool bSyncData) {
-  std::vector<CFX_WideString> wsSaveTextArray = GetChoiceListItems(true);
+  std::vector<WideString> wsSaveTextArray = GetChoiceListItems(true);
   if (!pdfium::IndexInBounds(wsSaveTextArray, nIndex))
     return;
 
   int32_t iSel = -1;
-  std::vector<CFX_WideString> wsValueArray = GetSelectedItemsValue();
+  std::vector<WideString> wsValueArray = GetSelectedItemsValue();
   auto it = std::find(wsValueArray.begin(), wsValueArray.end(),
                       wsSaveTextArray[nIndex]);
   if (it != wsValueArray.end())
@@ -893,7 +892,7 @@
   if (GetChoiceListOpen() == XFA_ATTRIBUTEENUM_MultiSelect) {
     if (bSelected) {
       if (iSel < 0) {
-        CFX_WideString wsValue = GetRawValue();
+        WideString wsValue = GetRawValue();
         if (!wsValue.IsEmpty()) {
           wsValue += L"\n";
         }
@@ -911,15 +910,15 @@
   } else {
     if (bSelected) {
       if (iSel < 0) {
-        CFX_WideString wsSaveText = wsSaveTextArray[nIndex];
-        CFX_WideString wsFormatText(wsSaveText);
+        WideString wsSaveText = wsSaveTextArray[nIndex];
+        WideString wsFormatText(wsSaveText);
         GetFormatDataValue(wsSaveText, wsFormatText);
         m_pNode->SetContent(wsSaveText, wsFormatText, bNotify, bScriptModify,
                             bSyncData);
       }
     } else if (iSel >= 0) {
-      m_pNode->SetContent(CFX_WideString(), CFX_WideString(), bNotify,
-                          bScriptModify, bSyncData);
+      m_pNode->SetContent(WideString(), WideString(), bNotify, bScriptModify,
+                          bSyncData);
     }
   }
 }
@@ -928,18 +927,18 @@
                                        bool bNotify,
                                        bool bScriptModify,
                                        bool bSyncData) {
-  CFX_WideString wsValue;
+  WideString wsValue;
   int32_t iSize = pdfium::CollectionSize<int32_t>(iSelArray);
   if (iSize >= 1) {
-    std::vector<CFX_WideString> wsSaveTextArray = GetChoiceListItems(true);
-    CFX_WideString wsItemValue;
+    std::vector<WideString> wsSaveTextArray = GetChoiceListItems(true);
+    WideString wsItemValue;
     for (int32_t i = 0; i < iSize; i++) {
       wsItemValue = (iSize == 1) ? wsSaveTextArray[iSelArray[i]]
                                  : wsSaveTextArray[iSelArray[i]] + L"\n";
       wsValue += wsItemValue;
     }
   }
-  CFX_WideString wsFormat(wsValue);
+  WideString wsFormat(wsValue);
   if (GetChoiceListOpen() != XFA_ATTRIBUTEENUM_MultiSelect)
     GetFormatDataValue(wsValue, wsFormat);
 
@@ -949,7 +948,7 @@
 void CXFA_WidgetData::ClearAllSelections() {
   CXFA_Node* pBind = m_pNode->GetBindData();
   if (!pBind || GetChoiceListOpen() != XFA_ATTRIBUTEENUM_MultiSelect) {
-    SyncValue(CFX_WideString(), false);
+    SyncValue(WideString(), false);
     return;
   }
 
@@ -957,11 +956,11 @@
     pBind->RemoveChild(pChildNode);
 }
 
-void CXFA_WidgetData::InsertItem(const CFX_WideString& wsLabel,
-                                 const CFX_WideString& wsValue,
+void CXFA_WidgetData::InsertItem(const WideString& wsLabel,
+                                 const WideString& wsValue,
                                  bool bNotify) {
   int32_t nIndex = -1;
-  CFX_WideString wsNewValue(wsValue);
+  WideString wsNewValue(wsValue);
   if (wsNewValue.IsEmpty())
     wsNewValue = wsLabel;
 
@@ -999,7 +998,7 @@
     CXFA_Node* pListNode = pNode->GetNodeItem(XFA_NODEITEM_FirstChild);
     int32_t i = 0;
     while (pListNode) {
-      CFX_WideString wsOldValue;
+      WideString wsOldValue;
       pListNode->TryContent(wsOldValue);
       InsertListTextItem(pSaveItems, wsOldValue, i);
       i++;
@@ -1015,8 +1014,8 @@
       this, wsLabel.c_str(), wsValue.c_str(), nIndex);
 }
 
-void CXFA_WidgetData::GetItemLabel(const CFX_WideStringC& wsValue,
-                                   CFX_WideString& wsLabel) {
+void CXFA_WidgetData::GetItemLabel(const WideStringView& wsValue,
+                                   WideString& wsLabel) {
   int32_t iCount = 0;
   std::vector<CXFA_Node*> listitems;
   CXFA_Node* pItems = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild);
@@ -1040,7 +1039,7 @@
     }
     iCount = 0;
     int32_t iSearch = -1;
-    CFX_WideString wsContent;
+    WideString wsContent;
     CXFA_Node* pChildItem = pSaveItems->GetNodeItem(XFA_NODEITEM_FirstChild);
     for (; pChildItem;
          pChildItem = pChildItem->GetNodeItem(XFA_NODEITEM_NextSibling)) {
@@ -1060,8 +1059,8 @@
   }
 }
 
-void CXFA_WidgetData::GetItemValue(const CFX_WideStringC& wsLabel,
-                                   CFX_WideString& wsValue) {
+void CXFA_WidgetData::GetItemValue(const WideStringView& wsLabel,
+                                   WideString& wsValue) {
   int32_t iCount = 0;
   std::vector<CXFA_Node*> listitems;
   for (CXFA_Node* pItems = m_pNode->GetNodeItem(XFA_NODEITEM_FirstChild);
@@ -1085,7 +1084,7 @@
     }
     iCount = 0;
     int32_t iSearch = -1;
-    CFX_WideString wsContent;
+    WideString wsContent;
     CXFA_Node* pChildItem = pLabelItems->GetNodeItem(XFA_NODEITEM_FirstChild);
     for (; pChildItem;
          pChildItem = pChildItem->GetNodeItem(XFA_NODEITEM_NextSibling)) {
@@ -1154,15 +1153,15 @@
   return -1;
 }
 
-CFX_WideString CXFA_WidgetData::GetBarcodeType() {
+WideString CXFA_WidgetData::GetBarcodeType() {
   CXFA_Node* pUIChild = GetUIChild();
-  return pUIChild ? CFX_WideString(pUIChild->GetCData(XFA_ATTRIBUTE_Type))
-                  : CFX_WideString();
+  return pUIChild ? WideString(pUIChild->GetCData(XFA_ATTRIBUTE_Type))
+                  : WideString();
 }
 
 bool CXFA_WidgetData::GetBarcodeAttribute_CharEncoding(int32_t* val) {
   CXFA_Node* pUIChild = GetUIChild();
-  CFX_WideString wsCharEncoding;
+  WideString wsCharEncoding;
   if (pUIChild->TryCData(XFA_ATTRIBUTE_CharEncoding, wsCharEncoding)) {
     if (wsCharEncoding.CompareNoCase(L"UTF-16")) {
       *val = CHAR_ENCODING_UNICODE;
@@ -1202,7 +1201,7 @@
 
 bool CXFA_WidgetData::GetBarcodeAttribute_DataLength(int32_t* val) {
   CXFA_Node* pUIChild = GetUIChild();
-  CFX_WideString wsDataLength;
+  WideString wsDataLength;
   if (pUIChild->TryCData(XFA_ATTRIBUTE_DataLength, wsDataLength)) {
     *val = FXSYS_wtoi(wsDataLength.c_str());
     return true;
@@ -1212,7 +1211,7 @@
 
 bool CXFA_WidgetData::GetBarcodeAttribute_StartChar(char* val) {
   CXFA_Node* pUIChild = GetUIChild();
-  CFX_WideStringC wsStartEndChar;
+  WideStringView wsStartEndChar;
   if (pUIChild->TryCData(XFA_ATTRIBUTE_StartChar, wsStartEndChar)) {
     if (wsStartEndChar.GetLength()) {
       *val = static_cast<char>(wsStartEndChar[0]);
@@ -1224,7 +1223,7 @@
 
 bool CXFA_WidgetData::GetBarcodeAttribute_EndChar(char* val) {
   CXFA_Node* pUIChild = GetUIChild();
-  CFX_WideStringC wsStartEndChar;
+  WideStringView wsStartEndChar;
   if (pUIChild->TryCData(XFA_ATTRIBUTE_EndChar, wsStartEndChar)) {
     if (wsStartEndChar.GetLength()) {
       *val = static_cast<char>(wsStartEndChar[0]);
@@ -1236,7 +1235,7 @@
 
 bool CXFA_WidgetData::GetBarcodeAttribute_ECLevel(int32_t* val) {
   CXFA_Node* pUIChild = GetUIChild();
-  CFX_WideString wsECLevel;
+  WideString wsECLevel;
   if (pUIChild->TryCData(XFA_ATTRIBUTE_ErrorCorrectionLevel, wsECLevel)) {
     *val = FXSYS_wtoi(wsECLevel.c_str());
     return true;
@@ -1313,7 +1312,7 @@
 
 bool CXFA_WidgetData::GetBarcodeAttribute_WideNarrowRatio(float* val) {
   CXFA_Node* pUIChild = GetUIChild();
-  CFX_WideString wsWideNarrowRatio;
+  WideString wsWideNarrowRatio;
   if (pUIChild->TryCData(XFA_ATTRIBUTE_WideNarrowRatio, wsWideNarrowRatio)) {
     auto ptPos = wsWideNarrowRatio.Find(':');
     float fRatio = 0;
@@ -1335,7 +1334,7 @@
   return false;
 }
 
-void CXFA_WidgetData::GetPasswordChar(CFX_WideString& wsPassWord) {
+void CXFA_WidgetData::GetPasswordChar(WideString& wsPassWord) {
   CXFA_Node* pUIChild = GetUIChild();
   if (pUIChild) {
     pUIChild->TryCData(XFA_ATTRIBUTE_PasswordChar, wsPassWord);
@@ -1400,7 +1399,7 @@
   return false;
 }
 
-bool CXFA_WidgetData::SetValue(const CFX_WideString& wsValue,
+bool CXFA_WidgetData::SetValue(const WideString& wsValue,
                                XFA_VALUEPICTURE eValueType) {
   if (wsValue.IsEmpty()) {
     SyncValue(wsValue, true);
@@ -1408,8 +1407,8 @@
   }
   m_bPreNull = m_bIsNull;
   m_bIsNull = false;
-  CFX_WideString wsNewText(wsValue);
-  CFX_WideString wsPicture;
+  WideString wsNewText(wsValue);
+  WideString wsPicture;
   GetPictureContent(wsPicture, eValueType);
   bool bValidate = true;
   bool bSyncData = false;
@@ -1455,7 +1454,7 @@
   return bValidate;
 }
 
-bool CXFA_WidgetData::GetPictureContent(CFX_WideString& wsPicture,
+bool CXFA_WidgetData::GetPictureContent(WideString& wsPicture,
                                         XFA_VALUEPICTURE ePicture) {
   if (ePicture == XFA_VALUEPICTURE_Raw)
     return false;
@@ -1549,7 +1548,7 @@
   if (!m_pNode)
     return nullptr;
 
-  CFX_WideString wsLocaleName;
+  WideString wsLocaleName;
   if (!m_pNode->GetLocaleName(wsLocaleName))
     return nullptr;
   if (wsLocaleName == L"ambient")
@@ -1557,14 +1556,14 @@
   return m_pNode->GetDocument()->GetLocalMgr()->GetLocaleByName(wsLocaleName);
 }
 
-bool CXFA_WidgetData::GetValue(CFX_WideString& wsValue,
+bool CXFA_WidgetData::GetValue(WideString& wsValue,
                                XFA_VALUEPICTURE eValueType) {
   wsValue = m_pNode->GetContent();
 
   if (eValueType == XFA_VALUEPICTURE_Display)
-    GetItemLabel(wsValue.AsStringC(), wsValue);
+    GetItemLabel(wsValue.AsStringView(), wsValue);
 
-  CFX_WideString wsPicture;
+  WideString wsPicture;
   GetPictureContent(wsPicture, eValueType);
   CXFA_Node* pNode = GetUIChild();
   if (!pNode)
@@ -1584,7 +1583,7 @@
       if (eValueType != XFA_VALUEPICTURE_Raw && wsPicture.IsEmpty()) {
         IFX_Locale* pLocale = GetLocal();
         if (eValueType == XFA_VALUEPICTURE_Display && pLocale) {
-          CFX_WideString wsOutput;
+          WideString wsOutput;
           NormalizeNumStr(wsValue, wsOutput);
           FormatNumStr(wsOutput, pLocale, wsOutput);
           wsValue = wsOutput;
@@ -1602,7 +1601,7 @@
     CXFA_LocaleMgr* pLocalMgr = m_pNode->GetDocument()->GetLocalMgr();
     switch (widgetValue.GetType()) {
       case XFA_VT_DATE: {
-        CFX_WideString wsDate, wsTime;
+        WideString wsDate, wsTime;
         if (SplitDateTime(wsValue, wsDate, wsTime)) {
           CXFA_LocaleValue date(XFA_VT_DATE, wsDate, pLocalMgr);
           if (date.FormatPatterns(wsValue, wsPicture, pLocale, eValueType))
@@ -1611,7 +1610,7 @@
         break;
       }
       case XFA_VT_TIME: {
-        CFX_WideString wsDate, wsTime;
+        WideString wsDate, wsTime;
         if (SplitDateTime(wsValue, wsDate, wsTime)) {
           CXFA_LocaleValue time(XFA_VT_TIME, wsTime, pLocalMgr);
           if (time.FormatPatterns(wsValue, wsPicture, pLocale, eValueType))
@@ -1627,13 +1626,13 @@
   return true;
 }
 
-bool CXFA_WidgetData::GetNormalizeDataValue(const CFX_WideString& wsValue,
-                                            CFX_WideString& wsNormalizeValue) {
+bool CXFA_WidgetData::GetNormalizeDataValue(const WideString& wsValue,
+                                            WideString& wsNormalizeValue) {
   wsNormalizeValue = wsValue;
   if (wsValue.IsEmpty())
     return true;
 
-  CFX_WideString wsPicture;
+  WideString wsPicture;
   GetPictureContent(wsPicture, XFA_VALUEPICTURE_DataBind);
   if (wsPicture.IsEmpty())
     return true;
@@ -1651,13 +1650,13 @@
   return false;
 }
 
-bool CXFA_WidgetData::GetFormatDataValue(const CFX_WideString& wsValue,
-                                         CFX_WideString& wsFormattedValue) {
+bool CXFA_WidgetData::GetFormatDataValue(const WideString& wsValue,
+                                         WideString& wsFormattedValue) {
   wsFormattedValue = wsValue;
   if (wsValue.IsEmpty())
     return true;
 
-  CFX_WideString wsPicture;
+  WideString wsPicture;
   GetPictureContent(wsPicture, XFA_VALUEPICTURE_DataBind);
   if (wsPicture.IsEmpty())
     return true;
@@ -1706,7 +1705,7 @@
     CXFA_LocaleValue widgetValue(iVTType, wsValue, pLocalMgr);
     switch (widgetValue.GetType()) {
       case XFA_VT_DATE: {
-        CFX_WideString wsDate, wsTime;
+        WideString wsDate, wsTime;
         if (SplitDateTime(wsValue, wsDate, wsTime)) {
           CXFA_LocaleValue date(XFA_VT_DATE, wsDate, pLocalMgr);
           if (date.FormatPatterns(wsFormattedValue, wsPicture, pLocale,
@@ -1717,7 +1716,7 @@
         break;
       }
       case XFA_VT_TIME: {
-        CFX_WideString wsDate, wsTime;
+        WideString wsDate, wsTime;
         if (SplitDateTime(wsValue, wsDate, wsTime)) {
           CXFA_LocaleValue time(XFA_VT_TIME, wsTime, pLocalMgr);
           if (time.FormatPatterns(wsFormattedValue, wsPicture, pLocale,
@@ -1736,8 +1735,8 @@
   return false;
 }
 
-void CXFA_WidgetData::NormalizeNumStr(const CFX_WideString& wsValue,
-                                      CFX_WideString& wsOutput) {
+void CXFA_WidgetData::NormalizeNumStr(const WideString& wsValue,
+                                      WideString& wsOutput) {
   if (wsValue.IsEmpty())
     return;
 
@@ -1753,14 +1752,14 @@
     wsOutput.InsertAtFront('0');
 }
 
-void CXFA_WidgetData::FormatNumStr(const CFX_WideString& wsValue,
+void CXFA_WidgetData::FormatNumStr(const WideString& wsValue,
                                    IFX_Locale* pLocale,
-                                   CFX_WideString& wsOutput) {
+                                   WideString& wsOutput) {
   if (wsValue.IsEmpty())
     return;
 
-  CFX_WideString wsSrcNum = wsValue;
-  CFX_WideString wsGroupSymbol =
+  WideString wsSrcNum = wsValue;
+  WideString wsGroupSymbol =
       pLocale->GetNumbericSymbol(FX_LOCALENUMSYMBOL_Grouping);
   bool bNeg = false;
   if (wsSrcNum[0] == '-') {
@@ -1791,11 +1790,11 @@
   }
 }
 
-void CXFA_WidgetData::SyncValue(const CFX_WideString& wsValue, bool bNotify) {
+void CXFA_WidgetData::SyncValue(const WideString& wsValue, bool bNotify) {
   if (!m_pNode)
     return;
 
-  CFX_WideString wsFormatValue(wsValue);
+  WideString wsFormatValue(wsValue);
   CXFA_WidgetData* pContainerWidgetData = m_pNode->GetContainerWidgetData();
   if (pContainerWidgetData)
     pContainerWidgetData->GetFormatDataValue(wsValue, wsFormatValue);
@@ -1804,20 +1803,20 @@
 }
 
 void CXFA_WidgetData::InsertListTextItem(CXFA_Node* pItems,
-                                         const CFX_WideString& wsText,
+                                         const WideString& wsText,
                                          int32_t nIndex) {
   CXFA_Node* pText = pItems->CreateSamePacketNode(XFA_Element::Text);
   pItems->InsertChild(nIndex, pText);
   pText->SetContent(wsText, wsText, false, false, false);
 }
 
-CFX_WideString CXFA_WidgetData::NumericLimit(const CFX_WideString& wsValue,
-                                             int32_t iLead,
-                                             int32_t iTread) const {
+WideString CXFA_WidgetData::NumericLimit(const WideString& wsValue,
+                                         int32_t iLead,
+                                         int32_t iTread) const {
   if ((iLead == -1) && (iTread == -1))
     return wsValue;
 
-  CFX_WideString wsRet;
+  WideString wsRet;
   int32_t iLead_ = 0, iTread_ = -1;
   int32_t iCount = wsValue.GetLength();
   if (iCount == 0)
@@ -1839,7 +1838,7 @@
         iTread_++;
         if (iTread_ > iTread) {
           if (iTread != -1) {
-            CFX_Decimal wsDeci = CFX_Decimal(wsValue.AsStringC());
+            CFX_Decimal wsDeci = CFX_Decimal(wsValue.AsStringView());
             wsDeci.SetScale(iTread);
             wsRet = wsDeci;
           }
diff --git a/xfa/fxfa/parser/cxfa_widgetdata.h b/xfa/fxfa/parser/cxfa_widgetdata.h
index f53d926..69f8d0d 100644
--- a/xfa/fxfa/parser/cxfa_widgetdata.h
+++ b/xfa/fxfa/parser/cxfa_widgetdata.h
@@ -45,7 +45,7 @@
 
   CXFA_Node* GetUIChild();
   XFA_Element GetUIType();
-  CFX_WideString GetRawValue();
+  WideString GetRawValue();
   int32_t GetAccess();
   int32_t GetRotate();
 
@@ -73,8 +73,8 @@
   CXFA_Border GetUIBorder();
   CFX_RectF GetUIMargin();
   int32_t GetButtonHighlight();
-  bool GetButtonRollover(CFX_WideString& wsRollover, bool& bRichText);
-  bool GetButtonDown(CFX_WideString& wsDown, bool& bRichText);
+  bool GetButtonRollover(WideString& wsRollover, bool& bRichText);
+  bool GetButtonDown(WideString& wsDown, bool& bRichText);
   int32_t GetCheckButtonShape();
   int32_t GetCheckButtonMark();
   float GetCheckButtonSize();
@@ -84,8 +84,8 @@
   void SetCheckState(XFA_CHECKSTATE eCheckState, bool bNotify);
   CXFA_Node* GetExclGroupNode();
   CXFA_Node* GetSelectedMember();
-  CXFA_Node* SetSelectedMember(const CFX_WideStringC& wsName, bool bNotify);
-  void SetSelectedMemberByValue(const CFX_WideStringC& wsValue,
+  CXFA_Node* SetSelectedMember(const WideStringView& wsName, bool bNotify);
+  void SetSelectedMemberByValue(const WideStringView& wsValue,
                                 bool bNotify,
                                 bool bScriptModify,
                                 bool bSyncData);
@@ -96,14 +96,12 @@
   int32_t GetChoiceListOpen();
   bool IsListBox();
   int32_t CountChoiceListItems(bool bSaveValue);
-  bool GetChoiceListItem(CFX_WideString& wsText,
-                         int32_t nIndex,
-                         bool bSaveValue);
-  std::vector<CFX_WideString> GetChoiceListItems(bool bSaveValue);
+  bool GetChoiceListItem(WideString& wsText, int32_t nIndex, bool bSaveValue);
+  std::vector<WideString> GetChoiceListItems(bool bSaveValue);
   int32_t CountSelectedItems();
   int32_t GetSelectedItem(int32_t nIndex);
   std::vector<int32_t> GetSelectedItems();
-  std::vector<CFX_WideString> GetSelectedItemsValue();
+  std::vector<WideString> GetSelectedItemsValue();
   bool GetItemState(int32_t nIndex);
   void SetItemState(int32_t nIndex,
                     bool bSelected,
@@ -115,25 +113,25 @@
                         bool bScriptModify,
                         bool bSyncData);
   void ClearAllSelections();
-  void InsertItem(const CFX_WideString& wsLabel,
-                  const CFX_WideString& wsValue,
+  void InsertItem(const WideString& wsLabel,
+                  const WideString& wsValue,
                   bool bNotify);
-  void GetItemLabel(const CFX_WideStringC& wsValue, CFX_WideString& wsLabel);
-  void GetItemValue(const CFX_WideStringC& wsLabel, CFX_WideString& wsValue);
+  void GetItemLabel(const WideStringView& wsValue, WideString& wsLabel);
+  void GetItemValue(const WideStringView& wsLabel, WideString& wsValue);
   bool DeleteItem(int32_t nIndex, bool bNotify, bool bScriptModify);
   int32_t GetHorizontalScrollPolicy();
   int32_t GetNumberOfCells();
-  bool SetValue(const CFX_WideString& wsValue, XFA_VALUEPICTURE eValueType);
-  bool GetPictureContent(CFX_WideString& wsPicture, XFA_VALUEPICTURE ePicture);
+  bool SetValue(const WideString& wsValue, XFA_VALUEPICTURE eValueType);
+  bool GetPictureContent(WideString& wsPicture, XFA_VALUEPICTURE ePicture);
   IFX_Locale* GetLocal();
-  bool GetValue(CFX_WideString& wsValue, XFA_VALUEPICTURE eValueType);
-  bool GetNormalizeDataValue(const CFX_WideString& wsValue,
-                             CFX_WideString& wsNormalizeValue);
-  bool GetFormatDataValue(const CFX_WideString& wsValue,
-                          CFX_WideString& wsFormattedValue);
-  void NormalizeNumStr(const CFX_WideString& wsValue, CFX_WideString& wsOutput);
+  bool GetValue(WideString& wsValue, XFA_VALUEPICTURE eValueType);
+  bool GetNormalizeDataValue(const WideString& wsValue,
+                             WideString& wsNormalizeValue);
+  bool GetFormatDataValue(const WideString& wsValue,
+                          WideString& wsFormattedValue);
+  void NormalizeNumStr(const WideString& wsValue, WideString& wsOutput);
 
-  CFX_WideString GetBarcodeType();
+  WideString GetBarcodeType();
   bool GetBarcodeAttribute_CharEncoding(int32_t* val);
   bool GetBarcodeAttribute_Checksum(bool* val);
   bool GetBarcodeAttribute_DataLength(int32_t* val);
@@ -146,7 +144,7 @@
   bool GetBarcodeAttribute_TextLocation(int32_t* val);
   bool GetBarcodeAttribute_Truncate(bool* val);
   bool GetBarcodeAttribute_WideNarrowRatio(float* val);
-  void GetPasswordChar(CFX_WideString& wsPassWord);
+  void GetPasswordChar(WideString& wsPassWord);
 
   bool IsMultiLine();
   int32_t GetVerticalScrollPolicy();
@@ -154,22 +152,22 @@
   bool GetFracDigits(int32_t& iFracDigits);
   bool GetLeadDigits(int32_t& iLeadDigits);
 
-  CFX_WideString NumericLimit(const CFX_WideString& wsValue,
-                              int32_t iLead,
-                              int32_t iTread) const;
+  WideString NumericLimit(const WideString& wsValue,
+                          int32_t iLead,
+                          int32_t iTread) const;
 
   bool m_bIsNull;
   bool m_bPreNull;
 
  private:
   CXFA_Bind GetBind();
-  void SyncValue(const CFX_WideString& wsValue, bool bNotify);
+  void SyncValue(const WideString& wsValue, bool bNotify);
   void InsertListTextItem(CXFA_Node* pItems,
-                          const CFX_WideString& wsText,
+                          const WideString& wsText,
                           int32_t nIndex);
-  void FormatNumStr(const CFX_WideString& wsValue,
+  void FormatNumStr(const WideString& wsValue,
                     IFX_Locale* pLocale,
-                    CFX_WideString& wsOutput);
+                    WideString& wsOutput);
 
   CXFA_Node* m_pUiChildNode;
   XFA_Element m_eUIType;
diff --git a/xfa/fxfa/parser/cxfa_xmllocale.cpp b/xfa/fxfa/parser/cxfa_xmllocale.cpp
index 4055c15..f9e4353 100644
--- a/xfa/fxfa/parser/cxfa_xmllocale.cpp
+++ b/xfa/fxfa/parser/cxfa_xmllocale.cpp
@@ -21,14 +21,13 @@
 
 CXFA_XMLLocale::~CXFA_XMLLocale() {}
 
-CFX_WideString CXFA_XMLLocale::GetName() const {
-  return m_pLocaleData ? m_pLocaleData->GetAttrValue("name") : CFX_WideString();
+WideString CXFA_XMLLocale::GetName() const {
+  return m_pLocaleData ? m_pLocaleData->GetAttrValue("name") : WideString();
 }
 
-CFX_WideString CXFA_XMLLocale::GetNumbericSymbol(
-    FX_LOCALENUMSYMBOL eType) const {
-  CFX_ByteString bsSymbols;
-  CFX_WideString wsName;
+WideString CXFA_XMLLocale::GetNumbericSymbol(FX_LOCALENUMSYMBOL eType) const {
+  ByteString bsSymbols;
+  WideString wsName;
   switch (eType) {
     case FX_LOCALENUMSYMBOL_Decimal:
       bsSymbols = "numberSymbols";
@@ -59,43 +58,43 @@
       wsName = L"isoname";
       break;
     default:
-      return CFX_WideString();
+      return WideString();
   }
   CXML_Element* pElement =
-      m_pLocaleData->GetElement("", bsSymbols.AsStringC(), 0);
+      m_pLocaleData->GetElement("", bsSymbols.AsStringView(), 0);
   if (!pElement)
-    return CFX_WideString();
+    return WideString();
 
   return GetPattern(
-      pElement, CFX_ByteStringC(bsSymbols.c_str(), bsSymbols.GetLength() - 1),
-      wsName.AsStringC());
+      pElement, ByteStringView(bsSymbols.c_str(), bsSymbols.GetLength() - 1),
+      wsName.AsStringView());
 }
 
-CFX_WideString CXFA_XMLLocale::GetDateTimeSymbols() const {
+WideString CXFA_XMLLocale::GetDateTimeSymbols() const {
   if (!m_pLocaleData)
-    return CFX_WideString();
+    return WideString();
 
   CXML_Element* pNumberSymbols =
       m_pLocaleData->GetElement("", "dateTimeSymbols", 0);
   if (!pNumberSymbols)
-    return CFX_WideString();
+    return WideString();
 
   CXML_Content* pContent = ToContent(pNumberSymbols->GetChild(0));
   if (!pContent)
-    return CFX_WideString();
+    return WideString();
 
   return pContent->m_Content;
 }
 
-CFX_WideString CXFA_XMLLocale::GetMonthName(int32_t nMonth, bool bAbbr) const {
+WideString CXFA_XMLLocale::GetMonthName(int32_t nMonth, bool bAbbr) const {
   return GetCalendarSymbol("month", nMonth, bAbbr);
 }
 
-CFX_WideString CXFA_XMLLocale::GetDayName(int32_t nWeek, bool bAbbr) const {
+WideString CXFA_XMLLocale::GetDayName(int32_t nWeek, bool bAbbr) const {
   return GetCalendarSymbol("day", nWeek, bAbbr);
 }
 
-CFX_WideString CXFA_XMLLocale::GetMeridiemName(bool bAM) const {
+WideString CXFA_XMLLocale::GetMeridiemName(bool bAM) const {
   return GetCalendarSymbol("meridiem", bAM ? 0 : 1, false);
 }
 
@@ -103,47 +102,47 @@
   return CXFA_TimeZoneProvider().GetTimeZone();
 }
 
-CFX_WideString CXFA_XMLLocale::GetEraName(bool bAD) const {
+WideString CXFA_XMLLocale::GetEraName(bool bAD) const {
   return GetCalendarSymbol("era", bAD ? 1 : 0, false);
 }
 
-CFX_WideString CXFA_XMLLocale::GetCalendarSymbol(const CFX_ByteStringC& symbol,
-                                                 int index,
-                                                 bool bAbbr) const {
+WideString CXFA_XMLLocale::GetCalendarSymbol(const ByteStringView& symbol,
+                                             int index,
+                                             bool bAbbr) const {
   if (!m_pLocaleData)
-    return CFX_WideString();
+    return WideString();
 
   CXML_Element* pChild = m_pLocaleData->GetElement("", "calendarSymbols", 0);
   if (!pChild)
-    return CFX_WideString();
+    return WideString();
 
-  CFX_ByteString pstrSymbolNames = symbol + "Names";
+  ByteString pstrSymbolNames = symbol + "Names";
   CXML_Element* pSymbolNames =
-      pChild->GetElement("", pstrSymbolNames.AsStringC(), 0);
+      pChild->GetElement("", pstrSymbolNames.AsStringView(), 0);
   if (!pSymbolNames)
-    return CFX_WideString();
+    return WideString();
 
   if ((!!pSymbolNames->GetAttrInteger("abbr")) != bAbbr)
-    pSymbolNames = pChild->GetElement("", pstrSymbolNames.AsStringC(), 1);
+    pSymbolNames = pChild->GetElement("", pstrSymbolNames.AsStringView(), 1);
 
   if (!pSymbolNames || (!!pSymbolNames->GetAttrInteger("abbr")) != bAbbr)
-    return CFX_WideString();
+    return WideString();
 
   CXML_Element* pSymbolName = pSymbolNames->GetElement("", symbol, index);
   if (!pSymbolName)
-    return CFX_WideString();
+    return WideString();
 
   CXML_Content* pContent = ToContent(pSymbolName->GetChild(0));
-  return pContent ? pContent->m_Content : CFX_WideString();
+  return pContent ? pContent->m_Content : WideString();
 }
 
-CFX_WideString CXFA_XMLLocale::GetDatePattern(
+WideString CXFA_XMLLocale::GetDatePattern(
     FX_LOCALEDATETIMESUBCATEGORY eType) const {
   CXML_Element* pElement = m_pLocaleData->GetElement("", "datePatterns", 0);
   if (!pElement)
-    return CFX_WideString();
+    return WideString();
 
-  CFX_WideString wsName;
+  WideString wsName;
   switch (eType) {
     case FX_LOCALEDATETIMESUBCATEGORY_Short:
       wsName = L"short";
@@ -159,16 +158,16 @@
       wsName = L"long";
       break;
   }
-  return GetPattern(pElement, "datePattern", wsName.AsStringC());
+  return GetPattern(pElement, "datePattern", wsName.AsStringView());
 }
 
-CFX_WideString CXFA_XMLLocale::GetTimePattern(
+WideString CXFA_XMLLocale::GetTimePattern(
     FX_LOCALEDATETIMESUBCATEGORY eType) const {
   CXML_Element* pElement = m_pLocaleData->GetElement("", "timePatterns", 0);
   if (!pElement)
-    return CFX_WideString();
+    return WideString();
 
-  CFX_WideString wsName;
+  WideString wsName;
   switch (eType) {
     case FX_LOCALEDATETIMESUBCATEGORY_Short:
       wsName = L"short";
@@ -184,26 +183,25 @@
       wsName = L"long";
       break;
   }
-  return GetPattern(pElement, "timePattern", wsName.AsStringC());
+  return GetPattern(pElement, "timePattern", wsName.AsStringView());
 }
 
-CFX_WideString CXFA_XMLLocale::GetNumPattern(
-    FX_LOCALENUMSUBCATEGORY eType) const {
+WideString CXFA_XMLLocale::GetNumPattern(FX_LOCALENUMSUBCATEGORY eType) const {
   return m_pLocaleData->GetElement("", "numberPatterns", 0)
              ? XFA_PatternToString(eType)
-             : CFX_WideString();
+             : WideString();
 }
 
-CFX_WideString CXFA_XMLLocale::GetPattern(CXML_Element* pElement,
-                                          const CFX_ByteStringC& bsTag,
-                                          const CFX_WideStringC& wsName) const {
+WideString CXFA_XMLLocale::GetPattern(CXML_Element* pElement,
+                                      const ByteStringView& bsTag,
+                                      const WideStringView& wsName) const {
   int32_t iCount = pElement->CountElements("", bsTag);
   for (int32_t i = 0; i < iCount; i++) {
     CXML_Element* pChild = pElement->GetElement("", bsTag, i);
     if (pChild->GetAttrValue("name") == wsName) {
       CXML_Content* pContent = ToContent(pChild->GetChild(0));
-      return pContent ? pContent->m_Content : CFX_WideString();
+      return pContent ? pContent->m_Content : WideString();
     }
   }
-  return CFX_WideString();
+  return WideString();
 }
diff --git a/xfa/fxfa/parser/cxfa_xmllocale.h b/xfa/fxfa/parser/cxfa_xmllocale.h
index a583856..5050855 100644
--- a/xfa/fxfa/parser/cxfa_xmllocale.h
+++ b/xfa/fxfa/parser/cxfa_xmllocale.h
@@ -19,29 +19,27 @@
   ~CXFA_XMLLocale() override;
 
   // IFX_Locale
-  CFX_WideString GetName() const override;
-  CFX_WideString GetNumbericSymbol(FX_LOCALENUMSYMBOL eType) const override;
+  WideString GetName() const override;
+  WideString GetNumbericSymbol(FX_LOCALENUMSYMBOL eType) const override;
 
-  CFX_WideString GetDateTimeSymbols() const override;
-  CFX_WideString GetMonthName(int32_t nMonth, bool bAbbr) const override;
-  CFX_WideString GetDayName(int32_t nWeek, bool bAbbr) const override;
-  CFX_WideString GetMeridiemName(bool bAM) const override;
+  WideString GetDateTimeSymbols() const override;
+  WideString GetMonthName(int32_t nMonth, bool bAbbr) const override;
+  WideString GetDayName(int32_t nWeek, bool bAbbr) const override;
+  WideString GetMeridiemName(bool bAM) const override;
   FX_TIMEZONE GetTimeZone() const override;
-  CFX_WideString GetEraName(bool bAD) const override;
+  WideString GetEraName(bool bAD) const override;
 
-  CFX_WideString GetDatePattern(
-      FX_LOCALEDATETIMESUBCATEGORY eType) const override;
-  CFX_WideString GetTimePattern(
-      FX_LOCALEDATETIMESUBCATEGORY eType) const override;
-  CFX_WideString GetNumPattern(FX_LOCALENUMSUBCATEGORY eType) const override;
+  WideString GetDatePattern(FX_LOCALEDATETIMESUBCATEGORY eType) const override;
+  WideString GetTimePattern(FX_LOCALEDATETIMESUBCATEGORY eType) const override;
+  WideString GetNumPattern(FX_LOCALENUMSUBCATEGORY eType) const override;
 
  private:
-  CFX_WideString GetPattern(CXML_Element* pElement,
-                            const CFX_ByteStringC& bsTag,
-                            const CFX_WideStringC& wsName) const;
-  CFX_WideString GetCalendarSymbol(const CFX_ByteStringC& symbol,
-                                   int index,
-                                   bool bAbbr) const;
+  WideString GetPattern(CXML_Element* pElement,
+                        const ByteStringView& bsTag,
+                        const WideStringView& wsName) const;
+  WideString GetCalendarSymbol(const ByteStringView& symbol,
+                               int index,
+                               bool bAbbr) const;
 
   std::unique_ptr<CXML_Element> m_pLocaleData;
 };
diff --git a/xfa/fxfa/parser/xfa_document_datamerger_imp.cpp b/xfa/fxfa/parser/xfa_document_datamerger_imp.cpp
index d4cd058..373412e 100644
--- a/xfa/fxfa/parser/xfa_document_datamerger_imp.cpp
+++ b/xfa/fxfa/parser/xfa_document_datamerger_imp.cpp
@@ -73,7 +73,7 @@
 }
 
 bool FormValueNode_SetChildContent(CXFA_Node* pValueNode,
-                                   const CFX_WideString& wsContent,
+                                   const WideString& wsContent,
                                    XFA_Element iType = XFA_Element::Unknown) {
   if (!pValueNode)
     return false;
@@ -90,7 +90,7 @@
       if (!pContentRawDataNode) {
         XFA_Element element = XFA_Element::Sharptext;
         if (pChildNode->GetElementType() == XFA_Element::ExData) {
-          CFX_WideString wsContentType;
+          WideString wsContentType;
           pChildNode->GetAttribute(XFA_ATTRIBUTE_ContentType, wsContentType,
                                    false);
           if (wsContentType == L"text/html")
@@ -131,13 +131,13 @@
   XFA_Element eUIType = pWidgetData->GetUIType();
   CXFA_Value defValue(pFormNode->GetProperty(0, XFA_Element::Value));
   if (!bDataToForm) {
-    CFX_WideString wsValue;
-    CFX_WideString wsFormattedValue;
+    WideString wsValue;
+    WideString wsFormattedValue;
     switch (eUIType) {
       case XFA_Element::ImageEdit: {
         CXFA_Image image = defValue.GetImage();
-        CFX_WideString wsContentType;
-        CFX_WideString wsHref;
+        WideString wsContentType;
+        WideString wsHref;
         if (image) {
           image.GetContent(wsValue);
           image.GetContentType(wsContentType);
@@ -157,7 +157,7 @@
       case XFA_Element::ChoiceList:
         defValue.GetChildValueContent(wsValue);
         if (pWidgetData->GetChoiceListOpen() == XFA_ATTRIBUTEENUM_MultiSelect) {
-          std::vector<CFX_WideString> wsSelTextArray =
+          std::vector<WideString> wsSelTextArray =
               pWidgetData->GetSelectedItemsValue();
           if (!wsSelTextArray.empty()) {
             for (const auto& text : wsSelTextArray) {
@@ -211,7 +211,7 @@
           if (!pText)
             continue;
 
-          CFX_WideString wsContent;
+          WideString wsContent;
           if (pText->TryContent(wsContent) && (wsContent == wsValue)) {
             pChecked = pChild;
             wsFormattedValue = wsValue;
@@ -237,7 +237,7 @@
           if (pText)
             pText = pText->GetNodeItem(XFA_NODEITEM_NextSibling);
 
-          CFX_WideString wsContent;
+          WideString wsContent;
           if (pText)
             pText->TryContent(wsContent);
 
@@ -250,7 +250,7 @@
         if (wsValue.IsEmpty())
           break;
 
-        CFX_WideString wsOutput;
+        WideString wsOutput;
         pWidgetData->NormalizeNumStr(wsValue, wsOutput);
         wsValue = wsOutput;
         pWidgetData->GetFormatDataValue(wsValue, wsFormattedValue);
@@ -271,9 +271,9 @@
     return;
   }
 
-  CFX_WideString wsXMLValue;
+  WideString wsXMLValue;
   pDataNode->TryContent(wsXMLValue);
-  CFX_WideString wsNormalizeValue;
+  WideString wsNormalizeValue;
   pWidgetData->GetNormalizeDataValue(wsXMLValue, wsNormalizeValue);
   pDataNode->SetAttributeValue(wsNormalizeValue, wsXMLValue);
   switch (eUIType) {
@@ -286,14 +286,14 @@
             static_cast<CFX_XMLElement*>(pDataNode->GetXMLMappingNode());
         ASSERT(pXMLDataElement);
 
-        CFX_WideString wsContentType =
+        WideString wsContentType =
             pXMLDataElement->GetString(L"xfa:contentType");
         if (!wsContentType.IsEmpty()) {
           pDataNode->SetCData(XFA_ATTRIBUTE_ContentType, wsContentType);
           image.SetContentType(wsContentType);
         }
 
-        CFX_WideString wsHref = pXMLDataElement->GetString(L"href");
+        WideString wsHref = pXMLDataElement->GetString(L"href");
         if (!wsHref.IsEmpty())
           image.SetHref(wsHref);
       }
@@ -305,7 +305,7 @@
         if (!items.empty()) {
           bool single = items.size() == 1;
           wsNormalizeValue.clear();
-          CFX_WideString wsItem;
+          WideString wsItem;
           for (CXFA_Node* pNode : items) {
             pNode->TryContent(wsItem);
             wsItem = single ? wsItem : wsItem + L"\n";
@@ -327,8 +327,8 @@
                                     XFA_Element::Text);
       break;
     case XFA_Element::ExclGroup: {
-      pWidgetData->SetSelectedMemberByValue(wsNormalizeValue.AsStringC(), false,
-                                            false, false);
+      pWidgetData->SetSelectedMemberByValue(wsNormalizeValue.AsStringView(),
+                                            false, false, false);
       break;
     }
     case XFA_Element::DateTimeEdit:
@@ -336,10 +336,10 @@
                                     XFA_Element::DateTime);
       break;
     case XFA_Element::NumericEdit: {
-      CFX_WideString wsPicture;
+      WideString wsPicture;
       pWidgetData->GetPictureContent(wsPicture, XFA_VALUEPICTURE_DataBind);
       if (wsPicture.IsEmpty()) {
-        CFX_WideString wsOutput;
+        WideString wsOutput;
         pWidgetData->NormalizeNumStr(wsNormalizeValue, wsOutput);
         wsNormalizeValue = wsOutput;
       }
@@ -407,7 +407,7 @@
 }
 
 CXFA_Node* FindGlobalDataNode(CXFA_Document* pDocument,
-                              CFX_WideStringC wsName,
+                              WideStringView wsName,
                               CXFA_Node* pDataScope,
                               XFA_Element eMatchNodeType) {
   if (wsName.IsEmpty())
@@ -425,7 +425,7 @@
 }
 
 CXFA_Node* FindOnceDataNode(CXFA_Document* pDocument,
-                            CFX_WideStringC wsName,
+                            WideStringView wsName,
                             CXFA_Node* pDataScope,
                             XFA_Element eMatchNodeType) {
   if (wsName.IsEmpty())
@@ -452,7 +452,7 @@
 }
 
 CXFA_Node* FindDataRefDataNode(CXFA_Document* pDocument,
-                               CFX_WideStringC wsRef,
+                               WideStringView wsRef,
                                CXFA_Node* pDataScope,
                                XFA_Element eMatchNodeType,
                                CXFA_Node* pTemplateNode,
@@ -496,10 +496,10 @@
                                        CXFA_Node* pFormParent,
                                        CXFA_Node* pTemplateNode,
                                        std::vector<CXFA_Node*>* subforms) {
-  CFX_WideStringC wsSubformName = pTemplateNode->GetCData(XFA_ATTRIBUTE_Name);
-  CFX_WideString wsInstMgrNodeName = L"_" + wsSubformName;
+  WideStringView wsSubformName = pTemplateNode->GetCData(XFA_ATTRIBUTE_Name);
+  WideString wsInstMgrNodeName = L"_" + wsSubformName;
   uint32_t dwInstNameHash =
-      FX_HashCode_GetW(wsInstMgrNodeName.AsStringC(), false);
+      FX_HashCode_GetW(wsInstMgrNodeName.AsStringView(), false);
   CXFA_Node* pExistingNode = XFA_DataMerge_FindFormDOMInstance(
       pDocument, XFA_Element::InstanceManager, dwInstNameHash, pFormParent);
   if (pExistingNode) {
@@ -1000,7 +1000,7 @@
 CXFA_Node* MaybeCreateDataNode(CXFA_Document* pDocument,
                                CXFA_Node* pDataParent,
                                XFA_Element eNodeType,
-                               const CFX_WideString& wsName) {
+                               const WideString& wsName) {
   if (!pDataParent)
     return nullptr;
 
@@ -1023,13 +1023,14 @@
       if (pDDGroupNode->GetElementType() != XFA_Element::DataGroup)
         continue;
 
-      CFX_WideString wsNamespace;
+      WideString wsNamespace;
       if (!pDDGroupNode->TryNamespace(wsNamespace) ||
           wsNamespace != L"http://ns.adobe.com/data-description/") {
         continue;
       }
     }
-    CXFA_Node* pDDNode = pDDGroupNode->GetFirstChildByName(wsName.AsStringC());
+    CXFA_Node* pDDNode =
+        pDDGroupNode->GetFirstChildByName(wsName.AsStringView());
     if (!pDDNode)
       continue;
     if (pDDNode->GetElementType() != eNodeType)
@@ -1086,7 +1087,7 @@
                                               : XFA_Element::DataValue;
               pDataNode = MaybeCreateDataNode(
                   pDocument, pDataScope, eDataNodeType,
-                  CFX_WideString(pFormNode->GetCData(XFA_ATTRIBUTE_Name)));
+                  WideString(pFormNode->GetCData(XFA_ATTRIBUTE_Name)));
               if (pDataNode)
                 CreateDataBinding(pFormNode, pDataNode, false);
             }
@@ -1118,7 +1119,7 @@
                   ToNode(pDocument->GetXFAObject(XFA_HASHCODE_Record));
               pDataNode = MaybeCreateDataNode(
                   pDocument, pRecordNode, eDataNodeType,
-                  CFX_WideString(pFormNode->GetCData(XFA_ATTRIBUTE_Name)));
+                  WideString(pFormNode->GetCData(XFA_ATTRIBUTE_Name)));
               if (pDataNode) {
                 CreateDataBinding(pFormNode, pDataNode, false);
                 RegisterGlobalBinding(pDocument, pFormNode->GetNameHash(),
@@ -1136,8 +1137,7 @@
         bMatchRef = bDataRef;
         bParentDataRef = true;
         if (!pDataNode && bDataRef) {
-          CFX_WideStringC wsRef =
-              pTemplateNodeBind->GetCData(XFA_ATTRIBUTE_Ref);
+          WideStringView wsRef = pTemplateNodeBind->GetCData(XFA_ATTRIBUTE_Ref);
           uint32_t dFlags =
               XFA_RESOLVENODE_Children | XFA_RESOLVENODE_CreateNode;
           XFA_RESOLVENODE_RS rs;
@@ -1197,7 +1197,7 @@
         if (pDDGroupNode->GetElementType() != XFA_Element::DataGroup)
           continue;
 
-        CFX_WideString wsNamespace;
+        WideString wsNamespace;
         if (!pDDGroupNode->TryNamespace(wsNamespace) ||
             wsNamespace != L"http://ns.adobe.com/data-description/") {
           continue;
@@ -1363,7 +1363,7 @@
     pDatasetsRoot->SetXMLMappingNode(pDatasetsXMLNode);
   }
   CXFA_Node *pDataRoot = nullptr, *pDDRoot = nullptr;
-  CFX_WideString wsDatasetsURI;
+  WideString wsDatasetsURI;
   pDatasetsRoot->TryNamespace(wsDatasetsURI);
   for (CXFA_Node* pChildNode =
            pDatasetsRoot->GetNodeItem(XFA_NODEITEM_FirstChild);
@@ -1372,7 +1372,7 @@
     if (pChildNode->GetElementType() != XFA_Element::DataGroup)
       continue;
 
-    CFX_WideString wsNamespaceURI;
+    WideString wsNamespaceURI;
     if (!pDDRoot && pChildNode->GetNameHash() == XFA_HASHCODE_DataDescription) {
       if (!pChildNode->TryNamespace(wsNamespaceURI))
         continue;
@@ -1435,9 +1435,8 @@
       this, pFormRoot, pTemplateChosen, false, nullptr);
   ASSERT(pSubformSetNode);
   if (!pDataTopLevel) {
-    CFX_WideStringC wsFormName = pSubformSetNode->GetCData(XFA_ATTRIBUTE_Name);
-    CFX_WideString wsDataTopLevelName(wsFormName.IsEmpty() ? L"form"
-                                                           : wsFormName);
+    WideStringView wsFormName = pSubformSetNode->GetCData(XFA_ATTRIBUTE_Name);
+    WideString wsDataTopLevelName(wsFormName.IsEmpty() ? L"form" : wsFormName);
     CFX_XMLElement* pDataTopLevelXMLNode =
         new CFX_XMLElement(wsDataTopLevelName);
 
diff --git a/xfa/fxfa/parser/xfa_utils.cpp b/xfa/fxfa/parser/xfa_utils.cpp
index fa75f18..e1ee29d 100644
--- a/xfa/fxfa/parser/xfa_utils.cpp
+++ b/xfa/fxfa/parser/xfa_utils.cpp
@@ -39,8 +39,8 @@
                                   0.000000000000001,
                                   0.0000000000000001};
 
-double WideStringToDouble(const CFX_WideString& wsStringVal) {
-  CFX_WideString wsValue = wsStringVal;
+double WideStringToDouble(const WideString& wsStringVal) {
+  WideString wsValue = wsStringVal;
   wsValue.TrimLeft();
   wsValue.TrimRight();
   int64_t nIntegral = 0;
@@ -172,15 +172,15 @@
                           pWidgetData->GetNode()->GetDocument()->GetLocalMgr());
 }
 void XFA_GetPlainTextFromRichText(CFX_XMLNode* pXMLNode,
-                                  CFX_WideString& wsPlainText) {
+                                  WideString& wsPlainText) {
   if (!pXMLNode) {
     return;
   }
   switch (pXMLNode->GetType()) {
     case FX_XMLNODE_Element: {
       CFX_XMLElement* pXMLElement = static_cast<CFX_XMLElement*>(pXMLNode);
-      CFX_WideString wsTag = pXMLElement->GetLocalTagName();
-      uint32_t uTag = FX_HashCode_GetW(wsTag.AsStringC(), true);
+      WideString wsTag = pXMLElement->GetLocalTagName();
+      uint32_t uTag = FX_HashCode_GetW(wsTag.AsStringView(), true);
       if (uTag == 0x0001f714) {
         wsPlainText += L"\n";
       } else if (uTag == 0x00000070) {
@@ -197,7 +197,7 @@
     }
     case FX_XMLNODE_Text:
     case FX_XMLNODE_CharData: {
-      CFX_WideString wsContent = static_cast<CFX_XMLText*>(pXMLNode)->GetText();
+      WideString wsContent = static_cast<CFX_XMLText*>(pXMLNode)->GetText();
       wsPlainText += wsContent;
       break;
     }
@@ -228,8 +228,8 @@
   return bRet;
 }
 
-double XFA_ByteStringToDouble(const CFX_ByteStringC& szStringVal) {
-  CFX_WideString wsValue = CFX_WideString::FromUTF8(szStringVal);
+double XFA_ByteStringToDouble(const ByteStringView& szStringVal) {
+  WideString wsValue = WideString::FromUTF8(szStringVal);
   return WideStringToDouble(wsValue);
 }
 
@@ -241,7 +241,7 @@
 
 const XFA_SCRIPTATTRIBUTEINFO* XFA_GetScriptAttributeByName(
     XFA_Element eElement,
-    const CFX_WideStringC& wsAttributeName) {
+    const WideStringView& wsAttributeName) {
   if (wsAttributeName.IsEmpty())
     return nullptr;
 
@@ -376,7 +376,7 @@
              : nullptr;
 }
 
-XFA_Element XFA_GetElementTypeForName(const CFX_WideStringC& wsName) {
+XFA_Element XFA_GetElementTypeForName(const WideStringView& wsName) {
   if (wsName.IsEmpty())
     return XFA_Element::Unknown;
 
@@ -428,7 +428,7 @@
   return false;
 }
 
-const XFA_ATTRIBUTEINFO* XFA_GetAttributeByName(const CFX_WideStringC& wsName) {
+const XFA_ATTRIBUTEINFO* XFA_GetAttributeByName(const WideStringView& wsName) {
   if (wsName.IsEmpty())
     return nullptr;
 
@@ -449,7 +449,7 @@
 }
 
 const XFA_ATTRIBUTEENUMINFO* XFA_GetAttributeEnumByName(
-    const CFX_WideStringC& wsName) {
+    const WideStringView& wsName) {
   if (wsName.IsEmpty())
     return nullptr;
 
diff --git a/xfa/fxfa/parser/xfa_utils.h b/xfa/fxfa/parser/xfa_utils.h
index bc05381..404586b 100644
--- a/xfa/fxfa/parser/xfa_utils.h
+++ b/xfa/fxfa/parser/xfa_utils.h
@@ -21,8 +21,8 @@
 
 bool XFA_FDEExtension_ResolveNamespaceQualifier(
     CFX_XMLElement* pNode,
-    const CFX_WideStringC& wsQualifier,
-    CFX_WideString* wsNamespaceURI);
+    const WideStringView& wsQualifier,
+    WideString* wsNamespaceURI);
 
 template <class NodeType, class TraverseStrategy>
 class CXFA_NodeIteratorTemplate {
@@ -144,12 +144,12 @@
 };
 
 CXFA_LocaleValue XFA_GetLocaleValue(CXFA_WidgetData* pWidgetData);
-double XFA_ByteStringToDouble(const CFX_ByteStringC& szStringVal);
+double XFA_ByteStringToDouble(const ByteStringView& szStringVal);
 int32_t XFA_MapRotation(int32_t nRotation);
 
 bool XFA_RecognizeRichText(CFX_XMLElement* pRichTextXMLNode);
 void XFA_GetPlainTextFromRichText(CFX_XMLNode* pXMLNode,
-                                  CFX_WideString& wsPlainText);
+                                  WideString& wsPlainText);
 bool XFA_FieldIsMultiListBox(CXFA_Node* pFieldNode);
 
 void XFA_DataExporter_DealWithDataGroupNode(CXFA_Node* pDataNode);
@@ -166,7 +166,7 @@
 
 const XFA_SCRIPTATTRIBUTEINFO* XFA_GetScriptAttributeByName(
     XFA_Element eElement,
-    const CFX_WideStringC& wsAttributeName);
+    const WideStringView& wsAttributeName);
 
 const XFA_PROPERTY* XFA_GetPropertyOfElement(XFA_Element eElement,
                                              XFA_Element eProperty,
@@ -175,7 +175,7 @@
                                              int32_t& iCount);
 const uint8_t* XFA_GetElementAttributes(XFA_Element eElement, int32_t& iCount);
 const XFA_ELEMENTINFO* XFA_GetElementByID(XFA_Element eName);
-XFA_Element XFA_GetElementTypeForName(const CFX_WideStringC& wsName);
+XFA_Element XFA_GetElementTypeForName(const WideStringView& wsName);
 CXFA_Measurement XFA_GetAttributeDefaultValue_Measure(XFA_Element eElement,
                                                       XFA_ATTRIBUTE eAttribute,
                                                       uint32_t dwPacket);
@@ -184,10 +184,10 @@
                                   XFA_ATTRIBUTE eAttribute,
                                   XFA_ATTRIBUTETYPE eType,
                                   uint32_t dwPacket);
-const XFA_ATTRIBUTEINFO* XFA_GetAttributeByName(const CFX_WideStringC& wsName);
+const XFA_ATTRIBUTEINFO* XFA_GetAttributeByName(const WideStringView& wsName);
 const XFA_ATTRIBUTEINFO* XFA_GetAttributeByID(XFA_ATTRIBUTE eName);
 const XFA_ATTRIBUTEENUMINFO* XFA_GetAttributeEnumByName(
-    const CFX_WideStringC& wsName);
+    const WideStringView& wsName);
 const XFA_PACKETINFO* XFA_GetPacketByIndex(XFA_PACKET ePacket);
 const XFA_PACKETINFO* XFA_GetPacketByID(uint32_t dwPacket);