Refactor fxjs_v8 and add embeddertests for it.
[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_FieldEvent {
19  public:
20   CFX_WideString sTargetName;
21   JS_EVENT_T eEventType;
22   CJS_FieldEvent* pNext;
23 };
24
25 class CJS_Runtime : public IFXJS_Runtime {
26  public:
27   explicit CJS_Runtime(CPDFDoc_Environment* pApp);
28   ~CJS_Runtime() override;
29
30   // IFXJS_Runtime
31   IFXJS_Context* NewContext() override;
32   void ReleaseContext(IFXJS_Context* pContext) override;
33   IFXJS_Context* GetCurrentContext() override;
34   void SetReaderDocument(CPDFSDK_Document* pReaderDoc) override;
35   CPDFSDK_Document* GetReaderDocument() override { return m_pDocument; }
36
37   CPDFDoc_Environment* GetReaderApp() const { return m_pApp; }
38
39   FX_BOOL AddEventToLoop(const CFX_WideString& sTargetName,
40                          JS_EVENT_T eEventType);
41   void RemoveEventInLoop(const CFX_WideString& sTargetName,
42                          JS_EVENT_T eEventType);
43   void RemoveEventsInLoop(CJS_FieldEvent* pStart);
44
45   void BeginBlock() { m_bBlocking = TRUE; }
46   void EndBlock() { m_bBlocking = FALSE; }
47   FX_BOOL IsBlocking() const { return m_bBlocking; }
48
49   v8::Isolate* GetIsolate() const { return m_isolate; }
50   v8::Local<v8::Context> NewJSContext();
51
52  private:
53   void DefineJSObjects();
54
55   CFX_ArrayTemplate<CJS_Context*> m_ContextArray;
56   CPDFDoc_Environment* m_pApp;
57   CPDFSDK_Document* m_pDocument;
58   FX_BOOL m_bBlocking;
59   CJS_FieldEvent* m_pFieldEventPath;
60   v8::Isolate* m_isolate;
61   bool m_isolateManaged;
62   nonstd::unique_ptr<JS_ArrayBufferAllocator> m_pArrayBufferAllocator;
63   v8::Global<v8::Context> m_context;
64 };
65
66 #endif  // FPDFSDK_INCLUDE_JAVASCRIPT_JS_RUNTIME_H_