// Copyright 2017 The PDFium Authors // 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 FXJS_CJS_EVENT_CONTEXT_H_ #define FXJS_CJS_EVENT_CONTEXT_H_ #include "core/fxcrt/fx_string.h" #include "core/fxcrt/observed_ptr.h" #include "core/fxcrt/unowned_ptr.h" #include "fpdfsdk/cpdfsdk_formfillenvironment.h" #include "fxjs/ijs_event_context.h" class CJS_Field; class CJS_Runtime; class CJS_EventContext final : public IJS_EventContext { public: enum class Kind : uint8_t { kUnknown, kDocOpen, kDocWillPrint, kDocDidPrint, kDocWillSave, kDocDidSave, kDocWillClose, kPageOpen, kPageClose, kPageInView, kPageOutView, kFieldMouseDown, kFieldMouseUp, kFieldMouseEnter, kFieldMouseExit, kFieldFocus, kFieldBlur, kFieldKeystroke, kFieldValidate, kFieldCalculate, kFieldFormat, kExternalExec, }; explicit CJS_EventContext(CJS_Runtime* pRuntime); ~CJS_EventContext() override; // IJS_EventContext absl::optional RunScript( const WideString& script) override; void OnDoc_Open(const WideString& strTargetName) override; void OnDoc_WillPrint() override; void OnDoc_DidPrint() override; void OnDoc_WillSave() override; void OnDoc_DidSave() override; void OnDoc_WillClose() override; void OnPage_Open() override; void OnPage_Close() override; void OnPage_InView() override; void OnPage_OutView() override; void OnField_MouseDown(bool bModifier, bool bShift, CPDF_FormField* pTarget) override; void OnField_MouseEnter(bool bModifier, bool bShift, CPDF_FormField* pTarget) override; void OnField_MouseExit(bool bModifier, bool bShift, CPDF_FormField* pTarget) override; void OnField_MouseUp(bool bModifier, bool bShift, CPDF_FormField* pTarget) override; void OnField_Focus(bool bModifier, bool bShift, CPDF_FormField* pTarget, WideString* Value) override; void OnField_Blur(bool bModifier, bool bShift, CPDF_FormField* pTarget, WideString* Value) override; void OnField_Calculate(CPDF_FormField* pSource, CPDF_FormField* pTarget, WideString* pValue, bool* pRc) override; void OnField_Format(CPDF_FormField* pTarget, WideString* Value) override; void OnField_Keystroke(WideString* strChange, const WideString& strChangeEx, bool bKeyDown, bool bModifier, int* nSelEnd, int* nSelStart, bool bShift, CPDF_FormField* pTarget, WideString* Value, bool bWillCommit, bool bFieldFull, bool* bRc) override; void OnField_Validate(WideString* strChange, const WideString& strChangeEx, bool bKeyDown, bool bModifier, bool bShift, CPDF_FormField* pTarget, WideString* Value, bool* bRc) override; void OnExternal_Exec() override; CJS_Runtime* GetJSRuntime() const { return m_pRuntime; } CPDFSDK_FormFillEnvironment* GetFormFillEnv() const { return m_pFormFillEnv.Get(); } CJS_Field* SourceField(); CJS_Field* TargetField(); Kind EventKind() const { return m_eKind; } bool IsValid() const { return m_bValid; } bool IsUserGesture() const; WideString& Change(); WideString ChangeEx() const { return m_WideStrChangeEx; } WideString SourceName() const { return m_strSourceName; } WideString TargetName() const { return m_strTargetName; } int CommitKey() const { return m_nCommitKey; } bool FieldFull() const { return m_bFieldFull; } bool KeyDown() const { return m_bKeyDown; } bool Modifier() const { return m_bModifier; } ByteStringView Name() const; ByteStringView Type() const; bool& Rc(); int SelEnd() const; int SelStart() const; void SetSelEnd(int value); void SetSelStart(int value); bool Shift() const { return m_bShift; } bool HasValue() const { return !!m_pValue; } WideString& Value() { return *m_pValue; } bool WillCommit() const { return m_bWillCommit; } void SetValueForTest(WideString* pStr) { m_pValue = pStr; } void SetRCForTest(bool* pRC) { m_pbRc = pRC; } void SetStrChangeForTest(WideString* pStrChange) { m_pWideStrChange = pStrChange; } void ResetWillCommitForTest() { m_bWillCommit = false; } private: void Initialize(Kind kind); void Destroy(); UnownedPtr const m_pRuntime; ObservedPtr m_pFormFillEnv; Kind m_eKind = Kind::kUnknown; bool m_bBusy = false; bool m_bValid = false; UnownedPtr m_pValue; WideString m_strSourceName; WideString m_strTargetName; WideString m_WideStrChangeDu; WideString m_WideStrChangeEx; UnownedPtr m_pWideStrChange; int m_nCommitKey = -1; bool m_bKeyDown = false; bool m_bModifier = false; bool m_bShift = false; int m_nSelEndDu = 0; int m_nSelStartDu = 0; UnownedPtr m_pISelEnd; UnownedPtr m_pISelStart; bool m_bWillCommit = false; bool m_bFieldFull = false; bool m_bRcDu = false; UnownedPtr m_pbRc; }; #endif // FXJS_CJS_EVENT_CONTEXT_H_