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#ifndef FPDFSDK_INCLUDE_JAVASCRIPT_JS_GLOBALDATA_H_
8#define FPDFSDK_INCLUDE_JAVASCRIPT_JS_GLOBALDATA_H_
9
10#include "../../../core/include/fxcrt/fx_basic.h"
11
12#define JS_GLOBALDATA_TYPE_NUMBER		0
13#define JS_GLOBALDATA_TYPE_BOOLEAN		1
14#define JS_GLOBALDATA_TYPE_STRING		2
15#define JS_GLOBALDATA_TYPE_OBJECT		3
16#define JS_GLOBALDATA_TYPE_NULL			4
17
18class CJS_KeyValue;
19class CPDFDoc_Environment;
20
21class CJS_GlobalVariableArray
22{
23public:
24	CJS_GlobalVariableArray();
25	virtual ~CJS_GlobalVariableArray();
26
27	void			Add(CJS_KeyValue* p);
28	int				Count() const;
29	CJS_KeyValue*	GetAt(int index) const;
30	void			Copy(const CJS_GlobalVariableArray& array);
31
32	void			Empty();
33
34private:
35	CFX_ArrayTemplate<CJS_KeyValue*> array;
36};
37
38class CJS_KeyValue
39{
40public:
41	CJS_KeyValue(){}
42	virtual ~CJS_KeyValue(){}
43
44	CFX_ByteString					sKey;
45	int								nType; //0:int 1:bool 2:string 3:obj
46	double							dData;
47	bool							bData;
48	CFX_ByteString					sData;
49	CJS_GlobalVariableArray			objData;
50};
51
52class CJS_GlobalData_Element
53{
54public:
55	CJS_GlobalData_Element(){}
56	virtual ~CJS_GlobalData_Element(){}
57
58	CJS_KeyValue			data;
59	FX_BOOL					bPersistent;
60};
61
62class CJS_GlobalData
63{
64public:
65	CJS_GlobalData(CPDFDoc_Environment* pApp);
66	virtual ~CJS_GlobalData();
67
68public:
69	void								SetGlobalVariableNumber(FX_LPCSTR propname, double dData);
70	void								SetGlobalVariableBoolean(FX_LPCSTR propname, bool bData);
71	void								SetGlobalVariableString(FX_LPCSTR propname, const CFX_ByteString& sData);
72	void								SetGlobalVariableObject(FX_LPCSTR propname, const CJS_GlobalVariableArray& array);
73	void								SetGlobalVariableNull(FX_LPCSTR propname);
74
75	FX_BOOL								SetGlobalVariablePersistent(FX_LPCSTR propname, FX_BOOL bPersistent);
76	FX_BOOL								DeleteGlobalVariable(FX_LPCSTR propname);
77
78	FX_INT32							GetSize() const;
79	CJS_GlobalData_Element*				GetAt(int index) const;
80
81private:
82	void								LoadGlobalPersistentVariables();
83	void								SaveGlobalPersisitentVariables();
84
85	CJS_GlobalData_Element*				GetGlobalVariable(FX_LPCSTR propname);
86	int									FindGlobalVariable(FX_LPCSTR propname);
87
88	void								LoadFileBuffer(FX_LPCWSTR sFilePath, FX_LPBYTE& pBuffer, FX_INT32& nLength);
89	void								WriteFileBuffer(FX_LPCWSTR sFilePath, FX_LPCSTR pBuffer, FX_INT32 nLength);
90	void								MakeByteString(const CFX_ByteString& name, CJS_KeyValue* pData, CFX_BinaryBuf& sData);
91
92private:
93	CFX_ArrayTemplate<CJS_GlobalData_Element*>	m_arrayGlobalData;
94	CFX_WideString								m_sFilePath;
95};
96
97#endif  // FPDFSDK_INCLUDE_JAVASCRIPT_JS_GLOBALDATA_H_
98