Chromium Code Reviews| Index: content/browser/accessibility/browser_accessibility_state_impl.cc |
| diff --git a/content/browser/accessibility/browser_accessibility_state_impl.cc b/content/browser/accessibility/browser_accessibility_state_impl.cc |
| index 3cb73fe8a8e1656c440ca4537933d387e658a8e2..a7af6790938dd049ddc9964290c8f61708429992 100644 |
| --- a/content/browser/accessibility/browser_accessibility_state_impl.cc |
| +++ b/content/browser/accessibility/browser_accessibility_state_impl.cc |
| @@ -7,7 +7,9 @@ |
| #include "base/command_line.h" |
| #include "base/metrics/histogram.h" |
| #include "base/timer.h" |
| +#include "content/browser/renderer_host/render_widget_host_impl.h" |
| #include "content/public/browser/browser_thread.h" |
| +#include "content/public/browser/render_process_host.h" |
| #include "content/public/common/content_switches.h" |
| #include "ui/gfx/sys_color_change_listener.h" |
| @@ -80,11 +82,15 @@ void BrowserAccessibilityStateImpl::OnScreenReaderDetected() { |
| SetAccessibilityMode(AccessibilityModeComplete); |
| } |
| -void BrowserAccessibilityStateImpl::OnAccessibilityEnabledManually() { |
| +void BrowserAccessibilityStateImpl::OnAccessibilityEnabledByExtensionAPI() { |
| // We may want to do something different with this later. |
| SetAccessibilityMode(AccessibilityModeComplete); |
| } |
| +void BrowserAccessibilityStateImpl::OnAccessibilityDisabledByExtensionAPI() { |
| + SetAccessibilityMode(AccessibilityModeOff); |
| +} |
| + |
| bool BrowserAccessibilityStateImpl::IsAccessibleBrowser() { |
| return (accessibility_mode_ == AccessibilityModeComplete); |
| } |
| @@ -117,13 +123,32 @@ void BrowserAccessibilityStateImpl::UpdatePlatformSpecificHistograms() { |
| } |
| #endif |
| -AccessibilityMode BrowserAccessibilityStateImpl::GetAccessibilityMode() { |
| - return accessibility_mode_; |
| -} |
| - |
| void BrowserAccessibilityStateImpl::SetAccessibilityMode( |
| AccessibilityMode mode) { |
| + if (accessibility_mode_ == mode) |
| + return; |
| accessibility_mode_ = mode; |
| + for (RenderProcessHost::iterator it(RenderProcessHost::AllHostsIterator()); |
| + !it.IsAtEnd(); it.Advance()) { |
| + RenderProcessHost* render_process_host = it.GetCurrentValue(); |
| + DCHECK(render_process_host); |
| + |
| + // Ignore processes that don't have a connection, such as crashed tabs. |
| + if (!render_process_host->HasConnection()) |
| + continue; |
| + |
| + RenderProcessHost::RenderWidgetHostsIterator rwit( |
|
sky
2013/05/01 00:51:22
nit: move into for loop (like you did on 131).
|
| + render_process_host->GetRenderWidgetHostsIterator()); |
| + for (; !rwit.IsAtEnd(); rwit.Advance()) { |
| + RenderWidgetHost* rwh = const_cast<RenderWidgetHost*>( |
|
sky
2013/05/01 00:51:22
I'm not sure about the const_cast here.
jam
2013/05/01 05:19:17
seems fine to me. i think it's a mistake that the
|
| + rwit.GetCurrentValue()); |
| + DCHECK(rwh); |
| + if (!rwh || !rwh->IsRenderView()) |
| + continue; |
| + RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(rwh); |
| + rwhi->SetAccessibilityMode(mode); |
| + } |
| + } |
| } |
| } // namespace content |