Make CPDFXFA_Context::m_DocEnv into a pointer.

May allow for a different owner down the road.

Change-Id: I3fc7371458c1f760ddb0911b4f988010516ce5eb
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/71875
Commit-Queue: Tom Sepez <tsepez@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
index caad5da..8efac6f 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
@@ -16,6 +16,7 @@
 #include "core/fxcrt/fx_memory_wrappers.h"
 #include "fpdfsdk/cpdfsdk_formfillenvironment.h"
 #include "fpdfsdk/cpdfsdk_pageview.h"
+#include "fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h"
 #include "fpdfsdk/fpdfxfa/cpdfxfa_page.h"
 #include "fxjs/cjs_runtime.h"
 #include "fxjs/ijs_runtime.h"
@@ -83,7 +84,7 @@
     : m_pPDFDoc(pPDFDoc),
       m_pGCHeap(FXGC_CreateHeap()),
       m_pXFAApp(std::make_unique<CXFA_FFApp>(this)),
-      m_DocEnv(this) {
+      m_pDocEnv(std::make_unique<CPDFXFA_DocEnvironment>(this)) {
   ASSERT(m_pPDFDoc);
 }
 
@@ -122,8 +123,9 @@
     return false;
   }
 
-  m_pXFADoc = CXFA_FFDoc::CreateAndOpen(
-      m_pXFAApp.get(), &m_DocEnv, m_pPDFDoc.Get(), m_pGCHeap.get(), stream);
+  m_pXFADoc =
+      CXFA_FFDoc::CreateAndOpen(m_pXFAApp.get(), m_pDocEnv.get(),
+                                m_pPDFDoc.Get(), m_pGCHeap.get(), stream);
 
   if (!m_pXFADoc) {
     FXSYS_SetLastError(FPDF_ERR_XFALOAD);
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_context.h b/fpdfsdk/fpdfxfa/cpdfxfa_context.h
index cca4360..438564f 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_context.h
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_context.h
@@ -16,12 +16,12 @@
 #include "core/fxcrt/timerhandler_iface.h"
 #include "core/fxcrt/unowned_ptr.h"
 #include "fpdfsdk/cpdfsdk_formfillenvironment.h"
-#include "fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h"
 #include "fpdfsdk/fpdfxfa/cpdfxfa_page.h"
 #include "fxjs/gc/heap.h"
 #include "xfa/fxfa/cxfa_ffdoc.h"
 
 class CJS_Runtime;
+class CPDFXFA_DocEnvironment;
 
 enum LoadStatus {
   FXFA_LOADSTATUS_PRELOAD = 0,
@@ -120,8 +120,8 @@
   std::unique_ptr<CXFA_FFApp> const m_pXFAApp;
   std::vector<RetainPtr<CPDFXFA_Page>> m_XFAPageList;
 
-  // Must be destroyed before |m_pFormFillEnv|.
-  CPDFXFA_DocEnvironment m_DocEnv;
+  // Can't outlive |m_pFormFillEnv|.
+  std::unique_ptr<CPDFXFA_DocEnvironment> m_pDocEnv;
 
   std::unique_ptr<CXFA_FFDoc> m_pXFADoc;
   UnownedPtr<CXFA_FFDocView> m_pXFADocView;