Make CPDF_PageModule a per-process singleton.
Allow removal of another circular include. Also remove some
stray includes in the process.
Change-Id: If725776b2ef790b8b4b97d3b2041fd82cfb061c9
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/55394
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 f4ea940..9ebdab7 100644
--- a/core/fpdfapi/BUILD.gn
+++ b/core/fpdfapi/BUILD.gn
@@ -28,7 +28,6 @@
allow_circular_includes_from = [
"page",
"parser",
- "render",
]
visibility = [ "../../*" ]
}
diff --git a/core/fpdfapi/cpdf_modulemgr.cpp b/core/fpdfapi/cpdf_modulemgr.cpp
index 7b9f8f6..ebe7758 100644
--- a/core/fpdfapi/cpdf_modulemgr.cpp
+++ b/core/fpdfapi/cpdf_modulemgr.cpp
@@ -26,13 +26,14 @@
ASSERT(!g_pDefaultMgr);
g_pDefaultMgr = new CPDF_ModuleMgr;
CCodec_ModuleMgr::Create();
- g_pDefaultMgr->InitPageModule();
+ CPDF_PageModule::Create();
g_pDefaultMgr->LoadEmbeddedMaps();
}
// static
void CPDF_ModuleMgr::Destroy() {
ASSERT(g_pDefaultMgr);
+ CPDF_PageModule::Destroy();
CCodec_ModuleMgr::Destroy();
delete g_pDefaultMgr;
g_pDefaultMgr = nullptr;
@@ -48,10 +49,6 @@
CPDF_ModuleMgr::~CPDF_ModuleMgr() = default;
-void CPDF_ModuleMgr::InitPageModule() {
- m_pPageModule = pdfium::MakeUnique<CPDF_PageModule>();
-}
-
void CPDF_ModuleMgr::LoadEmbeddedMaps() {
LoadEmbeddedGB1CMaps();
LoadEmbeddedCNS1CMaps();
diff --git a/core/fpdfapi/cpdf_modulemgr.h b/core/fpdfapi/cpdf_modulemgr.h
index f768d19..70eb6f0 100644
--- a/core/fpdfapi/cpdf_modulemgr.h
+++ b/core/fpdfapi/cpdf_modulemgr.h
@@ -10,8 +10,6 @@
#include <memory>
#include <utility>
-class CPDF_PageModule;
-
namespace fpdfapi {
class UnsupportedInfoAdapter {
@@ -41,8 +39,6 @@
return m_pUnsupportInfoAdapter.get();
}
- CPDF_PageModule* GetPageModule() const { return m_pPageModule.get(); }
-
private:
CPDF_ModuleMgr();
~CPDF_ModuleMgr();
@@ -54,7 +50,6 @@
void LoadEmbeddedJapan1CMaps();
void LoadEmbeddedKorea1CMaps();
- std::unique_ptr<CPDF_PageModule> m_pPageModule;
std::unique_ptr<fpdfapi::UnsupportedInfoAdapter> m_pUnsupportInfoAdapter;
};
diff --git a/core/fpdfapi/page/cpdf_colorspace.cpp b/core/fpdfapi/page/cpdf_colorspace.cpp
index a52a0a8..70bef78 100644
--- a/core/fpdfapi/page/cpdf_colorspace.cpp
+++ b/core/fpdfapi/page/cpdf_colorspace.cpp
@@ -12,7 +12,6 @@
#include <utility>
#include <vector>
-#include "core/fpdfapi/cpdf_modulemgr.h"
#include "core/fpdfapi/page/cpdf_devicecs.h"
#include "core/fpdfapi/page/cpdf_docpagedata.h"
#include "core/fpdfapi/page/cpdf_function.h"
@@ -432,7 +431,7 @@
// static
RetainPtr<CPDF_ColorSpace> CPDF_ColorSpace::GetStockCS(int family) {
- return CPDF_ModuleMgr::Get()->GetPageModule()->GetStockCS(family);
+ return CPDF_PageModule::GetInstance()->GetStockCS(family);
}
// static
diff --git a/core/fpdfapi/page/cpdf_pagemodule.cpp b/core/fpdfapi/page/cpdf_pagemodule.cpp
index 95d23baf..65aba70 100644
--- a/core/fpdfapi/page/cpdf_pagemodule.cpp
+++ b/core/fpdfapi/page/cpdf_pagemodule.cpp
@@ -11,6 +11,31 @@
#include "core/fpdfapi/page/cpdf_devicecs.h"
#include "core/fpdfapi/page/cpdf_patterncs.h"
+namespace {
+
+CPDF_PageModule* g_PageModule = nullptr;
+
+} // namespace
+
+// static
+void CPDF_PageModule::Create() {
+ ASSERT(!g_PageModule);
+ g_PageModule = new CPDF_PageModule();
+}
+
+// static
+void CPDF_PageModule::Destroy() {
+ ASSERT(g_PageModule);
+ delete g_PageModule;
+ g_PageModule = nullptr;
+}
+
+// static
+CPDF_PageModule* CPDF_PageModule::GetInstance() {
+ ASSERT(g_PageModule);
+ return g_PageModule;
+}
+
CPDF_PageModule::CPDF_PageModule()
: m_StockGrayCS(pdfium::MakeRetain<CPDF_DeviceCS>(PDFCS_DEVICEGRAY)),
m_StockRGBCS(pdfium::MakeRetain<CPDF_DeviceCS>(PDFCS_DEVICERGB)),
diff --git a/core/fpdfapi/page/cpdf_pagemodule.h b/core/fpdfapi/page/cpdf_pagemodule.h
index cd078ea..e7234b9 100644
--- a/core/fpdfapi/page/cpdf_pagemodule.h
+++ b/core/fpdfapi/page/cpdf_pagemodule.h
@@ -16,13 +16,18 @@
class CPDF_PageModule {
public:
- CPDF_PageModule();
- ~CPDF_PageModule();
+ // Per-process singleton managed by callers.
+ static void Create();
+ static void Destroy();
+ static CPDF_PageModule* GetInstance();
RetainPtr<CPDF_ColorSpace> GetStockCS(int family);
void ClearStockFont(CPDF_Document* pDoc);
private:
+ CPDF_PageModule();
+ ~CPDF_PageModule();
+
RetainPtr<CPDF_DeviceCS> m_StockGrayCS;
RetainPtr<CPDF_DeviceCS> m_StockRGBCS;
RetainPtr<CPDF_DeviceCS> m_StockCMYKCS;
diff --git a/core/fpdfapi/parser/cpdf_data_avail.cpp b/core/fpdfapi/parser/cpdf_data_avail.cpp
index 3ead07e..0ddaefe 100644
--- a/core/fpdfapi/parser/cpdf_data_avail.cpp
+++ b/core/fpdfapi/parser/cpdf_data_avail.cpp
@@ -10,7 +10,6 @@
#include <memory>
#include <utility>
-#include "core/fpdfapi/cpdf_modulemgr.h"
#include "core/fpdfapi/parser/cpdf_array.h"
#include "core/fpdfapi/parser/cpdf_cross_ref_avail.h"
#include "core/fpdfapi/parser/cpdf_dictionary.h"
diff --git a/core/fpdfapi/parser/cpdf_document.cpp b/core/fpdfapi/parser/cpdf_document.cpp
index 12149d0..9b8cc0b 100644
--- a/core/fpdfapi/parser/cpdf_document.cpp
+++ b/core/fpdfapi/parser/cpdf_document.cpp
@@ -12,7 +12,6 @@
#include <vector>
#include "build/build_config.h"
-#include "core/fpdfapi/cpdf_modulemgr.h"
#include "core/fpdfapi/page/cpdf_docpagedata.h"
#include "core/fpdfapi/page/cpdf_iccprofile.h"
#include "core/fpdfapi/page/cpdf_pagemodule.h"
@@ -895,5 +894,5 @@
: m_pDoc(pDoc) {}
CPDF_Document::StockFontClearer::~StockFontClearer() {
- CPDF_ModuleMgr::Get()->GetPageModule()->ClearStockFont(m_pDoc.Get());
+ CPDF_PageModule::GetInstance()->ClearStockFont(m_pDoc.Get());
}
diff --git a/core/fpdfapi/parser/fpdf_parser_decode.cpp b/core/fpdfapi/parser/fpdf_parser_decode.cpp
index 034f65d..9cf68d5 100644
--- a/core/fpdfapi/parser/fpdf_parser_decode.cpp
+++ b/core/fpdfapi/parser/fpdf_parser_decode.cpp
@@ -14,7 +14,6 @@
#include <vector>
#include "constants/stream_dict_common.h"
-#include "core/fpdfapi/cpdf_modulemgr.h"
#include "core/fpdfapi/parser/cpdf_array.h"
#include "core/fpdfapi/parser/cpdf_dictionary.h"
#include "core/fpdfapi/parser/fpdf_parser_utility.h"
diff --git a/core/fpdfapi/render/cpdf_dibbase.cpp b/core/fpdfapi/render/cpdf_dibbase.cpp
index 4a39067..72d7ad9 100644
--- a/core/fpdfapi/render/cpdf_dibbase.cpp
+++ b/core/fpdfapi/render/cpdf_dibbase.cpp
@@ -11,7 +11,6 @@
#include <utility>
#include <vector>
-#include "core/fpdfapi/cpdf_modulemgr.h"
#include "core/fpdfapi/page/cpdf_docpagedata.h"
#include "core/fpdfapi/page/cpdf_image.h"
#include "core/fpdfapi/page/cpdf_imageobject.h"