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

Side by Side Diff: xfa/fxfa/app/xfa_ffdoc.cpp

Issue 2451493002: Refcount all the IFX_ stream classes all the time. (Closed)
Patch Set: Clean up cast expression Created 4 years 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 | « xfa/fxfa/app/xfa_ffapp_unittest.cpp ('k') | xfa/fxfa/app/xfa_ffwidget.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 "xfa/fxfa/xfa_ffdoc.h" 7 #include "xfa/fxfa/xfa_ffdoc.h"
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 } 145 }
146 } 146 }
147 return pDstEnd - pDst; 147 return pDstEnd - pDst;
148 } 148 }
149 149
150 } // namespace 150 } // namespace
151 151
152 CXFA_FFDoc::CXFA_FFDoc(CXFA_FFApp* pApp, IXFA_DocEnvironment* pDocEnvironment) 152 CXFA_FFDoc::CXFA_FFDoc(CXFA_FFApp* pApp, IXFA_DocEnvironment* pDocEnvironment)
153 : m_pDocEnvironment(pDocEnvironment), 153 : m_pDocEnvironment(pDocEnvironment),
154 m_pDocumentParser(nullptr), 154 m_pDocumentParser(nullptr),
155 m_pStream(nullptr),
156 m_pApp(pApp), 155 m_pApp(pApp),
157 m_pNotify(nullptr), 156 m_pNotify(nullptr),
158 m_pPDFDoc(nullptr), 157 m_pPDFDoc(nullptr),
159 m_dwDocType(XFA_DOCTYPE_Static), 158 m_dwDocType(XFA_DOCTYPE_Static) {}
160 m_bOwnStream(true) {}
161 159
162 CXFA_FFDoc::~CXFA_FFDoc() { 160 CXFA_FFDoc::~CXFA_FFDoc() {
163 CloseDoc(); 161 CloseDoc();
164 } 162 }
165 163
166 uint32_t CXFA_FFDoc::GetDocType() { 164 uint32_t CXFA_FFDoc::GetDocType() {
167 return m_dwDocType; 165 return m_dwDocType;
168 } 166 }
169 167
170 int32_t CXFA_FFDoc::StartLoad() { 168 int32_t CXFA_FFDoc::StartLoad() {
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 return pair.second.get(); 283 return pair.second.get();
286 } 284 }
287 return nullptr; 285 return nullptr;
288 } 286 }
289 287
290 CXFA_FFDocView* CXFA_FFDoc::GetDocView() { 288 CXFA_FFDocView* CXFA_FFDoc::GetDocView() {
291 auto it = m_TypeToDocViewMap.begin(); 289 auto it = m_TypeToDocViewMap.begin();
292 return it != m_TypeToDocViewMap.end() ? it->second.get() : nullptr; 290 return it != m_TypeToDocViewMap.end() ? it->second.get() : nullptr;
293 } 291 }
294 292
295 bool CXFA_FFDoc::OpenDoc(IFX_SeekableReadStream* pStream, bool bTakeOverFile) { 293 bool CXFA_FFDoc::OpenDoc(const CFX_RetainPtr<IFX_SeekableReadStream>& pStream) {
296 m_bOwnStream = bTakeOverFile;
297 m_pStream = pStream; 294 m_pStream = pStream;
298 return true; 295 return true;
299 } 296 }
300 bool CXFA_FFDoc::OpenDoc(CPDF_Document* pPDFDoc) { 297 bool CXFA_FFDoc::OpenDoc(CPDF_Document* pPDFDoc) {
301 if (!pPDFDoc) 298 if (!pPDFDoc)
302 return false; 299 return false;
303 300
304 CPDF_Dictionary* pRoot = pPDFDoc->GetRoot(); 301 CPDF_Dictionary* pRoot = pPDFDoc->GetRoot();
305 if (!pRoot) 302 if (!pRoot)
306 return false; 303 return false;
(...skipping 12 matching lines...) Expand all
319 for (size_t i = 0; i < pXFAArray->GetCount() / 2; i++) { 316 for (size_t i = 0; i < pXFAArray->GetCount() / 2; i++) {
320 if (CPDF_Stream* pStream = pXFAArray->GetStreamAt(i * 2 + 1)) 317 if (CPDF_Stream* pStream = pXFAArray->GetStreamAt(i * 2 + 1))
321 xfaStreams.push_back(pStream); 318 xfaStreams.push_back(pStream);
322 } 319 }
323 } else if (pElementXFA->IsStream()) { 320 } else if (pElementXFA->IsStream()) {
324 xfaStreams.push_back((CPDF_Stream*)pElementXFA); 321 xfaStreams.push_back((CPDF_Stream*)pElementXFA);
325 } 322 }
326 if (xfaStreams.empty()) 323 if (xfaStreams.empty())
327 return false; 324 return false;
328 325
329 IFX_SeekableReadStream* pFileRead = MakeSeekableReadStream(xfaStreams);
330 m_pPDFDoc = pPDFDoc; 326 m_pPDFDoc = pPDFDoc;
331 if (m_pStream) { 327 m_pStream = MakeSeekableReadStream(xfaStreams);
332 m_pStream->Release();
333 m_pStream = nullptr;
334 }
335 m_pStream = pFileRead;
336 m_bOwnStream = true;
337 return true; 328 return true;
338 } 329 }
339 330
340 bool CXFA_FFDoc::CloseDoc() { 331 bool CXFA_FFDoc::CloseDoc() {
341 for (const auto& pair : m_TypeToDocViewMap) 332 for (const auto& pair : m_TypeToDocViewMap)
342 pair.second->RunDocClose(); 333 pair.second->RunDocClose();
343 334
344 CXFA_Document* doc = 335 CXFA_Document* doc =
345 m_pDocumentParser ? m_pDocumentParser->GetDocument() : nullptr; 336 m_pDocumentParser ? m_pDocumentParser->GetDocument() : nullptr;
346 if (doc) 337 if (doc)
347 doc->ClearLayoutData(); 338 doc->ClearLayoutData();
348 339
349 m_TypeToDocViewMap.clear(); 340 m_TypeToDocViewMap.clear();
350 341
351 m_pNotify.reset(nullptr); 342 m_pNotify.reset(nullptr);
352 m_pApp->GetXFAFontMgr()->ReleaseDocFonts(this); 343 m_pApp->GetXFAFontMgr()->ReleaseDocFonts(this);
353 344
354 if (m_dwDocType != XFA_DOCTYPE_XDP && m_pStream && m_bOwnStream) {
355 m_pStream->Release();
356 m_pStream = nullptr;
357 }
358
359 for (const auto& pair : m_HashToDibDpiMap) 345 for (const auto& pair : m_HashToDibDpiMap)
360 delete pair.second.pDibSource; 346 delete pair.second.pDibSource;
361 347
362 m_HashToDibDpiMap.clear(); 348 m_HashToDibDpiMap.clear();
363 m_pApp->ClearEventTargets(); 349 m_pApp->ClearEventTargets();
364 return true; 350 return true;
365 } 351 }
366 void CXFA_FFDoc::SetDocType(uint32_t dwType) { 352 void CXFA_FFDoc::SetDocType(uint32_t dwType) {
367 m_dwDocType = dwType; 353 m_dwDocType = dwType;
368 } 354 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 } 396 }
411 } 397 }
412 398
413 CPDF_Stream* pStream = ToStream(pObject); 399 CPDF_Stream* pStream = ToStream(pObject);
414 if (!pStream) 400 if (!pStream)
415 return nullptr; 401 return nullptr;
416 402
417 CPDF_StreamAcc streamAcc; 403 CPDF_StreamAcc streamAcc;
418 streamAcc.LoadAllData(pStream); 404 streamAcc.LoadAllData(pStream);
419 405
420 IFX_SeekableReadStream* pImageFileRead = IFX_MemoryStream::Create( 406 CFX_RetainPtr<IFX_SeekableReadStream> pImageFileRead =
421 (uint8_t*)streamAcc.GetData(), streamAcc.GetSize()); 407 IFX_MemoryStream::Create((uint8_t*)streamAcc.GetData(),
408 streamAcc.GetSize());
422 409
423 CFX_DIBitmap* pDibSource = XFA_LoadImageFromBuffer( 410 CFX_DIBitmap* pDibSource = XFA_LoadImageFromBuffer(
424 pImageFileRead, FXCODEC_IMAGE_UNKNOWN, iImageXDpi, iImageYDpi); 411 pImageFileRead, FXCODEC_IMAGE_UNKNOWN, iImageXDpi, iImageYDpi);
425 m_HashToDibDpiMap[dwHash] = {pDibSource, iImageXDpi, iImageYDpi}; 412 m_HashToDibDpiMap[dwHash] = {pDibSource, iImageXDpi, iImageYDpi};
426 pImageFileRead->Release();
427 return pDibSource; 413 return pDibSource;
428 } 414 }
429 415
430 bool CXFA_FFDoc::SavePackage(XFA_HashCode code, 416 bool CXFA_FFDoc::SavePackage(
431 IFX_SeekableWriteStream* pFile, 417 XFA_HashCode code,
432 CXFA_ChecksumContext* pCSContext) { 418 const CFX_RetainPtr<IFX_SeekableWriteStream>& pFile,
419 CXFA_ChecksumContext* pCSContext) {
433 CXFA_Document* doc = m_pDocumentParser->GetDocument(); 420 CXFA_Document* doc = m_pDocumentParser->GetDocument();
434
435 std::unique_ptr<CXFA_DataExporter> pExport(new CXFA_DataExporter(doc)); 421 std::unique_ptr<CXFA_DataExporter> pExport(new CXFA_DataExporter(doc));
436 CXFA_Node* pNode = code == XFA_HASHCODE_Xfa ? doc->GetRoot() 422 CXFA_Node* pNode = code == XFA_HASHCODE_Xfa ? doc->GetRoot()
437 : ToNode(doc->GetXFAObject(code)); 423 : ToNode(doc->GetXFAObject(code));
438 if (!pNode) 424 if (!pNode)
439 return !!pExport->Export(pFile); 425 return !!pExport->Export(pFile);
440 426
441 CFX_ByteString bsChecksum; 427 CFX_ByteString bsChecksum;
442 if (pCSContext) 428 if (pCSContext)
443 bsChecksum = pCSContext->GetChecksum(); 429 bsChecksum = pCSContext->GetChecksum();
444 430
445 return !!pExport->Export( 431 return !!pExport->Export(
446 pFile, pNode, 0, bsChecksum.GetLength() ? bsChecksum.c_str() : nullptr); 432 pFile, pNode, 0, bsChecksum.GetLength() ? bsChecksum.c_str() : nullptr);
447 } 433 }
448 434
449 bool CXFA_FFDoc::ImportData(IFX_SeekableReadStream* pStream, bool bXDP) { 435 bool CXFA_FFDoc::ImportData(
450 std::unique_ptr<CXFA_DataImporter> importer( 436 const CFX_RetainPtr<IFX_SeekableReadStream>& pStream,
451 new CXFA_DataImporter(m_pDocumentParser->GetDocument())); 437 bool bXDP) {
438 auto importer =
439 pdfium::MakeUnique<CXFA_DataImporter>(m_pDocumentParser->GetDocument());
452 return importer->ImportData(pStream); 440 return importer->ImportData(pStream);
453 } 441 }
OLDNEW
« no previous file with comments | « xfa/fxfa/app/xfa_ffapp_unittest.cpp ('k') | xfa/fxfa/app/xfa_ffwidget.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698