summaryrefslogtreecommitdiffstats
path: root/chrome/browser/renderer_host
diff options
context:
space:
mode:
authordmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-01 19:52:04 +0000
committerdmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-10-01 19:52:04 +0000
commitbd554c644039736cf4eb3944f63b7a8e87c449d9 (patch)
treec10f024ecd6f3a5665c4eacf6a9c0c81f866a9b1 /chrome/browser/renderer_host
parent017091110712afd7f2bdba2ab9c97f51d06c87b5 (diff)
downloadchromium_src-bd554c644039736cf4eb3944f63b7a8e87c449d9.zip
chromium_src-bd554c644039736cf4eb3944f63b7a8e87c449d9.tar.gz
chromium_src-bd554c644039736cf4eb3944f63b7a8e87c449d9.tar.bz2
Make the selection start and end attributes of an html input control
accessible, implement IAccessibleText methods to retrieve this info, and post a notification when the cursor moves within a text field. BUG=none TEST=Added new test to renderer_accessibility_browsertest Review URL: http://codereview.chromium.org/3389037 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@61216 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/renderer_host')
-rw-r--r--chrome/browser/renderer_host/test/renderer_accessibility_browsertest.cc88
1 files changed, 75 insertions, 13 deletions
diff --git a/chrome/browser/renderer_host/test/renderer_accessibility_browsertest.cc b/chrome/browser/renderer_host/test/renderer_accessibility_browsertest.cc
index b12c6a7..ff93b3d 100644
--- a/chrome/browser/renderer_host/test/renderer_accessibility_browsertest.cc
+++ b/chrome/browser/renderer_host/test/renderer_accessibility_browsertest.cc
@@ -30,6 +30,20 @@ class RendererAccessibilityBrowserTest : public InProcessBrowserTest {
public:
RendererAccessibilityBrowserTest() {}
+ // Tell the renderer to send an accessibility tree, then wait for the
+ // notification that it's been received.
+ const WebAccessibility& GetWebAccessibilityTree() {
+ RenderWidgetHostView* host_view =
+ browser()->GetSelectedTabContents()->GetRenderWidgetHostView();
+ RenderWidgetHost* host = host_view->GetRenderWidgetHost();
+ RenderViewHost* view_host = static_cast<RenderViewHost*>(host);
+ view_host->set_save_accessibility_tree_for_testing(true);
+ view_host->EnableRendererAccessibility();
+ ui_test_utils::WaitForNotification(
+ NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED);
+ return view_host->accessibility_tree();
+ }
+
// InProcessBrowserTest
void SetUpInProcessBrowserTestFixture();
void TearDownInProcessBrowserTestFixture();
@@ -55,6 +69,7 @@ void RendererAccessibilityBrowserTest::TearDownInProcessBrowserTestFixture() {
::CoUninitialize();
#endif
}
+
// Convenience method to get the value of a particular WebAccessibility
// node attribute as a UTF-8 const char*.
std::string RendererAccessibilityBrowserTest::GetAttr(
@@ -67,7 +82,7 @@ std::string RendererAccessibilityBrowserTest::GetAttr(
}
IN_PROC_BROWSER_TEST_F(RendererAccessibilityBrowserTest,
- TestCrossPlatformAccessibilityTree) {
+ CrossPlatformWebpageAccessibility) {
// Create a data url and load it.
const char url_str[] =
"data:text/html,"
@@ -77,20 +92,9 @@ IN_PROC_BROWSER_TEST_F(RendererAccessibilityBrowserTest,
"</body></html>";
GURL url(url_str);
browser()->OpenURL(url, GURL(), CURRENT_TAB, PageTransition::TYPED);
-
- // Tell the renderer to send an accessibility tree, then wait for the
- // notification that it's been received.
- RenderWidgetHostView* host_view =
- browser()->GetSelectedTabContents()->GetRenderWidgetHostView();
- RenderWidgetHost* host = host_view->GetRenderWidgetHost();
- RenderViewHost* view_host = static_cast<RenderViewHost*>(host);
- view_host->set_save_accessibility_tree_for_testing(true);
- view_host->EnableRendererAccessibility();
- ui_test_utils::WaitForNotification(
- NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED);
+ const WebAccessibility& tree = GetWebAccessibilityTree();
// Check properties of the root element of the tree.
- const WebAccessibility& tree = view_host->accessibility_tree();
EXPECT_STREQ(url_str, GetAttr(tree, WebAccessibility::ATTR_DOC_URL).c_str());
EXPECT_STREQ(
"Accessibility Test",
@@ -139,4 +143,62 @@ IN_PROC_BROWSER_TEST_F(RendererAccessibilityBrowserTest,
"checkbox", UTF16ToUTF8(checkbox.html_attributes[0].second).c_str());
}
+IN_PROC_BROWSER_TEST_F(RendererAccessibilityBrowserTest,
+ CrossPlatformUnselectedEditableTextAccessibility) {
+ // Create a data url and load it.
+ const char url_str[] =
+ "data:text/html,"
+ "<!doctype html>"
+ "<body>"
+ "<input value=\"Hello, world.\"/>"
+ "</body></html>";
+ GURL url(url_str);
+ browser()->OpenURL(url, GURL(), CURRENT_TAB, PageTransition::TYPED);
+
+ const WebAccessibility& tree = GetWebAccessibilityTree();
+ ASSERT_EQ(1U, tree.children.size());
+ const WebAccessibility& body = tree.children[0];
+ ASSERT_EQ(1U, body.children.size());
+ const WebAccessibility& text = body.children[0];
+ EXPECT_EQ(WebAccessibility::ROLE_TEXT_FIELD, text.role);
+ EXPECT_STREQ(
+ "input", GetAttr(text, WebAccessibility::ATTR_HTML_TAG).c_str());
+ EXPECT_STREQ(
+ "0", GetAttr(text, WebAccessibility::ATTR_TEXT_SEL_START).c_str());
+ EXPECT_STREQ(
+ "0", GetAttr(text, WebAccessibility::ATTR_TEXT_SEL_END).c_str());
+ EXPECT_STREQ("Hello, world.", UTF16ToUTF8(text.value).c_str());
+
+ // TODO(dmazzoni): as soon as more accessibility code is cross-platform,
+ // this code should test that the accessible info is dynamically updated
+ // if the selection or value changes.
+}
+
+IN_PROC_BROWSER_TEST_F(RendererAccessibilityBrowserTest,
+ CrossPlatformSelectedEditableTextAccessibility) {
+ // Create a data url and load it.
+ const char url_str[] =
+ "data:text/html,"
+ "<!doctype html>"
+ "<body onload=\"document.body.children[0].select();\">"
+ "<input value=\"Hello, world.\"/>"
+ "</body></html>";
+ GURL url(url_str);
+ browser()->OpenURL(url, GURL(), CURRENT_TAB, PageTransition::TYPED);
+
+ const WebAccessibility& tree = GetWebAccessibilityTree();
+ ASSERT_EQ(1U, tree.children.size());
+ const WebAccessibility& body = tree.children[0];
+ ASSERT_EQ(1U, body.children.size());
+ const WebAccessibility& text = body.children[0];
+ EXPECT_EQ(WebAccessibility::ROLE_TEXT_FIELD, text.role);
+ EXPECT_STREQ(
+ "input", GetAttr(text, WebAccessibility::ATTR_HTML_TAG).c_str());
+ EXPECT_STREQ(
+ "0", GetAttr(text, WebAccessibility::ATTR_TEXT_SEL_START).c_str());
+ EXPECT_STREQ(
+ "13", GetAttr(text, WebAccessibility::ATTR_TEXT_SEL_END).c_str());
+ EXPECT_STREQ("Hello, world.", UTF16ToUTF8(text.value).c_str());
+}
+
} // namespace