| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 // Map from AXTreeID to BrowserAccessibilityManager | 41 // Map from AXTreeID to BrowserAccessibilityManager |
| 42 using AXTreeIDMap = base::hash_map<ui::AXTreeIDRegistry::AXTreeID, | 42 using AXTreeIDMap = base::hash_map<ui::AXTreeIDRegistry::AXTreeID, |
| 43 BrowserAccessibilityManager*>; | 43 BrowserAccessibilityManager*>; |
| 44 base::LazyInstance<AXTreeIDMap>::DestructorAtExit g_ax_tree_id_map = | 44 base::LazyInstance<AXTreeIDMap>::DestructorAtExit g_ax_tree_id_map = |
| 45 LAZY_INSTANCE_INITIALIZER; | 45 LAZY_INSTANCE_INITIALIZER; |
| 46 | 46 |
| 47 // A function to call when focus changes, for testing only. | 47 // A function to call when focus changes, for testing only. |
| 48 base::LazyInstance<base::Closure>::DestructorAtExit | 48 base::LazyInstance<base::Closure>::DestructorAtExit |
| 49 g_focus_change_callback_for_testing = LAZY_INSTANCE_INITIALIZER; | 49 g_focus_change_callback_for_testing = LAZY_INSTANCE_INITIALIZER; |
| 50 | 50 |
| 51 // A flag for use in tests to ensure focus events aren't suppressed. | |
| 52 bool g_never_suppress_focus_events_for_testing = false; | |
| 53 | |
| 54 } // namespace | 51 } // namespace |
| 55 | 52 |
| 56 ui::AXTreeUpdate MakeAXTreeUpdate( | 53 ui::AXTreeUpdate MakeAXTreeUpdate( |
| 57 const ui::AXNodeData& node1, | 54 const ui::AXNodeData& node1, |
| 58 const ui::AXNodeData& node2 /* = ui::AXNodeData() */, | 55 const ui::AXNodeData& node2 /* = ui::AXNodeData() */, |
| 59 const ui::AXNodeData& node3 /* = ui::AXNodeData() */, | 56 const ui::AXNodeData& node3 /* = ui::AXNodeData() */, |
| 60 const ui::AXNodeData& node4 /* = ui::AXNodeData() */, | 57 const ui::AXNodeData& node4 /* = ui::AXNodeData() */, |
| 61 const ui::AXNodeData& node5 /* = ui::AXNodeData() */, | 58 const ui::AXNodeData& node5 /* = ui::AXNodeData() */, |
| 62 const ui::AXNodeData& node6 /* = ui::AXNodeData() */, | 59 const ui::AXNodeData& node6 /* = ui::AXNodeData() */, |
| 63 const ui::AXNodeData& node7 /* = ui::AXNodeData() */, | 60 const ui::AXNodeData& node7 /* = ui::AXNodeData() */, |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 180 if (!tree_->Unserialize(initial_tree)) { | 177 if (!tree_->Unserialize(initial_tree)) { |
| 181 if (delegate_) { | 178 if (delegate_) { |
| 182 LOG(ERROR) << tree_->error(); | 179 LOG(ERROR) << tree_->error(); |
| 183 delegate_->AccessibilityFatalError(); | 180 delegate_->AccessibilityFatalError(); |
| 184 } else { | 181 } else { |
| 185 LOG(FATAL) << tree_->error(); | 182 LOG(FATAL) << tree_->error(); |
| 186 } | 183 } |
| 187 } | 184 } |
| 188 } | 185 } |
| 189 | 186 |
| 187 // A flag for use in tests to ensure events aren't suppressed or delayed. |
| 188 // static |
| 189 bool BrowserAccessibilityManager::never_suppress_or_delay_events_for_testing_ = |
| 190 false; |
| 191 |
| 190 // static | 192 // static |
| 191 ui::AXTreeUpdate | 193 ui::AXTreeUpdate |
| 192 BrowserAccessibilityManager::GetEmptyDocument() { | 194 BrowserAccessibilityManager::GetEmptyDocument() { |
| 193 ui::AXNodeData empty_document; | 195 ui::AXNodeData empty_document; |
| 194 empty_document.id = 0; | 196 empty_document.id = 0; |
| 195 empty_document.role = ui::AX_ROLE_ROOT_WEB_AREA; | 197 empty_document.role = ui::AX_ROLE_ROOT_WEB_AREA; |
| 196 ui::AXTreeUpdate update; | 198 ui::AXTreeUpdate update; |
| 197 update.nodes.push_back(empty_document); | 199 update.nodes.push_back(empty_document); |
| 198 return update; | 200 return update; |
| 199 } | 201 } |
| 200 | 202 |
| 201 void BrowserAccessibilityManager::NotifyAccessibilityEvent( | 203 void BrowserAccessibilityManager::NotifyAccessibilityEvent( |
| 202 BrowserAccessibilityEvent::Source source, | 204 BrowserAccessibilityEvent::Source source, |
| 203 ui::AXEvent event_type, | 205 ui::AXEvent event_type, |
| 204 BrowserAccessibility* node) { | 206 BrowserAccessibility* node) { |
| 205 BrowserAccessibilityEvent::Create(source, event_type, node)->Fire(); | 207 BrowserAccessibilityEvent::Create(source, event_type, node)->Fire(); |
| 206 } | 208 } |
| 207 | 209 |
| 208 void BrowserAccessibilityManager::FireFocusEventsIfNeeded( | 210 void BrowserAccessibilityManager::FireFocusEventsIfNeeded( |
| 209 BrowserAccessibilityEvent::Source source) { | 211 BrowserAccessibilityEvent::Source source) { |
| 210 BrowserAccessibility* focus = GetFocus(); | 212 BrowserAccessibility* focus = GetFocus(); |
| 211 | 213 |
| 212 // Don't fire focus events if the window itself doesn't have focus. | 214 // Don't fire focus events if the window itself doesn't have focus. |
| 213 // Bypass this check for some tests. | 215 // Bypass this check for some tests. |
| 214 if (!g_never_suppress_focus_events_for_testing && | 216 if (!never_suppress_or_delay_events_for_testing_ && |
| 215 !g_focus_change_callback_for_testing.Get()) { | 217 !g_focus_change_callback_for_testing.Get()) { |
| 216 if (delegate_ && !delegate_->AccessibilityViewHasFocus()) | 218 if (delegate_ && !delegate_->AccessibilityViewHasFocus()) |
| 217 focus = nullptr; | 219 focus = nullptr; |
| 218 | 220 |
| 219 if (!CanFireEvents()) | 221 if (!CanFireEvents()) |
| 220 focus = nullptr; | 222 focus = nullptr; |
| 221 } | 223 } |
| 222 | 224 |
| 223 // Don't allow the document to be focused if it has no children and | 225 // Don't allow the document to be focused if it has no children and |
| 224 // hasn't finished loading yet. Wait for at least a tiny bit of content, | 226 // hasn't finished loading yet. Wait for at least a tiny bit of content, |
| (...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 610 tree_->UpdateData(data); | 612 tree_->UpdateData(data); |
| 611 } | 613 } |
| 612 | 614 |
| 613 // static | 615 // static |
| 614 void BrowserAccessibilityManager::SetFocusChangeCallbackForTesting( | 616 void BrowserAccessibilityManager::SetFocusChangeCallbackForTesting( |
| 615 const base::Closure& callback) { | 617 const base::Closure& callback) { |
| 616 g_focus_change_callback_for_testing.Get() = callback; | 618 g_focus_change_callback_for_testing.Get() = callback; |
| 617 } | 619 } |
| 618 | 620 |
| 619 // static | 621 // static |
| 620 void BrowserAccessibilityManager::NeverSuppressFocusEventsForTesting() { | 622 void BrowserAccessibilityManager::NeverSuppressOrDelayEventsForTesting() { |
| 621 g_never_suppress_focus_events_for_testing = true; | 623 never_suppress_or_delay_events_for_testing_ = true; |
| 622 } | 624 } |
| 623 | 625 |
| 624 void BrowserAccessibilityManager::Decrement( | 626 void BrowserAccessibilityManager::Decrement( |
| 625 const BrowserAccessibility& node) { | 627 const BrowserAccessibility& node) { |
| 626 if (!delegate_) | 628 if (!delegate_) |
| 627 return; | 629 return; |
| 628 | 630 |
| 629 ui::AXActionData action_data; | 631 ui::AXActionData action_data; |
| 630 action_data.action = ui::AX_ACTION_DECREMENT; | 632 action_data.action = ui::AX_ACTION_DECREMENT; |
| 631 action_data.target_node_id = node.GetId(); | 633 action_data.target_node_id = node.GetId(); |
| (...skipping 656 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1288 hit_test_result = parent; | 1290 hit_test_result = parent; |
| 1289 parent = parent->PlatformGetParent(); | 1291 parent = parent->PlatformGetParent(); |
| 1290 } | 1292 } |
| 1291 | 1293 |
| 1292 last_hover_ax_tree_id_ = hit_test_result->manager()->ax_tree_id(); | 1294 last_hover_ax_tree_id_ = hit_test_result->manager()->ax_tree_id(); |
| 1293 last_hover_node_id_ = hit_test_result->GetId(); | 1295 last_hover_node_id_ = hit_test_result->GetId(); |
| 1294 last_hover_bounds_ = hit_test_result->GetScreenBoundsRect(); | 1296 last_hover_bounds_ = hit_test_result->GetScreenBoundsRect(); |
| 1295 } | 1297 } |
| 1296 | 1298 |
| 1297 } // namespace content | 1299 } // namespace content |
| OLD | NEW |