Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / content / browser / accessibility / accessibility_mode_browsertest.cc
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