diff options
Diffstat (limited to 'chromium/content/browser/accessibility/accessibility_mode_helper.cc')
-rw-r--r-- | chromium/content/browser/accessibility/accessibility_mode_helper.cc | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/chromium/content/browser/accessibility/accessibility_mode_helper.cc b/chromium/content/browser/accessibility/accessibility_mode_helper.cc new file mode 100644 index 00000000000..7988595aa21 --- /dev/null +++ b/chromium/content/browser/accessibility/accessibility_mode_helper.cc @@ -0,0 +1,56 @@ +// Copyright 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: + case AccessibilityModeTreeOnly: + 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 |