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