2690f6822ccc3f461443f9a5010936f42f18f8eb
[pdfium.git] / fpdfsdk / include / javascript / global.h
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 _GLOBAL_H_
8 #define _GLOBAL_H_
9
10 #include "JS_Define.h"
11
12 class CJS_GlobalData;
13 class CJS_GlobalVariableArray;
14 class CJS_KeyValue;
15
16 struct js_global_data
17 {
18         js_global_data()
19         {
20                 nType = 0;
21                 dData = 0;
22                 bData = FALSE;
23                 sData = "";
24                 bPersistent = FALSE;
25                 bDeleted = FALSE;
26         }
27
28         ~js_global_data()
29         {
30                 pData.Reset();
31         }
32         int                                     nType; //0:int 1:bool 2:string 3:obj
33         double                          dData;
34         bool                            bData;
35         CFX_ByteString          sData;
36         v8::Global<v8::Object>  pData;
37         bool                            bPersistent;
38         bool                            bDeleted;
39 };
40
41 class global_alternate : public CJS_EmbedObj
42 {
43 public:
44         global_alternate(CJS_Object* pJSObject);
45         virtual ~global_alternate();
46
47 public:
48         FX_BOOL                                         setPersistent(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
49
50 public:
51         FX_BOOL                                         QueryProperty(FX_LPCWSTR propname);
52         FX_BOOL                                         DoProperty(IFXJS_Context* cc, FX_LPCWSTR propname, CJS_PropValue & vp, CFX_WideString & sError);
53         FX_BOOL                                         DelProperty(IFXJS_Context* cc, FX_LPCWSTR propname, CFX_WideString & sError);
54
55         void                                            Initial(CPDFDoc_Environment* pApp);
56
57 private:
58         void                                            UpdateGlobalPersistentVariables();
59         void                                            CommitGlobalPersisitentVariables();
60         void                                            DestroyGlobalPersisitentVariables();
61         FX_BOOL                                         SetGlobalVariables(FX_LPCSTR propname, int nType, 
62                                                                         double dData, bool bData, const CFX_ByteString& sData, JSObject pData, bool bDefaultPersistent);
63
64         void                                            ObjectToArray(v8::Local<v8::Object> pObj, CJS_GlobalVariableArray& array);
65         void                                            PutObjectProperty(v8::Local<v8::Object> obj, CJS_KeyValue* pData);
66
67 private:
68         CFX_MapByteStringToPtr          m_mapGlobal;
69         CFX_WideString                          m_sFilePath;
70         CJS_GlobalData*                         m_pGlobalData;
71         CPDFDoc_Environment*                            m_pApp;
72 };
73
74
75 class CJS_Global : public CJS_Object
76 {
77 public:
78         CJS_Global(JSFXObject pObject) : CJS_Object(pObject) {};
79         virtual ~CJS_Global(void){};
80
81         virtual FX_BOOL InitInstance(IFXJS_Context* cc);        
82
83         DECLARE_SPECIAL_JS_CLASS(CJS_Global);
84
85         JS_SPECIAL_STATIC_METHOD(setPersistent, global_alternate, global);
86
87 };
88
89 #endif //_GLOBAL_H_