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

Unified Diff: content/browser/accessibility/browser_accessibility_win.cc

Issue 790003003: Exposed the invalid state of form controls to the accessibility APIs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Tried fixing Android unit tests. Created 5 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/accessibility/browser_accessibility_win.cc
diff --git a/content/browser/accessibility/browser_accessibility_win.cc b/content/browser/accessibility/browser_accessibility_win.cc
index 29b4b7b54959596fd02bbce61b63a320887a7eb9..de90bfd689e7ed145e79e48a010bb7b54d7b284b 100644
--- a/content/browser/accessibility/browser_accessibility_win.cc
+++ b/content/browser/accessibility/browser_accessibility_win.cc
@@ -2980,6 +2980,43 @@ void BrowserAccessibilityWin::OnDataChanged() {
}
}
+ // Expose invalid state for form controls and elements with aria-invalid.
+ int invalid_state;
+ if (GetIntAttribute(ui::AX_ATTR_INVALID_STATE, &invalid_state)) {
+ // TODO(nektar): Handle the possibility of having multiple aria-invalid
+ // attributes defined, e.g., "invalid:spelling,grammar".
+ switch (invalid_state) {
+ case ui::AX_INVALID_STATE_NONE:
+ break;
+ case ui::AX_INVALID_STATE_FALSE:
+ ia2_attributes_.push_back(L"invalid:false");
+ break;
+ case ui::AX_INVALID_STATE_TRUE:
+ ia2_attributes_.push_back(L"invalid:true");
+ break;
+ case ui::AX_INVALID_STATE_SPELLING:
+ ia2_attributes_.push_back(L"invalid:spelling");
+ break;
+ case ui::AX_INVALID_STATE_GRAMMAR:
+ ia2_attributes_.push_back(L"invalid:grammar");
+ break;
+ case ui::AX_INVALID_STATE_OTHER:
+ {
+ base::string16 aria_invalid_value;
+ if (GetString16Attribute(ui::AX_ATTR_ARIA_INVALID_VALUE,
+ &aria_invalid_value)) {
+ ia2_attributes_.push_back(L"invalid:" + aria_invalid_value);
+ } else {
+ // Set the attribute to L"true", since we cannot be more specific.
+ ia2_attributes_.push_back(L"invalid:true");
+ }
+ }
+ break;
+ default:
+ NOTREACHED();
+ }
+ }
+
// The calculation of the accessible name of an element has been
// standardized in the HTML to Platform Accessibility APIs Implementation
// Guide (http://www.w3.org/TR/html-aapi/). In order to return the
@@ -3294,16 +3331,22 @@ void BrowserAccessibilityWin::HandleSpecialTextOffset(
ui::TextBoundaryType BrowserAccessibilityWin::IA2TextBoundaryToTextBoundary(
IA2TextBoundaryType ia2_boundary) {
switch(ia2_boundary) {
- case IA2_TEXT_BOUNDARY_CHAR: return ui::CHAR_BOUNDARY;
- case IA2_TEXT_BOUNDARY_WORD: return ui::WORD_BOUNDARY;
- case IA2_TEXT_BOUNDARY_LINE: return ui::LINE_BOUNDARY;
- case IA2_TEXT_BOUNDARY_SENTENCE: return ui::SENTENCE_BOUNDARY;
- case IA2_TEXT_BOUNDARY_PARAGRAPH: return ui::PARAGRAPH_BOUNDARY;
- case IA2_TEXT_BOUNDARY_ALL: return ui::ALL_BOUNDARY;
+ case IA2_TEXT_BOUNDARY_CHAR:
+ return ui::CHAR_BOUNDARY;
+ case IA2_TEXT_BOUNDARY_WORD:
+ return ui::WORD_BOUNDARY;
+ case IA2_TEXT_BOUNDARY_LINE:
+ return ui::LINE_BOUNDARY;
+ case IA2_TEXT_BOUNDARY_SENTENCE:
+ return ui::SENTENCE_BOUNDARY;
+ case IA2_TEXT_BOUNDARY_PARAGRAPH:
+ return ui::PARAGRAPH_BOUNDARY;
+ case IA2_TEXT_BOUNDARY_ALL:
+ return ui::ALL_BOUNDARY;
default:
NOTREACHED();
- return ui::CHAR_BOUNDARY;
}
+ return ui::CHAR_BOUNDARY;
}
LONG BrowserAccessibilityWin::FindBoundary(
@@ -3344,6 +3387,9 @@ void BrowserAccessibilityWin::InitRoleAndState() {
ia_state_ |= STATE_SYSTEM_HOTTRACKED;
if (HasState(ui::AX_STATE_INDETERMINATE))
ia_state_ |= STATE_SYSTEM_INDETERMINATE;
+ if (HasIntAttribute(ui::AX_ATTR_INVALID_STATE) &&
+ GetIntAttribute(ui::AX_ATTR_INVALID_STATE) != ui::AX_INVALID_STATE_FALSE)
+ ia2_state_ |= IA2_STATE_INVALID_ENTRY;
if (HasState(ui::AX_STATE_INVISIBLE))
ia_state_ |= STATE_SYSTEM_INVISIBLE;
if (HasState(ui::AX_STATE_LINKED))
@@ -3382,10 +3428,6 @@ void BrowserAccessibilityWin::InitRoleAndState() {
if (!HasState(ui::AX_STATE_READ_ONLY))
ia2_state_ |= IA2_STATE_EDITABLE;
- base::string16 invalid;
- if (GetHtmlAttribute("aria-invalid", &invalid))
- ia2_state_ |= IA2_STATE_INVALID_ENTRY;
-
if (GetBoolAttribute(ui::AX_ATTR_BUTTON_MIXED))
ia_state_ |= STATE_SYSTEM_MIXED;

Powered by Google App Engine
This is Rietveld 408576698