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

Side by Side Diff: core/src/fpdfdoc/doc_metadata.cpp

Issue 1274803004: Merge to XFA: Remove dead code from CPDF_Metadata. Add missing nullptr check. (Closed) Base URL: https://pdfium.googlesource.com/pdfium@xfa
Patch Set: Created 5 years, 4 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 unified diff | Download patch
« no previous file with comments | « core/include/fpdfdoc/fpdf_doc.h ('k') | fpdfsdk/src/fpdf_ext.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include "../../include/fpdfdoc/fpdf_doc.h" 7 #include "../../include/fpdfdoc/fpdf_doc.h"
8 #include "../../include/fxcrt/fx_xml.h" 8 #include "../../include/fxcrt/fx_xml.h"
9 typedef struct _PDFDOC_METADATA { 9
10 CPDF_Document* m_pDoc; 10 CPDF_Metadata::CPDF_Metadata(CPDF_Document* pDoc) : m_pDoc(pDoc) {
11 CXML_Element* m_pXmlElmnt;
12 CXML_Element* m_pElmntRdf;
13 CFX_CMapByteStringToPtr* m_pStringMap;
14 } PDFDOC_METADATA, *PDFDOC_LPMETADATA;
15 typedef PDFDOC_METADATA const* PDFDOC_LPCMETADATA;
16 const FX_CHAR* const gs_FPDFDOC_Metadata_Titles[] = {
17 "Title", "title", "Subject", "description", "Author",
18 "creator", "Keywords", "Keywords", "Producer", "Producer",
19 "Creator", "CreatorTool", "CreationDate", "CreateDate", "ModDate",
20 "ModifyDate", "MetadataDate", "MetadataDate"};
21 CPDF_Metadata::CPDF_Metadata() {
22 m_pData = FX_Alloc(PDFDOC_METADATA, 1);
23 CFX_CMapByteStringToPtr*& pStringMap =
24 ((PDFDOC_LPMETADATA)m_pData)->m_pStringMap;
25 pStringMap = new CFX_CMapByteStringToPtr;
26 if (pStringMap != NULL) {
27 CFX_ByteString bstr;
28 for (int i = 0; i < 18; i += 2) {
29 bstr = gs_FPDFDOC_Metadata_Titles[i];
30 pStringMap->AddValue(bstr, (void*)gs_FPDFDOC_Metadata_Titles[i + 1]);
31 }
32 }
33 }
34 CPDF_Metadata::~CPDF_Metadata() {
35 FXSYS_assert(m_pData != NULL);
36 CXML_Element*& p = ((PDFDOC_LPMETADATA)m_pData)->m_pXmlElmnt;
37 delete p;
38 CFX_CMapByteStringToPtr* pStringMap =
39 ((PDFDOC_LPMETADATA)m_pData)->m_pStringMap;
40 if (pStringMap) {
41 pStringMap->RemoveAll();
42 delete pStringMap;
43 }
44 FX_Free(m_pData);
45 }
46 void CPDF_Metadata::LoadDoc(CPDF_Document* pDoc) {
47 FXSYS_assert(pDoc != NULL);
48 ((PDFDOC_LPMETADATA)m_pData)->m_pDoc = pDoc;
49 CPDF_Dictionary* pRoot = pDoc->GetRoot(); 11 CPDF_Dictionary* pRoot = pDoc->GetRoot();
12 if (!pRoot)
13 return;
14
50 CPDF_Stream* pStream = pRoot->GetStream(FX_BSTRC("Metadata")); 15 CPDF_Stream* pStream = pRoot->GetStream(FX_BSTRC("Metadata"));
51 if (!pStream) { 16 if (!pStream)
52 return; 17 return;
53 } 18
54 CPDF_StreamAcc acc; 19 CPDF_StreamAcc acc;
55 acc.LoadAllData(pStream, FALSE); 20 acc.LoadAllData(pStream, FALSE);
56 int size = acc.GetSize(); 21 m_pXmlElement.reset(CXML_Element::Parse(acc.GetData(), acc.GetSize()));
57 const uint8_t* pBuf = acc.GetData();
58 CXML_Element*& pXmlElmnt = ((PDFDOC_LPMETADATA)m_pData)->m_pXmlElmnt;
59 pXmlElmnt = CXML_Element::Parse(pBuf, size);
60 if (!pXmlElmnt) {
61 return;
62 }
63 CXML_Element*& pElmntRdf = ((PDFDOC_LPMETADATA)m_pData)->m_pElmntRdf;
64 if (pXmlElmnt->GetTagName() == FX_BSTRC("RDF")) {
65 pElmntRdf = pXmlElmnt;
66 } else {
67 pElmntRdf = pXmlElmnt->GetElement(NULL, FX_BSTRC("RDF"));
68 }
69 } 22 }
70 int32_t CPDF_Metadata::GetString(const CFX_ByteStringC& bsItem, 23
71 CFX_WideString& wsStr) { 24 CPDF_Metadata::~CPDF_Metadata() {}
72 if (!((PDFDOC_LPMETADATA)m_pData)->m_pXmlElmnt) { 25
73 return -1; 26 const CXML_Element* CPDF_Metadata::GetRoot() const {
74 } 27 return m_pXmlElement.get();
75 if (!((PDFDOC_LPMETADATA)m_pData)->m_pStringMap) {
76 return -1;
77 }
78 void* szTag;
79 if (!((PDFDOC_LPMETADATA)m_pData)->m_pStringMap->Lookup(bsItem, szTag)) {
80 return -1;
81 }
82 CFX_ByteString bsTag = (const FX_CHAR*)szTag;
83 wsStr = L"";
84 CXML_Element* pElmntRdf = ((PDFDOC_LPMETADATA)m_pData)->m_pElmntRdf;
85 if (!pElmntRdf) {
86 return -1;
87 }
88 int nChild = pElmntRdf->CountChildren();
89 for (int i = 0; i < nChild; i++) {
90 CXML_Element* pTag =
91 pElmntRdf->GetElement(NULL, FX_BSTRC("Description"), i);
92 if (!pTag) {
93 continue;
94 }
95 if (bsItem == FX_BSTRC("Title") || bsItem == FX_BSTRC("Subject")) {
96 CXML_Element* pElmnt = pTag->GetElement(NULL, bsTag);
97 if (!pElmnt) {
98 continue;
99 }
100 pElmnt = pElmnt->GetElement(NULL, FX_BSTRC("Alt"));
101 if (!pElmnt) {
102 continue;
103 }
104 pElmnt = pElmnt->GetElement(NULL, FX_BSTRC("li"));
105 if (!pElmnt) {
106 continue;
107 }
108 wsStr = pElmnt->GetContent(0);
109 return wsStr.GetLength();
110 }
111 if (bsItem == FX_BSTRC("Author")) {
112 CXML_Element* pElmnt = pTag->GetElement(NULL, bsTag);
113 if (!pElmnt) {
114 continue;
115 }
116 pElmnt = pElmnt->GetElement(NULL, FX_BSTRC("Seq"));
117 if (!pElmnt) {
118 continue;
119 }
120 pElmnt = pElmnt->GetElement(NULL, FX_BSTRC("li"));
121 if (!pElmnt) {
122 continue;
123 }
124 wsStr = pElmnt->GetContent(0);
125 return wsStr.GetLength();
126 }
127 CXML_Element* pElmnt = pTag->GetElement(NULL, bsTag);
128 if (!pElmnt) {
129 continue;
130 }
131 wsStr = pElmnt->GetContent(0);
132 return wsStr.GetLength();
133 }
134 return -1;
135 } 28 }
136 CXML_Element* CPDF_Metadata::GetRoot() const {
137 return ((PDFDOC_LPMETADATA)m_pData)->m_pXmlElmnt;
138 }
139 CXML_Element* CPDF_Metadata::GetRDF() const {
140 return ((PDFDOC_LPMETADATA)m_pData)->m_pElmntRdf;
141 }
OLDNEW
« no previous file with comments | « core/include/fpdfdoc/fpdf_doc.h ('k') | fpdfsdk/src/fpdf_ext.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698