1 // Copyright 2019 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_tree_manager_map.h" 6 7 #include "base/stl_util.h" 8 #include "ui/accessibility/ax_enums.mojom.h" 9 10 namespace ui { 11 AXTreeManagerMap()12AXTreeManagerMap::AXTreeManagerMap() {} 13 ~AXTreeManagerMap()14AXTreeManagerMap::~AXTreeManagerMap() {} 15 GetInstance()16AXTreeManagerMap& AXTreeManagerMap::GetInstance() { 17 static base::NoDestructor<AXTreeManagerMap> instance; 18 return *instance; 19 } 20 AddTreeManager(AXTreeID tree_id,AXTreeManager * manager)21void AXTreeManagerMap::AddTreeManager(AXTreeID tree_id, 22 AXTreeManager* manager) { 23 if (tree_id != AXTreeIDUnknown()) 24 map_[tree_id] = manager; 25 } 26 RemoveTreeManager(AXTreeID tree_id)27void AXTreeManagerMap::RemoveTreeManager(AXTreeID tree_id) { 28 if (tree_id != AXTreeIDUnknown()) 29 map_.erase(tree_id); 30 } 31 GetManager(AXTreeID tree_id)32AXTreeManager* AXTreeManagerMap::GetManager(AXTreeID tree_id) { 33 if (tree_id == AXTreeIDUnknown() || !base::Contains(map_, tree_id)) 34 return nullptr; 35 36 return map_.at(tree_id); 37 } 38 GetManagerForChildTree(const AXNode & parent_node)39AXTreeManager* AXTreeManagerMap::GetManagerForChildTree( 40 const AXNode& parent_node) { 41 if (!parent_node.data().HasStringAttribute( 42 ax::mojom::StringAttribute::kChildTreeId)) { 43 return nullptr; 44 } 45 46 AXTreeID child_tree_id = 47 AXTreeID::FromString(parent_node.data().GetStringAttribute( 48 ax::mojom::StringAttribute::kChildTreeId)); 49 AXTreeManager* child_tree_manager = 50 AXTreeManagerMap::GetInstance().GetManager(child_tree_id); 51 52 // Some platforms do not use AXTreeManagers, so child trees don't exist in 53 // the browser process. 54 if (!child_tree_manager) 55 return nullptr; 56 57 DCHECK(child_tree_manager->GetParentNodeFromParentTreeAsAXNode()->id() == 58 parent_node.id()); 59 60 return child_tree_manager; 61 } 62 63 } // namespace ui 64