|  | // Copyright 2017 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 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<IJS_Runtime::JS_Error> 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.Get(); } | 
|  | 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<CJS_Runtime> const m_pRuntime; | 
|  | ObservedPtr<CPDFSDK_FormFillEnvironment> m_pFormFillEnv; | 
|  | Kind m_eKind = Kind::kUnknown; | 
|  | bool m_bBusy = false; | 
|  | bool m_bValid = false; | 
|  | UnownedPtr<WideString> m_pValue; | 
|  | WideString m_strSourceName; | 
|  | WideString m_strTargetName; | 
|  | WideString m_WideStrChangeDu; | 
|  | WideString m_WideStrChangeEx; | 
|  | UnownedPtr<WideString> 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<int> m_pISelEnd; | 
|  | UnownedPtr<int> m_pISelStart; | 
|  | bool m_bWillCommit = false; | 
|  | bool m_bFieldFull = false; | 
|  | bool m_bRcDu = false; | 
|  | UnownedPtr<bool> m_pbRc; | 
|  | }; | 
|  |  | 
|  | #endif  // FXJS_CJS_EVENT_CONTEXT_H_ |