Chromium Code Reviews| 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 f1896ec576d18b6bc7edacad6ed6c64c83308af0..5c8a6b7ddff8dd269f81e154a7c0a884b8a5d9c1 100644 |
| --- a/content/browser/accessibility/browser_accessibility_win.cc |
| +++ b/content/browser/accessibility/browser_accessibility_win.cc |
| @@ -2726,6 +2726,47 @@ void BrowserAccessibilityWin::PreInitialize() { |
| } |
| } |
| + // WebKit computes accessible name, description and help strings from the |
| + // html source, but on Windows, the help should become the description if |
| + // there's no description, and then the description should become the name |
| + // if there's no name. |
| + string16 description, help; |
| + int title_elem_id = 0; |
| + GetIntAttribute(AccessibilityNodeData::ATTR_TITLE_UI_ELEMENT, &title_elem_id); |
| + GetStringAttribute(AccessibilityNodeData::ATTR_DESCRIPTION, &description); |
| + GetStringAttribute(AccessibilityNodeData::ATTR_HELP, &help); |
| + if (!description.empty()) { |
| + name_ = description; |
|
aboxhall
2012/08/06 01:55:49
I'm confused by this line. Is name_ always empty a
|
| + description = L""; |
| + string_attributes_[AccessibilityNodeData::ATTR_DESCRIPTION] = description; |
| + } |
| + if (!help.empty() && description.empty()) { |
| + description = help; |
| + string_attributes_[AccessibilityNodeData::ATTR_DESCRIPTION] = help; |
| + string_attributes_[AccessibilityNodeData::ATTR_HELP] = L""; |
| + } |
| + if (!description.empty() && name_.empty() && !title_elem_id) { |
| + name_ = description; |
| + description = L""; |
| + string_attributes_[AccessibilityNodeData::ATTR_DESCRIPTION] = L""; |
| + } |
| + |
| + // If it's a text field, also consider the placeholder. |
| + string16 placeholder; |
| + if (role_ == AccessibilityNodeData::ROLE_TEXT_FIELD && |
| + HasState(AccessibilityNodeData::STATE_FOCUSABLE) && |
| + GetHtmlAttribute("placeholder", &placeholder)) { |
| + if (name_.empty() && !title_elem_id) { |
| + name_ = placeholder; |
| + } else if (description.empty()) { |
| + description = placeholder; |
| + string_attributes_[AccessibilityNodeData::ATTR_DESCRIPTION] = description; |
| + } else { |
| + description = description + L" " + placeholder; |
|
aboxhall
2012/08/06 01:55:49
As I said elsewhere, I'm not sure this is the best
|
| + string_attributes_[AccessibilityNodeData::ATTR_DESCRIPTION] = description; |
| + } |
| + } |
| + |
| if (name_.empty() && |
| (role_ == AccessibilityNodeData::ROLE_LISTBOX_OPTION || |
| role_ == AccessibilityNodeData::ROLE_STATIC_TEXT || |
| @@ -2733,12 +2774,6 @@ void BrowserAccessibilityWin::PreInitialize() { |
| name_.swap(value_); |
| } |
| - // If this object doesn't have a name but it does have a description, |
| - // use the description as its name - because some screen readers only |
| - // announce the name. |
| - if (name_.empty()) |
| - GetStringAttribute(AccessibilityNodeData::ATTR_DESCRIPTION, &name_); |
| - |
| // If this doesn't have a value and is linked then set its value to the url |
| // attribute. This allows screen readers to read an empty link's destination. |
| string16 url; |
| @@ -2751,9 +2786,7 @@ void BrowserAccessibilityWin::PreInitialize() { |
| relations_.clear(); |
| // Handle title UI element. |
| - int title_elem_id; |
| - if (GetIntAttribute(AccessibilityNodeData::ATTR_TITLE_UI_ELEMENT, |
| - &title_elem_id)) { |
| + if (title_elem_id) { |
| // Add a labelled by relationship. |
| CComObject<BrowserAccessibilityRelation>* relation; |
| HRESULT hr = CComObject<BrowserAccessibilityRelation>::CreateInstance( |