| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "fpdfsdk/javascript/JS_Object.h" | 7 #include "fpdfsdk/javascript/JS_Object.h" |
| 8 | 8 |
| 9 #include "fpdfsdk/include/fsdk_mgr.h" | 9 #include "fpdfsdk/include/fsdk_mgr.h" |
| 10 #include "fpdfsdk/javascript/JS_Define.h" | 10 #include "fpdfsdk/javascript/JS_Define.h" |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 65 | 65 |
| 66 void CJS_Object::InitInstance(IJS_Runtime* pIRuntime) {} | 66 void CJS_Object::InitInstance(IJS_Runtime* pIRuntime) {} |
| 67 | 67 |
| 68 void CJS_Object::ExitInstance() {} | 68 void CJS_Object::ExitInstance() {} |
| 69 | 69 |
| 70 void CJS_Object::Alert(CJS_Context* pContext, const FX_WCHAR* swMsg) { | 70 void CJS_Object::Alert(CJS_Context* pContext, const FX_WCHAR* swMsg) { |
| 71 CPDFDoc_Environment* pApp = pContext->GetReaderApp(); | 71 CPDFDoc_Environment* pApp = pContext->GetReaderApp(); |
| 72 if (pApp) | 72 if (pApp) |
| 73 pApp->JS_appAlert(swMsg, nullptr, 0, 3); | 73 pApp->JS_appAlert(swMsg, nullptr, 0, 3); |
| 74 } | 74 } |
| 75 | |
| 76 CJS_Timer::CJS_Timer(CJS_EmbedObj* pObj, | |
| 77 CPDFDoc_Environment* pApp, | |
| 78 CJS_Runtime* pRuntime, | |
| 79 int nType, | |
| 80 const CFX_WideString& script, | |
| 81 uint32_t dwElapse, | |
| 82 uint32_t dwTimeOut) | |
| 83 : m_nTimerID(0), | |
| 84 m_pEmbedObj(pObj), | |
| 85 m_bProcessing(false), | |
| 86 m_bValid(true), | |
| 87 m_nType(nType), | |
| 88 m_dwTimeOut(dwTimeOut), | |
| 89 m_swJScript(script), | |
| 90 m_pRuntime(pRuntime), | |
| 91 m_pApp(pApp) { | |
| 92 CFX_SystemHandler* pHandler = m_pApp->GetSysHandler(); | |
| 93 m_nTimerID = pHandler->SetTimer(dwElapse, Trigger); | |
| 94 (*GetGlobalTimerMap())[m_nTimerID] = this; | |
| 95 m_pRuntime->AddObserver(this); | |
| 96 } | |
| 97 | |
| 98 CJS_Timer::~CJS_Timer() { | |
| 99 CJS_Runtime* pRuntime = GetRuntime(); | |
| 100 if (pRuntime) | |
| 101 pRuntime->RemoveObserver(this); | |
| 102 | |
| 103 if (!m_nTimerID) | |
| 104 return; | |
| 105 | |
| 106 if (m_bValid) | |
| 107 m_pApp->GetSysHandler()->KillTimer(m_nTimerID); | |
| 108 | |
| 109 GetGlobalTimerMap()->erase(m_nTimerID); | |
| 110 } | |
| 111 | |
| 112 // static | |
| 113 void CJS_Timer::Trigger(int nTimerID) { | |
| 114 auto it = GetGlobalTimerMap()->find(nTimerID); | |
| 115 if (it == GetGlobalTimerMap()->end()) | |
| 116 return; | |
| 117 | |
| 118 CJS_Timer* pTimer = it->second; | |
| 119 if (pTimer->m_bProcessing) | |
| 120 return; | |
| 121 | |
| 122 pTimer->m_bProcessing = true; | |
| 123 if (pTimer->m_pEmbedObj) | |
| 124 pTimer->m_pEmbedObj->TimerProc(pTimer); | |
| 125 | |
| 126 // Timer proc may have destroyed timer, find it again. | |
| 127 it = GetGlobalTimerMap()->find(nTimerID); | |
| 128 if (it == GetGlobalTimerMap()->end()) | |
| 129 return; | |
| 130 | |
| 131 pTimer = it->second; | |
| 132 pTimer->m_bProcessing = false; | |
| 133 if (pTimer->IsOneShot()) | |
| 134 pTimer->m_pEmbedObj->CancelProc(pTimer); | |
| 135 } | |
| 136 | |
| 137 // static | |
| 138 void CJS_Timer::Cancel(int nTimerID) { | |
| 139 auto it = GetGlobalTimerMap()->find(nTimerID); | |
| 140 if (it == GetGlobalTimerMap()->end()) | |
| 141 return; | |
| 142 | |
| 143 CJS_Timer* pTimer = it->second; | |
| 144 pTimer->m_pEmbedObj->CancelProc(pTimer); | |
| 145 } | |
| 146 | |
| 147 // static | |
| 148 CJS_Timer::TimerMap* CJS_Timer::GetGlobalTimerMap() { | |
| 149 // Leak the timer array at shutdown. | |
| 150 static auto* s_TimerMap = new TimerMap; | |
| 151 return s_TimerMap; | |
| 152 } | |
| 153 | |
| 154 void CJS_Timer::OnDestroyed() { | |
| 155 m_bValid = false; | |
| 156 } | |
| OLD | NEW |