Make CPDF_PageModuleDef and CPDF_RenderModuleDef pure virtual.

Get rid of the dummy implementations, which are never used when
the modules have been initialized.

R=tsepez@chromium.org

Review URL: https://codereview.chromium.org/1177383003.
diff --git a/core/include/fpdfapi/fpdf_module.h b/core/include/fpdfapi/fpdf_module.h
index 65e4117..5877e11 100644
--- a/core/include/fpdfapi/fpdf_module.h
+++ b/core/include/fpdfapi/fpdf_module.h
@@ -7,6 +7,7 @@
 #ifndef CORE_INCLUDE_FPDFAPI_FPDF_MODULE_H_
 #define CORE_INCLUDE_FPDFAPI_FPDF_MODULE_H_
 
+#include "../../../third_party/base/nonstd_unique_ptr.h"
 #include "../fxcrt/fx_coordinates.h"
 #include "../fxcrt/fx_system.h"
 
@@ -21,13 +22,10 @@
 class CPDF_Document;
 class CPDF_FontGlobals;
 class CPDF_Image;
-class CPDF_ModuleMgr;
 class CPDF_Page;
-class CPDF_PageModuleDef;
 class CPDF_PageObjects;
 class CPDF_PageRenderCache;
 class CPDF_RenderConfig;
-class CPDF_RenderModuleDef;
 class CPDF_RenderOptions;
 class CPDF_SecurityHandler;
 class CPDF_Stream;
@@ -38,162 +36,113 @@
 class ICodec_JpegModule;
 class ICodec_JpxModule;
 class IPDF_FontMapper;
-
-#define ADDIN_NAME_CJK			"Eastern Asian Language Support"
-#define ADDIN_NAME_DECODER		"JPEG2000 and JBIG2 Image Decoders"
+class IPDF_PageModule;
+class IPDF_RenderModule;
 
 class CPDF_ModuleMgr
 {
 public:
+    static CPDF_ModuleMgr* Get();
+    static void Create();
+    static void Destroy();
+    static const int kFileBufSize = 512;
 
-    static void	Create();
-
-    static CPDF_ModuleMgr*	Get();
-
-    static void	Destroy();
-
-
-
-    void		SetCodecModule(CCodec_ModuleMgr* pModule)
+    void SetCodecModule(CCodec_ModuleMgr* pModule)
     {
         m_pCodecModule = pModule;
     }
-    CCodec_ModuleMgr*		GetCodecModule()
+    CCodec_ModuleMgr* GetCodecModule()
     {
         return m_pCodecModule;
     }
 
-    void		InitPageModule();
+    void InitPageModule();
 
-    void		InitRenderModule();
+    void InitRenderModule();
 
-    void		SetDownloadCallback(FX_BOOL (*callback)(const FX_CHAR* module_name));
+    void SetDownloadCallback(FX_BOOL (*callback)(const FX_CHAR* module_name));
 
-    FX_BOOL		DownloadModule(const FX_CHAR* module_name);
+    FX_BOOL DownloadModule(const FX_CHAR* module_name);
 
-    void		NotifyModuleAvailable(const FX_CHAR* module_name);
+    void NotifyModuleAvailable(const FX_CHAR* module_name);
 
-
-
-    CPDF_RenderModuleDef*	GetRenderModule() const
+    IPDF_RenderModule* GetRenderModule() const
     {
-        return m_pRenderModule;
+        return m_pRenderModule.get();
     }
 
-    CPDF_PageModuleDef*		GetPageModule() const
+    IPDF_PageModule* GetPageModule() const
     {
-        return m_pPageModule;
+        return m_pPageModule.get();
     }
 
+    void LoadEmbeddedGB1CMaps();
+    void LoadEmbeddedCNS1CMaps();
+    void LoadEmbeddedJapan1CMaps();
+    void LoadEmbeddedKorea1CMaps();
 
+    ICodec_FaxModule* GetFaxModule();
+    ICodec_JpegModule* GetJpegModule();
+    ICodec_JpxModule* GetJpxModule();
+    ICodec_Jbig2Module* GetJbig2Module();
+    ICodec_IccModule* GetIccModule();
+    ICodec_FlateModule* GetFlateModule();
 
+    void RegisterSecurityHandler(
+        const FX_CHAR* name,
+        CPDF_SecurityHandler* (*CreateHandler)(void* param),
+        void* param);
 
-    void					LoadEmbeddedGB1CMaps();
+    CPDF_SecurityHandler* CreateSecurityHandler(const FX_CHAR* name);
 
-    void					LoadEmbeddedCNS1CMaps();
+    void SetPrivateData(void* module_id,
+                        void* pData,
+                        PD_CALLBACK_FREEDATA callback);
 
-    void					LoadEmbeddedJapan1CMaps();
+    void* GetPrivateData(void* module_id);
 
-    void					LoadEmbeddedKorea1CMaps();
-
-    ICodec_FaxModule*		GetFaxModule();
-    ICodec_JpegModule*		GetJpegModule();
-    ICodec_JpxModule*		GetJpxModule();
-    ICodec_Jbig2Module*		GetJbig2Module();
-    ICodec_IccModule*		GetIccModule();
-    ICodec_FlateModule*		GetFlateModule();
-
-    void					RegisterSecurityHandler(const FX_CHAR* name, CPDF_SecurityHandler * (*CreateHandler)(void* param), void* param);
-
-    CPDF_SecurityHandler*	CreateSecurityHandler(const FX_CHAR* name);
-
-    void					SetPrivateData(void* module_id, void* pData, PD_CALLBACK_FREEDATA callback);
-
-    void*				GetPrivateData(void* module_id);
-
-    int						m_FileBufSize;
-protected:
-
+private:
     CPDF_ModuleMgr();
-
     ~CPDF_ModuleMgr();
-    void					Initialize();
 
-    void					InitModules();
+    CCodec_ModuleMgr* m_pCodecModule;
 
-
-
-    CCodec_ModuleMgr*		m_pCodecModule;
-
-    CPDF_RenderModuleDef*	m_pRenderModule;
-
-    CPDF_PageModuleDef*		m_pPageModule;
-
+    nonstd::unique_ptr<IPDF_RenderModule> m_pRenderModule;
+    nonstd::unique_ptr<IPDF_PageModule> m_pPageModule;
 
     FX_BOOL (*m_pDownloadCallback)(const FX_CHAR* module_name);
 
-    CFX_MapByteStringToPtr	m_SecurityHandlerMap;
+    CFX_MapByteStringToPtr m_SecurityHandlerMap;
 
-    CFX_PrivateData			m_privateData;
+    CFX_PrivateData m_privateData;
 };
