Index: fpdfsdk/include/javascript/JS_Object.h |
diff --git a/fpdfsdk/include/javascript/JS_Object.h b/fpdfsdk/include/javascript/JS_Object.h |
index 331475a548b23f01468fd259a16102dd78e2ed6a..adcedb837cbf27647a483cc22e6ba66e4037035f 100644 |
--- a/fpdfsdk/include/javascript/JS_Object.h |
+++ b/fpdfsdk/include/javascript/JS_Object.h |
@@ -9,28 +9,29 @@ |
#include <map> |
+#include "../../../third_party/base/nonstd_unique_ptr.h" |
+ |
#include "../fsdk_define.h" // For FX_UINT |
#include "../fsdk_mgr.h" // For CPDFDoc_Environment |
#include "../fx_systemhandler.h" // For IFX_SystemHandler |
#include "../jsapi/fxjs_v8.h" |
class CPDFSDK_PageView; |
+class CJS_Context; |
class CJS_Object; |
+class CJS_Runtime; |
class CJS_Timer; |
-class CJS_Context; |
class CJS_EmbedObj { |
public: |
- CJS_EmbedObj(CJS_Object* pJSObject); |
+ explicit CJS_EmbedObj(CJS_Object* pJSObject); |
virtual ~CJS_EmbedObj(); |
- virtual void TimerProc(CJS_Timer* pTimer){}; |
- |
+ virtual void TimerProc(CJS_Timer* pTimer) {} |
CJS_Timer* BeginTimer(CPDFDoc_Environment* pApp, FX_UINT nElapse); |
void EndTimer(CJS_Timer* pTimer); |
- CJS_Object* GetJSObject() { return m_pJSObject; }; |
- operator CJS_Object*() { return m_pJSObject; }; |
+ CJS_Object* GetJSObject() const { return m_pJSObject; } |
CPDFSDK_PageView* JSGetPageView(IFXJS_Context* cc); |
int MsgBox(CPDFDoc_Environment* pApp, |
@@ -47,25 +48,25 @@ class CJS_EmbedObj { |
class CJS_Object { |
public: |
- CJS_Object(JSFXObject pObject); |
+ explicit CJS_Object(JSFXObject pObject); |
virtual ~CJS_Object(void); |
void MakeWeak(); |
void Dispose(); |
- virtual FX_BOOL IsType(const FX_CHAR* sClassName) { return TRUE; }; |
- virtual CFX_ByteString GetClassName() { return ""; }; |
+ virtual FX_BOOL IsType(const FX_CHAR* sClassName) { return TRUE; } |
+ virtual CFX_ByteString GetClassName() { return ""; } |
- virtual FX_BOOL InitInstance(IFXJS_Context* cc) { return TRUE; }; |
- virtual FX_BOOL ExitInstance() { return TRUE; }; |
+ virtual FX_BOOL InitInstance(IFXJS_Context* cc) { return TRUE; } |
+ virtual FX_BOOL ExitInstance() { return TRUE; } |
operator JSFXObject() { |
return v8::Local<v8::Object>::New(m_pIsolate, m_pObject); |
} |
- operator CJS_EmbedObj*() { return m_pEmbedObj; }; |
- void SetEmbedObject(CJS_EmbedObj* pObj) { m_pEmbedObj = pObj; }; |
- CJS_EmbedObj* GetEmbedObject() { return m_pEmbedObj; }; |
+ // Takes ownership of |pObj|. |
+ void SetEmbedObject(CJS_EmbedObj* pObj) { m_pEmbedObj.reset(pObj); } |
+ CJS_EmbedObj* GetEmbedObject() const { return m_pEmbedObj.get(); } |
static CPDFSDK_PageView* JSGetPageView(IFXJS_Context* cc); |
static int MsgBox(CPDFDoc_Environment* pApp, |
@@ -79,16 +80,11 @@ class CJS_Object { |
v8::Isolate* GetIsolate() { return m_pIsolate; } |
protected: |
- CJS_EmbedObj* m_pEmbedObj; |
+ nonstd::unique_ptr<CJS_EmbedObj> m_pEmbedObj; |
v8::Global<v8::Object> m_pObject; |
v8::Isolate* m_pIsolate; |
}; |
-using JSTimerMap = std::map<FX_UINT, CJS_Timer*>; |
-JSTimerMap* GetGlobalTimerMap(); |
- |
-class CJS_Runtime; |
- |
class CJS_Timer { |
public: |
CJS_Timer(CJS_EmbedObj* pObj, CPDFDoc_Environment* pApp) |
@@ -105,59 +101,30 @@ class CJS_Timer { |
virtual ~CJS_Timer() { KillJSTimer(); } |
public: |
- FX_UINT 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 KillJSTimer() { |
- if (m_nTimerID) { |
- IFX_SystemHandler* pHandler = m_pApp->GetSysHandler(); |
- pHandler->KillTimer(m_nTimerID); |
- GetGlobalTimerMap()->erase(m_nTimerID); |
- m_nTimerID = 0; |
- } |
- }; |
+ FX_UINT SetJSTimer(FX_UINT nElapse); |
+ void KillJSTimer(); |
void SetType(int nType) { m_nType = nType; } |
- |
int GetType() const { return m_nType; } |
void SetStartTime(FX_DWORD dwStartTime) { m_dwStartTime = dwStartTime; } |
- |
FX_DWORD GetStartTime() const { return m_dwStartTime; } |
void SetTimeOut(FX_DWORD dwTimeOut) { m_dwTimeOut = dwTimeOut; } |
- |
FX_DWORD GetTimeOut() const { return m_dwTimeOut; } |
void SetRuntime(CJS_Runtime* pRuntime) { m_pRuntime = pRuntime; } |
- |
CJS_Runtime* GetRuntime() const { return m_pRuntime; } |
void SetJScript(const CFX_WideString& script) { m_swJScript = script; } |
- |
CFX_WideString GetJScript() const { return m_swJScript; } |
- static void 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 void TimerProc(int idEvent); |
private: |
+ using TimerMap = std::map<FX_UINT, CJS_Timer*>; |
+ static TimerMap* GetGlobalTimerMap(); |
Lei Zhang
2015/08/13 23:22:24
Just make this a function in an anonymous namespac
Tom Sepez
2015/08/13 23:28:31
Nah, I like restricting callers to this class, and
Lei Zhang
2015/08/13 23:36:48
Oh, I'm too used to having just 1 class per file.
|
+ |
FX_UINT m_nTimerID; |
CJS_EmbedObj* m_pEmbedObj; |
FX_BOOL m_bProcessing; |