diff options
author | Dan Sinclair <dsinclair@chromium.org> | 2017-11-14 21:19:44 +0000 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2017-11-14 21:19:44 +0000 |
commit | aee28693976cc246eea8230a999906802e52cab7 (patch) | |
tree | 612e6dbc9b79c978208a623138f70f881acb539f /fxjs | |
parent | 5a423ef8708e61d43f1556ab09c2e09f496d700d (diff) | |
download | pdfium-aee28693976cc246eea8230a999906802e52cab7.tar.xz |
Cleanup XFA default value code
This CL adds helper methods to CXFA_Node to retrieve the default values
for attributes with the correct data types.
Change-Id: I644435b4b430819f1060a95fa4fffe4ba2826cfe
Reviewed-on: https://pdfium-review.googlesource.com/18450
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: dsinclair <dsinclair@chromium.org>
Diffstat (limited to 'fxjs')
-rw-r--r-- | fxjs/cfxjse_engine.cpp | 4 | ||||
-rw-r--r-- | fxjs/cjx_node.cpp | 131 | ||||
-rw-r--r-- | fxjs/cjx_node.h | 7 |
3 files changed, 56 insertions, 86 deletions
diff --git a/fxjs/cfxjse_engine.cpp b/fxjs/cfxjse_engine.cpp index 633966173a..eb76ef1c57 100644 --- a/fxjs/cfxjse_engine.cpp +++ b/fxjs/cfxjse_engine.cpp @@ -501,11 +501,11 @@ bool CFXJSE_Engine::RunVariablesScript(CXFA_Node* pScriptNode) { if (!pTextNode) return false; - WideStringView wsScript; + WideString wsScript; if (!pTextNode->JSNode()->TryCData(XFA_Attribute::Value, wsScript, true)) return false; - ByteString btScript = FX_UTF8Encode(wsScript); + ByteString btScript = wsScript.UTF8Encode(); auto hRetValue = pdfium::MakeUnique<CFXJSE_Value>(m_pIsolate); CXFA_Node* pThisObject = pParent->GetNodeItem(XFA_NODEITEM_Parent); CFXJSE_Context* pVariablesContext = diff --git a/fxjs/cjx_node.cpp b/fxjs/cjx_node.cpp index bde131aa09..0af65464c8 100644 --- a/fxjs/cjx_node.cpp +++ b/fxjs/cjx_node.cpp @@ -278,12 +278,7 @@ bool CJX_Node::GetAttribute(XFA_Attribute eAttr, return true; } case XFA_AttributeType::CData: { - WideStringView wsValueC; - if (!TryCData(pAttr->eName, wsValueC, bUseDefault)) - return false; - - wsValue = wsValueC; - return true; + return TryCData(pAttr->eName, wsValue, bUseDefault); } case XFA_AttributeType::Boolean: { bool bValue; @@ -365,7 +360,7 @@ int32_t CJX_Node::InstanceManager_SetInstances(int32_t iDesired) { return 0; if (iDesired < iCount) { - WideStringView wsInstManagerName = GetCData(XFA_Attribute::Name); + WideString wsInstManagerName = GetCData(XFA_Attribute::Name); WideString wsInstanceName = WideString( wsInstManagerName.IsEmpty() ? wsInstManagerName @@ -761,7 +756,7 @@ void CJX_Node::Script_NodeClass_LoadXML(CFXJSE_Arguments* pArguments) { } CXFA_Node* pFakeRoot = GetXFANode()->Clone(false); - WideStringView wsContentType = GetCData(XFA_Attribute::ContentType); + WideString wsContentType = GetCData(XFA_Attribute::ContentType); if (!wsContentType.IsEmpty()) { pFakeRoot->JSNode()->SetCData(XFA_Attribute::ContentType, WideString(wsContentType), false, false); @@ -2265,13 +2260,12 @@ void CJX_Node::Script_Subform_InstanceManager(CFXJSE_Value* pValue, return; } - WideStringView wsName = GetCData(XFA_Attribute::Name); + WideString wsName = GetCData(XFA_Attribute::Name); CXFA_Node* pInstanceMgr = nullptr; for (CXFA_Node* pNode = GetXFANode()->GetNodeItem(XFA_NODEITEM_PrevSibling); pNode; pNode = pNode->GetNodeItem(XFA_NODEITEM_PrevSibling)) { if (pNode->GetElementType() == XFA_Element::InstanceManager) { - WideStringView wsInstMgrName = - pNode->JSNode()->GetCData(XFA_Attribute::Name); + WideString wsInstMgrName = pNode->JSNode()->GetCData(XFA_Attribute::Name); if (wsInstMgrName.GetLength() >= 1 && wsInstMgrName[0] == '_' && wsInstMgrName.Right(wsInstMgrName.GetLength() - 1) == wsName) { pInstanceMgr = pNode; @@ -3009,10 +3003,19 @@ void CJX_Node::Script_Encrypt_Format(CFXJSE_Value* pValue, bool CJX_Node::TryBoolean(XFA_Attribute eAttr, bool& bValue, bool bUseDefault) { void* pValue = nullptr; - if (!GetValue(eAttr, XFA_AttributeType::Boolean, bUseDefault, pValue)) + void* pKey = GetMapKey_Element(GetXFANode()->GetElementType(), eAttr); + if (GetMapModuleValue(pKey, pValue)) { + bValue = !!pValue; + return true; + } + if (!bUseDefault) return false; - bValue = !!pValue; + pdfium::Optional<bool> ret = GetXFANode()->GetDefaultBoolean(eAttr); + if (!ret) + return false; + + bValue = *ret; return true; } @@ -3039,22 +3042,40 @@ int32_t CJX_Node::GetInteger(XFA_Attribute eAttr) { bool CJX_Node::TryInteger(XFA_Attribute eAttr, int32_t& iValue, bool bUseDefault) { + void* pKey = GetMapKey_Element(GetXFANode()->GetElementType(), eAttr); void* pValue = nullptr; - if (!GetValue(eAttr, XFA_AttributeType::Integer, bUseDefault, pValue)) + if (GetMapModuleValue(pKey, pValue)) { + iValue = (int32_t)(uintptr_t)pValue; + return true; + } + if (!bUseDefault) + return false; + + pdfium::Optional<int32_t> ret = GetXFANode()->GetDefaultInteger(eAttr); + if (!ret) return false; - iValue = (int32_t)(uintptr_t)pValue; + iValue = *ret; return true; } bool CJX_Node::TryEnum(XFA_Attribute eAttr, XFA_ATTRIBUTEENUM& eValue, bool bUseDefault) { + void* pKey = GetMapKey_Element(GetXFANode()->GetElementType(), eAttr); void* pValue = nullptr; - if (!GetValue(eAttr, XFA_AttributeType::Enum, bUseDefault, pValue)) + if (GetMapModuleValue(pKey, pValue)) { + eValue = (XFA_ATTRIBUTEENUM)(uintptr_t)pValue; + return true; + } + if (!bUseDefault) return false; - eValue = (XFA_ATTRIBUTEENUM)(uintptr_t)pValue; + pdfium::Optional<XFA_ATTRIBUTEENUM> ret = GetXFANode()->GetDefaultEnum(eAttr); + if (!ret) + return false; + + eValue = *ret; return true; } @@ -3091,14 +3112,14 @@ bool CJX_Node::TryMeasure(XFA_Attribute eAttr, memcpy(&mValue, pValue, sizeof(mValue)); return true; } - if (bUseDefault && - XFA_GetAttributeDefaultValue(pValue, GetXFANode()->GetElementType(), - eAttr, XFA_AttributeType::Measure, - GetXFANode()->GetPacketID())) { - memcpy(&mValue, pValue, sizeof(mValue)); - return true; - } - return false; + if (!bUseDefault) + return false; + + pdfium::Optional<CXFA_Measurement> measure = + GetXFANode()->GetDefaultMeasurement(eAttr); + if (measure) + mValue = *measure; + return !!measure; } CXFA_Measurement CJX_Node::GetMeasure(XFA_Attribute eAttr) const { @@ -3106,9 +3127,9 @@ CXFA_Measurement CJX_Node::GetMeasure(XFA_Attribute eAttr) const { return TryMeasure(eAttr, mValue, true) ? mValue : CXFA_Measurement(); } -WideStringView CJX_Node::GetCData(XFA_Attribute eAttr) { - WideStringView wsValue; - return TryCData(eAttr, wsValue, true) ? wsValue : WideStringView(); +WideString CJX_Node::GetCData(XFA_Attribute eAttr) { + WideString wsValue; + return TryCData(eAttr, wsValue, true) ? wsValue : WideString(); } bool CJX_Node::SetCData(XFA_Attribute eAttr, @@ -3258,41 +3279,10 @@ bool CJX_Node::TryCData(XFA_Attribute eAttr, if (!bUseDefault) return false; - void* pValue = nullptr; - if (XFA_GetAttributeDefaultValue(pValue, GetXFANode()->GetElementType(), - eAttr, XFA_AttributeType::CData, - GetXFANode()->GetPacketID())) { - wsValue = (const wchar_t*)pValue; - return true; - } - return false; -} - -bool CJX_Node::TryCData(XFA_Attribute eAttr, - WideStringView& wsValue, - bool bUseDefault) { - void* pKey = GetMapKey_Element(GetXFANode()->GetElementType(), eAttr); - if (eAttr == XFA_Attribute::Value) { - WideString* pStr = (WideString*)GetUserData(pKey, true); - if (pStr) { - wsValue = pStr->AsStringView(); - return true; - } - } else { - if (GetMapModuleString(pKey, wsValue)) - return true; - } - if (!bUseDefault) - return false; - - void* pValue = nullptr; - if (XFA_GetAttributeDefaultValue(pValue, GetXFANode()->GetElementType(), - eAttr, XFA_AttributeType::CData, - GetXFANode()->GetPacketID())) { - wsValue = (WideStringView)(const wchar_t*)pValue; - return true; - } - return false; + pdfium::Optional<WideString> str = GetXFANode()->GetDefaultCData(eAttr); + if (str) + wsValue = *str; + return !!str; } bool CJX_Node::SetObject(XFA_Attribute eAttr, @@ -3352,21 +3342,6 @@ bool CJX_Node::SetValue(XFA_Attribute eAttr, return true; } -bool CJX_Node::GetValue(XFA_Attribute eAttr, - XFA_AttributeType eType, - bool bUseDefault, - void*& pValue) { - void* pKey = GetMapKey_Element(GetXFANode()->GetElementType(), eAttr); - if (GetMapModuleValue(pKey, pValue)) - return true; - if (!bUseDefault) - return false; - - return XFA_GetAttributeDefaultValue(pValue, GetXFANode()->GetElementType(), - eAttr, eType, - GetXFANode()->GetPacketID()); -} - void* CJX_Node::GetUserData(void* pKey, bool bProtoAlso) { void* pData; return TryUserData(pKey, pData, bProtoAlso) ? pData : nullptr; diff --git a/fxjs/cjx_node.h b/fxjs/cjx_node.h index 73023e5c2e..fa2b28e5e2 100644 --- a/fxjs/cjx_node.h +++ b/fxjs/cjx_node.h @@ -72,13 +72,12 @@ class CJX_Node : public CJX_Object { bool SetInteger(XFA_Attribute eAttr, int32_t iValue, bool bNotify); int32_t GetInteger(XFA_Attribute eAttr); - bool TryCData(XFA_Attribute eAttr, WideStringView& wsValue, bool bUseDefault); bool TryCData(XFA_Attribute eAttr, WideString& wsValue, bool bUseDefault); bool SetCData(XFA_Attribute eAttr, const WideString& wsValue, bool bNotify, bool bScriptModify); - WideStringView GetCData(XFA_Attribute eAttr); + WideString GetCData(XFA_Attribute eAttr); bool TryContent(WideString& wsContent, bool bScriptModify, bool bProto); @@ -409,10 +408,6 @@ class CJX_Node : public CJX_Object { XFA_AttributeType eType, void* pValue, bool bNotify); - bool GetValue(XFA_Attribute eAttr, - XFA_AttributeType eType, - bool bUseDefault, - void*& pValue); bool TryUserData(void* pKey, void*& pData, bool bProtoAlso); |