diff options
author | tsepez <tsepez@chromium.org> | 2016-05-11 10:26:05 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-05-11 10:26:05 -0700 |
commit | f74ad998d2e8d2636fb25e94823946a3b151e34e (patch) | |
tree | 0b18e0a29fdc4bf1cce66ea437d8a4841b3daf4a /xfa/fde/css | |
parent | 2c3a16a7698ba15476173e849f82c97ea3da9939 (diff) | |
download | pdfium-f74ad998d2e8d2636fb25e94823946a3b151e34e.tar.xz |
Replace some calls to Release() with direct delete, part 1.
Searching for the anti-pattern:
void Release() { delete this; }
We must be explicit on the ownership model.
Add unique_ptrs as a result.
Review-Url: https://codereview.chromium.org/1960673003
Diffstat (limited to 'xfa/fde/css')
-rw-r--r-- | xfa/fde/css/fde_cssstyleselector.cpp | 63 | ||||
-rw-r--r-- | xfa/fde/css/fde_cssstyleselector.h | 4 | ||||
-rw-r--r-- | xfa/fde/css/fde_cssstylesheet.cpp | 21 | ||||
-rw-r--r-- | xfa/fde/css/fde_csssyntax.h | 3 |
4 files changed, 45 insertions, 46 deletions
diff --git a/xfa/fde/css/fde_cssstyleselector.cpp b/xfa/fde/css/fde_cssstyleselector.cpp index 27b251a783..05f036b1f3 100644 --- a/xfa/fde/css/fde_cssstyleselector.cpp +++ b/xfa/fde/css/fde_cssstyleselector.cpp @@ -7,6 +7,7 @@ #include "xfa/fde/css/fde_cssstyleselector.h" #include <algorithm> +#include <memory> #include "xfa/fde/css/fde_csscache.h" #include "xfa/fde/css/fde_cssdeclaration.h" @@ -538,44 +539,42 @@ void CFDE_CSSStyleSelector::AppendInlineStyle(CFDE_CSSDeclaration* pDecl, const FX_WCHAR* psz, int32_t iLen) { ASSERT(pDecl && psz && iLen > 0); + std::unique_ptr<CFDE_CSSSyntaxParser> pSyntax(new CFDE_CSSSyntaxParser); + if (!pSyntax->Init(psz, iLen, 32, TRUE)) + return; - CFDE_CSSSyntaxParser* pSyntax = new CFDE_CSSSyntaxParser; - if (pSyntax->Init(psz, iLen, 32, TRUE)) { - int32_t iLen; - const FX_WCHAR* psz; - FDE_CSSPROPERTYARGS args; - args.pStringCache = NULL; - args.pStaticStore = m_pInlineStyleStore; - args.pProperty = NULL; - CFX_WideString wsName; - for (;;) { - FDE_CSSSYNTAXSTATUS eStatus = pSyntax->DoSyntaxParse(); - if (eStatus == FDE_CSSSYNTAXSTATUS_PropertyName) { - psz = pSyntax->GetCurrentString(iLen); - args.pProperty = FDE_GetCSSPropertyByName(CFX_WideStringC(psz, iLen)); - if (args.pProperty == NULL) { - wsName = CFX_WideStringC(psz, iLen); - } - } else if (eStatus == FDE_CSSSYNTAXSTATUS_PropertyValue) { - if (args.pProperty != NULL) { - psz = pSyntax->GetCurrentString(iLen); - if (iLen > 0) { - pDecl->AddProperty(&args, psz, iLen); - } - } else if (iLen > 0) { - psz = pSyntax->GetCurrentString(iLen); - if (iLen > 0) { - pDecl->AddProperty(&args, wsName.c_str(), wsName.GetLength(), psz, - iLen); - } + int32_t iLen2; + const FX_WCHAR* psz2; + FDE_CSSPROPERTYARGS args; + args.pStringCache = nullptr; + args.pStaticStore = m_pInlineStyleStore; + args.pProperty = nullptr; + CFX_WideString wsName; + while (1) { + FDE_CSSSYNTAXSTATUS eStatus = pSyntax->DoSyntaxParse(); + if (eStatus == FDE_CSSSYNTAXSTATUS_PropertyName) { + psz2 = pSyntax->GetCurrentString(iLen2); + args.pProperty = FDE_GetCSSPropertyByName(CFX_WideStringC(psz2, iLen2)); + if (!args.pProperty) + wsName = CFX_WideStringC(psz2, iLen2); + } else if (eStatus == FDE_CSSSYNTAXSTATUS_PropertyValue) { + if (args.pProperty) { + psz2 = pSyntax->GetCurrentString(iLen2); + if (iLen2 > 0) + pDecl->AddProperty(&args, psz2, iLen2); + } else if (iLen2 > 0) { + psz2 = pSyntax->GetCurrentString(iLen2); + if (iLen2 > 0) { + pDecl->AddProperty(&args, wsName.c_str(), wsName.GetLength(), psz2, + iLen2); } - } else { - break; } + } else { + break; } } - pSyntax->Release(); } + #define FDE_CSSNONINHERITS (pComputedStyle->m_NonInheritedData) #define FDE_CSSINHERITS (pComputedStyle->m_InheritedData) #define FDE_CSSFONTSIZE (FDE_CSSINHERITS.m_fFontSize) diff --git a/xfa/fde/css/fde_cssstyleselector.h b/xfa/fde/css/fde_cssstyleselector.h index 790149c596..cb54aaed7f 100644 --- a/xfa/fde/css/fde_cssstyleselector.h +++ b/xfa/fde/css/fde_cssstyleselector.h @@ -93,9 +93,7 @@ class CFDE_CSSRuleCollection : public CFX_Target { class CFDE_CSSStyleSelector : public CFX_Target { public: CFDE_CSSStyleSelector(); - ~CFDE_CSSStyleSelector(); - - void Release() { delete this; } + ~CFDE_CSSStyleSelector() override; void SetFontMgr(IFX_FontMgr* pFontMgr); void SetDefFontSize(FX_FLOAT fFontSize); diff --git a/xfa/fde/css/fde_cssstylesheet.cpp b/xfa/fde/css/fde_cssstylesheet.cpp index af6872bbaa..b07031c354 100644 --- a/xfa/fde/css/fde_cssstylesheet.cpp +++ b/xfa/fde/css/fde_cssstylesheet.cpp @@ -6,6 +6,8 @@ #include "xfa/fde/css/fde_cssstylesheet.h" +#include <memory> + #include "xfa/fde/css/fde_cssdatatable.h" #include "xfa/fde/css/fde_csssyntax.h" #include "xfa/fgas/crt/fgas_codepage.h" @@ -120,32 +122,33 @@ int32_t CFDE_CSSStyleSheet::CountRules() const { IFDE_CSSRule* CFDE_CSSStyleSheet::GetRule(int32_t index) { return m_RuleArray.GetAt(index); } + FX_BOOL CFDE_CSSStyleSheet::LoadFromStream(const CFX_WideString& szUrl, IFX_Stream* pStream, uint16_t wCodePage) { - CFDE_CSSSyntaxParser* pSyntax = new CFDE_CSSSyntaxParser; - if (pStream->GetCodePage() != wCodePage) { + std::unique_ptr<CFDE_CSSSyntaxParser> pSyntax(new CFDE_CSSSyntaxParser); + if (pStream->GetCodePage() != wCodePage) pStream->SetCodePage(wCodePage); - } - FX_BOOL bRet = pSyntax->Init(pStream, 4096) && LoadFromSyntax(pSyntax); - pSyntax->Release(); + + FX_BOOL bRet = pSyntax->Init(pStream, 4096) && LoadFromSyntax(pSyntax.get()); m_wCodePage = wCodePage; m_szUrl = szUrl; return bRet; } + FX_BOOL CFDE_CSSStyleSheet::LoadFromBuffer(const CFX_WideString& szUrl, const FX_WCHAR* pBuffer, int32_t iBufSize, uint16_t wCodePage) { ASSERT(pBuffer && iBufSize > 0); - - CFDE_CSSSyntaxParser* pSyntax = new CFDE_CSSSyntaxParser; - FX_BOOL bRet = pSyntax->Init(pBuffer, iBufSize) && LoadFromSyntax(pSyntax); - pSyntax->Release(); + std::unique_ptr<CFDE_CSSSyntaxParser> pSyntax(new CFDE_CSSSyntaxParser); + FX_BOOL bRet = + pSyntax->Init(pBuffer, iBufSize) && LoadFromSyntax(pSyntax.get()); m_wCodePage = wCodePage; m_szUrl = szUrl; return bRet; } + FX_BOOL CFDE_CSSStyleSheet::LoadFromSyntax(CFDE_CSSSyntaxParser* pSyntax) { Reset(); m_pAllocator = IFX_MemoryAllocator::Create(FX_ALLOCTYPE_Static, 1024, 0); diff --git a/xfa/fde/css/fde_csssyntax.h b/xfa/fde/css/fde_csssyntax.h index d14f81ea7a..a4e9249055 100644 --- a/xfa/fde/css/fde_csssyntax.h +++ b/xfa/fde/css/fde_csssyntax.h @@ -77,9 +77,8 @@ enum FDE_CSSSYNTAXMODE { class CFDE_CSSSyntaxParser : public CFX_Target { public: CFDE_CSSSyntaxParser(); - ~CFDE_CSSSyntaxParser(); + ~CFDE_CSSSyntaxParser() override; - void Release() { delete this; } FX_BOOL Init(IFX_Stream* pStream, int32_t iCSSPlaneSize, int32_t iTextDataSize = 32, |