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

Side by Side Diff: content/browser/accessibility/accessibility_win_browsertest.cc

Issue 2694413006: Scope and clean up uses of AccessibilityMode. (Closed)
Patch Set: address comments Created 3 years, 9 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
OLDNEW
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 <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include <memory> 8 #include <memory>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 }; 96 };
97 97
98 AccessibilityWinBrowserTest::AccessibilityWinBrowserTest() { 98 AccessibilityWinBrowserTest::AccessibilityWinBrowserTest() {
99 } 99 }
100 100
101 AccessibilityWinBrowserTest::~AccessibilityWinBrowserTest() { 101 AccessibilityWinBrowserTest::~AccessibilityWinBrowserTest() {
102 } 102 }
103 103
104 void AccessibilityWinBrowserTest::LoadInitialAccessibilityTreeFromHtml( 104 void AccessibilityWinBrowserTest::LoadInitialAccessibilityTreeFromHtml(
105 const std::string& html) { 105 const std::string& html) {
106 AccessibilityNotificationWaiter waiter( 106 AccessibilityNotificationWaiter waiter(shell()->web_contents(),
107 shell()->web_contents(), ACCESSIBILITY_MODE_COMPLETE, 107 AccessibilityMode::kComplete,
108 ui::AX_EVENT_LOAD_COMPLETE); 108 ui::AX_EVENT_LOAD_COMPLETE);
109 GURL html_data_url("data:text/html," + html); 109 GURL html_data_url("data:text/html," + html);
110 NavigateToURL(shell(), html_data_url); 110 NavigateToURL(shell(), html_data_url);
111 waiter.WaitForNotification(); 111 waiter.WaitForNotification();
112 } 112 }
113 113
114 // Retrieve the MSAA client accessibility object for the Render Widget Host View 114 // Retrieve the MSAA client accessibility object for the Render Widget Host View
115 // of the selected tab. 115 // of the selected tab.
116 IAccessible* AccessibilityWinBrowserTest::GetRendererAccessible() { 116 IAccessible* AccessibilityWinBrowserTest::GetRendererAccessible() {
117 content::WebContents* web_contents = shell()->web_contents(); 117 content::WebContents* web_contents = shell()->web_contents();
118 return web_contents->GetRenderWidgetHostView()->GetNativeViewAccessible(); 118 return web_contents->GetRenderWidgetHostView()->GetNativeViewAccessible();
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 GetAccessibleFromVariant(form.get(), form_children[1].AsInput()).get(), 154 GetAccessibleFromVariant(form.get(), form_children[1].AsInput()).get(),
155 input.Receive())); 155 input.Receive()));
156 LONG input_role = 0; 156 LONG input_role = 0;
157 ASSERT_HRESULT_SUCCEEDED(input->role(&input_role)); 157 ASSERT_HRESULT_SUCCEEDED(input->role(&input_role));
158 ASSERT_EQ(ROLE_SYSTEM_TEXT, input_role); 158 ASSERT_EQ(ROLE_SYSTEM_TEXT, input_role);
159 159
160 // Retrieve the IAccessibleText interface for the field. 160 // Retrieve the IAccessibleText interface for the field.
161 ASSERT_HRESULT_SUCCEEDED(input.QueryInterface(input_text->Receive())); 161 ASSERT_HRESULT_SUCCEEDED(input.QueryInterface(input_text->Receive()));
162 162
163 // Set the caret on the last character. 163 // Set the caret on the last character.
164 AccessibilityNotificationWaiter waiter( 164 AccessibilityNotificationWaiter waiter(shell()->web_contents(),
165 shell()->web_contents(), ACCESSIBILITY_MODE_COMPLETE, 165 AccessibilityMode::kComplete,
166 ui::AX_EVENT_TEXT_SELECTION_CHANGED); 166 ui::AX_EVENT_TEXT_SELECTION_CHANGED);
167 std::wstring caret_offset = base::UTF16ToWide(base::IntToString16( 167 std::wstring caret_offset = base::UTF16ToWide(base::IntToString16(
168 static_cast<int>(CONTENTS_LENGTH - 1))); 168 static_cast<int>(CONTENTS_LENGTH - 1)));
169 ExecuteScript(std::wstring( 169 ExecuteScript(std::wstring(
170 L"var textField = document.getElementById('textField');" 170 L"var textField = document.getElementById('textField');"
171 L"textField.focus();" 171 L"textField.focus();"
172 L"textField.setSelectionRange(") + 172 L"textField.setSelectionRange(") +
173 caret_offset + L"," + caret_offset + L");"); 173 caret_offset + L"," + caret_offset + L");");
174 waiter.WaitForNotification(); 174 waiter.WaitForNotification();
175 } 175 }
176 176
(...skipping 29 matching lines...) Expand all
206 .get(), 206 .get(),
207 textarea.Receive())); 207 textarea.Receive()));
208 LONG textarea_role = 0; 208 LONG textarea_role = 0;
209 ASSERT_HRESULT_SUCCEEDED(textarea->role(&textarea_role)); 209 ASSERT_HRESULT_SUCCEEDED(textarea->role(&textarea_role));
210 ASSERT_EQ(ROLE_SYSTEM_TEXT, textarea_role); 210 ASSERT_EQ(ROLE_SYSTEM_TEXT, textarea_role);
211 211
212 // Retrieve the IAccessibleText interface for the field. 212 // Retrieve the IAccessibleText interface for the field.
213 ASSERT_HRESULT_SUCCEEDED(textarea.QueryInterface(textarea_text->Receive())); 213 ASSERT_HRESULT_SUCCEEDED(textarea.QueryInterface(textarea_text->Receive()));
214 214
215 // Set the caret on the last character. 215 // Set the caret on the last character.
216 AccessibilityNotificationWaiter waiter( 216 AccessibilityNotificationWaiter waiter(shell()->web_contents(),
217 shell()->web_contents(), ACCESSIBILITY_MODE_COMPLETE, 217 AccessibilityMode::kComplete,
218 ui::AX_EVENT_TEXT_SELECTION_CHANGED); 218 ui::AX_EVENT_TEXT_SELECTION_CHANGED);
219 std::wstring caret_offset = base::UTF16ToWide(base::IntToString16( 219 std::wstring caret_offset = base::UTF16ToWide(base::IntToString16(
220 static_cast<int>(CONTENTS_LENGTH - 1))); 220 static_cast<int>(CONTENTS_LENGTH - 1)));
221 ExecuteScript(std::wstring( 221 ExecuteScript(std::wstring(
222 L"var textField = document.getElementById('textField');" 222 L"var textField = document.getElementById('textField');"
223 L"textField.focus();" 223 L"textField.focus();"
224 L"textField.setSelectionRange(") + 224 L"textField.setSelectionRange(") +
225 caret_offset + L"," + caret_offset + L");"); 225 caret_offset + L"," + caret_offset + L");");
226 waiter.WaitForNotification(); 226 waiter.WaitForNotification();
227 } 227 }
228 228
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after
665 std::wstring()); 665 std::wstring());
666 list_item_checker.AppendExpectedChild(&list_marker_checker); 666 list_item_checker.AppendExpectedChild(&list_marker_checker);
667 list_item_checker.AppendExpectedChild(&static_text_checker); 667 list_item_checker.AppendExpectedChild(&static_text_checker);
668 radio_group_checker.AppendExpectedChild(&list_item_checker); 668 radio_group_checker.AppendExpectedChild(&list_item_checker);
669 document_checker.AppendExpectedChild(&radio_group_checker); 669 document_checker.AppendExpectedChild(&radio_group_checker);
670 document_checker.CheckAccessible(GetRendererAccessible()); 670 document_checker.CheckAccessible(GetRendererAccessible());
671 671
672 // Set focus to the radio group. 672 // Set focus to the radio group.
673 std::unique_ptr<AccessibilityNotificationWaiter> waiter( 673 std::unique_ptr<AccessibilityNotificationWaiter> waiter(
674 new AccessibilityNotificationWaiter(shell()->web_contents(), 674 new AccessibilityNotificationWaiter(shell()->web_contents(),
675 ACCESSIBILITY_MODE_COMPLETE, 675 AccessibilityMode::kComplete,
676 ui::AX_EVENT_FOCUS)); 676 ui::AX_EVENT_FOCUS));
677 ExecuteScript(L"document.body.children[0].focus()"); 677 ExecuteScript(L"document.body.children[0].focus()");
678 waiter->WaitForNotification(); 678 waiter->WaitForNotification();
679 679
680 // Check that the accessibility tree of the browser has been updated. 680 // Check that the accessibility tree of the browser has been updated.
681 radio_group_checker.SetExpectedState( 681 radio_group_checker.SetExpectedState(
682 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_FOCUSED); 682 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_FOCUSED);
683 document_checker.CheckAccessible(GetRendererAccessible()); 683 document_checker.CheckAccessible(GetRendererAccessible());
684 684
685 // Set the active descendant of the radio group 685 // Set the active descendant of the radio group
686 waiter.reset(new AccessibilityNotificationWaiter( 686 waiter.reset(new AccessibilityNotificationWaiter(shell()->web_contents(),
687 shell()->web_contents(), ACCESSIBILITY_MODE_COMPLETE, 687 AccessibilityMode::kComplete,
688 ui::AX_EVENT_FOCUS)); 688 ui::AX_EVENT_FOCUS));
689 ExecuteScript( 689 ExecuteScript(
690 L"document.body.children[0].setAttribute('aria-activedescendant', 'li')"); 690 L"document.body.children[0].setAttribute('aria-activedescendant', 'li')");
691 waiter->WaitForNotification(); 691 waiter->WaitForNotification();
692 692
693 // Check that the accessibility tree of the browser has been updated. 693 // Check that the accessibility tree of the browser has been updated.
694 list_item_checker.SetExpectedState( 694 list_item_checker.SetExpectedState(
695 STATE_SYSTEM_READONLY | STATE_SYSTEM_FOCUSED); 695 STATE_SYSTEM_READONLY | STATE_SYSTEM_FOCUSED);
696 radio_group_checker.SetExpectedState(STATE_SYSTEM_FOCUSABLE); 696 radio_group_checker.SetExpectedState(STATE_SYSTEM_FOCUSABLE);
697 document_checker.CheckAccessible(GetRendererAccessible()); 697 document_checker.CheckAccessible(GetRendererAccessible());
698 } 698 }
(...skipping 11 matching lines...) Expand all
710 std::wstring()); 710 std::wstring());
711 AccessibleChecker document_checker(std::wstring(), ROLE_SYSTEM_DOCUMENT, 711 AccessibleChecker document_checker(std::wstring(), ROLE_SYSTEM_DOCUMENT,
712 std::wstring()); 712 std::wstring());
713 body_checker.AppendExpectedChild(&checkbox_checker); 713 body_checker.AppendExpectedChild(&checkbox_checker);
714 document_checker.AppendExpectedChild(&body_checker); 714 document_checker.AppendExpectedChild(&body_checker);
715 document_checker.CheckAccessible(GetRendererAccessible()); 715 document_checker.CheckAccessible(GetRendererAccessible());
716 716
717 // Check the checkbox. 717 // Check the checkbox.
718 std::unique_ptr<AccessibilityNotificationWaiter> waiter( 718 std::unique_ptr<AccessibilityNotificationWaiter> waiter(
719 new AccessibilityNotificationWaiter(shell()->web_contents(), 719 new AccessibilityNotificationWaiter(shell()->web_contents(),
720 ACCESSIBILITY_MODE_COMPLETE, 720 AccessibilityMode::kComplete,
721 ui::AX_EVENT_CHECKED_STATE_CHANGED)); 721 ui::AX_EVENT_CHECKED_STATE_CHANGED));
722 ExecuteScript(L"document.body.children[0].checked=true"); 722 ExecuteScript(L"document.body.children[0].checked=true");
723 waiter->WaitForNotification(); 723 waiter->WaitForNotification();
724 724
725 // Check that the accessibility tree of the browser has been updated. 725 // Check that the accessibility tree of the browser has been updated.
726 checkbox_checker.SetExpectedState( 726 checkbox_checker.SetExpectedState(
727 STATE_SYSTEM_CHECKED | STATE_SYSTEM_FOCUSABLE); 727 STATE_SYSTEM_CHECKED | STATE_SYSTEM_FOCUSABLE);
728 document_checker.CheckAccessible(GetRendererAccessible()); 728 document_checker.CheckAccessible(GetRendererAccessible());
729 } 729 }
730 730
731 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, 731 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest,
732 TestNotificationChildrenChanged) { 732 TestNotificationChildrenChanged) {
733 // The role attribute causes the node to be in the accessibility tree. 733 // The role attribute causes the node to be in the accessibility tree.
734 LoadInitialAccessibilityTreeFromHtml("<body role=group></body>"); 734 LoadInitialAccessibilityTreeFromHtml("<body role=group></body>");
735 735
736 // Check the browser's copy of the renderer accessibility tree. 736 // Check the browser's copy of the renderer accessibility tree.
737 AccessibleChecker group_checker(std::wstring(), ROLE_SYSTEM_GROUPING, 737 AccessibleChecker group_checker(std::wstring(), ROLE_SYSTEM_GROUPING,
738 std::wstring()); 738 std::wstring());
739 AccessibleChecker document_checker(std::wstring(), ROLE_SYSTEM_DOCUMENT, 739 AccessibleChecker document_checker(std::wstring(), ROLE_SYSTEM_DOCUMENT,
740 std::wstring()); 740 std::wstring());
741 document_checker.AppendExpectedChild(&group_checker); 741 document_checker.AppendExpectedChild(&group_checker);
742 document_checker.CheckAccessible(GetRendererAccessible()); 742 document_checker.CheckAccessible(GetRendererAccessible());
743 743
744 // Change the children of the document body. 744 // Change the children of the document body.
745 std::unique_ptr<AccessibilityNotificationWaiter> waiter( 745 std::unique_ptr<AccessibilityNotificationWaiter> waiter(
746 new AccessibilityNotificationWaiter(shell()->web_contents(), 746 new AccessibilityNotificationWaiter(shell()->web_contents(),
747 ACCESSIBILITY_MODE_COMPLETE, 747 AccessibilityMode::kComplete,
748 ui::AX_EVENT_CHILDREN_CHANGED)); 748 ui::AX_EVENT_CHILDREN_CHANGED));
749 ExecuteScript(L"document.body.innerHTML='<b>new text</b>'"); 749 ExecuteScript(L"document.body.innerHTML='<b>new text</b>'");
750 waiter->WaitForNotification(); 750 waiter->WaitForNotification();
751 751
752 // Check that the accessibility tree of the browser has been updated. 752 // Check that the accessibility tree of the browser has been updated.
753 AccessibleChecker text_checker( 753 AccessibleChecker text_checker(
754 L"new text", ROLE_SYSTEM_STATICTEXT, std::wstring()); 754 L"new text", ROLE_SYSTEM_STATICTEXT, std::wstring());
755 group_checker.AppendExpectedChild(&text_checker); 755 group_checker.AppendExpectedChild(&text_checker);
756 document_checker.CheckAccessible(GetRendererAccessible()); 756 document_checker.CheckAccessible(GetRendererAccessible());
757 } 757 }
758 758
759 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, 759 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest,
760 TestNotificationChildrenChanged2) { 760 TestNotificationChildrenChanged2) {
761 // The role attribute causes the node to be in the accessibility tree. 761 // The role attribute causes the node to be in the accessibility tree.
762 LoadInitialAccessibilityTreeFromHtml( 762 LoadInitialAccessibilityTreeFromHtml(
763 "<div role=group style='visibility: hidden'>text</div>"); 763 "<div role=group style='visibility: hidden'>text</div>");
764 764
765 // Check the accessible tree of the browser. 765 // Check the accessible tree of the browser.
766 AccessibleChecker document_checker(std::wstring(), ROLE_SYSTEM_DOCUMENT, 766 AccessibleChecker document_checker(std::wstring(), ROLE_SYSTEM_DOCUMENT,
767 std::wstring()); 767 std::wstring());
768 document_checker.CheckAccessible(GetRendererAccessible()); 768 document_checker.CheckAccessible(GetRendererAccessible());
769 769
770 // Change the children of the document body. 770 // Change the children of the document body.
771 std::unique_ptr<AccessibilityNotificationWaiter> waiter( 771 std::unique_ptr<AccessibilityNotificationWaiter> waiter(
772 new AccessibilityNotificationWaiter(shell()->web_contents(), 772 new AccessibilityNotificationWaiter(shell()->web_contents(),
773 ACCESSIBILITY_MODE_COMPLETE, 773 AccessibilityMode::kComplete,
774 ui::AX_EVENT_CHILDREN_CHANGED)); 774 ui::AX_EVENT_CHILDREN_CHANGED));
775 ExecuteScript(L"document.body.children[0].style.visibility='visible'"); 775 ExecuteScript(L"document.body.children[0].style.visibility='visible'");
776 waiter->WaitForNotification(); 776 waiter->WaitForNotification();
777 777
778 // Check that the accessibility tree of the browser has been updated. 778 // Check that the accessibility tree of the browser has been updated.
779 AccessibleChecker static_text_checker(L"text", ROLE_SYSTEM_STATICTEXT, 779 AccessibleChecker static_text_checker(L"text", ROLE_SYSTEM_STATICTEXT,
780 std::wstring()); 780 std::wstring());
781 AccessibleChecker group_checker(std::wstring(), ROLE_SYSTEM_GROUPING, 781 AccessibleChecker group_checker(std::wstring(), ROLE_SYSTEM_GROUPING,
782 std::wstring()); 782 std::wstring());
783 document_checker.AppendExpectedChild(&group_checker); 783 document_checker.AppendExpectedChild(&group_checker);
(...skipping 12 matching lines...) Expand all
796 std::wstring()); 796 std::wstring());
797 group_checker.SetExpectedState(STATE_SYSTEM_FOCUSABLE); 797 group_checker.SetExpectedState(STATE_SYSTEM_FOCUSABLE);
798 AccessibleChecker document_checker(std::wstring(), ROLE_SYSTEM_DOCUMENT, 798 AccessibleChecker document_checker(std::wstring(), ROLE_SYSTEM_DOCUMENT,
799 std::wstring()); 799 std::wstring());
800 document_checker.AppendExpectedChild(&group_checker); 800 document_checker.AppendExpectedChild(&group_checker);
801 document_checker.CheckAccessible(GetRendererAccessible()); 801 document_checker.CheckAccessible(GetRendererAccessible());
802 802
803 // Focus the div in the document 803 // Focus the div in the document
804 std::unique_ptr<AccessibilityNotificationWaiter> waiter( 804 std::unique_ptr<AccessibilityNotificationWaiter> waiter(
805 new AccessibilityNotificationWaiter(shell()->web_contents(), 805 new AccessibilityNotificationWaiter(shell()->web_contents(),
806 ACCESSIBILITY_MODE_COMPLETE, 806 AccessibilityMode::kComplete,
807 ui::AX_EVENT_FOCUS)); 807 ui::AX_EVENT_FOCUS));
808 ExecuteScript(L"document.body.children[0].focus()"); 808 ExecuteScript(L"document.body.children[0].focus()");
809 waiter->WaitForNotification(); 809 waiter->WaitForNotification();
810 810
811 // Check that the accessibility tree of the browser has been updated. 811 // Check that the accessibility tree of the browser has been updated.
812 SCOPED_TRACE("Check updated tree after focusing div"); 812 SCOPED_TRACE("Check updated tree after focusing div");
813 group_checker.SetExpectedState( 813 group_checker.SetExpectedState(
814 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_FOCUSED); 814 STATE_SYSTEM_FOCUSABLE | STATE_SYSTEM_FOCUSED);
815 document_checker.CheckAccessible(GetRendererAccessible()); 815 document_checker.CheckAccessible(GetRendererAccessible());
816 816
817 // Focus the document accessible. This will un-focus the current node. 817 // Focus the document accessible. This will un-focus the current node.
818 waiter.reset( 818 waiter.reset(new AccessibilityNotificationWaiter(shell()->web_contents(),
819 new AccessibilityNotificationWaiter( 819 AccessibilityMode::kComplete,
820 shell()->web_contents(), ACCESSIBILITY_MODE_COMPLETE, 820 ui::AX_EVENT_BLUR));
821 ui::AX_EVENT_BLUR));
822 base::win::ScopedComPtr<IAccessible> document_accessible( 821 base::win::ScopedComPtr<IAccessible> document_accessible(
823 GetRendererAccessible()); 822 GetRendererAccessible());
824 ASSERT_NE(document_accessible.get(), reinterpret_cast<IAccessible*>(NULL)); 823 ASSERT_NE(document_accessible.get(), reinterpret_cast<IAccessible*>(NULL));
825 base::win::ScopedVariant childid_self(CHILDID_SELF); 824 base::win::ScopedVariant childid_self(CHILDID_SELF);
826 HRESULT hr = document_accessible->accSelect(SELFLAG_TAKEFOCUS, childid_self); 825 HRESULT hr = document_accessible->accSelect(SELFLAG_TAKEFOCUS, childid_self);
827 ASSERT_EQ(S_OK, hr); 826 ASSERT_EQ(S_OK, hr);
828 waiter->WaitForNotification(); 827 waiter->WaitForNotification();
829 828
830 // Check that the accessibility tree of the browser has been updated. 829 // Check that the accessibility tree of the browser has been updated.
831 SCOPED_TRACE("Check updated tree after focusing document again"); 830 SCOPED_TRACE("Check updated tree after focusing document again");
(...skipping 14 matching lines...) Expand all
846 std::wstring()); 845 std::wstring());
847 AccessibleChecker document_checker(std::wstring(), ROLE_SYSTEM_DOCUMENT, 846 AccessibleChecker document_checker(std::wstring(), ROLE_SYSTEM_DOCUMENT,
848 std::wstring()); 847 std::wstring());
849 body_checker.AppendExpectedChild(&text_field_checker); 848 body_checker.AppendExpectedChild(&text_field_checker);
850 document_checker.AppendExpectedChild(&body_checker); 849 document_checker.AppendExpectedChild(&body_checker);
851 document_checker.CheckAccessible(GetRendererAccessible()); 850 document_checker.CheckAccessible(GetRendererAccessible());
852 851
853 // Set the value of the text control 852 // Set the value of the text control
854 std::unique_ptr<AccessibilityNotificationWaiter> waiter( 853 std::unique_ptr<AccessibilityNotificationWaiter> waiter(
855 new AccessibilityNotificationWaiter(shell()->web_contents(), 854 new AccessibilityNotificationWaiter(shell()->web_contents(),
856 ACCESSIBILITY_MODE_COMPLETE, 855 AccessibilityMode::kComplete,
857 ui::AX_EVENT_VALUE_CHANGED)); 856 ui::AX_EVENT_VALUE_CHANGED));
858 ExecuteScript(L"document.body.children[0].value='new value'"); 857 ExecuteScript(L"document.body.children[0].value='new value'");
859 waiter->WaitForNotification(); 858 waiter->WaitForNotification();
860 859
861 // Check that the accessibility tree of the browser has been updated. 860 // Check that the accessibility tree of the browser has been updated.
862 text_field_checker.SetExpectedValue(L"new value"); 861 text_field_checker.SetExpectedValue(L"new value");
863 document_checker.CheckAccessible(GetRendererAccessible()); 862 document_checker.CheckAccessible(GetRendererAccessible());
864 } 863 }
865 864
866 // This test verifies that the web content's accessibility tree is a 865 // This test verifies that the web content's accessibility tree is a
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
1086 1085
1087 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, TestScrollToPoint) { 1086 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, TestScrollToPoint) {
1088 base::win::ScopedComPtr<IAccessible2> paragraph; 1087 base::win::ScopedComPtr<IAccessible2> paragraph;
1089 SetUpSampleParagraph(&paragraph); 1088 SetUpSampleParagraph(&paragraph);
1090 1089
1091 LONG prev_x, prev_y, x, y, width, height; 1090 LONG prev_x, prev_y, x, y, width, height;
1092 base::win::ScopedVariant childid_self(CHILDID_SELF); 1091 base::win::ScopedVariant childid_self(CHILDID_SELF);
1093 ASSERT_HRESULT_SUCCEEDED( 1092 ASSERT_HRESULT_SUCCEEDED(
1094 paragraph->accLocation(&prev_x, &prev_y, &width, &height, childid_self)); 1093 paragraph->accLocation(&prev_x, &prev_y, &width, &height, childid_self));
1095 AccessibilityNotificationWaiter location_changed_waiter( 1094 AccessibilityNotificationWaiter location_changed_waiter(
1096 shell()->web_contents(), ACCESSIBILITY_MODE_COMPLETE, 1095 shell()->web_contents(), AccessibilityMode::kComplete,
1097 ui::AX_EVENT_LOCATION_CHANGED); 1096 ui::AX_EVENT_LOCATION_CHANGED);
1098 EXPECT_HRESULT_SUCCEEDED( 1097 EXPECT_HRESULT_SUCCEEDED(
1099 paragraph->scrollToPoint(IA2_COORDTYPE_PARENT_RELATIVE, 0, 0)); 1098 paragraph->scrollToPoint(IA2_COORDTYPE_PARENT_RELATIVE, 0, 0));
1100 location_changed_waiter.WaitForNotification(); 1099 location_changed_waiter.WaitForNotification();
1101 1100
1102 ASSERT_HRESULT_SUCCEEDED( 1101 ASSERT_HRESULT_SUCCEEDED(
1103 paragraph->accLocation(&x, &y, &width, &height, childid_self)); 1102 paragraph->accLocation(&x, &y, &width, &height, childid_self));
1104 EXPECT_EQ(prev_x, x); 1103 EXPECT_EQ(prev_x, x);
1105 EXPECT_GT(prev_y, y); 1104 EXPECT_GT(prev_y, y);
1106 1105
(...skipping 10 matching lines...) Expand all
1117 1116
1118 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, TestSetCaretOffset) { 1117 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, TestSetCaretOffset) {
1119 base::win::ScopedComPtr<IAccessibleText> input_text; 1118 base::win::ScopedComPtr<IAccessibleText> input_text;
1120 SetUpInputField(&input_text); 1119 SetUpInputField(&input_text);
1121 1120
1122 LONG caret_offset = 0; 1121 LONG caret_offset = 0;
1123 HRESULT hr = input_text->get_caretOffset(&caret_offset); 1122 HRESULT hr = input_text->get_caretOffset(&caret_offset);
1124 EXPECT_EQ(S_OK, hr); 1123 EXPECT_EQ(S_OK, hr);
1125 EXPECT_EQ(CONTENTS_LENGTH - 1, caret_offset); 1124 EXPECT_EQ(CONTENTS_LENGTH - 1, caret_offset);
1126 1125
1127 AccessibilityNotificationWaiter waiter( 1126 AccessibilityNotificationWaiter waiter(shell()->web_contents(),
1128 shell()->web_contents(), 1127 AccessibilityMode::kComplete,
1129 ACCESSIBILITY_MODE_COMPLETE, 1128 ui::AX_EVENT_TEXT_SELECTION_CHANGED);
1130 ui::AX_EVENT_TEXT_SELECTION_CHANGED);
1131 caret_offset = 0; 1129 caret_offset = 0;
1132 hr = input_text->setCaretOffset(caret_offset); 1130 hr = input_text->setCaretOffset(caret_offset);
1133 EXPECT_EQ(S_OK, hr); 1131 EXPECT_EQ(S_OK, hr);
1134 waiter.WaitForNotification(); 1132 waiter.WaitForNotification();
1135 1133
1136 hr = input_text->get_caretOffset(&caret_offset); 1134 hr = input_text->get_caretOffset(&caret_offset);
1137 EXPECT_EQ(S_OK, hr); 1135 EXPECT_EQ(S_OK, hr);
1138 EXPECT_EQ(0, caret_offset); 1136 EXPECT_EQ(0, caret_offset);
1139 } 1137 }
1140 1138
1141 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, 1139 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest,
1142 TestMultiLineSetCaretOffset) { 1140 TestMultiLineSetCaretOffset) {
1143 base::win::ScopedComPtr<IAccessibleText> textarea_text; 1141 base::win::ScopedComPtr<IAccessibleText> textarea_text;
1144 SetUpTextareaField(&textarea_text); 1142 SetUpTextareaField(&textarea_text);
1145 1143
1146 LONG caret_offset = 0; 1144 LONG caret_offset = 0;
1147 HRESULT hr = textarea_text->get_caretOffset(&caret_offset); 1145 HRESULT hr = textarea_text->get_caretOffset(&caret_offset);
1148 EXPECT_EQ(S_OK, hr); 1146 EXPECT_EQ(S_OK, hr);
1149 EXPECT_EQ(CONTENTS_LENGTH - 1, caret_offset); 1147 EXPECT_EQ(CONTENTS_LENGTH - 1, caret_offset);
1150 1148
1151 AccessibilityNotificationWaiter waiter( 1149 AccessibilityNotificationWaiter waiter(shell()->web_contents(),
1152 shell()->web_contents(), 1150 AccessibilityMode::kComplete,
1153 ACCESSIBILITY_MODE_COMPLETE, 1151 ui::AX_EVENT_TEXT_SELECTION_CHANGED);
1154 ui::AX_EVENT_TEXT_SELECTION_CHANGED);
1155 caret_offset = 0; 1152 caret_offset = 0;
1156 hr = textarea_text->setCaretOffset(caret_offset); 1153 hr = textarea_text->setCaretOffset(caret_offset);
1157 EXPECT_EQ(S_OK, hr); 1154 EXPECT_EQ(S_OK, hr);
1158 waiter.WaitForNotification(); 1155 waiter.WaitForNotification();
1159 1156
1160 hr = textarea_text->get_caretOffset(&caret_offset); 1157 hr = textarea_text->get_caretOffset(&caret_offset);
1161 EXPECT_EQ(S_OK, hr); 1158 EXPECT_EQ(S_OK, hr);
1162 EXPECT_EQ(0, caret_offset); 1159 EXPECT_EQ(0, caret_offset);
1163 } 1160 }
1164 1161
1165 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, TestSetSelection) { 1162 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, TestSetSelection) {
1166 base::win::ScopedComPtr<IAccessibleText> input_text; 1163 base::win::ScopedComPtr<IAccessibleText> input_text;
1167 SetUpInputField(&input_text); 1164 SetUpInputField(&input_text);
1168 1165
1169 LONG start_offset, end_offset; 1166 LONG start_offset, end_offset;
1170 EXPECT_HRESULT_FAILED( 1167 EXPECT_HRESULT_FAILED(
1171 input_text->get_selection(1, &start_offset, &end_offset)); 1168 input_text->get_selection(1, &start_offset, &end_offset));
1172 HRESULT hr = input_text->get_selection(0, &start_offset, &end_offset); 1169 HRESULT hr = input_text->get_selection(0, &start_offset, &end_offset);
1173 // There is no selection, just a caret. 1170 // There is no selection, just a caret.
1174 EXPECT_EQ(E_INVALIDARG, hr); 1171 EXPECT_EQ(E_INVALIDARG, hr);
1175 1172
1176 AccessibilityNotificationWaiter waiter(shell()->web_contents(), 1173 AccessibilityNotificationWaiter waiter(shell()->web_contents(),
1177 ACCESSIBILITY_MODE_COMPLETE, 1174 AccessibilityMode::kComplete,
1178 ui::AX_EVENT_TEXT_SELECTION_CHANGED); 1175 ui::AX_EVENT_TEXT_SELECTION_CHANGED);
1179 start_offset = 0; 1176 start_offset = 0;
1180 end_offset = CONTENTS_LENGTH; 1177 end_offset = CONTENTS_LENGTH;
1181 EXPECT_HRESULT_FAILED(input_text->setSelection(1, start_offset, end_offset)); 1178 EXPECT_HRESULT_FAILED(input_text->setSelection(1, start_offset, end_offset));
1182 EXPECT_HRESULT_SUCCEEDED( 1179 EXPECT_HRESULT_SUCCEEDED(
1183 input_text->setSelection(0, start_offset, end_offset)); 1180 input_text->setSelection(0, start_offset, end_offset));
1184 waiter.WaitForNotification(); 1181 waiter.WaitForNotification();
1185 1182
1186 hr = input_text->get_selection(0, &start_offset, &end_offset); 1183 hr = input_text->get_selection(0, &start_offset, &end_offset);
1187 EXPECT_EQ(S_OK, hr); 1184 EXPECT_EQ(S_OK, hr);
(...skipping 18 matching lines...) Expand all
1206 SetUpTextareaField(&textarea_text); 1203 SetUpTextareaField(&textarea_text);
1207 1204
1208 LONG start_offset, end_offset; 1205 LONG start_offset, end_offset;
1209 EXPECT_HRESULT_FAILED( 1206 EXPECT_HRESULT_FAILED(
1210 textarea_text->get_selection(1, &start_offset, &end_offset)); 1207 textarea_text->get_selection(1, &start_offset, &end_offset));
1211 HRESULT hr = textarea_text->get_selection(0, &start_offset, &end_offset); 1208 HRESULT hr = textarea_text->get_selection(0, &start_offset, &end_offset);
1212 // There is no selection, just a caret. 1209 // There is no selection, just a caret.
1213 EXPECT_EQ(E_INVALIDARG, hr); 1210 EXPECT_EQ(E_INVALIDARG, hr);
1214 1211
1215 AccessibilityNotificationWaiter waiter(shell()->web_contents(), 1212 AccessibilityNotificationWaiter waiter(shell()->web_contents(),
1216 ACCESSIBILITY_MODE_COMPLETE, 1213 AccessibilityMode::kComplete,
1217 ui::AX_EVENT_TEXT_SELECTION_CHANGED); 1214 ui::AX_EVENT_TEXT_SELECTION_CHANGED);
1218 start_offset = 0; 1215 start_offset = 0;
1219 end_offset = CONTENTS_LENGTH; 1216 end_offset = CONTENTS_LENGTH;
1220 EXPECT_HRESULT_FAILED( 1217 EXPECT_HRESULT_FAILED(
1221 textarea_text->setSelection(1, start_offset, end_offset)); 1218 textarea_text->setSelection(1, start_offset, end_offset));
1222 EXPECT_HRESULT_SUCCEEDED( 1219 EXPECT_HRESULT_SUCCEEDED(
1223 textarea_text->setSelection(0, start_offset, end_offset)); 1220 textarea_text->setSelection(0, start_offset, end_offset));
1224 waiter.WaitForNotification(); 1221 waiter.WaitForNotification();
1225 1222
1226 hr = textarea_text->get_selection(0, &start_offset, &end_offset); 1223 hr = textarea_text->get_selection(0, &start_offset, &end_offset);
(...skipping 17 matching lines...) Expand all
1244 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, 1241 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest,
1245 TestStaticTextSetSelection) { 1242 TestStaticTextSetSelection) {
1246 base::win::ScopedComPtr<IAccessibleText> paragraph_text; 1243 base::win::ScopedComPtr<IAccessibleText> paragraph_text;
1247 SetUpSampleParagraph(&paragraph_text); 1244 SetUpSampleParagraph(&paragraph_text);
1248 1245
1249 LONG n_characters; 1246 LONG n_characters;
1250 ASSERT_HRESULT_SUCCEEDED(paragraph_text->get_nCharacters(&n_characters)); 1247 ASSERT_HRESULT_SUCCEEDED(paragraph_text->get_nCharacters(&n_characters));
1251 ASSERT_LT(0, n_characters); 1248 ASSERT_LT(0, n_characters);
1252 1249
1253 AccessibilityNotificationWaiter waiter( 1250 AccessibilityNotificationWaiter waiter(
1254 shell()->web_contents(), ACCESSIBILITY_MODE_COMPLETE, 1251 shell()->web_contents(), AccessibilityMode::kComplete,
1255 ui::AX_EVENT_DOCUMENT_SELECTION_CHANGED); 1252 ui::AX_EVENT_DOCUMENT_SELECTION_CHANGED);
1256 LONG start_offset = 0; 1253 LONG start_offset = 0;
1257 LONG end_offset = n_characters; 1254 LONG end_offset = n_characters;
1258 EXPECT_HRESULT_FAILED( 1255 EXPECT_HRESULT_FAILED(
1259 paragraph_text->setSelection(1, start_offset, end_offset)); 1256 paragraph_text->setSelection(1, start_offset, end_offset));
1260 EXPECT_HRESULT_SUCCEEDED( 1257 EXPECT_HRESULT_SUCCEEDED(
1261 paragraph_text->setSelection(0, start_offset, end_offset)); 1258 paragraph_text->setSelection(0, start_offset, end_offset));
1262 waiter.WaitForNotification(); 1259 waiter.WaitForNotification();
1263 1260
1264 HRESULT hr = paragraph_text->get_selection(0, &start_offset, &end_offset); 1261 HRESULT hr = paragraph_text->get_selection(0, &start_offset, &end_offset);
(...skipping 590 matching lines...) Expand 10 before | Expand all | Expand 10 after
1855 1852
1856 base::win::ScopedVariant childid_self(CHILDID_SELF); 1853 base::win::ScopedVariant childid_self(CHILDID_SELF);
1857 base::win::ScopedBstr image_name; 1854 base::win::ScopedBstr image_name;
1858 EXPECT_HRESULT_SUCCEEDED( 1855 EXPECT_HRESULT_SUCCEEDED(
1859 image->get_accName(childid_self, image_name.Receive())); 1856 image->get_accName(childid_self, image_name.Receive()));
1860 EXPECT_EQ(L"image", std::wstring(image_name, image_name.Length())); 1857 EXPECT_EQ(L"image", std::wstring(image_name, image_name.Length()));
1861 image_name.Release(); 1858 image_name.Release();
1862 // Cllicking the image will change its name. 1859 // Cllicking the image will change its name.
1863 EXPECT_HRESULT_SUCCEEDED(image_action->doAction(0)); 1860 EXPECT_HRESULT_SUCCEEDED(image_action->doAction(0));
1864 AccessibilityNotificationWaiter waiter(shell()->web_contents(), 1861 AccessibilityNotificationWaiter waiter(shell()->web_contents(),
1865 ACCESSIBILITY_MODE_COMPLETE, 1862 AccessibilityMode::kComplete,
1866 ui::AX_EVENT_TEXT_CHANGED); 1863 ui::AX_EVENT_TEXT_CHANGED);
1867 waiter.WaitForNotification(); 1864 waiter.WaitForNotification();
1868 EXPECT_HRESULT_SUCCEEDED( 1865 EXPECT_HRESULT_SUCCEEDED(
1869 image->get_accName(childid_self, image_name.Receive())); 1866 image->get_accName(childid_self, image_name.Receive()));
1870 EXPECT_EQ(L"image2", std::wstring(image_name, image_name.Length())); 1867 EXPECT_EQ(L"image2", std::wstring(image_name, image_name.Length()));
1871 EXPECT_HRESULT_FAILED(image_action->doAction(1)); 1868 EXPECT_HRESULT_FAILED(image_action->doAction(1));
1872 } 1869 }
1873 1870
1874 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, HasHWNDAfterNavigation) { 1871 IN_PROC_BROWSER_TEST_F(AccessibilityWinBrowserTest, HasHWNDAfterNavigation) {
1875 // This test simulates a scenario where RenderWidgetHostViewAura::SetSize 1872 // This test simulates a scenario where RenderWidgetHostViewAura::SetSize
1876 // is not called again after its window is added to the root window. 1873 // is not called again after its window is added to the root window.
1877 // Ensure that we still get a legacy HWND for accessibility. 1874 // Ensure that we still get a legacy HWND for accessibility.
1878 1875
1879 host_resolver()->AddRule("*", "127.0.0.1"); 1876 host_resolver()->AddRule("*", "127.0.0.1");
1880 ASSERT_TRUE(embedded_test_server()->Start()); 1877 ASSERT_TRUE(embedded_test_server()->Start());
1881 WebContentsImpl* web_contents = static_cast<WebContentsImpl*>( 1878 WebContentsImpl* web_contents = static_cast<WebContentsImpl*>(
1882 shell()->web_contents()); 1879 shell()->web_contents());
1883 WebContentsView* web_contents_view = web_contents->GetView(); 1880 WebContentsView* web_contents_view = web_contents->GetView();
1884 WebContentsViewAura* web_contents_view_aura = 1881 WebContentsViewAura* web_contents_view_aura =
1885 static_cast<WebContentsViewAura*>(web_contents_view); 1882 static_cast<WebContentsViewAura*>(web_contents_view);
1886 1883
1887 // Set a flag that will cause WebContentsViewAura to initialize a 1884 // Set a flag that will cause WebContentsViewAura to initialize a
1888 // RenderWidgetHostViewAura with a null parent view. 1885 // RenderWidgetHostViewAura with a null parent view.
1889 web_contents_view_aura->set_init_rwhv_with_null_parent_for_testing(true); 1886 web_contents_view_aura->set_init_rwhv_with_null_parent_for_testing(true);
1890 1887
1891 // Navigate to a new page and wait for the accessibility tree to load. 1888 // Navigate to a new page and wait for the accessibility tree to load.
1892 AccessibilityNotificationWaiter waiter( 1889 AccessibilityNotificationWaiter waiter(shell()->web_contents(),
1893 shell()->web_contents(), 1890 AccessibilityMode::kComplete,
1894 ACCESSIBILITY_MODE_COMPLETE, 1891 ui::AX_EVENT_LOAD_COMPLETE);
1895 ui::AX_EVENT_LOAD_COMPLETE);
1896 NavigateToURL(shell(), embedded_test_server()->GetURL( 1892 NavigateToURL(shell(), embedded_test_server()->GetURL(
1897 "/accessibility/html/article.html")); 1893 "/accessibility/html/article.html"));
1898 waiter.WaitForNotification(); 1894 waiter.WaitForNotification();
1899 1895
1900 // At this point the root of the accessibility tree shouldn't have an HWND 1896 // At this point the root of the accessibility tree shouldn't have an HWND
1901 // because we never gave a parent window to the RWHVA. 1897 // because we never gave a parent window to the RWHVA.
1902 BrowserAccessibilityManagerWin* manager = 1898 BrowserAccessibilityManagerWin* manager =
1903 static_cast<BrowserAccessibilityManagerWin*>( 1899 static_cast<BrowserAccessibilityManagerWin*>(
1904 web_contents->GetRootBrowserAccessibilityManager()); 1900 web_contents->GetRootBrowserAccessibilityManager());
1905 ASSERT_EQ(nullptr, manager->GetParentHWND()); 1901 ASSERT_EQ(nullptr, manager->GetParentHWND());
1906 1902
1907 // Now add the RWHVA's window to the root window and ensure that we have 1903 // Now add the RWHVA's window to the root window and ensure that we have
1908 // an HWND for accessibility now. 1904 // an HWND for accessibility now.
1909 web_contents_view->GetNativeView()->AddChild( 1905 web_contents_view->GetNativeView()->AddChild(
1910 web_contents->GetRenderWidgetHostView()->GetNativeView()); 1906 web_contents->GetRenderWidgetHostView()->GetNativeView());
1911 ASSERT_NE(nullptr, manager->GetParentHWND()); 1907 ASSERT_NE(nullptr, manager->GetParentHWND());
1912 } 1908 }
1913 1909
1914 } // namespace content 1910 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698