diff --git a/fpdfsdk/cpdfsdk_document.cpp b/fpdfsdk/cpdfsdk_document.cpp
index 677dd83..78bcf49 100644
--- a/fpdfsdk/cpdfsdk_document.cpp
+++ b/fpdfsdk/cpdfsdk_document.cpp
@@ -162,7 +162,7 @@
 
 CPDFSDK_InterForm* CPDFSDK_Document::GetInterForm() {
   if (!m_pInterForm)
-    m_pInterForm = pdfium::MakeUnique<CPDFSDK_InterForm>(this);
+    m_pInterForm = pdfium::MakeUnique<CPDFSDK_InterForm>(GetEnv());
   return m_pInterForm.get();
 }
 
diff --git a/fpdfsdk/cpdfsdk_interform.cpp b/fpdfsdk/cpdfsdk_interform.cpp
index 1ed2a6c..2cbdae9 100644
--- a/fpdfsdk/cpdfsdk_interform.cpp
+++ b/fpdfsdk/cpdfsdk_interform.cpp
@@ -46,9 +46,10 @@
 #include "xfa/fxfa/xfa_ffwidgethandler.h"
 #endif  // PDF_ENABLE_XFA
 
-CPDFSDK_InterForm::CPDFSDK_InterForm(CPDFSDK_Document* pDocument)
-    : m_pDocument(pDocument),
-      m_pInterForm(new CPDF_InterForm(m_pDocument->GetPDFDocument())),
+CPDFSDK_InterForm::CPDFSDK_InterForm(CPDFSDK_FormFillEnvironment* pFormFillEnv)
+    : m_pFormFillEnv(pFormFillEnv),
+      m_pInterForm(new CPDF_InterForm(
+          m_pFormFillEnv->GetSDKDocument()->GetPDFDocument())),
 #ifdef PDF_ENABLE_XFA
       m_bXfaCalculate(TRUE),
       m_bXfaValidationsEnabled(TRUE),
@@ -98,19 +99,19 @@
     return nullptr;
 
   CPDF_Dictionary* pControlDict = pControl->GetWidget();
-  CPDF_Document* pDocument = m_pDocument->GetPDFDocument();
+  CPDF_Document* pDocument = m_pFormFillEnv->GetSDKDocument()->GetPDFDocument();
   CPDFSDK_PageView* pPage = nullptr;
 
   if (CPDF_Dictionary* pPageDict = pControlDict->GetDictFor("P")) {
     int nPageIndex = pDocument->GetPageIndex(pPageDict->GetObjNum());
     if (nPageIndex >= 0)
-      pPage = m_pDocument->GetPageView(nPageIndex);
+      pPage = m_pFormFillEnv->GetSDKDocument()->GetPageView(nPageIndex);
   }
 
   if (!pPage) {
     int nPageIndex = GetPageIndexByAnnotDict(pDocument, pControlDict);
     if (nPageIndex >= 0)
-      pPage = m_pDocument->GetPageView(nPageIndex);
+      pPage = m_pFormFillEnv->GetSDKDocument()->GetPageView(nPageIndex);
   }
 
   if (!pPage)
@@ -221,9 +222,7 @@
 #endif  // PDF_ENABLE_XFA
 
 void CPDFSDK_InterForm::OnCalculate(CPDF_FormField* pFormField) {
-  CPDFSDK_FormFillEnvironment* pEnv = m_pDocument->GetEnv();
-  ASSERT(pEnv);
-  if (!pEnv->IsJSInitiated())
+  if (!m_pFormFillEnv->IsJSInitiated())
     return;
 
   if (m_bBusy)
@@ -236,8 +235,8 @@
     return;
   }
 
