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: