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#include "../../include/javascript/JavaScript.h"
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/IJavaScript.h"
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JS_EventHandler.h"
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JS_Runtime.h"
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JS_Context.h"
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JS_Define.h"
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JS_Object.h"
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JS_Value.h"
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/Document.h"
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/app.h"
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/color.h"
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/Consts.h"
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/Document.h"
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/event.h"
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/Field.h"
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/Icon.h"
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/PublicMethods.h"
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/report.h"
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/util.h"
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JS_GlobalData.h"
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/global.h"
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/console.h"
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_RuntimeFactory::~CJS_RuntimeFactory()
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovIFXJS_Runtime*					CJS_RuntimeFactory::NewJSRuntime(CPDFDoc_Environment* pApp)
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!m_bInit)
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		JS_Initial();
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_bInit = TRUE;
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return new CJS_Runtime(pApp);
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid							CJS_RuntimeFactory::AddRef()
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//to do.Should be implemented as atom manipulation.
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_nRef++;
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid							CJS_RuntimeFactory::Release()
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(m_bInit)
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		//to do.Should be implemented as atom manipulation.
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (--m_nRef == 0)
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			JS_Release();
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			ReleaseGlobalData();
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_bInit = FALSE;
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid							CJS_RuntimeFactory::DeleteJSRuntime(IFXJS_Runtime* pRuntime)
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(pRuntime)
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		delete (CJS_Runtime*)pRuntime;
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_GlobalData*	CJS_RuntimeFactory::NewGlobalData(CPDFDoc_Environment* pApp)
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pGlobalData)
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_nGlobalDataCount++;
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return m_pGlobalData;
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_nGlobalDataCount = 1;
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pGlobalData = new CJS_GlobalData(pApp);
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return m_pGlobalData;
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_RuntimeFactory::ReleaseGlobalData()
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_nGlobalDataCount--;
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_nGlobalDataCount <= 0)
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 		delete m_pGlobalData;
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 		m_pGlobalData = NULL;
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ------------------------------ CJS_Runtime ------------------------------ */
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Runtime::CJS_Runtime(CPDFDoc_Environment * pApp) :
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pApp(pApp),
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pDocument(NULL),
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pFieldEventPath(NULL),
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_bBlocking(FALSE),
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_bRegistered(FALSE)
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_isolate = v8::Isolate::New();
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//m_isolate->Enter();
106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	InitJSObjects();
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Context * pContext = (CJS_Context*)NewContext();
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_InitialRuntime(*this, this, pContext, m_context);
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ReleaseContext(pContext);
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
114ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Runtime::~CJS_Runtime()
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	for (int i=0, sz=m_ContextArray.GetSize(); i<sz; i++)
117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		delete m_ContextArray.GetAt(i);
118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_ContextArray.RemoveAll();
120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_ReleaseRuntime(*this, m_context);
122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	RemoveEventsInLoop(m_pFieldEventPath);
124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pApp = NULL;
126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pDocument = NULL;
127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pFieldEventPath = NULL;
128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_context.Reset();
129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//m_isolate->Exit();
131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_isolate->Dispose();
132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
134ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL CJS_Runtime::InitJSObjects()
135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	v8::Isolate::Scope isolate_scope(GetIsolate());
137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	v8::HandleScope handle_scope(GetIsolate());
138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	v8::Handle<v8::Context> context = v8::Context::New(GetIsolate());
139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	v8::Context::Scope context_scope(context);
140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//0 - 8
141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CJS_Border::Init(*this, JS_STATIC) < 0) return FALSE;
142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CJS_Display::Init(*this, JS_STATIC) < 0) return FALSE;
143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CJS_Font::Init(*this, JS_STATIC) < 0) return FALSE;
144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CJS_Highlight::Init(*this, JS_STATIC) < 0) return FALSE;
145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CJS_Position::Init(*this, JS_STATIC) < 0) return FALSE;
146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CJS_ScaleHow::Init(*this, JS_STATIC) < 0) return FALSE;
147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CJS_ScaleWhen::Init(*this, JS_STATIC) < 0) return FALSE;
148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CJS_Style::Init(*this, JS_STATIC) < 0) return FALSE;
149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CJS_Zoomtype::Init(*this, JS_STATIC) < 0) return FALSE;
150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//9 - 11
152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CJS_App::Init(*this, JS_STATIC) < 0) return FALSE;
153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CJS_Color::Init(*this, JS_STATIC) < 0) return FALSE;
154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CJS_Console::Init(*this, JS_STATIC) < 0) return FALSE;
155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//12 - 14
157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CJS_Document::Init(*this, JS_DYNAMIC) < 0) return FALSE;
158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CJS_Event::Init(*this, JS_STATIC) < 0) return FALSE;
159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CJS_Field::Init(*this, JS_DYNAMIC) < 0) return FALSE;
160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//15 - 17
162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CJS_Global::Init(*this, JS_STATIC) < 0) return FALSE;
163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CJS_Icon::Init(*this, JS_DYNAMIC) < 0) return FALSE;
164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CJS_Util::Init(*this, JS_STATIC) < 0) return FALSE;
165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CJS_PublicMethods::Init(*this) < 0) return FALSE;
167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CJS_GlobalConsts::Init(*this) < 0) return FALSE;
168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CJS_GlobalArrays::Init(*this) < 0) return FALSE;
169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CJS_TimerObj::Init(*this, JS_DYNAMIC) < 0) return FALSE;
171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CJS_PrintParamsObj::Init(*this, JS_DYNAMIC) <0) return FALSE;
172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
176ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovIFXJS_Context* CJS_Runtime::NewContext()
177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Context * p = new CJS_Context(this);
179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_ContextArray.Add(p);
180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return p;
181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Runtime::ReleaseContext(IFXJS_Context * pContext)
184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Context* pJSContext = (CJS_Context*)pContext;
186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	for (int i=0, sz=m_ContextArray.GetSize(); i<sz; i++)
188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (pJSContext == m_ContextArray.GetAt(i))
190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			delete pJSContext;
192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_ContextArray.RemoveAt(i);
193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
198ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovIFXJS_Context*	CJS_Runtime::GetCurrentContext()
199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!m_ContextArray.GetSize())
201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return NULL;
202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return m_ContextArray.GetAt(m_ContextArray.GetSize()-1);
203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Runtime::SetReaderDocument(CPDFSDK_Document* pReaderDoc)
206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pDocument != pReaderDoc)
208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		v8::Isolate::Scope isolate_scope(m_isolate);
210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		v8::HandleScope handle_scope(m_isolate);
211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		v8::Local<v8::Context> context =v8::Local<v8::Context>::New(m_isolate, m_context);
212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		v8::Context::Scope context_scope(context);
213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pDocument = pReaderDoc;
215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (pReaderDoc)
217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			JSObject pThis = JS_GetThisObj(*this);
219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if(!pThis.IsEmpty())
220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				if (JS_GetObjDefnID(pThis) == JS_GetObjDefnID(*this, L"Document"))
222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				{
223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					if (CJS_Document* pJSDocument = (CJS_Document*)JS_GetPrivate(pThis))
224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					{
225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov						if (Document * pDocument = (Document*)pJSDocument->GetEmbedObject())
226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov							pDocument->AttachDoc(pReaderDoc);
227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov					}
228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				}
229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			JS_SetThisObj(*this, JS_GetObjDefnID(*this, L"Document"));
231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			JS_SetThisObj(*this, JS_GetObjDefnID(*this, L"app"));
235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
239ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL	CJS_Runtime::AddEventToLoop(const CFX_WideString& sTargetName, JS_EVENT_T eEventType)
240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (m_pFieldEventPath == NULL)
242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pFieldEventPath = new CJS_FieldEvent;
244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pFieldEventPath->sTargetName = sTargetName;
245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pFieldEventPath->eEventType = eEventType;
246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		m_pFieldEventPath->pNext = NULL;
247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return TRUE;
249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//to search
252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_FieldEvent* p = m_pFieldEventPath;
253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_FieldEvent* pLast = m_pFieldEventPath;
254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	while (p)
255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (p->eEventType == eEventType && p->sTargetName == sTargetName)
257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			return FALSE;
258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pLast = p;
260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		p = p->pNext;
261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//to add
264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_FieldEvent* pNew = new CJS_FieldEvent;
265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pNew->sTargetName = sTargetName;
266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pNew->eEventType = eEventType;
267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pNew->pNext = NULL;
268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pLast->pNext = pNew;
270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Runtime::RemoveEventInLoop(const CFX_WideString& sTargetName, JS_EVENT_T eEventType)
275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_BOOL bFind = FALSE;
277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_FieldEvent* p = m_pFieldEventPath;
279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_FieldEvent* pLast = NULL;
280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	while (p)
281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (p->eEventType == eEventType && p->sTargetName == sTargetName)
283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			bFind = TRUE;
285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			break;
286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pLast = p;
289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		p = p->pNext;
290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (bFind)
293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		RemoveEventsInLoop(p);
295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (p == m_pFieldEventPath)
297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			m_pFieldEventPath = NULL;
298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (pLast)
300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pLast->pNext = NULL;
301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Runtime::RemoveEventsInLoop(CJS_FieldEvent* pStart)
305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_FieldEvent* p = pStart;
307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	while (p)
309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_FieldEvent* pOld = p;
311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		p = pOld->pNext;
312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		delete pOld;
314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovv8::Handle<v8::Context>	CJS_Runtime::NewJSContext()
318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return v8::Local<v8::Context>::New(m_isolate, m_context);
320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
322ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCFX_WideString ChangeObjName(const CFX_WideString& str)
323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_WideString sRet = str;
325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	sRet.Replace((FX_LPCWSTR)L"_", (FX_LPCWSTR)L".");
326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return sRet;
327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Runtime::GetObjectNames(CFX_WideStringArray& array)
330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	array.RemoveAll();
332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	array.Add(CJS_Border::m_pClassName);
334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	array.Add(CJS_Display::m_pClassName);
335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	array.Add(CJS_Font::m_pClassName);
336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	array.Add(CJS_Highlight::m_pClassName);
337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	array.Add(CJS_Position::m_pClassName);
338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	array.Add(CJS_ScaleHow::m_pClassName);
339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	array.Add(CJS_ScaleWhen::m_pClassName);
340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	array.Add(CJS_Style::m_pClassName);
341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	array.Add(CJS_Zoomtype::m_pClassName);
342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	array.Add(CJS_App::m_pClassName);
344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	array.Add((FX_LPCWSTR)"this");
345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	array.Add(CJS_Event::m_pClassName);
346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	array.Add(CJS_Global::m_pClassName);
348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	array.Add(CJS_Util::m_pClassName);
349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Runtime::GetObjectConsts(const CFX_WideString& sObjName, CFX_WideStringArray& array)
352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JSConstSpec* pConsts = NULL;
354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nSize = 0;
355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (sObjName == CJS_Border::m_pClassName)
357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Border::GetConsts(pConsts, nSize);
358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (sObjName == CJS_Display::m_pClassName)
359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Display::GetConsts(pConsts, nSize);
360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (sObjName == CJS_Font::m_pClassName)
361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Font::GetConsts(pConsts, nSize);
362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (sObjName == CJS_Highlight::m_pClassName)
363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Highlight::GetConsts(pConsts, nSize);
364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (sObjName == CJS_Position::m_pClassName)
365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Position::GetConsts(pConsts, nSize);
366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (sObjName == CJS_ScaleHow::m_pClassName)
367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_ScaleHow::GetConsts(pConsts, nSize);
368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (sObjName == CJS_ScaleWhen::m_pClassName)
369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_ScaleWhen::GetConsts(pConsts, nSize);
370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (sObjName == CJS_Style::m_pClassName)
371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Style::GetConsts(pConsts, nSize);
372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (sObjName == CJS_Zoomtype::m_pClassName)
373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Zoomtype::GetConsts(pConsts, nSize);
374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (sObjName == CJS_App::m_pClassName)
376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_App::GetConsts(pConsts, nSize);
377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (sObjName == CJS_Color::m_pClassName)
378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Color::GetConsts(pConsts, nSize);
379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (sObjName == L"this")
381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (GetReaderDocument())
383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CJS_Document::GetConsts(pConsts, nSize);
384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CJS_App::GetConsts(pConsts, nSize);
386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (sObjName == CJS_Event::m_pClassName)
389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Event::GetConsts(pConsts, nSize);
390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (sObjName == CJS_Field::m_pClassName)
391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Field::GetConsts(pConsts, nSize);
392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (sObjName == CJS_Global::m_pClassName)
393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Global::GetConsts(pConsts, nSize);
394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (sObjName == CJS_Util::m_pClassName)
395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Util::GetConsts(pConsts, nSize);
396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	for (int i=0; i<nSize; i++)
398ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		array.Add(pConsts[i].pName);
399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Runtime::GetObjectProps(const CFX_WideString& sObjName, CFX_WideStringArray& array)
402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JSPropertySpec* pProperties = NULL;
404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nSize = 0;
405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 	if (sObjName == CJS_App::m_pClassName)
407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_App::GetProperties(pProperties, nSize);
408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (sObjName == CJS_Color::m_pClassName)
409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Color::GetProperties(pProperties, nSize);
410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (sObjName == L"this")
411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (GetReaderDocument())
413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CJS_Document::GetProperties(pProperties, nSize);
414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CJS_App::GetProperties(pProperties, nSize);
416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (sObjName == CJS_Event::m_pClassName)
418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Event::GetProperties(pProperties, nSize);
419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (sObjName == CJS_Field::m_pClassName)
420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Field::GetProperties(pProperties, nSize);
421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (sObjName == CJS_Global::m_pClassName)
422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Global::GetProperties(pProperties, nSize);
423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (sObjName == CJS_Util::m_pClassName)
424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Util::GetProperties(pProperties, nSize);
425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	for (int i=0; i<nSize; i++)
427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		array.Add(pProperties[i].pName);
428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Runtime::GetObjectMethods(const CFX_WideString& sObjName, CFX_WideStringArray& array)
431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JSMethodSpec* pMethods = NULL;
433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nSize = 0;
434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 	 if (sObjName == CJS_App::m_pClassName)
436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_App::GetMethods(pMethods, nSize);
437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (sObjName == CJS_Color::m_pClassName)
438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Color::GetMethods(pMethods, nSize);
439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (sObjName == L"this")
440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (GetReaderDocument())
442ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CJS_Document::GetMethods(pMethods, nSize);
443ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
444ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CJS_App::GetMethods(pMethods, nSize);
445ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
446ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (sObjName == CJS_Event::m_pClassName)
447ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Event::GetMethods(pMethods, nSize);
448ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (sObjName == CJS_Field::m_pClassName)
449ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Field::GetMethods(pMethods, nSize);
450ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (sObjName == CJS_Global::m_pClassName)
451ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Global::GetMethods(pMethods, nSize);
452ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else if (sObjName == CJS_Util::m_pClassName)
453ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CJS_Util::GetMethods(pMethods, nSize);
454ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
455ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	for (int i=0; i<nSize; i++)
456ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		array.Add(pMethods[i].pName);
457ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
458ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
459ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL  CJS_Runtime::IsEntered()
460ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
461ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return v8::Isolate::GetCurrent() == m_isolate;
462ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
463ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid	CJS_Runtime::Exit()
464ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
465ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(m_isolate) m_isolate->Exit();
466ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
467ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid	CJS_Runtime::Enter()
468ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
469ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(m_isolate) m_isolate->Enter();
470ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
471