-  IJS_Runtime* pRuntime = m_pDocument->GetJsRuntime();
-  pRuntime->SetReaderDocument(m_pDocument);
+  IJS_Runtime* pRuntime = m_pFormFillEnv->GetJSRuntime();
+  pRuntime->SetReaderDocument(m_pFormFillEnv->GetSDKDocument());
 
   int nSize = m_pInterForm->CountFieldsInCalculationOrder();
   for (int i = 0; i < nSize; i++) {
@@ -281,15 +280,13 @@
 CFX_WideString CPDFSDK_InterForm::OnFormat(CPDF_FormField* pFormField,
                                            FX_BOOL& bFormatted) {
   CFX_WideString sValue = pFormField->GetValue();
-  CPDFSDK_FormFillEnvironment* pEnv = m_pDocument->GetEnv();
-  ASSERT(pEnv);
-  if (!pEnv->IsJSInitiated()) {
+  if (!m_pFormFillEnv->IsJSInitiated()) {
     bFormatted = FALSE;
     return sValue;
   }
 
-  IJS_Runtime* pRuntime = m_pDocument->GetJsRuntime();
-  pRuntime->SetReaderDocument(m_pDocument);
+  IJS_Runtime* pRuntime = m_pFormFillEnv->GetJSRuntime();
+  pRuntime->SetReaderDocument(m_pFormFillEnv->GetSDKDocument());
 
   if (pFormField->GetFieldType() == FIELDTYPE_COMBOBOX &&
       pFormField->CountSelectedItems() > 0) {
@@ -342,14 +339,14 @@
     ASSERT(pFormCtrl);
 
     if (CPDFSDK_Widget* pWidget = GetWidget(pFormCtrl, false)) {
-      CPDFSDK_FormFillEnvironment* pEnv = m_pDocument->GetEnv();
       UnderlyingPageType* pPage = pWidget->GetUnderlyingPage();
-      CPDFSDK_PageView* pPageView = m_pDocument->GetPageView(pPage, false);
-      FX_RECT rcBBox =
-          pEnv->GetInteractiveFormFiller()->GetViewBBox(pPageView, pWidget);
+      CPDFSDK_PageView* pPageView =
+          m_pFormFillEnv->GetSDKDocument()->GetPageView(pPage, false);
+      FX_RECT rcBBox = m_pFormFillEnv->GetInteractiveFormFiller()->GetViewBBox(
+          pPageView, pWidget);
 
-      pEnv->Invalidate(pPage, rcBBox.left, rcBBox.top, rcBBox.right,
-                       rcBBox.bottom);
+      m_pFormFillEnv->Invalidate(pPage, rcBBox.left, rcBBox.top, rcBBox.right,
+                                 rcBBox.bottom);
     }
   }
 }
@@ -364,14 +361,14 @@
   if (!action.GetDict())
     return TRUE;
 
-  CPDFSDK_FormFillEnvironment* pEnv = m_pDocument->GetEnv();
-  CPDFSDK_ActionHandler* pActionHandler = pEnv->GetActionHander();
+  CPDFSDK_ActionHandler* pActionHandler = m_pFormFillEnv->GetActionHander();
   PDFSDK_FieldAction fa;
-  fa.bModifier = pEnv->IsCTRLKeyDown(0);
-  fa.bShift = pEnv->IsSHIFTKeyDown(0);
+  fa.bModifier = m_pFormFillEnv->IsCTRLKeyDown(0);
+  fa.bShift = m_pFormFillEnv->IsSHIFTKeyDown(0);
   fa.sValue = csValue;
   pActionHandler->DoAction_FieldJavaScript(action, CPDF_AAction::KeyStroke,
-                                           m_pDocument, pFormField, fa);
+                                           m_pFormFillEnv->GetSDKDocument(),
+                                           pFormField, fa);
   return fa.bRC;
 }
 
@@ -385,14 +382,14 @@
   if (!action.GetDict())
     return TRUE;
 
-  CPDFSDK_FormFillEnvironment* pEnv = m_pDocument->GetEnv();
-  CPDFSDK_ActionHandler* pActionHandler = pEnv->GetActionHander();
+  CPDFSDK_ActionHandler* pActionHandler = m_pFormFillEnv->GetActionHander();
   PDFSDK_FieldAction fa;
-  fa.bModifier = pEnv->IsCTRLKeyDown(0);
-  fa.bShift = pEnv->IsSHIFTKeyDown(0);
+  fa.bModifier = m_pFormFillEnv->IsCTRLKeyDown(0);
+  fa.bShift = m_pFormFillEnv->IsSHIFTKeyDown(0);
   fa.sValue = csValue;
   pActionHandler->DoAction_FieldJavaScript(action, CPDF_AAction::Validate,
-                                           m_pDocument, pFormField, fa);
+                                           m_pFormFillEnv->GetSDKDocument(),
+                                           pFormField, fa);
   return fa.bRC;
 }
 
@@ -459,8 +456,6 @@
     const std::vector<CPDF_FormField*>& fields,
     bool bIncludeOrExclude,
     bool bUrlEncoded) {
-  CPDFSDK_FormFillEnvironment* pEnv = m_pDocument->GetEnv();
-
   CFX_ByteTextBuf textBuf;
   ExportFieldsToFDFTextBuf(fields, bIncludeOrExclude, textBuf);
 
@@ -470,7 +465,7 @@
   if (bUrlEncoded && !FDFToURLEncodedData(pBuffer, nBufSize))
     return FALSE;
 
-  pEnv->JS_docSubmitForm(pBuffer, nBufSize, csDestination.c_str());
+  m_pFormFillEnv->JS_docSubmitForm(pBuffer, nBufSize, csDestination.c_str());
   return TRUE;
 }
 
