Merge 2 identical standard font name constants.

Remove CBA_FontMap::IsStandardFont(), which contains a standard font
name constant, and add CFX_FontMapper::IsStandardFontName(). Then
IsStandardFontName() can use the standard font name constant in
cfx_fontmapper.cpp.

Also add a unit test for IsStandardFontName() and fix some nits in
related code along the way.

Change-Id: I0292f1e7c644661f6ad1079b0eddd6b820096bcf
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/79630
Reviewed-by: Hui Yingst <nigi@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
diff --git a/core/fpdfdoc/cba_fontmap.cpp b/core/fpdfdoc/cba_fontmap.cpp
index 9e3ddb6..8d81eb6 100644
--- a/core/fpdfdoc/cba_fontmap.cpp
+++ b/core/fpdfdoc/cba_fontmap.cpp
@@ -422,34 +422,12 @@
 
 RetainPtr<CPDF_Font> CBA_FontMap::AddFontToDocument(ByteString sFontName,
                                                     uint8_t nCharset) {
-  if (IsStandardFont(sFontName))
+  if (CFX_FontMapper::IsStandardFontName(sFontName))
     return AddStandardFont(sFontName);
 
   return AddSystemFont(sFontName, nCharset);
 }
 
-bool CBA_FontMap::IsStandardFont(const ByteString& sFontName) {
-  static const char* const kStandardFontNames[] = {"Courier",
-                                                   "Courier-Bold",
-                                                   "Courier-BoldOblique",
-                                                   "Courier-Oblique",
-                                                   "Helvetica",
-                                                   "Helvetica-Bold",
-                                                   "Helvetica-BoldOblique",
-                                                   "Helvetica-Oblique",
-                                                   "Times-Roman",
-                                                   "Times-Bold",
-                                                   "Times-Italic",
-                                                   "Times-BoldItalic",
-                                                   "Symbol",
-                                                   "ZapfDingbats"};
-  for (const char* name : kStandardFontNames) {
-    if (sFontName == name)
-      return true;
-  }
-  return false;
-}
-
 RetainPtr<CPDF_Font> CBA_FontMap::AddStandardFont(ByteString sFontName) {
   auto* pPageData = CPDF_DocPageData::FromDocument(m_pDocument.Get());
   if (sFontName == "ZapfDingbats")
diff --git a/core/fpdfdoc/cba_fontmap.h b/core/fpdfdoc/cba_fontmap.h
index af9255d..78390d4 100644
--- a/core/fpdfdoc/cba_fontmap.h
+++ b/core/fpdfdoc/cba_fontmap.h
@@ -76,7 +76,6 @@
   int32_t FindFont(const ByteString& sFontName, int32_t nCharset);
   ByteString GetNativeFontName(int32_t nCharset);
   ByteString GetCachedNativeFontName(int32_t nCharset);
-  bool IsStandardFont(const ByteString& sFontName);
   RetainPtr<CPDF_Font> AddFontToDocument(ByteString sFontName,
                                          uint8_t nCharset);
   RetainPtr<CPDF_Font> AddStandardFont(ByteString sFontName);
diff --git a/core/fxge/cfx_fontmapper.cpp b/core/fxge/cfx_fontmapper.cpp
index 1e69776..7c0ef78 100644
--- a/core/fxge/cfx_fontmapper.cpp
+++ b/core/fxge/cfx_fontmapper.cpp
@@ -26,11 +26,11 @@
 
 namespace {
 
-const int kNumStandardFonts = 14;
-static_assert(CFX_FontMapper::kDingbats + 1 == kNumStandardFonts,
+constexpr int kNumStandardFonts = 14;
+static_assert(CFX_FontMapper::kLast + 1 == kNumStandardFonts,
               "StandardFont enum count mismatch");
 
-const char* const g_Base14FontNames[kNumStandardFonts] = {
+const char* const kBase14FontNames[kNumStandardFonts] = {
     "Courier",
     "Courier-Bold",
     "Courier-BoldOblique",
@@ -448,7 +448,7 @@
     }
   }
   for (; iBaseFont < 12; iBaseFont++) {
-    if (family == ByteStringView(g_Base14FontNames[iBaseFont]))
+    if (family == kBase14FontNames[iBaseFont])
       break;
   }
   int PitchFamily = 0;
@@ -594,7 +594,7 @@
         else if (FontStyleIsItalic(nStyle))
           iBaseFont += 3;
       }
-      family = g_Base14FontNames[iBaseFont];
+      family = kBase14FontNames[iBaseFont];
     }
   } else if (FontStyleIsItalic(flags)) {
     bItalic = true;
@@ -790,13 +790,22 @@
                          return FXSYS_stricmp(element.m_pName, name) < 0;
                        });
   if (found == end || FXSYS_stricmp(found->m_pName, name->c_str()))
