diff options
author | Tom Sepez <tsepez@chromium.org> | 2015-08-13 16:56:19 -0700 |
---|---|---|
committer | Tom Sepez <tsepez@chromium.org> | 2015-08-13 16:56:19 -0700 |
commit | 371c87f65f2545ac329ca2f8db9c1f964babf1aa (patch) | |
tree | d2a61d5808a73a0742cafd31a5d672f0dc927ec5 /fpdfsdk/src | |
parent | 2ebc33e549d969f6d776a59f6d313b80d7813bb1 (diff) | |
download | pdfium-371c87f65f2545ac329ca2f8db9c1f964babf1aa.tar.xz |
Merge to XFA: Tidy up JS_Object.h and JS_Object.cpp.
(cherry picked from commit b0b1a8bd45ed72e4fd22f5f0a394b7897ae573c7)
Original Review URL: https://codereview.chromium.org/1293673003 .
TBR=thestig@chromium.org
Review URL: https://codereview.chromium.org/1292283002 .
Diffstat (limited to 'fpdfsdk/src')
-rw-r--r-- | fpdfsdk/src/javascript/JS_Object.cpp | 54 |
1 files changed, 40 insertions, 14 deletions
diff --git a/fpdfsdk/src/javascript/JS_Object.cpp b/fpdfsdk/src/javascript/JS_Object.cpp index ef9bab971d..96e1d1d564 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; +} |