blob: 8e7fde11ff4948186fe9e425fb6db337a0c14678 [file] [log] [blame]
[email protected]fa4f91682012-02-21 19:53:261// Copyright (c) 2012 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/browser_accessibility_state_impl.h"
6
[email protected]3e3c4522012-04-13 21:16:297#include "base/command_line.h"
[email protected]fa4f91682012-02-21 19:53:268#include "base/metrics/histogram.h"
9#include "base/timer.h"
[email protected]18df7362012-10-24 01:29:4010#include "content/public/browser/browser_thread.h"
[email protected]3e3c4522012-04-13 21:16:2911#include "content/public/common/content_switches.h"
[email protected]123f0d042012-03-17 04:52:1112#include "ui/gfx/sys_color_change_listener.h"
[email protected]fa4f91682012-02-21 19:53:2613
[email protected]e2fa1cca42012-08-22 14:07:2714#if defined(OS_WIN)
15#include "base/win/windows_version.h"
16#endif
17
[email protected]e6b34872012-10-24 20:51:3218namespace content {
19
[email protected]fa4f91682012-02-21 19:53:2620// Update the accessibility histogram 45 seconds after initialization.
21static const int kAccessibilityHistogramDelaySecs = 45;
22
23// static
24BrowserAccessibilityState* BrowserAccessibilityState::GetInstance() {
25 return BrowserAccessibilityStateImpl::GetInstance();
26}
27
28// static
29BrowserAccessibilityStateImpl* BrowserAccessibilityStateImpl::GetInstance() {
[email protected]b90cad72012-04-10 23:27:5330 return Singleton<BrowserAccessibilityStateImpl,
31 LeakySingletonTraits<BrowserAccessibilityStateImpl> >::get();
[email protected]fa4f91682012-02-21 19:53:2632}
33
34BrowserAccessibilityStateImpl::BrowserAccessibilityStateImpl()
35 : BrowserAccessibilityState(),
[email protected]e2fa1cca42012-08-22 14:07:2736 accessibility_mode_(AccessibilityModeOff) {
37#if defined(OS_WIN)
38 // On Windows 8, always enable accessibility for editable text controls
39 // so we can show the virtual keyboard when one is enabled.
40 if (base::win::GetVersion() >= base::win::VERSION_WIN8 &&
41 !CommandLine::ForCurrentProcess()->HasSwitch(
42 switches::kDisableRendererAccessibility)) {
43 accessibility_mode_ = AccessibilityModeEditableTextOnly;
44 }
45#endif // defined(OS_WIN)
46
[email protected]3e3c4522012-04-13 21:16:2947 if (CommandLine::ForCurrentProcess()->HasSwitch(
48 switches::kForceRendererAccessibility)) {
[email protected]e2fa1cca42012-08-22 14:07:2749 accessibility_mode_ = AccessibilityModeComplete;
[email protected]3e3c4522012-04-13 21:16:2950 }
[email protected]e2fa1cca42012-08-22 14:07:2751
[email protected]18df7362012-10-24 01:29:4052 // UpdateHistogram only takes a couple of milliseconds, but run it on
53 // the FILE thread to guarantee there's no jank.
[email protected]3c17ae742012-10-24 17:37:2654 // And we need to AddRef() the leaky singleton so that Bind doesn't
55 // delete it prematurely.
56 AddRef();
[email protected]e6b34872012-10-24 20:51:3257 BrowserThread::PostDelayedTask(
58 BrowserThread::FILE, FROM_HERE,
[email protected]18df7362012-10-24 01:29:4059 base::Bind(&BrowserAccessibilityStateImpl::UpdateHistogram, this),
60 base::TimeDelta::FromSeconds(kAccessibilityHistogramDelaySecs));
[email protected]fa4f91682012-02-21 19:53:2661}
62
63BrowserAccessibilityStateImpl::~BrowserAccessibilityStateImpl() {
64}
65
66void BrowserAccessibilityStateImpl::OnScreenReaderDetected() {
[email protected]3e3c4522012-04-13 21:16:2967 if (CommandLine::ForCurrentProcess()->HasSwitch(
68 switches::kDisableRendererAccessibility)) {
69 return;
70 }
[email protected]e2fa1cca42012-08-22 14:07:2771 SetAccessibilityMode(AccessibilityModeComplete);
[email protected]fa4f91682012-02-21 19:53:2672}
73
74void BrowserAccessibilityStateImpl::OnAccessibilityEnabledManually() {
75 // We may want to do something different with this later.
[email protected]e2fa1cca42012-08-22 14:07:2776 SetAccessibilityMode(AccessibilityModeComplete);
[email protected]fa4f91682012-02-21 19:53:2677}
78
79bool BrowserAccessibilityStateImpl::IsAccessibleBrowser() {
[email protected]e2fa1cca42012-08-22 14:07:2780 return (accessibility_mode_ == AccessibilityModeComplete);
[email protected]fa4f91682012-02-21 19:53:2681}
82
83void BrowserAccessibilityStateImpl::UpdateHistogram() {
[email protected]18df7362012-10-24 01:29:4084 UpdatePlatformSpecificHistograms();
85
86 UMA_HISTOGRAM_BOOLEAN("Accessibility.State", IsAccessibleBrowser());
87 UMA_HISTOGRAM_BOOLEAN("Accessibility.InvertedColors",
88 gfx::IsInvertedColorScheme());
89 UMA_HISTOGRAM_BOOLEAN("Accessibility.ManuallyEnabled",
90 CommandLine::ForCurrentProcess()->HasSwitch(
91 switches::kForceRendererAccessibility));
[email protected]fa4f91682012-02-21 19:53:2692}
[email protected]e2fa1cca42012-08-22 14:07:2793
[email protected]18df7362012-10-24 01:29:4094#if !defined(OS_WIN)
95void BrowserAccessibilityStateImpl::UpdatePlatformSpecificHistograms() {
96}
97#endif
98
[email protected]e2fa1cca42012-08-22 14:07:2799AccessibilityMode BrowserAccessibilityStateImpl::GetAccessibilityMode() {
100 return accessibility_mode_;
101}
102
103void BrowserAccessibilityStateImpl::SetAccessibilityMode(
104 AccessibilityMode mode) {
105 accessibility_mode_ = mode;
106}
[email protected]e6b34872012-10-24 20:51:32107
108} // namespace content