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/accessibility/accessibility_mode_helper.h"
      6 #include "content/browser/renderer_host/render_view_host_impl.h"
      7 #include "content/browser/renderer_host/render_widget_host_impl.h"
      8 #include "content/browser/renderer_host/render_widget_host_view_base.h"
      9 #include "content/browser/web_contents/web_contents_impl.h"
     10 #include "content/public/browser/render_view_host.h"
     11 #include "content/public/browser/render_widget_host.h"
     12 #include "content/public/browser/render_widget_host_view.h"
     13 #include "content/public/browser/web_contents.h"
     14 #include "content/public/common/url_constants.h"
     15 #include "content/public/test/content_browser_test.h"
     16 #include "content/public/test/content_browser_test_utils.h"
     17 #include "content/shell/browser/shell.h"
     18 #include "content/test/accessibility_browser_test_utils.h"
     19 #include "testing/gtest/include/gtest/gtest.h"
     20 
     21 namespace content {
     22 
     23 const char kMinimalPageDataURL[] =
     24     "data:text/html,<html><head></head><body>Hello, world</body></html>";
     25 
     26 class AccessibilityModeTest : public ContentBrowserTest {
     27  protected:
     28   WebContentsImpl* web_contents() {
     29     return static_cast<WebContentsImpl*>(shell()->web_contents());
     30   }
     31 
     32   void ExpectBrowserAccessibilityManager(bool expect_bam,
     33                                          std::string message = "") {
     34     if (expect_bam) {
     35       EXPECT_NE(
     36           (BrowserAccessibilityManager*)NULL,
     37           web_contents()->GetRootBrowserAccessibilityManager()) << message;
     38     } else {
     39       EXPECT_EQ(
     40           (BrowserAccessibilityManager*)NULL,
     41           web_contents()->GetRootBrowserAccessibilityManager()) << message;
     42     }
     43   }
     44 
     45   AccessibilityMode CorrectedAccessibility(AccessibilityMode mode) {
     46     return AddAccessibilityModeTo(GetBaseAccessibilityMode(), mode);
     47   }
     48 
     49   bool ShouldBeBrowserAccessibilityManager(AccessibilityMode mode) {
     50     mode = CorrectedAccessibility(mode);
     51     switch (mode) {
     52       case AccessibilityModeOff:
     53       case AccessibilityModeTreeOnly:
     54         return false;
     55       case AccessibilityModeEditableTextOnly:
     56       case AccessibilityModeComplete:
     57         return true;
     58       default:
     59         NOTREACHED();
     60     }
     61     return false;
     62   }
     63 };
     64 
     65 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AccessibilityModeOff) {
     66   NavigateToURL(shell(), GURL(kMinimalPageDataURL));
     67 
     68   EXPECT_EQ(CorrectedAccessibility(AccessibilityModeOff),
     69             web_contents()->GetAccessibilityMode());
     70   ExpectBrowserAccessibilityManager(
     71       ShouldBeBrowserAccessibilityManager(AccessibilityModeOff));
     72 }
     73 
     74 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AccessibilityModeComplete) {
     75   NavigateToURL(shell(), GURL(kMinimalPageDataURL));
     76   ASSERT_EQ(CorrectedAccessibility(AccessibilityModeOff),
     77             web_contents()->GetAccessibilityMode());
     78 
     79   AccessibilityNotificationWaiter waiter(shell());
     80   web_contents()->AddAccessibilityMode(AccessibilityModeComplete);
     81   EXPECT_EQ(AccessibilityModeComplete, web_contents()->GetAccessibilityMode());
     82   waiter.WaitForNotification();
     83   ExpectBrowserAccessibilityManager(
     84       ShouldBeBrowserAccessibilityManager(AccessibilityModeComplete));
     85 }
     86 
     87 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AccessibilityModeTreeOnly) {
     88   NavigateToURL(shell(), GURL(kMinimalPageDataURL));
     89   ASSERT_EQ(CorrectedAccessibility(AccessibilityModeOff),
     90             web_contents()->GetAccessibilityMode());
     91 
     92   AccessibilityNotificationWaiter waiter(shell());
     93   web_contents()->AddAccessibilityMode(AccessibilityModeTreeOnly);
     94   EXPECT_EQ(CorrectedAccessibility(AccessibilityModeTreeOnly),
     95             web_contents()->GetAccessibilityMode());
     96   waiter.WaitForNotification();
     97   // No BrowserAccessibilityManager expected for AccessibilityModeTreeOnly
     98   ExpectBrowserAccessibilityManager(
     99       ShouldBeBrowserAccessibilityManager(AccessibilityModeTreeOnly));
    100 }
    101 
    102 IN_PROC_BROWSER_TEST_F(AccessibilityModeTest, AddingModes) {
    103   NavigateToURL(shell(), GURL(kMinimalPageDataURL));
    104 
    105   AccessibilityNotificationWaiter waiter(shell());
    106   web_contents()->AddAccessibilityMode(AccessibilityModeTreeOnly);
    107   EXPECT_EQ(CorrectedAccessibility(AccessibilityModeTreeOnly),
    108             web_contents()->GetAccessibilityMode());
    109   waiter.WaitForNotification();
    110   ExpectBrowserAccessibilityManager(ShouldBeBrowserAccessibilityManager(
    111                                         AccessibilityModeTreeOnly),
    112                                     "Should be no BrowserAccessibilityManager "
    113                                     "for AccessibilityModeTreeOnly");
    114 
    115   AccessibilityNotificationWaiter waiter2(shell());
    116   web_contents()->AddAccessibilityMode(AccessibilityModeComplete);
    117   EXPECT_EQ(AccessibilityModeComplete, web_contents()->GetAccessibilityMode());
    118   waiter2.WaitForNotification();
    119   ExpectBrowserAccessibilityManager(ShouldBeBrowserAccessibilityManager(
    120                                           AccessibilityModeComplete),
    121                                     "Should be a BrowserAccessibilityManager "
    122                                     "for AccessibilityModeComplete");
    123 }
    124 
    125 }  // namespace content
    126