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.
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
7 #ifndef FPDFSDK_INCLUDE_JAVASCRIPT_JS_RUNTIME_H_
8 #define FPDFSDK_INCLUDE_JAVASCRIPT_JS_RUNTIME_H_
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"
18 class 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;
27 CFX_WideString sTargetName;
28 JS_EVENT_T eEventType;
29 CJS_FieldEvent* pNext;
32 class CJS_Runtime : public IFXJS_Runtime
35 CJS_Runtime(CPDFDoc_Environment * pApp);
36 virtual ~CJS_Runtime();
38 virtual IFXJS_Context * NewContext();
39 virtual void ReleaseContext(IFXJS_Context * pContext);
40 virtual IFXJS_Context* GetCurrentContext();
42 virtual void SetReaderDocument(CPDFSDK_Document *pReaderDoc);
43 virtual CPDFSDK_Document * GetReaderDocument(){return m_pDocument;}
45 CPDFDoc_Environment * GetReaderApp(){return m_pApp;}
49 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);
53 void BeginBlock(){m_bBlocking = true;}
54 void EndBlock(){m_bBlocking = false;}
55 bool IsBlocking(){return m_bBlocking;}
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;}
61 v8::Local<v8::Context> NewJSContext();
63 CFX_ArrayTemplate<CJS_Context*> m_ContextArray;
64 CPDFDoc_Environment* m_pApp;
65 CPDFSDK_Document* m_pDocument;
67 CJS_FieldEvent* m_pFieldEventPath;
69 v8::Isolate* m_isolate;
70 nonstd::unique_ptr<CJS_ArrayBufferAllocator> m_pArrayBufferAllocator;
71 v8::Global<v8::Context> m_context;
74 #endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_RUNTIME_H_