Remove font-related methods from CFX_SystemHandler.

These don't require any member variables, so they can be
anonymous functions instead. In turn, this gets rid of a
circular include between formfiller:fontmap and fpdfsdk.

Change-Id: I7f9725af406ebbf8621d1208638d6d4e372cf808
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/55533
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fpdfsdk/BUILD.gn b/fpdfsdk/BUILD.gn
index 786cc8f..255e68c 100644
--- a/fpdfsdk/BUILD.gn
+++ b/fpdfsdk/BUILD.gn
@@ -94,7 +94,6 @@
   allow_circular_includes_from = [
     "../fxjs",
     "formfiller",
-    "formfiller:fontmap",
     "pwl",
   ]
   visibility = [ "../*" ]
diff --git a/fpdfsdk/cfx_systemhandler.cpp b/fpdfsdk/cfx_systemhandler.cpp
index b43e303..6833693 100644
--- a/fpdfsdk/cfx_systemhandler.cpp
+++ b/fpdfsdk/cfx_systemhandler.cpp
@@ -10,9 +10,6 @@
 
 #include "core/fpdfapi/parser/cpdf_document.h"
 #include "core/fxcrt/fx_codepage.h"
-#include "core/fxge/cfx_font.h"
-#include "core/fxge/cfx_fontmapper.h"
-#include "core/fxge/cfx_fontmgr.h"
 #include "core/fxge/cfx_gemodule.h"
 #include "fpdfsdk/cpdfsdk_annot.h"
 #include "fpdfsdk/cpdfsdk_formfillenvironment.h"
@@ -70,38 +67,6 @@
   m_pFormFillEnv->SetCursor(nCursorType);
 }
 
-bool CFX_SystemHandler::FindNativeTrueTypeFont(ByteString sFontFaceName) {
-  CFX_FontMgr* pFontMgr = CFX_GEModule::Get()->GetFontMgr();
-  if (!pFontMgr)
-    return false;
-
-  CFX_FontMapper* pFontMapper = pFontMgr->GetBuiltinMapper();
-  pFontMapper->LoadInstalledFonts();
-
-  for (const auto& font : pFontMapper->m_InstalledTTFonts) {
-    if (font.Compare(sFontFaceName.AsStringView()))
-      return true;
-  }
-  for (const auto& fontPair : pFontMapper->m_LocalizedTTFonts) {
-    if (fontPair.first.Compare(sFontFaceName.AsStringView()))
-      return true;
-  }
-  return false;
-}
-
-CPDF_Font* CFX_SystemHandler::AddNativeTrueTypeFontToPDF(
-    CPDF_Document* pDoc,
-    ByteString sFontFaceName,
-    uint8_t nCharset) {
-  if (!pDoc)
-    return nullptr;
-
-  auto pFXFont = pdfium::MakeUnique<CFX_Font>();
-  pFXFont->LoadSubst(sFontFaceName, true, 0, 0, 0,
-                     FX_GetCodePageFromCharset(nCharset), false);
-  return pDoc->AddFont(pFXFont.get(), nCharset);
-}
-
 int32_t CFX_SystemHandler::SetTimer(int32_t uElapse,
                                     TimerCallback lpTimerFunc) {
   return m_pFormFillEnv->SetTimer(uElapse, lpTimerFunc);
diff --git a/fpdfsdk/cfx_systemhandler.h b/fpdfsdk/cfx_systemhandler.h
index 7c555b6..49297cd 100644
--- a/fpdfsdk/cfx_systemhandler.h
+++ b/fpdfsdk/cfx_systemhandler.h
@@ -14,7 +14,6 @@
 
 class CFFL_FormFiller;
 class CPDF_Document;
-class CPDF_Font;
 class CPDFSDK_FormFillEnvironment;
 class CPDFSDK_Widget;
 
@@ -31,11 +30,6 @@
                           const CFX_FloatRect& rect);
   bool IsSelectionImplemented() const;
   void SetCursor(int32_t nCursorType);
-  bool FindNativeTrueTypeFont(ByteString sFontFaceName);
-  CPDF_Font* AddNativeTrueTypeFontToPDF(CPDF_Document* pDoc,
-                                        ByteString sFontFaceName,
-                                        uint8_t nCharset);
-
   int32_t SetTimer(int32_t uElapse, TimerCallback lpTimerFunc);
   void KillTimer(int32_t nID);
 