-class CPDF_PageModuleDef
+
+class IPDF_PageModule
 {
 public:
-    virtual ~CPDF_PageModuleDef() {}
+    virtual ~IPDF_PageModule() {}
 
-    virtual CPDF_DocPageData*	CreateDocData(CPDF_Document* pDoc)
-    {
-        return NULL;
-    }
-
-    virtual void				ReleaseDoc(CPDF_Document*) {}
-    virtual void				ClearDoc(CPDF_Document*) {}
-
-    virtual CPDF_FontGlobals*	GetFontGlobals()
-    {
-        return NULL;
-    }
-
-    virtual void				ClearStockFont(CPDF_Document* pDoc) {}
-
-    virtual void				NotifyCJKAvailable() {}
-
-    virtual CPDF_ColorSpace*	GetStockCS(int family)
-    {
-        return NULL;
-    }
+    virtual CPDF_DocPageData* CreateDocData(CPDF_Document* pDoc) = 0;
+    virtual void ReleaseDoc(CPDF_Document*) = 0;
+    virtual void ClearDoc(CPDF_Document*) = 0;
+    virtual CPDF_FontGlobals* GetFontGlobals() = 0;
+    virtual void ClearStockFont(CPDF_Document* pDoc) = 0;
+    virtual void NotifyCJKAvailable() = 0;
+    virtual CPDF_ColorSpace* GetStockCS(int family) = 0;
 };
