Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / content / browser / accessibility / accessibility_mode_helper.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/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
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     return mode;
24   }
25   DCHECK(false) << "Could not convert to AccessibilityMode: " << int_mode;
26   return AccessibilityModeOff;
27 }
28
29 }  // namespace
30
31 AccessibilityMode AddAccessibilityModeTo(AccessibilityMode to,
32                                          AccessibilityMode mode_to_add) {
33   return CastToAccessibilityMode(to | mode_to_add);
34 }
35
36 AccessibilityMode RemoveAccessibilityModeFrom(
37     AccessibilityMode from,
38     AccessibilityMode mode_to_remove) {
39   unsigned int new_mode = from ^ (mode_to_remove & from);
40 #if defined(OS_WIN)
41   // On Windows 8, always enable accessibility for editable text controls
42   // so we can show the virtual keyboard when one is enabled.
43   if (base::win::GetVersion() >= base::win::VERSION_WIN8 &&
44       !CommandLine::ForCurrentProcess()->HasSwitch(
45           switches::kDisableRendererAccessibility)) {
46     if ((from & AccessibilityModeEditableTextOnly) ==
47         AccessibilityModeEditableTextOnly)
48       new_mode |= AccessibilityModeEditableTextOnly;
49   }
50 #endif  // defined(OS_WIN)
51
52   return CastToAccessibilityMode(new_mode);
53 }
54
55 }  // namespace content