diff --git a/core/fpdfapi/page/cpdf_annotcontext.cpp b/core/fpdfapi/page/cpdf_annotcontext.cpp
index 1078e46..ec3a7ff 100644
--- a/core/fpdfapi/page/cpdf_annotcontext.cpp
+++ b/core/fpdfapi/page/cpdf_annotcontext.cpp
@@ -13,10 +13,11 @@
 #include "third_party/base/ptr_util.h"
 
 CPDF_AnnotContext::CPDF_AnnotContext(CPDF_Dictionary* pAnnotDict,
-                                     CPDF_Page* pPage)
+                                     IPDF_Page* pPage)
     : m_pAnnotDict(pAnnotDict), m_pPage(pPage) {
   ASSERT(m_pAnnotDict);
   ASSERT(m_pPage);
+  ASSERT(m_pPage->AsPDFPage());
 }
 
 CPDF_AnnotContext::~CPDF_AnnotContext() = default;
@@ -30,6 +31,7 @@
   pStream->GetDict()->SetMatrixFor("Matrix", CFX_Matrix());
 
   m_pAnnotForm = pdfium::MakeUnique<CPDF_Form>(
-      m_pPage->GetDocument(), m_pPage->m_pResources.Get(), pStream);
+      m_pPage->GetDocument(), m_pPage->AsPDFPage()->m_pResources.Get(),
+      pStream);
   m_pAnnotForm->ParseContent();
 }
diff --git a/core/fpdfapi/page/cpdf_annotcontext.h b/core/fpdfapi/page/cpdf_annotcontext.h
index ee9f3fc..c3c23c4 100644
--- a/core/fpdfapi/page/cpdf_annotcontext.h
+++ b/core/fpdfapi/page/cpdf_annotcontext.h
@@ -14,12 +14,12 @@
 
 class CPDF_Dictionary;
 class CPDF_Form;
-class CPDF_Page;
 class CPDF_Stream;
+class IPDF_Page;
 
 class CPDF_AnnotContext {
  public:
-  CPDF_AnnotContext(CPDF_Dictionary* pAnnotDict, CPDF_Page* pPage);
+  CPDF_AnnotContext(CPDF_Dictionary* pAnnotDict, IPDF_Page* pPage);
   ~CPDF_AnnotContext();
 
   void SetForm(CPDF_Stream* pStream);
@@ -30,12 +30,12 @@
   CPDF_Dictionary* GetAnnotDict() const { return m_pAnnotDict.Get(); }
 
   // Never nullptr.
-  CPDF_Page* GetPage() const { return m_pPage.Get(); }
+  IPDF_Page* GetPage() const { return m_pPage.Get(); }
 
  private:
   std::unique_ptr<CPDF_Form> m_pAnnotForm;
   RetainPtr<CPDF_Dictionary> const m_pAnnotDict;
-  UnownedPtr<CPDF_Page> const m_pPage;
+  UnownedPtr<IPDF_Page> const m_pPage;
 };
 
 #endif  // CORE_FPDFAPI_PAGE_CPDF_ANNOTCONTEXT_H_
diff --git a/fpdfsdk/cpdfsdk_formfillenvironment.cpp b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
index 0f7f48c..fc479e6 100644
--- a/fpdfsdk/cpdfsdk_formfillenvironment.cpp
+++ b/fpdfsdk/cpdfsdk_formfillenvironment.cpp
@@ -759,23 +759,21 @@
   if (!m_pInfo || m_pInfo->version < 2 || !m_pInfo->FFI_OnFocusChange)
     return;
 
-  if ((*pAnnot)->AsXFAWidget()) {
-    // TODO(crbug.com/pdfium/1482): Handle XFA case.
+  // TODO(crbug.com/pdfium/1482): Handle XFA case.
+  if ((*pAnnot)->AsXFAWidget())
     return;
-  }
 
   CPDFSDK_PageView* pPageView = (*pAnnot)->GetPageView();
   if (!pPageView->IsValid())
     return;
 
-  CPDF_Page* cpdf_page = (*pAnnot)->GetPDFPage();
-  if (!cpdf_page)
+  IPDF_Page* page = (*pAnnot)->GetPage();
+  if (!page)
     return;
 
   CPDF_Dictionary* annot_dict = (*pAnnot)->GetPDFAnnot()->GetAnnotDict();
 
-  auto focused_annot =
-      pdfium::MakeUnique<CPDF_AnnotContext>(annot_dict, cpdf_page);
+  auto focused_annot = pdfium::MakeUnique<CPDF_AnnotContext>(annot_dict, page);
   FPDF_ANNOTATION fpdf_annot =
       FPDFAnnotationFromCPDFAnnotContext(focused_annot.get());
 
diff --git a/fpdfsdk/fpdf_annot.cpp b/fpdfsdk/fpdf_annot.cpp
index 44b2b0f..61956a6 100644
--- a/fpdfsdk/fpdf_annot.cpp
+++ b/fpdfsdk/fpdf_annot.cpp
@@ -6,6 +6,7 @@
 
 #include <memory>
 #include <utility>
+#include <vector>
 
 #include "constants/annotation_common.h"
 #include "core/fpdfapi/edit/cpdf_pagecontentgenerator.h"
@@ -295,7 +296,8 @@
   pDict->SetNewFor<CPDF_Name>(pdfium::annotation::kSubtype,
                               CPDF_Annot::AnnotSubtypeToString(
                                   static_cast<CPDF_Annot::Subtype>(subtype)));
