| Index: fpdfsdk/src/javascript/JS_Object.cpp
|
| diff --git a/fpdfsdk/src/javascript/JS_Object.cpp b/fpdfsdk/src/javascript/JS_Object.cpp
|
| index ef9bab971d52447dfc0c390969a9db1e9a1a77ad..96e1d1d56492c7487d0d5c795b1151ba6acb0168 100644
|
| --- a/fpdfsdk/src/javascript/JS_Object.cpp
|
| +++ b/fpdfsdk/src/javascript/JS_Object.cpp
|
| @@ -10,12 +10,6 @@
|
| #include "../../include/javascript/JS_Object.h"
|
| #include "../../include/javascript/JS_Context.h"
|
|
|
| -JSTimerMap* GetGlobalTimerMap() {
|
| - // Leak the timer array at shutdown.
|
| - static auto* timeMap = new JSTimerMap;
|
| - return timeMap;
|
| -}
|
| -
|
| int FXJS_MsgBox(CPDFDoc_Environment* pApp,
|
| CPDFSDK_PageView* pPageView,
|
| const FX_WCHAR* swMsg,
|
| @@ -39,9 +33,6 @@ CPDFSDK_PageView* FXJS_GetPageView(IFXJS_Context* cc) {
|
| return NULL;
|
| }
|
|
|
| -/* --------------------------------- CJS_EmbedObj
|
| - * --------------------------------- */
|
| -
|
| CJS_EmbedObj::CJS_EmbedObj(CJS_Object* pJSObject) : m_pJSObject(pJSObject) {}
|
|
|
| CJS_EmbedObj::~CJS_EmbedObj() {
|
| @@ -79,8 +70,6 @@ void CJS_EmbedObj::EndTimer(CJS_Timer* pTimer) {
|
| delete pTimer;
|
| }
|
|
|
| -/* --------------------------------- CJS_Object
|
| - * --------------------------------- */
|
| void FreeObject(const v8::WeakCallbackInfo<CJS_Object>& data) {
|
| CJS_Object* pJSObj = data.GetParameter();
|
| pJSObj->ExitInstance();
|
| @@ -101,9 +90,6 @@ CJS_Object::CJS_Object(JSFXObject pObject) : m_pEmbedObj(NULL) {
|
| };
|
|
|
| CJS_Object::~CJS_Object(void) {
|
| - delete m_pEmbedObj;
|
| - m_pEmbedObj = NULL;
|
| -
|
| m_pObject.Reset();
|
| };
|
|
|
| @@ -137,3 +123,43 @@ void CJS_Object::Alert(CJS_Context* pContext, const FX_WCHAR* swMsg) {
|
| pApp->JS_appAlert(swMsg, NULL, 0, 3);
|
| }
|
| }
|
| +
|
| +FX_UINT CJS_Timer::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 CJS_Timer::KillJSTimer() {
|
| + if (m_nTimerID) {
|
| + IFX_SystemHandler* pHandler = m_pApp->GetSysHandler();
|
| + pHandler->KillTimer(m_nTimerID);
|
| + GetGlobalTimerMap()->erase(m_nTimerID);
|
| + m_nTimerID = 0;
|
| + }
|
| +}
|
| +
|
| +// static
|
| +void CJS_Timer::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
|
| +CJS_Timer::TimerMap* CJS_Timer::GetGlobalTimerMap() {
|
| + // Leak the timer array at shutdown.
|
| + static auto* s_TimerMap = new TimerMap;
|
| + return s_TimerMap;
|
| +}
|
|
|