1*3ac0a46fSAndroid Build Coastguard Worker // Copyright 2017 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_XFA_CJX_OBJECT_H_ 8*3ac0a46fSAndroid Build Coastguard Worker #define FXJS_XFA_CJX_OBJECT_H_ 9*3ac0a46fSAndroid Build Coastguard Worker 10*3ac0a46fSAndroid Build Coastguard Worker #include <map> 11*3ac0a46fSAndroid Build Coastguard Worker #include <memory> 12*3ac0a46fSAndroid Build Coastguard Worker #include <vector> 13*3ac0a46fSAndroid Build Coastguard Worker 14*3ac0a46fSAndroid Build Coastguard Worker #include "core/fxcrt/widestring.h" 15*3ac0a46fSAndroid Build Coastguard Worker #include "fxjs/gc/heap.h" 16*3ac0a46fSAndroid Build Coastguard Worker #include "fxjs/xfa/fxjse.h" 17*3ac0a46fSAndroid Build Coastguard Worker #include "fxjs/xfa/jse_define.h" 18*3ac0a46fSAndroid Build Coastguard Worker #include "third_party/abseil-cpp/absl/types/optional.h" 19*3ac0a46fSAndroid Build Coastguard Worker #include "third_party/base/containers/span.h" 20*3ac0a46fSAndroid Build Coastguard Worker #include "v8/include/cppgc/garbage-collected.h" 21*3ac0a46fSAndroid Build Coastguard Worker #include "v8/include/cppgc/member.h" 22*3ac0a46fSAndroid Build Coastguard Worker #include "v8/include/v8-forward.h" 23*3ac0a46fSAndroid Build Coastguard Worker #include "xfa/fxfa/fxfa_basic.h" 24*3ac0a46fSAndroid Build Coastguard Worker 25*3ac0a46fSAndroid Build Coastguard Worker class CFXJSE_Engine; 26*3ac0a46fSAndroid Build Coastguard Worker class CFXJSE_MapModule; 27*3ac0a46fSAndroid Build Coastguard Worker class CFX_XMLElement; 28*3ac0a46fSAndroid Build Coastguard Worker class CJX_Object; 29*3ac0a46fSAndroid Build Coastguard Worker class CXFA_Document; 30*3ac0a46fSAndroid Build Coastguard Worker class CXFA_LayoutItem; 31*3ac0a46fSAndroid Build Coastguard Worker class CXFA_Measurement; 32*3ac0a46fSAndroid Build Coastguard Worker class CXFA_Node; 33*3ac0a46fSAndroid Build Coastguard Worker class CXFA_Object; 34*3ac0a46fSAndroid Build Coastguard Worker 35*3ac0a46fSAndroid Build Coastguard Worker using CJX_MethodCall = 36*3ac0a46fSAndroid Build Coastguard Worker CJS_Result (*)(CJX_Object* obj, 37*3ac0a46fSAndroid Build Coastguard Worker CFXJSE_Engine* runtime, 38*3ac0a46fSAndroid Build Coastguard Worker const std::vector<v8::Local<v8::Value>>& params); 39*3ac0a46fSAndroid Build Coastguard Worker 40*3ac0a46fSAndroid Build Coastguard Worker struct CJX_MethodSpec { 41*3ac0a46fSAndroid Build Coastguard Worker const char* pName; 42*3ac0a46fSAndroid Build Coastguard Worker CJX_MethodCall pMethodCall; 43*3ac0a46fSAndroid Build Coastguard Worker }; 44*3ac0a46fSAndroid Build Coastguard Worker 45*3ac0a46fSAndroid Build Coastguard Worker class CJX_Object : public cppgc::GarbageCollected<CJX_Object>, 46*3ac0a46fSAndroid Build Coastguard Worker public CFXJSE_HostObject { 47*3ac0a46fSAndroid Build Coastguard Worker public: 48*3ac0a46fSAndroid Build Coastguard Worker // Corresponds 1:1 with CJX_ subclasses. 49*3ac0a46fSAndroid Build Coastguard Worker enum class TypeTag { 50*3ac0a46fSAndroid Build Coastguard Worker Boolean, 51*3ac0a46fSAndroid Build Coastguard Worker Container, 52*3ac0a46fSAndroid Build Coastguard Worker DataWindow, 53*3ac0a46fSAndroid Build Coastguard Worker Delta, 54*3ac0a46fSAndroid Build Coastguard Worker Desc, 55*3ac0a46fSAndroid Build Coastguard Worker Draw, 56*3ac0a46fSAndroid Build Coastguard Worker Encrypt, 57*3ac0a46fSAndroid Build Coastguard Worker EventPseudoModel, 58*3ac0a46fSAndroid Build Coastguard Worker ExclGroup, 59*3ac0a46fSAndroid Build Coastguard Worker Extras, 60*3ac0a46fSAndroid Build Coastguard Worker Field, 61*3ac0a46fSAndroid Build Coastguard Worker Form, 62*3ac0a46fSAndroid Build Coastguard Worker Handler, 63*3ac0a46fSAndroid Build Coastguard Worker HostPseudoModel, 64*3ac0a46fSAndroid Build Coastguard Worker InstanceManager, 65*3ac0a46fSAndroid Build Coastguard Worker LayoutPseudoModel, 66*3ac0a46fSAndroid Build Coastguard Worker List, 67*3ac0a46fSAndroid Build Coastguard Worker LogPseudoModel, 68*3ac0a46fSAndroid Build Coastguard Worker Manifest, 69*3ac0a46fSAndroid Build Coastguard Worker Model, 70*3ac0a46fSAndroid Build Coastguard Worker Node, 71*3ac0a46fSAndroid Build Coastguard Worker Object, 72*3ac0a46fSAndroid Build Coastguard Worker Occur, 73*3ac0a46fSAndroid Build Coastguard Worker Packet, 74*3ac0a46fSAndroid Build Coastguard Worker Script, 75*3ac0a46fSAndroid Build Coastguard Worker SignaturePesudoModel, 76*3ac0a46fSAndroid Build Coastguard Worker Source, 77*3ac0a46fSAndroid Build Coastguard Worker Subform, 78*3ac0a46fSAndroid Build Coastguard Worker SubformSet, 79*3ac0a46fSAndroid Build Coastguard Worker Template, 80*3ac0a46fSAndroid Build Coastguard Worker TextNode, 81*3ac0a46fSAndroid Build Coastguard Worker Tree, 82*3ac0a46fSAndroid Build Coastguard Worker TreeList, 83*3ac0a46fSAndroid Build Coastguard Worker WsdlConnection, 84*3ac0a46fSAndroid Build Coastguard Worker Xfa, 85*3ac0a46fSAndroid Build Coastguard Worker }; 86*3ac0a46fSAndroid Build Coastguard Worker 87*3ac0a46fSAndroid Build Coastguard Worker class CalcData : public cppgc::GarbageCollected<CalcData> { 88*3ac0a46fSAndroid Build Coastguard Worker public: 89*3ac0a46fSAndroid Build Coastguard Worker CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED; 90*3ac0a46fSAndroid Build Coastguard Worker ~CalcData(); 91*3ac0a46fSAndroid Build Coastguard Worker 92*3ac0a46fSAndroid Build Coastguard Worker void Trace(cppgc::Visitor* visitor) const; 93*3ac0a46fSAndroid Build Coastguard Worker 94*3ac0a46fSAndroid Build Coastguard Worker std::vector<cppgc::Member<CXFA_Node>> m_Globals; 95*3ac0a46fSAndroid Build Coastguard Worker 96*3ac0a46fSAndroid Build Coastguard Worker private: 97*3ac0a46fSAndroid Build Coastguard Worker CalcData(); 98*3ac0a46fSAndroid Build Coastguard Worker }; 99*3ac0a46fSAndroid Build Coastguard Worker 100*3ac0a46fSAndroid Build Coastguard Worker CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED; 101*3ac0a46fSAndroid Build Coastguard Worker ~CJX_Object() override; 102*3ac0a46fSAndroid Build Coastguard Worker 103*3ac0a46fSAndroid Build Coastguard Worker // CFXJSE_HostObject: 104*3ac0a46fSAndroid Build Coastguard Worker CJX_Object* AsCJXObject() override; 105*3ac0a46fSAndroid Build Coastguard Worker 106*3ac0a46fSAndroid Build Coastguard Worker virtual void Trace(cppgc::Visitor* visitor) const; 107*3ac0a46fSAndroid Build Coastguard Worker virtual bool DynamicTypeIs(TypeTag eType) const; 108*3ac0a46fSAndroid Build Coastguard Worker 109*3ac0a46fSAndroid Build Coastguard Worker JSE_PROP(className); 110*3ac0a46fSAndroid Build Coastguard Worker 111*3ac0a46fSAndroid Build Coastguard Worker CXFA_Document* GetDocument() const; 112*3ac0a46fSAndroid Build Coastguard Worker CXFA_Node* GetXFANode() const; GetXFAObject()113*3ac0a46fSAndroid Build Coastguard Worker CXFA_Object* GetXFAObject() const { return object_; } 114*3ac0a46fSAndroid Build Coastguard Worker SetCalcRecursionCount(size_t count)115*3ac0a46fSAndroid Build Coastguard Worker void SetCalcRecursionCount(size_t count) { calc_recursion_count_ = count; } GetCalcRecursionCount()116*3ac0a46fSAndroid Build Coastguard Worker size_t GetCalcRecursionCount() const { return calc_recursion_count_; } 117*3ac0a46fSAndroid Build Coastguard Worker SetLayoutItem(CXFA_LayoutItem * item)118*3ac0a46fSAndroid Build Coastguard Worker void SetLayoutItem(CXFA_LayoutItem* item) { layout_item_ = item; } GetLayoutItem()119*3ac0a46fSAndroid Build Coastguard Worker CXFA_LayoutItem* GetLayoutItem() const { return layout_item_; } 120*3ac0a46fSAndroid Build Coastguard Worker 121*3ac0a46fSAndroid Build Coastguard Worker bool HasMethod(const WideString& func) const; 122*3ac0a46fSAndroid Build Coastguard Worker CJS_Result RunMethod(CFXJSE_Engine* pScriptContext, 123*3ac0a46fSAndroid Build Coastguard Worker const WideString& func, 124*3ac0a46fSAndroid Build Coastguard Worker const std::vector<v8::Local<v8::Value>>& params); 125*3ac0a46fSAndroid Build Coastguard Worker 126*3ac0a46fSAndroid Build Coastguard Worker bool HasAttribute(XFA_Attribute eAttr) const; 127*3ac0a46fSAndroid Build Coastguard Worker WideString GetAttributeByString(WideStringView attr) const; 128*3ac0a46fSAndroid Build Coastguard Worker WideString GetAttributeByEnum(XFA_Attribute attr) const; 129*3ac0a46fSAndroid Build Coastguard Worker absl::optional<WideString> TryAttribute(XFA_Attribute eAttr, 130*3ac0a46fSAndroid Build Coastguard Worker bool bUseDefault) const; 131*3ac0a46fSAndroid Build Coastguard Worker void SetAttributeByEnum(XFA_Attribute eAttr, 132*3ac0a46fSAndroid Build Coastguard Worker const WideString& wsValue, 133*3ac0a46fSAndroid Build Coastguard Worker bool bNotify); 134*3ac0a46fSAndroid Build Coastguard Worker void SetAttributeByString(WideStringView wsAttr, const WideString& wsValue); 135*3ac0a46fSAndroid Build Coastguard Worker void RemoveAttribute(WideStringView wsAttr); 136*3ac0a46fSAndroid Build Coastguard Worker 137*3ac0a46fSAndroid Build Coastguard Worker WideString GetContent(bool bScriptModify) const; 138*3ac0a46fSAndroid Build Coastguard Worker absl::optional<WideString> TryContent(bool bScriptModify, bool bProto) const; 139*3ac0a46fSAndroid Build Coastguard Worker void SetContent(const WideString& wsContent, 140*3ac0a46fSAndroid Build Coastguard Worker const WideString& wsXMLValue, 141*3ac0a46fSAndroid Build Coastguard Worker bool bNotify, 142*3ac0a46fSAndroid Build Coastguard Worker bool bScriptModify, 143*3ac0a46fSAndroid Build Coastguard Worker bool bSyncData); 144*3ac0a46fSAndroid Build Coastguard Worker 145*3ac0a46fSAndroid Build Coastguard Worker template <typename T> GetProperty(int32_t index,XFA_Element eType)146*3ac0a46fSAndroid Build Coastguard Worker T* GetProperty(int32_t index, XFA_Element eType) const { 147*3ac0a46fSAndroid Build Coastguard Worker return static_cast<T*>(GetPropertyInternal(index, eType)); 148*3ac0a46fSAndroid Build Coastguard Worker } 149*3ac0a46fSAndroid Build Coastguard Worker template <typename T> GetOrCreateProperty(int32_t index,XFA_Element eType)150*3ac0a46fSAndroid Build Coastguard Worker T* GetOrCreateProperty(int32_t index, XFA_Element eType) { 151*3ac0a46fSAndroid Build Coastguard Worker return static_cast<T*>(GetOrCreatePropertyInternal(index, eType)); 152*3ac0a46fSAndroid Build Coastguard Worker } 153*3ac0a46fSAndroid Build Coastguard Worker 154*3ac0a46fSAndroid Build Coastguard Worker void SetAttributeValue(const WideString& wsValue, 155*3ac0a46fSAndroid Build Coastguard Worker const WideString& wsXMLValue); 156*3ac0a46fSAndroid Build Coastguard Worker 157*3ac0a46fSAndroid Build Coastguard Worker // Not actual properties, but invoked as property handlers to cover 158*3ac0a46fSAndroid Build Coastguard Worker // a broad range of underlying properties. 159*3ac0a46fSAndroid Build Coastguard Worker JSE_PROP(ScriptAttributeString); 160*3ac0a46fSAndroid Build Coastguard Worker JSE_PROP(ScriptAttributeBool); 161*3ac0a46fSAndroid Build Coastguard Worker JSE_PROP(ScriptAttributeInteger); 162*3ac0a46fSAndroid Build Coastguard Worker JSE_PROP(ScriptSomFontColor); 163*3ac0a46fSAndroid Build Coastguard Worker JSE_PROP(ScriptSomFillColor); 164*3ac0a46fSAndroid Build Coastguard Worker JSE_PROP(ScriptSomBorderColor); 165*3ac0a46fSAndroid Build Coastguard Worker JSE_PROP(ScriptSomBorderWidth); 166*3ac0a46fSAndroid Build Coastguard Worker JSE_PROP(ScriptSomValidationMessage); 167*3ac0a46fSAndroid Build Coastguard Worker JSE_PROP(ScriptSomMandatoryMessage); 168*3ac0a46fSAndroid Build Coastguard Worker JSE_PROP(ScriptSomDefaultValue); 169*3ac0a46fSAndroid Build Coastguard Worker JSE_PROP(ScriptSomDefaultValue_Read); 170*3ac0a46fSAndroid Build Coastguard Worker JSE_PROP(ScriptSomDataNode); 171*3ac0a46fSAndroid Build Coastguard Worker JSE_PROP(ScriptSomMandatory); 172*3ac0a46fSAndroid Build Coastguard Worker JSE_PROP(ScriptSomInstanceIndex); 173*3ac0a46fSAndroid Build Coastguard Worker JSE_PROP(ScriptSubmitFormatMode); 174*3ac0a46fSAndroid Build Coastguard Worker 175*3ac0a46fSAndroid Build Coastguard Worker absl::optional<WideString> TryNamespace() const; 176*3ac0a46fSAndroid Build Coastguard Worker 177*3ac0a46fSAndroid Build Coastguard Worker int32_t GetInteger(XFA_Attribute eAttr) const; 178*3ac0a46fSAndroid Build Coastguard Worker absl::optional<int32_t> TryInteger(XFA_Attribute eAttr, 179*3ac0a46fSAndroid Build Coastguard Worker bool bUseDefault) const; 180*3ac0a46fSAndroid Build Coastguard Worker void SetInteger(XFA_Attribute eAttr, int32_t iValue, bool bNotify); 181*3ac0a46fSAndroid Build Coastguard Worker 182*3ac0a46fSAndroid Build Coastguard Worker WideString GetCData(XFA_Attribute eAttr) const; 183*3ac0a46fSAndroid Build Coastguard Worker absl::optional<WideString> TryCData(XFA_Attribute eAttr, 184*3ac0a46fSAndroid Build Coastguard Worker bool bUseDefault) const; 185*3ac0a46fSAndroid Build Coastguard Worker void SetCData(XFA_Attribute eAttr, const WideString& wsValue); 186*3ac0a46fSAndroid Build Coastguard Worker 187*3ac0a46fSAndroid Build Coastguard Worker XFA_AttributeValue GetEnum(XFA_Attribute eAttr) const; 188*3ac0a46fSAndroid Build Coastguard Worker absl::optional<XFA_AttributeValue> TryEnum(XFA_Attribute eAttr, 189*3ac0a46fSAndroid Build Coastguard Worker bool bUseDefault) const; 190*3ac0a46fSAndroid Build Coastguard Worker void SetEnum(XFA_Attribute eAttr, XFA_AttributeValue eValue, bool bNotify); 191*3ac0a46fSAndroid Build Coastguard Worker 192*3ac0a46fSAndroid Build Coastguard Worker bool GetBoolean(XFA_Attribute eAttr) const; 193*3ac0a46fSAndroid Build Coastguard Worker absl::optional<bool> TryBoolean(XFA_Attribute eAttr, bool bUseDefault) const; 194*3ac0a46fSAndroid Build Coastguard Worker void SetBoolean(XFA_Attribute eAttr, bool bValue, bool bNotify); 195*3ac0a46fSAndroid Build Coastguard Worker 196*3ac0a46fSAndroid Build Coastguard Worker CXFA_Measurement GetMeasure(XFA_Attribute eAttr) const; 197*3ac0a46fSAndroid Build Coastguard Worker float GetMeasureInUnit(XFA_Attribute eAttr, XFA_Unit unit) const; 198*3ac0a46fSAndroid Build Coastguard Worker absl::optional<CXFA_Measurement> TryMeasure(XFA_Attribute eAttr, 199*3ac0a46fSAndroid Build Coastguard Worker bool bUseDefault) const; 200*3ac0a46fSAndroid Build Coastguard Worker absl::optional<float> TryMeasureAsFloat(XFA_Attribute attr) const; 201*3ac0a46fSAndroid Build Coastguard Worker void SetMeasure(XFA_Attribute eAttr, 202*3ac0a46fSAndroid Build Coastguard Worker const CXFA_Measurement& mValue, 203*3ac0a46fSAndroid Build Coastguard Worker bool bNotify); 204*3ac0a46fSAndroid Build Coastguard Worker 205*3ac0a46fSAndroid Build Coastguard Worker void MergeAllData(CXFA_Object* pDstObj); 206*3ac0a46fSAndroid Build Coastguard Worker GetCalcData()207*3ac0a46fSAndroid Build Coastguard Worker CalcData* GetCalcData() const { return calc_data_; } 208*3ac0a46fSAndroid Build Coastguard Worker CalcData* GetOrCreateCalcData(cppgc::Heap* heap); 209*3ac0a46fSAndroid Build Coastguard Worker void TakeCalcDataFrom(CJX_Object* that); 210*3ac0a46fSAndroid Build Coastguard Worker 211*3ac0a46fSAndroid Build Coastguard Worker void ThrowInvalidPropertyException(v8::Isolate* pIsolate) const; 212*3ac0a46fSAndroid Build Coastguard Worker void ThrowArgumentMismatchException(v8::Isolate* pIsolate) const; 213*3ac0a46fSAndroid Build Coastguard Worker void ThrowIndexOutOfBoundsException(v8::Isolate* pIsolate) const; 214*3ac0a46fSAndroid Build Coastguard Worker void ThrowParamCountMismatchException(v8::Isolate* pIsolate, 215*3ac0a46fSAndroid Build Coastguard Worker const WideString& method) const; 216*3ac0a46fSAndroid Build Coastguard Worker void ThrowTooManyOccurrencesException(v8::Isolate* pIsolate, 217*3ac0a46fSAndroid Build Coastguard Worker const WideString& obj) const; 218*3ac0a46fSAndroid Build Coastguard Worker 219*3ac0a46fSAndroid Build Coastguard Worker protected: 220*3ac0a46fSAndroid Build Coastguard Worker enum class SOMMessageType { 221*3ac0a46fSAndroid Build Coastguard Worker kValidationMessage, 222*3ac0a46fSAndroid Build Coastguard Worker kFormatMessage, 223*3ac0a46fSAndroid Build Coastguard Worker kMandatoryMessage 224*3ac0a46fSAndroid Build Coastguard Worker }; 225*3ac0a46fSAndroid Build Coastguard Worker 226*3ac0a46fSAndroid Build Coastguard Worker explicit CJX_Object(CXFA_Object* obj); 227*3ac0a46fSAndroid Build Coastguard Worker 228*3ac0a46fSAndroid Build Coastguard Worker void ScriptSomMessage(v8::Isolate* pIsolate, 229*3ac0a46fSAndroid Build Coastguard Worker v8::Local<v8::Value>* pValue, 230*3ac0a46fSAndroid Build Coastguard Worker bool bSetting, 231*3ac0a46fSAndroid Build Coastguard Worker SOMMessageType iMessageType); 232*3ac0a46fSAndroid Build Coastguard Worker void SetAttributeValueImpl(const WideString& wsValue, 233*3ac0a46fSAndroid Build Coastguard Worker const WideString& wsXMLValue, 234*3ac0a46fSAndroid Build Coastguard Worker bool bNotify, 235*3ac0a46fSAndroid Build Coastguard Worker bool bScriptModify); 236*3ac0a46fSAndroid Build Coastguard Worker void SetCDataImpl(XFA_Attribute eAttr, 237*3ac0a46fSAndroid Build Coastguard Worker const WideString& wsValue, 238*3ac0a46fSAndroid Build Coastguard Worker bool bNotify, 239*3ac0a46fSAndroid Build Coastguard Worker bool bScriptModify); 240*3ac0a46fSAndroid Build Coastguard Worker void DefineMethods(pdfium::span<const CJX_MethodSpec> methods); 241*3ac0a46fSAndroid Build Coastguard Worker void MoveBufferMapData(CXFA_Object* pSrcObj, CXFA_Object* pDstObj); 242*3ac0a46fSAndroid Build Coastguard Worker void ThrowException(v8::Isolate* pIsolate, const WideString& str) const; 243*3ac0a46fSAndroid Build Coastguard Worker 244*3ac0a46fSAndroid Build Coastguard Worker private: 245*3ac0a46fSAndroid Build Coastguard Worker using Type__ = CJX_Object; 246*3ac0a46fSAndroid Build Coastguard Worker static const TypeTag static_type__ = TypeTag::Object; 247*3ac0a46fSAndroid Build Coastguard Worker 248*3ac0a46fSAndroid Build Coastguard Worker CXFA_Node* GetPropertyInternal(int32_t index, XFA_Element eType) const; 249*3ac0a46fSAndroid Build Coastguard Worker CXFA_Node* GetOrCreatePropertyInternal(int32_t index, XFA_Element eType); 250*3ac0a46fSAndroid Build Coastguard Worker 251*3ac0a46fSAndroid Build Coastguard Worker void OnChanging(XFA_Attribute eAttr); 252*3ac0a46fSAndroid Build Coastguard Worker void OnChanged(XFA_Attribute eAttr, bool bScriptModify); 253*3ac0a46fSAndroid Build Coastguard Worker 254*3ac0a46fSAndroid Build Coastguard Worker // Returns a pointer to the XML node that needs to be updated with the new 255*3ac0a46fSAndroid Build Coastguard Worker // attribute value. |nullptr| if no update is needed. 256*3ac0a46fSAndroid Build Coastguard Worker CFX_XMLElement* SetValue(XFA_Attribute eAttr, int32_t value, bool bNotify); 257*3ac0a46fSAndroid Build Coastguard Worker int32_t Subform_and_SubformSet_InstanceIndex(); 258*3ac0a46fSAndroid Build Coastguard Worker 259*3ac0a46fSAndroid Build Coastguard Worker CFXJSE_MapModule* CreateMapModule(); 260*3ac0a46fSAndroid Build Coastguard Worker CFXJSE_MapModule* GetMapModule() const; 261*3ac0a46fSAndroid Build Coastguard Worker void SetMapModuleValue(uint32_t key, int32_t value); 262*3ac0a46fSAndroid Build Coastguard Worker void SetMapModuleString(uint32_t key, const WideString& wsValue); 263*3ac0a46fSAndroid Build Coastguard Worker void SetMapModuleMeasurement(uint32_t key, const CXFA_Measurement& value); 264*3ac0a46fSAndroid Build Coastguard Worker absl::optional<int32_t> GetMapModuleValue(uint32_t key) const; 265*3ac0a46fSAndroid Build Coastguard Worker absl::optional<WideString> GetMapModuleString(uint32_t key) const; 266*3ac0a46fSAndroid Build Coastguard Worker absl::optional<CXFA_Measurement> GetMapModuleMeasurement(uint32_t key) const; 267*3ac0a46fSAndroid Build Coastguard Worker absl::optional<int32_t> GetMapModuleValueFollowingChain(uint32_t key) const; 268*3ac0a46fSAndroid Build Coastguard Worker absl::optional<WideString> GetMapModuleStringFollowingChain( 269*3ac0a46fSAndroid Build Coastguard Worker uint32_t key) const; 270*3ac0a46fSAndroid Build Coastguard Worker absl::optional<CXFA_Measurement> GetMapModuleMeasurementFollowingChain( 271*3ac0a46fSAndroid Build Coastguard Worker uint32_t key) const; 272*3ac0a46fSAndroid Build Coastguard Worker bool HasMapModuleKey(uint32_t key) const; 273*3ac0a46fSAndroid Build Coastguard Worker void RemoveMapModuleKey(uint32_t key); 274*3ac0a46fSAndroid Build Coastguard Worker void MoveBufferMapData(CXFA_Object* pDstObj); 275*3ac0a46fSAndroid Build Coastguard Worker 276*3ac0a46fSAndroid Build Coastguard Worker cppgc::Member<CXFA_Object> object_; 277*3ac0a46fSAndroid Build Coastguard Worker cppgc::Member<CXFA_LayoutItem> layout_item_; 278*3ac0a46fSAndroid Build Coastguard Worker cppgc::Member<CalcData> calc_data_; 279*3ac0a46fSAndroid Build Coastguard Worker std::unique_ptr<CFXJSE_MapModule> map_module_; 280*3ac0a46fSAndroid Build Coastguard Worker std::map<ByteString, CJX_MethodCall> method_specs_; 281*3ac0a46fSAndroid Build Coastguard Worker size_t calc_recursion_count_ = 0; 282*3ac0a46fSAndroid Build Coastguard Worker }; 283*3ac0a46fSAndroid Build Coastguard Worker 284*3ac0a46fSAndroid Build Coastguard Worker #endif // FXJS_XFA_CJX_OBJECT_H_ 285