blob: 83e07f67c353ee2264b55c2ca13fbd6216302055 [file] [log] [blame]
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -07001// 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.
Lei Zhanga6d9f0e2015-06-13 00:48:38 -07004
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -07005// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
Tom Sepez19922bb2015-05-28 13:23:12 -07007#ifndef FPDFSDK_INCLUDE_JAVASCRIPT_GLOBAL_H_
8#define FPDFSDK_INCLUDE_JAVASCRIPT_GLOBAL_H_
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -07009
Tom Sepez9a3f8122015-04-07 15:35:48 -070010#include "JS_Define.h"
11
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070012class CJS_GlobalData;
Tom Sepez9a3f8122015-04-07 15:35:48 -070013class CJS_GlobalVariableArray;
14class CJS_KeyValue;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070015
16struct 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;
Jochen Eisingerdfa2c992015-05-19 00:38:00 +020036 v8::Global<v8::Object> pData;
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070037 bool bPersistent;
38 bool bDeleted;
39};
40
41class global_alternate : public CJS_EmbedObj
42{
43public:
44 global_alternate(CJS_Object* pJSObject);
45 virtual ~global_alternate();
46
47public:
Tom Sepez2f3dfef2015-03-02 15:35:26 -080048 FX_BOOL setPersistent(IFXJS_Context* cc, const CJS_Parameters& params, CJS_Value& vRet, CFX_WideString& sError);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070049
50public:
Tom Sepezd7e5cc72015-06-10 14:33:37 -070051 FX_BOOL QueryProperty(const FX_WCHAR* propname);
52 FX_BOOL DoProperty(IFXJS_Context* cc, const FX_WCHAR* propname, CJS_PropValue & vp, CFX_WideString & sError);
53 FX_BOOL DelProperty(IFXJS_Context* cc, const FX_WCHAR* propname, CFX_WideString & sError);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070054
55 void Initial(CPDFDoc_Environment* pApp);
56
57private:
58 void UpdateGlobalPersistentVariables();
59 void CommitGlobalPersisitentVariables();
60 void DestroyGlobalPersisitentVariables();
Lei Zhanga6d9f0e2015-06-13 00:48:38 -070061 FX_BOOL SetGlobalVariables(const FX_CHAR* propname, int nType,
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070062 double dData, bool bData, const CFX_ByteString& sData, JSObject pData, bool bDefaultPersistent);
63
Jochen Eisingerdfa2c992015-05-19 00:38:00 +020064 void ObjectToArray(v8::Local<v8::Object> pObj, CJS_GlobalVariableArray& array);
65 void PutObjectProperty(v8::Local<v8::Object> obj, CJS_KeyValue* pData);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070066
67private:
68 CFX_MapByteStringToPtr m_mapGlobal;
69 CFX_WideString m_sFilePath;
70 CJS_GlobalData* m_pGlobalData;
71 CPDFDoc_Environment* m_pApp;
72};
73
74
75class CJS_Global : public CJS_Object
76{
77public:
78 CJS_Global(JSFXObject pObject) : CJS_Object(pObject) {};
79 virtual ~CJS_Global(void){};
80
Lei Zhanga6d9f0e2015-06-13 00:48:38 -070081 virtual FX_BOOL InitInstance(IFXJS_Context* cc);
John Abd-El-Malek3f3b45c2014-05-23 17:28:10 -070082
83 DECLARE_SPECIAL_JS_CLASS(CJS_Global);
84
85 JS_SPECIAL_STATIC_METHOD(setPersistent, global_alternate, global);
86
87};
88
Tom Sepez19922bb2015-05-28 13:23:12 -070089#endif // FPDFSDK_INCLUDE_JAVASCRIPT_GLOBAL_H_