Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(413)

Side by Side Diff: content/browser/accessibility/browser_accessibility_state_impl.cc

Issue 145283003: Switch AccessibilityMode to be a bitmap (Closed) Base URL: https://chromium.googlesource.com/chromium/src@enable
Patch Set: Tweak AccessibilityModeHelperTest Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/accessibility/browser_accessibility_state_impl.h" 5 #include "content/browser/accessibility/browser_accessibility_state_impl.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/metrics/histogram.h" 8 #include "base/metrics/histogram.h"
9 #include "base/timer/timer.h" 9 #include "base/timer/timer.h"
10 #include "content/browser/accessibility/accessibility_mode_helper.h"
10 #include "content/browser/renderer_host/render_widget_host_impl.h" 11 #include "content/browser/renderer_host/render_widget_host_impl.h"
11 #include "content/public/browser/browser_thread.h" 12 #include "content/public/browser/browser_thread.h"
12 #include "content/public/browser/render_process_host.h" 13 #include "content/public/browser/render_process_host.h"
13 #include "content/public/browser/render_widget_host_iterator.h" 14 #include "content/public/browser/render_widget_host_iterator.h"
14 #include "content/public/common/content_switches.h" 15 #include "content/public/common/content_switches.h"
15 #include "ui/gfx/sys_color_change_listener.h" 16 #include "ui/gfx/sys_color_change_listener.h"
16 17
17 #if defined(OS_WIN) 18 #if defined(OS_WIN)
18 #include "base/win/windows_version.h" 19 #include "base/win/windows_version.h"
19 #endif 20 #endif
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 } 74 }
74 75
75 BrowserAccessibilityStateImpl::~BrowserAccessibilityStateImpl() { 76 BrowserAccessibilityStateImpl::~BrowserAccessibilityStateImpl() {
76 } 77 }
77 78
78 void BrowserAccessibilityStateImpl::OnScreenReaderDetected() { 79 void BrowserAccessibilityStateImpl::OnScreenReaderDetected() {
79 if (CommandLine::ForCurrentProcess()->HasSwitch( 80 if (CommandLine::ForCurrentProcess()->HasSwitch(
80 switches::kDisableRendererAccessibility)) { 81 switches::kDisableRendererAccessibility)) {
81 return; 82 return;
82 } 83 }
83 SetAccessibilityMode(AccessibilityModeComplete); 84 AddAccessibilityMode(AccessibilityModeComplete);
84 } 85 }
85 86
86 void BrowserAccessibilityStateImpl::EnableAccessibility() { 87 void BrowserAccessibilityStateImpl::EnableAccessibility() {
87 // We may want to do something different with this later. 88 // We may want to do something different with this later.
88 SetAccessibilityMode(AccessibilityModeComplete); 89 AddAccessibilityMode(AccessibilityModeComplete);
89 } 90 }
90 91
91 void BrowserAccessibilityStateImpl::DisableAccessibility() { 92 void BrowserAccessibilityStateImpl::DisableAccessibility() {
92 SetAccessibilityMode(AccessibilityModeOff); 93 RemoveAccessibilityMode(AccessibilityModeAll);
93 } 94 }
94 95
95 bool BrowserAccessibilityStateImpl::IsAccessibleBrowser() { 96 bool BrowserAccessibilityStateImpl::IsAccessibleBrowser() {
96 return (accessibility_mode_ == AccessibilityModeComplete); 97 return ((accessibility_mode_ & AccessibilityModeComplete) ==
98 AccessibilityModeComplete);
97 } 99 }
98 100
99 void BrowserAccessibilityStateImpl::AddHistogramCallback( 101 void BrowserAccessibilityStateImpl::AddHistogramCallback(
100 base::Closure callback) { 102 base::Closure callback) {
101 histogram_callbacks_.push_back(callback); 103 histogram_callbacks_.push_back(callback);
102 } 104 }
103 105
104 void BrowserAccessibilityStateImpl::UpdateHistogramsForTesting() { 106 void BrowserAccessibilityStateImpl::UpdateHistogramsForTesting() {
105 UpdateHistograms(); 107 UpdateHistograms();
106 } 108 }
(...skipping 10 matching lines...) Expand all
117 UMA_HISTOGRAM_BOOLEAN("Accessibility.ManuallyEnabled", 119 UMA_HISTOGRAM_BOOLEAN("Accessibility.ManuallyEnabled",
118 CommandLine::ForCurrentProcess()->HasSwitch( 120 CommandLine::ForCurrentProcess()->HasSwitch(
119 switches::kForceRendererAccessibility)); 121 switches::kForceRendererAccessibility));
120 } 122 }
121 123
122 #if !defined(OS_WIN) 124 #if !defined(OS_WIN)
123 void BrowserAccessibilityStateImpl::UpdatePlatformSpecificHistograms() { 125 void BrowserAccessibilityStateImpl::UpdatePlatformSpecificHistograms() {
124 } 126 }
125 #endif 127 #endif
126 128
127 void BrowserAccessibilityStateImpl::SetAccessibilityMode( 129 void BrowserAccessibilityStateImpl::AddAccessibilityMode(
128 AccessibilityMode mode) { 130 AccessibilityMode mode) {
129 if (accessibility_mode_ == mode) 131 if ((accessibility_mode_ & mode) == mode)
130 return; 132 return;
131 accessibility_mode_ = mode;
132 133
134 accessibility_mode_ =
135 content::AddAccessibilityMode(accessibility_mode_, mode);
David Tseng 2014/02/04 20:25:51 By setting text only, then complete, I would end u
aboxhall 2014/02/05 16:02:47 Complete + text only should be considered to be te
136
137 AddOrRemoveFromRenderWidgets(mode, true);
138 }
139
140 void BrowserAccessibilityStateImpl::RemoveAccessibilityMode(
141 AccessibilityMode mode) {
142 if ((accessibility_mode_ ^ mode) == mode)
143 return;
144
145 accessibility_mode_ =
146 content::RemoveAccessibilityMode(accessibility_mode_, mode);
147
148 AddOrRemoveFromRenderWidgets(mode, false);
149 }
150
151 void BrowserAccessibilityStateImpl::AddOrRemoveFromRenderWidgets(
152 AccessibilityMode mode,
153 bool add) {
133 // Iterate over all RenderWidgetHosts, even swapped out ones in case 154 // Iterate over all RenderWidgetHosts, even swapped out ones in case
134 // they become active again. 155 // they become active again.
135 scoped_ptr<RenderWidgetHostIterator> widgets( 156 scoped_ptr<RenderWidgetHostIterator> widgets(
136 RenderWidgetHostImpl::GetAllRenderWidgetHosts()); 157 RenderWidgetHostImpl::GetAllRenderWidgetHosts());
137 while (RenderWidgetHost* widget = widgets->GetNextHost()) { 158 while (RenderWidgetHost* widget = widgets->GetNextHost()) {
138 // Ignore processes that don't have a connection, such as crashed tabs. 159 // Ignore processes that don't have a connection, such as crashed tabs.
139 if (!widget->GetProcess()->HasConnection()) 160 if (!widget->GetProcess()->HasConnection())
140 continue; 161 continue;
141 if (!widget->IsRenderView()) 162 if (!widget->IsRenderView())
142 continue; 163 continue;
143 164
144 RenderWidgetHostImpl::From(widget)->SetAccessibilityMode(mode); 165 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget);
166 if (add)
167 rwhi->AddAccessibilityMode(mode);
168 else
169 rwhi->RemoveAccessibilityMode(mode);
145 } 170 }
146 } 171 }
147 172
148 } // namespace content 173 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698