blob: 61d2a528533f71b7821f0637c66e6cc7ea1b6bee [file] [log] [blame]
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -07001// Copyright 2014 PDFium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
Tom Sepez7b5bc262015-03-05 16:44:22 -08004
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -07005// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
dsinclair114e46a2016-09-29 17:18:21 -07007#include "fpdfsdk/fsdk_actionhandler.h"
Dan Sinclair3ebd1212016-03-09 09:59:23 -05008
9#include <set>
10
dsinclair488b7ad2016-10-04 11:55:50 -070011#include "core/fpdfapi/parser/cpdf_array.h"
dsinclair1727aee2016-09-29 13:12:56 -070012#include "core/fpdfdoc/cpdf_formfield.h"
13#include "core/fpdfdoc/cpdf_interform.h"
dsinclair735606d2016-10-05 15:47:02 -070014#include "fpdfsdk/cpdfsdk_formfillenvironment.h"
dsinclair114e46a2016-09-29 17:18:21 -070015#include "fpdfsdk/cpdfsdk_interform.h"
16#include "fpdfsdk/fsdk_define.h"
dsinclair64376be2016-03-31 20:03:24 -070017#include "fpdfsdk/javascript/ijs_context.h"
18#include "fpdfsdk/javascript/ijs_runtime.h"
Tom Sepez6c7508b2016-01-20 14:59:25 -080019#include "third_party/base/stl_util.h"
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070020
tsepez4cf55152016-11-02 14:37:54 -070021bool CPDFSDK_ActionHandler::DoAction_DocOpen(
dsinclair19c198b2016-10-11 12:51:37 -070022 const CPDF_Action& action,
23 CPDFSDK_FormFillEnvironment* pFormFillEnv) {
Tom Sepez6c7508b2016-01-20 14:59:25 -080024 std::set<CPDF_Dictionary*> visited;
dsinclair19c198b2016-10-11 12:51:37 -070025 return ExecuteDocumentOpenAction(action, pFormFillEnv, &visited);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070026}
27
tsepez4cf55152016-11-02 14:37:54 -070028bool CPDFSDK_ActionHandler::DoAction_JavaScript(
Nico Weber9d8ec5a2015-08-04 13:00:21 -070029 const CPDF_Action& JsAction,
30 CFX_WideString csJSName,
dsinclair19c198b2016-10-11 12:51:37 -070031 CPDFSDK_FormFillEnvironment* pFormFillEnv) {
Nico Weber9d8ec5a2015-08-04 13:00:21 -070032 if (JsAction.GetType() == CPDF_Action::JavaScript) {
33 CFX_WideString swJS = JsAction.GetJavaScript();
34 if (!swJS.IsEmpty()) {
dsinclair19c198b2016-10-11 12:51:37 -070035 RunDocumentOpenJavaScript(pFormFillEnv, csJSName, swJS);
tsepez4cf55152016-11-02 14:37:54 -070036 return true;
Nico Weber9d8ec5a2015-08-04 13:00:21 -070037 }
38 }
39
tsepez4cf55152016-11-02 14:37:54 -070040 return false;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070041}
42
tsepez4cf55152016-11-02 14:37:54 -070043bool CPDFSDK_ActionHandler::DoAction_FieldJavaScript(
Nico Weber9d8ec5a2015-08-04 13:00:21 -070044 const CPDF_Action& JsAction,
45 CPDF_AAction::AActionType type,
dsinclair19c198b2016-10-11 12:51:37 -070046 CPDFSDK_FormFillEnvironment* pFormFillEnv,
Nico Weber9d8ec5a2015-08-04 13:00:21 -070047 CPDF_FormField* pFormField,
48 PDFSDK_FieldAction& data) {
dsinclair19c198b2016-10-11 12:51:37 -070049 ASSERT(pFormFillEnv);
50 if (pFormFillEnv->IsJSInitiated() &&
51 JsAction.GetType() == CPDF_Action::JavaScript) {
Nico Weber9d8ec5a2015-08-04 13:00:21 -070052 CFX_WideString swJS = JsAction.GetJavaScript();
53 if (!swJS.IsEmpty()) {
dsinclair19c198b2016-10-11 12:51:37 -070054 RunFieldJavaScript(pFormFillEnv, pFormField, type, data, swJS);
tsepez4cf55152016-11-02 14:37:54 -070055 return true;
Nico Weber9d8ec5a2015-08-04 13:00:21 -070056 }
57 }
tsepez4cf55152016-11-02 14:37:54 -070058 return false;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070059}
60
tsepez4cf55152016-11-02 14:37:54 -070061bool CPDFSDK_ActionHandler::DoAction_Page(
Nico Weber9d8ec5a2015-08-04 13:00:21 -070062 const CPDF_Action& action,
63 enum CPDF_AAction::AActionType eType,
dsinclair19c198b2016-10-11 12:51:37 -070064 CPDFSDK_FormFillEnvironment* pFormFillEnv) {
Tom Sepez6c7508b2016-01-20 14:59:25 -080065 std::set<CPDF_Dictionary*> visited;
dsinclair19c198b2016-10-11 12:51:37 -070066 return ExecuteDocumentPageAction(action, eType, pFormFillEnv, &visited);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070067}
68
tsepez4cf55152016-11-02 14:37:54 -070069bool CPDFSDK_ActionHandler::DoAction_Document(
Nico Weber9d8ec5a2015-08-04 13:00:21 -070070 const CPDF_Action& action,
71 enum CPDF_AAction::AActionType eType,
dsinclair19c198b2016-10-11 12:51:37 -070072 CPDFSDK_FormFillEnvironment* pFormFillEnv) {
Tom Sepez6c7508b2016-01-20 14:59:25 -080073 std::set<CPDF_Dictionary*> visited;
dsinclair19c198b2016-10-11 12:51:37 -070074 return ExecuteDocumentPageAction(action, eType, pFormFillEnv, &visited);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070075}
76
tsepez4cf55152016-11-02 14:37:54 -070077bool CPDFSDK_ActionHandler::DoAction_BookMark(
dsinclair19c198b2016-10-11 12:51:37 -070078 CPDF_Bookmark* pBookMark,
79 const CPDF_Action& action,
80 CPDF_AAction::AActionType type,
81 CPDFSDK_FormFillEnvironment* pFormFillEnv) {
Tom Sepez6c7508b2016-01-20 14:59:25 -080082 std::set<CPDF_Dictionary*> visited;
dsinclair19c198b2016-10-11 12:51:37 -070083 return ExecuteBookMark(action, pFormFillEnv, pBookMark, &visited);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070084}
85
tsepez4cf55152016-11-02 14:37:54 -070086bool CPDFSDK_ActionHandler::DoAction_Screen(
dsinclair19c198b2016-10-11 12:51:37 -070087 const CPDF_Action& action,
88 CPDF_AAction::AActionType type,
89 CPDFSDK_FormFillEnvironment* pFormFillEnv,
90 CPDFSDK_Annot* pScreen) {
Tom Sepez6c7508b2016-01-20 14:59:25 -080091 std::set<CPDF_Dictionary*> visited;
dsinclair19c198b2016-10-11 12:51:37 -070092 return ExecuteScreenAction(action, type, pFormFillEnv, pScreen, &visited);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070093}
94
tsepez4cf55152016-11-02 14:37:54 -070095bool CPDFSDK_ActionHandler::DoAction_Link(
dsinclair19c198b2016-10-11 12:51:37 -070096 const CPDF_Action& action,
97 CPDFSDK_FormFillEnvironment* pFormFillEnv) {
Tom Sepez6c7508b2016-01-20 14:59:25 -080098 std::set<CPDF_Dictionary*> visited;
dsinclair19c198b2016-10-11 12:51:37 -070099 return ExecuteLinkAction(action, pFormFillEnv, &visited);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700100}
101
tsepez4cf55152016-11-02 14:37:54 -0700102bool CPDFSDK_ActionHandler::DoAction_Field(
dsinclair19c198b2016-10-11 12:51:37 -0700103 const CPDF_Action& action,
104 CPDF_AAction::AActionType type,
105 CPDFSDK_FormFillEnvironment* pFormFillEnv,
106 CPDF_FormField* pFormField,
107 PDFSDK_FieldAction& data) {
Tom Sepez6c7508b2016-01-20 14:59:25 -0800108 std::set<CPDF_Dictionary*> visited;
dsinclair19c198b2016-10-11 12:51:37 -0700109 return ExecuteFieldAction(action, type, pFormFillEnv, pFormField, data,
Tom Sepez6c7508b2016-01-20 14:59:25 -0800110 &visited);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700111}
112
tsepez4cf55152016-11-02 14:37:54 -0700113bool CPDFSDK_ActionHandler::ExecuteDocumentOpenAction(
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700114 const CPDF_Action& action,
dsinclair19c198b2016-10-11 12:51:37 -0700115 CPDFSDK_FormFillEnvironment* pFormFillEnv,
Tom Sepez6c7508b2016-01-20 14:59:25 -0800116 std::set<CPDF_Dictionary*>* visited) {
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700117 CPDF_Dictionary* pDict = action.GetDict();
Tom Sepez6c7508b2016-01-20 14:59:25 -0800118 if (pdfium::ContainsKey(*visited, pDict))
tsepez4cf55152016-11-02 14:37:54 -0700119 return false;
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700120
Tom Sepez6c7508b2016-01-20 14:59:25 -0800121 visited->insert(pDict);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700122
dsinclair19c198b2016-10-11 12:51:37 -0700123 ASSERT(pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700124 if (action.GetType() == CPDF_Action::JavaScript) {
dsinclair19c198b2016-10-11 12:51:37 -0700125 if (pFormFillEnv->IsJSInitiated()) {
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700126 CFX_WideString swJS = action.GetJavaScript();
127 if (!swJS.IsEmpty()) {
dsinclair19c198b2016-10-11 12:51:37 -0700128 RunDocumentOpenJavaScript(pFormFillEnv, L"", swJS);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700129 }
130 }
131 } else {
dsinclair19c198b2016-10-11 12:51:37 -0700132 DoAction_NoJs(action, pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700133 }
134
135 for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
136 CPDF_Action subaction = action.GetSubAction(i);
dsinclair19c198b2016-10-11 12:51:37 -0700137 if (!ExecuteDocumentOpenAction(subaction, pFormFillEnv, visited))
tsepez4cf55152016-11-02 14:37:54 -0700138 return false;
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700139 }
140
tsepez4cf55152016-11-02 14:37:54 -0700141 return true;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700142}
143
tsepez4cf55152016-11-02 14:37:54 -0700144bool CPDFSDK_ActionHandler::ExecuteLinkAction(
Tom Sepez6c7508b2016-01-20 14:59:25 -0800145 const CPDF_Action& action,
dsinclair19c198b2016-10-11 12:51:37 -0700146 CPDFSDK_FormFillEnvironment* pFormFillEnv,
Tom Sepez6c7508b2016-01-20 14:59:25 -0800147 std::set<CPDF_Dictionary*>* visited) {
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700148 CPDF_Dictionary* pDict = action.GetDict();
Tom Sepez6c7508b2016-01-20 14:59:25 -0800149 if (pdfium::ContainsKey(*visited, pDict))
tsepez4cf55152016-11-02 14:37:54 -0700150 return false;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700151
Tom Sepez6c7508b2016-01-20 14:59:25 -0800152 visited->insert(pDict);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700153
dsinclair4526faf2016-10-11 10:54:49 -0700154 ASSERT(pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700155 if (action.GetType() == CPDF_Action::JavaScript) {
dsinclair4526faf2016-10-11 10:54:49 -0700156 if (pFormFillEnv->IsJSInitiated()) {
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700157 CFX_WideString swJS = action.GetJavaScript();
158 if (!swJS.IsEmpty()) {
dsinclair4526faf2016-10-11 10:54:49 -0700159 IJS_Runtime* pRuntime = pFormFillEnv->GetJSRuntime();
Tom Sepezba038bc2015-10-08 12:03:00 -0700160 IJS_Context* pContext = pRuntime->NewContext();
dsinclair4526faf2016-10-11 10:54:49 -0700161 pContext->OnLink_MouseUp(pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700162
163 CFX_WideString csInfo;
tsepez4cf55152016-11-02 14:37:54 -0700164 bool bRet = pContext->RunScript(swJS, &csInfo);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700165 if (!bRet) {
166 // FIXME: return error.
167 }
168
169 pRuntime->ReleaseContext(pContext);
170 }
171 }
172 } else {
dsinclair19c198b2016-10-11 12:51:37 -0700173 DoAction_NoJs(action, pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700174 }
175
176 for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
177 CPDF_Action subaction = action.GetSubAction(i);
dsinclair19c198b2016-10-11 12:51:37 -0700178 if (!ExecuteLinkAction(subaction, pFormFillEnv, visited))
tsepez4cf55152016-11-02 14:37:54 -0700179 return false;
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700180 }
181
tsepez4cf55152016-11-02 14:37:54 -0700182 return true;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700183}
184
tsepez4cf55152016-11-02 14:37:54 -0700185bool CPDFSDK_ActionHandler::ExecuteDocumentPageAction(
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700186 const CPDF_Action& action,
187 CPDF_AAction::AActionType type,
dsinclair19c198b2016-10-11 12:51:37 -0700188 CPDFSDK_FormFillEnvironment* pFormFillEnv,
Tom Sepez6c7508b2016-01-20 14:59:25 -0800189 std::set<CPDF_Dictionary*>* visited) {
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700190 CPDF_Dictionary* pDict = action.GetDict();
Tom Sepez6c7508b2016-01-20 14:59:25 -0800191 if (pdfium::ContainsKey(*visited, pDict))
tsepez4cf55152016-11-02 14:37:54 -0700192 return false;
Tom Sepez7b5bc262015-03-05 16:44:22 -0800193
Tom Sepez6c7508b2016-01-20 14:59:25 -0800194 visited->insert(pDict);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700195
dsinclair19c198b2016-10-11 12:51:37 -0700196 ASSERT(pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700197 if (action.GetType() == CPDF_Action::JavaScript) {
dsinclair19c198b2016-10-11 12:51:37 -0700198 if (pFormFillEnv->IsJSInitiated()) {
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700199 CFX_WideString swJS = action.GetJavaScript();
200 if (!swJS.IsEmpty()) {
dsinclair19c198b2016-10-11 12:51:37 -0700201 RunDocumentPageJavaScript(pFormFillEnv, type, swJS);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700202 }
203 }
204 } else {
dsinclair19c198b2016-10-11 12:51:37 -0700205 DoAction_NoJs(action, pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700206 }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700207
dsinclair19c198b2016-10-11 12:51:37 -0700208 if (!IsValidDocView(pFormFillEnv))
tsepez4cf55152016-11-02 14:37:54 -0700209 return false;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700210
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700211 for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
212 CPDF_Action subaction = action.GetSubAction(i);
dsinclair19c198b2016-10-11 12:51:37 -0700213 if (!ExecuteDocumentPageAction(subaction, type, pFormFillEnv, visited))
tsepez4cf55152016-11-02 14:37:54 -0700214 return false;
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700215 }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700216
tsepez4cf55152016-11-02 14:37:54 -0700217 return true;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700218}
219
tsepez4cf55152016-11-02 14:37:54 -0700220bool CPDFSDK_ActionHandler::IsValidField(
dsinclair19c198b2016-10-11 12:51:37 -0700221 CPDFSDK_FormFillEnvironment* pFormFillEnv,
222 CPDF_Dictionary* pFieldDict) {
Lei Zhang96660d62015-12-14 18:27:25 -0800223 ASSERT(pFieldDict);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700224
dsinclair7cbe68e2016-10-12 11:56:23 -0700225 CPDFSDK_InterForm* pInterForm = pFormFillEnv->GetInterForm();
Chris Palmer9047b8b2014-08-06 14:17:45 -0700226 CPDF_InterForm* pPDFInterForm = pInterForm->GetInterForm();
thestig1cd352e2016-06-07 17:53:06 -0700227 return !!pPDFInterForm->GetFieldByDict(pFieldDict);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700228}
229
tsepez4cf55152016-11-02 14:37:54 -0700230bool CPDFSDK_ActionHandler::ExecuteFieldAction(
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700231 const CPDF_Action& action,
232 CPDF_AAction::AActionType type,
dsinclair19c198b2016-10-11 12:51:37 -0700233 CPDFSDK_FormFillEnvironment* pFormFillEnv,
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700234 CPDF_FormField* pFormField,
235 PDFSDK_FieldAction& data,
Tom Sepez6c7508b2016-01-20 14:59:25 -0800236 std::set<CPDF_Dictionary*>* visited) {
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700237 CPDF_Dictionary* pDict = action.GetDict();
Tom Sepez6c7508b2016-01-20 14:59:25 -0800238 if (pdfium::ContainsKey(*visited, pDict))
tsepez4cf55152016-11-02 14:37:54 -0700239 return false;
Tom Sepez7b5bc262015-03-05 16:44:22 -0800240
Tom Sepez6c7508b2016-01-20 14:59:25 -0800241 visited->insert(pDict);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700242
dsinclair19c198b2016-10-11 12:51:37 -0700243 ASSERT(pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700244 if (action.GetType() == CPDF_Action::JavaScript) {
dsinclair19c198b2016-10-11 12:51:37 -0700245 if (pFormFillEnv->IsJSInitiated()) {
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700246 CFX_WideString swJS = action.GetJavaScript();
247 if (!swJS.IsEmpty()) {
dsinclair19c198b2016-10-11 12:51:37 -0700248 RunFieldJavaScript(pFormFillEnv, pFormField, type, data, swJS);
249 if (!IsValidField(pFormFillEnv, pFormField->GetFieldDict()))
tsepez4cf55152016-11-02 14:37:54 -0700250 return false;
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700251 }
252 }
253 } else {
dsinclair19c198b2016-10-11 12:51:37 -0700254 DoAction_NoJs(action, pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700255 }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700256
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700257 for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
258 CPDF_Action subaction = action.GetSubAction(i);
dsinclair19c198b2016-10-11 12:51:37 -0700259 if (!ExecuteFieldAction(subaction, type, pFormFillEnv, pFormField, data,
Tom Sepez6c7508b2016-01-20 14:59:25 -0800260 visited))
tsepez4cf55152016-11-02 14:37:54 -0700261 return false;
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700262 }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700263
tsepez4cf55152016-11-02 14:37:54 -0700264 return true;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700265}
266
tsepez4cf55152016-11-02 14:37:54 -0700267bool CPDFSDK_ActionHandler::ExecuteScreenAction(
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700268 const CPDF_Action& action,
269 CPDF_AAction::AActionType type,
dsinclair19c198b2016-10-11 12:51:37 -0700270 CPDFSDK_FormFillEnvironment* pFormFillEnv,
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700271 CPDFSDK_Annot* pScreen,
Tom Sepez6c7508b2016-01-20 14:59:25 -0800272 std::set<CPDF_Dictionary*>* visited) {
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700273 CPDF_Dictionary* pDict = action.GetDict();
Tom Sepez6c7508b2016-01-20 14:59:25 -0800274 if (pdfium::ContainsKey(*visited, pDict))
tsepez4cf55152016-11-02 14:37:54 -0700275 return false;
Tom Sepez7b5bc262015-03-05 16:44:22 -0800276
Tom Sepez6c7508b2016-01-20 14:59:25 -0800277 visited->insert(pDict);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700278
dsinclair19c198b2016-10-11 12:51:37 -0700279 ASSERT(pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700280 if (action.GetType() == CPDF_Action::JavaScript) {
dsinclair19c198b2016-10-11 12:51:37 -0700281 if (pFormFillEnv->IsJSInitiated()) {
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700282 CFX_WideString swJS = action.GetJavaScript();
283 if (!swJS.IsEmpty()) {
dsinclair19c198b2016-10-11 12:51:37 -0700284 IJS_Runtime* pRuntime = pFormFillEnv->GetJSRuntime();
Tom Sepezba038bc2015-10-08 12:03:00 -0700285 IJS_Context* pContext = pRuntime->NewContext();
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700286 CFX_WideString csInfo;
tsepez4cf55152016-11-02 14:37:54 -0700287 bool bRet = pContext->RunScript(swJS, &csInfo);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700288 if (!bRet) {
Tom Sepez33420902015-10-13 15:00:10 -0700289 // FIXME: return error.
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700290 }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700291
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700292 pRuntime->ReleaseContext(pContext);
293 }
294 }
295 } else {
dsinclair19c198b2016-10-11 12:51:37 -0700296 DoAction_NoJs(action, pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700297 }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700298
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700299 for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
300 CPDF_Action subaction = action.GetSubAction(i);
dsinclair19c198b2016-10-11 12:51:37 -0700301 if (!ExecuteScreenAction(subaction, type, pFormFillEnv, pScreen, visited))
tsepez4cf55152016-11-02 14:37:54 -0700302 return false;
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700303 }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700304
tsepez4cf55152016-11-02 14:37:54 -0700305 return true;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700306}
307
tsepez4cf55152016-11-02 14:37:54 -0700308bool CPDFSDK_ActionHandler::ExecuteBookMark(
Tom Sepez6c7508b2016-01-20 14:59:25 -0800309 const CPDF_Action& action,
dsinclair19c198b2016-10-11 12:51:37 -0700310 CPDFSDK_FormFillEnvironment* pFormFillEnv,
Tom Sepez6c7508b2016-01-20 14:59:25 -0800311 CPDF_Bookmark* pBookmark,
312 std::set<CPDF_Dictionary*>* visited) {
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700313 CPDF_Dictionary* pDict = action.GetDict();
Tom Sepez6c7508b2016-01-20 14:59:25 -0800314 if (pdfium::ContainsKey(*visited, pDict))
tsepez4cf55152016-11-02 14:37:54 -0700315 return false;
Tom Sepez7b5bc262015-03-05 16:44:22 -0800316
Tom Sepez6c7508b2016-01-20 14:59:25 -0800317 visited->insert(pDict);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700318
dsinclair19c198b2016-10-11 12:51:37 -0700319 ASSERT(pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700320 if (action.GetType() == CPDF_Action::JavaScript) {
dsinclair19c198b2016-10-11 12:51:37 -0700321 if (pFormFillEnv->IsJSInitiated()) {
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700322 CFX_WideString swJS = action.GetJavaScript();
323 if (!swJS.IsEmpty()) {
dsinclair19c198b2016-10-11 12:51:37 -0700324 IJS_Runtime* pRuntime = pFormFillEnv->GetJSRuntime();
Tom Sepezba038bc2015-10-08 12:03:00 -0700325 IJS_Context* pContext = pRuntime->NewContext();
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700326 pContext->OnBookmark_MouseUp(pBookmark);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700327
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700328 CFX_WideString csInfo;
tsepez4cf55152016-11-02 14:37:54 -0700329 bool bRet = pContext->RunScript(swJS, &csInfo);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700330 if (!bRet) {
Tom Sepez33420902015-10-13 15:00:10 -0700331 // FIXME: return error.
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700332 }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700333
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700334 pRuntime->ReleaseContext(pContext);
335 }
336 }
337 } else {
dsinclair19c198b2016-10-11 12:51:37 -0700338 DoAction_NoJs(action, pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700339 }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700340
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700341 for (int32_t i = 0, sz = action.GetSubActionsCount(); i < sz; i++) {
342 CPDF_Action subaction = action.GetSubAction(i);
dsinclair19c198b2016-10-11 12:51:37 -0700343 if (!ExecuteBookMark(subaction, pFormFillEnv, pBookmark, visited))
tsepez4cf55152016-11-02 14:37:54 -0700344 return false;
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700345 }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700346
tsepez4cf55152016-11-02 14:37:54 -0700347 return true;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700348}
349
dsinclair19c198b2016-10-11 12:51:37 -0700350void CPDFSDK_ActionHandler::DoAction_NoJs(
351 const CPDF_Action& action,
352 CPDFSDK_FormFillEnvironment* pFormFillEnv) {
353 ASSERT(pFormFillEnv);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700354
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700355 switch (action.GetType()) {
356 case CPDF_Action::GoTo:
dsinclair19c198b2016-10-11 12:51:37 -0700357 DoAction_GoTo(pFormFillEnv, action);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700358 break;
359 case CPDF_Action::GoToR:
dsinclair19c198b2016-10-11 12:51:37 -0700360 DoAction_GoToR(pFormFillEnv, action);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700361 break;
362 case CPDF_Action::GoToE:
363 break;
364 case CPDF_Action::Launch:
dsinclair19c198b2016-10-11 12:51:37 -0700365 DoAction_Launch(pFormFillEnv, action);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700366 break;
367 case CPDF_Action::Thread:
368 break;
369 case CPDF_Action::URI:
dsinclair19c198b2016-10-11 12:51:37 -0700370 DoAction_URI(pFormFillEnv, action);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700371 break;
372 case CPDF_Action::Sound:
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700373 break;
374 case CPDF_Action::Movie:
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700375 break;
376 case CPDF_Action::Hide:
dsinclair19c198b2016-10-11 12:51:37 -0700377 DoAction_Hide(action, pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700378 break;
379 case CPDF_Action::Named:
dsinclair19c198b2016-10-11 12:51:37 -0700380 DoAction_Named(pFormFillEnv, action);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700381 break;
382 case CPDF_Action::SubmitForm:
dsinclair19c198b2016-10-11 12:51:37 -0700383 DoAction_SubmitForm(action, pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700384 break;
385 case CPDF_Action::ResetForm:
dsinclair19c198b2016-10-11 12:51:37 -0700386 DoAction_ResetForm(action, pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700387 break;
388 case CPDF_Action::ImportData:
dsinclair19c198b2016-10-11 12:51:37 -0700389 DoAction_ImportData(action, pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700390 break;
391 case CPDF_Action::JavaScript:
tsepez4cf55152016-11-02 14:37:54 -0700392 ASSERT(false);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700393 break;
394 case CPDF_Action::SetOCGState:
dsinclair19c198b2016-10-11 12:51:37 -0700395 DoAction_SetOCGState(pFormFillEnv, action);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700396 break;
397 case CPDF_Action::Rendition:
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700398 break;
399 case CPDF_Action::Trans:
400 break;
401 case CPDF_Action::GoTo3DView:
402 break;
403 default:
404 break;
405 }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700406}
407
tsepez4cf55152016-11-02 14:37:54 -0700408bool CPDFSDK_ActionHandler::IsValidDocView(
dsinclair19c198b2016-10-11 12:51:37 -0700409 CPDFSDK_FormFillEnvironment* pFormFillEnv) {
410 ASSERT(pFormFillEnv);
tsepez4cf55152016-11-02 14:37:54 -0700411 return true;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700412}
413
dsinclair19c198b2016-10-11 12:51:37 -0700414void CPDFSDK_ActionHandler::DoAction_GoTo(
415 CPDFSDK_FormFillEnvironment* pFormFillEnv,
416 const CPDF_Action& action) {
Wei Li0fc6b252016-03-01 16:29:41 -0800417 ASSERT(action.GetDict());
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700418
dsinclair7cbe68e2016-10-12 11:56:23 -0700419 CPDF_Document* pPDFDocument = pFormFillEnv->GetPDFDocument();
Dan Sinclair2b11dc12015-10-22 15:02:06 -0400420 ASSERT(pPDFDocument);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700421
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700422 CPDF_Dest MyDest = action.GetDest(pPDFDocument);
423 int nPageIndex = MyDest.GetPageIndex(pPDFDocument);
424 int nFitType = MyDest.GetZoomMode();
Dan Sinclair2b11dc12015-10-22 15:02:06 -0400425 const CPDF_Array* pMyArray = ToArray(MyDest.GetObject());
426 float* pPosAry = nullptr;
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700427 int sizeOfAry = 0;
Dan Sinclair2b11dc12015-10-22 15:02:06 -0400428 if (pMyArray) {
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700429 pPosAry = new float[pMyArray->GetCount()];
430 int j = 0;
Wei Lie1aebd42016-04-11 10:02:09 -0700431 for (size_t i = 2; i < pMyArray->GetCount(); i++) {
Wei Li9b761132016-01-29 15:44:20 -0800432 pPosAry[j++] = pMyArray->GetFloatAt(i);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700433 }
434 sizeOfAry = j;
435 }
Dan Sinclair2b11dc12015-10-22 15:02:06 -0400436
dsinclair19c198b2016-10-11 12:51:37 -0700437 pFormFillEnv->DoGoToAction(nPageIndex, nFitType, pPosAry, sizeOfAry);
Lei Zhangda180e92015-08-14 22:22:13 -0700438 delete[] pPosAry;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700439}
440
dsinclair19c198b2016-10-11 12:51:37 -0700441void CPDFSDK_ActionHandler::DoAction_GoToR(
442 CPDFSDK_FormFillEnvironment* pFormFillEnv,
443 const CPDF_Action& action) {}
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700444
dsinclair19c198b2016-10-11 12:51:37 -0700445void CPDFSDK_ActionHandler::DoAction_Launch(
446 CPDFSDK_FormFillEnvironment* pFormFillEnv,
447 const CPDF_Action& action) {}
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700448
dsinclair19c198b2016-10-11 12:51:37 -0700449void CPDFSDK_ActionHandler::DoAction_URI(
450 CPDFSDK_FormFillEnvironment* pFormFillEnv,
451 const CPDF_Action& action) {
Wei Li0fc6b252016-03-01 16:29:41 -0800452 ASSERT(action.GetDict());
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700453
dsinclair7cbe68e2016-10-12 11:56:23 -0700454 CFX_ByteString sURI = action.GetURI(pFormFillEnv->GetPDFDocument());
dsinclair19c198b2016-10-11 12:51:37 -0700455 pFormFillEnv->DoURIAction(sURI.c_str());
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700456}
457
dsinclair19c198b2016-10-11 12:51:37 -0700458void CPDFSDK_ActionHandler::DoAction_Named(
459 CPDFSDK_FormFillEnvironment* pFormFillEnv,
460 const CPDF_Action& action) {
Wei Li0fc6b252016-03-01 16:29:41 -0800461 ASSERT(action.GetDict());
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700462
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700463 CFX_ByteString csName = action.GetNamedAction();
dsinclair19c198b2016-10-11 12:51:37 -0700464 pFormFillEnv->ExecuteNamedAction(csName.c_str());
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700465}
466
dsinclair19c198b2016-10-11 12:51:37 -0700467void CPDFSDK_ActionHandler::DoAction_SetOCGState(
468 CPDFSDK_FormFillEnvironment* pFormFillEnv,
469 const CPDF_Action& action) {}
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700470
dsinclair19c198b2016-10-11 12:51:37 -0700471void CPDFSDK_ActionHandler::RunFieldJavaScript(
472 CPDFSDK_FormFillEnvironment* pFormFillEnv,
473 CPDF_FormField* pFormField,
474 CPDF_AAction::AActionType type,
475 PDFSDK_FieldAction& data,
476 const CFX_WideString& script) {
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700477 ASSERT(type != CPDF_AAction::Calculate);
478 ASSERT(type != CPDF_AAction::Format);
Tom Sepezd7e5cc72015-06-10 14:33:37 -0700479
dsinclair19c198b2016-10-11 12:51:37 -0700480 IJS_Runtime* pRuntime = pFormFillEnv->GetJSRuntime();
Tom Sepezba038bc2015-10-08 12:03:00 -0700481 IJS_Context* pContext = pRuntime->NewContext();
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700482 switch (type) {
483 case CPDF_AAction::CursorEnter:
484 pContext->OnField_MouseEnter(data.bModifier, data.bShift, pFormField);
485 break;
486 case CPDF_AAction::CursorExit:
487 pContext->OnField_MouseExit(data.bModifier, data.bShift, pFormField);
488 break;
489 case CPDF_AAction::ButtonDown:
490 pContext->OnField_MouseDown(data.bModifier, data.bShift, pFormField);
491 break;
492 case CPDF_AAction::ButtonUp:
493 pContext->OnField_MouseUp(data.bModifier, data.bShift, pFormField);
494 break;
495 case CPDF_AAction::GetFocus:
496 pContext->OnField_Focus(data.bModifier, data.bShift, pFormField,
497 data.sValue);
498 break;
499 case CPDF_AAction::LoseFocus:
500 pContext->OnField_Blur(data.bModifier, data.bShift, pFormField,
501 data.sValue);
502 break;
503 case CPDF_AAction::KeyStroke:
504 pContext->OnField_Keystroke(data.sChange, data.sChangeEx, data.bKeyDown,
505 data.bModifier, data.nSelEnd, data.nSelStart,
506 data.bShift, pFormField, data.sValue,
507 data.bWillCommit, data.bFieldFull, data.bRC);
508 break;
509 case CPDF_AAction::Validate:
510 pContext->OnField_Validate(data.sChange, data.sChangeEx, data.bKeyDown,
511 data.bModifier, data.bShift, pFormField,
512 data.sValue, data.bRC);
513 break;
514 default:
tsepez4cf55152016-11-02 14:37:54 -0700515 ASSERT(false);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700516 break;
517 }
518
519 CFX_WideString csInfo;
tsepez4cf55152016-11-02 14:37:54 -0700520 bool bRet = pContext->RunScript(script, &csInfo);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700521 if (!bRet) {
Tom Sepez33420902015-10-13 15:00:10 -0700522 // FIXME: return error.
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700523 }
524
525 pRuntime->ReleaseContext(pContext);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700526}
527
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700528void CPDFSDK_ActionHandler::RunDocumentOpenJavaScript(
dsinclair19c198b2016-10-11 12:51:37 -0700529 CPDFSDK_FormFillEnvironment* pFormFillEnv,
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700530 const CFX_WideString& sScriptName,
531 const CFX_WideString& script) {
dsinclair19c198b2016-10-11 12:51:37 -0700532 IJS_Runtime* pRuntime = pFormFillEnv->GetJSRuntime();
Tom Sepezba038bc2015-10-08 12:03:00 -0700533 IJS_Context* pContext = pRuntime->NewContext();
dsinclair19c198b2016-10-11 12:51:37 -0700534 pContext->OnDoc_Open(pFormFillEnv, sScriptName);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700535
536 CFX_WideString csInfo;
tsepez4cf55152016-11-02 14:37:54 -0700537 bool bRet = pContext->RunScript(script, &csInfo);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700538 if (!bRet) {
Tom Sepez33420902015-10-13 15:00:10 -0700539 // FIXME: return error.
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700540 }
541
542 pRuntime->ReleaseContext(pContext);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700543}
544
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700545void CPDFSDK_ActionHandler::RunDocumentPageJavaScript(
dsinclair19c198b2016-10-11 12:51:37 -0700546 CPDFSDK_FormFillEnvironment* pFormFillEnv,
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700547 CPDF_AAction::AActionType type,
548 const CFX_WideString& script) {
dsinclair19c198b2016-10-11 12:51:37 -0700549 IJS_Runtime* pRuntime = pFormFillEnv->GetJSRuntime();
Tom Sepezba038bc2015-10-08 12:03:00 -0700550 IJS_Context* pContext = pRuntime->NewContext();
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700551 switch (type) {
552 case CPDF_AAction::OpenPage:
dsinclair19c198b2016-10-11 12:51:37 -0700553 pContext->OnPage_Open(pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700554 break;
555 case CPDF_AAction::ClosePage:
dsinclair19c198b2016-10-11 12:51:37 -0700556 pContext->OnPage_Close(pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700557 break;
558 case CPDF_AAction::CloseDocument:
dsinclair19c198b2016-10-11 12:51:37 -0700559 pContext->OnDoc_WillClose(pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700560 break;
561 case CPDF_AAction::SaveDocument:
dsinclair19c198b2016-10-11 12:51:37 -0700562 pContext->OnDoc_WillSave(pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700563 break;
564 case CPDF_AAction::DocumentSaved:
dsinclair19c198b2016-10-11 12:51:37 -0700565 pContext->OnDoc_DidSave(pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700566 break;
567 case CPDF_AAction::PrintDocument:
dsinclair19c198b2016-10-11 12:51:37 -0700568 pContext->OnDoc_WillPrint(pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700569 break;
570 case CPDF_AAction::DocumentPrinted:
dsinclair19c198b2016-10-11 12:51:37 -0700571 pContext->OnDoc_DidPrint(pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700572 break;
573 case CPDF_AAction::PageVisible:
dsinclair19c198b2016-10-11 12:51:37 -0700574 pContext->OnPage_InView(pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700575 break;
576 case CPDF_AAction::PageInvisible:
dsinclair19c198b2016-10-11 12:51:37 -0700577 pContext->OnPage_OutView(pFormFillEnv);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700578 break;
579 default:
tsepez4cf55152016-11-02 14:37:54 -0700580 ASSERT(false);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700581 break;
582 }
583
584 CFX_WideString csInfo;
tsepez4cf55152016-11-02 14:37:54 -0700585 bool bRet = pContext->RunScript(script, &csInfo);
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700586 if (!bRet) {
Tom Sepez33420902015-10-13 15:00:10 -0700587 // FIXME: return error.
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700588 }
589
590 pRuntime->ReleaseContext(pContext);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700591}
592
tsepez4cf55152016-11-02 14:37:54 -0700593bool CPDFSDK_ActionHandler::DoAction_Hide(
dsinclair19c198b2016-10-11 12:51:37 -0700594 const CPDF_Action& action,
595 CPDFSDK_FormFillEnvironment* pFormFillEnv) {
dsinclair7cbe68e2016-10-12 11:56:23 -0700596 CPDFSDK_InterForm* pInterForm = pFormFillEnv->GetInterForm();
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700597 if (pInterForm->DoAction_Hide(action)) {
dsinclair7cbe68e2016-10-12 11:56:23 -0700598 pFormFillEnv->SetChangeMark();
tsepez4cf55152016-11-02 14:37:54 -0700599 return true;
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700600 }
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700601
tsepez4cf55152016-11-02 14:37:54 -0700602 return false;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700603}
604
tsepez4cf55152016-11-02 14:37:54 -0700605bool CPDFSDK_ActionHandler::DoAction_SubmitForm(
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700606 const CPDF_Action& action,
dsinclair19c198b2016-10-11 12:51:37 -0700607 CPDFSDK_FormFillEnvironment* pFormFillEnv) {
dsinclair7cbe68e2016-10-12 11:56:23 -0700608 CPDFSDK_InterForm* pInterForm = pFormFillEnv->GetInterForm();
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700609 return pInterForm->DoAction_SubmitForm(action);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700610}
611
tsepez4cf55152016-11-02 14:37:54 -0700612bool CPDFSDK_ActionHandler::DoAction_ResetForm(
dsinclair19c198b2016-10-11 12:51:37 -0700613 const CPDF_Action& action,
614 CPDFSDK_FormFillEnvironment* pFormFillEnv) {
dsinclair7cbe68e2016-10-12 11:56:23 -0700615 CPDFSDK_InterForm* pInterForm = pFormFillEnv->GetInterForm();
Lei Zhang96660d62015-12-14 18:27:25 -0800616 return pInterForm->DoAction_ResetForm(action);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700617}
618
tsepez4cf55152016-11-02 14:37:54 -0700619bool CPDFSDK_ActionHandler::DoAction_ImportData(
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700620 const CPDF_Action& action,
dsinclair19c198b2016-10-11 12:51:37 -0700621 CPDFSDK_FormFillEnvironment* pFormFillEnv) {
dsinclair7cbe68e2016-10-12 11:56:23 -0700622 CPDFSDK_InterForm* pInterForm = pFormFillEnv->GetInterForm();
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700623 if (pInterForm->DoAction_ImportData(action)) {
dsinclair7cbe68e2016-10-12 11:56:23 -0700624 pFormFillEnv->SetChangeMark();
tsepez4cf55152016-11-02 14:37:54 -0700625 return true;
Nico Weber9d8ec5a2015-08-04 13:00:21 -0700626 }
Tom Sepez7b5bc262015-03-05 16:44:22 -0800627
tsepez4cf55152016-11-02 14:37:54 -0700628 return false;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700629}