#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_data.h"
#include "ui/accessibility/ax_tree_data.h"
#include "ui/accessibility/ax_tree_source_observer.h"
namespace ui {
template <typename AXNodeSource>
class AXTreeSource {
public:
virtual ~AXTreeSource() = default;
virtual bool GetTreeData(AXTreeData* 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, AXNodeData* out_data) const = 0;
virtual std::string GetDebugString(AXNodeSource node) const {
AXNodeData node_data;
SerializeNode(node, &node_data);
return node_data.ToString();
}
virtual void AddObserver(ui::AXTreeSourceObserver<AXNodeSource>* observer) {
NOTIMPLEMENTED();
}
virtual void RemoveObserver(
ui::AXTreeSourceObserver<AXNodeSource>* observer) {
NOTIMPLEMENTED();
}
protected:
AXTreeSource() {}
};
}
#endif