diff options
18 files changed, 100 insertions, 11 deletions
diff --git a/chrome/common/extensions/api/automation.idl b/chrome/common/extensions/api/automation.idl index 3044514..b06091a 100644 --- a/chrome/common/extensions/api/automation.idl +++ b/chrome/common/extensions/api/automation.idl @@ -146,6 +146,7 @@ scrollBar, seamlessWebArea, search, + searchBox, slider, sliderThumb, spinButtonPart, @@ -153,6 +154,7 @@ splitter, staticText, status, + switch, tabGroup, tabList, tabPanel, diff --git a/content/app/strings/content_strings.grd b/content/app/strings/content_strings.grd index 24deef1..e853a97 100644 --- a/content/app/strings/content_strings.grd +++ b/content/app/strings/content_strings.grd @@ -403,6 +403,12 @@ below: <message name="IDS_AX_ROLE_STATUS" desc="accessibility role description for status"> status </message> + <message name="IDS_AX_ROLE_SEARCH_BOX" desc="accessibility role description for search text field"> + search text field + </message> + <message name="IDS_AX_ROLE_SWITCH" desc="accessibility role description for switch"> + switch + </message> <message name="IDS_AX_BUTTON_ACTION_VERB" desc="Verb stating the action that will occur when a button is pressed, as used by accessibility."> press diff --git a/content/browser/accessibility/browser_accessibility_android.cc b/content/browser/accessibility/browser_accessibility_android.cc index 2d3f513..3cd374e 100644 --- a/content/browser/accessibility/browser_accessibility_android.cc +++ b/content/browser/accessibility/browser_accessibility_android.cc @@ -255,6 +255,7 @@ const char* BrowserAccessibilityAndroid::GetClassName() const { const char* class_name = NULL; switch (GetRole()) { + case ui::AX_ROLE_SEARCH_BOX: case ui::AX_ROLE_SPIN_BUTTON: case ui::AX_ROLE_TEXT_AREA: case ui::AX_ROLE_TEXT_FIELD: @@ -275,6 +276,7 @@ const char* BrowserAccessibilityAndroid::GetClassName() const { class_name = "android.widget.Button"; break; case ui::AX_ROLE_CHECK_BOX: + case ui::AX_ROLE_SWITCH: class_name = "android.widget.CheckBox"; break; case ui::AX_ROLE_RADIO_BUTTON: diff --git a/content/browser/accessibility/browser_accessibility_cocoa.mm b/content/browser/accessibility/browser_accessibility_cocoa.mm index 83f7512..9781913 100644 --- a/content/browser/accessibility/browser_accessibility_cocoa.mm +++ b/content/browser/accessibility/browser_accessibility_cocoa.mm @@ -679,6 +679,12 @@ NSDictionary* attributeToMethodNameMap = nil; case ui::AX_ROLE_STATUS: return base::SysUTF16ToNSString(content_client->GetLocalizedString( IDS_AX_ROLE_STATUS)); + case ui::AX_ROLE_SEARCH_BOX: + return base::SysUTF16ToNSString(content_client->GetLocalizedString( + IDS_AX_ROLE_SEARCH_BOX)); + case ui::AX_ROLE_SWITCH: + return base::SysUTF16ToNSString(content_client->GetLocalizedString( + IDS_AX_ROLE_SWITCH)); case ui::AX_ROLE_TOGGLE_BUTTON: return base::SysUTF16ToNSString(content_client->GetLocalizedString( IDS_AX_ROLE_TOGGLE_BUTTON)); diff --git a/content/browser/accessibility/browser_accessibility_win.cc b/content/browser/accessibility/browser_accessibility_win.cc index 228fb63..5c318b2 100644 --- a/content/browser/accessibility/browser_accessibility_win.cc +++ b/content/browser/accessibility/browser_accessibility_win.cc @@ -3861,10 +3861,6 @@ void BrowserAccessibilityWin::InitRoleAndState() { ia_role = ROLE_SYSTEM_TEXT; ia2_role = IA2_ROLE_LABEL; break; - case ui::AX_ROLE_SEARCH: - ia_role = ROLE_SYSTEM_GROUPING; - ia2_role = IA2_ROLE_SECTION; - break; case ui::AX_ROLE_LINK: ia_role = ROLE_SYSTEM_LINK; ia_state |= STATE_SYSTEM_LINKED; @@ -4002,6 +3998,10 @@ void BrowserAccessibilityWin::InitRoleAndState() { case ui::AX_ROLE_SCROLL_BAR: ia_role = ROLE_SYSTEM_SCROLLBAR; break; + case ui::AX_ROLE_SEARCH: + ia_role = ROLE_SYSTEM_GROUPING; + ia2_role = IA2_ROLE_SECTION; + break; case ui::AX_ROLE_SLIDER: ia_role = ROLE_SYSTEM_SLIDER; break; @@ -4025,6 +4025,10 @@ void BrowserAccessibilityWin::InitRoleAndState() { case ui::AX_ROLE_SVG_ROOT: ia_role = ROLE_SYSTEM_GRAPHIC; break; + case ui::AX_ROLE_SWITCH: + role_name = L"switch"; + ia2_role = IA2_ROLE_TOGGLE_BUTTON; + break; case ui::AX_ROLE_TAB: ia_role = ROLE_SYSTEM_PAGETAB; break; @@ -4060,6 +4064,7 @@ void BrowserAccessibilityWin::InitRoleAndState() { ia2_state |= IA2_STATE_SELECTABLE_TEXT; break; case ui::AX_ROLE_TEXT_FIELD: + case ui::AX_ROLE_SEARCH_BOX: ia_role = ROLE_SYSTEM_TEXT; ia2_state |= IA2_STATE_SINGLE_LINE; ia2_state |= IA2_STATE_EDITABLE; diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc index 8c91f48..a786812 100644 --- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc +++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc @@ -473,6 +473,10 @@ IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAriaSearch) { RunAriaTest(FILE_PATH_LITERAL("aria-search.html")); } +IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAriaSearchBox) { + RunAriaTest(FILE_PATH_LITERAL("aria-searchbox.html")); +} + IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAriaSelected) { RunAriaTest(FILE_PATH_LITERAL("aria-selected.html")); } @@ -504,6 +508,10 @@ IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAriaStatus) { RunAriaTest(FILE_PATH_LITERAL("aria-status.html")); } +IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAriaSwitch) { + RunAriaTest(FILE_PATH_LITERAL("aria-switch.html")); +} + IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAriaTab) { RunAriaTest(FILE_PATH_LITERAL("aria-tab.html")); } diff --git a/content/renderer/accessibility/blink_ax_enum_conversion.cc b/content/renderer/accessibility/blink_ax_enum_conversion.cc index 9fe5b24..3220aad 100644 --- a/content/renderer/accessibility/blink_ax_enum_conversion.cc +++ b/content/renderer/accessibility/blink_ax_enum_conversion.cc @@ -264,6 +264,8 @@ ui::AXRole AXRoleFromBlink(blink::WebAXRole role) { return ui::AX_ROLE_SEAMLESS_WEB_AREA; case blink::WebAXRoleSearch: return ui::AX_ROLE_SEARCH; + case blink::WebAXRoleSearchBox: + return ui::AX_ROLE_SEARCH_BOX; case blink::WebAXRoleSlider: return ui::AX_ROLE_SLIDER; case blink::WebAXRoleSliderThumb: @@ -278,6 +280,8 @@ ui::AXRole AXRoleFromBlink(blink::WebAXRole role) { return ui::AX_ROLE_STATIC_TEXT; case blink::WebAXRoleStatus: return ui::AX_ROLE_STATUS; + case blink::WebAXRoleSwitch: + return ui::AX_ROLE_SWITCH; case blink::WebAXRoleTab: return ui::AX_ROLE_TAB; case blink::WebAXRoleTabGroup: diff --git a/content/shell/renderer/test_runner/web_ax_object_proxy.cc b/content/shell/renderer/test_runner/web_ax_object_proxy.cc index 4d886c6..b38dbb8 100644 --- a/content/shell/renderer/test_runner/web_ax_object_proxy.cc +++ b/content/shell/renderer/test_runner/web_ax_object_proxy.cc @@ -194,6 +194,8 @@ std::string RoleToString(blink::WebAXRole role) return result.append("SeamlessWebArea"); case blink::WebAXRoleSearch: return result.append("Search"); + case blink::WebAXRoleSearchBox: + return result.append("SearchBox"); case blink::WebAXRoleSlider: return result.append("Slider"); case blink::WebAXRoleSliderThumb: @@ -208,6 +210,8 @@ std::string RoleToString(blink::WebAXRole role) return result.append("StaticText"); case blink::WebAXRoleStatus: return result.append("Status"); + case blink::WebAXRoleSwitch: + return result.append("Switch"); case blink::WebAXRoleTabGroup: return result.append("TabGroup"); case blink::WebAXRoleTabList: diff --git a/content/test/data/accessibility/aria/aria-searchbox-expected-android.txt b/content/test/data/accessibility/aria/aria-searchbox-expected-android.txt new file mode 100644 index 0000000..a997a36 --- /dev/null +++ b/content/test/data/accessibility/aria/aria-searchbox-expected-android.txt @@ -0,0 +1,2 @@ +android.webkit.WebView focusable focused scrollable +++android.widget.EditText clickable name='ARIA role searchbox.' diff --git a/content/test/data/accessibility/aria/aria-searchbox-expected-mac.txt b/content/test/data/accessibility/aria/aria-searchbox-expected-mac.txt new file mode 100644 index 0000000..ad6b005 --- /dev/null +++ b/content/test/data/accessibility/aria/aria-searchbox-expected-mac.txt @@ -0,0 +1,3 @@ +AXWebArea AXRoleDescription='HTML content' +++AXTextField AXSubrole=AXSearchField AXRoleDescription='search text field' AXValue='ARIA role searchbox.' +++++AXStaticText AXRoleDescription='text' AXValue='ARIA role searchbox.' diff --git a/content/test/data/accessibility/aria/aria-searchbox-expected-win.txt b/content/test/data/accessibility/aria/aria-searchbox-expected-win.txt new file mode 100644 index 0000000..5486ad9 --- /dev/null +++ b/content/test/data/accessibility/aria/aria-searchbox-expected-win.txt @@ -0,0 +1,3 @@ +ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE +++ROLE_SYSTEM_TEXT xml-roles:searchbox +++++ROLE_SYSTEM_STATICTEXT name='ARIA role searchbox.' diff --git a/content/test/data/accessibility/aria/aria-searchbox.html b/content/test/data/accessibility/aria/aria-searchbox.html new file mode 100644 index 0000000..41a395a --- /dev/null +++ b/content/test/data/accessibility/aria/aria-searchbox.html @@ -0,0 +1,11 @@ +<!-- +@MAC-ALLOW:AXRole* +@MAC-ALLOW:AXSubrole* +@WIN-ALLOW:xml-roles* +--> +<!DOCTYPE html> +<html> +<body> + <div role="searchbox">ARIA role searchbox.</div> +</body> +</html> diff --git a/content/test/data/accessibility/aria/aria-switch-expected-android.txt b/content/test/data/accessibility/aria/aria-switch-expected-android.txt new file mode 100644 index 0000000..c748c31 --- /dev/null +++ b/content/test/data/accessibility/aria/aria-switch-expected-android.txt @@ -0,0 +1,4 @@ +android.webkit.WebView focusable focused scrollable +++android.widget.CheckBox +++android.widget.CheckBox checkable checked +++android.widget.CheckBox diff --git a/content/test/data/accessibility/aria/aria-switch-expected-mac.txt b/content/test/data/accessibility/aria/aria-switch-expected-mac.txt new file mode 100644 index 0000000..87230d7 --- /dev/null +++ b/content/test/data/accessibility/aria/aria-switch-expected-mac.txt @@ -0,0 +1,4 @@ +AXWebArea AXRoleDescription='HTML content' +++AXCheckBox AXSubrole=AXSwitch AXRoleDescription='switch' AXValue='0' +++AXCheckBox AXSubrole=AXSwitch AXRoleDescription='switch' AXValue='1' +++AXCheckBox AXSubrole=AXSwitch AXRoleDescription='switch' AXValue='0' diff --git a/content/test/data/accessibility/aria/aria-switch-expected-win.txt b/content/test/data/accessibility/aria/aria-switch-expected-win.txt new file mode 100644 index 0000000..79e88a6 --- /dev/null +++ b/content/test/data/accessibility/aria/aria-switch-expected-win.txt @@ -0,0 +1,4 @@ +ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE +++IA2_ROLE_TOGGLE_BUTTON xml-roles:switch checkable:true +++IA2_ROLE_TOGGLE_BUTTON CHECKED xml-roles:switch checkable:true +++IA2_ROLE_TOGGLE_BUTTON xml-roles:switch checkable:true diff --git a/content/test/data/accessibility/aria/aria-switch.html b/content/test/data/accessibility/aria/aria-switch.html new file mode 100644 index 0000000..064c87f --- /dev/null +++ b/content/test/data/accessibility/aria/aria-switch.html @@ -0,0 +1,15 @@ +<!-- +@MAC-ALLOW:AXRole* +@MAC-ALLOW:AXSubrole* +@WIN-ALLOW:xml-roles* +@WIN-ALLOW:checkable:* +@WIN-ALLOW:CHECKED* +--> +<!DOCTYPE html> +<html> +<body> + <div role="switch"></div> + <div role="switch" aria-checked="true"></div> + <div role="switch" aria-checked="mixed"></div> +</body> +</html> diff --git a/ui/accessibility/ax_enums.idl b/ui/accessibility/ax_enums.idl index 7bcfe71..0a2d145 100644 --- a/ui/accessibility/ax_enums.idl +++ b/ui/accessibility/ax_enums.idl @@ -157,6 +157,7 @@ scroll_bar, seamless_web_area, search, + search_box, slider, slider_thumb, spin_button_part, @@ -164,6 +165,7 @@ splitter, static_text, status, + switch, tab_group, tab_list, tab_panel, diff --git a/ui/accessibility/platform/ax_platform_node_mac.mm b/ui/accessibility/platform/ax_platform_node_mac.mm index 1f65af6..78883fe 100644 --- a/ui/accessibility/platform/ax_platform_node_mac.mm +++ b/ui/accessibility/platform/ax_platform_node_mac.mm @@ -105,6 +105,7 @@ RoleMap BuildRoleMap() { {ui::AX_ROLE_RULER, NSAccessibilityRulerRole}, {ui::AX_ROLE_SCROLL_BAR, NSAccessibilityScrollBarRole}, {ui::AX_ROLE_SEARCH, NSAccessibilityGroupRole}, + {ui::AX_ROLE_SEARCH_BOX, NSAccessibilityTextFieldRole}, {ui::AX_ROLE_SLIDER, NSAccessibilitySliderRole}, {ui::AX_ROLE_SLIDER_THUMB, NSAccessibilityValueIndicatorRole}, {ui::AX_ROLE_SPIN_BUTTON, NSAccessibilityIncrementorRole}, @@ -112,6 +113,7 @@ RoleMap BuildRoleMap() { {ui::AX_ROLE_STATIC_TEXT, NSAccessibilityStaticTextRole}, {ui::AX_ROLE_STATUS, NSAccessibilityGroupRole}, {ui::AX_ROLE_SVG_ROOT, NSAccessibilityGroupRole}, + {ui::AX_ROLE_SWITCH, NSAccessibilityCheckBoxRole}, {ui::AX_ROLE_TAB, NSAccessibilityRadioButtonRole}, {ui::AX_ROLE_TABLE, NSAccessibilityTableRole}, {ui::AX_ROLE_TABLE_HEADER_CONTAINER, NSAccessibilityGroupRole}, @@ -145,27 +147,29 @@ RoleMap BuildSubroleMap() { const MapEntry subroles[] = { {ui::AX_ROLE_ALERT, @"AXApplicationAlert"}, {ui::AX_ROLE_ALERT_DIALOG, @"AXApplicationAlertDialog"}, + {ui::AX_ROLE_APPLICATION, @"AXLandmarkApplication"}, {ui::AX_ROLE_ARTICLE, @"AXDocumentArticle"}, + {ui::AX_ROLE_BANNER, @"AXLandmarkBanner"}, + {ui::AX_ROLE_COMPLEMENTARY, @"AXLandmarkComplementary"}, + {ui::AX_ROLE_CONTENT_INFO, @"AXLandmarkContentInfo"}, {ui::AX_ROLE_DEFINITION, @"AXDefinition"}, {ui::AX_ROLE_DESCRIPTION_LIST_DETAIL, @"AXDefinition"}, {ui::AX_ROLE_DESCRIPTION_LIST_TERM, @"AXTerm"}, {ui::AX_ROLE_DIALOG, @"AXApplicationDialog"}, {ui::AX_ROLE_DOCUMENT, @"AXDocument"}, {ui::AX_ROLE_FOOTER, @"AXLandmarkContentInfo"}, - {ui::AX_ROLE_APPLICATION, @"AXLandmarkApplication"}, - {ui::AX_ROLE_BANNER, @"AXLandmarkBanner"}, - {ui::AX_ROLE_COMPLEMENTARY, @"AXLandmarkComplementary"}, - {ui::AX_ROLE_CONTENT_INFO, @"AXLandmarkContentInfo"}, - {ui::AX_ROLE_MAIN, @"AXLandmarkMain"}, - {ui::AX_ROLE_NAVIGATION, @"AXLandmarkNavigation"}, - {ui::AX_ROLE_SEARCH, @"AXLandmarkSearch"}, {ui::AX_ROLE_FORM, @"AXLandmarkForm"}, {ui::AX_ROLE_LOG, @"AXApplicationLog"}, + {ui::AX_ROLE_MAIN, @"AXLandmarkMain"}, {ui::AX_ROLE_MARQUEE, @"AXApplicationMarquee"}, {ui::AX_ROLE_MATH, @"AXDocumentMath"}, + {ui::AX_ROLE_NAVIGATION, @"AXLandmarkNavigation"}, {ui::AX_ROLE_NOTE, @"AXDocumentNote"}, {ui::AX_ROLE_REGION, @"AXDocumentRegion"}, + {ui::AX_ROLE_SEARCH, @"AXLandmarkSearch"}, + {ui::AX_ROLE_SEARCH_BOX, @"AXSearchField"}, {ui::AX_ROLE_STATUS, @"AXApplicationStatus"}, + {ui::AX_ROLE_SWITCH, @"AXSwitch"}, {ui::AX_ROLE_TAB_PANEL, @"AXTabPanel"}, {ui::AX_ROLE_TIMER, @"AXApplicationTimer"}, {ui::AX_ROLE_TOGGLE_BUTTON, @"AXToggleButton"}, |