1 // Copyright 2014 The PDFium Authors 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 "core/fxcrt/unowned_ptr.h" 11 #include "core/fxcrt/widestring.h" 12 #include "fxjs/gc/heap.h" 13 #include "v8/include/cppgc/garbage-collected.h" 14 #include "v8/include/cppgc/member.h" 15 #include "xfa/fwl/cfwl_app.h" 16 17 class CXFA_FFDoc; 18 class CXFA_FWLAdapterWidgetMgr; 19 class CXFA_FontMgr; 20 class IFX_SeekableReadStream; 21 22 namespace pdfium { 23 class CXFA_FWLTheme; 24 } // namespace pdfium 25 26 class CXFA_FFApp final : public cppgc::GarbageCollected<CXFA_FFApp>, 27 public CFWL_App::AdapterIface { 28 public: 29 class CallbackIface { 30 public: 31 virtual ~CallbackIface() = default; 32 33 /** 34 * Returns the language of the running host application. Such as zh_CN 35 */ 36 virtual WideString GetLanguage() = 0; 37 38 /** 39 * Returns the platform of the machine running the script. Such as WIN 40 */ 41 virtual WideString GetPlatform() = 0; 42 43 /** 44 * Get application name, such as Phantom. 45 */ 46 virtual WideString GetAppName() = 0; 47 48 /** 49 * Get application message box title. 50 */ 51 virtual WideString GetAppTitle() const = 0; 52 53 /** 54 * Causes the system to play a sound. 55 * @param[in] dwType The system code for the appropriate sound.0 (Error)1 56 * (Warning)2 (Question)3 (Status)4 (Default) 57 */ 58 virtual void Beep(uint32_t dwType) = 0; 59 60 /** 61 * Displays a message box. 62 * @param[in] wsMessage - Message string to display in box. 63 * @param[in] wsTitle - Title string for box. 64 * @param[in] dwIconType - Icon type, refer to XFA_MBICON. 65 * @param[in] dwButtonType - Button type, refer to XFA_MESSAGEBUTTON. 66 * @return A valid integer representing the value of the button pressed by 67 * the user, refer to XFA_ID. 68 */ 69 virtual int32_t MsgBox(const WideString& wsMessage, 70 const WideString& wsTitle, 71 uint32_t dwIconType, 72 uint32_t dwButtonType) = 0; 73 74 /** 75 * Get a response from the user. 76 * @param[in] wsQuestion - Message string to display in box. 77 * @param[in] wsTitle - Title string for box. 78 * @param[in] wsDefaultAnswer - Initial contents for answer. 79 * @param[in] bMask - Mask the user input with asterisks when 80 * true, 81 * @return A string containing the user's response. 82 */ 83 virtual WideString Response(const WideString& wsQuestion, 84 const WideString& wsTitle, 85 const WideString& wsDefaultAnswer, 86 bool bMask) = 0; 87 88 /** 89 * Download something from somewhere. 90 * @param[in] wsURL - http, ftp, such as 91 * "http://www.w3.org/TR/REC-xml-names/". 92 */ 93 virtual RetainPtr<IFX_SeekableReadStream> DownloadURL( 94 const WideString& wsURL) = 0; 95 96 /** 97 * POST data to the given url. 98 * @param[in] wsURL the URL being uploaded. 99 * @param[in] wsData the data being uploaded. 100 * @param[in] wsContentType the content type of data including text/html, 101 * text/xml, text/plain, multipart/form-data, 102 * application/x-www-form-urlencoded, 103 * application/octet-stream, any valid MIME type. 104 * @param[in] wsEncode the encode of data including UTF-8, UTF-16, 105 * ISO8859-1, any recognized [IANA]character encoding 106 * @param[in] wsHeader any additional HTTP headers to be included in 107 * the post. 108 * @param[out] wsResponse decoded response from server. 109 * @return true Server permitted the post request, false otherwise. 110 */ 111 virtual bool PostRequestURL(const WideString& wsURL, 112 const WideString& wsData, 113 const WideString& wsContentType, 114 const WideString& wsEncode, 115 const WideString& wsHeader, 116 WideString& wsResponse) = 0; 117 118 /** 119 * PUT data to the given url. 120 * @param[in] wsURL the URL being uploaded. 121 * @param[in] wsData the data being uploaded. 122 * @param[in] wsEncode the encode of data including UTF-8, UTF-16, 123 * ISO8859-1, any recognized [IANA]character encoding 124 * @return true Server permitted the post request, false otherwise. 125 */ 126 virtual bool PutRequestURL(const WideString& wsURL, 127 const WideString& wsData, 128 const WideString& wsEncode) = 0; 129 130 virtual CFX_Timer::HandlerIface* GetTimerHandler() const = 0; 131 virtual cppgc::Heap* GetGCHeap() const = 0; 132 }; 133 134 CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED; 135 ~CXFA_FFApp() override; 136 137 // CFWL_App::AdapterIface: 138 void Trace(cppgc::Visitor* visitor) const override; 139 CFWL_WidgetMgr::AdapterIface* GetWidgetMgrAdapter() override; 140 CFX_Timer::HandlerIface* GetTimerHandler() override; 141 pdfium::IFWL_ThemeProvider* GetThemeProvider() override; 142 cppgc::Heap* GetHeap() override; 143 144 bool LoadFWLTheme(CXFA_FFDoc* doc); GetFWLWidgetMgr()145 CFWL_WidgetMgr* GetFWLWidgetMgr() const { return m_pFWLApp->GetWidgetMgr(); } GetAppProvider()146 CallbackIface* GetAppProvider() const { return m_pProvider; } GetFWLApp()147 CFWL_App* GetFWLApp() const { return m_pFWLApp; } GetXFAFontMgr()148 CXFA_FontMgr* GetXFAFontMgr() const { return m_pXFAFontMgr; } 149 150 private: 151 explicit CXFA_FFApp(CallbackIface* pProvider); 152 153 UnownedPtr<CallbackIface> const m_pProvider; 154 cppgc::Member<CXFA_FontMgr> m_pXFAFontMgr; 155 cppgc::Member<CXFA_FWLAdapterWidgetMgr> m_pAdapterWidgetMgr; 156 cppgc::Member<pdfium::CXFA_FWLTheme> m_pFWLTheme; 157 cppgc::Member<CFWL_App> m_pFWLApp; 158 }; 159 160 #endif // XFA_FXFA_CXFA_FFAPP_H_ 161