diff --git a/core/fxge/cfx_fontmapper.cpp b/core/fxge/cfx_fontmapper.cpp
index 5e894b1..53d97b1 100644
--- a/core/fxge/cfx_fontmapper.cpp
+++ b/core/fxge/cfx_fontmapper.cpp
@@ -28,11 +28,10 @@
 
 namespace {
 
-constexpr int kNumStandardFonts = 14;
-static_assert(CFX_FontMapper::kLast + 1 == kNumStandardFonts,
+static_assert(CFX_FontMapper::kLast + 1 == CFX_FontMapper::kNumStandardFonts,
               "StandardFont enum count mismatch");
 
-const char* const kBase14FontNames[kNumStandardFonts] = {
+const char* const kBase14FontNames[CFX_FontMapper::kNumStandardFonts] = {
     "Courier",
     "Courier-Bold",
     "Courier-BoldOblique",
@@ -376,34 +375,31 @@
                                                      int weight,
                                                      int pitch_family) {
   if (iBaseFont < kNumStandardFonts) {
-    if (m_FoxitFaces[iBaseFont])
-      return m_FoxitFaces[iBaseFont];
-    absl::optional<pdfium::span<const uint8_t>> font_data =
-        m_pFontMgr->GetBuiltinFont(iBaseFont);
-    if (font_data.has_value()) {
-      m_FoxitFaces[iBaseFont] =
-          m_pFontMgr->NewFixedFace(nullptr, font_data.value(), 0);
-      return m_FoxitFaces[iBaseFont];
+    if (!m_StandardFaces[iBaseFont]) {
+      m_StandardFaces[iBaseFont] = m_pFontMgr->NewFixedFace(
+          nullptr, m_pFontMgr->GetStandardFont(iBaseFont), 0);
     }
+    return m_StandardFaces[iBaseFont];
   }
+
   pSubstFont->m_bFlagMM = true;
   pSubstFont->m_ItalicAngle = italic_angle;
   if (weight)
     pSubstFont->m_Weight = weight;
   if (FontFamilyIsRoman(pitch_family)) {
     pSubstFont->UseChromeSerif();
-    if (!m_MMFaces[1]) {
-      m_MMFaces[1] = m_pFontMgr->NewFixedFace(
-          nullptr, m_pFontMgr->GetBuiltinFont(14).value(), 0);
+    if (!m_GenericSerifFace) {
+      m_GenericSerifFace = m_pFontMgr->NewFixedFace(
+          nullptr, m_pFontMgr->GetGenericSerifFont(), 0);
     }
-    return m_MMFaces[1];
+    return m_GenericSerifFace;
   }
   pSubstFont->m_Family = "Chrome Sans";
-  if (!m_MMFaces[0]) {
-    m_MMFaces[0] = m_pFontMgr->NewFixedFace(
-        nullptr, m_pFontMgr->GetBuiltinFont(15).value(), 0);
+  if (!m_GenericSansFace) {
+    m_GenericSansFace =
+        m_pFontMgr->NewFixedFace(nullptr, m_pFontMgr->GetGenericSansFont(), 0);
   }
-  return m_MMFaces[0];
+  return m_GenericSansFace;
 }
 
 RetainPtr<CFX_Face> CFX_FontMapper::FindSubstFont(const ByteString& name,
@@ -753,18 +749,6 @@
 }
 #endif  // PDF_ENABLE_XFA
 
-bool CFX_FontMapper::IsBuiltinFace(const RetainPtr<CFX_Face>& face) const {
-  for (size_t i = 0; i < MM_FACE_COUNT; ++i) {
-    if (m_MMFaces[i] == face)
-      return true;
-  }
-  for (size_t i = 0; i < FOXIT_FACE_COUNT; ++i) {
-    if (m_FoxitFaces[i] == face)
-      return true;
-  }
-  return false;
-}
-
 RetainPtr<CFX_Face> CFX_FontMapper::GetCachedTTCFace(void* hFont,
                                                      uint32_t ttc_size,
                                                      uint32_t font_size) {
diff --git a/core/fxge/cfx_fontmapper.h b/core/fxge/cfx_fontmapper.h
index 4622145..930c924 100644
--- a/core/fxge/cfx_fontmapper.h
+++ b/core/fxge/cfx_fontmapper.h
@@ -43,6 +43,7 @@
     kDingbats,
     kLast = kDingbats
   };
+  static constexpr int kNumStandardFonts = 14;
 
   explicit CFX_FontMapper(CFX_FontMgr* mgr);
   ~CFX_FontMapper();
@@ -68,7 +69,6 @@
                                     FX_CodePage code_page,
                                     CFX_SubstFont* pSubstFont);
 
-  bool IsBuiltinFace(const RetainPtr<CFX_Face>& face) const;
   size_t GetFaceSize() const;
   ByteString GetFaceName(size_t index) const { return m_FaceArray[index].name; }
   bool HasInstalledFont(ByteStringView name) const;
@@ -88,9 +88,6 @@
 #endif  // PDF_ENABLE_XFA
 
  private:
-  static constexpr size_t MM_FACE_COUNT = 2;
-  static constexpr size_t FOXIT_FACE_COUNT = 14;
-
   uint32_t GetChecksumFromTT(void* hFont);
   ByteString GetPSNameFromTT(void* hFont);
   ByteString MatchInstalledFonts(const ByteString& norm_name);
@@ -120,8 +117,9 @@
   UnownedPtr<CFX_FontMgr> const m_pFontMgr;
   std::vector<ByteString> m_InstalledTTFonts;
   std::vector<std::pair<ByteString, ByteString>> m_LocalizedTTFonts;
-  RetainPtr<CFX_Face> m_MMFaces[MM_FACE_COUNT];
-  RetainPtr<CFX_Face> m_FoxitFaces[FOXIT_FACE_COUNT];
+  RetainPtr<CFX_Face> m_StandardFaces[kNumStandardFonts];
+  RetainPtr<CFX_Face> m_GenericSansFace;
+  RetainPtr<CFX_Face> m_GenericSerifFace;
 };
 
 #endif  // CORE_FXGE_CFX_FONTMAPPER_H_
diff --git a/core/fxge/cfx_fontmgr.cpp b/core/fxge/cfx_fontmgr.cpp
index 510617f..8513001 100644
--- a/core/fxge/cfx_fontmgr.cpp
+++ b/core/fxge/cfx_fontmgr.cpp
@@ -25,7 +25,7 @@
   uint32_t m_dwSize;
 };
 
-constexpr BuiltinFont kFoxitFonts[14] = {
+constexpr BuiltinFont kFoxitFonts[] = {
     {kFoxitFixedFontData, 17597},
     {kFoxitFixedBoldFontData, 18055},
     {kFoxitFixedBoldItalicFontData, 19151},
@@ -41,11 +41,11 @@
     {kFoxitSymbolFontData, 16729},
     {kFoxitDingbatsFontData, 29513},
 };
+static_assert(pdfium::size(kFoxitFonts) == CFX_FontMapper::kNumStandardFonts,
+              "Wrong font count");
 
-const BuiltinFont kMMFonts[2] = {
-    {kFoxitSerifMMFontData, 113417},
-    {kFoxitSansMMFontData, 66919},
-};
+constexpr BuiltinFont kGenericSansFont = {kFoxitSansMMFontData, 66919};
+constexpr BuiltinFont kGenericSerifFont = {kFoxitSerifMMFontData, 113417};
 
 ByteString KeyNameFromFace(const ByteString& face_name,
                            int weight,
@@ -144,18 +144,22 @@
 }
 
 // static
-absl::optional<pdfium::span<const uint8_t>> CFX_FontMgr::GetBuiltinFont(
-    size_t index) {
-  if (index < pdfium::size(kFoxitFonts)) {
-    return pdfium::make_span(kFoxitFonts[index].m_pFontData,
-                             kFoxitFonts[index].m_dwSize);
-  }
-  size_t mm_index = index - pdfium::size(kFoxitFonts);
-  if (mm_index < pdfium::size(kMMFonts)) {
-    return pdfium::make_span(kMMFonts[mm_index].m_pFontData,
-                             kMMFonts[mm_index].m_dwSize);
-  }
-  return absl::nullopt;
+pdfium::span<const uint8_t> CFX_FontMgr::GetStandardFont(size_t index) {
+  CHECK_LT(index, pdfium::size(kFoxitFonts));
+  return pdfium::make_span(kFoxitFonts[index].m_pFontData,
+                           kFoxitFonts[index].m_dwSize);
+}
+
+// static
+pdfium::span<const uint8_t> CFX_FontMgr::GetGenericSansFont() {
+  return pdfium::make_span(kGenericSansFont.m_pFontData,
+                           kGenericSansFont.m_dwSize);
+}
+
+// static
+pdfium::span<const uint8_t> CFX_FontMgr::GetGenericSerifFont() {
+  return pdfium::make_span(kGenericSerifFont.m_pFontData,
+                           kGenericSerifFont.m_dwSize);
 }
 
 bool CFX_FontMgr::FreeTypeVersionSupportsHinting() const {
diff --git a/core/fxge/cfx_fontmgr.h b/core/fxge/cfx_fontmgr.h
index 232da1c..59cbf51 100644
--- a/core/fxge/cfx_fontmgr.h
+++ b/core/fxge/cfx_fontmgr.h
@@ -15,7 +15,6 @@
 #include "core/fxcrt/observed_ptr.h"
 #include "core/fxcrt/retain_ptr.h"
 #include "core/fxge/fx_freetype.h"
-#include "third_party/abseil-cpp/absl/types/optional.h"
 #include "third_party/base/span.h"
 
 class CFX_Face;
@@ -42,8 +41,10 @@
     ObservedPtr<CFX_Face> m_TTCFaces[16];
   };
 
-  static absl::optional<pdfium::span<const uint8_t>> GetBuiltinFont(
-      size_t index);
+  // `index` must be less than `CFX_FontMapper::kNumStandardFonts`.
+  static pdfium::span<const uint8_t> GetStandardFont(size_t index);
+  static pdfium::span<const uint8_t> GetGenericSansFont();
+  static pdfium::span<const uint8_t> GetGenericSerifFont();
 
   CFX_FontMgr();
   ~CFX_FontMgr();
