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

Unified Diff: content/browser/accessibility/accessibility_mode_browsertest.cc

Issue 2581483002: Add support for faster, more limited accessibility modes. (Closed)
Patch Set: Address feedback from Ilya Created 4 years 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/accessibility/accessibility_mode_browsertest.cc
diff --git a/content/browser/accessibility/accessibility_mode_browsertest.cc b/content/browser/accessibility/accessibility_mode_browsertest.cc
index 195362e911ad0299281ca0047ecf94be8a478206..7c28a976727b1c94fc82cb60541ac69f3b2c1ca5 100644
--- a/content/browser/accessibility/accessibility_mode_browsertest.cc
+++ b/content/browser/accessibility/accessibility_mode_browsertest.cc
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "content/browser/accessibility/browser_accessibility_state_impl.h"
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/browser/renderer_host/render_widget_host_impl.h"
#include "content/browser/renderer_host/render_widget_host_view_base.h"
@@ -28,30 +29,35 @@ class AccessibilityModeTest : public ContentBrowserTest {
return static_cast<WebContentsImpl*>(shell()->web_contents());
}
- void ExpectBrowserAccessibilityManager(bool expect_bam,
- std::string message = "") {
- if (expect_bam) {
- EXPECT_NE(
- (BrowserAccessibilityManager*)NULL,
- web_contents()->GetRootBrowserAccessibilityManager()) << message;
- } else {
- EXPECT_EQ(
- (BrowserAccessibilityManager*)NULL,
- web_contents()->GetRootBrowserAccessibilityManager()) << message;
- }
+ protected:
+ const BrowserAccessibility* FindNode(ui::AXRole role,
+ const std::string& name) {
+ const BrowserAccessibility* root = GetManager()->GetRoot();
+ CHECK(root);
+ return FindNodeInSubtree(*root, role, name);
+ }
+
+ BrowserAccessibilityManager* GetManager() {
+ WebContentsImpl* web_contents =
+ static_cast<WebContentsImpl*>(shell()->web_contents());
+ return web_contents->GetRootBrowserAccessibilityManager();
}
- bool ShouldBeBrowserAccessibilityManager(AccessibilityMode mode) {
- switch (mode) {
- case AccessibilityModeOff:
- case ACCESSIBILITY_MODE_WEB_CONTENTS_ONLY:
- return false;
- case ACCESSIBILITY_MODE_COMPLETE:
- return true;
- default:
- NOTREACHED();
+ private:
+ const BrowserAccessibility* FindNodeInSubtree(
+ const BrowserAccessibility& node,
+ ui::AXRole role,
+ const std::string& name) {
+ if (node.GetRole() == role &&
+ node.GetStringAttribute(ui::AX_ATTR_NAME) == name)
+ return &node;
+ for (unsigned int i = 0; i < node.PlatformChildCount(); ++i) {
+ const BrowserAccessibility* result = FindNodeInSubtree(
+ *node.PlatformGetChild(i), role, name);
+ if (result)
+ return result;
}
- return false;
+ return nullptr;
}
};
@@ -59,11 +65,10 @@ IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AccessibilityModeOff) {
NavigateToURL(shell(), GURL(kMinimalPageDataURL));
EXPECT_EQ(AccessibilityModeOff, web_contents()->GetAccessibilityMode());
- ExpectBrowserAccessibilityManager(
- ShouldBeBrowserAccessibilityManager(AccessibilityModeOff));
+ EXPECT_EQ(nullptr, GetManager());
}
-IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, ACCESSIBILITY_MODE_COMPLETE) {
+IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AccessibilityModeComplete) {
NavigateToURL(shell(), GURL(kMinimalPageDataURL));
ASSERT_EQ(AccessibilityModeOff, web_contents()->GetAccessibilityMode());
@@ -72,12 +77,11 @@ IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, ACCESSIBILITY_MODE_COMPLETE) {
EXPECT_EQ(ACCESSIBILITY_MODE_COMPLETE,
web_contents()->GetAccessibilityMode());
waiter.WaitForNotification();
- ExpectBrowserAccessibilityManager(
- ShouldBeBrowserAccessibilityManager(ACCESSIBILITY_MODE_COMPLETE));
+ EXPECT_NE(nullptr, GetManager());
}
IN_PROC_BROWSER_TEST_F(AccessibilityModeTest,
- ACCESSIBILITY_MODE_WEB_CONTENTS_ONLY) {
+ AccessibilityModeWebContentsOnly) {
NavigateToURL(shell(), GURL(kMinimalPageDataURL));
ASSERT_EQ(AccessibilityModeOff, web_contents()->GetAccessibilityMode());
@@ -86,10 +90,8 @@ IN_PROC_BROWSER_TEST_F(AccessibilityModeTest,
EXPECT_EQ(ACCESSIBILITY_MODE_WEB_CONTENTS_ONLY,
web_contents()->GetAccessibilityMode());
waiter.WaitForNotification();
- // No BrowserAccessibilityManager expected for
- // ACCESSIBILITY_MODE_WEB_CONTENTS_ONLY
- ExpectBrowserAccessibilityManager(ShouldBeBrowserAccessibilityManager(
- ACCESSIBILITY_MODE_WEB_CONTENTS_ONLY));
+ // No BrowserAccessibilityManager expected for this mode.
+ EXPECT_EQ(nullptr, GetManager());
}
IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AddingModes) {
@@ -100,20 +102,81 @@ IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AddingModes) {
EXPECT_EQ(ACCESSIBILITY_MODE_WEB_CONTENTS_ONLY,
web_contents()->GetAccessibilityMode());
waiter.WaitForNotification();
- ExpectBrowserAccessibilityManager(
- ShouldBeBrowserAccessibilityManager(ACCESSIBILITY_MODE_WEB_CONTENTS_ONLY),
- "Should be no BrowserAccessibilityManager "
- "for ACCESSIBILITY_MODE_WEB_CONTENTS_ONLY");
+ EXPECT_EQ(nullptr, GetManager());
AccessibilityNotificationWaiter waiter2(shell()->web_contents());
web_contents()->AddAccessibilityMode(ACCESSIBILITY_MODE_COMPLETE);
EXPECT_EQ(ACCESSIBILITY_MODE_COMPLETE,
web_contents()->GetAccessibilityMode());
waiter2.WaitForNotification();
- ExpectBrowserAccessibilityManager(
- ShouldBeBrowserAccessibilityManager(ACCESSIBILITY_MODE_COMPLETE),
- "Should be a BrowserAccessibilityManager "
- "for ACCESSIBILITY_MODE_COMPLETE");
+ EXPECT_NE(nullptr, GetManager());
+}
+
+IN_PROC_BROWSER_TEST_F(AccessibilityModeTest,
+ FullAccessibilityHasInlineTextBoxes) {
+ NavigateToURL(shell(), GURL(url::kAboutBlankURL));
+
+ AccessibilityNotificationWaiter waiter(shell()->web_contents(),
+ ACCESSIBILITY_MODE_COMPLETE,
+ ui::AX_EVENT_LOAD_COMPLETE);
+ GURL url("data:text/html,<p>Para</p>");
+ NavigateToURL(shell(), url);
+ waiter.WaitForNotification();
+
+ const BrowserAccessibility* text = FindNode(ui::AX_ROLE_STATIC_TEXT, "Para");
+ ASSERT_NE(nullptr, text);
+ ASSERT_EQ(1U, text->InternalChildCount());
+ BrowserAccessibility* inline_text = text->InternalGetChild(0);
+ ASSERT_NE(nullptr, inline_text);
+ EXPECT_EQ(ui::AX_ROLE_INLINE_TEXT_BOX, inline_text->GetRole());
+}
+
+IN_PROC_BROWSER_TEST_F(AccessibilityModeTest,
+ MinimalAccessibilityModeHasNoInlineTextBoxes) {
+ NavigateToURL(shell(), GURL(url::kAboutBlankURL));
+
+ AccessibilityNotificationWaiter waiter(
+ shell()->web_contents(),
+ ACCESSIBILITY_MODE_FLAG_NATIVE_APIS |
+ ACCESSIBILITY_MODE_FLAG_WEB_CONTENTS,
+ ui::AX_EVENT_LOAD_COMPLETE);
+ GURL url("data:text/html,<p>Para</p>");
+ NavigateToURL(shell(), url);
+ waiter.WaitForNotification();
+
+ const BrowserAccessibility* text = FindNode(ui::AX_ROLE_STATIC_TEXT, "Para");
+ ASSERT_NE(nullptr, text);
+ EXPECT_EQ(0U, text->InternalChildCount());
+}
+
+IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AddScreenReaderModeFlag) {
+ NavigateToURL(shell(), GURL(url::kAboutBlankURL));
+
+ AccessibilityNotificationWaiter waiter(
+ shell()->web_contents(),
+ ACCESSIBILITY_MODE_FLAG_NATIVE_APIS |
+ ACCESSIBILITY_MODE_FLAG_WEB_CONTENTS,
+ ui::AX_EVENT_LOAD_COMPLETE);
+ GURL url("data:text/html,<input aria-label=Foo placeholder=Bar>");
+ NavigateToURL(shell(), url);
+ waiter.WaitForNotification();
+
+ const BrowserAccessibility* textbox = FindNode(ui::AX_ROLE_TEXT_FIELD, "Foo");
+ ASSERT_NE(nullptr, textbox);
+ EXPECT_FALSE(textbox->HasStringAttribute(ui::AX_ATTR_PLACEHOLDER));
+ int original_id = textbox->GetId();
+
+ AccessibilityNotificationWaiter waiter2(
+ shell()->web_contents(), 0, ui::AX_EVENT_LAYOUT_COMPLETE);
+ BrowserAccessibilityStateImpl::GetInstance()->AddAccessibilityModeFlags(
+ ACCESSIBILITY_MODE_FLAG_SCREEN_READER);
+ waiter2.WaitForNotification();
+
+ const BrowserAccessibility* textbox2 = FindNode(
+ ui::AX_ROLE_TEXT_FIELD, "Foo");
+ ASSERT_NE(nullptr, textbox2);
+ EXPECT_TRUE(textbox2->HasStringAttribute(ui::AX_ATTR_PLACEHOLDER));
+ EXPECT_NE(original_id, textbox2->GetId());
}
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698