Home | History | Annotate | Download | only in fpdfxfa
      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 FPDFSDK_FPDFXFA_CPDFXFA_CONTEXT_H_
      8 #define FPDFSDK_FPDFXFA_CPDFXFA_CONTEXT_H_
      9 
     10 #include <memory>
     11 #include <vector>
     12 
     13 #include "core/fxcrt/fx_system.h"
     14 #include "core/fxcrt/observable.h"
     15 #include "core/fxcrt/unowned_ptr.h"
     16 #include "fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h"
     17 #include "fpdfsdk/fpdfxfa/cpdfxfa_page.h"
     18 #include "xfa/fxfa/cxfa_ffdoc.h"
     19 
     20 class CJS_Runtime;
     21 class CPDFSDK_FormFillEnvironment;
     22 class CXFA_FFDocHandler;
     23 class IJS_EventContext;
     24 class IJS_Runtime;
     25 
     26 enum LoadStatus {
     27   FXFA_LOADSTATUS_PRELOAD = 0,
     28   FXFA_LOADSTATUS_LOADING,
     29   FXFA_LOADSTATUS_LOADED,
     30   FXFA_LOADSTATUS_CLOSING,
     31   FXFA_LOADSTATUS_CLOSED
     32 };
     33 
     34 class CPDFXFA_Context : public IXFA_AppProvider {
     35  public:
     36   explicit CPDFXFA_Context(std::unique_ptr<CPDF_Document> pPDFDoc);
     37   ~CPDFXFA_Context() override;
     38 
     39   bool LoadXFADoc();
     40   CPDF_Document* GetPDFDoc() { return m_pPDFDoc.get(); }
     41   CXFA_FFDoc* GetXFADoc() { return m_pXFADoc.get(); }
     42   CXFA_FFDocView* GetXFADocView() { return m_pXFADocView.Get(); }
     43   FormType GetFormType() const { return m_FormType; }
     44   bool ContainsXFAForm() const {
     45     return m_FormType == FormType::kXFAFull ||
     46            m_FormType == FormType::kXFAForeground;
     47   }
     48   v8::Isolate* GetJSERuntime() const;
     49   CXFA_FFApp* GetXFAApp() { return m_pXFAApp.get(); }
     50 
     51   CPDFSDK_FormFillEnvironment* GetFormFillEnv() const {
     52     return m_pFormFillEnv.Get();
     53   }
     54   void SetFormFillEnv(CPDFSDK_FormFillEnvironment* pFormFillEnv);
     55 
     56   int GetPageCount() const;
     57   void DeletePage(int page_index);
     58   RetainPtr<CPDFXFA_Page> GetXFAPage(int page_index);
     59   RetainPtr<CPDFXFA_Page> GetXFAPage(CXFA_FFPageView* pPage) const;
     60   void ClearChangeMark();
     61 
     62   // IFXA_AppProvider:
     63   WideString GetLanguage() override;
     64   WideString GetPlatform() override;
     65   WideString GetAppName() override;
     66   WideString GetAppTitle() const override;
     67 
     68   void Beep(uint32_t dwType) override;
     69   int32_t MsgBox(const WideString& wsMessage,
     70                  const WideString& wsTitle,
     71                  uint32_t dwIconType,
     72                  uint32_t dwButtonType) override;
     73   WideString Response(const WideString& wsQuestion,
     74                       const WideString& wsTitle,
     75                       const WideString& wsDefaultAnswer,
     76                       bool bMark) override;
     77   RetainPtr<IFX_SeekableReadStream> DownloadURL(
     78       const WideString& wsURL) override;
     79   bool PostRequestURL(const WideString& wsURL,
     80                       const WideString& wsData,
     81                       const WideString& wsContentType,
     82                       const WideString& wsEncode,
     83                       const WideString& wsHeader,
     84                       WideString& wsResponse) override;
     85   bool PutRequestURL(const WideString& wsURL,
     86                      const WideString& wsData,
     87                      const WideString& wsEncode) override;
     88 
     89   IFWL_AdapterTimerMgr* GetTimerMgr() override;
     90 
     91  protected:
     92   friend class CPDFXFA_DocEnvironment;
     93 
     94   int GetOriginalPageCount() const { return m_nPageCount; }
     95   void SetOriginalPageCount(int count) {
     96     m_nPageCount = count;
     97     m_XFAPageList.resize(count);
     98   }
     99 
    100   LoadStatus GetLoadStatus() const { return m_nLoadStatus; }
    101   std::vector<RetainPtr<CPDFXFA_Page>>* GetXFAPageList() {
    102     return &m_XFAPageList;
    103   }
    104 
    105  private:
    106   void CloseXFADoc();
    107 
    108   FormType m_FormType = FormType::kNone;
    109   std::unique_ptr<CPDF_Document> m_pPDFDoc;
    110   std::unique_ptr<CXFA_FFDoc> m_pXFADoc;
    111   Observable<CPDFSDK_FormFillEnvironment>::ObservedPtr m_pFormFillEnv;
    112   UnownedPtr<CXFA_FFDocView> m_pXFADocView;
    113   std::unique_ptr<CXFA_FFApp> m_pXFAApp;
    114   std::unique_ptr<CJS_Runtime> m_pRuntime;
    115   std::vector<RetainPtr<CPDFXFA_Page>> m_XFAPageList;
    116   LoadStatus m_nLoadStatus = FXFA_LOADSTATUS_PRELOAD;
    117   int m_nPageCount = 0;
    118 
    119   // Must be destroyed before |m_pFormFillEnv|.
    120   CPDFXFA_DocEnvironment m_DocEnv;
    121 };
    122 
    123 #endif  // FPDFSDK_FPDFXFA_CPDFXFA_CONTEXT_H_
    124