| // 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 "base/logging.h" |
| #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 |