blob: d16e5fb32abec38bde2d7b8457baa38524cf5079 [file] [log] [blame]
K. Moon832a6942022-10-31 20:11:31 +00001// Copyright 2014 The PDFium Authors
Dan Sinclair1770c022016-03-14 14:14:16 -04002// 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
Dan Sinclair80c48782017-03-23 12:11:20 -04007#ifndef XFA_FXFA_CXFA_FFAPP_H_
8#define XFA_FXFA_CXFA_FFAPP_H_
Dan Sinclair1770c022016-03-14 14:14:16 -04009
Dan Sinclairaee0db02017-09-21 16:53:58 -040010#include "core/fxcrt/unowned_ptr.h"
Tom Sepez1e151c62021-11-22 23:46:09 +000011#include "core/fxcrt/widestring.h"
Tom Sepez0a9d9742020-09-01 21:40:52 +000012#include "fxjs/gc/heap.h"
13#include "v8/include/cppgc/garbage-collected.h"
14#include "v8/include/cppgc/member.h"
dsinclair447b1f32016-12-08 10:06:32 -080015#include "xfa/fwl/cfwl_app.h"
Dan Sinclair1770c022016-03-14 14:14:16 -040016
Lei Zhang6e59fb52018-01-18 19:03:58 +000017class CFWL_WidgetMgr;
Tom Sepezba617962021-06-08 23:21:19 +000018class CXFA_FFDoc;
Lei Zhang6e59fb52018-01-18 19:03:58 +000019class CXFA_FWLAdapterWidgetMgr;
20class CXFA_FWLTheme;
Tom Sepezba617962021-06-08 23:21:19 +000021class CXFA_FontMgr;
22class IFX_SeekableReadStream;
23
Tom Sepez327a0702021-10-15 19:38:55 +000024class CXFA_FFApp final : public cppgc::GarbageCollected<CXFA_FFApp>,
25 public CFWL_App::AdapterIface {
Dan Sinclair1770c022016-03-14 14:14:16 -040026 public:
Tom Sepezdc3718f2021-06-09 01:01:29 +000027 class CallbackIface {
28 public:
29 virtual ~CallbackIface() = default;
30
31 /**
32 * Returns the language of the running host application. Such as zh_CN
33 */
34 virtual WideString GetLanguage() = 0;
35
36 /**
37 * Returns the platform of the machine running the script. Such as WIN
38 */
39 virtual WideString GetPlatform() = 0;
40
41 /**
42 * Get application name, such as Phantom.
43 */
44 virtual WideString GetAppName() = 0;
45
46 /**
47 * Get application message box title.
48 */
49 virtual WideString GetAppTitle() const = 0;
50
51 /**
52 * Causes the system to play a sound.
53 * @param[in] dwType The system code for the appropriate sound.0 (Error)1
54 * (Warning)2 (Question)3 (Status)4 (Default)
55 */
56 virtual void Beep(uint32_t dwType) = 0;
57
58 /**
59 * Displays a message box.
60 * @param[in] wsMessage - Message string to display in box.
61 * @param[in] wsTitle - Title string for box.
62 * @param[in] dwIconType - Icon type, refer to XFA_MBICON.
63 * @param[in] dwButtonType - Button type, refer to XFA_MESSAGEBUTTON.
64 * @return A valid integer representing the value of the button pressed by
65 * the user, refer to XFA_ID.
66 */
67 virtual int32_t MsgBox(const WideString& wsMessage,
68 const WideString& wsTitle,
69 uint32_t dwIconType,
70 uint32_t dwButtonType) = 0;
71
72 /**
73 * Get a response from the user.
74 * @param[in] wsQuestion - Message string to display in box.
75 * @param[in] wsTitle - Title string for box.
76 * @param[in] wsDefaultAnswer - Initial contents for answer.
77 * @param[in] bMask - Mask the user input with asterisks when
78 * true,
79 * @return A string containing the user's response.
80 */
81 virtual WideString Response(const WideString& wsQuestion,
82 const WideString& wsTitle,
83 const WideString& wsDefaultAnswer,
84 bool bMask) = 0;
85
86 /**
87 * Download something from somewhere.
88 * @param[in] wsURL - http, ftp, such as
89 * "http://www.w3.org/TR/REC-xml-names/".
90 */
91 virtual RetainPtr<IFX_SeekableReadStream> DownloadURL(
92 const WideString& wsURL) = 0;
93
94 /**
95 * POST data to the given url.
96 * @param[in] wsURL the URL being uploaded.
97 * @param[in] wsData the data being uploaded.
98 * @param[in] wsContentType the content type of data including text/html,
99 * text/xml, text/plain, multipart/form-data,
100 * application/x-www-form-urlencoded,
101 * application/octet-stream, any valid MIME type.
102 * @param[in] wsEncode the encode of data including UTF-8, UTF-16,
103 * ISO8859-1, any recognized [IANA]character encoding
104 * @param[in] wsHeader any additional HTTP headers to be included in
105 * the post.
106 * @param[out] wsResponse decoded response from server.
107 * @return true Server permitted the post request, false otherwise.
108 */
109 virtual bool PostRequestURL(const WideString& wsURL,
110 const WideString& wsData,
111 const WideString& wsContentType,
112 const WideString& wsEncode,
113 const WideString& wsHeader,
114 WideString& wsResponse) = 0;
115
116 /**
117 * PUT data to the given url.
118 * @param[in] wsURL the URL being uploaded.
119 * @param[in] wsData the data being uploaded.
120 * @param[in] wsEncode the encode of data including UTF-8, UTF-16,
121 * ISO8859-1, any recognized [IANA]character encoding
122 * @return true Server permitted the post request, false otherwise.
123 */
124 virtual bool PutRequestURL(const WideString& wsURL,
125 const WideString& wsData,
126 const WideString& wsEncode) = 0;
127
128 virtual CFX_Timer::HandlerIface* GetTimerHandler() const = 0;
129 virtual cppgc::Heap* GetGCHeap() const = 0;
130 };
131
Tom Sepez0a9d9742020-09-01 21:40:52 +0000132 CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
Tom Sepez12899532019-05-30 00:06:33 +0000133 ~CXFA_FFApp() override;
Dan Sinclair1770c022016-03-14 14:14:16 -0400134
Tom Sepez12899532019-05-30 00:06:33 +0000135 // CFWL_App::AdapterIface:
Tom Sepez0a9d9742020-09-01 21:40:52 +0000136 void Trace(cppgc::Visitor* visitor) const override;
Tom Sepez12899532019-05-30 00:06:33 +0000137 CFWL_WidgetMgr::AdapterIface* GetWidgetMgrAdapter() override;
Tom Sepez8a5699d2020-10-13 21:23:53 +0000138 CFX_Timer::HandlerIface* GetTimerHandler() override;
Tom Sepeza9116722020-08-13 22:18:18 +0000139 IFWL_ThemeProvider* GetThemeProvider() override;
Tom Sepez66028762020-08-18 20:35:37 +0000140 cppgc::Heap* GetHeap() override;
Tom Sepez12899532019-05-30 00:06:33 +0000141
Tom Sepeza9116722020-08-13 22:18:18 +0000142 bool LoadFWLTheme(CXFA_FFDoc* doc);
Dan Sinclaira5eb9f02017-09-21 15:43:56 -0400143 CFWL_WidgetMgr* GetFWLWidgetMgr() const { return m_pFWLApp->GetWidgetMgr(); }
Tom Sepez0c3768e2022-10-27 23:41:46 +0000144 CallbackIface* GetAppProvider() const { return m_pProvider; }
Tom Sepez0a9d9742020-09-01 21:40:52 +0000145 CFWL_App* GetFWLApp() const { return m_pFWLApp; }
Tom Sepeza7edf062020-09-09 22:48:17 +0000146 CXFA_FontMgr* GetXFAFontMgr() const { return m_pXFAFontMgr; }
Dan Sinclair1770c022016-03-14 14:14:16 -0400147
Dan Sinclair80c48782017-03-23 12:11:20 -0400148 private:
Tom Sepezdc3718f2021-06-09 01:01:29 +0000149 explicit CXFA_FFApp(CallbackIface* pProvider);
Tom Sepez0a9d9742020-09-01 21:40:52 +0000150
Tom Sepezdc3718f2021-06-09 01:01:29 +0000151 UnownedPtr<CallbackIface> const m_pProvider;
Tom Sepeza7edf062020-09-09 22:48:17 +0000152 cppgc::Member<CXFA_FontMgr> m_pXFAFontMgr;
Tom Sepez0a9d9742020-09-01 21:40:52 +0000153 cppgc::Member<CXFA_FWLAdapterWidgetMgr> m_pAdapterWidgetMgr;
154 cppgc::Member<CXFA_FWLTheme> m_pFWLTheme;
155 cppgc::Member<CFWL_App> m_pFWLApp;
Dan Sinclair1770c022016-03-14 14:14:16 -0400156};
157
Dan Sinclair80c48782017-03-23 12:11:20 -0400158#endif // XFA_FXFA_CXFA_FFAPP_H_