diff options
author | dmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-01 19:52:04 +0000 |
---|---|---|
committer | dmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-10-01 19:52:04 +0000 |
commit | bd554c644039736cf4eb3944f63b7a8e87c449d9 (patch) | |
tree | c10f024ecd6f3a5665c4eacf6a9c0c81f866a9b1 /chrome/browser/renderer_host | |
parent | 017091110712afd7f2bdba2ab9c97f51d06c87b5 (diff) | |
download | chromium_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.cc | 88 |
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 |