summaryrefslogtreecommitdiff
path: root/fpdfsdk/javascript/app.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'fpdfsdk/javascript/app.cpp')
-rw-r--r--fpdfsdk/javascript/app.cpp133
1 files changed, 55 insertions, 78 deletions
diff --git a/fpdfsdk/javascript/app.cpp b/fpdfsdk/javascript/app.cpp
index 41fa15259a..83836759d7 100644
--- a/fpdfsdk/javascript/app.cpp
+++ b/fpdfsdk/javascript/app.cpp
@@ -32,7 +32,7 @@ END_JS_STATIC_METHOD()
IMPLEMENT_JS_CLASS(CJS_TimerObj, TimerObj)
TimerObj::TimerObj(CJS_Object* pJSObject)
- : CJS_EmbedObj(pJSObject), m_pTimer(NULL) {}
+ : CJS_EmbedObj(pJSObject), m_pTimer(nullptr) {}
TimerObj::~TimerObj() {}
@@ -102,10 +102,6 @@ app::app(CJS_Object* pJSObject)
: CJS_EmbedObj(pJSObject), m_bCalculate(true), m_bRuntimeHighLight(false) {}
app::~app() {
- for (int i = 0, sz = m_aTimer.GetSize(); i < sz; i++)
- delete m_aTimer[i];
-
- m_aTimer.RemoveAll();
}
FX_BOOL app::activeDocs(IJS_Context* cc,
@@ -120,7 +116,7 @@ FX_BOOL app::activeDocs(IJS_Context* cc,
CPDFSDK_Document* pCurDoc = pContext->GetReaderDocument();
CJS_Array aDocs(pRuntime);
if (CPDFSDK_Document* pDoc = pApp->GetSDKDocument()) {
- CJS_Document* pJSDocument = NULL;
+ CJS_Document* pJSDocument = nullptr;
if (pDoc == pCurDoc) {
v8::Local<v8::Object> pObj = FXJS_GetThisObj(pRuntime->GetIsolate());
if (FXJS_GetObjDefnID(pObj) == CJS_Document::g_nObjDefnID)
@@ -384,19 +380,16 @@ FX_BOOL app::setInterval(IJS_Context* cc,
CJS_Runtime* pRuntime = pContext->GetJSRuntime();
uint32_t dwInterval = params.size() > 1 ? params[1].ToInt() : 1000;
-
CPDFDoc_Environment* pApp = pRuntime->GetReaderApp();
- ASSERT(pApp);
- CJS_Timer* pTimer =
- new CJS_Timer(this, pApp, pRuntime, 0, script, dwInterval, 0);
- m_aTimer.Add(pTimer);
+ m_Timers.push_back(std::unique_ptr<CJS_Timer>(
+ new CJS_Timer(this, pApp, pRuntime, 0, script, dwInterval, 0)));
v8::Local<v8::Object> pRetObj = FXJS_NewFxDynamicObj(
pRuntime->GetIsolate(), pRuntime, CJS_TimerObj::g_nObjDefnID);
- CJS_TimerObj* pJS_TimerObj =
- (CJS_TimerObj*)FXJS_GetPrivate(pRuntime->GetIsolate(), pRetObj);
- TimerObj* pTimerObj = (TimerObj*)pJS_TimerObj->GetEmbedObject();
- pTimerObj->SetTimer(pTimer);
+ CJS_TimerObj* pJS_TimerObj = static_cast<CJS_TimerObj*>(
+ FXJS_GetPrivate(pRuntime->GetIsolate(), pRetObj));
+ TimerObj* pTimerObj = static_cast<TimerObj*>(pJS_TimerObj->GetEmbedObject());
+ pTimerObj->SetTimer(m_Timers.back().get());
vRet = pRetObj;
return TRUE;
@@ -406,36 +399,32 @@ FX_BOOL app::setTimeOut(IJS_Context* cc,
const std::vector<CJS_Value>& params,
CJS_Value& vRet,
CFX_WideString& sError) {
+ CJS_Context* pContext = static_cast<CJS_Context*>(cc);
if (params.size() > 2 || params.size() == 0) {
- sError = JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSPARAMERROR);
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSPARAMERROR);
return FALSE;
}
- CJS_Context* pContext = (CJS_Context*)cc;
- CJS_Runtime* pRuntime = pContext->GetJSRuntime();
-
- CFX_WideString script = params.size() > 0 ? params[0].ToCFXWideString() : L"";
+ CFX_WideString script = params[0].ToCFXWideString();
if (script.IsEmpty()) {
- sError =
- JSGetStringFromID((CJS_Context*)cc, IDS_STRING_JSAFNUMBER_KEYSTROKE);
+ sError = JSGetStringFromID(pContext, IDS_STRING_JSAFNUMBER_KEYSTROKE);
return TRUE;
}
uint32_t dwTimeOut = params.size() > 1 ? params[1].ToInt() : 1000;
-
+ CJS_Runtime* pRuntime = pContext->GetJSRuntime();
CPDFDoc_Environment* pApp = pRuntime->GetReaderApp();
- ASSERT(pApp);
-
- CJS_Timer* pTimer =
- new CJS_Timer(this, pApp, pRuntime, 1, script, dwTimeOut, dwTimeOut);
- m_aTimer.Add(pTimer);
+ m_Timers.push_back(std::unique_ptr<CJS_Timer>(
+ new CJS_Timer(this, pApp, pRuntime, 1, script, dwTimeOut, dwTimeOut)));
v8::Local<v8::Object> pRetObj = FXJS_NewFxDynamicObj(
pRuntime->GetIsolate(), pRuntime, CJS_TimerObj::g_nObjDefnID);
- CJS_TimerObj* pJS_TimerObj =
- (CJS_TimerObj*)FXJS_GetPrivate(pRuntime->GetIsolate(), pRetObj);
- TimerObj* pTimerObj = (TimerObj*)pJS_TimerObj->GetEmbedObject();
- pTimerObj->SetTimer(pTimer);
+
+ CJS_TimerObj* pJS_TimerObj = static_cast<CJS_TimerObj*>(
+ FXJS_GetPrivate(pRuntime->GetIsolate(), pRetObj));
+
+ TimerObj* pTimerObj = static_cast<TimerObj*>(pJS_TimerObj->GetEmbedObject());
+ pTimerObj->SetTimer(m_Timers.back().get());
vRet = pRetObj;
return TRUE;
@@ -451,29 +440,7 @@ FX_BOOL app::clearTimeOut(IJS_Context* cc,
return FALSE;
}
- if (params[0].GetType() == CJS_Value::VT_fxobject) {
- v8::Local<v8::Object> pObj = params[0].ToV8Object();
- if (FXJS_GetObjDefnID(pObj) == CJS_TimerObj::g_nObjDefnID) {
- if (CJS_Object* pJSObj = params[0].ToCJSObject()) {
- if (TimerObj* pTimerObj = (TimerObj*)pJSObj->GetEmbedObject()) {
- if (CJS_Timer* pTimer = pTimerObj->GetTimer()) {
- pTimer->KillJSTimer();
-
- for (int i = 0, sz = m_aTimer.GetSize(); i < sz; i++) {
- if (m_aTimer[i] == pTimer) {
- m_aTimer.RemoveAt(i);
- break;
- }
- }
-
- delete pTimer;
- pTimerObj->SetTimer(NULL);
- }
- }
- }
- }
- }
-
+ app::ClearTimerCommon(params[0]);
return TRUE;
}
@@ -487,32 +454,42 @@ FX_BOOL app::clearInterval(IJS_Context* cc,
return FALSE;
}
- if (params[0].GetType() == CJS_Value::VT_fxobject) {
- v8::Local<v8::Object> pObj = params[0].ToV8Object();
- if (FXJS_GetObjDefnID(pObj) == CJS_TimerObj::g_nObjDefnID) {
- if (CJS_Object* pJSObj = params[0].ToCJSObject()) {
- if (TimerObj* pTimerObj = (TimerObj*)pJSObj->GetEmbedObject()) {
- if (CJS_Timer* pTimer = pTimerObj->GetTimer()) {
- pTimer->KillJSTimer();
-
- for (int i = 0, sz = m_aTimer.GetSize(); i < sz; i++) {
- if (m_aTimer[i] == pTimer) {
- m_aTimer.RemoveAt(i);
- break;
- }
- }
-
- delete pTimer;
- pTimerObj->SetTimer(NULL);
- }
- }
- }
- }
- }
-
+ app::ClearTimerCommon(params[0]);
return TRUE;
}
+void app::ClearTimerCommon(const CJS_Value& param) {
+ if (param.GetType() != CJS_Value::VT_fxobject)
+ return;
+
+ v8::Local<v8::Object> pObj = param.ToV8Object();
+ if (FXJS_GetObjDefnID(pObj) != CJS_TimerObj::g_nObjDefnID)
+ return;
+
+ CJS_Object* pJSObj = param.ToCJSObject();
+ if (!pJSObj)
+ return;
+
+ TimerObj* pTimerObj = static_cast<TimerObj*>(pJSObj->GetEmbedObject());
+ 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);
+}
+
FX_BOOL app::execMenuItem(IJS_Context* cc,
const std::vector<CJS_Value>& params,
CJS_Value& vRet,