OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "xfa/fxfa/parser/xfa_script_imp.h" | 7 #include "xfa/fxfa/parser/xfa_script_imp.h" |
8 | 8 |
9 #include "core/fxcrt/include/fx_ext.h" | 9 #include "core/fxcrt/include/fx_ext.h" |
10 #include "xfa/fxfa/app/xfa_ffnotify.h" | 10 #include "xfa/fxfa/app/xfa_ffnotify.h" |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
152 FXJSE_ExecuteScript(m_pJsContext, btScript.c_str(), hRetValue, pValue); | 152 FXJSE_ExecuteScript(m_pJsContext, btScript.c_str(), hRetValue, pValue); |
153 m_pThisObject = pOriginalObject; | 153 m_pThisObject = pOriginalObject; |
154 m_eScriptType = eSaveType; | 154 m_eScriptType = eSaveType; |
155 return bRet; | 155 return bRet; |
156 } | 156 } |
157 void CXFA_ScriptContext::GlobalPropertySetter(CFXJSE_Value* pObject, | 157 void CXFA_ScriptContext::GlobalPropertySetter(CFXJSE_Value* pObject, |
158 const CFX_ByteStringC& szPropName, | 158 const CFX_ByteStringC& szPropName, |
159 CFXJSE_Value* pValue) { | 159 CFXJSE_Value* pValue) { |
160 CXFA_Object* lpOrginalNode = ToObject(pObject, nullptr); | 160 CXFA_Object* lpOrginalNode = ToObject(pObject, nullptr); |
161 CXFA_Document* pDoc = lpOrginalNode->GetDocument(); | 161 CXFA_Document* pDoc = lpOrginalNode->GetDocument(); |
162 CXFA_ScriptContext* lpScriptContext = | 162 CXFA_ScriptContext* lpScriptContext = pDoc->GetScriptContext(); |
163 (CXFA_ScriptContext*)pDoc->GetScriptContext(); | |
164 CXFA_Object* lpCurNode = lpScriptContext->GetVariablesThis(lpOrginalNode); | 163 CXFA_Object* lpCurNode = lpScriptContext->GetVariablesThis(lpOrginalNode); |
165 CFX_WideString wsPropName = CFX_WideString::FromUTF8(szPropName); | 164 CFX_WideString wsPropName = CFX_WideString::FromUTF8(szPropName); |
166 uint32_t dwFlag = XFA_RESOLVENODE_Parent | XFA_RESOLVENODE_Siblings | | 165 uint32_t dwFlag = XFA_RESOLVENODE_Parent | XFA_RESOLVENODE_Siblings | |
167 XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties | | 166 XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties | |
168 XFA_RESOLVENODE_Attributes; | 167 XFA_RESOLVENODE_Attributes; |
169 CXFA_Node* pRefNode = ToNode(lpScriptContext->GetThisObject()); | 168 CXFA_Node* pRefNode = ToNode(lpScriptContext->GetThisObject()); |
170 if (lpOrginalNode->GetObjectType() == XFA_OBJECTTYPE_VariablesThis) { | 169 if (lpOrginalNode->GetObjectType() == XFA_OBJECTTYPE_VariablesThis) { |
171 pRefNode = ToNode(lpCurNode); | 170 pRefNode = ToNode(lpCurNode); |
172 } | 171 } |
173 if (lpScriptContext->QueryNodeByFlag(pRefNode, wsPropName.AsStringC(), pValue, | 172 if (lpScriptContext->QueryNodeByFlag(pRefNode, wsPropName.AsStringC(), pValue, |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
208 pValue, bSetting, (XFA_ATTRIBUTE)lpAttributeInfo->eAttribute); | 207 pValue, bSetting, (XFA_ATTRIBUTE)lpAttributeInfo->eAttribute); |
209 } | 208 } |
210 } | 209 } |
211 return true; | 210 return true; |
212 } | 211 } |
213 void CXFA_ScriptContext::GlobalPropertyGetter(CFXJSE_Value* pObject, | 212 void CXFA_ScriptContext::GlobalPropertyGetter(CFXJSE_Value* pObject, |
214 const CFX_ByteStringC& szPropName, | 213 const CFX_ByteStringC& szPropName, |
215 CFXJSE_Value* pValue) { | 214 CFXJSE_Value* pValue) { |
216 CXFA_Object* pOriginalObject = ToObject(pObject, nullptr); | 215 CXFA_Object* pOriginalObject = ToObject(pObject, nullptr); |
217 CXFA_Document* pDoc = pOriginalObject->GetDocument(); | 216 CXFA_Document* pDoc = pOriginalObject->GetDocument(); |
218 CXFA_ScriptContext* lpScriptContext = | 217 CXFA_ScriptContext* lpScriptContext = pDoc->GetScriptContext(); |
219 (CXFA_ScriptContext*)pDoc->GetScriptContext(); | |
220 CXFA_Object* lpCurNode = lpScriptContext->GetVariablesThis(pOriginalObject); | 218 CXFA_Object* lpCurNode = lpScriptContext->GetVariablesThis(pOriginalObject); |
221 CFX_WideString wsPropName = CFX_WideString::FromUTF8(szPropName); | 219 CFX_WideString wsPropName = CFX_WideString::FromUTF8(szPropName); |
222 if (lpScriptContext->GetType() == XFA_SCRIPTLANGTYPE_Formcalc) { | 220 if (lpScriptContext->GetType() == XFA_SCRIPTLANGTYPE_Formcalc) { |
223 if (szPropName == kFormCalcRuntime) { | 221 if (szPropName == kFormCalcRuntime) { |
224 lpScriptContext->m_hFM2JSContext->GlobalPropertyGetter(pValue); | 222 lpScriptContext->m_hFM2JSContext->GlobalPropertyGetter(pValue); |
225 return; | 223 return; |
226 } | 224 } |
227 XFA_HashCode uHashCode = static_cast<XFA_HashCode>( | 225 XFA_HashCode uHashCode = static_cast<XFA_HashCode>( |
228 FX_HashCode_GetW(wsPropName.AsStringC(), false)); | 226 FX_HashCode_GetW(wsPropName.AsStringC(), false)); |
229 if (uHashCode != XFA_HASHCODE_Layout) { | 227 if (uHashCode != XFA_HASHCODE_Layout) { |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
267 void CXFA_ScriptContext::NormalPropertyGetter(CFXJSE_Value* pOriginalValue, | 265 void CXFA_ScriptContext::NormalPropertyGetter(CFXJSE_Value* pOriginalValue, |
268 const CFX_ByteStringC& szPropName, | 266 const CFX_ByteStringC& szPropName, |
269 CFXJSE_Value* pReturnValue) { | 267 CFXJSE_Value* pReturnValue) { |
270 CXFA_Object* pOriginalObject = ToObject(pOriginalValue, nullptr); | 268 CXFA_Object* pOriginalObject = ToObject(pOriginalValue, nullptr); |
271 if (!pOriginalObject) { | 269 if (!pOriginalObject) { |
272 FXJSE_Value_SetUndefined(pReturnValue); | 270 FXJSE_Value_SetUndefined(pReturnValue); |
273 return; | 271 return; |
274 } | 272 } |
275 CFX_WideString wsPropName = CFX_WideString::FromUTF8(szPropName); | 273 CFX_WideString wsPropName = CFX_WideString::FromUTF8(szPropName); |
276 CXFA_ScriptContext* lpScriptContext = | 274 CXFA_ScriptContext* lpScriptContext = |
277 (CXFA_ScriptContext*)pOriginalObject->GetDocument()->GetScriptContext(); | 275 pOriginalObject->GetDocument()->GetScriptContext(); |
278 CXFA_Object* pObject = lpScriptContext->GetVariablesThis(pOriginalObject); | 276 CXFA_Object* pObject = lpScriptContext->GetVariablesThis(pOriginalObject); |
279 if (wsPropName == FX_WSTRC(L"xfa")) { | 277 if (wsPropName == FX_WSTRC(L"xfa")) { |
280 CFXJSE_Value* pValue = lpScriptContext->GetJSValueFromMap( | 278 CFXJSE_Value* pValue = lpScriptContext->GetJSValueFromMap( |
281 lpScriptContext->GetDocument()->GetRoot()); | 279 lpScriptContext->GetDocument()->GetRoot()); |
282 FXJSE_Value_Set(pReturnValue, pValue); | 280 FXJSE_Value_Set(pReturnValue, pValue); |
283 return; | 281 return; |
284 } | 282 } |
285 uint32_t dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties | | 283 uint32_t dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Properties | |
286 XFA_RESOLVENODE_Attributes; | 284 XFA_RESOLVENODE_Attributes; |
287 FX_BOOL bRet = lpScriptContext->QueryNodeByFlag( | 285 FX_BOOL bRet = lpScriptContext->QueryNodeByFlag( |
(...skipping 22 matching lines...) Expand all Loading... |
310 } | 308 } |
311 } | 309 } |
312 void CXFA_ScriptContext::NormalPropertySetter(CFXJSE_Value* pOriginalValue, | 310 void CXFA_ScriptContext::NormalPropertySetter(CFXJSE_Value* pOriginalValue, |
313 const CFX_ByteStringC& szPropName, | 311 const CFX_ByteStringC& szPropName, |
314 CFXJSE_Value* pReturnValue) { | 312 CFXJSE_Value* pReturnValue) { |
315 CXFA_Object* pOriginalObject = ToObject(pOriginalValue, nullptr); | 313 CXFA_Object* pOriginalObject = ToObject(pOriginalValue, nullptr); |
316 if (!pOriginalObject) | 314 if (!pOriginalObject) |
317 return; | 315 return; |
318 | 316 |
319 CXFA_ScriptContext* lpScriptContext = | 317 CXFA_ScriptContext* lpScriptContext = |
320 (CXFA_ScriptContext*)pOriginalObject->GetDocument()->GetScriptContext(); | 318 pOriginalObject->GetDocument()->GetScriptContext(); |
321 CXFA_Object* pObject = lpScriptContext->GetVariablesThis(pOriginalObject); | 319 CXFA_Object* pObject = lpScriptContext->GetVariablesThis(pOriginalObject); |
322 CFX_WideString wsPropName = CFX_WideString::FromUTF8(szPropName); | 320 CFX_WideString wsPropName = CFX_WideString::FromUTF8(szPropName); |
323 const XFA_SCRIPTATTRIBUTEINFO* lpAttributeInfo = XFA_GetScriptAttributeByName( | 321 const XFA_SCRIPTATTRIBUTEINFO* lpAttributeInfo = XFA_GetScriptAttributeByName( |
324 pObject->GetClassID(), wsPropName.AsStringC()); | 322 pObject->GetClassID(), wsPropName.AsStringC()); |
325 if (lpAttributeInfo) { | 323 if (lpAttributeInfo) { |
326 (pObject->*(lpAttributeInfo->lpfnCallback))( | 324 (pObject->*(lpAttributeInfo->lpfnCallback))( |
327 pReturnValue, TRUE, (XFA_ATTRIBUTE)lpAttributeInfo->eAttribute); | 325 pReturnValue, TRUE, (XFA_ATTRIBUTE)lpAttributeInfo->eAttribute); |
328 } else { | 326 } else { |
329 if (pObject->IsNode()) { | 327 if (pObject->IsNode()) { |
330 if (wsPropName.GetAt(0) == '#') { | 328 if (wsPropName.GetAt(0) == '#') { |
(...skipping 30 matching lines...) Expand all Loading... |
361 } | 359 } |
362 int32_t CXFA_ScriptContext::NormalPropTypeGetter( | 360 int32_t CXFA_ScriptContext::NormalPropTypeGetter( |
363 CFXJSE_Value* pOriginalValue, | 361 CFXJSE_Value* pOriginalValue, |
364 const CFX_ByteStringC& szPropName, | 362 const CFX_ByteStringC& szPropName, |
365 FX_BOOL bQueryIn) { | 363 FX_BOOL bQueryIn) { |
366 CXFA_Object* pObject = ToObject(pOriginalValue, nullptr); | 364 CXFA_Object* pObject = ToObject(pOriginalValue, nullptr); |
367 if (!pObject) | 365 if (!pObject) |
368 return FXJSE_ClassPropType_None; | 366 return FXJSE_ClassPropType_None; |
369 | 367 |
370 CXFA_ScriptContext* lpScriptContext = | 368 CXFA_ScriptContext* lpScriptContext = |
371 (CXFA_ScriptContext*)pObject->GetDocument()->GetScriptContext(); | 369 pObject->GetDocument()->GetScriptContext(); |
372 pObject = lpScriptContext->GetVariablesThis(pObject); | 370 pObject = lpScriptContext->GetVariablesThis(pObject); |
373 XFA_ELEMENT objElement = pObject->GetClassID(); | 371 XFA_ELEMENT objElement = pObject->GetClassID(); |
374 CFX_WideString wsPropName = CFX_WideString::FromUTF8(szPropName); | 372 CFX_WideString wsPropName = CFX_WideString::FromUTF8(szPropName); |
375 if (XFA_GetMethodByName(objElement, wsPropName.AsStringC())) { | 373 if (XFA_GetMethodByName(objElement, wsPropName.AsStringC())) { |
376 return FXJSE_ClassPropType_Method; | 374 return FXJSE_ClassPropType_Method; |
377 } | 375 } |
378 if (bQueryIn && | 376 if (bQueryIn && |
379 !XFA_GetScriptAttributeByName(objElement, wsPropName.AsStringC())) { | 377 !XFA_GetScriptAttributeByName(objElement, wsPropName.AsStringC())) { |
380 return FXJSE_ClassPropType_None; | 378 return FXJSE_ClassPropType_None; |
381 } | 379 } |
382 return FXJSE_ClassPropType_Property; | 380 return FXJSE_ClassPropType_Property; |
383 } | 381 } |
384 int32_t CXFA_ScriptContext::GlobalPropTypeGetter( | 382 int32_t CXFA_ScriptContext::GlobalPropTypeGetter( |
385 CFXJSE_Value* pOriginalValue, | 383 CFXJSE_Value* pOriginalValue, |
386 const CFX_ByteStringC& szPropName, | 384 const CFX_ByteStringC& szPropName, |
387 FX_BOOL bQueryIn) { | 385 FX_BOOL bQueryIn) { |
388 CXFA_Object* pObject = ToObject(pOriginalValue, nullptr); | 386 CXFA_Object* pObject = ToObject(pOriginalValue, nullptr); |
389 if (!pObject) | 387 if (!pObject) |
390 return FXJSE_ClassPropType_None; | 388 return FXJSE_ClassPropType_None; |
391 | 389 |
392 CXFA_ScriptContext* lpScriptContext = | 390 CXFA_ScriptContext* lpScriptContext = |
393 (CXFA_ScriptContext*)pObject->GetDocument()->GetScriptContext(); | 391 pObject->GetDocument()->GetScriptContext(); |
394 pObject = lpScriptContext->GetVariablesThis(pObject); | 392 pObject = lpScriptContext->GetVariablesThis(pObject); |
395 XFA_ELEMENT objElement = pObject->GetClassID(); | 393 XFA_ELEMENT objElement = pObject->GetClassID(); |
396 CFX_WideString wsPropName = CFX_WideString::FromUTF8(szPropName); | 394 CFX_WideString wsPropName = CFX_WideString::FromUTF8(szPropName); |
397 if (XFA_GetMethodByName(objElement, wsPropName.AsStringC())) { | 395 if (XFA_GetMethodByName(objElement, wsPropName.AsStringC())) { |
398 return FXJSE_ClassPropType_Method; | 396 return FXJSE_ClassPropType_Method; |
399 } | 397 } |
400 return FXJSE_ClassPropType_Property; | 398 return FXJSE_ClassPropType_Property; |
401 } | 399 } |
402 void CXFA_ScriptContext::NormalMethodCall(CFXJSE_Value* pThis, | 400 void CXFA_ScriptContext::NormalMethodCall(CFXJSE_Value* pThis, |
403 const CFX_ByteStringC& szFuncName, | 401 const CFX_ByteStringC& szFuncName, |
404 CFXJSE_Arguments& args) { | 402 CFXJSE_Arguments& args) { |
405 CXFA_Object* pObject = ToObject(pThis, nullptr); | 403 CXFA_Object* pObject = ToObject(pThis, nullptr); |
406 if (!pObject) | 404 if (!pObject) |
407 return; | 405 return; |
408 | 406 |
409 CXFA_ScriptContext* lpScriptContext = | 407 CXFA_ScriptContext* lpScriptContext = |
410 (CXFA_ScriptContext*)pObject->GetDocument()->GetScriptContext(); | 408 pObject->GetDocument()->GetScriptContext(); |
411 pObject = lpScriptContext->GetVariablesThis(pObject); | 409 pObject = lpScriptContext->GetVariablesThis(pObject); |
412 CFX_WideString wsFunName = CFX_WideString::FromUTF8(szFuncName); | 410 CFX_WideString wsFunName = CFX_WideString::FromUTF8(szFuncName); |
413 const XFA_METHODINFO* lpMethodInfo = | 411 const XFA_METHODINFO* lpMethodInfo = |
414 XFA_GetMethodByName(pObject->GetClassID(), wsFunName.AsStringC()); | 412 XFA_GetMethodByName(pObject->GetClassID(), wsFunName.AsStringC()); |
415 if (!lpMethodInfo) | 413 if (!lpMethodInfo) |
416 return; | 414 return; |
417 | 415 |
418 (pObject->*(lpMethodInfo->lpfnCallback))(&args); | 416 (pObject->*(lpMethodInfo->lpfnCallback))(&args); |
419 } | 417 } |
420 FX_BOOL CXFA_ScriptContext::IsStrictScopeInJavaScript() { | 418 FX_BOOL CXFA_ScriptContext::IsStrictScopeInJavaScript() { |
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
763 } | 761 } |
764 } | 762 } |
765 void CXFA_ScriptContext::AddNodesOfRunScript(CXFA_Node* pNode) { | 763 void CXFA_ScriptContext::AddNodesOfRunScript(CXFA_Node* pNode) { |
766 if (!m_pScriptNodeArray) { | 764 if (!m_pScriptNodeArray) { |
767 return; | 765 return; |
768 } | 766 } |
769 if (m_pScriptNodeArray->Find(pNode) == -1) { | 767 if (m_pScriptNodeArray->Find(pNode) == -1) { |
770 m_pScriptNodeArray->Add(pNode); | 768 m_pScriptNodeArray->Add(pNode); |
771 } | 769 } |
772 } | 770 } |
OLD | NEW |