• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
7 #if defined(OS_WIN)
8 #include "base/command_line.h"
9 #include "base/win/windows_version.h"
10 #include "content/public/common/content_switches.h"
11 #endif
12 
13 namespace content {
14 
15 namespace {
16 
CastToAccessibilityMode(unsigned int int_mode)17 AccessibilityMode CastToAccessibilityMode(unsigned int int_mode) {
18   AccessibilityMode mode = static_cast<AccessibilityMode>(int_mode);
19   switch (mode) {
20   case AccessibilityModeOff:
21   case AccessibilityModeComplete:
22   case AccessibilityModeEditableTextOnly:
23   case AccessibilityModeTreeOnly:
24     return mode;
25   }
26   DCHECK(false) << "Could not convert to AccessibilityMode: " << int_mode;
27   return AccessibilityModeOff;
28 }
29 
30 }  // namespace
31 
AddAccessibilityModeTo(AccessibilityMode to,AccessibilityMode mode_to_add)32 AccessibilityMode AddAccessibilityModeTo(AccessibilityMode to,
33                                          AccessibilityMode mode_to_add) {
34   return CastToAccessibilityMode(to | mode_to_add);
35 }
36 
RemoveAccessibilityModeFrom(AccessibilityMode from,AccessibilityMode mode_to_remove)37 AccessibilityMode RemoveAccessibilityModeFrom(
38     AccessibilityMode from,
39     AccessibilityMode mode_to_remove) {
40   unsigned int new_mode = from ^ (mode_to_remove & from);
41 #if defined(OS_WIN)
42   // On Windows 8, always enable accessibility for editable text controls
43   // so we can show the virtual keyboard when one is enabled.
44   if (base::win::GetVersion() >= base::win::VERSION_WIN8 &&
45       !CommandLine::ForCurrentProcess()->HasSwitch(
46           switches::kDisableRendererAccessibility)) {
47     if ((from & AccessibilityModeEditableTextOnly) ==
48         AccessibilityModeEditableTextOnly)
49       new_mode |= AccessibilityModeEditableTextOnly;
50   }
51 #endif  // defined(OS_WIN)
52 
53   return CastToAccessibilityMode(new_mode);
54 }
55 
56 }  // namespace content
57