Merge to XFA: Remove CJS_RuntimeFactory

New edits in:
  fpdfsdk/include/fpdfxfa/fpdfxfa_app.h
  fpdfsdk/include/javascript/IJavaScript.h
  fpdfsdk/src/fpdfxfa/fpdfxfa_app.cpp

(cherry picked from commit bca779d0957965eb2ebfad5479e0894844749626)
Original Review URL: https://codereview.chromium.org/1360523004 .

R=thestig@chromium.org

Review URL: https://codereview.chromium.org/1348393007 .
diff --git a/fpdfsdk/include/fpdfxfa/fpdfxfa_app.h b/fpdfsdk/include/fpdfxfa/fpdfxfa_app.h
index bf96993..49825c3 100644
--- a/fpdfsdk/include/fpdfxfa/fpdfxfa_app.h
+++ b/fpdfsdk/include/fpdfxfa/fpdfxfa_app.h
@@ -8,7 +8,6 @@
 #define FPDFXFA_APP_H_

 

 class IFXJS_Runtime;

-class CJS_RuntimeFactory;

 

 class CPDFXFA_App : public IXFA_AppProvider {

  public:

@@ -28,8 +27,6 @@
   void ReleaseRuntime();

   FX_BOOL InitRuntime(FX_BOOL bReset = FALSE);

 

-  CJS_RuntimeFactory* GetRuntimeFactory() { return m_pJSRuntimeFactory; }

-

   // IFXA_AppProvider:

   void GetAppType(CFX_WideString& wsAppType) override;

   void SetAppType(const CFX_WideStringC& wsAppType) override;

@@ -89,7 +86,6 @@
   IXFA_FontMgr* m_pFontMgr;

   FXJSE_HRUNTIME m_hJSERuntime;

   IFXJS_Runtime* m_pJSRuntime;

-  CJS_RuntimeFactory* m_pJSRuntimeFactory;

   CFX_WideString m_csAppType;

 };

 

diff --git a/fpdfsdk/include/fsdk_mgr.h b/fpdfsdk/include/fsdk_mgr.h
index c4879aa..b76b16b 100644
--- a/fpdfsdk/include/fsdk_mgr.h
+++ b/fpdfsdk/include/fsdk_mgr.h
@@ -24,7 +24,6 @@
 #include "javascript/IJavaScript.h"
 
 class CFFL_IFormFiller;
-class CJS_RuntimeFactory;
 class CPDFSDK_ActionHandler;
 class CPDFSDK_Annot;
 class CPDFSDK_Document;
@@ -469,7 +468,7 @@
  private:
   CPDFSDK_AnnotHandlerMgr* m_pAnnotHandlerMgr;
   CPDFSDK_ActionHandler* m_pActionHandler;
-  IFXJS_Runtime* m_pJSRuntime;
+  nonstd::unique_ptr<IFXJS_Runtime> m_pJSRuntime;
   FPDF_FORMFILLINFO* const m_pInfo;
   CPDFSDK_Document* m_pSDKDoc;
   CPDFXFA_Document* const m_pXFADoc;
diff --git a/fpdfsdk/include/javascript/IJavaScript.h b/fpdfsdk/include/javascript/IJavaScript.h
index 65dae74..d15ffc2 100644
--- a/fpdfsdk/include/javascript/IJavaScript.h
+++ b/fpdfsdk/include/javascript/IJavaScript.h
@@ -134,10 +134,11 @@
 
 class IFXJS_Runtime {
  public:
+  virtual ~IFXJS_Runtime() {}
+
   virtual IFXJS_Context* NewContext() = 0;
   virtual void ReleaseContext(IFXJS_Context* pContext) = 0;
   virtual IFXJS_Context* GetCurrentContext() = 0;
-
   virtual void SetReaderDocument(CPDFSDK_Document* pReaderDoc) = 0;
 
   virtual CPDFSDK_Document* GetReaderDocument() = 0;
@@ -146,24 +147,6 @@
                                   FXJSE_HVALUE hValue) = 0;
   virtual FX_BOOL SetHValueByName(const CFX_ByteStringC& utf8Name,
                                   FXJSE_HVALUE hValue) = 0;
-
- protected:
-  virtual ~IFXJS_Runtime() {}
-};
-
-class CJS_RuntimeFactory {
- public:
-  CJS_RuntimeFactory() : m_bInit(false), m_nRef(0) {}
-  ~CJS_RuntimeFactory();
-
-  IFXJS_Runtime* NewJSRuntime(CPDFDoc_Environment* pApp);
-  void DeleteJSRuntime(IFXJS_Runtime* pRuntime);
-  void AddRef();
-  void Release();
-
- private:
-  bool m_bInit;
-  int m_nRef;
 };
 
 #endif  // FPDFSDK_INCLUDE_JAVASCRIPT_IJAVASCRIPT_H_
