#ifndef UI_ACCESSIBILITY_AX_TREE_SOURCE_H_
#define UI_ACCESSIBILITY_AX_TREE_SOURCE_H_
#include <stdint.h>
#include <string>
#include <vector>
#include "base/notreached.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/accessibility/ax_node_id_forward.h"
#include "ui/accessibility/ax_tree_source_observer.h"
namespace ui {
template <typename AXNodeSource,
typename AXTreeDataType,
typename AXNodeDataType>
class AXTreeSource {
public:
virtual ~AXTreeSource() = default;
virtual bool GetTreeData(AXTreeDataType data) const = 0;
virtual AXNodeSource GetRoot() const = 0;
virtual AXNodeSource GetFromId(AXNodeID id) const = 0;
AXNodeSource EnsureGetFromId(AXNodeID id) const {
AXNodeSource node = GetFromId(id);
DCHECK(node);
return node;
}
virtual AXNodeID GetId(AXNodeSource node) const = 0;
virtual void CacheChildrenIfNeeded(AXNodeSource) = 0;
virtual size_t GetChildCount(AXNodeSource) const = 0;
virtual AXNodeSource ChildAt(AXNodeSource, size_t) const = 0;
virtual void ClearChildCache(AXNodeSource) = 0;
virtual AXNodeSource GetParent(AXNodeSource node) const = 0;
virtual bool IsIgnored(AXNodeSource node) const = 0;
virtual bool IsEqual(AXNodeSource node1,
AXNodeSource node2) const = 0;
virtual AXNodeSource GetNull() const = 0;
virtual void SerializeNode(AXNodeSource node,
AXNodeDataType* out_data) const = 0;
virtual std::string GetDebugString(AXNodeSource node) const {
AXNodeDataType node_data;
SerializeNode(node, &node_data);
return node_data.ToString();
}
virtual void AddObserver(
AXTreeSourceObserver<AXNodeSource, AXTreeDataType, AXNodeDataType>*
observer) {
NOTIMPLEMENTED();
}
virtual void RemoveObserver(
AXTreeSourceObserver<AXNodeSource, AXTreeDataType, AXNodeDataType>*
observer) {
NOTIMPLEMENTED();
}
protected:
AXTreeSource() {}
};
}
#endif