OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |