// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "content/browser/accessibility/accessibility_mode_helper.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" #include "content/browser/web_contents/web_contents_impl.h" #include "content/public/browser/render_view_host.h" #include "content/public/browser/render_widget_host.h" #include "content/public/browser/render_widget_host_view.h" #include "content/public/browser/web_contents.h" #include "content/public/common/url_constants.h" #include "content/public/test/content_browser_test.h" #include "content/public/test/content_browser_test_utils.h" #include "content/shell/browser/shell.h" #include "content/test/accessibility_browser_test_utils.h" #include "testing/gtest/include/gtest/gtest.h" namespace content { const char kMinimalPageDataURL[] = "data:text/html,Hello, world"; class AccessibilityModeTest : public ContentBrowserTest { protected: WebContentsImpl* web_contents() { return static_cast(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; } } AccessibilityMode CorrectedAccessibility(AccessibilityMode mode) { return AddAccessibilityModeTo(GetBaseAccessibilityMode(), mode); } bool ShouldBeBrowserAccessibilityManager(AccessibilityMode mode) { mode = CorrectedAccessibility(mode); switch (mode) { case AccessibilityModeOff: case AccessibilityModeTreeOnly: return false; case AccessibilityModeComplete: return true; default: NOTREACHED(); } return false; } }; IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AccessibilityModeOff) { NavigateToURL(shell(), GURL(kMinimalPageDataURL)); EXPECT_EQ(CorrectedAccessibility(AccessibilityModeOff), web_contents()->GetAccessibilityMode()); ExpectBrowserAccessibilityManager( ShouldBeBrowserAccessibilityManager(AccessibilityModeOff)); } IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AccessibilityModeComplete) { NavigateToURL(shell(), GURL(kMinimalPageDataURL)); ASSERT_EQ(CorrectedAccessibility(AccessibilityModeOff), web_contents()->GetAccessibilityMode()); AccessibilityNotificationWaiter waiter(shell()); web_contents()->AddAccessibilityMode(AccessibilityModeComplete); EXPECT_EQ(AccessibilityModeComplete, web_contents()->GetAccessibilityMode()); waiter.WaitForNotification(); ExpectBrowserAccessibilityManager( ShouldBeBrowserAccessibilityManager(AccessibilityModeComplete)); } IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AccessibilityModeTreeOnly) { NavigateToURL(shell(), GURL(kMinimalPageDataURL)); ASSERT_EQ(CorrectedAccessibility(AccessibilityModeOff), web_contents()->GetAccessibilityMode()); AccessibilityNotificationWaiter waiter(shell()); web_contents()->AddAccessibilityMode(AccessibilityModeTreeOnly); EXPECT_EQ(CorrectedAccessibility(AccessibilityModeTreeOnly), web_contents()->GetAccessibilityMode()); waiter.WaitForNotification(); // No BrowserAccessibilityManager expected for AccessibilityModeTreeOnly ExpectBrowserAccessibilityManager( ShouldBeBrowserAccessibilityManager(AccessibilityModeTreeOnly)); } IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AddingModes) { NavigateToURL(shell(), GURL(kMinimalPageDataURL)); AccessibilityNotificationWaiter waiter(shell()); web_contents()->AddAccessibilityMode(AccessibilityModeTreeOnly); EXPECT_EQ(CorrectedAccessibility(AccessibilityModeTreeOnly), web_contents()->GetAccessibilityMode()); waiter.WaitForNotification(); ExpectBrowserAccessibilityManager(ShouldBeBrowserAccessibilityManager( AccessibilityModeTreeOnly), "Should be no BrowserAccessibilityManager " "for AccessibilityModeTreeOnly"); AccessibilityNotificationWaiter waiter2(shell()); web_contents()->AddAccessibilityMode(AccessibilityModeComplete); EXPECT_EQ(AccessibilityModeComplete, web_contents()->GetAccessibilityMode()); waiter2.WaitForNotification(); ExpectBrowserAccessibilityManager(ShouldBeBrowserAccessibilityManager( AccessibilityModeComplete), "Should be a BrowserAccessibilityManager " "for AccessibilityModeComplete"); } } // namespace content