summaryrefslogtreecommitdiffstats
path: root/chrome/browser/accessibility
diff options
context:
space:
mode:
authorctguil@chromium.org <ctguil@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-11 06:53:52 +0000
committerctguil@chromium.org <ctguil@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-11 06:53:52 +0000
commit5c74bfa3c1ccb2a9ff9f7c7c79675caf72223981 (patch)
tree279292055bba4a7b962969924776b0b25f0cf7ad /chrome/browser/accessibility
parent0897a12393f6c2535f3840258b7b438ed1166adf (diff)
downloadchromium_src-5c74bfa3c1ccb2a9ff9f7c7c79675caf72223981.zip
chromium_src-5c74bfa3c1ccb2a9ff9f7c7c79675caf72223981.tar.gz
chromium_src-5c74bfa3c1ccb2a9ff9f7c7c79675caf72223981.tar.bz2
IAccessibleText::get_text must support special text offsets.
BUG=82224 TEST=unit_tests:BrowserAccessibilityTest.TestTextBoundaries Review URL: http://codereview.chromium.org/6995040 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@84948 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/accessibility')
-rw-r--r--chrome/browser/accessibility/browser_accessibility_win.cc19
-rw-r--r--chrome/browser/accessibility/browser_accessibility_win.h4
-rw-r--r--chrome/browser/accessibility/browser_accessibility_win_unittest.cc4
3 files changed, 22 insertions, 5 deletions
diff --git a/chrome/browser/accessibility/browser_accessibility_win.cc b/chrome/browser/accessibility/browser_accessibility_win.cc
index 80e4e48..a217f05 100644
--- a/chrome/browser/accessibility/browser_accessibility_win.cc
+++ b/chrome/browser/accessibility/browser_accessibility_win.cc
@@ -640,6 +640,10 @@ STDMETHODIMP BrowserAccessibilityWin::get_text(
const string16& text_str = TextForIAccessibleText();
+ // Handle special text offsets.
+ HandleSpecialTextOffset(text_str, &start_offset);
+ HandleSpecialTextOffset(text_str, &end_offset);
+
// The spec allows the arguments to be reversed.
if (start_offset > end_offset) {
LONG tmp = start_offset;
@@ -1205,6 +1209,15 @@ const string16& BrowserAccessibilityWin::TextForIAccessibleText() {
}
}
+void BrowserAccessibilityWin::HandleSpecialTextOffset(
+ const string16& text, LONG* offset) {
+ if (*offset == IA2_TEXT_OFFSET_LENGTH) {
+ *offset = static_cast<LONG>(text.size());
+ } else if (*offset == IA2_TEXT_OFFSET_CARET) {
+ get_caretOffset(offset);
+ }
+}
+
LONG BrowserAccessibilityWin::FindBoundary(
const string16& text,
IA2TextBoundaryType boundary,
@@ -1216,11 +1229,7 @@ LONG BrowserAccessibilityWin::FindBoundary(
start_offset == IA2_TEXT_OFFSET_CARET);
DCHECK(direction == 1 || direction == -1);
- if (start_offset == IA2_TEXT_OFFSET_LENGTH) {
- start_offset = text_size;
- } else if (start_offset == IA2_TEXT_OFFSET_CARET) {
- get_caretOffset(&start_offset);
- }
+ HandleSpecialTextOffset(text, &start_offset);
if (boundary == IA2_TEXT_BOUNDARY_CHAR) {
if (direction == 1 && start_offset < text_size)
diff --git a/chrome/browser/accessibility/browser_accessibility_win.h b/chrome/browser/accessibility/browser_accessibility_win.h
index 879a7dc..78d0ecd 100644
--- a/chrome/browser/accessibility/browser_accessibility_win.h
+++ b/chrome/browser/accessibility/browser_accessibility_win.h
@@ -470,6 +470,10 @@ class BrowserAccessibilityWin
// be the name, it may be the value, etc. depending on the role.
const string16& TextForIAccessibleText();
+ // If offset is a member of IA2TextSpecialOffsets this function updates the
+ // value of offset and returns, otherwise offset remains unchanged.
+ void HandleSpecialTextOffset(const string16& text, LONG* offset);
+
// Search forwards (direction == 1) or backwards (direction == -1) from
// the given offset until the given IAccessible2 boundary (like word,
// sentence) is found, and return its offset.
diff --git a/chrome/browser/accessibility/browser_accessibility_win_unittest.cc b/chrome/browser/accessibility/browser_accessibility_win_unittest.cc
index 4875130..e40d505 100644
--- a/chrome/browser/accessibility/browser_accessibility_win_unittest.cc
+++ b/chrome/browser/accessibility/browser_accessibility_win_unittest.cc
@@ -358,6 +358,10 @@ TEST_F(BrowserAccessibilityTest, TestTextBoundaries) {
ASSERT_EQ(text, string16(L"One two three"));
SysFreeString(text);
+ ASSERT_EQ(S_OK, text1_obj->get_text(0, IA2_TEXT_OFFSET_LENGTH, &text));
+ ASSERT_EQ(text, string16(L"One two three.\nFour five six."));
+ SysFreeString(text);
+
// Delete the manager and test that all BrowserAccessibility instances are
// deleted.
delete manager;