diff options
Diffstat (limited to 'fpdfsdk/include/javascript/JS_Object.h')
-rw-r--r-- | fpdfsdk/include/javascript/JS_Object.h | 82 |
1 files changed, 22 insertions, 60 deletions
diff --git a/fpdfsdk/include/javascript/JS_Object.h b/fpdfsdk/include/javascript/JS_Object.h index e1780567c2..adcedb837c 100644 --- a/fpdfsdk/include/javascript/JS_Object.h +++ b/fpdfsdk/include/javascript/JS_Object.h @@ -9,28 +9,29 @@ #include <map> +#include "../../../third_party/base/nonstd_unique_ptr.h" + #include "../fsdk_define.h" // For FX_UINT #include "../fsdk_mgr.h" // For CPDFDoc_Environment #include "../fx_systemhandler.h" // For IFX_SystemHandler #include "../jsapi/fxjs_v8.h" class CPDFSDK_PageView; +class CJS_Context; class CJS_Object; +class CJS_Runtime; class CJS_Timer; -class CJS_Context; class CJS_EmbedObj { public: - CJS_EmbedObj(CJS_Object* pJSObject); + explicit CJS_EmbedObj(CJS_Object* pJSObject); virtual ~CJS_EmbedObj(); - virtual void TimerProc(CJS_Timer* pTimer){}; - + virtual void TimerProc(CJS_Timer* pTimer) {} CJS_Timer* BeginTimer(CPDFDoc_Environment* pApp, FX_UINT nElapse); void EndTimer(CJS_Timer* pTimer); - CJS_Object* GetJSObject() { return m_pJSObject; }; - operator CJS_Object*() { return m_pJSObject; }; + CJS_Object* GetJSObject() const { return m_pJSObject; } CPDFSDK_PageView* JSGetPageView(IFXJS_Context* cc); int MsgBox(CPDFDoc_Environment* pApp, @@ -47,25 +48,25 @@ class CJS_EmbedObj { class CJS_Object { public: - CJS_Object(JSFXObject pObject); + explicit CJS_Object(JSFXObject pObject); virtual ~CJS_Object(void); void MakeWeak(); void Dispose(); - virtual FX_BOOL IsType(const FX_CHAR* sClassName) { return TRUE; }; - virtual CFX_ByteString GetClassName() { return ""; }; + virtual FX_BOOL IsType(const FX_CHAR* sClassName) { return TRUE; } + virtual CFX_ByteString GetClassName() { return ""; } - virtual FX_BOOL InitInstance(IFXJS_Context* cc) { return TRUE; }; - virtual FX_BOOL ExitInstance() { return TRUE; }; + virtual FX_BOOL InitInstance(IFXJS_Context* cc) { return TRUE; } + virtual FX_BOOL ExitInstance() { return TRUE; } operator JSFXObject() { return v8::Local<v8::Object>::New(m_pIsolate, m_pObject); } - operator CJS_EmbedObj*() { return m_pEmbedObj; }; - void SetEmbedObject(CJS_EmbedObj* pObj) { m_pEmbedObj = pObj; }; - CJS_EmbedObj* GetEmbedObject() { return m_pEmbedObj; }; + // Takes ownership of |pObj|. + void SetEmbedObject(CJS_EmbedObj* pObj) { m_pEmbedObj.reset(pObj); } + CJS_EmbedObj* GetEmbedObject() const { return m_pEmbedObj.get(); } static CPDFSDK_PageView* JSGetPageView(IFXJS_Context* cc); static int MsgBox(CPDFDoc_Environment* pApp, @@ -79,16 +80,11 @@ class CJS_Object { v8::Isolate* GetIsolate() { return m_pIsolate; } protected: - CJS_EmbedObj* m_pEmbedObj; + nonstd::unique_ptr<CJS_EmbedObj> m_pEmbedObj; v8::Global<v8::Object> m_pObject; v8::Isolate* m_pIsolate; }; -using JSTimerMap = std::map<FX_UINT, CJS_Timer*>; -JSTimerMap* GetGlobalTimerMap(); - -class CJS_Runtime; - class CJS_Timer { public: CJS_Timer(CJS_EmbedObj* pObj, CPDFDoc_Environment* pApp) @@ -105,64 +101,30 @@ class CJS_Timer { virtual ~CJS_Timer() { KillJSTimer(); } public: - FX_UINT SetJSTimer(FX_UINT nElapse) { - if (m_nTimerID) - KillJSTimer(); - IFX_SystemHandler* pHandler = m_pApp->GetSysHandler(); - m_nTimerID = pHandler->SetTimer(nElapse, TimerProc); - (*GetGlobalTimerMap())[m_nTimerID] = this; - m_dwElapse = nElapse; - return m_nTimerID; - }; - - void KillJSTimer() { - if (m_nTimerID) { - if (m_pApp == NULL) { - GetTimeMap().RemoveAt(m_nTimerID); - m_nTimerID = 0; - return; - } - IFX_SystemHandler* pHandler = m_pApp->GetSysHandler(); - pHandler->KillTimer(m_nTimerID); - GetGlobalTimerMap()->erase(m_nTimerID); - m_nTimerID = 0; - } - }; + FX_UINT SetJSTimer(FX_UINT nElapse); + void KillJSTimer(); void SetType(int nType) { m_nType = nType; } - int GetType() const { return m_nType; } void SetStartTime(FX_DWORD dwStartTime) { m_dwStartTime = dwStartTime; } - FX_DWORD GetStartTime() const { return m_dwStartTime; } void SetTimeOut(FX_DWORD dwTimeOut) { m_dwTimeOut = dwTimeOut; } - FX_DWORD GetTimeOut() const { return m_dwTimeOut; } void SetRuntime(CJS_Runtime* pRuntime) { m_pRuntime = pRuntime; } - CJS_Runtime* GetRuntime() const { return m_pRuntime; } void SetJScript(const CFX_WideString& script) { m_swJScript = script; } - CFX_WideString GetJScript() const { return m_swJScript; } - static void TimerProc(int idEvent) { - const auto it = GetGlobalTimerMap()->find(idEvent); - if (it != GetGlobalTimerMap()->end()) { - CJS_Timer* pTimer = it->second; - if (!pTimer->m_bProcessing) { - pTimer->m_bProcessing = TRUE; - if (pTimer->m_pEmbedObj) - pTimer->m_pEmbedObj->TimerProc(pTimer); - pTimer->m_bProcessing = FALSE; - } - } - }; + static void TimerProc(int idEvent); private: + using TimerMap = std::map<FX_UINT, CJS_Timer*>; + static TimerMap* GetGlobalTimerMap(); + FX_UINT m_nTimerID; CJS_EmbedObj* m_pEmbedObj; FX_BOOL m_bProcessing; |