John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 1 | // 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 Zhang | a6d9f0e | 2015-06-13 00:48:38 -0700 | [diff] [blame] | 4 | |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 5 | // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | |
Dan Sinclair | 7d12532 | 2018-03-28 18:49:34 +0000 | [diff] [blame] | 7 | #ifndef FPDFSDK_CPDFSDK_ACTIONHANDLER_H_ |
| 8 | #define FPDFSDK_CPDFSDK_ACTIONHANDLER_H_ |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 9 | |
Tom Sepez | 6c7508b | 2016-01-20 14:59:25 -0800 | [diff] [blame] | 10 | #include <set> |
Lei Zhang | f3cc72f | 2018-09-20 01:20:45 +0000 | [diff] [blame] | 11 | #include <utility> |
Lei Zhang | aa8bf7e | 2015-12-24 19:13:32 -0800 | [diff] [blame] | 12 | |
dsinclair | 1727aee | 2016-09-29 13:12:56 -0700 | [diff] [blame] | 13 | #include "core/fpdfdoc/cpdf_aaction.h" |
| 14 | #include "core/fpdfdoc/cpdf_action.h" |
dsinclair | a52ab74 | 2016-09-29 13:59:29 -0700 | [diff] [blame] | 15 | #include "core/fxcrt/fx_string.h" |
Dan Sinclair | 7d12532 | 2018-03-28 18:49:34 +0000 | [diff] [blame] | 16 | #include "fpdfsdk/cpdfsdk_fieldaction.h" |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 17 | |
Tom Sepez | 245c80e | 2015-04-08 16:19:33 -0700 | [diff] [blame] | 18 | class CPDFSDK_Annot; |
dsinclair | 19c198b | 2016-10-11 12:51:37 -0700 | [diff] [blame] | 19 | class CPDFSDK_FormFillEnvironment; |
Tom Sepez | 245c80e | 2015-04-08 16:19:33 -0700 | [diff] [blame] | 20 | class CPDF_Dictionary; |
jaepark | 611adb8 | 2016-08-17 11:34:36 -0700 | [diff] [blame] | 21 | class CPDF_FormField; |
Dan Sinclair | 8cdea72 | 2018-01-30 18:56:50 +0000 | [diff] [blame] | 22 | class IJS_EventContext; |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 23 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 24 | class CPDFSDK_ActionHandler { |
| 25 | public: |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 26 | bool DoAction_DocOpen(const CPDF_Action& action, |
| 27 | CPDFSDK_FormFillEnvironment* pFormFillEnv); |
| 28 | bool DoAction_JavaScript(const CPDF_Action& JsAction, |
Ryan Harrison | 275e260 | 2017-09-18 14:23:18 -0400 | [diff] [blame] | 29 | WideString csJSName, |
dsinclair | 19c198b | 2016-10-11 12:51:37 -0700 | [diff] [blame] | 30 | CPDFSDK_FormFillEnvironment* pFormFillEnv); |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 31 | 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); |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 37 | bool DoAction_Field(const CPDF_Action& action, |
| 38 | CPDF_AAction::AActionType type, |
| 39 | CPDFSDK_FormFillEnvironment* pFormFillEnv, |
| 40 | CPDF_FormField* pFormField, |
Dan Sinclair | 7d12532 | 2018-03-28 18:49:34 +0000 | [diff] [blame] | 41 | CPDFSDK_FieldAction* data); |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 42 | bool DoAction_FieldJavaScript(const CPDF_Action& JsAction, |
| 43 | CPDF_AAction::AActionType type, |
| 44 | CPDFSDK_FormFillEnvironment* pFormFillEnv, |
| 45 | CPDF_FormField* pFormField, |
Dan Sinclair | 7d12532 | 2018-03-28 18:49:34 +0000 | [diff] [blame] | 46 | CPDFSDK_FieldAction* data); |
Lei Zhang | a6d9f0e | 2015-06-13 00:48:38 -0700 | [diff] [blame] | 47 | |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 48 | private: |
Lei Zhang | 9d7c7ff | 2018-03-16 19:25:30 +0000 | [diff] [blame] | 49 | using RunScriptCallback = std::function<void(IJS_EventContext* context)>; |
| 50 | |
Dan Sinclair | 8cdea72 | 2018-01-30 18:56:50 +0000 | [diff] [blame] | 51 | void RunScript(CPDFSDK_FormFillEnvironment* pFormFillEnv, |
| 52 | const WideString& script, |
Lei Zhang | 9d7c7ff | 2018-03-16 19:25:30 +0000 | [diff] [blame] | 53 | const RunScriptCallback& cb); |
Dan Sinclair | 8cdea72 | 2018-01-30 18:56:50 +0000 | [diff] [blame] | 54 | |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 55 | bool ExecuteDocumentOpenAction(const CPDF_Action& action, |
| 56 | CPDFSDK_FormFillEnvironment* pFormFillEnv, |
Lei Zhang | 5cee3f2 | 2018-05-25 21:48:49 +0000 | [diff] [blame] | 57 | std::set<const CPDF_Dictionary*>* visited); |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 58 | bool ExecuteDocumentPageAction(const CPDF_Action& action, |
| 59 | CPDF_AAction::AActionType type, |
| 60 | CPDFSDK_FormFillEnvironment* pFormFillEnv, |
Lei Zhang | 5cee3f2 | 2018-05-25 21:48:49 +0000 | [diff] [blame] | 61 | std::set<const CPDF_Dictionary*>* visited); |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 62 | bool ExecuteFieldAction(const CPDF_Action& action, |
| 63 | CPDF_AAction::AActionType type, |
dsinclair | 19c198b | 2016-10-11 12:51:37 -0700 | [diff] [blame] | 64 | CPDFSDK_FormFillEnvironment* pFormFillEnv, |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 65 | CPDF_FormField* pFormField, |
Dan Sinclair | 7d12532 | 2018-03-28 18:49:34 +0000 | [diff] [blame] | 66 | CPDFSDK_FieldAction* data, |
Lei Zhang | 5cee3f2 | 2018-05-25 21:48:49 +0000 | [diff] [blame] | 67 | std::set<const CPDF_Dictionary*>* visited); |
Lei Zhang | a6d9f0e | 2015-06-13 00:48:38 -0700 | [diff] [blame] | 68 | |
dsinclair | 19c198b | 2016-10-11 12:51:37 -0700 | [diff] [blame] | 69 | void DoAction_NoJs(const CPDF_Action& action, |
Henrique Nakashima | 9ef93d0 | 2018-10-03 18:41:03 +0000 | [diff] [blame] | 70 | CPDF_AAction::AActionType type, |
dsinclair | 19c198b | 2016-10-11 12:51:37 -0700 | [diff] [blame] | 71 | CPDFSDK_FormFillEnvironment* pFormFillEnv); |
| 72 | void RunDocumentPageJavaScript(CPDFSDK_FormFillEnvironment* pFormFillEnv, |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 73 | CPDF_AAction::AActionType type, |
Ryan Harrison | 275e260 | 2017-09-18 14:23:18 -0400 | [diff] [blame] | 74 | const WideString& script); |
dsinclair | 19c198b | 2016-10-11 12:51:37 -0700 | [diff] [blame] | 75 | void RunDocumentOpenJavaScript(CPDFSDK_FormFillEnvironment* pFormFillEnv, |
Ryan Harrison | 275e260 | 2017-09-18 14:23:18 -0400 | [diff] [blame] | 76 | const WideString& sScriptName, |
| 77 | const WideString& script); |
dsinclair | 19c198b | 2016-10-11 12:51:37 -0700 | [diff] [blame] | 78 | void RunFieldJavaScript(CPDFSDK_FormFillEnvironment* pFormFillEnv, |
Nico Weber | 9d8ec5a | 2015-08-04 13:00:21 -0700 | [diff] [blame] | 79 | CPDF_FormField* pFormField, |
| 80 | CPDF_AAction::AActionType type, |
Dan Sinclair | 7d12532 | 2018-03-28 18:49:34 +0000 | [diff] [blame] | 81 | CPDFSDK_FieldAction* data, |
Ryan Harrison | 275e260 | 2017-09-18 14:23:18 -0400 | [diff] [blame] | 82 | const WideString& script); |
Lei Zhang | a6d9f0e | 2015-06-13 00:48:38 -0700 | [diff] [blame] | 83 | |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 84 | bool IsValidField(CPDFSDK_FormFillEnvironment* pFormFillEnv, |
| 85 | CPDF_Dictionary* pFieldDict); |
Lei Zhang | a6d9f0e | 2015-06-13 00:48:38 -0700 | [diff] [blame] | 86 | |
dsinclair | 19c198b | 2016-10-11 12:51:37 -0700 | [diff] [blame] | 87 | void DoAction_GoTo(CPDFSDK_FormFillEnvironment* pFormFillEnv, |
| 88 | const CPDF_Action& action); |
dsinclair | 19c198b | 2016-10-11 12:51:37 -0700 | [diff] [blame] | 89 | 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 Zhang | a6d9f0e | 2015-06-13 00:48:38 -0700 | [diff] [blame] | 95 | |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 96 | bool DoAction_Hide(const CPDF_Action& action, |
| 97 | CPDFSDK_FormFillEnvironment* pFormFillEnv); |
| 98 | bool DoAction_SubmitForm(const CPDF_Action& action, |
| 99 | CPDFSDK_FormFillEnvironment* pFormFillEnv); |
dan sinclair | 7544a4b | 2018-03-08 15:19:50 +0000 | [diff] [blame] | 100 | void DoAction_ResetForm(const CPDF_Action& action, |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 101 | CPDFSDK_FormFillEnvironment* pFormFillEnv); |
John Abd-El-Malek | 3f3b45c | 2014-05-23 17:28:10 -0700 | [diff] [blame] | 102 | }; |
| 103 | |
Dan Sinclair | 7d12532 | 2018-03-28 18:49:34 +0000 | [diff] [blame] | 104 | #endif // FPDFSDK_CPDFSDK_ACTIONHANDLER_H_ |