diff options
author | dmazzoni@google.com <dmazzoni@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-03 16:01:54 +0000 |
---|---|---|
committer | dmazzoni@google.com <dmazzoni@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-03 16:01:54 +0000 |
commit | 2e7b652b04d1f8ac96f28073b3b00647ca8ee9a9 (patch) | |
tree | 2c1b41ca44049f47b076d6c800b1d904b3888171 /content | |
parent | c5d8cb643fe8186dc3e34c799fd455d180545d17 (diff) | |
download | chromium_src-2e7b652b04d1f8ac96f28073b3b00647ca8ee9a9.zip chromium_src-2e7b652b04d1f8ac96f28073b3b00647ca8ee9a9.tar.gz chromium_src-2e7b652b04d1f8ac96f28073b3b00647ca8ee9a9.tar.bz2 |
Merge 220541 "Defer enabling native accessibility until it's used."
> 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
TBR=dmazzoni@chromium.org
Review URL: https://codereview.chromium.org/23503028
git-svn-id: svn://svn.chromium.org/chrome/branches/1599/src@220951 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r-- | content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java | 46 |
1 files changed, 26 insertions, 20 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 223a448..6d5aa1a 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,29 +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 (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { - nativeSetAccessibilityEnabled(mNativeContentViewCore, enabled); + if (isDeviceAccessibilityScriptInjectionEnabled()) { + setInjectedAccessibility(true); + return; } + + mNativeAccessibilityAllowed = true; } /** |