xref: /aosp_15_r20/external/pdfium/fxjs/cjs_event_context.h (revision 3ac0a46f773bac49fa9476ec2b1cf3f8da5ec3a4)
1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2017 The PDFium Authors
2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file.
4*3ac0a46fSAndroid Build Coastguard Worker 
5*3ac0a46fSAndroid Build Coastguard Worker // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6*3ac0a46fSAndroid Build Coastguard Worker 
7*3ac0a46fSAndroid Build Coastguard Worker #ifndef FXJS_CJS_EVENT_CONTEXT_H_
8*3ac0a46fSAndroid Build Coastguard Worker #define FXJS_CJS_EVENT_CONTEXT_H_
9*3ac0a46fSAndroid Build Coastguard Worker 
10*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/fx_string.h"
11*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/observed_ptr.h"
12*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/unowned_ptr.h"
13*3ac0a46fSAndroid Build Coastguard Worker #include "fpdfsdk/cpdfsdk_formfillenvironment.h"
14*3ac0a46fSAndroid Build Coastguard Worker #include "fxjs/ijs_event_context.h"
15*3ac0a46fSAndroid Build Coastguard Worker 
16*3ac0a46fSAndroid Build Coastguard Worker class CJS_Field;
17*3ac0a46fSAndroid Build Coastguard Worker class CJS_Runtime;
18*3ac0a46fSAndroid Build Coastguard Worker 
19*3ac0a46fSAndroid Build Coastguard Worker class CJS_EventContext final : public IJS_EventContext {
20*3ac0a46fSAndroid Build Coastguard Worker  public:
21*3ac0a46fSAndroid Build Coastguard Worker   enum class Kind : uint8_t {
22*3ac0a46fSAndroid Build Coastguard Worker     kUnknown,
23*3ac0a46fSAndroid Build Coastguard Worker     kDocOpen,
24*3ac0a46fSAndroid Build Coastguard Worker     kDocWillPrint,
25*3ac0a46fSAndroid Build Coastguard Worker     kDocDidPrint,
26*3ac0a46fSAndroid Build Coastguard Worker     kDocWillSave,
27*3ac0a46fSAndroid Build Coastguard Worker     kDocDidSave,
28*3ac0a46fSAndroid Build Coastguard Worker     kDocWillClose,
29*3ac0a46fSAndroid Build Coastguard Worker     kPageOpen,
30*3ac0a46fSAndroid Build Coastguard Worker     kPageClose,
31*3ac0a46fSAndroid Build Coastguard Worker     kPageInView,
32*3ac0a46fSAndroid Build Coastguard Worker     kPageOutView,
33*3ac0a46fSAndroid Build Coastguard Worker     kFieldMouseDown,
34*3ac0a46fSAndroid Build Coastguard Worker     kFieldMouseUp,
35*3ac0a46fSAndroid Build Coastguard Worker     kFieldMouseEnter,
36*3ac0a46fSAndroid Build Coastguard Worker     kFieldMouseExit,
37*3ac0a46fSAndroid Build Coastguard Worker     kFieldFocus,
38*3ac0a46fSAndroid Build Coastguard Worker     kFieldBlur,
39*3ac0a46fSAndroid Build Coastguard Worker     kFieldKeystroke,
40*3ac0a46fSAndroid Build Coastguard Worker     kFieldValidate,
41*3ac0a46fSAndroid Build Coastguard Worker     kFieldCalculate,
42*3ac0a46fSAndroid Build Coastguard Worker     kFieldFormat,
43*3ac0a46fSAndroid Build Coastguard Worker     kExternalExec,
44*3ac0a46fSAndroid Build Coastguard Worker   };
45*3ac0a46fSAndroid Build Coastguard Worker 
46*3ac0a46fSAndroid Build Coastguard Worker   explicit CJS_EventContext(CJS_Runtime* pRuntime);
47*3ac0a46fSAndroid Build Coastguard Worker   ~CJS_EventContext() override;
48*3ac0a46fSAndroid Build Coastguard Worker 
49*3ac0a46fSAndroid Build Coastguard Worker   // IJS_EventContext
50*3ac0a46fSAndroid Build Coastguard Worker   absl::optional<IJS_Runtime::JS_Error> RunScript(
51*3ac0a46fSAndroid Build Coastguard Worker       const WideString& script) override;
52*3ac0a46fSAndroid Build Coastguard Worker   void OnDoc_Open(const WideString& strTargetName) override;
53*3ac0a46fSAndroid Build Coastguard Worker   void OnDoc_WillPrint() override;
54*3ac0a46fSAndroid Build Coastguard Worker   void OnDoc_DidPrint() override;
55*3ac0a46fSAndroid Build Coastguard Worker   void OnDoc_WillSave() override;
56*3ac0a46fSAndroid Build Coastguard Worker   void OnDoc_DidSave() override;
57*3ac0a46fSAndroid Build Coastguard Worker   void OnDoc_WillClose() override;
58*3ac0a46fSAndroid Build Coastguard Worker   void OnPage_Open() override;
59*3ac0a46fSAndroid Build Coastguard Worker   void OnPage_Close() override;
60*3ac0a46fSAndroid Build Coastguard Worker   void OnPage_InView() override;
61*3ac0a46fSAndroid Build Coastguard Worker   void OnPage_OutView() override;
62*3ac0a46fSAndroid Build Coastguard Worker   void OnField_MouseDown(bool bModifier,
63*3ac0a46fSAndroid Build Coastguard Worker                          bool bShift,
64*3ac0a46fSAndroid Build Coastguard Worker                          CPDF_FormField* pTarget) override;
65*3ac0a46fSAndroid Build Coastguard Worker   void OnField_MouseEnter(bool bModifier,
66*3ac0a46fSAndroid Build Coastguard Worker                           bool bShift,
67*3ac0a46fSAndroid Build Coastguard Worker                           CPDF_FormField* pTarget) override;
68*3ac0a46fSAndroid Build Coastguard Worker   void OnField_MouseExit(bool bModifier,
69*3ac0a46fSAndroid Build Coastguard Worker                          bool bShift,
70*3ac0a46fSAndroid Build Coastguard Worker                          CPDF_FormField* pTarget) override;
71*3ac0a46fSAndroid Build Coastguard Worker   void OnField_MouseUp(bool bModifier,
72*3ac0a46fSAndroid Build Coastguard Worker                        bool bShift,
73*3ac0a46fSAndroid Build Coastguard Worker                        CPDF_FormField* pTarget) override;
74*3ac0a46fSAndroid Build Coastguard Worker   void OnField_Focus(bool bModifier,
75*3ac0a46fSAndroid Build Coastguard Worker                      bool bShift,
76*3ac0a46fSAndroid Build Coastguard Worker                      CPDF_FormField* pTarget,
77*3ac0a46fSAndroid Build Coastguard Worker                      WideString* Value) override;
78*3ac0a46fSAndroid Build Coastguard Worker   void OnField_Blur(bool bModifier,
79*3ac0a46fSAndroid Build Coastguard Worker                     bool bShift,
80*3ac0a46fSAndroid Build Coastguard Worker                     CPDF_FormField* pTarget,
81*3ac0a46fSAndroid Build Coastguard Worker                     WideString* Value) override;
82*3ac0a46fSAndroid Build Coastguard Worker   void OnField_Calculate(CPDF_FormField* pSource,
83*3ac0a46fSAndroid Build Coastguard Worker                          CPDF_FormField* pTarget,
84*3ac0a46fSAndroid Build Coastguard Worker                          WideString* pValue,
85*3ac0a46fSAndroid Build Coastguard Worker                          bool* pRc) override;
86*3ac0a46fSAndroid Build Coastguard Worker   void OnField_Format(CPDF_FormField* pTarget, WideString* Value) override;
87*3ac0a46fSAndroid Build Coastguard Worker   void OnField_Keystroke(WideString* strChange,
88*3ac0a46fSAndroid Build Coastguard Worker                          const WideString& strChangeEx,
89*3ac0a46fSAndroid Build Coastguard Worker                          bool bKeyDown,
90*3ac0a46fSAndroid Build Coastguard Worker                          bool bModifier,
91*3ac0a46fSAndroid Build Coastguard Worker                          int* nSelEnd,
92*3ac0a46fSAndroid Build Coastguard Worker                          int* nSelStart,
93*3ac0a46fSAndroid Build Coastguard Worker                          bool bShift,
94*3ac0a46fSAndroid Build Coastguard Worker                          CPDF_FormField* pTarget,
95*3ac0a46fSAndroid Build Coastguard Worker                          WideString* Value,
96*3ac0a46fSAndroid Build Coastguard Worker                          bool bWillCommit,
97*3ac0a46fSAndroid Build Coastguard Worker                          bool bFieldFull,
98*3ac0a46fSAndroid Build Coastguard Worker                          bool* bRc) override;
99*3ac0a46fSAndroid Build Coastguard Worker   void OnField_Validate(WideString* strChange,
100*3ac0a46fSAndroid Build Coastguard Worker                         const WideString& strChangeEx,
101*3ac0a46fSAndroid Build Coastguard Worker                         bool bKeyDown,
102*3ac0a46fSAndroid Build Coastguard Worker                         bool bModifier,
103*3ac0a46fSAndroid Build Coastguard Worker                         bool bShift,
104*3ac0a46fSAndroid Build Coastguard Worker                         CPDF_FormField* pTarget,
105*3ac0a46fSAndroid Build Coastguard Worker                         WideString* Value,
106*3ac0a46fSAndroid Build Coastguard Worker                         bool* bRc) override;
107*3ac0a46fSAndroid Build Coastguard Worker   void OnExternal_Exec() override;
108*3ac0a46fSAndroid Build Coastguard Worker 
GetJSRuntime()109*3ac0a46fSAndroid Build Coastguard Worker   CJS_Runtime* GetJSRuntime() const { return m_pRuntime; }
GetFormFillEnv()110*3ac0a46fSAndroid Build Coastguard Worker   CPDFSDK_FormFillEnvironment* GetFormFillEnv() const {
111*3ac0a46fSAndroid Build Coastguard Worker     return m_pFormFillEnv.Get();
112*3ac0a46fSAndroid Build Coastguard Worker   }
113*3ac0a46fSAndroid Build Coastguard Worker   CJS_Field* SourceField();
114*3ac0a46fSAndroid Build Coastguard Worker   CJS_Field* TargetField();
115*3ac0a46fSAndroid Build Coastguard Worker 
EventKind()116*3ac0a46fSAndroid Build Coastguard Worker   Kind EventKind() const { return m_eKind; }
IsValid()117*3ac0a46fSAndroid Build Coastguard Worker   bool IsValid() const { return m_bValid; }
118*3ac0a46fSAndroid Build Coastguard Worker   bool IsUserGesture() const;
119*3ac0a46fSAndroid Build Coastguard Worker   WideString& Change();
ChangeEx()120*3ac0a46fSAndroid Build Coastguard Worker   WideString ChangeEx() const { return m_WideStrChangeEx; }
SourceName()121*3ac0a46fSAndroid Build Coastguard Worker   WideString SourceName() const { return m_strSourceName; }
TargetName()122*3ac0a46fSAndroid Build Coastguard Worker   WideString TargetName() const { return m_strTargetName; }
CommitKey()123*3ac0a46fSAndroid Build Coastguard Worker   int CommitKey() const { return m_nCommitKey; }
FieldFull()124*3ac0a46fSAndroid Build Coastguard Worker   bool FieldFull() const { return m_bFieldFull; }
KeyDown()125*3ac0a46fSAndroid Build Coastguard Worker   bool KeyDown() const { return m_bKeyDown; }
Modifier()126*3ac0a46fSAndroid Build Coastguard Worker   bool Modifier() const { return m_bModifier; }
127*3ac0a46fSAndroid Build Coastguard Worker   ByteStringView Name() const;
128*3ac0a46fSAndroid Build Coastguard Worker   ByteStringView Type() const;
129*3ac0a46fSAndroid Build Coastguard Worker   bool& Rc();
130*3ac0a46fSAndroid Build Coastguard Worker   int SelEnd() const;
131*3ac0a46fSAndroid Build Coastguard Worker   int SelStart() const;
132*3ac0a46fSAndroid Build Coastguard Worker   void SetSelEnd(int value);
133*3ac0a46fSAndroid Build Coastguard Worker   void SetSelStart(int value);
Shift()134*3ac0a46fSAndroid Build Coastguard Worker   bool Shift() const { return m_bShift; }
HasValue()135*3ac0a46fSAndroid Build Coastguard Worker   bool HasValue() const { return !!m_pValue; }
Value()136*3ac0a46fSAndroid Build Coastguard Worker   WideString& Value() { return *m_pValue; }
WillCommit()137*3ac0a46fSAndroid Build Coastguard Worker   bool WillCommit() const { return m_bWillCommit; }
138*3ac0a46fSAndroid Build Coastguard Worker 
SetValueForTest(WideString * pStr)139*3ac0a46fSAndroid Build Coastguard Worker   void SetValueForTest(WideString* pStr) { m_pValue = pStr; }
SetRCForTest(bool * pRC)140*3ac0a46fSAndroid Build Coastguard Worker   void SetRCForTest(bool* pRC) { m_pbRc = pRC; }
SetStrChangeForTest(WideString * pStrChange)141*3ac0a46fSAndroid Build Coastguard Worker   void SetStrChangeForTest(WideString* pStrChange) {
142*3ac0a46fSAndroid Build Coastguard Worker     m_pWideStrChange = pStrChange;
143*3ac0a46fSAndroid Build Coastguard Worker   }
ResetWillCommitForTest()144*3ac0a46fSAndroid Build Coastguard Worker   void ResetWillCommitForTest() { m_bWillCommit = false; }
145*3ac0a46fSAndroid Build Coastguard Worker 
146*3ac0a46fSAndroid Build Coastguard Worker  private:
147*3ac0a46fSAndroid Build Coastguard Worker   void Initialize(Kind kind);
148*3ac0a46fSAndroid Build Coastguard Worker   void Destroy();
149*3ac0a46fSAndroid Build Coastguard Worker 
150*3ac0a46fSAndroid Build Coastguard Worker   UnownedPtr<CJS_Runtime> const m_pRuntime;
151*3ac0a46fSAndroid Build Coastguard Worker   ObservedPtr<CPDFSDK_FormFillEnvironment> m_pFormFillEnv;
152*3ac0a46fSAndroid Build Coastguard Worker   Kind m_eKind = Kind::kUnknown;
153*3ac0a46fSAndroid Build Coastguard Worker   bool m_bBusy = false;
154*3ac0a46fSAndroid Build Coastguard Worker   bool m_bValid = false;
155*3ac0a46fSAndroid Build Coastguard Worker   UnownedPtr<WideString> m_pValue;
156*3ac0a46fSAndroid Build Coastguard Worker   WideString m_strSourceName;
157*3ac0a46fSAndroid Build Coastguard Worker   WideString m_strTargetName;
158*3ac0a46fSAndroid Build Coastguard Worker   WideString m_WideStrChangeDu;
159*3ac0a46fSAndroid Build Coastguard Worker   WideString m_WideStrChangeEx;
160*3ac0a46fSAndroid Build Coastguard Worker   UnownedPtr<WideString> m_pWideStrChange;
161*3ac0a46fSAndroid Build Coastguard Worker   int m_nCommitKey = -1;
162*3ac0a46fSAndroid Build Coastguard Worker   bool m_bKeyDown = false;
163*3ac0a46fSAndroid Build Coastguard Worker   bool m_bModifier = false;
164*3ac0a46fSAndroid Build Coastguard Worker   bool m_bShift = false;
165*3ac0a46fSAndroid Build Coastguard Worker   int m_nSelEndDu = 0;
166*3ac0a46fSAndroid Build Coastguard Worker   int m_nSelStartDu = 0;
167*3ac0a46fSAndroid Build Coastguard Worker   UnownedPtr<int> m_pISelEnd;
168*3ac0a46fSAndroid Build Coastguard Worker   UnownedPtr<int> m_pISelStart;
169*3ac0a46fSAndroid Build Coastguard Worker   bool m_bWillCommit = false;
170*3ac0a46fSAndroid Build Coastguard Worker   bool m_bFieldFull = false;
171*3ac0a46fSAndroid Build Coastguard Worker   bool m_bRcDu = false;
172*3ac0a46fSAndroid Build Coastguard Worker   UnownedPtr<bool> m_pbRc;
173*3ac0a46fSAndroid Build Coastguard Worker };
174*3ac0a46fSAndroid Build Coastguard Worker 
175*3ac0a46fSAndroid Build Coastguard Worker #endif  // FXJS_CJS_EVENT_CONTEXT_H_
176