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 3dee7d62b33d46a055500af0e3ee6dd9d87508b0..4cd86f830b44a9c79d4e9d4eb2fc7c8ac784cb2c 100644 |
| --- a/content/browser/accessibility/browser_accessibility_state_impl.cc |
| +++ b/content/browser/accessibility/browser_accessibility_state_impl.cc |
| @@ -7,6 +7,7 @@ |
| #include "base/command_line.h" |
| #include "base/metrics/histogram.h" |
| #include "base/timer/timer.h" |
| +#include "content/browser/accessibility/accessibility_mode_helper.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" |
| @@ -80,20 +81,21 @@ void BrowserAccessibilityStateImpl::OnScreenReaderDetected() { |
| switches::kDisableRendererAccessibility)) { |
| return; |
| } |
| - SetAccessibilityMode(AccessibilityModeComplete); |
| + AddAccessibilityMode(AccessibilityModeComplete); |
| } |
| void BrowserAccessibilityStateImpl::EnableAccessibility() { |
| // We may want to do something different with this later. |
| - SetAccessibilityMode(AccessibilityModeComplete); |
| + AddAccessibilityMode(AccessibilityModeComplete); |
| } |
| void BrowserAccessibilityStateImpl::DisableAccessibility() { |
| - SetAccessibilityMode(AccessibilityModeOff); |
| + RemoveAccessibilityMode(AccessibilityModeAll); |
| } |
| bool BrowserAccessibilityStateImpl::IsAccessibleBrowser() { |
| - return (accessibility_mode_ == AccessibilityModeComplete); |
| + return ((accessibility_mode_ & AccessibilityModeComplete) == |
| + AccessibilityModeComplete); |
| } |
| void BrowserAccessibilityStateImpl::AddHistogramCallback( |
| @@ -124,12 +126,31 @@ void BrowserAccessibilityStateImpl::UpdatePlatformSpecificHistograms() { |
| } |
| #endif |
| -void BrowserAccessibilityStateImpl::SetAccessibilityMode( |
| +void BrowserAccessibilityStateImpl::AddAccessibilityMode( |
| AccessibilityMode mode) { |
| - if (accessibility_mode_ == mode) |
| + if ((accessibility_mode_ & mode) == mode) |
| return; |
| - accessibility_mode_ = mode; |
| + accessibility_mode_ = |
| + 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
|
| + |
| + AddOrRemoveFromRenderWidgets(mode, true); |
| +} |
| + |
| +void BrowserAccessibilityStateImpl::RemoveAccessibilityMode( |
| + AccessibilityMode mode) { |
| + if ((accessibility_mode_ ^ mode) == mode) |
| + return; |
| + |
| + accessibility_mode_ = |
| + content::RemoveAccessibilityMode(accessibility_mode_, mode); |
| + |
| + AddOrRemoveFromRenderWidgets(mode, false); |
| +} |
| + |
| +void BrowserAccessibilityStateImpl::AddOrRemoveFromRenderWidgets( |
| + AccessibilityMode mode, |
| + bool add) { |
| // Iterate over all RenderWidgetHosts, even swapped out ones in case |
| // they become active again. |
| scoped_ptr<RenderWidgetHostIterator> widgets( |
| @@ -141,7 +162,11 @@ void BrowserAccessibilityStateImpl::SetAccessibilityMode( |
| if (!widget->IsRenderView()) |
| continue; |
| - RenderWidgetHostImpl::From(widget)->SetAccessibilityMode(mode); |
| + RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); |
| + if (add) |
| + rwhi->AddAccessibilityMode(mode); |
| + else |
| + rwhi->RemoveAccessibilityMode(mode); |
| } |
| } |