diff options
author | dmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-30 09:05:09 +0000 |
---|---|---|
committer | dmazzoni@chromium.org <dmazzoni@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-30 09:05:09 +0000 |
commit | 20490fff158974af63b0458b2a32eb09f1fdeb13 (patch) | |
tree | 975ebf509605b871576ae9dd2c90646383498d86 /content/public | |
parent | edb2d03a1c39b34ef1cc1e34227d595fb6c40510 (diff) | |
download | chromium_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.java | 47 |
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; } /** |