1 // Copyright 2014 PDFium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef XFA_FXFA_CXFA_FFAPP_H_ 8 #define XFA_FXFA_CXFA_FFAPP_H_ 9 10 #include <memory> 11 #include <vector> 12 13 #include "core/fpdfapi/parser/cpdf_stream.h" 14 #include "core/fpdfapi/parser/cpdf_stream_acc.h" 15 #include "core/fxcrt/retain_ptr.h" 16 #include "core/fxcrt/unowned_ptr.h" 17 #include "xfa/fwl/cfwl_app.h" 18 #include "xfa/fxfa/fxfa.h" 19 20 class CFGAS_DefaultFontManager; 21 class CFGAS_FontMgr; 22 class CFWL_WidgetMgr; 23 class CPDF_Document; 24 class CXFA_FFDocHandler; 25 class CXFA_FontMgr; 26 class CXFA_FWLAdapterWidgetMgr; 27 class CXFA_FWLTheme; 28 class IFWL_AdapterTimerMgr; 29 30 class CXFA_FFApp { 31 public: 32 explicit CXFA_FFApp(IXFA_AppProvider* pProvider); 33 ~CXFA_FFApp(); 34 35 std::unique_ptr<CXFA_FFDoc> CreateDoc(IXFA_DocEnvironment* pDocEnvironment, 36 CPDF_Document* pPDFDoc); 37 void SetDefaultFontMgr(std::unique_ptr<CFGAS_DefaultFontManager> pFontMgr); 38 39 CXFA_FWLAdapterWidgetMgr* GetFWLAdapterWidgetMgr(); GetFWLWidgetMgr()40 CFWL_WidgetMgr* GetFWLWidgetMgr() const { return m_pFWLApp->GetWidgetMgr(); } 41 42 CFGAS_FontMgr* GetFDEFontMgr(); 43 CXFA_FWLTheme* GetFWLTheme(); 44 GetAppProvider()45 IXFA_AppProvider* GetAppProvider() const { return m_pProvider.Get(); } GetFWLApp()46 const CFWL_App* GetFWLApp() const { return m_pFWLApp.get(); } 47 IFWL_AdapterTimerMgr* GetTimerMgr() const; 48 CXFA_FontMgr* GetXFAFontMgr() const; 49 50 void ClearEventTargets(); 51 52 private: 53 UnownedPtr<IXFA_AppProvider> const m_pProvider; 54 55 // The fonts stored in the font manager may have been created by the default 56 // font manager. The GEFont::LoadFont call takes the manager as a param and 57 // stores it internally. When you destroy the GEFont it tries to unregister 58 // from the font manager and if the default font manager was destroyed first 59 // get get a use-after-free. The m_pFWLTheme can try to cleanup a GEFont 60 // when it frees, so make sure it gets cleaned up first. That requires 61 // m_pFWLApp to be cleaned up as well. 62 // 63 // TODO(dsinclair): The GEFont should have the FontMgr as the pointer instead 64 // of the DEFFontMgr so this goes away. Bug 561. 65 std::unique_ptr<CFGAS_FontMgr> m_pFDEFontMgr; 66 std::unique_ptr<CXFA_FontMgr> m_pFontMgr; 67 68 std::unique_ptr<CXFA_FWLAdapterWidgetMgr> m_pAdapterWidgetMgr; 69 70 // |m_pFWLApp| has to be released first, then |m_pFWLTheme| since the former 71 // may refers to theme manager and the latter refers to font manager. 72 std::unique_ptr<CXFA_FWLTheme> m_pFWLTheme; 73 std::unique_ptr<CFWL_App> m_pFWLApp; 74 }; 75 76 #endif // XFA_FXFA_CXFA_FFAPP_H_ 77