| 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 |