From bf59a070593d079256161f6ff47148df309668c7 Mon Sep 17 00:00:00 2001 From: Tom Sepez Date: Wed, 21 Oct 2015 14:07:23 -0700 Subject: XFA: add CPDFDocumentToFPDFDocument() Abstracts away that master returns CPDF_Documents directly, but XFA wraps them with a CPDFXFA_Document. Tidy dead code along the way. R=thestig@chromium.org Review URL: https://codereview.chromium.org/1415803002 . --- fpdfsdk/src/fpdf_dataavail.cpp | 4 +- fpdfsdk/src/fpdfeditimg.cpp | 2 - fpdfsdk/src/fpdfeditpage.cpp | 5 +- fpdfsdk/src/fpdfview.cpp | 30 ++++------- fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp | 103 +++++------------------------------- fpdfsdk/src/fsdk_baseform.cpp | 54 +++++-------------- fpdfsdk/src/javascript/app.cpp | 7 +-- 7 files changed, 46 insertions(+), 159 deletions(-) (limited to 'fpdfsdk/src') diff --git a/fpdfsdk/src/fpdf_dataavail.cpp b/fpdfsdk/src/fpdf_dataavail.cpp index f09b173208..0a90f49d8b 100644 --- a/fpdfsdk/src/fpdf_dataavail.cpp +++ b/fpdfsdk/src/fpdf_dataavail.cpp @@ -113,9 +113,7 @@ FPDFAvail_GetDocument(FPDF_AVAIL avail, FPDF_BYTESTRING password) { } ((CFPDF_DataAvail*)avail)->m_pDataAvail->SetDocument(pParser->GetDocument()); CheckUnSupportError(pParser->GetDocument(), FPDF_ERR_SUCCESS); - CPDF_Document* pPDFDoc = pParser->GetDocument(); - CPDFXFA_App* pApp = CPDFXFA_App::GetInstance(); - return new CPDFXFA_Document(pPDFDoc, pApp); + return FPDFDocumentFromCPDFDocument(pParser->GetDocument()); } DLLEXPORT int STDCALL FPDFAvail_GetFirstPageNum(FPDF_DOCUMENT doc) { diff --git a/fpdfsdk/src/fpdfeditimg.cpp b/fpdfsdk/src/fpdfeditimg.cpp index cd4618e44d..73fc251195 100644 --- a/fpdfsdk/src/fpdfeditimg.cpp +++ b/fpdfsdk/src/fpdfeditimg.cpp @@ -6,8 +6,6 @@ #include "../../public/fpdf_edit.h" #include "../include/fsdk_define.h" -#include "../include/fpdfxfa/fpdfxfa_doc.h" -#include "../include/fpdfxfa/fpdfxfa_page.h" DLLEXPORT FPDF_PAGEOBJECT STDCALL FPDFPageObj_NewImgeObj(FPDF_DOCUMENT document) { diff --git a/fpdfsdk/src/fpdfeditpage.cpp b/fpdfsdk/src/fpdfeditpage.cpp index 42ab3eb694..8b4168fbf4 100644 --- a/fpdfsdk/src/fpdfeditpage.cpp +++ b/fpdfsdk/src/fpdfeditpage.cpp @@ -43,8 +43,7 @@ DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_CreateNewDocument() { pInfoDict->SetAt("Creator", new CPDF_String(L"PDFium")); } - CPDFXFA_App* pApp = CPDFXFA_App::GetInstance(); - return new CPDFXFA_Document(pDoc, pApp); + return FPDFDocumentFromCPDFDocument(pDoc); } DLLEXPORT void STDCALL FPDFPage_Delete(FPDF_DOCUMENT document, int page_index) { @@ -177,7 +176,7 @@ DLLEXPORT void STDCALL FPDFPage_InsertObject(FPDF_PAGE page, } DLLEXPORT int STDCALL FPDFPage_CountObject(FPDF_PAGE page) { - CPDF_Page* pPage = ((CPDFXFA_Page*)page)->GetPDFPage(); + CPDF_Page* pPage = CPDFPageFromFPDFPage(page); if (!pPage || !pPage->m_pFormDict || !pPage->m_pFormDict->KeyExist("Type") || !pPage->m_pFormDict->GetElement("Type")->GetDirect() || pPage->m_pFormDict->GetElement("Type")->GetDirect()->GetString().Compare( diff --git a/fpdfsdk/src/fpdfview.cpp b/fpdfsdk/src/fpdfview.cpp index e58c53646b..bd7741d1e8 100644 --- a/fpdfsdk/src/fpdfview.cpp +++ b/fpdfsdk/src/fpdfview.cpp @@ -26,6 +26,10 @@ CPDF_Document* CPDFDocumentFromFPDFDocument(FPDF_DOCUMENT doc) { return doc ? static_cast(doc)->GetPDFDoc() : nullptr; } +FPDF_DOCUMENT FPDFDocumentFromCPDFDocument(CPDF_Document* doc) { + return doc ? new CPDFXFA_Document(doc, CPDFXFA_App::GetInstance()) : nullptr; +} + CPDF_Page* CPDFPageFromFPDFPage(FPDF_PAGE page) { return page ? static_cast(page)->GetPDFPage() : nullptr; } @@ -351,12 +355,7 @@ DLLEXPORT FPDF_DOCUMENT STDCALL FPDF_LoadMemDocument(const void* data_buf, CPDF_Document* pDoc = NULL; pDoc = pParser ? pParser->GetDocument() : NULL; CheckUnSupportError(pDoc, err_code); - CPDF_Document* pPDFDoc = pParser->GetDocument(); - if (!pPDFDoc) - return NULL; - - CPDFXFA_App* pProvider = CPDFXFA_App::GetInstance(); - return new CPDFXFA_Document(pPDFDoc, pProvider); + return FPDFDocumentFromCPDFDocument(pParser->GetDocument()); } DLLEXPORT FPDF_DOCUMENT STDCALL @@ -374,12 +373,7 @@ FPDF_LoadCustomDocument(FPDF_FILEACCESS* pFileAccess, CPDF_Document* pDoc = NULL; pDoc = pParser ? pParser->GetDocument() : NULL; CheckUnSupportError(pDoc, err_code); - CPDF_Document* pPDFDoc = pParser->GetDocument(); - if (!pPDFDoc) - return NULL; - - CPDFXFA_App* pProvider = CPDFXFA_App::GetInstance(); - return new CPDFXFA_Document(pPDFDoc, pProvider); + return FPDFDocumentFromCPDFDocument(pParser->GetDocument()); } DLLEXPORT FPDF_BOOL STDCALL FPDF_GetFileVersion(FPDF_DOCUMENT doc, @@ -437,15 +431,13 @@ DLLEXPORT FPDF_PAGE STDCALL FPDF_LoadPage(FPDF_DOCUMENT document, } DLLEXPORT double STDCALL FPDF_GetPageWidth(FPDF_PAGE page) { - if (!page) - return 0.0; - return ((CPDFXFA_Page*)page)->GetPageWidth(); + CPDFXFA_Page* pPage = static_cast(page); + return pPage ? pPage->GetPageWidth() : 0.0; } DLLEXPORT double STDCALL FPDF_GetPageHeight(FPDF_PAGE page) { - if (!page) - return 0.0; - return ((CPDFXFA_Page*)page)->GetPageHeight(); + CPDFXFA_Page* pPage = static_cast(page); + return pPage ? pPage->GetPageHeight() : 0.0; } void DropContext(void* data) { @@ -1018,8 +1010,8 @@ DLLEXPORT FPDF_DEST STDCALL FPDF_GetNamedDest(FPDF_DOCUMENT document, *buflen = 0; if (!document || index < 0) return NULL; - CPDF_Document* pDoc = ((CPDFXFA_Document*)document)->GetPDFDoc(); + CPDF_Document* pDoc = CPDFDocumentFromFPDFDocument(document); CPDF_Dictionary* pRoot = pDoc->GetRoot(); if (!pRoot) return NULL; diff --git a/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp b/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp index 365d5d786b..3763003dca 100644 --- a/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp +++ b/fpdfsdk/src/fpdfxfa/fpdfxfa_doc.cpp @@ -35,14 +35,13 @@ extern int GetLastError(); CPDFXFA_Document::CPDFXFA_Document(CPDF_Document* pPDFDoc, CPDFXFA_App* pProvider) - : m_pPDFDoc(pPDFDoc), + : m_iDocType(DOCTYPE_PDF), + m_pPDFDoc(pPDFDoc), + m_pSDKDoc(nullptr), + m_pXFADoc(nullptr), + m_pXFADocView(nullptr), m_pApp(pProvider), - m_pXFADoc(NULL), - m_pXFADocView(NULL), - m_iDocType(DOCTYPE_PDF), - m_pJSContext(NULL), - m_pSDKDoc(NULL) { - m_XFAPageList.RemoveAll(); + m_pJSContext(nullptr) { } CPDFXFA_Document::~CPDFXFA_Document() { @@ -492,24 +491,6 @@ FX_BOOL CPDFXFA_Document::PopupMenu(IXFA_Widget* hWidget, void CPDFXFA_Document::PageViewEvent(IXFA_PageView* pPageView, FX_DWORD dwFlags) { - if (m_iDocType != DOCTYPE_DYNIMIC_XFA) - return; - - CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - if (pEnv == NULL) - return; - - CPDFXFA_Page* pPage = GetPage(pPageView); - if (pPage == NULL) - return; - - if (dwFlags == FXFA_PAGEVIEWEVENT_POSTADDED) { - // pEnv->FFI_PageEvent(pPage, FXFA_PAGEVIEWEVENT_POSTADDED); - } else if (dwFlags == FXFA_PAGEVIEWEVENT_POSTREMOVED) { - // pEnv->FFI_PageEvent(pPage, FXFA_PAGEVIEWEVENT_POSTREMOVED); - // RemovePage(pPage); - // delete pPage; - } } void CPDFXFA_Document::WidgetEvent(IXFA_Widget* hWidget, @@ -517,60 +498,30 @@ void CPDFXFA_Document::WidgetEvent(IXFA_Widget* hWidget, FX_DWORD dwEvent, void* pParam, void* pAdditional) { - if (m_iDocType != DOCTYPE_DYNIMIC_XFA || NULL == hWidget) + if (m_iDocType != DOCTYPE_DYNIMIC_XFA || !hWidget) return; CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv(); - if (pEnv == NULL) - return; - - if (NULL == hWidget) + if (!pEnv) return; IXFA_PageView* pPageView = m_pXFADocView->GetWidgetHandler()->GetPageView(hWidget); - if (pPageView == NULL) return; + CPDFXFA_Page* pXFAPage = GetPage(pPageView); if (pXFAPage == NULL) return; CPDFSDK_PageView* pSdkPageView = m_pSDKDoc->GetPageView(pXFAPage); - - CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr(); - if (dwEvent == XFA_WIDGETEVENT_PostAdded) { - // CPDFSDK_Annot* pAnnot = - // pAnnotHandlerMgr->NewAnnot(hWidget, - // pSdkPageView); - // pAnnotHandlerMgr->Annot_OnLoad(pAnnot); - - // pEnv->FFI_WidgetEvent(hWidget, XFA_WIDGETEVENT_PostAdded); - // IXFA_PageView* pOldPageView = (IXFA_PageView*)pAdditional; - // if (pOldPageView) - // { - // CPDFXFA_Page* pDestPage = - // m_pSDKDoc->GetPageView((IXFA_PageView*)pOldPageView); - // ASSERT(pDestPage); - // CPDFSDK_Annot* pAnnot = - // pDestPage->GetAnnotByXFAWidget(hWidget); - // if (pAnnot) - // { - // if (m_pSDKDoc->GetFocusAnnot() == pAnnot) - // { - // m_pSDKDoc->SetFocusAnnot(NULL); - // } - // pDestPage->DeleteAnnot(pAnnot); - // } - // } pSdkPageView->AddAnnot(hWidget); } else if (dwEvent == XFA_WIDGETEVENT_PreRemoved) { CPDFSDK_Annot* pAnnot = pSdkPageView->GetAnnotByXFAWidget(hWidget); if (pAnnot) { pSdkPageView->DeleteAnnot(pAnnot); - // pEnv->FFI_WidgetEvent(hWidget, XFA_WIDGETEVENT_PreRemoved); } } } @@ -686,32 +637,9 @@ void CPDFXFA_Document::ExportData(IXFA_Doc* hDoc, content.GetLength()); CFX_WideStringC data(L"data"); if (pXFADocHander->SavePackage(m_pXFADocView->GetDoc(), data, &fileWrite)) { - NULL; + // TODO: Maybe report error. } - } - /*else if (fileType == FXFA_FILE_STATIC_XDP) - { - content = "\r\n"; - fileWrite.WriteBlock((const FX_CHAR*)content, fileWrite.GetSize(), -content.GetLength()); - CFX_WideStringC data(L"data"); - if( pXFADocHander->SavePackage(m_pXFADocView->GetDoc(), data, -&fileWrite)) - { - NULL; - } - CFX_WideString wPath = pEnv->FFI_GetFilePath(pFileHandler); -// CFX_WideString wPath; -// wPath.FromUTF16LE(filePath); - CFX_ByteString bPath = wPath.UTF8Encode(); - CFX_ByteString szFormat = "\n"; - content.Format(szFormat,(char*)(const FX_CHAR*)bPath); - fileWrite.WriteBlock((const FX_CHAR*)content,fileWrite.GetSize(), -content.GetLength()); - } - */ - else if (fileType == FXFA_SAVEAS_XDP) { + } else if (fileType == FXFA_SAVEAS_XDP) { if (m_pPDFDoc == NULL) return; CPDF_Dictionary* pRoot = m_pPDFDoc->GetRoot(); @@ -729,8 +657,6 @@ content.GetLength()); if (NULL == pArray) return; int size = pArray->GetCount(); - int iFormIndex = -1; - int iDataSetsIndex = -1; for (int i = 1; i < size; i += 2) { CPDF_Object* pPDFObj = pArray->GetElement(i); CPDF_Object* pPrePDFObj = pArray->GetElement(i - 1); @@ -750,7 +676,6 @@ content.GetLength()); &fileWrite); } else { if (i == size - 1) { - // CFX_WideString wPath = pEnv->FFI_GetFilePath(pFileHandler); CFX_WideString wPath = CFX_WideString::FromUTF16LE( (unsigned short*)(const FX_CHAR*)bs, bs.GetLength() / sizeof(unsigned short)); @@ -771,7 +696,9 @@ content.GetLength()); } } } - FX_BOOL bError = fileWrite.Flush(); + if (!fileWrite.Flush()) { + // TODO: Report error. + } } void CPDFXFA_Document::ImportData(IXFA_Doc* hDoc, const CFX_WideStringC& wsFilePath) { @@ -1051,8 +978,6 @@ FX_BOOL CPDFXFA_Document::_ExportSubmitFile(FPDF_FILEHANDLER* pFileHandler, return FALSE; } int size = pArray->GetCount(); - int iFormIndex = -1; - int iDataSetsIndex = -1; for (int i = 1; i < size; i += 2) { CPDF_Object* pPDFObj = pArray->GetElement(i); CPDF_Object* pPrePDFObj = pArray->GetElement(i - 1); diff --git a/fpdfsdk/src/fsdk_baseform.cpp b/fpdfsdk/src/fsdk_baseform.cpp index 68c320b4af..024287d706 100644 --- a/fpdfsdk/src/fsdk_baseform.cpp +++ b/fpdfsdk/src/fsdk_baseform.cpp @@ -39,15 +39,9 @@ CPDFSDK_Widget::CPDFSDK_Widget(CPDF_Annot* pAnnot, CPDFSDK_Widget::~CPDFSDK_Widget() {} -IXFA_Widget* CPDFSDK_Widget::GetMixXFAWidget() { - ASSERT(m_pPageView != NULL); - +IXFA_Widget* CPDFSDK_Widget::GetMixXFAWidget() const { CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument(); - ASSERT(pSDKDoc != NULL); - CPDFXFA_Document* pDoc = pSDKDoc->GetDocument(); - ASSERT(pDoc != NULL); - if (pDoc->GetDocType() == DOCTYPE_STATIC_XFA) { if (!m_hMixXFAWidget) { if (IXFA_DocView* pDocView = pDoc->GetXFADocView()) { @@ -90,15 +84,9 @@ IXFA_Widget* CPDFSDK_Widget::GetGroupMixXFAWidget() { return NULL; } -IXFA_WidgetHandler* CPDFSDK_Widget::GetXFAWidgetHandler() { - ASSERT(m_pPageView != NULL); - +IXFA_WidgetHandler* CPDFSDK_Widget::GetXFAWidgetHandler() const { CPDFSDK_Document* pSDKDoc = m_pPageView->GetSDKDocument(); - ASSERT(pSDKDoc != NULL); - CPDFXFA_Document* pDoc = pSDKDoc->GetDocument(); - ASSERT(pDoc != NULL); - if (pDoc->GetDocType() == DOCTYPE_STATIC_XFA) { if (!m_pWidgetHandler) { if (IXFA_DocView* pDocView = pDoc->GetXFADocView()) { @@ -343,16 +331,10 @@ void CPDFSDK_Widget::SynchronizeXFAValue() { if (!pXFADocView) return; - if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) { - if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) { - CPDF_FormField* pFormField = GetFormField(); - ASSERT(pFormField != NULL); - - CPDF_FormControl* pFormCtrl = GetFormControl(); - ASSERT(pFormCtrl != NULL); - - CPDFSDK_Widget::SynchronizeXFAValue(pXFADocView, hWidget, pFormField, - pFormCtrl); + if (IXFA_Widget* hWidget = GetMixXFAWidget()) { + if (GetXFAWidgetHandler()) { + CPDFSDK_Widget::SynchronizeXFAValue(pXFADocView, hWidget, GetFormField(), + GetFormControl()); } } #endif // PDF_ENABLE_XFA @@ -372,13 +354,9 @@ void CPDFSDK_Widget::SynchronizeXFAItems() { if (!pXFADocView) return; - if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) { - if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) { - CPDF_FormField* pFormField = GetFormField(); - ASSERT(pFormField != NULL); - - SynchronizeXFAItems(pXFADocView, hWidget, pFormField, NULL); - } + if (IXFA_Widget* hWidget = GetMixXFAWidget()) { + if (GetXFAWidgetHandler()) + SynchronizeXFAItems(pXFADocView, hWidget, GetFormField(), nullptr); } #endif // PDF_ENABLE_XFA } @@ -622,12 +600,8 @@ int CPDFSDK_Widget::GetRotate() const { return pCtrl->GetRotation() % 360; } -CFX_WideString CPDFSDK_Widget::GetName() { - ASSERT(m_pInterForm != NULL); - +CFX_WideString CPDFSDK_Widget::GetName() const { CPDF_FormField* pFormField = GetFormField(); - ASSERT(pFormField != NULL); - return pFormField->GetFullName(); } @@ -680,7 +654,7 @@ FX_FLOAT CPDFSDK_Widget::GetFontSize() const { return fFontSize; } -int CPDFSDK_Widget::GetSelectedIndex(int nIndex) { +int CPDFSDK_Widget::GetSelectedIndex(int nIndex) const { #ifdef PDF_ENABLE_XFA if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) { if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) { @@ -696,7 +670,7 @@ int CPDFSDK_Widget::GetSelectedIndex(int nIndex) { return pFormField->GetSelectedIndex(nIndex); } -CFX_WideString CPDFSDK_Widget::GetValue(FX_BOOL bDisplay) { +CFX_WideString CPDFSDK_Widget::GetValue(FX_BOOL bDisplay) const { #ifdef PDF_ENABLE_XFA if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) { if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) { @@ -735,7 +709,7 @@ int CPDFSDK_Widget::CountOptions() const { return pFormField->CountOptions(); } -FX_BOOL CPDFSDK_Widget::IsOptionSelected(int nIndex) { +FX_BOOL CPDFSDK_Widget::IsOptionSelected(int nIndex) const { #ifdef PDF_ENABLE_XFA if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) { if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) { @@ -758,7 +732,7 @@ int CPDFSDK_Widget::GetTopVisibleIndex() const { return pFormField->GetTopVisibleIndex(); } -FX_BOOL CPDFSDK_Widget::IsChecked() { +FX_BOOL CPDFSDK_Widget::IsChecked() const { #ifdef PDF_ENABLE_XFA if (IXFA_WidgetHandler* pXFAWidgetHandler = this->GetXFAWidgetHandler()) { if (IXFA_Widget* hWidget = this->GetMixXFAWidget()) { diff --git a/fpdfsdk/src/javascript/app.cpp b/fpdfsdk/src/javascript/app.cpp index 80a9b17aa9..379170f292 100644 --- a/fpdfsdk/src/javascript/app.cpp +++ b/fpdfsdk/src/javascript/app.cpp @@ -201,11 +201,12 @@ FX_BOOL app::viewerVersion(IJS_Context* cc, CJS_Context* pContext = (CJS_Context*)cc; CPDFSDK_Document* pCurDoc = pContext->GetReaderDocument(); CPDFXFA_Document* pDoc = pCurDoc->GetDocument(); - if (pDoc->GetDocType() == 1 || pDoc->GetDocType() == 2) + if (pDoc->GetDocType() == 1 || pDoc->GetDocType() == 2) { vp << JS_NUM_VIEWERVERSION_XFA; - else - vp << JS_NUM_VIEWERVERSION; + return TRUE; + } + vp << JS_NUM_VIEWERVERSION; return TRUE; } -- cgit v1.2.3