summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorshreeram.k <shreeram.k@samsung.com>2015-04-07 22:59:05 -0700
committerCommit bot <commit-bot@chromium.org>2015-04-08 05:59:44 +0000
commit7e576157bba19b8918f0ad2e3a43d0171a675155 (patch)
tree0269f5e377b85beb0f0e7afdc3538b23d4f14b53
parent99cd104b840d471d975a7a5f5a3f10f9e6f0f9c7 (diff)
downloadchromium_src-7e576157bba19b8918f0ad2e3a43d0171a675155.zip
chromium_src-7e576157bba19b8918f0ad2e3a43d0171a675155.tar.gz
chromium_src-7e576157bba19b8918f0ad2e3a43d0171a675155.tar.bz2
Use multiline attribute to check for IA2_STATE_MULTILINE.
This CL use the multiline attribute only to see if it's multiline or not and Changes Chromium to treat TextField and TextArea identically. BUG=471152 Review URL: https://codereview.chromium.org/1046883002 Cr-Commit-Position: refs/heads/master@{#324189}
-rw-r--r--chrome/browser/extensions/api/automation/automation_apitest.cc2
-rw-r--r--chrome/browser/resources/chromeos/chromevox/common/chrome_extension_externs.js1
-rw-r--r--chrome/common/extensions/api/automation.idl2
-rw-r--r--chrome/renderer/resources/extensions/automation/automation_node.js3
-rw-r--r--chrome/test/data/extensions/api_test/automation/tests/tabs/mixins.js15
-rw-r--r--chrome/test/data/extensions/api_test/automation/tests/unit/test.js2
-rw-r--r--content/browser/accessibility/browser_accessibility.cc4
-rw-r--r--content/browser/accessibility/browser_accessibility_android.cc8
-rw-r--r--content/browser/accessibility/browser_accessibility_cocoa.mm14
-rw-r--r--content/browser/accessibility/browser_accessibility_win.cc11
-rw-r--r--content/browser/accessibility/dump_accessibility_tree_browsertest.cc9
-rw-r--r--content/renderer/accessibility/blink_ax_enum_conversion.cc5
-rw-r--r--content/renderer/accessibility/blink_ax_tree_source.cc4
-rw-r--r--content/test/data/accessibility/html/textarea-expected-mac.txt1
-rw-r--r--content/test/data/accessibility/html/textarea-expected-win.txt2
-rw-r--r--content/test/data/accessibility/html/textarea.html2
-rw-r--r--ui/accessibility/ax_enums.idl2
-rw-r--r--ui/accessibility/platform/ax_platform_node_mac.mm1
18 files changed, 35 insertions, 53 deletions
diff --git a/chrome/browser/extensions/api/automation/automation_apitest.cc b/chrome/browser/extensions/api/automation/automation_apitest.cc
index af8b507..fd4104c 100644
--- a/chrome/browser/extensions/api/automation/automation_apitest.cc
+++ b/chrome/browser/extensions/api/automation/automation_apitest.cc
@@ -206,7 +206,7 @@ IN_PROC_BROWSER_TEST_F(AutomationApiTest, Find) {
#else
#define MAYBE_Mixins Mixins
#endif
-IN_PROC_BROWSER_TEST_F(AutomationApiTest, DISABLED_Mixins) {
+IN_PROC_BROWSER_TEST_F(AutomationApiTest, Mixins) {
StartEmbeddedTestServer();
ASSERT_TRUE(RunExtensionSubtest("automation/tests/tabs", "mixins.html"))
<< message_;
diff --git a/chrome/browser/resources/chromeos/chromevox/common/chrome_extension_externs.js b/chrome/browser/resources/chromeos/chromevox/common/chrome_extension_externs.js
index df5e3d7..2d26cc0 100644
--- a/chrome/browser/resources/chromeos/chromevox/common/chrome_extension_externs.js
+++ b/chrome/browser/resources/chromeos/chromevox/common/chrome_extension_externs.js
@@ -1377,7 +1377,6 @@ chrome.automation.RoleType = {
tab: 'tab',
tableHeaderContainer: 'tableHeaderContainer',
table: 'table',
- textArea: 'textArea',
textField: 'textField',
time: 'time',
timer: 'timer',
diff --git a/chrome/common/extensions/api/automation.idl b/chrome/common/extensions/api/automation.idl
index 8990281..6a16e4e 100644
--- a/chrome/common/extensions/api/automation.idl
+++ b/chrome/common/extensions/api/automation.idl
@@ -161,7 +161,6 @@
tab,
tableHeaderContainer,
table,
- textArea,
textField,
time,
timer,
@@ -196,6 +195,7 @@
indeterminate,
invisible,
linked,
+ multiline,
multiselectable,
offscreen,
pressed,
diff --git a/chrome/renderer/resources/extensions/automation/automation_node.js b/chrome/renderer/resources/extensions/automation/automation_node.js
index 6ecdfc7..4daf7e4 100644
--- a/chrome/renderer/resources/extensions/automation/automation_node.js
+++ b/chrome/renderer/resources/extensions/automation/automation_node.js
@@ -826,8 +826,7 @@ AutomationRootNodeImpl.prototype = {
}
// If this is an editable text area, set editable text attributes.
- if (nodeData.role == schema.RoleType.textField ||
- nodeData.role == schema.RoleType.textArea) {
+ if (nodeData.role == schema.RoleType.textField) {
this.mixinAttributes_(nodeImpl, EditableTextMixinAttributes, nodeData);
}
diff --git a/chrome/test/data/extensions/api_test/automation/tests/tabs/mixins.js b/chrome/test/data/extensions/api_test/automation/tests/tabs/mixins.js
index 767372e..b3ae61b 100644
--- a/chrome/test/data/extensions/api_test/automation/tests/tabs/mixins.js
+++ b/chrome/test/data/extensions/api_test/automation/tests/tabs/mixins.js
@@ -85,7 +85,7 @@ var allTests = [
function testEditableTextMixins() {
var textFields = rootNode.findAll({ role: 'textField' });
- assertEq(2, textFields.length);
+ assertEq(3, textFields.length);
var EditableTextMixins = [ 'textSelStart', 'textSelEnd' ];
for (var i = 0; i < textFields.length; i++) {
var textField = textFields[i];
@@ -102,13 +102,7 @@ var allTests = [
assertEq(2, input.textSelStart);
assertEq(8, input.textSelEnd);
- var ariaTextbox = textFields[1];
- assertEq('textbox-role', ariaTextbox.attributes.id);
- assertEq(0, ariaTextbox.textSelStart);
- assertEq(0, ariaTextbox.textSelEnd);
-
- var textArea = rootNode.find({ role: 'textArea' });
- assertFalse(textArea == null, 'Should find a textArea in the page');
+ var textArea = textFields[1];
assertEq('textarea', textArea.attributes.id);
for (var i = 0; i < EditableTextMixins.length; i++) {
var mixinAttribute = EditableTextMixins[i];
@@ -118,6 +112,11 @@ var allTests = [
assertEq(0, textArea.textSelStart);
assertEq(0, textArea.textSelEnd);
+ var ariaTextbox = textFields[2];
+ assertEq('textbox-role', ariaTextbox.attributes.id);
+ assertEq(0, ariaTextbox.textSelStart);
+ assertEq(0, ariaTextbox.textSelEnd);
+
chrome.test.succeed();
},
diff --git a/chrome/test/data/extensions/api_test/automation/tests/unit/test.js b/chrome/test/data/extensions/api_test/automation/tests/unit/test.js
index 16dc155..95a2cab 100644
--- a/chrome/test/data/extensions/api_test/automation/tests/unit/test.js
+++ b/chrome/test/data/extensions/api_test/automation/tests/unit/test.js
@@ -298,7 +298,7 @@ var tests = [
'childIds': []
},
{
- 'id': 3, 'role': 'textArea',
+ 'id': 3, 'role': 'textField',
'childIds': []
},
diff --git a/content/browser/accessibility/browser_accessibility.cc b/content/browser/accessibility/browser_accessibility.cc
index 7a8c560..16a8ed2 100644
--- a/content/browser/accessibility/browser_accessibility.cc
+++ b/content/browser/accessibility/browser_accessibility.cc
@@ -52,7 +52,6 @@ bool BrowserAccessibility::PlatformIsLeaf() const {
case ui::AX_ROLE_LINE_BREAK:
case ui::AX_ROLE_SLIDER:
case ui::AX_ROLE_STATIC_TEXT:
- case ui::AX_ROLE_TEXT_AREA:
case ui::AX_ROLE_TEXT_FIELD:
return true;
default:
@@ -702,8 +701,7 @@ bool BrowserAccessibility::IsEditableText() const {
// or contenteditable. We also check for editable text roles to cover
// another element that has role=textbox set on it.
return (!HasState(ui::AX_STATE_READ_ONLY) ||
- GetRole() == ui::AX_ROLE_TEXT_FIELD ||
- GetRole() == ui::AX_ROLE_TEXT_AREA);
+ GetRole() == ui::AX_ROLE_TEXT_FIELD);
}
bool BrowserAccessibility::IsWebAreaForPresentationalIframe() const {
diff --git a/content/browser/accessibility/browser_accessibility_android.cc b/content/browser/accessibility/browser_accessibility_android.cc
index 3cd374e..9bfd68a 100644
--- a/content/browser/accessibility/browser_accessibility_android.cc
+++ b/content/browser/accessibility/browser_accessibility_android.cc
@@ -172,8 +172,7 @@ bool BrowserAccessibilityAndroid::IsDismissable() const {
}
bool BrowserAccessibilityAndroid::IsEditableText() const {
- return (GetRole() == ui::AX_ROLE_TEXT_AREA ||
- GetRole() == ui::AX_ROLE_TEXT_FIELD);
+ return GetRole() == ui::AX_ROLE_TEXT_FIELD;
}
bool BrowserAccessibilityAndroid::IsEnabled() const {
@@ -216,7 +215,7 @@ bool BrowserAccessibilityAndroid::IsLink() const {
}
bool BrowserAccessibilityAndroid::IsMultiLine() const {
- return GetRole() == ui::AX_ROLE_TEXT_AREA;
+ return HasState(ui::AX_STATE_MULTILINE);
}
bool BrowserAccessibilityAndroid::IsPassword() const {
@@ -257,7 +256,6 @@ const char* BrowserAccessibilityAndroid::GetClassName() const {
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:
class_name = "android.widget.EditText";
break;
@@ -345,7 +343,6 @@ base::string16 BrowserAccessibilityAndroid::GetText() const {
switch (GetRole()) {
case ui::AX_ROLE_COMBO_BOX:
case ui::AX_ROLE_POP_UP_BUTTON:
- case ui::AX_ROLE_TEXT_AREA:
case ui::AX_ROLE_TEXT_FIELD:
return value;
}
@@ -381,7 +378,6 @@ base::string16 BrowserAccessibilityAndroid::GetText() const {
base::string16 placeholder;
switch (GetRole()) {
case ui::AX_ROLE_DATE:
- case ui::AX_ROLE_TEXT_AREA:
case ui::AX_ROLE_TEXT_FIELD:
case ui::AX_ROLE_TIME:
GetHtmlAttribute("placeholder", &placeholder);
diff --git a/content/browser/accessibility/browser_accessibility_cocoa.mm b/content/browser/accessibility/browser_accessibility_cocoa.mm
index 9781913..7db4fc7 100644
--- a/content/browser/accessibility/browser_accessibility_cocoa.mm
+++ b/content/browser/accessibility/browser_accessibility_cocoa.mm
@@ -582,6 +582,10 @@ NSDictionary* attributeToMethodNameMap = nil;
else
return NSAccessibilityButtonRole;
}
+ if (role == ui::AX_ROLE_TEXT_FIELD &&
+ browserAccessibility_->HasState(ui::AX_STATE_MULTILINE)) {
+ return NSAccessibilityTextAreaRole;
+ }
// If this is a web area for a presentational iframe, give it a role of
// something other than WebArea so that the fact that it's a separate doc
@@ -1209,8 +1213,7 @@ NSDictionary* attributeToMethodNameMap = nil;
NSAccessibilityCellForColumnAndRowParameterizedAttribute,
nil];
}
- if ([[self role] isEqualToString:NSAccessibilityTextFieldRole] ||
- [[self role] isEqualToString:NSAccessibilityTextAreaRole]) {
+ if ([[self role] isEqualToString:NSAccessibilityTextFieldRole]) {
return [NSArray arrayWithObjects:
NSAccessibilityLineForIndexParameterizedAttribute,
NSAccessibilityRangeForLineParameterizedAttribute,
@@ -1241,7 +1244,6 @@ NSDictionary* attributeToMethodNameMap = nil;
NSString* role = [self role];
// TODO(dtseng): this should only get set when there's a default action.
if (![role isEqualToString:NSAccessibilityStaticTextRole] &&
- ![role isEqualToString:NSAccessibilityTextAreaRole] &&
![role isEqualToString:NSAccessibilityTextFieldRole]) {
[ret addObject:NSAccessibilityPressAction];
}
@@ -1346,8 +1348,7 @@ NSDictionary* attributeToMethodNameMap = nil;
@"AXLoaded",
@"AXLoadingProgress",
nil]];
- } else if ([role isEqualToString:NSAccessibilityTextFieldRole] ||
- [role isEqualToString:NSAccessibilityTextAreaRole]) {
+ } else if ([role isEqualToString:NSAccessibilityTextFieldRole]) {
[ret addObjectsFromArray:[NSArray arrayWithObjects:
NSAccessibilityInsertionPointLineNumberAttribute,
NSAccessibilityNumberOfCharactersAttribute,
@@ -1513,8 +1514,7 @@ NSDictionary* attributeToMethodNameMap = nil;
ui::AX_ATTR_CAN_SET_VALUE);
}
if ([attribute isEqualToString:NSAccessibilitySelectedTextRangeAttribute] &&
- ([[self role] isEqualToString:NSAccessibilityTextFieldRole] ||
- [[self role] isEqualToString:NSAccessibilityTextAreaRole]))
+ ([[self role] isEqualToString:NSAccessibilityTextFieldRole]))
return YES;
return NO;
diff --git a/content/browser/accessibility/browser_accessibility_win.cc b/content/browser/accessibility/browser_accessibility_win.cc
index 1d84b79..e8a82f7 100644
--- a/content/browser/accessibility/browser_accessibility_win.cc
+++ b/content/browser/accessibility/browser_accessibility_win.cc
@@ -4064,16 +4064,13 @@ void BrowserAccessibilityWin::InitRoleAndState() {
ia_role = ROLE_SYSTEM_PUSHBUTTON;
ia2_role = IA2_ROLE_TOGGLE_BUTTON;
break;
- case ui::AX_ROLE_TEXT_AREA:
- ia_role = ROLE_SYSTEM_TEXT;
- ia2_state |= IA2_STATE_MULTI_LINE;
- ia2_state |= IA2_STATE_EDITABLE;
- 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;
+ if (HasState(ui::AX_STATE_MULTILINE))
+ ia2_state |= IA2_STATE_MULTI_LINE;
+ else
+ ia2_state |= IA2_STATE_SINGLE_LINE;
ia2_state |= IA2_STATE_EDITABLE;
ia2_state |= IA2_STATE_SELECTABLE_TEXT;
break;
diff --git a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
index cce5115..b36e872 100644
--- a/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
+++ b/content/browser/accessibility/dump_accessibility_tree_browsertest.cc
@@ -379,8 +379,7 @@ IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest,
RunAriaTest(FILE_PATH_LITERAL("aria-menuitemradio.html"));
}
-IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest,
- DISABLED_AccessibilityAriaMultiline) {
+IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAriaMultiline) {
RunAriaTest(FILE_PATH_LITERAL("aria-multiline.html"));
}
@@ -524,8 +523,7 @@ IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAriaTabPanel) {
RunAriaTest(FILE_PATH_LITERAL("aria-tabpanel.html"));
}
-IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest,
- DISABLED_AccessibilityAriaTextbox) {
+IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityAriaTextbox) {
RunAriaTest(FILE_PATH_LITERAL("aria-textbox.html"));
}
@@ -893,8 +891,7 @@ IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest,
RunHtmlTest(FILE_PATH_LITERAL("input-text-name-calc.html"));
}
-IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest,
- DISABLED_AccessibilityInputTextValue) {
+IN_PROC_BROWSER_TEST_F(DumpAccessibilityTreeTest, AccessibilityInputTextValue) {
RunHtmlTest(FILE_PATH_LITERAL("input-text-value.html"));
}
diff --git a/content/renderer/accessibility/blink_ax_enum_conversion.cc b/content/renderer/accessibility/blink_ax_enum_conversion.cc
index 3220aad..b7b54ee 100644
--- a/content/renderer/accessibility/blink_ax_enum_conversion.cc
+++ b/content/renderer/accessibility/blink_ax_enum_conversion.cc
@@ -43,6 +43,9 @@ uint32 AXStateFromBlink(const blink::WebAXObject& o) {
if (o.isLinked())
state |= (1 << ui::AX_STATE_LINKED);
+ if (o.isMultiline())
+ state |= (1 << ui::AX_STATE_MULTILINE);
+
if (o.isMultiSelectable())
state |= (1 << ui::AX_STATE_MULTISELECTABLE);
@@ -294,8 +297,6 @@ ui::AXRole AXRoleFromBlink(blink::WebAXRole role) {
return ui::AX_ROLE_TABLE;
case blink::WebAXRoleTableHeaderContainer:
return ui::AX_ROLE_TABLE_HEADER_CONTAINER;
- case blink::WebAXRoleTextArea:
- return ui::AX_ROLE_TEXT_AREA;
case blink::WebAXRoleTextField:
return ui::AX_ROLE_TEXT_FIELD;
case blink::WebAXRoleTime:
diff --git a/content/renderer/accessibility/blink_ax_tree_source.cc b/content/renderer/accessibility/blink_ax_tree_source.cc
index 78ea801..9ea0112 100644
--- a/content/renderer/accessibility/blink_ax_tree_source.cc
+++ b/content/renderer/accessibility/blink_ax_tree_source.cc
@@ -356,9 +356,7 @@ void BlinkAXTreeSource::SerializeNode(blink::WebAXObject src,
dst->html_attributes.push_back(std::make_pair(name, value));
}
- if (!src.isReadOnly() ||
- dst->role == ui::AX_ROLE_TEXT_AREA ||
- dst->role == ui::AX_ROLE_TEXT_FIELD) {
+ if (!src.isReadOnly() || dst->role == ui::AX_ROLE_TEXT_FIELD) {
dst->AddIntAttribute(ui::AX_ATTR_TEXT_SEL_START, src.selectionStart());
dst->AddIntAttribute(ui::AX_ATTR_TEXT_SEL_END, src.selectionEnd());
diff --git a/content/test/data/accessibility/html/textarea-expected-mac.txt b/content/test/data/accessibility/html/textarea-expected-mac.txt
index 24d1cd4..3868acc 100644
--- a/content/test/data/accessibility/html/textarea-expected-mac.txt
+++ b/content/test/data/accessibility/html/textarea-expected-mac.txt
@@ -1,4 +1,3 @@
-#<skip -- AXValue for AXTextArea is not in same line crbug.com/425485>
AXWebArea AXRoleDescription='HTML content'
++AXGroup AXRoleDescription='group'
++++AXTextArea AXRoleDescription='text entry area' AXValue='The textarea tag defines a multi-line text input control.
diff --git a/content/test/data/accessibility/html/textarea-expected-win.txt b/content/test/data/accessibility/html/textarea-expected-win.txt
index b5e9ff5..807fa0d 100644
--- a/content/test/data/accessibility/html/textarea-expected-win.txt
+++ b/content/test/data/accessibility/html/textarea-expected-win.txt
@@ -1,3 +1,3 @@
ROLE_SYSTEM_DOCUMENT READONLY FOCUSABLE
++IA2_ROLE_SECTION
-++++ROLE_SYSTEM_TEXT FOCUSABLE
+++++ROLE_SYSTEM_TEXT FOCUSABLE IA2_STATE_EDITABLE IA2_STATE_MULTI_LINE IA2_STATE_SELECTABLE_TEXT
diff --git a/content/test/data/accessibility/html/textarea.html b/content/test/data/accessibility/html/textarea.html
index eee3569..e56ac63 100644
--- a/content/test/data/accessibility/html/textarea.html
+++ b/content/test/data/accessibility/html/textarea.html
@@ -1,5 +1,6 @@
<!--
@MAC-ALLOW:AXRole*
+@WIN-ALLOW:IA2_STATE*
-->
<!DOCTYPE html>
<html>
@@ -11,4 +12,3 @@ The textarea tag defines a multi-line text input control.
</body>
</html>
-
diff --git a/ui/accessibility/ax_enums.idl b/ui/accessibility/ax_enums.idl
index 1c7a119a..a61f994 100644
--- a/ui/accessibility/ax_enums.idl
+++ b/ui/accessibility/ax_enums.idl
@@ -172,7 +172,6 @@
tab,
table_header_container,
table,
- text_area,
text_field,
time,
timer,
@@ -208,6 +207,7 @@
indeterminate,
invisible,
linked,
+ multiline,
multiselectable,
offscreen,
pressed,
diff --git a/ui/accessibility/platform/ax_platform_node_mac.mm b/ui/accessibility/platform/ax_platform_node_mac.mm
index 78883fe..8314758 100644
--- a/ui/accessibility/platform/ax_platform_node_mac.mm
+++ b/ui/accessibility/platform/ax_platform_node_mac.mm
@@ -119,7 +119,6 @@ RoleMap BuildRoleMap() {
{ui::AX_ROLE_TABLE_HEADER_CONTAINER, NSAccessibilityGroupRole},
{ui::AX_ROLE_TAB_LIST, NSAccessibilityTabGroupRole},
{ui::AX_ROLE_TAB_PANEL, NSAccessibilityGroupRole},
- {ui::AX_ROLE_TEXT_AREA, NSAccessibilityTextAreaRole},
{ui::AX_ROLE_TEXT_FIELD, NSAccessibilityTextFieldRole},
{ui::AX_ROLE_TIME, @"AXTimeField"},
{ui::AX_ROLE_TIMER, NSAccessibilityGroupRole},