Fix static initializers.

R=tsepez@chromium.org

Review URL: https://codereview.chromium.org/1725303003 .
diff --git a/core/src/fpdfapi/fpdf_page/fpdf_page_parser.cpp b/core/src/fpdfapi/fpdf_page/fpdf_page_parser.cpp
index 465c74a..c47fe8b 100644
--- a/core/src/fpdfapi/fpdf_page/fpdf_page_parser.cpp
+++ b/core/src/fpdfapi/fpdf_page/fpdf_page_parser.cpp
@@ -340,112 +340,126 @@
   }
 }
 
-const CPDF_StreamContentParser::OpCodes CPDF_StreamContentParser::s_OpCodes = {
-    {FXBSTR_ID('"', 0, 0, 0),
-     &CPDF_StreamContentParser::Handle_NextLineShowText_Space},
-    {FXBSTR_ID('\'', 0, 0, 0),
-     &CPDF_StreamContentParser::Handle_NextLineShowText},
-    {FXBSTR_ID('B', 0, 0, 0), &CPDF_StreamContentParser::Handle_FillStrokePath},
-    {FXBSTR_ID('B', '*', 0, 0),
-     &CPDF_StreamContentParser::Handle_EOFillStrokePath},
-    {FXBSTR_ID('B', 'D', 'C', 0),
-     &CPDF_StreamContentParser::Handle_BeginMarkedContent_Dictionary},
-    {FXBSTR_ID('B', 'I', 0, 0), &CPDF_StreamContentParser::Handle_BeginImage},
-    {FXBSTR_ID('B', 'M', 'C', 0),
-     &CPDF_StreamContentParser::Handle_BeginMarkedContent},
-    {FXBSTR_ID('B', 'T', 0, 0), &CPDF_StreamContentParser::Handle_BeginText},
-    {FXBSTR_ID('C', 'S', 0, 0),
-     &CPDF_StreamContentParser::Handle_SetColorSpace_Stroke},
-    {FXBSTR_ID('D', 'P', 0, 0),
-     &CPDF_StreamContentParser::Handle_MarkPlace_Dictionary},
-    {FXBSTR_ID('D', 'o', 0, 0),
-     &CPDF_StreamContentParser::Handle_ExecuteXObject},
-    {FXBSTR_ID('E', 'I', 0, 0), &CPDF_StreamContentParser::Handle_EndImage},
-    {FXBSTR_ID('E', 'M', 'C', 0),
-     &CPDF_StreamContentParser::Handle_EndMarkedContent},
-    {FXBSTR_ID('E', 'T', 0, 0), &CPDF_StreamContentParser::Handle_EndText},
-    {FXBSTR_ID('F', 0, 0, 0), &CPDF_StreamContentParser::Handle_FillPathOld},
-    {FXBSTR_ID('G', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetGray_Stroke},
-    {FXBSTR_ID('I', 'D', 0, 0),
-     &CPDF_StreamContentParser::Handle_BeginImageData},
-    {FXBSTR_ID('J', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetLineCap},
-    {FXBSTR_ID('K', 0, 0, 0),
-     &CPDF_StreamContentParser::Handle_SetCMYKColor_Stroke},
-    {FXBSTR_ID('M', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetMiterLimit},
-    {FXBSTR_ID('M', 'P', 0, 0), &CPDF_StreamContentParser::Handle_MarkPlace},
-    {FXBSTR_ID('Q', 0, 0, 0),
-     &CPDF_StreamContentParser::Handle_RestoreGraphState},
-    {FXBSTR_ID('R', 'G', 0, 0),
-     &CPDF_StreamContentParser::Handle_SetRGBColor_Stroke},
-    {FXBSTR_ID('S', 0, 0, 0), &CPDF_StreamContentParser::Handle_StrokePath},
-    {FXBSTR_ID('S', 'C', 0, 0),
-     &CPDF_StreamContentParser::Handle_SetColor_Stroke},
-    {FXBSTR_ID('S', 'C', 'N', 0),
-     &CPDF_StreamContentParser::Handle_SetColorPS_Stroke},
-    {FXBSTR_ID('T', '*', 0, 0),
-     &CPDF_StreamContentParser::Handle_MoveToNextLine},
-    {FXBSTR_ID('T', 'D', 0, 0),
-     &CPDF_StreamContentParser::Handle_MoveTextPoint_SetLeading},
-    {FXBSTR_ID('T', 'J', 0, 0),
-     &CPDF_StreamContentParser::Handle_ShowText_Positioning},
-    {FXBSTR_ID('T', 'L', 0, 0),
-     &CPDF_StreamContentParser::Handle_SetTextLeading},
-    {FXBSTR_ID('T', 'c', 0, 0), &CPDF_StreamContentParser::Handle_SetCharSpace},
-    {FXBSTR_ID('T', 'd', 0, 0),
-     &CPDF_StreamContentParser::Handle_MoveTextPoint},
-    {FXBSTR_ID('T', 'f', 0, 0), &CPDF_StreamContentParser::Handle_SetFont},
-    {FXBSTR_ID('T', 'j', 0, 0), &CPDF_StreamContentParser::Handle_ShowText},
-    {FXBSTR_ID('T', 'm', 0, 0),
-     &CPDF_StreamContentParser::Handle_SetTextMatrix},
-    {FXBSTR_ID('T', 'r', 0, 0),
-     &CPDF_StreamContentParser::Handle_SetTextRenderMode},
-    {FXBSTR_ID('T', 's', 0, 0), &CPDF_StreamContentParser::Handle_SetTextRise},
-    {FXBSTR_ID('T', 'w', 0, 0), &CPDF_StreamContentParser::Handle_SetWordSpace},
-    {FXBSTR_ID('T', 'z', 0, 0), &CPDF_StreamContentParser::Handle_SetHorzScale},
-    {FXBSTR_ID('W', 0, 0, 0), &CPDF_StreamContentParser::Handle_Clip},
-    {FXBSTR_ID('W', '*', 0, 0), &CPDF_StreamContentParser::Handle_EOClip},
-    {FXBSTR_ID('b', 0, 0, 0),
-     &CPDF_StreamContentParser::Handle_CloseFillStrokePath},
-    {FXBSTR_ID('b', '*', 0, 0),
-     &CPDF_StreamContentParser::Handle_CloseEOFillStrokePath},
-    {FXBSTR_ID('c', 0, 0, 0), &CPDF_StreamContentParser::Handle_CurveTo_123},
-    {FXBSTR_ID('c', 'm', 0, 0), &CPDF_StreamContentParser::Handle_ConcatMatrix},
-    {FXBSTR_ID('c', 's', 0, 0),
-     &CPDF_StreamContentParser::Handle_SetColorSpace_Fill},
-    {FXBSTR_ID('d', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetDash},
-    {FXBSTR_ID('d', '0', 0, 0), &CPDF_StreamContentParser::Handle_SetCharWidth},
-    {FXBSTR_ID('d', '1', 0, 0),
-     &CPDF_StreamContentParser::Handle_SetCachedDevice},
-    {FXBSTR_ID('f', 0, 0, 0), &CPDF_StreamContentParser::Handle_FillPath},
-    {FXBSTR_ID('f', '*', 0, 0), &CPDF_StreamContentParser::Handle_EOFillPath},
-    {FXBSTR_ID('g', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetGray_Fill},
-    {FXBSTR_ID('g', 's', 0, 0),
-     &CPDF_StreamContentParser::Handle_SetExtendGraphState},
-    {FXBSTR_ID('h', 0, 0, 0), &CPDF_StreamContentParser::Handle_ClosePath},
-    {FXBSTR_ID('i', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetFlat},
-    {FXBSTR_ID('j', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetLineJoin},
-    {FXBSTR_ID('k', 0, 0, 0),
-     &CPDF_StreamContentParser::Handle_SetCMYKColor_Fill},
-    {FXBSTR_ID('l', 0, 0, 0), &CPDF_StreamContentParser::Handle_LineTo},
-    {FXBSTR_ID('m', 0, 0, 0), &CPDF_StreamContentParser::Handle_MoveTo},
-    {FXBSTR_ID('n', 0, 0, 0), &CPDF_StreamContentParser::Handle_EndPath},
-    {FXBSTR_ID('q', 0, 0, 0), &CPDF_StreamContentParser::Handle_SaveGraphState},
-    {FXBSTR_ID('r', 'e', 0, 0), &CPDF_StreamContentParser::Handle_Rectangle},
-    {FXBSTR_ID('r', 'g', 0, 0),
-     &CPDF_StreamContentParser::Handle_SetRGBColor_Fill},
-    {FXBSTR_ID('r', 'i', 0, 0),
-     &CPDF_StreamContentParser::Handle_SetRenderIntent},
-    {FXBSTR_ID('s', 0, 0, 0),
-     &CPDF_StreamContentParser::Handle_CloseStrokePath},
-    {FXBSTR_ID('s', 'c', 0, 0),
-     &CPDF_StreamContentParser::Handle_SetColor_Fill},
-    {FXBSTR_ID('s', 'c', 'n', 0),
-     &CPDF_StreamContentParser::Handle_SetColorPS_Fill},
-    {FXBSTR_ID('s', 'h', 0, 0), &CPDF_StreamContentParser::Handle_ShadeFill},
-    {FXBSTR_ID('v', 0, 0, 0), &CPDF_StreamContentParser::Handle_CurveTo_23},
-    {FXBSTR_ID('w', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetLineWidth},
-    {FXBSTR_ID('y', 0, 0, 0), &CPDF_StreamContentParser::Handle_CurveTo_13},
-};
+// static
+CPDF_StreamContentParser::OpCodes
+CPDF_StreamContentParser::InitializeOpCodes() {
+  return OpCodes({
+      {FXBSTR_ID('"', 0, 0, 0),
+       &CPDF_StreamContentParser::Handle_NextLineShowText_Space},
+      {FXBSTR_ID('\'', 0, 0, 0),
+       &CPDF_StreamContentParser::Handle_NextLineShowText},
+      {FXBSTR_ID('B', 0, 0, 0),
+       &CPDF_StreamContentParser::Handle_FillStrokePath},
+      {FXBSTR_ID('B', '*', 0, 0),
+       &CPDF_StreamContentParser::Handle_EOFillStrokePath},
+      {FXBSTR_ID('B', 'D', 'C', 0),
+       &CPDF_StreamContentParser::Handle_BeginMarkedContent_Dictionary},
+      {FXBSTR_ID('B', 'I', 0, 0), &CPDF_StreamContentParser::Handle_BeginImage},
+      {FXBSTR_ID('B', 'M', 'C', 0),
+       &CPDF_StreamContentParser::Handle_BeginMarkedContent},
+      {FXBSTR_ID('B', 'T', 0, 0), &CPDF_StreamContentParser::Handle_BeginText},
+      {FXBSTR_ID('C', 'S', 0, 0),
+       &CPDF_StreamContentParser::Handle_SetColorSpace_Stroke},
+      {FXBSTR_ID('D', 'P', 0, 0),
+       &CPDF_StreamContentParser::Handle_MarkPlace_Dictionary},
+      {FXBSTR_ID('D', 'o', 0, 0),
+       &CPDF_StreamContentParser::Handle_ExecuteXObject},
+      {FXBSTR_ID('E', 'I', 0, 0), &CPDF_StreamContentParser::Handle_EndImage},
+      {FXBSTR_ID('E', 'M', 'C', 0),
+       &CPDF_StreamContentParser::Handle_EndMarkedContent},
+      {FXBSTR_ID('E', 'T', 0, 0), &CPDF_StreamContentParser::Handle_EndText},
+      {FXBSTR_ID('F', 0, 0, 0), &CPDF_StreamContentParser::Handle_FillPathOld},
+      {FXBSTR_ID('G', 0, 0, 0),
+       &CPDF_StreamContentParser::Handle_SetGray_Stroke},
+      {FXBSTR_ID('I', 'D', 0, 0),
+       &CPDF_StreamContentParser::Handle_BeginImageData},
+      {FXBSTR_ID('J', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetLineCap},
+      {FXBSTR_ID('K', 0, 0, 0),
+       &CPDF_StreamContentParser::Handle_SetCMYKColor_Stroke},
+      {FXBSTR_ID('M', 0, 0, 0),
+       &CPDF_StreamContentParser::Handle_SetMiterLimit},
+      {FXBSTR_ID('M', 'P', 0, 0), &CPDF_StreamContentParser::Handle_MarkPlace},
+      {FXBSTR_ID('Q', 0, 0, 0),
+       &CPDF_StreamContentParser::Handle_RestoreGraphState},
+      {FXBSTR_ID('R', 'G', 0, 0),
+       &CPDF_StreamContentParser::Handle_SetRGBColor_Stroke},
+      {FXBSTR_ID('S', 0, 0, 0), &CPDF_StreamContentParser::Handle_StrokePath},
+      {FXBSTR_ID('S', 'C', 0, 0),
+       &CPDF_StreamContentParser::Handle_SetColor_Stroke},
+      {FXBSTR_ID('S', 'C', 'N', 0),
+       &CPDF_StreamContentParser::Handle_SetColorPS_Stroke},
+      {FXBSTR_ID('T', '*', 0, 0),
+       &CPDF_StreamContentParser::Handle_MoveToNextLine},
+      {FXBSTR_ID('T', 'D', 0, 0),
+       &CPDF_StreamContentParser::Handle_MoveTextPoint_SetLeading},
+      {FXBSTR_ID('T', 'J', 0, 0),
+       &CPDF_StreamContentParser::Handle_ShowText_Positioning},
+      {FXBSTR_ID('T', 'L', 0, 0),
+       &CPDF_StreamContentParser::Handle_SetTextLeading},
+      {FXBSTR_ID('T', 'c', 0, 0),
+       &CPDF_StreamContentParser::Handle_SetCharSpace},
+      {FXBSTR_ID('T', 'd', 0, 0),
+       &CPDF_StreamContentParser::Handle_MoveTextPoint},
+      {FXBSTR_ID('T', 'f', 0, 0), &CPDF_StreamContentParser::Handle_SetFont},
+      {FXBSTR_ID('T', 'j', 0, 0), &CPDF_StreamContentParser::Handle_ShowText},
+      {FXBSTR_ID('T', 'm', 0, 0),
+       &CPDF_StreamContentParser::Handle_SetTextMatrix},
+      {FXBSTR_ID('T', 'r', 0, 0),
+       &CPDF_StreamContentParser::Handle_SetTextRenderMode},
+      {FXBSTR_ID('T', 's', 0, 0),
+       &CPDF_StreamContentParser::Handle_SetTextRise},
+      {FXBSTR_ID('T', 'w', 0, 0),
+       &CPDF_StreamContentParser::Handle_SetWordSpace},
+      {FXBSTR_ID('T', 'z', 0, 0),
+       &CPDF_StreamContentParser::Handle_SetHorzScale},
+      {FXBSTR_ID('W', 0, 0, 0), &CPDF_StreamContentParser::Handle_Clip},
+      {FXBSTR_ID('W', '*', 0, 0), &CPDF_StreamContentParser::Handle_EOClip},
+      {FXBSTR_ID('b', 0, 0, 0),
+       &CPDF_StreamContentParser::Handle_CloseFillStrokePath},
+      {FXBSTR_ID('b', '*', 0, 0),
+       &CPDF_StreamContentParser::Handle_CloseEOFillStrokePath},
+      {FXBSTR_ID('c', 0, 0, 0), &CPDF_StreamContentParser::Handle_CurveTo_123},
+      {FXBSTR_ID('c', 'm', 0, 0),
+       &CPDF_StreamContentParser::Handle_ConcatMatrix},
+      {FXBSTR_ID('c', 's', 0, 0),
+       &CPDF_StreamContentParser::Handle_SetColorSpace_Fill},
+      {FXBSTR_ID('d', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetDash},
+      {FXBSTR_ID('d', '0', 0, 0),
+       &CPDF_StreamContentParser::Handle_SetCharWidth},
+      {FXBSTR_ID('d', '1', 0, 0),
+       &CPDF_StreamContentParser::Handle_SetCachedDevice},
+      {FXBSTR_ID('f', 0, 0, 0), &CPDF_StreamContentParser::Handle_FillPath},
+      {FXBSTR_ID('f', '*', 0, 0), &CPDF_StreamContentParser::Handle_EOFillPath},
+      {FXBSTR_ID('g', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetGray_Fill},
+      {FXBSTR_ID('g', 's', 0, 0),
+       &CPDF_StreamContentParser::Handle_SetExtendGraphState},
+      {FXBSTR_ID('h', 0, 0, 0), &CPDF_StreamContentParser::Handle_ClosePath},
+      {FXBSTR_ID('i', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetFlat},
+      {FXBSTR_ID('j', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetLineJoin},
+      {FXBSTR_ID('k', 0, 0, 0),
+       &CPDF_StreamContentParser::Handle_SetCMYKColor_Fill},
+      {FXBSTR_ID('l', 0, 0, 0), &CPDF_StreamContentParser::Handle_LineTo},
+      {FXBSTR_ID('m', 0, 0, 0), &CPDF_StreamContentParser::Handle_MoveTo},
+      {FXBSTR_ID('n', 0, 0, 0), &CPDF_StreamContentParser::Handle_EndPath},
+      {FXBSTR_ID('q', 0, 0, 0),
+       &CPDF_StreamContentParser::Handle_SaveGraphState},
+      {FXBSTR_ID('r', 'e', 0, 0), &CPDF_StreamContentParser::Handle_Rectangle},
+      {FXBSTR_ID('r', 'g', 0, 0),
+       &CPDF_StreamContentParser::Handle_SetRGBColor_Fill},
+      {FXBSTR_ID('r', 'i', 0, 0),
+       &CPDF_StreamContentParser::Handle_SetRenderIntent},
+      {FXBSTR_ID('s', 0, 0, 0),
+       &CPDF_StreamContentParser::Handle_CloseStrokePath},
+      {FXBSTR_ID('s', 'c', 0, 0),
+       &CPDF_StreamContentParser::Handle_SetColor_Fill},
+      {FXBSTR_ID('s', 'c', 'n', 0),
+       &CPDF_StreamContentParser::Handle_SetColorPS_Fill},
+      {FXBSTR_ID('s', 'h', 0, 0), &CPDF_StreamContentParser::Handle_ShadeFill},
+      {FXBSTR_ID('v', 0, 0, 0), &CPDF_StreamContentParser::Handle_CurveTo_23},
+      {FXBSTR_ID('w', 0, 0, 0), &CPDF_StreamContentParser::Handle_SetLineWidth},
+      {FXBSTR_ID('y', 0, 0, 0), &CPDF_StreamContentParser::Handle_CurveTo_13},
+  });
+}
 
 void CPDF_StreamContentParser::OnOperator(const FX_CHAR* op) {
   int i = 0;
@@ -459,6 +473,8 @@
     i++;
   }
 
+  static const OpCodes s_OpCodes = InitializeOpCodes();
+
   auto it = s_OpCodes.find(opid);
   if (it != s_OpCodes.end())
     (this->*it->second)();
diff --git a/core/src/fpdfapi/fpdf_page/pageint.h b/core/src/fpdfapi/fpdf_page/pageint.h
index a36b848..ec06187 100644
--- a/core/src/fpdfapi/fpdf_page/pageint.h
+++ b/core/src/fpdfapi/fpdf_page/pageint.h
@@ -154,7 +154,7 @@
  protected:
   using OpCodes =
       std::unordered_map<FX_DWORD, void (CPDF_StreamContentParser::*)()>;
-  static const OpCodes s_OpCodes;
+  static OpCodes InitializeOpCodes();
 
   void Handle_CloseFillStrokePath();
   void Handle_FillStrokePath();
diff --git a/fpdfsdk/include/fpdfxfa/fpdfxfa_util.h b/fpdfsdk/include/fpdfxfa/fpdfxfa_util.h
index 9678453..af69812 100644
--- a/fpdfsdk/include/fpdfxfa/fpdfxfa_util.h
+++ b/fpdfsdk/include/fpdfxfa/fpdfxfa_util.h
@@ -31,7 +31,7 @@
  protected:
   static void TimerProc(int32_t idEvent);
 
-  static std::vector<CFWL_TimerInfo*> s_TimerArray;
+  static std::vector<CFWL_TimerInfo*>* s_TimerArray;
   CPDFDoc_Environment* const m_pEnv;
 };
 
diff --git a/fpdfsdk/src/fpdfxfa/fpdfxfa_util.cpp b/fpdfsdk/src/fpdfxfa/fpdfxfa_util.cpp
index 03f1cfc..c2a0db0 100644
--- a/fpdfsdk/src/fpdfxfa/fpdfxfa_util.cpp
+++ b/fpdfsdk/src/fpdfxfa/fpdfxfa_util.cpp
@@ -8,7 +8,7 @@
 #include "fpdfsdk/include/fsdk_define.h"
 #include "fpdfsdk/include/fsdk_mgr.h"
 
-std::vector<CFWL_TimerInfo*> CXFA_FWLAdapterTimerMgr::s_TimerArray;
+std::vector<CFWL_TimerInfo*>* CXFA_FWLAdapterTimerMgr::s_TimerArray = nullptr;
 
 FWL_ERR CXFA_FWLAdapterTimerMgr::Start(IFWL_Timer* pTimer,
                                        FX_DWORD dwElapse,
@@ -18,8 +18,10 @@
     return FWL_ERR_Indefinite;
 
   uint32_t uIDEvent = m_pEnv->FFI_SetTimer(dwElapse, TimerProc);
-  s_TimerArray.push_back(new CFWL_TimerInfo(uIDEvent, pTimer));
-  hTimer = reinterpret_cast<FWL_HTIMER>(s_TimerArray.back());
+  if (!s_TimerArray)
+    s_TimerArray = new std::vector<CFWL_TimerInfo*>;
+  s_TimerArray->push_back(new CFWL_TimerInfo(uIDEvent, pTimer));
+  hTimer = reinterpret_cast<FWL_HTIMER>(s_TimerArray->back());
   return FWL_ERR_Succeeded;
 }
 
@@ -29,16 +31,22 @@
 
   CFWL_TimerInfo* pInfo = reinterpret_cast<CFWL_TimerInfo*>(hTimer);
   m_pEnv->FFI_KillTimer(pInfo->uIDEvent);
-  auto it = std::find(s_TimerArray.begin(), s_TimerArray.end(), pInfo);
-  if (it != s_TimerArray.end()) {
-    s_TimerArray.erase(it);
-    delete pInfo;
+  if (s_TimerArray) {
+    auto it = std::find(s_TimerArray->begin(), s_TimerArray->end(), pInfo);
+    if (it != s_TimerArray->end()) {
+      s_TimerArray->erase(it);
+      delete pInfo;
+    }
   }
   return FWL_ERR_Succeeded;
 }
 
+// static
 void CXFA_FWLAdapterTimerMgr::TimerProc(int32_t idEvent) {
-  for (CFWL_TimerInfo* pInfo : s_TimerArray) {
+  if (!s_TimerArray)
+    return;
+
+  for (CFWL_TimerInfo* pInfo : *s_TimerArray) {
     if (pInfo->uIDEvent == idEvent) {
       pInfo->pTimer->Run(reinterpret_cast<FWL_HTIMER>(pInfo));
       break;