blob: 3d40c9dc5a679b5c918b54733cb65ac56c9682e0 [file] [log] [blame]
Tom Sepezd6ae2af2017-02-16 11:49:55 -08001// Copyright 2017 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
Dan Sinclaire0345a42017-10-30 20:20:42 +00007#include "fxjs/cjs_event_context.h"
Tom Sepezd6ae2af2017-02-16 11:49:55 -08008
Dan Sinclairb8966992017-09-21 14:51:57 -04009#include "core/fxcrt/autorestorer.h"
Dan Sinclaire0345a42017-10-30 20:20:42 +000010#include "fxjs/cjs_eventhandler.h"
11#include "fxjs/cjs_runtime.h"
Tom Sepez221f0b32018-06-04 22:11:27 +000012#include "fxjs/js_define.h"
Dan Sinclaire0345a42017-10-30 20:20:42 +000013#include "fxjs/js_resources.h"
Tom Sepezd6ae2af2017-02-16 11:49:55 -080014
15CJS_EventContext::CJS_EventContext(CJS_Runtime* pRuntime)
16 : m_pRuntime(pRuntime),
17 m_pEventHandler(new CJS_EventHandler(this)),
18 m_bBusy(false) {
19 ASSERT(pRuntime);
20}
21
22CJS_EventContext::~CJS_EventContext() {}
23
24CPDFSDK_FormFillEnvironment* CJS_EventContext::GetFormFillEnv() {
25 return m_pRuntime->GetFormFillEnv();
26}
27
Dan Sinclairdc5d88b2018-05-17 13:53:52 +000028Optional<IJS_Runtime::JS_Error> CJS_EventContext::RunScript(
29 const WideString& script) {
Tom Sepezd6ae2af2017-02-16 11:49:55 -080030 v8::Isolate::Scope isolate_scope(m_pRuntime->GetIsolate());
31 v8::HandleScope handle_scope(m_pRuntime->GetIsolate());
Tom Sepez1258f7f2018-02-02 17:37:37 +000032 v8::Local<v8::Context> context = m_pRuntime->GetV8Context();
Tom Sepezd6ae2af2017-02-16 11:49:55 -080033 v8::Context::Scope context_scope(context);
34
35 if (m_bBusy) {
Dan Sinclairdc5d88b2018-05-17 13:53:52 +000036 return IJS_Runtime::JS_Error(1, 1,
37 JSGetStringFromID(JSMessage::kBusyError));
Tom Sepezd6ae2af2017-02-16 11:49:55 -080038 }
39
Dan Sinclairb8966992017-09-21 14:51:57 -040040 AutoRestorer<bool> restorer(&m_bBusy);
Tom Sepezd6ae2af2017-02-16 11:49:55 -080041 m_bBusy = true;
42
43 ASSERT(m_pEventHandler->IsValid());
44 CJS_Runtime::FieldEvent event(m_pEventHandler->TargetName(),
45 m_pEventHandler->EventType());
46 if (!m_pRuntime->AddEventToSet(event)) {
Dan Sinclairdc5d88b2018-05-17 13:53:52 +000047 return IJS_Runtime::JS_Error(
48 1, 1, JSGetStringFromID(JSMessage::kDuplicateEventError));
Tom Sepezd6ae2af2017-02-16 11:49:55 -080049 }
50
Dan Sinclairdc5d88b2018-05-17 13:53:52 +000051 Optional<IJS_Runtime::JS_Error> err;
Tom Sepezd6ae2af2017-02-16 11:49:55 -080052 if (script.GetLength() > 0)
Tom Sepeza964f2a2018-06-21 15:21:44 +000053 err = m_pRuntime->ExecuteScript(script);
Tom Sepezd6ae2af2017-02-16 11:49:55 -080054
55 m_pRuntime->RemoveEventFromSet(event);
56 m_pEventHandler->Destroy();
Dan Sinclairdc5d88b2018-05-17 13:53:52 +000057 return err;
Tom Sepezd6ae2af2017-02-16 11:49:55 -080058}
59
60void CJS_EventContext::OnApp_Init() {
61 m_pEventHandler->OnApp_Init();
62}
63
64void CJS_EventContext::OnDoc_Open(CPDFSDK_FormFillEnvironment* pFormFillEnv,
Ryan Harrison275e2602017-09-18 14:23:18 -040065 const WideString& strTargetName) {
Tom Sepezd6ae2af2017-02-16 11:49:55 -080066 m_pEventHandler->OnDoc_Open(pFormFillEnv, strTargetName);
67}
68
69void CJS_EventContext::OnDoc_WillPrint(
70 CPDFSDK_FormFillEnvironment* pFormFillEnv) {
71 m_pEventHandler->OnDoc_WillPrint(pFormFillEnv);
72}
73
74void CJS_EventContext::OnDoc_DidPrint(
75 CPDFSDK_FormFillEnvironment* pFormFillEnv) {
76 m_pEventHandler->OnDoc_DidPrint(pFormFillEnv);
77}
78
79void CJS_EventContext::OnDoc_WillSave(
80 CPDFSDK_FormFillEnvironment* pFormFillEnv) {
81 m_pEventHandler->OnDoc_WillSave(pFormFillEnv);
82}
83
84void CJS_EventContext::OnDoc_DidSave(
85 CPDFSDK_FormFillEnvironment* pFormFillEnv) {
86 m_pEventHandler->OnDoc_DidSave(pFormFillEnv);
87}
88
89void CJS_EventContext::OnDoc_WillClose(
90 CPDFSDK_FormFillEnvironment* pFormFillEnv) {
91 m_pEventHandler->OnDoc_WillClose(pFormFillEnv);
92}
93
94void CJS_EventContext::OnPage_Open(CPDFSDK_FormFillEnvironment* pFormFillEnv) {
95 m_pEventHandler->OnPage_Open(pFormFillEnv);
96}
97
98void CJS_EventContext::OnPage_Close(CPDFSDK_FormFillEnvironment* pFormFillEnv) {
99 m_pEventHandler->OnPage_Close(pFormFillEnv);
100}
101
102void CJS_EventContext::OnPage_InView(
103 CPDFSDK_FormFillEnvironment* pFormFillEnv) {
104 m_pEventHandler->OnPage_InView(pFormFillEnv);
105}
106
107void CJS_EventContext::OnPage_OutView(
108 CPDFSDK_FormFillEnvironment* pFormFillEnv) {
109 m_pEventHandler->OnPage_OutView(pFormFillEnv);
110}
111
112void CJS_EventContext::OnField_MouseDown(bool bModifier,
113 bool bShift,
114 CPDF_FormField* pTarget) {
115 m_pEventHandler->OnField_MouseDown(bModifier, bShift, pTarget);
116}
117
118void CJS_EventContext::OnField_MouseEnter(bool bModifier,
119 bool bShift,
120 CPDF_FormField* pTarget) {
121 m_pEventHandler->OnField_MouseEnter(bModifier, bShift, pTarget);
122}
123
124void CJS_EventContext::OnField_MouseExit(bool bModifier,
125 bool bShift,
126 CPDF_FormField* pTarget) {
127 m_pEventHandler->OnField_MouseExit(bModifier, bShift, pTarget);
128}
129
130void CJS_EventContext::OnField_MouseUp(bool bModifier,
131 bool bShift,
132 CPDF_FormField* pTarget) {
133 m_pEventHandler->OnField_MouseUp(bModifier, bShift, pTarget);
134}
135
136void CJS_EventContext::OnField_Focus(bool bModifier,
137 bool bShift,
138 CPDF_FormField* pTarget,
Tom Sepez3d813152018-06-21 17:28:24 +0000139 WideString* Value) {
Tom Sepezd6ae2af2017-02-16 11:49:55 -0800140 m_pEventHandler->OnField_Focus(bModifier, bShift, pTarget, Value);
141}
142
143void CJS_EventContext::OnField_Blur(bool bModifier,
144 bool bShift,
145 CPDF_FormField* pTarget,
Tom Sepez3d813152018-06-21 17:28:24 +0000146 WideString* Value) {
Tom Sepezd6ae2af2017-02-16 11:49:55 -0800147 m_pEventHandler->OnField_Blur(bModifier, bShift, pTarget, Value);
148}
149
150void CJS_EventContext::OnField_Calculate(CPDF_FormField* pSource,
151 CPDF_FormField* pTarget,
Tom Sepez3d813152018-06-21 17:28:24 +0000152 WideString* pValue,
153 bool* pRc) {
154 m_pEventHandler->OnField_Calculate(pSource, pTarget, pValue, pRc);
Tom Sepezd6ae2af2017-02-16 11:49:55 -0800155}
156
157void CJS_EventContext::OnField_Format(CPDF_FormField* pTarget,
Tom Sepez3d813152018-06-21 17:28:24 +0000158 WideString* Value,
Tom Sepezd6ae2af2017-02-16 11:49:55 -0800159 bool bWillCommit) {
160 m_pEventHandler->OnField_Format(pTarget, Value, bWillCommit);
161}
162
Tom Sepez3d813152018-06-21 17:28:24 +0000163void CJS_EventContext::OnField_Keystroke(WideString* strChange,
Ryan Harrison275e2602017-09-18 14:23:18 -0400164 const WideString& strChangeEx,
Tom Sepezd6ae2af2017-02-16 11:49:55 -0800165 bool bKeyDown,
166 bool bModifier,
Tom Sepez3d813152018-06-21 17:28:24 +0000167 int* nSelEnd,
168 int* nSelStart,
Tom Sepezd6ae2af2017-02-16 11:49:55 -0800169 bool bShift,
170 CPDF_FormField* pTarget,
Tom Sepez3d813152018-06-21 17:28:24 +0000171 WideString* Value,
Tom Sepezd6ae2af2017-02-16 11:49:55 -0800172 bool bWillCommit,
173 bool bFieldFull,
Tom Sepez3d813152018-06-21 17:28:24 +0000174 bool* bRc) {
Tom Sepezd6ae2af2017-02-16 11:49:55 -0800175 m_pEventHandler->OnField_Keystroke(
176 strChange, strChangeEx, bKeyDown, bModifier, nSelEnd, nSelStart, bShift,
177 pTarget, Value, bWillCommit, bFieldFull, bRc);
178}
179
Tom Sepez3d813152018-06-21 17:28:24 +0000180void CJS_EventContext::OnField_Validate(WideString* strChange,
Ryan Harrison275e2602017-09-18 14:23:18 -0400181 const WideString& strChangeEx,
Tom Sepezd6ae2af2017-02-16 11:49:55 -0800182 bool bKeyDown,
183 bool bModifier,
184 bool bShift,
185 CPDF_FormField* pTarget,
Tom Sepez3d813152018-06-21 17:28:24 +0000186 WideString* Value,
187 bool* bRc) {
Tom Sepezd6ae2af2017-02-16 11:49:55 -0800188 m_pEventHandler->OnField_Validate(strChange, strChangeEx, bKeyDown, bModifier,
189 bShift, pTarget, Value, bRc);
190}
191
192void CJS_EventContext::OnScreen_Focus(bool bModifier,
193 bool bShift,
194 CPDFSDK_Annot* pScreen) {
195 m_pEventHandler->OnScreen_Focus(bModifier, bShift, pScreen);
196}
197
198void CJS_EventContext::OnScreen_Blur(bool bModifier,
199 bool bShift,
200 CPDFSDK_Annot* pScreen) {
201 m_pEventHandler->OnScreen_Blur(bModifier, bShift, pScreen);
202}
203
204void CJS_EventContext::OnScreen_Open(bool bModifier,
205 bool bShift,
206 CPDFSDK_Annot* pScreen) {
207 m_pEventHandler->OnScreen_Open(bModifier, bShift, pScreen);
208}
209
210void CJS_EventContext::OnScreen_Close(bool bModifier,
211 bool bShift,
212 CPDFSDK_Annot* pScreen) {
213 m_pEventHandler->OnScreen_Close(bModifier, bShift, pScreen);
214}
215
216void CJS_EventContext::OnScreen_MouseDown(bool bModifier,
217 bool bShift,
218 CPDFSDK_Annot* pScreen) {
219 m_pEventHandler->OnScreen_MouseDown(bModifier, bShift, pScreen);
220}
221
222void CJS_EventContext::OnScreen_MouseUp(bool bModifier,
223 bool bShift,
224 CPDFSDK_Annot* pScreen) {
225 m_pEventHandler->OnScreen_MouseUp(bModifier, bShift, pScreen);
226}
227
228void CJS_EventContext::OnScreen_MouseEnter(bool bModifier,
229 bool bShift,
230 CPDFSDK_Annot* pScreen) {
231 m_pEventHandler->OnScreen_MouseEnter(bModifier, bShift, pScreen);
232}
233
234void CJS_EventContext::OnScreen_MouseExit(bool bModifier,
235 bool bShift,
236 CPDFSDK_Annot* pScreen) {
237 m_pEventHandler->OnScreen_MouseExit(bModifier, bShift, pScreen);
238}
239
240void CJS_EventContext::OnScreen_InView(bool bModifier,
241 bool bShift,
242 CPDFSDK_Annot* pScreen) {
243 m_pEventHandler->OnScreen_InView(bModifier, bShift, pScreen);
244}
245
246void CJS_EventContext::OnScreen_OutView(bool bModifier,
247 bool bShift,
248 CPDFSDK_Annot* pScreen) {
249 m_pEventHandler->OnScreen_OutView(bModifier, bShift, pScreen);
250}
251
252void CJS_EventContext::OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) {
253 m_pEventHandler->OnBookmark_MouseUp(pBookMark);
254}
255
256void CJS_EventContext::OnLink_MouseUp(
257 CPDFSDK_FormFillEnvironment* pFormFillEnv) {
258 m_pEventHandler->OnLink_MouseUp(pFormFillEnv);
259}
260
261void CJS_EventContext::OnConsole_Exec() {
262 m_pEventHandler->OnConsole_Exec();
263}
264
265void CJS_EventContext::OnExternal_Exec() {
266 m_pEventHandler->OnExternal_Exec();
267}
268
269void CJS_EventContext::OnBatchExec(CPDFSDK_FormFillEnvironment* pFormFillEnv) {
270 m_pEventHandler->OnBatchExec(pFormFillEnv);
271}
272
273void CJS_EventContext::OnMenu_Exec(CPDFSDK_FormFillEnvironment* pFormFillEnv,
Ryan Harrison275e2602017-09-18 14:23:18 -0400274 const WideString& strTargetName) {
Tom Sepezd6ae2af2017-02-16 11:49:55 -0800275 m_pEventHandler->OnMenu_Exec(pFormFillEnv, strTargetName);
276}