OLD | NEW |
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/common/accessibility_messages.h" | 9 #include "content/common/accessibility_messages.h" |
10 | 10 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 if (!UpdateNodes(nodes)) | 62 if (!UpdateNodes(nodes)) |
63 return; | 63 return; |
64 if (!focus_) | 64 if (!focus_) |
65 SetFocus(root_, false); | 65 SetFocus(root_, false); |
66 } | 66 } |
67 | 67 |
68 // static | 68 // static |
69 AccessibilityNodeData BrowserAccessibilityManager::GetEmptyDocument() { | 69 AccessibilityNodeData BrowserAccessibilityManager::GetEmptyDocument() { |
70 AccessibilityNodeData empty_document; | 70 AccessibilityNodeData empty_document; |
71 empty_document.id = 0; | 71 empty_document.id = 0; |
72 empty_document.role = WebKit::WebAXRoleRootWebArea; | 72 empty_document.role = blink::WebAXRoleRootWebArea; |
73 return empty_document; | 73 return empty_document; |
74 } | 74 } |
75 | 75 |
76 BrowserAccessibility* BrowserAccessibilityManager::GetRoot() { | 76 BrowserAccessibility* BrowserAccessibilityManager::GetRoot() { |
77 return root_; | 77 return root_; |
78 } | 78 } |
79 | 79 |
80 BrowserAccessibility* BrowserAccessibilityManager::GetFromRendererID( | 80 BrowserAccessibility* BrowserAccessibilityManager::GetFromRendererID( |
81 int32 renderer_id) { | 81 int32 renderer_id) { |
82 base::hash_map<int32, BrowserAccessibility*>::iterator iter = | 82 base::hash_map<int32, BrowserAccessibility*>::iterator iter = |
83 renderer_id_map_.find(renderer_id); | 83 renderer_id_map_.find(renderer_id); |
84 if (iter != renderer_id_map_.end()) | 84 if (iter != renderer_id_map_.end()) |
85 return iter->second; | 85 return iter->second; |
86 return NULL; | 86 return NULL; |
87 } | 87 } |
88 | 88 |
89 void BrowserAccessibilityManager::GotFocus(bool touch_event_context) { | 89 void BrowserAccessibilityManager::GotFocus(bool touch_event_context) { |
90 if (!touch_event_context) | 90 if (!touch_event_context) |
91 osk_state_ = OSK_DISALLOWED_BECAUSE_TAB_JUST_APPEARED; | 91 osk_state_ = OSK_DISALLOWED_BECAUSE_TAB_JUST_APPEARED; |
92 | 92 |
93 if (!focus_) | 93 if (!focus_) |
94 return; | 94 return; |
95 | 95 |
96 NotifyAccessibilityEvent(WebKit::WebAXEventFocus, focus_); | 96 NotifyAccessibilityEvent(blink::WebAXEventFocus, focus_); |
97 } | 97 } |
98 | 98 |
99 void BrowserAccessibilityManager::WasHidden() { | 99 void BrowserAccessibilityManager::WasHidden() { |
100 osk_state_ = OSK_DISALLOWED_BECAUSE_TAB_HIDDEN; | 100 osk_state_ = OSK_DISALLOWED_BECAUSE_TAB_HIDDEN; |
101 } | 101 } |
102 | 102 |
103 void BrowserAccessibilityManager::GotMouseDown() { | 103 void BrowserAccessibilityManager::GotMouseDown() { |
104 osk_state_ = OSK_ALLOWED_WITHIN_FOCUSED_OBJECT; | 104 osk_state_ = OSK_ALLOWED_WITHIN_FOCUSED_OBJECT; |
105 NotifyAccessibilityEvent(WebKit::WebAXEventFocus, focus_); | 105 NotifyAccessibilityEvent(blink::WebAXEventFocus, focus_); |
106 } | 106 } |
107 | 107 |
108 bool BrowserAccessibilityManager::IsOSKAllowed(const gfx::Rect& bounds) { | 108 bool BrowserAccessibilityManager::IsOSKAllowed(const gfx::Rect& bounds) { |
109 if (!delegate_ || !delegate_->HasFocus()) | 109 if (!delegate_ || !delegate_->HasFocus()) |
110 return false; | 110 return false; |
111 | 111 |
112 gfx::Point touch_point = delegate_->GetLastTouchEventLocation(); | 112 gfx::Point touch_point = delegate_->GetLastTouchEventLocation(); |
113 return bounds.Contains(touch_point); | 113 return bounds.Contains(touch_point); |
114 } | 114 } |
115 | 115 |
(...skipping 16 matching lines...) Expand all Loading... |
132 // Update nodes that changed. | 132 // Update nodes that changed. |
133 if (!UpdateNodes(param.nodes)) | 133 if (!UpdateNodes(param.nodes)) |
134 return; | 134 return; |
135 | 135 |
136 // Find the node corresponding to the id that's the target of the | 136 // Find the node corresponding to the id that's the target of the |
137 // event (which may not be the root of the update tree). | 137 // event (which may not be the root of the update tree). |
138 BrowserAccessibility* node = GetFromRendererID(param.id); | 138 BrowserAccessibility* node = GetFromRendererID(param.id); |
139 if (!node) | 139 if (!node) |
140 continue; | 140 continue; |
141 | 141 |
142 WebKit::WebAXEvent event_type = param.event_type; | 142 blink::WebAXEvent event_type = param.event_type; |
143 if (event_type == WebKit::WebAXEventFocus || | 143 if (event_type == blink::WebAXEventFocus || |
144 event_type == WebKit::WebAXEventBlur) { | 144 event_type == blink::WebAXEventBlur) { |
145 SetFocus(node, false); | 145 SetFocus(node, false); |
146 | 146 |
147 if (osk_state_ != OSK_DISALLOWED_BECAUSE_TAB_HIDDEN && | 147 if (osk_state_ != OSK_DISALLOWED_BECAUSE_TAB_HIDDEN && |
148 osk_state_ != OSK_DISALLOWED_BECAUSE_TAB_JUST_APPEARED) | 148 osk_state_ != OSK_DISALLOWED_BECAUSE_TAB_JUST_APPEARED) |
149 osk_state_ = OSK_ALLOWED; | 149 osk_state_ = OSK_ALLOWED; |
150 | 150 |
151 // Don't send a native focus event if the window itself doesn't | 151 // Don't send a native focus event if the window itself doesn't |
152 // have focus. | 152 // have focus. |
153 if (delegate_ && !delegate_->HasFocus()) | 153 if (delegate_ && !delegate_->HasFocus()) |
154 continue; | 154 continue; |
155 } | 155 } |
156 | 156 |
157 // Send the event event to the operating system. | 157 // Send the event event to the operating system. |
158 NotifyAccessibilityEvent(event_type, node); | 158 NotifyAccessibilityEvent(event_type, node); |
159 | 159 |
160 // Set initial focus when a page is loaded. | 160 // Set initial focus when a page is loaded. |
161 if (event_type == WebKit::WebAXEventLoadComplete) { | 161 if (event_type == blink::WebAXEventLoadComplete) { |
162 if (!focus_) | 162 if (!focus_) |
163 SetFocus(root_, false); | 163 SetFocus(root_, false); |
164 if (!delegate_ || delegate_->HasFocus()) | 164 if (!delegate_ || delegate_->HasFocus()) |
165 NotifyAccessibilityEvent(WebKit::WebAXEventFocus, focus_); | 165 NotifyAccessibilityEvent(blink::WebAXEventFocus, focus_); |
166 } | 166 } |
167 } | 167 } |
168 } | 168 } |
169 | 169 |
170 BrowserAccessibility* BrowserAccessibilityManager::GetFocus( | 170 BrowserAccessibility* BrowserAccessibilityManager::GetFocus( |
171 BrowserAccessibility* root) { | 171 BrowserAccessibility* root) { |
172 if (focus_ && (!root || focus_->IsDescendantOf(root))) | 172 if (focus_ && (!root || focus_->IsDescendantOf(root))) |
173 return focus_; | 173 return focus_; |
174 | 174 |
175 return NULL; | 175 return NULL; |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
326 if (new_child_ids.find(src.child_ids[i]) != new_child_ids.end()) | 326 if (new_child_ids.find(src.child_ids[i]) != new_child_ids.end()) |
327 return false; | 327 return false; |
328 new_child_ids.insert(src.child_ids[i]); | 328 new_child_ids.insert(src.child_ids[i]); |
329 } | 329 } |
330 | 330 |
331 // Look up the node by id. If it's not found, then either the root | 331 // Look up the node by id. If it's not found, then either the root |
332 // of the tree is being swapped, or we're out of sync with the renderer | 332 // of the tree is being swapped, or we're out of sync with the renderer |
333 // and this is a serious error. | 333 // and this is a serious error. |
334 BrowserAccessibility* instance = GetFromRendererID(src.id); | 334 BrowserAccessibility* instance = GetFromRendererID(src.id); |
335 if (!instance) { | 335 if (!instance) { |
336 if (src.role != WebKit::WebAXRoleRootWebArea) | 336 if (src.role != blink::WebAXRoleRootWebArea) |
337 return false; | 337 return false; |
338 instance = CreateNode(NULL, src.id, 0); | 338 instance = CreateNode(NULL, src.id, 0); |
339 } | 339 } |
340 | 340 |
341 // TODO(dmazzoni): avoid a linear scan here. | 341 // TODO(dmazzoni): avoid a linear scan here. |
342 for (size_t i = 0; i < src.bool_attributes.size(); i++) { | 342 for (size_t i = 0; i < src.bool_attributes.size(); i++) { |
343 if (src.bool_attributes[i].first == | 343 if (src.bool_attributes[i].first == |
344 AccessibilityNodeData::ATTR_UPDATE_LOCATION_ONLY) { | 344 AccessibilityNodeData::ATTR_UPDATE_LOCATION_ONLY) { |
345 instance->SetLocation(src.location); | 345 instance->SetLocation(src.location); |
346 return true; | 346 return true; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
393 } else { | 393 } else { |
394 child = CreateNode(instance, child_renderer_id, index_in_parent); | 394 child = CreateNode(instance, child_renderer_id, index_in_parent); |
395 } | 395 } |
396 new_children.push_back(child); | 396 new_children.push_back(child); |
397 } | 397 } |
398 | 398 |
399 // Finally, swap in the new children vector for the old. | 399 // Finally, swap in the new children vector for the old. |
400 instance->SwapChildren(new_children); | 400 instance->SwapChildren(new_children); |
401 | 401 |
402 // Handle the case where this node is the new root of the tree. | 402 // Handle the case where this node is the new root of the tree. |
403 if (src.role == WebKit::WebAXRoleRootWebArea && | 403 if (src.role == blink::WebAXRoleRootWebArea && |
404 (!root_ || root_->renderer_id() != src.id)) { | 404 (!root_ || root_->renderer_id() != src.id)) { |
405 if (root_) | 405 if (root_) |
406 root_->Destroy(); | 406 root_->Destroy(); |
407 if (focus_ == root_) | 407 if (focus_ == root_) |
408 SetFocus(instance, false); | 408 SetFocus(instance, false); |
409 SetRoot(instance); | 409 SetRoot(instance); |
410 } | 410 } |
411 | 411 |
412 // Keep track of what node is focused. | 412 // Keep track of what node is focused. |
413 if (src.role != WebKit::WebAXRoleRootWebArea && | 413 if (src.role != blink::WebAXRoleRootWebArea && |
414 src.role != WebKit::WebAXRoleWebArea && | 414 src.role != blink::WebAXRoleWebArea && |
415 (src.state >> WebKit::WebAXStateFocused & 1)) { | 415 (src.state >> blink::WebAXStateFocused & 1)) { |
416 SetFocus(instance, false); | 416 SetFocus(instance, false); |
417 } | 417 } |
418 return success; | 418 return success; |
419 } | 419 } |
420 | 420 |
421 } // namespace content | 421 } // namespace content |
OLD | NEW |