summaryrefslogtreecommitdiff
path: root/fpdfsdk/src/javascript/JS_Object.h
diff options
context:
space:
mode:
Diffstat (limited to 'fpdfsdk/src/javascript/JS_Object.h')
-rw-r--r--fpdfsdk/src/javascript/JS_Object.h116
1 files changed, 116 insertions, 0 deletions
diff --git a/fpdfsdk/src/javascript/JS_Object.h b/fpdfsdk/src/javascript/JS_Object.h
new file mode 100644
index 0000000000..82d1da9ee9
--- /dev/null
+++ b/fpdfsdk/src/javascript/JS_Object.h
@@ -0,0 +1,116 @@
+// 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_SRC_JAVASCRIPT_JS_OBJECT_H_
+#define FPDFSDK_SRC_JAVASCRIPT_JS_OBJECT_H_
+
+#include <map>
+
+#include "../../../third_party/base/nonstd_unique_ptr.h"
+#include "../../include/fsdk_define.h" // For FX_UINT
+#include "../../include/jsapi/fxjs_v8.h"
+#include "JS_Runtime.h"
+
+class CJS_Context;
+class CJS_Object;
+class CJS_Timer;
+class CPDFDoc_Environment;
+class CJS_EmbedObj {
+ public:
+ explicit CJS_EmbedObj(CJS_Object* pJSObject);
+ virtual ~CJS_EmbedObj();
+
+ virtual void TimerProc(CJS_Timer* pTimer) {}
+
+ CJS_Object* GetJSObject() const { return m_pJSObject; }
+
+ int MsgBox(CPDFDoc_Environment* pApp,
+ const FX_WCHAR* swMsg,
+ const FX_WCHAR* swTitle,
+ FX_UINT nType,
+ FX_UINT nIcon);
+ void Alert(CJS_Context* pContext, const FX_WCHAR* swMsg);
+
+ protected:
+ CJS_Object* m_pJSObject;
+};
+
+class CJS_Object {
+ public:
+ explicit CJS_Object(v8::Local<v8::Object> pObject);
+ virtual ~CJS_Object();
+
+ void MakeWeak();
+ void Dispose();
+
+ virtual FX_BOOL IsType(const FX_CHAR* sClassName) { return TRUE; }
+ virtual CFX_ByteString GetClassName() { return ""; }
+
+ virtual FX_BOOL InitInstance(IFXJS_Context* cc) { return TRUE; }
+ virtual FX_BOOL ExitInstance() { return TRUE; }
+
+ v8::Local<v8::Object> ToV8Object() { return m_pV8Object.Get(m_pIsolate); }
+
+ // Takes ownership of |pObj|.
+ void SetEmbedObject(CJS_EmbedObj* pObj) { m_pEmbedObj.reset(pObj); }
+ CJS_EmbedObj* GetEmbedObject() const { return m_pEmbedObj.get(); }
+
+ static int MsgBox(CPDFDoc_Environment* pApp,
+ const FX_WCHAR* swMsg,
+ const FX_WCHAR* swTitle,
+ FX_UINT nType,
+ FX_UINT nIcon);
+ static void Alert(CJS_Context* pContext, const FX_WCHAR* swMsg);
+
+ v8::Isolate* GetIsolate() { return m_pIsolate; }
+
+ protected:
+ nonstd::unique_ptr<CJS_EmbedObj> m_pEmbedObj;
+ v8::Global<v8::Object> m_pV8Object;
+ v8::Isolate* m_pIsolate;
+};
+
+class CJS_Timer : public CJS_Runtime::Observer {
+ public:
+ CJS_Timer(CJS_EmbedObj* pObj,
+ CPDFDoc_Environment* pApp,
+ CJS_Runtime* pRuntime,
+ int nType,
+ const CFX_WideString& script,
+ FX_DWORD dwElapse,
+ FX_DWORD dwTimeOut);
+ ~CJS_Timer() override;
+
+ void KillJSTimer();
+
+ int GetType() const { return m_nType; }
+ FX_DWORD GetTimeOut() const { return m_dwTimeOut; }
+ CJS_Runtime* GetRuntime() const { return m_bValid ? m_pRuntime : nullptr; }
+ CFX_WideString GetJScript() const { return m_swJScript; }
+
+ static void TimerProc(int idEvent);
+
+ private:
+ using TimerMap = std::map<FX_UINT, CJS_Timer*>;
+ static TimerMap* GetGlobalTimerMap();
+
+ // CJS_Runtime::Observer
+ void OnDestroyed() override;
+
+ FX_DWORD m_nTimerID;
+ CJS_EmbedObj* const m_pEmbedObj;
+ bool m_bProcessing;
+ bool m_bValid;
+
+ // data
+ const int m_nType; // 0:Interval; 1:TimeOut
+ const FX_DWORD m_dwTimeOut;
+ const CFX_WideString m_swJScript;
+ CJS_Runtime* const m_pRuntime;
+ CPDFDoc_Environment* const m_pApp;
+};
+
+#endif // FPDFSDK_SRC_JAVASCRIPT_JS_OBJECT_H_