| 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_win.h" | 5 #include "content/browser/accessibility/browser_accessibility_win.h" |
| 6 | 6 |
| 7 #include <UIAutomationClient.h> | 7 #include <UIAutomationClient.h> |
| 8 #include <UIAutomationCoreApi.h> | 8 #include <UIAutomationCoreApi.h> |
| 9 | 9 |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| (...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 486 return S_OK; | 486 return S_OK; |
| 487 } | 487 } |
| 488 | 488 |
| 489 STDMETHODIMP BrowserAccessibilityWin::get_accParent(IDispatch** disp_parent) { | 489 STDMETHODIMP BrowserAccessibilityWin::get_accParent(IDispatch** disp_parent) { |
| 490 if (!instance_active()) | 490 if (!instance_active()) |
| 491 return E_FAIL; | 491 return E_FAIL; |
| 492 | 492 |
| 493 if (!disp_parent) | 493 if (!disp_parent) |
| 494 return E_INVALIDARG; | 494 return E_INVALIDARG; |
| 495 | 495 |
| 496 IAccessible* parent_obj = parent()->ToBrowserAccessibilityWin(); | 496 IAccessible* parent_obj = GetParent()->ToBrowserAccessibilityWin(); |
| 497 if (parent_obj == NULL) { | 497 if (parent_obj == NULL) { |
| 498 // This happens if we're the root of the tree; | 498 // This happens if we're the root of the tree; |
| 499 // return the IAccessible for the window. | 499 // return the IAccessible for the window. |
| 500 parent_obj = | 500 parent_obj = |
| 501 manager()->ToBrowserAccessibilityManagerWin()->parent_iaccessible(); | 501 manager()->ToBrowserAccessibilityManagerWin()->parent_iaccessible(); |
| 502 // |parent| can only be NULL if the manager was created before the parent | 502 // |parent| can only be NULL if the manager was created before the parent |
| 503 // IAccessible was known and it wasn't subsequently set before a client | 503 // IAccessible was known and it wasn't subsequently set before a client |
| 504 // requested it. This has been fixed. |parent| may also be NULL during | 504 // requested it. This has been fixed. |parent| may also be NULL during |
| 505 // destruction. Possible cases where this could occur include tabs being | 505 // destruction. Possible cases where this could occur include tabs being |
| 506 // dragged to a new window, etc. | 506 // dragged to a new window, etc. |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 604 STDMETHODIMP BrowserAccessibilityWin::get_accHelpTopic(BSTR* help_file, | 604 STDMETHODIMP BrowserAccessibilityWin::get_accHelpTopic(BSTR* help_file, |
| 605 VARIANT var_id, | 605 VARIANT var_id, |
| 606 LONG* topic_id) { | 606 LONG* topic_id) { |
| 607 return E_NOTIMPL; | 607 return E_NOTIMPL; |
| 608 } | 608 } |
| 609 | 609 |
| 610 STDMETHODIMP BrowserAccessibilityWin::get_accSelection(VARIANT* selected) { | 610 STDMETHODIMP BrowserAccessibilityWin::get_accSelection(VARIANT* selected) { |
| 611 if (!instance_active()) | 611 if (!instance_active()) |
| 612 return E_FAIL; | 612 return E_FAIL; |
| 613 | 613 |
| 614 if (blink_role() != ui::AX_ROLE_LIST_BOX) | 614 if (GetRole() != ui::AX_ROLE_LIST_BOX) |
| 615 return E_NOTIMPL; | 615 return E_NOTIMPL; |
| 616 | 616 |
| 617 unsigned long selected_count = 0; | 617 unsigned long selected_count = 0; |
| 618 for (size_t i = 0; i < children().size(); ++i) { | 618 for (size_t i = 0; i < InternalChildCount(); ++i) { |
| 619 if (children()[i]->HasState(ui::AX_STATE_SELECTED)) | 619 if (InternalGetChild(i)->HasState(ui::AX_STATE_SELECTED)) |
| 620 ++selected_count; | 620 ++selected_count; |
| 621 } | 621 } |
| 622 | 622 |
| 623 if (selected_count == 0) { | 623 if (selected_count == 0) { |
| 624 selected->vt = VT_EMPTY; | 624 selected->vt = VT_EMPTY; |
| 625 return S_OK; | 625 return S_OK; |
| 626 } | 626 } |
| 627 | 627 |
| 628 if (selected_count == 1) { | 628 if (selected_count == 1) { |
| 629 for (size_t i = 0; i < children().size(); ++i) { | 629 for (size_t i = 0; i < InternalChildCount(); ++i) { |
| 630 if (children()[i]->HasState(ui::AX_STATE_SELECTED)) { | 630 if (InternalGetChild(i)->HasState(ui::AX_STATE_SELECTED)) { |
| 631 selected->vt = VT_DISPATCH; | 631 selected->vt = VT_DISPATCH; |
| 632 selected->pdispVal = | 632 selected->pdispVal = |
| 633 children()[i]->ToBrowserAccessibilityWin()->NewReference(); | 633 InternalGetChild(i)->ToBrowserAccessibilityWin()->NewReference(); |
| 634 return S_OK; | 634 return S_OK; |
| 635 } | 635 } |
| 636 } | 636 } |
| 637 } | 637 } |
| 638 | 638 |
| 639 // Multiple items are selected. | 639 // Multiple items are selected. |
| 640 base::win::EnumVariant* enum_variant = | 640 base::win::EnumVariant* enum_variant = |
| 641 new base::win::EnumVariant(selected_count); | 641 new base::win::EnumVariant(selected_count); |
| 642 enum_variant->AddRef(); | 642 enum_variant->AddRef(); |
| 643 unsigned long index = 0; | 643 unsigned long index = 0; |
| 644 for (size_t i = 0; i < children().size(); ++i) { | 644 for (size_t i = 0; i < InternalChildCount(); ++i) { |
| 645 if (children()[i]->HasState(ui::AX_STATE_SELECTED)) { | 645 if (InternalGetChild(i)->HasState(ui::AX_STATE_SELECTED)) { |
| 646 enum_variant->ItemAt(index)->vt = VT_DISPATCH; | 646 enum_variant->ItemAt(index)->vt = VT_DISPATCH; |
| 647 enum_variant->ItemAt(index)->pdispVal = | 647 enum_variant->ItemAt(index)->pdispVal = |
| 648 children()[i]->ToBrowserAccessibilityWin()->NewReference(); | 648 InternalGetChild(i)->ToBrowserAccessibilityWin()->NewReference(); |
| 649 ++index; | 649 ++index; |
| 650 } | 650 } |
| 651 } | 651 } |
| 652 selected->vt = VT_UNKNOWN; | 652 selected->vt = VT_UNKNOWN; |
| 653 selected->punkVal = static_cast<IUnknown*>( | 653 selected->punkVal = static_cast<IUnknown*>( |
| 654 static_cast<base::win::IUnknownImpl*>(enum_variant)); | 654 static_cast<base::win::IUnknownImpl*>(enum_variant)); |
| 655 return S_OK; | 655 return S_OK; |
| 656 } | 656 } |
| 657 | 657 |
| 658 STDMETHODIMP BrowserAccessibilityWin::accSelect( | 658 STDMETHODIMP BrowserAccessibilityWin::accSelect( |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 742 return S_OK; | 742 return S_OK; |
| 743 } | 743 } |
| 744 | 744 |
| 745 STDMETHODIMP BrowserAccessibilityWin::get_indexInParent(LONG* index_in_parent) { | 745 STDMETHODIMP BrowserAccessibilityWin::get_indexInParent(LONG* index_in_parent) { |
| 746 if (!instance_active()) | 746 if (!instance_active()) |
| 747 return E_FAIL; | 747 return E_FAIL; |
| 748 | 748 |
| 749 if (!index_in_parent) | 749 if (!index_in_parent) |
| 750 return E_INVALIDARG; | 750 return E_INVALIDARG; |
| 751 | 751 |
| 752 *index_in_parent = this->index_in_parent(); | 752 *index_in_parent = this->GetIndexInParent(); |
| 753 return S_OK; | 753 return S_OK; |
| 754 } | 754 } |
| 755 | 755 |
| 756 STDMETHODIMP BrowserAccessibilityWin::get_nRelations(LONG* n_relations) { | 756 STDMETHODIMP BrowserAccessibilityWin::get_nRelations(LONG* n_relations) { |
| 757 if (!instance_active()) | 757 if (!instance_active()) |
| 758 return E_FAIL; | 758 return E_FAIL; |
| 759 | 759 |
| 760 if (!n_relations) | 760 if (!n_relations) |
| 761 return E_INVALIDARG; | 761 return E_INVALIDARG; |
| 762 | 762 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 803 relations[i] = relations_[i]; | 803 relations[i] = relations_[i]; |
| 804 } | 804 } |
| 805 | 805 |
| 806 return S_OK; | 806 return S_OK; |
| 807 } | 807 } |
| 808 | 808 |
| 809 STDMETHODIMP BrowserAccessibilityWin::scrollTo(enum IA2ScrollType scroll_type) { | 809 STDMETHODIMP BrowserAccessibilityWin::scrollTo(enum IA2ScrollType scroll_type) { |
| 810 if (!instance_active()) | 810 if (!instance_active()) |
| 811 return E_FAIL; | 811 return E_FAIL; |
| 812 | 812 |
| 813 gfx::Rect r = location(); | 813 gfx::Rect r = GetLocation(); |
| 814 switch(scroll_type) { | 814 switch(scroll_type) { |
| 815 case IA2_SCROLL_TYPE_TOP_LEFT: | 815 case IA2_SCROLL_TYPE_TOP_LEFT: |
| 816 manager()->ScrollToMakeVisible(*this, gfx::Rect(r.x(), r.y(), 0, 0)); | 816 manager()->ScrollToMakeVisible(*this, gfx::Rect(r.x(), r.y(), 0, 0)); |
| 817 break; | 817 break; |
| 818 case IA2_SCROLL_TYPE_BOTTOM_RIGHT: | 818 case IA2_SCROLL_TYPE_BOTTOM_RIGHT: |
| 819 manager()->ScrollToMakeVisible( | 819 manager()->ScrollToMakeVisible( |
| 820 *this, gfx::Rect(r.right(), r.bottom(), 0, 0)); | 820 *this, gfx::Rect(r.right(), r.bottom(), 0, 0)); |
| 821 break; | 821 break; |
| 822 case IA2_SCROLL_TYPE_TOP_EDGE: | 822 case IA2_SCROLL_TYPE_TOP_EDGE: |
| 823 manager()->ScrollToMakeVisible( | 823 manager()->ScrollToMakeVisible( |
| (...skipping 27 matching lines...) Expand all Loading... |
| 851 LONG x, | 851 LONG x, |
| 852 LONG y) { | 852 LONG y) { |
| 853 if (!instance_active()) | 853 if (!instance_active()) |
| 854 return E_FAIL; | 854 return E_FAIL; |
| 855 | 855 |
| 856 gfx::Point scroll_to(x, y); | 856 gfx::Point scroll_to(x, y); |
| 857 | 857 |
| 858 if (coordinate_type == IA2_COORDTYPE_SCREEN_RELATIVE) { | 858 if (coordinate_type == IA2_COORDTYPE_SCREEN_RELATIVE) { |
| 859 scroll_to -= manager()->GetViewBounds().OffsetFromOrigin(); | 859 scroll_to -= manager()->GetViewBounds().OffsetFromOrigin(); |
| 860 } else if (coordinate_type == IA2_COORDTYPE_PARENT_RELATIVE) { | 860 } else if (coordinate_type == IA2_COORDTYPE_PARENT_RELATIVE) { |
| 861 if (parent()) | 861 if (GetParent()) |
| 862 scroll_to += parent()->location().OffsetFromOrigin(); | 862 scroll_to += GetParent()->GetLocation().OffsetFromOrigin(); |
| 863 } else { | 863 } else { |
| 864 return E_INVALIDARG; | 864 return E_INVALIDARG; |
| 865 } | 865 } |
| 866 | 866 |
| 867 manager()->ScrollToPoint(*this, scroll_to); | 867 manager()->ScrollToPoint(*this, scroll_to); |
| 868 manager()->ToBrowserAccessibilityManagerWin()->TrackScrollingObject(this); | 868 manager()->ToBrowserAccessibilityManagerWin()->TrackScrollingObject(this); |
| 869 | 869 |
| 870 return S_OK; | 870 return S_OK; |
| 871 } | 871 } |
| 872 | 872 |
| 873 STDMETHODIMP BrowserAccessibilityWin::get_groupPosition( | 873 STDMETHODIMP BrowserAccessibilityWin::get_groupPosition( |
| 874 LONG* group_level, | 874 LONG* group_level, |
| 875 LONG* similar_items_in_group, | 875 LONG* similar_items_in_group, |
| 876 LONG* position_in_group) { | 876 LONG* position_in_group) { |
| 877 if (!instance_active()) | 877 if (!instance_active()) |
| 878 return E_FAIL; | 878 return E_FAIL; |
| 879 | 879 |
| 880 if (!group_level || !similar_items_in_group || !position_in_group) | 880 if (!group_level || !similar_items_in_group || !position_in_group) |
| 881 return E_INVALIDARG; | 881 return E_INVALIDARG; |
| 882 | 882 |
| 883 if (blink_role() == ui::AX_ROLE_LIST_BOX_OPTION && | 883 if (GetRole() == ui::AX_ROLE_LIST_BOX_OPTION && |
| 884 parent() && | 884 GetParent() && |
| 885 parent()->role() == ui::AX_ROLE_LIST_BOX) { | 885 GetParent()->GetRole() == ui::AX_ROLE_LIST_BOX) { |
| 886 *group_level = 0; | 886 *group_level = 0; |
| 887 *similar_items_in_group = parent()->PlatformChildCount(); | 887 *similar_items_in_group = GetParent()->PlatformChildCount(); |
| 888 *position_in_group = index_in_parent() + 1; | 888 *position_in_group = GetIndexInParent() + 1; |
| 889 return S_OK; | 889 return S_OK; |
| 890 } | 890 } |
| 891 | 891 |
| 892 return E_NOTIMPL; | 892 return E_NOTIMPL; |
| 893 } | 893 } |
| 894 | 894 |
| 895 // | 895 // |
| 896 // IAccessibleApplication methods. | 896 // IAccessibleApplication methods. |
| 897 // | 897 // |
| 898 | 898 |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 987 return E_FAIL; | 987 return E_FAIL; |
| 988 | 988 |
| 989 if (!x || !y) | 989 if (!x || !y) |
| 990 return E_INVALIDARG; | 990 return E_INVALIDARG; |
| 991 | 991 |
| 992 if (coordinate_type == IA2_COORDTYPE_SCREEN_RELATIVE) { | 992 if (coordinate_type == IA2_COORDTYPE_SCREEN_RELATIVE) { |
| 993 HWND parent_hwnd = | 993 HWND parent_hwnd = |
| 994 manager()->ToBrowserAccessibilityManagerWin()->parent_hwnd(); | 994 manager()->ToBrowserAccessibilityManagerWin()->parent_hwnd(); |
| 995 POINT top_left = {0, 0}; | 995 POINT top_left = {0, 0}; |
| 996 ::ClientToScreen(parent_hwnd, &top_left); | 996 ::ClientToScreen(parent_hwnd, &top_left); |
| 997 *x = location().x() + top_left.x; | 997 *x = GetLocation().x() + top_left.x; |
| 998 *y = location().y() + top_left.y; | 998 *y = GetLocation().y() + top_left.y; |
| 999 } else if (coordinate_type == IA2_COORDTYPE_PARENT_RELATIVE) { | 999 } else if (coordinate_type == IA2_COORDTYPE_PARENT_RELATIVE) { |
| 1000 *x = location().x(); | 1000 *x = GetLocation().x(); |
| 1001 *y = location().y(); | 1001 *y = GetLocation().y(); |
| 1002 if (parent()) { | 1002 if (GetParent()) { |
| 1003 *x -= parent()->location().x(); | 1003 *x -= GetParent()->GetLocation().x(); |
| 1004 *y -= parent()->location().y(); | 1004 *y -= GetParent()->GetLocation().y(); |
| 1005 } | 1005 } |
| 1006 } else { | 1006 } else { |
| 1007 return E_INVALIDARG; | 1007 return E_INVALIDARG; |
| 1008 } | 1008 } |
| 1009 | 1009 |
| 1010 return S_OK; | 1010 return S_OK; |
| 1011 } | 1011 } |
| 1012 | 1012 |
| 1013 STDMETHODIMP BrowserAccessibilityWin::get_imageSize(LONG* height, LONG* width) { | 1013 STDMETHODIMP BrowserAccessibilityWin::get_imageSize(LONG* height, LONG* width) { |
| 1014 if (!instance_active()) | 1014 if (!instance_active()) |
| 1015 return E_FAIL; | 1015 return E_FAIL; |
| 1016 | 1016 |
| 1017 if (!height || !width) | 1017 if (!height || !width) |
| 1018 return E_INVALIDARG; | 1018 return E_INVALIDARG; |
| 1019 | 1019 |
| 1020 *height = location().height(); | 1020 *height = GetLocation().height(); |
| 1021 *width = location().width(); | 1021 *width = GetLocation().width(); |
| 1022 return S_OK; | 1022 return S_OK; |
| 1023 } | 1023 } |
| 1024 | 1024 |
| 1025 // | 1025 // |
| 1026 // IAccessibleTable methods. | 1026 // IAccessibleTable methods. |
| 1027 // | 1027 // |
| 1028 | 1028 |
| 1029 STDMETHODIMP BrowserAccessibilityWin::get_accessibleAt( | 1029 STDMETHODIMP BrowserAccessibilityWin::get_accessibleAt( |
| 1030 long row, | 1030 long row, |
| 1031 long column, | 1031 long column, |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1135 | 1135 |
| 1136 if (column < 0 || column >= columns) | 1136 if (column < 0 || column >= columns) |
| 1137 return E_INVALIDARG; | 1137 return E_INVALIDARG; |
| 1138 | 1138 |
| 1139 const std::vector<int32>& cell_ids = GetIntListAttribute( | 1139 const std::vector<int32>& cell_ids = GetIntListAttribute( |
| 1140 ui::AX_ATTR_CELL_IDS); | 1140 ui::AX_ATTR_CELL_IDS); |
| 1141 for (int i = 0; i < rows; ++i) { | 1141 for (int i = 0; i < rows; ++i) { |
| 1142 int cell_id = cell_ids[i * columns + column]; | 1142 int cell_id = cell_ids[i * columns + column]; |
| 1143 BrowserAccessibilityWin* cell = static_cast<BrowserAccessibilityWin*>( | 1143 BrowserAccessibilityWin* cell = static_cast<BrowserAccessibilityWin*>( |
| 1144 manager()->GetFromRendererID(cell_id)); | 1144 manager()->GetFromRendererID(cell_id)); |
| 1145 if (cell && cell->blink_role() == ui::AX_ROLE_COLUMN_HEADER) { | 1145 if (cell && cell->GetRole() == ui::AX_ROLE_COLUMN_HEADER) { |
| 1146 base::string16 cell_name = cell->GetString16Attribute( | 1146 base::string16 cell_name = cell->GetString16Attribute( |
| 1147 ui::AX_ATTR_NAME); | 1147 ui::AX_ATTR_NAME); |
| 1148 if (cell_name.size() > 0) { | 1148 if (cell_name.size() > 0) { |
| 1149 *description = SysAllocString(cell_name.c_str()); | 1149 *description = SysAllocString(cell_name.c_str()); |
| 1150 return S_OK; | 1150 return S_OK; |
| 1151 } | 1151 } |
| 1152 | 1152 |
| 1153 return cell->GetStringAttributeAsBstr( | 1153 return cell->GetStringAttributeAsBstr( |
| 1154 ui::AX_ATTR_DESCRIPTION, description); | 1154 ui::AX_ATTR_DESCRIPTION, description); |
| 1155 } | 1155 } |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1322 | 1322 |
| 1323 if (row < 0 || row >= rows) | 1323 if (row < 0 || row >= rows) |
| 1324 return E_INVALIDARG; | 1324 return E_INVALIDARG; |
| 1325 | 1325 |
| 1326 const std::vector<int32>& cell_ids = GetIntListAttribute( | 1326 const std::vector<int32>& cell_ids = GetIntListAttribute( |
| 1327 ui::AX_ATTR_CELL_IDS); | 1327 ui::AX_ATTR_CELL_IDS); |
| 1328 for (int i = 0; i < columns; ++i) { | 1328 for (int i = 0; i < columns; ++i) { |
| 1329 int cell_id = cell_ids[row * columns + i]; | 1329 int cell_id = cell_ids[row * columns + i]; |
| 1330 BrowserAccessibilityWin* cell = | 1330 BrowserAccessibilityWin* cell = |
| 1331 manager()->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin(); | 1331 manager()->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin(); |
| 1332 if (cell && cell->blink_role() == ui::AX_ROLE_ROW_HEADER) { | 1332 if (cell && cell->GetRole() == ui::AX_ROLE_ROW_HEADER) { |
| 1333 base::string16 cell_name = cell->GetString16Attribute( | 1333 base::string16 cell_name = cell->GetString16Attribute( |
| 1334 ui::AX_ATTR_NAME); | 1334 ui::AX_ATTR_NAME); |
| 1335 if (cell_name.size() > 0) { | 1335 if (cell_name.size() > 0) { |
| 1336 *description = SysAllocString(cell_name.c_str()); | 1336 *description = SysAllocString(cell_name.c_str()); |
| 1337 return S_OK; | 1337 return S_OK; |
| 1338 } | 1338 } |
| 1339 | 1339 |
| 1340 return cell->GetStringAttributeAsBstr( | 1340 return cell->GetStringAttributeAsBstr( |
| 1341 ui::AX_ATTR_DESCRIPTION, description); | 1341 ui::AX_ATTR_DESCRIPTION, description); |
| 1342 } | 1342 } |
| (...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1644 return E_INVALIDARG; | 1644 return E_INVALIDARG; |
| 1645 | 1645 |
| 1646 *n_column_header_cells = 0; | 1646 *n_column_header_cells = 0; |
| 1647 | 1647 |
| 1648 int column; | 1648 int column; |
| 1649 if (!GetIntAttribute( | 1649 if (!GetIntAttribute( |
| 1650 ui::AX_ATTR_TABLE_CELL_COLUMN_INDEX, &column)) { | 1650 ui::AX_ATTR_TABLE_CELL_COLUMN_INDEX, &column)) { |
| 1651 return S_FALSE; | 1651 return S_FALSE; |
| 1652 } | 1652 } |
| 1653 | 1653 |
| 1654 BrowserAccessibility* table = parent(); | 1654 BrowserAccessibility* table = GetParent(); |
| 1655 while (table && table->role() != ui::AX_ROLE_TABLE) | 1655 while (table && table->GetRole() != ui::AX_ROLE_TABLE) |
| 1656 table = table->parent(); | 1656 table = table->GetParent(); |
| 1657 if (!table) { | 1657 if (!table) { |
| 1658 NOTREACHED(); | 1658 NOTREACHED(); |
| 1659 return S_FALSE; | 1659 return S_FALSE; |
| 1660 } | 1660 } |
| 1661 | 1661 |
| 1662 int columns; | 1662 int columns; |
| 1663 int rows; | 1663 int rows; |
| 1664 if (!table->GetIntAttribute( | 1664 if (!table->GetIntAttribute( |
| 1665 ui::AX_ATTR_TABLE_COLUMN_COUNT, &columns) || | 1665 ui::AX_ATTR_TABLE_COLUMN_COUNT, &columns) || |
| 1666 !table->GetIntAttribute( | 1666 !table->GetIntAttribute( |
| 1667 ui::AX_ATTR_TABLE_ROW_COUNT, &rows)) { | 1667 ui::AX_ATTR_TABLE_ROW_COUNT, &rows)) { |
| 1668 return S_FALSE; | 1668 return S_FALSE; |
| 1669 } | 1669 } |
| 1670 if (columns <= 0 || rows <= 0 || column < 0 || column >= columns) | 1670 if (columns <= 0 || rows <= 0 || column < 0 || column >= columns) |
| 1671 return S_FALSE; | 1671 return S_FALSE; |
| 1672 | 1672 |
| 1673 const std::vector<int32>& cell_ids = table->GetIntListAttribute( | 1673 const std::vector<int32>& cell_ids = table->GetIntListAttribute( |
| 1674 ui::AX_ATTR_CELL_IDS); | 1674 ui::AX_ATTR_CELL_IDS); |
| 1675 | 1675 |
| 1676 for (int i = 0; i < rows; ++i) { | 1676 for (int i = 0; i < rows; ++i) { |
| 1677 int cell_id = cell_ids[i * columns + column]; | 1677 int cell_id = cell_ids[i * columns + column]; |
| 1678 BrowserAccessibilityWin* cell = | 1678 BrowserAccessibilityWin* cell = |
| 1679 manager()->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin(); | 1679 manager()->GetFromRendererID(cell_id)->ToBrowserAccessibilityWin(); |
| 1680 if (cell && cell->blink_role() == ui::AX_ROLE_COLUMN_HEADER) | 1680 if (cell && cell->GetRole() == ui::AX_ROLE_COLUMN_HEADER) |
| 1681 (*n_column_header_cells)++; | 1681 (*n_column_header_cells)++; |
| 1682 } | 1682 } |
| 1683 | 1683 |
| 1684 *cell_accessibles = static_cast<IUnknown**>(CoTaskMemAlloc( | 1684 *cell_accessibles = static_cast<IUnknown**>(CoTaskMemAlloc( |
| 1685 (*n_column_header_cells) * sizeof(cell_accessibles[0]))); | 1685 (*n_column_header_cells) * sizeof(cell_accessibles[0]))); |
| 1686 int index = 0; | 1686 int index = 0; |
| 1687 for (int i = 0; i < rows; ++i) { | 1687 for (int i = 0; i < rows; ++i) { |
| 1688 int cell_id = cell_ids[i * columns + column]; | 1688 int cell_id = cell_ids[i * columns + column]; |
| 1689 BrowserAccessibility* cell = manager()->GetFromRendererID(cell_id); | 1689 BrowserAccessibility* cell = manager()->GetFromRendererID(cell_id); |
| 1690 if (cell && cell->role() == ui::AX_ROLE_COLUMN_HEADER) { | 1690 if (cell && cell->GetRole() == ui::AX_ROLE_COLUMN_HEADER) { |
| 1691 (*cell_accessibles)[index] = static_cast<IAccessible*>( | 1691 (*cell_accessibles)[index] = static_cast<IAccessible*>( |
| 1692 cell->ToBrowserAccessibilityWin()->NewReference()); | 1692 cell->ToBrowserAccessibilityWin()->NewReference()); |
| 1693 ++index; | 1693 ++index; |
| 1694 } | 1694 } |
| 1695 } | 1695 } |
| 1696 | 1696 |
| 1697 return S_OK; | 1697 return S_OK; |
| 1698 } | 1698 } |
| 1699 | 1699 |
| 1700 STDMETHODIMP BrowserAccessibilityWin::get_columnIndex(long* column_index) { | 1700 STDMETHODIMP BrowserAccessibilityWin::get_columnIndex(long* column_index) { |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1742 return E_INVALIDARG; | 1742 return E_INVALIDARG; |
| 1743 | 1743 |
| 1744 *n_row_header_cells = 0; | 1744 *n_row_header_cells = 0; |
| 1745 | 1745 |
| 1746 int row; | 1746 int row; |
| 1747 if (!GetIntAttribute( | 1747 if (!GetIntAttribute( |
| 1748 ui::AX_ATTR_TABLE_CELL_ROW_INDEX, &row)) { | 1748 ui::AX_ATTR_TABLE_CELL_ROW_INDEX, &row)) { |
| 1749 return S_FALSE; | 1749 return S_FALSE; |
| 1750 } | 1750 } |
| 1751 | 1751 |
| 1752 BrowserAccessibility* table = parent(); | 1752 BrowserAccessibility* table = GetParent(); |
| 1753 while (table && table->role() != ui::AX_ROLE_TABLE) | 1753 while (table && table->GetRole() != ui::AX_ROLE_TABLE) |
| 1754 table = table->parent(); | 1754 table = table->GetParent(); |
| 1755 if (!table) { | 1755 if (!table) { |
| 1756 NOTREACHED(); | 1756 NOTREACHED(); |
| 1757 return S_FALSE; | 1757 return S_FALSE; |
| 1758 } | 1758 } |
| 1759 | 1759 |
| 1760 int columns; | 1760 int columns; |
| 1761 int rows; | 1761 int rows; |
| 1762 if (!table->GetIntAttribute( | 1762 if (!table->GetIntAttribute( |
| 1763 ui::AX_ATTR_TABLE_COLUMN_COUNT, &columns) || | 1763 ui::AX_ATTR_TABLE_COLUMN_COUNT, &columns) || |
| 1764 !table->GetIntAttribute( | 1764 !table->GetIntAttribute( |
| 1765 ui::AX_ATTR_TABLE_ROW_COUNT, &rows)) { | 1765 ui::AX_ATTR_TABLE_ROW_COUNT, &rows)) { |
| 1766 return S_FALSE; | 1766 return S_FALSE; |
| 1767 } | 1767 } |
| 1768 if (columns <= 0 || rows <= 0 || row < 0 || row >= rows) | 1768 if (columns <= 0 || rows <= 0 || row < 0 || row >= rows) |
| 1769 return S_FALSE; | 1769 return S_FALSE; |
| 1770 | 1770 |
| 1771 const std::vector<int32>& cell_ids = table->GetIntListAttribute( | 1771 const std::vector<int32>& cell_ids = table->GetIntListAttribute( |
| 1772 ui::AX_ATTR_CELL_IDS); | 1772 ui::AX_ATTR_CELL_IDS); |
| 1773 | 1773 |
| 1774 for (int i = 0; i < columns; ++i) { | 1774 for (int i = 0; i < columns; ++i) { |
| 1775 int cell_id = cell_ids[row * columns + i]; | 1775 int cell_id = cell_ids[row * columns + i]; |
| 1776 BrowserAccessibility* cell = manager()->GetFromRendererID(cell_id); | 1776 BrowserAccessibility* cell = manager()->GetFromRendererID(cell_id); |
| 1777 if (cell && cell->role() == ui::AX_ROLE_ROW_HEADER) | 1777 if (cell && cell->GetRole() == ui::AX_ROLE_ROW_HEADER) |
| 1778 (*n_row_header_cells)++; | 1778 (*n_row_header_cells)++; |
| 1779 } | 1779 } |
| 1780 | 1780 |
| 1781 *cell_accessibles = static_cast<IUnknown**>(CoTaskMemAlloc( | 1781 *cell_accessibles = static_cast<IUnknown**>(CoTaskMemAlloc( |
| 1782 (*n_row_header_cells) * sizeof(cell_accessibles[0]))); | 1782 (*n_row_header_cells) * sizeof(cell_accessibles[0]))); |
| 1783 int index = 0; | 1783 int index = 0; |
| 1784 for (int i = 0; i < columns; ++i) { | 1784 for (int i = 0; i < columns; ++i) { |
| 1785 int cell_id = cell_ids[row * columns + i]; | 1785 int cell_id = cell_ids[row * columns + i]; |
| 1786 BrowserAccessibility* cell = manager()->GetFromRendererID(cell_id); | 1786 BrowserAccessibility* cell = manager()->GetFromRendererID(cell_id); |
| 1787 if (cell && cell->role() == ui::AX_ROLE_ROW_HEADER) { | 1787 if (cell && cell->GetRole() == ui::AX_ROLE_ROW_HEADER) { |
| 1788 (*cell_accessibles)[index] = static_cast<IAccessible*>( | 1788 (*cell_accessibles)[index] = static_cast<IAccessible*>( |
| 1789 cell->ToBrowserAccessibilityWin()->NewReference()); | 1789 cell->ToBrowserAccessibilityWin()->NewReference()); |
| 1790 ++index; | 1790 ++index; |
| 1791 } | 1791 } |
| 1792 } | 1792 } |
| 1793 | 1793 |
| 1794 return S_OK; | 1794 return S_OK; |
| 1795 } | 1795 } |
| 1796 | 1796 |
| 1797 STDMETHODIMP BrowserAccessibilityWin::get_rowIndex(long* row_index) { | 1797 STDMETHODIMP BrowserAccessibilityWin::get_rowIndex(long* row_index) { |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1865 | 1865 |
| 1866 if (!table) | 1866 if (!table) |
| 1867 return E_INVALIDARG; | 1867 return E_INVALIDARG; |
| 1868 | 1868 |
| 1869 | 1869 |
| 1870 int row; | 1870 int row; |
| 1871 int column; | 1871 int column; |
| 1872 GetIntAttribute(ui::AX_ATTR_TABLE_CELL_ROW_INDEX, &row); | 1872 GetIntAttribute(ui::AX_ATTR_TABLE_CELL_ROW_INDEX, &row); |
| 1873 GetIntAttribute(ui::AX_ATTR_TABLE_CELL_COLUMN_INDEX, &column); | 1873 GetIntAttribute(ui::AX_ATTR_TABLE_CELL_COLUMN_INDEX, &column); |
| 1874 | 1874 |
| 1875 BrowserAccessibility* find_table = parent(); | 1875 BrowserAccessibility* find_table = GetParent(); |
| 1876 while (find_table && find_table->role() != ui::AX_ROLE_TABLE) | 1876 while (find_table && find_table->GetRole() != ui::AX_ROLE_TABLE) |
| 1877 find_table = find_table->parent(); | 1877 find_table = find_table->GetParent(); |
| 1878 if (!find_table) { | 1878 if (!find_table) { |
| 1879 NOTREACHED(); | 1879 NOTREACHED(); |
| 1880 return S_FALSE; | 1880 return S_FALSE; |
| 1881 } | 1881 } |
| 1882 | 1882 |
| 1883 *table = static_cast<IAccessibleTable*>( | 1883 *table = static_cast<IAccessibleTable*>( |
| 1884 find_table->ToBrowserAccessibilityWin()->NewReference()); | 1884 find_table->ToBrowserAccessibilityWin()->NewReference()); |
| 1885 | 1885 |
| 1886 return S_OK; | 1886 return S_OK; |
| 1887 } | 1887 } |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1902 } | 1902 } |
| 1903 | 1903 |
| 1904 STDMETHODIMP BrowserAccessibilityWin::get_caretOffset(LONG* offset) { | 1904 STDMETHODIMP BrowserAccessibilityWin::get_caretOffset(LONG* offset) { |
| 1905 if (!instance_active()) | 1905 if (!instance_active()) |
| 1906 return E_FAIL; | 1906 return E_FAIL; |
| 1907 | 1907 |
| 1908 if (!offset) | 1908 if (!offset) |
| 1909 return E_INVALIDARG; | 1909 return E_INVALIDARG; |
| 1910 | 1910 |
| 1911 *offset = 0; | 1911 *offset = 0; |
| 1912 if (blink_role() == ui::AX_ROLE_TEXT_FIELD || | 1912 if (GetRole() == ui::AX_ROLE_TEXT_FIELD || |
| 1913 blink_role() == ui::AX_ROLE_TEXT_AREA) { | 1913 GetRole() == ui::AX_ROLE_TEXT_AREA) { |
| 1914 int sel_start = 0; | 1914 int sel_start = 0; |
| 1915 if (GetIntAttribute(ui::AX_ATTR_TEXT_SEL_START, | 1915 if (GetIntAttribute(ui::AX_ATTR_TEXT_SEL_START, |
| 1916 &sel_start)) | 1916 &sel_start)) |
| 1917 *offset = sel_start; | 1917 *offset = sel_start; |
| 1918 } | 1918 } |
| 1919 | 1919 |
| 1920 return S_OK; | 1920 return S_OK; |
| 1921 } | 1921 } |
| 1922 | 1922 |
| 1923 STDMETHODIMP BrowserAccessibilityWin::get_characterExtents( | 1923 STDMETHODIMP BrowserAccessibilityWin::get_characterExtents( |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1937 HandleSpecialTextOffset(text_str, &offset); | 1937 HandleSpecialTextOffset(text_str, &offset); |
| 1938 | 1938 |
| 1939 if (offset < 0 || offset > static_cast<LONG>(text_str.size())) | 1939 if (offset < 0 || offset > static_cast<LONG>(text_str.size())) |
| 1940 return E_INVALIDARG; | 1940 return E_INVALIDARG; |
| 1941 | 1941 |
| 1942 gfx::Rect character_bounds; | 1942 gfx::Rect character_bounds; |
| 1943 if (coordinate_type == IA2_COORDTYPE_SCREEN_RELATIVE) { | 1943 if (coordinate_type == IA2_COORDTYPE_SCREEN_RELATIVE) { |
| 1944 character_bounds = GetGlobalBoundsForRange(offset, 1); | 1944 character_bounds = GetGlobalBoundsForRange(offset, 1); |
| 1945 } else if (coordinate_type == IA2_COORDTYPE_PARENT_RELATIVE) { | 1945 } else if (coordinate_type == IA2_COORDTYPE_PARENT_RELATIVE) { |
| 1946 character_bounds = GetLocalBoundsForRange(offset, 1); | 1946 character_bounds = GetLocalBoundsForRange(offset, 1); |
| 1947 character_bounds -= location().OffsetFromOrigin(); | 1947 character_bounds -= GetLocation().OffsetFromOrigin(); |
| 1948 } else { | 1948 } else { |
| 1949 return E_INVALIDARG; | 1949 return E_INVALIDARG; |
| 1950 } | 1950 } |
| 1951 | 1951 |
| 1952 *out_x = character_bounds.x(); | 1952 *out_x = character_bounds.x(); |
| 1953 *out_y = character_bounds.y(); | 1953 *out_y = character_bounds.y(); |
| 1954 *out_width = character_bounds.width(); | 1954 *out_width = character_bounds.width(); |
| 1955 *out_height = character_bounds.height(); | 1955 *out_height = character_bounds.height(); |
| 1956 | 1956 |
| 1957 return S_OK; | 1957 return S_OK; |
| 1958 } | 1958 } |
| 1959 | 1959 |
| 1960 STDMETHODIMP BrowserAccessibilityWin::get_nSelections(LONG* n_selections) { | 1960 STDMETHODIMP BrowserAccessibilityWin::get_nSelections(LONG* n_selections) { |
| 1961 if (!instance_active()) | 1961 if (!instance_active()) |
| 1962 return E_FAIL; | 1962 return E_FAIL; |
| 1963 | 1963 |
| 1964 if (!n_selections) | 1964 if (!n_selections) |
| 1965 return E_INVALIDARG; | 1965 return E_INVALIDARG; |
| 1966 | 1966 |
| 1967 *n_selections = 0; | 1967 *n_selections = 0; |
| 1968 if (blink_role() == ui::AX_ROLE_TEXT_FIELD || | 1968 if (GetRole() == ui::AX_ROLE_TEXT_FIELD || |
| 1969 blink_role() == ui::AX_ROLE_TEXT_AREA) { | 1969 GetRole() == ui::AX_ROLE_TEXT_AREA) { |
| 1970 int sel_start = 0; | 1970 int sel_start = 0; |
| 1971 int sel_end = 0; | 1971 int sel_end = 0; |
| 1972 if (GetIntAttribute(ui::AX_ATTR_TEXT_SEL_START, | 1972 if (GetIntAttribute(ui::AX_ATTR_TEXT_SEL_START, |
| 1973 &sel_start) && | 1973 &sel_start) && |
| 1974 GetIntAttribute(ui::AX_ATTR_TEXT_SEL_END, &sel_end) && | 1974 GetIntAttribute(ui::AX_ATTR_TEXT_SEL_END, &sel_end) && |
| 1975 sel_start != sel_end) | 1975 sel_start != sel_end) |
| 1976 *n_selections = 1; | 1976 *n_selections = 1; |
| 1977 } | 1977 } |
| 1978 | 1978 |
| 1979 return S_OK; | 1979 return S_OK; |
| 1980 } | 1980 } |
| 1981 | 1981 |
| 1982 STDMETHODIMP BrowserAccessibilityWin::get_selection(LONG selection_index, | 1982 STDMETHODIMP BrowserAccessibilityWin::get_selection(LONG selection_index, |
| 1983 LONG* start_offset, | 1983 LONG* start_offset, |
| 1984 LONG* end_offset) { | 1984 LONG* end_offset) { |
| 1985 if (!instance_active()) | 1985 if (!instance_active()) |
| 1986 return E_FAIL; | 1986 return E_FAIL; |
| 1987 | 1987 |
| 1988 if (!start_offset || !end_offset || selection_index != 0) | 1988 if (!start_offset || !end_offset || selection_index != 0) |
| 1989 return E_INVALIDARG; | 1989 return E_INVALIDARG; |
| 1990 | 1990 |
| 1991 *start_offset = 0; | 1991 *start_offset = 0; |
| 1992 *end_offset = 0; | 1992 *end_offset = 0; |
| 1993 if (blink_role() == ui::AX_ROLE_TEXT_FIELD || | 1993 if (GetRole() == ui::AX_ROLE_TEXT_FIELD || |
| 1994 blink_role() == ui::AX_ROLE_TEXT_AREA) { | 1994 GetRole() == ui::AX_ROLE_TEXT_AREA) { |
| 1995 int sel_start = 0; | 1995 int sel_start = 0; |
| 1996 int sel_end = 0; | 1996 int sel_end = 0; |
| 1997 if (GetIntAttribute( | 1997 if (GetIntAttribute( |
| 1998 ui::AX_ATTR_TEXT_SEL_START, &sel_start) && | 1998 ui::AX_ATTR_TEXT_SEL_START, &sel_start) && |
| 1999 GetIntAttribute(ui::AX_ATTR_TEXT_SEL_END, &sel_end)) { | 1999 GetIntAttribute(ui::AX_ATTR_TEXT_SEL_END, &sel_end)) { |
| 2000 *start_offset = sel_start; | 2000 *start_offset = sel_start; |
| 2001 *end_offset = sel_end; | 2001 *end_offset = sel_end; |
| 2002 } | 2002 } |
| 2003 } | 2003 } |
| 2004 | 2004 |
| (...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2268 if (!instance_active()) | 2268 if (!instance_active()) |
| 2269 return E_FAIL; | 2269 return E_FAIL; |
| 2270 | 2270 |
| 2271 if (!hyperlink || | 2271 if (!hyperlink || |
| 2272 index < 0 || | 2272 index < 0 || |
| 2273 index >= static_cast<long>(hyperlinks_.size())) { | 2273 index >= static_cast<long>(hyperlinks_.size())) { |
| 2274 return E_INVALIDARG; | 2274 return E_INVALIDARG; |
| 2275 } | 2275 } |
| 2276 | 2276 |
| 2277 BrowserAccessibilityWin* child = | 2277 BrowserAccessibilityWin* child = |
| 2278 children()[hyperlinks_[index]]->ToBrowserAccessibilityWin(); | 2278 InternalGetChild(hyperlinks_[index])->ToBrowserAccessibilityWin(); |
| 2279 *hyperlink = static_cast<IAccessibleHyperlink*>(child->NewReference()); | 2279 *hyperlink = static_cast<IAccessibleHyperlink*>(child->NewReference()); |
| 2280 return S_OK; | 2280 return S_OK; |
| 2281 } | 2281 } |
| 2282 | 2282 |
| 2283 STDMETHODIMP BrowserAccessibilityWin::get_hyperlinkIndex( | 2283 STDMETHODIMP BrowserAccessibilityWin::get_hyperlinkIndex( |
| 2284 long char_index, | 2284 long char_index, |
| 2285 long* hyperlink_index) { | 2285 long* hyperlink_index) { |
| 2286 if (!instance_active()) | 2286 if (!instance_active()) |
| 2287 return E_FAIL; | 2287 return E_FAIL; |
| 2288 | 2288 |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2463 short* name_space_id, | 2463 short* name_space_id, |
| 2464 BSTR* attrib_values, | 2464 BSTR* attrib_values, |
| 2465 unsigned short* num_attribs) { | 2465 unsigned short* num_attribs) { |
| 2466 if (!instance_active()) | 2466 if (!instance_active()) |
| 2467 return E_FAIL; | 2467 return E_FAIL; |
| 2468 | 2468 |
| 2469 if (!attrib_names || !name_space_id || !attrib_values || !num_attribs) | 2469 if (!attrib_names || !name_space_id || !attrib_values || !num_attribs) |
| 2470 return E_INVALIDARG; | 2470 return E_INVALIDARG; |
| 2471 | 2471 |
| 2472 *num_attribs = max_attribs; | 2472 *num_attribs = max_attribs; |
| 2473 if (*num_attribs > html_attributes().size()) | 2473 if (*num_attribs > GetHtmlAttributes().size()) |
| 2474 *num_attribs = html_attributes().size(); | 2474 *num_attribs = GetHtmlAttributes().size(); |
| 2475 | 2475 |
| 2476 for (unsigned short i = 0; i < *num_attribs; ++i) { | 2476 for (unsigned short i = 0; i < *num_attribs; ++i) { |
| 2477 attrib_names[i] = SysAllocString( | 2477 attrib_names[i] = SysAllocString( |
| 2478 base::UTF8ToUTF16(html_attributes()[i].first).c_str()); | 2478 base::UTF8ToUTF16(GetHtmlAttributes()[i].first).c_str()); |
| 2479 name_space_id[i] = 0; | 2479 name_space_id[i] = 0; |
| 2480 attrib_values[i] = SysAllocString( | 2480 attrib_values[i] = SysAllocString( |
| 2481 base::UTF8ToUTF16(html_attributes()[i].second).c_str()); | 2481 base::UTF8ToUTF16(GetHtmlAttributes()[i].second).c_str()); |
| 2482 } | 2482 } |
| 2483 return S_OK; | 2483 return S_OK; |
| 2484 } | 2484 } |
| 2485 | 2485 |
| 2486 STDMETHODIMP BrowserAccessibilityWin::get_attributesForNames( | 2486 STDMETHODIMP BrowserAccessibilityWin::get_attributesForNames( |
| 2487 unsigned short num_attribs, | 2487 unsigned short num_attribs, |
| 2488 BSTR* attrib_names, | 2488 BSTR* attrib_names, |
| 2489 short* name_space_id, | 2489 short* name_space_id, |
| 2490 BSTR* attrib_values) { | 2490 BSTR* attrib_values) { |
| 2491 if (!instance_active()) | 2491 if (!instance_active()) |
| 2492 return E_FAIL; | 2492 return E_FAIL; |
| 2493 | 2493 |
| 2494 if (!attrib_names || !name_space_id || !attrib_values) | 2494 if (!attrib_names || !name_space_id || !attrib_values) |
| 2495 return E_INVALIDARG; | 2495 return E_INVALIDARG; |
| 2496 | 2496 |
| 2497 for (unsigned short i = 0; i < num_attribs; ++i) { | 2497 for (unsigned short i = 0; i < num_attribs; ++i) { |
| 2498 name_space_id[i] = 0; | 2498 name_space_id[i] = 0; |
| 2499 bool found = false; | 2499 bool found = false; |
| 2500 std::string name = base::UTF16ToUTF8((LPCWSTR)attrib_names[i]); | 2500 std::string name = base::UTF16ToUTF8((LPCWSTR)attrib_names[i]); |
| 2501 for (unsigned int j = 0; j < html_attributes().size(); ++j) { | 2501 for (unsigned int j = 0; j < GetHtmlAttributes().size(); ++j) { |
| 2502 if (html_attributes()[j].first == name) { | 2502 if (GetHtmlAttributes()[j].first == name) { |
| 2503 attrib_values[i] = SysAllocString( | 2503 attrib_values[i] = SysAllocString( |
| 2504 base::UTF8ToUTF16(html_attributes()[j].second).c_str()); | 2504 base::UTF8ToUTF16(GetHtmlAttributes()[j].second).c_str()); |
| 2505 found = true; | 2505 found = true; |
| 2506 break; | 2506 break; |
| 2507 } | 2507 } |
| 2508 } | 2508 } |
| 2509 if (!found) { | 2509 if (!found) { |
| 2510 attrib_values[i] = NULL; | 2510 attrib_values[i] = NULL; |
| 2511 } | 2511 } |
| 2512 } | 2512 } |
| 2513 return S_OK; | 2513 return S_OK; |
| 2514 } | 2514 } |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2574 IA2_SCROLL_TYPE_TOP_LEFT : IA2_SCROLL_TYPE_ANYWHERE); | 2574 IA2_SCROLL_TYPE_TOP_LEFT : IA2_SCROLL_TYPE_ANYWHERE); |
| 2575 } | 2575 } |
| 2576 | 2576 |
| 2577 STDMETHODIMP BrowserAccessibilityWin::get_parentNode(ISimpleDOMNode** node) { | 2577 STDMETHODIMP BrowserAccessibilityWin::get_parentNode(ISimpleDOMNode** node) { |
| 2578 if (!instance_active()) | 2578 if (!instance_active()) |
| 2579 return E_FAIL; | 2579 return E_FAIL; |
| 2580 | 2580 |
| 2581 if (!node) | 2581 if (!node) |
| 2582 return E_INVALIDARG; | 2582 return E_INVALIDARG; |
| 2583 | 2583 |
| 2584 *node = parent()->ToBrowserAccessibilityWin()->NewReference(); | 2584 *node = GetParent()->ToBrowserAccessibilityWin()->NewReference(); |
| 2585 return S_OK; | 2585 return S_OK; |
| 2586 } | 2586 } |
| 2587 | 2587 |
| 2588 STDMETHODIMP BrowserAccessibilityWin::get_firstChild(ISimpleDOMNode** node) { | 2588 STDMETHODIMP BrowserAccessibilityWin::get_firstChild(ISimpleDOMNode** node) { |
| 2589 if (!instance_active()) | 2589 if (!instance_active()) |
| 2590 return E_FAIL; | 2590 return E_FAIL; |
| 2591 | 2591 |
| 2592 if (!node) | 2592 if (!node) |
| 2593 return E_INVALIDARG; | 2593 return E_INVALIDARG; |
| 2594 | 2594 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 2619 } | 2619 } |
| 2620 | 2620 |
| 2621 STDMETHODIMP BrowserAccessibilityWin::get_previousSibling( | 2621 STDMETHODIMP BrowserAccessibilityWin::get_previousSibling( |
| 2622 ISimpleDOMNode** node) { | 2622 ISimpleDOMNode** node) { |
| 2623 if (!instance_active()) | 2623 if (!instance_active()) |
| 2624 return E_FAIL; | 2624 return E_FAIL; |
| 2625 | 2625 |
| 2626 if (!node) | 2626 if (!node) |
| 2627 return E_INVALIDARG; | 2627 return E_INVALIDARG; |
| 2628 | 2628 |
| 2629 if (!parent() || index_in_parent() <= 0) { | 2629 if (!GetParent() || GetIndexInParent() <= 0) { |
| 2630 *node = NULL; | 2630 *node = NULL; |
| 2631 return S_FALSE; | 2631 return S_FALSE; |
| 2632 } | 2632 } |
| 2633 | 2633 |
| 2634 *node = parent()->children()[index_in_parent() - 1]-> | 2634 *node = GetParent()->InternalGetChild(GetIndexInParent() - 1)-> |
| 2635 ToBrowserAccessibilityWin()->NewReference(); | 2635 ToBrowserAccessibilityWin()->NewReference(); |
| 2636 return S_OK; | 2636 return S_OK; |
| 2637 } | 2637 } |
| 2638 | 2638 |
| 2639 STDMETHODIMP BrowserAccessibilityWin::get_nextSibling(ISimpleDOMNode** node) { | 2639 STDMETHODIMP BrowserAccessibilityWin::get_nextSibling(ISimpleDOMNode** node) { |
| 2640 if (!instance_active()) | 2640 if (!instance_active()) |
| 2641 return E_FAIL; | 2641 return E_FAIL; |
| 2642 | 2642 |
| 2643 if (!node) | 2643 if (!node) |
| 2644 return E_INVALIDARG; | 2644 return E_INVALIDARG; |
| 2645 | 2645 |
| 2646 if (!parent() || | 2646 if (!GetParent() || |
| 2647 index_in_parent() < 0 || | 2647 GetIndexInParent() < 0 || |
| 2648 index_in_parent() >= static_cast<int>(parent()->children().size()) - 1) { | 2648 GetIndexInParent() >= static_cast<int>(GetParent()->InternalChildCount())
- 1) { |
| 2649 *node = NULL; | 2649 *node = NULL; |
| 2650 return S_FALSE; | 2650 return S_FALSE; |
| 2651 } | 2651 } |
| 2652 | 2652 |
| 2653 *node = parent()->children()[index_in_parent() + 1]-> | 2653 *node = GetParent()->InternalGetChild(GetIndexInParent() + 1)-> |
| 2654 ToBrowserAccessibilityWin()->NewReference(); | 2654 ToBrowserAccessibilityWin()->NewReference(); |
| 2655 return S_OK; | 2655 return S_OK; |
| 2656 } | 2656 } |
| 2657 | 2657 |
| 2658 STDMETHODIMP BrowserAccessibilityWin::get_childAt( | 2658 STDMETHODIMP BrowserAccessibilityWin::get_childAt( |
| 2659 unsigned int child_index, | 2659 unsigned int child_index, |
| 2660 ISimpleDOMNode** node) { | 2660 ISimpleDOMNode** node) { |
| 2661 if (!instance_active()) | 2661 if (!instance_active()) |
| 2662 return E_FAIL; | 2662 return E_FAIL; |
| 2663 | 2663 |
| (...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2904 | 2904 |
| 2905 // Expose the "display" and "tag" attributes. | 2905 // Expose the "display" and "tag" attributes. |
| 2906 StringAttributeToIA2(ui::AX_ATTR_DISPLAY, "display"); | 2906 StringAttributeToIA2(ui::AX_ATTR_DISPLAY, "display"); |
| 2907 StringAttributeToIA2(ui::AX_ATTR_HTML_TAG, "tag"); | 2907 StringAttributeToIA2(ui::AX_ATTR_HTML_TAG, "tag"); |
| 2908 StringAttributeToIA2(ui::AX_ATTR_ROLE, "xml-roles"); | 2908 StringAttributeToIA2(ui::AX_ATTR_ROLE, "xml-roles"); |
| 2909 | 2909 |
| 2910 // Expose "level" attribute for headings, trees, etc. | 2910 // Expose "level" attribute for headings, trees, etc. |
| 2911 IntAttributeToIA2(ui::AX_ATTR_HIERARCHICAL_LEVEL, "level"); | 2911 IntAttributeToIA2(ui::AX_ATTR_HIERARCHICAL_LEVEL, "level"); |
| 2912 | 2912 |
| 2913 // Expose the set size and position in set for listbox options. | 2913 // Expose the set size and position in set for listbox options. |
| 2914 if (blink_role() == ui::AX_ROLE_LIST_BOX_OPTION && | 2914 if (GetRole() == ui::AX_ROLE_LIST_BOX_OPTION && |
| 2915 parent() && | 2915 GetParent() && |
| 2916 parent()->role() == ui::AX_ROLE_LIST_BOX) { | 2916 GetParent()->GetRole() == ui::AX_ROLE_LIST_BOX) { |
| 2917 ia2_attributes_.push_back( | 2917 ia2_attributes_.push_back( |
| 2918 L"setsize:" + base::IntToString16(parent()->PlatformChildCount())); | 2918 L"setsize:" + base::IntToString16(GetParent()->PlatformChildCount())); |
| 2919 ia2_attributes_.push_back( | 2919 ia2_attributes_.push_back( |
| 2920 L"setsize:" + base::IntToString16(index_in_parent() + 1)); | 2920 L"setsize:" + base::IntToString16(GetIndexInParent() + 1)); |
| 2921 } | 2921 } |
| 2922 | 2922 |
| 2923 if (ia_role_ == ROLE_SYSTEM_CHECKBUTTON || | 2923 if (ia_role_ == ROLE_SYSTEM_CHECKBUTTON || |
| 2924 ia_role_ == ROLE_SYSTEM_RADIOBUTTON || | 2924 ia_role_ == ROLE_SYSTEM_RADIOBUTTON || |
| 2925 ia2_role_ == IA2_ROLE_TOGGLE_BUTTON) { | 2925 ia2_role_ == IA2_ROLE_TOGGLE_BUTTON) { |
| 2926 ia2_attributes_.push_back(L"checkable:true"); | 2926 ia2_attributes_.push_back(L"checkable:true"); |
| 2927 } | 2927 } |
| 2928 | 2928 |
| 2929 // Expose live region attributes. | 2929 // Expose live region attributes. |
| 2930 StringAttributeToIA2(ui::AX_ATTR_LIVE_STATUS, "live"); | 2930 StringAttributeToIA2(ui::AX_ATTR_LIVE_STATUS, "live"); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 2944 | 2944 |
| 2945 // Expose slider value. | 2945 // Expose slider value. |
| 2946 if (ia_role_ == ROLE_SYSTEM_PROGRESSBAR || | 2946 if (ia_role_ == ROLE_SYSTEM_PROGRESSBAR || |
| 2947 ia_role_ == ROLE_SYSTEM_SCROLLBAR || | 2947 ia_role_ == ROLE_SYSTEM_SCROLLBAR || |
| 2948 ia_role_ == ROLE_SYSTEM_SLIDER) { | 2948 ia_role_ == ROLE_SYSTEM_SLIDER) { |
| 2949 ia2_attributes_.push_back(L"valuetext:" + GetValueText()); | 2949 ia2_attributes_.push_back(L"valuetext:" + GetValueText()); |
| 2950 } | 2950 } |
| 2951 | 2951 |
| 2952 // Expose table cell index. | 2952 // Expose table cell index. |
| 2953 if (ia_role_ == ROLE_SYSTEM_CELL) { | 2953 if (ia_role_ == ROLE_SYSTEM_CELL) { |
| 2954 BrowserAccessibility* table = parent(); | 2954 BrowserAccessibility* table = GetParent(); |
| 2955 while (table && table->role() != ui::AX_ROLE_TABLE) | 2955 while (table && table->GetRole() != ui::AX_ROLE_TABLE) |
| 2956 table = table->parent(); | 2956 table = table->GetParent(); |
| 2957 if (table) { | 2957 if (table) { |
| 2958 const std::vector<int32>& unique_cell_ids = table->GetIntListAttribute( | 2958 const std::vector<int32>& unique_cell_ids = table->GetIntListAttribute( |
| 2959 ui::AX_ATTR_UNIQUE_CELL_IDS); | 2959 ui::AX_ATTR_UNIQUE_CELL_IDS); |
| 2960 for (size_t i = 0; i < unique_cell_ids.size(); ++i) { | 2960 for (size_t i = 0; i < unique_cell_ids.size(); ++i) { |
| 2961 if (unique_cell_ids[i] == renderer_id()) { | 2961 if (unique_cell_ids[i] == GetId()) { |
| 2962 ia2_attributes_.push_back( | 2962 ia2_attributes_.push_back( |
| 2963 base::string16(L"table-cell-index:") + base::IntToString16(i)); | 2963 base::string16(L"table-cell-index:") + base::IntToString16(i)); |
| 2964 } | 2964 } |
| 2965 } | 2965 } |
| 2966 } | 2966 } |
| 2967 } | 2967 } |
| 2968 | 2968 |
| 2969 // The calculation of the accessible name of an element has been | 2969 // The calculation of the accessible name of an element has been |
| 2970 // standardized in the HTML to Platform Accessibility APIs Implementation | 2970 // standardized in the HTML to Platform Accessibility APIs Implementation |
| 2971 // Guide (http://www.w3.org/TR/html-aapi/). In order to return the | 2971 // Guide (http://www.w3.org/TR/html-aapi/). In order to return the |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3015 description = help; | 3015 description = help; |
| 3016 help.clear(); | 3016 help.clear(); |
| 3017 } | 3017 } |
| 3018 if (!description.empty() && name().empty() && !title_elem_id) { | 3018 if (!description.empty() && name().empty() && !title_elem_id) { |
| 3019 set_name(description); | 3019 set_name(description); |
| 3020 description.clear(); | 3020 description.clear(); |
| 3021 } | 3021 } |
| 3022 | 3022 |
| 3023 // If it's a text field, also consider the placeholder. | 3023 // If it's a text field, also consider the placeholder. |
| 3024 std::string placeholder; | 3024 std::string placeholder; |
| 3025 if (blink_role() == ui::AX_ROLE_TEXT_FIELD && | 3025 if (GetRole() == ui::AX_ROLE_TEXT_FIELD && |
| 3026 HasState(ui::AX_STATE_FOCUSABLE) && | 3026 HasState(ui::AX_STATE_FOCUSABLE) && |
| 3027 GetHtmlAttribute("placeholder", &placeholder)) { | 3027 GetHtmlAttribute("placeholder", &placeholder)) { |
| 3028 if (name().empty() && !title_elem_id) { | 3028 if (name().empty() && !title_elem_id) { |
| 3029 set_name(placeholder); | 3029 set_name(placeholder); |
| 3030 } else if (description.empty()) { | 3030 } else if (description.empty()) { |
| 3031 description = placeholder; | 3031 description = placeholder; |
| 3032 } | 3032 } |
| 3033 } | 3033 } |
| 3034 | 3034 |
| 3035 SetStringAttribute(ui::AX_ATTR_DESCRIPTION, description); | 3035 SetStringAttribute(ui::AX_ATTR_DESCRIPTION, description); |
| 3036 SetStringAttribute(ui::AX_ATTR_HELP, help); | 3036 SetStringAttribute(ui::AX_ATTR_HELP, help); |
| 3037 | 3037 |
| 3038 // On Windows, the value of a document should be its url. | 3038 // On Windows, the value of a document should be its url. |
| 3039 if (blink_role() == ui::AX_ROLE_ROOT_WEB_AREA || | 3039 if (GetRole() == ui::AX_ROLE_ROOT_WEB_AREA || |
| 3040 blink_role() == ui::AX_ROLE_WEB_AREA) { | 3040 GetRole() == ui::AX_ROLE_WEB_AREA) { |
| 3041 set_value(GetStringAttribute(ui::AX_ATTR_DOC_URL)); | 3041 set_value(GetStringAttribute(ui::AX_ATTR_DOC_URL)); |
| 3042 } | 3042 } |
| 3043 | 3043 |
| 3044 // For certain roles (listbox option, static text, and list marker) | 3044 // For certain roles (listbox option, static text, and list marker) |
| 3045 // WebKit stores the main accessible text in the "value" - swap it so | 3045 // WebKit stores the main accessible text in the "value" - swap it so |
| 3046 // that it's the "name". | 3046 // that it's the "name". |
| 3047 if (name().empty() && | 3047 if (name().empty() && |
| 3048 (blink_role() == ui::AX_ROLE_LIST_BOX_OPTION || | 3048 (GetRole() == ui::AX_ROLE_LIST_BOX_OPTION || |
| 3049 blink_role() == ui::AX_ROLE_STATIC_TEXT || | 3049 GetRole() == ui::AX_ROLE_STATIC_TEXT || |
| 3050 blink_role() == ui::AX_ROLE_LIST_MARKER)) { | 3050 GetRole() == ui::AX_ROLE_LIST_MARKER)) { |
| 3051 std::string tmp = value(); | 3051 std::string tmp = value(); |
| 3052 set_value(name()); | 3052 set_value(name()); |
| 3053 set_name(tmp); | 3053 set_name(tmp); |
| 3054 } | 3054 } |
| 3055 | 3055 |
| 3056 // If this doesn't have a value and is linked then set its value to the url | 3056 // If this doesn't have a value and is linked then set its value to the url |
| 3057 // attribute. This allows screen readers to read an empty link's destination. | 3057 // attribute. This allows screen readers to read an empty link's destination. |
| 3058 if (value().empty() && (ia_state_ & STATE_SYSTEM_LINKED)) | 3058 if (value().empty() && (ia_state_ & STATE_SYSTEM_LINKED)) |
| 3059 set_value(GetStringAttribute(ui::AX_ATTR_URL)); | 3059 set_value(GetStringAttribute(ui::AX_ATTR_URL)); |
| 3060 | 3060 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 3079 | 3079 |
| 3080 void BrowserAccessibilityWin::PostInitialize() { | 3080 void BrowserAccessibilityWin::PostInitialize() { |
| 3081 BrowserAccessibility::PostInitialize(); | 3081 BrowserAccessibility::PostInitialize(); |
| 3082 | 3082 |
| 3083 // Construct the hypertext for this node. | 3083 // Construct the hypertext for this node. |
| 3084 hyperlink_offset_to_index_.clear(); | 3084 hyperlink_offset_to_index_.clear(); |
| 3085 hyperlinks_.clear(); | 3085 hyperlinks_.clear(); |
| 3086 hypertext_.clear(); | 3086 hypertext_.clear(); |
| 3087 for (unsigned int i = 0; i < PlatformChildCount(); ++i) { | 3087 for (unsigned int i = 0; i < PlatformChildCount(); ++i) { |
| 3088 BrowserAccessibility* child = PlatformGetChild(i); | 3088 BrowserAccessibility* child = PlatformGetChild(i); |
| 3089 if (child->role() == ui::AX_ROLE_STATIC_TEXT) { | 3089 if (child->GetRole() == ui::AX_ROLE_STATIC_TEXT) { |
| 3090 hypertext_ += base::UTF8ToUTF16(child->name()); | 3090 hypertext_ += base::UTF8ToUTF16(child->name()); |
| 3091 } else { | 3091 } else { |
| 3092 hyperlink_offset_to_index_[hypertext_.size()] = hyperlinks_.size(); | 3092 hyperlink_offset_to_index_[hypertext_.size()] = hyperlinks_.size(); |
| 3093 hypertext_ += kEmbeddedCharacter; | 3093 hypertext_ += kEmbeddedCharacter; |
| 3094 hyperlinks_.push_back(i); | 3094 hyperlinks_.push_back(i); |
| 3095 } | 3095 } |
| 3096 } | 3096 } |
| 3097 DCHECK_EQ(hyperlink_offset_to_index_.size(), hyperlinks_.size()); | 3097 DCHECK_EQ(hyperlink_offset_to_index_.size(), hyperlinks_.size()); |
| 3098 | 3098 |
| 3099 // Fire an event when an alert first appears. | 3099 // Fire an event when an alert first appears. |
| 3100 if (blink_role() == ui::AX_ROLE_ALERT && first_time_) | 3100 if (GetRole() == ui::AX_ROLE_ALERT && first_time_) |
| 3101 manager()->NotifyAccessibilityEvent(ui::AX_EVENT_ALERT, this); | 3101 manager()->NotifyAccessibilityEvent(ui::AX_EVENT_ALERT, this); |
| 3102 | 3102 |
| 3103 // Fire events if text has changed. | 3103 // Fire events if text has changed. |
| 3104 base::string16 text = TextForIAccessibleText(); | 3104 base::string16 text = TextForIAccessibleText(); |
| 3105 if (previous_text_ != text) { | 3105 if (previous_text_ != text) { |
| 3106 if (!previous_text_.empty() && !text.empty()) { | 3106 if (!previous_text_.empty() && !text.empty()) { |
| 3107 manager()->NotifyAccessibilityEvent( | 3107 manager()->NotifyAccessibilityEvent( |
| 3108 ui::AX_EVENT_SHOW, this); | 3108 ui::AX_EVENT_SHOW, this); |
| 3109 } | 3109 } |
| 3110 | 3110 |
| 3111 // TODO(dmazzoni): Look into HIDE events, too. | 3111 // TODO(dmazzoni): Look into HIDE events, too. |
| 3112 | 3112 |
| 3113 old_text_ = previous_text_; | 3113 old_text_ = previous_text_; |
| 3114 previous_text_ = text; | 3114 previous_text_ = text; |
| 3115 } | 3115 } |
| 3116 | 3116 |
| 3117 BrowserAccessibilityManagerWin* manager = | 3117 BrowserAccessibilityManagerWin* manager = |
| 3118 this->manager()->ToBrowserAccessibilityManagerWin(); | 3118 this->manager()->ToBrowserAccessibilityManagerWin(); |
| 3119 | 3119 |
| 3120 // Fire events if the state has changed. | 3120 // Fire events if the state has changed. |
| 3121 if (!first_time_ && ia_state_ != old_ia_state_) { | 3121 if (!first_time_ && ia_state_ != old_ia_state_) { |
| 3122 // Normally focus events are handled elsewhere, however | 3122 // Normally focus events are handled elsewhere, however |
| 3123 // focus for managed descendants is platform-specific. | 3123 // focus for managed descendants is platform-specific. |
| 3124 // Fire a focus event if the focused descendant in a multi-select | 3124 // Fire a focus event if the focused descendant in a multi-select |
| 3125 // list box changes. | 3125 // list box changes. |
| 3126 if (blink_role() == ui::AX_ROLE_LIST_BOX_OPTION && | 3126 if (GetRole() == ui::AX_ROLE_LIST_BOX_OPTION && |
| 3127 (ia_state_ & STATE_SYSTEM_FOCUSABLE) && | 3127 (ia_state_ & STATE_SYSTEM_FOCUSABLE) && |
| 3128 (ia_state_ & STATE_SYSTEM_SELECTABLE) && | 3128 (ia_state_ & STATE_SYSTEM_SELECTABLE) && |
| 3129 (ia_state_ & STATE_SYSTEM_FOCUSED) && | 3129 (ia_state_ & STATE_SYSTEM_FOCUSED) && |
| 3130 !(old_ia_state_ & STATE_SYSTEM_FOCUSED)) { | 3130 !(old_ia_state_ & STATE_SYSTEM_FOCUSED)) { |
| 3131 manager->MaybeCallNotifyWinEvent(EVENT_OBJECT_FOCUS, unique_id_win()); | 3131 manager->MaybeCallNotifyWinEvent(EVENT_OBJECT_FOCUS, unique_id_win()); |
| 3132 } | 3132 } |
| 3133 | 3133 |
| 3134 if ((ia_state_ & STATE_SYSTEM_SELECTED) && | 3134 if ((ia_state_ & STATE_SYSTEM_SELECTED) && |
| 3135 !(old_ia_state_ & STATE_SYSTEM_SELECTED)) { | 3135 !(old_ia_state_ & STATE_SYSTEM_SELECTED)) { |
| 3136 manager->MaybeCallNotifyWinEvent(EVENT_OBJECT_SELECTIONADD, | 3136 manager->MaybeCallNotifyWinEvent(EVENT_OBJECT_SELECTIONADD, |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3252 if (value.empty() && | 3252 if (value.empty() && |
| 3253 GetFloatAttribute(ui::AX_ATTR_VALUE_FOR_RANGE, &fval)) { | 3253 GetFloatAttribute(ui::AX_ATTR_VALUE_FOR_RANGE, &fval)) { |
| 3254 value = base::UTF8ToUTF16(base::DoubleToString(fval)); | 3254 value = base::UTF8ToUTF16(base::DoubleToString(fval)); |
| 3255 } | 3255 } |
| 3256 return value; | 3256 return value; |
| 3257 } | 3257 } |
| 3258 | 3258 |
| 3259 base::string16 BrowserAccessibilityWin::TextForIAccessibleText() { | 3259 base::string16 BrowserAccessibilityWin::TextForIAccessibleText() { |
| 3260 if (IsEditableText()) | 3260 if (IsEditableText()) |
| 3261 return base::UTF8ToUTF16(value()); | 3261 return base::UTF8ToUTF16(value()); |
| 3262 return (blink_role() == ui::AX_ROLE_STATIC_TEXT) ? | 3262 return (GetRole() == ui::AX_ROLE_STATIC_TEXT) ? |
| 3263 base::UTF8ToUTF16(name()) : hypertext_; | 3263 base::UTF8ToUTF16(name()) : hypertext_; |
| 3264 } | 3264 } |
| 3265 | 3265 |
| 3266 void BrowserAccessibilityWin::HandleSpecialTextOffset( | 3266 void BrowserAccessibilityWin::HandleSpecialTextOffset( |
| 3267 const base::string16& text, | 3267 const base::string16& text, |
| 3268 LONG* offset) { | 3268 LONG* offset) { |
| 3269 if (*offset == IA2_TEXT_OFFSET_LENGTH) | 3269 if (*offset == IA2_TEXT_OFFSET_LENGTH) |
| 3270 *offset = static_cast<LONG>(text.size()); | 3270 *offset = static_cast<LONG>(text.size()); |
| 3271 else if (*offset == IA2_TEXT_OFFSET_CARET) | 3271 else if (*offset == IA2_TEXT_OFFSET_CARET) |
| 3272 get_caretOffset(offset); | 3272 get_caretOffset(offset); |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3372 if (GetBoolAttribute(ui::AX_ATTR_BUTTON_MIXED)) | 3372 if (GetBoolAttribute(ui::AX_ATTR_BUTTON_MIXED)) |
| 3373 ia_state_ |= STATE_SYSTEM_MIXED; | 3373 ia_state_ |= STATE_SYSTEM_MIXED; |
| 3374 | 3374 |
| 3375 if (GetBoolAttribute(ui::AX_ATTR_CAN_SET_VALUE)) | 3375 if (GetBoolAttribute(ui::AX_ATTR_CAN_SET_VALUE)) |
| 3376 ia2_state_ |= IA2_STATE_EDITABLE; | 3376 ia2_state_ |= IA2_STATE_EDITABLE; |
| 3377 | 3377 |
| 3378 base::string16 html_tag = GetString16Attribute( | 3378 base::string16 html_tag = GetString16Attribute( |
| 3379 ui::AX_ATTR_HTML_TAG); | 3379 ui::AX_ATTR_HTML_TAG); |
| 3380 ia_role_ = 0; | 3380 ia_role_ = 0; |
| 3381 ia2_role_ = 0; | 3381 ia2_role_ = 0; |
| 3382 switch (blink_role()) { | 3382 switch (GetRole()) { |
| 3383 case ui::AX_ROLE_ALERT: | 3383 case ui::AX_ROLE_ALERT: |
| 3384 ia_role_ = ROLE_SYSTEM_ALERT; | 3384 ia_role_ = ROLE_SYSTEM_ALERT; |
| 3385 break; | 3385 break; |
| 3386 case ui::AX_ROLE_ALERT_DIALOG: | 3386 case ui::AX_ROLE_ALERT_DIALOG: |
| 3387 ia_role_ = ROLE_SYSTEM_DIALOG; | 3387 ia_role_ = ROLE_SYSTEM_DIALOG; |
| 3388 break; | 3388 break; |
| 3389 case ui::AX_ROLE_APPLICATION: | 3389 case ui::AX_ROLE_APPLICATION: |
| 3390 ia_role_ = ROLE_SYSTEM_APPLICATION; | 3390 ia_role_ = ROLE_SYSTEM_APPLICATION; |
| 3391 break; | 3391 break; |
| 3392 case ui::AX_ROLE_ARTICLE: | 3392 case ui::AX_ROLE_ARTICLE: |
| (...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3787 // The role should always be set. | 3787 // The role should always be set. |
| 3788 DCHECK(!role_name_.empty() || ia_role_); | 3788 DCHECK(!role_name_.empty() || ia_role_); |
| 3789 | 3789 |
| 3790 // If we didn't explicitly set the IAccessible2 role, make it the same | 3790 // If we didn't explicitly set the IAccessible2 role, make it the same |
| 3791 // as the MSAA role. | 3791 // as the MSAA role. |
| 3792 if (!ia2_role_) | 3792 if (!ia2_role_) |
| 3793 ia2_role_ = ia_role_; | 3793 ia2_role_ = ia_role_; |
| 3794 } | 3794 } |
| 3795 | 3795 |
| 3796 } // namespace content | 3796 } // namespace content |
| OLD | NEW |