From 83cb4369f97a244fc34633b31b3b75abb993a392 Mon Sep 17 00:00:00 2001 From: Dan Sinclair Date: Tue, 14 Nov 2017 18:40:53 +0000 Subject: Remove CXFA_Node friend class This CL removes the CXFA_Document friendship with CXFA_Node and adds a CXFA_Node::Create method to create the node objects. Change-Id: If77f9a631b3aa0720803c869446135b8cc17d3c3 Reviewed-on: https://pdfium-review.googlesource.com/18250 Commit-Queue: dsinclair Reviewed-by: Tom Sepez --- xfa/fxfa/parser/cxfa_document.cpp | 15 +++++++-------- xfa/fxfa/parser/cxfa_node.cpp | 8 ++++++++ xfa/fxfa/parser/cxfa_node.h | 7 +++++-- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/xfa/fxfa/parser/cxfa_document.cpp b/xfa/fxfa/parser/cxfa_document.cpp index c80dec979a..c374b762ba 100644 --- a/xfa/fxfa/parser/cxfa_document.cpp +++ b/xfa/fxfa/parser/cxfa_document.cpp @@ -214,15 +214,14 @@ CXFA_Node* CXFA_Document::CreateNode(const XFA_PACKETINFO* pPacket, return nullptr; const XFA_ELEMENTINFO* pElement = XFA_GetElementByID(eElement); - if (pElement && (pElement->dwPackets & pPacket->eName)) { - CXFA_Node* pNode = - new CXFA_Node(this, pPacket->eName, pElement->eObjectType, - pElement->eName, pElement->pName); - AddPurgeNode(pNode); - return pNode; - } + if (!pElement || !(pElement->dwPackets & pPacket->eName)) + return nullptr; - return nullptr; + std::unique_ptr pNode = + CXFA_Node::Create(this, pPacket->eName, pElement); + // TODO(dsinclair): AddPrugeNode should take ownership of the pointer. + AddPurgeNode(pNode.get()); + return pNode.release(); } void CXFA_Document::AddPurgeNode(CXFA_Node* pNode) { diff --git a/xfa/fxfa/parser/cxfa_node.cpp b/xfa/fxfa/parser/cxfa_node.cpp index a91b87766d..2ab0b18cf5 100644 --- a/xfa/fxfa/parser/cxfa_node.cpp +++ b/xfa/fxfa/parser/cxfa_node.cpp @@ -143,6 +143,14 @@ const XFA_ATTRIBUTEENUMINFO* GetAttributeEnumByID(XFA_ATTRIBUTEENUM eName) { return g_XFAEnumData + eName; } +// static +std::unique_ptr CXFA_Node::Create(CXFA_Document* doc, + XFA_XDPPACKET packet, + const XFA_ELEMENTINFO* pElement) { + return std::unique_ptr(new CXFA_Node( + doc, packet, pElement->eObjectType, pElement->eName, pElement->pName)); +} + CXFA_Node::CXFA_Node(CXFA_Document* pDoc, uint16_t ePacket, XFA_ObjectType oType, diff --git a/xfa/fxfa/parser/cxfa_node.h b/xfa/fxfa/parser/cxfa_node.h index 47be027d28..073fd5261f 100644 --- a/xfa/fxfa/parser/cxfa_node.h +++ b/xfa/fxfa/parser/cxfa_node.h @@ -8,6 +8,7 @@ #define XFA_FXFA_PARSER_CXFA_NODE_H_ #include +#include #include #include "core/fxcrt/fx_string.h" @@ -45,6 +46,10 @@ const XFA_ATTRIBUTEENUMINFO* GetAttributeEnumByID(XFA_ATTRIBUTEENUM eName); class CXFA_Node : public CXFA_Object { public: + static std::unique_ptr Create(CXFA_Document* doc, + XFA_XDPPACKET packet, + const XFA_ELEMENTINFO* pElement); + ~CXFA_Node() override; uint32_t GetPacketID() const { return m_ePacket; } @@ -136,8 +141,6 @@ class CXFA_Node : public CXFA_Object { CXFA_Node* GetOccurNode(); private: - friend class CXFA_Document; - CXFA_Node(CXFA_Document* pDoc, uint16_t ePacket, XFA_ObjectType oType, -- cgit v1.2.3