OLD | NEW |
| (Empty) |
1 // Copyright 2014 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 | |
7 #include "fpdfsdk/src/javascript/JS_Context.h" | |
8 | |
9 #include "fpdfsdk/include/javascript/IJavaScript.h" | |
10 #include "fpdfsdk/src/javascript/JS_EventHandler.h" | |
11 #include "fpdfsdk/src/javascript/JS_Runtime.h" | |
12 #include "fpdfsdk/src/javascript/resource.h" | |
13 | |
14 /* -------------------------- CJS_Context -------------------------- */ | |
15 | |
16 CJS_Context::CJS_Context(CJS_Runtime* pRuntime) | |
17 : m_pRuntime(pRuntime), m_bBusy(FALSE), m_bMsgBoxEnable(TRUE) { | |
18 m_pEventHandler = new CJS_EventHandler(this); | |
19 } | |
20 | |
21 CJS_Context::~CJS_Context() { | |
22 delete m_pEventHandler; | |
23 } | |
24 | |
25 CPDFSDK_Document* CJS_Context::GetReaderDocument() { | |
26 return m_pRuntime->GetReaderDocument(); | |
27 } | |
28 | |
29 CPDFDoc_Environment* CJS_Context::GetReaderApp() { | |
30 return m_pRuntime->GetReaderApp(); | |
31 } | |
32 | |
33 FX_BOOL CJS_Context::RunScript(const CFX_WideString& script, | |
34 CFX_WideString* info) { | |
35 v8::Isolate::Scope isolate_scope(m_pRuntime->GetIsolate()); | |
36 #ifdef PDF_ENABLE_XFA | |
37 v8::Locker locker(m_pRuntime->GetIsolate()); | |
38 #endif // PDF_ENABLE_XFA | |
39 v8::HandleScope handle_scope(m_pRuntime->GetIsolate()); | |
40 v8::Local<v8::Context> context = m_pRuntime->NewJSContext(); | |
41 v8::Context::Scope context_scope(context); | |
42 | |
43 if (m_bBusy) { | |
44 *info = JSGetStringFromID(this, IDS_STRING_JSBUSY); | |
45 return FALSE; | |
46 } | |
47 m_bBusy = TRUE; | |
48 | |
49 ASSERT(m_pEventHandler->IsValid()); | |
50 CJS_Runtime::FieldEvent event(m_pEventHandler->TargetName(), | |
51 m_pEventHandler->EventType()); | |
52 if (!m_pRuntime->AddEventToSet(event)) { | |
53 *info = JSGetStringFromID(this, IDS_STRING_JSEVENT); | |
54 return FALSE; | |
55 } | |
56 | |
57 CFX_WideString sErrorMessage; | |
58 int nRet = 0; | |
59 if (script.GetLength() > 0) { | |
60 nRet = m_pRuntime->Execute(this, script.c_str(), &sErrorMessage); | |
61 } | |
62 | |
63 if (nRet < 0) { | |
64 *info += sErrorMessage; | |
65 } else { | |
66 *info = JSGetStringFromID(this, IDS_STRING_RUN); | |
67 } | |
68 | |
69 m_pRuntime->RemoveEventFromSet(event); | |
70 m_pEventHandler->Destroy(); | |
71 m_bBusy = FALSE; | |
72 | |
73 return nRet >= 0; | |
74 } | |
75 | |
76 void CJS_Context::OnApp_Init() { | |
77 m_pEventHandler->OnApp_Init(); | |
78 } | |
79 | |
80 void CJS_Context::OnDoc_Open(CPDFSDK_Document* pDoc, | |
81 const CFX_WideString& strTargetName) { | |
82 m_pEventHandler->OnDoc_Open(pDoc, strTargetName); | |
83 } | |
84 | |
85 void CJS_Context::OnDoc_WillPrint(CPDFSDK_Document* pDoc) { | |
86 m_pEventHandler->OnDoc_WillPrint(pDoc); | |
87 } | |
88 | |
89 void CJS_Context::OnDoc_DidPrint(CPDFSDK_Document* pDoc) { | |
90 m_pEventHandler->OnDoc_DidPrint(pDoc); | |
91 } | |
92 | |
93 void CJS_Context::OnDoc_WillSave(CPDFSDK_Document* pDoc) { | |
94 m_pEventHandler->OnDoc_WillSave(pDoc); | |
95 } | |
96 | |
97 void CJS_Context::OnDoc_DidSave(CPDFSDK_Document* pDoc) { | |
98 m_pEventHandler->OnDoc_DidSave(pDoc); | |
99 } | |
100 | |
101 void CJS_Context::OnDoc_WillClose(CPDFSDK_Document* pDoc) { | |
102 m_pEventHandler->OnDoc_WillClose(pDoc); | |
103 } | |
104 | |
105 void CJS_Context::OnPage_Open(CPDFSDK_Document* pTarget) { | |
106 m_pEventHandler->OnPage_Open(pTarget); | |
107 } | |
108 | |
109 void CJS_Context::OnPage_Close(CPDFSDK_Document* pTarget) { | |
110 m_pEventHandler->OnPage_Close(pTarget); | |
111 } | |
112 | |
113 void CJS_Context::OnPage_InView(CPDFSDK_Document* pTarget) { | |
114 m_pEventHandler->OnPage_InView(pTarget); | |
115 } | |
116 | |
117 void CJS_Context::OnPage_OutView(CPDFSDK_Document* pTarget) { | |
118 m_pEventHandler->OnPage_OutView(pTarget); | |
119 } | |
120 | |
121 void CJS_Context::OnField_MouseDown(FX_BOOL bModifier, | |
122 FX_BOOL bShift, | |
123 CPDF_FormField* pTarget) { | |
124 m_pEventHandler->OnField_MouseDown(bModifier, bShift, pTarget); | |
125 } | |
126 | |
127 void CJS_Context::OnField_MouseEnter(FX_BOOL bModifier, | |
128 FX_BOOL bShift, | |
129 CPDF_FormField* pTarget) { | |
130 m_pEventHandler->OnField_MouseEnter(bModifier, bShift, pTarget); | |
131 } | |
132 | |
133 void CJS_Context::OnField_MouseExit(FX_BOOL bModifier, | |
134 FX_BOOL bShift, | |
135 CPDF_FormField* pTarget) { | |
136 m_pEventHandler->OnField_MouseExit(bModifier, bShift, pTarget); | |
137 } | |
138 | |
139 void CJS_Context::OnField_MouseUp(FX_BOOL bModifier, | |
140 FX_BOOL bShift, | |
141 CPDF_FormField* pTarget) { | |
142 m_pEventHandler->OnField_MouseUp(bModifier, bShift, pTarget); | |
143 } | |
144 | |
145 void CJS_Context::OnField_Focus(FX_BOOL bModifier, | |
146 FX_BOOL bShift, | |
147 CPDF_FormField* pTarget, | |
148 const CFX_WideString& Value) { | |
149 m_pEventHandler->OnField_Focus(bModifier, bShift, pTarget, Value); | |
150 } | |
151 | |
152 void CJS_Context::OnField_Blur(FX_BOOL bModifier, | |
153 FX_BOOL bShift, | |
154 CPDF_FormField* pTarget, | |
155 const CFX_WideString& Value) { | |
156 m_pEventHandler->OnField_Blur(bModifier, bShift, pTarget, Value); | |
157 } | |
158 | |
159 void CJS_Context::OnField_Calculate(CPDF_FormField* pSource, | |
160 CPDF_FormField* pTarget, | |
161 CFX_WideString& Value, | |
162 FX_BOOL& bRc) { | |
163 m_pEventHandler->OnField_Calculate(pSource, pTarget, Value, bRc); | |
164 } | |
165 | |
166 void CJS_Context::OnField_Format(CPDF_FormField* pTarget, | |
167 CFX_WideString& Value, | |
168 FX_BOOL bWillCommit) { | |
169 m_pEventHandler->OnField_Format(pTarget, Value, bWillCommit); | |
170 } | |
171 | |
172 void CJS_Context::OnField_Keystroke(CFX_WideString& strChange, | |
173 const CFX_WideString& strChangeEx, | |
174 FX_BOOL bKeyDown, | |
175 FX_BOOL bModifier, | |
176 int& nSelEnd, | |
177 int& nSelStart, | |
178 FX_BOOL bShift, | |
179 CPDF_FormField* pTarget, | |
180 CFX_WideString& Value, | |
181 FX_BOOL bWillCommit, | |
182 FX_BOOL bFieldFull, | |
183 FX_BOOL& bRc) { | |
184 m_pEventHandler->OnField_Keystroke( | |
185 strChange, strChangeEx, bKeyDown, bModifier, nSelEnd, nSelStart, bShift, | |
186 pTarget, Value, bWillCommit, bFieldFull, bRc); | |
187 } | |
188 | |
189 void CJS_Context::OnField_Validate(CFX_WideString& strChange, | |
190 const CFX_WideString& strChangeEx, | |
191 FX_BOOL bKeyDown, | |
192 FX_BOOL bModifier, | |
193 FX_BOOL bShift, | |
194 CPDF_FormField* pTarget, | |
195 CFX_WideString& Value, | |
196 FX_BOOL& bRc) { | |
197 m_pEventHandler->OnField_Validate(strChange, strChangeEx, bKeyDown, bModifier, | |
198 bShift, pTarget, Value, bRc); | |
199 } | |
200 | |
201 void CJS_Context::OnScreen_Focus(FX_BOOL bModifier, | |
202 FX_BOOL bShift, | |
203 CPDFSDK_Annot* pScreen) { | |
204 m_pEventHandler->OnScreen_Focus(bModifier, bShift, pScreen); | |
205 } | |
206 | |
207 void CJS_Context::OnScreen_Blur(FX_BOOL bModifier, | |
208 FX_BOOL bShift, | |
209 CPDFSDK_Annot* pScreen) { | |
210 m_pEventHandler->OnScreen_Blur(bModifier, bShift, pScreen); | |
211 } | |
212 | |
213 void CJS_Context::OnScreen_Open(FX_BOOL bModifier, | |
214 FX_BOOL bShift, | |
215 CPDFSDK_Annot* pScreen) { | |
216 m_pEventHandler->OnScreen_Open(bModifier, bShift, pScreen); | |
217 } | |
218 | |
219 void CJS_Context::OnScreen_Close(FX_BOOL bModifier, | |
220 FX_BOOL bShift, | |
221 CPDFSDK_Annot* pScreen) { | |
222 m_pEventHandler->OnScreen_Close(bModifier, bShift, pScreen); | |
223 } | |
224 | |
225 void CJS_Context::OnScreen_MouseDown(FX_BOOL bModifier, | |
226 FX_BOOL bShift, | |
227 CPDFSDK_Annot* pScreen) { | |
228 m_pEventHandler->OnScreen_MouseDown(bModifier, bShift, pScreen); | |
229 } | |
230 | |
231 void CJS_Context::OnScreen_MouseUp(FX_BOOL bModifier, | |
232 FX_BOOL bShift, | |
233 CPDFSDK_Annot* pScreen) { | |
234 m_pEventHandler->OnScreen_MouseUp(bModifier, bShift, pScreen); | |
235 } | |
236 | |
237 void CJS_Context::OnScreen_MouseEnter(FX_BOOL bModifier, | |
238 FX_BOOL bShift, | |
239 CPDFSDK_Annot* pScreen) { | |
240 m_pEventHandler->OnScreen_MouseEnter(bModifier, bShift, pScreen); | |
241 } | |
242 | |
243 void CJS_Context::OnScreen_MouseExit(FX_BOOL bModifier, | |
244 FX_BOOL bShift, | |
245 CPDFSDK_Annot* pScreen) { | |
246 m_pEventHandler->OnScreen_MouseExit(bModifier, bShift, pScreen); | |
247 } | |
248 | |
249 void CJS_Context::OnScreen_InView(FX_BOOL bModifier, | |
250 FX_BOOL bShift, | |
251 CPDFSDK_Annot* pScreen) { | |
252 m_pEventHandler->OnScreen_InView(bModifier, bShift, pScreen); | |
253 } | |
254 | |
255 void CJS_Context::OnScreen_OutView(FX_BOOL bModifier, | |
256 FX_BOOL bShift, | |
257 CPDFSDK_Annot* pScreen) { | |
258 m_pEventHandler->OnScreen_OutView(bModifier, bShift, pScreen); | |
259 } | |
260 | |
261 void CJS_Context::OnBookmark_MouseUp(CPDF_Bookmark* pBookMark) { | |
262 m_pEventHandler->OnBookmark_MouseUp(pBookMark); | |
263 } | |
264 | |
265 void CJS_Context::OnLink_MouseUp(CPDFSDK_Document* pTarget) { | |
266 m_pEventHandler->OnLink_MouseUp(pTarget); | |
267 } | |
268 | |
269 void CJS_Context::OnConsole_Exec() { | |
270 m_pEventHandler->OnConsole_Exec(); | |
271 } | |
272 | |
273 void CJS_Context::OnExternal_Exec() { | |
274 m_pEventHandler->OnExternal_Exec(); | |
275 } | |
276 | |
277 void CJS_Context::OnBatchExec(CPDFSDK_Document* pTarget) { | |
278 m_pEventHandler->OnBatchExec(pTarget); | |
279 } | |
280 | |
281 void CJS_Context::OnMenu_Exec(CPDFSDK_Document* pTarget, | |
282 const CFX_WideString& strTargetName) { | |
283 m_pEventHandler->OnMenu_Exec(pTarget, strTargetName); | |
284 } | |
OLD | NEW |