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 .
diff --git a/fpdfsdk/fpdfeditpage.cpp b/fpdfsdk/fpdfeditpage.cpp
index e10f382..493329c 100644
--- a/fpdfsdk/fpdfeditpage.cpp
+++ b/fpdfsdk/fpdfeditpage.cpp
@@ -57,11 +57,8 @@
 }
 
 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 144e5dc..6e0edf6 100644
--- a/fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp
+++ b/fpdfsdk/fpdfxfa/fpdfxfa_doc.cpp
@@ -182,6 +182,14 @@
   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 2bc579c..55310e5 100644
--- a/fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h
+++ b/fpdfsdk/include/fpdfxfa/fpdfxfa_doc.h
@@ -35,6 +35,8 @@
   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; }