Chromium Code Reviews| 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; |