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

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

Issue 2877313003: Fixed IAccessible::accNavigate for NAVDIR_NEXT and NAVDIR_PREVIOUS when start object was a simple c… (Closed)
Patch Set: Created 3 years, 7 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
« no previous file with comments | « no previous file | ui/accessibility/platform/ax_platform_node_win.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2017 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2017 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_com_win.h" 5 #include "content/browser/accessibility/browser_accessibility_com_win.h"
6 6
7 #include <UIAutomationClient.h> 7 #include <UIAutomationClient.h>
8 #include <UIAutomationCoreApi.h> 8 #include <UIAutomationCoreApi.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 return AXPlatformNodeWin::accLocation(x_left, y_top, width, height, var_id); 492 return AXPlatformNodeWin::accLocation(x_left, y_top, width, height, var_id);
493 } 493 }
494 494
495 STDMETHODIMP BrowserAccessibilityComWin::accNavigate(LONG nav_dir, 495 STDMETHODIMP BrowserAccessibilityComWin::accNavigate(LONG nav_dir,
496 VARIANT start, 496 VARIANT start,
497 VARIANT* end) { 497 VARIANT* end) {
498 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ACC_NAVIGATE); 498 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_ACC_NAVIGATE);
499 if (!owner()) 499 if (!owner())
500 return E_FAIL; 500 return E_FAIL;
501 501
502 // Forward all directions but NAVDIR_ to the platform node implementation. 502 // Forward all logical directions (e.g. NAVDIR_NEXT) to the platform node
dmazzoni 2017/05/15 20:46:45 The comment says NAVDIR_NEXT but the code below it
503 // implementation.
503 if (nav_dir != NAVDIR_DOWN && nav_dir != NAVDIR_UP && 504 if (nav_dir != NAVDIR_DOWN && nav_dir != NAVDIR_UP &&
504 nav_dir != NAVDIR_LEFT && nav_dir != NAVDIR_RIGHT) { 505 nav_dir != NAVDIR_LEFT && nav_dir != NAVDIR_RIGHT) {
505 return AXPlatformNodeWin::accNavigate(nav_dir, start, end); 506 return AXPlatformNodeWin::accNavigate(nav_dir, start, end);
506 } 507 }
507 508
509 if (end) {
510 end->vt = VT_EMPTY;
511 } else {
512 return E_INVALIDARG;
513 }
514
508 BrowserAccessibilityComWin* target = GetTargetFromChildID(start); 515 BrowserAccessibilityComWin* target = GetTargetFromChildID(start);
509 if (!target) 516 if (!target)
510 return E_INVALIDARG; 517 return E_INVALIDARG;
511 518
512 BrowserAccessibility* result = nullptr; 519 BrowserAccessibility* result = nullptr;
520 // Only handle spatial directions for tables here.
513 switch (nav_dir) { 521 switch (nav_dir) {
514 case NAVDIR_DOWN: 522 case NAVDIR_DOWN:
515 result = target->owner()->GetTableCell( 523 result = target->owner()->GetTableCell(
516 owner()->GetTableRow() + owner()->GetTableRowSpan(), 524 owner()->GetTableRow() + owner()->GetTableRowSpan(),
517 owner()->GetTableColumn()); 525 owner()->GetTableColumn());
518 break; 526 break;
519 case NAVDIR_UP: 527 case NAVDIR_UP:
520 result = target->owner()->GetTableCell(owner()->GetTableRow() - 1, 528 result = target->owner()->GetTableCell(owner()->GetTableRow() - 1,
521 owner()->GetTableColumn()); 529 owner()->GetTableColumn());
522 break; 530 break;
523 case NAVDIR_LEFT: 531 case NAVDIR_LEFT:
524 result = target->owner()->GetTableCell(owner()->GetTableRow(), 532 result = target->owner()->GetTableCell(owner()->GetTableRow(),
525 owner()->GetTableColumn() - 1); 533 owner()->GetTableColumn() - 1);
526 break; 534 break;
527 case NAVDIR_RIGHT: 535 case NAVDIR_RIGHT:
528 result = target->owner()->GetTableCell( 536 result = target->owner()->GetTableCell(
529 owner()->GetTableRow(), 537 owner()->GetTableRow(),
530 owner()->GetTableColumn() + owner()->GetTableColumnSpan()); 538 owner()->GetTableColumn() + owner()->GetTableColumnSpan());
531 break; 539 break;
532 } 540 }
533 541
534 if (!result) { 542 if (!result)
535 end->vt = VT_EMPTY;
536 return S_FALSE; 543 return S_FALSE;
537 }
538 544
539 end->vt = VT_DISPATCH; 545 end->vt = VT_DISPATCH;
540 end->pdispVal = ToBrowserAccessibilityComWin(result)->NewReference(); 546 end->pdispVal = ToBrowserAccessibilityComWin(result)->NewReference();
541 return S_OK; 547 return S_OK;
542 } 548 }
543 549
544 STDMETHODIMP BrowserAccessibilityComWin::get_accChild(VARIANT var_child, 550 STDMETHODIMP BrowserAccessibilityComWin::get_accChild(VARIANT var_child,
545 IDispatch** disp_child) { 551 IDispatch** disp_child) {
546 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_CHILD); 552 WIN_ACCESSIBILITY_API_HISTOGRAM(UMA_API_GET_ACC_CHILD);
547 if (!owner()) 553 if (!owner())
(...skipping 5174 matching lines...) Expand 10 before | Expand all | Expand 10 after
5722 5728
5723 BrowserAccessibilityComWin* ToBrowserAccessibilityComWin( 5729 BrowserAccessibilityComWin* ToBrowserAccessibilityComWin(
5724 BrowserAccessibility* obj) { 5730 BrowserAccessibility* obj) {
5725 if (!obj || !obj->IsNative()) 5731 if (!obj || !obj->IsNative())
5726 return nullptr; 5732 return nullptr;
5727 auto* result = static_cast<BrowserAccessibilityWin*>(obj)->GetCOM(); 5733 auto* result = static_cast<BrowserAccessibilityWin*>(obj)->GetCOM();
5728 return result; 5734 return result;
5729 } 5735 }
5730 5736
5731 } // namespace content 5737 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | ui/accessibility/platform/ax_platform_node_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698