[email protected] | 4b02bbca | 2013-11-22 08:59:03 | [diff] [blame] | 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 | |||||
avi | 9c81217b | 2015-12-24 23:40:05 | [diff] [blame] | 7 | #include <stdint.h> |
8 | |||||
[email protected] | 4b02bbca | 2013-11-22 08:59:03 | [diff] [blame] | 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. | ||||
dmazzoni | ac6cdd0 | 2015-08-04 21:07:06 | [diff] [blame] | 19 | class AX_EXPORT AXTreeSourceAdapter |
dmazzoni | 329fd01 | 2015-10-22 20:05:35 | [diff] [blame] | 20 | : public AXTreeSource<const AXNode*, AXNodeData, AXTreeData> { |
[email protected] | 4b02bbca | 2013-11-22 08:59:03 | [diff] [blame] | 21 | public: |
22 | AXTreeSourceAdapter(AXTree* tree) : tree_(tree) {} | ||||
dcheng | 0803879 | 2014-10-21 10:53:26 | [diff] [blame] | 23 | ~AXTreeSourceAdapter() override {} |
[email protected] | 4b02bbca | 2013-11-22 08:59:03 | [diff] [blame] | 24 | |
25 | // AXTreeSource implementation. | ||||
dmazzoni | a6bc5133 | 2016-06-17 03:42:46 | [diff] [blame] | 26 | bool GetTreeData(AXTreeData* data) const override { |
27 | *data = tree_->data(); | ||||
28 | return true; | ||||
29 | } | ||||
dmazzoni | 329fd01 | 2015-10-22 20:05:35 | [diff] [blame] | 30 | |
tfarina | 6b1c1e08 | 2015-02-20 23:47:07 | [diff] [blame] | 31 | AXNode* GetRoot() const override { return tree_->root(); } |
[email protected] | d4e27346 | 2013-12-04 04:37:58 | [diff] [blame] | 32 | |
avi | 9c81217b | 2015-12-24 23:40:05 | [diff] [blame] | 33 | AXNode* GetFromId(int32_t id) const override { return tree_->GetFromId(id); } |
[email protected] | 4b02bbca | 2013-11-22 08:59:03 | [diff] [blame] | 34 | |
avi | 9c81217b | 2015-12-24 23:40:05 | [diff] [blame] | 35 | int32_t GetId(const AXNode* node) const override { return node->id(); } |
[email protected] | 4b02bbca | 2013-11-22 08:59:03 | [diff] [blame] | 36 | |
dcheng | 0803879 | 2014-10-21 10:53:26 | [diff] [blame] | 37 | void GetChildren(const AXNode* node, |
38 | std::vector<const AXNode*>* out_children) const override { | ||||
[email protected] | e736e81b | 2014-02-24 07:15:58 | [diff] [blame] | 39 | for (int i = 0; i < node->child_count(); ++i) |
40 | out_children->push_back(node->ChildAtIndex(i)); | ||||
[email protected] | 4b02bbca | 2013-11-22 08:59:03 | [diff] [blame] | 41 | } |
42 | |||||
dcheng | 0803879 | 2014-10-21 10:53:26 | [diff] [blame] | 43 | AXNode* GetParent(const AXNode* node) const override { |
[email protected] | d4e27346 | 2013-12-04 04:37:58 | [diff] [blame] | 44 | return node->parent(); |
[email protected] | 4b02bbca | 2013-11-22 08:59:03 | [diff] [blame] | 45 | } |
46 | |||||
dcheng | 0803879 | 2014-10-21 10:53:26 | [diff] [blame] | 47 | bool IsValid(const AXNode* node) const override { return node != NULL; } |
[email protected] | e736e81b | 2014-02-24 07:15:58 | [diff] [blame] | 48 | |
dcheng | 0803879 | 2014-10-21 10:53:26 | [diff] [blame] | 49 | bool IsEqual(const AXNode* node1, const AXNode* node2) const override { |
[email protected] | e736e81b | 2014-02-24 07:15:58 | [diff] [blame] | 50 | return node1 == node2; |
51 | } | ||||
52 | |||||
dcheng | 0803879 | 2014-10-21 10:53:26 | [diff] [blame] | 53 | const AXNode* GetNull() const override { return NULL; } |
[email protected] | e736e81b | 2014-02-24 07:15:58 | [diff] [blame] | 54 | |
dcheng | 0803879 | 2014-10-21 10:53:26 | [diff] [blame] | 55 | void SerializeNode(const AXNode* node, AXNodeData* out_data) const override { |
[email protected] | 4b02bbca | 2013-11-22 08:59:03 | [diff] [blame] | 56 | *out_data = node->data(); |
57 | } | ||||
58 | |||||
59 | private: | ||||
60 | AXTree* tree_; | ||||
61 | }; | ||||
62 | |||||
63 | AXSerializableTree::AXSerializableTree() | ||||
64 | : AXTree() {} | ||||
65 | |||||
dmazzoni | ac6cdd0 | 2015-08-04 21:07:06 | [diff] [blame] | 66 | AXSerializableTree::AXSerializableTree( |
dmazzoni | 329fd01 | 2015-10-22 20:05:35 | [diff] [blame] | 67 | const AXTreeUpdate& initial_state) |
[email protected] | 4b02bbca | 2013-11-22 08:59:03 | [diff] [blame] | 68 | : AXTree(initial_state) { |
69 | } | ||||
70 | |||||
71 | AXSerializableTree::~AXSerializableTree() { | ||||
72 | } | ||||
73 | |||||
dmazzoni | 329fd01 | 2015-10-22 20:05:35 | [diff] [blame] | 74 | AXTreeSource<const AXNode*, AXNodeData, AXTreeData>* |
dmazzoni | ac6cdd0 | 2015-08-04 21:07:06 | [diff] [blame] | 75 | AXSerializableTree::CreateTreeSource() { |
[email protected] | 4b02bbca | 2013-11-22 08:59:03 | [diff] [blame] | 76 | return new AXTreeSourceAdapter(this); |
77 | } | ||||
78 | |||||
79 | } // namespace ui |