summaryrefslogtreecommitdiff
path: root/xfa/fxfa/parser/cxfa_xmllocale.cpp
diff options
context:
space:
mode:
authorDan Sinclair <dsinclair@chromium.org>2018-05-02 16:02:03 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-05-02 16:02:03 +0000
commit70180648ffd01dd3716871758411d2031aaaebbe (patch)
tree6cc1d7aa3df8c3e343a1ef6f7e032bae8499f6db /xfa/fxfa/parser/cxfa_xmllocale.cpp
parent8ab2b2b2869f769dc169b4a96bb67ec596d5278b (diff)
downloadpdfium-70180648ffd01dd3716871758411d2031aaaebbe.tar.xz
Add a CFX_XMLDocument class.
This CL adds a CFX_XMLDocument to act as the XML node container. All nodes are now owned by the document and the document is returned by the CFX_XMLParser. Classes which parse XML files now store the document instead of the root node. BUG: chromium:835636 Change-Id: I1e07d6115cf14714911d6fd4c3fa920c94fd5faf Reviewed-on: https://pdfium-review.googlesource.com/31313 Reviewed-by: Henrique Nakashima <hnakashima@chromium.org> Commit-Queue: dsinclair <dsinclair@chromium.org>
Diffstat (limited to 'xfa/fxfa/parser/cxfa_xmllocale.cpp')
-rw-r--r--xfa/fxfa/parser/cxfa_xmllocale.cpp19
1 files changed, 10 insertions, 9 deletions
diff --git a/xfa/fxfa/parser/cxfa_xmllocale.cpp b/xfa/fxfa/parser/cxfa_xmllocale.cpp
index ffb4cd9dde..1922b31d7e 100644
--- a/xfa/fxfa/parser/cxfa_xmllocale.cpp
+++ b/xfa/fxfa/parser/cxfa_xmllocale.cpp
@@ -10,6 +10,7 @@
#include "core/fxcrt/cfx_memorystream.h"
#include "core/fxcrt/fx_codepage.h"
+#include "core/fxcrt/xml/cfx_xmldocument.h"
#include "core/fxcrt/xml/cfx_xmlelement.h"
#include "core/fxcrt/xml/cfx_xmlparser.h"
#include "xfa/fxfa/parser/cxfa_document.h"
@@ -30,18 +31,19 @@ constexpr wchar_t kCurrencySymbol[] = L"currencySymbol";
// static
std::unique_ptr<CXFA_XMLLocale> CXFA_XMLLocale::Create(
pdfium::span<uint8_t> data) {
- auto root = pdfium::MakeUnique<CFX_XMLElement>(L"root");
auto stream =
pdfium::MakeRetain<CFX_MemoryStream>(data.data(), data.size(), false);
- CFX_XMLParser parser(root.get(), stream);
- if (!parser.Parse())
+ CFX_XMLParser parser(stream);
+ auto doc = parser.Parse();
+ if (!doc)
return nullptr;
CFX_XMLElement* locale = nullptr;
- for (auto* child = root->GetFirstChild(); child;
+ for (auto* child = doc->GetRoot()->GetFirstChild(); child;
child = child->GetNextSibling()) {
if (child->GetType() != FX_XMLNODE_Element)
continue;
+
CFX_XMLElement* elem = static_cast<CFX_XMLElement*>(child);
if (elem->GetName() == L"locale") {
locale = elem;
@@ -50,14 +52,13 @@ std::unique_ptr<CXFA_XMLLocale> CXFA_XMLLocale::Create(
}
if (!locale)
return nullptr;
-
- return pdfium::MakeUnique<CXFA_XMLLocale>(std::move(root), locale);
+ return pdfium::MakeUnique<CXFA_XMLLocale>(std::move(doc), locale);
}
-CXFA_XMLLocale::CXFA_XMLLocale(std::unique_ptr<CFX_XMLElement> root,
+CXFA_XMLLocale::CXFA_XMLLocale(std::unique_ptr<CFX_XMLDocument> doc,
CFX_XMLElement* locale)
- : xml_root_(std::move(root)), locale_(locale) {
- ASSERT(xml_root_);
+ : xml_doc_(std::move(doc)), locale_(locale) {
+ ASSERT(xml_doc_);
ASSERT(locale_);
}