1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2014 The PDFium Authors 2*3ac0a46fSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*3ac0a46fSAndroid Build Coastguard Worker // found in the LICENSE file. 4*3ac0a46fSAndroid Build Coastguard Worker 5*3ac0a46fSAndroid Build Coastguard Worker // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6*3ac0a46fSAndroid Build Coastguard Worker 7*3ac0a46fSAndroid Build Coastguard Worker #ifndef FXJS_CFX_GLOBALDATA_H_ 8*3ac0a46fSAndroid Build Coastguard Worker #define FXJS_CFX_GLOBALDATA_H_ 9*3ac0a46fSAndroid Build Coastguard Worker 10*3ac0a46fSAndroid Build Coastguard Worker #include <memory> 11*3ac0a46fSAndroid Build Coastguard Worker #include <vector> 12*3ac0a46fSAndroid Build Coastguard Worker 13*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/binary_buffer.h" 14*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/unowned_ptr.h" 15*3ac0a46fSAndroid Build Coastguard Worker #include "fxjs/cfx_keyvalue.h" 16*3ac0a46fSAndroid Build Coastguard Worker #include "third_party/abseil-cpp/absl/types/optional.h" 17*3ac0a46fSAndroid Build Coastguard Worker #include "third_party/base/containers/span.h" 18*3ac0a46fSAndroid Build Coastguard Worker 19*3ac0a46fSAndroid Build Coastguard Worker class CFX_GlobalData { 20*3ac0a46fSAndroid Build Coastguard Worker public: 21*3ac0a46fSAndroid Build Coastguard Worker class Delegate { 22*3ac0a46fSAndroid Build Coastguard Worker public: 23*3ac0a46fSAndroid Build Coastguard Worker virtual ~Delegate() = default; 24*3ac0a46fSAndroid Build Coastguard Worker 25*3ac0a46fSAndroid Build Coastguard Worker virtual bool StoreBuffer(pdfium::span<const uint8_t> pBuffer) = 0; 26*3ac0a46fSAndroid Build Coastguard Worker virtual absl::optional<pdfium::span<uint8_t>> LoadBuffer() = 0; 27*3ac0a46fSAndroid Build Coastguard Worker virtual void BufferDone() = 0; 28*3ac0a46fSAndroid Build Coastguard Worker }; 29*3ac0a46fSAndroid Build Coastguard Worker 30*3ac0a46fSAndroid Build Coastguard Worker class Element { 31*3ac0a46fSAndroid Build Coastguard Worker public: 32*3ac0a46fSAndroid Build Coastguard Worker Element(); 33*3ac0a46fSAndroid Build Coastguard Worker ~Element(); 34*3ac0a46fSAndroid Build Coastguard Worker 35*3ac0a46fSAndroid Build Coastguard Worker CFX_KeyValue data; 36*3ac0a46fSAndroid Build Coastguard Worker bool bPersistent = false; 37*3ac0a46fSAndroid Build Coastguard Worker }; 38*3ac0a46fSAndroid Build Coastguard Worker 39*3ac0a46fSAndroid Build Coastguard Worker static CFX_GlobalData* GetRetainedInstance(Delegate* pDelegate); 40*3ac0a46fSAndroid Build Coastguard Worker bool Release(); 41*3ac0a46fSAndroid Build Coastguard Worker 42*3ac0a46fSAndroid Build Coastguard Worker void SetGlobalVariableNumber(ByteString propname, double dData); 43*3ac0a46fSAndroid Build Coastguard Worker void SetGlobalVariableBoolean(ByteString propname, bool bData); 44*3ac0a46fSAndroid Build Coastguard Worker void SetGlobalVariableString(ByteString propname, const ByteString& sData); 45*3ac0a46fSAndroid Build Coastguard Worker void SetGlobalVariableObject( 46*3ac0a46fSAndroid Build Coastguard Worker ByteString propname, 47*3ac0a46fSAndroid Build Coastguard Worker std::vector<std::unique_ptr<CFX_KeyValue>> array); 48*3ac0a46fSAndroid Build Coastguard Worker void SetGlobalVariableNull(ByteString propname); 49*3ac0a46fSAndroid Build Coastguard Worker bool SetGlobalVariablePersistent(ByteString propname, bool bPersistent); 50*3ac0a46fSAndroid Build Coastguard Worker bool DeleteGlobalVariable(ByteString propname); 51*3ac0a46fSAndroid Build Coastguard Worker 52*3ac0a46fSAndroid Build Coastguard Worker int32_t GetSize() const; 53*3ac0a46fSAndroid Build Coastguard Worker Element* GetAt(int index); 54*3ac0a46fSAndroid Build Coastguard Worker 55*3ac0a46fSAndroid Build Coastguard Worker // Exposed for testing. 56*3ac0a46fSAndroid Build Coastguard Worker Element* GetGlobalVariable(const ByteString& sPropname); 57*3ac0a46fSAndroid Build Coastguard Worker 58*3ac0a46fSAndroid Build Coastguard Worker private: 59*3ac0a46fSAndroid Build Coastguard Worker using iterator = std::vector<std::unique_ptr<Element>>::iterator; 60*3ac0a46fSAndroid Build Coastguard Worker 61*3ac0a46fSAndroid Build Coastguard Worker explicit CFX_GlobalData(Delegate* pDelegate); 62*3ac0a46fSAndroid Build Coastguard Worker ~CFX_GlobalData(); 63*3ac0a46fSAndroid Build Coastguard Worker 64*3ac0a46fSAndroid Build Coastguard Worker bool LoadGlobalPersistentVariables(); 65*3ac0a46fSAndroid Build Coastguard Worker bool LoadGlobalPersistentVariablesFromBuffer(pdfium::span<uint8_t> buffer); 66*3ac0a46fSAndroid Build Coastguard Worker bool SaveGlobalPersisitentVariables(); 67*3ac0a46fSAndroid Build Coastguard Worker iterator FindGlobalVariable(const ByteString& sPropname); 68*3ac0a46fSAndroid Build Coastguard Worker 69*3ac0a46fSAndroid Build Coastguard Worker size_t m_RefCount = 0; 70*3ac0a46fSAndroid Build Coastguard Worker UnownedPtr<Delegate> const m_pDelegate; 71*3ac0a46fSAndroid Build Coastguard Worker std::vector<std::unique_ptr<Element>> m_arrayGlobalData; 72*3ac0a46fSAndroid Build Coastguard Worker }; 73*3ac0a46fSAndroid Build Coastguard Worker 74*3ac0a46fSAndroid Build Coastguard Worker #endif // FXJS_CFX_GLOBALDATA_H_ 75