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