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.
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
7 #include "../../include/javascript/JavaScript.h"
8 #include "../../include/javascript/IJavaScript.h"
9 //#include "../../include/javascript/JS_ResMgr.h"
10 #include "../../include/javascript/JS_Context.h"
11 #include "../../include/javascript/JS_EventHandler.h"
12 #include "../../include/javascript/JS_Runtime.h"
13 #include "../../include/javascript/resource.h"
15 /* -------------------------- CJS_Context -------------------------- */
17 CJS_Context::CJS_Context(CJS_Runtime* pRuntime) :
22 m_pEventHandler = new CJS_EventHandler(this);
25 CJS_Context::~CJS_Context(void)
29 delete m_pEventHandler;
30 m_pEventHandler = NULL;
34 CPDFSDK_Document* CJS_Context::GetReaderDocument()
36 ASSERT(m_pRuntime != NULL);
38 return m_pRuntime->GetReaderDocument();
41 CPDFDoc_Environment* CJS_Context::GetReaderApp()
43 ASSERT(m_pRuntime != NULL);
45 return m_pRuntime->GetReaderApp();
48 FX_BOOL CJS_Context::DoJob(int nMode, const CFX_WideString& script, CFX_WideString& info)
52 info = JSGetStringFromID(this, IDS_STRING_JSBUSY);
58 ASSERT(m_pRuntime != NULL);
59 ASSERT(m_pEventHandler != NULL);
60 ASSERT(m_pEventHandler->IsValid());
62 if (!m_pRuntime->AddEventToLoop(m_pEventHandler->TargetName(), m_pEventHandler->EventType()))
64 info = JSGetStringFromID(this, IDS_STRING_JSEVENT);
68 FXJSErr error ={NULL,NULL, 0};
71 if (script.GetLength() > 0)
75 nRet = JS_Execute(*m_pRuntime, this, script, script.GetLength(), &error);
79 nRet = JS_Parse(*m_pRuntime, this, script, script.GetLength(), &error);
86 sLine.Format((FX_LPCWSTR)L"[ Line: %05d { %s } ] : %s",error.linnum-1,error.srcline,error.message);
88 // TRACE(L"/* -------------- JS Error -------------- */\n");
91 //CFX_ByteString sTemp = CFX_ByteString::FromUnicode(error.message);
96 info = JSGetStringFromID(this, IDS_STRING_RUN);
99 m_pRuntime->RemoveEventInLoop(m_pEventHandler->TargetName(), m_pEventHandler->EventType());
101 m_pEventHandler->Destroy();
107 FX_BOOL CJS_Context::RunScript(const CFX_WideString& script, CFX_WideString& info)
109 v8::Isolate::Scope isolate_scope(m_pRuntime->GetIsolate());
110 v8::HandleScope handle_scope(m_pRuntime->GetIsolate());
111 v8::Local<v8::Context> context = m_pRuntime->NewJSContext();
112 v8::Context::Scope context_scope(context);
114 return DoJob(0, script, info);
117 FX_BOOL CJS_Context::Compile(const CFX_WideString& script, CFX_WideString& info)
119 v8::Isolate::Scope isolate_scope(m_pRuntime->GetIsolate());
120 v8::HandleScope handle_scope(m_pRuntime->GetIsolate());
121 v8::Local<v8::Context> context = m_pRuntime->NewJSContext();
122 v8::Context::Scope context_scope(context);
124 return DoJob(1, script, info);
127 void CJS_Context::OnApp_Init()
129 ASSERT(m_pEventHandler != NULL);
130 m_pEventHandler->OnApp_Init();
133 void CJS_Context::OnDoc_Open(CPDFSDK_Document* pDoc, const CFX_WideString &strTargetName)
135 ASSERT(m_pEventHandler != NULL);
136 m_pEventHandler->OnDoc_Open(pDoc,strTargetName);
139 void CJS_Context::OnDoc_WillPrint(CPDFSDK_Document* pDoc)
141 ASSERT(m_pEventHandler != NULL);
142 m_pEventHandler->OnDoc_WillPrint(pDoc);
145 void CJS_Context::OnDoc_DidPrint(CPDFSDK_Document* pDoc)
147 ASSERT(m_pEventHandler != NULL);
148 m_pEventHandler->OnDoc_DidPrint(pDoc);
151 void CJS_Context::OnDoc_WillSave(CPDFSDK_Document* pDoc)
153 ASSERT(m_pEventHandler != NULL);
154 m_pEventHandler->OnDoc_WillSave(pDoc);
157 void CJS_Context::OnDoc_DidSave(CPDFSDK_Document* pDoc)
159 ASSERT(m_pEventHandler != NULL);
160 m_pEventHandler->OnDoc_DidSave(pDoc);
163 void CJS_Context::OnDoc_WillClose(CPDFSDK_Document* pDoc)
165 ASSERT(m_pEventHandler != NULL);
166 m_pEventHandler->OnDoc_WillClose(pDoc);
169 void CJS_Context::OnPage_Open(CPDFSDK_Document* pTarget)
171 ASSERT(m_pEventHandler != NULL);
172 m_pEventHandler->OnPage_Open(pTarget);
175 void CJS_Context::OnPage_Close(CPDFSDK_Document* pTarget)
177 ASSERT(m_pEventHandler != NULL);
178 m_pEventHandler->OnPage_Close(pTarget);
181 void CJS_Context::OnPage_InView(CPDFSDK_Document* pTarget)
183 ASSERT(m_pEventHandler != NULL);
184 m_pEventHandler->OnPage_InView(pTarget);
187 void CJS_Context::OnPage_OutView(CPDFSDK_Document* pTarget)
189 ASSERT(m_pEventHandler != NULL);
190 m_pEventHandler->OnPage_OutView(pTarget);
193 void CJS_Context::OnField_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget)
195 ASSERT(m_pEventHandler != NULL);
196 m_pEventHandler->OnField_MouseDown(bModifier, bShift, pTarget);
199 void CJS_Context::OnField_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget)
201 ASSERT(m_pEventHandler != NULL);
202 m_pEventHandler->OnField_MouseEnter(bModifier, bShift, pTarget);
205 void CJS_Context::OnField_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget)
207 ASSERT(m_pEventHandler != NULL);
208 m_pEventHandler->OnField_MouseExit(bModifier, bShift, pTarget);
211 void CJS_Context::OnField_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField *pTarget)
213 ASSERT(m_pEventHandler != NULL);
214 m_pEventHandler->OnField_MouseUp(bModifier, bShift, pTarget);
217 void CJS_Context::OnField_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, const CFX_WideString& Value)
219 ASSERT(m_pEventHandler != NULL);
220 m_pEventHandler->OnField_Focus(bModifier, bShift, pTarget, Value);
223 void CJS_Context::OnField_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget, const CFX_WideString& Value)
225 ASSERT(m_pEventHandler != NULL);
226 m_pEventHandler->OnField_Blur(bModifier, bShift, pTarget, Value);
229 void CJS_Context::OnField_Calculate(CPDF_FormField* pSource, CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL& bRc)
231 ASSERT(m_pEventHandler != NULL);
232 m_pEventHandler->OnField_Calculate(pSource, pTarget, Value, bRc);
235 void CJS_Context::OnField_Format(int nCommitKey, CPDF_FormField* pTarget, CFX_WideString& Value, FX_BOOL bWillCommit)
237 ASSERT(m_pEventHandler != NULL);
238 m_pEventHandler->OnField_Format(nCommitKey, pTarget, Value, bWillCommit);
242 void CJS_Context::OnField_Keystroke(int nCommitKey, CFX_WideString& strChange, const CFX_WideString& strChangeEx,
243 FX_BOOL bKeyDown, FX_BOOL bModifier, int &nSelEnd,int &nSelStart,
244 FX_BOOL bShift, CPDF_FormField* pTarget, CFX_WideString& Value,
245 FX_BOOL bWillCommit, FX_BOOL bFieldFull, FX_BOOL& bRc)
247 ASSERT(m_pEventHandler != NULL);
248 m_pEventHandler->OnField_Keystroke(nCommitKey, strChange, strChangeEx, bKeyDown,
249 bModifier, nSelEnd, nSelStart, bShift, pTarget, Value, bWillCommit, bFieldFull, bRc);
252 void CJS_Context::OnField_Validate(CFX_WideString& strChange,const CFX_WideString& strChangeEx,
253 FX_BOOL bKeyDown, FX_BOOL bModifier, FX_BOOL bShift, CPDF_FormField* pTarget,
254 CFX_WideString& Value, FX_BOOL& bRc)
256 ASSERT(m_pEventHandler != NULL);
257 m_pEventHandler->OnField_Validate(strChange, strChangeEx, bKeyDown, bModifier, bShift, pTarget, Value, bRc);
260 void CJS_Context::OnScreen_Focus(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
262 ASSERT(m_pEventHandler != NULL);
263 m_pEventHandler->OnScreen_Focus(bModifier, bShift, pScreen);
266 void CJS_Context::OnScreen_Blur(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
268 ASSERT(m_pEventHandler != NULL);
269 m_pEventHandler->OnScreen_Blur(bModifier, bShift, pScreen);
272 void CJS_Context::OnScreen_Open(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
274 ASSERT(m_pEventHandler != NULL);
275 m_pEventHandler->OnScreen_Open(bModifier, bShift, pScreen);
278 void CJS_Context::OnScreen_Close(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
280 ASSERT(m_pEventHandler != NULL);
281 m_pEventHandler->OnScreen_Close(bModifier, bShift, pScreen);
284 void CJS_Context::OnScreen_MouseDown(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
286 ASSERT(m_pEventHandler != NULL);
287 m_pEventHandler->OnScreen_MouseDown(bModifier, bShift, pScreen);
290 void CJS_Context::OnScreen_MouseUp(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
292 ASSERT(m_pEventHandler != NULL);
293 m_pEventHandler->OnScreen_MouseUp(bModifier, bShift, pScreen);
296 void CJS_Context::OnScreen_MouseEnter(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
298 ASSERT(m_pEventHandler != NULL);
299 m_pEventHandler->OnScreen_MouseEnter(bModifier, bShift, pScreen);
302 void CJS_Context::OnScreen_MouseExit(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
304 ASSERT(m_pEventHandler != NULL);
305 m_pEventHandler->OnScreen_MouseExit(bModifier, bShift, pScreen);
308 void CJS_Context::OnScreen_InView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
310 ASSERT(m_pEventHandler != NULL);
311 m_pEventHandler->OnScreen_InView(bModifier, bShift, pScreen);
314 void CJS_Context::OnScreen_OutView(FX_BOOL bModifier, FX_BOOL bShift, CPDFSDK_Annot* pScreen)
316 ASSERT(m_pEventHandler != NULL);
317 m_pEventHandler->OnScreen_OutView(bModifier, bShift, pScreen);
320 void CJS_Context::OnBookmark_MouseUp(CPDF_Bookmark* pBookMark)
322 ASSERT(m_pEventHandler != NULL);
323 m_pEventHandler->OnBookmark_MouseUp(pBookMark);
326 void CJS_Context::OnLink_MouseUp(CPDFSDK_Document* pTarget)
328 ASSERT(m_pEventHandler != NULL);
329 m_pEventHandler->OnLink_MouseUp(pTarget);
332 void CJS_Context::OnConsole_Exec()
334 ASSERT(m_pEventHandler != NULL);
335 m_pEventHandler->OnConsole_Exec();
338 void CJS_Context::OnExternal_Exec()
340 ASSERT(m_pEventHandler != NULL);
341 m_pEventHandler->OnExternal_Exec();
344 void CJS_Context::OnBatchExec(CPDFSDK_Document* pTarget)
346 ASSERT(m_pEventHandler != NULL);
347 m_pEventHandler->OnBatchExec(pTarget);
350 void CJS_Context::OnMenu_Exec(CPDFSDK_Document* pTarget,const CFX_WideString& strTargetName)
352 ASSERT(m_pEventHandler != NULL);
353 m_pEventHandler->OnMenu_Exec(pTarget, strTargetName);