diff options
author | dmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-30 18:45:22 +0000 |
---|---|---|
committer | dmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-30 18:45:22 +0000 |
commit | 93941b8f95ce6b16d8b702ef9d6544c7c7792fc6 (patch) | |
tree | 9634f767c2bdc8fd2bf5016550529b3673beb0aa /chrome/browser/accessibility | |
parent | 7d0cb5c3def22e4d9dc957782e0ef4ca484c0d6a (diff) | |
download | chromium_src-93941b8f95ce6b16d8b702ef9d6544c7c7792fc6.zip chromium_src-93941b8f95ce6b16d8b702ef9d6544c7c7792fc6.tar.gz chromium_src-93941b8f95ce6b16d8b702ef9d6544c7c7792fc6.tar.bz2 |
Implement correct accessibility states for contenteditable.
This implements the correct MSAA states for regions that are
contenteditable and correctly marks such regions as editable
text that should bring up the Win 8 touch keyboard. Adds
coverage to one existing test, and enables for the first time
a contenteditable test that didn't pass before.
Also improves some test logging and fixes a previously failing test.
BUG=123205,128303,106957
TEST=Contenteditable brings up touch keyboard on Win 8.
TBR=brettw
Review URL: https://chromiumcodereview.appspot.com/10443014
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@139591 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/accessibility')
-rw-r--r-- | chrome/browser/accessibility/accessibility_win_browsertest.cc | 43 |
1 files changed, 35 insertions, 8 deletions
diff --git a/chrome/browser/accessibility/accessibility_win_browsertest.cc b/chrome/browser/accessibility/accessibility_win_browsertest.cc index dcbc9ac..6b74e83 100644 --- a/chrome/browser/accessibility/accessibility_win_browsertest.cc +++ b/chrome/browser/accessibility/accessibility_win_browsertest.cc @@ -6,6 +6,7 @@ #include <vector> #include "base/memory/scoped_ptr.h" +#include "base/stringprintf.h" #include "base/utf_string_conversions.h" #include "base/win/scoped_comptr.h" #include "chrome/browser/ui/browser.h" @@ -18,6 +19,7 @@ #include "content/public/browser/render_view_host.h" #include "content/public/browser/render_widget_host_view.h" #include "content/public/browser/web_contents.h" +#include "content/test/accessibility_test_utils_win.h" #include "content/test/test_renderer_host.h" #include "third_party/iaccessible2/ia2_api_all.h" #include "third_party/isimpledom/ISimpleDOMNode.h" @@ -88,6 +90,7 @@ class AccessibleChecker { void CheckAccessibleValue(IAccessible* accessible); void CheckAccessibleState(IAccessible* accessible); void CheckAccessibleChildren(IAccessible* accessible); + string16 RoleVariantToString(VARIANT* role_variant); private: typedef vector<AccessibleChecker*> AccessibleCheckerVector; @@ -272,6 +275,9 @@ void AccessibleChecker::AppendExpectedChild( } void AccessibleChecker::CheckAccessible(IAccessible* accessible) { + SCOPED_TRACE(base::StringPrintf( + "while checking %s", + UTF16ToUTF8(RoleVariantToString(&role_)).c_str())); CheckAccessibleName(accessible); CheckAccessibleRole(accessible); CheckIA2Role(accessible); @@ -309,7 +315,11 @@ void AccessibleChecker::CheckAccessibleRole(IAccessible* accessible) { HRESULT hr = accessible->get_accRole(CreateI4Variant(CHILDID_SELF), &var_role); ASSERT_EQ(S_OK, hr); - EXPECT_TRUE(role_ == var_role); + EXPECT_EQ(role_, var_role); + if (role_ != var_role) { + LOG(ERROR) << "Expected role: " << RoleVariantToString(&role_); + LOG(ERROR) << "Got role: " << RoleVariantToString(&var_role); + } } void AccessibleChecker::CheckIA2Role(IAccessible* accessible) { @@ -320,6 +330,10 @@ void AccessibleChecker::CheckIA2Role(IAccessible* accessible) { hr = accessible2->role(&ia2_role); ASSERT_EQ(S_OK, hr); EXPECT_EQ(ia2_role_, ia2_role); + if (ia2_role_ != ia2_role) { + LOG(ERROR) << "Expected ia2 role: " << IAccessible2RoleToString(ia2_role_); + LOG(ERROR) << "Got ia2 role: " << IAccessible2RoleToString(ia2_role); + } } void AccessibleChecker::CheckAccessibleValue(IAccessible* accessible) { @@ -343,6 +357,10 @@ void AccessibleChecker::CheckAccessibleState(IAccessible* accessible) { EXPECT_EQ(S_OK, hr); ASSERT_EQ(VT_I4, V_VT(&var_state)); EXPECT_EQ(state_, V_I4(&var_state)); + if (state_ != V_I4(&var_state)) { + LOG(ERROR) << "Expected state: " << IAccessibleStateToString(state_); + LOG(ERROR) << "Got state: " << IAccessibleStateToString(V_I4(&var_state)); + } } void AccessibleChecker::CheckAccessibleChildren(IAccessible* parent) { @@ -369,9 +387,16 @@ void AccessibleChecker::CheckAccessibleChildren(IAccessible* parent) { } } -// See http://crbug.com/102725 +string16 AccessibleChecker::RoleVariantToString(VARIANT* role_variant) { + if (V_VT(role_variant) == VT_I4) + return IAccessibleRoleToString(V_I4(role_variant)); + else if (V_VT(role_variant) == VT_BSTR) + return string16(V_BSTR(role_variant), SysStringLen(V_BSTR(role_variant))); + return string16(); +} + IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, - FAILS_TestRendererAccessibilityTree) { + TestRendererAccessibilityTree) { ui_test_utils::WindowedNotificationObserver tree_updated_observer1( content::NOTIFICATION_RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED, content::NotificationService::AllSources()); @@ -402,7 +427,7 @@ IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, tree_updated_observer2.Wait(); // Check the browser's copy of the renderer accessibility tree. - AccessibleChecker button_checker(L"push", ROLE_SYSTEM_PUSHBUTTON, L"push"); + AccessibleChecker button_checker(L"push", ROLE_SYSTEM_PUSHBUTTON, L""); AccessibleChecker checkbox_checker(L"", ROLE_SYSTEM_CHECKBUTTON, L""); AccessibleChecker body_checker(L"", L"body", IA2_ROLE_SECTION, L""); AccessibleChecker document2_checker( @@ -604,9 +629,10 @@ IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, tree_updated_observer1.Wait(); // Check the browser's copy of the renderer accessibility tree. + SCOPED_TRACE("Check initial tree"); AccessibleChecker group_checker(L"", ROLE_SYSTEM_GROUPING, L""); group_checker.SetExpectedState( - STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_OFFSCREEN | STATE_SYSTEM_READONLY); + STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_OFFSCREEN); AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); document_checker.AppendExpectedChild(&group_checker); document_checker.CheckAccessible(GetRendererAccessible()); @@ -619,8 +645,9 @@ IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, tree_updated_observer2.Wait(); // Check that the accessibility tree of the browser has been updated. + SCOPED_TRACE("Check updated tree after focusing div"); group_checker.SetExpectedState( - STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY | STATE_SYSTEM_FOCUSED); + STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_FOCUSED); document_checker.CheckAccessible(GetRendererAccessible()); // Focus the document accessible. This will un-focus the current node. @@ -636,8 +663,8 @@ IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, tree_updated_observer3.Wait(); // Check that the accessibility tree of the browser has been updated. - group_checker.SetExpectedState( - STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY); + SCOPED_TRACE("Check updated tree after focusing document again"); + group_checker.SetExpectedState(STATE_SYSTEM_FOCUSABLE); document_checker.CheckAccessible(GetRendererAccessible()); } |