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 7fdab1a07998a77d03de253807259d256427d4db..f45c31d2776807ff2e06e1d28dfd1c8cef521952 100644 |
--- a/content/browser/accessibility/browser_accessibility_state_impl.cc |
+++ b/content/browser/accessibility/browser_accessibility_state_impl.cc |
@@ -9,8 +9,9 @@ |
#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/browser/web_contents/web_contents_impl.h" |
#include "content/public/browser/browser_thread.h" |
+#include "content/public/browser/render_process_host.h" |
+#include "content/public/browser/render_widget_host_iterator.h" |
#include "content/public/common/content_switches.h" |
#include "ui/gfx/sys_color_change_listener.h" |
@@ -98,10 +99,20 @@ |
void BrowserAccessibilityStateImpl::ResetAccessibilityMode() { |
ResetAccessibilityModeValue(); |
- std::vector<WebContentsImpl*> web_contents_vector = |
- WebContentsImpl::GetAllWebContents(); |
- for (size_t i = 0; i < web_contents_vector.size(); ++i) |
- web_contents_vector[i]->SetAccessibilityMode(accessibility_mode()); |
+ // Iterate over all RenderWidgetHosts, even swapped out ones in case |
+ // they become active again. |
+ scoped_ptr<RenderWidgetHostIterator> widgets( |
+ RenderWidgetHostImpl::GetAllRenderWidgetHosts()); |
+ while (RenderWidgetHost* widget = widgets->GetNextHost()) { |
+ // Ignore processes that don't have a connection, such as crashed tabs. |
+ if (!widget->GetProcess()->HasConnection()) |
+ continue; |
+ if (!widget->IsRenderView()) |
+ continue; |
+ |
+ RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); |
+ rwhi->ResetAccessibilityMode(); |
+ } |
} |
bool BrowserAccessibilityStateImpl::IsAccessibleBrowser() { |
@@ -147,7 +158,7 @@ |
accessibility_mode_ = |
content::AddAccessibilityModeTo(accessibility_mode_, mode); |
- AddOrRemoveFromAllWebContents(mode, true); |
+ AddOrRemoveFromRenderWidgets(mode, true); |
} |
void BrowserAccessibilityStateImpl::RemoveAccessibilityMode( |
@@ -161,19 +172,28 @@ |
accessibility_mode_ = |
content::RemoveAccessibilityModeFrom(accessibility_mode_, mode); |
- AddOrRemoveFromAllWebContents(mode, false); |
-} |
- |
-void BrowserAccessibilityStateImpl::AddOrRemoveFromAllWebContents( |
+ AddOrRemoveFromRenderWidgets(mode, false); |
+} |
+ |
+void BrowserAccessibilityStateImpl::AddOrRemoveFromRenderWidgets( |
AccessibilityMode mode, |
bool add) { |
- std::vector<WebContentsImpl*> web_contents_vector = |
- WebContentsImpl::GetAllWebContents(); |
- for (size_t i = 0; i < web_contents_vector.size(); ++i) { |
+ // Iterate over all RenderWidgetHosts, even swapped out ones in case |
+ // they become active again. |
+ scoped_ptr<RenderWidgetHostIterator> widgets( |
+ RenderWidgetHostImpl::GetAllRenderWidgetHosts()); |
+ while (RenderWidgetHost* widget = widgets->GetNextHost()) { |
+ // Ignore processes that don't have a connection, such as crashed tabs. |
+ if (!widget->GetProcess()->HasConnection()) |
+ continue; |
+ if (!widget->IsRenderView()) |
+ continue; |
+ |
+ RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); |
if (add) |
- web_contents_vector[i]->AddAccessibilityMode(mode); |
+ rwhi->AddAccessibilityMode(mode); |
else |
- web_contents_vector[i]->RemoveAccessibilityMode(mode); |
+ rwhi->RemoveAccessibilityMode(mode); |
} |
} |