Chromium Code Reviews| Index: ui/accessibility/ax_tree_id_registry.cc |
| diff --git a/ui/accessibility/ax_tree_id_registry.cc b/ui/accessibility/ax_tree_id_registry.cc |
| index 35e5d2ad7ade35262cb607d58f9841b2ef06b958..801c776153b843d7b8ca914140ca974c4f026a3a 100644 |
| --- a/ui/accessibility/ax_tree_id_registry.cc |
| +++ b/ui/accessibility/ax_tree_id_registry.cc |
| @@ -5,6 +5,7 @@ |
| #include "ui/accessibility/ax_tree_id_registry.h" |
| #include "base/memory/singleton.h" |
| +#include "ui/accessibility/ax_host_delegate.h" |
| namespace ui { |
| @@ -20,8 +21,7 @@ AXTreeIDRegistry::AXTreeID AXTreeIDRegistry::GetOrCreateAXTreeID( |
| int process_id, |
| int routing_id) { |
| FrameID frame_id(process_id, routing_id); |
| - std::map<FrameID, AXTreeID>::iterator it; |
| - it = frame_to_ax_tree_id_map_.find(frame_id); |
| + auto it = frame_to_ax_tree_id_map_.find(frame_id); |
| if (it != frame_to_ax_tree_id_map_.end()) |
| return it->second; |
| @@ -32,27 +32,48 @@ AXTreeIDRegistry::AXTreeID AXTreeIDRegistry::GetOrCreateAXTreeID( |
| return new_id; |
| } |
| -int AXTreeIDRegistry::CreateID() { |
| - return ++ax_tree_id_counter_; |
| -} |
| - |
| AXTreeIDRegistry::FrameID AXTreeIDRegistry::GetFrameID( |
| AXTreeIDRegistry::AXTreeID ax_tree_id) { |
| - std::map<AXTreeID, FrameID>::iterator it; |
| - it = ax_tree_to_frame_id_map_.find(ax_tree_id); |
| + auto it = ax_tree_to_frame_id_map_.find(ax_tree_id); |
| if (it != ax_tree_to_frame_id_map_.end()) |
| return it->second; |
| return FrameID(-1, -1); |
| } |
| +AXTreeIDRegistry::AXTreeID AXTreeIDRegistry::GetOrCreateAXTreeID( |
| + AXHostDelegate* delegate) { |
| + for (auto it : id_to_host_delegate_) { |
| + if (it.second == delegate) |
| + return it.first; |
| + } |
| + id_to_host_delegate_[++ax_tree_id_counter_] = delegate; |
| + return ax_tree_id_counter_; |
| +} |
| + |
| +AXHostDelegate* AXTreeIDRegistry::GetHostDelegate( |
| + AXTreeIDRegistry::AXTreeID ax_tree_id) { |
| + auto it = id_to_host_delegate_.find(ax_tree_id); |
| + if (it == id_to_host_delegate_.end()) |
| + return nullptr; |
| + return it->second; |
| +} |
| + |
| +void AXTreeIDRegistry::SetDesktopHostDelegate(AXHostDelegate* delegate) { |
| + id_to_host_delegate_[0] = delegate; |
|
dmazzoni
2017/02/20 04:50:46
Was the user supposed to already call GetOrCreateA
David Tseng
2017/02/21 19:09:05
Got rid of desktop specifics and added a new const
|
| +} |
| + |
| void AXTreeIDRegistry::RemoveAXTreeID(AXTreeIDRegistry::AXTreeID ax_tree_id) { |
| - std::map<AXTreeID, FrameID>::iterator it; |
| - it = ax_tree_to_frame_id_map_.find(ax_tree_id); |
| - if (it != ax_tree_to_frame_id_map_.end()) { |
| - frame_to_ax_tree_id_map_.erase(it->second); |
| - ax_tree_to_frame_id_map_.erase(it); |
| + auto frame_it = ax_tree_to_frame_id_map_.find(ax_tree_id); |
| + if (frame_it != ax_tree_to_frame_id_map_.end()) { |
| + frame_to_ax_tree_id_map_.erase(frame_it->second); |
| + ax_tree_to_frame_id_map_.erase(frame_it); |
| + return; |
| } |
| + |
| + auto action_it = id_to_host_delegate_.find(ax_tree_id); |
| + if (action_it != id_to_host_delegate_.end()) |
| + id_to_host_delegate_.erase(action_it); |
| } |
| AXTreeIDRegistry::AXTreeIDRegistry() : ax_tree_id_counter_(-1) { |