1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file.
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JavaScript.h"
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/IJavaScript.h"
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JS_Define.h"
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JS_Object.h"
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// #include "../../include/javascript/JS_MsgBox.h"
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// #include "../../include/javascript/JS_ResMgr.h"
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/javascript/JS_Context.h"
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint FXJS_MsgBox(CPDFDoc_Environment* pApp, CPDFSDK_PageView* pPageView, FX_LPCWSTR swMsg, FX_LPCWSTR swTitle, FX_UINT nType, FX_UINT nIcon)
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nRet = 0;
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(pApp)
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDFSDK_Document* pDoc = pApp->GetCurrentDoc();
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if(pDoc)
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pDoc->KillFocusAnnot();
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		nRet = pApp->JS_appAlert(swMsg, swTitle, nType, nIcon);
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return nRet;
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDFSDK_PageView* FXJS_GetPageView(IFXJS_Context* cc)
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (CJS_Context* pContext = (CJS_Context *)cc)
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (pContext->GetReaderDocument())
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			return NULL;
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return NULL;
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ---------------------------------  CJS_EmbedObj --------------------------------- */
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_EmbedObj::CJS_EmbedObj(CJS_Object* pJSObject) :
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pJSObject(pJSObject)
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_EmbedObj::~CJS_EmbedObj()
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pJSObject = NULL;
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDFSDK_PageView* CJS_EmbedObj::JSGetPageView(IFXJS_Context* cc)
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FXJS_GetPageView(cc);
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint CJS_EmbedObj::MsgBox(CPDFDoc_Environment* pApp, CPDFSDK_PageView* pPageView,FX_LPCWSTR swMsg,FX_LPCWSTR swTitle,FX_UINT nType,FX_UINT nIcon)
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FXJS_MsgBox(pApp, pPageView, swMsg, swTitle, nType, nIcon);
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_EmbedObj::Alert(CJS_Context* pContext, FX_LPCWSTR swMsg)
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Object::Alert(pContext, swMsg);
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Timer* CJS_EmbedObj::BeginTimer(CPDFDoc_Environment * pApp,FX_UINT nElapse)
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Timer* pTimer = new CJS_Timer(this,pApp);
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pTimer->SetJSTimer(nElapse);
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return pTimer;
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_EmbedObj::EndTimer(CJS_Timer* pTimer)
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pTimer != NULL);
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pTimer->KillJSTimer();
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	delete pTimer;
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFX_BOOL	CJS_EmbedObj::IsSafeMode(IFXJS_Context* cc)
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(cc != NULL);
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return TRUE;
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ---------------------------------  CJS_Object --------------------------------- */
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid  FreeObject(const v8::WeakCallbackData<v8::Object, CJS_Object>& data)
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CJS_Object* pJSObj  = data.GetParameter();
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(pJSObj)
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pJSObj->ExitInstance();
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		delete pJSObj;
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	v8::Local<v8::Object> obj = data.GetValue();
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	JS_FreePrivate(obj);
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Object::CJS_Object(JSFXObject pObject) :m_pEmbedObj(NULL)
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	v8::Local<v8::Context> context = pObject->CreationContext();
106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pIsolate = context->GetIsolate();
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pObject.Reset(m_pIsolate, pObject);
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCJS_Object::~CJS_Object(void)
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	delete m_pEmbedObj;
113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pEmbedObj = NULL;
114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pObject.Reset();
116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov};
117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid	CJS_Object::MakeWeak()
119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	m_pObject.SetWeak(this, FreeObject);
121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
123ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovCPDFSDK_PageView* CJS_Object::JSGetPageView(IFXJS_Context* cc)
124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FXJS_GetPageView(cc);
126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint CJS_Object::MsgBox(CPDFDoc_Environment* pApp, CPDFSDK_PageView* pPageView, FX_LPCWSTR swMsg, FX_LPCWSTR swTitle, FX_UINT nType, FX_UINT nIcon)
129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return FXJS_MsgBox(pApp, pPageView, swMsg, swTitle, nType, nIcon);
131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid CJS_Object::Alert(CJS_Context* pContext, FX_LPCWSTR swMsg)
134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	ASSERT(pContext != NULL);
136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (pContext->IsMsgBoxEnabled())
138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDFDoc_Environment* pApp = pContext->GetReaderApp();
140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if(pApp)
141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pApp->JS_appAlert(swMsg, NULL, 0, 3);
142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
146