Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(117)

Unified Diff: content/browser/accessibility/browser_accessibility_state_impl.cc

Issue 145283003: Switch AccessibilityMode to be a bitmap (Closed) Base URL: https://chromium.googlesource.com/chromium/src@enable
Patch Set: Removed AccessibilityModeFlagRenderer, etc. Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..5e3eef7fa09ea9abe5105b9d394ce151bc4097d0 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"
@@ -37,21 +38,7 @@ BrowserAccessibilityStateImpl* BrowserAccessibilityStateImpl::GetInstance() {
BrowserAccessibilityStateImpl::BrowserAccessibilityStateImpl()
: BrowserAccessibilityState(),
accessibility_mode_(AccessibilityModeOff) {
-#if defined(OS_WIN)
- // On Windows 8, always enable accessibility for editable text controls
- // so we can show the virtual keyboard when one is enabled.
- if (base::win::GetVersion() >= base::win::VERSION_WIN8 &&
- !CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kDisableRendererAccessibility)) {
- accessibility_mode_ = AccessibilityModeEditableTextOnly;
- }
-#endif // defined(OS_WIN)
-
- if (CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kForceRendererAccessibility)) {
- accessibility_mode_ = AccessibilityModeComplete;
- }
-
+ ResetAccessibilityMode();
#if defined(OS_WIN)
// On Windows, UpdateHistograms calls some system functions with unknown
// runtime, so call it on the file thread to ensure there's no jank.
@@ -76,24 +63,54 @@ BrowserAccessibilityStateImpl::~BrowserAccessibilityStateImpl() {
}
void BrowserAccessibilityStateImpl::OnScreenReaderDetected() {
- if (CommandLine::ForCurrentProcess()->HasSwitch(
- 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);
+ ResetAccessibilityMode();
+}
+
+void BrowserAccessibilityStateImpl::ResetAccessibilityMode() {
+ accessibility_mode_ = AccessibilityModeOff;
+#if defined(OS_WIN)
+ // On Windows 8, always enable accessibility for editable text controls
+ // so we can show the virtual keyboard when one is enabled.
+ if (base::win::GetVersion() >= base::win::VERSION_WIN8 &&
+ !CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kDisableRendererAccessibility)) {
+ accessibility_mode_ = AccessibilityModeEditableTextOnly;
+ }
+#endif // defined(OS_WIN)
+
+ if (CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kForceRendererAccessibility)) {
David Tseng 2014/02/06 19:13:44 We should remove one of switches::kDisableRenderer
aboxhall 2014/02/06 21:04:12 Possibly; do you want me to do it in this CL?
+ accessibility_mode_ = AccessibilityModeComplete;
+ }
+
+ // 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() {
- return (accessibility_mode_ == AccessibilityModeComplete);
+ return ((accessibility_mode_ & AccessibilityModeComplete) ==
+ AccessibilityModeComplete);
}
void BrowserAccessibilityStateImpl::AddHistogramCallback(
@@ -124,12 +141,36 @@ void BrowserAccessibilityStateImpl::UpdatePlatformSpecificHistograms() {
}
#endif
-void BrowserAccessibilityStateImpl::SetAccessibilityMode(
+void BrowserAccessibilityStateImpl::AddAccessibilityMode(
AccessibilityMode mode) {
- if (accessibility_mode_ == mode)
+ if ((accessibility_mode_ & mode) == mode)
+ return;
+
+ if (CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kDisableRendererAccessibility)) {
return;
- accessibility_mode_ = mode;
+ }
+
+ accessibility_mode_ =
+ content::AddAccessibilityModeTo(accessibility_mode_, mode);
+
+ AddOrRemoveFromRenderWidgets(mode, true);
+}
+
+void BrowserAccessibilityStateImpl::RemoveAccessibilityMode(
+ AccessibilityMode mode) {
+ if ((accessibility_mode_ ^ mode) == mode)
+ return;
+
+ accessibility_mode_ =
+ content::RemoveAccessibilityModeFrom(accessibility_mode_, mode);
David Tseng 2014/02/06 19:13:44 Seems like the command line switches related to fo
aboxhall 2014/02/06 21:04:12 Done.
+
+ 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 +182,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);
}
}

Powered by Google App Engine
This is Rietveld 408576698