blob: 0e824f994cbf972d9cae4b6a4b0844803bc04368 [file] [log] [blame]
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -07001// 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 _JS_RUNTIME_H_
8#define _JS_RUNTIME_H_
9
Tom Sepezd2cc1b92015-04-30 15:19:03 -070010#include "../../../third_party/base/nonstd_unique_ptr.h"
Tom Sepez9a3f8122015-04-07 15:35:48 -070011#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
Tom Sepezd2cc1b92015-04-30 15:19:03 -070018class 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
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070024class 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
Bo Xufdc00a72014-10-28 23:03:33 -070045 CPDFDoc_Environment * GetReaderApp(){return m_pApp;}
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070046
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;}
Bo Xufdc00a72014-10-28 23:03:33 -070058 v8::Isolate* GetIsolate(){return m_isolate;};
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070059 void SetIsolate(v8::Isolate* isolate){m_isolate = isolate;}
60
Jochen Eisingerdfa2c992015-05-19 00:38:00 +020061 v8::Local<v8::Context> NewJSContext();
Bo Xufdc00a72014-10-28 23:03:33 -070062
63
64 virtual FX_BOOL GetHValueByName(FX_BSTR utf8Name, FXJSE_HVALUE hValue);
65 virtual FX_BOOL SetHValueByName(FX_BSTR utf8Name, FXJSE_HVALUE hValue);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070066protected:
Tom Sepezd2cc1b92015-04-30 15:19:03 -070067 CFX_ArrayTemplate<CJS_Context*> m_ContextArray;
68 CPDFDoc_Environment* m_pApp;
69 CPDFSDK_Document* m_pDocument;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070070 FX_BOOL m_bBlocking;
Tom Sepezd2cc1b92015-04-30 15:19:03 -070071 FX_BOOL m_bRegistered;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070072 CJS_FieldEvent* m_pFieldEventPath;
73
Tom Sepezd2cc1b92015-04-30 15:19:03 -070074 v8::Isolate* m_isolate;
75 nonstd::unique_ptr<CJS_ArrayBufferAllocator> m_pArrayBufferAllocator;
Jochen Eisingerdfa2c992015-05-19 00:38:00 +020076 v8::Global<v8::Context> m_context;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070077};
78
79#endif //_JS_RUNTIME_H_
80