Break direct top-level fpdfapi to cmaps dependence.

Let the font/ layer manage the cmaps/ layer directly.

Change-Id: I7ef3227b44065a9c2b3714339790d353e0e7897d
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/58510
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/BUILD.gn b/core/fpdfapi/BUILD.gn
index 3f947dd..e364e7c 100644
--- a/core/fpdfapi/BUILD.gn
+++ b/core/fpdfapi/BUILD.gn
@@ -15,7 +15,6 @@
     "../fxcodec",
     "../fxcrt",
     "../fxge",
-    "cmaps",
     "edit",
     "font",
     "page",
diff --git a/core/fpdfapi/cpdf_modulemgr.cpp b/core/fpdfapi/cpdf_modulemgr.cpp
index 3987f69..3ab5cb5 100644
--- a/core/fpdfapi/cpdf_modulemgr.cpp
+++ b/core/fpdfapi/cpdf_modulemgr.cpp
@@ -6,10 +6,6 @@
 
 #include "core/fpdfapi/cpdf_modulemgr.h"
 
-#include "core/fpdfapi/cmaps/CNS1/cmaps_cns1.h"
-#include "core/fpdfapi/cmaps/GB1/cmaps_gb1.h"
-#include "core/fpdfapi/cmaps/Japan1/cmaps_japan1.h"
-#include "core/fpdfapi/cmaps/Korea1/cmaps_korea1.h"
 #include "core/fpdfapi/font/cpdf_fontglobals.h"
 #include "core/fpdfapi/page/cpdf_pagemodule.h"
 #include "core/fxcodec/fx_codec.h"
@@ -27,7 +23,7 @@
   g_pDefaultMgr = new CPDF_ModuleMgr;
   fxcodec::ModuleMgr::Create();
   CPDF_PageModule::Create();
-  g_pDefaultMgr->LoadEmbeddedMaps();
+  CPDF_FontGlobals::GetInstance()->LoadEmbeddedMaps();
 }
 
 // static
@@ -48,44 +44,3 @@
 CPDF_ModuleMgr::CPDF_ModuleMgr() = default;
 
 CPDF_ModuleMgr::~CPDF_ModuleMgr() = default;
-
-void CPDF_ModuleMgr::LoadEmbeddedMaps() {
-  LoadEmbeddedGB1CMaps();
-  LoadEmbeddedCNS1CMaps();
-  LoadEmbeddedJapan1CMaps();
-  LoadEmbeddedKorea1CMaps();
-}
-
-void CPDF_ModuleMgr::LoadEmbeddedGB1CMaps() {
-  auto* pFontGlobals = CPDF_FontGlobals::GetInstance();
-  pFontGlobals->SetEmbeddedCharset(
-      CIDSET_GB1,
-      pdfium::make_span(g_FXCMAP_GB1_cmaps, g_FXCMAP_GB1_cmaps_size));
-  pFontGlobals->SetEmbeddedToUnicode(CIDSET_GB1, g_FXCMAP_GB1CID2Unicode_5);
-}
-
-void CPDF_ModuleMgr::LoadEmbeddedCNS1CMaps() {
-  auto* pFontGlobals = CPDF_FontGlobals::GetInstance();
-  pFontGlobals->SetEmbeddedCharset(
-      CIDSET_CNS1,
-      pdfium::make_span(g_FXCMAP_CNS1_cmaps, g_FXCMAP_CNS1_cmaps_size));
-  pFontGlobals->SetEmbeddedToUnicode(CIDSET_CNS1, g_FXCMAP_CNS1CID2Unicode_5);
-}
-
-void CPDF_ModuleMgr::LoadEmbeddedJapan1CMaps() {
-  auto* pFontGlobals = CPDF_FontGlobals::GetInstance();
-  pFontGlobals->SetEmbeddedCharset(
-      CIDSET_JAPAN1,
-      pdfium::make_span(g_FXCMAP_Japan1_cmaps, g_FXCMAP_Japan1_cmaps_size));
-  pFontGlobals->SetEmbeddedToUnicode(CIDSET_JAPAN1,
-                                     g_FXCMAP_Japan1CID2Unicode_4);
-}
-
-void CPDF_ModuleMgr::LoadEmbeddedKorea1CMaps() {
-  auto* pFontGlobals = CPDF_FontGlobals::GetInstance();
-  pFontGlobals->SetEmbeddedCharset(
-      CIDSET_KOREA1,
-      pdfium::make_span(g_FXCMAP_Korea1_cmaps, g_FXCMAP_Korea1_cmaps_size));
-  pFontGlobals->SetEmbeddedToUnicode(CIDSET_KOREA1,
-                                     g_FXCMAP_Korea1CID2Unicode_2);
-}
diff --git a/core/fpdfapi/cpdf_modulemgr.h b/core/fpdfapi/cpdf_modulemgr.h
index 7bda93b..86fe988 100644
--- a/core/fpdfapi/cpdf_modulemgr.h
+++ b/core/fpdfapi/cpdf_modulemgr.h
@@ -43,11 +43,6 @@
   ~CPDF_ModuleMgr();
 
   void InitPageModule();
