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