| Index: fpdfsdk/include/javascript/JS_Object.h
|
| diff --git a/fpdfsdk/include/javascript/JS_Object.h b/fpdfsdk/include/javascript/JS_Object.h
|
| index c0c3ab0c468ce161d686e3a24a11f357e5cca341..331475a548b23f01468fd259a16102dd78e2ed6a 100644
|
| --- a/fpdfsdk/include/javascript/JS_Object.h
|
| +++ b/fpdfsdk/include/javascript/JS_Object.h
|
| @@ -7,6 +7,8 @@
|
| #ifndef FPDFSDK_INCLUDE_JAVASCRIPT_JS_OBJECT_H_
|
| #define FPDFSDK_INCLUDE_JAVASCRIPT_JS_OBJECT_H_
|
|
|
| +#include <map>
|
| +
|
| #include "../fsdk_define.h" // For FX_UINT
|
| #include "../fsdk_mgr.h" // For CPDFDoc_Environment
|
| #include "../fx_systemhandler.h" // For IFX_SystemHandler
|
| @@ -82,77 +84,8 @@ class CJS_Object {
|
| v8::Isolate* m_pIsolate;
|
| };
|
|
|
| -struct JS_TIMER_MAP {
|
| - FX_UINT nID;
|
| - CJS_Timer* pTimer;
|
| -};
|
| -
|
| -typedef CFX_ArrayTemplate<JS_TIMER_MAP*> CTimerMapArray;
|
| -
|
| -struct JS_TIMER_MAPARRAY {
|
| - public:
|
| - JS_TIMER_MAPARRAY() {}
|
| -
|
| - ~JS_TIMER_MAPARRAY() { Reset(); }
|
| -
|
| - void Reset() {
|
| - for (int i = 0, sz = m_Array.GetSize(); i < sz; i++)
|
| - delete m_Array.GetAt(i);
|
| -
|
| - m_Array.RemoveAll();
|
| - }
|
| -
|
| - void SetAt(FX_UINT nIndex, CJS_Timer* pTimer) {
|
| - int i = Find(nIndex);
|
| -
|
| - if (i >= 0) {
|
| - if (JS_TIMER_MAP* pMap = m_Array.GetAt(i))
|
| - pMap->pTimer = pTimer;
|
| - } else {
|
| - JS_TIMER_MAP* pMap = new JS_TIMER_MAP;
|
| - pMap->nID = nIndex;
|
| - pMap->pTimer = pTimer;
|
| - m_Array.Add(pMap);
|
| - }
|
| - }
|
| -
|
| - CJS_Timer* GetAt(FX_UINT nIndex) {
|
| - int i = Find(nIndex);
|
| -
|
| - if (i >= 0) {
|
| - if (JS_TIMER_MAP* pMap = m_Array.GetAt(i))
|
| - return pMap->pTimer;
|
| - }
|
| - return NULL;
|
| - }
|
| -
|
| - void RemoveAt(FX_UINT nIndex) {
|
| - int i = Find(nIndex);
|
| -
|
| - if (i >= 0) {
|
| - delete m_Array.GetAt(i);
|
| - m_Array.RemoveAt(i);
|
| - }
|
| - // To prevent potential fake memory leak reported by vc6.
|
| - if (m_Array.GetSize() == 0)
|
| - m_Array.RemoveAll();
|
| - }
|
| -
|
| - int Find(FX_UINT nIndex) {
|
| - for (int i = 0, sz = m_Array.GetSize(); i < sz; i++) {
|
| - if (JS_TIMER_MAP* pMap = m_Array.GetAt(i)) {
|
| - if (pMap->nID == nIndex)
|
| - return i;
|
| - }
|
| - }
|
| -
|
| - return -1;
|
| - }
|
| -
|
| - CTimerMapArray m_Array;
|
| -};
|
| -
|
| -JS_TIMER_MAPARRAY& GetTimeMap();
|
| +using JSTimerMap = std::map<FX_UINT, CJS_Timer*>;
|
| +JSTimerMap* GetGlobalTimerMap();
|
|
|
| class CJS_Runtime;
|
|
|
| @@ -177,7 +110,7 @@ class CJS_Timer {
|
| KillJSTimer();
|
| IFX_SystemHandler* pHandler = m_pApp->GetSysHandler();
|
| m_nTimerID = pHandler->SetTimer(nElapse, TimerProc);
|
| - GetTimeMap().SetAt(m_nTimerID, this);
|
| + (*GetGlobalTimerMap())[m_nTimerID] = this;
|
| m_dwElapse = nElapse;
|
| return m_nTimerID;
|
| };
|
| @@ -186,7 +119,7 @@ class CJS_Timer {
|
| if (m_nTimerID) {
|
| IFX_SystemHandler* pHandler = m_pApp->GetSysHandler();
|
| pHandler->KillTimer(m_nTimerID);
|
| - GetTimeMap().RemoveAt(m_nTimerID);
|
| + GetGlobalTimerMap()->erase(m_nTimerID);
|
| m_nTimerID = 0;
|
| }
|
| };
|
| @@ -212,14 +145,14 @@ class CJS_Timer {
|
| CFX_WideString GetJScript() const { return m_swJScript; }
|
|
|
| static void TimerProc(int idEvent) {
|
| - if (CJS_Timer* pTimer = GetTimeMap().GetAt(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;
|
| - } else {
|
| - // TRACE(L"BUSY!\n");
|
| }
|
| }
|
| };
|
|
|