Rename Init methods to more accurately describe purpose
[pdfium.git] / fpdfsdk / include / javascript / JS_Runtime.h
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
16 class CJS_Context;
17
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;
22 };
23
24 class CJS_FieldEvent {
25  public:
26   CFX_WideString sTargetName;
27   JS_EVENT_T eEventType;
28   CJS_FieldEvent* pNext;
29 };
30
31 class CJS_Runtime : public IFXJS_Runtime {
32  public:
33   CJS_Runtime(CPDFDoc_Environment* pApp);
34   ~CJS_Runtime() override;
35
36   // IFXJS_Runtime
37   IFXJS_Context* NewContext() override;
38   void ReleaseContext(IFXJS_Context* pContext) override;
39   IFXJS_Context* GetCurrentContext() override;
40   void SetReaderDocument(CPDFSDK_Document* pReaderDoc) override;
41   CPDFSDK_Document* GetReaderDocument() override { return m_pDocument; }
42
43   CPDFDoc_Environment* GetReaderApp() const { return m_pApp; }
44
45   FX_BOOL AddEventToLoop(const CFX_WideString& sTargetName,
46                          JS_EVENT_T eEventType);
47   void RemoveEventInLoop(const CFX_WideString& sTargetName,
48                          JS_EVENT_T eEventType);
49   void RemoveEventsInLoop(CJS_FieldEvent* pStart);
50
51   void BeginBlock() { m_bBlocking = TRUE; }
52   void EndBlock() { m_bBlocking = FALSE; }
53   FX_BOOL IsBlocking() const { return m_bBlocking; }
54
55   v8::Isolate* GetIsolate() const { return m_isolate; }
56   v8::Local<v8::Context> NewJSContext();
57
58  private:
59   FX_BOOL DefineJSObjects();
60
61   CFX_ArrayTemplate<CJS_Context*> m_ContextArray;
62   CPDFDoc_Environment* m_pApp;
63   CPDFSDK_Document* m_pDocument;
64   FX_BOOL m_bBlocking;
65   CJS_FieldEvent* m_pFieldEventPath;
66   v8::Isolate* m_isolate;
67   bool m_isolateManaged;
68   nonstd::unique_ptr<CJS_ArrayBufferAllocator> m_pArrayBufferAllocator;
69   v8::Global<v8::Context> m_context;
70 };
71
72 #endif  // FPDFSDK_INCLUDE_JAVASCRIPT_JS_RUNTIME_H_