1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file.
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef _JS_OBJECT_H_
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define _JS_OBJECT_H_
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CJS_Object;
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CJS_Timer;
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CJS_Context;
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CJS_EmbedObj : public CFX_Object
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_EmbedObj(CJS_Object* pJSObject);
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CJS_EmbedObj();
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual void				TimerProc(CJS_Timer* pTimer){};
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Timer*					BeginTimer(CPDFDoc_Environment * pApp, FX_UINT nElapse);
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						EndTimer(CJS_Timer* pTimer);
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Object*					GetJSObject(){return m_pJSObject;};
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	operator					CJS_Object* (){return m_pJSObject;};
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_PageView *			JSGetPageView(IFXJS_Context* cc);
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int							MsgBox(CPDFDoc_Environment* pApp, CPDFSDK_PageView* pPageView, FX_LPCWSTR swMsg, FX_LPCWSTR swTitle = NULL, FX_UINT nType = 0, FX_UINT nIcon = 0);
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						Alert(CJS_Context* pContext, FX_LPCWSTR swMsg);
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL						IsSafeMode(IFXJS_Context* cc);
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected:
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Object*					m_pJSObject;
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CJS_Object : public CFX_Object
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Object(JSFXObject pObject);
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CJS_Object(void);
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						MakeWeak();
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual FX_BOOL				IsType(FX_LPCSTR sClassName){return TRUE;};
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual CFX_ByteString		GetClassName(){return "";};
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual FX_BOOL				InitInstance(IFXJS_Context* cc){return TRUE;};
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual FX_BOOL				ExitInstance(){return TRUE;};
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	operator					JSFXObject () {return v8::Local<v8::Object>::New(m_pIsolate, m_pObject);}
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	operator					CJS_EmbedObj* (){return m_pEmbedObj;};
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void						SetEmbedObject(CJS_EmbedObj* pObj){m_pEmbedObj = pObj;};
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_EmbedObj *				GetEmbedObject(){return m_pEmbedObj;};
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	static CPDFSDK_PageView *	JSGetPageView(IFXJS_Context* cc);
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	static int					MsgBox(CPDFDoc_Environment* pApp, CPDFSDK_PageView* pPageView, FX_LPCWSTR swMsg, FX_LPCWSTR swTitle = NULL, FX_UINT nType = 0,FX_UINT nIcon = 0);
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	static void					Alert(CJS_Context* pContext, FX_LPCWSTR swMsg);
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	v8::Isolate*					GetIsolate() {return m_pIsolate;}
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprotected:
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_EmbedObj *				m_pEmbedObj;
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	v8::Persistent<v8::Object>			m_pObject;
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	v8::Isolate*					m_pIsolate;
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstruct JS_TIMER_MAP
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_UINT nID;
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Timer * pTimer;
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovtypedef CFX_ArrayTemplate<JS_TIMER_MAP*>	CTimerMapArray;
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstruct JS_TIMER_MAPARRAY
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_TIMER_MAPARRAY()
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	~JS_TIMER_MAPARRAY()
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		Reset();
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void Reset()
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		for (int i=0,sz=m_Array.GetSize(); i<sz; i++)
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			delete m_Array.GetAt(i);
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_Array.RemoveAll();
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void SetAt(FX_UINT nIndex,CJS_Timer * pTimer)
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		int i = Find(nIndex);
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (i>=0)
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (JS_TIMER_MAP * pMap = m_Array.GetAt(i))
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				pMap->pTimer = pTimer;
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (JS_TIMER_MAP * pMap = new JS_TIMER_MAP)
109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				pMap->nID = nIndex;
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				pMap->pTimer = pTimer;
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				m_Array.Add(pMap);
113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Timer * GetAt(FX_UINT nIndex)
118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		int i = Find(nIndex);
120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (i>=0)
122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (JS_TIMER_MAP * pMap = m_Array.GetAt(i))
124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				return pMap->pTimer;
125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return NULL;
127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void RemoveAt(FX_UINT nIndex)
130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		int i = Find(nIndex);
132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (i>=0)
134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			delete m_Array.GetAt(i);
136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_Array.RemoveAt(i);
137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		//To prevent potential fake memory leak reported by vc6.
139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if(m_Array.GetSize() == 0)
140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_Array.RemoveAll();
141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int Find(FX_UINT nIndex)
144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		for (int i=0,sz=m_Array.GetSize(); i<sz; i++)
146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (JS_TIMER_MAP * pMap = m_Array.GetAt(i))
148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (pMap->nID == nIndex)
150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					return i;
151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return -1;
155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CTimerMapArray		m_Array;
158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstatic JS_TIMER_MAPARRAY	m_sTimeMap;
161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CJS_Runtime;
163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovclass CJS_Timer
165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Timer(CJS_EmbedObj * pObj,CPDFDoc_Environment* pApp): m_pEmbedObj(pObj),
168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_nTimerID(0),
169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_bProcessing(FALSE),
170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_dwStartTime(0),
171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_dwTimeOut(0),
172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_dwElapse(0),
173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pRuntime(NULL),
174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_nType(0),
175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pApp(pApp)
176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	virtual ~CJS_Timer()
180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		KillJSTimer();
182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovpublic:
185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_UINT SetJSTimer(FX_UINT nElapse)
186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (m_nTimerID)KillJSTimer();
188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		IFX_SystemHandler* pHandler = m_pApp->GetSysHandler();
189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_nTimerID = pHandler->SetTimer(nElapse,TimerProc);
190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_sTimeMap.SetAt(m_nTimerID,this);
191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_dwElapse = nElapse;
192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return m_nTimerID;
193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	};
194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void KillJSTimer()
196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (m_nTimerID)
198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			IFX_SystemHandler* pHandler = m_pApp->GetSysHandler();
200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pHandler->KillTimer(m_nTimerID);
201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_sTimeMap.RemoveAt(m_nTimerID);
202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_nTimerID = 0;
203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	};
205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void SetType(int nType)
207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_nType = nType;
209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int GetType() const
212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return m_nType;
214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void SetStartTime(FX_DWORD dwStartTime)
217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_dwStartTime = dwStartTime;
219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_DWORD GetStartTime() const
222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return m_dwStartTime;
224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void SetTimeOut(FX_DWORD dwTimeOut)
227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_dwTimeOut = dwTimeOut;
229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_DWORD GetTimeOut() const
232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return m_dwTimeOut;
234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void SetRuntime(CJS_Runtime* pRuntime)
237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pRuntime = pRuntime;
239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Runtime* GetRuntime() const
242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return m_pRuntime;
244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	void SetJScript(const CFX_WideString& script)
247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_swJScript = script;
249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString GetJScript() const
252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return m_swJScript;
254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	static void TimerProc(int idEvent)
257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (CJS_Timer * pTimer = m_sTimeMap.GetAt(idEvent))
259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (!pTimer->m_bProcessing)
261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				pTimer->m_bProcessing = TRUE;
263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (pTimer->m_pEmbedObj) pTimer->m_pEmbedObj->TimerProc(pTimer);
264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				pTimer->m_bProcessing = FALSE;
265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			else
267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			//	TRACE(L"BUSY!\n");
269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	};
272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovprivate:
274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_UINT							m_nTimerID;
275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_EmbedObj*					m_pEmbedObj;
276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL							m_bProcessing;
277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//data
279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_DWORD							m_dwStartTime;
280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_DWORD							m_dwTimeOut;
281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_DWORD						m_dwElapse;
282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Runtime*					m_pRuntime;
283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString					m_swJScript;
284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int								m_nType; //0:Interval; 1:TimeOut
285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFDoc_Environment*			m_pApp;
287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif //_JS_OBJECT_H_
289