From a7ff4dc7c27c7940daec9cf740f4b7e7638a45ec Mon Sep 17 00:00:00 2001 From: Dan Sinclair Date: Mon, 14 May 2018 20:13:40 +0000 Subject: Cleanup CPDF_Form parsing code This CL folds the StartParse() method of CPDF_Form into the ParserContent method. The no arguments ParseContent is removed and ParseContentWithParams renamed to ParseContent. The callsites are updated to pass the nullptr's. Bug: chromium:813349 Change-Id: I304b77aef1de1b9aa20e4a3044db5023f5701584 Reviewed-on: https://pdfium-review.googlesource.com/32511 Reviewed-by: Henrique Nakashima Commit-Queue: dsinclair --- .../edit/cpdf_pagecontentgenerator_unittest.cpp | 4 ++-- core/fpdfapi/font/cpdf_type3font.cpp | 3 +-- core/fpdfapi/page/cpdf_form.cpp | 20 +++++--------------- core/fpdfapi/page/cpdf_form.h | 14 ++++---------- core/fpdfapi/page/cpdf_pageobjectholder.cpp | 1 + core/fpdfapi/page/cpdf_streamcontentparser.cpp | 2 +- core/fpdfapi/page/cpdf_tilingpattern.cpp | 2 +- core/fpdfapi/render/cpdf_renderstatus.cpp | 2 +- core/fpdfdoc/cpdf_annot.cpp | 2 +- core/fpdfdoc/cpdf_formcontrol.cpp | 2 +- fpdfsdk/cpdf_annotcontext.cpp | 2 +- 11 files changed, 19 insertions(+), 35 deletions(-) diff --git a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp index e9b3d15d30..d97e8abf0b 100644 --- a/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp +++ b/core/fpdfapi/edit/cpdf_pagecontentgenerator_unittest.cpp @@ -298,7 +298,7 @@ TEST_F(CPDF_PageContentGeneratorTest, ProcessEmptyForm) { // Create an empty form. auto pTestForm = pdfium::MakeUnique(pDoc.get(), nullptr, pStream.get()); - pTestForm->ParseContent(); + pTestForm->ParseContent(nullptr, nullptr, nullptr, nullptr); ASSERT_TRUE(pTestForm->IsParsed()); // The generated stream for the empty form should be an empty string. @@ -324,7 +324,7 @@ TEST_F(CPDF_PageContentGeneratorTest, ProcessFormWithPath) { // Create a form with a non-empty stream. auto pTestForm = pdfium::MakeUnique(pDoc.get(), nullptr, pStream.get()); - pTestForm->ParseContent(); + pTestForm->ParseContent(nullptr, nullptr, nullptr, nullptr); ASSERT_TRUE(pTestForm->IsParsed()); CPDF_PageContentGenerator generator(pTestForm.get()); diff --git a/core/fpdfapi/font/cpdf_type3font.cpp b/core/fpdfapi/font/cpdf_type3font.cpp index 824d6f45d0..c321f87897 100644 --- a/core/fpdfapi/font/cpdf_type3font.cpp +++ b/core/fpdfapi/font/cpdf_type3font.cpp @@ -115,8 +115,7 @@ CPDF_Type3Char* CPDF_Type3Font::LoadChar(uint32_t charcode) { // can change as a result. Thus after it returns, check the cache again for // a cache hit. m_CharLoadingDepth++; - pNewChar->form()->ParseContentWithParams(nullptr, nullptr, pNewChar.get(), - nullptr); + pNewChar->form()->ParseContent(nullptr, nullptr, pNewChar.get(), nullptr); m_CharLoadingDepth--; it = m_CacheMap.find(charcode); if (it != m_CacheMap.end()) diff --git a/core/fpdfapi/page/cpdf_form.cpp b/core/fpdfapi/page/cpdf_form.cpp index 3abeff4829..a63d3ce96d 100644 --- a/core/fpdfapi/page/cpdf_form.cpp +++ b/core/fpdfapi/page/cpdf_form.cpp @@ -29,12 +29,12 @@ CPDF_Form::CPDF_Form(CPDF_Document* pDoc, LoadTransInfo(); } -CPDF_Form::~CPDF_Form() {} +CPDF_Form::~CPDF_Form() = default; -void CPDF_Form::StartParse(CPDF_AllStates* pGraphicStates, - const CFX_Matrix* pParentMatrix, - CPDF_Type3Char* pType3Char, - std::set* parsedSet) { +void CPDF_Form::ParseContent(CPDF_AllStates* pGraphicStates, + const CFX_Matrix* pParentMatrix, + CPDF_Type3Char* pType3Char, + std::set* parsedSet) { if (m_ParseState == CONTENT_PARSED || m_ParseState == CONTENT_PARSING) return; @@ -47,16 +47,6 @@ void CPDF_Form::StartParse(CPDF_AllStates* pGraphicStates, m_pParser = pdfium::MakeUnique( this, pGraphicStates, pParentMatrix, pType3Char, parsedSet); m_ParseState = CONTENT_PARSING; -} - -void CPDF_Form::ParseContent() { - ParseContentWithParams(nullptr, nullptr, nullptr, nullptr); -} -void CPDF_Form::ParseContentWithParams(CPDF_AllStates* pGraphicStates, - const CFX_Matrix* pParentMatrix, - CPDF_Type3Char* pType3Char, - std::set* parsedSet) { - StartParse(pGraphicStates, pParentMatrix, pType3Char, parsedSet); ContinueParse(nullptr); } diff --git a/core/fpdfapi/page/cpdf_form.h b/core/fpdfapi/page/cpdf_form.h index c5285a1d01..9f2987ddb6 100644 --- a/core/fpdfapi/page/cpdf_form.h +++ b/core/fpdfapi/page/cpdf_form.h @@ -27,18 +27,12 @@ class CPDF_Form : public CPDF_PageObjectHolder { CPDF_Dictionary* pParentResources = nullptr); ~CPDF_Form() override; - void ParseContent(); - void ParseContentWithParams(CPDF_AllStates* pGraphicStates, - const CFX_Matrix* pParentMatrix, - CPDF_Type3Char* pType3Char, - std::set* parsedSet); + void ParseContent(CPDF_AllStates* pGraphicStates, + const CFX_Matrix* pParentMatrix, + CPDF_Type3Char* pType3Char, + std::set* parsedSet); private: - void StartParse(CPDF_AllStates* pGraphicStates, - const CFX_Matrix* pParentMatrix, - CPDF_Type3Char* pType3Char, - std::set* parsedSet); - std::unique_ptr> m_ParsedSet; }; diff --git a/core/fpdfapi/page/cpdf_pageobjectholder.cpp b/core/fpdfapi/page/cpdf_pageobjectholder.cpp index 1d39802658..87a1aebaab 100644 --- a/core/fpdfapi/page/cpdf_pageobjectholder.cpp +++ b/core/fpdfapi/page/cpdf_pageobjectholder.cpp @@ -40,6 +40,7 @@ void CPDF_PageObjectHolder::ContinueParse(PauseIndicatorIface* pPause) { m_ParseState = CONTENT_PARSED; if (m_pParser->GetCurStates()) m_LastCTM = m_pParser->GetCurStates()->m_CTM; + m_pParser.reset(); } diff --git a/core/fpdfapi/page/cpdf_streamcontentparser.cpp b/core/fpdfapi/page/cpdf_streamcontentparser.cpp index df69aa43b9..5f4bdf794d 100644 --- a/core/fpdfapi/page/cpdf_streamcontentparser.cpp +++ b/core/fpdfapi/page/cpdf_streamcontentparser.cpp @@ -781,7 +781,7 @@ void CPDF_StreamContentParser::AddForm(CPDF_Stream* pStream) { status.m_TextState = m_pCurStates->m_TextState; auto form = pdfium::MakeUnique( m_pDocument.Get(), m_pPageResources.Get(), pStream, m_pResources.Get()); - form->ParseContentWithParams(&status, nullptr, nullptr, m_ParsedSet.Get()); + form->ParseContent(&status, nullptr, nullptr, m_ParsedSet.Get()); CFX_Matrix matrix = m_pCurStates->m_CTM; matrix.Concat(m_mtContentToUser); diff --git a/core/fpdfapi/page/cpdf_tilingpattern.cpp b/core/fpdfapi/page/cpdf_tilingpattern.cpp index 02127b6368..5a71baaf7b 100644 --- a/core/fpdfapi/page/cpdf_tilingpattern.cpp +++ b/core/fpdfapi/page/cpdf_tilingpattern.cpp @@ -49,7 +49,7 @@ bool CPDF_TilingPattern::Load() { const CFX_Matrix& matrix = parent_matrix(); m_pForm = pdfium::MakeUnique(document(), nullptr, pStream); - m_pForm->ParseContentWithParams(nullptr, &matrix, nullptr, nullptr); + m_pForm->ParseContent(nullptr, &matrix, nullptr, nullptr); m_BBox = pDict->GetRectFor("BBox"); return true; } diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp index 6752fd1250..f33b304b63 100644 --- a/core/fpdfapi/render/cpdf_renderstatus.cpp +++ b/core/fpdfapi/render/cpdf_renderstatus.cpp @@ -2546,7 +2546,7 @@ RetainPtr CPDF_RenderStatus::LoadSMask( CPDF_Form form(m_pContext->GetDocument(), m_pContext->GetPageResources(), pGroup); - form.ParseContent(); + form.ParseContent(nullptr, nullptr, nullptr, nullptr); CFX_DefaultRenderDevice bitmap_device; bool bLuminosity = diff --git a/core/fpdfdoc/cpdf_annot.cpp b/core/fpdfdoc/cpdf_annot.cpp index 3b84baf8db..dc2e8acfdf 100644 --- a/core/fpdfdoc/cpdf_annot.cpp +++ b/core/fpdfdoc/cpdf_annot.cpp @@ -198,7 +198,7 @@ CPDF_Form* CPDF_Annot::GetAPForm(const CPDF_Page* pPage, AppearanceMode mode) { auto pNewForm = pdfium::MakeUnique( m_pDocument.Get(), pPage->m_pResources.Get(), pStream); - pNewForm->ParseContent(); + pNewForm->ParseContent(nullptr, nullptr, nullptr, nullptr); CPDF_Form* pResult = pNewForm.get(); m_APMap[pStream] = std::move(pNewForm); diff --git a/core/fpdfdoc/cpdf_formcontrol.cpp b/core/fpdfdoc/cpdf_formcontrol.cpp index a78a24db9d..2100d4ecee 100644 --- a/core/fpdfdoc/cpdf_formcontrol.cpp +++ b/core/fpdfdoc/cpdf_formcontrol.cpp @@ -180,7 +180,7 @@ void CPDF_FormControl::DrawControl(CFX_RenderDevice* pDevice, matrix.Concat(*pMatrix); CPDF_Form form(m_pField->GetForm()->GetDocument(), m_pField->GetForm()->GetFormDict()->GetDictFor("DR"), pStream); - form.ParseContent(); + form.ParseContent(nullptr, nullptr, nullptr, nullptr); CPDF_RenderContext context(pPage); context.AppendLayer(&form, &matrix); context.Render(pDevice, pOptions, nullptr); diff --git a/fpdfsdk/cpdf_annotcontext.cpp b/fpdfsdk/cpdf_annotcontext.cpp index 20c5fc343e..4e01ed68b3 100644 --- a/fpdfsdk/cpdf_annotcontext.cpp +++ b/fpdfsdk/cpdf_annotcontext.cpp @@ -31,5 +31,5 @@ void CPDF_AnnotContext::SetForm(CPDF_Stream* pStream) { m_pAnnotForm = pdfium::MakeUnique( m_pPage->GetDocument(), m_pPage->m_pResources.Get(), pStream); - m_pAnnotForm->ParseContent(); + m_pAnnotForm->ParseContent(nullptr, nullptr, nullptr, nullptr); } -- cgit v1.2.3