Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 1 | // Copyright 2015 PDFium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | |
Lei Zhang | aa8bf7e | 2015-12-24 19:13:32 -0800 | [diff] [blame] | 7 | #include <memory> |
| 8 | |
Dan Sinclair | aee0db0 | 2017-09-21 16:53:58 -0400 | [diff] [blame] | 9 | #include "core/fxcrt/unowned_ptr.h" |
Tom Sepez | d6ae2af | 2017-02-16 11:49:55 -0800 | [diff] [blame] | 10 | #include "fpdfsdk/javascript/ijs_event_context.h" |
dsinclair | 64376be | 2016-03-31 20:03:24 -0700 | [diff] [blame] | 11 | #include "fpdfsdk/javascript/ijs_runtime.h" |
tsepez | 36eb4bd | 2016-10-03 15:24:27 -0700 | [diff] [blame] | 12 | #include "third_party/base/ptr_util.h" |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 13 | |
Tom Sepez | d6ae2af | 2017-02-16 11:49:55 -0800 | [diff] [blame] | 14 | class CJS_EventContextStub final : public IJS_EventContext { |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 15 | public: |
Tom Sepez | d6ae2af | 2017-02-16 11:49:55 -0800 | [diff] [blame] | 16 | CJS_EventContextStub() {} |
| 17 | ~CJS_EventContextStub() override {} |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 18 | |
Tom Sepez | d6ae2af | 2017-02-16 11:49:55 -0800 | [diff] [blame] | 19 | // IJS_EventContext: |
Ryan Harrison | 275e260 | 2017-09-18 14:23:18 -0400 | [diff] [blame] | 20 | bool RunScript(const WideString& script, WideString* info) override { |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 21 | return false; |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 22 | } |
| 23 | |
| 24 | void OnApp_Init() override {} |
dsinclair | 4526faf | 2016-10-11 10:54:49 -0700 | [diff] [blame] | 25 | void OnDoc_Open(CPDFSDK_FormFillEnvironment* pFormFillEnv, |
Ryan Harrison | 275e260 | 2017-09-18 14:23:18 -0400 | [diff] [blame] | 26 | const WideString& strTargetName) override {} |
dsinclair | 4526faf | 2016-10-11 10:54:49 -0700 | [diff] [blame] | 27 | void OnDoc_WillPrint(CPDFSDK_FormFillEnvironment* pFormFillEnv) override {} |
| 28 | void OnDoc_DidPrint(CPDFSDK_FormFillEnvironment* pFormFillEnv) override {} |
| 29 | void OnDoc_WillSave(CPDFSDK_FormFillEnvironment* pFormFillEnv) override {} |
| 30 | void OnDoc_DidSave(CPDFSDK_FormFillEnvironment* pFormFillEnv) override {} |
| 31 | void OnDoc_WillClose(CPDFSDK_FormFillEnvironment* pFormFillEnv) override {} |
| 32 | void OnPage_Open(CPDFSDK_FormFillEnvironment* pFormFillEnv) override {} |
| 33 | void OnPage_Close(CPDFSDK_FormFillEnvironment* pFormFillEnv) override {} |
| 34 | void OnPage_InView(CPDFSDK_FormFillEnvironment* pFormFillEnv) override {} |
| 35 | void OnPage_OutView(CPDFSDK_FormFillEnvironment* pFormFillEnv) override {} |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 36 | void OnField_MouseDown(bool bModifier, |
| 37 | bool bShift, |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 38 | CPDF_FormField* pTarget) override {} |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 39 | void OnField_MouseEnter(bool bModifier, |
| 40 | bool bShift, |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 41 | CPDF_FormField* pTarget) override {} |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 42 | void OnField_MouseExit(bool bModifier, |
| 43 | bool bShift, |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 44 | CPDF_FormField* pTarget) override {} |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 45 | void OnField_MouseUp(bool bModifier, |
| 46 | bool bShift, |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 47 | CPDF_FormField* pTarget) override {} |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 48 | void OnField_Focus(bool bModifier, |
| 49 | bool bShift, |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 50 | CPDF_FormField* pTarget, |
Ryan Harrison | 275e260 | 2017-09-18 14:23:18 -0400 | [diff] [blame] | 51 | const WideString& Value) override {} |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 52 | void OnField_Blur(bool bModifier, |
| 53 | bool bShift, |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 54 | CPDF_FormField* pTarget, |
Ryan Harrison | 275e260 | 2017-09-18 14:23:18 -0400 | [diff] [blame] | 55 | const WideString& Value) override {} |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 56 | void OnField_Calculate(CPDF_FormField* pSource, |
| 57 | CPDF_FormField* pTarget, |
Ryan Harrison | 275e260 | 2017-09-18 14:23:18 -0400 | [diff] [blame] | 58 | WideString& Value, |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 59 | bool& bRc) override {} |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 60 | void OnField_Format(CPDF_FormField* pTarget, |
Ryan Harrison | 275e260 | 2017-09-18 14:23:18 -0400 | [diff] [blame] | 61 | WideString& Value, |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 62 | bool bWillCommit) override {} |
Ryan Harrison | 275e260 | 2017-09-18 14:23:18 -0400 | [diff] [blame] | 63 | void OnField_Keystroke(WideString& strChange, |
| 64 | const WideString& strChangeEx, |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 65 | bool KeyDown, |
| 66 | bool bModifier, |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 67 | int& nSelEnd, |
| 68 | int& nSelStart, |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 69 | bool bShift, |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 70 | CPDF_FormField* pTarget, |
Ryan Harrison | 275e260 | 2017-09-18 14:23:18 -0400 | [diff] [blame] | 71 | WideString& Value, |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 72 | bool bWillCommit, |
| 73 | bool bFieldFull, |
| 74 | bool& bRc) override {} |
Ryan Harrison | 275e260 | 2017-09-18 14:23:18 -0400 | [diff] [blame] | 75 | void OnField_Validate(WideString& strChange, |
| 76 | const WideString& strChangeEx, |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 77 | bool bKeyDown, |
| 78 | bool bModifier, |
| 79 | bool bShift, |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 80 | CPDF_FormField* pTarget, |
Ryan Harrison | 275e260 | 2017-09-18 14:23:18 -0400 | [diff] [blame] | 81 | WideString& Value, |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 82 | bool& bRc) override {} |
| 83 | void OnScreen_Focus(bool bModifier, |
| 84 | bool bShift, |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 85 | CPDFSDK_Annot* pScreen) override {} |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 86 | void OnScreen_Blur(bool bModifier, |
| 87 | bool bShift, |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 88 | CPDFSDK_Annot* pScreen) override {} |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 89 | void OnScreen_Open(bool bModifier, |
| 90 | bool bShift, |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 91 | CPDFSDK_Annot* pScreen) override {} |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 92 | void OnScreen_Close(bool bModifier, |
| 93 | bool bShift, |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 94 | CPDFSDK_Annot* pScreen) override {} |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 95 | void OnScreen_MouseDown(bool bModifier, |
| 96 | bool bShift, |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 97 | CPDFSDK_Annot* pScreen) override {} |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 98 | void OnScreen_MouseUp(bool bModifier, |
| 99 | bool bShift, |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 100 | CPDFSDK_Annot* pScreen) override {} |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 101 | void OnScreen_MouseEnter(bool bModifier, |
| 102 | bool bShift, |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 103 | CPDFSDK_Annot* pScreen) override {} |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 104 | void OnScreen_MouseExit(bool bModifier, |
| 105 | bool bShift, |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 106 | CPDFSDK_Annot* pScreen) override {} |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 107 | void OnScreen_InView(bool bModifier, |
| 108 | bool bShift, |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 109 | CPDFSDK_Annot* pScreen) override {} |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 110 | void OnScreen_OutView(bool bModifier, |
| 111 | bool bShift, |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 112 | CPDFSDK_Annot* pScreen) override {} |
| 113 | void OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) override {} |
dsinclair | 4526faf | 2016-10-11 10:54:49 -0700 | [diff] [blame] | 114 | void OnLink_MouseUp(CPDFSDK_FormFillEnvironment* pFormFillEnv) override {} |
| 115 | void OnMenu_Exec(CPDFSDK_FormFillEnvironment* pFormFillEnv, |
Ryan Harrison | 275e260 | 2017-09-18 14:23:18 -0400 | [diff] [blame] | 116 | const WideString&) override {} |
dsinclair | 4526faf | 2016-10-11 10:54:49 -0700 | [diff] [blame] | 117 | void OnBatchExec(CPDFSDK_FormFillEnvironment* pFormFillEnv) override {} |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 118 | void OnConsole_Exec() override {} |
| 119 | void OnExternal_Exec() override {} |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 120 | }; |
| 121 | |
| 122 | class CJS_RuntimeStub final : public IJS_Runtime { |
| 123 | public: |
Dan Sinclair | 85c8e7f | 2016-11-21 13:50:32 -0500 | [diff] [blame] | 124 | explicit CJS_RuntimeStub(CPDFSDK_FormFillEnvironment* pFormFillEnv) |
dsinclair | 82e1767 | 2016-10-11 12:38:01 -0700 | [diff] [blame] | 125 | : m_pFormFillEnv(pFormFillEnv) {} |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 126 | ~CJS_RuntimeStub() override {} |
| 127 | |
Tom Sepez | d6ae2af | 2017-02-16 11:49:55 -0800 | [diff] [blame] | 128 | IJS_EventContext* NewEventContext() override { |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 129 | if (!m_pContext) |
Tom Sepez | d6ae2af | 2017-02-16 11:49:55 -0800 | [diff] [blame] | 130 | m_pContext = pdfium::MakeUnique<CJS_EventContextStub>(); |
Tom Sepez | d6ae2af | 2017-02-16 11:49:55 -0800 | [diff] [blame] | 131 | return m_pContext.get(); |
| 132 | } |
Tom Sepez | b1670b5 | 2017-02-16 17:01:00 -0800 | [diff] [blame] | 133 | |
Tom Sepez | d6ae2af | 2017-02-16 11:49:55 -0800 | [diff] [blame] | 134 | void ReleaseEventContext(IJS_EventContext* pContext) override {} |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 135 | |
dsinclair | 82e1767 | 2016-10-11 12:38:01 -0700 | [diff] [blame] | 136 | CPDFSDK_FormFillEnvironment* GetFormFillEnv() const override { |
Tom Sepez | 940967d | 2017-05-18 12:32:20 -0700 | [diff] [blame] | 137 | return m_pFormFillEnv.Get(); |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 138 | } |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 139 | |
Tom Sepez | 51da093 | 2015-11-25 16:05:49 -0800 | [diff] [blame] | 140 | #ifdef PDF_ENABLE_XFA |
Ryan Harrison | 275e260 | 2017-09-18 14:23:18 -0400 | [diff] [blame] | 141 | bool GetValueByName(const ByteStringView&, CFXJSE_Value*) override { |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 142 | return false; |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 143 | } |
| 144 | |
Ryan Harrison | 275e260 | 2017-09-18 14:23:18 -0400 | [diff] [blame] | 145 | bool SetValueByName(const ByteStringView&, CFXJSE_Value*) override { |
tsepez | 4cf5515 | 2016-11-02 14:37:54 -0700 | [diff] [blame] | 146 | return false; |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 147 | } |
Tom Sepez | 40e9ff3 | 2015-11-30 12:39:54 -0800 | [diff] [blame] | 148 | #endif // PDF_ENABLE_XFA |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 149 | |
Ryan Harrison | 275e260 | 2017-09-18 14:23:18 -0400 | [diff] [blame] | 150 | int ExecuteScript(const WideString& script, WideString* info) override { |
Tom Sepez | 3342090 | 2015-10-13 15:00:10 -0700 | [diff] [blame] | 151 | return 0; |
| 152 | } |
| 153 | |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 154 | protected: |
Dan Sinclair | aee0db0 | 2017-09-21 16:53:58 -0400 | [diff] [blame] | 155 | UnownedPtr<CPDFSDK_FormFillEnvironment> const m_pFormFillEnv; |
Tom Sepez | d6ae2af | 2017-02-16 11:49:55 -0800 | [diff] [blame] | 156 | std::unique_ptr<CJS_EventContextStub> m_pContext; |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 157 | }; |
| 158 | |
| 159 | // static |
Dan Sinclair | f766ad2 | 2016-03-14 13:51:24 -0400 | [diff] [blame] | 160 | void IJS_Runtime::Initialize(unsigned int slot, void* isolate) {} |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 161 | |
| 162 | // static |
thestig | 2d6dda1 | 2016-06-28 07:39:09 -0700 | [diff] [blame] | 163 | void IJS_Runtime::Destroy() {} |
| 164 | |
| 165 | // static |
dsinclair | 82e1767 | 2016-10-11 12:38:01 -0700 | [diff] [blame] | 166 | IJS_Runtime* IJS_Runtime::Create(CPDFSDK_FormFillEnvironment* pFormFillEnv) { |
| 167 | return new CJS_RuntimeStub(pFormFillEnv); |
Tom Sepez | 452b4f3 | 2015-10-13 09:27:27 -0700 | [diff] [blame] | 168 | } |