diff options
author | Tom Sepez <tsepez@chromium.org> | 2016-03-15 12:43:09 -0700 |
---|---|---|
committer | Tom Sepez <tsepez@chromium.org> | 2016-03-15 12:43:09 -0700 |
commit | 744da70149c450d2f387a1fa325a3074ac2edb0c (patch) | |
tree | 91889184989b49e0899a110aab9808efaea4ca14 | |
parent | 3a8051c8cb55e3c108c1f860dc743c42827ae4fa (diff) | |
download | pdfium-744da70149c450d2f387a1fa325a3074ac2edb0c.tar.xz |
FPDF_PageDelete must delete XFA pages as well.
Currently, it is only deleting the CPDF_ resources, which
are wrapped by XFA objects in an XFA build. Hence, if a page
is deleted and then re-inserted, we get the old contents. In
print preview, chromium first inserts blank pages and then
replaces them later on, causing the associated bug.
BUG=594111
R=dsinclair@chromium.org
Review URL: https://codereview.chromium.org/1804163002 .
-rw-r--r-- | fpdfsdk/fpdfeditpage.cpp | 7 | ||||
-rw-r--r-- | fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp | 8 | ||||
-rw-r--r-- | fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h | 2 |
3 files changed, 12 insertions, 5 deletions
diff --git a/fpdfsdk/fpdfeditpage.cpp b/fpdfsdk/fpdfeditpage.cpp index e10f3825af..493329c360 100644 --- a/fpdfsdk/fpdfeditpage.cpp +++ b/fpdfsdk/fpdfeditpage.cpp @@ -57,11 +57,8 @@ DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_CreateNewDocument() { } DLLEXPORT void STDCALL FPDFPage_Delete(FPDF_DOCUMENT document, int page_index) { - CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); - if (!pDoc || page_index < 0 || page_index >= pDoc->GetPageCount()) - return; - - pDoc->DeletePage(page_index); + if (UnderlyingDocumentType* pDoc = UnderlyingFromFPDFDocument(document)) + pDoc->DeletePage(page_index); } DLLEXPORT FPDF_PAGE STDCALL FPDFPage_New(FPDF_DOCUMENT document, diff --git a/fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp b/fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp index 144e5dc811..6e0edf646e 100644 --- a/fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp +++ b/fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp @@ -182,6 +182,14 @@ CPDFXFA_Page* CPDFXFA_Document::GetPage(IXFA_PageView* pPage) { return NULL; } +void CPDFXFA_Document::DeletePage(int page_index) { + if (page_index < 0 || page_index >= m_XFAPageList.GetSize()) + return; + + if (CPDFXFA_Page* pPage = m_XFAPageList.GetAt(page_index)) + pPage->Release(); +} + void CPDFXFA_Document::RemovePage(CPDFXFA_Page* page) { m_XFAPageList.SetAt(page->GetPageIndex(), NULL); } diff --git a/fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h b/fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h index 2bc579c1da..55310e5615 100644 --- a/fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h +++ b/fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h @@ -35,6 +35,8 @@ class CPDFXFA_Document : public IXFA_DocProvider { int GetPageCount(); CPDFXFA_Page* GetPage(int page_index); CPDFXFA_Page* GetPage(IXFA_PageView* pPage); + + void DeletePage(int page_index); void RemovePage(CPDFXFA_Page* page); int GetDocType() { return m_iDocType; } |