diff options
6 files changed, 55 insertions, 0 deletions
diff --git a/core/java/android/webkit/IWebViewUpdateService.aidl b/core/java/android/webkit/IWebViewUpdateService.aidl index e17773159ec5..c6bd20cec07d 100644 --- a/core/java/android/webkit/IWebViewUpdateService.aidl +++ b/core/java/android/webkit/IWebViewUpdateService.aidl @@ -79,4 +79,9 @@ interface IWebViewUpdateService { * Used by Settings to enable/disable multiprocess. */ void enableMultiProcess(boolean enable); + + /** + * Used by Settings to get the default WebView package. + */ + WebViewProviderInfo getDefaultWebViewPackage(); } diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateService.java b/services/core/java/com/android/server/webkit/WebViewUpdateService.java index b12da61d0b3f..e9c40964aee4 100644 --- a/services/core/java/com/android/server/webkit/WebViewUpdateService.java +++ b/services/core/java/com/android/server/webkit/WebViewUpdateService.java @@ -258,6 +258,11 @@ public class WebViewUpdateService extends SystemService { } @Override // Binder call + public WebViewProviderInfo getDefaultWebViewPackage() { + return WebViewUpdateService.this.mImpl.getDefaultWebViewPackage(); + } + + @Override // Binder call public WebViewProviderInfo[] getAllWebViewPackages() { return WebViewUpdateService.this.mImpl.getWebViewPackages(); } diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java index cfdef1471f83..10d4ed288921 100644 --- a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java +++ b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl.java @@ -385,6 +385,13 @@ class WebViewUpdateServiceImpl implements WebViewUpdateServiceInterface { return providers; } + @Override + public WebViewProviderInfo getDefaultWebViewPackage() { + throw new IllegalStateException( + "getDefaultWebViewPackage shouldn't be called if update_service_v2 flag is" + + " disabled."); + } + private static class ProviderAndPackageInfo { public final WebViewProviderInfo provider; public final PackageInfo packageInfo; diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java index 89cb4c802410..29782d9b8b88 100644 --- a/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java +++ b/services/core/java/com/android/server/webkit/WebViewUpdateServiceImpl2.java @@ -24,6 +24,7 @@ import android.os.AsyncTask; import android.os.Trace; import android.os.UserHandle; import android.text.TextUtils; +import android.util.AndroidRuntimeException; import android.util.Slog; import android.webkit.UserPackage; import android.webkit.WebViewFactory; @@ -374,6 +375,23 @@ class WebViewUpdateServiceImpl2 implements WebViewUpdateServiceInterface { return providers; } + /** + * Returns the default WebView provider which should be first availableByDefault option in the + * system config. + */ + @Override + public WebViewProviderInfo getDefaultWebViewPackage() { + WebViewProviderInfo[] webviewProviders = getWebViewPackages(); + for (WebViewProviderInfo provider : webviewProviders) { + if (provider.availableByDefault) { + return provider; + } + } + // This should be unreachable because the config parser enforces that there is at least one + // availableByDefault provider. + throw new AndroidRuntimeException("No available by default WebView Provider."); + } + private static class ProviderAndPackageInfo { public final WebViewProviderInfo provider; public final PackageInfo packageInfo; diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateServiceInterface.java b/services/core/java/com/android/server/webkit/WebViewUpdateServiceInterface.java index a9c3dc45842f..1772ef9c7405 100644 --- a/services/core/java/com/android/server/webkit/WebViewUpdateServiceInterface.java +++ b/services/core/java/com/android/server/webkit/WebViewUpdateServiceInterface.java @@ -40,6 +40,8 @@ interface WebViewUpdateServiceInterface { WebViewProviderInfo[] getValidWebViewPackages(); + WebViewProviderInfo getDefaultWebViewPackage(); + PackageInfo getCurrentWebViewPackage(); boolean isMultiProcessEnabled(); diff --git a/services/tests/servicestests/src/com/android/server/webkit/WebViewUpdateServiceTest.java b/services/tests/servicestests/src/com/android/server/webkit/WebViewUpdateServiceTest.java index d00060564e74..32082e3d857e 100644 --- a/services/tests/servicestests/src/com/android/server/webkit/WebViewUpdateServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/webkit/WebViewUpdateServiceTest.java @@ -28,6 +28,7 @@ import android.content.pm.Signature; import android.os.Build; import android.os.Bundle; import android.platform.test.annotations.RequiresFlagsDisabled; +import android.platform.test.annotations.RequiresFlagsEnabled; import android.platform.test.flag.junit.CheckFlagsRule; import android.platform.test.flag.junit.DeviceFlagsValueProvider; import android.test.suitebuilder.annotation.MediumTest; @@ -1449,4 +1450,21 @@ public class WebViewUpdateServiceTest { checkPreparationPhasesForPackage(currentSdkPackage.packageName, 1 /* first preparation phase */); } + + @Test + @RequiresFlagsEnabled("android.webkit.update_service_v2") + public void testDefaultWebViewPackageIsTheFirstAvailableByDefault() { + String nonDefaultPackage = "nonDefaultPackage"; + String defaultPackage1 = "defaultPackage1"; + String defaultPackage2 = "defaultPackage2"; + WebViewProviderInfo[] packages = + new WebViewProviderInfo[] { + new WebViewProviderInfo(nonDefaultPackage, "", false, false, null), + new WebViewProviderInfo(defaultPackage1, "", true, false, null), + new WebViewProviderInfo(defaultPackage2, "", true, false, null) + }; + setupWithPackages(packages); + assertEquals( + defaultPackage1, mWebViewUpdateServiceImpl.getDefaultWebViewPackage().packageName); + } } |