Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(691)

Side by Side Diff: fpdfsdk/include/javascript/JS_Object.h

Issue 1292283002: Merge to XFA: Tidy up JS_Object.h and JS_Object.cpp. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@xfa
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | fpdfsdk/src/javascript/JS_Object.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #ifndef FPDFSDK_INCLUDE_JAVASCRIPT_JS_OBJECT_H_ 7 #ifndef FPDFSDK_INCLUDE_JAVASCRIPT_JS_OBJECT_H_
8 #define FPDFSDK_INCLUDE_JAVASCRIPT_JS_OBJECT_H_ 8 #define FPDFSDK_INCLUDE_JAVASCRIPT_JS_OBJECT_H_
9 9
10 #include <map> 10 #include <map>
11 11
12 #include "../../../third_party/base/nonstd_unique_ptr.h"
13
12 #include "../fsdk_define.h" // For FX_UINT 14 #include "../fsdk_define.h" // For FX_UINT
13 #include "../fsdk_mgr.h" // For CPDFDoc_Environment 15 #include "../fsdk_mgr.h" // For CPDFDoc_Environment
14 #include "../fx_systemhandler.h" // For IFX_SystemHandler 16 #include "../fx_systemhandler.h" // For IFX_SystemHandler
15 #include "../jsapi/fxjs_v8.h" 17 #include "../jsapi/fxjs_v8.h"
16 18
17 class CPDFSDK_PageView; 19 class CPDFSDK_PageView;
20 class CJS_Context;
18 class CJS_Object; 21 class CJS_Object;
22 class CJS_Runtime;
19 class CJS_Timer; 23 class CJS_Timer;
20 class CJS_Context;
21 24
22 class CJS_EmbedObj { 25 class CJS_EmbedObj {
23 public: 26 public:
24 CJS_EmbedObj(CJS_Object* pJSObject); 27 explicit CJS_EmbedObj(CJS_Object* pJSObject);
25 virtual ~CJS_EmbedObj(); 28 virtual ~CJS_EmbedObj();
26 29
27 virtual void TimerProc(CJS_Timer* pTimer){}; 30 virtual void TimerProc(CJS_Timer* pTimer) {}
28
29 CJS_Timer* BeginTimer(CPDFDoc_Environment* pApp, FX_UINT nElapse); 31 CJS_Timer* BeginTimer(CPDFDoc_Environment* pApp, FX_UINT nElapse);
30 void EndTimer(CJS_Timer* pTimer); 32 void EndTimer(CJS_Timer* pTimer);
31 33
32 CJS_Object* GetJSObject() { return m_pJSObject; }; 34 CJS_Object* GetJSObject() const { return m_pJSObject; }
33 operator CJS_Object*() { return m_pJSObject; };
34 35
35 CPDFSDK_PageView* JSGetPageView(IFXJS_Context* cc); 36 CPDFSDK_PageView* JSGetPageView(IFXJS_Context* cc);
36 int MsgBox(CPDFDoc_Environment* pApp, 37 int MsgBox(CPDFDoc_Environment* pApp,
37 CPDFSDK_PageView* pPageView, 38 CPDFSDK_PageView* pPageView,
38 const FX_WCHAR* swMsg, 39 const FX_WCHAR* swMsg,
39 const FX_WCHAR* swTitle = NULL, 40 const FX_WCHAR* swTitle = NULL,
40 FX_UINT nType = 0, 41 FX_UINT nType = 0,
41 FX_UINT nIcon = 0); 42 FX_UINT nIcon = 0);
42 void Alert(CJS_Context* pContext, const FX_WCHAR* swMsg); 43 void Alert(CJS_Context* pContext, const FX_WCHAR* swMsg);
43 44
44 protected: 45 protected:
45 CJS_Object* m_pJSObject; 46 CJS_Object* m_pJSObject;
46 }; 47 };
47 48
48 class CJS_Object { 49 class CJS_Object {
49 public: 50 public:
50 CJS_Object(JSFXObject pObject); 51 explicit CJS_Object(JSFXObject pObject);
51 virtual ~CJS_Object(void); 52 virtual ~CJS_Object(void);
52 53
53 void MakeWeak(); 54 void MakeWeak();
54 void Dispose(); 55 void Dispose();
55 56
56 virtual FX_BOOL IsType(const FX_CHAR* sClassName) { return TRUE; }; 57 virtual FX_BOOL IsType(const FX_CHAR* sClassName) { return TRUE; }
57 virtual CFX_ByteString GetClassName() { return ""; }; 58 virtual CFX_ByteString GetClassName() { return ""; }
58 59
59 virtual FX_BOOL InitInstance(IFXJS_Context* cc) { return TRUE; }; 60 virtual FX_BOOL InitInstance(IFXJS_Context* cc) { return TRUE; }
60 virtual FX_BOOL ExitInstance() { return TRUE; }; 61 virtual FX_BOOL ExitInstance() { return TRUE; }
61 62
62 operator JSFXObject() { 63 operator JSFXObject() {
63 return v8::Local<v8::Object>::New(m_pIsolate, m_pObject); 64 return v8::Local<v8::Object>::New(m_pIsolate, m_pObject);
64 } 65 }
65 operator CJS_EmbedObj*() { return m_pEmbedObj; };
66 66
67 void SetEmbedObject(CJS_EmbedObj* pObj) { m_pEmbedObj = pObj; }; 67 // Takes ownership of |pObj|.
68 CJS_EmbedObj* GetEmbedObject() { return m_pEmbedObj; }; 68 void SetEmbedObject(CJS_EmbedObj* pObj) { m_pEmbedObj.reset(pObj); }
69 CJS_EmbedObj* GetEmbedObject() const { return m_pEmbedObj.get(); }
69 70
70 static CPDFSDK_PageView* JSGetPageView(IFXJS_Context* cc); 71 static CPDFSDK_PageView* JSGetPageView(IFXJS_Context* cc);
71 static int MsgBox(CPDFDoc_Environment* pApp, 72 static int MsgBox(CPDFDoc_Environment* pApp,
72 CPDFSDK_PageView* pPageView, 73 CPDFSDK_PageView* pPageView,
73 const FX_WCHAR* swMsg, 74 const FX_WCHAR* swMsg,
74 const FX_WCHAR* swTitle = NULL, 75 const FX_WCHAR* swTitle = NULL,
75 FX_UINT nType = 0, 76 FX_UINT nType = 0,
76 FX_UINT nIcon = 0); 77 FX_UINT nIcon = 0);
77 static void Alert(CJS_Context* pContext, const FX_WCHAR* swMsg); 78 static void Alert(CJS_Context* pContext, const FX_WCHAR* swMsg);
78 79
79 v8::Isolate* GetIsolate() { return m_pIsolate; } 80 v8::Isolate* GetIsolate() { return m_pIsolate; }
80 81
81 protected: 82 protected:
82 CJS_EmbedObj* m_pEmbedObj; 83 nonstd::unique_ptr<CJS_EmbedObj> m_pEmbedObj;
83 v8::Global<v8::Object> m_pObject; 84 v8::Global<v8::Object> m_pObject;
84 v8::Isolate* m_pIsolate; 85 v8::Isolate* m_pIsolate;
85 }; 86 };
86 87
87 using JSTimerMap = std::map<FX_UINT, CJS_Timer*>;
88 JSTimerMap* GetGlobalTimerMap();
89
90 class CJS_Runtime;
91
92 class CJS_Timer { 88 class CJS_Timer {
93 public: 89 public:
94 CJS_Timer(CJS_EmbedObj* pObj, CPDFDoc_Environment* pApp) 90 CJS_Timer(CJS_EmbedObj* pObj, CPDFDoc_Environment* pApp)
95 : m_nTimerID(0), 91 : m_nTimerID(0),
96 m_pEmbedObj(pObj), 92 m_pEmbedObj(pObj),
97 m_bProcessing(FALSE), 93 m_bProcessing(FALSE),
98 m_dwStartTime(0), 94 m_dwStartTime(0),
99 m_dwTimeOut(0), 95 m_dwTimeOut(0),
100 m_dwElapse(0), 96 m_dwElapse(0),
101 m_pRuntime(NULL), 97 m_pRuntime(NULL),
102 m_nType(0), 98 m_nType(0),
103 m_pApp(pApp) {} 99 m_pApp(pApp) {}
104 100
105 virtual ~CJS_Timer() { KillJSTimer(); } 101 virtual ~CJS_Timer() { KillJSTimer(); }
106 102
107 public: 103 public:
108 FX_UINT SetJSTimer(FX_UINT nElapse) { 104 FX_UINT SetJSTimer(FX_UINT nElapse);
109 if (m_nTimerID) 105 void KillJSTimer();
110 KillJSTimer();
111 IFX_SystemHandler* pHandler = m_pApp->GetSysHandler();
112 m_nTimerID = pHandler->SetTimer(nElapse, TimerProc);
113 (*GetGlobalTimerMap())[m_nTimerID] = this;
114 m_dwElapse = nElapse;
115 return m_nTimerID;
116 };
117
118 void KillJSTimer() {
119 if (m_nTimerID) {
120 if (m_pApp == NULL) {
121 GetTimeMap().RemoveAt(m_nTimerID);
122 m_nTimerID = 0;
123 return;
124 }
125 IFX_SystemHandler* pHandler = m_pApp->GetSysHandler();
126 pHandler->KillTimer(m_nTimerID);
127 GetGlobalTimerMap()->erase(m_nTimerID);
128 m_nTimerID = 0;
129 }
130 };
131 106
132 void SetType(int nType) { m_nType = nType; } 107 void SetType(int nType) { m_nType = nType; }
133
134 int GetType() const { return m_nType; } 108 int GetType() const { return m_nType; }
135 109
136 void SetStartTime(FX_DWORD dwStartTime) { m_dwStartTime = dwStartTime; } 110 void SetStartTime(FX_DWORD dwStartTime) { m_dwStartTime = dwStartTime; }
137
138 FX_DWORD GetStartTime() const { return m_dwStartTime; } 111 FX_DWORD GetStartTime() const { return m_dwStartTime; }
139 112
140 void SetTimeOut(FX_DWORD dwTimeOut) { m_dwTimeOut = dwTimeOut; } 113 void SetTimeOut(FX_DWORD dwTimeOut) { m_dwTimeOut = dwTimeOut; }
141
142 FX_DWORD GetTimeOut() const { return m_dwTimeOut; } 114 FX_DWORD GetTimeOut() const { return m_dwTimeOut; }
143 115
144 void SetRuntime(CJS_Runtime* pRuntime) { m_pRuntime = pRuntime; } 116 void SetRuntime(CJS_Runtime* pRuntime) { m_pRuntime = pRuntime; }
145
146 CJS_Runtime* GetRuntime() const { return m_pRuntime; } 117 CJS_Runtime* GetRuntime() const { return m_pRuntime; }
147 118
148 void SetJScript(const CFX_WideString& script) { m_swJScript = script; } 119 void SetJScript(const CFX_WideString& script) { m_swJScript = script; }
149
150 CFX_WideString GetJScript() const { return m_swJScript; } 120 CFX_WideString GetJScript() const { return m_swJScript; }
151 121
152 static void TimerProc(int idEvent) { 122 static void TimerProc(int idEvent);
153 const auto it = GetGlobalTimerMap()->find(idEvent);
154 if (it != GetGlobalTimerMap()->end()) {
155 CJS_Timer* pTimer = it->second;
156 if (!pTimer->m_bProcessing) {
157 pTimer->m_bProcessing = TRUE;
158 if (pTimer->m_pEmbedObj)
159 pTimer->m_pEmbedObj->TimerProc(pTimer);
160 pTimer->m_bProcessing = FALSE;
161 }
162 }
163 };
164 123
165 private: 124 private:
125 using TimerMap = std::map<FX_UINT, CJS_Timer*>;
126 static TimerMap* GetGlobalTimerMap();
127
166 FX_UINT m_nTimerID; 128 FX_UINT m_nTimerID;
167 CJS_EmbedObj* m_pEmbedObj; 129 CJS_EmbedObj* m_pEmbedObj;
168 FX_BOOL m_bProcessing; 130 FX_BOOL m_bProcessing;
169 131
170 // data 132 // data
171 FX_DWORD m_dwStartTime; 133 FX_DWORD m_dwStartTime;
172 FX_DWORD m_dwTimeOut; 134 FX_DWORD m_dwTimeOut;
173 FX_DWORD m_dwElapse; 135 FX_DWORD m_dwElapse;
174 CJS_Runtime* m_pRuntime; 136 CJS_Runtime* m_pRuntime;
175 CFX_WideString m_swJScript; 137 CFX_WideString m_swJScript;
176 int m_nType; // 0:Interval; 1:TimeOut 138 int m_nType; // 0:Interval; 1:TimeOut
177 139
178 CPDFDoc_Environment* m_pApp; 140 CPDFDoc_Environment* m_pApp;
179 }; 141 };
180 142
181 #endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_OBJECT_H_ 143 #endif // FPDFSDK_INCLUDE_JAVASCRIPT_JS_OBJECT_H_
OLDNEW
« no previous file with comments | « no previous file | fpdfsdk/src/javascript/JS_Object.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698