Remove bool argument from CPDFSDK_FormFillEnvironment::GetPageView()
Split into a GetOrCreate() method that never returns null, and a
Get() method that may return null.
Change-Id: If79c60e40da79cbf9c86a14bc5987847c8338fed
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/81330
Auto-Submit: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/cpdfsdk_baannothandler_embeddertest.cpp b/fpdfsdk/cpdfsdk_baannothandler_embeddertest.cpp
index 245d500..f402e3c 100644
--- a/fpdfsdk/cpdfsdk_baannothandler_embeddertest.cpp
+++ b/fpdfsdk/cpdfsdk_baannothandler_embeddertest.cpp
@@ -34,7 +34,7 @@
CPDFSDKFormFillEnvironmentFromFPDFFormHandle(form_handle());
ASSERT_TRUE(m_pFormFillEnv);
m_pPageView =
- m_pFormFillEnv->GetPageView(IPDFPageFromFPDFPage(m_page), true);
+ m_pFormFillEnv->GetOrCreatePageView(IPDFPageFromFPDFPage(m_page));
ASSERT_TRUE(m_pPageView);
CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr =
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.cpp b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
index 427fb27..fd6dffc 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.cpp
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
@@ -131,7 +131,7 @@
#ifdef PDF_ENABLE_V8
CPDFSDK_PageView* CPDFSDK_FormFillEnvironment::GetCurrentView() {
IPDF_Page* pPage = IPDFPageFromFPDFPage(GetCurrentPage());
- return pPage ? GetPageView(pPage, true) : nullptr;
+ return pPage ? GetOrCreatePageView(pPage) : nullptr;
}
FPDF_PAGE CPDFSDK_FormFillEnvironment::GetCurrentPage() const {
@@ -589,15 +589,11 @@
}
}
-CPDFSDK_PageView* CPDFSDK_FormFillEnvironment::GetPageView(
- IPDF_Page* pUnderlyingPage,
- bool renew) {
- auto it = m_PageMap.find(pUnderlyingPage);
- if (it != m_PageMap.end())
- return it->second.get();
-
- if (!renew)
- return nullptr;
+CPDFSDK_PageView* CPDFSDK_FormFillEnvironment::GetOrCreatePageView(
+ IPDF_Page* pUnderlyingPage) {
+ CPDFSDK_PageView* pExisting = GetPageView(pUnderlyingPage);
+ if (pExisting)
+ return pExisting;
auto pNew = std::make_unique<CPDFSDK_PageView>(this, pUnderlyingPage);
CPDFSDK_PageView* pPageView = pNew.get();
@@ -608,13 +604,15 @@
return pPageView;
}
+CPDFSDK_PageView* CPDFSDK_FormFillEnvironment::GetPageView(
+ IPDF_Page* pUnderlyingPage) {
+ auto it = m_PageMap.find(pUnderlyingPage);
+ return it != m_PageMap.end() ? it->second.get() : nullptr;
+}
+
CPDFSDK_PageView* CPDFSDK_FormFillEnvironment::GetPageViewAtIndex(int nIndex) {
IPDF_Page* pTempPage = GetPage(nIndex);
- if (!pTempPage)
- return nullptr;
-
- auto it = m_PageMap.find(pTempPage);
- return it != m_PageMap.end() ? it->second.get() : nullptr;
+ return pTempPage ? GetPageView(pTempPage) : nullptr;
}
void CPDFSDK_FormFillEnvironment::ProcJavascriptAction() {
@@ -679,7 +677,7 @@
m_PageMap.erase(it);
}
-IPDF_Page* CPDFSDK_FormFillEnvironment::GetPage(int nIndex) {
+IPDF_Page* CPDFSDK_FormFillEnvironment::GetPage(int nIndex) const {
if (!m_pInfo || !m_pInfo->FFI_GetPage)
return nullptr;
return IPDFPageFromFPDFPage(m_pInfo->FFI_GetPage(
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.h b/fpdfsdk/cpdfsdk_formfillenvironment.h
index 78a35f0..d713eed 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.h
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.h
@@ -66,9 +66,9 @@
bool IsSelectionImplemented() const override;
void SetCursor(CursorStyle nCursorType) override;
- CPDFSDK_PageView* GetPageView(IPDF_Page* pUnderlyingPage, bool renew);
+ CPDFSDK_PageView* GetOrCreatePageView(IPDF_Page* pUnderlyingPage);
+ CPDFSDK_PageView* GetPageView(IPDF_Page* pUnderlyingPage);
CPDFSDK_PageView* GetPageViewAtIndex(int nIndex);
-
void RemovePageView(IPDF_Page* pUnderlyingPage);
void UpdateAllViews(CPDFSDK_PageView* pSender, CPDFSDK_Annot* pAnnot);
@@ -218,7 +218,7 @@
CPDFSDK_InteractiveForm* GetInteractiveForm(); // Creates if not present.
private:
- IPDF_Page* GetPage(int nIndex);
+ IPDF_Page* GetPage(int nIndex) const;
void SendOnFocusChange(ObservedPtr<CPDFSDK_Annot>* pAnnot);
UnownedPtr<FPDF_FORMFILLINFO> const m_pInfo;
diff --git a/fpdfsdk/cpdfsdk_interactiveform.cpp b/fpdfsdk/cpdfsdk_interactiveform.cpp
index a5dec66..289520d 100644
--- a/fpdfsdk/cpdfsdk_interactiveform.cpp
+++ b/fpdfsdk/cpdfsdk_interactiveform.cpp
@@ -338,8 +338,8 @@
continue;
IPDF_Page* pPage = pWidget->GetPage();
- FX_RECT rect = formfiller->GetViewBBox(
- m_pFormFillEnv->GetPageView(pPage, false), pWidget);
+ FX_RECT rect =
+ formfiller->GetViewBBox(m_pFormFillEnv->GetPageView(pPage), pWidget);
m_pFormFillEnv->Invalidate(pPage, rect);
}
}
diff --git a/fpdfsdk/formfiller/cffl_formfield.cpp b/fpdfsdk/formfiller/cffl_formfield.cpp
index 263e8ec..187ec43 100644
--- a/fpdfsdk/formfiller/cffl_formfield.cpp
+++ b/fpdfsdk/formfiller/cffl_formfield.cpp
@@ -258,8 +258,9 @@
void CFFL_FormField::SetFocusForAnnot(CPDFSDK_Annot* pAnnot, uint32_t nFlag) {
CPDFSDK_Widget* pWidget = ToCPDFSDKWidget(pAnnot);
IPDF_Page* pPage = pWidget->GetPage();
- CPDFSDK_PageView* pPageView = m_pFormFillEnv->GetPageView(pPage, true);
- if (CPWL_Wnd* pWnd = CreateOrUpdatePWLWindow(pPageView))
+ CPDFSDK_PageView* pPageView = m_pFormFillEnv->GetOrCreatePageView(pPage);
+ CPWL_Wnd* pWnd = CreateOrUpdatePWLWindow(pPageView);
+ if (pWnd)
pWnd->SetFocus();
m_bValid = true;
@@ -271,7 +272,7 @@
return;
CPDFSDK_PageView* pPageView =
- m_pFormFillEnv->GetPageView(m_pWidget->GetPage(), false);
+ m_pFormFillEnv->GetPageView(m_pWidget->GetPage());
if (!pPageView || !CommitData(pPageView, nFlag))
return;
if (CPWL_Wnd* pWnd = GetPWLWindow(pPageView))
@@ -428,7 +429,7 @@
CPDFSDK_PageView* CFFL_FormField::GetCurPageView() {
IPDF_Page* pPage = m_pWidget->GetPage();
- return m_pFormFillEnv->GetPageView(pPage, true);
+ return m_pFormFillEnv->GetOrCreatePageView(pPage);
}
CFX_FloatRect CFFL_FormField::GetFocusBox(CPDFSDK_PageView* pPageView) {
diff --git a/fpdfsdk/fpdf_formfill.cpp b/fpdfsdk/fpdf_formfill.cpp
index c612885..04b6606 100644
--- a/fpdfsdk/fpdf_formfill.cpp
+++ b/fpdfsdk/fpdf_formfill.cpp
@@ -169,7 +169,7 @@
CPDFSDK_FormFillEnvironment* pFormFillEnv =
CPDFSDKFormFillEnvironmentFromFPDFFormHandle(hHandle);
- return pFormFillEnv ? pFormFillEnv->GetPageView(pPage, true) : nullptr;
+ return pFormFillEnv ? pFormFillEnv->GetOrCreatePageView(pPage) : nullptr;
}
void FFLCommon(FPDF_FORMHANDLE hHandle,
@@ -646,16 +646,16 @@
return false;
CPDFSDK_PageView* page_view =
- form_fill_env->GetPageView(annot_context->GetPage(), true);
+ form_fill_env->GetOrCreatePageView(annot_context->GetPage());
if (!page_view->IsValid())
return false;
CPDF_Dictionary* annot_dict = annot_context->GetAnnotDict();
-
ObservedPtr<CPDFSDK_Annot> cpdfsdk_annot(
page_view->GetAnnotByDict(annot_dict));
if (!cpdfsdk_annot)
return false;
+
return form_fill_env->SetFocusAnnot(&cpdfsdk_annot);
}
@@ -735,7 +735,7 @@
if (!pPage)
return;
- CPDFSDK_PageView* pPageView = pFormFillEnv->GetPageView(pPage, false);
+ CPDFSDK_PageView* pPageView = pFormFillEnv->GetPageView(pPage);
if (pPageView) {
pPageView->SetValid(false);
// RemovePageView() takes care of the delete for us.
@@ -793,7 +793,7 @@
if (!pPDFPage)
return;
- if (!pFormFillEnv->GetPageView(pPage, false))
+ if (!pFormFillEnv->GetPageView(pPage))
return;
CPDFSDK_ActionHandler* pActionHandler = pFormFillEnv->GetActionHandler();
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
index 38011c5..6990b4e 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
@@ -330,7 +330,7 @@
return;
m_pContext->GetFormFillEnv()
- ->GetPageView(pXFAPage.Get(), true)
+ ->GetOrCreatePageView(pXFAPage.Get())
->AddAnnot(hWidget);
}
@@ -347,7 +347,7 @@
return;
CPDFSDK_PageView* pSdkPageView =
- m_pContext->GetFormFillEnv()->GetPageView(pXFAPage.Get(), true);
+ m_pContext->GetFormFillEnv()->GetOrCreatePageView(pXFAPage.Get());
CPDFSDK_Annot* pAnnot = pSdkPageView->GetAnnotByXFAWidget(hWidget);
if (pAnnot)
pSdkPageView->DeleteAnnot(pAnnot);
diff --git a/fxjs/cjs_document.cpp b/fxjs/cjs_document.cpp
index ccfdc36..d84c11c 100644
--- a/fxjs/cjs_document.cpp
+++ b/fxjs/cjs_document.cpp
@@ -490,7 +490,7 @@
// If there is currently no pageview associated with the page being used
// do not create one. We may be in the process of tearing down the document
// and creating a new pageview at this point will cause bad things.
- CPDFSDK_PageView* pPageView = m_pFormFillEnv->GetPageView(pPage, false);
+ CPDFSDK_PageView* pPageView = m_pFormFillEnv->GetPageView(pPage);
if (!pPageView)
continue;
diff --git a/fxjs/cjs_field.cpp b/fxjs/cjs_field.cpp
index b1ac511..5b5d525 100644
--- a/fxjs/cjs_field.cpp
+++ b/fxjs/cjs_field.cpp
@@ -2507,15 +2507,13 @@
IPDF_Page* pPage = IPDFPageFromFPDFPage(m_pFormFillEnv->GetCurrentPage());
if (!pPage)
return CJS_Result::Failure(JSMessage::kBadObjectError);
- if (CPDFSDK_PageView* pCurPageView =
- m_pFormFillEnv->GetPageView(pPage, true)) {
- for (int32_t i = 0; i < nCount; i++) {
- if (CPDFSDK_Widget* pTempWidget =
- pForm->GetWidget(pFormField->GetControl(i))) {
- if (pTempWidget->GetPDFPage() == pCurPageView->GetPDFPage()) {
- pWidget = pTempWidget;
- break;
- }
+ CPDFSDK_PageView* pCurPageView = m_pFormFillEnv->GetOrCreatePageView(pPage);
+ for (int32_t i = 0; i < nCount; i++) {
+ if (CPDFSDK_Widget* pTempWidget =
+ pForm->GetWidget(pFormField->GetControl(i))) {
+ if (pTempWidget->GetPDFPage() == pCurPageView->GetPDFPage()) {
+ pWidget = pTempWidget;
+ break;
}
}
}