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

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

Issue 859133003: Fire AX text inserted event when embedded obj char changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Minor cleanup Created 5 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
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_win.h" 5 #include "content/browser/accessibility/browser_accessibility_manager_win.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/win/scoped_comptr.h" 8 #include "base/win/scoped_comptr.h"
9 #include "base/win/windows_version.h" 9 #include "base/win/windows_version.h"
10 #include "content/browser/accessibility/browser_accessibility_state_impl.h" 10 #include "content/browser/accessibility/browser_accessibility_state_impl.h"
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 bool root_changed, 290 bool root_changed,
291 const std::vector<ui::AXTreeDelegate::Change>& changes) { 291 const std::vector<ui::AXTreeDelegate::Change>& changes) {
292 BrowserAccessibilityManager::OnAtomicUpdateFinished(root_changed, changes); 292 BrowserAccessibilityManager::OnAtomicUpdateFinished(root_changed, changes);
293 293
294 if (root_changed) { 294 if (root_changed) {
295 // In order to make screen readers aware of the new accessibility root, 295 // In order to make screen readers aware of the new accessibility root,
296 // we need to fire a focus event on it. 296 // we need to fire a focus event on it.
297 OnWindowFocused(); 297 OnWindowFocused();
298 } 298 }
299 299
300 // BrowserAccessibilityManager::OnAtomicUpdateFinished calls 300 // Do a sequence of Windows-specific updates on each node. Each one is
301 // OnUpdateFinished() on each node in |changes|. However, the 301 // done in a single pass that must complete before the next step starts.
302 // IAccessibleText text for a node is a concatenatenation of all of its child 302 // The first step moves win_attributes_ to old_win_attributes_ and then
303 // text nodes, so we can't compute a node's IAccessibleText in 303 // recomputes all of win_attributes_ other than IAccessibleText.
304 // OnUpdateFinished because its children may not have been updated yet.
305 //
306 // So we make a second pass here to update IAccessibleText.
307 for (size_t i = 0; i < changes.size(); ++i) { 304 for (size_t i = 0; i < changes.size(); ++i) {
308 BrowserAccessibility* obj = GetFromAXNode(changes[i].node); 305 BrowserAccessibility* obj = GetFromAXNode(changes[i].node);
309 if (obj && obj->IsNative()) 306 if (obj && obj->IsNative() && !obj->PlatformIsChildOfLeaf())
310 obj->ToBrowserAccessibilityWin()->UpdateIAccessibleText(); 307 obj->ToBrowserAccessibilityWin()->UpdateStep1ComputeWinAttributes();
308 }
309
310 // The next step updates the hypertext of each node, which is a
311 // concatenatenation of all of its child text nodes, so it can't run until
David Tseng 2015/01/30 23:57:25 nit: contatenation
dmazzoni 2015/01/31 07:45:21 Done.
312 // the text of all of the nodes was computed in the previous step.
313 for (size_t i = 0; i < changes.size(); ++i) {
314 BrowserAccessibility* obj = GetFromAXNode(changes[i].node);
315 if (obj && obj->IsNative() && !obj->PlatformIsChildOfLeaf())
316 obj->ToBrowserAccessibilityWin()->UpdateStep2ComputeHypertext();
317 }
318
319 // The third step fires events on nodes based on what's changed - like
320 // if the name, value, or description changed, or if the hypertext had
321 // text inserted or removed. It's able to figure out exactly what changed
322 // because we still have old_win_attributes_ populated.
323 // This step has to run after the previous two steps complete because the
324 // client may walk the tree when it receives any of these events.
325 for (size_t i = 0; i < changes.size(); ++i) {
326 BrowserAccessibility* obj = GetFromAXNode(changes[i].node);
327 if (obj && obj->IsNative() && !obj->PlatformIsChildOfLeaf()) {
328 obj->ToBrowserAccessibilityWin()->UpdateStep3FireEvents(
329 changes[i].type == AXTreeDelegate::SUBTREE_CREATED);
330 }
331 }
332
333 // The final step is to delete old_win_attributes_ since they're not
334 // needed anymore.
335 for (size_t i = 0; i < changes.size(); ++i) {
336 BrowserAccessibility* obj = GetFromAXNode(changes[i].node);
337 if (obj && obj->IsNative() && !obj->PlatformIsChildOfLeaf())
338 obj->ToBrowserAccessibilityWin()->UpdateStep4DeleteOldWinAttributes();
David Tseng 2015/01/30 23:57:25 Could you combine this last step with the above on
dmazzoni 2015/01/31 07:45:21 Sure. It doesn't really need its own step.
311 } 339 }
312 } 340 }
313 341
314 void BrowserAccessibilityManagerWin::TrackScrollingObject( 342 void BrowserAccessibilityManagerWin::TrackScrollingObject(
315 BrowserAccessibilityWin* node) { 343 BrowserAccessibilityWin* node) {
316 if (tracked_scroll_object_) 344 if (tracked_scroll_object_)
317 tracked_scroll_object_->Release(); 345 tracked_scroll_object_->Release();
318 tracked_scroll_object_ = node; 346 tracked_scroll_object_ = node;
319 tracked_scroll_object_->AddRef(); 347 tracked_scroll_object_->AddRef();
320 } 348 }
(...skipping 20 matching lines...) Expand all
341 child_manager->GetFromUniqueIdWin(unique_id_win); 369 child_manager->GetFromUniqueIdWin(unique_id_win);
342 if (result) 370 if (result)
343 return result; 371 return result;
344 } 372 }
345 } 373 }
346 374
347 return NULL; 375 return NULL;
348 } 376 }
349 377
350 } // namespace content 378 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698