Chromium Code Reviews| Index: content/browser/accessibility/browser_accessibility.cc |
| diff --git a/content/browser/accessibility/browser_accessibility.cc b/content/browser/accessibility/browser_accessibility.cc |
| index ae7efe2f6607b26643776ea7d85d2edd7a015ac7..7cfc729a6fd6b518e06f66180f6e3adc7b11fbc2 100644 |
| --- a/content/browser/accessibility/browser_accessibility.cc |
| +++ b/content/browser/accessibility/browser_accessibility.cc |
| @@ -7,6 +7,7 @@ |
| #include "base/logging.h" |
| #include "base/strings/string_number_conversions.h" |
| #include "base/strings/string_util.h" |
| +#include "base/strings/utf_string_conversions.h" |
| #include "content/browser/accessibility/browser_accessibility_manager.h" |
| #include "content/common/accessibility_messages.h" |
| @@ -64,22 +65,20 @@ void BrowserAccessibility::InitializeTreeStructure( |
| void BrowserAccessibility::InitializeData(const AccessibilityNodeData& src) { |
| DCHECK_EQ(renderer_id_, src.id); |
| - name_ = src.name; |
| - value_ = src.value; |
| role_ = src.role; |
| state_ = src.state; |
| string_attributes_ = src.string_attributes; |
| int_attributes_ = src.int_attributes; |
| float_attributes_ = src.float_attributes; |
| bool_attributes_ = src.bool_attributes; |
| + intlist_attributes_ = src.intlist_attributes; |
| html_attributes_ = src.html_attributes; |
| location_ = src.location; |
| - indirect_child_ids_ = src.indirect_child_ids; |
| - line_breaks_ = src.line_breaks; |
| - cell_ids_ = src.cell_ids; |
| - unique_cell_ids_ = src.unique_cell_ids; |
| instance_active_ = true; |
| + GetStringAttribute(AccessibilityNodeData::ATTR_NAME, &name_); |
| + GetStringAttribute(AccessibilityNodeData::ATTR_VALUE, &value_); |
| + |
| PreInitialize(); |
| } |
| @@ -225,10 +224,11 @@ void BrowserAccessibility::NativeReleaseReference() { |
| bool BrowserAccessibility::GetBoolAttribute( |
| BoolAttribute attribute, bool* value) const { |
| - BoolAttrMap::const_iterator iter = bool_attributes_.find(attribute); |
| - if (iter != bool_attributes_.end()) { |
| - *value = iter->second; |
| - return true; |
| + for (size_t i = 0; i < bool_attributes_.size(); ++i) { |
| + if (bool_attributes_[i].first == attribute) { |
| + *value = bool_attributes_[i].second; |
| + return true; |
| + } |
| } |
| return false; |
| @@ -236,10 +236,11 @@ bool BrowserAccessibility::GetBoolAttribute( |
| bool BrowserAccessibility::GetFloatAttribute( |
| FloatAttribute attribute, float* value) const { |
| - FloatAttrMap::const_iterator iter = float_attributes_.find(attribute); |
| - if (iter != float_attributes_.end()) { |
| - *value = iter->second; |
| - return true; |
| + for (size_t i = 0; i < float_attributes_.size(); ++i) { |
| + if (float_attributes_[i].first == attribute) { |
| + *value = float_attributes_[i].second; |
| + return true; |
| + } |
| } |
| return false; |
| @@ -247,10 +248,11 @@ bool BrowserAccessibility::GetFloatAttribute( |
| bool BrowserAccessibility::GetIntAttribute( |
| IntAttribute attribute, int* value) const { |
| - IntAttrMap::const_iterator iter = int_attributes_.find(attribute); |
| - if (iter != int_attributes_.end()) { |
| - *value = iter->second; |
| - return true; |
| + for (size_t i = 0; i < int_attributes_.size(); ++i) { |
| + if (int_attributes_[i].first == attribute) { |
| + *value = int_attributes_[i].second; |
| + return true; |
| + } |
| } |
| return false; |
| @@ -258,20 +260,54 @@ bool BrowserAccessibility::GetIntAttribute( |
| bool BrowserAccessibility::GetStringAttribute( |
| StringAttribute attribute, |
| - string16* value) const { |
| - StringAttrMap::const_iterator iter = string_attributes_.find(attribute); |
| - if (iter != string_attributes_.end()) { |
| - *value = iter->second; |
| - return true; |
| + std::string* value) const { |
|
aboxhall
2013/07/31 18:34:47
Nit: this will fit on the previous line.
dmazzoni
2013/08/06 17:36:34
Done.
|
| + for (size_t i = 0; i < string_attributes_.size(); ++i) { |
| + if (string_attributes_[i].first == attribute) { |
| + *value = string_attributes_[i].second; |
| + return true; |
| + } |
| } |
| return false; |
| } |
| +bool BrowserAccessibility::GetStringAttribute( |
| + StringAttribute attribute, |
| + string16* value) const { |
| + std::string value_utf8; |
| + if (!GetStringAttribute(attribute, &value_utf8)) |
| + return false; |
| + *value = UTF8ToUTF16(value_utf8); |
| + return true; |
| +} |
| + |
| +void BrowserAccessibility::SetStringAttribute( |
| + StringAttribute attribute, const std::string& value) { |
| + for (size_t i = 0; i < string_attributes_.size(); ++i) { |
| + if (string_attributes_[i].first == attribute) { |
| + string_attributes_[i].second = value; |
| + return; |
| + } |
| + } |
| + if (!value.empty()) |
| + string_attributes_.push_back(std::make_pair(attribute, value)); |
| +} |
| + |
| +const std::vector<int32>& BrowserAccessibility::GetIntListAttribute( |
| + AccessibilityNodeData::IntListAttribute attribute) const { |
| + CR_DEFINE_STATIC_LOCAL(std::vector<int32>, empty_vector, ()); |
| + for (size_t i = 0; i < intlist_attributes_.size(); ++i) { |
| + if (intlist_attributes_[i].first == attribute) |
| + return intlist_attributes_[i].second; |
| + } |
| + |
| + return empty_vector; |
| +} |
| + |
| bool BrowserAccessibility::GetHtmlAttribute( |
| - const char* html_attr, string16* value) const { |
| + const char* html_attr, std::string* value) const { |
| for (size_t i = 0; i < html_attributes_.size(); i++) { |
| - const string16& attr = html_attributes_[i].first; |
| + const std::string& attr = html_attributes_[i].first; |
| if (LowerCaseEqualsASCII(attr, html_attr)) { |
| *value = html_attributes_[i].second; |
| return true; |
| @@ -281,6 +317,15 @@ bool BrowserAccessibility::GetHtmlAttribute( |
| return false; |
| } |
| +bool BrowserAccessibility::GetHtmlAttribute( |
| + const char* html_attr, string16* value) const { |
| + std::string value_utf8; |
| + if (!GetHtmlAttribute(html_attr, &value_utf8)) |
| + return false; |
| + *value = UTF8ToUTF16(value_utf8); |
| + return true; |
| +} |
| + |
| bool BrowserAccessibility::GetAriaTristate( |
| const char* html_attr, |
| bool* is_defined, |
| @@ -327,12 +372,12 @@ bool BrowserAccessibility::IsEditableText() const { |
| role_ == AccessibilityNodeData::ROLE_TEXTAREA); |
| } |
| -string16 BrowserAccessibility::GetTextRecursive() const { |
| +std::string BrowserAccessibility::GetTextRecursive() const { |
| if (!name_.empty()) { |
| return name_; |
| } |
| - string16 result; |
| + std::string result; |
| for (size_t i = 0; i < children_.size(); ++i) |
| result += children_[i]->GetTextRecursive(); |
| return result; |