Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
|
Patti Lor
2017/02/09 23:11:23
All the changes in this file were required to make
dmazzoni
2017/02/09 23:21:09
Default case is fine for small switches. Thanks.
tapted
2017/02/09 23:25:05
what you've done here lg imo, but I don't know muc
Patti Lor
2017/02/10 00:05:58
Thanks both :)
| |
| 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_android.h" | 5 #include "content/browser/accessibility/browser_accessibility_android.h" |
| 6 | 6 |
| 7 #include "base/i18n/break_iterator.h" | 7 #include "base/i18n/break_iterator.h" |
| 8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
| 9 #include "base/strings/string_util.h" | 9 #include "base/strings/string_util.h" |
| 10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
| 11 #include "base/strings/utf_string_conversions.h" | 11 #include "base/strings/utf_string_conversions.h" |
| (...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 425 base::string16 value = GetValue(); | 425 base::string16 value = GetValue(); |
| 426 if (!value.empty()) { | 426 if (!value.empty()) { |
| 427 if (HasState(ui::AX_STATE_EDITABLE)) | 427 if (HasState(ui::AX_STATE_EDITABLE)) |
| 428 return value; | 428 return value; |
| 429 | 429 |
| 430 switch (GetRole()) { | 430 switch (GetRole()) { |
| 431 case ui::AX_ROLE_COMBO_BOX: | 431 case ui::AX_ROLE_COMBO_BOX: |
| 432 case ui::AX_ROLE_POP_UP_BUTTON: | 432 case ui::AX_ROLE_POP_UP_BUTTON: |
| 433 case ui::AX_ROLE_TEXT_FIELD: | 433 case ui::AX_ROLE_TEXT_FIELD: |
| 434 return value; | 434 return value; |
| 435 default: | |
| 436 break; | |
| 435 } | 437 } |
| 436 } | 438 } |
| 437 | 439 |
| 438 // For color wells, the color is stored in separate attributes. | 440 // For color wells, the color is stored in separate attributes. |
| 439 // Perhaps we could return color names in the future? | 441 // Perhaps we could return color names in the future? |
| 440 if (GetRole() == ui::AX_ROLE_COLOR_WELL) { | 442 if (GetRole() == ui::AX_ROLE_COLOR_WELL) { |
| 441 unsigned int color = | 443 unsigned int color = |
| 442 static_cast<unsigned int>(GetIntAttribute(ui::AX_ATTR_COLOR_VALUE)); | 444 static_cast<unsigned int>(GetIntAttribute(ui::AX_ATTR_COLOR_VALUE)); |
| 443 unsigned int red = SkColorGetR(color); | 445 unsigned int red = SkColorGetR(color); |
| 444 unsigned int green = SkColorGetG(color); | 446 unsigned int green = SkColorGetG(color); |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 527 break; | 529 break; |
| 528 case ui::AX_ROLE_ANNOTATION: | 530 case ui::AX_ROLE_ANNOTATION: |
| 529 // No role description. | 531 // No role description. |
| 530 break; | 532 break; |
| 531 case ui::AX_ROLE_APPLICATION: | 533 case ui::AX_ROLE_APPLICATION: |
| 532 message_id = IDS_AX_ROLE_APPLICATION; | 534 message_id = IDS_AX_ROLE_APPLICATION; |
| 533 break; | 535 break; |
| 534 case ui::AX_ROLE_ARTICLE: | 536 case ui::AX_ROLE_ARTICLE: |
| 535 message_id = IDS_AX_ROLE_ARTICLE; | 537 message_id = IDS_AX_ROLE_ARTICLE; |
| 536 break; | 538 break; |
| 539 case ui::AX_ROLE_AUDIO: | |
| 540 message_id = IDS_AX_MEDIA_AUDIO_ELEMENT; | |
| 541 break; | |
| 537 case ui::AX_ROLE_BANNER: | 542 case ui::AX_ROLE_BANNER: |
| 538 message_id = IDS_AX_ROLE_BANNER; | 543 message_id = IDS_AX_ROLE_BANNER; |
| 539 break; | 544 break; |
| 540 case ui::AX_ROLE_BLOCKQUOTE: | 545 case ui::AX_ROLE_BLOCKQUOTE: |
| 541 message_id = IDS_AX_ROLE_BLOCKQUOTE; | 546 message_id = IDS_AX_ROLE_BLOCKQUOTE; |
| 542 break; | 547 break; |
| 543 case ui::AX_ROLE_BUSY_INDICATOR: | 548 case ui::AX_ROLE_BUSY_INDICATOR: |
| 544 message_id = IDS_AX_ROLE_BUSY_INDICATOR; | 549 message_id = IDS_AX_ROLE_BUSY_INDICATOR; |
| 545 break; | 550 break; |
| 546 case ui::AX_ROLE_BUTTON: | 551 case ui::AX_ROLE_BUTTON: |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 617 break; | 622 break; |
| 618 case ui::AX_ROLE_DIV: | 623 case ui::AX_ROLE_DIV: |
| 619 // No role description. | 624 // No role description. |
| 620 break; | 625 break; |
| 621 case ui::AX_ROLE_DOCUMENT: | 626 case ui::AX_ROLE_DOCUMENT: |
| 622 message_id = IDS_AX_ROLE_DOCUMENT; | 627 message_id = IDS_AX_ROLE_DOCUMENT; |
| 623 break; | 628 break; |
| 624 case ui::AX_ROLE_EMBEDDED_OBJECT: | 629 case ui::AX_ROLE_EMBEDDED_OBJECT: |
| 625 message_id = IDS_AX_ROLE_EMBEDDED_OBJECT; | 630 message_id = IDS_AX_ROLE_EMBEDDED_OBJECT; |
| 626 break; | 631 break; |
| 632 case ui::AX_ROLE_FEED: | |
| 633 // No role description. | |
|
dmazzoni
2017/02/09 23:21:09
We should add this one, it's a relatively new addi
Patti Lor
2017/02/10 00:05:58
Done, also followed this up in https://codereview.
| |
| 634 break; | |
| 627 case ui::AX_ROLE_FIGCAPTION: | 635 case ui::AX_ROLE_FIGCAPTION: |
| 628 // No role description. | 636 // No role description. |
| 629 break; | 637 break; |
| 630 case ui::AX_ROLE_FIGURE: | 638 case ui::AX_ROLE_FIGURE: |
| 631 message_id = IDS_AX_ROLE_GRAPHIC; | 639 message_id = IDS_AX_ROLE_GRAPHIC; |
| 632 break; | 640 break; |
| 633 case ui::AX_ROLE_FOOTER: | 641 case ui::AX_ROLE_FOOTER: |
| 634 message_id = IDS_AX_ROLE_FOOTER; | 642 message_id = IDS_AX_ROLE_FOOTER; |
| 635 break; | 643 break; |
| 636 case ui::AX_ROLE_FORM: | 644 case ui::AX_ROLE_FORM: |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 709 break; | 717 break; |
| 710 case ui::AX_ROLE_MARK: | 718 case ui::AX_ROLE_MARK: |
| 711 message_id = IDS_AX_ROLE_MARK; | 719 message_id = IDS_AX_ROLE_MARK; |
| 712 break; | 720 break; |
| 713 case ui::AX_ROLE_MARQUEE: | 721 case ui::AX_ROLE_MARQUEE: |
| 714 message_id = IDS_AX_ROLE_MARQUEE; | 722 message_id = IDS_AX_ROLE_MARQUEE; |
| 715 break; | 723 break; |
| 716 case ui::AX_ROLE_MATH: | 724 case ui::AX_ROLE_MATH: |
| 717 message_id = IDS_AX_ROLE_MATH; | 725 message_id = IDS_AX_ROLE_MATH; |
| 718 break; | 726 break; |
| 727 case ui::AX_ROLE_MENU: | |
| 728 message_id = IDS_AX_ROLE_MENU; | |
| 729 break; | |
| 719 case ui::AX_ROLE_MENU_BAR: | 730 case ui::AX_ROLE_MENU_BAR: |
| 720 message_id = IDS_AX_ROLE_MENU_BAR; | 731 message_id = IDS_AX_ROLE_MENU_BAR; |
| 721 break; | 732 break; |
| 722 case ui::AX_ROLE_MENU_BUTTON: | 733 case ui::AX_ROLE_MENU_BUTTON: |
| 723 message_id = IDS_AX_ROLE_MENU_BUTTON; | 734 message_id = IDS_AX_ROLE_MENU_BUTTON; |
| 724 break; | 735 break; |
| 725 case ui::AX_ROLE_MENU_ITEM: | 736 case ui::AX_ROLE_MENU_ITEM: |
| 726 message_id = IDS_AX_ROLE_MENU_ITEM; | 737 message_id = IDS_AX_ROLE_MENU_ITEM; |
| 727 break; | 738 break; |
| 728 case ui::AX_ROLE_MENU_ITEM_CHECK_BOX: | 739 case ui::AX_ROLE_MENU_ITEM_CHECK_BOX: |
| 729 message_id = IDS_AX_ROLE_CHECK_BOX; | 740 message_id = IDS_AX_ROLE_CHECK_BOX; |
| 730 break; | 741 break; |
| 731 case ui::AX_ROLE_MENU_ITEM_RADIO: | 742 case ui::AX_ROLE_MENU_ITEM_RADIO: |
| 732 message_id = IDS_AX_ROLE_RADIO; | 743 message_id = IDS_AX_ROLE_RADIO; |
| 733 break; | 744 break; |
| 734 case ui::AX_ROLE_MENU_LIST_OPTION: | 745 case ui::AX_ROLE_MENU_LIST_OPTION: |
| 735 // No role description. | 746 // No role description. |
| 736 break; | 747 break; |
| 737 case ui::AX_ROLE_MENU_LIST_POPUP: | 748 case ui::AX_ROLE_MENU_LIST_POPUP: |
| 738 // No role description. | 749 // No role description. |
| 739 break; | 750 break; |
| 740 case ui::AX_ROLE_MENU: | |
| 741 message_id = IDS_AX_ROLE_MENU; | |
| 742 break; | |
| 743 case ui::AX_ROLE_METER: | 751 case ui::AX_ROLE_METER: |
| 744 message_id = IDS_AX_ROLE_METER; | 752 message_id = IDS_AX_ROLE_METER; |
| 745 break; | 753 break; |
| 746 case ui::AX_ROLE_NAVIGATION: | 754 case ui::AX_ROLE_NAVIGATION: |
| 747 message_id = IDS_AX_ROLE_NAVIGATIONAL_LINK; | 755 message_id = IDS_AX_ROLE_NAVIGATIONAL_LINK; |
| 748 break; | 756 break; |
| 749 case ui::AX_ROLE_NOTE: | 757 case ui::AX_ROLE_NOTE: |
| 750 message_id = IDS_AX_ROLE_NOTE; | 758 message_id = IDS_AX_ROLE_NOTE; |
| 751 break; | 759 break; |
| 752 case ui::AX_ROLE_OUTLINE: | 760 case ui::AX_ROLE_OUTLINE: |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 847 break; | 855 break; |
| 848 case ui::AX_ROLE_TAB: | 856 case ui::AX_ROLE_TAB: |
| 849 message_id = IDS_AX_ROLE_TAB; | 857 message_id = IDS_AX_ROLE_TAB; |
| 850 break; | 858 break; |
| 851 case ui::AX_ROLE_TABLE_HEADER_CONTAINER: | 859 case ui::AX_ROLE_TABLE_HEADER_CONTAINER: |
| 852 // No role description. | 860 // No role description. |
| 853 break; | 861 break; |
| 854 case ui::AX_ROLE_TABLE: | 862 case ui::AX_ROLE_TABLE: |
| 855 message_id = IDS_AX_ROLE_TABLE; | 863 message_id = IDS_AX_ROLE_TABLE; |
| 856 break; | 864 break; |
| 865 case ui::AX_ROLE_TERM: | |
| 866 message_id = IDS_AX_ROLE_DESCRIPTION_TERM; | |
| 867 break; | |
| 857 case ui::AX_ROLE_TEXT_FIELD: | 868 case ui::AX_ROLE_TEXT_FIELD: |
| 858 // No role description. | 869 // No role description. |
| 859 break; | 870 break; |
| 860 case ui::AX_ROLE_TIME: | 871 case ui::AX_ROLE_TIME: |
| 861 message_id = IDS_AX_ROLE_TIME; | 872 message_id = IDS_AX_ROLE_TIME; |
| 862 break; | 873 break; |
| 863 case ui::AX_ROLE_TIMER: | 874 case ui::AX_ROLE_TIMER: |
| 864 message_id = IDS_AX_ROLE_TIMER; | 875 message_id = IDS_AX_ROLE_TIMER; |
| 865 break; | 876 break; |
| 866 case ui::AX_ROLE_TITLE_BAR: | 877 case ui::AX_ROLE_TITLE_BAR: |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 880 break; | 891 break; |
| 881 case ui::AX_ROLE_TREE: | 892 case ui::AX_ROLE_TREE: |
| 882 message_id = IDS_AX_ROLE_TREE; | 893 message_id = IDS_AX_ROLE_TREE; |
| 883 break; | 894 break; |
| 884 case ui::AX_ROLE_UNKNOWN: | 895 case ui::AX_ROLE_UNKNOWN: |
| 885 // No role description. | 896 // No role description. |
| 886 break; | 897 break; |
| 887 case ui::AX_ROLE_TOOLTIP: | 898 case ui::AX_ROLE_TOOLTIP: |
| 888 message_id = IDS_AX_ROLE_TOOLTIP; | 899 message_id = IDS_AX_ROLE_TOOLTIP; |
| 889 break; | 900 break; |
| 901 case ui::AX_ROLE_VIDEO: | |
| 902 message_id = IDS_AX_MEDIA_VIDEO_ELEMENT; | |
| 903 break; | |
| 890 case ui::AX_ROLE_WEB_AREA: | 904 case ui::AX_ROLE_WEB_AREA: |
| 891 // No role description. | 905 // No role description. |
| 892 break; | 906 break; |
| 893 case ui::AX_ROLE_WEB_VIEW: | 907 case ui::AX_ROLE_WEB_VIEW: |
| 894 // No role description. | 908 // No role description. |
| 895 break; | 909 break; |
| 896 case ui::AX_ROLE_WINDOW: | 910 case ui::AX_ROLE_WINDOW: |
| 897 // No role description. | 911 // No role description. |
| 898 break; | 912 break; |
| 913 case ui::AX_ROLE_NONE: | |
| 914 // No role description. | |
| 915 break; | |
| 899 } | 916 } |
| 900 | 917 |
| 901 if (message_id != -1) | 918 if (message_id != -1) |
| 902 return content_client->GetLocalizedString(message_id); | 919 return content_client->GetLocalizedString(message_id); |
| 903 | 920 |
| 904 return base::string16(); | 921 return base::string16(); |
| 905 } | 922 } |
| 906 | 923 |
| 907 int BrowserAccessibilityAndroid::GetItemIndex() const { | 924 int BrowserAccessibilityAndroid::GetItemIndex() const { |
| 908 int index = 0; | 925 int index = 0; |
| 909 switch (GetRole()) { | 926 switch (GetRole()) { |
| 910 case ui::AX_ROLE_LIST_ITEM: | 927 case ui::AX_ROLE_LIST_ITEM: |
| 911 case ui::AX_ROLE_LIST_BOX_OPTION: | 928 case ui::AX_ROLE_LIST_BOX_OPTION: |
| 912 case ui::AX_ROLE_TREE_ITEM: | 929 case ui::AX_ROLE_TREE_ITEM: |
| 913 index = GetIntAttribute(ui::AX_ATTR_POS_IN_SET) - 1; | 930 index = GetIntAttribute(ui::AX_ATTR_POS_IN_SET) - 1; |
| 914 break; | 931 break; |
| 915 case ui::AX_ROLE_SLIDER: | 932 case ui::AX_ROLE_SLIDER: |
| 916 case ui::AX_ROLE_PROGRESS_INDICATOR: { | 933 case ui::AX_ROLE_PROGRESS_INDICATOR: { |
| 917 // Return a percentage here for live feedback in an AccessibilityEvent. | 934 // Return a percentage here for live feedback in an AccessibilityEvent. |
| 918 // The exact value is returned in RangeCurrentValue. | 935 // The exact value is returned in RangeCurrentValue. |
| 919 float min = GetFloatAttribute(ui::AX_ATTR_MIN_VALUE_FOR_RANGE); | 936 float min = GetFloatAttribute(ui::AX_ATTR_MIN_VALUE_FOR_RANGE); |
| 920 float max = GetFloatAttribute(ui::AX_ATTR_MAX_VALUE_FOR_RANGE); | 937 float max = GetFloatAttribute(ui::AX_ATTR_MAX_VALUE_FOR_RANGE); |
| 921 float value = GetFloatAttribute(ui::AX_ATTR_VALUE_FOR_RANGE); | 938 float value = GetFloatAttribute(ui::AX_ATTR_VALUE_FOR_RANGE); |
| 922 if (max > min && value >= min && value <= max) | 939 if (max > min && value >= min && value <= max) |
| 923 index = static_cast<int>(((value - min)) * 100 / (max - min)); | 940 index = static_cast<int>(((value - min)) * 100 / (max - min)); |
| 924 break; | 941 break; |
| 925 } | 942 } |
| 943 default: | |
| 944 break; | |
| 926 } | 945 } |
| 927 return index; | 946 return index; |
| 928 } | 947 } |
| 929 | 948 |
| 930 int BrowserAccessibilityAndroid::GetItemCount() const { | 949 int BrowserAccessibilityAndroid::GetItemCount() const { |
| 931 int count = 0; | 950 int count = 0; |
| 932 switch (GetRole()) { | 951 switch (GetRole()) { |
| 933 case ui::AX_ROLE_LIST: | 952 case ui::AX_ROLE_LIST: |
| 934 case ui::AX_ROLE_LIST_BOX: | 953 case ui::AX_ROLE_LIST_BOX: |
| 935 case ui::AX_ROLE_DESCRIPTION_LIST: | 954 case ui::AX_ROLE_DESCRIPTION_LIST: |
| 936 count = PlatformChildCount(); | 955 count = PlatformChildCount(); |
| 937 break; | 956 break; |
| 938 case ui::AX_ROLE_SLIDER: | 957 case ui::AX_ROLE_SLIDER: |
| 939 case ui::AX_ROLE_PROGRESS_INDICATOR: | 958 case ui::AX_ROLE_PROGRESS_INDICATOR: |
| 940 // An AccessibilityEvent can only return integer information about a | 959 // An AccessibilityEvent can only return integer information about a |
| 941 // seek control, so we return a percentage. The real range is returned | 960 // seek control, so we return a percentage. The real range is returned |
| 942 // in RangeMin and RangeMax. | 961 // in RangeMin and RangeMax. |
| 943 count = 100; | 962 count = 100; |
| 944 break; | 963 break; |
| 964 default: | |
| 965 break; | |
| 945 } | 966 } |
| 946 return count; | 967 return count; |
| 947 } | 968 } |
| 948 | 969 |
| 949 bool BrowserAccessibilityAndroid::CanScrollForward() const { | 970 bool BrowserAccessibilityAndroid::CanScrollForward() const { |
| 950 if (IsSlider()) { | 971 if (IsSlider()) { |
| 951 float value = GetFloatAttribute(ui::AX_ATTR_VALUE_FOR_RANGE); | 972 float value = GetFloatAttribute(ui::AX_ATTR_VALUE_FOR_RANGE); |
| 952 float max = GetFloatAttribute(ui::AX_ATTR_MAX_VALUE_FOR_RANGE); | 973 float max = GetFloatAttribute(ui::AX_ATTR_MAX_VALUE_FOR_RANGE); |
| 953 return value < max; | 974 return value < max; |
| 954 } else { | 975 } else { |
| (...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1477 int BrowserAccessibilityAndroid::CountChildrenWithRole(ui::AXRole role) const { | 1498 int BrowserAccessibilityAndroid::CountChildrenWithRole(ui::AXRole role) const { |
| 1478 int count = 0; | 1499 int count = 0; |
| 1479 for (uint32_t i = 0; i < PlatformChildCount(); i++) { | 1500 for (uint32_t i = 0; i < PlatformChildCount(); i++) { |
| 1480 if (PlatformGetChild(i)->GetRole() == role) | 1501 if (PlatformGetChild(i)->GetRole() == role) |
| 1481 count++; | 1502 count++; |
| 1482 } | 1503 } |
| 1483 return count; | 1504 return count; |
| 1484 } | 1505 } |
| 1485 | 1506 |
| 1486 } // namespace content | 1507 } // namespace content |
| OLD | NEW |