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