blob: a8bd9cfefdfb5f5afc47a04fad0eea47454ef59e [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.
Lei Zhanga6d9f0e2015-06-13 00:48:38 -07004
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -07005// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
Dan Sinclair7d125322018-03-28 18:49:34 +00007#ifndef FPDFSDK_CPDFSDK_ACTIONHANDLER_H_
8#define FPDFSDK_CPDFSDK_ACTIONHANDLER_H_
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -07009
Tom Sepez6c7508b2016-01-20 14:59:25 -080010#include <set>
Lei Zhangf3cc72f2018-09-20 01:20:45 +000011#include <utility>
Lei Zhangaa8bf7e2015-12-24 19:13:32 -080012
dsinclair1727aee2016-09-29 13:12:56 -070013#include "core/fpdfdoc/cpdf_aaction.h"
14#include "core/fpdfdoc/cpdf_action.h"
dsinclaira52ab742016-09-29 13:59:29 -070015#include "core/fxcrt/fx_string.h"
Dan Sinclair7d125322018-03-28 18:49:34 +000016#include "fpdfsdk/cpdfsdk_fieldaction.h"
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070017
Tom Sepez245c80e2015-04-08 16:19:33 -070018class CPDFSDK_Annot;
dsinclair19c198b2016-10-11 12:51:37 -070019class CPDFSDK_FormFillEnvironment;
Tom Sepez245c80e2015-04-08 16:19:33 -070020class CPDF_Dictionary;
jaepark611adb82016-08-17 11:34:36 -070021class CPDF_FormField;
Dan Sinclair8cdea722018-01-30 18:56:50 +000022class IJS_EventContext;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070023
Nico Weber9d8ec5a2015-08-04 13:00:21 -070024class CPDFSDK_ActionHandler {
25 public:
tsepez4cf55152016-11-02 14:37:54 -070026 bool DoAction_DocOpen(const CPDF_Action& action,
27 CPDFSDK_FormFillEnvironment* pFormFillEnv);
28 bool DoAction_JavaScript(const CPDF_Action& JsAction,
Ryan Harrison275e2602017-09-18 14:23:18 -040029 WideString csJSName,
dsinclair19c198b2016-10-11 12:51:37 -070030 CPDFSDK_FormFillEnvironment* pFormFillEnv);
tsepez4cf55152016-11-02 14:37:54 -070031 bool DoAction_Page(const CPDF_Action& action,
32 enum CPDF_AAction::AActionType eType,
33 CPDFSDK_FormFillEnvironment* pFormFillEnv);
34 bool DoAction_Document(const CPDF_Action& action,
35 enum CPDF_AAction::AActionType eType,
36 CPDFSDK_FormFillEnvironment* pFormFillEnv);
tsepez4cf55152016-11-02 14:37:54 -070037 bool DoAction_Field(const CPDF_Action& action,
38 CPDF_AAction::AActionType type,
39 CPDFSDK_FormFillEnvironment* pFormFillEnv,
40 CPDF_FormField* pFormField,
Dan Sinclair7d125322018-03-28 18:49:34 +000041 CPDFSDK_FieldAction* data);
tsepez4cf55152016-11-02 14:37:54 -070042 bool DoAction_FieldJavaScript(const CPDF_Action& JsAction,
43 CPDF_AAction::AActionType type,
44 CPDFSDK_FormFillEnvironment* pFormFillEnv,
45 CPDF_FormField* pFormField,
Dan Sinclair7d125322018-03-28 18:49:34 +000046 CPDFSDK_FieldAction* data);
Lei Zhanga6d9f0e2015-06-13 00:48:38 -070047
Nico Weber9d8ec5a2015-08-04 13:00:21 -070048 private:
Lei Zhang9d7c7ff2018-03-16 19:25:30 +000049 using RunScriptCallback = std::function<void(IJS_EventContext* context)>;
50
Dan Sinclair8cdea722018-01-30 18:56:50 +000051 void RunScript(CPDFSDK_FormFillEnvironment* pFormFillEnv,
52 const WideString& script,
Lei Zhang9d7c7ff2018-03-16 19:25:30 +000053 const RunScriptCallback& cb);
Dan Sinclair8cdea722018-01-30 18:56:50 +000054
tsepez4cf55152016-11-02 14:37:54 -070055 bool ExecuteDocumentOpenAction(const CPDF_Action& action,
56 CPDFSDK_FormFillEnvironment* pFormFillEnv,
Lei Zhang5cee3f22018-05-25 21:48:49 +000057 std::set<const CPDF_Dictionary*>* visited);
tsepez4cf55152016-11-02 14:37:54 -070058 bool ExecuteDocumentPageAction(const CPDF_Action& action,
59 CPDF_AAction::AActionType type,
60 CPDFSDK_FormFillEnvironment* pFormFillEnv,
Lei Zhang5cee3f22018-05-25 21:48:49 +000061 std::set<const CPDF_Dictionary*>* visited);
tsepez4cf55152016-11-02 14:37:54 -070062 bool ExecuteFieldAction(const CPDF_Action& action,
63 CPDF_AAction::AActionType type,
dsinclair19c198b2016-10-11 12:51:37 -070064 CPDFSDK_FormFillEnvironment* pFormFillEnv,
tsepez4cf55152016-11-02 14:37:54 -070065 CPDF_FormField* pFormField,
Dan Sinclair7d125322018-03-28 18:49:34 +000066 CPDFSDK_FieldAction* data,
Lei Zhang5cee3f22018-05-25 21:48:49 +000067 std::set<const CPDF_Dictionary*>* visited);
Lei Zhanga6d9f0e2015-06-13 00:48:38 -070068
dsinclair19c198b2016-10-11 12:51:37 -070069 void DoAction_NoJs(const CPDF_Action& action,
Henrique Nakashima9ef93d02018-10-03 18:41:03 +000070 CPDF_AAction::AActionType type,
dsinclair19c198b2016-10-11 12:51:37 -070071 CPDFSDK_FormFillEnvironment* pFormFillEnv);
72 void RunDocumentPageJavaScript(CPDFSDK_FormFillEnvironment* pFormFillEnv,
Nico Weber9d8ec5a2015-08-04 13:00:21 -070073 CPDF_AAction::AActionType type,
Ryan Harrison275e2602017-09-18 14:23:18 -040074 const WideString& script);
dsinclair19c198b2016-10-11 12:51:37 -070075 void RunDocumentOpenJavaScript(CPDFSDK_FormFillEnvironment* pFormFillEnv,
Ryan Harrison275e2602017-09-18 14:23:18 -040076 const WideString& sScriptName,
77 const WideString& script);
dsinclair19c198b2016-10-11 12:51:37 -070078 void RunFieldJavaScript(CPDFSDK_FormFillEnvironment* pFormFillEnv,
Nico Weber9d8ec5a2015-08-04 13:00:21 -070079 CPDF_FormField* pFormField,
80 CPDF_AAction::AActionType type,
Dan Sinclair7d125322018-03-28 18:49:34 +000081 CPDFSDK_FieldAction* data,
Ryan Harrison275e2602017-09-18 14:23:18 -040082 const WideString& script);
Lei Zhanga6d9f0e2015-06-13 00:48:38 -070083
tsepez4cf55152016-11-02 14:37:54 -070084 bool IsValidField(CPDFSDK_FormFillEnvironment* pFormFillEnv,
85 CPDF_Dictionary* pFieldDict);
Lei Zhanga6d9f0e2015-06-13 00:48:38 -070086
dsinclair19c198b2016-10-11 12:51:37 -070087 void DoAction_GoTo(CPDFSDK_FormFillEnvironment* pFormFillEnv,
88 const CPDF_Action& action);
dsinclair19c198b2016-10-11 12:51:37 -070089 void DoAction_Launch(CPDFSDK_FormFillEnvironment* pFormFillEnv,
90 const CPDF_Action& action);
91 void DoAction_URI(CPDFSDK_FormFillEnvironment* pFormFillEnv,
92 const CPDF_Action& action);
93 void DoAction_Named(CPDFSDK_FormFillEnvironment* pFormFillEnv,
94 const CPDF_Action& action);
Lei Zhanga6d9f0e2015-06-13 00:48:38 -070095
tsepez4cf55152016-11-02 14:37:54 -070096 bool DoAction_Hide(const CPDF_Action& action,
97 CPDFSDK_FormFillEnvironment* pFormFillEnv);
98 bool DoAction_SubmitForm(const CPDF_Action& action,
99 CPDFSDK_FormFillEnvironment* pFormFillEnv);
dan sinclair7544a4b2018-03-08 15:19:50 +0000100 void DoAction_ResetForm(const CPDF_Action& action,
tsepez4cf55152016-11-02 14:37:54 -0700101 CPDFSDK_FormFillEnvironment* pFormFillEnv);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -0700102};
103
Dan Sinclair7d125322018-03-28 18:49:34 +0000104#endif // FPDFSDK_CPDFSDK_ACTIONHANDLER_H_