diff --git a/core/fxcrt/css/cfx_cssexttextbuf.cpp b/core/fxcrt/css/cfx_cssexttextbuf.cpp
index 287dc2e..ed20660 100644
--- a/core/fxcrt/css/cfx_cssexttextbuf.cpp
+++ b/core/fxcrt/css/cfx_cssexttextbuf.cpp
@@ -6,12 +6,6 @@
 
 #include "core/fxcrt/css/cfx_cssexttextbuf.h"
 
-CFX_CSSExtTextBuf::CFX_CSSExtTextBuf()
-    : m_pExtBuffer(nullptr), m_iDatLen(0), m_iDatPos(0) {}
+CFX_CSSExtTextBuf::CFX_CSSExtTextBuf(WideStringView str) : m_Buffer(str) {}
 
-CFX_CSSExtTextBuf::~CFX_CSSExtTextBuf() {}
-
-void CFX_CSSExtTextBuf::AttachBuffer(const wchar_t* pBuffer, int32_t iBufLen) {
-  m_pExtBuffer = pBuffer;
-  m_iDatLen = iBufLen;
-}
+CFX_CSSExtTextBuf::~CFX_CSSExtTextBuf() = default;
diff --git a/core/fxcrt/css/cfx_cssexttextbuf.h b/core/fxcrt/css/cfx_cssexttextbuf.h
index 342b91e..d875f1b 100644
--- a/core/fxcrt/css/cfx_cssexttextbuf.h
+++ b/core/fxcrt/css/cfx_cssexttextbuf.h
@@ -7,28 +7,23 @@
 #ifndef CORE_FXCRT_CSS_CFX_CSSEXTTEXTBUF_H_
 #define CORE_FXCRT_CSS_CFX_CSSEXTTEXTBUF_H_
 
-#include "core/fxcrt/fx_system.h"
+#include "core/fxcrt/fx_string.h"
 
 class CFX_CSSExtTextBuf {
  public:
-  CFX_CSSExtTextBuf();
+  explicit CFX_CSSExtTextBuf(WideStringView str);
   ~CFX_CSSExtTextBuf();
 
-  void AttachBuffer(const wchar_t* pBuffer, int32_t iBufLen);
-
-  bool IsEOF() const { return m_iDatPos >= m_iDatLen; }
-
-  wchar_t GetChar() const { return m_pExtBuffer[m_iDatPos]; }
+  bool IsEOF() const { return m_iPos >= m_Buffer.GetLength(); }
+  void MoveNext() { m_iPos++; }
+  wchar_t GetChar() const { return m_Buffer[m_iPos]; }
   wchar_t GetNextChar() const {
-    return (m_iDatPos + 1 >= m_iDatLen) ? 0 : m_pExtBuffer[m_iDatPos + 1];
+    return m_iPos + 1 < m_Buffer.GetLength() ? m_Buffer[m_iPos + 1] : 0;
   }
 
-  void MoveNext() { m_iDatPos++; }
-
  protected:
-  const wchar_t* m_pExtBuffer;
-  int32_t m_iDatLen;
-  int32_t m_iDatPos;
+  const WideStringView m_Buffer;
+  size_t m_iPos = 0;
 };
 
 #endif  // CORE_FXCRT_CSS_CFX_CSSEXTTEXTBUF_H_
diff --git a/core/fxcrt/css/cfx_cssstyleselector.cpp b/core/fxcrt/css/cfx_cssstyleselector.cpp
index 16747cd..c8ed1cf 100644
--- a/core/fxcrt/css/cfx_cssstyleselector.cpp
+++ b/core/fxcrt/css/cfx_cssstyleselector.cpp
@@ -142,8 +142,7 @@
   ASSERT(pDecl);
   ASSERT(!style.IsEmpty());
 
