Remove CJS_RuntimeFactory
[pdfium.git] / fpdfsdk / src / fsdk_mgr.cpp
index df9a0ff..5b94aef 100644 (file)
@@ -10,6 +10,7 @@
 #include "../include/fsdk_mgr.h"
 #include "../include/formfiller/FFL_FormFiller.h"
 #include "../include/javascript/IJavaScript.h"
+#include "../include/javascript/JS_Runtime.h"
 
 #if _FX_OS_ == _FX_ANDROID_
 #include "time.h"
 #include <ctime>
 #endif
 
-// extern CPDFDoc_Environment* g_pFormFillApp;
 class CFX_SystemHandler : public IFX_SystemHandler {
  public:
   CFX_SystemHandler(CPDFDoc_Environment* pEnv) : m_pEnv(pEnv), m_nCharSet(-1) {}
+  ~CFX_SystemHandler() override {}
 
  public:
-  virtual void InvalidateRect(FX_HWND hWnd, FX_RECT rect);
-  virtual void OutputSelectedRect(void* pFormFiller, CPDF_Rect& rect);
-
-  virtual FX_BOOL IsSelectionImplemented();
-
-  virtual CFX_WideString GetClipboardText(FX_HWND hWnd) { return L""; }
-  virtual FX_BOOL SetClipboardText(FX_HWND hWnd, CFX_WideString string) {
+  // IFX_SystemHandler
+  void InvalidateRect(FX_HWND hWnd, FX_RECT rect) override;
+  void OutputSelectedRect(void* pFormFiller, CPDF_Rect& rect) override;
+  FX_BOOL IsSelectionImplemented() override;
+  CFX_WideString GetClipboardText(FX_HWND hWnd) override { return L""; }
+  FX_BOOL SetClipboardText(FX_HWND hWnd, CFX_WideString string) override {
     return FALSE;
   }
-
-  virtual void ClientToScreen(FX_HWND hWnd, int32_t& x, int32_t& y) {}
-  virtual void ScreenToClient(FX_HWND hWnd, int32_t& x, int32_t& y) {}
-
-  /*cursor style
-  FXCT_ARROW
-  FXCT_NESW
-  FXCT_NWSE
-  FXCT_VBEAM
-  FXCT_HBEAM
-  FXCT_HAND
-  */
-  virtual void SetCursor(int32_t nCursorType);
-
-  virtual FX_HMENU CreatePopupMenu() { return NULL; }
-  virtual FX_BOOL AppendMenuItem(FX_HMENU hMenu,
-                                 int32_t nIDNewItem,
-                                 CFX_WideString string) {
+  void ClientToScreen(FX_HWND hWnd, int32_t& x, int32_t& y) override {}
+  void ScreenToClient(FX_HWND hWnd, int32_t& x, int32_t& y) override {}
+  void SetCursor(int32_t nCursorType) override;
+  FX_HMENU CreatePopupMenu() override { return NULL; }
+  FX_BOOL AppendMenuItem(FX_HMENU hMenu,
+                         int32_t nIDNewItem,
+                         CFX_WideString string) override {
     return FALSE;
   }
-  virtual FX_BOOL EnableMenuItem(FX_HMENU hMenu,
-                                 int32_t nIDItem,
-                                 FX_BOOL bEnabled) {
+  FX_BOOL EnableMenuItem(FX_HMENU hMenu,
+                         int32_t nIDItem,
+                         FX_BOOL bEnabled) override {
     return FALSE;
   }
-  virtual int32_t TrackPopupMenu(FX_HMENU hMenu,
-                                 int32_t x,
-                                 int32_t y,
-                                 FX_HWND hParent) {
+  int32_t TrackPopupMenu(FX_HMENU hMenu,
+                         int32_t x,
+                         int32_t y,
+                         FX_HWND hParent) override {
     return -1;
   }
-  virtual void DestroyMenu(FX_HMENU hMenu) {}
-
-  virtual CFX_ByteString GetNativeTrueTypeFont(int32_t nCharset);
-  virtual FX_BOOL FindNativeTrueTypeFont(int32_t nCharset,
-                                         CFX_ByteString sFontFaceName);
-  virtual CPDF_Font* AddNativeTrueTypeFontToPDF(CPDF_Document* pDoc,
-                                                CFX_ByteString sFontFaceName,
-                                                uint8_t nCharset);
-
-  virtual int32_t SetTimer(int32_t uElapse, TimerCallback lpTimerFunc);
-  virtual void KillTimer(int32_t nID);
-
-  virtual FX_BOOL IsSHIFTKeyDown(FX_DWORD nFlag) {
+  void DestroyMenu(FX_HMENU hMenu) override {}
+  CFX_ByteString GetNativeTrueTypeFont(int32_t nCharset) override;
+  FX_BOOL FindNativeTrueTypeFont(int32_t nCharset,
+                                 CFX_ByteString sFontFaceName) override;
+  CPDF_Font* AddNativeTrueTypeFontToPDF(CPDF_Document* pDoc,
+                                        CFX_ByteString sFontFaceName,
+                                        uint8_t nCharset) override;
+  int32_t SetTimer(int32_t uElapse, TimerCallback lpTimerFunc) override;
+  void KillTimer(int32_t nID) override;
+  FX_BOOL IsSHIFTKeyDown(FX_DWORD nFlag) override {
     return m_pEnv->FFI_IsSHIFTKeyDown(nFlag);
   }
-  virtual FX_BOOL IsCTRLKeyDown(FX_DWORD nFlag) {
+  FX_BOOL IsCTRLKeyDown(FX_DWORD nFlag) override {
     return m_pEnv->FFI_IsCTRLKeyDown(nFlag);
   }
-  virtual FX_BOOL IsALTKeyDown(FX_DWORD nFlag) {
+  FX_BOOL IsALTKeyDown(FX_DWORD nFlag) override {
     return m_pEnv->FFI_IsALTKeyDown(nFlag);
   }
-  virtual FX_BOOL IsINSERTKeyDown(FX_DWORD nFlag) {
+  FX_BOOL IsINSERTKeyDown(FX_DWORD nFlag) override {
     return m_pEnv->FFI_IsINSERTKeyDown(nFlag);
   }
-
-  virtual FX_SYSTEMTIME GetLocalTime();
-
-  virtual int32_t GetCharSet() { return m_nCharSet; }
-  virtual void SetCharSet(int32_t nCharSet) { m_nCharSet = nCharSet; }
+  FX_SYSTEMTIME GetLocalTime() override;
+  int32_t GetCharSet() override { return m_nCharSet; }
+  void SetCharSet(int32_t nCharSet) override { m_nCharSet = nCharSet; }
 
  private:
   CPDFDoc_Environment* m_pEnv;
@@ -220,31 +204,20 @@ FX_SYSTEMTIME CFX_SystemHandler::GetLocalTime() {
   return m_pEnv->FFI_GetLocalTime();
 }
 
-CJS_RuntimeFactory* GetJSRuntimeFactory() {
-  static CJS_RuntimeFactory s_JSRuntimeFactory;
-  return &s_JSRuntimeFactory;
-}
-
 CPDFDoc_Environment::CPDFDoc_Environment(CPDF_Document* pDoc,
                                          FPDF_FORMFILLINFO* pFFinfo)
     : m_pAnnotHandlerMgr(NULL),
       m_pActionHandler(NULL),
-      m_pJSRuntime(NULL),
       m_pInfo(pFFinfo),
       m_pSDKDoc(NULL),
       m_pPDFDoc(pDoc),
       m_pIFormFiller(NULL) {
   m_pSysHandler = new CFX_SystemHandler(this);
-  m_pJSRuntimeFactory = GetJSRuntimeFactory();
-  m_pJSRuntimeFactory->AddRef();
 }
 
 CPDFDoc_Environment::~CPDFDoc_Environment() {
   delete m_pIFormFiller;
   m_pIFormFiller = NULL;
-  if (m_pJSRuntime && m_pJSRuntimeFactory)
-    m_pJSRuntimeFactory->DeleteJSRuntime(m_pJSRuntime);
-  m_pJSRuntimeFactory->Release();
 
   delete m_pSysHandler;
   m_pSysHandler = NULL;
@@ -401,8 +374,8 @@ IFXJS_Runtime* CPDFDoc_Environment::GetJSRuntime() {
   if (!IsJSInitiated())
     return NULL;
   if (!m_pJSRuntime)
-    m_pJSRuntime = m_pJSRuntimeFactory->NewJSRuntime(this);
-  return m_pJSRuntime;
+    m_pJSRuntime.reset(new CJS_Runtime(this));
+  return m_pJSRuntime.get();
 }
 
 CPDFSDK_AnnotHandlerMgr* CPDFDoc_Environment::GetAnnotHandlerMgr() {
@@ -413,7 +386,7 @@ CPDFSDK_AnnotHandlerMgr* CPDFDoc_Environment::GetAnnotHandlerMgr() {
 
 CPDFSDK_ActionHandler* CPDFDoc_Environment::GetActionHander() {
   if (!m_pActionHandler)
-    m_pActionHandler = new CPDFSDK_ActionHandler(this);
+    m_pActionHandler = new CPDFSDK_ActionHandler();
   return m_pActionHandler;
 }
 
@@ -651,16 +624,22 @@ CPDFSDK_PageView::CPDFSDK_PageView(CPDFSDK_Document* pSDKDoc, CPDF_Page* page)
 }
 
 CPDFSDK_PageView::~CPDFSDK_PageView() {
-  CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
-  int nAnnotCount = m_fxAnnotArray.GetSize();
+  // if there is a focused annot on the page, we should kill the focus first.
+  if (CPDFSDK_Annot* focusedAnnot = m_pSDKDoc->GetFocusAnnot()) {
+    for (int i = 0, count = m_fxAnnotArray.GetSize(); i < count; i++) {
+      CPDFSDK_Annot* pAnnot = (CPDFSDK_Annot*)m_fxAnnotArray.GetAt(i);
+      if (pAnnot == focusedAnnot) {
+        KillFocusAnnot();
+        break;
+      }
+    }
+  }
 
-  for (int i = 0; i < nAnnotCount; i++) {
+  CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();
+  CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
+  ASSERT(pAnnotHandlerMgr);
+  for (int i = 0, count = m_fxAnnotArray.GetSize(); i < count; i++) {
     CPDFSDK_Annot* pAnnot = (CPDFSDK_Annot*)m_fxAnnotArray.GetAt(i);
-    // if there is a focused annot on the page, we should kill the focus first.
-    if (pAnnot == m_pSDKDoc->GetFocusAnnot())
-      KillFocusAnnot();
-    CPDFSDK_AnnotHandlerMgr* pAnnotHandlerMgr = pEnv->GetAnnotHandlerMgr();
-    ASSERT(pAnnotHandlerMgr);
     pAnnotHandlerMgr->ReleaseAnnot(pAnnot);
   }
   m_fxAnnotArray.RemoveAll();
@@ -933,16 +912,9 @@ FX_BOOL CPDFSDK_PageView::OnKeyDown(int nKeyCode, int nFlag) {
 }
 
 FX_BOOL CPDFSDK_PageView::OnKeyUp(int nKeyCode, int nFlag) {
-  //  if(CPDFSDK_Annot* pAnnot = GetFocusAnnot())
-  //  {
-  //      CFFL_IFormFiller* pIFormFiller = g_pFormFillApp->GetIFormFiller();
-  //      return pIFormFiller->OnKeyUp(pAnnot, nKeyCode, nFlag);
-  //  }
   return FALSE;
 }
 
-extern void CheckUnSupportAnnot(CPDF_Document* pDoc, CPDF_Annot* pPDFAnnot);
-
 void CPDFSDK_PageView::LoadFXAnnots() {
   CPDFDoc_Environment* pEnv = m_pSDKDoc->GetEnv();