summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordmazzoni <dmazzoni@chromium.org>2014-10-21 17:39:12 -0700
committerCommit bot <commit-bot@chromium.org>2014-10-22 04:03:11 +0000
commit82f6f9885248ba9ece56af554fe8a087b74bdf02 (patch)
tree146b037209ea316b2b482ced8a36a0dfb5229c11
parent0615525b39c969fc97dc281aba780477141d942f (diff)
downloadchromium_src-82f6f9885248ba9ece56af554fe8a087b74bdf02.zip
chromium_src-82f6f9885248ba9ece56af554fe8a087b74bdf02.tar.gz
chromium_src-82f6f9885248ba9ece56af554fe8a087b74bdf02.tar.bz2
Disable accessibility when VoiceOver is turned off.
(Depends on: https://codereview.chromium.org/606703003/) BUG=251382 Review URL: https://codereview.chromium.org/602133002 Cr-Commit-Position: refs/heads/master@{#300583}
-rw-r--r--chrome/browser/chrome_browser_application_mac.mm11
-rw-r--r--content/renderer/accessibility/renderer_accessibility.h5
-rw-r--r--content/renderer/accessibility/renderer_accessibility_complete.cc16
-rw-r--r--content/renderer/accessibility/renderer_accessibility_complete.h1
-rw-r--r--content/renderer/render_frame_impl.cc5
5 files changed, 35 insertions, 3 deletions
diff --git a/chrome/browser/chrome_browser_application_mac.mm b/chrome/browser/chrome_browser_application_mac.mm
index 71c0efa..e3a8ff2 100644
--- a/chrome/browser/chrome_browser_application_mac.mm
+++ b/chrome/browser/chrome_browser_application_mac.mm
@@ -538,9 +538,14 @@ void SwizzleInit() {
}
- (void)accessibilitySetValue:(id)value forAttribute:(NSString*)attribute {
- if ([attribute isEqualToString:@"AXEnhancedUserInterface"] &&
- [value intValue] == 1) {
- content::BrowserAccessibilityState::GetInstance()->OnScreenReaderDetected();
+ // This is an undocument attribute that's set when VoiceOver is turned on/off.
+ if ([attribute isEqualToString:@"AXEnhancedUserInterface"]) {
+ content::BrowserAccessibilityState* accessibility_state =
+ content::BrowserAccessibilityState::GetInstance();
+ if ([value intValue] == 1)
+ accessibility_state->OnScreenReaderDetected();
+ else
+ accessibility_state->DisableAccessibility();
}
return [super accessibilitySetValue:value forAttribute:attribute];
}
diff --git a/content/renderer/accessibility/renderer_accessibility.h b/content/renderer/accessibility/renderer_accessibility.h
index 426c1a7..5a9534c 100644
--- a/content/renderer/accessibility/renderer_accessibility.h
+++ b/content/renderer/accessibility/renderer_accessibility.h
@@ -60,6 +60,11 @@ class CONTENT_EXPORT RendererAccessibility : public RenderFrameObserver {
// testing.
virtual RendererAccessibilityType GetType() = 0;
+ // This can be called before deleting a RendererAccessibility instance due
+ // to the accessibility mode changing, as opposed to during frame destruction
+ // (when there'd be no point).
+ virtual void DisableAccessibility() {}
+
protected:
// Returns the main top-level document for this page, or NULL if there's
// no view or frame.
diff --git a/content/renderer/accessibility/renderer_accessibility_complete.cc b/content/renderer/accessibility/renderer_accessibility_complete.cc
index e444e70..a6cfa4d 100644
--- a/content/renderer/accessibility/renderer_accessibility_complete.cc
+++ b/content/renderer/accessibility/renderer_accessibility_complete.cc
@@ -98,6 +98,22 @@ void RendererAccessibilityComplete::FocusedNodeChanged(const WebNode& node) {
}
}
+void RendererAccessibilityComplete::DisableAccessibility() {
+ RenderView* render_view = render_frame_->GetRenderView();
+ if (!render_view)
+ return;
+
+ WebView* web_view = render_view->GetWebView();
+ if (!web_view)
+ return;
+
+ WebSettings* settings = web_view->settings();
+ if (!settings)
+ return;
+
+ settings->setAccessibilityEnabled(false);
+}
+
void RendererAccessibilityComplete::HandleWebAccessibilityEvent(
const blink::WebAXObject& obj, blink::WebAXEvent event) {
HandleAXEvent(obj, AXEventFromBlink(event));
diff --git a/content/renderer/accessibility/renderer_accessibility_complete.h b/content/renderer/accessibility/renderer_accessibility_complete.h
index 96d1c6f..81b9dcb 100644
--- a/content/renderer/accessibility/renderer_accessibility_complete.h
+++ b/content/renderer/accessibility/renderer_accessibility_complete.h
@@ -47,6 +47,7 @@ class CONTENT_EXPORT RendererAccessibilityComplete
blink::WebAXEvent event) override;
RendererAccessibilityType GetType() override;
void FocusedNodeChanged(const blink::WebNode& node) override;
+ virtual void DisableAccessibility() override;
void HandleAXEvent(const blink::WebAXObject& obj, ui::AXEvent event);
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 32705ca..769db2e 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -1360,6 +1360,11 @@ void RenderFrameImpl::OnSetAccessibilityMode(AccessibilityMode new_mode) {
return;
accessibility_mode_ = new_mode;
if (renderer_accessibility_) {
+ // Note: this isn't called automatically by the destructor because
+ // there'd be no point in calling it in frame teardown, only if there's
+ // an accessibility mode change but the frame is persisting.
+ renderer_accessibility_->DisableAccessibility();
+
delete renderer_accessibility_;
renderer_accessibility_ = NULL;
}