-  auto pNewAnnot = pdfium::MakeUnique<CPDF_AnnotContext>(pDict.Get(), pPage);
+  auto pNewAnnot = pdfium::MakeUnique<CPDF_AnnotContext>(
+      pDict.Get(), IPDFPageFromFPDFPage(page));
 
   CPDF_Array* pAnnotList = pPage->GetDict()->GetArrayFor("Annots");
   if (!pAnnotList)
@@ -329,7 +331,8 @@
   if (!pDict)
     return nullptr;
 
-  auto pNewAnnot = pdfium::MakeUnique<CPDF_AnnotContext>(pDict, pPage);
+  auto pNewAnnot =
+      pdfium::MakeUnique<CPDF_AnnotContext>(pDict, IPDFPageFromFPDFPage(page));
 
   // Caller takes ownership.
   return FPDFAnnotationFromCPDFAnnotContext(pNewAnnot.release());
diff --git a/fpdfsdk/fpdf_formfill.cpp b/fpdfsdk/fpdf_formfill.cpp
index 3ddcd2a..96e4c20 100644
--- a/fpdfsdk/fpdf_formfill.cpp
+++ b/fpdfsdk/fpdf_formfill.cpp
@@ -594,11 +594,15 @@
   if (!cpdfsdk_annot)
     return true;
 
+  // TODO(crbug.com/pdfium/1482): Handle XFA case.
+  if (cpdfsdk_annot->AsXFAWidget())
+    return true;
+
   CPDFSDK_PageView* page_view = cpdfsdk_annot->GetPageView();
   if (!page_view->IsValid())
     return true;
 
-  CPDF_Page* page = cpdfsdk_annot->GetPDFPage();
+  IPDF_Page* page = cpdfsdk_annot->GetPage();
   if (!page)
     return true;
 
@@ -612,9 +616,7 @@
 }
 
 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
-FORM_SetFocusedAnnot(FPDF_FORMHANDLE handle,
-                     FPDF_PAGE page,
-                     FPDF_ANNOTATION annot) {
+FORM_SetFocusedAnnot(FPDF_FORMHANDLE handle, FPDF_ANNOTATION annot) {
   CPDFSDK_FormFillEnvironment* form_fill_env =
       CPDFSDKFormFillEnvironmentFromFPDFFormHandle(handle);
   if (!form_fill_env)
@@ -624,11 +626,8 @@
   if (!annot_context)
     return false;
 
-  IPDF_Page* pdf_page = IPDFPageFromFPDFPage(page);
-  if (!pdf_page)
-    return false;
-
-  CPDFSDK_PageView* page_view = form_fill_env->GetPageView(pdf_page, true);
+  CPDFSDK_PageView* page_view =
+      form_fill_env->GetPageView(annot_context->GetPage(), true);
   if (!page_view->IsValid())
     return false;
 
diff --git a/fpdfsdk/fpdf_formfill_embeddertest.cpp b/fpdfsdk/fpdf_formfill_embeddertest.cpp
index c4e6b48..d37a95e 100644
--- a/fpdfsdk/fpdf_formfill_embeddertest.cpp
+++ b/fpdfsdk/fpdf_formfill_embeddertest.cpp
@@ -701,9 +701,8 @@
   EXPECT_EQ(-1, page_index);
 
   // Validate that nullptr values are handled properly.
-  EXPECT_FALSE(FORM_SetFocusedAnnot(nullptr, pages[0], annot));
-  EXPECT_FALSE(FORM_SetFocusedAnnot(form_handle(), nullptr, annot));
-  EXPECT_FALSE(FORM_SetFocusedAnnot(form_handle(), pages[0], nullptr));
+  EXPECT_FALSE(FORM_SetFocusedAnnot(nullptr, annot));
+  EXPECT_FALSE(FORM_SetFocusedAnnot(form_handle(), nullptr));
 
   constexpr int kExpectedAnnotIndex = 2;
 
@@ -713,8 +712,7 @@
         FPDFPage_GetAnnot(pages[i], kExpectedAnnotIndex));
     ASSERT_TRUE(focused_annot);
 
-    ASSERT_TRUE(
-        FORM_SetFocusedAnnot(form_handle(), pages[i], focused_annot.get()));
+    ASSERT_TRUE(FORM_SetFocusedAnnot(form_handle(), focused_annot.get()));
 
     ASSERT_TRUE(FORM_GetFocusedAnnot(form_handle(), &page_index, &annot));
     EXPECT_EQ(kExpectedAnnotIndex, FPDFPage_GetAnnotIndex(pages[i], annot));
diff --git a/public/fpdf_formfill.h b/public/fpdf_formfill.h
index 9b6c4d4..84537e4 100644
--- a/public/fpdf_formfill.h
+++ b/public/fpdf_formfill.h
@@ -1606,7 +1606,6 @@
  * Parameters:
  *       handle      -   Handle to the form fill module, as returned by
  *                       FPDFDOC_InitFormFillEnvironment().
- *       page        -   Handle to a page.
  *       annot       -   Handle to an annotation.
  * Return Value:
  *       True indicates success; otherwise false.
@@ -1615,9 +1614,7 @@
  *       instead.
  */
 FPDF_EXPORT FPDF_BOOL FPDF_CALLCONV
-FORM_SetFocusedAnnot(FPDF_FORMHANDLE handle,
-                     FPDF_PAGE page,
-                     FPDF_ANNOTATION annot);
+FORM_SetFocusedAnnot(FPDF_FORMHANDLE handle, FPDF_ANNOTATION annot);
 
 // Form Field Types
 // The names of the defines are stable, but the specific values associated with
