diff options
| author | 2023-11-23 18:41:52 +0000 | |
|---|---|---|
| committer | 2023-11-28 16:32:13 +0000 | |
| commit | 0a245fb6547503fd2565dc3cff6841cf679f5938 (patch) | |
| tree | 5625b446d410152b81994d5fe9e9ebe74c925e84 | |
| parent | 0645abefeaff3c429215d94822e156ff5912feee (diff) | |
Add a method to get the default webview provider
The method will be used by settings to get which package to keep enabled.
Also, this defines which package we will fallback to for the modified findPreferredWebViewPackage.
Test: atest com.android.server.webkit.WebViewUpdateServiceTest
Bug: 308907090
Change-Id: Ib5efef1b04ba2fe098ef2695e56902818f0a20c9
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); + } } |