Convert CPDFSDK_InterForm to take a CPDFSDK_FormFillEnvironment

This CL removes CPDFSDK_Document from CPDFSDK_InterForm and has it work with
a CPDFSDK_FormFillEnvironment.

Review-Url: https://codereview.chromium.org/2397723005
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;