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

Side by Side Diff: content/browser/accessibility/browser_accessibility_manager.cc

Issue 13770015: Rename confusing child_id to unique_id_win (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 7 years, 8 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/browser/accessibility/browser_accessibility_manager.h" 5 #include "content/browser/accessibility/browser_accessibility_manager.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "content/browser/accessibility/browser_accessibility.h" 8 #include "content/browser/accessibility/browser_accessibility.h"
9 #include "content/browser/accessibility/browser_accessibility_state_impl.h" 9 #include "content/browser/accessibility/browser_accessibility_state_impl.h"
10 #include "content/common/accessibility_messages.h" 10 #include "content/common/accessibility_messages.h"
11 11
12 namespace content { 12 namespace content {
13 13
14 BrowserAccessibility* BrowserAccessibilityFactory::Create() { 14 BrowserAccessibility* BrowserAccessibilityFactory::Create() {
15 return BrowserAccessibility::Create(); 15 return BrowserAccessibility::Create();
16 } 16 }
17 17
18 // Start child IDs at -1 and decrement each time, because clients use
19 // child IDs of 1, 2, 3, ... to access the children of an object by
20 // index, so we use negative IDs to clearly distinguish between indices
21 // and unique IDs.
22 // static
23 int32 BrowserAccessibilityManager::next_child_id_ = -1;
24
25 #if !defined(OS_MACOSX) && \ 18 #if !defined(OS_MACOSX) && \
26 !defined(OS_WIN) && \ 19 !defined(OS_WIN) && \
27 !defined(TOOLKIT_GTK) 20 !defined(TOOLKIT_GTK)
28 // We have subclassess of BrowserAccessibilityManager on Mac, Linux/GTK, 21 // We have subclassess of BrowserAccessibilityManager on Mac, Linux/GTK,
29 // and Win. For any other platform, instantiate the base class. 22 // and Win. For any other platform, instantiate the base class.
30 // static 23 // static
31 BrowserAccessibilityManager* BrowserAccessibilityManager::Create( 24 BrowserAccessibilityManager* BrowserAccessibilityManager::Create(
32 const AccessibilityNodeData& src, 25 const AccessibilityNodeData& src,
33 BrowserAccessibilityDelegate* delegate, 26 BrowserAccessibilityDelegate* delegate,
34 BrowserAccessibilityFactory* factory) { 27 BrowserAccessibilityFactory* factory) {
(...skipping 11 matching lines...) Expand all
46 focus_(NULL), 39 focus_(NULL),
47 osk_state_(OSK_ALLOWED) { 40 osk_state_(OSK_ALLOWED) {
48 std::vector<AccessibilityNodeData> nodes; 41 std::vector<AccessibilityNodeData> nodes;
49 nodes.push_back(src); 42 nodes.push_back(src);
50 if (!UpdateNodes(nodes)) 43 if (!UpdateNodes(nodes))
51 return; 44 return;
52 if (!focus_) 45 if (!focus_)
53 SetFocus(root_, false); 46 SetFocus(root_, false);
54 } 47 }
55 48
56 // static
57 int32 BrowserAccessibilityManager::GetNextChildID() {
58 // Get the next child ID, and wrap around when we get near the end
59 // of a 32-bit integer range. It's okay to wrap around; we just want
60 // to avoid it as long as possible because clients may cache the ID of
61 // an object for a while to determine if they've seen it before.
62 next_child_id_--;
63 if (next_child_id_ == -2000000000)
64 next_child_id_ = -1;
65
66 return next_child_id_;
67 }
68
69 BrowserAccessibilityManager::~BrowserAccessibilityManager() { 49 BrowserAccessibilityManager::~BrowserAccessibilityManager() {
70 if (root_) 50 if (root_)
71 root_->Destroy(); 51 root_->Destroy();
72 } 52 }
73 53
74 BrowserAccessibility* BrowserAccessibilityManager::GetRoot() { 54 BrowserAccessibility* BrowserAccessibilityManager::GetRoot() {
75 return root_; 55 return root_;
76 } 56 }
77 57
78 BrowserAccessibility* BrowserAccessibilityManager::GetFromChildID(
79 int32 child_id) {
80 base::hash_map<int32, BrowserAccessibility*>::iterator iter =
81 child_id_map_.find(child_id);
82 if (iter != child_id_map_.end()) {
83 return iter->second;
84 } else {
85 return NULL;
86 }
87 }
88
89 BrowserAccessibility* BrowserAccessibilityManager::GetFromRendererID( 58 BrowserAccessibility* BrowserAccessibilityManager::GetFromRendererID(
90 int32 renderer_id) { 59 int32 renderer_id) {
91 base::hash_map<int32, int32>::iterator iter = 60 base::hash_map<int32, BrowserAccessibility*>::iterator iter =
92 renderer_id_to_child_id_map_.find(renderer_id); 61 renderer_id_map_.find(renderer_id);
93 if (iter == renderer_id_to_child_id_map_.end()) 62 if (iter != renderer_id_map_.end())
94 return NULL; 63 return iter->second;
95 64 return NULL;
96 int32 child_id = iter->second;
97 return GetFromChildID(child_id);
98 } 65 }
99 66
100 void BrowserAccessibilityManager::GotFocus(bool touch_event_context) { 67 void BrowserAccessibilityManager::GotFocus(bool touch_event_context) {
101 if (!touch_event_context) 68 if (!touch_event_context)
102 osk_state_ = OSK_DISALLOWED_BECAUSE_TAB_JUST_APPEARED; 69 osk_state_ = OSK_DISALLOWED_BECAUSE_TAB_JUST_APPEARED;
103 70
104 if (!focus_) 71 if (!focus_)
105 return; 72 return;
106 73
107 NotifyAccessibilityEvent(AccessibilityNotificationFocusChanged, focus_); 74 NotifyAccessibilityEvent(AccessibilityNotificationFocusChanged, focus_);
108 } 75 }
109 76
110 void BrowserAccessibilityManager::WasHidden() { 77 void BrowserAccessibilityManager::WasHidden() {
111 osk_state_ = OSK_DISALLOWED_BECAUSE_TAB_HIDDEN; 78 osk_state_ = OSK_DISALLOWED_BECAUSE_TAB_HIDDEN;
112 } 79 }
113 80
114 void BrowserAccessibilityManager::GotMouseDown() { 81 void BrowserAccessibilityManager::GotMouseDown() {
115 osk_state_ = OSK_ALLOWED_WITHIN_FOCUSED_OBJECT; 82 osk_state_ = OSK_ALLOWED_WITHIN_FOCUSED_OBJECT;
116 NotifyAccessibilityEvent(AccessibilityNotificationFocusChanged, focus_); 83 NotifyAccessibilityEvent(AccessibilityNotificationFocusChanged, focus_);
117 } 84 }
118 85
119 bool BrowserAccessibilityManager::IsOSKAllowed(const gfx::Rect& bounds) { 86 bool BrowserAccessibilityManager::IsOSKAllowed(const gfx::Rect& bounds) {
120 if (!delegate_ || !delegate_->HasFocus()) 87 if (!delegate_ || !delegate_->HasFocus())
121 return false; 88 return false;
122 89
123 gfx::Point touch_point = delegate_->GetLastTouchEventLocation(); 90 gfx::Point touch_point = delegate_->GetLastTouchEventLocation();
124 return bounds.Contains(touch_point); 91 return bounds.Contains(touch_point);
125 } 92 }
126 93
127 void BrowserAccessibilityManager::Remove(BrowserAccessibility* node) { 94 void BrowserAccessibilityManager::RemoveNode(BrowserAccessibility* node) {
128 if (node == focus_) 95 if (node == focus_)
129 SetFocus(root_, false); 96 SetFocus(root_, false);
130 int child_id = node->child_id();
131 int renderer_id = node->renderer_id(); 97 int renderer_id = node->renderer_id();
132 child_id_map_.erase(child_id); 98 renderer_id_map_.erase(renderer_id);
133 DCHECK(renderer_id_to_child_id_map_[renderer_id] == child_id);
134 // Make sure we don't overwrite a newer entry (see UpdateNode for a possible
135 // corner case).
136 if (renderer_id_to_child_id_map_[renderer_id] == child_id)
137 renderer_id_to_child_id_map_.erase(renderer_id);
138 } 99 }
139 100
140 void BrowserAccessibilityManager::OnAccessibilityNotifications( 101 void BrowserAccessibilityManager::OnAccessibilityNotifications(
141 const std::vector<AccessibilityHostMsg_NotificationParams>& params) { 102 const std::vector<AccessibilityHostMsg_NotificationParams>& params) {
142 for (uint32 index = 0; index < params.size(); index++) { 103 for (uint32 index = 0; index < params.size(); index++) {
143 const AccessibilityHostMsg_NotificationParams& param = params[index]; 104 const AccessibilityHostMsg_NotificationParams& param = params[index];
144 105
145 // Update nodes that changed. 106 // Update nodes that changed.
146 if (!UpdateNodes(param.nodes)) 107 if (!UpdateNodes(param.nodes))
147 return; 108 return;
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 CHECK(false); 248 CHECK(false);
288 } 249 }
289 250
290 return success; 251 return success;
291 } 252 }
292 253
293 BrowserAccessibility* BrowserAccessibilityManager::CreateNode( 254 BrowserAccessibility* BrowserAccessibilityManager::CreateNode(
294 BrowserAccessibility* parent, 255 BrowserAccessibility* parent,
295 int32 renderer_id, 256 int32 renderer_id,
296 int32 index_in_parent) { 257 int32 index_in_parent) {
297 BrowserAccessibility* instance = factory_->Create(); 258 BrowserAccessibility* node = factory_->Create();
298 int32 child_id = GetNextChildID(); 259 node->InitializeTreeStructure(
299 instance->InitializeTreeStructure( 260 this, parent, renderer_id, index_in_parent);
300 this, parent, child_id, renderer_id, index_in_parent); 261 InitializeNode(node);
301 child_id_map_[child_id] = instance; 262 return node;
302 renderer_id_to_child_id_map_[renderer_id] = child_id; 263 }
303 return instance; 264
265 void BrowserAccessibilityManager::InitializeNode(BrowserAccessibility* node) {
aboxhall 2013/04/09 09:28:29 This seems like a bit of a confusing name for this
dmazzoni 2013/04/09 19:44:04 Good idea, done.
266 renderer_id_map_[node->renderer_id()] = node;
304 } 267 }
305 268
306 bool BrowserAccessibilityManager::UpdateNode(const AccessibilityNodeData& src) { 269 bool BrowserAccessibilityManager::UpdateNode(const AccessibilityNodeData& src) {
307 // This method updates one node in the tree based on serialized data 270 // This method updates one node in the tree based on serialized data
308 // received from the renderer. 271 // received from the renderer.
309 272
310 // Create a set of child ids in |src| for fast lookup. If a duplicate id is 273 // Create a set of child ids in |src| for fast lookup. If a duplicate id is
311 // found, exit now with a fatal error before changing anything else. 274 // found, exit now with a fatal error before changing anything else.
312 std::set<int32> new_child_ids; 275 std::set<int32> new_child_ids;
313 for (size_t i = 0; i < src.child_ids.size(); ++i) { 276 for (size_t i = 0; i < src.child_ids.size(); ++i) {
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 } 352 }
390 353
391 // Keep track of what node is focused. 354 // Keep track of what node is focused.
392 if ((src.state >> AccessibilityNodeData::STATE_FOCUSED) & 1) 355 if ((src.state >> AccessibilityNodeData::STATE_FOCUSED) & 1)
393 SetFocus(instance, false); 356 SetFocus(instance, false);
394 357
395 return success; 358 return success;
396 } 359 }
397 360
398 } // namespace content 361 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698