summaryrefslogtreecommitdiffstats
path: root/content/public
diff options
context:
space:
mode:
authordmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-30 09:05:09 +0000
committerdmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-30 09:05:09 +0000
commit20490fff158974af63b0458b2a32eb09f1fdeb13 (patch)
tree975ebf509605b871576ae9dd2c90646383498d86 /content/public
parentedb2d03a1c39b34ef1cc1e34227d595fb6c40510 (diff)
downloadchromium_src-20490fff158974af63b0458b2a32eb09f1fdeb13.zip
chromium_src-20490fff158974af63b0458b2a32eb09f1fdeb13.tar.gz
chromium_src-20490fff158974af63b0458b2a32eb09f1fdeb13.tar.bz2
Defer enabling native accessibility until it's used.
We were enabling native accessibility if any accessibility service was running, but many Android users have accessibility services other than screen readers. Now we only enable native accessibility if getAccessibilityNodeProvider is called on the web content. Many popular Android apps that happen to be accessibility services will no longer trigger Chrome's accessibility mode. BUG=280717 Review URL: https://chromiumcodereview.appspot.com/23750002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@220541 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/public')
-rw-r--r--content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java47
1 files changed, 26 insertions, 21 deletions
diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
index e540feb..5e25e50 100644
--- a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
+++ b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java
@@ -403,6 +403,12 @@ import java.util.Map;
// The AccessibilityInjector that handles loading Accessibility scripts into the web page.
private AccessibilityInjector mAccessibilityInjector;
+ // Whether native accessibility, i.e. without any script injection, is allowed.
+ private boolean mNativeAccessibilityAllowed;
+
+ // Whether native accessibility, i.e. without any script injection, has been enabled.
+ private boolean mNativeAccessibilityEnabled;
+
// Handles native accessibility, i.e. without any script injection.
private BrowserAccessibilityManager mBrowserAccessibilityManager;
@@ -2769,14 +2775,23 @@ import java.util.Map;
* If native accessibility (not script injection) is enabled, and if this is
* running on JellyBean or later, returns an AccessibilityNodeProvider that
* implements native accessibility for this view. Returns null otherwise.
+ * Lazily initializes native accessibility here if it's allowed.
* @return The AccessibilityNodeProvider, if available, or null otherwise.
*/
public AccessibilityNodeProvider getAccessibilityNodeProvider() {
if (mBrowserAccessibilityManager != null) {
return mBrowserAccessibilityManager.getAccessibilityNodeProvider();
- } else {
- return null;
}
+
+ if (mNativeAccessibilityAllowed &&
+ !mNativeAccessibilityEnabled &&
+ mNativeContentViewCore != 0 &&
+ Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
+ mNativeAccessibilityEnabled = true;
+ nativeSetAccessibilityEnabled(mNativeContentViewCore, true);
+ }
+
+ return null;
}
/**
@@ -2863,30 +2878,20 @@ import java.util.Map;
* Turns browser accessibility on or off.
* If |state| is |false|, this turns off both native and injected accessibility.
* Otherwise, if accessibility script injection is enabled, this will enable the injected
- * accessibility scripts, and if it is disabled this will enable the native accessibility.
+ * accessibility scripts. Native accessibility is enabled on demand.
*/
public void setAccessibilityState(boolean state) {
- boolean injectedAccessibility = false;
- boolean nativeAccessibility = false;
- if (state) {
- if (isDeviceAccessibilityScriptInjectionEnabled()) {
- injectedAccessibility = true;
- } else {
- nativeAccessibility = true;
- }
+ if (!state) {
+ setInjectedAccessibility(false);
+ return;
}
- setInjectedAccessibility(injectedAccessibility);
- setNativeAccessibilityState(nativeAccessibility);
- }
- /**
- * Enable or disable native accessibility features.
- */
- public void setNativeAccessibilityState(boolean enabled) {
- if (mNativeContentViewCore == 0) return;
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
- nativeSetAccessibilityEnabled(mNativeContentViewCore, enabled);
+ if (isDeviceAccessibilityScriptInjectionEnabled()) {
+ setInjectedAccessibility(true);
+ return;
}
+
+ mNativeAccessibilityAllowed = true;
}
/**