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

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 win test 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 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 215
217 instance_active_ = false; 216 instance_active_ = false;
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::HasBoolAttribute(BoolAttribute attribute) const {
227 BoolAttribute attribute, bool* value) const { 226 for (size_t i = 0; i < bool_attributes_.size(); ++i) {
228 BoolAttrMap::const_iterator iter = bool_attributes_.find(attribute); 227 if (bool_attributes_[i].first == attribute)
229 if (iter != bool_attributes_.end()) { 228 return true;
230 *value = iter->second;
231 return true;
232 } 229 }
233 230
234 return false; 231 return false;
235 } 232 }
236 233
237 bool BrowserAccessibility::GetFloatAttribute( 234
238 FloatAttribute attribute, float* value) const { 235 bool BrowserAccessibility::GetBoolAttribute(BoolAttribute attribute) const {
239 FloatAttrMap::const_iterator iter = float_attributes_.find(attribute); 236 for (size_t i = 0; i < bool_attributes_.size(); ++i) {
240 if (iter != float_attributes_.end()) { 237 if (bool_attributes_[i].first == attribute)
241 *value = iter->second; 238 return bool_attributes_[i].second;
242 return true;
243 } 239 }
244 240
245 return false; 241 return false;
246 } 242 }
247 243
248 bool BrowserAccessibility::GetIntAttribute( 244 bool BrowserAccessibility::GetBoolAttribute(
249 IntAttribute attribute, int* value) const { 245 BoolAttribute attribute, bool* value) const {
250 IntAttrMap::const_iterator iter = int_attributes_.find(attribute); 246 for (size_t i = 0; i < bool_attributes_.size(); ++i) {
251 if (iter != int_attributes_.end()) { 247 if (bool_attributes_[i].first == attribute) {
252 *value = iter->second; 248 *value = bool_attributes_[i].second;
253 return true; 249 return true;
250 }
254 } 251 }
255 252
256 return false; 253 return false;
257 } 254 }
258 255
256 bool BrowserAccessibility::HasFloatAttribute(FloatAttribute attribute) const {
257 for (size_t i = 0; i < float_attributes_.size(); ++i) {
258 if (float_attributes_[i].first == attribute)
259 return true;
260 }
261
262 return false;
263 }
264
265 float BrowserAccessibility::GetFloatAttribute(FloatAttribute attribute) const {
266 for (size_t i = 0; i < float_attributes_.size(); ++i) {
267 if (float_attributes_[i].first == attribute)
268 return float_attributes_[i].second;
269 }
270
271 return 0.0;
272 }
273
274 bool BrowserAccessibility::GetFloatAttribute(
275 FloatAttribute attribute, float* value) const {
276 for (size_t i = 0; i < float_attributes_.size(); ++i) {
277 if (float_attributes_[i].first == attribute) {
278 *value = float_attributes_[i].second;
279 return true;
280 }
281 }
282
283 return false;
284 }
285
286 bool BrowserAccessibility::HasIntAttribute(IntAttribute attribute) const {
287 for (size_t i = 0; i < int_attributes_.size(); ++i) {
288 if (int_attributes_[i].first == attribute)
289 return true;
290 }
291
292 return false;
293 }
294
295 int BrowserAccessibility::GetIntAttribute(IntAttribute attribute) const {
296 for (size_t i = 0; i < int_attributes_.size(); ++i) {
297 if (int_attributes_[i].first == attribute)
298 return int_attributes_[i].second;
299 }
300
301 return 0;
302 }
303
304 bool BrowserAccessibility::GetIntAttribute(
305 IntAttribute attribute, int* value) const {
306 for (size_t i = 0; i < int_attributes_.size(); ++i) {
307 if (int_attributes_[i].first == attribute) {
308 *value = int_attributes_[i].second;
309 return true;
310 }
311 }
312
313 return false;
314 }
315
316 bool BrowserAccessibility::HasStringAttribute(StringAttribute attribute) const {
317 for (size_t i = 0; i < string_attributes_.size(); ++i) {
318 if (string_attributes_[i].first == attribute)
319 return true;
320 }
321
322 return false;
323 }
324
325 const std::string& BrowserAccessibility::GetStringAttribute(
326 StringAttribute attribute) const {
327 CR_DEFINE_STATIC_LOCAL(std::string, empty_string, ());
328 for (size_t i = 0; i < string_attributes_.size(); ++i) {
329 if (string_attributes_[i].first == attribute)
330 return string_attributes_[i].second;
331 }
332
333 return empty_string;
334 }
335
259 bool BrowserAccessibility::GetStringAttribute( 336 bool BrowserAccessibility::GetStringAttribute(
337 StringAttribute attribute, std::string* value) const {
338 for (size_t i = 0; i < string_attributes_.size(); ++i) {
339 if (string_attributes_[i].first == attribute) {
340 *value = string_attributes_[i].second;
341 return true;
342 }
343 }
344
345 return false;
346 }
347
348 string16 BrowserAccessibility::GetString16Attribute(
349 StringAttribute attribute) const {
350 std::string value_utf8;
351 if (!GetStringAttribute(attribute, &value_utf8))
352 return string16();
353 return UTF8ToUTF16(value_utf8);
354 }
355
356 bool BrowserAccessibility::GetString16Attribute(
260 StringAttribute attribute, 357 StringAttribute attribute,
261 string16* value) const { 358 string16* value) const {
262 StringAttrMap::const_iterator iter = string_attributes_.find(attribute); 359 std::string value_utf8;
263 if (iter != string_attributes_.end()) { 360 if (!GetStringAttribute(attribute, &value_utf8))
264 *value = iter->second; 361 return false;
265 return true; 362 *value = UTF8ToUTF16(value_utf8);
363 return true;
364 }
365
366 void BrowserAccessibility::SetStringAttribute(
367 StringAttribute attribute, const std::string& value) {
368 for (size_t i = 0; i < string_attributes_.size(); ++i) {
369 if (string_attributes_[i].first == attribute) {
370 string_attributes_[i].second = value;
371 return;
372 }
373 }
374 if (!value.empty())
375 string_attributes_.push_back(std::make_pair(attribute, value));
376 }
377
378 bool BrowserAccessibility::HasIntListAttribute(
379 AccessibilityNodeData::IntListAttribute attribute) const {
380 for (size_t i = 0; i < intlist_attributes_.size(); ++i) {
381 if (intlist_attributes_[i].first == attribute)
382 return true;
383 }
384
385 return false;
386 }
387
388 const std::vector<int32>& BrowserAccessibility::GetIntListAttribute(
389 AccessibilityNodeData::IntListAttribute attribute) const {
390 CR_DEFINE_STATIC_LOCAL(std::vector<int32>, empty_vector, ());
391 for (size_t i = 0; i < intlist_attributes_.size(); ++i) {
392 if (intlist_attributes_[i].first == attribute)
393 return intlist_attributes_[i].second;
394 }
395
396 return empty_vector;
397 }
398
399 bool BrowserAccessibility::GetIntListAttribute(
400 AccessibilityNodeData::IntListAttribute attribute,
401 std::vector<int32>* value) const {
402 for (size_t i = 0; i < intlist_attributes_.size(); ++i) {
403 if (intlist_attributes_[i].first == attribute) {
404 *value = intlist_attributes_[i].second;
405 return true;
406 }
266 } 407 }
267 408
268 return false; 409 return false;
269 } 410 }
270 411
271 bool BrowserAccessibility::GetHtmlAttribute( 412 bool BrowserAccessibility::GetHtmlAttribute(
272 const char* html_attr, string16* value) const { 413 const char* html_attr, std::string* value) const {
273 for (size_t i = 0; i < html_attributes_.size(); i++) { 414 for (size_t i = 0; i < html_attributes_.size(); i++) {
274 const string16& attr = html_attributes_[i].first; 415 const std::string& attr = html_attributes_[i].first;
275 if (LowerCaseEqualsASCII(attr, html_attr)) { 416 if (LowerCaseEqualsASCII(attr, html_attr)) {
276 *value = html_attributes_[i].second; 417 *value = html_attributes_[i].second;
277 return true; 418 return true;
278 } 419 }
279 } 420 }
280 421
281 return false; 422 return false;
282 } 423 }
283 424
425 bool BrowserAccessibility::GetHtmlAttribute(
426 const char* html_attr, string16* value) const {
427 std::string value_utf8;
428 if (!GetHtmlAttribute(html_attr, &value_utf8))
429 return false;
430 *value = UTF8ToUTF16(value_utf8);
431 return true;
432 }
433
284 bool BrowserAccessibility::GetAriaTristate( 434 bool BrowserAccessibility::GetAriaTristate(
285 const char* html_attr, 435 const char* html_attr,
286 bool* is_defined, 436 bool* is_defined,
287 bool* is_mixed) const { 437 bool* is_mixed) const {
288 *is_defined = false; 438 *is_defined = false;
289 *is_mixed = false; 439 *is_mixed = false;
290 440
291 string16 value; 441 string16 value;
292 if (!GetHtmlAttribute(html_attr, &value) || 442 if (!GetHtmlAttribute(html_attr, &value) ||
293 value.empty() || 443 value.empty() ||
(...skipping 26 matching lines...) Expand all
320 } 470 }
321 471
322 // Note: STATE_READONLY being false means it's either a text control, 472 // Note: STATE_READONLY being false means it's either a text control,
323 // or contenteditable. We also check for editable text roles to cover 473 // or contenteditable. We also check for editable text roles to cover
324 // another element that has role=textbox set on it. 474 // another element that has role=textbox set on it.
325 return (!HasState(AccessibilityNodeData::STATE_READONLY) || 475 return (!HasState(AccessibilityNodeData::STATE_READONLY) ||
326 role_ == AccessibilityNodeData::ROLE_TEXT_FIELD || 476 role_ == AccessibilityNodeData::ROLE_TEXT_FIELD ||
327 role_ == AccessibilityNodeData::ROLE_TEXTAREA); 477 role_ == AccessibilityNodeData::ROLE_TEXTAREA);
328 } 478 }
329 479
330 string16 BrowserAccessibility::GetTextRecursive() const { 480 std::string BrowserAccessibility::GetTextRecursive() const {
331 if (!name_.empty()) { 481 if (!name_.empty()) {
332 return name_; 482 return name_;
333 } 483 }
334 484
335 string16 result; 485 std::string result;
336 for (size_t i = 0; i < children_.size(); ++i) 486 for (size_t i = 0; i < children_.size(); ++i)
337 result += children_[i]->GetTextRecursive(); 487 result += children_[i]->GetTextRecursive();
338 return result; 488 return result;
339 } 489 }
340 490
341 } // namespace content 491 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/accessibility/browser_accessibility.h ('k') | content/browser/accessibility/browser_accessibility_android.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698