-  void LoadEmbeddedMaps();
-  void LoadEmbeddedGB1CMaps();
-  void LoadEmbeddedCNS1CMaps();
-  void LoadEmbeddedJapan1CMaps();
-  void LoadEmbeddedKorea1CMaps();
 
   std::unique_ptr<fpdfapi::UnsupportedInfoAdapter> m_pUnsupportInfoAdapter;
 };
diff --git a/core/fpdfapi/font/cpdf_fontglobals.cpp b/core/fpdfapi/font/cpdf_fontglobals.cpp
index e3b19e2..10b6c5e 100644
--- a/core/fpdfapi/font/cpdf_fontglobals.cpp
+++ b/core/fpdfapi/font/cpdf_fontglobals.cpp
@@ -6,6 +6,10 @@
 
 #include "core/fpdfapi/font/cpdf_fontglobals.h"
 
+#include "core/fpdfapi/cmaps/CNS1/cmaps_cns1.h"
+#include "core/fpdfapi/cmaps/GB1/cmaps_gb1.h"
+#include "core/fpdfapi/cmaps/Japan1/cmaps_japan1.h"
+#include "core/fpdfapi/cmaps/Korea1/cmaps_korea1.h"
 #include "core/fpdfapi/font/cfx_stockfontarray.h"
 #include "core/fpdfapi/parser/cpdf_document.h"
 #include "third_party/base/ptr_util.h"
@@ -43,6 +47,13 @@
 
 CPDF_FontGlobals::~CPDF_FontGlobals() = default;
 
+void CPDF_FontGlobals::LoadEmbeddedMaps() {
+  LoadEmbeddedGB1CMaps();
+  LoadEmbeddedCNS1CMaps();
+  LoadEmbeddedJapan1CMaps();
+  LoadEmbeddedKorea1CMaps();
+}
+
 RetainPtr<CPDF_Font> CPDF_FontGlobals::Find(
     CPDF_Document* pDoc,
     CFX_FontMapper::StandardFont index) {
@@ -64,3 +75,29 @@
 void CPDF_FontGlobals::Clear(CPDF_Document* pDoc) {
   m_StockMap.erase(pDoc);
 }
+
+void CPDF_FontGlobals::LoadEmbeddedGB1CMaps() {
+  SetEmbeddedCharset(CIDSET_GB1, pdfium::make_span(g_FXCMAP_GB1_cmaps,
+                                                   g_FXCMAP_GB1_cmaps_size));
+  SetEmbeddedToUnicode(CIDSET_GB1, g_FXCMAP_GB1CID2Unicode_5);
+}
+
+void CPDF_FontGlobals::LoadEmbeddedCNS1CMaps() {
+  SetEmbeddedCharset(CIDSET_CNS1, pdfium::make_span(g_FXCMAP_CNS1_cmaps,
+                                                    g_FXCMAP_CNS1_cmaps_size));
+  SetEmbeddedToUnicode(CIDSET_CNS1, g_FXCMAP_CNS1CID2Unicode_5);
+}
+
+void CPDF_FontGlobals::LoadEmbeddedJapan1CMaps() {
+  SetEmbeddedCharset(
+      CIDSET_JAPAN1,
+      pdfium::make_span(g_FXCMAP_Japan1_cmaps, g_FXCMAP_Japan1_cmaps_size));
+  SetEmbeddedToUnicode(CIDSET_JAPAN1, g_FXCMAP_Japan1CID2Unicode_4);
+}
+
+void CPDF_FontGlobals::LoadEmbeddedKorea1CMaps() {
+  SetEmbeddedCharset(
+      CIDSET_KOREA1,
+      pdfium::make_span(g_FXCMAP_Korea1_cmaps, g_FXCMAP_Korea1_cmaps_size));
+  SetEmbeddedToUnicode(CIDSET_KOREA1, g_FXCMAP_Korea1CID2Unicode_2);
+}
diff --git a/core/fpdfapi/font/cpdf_fontglobals.h b/core/fpdfapi/font/cpdf_fontglobals.h
index ff3449e..8ef9687 100644
--- a/core/fpdfapi/font/cpdf_fontglobals.h
+++ b/core/fpdfapi/font/cpdf_fontglobals.h
@@ -25,6 +25,9 @@
   static void Destroy();
   static CPDF_FontGlobals* GetInstance();
 
+  // Caller must load the maps before using font globals.
+  void LoadEmbeddedMaps();
+
   void Clear(CPDF_Document* pDoc);
   RetainPtr<CPDF_Font> Find(CPDF_Document* pDoc,
                             CFX_FontMapper::StandardFont index);
@@ -51,6 +54,11 @@
   CPDF_FontGlobals();
   ~CPDF_FontGlobals();
 
+  void LoadEmbeddedGB1CMaps();
+  void LoadEmbeddedCNS1CMaps();
+  void LoadEmbeddedJapan1CMaps();
+  void LoadEmbeddedKorea1CMaps();
+
   CPDF_CMapManager m_CMapManager;
   pdfium::span<const FXCMAP_CMap> m_EmbeddedCharsets[CIDSET_NUM_SETS];
   pdfium::span<const uint16_t> m_EmbeddedToUnicodes[CIDSET_NUM_SETS];