OLD | NEW |
---|---|
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "fpdfsdk/fpdfxfa/cpdfxfa_app.h" | 7 #include "fpdfsdk/fpdfxfa/cpdfxfa_app.h" |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 | 10 |
11 #include "fpdfsdk/cpdfsdk_formfillenvironment.h" | 11 #include "fpdfsdk/cpdfsdk_formfillenvironment.h" |
12 #include "fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.h" | 12 #include "fpdfsdk/fpdfxfa/cxfa_fwladaptertimermgr.h" |
13 #include "fpdfsdk/fsdk_define.h" | 13 #include "fpdfsdk/fsdk_define.h" |
14 #include "third_party/base/ptr_util.h" | 14 #include "fpdfsdk/javascript/cjs_runtime.h" |
15 #include "xfa/fxbarcode/BC_Library.h" | 15 #include "fxjs/fxjs_v8.h" |
16 #include "xfa/fxfa/xfa_ffapp.h" | 16 #include "xfa/fxfa/xfa_ffapp.h" |
17 #include "xfa/fxfa/xfa_fontmgr.h" | 17 #include "xfa/fxfa/xfa_fontmgr.h" |
18 | 18 |
19 namespace { | 19 CPDFXFA_App::CPDFXFA_App() { |
20 | 20 m_pXFAApp = pdfium::MakeUnique<CXFA_FFApp>(this); |
21 CPDFXFA_App* g_pApp = nullptr; | 21 m_pXFAApp->SetDefaultFontMgr(pdfium::MakeUnique<CXFA_DefFontMgr>()); |
22 | |
23 } // namespace | |
24 | |
25 CPDFXFA_App* CPDFXFA_App::GetInstance() { | |
26 if (!g_pApp) { | |
27 g_pApp = new CPDFXFA_App(); | |
28 } | |
29 return g_pApp; | |
30 } | 22 } |
31 | 23 |
32 void CPDFXFA_App::ReleaseInstance() { | 24 CPDFXFA_App::~CPDFXFA_App() {} |
33 delete g_pApp; | 25 |
34 g_pApp = nullptr; | 26 v8::Isolate* CPDFXFA_App::GetJSERuntime() const { |
27 return m_pRuntime ? m_pRuntime->GetIsolate() : nullptr; | |
35 } | 28 } |
36 | 29 |
37 CPDFXFA_App::CPDFXFA_App() | 30 void CPDFXFA_App::SetFormFillEnv(CPDFSDK_FormFillEnvironment* pFormFillEnv) { |
38 : m_bJavaScriptInitialized(FALSE), m_pIsolate(nullptr) { | 31 m_pFormFillEnv = pFormFillEnv; |
39 m_pFormFillEnvList.RemoveAll(); | 32 if (pFormFillEnv) |
40 } | 33 m_pRuntime = pdfium::MakeUnique<CJS_Runtime>(pFormFillEnv); |
Tom Sepez
2016/10/20 17:05:59
Is this a separate runtime than the one that will
dsinclair
2016/10/31 15:07:57
It was. Removed now and we use the FF environment
| |
41 | |
42 CPDFXFA_App::~CPDFXFA_App() { | |
43 FXJSE_Runtime_Release(m_pIsolate); | |
44 m_pIsolate = nullptr; | |
45 | |
46 FXJSE_Finalize(); | |
47 BC_Library_Destory(); | |
48 } | |
49 | |
50 FX_BOOL CPDFXFA_App::Initialize(v8::Isolate* pIsolate) { | |
51 BC_Library_Init(); | |
52 FXJSE_Initialize(); | |
53 | |
54 m_pIsolate = pIsolate ? pIsolate : FXJSE_Runtime_Create_Own(); | |
55 if (!m_pIsolate) | |
56 return FALSE; | |
57 | |
58 m_pXFAApp = pdfium::MakeUnique<CXFA_FFApp>(this); | |
59 m_pXFAApp->SetDefaultFontMgr( | |
60 std::unique_ptr<CXFA_DefFontMgr>(new CXFA_DefFontMgr)); | |
61 | |
62 return TRUE; | |
63 } | |
64 | |
65 FX_BOOL CPDFXFA_App::AddFormFillEnv(CPDFSDK_FormFillEnvironment* pFormFillEnv) { | |
66 if (!pFormFillEnv) | |
67 return FALSE; | |
68 | |
69 m_pFormFillEnvList.Add(pFormFillEnv); | |
70 return TRUE; | |
71 } | |
72 | |
73 FX_BOOL CPDFXFA_App::RemoveFormFillEnv( | |
74 CPDFSDK_FormFillEnvironment* pFormFillEnv) { | |
75 if (!pFormFillEnv) | |
76 return FALSE; | |
77 | |
78 int nFind = m_pFormFillEnvList.Find(pFormFillEnv); | |
79 if (nFind != -1) { | |
80 m_pFormFillEnvList.RemoveAt(nFind); | |
81 return TRUE; | |
82 } | |
83 | |
84 return FALSE; | |
85 } | 34 } |
86 | 35 |
87 void CPDFXFA_App::GetAppName(CFX_WideString& wsName) { | 36 void CPDFXFA_App::GetAppName(CFX_WideString& wsName) { |
88 CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pFormFillEnvList.GetAt(0); | 37 if (m_pFormFillEnv) |
89 if (pFormFillEnv) | 38 wsName = m_pFormFillEnv->FFI_GetAppName(); |
90 wsName = pFormFillEnv->FFI_GetAppName(); | |
91 } | 39 } |
92 | 40 |
93 void CPDFXFA_App::GetLanguage(CFX_WideString& wsLanguage) { | 41 void CPDFXFA_App::GetLanguage(CFX_WideString& wsLanguage) { |
94 CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pFormFillEnvList.GetAt(0); | 42 if (m_pFormFillEnv) |
95 if (pFormFillEnv) | 43 wsLanguage = m_pFormFillEnv->GetLanguage(); |
96 wsLanguage = pFormFillEnv->GetLanguage(); | |
97 } | 44 } |
98 | 45 |
99 void CPDFXFA_App::GetPlatform(CFX_WideString& wsPlatform) { | 46 void CPDFXFA_App::GetPlatform(CFX_WideString& wsPlatform) { |
100 CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pFormFillEnvList.GetAt(0); | 47 if (m_pFormFillEnv) { |
101 if (pFormFillEnv) { | 48 wsPlatform = m_pFormFillEnv->GetPlatform(); |
102 wsPlatform = pFormFillEnv->GetPlatform(); | |
103 } | 49 } |
104 } | 50 } |
105 | 51 |
106 void CPDFXFA_App::Beep(uint32_t dwType) { | 52 void CPDFXFA_App::Beep(uint32_t dwType) { |
107 CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pFormFillEnvList.GetAt(0); | 53 if (m_pFormFillEnv) |
108 if (pFormFillEnv) | 54 m_pFormFillEnv->JS_appBeep(dwType); |
109 pFormFillEnv->JS_appBeep(dwType); | |
110 } | 55 } |
111 | 56 |
112 int32_t CPDFXFA_App::MsgBox(const CFX_WideString& wsMessage, | 57 int32_t CPDFXFA_App::MsgBox(const CFX_WideString& wsMessage, |
113 const CFX_WideString& wsTitle, | 58 const CFX_WideString& wsTitle, |
114 uint32_t dwIconType, | 59 uint32_t dwIconType, |
115 uint32_t dwButtonType) { | 60 uint32_t dwButtonType) { |
116 CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pFormFillEnvList.GetAt(0); | 61 if (!m_pFormFillEnv) |
117 if (!pFormFillEnv) | |
118 return -1; | 62 return -1; |
119 | 63 |
120 uint32_t iconType = 0; | 64 uint32_t iconType = 0; |
121 int iButtonType = 0; | 65 int iButtonType = 0; |
122 switch (dwIconType) { | 66 switch (dwIconType) { |
123 case XFA_MBICON_Error: | 67 case XFA_MBICON_Error: |
124 iconType |= 0; | 68 iconType |= 0; |
125 break; | 69 break; |
126 case XFA_MBICON_Warning: | 70 case XFA_MBICON_Warning: |
127 iconType |= 1; | 71 iconType |= 1; |
(...skipping 12 matching lines...) Expand all Loading... | |
140 case XFA_MB_OKCancel: | 84 case XFA_MB_OKCancel: |
141 iButtonType |= 1; | 85 iButtonType |= 1; |
142 break; | 86 break; |
143 case XFA_MB_YesNo: | 87 case XFA_MB_YesNo: |
144 iButtonType |= 2; | 88 iButtonType |= 2; |
145 break; | 89 break; |
146 case XFA_MB_YesNoCancel: | 90 case XFA_MB_YesNoCancel: |
147 iButtonType |= 3; | 91 iButtonType |= 3; |
148 break; | 92 break; |
149 } | 93 } |
150 int32_t iRet = pFormFillEnv->JS_appAlert(wsMessage.c_str(), wsTitle.c_str(), | 94 int32_t iRet = m_pFormFillEnv->JS_appAlert(wsMessage.c_str(), wsTitle.c_str(), |
151 iButtonType, iconType); | 95 iButtonType, iconType); |
152 switch (iRet) { | 96 switch (iRet) { |
153 case 1: | 97 case 1: |
154 return XFA_IDOK; | 98 return XFA_IDOK; |
155 case 2: | 99 case 2: |
156 return XFA_IDCancel; | 100 return XFA_IDCancel; |
157 case 3: | 101 case 3: |
158 return XFA_IDNo; | 102 return XFA_IDNo; |
159 case 4: | 103 case 4: |
160 return XFA_IDYes; | 104 return XFA_IDYes; |
161 } | 105 } |
162 return XFA_IDYes; | 106 return XFA_IDYes; |
163 } | 107 } |
164 | 108 |
165 CFX_WideString CPDFXFA_App::Response(const CFX_WideString& wsQuestion, | 109 CFX_WideString CPDFXFA_App::Response(const CFX_WideString& wsQuestion, |
166 const CFX_WideString& wsTitle, | 110 const CFX_WideString& wsTitle, |
167 const CFX_WideString& wsDefaultAnswer, | 111 const CFX_WideString& wsDefaultAnswer, |
168 FX_BOOL bMark) { | 112 FX_BOOL bMark) { |
169 CFX_WideString wsAnswer; | 113 CFX_WideString wsAnswer; |
170 CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pFormFillEnvList.GetAt(0); | 114 if (!m_pFormFillEnv) |
171 if (pFormFillEnv) { | 115 return wsAnswer; |
172 int nLength = 2048; | 116 |
173 char* pBuff = new char[nLength]; | 117 int nLength = 2048; |
174 nLength = pFormFillEnv->JS_appResponse(wsQuestion.c_str(), wsTitle.c_str(), | 118 char* pBuff = new char[nLength]; |
119 nLength = m_pFormFillEnv->JS_appResponse(wsQuestion.c_str(), wsTitle.c_str(), | |
175 wsDefaultAnswer.c_str(), nullptr, | 120 wsDefaultAnswer.c_str(), nullptr, |
176 bMark, pBuff, nLength); | 121 bMark, pBuff, nLength); |
177 if (nLength > 0) { | 122 if (nLength > 0) { |
178 nLength = nLength > 2046 ? 2046 : nLength; | 123 nLength = nLength > 2046 ? 2046 : nLength; |
179 pBuff[nLength] = 0; | 124 pBuff[nLength] = 0; |
180 pBuff[nLength + 1] = 0; | 125 pBuff[nLength + 1] = 0; |
181 wsAnswer = CFX_WideString::FromUTF16LE( | 126 wsAnswer = CFX_WideString::FromUTF16LE( |
182 reinterpret_cast<const unsigned short*>(pBuff), | 127 reinterpret_cast<const unsigned short*>(pBuff), |
183 nLength / sizeof(unsigned short)); | 128 nLength / sizeof(unsigned short)); |
184 } | |
185 delete[] pBuff; | |
186 } | 129 } |
130 delete[] pBuff; | |
187 return wsAnswer; | 131 return wsAnswer; |
188 } | 132 } |
189 | 133 |
190 IFX_FileRead* CPDFXFA_App::DownloadURL(const CFX_WideString& wsURL) { | 134 IFX_FileRead* CPDFXFA_App::DownloadURL(const CFX_WideString& wsURL) { |
191 CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pFormFillEnvList.GetAt(0); | 135 return m_pFormFillEnv ? m_pFormFillEnv->DownloadFromURL(wsURL.c_str()) |
192 return pFormFillEnv ? pFormFillEnv->DownloadFromURL(wsURL.c_str()) : nullptr; | 136 : nullptr; |
193 } | 137 } |
194 | 138 |
195 FX_BOOL CPDFXFA_App::PostRequestURL(const CFX_WideString& wsURL, | 139 FX_BOOL CPDFXFA_App::PostRequestURL(const CFX_WideString& wsURL, |
196 const CFX_WideString& wsData, | 140 const CFX_WideString& wsData, |
197 const CFX_WideString& wsContentType, | 141 const CFX_WideString& wsContentType, |
198 const CFX_WideString& wsEncode, | 142 const CFX_WideString& wsEncode, |
199 const CFX_WideString& wsHeader, | 143 const CFX_WideString& wsHeader, |
200 CFX_WideString& wsResponse) { | 144 CFX_WideString& wsResponse) { |
201 CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pFormFillEnvList.GetAt(0); | 145 if (!m_pFormFillEnv) |
202 if (!pFormFillEnv) | |
203 return FALSE; | 146 return FALSE; |
204 | 147 |
205 wsResponse = pFormFillEnv->PostRequestURL(wsURL.c_str(), wsData.c_str(), | 148 wsResponse = m_pFormFillEnv->PostRequestURL( |
206 wsContentType.c_str(), | 149 wsURL.c_str(), wsData.c_str(), wsContentType.c_str(), wsEncode.c_str(), |
207 wsEncode.c_str(), wsHeader.c_str()); | 150 wsHeader.c_str()); |
208 return TRUE; | 151 return TRUE; |
209 } | 152 } |
210 | 153 |
211 FX_BOOL CPDFXFA_App::PutRequestURL(const CFX_WideString& wsURL, | 154 FX_BOOL CPDFXFA_App::PutRequestURL(const CFX_WideString& wsURL, |
212 const CFX_WideString& wsData, | 155 const CFX_WideString& wsData, |
213 const CFX_WideString& wsEncode) { | 156 const CFX_WideString& wsEncode) { |
214 CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pFormFillEnvList.GetAt(0); | 157 return m_pFormFillEnv && |
215 return pFormFillEnv && | 158 m_pFormFillEnv->PutRequestURL(wsURL.c_str(), wsData.c_str(), |
216 pFormFillEnv->PutRequestURL(wsURL.c_str(), wsData.c_str(), | 159 wsEncode.c_str()); |
217 wsEncode.c_str()); | |
218 } | 160 } |
219 | 161 |
220 void CPDFXFA_App::LoadString(int32_t iStringID, CFX_WideString& wsString) { | 162 void CPDFXFA_App::LoadString(int32_t iStringID, CFX_WideString& wsString) { |
221 switch (iStringID) { | 163 switch (iStringID) { |
222 case XFA_IDS_ValidateFailed: | 164 case XFA_IDS_ValidateFailed: |
223 wsString = L"%s validation failed"; | 165 wsString = L"%s validation failed"; |
224 return; | 166 return; |
225 case XFA_IDS_CalcOverride: | 167 case XFA_IDS_CalcOverride: |
226 wsString = L"Calculate Override"; | 168 wsString = L"Calculate Override"; |
227 return; | 169 return; |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
309 L"%s, click Ignore."; | 251 L"%s, click Ignore."; |
310 return; | 252 return; |
311 case XFA_IDS_ValidateError: | 253 case XFA_IDS_ValidateError: |
312 wsString = L"The value you entered for %s is invalid."; | 254 wsString = L"The value you entered for %s is invalid."; |
313 return; | 255 return; |
314 } | 256 } |
315 } | 257 } |
316 | 258 |
317 IFWL_AdapterTimerMgr* CPDFXFA_App::GetTimerMgr() { | 259 IFWL_AdapterTimerMgr* CPDFXFA_App::GetTimerMgr() { |
318 CXFA_FWLAdapterTimerMgr* pAdapter = nullptr; | 260 CXFA_FWLAdapterTimerMgr* pAdapter = nullptr; |
319 CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pFormFillEnvList.GetAt(0); | 261 if (m_pFormFillEnv) |
320 if (pFormFillEnv) | 262 pAdapter = new CXFA_FWLAdapterTimerMgr(m_pFormFillEnv); |
321 pAdapter = new CXFA_FWLAdapterTimerMgr(pFormFillEnv); | |
322 return pAdapter; | 263 return pAdapter; |
323 } | 264 } |
OLD | NEW |