| 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 6324fadcea03ac3b8f51ceb8d0e115201db7656d..8d703c694add7a9cce0e33735528e5b33656cea3 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,9 +18,12 @@ import android.os.Build;
|
| import android.os.Looper;
|
| import android.os.Process;
|
| import android.os.StrictMode;
|
| +import android.provider.Settings;
|
| import android.util.Log;
|
| import android.webkit.CookieManager;
|
| import android.webkit.GeolocationPermissions;
|
| +import android.webkit.ServiceWorkerController;
|
| +import android.webkit.TokenBindingService;
|
| import android.webkit.WebStorage;
|
| import android.webkit.WebView;
|
| import android.webkit.WebViewDatabase;
|
| @@ -41,6 +44,7 @@ import org.chromium.android_webview.AwGeolocationPermissions;
|
| import org.chromium.android_webview.AwNetworkChangeNotifierRegistrationPolicy;
|
| import org.chromium.android_webview.AwQuotaManagerBridge;
|
| import org.chromium.android_webview.AwResource;
|
| +import org.chromium.android_webview.AwServiceWorkerController;
|
| import org.chromium.android_webview.AwSettings;
|
| import org.chromium.android_webview.HttpAuthDatabase;
|
| import org.chromium.android_webview.R;
|
| @@ -155,10 +159,12 @@ public class WebViewChromiumFactoryProvider implements WebViewFactoryProvider {
|
| private Statics mStaticMethods;
|
| private GeolocationPermissionsAdapter mGeolocationPermissions;
|
| private CookieManagerAdapter mCookieManager;
|
| + private Object mTokenBindingManager;
|
| private WebIconDatabaseAdapter mWebIconDatabase;
|
| private WebStorageAdapter mWebStorage;
|
| private WebViewDatabaseAdapter mWebViewDatabase;
|
| private AwDevToolsServer mDevToolsServer;
|
| + private Object mServiceWorkerController;
|
|
|
| // Read/write protected by mLock.
|
| private boolean mStarted;
|
| @@ -193,6 +199,8 @@ public class WebViewChromiumFactoryProvider implements WebViewFactoryProvider {
|
| private void initialize(WebViewDelegate webViewDelegate) {
|
| mWebViewDelegate = webViewDelegate;
|
|
|
| + checkStorageIsNotDeviceProtected(mWebViewDelegate.getApplication());
|
| +
|
| // WebView needs to make sure to always use the wrapped application context.
|
| ContextUtils.initApplicationContext(
|
| ResourcesContextWrapperFactory.get(
|
| @@ -207,6 +215,13 @@ public class WebViewChromiumFactoryProvider implements WebViewFactoryProvider {
|
| CommandLine.init(null);
|
| }
|
|
|
| + if (Settings.Global.getInt(ContextUtils.getApplicationContext().getContentResolver(),
|
| + Settings.Global.WEBVIEW_MULTIPROCESS, 0)
|
| + == 1) {
|
| + CommandLine cl = CommandLine.getInstance();
|
| + cl.appendSwitch("webview-sandboxed-renderer");
|
| + }
|
| +
|
| ThreadUtils.setWillOverrideUiThread();
|
| // Load chromium library.
|
| AwBrowserProcess.loadLibrary();
|
| @@ -238,6 +253,14 @@ public class WebViewChromiumFactoryProvider implements WebViewFactoryProvider {
|
| // Now safe to use WebView data directory.
|
| }
|
|
|
| + static void checkStorageIsNotDeviceProtected(Context 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");
|
| + }
|
| + }
|
| +
|
| private static boolean isBuildDebuggable() {
|
| return !Build.TYPE.equals("user");
|
| }
|
| @@ -365,7 +388,7 @@ public class WebViewChromiumFactoryProvider implements WebViewFactoryProvider {
|
| ResourceBundle.initializeLocalePaks(context, R.array.locale_paks);
|
| initPlatSupportLibrary();
|
| initNetworkChangeNotifier(context);
|
| - final int extraBindFlags = 0;
|
| + final int extraBindFlags = Context.BIND_EXTERNAL_SERVICE;
|
| AwBrowserProcess.configureChildProcessLauncher(webViewPackageName, extraBindFlags);
|
| AwBrowserProcess.start();
|
|
|
| @@ -548,6 +571,36 @@ public class WebViewChromiumFactoryProvider implements WebViewFactoryProvider {
|
| }
|
|
|
| @Override
|
| + public ServiceWorkerController getServiceWorkerController() {
|
| + synchronized (mLock) {
|
| + if (mServiceWorkerController == null) {
|
| + ensureChromiumStartedLocked(true);
|
| + AwServiceWorkerController awServiceWorkerController =
|
| + ThreadUtils.runningOnUiThread()
|
| + ? getBrowserContextOnUiThread().getServiceWorkerController()
|
| + : runOnUiThreadBlocking(new Callable<AwServiceWorkerController>() {
|
| + @Override
|
| + public AwServiceWorkerController call() {
|
| + return getBrowserContextOnUiThread().getServiceWorkerController();
|
| + }
|
| + });
|
| + mServiceWorkerController =
|
| + new ServiceWorkerControllerAdapter(awServiceWorkerController);
|
| + }
|
| + }
|
| + return (ServiceWorkerController) mServiceWorkerController;
|
| + }
|
| +
|
| + public TokenBindingService getTokenBindingService() {
|
| + synchronized (mLock) {
|
| + if (mTokenBindingManager == null) {
|
| + mTokenBindingManager = new TokenBindingManagerAdapter(this);
|
| + }
|
| + }
|
| + return (TokenBindingService) mTokenBindingManager;
|
| + }
|
| +
|
| + @Override
|
| public android.webkit.WebIconDatabase getWebIconDatabase() {
|
| synchronized (mLock) {
|
| if (mWebIconDatabase == null) {
|
|
|