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 74d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#ifndef FPDFSDK_JAVASCRIPT_GLOBAL_H_ 84d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#define FPDFSDK_JAVASCRIPT_GLOBAL_H_ 9ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 10ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann#include <map> 114d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include <vector> 12ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 134d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/javascript/JS_Define.h" 144d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#include "fpdfsdk/javascript/JS_KeyValue.h" 15ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 16ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CJS_GlobalData; 17ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CJS_GlobalVariableArray; 18ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CJS_KeyValue; 19ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 20ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannstruct JSGlobalData { 214d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann JSGlobalData(); 224d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann ~JSGlobalData(); 23ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 244d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann JS_GlobalDataType nType; 25ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann double dData; 26ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bool bData; 27ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_ByteString sData; 28ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann v8::Global<v8::Object> pData; 29ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bool bPersistent; 30ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann bool bDeleted; 31ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}; 32ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 33ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass JSGlobalAlternate : public CJS_EmbedObj { 34ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 354d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann explicit JSGlobalAlternate(CJS_Object* pJSObject); 36ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ~JSGlobalAlternate() override; 37ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 3833357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann bool setPersistent(CJS_Runtime* pRuntime, 394d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const std::vector<CJS_Value>& params, 404d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CJS_Value& vRet, 41ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString& sError); 424d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool QueryProperty(const FX_WCHAR* propname); 4333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann bool DoProperty(CJS_Runtime* pRuntime, 444d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const FX_WCHAR* propname, 454d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CJS_PropValue& vp, 464d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString& sError); 4733357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann bool DelProperty(CJS_Runtime* pRuntime, 484d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const FX_WCHAR* propname, 494d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann CFX_WideString& sError); 504d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann void Initial(CPDFSDK_FormFillEnvironment* pFormFillEnv); 51ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 52ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann private: 53ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void UpdateGlobalPersistentVariables(); 5433357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann void CommitGlobalPersisitentVariables(CJS_Runtime* pRuntime); 55ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void DestroyGlobalPersisitentVariables(); 564d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool SetGlobalVariables(const CFX_ByteString& propname, 574d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann JS_GlobalDataType nType, 584d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann double dData, 594d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bData, 604d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann const CFX_ByteString& sData, 614d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann v8::Local<v8::Object> pData, 624d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann bool bDefaultPersistent); 6333357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann void ObjectToArray(CJS_Runtime* pRuntime, 64ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann v8::Local<v8::Object> pObj, 65ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CJS_GlobalVariableArray& array); 66ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void PutObjectProperty(v8::Local<v8::Object> obj, CJS_KeyValue* pData); 67ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 68ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann std::map<CFX_ByteString, JSGlobalData*> m_mapGlobal; 69ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CFX_WideString m_sFilePath; 70ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann CJS_GlobalData* m_pGlobalData; 7133357cad1fd1321a2b38d2963e2585f27ce980a2Philip P. Moltmann CPDFSDK_FormFillEnvironment::ObservedPtr m_pFormFillEnv; 72ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}; 73ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 74ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmannclass CJS_Global : public CJS_Object { 75ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann public: 76ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann explicit CJS_Global(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {} 77ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann ~CJS_Global() override {} 78ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 79ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann // CJS_Object 80ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann void InitInstance(IJS_Runtime* pIRuntime) override; 81ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 82ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann DECLARE_SPECIAL_JS_CLASS(); 83ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann JS_SPECIAL_STATIC_METHOD(setPersistent, JSGlobalAlternate, global); 84ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann}; 85ac3d58cff7c80b0ef56bf55130d91da17cbaa3c4Philip P. Moltmann 864d3acf4ec42bf6e838f9060103aff98fbf170794Philip P. Moltmann#endif // FPDFSDK_JAVASCRIPT_GLOBAL_H_ 87