Chromium Code Reviews| Index: android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java |
| diff --git a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java |
| index 2ef597bfab1af55fa202d279a6c2850544ddf6dd..d7547a38b18184044c1548a6df7d3659dfd62d66 100644 |
| --- a/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java |
| +++ b/android_webview/glue/java/src/com/android/webview/chromium/WebViewChromiumFactoryProvider.java |
| @@ -18,6 +18,7 @@ import android.os.Build; |
| import android.os.Looper; |
| import android.os.Process; |
| import android.os.StrictMode; |
| +import android.os.UserManager; |
| import android.provider.Settings; |
| import android.util.Log; |
| import android.webkit.CookieManager; |
| @@ -199,12 +200,11 @@ public class WebViewChromiumFactoryProvider implements WebViewFactoryProvider { |
| private void initialize(WebViewDelegate webViewDelegate) { |
| mWebViewDelegate = webViewDelegate; |
| - checkStorageIsNotDeviceProtected(mWebViewDelegate.getApplication()); |
| + Context ctx = switchToCredentialProtectedStorage( |
| + mWebViewDelegate.getApplication().getApplicationContext()); |
| // WebView needs to make sure to always use the wrapped application context. |
| - ContextUtils.initApplicationContext( |
| - ResourcesContextWrapperFactory.get( |
| - mWebViewDelegate.getApplication().getApplicationContext())); |
| + ContextUtils.initApplicationContext(ResourcesContextWrapperFactory.get(ctx)); |
| if (isBuildDebuggable()) { |
| // Suppress the StrictMode violation as this codepath is only hit on debuggable builds. |
| @@ -253,12 +253,20 @@ public class WebViewChromiumFactoryProvider implements WebViewFactoryProvider { |
| // Now safe to use WebView data directory. |
| } |
| - static void checkStorageIsNotDeviceProtected(Context context) { |
| + // Webview must use a CredentialEncrypted Context. If context is a CE context, then simply |
| + // return it without modification. Otherwise, create a new CE context and return that instead. |
| + static Context switchToCredentialProtectedStorage(Context context) { |
| + // For versions N+, android webview must use a CredentialEncrypted Context |
| if ((Build.VERSION.CODENAME.equals("N") || Build.VERSION.SDK_INT > Build.VERSION_CODES.M) |
| && context.isDeviceProtectedStorage()) { |
| - throw new IllegalArgumentException( |
| - "WebView cannot be used with device protected storage"); |
| + context = context.createCredentialProtectedStorageContext(); |
| + |
| + if (!context.getSystemService(UserManager.class).isUserUnlocked()) { |
|
Torne
2016/09/22 09:59:54
I think you should be getting a lint warning about
Nate Fischer
2016/09/22 19:47:49
I don't think I received a lint warning. I was abl
Torne
2016/09/23 11:13:15
I think they happen during the build, not in presu
|
| + throw new IllegalArgumentException( |
| + "WebView cannot be used with device protected storage"); |
| + } |
| } |
| + return context; |
| } |
| private static boolean isBuildDebuggable() { |