Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(702)

Unified Diff: xfa/fxfa/parser/xfa_object_imp.cpp

Issue 2011553004: Complete or comment a couple Script_NodeClass functions (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: address comments Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « xfa/fgas/localization/fgas_locale.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: xfa/fxfa/parser/xfa_object_imp.cpp
diff --git a/xfa/fxfa/parser/xfa_object_imp.cpp b/xfa/fxfa/parser/xfa_object_imp.cpp
index 6a6303e64e2c3afe834e0e752edd3d0efc2074bb..1d1a5a2290a9eecb58bd1b87d4dbff84c72f7d97 100644
--- a/xfa/fxfa/parser/xfa_object_imp.cpp
+++ b/xfa/fxfa/parser/xfa_object_imp.cpp
@@ -902,6 +902,7 @@ void CXFA_Node::Script_NodeClass_GetElement(CFXJSE_Arguments* pArguments) {
FXJSE_Value_Set(pArguments->GetReturnValue(),
m_pDocument->GetScriptContext()->GetJSValueFromMap(pNode));
}
+
void CXFA_Node::Script_NodeClass_IsPropertySpecified(
CFXJSE_Arguments* pArguments) {
int32_t iLength = pArguments->GetLength();
@@ -914,32 +915,35 @@ void CXFA_Node::Script_NodeClass_IsPropertySpecified(
FX_BOOL bParent = TRUE;
int32_t iIndex = 0;
if (iLength >= 1) {
- CFX_ByteString bsExpression = pArguments->GetUTF8String(0);
- wsExpression = CFX_WideString::FromUTF8(bsExpression.AsStringC());
+ wsExpression =
+ CFX_WideString::FromUTF8(pArguments->GetUTF8String(0).AsStringC());
}
- if (iLength >= 2) {
- bParent = pArguments->GetInt32(1) == 0 ? FALSE : TRUE;
- }
- if (iLength >= 3) {
+ if (iLength >= 2)
+ bParent = !!pArguments->GetInt32(1) ? TRUE : FALSE;
+ if (iLength >= 3)
iIndex = pArguments->GetInt32(2);
- }
FX_BOOL bHas = FALSE;
const XFA_ATTRIBUTEINFO* pAttributeInfo =
XFA_GetAttributeByName(wsExpression.AsStringC());
CFX_WideString wsValue;
- if (pAttributeInfo) {
+ if (pAttributeInfo)
bHas = HasAttribute(pAttributeInfo->eName);
- }
if (!bHas) {
const XFA_ELEMENTINFO* pElementInfo =
XFA_GetElementByName(wsExpression.AsStringC());
- bHas = (GetProperty(iIndex, pElementInfo->eName) != NULL);
+ bHas = !!GetProperty(iIndex, pElementInfo->eName);
+ if (!bHas && bParent && m_pParent) {
+ // Also check on the parent.
+ bHas = m_pParent->HasAttribute(pAttributeInfo->eName);
+ if (!bHas)
+ bHas = !!m_pParent->GetProperty(iIndex, pElementInfo->eName);
+ }
}
FXJSE_HVALUE hValue = pArguments->GetReturnValue();
- if (hValue) {
+ if (hValue)
FXJSE_Value_SetBoolean(hValue, bHas);
- }
}
+
void CXFA_Node::Script_NodeClass_LoadXML(CFXJSE_Arguments* pArguments) {
int32_t iLength = pArguments->GetLength();
if (iLength < 1 || iLength > 3) {
@@ -1078,64 +1082,45 @@ void CXFA_Node::Script_NodeClass_SaveXML(CFXJSE_Arguments* pArguments) {
}
FX_BOOL bPrettyMode = FALSE;
if (iLength == 1) {
- CFX_ByteString bsPretty = pArguments->GetUTF8String(0);
- if (bsPretty != "pretty") {
+ if (pArguments->GetUTF8String(0) != "pretty") {
ThrowScriptErrorMessage(XFA_IDS_ARGUMENT_MISMATCH);
return;
}
bPrettyMode = TRUE;
}
CFX_ByteStringC bsXMLHeader = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
- if (GetPacketID() == XFA_XDPPACKET_Form) {
- IFX_MemoryStream* pMemoryStream = FX_CreateMemoryStream(TRUE);
- IFX_Stream* pStream = IFX_Stream::CreateStream(
- (IFX_FileWrite*)pMemoryStream,
- FX_STREAMACCESS_Text | FX_STREAMACCESS_Write | FX_STREAMACCESS_Append);
+ if (GetPacketID() == XFA_XDPPACKET_Form ||
+ GetPacketID() == XFA_XDPPACKET_Datasets) {
+ CFDE_XMLNode* pElement = nullptr;
+ if (GetPacketID() == XFA_XDPPACKET_Datasets) {
+ pElement = GetXMLMappingNode();
+ if (!pElement || pElement->GetType() != FDE_XMLNODE_Element) {
+ FXJSE_Value_SetUTF8String(pArguments->GetReturnValue(), bsXMLHeader);
+ return;
+ }
+ XFA_DataExporter_DealWithDataGroupNode(this);
+ }
+ std::unique_ptr<IFX_MemoryStream> pMemoryStream(
+ FX_CreateMemoryStream(TRUE));
+ std::unique_ptr<IFX_Stream> pStream(IFX_Stream::CreateStream(
+ (IFX_FileWrite*)pMemoryStream.get(),
+ FX_STREAMACCESS_Text | FX_STREAMACCESS_Write | FX_STREAMACCESS_Append));
if (!pStream) {
FXJSE_Value_SetUTF8String(pArguments->GetReturnValue(), bsXMLHeader);
- pMemoryStream->Release();
- pMemoryStream = NULL;
return;
}
pStream->SetCodePage(FX_CODEPAGE_UTF8);
pStream->WriteData(bsXMLHeader.raw_str(), bsXMLHeader.GetLength());
- XFA_DataExporter_RegenerateFormFile(this, pStream, NULL, TRUE);
+ if (GetPacketID() == XFA_XDPPACKET_Form)
+ XFA_DataExporter_RegenerateFormFile(this, pStream.get(), NULL, TRUE);
+ else
+ pElement->SaveXMLNode(pStream.get());
+ // TODO(weili): Check whether we need to save pretty print XML, pdfium:501.
+ // For now, just put it here to avoid unused variable warning.
+ (void)bPrettyMode;
FXJSE_Value_SetUTF8String(
pArguments->GetReturnValue(),
CFX_ByteStringC(pMemoryStream->GetBuffer(), pMemoryStream->GetSize()));
- pStream->Release();
- pStream = NULL;
- if (pMemoryStream) {
- pMemoryStream->Release();
- pMemoryStream = NULL;
- }
- return;
- }
- if (GetPacketID() == XFA_XDPPACKET_Datasets) {
- CFDE_XMLNode* pElement = GetXMLMappingNode();
- if (!pElement || pElement->GetType() != FDE_XMLNODE_Element) {
- FXJSE_Value_SetUTF8String(pArguments->GetReturnValue(), bsXMLHeader);
- return;
- }
- XFA_DataExporter_DealWithDataGroupNode(this);
- IFX_MemoryStream* pMemoryStream = FX_CreateMemoryStream(TRUE);
- IFX_Stream* pStream = IFX_Stream::CreateStream(
- (IFX_FileWrite*)pMemoryStream,
- FX_STREAMACCESS_Text | FX_STREAMACCESS_Write | FX_STREAMACCESS_Append);
- if (pStream) {
- pStream->SetCodePage(FX_CODEPAGE_UTF8);
- pStream->WriteData(bsXMLHeader.raw_str(), bsXMLHeader.GetLength());
- pElement->SaveXMLNode(pStream);
- FXJSE_Value_SetUTF8String(pArguments->GetReturnValue(),
- CFX_ByteStringC(pMemoryStream->GetBuffer(),
- pMemoryStream->GetSize()));
- pStream->Release();
- pStream = NULL;
- }
- if (pMemoryStream) {
- pMemoryStream->Release();
- pMemoryStream = NULL;
- }
return;
}
FXJSE_Value_SetUTF8String(pArguments->GetReturnValue(), "");
« no previous file with comments | « xfa/fgas/localization/fgas_locale.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698