diff --git a/fpdfsdk/src/fpdfxfa/fpdfxfa_app.cpp b/fpdfsdk/src/fpdfxfa/fpdfxfa_app.cpp
index 774ec6e..dc5d068 100644
--- a/fpdfsdk/src/fpdfxfa/fpdfxfa_app.cpp
+++ b/fpdfsdk/src/fpdfxfa/fpdfxfa_app.cpp
@@ -27,19 +27,12 @@
   g_pApp = NULL;

 }

 

-CJS_RuntimeFactory* g_GetJSRuntimeFactory() {

-  static CJS_RuntimeFactory g_JSRuntimeFactory;

-  return &g_JSRuntimeFactory;

-}

-

 CPDFXFA_App::CPDFXFA_App()

     : m_bInitRuntime(FALSE),

       m_pXFAApp(NULL),

       m_pFontMgr(NULL),

       m_hJSERuntime(NULL),

       m_csAppType(JS_STR_VIEWERTYPE_STANDARD) {

-  m_pJSRuntimeFactory = g_GetJSRuntimeFactory();

-  m_pJSRuntimeFactory->AddRef();

   m_pEnvList.RemoveAll();

 }

 

@@ -50,7 +43,6 @@
   delete m_pXFAApp;

   m_pXFAApp = NULL;

 

-  m_pJSRuntimeFactory->Release();

   FXJSE_Runtime_Release(m_hJSERuntime);

   m_hJSERuntime = NULL;

 

diff --git a/fpdfsdk/src/fsdk_mgr.cpp b/fpdfsdk/src/fsdk_mgr.cpp
index 4a55622..a3e77e4 100644
--- a/fpdfsdk/src/fsdk_mgr.cpp
+++ b/fpdfsdk/src/fsdk_mgr.cpp
@@ -13,6 +13,7 @@
 #include "../include/formfiller/FFL_FormFiller.h"
 #include "../include/javascript/IJavaScript.h"
 #include "../include/fpdfxfa/fpdfxfa_app.h"
+#include "../include/javascript/JS_Runtime.h"
 
 #if _FX_OS_ == _FX_ANDROID_
 #include "time.h"
@@ -209,7 +210,6 @@
                                          FPDF_FORMFILLINFO* pFFinfo)
     : m_pAnnotHandlerMgr(NULL),
       m_pActionHandler(NULL),
-      m_pJSRuntime(NULL),
       m_pInfo(pFFinfo),
       m_pSDKDoc(NULL),
       m_pXFADoc(pDoc),
@@ -222,9 +222,6 @@
   m_pIFormFiller = NULL;
 
   CPDFXFA_App* pProvider = CPDFXFA_App::GetInstance();
-  if (m_pJSRuntime && pProvider->GetRuntimeFactory())
-    pProvider->GetRuntimeFactory()->DeleteJSRuntime(m_pJSRuntime);
-
   if (pProvider->m_pEnvList.GetSize() == 0) {
     pProvider->ReleaseRuntime();
     pProvider->InitRuntime(TRUE);
@@ -386,9 +383,8 @@
   if (!IsJSInitiated())
     return NULL;
   if (!m_pJSRuntime)
-    m_pJSRuntime =
-        CPDFXFA_App::GetInstance()->GetRuntimeFactory()->NewJSRuntime(this);
-  return m_pJSRuntime;
+    m_pJSRuntime.reset(new CJS_Runtime(this));
+  return m_pJSRuntime.get();
 }
 
 CPDFSDK_AnnotHandlerMgr* CPDFDoc_Environment::GetAnnotHandlerMgr() {
diff --git a/fpdfsdk/src/javascript/JS_Runtime.cpp b/fpdfsdk/src/javascript/JS_Runtime.cpp
index 643cefb..e8e48b0 100644
--- a/fpdfsdk/src/javascript/JS_Runtime.cpp
+++ b/fpdfsdk/src/javascript/JS_Runtime.cpp
@@ -29,28 +29,6 @@
 #include "../../include/fpdfxfa/fpdfxfa_app.h"
 #include "../../../xfa/src/fxjse/src/value.h"
 
-CJS_RuntimeFactory::~CJS_RuntimeFactory() {}
-
-IFXJS_Runtime* CJS_RuntimeFactory::NewJSRuntime(CPDFDoc_Environment* pApp) {
-  m_bInit = true;
-  return new CJS_Runtime(pApp);
-}
-void CJS_RuntimeFactory::AddRef() {
-  m_nRef++;
-}
-void CJS_RuntimeFactory::Release() {
-  if (m_bInit) {
-    if (--m_nRef == 0) {
-      FXJS_Release();
-      m_bInit = FALSE;
-    }
-  }
-}
-
-void CJS_RuntimeFactory::DeleteJSRuntime(IFXJS_Runtime* pRuntime) {
-  delete (CJS_Runtime*)pRuntime;
-}
-
 /* ------------------------------ CJS_Runtime ------------------------------ */
 v8::Global<v8::ObjectTemplate>& _getGlobalObjectTemplate(v8::Isolate* pIsolate);