accessibility_mode_browsertest.cc revision 116680a4aac90f2aa7413d9095a592090648e557
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/browser/web_contents/web_contents_impl.h"
9#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_view.h"
12#include "content/public/browser/web_contents.h"
13#include "content/public/common/url_constants.h"
14#include "content/public/test/content_browser_test.h"
15#include "content/public/test/content_browser_test_utils.h"
16#include "content/shell/browser/shell.h"
17#include "content/test/accessibility_browser_test_utils.h"
18#include "testing/gtest/include/gtest/gtest.h"
19
20namespace content {
21
22const char kMinimalPageDataURL[] =
23    "data:text/html,<html><head></head><body>Hello, world</body></html>";
24
25class AccessibilityModeTest : public ContentBrowserTest {
26 protected:
27  WebContentsImpl* web_contents() {
28    return static_cast<WebContentsImpl*>(shell()->web_contents());
29  }
30
31  void ExpectBrowserAccessibilityManager(bool expect_bam,
32                                         std::string message = "") {
33    if (expect_bam) {
34      EXPECT_NE(
35          (BrowserAccessibilityManager*)NULL,
36          web_contents()->GetRootBrowserAccessibilityManager()) << message;
37    } else {
38      EXPECT_EQ(
39          (BrowserAccessibilityManager*)NULL,
40          web_contents()->GetRootBrowserAccessibilityManager()) << message;
41    }
42  }
43};
44
45IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AccessibilityModeOff) {
46  NavigateToURL(shell(), GURL(kMinimalPageDataURL));
47
48  EXPECT_EQ(AccessibilityModeOff, web_contents()->GetAccessibilityMode());
49  ExpectBrowserAccessibilityManager(false);
50}
51
52IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AccessibilityModeComplete) {
53  NavigateToURL(shell(), GURL(kMinimalPageDataURL));
54  ASSERT_EQ(AccessibilityModeOff, web_contents()->GetAccessibilityMode());
55
56  AccessibilityNotificationWaiter waiter(shell());
57  web_contents()->AddAccessibilityMode(AccessibilityModeComplete);
58  EXPECT_EQ(AccessibilityModeComplete, web_contents()->GetAccessibilityMode());
59  waiter.WaitForNotification();
60  ExpectBrowserAccessibilityManager(true);
61}
62
63IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AccessibilityModeTreeOnly) {
64  NavigateToURL(shell(), GURL(kMinimalPageDataURL));
65  ASSERT_EQ(AccessibilityModeOff, web_contents()->GetAccessibilityMode());
66
67  AccessibilityNotificationWaiter waiter(shell());
68  web_contents()->AddAccessibilityMode(AccessibilityModeTreeOnly);
69  EXPECT_EQ(AccessibilityModeTreeOnly, web_contents()->GetAccessibilityMode());
70  waiter.WaitForNotification();
71  // No BrowserAccessibilityManager expected for AccessibilityModeTreeOnly
72  ExpectBrowserAccessibilityManager(false);
73}
74
75IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AddingModes) {
76  NavigateToURL(shell(), GURL(kMinimalPageDataURL));
77
78  AccessibilityNotificationWaiter waiter(shell());
79  web_contents()->AddAccessibilityMode(AccessibilityModeTreeOnly);
80  EXPECT_EQ(AccessibilityModeTreeOnly, web_contents()->GetAccessibilityMode());
81  waiter.WaitForNotification();
82  ExpectBrowserAccessibilityManager(false,
83                                    "Should be no BrowserAccessibilityManager "
84                                    "for AccessibilityModeTreeOnly");
85
86  AccessibilityNotificationWaiter waiter2(shell());
87  web_contents()->AddAccessibilityMode(AccessibilityModeComplete);
88  EXPECT_EQ(AccessibilityModeComplete, web_contents()->GetAccessibilityMode());
89  waiter2.WaitForNotification();
90  ExpectBrowserAccessibilityManager(true,
91                                    "Should be a BrowserAccessibilityManager "
92                                    "for AccessibilityModeComplete");
93}
94
95}  // namespace content
96