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

Side by Side Diff: chrome/browser/accessibility_win_browsertest.cc

Issue 3380017: Support additional webkit accessibility notifications and states. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Adding missig file. Created 10 years, 3 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/browser/browser_accessibility_manager_win.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <atlbase.h> 5 #include <atlbase.h>
6 #include <vector> 6 #include <vector>
7 7
8 #include "base/scoped_comptr_win.h" 8 #include "base/scoped_comptr_win.h"
9 #include "chrome/browser/automation/ui_controls.h" 9 #include "chrome/browser/automation/ui_controls.h"
10 #include "chrome/browser/browser.h" 10 #include "chrome/browser/browser.h"
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 EXPECT_EQ(hr, S_OK); 259 EXPECT_EQ(hr, S_OK);
260 EXPECT_STREQ(name_.c_str(), 260 EXPECT_STREQ(name_.c_str(),
261 wstring(name.m_str, SysStringLen(name)).c_str()); 261 wstring(name.m_str, SysStringLen(name)).c_str());
262 } 262 }
263 } 263 }
264 264
265 void AccessibleChecker::CheckAccessibleRole(IAccessible* accessible) { 265 void AccessibleChecker::CheckAccessibleRole(IAccessible* accessible) {
266 VARIANT var_role = {0}; 266 VARIANT var_role = {0};
267 HRESULT hr = 267 HRESULT hr =
268 accessible->get_accRole(CreateI4Variant(CHILDID_SELF), &var_role); 268 accessible->get_accRole(CreateI4Variant(CHILDID_SELF), &var_role);
269 EXPECT_EQ(hr, S_OK); 269 ASSERT_EQ(hr, S_OK);
270 ASSERT_TRUE(role_ == var_role); 270 EXPECT_TRUE(role_ == var_role);
271 } 271 }
272 272
273 void AccessibleChecker::CheckAccessibleValue(IAccessible* accessible) { 273 void AccessibleChecker::CheckAccessibleValue(IAccessible* accessible) {
274 CComBSTR value; 274 CComBSTR value;
275 HRESULT hr = 275 HRESULT hr =
276 accessible->get_accValue(CreateI4Variant(CHILDID_SELF), &value); 276 accessible->get_accValue(CreateI4Variant(CHILDID_SELF), &value);
277 // TODO(ctguil): Use EXPECT_EQ when render widget isn't using prop service. 277 EXPECT_EQ(S_OK, hr);
278 // EXPECT_EQ(hr, S_OK);
279 EXPECT_TRUE(SUCCEEDED(hr));
280 278
281 // Test that the correct string was returned. 279 // Test that the correct string was returned.
282 EXPECT_STREQ(value_.c_str(), 280 EXPECT_STREQ(value_.c_str(),
283 wstring(value.m_str, SysStringLen(value)).c_str()); 281 wstring(value.m_str, SysStringLen(value)).c_str());
284 } 282 }
285 283
286 void AccessibleChecker::CheckAccessibleState(IAccessible* accessible) { 284 void AccessibleChecker::CheckAccessibleState(IAccessible* accessible) {
287 if (state_ < 0) 285 if (state_ < 0)
288 return; 286 return;
289 287
290 VARIANT var_state = {0}; 288 VARIANT var_state = {0};
291 HRESULT hr = 289 HRESULT hr =
292 accessible->get_accState(CreateI4Variant(CHILDID_SELF), &var_state); 290 accessible->get_accState(CreateI4Variant(CHILDID_SELF), &var_state);
293 EXPECT_EQ(hr, S_OK); 291 EXPECT_EQ(hr, S_OK);
294 EXPECT_EQ(VT_I4, V_VT(&var_state)); 292 ASSERT_EQ(VT_I4, V_VT(&var_state));
295 ASSERT_TRUE(state_ == V_I4(&var_state)); 293 EXPECT_EQ(state_, V_I4(&var_state));
296 } 294 }
297 295
298 void AccessibleChecker::CheckAccessibleChildren(IAccessible* parent) { 296 void AccessibleChecker::CheckAccessibleChildren(IAccessible* parent) {
299 LONG child_count = 0; 297 LONG child_count = 0;
300 HRESULT hr = parent->get_accChildCount(&child_count); 298 HRESULT hr = parent->get_accChildCount(&child_count);
301 EXPECT_EQ(hr, S_OK); 299 EXPECT_EQ(hr, S_OK);
302 ASSERT_EQ(child_count, children_.size()); 300 ASSERT_EQ(child_count, children_.size());
303 301
304 auto_ptr<VARIANT> child_array(new VARIANT[child_count]); 302 auto_ptr<VARIANT> child_array(new VARIANT[child_count]);
305 LONG obtained_count = 0; 303 LONG obtained_count = 0;
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 367
370 // Verify that the IAccessible reference still points to a valid object and 368 // Verify that the IAccessible reference still points to a valid object and
371 // that calls to its methods fail since the tree is no longer valid after 369 // that calls to its methods fail since the tree is no longer valid after
372 // the page navagation. 370 // the page navagation.
373 CComBSTR name; 371 CComBSTR name;
374 hr = document_accessible->get_accName(CreateI4Variant(CHILDID_SELF), &name); 372 hr = document_accessible->get_accName(CreateI4Variant(CHILDID_SELF), &name);
375 ASSERT_EQ(E_FAIL, hr); 373 ASSERT_EQ(E_FAIL, hr);
376 } 374 }
377 375
378 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, 376 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest,
377 TestNotificationActiveDescendantChanged) {
378 GURL tree_url("data:text/html,<ul tabindex='-1' role='radiogroup'><li id='li'"
379 ">li</li></ul>");
380 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED);
381 GetRendererAccessible();
382 ui_test_utils::WaitForNotification(
383 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED);
384
385 // Check the browser's copy of the renderer accessibility tree.
386 AccessibleChecker list_marker_checker(L"", ROLE_SYSTEM_LISTITEM, L"\x2022");
387 AccessibleChecker static_text_checker(L"", ROLE_SYSTEM_TEXT, L"li");
388 AccessibleChecker list_item_checker(L"", ROLE_SYSTEM_LISTITEM, L"");
389 list_item_checker.SetExpectedState(
390 STATE_SYSTEM_READONLY);
391 AccessibleChecker radio_group_checker(L"", ROLE_SYSTEM_GROUPING, L"");
392 radio_group_checker.SetExpectedState(
393 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY);
394 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L"");
395 list_item_checker.AppendExpectedChild(&list_marker_checker);
396 list_item_checker.AppendExpectedChild(&static_text_checker);
397 radio_group_checker.AppendExpectedChild(&list_item_checker);
398 document_checker.AppendExpectedChild(&radio_group_checker);
399 document_checker.CheckAccessible(GetRendererAccessible());
400
401 // Set focus to the radio group.
402 ExecuteScript(L"document.body.children[0].focus()");
403 ui_test_utils::WaitForNotification(
404 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED);
405
406 // Check that the accessibility tree of the browser has been updated.
407 radio_group_checker.SetExpectedState(
408 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY | STATE_SYSTEM_FOCUSED);
409 document_checker.CheckAccessible(GetRendererAccessible());
410
411 // Set the active descendant of the radio group
412 ExecuteScript(
413 L"document.body.children[0].setAttribute('aria-activedescendant', 'li')");
414 ui_test_utils::WaitForNotification(
415 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED);
416
417 // Check that the accessibility tree of the browser has been updated.
418 list_item_checker.SetExpectedState(
419 STATE_SYSTEM_READONLY | STATE_SYSTEM_FOCUSED);
420 radio_group_checker.SetExpectedState(
421 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY);
422 document_checker.CheckAccessible(GetRendererAccessible());
423 }
424
425 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest,
379 TestNotificationCheckedStateChanged) { 426 TestNotificationCheckedStateChanged) {
380 GURL tree_url("data:text/html,<body><input type='checkbox' /></body>"); 427 GURL tree_url("data:text/html,<body><input type='checkbox' /></body>");
381 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED); 428 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED);
382 GetRendererAccessible(); 429 GetRendererAccessible();
383 ui_test_utils::WaitForNotification( 430 ui_test_utils::WaitForNotification(
384 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); 431 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED);
385 432
386 // Check the browser's copy of the renderer accessibility tree. 433 // Check the browser's copy of the renderer accessibility tree.
387 AccessibleChecker checkbox_checker(L"", ROLE_SYSTEM_CHECKBUTTON, L""); 434 AccessibleChecker checkbox_checker(L"", ROLE_SYSTEM_CHECKBUTTON, L"");
388 checkbox_checker.SetExpectedState( 435 checkbox_checker.SetExpectedState(
(...skipping 10 matching lines...) Expand all
399 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); 446 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED);
400 447
401 // Check that the accessibility tree of the browser has been updated. 448 // Check that the accessibility tree of the browser has been updated.
402 checkbox_checker.SetExpectedState( 449 checkbox_checker.SetExpectedState(
403 STATE_SYSTEM_CHECKED | STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY); 450 STATE_SYSTEM_CHECKED | STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY);
404 document_checker.CheckAccessible(GetRendererAccessible()); 451 document_checker.CheckAccessible(GetRendererAccessible());
405 } 452 }
406 453
407 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, 454 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest,
408 TestNotificationChildrenChanged) { 455 TestNotificationChildrenChanged) {
409 // The aria-help attribute causes the node to be in the accessibility tree. 456 // The role attribute causes the node to be in the accessibility tree.
410 GURL tree_url( 457 GURL tree_url(
411 "data:text/html,<body aria-help='body'></body>"); 458 "data:text/html,<body role=group></body>");
412 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED); 459 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED);
413 GetRendererAccessible(); 460 GetRendererAccessible();
414 ui_test_utils::WaitForNotification( 461 ui_test_utils::WaitForNotification(
415 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); 462 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED);
416 463
417 // Check the browser's copy of the renderer accessibility tree. 464 // Check the browser's copy of the renderer accessibility tree.
418 AccessibleChecker body_checker(L"", L"body", L""); 465 AccessibleChecker body_checker(L"", L"body", L"");
419 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); 466 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L"");
420 document_checker.AppendExpectedChild(&body_checker); 467 document_checker.AppendExpectedChild(&body_checker);
421 document_checker.CheckAccessible(GetRendererAccessible()); 468 document_checker.CheckAccessible(GetRendererAccessible());
422 469
423 // Change the children of the document body. 470 // Change the children of the document body.
424 ExecuteScript(L"document.body.innerHTML='<b>new text</b>'"); 471 ExecuteScript(L"document.body.innerHTML='<b>new text</b>'");
425 ui_test_utils::WaitForNotification( 472 ui_test_utils::WaitForNotification(
426 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); 473 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED);
427 474
428 // Check that the accessibility tree of the browser has been updated. 475 // Check that the accessibility tree of the browser has been updated.
429 AccessibleChecker text_checker(L"", ROLE_SYSTEM_TEXT, L"new text"); 476 AccessibleChecker text_checker(L"", ROLE_SYSTEM_TEXT, L"new text");
430 body_checker.AppendExpectedChild(&text_checker); 477 body_checker.AppendExpectedChild(&text_checker);
431 document_checker.CheckAccessible(GetRendererAccessible()); 478 document_checker.CheckAccessible(GetRendererAccessible());
432 } 479 }
433 480
434 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, 481 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest,
435 SelectedChildrenChanged) { 482 TestNotificationFocusChanged) {
436 GURL tree_url("data:text/html,<body><input type='text' value='old value'/>" 483 // The role attribute causes the node to be in the accessibility tree.
437 "</body>"); 484 GURL tree_url(
485 "data:text/html,<div role=group tabindex='-1'></div>");
438 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED); 486 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED);
439 GetRendererAccessible(); 487 GetRendererAccessible();
440 ui_test_utils::WaitForNotification( 488 ui_test_utils::WaitForNotification(
441 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); 489 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED);
490
491 // Check the browser's copy of the renderer accessibility tree.
492 AccessibleChecker div_checker(L"", L"div", L"");
493 div_checker.SetExpectedState(
494 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_OFFSCREEN | STATE_SYSTEM_READONLY);
495 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L"");
496 document_checker.AppendExpectedChild(&div_checker);
497 document_checker.CheckAccessible(GetRendererAccessible());
498
499 // Focus the div in the document
500 ExecuteScript(L"document.body.children[0].focus()");
501 ui_test_utils::WaitForNotification(
502 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED);
503
504 // Check that the accessibility tree of the browser has been updated.
505 div_checker.SetExpectedState(
506 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY | STATE_SYSTEM_FOCUSED);
507 document_checker.CheckAccessible(GetRendererAccessible());
442 } 508 }
509
510 // http://crbug.com/46209
511 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest,
512 DISABLED_TestNotificationChildrenChanged2) {
513 // The role attribute causes the node to be in the accessibility tree.
514 GURL tree_url(
515 "data:text/html,<div role=group style='visibility: hidden'>text"
516 "</div>");
517 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED);
518 GetRendererAccessible();
519 ui_test_utils::WaitForNotification(
520 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED);
521
522 // Check the accessible tree of the browser.
523 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L"");
524 document_checker.CheckAccessible(GetRendererAccessible());
525
526 // Change the children of the document body.
527 ExecuteScript(L"document.body.children[0].style.visibility='visible'");
528 ui_test_utils::WaitForNotification(
529 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED);
530
531 // Check that the accessibility tree of the browser has been updated.
532 AccessibleChecker static_text_checker(L"", ROLE_SYSTEM_TEXT, L"text");
533 AccessibleChecker div_checker(L"", L"DIV", L"");
534 document_checker.AppendExpectedChild(&div_checker);
535 div_checker.AppendExpectedChild(&static_text_checker);
536 document_checker.CheckAccessible(GetRendererAccessible());
537 }
538
443 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, 539 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest,
444 TestNotificationValueChanged) { 540 TestNotificationValueChanged) {
445 GURL tree_url("data:text/html,<body><input type='text' value='old value'/>" 541 GURL tree_url("data:text/html,<body><input type='text' value='old value'/>"
446 "</body>"); 542 "</body>");
447 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED); 543 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED);
448 GetRendererAccessible(); 544 GetRendererAccessible();
449 ui_test_utils::WaitForNotification( 545 ui_test_utils::WaitForNotification(
450 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); 546 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED);
451 547
452 // Check the browser's copy of the renderer accessibility tree. 548 // Check the browser's copy of the renderer accessibility tree.
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
530 // If pointer comparison fails resort to the exhuasive search that can use 626 // If pointer comparison fails resort to the exhuasive search that can use
531 // IAccessible2::get_uniqueID for equality comparison. 627 // IAccessible2::get_uniqueID for equality comparison.
532 if (!found) { 628 if (!found) {
533 AccessibleContainsAccessible( 629 AccessibleContainsAccessible(
534 browser_accessible, document_accessible2, &found); 630 browser_accessible, document_accessible2, &found);
535 } 631 }
536 632
537 ASSERT_EQ(found, true); 633 ASSERT_EQ(found, true);
538 } 634 }
539 } // namespace. 635 } // namespace.
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/browser_accessibility_manager_win.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698