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"