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;