Cleanup some numeric code.
[pdfium.git] / fpdfsdk / src / 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_SRC_JAVASCRIPT_JS_RUNTIME_H_
8 #define FPDFSDK_SRC_JAVASCRIPT_JS_RUNTIME_H_
9
10 #include <set>
11 #include <utility>
12
13 #include "../../../core/include/fxcrt/fx_basic.h"
14 #include "../../include/javascript/IJavaScript.h"
15 #include "../../include/jsapi/fxjs_v8.h"
16 #include "JS_EventHandler.h"
17
18 class CJS_Context;
19
20 class CJS_Runtime : public IJS_Runtime {
21  public:
22   class Observer {
23    public:
24     virtual void OnDestroyed() = 0;
25
26    protected:
27     virtual ~Observer() {}
28   };
29
30   using FieldEvent = std::pair<CFX_WideString, JS_EVENT_T>;
31
32   static CJS_Runtime* FromContext(const IJS_Context* cc);
33
34   explicit CJS_Runtime(CPDFDoc_Environment* pApp);
35   ~CJS_Runtime() override;
36
37   // IJS_Runtime
38   IJS_Context* NewContext() override;
39   void ReleaseContext(IJS_Context* pContext) override;
40   IJS_Context* GetCurrentContext() override;
41   void SetReaderDocument(CPDFSDK_Document* pReaderDoc) override;
42   CPDFSDK_Document* GetReaderDocument() override { return m_pDocument; }
43   int Execute(IJS_Context* cc,
44               const wchar_t* script,
45               CFX_WideString* info) override;
46
47   CPDFDoc_Environment* GetReaderApp() const { return m_pApp; }
48
49   // Returns true if the event isn't already found in the set.
50   bool AddEventToSet(const FieldEvent& event);
51   void RemoveEventFromSet(const FieldEvent& event);
52
53   void BeginBlock() { m_bBlocking = TRUE; }
54   void EndBlock() { m_bBlocking = FALSE; }
55   FX_BOOL IsBlocking() const { return m_bBlocking; }
56
57   v8::Isolate* GetIsolate() const { return m_isolate; }
58   v8::Local<v8::Context> NewJSContext();
59
60   void AddObserver(Observer* observer);
61   void RemoveObserver(Observer* observer);
62
63  private:
64   void DefineJSObjects();
65
66   CFX_ArrayTemplate<CJS_Context*> m_ContextArray;
67   CPDFDoc_Environment* m_pApp;
68   CPDFSDK_Document* m_pDocument;
69   FX_BOOL m_bBlocking;
70   std::set<FieldEvent> m_FieldEventSet;
71   v8::Isolate* m_isolate;
72   bool m_isolateManaged;
73   v8::Global<v8::Context> m_context;
74   std::set<Observer*> m_observers;
75 };
76
77 #endif  // FPDFSDK_SRC_JAVASCRIPT_JS_RUNTIME_H_