Index: xfa/fxfa/app/xfa_ffdoc.cpp |
diff --git a/xfa/fxfa/app/xfa_ffdoc.cpp b/xfa/fxfa/app/xfa_ffdoc.cpp |
index e719a41c63c6853243b22dffd7ad1d2e8cfccf03..917c8539911b36d2355cf21b24ede983ad32dca4 100644 |
--- a/xfa/fxfa/app/xfa_ffdoc.cpp |
+++ b/xfa/fxfa/app/xfa_ffdoc.cpp |
@@ -152,12 +152,10 @@ int32_t Base64DecodeW(const FX_WCHAR* pSrc, int32_t iSrcLen, uint8_t* pDst) { |
CXFA_FFDoc::CXFA_FFDoc(CXFA_FFApp* pApp, IXFA_DocEnvironment* pDocEnvironment) |
: m_pDocEnvironment(pDocEnvironment), |
m_pDocumentParser(nullptr), |
- m_pStream(nullptr), |
m_pApp(pApp), |
m_pNotify(nullptr), |
m_pPDFDoc(nullptr), |
- m_dwDocType(XFA_DOCTYPE_Static), |
- m_bOwnStream(true) {} |
+ m_dwDocType(XFA_DOCTYPE_Static) {} |
CXFA_FFDoc::~CXFA_FFDoc() { |
CloseDoc(); |
@@ -292,8 +290,7 @@ CXFA_FFDocView* CXFA_FFDoc::GetDocView() { |
return it != m_TypeToDocViewMap.end() ? it->second.get() : nullptr; |
} |
-bool CXFA_FFDoc::OpenDoc(IFX_SeekableReadStream* pStream, bool bTakeOverFile) { |
- m_bOwnStream = bTakeOverFile; |
+bool CXFA_FFDoc::OpenDoc(const CFX_RetainPtr<IFX_SeekableReadStream>& pStream) { |
m_pStream = pStream; |
return true; |
} |
@@ -326,14 +323,8 @@ bool CXFA_FFDoc::OpenDoc(CPDF_Document* pPDFDoc) { |
if (xfaStreams.empty()) |
return false; |
- IFX_SeekableReadStream* pFileRead = MakeSeekableReadStream(xfaStreams); |
m_pPDFDoc = pPDFDoc; |
- if (m_pStream) { |
- m_pStream->Release(); |
- m_pStream = nullptr; |
- } |
- m_pStream = pFileRead; |
- m_bOwnStream = true; |
+ m_pStream = MakeSeekableReadStream(xfaStreams); |
return true; |
} |
@@ -351,11 +342,6 @@ bool CXFA_FFDoc::CloseDoc() { |
m_pNotify.reset(nullptr); |
m_pApp->GetXFAFontMgr()->ReleaseDocFonts(this); |
- if (m_dwDocType != XFA_DOCTYPE_XDP && m_pStream && m_bOwnStream) { |
- m_pStream->Release(); |
- m_pStream = nullptr; |
- } |
- |
for (const auto& pair : m_HashToDibDpiMap) |
delete pair.second.pDibSource; |
@@ -417,21 +403,21 @@ CFX_DIBitmap* CXFA_FFDoc::GetPDFNamedImage(const CFX_WideStringC& wsName, |
CPDF_StreamAcc streamAcc; |
streamAcc.LoadAllData(pStream); |
- IFX_SeekableReadStream* pImageFileRead = IFX_MemoryStream::Create( |
- (uint8_t*)streamAcc.GetData(), streamAcc.GetSize()); |
+ CFX_RetainPtr<IFX_SeekableReadStream> pImageFileRead = |
+ IFX_MemoryStream::Create((uint8_t*)streamAcc.GetData(), |
+ streamAcc.GetSize()); |
CFX_DIBitmap* pDibSource = XFA_LoadImageFromBuffer( |
pImageFileRead, FXCODEC_IMAGE_UNKNOWN, iImageXDpi, iImageYDpi); |
m_HashToDibDpiMap[dwHash] = {pDibSource, iImageXDpi, iImageYDpi}; |
- pImageFileRead->Release(); |
return pDibSource; |
} |
-bool CXFA_FFDoc::SavePackage(XFA_HashCode code, |
- IFX_SeekableWriteStream* pFile, |
- CXFA_ChecksumContext* pCSContext) { |
+bool CXFA_FFDoc::SavePackage( |
+ XFA_HashCode code, |
+ const CFX_RetainPtr<IFX_SeekableWriteStream>& pFile, |
+ CXFA_ChecksumContext* pCSContext) { |
CXFA_Document* doc = m_pDocumentParser->GetDocument(); |
- |
std::unique_ptr<CXFA_DataExporter> pExport(new CXFA_DataExporter(doc)); |
CXFA_Node* pNode = code == XFA_HASHCODE_Xfa ? doc->GetRoot() |
: ToNode(doc->GetXFAObject(code)); |
@@ -446,8 +432,10 @@ bool CXFA_FFDoc::SavePackage(XFA_HashCode code, |
pFile, pNode, 0, bsChecksum.GetLength() ? bsChecksum.c_str() : nullptr); |
} |
-bool CXFA_FFDoc::ImportData(IFX_SeekableReadStream* pStream, bool bXDP) { |
- std::unique_ptr<CXFA_DataImporter> importer( |
- new CXFA_DataImporter(m_pDocumentParser->GetDocument())); |
+bool CXFA_FFDoc::ImportData( |
+ const CFX_RetainPtr<IFX_SeekableReadStream>& pStream, |
+ bool bXDP) { |
+ auto importer = |
+ pdfium::MakeUnique<CXFA_DataImporter>(m_pDocumentParser->GetDocument()); |
return importer->ImportData(pStream); |
} |