Index: content/browser/accessibility/accessibility_mode_helper.cc |
diff --git a/content/browser/accessibility/accessibility_mode_helper.cc b/content/browser/accessibility/accessibility_mode_helper.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b753e1ca5b52b5f3ce4a7676f0a9a9e23438e939 |
--- /dev/null |
+++ b/content/browser/accessibility/accessibility_mode_helper.cc |
@@ -0,0 +1,55 @@ |
+// Copyright (c) 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "content/browser/accessibility/accessibility_mode_helper.h" |
+ |
+#if defined(OS_WIN) |
+#include "base/command_line.h" |
+#include "base/win/windows_version.h" |
+#include "content/public/common/content_switches.h" |
+#endif |
+ |
+namespace content { |
+ |
+namespace { |
+ |
+AccessibilityMode CastToAccessibilityMode(unsigned int int_mode) { |
+ AccessibilityMode mode = static_cast<AccessibilityMode>(int_mode); |
+ switch (mode) { |
+ case AccessibilityModeOff: |
+ case AccessibilityModeComplete: |
+ case AccessibilityModeEditableTextOnly: |
+ return mode; |
+ } |
+ DCHECK(false) << "Could not convert to AccessibilityMode: " << int_mode; |
+ return AccessibilityModeOff; |
+} |
+ |
+} // namespace |
+ |
+AccessibilityMode AddAccessibilityModeTo(AccessibilityMode to, |
+ AccessibilityMode mode_to_add) { |
+ return CastToAccessibilityMode(to | mode_to_add); |
+} |
+ |
+AccessibilityMode RemoveAccessibilityModeFrom( |
+ AccessibilityMode from, |
+ AccessibilityMode mode_to_remove) { |
+ unsigned int new_mode = from ^ (mode_to_remove & from); |
+#if defined(OS_WIN) |
+ // On Windows 8, always enable accessibility for editable text controls |
+ // so we can show the virtual keyboard when one is enabled. |
+ if (base::win::GetVersion() >= base::win::VERSION_WIN8 && |
+ !CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kDisableRendererAccessibility)) { |
+ if ((from & AccessibilityModeEditableTextOnly) == |
+ AccessibilityModeEditableTextOnly) |
+ new_mode |= AccessibilityModeEditableTextOnly; |
+ } |
+#endif // defined(OS_WIN) |
+ |
+ return CastToAccessibilityMode(new_mode); |
+} |
+ |
+} // namespace content |