summaryrefslogtreecommitdiff
path: root/fpdfsdk/include/fsdk_actionhandler.h
blob: dfb7d488c2cc17bc8d7a9e31dc4bdf2ca5696f1e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#ifndef FPDFSDK_INCLUDE_FSDK_ACTIONHANDLER_H_
#define FPDFSDK_INCLUDE_FSDK_ACTIONHANDLER_H_

#include "../../core/include/fpdfdoc/fpdf_doc.h"
#include "../../core/include/fxcrt/fx_string.h"
#include "../../third_party/base/nonstd_unique_ptr.h"
#include "fsdk_baseform.h"

class CFX_PtrList;
class CPDFDoc_Environment;
class CPDFSDK_Annot;
class CPDFSDK_Document;
class CPDF_Bookmark;
class CPDF_Dictionary;
class IFXJS_Runtime;

class CPDFSDK_FormActionHandler {
 public:
  FX_BOOL DoAction_Hide(const CPDF_Action& action, CPDFSDK_Document* pDocument);
  FX_BOOL DoAction_SubmitForm(const CPDF_Action& action,
                              CPDFSDK_Document* pDocument);
  FX_BOOL DoAction_ResetForm(const CPDF_Action& action,
                             CPDFSDK_Document* pDocument);
  FX_BOOL DoAction_ImportData(const CPDF_Action& action,
                              CPDFSDK_Document* pDocument);
};

class CPDFSDK_MediaActionHandler {
 public:
  FX_BOOL DoAction_Rendition(const CPDF_Action& action,
                             CPDFSDK_Document* pDocument);
  FX_BOOL DoAction_Sound(const CPDF_Action& action,
                         CPDFSDK_Document* pDocument);
  FX_BOOL DoAction_Movie(const CPDF_Action& action,
                         CPDFSDK_Document* pDocument);
};

class CPDFSDK_ActionHandler {
 public:
  CPDFSDK_ActionHandler(CPDFDoc_Environment* pEvi);

  void SetMediaActionHandler(CPDFSDK_MediaActionHandler* pHandler);

  FX_BOOL DoAction_DocOpen(const CPDF_Action& action,
                           CPDFSDK_Document* pDocument);
  FX_BOOL DoAction_JavaScript(const CPDF_Action& JsAction,
                              CFX_WideString csJSName,
                              CPDFSDK_Document* pDocument);
  FX_BOOL DoAction_Page(const CPDF_Action& action,
                        enum CPDF_AAction::AActionType eType,
                        CPDFSDK_Document* pDocument);
  FX_BOOL DoAction_Document(const CPDF_Action& action,
                            enum CPDF_AAction::AActionType eType,
                            CPDFSDK_Document* pDocument);
  FX_BOOL DoAction_BookMark(CPDF_Bookmark* pBookMark,
                            const CPDF_Action& action,
                            CPDF_AAction::AActionType type,
                            CPDFSDK_Document* pDocument);
  FX_BOOL DoAction_Screen(const CPDF_Action& action,
                          CPDF_AAction::AActionType type,
                          CPDFSDK_Document* pDocument,
                          CPDFSDK_Annot* pScreen);
  FX_BOOL DoAction_Link(const CPDF_Action& action, CPDFSDK_Document* pDocument);
  FX_BOOL DoAction_Field(const CPDF_Action& action,
                         CPDF_AAction::AActionType type,
                         CPDFSDK_Document* pDocument,
                         CPDF_FormField* pFormField,
                         PDFSDK_FieldAction& data);
  FX_BOOL DoAction_FieldJavaScript(const CPDF_Action& JsAction,
                                   CPDF_AAction::AActionType type,
                                   CPDFSDK_Document* pDocument,
                                   CPDF_FormField* pFormField,
                                   PDFSDK_FieldAction& data);

 private:
  FX_BOOL ExecuteDocumentOpenAction(const CPDF_Action& action,
                                    CPDFSDK_Document* pDocument,
                                    CFX_PtrList& list);
  FX_BOOL ExecuteDocumentPageAction(const CPDF_Action& action,
                                    CPDF_AAction::AActionType type,
                                    CPDFSDK_Document* pDocument,
                                    CFX_PtrList& list);
  FX_BOOL ExecuteFieldAction(const CPDF_Action& action,
                             CPDF_AAction::AActionType type,
                             CPDFSDK_Document* pDocument,
                             CPDF_FormField* pFormField,
                             PDFSDK_FieldAction& data,
                             CFX_PtrList& list);
  FX_BOOL ExecuteScreenAction(const CPDF_Action& action,
                              CPDF_AAction::AActionType type,
                              CPDFSDK_Document* pDocument,
                              CPDFSDK_Annot* pScreen,
                              CFX_PtrList& list);
  FX_BOOL ExecuteBookMark(const CPDF_Action& action,
                          CPDFSDK_Document* pDocument,
                          CPDF_Bookmark* pBookmark,
                          CFX_PtrList& list);
  FX_BOOL ExecuteLinkAction(const CPDF_Action& action,
                            CPDFSDK_Document* pDocument,
                            CFX_PtrList& list);

  void DoAction_NoJs(const CPDF_Action& action, CPDFSDK_Document* pDocument);
  void RunDocumentPageJavaScript(CPDFSDK_Document* pDocument,
                                 CPDF_AAction::AActionType type,
                                 const CFX_WideString& script);
  void RunDocumentOpenJavaScript(CPDFSDK_Document* pDocument,
                                 const CFX_WideString& sScriptName,
                                 const CFX_WideString& script);
  void RunFieldJavaScript(CPDFSDK_Document* pDocument,
                          CPDF_FormField* pFormField,
                          CPDF_AAction::AActionType type,
                          PDFSDK_FieldAction& data,
                          const CFX_WideString& script);

  FX_BOOL IsValidField(CPDFSDK_Document* pDocument,
                       CPDF_Dictionary* pFieldDict);
  FX_BOOL IsValidDocView(CPDFSDK_Document* pDocument);

  void DoAction_GoTo(CPDFSDK_Document* pDocument, const CPDF_Action& action);
  void DoAction_GoToR(CPDFSDK_Document* pDocument, const CPDF_Action& action);
  void DoAction_Launch(CPDFSDK_Document* pDocument, const CPDF_Action& action);
  void DoAction_URI(CPDFSDK_Document* pDocument, const CPDF_Action& action);
  void DoAction_Named(CPDFSDK_Document* pDocument, const CPDF_Action& action);
  void DoAction_SetOCGState(CPDFSDK_Document* pDocument,
                            const CPDF_Action& action);

  nonstd::unique_ptr<CPDFSDK_FormActionHandler> m_pFormActionHandler;
  CPDFSDK_MediaActionHandler* m_pMediaActionHandler;
};

#endif  // FPDFSDK_INCLUDE_FSDK_ACTIONHANDLER_H_