Get rid of fifteen copies of m_sTimeMap and their initializers.
[pdfium.git] / fpdfsdk / src / javascript / JS_Object.cpp
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 #include "../../include/javascript/JavaScript.h"
8 #include "../../include/javascript/IJavaScript.h"
9 #include "../../include/javascript/JS_Define.h"
10 #include "../../include/javascript/JS_Object.h"
11 // #include "../../include/javascript/JS_MsgBox.h"
12 // #include "../../include/javascript/JS_ResMgr.h"
13 #include "../../include/javascript/JS_Context.h"
14
15 JS_TIMER_MAPARRAY& GetTimeMap()
16 {
17   // Leak the timer array at shutdown.
18   static auto* timeMap = new JS_TIMER_MAPARRAY;
19   return *timeMap;
20 }
21
22 int FXJS_MsgBox(CPDFDoc_Environment* pApp, CPDFSDK_PageView* pPageView, FX_LPCWSTR swMsg, FX_LPCWSTR swTitle, FX_UINT nType, FX_UINT nIcon)
23 {
24         int nRet = 0;
25
26         if(pApp)
27         {
28                 CPDFSDK_Document* pDoc = pApp->GetCurrentDoc();
29                 if(pDoc)
30                         pDoc->KillFocusAnnot();
31                 nRet = pApp->JS_appAlert(swMsg, swTitle, nType, nIcon);
32         }
33
34         return nRet;
35 }
36
37 CPDFSDK_PageView* FXJS_GetPageView(IFXJS_Context* cc)
38 {
39         if (CJS_Context* pContext = (CJS_Context *)cc)
40         {
41                 if (pContext->GetReaderDocument())
42                         return NULL;
43         }
44         return NULL;
45 }
46
47 /* ---------------------------------  CJS_EmbedObj --------------------------------- */
48
49 CJS_EmbedObj::CJS_EmbedObj(CJS_Object* pJSObject) : 
50         m_pJSObject(pJSObject)
51 {
52 }
53
54 CJS_EmbedObj::~CJS_EmbedObj()
55 {
56         m_pJSObject = NULL;
57
58 }
59
60 CPDFSDK_PageView* CJS_EmbedObj::JSGetPageView(IFXJS_Context* cc)
61 {
62         return FXJS_GetPageView(cc);
63 }
64
65 int CJS_EmbedObj::MsgBox(CPDFDoc_Environment* pApp, CPDFSDK_PageView* pPageView,FX_LPCWSTR swMsg,FX_LPCWSTR swTitle,FX_UINT nType,FX_UINT nIcon)
66 {
67         return FXJS_MsgBox(pApp, pPageView, swMsg, swTitle, nType, nIcon);
68 }
69
70 void CJS_EmbedObj::Alert(CJS_Context* pContext, FX_LPCWSTR swMsg)
71 {
72         CJS_Object::Alert(pContext, swMsg);
73 }
74
75 CJS_Timer* CJS_EmbedObj::BeginTimer(CPDFDoc_Environment * pApp,FX_UINT nElapse)
76 {
77         CJS_Timer* pTimer = new CJS_Timer(this,pApp);
78         pTimer->SetJSTimer(nElapse);
79         
80         return pTimer;
81 }
82
83 void CJS_EmbedObj::EndTimer(CJS_Timer* pTimer)
84 {
85         ASSERT(pTimer != NULL);
86         pTimer->KillJSTimer();
87         delete pTimer;
88 }
89
90 FX_BOOL CJS_EmbedObj::IsSafeMode(IFXJS_Context* cc)
91 {
92         ASSERT(cc != NULL);
93
94         return TRUE;
95 }
96
97 /* ---------------------------------  CJS_Object --------------------------------- */
98 void  FreeObject(const v8::WeakCallbackData<v8::Object, CJS_Object>& data)
99 {
100         CJS_Object* pJSObj  = data.GetParameter();
101         if(pJSObj)
102         {
103                 pJSObj->ExitInstance();
104                 delete pJSObj;
105         }
106         v8::Local<v8::Object> obj = data.GetValue();
107         JS_FreePrivate(obj);
108 }
109
110 CJS_Object::CJS_Object(JSFXObject pObject) :m_pEmbedObj(NULL)
111 {
112         v8::Local<v8::Context> context = pObject->CreationContext();
113         m_pIsolate = context->GetIsolate();
114         m_pObject.Reset(m_pIsolate, pObject);
115 };
116
117 CJS_Object::~CJS_Object(void)
118 {
119         delete m_pEmbedObj;
120         m_pEmbedObj = NULL;
121
122         m_pObject.Reset();
123 };
124
125 void    CJS_Object::MakeWeak()
126 {
127         m_pObject.SetWeak(this, FreeObject);
128 }
129
130 CPDFSDK_PageView* CJS_Object::JSGetPageView(IFXJS_Context* cc)
131 {
132         return FXJS_GetPageView(cc);
133 }
134
135 int CJS_Object::MsgBox(CPDFDoc_Environment* pApp, CPDFSDK_PageView* pPageView, FX_LPCWSTR swMsg, FX_LPCWSTR swTitle, FX_UINT nType, FX_UINT nIcon)
136 {
137         return FXJS_MsgBox(pApp, pPageView, swMsg, swTitle, nType, nIcon);
138 }
139
140 void CJS_Object::Alert(CJS_Context* pContext, FX_LPCWSTR swMsg)
141 {
142         ASSERT(pContext != NULL);
143
144         if (pContext->IsMsgBoxEnabled())
145         {
146                 CPDFDoc_Environment* pApp = pContext->GetReaderApp();
147                 if(pApp)
148                         pApp->JS_appAlert(swMsg, NULL, 0, 3);
149         }
150 }
151
152