| 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 "core/fxcrt/include/fx_ext.h" | 7 #include "core/fxcrt/include/fx_ext.h" |
| 8 #include "xfa/fxfa/app/xfa_ffnotify.h" | 8 #include "xfa/fxfa/app/xfa_ffnotify.h" |
| 9 #include "xfa/fxfa/fm2js/xfa_fm2jsapi.h" | 9 #include "xfa/fxfa/fm2js/xfa_fm2jsapi.h" |
| 10 #include "xfa/fxfa/parser/xfa_basic_imp.h" | 10 #include "xfa/fxfa/parser/xfa_basic_imp.h" |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 if (m_pRootNode) { | 87 if (m_pRootNode) { |
| 88 AddPurgeNode(m_pRootNode); | 88 AddPurgeNode(m_pRootNode); |
| 89 } | 89 } |
| 90 m_pRootNode = pNewRoot; | 90 m_pRootNode = pNewRoot; |
| 91 RemovePurgeNode(pNewRoot); | 91 RemovePurgeNode(pNewRoot); |
| 92 } | 92 } |
| 93 CXFA_FFNotify* CXFA_Document::GetNotify() const { | 93 CXFA_FFNotify* CXFA_Document::GetNotify() const { |
| 94 return m_pParser->GetNotify(); | 94 return m_pParser->GetNotify(); |
| 95 } | 95 } |
| 96 CXFA_Object* CXFA_Document::GetXFAObject(const CFX_WideStringC& wsNodeName) { | 96 CXFA_Object* CXFA_Document::GetXFAObject(const CFX_WideStringC& wsNodeName) { |
| 97 return GetXFAObject( | 97 return GetXFAObject(FX_HashCode_GetW(wsNodeName, false)); |
| 98 FX_HashCode_String_GetW(wsNodeName.c_str(), wsNodeName.GetLength())); | |
| 99 } | 98 } |
| 100 CXFA_Object* CXFA_Document::GetXFAObject(uint32_t dwNodeNameHash) { | 99 CXFA_Object* CXFA_Document::GetXFAObject(uint32_t dwNodeNameHash) { |
| 101 switch (dwNodeNameHash) { | 100 switch (dwNodeNameHash) { |
| 102 case XFA_HASHCODE_Data: { | 101 case XFA_HASHCODE_Data: { |
| 103 CXFA_Node* pDatasetsNode = ToNode(GetXFAObject(XFA_HASHCODE_Datasets)); | 102 CXFA_Node* pDatasetsNode = ToNode(GetXFAObject(XFA_HASHCODE_Datasets)); |
| 104 if (!pDatasetsNode) { | 103 if (!pDatasetsNode) { |
| 105 return NULL; | 104 return NULL; |
| 106 } | 105 } |
| 107 for (CXFA_Node* pDatasetsChild = | 106 for (CXFA_Node* pDatasetsChild = |
| 108 pDatasetsNode->GetFirstChildByClass(XFA_ELEMENT_DataGroup); | 107 pDatasetsNode->GetFirstChildByClass(XFA_ELEMENT_DataGroup); |
| (...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 360 if (!pTemplateRoot) { | 359 if (!pTemplateRoot) { |
| 361 return; | 360 return; |
| 362 } | 361 } |
| 363 CFX_MapPtrTemplate<uint32_t, CXFA_Node*> mIDMap; | 362 CFX_MapPtrTemplate<uint32_t, CXFA_Node*> mIDMap; |
| 364 CXFA_NodeSet sUseNodes; | 363 CXFA_NodeSet sUseNodes; |
| 365 CXFA_NodeIterator sIterator(pTemplateRoot); | 364 CXFA_NodeIterator sIterator(pTemplateRoot); |
| 366 for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode; | 365 for (CXFA_Node* pNode = sIterator.GetCurrent(); pNode; |
| 367 pNode = sIterator.MoveToNext()) { | 366 pNode = sIterator.MoveToNext()) { |
| 368 CFX_WideStringC wsIDVal; | 367 CFX_WideStringC wsIDVal; |
| 369 if (pNode->TryCData(XFA_ATTRIBUTE_Id, wsIDVal) && !wsIDVal.IsEmpty()) { | 368 if (pNode->TryCData(XFA_ATTRIBUTE_Id, wsIDVal) && !wsIDVal.IsEmpty()) { |
| 370 mIDMap[FX_HashCode_String_GetW(wsIDVal.c_str(), wsIDVal.GetLength())] = | 369 mIDMap[FX_HashCode_GetW(wsIDVal, false)] = pNode; |
| 371 pNode; | |
| 372 } | 370 } |
| 373 CFX_WideStringC wsUseVal; | 371 CFX_WideStringC wsUseVal; |
| 374 if (pNode->TryCData(XFA_ATTRIBUTE_Use, wsUseVal) && !wsUseVal.IsEmpty()) { | 372 if (pNode->TryCData(XFA_ATTRIBUTE_Use, wsUseVal) && !wsUseVal.IsEmpty()) { |
| 375 sUseNodes.Add(pNode); | 373 sUseNodes.Add(pNode); |
| 376 } else if (pNode->TryCData(XFA_ATTRIBUTE_Usehref, wsUseVal) && | 374 } else if (pNode->TryCData(XFA_ATTRIBUTE_Usehref, wsUseVal) && |
| 377 !wsUseVal.IsEmpty()) { | 375 !wsUseVal.IsEmpty()) { |
| 378 sUseNodes.Add(pNode); | 376 sUseNodes.Add(pNode); |
| 379 } | 377 } |
| 380 } | 378 } |
| 381 FX_POSITION pos = sUseNodes.GetStartPosition(); | 379 FX_POSITION pos = sUseNodes.GetStartPosition(); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 419 uint32_t dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Attributes | | 417 uint32_t dwFlag = XFA_RESOLVENODE_Children | XFA_RESOLVENODE_Attributes | |
| 420 XFA_RESOLVENODE_Properties | XFA_RESOLVENODE_Parent | | 418 XFA_RESOLVENODE_Properties | XFA_RESOLVENODE_Parent | |
| 421 XFA_RESOLVENODE_Siblings; | 419 XFA_RESOLVENODE_Siblings; |
| 422 XFA_RESOLVENODE_RS resoveNodeRS; | 420 XFA_RESOLVENODE_RS resoveNodeRS; |
| 423 int32_t iRet = m_pScriptContext->ResolveObjects(pUseHrefNode, wsSOM, | 421 int32_t iRet = m_pScriptContext->ResolveObjects(pUseHrefNode, wsSOM, |
| 424 resoveNodeRS, dwFlag); | 422 resoveNodeRS, dwFlag); |
| 425 if (iRet > 0 && resoveNodeRS.nodes[0]->IsNode()) { | 423 if (iRet > 0 && resoveNodeRS.nodes[0]->IsNode()) { |
| 426 pProtoNode = resoveNodeRS.nodes[0]->AsNode(); | 424 pProtoNode = resoveNodeRS.nodes[0]->AsNode(); |
| 427 } | 425 } |
| 428 } else if (!wsID.IsEmpty()) { | 426 } else if (!wsID.IsEmpty()) { |
| 429 if (!mIDMap.Lookup( | 427 if (!mIDMap.Lookup(FX_HashCode_GetW(wsID, false), pProtoNode)) { |
| 430 FX_HashCode_String_GetW(wsID.c_str(), wsID.GetLength()), | |
| 431 pProtoNode)) { | |
| 432 continue; | 428 continue; |
| 433 } | 429 } |
| 434 } | 430 } |
| 435 if (!pProtoNode) { | 431 if (!pProtoNode) { |
| 436 continue; | 432 continue; |
| 437 } | 433 } |
| 438 XFA_ProtoMerge_MergeNode(this, pUseHrefNode, pProtoNode); | 434 XFA_ProtoMerge_MergeNode(this, pUseHrefNode, pProtoNode); |
| 439 } | 435 } |
| 440 } | 436 } |
| OLD | NEW |