diff --git a/fpdfsdk/formfiller/cba_fontmap.cpp b/fpdfsdk/formfiller/cba_fontmap.cpp
index 4e2e100..d4f9334 100644
--- a/fpdfsdk/formfiller/cba_fontmap.cpp
+++ b/fpdfsdk/formfiller/cba_fontmap.cpp
@@ -24,17 +24,50 @@
 #include "core/fpdfdoc/cpdf_formfield.h"
 #include "core/fpdfdoc/ipvt_fontmap.h"
 #include "core/fxcrt/fx_codepage.h"
+#include "core/fxge/cfx_fontmapper.h"
+#include "core/fxge/cfx_fontmgr.h"
+#include "core/fxge/cfx_gemodule.h"
 #include "core/fxge/cfx_substfont.h"
-#include "fpdfsdk/cfx_systemhandler.h"
 #include "third_party/base/ptr_util.h"
 #include "third_party/base/stl_util.h"
 
-CBA_FontMap::CBA_FontMap(CFX_SystemHandler* pSystemHandler,
-                         CPDF_Document* pDocument,
-                         CPDF_Dictionary* pAnnotDict)
-    : m_pSystemHandler(pSystemHandler),
-      m_pDocument(pDocument),
-      m_pAnnotDict(pAnnotDict) {
+namespace {
+
+bool FindNativeTrueTypeFont(ByteString sFontFaceName) {
+  CFX_FontMgr* pFontMgr = CFX_GEModule::Get()->GetFontMgr();
+  if (!pFontMgr)
+    return false;
+
+  CFX_FontMapper* pFontMapper = pFontMgr->GetBuiltinMapper();
+  pFontMapper->LoadInstalledFonts();
+
+  for (const auto& font : pFontMapper->m_InstalledTTFonts) {
+    if (font.Compare(sFontFaceName.AsStringView()))
+      return true;
+  }
+  for (const auto& fontPair : pFontMapper->m_LocalizedTTFonts) {
+    if (fontPair.first.Compare(sFontFaceName.AsStringView()))
+      return true;
+  }
+  return false;
+}
+
+CPDF_Font* AddNativeTrueTypeFontToPDF(CPDF_Document* pDoc,
+                                      ByteString sFontFaceName,
+                                      uint8_t nCharset) {
+  if (!pDoc)
+    return nullptr;
+
+  auto pFXFont = pdfium::MakeUnique<CFX_Font>();
+  pFXFont->LoadSubst(sFontFaceName, true, 0, 0, 0,
+                     FX_GetCodePageFromCharset(nCharset), false);
+  return pDoc->AddFont(pFXFont.get(), nCharset);
+}
+
+}  // namespace
+
+CBA_FontMap::CBA_FontMap(CPDF_Document* pDocument, CPDF_Dictionary* pAnnotDict)
+    : m_pDocument(pDocument), m_pAnnotDict(pAnnotDict) {
   Initialize();
 }
 
@@ -389,7 +422,7 @@
     nCharset = GetNativeCharset();
 
   ByteString sFontName = CFX_Font::GetDefaultFontNameByCharset(nCharset);
-  if (!m_pSystemHandler->FindNativeTrueTypeFont(sFontName))
+  if (!FindNativeTrueTypeFont(sFontName))
     return ByteString();
 
   return sFontName;
@@ -469,9 +502,9 @@
 
   if (sFontName.IsEmpty())
     sFontName = GetNativeFont(nCharset);
+
   if (nCharset == FX_CHARSET_Default)
     nCharset = GetNativeCharset();
 
-  return m_pSystemHandler->AddNativeTrueTypeFontToPDF(pDoc, sFontName,
-                                                      nCharset);
+  return AddNativeTrueTypeFontToPDF(pDoc, sFontName, nCharset);
 }
diff --git a/fpdfsdk/formfiller/cba_fontmap.h b/fpdfsdk/formfiller/cba_fontmap.h
index 9912b38..2639cac 100644
--- a/fpdfsdk/formfiller/cba_fontmap.h
+++ b/fpdfsdk/formfiller/cba_fontmap.h
@@ -15,15 +15,12 @@
 #include "core/fxcrt/unowned_ptr.h"
 #include "public/fpdf_sysfontinfo.h"
 
