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 3 // found in the LICENSE file. 4 5 #include "ui/accessibility/ax_tree_id_registry.h" 6 7 #include "base/memory/singleton.h" 8 #include "base/strings/string_number_conversions.h" 9 #include "ui/accessibility/ax_action_handler_base.h" 10 11 namespace ui { 12 13 // static GetInstance()14AXTreeIDRegistry* AXTreeIDRegistry::GetInstance() { 15 return base::Singleton<AXTreeIDRegistry>::get(); 16 } 17 SetFrameIDForAXTreeID(const FrameID & frame_id,const AXTreeID & ax_tree_id)18void AXTreeIDRegistry::SetFrameIDForAXTreeID(const FrameID& frame_id, 19 const AXTreeID& ax_tree_id) { 20 auto it = frame_to_ax_tree_id_map_.find(frame_id); 21 if (it != frame_to_ax_tree_id_map_.end()) { 22 NOTREACHED(); 23 return; 24 } 25 26 frame_to_ax_tree_id_map_[frame_id] = ax_tree_id; 27 ax_tree_to_frame_id_map_[ax_tree_id] = frame_id; 28 } 29 GetFrameID(const AXTreeID & ax_tree_id)30AXTreeIDRegistry::FrameID AXTreeIDRegistry::GetFrameID( 31 const AXTreeID& ax_tree_id) { 32 auto it = ax_tree_to_frame_id_map_.find(ax_tree_id); 33 if (it != ax_tree_to_frame_id_map_.end()) 34 return it->second; 35 36 return FrameID(-1, -1); 37 } 38 GetAXTreeID(AXTreeIDRegistry::FrameID frame_id)39AXTreeID AXTreeIDRegistry::GetAXTreeID(AXTreeIDRegistry::FrameID frame_id) { 40 auto it = frame_to_ax_tree_id_map_.find(frame_id); 41 if (it != frame_to_ax_tree_id_map_.end()) 42 return it->second; 43 44 return ui::AXTreeIDUnknown(); 45 } 46 GetOrCreateAXTreeID(AXActionHandlerBase * handler)47AXTreeID AXTreeIDRegistry::GetOrCreateAXTreeID(AXActionHandlerBase* handler) { 48 for (auto it : id_to_action_handler_) { 49 if (it.second == handler) 50 return it.first; 51 } 52 AXTreeID new_id = AXTreeID::CreateNewAXTreeID(); 53 SetAXTreeID(new_id, handler); 54 return new_id; 55 } 56 GetActionHandler(AXTreeID ax_tree_id)57AXActionHandlerBase* AXTreeIDRegistry::GetActionHandler(AXTreeID ax_tree_id) { 58 auto it = id_to_action_handler_.find(ax_tree_id); 59 if (it == id_to_action_handler_.end()) 60 return nullptr; 61 return it->second; 62 } 63 SetAXTreeID(const ui::AXTreeID & id,AXActionHandlerBase * action_handler)64void AXTreeIDRegistry::SetAXTreeID(const ui::AXTreeID& id, 65 AXActionHandlerBase* action_handler) { 66 DCHECK(id_to_action_handler_.find(id) == id_to_action_handler_.end()); 67 id_to_action_handler_[id] = action_handler; 68 } 69 RemoveAXTreeID(AXTreeID ax_tree_id)70void AXTreeIDRegistry::RemoveAXTreeID(AXTreeID ax_tree_id) { 71 auto frame_it = ax_tree_to_frame_id_map_.find(ax_tree_id); 72 if (frame_it != ax_tree_to_frame_id_map_.end()) { 73 frame_to_ax_tree_id_map_.erase(frame_it->second); 74 ax_tree_to_frame_id_map_.erase(frame_it); 75 } 76 77 auto action_it = id_to_action_handler_.find(ax_tree_id); 78 if (action_it != id_to_action_handler_.end()) 79 id_to_action_handler_.erase(action_it); 80 } 81 AXTreeIDRegistry()82AXTreeIDRegistry::AXTreeIDRegistry() { 83 } 84 ~AXTreeIDRegistry()85AXTreeIDRegistry::~AXTreeIDRegistry() {} 86 87 } // namespace ui 88