Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/accessibility/browser_accessibility.h" | 5 #include "content/browser/accessibility/browser_accessibility.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/string_number_conversions.h" | 8 #include "base/string_number_conversions.h" |
| 9 #include "base/string_util.h" | |
| 9 #include "content/browser/accessibility/browser_accessibility_manager.h" | 10 #include "content/browser/accessibility/browser_accessibility_manager.h" |
| 11 #include "content/common/view_messages.h" | |
| 10 | 12 |
| 13 typedef WebAccessibility::BoolAttribute BoolAttribute; | |
| 14 typedef WebAccessibility::FloatAttribute FloatAttribute; | |
| 11 typedef WebAccessibility::IntAttribute IntAttribute; | 15 typedef WebAccessibility::IntAttribute IntAttribute; |
| 12 typedef WebAccessibility::StringAttribute StringAttribute; | 16 typedef WebAccessibility::StringAttribute StringAttribute; |
| 13 | 17 |
| 14 #if defined(OS_POSIX) && !defined(OS_MACOSX) | 18 #if defined(OS_POSIX) && !defined(OS_MACOSX) |
| 15 // There's no OS-specific implementation of BrowserAccessibilityManager | 19 // There's no OS-specific implementation of BrowserAccessibilityManager |
| 16 // on Unix, so just instantiate the base class. | 20 // on Unix, so just instantiate the base class. |
| 17 // static | 21 // static |
| 18 BrowserAccessibility* BrowserAccessibility::Create() { | 22 BrowserAccessibility* BrowserAccessibility::Create() { |
| 19 return new BrowserAccessibility(); | 23 return new BrowserAccessibility(); |
| 20 } | 24 } |
| (...skipping 27 matching lines...) Expand all Loading... | |
| 48 BrowserAccessibilityManager* manager, | 52 BrowserAccessibilityManager* manager, |
| 49 BrowserAccessibility* parent, | 53 BrowserAccessibility* parent, |
| 50 int32 child_id, | 54 int32 child_id, |
| 51 int32 index_in_parent, | 55 int32 index_in_parent, |
| 52 const webkit_glue::WebAccessibility& src) { | 56 const webkit_glue::WebAccessibility& src) { |
| 53 manager_ = manager; | 57 manager_ = manager; |
| 54 parent_ = parent; | 58 parent_ = parent; |
| 55 child_id_ = child_id; | 59 child_id_ = child_id; |
| 56 index_in_parent_ = index_in_parent; | 60 index_in_parent_ = index_in_parent; |
| 57 | 61 |
| 58 renderer_id_ = src.id; | 62 // Update all of the rest of the attributes. |
| 59 name_ = src.name; | 63 name_ = src.name; |
| 60 value_ = src.value; | 64 value_ = src.value; |
| 65 role_ = src.role; | |
| 66 state_ = src.state; | |
| 67 renderer_id_ = src.id; | |
| 61 string_attributes_ = src.string_attributes; | 68 string_attributes_ = src.string_attributes; |
| 62 int_attributes_ = src.int_attributes; | 69 int_attributes_ = src.int_attributes; |
| 70 float_attributes_ = src.float_attributes; | |
| 71 bool_attributes_ = src.bool_attributes; | |
| 63 html_attributes_ = src.html_attributes; | 72 html_attributes_ = src.html_attributes; |
| 64 location_ = src.location; | 73 location_ = src.location; |
| 65 role_ = src.role; | |
| 66 state_ = src.state; | |
| 67 indirect_child_ids_ = src.indirect_child_ids; | 74 indirect_child_ids_ = src.indirect_child_ids; |
| 68 line_breaks_ = src.line_breaks; | 75 line_breaks_ = src.line_breaks; |
| 69 cell_ids_ = src.cell_ids; | 76 cell_ids_ = src.cell_ids; |
| 77 unique_cell_ids_ = src.unique_cell_ids; | |
| 70 | 78 |
| 71 Initialize(); | 79 Initialize(); |
| 72 } | 80 } |
| 73 | 81 |
| 74 void BrowserAccessibility::Initialize() { | 82 void BrowserAccessibility::Initialize() { |
| 75 instance_active_ = true; | 83 instance_active_ = true; |
| 76 } | 84 } |
| 77 | 85 |
| 78 void BrowserAccessibility::AddChild(BrowserAccessibility* child) { | 86 void BrowserAccessibility::AddChild(BrowserAccessibility* child) { |
| 79 children_.push_back(child); | 87 children_.push_back(child); |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 159 if (recursive || ref_count_ == 1) { | 167 if (recursive || ref_count_ == 1) { |
| 160 for (std::vector<BrowserAccessibility*>::iterator iter = children_.begin(); | 168 for (std::vector<BrowserAccessibility*>::iterator iter = children_.begin(); |
| 161 iter != children_.end(); | 169 iter != children_.end(); |
| 162 ++iter) { | 170 ++iter) { |
| 163 (*iter)->InternalReleaseReference(true); | 171 (*iter)->InternalReleaseReference(true); |
| 164 } | 172 } |
| 165 } | 173 } |
| 166 | 174 |
| 167 ref_count_--; | 175 ref_count_--; |
| 168 if (ref_count_ == 0) { | 176 if (ref_count_ == 0) { |
| 177 // Allow the object to fire a TEXT_REMOVED notification. | |
| 178 name_.clear(); | |
| 179 value_.clear(); | |
| 180 SendNodeUpdateEvents(); | |
| 181 | |
| 182 manager_->NotifyAccessibilityEvent( | |
| 183 ViewHostMsg_AccessibilityNotification_Type:: | |
| 184 NOTIFICATION_TYPE_OBJECT_HIDE, | |
| 185 this); | |
|
David Tseng
2011/08/26 16:14:37
I think you want to align this with "ViewHostMsg_A
dmazzoni
2011/08/29 18:08:51
You're right, thanks!
| |
| 186 | |
| 169 instance_active_ = false; | 187 instance_active_ = false; |
| 170 children_.clear(); | 188 children_.clear(); |
| 171 manager_->Remove(child_id_, renderer_id_); | 189 manager_->Remove(child_id_, renderer_id_); |
| 172 NativeReleaseReference(); | 190 NativeReleaseReference(); |
| 173 } | 191 } |
| 174 } | 192 } |
| 175 | 193 |
| 176 void BrowserAccessibility::NativeReleaseReference() { | 194 void BrowserAccessibility::NativeReleaseReference() { |
| 177 delete this; | 195 delete this; |
| 178 } | 196 } |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 194 IntAttribute attribute, int* value) { | 212 IntAttribute attribute, int* value) { |
| 195 std::map<IntAttribute, int32>::iterator iter = | 213 std::map<IntAttribute, int32>::iterator iter = |
| 196 int_attributes_.find(attribute); | 214 int_attributes_.find(attribute); |
| 197 if (iter != int_attributes_.end()) { | 215 if (iter != int_attributes_.end()) { |
| 198 *value = iter->second; | 216 *value = iter->second; |
| 199 return true; | 217 return true; |
| 200 } | 218 } |
| 201 | 219 |
| 202 return false; | 220 return false; |
| 203 } | 221 } |
| 222 | |
| 223 bool BrowserAccessibility::GetFloatAttribute( | |
| 224 FloatAttribute attribute, float* value) { | |
| 225 std::map<FloatAttribute, float>::iterator iter = | |
| 226 float_attributes_.find(attribute); | |
| 227 if (iter != float_attributes_.end()) { | |
| 228 *value = iter->second; | |
| 229 return true; | |
| 230 } | |
| 231 | |
| 232 return false; | |
| 233 } | |
| 234 | |
| 235 bool BrowserAccessibility::GetBoolAttribute( | |
| 236 BoolAttribute attribute, bool* value) { | |
| 237 std::map<BoolAttribute, bool>::iterator iter = | |
| 238 bool_attributes_.find(attribute); | |
| 239 if (iter != bool_attributes_.end()) { | |
| 240 *value = iter->second; | |
| 241 return true; | |
| 242 } | |
| 243 | |
| 244 return false; | |
| 245 } | |
| 246 | |
| 247 bool BrowserAccessibility::GetHtmlAttribute( | |
| 248 const char* html_attr, string16* value) { | |
| 249 for (size_t i = 0; i < html_attributes_.size(); i++) { | |
| 250 string16& attr = html_attributes_[i].first; | |
| 251 if (LowerCaseEqualsASCII(attr, html_attr)) { | |
| 252 *value = html_attributes_[i].second; | |
| 253 return true; | |
| 254 } | |
| 255 } | |
| 256 | |
| 257 return false; | |
| 258 } | |
| 259 | |
| 260 bool BrowserAccessibility::IsEditableText() { | |
|
David Tseng
2011/08/26 16:14:37
const method?
dmazzoni
2011/08/29 18:08:51
Done. I made some other methods const as well.
| |
| 261 return (role_ == WebAccessibility::ROLE_TEXT_FIELD || | |
| 262 role_ == WebAccessibility::ROLE_TEXTAREA); | |
| 263 } | |
| OLD | NEW |