Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(392)

Side by Side Diff: ui/accessibility/ax_tree_id_registry.cc

Issue 2700103004: Initial support for accessibility actions on ARC. (Closed)
Patch Set: Use desktop tree id. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/accessibility/ax_tree_id_registry.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "ui/accessibility/ax_tree_id_registry.h" 5 #include "ui/accessibility/ax_tree_id_registry.h"
6 6
7 #include "base/memory/singleton.h" 7 #include "base/memory/singleton.h"
8 #include "ui/accessibility/ax_host_delegate.h"
8 9
9 namespace ui { 10 namespace ui {
10 11
11 // static 12 // static
12 const AXTreeIDRegistry::AXTreeID AXTreeIDRegistry::kNoAXTreeID = -1; 13 const AXTreeIDRegistry::AXTreeID AXTreeIDRegistry::kNoAXTreeID = -1;
13 14
14 // static 15 // static
15 AXTreeIDRegistry* AXTreeIDRegistry::GetInstance() { 16 AXTreeIDRegistry* AXTreeIDRegistry::GetInstance() {
16 return base::Singleton<AXTreeIDRegistry>::get(); 17 return base::Singleton<AXTreeIDRegistry>::get();
17 } 18 }
18 19
19 AXTreeIDRegistry::AXTreeID AXTreeIDRegistry::GetOrCreateAXTreeID( 20 AXTreeIDRegistry::AXTreeID AXTreeIDRegistry::GetOrCreateAXTreeID(
20 int process_id, 21 int process_id,
21 int routing_id) { 22 int routing_id) {
22 FrameID frame_id(process_id, routing_id); 23 FrameID frame_id(process_id, routing_id);
23 std::map<FrameID, AXTreeID>::iterator it; 24 auto it = frame_to_ax_tree_id_map_.find(frame_id);
24 it = frame_to_ax_tree_id_map_.find(frame_id);
25 if (it != frame_to_ax_tree_id_map_.end()) 25 if (it != frame_to_ax_tree_id_map_.end())
26 return it->second; 26 return it->second;
27 27
28 AXTreeID new_id = ++ax_tree_id_counter_; 28 AXTreeID new_id = ++ax_tree_id_counter_;
29 frame_to_ax_tree_id_map_[frame_id] = new_id; 29 frame_to_ax_tree_id_map_[frame_id] = new_id;
30 ax_tree_to_frame_id_map_[new_id] = frame_id; 30 ax_tree_to_frame_id_map_[new_id] = frame_id;
31 31
32 return new_id; 32 return new_id;
33 } 33 }
34 34
35 int AXTreeIDRegistry::CreateID() {
36 return ++ax_tree_id_counter_;
37 }
38
39 AXTreeIDRegistry::FrameID AXTreeIDRegistry::GetFrameID( 35 AXTreeIDRegistry::FrameID AXTreeIDRegistry::GetFrameID(
40 AXTreeIDRegistry::AXTreeID ax_tree_id) { 36 AXTreeIDRegistry::AXTreeID ax_tree_id) {
41 std::map<AXTreeID, FrameID>::iterator it; 37 auto it = ax_tree_to_frame_id_map_.find(ax_tree_id);
42 it = ax_tree_to_frame_id_map_.find(ax_tree_id);
43 if (it != ax_tree_to_frame_id_map_.end()) 38 if (it != ax_tree_to_frame_id_map_.end())
44 return it->second; 39 return it->second;
45 40
46 return FrameID(-1, -1); 41 return FrameID(-1, -1);
47 } 42 }
48 43
44 AXTreeIDRegistry::AXTreeID AXTreeIDRegistry::GetOrCreateAXTreeID(
45 AXHostDelegate* delegate) {
46 for (auto it : id_to_host_delegate_) {
47 if (it.second == delegate)
48 return it.first;
49 }
50 id_to_host_delegate_[++ax_tree_id_counter_] = delegate;
51 return ax_tree_id_counter_;
52 }
53
54 AXHostDelegate* AXTreeIDRegistry::GetHostDelegate(
55 AXTreeIDRegistry::AXTreeID ax_tree_id) {
56 auto it = id_to_host_delegate_.find(ax_tree_id);
57 if (it == id_to_host_delegate_.end())
58 return nullptr;
59 return it->second;
60 }
61
62 void AXTreeIDRegistry::SetDelegateForID(AXHostDelegate* delegate,
63 AXTreeIDRegistry::AXTreeID id) {
64 id_to_host_delegate_[id] = delegate;
65 }
66
49 void AXTreeIDRegistry::RemoveAXTreeID(AXTreeIDRegistry::AXTreeID ax_tree_id) { 67 void AXTreeIDRegistry::RemoveAXTreeID(AXTreeIDRegistry::AXTreeID ax_tree_id) {
50 std::map<AXTreeID, FrameID>::iterator it; 68 auto frame_it = ax_tree_to_frame_id_map_.find(ax_tree_id);
51 it = ax_tree_to_frame_id_map_.find(ax_tree_id); 69 if (frame_it != ax_tree_to_frame_id_map_.end()) {
52 if (it != ax_tree_to_frame_id_map_.end()) { 70 frame_to_ax_tree_id_map_.erase(frame_it->second);
53 frame_to_ax_tree_id_map_.erase(it->second); 71 ax_tree_to_frame_id_map_.erase(frame_it);
54 ax_tree_to_frame_id_map_.erase(it); 72 return;
55 } 73 }
74
75 auto action_it = id_to_host_delegate_.find(ax_tree_id);
76 if (action_it != id_to_host_delegate_.end())
77 id_to_host_delegate_.erase(action_it);
56 } 78 }
57 79
58 AXTreeIDRegistry::AXTreeIDRegistry() : ax_tree_id_counter_(-1) { 80 AXTreeIDRegistry::AXTreeIDRegistry() : ax_tree_id_counter_(-1) {
59 // Always populate default desktop tree value (0 -> 0, 0). 81 // Always populate default desktop tree value (0 -> 0, 0).
60 GetOrCreateAXTreeID(0, 0); 82 GetOrCreateAXTreeID(0, 0);
61 } 83 }
62 84
63 AXTreeIDRegistry::~AXTreeIDRegistry() {} 85 AXTreeIDRegistry::~AXTreeIDRegistry() {}
64 86
65 } // namespace ui 87 } // namespace ui
OLDNEW
« no previous file with comments | « ui/accessibility/ax_tree_id_registry.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698