OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "content/browser/accessibility/browser_accessibility_state_impl.h" | 5 #include "content/browser/accessibility/browser_accessibility_state_impl.h" |
6 #include "content/browser/renderer_host/render_view_host_impl.h" | 6 #include "content/browser/renderer_host/render_view_host_impl.h" |
7 #include "content/browser/renderer_host/render_widget_host_impl.h" | 7 #include "content/browser/renderer_host/render_widget_host_impl.h" |
8 #include "content/browser/renderer_host/render_widget_host_view_base.h" | 8 #include "content/browser/renderer_host/render_widget_host_view_base.h" |
9 #include "content/browser/web_contents/web_contents_impl.h" | 9 #include "content/browser/web_contents/web_contents_impl.h" |
| 10 #include "content/common/accessibility_mode.h" |
10 #include "content/public/browser/render_view_host.h" | 11 #include "content/public/browser/render_view_host.h" |
11 #include "content/public/browser/render_widget_host.h" | 12 #include "content/public/browser/render_widget_host.h" |
12 #include "content/public/browser/render_widget_host_view.h" | 13 #include "content/public/browser/render_widget_host_view.h" |
13 #include "content/public/browser/web_contents.h" | 14 #include "content/public/browser/web_contents.h" |
14 #include "content/public/common/url_constants.h" | 15 #include "content/public/common/url_constants.h" |
15 #include "content/public/test/content_browser_test.h" | 16 #include "content/public/test/content_browser_test.h" |
16 #include "content/public/test/content_browser_test_utils.h" | 17 #include "content/public/test/content_browser_test_utils.h" |
17 #include "content/shell/browser/shell.h" | 18 #include "content/shell/browser/shell.h" |
18 #include "content/test/accessibility_browser_test_utils.h" | 19 #include "content/test/accessibility_browser_test_utils.h" |
19 #include "testing/gtest/include/gtest/gtest.h" | 20 #include "testing/gtest/include/gtest/gtest.h" |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
56 *node.PlatformGetChild(i), role, name); | 57 *node.PlatformGetChild(i), role, name); |
57 if (result) | 58 if (result) |
58 return result; | 59 return result; |
59 } | 60 } |
60 return nullptr; | 61 return nullptr; |
61 } | 62 } |
62 }; | 63 }; |
63 | 64 |
64 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AccessibilityModeOff) { | 65 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AccessibilityModeOff) { |
65 NavigateToURL(shell(), GURL(kMinimalPageDataURL)); | 66 NavigateToURL(shell(), GURL(kMinimalPageDataURL)); |
66 | 67 EXPECT_TRUE(web_contents()->GetAccessibilityMode().is_mode_off()); |
67 EXPECT_EQ(AccessibilityModeOff, web_contents()->GetAccessibilityMode()); | |
68 EXPECT_EQ(nullptr, GetManager()); | 68 EXPECT_EQ(nullptr, GetManager()); |
69 } | 69 } |
70 | 70 |
71 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AccessibilityModeComplete) { | 71 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AccessibilityModeComplete) { |
72 NavigateToURL(shell(), GURL(kMinimalPageDataURL)); | 72 NavigateToURL(shell(), GURL(kMinimalPageDataURL)); |
73 ASSERT_EQ(AccessibilityModeOff, web_contents()->GetAccessibilityMode()); | 73 ASSERT_TRUE(web_contents()->GetAccessibilityMode().is_mode_off()); |
74 | 74 |
75 AccessibilityNotificationWaiter waiter(shell()->web_contents()); | 75 AccessibilityNotificationWaiter waiter(shell()->web_contents()); |
76 web_contents()->AddAccessibilityMode(ACCESSIBILITY_MODE_COMPLETE); | 76 web_contents()->AddAccessibilityMode(kAccessibilityModeComplete); |
77 EXPECT_EQ(ACCESSIBILITY_MODE_COMPLETE, | 77 EXPECT_TRUE(web_contents()->GetAccessibilityMode() == |
78 web_contents()->GetAccessibilityMode()); | 78 kAccessibilityModeComplete); |
79 waiter.WaitForNotification(); | 79 waiter.WaitForNotification(); |
80 EXPECT_NE(nullptr, GetManager()); | 80 EXPECT_NE(nullptr, GetManager()); |
81 } | 81 } |
82 | 82 |
83 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, | 83 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, |
84 AccessibilityModeWebContentsOnly) { | 84 AccessibilityModeWebContentsOnly) { |
85 NavigateToURL(shell(), GURL(kMinimalPageDataURL)); | 85 NavigateToURL(shell(), GURL(kMinimalPageDataURL)); |
86 ASSERT_EQ(AccessibilityModeOff, web_contents()->GetAccessibilityMode()); | 86 ASSERT_TRUE(web_contents()->GetAccessibilityMode().is_mode_off()); |
87 | 87 |
88 AccessibilityNotificationWaiter waiter(shell()->web_contents()); | 88 AccessibilityNotificationWaiter waiter(shell()->web_contents()); |
89 web_contents()->AddAccessibilityMode(ACCESSIBILITY_MODE_WEB_CONTENTS_ONLY); | 89 web_contents()->AddAccessibilityMode(kAccessibilityModeWebContentsOnly); |
90 EXPECT_EQ(ACCESSIBILITY_MODE_WEB_CONTENTS_ONLY, | 90 EXPECT_TRUE(web_contents()->GetAccessibilityMode() == |
91 web_contents()->GetAccessibilityMode()); | 91 kAccessibilityModeWebContentsOnly); |
92 waiter.WaitForNotification(); | 92 waiter.WaitForNotification(); |
93 // No BrowserAccessibilityManager expected for this mode. | 93 // No BrowserAccessibilityManager expected for this mode. |
94 EXPECT_EQ(nullptr, GetManager()); | 94 EXPECT_EQ(nullptr, GetManager()); |
95 } | 95 } |
96 | 96 |
97 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AddingModes) { | 97 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AddingModes) { |
98 NavigateToURL(shell(), GURL(kMinimalPageDataURL)); | 98 NavigateToURL(shell(), GURL(kMinimalPageDataURL)); |
99 | 99 |
100 AccessibilityNotificationWaiter waiter(shell()->web_contents()); | 100 AccessibilityNotificationWaiter waiter(shell()->web_contents()); |
101 web_contents()->AddAccessibilityMode(ACCESSIBILITY_MODE_WEB_CONTENTS_ONLY); | 101 web_contents()->AddAccessibilityMode(kAccessibilityModeWebContentsOnly); |
102 EXPECT_EQ(ACCESSIBILITY_MODE_WEB_CONTENTS_ONLY, | 102 EXPECT_TRUE(web_contents()->GetAccessibilityMode() == |
103 web_contents()->GetAccessibilityMode()); | 103 kAccessibilityModeWebContentsOnly); |
104 waiter.WaitForNotification(); | 104 waiter.WaitForNotification(); |
105 EXPECT_EQ(nullptr, GetManager()); | 105 EXPECT_EQ(nullptr, GetManager()); |
106 | 106 |
107 AccessibilityNotificationWaiter waiter2(shell()->web_contents()); | 107 AccessibilityNotificationWaiter waiter2(shell()->web_contents()); |
108 web_contents()->AddAccessibilityMode(ACCESSIBILITY_MODE_COMPLETE); | 108 web_contents()->AddAccessibilityMode(kAccessibilityModeComplete); |
109 EXPECT_EQ(ACCESSIBILITY_MODE_COMPLETE, | 109 EXPECT_TRUE(web_contents()->GetAccessibilityMode() == |
110 web_contents()->GetAccessibilityMode()); | 110 kAccessibilityModeComplete); |
111 waiter2.WaitForNotification(); | 111 waiter2.WaitForNotification(); |
112 EXPECT_NE(nullptr, GetManager()); | 112 EXPECT_NE(nullptr, GetManager()); |
113 } | 113 } |
114 | 114 |
115 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, | 115 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, |
116 FullAccessibilityHasInlineTextBoxes) { | 116 FullAccessibilityHasInlineTextBoxes) { |
117 // TODO(dmazzoni): On Android we use an ifdef to disable inline text boxes, | 117 // TODO(dmazzoni): On Android we use an ifdef to disable inline text boxes, |
118 // we should do it with accessibility flags instead. http://crbug.com/672205 | 118 // we should do it with accessibility flags instead. http://crbug.com/672205 |
119 #if !defined(OS_ANDROID) | 119 #if !defined(OS_ANDROID) |
120 NavigateToURL(shell(), GURL(url::kAboutBlankURL)); | 120 NavigateToURL(shell(), GURL(url::kAboutBlankURL)); |
121 | 121 |
122 AccessibilityNotificationWaiter waiter(shell()->web_contents(), | 122 AccessibilityNotificationWaiter waiter(shell()->web_contents(), |
123 ACCESSIBILITY_MODE_COMPLETE, | 123 kAccessibilityModeComplete, |
124 ui::AX_EVENT_LOAD_COMPLETE); | 124 ui::AX_EVENT_LOAD_COMPLETE); |
125 GURL url("data:text/html,<p>Para</p>"); | 125 GURL url("data:text/html,<p>Para</p>"); |
126 NavigateToURL(shell(), url); | 126 NavigateToURL(shell(), url); |
127 waiter.WaitForNotification(); | 127 waiter.WaitForNotification(); |
128 | 128 |
129 const BrowserAccessibility* text = FindNode(ui::AX_ROLE_STATIC_TEXT, "Para"); | 129 const BrowserAccessibility* text = FindNode(ui::AX_ROLE_STATIC_TEXT, "Para"); |
130 ASSERT_NE(nullptr, text); | 130 ASSERT_NE(nullptr, text); |
131 ASSERT_EQ(1U, text->InternalChildCount()); | 131 ASSERT_EQ(1U, text->InternalChildCount()); |
132 BrowserAccessibility* inline_text = text->InternalGetChild(0); | 132 BrowserAccessibility* inline_text = text->InternalGetChild(0); |
133 ASSERT_NE(nullptr, inline_text); | 133 ASSERT_NE(nullptr, inline_text); |
134 EXPECT_EQ(ui::AX_ROLE_INLINE_TEXT_BOX, inline_text->GetRole()); | 134 EXPECT_EQ(ui::AX_ROLE_INLINE_TEXT_BOX, inline_text->GetRole()); |
135 #endif // !defined(OS_ANDROID) | 135 #endif // !defined(OS_ANDROID) |
136 } | 136 } |
137 | 137 |
138 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, | 138 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, |
139 MinimalAccessibilityModeHasNoInlineTextBoxes) { | 139 MinimalAccessibilityModeHasNoInlineTextBoxes) { |
140 // TODO(dmazzoni): On Android we use an ifdef to disable inline text boxes, | 140 // TODO(dmazzoni): On Android we use an ifdef to disable inline text boxes, |
141 // we should do it with accessibility flags instead. http://crbug.com/672205 | 141 // we should do it with accessibility flags instead. http://crbug.com/672205 |
142 #if !defined(OS_ANDROID) | 142 #if !defined(OS_ANDROID) |
143 NavigateToURL(shell(), GURL(url::kAboutBlankURL)); | 143 NavigateToURL(shell(), GURL(url::kAboutBlankURL)); |
144 | 144 |
145 AccessibilityNotificationWaiter waiter( | 145 AccessibilityNotificationWaiter waiter( |
146 shell()->web_contents(), | 146 shell()->web_contents(), |
147 ACCESSIBILITY_MODE_FLAG_NATIVE_APIS | | 147 AccessibilityMode::kNativeAPIs | AccessibilityMode::kWebContents, |
148 ACCESSIBILITY_MODE_FLAG_WEB_CONTENTS, | |
149 ui::AX_EVENT_LOAD_COMPLETE); | 148 ui::AX_EVENT_LOAD_COMPLETE); |
150 GURL url("data:text/html,<p>Para</p>"); | 149 GURL url("data:text/html,<p>Para</p>"); |
151 NavigateToURL(shell(), url); | 150 NavigateToURL(shell(), url); |
152 waiter.WaitForNotification(); | 151 waiter.WaitForNotification(); |
153 | 152 |
154 const BrowserAccessibility* text = FindNode(ui::AX_ROLE_STATIC_TEXT, "Para"); | 153 const BrowserAccessibility* text = FindNode(ui::AX_ROLE_STATIC_TEXT, "Para"); |
155 ASSERT_NE(nullptr, text); | 154 ASSERT_NE(nullptr, text); |
156 EXPECT_EQ(0U, text->InternalChildCount()); | 155 EXPECT_EQ(0U, text->InternalChildCount()); |
157 #endif // !defined(OS_ANDROID) | 156 #endif // !defined(OS_ANDROID) |
158 } | 157 } |
159 | 158 |
160 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AddScreenReaderModeFlag) { | 159 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AddScreenReaderModeFlag) { |
161 NavigateToURL(shell(), GURL(url::kAboutBlankURL)); | 160 NavigateToURL(shell(), GURL(url::kAboutBlankURL)); |
162 | 161 |
163 AccessibilityNotificationWaiter waiter( | 162 AccessibilityNotificationWaiter waiter( |
164 shell()->web_contents(), | 163 shell()->web_contents(), |
165 ACCESSIBILITY_MODE_FLAG_NATIVE_APIS | | 164 AccessibilityMode::kNativeAPIs | AccessibilityMode::kWebContents, |
166 ACCESSIBILITY_MODE_FLAG_WEB_CONTENTS, | |
167 ui::AX_EVENT_LOAD_COMPLETE); | 165 ui::AX_EVENT_LOAD_COMPLETE); |
168 GURL url("data:text/html,<input aria-label=Foo placeholder=Bar>"); | 166 GURL url("data:text/html,<input aria-label=Foo placeholder=Bar>"); |
169 NavigateToURL(shell(), url); | 167 NavigateToURL(shell(), url); |
170 waiter.WaitForNotification(); | 168 waiter.WaitForNotification(); |
171 | 169 |
172 const BrowserAccessibility* textbox = FindNode(ui::AX_ROLE_TEXT_FIELD, "Foo"); | 170 const BrowserAccessibility* textbox = FindNode(ui::AX_ROLE_TEXT_FIELD, "Foo"); |
173 ASSERT_NE(nullptr, textbox); | 171 ASSERT_NE(nullptr, textbox); |
174 EXPECT_FALSE(textbox->HasStringAttribute(ui::AX_ATTR_PLACEHOLDER)); | 172 EXPECT_FALSE(textbox->HasStringAttribute(ui::AX_ATTR_PLACEHOLDER)); |
175 int original_id = textbox->GetId(); | 173 int original_id = textbox->GetId(); |
176 | 174 |
177 AccessibilityNotificationWaiter waiter2( | 175 AccessibilityNotificationWaiter waiter2(shell()->web_contents(), |
178 shell()->web_contents(), 0, ui::AX_EVENT_LAYOUT_COMPLETE); | 176 AccessibilityMode(), |
| 177 ui::AX_EVENT_LAYOUT_COMPLETE); |
179 BrowserAccessibilityStateImpl::GetInstance()->AddAccessibilityModeFlags( | 178 BrowserAccessibilityStateImpl::GetInstance()->AddAccessibilityModeFlags( |
180 ACCESSIBILITY_MODE_FLAG_SCREEN_READER); | 179 AccessibilityMode::kScreenReader); |
181 waiter2.WaitForNotification(); | 180 waiter2.WaitForNotification(); |
182 | 181 |
183 const BrowserAccessibility* textbox2 = FindNode( | 182 const BrowserAccessibility* textbox2 = FindNode( |
184 ui::AX_ROLE_TEXT_FIELD, "Foo"); | 183 ui::AX_ROLE_TEXT_FIELD, "Foo"); |
185 ASSERT_NE(nullptr, textbox2); | 184 ASSERT_NE(nullptr, textbox2); |
186 EXPECT_TRUE(textbox2->HasStringAttribute(ui::AX_ATTR_PLACEHOLDER)); | 185 EXPECT_TRUE(textbox2->HasStringAttribute(ui::AX_ATTR_PLACEHOLDER)); |
187 EXPECT_NE(original_id, textbox2->GetId()); | 186 EXPECT_NE(original_id, textbox2->GetId()); |
188 } | 187 } |
189 | 188 |
190 } // namespace content | 189 } // namespace content |
OLD | NEW |