Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "base/utf_string_conversions.h" | 9 #include "base/utf_string_conversions.h" |
| 10 #include "base/win/scoped_comptr.h" | 10 #include "base/win/scoped_comptr.h" |
| 11 #include "chrome/browser/automation/ui_controls.h" | 11 #include "chrome/browser/automation/ui_controls.h" |
| 12 #include "chrome/browser/renderer_host/render_widget_host_view_win.h" | 12 #include "chrome/browser/renderer_host/render_widget_host_view_win.h" |
| 13 #include "chrome/browser/ui/browser.h" | 13 #include "chrome/browser/ui/browser.h" |
| 14 #include "chrome/browser/ui/browser_window.h" | 14 #include "chrome/browser/ui/browser_window.h" |
| 15 #include "chrome/common/url_constants.h" | 15 #include "chrome/common/url_constants.h" |
| 16 #include "chrome/test/in_process_browser_test.h" | 16 #include "chrome/test/in_process_browser_test.h" |
| 17 #include "chrome/test/ui_test_utils.h" | 17 #include "chrome/test/ui_test_utils.h" |
| 18 #include "content/browser/renderer_host/render_view_host.h" | 18 #include "content/browser/renderer_host/render_view_host.h" |
| 19 #include "content/browser/tab_contents/tab_contents.h" | 19 #include "content/browser/tab_contents/tab_contents.h" |
| 20 #include "content/common/notification_type.h" | 20 #include "content/common/content_notification_types.h" |
| 21 #include "ia2_api_all.h" // Generated NOLINT | 21 #include "ia2_api_all.h" // Generated NOLINT |
| 22 #include "ISimpleDOMNode.h" // Generated NOLINT | 22 #include "ISimpleDOMNode.h" // Generated NOLINT |
| 23 | 23 |
| 24 using std::auto_ptr; | 24 using std::auto_ptr; |
| 25 using std::vector; | 25 using std::vector; |
| 26 using std::wstring; | 26 using std::wstring; |
| 27 | 27 |
| 28 namespace { | 28 namespace { |
| 29 | 29 |
| 30 class AccessibilityWinBrowserTest : public InProcessBrowserTest { | 30 class AccessibilityWinBrowserTest : public InProcessBrowserTest { |
| (...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 330 // The initial accessible returned should have state STATE_SYSTEM_BUSY while | 330 // The initial accessible returned should have state STATE_SYSTEM_BUSY while |
| 331 // the accessibility tree is being requested from the renderer. | 331 // the accessibility tree is being requested from the renderer. |
| 332 AccessibleChecker document1_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); | 332 AccessibleChecker document1_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); |
| 333 document1_checker.SetExpectedState( | 333 document1_checker.SetExpectedState( |
| 334 STATE_SYSTEM_READONLY | STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_FOCUSED | | 334 STATE_SYSTEM_READONLY | STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_FOCUSED | |
| 335 STATE_SYSTEM_BUSY); | 335 STATE_SYSTEM_BUSY); |
| 336 document1_checker.CheckAccessible(GetRendererAccessible()); | 336 document1_checker.CheckAccessible(GetRendererAccessible()); |
| 337 | 337 |
| 338 // Wait for the initial accessibility tree to load. Busy state should clear. | 338 // Wait for the initial accessibility tree to load. Busy state should clear. |
| 339 ui_test_utils::WaitForNotification( | 339 ui_test_utils::WaitForNotification( |
| 340 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); | 340 chrome::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); |
|
darin (slow to review)
2011/07/09 04:07:44
nit: missing the NOTIFICATION_ prefix?
| |
| 341 document1_checker.SetExpectedState( | 341 document1_checker.SetExpectedState( |
| 342 STATE_SYSTEM_READONLY | STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_FOCUSED); | 342 STATE_SYSTEM_READONLY | STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_FOCUSED); |
| 343 document1_checker.CheckAccessible(GetRendererAccessible()); | 343 document1_checker.CheckAccessible(GetRendererAccessible()); |
| 344 | 344 |
| 345 GURL tree_url( | 345 GURL tree_url( |
| 346 "data:text/html,<html><head><title>Accessibility Win Test</title></head>" | 346 "data:text/html,<html><head><title>Accessibility Win Test</title></head>" |
| 347 "<body><input type='button' value='push' /><input type='checkbox' />" | 347 "<body><input type='button' value='push' /><input type='checkbox' />" |
| 348 "</body></html>"); | 348 "</body></html>"); |
| 349 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED); | 349 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED); |
| 350 ui_test_utils::WaitForNotification( | 350 ui_test_utils::WaitForNotification( |
| 351 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); | 351 chrome::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); |
| 352 | 352 |
| 353 // Check the browser's copy of the renderer accessibility tree. | 353 // Check the browser's copy of the renderer accessibility tree. |
| 354 AccessibleChecker button_checker(L"push", ROLE_SYSTEM_PUSHBUTTON, L"push"); | 354 AccessibleChecker button_checker(L"push", ROLE_SYSTEM_PUSHBUTTON, L"push"); |
| 355 AccessibleChecker checkbox_checker(L"", ROLE_SYSTEM_CHECKBUTTON, L""); | 355 AccessibleChecker checkbox_checker(L"", ROLE_SYSTEM_CHECKBUTTON, L""); |
| 356 AccessibleChecker body_checker(L"", L"body", L""); | 356 AccessibleChecker body_checker(L"", L"body", L""); |
| 357 AccessibleChecker document2_checker( | 357 AccessibleChecker document2_checker( |
| 358 L"Accessibility Win Test", ROLE_SYSTEM_DOCUMENT, L""); | 358 L"Accessibility Win Test", ROLE_SYSTEM_DOCUMENT, L""); |
| 359 body_checker.AppendExpectedChild(&button_checker); | 359 body_checker.AppendExpectedChild(&button_checker); |
| 360 body_checker.AppendExpectedChild(&checkbox_checker); | 360 body_checker.AppendExpectedChild(&checkbox_checker); |
| 361 document2_checker.AppendExpectedChild(&body_checker); | 361 document2_checker.AppendExpectedChild(&body_checker); |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 381 ASSERT_EQ(E_FAIL, hr); | 381 ASSERT_EQ(E_FAIL, hr); |
| 382 } | 382 } |
| 383 | 383 |
| 384 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, | 384 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, |
| 385 TestNotificationActiveDescendantChanged) { | 385 TestNotificationActiveDescendantChanged) { |
| 386 GURL tree_url("data:text/html,<ul tabindex='-1' role='radiogroup'><li id='li'" | 386 GURL tree_url("data:text/html,<ul tabindex='-1' role='radiogroup'><li id='li'" |
| 387 ">li</li></ul>"); | 387 ">li</li></ul>"); |
| 388 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED); | 388 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED); |
| 389 GetRendererAccessible(); | 389 GetRendererAccessible(); |
| 390 ui_test_utils::WaitForNotification( | 390 ui_test_utils::WaitForNotification( |
| 391 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); | 391 chrome::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); |
| 392 | 392 |
| 393 // Check the browser's copy of the renderer accessibility tree. | 393 // Check the browser's copy of the renderer accessibility tree. |
| 394 AccessibleChecker list_marker_checker(L"", ROLE_SYSTEM_LISTITEM, L"\x2022"); | 394 AccessibleChecker list_marker_checker(L"", ROLE_SYSTEM_LISTITEM, L"\x2022"); |
| 395 AccessibleChecker static_text_checker(L"li", ROLE_SYSTEM_TEXT, L""); | 395 AccessibleChecker static_text_checker(L"li", ROLE_SYSTEM_TEXT, L""); |
| 396 AccessibleChecker list_item_checker(L"", ROLE_SYSTEM_LISTITEM, L""); | 396 AccessibleChecker list_item_checker(L"", ROLE_SYSTEM_LISTITEM, L""); |
| 397 list_item_checker.SetExpectedState( | 397 list_item_checker.SetExpectedState( |
| 398 STATE_SYSTEM_READONLY); | 398 STATE_SYSTEM_READONLY); |
| 399 AccessibleChecker radio_group_checker(L"", ROLE_SYSTEM_GROUPING, L""); | 399 AccessibleChecker radio_group_checker(L"", ROLE_SYSTEM_GROUPING, L""); |
| 400 radio_group_checker.SetExpectedState( | 400 radio_group_checker.SetExpectedState( |
| 401 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY); | 401 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY); |
| 402 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); | 402 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); |
| 403 list_item_checker.AppendExpectedChild(&list_marker_checker); | 403 list_item_checker.AppendExpectedChild(&list_marker_checker); |
| 404 list_item_checker.AppendExpectedChild(&static_text_checker); | 404 list_item_checker.AppendExpectedChild(&static_text_checker); |
| 405 radio_group_checker.AppendExpectedChild(&list_item_checker); | 405 radio_group_checker.AppendExpectedChild(&list_item_checker); |
| 406 document_checker.AppendExpectedChild(&radio_group_checker); | 406 document_checker.AppendExpectedChild(&radio_group_checker); |
| 407 document_checker.CheckAccessible(GetRendererAccessible()); | 407 document_checker.CheckAccessible(GetRendererAccessible()); |
| 408 | 408 |
| 409 // Set focus to the radio group. | 409 // Set focus to the radio group. |
| 410 ExecuteScript(L"document.body.children[0].focus()"); | 410 ExecuteScript(L"document.body.children[0].focus()"); |
| 411 ui_test_utils::WaitForNotification( | 411 ui_test_utils::WaitForNotification( |
| 412 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); | 412 chrome::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); |
| 413 | 413 |
| 414 // Check that the accessibility tree of the browser has been updated. | 414 // Check that the accessibility tree of the browser has been updated. |
| 415 radio_group_checker.SetExpectedState( | 415 radio_group_checker.SetExpectedState( |
| 416 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY | STATE_SYSTEM_FOCUSED); | 416 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY | STATE_SYSTEM_FOCUSED); |
| 417 document_checker.CheckAccessible(GetRendererAccessible()); | 417 document_checker.CheckAccessible(GetRendererAccessible()); |
| 418 | 418 |
| 419 // Set the active descendant of the radio group | 419 // Set the active descendant of the radio group |
| 420 ExecuteScript( | 420 ExecuteScript( |
| 421 L"document.body.children[0].setAttribute('aria-activedescendant', 'li')"); | 421 L"document.body.children[0].setAttribute('aria-activedescendant', 'li')"); |
| 422 ui_test_utils::WaitForNotification( | 422 ui_test_utils::WaitForNotification( |
| 423 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); | 423 chrome::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); |
| 424 | 424 |
| 425 // Check that the accessibility tree of the browser has been updated. | 425 // Check that the accessibility tree of the browser has been updated. |
| 426 list_item_checker.SetExpectedState( | 426 list_item_checker.SetExpectedState( |
| 427 STATE_SYSTEM_READONLY | STATE_SYSTEM_FOCUSED); | 427 STATE_SYSTEM_READONLY | STATE_SYSTEM_FOCUSED); |
| 428 radio_group_checker.SetExpectedState( | 428 radio_group_checker.SetExpectedState( |
| 429 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY); | 429 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY); |
| 430 document_checker.CheckAccessible(GetRendererAccessible()); | 430 document_checker.CheckAccessible(GetRendererAccessible()); |
| 431 } | 431 } |
| 432 | 432 |
| 433 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, | 433 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, |
| 434 TestNotificationCheckedStateChanged) { | 434 TestNotificationCheckedStateChanged) { |
| 435 GURL tree_url("data:text/html,<body><input type='checkbox' /></body>"); | 435 GURL tree_url("data:text/html,<body><input type='checkbox' /></body>"); |
| 436 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED); | 436 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED); |
| 437 GetRendererAccessible(); | 437 GetRendererAccessible(); |
| 438 ui_test_utils::WaitForNotification( | 438 ui_test_utils::WaitForNotification( |
| 439 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); | 439 chrome::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); |
| 440 | 440 |
| 441 // Check the browser's copy of the renderer accessibility tree. | 441 // Check the browser's copy of the renderer accessibility tree. |
| 442 AccessibleChecker checkbox_checker(L"", ROLE_SYSTEM_CHECKBUTTON, L""); | 442 AccessibleChecker checkbox_checker(L"", ROLE_SYSTEM_CHECKBUTTON, L""); |
| 443 checkbox_checker.SetExpectedState( | 443 checkbox_checker.SetExpectedState( |
| 444 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY); | 444 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY); |
| 445 AccessibleChecker body_checker(L"", L"body", L""); | 445 AccessibleChecker body_checker(L"", L"body", L""); |
| 446 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); | 446 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); |
| 447 body_checker.AppendExpectedChild(&checkbox_checker); | 447 body_checker.AppendExpectedChild(&checkbox_checker); |
| 448 document_checker.AppendExpectedChild(&body_checker); | 448 document_checker.AppendExpectedChild(&body_checker); |
| 449 document_checker.CheckAccessible(GetRendererAccessible()); | 449 document_checker.CheckAccessible(GetRendererAccessible()); |
| 450 | 450 |
| 451 // Check the checkbox. | 451 // Check the checkbox. |
| 452 ExecuteScript(L"document.body.children[0].checked=true"); | 452 ExecuteScript(L"document.body.children[0].checked=true"); |
| 453 ui_test_utils::WaitForNotification( | 453 ui_test_utils::WaitForNotification( |
| 454 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); | 454 chrome::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); |
| 455 | 455 |
| 456 // Check that the accessibility tree of the browser has been updated. | 456 // Check that the accessibility tree of the browser has been updated. |
| 457 checkbox_checker.SetExpectedState( | 457 checkbox_checker.SetExpectedState( |
| 458 STATE_SYSTEM_CHECKED | STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY); | 458 STATE_SYSTEM_CHECKED | STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY); |
| 459 document_checker.CheckAccessible(GetRendererAccessible()); | 459 document_checker.CheckAccessible(GetRendererAccessible()); |
| 460 } | 460 } |
| 461 | 461 |
| 462 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, | 462 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, |
| 463 TestNotificationChildrenChanged) { | 463 TestNotificationChildrenChanged) { |
| 464 // The role attribute causes the node to be in the accessibility tree. | 464 // The role attribute causes the node to be in the accessibility tree. |
| 465 GURL tree_url( | 465 GURL tree_url( |
| 466 "data:text/html,<body role=group></body>"); | 466 "data:text/html,<body role=group></body>"); |
| 467 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED); | 467 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED); |
| 468 GetRendererAccessible(); | 468 GetRendererAccessible(); |
| 469 ui_test_utils::WaitForNotification( | 469 ui_test_utils::WaitForNotification( |
| 470 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); | 470 chrome::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); |
| 471 | 471 |
| 472 // Check the browser's copy of the renderer accessibility tree. | 472 // Check the browser's copy of the renderer accessibility tree. |
| 473 AccessibleChecker body_checker(L"", L"body", L""); | 473 AccessibleChecker body_checker(L"", L"body", L""); |
| 474 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); | 474 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); |
| 475 document_checker.AppendExpectedChild(&body_checker); | 475 document_checker.AppendExpectedChild(&body_checker); |
| 476 document_checker.CheckAccessible(GetRendererAccessible()); | 476 document_checker.CheckAccessible(GetRendererAccessible()); |
| 477 | 477 |
| 478 // Change the children of the document body. | 478 // Change the children of the document body. |
| 479 ExecuteScript(L"document.body.innerHTML='<b>new text</b>'"); | 479 ExecuteScript(L"document.body.innerHTML='<b>new text</b>'"); |
| 480 ui_test_utils::WaitForNotification( | 480 ui_test_utils::WaitForNotification( |
| 481 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); | 481 chrome::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); |
| 482 | 482 |
| 483 // Check that the accessibility tree of the browser has been updated. | 483 // Check that the accessibility tree of the browser has been updated. |
| 484 AccessibleChecker text_checker(L"new text", ROLE_SYSTEM_TEXT, L""); | 484 AccessibleChecker text_checker(L"new text", ROLE_SYSTEM_TEXT, L""); |
| 485 body_checker.AppendExpectedChild(&text_checker); | 485 body_checker.AppendExpectedChild(&text_checker); |
| 486 document_checker.CheckAccessible(GetRendererAccessible()); | 486 document_checker.CheckAccessible(GetRendererAccessible()); |
| 487 } | 487 } |
| 488 | 488 |
| 489 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, | 489 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, |
| 490 TestNotificationChildrenChanged2) { | 490 TestNotificationChildrenChanged2) { |
| 491 // The role attribute causes the node to be in the accessibility tree. | 491 // The role attribute causes the node to be in the accessibility tree. |
| 492 GURL tree_url( | 492 GURL tree_url( |
| 493 "data:text/html,<div role=group style='visibility: hidden'>text" | 493 "data:text/html,<div role=group style='visibility: hidden'>text" |
| 494 "</div>"); | 494 "</div>"); |
| 495 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED); | 495 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED); |
| 496 GetRendererAccessible(); | 496 GetRendererAccessible(); |
| 497 ui_test_utils::WaitForNotification( | 497 ui_test_utils::WaitForNotification( |
| 498 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); | 498 chrome::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); |
| 499 | 499 |
| 500 // Check the accessible tree of the browser. | 500 // Check the accessible tree of the browser. |
| 501 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); | 501 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); |
| 502 document_checker.CheckAccessible(GetRendererAccessible()); | 502 document_checker.CheckAccessible(GetRendererAccessible()); |
| 503 | 503 |
| 504 // Change the children of the document body. | 504 // Change the children of the document body. |
| 505 ExecuteScript(L"document.body.children[0].style.visibility='visible'"); | 505 ExecuteScript(L"document.body.children[0].style.visibility='visible'"); |
| 506 ui_test_utils::WaitForNotification( | 506 ui_test_utils::WaitForNotification( |
| 507 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); | 507 chrome::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); |
| 508 | 508 |
| 509 // Check that the accessibility tree of the browser has been updated. | 509 // Check that the accessibility tree of the browser has been updated. |
| 510 AccessibleChecker static_text_checker(L"text", ROLE_SYSTEM_TEXT, L""); | 510 AccessibleChecker static_text_checker(L"text", ROLE_SYSTEM_TEXT, L""); |
| 511 AccessibleChecker div_checker(L"", L"div", L""); | 511 AccessibleChecker div_checker(L"", L"div", L""); |
| 512 document_checker.AppendExpectedChild(&div_checker); | 512 document_checker.AppendExpectedChild(&div_checker); |
| 513 div_checker.AppendExpectedChild(&static_text_checker); | 513 div_checker.AppendExpectedChild(&static_text_checker); |
| 514 document_checker.CheckAccessible(GetRendererAccessible()); | 514 document_checker.CheckAccessible(GetRendererAccessible()); |
| 515 } | 515 } |
| 516 | 516 |
| 517 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, | 517 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, |
| 518 TestNotificationFocusChanged) { | 518 TestNotificationFocusChanged) { |
| 519 // The role attribute causes the node to be in the accessibility tree. | 519 // The role attribute causes the node to be in the accessibility tree. |
| 520 GURL tree_url( | 520 GURL tree_url( |
| 521 "data:text/html,<div role=group tabindex='-1'></div>"); | 521 "data:text/html,<div role=group tabindex='-1'></div>"); |
| 522 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED); | 522 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED); |
| 523 GetRendererAccessible(); | 523 GetRendererAccessible(); |
| 524 ui_test_utils::WaitForNotification( | 524 ui_test_utils::WaitForNotification( |
| 525 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); | 525 chrome::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); |
| 526 | 526 |
| 527 // Check the browser's copy of the renderer accessibility tree. | 527 // Check the browser's copy of the renderer accessibility tree. |
| 528 AccessibleChecker div_checker(L"", L"div", L""); | 528 AccessibleChecker div_checker(L"", L"div", L""); |
| 529 div_checker.SetExpectedState( | 529 div_checker.SetExpectedState( |
| 530 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_OFFSCREEN | STATE_SYSTEM_READONLY); | 530 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_OFFSCREEN | STATE_SYSTEM_READONLY); |
| 531 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); | 531 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); |
| 532 document_checker.AppendExpectedChild(&div_checker); | 532 document_checker.AppendExpectedChild(&div_checker); |
| 533 document_checker.CheckAccessible(GetRendererAccessible()); | 533 document_checker.CheckAccessible(GetRendererAccessible()); |
| 534 | 534 |
| 535 // Focus the div in the document | 535 // Focus the div in the document |
| 536 ExecuteScript(L"document.body.children[0].focus()"); | 536 ExecuteScript(L"document.body.children[0].focus()"); |
| 537 ui_test_utils::WaitForNotification( | 537 ui_test_utils::WaitForNotification( |
| 538 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); | 538 chrome::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); |
| 539 | 539 |
| 540 // Check that the accessibility tree of the browser has been updated. | 540 // Check that the accessibility tree of the browser has been updated. |
| 541 div_checker.SetExpectedState( | 541 div_checker.SetExpectedState( |
| 542 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY | STATE_SYSTEM_FOCUSED); | 542 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY | STATE_SYSTEM_FOCUSED); |
| 543 document_checker.CheckAccessible(GetRendererAccessible()); | 543 document_checker.CheckAccessible(GetRendererAccessible()); |
| 544 | 544 |
| 545 // Focus the document accessible. This will un-focus the current node. | 545 // Focus the document accessible. This will un-focus the current node. |
| 546 base::win::ScopedComPtr<IAccessible> document_accessible( | 546 base::win::ScopedComPtr<IAccessible> document_accessible( |
| 547 GetRendererAccessible()); | 547 GetRendererAccessible()); |
| 548 ASSERT_NE(document_accessible.get(), reinterpret_cast<IAccessible*>(NULL)); | 548 ASSERT_NE(document_accessible.get(), reinterpret_cast<IAccessible*>(NULL)); |
| 549 HRESULT hr = document_accessible->accSelect( | 549 HRESULT hr = document_accessible->accSelect( |
| 550 SELFLAG_TAKEFOCUS, CreateI4Variant(CHILDID_SELF)); | 550 SELFLAG_TAKEFOCUS, CreateI4Variant(CHILDID_SELF)); |
| 551 ASSERT_EQ(S_OK, hr); | 551 ASSERT_EQ(S_OK, hr); |
| 552 ui_test_utils::WaitForNotification( | 552 ui_test_utils::WaitForNotification( |
| 553 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); | 553 chrome::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); |
| 554 | 554 |
| 555 // Check that the accessibility tree of the browser has been updated. | 555 // Check that the accessibility tree of the browser has been updated. |
| 556 div_checker.SetExpectedState( | 556 div_checker.SetExpectedState( |
| 557 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY); | 557 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_READONLY); |
| 558 document_checker.CheckAccessible(GetRendererAccessible()); | 558 document_checker.CheckAccessible(GetRendererAccessible()); |
| 559 } | 559 } |
| 560 | 560 |
| 561 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, | 561 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, |
| 562 TestNotificationValueChanged) { | 562 TestNotificationValueChanged) { |
| 563 GURL tree_url("data:text/html,<body><input type='text' value='old value'/>" | 563 GURL tree_url("data:text/html,<body><input type='text' value='old value'/>" |
| 564 "</body>"); | 564 "</body>"); |
| 565 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED); | 565 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED); |
| 566 GetRendererAccessible(); | 566 GetRendererAccessible(); |
| 567 ui_test_utils::WaitForNotification( | 567 ui_test_utils::WaitForNotification( |
| 568 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); | 568 chrome::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); |
| 569 | 569 |
| 570 // Check the browser's copy of the renderer accessibility tree. | 570 // Check the browser's copy of the renderer accessibility tree. |
| 571 | 571 |
| 572 AccessibleChecker text_field_div_checker(L"", L"div", L""); | 572 AccessibleChecker text_field_div_checker(L"", L"div", L""); |
| 573 AccessibleChecker text_field_checker(L"", ROLE_SYSTEM_TEXT, L"old value"); | 573 AccessibleChecker text_field_checker(L"", ROLE_SYSTEM_TEXT, L"old value"); |
| 574 text_field_checker.SetExpectedState(STATE_SYSTEM_FOCUSABLE); | 574 text_field_checker.SetExpectedState(STATE_SYSTEM_FOCUSABLE); |
| 575 AccessibleChecker body_checker(L"", L"body", L""); | 575 AccessibleChecker body_checker(L"", L"body", L""); |
| 576 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); | 576 AccessibleChecker document_checker(L"", ROLE_SYSTEM_DOCUMENT, L""); |
| 577 text_field_checker.AppendExpectedChild(&text_field_div_checker); | 577 text_field_checker.AppendExpectedChild(&text_field_div_checker); |
| 578 body_checker.AppendExpectedChild(&text_field_checker); | 578 body_checker.AppendExpectedChild(&text_field_checker); |
| 579 document_checker.AppendExpectedChild(&body_checker); | 579 document_checker.AppendExpectedChild(&body_checker); |
| 580 document_checker.CheckAccessible(GetRendererAccessible()); | 580 document_checker.CheckAccessible(GetRendererAccessible()); |
| 581 | 581 |
| 582 // Set the value of the text control | 582 // Set the value of the text control |
| 583 ExecuteScript(L"document.body.children[0].value='new value'"); | 583 ExecuteScript(L"document.body.children[0].value='new value'"); |
| 584 ui_test_utils::WaitForNotification( | 584 ui_test_utils::WaitForNotification( |
| 585 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); | 585 chrome::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); |
| 586 | 586 |
| 587 // Check that the accessibility tree of the browser has been updated. | 587 // Check that the accessibility tree of the browser has been updated. |
| 588 text_field_checker.SetExpectedValue(L"new value"); | 588 text_field_checker.SetExpectedValue(L"new value"); |
| 589 document_checker.CheckAccessible(GetRendererAccessible()); | 589 document_checker.CheckAccessible(GetRendererAccessible()); |
| 590 } | 590 } |
| 591 | 591 |
| 592 // This test verifies that the web content's accessibility tree is a | 592 // This test verifies that the web content's accessibility tree is a |
| 593 // descendant of the main browser window's accessibility tree, so that | 593 // descendant of the main browser window's accessibility tree, so that |
| 594 // tools like AccExplorer32 or AccProbe can be used to examine Chrome's | 594 // tools like AccExplorer32 or AccProbe can be used to examine Chrome's |
| 595 // accessibility support. | 595 // accessibility support. |
| 596 // | 596 // |
| 597 // If you made a change and this test now fails, check that the NativeViewHost | 597 // If you made a change and this test now fails, check that the NativeViewHost |
| 598 // that wraps the tab contents returns the IAccessible implementation | 598 // that wraps the tab contents returns the IAccessible implementation |
| 599 // provided by RenderWidgetHostViewWin in GetNativeViewAccessible(). | 599 // provided by RenderWidgetHostViewWin in GetNativeViewAccessible(). |
| 600 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, | 600 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, |
| 601 ContainsRendererAccessibilityTree) { | 601 ContainsRendererAccessibilityTree) { |
| 602 GURL tree_url("data:text/html,<html><head><title>MyDocument</title></head>" | 602 GURL tree_url("data:text/html,<html><head><title>MyDocument</title></head>" |
| 603 "<body>Content</body></html>"); | 603 "<body>Content</body></html>"); |
| 604 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED); | 604 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED); |
| 605 GetRendererAccessible(); | 605 GetRendererAccessible(); |
| 606 ui_test_utils::WaitForNotification( | 606 ui_test_utils::WaitForNotification( |
| 607 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); | 607 chrome::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); |
| 608 | 608 |
| 609 // Get the accessibility object for the browser window. | 609 // Get the accessibility object for the browser window. |
| 610 HWND browser_hwnd = browser()->window()->GetNativeHandle(); | 610 HWND browser_hwnd = browser()->window()->GetNativeHandle(); |
| 611 base::win::ScopedComPtr<IAccessible> browser_accessible; | 611 base::win::ScopedComPtr<IAccessible> browser_accessible; |
| 612 HRESULT hr = AccessibleObjectFromWindow( | 612 HRESULT hr = AccessibleObjectFromWindow( |
| 613 browser_hwnd, | 613 browser_hwnd, |
| 614 OBJID_WINDOW, | 614 OBJID_WINDOW, |
| 615 IID_IAccessible, | 615 IID_IAccessible, |
| 616 reinterpret_cast<void**>(browser_accessible.Receive())); | 616 reinterpret_cast<void**>(browser_accessible.Receive())); |
| 617 ASSERT_EQ(S_OK, hr); | 617 ASSERT_EQ(S_OK, hr); |
| 618 | 618 |
| 619 bool found = false; | 619 bool found = false; |
| 620 RecursiveFindNodeInAccessibilityTree( | 620 RecursiveFindNodeInAccessibilityTree( |
| 621 browser_accessible.get(), ROLE_SYSTEM_DOCUMENT, L"MyDocument", 0, &found); | 621 browser_accessible.get(), ROLE_SYSTEM_DOCUMENT, L"MyDocument", 0, &found); |
| 622 ASSERT_EQ(found, true); | 622 ASSERT_EQ(found, true); |
| 623 } | 623 } |
| 624 | 624 |
| 625 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, | 625 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, |
| 626 SupportsISimpleDOM) { | 626 SupportsISimpleDOM) { |
| 627 GURL tree_url("data:text/html,<body><input type='checkbox' /></body>"); | 627 GURL tree_url("data:text/html,<body><input type='checkbox' /></body>"); |
| 628 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED); | 628 browser()->OpenURL(tree_url, GURL(), CURRENT_TAB, PageTransition::TYPED); |
| 629 GetRendererAccessible(); | 629 GetRendererAccessible(); |
| 630 ui_test_utils::WaitForNotification( | 630 ui_test_utils::WaitForNotification( |
| 631 NotificationType::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); | 631 chrome::RENDER_VIEW_HOST_ACCESSIBILITY_TREE_UPDATED); |
| 632 | 632 |
| 633 // Get the IAccessible object for the document. | 633 // Get the IAccessible object for the document. |
| 634 base::win::ScopedComPtr<IAccessible> document_accessible( | 634 base::win::ScopedComPtr<IAccessible> document_accessible( |
| 635 GetRendererAccessible()); | 635 GetRendererAccessible()); |
| 636 ASSERT_NE(document_accessible.get(), reinterpret_cast<IAccessible*>(NULL)); | 636 ASSERT_NE(document_accessible.get(), reinterpret_cast<IAccessible*>(NULL)); |
| 637 | 637 |
| 638 // Get the ISimpleDOM object for the document. | 638 // Get the ISimpleDOM object for the document. |
| 639 base::win::ScopedComPtr<IServiceProvider> service_provider; | 639 base::win::ScopedComPtr<IServiceProvider> service_provider; |
| 640 HRESULT hr = static_cast<IAccessible*>(document_accessible)->QueryInterface( | 640 HRESULT hr = static_cast<IAccessible*>(document_accessible)->QueryInterface( |
| 641 service_provider.Receive()); | 641 service_provider.Receive()); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 679 ASSERT_EQ(S_OK, hr); | 679 ASSERT_EQ(S_OK, hr); |
| 680 hr = checkbox_isimpledomnode->get_nodeInfo( | 680 hr = checkbox_isimpledomnode->get_nodeInfo( |
| 681 &node_name, &name_space_id, &node_value, &num_children, &unique_id, | 681 &node_name, &name_space_id, &node_value, &num_children, &unique_id, |
| 682 &node_type); | 682 &node_type); |
| 683 ASSERT_EQ(S_OK, hr); | 683 ASSERT_EQ(S_OK, hr); |
| 684 EXPECT_STREQ(L"input", wstring(node_name, SysStringLen(node_name)).c_str()); | 684 EXPECT_STREQ(L"input", wstring(node_name, SysStringLen(node_name)).c_str()); |
| 685 EXPECT_EQ(NODETYPE_ELEMENT, node_type); | 685 EXPECT_EQ(NODETYPE_ELEMENT, node_type); |
| 686 EXPECT_EQ(0, num_children); | 686 EXPECT_EQ(0, num_children); |
| 687 } | 687 } |
| 688 } // namespace. | 688 } // namespace. |
| OLD | NEW |