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