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 3 // found in the LICENSE file. 4 5 #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_view_base.h" 8 #include "content/public/browser/render_view_host.h" 9 #include "content/public/browser/render_widget_host.h" 10 #include "content/public/browser/render_widget_host_view.h" 11 #include "content/public/browser/web_contents.h" 12 #include "content/public/common/url_constants.h" 13 #include "content/public/test/content_browser_test.h" 14 #include "content/public/test/content_browser_test_utils.h" 15 #include "content/shell/browser/shell.h" 16 #include "content/test/accessibility_browser_test_utils.h" 17 #include "testing/gtest/include/gtest/gtest.h" 18 19 namespace content { 20 21 const char kMinimalPageDataURL[] = 22 "data:text/html,<html><head></head><body>Hello, world</body></html>"; 23 24 class AccessibilityModeTest : public ContentBrowserTest { 25 protected: 26 WebContents* web_contents() { 27 return shell()->web_contents(); 28 } 29 30 RenderWidgetHostImpl* rwhi() { 31 RenderWidgetHost* rwh = 32 web_contents()->GetRenderWidgetHostView()->GetRenderWidgetHost(); 33 return RenderWidgetHostImpl::From(rwh); 34 } 35 36 RenderWidgetHostViewBase* host_view() { 37 return static_cast<RenderWidgetHostViewBase*>( 38 shell()->web_contents()->GetRenderWidgetHostView()); 39 } 40 41 void ExpectBrowserAccessibilityManager(bool expect_bam, 42 std::string message = "") { 43 if (expect_bam) { 44 EXPECT_NE((BrowserAccessibilityManager*)NULL, 45 host_view()->GetBrowserAccessibilityManager()) << message; 46 } else { 47 EXPECT_EQ((BrowserAccessibilityManager*)NULL, 48 host_view()->GetBrowserAccessibilityManager()) << message; 49 } 50 } 51 }; 52 53 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AccessibilityModeOff) { 54 NavigateToURL(shell(), GURL(kMinimalPageDataURL)); 55 56 EXPECT_EQ(AccessibilityModeOff, rwhi()->accessibility_mode()); 57 ExpectBrowserAccessibilityManager(false); 58 } 59 60 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AccessibilityModeComplete) { 61 NavigateToURL(shell(), GURL(kMinimalPageDataURL)); 62 ASSERT_EQ(AccessibilityModeOff, rwhi()->accessibility_mode()); 63 64 AccessibilityNotificationWaiter waiter(shell()); 65 rwhi()->AddAccessibilityMode(AccessibilityModeComplete); 66 EXPECT_EQ(AccessibilityModeComplete, rwhi()->accessibility_mode()); 67 waiter.WaitForNotification(); 68 ExpectBrowserAccessibilityManager(true); 69 } 70 71 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AccessibilityModeTreeOnly) { 72 NavigateToURL(shell(), GURL(kMinimalPageDataURL)); 73 ASSERT_EQ(AccessibilityModeOff, rwhi()->accessibility_mode()); 74 75 AccessibilityNotificationWaiter waiter(shell()); 76 rwhi()->AddAccessibilityMode(AccessibilityModeTreeOnly); 77 EXPECT_EQ(AccessibilityModeTreeOnly, rwhi()->accessibility_mode()); 78 waiter.WaitForNotification(); 79 // No BrowserAccessibilityManager expected for AccessibilityModeTreeOnly 80 ExpectBrowserAccessibilityManager(false); 81 } 82 83 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AddingModes) { 84 NavigateToURL(shell(), GURL(kMinimalPageDataURL)); 85 86 AccessibilityNotificationWaiter waiter(shell()); 87 rwhi()->AddAccessibilityMode(AccessibilityModeTreeOnly); 88 EXPECT_EQ(AccessibilityModeTreeOnly, rwhi()->accessibility_mode()); 89 waiter.WaitForNotification(); 90 ExpectBrowserAccessibilityManager(false, 91 "Should be no BrowserAccessibilityManager " 92 "for AccessibilityModeTreeOnly"); 93 94 AccessibilityNotificationWaiter waiter2(shell()); 95 rwhi()->AddAccessibilityMode(AccessibilityModeComplete); 96 EXPECT_EQ(AccessibilityModeComplete, rwhi()->accessibility_mode()); 97 waiter2.WaitForNotification(); 98 ExpectBrowserAccessibilityManager(true, 99 "Should be a BrowserAccessibilityManager " 100 "for AccessibilityModeComplete"); 101 } 102 103 } // namespace content 104