-class CFX_SystemHandler;
 class CPDF_Dictionary;
 class CPDF_Document;
 
 class CBA_FontMap final : public IPVT_FontMap {
  public:
-  CBA_FontMap(CFX_SystemHandler* pSystemHandler,
-              CPDF_Document* pDocument,
-              CPDF_Dictionary* pAnnotDict);
+  CBA_FontMap(CPDF_Document* pDocument, CPDF_Dictionary* pAnnotDict);
   ~CBA_FontMap() override;
 
   // IPVT_FontMap
@@ -89,7 +86,6 @@
 
   std::vector<std::unique_ptr<Data>> m_Data;
   std::vector<std::unique_ptr<Native>> m_NativeFont;
-  UnownedPtr<CFX_SystemHandler> const m_pSystemHandler;
   UnownedPtr<CPDF_Document> const m_pDocument;
   RetainPtr<CPDF_Dictionary> const m_pAnnotDict;
   UnownedPtr<CPDF_Font> m_pDefaultFont;
diff --git a/fpdfsdk/formfiller/cffl_textobject.cpp b/fpdfsdk/formfiller/cffl_textobject.cpp
index 3beca7f..a6b1308 100644
--- a/fpdfsdk/formfiller/cffl_textobject.cpp
+++ b/fpdfsdk/formfiller/cffl_textobject.cpp
@@ -34,7 +34,7 @@
 CBA_FontMap* CFFL_TextObject::MaybeCreateFontMap() {
   if (!m_pFontMap) {
     m_pFontMap = pdfium::MakeUnique<CBA_FontMap>(
-        GetSystemHandler(), m_pWidget->GetPDFPage()->GetDocument(),
+        m_pWidget->GetPDFPage()->GetDocument(),
         m_pWidget->GetPDFAnnot()->GetAnnotDict());
   }
   return m_pFontMap.get();
diff --git a/fpdfsdk/pwl/cpwl_appstream.cpp b/fpdfsdk/pwl/cpwl_appstream.cpp
index a431781..2e9ca5c 100644
--- a/fpdfsdk/pwl/cpwl_appstream.cpp
+++ b/fpdfsdk/pwl/cpwl_appstream.cpp
@@ -1231,14 +1231,11 @@
   SetDefaultIconName(pRolloverIcon, "ImgB");
   SetDefaultIconName(pDownIcon, "ImgC");
 
-  CPDF_IconFit iconFit = pControl->GetIconFit();
-  CBA_FontMap font_map(
-      widget_->GetInteractiveForm()->GetFormFillEnv()->GetSysHandler(),
-      widget_->GetPDFPage()->GetDocument(),
-      widget_->GetPDFAnnot()->GetAnnotDict());
-
+  CBA_FontMap font_map(widget_->GetPDFPage()->GetDocument(),
+                       widget_->GetPDFAnnot()->GetAnnotDict());
   font_map.SetAPType("N");
 
+  CPDF_IconFit iconFit = pControl->GetIconFit();
   ByteString csAP =
       GetRectFillAppStream(rcWindow, crBackground) +
       GetBorderAppStreamInternal(rcWindow, fBorderWidth, crBorder, crLeftTop,
@@ -1591,10 +1588,8 @@
   rcButton.Normalize();
 
   // Font map must outlive |pEdit|.
-  CBA_FontMap font_map(
-      widget_->GetInteractiveForm()->GetFormFillEnv()->GetSysHandler(),
-      widget_->GetPDFPage()->GetDocument(),
-      widget_->GetPDFAnnot()->GetAnnotDict());
+  CBA_FontMap font_map(widget_->GetPDFPage()->GetDocument(),
+                       widget_->GetPDFAnnot()->GetAnnotDict());
 
   auto pEdit = pdfium::MakeUnique<CPWL_EditImpl>();
   pEdit->EnableRefresh(false);
@@ -1659,10 +1654,8 @@
   std::ostringstream sBody;
 
   // Font map must outlive |pEdit|.
-  CBA_FontMap font_map(
-      widget_->GetInteractiveForm()->GetFormFillEnv()->GetSysHandler(),
-      widget_->GetPDFPage()->GetDocument(),
-      widget_->GetPDFAnnot()->GetAnnotDict());
+  CBA_FontMap font_map(widget_->GetPDFPage()->GetDocument(),
+                       widget_->GetPDFAnnot()->GetAnnotDict());
 
   auto pEdit = pdfium::MakeUnique<CPWL_EditImpl>();
   pEdit->EnableRefresh(false);
@@ -1745,10 +1738,8 @@
   std::ostringstream sLines;
 
   // Font map must outlive |pEdit|.
-  CBA_FontMap font_map(
-      widget_->GetInteractiveForm()->GetFormFillEnv()->GetSysHandler(),
-      widget_->GetPDFPage()->GetDocument(),
-      widget_->GetPDFAnnot()->GetAnnotDict());
+  CBA_FontMap font_map(widget_->GetPDFPage()->GetDocument(),
+                       widget_->GetPDFAnnot()->GetAnnotDict());
 
   auto pEdit = pdfium::MakeUnique<CPWL_EditImpl>();
   pEdit->EnableRefresh(false);