| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "ash/test/ash_test_base.h" | 7 #include "ash/test/ash_test_base.h" |
| 8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
| 9 #include "chrome/browser/ui/aura/accessibility/ax_tree_source_aura.h" | 9 #include "chrome/browser/ui/aura/accessibility/ax_tree_source_aura.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| 11 #include "ui/accessibility/ax_enums.h" | 11 #include "ui/accessibility/ax_enums.h" |
| 12 #include "ui/accessibility/ax_node.h" | 12 #include "ui/accessibility/ax_node.h" |
| 13 #include "ui/accessibility/ax_serializable_tree.h" | 13 #include "ui/accessibility/ax_serializable_tree.h" |
| 14 #include "ui/accessibility/ax_tree_serializer.h" | 14 #include "ui/accessibility/ax_tree_serializer.h" |
| 15 #include "ui/accessibility/ax_tree_update.h" | 15 #include "ui/accessibility/ax_tree_update.h" |
| 16 #include "ui/aura/window.h" | 16 #include "ui/aura/window.h" |
| 17 #include "ui/views/accessibility/ax_aura_obj_cache.h" | 17 #include "ui/views/accessibility/ax_aura_obj_cache.h" |
| 18 #include "ui/views/accessibility/ax_aura_obj_wrapper.h" | 18 #include "ui/views/accessibility/ax_aura_obj_wrapper.h" |
| 19 #include "ui/views/controls/textfield/textfield.h" | 19 #include "ui/views/controls/textfield/textfield.h" |
| 20 #include "ui/views/test/views_test_base.h" | 20 #include "ui/views/test/views_test_base.h" |
| 21 #include "ui/views/widget/widget.h" | 21 #include "ui/views/widget/widget.h" |
| 22 | 22 |
| 23 using views::AXAuraObjCache; | 23 using views::AXAuraObjCache; |
| 24 using views::AXAuraObjWrapper; | 24 using views::AXAuraObjWrapper; |
| 25 using views::Textfield; | 25 using views::Textfield; |
| 26 using views::View; | 26 using views::View; |
| 27 using views::Widget; | 27 using views::Widget; |
| 28 | 28 |
| 29 using AuraAXTreeSerializer = | 29 using AuraAXTreeSerializer = ui::AXTreeSerializer<views::AXAuraObjWrapper*, |
| 30 ui::AXTreeSerializer<views::AXAuraObjWrapper*, ui::AXNodeData>; | 30 ui::AXNodeData, |
| 31 ui::AXTreeData>; |
| 31 | 32 |
| 32 // Helper to count the number of nodes in a tree. | 33 // Helper to count the number of nodes in a tree. |
| 33 size_t GetSize(AXAuraObjWrapper* tree) { | 34 size_t GetSize(AXAuraObjWrapper* tree) { |
| 34 size_t count = 1; | 35 size_t count = 1; |
| 35 | 36 |
| 36 std::vector<AXAuraObjWrapper*> out_children; | 37 std::vector<AXAuraObjWrapper*> out_children; |
| 37 tree->GetChildren(&out_children); | 38 tree->GetChildren(&out_children); |
| 38 | 39 |
| 39 for (size_t i = 0; i < out_children.size(); ++i) | 40 for (size_t i = 0; i < out_children.size(); ++i) |
| 40 count += GetSize(out_children[i]); | 41 count += GetSize(out_children[i]); |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 127 | 128 |
| 128 // Focus and verify. | 129 // Focus and verify. |
| 129 ASSERT_FALSE(textfield_->HasFocus()); | 130 ASSERT_FALSE(textfield_->HasFocus()); |
| 130 textfield_wrapper->Focus(); | 131 textfield_wrapper->Focus(); |
| 131 ASSERT_TRUE(textfield_->HasFocus()); | 132 ASSERT_TRUE(textfield_->HasFocus()); |
| 132 } | 133 } |
| 133 | 134 |
| 134 TEST_F(AXTreeSourceAuraTest, Serialize) { | 135 TEST_F(AXTreeSourceAuraTest, Serialize) { |
| 135 AXTreeSourceAura ax_tree; | 136 AXTreeSourceAura ax_tree; |
| 136 AuraAXTreeSerializer ax_serializer(&ax_tree); | 137 AuraAXTreeSerializer ax_serializer(&ax_tree); |
| 137 ui::AXTreeUpdate<ui::AXNodeData> out_update; | 138 ui::AXTreeUpdate out_update; |
| 138 | 139 |
| 139 // This is the initial serialization. | 140 // This is the initial serialization. |
| 140 ax_serializer.SerializeChanges(ax_tree.GetRoot(), &out_update); | 141 ax_serializer.SerializeChanges(ax_tree.GetRoot(), &out_update); |
| 141 | 142 |
| 142 // The update should just be the desktop node since no events have been fired | 143 // The update should just be the desktop node since no events have been fired |
| 143 // on any controls, so no windows have been cached. | 144 // on any controls, so no windows have been cached. |
| 144 ASSERT_EQ(1U, out_update.nodes.size()); | 145 ASSERT_EQ(1U, out_update.nodes.size()); |
| 145 | 146 |
| 146 // Try removing some child views and re-adding which should fire some events. | 147 // Try removing some child views and re-adding which should fire some events. |
| 147 content_->RemoveAllChildViews(false /* delete_children */); | 148 content_->RemoveAllChildViews(false /* delete_children */); |
| 148 content_->AddChildView(textfield_); | 149 content_->AddChildView(textfield_); |
| 149 | 150 |
| 150 // Grab the textfield since serialization only walks up the tree (not down | 151 // Grab the textfield since serialization only walks up the tree (not down |
| 151 // from root). | 152 // from root). |
| 152 AXAuraObjWrapper* textfield_wrapper = | 153 AXAuraObjWrapper* textfield_wrapper = |
| 153 AXAuraObjCache::GetInstance()->GetOrCreate(textfield_); | 154 AXAuraObjCache::GetInstance()->GetOrCreate(textfield_); |
| 154 | 155 |
| 155 // Now, re-serialize. | 156 // Now, re-serialize. |
| 156 ui::AXTreeUpdate<ui::AXNodeData> out_update2; | 157 ui::AXTreeUpdate out_update2; |
| 157 ax_serializer.SerializeChanges(textfield_wrapper, &out_update2); | 158 ax_serializer.SerializeChanges(textfield_wrapper, &out_update2); |
| 158 | 159 |
| 159 size_t node_count = out_update2.nodes.size(); | 160 size_t node_count = out_update2.nodes.size(); |
| 160 | 161 |
| 161 // We should have far more updates this time around. | 162 // We should have far more updates this time around. |
| 162 ASSERT_GE(node_count, 10U); | 163 ASSERT_GE(node_count, 10U); |
| 163 | 164 |
| 164 ASSERT_EQ(textfield_wrapper->GetID(), out_update2.nodes[node_count - 1].id); | 165 ASSERT_EQ(textfield_wrapper->GetID(), out_update2.nodes[node_count - 1].id); |
| 165 ASSERT_EQ(ui::AX_ROLE_TEXT_FIELD, out_update2.nodes[node_count - 1].role); | 166 ASSERT_EQ(ui::AX_ROLE_TEXT_FIELD, out_update2.nodes[node_count - 1].role); |
| 166 } | 167 } |
| OLD | NEW |