• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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