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

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

Issue 2581483002: Add support for faster, more limited accessibility modes. (Closed)
Patch Set: Disable tests that can't pass on Android with TODO Created 3 years, 12 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
« no previous file with comments | « no previous file | content/browser/accessibility/browser_accessibility_state_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 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/renderer_host/render_view_host_impl.h" 6 #include "content/browser/renderer_host/render_view_host_impl.h"
6 #include "content/browser/renderer_host/render_widget_host_impl.h" 7 #include "content/browser/renderer_host/render_widget_host_impl.h"
7 #include "content/browser/renderer_host/render_widget_host_view_base.h" 8 #include "content/browser/renderer_host/render_widget_host_view_base.h"
8 #include "content/browser/web_contents/web_contents_impl.h" 9 #include "content/browser/web_contents/web_contents_impl.h"
9 #include "content/public/browser/render_view_host.h" 10 #include "content/public/browser/render_view_host.h"
10 #include "content/public/browser/render_widget_host.h" 11 #include "content/public/browser/render_widget_host.h"
11 #include "content/public/browser/render_widget_host_view.h" 12 #include "content/public/browser/render_widget_host_view.h"
12 #include "content/public/browser/web_contents.h" 13 #include "content/public/browser/web_contents.h"
13 #include "content/public/common/url_constants.h" 14 #include "content/public/common/url_constants.h"
14 #include "content/public/test/content_browser_test.h" 15 #include "content/public/test/content_browser_test.h"
15 #include "content/public/test/content_browser_test_utils.h" 16 #include "content/public/test/content_browser_test_utils.h"
16 #include "content/shell/browser/shell.h" 17 #include "content/shell/browser/shell.h"
17 #include "content/test/accessibility_browser_test_utils.h" 18 #include "content/test/accessibility_browser_test_utils.h"
18 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
19 20
20 namespace content { 21 namespace content {
21 22
22 const char kMinimalPageDataURL[] = 23 const char kMinimalPageDataURL[] =
23 "data:text/html,<html><head></head><body>Hello, world</body></html>"; 24 "data:text/html,<html><head></head><body>Hello, world</body></html>";
24 25
25 class AccessibilityModeTest : public ContentBrowserTest { 26 class AccessibilityModeTest : public ContentBrowserTest {
26 protected: 27 protected:
27 WebContentsImpl* web_contents() { 28 WebContentsImpl* web_contents() {
28 return static_cast<WebContentsImpl*>(shell()->web_contents()); 29 return static_cast<WebContentsImpl*>(shell()->web_contents());
29 } 30 }
30 31
31 void ExpectBrowserAccessibilityManager(bool expect_bam, 32 protected:
32 std::string message = "") { 33 const BrowserAccessibility* FindNode(ui::AXRole role,
33 if (expect_bam) { 34 const std::string& name) {
34 EXPECT_NE( 35 const BrowserAccessibility* root = GetManager()->GetRoot();
35 (BrowserAccessibilityManager*)NULL, 36 CHECK(root);
36 web_contents()->GetRootBrowserAccessibilityManager()) << message; 37 return FindNodeInSubtree(*root, role, name);
37 } else {
38 EXPECT_EQ(
39 (BrowserAccessibilityManager*)NULL,
40 web_contents()->GetRootBrowserAccessibilityManager()) << message;
41 }
42 } 38 }
43 39
44 bool ShouldBeBrowserAccessibilityManager(AccessibilityMode mode) { 40 BrowserAccessibilityManager* GetManager() {
45 switch (mode) { 41 WebContentsImpl* web_contents =
46 case AccessibilityModeOff: 42 static_cast<WebContentsImpl*>(shell()->web_contents());
47 case ACCESSIBILITY_MODE_WEB_CONTENTS_ONLY: 43 return web_contents->GetRootBrowserAccessibilityManager();
48 return false; 44 }
49 case ACCESSIBILITY_MODE_COMPLETE: 45
50 return true; 46 private:
51 default: 47 const BrowserAccessibility* FindNodeInSubtree(
52 NOTREACHED(); 48 const BrowserAccessibility& node,
49 ui::AXRole role,
50 const std::string& name) {
51 if (node.GetRole() == role &&
52 node.GetStringAttribute(ui::AX_ATTR_NAME) == name)
53 return &node;
54 for (unsigned int i = 0; i < node.PlatformChildCount(); ++i) {
55 const BrowserAccessibility* result = FindNodeInSubtree(
56 *node.PlatformGetChild(i), role, name);
57 if (result)
58 return result;
53 } 59 }
54 return false; 60 return nullptr;
55 } 61 }
56 }; 62 };
57 63
58 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AccessibilityModeOff) { 64 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AccessibilityModeOff) {
59 NavigateToURL(shell(), GURL(kMinimalPageDataURL)); 65 NavigateToURL(shell(), GURL(kMinimalPageDataURL));
60 66
61 EXPECT_EQ(AccessibilityModeOff, web_contents()->GetAccessibilityMode()); 67 EXPECT_EQ(AccessibilityModeOff, web_contents()->GetAccessibilityMode());
62 ExpectBrowserAccessibilityManager( 68 EXPECT_EQ(nullptr, GetManager());
63 ShouldBeBrowserAccessibilityManager(AccessibilityModeOff));
64 } 69 }
65 70
66 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, ACCESSIBILITY_MODE_COMPLETE) { 71 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AccessibilityModeComplete) {
67 NavigateToURL(shell(), GURL(kMinimalPageDataURL)); 72 NavigateToURL(shell(), GURL(kMinimalPageDataURL));
68 ASSERT_EQ(AccessibilityModeOff, web_contents()->GetAccessibilityMode()); 73 ASSERT_EQ(AccessibilityModeOff, web_contents()->GetAccessibilityMode());
69 74
70 AccessibilityNotificationWaiter waiter(shell()->web_contents()); 75 AccessibilityNotificationWaiter waiter(shell()->web_contents());
71 web_contents()->AddAccessibilityMode(ACCESSIBILITY_MODE_COMPLETE); 76 web_contents()->AddAccessibilityMode(ACCESSIBILITY_MODE_COMPLETE);
72 EXPECT_EQ(ACCESSIBILITY_MODE_COMPLETE, 77 EXPECT_EQ(ACCESSIBILITY_MODE_COMPLETE,
73 web_contents()->GetAccessibilityMode()); 78 web_contents()->GetAccessibilityMode());
74 waiter.WaitForNotification(); 79 waiter.WaitForNotification();
75 ExpectBrowserAccessibilityManager( 80 EXPECT_NE(nullptr, GetManager());
76 ShouldBeBrowserAccessibilityManager(ACCESSIBILITY_MODE_COMPLETE));
77 } 81 }
78 82
79 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, 83 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest,
80 ACCESSIBILITY_MODE_WEB_CONTENTS_ONLY) { 84 AccessibilityModeWebContentsOnly) {
81 NavigateToURL(shell(), GURL(kMinimalPageDataURL)); 85 NavigateToURL(shell(), GURL(kMinimalPageDataURL));
82 ASSERT_EQ(AccessibilityModeOff, web_contents()->GetAccessibilityMode()); 86 ASSERT_EQ(AccessibilityModeOff, web_contents()->GetAccessibilityMode());
83 87
84 AccessibilityNotificationWaiter waiter(shell()->web_contents()); 88 AccessibilityNotificationWaiter waiter(shell()->web_contents());
85 web_contents()->AddAccessibilityMode(ACCESSIBILITY_MODE_WEB_CONTENTS_ONLY); 89 web_contents()->AddAccessibilityMode(ACCESSIBILITY_MODE_WEB_CONTENTS_ONLY);
86 EXPECT_EQ(ACCESSIBILITY_MODE_WEB_CONTENTS_ONLY, 90 EXPECT_EQ(ACCESSIBILITY_MODE_WEB_CONTENTS_ONLY,
87 web_contents()->GetAccessibilityMode()); 91 web_contents()->GetAccessibilityMode());
88 waiter.WaitForNotification(); 92 waiter.WaitForNotification();
89 // No BrowserAccessibilityManager expected for 93 // No BrowserAccessibilityManager expected for this mode.
90 // ACCESSIBILITY_MODE_WEB_CONTENTS_ONLY 94 EXPECT_EQ(nullptr, GetManager());
91 ExpectBrowserAccessibilityManager(ShouldBeBrowserAccessibilityManager(
92 ACCESSIBILITY_MODE_WEB_CONTENTS_ONLY));
93 } 95 }
94 96
95 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AddingModes) { 97 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AddingModes) {
96 NavigateToURL(shell(), GURL(kMinimalPageDataURL)); 98 NavigateToURL(shell(), GURL(kMinimalPageDataURL));
97 99
98 AccessibilityNotificationWaiter waiter(shell()->web_contents()); 100 AccessibilityNotificationWaiter waiter(shell()->web_contents());
99 web_contents()->AddAccessibilityMode(ACCESSIBILITY_MODE_WEB_CONTENTS_ONLY); 101 web_contents()->AddAccessibilityMode(ACCESSIBILITY_MODE_WEB_CONTENTS_ONLY);
100 EXPECT_EQ(ACCESSIBILITY_MODE_WEB_CONTENTS_ONLY, 102 EXPECT_EQ(ACCESSIBILITY_MODE_WEB_CONTENTS_ONLY,
101 web_contents()->GetAccessibilityMode()); 103 web_contents()->GetAccessibilityMode());
102 waiter.WaitForNotification(); 104 waiter.WaitForNotification();
103 ExpectBrowserAccessibilityManager( 105 EXPECT_EQ(nullptr, GetManager());
104 ShouldBeBrowserAccessibilityManager(ACCESSIBILITY_MODE_WEB_CONTENTS_ONLY),
105 "Should be no BrowserAccessibilityManager "
106 "for ACCESSIBILITY_MODE_WEB_CONTENTS_ONLY");
107 106
108 AccessibilityNotificationWaiter waiter2(shell()->web_contents()); 107 AccessibilityNotificationWaiter waiter2(shell()->web_contents());
109 web_contents()->AddAccessibilityMode(ACCESSIBILITY_MODE_COMPLETE); 108 web_contents()->AddAccessibilityMode(ACCESSIBILITY_MODE_COMPLETE);
110 EXPECT_EQ(ACCESSIBILITY_MODE_COMPLETE, 109 EXPECT_EQ(ACCESSIBILITY_MODE_COMPLETE,
111 web_contents()->GetAccessibilityMode()); 110 web_contents()->GetAccessibilityMode());
112 waiter2.WaitForNotification(); 111 waiter2.WaitForNotification();
113 ExpectBrowserAccessibilityManager( 112 EXPECT_NE(nullptr, GetManager());
114 ShouldBeBrowserAccessibilityManager(ACCESSIBILITY_MODE_COMPLETE), 113 }
115 "Should be a BrowserAccessibilityManager " 114
116 "for ACCESSIBILITY_MODE_COMPLETE"); 115 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest,
116 FullAccessibilityHasInlineTextBoxes) {
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
119 #if !defined(OS_ANDROID)
120 NavigateToURL(shell(), GURL(url::kAboutBlankURL));
121
122 AccessibilityNotificationWaiter waiter(shell()->web_contents(),
123 ACCESSIBILITY_MODE_COMPLETE,
124 ui::AX_EVENT_LOAD_COMPLETE);
125 GURL url("data:text/html,<p>Para</p>");
126 NavigateToURL(shell(), url);
127 waiter.WaitForNotification();
128
129 const BrowserAccessibility* text = FindNode(ui::AX_ROLE_STATIC_TEXT, "Para");
130 ASSERT_NE(nullptr, text);
131 ASSERT_EQ(1U, text->InternalChildCount());
132 BrowserAccessibility* inline_text = text->InternalGetChild(0);
133 ASSERT_NE(nullptr, inline_text);
134 EXPECT_EQ(ui::AX_ROLE_INLINE_TEXT_BOX, inline_text->GetRole());
135 #endif // !defined(OS_ANDROID)
136 }
137
138 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest,
139 MinimalAccessibilityModeHasNoInlineTextBoxes) {
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
142 #if !defined(OS_ANDROID)
143 NavigateToURL(shell(), GURL(url::kAboutBlankURL));
144
145 AccessibilityNotificationWaiter waiter(
146 shell()->web_contents(),
147 ACCESSIBILITY_MODE_FLAG_NATIVE_APIS |
148 ACCESSIBILITY_MODE_FLAG_WEB_CONTENTS,
149 ui::AX_EVENT_LOAD_COMPLETE);
150 GURL url("data:text/html,<p>Para</p>");
151 NavigateToURL(shell(), url);
152 waiter.WaitForNotification();
153
154 const BrowserAccessibility* text = FindNode(ui::AX_ROLE_STATIC_TEXT, "Para");
155 ASSERT_NE(nullptr, text);
156 EXPECT_EQ(0U, text->InternalChildCount());
157 #endif // !defined(OS_ANDROID)
158 }
159
160 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AddScreenReaderModeFlag) {
161 NavigateToURL(shell(), GURL(url::kAboutBlankURL));
162
163 AccessibilityNotificationWaiter waiter(
164 shell()->web_contents(),
165 ACCESSIBILITY_MODE_FLAG_NATIVE_APIS |
166 ACCESSIBILITY_MODE_FLAG_WEB_CONTENTS,
167 ui::AX_EVENT_LOAD_COMPLETE);
168 GURL url("data:text/html,<input aria-label=Foo placeholder=Bar>");
169 NavigateToURL(shell(), url);
170 waiter.WaitForNotification();
171
172 const BrowserAccessibility* textbox = FindNode(ui::AX_ROLE_TEXT_FIELD, "Foo");
173 ASSERT_NE(nullptr, textbox);
174 EXPECT_FALSE(textbox->HasStringAttribute(ui::AX_ATTR_PLACEHOLDER));
175 int original_id = textbox->GetId();
176
177 AccessibilityNotificationWaiter waiter2(
178 shell()->web_contents(), 0, ui::AX_EVENT_LAYOUT_COMPLETE);
179 BrowserAccessibilityStateImpl::GetInstance()->AddAccessibilityModeFlags(
180 ACCESSIBILITY_MODE_FLAG_SCREEN_READER);
181 waiter2.WaitForNotification();
182
183 const BrowserAccessibility* textbox2 = FindNode(
184 ui::AX_ROLE_TEXT_FIELD, "Foo");
185 ASSERT_NE(nullptr, textbox2);
186 EXPECT_TRUE(textbox2->HasStringAttribute(ui::AX_ATTR_PLACEHOLDER));
187 EXPECT_NE(original_id, textbox2->GetId());
117 } 188 }
118 189
119 } // namespace content 190 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | content/browser/accessibility/browser_accessibility_state_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698