diff --git a/fpdfsdk/cpdfsdk_pageview.cpp b/fpdfsdk/cpdfsdk_pageview.cpp
index 08ce6a3..144f6c4 100644
--- a/fpdfsdk/cpdfsdk_pageview.cpp
+++ b/fpdfsdk/cpdfsdk_pageview.cpp
@@ -120,22 +120,22 @@
 }
 
 #ifdef PDF_ENABLE_XFA
-CPDFSDK_Annot* CPDFSDK_PageView::AddAnnot(CXFA_FFWidget* pPDFAnnot) {
-  CPDFSDK_Annot* pSDKAnnot = GetAnnotByXFAWidget(pPDFAnnot);
+CPDFSDK_Annot* CPDFSDK_PageView::AddAnnotForFFWidget(CXFA_FFWidget* pWidget) {
+  CPDFSDK_Annot* pSDKAnnot = GetAnnotForFFWidget(pWidget);
   if (pSDKAnnot)
     return pSDKAnnot;
 
   CPDFSDK_AnnotHandlerMgr* pAnnotHandler = m_pFormFillEnv->GetAnnotHandlerMgr();
   std::unique_ptr<CPDFSDK_Annot> pNewAnnot =
-      pAnnotHandler->NewAnnotForXFA(pPDFAnnot, this);
+      pAnnotHandler->NewAnnotForXFA(pWidget, this);
   DCHECK(pNewAnnot);
   pSDKAnnot = pNewAnnot.get();
   m_SDKAnnotArray.push_back(std::move(pNewAnnot));
   return pSDKAnnot;
 }
 
-void CPDFSDK_PageView::DeleteAnnotForWidget(CXFA_FFWidget* pWidget) {
-  CPDFSDK_Annot* pAnnot = GetAnnotByXFAWidget(pWidget);
+void CPDFSDK_PageView::DeleteAnnotForFFWidget(CXFA_FFWidget* pWidget) {
+  CPDFSDK_Annot* pAnnot = GetAnnotForFFWidget(pWidget);
   if (!pAnnot)
     return;
 
@@ -199,7 +199,7 @@
 }
 
 #ifdef PDF_ENABLE_XFA
-CPDFSDK_Annot* CPDFSDK_PageView::GetAnnotByXFAWidget(CXFA_FFWidget* pWidget) {
+CPDFSDK_Annot* CPDFSDK_PageView::GetAnnotForFFWidget(CXFA_FFWidget* pWidget) {
   if (!pWidget)
     return nullptr;
 
diff --git a/fpdfsdk/cpdfsdk_pageview.h b/fpdfsdk/cpdfsdk_pageview.h
index da1532c..83460ed 100644
--- a/fpdfsdk/cpdfsdk_pageview.h
+++ b/fpdfsdk/cpdfsdk_pageview.h
@@ -53,9 +53,9 @@
   CPDFSDK_Annot* GetAnnotByDict(CPDF_Dictionary* pDict);
 
 #ifdef PDF_ENABLE_XFA
-  void DeleteAnnotForWidget(CXFA_FFWidget* pWidget);
-  CPDFSDK_Annot* AddAnnot(CXFA_FFWidget* pPDFAnnot);
-  CPDFSDK_Annot* GetAnnotByXFAWidget(CXFA_FFWidget* pWidget);
+  CPDFSDK_Annot* AddAnnotForFFWidget(CXFA_FFWidget* pWidget);
+  void DeleteAnnotForFFWidget(CXFA_FFWidget* pWidget);
+  CPDFSDK_Annot* GetAnnotForFFWidget(CXFA_FFWidget* pWidget);
   IPDF_Page* GetXFAPage();
 #endif  // PDF_ENABLE_XFA
 
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
index 8189130..34c549d 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.cpp
@@ -315,7 +315,7 @@
 }
 
 void CPDFXFA_DocEnvironment::WidgetPostAdd(CXFA_FFWidget* hWidget) {
-  if (m_pContext->GetFormType() != FormType::kXFAFull || !hWidget)
+  if (m_pContext->GetFormType() != FormType::kXFAFull)
     return;
 
   CXFA_FFPageView* pPageView = hWidget->GetPageView();
@@ -326,13 +326,12 @@
   if (!pXFAPage)
     return;
 
-  m_pContext->GetFormFillEnv()
-      ->GetOrCreatePageView(pXFAPage.Get())
-      ->AddAnnot(hWidget);
+  auto* formfill = m_pContext->GetFormFillEnv();
+  formfill->GetOrCreatePageView(pXFAPage.Get())->AddAnnotForFFWidget(hWidget);
 }
 
 void CPDFXFA_DocEnvironment::WidgetPreRemove(CXFA_FFWidget* hWidget) {
-  if (m_pContext->GetFormType() != FormType::kXFAFull || !hWidget)
+  if (m_pContext->GetFormType() != FormType::kXFAFull)
     return;
 
   CXFA_FFPageView* pPageView = hWidget->GetPageView();
@@ -345,7 +344,7 @@
 
   CPDFSDK_PageView* pSdkPageView =
       m_pContext->GetFormFillEnv()->GetOrCreatePageView(pXFAPage.Get());
-  pSdkPageView->DeleteAnnotForWidget(hWidget);
+  pSdkPageView->DeleteAnnotForFFWidget(hWidget);
 }
 
 int32_t CPDFXFA_DocEnvironment::CountPages(const CXFA_FFDoc* hDoc) const {
@@ -563,7 +562,7 @@
     if (!pPageView)
       continue;
 
-    ObservedPtr<CPDFSDK_Annot> pAnnot(pPageView->GetAnnotByXFAWidget(hWidget));
+    ObservedPtr<CPDFSDK_Annot> pAnnot(pPageView->GetAnnotForFFWidget(hWidget));
     if (pAnnot) {
       m_pContext->GetFormFillEnv()->SetFocusAnnot(pAnnot);
       break;
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
index d5881d9..f5dd962 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_page.cpp
@@ -227,7 +227,7 @@
   if (!pWidgetIterator)
     return nullptr;
 
-  return pSDKAnnot->GetPageView()->GetAnnotByXFAWidget(
+  return pSDKAnnot->GetPageView()->GetAnnotForFFWidget(
       pWidgetIterator->MoveToNext());
 }
 
@@ -237,7 +237,7 @@
   if (!pWidgetIterator)
     return nullptr;
 
-  return pSDKAnnot->GetPageView()->GetAnnotByXFAWidget(
+  return pSDKAnnot->GetPageView()->GetAnnotForFFWidget(
       pWidgetIterator->MoveToPrevious());
 }
 
@@ -248,7 +248,7 @@
   if (!pWidgetIterator)
     return nullptr;
 
-  return page_view->GetAnnotByXFAWidget(pWidgetIterator->MoveToFirst());
+  return page_view->GetAnnotForFFWidget(pWidgetIterator->MoveToFirst());
 }
 
 CPDFSDK_Annot* CPDFXFA_Page::GetLastXFAAnnot(
@@ -258,7 +258,7 @@
   if (!pWidgetIterator)
     return nullptr;
 
-  return page_view->GetAnnotByXFAWidget(pWidgetIterator->MoveToLast());
+  return page_view->GetAnnotForFFWidget(pWidgetIterator->MoveToLast());
 }
 
 int CPDFXFA_Page::HasFormFieldAtPoint(const CFX_PointF& point) const {
diff --git a/xfa/fxfa/cxfa_ffdoc.h b/xfa/fxfa/cxfa_ffdoc.h
index d108cc3..2551562 100644
--- a/xfa/fxfa/cxfa_ffdoc.h
+++ b/xfa/fxfa/cxfa_ffdoc.h
@@ -84,8 +84,10 @@
     virtual void OnPageViewEvent(CXFA_FFPageView* pPageView,
                                  PageViewEvent eEvent) = 0;
 
+    // Caller must not pass in nullptr.
     virtual void WidgetPostAdd(CXFA_FFWidget* hWidget) = 0;
     virtual void WidgetPreRemove(CXFA_FFWidget* hWidget) = 0;
+
     virtual int32_t CountPages(const CXFA_FFDoc* hDoc) const = 0;
     virtual int32_t GetCurrentPage(const CXFA_FFDoc* hDoc) const = 0;
     virtual void SetCurrentPage(CXFA_FFDoc* hDoc, int32_t iCurPage) = 0;
