// Copyright 2018 PDFium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com #include "xfa/fxfa/parser/cxfa_nodeowner.h" #include #include "third_party/base/stl_util.h" #include "xfa/fxfa/parser/cxfa_node.h" CXFA_NodeOwner::CXFA_NodeOwner() = default; CXFA_NodeOwner::~CXFA_NodeOwner() = default; void CXFA_NodeOwner::ReleaseXMLNodesIfNeeded() { // Because we don't know what order we'll free the nodes we may end up // destroying the XML tree before nodes have been cleaned up that point into // it. This will cause the ProbeForLowSeverityLifetimeIssue to fire. // // This doesn't happen in the destructor because of the ownership semantics // between the CXFA_Document and CXFA_DocumentParser. It has to happen before // the simple parser is destroyed, but the document has to live longer then // the simple parser. for (auto& it : nodes_) it->ReleaseXMLNodeIfUnowned(); } CXFA_Node* CXFA_NodeOwner::AddOwnedNode(std::unique_ptr node) { if (!node) return nullptr; CXFA_Node* ret = node.get(); nodes_.insert(std::move(node)); return ret; } void CXFA_NodeOwner::FreeOwnedNode(CXFA_Node* node) { if (!node) return; pdfium::FakeUniquePtr search(node); auto it = nodes_.find(search); assert(it != nodes_.end()); nodes_.erase(it); }