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); |
} |
} |