Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(799)

Side by Side Diff: fpdfsdk/fpdfxfa/cpdfxfa_app.cpp

Issue 2414883006: Revert of Reland: Make the CPDFXFA_App non-global (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « fpdfsdk/fpdfxfa/cpdfxfa_app.h ('k') | fpdfsdk/fpdfxfa/cpdfxfa_document.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "fxjs/fxjs_v8.h"
15 #include "third_party/base/ptr_util.h" 14 #include "third_party/base/ptr_util.h"
15 #include "xfa/fxbarcode/BC_Library.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 CPDFXFA_App::CPDFXFA_App() : m_pIsolate(nullptr) { 19 namespace {
20 m_bOwnsIsolate = FXJS_GetIsolate(&m_pIsolate);
21 20
22 m_pXFAApp = pdfium::MakeUnique<CXFA_FFApp>(this); 21 CPDFXFA_App* g_pApp = nullptr;
23 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 }
31
32 void CPDFXFA_App::ReleaseInstance() {
33 delete g_pApp;
34 g_pApp = nullptr;
35 }
36
37 CPDFXFA_App::CPDFXFA_App()
38 : m_bJavaScriptInitialized(FALSE), m_pIsolate(nullptr) {
39 m_pFormFillEnvList.RemoveAll();
24 } 40 }
25 41
26 CPDFXFA_App::~CPDFXFA_App() { 42 CPDFXFA_App::~CPDFXFA_App() {
27 if (m_bOwnsIsolate) 43 FXJSE_Runtime_Release(m_pIsolate);
28 m_pIsolate->Dispose(); 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;
29 } 85 }
30 86
31 void CPDFXFA_App::GetAppName(CFX_WideString& wsName) { 87 void CPDFXFA_App::GetAppName(CFX_WideString& wsName) {
32 if (m_pFormFillEnv) 88 CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pFormFillEnvList.GetAt(0);
33 wsName = m_pFormFillEnv->FFI_GetAppName(); 89 if (pFormFillEnv)
90 wsName = pFormFillEnv->FFI_GetAppName();
34 } 91 }
35 92
36 void CPDFXFA_App::GetLanguage(CFX_WideString& wsLanguage) { 93 void CPDFXFA_App::GetLanguage(CFX_WideString& wsLanguage) {
37 if (m_pFormFillEnv) 94 CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pFormFillEnvList.GetAt(0);
38 wsLanguage = m_pFormFillEnv->GetLanguage(); 95 if (pFormFillEnv)
96 wsLanguage = pFormFillEnv->GetLanguage();
39 } 97 }
40 98
41 void CPDFXFA_App::GetPlatform(CFX_WideString& wsPlatform) { 99 void CPDFXFA_App::GetPlatform(CFX_WideString& wsPlatform) {
42 if (m_pFormFillEnv) { 100 CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pFormFillEnvList.GetAt(0);
43 wsPlatform = m_pFormFillEnv->GetPlatform(); 101 if (pFormFillEnv) {
102 wsPlatform = pFormFillEnv->GetPlatform();
44 } 103 }
45 } 104 }
46 105
47 void CPDFXFA_App::Beep(uint32_t dwType) { 106 void CPDFXFA_App::Beep(uint32_t dwType) {
48 if (m_pFormFillEnv) 107 CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pFormFillEnvList.GetAt(0);
49 m_pFormFillEnv->JS_appBeep(dwType); 108 if (pFormFillEnv)
109 pFormFillEnv->JS_appBeep(dwType);
50 } 110 }
51 111
52 int32_t CPDFXFA_App::MsgBox(const CFX_WideString& wsMessage, 112 int32_t CPDFXFA_App::MsgBox(const CFX_WideString& wsMessage,
53 const CFX_WideString& wsTitle, 113 const CFX_WideString& wsTitle,
54 uint32_t dwIconType, 114 uint32_t dwIconType,
55 uint32_t dwButtonType) { 115 uint32_t dwButtonType) {
56 if (!m_pFormFillEnv) 116 CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pFormFillEnvList.GetAt(0);
117 if (!pFormFillEnv)
57 return -1; 118 return -1;
58 119
59 uint32_t iconType = 0; 120 uint32_t iconType = 0;
60 int iButtonType = 0; 121 int iButtonType = 0;
61 switch (dwIconType) { 122 switch (dwIconType) {
62 case XFA_MBICON_Error: 123 case XFA_MBICON_Error:
63 iconType |= 0; 124 iconType |= 0;
64 break; 125 break;
65 case XFA_MBICON_Warning: 126 case XFA_MBICON_Warning:
66 iconType |= 1; 127 iconType |= 1;
(...skipping 12 matching lines...) Expand all
79 case XFA_MB_OKCancel: 140 case XFA_MB_OKCancel:
80 iButtonType |= 1; 141 iButtonType |= 1;
81 break; 142 break;
82 case XFA_MB_YesNo: 143 case XFA_MB_YesNo:
83 iButtonType |= 2; 144 iButtonType |= 2;
84 break; 145 break;
85 case XFA_MB_YesNoCancel: 146 case XFA_MB_YesNoCancel:
86 iButtonType |= 3; 147 iButtonType |= 3;
87 break; 148 break;
88 } 149 }
89 int32_t iRet = m_pFormFillEnv->JS_appAlert(wsMessage.c_str(), wsTitle.c_str(), 150 int32_t iRet = pFormFillEnv->JS_appAlert(wsMessage.c_str(), wsTitle.c_str(),
90 iButtonType, iconType); 151 iButtonType, iconType);
91 switch (iRet) { 152 switch (iRet) {
92 case 1: 153 case 1:
93 return XFA_IDOK; 154 return XFA_IDOK;
94 case 2: 155 case 2:
95 return XFA_IDCancel; 156 return XFA_IDCancel;
96 case 3: 157 case 3:
97 return XFA_IDNo; 158 return XFA_IDNo;
98 case 4: 159 case 4:
99 return XFA_IDYes; 160 return XFA_IDYes;
100 } 161 }
101 return XFA_IDYes; 162 return XFA_IDYes;
102 } 163 }
103 164
104 CFX_WideString CPDFXFA_App::Response(const CFX_WideString& wsQuestion, 165 CFX_WideString CPDFXFA_App::Response(const CFX_WideString& wsQuestion,
105 const CFX_WideString& wsTitle, 166 const CFX_WideString& wsTitle,
106 const CFX_WideString& wsDefaultAnswer, 167 const CFX_WideString& wsDefaultAnswer,
107 FX_BOOL bMark) { 168 FX_BOOL bMark) {
108 CFX_WideString wsAnswer; 169 CFX_WideString wsAnswer;
109 if (!m_pFormFillEnv) 170 CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pFormFillEnvList.GetAt(0);
110 return wsAnswer; 171 if (pFormFillEnv) {
111 172 int nLength = 2048;
112 int nLength = 2048; 173 char* pBuff = new char[nLength];
113 char* pBuff = new char[nLength]; 174 nLength = pFormFillEnv->JS_appResponse(wsQuestion.c_str(), wsTitle.c_str(),
114 nLength = m_pFormFillEnv->JS_appResponse(wsQuestion.c_str(), wsTitle.c_str(),
115 wsDefaultAnswer.c_str(), nullptr, 175 wsDefaultAnswer.c_str(), nullptr,
116 bMark, pBuff, nLength); 176 bMark, pBuff, nLength);
117 if (nLength > 0) { 177 if (nLength > 0) {
118 nLength = nLength > 2046 ? 2046 : nLength; 178 nLength = nLength > 2046 ? 2046 : nLength;
119 pBuff[nLength] = 0; 179 pBuff[nLength] = 0;
120 pBuff[nLength + 1] = 0; 180 pBuff[nLength + 1] = 0;
121 wsAnswer = CFX_WideString::FromUTF16LE( 181 wsAnswer = CFX_WideString::FromUTF16LE(
122 reinterpret_cast<const unsigned short*>(pBuff), 182 reinterpret_cast<const unsigned short*>(pBuff),
123 nLength / sizeof(unsigned short)); 183 nLength / sizeof(unsigned short));
184 }
185 delete[] pBuff;
124 } 186 }
125 delete[] pBuff;
126 return wsAnswer; 187 return wsAnswer;
127 } 188 }
128 189
129 IFX_FileRead* CPDFXFA_App::DownloadURL(const CFX_WideString& wsURL) { 190 IFX_FileRead* CPDFXFA_App::DownloadURL(const CFX_WideString& wsURL) {
130 return m_pFormFillEnv ? m_pFormFillEnv->DownloadFromURL(wsURL.c_str()) 191 CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pFormFillEnvList.GetAt(0);
131 : nullptr; 192 return pFormFillEnv ? pFormFillEnv->DownloadFromURL(wsURL.c_str()) : nullptr;
132 } 193 }
133 194
134 FX_BOOL CPDFXFA_App::PostRequestURL(const CFX_WideString& wsURL, 195 FX_BOOL CPDFXFA_App::PostRequestURL(const CFX_WideString& wsURL,
135 const CFX_WideString& wsData, 196 const CFX_WideString& wsData,
136 const CFX_WideString& wsContentType, 197 const CFX_WideString& wsContentType,
137 const CFX_WideString& wsEncode, 198 const CFX_WideString& wsEncode,
138 const CFX_WideString& wsHeader, 199 const CFX_WideString& wsHeader,
139 CFX_WideString& wsResponse) { 200 CFX_WideString& wsResponse) {
140 if (!m_pFormFillEnv) 201 CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pFormFillEnvList.GetAt(0);
202 if (!pFormFillEnv)
141 return FALSE; 203 return FALSE;
142 204
143 wsResponse = m_pFormFillEnv->PostRequestURL( 205 wsResponse = pFormFillEnv->PostRequestURL(wsURL.c_str(), wsData.c_str(),
144 wsURL.c_str(), wsData.c_str(), wsContentType.c_str(), wsEncode.c_str(), 206 wsContentType.c_str(),
145 wsHeader.c_str()); 207 wsEncode.c_str(), wsHeader.c_str());
146 return TRUE; 208 return TRUE;
147 } 209 }
148 210
149 FX_BOOL CPDFXFA_App::PutRequestURL(const CFX_WideString& wsURL, 211 FX_BOOL CPDFXFA_App::PutRequestURL(const CFX_WideString& wsURL,
150 const CFX_WideString& wsData, 212 const CFX_WideString& wsData,
151 const CFX_WideString& wsEncode) { 213 const CFX_WideString& wsEncode) {
152 return m_pFormFillEnv && 214 CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pFormFillEnvList.GetAt(0);
153 m_pFormFillEnv->PutRequestURL(wsURL.c_str(), wsData.c_str(), 215 return pFormFillEnv &&
154 wsEncode.c_str()); 216 pFormFillEnv->PutRequestURL(wsURL.c_str(), wsData.c_str(),
217 wsEncode.c_str());
155 } 218 }
156 219
157 void CPDFXFA_App::LoadString(int32_t iStringID, CFX_WideString& wsString) { 220 void CPDFXFA_App::LoadString(int32_t iStringID, CFX_WideString& wsString) {
158 switch (iStringID) { 221 switch (iStringID) {
159 case XFA_IDS_ValidateFailed: 222 case XFA_IDS_ValidateFailed:
160 wsString = L"%s validation failed"; 223 wsString = L"%s validation failed";
161 return; 224 return;
162 case XFA_IDS_CalcOverride: 225 case XFA_IDS_CalcOverride:
163 wsString = L"Calculate Override"; 226 wsString = L"Calculate Override";
164 return; 227 return;
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 L"%s, click Ignore."; 309 L"%s, click Ignore.";
247 return; 310 return;
248 case XFA_IDS_ValidateError: 311 case XFA_IDS_ValidateError:
249 wsString = L"The value you entered for %s is invalid."; 312 wsString = L"The value you entered for %s is invalid.";
250 return; 313 return;
251 } 314 }
252 } 315 }
253 316
254 IFWL_AdapterTimerMgr* CPDFXFA_App::GetTimerMgr() { 317 IFWL_AdapterTimerMgr* CPDFXFA_App::GetTimerMgr() {
255 CXFA_FWLAdapterTimerMgr* pAdapter = nullptr; 318 CXFA_FWLAdapterTimerMgr* pAdapter = nullptr;
256 if (m_pFormFillEnv) 319 CPDFSDK_FormFillEnvironment* pFormFillEnv = m_pFormFillEnvList.GetAt(0);
257 pAdapter = new CXFA_FWLAdapterTimerMgr(m_pFormFillEnv); 320 if (pFormFillEnv)
321 pAdapter = new CXFA_FWLAdapterTimerMgr(pFormFillEnv);
258 return pAdapter; 322 return pAdapter;
259 } 323 }
OLDNEW
« no previous file with comments | « fpdfsdk/fpdfxfa/cpdfxfa_app.h ('k') | fpdfsdk/fpdfxfa/cpdfxfa_document.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698