Index: fpdfsdk/javascript/app.cpp |
diff --git a/fpdfsdk/javascript/app.cpp b/fpdfsdk/javascript/app.cpp |
index 10776292442dd5b798112ecfe316bcd4af629f2f..329b625545d0aff23d8c8348c6f96e1fccbb0a70 100644 |
--- a/fpdfsdk/javascript/app.cpp |
+++ b/fpdfsdk/javascript/app.cpp |
@@ -31,16 +31,12 @@ END_JS_STATIC_METHOD() |
IMPLEMENT_JS_CLASS(CJS_TimerObj, TimerObj) |
TimerObj::TimerObj(CJS_Object* pJSObject) |
- : CJS_EmbedObj(pJSObject), m_pTimer(nullptr) {} |
+ : CJS_EmbedObj(pJSObject), m_nTimerID(0) {} |
TimerObj::~TimerObj() {} |
void TimerObj::SetTimer(CJS_Timer* pTimer) { |
- m_pTimer = pTimer; |
-} |
- |
-CJS_Timer* TimerObj::GetTimer() const { |
- return m_pTimer; |
+ m_nTimerID = pTimer->GetTimerID(); |
} |
#define JS_STR_VIEWERTYPE L"pdfium" |
@@ -473,20 +469,7 @@ void app::ClearTimerCommon(const CJS_Value& param) { |
if (!pTimerObj) |
return; |
- CJS_Timer* pTimer = pTimerObj->GetTimer(); |
- if (!pTimer) |
- return; |
- |
- pTimer->KillJSTimer(); |
- auto iter = std::find_if(m_Timers.begin(), m_Timers.end(), |
- [pTimer](const std::unique_ptr<CJS_Timer>& that) { |
- return pTimer == that.get(); |
- }); |
- |
- if (iter != m_Timers.end()) |
- m_Timers.erase(iter); |
- |
- pTimerObj->SetTimer(nullptr); |
+ CJS_Timer::Cancel(pTimerObj->GetTimerID()); |
} |
FX_BOOL app::execMenuItem(IJS_Context* cc, |
@@ -498,20 +481,18 @@ FX_BOOL app::execMenuItem(IJS_Context* cc, |
void app::TimerProc(CJS_Timer* pTimer) { |
CJS_Runtime* pRuntime = pTimer->GetRuntime(); |
+ if (pRuntime && (!pTimer->IsOneShot() || pTimer->GetTimeOut() > 0)) |
+ RunJsScript(pRuntime, pTimer->GetJScript()); |
+} |
- switch (pTimer->GetType()) { |
- case 0: // interval |
- if (pRuntime) |
- RunJsScript(pRuntime, pTimer->GetJScript()); |
- break; |
- case 1: |
- if (pTimer->GetTimeOut() > 0) { |
- if (pRuntime) |
- RunJsScript(pRuntime, pTimer->GetJScript()); |
- pTimer->KillJSTimer(); |
- } |
- break; |
- } |
+void app::CancelProc(CJS_Timer* pTimer) { |
+ auto iter = std::find_if(m_Timers.begin(), m_Timers.end(), |
+ [pTimer](const std::unique_ptr<CJS_Timer>& that) { |
+ return pTimer == that.get(); |
+ }); |
+ |
+ if (iter != m_Timers.end()) |
+ m_Timers.erase(iter); |
} |
void app::RunJsScript(CJS_Runtime* pRuntime, const CFX_WideString& wsScript) { |