| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
| 8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
| 9 #include "base/win/scoped_bstr.h" | 9 #include "base/win/scoped_bstr.h" |
| 10 #include "base/win/scoped_comptr.h" | 10 #include "base/win/scoped_comptr.h" |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 142 AccessibilityWinBrowserTest::AccessibilityWinBrowserTest() { | 142 AccessibilityWinBrowserTest::AccessibilityWinBrowserTest() { |
| 143 } | 143 } |
| 144 | 144 |
| 145 AccessibilityWinBrowserTest::~AccessibilityWinBrowserTest() { | 145 AccessibilityWinBrowserTest::~AccessibilityWinBrowserTest() { |
| 146 } | 146 } |
| 147 | 147 |
| 148 void AccessibilityWinBrowserTest::LoadInitialAccessibilityTreeFromHtml( | 148 void AccessibilityWinBrowserTest::LoadInitialAccessibilityTreeFromHtml( |
| 149 const std::string& html) { | 149 const std::string& html) { |
| 150 AccessibilityNotificationWaiter waiter( | 150 AccessibilityNotificationWaiter waiter( |
| 151 shell(), AccessibilityModeComplete, | 151 shell(), AccessibilityModeComplete, |
| 152 WebKit::WebAXEventLoadComplete); | 152 blink::WebAXEventLoadComplete); |
| 153 GURL html_data_url("data:text/html," + html); | 153 GURL html_data_url("data:text/html," + html); |
| 154 NavigateToURL(shell(), html_data_url); | 154 NavigateToURL(shell(), html_data_url); |
| 155 waiter.WaitForNotification(); | 155 waiter.WaitForNotification(); |
| 156 } | 156 } |
| 157 | 157 |
| 158 // Retrieve the MSAA client accessibility object for the Render Widget Host View | 158 // Retrieve the MSAA client accessibility object for the Render Widget Host View |
| 159 // of the selected tab. | 159 // of the selected tab. |
| 160 IAccessible* AccessibilityWinBrowserTest::GetRendererAccessible() { | 160 IAccessible* AccessibilityWinBrowserTest::GetRendererAccessible() { |
| 161 HWND hwnd_render_widget_host_view = | 161 HWND hwnd_render_widget_host_view = |
| 162 shell()->web_contents()->GetRenderWidgetHostView()->GetNativeView(); | 162 shell()->web_contents()->GetRenderWidgetHostView()->GetNativeView(); |
| (...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 497 list_item_checker.AppendExpectedChild(&list_marker_checker); | 497 list_item_checker.AppendExpectedChild(&list_marker_checker); |
| 498 list_item_checker.AppendExpectedChild(&static_text_checker); | 498 list_item_checker.AppendExpectedChild(&static_text_checker); |
| 499 radio_group_checker.AppendExpectedChild(&list_item_checker); | 499 radio_group_checker.AppendExpectedChild(&list_item_checker); |
| 500 document_checker.AppendExpectedChild(&radio_group_checker); | 500 document_checker.AppendExpectedChild(&radio_group_checker); |
| 501 document_checker.CheckAccessible(GetRendererAccessible()); | 501 document_checker.CheckAccessible(GetRendererAccessible()); |
| 502 | 502 |
| 503 // Set focus to the radio group. | 503 // Set focus to the radio group. |
| 504 scoped_ptr<AccessibilityNotificationWaiter> waiter( | 504 scoped_ptr<AccessibilityNotificationWaiter> waiter( |
| 505 new AccessibilityNotificationWaiter( | 505 new AccessibilityNotificationWaiter( |
| 506 shell(), AccessibilityModeComplete, | 506 shell(), AccessibilityModeComplete, |
| 507 WebKit::WebAXEventFocus)); | 507 blink::WebAXEventFocus)); |
| 508 ExecuteScript(L"document.body.children[0].focus()"); | 508 ExecuteScript(L"document.body.children[0].focus()"); |
| 509 waiter->WaitForNotification(); | 509 waiter->WaitForNotification(); |
| 510 | 510 |
| 511 // Check that the accessibility tree of the browser has been updated. | 511 // Check that the accessibility tree of the browser has been updated. |
| 512 radio_group_checker.SetExpectedState( | 512 radio_group_checker.SetExpectedState( |
| 513 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_FOCUSED); | 513 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_FOCUSED); |
| 514 document_checker.CheckAccessible(GetRendererAccessible()); | 514 document_checker.CheckAccessible(GetRendererAccessible()); |
| 515 | 515 |
| 516 // Set the active descendant of the radio group | 516 // Set the active descendant of the radio group |
| 517 waiter.reset(new AccessibilityNotificationWaiter( | 517 waiter.reset(new AccessibilityNotificationWaiter( |
| 518 shell(), AccessibilityModeComplete, | 518 shell(), AccessibilityModeComplete, |
| 519 WebKit::WebAXEventFocus)); | 519 blink::WebAXEventFocus)); |
| 520 ExecuteScript( | 520 ExecuteScript( |
| 521 L"document.body.children[0].setAttribute('aria-activedescendant', 'li')"); | 521 L"document.body.children[0].setAttribute('aria-activedescendant', 'li')"); |
| 522 waiter->WaitForNotification(); | 522 waiter->WaitForNotification(); |
| 523 | 523 |
| 524 // Check that the accessibility tree of the browser has been updated. | 524 // Check that the accessibility tree of the browser has been updated. |
| 525 list_item_checker.SetExpectedState( | 525 list_item_checker.SetExpectedState( |
| 526 STATE_SYSTEM_READONLY | STATE_SYSTEM_FOCUSED); | 526 STATE_SYSTEM_READONLY | STATE_SYSTEM_FOCUSED); |
| 527 radio_group_checker.SetExpectedState(STATE_SYSTEM_FOCUSABLE); | 527 radio_group_checker.SetExpectedState(STATE_SYSTEM_FOCUSABLE); |
| 528 document_checker.CheckAccessible(GetRendererAccessible()); | 528 document_checker.CheckAccessible(GetRendererAccessible()); |
| 529 } | 529 } |
| (...skipping 12 matching lines...) Expand all Loading... |
| 542 AccessibleChecker document_checker(std::wstring(), ROLE_SYSTEM_DOCUMENT, | 542 AccessibleChecker document_checker(std::wstring(), ROLE_SYSTEM_DOCUMENT, |
| 543 std::wstring()); | 543 std::wstring()); |
| 544 body_checker.AppendExpectedChild(&checkbox_checker); | 544 body_checker.AppendExpectedChild(&checkbox_checker); |
| 545 document_checker.AppendExpectedChild(&body_checker); | 545 document_checker.AppendExpectedChild(&body_checker); |
| 546 document_checker.CheckAccessible(GetRendererAccessible()); | 546 document_checker.CheckAccessible(GetRendererAccessible()); |
| 547 | 547 |
| 548 // Check the checkbox. | 548 // Check the checkbox. |
| 549 scoped_ptr<AccessibilityNotificationWaiter> waiter( | 549 scoped_ptr<AccessibilityNotificationWaiter> waiter( |
| 550 new AccessibilityNotificationWaiter( | 550 new AccessibilityNotificationWaiter( |
| 551 shell(), AccessibilityModeComplete, | 551 shell(), AccessibilityModeComplete, |
| 552 WebKit::WebAXEventCheckedStateChanged)); | 552 blink::WebAXEventCheckedStateChanged)); |
| 553 ExecuteScript(L"document.body.children[0].checked=true"); | 553 ExecuteScript(L"document.body.children[0].checked=true"); |
| 554 waiter->WaitForNotification(); | 554 waiter->WaitForNotification(); |
| 555 | 555 |
| 556 // Check that the accessibility tree of the browser has been updated. | 556 // Check that the accessibility tree of the browser has been updated. |
| 557 checkbox_checker.SetExpectedState( | 557 checkbox_checker.SetExpectedState( |
| 558 STATE_SYSTEM_CHECKED | STATE_SYSTEM_FOCUSABLE); | 558 STATE_SYSTEM_CHECKED | STATE_SYSTEM_FOCUSABLE); |
| 559 document_checker.CheckAccessible(GetRendererAccessible()); | 559 document_checker.CheckAccessible(GetRendererAccessible()); |
| 560 } | 560 } |
| 561 | 561 |
| 562 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, | 562 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, |
| 563 MAYBE(TestNotificationChildrenChanged)) { | 563 MAYBE(TestNotificationChildrenChanged)) { |
| 564 // The role attribute causes the node to be in the accessibility tree. | 564 // The role attribute causes the node to be in the accessibility tree. |
| 565 LoadInitialAccessibilityTreeFromHtml("<body role=group></body>"); | 565 LoadInitialAccessibilityTreeFromHtml("<body role=group></body>"); |
| 566 | 566 |
| 567 // Check the browser's copy of the renderer accessibility tree. | 567 // Check the browser's copy of the renderer accessibility tree. |
| 568 AccessibleChecker group_checker(std::wstring(), ROLE_SYSTEM_GROUPING, | 568 AccessibleChecker group_checker(std::wstring(), ROLE_SYSTEM_GROUPING, |
| 569 std::wstring()); | 569 std::wstring()); |
| 570 AccessibleChecker document_checker(std::wstring(), ROLE_SYSTEM_DOCUMENT, | 570 AccessibleChecker document_checker(std::wstring(), ROLE_SYSTEM_DOCUMENT, |
| 571 std::wstring()); | 571 std::wstring()); |
| 572 document_checker.AppendExpectedChild(&group_checker); | 572 document_checker.AppendExpectedChild(&group_checker); |
| 573 document_checker.CheckAccessible(GetRendererAccessible()); | 573 document_checker.CheckAccessible(GetRendererAccessible()); |
| 574 | 574 |
| 575 // Change the children of the document body. | 575 // Change the children of the document body. |
| 576 scoped_ptr<AccessibilityNotificationWaiter> waiter( | 576 scoped_ptr<AccessibilityNotificationWaiter> waiter( |
| 577 new AccessibilityNotificationWaiter( | 577 new AccessibilityNotificationWaiter( |
| 578 shell(), | 578 shell(), |
| 579 AccessibilityModeComplete, | 579 AccessibilityModeComplete, |
| 580 WebKit::WebAXEventChildrenChanged)); | 580 blink::WebAXEventChildrenChanged)); |
| 581 ExecuteScript(L"document.body.innerHTML='<b>new text</b>'"); | 581 ExecuteScript(L"document.body.innerHTML='<b>new text</b>'"); |
| 582 waiter->WaitForNotification(); | 582 waiter->WaitForNotification(); |
| 583 | 583 |
| 584 // Check that the accessibility tree of the browser has been updated. | 584 // Check that the accessibility tree of the browser has been updated. |
| 585 AccessibleChecker text_checker(L"new text", ROLE_SYSTEM_TEXT, std::wstring()); | 585 AccessibleChecker text_checker(L"new text", ROLE_SYSTEM_TEXT, std::wstring()); |
| 586 group_checker.AppendExpectedChild(&text_checker); | 586 group_checker.AppendExpectedChild(&text_checker); |
| 587 document_checker.CheckAccessible(GetRendererAccessible()); | 587 document_checker.CheckAccessible(GetRendererAccessible()); |
| 588 } | 588 } |
| 589 | 589 |
| 590 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, | 590 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, |
| 591 MAYBE(TestNotificationChildrenChanged2)) { | 591 MAYBE(TestNotificationChildrenChanged2)) { |
| 592 // The role attribute causes the node to be in the accessibility tree. | 592 // The role attribute causes the node to be in the accessibility tree. |
| 593 LoadInitialAccessibilityTreeFromHtml( | 593 LoadInitialAccessibilityTreeFromHtml( |
| 594 "<div role=group style='visibility: hidden'>text</div>"); | 594 "<div role=group style='visibility: hidden'>text</div>"); |
| 595 | 595 |
| 596 // Check the accessible tree of the browser. | 596 // Check the accessible tree of the browser. |
| 597 AccessibleChecker document_checker(std::wstring(), ROLE_SYSTEM_DOCUMENT, | 597 AccessibleChecker document_checker(std::wstring(), ROLE_SYSTEM_DOCUMENT, |
| 598 std::wstring()); | 598 std::wstring()); |
| 599 document_checker.CheckAccessible(GetRendererAccessible()); | 599 document_checker.CheckAccessible(GetRendererAccessible()); |
| 600 | 600 |
| 601 // Change the children of the document body. | 601 // Change the children of the document body. |
| 602 scoped_ptr<AccessibilityNotificationWaiter> waiter( | 602 scoped_ptr<AccessibilityNotificationWaiter> waiter( |
| 603 new AccessibilityNotificationWaiter( | 603 new AccessibilityNotificationWaiter( |
| 604 shell(), AccessibilityModeComplete, | 604 shell(), AccessibilityModeComplete, |
| 605 WebKit::WebAXEventChildrenChanged)); | 605 blink::WebAXEventChildrenChanged)); |
| 606 ExecuteScript(L"document.body.children[0].style.visibility='visible'"); | 606 ExecuteScript(L"document.body.children[0].style.visibility='visible'"); |
| 607 waiter->WaitForNotification(); | 607 waiter->WaitForNotification(); |
| 608 | 608 |
| 609 // Check that the accessibility tree of the browser has been updated. | 609 // Check that the accessibility tree of the browser has been updated. |
| 610 AccessibleChecker static_text_checker(L"text", ROLE_SYSTEM_TEXT, | 610 AccessibleChecker static_text_checker(L"text", ROLE_SYSTEM_TEXT, |
| 611 std::wstring()); | 611 std::wstring()); |
| 612 AccessibleChecker group_checker(std::wstring(), ROLE_SYSTEM_GROUPING, | 612 AccessibleChecker group_checker(std::wstring(), ROLE_SYSTEM_GROUPING, |
| 613 std::wstring()); | 613 std::wstring()); |
| 614 document_checker.AppendExpectedChild(&group_checker); | 614 document_checker.AppendExpectedChild(&group_checker); |
| 615 group_checker.AppendExpectedChild(&static_text_checker); | 615 group_checker.AppendExpectedChild(&static_text_checker); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 628 group_checker.SetExpectedState(STATE_SYSTEM_FOCUSABLE); | 628 group_checker.SetExpectedState(STATE_SYSTEM_FOCUSABLE); |
| 629 AccessibleChecker document_checker(std::wstring(), ROLE_SYSTEM_DOCUMENT, | 629 AccessibleChecker document_checker(std::wstring(), ROLE_SYSTEM_DOCUMENT, |
| 630 std::wstring()); | 630 std::wstring()); |
| 631 document_checker.AppendExpectedChild(&group_checker); | 631 document_checker.AppendExpectedChild(&group_checker); |
| 632 document_checker.CheckAccessible(GetRendererAccessible()); | 632 document_checker.CheckAccessible(GetRendererAccessible()); |
| 633 | 633 |
| 634 // Focus the div in the document | 634 // Focus the div in the document |
| 635 scoped_ptr<AccessibilityNotificationWaiter> waiter( | 635 scoped_ptr<AccessibilityNotificationWaiter> waiter( |
| 636 new AccessibilityNotificationWaiter( | 636 new AccessibilityNotificationWaiter( |
| 637 shell(), AccessibilityModeComplete, | 637 shell(), AccessibilityModeComplete, |
| 638 WebKit::WebAXEventFocus)); | 638 blink::WebAXEventFocus)); |
| 639 ExecuteScript(L"document.body.children[0].focus()"); | 639 ExecuteScript(L"document.body.children[0].focus()"); |
| 640 waiter->WaitForNotification(); | 640 waiter->WaitForNotification(); |
| 641 | 641 |
| 642 // Check that the accessibility tree of the browser has been updated. | 642 // Check that the accessibility tree of the browser has been updated. |
| 643 SCOPED_TRACE("Check updated tree after focusing div"); | 643 SCOPED_TRACE("Check updated tree after focusing div"); |
| 644 group_checker.SetExpectedState( | 644 group_checker.SetExpectedState( |
| 645 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_FOCUSED); | 645 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_FOCUSED); |
| 646 document_checker.CheckAccessible(GetRendererAccessible()); | 646 document_checker.CheckAccessible(GetRendererAccessible()); |
| 647 | 647 |
| 648 // Focus the document accessible. This will un-focus the current node. | 648 // Focus the document accessible. This will un-focus the current node. |
| 649 waiter.reset( | 649 waiter.reset( |
| 650 new AccessibilityNotificationWaiter( | 650 new AccessibilityNotificationWaiter( |
| 651 shell(), AccessibilityModeComplete, | 651 shell(), AccessibilityModeComplete, |
| 652 WebKit::WebAXEventBlur)); | 652 blink::WebAXEventBlur)); |
| 653 base::win::ScopedComPtr<IAccessible> document_accessible( | 653 base::win::ScopedComPtr<IAccessible> document_accessible( |
| 654 GetRendererAccessible()); | 654 GetRendererAccessible()); |
| 655 ASSERT_NE(document_accessible.get(), reinterpret_cast<IAccessible*>(NULL)); | 655 ASSERT_NE(document_accessible.get(), reinterpret_cast<IAccessible*>(NULL)); |
| 656 base::win::ScopedVariant childid_self(CHILDID_SELF); | 656 base::win::ScopedVariant childid_self(CHILDID_SELF); |
| 657 HRESULT hr = document_accessible->accSelect(SELFLAG_TAKEFOCUS, childid_self); | 657 HRESULT hr = document_accessible->accSelect(SELFLAG_TAKEFOCUS, childid_self); |
| 658 ASSERT_EQ(S_OK, hr); | 658 ASSERT_EQ(S_OK, hr); |
| 659 waiter->WaitForNotification(); | 659 waiter->WaitForNotification(); |
| 660 | 660 |
| 661 // Check that the accessibility tree of the browser has been updated. | 661 // Check that the accessibility tree of the browser has been updated. |
| 662 SCOPED_TRACE("Check updated tree after focusing document again"); | 662 SCOPED_TRACE("Check updated tree after focusing document again"); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 678 AccessibleChecker document_checker(std::wstring(), ROLE_SYSTEM_DOCUMENT, | 678 AccessibleChecker document_checker(std::wstring(), ROLE_SYSTEM_DOCUMENT, |
| 679 std::wstring()); | 679 std::wstring()); |
| 680 body_checker.AppendExpectedChild(&text_field_checker); | 680 body_checker.AppendExpectedChild(&text_field_checker); |
| 681 document_checker.AppendExpectedChild(&body_checker); | 681 document_checker.AppendExpectedChild(&body_checker); |
| 682 document_checker.CheckAccessible(GetRendererAccessible()); | 682 document_checker.CheckAccessible(GetRendererAccessible()); |
| 683 | 683 |
| 684 // Set the value of the text control | 684 // Set the value of the text control |
| 685 scoped_ptr<AccessibilityNotificationWaiter> waiter( | 685 scoped_ptr<AccessibilityNotificationWaiter> waiter( |
| 686 new AccessibilityNotificationWaiter( | 686 new AccessibilityNotificationWaiter( |
| 687 shell(), AccessibilityModeComplete, | 687 shell(), AccessibilityModeComplete, |
| 688 WebKit::WebAXEventValueChanged)); | 688 blink::WebAXEventValueChanged)); |
| 689 ExecuteScript(L"document.body.children[0].value='new value'"); | 689 ExecuteScript(L"document.body.children[0].value='new value'"); |
| 690 waiter->WaitForNotification(); | 690 waiter->WaitForNotification(); |
| 691 | 691 |
| 692 // Check that the accessibility tree of the browser has been updated. | 692 // Check that the accessibility tree of the browser has been updated. |
| 693 text_field_checker.SetExpectedValue(L"new value"); | 693 text_field_checker.SetExpectedValue(L"new value"); |
| 694 document_checker.CheckAccessible(GetRendererAccessible()); | 694 document_checker.CheckAccessible(GetRendererAccessible()); |
| 695 } | 695 } |
| 696 | 696 |
| 697 // This test verifies that the web content's accessibility tree is a | 697 // This test verifies that the web content's accessibility tree is a |
| 698 // descendant of the main browser window's accessibility tree, so that | 698 // descendant of the main browser window's accessibility tree, so that |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 874 AccessibleChecker grouping2_checker(std::wstring(), ROLE_SYSTEM_GROUPING, | 874 AccessibleChecker grouping2_checker(std::wstring(), ROLE_SYSTEM_GROUPING, |
| 875 std::wstring()); | 875 std::wstring()); |
| 876 AccessibleChecker document_checker(std::wstring(), ROLE_SYSTEM_DOCUMENT, | 876 AccessibleChecker document_checker(std::wstring(), ROLE_SYSTEM_DOCUMENT, |
| 877 std::wstring()); | 877 std::wstring()); |
| 878 document_checker.AppendExpectedChild(&grouping1_checker); | 878 document_checker.AppendExpectedChild(&grouping1_checker); |
| 879 document_checker.AppendExpectedChild(&grouping2_checker); | 879 document_checker.AppendExpectedChild(&grouping2_checker); |
| 880 document_checker.CheckAccessible(GetRendererAccessible()); | 880 document_checker.CheckAccessible(GetRendererAccessible()); |
| 881 } | 881 } |
| 882 | 882 |
| 883 } // namespace content | 883 } // namespace content |
| OLD | NEW |