-    return {};
+    return pdfium::nullopt;
 
-  *name = g_Base14FontNames[static_cast<size_t>(found->m_Index)];
+  *name = kBase14FontNames[static_cast<size_t>(found->m_Index)];
   return found->m_Index;
 }
 
 // static
+bool CFX_FontMapper::IsStandardFontName(const ByteString& name) {
+  for (const char* standard_name : kBase14FontNames) {
+    if (name == standard_name)
+      return true;
+  }
+  return false;
+}
+
+// static
 bool CFX_FontMapper::IsSymbolicFont(StandardFont font) {
   return font == StandardFont::kSymbol || font == StandardFont::kDingbats;
 }
diff --git a/core/fxge/cfx_fontmapper.h b/core/fxge/cfx_fontmapper.h
index 955cc68..91a9d7d 100644
--- a/core/fxge/cfx_fontmapper.h
+++ b/core/fxge/cfx_fontmapper.h
@@ -39,12 +39,14 @@
     kTimesOblique,
     kSymbol,
     kDingbats,
+    kLast = kDingbats
   };
 
   explicit CFX_FontMapper(CFX_FontMgr* mgr);
   ~CFX_FontMapper();
 
   static Optional<StandardFont> GetStandardFontName(ByteString* name);
+  static bool IsStandardFontName(const ByteString& name);
   static bool IsSymbolicFont(StandardFont font);
   static bool IsFixedFont(StandardFont font);
   static constexpr uint32_t MakeTag(char c1, char c2, char c3, char c4) {
diff --git a/core/fxge/cfx_fontmapper_unittest.cpp b/core/fxge/cfx_fontmapper_unittest.cpp
index e69387d..1d54526 100644
--- a/core/fxge/cfx_fontmapper_unittest.cpp
+++ b/core/fxge/cfx_fontmapper_unittest.cpp
@@ -9,6 +9,28 @@
 // Deliberately give this global variable external linkage.
 char g_maybe_changes = '\xff';
 
+TEST(CFX_FontMapper, IsStandardFontName) {
+  EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("Courier"));
+  EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("Courier-Bold"));
+  EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("Courier-BoldOblique"));
+  EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("Courier-Oblique"));
+  EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("Helvetica"));
+  EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("Helvetica-Bold"));
+  EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("Helvetica-BoldOblique"));
+  EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("Helvetica-Oblique"));
+  EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("Times-Roman"));
+  EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("Times-Bold"));
+  EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("Times-BoldItalic"));
+  EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("Times-Italic"));
+  EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("Symbol"));
+  EXPECT_TRUE(CFX_FontMapper::IsStandardFontName("ZapfDingbats"));
+
+  EXPECT_FALSE(CFX_FontMapper::IsStandardFontName("Courie"));
+  EXPECT_FALSE(CFX_FontMapper::IsStandardFontName("Courier-"));
+  EXPECT_FALSE(CFX_FontMapper::IsStandardFontName("Helvetica+Bold"));
+  EXPECT_FALSE(CFX_FontMapper::IsStandardFontName("YapfDingbats"));
+}
+
 TEST(CFX_FontMapper, MakeTag) {
   EXPECT_EQ(0x61626364u, CFX_FontMapper::MakeTag('a', 'b', 'c', 'd'));
   EXPECT_EQ(0x00000000u, CFX_FontMapper::MakeTag('\0', '\0', '\0', '\0'));