-class CPDF_RenderModuleDef
+
+class IPDF_RenderModule
 {
 public:
-    virtual ~CPDF_RenderModuleDef() {}
+    virtual ~IPDF_RenderModule() {}
 
-    virtual CPDF_DocRenderData*	CreateDocData(CPDF_Document* pDoc)
-    {
-        return NULL;
-    }
-
-    virtual void	DestroyDocData(CPDF_DocRenderData*) {}
-    virtual void	ClearDocData(CPDF_DocRenderData*) {}
-
-    virtual CPDF_DocRenderData* GetRenderData()
-    {
-        return NULL;
-    }
-
-    virtual CPDF_PageRenderCache*	CreatePageCache(CPDF_Page* pPage)
-    {
-        return NULL;
-    }
-
-    virtual void	DestroyPageCache(CPDF_PageRenderCache*) {}
-
-    virtual void	NotifyDecoderAvailable() {}
-
-    virtual CPDF_RenderConfig* GetConfig()
-    {
-        return NULL;
-    }
+    virtual CPDF_DocRenderData* CreateDocData(CPDF_Document* pDoc) = 0;
+    virtual void DestroyDocData(CPDF_DocRenderData*) = 0;
+    virtual void ClearDocData(CPDF_DocRenderData*) = 0;
+    virtual CPDF_DocRenderData* GetRenderData() = 0;
+    virtual CPDF_PageRenderCache* CreatePageCache(CPDF_Page* pPage) = 0;
+    virtual void DestroyPageCache(CPDF_PageRenderCache*)  = 0;
+    virtual CPDF_RenderConfig* GetConfig() = 0;
 };
 
 #endif  // CORE_INCLUDE_FPDFAPI_FPDF_MODULE_H_
diff --git a/core/src/fpdfapi/fpdf_basic_module.cpp b/core/src/fpdfapi/fpdf_basic_module.cpp
index 62be616..03cfd66 100644
--- a/core/src/fpdfapi/fpdf_basic_module.cpp
+++ b/core/src/fpdfapi/fpdf_basic_module.cpp
@@ -6,50 +6,44 @@
 
 #include "../../include/fxcodec/fx_codec.h"
 #include "../../include/fpdfapi/fpdf_module.h"
-static CPDF_ModuleMgr*	g_FPDFAPI_pDefaultMgr = NULL;
+
+namespace {
+
+CPDF_ModuleMgr* g_FPDFAPI_pDefaultMgr = nullptr;
+
+const char kAddinNameCJK[] = "Eastern Asian Language Support";
+
+}  // namespace
+
+// static
 CPDF_ModuleMgr* CPDF_ModuleMgr::Get()
 {
     return g_FPDFAPI_pDefaultMgr;
 }
+
+// static
 void CPDF_ModuleMgr::Create()
 {
+    ASSERT(!g_FPDFAPI_pDefaultMgr);
     g_FPDFAPI_pDefaultMgr = new CPDF_ModuleMgr;
-    g_FPDFAPI_pDefaultMgr->Initialize();
 }
+
+// static
 void CPDF_ModuleMgr::Destroy()
 {
-    if (g_FPDFAPI_pDefaultMgr) {
-        delete g_FPDFAPI_pDefaultMgr;
-    }
-    g_FPDFAPI_pDefaultMgr = NULL;
+    delete g_FPDFAPI_pDefaultMgr;
+    g_FPDFAPI_pDefaultMgr = nullptr;
 }
+
 CPDF_ModuleMgr::CPDF_ModuleMgr()
+    : m_pCodecModule(nullptr)
 {
-    m_pCodecModule = NULL;
-    m_pPageModule = NULL;
-    m_pRenderModule = NULL;
-    m_FileBufSize = 512;
 }
-void CPDF_ModuleMgr::Initialize()
-{
-    InitModules();
-    m_FileBufSize = 512;
-}
-void CPDF_ModuleMgr::InitModules()
-{
-    m_pCodecModule = NULL;
-    m_pPageModule = new CPDF_PageModuleDef;
-    m_pRenderModule = new CPDF_RenderModuleDef;
-}
+
 CPDF_ModuleMgr::~CPDF_ModuleMgr()
 {
-    if (m_pPageModule) {
-        delete m_pPageModule;
-    }
-    if (m_pRenderModule) {
-        delete m_pRenderModule;
-    }
 }
