| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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_android.h" | 5 #include "content/browser/accessibility/browser_accessibility_android.h" |
| 6 | 6 |
| 7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
| 8 #include "content/browser/accessibility/browser_accessibility_manager_android.h" | 8 #include "content/browser/accessibility/browser_accessibility_manager_android.h" |
| 9 #include "content/common/accessibility_messages.h" | 9 #include "content/common/accessibility_messages.h" |
| 10 | 10 |
| (...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 320 text = help; | 320 text = help; |
| 321 else if (!name().empty()) | 321 else if (!name().empty()) |
| 322 text = base::UTF8ToUTF16(name()); | 322 text = base::UTF8ToUTF16(name()); |
| 323 else if (GetRole() == ui::AX_ROLE_TEXT_FIELD && !placeholder.empty()) | 323 else if (GetRole() == ui::AX_ROLE_TEXT_FIELD && !placeholder.empty()) |
| 324 text = placeholder; | 324 text = placeholder; |
| 325 else if (!value().empty()) | 325 else if (!value().empty()) |
| 326 text = base::UTF8ToUTF16(value()); | 326 text = base::UTF8ToUTF16(value()); |
| 327 | 327 |
| 328 // This is called from PlatformIsLeaf, so don't call PlatformChildCount | 328 // This is called from PlatformIsLeaf, so don't call PlatformChildCount |
| 329 // from within this! | 329 // from within this! |
| 330 if (text.empty() && HasOnlyStaticTextChildren()) { | 330 if (text.empty() && |
| 331 (HasOnlyStaticTextChildren() || |
| 332 (IsFocusable() && HasOnlyTextAndImageChildren()))) { |
| 331 for (uint32 i = 0; i < InternalChildCount(); i++) { | 333 for (uint32 i = 0; i < InternalChildCount(); i++) { |
| 332 BrowserAccessibility* child = InternalGetChild(i); | 334 BrowserAccessibility* child = InternalGetChild(i); |
| 333 text += static_cast<BrowserAccessibilityAndroid*>(child)->GetText(); | 335 text += static_cast<BrowserAccessibilityAndroid*>(child)->GetText(); |
| 334 } | 336 } |
| 335 } | 337 } |
| 336 | 338 |
| 337 if (text.empty() && IsLink()) { | 339 if (text.empty() && (IsLink() || GetRole() == ui::AX_ROLE_IMAGE)) { |
| 338 base::string16 url = GetString16Attribute(ui::AX_ATTR_URL); | 340 base::string16 url = GetString16Attribute(ui::AX_ATTR_URL); |
| 339 // Given a url like http://foo.com/bar/baz.png, just return the | 341 // Given a url like http://foo.com/bar/baz.png, just return the |
| 340 // base name, e.g., "baz". | 342 // base name, e.g., "baz". |
| 341 int trailing_slashes = 0; | 343 int trailing_slashes = 0; |
| 342 while (url.size() - trailing_slashes > 0 && | 344 while (url.size() - trailing_slashes > 0 && |
| 343 url[url.size() - trailing_slashes - 1] == '/') { | 345 url[url.size() - trailing_slashes - 1] == '/') { |
| 344 trailing_slashes++; | 346 trailing_slashes++; |
| 345 } | 347 } |
| 346 if (trailing_slashes) | 348 if (trailing_slashes) |
| 347 url = url.substr(0, url.size() - trailing_slashes); | 349 url = url.substr(0, url.size() - trailing_slashes); |
| (...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 614 // This is called from PlatformIsLeaf, so don't call PlatformChildCount | 616 // This is called from PlatformIsLeaf, so don't call PlatformChildCount |
| 615 // from within this! | 617 // from within this! |
| 616 for (uint32 i = 0; i < InternalChildCount(); i++) { | 618 for (uint32 i = 0; i < InternalChildCount(); i++) { |
| 617 BrowserAccessibility* child = InternalGetChild(i); | 619 BrowserAccessibility* child = InternalGetChild(i); |
| 618 if (child->GetRole() != ui::AX_ROLE_STATIC_TEXT) | 620 if (child->GetRole() != ui::AX_ROLE_STATIC_TEXT) |
| 619 return false; | 621 return false; |
| 620 } | 622 } |
| 621 return true; | 623 return true; |
| 622 } | 624 } |
| 623 | 625 |
| 626 bool BrowserAccessibilityAndroid::HasOnlyTextAndImageChildren() const { |
| 627 // This is called from PlatformIsLeaf, so don't call PlatformChildCount |
| 628 // from within this! |
| 629 for (uint32 i = 0; i < InternalChildCount(); i++) { |
| 630 BrowserAccessibility* child = InternalGetChild(i); |
| 631 if (child->GetRole() != ui::AX_ROLE_STATIC_TEXT && |
| 632 child->GetRole() != ui::AX_ROLE_IMAGE) { |
| 633 return false; |
| 634 } |
| 635 } |
| 636 return true; |
| 637 } |
| 638 |
| 624 bool BrowserAccessibilityAndroid::IsIframe() const { | 639 bool BrowserAccessibilityAndroid::IsIframe() const { |
| 625 base::string16 html_tag = GetString16Attribute( | 640 base::string16 html_tag = GetString16Attribute( |
| 626 ui::AX_ATTR_HTML_TAG); | 641 ui::AX_ATTR_HTML_TAG); |
| 627 return html_tag == base::ASCIIToUTF16("iframe"); | 642 return html_tag == base::ASCIIToUTF16("iframe"); |
| 628 } | 643 } |
| 629 | 644 |
| 630 void BrowserAccessibilityAndroid::OnDataChanged() { | 645 void BrowserAccessibilityAndroid::OnDataChanged() { |
| 631 BrowserAccessibility::OnDataChanged(); | 646 BrowserAccessibility::OnDataChanged(); |
| 632 | 647 |
| 633 if (IsEditableText()) { | 648 if (IsEditableText()) { |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 668 int BrowserAccessibilityAndroid::CountChildrenWithRole(ui::AXRole role) const { | 683 int BrowserAccessibilityAndroid::CountChildrenWithRole(ui::AXRole role) const { |
| 669 int count = 0; | 684 int count = 0; |
| 670 for (uint32 i = 0; i < PlatformChildCount(); i++) { | 685 for (uint32 i = 0; i < PlatformChildCount(); i++) { |
| 671 if (PlatformGetChild(i)->GetRole() == role) | 686 if (PlatformGetChild(i)->GetRole() == role) |
| 672 count++; | 687 count++; |
| 673 } | 688 } |
| 674 return count; | 689 return count; |
| 675 } | 690 } |
| 676 | 691 |
| 677 } // namespace content | 692 } // namespace content |
| OLD | NEW |