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

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

Issue 2671563002: MacViews: Implement NSAccessibilityPressAction for Views with clickable roles. (Closed)
Patch Set: Fix android. Created 3 years, 10 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
OLDNEW
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698