Home | History | Annotate | Download | only in accessibility
      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