1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef UI_ACCESSIBILITY_AX_TREE_SOURCE_H_ 6 #define UI_ACCESSIBILITY_AX_TREE_SOURCE_H_ 7 8 #include <stdint.h> 9 10 #include <vector> 11 12 namespace ui { 13 14 // An AXTreeSource is an abstract interface for a serializable 15 // accessibility tree. The tree may be in some other format or 16 // may be computed dynamically, but maintains the properties that 17 // it's a strict tree, it has a unique id for each node, and all 18 // of the accessibility information about a node can be serialized 19 // as an AXNodeData. This is the primary interface to use when 20 // an accessibility tree will be sent over an IPC before being 21 // consumed. 22 template<typename AXNodeSource, typename AXNodeData, typename AXTreeData> 23 class AXTreeSource { 24 public: ~AXTreeSource()25 virtual ~AXTreeSource() {} 26 27 // Get the tree data and returns true if there is any data to copy. 28 virtual bool GetTreeData(AXTreeData* data) const = 0; 29 30 // Get the root of the tree. 31 virtual AXNodeSource GetRoot() const = 0; 32 33 // Get a node by its id. If no node by that id exists in the tree, return a 34 // null node, i.e. one that will return false if you call IsValid on it. 35 virtual AXNodeSource GetFromId(int32_t id) const = 0; 36 37 // Return the id of a node. All ids must be positive integers. 38 virtual int32_t GetId(AXNodeSource node) const = 0; 39 40 // Append all children of |node| to |out_children|. 41 virtual void GetChildren(AXNodeSource node, 42 std::vector<AXNodeSource>* out_children) const = 0; 43 44 // Get the parent of |node|. 45 virtual AXNodeSource GetParent(AXNodeSource node) const = 0; 46 47 // Returns true if |node| is valid, and false if it's a null pointer or a 48 // node object representing the null pointer. 49 virtual bool IsValid(AXNodeSource node) const = 0; 50 51 // Returns true if |node| is an ignored node 52 virtual bool IsIgnored(AXNodeSource node) const = 0; 53 54 // Returns true if two nodes are equal. 55 virtual bool IsEqual(AXNodeSource node1, 56 AXNodeSource node2) const = 0; 57 58 // Return a AXNodeSource representing null. 59 virtual AXNodeSource GetNull() const = 0; 60 61 // Serialize one node in the tree. 62 virtual void SerializeNode(AXNodeSource node, AXNodeData* out_data) const = 0; 63 64 // Return a string useful for debugging a node. GetDebugString(AXNodeSource node)65 virtual std::string GetDebugString(AXNodeSource node) const { 66 AXNodeData node_data; 67 SerializeNode(node, &node_data); 68 return node_data.ToString(); 69 } 70 71 // This is called by AXTreeSerializer when it serializes a tree and 72 // discovers that a node previously in the tree is no longer part of 73 // the tree. It can be used to allow an AXTreeSource to keep a cache 74 // indexed by node ID and delete nodes when they're no longer needed. SerializerClearedNode(int32_t node_id)75 virtual void SerializerClearedNode(int32_t node_id) {} 76 77 protected: AXTreeSource()78 AXTreeSource() {} 79 }; 80 81 } // namespace ui 82 83 #endif // UI_ACCESSIBILITY_AX_TREE_SOURCE_H_ 84