@@ -525,7 +520,8 @@
     bool bIncludeOrExclude,
     CFX_ByteTextBuf& textBuf) {
   std::unique_ptr<CFDF_Document> pFDF(m_pInterForm->ExportToFDF(
-      m_pDocument->GetPath().AsStringC(), fields, bIncludeOrExclude, false));
+      m_pFormFillEnv->GetSDKDocument()->GetPath().AsStringC(), fields,
+      bIncludeOrExclude, false));
   return pFDF ? pFDF->WriteBuf(textBuf) : FALSE;
 }
 
@@ -539,11 +535,10 @@
   if (sDestination.IsEmpty())
     return FALSE;
 
-  if (!m_pDocument || !m_pInterForm)
+  if (!m_pFormFillEnv || !m_pFormFillEnv->GetSDKDocument() || !m_pInterForm)
     return FALSE;
 
-  CPDFSDK_FormFillEnvironment* pEnv = m_pDocument->GetEnv();
-  CFX_WideString wsPDFFilePath = m_pDocument->GetPath();
+  CFX_WideString wsPDFFilePath = m_pFormFillEnv->GetSDKDocument()->GetPath();
   CFDF_Document* pFDFDoc =
       m_pInterForm->ExportToFDF(wsPDFFilePath.AsStringC(), false);
   if (!pFDFDoc)
@@ -561,7 +556,7 @@
   if (bUrlEncoded && !FDFToURLEncodedData(pBuffer, nBufSize))
     return FALSE;
 
-  pEnv->JS_docSubmitForm(pBuffer, nBufSize, sDestination.c_str());
+  m_pFormFillEnv->JS_docSubmitForm(pBuffer, nBufSize, sDestination.c_str());
 
   if (bUrlEncoded)
     FX_Free(pBuffer);
