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

Side by Side Diff: content/browser/accessibility/browser_accessibility.cc

Issue 21269002: Make AccessibilityNodeData more compact. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix windows compile Created 7 years, 4 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/strings/string_number_conversions.h" 8 #include "base/strings/string_number_conversions.h"
9 #include "base/strings/string_util.h" 9 #include "base/strings/string_util.h"
10 #include "base/strings/utf_string_conversions.h"
10 #include "content/browser/accessibility/browser_accessibility_manager.h" 11 #include "content/browser/accessibility/browser_accessibility_manager.h"
11 #include "content/common/accessibility_messages.h" 12 #include "content/common/accessibility_messages.h"
12 13
13 namespace content { 14 namespace content {
14 15
15 typedef AccessibilityNodeData::BoolAttribute BoolAttribute; 16 typedef AccessibilityNodeData::BoolAttribute BoolAttribute;
16 typedef AccessibilityNodeData::FloatAttribute FloatAttribute; 17 typedef AccessibilityNodeData::FloatAttribute FloatAttribute;
17 typedef AccessibilityNodeData::IntAttribute IntAttribute; 18 typedef AccessibilityNodeData::IntAttribute IntAttribute;
18 typedef AccessibilityNodeData::StringAttribute StringAttribute; 19 typedef AccessibilityNodeData::StringAttribute StringAttribute;
19 20
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 int32 renderer_id, 58 int32 renderer_id,
58 int32 index_in_parent) { 59 int32 index_in_parent) {
59 manager_ = manager; 60 manager_ = manager;
60 parent_ = parent; 61 parent_ = parent;
61 renderer_id_ = renderer_id; 62 renderer_id_ = renderer_id;
62 index_in_parent_ = index_in_parent; 63 index_in_parent_ = index_in_parent;
63 } 64 }
64 65
65 void BrowserAccessibility::InitializeData(const AccessibilityNodeData& src) { 66 void BrowserAccessibility::InitializeData(const AccessibilityNodeData& src) {
66 DCHECK_EQ(renderer_id_, src.id); 67 DCHECK_EQ(renderer_id_, src.id);
67 name_ = src.name;
68 value_ = src.value;
69 role_ = src.role; 68 role_ = src.role;
70 state_ = src.state; 69 state_ = src.state;
71 string_attributes_ = src.string_attributes; 70 string_attributes_ = src.string_attributes;
72 int_attributes_ = src.int_attributes; 71 int_attributes_ = src.int_attributes;
73 float_attributes_ = src.float_attributes; 72 float_attributes_ = src.float_attributes;
74 bool_attributes_ = src.bool_attributes; 73 bool_attributes_ = src.bool_attributes;
74 intlist_attributes_ = src.intlist_attributes;
75 html_attributes_ = src.html_attributes; 75 html_attributes_ = src.html_attributes;
76 location_ = src.location; 76 location_ = src.location;
77 indirect_child_ids_ = src.indirect_child_ids;
78 line_breaks_ = src.line_breaks;
79 cell_ids_ = src.cell_ids;
80 unique_cell_ids_ = src.unique_cell_ids;
81 instance_active_ = true; 77 instance_active_ = true;
82 78
79 GetStringAttribute(AccessibilityNodeData::ATTR_NAME, &name_);
80 GetStringAttribute(AccessibilityNodeData::ATTR_VALUE, &value_);
81
83 PreInitialize(); 82 PreInitialize();
84 } 83 }
85 84
86 bool BrowserAccessibility::IsNative() const { 85 bool BrowserAccessibility::IsNative() const {
87 return false; 86 return false;
88 } 87 }
89 88
90 void BrowserAccessibility::SwapChildren( 89 void BrowserAccessibility::SwapChildren(
91 std::vector<BrowserAccessibility*>& children) { 90 std::vector<BrowserAccessibility*>& children) {
92 children.swap(children_); 91 children.swap(children_);
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 manager_->RemoveNode(this); 217 manager_->RemoveNode(this);
219 NativeReleaseReference(); 218 NativeReleaseReference();
220 } 219 }
221 220
222 void BrowserAccessibility::NativeReleaseReference() { 221 void BrowserAccessibility::NativeReleaseReference() {
223 delete this; 222 delete this;
224 } 223 }
225 224
226 bool BrowserAccessibility::GetBoolAttribute( 225 bool BrowserAccessibility::GetBoolAttribute(
227 BoolAttribute attribute, bool* value) const { 226 BoolAttribute attribute, bool* value) const {
228 BoolAttrMap::const_iterator iter = bool_attributes_.find(attribute); 227 for (size_t i = 0; i < bool_attributes_.size(); ++i) {
229 if (iter != bool_attributes_.end()) { 228 if (bool_attributes_[i].first == attribute) {
230 *value = iter->second; 229 *value = bool_attributes_[i].second;
231 return true; 230 return true;
231 }
232 } 232 }
233 233
234 return false; 234 return false;
235 } 235 }
236 236
237 bool BrowserAccessibility::GetFloatAttribute( 237 bool BrowserAccessibility::GetFloatAttribute(
238 FloatAttribute attribute, float* value) const { 238 FloatAttribute attribute, float* value) const {
239 FloatAttrMap::const_iterator iter = float_attributes_.find(attribute); 239 for (size_t i = 0; i < float_attributes_.size(); ++i) {
240 if (iter != float_attributes_.end()) { 240 if (float_attributes_[i].first == attribute) {
241 *value = iter->second; 241 *value = float_attributes_[i].second;
242 return true; 242 return true;
243 }
243 } 244 }
244 245
245 return false; 246 return false;
246 } 247 }
247 248
248 bool BrowserAccessibility::GetIntAttribute( 249 bool BrowserAccessibility::GetIntAttribute(
249 IntAttribute attribute, int* value) const { 250 IntAttribute attribute, int* value) const {
250 IntAttrMap::const_iterator iter = int_attributes_.find(attribute); 251 for (size_t i = 0; i < int_attributes_.size(); ++i) {
251 if (iter != int_attributes_.end()) { 252 if (int_attributes_[i].first == attribute) {
252 *value = iter->second; 253 *value = int_attributes_[i].second;
253 return true; 254 return true;
255 }
254 } 256 }
255 257
256 return false; 258 return false;
257 } 259 }
258 260
259 bool BrowserAccessibility::GetStringAttribute( 261 bool BrowserAccessibility::GetStringAttribute(
260 StringAttribute attribute, 262 StringAttribute attribute,
261 string16* value) const { 263 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.
262 StringAttrMap::const_iterator iter = string_attributes_.find(attribute); 264 for (size_t i = 0; i < string_attributes_.size(); ++i) {
263 if (iter != string_attributes_.end()) { 265 if (string_attributes_[i].first == attribute) {
264 *value = iter->second; 266 *value = string_attributes_[i].second;
265 return true; 267 return true;
268 }
266 } 269 }
267 270
268 return false; 271 return false;
269 } 272 }
270 273
274 bool BrowserAccessibility::GetStringAttribute(
275 StringAttribute attribute,
276 string16* value) const {
277 std::string value_utf8;
278 if (!GetStringAttribute(attribute, &value_utf8))
279 return false;
280 *value = UTF8ToUTF16(value_utf8);
281 return true;
282 }
283
284 void BrowserAccessibility::SetStringAttribute(
285 StringAttribute attribute, const std::string& value) {
286 for (size_t i = 0; i < string_attributes_.size(); ++i) {
287 if (string_attributes_[i].first == attribute) {
288 string_attributes_[i].second = value;
289 return;
290 }
291 }
292 if (!value.empty())
293 string_attributes_.push_back(std::make_pair(attribute, value));
294 }
295
296 const std::vector<int32>& BrowserAccessibility::GetIntListAttribute(
297 AccessibilityNodeData::IntListAttribute attribute) const {
298 CR_DEFINE_STATIC_LOCAL(std::vector<int32>, empty_vector, ());
299 for (size_t i = 0; i < intlist_attributes_.size(); ++i) {
300 if (intlist_attributes_[i].first == attribute)
301 return intlist_attributes_[i].second;
302 }
303
304 return empty_vector;
305 }
306
271 bool BrowserAccessibility::GetHtmlAttribute( 307 bool BrowserAccessibility::GetHtmlAttribute(
272 const char* html_attr, string16* value) const { 308 const char* html_attr, std::string* value) const {
273 for (size_t i = 0; i < html_attributes_.size(); i++) { 309 for (size_t i = 0; i < html_attributes_.size(); i++) {
274 const string16& attr = html_attributes_[i].first; 310 const std::string& attr = html_attributes_[i].first;
275 if (LowerCaseEqualsASCII(attr, html_attr)) { 311 if (LowerCaseEqualsASCII(attr, html_attr)) {
276 *value = html_attributes_[i].second; 312 *value = html_attributes_[i].second;
277 return true; 313 return true;
278 } 314 }
279 } 315 }
280 316
281 return false; 317 return false;
282 } 318 }
283 319
320 bool BrowserAccessibility::GetHtmlAttribute(
321 const char* html_attr, string16* value) const {
322 std::string value_utf8;
323 if (!GetHtmlAttribute(html_attr, &value_utf8))
324 return false;
325 *value = UTF8ToUTF16(value_utf8);
326 return true;
327 }
328
284 bool BrowserAccessibility::GetAriaTristate( 329 bool BrowserAccessibility::GetAriaTristate(
285 const char* html_attr, 330 const char* html_attr,
286 bool* is_defined, 331 bool* is_defined,
287 bool* is_mixed) const { 332 bool* is_mixed) const {
288 *is_defined = false; 333 *is_defined = false;
289 *is_mixed = false; 334 *is_mixed = false;
290 335
291 string16 value; 336 string16 value;
292 if (!GetHtmlAttribute(html_attr, &value) || 337 if (!GetHtmlAttribute(html_attr, &value) ||
293 value.empty() || 338 value.empty() ||
(...skipping 26 matching lines...) Expand all
320 } 365 }
321 366
322 // Note: STATE_READONLY being false means it's either a text control, 367 // Note: STATE_READONLY being false means it's either a text control,
323 // or contenteditable. We also check for editable text roles to cover 368 // or contenteditable. We also check for editable text roles to cover
324 // another element that has role=textbox set on it. 369 // another element that has role=textbox set on it.
325 return (!HasState(AccessibilityNodeData::STATE_READONLY) || 370 return (!HasState(AccessibilityNodeData::STATE_READONLY) ||
326 role_ == AccessibilityNodeData::ROLE_TEXT_FIELD || 371 role_ == AccessibilityNodeData::ROLE_TEXT_FIELD ||
327 role_ == AccessibilityNodeData::ROLE_TEXTAREA); 372 role_ == AccessibilityNodeData::ROLE_TEXTAREA);
328 } 373 }
329 374
330 string16 BrowserAccessibility::GetTextRecursive() const { 375 std::string BrowserAccessibility::GetTextRecursive() const {
331 if (!name_.empty()) { 376 if (!name_.empty()) {
332 return name_; 377 return name_;
333 } 378 }
334 379
335 string16 result; 380 std::string result;
336 for (size_t i = 0; i < children_.size(); ++i) 381 for (size_t i = 0; i < children_.size(); ++i)
337 result += children_[i]->GetTextRecursive(); 382 result += children_[i]->GetTextRecursive();
338 return result; 383 return result;
339 } 384 }
340 385
341 } // namespace content 386 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698