1ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Copyright 2014 PDFium Authors. All rights reserved. 2ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Use of this source code is governed by a BSD-style license that can be 3ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// found in the LICENSE file. 4ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 5ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 7ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#ifndef FPDFSDK_SRC_JAVASCRIPT_GLOBAL_H_ 8ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#define FPDFSDK_SRC_JAVASCRIPT_GLOBAL_H_ 9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include <map> 11ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include "JS_Define.h" 13ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 14ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CJS_GlobalData; 15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CJS_GlobalVariableArray; 16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CJS_KeyValue; 17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstruct JSGlobalData { 19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann JSGlobalData() { 20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann nType = 0; 21ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann dData = 0; 22ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bData = FALSE; 23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann sData = ""; 24ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bPersistent = FALSE; 25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bDeleted = FALSE; 26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann } 27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ~JSGlobalData() { pData.Reset(); } 29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int nType; // 0:int 1:bool 2:string 3:obj 30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann double dData; 31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bool bData; 32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString sData; 33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann v8::Global<v8::Object> pData; 34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bool bPersistent; 35ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bool bDeleted; 36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}; 37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 38ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass JSGlobalAlternate : public CJS_EmbedObj { 39ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 40ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann JSGlobalAlternate(CJS_Object* pJSObject); 41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ~JSGlobalAlternate() override; 42ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 43ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL setPersistent(IJS_Context* cc, 44ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const std::vector<CJS_Value>& params, 45ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CJS_Value& vRet, 46ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString& sError); 47ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL QueryProperty(const FX_WCHAR* propname); 48ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL DoProperty(IJS_Context* cc, 49ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const FX_WCHAR* propname, 50ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CJS_PropValue& vp, 51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString& sError); 52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL DelProperty(IJS_Context* cc, 53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const FX_WCHAR* propname, 54ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString& sError); 55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void Initial(CPDFDoc_Environment* pApp); 56ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 57ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann private: 58ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void UpdateGlobalPersistentVariables(); 59ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void CommitGlobalPersisitentVariables(IJS_Context* cc); 60ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void DestroyGlobalPersisitentVariables(); 61ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann FX_BOOL SetGlobalVariables(const FX_CHAR* propname, 62ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann int nType, 63ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann double dData, 64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bool bData, 65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann const CFX_ByteString& sData, 66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann v8::Local<v8::Object> pData, 67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bool bDefaultPersistent); 68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void ObjectToArray(IJS_Context* cc, 69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann v8::Local<v8::Object> pObj, 70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CJS_GlobalVariableArray& array); 71ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void PutObjectProperty(v8::Local<v8::Object> obj, CJS_KeyValue* pData); 72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann std::map<CFX_ByteString, JSGlobalData*> m_mapGlobal; 74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString m_sFilePath; 75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CJS_GlobalData* m_pGlobalData; 76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CPDFDoc_Environment* m_pApp; 77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}; 78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CJS_Global : public CJS_Object { 80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann explicit CJS_Global(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {} 82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ~CJS_Global() override {} 83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann // CJS_Object 85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void InitInstance(IJS_Runtime* pIRuntime) override; 86ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 87ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann DECLARE_SPECIAL_JS_CLASS(); 88ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann JS_SPECIAL_STATIC_METHOD(setPersistent, JSGlobalAlternate, global); 89ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}; 90ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 91ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#endif // FPDFSDK_SRC_JAVASCRIPT_GLOBAL_H_ 92