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