Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4630)

Unified Diff: chrome/browser/accessibility_win_browsertest.cc

Issue 3250014: Update browser accessibility tree on a renderer accessibility object state ch... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Fix lint errors Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/accessibility_win_browsertest.cc
===================================================================
--- chrome/browser/accessibility_win_browsertest.cc (revision 57984)
+++ chrome/browser/accessibility_win_browsertest.cc (working copy)
@@ -82,10 +82,14 @@
// Set the expected value for this AccessibleChecker.
void SetExpectedValue(wstring expected_value);
+ // Set the expected state for this AccessibleChecker.
+ void SetExpectedState(LONG expected_state);
+
private:
void CheckAccessibleName(IAccessible* accessible);
void CheckAccessibleRole(IAccessible* accessible);
void CheckAccessibleValue(IAccessible* accessible);
+ void CheckAccessibleState(IAccessible* accessible);
void CheckAccessibleChildren(IAccessible* accessible);
private:
@@ -100,6 +104,9 @@
// Expected accessible value. Checked against IAccessible::get_accValue.
wstring value_;
+ // Expected accessible state. Checked against IAccessible::get_accState.
+ LONG state_;
+
// Expected accessible children. Checked using IAccessible::get_accChildCount
// and ::AccessibleChildren.
AccessibleCheckerVector children_;
@@ -154,14 +161,16 @@
wstring expected_name, int32 expected_role, wstring expected_value) :
name_(expected_name),
role_(expected_role),
- value_(expected_value) {
+ value_(expected_value),
+ state_(-1) {
}
AccessibleChecker::AccessibleChecker(
wstring expected_name, wstring expected_role, wstring expected_value) :
name_(expected_name),
role_(expected_role.c_str()),
- value_(expected_value) {
+ value_(expected_value),
+ state_(-1) {
}
void AccessibleChecker::AppendExpectedChild(
@@ -173,6 +182,7 @@
CheckAccessibleName(accessible);
CheckAccessibleRole(accessible);
CheckAccessibleValue(accessible);
+ CheckAccessibleState(accessible);
CheckAccessibleChildren(accessible);
}
@@ -180,6 +190,10 @@
value_ = expected_value;
}
+void AccessibleChecker::SetExpectedState(LONG expected_state) {
+ state_ = expected_state;
+}
+
void AccessibleChecker::CheckAccessibleName(IAccessible* accessible) {
CComBSTR name;
HRESULT hr =
@@ -215,6 +229,18 @@
wstring(value.m_str, SysStringLen(value)).c_str());
}
+void AccessibleChecker::CheckAccessibleState(IAccessible* accessible) {
+ if (state_ < 0)
+ return;
+
+ VARIANT var_state = {0};
+ HRESULT hr =
+ accessible->get_accState(CreateI4Variant(CHILDID_SELF), &var_state);
+ EXPECT_EQ(hr, S_OK);
+ EXPECT_EQ(VT_I4, V_VT(&var_state));
+ ASSERT_TRUE(state_ == V_I4(&var_state));
+}
+
void AccessibleChecker::CheckAccessibleChildren(IAccessible* parent) {
LONG child_count = 0;
HRESULT hr = parent->get_accChildCount(&child_count);
@@ -306,7 +332,8 @@
// detected. Request and wait for the accessibility tree to be updated.
GURL tree_url(
"data:text/html,<html><body><div onclick=\"this.innerHTML='<b>new text"
- "</b>';\"><b>old text</b></div></body></html>");
+ "</b>';\"><b>old text</b></div><div><input type='checkbox' /></div>"
+ "</body></html>");
browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED);
ScopedComPtr<IAccessible> document_accessible(
GetRenderWidgetHostViewClientAccessible());
@@ -314,14 +341,24 @@
NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED);
AccessibleChecker text_checker(L"", ROLE_SYSTEM_TEXT, L"old text");
+
+ AccessibleChecker div_checker1(L"", L"div", L"");
dmazzoni 2010/09/01 15:10:52 How about div1_checker through div3_checker?
Chris Guillory 2010/09/01 15:35:27 Done. I like that better.
+ div_checker1.AppendExpectedChild(&text_checker);
+
AccessibleChecker checkbox_checker(L"", ROLE_SYSTEM_CHECKBUTTON, L"");
+ checkbox_checker.SetExpectedState(
+ STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY);
- AccessibleChecker div_checker(L"", L"div", L"");
- div_checker.AppendExpectedChild(&text_checker);
+ AccessibleChecker div_checker2(L"", L"div", L"");
+ div_checker2.AppendExpectedChild(&checkbox_checker);
AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L"");
- document_checker.AppendExpectedChild(&div_checker);
+ document_checker.AppendExpectedChild(&div_checker1);
+ document_checker.AppendExpectedChild(&div_checker2);
+ // TODO(ctguil): Fix: We should not be expecting busy state here.
+ document_checker.SetExpectedState(STATE_SYSTEM_BUSY);
+
// Check the accessible tree of the browser.
document_accessible = GetRenderWidgetHostViewClientAccessible();
ASSERT_NE(document_accessible.get(), reinterpret_cast<IAccessible*>(NULL));
@@ -339,8 +376,30 @@
ui_test_utils::WaitForNotification(
NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED);
+ div_dispatch.Release();
+ div_accessible.Release();
+
// Check that the accessibility tree of the browser has been updated.
text_checker.SetExpectedValue(L"new text");
document_checker.CheckAccessible(document_accessible);
+
+ // Perform the default action on the checkbox which marks it as checked.
+ hr = document_accessible->get_accChild(CreateI4Variant(2), &div_dispatch);
+ EXPECT_EQ(hr, S_OK);
+ div_accessible = div_dispatch;
+ CComPtr<IDispatch> checkbox_dispatch;
+ hr = div_accessible->get_accChild(CreateI4Variant(1), &checkbox_dispatch);
+ EXPECT_EQ(hr, S_OK);
+ CComQIPtr<IAccessible> checkbox_accessible(checkbox_dispatch);
+ hr = checkbox_accessible->accDoDefaultAction(CreateI4Variant(CHILDID_SELF));
+ EXPECT_EQ(hr, S_OK);
+ ui_test_utils::WaitForNotification(
+ NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED);
+
+ // Check that the accessibility tree of the browser has been updated.
+ checkbox_checker.SetExpectedState(
+ STATE_SYSTEM_CHECKED | STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_FOCUSED |
+ STATE_SYSTEM_READONLY);
+ document_checker.CheckAccessible(document_accessible);
}
} // namespace.
« no previous file with comments | « no previous file | chrome/browser/browser_accessibility_manager_win.h » ('j') | chrome/browser/browser_accessibility_manager_win.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698