Add WideString::CompareASCIINoCase().

Another useful helper function for a subsequent cl.

Change-Id: I8284e06695393ab9b6a5c2230f339c327361fbf7
Reviewed-on: https://pdfium-review.googlesource.com/c/46190
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fxcrt/widestring.cpp b/core/fxcrt/widestring.cpp
index afd37ef..bda34e1 100644
--- a/core/fxcrt/widestring.cpp
+++ b/core/fxcrt/widestring.cpp
@@ -650,7 +650,20 @@
 
   for (size_t i = 0; i < length; ++i) {
     wchar_t wc = (*this)[i];
-    if (wc <= 0 || wc > 127 || wc != that[i])  // Questionable signedness.
+    if (wc <= 0 || wc > 127 || wc != that[i])
+      return false;
+  }
+  return true;
+}
+
+bool WideString::EqualsASCIINoCase(const ByteStringView& that) const {
+  size_t length = GetLength();
+  if (length != that.GetLength())
+    return false;
+
+  for (size_t i = 0; i < length; ++i) {
+    wchar_t wc = (*this)[i];
+    if (wc <= 0 || wc > 127 || tolower(wc) != tolower(that[i]))
       return false;
   }
   return true;
diff --git a/core/fxcrt/widestring.h b/core/fxcrt/widestring.h
index de7db38..be03731 100644
--- a/core/fxcrt/widestring.h
+++ b/core/fxcrt/widestring.h
@@ -194,6 +194,8 @@
 
   bool IsASCII() const;
   bool EqualsASCII(const ByteStringView& that) const;
+  bool EqualsASCIINoCase(const ByteStringView& that) const;
+
   ByteString ToASCII() const;
   ByteString ToDefANSI() const;
   ByteString ToUTF8() const;
diff --git a/core/fxcrt/widestring_unittest.cpp b/core/fxcrt/widestring_unittest.cpp
index 4354dbe..41465c0 100644
--- a/core/fxcrt/widestring_unittest.cpp
+++ b/core/fxcrt/widestring_unittest.cpp
@@ -1018,6 +1018,15 @@
   EXPECT_FALSE(WideString(L"\u0141").EqualsASCII("\x41"));
 }
 
+TEST(WideString, EqualsASCIINoCase) {
+  EXPECT_TRUE(WideString(L"").EqualsASCIINoCase(""));
+  EXPECT_FALSE(WideString(L"A").EqualsASCIINoCase("b"));
+  EXPECT_TRUE(WideString(L"AbC").EqualsASCIINoCase("aBc"));
+  EXPECT_FALSE(WideString(L"ABc").EqualsASCIINoCase("AeC"));
+  EXPECT_FALSE(WideString(L"\u00c1").EqualsASCIINoCase("\x41"));
+  EXPECT_FALSE(WideString(L"\u0141").EqualsASCIINoCase("\x41"));
+}
+
 TEST(WideString, ToASCII) {
   const char* kResult =
       "x"