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