1// Copyright 2014 PDFium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7#ifndef FPDFSDK_INCLUDE_JAVASCRIPT_JS_RUNTIME_H_ 8#define FPDFSDK_INCLUDE_JAVASCRIPT_JS_RUNTIME_H_ 9 10#include "../../../third_party/base/nonstd_unique_ptr.h" 11#include "../../../core/include/fxcrt/fx_basic.h" 12#include "../jsapi/fxjs_v8.h" 13#include "IJavaScript.h" 14#include "JS_EventHandler.h" 15 16class CJS_Context; 17 18class CJS_ArrayBufferAllocator : public v8::ArrayBuffer::Allocator { 19 void* Allocate(size_t length) override; 20 void* AllocateUninitialized(size_t length) override; 21 void Free(void* data, size_t length) override; 22}; 23 24class CJS_FieldEvent 25{ 26public: 27 CFX_WideString sTargetName; 28 JS_EVENT_T eEventType; 29 CJS_FieldEvent* pNext; 30}; 31 32class CJS_Runtime : public IFXJS_Runtime 33{ 34public: 35 CJS_Runtime(CPDFDoc_Environment * pApp); 36 virtual ~CJS_Runtime(); 37 38 virtual IFXJS_Context * NewContext(); 39 virtual void ReleaseContext(IFXJS_Context * pContext); 40 virtual IFXJS_Context* GetCurrentContext(); 41 42 virtual void SetReaderDocument(CPDFSDK_Document *pReaderDoc); 43 virtual CPDFSDK_Document * GetReaderDocument(){return m_pDocument;} 44 45 CPDFDoc_Environment * GetReaderApp(){return m_pApp;} 46 47 FX_BOOL InitJSObjects(); 48 49 FX_BOOL AddEventToLoop(const CFX_WideString& sTargetName, JS_EVENT_T eEventType); 50 void RemoveEventInLoop(const CFX_WideString& sTargetName, JS_EVENT_T eEventType); 51 void RemoveEventsInLoop(CJS_FieldEvent* pStart); 52 53 void BeginBlock(){m_bBlocking = TRUE;} 54 void EndBlock(){m_bBlocking = FALSE;} 55 FX_BOOL IsBlocking(){return m_bBlocking;} 56 57 operator IJS_Runtime*() {return (IJS_Runtime*)m_isolate;} 58 v8::Isolate* GetIsolate(){return m_isolate;}; 59 void SetIsolate(v8::Isolate* isolate){m_isolate = isolate;} 60 61 v8::Local<v8::Context> NewJSContext(); 62protected: 63 CFX_ArrayTemplate<CJS_Context*> m_ContextArray; 64 CPDFDoc_Environment* m_pApp; 65 CPDFSDK_Document* m_pDocument; 66 FX_BOOL m_bBlocking; 67 FX_BOOL m_bRegistered; 68 CJS_FieldEvent* m_pFieldEventPath; 69 70 v8::Isolate* m_isolate; 71 nonstd::unique_ptr<CJS_ArrayBufferAllocator> m_pArrayBufferAllocator; 72 v8::Global<v8::Context> m_context; 73}; 74 75#endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_RUNTIME_H_ 76