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