summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/common/extensions/api/automation.idl2
-rw-r--r--content/app/strings/content_strings.grd6
-rw-r--r--content/browser/accessibility/browser_accessibility_android.cc2
-rw-r--r--content/browser/accessibility/browser_accessibility_cocoa.mm6
-rw-r--r--content/browser/accessibility/browser_accessibility_win.cc13
-rw-r--r--content/browser/accessibility/dump_accessibility_tree_browsertest.cc8
-rw-r--r--content/renderer/accessibility/blink_ax_enum_conversion.cc4
-rw-r--r--content/shell/renderer/test_runner/web_ax_object_proxy.cc4
-rw-r--r--content/test/data/accessibility/aria/aria-searchbox-expected-android.txt2
-rw-r--r--content/test/data/accessibility/aria/aria-searchbox-expected-mac.txt3
-rw-r--r--content/test/data/accessibility/aria/aria-searchbox-expected-win.txt3
-rw-r--r--content/test/data/accessibility/aria/aria-searchbox.html11
-rw-r--r--content/test/data/accessibility/aria/aria-switch-expected-android.txt4
-rw-r--r--content/test/data/accessibility/aria/aria-switch-expected-mac.txt4
-rw-r--r--content/test/data/accessibility/aria/aria-switch-expected-win.txt4
-rw-r--r--content/test/data/accessibility/aria/aria-switch.html15
-rw-r--r--ui/accessibility/ax_enums.idl2
-rw-r--r--ui/accessibility/platform/ax_platform_node_mac.mm18
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"},