Replace CFX_MapPtrTemplate with std::map.
[pdfium.git] / fpdfsdk / include / javascript / JS_Runtime.h
index 32f8457..f08f4a3 100644 (file)
@@ -1,70 +1,75 @@
-// Copyright 2014 PDFium Authors. All rights reserved.\r
-// Use of this source code is governed by a BSD-style license that can be\r
-// found in the LICENSE file.\r
\r
-// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
-\r
-#ifndef _JS_RUNTIME_H_\r
-#define _JS_RUNTIME_H_\r
-\r
-class CJS_FieldEvent\r
-{\r
-public:\r
-       CFX_WideString          sTargetName;\r
-       JS_EVENT_T                      eEventType;\r
-       CJS_FieldEvent*         pNext;\r
-};\r
-\r
-class CJS_Runtime : public IFXJS_Runtime\r
-{\r
-public:\r
-       CJS_Runtime(CPDFDoc_Environment * pApp);\r
-       virtual ~CJS_Runtime();\r
-\r
-       virtual IFXJS_Context *                                 NewContext();\r
-       virtual void                                                    ReleaseContext(IFXJS_Context * pContext);\r
-       virtual IFXJS_Context*                                  GetCurrentContext();\r
-\r
-       virtual void                                                    SetReaderDocument(CPDFSDK_Document *pReaderDoc);\r
-       virtual CPDFSDK_Document *                              GetReaderDocument(){return m_pDocument;}\r
-\r
-       virtual void                                                    GetObjectNames(CFX_WideStringArray& array);\r
-       virtual void                                                    GetObjectConsts(const CFX_WideString& swObjName, CFX_WideStringArray& array);\r
-       virtual void                                                    GetObjectProps(const CFX_WideString& swObjName, CFX_WideStringArray& array);\r
-       virtual void                                                    GetObjectMethods(const CFX_WideString& swObjName, CFX_WideStringArray& array);\r
-\r
-       virtual void                                                    Exit();\r
-       virtual void                                                    Enter();\r
-       virtual FX_BOOL                                                 IsEntered();\r
-\r
-       CPDFDoc_Environment *                                                   GetReaderApp(){return m_pApp;}\r
-\r
-       FX_BOOL                                                                 InitJSObjects();\r
-\r
-       FX_BOOL                                                                 AddEventToLoop(const CFX_WideString& sTargetName, JS_EVENT_T eEventType);\r
-       void                                                                    RemoveEventInLoop(const CFX_WideString& sTargetName, JS_EVENT_T eEventType);\r
-       void                                                                    RemoveEventsInLoop(CJS_FieldEvent* pStart);\r
-\r
-       void                                                                    BeginBlock(){m_bBlocking = TRUE;}\r
-       void                                                                    EndBlock(){m_bBlocking = FALSE;}\r
-       FX_BOOL                                                                 IsBlocking(){return m_bBlocking;}\r
-\r
-       operator                                                                IJS_Runtime*() {return (IJS_Runtime*)m_isolate;}\r
-       v8::Isolate*                                                            GetIsolate(){return m_isolate;};\r
-       void                                                                    SetIsolate(v8::Isolate* isolate){m_isolate = isolate;}\r
-\r
-       v8::Handle<v8::Context>                                                 NewJSContext();\r
-protected:\r
-       CFX_ArrayTemplate<CJS_Context *>                m_ContextArray;\r
-       CPDFDoc_Environment *                                                   m_pApp;\r
-       CPDFSDK_Document *                                              m_pDocument;\r
-       FX_BOOL                                                                 m_bBlocking;\r
-       CJS_FieldEvent*                                                 m_pFieldEventPath;\r
-\r
-       v8::Isolate*                                                            m_isolate;\r
-       v8::Persistent<v8::Context>                                             m_context;\r
-       FX_BOOL                                                                 m_bRegistered;\r
-};\r
-\r
-#endif //_JS_RUNTIME_H_\r
-\r
+// Copyright 2014 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef FPDFSDK_INCLUDE_JAVASCRIPT_JS_RUNTIME_H_
+#define FPDFSDK_INCLUDE_JAVASCRIPT_JS_RUNTIME_H_
+
+#include "../../../third_party/base/nonstd_unique_ptr.h"
+#include "../../../core/include/fxcrt/fx_basic.h"
+#include "../jsapi/fxjs_v8.h"
+#include "IJavaScript.h"
+#include "JS_EventHandler.h"
+
+class CJS_Context;
+
+class CJS_ArrayBufferAllocator : public v8::ArrayBuffer::Allocator {
+    void* Allocate(size_t length) override;
+    void* AllocateUninitialized(size_t length) override;
+    void Free(void* data, size_t length) override;
+};
+
+class CJS_FieldEvent
+{
+public:
+       CFX_WideString          sTargetName;
+       JS_EVENT_T                      eEventType;
+       CJS_FieldEvent*         pNext;
+};
+
+class CJS_Runtime : public IFXJS_Runtime
+{
+public:
+       CJS_Runtime(CPDFDoc_Environment * pApp);
+       virtual ~CJS_Runtime();
+
+       virtual IFXJS_Context *                                 NewContext();
+       virtual void                                                    ReleaseContext(IFXJS_Context * pContext);
+       virtual IFXJS_Context*                                  GetCurrentContext();
+
+       virtual void                                                    SetReaderDocument(CPDFSDK_Document *pReaderDoc);
+       virtual CPDFSDK_Document *                              GetReaderDocument(){return m_pDocument;}
+
+       CPDFDoc_Environment *                                                   GetReaderApp(){return m_pApp;}
+
+       FX_BOOL                                                                 InitJSObjects();
+
+       FX_BOOL                                                                 AddEventToLoop(const CFX_WideString& sTargetName, JS_EVENT_T eEventType);
+       void                                                                    RemoveEventInLoop(const CFX_WideString& sTargetName, JS_EVENT_T eEventType);
+       void                                                                    RemoveEventsInLoop(CJS_FieldEvent* pStart);
+
+       void                                                                    BeginBlock(){m_bBlocking = TRUE;}
+       void                                                                    EndBlock(){m_bBlocking = FALSE;}
+       FX_BOOL                                                                 IsBlocking(){return m_bBlocking;}
+
+       operator                                                                IJS_Runtime*() {return (IJS_Runtime*)m_isolate;}
+       v8::Isolate*                                                            GetIsolate(){return m_isolate;};
+       void                                                                    SetIsolate(v8::Isolate* isolate){m_isolate = isolate;}
+
+       v8::Local<v8::Context>                                                  NewJSContext();
+protected:
+       CFX_ArrayTemplate<CJS_Context*>         m_ContextArray;
+       CPDFDoc_Environment*                                                    m_pApp;
+       CPDFSDK_Document*                                               m_pDocument;
+       FX_BOOL                                                                 m_bBlocking;
+       FX_BOOL                                                                 m_bRegistered;
+       CJS_FieldEvent*                                                 m_pFieldEventPath;
+
+       v8::Isolate* m_isolate;
+       nonstd::unique_ptr<CJS_ArrayBufferAllocator> m_pArrayBufferAllocator;
+       v8::Global<v8::Context> m_context;
+};
+
+#endif  // FPDFSDK_INCLUDE_JAVASCRIPT_JS_RUNTIME_H_