blob: df7dff93594b192d701c15e1daa681b0019f70df [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]fa4f91682012-02-21 19:53:2618// Update the accessibility histogram 45 seconds after initialization.
19static const int kAccessibilityHistogramDelaySecs = 45;
20
21// static
22BrowserAccessibilityState* BrowserAccessibilityState::GetInstance() {
23 return BrowserAccessibilityStateImpl::GetInstance();
24}
25
26// static
27BrowserAccessibilityStateImpl* BrowserAccessibilityStateImpl::GetInstance() {
[email protected]b90cad72012-04-10 23:27:5328 return Singleton<BrowserAccessibilityStateImpl,
29 LeakySingletonTraits<BrowserAccessibilityStateImpl> >::get();
[email protected]fa4f91682012-02-21 19:53:2630}
31
32BrowserAccessibilityStateImpl::BrowserAccessibilityStateImpl()
33 : BrowserAccessibilityState(),
[email protected]e2fa1cca42012-08-22 14:07:2734 accessibility_mode_(AccessibilityModeOff) {
35#if defined(OS_WIN)
36 // On Windows 8, always enable accessibility for editable text controls
37 // so we can show the virtual keyboard when one is enabled.
38 if (base::win::GetVersion() >= base::win::VERSION_WIN8 &&
39 !CommandLine::ForCurrentProcess()->HasSwitch(
40 switches::kDisableRendererAccessibility)) {
41 accessibility_mode_ = AccessibilityModeEditableTextOnly;
42 }
43#endif // defined(OS_WIN)
44
[email protected]3e3c4522012-04-13 21:16:2945 if (CommandLine::ForCurrentProcess()->HasSwitch(
46 switches::kForceRendererAccessibility)) {
[email protected]e2fa1cca42012-08-22 14:07:2747 accessibility_mode_ = AccessibilityModeComplete;
[email protected]3e3c4522012-04-13 21:16:2948 }
[email protected]e2fa1cca42012-08-22 14:07:2749
[email protected]18df7362012-10-24 01:29:4050 // UpdateHistogram only takes a couple of milliseconds, but run it on
51 // the FILE thread to guarantee there's no jank.
[email protected]3c17ae742012-10-24 17:37:2652 // And we need to AddRef() the leaky singleton so that Bind doesn't
53 // delete it prematurely.
54 AddRef();
[email protected]18df7362012-10-24 01:29:4055 content::BrowserThread::PostDelayedTask(
56 content::BrowserThread::FILE, FROM_HERE,
57 base::Bind(&BrowserAccessibilityStateImpl::UpdateHistogram, this),
58 base::TimeDelta::FromSeconds(kAccessibilityHistogramDelaySecs));
[email protected]fa4f91682012-02-21 19:53:2659}
60
61BrowserAccessibilityStateImpl::~BrowserAccessibilityStateImpl() {
62}
63
64void BrowserAccessibilityStateImpl::OnScreenReaderDetected() {
[email protected]3e3c4522012-04-13 21:16:2965 if (CommandLine::ForCurrentProcess()->HasSwitch(
66 switches::kDisableRendererAccessibility)) {
67 return;
68 }
[email protected]e2fa1cca42012-08-22 14:07:2769 SetAccessibilityMode(AccessibilityModeComplete);
[email protected]fa4f91682012-02-21 19:53:2670}
71
72void BrowserAccessibilityStateImpl::OnAccessibilityEnabledManually() {
73 // We may want to do something different with this later.
[email protected]e2fa1cca42012-08-22 14:07:2774 SetAccessibilityMode(AccessibilityModeComplete);
[email protected]fa4f91682012-02-21 19:53:2675}
76
77bool BrowserAccessibilityStateImpl::IsAccessibleBrowser() {
[email protected]e2fa1cca42012-08-22 14:07:2778 return (accessibility_mode_ == AccessibilityModeComplete);
[email protected]fa4f91682012-02-21 19:53:2679}
80
81void BrowserAccessibilityStateImpl::UpdateHistogram() {
[email protected]18df7362012-10-24 01:29:4082 UpdatePlatformSpecificHistograms();
83
84 UMA_HISTOGRAM_BOOLEAN("Accessibility.State", IsAccessibleBrowser());
85 UMA_HISTOGRAM_BOOLEAN("Accessibility.InvertedColors",
86 gfx::IsInvertedColorScheme());
87 UMA_HISTOGRAM_BOOLEAN("Accessibility.ManuallyEnabled",
88 CommandLine::ForCurrentProcess()->HasSwitch(
89 switches::kForceRendererAccessibility));
[email protected]fa4f91682012-02-21 19:53:2690}
[email protected]e2fa1cca42012-08-22 14:07:2791
[email protected]18df7362012-10-24 01:29:4092#if !defined(OS_WIN)
93void BrowserAccessibilityStateImpl::UpdatePlatformSpecificHistograms() {
94}
95#endif
96
[email protected]e2fa1cca42012-08-22 14:07:2797AccessibilityMode BrowserAccessibilityStateImpl::GetAccessibilityMode() {
98 return accessibility_mode_;
99}
100
101void BrowserAccessibilityStateImpl::SetAccessibilityMode(
102 AccessibilityMode mode) {
103 accessibility_mode_ = mode;
104}