Chromium Code Reviews| 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 |