OLD | NEW |
| (Empty) |
1 // Copyright 2015 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 "base/containers/hash_tables.h" | |
6 #include "ui/accessibility/platform/test_ax_node_wrapper.h" | |
7 | |
8 namespace ui { | |
9 | |
10 namespace { | |
11 | |
12 // A global map from AXNodes to TestAXNodeWrappers. | |
13 base::hash_map<AXNode*, TestAXNodeWrapper*> g_node_to_wrapper_map; | |
14 | |
15 // A global coordinate offset. | |
16 gfx::Vector2d g_offset; | |
17 | |
18 // A simple implementation of AXTreeDelegate to catch when AXNodes are | |
19 // deleted so we can delete their wrappers. | |
20 class TestAXTreeDelegate : public AXTreeDelegate { | |
21 void OnNodeWillBeDeleted(AXNode* node) override { | |
22 auto iter = g_node_to_wrapper_map.find(node); | |
23 if (iter != g_node_to_wrapper_map.end()) { | |
24 TestAXNodeWrapper* wrapper = iter->second; | |
25 delete wrapper; | |
26 g_node_to_wrapper_map.erase(iter->first); | |
27 } | |
28 } | |
29 void OnSubtreeWillBeDeleted(AXNode* node) override {} | |
30 void OnNodeCreated(AXNode* node) override {} | |
31 void OnNodeChanged(AXNode* node) override {} | |
32 void OnAtomicUpdateFinished(bool root_changed, | |
33 const std::vector<Change>& changes) override {} | |
34 }; | |
35 | |
36 TestAXTreeDelegate g_ax_tree_delegate; | |
37 | |
38 } // namespace | |
39 | |
40 // static | |
41 TestAXNodeWrapper* TestAXNodeWrapper::GetOrCreate(AXTree* tree, AXNode* node) { | |
42 // Just return NULL if |node| is NULL; this makes test code simpler because | |
43 // now we don't have to null-check AXNode* every time we call GetOrCreate. | |
44 if (!node) | |
45 return nullptr; | |
46 | |
47 tree->SetDelegate(&g_ax_tree_delegate); | |
48 auto iter = g_node_to_wrapper_map.find(node); | |
49 if (iter != g_node_to_wrapper_map.end()) | |
50 return iter->second; | |
51 TestAXNodeWrapper* wrapper = new TestAXNodeWrapper(tree, node); | |
52 g_node_to_wrapper_map[node] = wrapper; | |
53 return wrapper; | |
54 } | |
55 | |
56 // static | |
57 void TestAXNodeWrapper::SetGlobalCoordinateOffset(const gfx::Vector2d& offset) { | |
58 g_offset = offset; | |
59 } | |
60 | |
61 TestAXNodeWrapper::~TestAXNodeWrapper() { | |
62 platform_node_->Destroy(); | |
63 } | |
64 | |
65 const AXNodeData& TestAXNodeWrapper::GetData() { | |
66 return node_->data(); | |
67 } | |
68 | |
69 gfx::NativeViewAccessible TestAXNodeWrapper::GetParent() { | |
70 TestAXNodeWrapper* parent_wrapper = GetOrCreate(tree_, node_->parent()); | |
71 return parent_wrapper ? | |
72 parent_wrapper->ax_platform_node()->GetNativeViewAccessible() : | |
73 nullptr; | |
74 } | |
75 | |
76 int TestAXNodeWrapper::GetChildCount() { | |
77 return node_->child_count(); | |
78 } | |
79 | |
80 gfx::NativeViewAccessible TestAXNodeWrapper::ChildAtIndex(int index) { | |
81 CHECK_GE(index, 0); | |
82 CHECK_LT(index, GetChildCount()); | |
83 TestAXNodeWrapper* child_wrapper = | |
84 GetOrCreate(tree_, node_->children()[index]); | |
85 return child_wrapper ? | |
86 child_wrapper->ax_platform_node()->GetNativeViewAccessible() : | |
87 nullptr; | |
88 } | |
89 | |
90 gfx::Vector2d TestAXNodeWrapper::GetGlobalCoordinateOffset() { | |
91 return g_offset; | |
92 } | |
93 | |
94 gfx::NativeViewAccessible TestAXNodeWrapper::HitTestSync(int x, int y) { | |
95 return nullptr; | |
96 } | |
97 | |
98 gfx::NativeViewAccessible TestAXNodeWrapper::GetFocus() { | |
99 return nullptr; | |
100 } | |
101 | |
102 gfx::AcceleratedWidget | |
103 TestAXNodeWrapper::GetTargetForNativeAccessibilityEvent() { | |
104 return gfx::kNullAcceleratedWidget; | |
105 } | |
106 | |
107 void TestAXNodeWrapper::DoDefaultAction() { | |
108 } | |
109 | |
110 bool TestAXNodeWrapper::SetStringValue(const base::string16& new_value) { | |
111 return false; | |
112 } | |
113 | |
114 TestAXNodeWrapper::TestAXNodeWrapper(AXTree* tree, AXNode* node) | |
115 : tree_(tree), | |
116 node_(node), | |
117 platform_node_(AXPlatformNode::Create(this)) { | |
118 } | |
119 | |
120 } // namespace ui | |
OLD | NEW |