Re-land else-after-returns
[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_Context.h"
12
13 JS_TIMER_MAPARRAY& GetTimeMap()
14 {
15   // Leak the timer array at shutdown.
16   static auto* timeMap = new JS_TIMER_MAPARRAY;
17   return *timeMap;
18 }
19
20 int FXJS_MsgBox(CPDFDoc_Environment* pApp, CPDFSDK_PageView* pPageView, const FX_WCHAR* swMsg, const FX_WCHAR* swTitle, FX_UINT nType, FX_UINT nIcon)
21 {
22     if (!pApp)
23         return 0;
24
25     if (CPDFSDK_Document* pDoc = pApp->GetSDKDocument())
26         pDoc->KillFocusAnnot();
27
28     return pApp->JS_appAlert(swMsg, swTitle, nType, nIcon);
29 }
30
31 CPDFSDK_PageView* FXJS_GetPageView(IFXJS_Context* cc)
32 {
33     if (CJS_Context* pContext = (CJS_Context *)cc)
34     {
35         if (pContext->GetReaderDocument())
36             return NULL;
37     }
38     return NULL;
39 }
40
41 /* ---------------------------------  CJS_EmbedObj --------------------------------- */
42
43 CJS_EmbedObj::CJS_EmbedObj(CJS_Object* pJSObject) :
44     m_pJSObject(pJSObject)
45 {
46 }
47
48 CJS_EmbedObj::~CJS_EmbedObj()
49 {
50     m_pJSObject = NULL;
51
52 }
53
54 CPDFSDK_PageView* CJS_EmbedObj::JSGetPageView(IFXJS_Context* cc)
55 {
56     return FXJS_GetPageView(cc);
57 }
58
59 int CJS_EmbedObj::MsgBox(CPDFDoc_Environment* pApp, CPDFSDK_PageView* pPageView,const FX_WCHAR* swMsg,const FX_WCHAR* swTitle,FX_UINT nType,FX_UINT nIcon)
60 {
61     return FXJS_MsgBox(pApp, pPageView, swMsg, swTitle, nType, nIcon);
62 }
63
64 void CJS_EmbedObj::Alert(CJS_Context* pContext, const FX_WCHAR* swMsg)
65 {
66     CJS_Object::Alert(pContext, swMsg);
67 }
68
69 CJS_Timer* CJS_EmbedObj::BeginTimer(CPDFDoc_Environment * pApp,FX_UINT nElapse)
70 {
71     CJS_Timer* pTimer = new CJS_Timer(this,pApp);
72     pTimer->SetJSTimer(nElapse);
73
74     return pTimer;
75 }
76
77 void CJS_EmbedObj::EndTimer(CJS_Timer* pTimer)
78 {
79     ASSERT(pTimer != NULL);
80     pTimer->KillJSTimer();
81     delete pTimer;
82 }
83
84 /* ---------------------------------  CJS_Object --------------------------------- */
85 void  FreeObject(const v8::WeakCallbackInfo<CJS_Object>& data)
86 {
87     CJS_Object* pJSObj  = data.GetParameter();
88         pJSObj->ExitInstance();
89         delete pJSObj;
90     JS_FreePrivate(data.GetInternalField(0));
91 }
92
93 void  DisposeObject(const v8::WeakCallbackInfo<CJS_Object>& data)
94 {
95     CJS_Object* pJSObj  = data.GetParameter();
96         pJSObj->Dispose();
97         data.SetSecondPassCallback(FreeObject);
98 }
99
100 CJS_Object::CJS_Object(JSFXObject pObject) :m_pEmbedObj(NULL)
101 {
102     v8::Local<v8::Context> context = pObject->CreationContext();
103     m_pIsolate = context->GetIsolate();
104     m_pObject.Reset(m_pIsolate, pObject);
105 };
106
107 CJS_Object::~CJS_Object(void)
108 {
109     delete m_pEmbedObj;
110     m_pEmbedObj = NULL;
111
112     m_pObject.Reset();
113 };
114
115 void    CJS_Object::MakeWeak()
116 {
117     m_pObject.SetWeak(
118             this, DisposeObject, v8::WeakCallbackType::kInternalFields);
119 }
120
121 void    CJS_Object::Dispose()
122 {
123         m_pObject.Reset();
124 }
125
126 CPDFSDK_PageView* CJS_Object::JSGetPageView(IFXJS_Context* cc)
127 {
128     return FXJS_GetPageView(cc);
129 }
130
131 int CJS_Object::MsgBox(CPDFDoc_Environment* pApp, CPDFSDK_PageView* pPageView, const FX_WCHAR* swMsg, const FX_WCHAR* swTitle, FX_UINT nType, FX_UINT nIcon)
132 {
133     return FXJS_MsgBox(pApp, pPageView, swMsg, swTitle, nType, nIcon);
134 }
135
136 void CJS_Object::Alert(CJS_Context* pContext, const FX_WCHAR* swMsg)
137 {
138     ASSERT(pContext != NULL);
139
140     if (pContext->IsMsgBoxEnabled())
141     {
142         CPDFDoc_Environment* pApp = pContext->GetReaderApp();
143         if(pApp)
144             pApp->JS_appAlert(swMsg, NULL, 0, 3);
145     }
146 }