1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file.
4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifndef UI_ACCESSIBILITY_AX_TREE_SOURCE_H_
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define UI_ACCESSIBILITY_AX_TREE_SOURCE_H_
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include <vector>
9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/accessibility/ax_node_data.h"
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace ui {
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// An AXTreeSource is an abstract interface for a serializable
15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// accessibility tree. The tree may be in some other format or
16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// may be computed dynamically, but maintains the properties that
17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// it's a strict tree, it has a unique id for each node, and all
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// of the accessibility information about a node can be serialized
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// as an AXNodeData. This is the primary interface to use when
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// an accessibility tree will be sent over an IPC before being
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// consumed.
22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)template<typename AXNodeSource>
23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass AXTreeSource {
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public:
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual ~AXTreeSource() {}
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Get the root of the tree.
28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual AXNodeSource GetRoot() const = 0;
29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Get a node by its id. If no node by that id exists in the tree, return a
31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // null node, i.e. one that will return false if you call IsValid on it.
32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual AXNodeSource GetFromId(int32 id) const = 0;
33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Return the id of a node. All ids must be positive integers.
35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual int32 GetId(AXNodeSource node) const = 0;
36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Append all children of |node| to |out_children|.
38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual void GetChildren(AXNodeSource node,
39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                           std::vector<AXNodeSource>* out_children) const = 0;
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Get the parent of |node|.
42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual AXNodeSource GetParent(AXNodeSource node) const = 0;
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Returns true if |node| is valid, and false if it's a null pointer or a
45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // node object representing the null pointer.
46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual bool IsValid(AXNodeSource node) const = 0;
47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Returns true if two nodes are equal.
49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual bool IsEqual(AXNodeSource node1,
50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                       AXNodeSource node2) const = 0;
51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Return a AXNodeSource representing null.
53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual AXNodeSource GetNull() const = 0;
54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // Serialize one node in the tree.
56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual void SerializeNode(AXNodeSource node, AXNodeData* out_data) const = 0;
57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) protected:
59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  AXTreeSource() {}
60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)};
61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace ui
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif  // UI_ACCESSIBILITY_AX_TREE_SOURCE_H_
65