Fix some layering between fpdfsdk and fxbarcode.
Add intermediate initialization and destruction functions. The ulterior
motive is that there may be xfa/fgas singletons down the road that can
be managed by these functions without making the top-level fpdfsdk/
layer have new dependencies.
Change-Id: Id514c8d5dbec5750131fac974eeea8718f6fcaf8
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/73311
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Tom Sepez <tsepez@chromium.org>
diff --git a/fpdfsdk/BUILD.gn b/fpdfsdk/BUILD.gn
index 93cfe5c..20a925a 100644
--- a/fpdfsdk/BUILD.gn
+++ b/fpdfsdk/BUILD.gn
@@ -98,7 +98,6 @@
if (pdf_enable_xfa) {
deps += [
- "../fxbarcode",
"../xfa/fxfa",
"../xfa/fxfa/parser",
"fpdfxfa",
diff --git a/fpdfsdk/DEPS b/fpdfsdk/DEPS
index 5edee08..733e072 100644
--- a/fpdfsdk/DEPS
+++ b/fpdfsdk/DEPS
@@ -4,7 +4,6 @@
'+public',
'+v8',
'+xfa/fwl',
- '+fxbarcode',
'+xfa/fxfa',
'+xfa/fxgraphics',
]
diff --git a/fpdfsdk/fpdf_view.cpp b/fpdfsdk/fpdf_view.cpp
index 260a20d..4fff57c 100644
--- a/fpdfsdk/fpdf_view.cpp
+++ b/fpdfsdk/fpdf_view.cpp
@@ -58,7 +58,6 @@
#ifdef PDF_ENABLE_XFA
#include "fpdfsdk/fpdfxfa/cpdfxfa_context.h"
#include "fpdfsdk/fpdfxfa/cpdfxfa_page.h"
-#include "fxbarcode/BC_Library.h"
#endif // PDF_ENABLE_XFA
#if defined(OS_WIN)
@@ -176,8 +175,9 @@
CPDF_PageModule::Create();
#ifdef PDF_ENABLE_XFA
- BC_Library_Init();
+ CPDFXFA_ModuleInit();
#endif // PDF_ENABLE_XFA
+
if (config && config->version >= 2) {
void* platform = config->version >= 3 ? config->m_pPlatform : nullptr;
IJS_Runtime::Initialize(config->m_v8EmbedderSlot, config->m_pIsolate,
@@ -191,7 +191,7 @@
return;
#ifdef PDF_ENABLE_XFA
- BC_Library_Destroy();
+ CPDFXFA_ModuleDestroy();
#endif // PDF_ENABLE_XFA
CPDF_PageModule::Destroy();
diff --git a/fpdfsdk/fpdfxfa/BUILD.gn b/fpdfsdk/fpdfxfa/BUILD.gn
index 56f2c00..b7a6bc4 100644
--- a/fpdfsdk/fpdfxfa/BUILD.gn
+++ b/fpdfsdk/fpdfxfa/BUILD.gn
@@ -26,6 +26,7 @@
"../../core/fpdfapi/parser",
"../../core/fpdfapi/render",
"../../core/fxcrt",
+ "../../fxbarcode",
"../../fxjs",
"../../xfa/fwl",
"../../xfa/fxfa",
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp b/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
index ce5cc88..947a253 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_context.cpp
@@ -21,6 +21,7 @@
#include "fpdfsdk/cpdfsdk_pageview.h"
#include "fpdfsdk/fpdfxfa/cpdfxfa_docenvironment.h"
#include "fpdfsdk/fpdfxfa/cpdfxfa_page.h"
+#include "fxbarcode/BC_Library.h"
#include "fxjs/cjs_runtime.h"
#include "fxjs/ijs_runtime.h"
#include "public/fpdf_formfill.h"
@@ -84,6 +85,14 @@
} // namespace
+void CPDFXFA_ModuleInit() {
+ BC_Library_Init();
+}
+
+void CPDFXFA_ModuleDestroy() {
+ BC_Library_Destroy();
+}
+
CPDFXFA_Context::CPDFXFA_Context(CPDF_Document* pPDFDoc)
: m_pPDFDoc(pPDFDoc),
m_pDocEnv(std::make_unique<CPDFXFA_DocEnvironment>(this)),
diff --git a/fpdfsdk/fpdfxfa/cpdfxfa_context.h b/fpdfsdk/fpdfxfa/cpdfxfa_context.h
index cb5461c..a64ac69 100644
--- a/fpdfsdk/fpdfxfa/cpdfxfa_context.h
+++ b/fpdfsdk/fpdfxfa/cpdfxfa_context.h
@@ -32,6 +32,10 @@
FXFA_LOADSTATUS_CLOSING,
};
+// Per-process initializations.
+void CPDFXFA_ModuleInit();
+void CPDFXFA_ModuleDestroy();
+
class CPDFXFA_Context final : public CPDF_Document::Extension,
public IXFA_AppProvider {
public: