ax_serializable_tree.cc 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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. #include "ui/accessibility/ax_serializable_tree.h"
  5. #include <stdint.h>
  6. #include "base/memory/raw_ptr.h"
  7. #include "ui/accessibility/ax_node.h"
  8. namespace ui {
  9. // This class is an implementation of the AXTreeSource interface with
  10. // AXNode as the node type, that just delegates to an AXTree. The purpose
  11. // of this is so that AXTreeSerializer only needs to work with the
  12. // AXTreeSource abstraction and doesn't need to actually know about
  13. // AXTree directly. Another AXTreeSource is used to abstract the Blink
  14. // accessibility tree.
  15. class AX_EXPORT AXTreeSourceAdapter : public AXTreeSource<const AXNode*> {
  16. public:
  17. explicit AXTreeSourceAdapter(AXTree* tree) : tree_(tree) {}
  18. ~AXTreeSourceAdapter() override = default;
  19. // AXTreeSource implementation.
  20. bool GetTreeData(AXTreeData* data) const override {
  21. *data = tree_->data();
  22. return true;
  23. }
  24. AXNode* GetRoot() const override { return tree_->root(); }
  25. AXNode* GetFromId(AXNodeID id) const override { return tree_->GetFromId(id); }
  26. AXNodeID GetId(const AXNode* node) const override { return node->id(); }
  27. void GetChildren(const AXNode* node,
  28. std::vector<const AXNode*>* out_children) const override {
  29. *out_children = std::vector<const AXNode*>(node->children().cbegin(),
  30. node->children().cend());
  31. }
  32. AXNode* GetParent(const AXNode* node) const override {
  33. return node->parent();
  34. }
  35. bool IsIgnored(const AXNode* node) const override {
  36. return node->IsIgnored();
  37. }
  38. bool IsValid(const AXNode* node) const override { return node != nullptr; }
  39. bool IsEqual(const AXNode* node1, const AXNode* node2) const override {
  40. return node1 == node2;
  41. }
  42. const AXNode* GetNull() const override { return nullptr; }
  43. void SerializeNode(const AXNode* node, AXNodeData* out_data) const override {
  44. *out_data = node->data();
  45. }
  46. private:
  47. raw_ptr<AXTree> tree_;
  48. };
  49. AXSerializableTree::AXSerializableTree()
  50. : AXTree() {}
  51. AXSerializableTree::AXSerializableTree(
  52. const AXTreeUpdate& initial_state)
  53. : AXTree(initial_state) {
  54. }
  55. AXSerializableTree::~AXSerializableTree() {
  56. }
  57. AXTreeSource<const AXNode*>* AXSerializableTree::CreateTreeSource() {
  58. return new AXTreeSourceAdapter(this);
  59. }
  60. } // namespace ui