1 // Copyright 2017 The PDFium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6 7 #ifndef XFA_FXFA_PARSER_CXFA_NODE_H_ 8 #define XFA_FXFA_PARSER_CXFA_NODE_H_ 9 10 #include <stddef.h> 11 #include <stdint.h> 12 13 #include <utility> 14 #include <vector> 15 16 #include "core/fxcrt/fx_coordinates.h" 17 #include "core/fxcrt/mask.h" 18 #include "core/fxcrt/retain_ptr.h" 19 #include "core/fxcrt/unowned_ptr.h" 20 #include "core/fxcrt/widestring.h" 21 #include "core/fxge/dib/fx_dib.h" 22 #include "fxjs/gc/gced_tree_node_mixin.h" 23 #include "third_party/abseil-cpp/absl/types/optional.h" 24 #include "third_party/base/span.h" 25 #include "v8/include/cppgc/member.h" 26 #include "v8/include/cppgc/visitor.h" 27 #include "xfa/fxfa/cxfa_ffwidget_type.h" 28 #include "xfa/fxfa/fxfa.h" 29 #include "xfa/fxfa/parser/cxfa_object.h" 30 31 class CFGAS_GEFont; 32 class CFX_DIBitmap; 33 class CFX_XMLDocument; 34 class CFX_XMLNode; 35 class CXFA_Bind; 36 class CXFA_Border; 37 class CXFA_Calculate; 38 class CXFA_Caption; 39 class CXFA_Event; 40 class CXFA_EventParam; 41 class CXFA_FFDoc; 42 class CXFA_FFDocView; 43 class CXFA_Font; 44 class CXFA_Keep; 45 class CXFA_Margin; 46 class CXFA_Measurement; 47 class CXFA_Occur; 48 class CXFA_Para; 49 class CXFA_Script; 50 class CXFA_TextLayout; 51 class CXFA_Ui; 52 class CXFA_Validate; 53 class CXFA_Value; 54 class CXFA_WidgetLayoutData; 55 class GCedLocaleIface; 56 57 enum class XFA_NodeFilter : uint8_t { 58 kChildren = 1 << 0, 59 kProperties = 1 << 1, 60 kOneOfProperty = 1 << 2, 61 }; 62 63 enum class XFA_CheckState : uint8_t { 64 kOn = 0, 65 kOff = 1, 66 kNeutral = 2, 67 }; 68 69 enum class XFA_ValuePicture : uint8_t { 70 kRaw = 0, 71 kDisplay, 72 kEdit, 73 kDataBind, 74 }; 75 76 enum class XFA_NodeFlag : uint8_t { 77 kNone = 0, 78 kInitialized = 1 << 0, 79 kHasRemovedChildren = 1 << 1, 80 kNeedsInitApp = 1 << 2, 81 kBindFormItems = 1 << 3, 82 kUserInteractive = 1 << 4, 83 kUnusedNode = 1 << 5, 84 kLayoutGeneratedNode = 1 << 6 85 }; 86 87 enum class XFA_PropertyFlag : uint8_t { 88 kOneOf = 1 << 0, 89 kDefaultOneOf = 1 << 1, 90 }; 91 92 class CXFA_Node : public CXFA_Object, public GCedTreeNodeMixin<CXFA_Node> { 93 public: 94 struct PropertyData { 95 PropertyData() = delete; PropertyDataPropertyData96 constexpr PropertyData(XFA_Element property, 97 uint8_t occurrence_count, 98 Mask<XFA_PropertyFlag> flags) 99 : property(property), 100 occurrence_count(occurrence_count), 101 flags(flags) {} 102 103 XFA_Element property; 104 uint8_t occurrence_count; 105 Mask<XFA_PropertyFlag> flags; 106 }; 107 108 struct AttributeData { 109 XFA_Attribute attribute; 110 XFA_AttributeType type; 111 void* default_value; 112 }; 113 114 // Node is created from cppgc heap. 115 static CXFA_Node* Create(CXFA_Document* doc, 116 XFA_Element element, 117 XFA_PacketType packet); 118 119 ~CXFA_Node() override; 120 121 // CXFA_Object: 122 void Trace(cppgc::Visitor* visitor) const override; 123 124 bool HasProperty(XFA_Element property) const; 125 bool HasPropertyFlag(XFA_Element property, XFA_PropertyFlag flag) const; 126 uint8_t PropertyOccurrenceCount(XFA_Element property) const; 127 128 std::pair<CXFA_Node*, int32_t> GetProperty(int32_t index, 129 XFA_Element eProperty) const; 130 CXFA_Node* GetOrCreateProperty(int32_t index, XFA_Element eProperty); 131 132 void SendAttributeChangeMessage(XFA_Attribute eAttribute, bool bScriptModify); 133 134 bool HasAttribute(XFA_Attribute attr) const; 135 XFA_AttributeType GetAttributeType(XFA_Attribute type) const; 136 137 // Note: returns XFA_Attribute::Unknown for invalid indicies. 138 XFA_Attribute GetAttribute(size_t i) const; 139 GetPacketType()140 XFA_PacketType GetPacketType() const { return m_ePacket; } 141 142 void SetInitializedFlagAndNotify(); 143 void SetFlag(XFA_NodeFlag dwFlag); 144 void ClearFlag(XFA_NodeFlag dwFlag); 145 146 CXFA_Node* CreateInstanceIfPossible(bool bDataMerge); 147 int32_t GetCount(); 148 CXFA_Node* GetItemIfExists(int32_t iIndex); 149 void RemoveItem(CXFA_Node* pRemoveInstance, bool bRemoveDataBinding); 150 void InsertItem(CXFA_Node* pNewInstance, 151 int32_t iPos, 152 int32_t iCount, 153 bool bMoveDataBindingNodes); 154 IsInitialized()155 bool IsInitialized() const { return HasFlag(XFA_NodeFlag::kInitialized); } IsUserInteractive()156 bool IsUserInteractive() const { 157 return HasFlag(XFA_NodeFlag::kUserInteractive); 158 } IsUnusedNode()159 bool IsUnusedNode() const { return HasFlag(XFA_NodeFlag::kUnusedNode); } IsLayoutGeneratedNode()160 bool IsLayoutGeneratedNode() const { 161 return HasFlag(XFA_NodeFlag::kLayoutGeneratedNode); 162 } 163 164 bool PresenceRequiresSpace() const; 165 void SetBindingNode(CXFA_Node* node); 166 void SetNodeAndDescendantsUnused(); 167 HasRemovedChildren()168 bool HasRemovedChildren() const { 169 return HasFlag(XFA_NodeFlag::kHasRemovedChildren); 170 } 171 172 bool IsAttributeInXML(); IsFormContainer()173 bool IsFormContainer() const { 174 return m_ePacket == XFA_PacketType::Form && IsContainerNode(); 175 } 176 SetXMLMappingNode(CFX_XMLNode * node)177 void SetXMLMappingNode(CFX_XMLNode* node) { xml_node_ = node; } GetXMLMappingNode()178 CFX_XMLNode* GetXMLMappingNode() const { return xml_node_; } 179 CFX_XMLNode* CreateXMLMappingNode(); 180 bool IsNeedSavingXMLNode() const; 181 182 void SetToXML(const WideString& value); 183 GetNameHash()184 uint32_t GetNameHash() const { return m_dwNameHash; } IsUnnamed()185 bool IsUnnamed() const { return m_dwNameHash == 0; } 186 CXFA_Node* GetModelNode(); 187 void UpdateNameHash(); 188 189 size_t CountChildren(XFA_Element eType, bool bOnlyChild); 190 191 template <typename T> GetChild(size_t index,XFA_Element eType,bool bOnlyChild)192 T* GetChild(size_t index, XFA_Element eType, bool bOnlyChild) { 193 return static_cast<T*>(GetChildInternal(index, eType, bOnlyChild)); 194 } 195 196 template <typename T> GetChild(size_t index,XFA_Element eType,bool bOnlyChild)197 const T* GetChild(size_t index, XFA_Element eType, bool bOnlyChild) const { 198 return static_cast<const T*>(GetChildInternal(index, eType, bOnlyChild)); 199 } 200 201 bool IsAncestorOf(const CXFA_Node* that) const; 202 203 void InsertChildAndNotify(int32_t index, CXFA_Node* pNode); 204 void InsertChildAndNotify(CXFA_Node* pNode, CXFA_Node* pBeforeNode); 205 void RemoveChildAndNotify(CXFA_Node* pNode, bool bNotify); 206 207 CXFA_Node* Clone(bool bRecursive); 208 209 CXFA_Node* GetNextContainerSibling() const; 210 CXFA_Node* GetPrevContainerSibling() const; 211 CXFA_Node* GetFirstContainerChild() const; 212 CXFA_Node* GetContainerParent() const; 213 214 std::vector<CXFA_Node*> GetNodeListForType(XFA_Element eTypeFilter); 215 std::vector<CXFA_Node*> GetNodeListWithFilter(Mask<XFA_NodeFilter> dwFilter); 216 CXFA_Node* CreateSamePacketNode(XFA_Element eType); 217 CXFA_Node* CloneTemplateToForm(bool bRecursive); 218 CXFA_Node* GetTemplateNodeIfExists() const; 219 void SetTemplateNode(CXFA_Node* pTemplateNode); 220 CXFA_Node* GetDataDescriptionNode(); 221 void SetDataDescriptionNode(CXFA_Node* pDataDescriptionNode); 222 CXFA_Node* GetBindData(); HasBindItems()223 bool HasBindItems() const { return !binding_nodes_.empty(); } 224 std::vector<CXFA_Node*> GetBindItemsCopy() const; 225 void AddBindItem(CXFA_Node* pFormNode); 226 // Returns true if there are still more items. 227 bool RemoveBindItem(CXFA_Node* pFormNode); 228 bool HasBindItem() const; 229 CXFA_Node* GetContainerNode(); 230 GCedLocaleIface* GetLocale(); 231 absl::optional<WideString> GetLocaleName(); 232 XFA_AttributeValue GetIntact(); 233 WideString GetNameExpression(); 234 235 CXFA_Node* GetFirstChildByName(WideStringView wsNodeName) const; 236 CXFA_Node* GetFirstChildByName(uint32_t dwNodeNameHash) const; 237 template <typename T> GetFirstChildByClass(XFA_Element eType)238 T* GetFirstChildByClass(XFA_Element eType) const { 239 return static_cast<T*>(GetFirstChildByClassInternal(eType)); 240 } 241 CXFA_Node* GetNextSameNameSibling(uint32_t dwNodeNameHash) const; 242 template <typename T> GetNextSameNameSibling(WideStringView wsNodeName)243 T* GetNextSameNameSibling(WideStringView wsNodeName) const { 244 return static_cast<T*>(GetNextSameNameSiblingInternal(wsNodeName)); 245 } 246 template <typename T> GetNextSameClassSibling(XFA_Element eType)247 T* GetNextSameClassSibling(XFA_Element eType) const { 248 return static_cast<T*>(GetNextSameClassSiblingInternal(eType)); 249 } 250 251 CXFA_Node* GetOneChildNamed(WideStringView wsName); 252 CXFA_Node* GetOneChildOfClass(WideStringView wsClass); 253 254 std::vector<CXFA_Node*> GetSiblings(bool bIsClassName); 255 size_t GetIndex(bool bIsProperty, bool bIsClassIndex); 256 size_t GetIndexByName(); 257 size_t GetIndexByClassName(); 258 259 CXFA_Node* GetInstanceMgrOfSubform(); 260 261 absl::optional<bool> GetDefaultBoolean(XFA_Attribute attr) const; 262 absl::optional<int32_t> GetDefaultInteger(XFA_Attribute attr) const; 263 absl::optional<CXFA_Measurement> GetDefaultMeasurement( 264 XFA_Attribute attr) const; 265 absl::optional<WideString> GetDefaultCData(XFA_Attribute attr) const; 266 absl::optional<XFA_AttributeValue> GetDefaultEnum(XFA_Attribute attr) const; 267 268 bool IsOpenAccess() const; 269 270 CXFA_Occur* GetOccurIfExists(); 271 CXFA_Border* GetBorderIfExists() const; 272 CXFA_Border* GetOrCreateBorderIfPossible(); 273 CXFA_Caption* GetCaptionIfExists() const; 274 CXFA_Font* GetFontIfExists() const; 275 CXFA_Font* GetOrCreateFontIfPossible(); 276 277 float GetFontSize() const; 278 FX_ARGB GetTextColor() const; 279 float GetLineHeight() const; 280 281 CXFA_Margin* GetMarginIfExists() const; 282 CXFA_Para* GetParaIfExists() const; 283 CXFA_Calculate* GetCalculateIfExists() const; 284 CXFA_Validate* GetValidateIfExists() const; 285 CXFA_Validate* GetOrCreateValidateIfPossible(); 286 287 CXFA_Value* GetFormValueIfExists() const; 288 WideString GetRawValue() const; 289 290 int32_t GetRotate() const; 291 absl::optional<float> TryWidth(); 292 293 CXFA_Node* GetExclGroupIfExists(); 294 295 XFA_EventError ProcessEvent(CXFA_FFDocView* pDocView, 296 XFA_AttributeValue iActivity, 297 CXFA_EventParam* pEventParam); 298 XFA_EventError ProcessCalculate(CXFA_FFDocView* pDocView); 299 XFA_EventError ProcessValidate(CXFA_FFDocView* pDocView, int32_t iFlags); 300 XFA_EventError ExecuteScript(CXFA_FFDocView* pDocView, 301 CXFA_Script* script, 302 CXFA_EventParam* pEventParam); 303 std::pair<XFA_EventError, bool> ExecuteBoolScript( 304 CXFA_FFDocView* pDocView, 305 CXFA_Script* script, 306 CXFA_EventParam* pEventParam); 307 308 CXFA_Node* GetUIChildNode(); 309 310 // NOTE: value returned is often determined by child UI node, and 311 // can't be used to infer anything about this particual node itself. 312 XFA_FFWidgetType GetFFWidgetType(); 313 314 CFX_RectF GetUIMargin(); 315 CXFA_Border* GetUIBorder(); 316 SetPreNull(bool val)317 void SetPreNull(bool val) { m_bPreNull = val; } IsNull()318 bool IsNull() const { return m_bIsNull; } SetIsNull(bool val)319 void SetIsNull(bool val) { m_bIsNull = val; } 320 SetWidgetReady()321 void SetWidgetReady() { is_widget_ready_ = true; } IsWidgetReady()322 bool IsWidgetReady() const { return is_widget_ready_; } 323 std::vector<CXFA_Event*> GetEventByActivity(XFA_AttributeValue iActivity, 324 bool bIsFormReady); 325 326 void ResetData(); 327 void StartWidgetLayout(CXFA_FFDoc* doc, 328 float* pCalcWidth, 329 float* pCalcHeight); 330 absl::optional<float> FindSplitPos(CXFA_FFDocView* pDocView, 331 size_t szBlockIndex, 332 float fCalcHeight); 333 334 bool LoadCaption(CXFA_FFDoc* doc); 335 CXFA_TextLayout* GetCaptionTextLayout(); 336 CXFA_TextLayout* GetTextLayout(); 337 338 bool LoadLayoutImage(CXFA_FFDoc* doc); 339 bool LoadEditImage(CXFA_FFDoc* doc); 340 CFX_Size GetLayoutImageDpi() const; 341 CFX_Size GetEditImageDpi() const; 342 RetainPtr<CFX_DIBitmap> GetLayoutImage(); 343 RetainPtr<CFX_DIBitmap> GetEditImage(); 344 void SetLayoutImage(RetainPtr<CFX_DIBitmap> newImage); 345 void SetEditImage(RetainPtr<CFX_DIBitmap> newImage); 346 347 RetainPtr<CFGAS_GEFont> GetFGASFont(CXFA_FFDoc* doc); 348 349 bool IsListBox(); 350 bool IsRadioButton(); 351 bool IsMultiLine(); 352 353 bool HasButtonRollover() const; 354 bool HasButtonDown() const; 355 356 float GetCheckButtonSize(); 357 358 XFA_CheckState GetCheckState(); 359 void SetCheckState(XFA_CheckState eCheckState); 360 361 CXFA_Node* GetSelectedMember(); 362 CXFA_Node* SetSelectedMember(WideStringView wsName); 363 void SetSelectedMemberByValue(WideStringView wsValue, 364 bool bNotify, 365 bool bScriptModify, 366 bool bSyncData); 367 368 CXFA_Node* GetExclGroupFirstMember(); 369 CXFA_Node* GetExclGroupNextMember(CXFA_Node* pNode); 370 371 bool IsChoiceListAllowTextEntry(); 372 size_t CountChoiceListItems(bool bSaveValue); 373 absl::optional<WideString> GetChoiceListItem(int32_t nIndex, bool bSaveValue); 374 bool IsChoiceListMultiSelect(); 375 bool IsChoiceListCommitOnSelect(); 376 std::vector<WideString> GetChoiceListItems(bool bSaveValue); 377 378 int32_t CountSelectedItems(); 379 int32_t GetSelectedItem(int32_t nIndex); 380 std::vector<int32_t> GetSelectedItems(); 381 std::vector<WideString> GetSelectedItemsValue(); 382 void SetSelectedItems(const std::vector<int32_t>& iSelArray, 383 bool bNotify, 384 bool bScriptModify, 385 bool bSyncData); 386 void InsertItem(const WideString& wsLabel, 387 const WideString& wsValue, 388 bool bNotify); 389 bool DeleteItem(int32_t nIndex, bool bNotify, bool bScriptModify); 390 void ClearAllSelections(); 391 392 bool GetItemState(int32_t nIndex); 393 void SetItemState(int32_t nIndex, 394 bool bSelected, 395 bool bNotify, 396 bool bScriptModify); 397 398 WideString GetItemValue(WideStringView wsLabel); 399 400 bool IsHorizontalScrollPolicyOff(); 401 bool IsVerticalScrollPolicyOff(); 402 absl::optional<int32_t> GetNumberOfCells(); 403 404 bool SetValue(XFA_ValuePicture eValueType, const WideString& wsValue); 405 WideString GetValue(XFA_ValuePicture eValueType); 406 WideString GetPictureContent(XFA_ValuePicture ePicture); 407 WideString GetNormalizeDataValue(const WideString& wsValue); 408 WideString GetFormatDataValue(const WideString& wsValue); 409 WideString NormalizeNumStr(const WideString& wsValue); 410 411 std::pair<XFA_Element, int32_t> GetMaxChars() const; 412 int32_t GetFracDigits() const; 413 int32_t GetLeadDigits() const; 414 415 WideString NumericLimit(const WideString& wsValue); 416 417 bool IsTransparent() const; 418 bool IsProperty() const; 419 420 protected: 421 CXFA_Node(CXFA_Document* pDoc, 422 XFA_PacketType ePacket, 423 Mask<XFA_XDPPACKET> validPackets, 424 XFA_ObjectType oType, 425 XFA_Element eType, 426 pdfium::span<const PropertyData> properties, 427 pdfium::span<const AttributeData> attributes, 428 CJX_Object* js_object); 429 430 virtual XFA_Element GetValueNodeType() const; 431 virtual XFA_FFWidgetType GetDefaultFFWidgetType() const; 432 433 private: 434 void ProcessScriptTestValidate(CXFA_FFDocView* pDocView, 435 CXFA_Validate* validate, 436 bool bVersionFlag); 437 XFA_EventError ProcessFormatTestValidate(CXFA_FFDocView* pDocView, 438 CXFA_Validate* validate, 439 bool bVersionFlag); 440 XFA_EventError ProcessNullTestValidate(CXFA_FFDocView* pDocView, 441 CXFA_Validate* validate, 442 int32_t iFlags, 443 bool bVersionFlag); 444 WideString GetValidateCaptionName(bool bVersionFlag); 445 WideString GetValidateMessage(bool bError, bool bVersionFlag); 446 447 bool HasFlag(XFA_NodeFlag dwFlag) const; 448 const PropertyData* GetPropertyData(XFA_Element property) const; 449 const AttributeData* GetAttributeData(XFA_Attribute attr) const; 450 absl::optional<XFA_Element> GetFirstPropertyWithFlag( 451 XFA_PropertyFlag flag) const; 452 void OnRemoved(bool bNotify) const; 453 absl::optional<void*> GetDefaultValue(XFA_Attribute attr, 454 XFA_AttributeType eType) const; 455 CXFA_Node* GetChildInternal(size_t index, 456 XFA_Element eType, 457 bool bOnlyChild) const; 458 CXFA_Node* GetFirstChildByClassInternal(XFA_Element eType) const; 459 CXFA_Node* GetNextSameNameSiblingInternal(WideStringView wsNodeName) const; 460 CXFA_Node* GetNextSameClassSiblingInternal(XFA_Element eType) const; 461 void CalcCaptionSize(CXFA_FFDoc* doc, CFX_SizeF* pszCap); 462 bool CalculateFieldAutoSize(CXFA_FFDoc* doc, CFX_SizeF* pSize); 463 bool CalculateWidgetAutoSize(CFX_SizeF* pSize); 464 bool CalculateTextEditAutoSize(CXFA_FFDoc* doc, CFX_SizeF* pSize); 465 bool CalculateCheckButtonAutoSize(CXFA_FFDoc* doc, CFX_SizeF* pSize); 466 bool CalculatePushButtonAutoSize(CXFA_FFDoc* doc, CFX_SizeF* pSize); 467 CFX_SizeF CalculateImageSize(float img_width, 468 float img_height, 469 const CFX_Size& dpi); 470 bool CalculateImageEditAutoSize(CXFA_FFDoc* doc, CFX_SizeF* pSize); 471 bool CalculateImageAutoSize(CXFA_FFDoc* doc, CFX_SizeF* pSize); 472 float CalculateWidgetAutoHeight(float fHeightCalc); 473 float CalculateWidgetAutoWidth(float fWidthCalc); 474 float GetWidthWithoutMargin(float fWidthCalc) const; 475 float GetHeightWithoutMargin(float fHeightCalc) const; 476 void CalculateTextContentSize(CXFA_FFDoc* doc, CFX_SizeF* pSize); 477 CFX_SizeF CalculateAccWidthAndHeight(CXFA_FFDoc* doc, float fWidth); 478 void InitLayoutData(CXFA_FFDoc* doc); 479 void StartTextLayout(CXFA_FFDoc* doc, float* pCalcWidth, float* pCalcHeight); 480 481 void InsertListTextItem(CXFA_Node* pItems, 482 const WideString& wsText, 483 int32_t nIndex); 484 WideString GetItemLabel(WideStringView wsValue) const; 485 486 std::pair<XFA_FFWidgetType, CXFA_Ui*> CreateChildUIAndValueNodesIfNeeded(); 487 void CreateValueNodeIfNeeded(CXFA_Value* value, CXFA_Node* pUIChild); 488 CXFA_Node* CreateUINodeIfNeeded(CXFA_Ui* ui, XFA_Element type); 489 bool IsValidInPacket(XFA_PacketType packet) const; 490 void SetImageEdit(const WideString& wsContentType, 491 const WideString& wsHref, 492 const WideString& wsData); GetBindingNode()493 CXFA_Node* GetBindingNode() const { 494 if (binding_nodes_.empty()) 495 return nullptr; 496 return binding_nodes_[0]; 497 } BindsFormItems()498 bool BindsFormItems() const { return HasFlag(XFA_NodeFlag::kBindFormItems); } NeedsInitApp()499 bool NeedsInitApp() const { return HasFlag(XFA_NodeFlag::kNeedsInitApp); } 500 void SyncValue(const WideString& wsValue, bool bNotify); 501 CXFA_Value* GetDefaultValueIfExists(); 502 CXFA_Bind* GetBindIfExists() const; 503 absl::optional<XFA_AttributeValue> GetIntactFromKeep( 504 const CXFA_Keep* pKeep, 505 XFA_AttributeValue eLayoutType) const; 506 CXFA_Node* GetTransparentParent(); 507 508 absl::optional<float> TryHeight(); 509 absl::optional<float> TryMinWidth(); 510 absl::optional<float> TryMinHeight(); 511 absl::optional<float> TryMaxWidth(); 512 absl::optional<float> TryMaxHeight(); 513 XFA_EventError ProcessEventInternal(CXFA_FFDocView* pDocView, 514 XFA_AttributeValue iActivity, 515 CXFA_Event* event, 516 CXFA_EventParam* pEventParam); 517 518 CFX_XMLDocument* GetXMLDocument() const; 519 520 XFA_FFWidgetType ff_widget_type_ = XFA_FFWidgetType::kNone; 521 bool m_bIsNull = true; 522 bool m_bPreNull = true; 523 bool is_widget_ready_ = false; 524 const pdfium::span<const PropertyData> m_Properties; 525 const pdfium::span<const AttributeData> m_Attributes; 526 const Mask<XFA_XDPPACKET> m_ValidPackets; 527 UnownedPtr<CFX_XMLNode> xml_node_; 528 const XFA_PacketType m_ePacket; 529 uint8_t m_ExecuteRecursionDepth = 0; 530 Mask<XFA_NodeFlag> m_uNodeFlags = XFA_NodeFlag::kNone; 531 uint32_t m_dwNameHash = 0; 532 cppgc::Member<CXFA_Node> m_pAuxNode; 533 std::vector<cppgc::Member<CXFA_Node>> binding_nodes_; 534 cppgc::Member<CXFA_WidgetLayoutData> m_pLayoutData; 535 cppgc::Member<CXFA_Ui> ui_; 536 }; 537 538 #endif // XFA_FXFA_PARSER_CXFA_NODE_H_ 539