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