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

Side by Side Diff: fpdfsdk/fpdfppo.cpp

Issue 2419173002: Update CPDF_IndirectObjectHolder APIs for unique objects (Closed)
Patch Set: Fix issues 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 | « fpdfsdk/fpdfdoc_unittest.cpp ('k') | fpdfsdk/fpdfsave.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 "public/fpdf_ppo.h" 7 #include "public/fpdf_ppo.h"
8 8
9 #include <map> 9 #include <map>
10 #include <memory> 10 #include <memory>
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 DInfoDict->SetFor("Producer", new CPDF_String(producerstr, FALSE)); 63 DInfoDict->SetFor("Producer", new CPDF_String(producerstr, FALSE));
64 64
65 CFX_ByteString cbRootType = pNewRoot->GetStringFor("Type", ""); 65 CFX_ByteString cbRootType = pNewRoot->GetStringFor("Type", "");
66 if (cbRootType.IsEmpty()) 66 if (cbRootType.IsEmpty())
67 pNewRoot->SetFor("Type", new CPDF_Name("Catalog")); 67 pNewRoot->SetFor("Type", new CPDF_Name("Catalog"));
68 68
69 CPDF_Object* pElement = pNewRoot->GetObjectFor("Pages"); 69 CPDF_Object* pElement = pNewRoot->GetObjectFor("Pages");
70 CPDF_Dictionary* pNewPages = 70 CPDF_Dictionary* pNewPages =
71 pElement ? ToDictionary(pElement->GetDirect()) : nullptr; 71 pElement ? ToDictionary(pElement->GetDirect()) : nullptr;
72 if (!pNewPages) { 72 if (!pNewPages) {
73 pNewPages = new CPDF_Dictionary(pDestPDFDoc->GetByteStringPool()); 73 pNewPages =
74 pNewRoot->SetReferenceFor("Pages", pDestPDFDoc, 74 pDestPDFDoc->AddIndirectDictionary(pDestPDFDoc->GetByteStringPool());
75 pDestPDFDoc->AddIndirectObject(pNewPages)); 75 pNewRoot->SetReferenceFor("Pages", pDestPDFDoc, pNewPages);
76 } 76 }
77 77
78 CFX_ByteString cbPageType = pNewPages->GetStringFor("Type", ""); 78 CFX_ByteString cbPageType = pNewPages->GetStringFor("Type", "");
79 if (cbPageType == "") { 79 if (cbPageType == "") {
80 pNewPages->SetFor("Type", new CPDF_Name("Pages")); 80 pNewPages->SetFor("Type", new CPDF_Name("Pages"));
81 } 81 }
82 82
83 if (!pNewPages->GetArrayFor("Kids")) { 83 if (!pNewPages->GetArrayFor("Kids")) {
84 pNewPages->SetIntegerFor("Count", 0); 84 pNewPages->SetIntegerFor("Count", 0);
85 pNewPages->SetReferenceFor("Kids", pDestPDFDoc, 85 pNewPages->SetReferenceFor("Kids", pDestPDFDoc,
86 pDestPDFDoc->AddIndirectObject(new CPDF_Array)); 86 pDestPDFDoc->AddIndirectArray());
87 } 87 }
88 88
89 return TRUE; 89 return TRUE;
90 } 90 }
91 91
92 FX_BOOL CPDF_PageOrganizer::ExportPage(CPDF_Document* pSrcPDFDoc, 92 FX_BOOL CPDF_PageOrganizer::ExportPage(CPDF_Document* pSrcPDFDoc,
93 std::vector<uint16_t>* pPageNums, 93 std::vector<uint16_t>* pPageNums,
94 CPDF_Document* pDestPDFDoc, 94 CPDF_Document* pDestPDFDoc,
95 int nIndex) { 95 int nIndex) {
96 int curpage = nIndex; 96 int curpage = nIndex;
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 const auto it = pObjNumberMap->find(dwObjnum); 270 const auto it = pObjNumberMap->find(dwObjnum);
271 if (it != pObjNumberMap->end()) 271 if (it != pObjNumberMap->end())
272 dwNewObjNum = it->second; 272 dwNewObjNum = it->second;
273 if (dwNewObjNum) 273 if (dwNewObjNum)
274 return dwNewObjNum; 274 return dwNewObjNum;
275 275
276 CPDF_Object* pDirect = pRef->GetDirect(); 276 CPDF_Object* pDirect = pRef->GetDirect();
277 if (!pDirect) 277 if (!pDirect)
278 return 0; 278 return 0;
279 279
280 CPDF_Object* pClone = pDirect->Clone(); 280 UniqueObject pClone(pDirect->Clone());
281 if (!pClone) 281 if (!pClone)
282 return 0; 282 return 0;
283 283
284 if (CPDF_Dictionary* pDictClone = pClone->AsDictionary()) { 284 if (CPDF_Dictionary* pDictClone = pClone->AsDictionary()) {
285 if (pDictClone->KeyExist("Type")) { 285 if (pDictClone->KeyExist("Type")) {
286 CFX_ByteString strType = pDictClone->GetStringFor("Type"); 286 CFX_ByteString strType = pDictClone->GetStringFor("Type");
287 if (!FXSYS_stricmp(strType.c_str(), "Pages")) { 287 if (!FXSYS_stricmp(strType.c_str(), "Pages")) {
288 pDictClone->Release(); 288 pDictClone->Release();
289 return 4; 289 return 4;
290 } 290 }
291 if (!FXSYS_stricmp(strType.c_str(), "Page")) { 291 if (!FXSYS_stricmp(strType.c_str(), "Page")) {
292 pDictClone->Release(); 292 pDictClone->Release();
293 return 0; 293 return 0;
294 } 294 }
295 } 295 }
296 } 296 }
297 dwNewObjNum = pDoc->AddIndirectObject(pClone); 297 CPDF_Object* pUnowned = pDoc->AddIndirectObject(std::move(pClone));
298 dwNewObjNum = pUnowned->GetObjNum();
298 (*pObjNumberMap)[dwObjnum] = dwNewObjNum; 299 (*pObjNumberMap)[dwObjnum] = dwNewObjNum;
299 if (!UpdateReference(pClone, pDoc, pObjNumberMap)) { 300 if (!UpdateReference(pUnowned, pDoc, pObjNumberMap)) {
300 pClone->Release(); 301 pDoc->DeleteIndirectObject(dwNewObjNum);
301 return 0; 302 return 0;
302 } 303 }
303 return dwNewObjNum; 304 return dwNewObjNum;
304 } 305 }
305 306
306 FPDF_BOOL ParserPageRangeString(CFX_ByteString rangstring, 307 FPDF_BOOL ParserPageRangeString(CFX_ByteString rangstring,
307 std::vector<uint16_t>* pageArray, 308 std::vector<uint16_t>* pageArray,
308 int nCount) { 309 int nCount) {
309 if (rangstring.GetLength() != 0) { 310 if (rangstring.GetLength() != 0) {
310 rangstring.Remove(' '); 311 rangstring.Remove(' ');
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 if (!pSrcDict) 397 if (!pSrcDict)
397 return FALSE; 398 return FALSE;
398 399
399 CPDF_Dictionary* pDstDict = pDstDoc->GetRoot(); 400 CPDF_Dictionary* pDstDict = pDstDoc->GetRoot();
400 if (!pDstDict) 401 if (!pDstDict)
401 return FALSE; 402 return FALSE;
402 403
403 pDstDict->SetFor("ViewerPreferences", pSrcDict->CloneDirectObject()); 404 pDstDict->SetFor("ViewerPreferences", pSrcDict->CloneDirectObject());
404 return TRUE; 405 return TRUE;
405 } 406 }
OLDNEW
« no previous file with comments | « fpdfsdk/fpdfdoc_unittest.cpp ('k') | fpdfsdk/fpdfsave.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698