| 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 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 129 BrowserAccessibilityFactory* factory) | 129 BrowserAccessibilityFactory* factory) |
| 130 : delegate_(delegate), | 130 : delegate_(delegate), |
| 131 factory_(factory), | 131 factory_(factory), |
| 132 tree_(new ui::AXSerializableTree()), | 132 tree_(new ui::AXSerializableTree()), |
| 133 user_is_navigating_away_(false), | 133 user_is_navigating_away_(false), |
| 134 osk_state_(OSK_ALLOWED), | 134 osk_state_(OSK_ALLOWED), |
| 135 last_focused_node_(nullptr), | 135 last_focused_node_(nullptr), |
| 136 last_focused_manager_(nullptr), | 136 last_focused_manager_(nullptr), |
| 137 connected_to_parent_tree_node_(false), | 137 connected_to_parent_tree_node_(false), |
| 138 ax_tree_id_(ui::AXTreeIDRegistry::kNoAXTreeID), | 138 ax_tree_id_(ui::AXTreeIDRegistry::kNoAXTreeID), |
| 139 parent_node_id_from_parent_tree_(0) { | 139 parent_node_id_from_parent_tree_(0), |
| 140 device_scale_factor_(1.0f), |
| 141 use_custom_device_scale_factor_for_testing_(false) { |
| 140 tree_->SetDelegate(this); | 142 tree_->SetDelegate(this); |
| 141 } | 143 } |
| 142 | 144 |
| 143 BrowserAccessibilityManager::BrowserAccessibilityManager( | 145 BrowserAccessibilityManager::BrowserAccessibilityManager( |
| 144 const ui::AXTreeUpdate& initial_tree, | 146 const ui::AXTreeUpdate& initial_tree, |
| 145 BrowserAccessibilityDelegate* delegate, | 147 BrowserAccessibilityDelegate* delegate, |
| 146 BrowserAccessibilityFactory* factory) | 148 BrowserAccessibilityFactory* factory) |
| 147 : delegate_(delegate), | 149 : delegate_(delegate), |
| 148 factory_(factory), | 150 factory_(factory), |
| 149 tree_(new ui::AXSerializableTree()), | 151 tree_(new ui::AXSerializableTree()), |
| 150 user_is_navigating_away_(false), | 152 user_is_navigating_away_(false), |
| 151 osk_state_(OSK_ALLOWED), | 153 osk_state_(OSK_ALLOWED), |
| 152 last_focused_node_(nullptr), | 154 last_focused_node_(nullptr), |
| 153 last_focused_manager_(nullptr), | 155 last_focused_manager_(nullptr), |
| 154 ax_tree_id_(ui::AXTreeIDRegistry::kNoAXTreeID), | 156 ax_tree_id_(ui::AXTreeIDRegistry::kNoAXTreeID), |
| 155 parent_node_id_from_parent_tree_(0) { | 157 parent_node_id_from_parent_tree_(0), |
| 158 device_scale_factor_(1.0f), |
| 159 use_custom_device_scale_factor_for_testing_(false) { |
| 156 tree_->SetDelegate(this); | 160 tree_->SetDelegate(this); |
| 157 Initialize(initial_tree); | 161 Initialize(initial_tree); |
| 158 } | 162 } |
| 159 | 163 |
| 160 BrowserAccessibilityManager::~BrowserAccessibilityManager() { | 164 BrowserAccessibilityManager::~BrowserAccessibilityManager() { |
| 161 tree_.reset(NULL); | 165 tree_.reset(NULL); |
| 162 g_ax_tree_id_map.Get().erase(ax_tree_id_); | 166 g_ax_tree_id_map.Get().erase(ax_tree_id_); |
| 163 } | 167 } |
| 164 | 168 |
| 165 void BrowserAccessibilityManager::Initialize( | 169 void BrowserAccessibilityManager::Initialize( |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 329 void BrowserAccessibilityManager::NavigationFailed() { | 333 void BrowserAccessibilityManager::NavigationFailed() { |
| 330 user_is_navigating_away_ = false; | 334 user_is_navigating_away_ = false; |
| 331 } | 335 } |
| 332 | 336 |
| 333 bool BrowserAccessibilityManager::UseRootScrollOffsetsWhenComputingBounds() { | 337 bool BrowserAccessibilityManager::UseRootScrollOffsetsWhenComputingBounds() { |
| 334 return true; | 338 return true; |
| 335 } | 339 } |
| 336 | 340 |
| 337 void BrowserAccessibilityManager::OnAccessibilityEvents( | 341 void BrowserAccessibilityManager::OnAccessibilityEvents( |
| 338 const std::vector<AXEventNotificationDetails>& details) { | 342 const std::vector<AXEventNotificationDetails>& details) { |
| 343 // Update the cached device scale factor. |
| 344 if (delegate_ && !use_custom_device_scale_factor_for_testing_) |
| 345 device_scale_factor_ = delegate_->AccessibilityGetDeviceScaleFactor(); |
| 346 |
| 339 // Process all changes to the accessibility tree first. | 347 // Process all changes to the accessibility tree first. |
| 340 for (uint32_t index = 0; index < details.size(); ++index) { | 348 for (uint32_t index = 0; index < details.size(); ++index) { |
| 341 const AXEventNotificationDetails& detail = details[index]; | 349 const AXEventNotificationDetails& detail = details[index]; |
| 342 if (!tree_->Unserialize(detail.update)) { | 350 if (!tree_->Unserialize(detail.update)) { |
| 343 if (delegate_) { | 351 if (delegate_) { |
| 344 LOG(ERROR) << tree_->error(); | 352 LOG(ERROR) << tree_->error(); |
| 345 delegate_->AccessibilityFatalError(); | 353 delegate_->AccessibilityFatalError(); |
| 346 } else { | 354 } else { |
| 347 CHECK(false) << tree_->error(); | 355 CHECK(false) << tree_->error(); |
| 348 } | 356 } |
| (...skipping 843 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1192 ui::AXTreeSource<const ui::AXNode*, ui::AXNodeData, ui::AXTreeData>> | 1200 ui::AXTreeSource<const ui::AXNode*, ui::AXNodeData, ui::AXTreeData>> |
| 1193 tree_source(tree_->CreateTreeSource()); | 1201 tree_source(tree_->CreateTreeSource()); |
| 1194 ui::AXTreeSerializer<const ui::AXNode*, | 1202 ui::AXTreeSerializer<const ui::AXNode*, |
| 1195 ui::AXNodeData, | 1203 ui::AXNodeData, |
| 1196 ui::AXTreeData> serializer(tree_source.get()); | 1204 ui::AXTreeData> serializer(tree_source.get()); |
| 1197 ui::AXTreeUpdate update; | 1205 ui::AXTreeUpdate update; |
| 1198 serializer.SerializeChanges(tree_->root(), &update); | 1206 serializer.SerializeChanges(tree_->root(), &update); |
| 1199 return update; | 1207 return update; |
| 1200 } | 1208 } |
| 1201 | 1209 |
| 1210 void BrowserAccessibilityManager::UseCustomDeviceScaleFactorForTesting( |
| 1211 float device_scale_factor) { |
| 1212 use_custom_device_scale_factor_for_testing_ = true; |
| 1213 device_scale_factor_ = device_scale_factor; |
| 1214 } |
| 1215 |
| 1202 BrowserAccessibility* BrowserAccessibilityManager::CachingAsyncHitTest( | 1216 BrowserAccessibility* BrowserAccessibilityManager::CachingAsyncHitTest( |
| 1203 const gfx::Point& screen_point) { | 1217 const gfx::Point& screen_point) { |
| 1204 BrowserAccessibilityManager* root_manager = GetRootManager(); | 1218 BrowserAccessibilityManager* root_manager = GetRootManager(); |
| 1205 if (root_manager && root_manager != this) | 1219 if (root_manager && root_manager != this) |
| 1206 return root_manager->CachingAsyncHitTest(screen_point); | 1220 return root_manager->CachingAsyncHitTest(screen_point); |
| 1207 | 1221 |
| 1208 if (delegate()) { | 1222 if (delegate()) { |
| 1209 // This triggers an asynchronous request to compute the true object that's | 1223 // This triggers an asynchronous request to compute the true object that's |
| 1210 // under |screen_point|. | 1224 // under |screen_point|. |
| 1211 HitTest(screen_point - GetViewBounds().OffsetFromOrigin()); | 1225 HitTest(screen_point - GetViewBounds().OffsetFromOrigin()); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1244 hit_test_result = parent; | 1258 hit_test_result = parent; |
| 1245 parent = parent->GetParent(); | 1259 parent = parent->GetParent(); |
| 1246 } | 1260 } |
| 1247 | 1261 |
| 1248 last_hover_ax_tree_id_ = hit_test_result->manager()->ax_tree_id(); | 1262 last_hover_ax_tree_id_ = hit_test_result->manager()->ax_tree_id(); |
| 1249 last_hover_node_id_ = hit_test_result->GetId(); | 1263 last_hover_node_id_ = hit_test_result->GetId(); |
| 1250 last_hover_bounds_ = hit_test_result->GetScreenBoundsRect(); | 1264 last_hover_bounds_ = hit_test_result->GetScreenBoundsRect(); |
| 1251 } | 1265 } |
| 1252 | 1266 |
| 1253 } // namespace content | 1267 } // namespace content |
| OLD | NEW |