Implement WideString::ReverseFind()

Unlike its ByteString counterpart, WideString lacks a reverse find.
Add implementation and tests for ReverseFind(), inspired by those for
ByteString::ReverseFind().

Bug: pdfium:1405
Change-Id: I40bb5d21c3781df492ae038c14b295644621768f
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/61592
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/core/fxcrt/widestring.cpp b/core/fxcrt/widestring.cpp
index 2340b14..673d999 100644
--- a/core/fxcrt/widestring.cpp
+++ b/core/fxcrt/widestring.cpp
@@ -779,6 +779,18 @@
               : Optional<size_t>();
 }
 
+Optional<size_t> WideString::ReverseFind(wchar_t ch) const {
+  if (!m_pData)
+    return pdfium::nullopt;
+
+  size_t nLength = m_pData->m_nDataLength;
+  while (nLength--) {
+    if (m_pData->m_String[nLength] == ch)
+      return nLength;
+  }
+  return pdfium::nullopt;
+}
+
 void WideString::MakeLower() {
   if (!m_pData)
     return;