1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2017 The PDFium Authors
2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file.
4*3ac0a46fSAndroid Build Coastguard Worker
5*3ac0a46fSAndroid Build Coastguard Worker // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6*3ac0a46fSAndroid Build Coastguard Worker
7*3ac0a46fSAndroid Build Coastguard Worker #include "fxjs/xfa/cjx_hostpseudomodel.h"
8*3ac0a46fSAndroid Build Coastguard Worker
9*3ac0a46fSAndroid Build Coastguard Worker #include <vector>
10*3ac0a46fSAndroid Build Coastguard Worker
11*3ac0a46fSAndroid Build Coastguard Worker #include "fxjs/fxv8.h"
12*3ac0a46fSAndroid Build Coastguard Worker #include "fxjs/js_resources.h"
13*3ac0a46fSAndroid Build Coastguard Worker #include "fxjs/xfa/cfxjse_engine.h"
14*3ac0a46fSAndroid Build Coastguard Worker #include "third_party/base/check.h"
15*3ac0a46fSAndroid Build Coastguard Worker #include "v8/include/v8-object.h"
16*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/cxfa_ffdoc.h"
17*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/cxfa_ffnotify.h"
18*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/parser/cscript_hostpseudomodel.h"
19*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/parser/cxfa_node.h"
20*3ac0a46fSAndroid Build Coastguard Worker
21*3ac0a46fSAndroid Build Coastguard Worker namespace {
22*3ac0a46fSAndroid Build Coastguard Worker
FilterName(WideStringView wsExpression,size_t nStart,WideString & wsFilter)23*3ac0a46fSAndroid Build Coastguard Worker size_t FilterName(WideStringView wsExpression,
24*3ac0a46fSAndroid Build Coastguard Worker size_t nStart,
25*3ac0a46fSAndroid Build Coastguard Worker WideString& wsFilter) {
26*3ac0a46fSAndroid Build Coastguard Worker const size_t nLength = wsExpression.GetLength();
27*3ac0a46fSAndroid Build Coastguard Worker if (nStart >= nLength)
28*3ac0a46fSAndroid Build Coastguard Worker return nLength;
29*3ac0a46fSAndroid Build Coastguard Worker
30*3ac0a46fSAndroid Build Coastguard Worker size_t nCount = 0;
31*3ac0a46fSAndroid Build Coastguard Worker {
32*3ac0a46fSAndroid Build Coastguard Worker // Span's lifetime must end before ReleaseBuffer() below.
33*3ac0a46fSAndroid Build Coastguard Worker pdfium::span<wchar_t> pBuf = wsFilter.GetBuffer(nLength - nStart);
34*3ac0a46fSAndroid Build Coastguard Worker const wchar_t* pSrc = wsExpression.unterminated_c_str();
35*3ac0a46fSAndroid Build Coastguard Worker while (nStart < nLength) {
36*3ac0a46fSAndroid Build Coastguard Worker wchar_t wCur = pSrc[nStart++];
37*3ac0a46fSAndroid Build Coastguard Worker if (wCur == ',')
38*3ac0a46fSAndroid Build Coastguard Worker break;
39*3ac0a46fSAndroid Build Coastguard Worker
40*3ac0a46fSAndroid Build Coastguard Worker pBuf[nCount++] = wCur;
41*3ac0a46fSAndroid Build Coastguard Worker }
42*3ac0a46fSAndroid Build Coastguard Worker }
43*3ac0a46fSAndroid Build Coastguard Worker wsFilter.ReleaseBuffer(nCount);
44*3ac0a46fSAndroid Build Coastguard Worker wsFilter.Trim();
45*3ac0a46fSAndroid Build Coastguard Worker return nStart;
46*3ac0a46fSAndroid Build Coastguard Worker }
47*3ac0a46fSAndroid Build Coastguard Worker
48*3ac0a46fSAndroid Build Coastguard Worker } // namespace
49*3ac0a46fSAndroid Build Coastguard Worker
50*3ac0a46fSAndroid Build Coastguard Worker const CJX_MethodSpec CJX_HostPseudoModel::MethodSpecs[] = {
51*3ac0a46fSAndroid Build Coastguard Worker {"beep", beep_static},
52*3ac0a46fSAndroid Build Coastguard Worker {"documentCountInBatch", documentCountInBatch_static},
53*3ac0a46fSAndroid Build Coastguard Worker {"documentInBatch", documentInBatch_static},
54*3ac0a46fSAndroid Build Coastguard Worker {"exportData", exportData_static},
55*3ac0a46fSAndroid Build Coastguard Worker {"getFocus", getFocus_static},
56*3ac0a46fSAndroid Build Coastguard Worker {"gotoURL", gotoURL_static},
57*3ac0a46fSAndroid Build Coastguard Worker {"importData", importData_static},
58*3ac0a46fSAndroid Build Coastguard Worker {"messageBox", messageBox_static},
59*3ac0a46fSAndroid Build Coastguard Worker {"openList", openList_static},
60*3ac0a46fSAndroid Build Coastguard Worker {"pageDown", pageDown_static},
61*3ac0a46fSAndroid Build Coastguard Worker {"pageUp", pageUp_static},
62*3ac0a46fSAndroid Build Coastguard Worker {"print", print_static},
63*3ac0a46fSAndroid Build Coastguard Worker {"resetData", resetData_static},
64*3ac0a46fSAndroid Build Coastguard Worker {"response", response_static},
65*3ac0a46fSAndroid Build Coastguard Worker {"setFocus", setFocus_static}};
66*3ac0a46fSAndroid Build Coastguard Worker
CJX_HostPseudoModel(CScript_HostPseudoModel * model)67*3ac0a46fSAndroid Build Coastguard Worker CJX_HostPseudoModel::CJX_HostPseudoModel(CScript_HostPseudoModel* model)
68*3ac0a46fSAndroid Build Coastguard Worker : CJX_Object(model) {
69*3ac0a46fSAndroid Build Coastguard Worker DefineMethods(MethodSpecs);
70*3ac0a46fSAndroid Build Coastguard Worker }
71*3ac0a46fSAndroid Build Coastguard Worker
72*3ac0a46fSAndroid Build Coastguard Worker CJX_HostPseudoModel::~CJX_HostPseudoModel() = default;
73*3ac0a46fSAndroid Build Coastguard Worker
DynamicTypeIs(TypeTag eType) const74*3ac0a46fSAndroid Build Coastguard Worker bool CJX_HostPseudoModel::DynamicTypeIs(TypeTag eType) const {
75*3ac0a46fSAndroid Build Coastguard Worker return eType == static_type__ || ParentType__::DynamicTypeIs(eType);
76*3ac0a46fSAndroid Build Coastguard Worker }
77*3ac0a46fSAndroid Build Coastguard Worker
appType(v8::Isolate * pIsolate,v8::Local<v8::Value> * pValue,bool bSetting,XFA_Attribute eAttribute)78*3ac0a46fSAndroid Build Coastguard Worker void CJX_HostPseudoModel::appType(v8::Isolate* pIsolate,
79*3ac0a46fSAndroid Build Coastguard Worker v8::Local<v8::Value>* pValue,
80*3ac0a46fSAndroid Build Coastguard Worker bool bSetting,
81*3ac0a46fSAndroid Build Coastguard Worker XFA_Attribute eAttribute) {
82*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
83*3ac0a46fSAndroid Build Coastguard Worker if (!pNotify)
84*3ac0a46fSAndroid Build Coastguard Worker return;
85*3ac0a46fSAndroid Build Coastguard Worker
86*3ac0a46fSAndroid Build Coastguard Worker if (bSetting) {
87*3ac0a46fSAndroid Build Coastguard Worker ThrowInvalidPropertyException(pIsolate);
88*3ac0a46fSAndroid Build Coastguard Worker return;
89*3ac0a46fSAndroid Build Coastguard Worker }
90*3ac0a46fSAndroid Build Coastguard Worker *pValue = fxv8::NewStringHelper(pIsolate, "Exchange");
91*3ac0a46fSAndroid Build Coastguard Worker }
92*3ac0a46fSAndroid Build Coastguard Worker
calculationsEnabled(v8::Isolate * pIsolate,v8::Local<v8::Value> * pValue,bool bSetting,XFA_Attribute eAttribute)93*3ac0a46fSAndroid Build Coastguard Worker void CJX_HostPseudoModel::calculationsEnabled(v8::Isolate* pIsolate,
94*3ac0a46fSAndroid Build Coastguard Worker v8::Local<v8::Value>* pValue,
95*3ac0a46fSAndroid Build Coastguard Worker bool bSetting,
96*3ac0a46fSAndroid Build Coastguard Worker XFA_Attribute eAttribute) {
97*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
98*3ac0a46fSAndroid Build Coastguard Worker if (!pNotify)
99*3ac0a46fSAndroid Build Coastguard Worker return;
100*3ac0a46fSAndroid Build Coastguard Worker
101*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFDoc* hDoc = pNotify->GetFFDoc();
102*3ac0a46fSAndroid Build Coastguard Worker if (bSetting) {
103*3ac0a46fSAndroid Build Coastguard Worker hDoc->SetCalculationsEnabled(
104*3ac0a46fSAndroid Build Coastguard Worker fxv8::ReentrantToBooleanHelper(pIsolate, *pValue));
105*3ac0a46fSAndroid Build Coastguard Worker return;
106*3ac0a46fSAndroid Build Coastguard Worker }
107*3ac0a46fSAndroid Build Coastguard Worker *pValue = fxv8::NewBooleanHelper(pIsolate, hDoc->IsCalculationsEnabled());
108*3ac0a46fSAndroid Build Coastguard Worker }
109*3ac0a46fSAndroid Build Coastguard Worker
currentPage(v8::Isolate * pIsolate,v8::Local<v8::Value> * pValue,bool bSetting,XFA_Attribute eAttribute)110*3ac0a46fSAndroid Build Coastguard Worker void CJX_HostPseudoModel::currentPage(v8::Isolate* pIsolate,
111*3ac0a46fSAndroid Build Coastguard Worker v8::Local<v8::Value>* pValue,
112*3ac0a46fSAndroid Build Coastguard Worker bool bSetting,
113*3ac0a46fSAndroid Build Coastguard Worker XFA_Attribute eAttribute) {
114*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
115*3ac0a46fSAndroid Build Coastguard Worker if (!pNotify)
116*3ac0a46fSAndroid Build Coastguard Worker return;
117*3ac0a46fSAndroid Build Coastguard Worker
118*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFDoc* hDoc = pNotify->GetFFDoc();
119*3ac0a46fSAndroid Build Coastguard Worker if (bSetting) {
120*3ac0a46fSAndroid Build Coastguard Worker hDoc->SetCurrentPage(fxv8::ReentrantToInt32Helper(pIsolate, *pValue));
121*3ac0a46fSAndroid Build Coastguard Worker return;
122*3ac0a46fSAndroid Build Coastguard Worker }
123*3ac0a46fSAndroid Build Coastguard Worker *pValue = fxv8::NewNumberHelper(pIsolate, hDoc->GetCurrentPage());
124*3ac0a46fSAndroid Build Coastguard Worker }
125*3ac0a46fSAndroid Build Coastguard Worker
language(v8::Isolate * pIsolate,v8::Local<v8::Value> * pValue,bool bSetting,XFA_Attribute eAttribute)126*3ac0a46fSAndroid Build Coastguard Worker void CJX_HostPseudoModel::language(v8::Isolate* pIsolate,
127*3ac0a46fSAndroid Build Coastguard Worker v8::Local<v8::Value>* pValue,
128*3ac0a46fSAndroid Build Coastguard Worker bool bSetting,
129*3ac0a46fSAndroid Build Coastguard Worker XFA_Attribute eAttribute) {
130*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
131*3ac0a46fSAndroid Build Coastguard Worker if (!pNotify)
132*3ac0a46fSAndroid Build Coastguard Worker return;
133*3ac0a46fSAndroid Build Coastguard Worker
134*3ac0a46fSAndroid Build Coastguard Worker if (bSetting) {
135*3ac0a46fSAndroid Build Coastguard Worker ThrowException(pIsolate,
136*3ac0a46fSAndroid Build Coastguard Worker WideString::FromASCII("Unable to set language value."));
137*3ac0a46fSAndroid Build Coastguard Worker return;
138*3ac0a46fSAndroid Build Coastguard Worker }
139*3ac0a46fSAndroid Build Coastguard Worker ByteString lang = pNotify->GetAppProvider()->GetLanguage().ToUTF8();
140*3ac0a46fSAndroid Build Coastguard Worker *pValue = fxv8::NewStringHelper(pIsolate, lang.AsStringView());
141*3ac0a46fSAndroid Build Coastguard Worker }
142*3ac0a46fSAndroid Build Coastguard Worker
numPages(v8::Isolate * pIsolate,v8::Local<v8::Value> * pValue,bool bSetting,XFA_Attribute eAttribute)143*3ac0a46fSAndroid Build Coastguard Worker void CJX_HostPseudoModel::numPages(v8::Isolate* pIsolate,
144*3ac0a46fSAndroid Build Coastguard Worker v8::Local<v8::Value>* pValue,
145*3ac0a46fSAndroid Build Coastguard Worker bool bSetting,
146*3ac0a46fSAndroid Build Coastguard Worker XFA_Attribute eAttribute) {
147*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
148*3ac0a46fSAndroid Build Coastguard Worker if (!pNotify)
149*3ac0a46fSAndroid Build Coastguard Worker return;
150*3ac0a46fSAndroid Build Coastguard Worker
151*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFDoc* hDoc = pNotify->GetFFDoc();
152*3ac0a46fSAndroid Build Coastguard Worker if (bSetting) {
153*3ac0a46fSAndroid Build Coastguard Worker ThrowException(pIsolate,
154*3ac0a46fSAndroid Build Coastguard Worker WideString::FromASCII("Unable to set numPages value."));
155*3ac0a46fSAndroid Build Coastguard Worker return;
156*3ac0a46fSAndroid Build Coastguard Worker }
157*3ac0a46fSAndroid Build Coastguard Worker *pValue = fxv8::NewNumberHelper(pIsolate, hDoc->CountPages());
158*3ac0a46fSAndroid Build Coastguard Worker }
159*3ac0a46fSAndroid Build Coastguard Worker
platform(v8::Isolate * pIsolate,v8::Local<v8::Value> * pValue,bool bSetting,XFA_Attribute eAttribute)160*3ac0a46fSAndroid Build Coastguard Worker void CJX_HostPseudoModel::platform(v8::Isolate* pIsolate,
161*3ac0a46fSAndroid Build Coastguard Worker v8::Local<v8::Value>* pValue,
162*3ac0a46fSAndroid Build Coastguard Worker bool bSetting,
163*3ac0a46fSAndroid Build Coastguard Worker XFA_Attribute eAttribute) {
164*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
165*3ac0a46fSAndroid Build Coastguard Worker if (!pNotify)
166*3ac0a46fSAndroid Build Coastguard Worker return;
167*3ac0a46fSAndroid Build Coastguard Worker
168*3ac0a46fSAndroid Build Coastguard Worker if (bSetting) {
169*3ac0a46fSAndroid Build Coastguard Worker ThrowException(pIsolate,
170*3ac0a46fSAndroid Build Coastguard Worker WideString::FromASCII("Unable to set platform value."));
171*3ac0a46fSAndroid Build Coastguard Worker return;
172*3ac0a46fSAndroid Build Coastguard Worker }
173*3ac0a46fSAndroid Build Coastguard Worker ByteString plat = pNotify->GetAppProvider()->GetPlatform().ToUTF8();
174*3ac0a46fSAndroid Build Coastguard Worker *pValue = fxv8::NewStringHelper(pIsolate, plat.AsStringView());
175*3ac0a46fSAndroid Build Coastguard Worker }
176*3ac0a46fSAndroid Build Coastguard Worker
title(v8::Isolate * pIsolate,v8::Local<v8::Value> * pValue,bool bSetting,XFA_Attribute eAttribute)177*3ac0a46fSAndroid Build Coastguard Worker void CJX_HostPseudoModel::title(v8::Isolate* pIsolate,
178*3ac0a46fSAndroid Build Coastguard Worker v8::Local<v8::Value>* pValue,
179*3ac0a46fSAndroid Build Coastguard Worker bool bSetting,
180*3ac0a46fSAndroid Build Coastguard Worker XFA_Attribute eAttribute) {
181*3ac0a46fSAndroid Build Coastguard Worker if (!GetDocument()->GetScriptContext()->IsRunAtClient())
182*3ac0a46fSAndroid Build Coastguard Worker return;
183*3ac0a46fSAndroid Build Coastguard Worker
184*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
185*3ac0a46fSAndroid Build Coastguard Worker if (!pNotify)
186*3ac0a46fSAndroid Build Coastguard Worker return;
187*3ac0a46fSAndroid Build Coastguard Worker
188*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFDoc* hDoc = pNotify->GetFFDoc();
189*3ac0a46fSAndroid Build Coastguard Worker if (bSetting) {
190*3ac0a46fSAndroid Build Coastguard Worker hDoc->SetTitle(fxv8::ReentrantToWideStringHelper(pIsolate, *pValue));
191*3ac0a46fSAndroid Build Coastguard Worker return;
192*3ac0a46fSAndroid Build Coastguard Worker }
193*3ac0a46fSAndroid Build Coastguard Worker
194*3ac0a46fSAndroid Build Coastguard Worker ByteString bsTitle = hDoc->GetTitle().ToUTF8();
195*3ac0a46fSAndroid Build Coastguard Worker *pValue = fxv8::NewStringHelper(pIsolate, bsTitle.AsStringView());
196*3ac0a46fSAndroid Build Coastguard Worker }
197*3ac0a46fSAndroid Build Coastguard Worker
validationsEnabled(v8::Isolate * pIsolate,v8::Local<v8::Value> * pValue,bool bSetting,XFA_Attribute eAttribute)198*3ac0a46fSAndroid Build Coastguard Worker void CJX_HostPseudoModel::validationsEnabled(v8::Isolate* pIsolate,
199*3ac0a46fSAndroid Build Coastguard Worker v8::Local<v8::Value>* pValue,
200*3ac0a46fSAndroid Build Coastguard Worker bool bSetting,
201*3ac0a46fSAndroid Build Coastguard Worker XFA_Attribute eAttribute) {
202*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
203*3ac0a46fSAndroid Build Coastguard Worker if (!pNotify)
204*3ac0a46fSAndroid Build Coastguard Worker return;
205*3ac0a46fSAndroid Build Coastguard Worker
206*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFDoc* hDoc = pNotify->GetFFDoc();
207*3ac0a46fSAndroid Build Coastguard Worker if (bSetting) {
208*3ac0a46fSAndroid Build Coastguard Worker hDoc->SetValidationsEnabled(
209*3ac0a46fSAndroid Build Coastguard Worker fxv8::ReentrantToBooleanHelper(pIsolate, *pValue));
210*3ac0a46fSAndroid Build Coastguard Worker return;
211*3ac0a46fSAndroid Build Coastguard Worker }
212*3ac0a46fSAndroid Build Coastguard Worker
213*3ac0a46fSAndroid Build Coastguard Worker *pValue = fxv8::NewBooleanHelper(pIsolate, hDoc->IsValidationsEnabled());
214*3ac0a46fSAndroid Build Coastguard Worker }
215*3ac0a46fSAndroid Build Coastguard Worker
variation(v8::Isolate * pIsolate,v8::Local<v8::Value> * pValue,bool bSetting,XFA_Attribute eAttribute)216*3ac0a46fSAndroid Build Coastguard Worker void CJX_HostPseudoModel::variation(v8::Isolate* pIsolate,
217*3ac0a46fSAndroid Build Coastguard Worker v8::Local<v8::Value>* pValue,
218*3ac0a46fSAndroid Build Coastguard Worker bool bSetting,
219*3ac0a46fSAndroid Build Coastguard Worker XFA_Attribute eAttribute) {
220*3ac0a46fSAndroid Build Coastguard Worker if (!GetDocument()->GetScriptContext()->IsRunAtClient())
221*3ac0a46fSAndroid Build Coastguard Worker return;
222*3ac0a46fSAndroid Build Coastguard Worker
223*3ac0a46fSAndroid Build Coastguard Worker if (bSetting) {
224*3ac0a46fSAndroid Build Coastguard Worker ThrowException(pIsolate,
225*3ac0a46fSAndroid Build Coastguard Worker WideString::FromASCII("Unable to set variation value."));
226*3ac0a46fSAndroid Build Coastguard Worker return;
227*3ac0a46fSAndroid Build Coastguard Worker }
228*3ac0a46fSAndroid Build Coastguard Worker *pValue = fxv8::NewStringHelper(pIsolate, "Full");
229*3ac0a46fSAndroid Build Coastguard Worker }
230*3ac0a46fSAndroid Build Coastguard Worker
version(v8::Isolate * pIsolate,v8::Local<v8::Value> * pValue,bool bSetting,XFA_Attribute eAttribute)231*3ac0a46fSAndroid Build Coastguard Worker void CJX_HostPseudoModel::version(v8::Isolate* pIsolate,
232*3ac0a46fSAndroid Build Coastguard Worker v8::Local<v8::Value>* pValue,
233*3ac0a46fSAndroid Build Coastguard Worker bool bSetting,
234*3ac0a46fSAndroid Build Coastguard Worker XFA_Attribute eAttribute) {
235*3ac0a46fSAndroid Build Coastguard Worker if (bSetting) {
236*3ac0a46fSAndroid Build Coastguard Worker ThrowException(pIsolate,
237*3ac0a46fSAndroid Build Coastguard Worker WideString::FromASCII("Unable to set version value."));
238*3ac0a46fSAndroid Build Coastguard Worker return;
239*3ac0a46fSAndroid Build Coastguard Worker }
240*3ac0a46fSAndroid Build Coastguard Worker *pValue = fxv8::NewStringHelper(pIsolate, "11");
241*3ac0a46fSAndroid Build Coastguard Worker }
242*3ac0a46fSAndroid Build Coastguard Worker
name(v8::Isolate * pIsolate,v8::Local<v8::Value> * pValue,bool bSetting,XFA_Attribute eAttribute)243*3ac0a46fSAndroid Build Coastguard Worker void CJX_HostPseudoModel::name(v8::Isolate* pIsolate,
244*3ac0a46fSAndroid Build Coastguard Worker v8::Local<v8::Value>* pValue,
245*3ac0a46fSAndroid Build Coastguard Worker bool bSetting,
246*3ac0a46fSAndroid Build Coastguard Worker XFA_Attribute eAttribute) {
247*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
248*3ac0a46fSAndroid Build Coastguard Worker if (!pNotify)
249*3ac0a46fSAndroid Build Coastguard Worker return;
250*3ac0a46fSAndroid Build Coastguard Worker
251*3ac0a46fSAndroid Build Coastguard Worker if (bSetting) {
252*3ac0a46fSAndroid Build Coastguard Worker ThrowInvalidPropertyException(pIsolate);
253*3ac0a46fSAndroid Build Coastguard Worker return;
254*3ac0a46fSAndroid Build Coastguard Worker }
255*3ac0a46fSAndroid Build Coastguard Worker ByteString bsName = pNotify->GetAppProvider()->GetAppName().ToUTF8();
256*3ac0a46fSAndroid Build Coastguard Worker *pValue = fxv8::NewStringHelper(pIsolate, bsName.AsStringView());
257*3ac0a46fSAndroid Build Coastguard Worker }
258*3ac0a46fSAndroid Build Coastguard Worker
gotoURL(CFXJSE_Engine * runtime,const std::vector<v8::Local<v8::Value>> & params)259*3ac0a46fSAndroid Build Coastguard Worker CJS_Result CJX_HostPseudoModel::gotoURL(
260*3ac0a46fSAndroid Build Coastguard Worker CFXJSE_Engine* runtime,
261*3ac0a46fSAndroid Build Coastguard Worker const std::vector<v8::Local<v8::Value>>& params) {
262*3ac0a46fSAndroid Build Coastguard Worker if (!runtime->IsRunAtClient()) {
263*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
264*3ac0a46fSAndroid Build Coastguard Worker }
265*3ac0a46fSAndroid Build Coastguard Worker
266*3ac0a46fSAndroid Build Coastguard Worker if (params.size() != 1)
267*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Failure(JSMessage::kParamError);
268*3ac0a46fSAndroid Build Coastguard Worker
269*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
270*3ac0a46fSAndroid Build Coastguard Worker if (!pNotify)
271*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
272*3ac0a46fSAndroid Build Coastguard Worker
273*3ac0a46fSAndroid Build Coastguard Worker pNotify->GetFFDoc()->GotoURL(runtime->ToWideString(params[0]));
274*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
275*3ac0a46fSAndroid Build Coastguard Worker }
276*3ac0a46fSAndroid Build Coastguard Worker
openList(CFXJSE_Engine * runtime,const std::vector<v8::Local<v8::Value>> & params)277*3ac0a46fSAndroid Build Coastguard Worker CJS_Result CJX_HostPseudoModel::openList(
278*3ac0a46fSAndroid Build Coastguard Worker CFXJSE_Engine* runtime,
279*3ac0a46fSAndroid Build Coastguard Worker const std::vector<v8::Local<v8::Value>>& params) {
280*3ac0a46fSAndroid Build Coastguard Worker if (!runtime->IsRunAtClient()) {
281*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
282*3ac0a46fSAndroid Build Coastguard Worker }
283*3ac0a46fSAndroid Build Coastguard Worker
284*3ac0a46fSAndroid Build Coastguard Worker if (params.size() != 1)
285*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Failure(JSMessage::kParamError);
286*3ac0a46fSAndroid Build Coastguard Worker
287*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
288*3ac0a46fSAndroid Build Coastguard Worker if (!pNotify)
289*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
290*3ac0a46fSAndroid Build Coastguard Worker
291*3ac0a46fSAndroid Build Coastguard Worker CXFA_Node* pNode = nullptr;
292*3ac0a46fSAndroid Build Coastguard Worker if (params[0]->IsObject()) {
293*3ac0a46fSAndroid Build Coastguard Worker pNode = ToNode(runtime->ToXFAObject(params[0]));
294*3ac0a46fSAndroid Build Coastguard Worker } else if (params[0]->IsString()) {
295*3ac0a46fSAndroid Build Coastguard Worker CXFA_Object* pObject = runtime->GetThisObject();
296*3ac0a46fSAndroid Build Coastguard Worker if (!pObject)
297*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
298*3ac0a46fSAndroid Build Coastguard Worker
299*3ac0a46fSAndroid Build Coastguard Worker constexpr Mask<XFA_ResolveFlag> kFlags = {XFA_ResolveFlag::kChildren,
300*3ac0a46fSAndroid Build Coastguard Worker XFA_ResolveFlag::kParent,
301*3ac0a46fSAndroid Build Coastguard Worker XFA_ResolveFlag::kSiblings};
302*3ac0a46fSAndroid Build Coastguard Worker absl::optional<CFXJSE_Engine::ResolveResult> maybeResult =
303*3ac0a46fSAndroid Build Coastguard Worker runtime->ResolveObjects(
304*3ac0a46fSAndroid Build Coastguard Worker pObject, runtime->ToWideString(params[0]).AsStringView(), kFlags);
305*3ac0a46fSAndroid Build Coastguard Worker if (!maybeResult.has_value() ||
306*3ac0a46fSAndroid Build Coastguard Worker !maybeResult.value().objects.front()->IsNode()) {
307*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
308*3ac0a46fSAndroid Build Coastguard Worker }
309*3ac0a46fSAndroid Build Coastguard Worker pNode = maybeResult.value().objects.front()->AsNode();
310*3ac0a46fSAndroid Build Coastguard Worker }
311*3ac0a46fSAndroid Build Coastguard Worker if (pNode)
312*3ac0a46fSAndroid Build Coastguard Worker pNotify->OpenDropDownList(pNode);
313*3ac0a46fSAndroid Build Coastguard Worker
314*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
315*3ac0a46fSAndroid Build Coastguard Worker }
316*3ac0a46fSAndroid Build Coastguard Worker
response(CFXJSE_Engine * runtime,const std::vector<v8::Local<v8::Value>> & params)317*3ac0a46fSAndroid Build Coastguard Worker CJS_Result CJX_HostPseudoModel::response(
318*3ac0a46fSAndroid Build Coastguard Worker CFXJSE_Engine* runtime,
319*3ac0a46fSAndroid Build Coastguard Worker const std::vector<v8::Local<v8::Value>>& params) {
320*3ac0a46fSAndroid Build Coastguard Worker if (params.empty() || params.size() > 4)
321*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Failure(JSMessage::kParamError);
322*3ac0a46fSAndroid Build Coastguard Worker
323*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
324*3ac0a46fSAndroid Build Coastguard Worker if (!pNotify)
325*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
326*3ac0a46fSAndroid Build Coastguard Worker
327*3ac0a46fSAndroid Build Coastguard Worker WideString question;
328*3ac0a46fSAndroid Build Coastguard Worker if (params.size() >= 1)
329*3ac0a46fSAndroid Build Coastguard Worker question = runtime->ToWideString(params[0]);
330*3ac0a46fSAndroid Build Coastguard Worker
331*3ac0a46fSAndroid Build Coastguard Worker WideString title;
332*3ac0a46fSAndroid Build Coastguard Worker if (params.size() >= 2)
333*3ac0a46fSAndroid Build Coastguard Worker title = runtime->ToWideString(params[1]);
334*3ac0a46fSAndroid Build Coastguard Worker
335*3ac0a46fSAndroid Build Coastguard Worker WideString defaultAnswer;
336*3ac0a46fSAndroid Build Coastguard Worker if (params.size() >= 3)
337*3ac0a46fSAndroid Build Coastguard Worker defaultAnswer = runtime->ToWideString(params[2]);
338*3ac0a46fSAndroid Build Coastguard Worker
339*3ac0a46fSAndroid Build Coastguard Worker bool mark = false;
340*3ac0a46fSAndroid Build Coastguard Worker if (params.size() >= 4)
341*3ac0a46fSAndroid Build Coastguard Worker mark = runtime->ToInt32(params[3]) != 0;
342*3ac0a46fSAndroid Build Coastguard Worker
343*3ac0a46fSAndroid Build Coastguard Worker WideString answer =
344*3ac0a46fSAndroid Build Coastguard Worker pNotify->GetAppProvider()->Response(question, title, defaultAnswer, mark);
345*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success(
346*3ac0a46fSAndroid Build Coastguard Worker runtime->NewString(answer.ToUTF8().AsStringView()));
347*3ac0a46fSAndroid Build Coastguard Worker }
348*3ac0a46fSAndroid Build Coastguard Worker
documentInBatch(CFXJSE_Engine * runtime,const std::vector<v8::Local<v8::Value>> & params)349*3ac0a46fSAndroid Build Coastguard Worker CJS_Result CJX_HostPseudoModel::documentInBatch(
350*3ac0a46fSAndroid Build Coastguard Worker CFXJSE_Engine* runtime,
351*3ac0a46fSAndroid Build Coastguard Worker const std::vector<v8::Local<v8::Value>>& params) {
352*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success(runtime->NewNumber(0));
353*3ac0a46fSAndroid Build Coastguard Worker }
354*3ac0a46fSAndroid Build Coastguard Worker
resetData(CFXJSE_Engine * runtime,const std::vector<v8::Local<v8::Value>> & params)355*3ac0a46fSAndroid Build Coastguard Worker CJS_Result CJX_HostPseudoModel::resetData(
356*3ac0a46fSAndroid Build Coastguard Worker CFXJSE_Engine* runtime,
357*3ac0a46fSAndroid Build Coastguard Worker const std::vector<v8::Local<v8::Value>>& params) {
358*3ac0a46fSAndroid Build Coastguard Worker if (params.size() > 1)
359*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Failure(JSMessage::kParamError);
360*3ac0a46fSAndroid Build Coastguard Worker
361*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
362*3ac0a46fSAndroid Build Coastguard Worker if (!pNotify)
363*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
364*3ac0a46fSAndroid Build Coastguard Worker
365*3ac0a46fSAndroid Build Coastguard Worker WideString expression;
366*3ac0a46fSAndroid Build Coastguard Worker if (params.size() >= 1)
367*3ac0a46fSAndroid Build Coastguard Worker expression = runtime->ToWideString(params[0]);
368*3ac0a46fSAndroid Build Coastguard Worker
369*3ac0a46fSAndroid Build Coastguard Worker if (expression.IsEmpty()) {
370*3ac0a46fSAndroid Build Coastguard Worker pNotify->ResetData(nullptr);
371*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
372*3ac0a46fSAndroid Build Coastguard Worker }
373*3ac0a46fSAndroid Build Coastguard Worker
374*3ac0a46fSAndroid Build Coastguard Worker WideString wsName;
375*3ac0a46fSAndroid Build Coastguard Worker CXFA_Node* pNode = nullptr;
376*3ac0a46fSAndroid Build Coastguard Worker size_t nStart = 0;
377*3ac0a46fSAndroid Build Coastguard Worker const size_t nExpLength = expression.GetLength();
378*3ac0a46fSAndroid Build Coastguard Worker while (nStart < nExpLength) {
379*3ac0a46fSAndroid Build Coastguard Worker nStart = FilterName(expression.AsStringView(), nStart, wsName);
380*3ac0a46fSAndroid Build Coastguard Worker CXFA_Object* pObject = runtime->GetThisObject();
381*3ac0a46fSAndroid Build Coastguard Worker if (!pObject)
382*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
383*3ac0a46fSAndroid Build Coastguard Worker
384*3ac0a46fSAndroid Build Coastguard Worker constexpr Mask<XFA_ResolveFlag> kFlags = {XFA_ResolveFlag::kChildren,
385*3ac0a46fSAndroid Build Coastguard Worker XFA_ResolveFlag::kParent,
386*3ac0a46fSAndroid Build Coastguard Worker XFA_ResolveFlag::kSiblings};
387*3ac0a46fSAndroid Build Coastguard Worker absl::optional<CFXJSE_Engine::ResolveResult> maybeResult =
388*3ac0a46fSAndroid Build Coastguard Worker runtime->ResolveObjects(pObject, wsName.AsStringView(), kFlags);
389*3ac0a46fSAndroid Build Coastguard Worker if (!maybeResult.has_value() ||
390*3ac0a46fSAndroid Build Coastguard Worker !maybeResult.value().objects.front()->IsNode())
391*3ac0a46fSAndroid Build Coastguard Worker continue;
392*3ac0a46fSAndroid Build Coastguard Worker
393*3ac0a46fSAndroid Build Coastguard Worker pNode = maybeResult.value().objects.front()->AsNode();
394*3ac0a46fSAndroid Build Coastguard Worker pNotify->ResetData(pNode->IsWidgetReady() ? pNode : nullptr);
395*3ac0a46fSAndroid Build Coastguard Worker }
396*3ac0a46fSAndroid Build Coastguard Worker if (!pNode)
397*3ac0a46fSAndroid Build Coastguard Worker pNotify->ResetData(nullptr);
398*3ac0a46fSAndroid Build Coastguard Worker
399*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
400*3ac0a46fSAndroid Build Coastguard Worker }
401*3ac0a46fSAndroid Build Coastguard Worker
beep(CFXJSE_Engine * runtime,const std::vector<v8::Local<v8::Value>> & params)402*3ac0a46fSAndroid Build Coastguard Worker CJS_Result CJX_HostPseudoModel::beep(
403*3ac0a46fSAndroid Build Coastguard Worker CFXJSE_Engine* runtime,
404*3ac0a46fSAndroid Build Coastguard Worker const std::vector<v8::Local<v8::Value>>& params) {
405*3ac0a46fSAndroid Build Coastguard Worker if (!runtime->IsRunAtClient()) {
406*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
407*3ac0a46fSAndroid Build Coastguard Worker }
408*3ac0a46fSAndroid Build Coastguard Worker
409*3ac0a46fSAndroid Build Coastguard Worker if (params.size() > 1)
410*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Failure(JSMessage::kParamError);
411*3ac0a46fSAndroid Build Coastguard Worker
412*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
413*3ac0a46fSAndroid Build Coastguard Worker if (!pNotify)
414*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
415*3ac0a46fSAndroid Build Coastguard Worker
416*3ac0a46fSAndroid Build Coastguard Worker uint32_t dwType = 4;
417*3ac0a46fSAndroid Build Coastguard Worker if (params.size() >= 1)
418*3ac0a46fSAndroid Build Coastguard Worker dwType = runtime->ToInt32(params[0]);
419*3ac0a46fSAndroid Build Coastguard Worker
420*3ac0a46fSAndroid Build Coastguard Worker pNotify->GetAppProvider()->Beep(dwType);
421*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
422*3ac0a46fSAndroid Build Coastguard Worker }
423*3ac0a46fSAndroid Build Coastguard Worker
setFocus(CFXJSE_Engine * runtime,const std::vector<v8::Local<v8::Value>> & params)424*3ac0a46fSAndroid Build Coastguard Worker CJS_Result CJX_HostPseudoModel::setFocus(
425*3ac0a46fSAndroid Build Coastguard Worker CFXJSE_Engine* runtime,
426*3ac0a46fSAndroid Build Coastguard Worker const std::vector<v8::Local<v8::Value>>& params) {
427*3ac0a46fSAndroid Build Coastguard Worker if (!runtime->IsRunAtClient()) {
428*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
429*3ac0a46fSAndroid Build Coastguard Worker }
430*3ac0a46fSAndroid Build Coastguard Worker
431*3ac0a46fSAndroid Build Coastguard Worker if (params.size() != 1)
432*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Failure(JSMessage::kParamError);
433*3ac0a46fSAndroid Build Coastguard Worker
434*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
435*3ac0a46fSAndroid Build Coastguard Worker if (!pNotify)
436*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
437*3ac0a46fSAndroid Build Coastguard Worker
438*3ac0a46fSAndroid Build Coastguard Worker CXFA_Node* pNode = nullptr;
439*3ac0a46fSAndroid Build Coastguard Worker if (params.size() >= 1) {
440*3ac0a46fSAndroid Build Coastguard Worker if (params[0]->IsObject()) {
441*3ac0a46fSAndroid Build Coastguard Worker pNode = ToNode(runtime->ToXFAObject(params[0]));
442*3ac0a46fSAndroid Build Coastguard Worker } else if (params[0]->IsString()) {
443*3ac0a46fSAndroid Build Coastguard Worker CXFA_Object* pObject = runtime->GetThisObject();
444*3ac0a46fSAndroid Build Coastguard Worker if (!pObject)
445*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
446*3ac0a46fSAndroid Build Coastguard Worker
447*3ac0a46fSAndroid Build Coastguard Worker constexpr Mask<XFA_ResolveFlag> kFlags = {XFA_ResolveFlag::kChildren,
448*3ac0a46fSAndroid Build Coastguard Worker XFA_ResolveFlag::kParent,
449*3ac0a46fSAndroid Build Coastguard Worker XFA_ResolveFlag::kSiblings};
450*3ac0a46fSAndroid Build Coastguard Worker absl::optional<CFXJSE_Engine::ResolveResult> maybeResult =
451*3ac0a46fSAndroid Build Coastguard Worker runtime->ResolveObjects(
452*3ac0a46fSAndroid Build Coastguard Worker pObject, runtime->ToWideString(params[0]).AsStringView(), kFlags);
453*3ac0a46fSAndroid Build Coastguard Worker if (!maybeResult.has_value() ||
454*3ac0a46fSAndroid Build Coastguard Worker !maybeResult.value().objects.front()->IsNode()) {
455*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
456*3ac0a46fSAndroid Build Coastguard Worker }
457*3ac0a46fSAndroid Build Coastguard Worker pNode = maybeResult.value().objects.front()->AsNode();
458*3ac0a46fSAndroid Build Coastguard Worker }
459*3ac0a46fSAndroid Build Coastguard Worker }
460*3ac0a46fSAndroid Build Coastguard Worker pNotify->SetFocusWidgetNode(pNode);
461*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
462*3ac0a46fSAndroid Build Coastguard Worker }
463*3ac0a46fSAndroid Build Coastguard Worker
getFocus(CFXJSE_Engine * runtime,const std::vector<v8::Local<v8::Value>> & params)464*3ac0a46fSAndroid Build Coastguard Worker CJS_Result CJX_HostPseudoModel::getFocus(
465*3ac0a46fSAndroid Build Coastguard Worker CFXJSE_Engine* runtime,
466*3ac0a46fSAndroid Build Coastguard Worker const std::vector<v8::Local<v8::Value>>& params) {
467*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
468*3ac0a46fSAndroid Build Coastguard Worker if (!pNotify)
469*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
470*3ac0a46fSAndroid Build Coastguard Worker
471*3ac0a46fSAndroid Build Coastguard Worker CXFA_Node* pNode = pNotify->GetFocusWidgetNode();
472*3ac0a46fSAndroid Build Coastguard Worker if (!pNode)
473*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
474*3ac0a46fSAndroid Build Coastguard Worker
475*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success(runtime->GetOrCreateJSBindingFromMap(pNode));
476*3ac0a46fSAndroid Build Coastguard Worker }
477*3ac0a46fSAndroid Build Coastguard Worker
messageBox(CFXJSE_Engine * runtime,const std::vector<v8::Local<v8::Value>> & params)478*3ac0a46fSAndroid Build Coastguard Worker CJS_Result CJX_HostPseudoModel::messageBox(
479*3ac0a46fSAndroid Build Coastguard Worker CFXJSE_Engine* runtime,
480*3ac0a46fSAndroid Build Coastguard Worker const std::vector<v8::Local<v8::Value>>& params) {
481*3ac0a46fSAndroid Build Coastguard Worker if (!runtime->IsRunAtClient()) {
482*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
483*3ac0a46fSAndroid Build Coastguard Worker }
484*3ac0a46fSAndroid Build Coastguard Worker
485*3ac0a46fSAndroid Build Coastguard Worker if (params.empty() || params.size() > 4)
486*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Failure(JSMessage::kParamError);
487*3ac0a46fSAndroid Build Coastguard Worker
488*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
489*3ac0a46fSAndroid Build Coastguard Worker if (!pNotify)
490*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
491*3ac0a46fSAndroid Build Coastguard Worker
492*3ac0a46fSAndroid Build Coastguard Worker WideString message;
493*3ac0a46fSAndroid Build Coastguard Worker if (params.size() >= 1)
494*3ac0a46fSAndroid Build Coastguard Worker message = runtime->ToWideString(params[0]);
495*3ac0a46fSAndroid Build Coastguard Worker
496*3ac0a46fSAndroid Build Coastguard Worker WideString title;
497*3ac0a46fSAndroid Build Coastguard Worker if (params.size() >= 2)
498*3ac0a46fSAndroid Build Coastguard Worker title = runtime->ToWideString(params[1]);
499*3ac0a46fSAndroid Build Coastguard Worker
500*3ac0a46fSAndroid Build Coastguard Worker uint32_t messageType = static_cast<uint32_t>(AlertIcon::kDefault);
501*3ac0a46fSAndroid Build Coastguard Worker if (params.size() >= 3) {
502*3ac0a46fSAndroid Build Coastguard Worker messageType = runtime->ToInt32(params[2]);
503*3ac0a46fSAndroid Build Coastguard Worker if (messageType > static_cast<uint32_t>(AlertIcon::kStatus))
504*3ac0a46fSAndroid Build Coastguard Worker messageType = static_cast<uint32_t>(AlertIcon::kDefault);
505*3ac0a46fSAndroid Build Coastguard Worker }
506*3ac0a46fSAndroid Build Coastguard Worker
507*3ac0a46fSAndroid Build Coastguard Worker uint32_t buttonType = static_cast<uint32_t>(AlertButton::kDefault);
508*3ac0a46fSAndroid Build Coastguard Worker if (params.size() >= 4) {
509*3ac0a46fSAndroid Build Coastguard Worker buttonType = runtime->ToInt32(params[3]);
510*3ac0a46fSAndroid Build Coastguard Worker if (buttonType > static_cast<uint32_t>(AlertButton::kYesNoCancel))
511*3ac0a46fSAndroid Build Coastguard Worker buttonType = static_cast<uint32_t>(AlertButton::kDefault);
512*3ac0a46fSAndroid Build Coastguard Worker }
513*3ac0a46fSAndroid Build Coastguard Worker
514*3ac0a46fSAndroid Build Coastguard Worker int32_t iValue = pNotify->GetAppProvider()->MsgBox(message, title,
515*3ac0a46fSAndroid Build Coastguard Worker messageType, buttonType);
516*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success(runtime->NewNumber(iValue));
517*3ac0a46fSAndroid Build Coastguard Worker }
518*3ac0a46fSAndroid Build Coastguard Worker
documentCountInBatch(CFXJSE_Engine * runtime,const std::vector<v8::Local<v8::Value>> & params)519*3ac0a46fSAndroid Build Coastguard Worker CJS_Result CJX_HostPseudoModel::documentCountInBatch(
520*3ac0a46fSAndroid Build Coastguard Worker CFXJSE_Engine* runtime,
521*3ac0a46fSAndroid Build Coastguard Worker const std::vector<v8::Local<v8::Value>>& params) {
522*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success(runtime->NewNumber(0));
523*3ac0a46fSAndroid Build Coastguard Worker }
524*3ac0a46fSAndroid Build Coastguard Worker
print(CFXJSE_Engine * runtime,const std::vector<v8::Local<v8::Value>> & params)525*3ac0a46fSAndroid Build Coastguard Worker CJS_Result CJX_HostPseudoModel::print(
526*3ac0a46fSAndroid Build Coastguard Worker CFXJSE_Engine* runtime,
527*3ac0a46fSAndroid Build Coastguard Worker const std::vector<v8::Local<v8::Value>>& params) {
528*3ac0a46fSAndroid Build Coastguard Worker if (!runtime->IsRunAtClient()) {
529*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
530*3ac0a46fSAndroid Build Coastguard Worker }
531*3ac0a46fSAndroid Build Coastguard Worker
532*3ac0a46fSAndroid Build Coastguard Worker if (params.size() != 8)
533*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Failure(JSMessage::kParamError);
534*3ac0a46fSAndroid Build Coastguard Worker
535*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
536*3ac0a46fSAndroid Build Coastguard Worker if (!pNotify)
537*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
538*3ac0a46fSAndroid Build Coastguard Worker
539*3ac0a46fSAndroid Build Coastguard Worker Mask<XFA_PrintOpt> dwOptions;
540*3ac0a46fSAndroid Build Coastguard Worker if (runtime->ToBoolean(params[0]))
541*3ac0a46fSAndroid Build Coastguard Worker dwOptions |= XFA_PrintOpt::kShowDialog;
542*3ac0a46fSAndroid Build Coastguard Worker if (runtime->ToBoolean(params[3]))
543*3ac0a46fSAndroid Build Coastguard Worker dwOptions |= XFA_PrintOpt::kCanCancel;
544*3ac0a46fSAndroid Build Coastguard Worker if (runtime->ToBoolean(params[4]))
545*3ac0a46fSAndroid Build Coastguard Worker dwOptions |= XFA_PrintOpt::kShrinkPage;
546*3ac0a46fSAndroid Build Coastguard Worker if (runtime->ToBoolean(params[5]))
547*3ac0a46fSAndroid Build Coastguard Worker dwOptions |= XFA_PrintOpt::kAsImage;
548*3ac0a46fSAndroid Build Coastguard Worker if (runtime->ToBoolean(params[6]))
549*3ac0a46fSAndroid Build Coastguard Worker dwOptions |= XFA_PrintOpt::kReverseOrder;
550*3ac0a46fSAndroid Build Coastguard Worker if (runtime->ToBoolean(params[7]))
551*3ac0a46fSAndroid Build Coastguard Worker dwOptions |= XFA_PrintOpt::kPrintAnnot;
552*3ac0a46fSAndroid Build Coastguard Worker
553*3ac0a46fSAndroid Build Coastguard Worker int32_t nStartPage = runtime->ToInt32(params[1]);
554*3ac0a46fSAndroid Build Coastguard Worker int32_t nEndPage = runtime->ToInt32(params[2]);
555*3ac0a46fSAndroid Build Coastguard Worker pNotify->GetFFDoc()->Print(nStartPage, nEndPage, dwOptions);
556*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
557*3ac0a46fSAndroid Build Coastguard Worker }
558*3ac0a46fSAndroid Build Coastguard Worker
importData(CFXJSE_Engine * runtime,const std::vector<v8::Local<v8::Value>> & params)559*3ac0a46fSAndroid Build Coastguard Worker CJS_Result CJX_HostPseudoModel::importData(
560*3ac0a46fSAndroid Build Coastguard Worker CFXJSE_Engine* runtime,
561*3ac0a46fSAndroid Build Coastguard Worker const std::vector<v8::Local<v8::Value>>& params) {
562*3ac0a46fSAndroid Build Coastguard Worker if (params.empty() || params.size() > 1)
563*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Failure(JSMessage::kParamError);
564*3ac0a46fSAndroid Build Coastguard Worker
565*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
566*3ac0a46fSAndroid Build Coastguard Worker }
567*3ac0a46fSAndroid Build Coastguard Worker
exportData(CFXJSE_Engine * runtime,const std::vector<v8::Local<v8::Value>> & params)568*3ac0a46fSAndroid Build Coastguard Worker CJS_Result CJX_HostPseudoModel::exportData(
569*3ac0a46fSAndroid Build Coastguard Worker CFXJSE_Engine* runtime,
570*3ac0a46fSAndroid Build Coastguard Worker const std::vector<v8::Local<v8::Value>>& params) {
571*3ac0a46fSAndroid Build Coastguard Worker if (params.empty() || params.size() > 2)
572*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Failure(JSMessage::kParamError);
573*3ac0a46fSAndroid Build Coastguard Worker
574*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
575*3ac0a46fSAndroid Build Coastguard Worker if (!pNotify)
576*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
577*3ac0a46fSAndroid Build Coastguard Worker
578*3ac0a46fSAndroid Build Coastguard Worker WideString filePath;
579*3ac0a46fSAndroid Build Coastguard Worker if (params.size() >= 1)
580*3ac0a46fSAndroid Build Coastguard Worker filePath = runtime->ToWideString(params[0]);
581*3ac0a46fSAndroid Build Coastguard Worker
582*3ac0a46fSAndroid Build Coastguard Worker bool XDP = true;
583*3ac0a46fSAndroid Build Coastguard Worker if (params.size() >= 2)
584*3ac0a46fSAndroid Build Coastguard Worker XDP = runtime->ToBoolean(params[1]);
585*3ac0a46fSAndroid Build Coastguard Worker
586*3ac0a46fSAndroid Build Coastguard Worker pNotify->GetFFDoc()->ExportData(filePath, XDP);
587*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
588*3ac0a46fSAndroid Build Coastguard Worker }
589*3ac0a46fSAndroid Build Coastguard Worker
pageUp(CFXJSE_Engine * runtime,const std::vector<v8::Local<v8::Value>> & params)590*3ac0a46fSAndroid Build Coastguard Worker CJS_Result CJX_HostPseudoModel::pageUp(
591*3ac0a46fSAndroid Build Coastguard Worker CFXJSE_Engine* runtime,
592*3ac0a46fSAndroid Build Coastguard Worker const std::vector<v8::Local<v8::Value>>& params) {
593*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
594*3ac0a46fSAndroid Build Coastguard Worker if (!pNotify)
595*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
596*3ac0a46fSAndroid Build Coastguard Worker
597*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFDoc* hDoc = pNotify->GetFFDoc();
598*3ac0a46fSAndroid Build Coastguard Worker int32_t nCurPage = hDoc->GetCurrentPage();
599*3ac0a46fSAndroid Build Coastguard Worker if (nCurPage <= 1)
600*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
601*3ac0a46fSAndroid Build Coastguard Worker
602*3ac0a46fSAndroid Build Coastguard Worker hDoc->SetCurrentPage(nCurPage - 1);
603*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
604*3ac0a46fSAndroid Build Coastguard Worker }
605*3ac0a46fSAndroid Build Coastguard Worker
pageDown(CFXJSE_Engine * runtime,const std::vector<v8::Local<v8::Value>> & params)606*3ac0a46fSAndroid Build Coastguard Worker CJS_Result CJX_HostPseudoModel::pageDown(
607*3ac0a46fSAndroid Build Coastguard Worker CFXJSE_Engine* runtime,
608*3ac0a46fSAndroid Build Coastguard Worker const std::vector<v8::Local<v8::Value>>& params) {
609*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFNotify* pNotify = GetDocument()->GetNotify();
610*3ac0a46fSAndroid Build Coastguard Worker if (!pNotify)
611*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
612*3ac0a46fSAndroid Build Coastguard Worker
613*3ac0a46fSAndroid Build Coastguard Worker CXFA_FFDoc* hDoc = pNotify->GetFFDoc();
614*3ac0a46fSAndroid Build Coastguard Worker int32_t nCurPage = hDoc->GetCurrentPage();
615*3ac0a46fSAndroid Build Coastguard Worker int32_t nPageCount = hDoc->CountPages();
616*3ac0a46fSAndroid Build Coastguard Worker if (!nPageCount || nCurPage == nPageCount)
617*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
618*3ac0a46fSAndroid Build Coastguard Worker
619*3ac0a46fSAndroid Build Coastguard Worker int32_t nNewPage = 0;
620*3ac0a46fSAndroid Build Coastguard Worker if (nCurPage >= nPageCount)
621*3ac0a46fSAndroid Build Coastguard Worker nNewPage = nPageCount - 1;
622*3ac0a46fSAndroid Build Coastguard Worker else
623*3ac0a46fSAndroid Build Coastguard Worker nNewPage = nCurPage + 1;
624*3ac0a46fSAndroid Build Coastguard Worker
625*3ac0a46fSAndroid Build Coastguard Worker hDoc->SetCurrentPage(nNewPage);
626*3ac0a46fSAndroid Build Coastguard Worker return CJS_Result::Success();
627*3ac0a46fSAndroid Build Coastguard Worker }
628