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 
5 #include "ui/accessibility/ax_serializable_tree.h"
6 
7 #include <stdint.h>
8 
9 #include "ui/accessibility/ax_node.h"
10 
11 namespace ui {
12 
13 // This class is an implementation of the AXTreeSource interface with
14 // AXNode as the node type, that just delegates to an AXTree. The purpose
15 // of this is so that AXTreeSerializer only needs to work with the
16 // AXTreeSource abstraction and doesn't need to actually know about
17 // AXTree directly. Another AXTreeSource is used to abstract the Blink
18 // accessibility tree.
19 class AX_EXPORT AXTreeSourceAdapter
20     : public AXTreeSource<const AXNode*, AXNodeData, AXTreeData> {
21  public:
AXTreeSourceAdapter(AXTree * tree)22   AXTreeSourceAdapter(AXTree* tree) : tree_(tree) {}
~AXTreeSourceAdapter()23   ~AXTreeSourceAdapter() override {}
24 
25   // AXTreeSource implementation.
GetTreeData(AXTreeData * data) const26   bool GetTreeData(AXTreeData* data) const override {
27     *data = tree_->data();
28     return true;
29   }
30 
GetRoot() const31   AXNode* GetRoot() const override { return tree_->root(); }
32 
GetFromId(int32_t id) const33   AXNode* GetFromId(int32_t id) const override { return tree_->GetFromId(id); }
34 
GetId(const AXNode * node) const35   int32_t GetId(const AXNode* node) const override { return node->id(); }
36 
GetChildren(const AXNode * node,std::vector<const AXNode * > * out_children) const37   void GetChildren(const AXNode* node,
38                    std::vector<const AXNode*>* out_children) const override {
39     *out_children = std::vector<const AXNode*>(node->children().cbegin(),
40                                                node->children().cend());
41   }
42 
GetParent(const AXNode * node) const43   AXNode* GetParent(const AXNode* node) const override {
44     return node->parent();
45   }
46 
IsIgnored(const AXNode * node) const47   bool IsIgnored(const AXNode* node) const override {
48     return node->IsIgnored();
49   }
50 
IsValid(const AXNode * node) const51   bool IsValid(const AXNode* node) const override { return node != nullptr; }
52 
IsEqual(const AXNode * node1,const AXNode * node2) const53   bool IsEqual(const AXNode* node1, const AXNode* node2) const override {
54     return node1 == node2;
55   }
56 
GetNull() const57   const AXNode* GetNull() const override { return nullptr; }
58 
SerializeNode(const AXNode * node,AXNodeData * out_data) const59   void SerializeNode(const AXNode* node, AXNodeData* out_data) const override {
60     *out_data = node->data();
61   }
62 
63  private:
64   AXTree* tree_;
65 };
66 
AXSerializableTree()67 AXSerializableTree::AXSerializableTree()
68     : AXTree() {}
69 
AXSerializableTree(const AXTreeUpdate & initial_state)70 AXSerializableTree::AXSerializableTree(
71     const AXTreeUpdate& initial_state)
72     : AXTree(initial_state) {
73 }
74 
~AXSerializableTree()75 AXSerializableTree::~AXSerializableTree() {
76 }
77 
78 AXTreeSource<const AXNode*, AXNodeData, AXTreeData>*
CreateTreeSource()79 AXSerializableTree::CreateTreeSource() {
80   return new AXTreeSourceAdapter(this);
81 }
82 
83 }  // namespace ui
84