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