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

Side by Side Diff: core/fpdfapi/parser/cpdf_data_avail.cpp

Issue 2411703003: Get rid of CFX_ArrayTemplate<CPDF_Object*> (Closed)
Patch Set: nit Created 4 years, 2 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/fpdfapi/parser/cpdf_data_avail.h ('k') | core/fpdfapi/parser/cpdf_parser.h » ('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 2016 PDFium Authors. All rights reserved. 1 // Copyright 2016 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 "core/fpdfapi/parser/cpdf_data_avail.h" 7 #include "core/fpdfapi/parser/cpdf_data_avail.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 m_pAcroForm = nullptr; 73 m_pAcroForm = nullptr;
74 m_pPageDict = nullptr; 74 m_pPageDict = nullptr;
75 m_pPageResource = nullptr; 75 m_pPageResource = nullptr;
76 m_docStatus = PDF_DATAAVAIL_HEADER; 76 m_docStatus = PDF_DATAAVAIL_HEADER;
77 m_parser.m_bOwnFileRead = false; 77 m_parser.m_bOwnFileRead = false;
78 m_bTotalLoadPageTree = FALSE; 78 m_bTotalLoadPageTree = FALSE;
79 m_bCurPageDictLoadOK = FALSE; 79 m_bCurPageDictLoadOK = FALSE;
80 m_bLinearedDataOK = FALSE; 80 m_bLinearedDataOK = FALSE;
81 m_bSupportHintTable = bSupportHintTable; 81 m_bSupportHintTable = bSupportHintTable;
82 } 82 }
83
83 CPDF_DataAvail::~CPDF_DataAvail() { 84 CPDF_DataAvail::~CPDF_DataAvail() {
84 m_pHintTables.reset(); 85 m_pHintTables.reset();
85 if (m_pLinearized) 86 if (m_pLinearized)
86 m_pLinearized->Release(); 87 m_pLinearized->Release();
87 88
88 if (m_pRoot) 89 if (m_pRoot)
89 m_pRoot->Release(); 90 m_pRoot->Release();
90 91
91 if (m_pTrailer) 92 if (m_pTrailer)
92 m_pTrailer->Release(); 93 m_pTrailer->Release();
93 94
94 int iSize = m_arrayAcroforms.GetSize(); 95 for (CPDF_Object* pObject : m_arrayAcroforms)
95 for (int i = 0; i < iSize; ++i) 96 pObject->Release();
96 m_arrayAcroforms.GetAt(i)->Release();
97 } 97 }
98 98
99 void CPDF_DataAvail::SetDocument(CPDF_Document* pDoc) { 99 void CPDF_DataAvail::SetDocument(CPDF_Document* pDoc) {
100 m_pDocument = pDoc; 100 m_pDocument = pDoc;
101 } 101 }
102 102
103 uint32_t CPDF_DataAvail::GetObjectSize(uint32_t objnum, FX_FILESIZE& offset) { 103 uint32_t CPDF_DataAvail::GetObjectSize(uint32_t objnum, FX_FILESIZE& offset) {
104 CPDF_Parser* pParser = m_pDocument->GetParser(); 104 CPDF_Parser* pParser = m_pDocument->GetParser();
105 if (!pParser || !pParser->IsValidObjectNumber(objnum)) 105 if (!pParser || !pParser->IsValidObjectNumber(objnum))
106 return 0; 106 return 0;
(...skipping 11 matching lines...) Expand all
118 return 0; 118 return 0;
119 119
120 auto it = pParser->m_SortedOffset.find(offset); 120 auto it = pParser->m_SortedOffset.find(offset);
121 if (it == pParser->m_SortedOffset.end() || 121 if (it == pParser->m_SortedOffset.end() ||
122 ++it == pParser->m_SortedOffset.end()) { 122 ++it == pParser->m_SortedOffset.end()) {
123 return 0; 123 return 0;
124 } 124 }
125 return *it - offset; 125 return *it - offset;
126 } 126 }
127 127
128 FX_BOOL CPDF_DataAvail::IsObjectsAvail( 128 FX_BOOL CPDF_DataAvail::AreObjectsAvailable(
129 CFX_ArrayTemplate<CPDF_Object*>& obj_array, 129 std::vector<CPDF_Object*>& obj_array,
130 FX_BOOL bParsePage, 130 FX_BOOL bParsePage,
131 DownloadHints* pHints, 131 DownloadHints* pHints,
132 CFX_ArrayTemplate<CPDF_Object*>& ret_array) { 132 std::vector<CPDF_Object*>& ret_array) {
133 if (!obj_array.GetSize()) 133 if (obj_array.empty())
134 return TRUE; 134 return TRUE;
135 135
136 uint32_t count = 0; 136 uint32_t count = 0;
137 CFX_ArrayTemplate<CPDF_Object*> new_obj_array; 137 std::vector<CPDF_Object*> new_obj_array;
138 for (int i = 0; i < obj_array.GetSize(); i++) { 138 for (CPDF_Object* pObj : obj_array) {
139 CPDF_Object* pObj = obj_array[i];
140 if (!pObj) 139 if (!pObj)
141 continue; 140 continue;
142 141
143 int32_t type = pObj->GetType(); 142 int32_t type = pObj->GetType();
144 switch (type) { 143 switch (type) {
145 case CPDF_Object::ARRAY: { 144 case CPDF_Object::ARRAY: {
146 CPDF_Array* pArray = pObj->AsArray(); 145 CPDF_Array* pArray = pObj->AsArray();
147 for (size_t k = 0; k < pArray->GetCount(); ++k) 146 for (size_t k = 0; k < pArray->GetCount(); ++k)
148 new_obj_array.Add(pArray->GetObjectAt(k)); 147 new_obj_array.push_back(pArray->GetObjectAt(k));
149 } break; 148 } break;
150 case CPDF_Object::STREAM: 149 case CPDF_Object::STREAM:
151 pObj = pObj->GetDict(); 150 pObj = pObj->GetDict();
152 case CPDF_Object::DICTIONARY: { 151 case CPDF_Object::DICTIONARY: {
153 CPDF_Dictionary* pDict = pObj->GetDict(); 152 CPDF_Dictionary* pDict = pObj->GetDict();
154 if (pDict && pDict->GetStringFor("Type") == "Page" && !bParsePage) 153 if (pDict && pDict->GetStringFor("Type") == "Page" && !bParsePage)
155 continue; 154 continue;
156 155
157 for (const auto& it : *pDict) { 156 for (const auto& it : *pDict) {
158 const CFX_ByteString& key = it.first; 157 const CFX_ByteString& key = it.first;
159 CPDF_Object* value = it.second; 158 CPDF_Object* value = it.second;
160 if (key != "Parent") 159 if (key != "Parent")
161 new_obj_array.Add(value); 160 new_obj_array.push_back(value);
162 } 161 }
163 } break; 162 } break;
164 case CPDF_Object::REFERENCE: { 163 case CPDF_Object::REFERENCE: {
165 CPDF_Reference* pRef = pObj->AsReference(); 164 CPDF_Reference* pRef = pObj->AsReference();
166 uint32_t dwNum = pRef->GetRefObjNum(); 165 uint32_t dwNum = pRef->GetRefObjNum();
167 166
168 FX_FILESIZE offset; 167 FX_FILESIZE offset;
169 uint32_t size = GetObjectSize(dwNum, offset); 168 uint32_t size = GetObjectSize(dwNum, offset);
170 if (size == 0 || offset < 0 || offset >= m_dwFileLen) 169 if (size == 0 || offset < 0 || offset >= m_dwFileLen)
171 break; 170 break;
172 171
173 if (!IsDataAvail(offset, size, pHints)) { 172 if (!IsDataAvail(offset, size, pHints)) {
174 ret_array.Add(pObj); 173 ret_array.push_back(pObj);
175 count++; 174 count++;
176 } else if (!pdfium::ContainsKey(m_ObjectSet, dwNum)) { 175 } else if (!pdfium::ContainsKey(m_ObjectSet, dwNum)) {
177 m_ObjectSet.insert(dwNum); 176 m_ObjectSet.insert(dwNum);
178 CPDF_Object* pReferred = 177 CPDF_Object* pReferred =
179 m_pDocument->GetOrParseIndirectObject(pRef->GetRefObjNum()); 178 m_pDocument->GetOrParseIndirectObject(pRef->GetRefObjNum());
180 if (pReferred) 179 if (pReferred)
181 new_obj_array.Add(pReferred); 180 new_obj_array.push_back(pReferred);
182 } 181 }
183 } break; 182 } break;
184 } 183 }
185 } 184 }
186 185
187 if (count > 0) { 186 if (count > 0) {
188 for (int i = 0; i < new_obj_array.GetSize(); ++i) { 187 for (CPDF_Object* pObj : new_obj_array) {
189 CPDF_Object* pObj = new_obj_array[i]; 188 CPDF_Reference* pRef = pObj->AsReference();
190 if (CPDF_Reference* pRef = pObj->AsReference()) { 189 if (pRef && pdfium::ContainsKey(m_ObjectSet, pRef->GetRefObjNum()))
191 uint32_t dwNum = pRef->GetRefObjNum(); 190 continue;
192 if (!pdfium::ContainsKey(m_ObjectSet, dwNum)) 191 ret_array.push_back(pObj);
193 ret_array.Add(pObj);
194 } else {
195 ret_array.Add(pObj);
196 }
197 } 192 }
198 return FALSE; 193 return FALSE;
199 } 194 }
200 195
201 obj_array.RemoveAll(); 196 obj_array = new_obj_array;
202 obj_array.Append(new_obj_array); 197 return AreObjectsAvailable(obj_array, FALSE, pHints, ret_array);
203 return IsObjectsAvail(obj_array, FALSE, pHints, ret_array);
204 } 198 }
205 199
206 CPDF_DataAvail::DocAvailStatus CPDF_DataAvail::IsDocAvail( 200 CPDF_DataAvail::DocAvailStatus CPDF_DataAvail::IsDocAvail(
207 DownloadHints* pHints) { 201 DownloadHints* pHints) {
208 if (!m_dwFileLen && m_pFileRead) { 202 if (!m_dwFileLen && m_pFileRead) {
209 m_dwFileLen = (uint32_t)m_pFileRead->GetSize(); 203 m_dwFileLen = (uint32_t)m_pFileRead->GetSize();
210 if (!m_dwFileLen) 204 if (!m_dwFileLen)
211 return DataError; 205 return DataError;
212 } 206 }
213 207
214 while (!m_bDocAvail) { 208 while (!m_bDocAvail) {
215 if (!CheckDocStatus(pHints)) 209 if (!CheckDocStatus(pHints))
216 return DataNotAvailable; 210 return DataNotAvailable;
217 } 211 }
218 212
219 return DataAvailable; 213 return DataAvailable;
220 } 214 }
221 215
222 FX_BOOL CPDF_DataAvail::CheckAcroFormSubObject(DownloadHints* pHints) { 216 FX_BOOL CPDF_DataAvail::CheckAcroFormSubObject(DownloadHints* pHints) {
223 if (!m_objs_array.GetSize()) { 217 if (m_objs_array.empty()) {
224 m_objs_array.RemoveAll();
225 m_ObjectSet.clear(); 218 m_ObjectSet.clear();
226 CFX_ArrayTemplate<CPDF_Object*> obj_array; 219 std::vector<CPDF_Object*> obj_array = m_arrayAcroforms;
227 obj_array.Append(m_arrayAcroforms); 220 if (!AreObjectsAvailable(obj_array, FALSE, pHints, m_objs_array))
228 FX_BOOL bRet = IsObjectsAvail(obj_array, FALSE, pHints, m_objs_array); 221 return FALSE;
229 if (bRet) 222
230 m_objs_array.RemoveAll(); 223 m_objs_array.clear();
231 return bRet; 224 return TRUE;
232 } 225 }
233 226
234 CFX_ArrayTemplate<CPDF_Object*> new_objs_array; 227 std::vector<CPDF_Object*> new_objs_array;
235 FX_BOOL bRet = IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array); 228 if (!AreObjectsAvailable(m_objs_array, FALSE, pHints, new_objs_array)) {
236 if (bRet) { 229 m_objs_array = new_objs_array;
237 int32_t iSize = m_arrayAcroforms.GetSize(); 230 return FALSE;
238 for (int32_t i = 0; i < iSize; ++i) {
239 m_arrayAcroforms.GetAt(i)->Release();
240 }
241 m_arrayAcroforms.RemoveAll();
242 } else {
243 m_objs_array.RemoveAll();
244 m_objs_array.Append(new_objs_array);
245 } 231 }
246 return bRet; 232
233 for (CPDF_Object* pObject : m_arrayAcroforms)
234 pObject->Release();
235
236 m_arrayAcroforms.clear();
237 return TRUE;
247 } 238 }
248 239
249 FX_BOOL CPDF_DataAvail::CheckAcroForm(DownloadHints* pHints) { 240 FX_BOOL CPDF_DataAvail::CheckAcroForm(DownloadHints* pHints) {
250 FX_BOOL bExist = FALSE; 241 FX_BOOL bExist = FALSE;
251 m_pAcroForm = GetObject(m_dwAcroFormObjNum, pHints, &bExist); 242 m_pAcroForm = GetObject(m_dwAcroFormObjNum, pHints, &bExist);
252 if (!bExist) { 243 if (!bExist) {
253 m_docStatus = PDF_DATAAVAIL_PAGETREE; 244 m_docStatus = PDF_DATAAVAIL_PAGETREE;
254 return TRUE; 245 return TRUE;
255 } 246 }
256 247
257 if (!m_pAcroForm) { 248 if (!m_pAcroForm) {
258 if (m_docStatus == PDF_DATAAVAIL_ERROR) { 249 if (m_docStatus == PDF_DATAAVAIL_ERROR) {
259 m_docStatus = PDF_DATAAVAIL_LOADALLFILE; 250 m_docStatus = PDF_DATAAVAIL_LOADALLFILE;
260 return TRUE; 251 return TRUE;
261 } 252 }
262 return FALSE; 253 return FALSE;
263 } 254 }
264 255
265 m_arrayAcroforms.Add(m_pAcroForm); 256 m_arrayAcroforms.push_back(m_pAcroForm);
266 m_docStatus = PDF_DATAAVAIL_PAGETREE; 257 m_docStatus = PDF_DATAAVAIL_PAGETREE;
267 return TRUE; 258 return TRUE;
268 } 259 }
269 260
270 FX_BOOL CPDF_DataAvail::CheckDocStatus(DownloadHints* pHints) { 261 FX_BOOL CPDF_DataAvail::CheckDocStatus(DownloadHints* pHints) {
271 switch (m_docStatus) { 262 switch (m_docStatus) {
272 case PDF_DATAAVAIL_HEADER: 263 case PDF_DATAAVAIL_HEADER:
273 return CheckHeader(pHints); 264 return CheckHeader(pHints);
274 case PDF_DATAAVAIL_FIRSTPAGE: 265 case PDF_DATAAVAIL_FIRSTPAGE:
275 case PDF_DATAAVAIL_FIRSTPAGE_PREPARE: 266 case PDF_DATAAVAIL_FIRSTPAGE_PREPARE:
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
508 } 499 }
509 } 500 }
510 501
511 if (!pObj->IsDictionary()) { 502 if (!pObj->IsDictionary()) {
512 pObj->Release(); 503 pObj->Release();
513 continue; 504 continue;
514 } 505 }
515 506
516 CFX_ByteString type = pObj->GetDict()->GetStringFor("Type"); 507 CFX_ByteString type = pObj->GetDict()->GetStringFor("Type");
517 if (type == "Pages") { 508 if (type == "Pages") {
518 m_PagesArray.Add(pObj); 509 m_PagesArray.push_back(pObj);
519 continue; 510 continue;
520 } 511 }
521 pObj->Release(); 512 pObj->Release();
522 } 513 }
523 514
524 m_PageObjList.RemoveAll(); 515 m_PageObjList.RemoveAll();
525 if (UnavailObjList.GetSize()) { 516 if (UnavailObjList.GetSize()) {
526 m_PageObjList.Append(UnavailObjList); 517 m_PageObjList.Append(UnavailObjList);
527 return FALSE; 518 return FALSE;
528 } 519 }
529 520
530 uint32_t iPages = m_PagesArray.GetSize(); 521 uint32_t iPages = m_PagesArray.size();
531 for (uint32_t i = 0; i < iPages; i++) { 522 for (uint32_t i = 0; i < iPages; i++) {
532 CPDF_Object* pPages = m_PagesArray.GetAt(i); 523 CPDF_Object* pPages = m_PagesArray[i];
533 if (!pPages) 524 if (!pPages)
534 continue; 525 continue;
535 526
536 if (!GetPageKids(m_pCurrentParser, pPages)) { 527 if (!GetPageKids(m_pCurrentParser, pPages)) {
537 pPages->Release(); 528 pPages->Release();
538 while (++i < iPages) { 529 while (++i < iPages)
539 pPages = m_PagesArray.GetAt(i); 530 m_PagesArray[i]->Release();
540 pPages->Release();
541 }
542 m_PagesArray.RemoveAll();
543 531
532 m_PagesArray.clear();
544 m_docStatus = PDF_DATAAVAIL_ERROR; 533 m_docStatus = PDF_DATAAVAIL_ERROR;
545 return FALSE; 534 return FALSE;
546 } 535 }
547 pPages->Release(); 536 pPages->Release();
548 } 537 }
549 538
550 m_PagesArray.RemoveAll(); 539 m_PagesArray.clear();
551 if (!m_PageObjList.GetSize()) 540 if (!m_PageObjList.GetSize())
552 m_docStatus = PDF_DATAAVAIL_DONE; 541 m_docStatus = PDF_DATAAVAIL_DONE;
553 return TRUE; 542 return TRUE;
554 } 543 }
555 544
556 FX_BOOL CPDF_DataAvail::GetPageKids(CPDF_Parser* pParser, CPDF_Object* pPages) { 545 FX_BOOL CPDF_DataAvail::GetPageKids(CPDF_Parser* pParser, CPDF_Object* pPages) {
557 if (!pParser) { 546 if (!pParser) {
558 m_docStatus = PDF_DATAAVAIL_ERROR; 547 m_docStatus = PDF_DATAAVAIL_ERROR;
559 return FALSE; 548 return FALSE;
560 } 549 }
(...skipping 967 matching lines...) Expand 10 before | Expand all | Expand 10 after
1528 1517
1529 m_bMainXRefLoadedOK = TRUE; 1518 m_bMainXRefLoadedOK = TRUE;
1530 m_bLinearedDataOK = TRUE; 1519 m_bLinearedDataOK = TRUE;
1531 } 1520 }
1532 1521
1533 return m_bLinearedDataOK ? DataAvailable : DataNotAvailable; 1522 return m_bLinearedDataOK ? DataAvailable : DataNotAvailable;
1534 } 1523 }
1535 1524
1536 FX_BOOL CPDF_DataAvail::CheckPageAnnots(uint32_t dwPage, 1525 FX_BOOL CPDF_DataAvail::CheckPageAnnots(uint32_t dwPage,
1537 DownloadHints* pHints) { 1526 DownloadHints* pHints) {
1538 if (!m_objs_array.GetSize()) { 1527 if (m_objs_array.empty()) {
1539 m_objs_array.RemoveAll();
1540 m_ObjectSet.clear(); 1528 m_ObjectSet.clear();
1541 1529
1542 FX_SAFE_INT32 safePage = pdfium::base::checked_cast<int32_t>(dwPage); 1530 FX_SAFE_INT32 safePage = pdfium::base::checked_cast<int32_t>(dwPage);
1543 CPDF_Dictionary* pPageDict = m_pDocument->GetPage(safePage.ValueOrDie()); 1531 CPDF_Dictionary* pPageDict = m_pDocument->GetPage(safePage.ValueOrDie());
1544 if (!pPageDict) 1532 if (!pPageDict)
1545 return TRUE; 1533 return TRUE;
1546 1534
1547 CPDF_Object* pAnnots = pPageDict->GetObjectFor("Annots"); 1535 CPDF_Object* pAnnots = pPageDict->GetObjectFor("Annots");
1548 if (!pAnnots) 1536 if (!pAnnots)
1549 return TRUE; 1537 return TRUE;
1550 1538
1551 CFX_ArrayTemplate<CPDF_Object*> obj_array; 1539 std::vector<CPDF_Object*> obj_array;
1552 obj_array.Add(pAnnots); 1540 obj_array.push_back(pAnnots);
1541 if (!AreObjectsAvailable(obj_array, FALSE, pHints, m_objs_array))
1542 return FALSE;
1553 1543
1554 FX_BOOL bRet = IsObjectsAvail(obj_array, FALSE, pHints, m_objs_array); 1544 m_objs_array.clear();
1555 if (bRet) 1545 return TRUE;
1556 m_objs_array.RemoveAll();
1557
1558 return bRet;
1559 } 1546 }
1560 1547
1561 CFX_ArrayTemplate<CPDF_Object*> new_objs_array; 1548 std::vector<CPDF_Object*> new_objs_array;
1562 FX_BOOL bRet = IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array); 1549 if (!AreObjectsAvailable(m_objs_array, FALSE, pHints, new_objs_array)) {
1563 m_objs_array.RemoveAll(); 1550 m_objs_array = new_objs_array;
1564 if (!bRet) 1551 return FALSE;
1565 m_objs_array.Append(new_objs_array); 1552 }
1566 1553 m_objs_array.clear();
1567 return bRet; 1554 return TRUE;
1568 } 1555 }
1569 1556
1570 CPDF_DataAvail::DocAvailStatus CPDF_DataAvail::CheckLinearizedFirstPage( 1557 CPDF_DataAvail::DocAvailStatus CPDF_DataAvail::CheckLinearizedFirstPage(
1571 uint32_t dwPage, 1558 uint32_t dwPage,
1572 DownloadHints* pHints) { 1559 DownloadHints* pHints) {
1573 if (!m_bAnnotsLoad) { 1560 if (!m_bAnnotsLoad) {
1574 if (!CheckPageAnnots(dwPage, pHints)) 1561 if (!CheckPageAnnots(dwPage, pHints))
1575 return DataNotAvailable; 1562 return DataNotAvailable;
1576 m_bAnnotsLoad = TRUE; 1563 m_bAnnotsLoad = TRUE;
1577 } 1564 }
(...skipping 30 matching lines...) Expand all
1608 uint32_t dwPage, 1595 uint32_t dwPage,
1609 DownloadHints* pHints) { 1596 DownloadHints* pHints) {
1610 if (!m_pDocument) 1597 if (!m_pDocument)
1611 return DataError; 1598 return DataError;
1612 1599
1613 if (IsFirstCheck(dwPage)) { 1600 if (IsFirstCheck(dwPage)) {
1614 m_bCurPageDictLoadOK = FALSE; 1601 m_bCurPageDictLoadOK = FALSE;
1615 m_bPageLoadedOK = FALSE; 1602 m_bPageLoadedOK = FALSE;
1616 m_bAnnotsLoad = FALSE; 1603 m_bAnnotsLoad = FALSE;
1617 m_bNeedDownLoadResource = FALSE; 1604 m_bNeedDownLoadResource = FALSE;
1618 m_objs_array.RemoveAll(); 1605 m_objs_array.clear();
1619 m_ObjectSet.clear(); 1606 m_ObjectSet.clear();
1620 } 1607 }
1621 1608
1622 if (pdfium::ContainsKey(m_pagesLoadState, dwPage)) 1609 if (pdfium::ContainsKey(m_pagesLoadState, dwPage))
1623 return DataAvailable; 1610 return DataAvailable;
1624 1611
1625 if (m_bLinearized) { 1612 if (m_bLinearized) {
1626 if (dwPage == m_dwFirstPageNo) { 1613 if (dwPage == m_dwFirstPageNo) {
1627 DocAvailStatus nRet = CheckLinearizedFirstPage(dwPage, pHints); 1614 DocAvailStatus nRet = CheckLinearizedFirstPage(dwPage, pHints);
1628 if (nRet == DataAvailable) 1615 if (nRet == DataAvailable)
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1664 } 1651 }
1665 } 1652 }
1666 1653
1667 if (m_bHaveAcroForm && !m_bAcroFormLoad) { 1654 if (m_bHaveAcroForm && !m_bAcroFormLoad) {
1668 if (!CheckAcroFormSubObject(pHints)) 1655 if (!CheckAcroFormSubObject(pHints))
1669 return DataNotAvailable; 1656 return DataNotAvailable;
1670 m_bAcroFormLoad = TRUE; 1657 m_bAcroFormLoad = TRUE;
1671 } 1658 }
1672 1659
1673 if (!m_bPageLoadedOK) { 1660 if (!m_bPageLoadedOK) {
1674 if (!m_objs_array.GetSize()) { 1661 if (m_objs_array.empty()) {
1675 m_objs_array.RemoveAll();
1676 m_ObjectSet.clear(); 1662 m_ObjectSet.clear();
1677 1663
1678 FX_SAFE_INT32 safePage = pdfium::base::checked_cast<int32_t>(dwPage); 1664 FX_SAFE_INT32 safePage = pdfium::base::checked_cast<int32_t>(dwPage);
1679 m_pPageDict = m_pDocument->GetPage(safePage.ValueOrDie()); 1665 m_pPageDict = m_pDocument->GetPage(safePage.ValueOrDie());
1680 if (!m_pPageDict) { 1666 if (!m_pPageDict) {
1681 ResetFirstCheck(dwPage); 1667 ResetFirstCheck(dwPage);
1682 return DataAvailable; 1668 return DataAvailable;
1683 } 1669 }
1684 1670
1685 CFX_ArrayTemplate<CPDF_Object*> obj_array; 1671 std::vector<CPDF_Object*> obj_array;
1686 obj_array.Add(m_pPageDict); 1672 obj_array.push_back(m_pPageDict);
1687 FX_BOOL bRet = IsObjectsAvail(obj_array, TRUE, pHints, m_objs_array); 1673 if (!AreObjectsAvailable(obj_array, TRUE, pHints, m_objs_array))
1688 if (!bRet)
1689 return DataNotAvailable; 1674 return DataNotAvailable;
1690 1675
1691 m_objs_array.RemoveAll(); 1676 m_objs_array.clear();
1692 } else { 1677 } else {
1693 CFX_ArrayTemplate<CPDF_Object*> new_objs_array; 1678 std::vector<CPDF_Object*> new_objs_array;
1694 FX_BOOL bRet = 1679 if (!AreObjectsAvailable(m_objs_array, FALSE, pHints, new_objs_array)) {
1695 IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array); 1680 m_objs_array = new_objs_array;
1696
1697 m_objs_array.RemoveAll();
1698 if (!bRet) {
1699 m_objs_array.Append(new_objs_array);
1700 return DataNotAvailable; 1681 return DataNotAvailable;
1701 } 1682 }
1702 } 1683 }
1684 m_objs_array.clear();
1703 m_bPageLoadedOK = TRUE; 1685 m_bPageLoadedOK = TRUE;
1704 } 1686 }
1705 1687
1706 if (!m_bAnnotsLoad) { 1688 if (!m_bAnnotsLoad) {
1707 if (!CheckPageAnnots(dwPage, pHints)) 1689 if (!CheckPageAnnots(dwPage, pHints))
1708 return DataNotAvailable; 1690 return DataNotAvailable;
1709 m_bAnnotsLoad = TRUE; 1691 m_bAnnotsLoad = TRUE;
1710 } 1692 }
1711 1693
1712 if (m_pPageDict && !m_bNeedDownLoadResource) { 1694 if (m_pPageDict && !m_bNeedDownLoadResource) {
(...skipping 11 matching lines...) Expand all
1724 m_bPageLoadedOK = FALSE; 1706 m_bPageLoadedOK = FALSE;
1725 m_bAnnotsLoad = FALSE; 1707 m_bAnnotsLoad = FALSE;
1726 m_bCurPageDictLoadOK = FALSE; 1708 m_bCurPageDictLoadOK = FALSE;
1727 1709
1728 ResetFirstCheck(dwPage); 1710 ResetFirstCheck(dwPage);
1729 m_pagesLoadState.insert(dwPage); 1711 m_pagesLoadState.insert(dwPage);
1730 return DataAvailable; 1712 return DataAvailable;
1731 } 1713 }
1732 1714
1733 FX_BOOL CPDF_DataAvail::CheckResources(DownloadHints* pHints) { 1715 FX_BOOL CPDF_DataAvail::CheckResources(DownloadHints* pHints) {
1734 if (!m_objs_array.GetSize()) { 1716 if (m_objs_array.empty()) {
1735 m_objs_array.RemoveAll(); 1717 std::vector<CPDF_Object*> obj_array;
1736 CFX_ArrayTemplate<CPDF_Object*> obj_array; 1718 obj_array.push_back(m_pPageResource);
1737 obj_array.Add(m_pPageResource); 1719 if (!AreObjectsAvailable(obj_array, TRUE, pHints, m_objs_array))
1720 return FALSE;
1738 1721
1739 FX_BOOL bRet = IsObjectsAvail(obj_array, TRUE, pHints, m_objs_array); 1722 m_objs_array.clear();
1740 if (bRet) 1723 return TRUE;
1741 m_objs_array.RemoveAll();
1742 return bRet;
1743 } 1724 }
1744 1725 std::vector<CPDF_Object*> new_objs_array;
1745 CFX_ArrayTemplate<CPDF_Object*> new_objs_array; 1726 if (!AreObjectsAvailable(m_objs_array, FALSE, pHints, new_objs_array)) {
1746 FX_BOOL bRet = IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array); 1727 m_objs_array = new_objs_array;
1747 m_objs_array.RemoveAll(); 1728 return FALSE;
1748 if (!bRet) 1729 }
1749 m_objs_array.Append(new_objs_array); 1730 m_objs_array.clear();
1750 return bRet; 1731 return TRUE;
1751 } 1732 }
1752 1733
1753 void CPDF_DataAvail::GetLinearizedMainXRefInfo(FX_FILESIZE* pPos, 1734 void CPDF_DataAvail::GetLinearizedMainXRefInfo(FX_FILESIZE* pPos,
1754 uint32_t* pSize) { 1735 uint32_t* pSize) {
1755 if (pPos) 1736 if (pPos)
1756 *pPos = m_dwLastXRefOffset; 1737 *pPos = m_dwLastXRefOffset;
1757 if (pSize) 1738 if (pSize)
1758 *pSize = (uint32_t)(m_dwFileLen - m_dwLastXRefOffset); 1739 *pSize = (uint32_t)(m_dwFileLen - m_dwLastXRefOffset);
1759 } 1740 }
1760 1741
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
1813 CPDF_Object* pAcroForm = pRoot->GetObjectFor("AcroForm"); 1794 CPDF_Object* pAcroForm = pRoot->GetObjectFor("AcroForm");
1814 if (!pAcroForm) 1795 if (!pAcroForm)
1815 return FormNotExist; 1796 return FormNotExist;
1816 1797
1817 DocAvailStatus nDocStatus = CheckLinearizedData(pHints); 1798 DocAvailStatus nDocStatus = CheckLinearizedData(pHints);
1818 if (nDocStatus == DataError) 1799 if (nDocStatus == DataError)
1819 return FormError; 1800 return FormError;
1820 if (nDocStatus == DataNotAvailable) 1801 if (nDocStatus == DataNotAvailable)
1821 return FormNotAvailable; 1802 return FormNotAvailable;
1822 1803
1823 if (!m_objs_array.GetSize()) 1804 if (m_objs_array.empty())
1824 m_objs_array.Add(pAcroForm->GetDict()); 1805 m_objs_array.push_back(pAcroForm->GetDict());
1825 m_bLinearizedFormParamLoad = TRUE; 1806 m_bLinearizedFormParamLoad = TRUE;
1826 } 1807 }
1827 1808
1828 CFX_ArrayTemplate<CPDF_Object*> new_objs_array; 1809 std::vector<CPDF_Object*> new_objs_array;
1829 FX_BOOL bRet = IsObjectsAvail(m_objs_array, FALSE, pHints, new_objs_array); 1810 if (!AreObjectsAvailable(m_objs_array, FALSE, pHints, new_objs_array)) {
1830 m_objs_array.RemoveAll(); 1811 m_objs_array = new_objs_array;
1831 if (!bRet) {
1832 m_objs_array.Append(new_objs_array);
1833 return FormNotAvailable; 1812 return FormNotAvailable;
1834 } 1813 }
1814
1815 m_objs_array.clear();
1835 return FormAvailable; 1816 return FormAvailable;
1836 } 1817 }
1837 1818
1838 CPDF_DataAvail::PageNode::PageNode() : m_type(PDF_PAGENODE_UNKNOWN) {} 1819 CPDF_DataAvail::PageNode::PageNode() : m_type(PDF_PAGENODE_UNKNOWN) {}
1839 1820
1840 CPDF_DataAvail::PageNode::~PageNode() { 1821 CPDF_DataAvail::PageNode::~PageNode() {
1841 for (int32_t i = 0; i < m_childNode.GetSize(); ++i) 1822 for (int32_t i = 0; i < m_childNode.GetSize(); ++i)
1842 delete m_childNode[i]; 1823 delete m_childNode[i];
1843 m_childNode.RemoveAll(); 1824 m_childNode.RemoveAll();
1844 } 1825 }
OLDNEW
« no previous file with comments | « core/fpdfapi/parser/cpdf_data_avail.h ('k') | core/fpdfapi/parser/cpdf_parser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698