@@ -570,8 +565,8 @@
 }
 
 FX_BOOL CPDFSDK_InterForm::ExportFormToFDFTextBuf(CFX_ByteTextBuf& textBuf) {
-  CFDF_Document* pFDF =
-      m_pInterForm->ExportToFDF(m_pDocument->GetPath().AsStringC(), false);
+  CFDF_Document* pFDF = m_pInterForm->ExportToFDF(
+      m_pFormFillEnv->GetSDKDocument()->GetPath().AsStringC(), false);
   if (!pFDF)
     return FALSE;
 
diff --git a/fpdfsdk/cpdfsdk_interform.h b/fpdfsdk/cpdfsdk_interform.h
index 617a106..f6848f3 100644
--- a/fpdfsdk/cpdfsdk_interform.h
+++ b/fpdfsdk/cpdfsdk_interform.h
@@ -20,7 +20,7 @@
 class CPDF_FormField;
 class CPDF_InterForm;
 class CPDF_Object;
-class CPDFSDK_Document;
+class CPDFSDK_FormFillEnvironment;
 class CPDFSDK_Widget;
 
 #ifdef PDF_ENABLE_XFA
@@ -30,11 +30,11 @@
 
 class CPDFSDK_InterForm : public IPDF_FormNotify {
  public:
-  explicit CPDFSDK_InterForm(CPDFSDK_Document* pDocument);
+  explicit CPDFSDK_InterForm(CPDFSDK_FormFillEnvironment* pFormFillEnv);
   ~CPDFSDK_InterForm() override;
 
   CPDF_InterForm* GetInterForm() const { return m_pInterForm.get(); }
-  CPDFSDK_Document* GetDocument() const { return m_pDocument; }
+  CPDFSDK_FormFillEnvironment* GetFormFillEnv() const { return m_pFormFillEnv; }
 
   FX_BOOL HighlightWidgets();
 
@@ -122,7 +122,7 @@
 
   using CPDFSDK_WidgetMap = std::map<CPDF_FormControl*, CPDFSDK_Widget*>;
 
-  CPDFSDK_Document* m_pDocument;
+  CPDFSDK_FormFillEnvironment* m_pFormFillEnv;  // Not owned.
   std::unique_ptr<CPDF_InterForm> m_pInterForm;
   CPDFSDK_WidgetMap m_Map;
 #ifdef PDF_ENABLE_XFA
diff --git a/fpdfsdk/cpdfsdk_widget.cpp b/fpdfsdk/cpdfsdk_widget.cpp
index 94555b7..0624b07 100644
--- a/fpdfsdk/cpdfsdk_widget.cpp
+++ b/fpdfsdk/cpdfsdk_widget.cpp
@@ -852,10 +852,10 @@
   uint8_t alpha = m_pInterForm->GetHighlightAlpha();
 
   CFX_FloatRect rcDevice;
-  ASSERT(m_pInterForm->GetDocument());
-  CPDFSDK_FormFillEnvironment* pEnv = m_pInterForm->GetDocument()->GetEnv();
+  CPDFSDK_FormFillEnvironment* pEnv = m_pInterForm->GetFormFillEnv();
   if (!pEnv)
     return;
+
   CFX_Matrix page2device;
   pPageView->GetCurrentMatrix(page2device);
   page2device.Transform(((FX_FLOAT)rc.left), ((FX_FLOAT)rc.bottom),
@@ -999,10 +999,7 @@
 
   CPDF_IconFit iconFit = pControl->GetIconFit();
 
-  CPDFSDK_Document* pDoc = m_pInterForm->GetDocument();
-  CPDFSDK_FormFillEnvironment* pEnv = pDoc->GetEnv();
-
-  CBA_FontMap font_map(this, pEnv->GetSysHandler());
+  CBA_FontMap font_map(this, m_pInterForm->GetFormFillEnv()->GetSysHandler());
   font_map.SetAPType("N");
 
   CFX_ByteString csAP =
@@ -1377,9 +1374,7 @@
   std::unique_ptr<CFX_Edit> pEdit(new CFX_Edit);
   pEdit->EnableRefresh(FALSE);
 
-  CPDFSDK_Document* pDoc = m_pInterForm->GetDocument();
-  CPDFSDK_FormFillEnvironment* pEnv = pDoc->GetEnv();
-  CBA_FontMap font_map(this, pEnv->GetSysHandler());
+  CBA_FontMap font_map(this, m_pInterForm->GetFormFillEnv()->GetSysHandler());
   pEdit->SetFontMap(&font_map);
 
   CFX_FloatRect rcEdit = rcClient;
@@ -1443,10 +1438,7 @@
   std::unique_ptr<CFX_Edit> pEdit(new CFX_Edit);
   pEdit->EnableRefresh(FALSE);
 
-  CPDFSDK_Document* pDoc = m_pInterForm->GetDocument();
-  CPDFSDK_FormFillEnvironment* pEnv = pDoc->GetEnv();
-
-  CBA_FontMap font_map(this, pEnv->GetSysHandler());
+  CBA_FontMap font_map(this, m_pInterForm->GetFormFillEnv()->GetSysHandler());
   pEdit->SetFontMap(&font_map);
 
   pEdit->SetPlateRect(CFX_FloatRect(rcClient.left, 0.0f, rcClient.right, 0.0f));
@@ -1530,10 +1522,7 @@
   std::unique_ptr<CFX_Edit> pEdit(new CFX_Edit);
   pEdit->EnableRefresh(FALSE);
 
-  CPDFSDK_Document* pDoc = m_pInterForm->GetDocument();
-  CPDFSDK_FormFillEnvironment* pEnv = pDoc->GetEnv();
-
-  CBA_FontMap font_map(this, pEnv->GetSysHandler());
+  CBA_FontMap font_map(this, m_pInterForm->GetFormFillEnv()->GetSysHandler());
   pEdit->SetFontMap(&font_map);
 
   CFX_FloatRect rcClient = GetClientRect();
diff --git a/fpdfsdk/javascript/Field.cpp b/fpdfsdk/javascript/Field.cpp
index fa2ac70..14e0692 100644
--- a/fpdfsdk/javascript/Field.cpp
+++ b/fpdfsdk/javascript/Field.cpp
@@ -295,9 +295,14 @@
     std::vector<CPDFSDK_Widget*> widgets;
     pInterForm->GetWidgets(pFormField, &widgets);
 
+    // TODO(dsinclair): Determine if all widgets share the same
+    // CPDFSDK_InterForm. If that's the case, we can move the code to
+    // |GetSDKDocument| out of the loop.
     for (CPDFSDK_Widget* pWidget : widgets) {
-      CPDFSDK_Document* pDoc = pWidget->GetInterForm()->GetDocument();
-      pDoc->UpdateAllViews(nullptr, pWidget);
+      pWidget->GetInterForm()
+          ->GetFormFillEnv()
+          ->GetSDKDocument()
+          ->UpdateAllViews(nullptr, pWidget);
     }
   }
 
@@ -330,8 +335,8 @@
 
     if (bRefresh) {
       CPDFSDK_InterForm* pInterForm = pWidget->GetInterForm();
-      CPDFSDK_Document* pDoc = pInterForm->GetDocument();
-      pDoc->UpdateAllViews(nullptr, pWidget);
+      pInterForm->GetFormFillEnv()->GetSDKDocument()->UpdateAllViews(nullptr,
+                                                                     pWidget);
     }
   }
 