-  auto pSyntax =
-      pdfium::MakeUnique<CFX_CSSSyntaxParser>(style.c_str(), style.GetLength());
+  auto pSyntax = pdfium::MakeUnique<CFX_CSSSyntaxParser>(style.AsStringView());
   pSyntax->SetParseOnlyDeclarations();
 
   int32_t iLen2 = 0;
diff --git a/core/fxcrt/css/cfx_cssstylesheet.cpp b/core/fxcrt/css/cfx_cssstylesheet.cpp
index cb2d58a..23b0514 100644
--- a/core/fxcrt/css/cfx_cssstylesheet.cpp
+++ b/core/fxcrt/css/cfx_cssstylesheet.cpp
@@ -26,23 +26,18 @@
   return m_RuleArray[index].get();
 }
 
-bool CFX_CSSStyleSheet::LoadBuffer(const wchar_t* pBuffer, int32_t iBufSize) {
-  ASSERT(pBuffer);
-
+bool CFX_CSSStyleSheet::LoadBuffer(WideStringView buffer) {
   m_RuleArray.clear();
-  auto pSyntax = pdfium::MakeUnique<CFX_CSSSyntaxParser>(pBuffer, iBufSize);
-  CFX_CSSSyntaxStatus eStatus;
-  do {
-    switch (eStatus = pSyntax->DoSyntaxParse()) {
-      case CFX_CSSSyntaxStatus::kStyleRule:
-        eStatus = LoadStyleRule(pSyntax.get());
-        break;
-      default:
-        break;
-    }
-  } while (eStatus >= CFX_CSSSyntaxStatus::kNone);
-
-  return eStatus != CFX_CSSSyntaxStatus::kError;
+  auto pSyntax = pdfium::MakeUnique<CFX_CSSSyntaxParser>(buffer);
+  while (1) {
+    CFX_CSSSyntaxStatus eStatus = pSyntax->DoSyntaxParse();
+    if (eStatus == CFX_CSSSyntaxStatus::kStyleRule)
+      eStatus = LoadStyleRule(pSyntax.get());
+    if (eStatus == CFX_CSSSyntaxStatus::kEOS)
+      return true;
+    if (eStatus == CFX_CSSSyntaxStatus::kError)
+      return false;
+  }
 }
 
 CFX_CSSSyntaxStatus CFX_CSSStyleSheet::LoadStyleRule(
diff --git a/core/fxcrt/css/cfx_cssstylesheet.h b/core/fxcrt/css/cfx_cssstylesheet.h
index a99353a..92a0f77 100644
--- a/core/fxcrt/css/cfx_cssstylesheet.h
+++ b/core/fxcrt/css/cfx_cssstylesheet.h
@@ -20,7 +20,7 @@
   CFX_CSSStyleSheet();
   ~CFX_CSSStyleSheet();
 
-  bool LoadBuffer(const wchar_t* pBuffer, int32_t iBufSize);
+  bool LoadBuffer(WideStringView buffer);
   size_t CountRules() const;
   CFX_CSSStyleRule* GetRule(size_t index) const;
 
diff --git a/core/fxcrt/css/cfx_cssstylesheet_unittest.cpp b/core/fxcrt/css/cfx_cssstylesheet_unittest.cpp
index 5468a1c..2c94470 100644
--- a/core/fxcrt/css/cfx_cssstylesheet_unittest.cpp
+++ b/core/fxcrt/css/cfx_cssstylesheet_unittest.cpp
@@ -27,18 +27,18 @@
 
   void TearDown() override { decl_ = nullptr; }
 
-  void VerifyLoadFails(const wchar_t* buf) {
+  void VerifyLoadFails(WideStringView buf) {
     ASSERT(sheet_);
-    EXPECT_FALSE(sheet_->LoadBuffer(buf, wcslen(buf)));
+    EXPECT_FALSE(sheet_->LoadBuffer(buf));
   }
 
-  void LoadAndVerifyRuleCount(const wchar_t* buf, size_t rule_count) {
+  void LoadAndVerifyRuleCount(WideStringView buf, size_t rule_count) {
     ASSERT(sheet_);
-    EXPECT_TRUE(sheet_->LoadBuffer(buf, wcslen(buf)));
+    EXPECT_TRUE(sheet_->LoadBuffer(buf));
     EXPECT_EQ(sheet_->CountRules(), rule_count);
   }
 
-  void LoadAndVerifyDecl(const wchar_t* buf,
+  void LoadAndVerifyDecl(WideStringView buf,
                          const std::vector<WideString>& selectors,
                          size_t decl_count) {
     LoadAndVerifyRuleCount(buf, 1);
@@ -124,7 +124,7 @@
 TEST_F(CFX_CSSStyleSheetTest, ParseMultipleSelectors) {
   const wchar_t* buf =
       L"a { border: 10px; }\nb { text-decoration: underline; }";
-  EXPECT_TRUE(sheet_->LoadBuffer(buf, wcslen(buf)));
+  EXPECT_TRUE(sheet_->LoadBuffer(buf));
   EXPECT_EQ(2u, sheet_->CountRules());
 
   CFX_CSSStyleRule* style = sheet_->GetRule(0);
@@ -172,7 +172,7 @@
 
 TEST_F(CFX_CSSStyleSheetTest, ParseChildSelectors) {
   const wchar_t* buf = L"a b c { border: 10px; }";
-  EXPECT_TRUE(sheet_->LoadBuffer(buf, wcslen(buf)));
+  EXPECT_TRUE(sheet_->LoadBuffer(buf));
   EXPECT_EQ(1u, sheet_->CountRules());
 
   CFX_CSSStyleRule* style = sheet_->GetRule(0);
@@ -207,19 +207,19 @@
 
 TEST_F(CFX_CSSStyleSheetTest, ParseUnhandledSelectors) {
   const wchar_t* buf = L"a > b { padding: 0; }";
-  EXPECT_TRUE(sheet_->LoadBuffer(buf, wcslen(buf)));
+  EXPECT_TRUE(sheet_->LoadBuffer(buf));
   EXPECT_EQ(0u, sheet_->CountRules());
 
   buf = L"a[first] { padding: 0; }";
-  EXPECT_TRUE(sheet_->LoadBuffer(buf, wcslen(buf)));
+  EXPECT_TRUE(sheet_->LoadBuffer(buf));
   EXPECT_EQ(0u, sheet_->CountRules());
 
   buf = L"a+b { padding: 0; }";
-  EXPECT_TRUE(sheet_->LoadBuffer(buf, wcslen(buf)));
+  EXPECT_TRUE(sheet_->LoadBuffer(buf));
   EXPECT_EQ(0u, sheet_->CountRules());
 
   buf = L"a ^ b { padding: 0; }";
-  EXPECT_TRUE(sheet_->LoadBuffer(buf, wcslen(buf)));
+  EXPECT_TRUE(sheet_->LoadBuffer(buf));
   EXPECT_EQ(0u, sheet_->CountRules());
 }
 
diff --git a/core/fxcrt/css/cfx_csssyntaxparser.cpp b/core/fxcrt/css/cfx_csssyntaxparser.cpp
index e502ea0..00b3071 100644
--- a/core/fxcrt/css/cfx_csssyntaxparser.cpp
+++ b/core/fxcrt/css/cfx_csssyntaxparser.cpp
@@ -24,11 +24,7 @@
 
 }  // namespace
 
-CFX_CSSSyntaxParser::CFX_CSSSyntaxParser(const wchar_t* pBuffer,
-                                         int32_t iBufferSize) {
-  ASSERT(pBuffer);
-  m_Input.AttachBuffer(pBuffer, iBufferSize);
-}
+CFX_CSSSyntaxParser::CFX_CSSSyntaxParser(WideStringView str) : m_Input(str) {}
 
 CFX_CSSSyntaxParser::~CFX_CSSSyntaxParser() = default;
 
diff --git a/core/fxcrt/css/cfx_csssyntaxparser.h b/core/fxcrt/css/cfx_csssyntaxparser.h
index 4fa6115..584e4e2 100644
--- a/core/fxcrt/css/cfx_csssyntaxparser.h
+++ b/core/fxcrt/css/cfx_csssyntaxparser.h
@@ -30,7 +30,7 @@
 
 class CFX_CSSSyntaxParser {
  public:
-  CFX_CSSSyntaxParser(const wchar_t* pBuffer, int32_t iBufferSize);
+  explicit CFX_CSSSyntaxParser(WideStringView str);
   ~CFX_CSSSyntaxParser();
 
   void SetParseOnlyDeclarations();
diff --git a/core/fxcrt/css/cfx_csssyntaxparser_unittest.cpp b/core/fxcrt/css/cfx_csssyntaxparser_unittest.cpp
index 4eb0c7a..024a067 100644
--- a/core/fxcrt/css/cfx_csssyntaxparser_unittest.cpp
+++ b/core/fxcrt/css/cfx_csssyntaxparser_unittest.cpp
@@ -12,7 +12,7 @@
 
 TEST(CSSSyntaxParserTest, ParseEmpty) {
   const wchar_t* input = L"";
-  CFX_CSSSyntaxParser parser(input, wcslen(input));
+  CFX_CSSSyntaxParser parser(input);
   parser.SetParseOnlyDeclarations();
   EXPECT_EQ(CFX_CSSSyntaxStatus::kEOS, parser.DoSyntaxParse());
   EXPECT_EQ(CFX_CSSSyntaxStatus::kEOS, parser.DoSyntaxParse());
@@ -20,7 +20,7 @@
 
 TEST(CSSSyntaxParserTest, ParseBlank) {
   const wchar_t* input = L"  \n\r\t";
-  CFX_CSSSyntaxParser parser(input, wcslen(input));
+  CFX_CSSSyntaxParser parser(input);
   parser.SetParseOnlyDeclarations();
   EXPECT_EQ(CFX_CSSSyntaxStatus::kEOS, parser.DoSyntaxParse());
   EXPECT_EQ(CFX_CSSSyntaxStatus::kEOS, parser.DoSyntaxParse());
@@ -28,7 +28,7 @@
 
 TEST(CSSSyntaxParserTest, ParseMissingColon) {
   const wchar_t* input = L"foo ";
-  CFX_CSSSyntaxParser parser(input, wcslen(input));
+  CFX_CSSSyntaxParser parser(input);
   parser.SetParseOnlyDeclarations();
   EXPECT_EQ(CFX_CSSSyntaxStatus::kEOS, parser.DoSyntaxParse());
   EXPECT_EQ(CFX_CSSSyntaxStatus::kEOS, parser.DoSyntaxParse());
@@ -36,7 +36,7 @@
 
 TEST(CSSSyntaxParserTest, ParseMissingValue) {
   const wchar_t* input = L"foo: ";
-  CFX_CSSSyntaxParser parser(input, wcslen(input));
+  CFX_CSSSyntaxParser parser(input);
   parser.SetParseOnlyDeclarations();
   EXPECT_EQ(CFX_CSSSyntaxStatus::kPropertyName, parser.DoSyntaxParse());
   EXPECT_EQ(L"foo", parser.GetCurrentString());
@@ -45,7 +45,7 @@
 
 TEST(CSSSyntaxParserTest, ParseSingleProp1) {
   const wchar_t* input = L"foo:bar";
-  CFX_CSSSyntaxParser parser(input, wcslen(input));
+  CFX_CSSSyntaxParser parser(input);
   parser.SetParseOnlyDeclarations();
   EXPECT_EQ(CFX_CSSSyntaxStatus::kPropertyName, parser.DoSyntaxParse());
   EXPECT_EQ(L"foo", parser.GetCurrentString());
@@ -56,7 +56,7 @@
 
 TEST(CSSSyntaxParserTest, ParseSingleProp2) {
   const wchar_t* input = L"foo:bar;";
-  CFX_CSSSyntaxParser parser(input, wcslen(input));
+  CFX_CSSSyntaxParser parser(input);
   parser.SetParseOnlyDeclarations();
   EXPECT_EQ(CFX_CSSSyntaxStatus::kPropertyName, parser.DoSyntaxParse());
   EXPECT_EQ(L"foo", parser.GetCurrentString());
@@ -67,7 +67,7 @@
 
 TEST(CSSSyntaxParserTest, ParseMissingColonMultiple) {
   const wchar_t* input = L"foo:bar; baz";
-  CFX_CSSSyntaxParser parser(input, wcslen(input));
+  CFX_CSSSyntaxParser parser(input);
   parser.SetParseOnlyDeclarations();
   EXPECT_EQ(CFX_CSSSyntaxStatus::kPropertyName, parser.DoSyntaxParse());
   EXPECT_EQ(L"foo", parser.GetCurrentString());
@@ -78,7 +78,7 @@
 
 TEST(CSSSyntaxParserTest, ParseMissingPropertyMultiple) {
   const wchar_t* input = L"foo:bar; baz: ";
-  CFX_CSSSyntaxParser parser(input, wcslen(input));
+  CFX_CSSSyntaxParser parser(input);
   parser.SetParseOnlyDeclarations();
   EXPECT_EQ(CFX_CSSSyntaxStatus::kPropertyName, parser.DoSyntaxParse());
   EXPECT_EQ(L"foo", parser.GetCurrentString());
@@ -91,7 +91,7 @@
 
 TEST(CSSSyntaxParserTest, ParseMultipleProp1) {
   const wchar_t* input = L"foo : bar; baz : bam";
-  CFX_CSSSyntaxParser parser(input, wcslen(input));
+  CFX_CSSSyntaxParser parser(input);
   parser.SetParseOnlyDeclarations();
   EXPECT_EQ(CFX_CSSSyntaxStatus::kPropertyName, parser.DoSyntaxParse());
   EXPECT_EQ(L"foo", parser.GetCurrentString());
@@ -106,7 +106,7 @@
 
 TEST(CSSSyntaxParserTest, ParseMultipleProp2) {
   const wchar_t* input = L"foo:bar;baz:bam;";
-  CFX_CSSSyntaxParser parser(input, wcslen(input));
+  CFX_CSSSyntaxParser parser(input);
   parser.SetParseOnlyDeclarations();
   EXPECT_EQ(CFX_CSSSyntaxStatus::kPropertyName, parser.DoSyntaxParse());
   EXPECT_EQ(L"foo", parser.GetCurrentString());
@@ -121,7 +121,7 @@
 
 TEST(CSSSyntaxParserTest, ParseOpenBrace1) {
   const wchar_t* input = L"{a:3}";
-  CFX_CSSSyntaxParser parser(input, wcslen(input));
+  CFX_CSSSyntaxParser parser(input);
   parser.SetParseOnlyDeclarations();
 
   // TODO(tsepez): these should fail on stray punctuation.
@@ -134,7 +134,7 @@
 
 TEST(CSSSyntaxParserTest, ParseOpenBrace2) {
   const wchar_t* input = L"foo {a:3}";
-  CFX_CSSSyntaxParser parser(input, wcslen(input));
+  CFX_CSSSyntaxParser parser(input);
   parser.SetParseOnlyDeclarations();
 
   // TODO(tsepez): these should fail on stray punctuation.
@@ -147,7 +147,7 @@
 
 TEST(CSSSyntaxParserTest, ParseOpenBrace3) {
   const wchar_t* input = L"foo: bar {a:3}";
-  CFX_CSSSyntaxParser parser(input, wcslen(input));
+  CFX_CSSSyntaxParser parser(input);
   parser.SetParseOnlyDeclarations();
 
   // TODO(tsepez): these should fail on stray punctuation.
@@ -160,7 +160,7 @@
 
 TEST(CSSSyntaxParserTest, ParseOpenBrace4) {
   const wchar_t* input = L"foo: bar; {a:3}";
-  CFX_CSSSyntaxParser parser(input, wcslen(input));
+  CFX_CSSSyntaxParser parser(input);
   parser.SetParseOnlyDeclarations();
   EXPECT_EQ(CFX_CSSSyntaxStatus::kPropertyName, parser.DoSyntaxParse());
   EXPECT_EQ(L"foo", parser.GetCurrentString());
@@ -177,21 +177,21 @@
 
 TEST(CSSSyntaxParserTest, ParseCloseBrace1) {
   const wchar_t* input = L"} foo:bar";
-  CFX_CSSSyntaxParser parser(input, wcslen(input));
+  CFX_CSSSyntaxParser parser(input);
   parser.SetParseOnlyDeclarations();
   EXPECT_EQ(CFX_CSSSyntaxStatus::kError, parser.DoSyntaxParse());
 }
 
 TEST(CSSSyntaxParserTest, ParseCloseBrace2) {
   const wchar_t* input = L"foo}:bar";
-  CFX_CSSSyntaxParser parser(input, wcslen(input));
+  CFX_CSSSyntaxParser parser(input);
   parser.SetParseOnlyDeclarations();
   EXPECT_EQ(CFX_CSSSyntaxStatus::kError, parser.DoSyntaxParse());
 }
 
 TEST(CSSSyntaxParserTest, ParseCloseBrace3) {
   const wchar_t* input = L"foo:bar}";
-  CFX_CSSSyntaxParser parser(input, wcslen(input));
+  CFX_CSSSyntaxParser parser(input);
   parser.SetParseOnlyDeclarations();
   EXPECT_EQ(CFX_CSSSyntaxStatus::kPropertyName, parser.DoSyntaxParse());
   EXPECT_EQ(L"foo", parser.GetCurrentString());
@@ -202,7 +202,7 @@
 
 TEST(CSSSyntaxParserTest, ParseCloseBrace4) {
   const wchar_t* input = L"foo:bar;}";
-  CFX_CSSSyntaxParser parser(input, wcslen(input));
+  CFX_CSSSyntaxParser parser(input);
   parser.SetParseOnlyDeclarations();
   EXPECT_EQ(CFX_CSSSyntaxStatus::kPropertyName, parser.DoSyntaxParse());
   EXPECT_EQ(L"foo", parser.GetCurrentString());
diff --git a/testing/fuzzers/pdf_css_fuzzer.cc b/testing/fuzzers/pdf_css_fuzzer.cc
index 24ef22c..95ecceb 100644
--- a/testing/fuzzers/pdf_css_fuzzer.cc
+++ b/testing/fuzzers/pdf_css_fuzzer.cc
@@ -16,7 +16,7 @@
   if (input.IsEmpty())
     return 0;
 
-  CFX_CSSSyntaxParser parser(input.c_str(), input.GetLength());
+  CFX_CSSSyntaxParser parser(input.AsStringView());
   CFX_CSSSyntaxStatus status;
   do {
     status = parser.DoSyntaxParse();
diff --git a/xfa/fxfa/cxfa_textparser.cpp b/xfa/fxfa/cxfa_textparser.cpp
index 61b9a28..2423088 100644
--- a/xfa/fxfa/cxfa_textparser.cpp
+++ b/xfa/fxfa/cxfa_textparser.cpp
@@ -100,7 +100,7 @@
       "sub{vertical-align:-15em;font-size:.66em}";
   WideString ws = WideString::FromASCII(kStyle);
   auto sheet = pdfium::MakeUnique<CFX_CSSStyleSheet>();
-  if (!sheet->LoadBuffer(ws.c_str(), ws.GetLength()))
+  if (!sheet->LoadBuffer(ws.AsStringView()))
     return nullptr;
 
   return sheet;
