// Copyright 2014 PDFium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com #ifndef _JS_RUNTIME_H_ #define _JS_RUNTIME_H_ class CJS_FieldEvent { public: CFX_WideString sTargetName; JS_EVENT_T eEventType; CJS_FieldEvent* pNext; }; class CJS_Runtime : public IFXJS_Runtime { public: CJS_Runtime(CPDFDoc_Environment * pApp); virtual ~CJS_Runtime(); virtual IFXJS_Context * NewContext(); virtual void ReleaseContext(IFXJS_Context * pContext); virtual IFXJS_Context* GetCurrentContext(); virtual void SetReaderDocument(CPDFSDK_Document *pReaderDoc); virtual CPDFSDK_Document * GetReaderDocument(){return m_pDocument;} virtual void GetObjectNames(CFX_WideStringArray& array); virtual void GetObjectConsts(const CFX_WideString& swObjName, CFX_WideStringArray& array); virtual void GetObjectProps(const CFX_WideString& swObjName, CFX_WideStringArray& array); virtual void GetObjectMethods(const CFX_WideString& swObjName, CFX_WideStringArray& array); virtual void Exit(); virtual void Enter(); virtual FX_BOOL IsEntered(); CPDFDoc_Environment * GetReaderApp(){return m_pApp;} FX_BOOL InitJSObjects(); FX_BOOL AddEventToLoop(const CFX_WideString& sTargetName, JS_EVENT_T eEventType); void RemoveEventInLoop(const CFX_WideString& sTargetName, JS_EVENT_T eEventType); void RemoveEventsInLoop(CJS_FieldEvent* pStart); void BeginBlock(){m_bBlocking = TRUE;} void EndBlock(){m_bBlocking = FALSE;} FX_BOOL IsBlocking(){return m_bBlocking;} operator IJS_Runtime*() {return (IJS_Runtime*)m_isolate;} v8::Isolate* GetIsolate(){return m_isolate;}; void SetIsolate(v8::Isolate* isolate){m_isolate = isolate;} v8::Handle<v8::Context> NewJSContext(); protected: CFX_ArrayTemplate<CJS_Context *> m_ContextArray; CPDFDoc_Environment * m_pApp; CPDFSDK_Document * m_pDocument; FX_BOOL m_bBlocking; CJS_FieldEvent* m_pFieldEventPath; v8::Isolate* m_isolate; v8::Persistent<v8::Context> m_context; FX_BOOL m_bRegistered; }; #endif //_JS_RUNTIME_H_