+
 void CPDF_ModuleMgr::SetDownloadCallback(FX_BOOL (*callback)(const FX_CHAR* module_name))
 {
     m_pDownloadCallback = callback;
@@ -63,10 +57,8 @@
 }
 void CPDF_ModuleMgr::NotifyModuleAvailable(const FX_CHAR* module_name)
 {
-    if (FXSYS_strcmp(module_name, ADDIN_NAME_CJK) == 0) {
+    if (FXSYS_strcmp(module_name, kAddinNameCJK) == 0) {
         m_pPageModule->NotifyCJKAvailable();
-    } else if (FXSYS_strcmp(module_name, ADDIN_NAME_DECODER) == 0) {
-        m_pRenderModule->NotifyDecoderAvailable();
     }
 }
 void CPDF_ModuleMgr::RegisterSecurityHandler(const FX_CHAR* filter, CPDF_SecurityHandler * (*CreateHandler)(void* param), void* param)
diff --git a/core/src/fpdfapi/fpdf_page/fpdf_page.cpp b/core/src/fpdfapi/fpdf_page/fpdf_page.cpp
index 984baed..97b2857 100644
--- a/core/src/fpdfapi/fpdf_page/fpdf_page.cpp
+++ b/core/src/fpdfapi/fpdf_page/fpdf_page.cpp
@@ -898,7 +898,7 @@
 CPDF_Page::~CPDF_Page()
 {
     if (m_pPageRender) {
-        CPDF_RenderModuleDef* pModule = CPDF_ModuleMgr::Get()->GetRenderModule();
+        IPDF_RenderModule* pModule = CPDF_ModuleMgr::Get()->GetRenderModule();
         pModule->DestroyPageCache(m_pPageRender);
     }
 }
diff --git a/core/src/fpdfapi/fpdf_page/fpdf_page_doc.cpp b/core/src/fpdfapi/fpdf_page/fpdf_page_doc.cpp
index 0c2a773..13d870d 100644
--- a/core/src/fpdfapi/fpdf_page/fpdf_page_doc.cpp
+++ b/core/src/fpdfapi/fpdf_page/fpdf_page_doc.cpp
@@ -10,38 +10,45 @@
 #include "../fpdf_font/font_int.h"
 #include "pageint.h"
 
-class CPDF_PageModule : public CPDF_PageModuleDef
+class CPDF_PageModule : public IPDF_PageModule
 {
 public:
-    CPDF_PageModule() : m_StockGrayCS(PDFCS_DEVICEGRAY), m_StockRGBCS(PDFCS_DEVICERGB),
-        m_StockCMYKCS(PDFCS_DEVICECMYK) {}
-    virtual ~CPDF_PageModule() {}
-    virtual FX_BOOL Installed()
-    {
-        return TRUE;
-    }
-    virtual CPDF_DocPageData* CreateDocData(CPDF_Document* pDoc)
+    CPDF_PageModule()
+        : m_StockGrayCS(PDFCS_DEVICEGRAY),
+          m_StockRGBCS(PDFCS_DEVICERGB),
+          m_StockCMYKCS(PDFCS_DEVICECMYK) {}
+
+private:
+    ~CPDF_PageModule() override {}
+
+    CPDF_DocPageData* CreateDocData(CPDF_Document* pDoc) override
     {
         return new CPDF_DocPageData(pDoc);
     }
-    virtual void ReleaseDoc(CPDF_Document* pDoc);
-    virtual void ClearDoc(CPDF_Document* pDoc);
-    virtual CPDF_FontGlobals* GetFontGlobals()
+
+    void ReleaseDoc(CPDF_Document* pDoc) override;
+    void ClearDoc(CPDF_Document* pDoc) override;
+
+    CPDF_FontGlobals* GetFontGlobals() override
     {
         return &m_FontGlobals;
     }
-    virtual void ClearStockFont(CPDF_Document* pDoc)
+
+    void ClearStockFont(CPDF_Document* pDoc) override
     {
         m_FontGlobals.Clear(pDoc);
     }
-    virtual CPDF_ColorSpace* GetStockCS(int family);
-    virtual void NotifyCJKAvailable();
+
+    CPDF_ColorSpace* GetStockCS(int family) override;
+    void NotifyCJKAvailable() override;
+
     CPDF_FontGlobals m_FontGlobals;
     CPDF_DeviceCS m_StockGrayCS;
     CPDF_DeviceCS m_StockRGBCS;
     CPDF_DeviceCS m_StockCMYKCS;
     CPDF_PatternCS m_StockPatternCS;
 };
+
 CPDF_ColorSpace* CPDF_PageModule::GetStockCS(int family)
 {
     if (family == PDFCS_DEVICEGRAY) {
@@ -58,11 +65,12 @@
     }
     return NULL;
 }
+
 void CPDF_ModuleMgr::InitPageModule()
 {
-    delete m_pPageModule;
-    m_pPageModule = new CPDF_PageModule;
+    m_pPageModule.reset(new CPDF_PageModule);
 }
+
 void CPDF_PageModule::ReleaseDoc(CPDF_Document* pDoc)
 {
     delete pDoc->GetPageData();
diff --git a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
index 3caef06..56df7f3 100644
--- a/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
+++ b/core/src/fpdfapi/fpdf_parser/fpdf_parser_parser.cpp
@@ -1686,7 +1686,7 @@
     m_pFileAccess = NULL;
     m_pCryptoHandler = NULL;
     m_pFileBuf = NULL;
-    m_BufSize = CPDF_ModuleMgr::Get()->m_FileBufSize;
+    m_BufSize = CPDF_ModuleMgr::kFileBufSize;
     m_pFileBuf = NULL;
     m_MetadataObjnum = 0;
     m_dwWordPos = 0;
diff --git a/core/src/fpdfapi/fpdf_render/fpdf_render.cpp b/core/src/fpdfapi/fpdf_render/fpdf_render.cpp
index 608e124..06c9ea6 100644
--- a/core/src/fpdfapi/fpdf_render/fpdf_render.cpp
+++ b/core/src/fpdfapi/fpdf_render/fpdf_render.cpp
@@ -78,34 +78,40 @@
     if (m_Type3FaceMap.Lookup(pFont, pCache))
         pCache->RemoveRef();
 }
-class CPDF_RenderModule : public CPDF_RenderModuleDef
+
+class CPDF_RenderModule : public IPDF_RenderModule
 {
 public:
-    virtual ~CPDF_RenderModule() {}
-    virtual FX_BOOL	Installed()
-    {
-        return TRUE;
-    }
-    virtual CPDF_DocRenderData*	CreateDocData(CPDF_Document* pDoc);
-    virtual void	DestroyDocData(CPDF_DocRenderData* p);
-    virtual void	ClearDocData(CPDF_DocRenderData* p);
-    virtual CPDF_DocRenderData* GetRenderData()
+   CPDF_RenderModule() {}
+
+private:
+    ~CPDF_RenderModule() override {}
+
+    CPDF_DocRenderData* CreateDocData(CPDF_Document* pDoc) override;
+    void DestroyDocData(CPDF_DocRenderData* p) override;
+    void ClearDocData(CPDF_DocRenderData* p) override;
+
+    CPDF_DocRenderData* GetRenderData() override
     {
         return &m_RenderData;
     }
-    virtual CPDF_PageRenderCache*	CreatePageCache(CPDF_Page* pPage)
+
+    CPDF_PageRenderCache* CreatePageCache(CPDF_Page* pPage) override
     {
         return new CPDF_PageRenderCache(pPage);
     }
-    virtual void	DestroyPageCache(CPDF_PageRenderCache* pCache);
-    virtual CPDF_RenderConfig*	GetConfig()
+
+    void DestroyPageCache(CPDF_PageRenderCache* pCache) override;
+
+    CPDF_RenderConfig* GetConfig() override
     {
         return &m_RenderConfig;
     }
-private:
-    CPDF_DocRenderData	m_RenderData;
-    CPDF_RenderConfig	m_RenderConfig;
+
+    CPDF_DocRenderData m_RenderData;
+    CPDF_RenderConfig m_RenderConfig;
 };
+
 CPDF_DocRenderData*	CPDF_RenderModule::CreateDocData(CPDF_Document* pDoc)
 {
     CPDF_DocRenderData* pData = new CPDF_DocRenderData(pDoc);
@@ -126,11 +132,12 @@
 {
     delete pCache;
 }
+
 void CPDF_ModuleMgr::InitRenderModule()
 {
-    delete m_pRenderModule;
-    m_pRenderModule = new CPDF_RenderModule;
+    m_pRenderModule.reset(new CPDF_RenderModule);
 }
+
 CPDF_RenderOptions::CPDF_RenderOptions()
     : m_ColorMode(RENDER_COLOR_NORMAL)
     , m_Flags(RENDER_CLEARTYPE)