Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |