diff options
author | shreeram.k <shreeram.k@samsung.com> | 2015-04-07 22:59:05 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-04-08 05:59:44 +0000 |
commit | 7e576157bba19b8918f0ad2e3a43d0171a675155 (patch) | |
tree | 0269f5e377b85beb0f0e7afdc3538b23d4f14b53 | |
parent | 99cd104b840d471d975a7a5f5a3f10f9e6f0f9c7 (diff) | |
download | chromium_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}
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}, |