Avoid casting to CPDFXFA_Context just to get form type.
Call through newly-added interfaces instead.
Change-Id: I853735913fe9895c257dcccfe94c9d4f4678120f
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/59630
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/core/fpdfapi/parser/cpdf_document.h b/core/fpdfapi/parser/cpdf_document.h
index 543611d..dba2a7f 100644
--- a/core/fpdfapi/parser/cpdf_document.h
+++ b/core/fpdfapi/parser/cpdf_document.h
@@ -46,6 +46,8 @@
virtual void DeletePage(int page_index) = 0;
virtual uint32_t GetUserPermissions() const = 0;
virtual bool ContainsExtensionForm() const = 0;
+ virtual bool ContainsExtensionFullForm() const = 0;
+ virtual bool ContainsExtensionForegroundForm() const = 0;
};
class LinkListIface {
diff --git a/fpdfsdk/cpdfsdk_pageview.cpp b/fpdfsdk/cpdfsdk_pageview.cpp
index 4d4bdea..907ff7f 100644
--- a/fpdfsdk/cpdfsdk_pageview.cpp
+++ b/fpdfsdk/cpdfsdk_pageview.cpp
@@ -24,7 +24,6 @@
#include "third_party/base/stl_util.h"
#ifdef PDF_ENABLE_XFA
-#include "fpdfsdk/fpdfxfa/cpdfxfa_context.h"
#include "fpdfsdk/fpdfxfa/cpdfxfa_page.h"
#include "xfa/fxfa/cxfa_ffdocview.h"
#include "xfa/fxfa/cxfa_ffpageview.h"
@@ -73,8 +72,8 @@
if (!pPage)
return;
- auto* pContext = static_cast<CPDFXFA_Context*>(pPage->GetDocumentExtension());
- if (pContext->GetFormType() == FormType::kXFAFull) {
+ auto* pContext = pPage->GetDocumentExtension();
+ if (pContext->ContainsExtensionFullForm()) {
pPage->DrawFocusAnnot(pDevice, GetFocusAnnot(), mtUser2Device, pClip);
return;
}
@@ -475,9 +474,8 @@
#ifdef PDF_ENABLE_XFA
RetainPtr<CPDFXFA_Page> protector(ToXFAPage(m_page));
- auto* pContext =
- static_cast<CPDFXFA_Context*>(m_pFormFillEnv->GetDocExtension());
- if (pContext->GetFormType() == FormType::kXFAFull) {
+ auto* pContext = m_pFormFillEnv->GetDocExtension();
+ if (pContext->ContainsExtensionFullForm()) {
CXFA_FFPageView* pageView = protector->GetXFAPageView();
std::unique_ptr<IXFA_WidgetIterator> pWidgetHandler(
pageView->CreateWidgetIterator(
@@ -531,17 +529,10 @@
int CPDFSDK_PageView::GetPageIndex() const {
#ifdef PDF_ENABLE_XFA
- auto* pContext = static_cast<CPDFXFA_Context*>(
- m_page->AsXFAPage()->GetDocumentExtension());
- switch (pContext->GetFormType()) {
- case FormType::kXFAFull: {
- CXFA_FFPageView* pPageView = m_page->AsXFAPage()->GetXFAPageView();
- return pPageView ? pPageView->GetLayoutItem()->GetPageIndex() : -1;
- }
- case FormType::kNone:
- case FormType::kAcroForm:
- case FormType::kXFAForeground:
- break;
+ auto* pContext = m_page->AsXFAPage()->GetDocumentExtension();
+ if (pContext->ContainsExtensionFullForm()) {
+ CXFA_FFPageView* pPageView = m_page->AsXFAPage()->GetXFAPageView();
+ return pPageView ? pPageView->GetLayoutItem()->GetPageIndex() : -1;
}
#endif // PDF_ENABLE_XFA
return GetPageIndexForStaticPDF();
diff --git a/fpdfsdk/cpdfsdk_widget.cpp b/fpdfsdk/cpdfsdk_widget.cpp
index db60d89..24289fc 100644
--- a/fpdfsdk/cpdfsdk_widget.cpp
+++ b/fpdfsdk/cpdfsdk_widget.cpp
@@ -51,12 +51,12 @@
#ifdef PDF_ENABLE_XFA
CXFA_FFWidget* CPDFSDK_Widget::GetMixXFAWidget() const {
- auto* pContext = static_cast<CPDFXFA_Context*>(
- m_pPageView->GetFormFillEnv()->GetDocExtension());
- if (pContext->GetFormType() != FormType::kXFAForeground)
+ auto* pContext = m_pPageView->GetFormFillEnv()->GetDocExtension();
+ if (!pContext->ContainsExtensionForegroundForm())
return nullptr;
- CXFA_FFDocView* pDocView = pContext->GetXFADocView();
+ CXFA_FFDocView* pDocView =
+ static_cast<CPDFXFA_Context*>(pContext)->GetXFADocView();
if (!pDocView)
return nullptr;
@@ -76,12 +76,12 @@
}
CXFA_FFWidget* CPDFSDK_Widget::GetGroupMixXFAWidget() const {
- auto* pContext = static_cast<CPDFXFA_Context*>(
- m_pPageView->GetFormFillEnv()->GetDocExtension());
- if (pContext->GetFormType() != FormType::kXFAForeground)
+ auto* pContext = m_pPageView->GetFormFillEnv()->GetDocExtension();
+ if (!pContext->ContainsExtensionForegroundForm())
return nullptr;
- CXFA_FFDocView* pDocView = pContext->GetXFADocView();
+ CXFA_FFDocView* pDocView =
+ static_cast<CPDFXFA_Context*>(pContext)->GetXFADocView();
if (!pDocView)
return nullptr;
@@ -90,13 +90,13 @@
}
CXFA_FFWidgetHandler* CPDFSDK_Widget::GetXFAWidgetHandler() const {
- auto* pContext = static_cast<CPDFXFA_Context*>(
- m_pPageView->GetFormFillEnv()->GetDocExtension());
- if (pContext->GetFormType() != FormType::kXFAForeground)
+ auto* pContext = m_pPageView->GetFormFillEnv()->GetDocExtension();
+ if (!pContext->ContainsExtensionForegroundForm())
return nullptr;
if (!m_pWidgetHandler) {
- CXFA_FFDocView* pDocView = pContext->GetXFADocView();
+ CXFA_FFDocView* pDocView =
+ static_cast<CPDFXFA_Context*>(pContext)->GetXFADocView();
if (pDocView)
m_pWidgetHandler = pDocView->GetWidgetHandler();
}
@@ -363,9 +363,8 @@
bool CPDFSDK_Widget::IsAppearanceValid() {
#ifdef PDF_ENABLE_XFA
- auto* pContext = static_cast<CPDFXFA_Context*>(
- m_pPageView->GetFormFillEnv()->GetDocExtension());
- if (pContext->GetFormType() == FormType::kXFAFull)
+ auto* pContext = m_pPageView->GetFormFillEnv()->GetDocExtension();
+ if (pContext->ContainsExtensionFullForm())
return true;
#endif // PDF_ENABLE_XFA
return CPDFSDK_BAAnnot::IsAppearanceValid();
diff --git a/fpdfsdk/cpdfsdk_widgethandler.cpp b/fpdfsdk/cpdfsdk_widgethandler.cpp
index 23b4bc9..e1c5c9c 100644
--- a/fpdfsdk/cpdfsdk_widgethandler.cpp
+++ b/fpdfsdk/cpdfsdk_widgethandler.cpp
@@ -20,10 +20,6 @@
#include "fpdfsdk/cpdfsdk_widget.h"
#include "fpdfsdk/formfiller/cffl_formfiller.h"
-#ifdef PDF_ENABLE_XFA
-#include "fpdfsdk/fpdfxfa/cpdfxfa_context.h"
-#endif // PDF_ENABLE_XFA
-
CPDFSDK_WidgetHandler::CPDFSDK_WidgetHandler(
CPDFSDK_FormFillEnvironment* pFormFillEnv)
: m_pFormFillEnv(pFormFillEnv),
@@ -214,9 +210,8 @@
#ifdef PDF_ENABLE_XFA
CPDFSDK_PageView* pPageView = pAnnot->GetPageView();
- CPDFXFA_Context* pContext = static_cast<CPDFXFA_Context*>(
- pPageView->GetFormFillEnv()->GetDocExtension());
- if (pContext->GetFormType() == FormType::kXFAForeground) {
+ auto* pContext = pPageView->GetFormFillEnv()->GetDocExtension();
+ if (pContext->ContainsExtensionForegroundForm()) {
if (!pWidget->IsAppearanceValid() && !pWidget->GetValue().IsEmpty())
pWidget->ResetXFAAppearance(false);
}
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
index bc3a357..f91c400 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
@@ -209,6 +209,14 @@
m_FormType == FormType::kXFAForeground;
}
+bool CPDFXFA_Context::ContainsExtensionFullForm() const {
+ return m_FormType == FormType::kXFAFull;
+}
+
+bool CPDFXFA_Context::ContainsExtensionForegroundForm() const {
+ return m_FormType == FormType::kXFAForeground;
+}
+
void CPDFXFA_Context::ClearChangeMark() {
if (m_pFormFillEnv)
m_pFormFillEnv->ClearChangeMark();
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_context.h b/fpdfsdk/fpdfxfa/cpdfxfa_context.h
index d81d983..310b18f 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_context.h
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_context.h
@@ -58,6 +58,8 @@
void DeletePage(int page_index) override;
uint32_t GetUserPermissions() const override;
bool ContainsExtensionForm() const override;
+ bool ContainsExtensionFullForm() const override;
+ bool ContainsExtensionForegroundForm() const override;
// IFXA_AppProvider:
WideString GetLanguage() override;