From a9d29df6a774737a661d0f37f6b8aa5cba179c06 Mon Sep 17 00:00:00 2001 From: tsepez Date: Wed, 7 Dec 2016 15:28:14 -0800 Subject: Properly ref count IFX_FileAccess. Review-Url: https://codereview.chromium.org/2562563002 --- core/fxcrt/fx_extension.cpp | 28 +++++++++------------------- core/fxcrt/fx_stream.h | 8 +++----- 2 files changed, 12 insertions(+), 24 deletions(-) (limited to 'core/fxcrt') diff --git a/core/fxcrt/fx_extension.cpp b/core/fxcrt/fx_extension.cpp index 630d4da2aa..ba82b9b7f0 100644 --- a/core/fxcrt/fx_extension.cpp +++ b/core/fxcrt/fx_extension.cpp @@ -25,36 +25,26 @@ namespace { class CFX_CRTFileAccess : public IFX_FileAccess { public: - CFX_CRTFileAccess(); - ~CFX_CRTFileAccess() override; + template + friend CFX_RetainPtr pdfium::MakeRetain(Args&&... args); // IFX_FileAccess - void Release() override; - IFX_FileAccess* Retain() override; void GetPath(CFX_WideString& wsPath) override; CFX_RetainPtr CreateFileStream(uint32_t dwModes) override; bool Init(const CFX_WideStringC& wsPath); private: + CFX_CRTFileAccess(); + ~CFX_CRTFileAccess() override; + CFX_WideString m_path; - uint32_t m_RefCount; }; -CFX_CRTFileAccess::CFX_CRTFileAccess() : m_RefCount(0) {} +CFX_CRTFileAccess::CFX_CRTFileAccess() {} CFX_CRTFileAccess::~CFX_CRTFileAccess() {} -void CFX_CRTFileAccess::Release() { - if (--m_RefCount == 0) - delete this; -} - -IFX_FileAccess* CFX_CRTFileAccess::Retain() { - m_RefCount++; - return (IFX_FileAccess*)this; -} - void CFX_CRTFileAccess::GetPath(CFX_WideString& wsPath) { wsPath = m_path; } @@ -66,7 +56,6 @@ CFX_RetainPtr CFX_CRTFileAccess::CreateFileStream( bool CFX_CRTFileAccess::Init(const CFX_WideStringC& wsPath) { m_path = wsPath; - m_RefCount = 1; return true; } @@ -385,11 +374,12 @@ bool CFX_MemoryStream::ExpandBlocks(size_t size) { } // namespace #ifdef PDF_ENABLE_XFA -IFX_FileAccess* IFX_FileAccess::CreateDefault(const CFX_WideStringC& wsPath) { +CFX_RetainPtr IFX_FileAccess::CreateDefault( + const CFX_WideStringC& wsPath) { if (wsPath.GetLength() == 0) return nullptr; - CFX_CRTFileAccess* pFA = new CFX_CRTFileAccess; + auto pFA = pdfium::MakeRetain(); pFA->Init(wsPath); return pFA; } diff --git a/core/fxcrt/fx_stream.h b/core/fxcrt/fx_stream.h index b998761742..2f4b5ad280 100644 --- a/core/fxcrt/fx_stream.h +++ b/core/fxcrt/fx_stream.h @@ -143,13 +143,11 @@ class IFX_BufferedReadStream : public IFX_ReadStream { }; #ifdef PDF_ENABLE_XFA -class IFX_FileAccess { +class IFX_FileAccess : public CFX_Retainable { public: - static IFX_FileAccess* CreateDefault(const CFX_WideStringC& wsPath); + static CFX_RetainPtr CreateDefault( + const CFX_WideStringC& wsPath); - virtual ~IFX_FileAccess() {} - virtual void Release() = 0; - virtual IFX_FileAccess* Retain() = 0; virtual void GetPath(CFX_WideString& wsPath) = 0; virtual CFX_RetainPtr CreateFileStream( uint32_t dwModes) = 0; -- cgit v1.2.3